ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDUyZjI4OWUuLjNlNWZiN2IgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMTIwLDEwICsxMjAsNiBAQAogRTogZGRpY2tleUBjaGFydGVyLm5ldAogRDogRkFEUyBTdXBwb3J0CiAKLU46IEphbWVzIEYuIERvdWdoZXJ0eQotRTogamZkQEdpZ2FiaXROZXR3b3Jrcy5DT00KLUQ6IFBvcnQgdG8gdGhlIE1PVVNTRSBib2FyZAotCiBOOiBNaWtlIER1bm4KIEU6IG1pa2VkdW5uQG5ld3NndXkuY29tCiBEOiBQYWxtdHJlbzY4MCBib2FyZCwgZG9jZzQgbmFuZCBmbGFzaCBkcml2ZXIKZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IDcwNWEwYmIuLjAyMGU2NWYgMTAwNzU1Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtNDE4LDUwICs0MTgsOCBAQAogIyMgTUlQUyBTeXN0ZW1zCQkoZGVmYXVsdCA9IGJpZyBlbmRpYW4pCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLUxJU1RfbWlwczRrYz0iCQlcCi0JaW5jYWlwCQlcCi0JaW5jYWlwXzEwME1IeglcCi0JaW5jYWlwXzEzM01IeglcCi0JaW5jYWlwXzE1ME1IeglcCi0JcWVtdV9taXBzCVwKLQl2Y3RfcGxhdGludW0JXAotCXZjdF9wbGF0aW51bV9zbWFsbAlcCi0JdmN0X3BsYXRpbnVtX29uZW5hbmQJXAotCXZjdF9wbGF0aW51bV9vbmVuYW5kX3NtYWxsCVwKLQl2Y3RfcGxhdGludW1hdmMJXAotCXZjdF9wbGF0aW51bWF2Y19zbWFsbAlcCi0JdmN0X3BsYXRpbnVtYXZjX29uZW5hbmQJXAotCXZjdF9wbGF0aW51bWF2Y19vbmVuYW5kX3NtYWxsCVwKLQl2Y3RfcHJlbWl1bQlcCi0JdmN0X3ByZW1pdW1fc21hbGwJXAotCXZjdF9wcmVtaXVtX29uZW5hbmQJXAotCXZjdF9wcmVtaXVtX29uZW5hbmRfc21hbGwJXAotIgotCi1MSVNUX2F1MXh4MD0iCQlcCi0JZGJhdTEwMDAJXAotCWRiYXUxMTAwCVwKLQlkYmF1MTUwMAlcCi0JZGJhdTE1NTAJXAotIgotCi1MSVNUX21pcHM9IgkJXAotCSR7TElTVF9taXBzNGtjfQlcCi0JJHtMSVNUX21pcHM1a2N9CVwKLQkke0xJU1RfYXUxeHgwfQlcCi0iCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMjIE1JUFMgU3lzdGVtcwkJKGxpdHRsZSBlbmRpYW4pCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSVNUX21pcHM9IiQodGFyZ2V0c19ieV9hcmNoIG1pcHMpIgogCi1MSVNUX2F1MXh4MF9lbD0iCVwKLQlkYmF1MTU1MF9lbAlcCi0JcGIxMDAwCQlcCi0iCi1MSVNUX21pcHNfZWw9IgkJCVwKLQkke0xJU1RfYXUxeHgwX2VsfQlcCi0iCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBPcGVuUklTQyBTeXN0ZW1zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDViMzU0OTYuLjg0MGMzOWIgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xMjcsNyArMTI3LDcgQEAKIEtCVUlMRF9PVVRQVVQgOj0gJChzaGVsbCBta2RpciAtcCAkKEtCVUlMRF9PVVRQVVQpICYmIGNkICQoS0JVSUxEX09VVFBVVCkgXAogCQkJCQkJCQkmJiAvYmluL3B3ZCkKICQoaWYgJChLQlVJTERfT1VUUFVUKSwsIFwKLSAgICAgJChlcnJvciBvdXRwdXQgZGlyZWN0b3J5ICIkKHNhdmVkLW91dHB1dCkiIGRvZXMgbm90IGV4aXN0KSkKKyAgICAgJChlcnJvciBmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBkaXJlY3RvcnkgIiQoc2F2ZWQtb3V0cHV0KSIpKQogCiBQSE9OWSArPSAkKE1BS0VDTURHT0FMUykgc3ViLW1ha2UKIApAQCAtMjA1LDcgKzIwNSwxNCBAQAogCSAgZWxzZSBlY2hvIHNoOyBmaSA7IGZpKQogCiBIT1NUQ0MgICAgICAgPSBnY2MKK0hPU1RDWFggICAgICA9IGcrKwogSE9TVENGTEFHUyAgID0gLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIKK0hPU1RDWFhGTEFHUyA9IC1PMgorCitpZmVxICgkKHNoZWxsICQoSE9TVENDKSAtdiAyPiYxIHwgZ3JlcCAtYyAiY2xhbmcgdmVyc2lvbiIpLCAxKQorSE9TVENGTEFHUyAgKz0gLVduby11bnVzZWQtdmFsdWUgLVduby11bnVzZWQtcGFyYW1ldGVyIFwKKwkJLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAtZm5vLWRlbGV0ZS1udWxsLXBvaW50ZXItY2hlY2tzCitlbmRpZgogCiBpZmVxICgkKEhPU1RPUyksY3lnd2luKQogSE9TVENGTEFHUwkrPSAtYW5zaQpAQCAtMzAxLDEyICszMDgsMjYgQEAKICMgSWYgdGhlIHVzZXIgaXMgcnVubmluZyBtYWtlIC1zIChzaWxlbnQgbW9kZSksIHN1cHByZXNzIGVjaG9pbmcgb2YKICMgY29tbWFuZHMKIAoraWZuZXEgKCQoZmlsdGVyIDQuJSwkKE1BS0VfVkVSU0lPTikpLCkJIyBtYWtlLTQKK2lmbmVxICgkKGZpbHRlciAlcyAsJChmaXJzdHdvcmQgeCQoTUFLRUZMQUdTKSkpLCkKKyAgcXVpZXQ9c2lsZW50XworZW5kaWYKK2Vsc2UJCQkJCSMgbWFrZS0zLjh4CiBpZm5lcSAoJChmaWx0ZXIgcyUgLXMlLCQoTUFLRUZMQUdTKSksKQogICBxdWlldD1zaWxlbnRfCiBlbmRpZgorZW5kaWYKIAogZXhwb3J0IHF1aWV0IFEgS0JVSUxEX1ZFUkJPU0UKIAoraWZuZXEgKCQoQ0MpLCkKK2lmZXEgKCQoc2hlbGwgJChDQykgLXYgMj4mMSB8IGdyZXAgLWMgImNsYW5nIHZlcnNpb24iKSwgMSkKK0NPTVBJTEVSIDo9IGNsYW5nCitlbHNlCitDT01QSUxFUiA6PSBnY2MKK2VuZGlmCitleHBvcnQgQ09NUElMRVIKK2VuZGlmCiAKICMgTG9vayBmb3IgbWFrZSBpbmNsdWRlIGZpbGVzIHJlbGF0aXZlIHRvIHJvb3Qgb2Yga2VybmVsIHNyYwogTUFLRUZMQUdTICs9IC0taW5jbHVkZS1kaXI9JChzcmN0cmVlKQpAQCAtMzY4LDggKzM4OSw5IEBACiAKICMgRmlsZXMgdG8gaWdub3JlIGluIGZpbmQgLi4uIHN0YXRlbWVudHMKIAotUkNTX0ZJTkRfSUdOT1JFIDo9IFwoIC1uYW1lIFNDQ1MgLW8gLW5hbWUgQml0S2VlcGVyIC1vIC1uYW1lIC5zdm4gLW8gLW5hbWUgQ1ZTIFwKLQkJICAgLW8gLW5hbWUgLnBjIC1vIC1uYW1lIC5oZyAtbyAtbmFtZSAuZ2l0IFwpIC1wcnVuZSAtbworZXhwb3J0IFJDU19GSU5EX0lHTk9SRSA6PSBcKCAtbmFtZSBTQ0NTIC1vIC1uYW1lIEJpdEtlZXBlciAtbyAtbmFtZSAuc3ZuIC1vICAgIFwKKwkJCSAgLW5hbWUgQ1ZTIC1vIC1uYW1lIC5wYyAtbyAtbmFtZSAuaGcgLW8gLW5hbWUgLmdpdCBcKSBcCisJCQkgIC1wcnVuZSAtbwogZXhwb3J0IFJDU19UQVJfSUdOT1JFIDo9IC0tZXhjbHVkZSBTQ0NTIC0tZXhjbHVkZSBCaXRLZWVwZXIgLS1leGNsdWRlIC5zdm4gXAogCQkJIC0tZXhjbHVkZSBDVlMgLS1leGNsdWRlIC5wYyAtLWV4Y2x1ZGUgLmhnIC0tZXhjbHVkZSAuZ2l0CiAKQEAgLTUyMyw2ICs1NDUsMjAgQEAKIAogS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1mbm8tc3RhY2stcHJvdGVjdG9yKQogCitpZmVxICgkKENPTVBJTEVSKSxjbGFuZykKK0tCVUlMRF9DUFBGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1RdW51c2VkLWFyZ3VtZW50cywpCitLQlVJTERfQ1BQRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtV25vLXVua25vd24td2FybmluZy1vcHRpb24sKQorS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCB1bnVzZWQtdmFyaWFibGUpCitLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIGZvcm1hdC1pbnZhbGlkLXNwZWNpZmllcikKK0tCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLWRpc2FibGUtd2FybmluZywgZ251KQorIyBRdWlldCBjbGFuZyB3YXJuaW5nOiBjb21wYXJpc29uIG9mIHVuc2lnbmVkIGV4cHJlc3Npb24gPCAwIGlzIGFsd2F5cyBmYWxzZQorS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCB0YXV0b2xvZ2ljYWwtY29tcGFyZSkKKyMgQ0xBTkcgdXNlcyBhIF9NZXJnZWRHbG9iYWxzIGFzIG9wdGltaXphdGlvbiwgYnV0IHRoaXMgYnJlYWtzIG1vZHBvc3QsIGFzIHRoZQorIyBzb3VyY2Ugb2YgYSByZWZlcmVuY2Ugd2lsbCBiZSBfTWVyZ2VkR2xvYmFscyBhbmQgbm90IG9uIG9mIHRoZSB3aGl0ZWxpc3RlZCBuYW1lcy4KKyMgU2VlIG1vZHBvc3QgcGF0dGVybiAyCitLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sIC1tbm8tZ2xvYmFsLW1lcmdlLCkKK2VuZGlmCisKIEtCVUlMRF9DRkxBR1MJKz0gLWcKICMgJChLQlVJTERfQUZMQUdTKSBzZXRzIC1nLCB3aGljaCBjYXVzZXMgZ2NjIHRvIHBhc3MgYSBzdWl0YWJsZSAtZzxmb3JtYXQ+CiAjIG9wdGlvbiB0byB0aGUgYXNzZW1ibGVyLgpAQCAtNTQ4LDYgKzU4NCwxMSBAQAogCiBleHBvcnQgQ09ORklHX1NZU19URVhUX0JBU0UKIAorIyBBZGQgdXNlciBzdXBwbGllZCBDUFBGTEFHUywgQUZMQUdTIGFuZCBDRkxBR1MgYXMgdGhlIGxhc3QgYXNzaWdubWVudHMKK0tCVUlMRF9DUFBGTEFHUyArPSAkKEtDUFBGTEFHUykKK0tCVUlMRF9BRkxBR1MgKz0gJChLQUZMQUdTKQorS0JVSUxEX0NGTEFHUyArPSAkKEtDRkxBR1MpCisKICMgVXNlIFVCT09USU5DTFVERSB3aGVuIHlvdSBtdXN0IHJlZmVyZW5jZSB0aGUgaW5jbHVkZS8gZGlyZWN0b3J5LgogIyBOZWVkZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBPPSBvcHRpb24KIFVCT09USU5DTFVERSAgICA6PSBcCkBAIC02OTksNyArNzQwLDExIEBACiAKIEFMTC0kKENPTkZJR19OQU5EX1VfQk9PVCkgKz0gdS1ib290LW5hbmQuYmluCiBBTEwtJChDT05GSUdfT05FTkFORF9VX0JPT1QpICs9IHUtYm9vdC1vbmVuYW5kLmJpbgoraWZlcSAoJChDT05GSUdfU1BMX0ZTTF9QQkwpLHkpCitBTEwtJChDT05GSUdfUkFNQk9PVF9QQkwpICs9IHUtYm9vdC13aXRoLXNwbC1wYmwuYmluCitlbHNlCiBBTEwtJChDT05GSUdfUkFNQk9PVF9QQkwpICs9IHUtYm9vdC5wYmwKK2VuZGlmCiBBTEwtJChDT05GSUdfU1BMKSArPSBzcGwvdS1ib290LXNwbC5iaW4KIEFMTC0kKENPTkZJR19TUExfRlJBTUVXT1JLKSArPSB1LWJvb3QuaW1nCiBBTEwtJChDT05GSUdfVFBMKSArPSB0cGwvdS1ib290LXRwbC5iaW4KQEAgLTg5NCw2ICs5MzksMjEgQEAKIHUtYm9vdC1pbWcuYmluOiBzcGwvdS1ib290LXNwbC5iaW4gdS1ib290LmltZyBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGNhdCkKIAorI0FkZCBhIHRhcmdldCB0byBjcmVhdGUgYm9vdCBiaW5hcnkgaGF2aW5nIFNQTCBiaW5hcnkgaW4gUEJJIGZvcm1hdAorI2NvbmNhdGVuYXRlZCB3aXRoIHUtYm9vdCBiaW5hcnkuIEl0IGlzIG5lZWQgYnkgUG93ZXJQQyBTb0MgaGF2aW5nCisjaW50ZXJuYWwgU1JBTSA8PSA1MTJLQi4KK01LSU1BR0VGTEFHU191LWJvb3Qtc3BsLnBibCA9IC1uICQoc3JjdHJlZSkvJChDT05GSUdfU1lTX0ZTTF9QQkxfUkNXOiIlIj0lKSBcCisJCS1SICQoc3JjdHJlZSkvJChDT05GSUdfU1lTX0ZTTF9QQkxfUEJJOiIlIj0lKSAtVCBwYmxpbWFnZQorCitzcGwvdS1ib290LXNwbC5wYmw6IHNwbC91LWJvb3Qtc3BsLmJpbiBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLG1raW1hZ2UpCisKK09CSkNPUFlGTEFHU191LWJvb3Qtd2l0aC1zcGwtcGJsLmJpbiA9IC1JIGJpbmFyeSAtTyBiaW5hcnkgLS1wYWQtdG89JChDT05GSUdfU1BMX1BBRF9UTykgXAorCQkJICAtLWdhcC1maWxsPTB4ZmYKKwordS1ib290LXdpdGgtc3BsLXBibC5iaW46IHNwbC91LWJvb3Qtc3BsLnBibCB1LWJvb3QuYmluIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQscGFkX2NhdCkKKwogIyBQUEM0eHggbmVlZHMgdGhlIFNQTCBhdCB0aGUgZW5kIG9mIHRoZSBpbWFnZSwgc2luY2UgdGhlIHJlc2V0IHZlY3RvcgogIyBpcyBsb2NhdGVkIGF0IDB4ZmZmZmZmZmMuIFNvIHdlIGNhbid0IHVzZSB0aGUgInUtYm9vdC1pbWcuYmluIiB0YXJnZXQKICMgYW5kIG5lZWQgdG8gaW50cm9kdWNlIGEgbmV3IGJ1aWxkIHRhcmdldCB3aXRoIHRoZSBmdWxsIGJsb3duIFUtQm9vdApAQCAtMTE3OCw3ICsxMjM4LDggQEAKIENMT0JCRVJfRklMRVMgKz0gdS1ib290KiBNTE8qIFNQTCBTeXN0ZW0ubWFwIG5hbmRfc3BsL3UtYm9vdCoKIAogIyBEaXJlY3RvcmllcyAmIGZpbGVzIHJlbW92ZWQgd2l0aCAnbWFrZSBtcnByb3BlcicKLU1SUFJPUEVSX0RJUlMgICs9IGluY2x1ZGUvY29uZmlnIGluY2x1ZGUvZ2VuZXJhdGVkCitNUlBST1BFUl9ESVJTICArPSBpbmNsdWRlL2NvbmZpZyBpbmNsdWRlL2dlbmVyYXRlZCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAudG1wX29iamRpZmYKIE1SUFJPUEVSX0ZJTEVTICs9IC5jb25maWcgLmNvbmZpZy5vbGQgXAogCQkgIHRhZ3MgVEFHUyBjc2NvcGUqIEdQQVRIIEdUQUdTIEdSVEFHUyBHU1lNUyBcCiAJCSAgaW5jbHVkZS9jb25maWcuaCBpbmNsdWRlL2NvbmZpZy5tawpAQCAtMTI0NCw4ICsxMzA1LDggQEAKIAlAZmluZCAkKHNyY3RyZWUpICQoUkNTX0ZJTkRfSUdOT1JFKSBcCiAJCVwoIC1uYW1lICcqLm9yaWcnIC1vIC1uYW1lICcqLnJlaicgLW8gLW5hbWUgJyp+JyBcCiAJCS1vIC1uYW1lICcqLmJhaycgLW8gLW5hbWUgJyMqIycgLW8gLW5hbWUgJy4qLm9yaWcnIFwKLQkJLW8gLW5hbWUgJy4qLnJlaicgLW8gLW5hbWUgJyoucHljJyBcCi0JCS1vIC1uYW1lICcqJScgLW8gLW5hbWUgJy4qLmNtZCcgLW8gLW5hbWUgJ2NvcmUnIFwpIFwKKwkJLW8gLW5hbWUgJy4qLnJlaicgLW8gLW5hbWUgJyolJyAtbyAtbmFtZSAnY29yZScgXAorCQktbyAtbmFtZSAnKi5weWMnIFwpIFwKIAkJLXR5cGUgZiAtcHJpbnQgfCB4YXJncyBybSAtZgogCiBiYWNrdXA6CmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggYzk5OTBlNi4uNjE4NTFiMyAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMTMyLDYgKzEzMiwxMCBAQAogPT09PT09PT09PT09PT09PT09PT0KIAogL2FyY2gJCQlBcmNoaXRlY3R1cmUgc3BlY2lmaWMgZmlsZXMKKyAgL2FyYwkJCUZpbGVzIGdlbmVyaWMgdG8gQVJDIGFyY2hpdGVjdHVyZQorICAgIC9jcHUJCUNQVSBzcGVjaWZpYyBmaWxlcworICAgICAgL2FyYzcwMAkJRmlsZXMgc3BlY2lmaWMgdG8gQVJDIDcwMCBDUFVzCisgICAgL2xpYgkJQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGxpYnJhcnkgZmlsZXMKICAgL2FybQkJCUZpbGVzIGdlbmVyaWMgdG8gQVJNIGFyY2hpdGVjdHVyZQogICAgIC9jcHUJCUNQVSBzcGVjaWZpYyBmaWxlcwogICAgICAgL2FybTcyMHQJCUZpbGVzIHNwZWNpZmljIHRvIEFSTSA3MjAgQ1BVcwpAQCAtMTY0LDcgKzE2OCw3IEBACiAgIC9taXBzCQkJRmlsZXMgZ2VuZXJpYyB0byBNSVBTIGFyY2hpdGVjdHVyZQogICAgIC9jcHUJCUNQVSBzcGVjaWZpYyBmaWxlcwogICAgICAgL21pcHMzMgkJRmlsZXMgc3BlY2lmaWMgdG8gTUlQUzMyIENQVXMKLSAgICAgIC94YnVyc3QJCUZpbGVzIHNwZWNpZmljIHRvIEluZ2VuaWMgWEJ1cnN0IENQVXMKKyAgICAgIC9taXBzNjQJCUZpbGVzIHNwZWNpZmljIHRvIE1JUFM2NCBDUFVzCiAgICAgL2xpYgkJQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGxpYnJhcnkgZmlsZXMKICAgL25kczMyCQlGaWxlcyBnZW5lcmljIHRvIE5EUzMyIGFyY2hpdGVjdHVyZQogICAgIC9jcHUJCUNQVSBzcGVjaWZpYyBmaWxlcwpAQCAtNDI3LDYgKzQzMSwxNCBAQAogCQlJbiB0aGlzIG1vZGUsIGEgc2luZ2xlIGRpZmZlcmVudGlhbCBjbG9jayBpcyB1c2VkIHRvIHN1cHBseQogCQljbG9ja3MgdG8gdGhlIHN5c2Nsb2NrLCBkZHJjbG9jayBhbmQgdXNiY2xvY2suCiAKKwkJQ09ORklHX1NZU19DUENfUkVJTklUX0YKKwkJVGhpcyBDT05GSUcgaXMgZGVmaW5lZCB3aGVuIHRoZSBDUEMgaXMgY29uZmlndXJlZCBhcyBTUkFNIGF0IHRoZQorCQl0aW1lIG9mIFUtYm9vdCBlbnRyeSBhbmQgaXMgcmVxdWlyZWQgdG8gYmUgcmUtaW5pdGlhbGl6ZWQuCisKKwkJQ09ORklHX0RFRVBfU0xFRVAKKwkJSW5pZGNhdGVzIHRoaXMgU29DIHN1cHBvcnRzIGRlZXAgc2xlZXAgZmVhdHVyZS4gSWYgZGVlcCBzbGVlcCBpcworCQlzdXBwb3J0ZWQsIGNvcmUgd2lsbCBzdGFydCB0byBleGVjdXRlIHVib290IHdoZW4gd2FrZXMgdXAuCisKIC0gR2VuZXJpYyBDUFUgb3B0aW9uczoKIAkJQ09ORklHX1NZU19CSUdfRU5ESUFOLCBDT05GSUdfU1lTX0xJVFRMRV9FTkRJQU4KIApAQCAtNDU0LDYgKzQ2Niw5IEBACiAJCUNPTkZJR19TWVNfRlNMX0REUkNfR0VOMwogCQlGcmVlc2NhbGUgRERSMyBjb250cm9sbGVyLgogCisJCUNPTkZJR19TWVNfRlNMX0REUkNfR0VONAorCQlGcmVlc2NhbGUgRERSNCBjb250cm9sbGVyLgorCiAJCUNPTkZJR19TWVNfRlNMX0REUkNfQVJNX0dFTjMKIAkJRnJlZXNjYWxlIEREUjMgY29udHJvbGxlciBmb3IgQVJNLWJhc2VkIFNvQ3MuCiAKQEAgLTQ2OSw3ICs0ODQsMTUgQEAKIAogCQlDT05GSUdfU1lTX0ZTTF9ERFIzCiAJCUJvYXJkIGNvbmZpZyB0byB1c2UgRERSMy4gSXQgY2FuIGJlIGVuYWJsZWQgZm9yIFNvQ3Mgd2l0aAotCQlGcmVlc2NhbGUgRERSMyBjb250cm9sbGVycy4KKwkJRnJlZXNjYWxlIEREUjMgb3IgRERSM0wgY29udHJvbGxlcnMuCisKKwkJQ09ORklHX1NZU19GU0xfRERSM0wKKwkJQm9hcmQgY29uZmlnIHRvIHVzZSBERFIzTC4gSXQgY2FuIGJlIGVuYWJsZWQgZm9yIFNvQ3Mgd2l0aAorCQlERFIzTCBjb250cm9sbGVycy4KKworCQlDT05GSUdfU1lTX0ZTTF9ERFI0CisJCUJvYXJkIGNvbmZpZyB0byB1c2UgRERSNC4gSXQgY2FuIGJlIGVuYWJsZWQgZm9yIFNvQ3Mgd2l0aAorCQlERFI0IGNvbnRyb2xsZXJzLgogCiAJCUNPTkZJR19TWVNfRlNMX0lGQ19CRQogCQlEZWZpbmVzIHRoZSBJRkMgY29udHJvbGxlciByZWdpc3RlciBzcGFjZSBhcyBCaWcgRW5kaWFuCkBAIC00ODYsNiArNTA5LDEwIEBACiAJCVBCSSBjb21tYW5kcyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgU29DIGJlZm9yZSBpdCBzdGFydHMgdGhlIGV4ZWN1dGlvbi4KIAkJUGxlYXNlIHJlZmVyIGRvYy9SRUFETUUucGJsaW1hZ2UgZm9yIG1vcmUgZGV0YWlscwogCisJCUNPTkZJR19TUExfRlNMX1BCTAorCQlJdCBhZGRzIGEgdGFyZ2V0IHRvIGNyZWF0ZSBib290IGJpbmFyeSBoYXZpbmcgU1BMIGJpbmFyeSBpbiBQQkkgZm9ybWF0CisJCWNvbmNhdGVuYXRlZCB3aXRoIHUtYm9vdCBiaW5hcnkuCisKIAkJQ09ORklHX1NZU19GU0xfRERSX0JFCiAJCURlZmluZXMgdGhlIEREUiBjb250cm9sbGVyIHJlZ2lzdGVyIHNwYWNlIGFzIEJpZyBFbmRpYW4KIApAQCAtOTEyLDYgKzkzOSw3IEBACiAJCVRoZSBkZWZhdWx0IGNvbW1hbmQgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBhbGwgY29tbWFuZHMKIAkJZXhjZXB0IHRob3NlIG1hcmtlZCBiZWxvdyB3aXRoIGEgIioiLgogCisJCUNPTkZJR19DTURfQUVTCQkgIEFFUyAxMjggQ0JDIGVuY3J5cHQvZGVjcnlwdAogCQlDT05GSUdfQ01EX0FTS0VOVgkqIGFzayBmb3IgZW52IHZhcmlhYmxlCiAJCUNPTkZJR19DTURfQkRJCQkgIGJkaW5mbwogCQlDT05GSUdfQ01EX0JFREJVRwkqIEluY2x1ZGUgQmVkQnVnIERlYnVnZ2VyCkBAIC0xNDU2LDEzICsxNDg0LDYgQEAKIAkJCWZvciB5b3VyIGRldmljZQogCQkJLSBDT05GSUdfVVNCRF9QUk9EVUNUSUQgMHhGRkZGCiAKLQkJU29tZSBVU0IgZGV2aWNlIGRyaXZlcnMgbWF5IG5lZWQgdG8gY2hlY2sgVVNCIGNhYmxlIGF0dGFjaG1lbnQuCi0JCUluIHRoaXMgY2FzZSB5b3UgY2FuIGVuYWJsZSBmb2xsb3dpbmcgY29uZmlnIGluIEJvYXJkTmFtZS5oOgotCQkJQ09ORklHX1VTQl9DQUJMRV9DSEVDSwotCQkJVGhpcyBlbmFibGVzIGZ1bmN0aW9uIGRlZmluaXRpb246Ci0JCQktIHVzYl9jYWJsZV9jb25uZWN0ZWQoKSBpbiBpbmNsdWRlL3VzYi5oCi0JCQlJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIGJvYXJkLXNwZWNpZmljLgotCiAtIFVMUEkgTGF5ZXIgU3VwcG9ydDoKIAkJVGhlIFVMUEkgKFVUTUkgTG93IFBpbiAoY291bnQpIEludGVyZmFjZSkgUEhZcyBhcmUgc3VwcG9ydGVkIHZpYQogCQl0aGUgZ2VuZXJpYyBVTFBJIGxheWVyLiBUaGUgZ2VuZXJpYyBsYXllciBhY2Nlc3NlcyB0aGUgVUxQSSBQSFkKQEAgLTMzMTYsNiArMzMzNyw5IEBACiAJCWNvbnRpbnVpbmcgKHRoZSBoYXJkd2FyZSBzdGFydHMgZXhlY3V0aW9uIGFmdGVyIGp1c3QKIAkJbG9hZGluZyB0aGUgZmlyc3QgcGFnZSByYXRoZXIgdGhhbiB0aGUgZnVsbCA0SykuCiAKKwkJQ09ORklHX1NQTF9TS0lQX1JFTE9DQVRFCisJCUF2b2lkIFNQTCByZWxvY2F0aW9uCisKIAkJQ09ORklHX1NQTF9OQU5EX0JBU0UKIAkJSW5jbHVkZSBuYW5kX2Jhc2UuYyBpbiB0aGUgU1BMLiAgUmVxdWlyZXMKIAkJQ09ORklHX1NQTF9OQU5EX0RSSVZFUlMuCkBAIC00NTEwLDggKzQ1MzQsMTMgQEAKIGFyZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzdG9yYWdlIGRldmljZSAoTk9SIGZsYXNoLCBTUEksIGV0YykgYW5kIHRoZSBhZGRyZXNzCiB3aXRoaW4gdGhhdCBkZXZpY2UuCiAKLS0gQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIKLQlUaGUgYWRkcmVzcyBpbiB0aGUgc3RvcmFnZSBkZXZpY2Ugd2hlcmUgdGhlIGZpcm13YXJlIGlzIGxvY2F0ZWQuICBUaGUKKy0gQ09ORklHX1NZU19GTUFOX0ZXX0FERFIKKwlUaGUgYWRkcmVzcyBpbiB0aGUgc3RvcmFnZSBkZXZpY2Ugd2hlcmUgdGhlIEZNQU4gbWljcm9jb2RlIGlzIGxvY2F0ZWQuICBUaGUKKwltZWFuaW5nIG9mIHRoaXMgYWRkcmVzcyBkZXBlbmRzIG9uIHdoaWNoIENPTkZJR19TWVNfUUVfRldfSU5feHh4IG1hY3JvCisJaXMgYWxzbyBzcGVjaWZpZWQuCisKKy0gQ09ORklHX1NZU19RRV9GV19BRERSCisJVGhlIGFkZHJlc3MgaW4gdGhlIHN0b3JhZ2UgZGV2aWNlIHdoZXJlIHRoZSBRRSBtaWNyb2NvZGUgaXMgbG9jYXRlZC4gIFRoZQogCW1lYW5pbmcgb2YgdGhpcyBhZGRyZXNzIGRlcGVuZHMgb24gd2hpY2ggQ09ORklHX1NZU19RRV9GV19JTl94eHggbWFjcm8KIAlpcyBhbHNvIHNwZWNpZmllZC4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L01ha2VmaWxlIGIvYXJjaC9hcm0vY3B1L01ha2VmaWxlCmluZGV4IGIyZDMwYjEuLjM1ZDhkMzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9jcHUvTWFrZWZpbGUKQEAgLTEsMyArMSw2IEBACiBvYmotJChDT05GSUdfQVQ5MUZBTUlMWSkgKz0gYXQ5MS1jb21tb24vCi1vYmotJChDT05GSUdfVEVHUkEpICs9ICQoU09DKS1jb21tb24vCitvYmotJChDT05GSUdfVEVHUkEyMCkgKz0gdGVncmEyMC1jb21tb24vCitvYmotJChDT05GSUdfVEVHUkEzMCkgKz0gdGVncmEzMC1jb21tb24vCitvYmotJChDT05GSUdfVEVHUkExMTQpICs9IHRlZ3JhMTE0LWNvbW1vbi8KK29iai0kKENPTkZJR19URUdSQTEyNCkgKz0gdGVncmExMjQtY29tbW9uLwogb2JqLSQoQ09ORklHX1RFR1JBKSArPSB0ZWdyYS1jb21tb24vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvdGVncmEyMC1jb21tb24vY3J5cHRvLmMgYi9hcmNoL2FybS9jcHUvdGVncmEyMC1jb21tb24vY3J5cHRvLmMKaW5kZXggODIwOWY3Ni4uZWM5NWQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L3RlZ3JhMjAtY29tbW9uL2NyeXB0by5jCisrKyBiL2FyY2gvYXJtL2NwdS90ZWdyYTIwLWNvbW1vbi9jcnlwdG8uYwpAQCAtMTksNzQgKzE5LDYgQEAKIAlTRUNVUklUWV9FTkNSWVBUCT0gMSA8PCAxLAkvKiBFbmNyeXB0IHRoZSBkYXRhICovCiB9OwogCi1zdGF0aWMgdm9pZCBkZWJ1Z19wcmludF92ZWN0b3IoY2hhciAqbmFtZSwgdTMyIG51bV9ieXRlcywgdTggKmRhdGEpCi17Ci0JdTMyIGk7Ci0KLQlkZWJ1ZygiJXMgWyVkXSBAMHglMDh4IiwgbmFtZSwgbnVtX2J5dGVzLCAodTMyKWRhdGEpOwotCWZvciAoaSA9IDA7IGkgPCBudW1fYnl0ZXM7IGkrKykgewotCQlpZiAoaSAlIDE2ID09IDApCi0JCQlkZWJ1ZygiID0gIik7Ci0JCWRlYnVnKCIlMDJ4IiwgZGF0YVtpXSk7Ci0JCWlmICgoaSsxKSAlIDE2ICE9IDApCi0JCQlkZWJ1ZygiICIpOwotCX0KLQlkZWJ1ZygiXG4iKTsKLX0KLQotLyoqCi0gKiBBcHBseSBjaGFpbiBkYXRhIHRvIHRoZSBkZXN0aW5hdGlvbiB1c2luZyBFT1IKLSAqCi0gKiBFYWNoIGFycmF5IGlzIG9mIGxlbmd0aCBBRVNfQUVTX0tFWV9MRU5HVEguCi0gKgotICogXHBhcmFtIGNiY19jaGFpbl9kYXRhCUNoYWluIGRhdGEKLSAqIFxwYXJhbSBzcmMJCQlTb3VyY2UgZGF0YQotICogXHBhcmFtIGRzdAkJCURlc3RpbmF0aW9uIGRhdGEsIHdoaWNoIGlzIG1vZGlmaWVkIGhlcmUKLSAqLwotc3RhdGljIHZvaWQgYXBwbHlfY2JjX2NoYWluX2RhdGEodTggKmNiY19jaGFpbl9kYXRhLCB1OCAqc3JjLCB1OCAqZHN0KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JCSpkc3QrKyA9ICpzcmMrKyBeICpjYmNfY2hhaW5fZGF0YSsrOwotfQotCi0vKioKLSAqIEVuY3J5cHQgc29tZSBkYXRhIHdpdGggQUVTLgotICoKLSAqIFxwYXJhbSBrZXlfc2NoZWR1bGUJCUV4cGFuZGVkIGtleSB0byB1c2UKLSAqIFxwYXJhbSBzcmMJCQlTb3VyY2UgZGF0YSB0byBlbmNyeXB0Ci0gKiBccGFyYW0gZHN0CQkJRGVzdGluYXRpb24gYnVmZmVyCi0gKiBccGFyYW0gbnVtX2Flc19ibG9ja3MJTnVtYmVyIG9mIEFFUyBibG9ja3MgdG8gZW5jcnlwdAotICovCi1zdGF0aWMgdm9pZCBlbmNyeXB0X29iamVjdCh1OCAqa2V5X3NjaGVkdWxlLCB1OCAqc3JjLCB1OCAqZHN0LAotCQkJICAgdTMyIG51bV9hZXNfYmxvY2tzKQotewotCXU4IHRtcF9kYXRhW0FFU19LRVlfTEVOR1RIXTsKLQl1OCAqY2JjX2NoYWluX2RhdGE7Ci0JdTMyIGk7Ci0KLQljYmNfY2hhaW5fZGF0YSA9IHplcm9fa2V5OwkvKiBDb252ZW5pZW50IGFycmF5IG9mIDAncyBmb3IgSVYgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBudW1fYWVzX2Jsb2NrczsgaSsrKSB7Ci0JCWRlYnVnKCJlbmNyeXB0X29iamVjdDogYmxvY2sgJWQgb2YgJWRcbiIsIGksIG51bV9hZXNfYmxvY2tzKTsKLQkJZGVidWdfcHJpbnRfdmVjdG9yKCJBRVMgU3JjIiwgQUVTX0tFWV9MRU5HVEgsIHNyYyk7Ci0KLQkJLyogQXBwbHkgdGhlIGNoYWluIGRhdGEgKi8KLQkJYXBwbHlfY2JjX2NoYWluX2RhdGEoY2JjX2NoYWluX2RhdGEsIHNyYywgdG1wX2RhdGEpOwotCQlkZWJ1Z19wcmludF92ZWN0b3IoIkFFUyBYb3IiLCBBRVNfS0VZX0xFTkdUSCwgdG1wX2RhdGEpOwotCi0JCS8qIGVuY3J5cHQgdGhlIEFFUyBibG9jayAqLwotCQlhZXNfZW5jcnlwdCh0bXBfZGF0YSwga2V5X3NjaGVkdWxlLCBkc3QpOwotCQlkZWJ1Z19wcmludF92ZWN0b3IoIkFFUyBEc3QiLCBBRVNfS0VZX0xFTkdUSCwgZHN0KTsKLQotCQkvKiBVcGRhdGUgcG9pbnRlcnMgZm9yIG5leHQgbG9vcC4gKi8KLQkJY2JjX2NoYWluX2RhdGEgPSBkc3Q7Ci0JCXNyYyArPSBBRVNfS0VZX0xFTkdUSDsKLQkJZHN0ICs9IEFFU19LRVlfTEVOR1RIOwotCX0KLX0KLQogLyoqCiAgKiBTaGlmdCBhIHZlY3RvciBsZWZ0IGJ5IG9uZSBiaXQKICAqCkBAIC0xMjksMzkgKzYxLDMxIEBACiAJZm9yIChpID0gMDsgaSA8IEFFU19LRVlfTEVOR1RIOyBpKyspCiAJCXRtcF9kYXRhW2ldID0gMDsKIAotCWVuY3J5cHRfb2JqZWN0KGtleV9zY2hlZHVsZSwgdG1wX2RhdGEsIGxlZnQsIDEpOwotCWRlYnVnX3ByaW50X3ZlY3RvcigiQUVTKGtleSwgbm9uY2UpIiwgQUVTX0tFWV9MRU5HVEgsIGxlZnQpOworCWFlc19jYmNfZW5jcnlwdF9ibG9ja3Moa2V5X3NjaGVkdWxlLCB0bXBfZGF0YSwgbGVmdCwgMSk7CiAKIAlsZWZ0X3NoaWZ0X3ZlY3RvcihsZWZ0LCBrMSwgc2l6ZW9mKGxlZnQpKTsKLQlkZWJ1Z19wcmludF92ZWN0b3IoIkwiLCBBRVNfS0VZX0xFTkdUSCwgbGVmdCk7CiAKIAlpZiAoKGxlZnRbMF0gPj4gNykgIT0gMCkgLyogZ2V0IE1TQiBvZiBMICovCiAJCWsxW0FFU19LRVlfTEVOR1RILTFdIF49IEFFU19DTUFDX0NPTlNUX1JCOwotCWRlYnVnX3ByaW50X3ZlY3RvcigiSzEiLCBBRVNfS0VZX0xFTkdUSCwgazEpOwogCiAJLyogY29tcHV0ZSB0aGUgQUVTLUNNQUMgdmFsdWUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2Flc19ibG9ja3M7IGkrKykgewogCQkvKiBBcHBseSB0aGUgY2hhaW4gZGF0YSAqLwotCQlhcHBseV9jYmNfY2hhaW5fZGF0YShjYmNfY2hhaW5fZGF0YSwgc3JjLCB0bXBfZGF0YSk7CisJCWFlc19hcHBseV9jYmNfY2hhaW5fZGF0YShjYmNfY2hhaW5fZGF0YSwgc3JjLCB0bXBfZGF0YSk7CiAKIAkJLyogZm9yIHRoZSBmaW5hbCBibG9jaywgWE9SIEsxIGludG8gdGhlIElWICovCiAJCWlmIChpID09IG51bV9hZXNfYmxvY2tzIC0gMSkKLQkJCWFwcGx5X2NiY19jaGFpbl9kYXRhKHRtcF9kYXRhLCBrMSwgdG1wX2RhdGEpOworCQkJYWVzX2FwcGx5X2NiY19jaGFpbl9kYXRhKHRtcF9kYXRhLCBrMSwgdG1wX2RhdGEpOwogCiAJCS8qIGVuY3J5cHQgdGhlIEFFUyBibG9jayAqLwogCQlhZXNfZW5jcnlwdCh0bXBfZGF0YSwga2V5X3NjaGVkdWxlLCBkc3QpOwogCiAJCWRlYnVnKCJzaWduX29iajogYmxvY2sgJWQgb2YgJWRcbiIsIGksIG51bV9hZXNfYmxvY2tzKTsKLQkJZGVidWdfcHJpbnRfdmVjdG9yKCJBRVMtQ01BQyBTcmMiLCBBRVNfS0VZX0xFTkdUSCwgc3JjKTsKLQkJZGVidWdfcHJpbnRfdmVjdG9yKCJBRVMtQ01BQyBYb3IiLCBBRVNfS0VZX0xFTkdUSCwgdG1wX2RhdGEpOwotCQlkZWJ1Z19wcmludF92ZWN0b3IoIkFFUy1DTUFDIERzdCIsIEFFU19LRVlfTEVOR1RILCBkc3QpOwogCiAJCS8qIFVwZGF0ZSBwb2ludGVycyBmb3IgbmV4dCBsb29wLiAqLwogCQljYmNfY2hhaW5fZGF0YSA9IGRzdDsKIAkJc3JjICs9IEFFU19LRVlfTEVOR1RIOwogCX0KLQotCWRlYnVnX3ByaW50X3ZlY3RvcigiQUVTLUNNQUMgSGFzaCIsIEFFU19LRVlfTEVOR1RILCBkc3QpOwogfQogCiAvKioKQEAgLTE4MCw3ICsxMDQsNiBAQAogCXU4IGtleV9zY2hlZHVsZVtBRVNfRVhQQU5EX0tFWV9MRU5HVEhdOwogCiAJZGVidWcoImVuY3J5cHRfYW5kX3NpZ246IGxlbmd0aCA9ICVkXG4iLCBsZW5ndGgpOwotCWRlYnVnX3ByaW50X3ZlY3RvcigiQUVTIGtleSIsIEFFU19LRVlfTEVOR1RILCBrZXkpOwogCiAJLyoKIAkgKiBUaGUgb25seSBuZWVkIGZvciBhIGtleSBpcyBmb3Igc2lnbmluZy9jaGVja3N1bSBwdXJwb3Nlcywgc28KQEAgLTE5Myw3ICsxMTYsNyBAQAogCWlmIChvcGVyICYgU0VDVVJJVFlfRU5DUllQVCkgewogCQkvKiBQZXJmb3JtIHRoaXMgaW4gcGxhY2UsIHJlc3VsdGluZyBpbiBzcmMgYmVpbmcgZW5jcnlwdGVkLiAqLwogCQlkZWJ1ZygiZW5jcnlwdF9hbmRfc2lnbjogYmVnaW4gZW5jcnlwdGlvblxuIik7Ci0JCWVuY3J5cHRfb2JqZWN0KGtleV9zY2hlZHVsZSwgc3JjLCBzcmMsIG51bV9hZXNfYmxvY2tzKTsKKwkJYWVzX2NiY19lbmNyeXB0X2Jsb2NrcyhrZXlfc2NoZWR1bGUsIHNyYywgc3JjLCBudW1fYWVzX2Jsb2Nrcyk7CiAJCWRlYnVnKCJlbmNyeXB0X2FuZF9zaWduOiBlbmQgZW5jcnlwdGlvblxuIik7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLXJtb2JpbGUvZWhjaS1ybW9iaWxlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLXJtb2JpbGUvZWhjaS1ybW9iaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzNjU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtcm1vYmlsZS9laGNpLXJtb2JpbGUuaApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMsMjAxNCBSZW5lc2FzIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDE0IE5vYnVoaXJvIEl3YW1hdHN1IDxub2J1aGlyby5pd2FtYXRzdS55akByZW5lc2FzLmNvbT4KKyAqCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICAgICBHUEwtMi4wCisgKi8KKworI2lmbmRlZiBfX0VIQ0lfUk1PQklMRV9IX18KKyNkZWZpbmUgX19FSENJX1JNT0JJTEVfSF9fCisKKy8qIFJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBPSENJX09GRlNFVAkweDAwCisjZGVmaW5lIE9IQ0lfU0laRQkweDEwMDAKKyNkZWZpbmUgRUhDSV9PRkZTRVQJMHgxMDAwCisjZGVmaW5lIEVIQ0lfU0laRQkweDEwMDAKKworI2RlZmluZSBFSENJX1VTQkNNRAkoRUhDSV9PRkZTRVQgKyAweDAwMjApCisKKy8qIFVTQkNUUiAqLworI2RlZmluZSBESVJQRAkJKDEgPDwgOCkKKyNkZWZpbmUgUExMX1JTVAkJKDEgPDwgMikKKyNkZWZpbmUgUENJQ0xLX01BU0sJKDEgPDwgMSkKKyNkZWZpbmUgVVNCSF9SU1QJKDEgPDwgMCkKKworLyogQ01ORF9TVFMgKi8KKyNkZWZpbmUgU0VSUkVOCQkoMSA8PCA4KQorI2RlZmluZSBQRVJSRU4JCSgxIDw8IDYpCisjZGVmaW5lIE1BU1RFUkVOCSgxIDw8IDIpCisjZGVmaW5lIE1FTUVOCQkoMSA8PCAxKQorCisvKiBQQ0lBSEJfV0lOMV9DVFIgYW5kIFBDSUFIQl9XSU4yX0NUUiAqLworI2RlZmluZSBQQ0lBSEJfV0lOX1BSRUZFVENICSgoMSA8PCAxKXwoMSA8PCAwKSkKKworLyogQUhCUENJX1dJTjFfQ1RSICovCisjZGVmaW5lIFBDSVdJTjFfUENJQ01ECQkoKDEgPDwgMyl8KDEgPDwgMSkpCisjZGVmaW5lIEFIQl9DRkdfQUhCUENJCQkweDQwMDAwMDAwCisjZGVmaW5lIEFIQl9DRkdfSE9TVAkJMHg4MDAwMDAwMAorCisvKiBBSEJQQ0lfV0lOMl9DVFIgKi8KKyNkZWZpbmUgUENJV0lOMl9QQ0lDTUQJCSgoMSA8PCAyKXwoMSA8PCAxKSkKKworLyogUENJX0lOVF9FTkFCTEUgKi8KKyNkZWZpbmUgVVNCSF9QTUVFTgkJKDEgPDwgMTkpCisjZGVmaW5lIFVTQkhfSU5UQkVOCQkoMSA8PCAxNykKKyNkZWZpbmUgVVNCSF9JTlRBRU4JCSgxIDw8IDE2KQorCisvKiBBSEJfQlVTX0NUUiAqLworI2RlZmluZSBTTU9ERV9SRUFEWV9DVFIJCSgxIDw8IDE3KQorI2RlZmluZSBTTU9ERV9SRUFEX0JVUlNUCSgxIDw8IDE2KQorI2RlZmluZSBNTU9ERV9IQlVTUkVRCQkoMSA8PCA3KQorI2RlZmluZSBNTU9ERV9CT1VOREFSWQkJKCgxIDw8IDYpfCgxIDw8IDUpKQorI2RlZmluZSBNTU9ERV9CVVJTVF9XSURUSAkoKDEgPDwgNCl8KDEgPDwgMykpCisjZGVmaW5lIE1NT0RFX1NJTkdMRV9NT0RFCSgoMSA8PCA0KXwoMSA8PCAzKSkKKyNkZWZpbmUgTU1PREVfV1JfSU5DUgkJKDEgPDwgMikKKyNkZWZpbmUgTU1PREVfQllURV9CVVJTVAkoMSA8PCAxKQorI2RlZmluZSBNTU9ERV9IVFJBTlMJCSgxIDw8IDApCisKKy8qIFBDSV9BUkJJVEVSX0NUUiAqLworI2RlZmluZSBQQ0lCVVNfUEFSS19USU1FUiAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIFBDSUJVU19QQVJLX1RJTUVSX1NFVCAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgUENJQlBfTU9ERQkJKDEgPDwgMTIpCisjZGVmaW5lIFBDSVJFUTcgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIFBDSVJFUTYgICAgICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIFBDSVJFUTUgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIFBDSVJFUTQgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIFBDSVJFUTMgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIFBDSVJFUTIgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIFBDSVJFUTEgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIFBDSVJFUTAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKKyNkZWZpbmUgU01TVFBDUjcgICAgICAgIDB4RTYxNTAxNEMKKyNkZWZpbmUgU01TVFBDUjcwMyAgICAgICgxIDw8IDMpCisKKy8qIEluaXQgQUhCIG1hc3RlciBhbmQgc2xhdmUgZnVuY3Rpb25zIG9mIHRoZSBob3N0IGxvZ2ljICovCisjZGVmaW5lIEFIQl9CVVNfQ1RSX0lOSVQgXAorCShTTU9ERV9SRUFEWV9DVFIgfCBNTU9ERV9IQlVTUkVRIHwgTU1PREVfV1JfSU5DUiB8IFwKKwkgTU1PREVfQllURV9CVVJTVCB8IE1NT0RFX0hUUkFOUykKKworI2RlZmluZSBVU0JDVFJfV0lOX1NJWkVfMUdCCTB4ODAwCisKKy8qIFBDSSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLworI2RlZmluZSBQQ0lfQ09ORl9PSENJX09GRlNFVAkweDEwMDAwCisjZGVmaW5lIFBDSV9DT05GX0VIQ0lfT0ZGU0VUCTB4MTAxMDAKK3N0cnVjdCBhaGJfcGNpY29uZiB7CisJdTMyIHZpZF9kaWQ7CisJdTMyIGNtbmRfc3RzOworCXUzMiByZXY7CisJdTMyIGNhY2hlX2xpbmU7CisJdTMyIGJhc2VhZDsKK307CisKKy8qIFBDSSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyBmb3IgQUhCLVBDSSBCcmlkZ2UgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBDSV9DT05GX0FIQlBDSV9PRkZTRVQJMHgxMDAwMAorc3RydWN0IGFoYmNvbmZfcGNpX2JyaWRnZSB7CisJdTMyIHZpZF9kaWQ7CQkvKiAweDAwICovCisJdTMyIGNtbmRfc3RzOworCXUzMiByZXZpZF9jYzsKKwl1MzIgY2xzX2x0X2h0X2Jpc3Q7CisJdTMyIGJhc2VhZDsJCS8qIDB4MTAgKi8KKwl1MzIgd2luMV9iYXNlYWQ7CisJdTMyIHdpbjJfYmFzZWFkOworCXUzMiBkdW1teTBbNV07CisJdTMyIHNzdmRpX3NzaWQ7CQkvKiAweDJDICovCisJdTMyIGR1bW15MVs0XTsKKwl1MzIgaW50cl9saW5lX3BpbjsKK307CisKKy8qIEFIQi1QQ0kgQnJpZGdlIFBDSSBDb21tdW5pY2F0aW9uIFJlZ2lzdGVycyAqLworI2RlZmluZSBBSEJQQ0lfT0ZGU0VUCTB4MTA4MDAKK3N0cnVjdCBhaGJjb21fcGNpX2JyaWRnZSB7CisJdTMyIHBjaWFoYl93aW4xX2N0cjsJLyogMHgwMCAqLworCXUzMiBwY2lhaGJfd2luMl9jdHI7CisJdTMyIHBjaWFoYl9kY3RfY3RyOworCXUzMiBkdW1teTA7CisJdTMyIGFoYnBjaV93aW4xX2N0cjsJLyogMHgxMCAqLworCXUzMiBhaGJwY2lfd2luMl9jdHI7CisJdTMyIGR1bW15MTsKKwl1MzIgYWhicGNpX2RjdF9jdHI7CisJdTMyIHBjaV9pbnRfZW5hYmxlOwkvKiAweDIwICovCisJdTMyIHBjaV9pbnRfc3RhdHVzOworCXUzMiBkdW1teTJbMl07CisJdTMyIGFoYl9idXNfY3RyOwkvKiAweDMwICovCisJdTMyIHVzYmN0cjsKKwl1MzIgZHVtbXkzWzJdOworCXUzMiBwY2lfYXJiaXRlcl9jdHI7CS8qIDB4NDAgKi8KKwl1MzIgZHVtbXk0OworCXUzMiBwY2lfdW5pdF9yZXY7CS8qIDB4NDggKi8KK307CisKK3N0cnVjdCBybW9iaWxlX2VoY2lfcmVnIHsKKwl1MzIgaGNpdmVyc2lvbjsJCS8qIGhjaXZlcnNpb24vY2FwbGVuZ3RoICovCisJdTMyIGhjc3BhcmFtczsJCS8qIGhjc3BhcmFtcyAqLworCXUzMiBoY2NwYXJhbXM7CQkvKiBoY2NwYXJhbXMgKi8KKwl1MzIgaGNzcF9wb3J0cm91dGU7CS8qIGhjc3BfcG9ydHJvdXRlICovCisJdTMyIHVzYmNtZDsJCS8qIHVzYmNtZCAqLworCXUzMiB1c2JzdHM7CQkvKiB1c2JzdHMgKi8KKwl1MzIgdXNiaW50cjsJCS8qIHVzYmludHIgKi8KKwl1MzIgZnJpbmRleDsJCS8qIGZyaW5kZXggKi8KKwl1MzIgY3RybGRzc2VnbWVudDsJLyogY3RybGRzc2VnbWVudCAqLworCXUzMiBwZXJpb2RpY2xpc3RiYXNlOwkvKiBwZXJpb2RpY2xpc3RiYXNlICovCisJdTMyIGFzeW5jbGlzdGFkZHI7CS8qIGFzeW5jbGlzdGFkZHIgKi8KKwl1MzIgZHVtbXlbOV07CisJdTMyIGNvbmZpZ2ZsYWc7CQkvKiBjb25maWdmbGFnICovCisJdTMyIHBvcnRzYzsJCS8qIHBvcnRzYyAqLworfTsKKworI2VuZGlmIC8qIF9fRUhDSV9STU9CSUxFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jcHUvZ3Bpby5jIGIvYXJjaC9ibGFja2Zpbi9jcHUvZ3Bpby5jCmluZGV4IDg2ZGE3MDYuLjRiNGNmOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY3B1L2dwaW8uYworKysgYi9hcmNoL2JsYWNrZmluL2NwdS9ncGlvLmMKQEAgLTc1OSw2ICs3NTksNTQgQEAKIAl1ZGVsYXkoMSk7CiB9CiAKK2ludCBuYW1lX3RvX2dwaW8oY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgcG9ydF9iYXNlOworCisJaWYgKHRvbG93ZXIoKm5hbWUpID09ICdwJykgeworCQkrK25hbWU7CisKKwkJc3dpdGNoICh0b2xvd2VyKCpuYW1lKSkgeworI2lmZGVmIEdQSU9fUEEwCisJCWNhc2UgJ2EnOiBwb3J0X2Jhc2UgPSBHUElPX1BBMDsgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBHUElPX1BCMAorCQljYXNlICdiJzogcG9ydF9iYXNlID0gR1BJT19QQjA7IGJyZWFrOworI2VuZGlmCisjaWZkZWYgR1BJT19QQzAKKwkJY2FzZSAnYyc6IHBvcnRfYmFzZSA9IEdQSU9fUEMwOyBicmVhazsKKyNlbmRpZgorI2lmZGVmIEdQSU9fUEQwCisJCWNhc2UgJ2QnOiBwb3J0X2Jhc2UgPSBHUElPX1BEMDsgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBHUElPX1BFMAorCQljYXNlICdlJzogcG9ydF9iYXNlID0gR1BJT19QRTA7IGJyZWFrOworI2VuZGlmCisjaWZkZWYgR1BJT19QRjAKKwkJY2FzZSAnZic6IHBvcnRfYmFzZSA9IEdQSU9fUEYwOyBicmVhazsKKyNlbmRpZgorI2lmZGVmIEdQSU9fUEcwCisJCWNhc2UgJ2cnOiBwb3J0X2Jhc2UgPSBHUElPX1BHMDsgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBHUElPX1BIMAorCQljYXNlICdoJzogcG9ydF9iYXNlID0gR1BJT19QSDA7IGJyZWFrOworI2VuZGlmCisjaWZkZWYgR1BJT19QSTAKKwkJY2FzZSAnaSc6IHBvcnRfYmFzZSA9IEdQSU9fUEkwOyBicmVhazsKKyNlbmRpZgorI2lmZGVmIEdQSU9fUEoKKwkJY2FzZSAnaic6IHBvcnRfYmFzZSA9IEdQSU9fUEowOyBicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OiAgcmV0dXJuIC0xOworCQl9CisKKwkJKytuYW1lOworCX0gZWxzZQorCQlwb3J0X2Jhc2UgPSAwOworCisJcmV0dXJuIHBvcnRfYmFzZSArIHNpbXBsZV9zdHJ0b3VsKG5hbWUsIE5VTEwsIDEwKTsKK30KKwogdm9pZCBncGlvX2xhYmVscyh2b2lkKQogewogCWludCBjLCBncGlvOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCA2ZWJjZjAxLi4xZmExYThlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMTYwLDU1ICsxNjAsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KIAotc3RhdGljIGlubGluZSBpbnQgbmFtZV90b19ncGlvKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaW50IHBvcnRfYmFzZTsKLQotCWlmICh0b2xvd2VyKCpuYW1lKSA9PSAncCcpIHsKLQkJKytuYW1lOwotCi0JCXN3aXRjaCAodG9sb3dlcigqbmFtZSkpIHsKLSNpZmRlZiBHUElPX1BBMAotCQljYXNlICdhJzogcG9ydF9iYXNlID0gR1BJT19QQTA7IGJyZWFrOwotI2VuZGlmCi0jaWZkZWYgR1BJT19QQjAKLQkJY2FzZSAnYic6IHBvcnRfYmFzZSA9IEdQSU9fUEIwOyBicmVhazsKLSNlbmRpZgotI2lmZGVmIEdQSU9fUEMwCi0JCWNhc2UgJ2MnOiBwb3J0X2Jhc2UgPSBHUElPX1BDMDsgYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBHUElPX1BEMAotCQljYXNlICdkJzogcG9ydF9iYXNlID0gR1BJT19QRDA7IGJyZWFrOwotI2VuZGlmCi0jaWZkZWYgR1BJT19QRTAKLQkJY2FzZSAnZSc6IHBvcnRfYmFzZSA9IEdQSU9fUEUwOyBicmVhazsKLSNlbmRpZgotI2lmZGVmIEdQSU9fUEYwCi0JCWNhc2UgJ2YnOiBwb3J0X2Jhc2UgPSBHUElPX1BGMDsgYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBHUElPX1BHMAotCQljYXNlICdnJzogcG9ydF9iYXNlID0gR1BJT19QRzA7IGJyZWFrOwotI2VuZGlmCi0jaWZkZWYgR1BJT19QSDAKLQkJY2FzZSAnaCc6IHBvcnRfYmFzZSA9IEdQSU9fUEgwOyBicmVhazsKLSNlbmRpZgotI2lmZGVmIEdQSU9fUEkwCi0JCWNhc2UgJ2knOiBwb3J0X2Jhc2UgPSBHUElPX1BJMDsgYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBHUElPX1BKCi0JCWNhc2UgJ2onOiBwb3J0X2Jhc2UgPSBHUElPX1BKMDsgYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDogIHJldHVybiAtMTsKLQkJfQotCi0JCSsrbmFtZTsKLQl9IGVsc2UKLQkJcG9ydF9iYXNlID0gMDsKLQotCXJldHVybiBwb3J0X2Jhc2UgKyBzaW1wbGVfc3RydG91bChuYW1lLCBOVUxMLCAxMCk7Ci19Ci0jZGVmaW5lIG5hbWVfdG9fZ3BpbyhuKSBuYW1lX3RvX2dwaW8obikKLQogI2RlZmluZSBncGlvX3N0YXR1cygpIGdwaW9fbGFiZWxzKCkKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZy5tayBiL2FyY2gvbWlwcy9jb25maWcubWsKaW5kZXggMTg5OWY1MS4uZjRhMjM0YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZy5taworKysgYi9hcmNoL21pcHMvY29uZmlnLm1rCkBAIC0yNyw2ICsyNyw4IEBACiAKIFBMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHX01JUFMgLURfX01JUFNfXwogCitfX0hBVkVfQVJDSF9HRU5FUklDX0JPQVJEIDo9IHkKKwogIwogIyBGcm9tIExpbnV4IGFyY2gvbWlwcy9NYWtlZmlsZQogIwpAQCAtNTIsNCArNTQsNSBAQAogUExBVEZPUk1fTERGTEFHUwkJKz0gLUcgMCAtc3RhdGljIC1uIC1ub3N0ZGxpYiAkKEVORElBTk5FU1MpCiBQTEFURk9STV9SRUxGTEFHUwkJKz0gLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMKIExERkxBR1NfRklOQUwJCQkrPSAtLWdjLXNlY3Rpb25zIC1waWUKLU9CSkNPUFlGTEFHUwkJCSs9IC0tcmVtb3ZlLXNlY3Rpb249LmR5bnN5bQorT0JKQ09QWUZMQUdTCQkJKz0gLWogLnRleHQgLWogLnJvZGF0YSAtaiAuZGF0YSAtaiAuZ290CitPQkpDT1BZRkxBR1MJCQkrPSAtaiAudV9ib290X2xpc3QgLWogLnJlbC5keW4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jcHUvbWlwczMyL2luY2FpcC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9jcHUvbWlwczMyL2luY2FpcC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM0MWE0YS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvY3B1L21pcHMzMi9pbmNhaXAvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSMKLSMgKEMpIENvcHlyaWdodCAyMDExCi0jIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0jCi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotIwotCi1vYmoteQk9IGluY2FpcF93ZHQubwotb2JqLXkJKz0gaW5jYWlwX2Nsb2NrLm8gYXNjX3NlcmlhbC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY3B1L21pcHMzMi9pbmNhaXAvYXNjX3NlcmlhbC5jIGIvYXJjaC9taXBzL2NwdS9taXBzMzIvaW5jYWlwL2FzY19zZXJpYWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYwZTRmMi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvY3B1L21pcHMzMi9pbmNhaXAvYXNjX3NlcmlhbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLS8qCi0gKiAoSU5DQSkgQVNDIFVBUlQgc3VwcG9ydAotICovCi0KLSNpbmNsdWRlIDxjb25maWcuaD4KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxhc20vaW5jYS1pcC5oPgotI2luY2x1ZGUgPHNlcmlhbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSAiYXNjX3NlcmlhbC5oIgotCi0KLSNkZWZpbmUgU0VUX0JJVChyZWcsIG1hc2spICAgICAgICAgICAgICAgICAgcmVnIHw9IChtYXNrKQotI2RlZmluZSBDTEVBUl9CSVQocmVnLCBtYXNrKSAgICAgICAgICAgICAgICByZWcgJj0gKH5tYXNrKQotI2RlZmluZSBDTEVBUl9CSVRTKHJlZywgbWFzaykgICAgICAgICAgICAgICBDTEVBUl9CSVQocmVnLCBtYXNrKQotI2RlZmluZSBTRVRfQklUUyhyZWcsIG1hc2spICAgICAgICAgICAgICAgICBTRVRfQklUKHJlZywgbWFzaykKLSNkZWZpbmUgU0VUX0JJVEZJRUxEKHJlZywgbWFzaywgb2ZmLCB2YWwpICAge3JlZyAmPSAofm1hc2spOyByZWcgfD0gKHZhbCA8PCBvZmYpO30KLQotZXh0ZXJuIHVpbnQgaW5jYWlwX2dldF9mcGljbGsodm9pZCk7Ci0KLXN0YXRpYyBpbnQgc2VyaWFsX3NldG9wdCAodm9pZCk7Ci0KLS8qIHBvaW50ZXIgdG8gQVNDIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLwotc3RhdGljIHZvbGF0aWxlIGluY2FBc2NfdCAqcEFzYyA9IChpbmNhQXNjX3QgKilJTkNBX0lQX0FTQzsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiBzZXJpYWxfaW5pdCAtIGluaXRpYWxpemUgYSBJTkNBQVNDIGNoYW5uZWwKLSoKLSogVGhpcyByb3V0aW5lIGluaXRpYWxpemVzIHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzLCBwYXJpdHkKLSogYW5kIHNldCB0aGUgc2VsZWN0ZWQgYmF1ZCByYXRlLiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KLSogU2V0IHRoZSBtb2RlbSBjb250cm9sIHNpZ25hbHMgaWYgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZC4KLSoKLSogUkVUVVJOUzogTi9BCi0qLwotCi1zdGF0aWMgaW50IGFzY19zZXJpYWxfaW5pdCh2b2lkKQotewotICAgIC8qIHdlIGhhdmUgdG8gc2V0IFBNVS5FTjEzIGJpdCB0byBlbmFibGUgYW4gQVNDIGRldmljZSovCi0gICAgSU5DQUFTQ19QTVVfRU5BQkxFKDEzKTsKLQotICAgIC8qIGFuZCB3ZSBoYXZlIHRvIHNldCBDTEMgcmVnaXN0ZXIqLwotICAgIENMRUFSX0JJVChwQXNjLT5hc2NfY2xjLCBBU0NDTENfRElTUyk7Ci0gICAgU0VUX0JJVEZJRUxEKHBBc2MtPmFzY19jbGMsIEFTQ0NMQ19STUNNQVNLLCBBU0NDTENfUk1DT0ZGU0VULCAweDAwMDEpOwotCi0gICAgLyogaW5pdGlhbHkgd2UgYXJlIGluIGFzeW5jIG1vZGUgKi8KLSAgICBwQXNjLT5hc2NfY29uID0gQVNDQ09OX01fOEFTWU5DOwotCi0gICAgLyogc2VsZWN0IGlucHV0IHBvcnQgKi8KLSAgICBwQXNjLT5hc2NfcGlzZWwgPSAoQ09OU09MRV9UVFkgJiAweDEpOwotCi0gICAgLyogVFhGSUZPJ3MgZmlsbGluZyBsZXZlbCAqLwotICAgIFNFVF9CSVRGSUVMRChwQXNjLT5hc2NfdHhmY29uLCBBU0NUWEZDT05fVFhGSVRMTUFTSywKLQkJICAgIEFTQ1RYRkNPTl9UWEZJVExPRkYsIElOQ0FBU0NfVFhGSUZPX0ZMKTsKLSAgICAvKiBlbmFibGUgVFhGSUZPICovCi0gICAgU0VUX0JJVChwQXNjLT5hc2NfdHhmY29uLCBBU0NUWEZDT05fVFhGRU4pOwotCi0gICAgLyogUlhGSUZPJ3MgZmlsbGluZyBsZXZlbCAqLwotICAgIFNFVF9CSVRGSUVMRChwQXNjLT5hc2NfdHhmY29uLCBBU0NSWEZDT05fUlhGSVRMTUFTSywKLQkJICAgIEFTQ1JYRkNPTl9SWEZJVExPRkYsIElOQ0FBU0NfUlhGSUZPX0ZMKTsKLSAgICAvKiBlbmFibGUgUlhGSUZPICovCi0gICAgU0VUX0JJVChwQXNjLT5hc2NfcnhmY29uLCBBU0NSWEZDT05fUlhGRU4pOwotCi0gICAgLyogZW5hYmxlIGVycm9yIHNpZ25hbHMgKi8KLSAgICBTRVRfQklUKHBBc2MtPmFzY19jb24sIEFTQ0NPTl9GRU4pOwotICAgIFNFVF9CSVQocEFzYy0+YXNjX2NvbiwgQVNDQ09OX09FTik7Ci0KLSAgICAvKiBhY2tub3dsZWRnZSBBU0MgaW50ZXJydXB0cyAqLwotICAgIEFTQ19JTlRFUlJVUFRTX0NMRUFSKElOQ0FBU0NfSVJRX0xJTkVfQUxMKTsKLQotICAgIC8qIGRpc2FibGUgQVNDIGludGVycnVwdHMgKi8KLSAgICBBU0NfSU5URVJSVVBUU19ESVNBQkxFKElOQ0FBU0NfSVJRX0xJTkVfQUxMKTsKLQotICAgIC8qIHNldCBGSUZPcyBpbnRvIHRoZSB0cmFuc3BhcmVudCBtb2RlICovCi0gICAgU0VUX0JJVChwQXNjLT5hc2NfdHhmY29uLCBBU0NUWEZDT05fVFhUTUVOKTsKLSAgICBTRVRfQklUKHBBc2MtPmFzY19yeGZjb24sIEFTQ1JYRkNPTl9SWFRNRU4pOwotCi0gICAgLyogc2V0IGJhdWQgcmF0ZSAqLwotICAgIHNlcmlhbF9zZXRicmcoKTsKLQotICAgIC8qIHNldCB0aGUgb3B0aW9ucyAqLwotICAgIHNlcmlhbF9zZXRvcHQoKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBhc2Nfc2VyaWFsX3NldGJyZyh2b2lkKQotewotICAgIHVsb25nICAgICAgdWlSZWxvYWRWYWx1ZSwgZmR2OwotICAgIHVsb25nICAgICAgZl9BU0M7Ci0KLSAgICBmX0FTQyA9IGluY2FpcF9nZXRfZnBpY2xrKCk7Ci0KLSNpZm5kZWYgSU5DQUFTQ19VU0VfRkRWCi0gICAgZmR2ID0gMjsKLSAgICB1aVJlbG9hZFZhbHVlID0gKGZfQVNDIC8gKGZkdiAqIDE2ICogQ09ORklHX0JBVURSQVRFKSkgLSAxOwotI2Vsc2UKLSAgICBmZHYgPSBJTkNBQVNDX0ZEVl9ISUdIX0JBVURSQVRFOwotICAgIHVpUmVsb2FkVmFsdWUgPSAoZl9BU0MgLyAoODE5MiAqIENPTkZJR19CQVVEUkFURSAvIGZkdikpIC0gMTsKLSNlbmRpZiAvKiBJTkNBQVNDX1VTRV9GRFYgKi8KLQotICAgIGlmICggKHVpUmVsb2FkVmFsdWUgPCAwKSB8fCAodWlSZWxvYWRWYWx1ZSA+IDgxOTEpICkKLSAgICB7Ci0jaWZuZGVmIElOQ0FBU0NfVVNFX0ZEVgotCWZkdiA9IDM7Ci0JdWlSZWxvYWRWYWx1ZSA9IChmX0FTQyAvIChmZHYgKiAxNiAqIENPTkZJR19CQVVEUkFURSkpIC0gMTsKLSNlbHNlCi0JZmR2ID0gSU5DQUFTQ19GRFZfTE9XX0JBVURSQVRFOwotCXVpUmVsb2FkVmFsdWUgPSAoZl9BU0MgLyAoODE5MiAqIENPTkZJR19CQVVEUkFURSAvIGZkdikpIC0gMTsKLSNlbmRpZiAvKiBJTkNBQVNDX1VTRV9GRFYgKi8KLQotCWlmICggKHVpUmVsb2FkVmFsdWUgPCAwKSB8fCAodWlSZWxvYWRWYWx1ZSA+IDgxOTEpICkKLQl7Ci0JICAgIHJldHVybjsgICAgLyogY2FuJ3QgaW1wb3NzaWJseSBnZW5lcmF0ZSB0aGF0IGJhdWQgcmF0ZSAqLwotCX0KLSAgICB9Ci0KLSAgICAvKiBEaXNhYmxlIEJhdWQgUmF0ZSBHZW5lcmF0b3I7IEJHIHNob3VsZCBvbmx5IGJlIHdyaXR0ZW4gd2hlbiBSPTAgKi8KLSAgICBDTEVBUl9CSVQocEFzYy0+YXNjX2NvbiwgQVNDQ09OX1IpOwotCi0jaWZuZGVmIElOQ0FBU0NfVVNFX0ZEVgotICAgIC8qCi0gICAgICogRGlzYWJsZSBGcmFjdGlvbmFsIERpdmlkZXIgKEZERSkKLSAgICAgKiBEaXZpZGUgY2xvY2sgYnkgcmVsb2FkLXZhbHVlICsgY29uc3RhbnQgKEJSUykKLSAgICAgKi8KLSAgICAvKiBGREUgPSAwICovCi0gICAgQ0xFQVJfQklUKHBBc2MtPmFzY19jb24sIEFTQ0NPTl9GREUpOwotCi0gICAgaWYgKCBmZHYgPT0gMiApCi0JQ0xFQVJfQklUKHBBc2MtPmFzY19jb24sIEFTQ0NPTl9CUlMpOyAgIC8qIEJSUyA9IDAgKi8KLSAgICBlbHNlCi0JU0VUX0JJVChwQXNjLT5hc2NfY29uLCBBU0NDT05fQlJTKTsgLyogQlJTID0gMSAqLwotCi0jZWxzZSAvKiBJTkNBQVNDX1VTRV9GRFYgKi8KLQotICAgIC8qIEVuYWJsZSBGcmFjdGlvbmFsIERpdmlkZXIgKi8KLSAgICBTRVRfQklUKHBBc2MtPmFzY19jb24sIEFTQ0NPTl9GREUpOyAvKiBGREUgPSAxICovCi0KLSAgICAvKiBTZXQgZnJhY3Rpb25hbCBkaXZpZGVyIHZhbHVlICovCi0gICAgcEFzYy0+YXNjX2ZkdiA9IGZkdiAmIEFTQ0ZEVl9WQUxVRV9NQVNLOwotCi0jZW5kaWYgLyogSU5DQUFTQ19VU0VfRkRWICovCi0KLSAgICAvKiBTZXQgcmVsb2FkIHZhbHVlIGluIEJHICovCi0gICAgcEFzYy0+YXNjX2JnID0gdWlSZWxvYWRWYWx1ZTsKLQotICAgIC8qIEVuYWJsZSBCYXVkIFJhdGUgR2VuZXJhdG9yICovCi0gICAgU0VUX0JJVChwQXNjLT5hc2NfY29uLCBBU0NDT05fUik7ICAgICAgICAgICAvKiBSID0gMSAqLwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiBzZXJpYWxfc2V0b3B0IC0gc2V0IHRoZSBzZXJpYWwgb3B0aW9ucwotKgotKiBTZXQgdGhlIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGUgdG8gdGhhdCBzcGVjaWZpZWQuIEZvbGxvd2luZyBvcHRpb25zCi0qIGFyZSBzdXBwb3J0ZWQ6IENSRUFELCBDU0laRSwgUEFSRU5CLCBhbmQgUEFST0RELgotKgotKiBOb3RlLCB0aGlzIHJvdXRpbmUgZGlzYWJsZXMgdGhlIHRyYW5zbWl0dGVyLiAgVGhlIGNhbGxpbmcgcm91dGluZQotKiBtYXkgaGF2ZSB0byByZS1lbmFibGUgaXQuCi0qCi0qIFJFVFVSTlM6Ci0qIFJldHVybnMgMCB0byBpbmRpY2F0ZSBzdWNjZXNzLCBvdGhlcndpc2UgLTEgaXMgcmV0dXJuZWQKLSovCi0KLXN0YXRpYyBpbnQgc2VyaWFsX3NldG9wdCAodm9pZCkKLXsKLSAgICB1bG9uZyAgY29uOwotCi0gICAgc3dpdGNoICggQVNDX09QVElPTlMgJiBBU0NPUFRfQ1NJWkUgKQotICAgIHsKLSAgICAvKiA3LWJpdC1kYXRhICovCi0gICAgY2FzZSBBU0NPUFRfQ1M3OgotCWNvbiA9IEFTQ0NPTl9NXzdBU1lOQ1BBUjsgICAvKiA3LWJpdC1kYXRhIGFuZCBwYXJpdHkgYml0ICovCi0JYnJlYWs7Ci0KLSAgICAvKiA4LWJpdC1kYXRhICovCi0gICAgY2FzZSBBU0NPUFRfQ1M4OgotCWlmICggQVNDX09QVElPTlMgJiBBU0NPUFRfUEFSRU5CICkKLQkgICAgY29uID0gQVNDQ09OX01fOEFTWU5DUEFSOyAgIC8qIDgtYml0LWRhdGEgYW5kIHBhcml0eSBiaXQgKi8KLQllbHNlCi0JICAgIGNvbiA9IEFTQ0NPTl9NXzhBU1lOQzsgICAgICAvKiA4LWJpdC1kYXRhIG5vIHBhcml0eSAqLwotCWJyZWFrOwotCi0gICAgLyoKLSAgICAgKiAgb25seSA3IGFuZCA4LWJpdCBmcmFtZXMgYXJlIHN1cHBvcnRlZAotICAgICAqICBpZiB3ZSBkb24ndCB1c2UgSU9DVEwgZXh0ZW5zaW9ucwotICAgICAqLwotICAgIGRlZmF1bHQ6Ci0JcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGlmICggQVNDX09QVElPTlMgJiBBU0NPUFRfU1RPUEIgKQotCVNFVF9CSVQoY29uLCBBU0NDT05fU1RQKTsgICAgICAgLyogMiBzdG9wIGJpdHMgKi8KLSAgICBlbHNlCi0JQ0xFQVJfQklUKGNvbiwgQVNDQ09OX1NUUCk7ICAgICAvKiAxIHN0b3AgYml0ICovCi0KLSAgICBpZiAoIEFTQ19PUFRJT05TICYgQVNDT1BUX1BBUkVOQiApCi0JU0VUX0JJVChjb24sIEFTQ0NPTl9QRU4pOyAgICAgICAgICAgLyogZW5hYmxlIHBhcml0eSBjaGVja2luZyAqLwotICAgIGVsc2UKLQlDTEVBUl9CSVQoY29uLCBBU0NDT05fUEVOKTsgICAgICAgICAvKiBkaXNhYmxlIHBhcml0eSBjaGVja2luZyAqLwotCi0gICAgaWYgKCBBU0NfT1BUSU9OUyAmIEFTQ09QVF9QQVJPREQgKQotCVNFVF9CSVQoY29uLCBBU0NDT05fT0REKTsgICAgICAgLyogb2RkIHBhcml0eSAqLwotICAgIGVsc2UKLQlDTEVBUl9CSVQoY29uLCBBU0NDT05fT0REKTsgICAgIC8qIGV2ZW4gcGFyaXR5ICovCi0KLSAgICBpZiAoIEFTQ19PUFRJT05TICYgQVNDT1BUX0NSRUFEICkKLQlTRVRfQklUKHBBc2MtPmFzY193aGJjb24sIEFTQ1dIQkNPTl9TRVRSRU4pOyAvKiBSZWNlaXZlciBlbmFibGUgKi8KLQotICAgIHBBc2MtPmFzY19jb24gfD0gY29uOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGFzY19zZXJpYWxfcHV0Yyhjb25zdCBjaGFyIGMpCi17Ci0gICAgdWludCB0eEZsID0gMDsKLQotICAgIGlmIChjID09ICdcbicpIHNlcmlhbF9wdXRjICgnXHInKTsKLQotICAgIC8qIGNoZWNrIGRvIHdlIGhhdmUgYSBmcmVlIHNwYWNlIGluIHRoZSBUWCBGSUZPICovCi0gICAgLyogZ2V0IGN1cnJlbnQgZmlsbGluZyBsZXZlbCAqLwotICAgIGRvCi0gICAgewotCXR4RmwgPSAoIHBBc2MtPmFzY19mc3RhdCAmIEFTQ0ZTVEFUX1RYRkZMTUFTSyApID4+IEFTQ0ZTVEFUX1RYRkZMT0ZGOwotICAgIH0KLSAgICB3aGlsZSAoIHR4RmwgPT0gSU5DQUFTQ19UWEZJRk9fRlVMTCApOwotCi0gICAgcEFzYy0+YXNjX3RidWYgPSBjOyAvKiB3cml0ZSBjaGFyIHRvIFRyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlciAqLwotCi0gICAgLyogY2hlY2sgZm9yIGVycm9ycyAqLwotICAgIGlmICggcEFzYy0+YXNjX2NvbiAmIEFTQ0NPTl9PRSApCi0gICAgewotCVNFVF9CSVQocEFzYy0+YXNjX3doYmNvbiwgQVNDV0hCQ09OX0NMUk9FKTsKLQlyZXR1cm47Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IGFzY19zZXJpYWxfZ2V0Yyh2b2lkKQotewotICAgIHVsb25nIHN5bWJvbF9tYXNrOwotICAgIGNoYXIgYzsKLQotICAgIHdoaWxlICghc2VyaWFsX3RzdGMoKSk7Ci0KLSAgICBzeW1ib2xfbWFzayA9Ci0JKChBU0NfT1BUSU9OUyAmIEFTQ09QVF9DU0laRSkgPT0gQVNDT1BUX0NTNykgPyAoMHg3ZikgOiAoMHhmZik7Ci0KLSAgICBjID0gKGNoYXIpKHBBc2MtPmFzY19yYnVmICYgc3ltYm9sX21hc2spOwotCi0gICAgcmV0dXJuIGM7Ci19Ci0KLXN0YXRpYyBpbnQgYXNjX3NlcmlhbF90c3RjKHZvaWQpCi17Ci0gICAgaW50IHJlcyA9IDE7Ci0KLSAgICBpZiAoIChwQXNjLT5hc2NfZnN0YXQgJiBBU0NGU1RBVF9SWEZGTE1BU0spID09IDAgKQotICAgIHsKLQlyZXMgPSAwOwotICAgIH0KLSAgICBlbHNlIGlmICggcEFzYy0+YXNjX2NvbiAmIEFTQ0NPTl9GRSApCi0gICAgewotCVNFVF9CSVQocEFzYy0+YXNjX3doYmNvbiwgQVNDV0hCQ09OX0NMUkZFKTsKLQlyZXMgPSAwOwotICAgIH0KLSAgICBlbHNlIGlmICggcEFzYy0+YXNjX2NvbiAmIEFTQ0NPTl9QRSApCi0gICAgewotCVNFVF9CSVQocEFzYy0+YXNjX3doYmNvbiwgQVNDV0hCQ09OX0NMUlBFKTsKLQlyZXMgPSAwOwotICAgIH0KLSAgICBlbHNlIGlmICggcEFzYy0+YXNjX2NvbiAmIEFTQ0NPTl9PRSApCi0gICAgewotCVNFVF9CSVQocEFzYy0+YXNjX3doYmNvbiwgQVNDV0hCQ09OX0NMUk9FKTsKLQlyZXMgPSAwOwotICAgIH0KLQotICAgIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2VyaWFsX2RldmljZSBhc2Nfc2VyaWFsX2RydiA9IHsKLQkubmFtZQk9ICJhc2Nfc2VyaWFsIiwKLQkuc3RhcnQJPSBhc2Nfc2VyaWFsX2luaXQsCi0JLnN0b3AJPSBOVUxMLAotCS5zZXRicmcJPSBhc2Nfc2VyaWFsX3NldGJyZywKLQkucHV0Ywk9IGFzY19zZXJpYWxfcHV0YywKLQkucHV0cwk9IGRlZmF1bHRfc2VyaWFsX3B1dHMsCi0JLmdldGMJPSBhc2Nfc2VyaWFsX2dldGMsCi0JLnRzdGMJPSBhc2Nfc2VyaWFsX3RzdGMsCi19OwotCi12b2lkIGFzY19zZXJpYWxfaW5pdGlhbGl6ZSh2b2lkKQotewotCXNlcmlhbF9yZWdpc3RlcigmYXNjX3NlcmlhbF9kcnYpOwotfQotCi1fX3dlYWsgc3RydWN0IHNlcmlhbF9kZXZpY2UgKmRlZmF1bHRfc2VyaWFsX2NvbnNvbGUodm9pZCkKLXsKLQlyZXR1cm4gJmFzY19zZXJpYWxfZHJ2OwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NwdS9taXBzMzIvaW5jYWlwL2FzY19zZXJpYWwuaCBiL2FyY2gvbWlwcy9jcHUvbWlwczMyL2luY2FpcC9hc2Nfc2VyaWFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZmRjZmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2NwdS9taXBzMzIvaW5jYWlwL2FzY19zZXJpYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0vKiBpbmNhQXNjU2lvLmggLSAoSU5DQSkgQVNDIFVBUlQgdHR5IGRyaXZlciBoZWFkZXIgKi8KLQotI2lmbmRlZiBfX0lOQ2luY2FBc2NTaW9oCi0jZGVmaW5lIF9fSU5DaW5jYUFzY1Npb2gKLQotI2luY2x1ZGUgPGFzbS9pbmNhLWlwLmg+Ci0KLS8qIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVzICovCi0jZGVmaW5lCUFTQ09QVF9DU0laRQkweDAwMDAwMDAzCi0jZGVmaW5lCUFTQ09QVF9DUzcJMHgwMDAwMDAwMQotI2RlZmluZQlBU0NPUFRfQ1M4CTB4MDAwMDAwMDIKLSNkZWZpbmUJQVNDT1BUX1BBUkVOQgkweDAwMDAwMDA0Ci0jZGVmaW5lCUFTQ09QVF9TVE9QQgkweDAwMDAwMDA4Ci0jZGVmaW5lCUFTQ09QVF9QQVJPREQJMHgwMDAwMDAxMAotI2RlZmluZQlBU0NPUFRfQ1JFQUQJMHgwMDAwMDAyMAotCi0jZGVmaW5lIEFTQ19PUFRJT05TCQkoQVNDT1BUX0NSRUFEIHwgQVNDT1BUX0NTOCkKLQotLyogQVNDIGlucHV0IHNlbGVjdCAoMCBvciAxKSAqLwotI2RlZmluZSBDT05TT0xFX1RUWQkwCi0KLS8qIHVzZSBmcmFjdGlvbmFsIGRpdmlkZXIgZm9yIGJhdWRyYXRlIHNldHRpbmdzICovCi0jZGVmaW5lIElOQ0FBU0NfVVNFX0ZEVgotCi0jaWZkZWYgSU5DQUFTQ19VU0VfRkRWCi0gICAjZGVmaW5lIElOQ0FBU0NfRkRWX0xPV19CQVVEUkFURSAgICAgICAgNzEKLSAgICNkZWZpbmUgSU5DQUFTQ19GRFZfSElHSF9CQVVEUkFURSAgICAgICA0NTMKLSNlbmRpZiAvKklOQ0FBU0NfVVNFX0ZEViovCi0KLQotI2RlZmluZSBJTkNBQVNDX1RYRklGT19GTCAgICAgICAxCi0jZGVmaW5lIElOQ0FBU0NfUlhGSUZPX0ZMICAgICAgIDEKLSNkZWZpbmUgSU5DQUFTQ19UWEZJRk9fRlVMTCAgICAgMTYKLQotLyogaW50ZXJydXB0IGxpbmVzIG1hc2tzIGZvciB0aGUgQVNDIGRldmljZSBpbnRlcnJ1cHRzKi8KLS8qIGNoYW5nZSB0aGVzZSBtYWNyb3NlcyBpZiBpdCdzIG5lY2Vzc2FyeSAqLwotI2RlZmluZSBJTkNBQVNDX0lSUV9MSU5FX0FMTCAgICAgICAgMHgwMDBGMDAwMCAgLyogYWxsIElSUXMgKi8KLQotI2RlZmluZSBJTkNBQVNDX0lSUV9MSU5FX1RJUiAgICAgICAgICAgIDB4MDAwMTAwMDAgICAgICAvKiBUSVIgLSBUeCAqLwotI2RlZmluZSBJTkNBQVNDX0lSUV9MSU5FX1JJUiAgICAgICAgICAgIDB4MDAwMjAwMDAgICAgICAvKiBSSVIgLSBSeCAqLwotI2RlZmluZSBJTkNBQVNDX0lSUV9MSU5FX0VJUiAgICAgICAgICAgIDB4MDAwNDAwMDAgICAgICAvKiBFSVIgLSBFcnIgKi8KLSNkZWZpbmUgSU5DQUFTQ19JUlFfTElORV9UQklSICAgICAgICAgICAweDAwMDgwMDAwICAgICAgLyogVEJJUiAtIFR4IEJ1ZiovCi0KLS8qIGludGVycnVwdCBjb250cm9sbGVyIGFjY2VzcyBtYWNyb3MgKi8KLSNkZWZpbmUgQVNDX0lOVEVSUlVQVFNfRU5BQkxFKFgpICBcCi0gICAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSBJTkNBX0lQX0lDVV9JTTJfSUVSKSB8PSBYOwotI2RlZmluZSBBU0NfSU5URVJSVVBUU19ESVNBQkxFKFgpIFwKLSAgICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCopIElOQ0FfSVBfSUNVX0lNMl9JRVIpICY9IH5YOwotI2RlZmluZSBBU0NfSU5URVJSVVBUU19DTEVBUihYKSAgIFwKLSAgICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCopIElOQ0FfSVBfSUNVX0lNMl9JU1IpID0gWDsKLQotLyogQ0xDIHJlZ2lzdGVyJ3MgYml0cyBhbmQgYml0ZmllbGRzICovCi0jZGVmaW5lIEFTQ0NMQ19ESVNSICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFTQ0NMQ19ESVNTICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEFTQ0NMQ19STUNNQVNLICAgICAweDAwMDBGRjAwCi0jZGVmaW5lIEFTQ0NMQ19STUNPRkZTRVQgICA4Ci0KLS8qIENPTiByZWdpc3RlcidzIGJpdHMgYW5kIGJpdGZpZWxkcyAqLwotI2RlZmluZSBBU0NDT05fTU9ERU1BU0sgMHgwMDA3Ci0gICAgI2RlZmluZSBBU0NDT05fTV84U1lOQyAgICAgICAgICAweDAKLSAgICAjZGVmaW5lIEFTQ0NPTl9NXzhBU1lOQyAgICAgICAgIDB4MQotICAgICNkZWZpbmUgQVNDQ09OX01fOElSREFBU1lOQyAgICAgMHgyCi0gICAgI2RlZmluZSBBU0NDT05fTV83QVNZTkNQQVIgICAgICAweDMKLSAgICAjZGVmaW5lIEFTQ0NPTl9NXzlBU1lOQyAgICAgICAgIDB4NAotICAgICNkZWZpbmUgQVNDQ09OX01fOFdBS0VVUEFTWU5DICAgMHg1Ci0gICAgI2RlZmluZSBBU0NDT05fTV84QVNZTkNQQVIgICAgICAweDcKLSNkZWZpbmUgQVNDQ09OX1NUUCAgICAgIDB4MDAwOAotI2RlZmluZSBBU0NDT05fUkVOICAgICAgMHgwMDEwCi0jZGVmaW5lIEFTQ0NPTl9QRU4gICAgICAweDAwMjAKLSNkZWZpbmUgQVNDQ09OX0ZFTiAgICAgIDB4MDA0MAotI2RlZmluZSBBU0NDT05fT0VOICAgICAgMHgwMDgwCi0jZGVmaW5lIEFTQ0NPTl9QRSAgICAgICAweDAxMDAKLSNkZWZpbmUgQVNDQ09OX0ZFICAgICAgIDB4MDIwMAotI2RlZmluZSBBU0NDT05fT0UgICAgICAgMHgwNDAwCi0jZGVmaW5lIEFTQ0NPTl9GREUgICAgICAweDA4MDAKLSNkZWZpbmUgQVNDQ09OX09ERCAgICAgIDB4MTAwMAotI2RlZmluZSBBU0NDT05fQlJTICAgICAgMHgyMDAwCi0jZGVmaW5lIEFTQ0NPTl9MQiAgICAgICAweDQwMDAKLSNkZWZpbmUgQVNDQ09OX1IgICAgICAgIDB4ODAwMAotCi0vKiBXSEJDT04gcmVnaXN0ZXIncyBiaXRzIGFuZCBiaXRmaWVsZHMgKi8KLSNkZWZpbmUgQVNDV0hCQ09OX0NMUlJFTiAgICAweDAwMTAKLSNkZWZpbmUgQVNDV0hCQ09OX1NFVFJFTiAgICAweDAwMjAKLSNkZWZpbmUgQVNDV0hCQ09OX0NMUlBFICAgICAweDAxMDAKLSNkZWZpbmUgQVNDV0hCQ09OX0NMUkZFICAgICAweDAyMDAKLSNkZWZpbmUgQVNDV0hCQ09OX0NMUk9FICAgICAweDA0MDAKLSNkZWZpbmUgQVNDV0hCQ09OX1NFVFBFICAgICAweDA4MDAKLSNkZWZpbmUgQVNDV0hCQ09OX1NFVEZFICAgICAweDEwMDAKLSNkZWZpbmUgQVNDV0hCQ09OX1NFVE9FICAgICAweDIwMDAKLQotLyogQUJDT04gcmVnaXN0ZXIncyBiaXRzIGFuZCBiaXRmaWVsZHMgKi8KLSNkZWZpbmUgQVNDQUJDT05fQUJFTiAgICAgICAweDAwMDEKLSNkZWZpbmUgQVNDQUJDT05fQVVSRU4gICAgICAweDAwMDIKLSNkZWZpbmUgQVNDQUJDT05fQUJTVEVOICAgICAweDAwMDQKLSNkZWZpbmUgQVNDQUJDT05fQUJERVRFTiAgICAweDAwMDgKLSNkZWZpbmUgQVNDQUJDT05fRkNERVRFTiAgICAweDAwMTAKLSNkZWZpbmUgQVNDQUJDT05fRU1NQVNLICAgICAweDAzMDAKLSAgICAjZGVmaW5lIEFTQ0FCQ09OX0VNT0ZGICAgICAgICAgIDgKLQkjZGVmaW5lIEFTQ0FCQ09OX0VNX0RJU0FCICAgICAgIDB4MAotCSNkZWZpbmUgQVNDQUJDT05fRU1fRFVSQUIgICAgICAgMHgxCi0JI2RlZmluZSBBU0NBQkNPTl9FTV9BTFdBWVMgICAgICAweDIKLSNkZWZpbmUgQVNDQUJDT05fVFhJTlYgICAgICAweDA0MDAKLSNkZWZpbmUgQVNDQUJDT05fUlhJTlYgICAgICAweDA4MDAKLQotLyogRkRWIHJlZ2lzdGVyIG1hc2ssIG9mZnNldCBhbmQgYml0ZmllbGRzKi8KLSNkZWZpbmUgQVNDRkRWX1ZBTFVFX01BU0sgICAgIDB4MDAwMDAxRkYKLQotLyogV0hCQUJDT04gcmVnaXN0ZXIncyBiaXRzIGFuZCBiaXRmaWVsZHMgKi8KLSNkZWZpbmUgQVNDV0hCQUJDT05fU0VUQUJFTiAgICAgMHgwMDAxCi0jZGVmaW5lIEFTQ1dIQkFCQ09OX0NMUkFCRU4gICAgIDB4MDAwMgotCi0vKiBBQlNUQVQgcmVnaXN0ZXIncyBiaXRzIGFuZCBiaXRmaWVsZHMgKi8KLSNkZWZpbmUgQVNDQUJTVEFUX0ZDU0RFVCAgICAweDAwMDEKLSNkZWZpbmUgQVNDQUJTVEFUX0ZDQ0RFVCAgICAweDAwMDIKLSNkZWZpbmUgQVNDQUJTVEFUX1NDU0RFVCAgICAweDAwMDQKLSNkZWZpbmUgQVNDQUJTVEFUX1NDQ0RFVCAgICAweDAwMDgKLSNkZWZpbmUgQVNDQUJTVEFUX0RFVFdBSVQgICAweDAwMTAKLQotLyogV0hCQUJTVEFUIHJlZ2lzdGVyJ3MgYml0cyBhbmQgYml0ZmllbGRzICovCi0jZGVmaW5lIEFTQ1dIQkFCU1RBVF9DTFJGQ1NERVQgIDB4MDAwMQotI2RlZmluZSBBU0NXSEJBQlNUQVRfU0VURkNTREVUICAweDAwMDIKLSNkZWZpbmUgQVNDV0hCQUJTVEFUX0NMUkZDQ0RFVCAgMHgwMDA0Ci0jZGVmaW5lIEFTQ1dIQkFCU1RBVF9TRVRGQ0NERVQgIDB4MDAwOAotI2RlZmluZSBBU0NXSEJBQlNUQVRfQ0xSU0NTREVUICAweDAwMTAKLSNkZWZpbmUgQVNDV0hCQUJTVEFUX1NFVFNDU0RFVCAgMHgwMDIwCi0jZGVmaW5lIEFTQ1dIQkFCU1RBVF9TRVRTQ0NERVQgIDB4MDA0MAotI2RlZmluZSBBU0NXSEJBQlNUQVRfQ0xSU0NDREVUICAweDAwODAKLSNkZWZpbmUgQVNDV0hCQUJTVEFUX0NMUkRFVFdBSVQgMHgwMTAwCi0jZGVmaW5lIEFTQ1dIQkFCU1RBVF9TRVRERVRXQUlUIDB4MDIwMAotCi0vKiBUWEZDT04gcmVnaXN0ZXIncyBiaXRzIGFuZCBiaXRmaWVsZHMgKi8KLSNkZWZpbmUgQVNDVFhGQ09OX1RYRkVOICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIEFTQ1RYRkNPTl9UWEZGTFUgICAgICAgIDB4MDAwMgotI2RlZmluZSBBU0NUWEZDT05fVFhUTUVOICAgICAgICAweDAwMDQKLSNkZWZpbmUgQVNDVFhGQ09OX1RYRklUTE1BU0sgICAgMHgzRjAwCi0jZGVmaW5lIEFTQ1RYRkNPTl9UWEZJVExPRkYgICAgIDgKLQotLyogUlhGQ09OIHJlZ2lzdGVyJ3MgYml0cyBhbmQgYml0ZmllbGRzICovCi0jZGVmaW5lIEFTQ1JYRkNPTl9SWEZFTiAgICAgICAgIDB4MDAwMQotI2RlZmluZSBBU0NSWEZDT05fUlhGRkxVICAgICAgICAweDAwMDIKLSNkZWZpbmUgQVNDUlhGQ09OX1JYVE1FTiAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIEFTQ1JYRkNPTl9SWEZJVExNQVNLICAgIDB4M0YwMAotI2RlZmluZSBBU0NSWEZDT05fUlhGSVRMT0ZGICAgICA4Ci0KLS8qIEZTVEFUIHJlZ2lzdGVyJ3MgYml0cyBhbmQgYml0ZmllbGRzICovCi0jZGVmaW5lIEFTQ0ZTVEFUX1JYRkZMTUFTSyAgICAgIDB4MDAzRgotI2RlZmluZSBBU0NGU1RBVF9UWEZGTE1BU0sgICAgICAweDNGMDAKLSNkZWZpbmUgQVNDRlNUQVRfVFhGRkxPRkYgICAgICAgOAotCi0jZGVmaW5lIElOQ0FBU0NfUE1VX0VOQUJMRShCSVQpICooKHZvbGF0aWxlIHVsb25nKikweEJGMTAyMDAwKSB8PSAoMHgxIDw8IEJJVCk7Ci0KLXR5cGVkZWYgIHN0cnVjdCAgICAgICAgIC8qIGluY2FBc2NfdCAqLwotewotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgIGFzY19jbGM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qMHgwMDAwKi8KLSAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2NfcGlzZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKjB4MDAwNCovCi0gICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgYXNjX3JzdmQxWzJdOyAgIC8qIGZvciBtYXBwaW5nICovICAgLyoweDAwMDgqLwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgIGFzY19jb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qMHgwMDEwKi8KLSAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2NfYmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjB4MDAxNCovCi0gICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgYXNjX2ZkdjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoweDAwMTgqLwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgIGFzY19wbXc7ICAgICAgICAvKiBub3QgdXNlZCAqLyAgICAgIC8qMHgwMDFDKi8KLSAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2NfdGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjB4MDAyMCovCi0gICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgYXNjX3JidWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoweDAwMjQqLwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgIGFzY19yc3ZkMlsyXTsgICAvKiBmb3IgbWFwcGluZyAqLyAgIC8qMHgwMDI4Ki8KLSAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2NfYWJjb247ICAgICAgICAgICAgICAgICAgICAgICAgICAvKjB4MDAzMCovCi0gICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgYXNjX2Fic3RhdDsgICAgIC8qIG5vdCB1c2VkICovICAgICAgLyoweDAwMzQqLwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgIGFzY19yc3ZkM1syXTsgICAvKiBmb3IgbWFwcGluZyAqLyAgIC8qMHgwMDM4Ki8KLSAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2NfcnhmY29uOyAgICAgICAgICAgICAgICAgICAgICAgICAvKjB4MDA0MCovCi0gICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgYXNjX3R4ZmNvbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoweDAwNDQqLwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgIGFzY19mc3RhdDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qMHgwMDQ4Ki8KLSAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2NfcnN2ZDQ7ICAgICAgLyogZm9yIG1hcHBpbmcgKi8gICAvKjB4MDA0QyovCi0gICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgYXNjX3doYmNvbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoweDAwNTAqLwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgIGFzY193aGJhYmNvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qMHgwMDU0Ki8KLSAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2Nfd2hiYWJzdGF0OyAgLyogbm90IHVzZWQgKi8gICAgICAvKjB4MDA1OCovCi0KLX0gaW5jYUFzY190OwotCi0jZW5kaWYgLyogX19JTkNpbmNhQXNjU2lvaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NwdS9taXBzMzIvaW5jYWlwL2NvbmZpZy5tayBiL2FyY2gvbWlwcy9jcHUvbWlwczMyL2luY2FpcC9jb25maWcubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjODkxMjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2NwdS9taXBzMzIvaW5jYWlwL2NvbmZpZy5taworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIwotIyAoQykgQ29weXJpZ2h0IDIwMTEKLSMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSMKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0jCi0KLVBMQVRGT1JNX0NQUEZMQUdTICs9IC1tdHVuZT00a2MKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jcHUvbWlwczMyL2luY2FpcC9pbmNhaXBfY2xvY2suYyBiL2FyY2gvbWlwcy9jcHUvbWlwczMyL2luY2FpcC9pbmNhaXBfY2xvY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZhZGE5Zi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvY3B1L21pcHMzMi9pbmNhaXAvaW5jYWlwX2Nsb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMwotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2luY2EtaXAuaD4KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiBnZXRfY3B1Y2xrIC0gcmV0dXJucyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBDUFUuCi0qCi0qIEdldHMgdGhlIHZhbHVlIGRpcmVjdGx5IGZyb20gdGhlIElOQ0EtSVAgaGFyZHdhcmUuCi0qCi0qIFJFVFVSTlM6Ci0qICAgICAgICAgIDE1MC4wMDAuMDAwIGZvciAxNTAgTUh6Ci0qICAgICAgICAgIDEzMy4zMzMuMzMzIGZvciAxMzMgTUh6ICg9IDQwME1Iei8zKQotKiAgICAgICAgICAxMDAuMDAwLjAwMCBmb3IgMTAwIE1IeiAoPSA0MDBNSHovNCkKLSogTk9URToKLSogICBUaGlzIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBieSB0aGUgaGFyZHdhcmUgZHJpdmVyIHRvIGdldCB0aGUgY29ycmVjdAotKiAgIGZyZXF1ZW5jeSBvZiB0aGUgQ1BVLiBEb24ndCB1c2UgdGhlIG1hY3Jvcywgd2hpY2ggYXJlIHNldCB0byBpbml0IHRoZSBDUFUKLSogICBmcmVxdWVuY3kgaW4gdGhlIFJPTSBjb2RlLgotKi8KLXVpbnQgaW5jYWlwX2dldF9jcHVjbGsgKHZvaWQpCi17Ci0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQkvKiBDUFUgQ2xvY2sgSW5wdXQgTXVsdGlwbGV4ZXIgKE1VWCBJKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCS8qIE11bHRpcGxleGVyIE1VWCBJIHNlbGVjdHMgdGhlIG1heGltdW0gaW5wdXQgY2xvY2sgdG8gdGhlIENQVS4gICAgICAgICAgICovCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlpZiAoKigodm9sYXRpbGUgdWxvbmcgKikgSU5DQV9JUF9DR1VfQ0dVX01VWENSKSAmCi0JICAgIElOQ0FfSVBfQ0dVX0NHVV9NVVhDUl9NVVhJKSB7Ci0JCS8qIE1VWCBJIHNldCB0byAxNTAgTUh6IGNsb2NrICovCi0JCXJldHVybiAxNTAwMDAwMDA7Ci0JfSBlbHNlIHsKLQkJLyogTVVYIEkgc2V0IHRvIDEwMC8xMzMgTUh6IGNsb2NrICovCi0JCWlmICgqKCh2b2xhdGlsZSB1bG9uZyAqKSBJTkNBX0lQX0NHVV9DR1VfRElWQ1IpICYgMHg0MCkgewotCQkJLyogRGl2aXNpb24gdmFsdWUgaXMgMS8zLCBtYXhpbXVtIENQVSBvcGVyYXRpbmcgKi8KLQkJCS8qIGZyZXF1ZW5jeSBpcyAxMzMuMyBNSHogICAgICAgICAgICAgICAgICAgICAgICovCi0JCQlyZXR1cm4gMTMzMzMzMzMzOwotCQl9IGVsc2UgewotCQkJLyogRGl2aXNpb24gdmFsdWUgaXMgMS80LCBtYXhpbXVtIENQVSBvcGVyYXRpbmcgKi8KLQkJCS8qIGZyZXF1ZW5jeSBpcyAxMDAgTUh6ICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JCQlyZXR1cm4gMTAwMDAwMDAwOwotCQl9Ci0JfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiBnZXRfZnBpY2xrIC0gcmV0dXJucyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBGUEkgYnVzLgotKgotKiBHZXRzIHRoZSB2YWx1ZSBkaXJlY3RseSBmcm9tIHRoZSBJTkNBLUlQIGhhcmR3YXJlLgotKgotKiBSRVRVUk5TOiBGcnF1ZW5jeSBpbiBIegotKgotKiBOT1RFOgotKiAgIFRoaXMgZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBoYXJkd2FyZSBkcml2ZXIgdG8gZ2V0IHRoZSBjb3JyZWN0Ci0qICAgZnJlcXVlbmN5IG9mIHRoZSBDUFUuIERvbid0IHVzZSB0aGUgbWFjcm9zLCB3aGljaCBhcmUgc2V0IHRvIGluaXQgdGhlIENQVQotKiAgIGZyZXF1ZW5jeSBpbiB0aGUgUk9NIGNvZGUuCi0qICAgVGhlIGNhbGN1bGF0aW9uIGZvciB0aGUKLSovCi11aW50IGluY2FpcF9nZXRfZnBpY2xrICh2b2lkKQotewotCXVpbnQgY2xrQ1BVOwotCi0JY2xrQ1BVID0gaW5jYWlwX2dldF9jcHVjbGsgKCk7Ci0KLQlzd2l0Y2ggKCooKHZvbGF0aWxlIHVsb25nICopIElOQ0FfSVBfQ0dVX0NHVV9ESVZDUikgJiAweEMpIHsKLQljYXNlIDB4NDoKLQkJcmV0dXJuIGNsa0NQVSA+PiAxOwkvKiBkZXZpZGVkIGJ5IDIgKi8KLQkJYnJlYWs7Ci0JY2FzZSAweDg6Ci0JCXJldHVybiBjbGtDUFUgPj4gMjsJLyogZGV2aWRlZCBieSA0ICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBjbGtDUFU7Ci0JCWJyZWFrOwotCX0KLX0KLQotaW50IGluY2FpcF9zZXRfY3B1Y2xrICh2b2lkKQotewotCWV4dGVybiB2b2lkIGVidV9pbml0KGxvbmcpOwotCWV4dGVybiB2b2lkIGNndV9pbml0KGxvbmcpOwotCWV4dGVybiB2b2lkIHNkcmFtX2luaXQobG9uZyk7Ci0JY2hhciB0bXBbNjRdOwotCXVsb25nIGNwdWNsazsKLQotCWlmIChnZXRlbnZfZigiY3B1Y2xrIiwgdG1wLCBzaXplb2YgKHRtcCkpID4gMCkgewotCQljcHVjbGsgPSBzaW1wbGVfc3RydG91bCAodG1wLCBOVUxMLCAxMCkgKiAxMDAwMDAwOwotCQljZ3VfaW5pdCAoY3B1Y2xrKTsKLQkJZWJ1X2luaXQgKGNwdWNsayk7Ci0JCXNkcmFtX2luaXQgKGNwdWNsayk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY3B1L21pcHMzMi9pbmNhaXAvaW5jYWlwX3dkdC5TIGIvYXJjaC9taXBzL2NwdS9taXBzMzIvaW5jYWlwL2luY2FpcF93ZHQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE1MzIwYS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvY3B1L21pcHMzMi9pbmNhaXAvaW5jYWlwX3dkdC5TCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqICBJTkNBLUlQIFdhdGNoZG9nIHRpbWVyIG1hbmFnZW1lbnQgY29kZS4KLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAzCVdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+Ci0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotCi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotCi0KLSNkZWZpbmUgV0RfQkFTRSAgICAgICAgICAgIDB4YjgwMDAwMDAKLSNkZWZpbmUgV0RfQ09OMCh2YWx1ZSkgICAgIDB4MDAyMCh2YWx1ZSkKLSNkZWZpbmUgV0RfQ09OMSh2YWx1ZSkgICAgIDB4MDAyNCh2YWx1ZSkKLSNkZWZpbmUgV0RfRElTQUJMRSAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgV0RfRU5BQkxFICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgV0RfV1JJVEVfUFcgICAgICAgIDB4RkZGQzAwRjgKLSNkZWZpbmUgV0RfV1JJVEVfRU5ESU5JVCAgIDB4RkZGQzAwRjMKLSNkZWZpbmUgV0RfV1JJVEVfSU5JVCAgICAgIDB4RkZGQzAwRjIKLQotCi0JLmdsb2JsCWRpc2FibGVfaW5jYWlwX3dkdAotZGlzYWJsZV9pbmNhaXBfd2R0OgotCWxpCXQwLCBXRF9CQVNFCi0KLQkvKiBDYWxjdWxhdGUgcGFzc3dvcmQuCi0JICovCi0JbHcJdDIsIFdEX0NPTjEodDApCi0JYW5kCXQyLCAweEMKLQotCWx3CXQzLCBXRF9DT04wKHQwKQotCWFuZAl0MywgMHhGRkZGRkYwMQotCi0Jb3IJdDMsIHQyCi0Jb3IJdDMsIDB4RjAKLQotCXN3CXQzLCBXRF9DT04wKHQwKQkJLyogd3JpdGUgcGFzc3dvcmQgKi8KLQotCS8qIENsZWFyIEVORElOSVQuCi0JICovCi0JbGkJdDEsIFdEX1dSSVRFX0lOSVQKLQlzdwl0MSwgV0RfQ09OMCh0MCkKLQotCi0JbGkJdDEsIFdEX0RJU0FCTEUKLQlzdwl0MSwgV0RfQ09OMSh0MCkJCS8qIGRpc2FibGUgd2F0Y2hkb2cgKi8KLQlsaQl0MSwgV0RfV1JJVEVfUFcKLQlzdwl0MSwgV0RfQ09OMCh0MCkJCS8qIHdyaXRlIHBhc3N3b3JkICovCi0JbGkJdDEsIFdEX1dSSVRFX0VORElOSVQKLQlzdwl0MSwgV0RfQ09OMCh0MCkJCS8qIGVuZCBjb21tYW5kICovCi0KLQlqcglyYQotCW5vcApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NwdS9taXBzMzIvaW50ZXJydXB0cy5jIGIvYXJjaC9taXBzL2NwdS9taXBzMzIvaW50ZXJydXB0cy5jCmluZGV4IGE3ZTJlZDAuLjI3NWZjZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jcHUvbWlwczMyL2ludGVycnVwdHMuYworKysgYi9hcmNoL21pcHMvY3B1L21pcHMzMi9pbnRlcnJ1cHRzLmMKQEAgLTcsNiArNywxMSBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAKK2ludCBpbnRlcnJ1cHRfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCiB2b2lkIGVuYWJsZV9pbnRlcnJ1cHRzKHZvaWQpCiB7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY3B1L21pcHM2NC9pbnRlcnJ1cHRzLmMgYi9hcmNoL21pcHMvY3B1L21pcHM2NC9pbnRlcnJ1cHRzLmMKaW5kZXggYTdlMmVkMC4uMjc1ZmNmNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NwdS9taXBzNjQvaW50ZXJydXB0cy5jCisrKyBiL2FyY2gvbWlwcy9jcHUvbWlwczY0L2ludGVycnVwdHMuYwpAQCAtNyw2ICs3LDExIEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KIAoraW50IGludGVycnVwdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKIHZvaWQgZW5hYmxlX2ludGVycnVwdHModm9pZCkKIHsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jcHUvdS1ib290LmxkcyBiL2FyY2gvbWlwcy9jcHUvdS1ib290LmxkcwppbmRleCAxNmE5ZDZhLi5lNTA0ZWE3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY3B1L3UtYm9vdC5sZHMKKysrIGIvYXJjaC9taXBzL2NwdS91LWJvb3QubGRzCkBAIC01Myw2ICs1Myw3IEBACiAKIAkuID0gQUxJR04oNCk7CiAJX19pbWFnZV9jb3B5X2VuZCA9IC47CisJX19pbml0X2VuZCA9IC47CiAKIAkucmVsLmR5biA6IHsKIAkJX19yZWxfZHluX3N0YXJ0ID0gLjsKQEAgLTYwLDI3ICs2MSw3IEBACiAJCV9fcmVsX2R5bl9lbmQgPSAuOwogCX0KIAotCS5kZWFkY29kZSA6IHsKLQkJLyoKLQkJICogV29ya2Fyb3VuZCBmb3IgYSBiaW51dGlscyBmZWF0dXJlIChvciBidWc/KS4KLQkJICoKLQkJICogVGhlIEdOVSBsZCBmcm9tIGJpbnV0aWxzIHB1dHMgdGhlIGR5bmFtaWMgcmVsb2NhdGlvbgotCQkgKiBlbnRyaWVzIGludG8gdGhlIC5yZWwuZHluIHNlY3Rpb24uIFNvbWV0aW1lcyBpdAotCQkgKiBhbGxvY2F0ZXMgbW9yZSBkeW5hbWljIHJlbG9jYXRpb24gZW50cmllcyB0aGFuIGl0IG5lZWRzCi0JCSAqIGFuZCB0aGUgdW51c2VkIHNsb3RzIGFyZSBzZXQgdG8gUl9NSVBTX05PTkUgZW50cmllcy4KLQkJICoKLQkJICogSG93ZXZlciB0aGUgc2l6ZSBvZiB0aGUgLnJlbC5keW4gc2VjdGlvbiBpbiB0aGUgRUxGCi0JCSAqIHNlY3Rpb24gaGVhZGVyIGRvZXMgbm90IGNvdmVyIHRoZSB1bnVzZWQgZW50cmllcywgc28KLQkJICogb2JqY29weSByZW1vdmVzIHRob3NlIGR1cmluZyBzdHJpcHBpbmcuCi0JCSAqCi0JCSAqIENyZWF0ZSBhIHNtYWxsIHNlY3Rpb24gaGVyZSB0byBhdm9pZCB0aGF0LgotCQkgKi8KLQkJTE9ORygweGZmZmZmZmZmKTsKLQl9Ci0KLQkuZHluc3ltIDogewotCQkqKC5keW5zeW0pCi0JfQorCV9lbmQgPSAuOwogCiAJLmJzcyBfX3JlbF9keW5fc3RhcnQgKE9WRVJMQVkpIDogewogCQlfX2Jzc19zdGFydCA9IC47CkBAIC05MSwxNSArNzIsMzkgQEAKIAkJX19ic3NfZW5kID0gLjsKIAl9CiAKKwkuZHluc3ltIF9lbmQgOiB7CisJCSooLmR5bnN5bSkKKwl9CisKLQkvRElTQ0FSRC8gOiB7CisJLmR5bmJzcyA6IHsKIAkJKiguZHluYnNzKQorCX0KKworCS5keW5zdHIgOiB7CiAJCSooLmR5bnN0cikKKwl9CisKKwkuZHluYW1pYyA6IHsKIAkJKiguZHluYW1pYykKKwl9CisKKwkucGx0IDogeworCQkqKC5wbHQpCisJfQorCisJLmludGVycCA6IHsKIAkJKiguaW50ZXJwKQorCX0KKworCS5nbnUgOiB7CisJCSooLmdudSopCisJfQorCisJLk1JUFMuc3R1YnMgOiB7CisJCSooLk1JUFMuc3R1YnMpCisJfQorCisJLmhhc2ggOiB7CiAJCSooLmhhc2gpCi0JCSooLmdudS4qKQotCQkqKC5wbHQpCi0JCSooLmdvdC5wbHQpCi0JCSooLnJlbC5wbHQpCiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NwdS94YnVyc3QvTWFrZWZpbGUgYi9hcmNoL21pcHMvY3B1L3hidXJzdC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc3MTRkMC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvY3B1L3hidXJzdC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgKEMpIDIwMTEgWGlhbmdmdSBMaXUgPHhpYW5nZnVAb3Blbm1vYmlsZWZyZWUubmV0PgotIwotIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSMKLQotZXh0cmEteQk9IHN0YXJ0Lm8KLW9iai15CT0gY3B1Lm8gdGltZXIubyBqel9zZXJpYWwubwotb2JqLSQoQ09ORklHX0paNDc0MCkgKz0gano0NzQwLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jcHUveGJ1cnN0L2NvbmZpZy5tayBiL2FyY2gvbWlwcy9jcHUveGJ1cnN0L2NvbmZpZy5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhlNTNlNS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvY3B1L3hidXJzdC9jb25maWcubWsKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jCi0jIENvcHlyaWdodCAoQykgMjAxMSBYaWFuZ2Z1IExpdSA8eGlhbmdmdUBvcGVubW9iaWxlZnJlZS5uZXQ+Ci0jCi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotIwotCi1QTEFURk9STV9DUFBGTEFHUyArPSAtbWFyY2g9bWlwczMyCi1QTEFURk9STV9DUFBGTEFHUyArPSAtbWFiaT0zMiAtRENPTkZJR18zMkJJVAotaWZkZWYgQ09ORklHX1NZU19CSUdfRU5ESUFOCi1QTEFURk9STV9MREZMQUdTICArPSAtbSBlbGYzMmJ0c21pcAotZWxzZQotUExBVEZPUk1fTERGTEFHUyAgKz0gLW0gZWxmMzJsdHNtaXAKLWVuZGlmCi0KLUNPTkZJR19TVEFOREFMT05FX0xPQURfQUREUiA/PSAweDgwMjAwMDAwIFwKLQkJCSAgICAgICAtVCAkKHNyY3RyZWUpL2V4YW1wbGVzL3N0YW5kYWxvbmUvbWlwcy5sZHMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jcHUveGJ1cnN0L2NwdS5jIGIvYXJjaC9taXBzL2NwdS94YnVyc3QvY3B1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZGFhMzIuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2NwdS94YnVyc3QvY3B1LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMwotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPHdkQGRlbnguZGU+Ci0gKiAoQykgQ29weXJpZ2h0IDIwMTEKLSAqIFhpYW5nZnUgTGl1IDx4aWFuZ2Z1QG9wZW5tb2JpbGVmcmVlLm5ldD4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPG5ldGRldi5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZW9wcy5oPgotI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vano0NzQwLmg+Ci0KLSNkZWZpbmUgY2FjaGVfb3Aob3AsIGFkZHIpCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQlcCi0JCSIuc2V0CXB1c2hcbiIJCVwKLQkJIi5zZXQJbm9yZW9yZGVyXG4iCVwKLQkJIi5zZXQJbWlwczNcbiIJXAotCQkiY2FjaGUJJTAsICUxXG4iCVwKLQkJIi5zZXQJcG9wXG4iCQlcCi0JCToJCQlcCi0JCTogImkiIChvcCksICJSIiAoKih1bnNpZ25lZCBjaGFyICopKGFkZHIpKSkKLQotdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgX21hY2hpbmVfcmVzdGFydCh2b2lkKQotewotCXN0cnVjdCBqejQ3NDBfd2R0ICp3ZHQgPSAoc3RydWN0IGp6NDc0MF93ZHQgKilKWjQ3NDBfV0RUX0JBU0U7Ci0Jc3RydWN0IGp6NDc0MF90Y3UgKnRjdSA9IChzdHJ1Y3Qgano0NzQwX3RjdSAqKUpaNDc0MF9UQ1VfQkFTRTsKLQl1MTYgdG1wOwotCi0JLyogd2R0X3NlbGVjdF9leHRhbGNsaygpICovCi0JdG1wID0gcmVhZHcoJndkdC0+dGNzcik7Ci0JdG1wICY9IH4oV0RUX1RDU1JfRVhUX0VOIHwgV0RUX1RDU1JfUlRDX0VOIHwgV0RUX1RDU1JfUENLX0VOKTsKLQl0bXAgfD0gV0RUX1RDU1JfRVhUX0VOOwotCXdyaXRldyh0bXAsICZ3ZHQtPnRjc3IpOwotCi0JLyogd2R0X3NlbGVjdF9jbGtfZGl2NjQoKSAqLwotCXRtcCA9IHJlYWR3KCZ3ZHQtPnRjc3IpOwotCXRtcCAmPSB+V0RUX1RDU1JfUFJFU0NBTEVfTUFTSzsKLQl0bXAgfD0gV0RUX1RDU1JfUFJFU0NBTEU2NCwKLQl3cml0ZXcodG1wLCAmd2R0LT50Y3NyKTsKLQotCXdyaXRldygxMDAsICZ3ZHQtPnRkcik7IC8qIHdkdF9zZXRfZGF0YSgxMDApICovCi0Jd3JpdGV3KDAsICZ3ZHQtPnRjbnQpOyAvKiB3ZHRfc2V0X2NvdW50KDApOyAqLwotCXdyaXRlbChUQ1VfVFNTUl9XRFRTQywgJnRjdS0+dHNjcik7IC8qIHRjdV9zdGFydF93ZHRfY2xvY2sgKi8KLQl3cml0ZWIocmVhZGIoJndkdC0+dGNlcikgfCBXRFRfVENFUl9UQ0VOLCAmd2R0LT50Y2VyKTsgLyogd2R0IHN0YXJ0ICovCi0KLQl3aGlsZSAoMSkKLQkJOwotfQotCi1pbnQgZG9fcmVzZXQoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQotewotCV9tYWNoaW5lX3Jlc3RhcnQoKTsKLQotCWZwcmludGYoc3RkZXJyLCAiKioqIHJlc2V0IGZhaWxlZCAqKipcbiIpOwotCXJldHVybiAwOwotfQotCi12b2lkIGZsdXNoX2NhY2hlKHVsb25nIHN0YXJ0X2FkZHIsIHVsb25nIHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBsc2l6ZSA9IENPTkZJR19TWVNfQ0FDSEVMSU5FX1NJWkU7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gc3RhcnRfYWRkciAmIH4obHNpemUgLSAxKTsKLQl1bnNpZ25lZCBsb25nIGFlbmQgPSAoc3RhcnRfYWRkciArIHNpemUgLSAxKSAmIH4obHNpemUgLSAxKTsKLQotCWZvciAoOyBhZGRyIDw9IGFlbmQ7IGFkZHIgKz0gbHNpemUpIHsKLQkJY2FjaGVfb3AoSElUX1dSSVRFQkFDS19JTlZfRCwgYWRkcik7Ci0JCWNhY2hlX29wKEhJVF9JTlZBTElEQVRFX0ksIGFkZHIpOwotCX0KLX0KLQotdm9pZCBmbHVzaF9kY2FjaGVfcmFuZ2UodWxvbmcgc3RhcnRfYWRkciwgdWxvbmcgc3RvcCkKLXsKLQl1bnNpZ25lZCBsb25nIGxzaXplID0gQ09ORklHX1NZU19DQUNIRUxJTkVfU0laRTsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydF9hZGRyICYgfihsc2l6ZSAtIDEpOwotCXVuc2lnbmVkIGxvbmcgYWVuZCA9IChzdG9wIC0gMSkgJiB+KGxzaXplIC0gMSk7Ci0KLQlmb3IgKDsgYWRkciA8PSBhZW5kOyBhZGRyICs9IGxzaXplKQotCQljYWNoZV9vcChISVRfV1JJVEVCQUNLX0lOVl9ELCBhZGRyKTsKLX0KLQotdm9pZCBpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSh1bG9uZyBzdGFydF9hZGRyLCB1bG9uZyBzdG9wKQotewotCXVuc2lnbmVkIGxvbmcgbHNpemUgPSBDT05GSUdfU1lTX0NBQ0hFTElORV9TSVpFOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9IHN0YXJ0X2FkZHIgJiB+KGxzaXplIC0gMSk7Ci0JdW5zaWduZWQgbG9uZyBhZW5kID0gKHN0b3AgLSAxKSAmIH4obHNpemUgLSAxKTsKLQotCWZvciAoOyBhZGRyIDw9IGFlbmQ7IGFkZHIgKz0gbHNpemUpCi0JCWNhY2hlX29wKEhJVF9JTlZBTElEQVRFX0QsIGFkZHIpOwotfQotCi12b2lkIGZsdXNoX2ljYWNoZV9hbGwodm9pZCkKLXsKLQl1MzIgYWRkciwgdCA9IDA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXRjMCAkMCwgJDI4Iik7IC8qIENsZWFyIFRhZ2xvICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIm10YzAgJDAsICQyOSIpOyAvKiBDbGVhciBUYWdIaSAqLwotCi0JZm9yIChhZGRyID0gQ0tTRUcwOyBhZGRyIDwgQ0tTRUcwICsgQ09ORklHX1NZU19JQ0FDSEVfU0laRTsKLQkgICAgIGFkZHIgKz0gQ09ORklHX1NZU19DQUNIRUxJTkVfU0laRSkgewotCQljYWNoZV9vcChJTkRFWF9TVE9SRV9UQUdfSSwgYWRkcik7Ci0JfQotCi0JLyogaW52YWxpZGF0ZSBidGIgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIi5zZXQgbWlwczMyXG5cdCIKLQkJIm1mYzAgJTAsICQxNiwgN1xuXHQiCi0JCSJub3Bcblx0IgotCQkib3JpICUwLDJcblx0IgotCQkibXRjMCAlMCwgJDE2LCA3XG5cdCIKLQkJIi5zZXQgbWlwczJcblx0IgotCQk6Ci0JCTogInIiICh0KSk7Ci19Ci0KLXZvaWQgZmx1c2hfZGNhY2hlX2FsbCh2b2lkKQotewotCXUzMiBhZGRyOwotCi0JZm9yIChhZGRyID0gQ0tTRUcwOyBhZGRyIDwgQ0tTRUcwICsgQ09ORklHX1NZU19EQ0FDSEVfU0laRTsKLQkgICAgIGFkZHIgKz0gQ09ORklHX1NZU19DQUNIRUxJTkVfU0laRSkgewotCQljYWNoZV9vcChJTkRFWF9XUklURUJBQ0tfSU5WX0QsIGFkZHIpOwotCX0KLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIik7Ci19Ci0KLXZvaWQgZmx1c2hfY2FjaGVfYWxsKHZvaWQpCi17Ci0JZmx1c2hfZGNhY2hlX2FsbCgpOwotCWZsdXNoX2ljYWNoZV9hbGwoKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jcHUveGJ1cnN0L2p6NDc0MC5jIGIvYXJjaC9taXBzL2NwdS94YnVyc3Qvano0NzQwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZjM1YmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2NwdS94YnVyc3Qvano0NzQwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoKLSAqIEp6NDc0MCBjb21tb24gcm91dGluZXMKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJbmdlbmljIFNlbWljb25kdWN0b3IsIDxqbHdlaUBpbmdlbmljLmNuPgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb25maWcuaD4KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vano0NzQwLmg+Ci0KLXZvaWQgZW5hYmxlX2ludGVycnVwdHModm9pZCkKLXsKLX0KLQotaW50IGRpc2FibGVfaW50ZXJydXB0cyh2b2lkKQotewotCXJldHVybiAwOwotfQotCi0vKgotICogUExMIG91dHB1dCBjbG9jayA9IEVYVEFMICogTkYgLyAoTlIgKiBOTykKLSAqIE5GID0gRkQgKyAyLCBOUiA9IFJEICsgMgotICogTk8gPSAxIChpZiBPRCA9IDApLCBOTyA9IDIgKGlmIE9EID0gMSBvciAyKSwgTk8gPSA0IChpZiBPRCA9IDMpCi0gKi8KLXZvaWQgcGxsX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3Qgano0NzQwX2NwbSAqY3BtID0gKHN0cnVjdCBqejQ3NDBfY3BtICopSlo0NzQwX0NQTV9CQVNFOwotCi0JcmVnaXN0ZXIgdW5zaWduZWQgaW50IGNmY3IsIHBsY3IxOwotCWludCBuMkZSWzMzXSA9IHsKLQkJMCwgMCwgMSwgMiwgMywgMCwgNCwgMCwgNSwgMCwgMCwgMCwgNiwgMCwgMCwgMCwKLQkJNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkJOQotCX07Ci0JaW50IGRpdls1XSA9IHsxLCAzLCAzLCAzLCAzfTsgLyogZGl2aXNvcnMgb2YgSTpTOlA6TDpNICovCi0JaW50IG5mLCBwbGxvdXQyOwotCi0JY2ZjciA9CUNQTV9DUENDUl9DTEtPRU4gfAotCQlDUE1fQ1BDQ1JfUENTIHwKLQkJKG4yRlJbZGl2WzBdXSA8PCBDUE1fQ1BDQ1JfQ0RJVl9CSVQpIHwKLQkJKG4yRlJbZGl2WzFdXSA8PCBDUE1fQ1BDQ1JfSERJVl9CSVQpIHwKLQkJKG4yRlJbZGl2WzJdXSA8PCBDUE1fQ1BDQ1JfUERJVl9CSVQpIHwKLQkJKG4yRlJbZGl2WzNdXSA8PCBDUE1fQ1BDQ1JfTURJVl9CSVQpIHwKLQkJKG4yRlJbZGl2WzRdXSA8PCBDUE1fQ1BDQ1JfTERJVl9CSVQpOwotCi0JcGxsb3V0MiA9IChjZmNyICYgQ1BNX0NQQ0NSX1BDUykgPwotCQlDT05GSUdfU1lTX0NQVV9TUEVFRCA6IChDT05GSUdfU1lTX0NQVV9TUEVFRCAvIDIpOwotCi0JLyogSW5pdCBVU0IgSG9zdCBjbG9jaywgcGxsb3V0MiBtdXN0IGJlIG4qNDhNSHogKi8KLQl3cml0ZWwocGxsb3V0MiAvIDQ4MDAwMDAwIC0gMSwgJmNwbS0+dWhjY2RyKTsKLQotCW5mID0gQ09ORklHX1NZU19DUFVfU1BFRUQgKiAyIC8gQ09ORklHX1NZU19FWFRBTDsKLQlwbGNyMSA9ICgobmYgLSAyKSA8PCBDUE1fQ1BQQ1JfUExMTV9CSVQpIHwgLyogRkQgKi8KLQkJKDAgPDwgQ1BNX0NQUENSX1BMTE5fQklUKSB8CS8qIFJEPTAsIE5SPTIgKi8KLQkJKDAgPDwgQ1BNX0NQUENSX1BMTE9EX0JJVCkgfAkvKiBPRD0wLCBOTz0xICovCi0JCSgweDIwIDw8IENQTV9DUFBDUl9QTExTVF9CSVQpIHwJLyogUExMIHN0YWJsZSB0aW1lICovCi0JCUNQTV9DUFBDUl9QTExFTjsJCS8qIGVuYWJsZSBQTEwgKi8KLQotCS8qIGluaXQgUExMICovCi0Jd3JpdGVsKGNmY3IsICZjcG0tPmNwY2NyKTsKLQl3cml0ZWwocGxjcjEsICZjcG0tPmNwcGNyKTsKLX0KLQotdm9pZCBzZHJhbV9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGp6NDc0MF9lbWMgKmVtYyA9IChzdHJ1Y3Qgano0NzQwX2VtYyAqKUpaNDc0MF9FTUNfQkFTRTsKLQotCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBkbWNyMCwgZG1jciwgc2Rtb2RlLCB0bXAsIGNwdV9jbGssIG1lbV9jbGssIG5zOwotCi0JdW5zaWduZWQgaW50IGNhc19sYXRlbmN5X3NkbXJbMl0gPSB7Ci0JCUVNQ19TRE1SX0NBU18yLAotCQlFTUNfU0RNUl9DQVNfMywKLQl9OwotCi0JdW5zaWduZWQgaW50IGNhc19sYXRlbmN5X2RtY3JbMl0gPSB7Ci0JCTEgPDwgRU1DX0RNQ1JfVENMX0JJVCwJLyogQ0FTIGxhdGVuY3kgaXMgMiAqLwotCQkyIDw8IEVNQ19ETUNSX1RDTF9CSVQJLyogQ0FTIGxhdGVuY3kgaXMgMyAqLwotCX07Ci0KLQlpbnQgZGl2W10gPSB7MSwgMiwgMywgNCwgNiwgOCwgMTIsIDE2LCAyNCwgMzJ9OwotCi0JY3B1X2NsayA9IENPTkZJR19TWVNfQ1BVX1NQRUVEOwotCW1lbV9jbGsgPSBjcHVfY2xrICogZGl2W19fY3BtX2dldF9jZGl2KCldIC8gZGl2W19fY3BtX2dldF9tZGl2KCldOwotCi0Jd3JpdGVsKDAsICZlbWMtPmJjcik7CS8qIERpc2FibGUgYnVzIHJlbGVhc2UgKi8KLQl3cml0ZXcoMCwgJmVtYy0+cnRjc3IpOwkvKiBEaXNhYmxlIGNsb2NrIGZvciBjb3VudGluZyAqLwotCi0JLyogRmF1bHQgRE1DUiB2YWx1ZSBmb3IgbW9kZSByZWdpc3RlciBzZXR0aW5nKi8KLSNkZWZpbmUgU0RSQU1fUk9XMAkxMQotI2RlZmluZSBTRFJBTV9DT0wwCTgKLSNkZWZpbmUgU0RSQU1fQkFOSzQwCTAKLQotCWRtY3IwID0gKChTRFJBTV9ST1cwIC0gMTEpIDw8IEVNQ19ETUNSX1JBX0JJVCkgfAotCQkoKFNEUkFNX0NPTDAgLSA4KSA8PCBFTUNfRE1DUl9DQV9CSVQpIHwKLQkJKFNEUkFNX0JBTks0MCA8PCBFTUNfRE1DUl9CQV9CSVQpIHwKLQkJKFNEUkFNX0JXMTYgPDwgRU1DX0RNQ1JfQldfQklUKSB8Ci0JCUVNQ19ETUNSX0VQSU4gfAotCQljYXNfbGF0ZW5jeV9kbWNyWygoU0RSQU1fQ0FTTCA9PSAzKSA/IDEgOiAwKV07Ci0KLQkvKiBCYXNpYyBETUNSIHZhbHVlICovCi0JZG1jciA9ICgoU0RSQU1fUk9XIC0gMTEpIDw8IEVNQ19ETUNSX1JBX0JJVCkgfAotCQkoKFNEUkFNX0NPTCAtIDgpIDw8IEVNQ19ETUNSX0NBX0JJVCkgfAotCQkoU0RSQU1fQkFOSzQgPDwgRU1DX0RNQ1JfQkFfQklUKSB8Ci0JCShTRFJBTV9CVzE2IDw8IEVNQ19ETUNSX0JXX0JJVCkgfAotCQlFTUNfRE1DUl9FUElOIHwKLQkJY2FzX2xhdGVuY3lfZG1jclsoKFNEUkFNX0NBU0wgPT0gMykgPyAxIDogMCldOwotCi0JLyogU0RSQU0gdGltaW1nICovCi0JbnMgPSAxMDAwMDAwMDAwIC8gbWVtX2NsazsKLQl0bXAgPSBTRFJBTV9UUkFTIC8gbnM7Ci0JaWYgKHRtcCA8IDQpCi0JCXRtcCA9IDQ7Ci0JaWYgKHRtcCA+IDExKQotCQl0bXAgPSAxMTsKLQlkbWNyIHw9ICh0bXAgLSA0KSA8PCBFTUNfRE1DUl9UUkFTX0JJVDsKLQl0bXAgPSBTRFJBTV9SQ0QgLyBuczsKLQotCWlmICh0bXAgPiAzKQotCQl0bXAgPSAzOwotCWRtY3IgfD0gdG1wIDw8IEVNQ19ETUNSX1JDRF9CSVQ7Ci0JdG1wID0gU0RSQU1fVFBDIC8gbnM7Ci0KLQlpZiAodG1wID4gNykKLQkJdG1wID0gNzsKLQlkbWNyIHw9IHRtcCA8PCBFTUNfRE1DUl9UUENfQklUOwotCXRtcCA9IFNEUkFNX1RSV0wgLyBuczsKLQotCWlmICh0bXAgPiAzKQotCQl0bXAgPSAzOwotCWRtY3IgfD0gdG1wIDw8IEVNQ19ETUNSX1RSV0xfQklUOwotCXRtcCA9IChTRFJBTV9UUkFTICsgU0RSQU1fVFBDKSAvIG5zOwotCi0JaWYgKHRtcCA+IDE0KQotCQl0bXAgPSAxNDsKLQlkbWNyIHw9ICgodG1wICsgMSkgPj4gMSkgPDwgRU1DX0RNQ1JfVFJDX0JJVDsKLQotCS8qIFNEUkFNIG1vZGUgdmFsdWUgKi8KLQlzZG1vZGUgPSBFTUNfU0RNUl9CVF9TRVEgfAotCQkgRU1DX1NETVJfT01fTk9STUFMIHwKLQkJIEVNQ19TRE1SX0JMXzQgfAotCQkgY2FzX2xhdGVuY3lfc2RtclsoKFNEUkFNX0NBU0wgPT0gMykgPyAxIDogMCldOwotCi0JLyogU3RhZ2UgMS4gUHJlY2hhcmdlIGFsbCBiYW5rcyBieSB3cml0aW5nIFNETVIgd2l0aCBETUNSLk1SU0VUPTAgKi8KLQl3cml0ZWwoZG1jciwgJmVtYy0+ZG1jcik7Ci0Jd3JpdGViKDAsIEpaNDc0MF9FTUNfU0RNUjAgfCBzZG1vZGUpOwotCi0JLyogV2FpdCBmb3IgcHJlY2hhcmdlLCA+IDIwMHVzICovCi0JdG1wID0gKGNwdV9jbGsgLyAxMDAwMDAwKSAqIDEwMDA7Ci0Jd2hpbGUgKHRtcC0tKQotCQk7Ci0KLQkvKiBTdGFnZSAyLiBFbmFibGUgYXV0by1yZWZyZXNoICovCi0Jd3JpdGVsKGRtY3IgfCBFTUNfRE1DUl9SRlNILCAmZW1jLT5kbWNyKTsKLQotCXRtcCA9IFNEUkFNX1RSRUYgLyBuczsKLQl0bXAgPSB0bXAgLyA2NCArIDE7Ci0JaWYgKHRtcCA+IDB4ZmYpCi0JCXRtcCA9IDB4ZmY7Ci0Jd3JpdGV3KHRtcCwgJmVtYy0+cnRjb3IpOwotCXdyaXRldygwLCAmZW1jLT5ydGNudCk7Ci0JLyogRGl2aXNvciBpcyA2NCwgQ0tPLzY0ICovCi0Jd3JpdGV3KEVNQ19SVENTUl9DS1NfNjQsICZlbWMtPnJ0Y3NyKTsKLQotCS8qIFdhaXQgZm9yIG51bWJlciBvZiBhdXRvLXJlZnJlc2ggY3ljbGVzICovCi0JdG1wID0gKGNwdV9jbGsgLyAxMDAwMDAwKSAqIDEwMDA7Ci0Jd2hpbGUgKHRtcC0tKQotCQk7Ci0KLQkvKiBTdGFnZSAzLiBNb2RlIFJlZ2lzdGVyIFNldCAqLwotCXdyaXRlbChkbWNyMCB8IEVNQ19ETUNSX1JGU0ggfCBFTUNfRE1DUl9NUlNFVCwgJmVtYy0+ZG1jcik7Ci0Jd3JpdGViKDAsIEpaNDc0MF9FTUNfU0RNUjAgfCBzZG1vZGUpOwotCi0JLyogU2V0IGJhY2sgdG8gYmFzaWMgRE1DUiB2YWx1ZSAqLwotCXdyaXRlbChkbWNyIHwgRU1DX0RNQ1JfUkZTSCB8IEVNQ19ETUNSX01SU0VULCAmZW1jLT5kbWNyKTsKLQotCS8qIGV2ZXJ5dGhpbmcgaXMgb2sgbm93ICovCi19Ci0KLURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCi12b2lkIGNhbGNfY2xvY2tzKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHBsbG91dDsKLQl1bnNpZ25lZCBpbnQgZGl2WzEwXSA9IHsxLCAyLCAzLCA0LCA2LCA4LCAxMiwgMTYsIDI0LCAzMn07Ci0KLQlwbGxvdXQgPSBfX2NwbV9nZXRfcGxsb3V0KCk7Ci0KLQlnZC0+Y3B1X2NsayA9IHBsbG91dCAvIGRpdltfX2NwbV9nZXRfY2RpdigpXTsKLQlnZC0+YXJjaC5zeXNfY2xrID0gcGxsb3V0IC8gZGl2W19fY3BtX2dldF9oZGl2KCldOwotCWdkLT5hcmNoLnBlcl9jbGsgPSBwbGxvdXQgLyBkaXZbX19jcG1fZ2V0X3BkaXYoKV07Ci0JZ2QtPm1lbV9jbGsgPSBwbGxvdXQgLyBkaXZbX19jcG1fZ2V0X21kaXYoKV07Ci0JZ2QtPmFyY2guZGV2X2NsayA9IENPTkZJR19TWVNfRVhUQUw7Ci19Ci0KLXZvaWQgcnRjX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3Qgano0NzQwX3J0YyAqcnRjID0gKHN0cnVjdCBqejQ3NDBfcnRjICopSlo0NzQwX1JUQ19CQVNFOwotCi0Jd2hpbGUgKCEocmVhZGwoJnJ0Yy0+cmNyKSAmIFJUQ19SQ1JfV1JEWSkpCi0JCTsKLQl3cml0ZWwocmVhZGwoJnJ0Yy0+cmNyKSB8IFJUQ19SQ1JfQUUsICZydGMtPnJjcik7IC8qIGVuYWJsZSBhbGFybSAqLwotCi0Jd2hpbGUgKCEocmVhZGwoJnJ0Yy0+cmNyKSAmIFJUQ19SQ1JfV1JEWSkpCi0JCTsKLQl3cml0ZWwoMHgwMDAwN2ZmZiwgJnJ0Yy0+cmdyKTsgLyogdHlwZSB2YWx1ZSAqLwotCi0Jd2hpbGUgKCEocmVhZGwoJnJ0Yy0+cmNyKSAmIFJUQ19SQ1JfV1JEWSkpCi0JCTsKLQl3cml0ZWwoMHgwMDAwZmZlMCwgJnJ0Yy0+aHdmY3IpOyAvKiBQb3dlciBvbiBkZWxheSAycyAqLwotCi0Jd2hpbGUgKCEocmVhZGwoJnJ0Yy0+cmNyKSAmIFJUQ19SQ1JfV1JEWSkpCi0JCTsKLQl3cml0ZWwoMHgwMDAwMGZlMCwgJnJ0Yy0+aHJjcik7IC8qIHJlc2V0IGRlbGF5IDEyNW1zICovCi19Ci0KLS8qIFUtQm9vdCBjb21tb24gcm91dGluZXMgKi8KLXBoeXNfc2l6ZV90IGluaXRkcmFtKGludCBib2FyZF90eXBlKQotewotCXN0cnVjdCBqejQ3NDBfZW1jICplbWMgPSAoc3RydWN0IGp6NDc0MF9lbWMgKilKWjQ3NDBfRU1DX0JBU0U7Ci0JdTMyIGRtY3I7Ci0JdTMyIHJvd3MsIGNvbHMsIGR3LCBiYW5rczsKLQl1bG9uZyBzaXplOwotCi0JZG1jciA9IHJlYWRsKCZlbWMtPmRtY3IpOwotCXJvd3MgPSAxMSArICgoZG1jciAmIEVNQ19ETUNSX1JBX01BU0spID4+IEVNQ19ETUNSX1JBX0JJVCk7Ci0JY29scyA9IDggKyAoKGRtY3IgJiBFTUNfRE1DUl9DQV9NQVNLKSA+PiBFTUNfRE1DUl9DQV9CSVQpOwotCWR3ID0gKGRtY3IgJiBFTUNfRE1DUl9CVykgPyAyIDogNDsKLQliYW5rcyA9IChkbWNyICYgRU1DX0RNQ1JfQkEpID8gNCA6IDI7Ci0KLQlzaXplID0gKDEgPDwgKHJvd3MgKyBjb2xzKSkgKiBkdyAqIGJhbmtzOwotCi0JcmV0dXJuIHNpemU7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY3B1L3hidXJzdC9qel9zZXJpYWwuYyBiL2FyY2gvbWlwcy9jcHUveGJ1cnN0L2p6X3NlcmlhbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTg0MjIzLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9jcHUveGJ1cnN0L2p6X3NlcmlhbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBKejQ3NDAgVUFSVCBzdXBwb3J0Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTEKLSAqIFFpIEhhcmR3YXJlLCBYaWFuZ2Z1IExpdSA8eGlhbmdmdUBzaGFyaXNtLmNjPgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb25maWcuaD4KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vano0NzQwLmg+Ci0jaW5jbHVkZSA8c2VyaWFsLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQotLyoKLSAqIHNlcmlhbF9pbml0IC0gaW5pdGlhbGl6ZSBhIGNoYW5uZWwKLSAqCi0gKiBUaGlzIHJvdXRpbmUgaW5pdGlhbGl6ZXMgdGhlIG51bWJlciBvZiBkYXRhIGJpdHMsIHBhcml0eQotICogYW5kIHNldCB0aGUgc2VsZWN0ZWQgYmF1ZCByYXRlLiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KLSAqIFNldCB0aGUgbW9kZW0gY29udHJvbCBzaWduYWxzIGlmIHRoZSBvcHRpb24gaXMgc2VsZWN0ZWQuCi0gKgotICogUkVUVVJOUzogTi9BCi0gKi8KLXN0cnVjdCBqejQ3NDBfdWFydCAqdWFydCA9IChzdHJ1Y3Qgano0NzQwX3VhcnQgKilDT05GSUdfU1lTX1VBUlRfQkFTRTsKLQotc3RhdGljIGludCBqel9zZXJpYWxfaW5pdCh2b2lkKQotewotCS8qIERpc2FibGUgcG9ydCBpbnRlcnJ1cHRzIHdoaWxlIGNoYW5naW5nIGhhcmR3YXJlICovCi0Jd3JpdGViKDAsICZ1YXJ0LT5kbGhyX2llcik7Ci0KLQkvKiBEaXNhYmxlIFVBUlQgdW5pdCBmdW5jdGlvbiAqLwotCXdyaXRlYih+VUFSVF9GQ1JfVVVFLCAmdWFydC0+aWlyX2Zjcik7Ci0KLQkvKiBTZXQgYm90aCByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgaW4gVUFSVCBtb2RlIChub3QgU0lSKSAqLwotCXdyaXRlYih+KFNJUkNSX1JTSVJFIHwgU0lSQ1JfVFNJUkUpLCAmdWFydC0+aXNyKTsKLQotCS8qCi0JICogU2V0IGRhdGFiaXRzLCBzdG9wYml0cyBhbmQgcGFyaXR5LgotCSAqICg4LWJpdCBkYXRhLCAxIHN0b3BiaXQsIG5vIHBhcml0eSkKLQkgKi8KLQl3cml0ZWIoVUFSVF9MQ1JfV0xFTl84IHwgVUFSVF9MQ1JfU1RPUF8xLCAmdWFydC0+bGNyKTsKLQotCS8qIFNldCBiYXVkIHJhdGUgKi8KLQlzZXJpYWxfc2V0YnJnKCk7Ci0KLQkvKiBFbmFibGUgVUFSVCB1bml0LCBlbmFibGUgYW5kIGNsZWFyIEZJRk8gKi8KLQl3cml0ZWIoVUFSVF9GQ1JfVVVFIHwgVUFSVF9GQ1JfRkUgfCBVQVJUX0ZDUl9URkxTIHwgVUFSVF9GQ1JfUkZMUywKLQkgICAgICAgJnVhcnQtPmlpcl9mY3IpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGp6X3NlcmlhbF9zZXRicmcodm9pZCkKLXsKLQl1MzIgYmF1ZF9kaXYsIHRtcDsKLQotCWJhdWRfZGl2ID0gQ09ORklHX1NZU19FWFRBTCAvIDE2IC8gQ09ORklHX0JBVURSQVRFOwotCi0JdG1wID0gcmVhZGIoJnVhcnQtPmxjcik7Ci0JdG1wIHw9IFVBUlRfTENSX0RMQUI7Ci0Jd3JpdGViKHRtcCwgJnVhcnQtPmxjcik7Ci0KLQl3cml0ZWIoKGJhdWRfZGl2ID4+IDgpICYgMHhmZiwgJnVhcnQtPmRsaHJfaWVyKTsKLQl3cml0ZWIoYmF1ZF9kaXYgJiAweGZmLCAmdWFydC0+cmJyX3Rocl9kbGxyKTsKLQotCXRtcCAmPSB+VUFSVF9MQ1JfRExBQjsKLQl3cml0ZWIodG1wLCAmdWFydC0+bGNyKTsKLX0KLQotc3RhdGljIGludCBqel9zZXJpYWxfdHN0Yyh2b2lkKQotewotCWlmIChyZWFkYigmdWFydC0+bHNyKSAmIFVBUlRfTFNSX0RSKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBqel9zZXJpYWxfcHV0Yyhjb25zdCBjaGFyIGMpCi17Ci0JaWYgKGMgPT0gJ1xuJykKLQkJc2VyaWFsX3B1dGMoJ1xyJyk7Ci0KLQkvKiBXYWl0IGZvciBmaWZvIHRvIHNoaWZ0IG91dCBzb21lIGJ5dGVzICovCi0Jd2hpbGUgKCEoKHJlYWRiKCZ1YXJ0LT5sc3IpICYgKFVBUlRfTFNSX1REUlEgfCBVQVJUX0xTUl9URU1UKSkgPT0gMHg2MCkpCi0JCTsKLQotCXdyaXRlYigodTgpYywgJnVhcnQtPnJicl90aHJfZGxscik7Ci19Ci0KLXN0YXRpYyBpbnQganpfc2VyaWFsX2dldGModm9pZCkKLXsKLQl3aGlsZSAoIXNlcmlhbF90c3RjKCkpCi0JCTsKLQotCXJldHVybiByZWFkYigmdWFydC0+cmJyX3Rocl9kbGxyKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzZXJpYWxfZGV2aWNlIGp6X3NlcmlhbF9kcnYgPSB7Ci0JLm5hbWUJPSAianpfc2VyaWFsIiwKLQkuc3RhcnQJPSBqel9zZXJpYWxfaW5pdCwKLQkuc3RvcAk9IE5VTEwsCi0JLnNldGJyZwk9IGp6X3NlcmlhbF9zZXRicmcsCi0JLnB1dGMJPSBqel9zZXJpYWxfcHV0YywKLQkucHV0cwk9IGRlZmF1bHRfc2VyaWFsX3B1dHMsCi0JLmdldGMJPSBqel9zZXJpYWxfZ2V0YywKLQkudHN0Ywk9IGp6X3NlcmlhbF90c3RjLAotfTsKLQotdm9pZCBqel9zZXJpYWxfaW5pdGlhbGl6ZSh2b2lkKQotewotCXNlcmlhbF9yZWdpc3Rlcigmanpfc2VyaWFsX2Rydik7Ci19Ci0KLV9fd2VhayBzdHJ1Y3Qgc2VyaWFsX2RldmljZSAqZGVmYXVsdF9zZXJpYWxfY29uc29sZSh2b2lkKQotewotCXJldHVybiAmanpfc2VyaWFsX2RydjsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jcHUveGJ1cnN0L3N0YXJ0LlMgYi9hcmNoL21pcHMvY3B1L3hidXJzdC9zdGFydC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGRmZmI0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9jcHUveGJ1cnN0L3N0YXJ0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqICBTdGFydHVwIENvZGUgZm9yIE1JUFMzMiBYQlVSU1QgQ1BVLWNvcmUKLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDEwIFhpYW5nZnUgTGl1IDx4aWFuZ2Z1QHNoYXJpc20uY2M+Ci0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2luY2x1ZGUgPHZlcnNpb24uaD4KLSNpbmNsdWRlIDxhc20vcmVnZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZW9wcy5oPgotCi0JLnNldCBub3Jlb3JkZXIKLQotCS5nbG9ibCBfc3RhcnQKLQkudGV4dAotX3N0YXJ0OgotCS8qIEluaXRpYWxpemUgJGdwICovCi0JYmFsCTFmCi0JIG5vcAotCS53b3JkCV9ncAotMToKLQlsdwlncCwgMChyYSkKLQotCS8qIFNldCB1cCB0ZW1wb3Jhcnkgc3RhY2sgKi8KLQlsaQlzcCwgQ09ORklHX1NZU19TRFJBTV9CQVNFICsgQ09ORklHX1NZU19JTklUX1NQX09GRlNFVAotCi0JbGEJdDksIGJvYXJkX2luaXRfZgotCWpyCXQ5Ci0JIG5vcAotCi0vKgotICogdm9pZCByZWxvY2F0ZV9jb2RlIChhZGRyX3NwLCBnZCwgYWRkcl9tb25pKQotICoKLSAqIFRoaXMgImZ1bmN0aW9uIiBkb2VzIG5vdCByZXR1cm4sIGluc3RlYWQgaXQgY29udGludWVzIGluIFJBTQotICogYWZ0ZXIgcmVsb2NhdGluZyB0aGUgbW9uaXRvciBjb2RlLgotICoKLSAqIGEwID0gYWRkcl9zcAotICogYTEgPSBnZAotICogYTIgPSBkZXN0aW5hdGlvbiBhZGRyZXNzCi0gKi8KLQkuZ2xvYmwJcmVsb2NhdGVfY29kZQotCS5lbnQJcmVsb2NhdGVfY29kZQotcmVsb2NhdGVfY29kZToKLQltb3ZlCXNwLCBhMAkJCSMgc2V0IG5ldyBzdGFjayBwb2ludGVyCi0KLQltb3ZlCXMwLCBhMQkJCSMgc2F2ZSBnZCBpbiBzMAotCW1vdmUJczIsIGEyCQkJIyBzYXZlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gczIKLQotCWxpCXQwLCBDT05GSUdfU1lTX01PTklUT1JfQkFTRQotCXN1YglzMSwgczIsIHQwCQkjIHMxIDwtLSByZWxvY2F0aW9uIG9mZnNldAotCi0JbGEJdDMsIGluX3JhbQotCWx3CXQyLCAtMTIodDMpCQkjIHQyIDwtLSBfX2ltYWdlX2NvcHlfZW5kCi0JbW92ZQl0MSwgYTIKLQotCWFkZAlncCwgczEJCQkjIGFkanVzdCBncAotCi0JLyoKLQkgKiB0MCA9IHNvdXJjZSBhZGRyZXNzCi0JICogdDEgPSB0YXJnZXQgYWRkcmVzcwotCSAqIHQyID0gc291cmNlIGVuZCBhZGRyZXNzCi0JICovCi0xOgotCWx3CXQzLCAwKHQwKQotCXN3CXQzLCAwKHQxKQotCWFkZHUJdDAsIDQKLQlibHQJdDAsIHQyLCAxYgotCSBhZGR1CXQxLCA0Ci0KLQkvKiBJZiBjYWNoZXMgd2VyZSBlbmFibGVkLCB3ZSB3b3VsZCBoYXZlIHRvIGZsdXNoIHRoZW0gaGVyZS4gKi8KLQotCS8qIGZsdXNoIGQtY2FjaGUgKi8KLQlsaQl0MCwgS1NFRzAKLQlhZGRpCXQxLCB0MCwgQ09ORklHX1NZU19EQ0FDSEVfU0laRQotMjoKLQljYWNoZQlJTkRFWF9XUklURUJBQ0tfSU5WX0QsIDAodDApCi0JYm5lCXQwLCB0MSwgMmIKLQkgYWRkaQl0MCwgQ09ORklHX1NZU19DQUNIRUxJTkVfU0laRQotCi0Jc3luYwotCi0JLyogZmx1c2ggaS1jYWNoZSAqLwotCWxpCXQwLCBLU0VHMAotCWFkZGkJdDEsIHQwLCBDT05GSUdfU1lTX0lDQUNIRV9TSVpFCi0zOgotCWNhY2hlCUlOREVYX0lOVkFMSURBVEVfSSwgMCh0MCkKLQlibmUJdDAsIHQxLCAzYgotCSBhZGRpCXQwLCBDT05GSUdfU1lTX0NBQ0hFTElORV9TSVpFCi0KLQkvKiBJbnZhbGlkYXRlIEJUQiAqLwotCW1mYzAJdDAsIENQMF9DT05GSUcsIDcKLQlub3AKLQlvcmkJdDAsIDIKLQltdGMwCXQwLCBDUDBfQ09ORklHLCA3Ci0Jbm9wCi0KLQkvKiBKdW1wIHRvIHdoZXJlIHdlJ3ZlIHJlbG9jYXRlZCBvdXJzZWx2ZXMgKi8KLQlhZGRpCXQwLCBzMiwgaW5fcmFtIC0gX3N0YXJ0Ci0JanIJdDAKLQkgbm9wCi0KLQkud29yZAlfX3JlbF9keW5fZW5kCi0JLndvcmQJX19yZWxfZHluX3N0YXJ0Ci0JLndvcmQJX19pbWFnZV9jb3B5X2VuZAotCS53b3JkCV9HTE9CQUxfT0ZGU0VUX1RBQkxFXwotCS53b3JkCW51bV9nb3RfZW50cmllcwotCi1pbl9yYW06Ci0JLyoKLQkgKiBOb3cgd2Ugd2FudCB0byB1cGRhdGUgR09ULgotCSAqCi0JICogR09UWzBdIGlzIHJlc2VydmVkLiBHT1RbMV0gaXMgYWxzbyByZXNlcnZlZCBmb3IgdGhlIGR5bmFtaWMgb2JqZWN0Ci0JICogZ2VuZXJhdGVkIGJ5IEdOVSBsZC4gU2tpcCB0aGVzZSByZXNlcnZlZCBlbnRyaWVzIGZyb20gcmVsb2NhdGlvbi4KLQkgKi8KLQlsdwl0MywgLTQodDApCQkjIHQzIDwtLSBudW1fZ290X2VudHJpZXMKLQlsdwl0OCwgLTgodDApCQkjIHQ4IDwtLSBfR0xPQkFMX09GRlNFVF9UQUJMRV8KLQlhZGQJdDgsIHMxCQkJIyB0OCBub3cgaG9sZHMgcmVsb2NhdGVkIF9HX09fVF8KLQlhZGRpCXQ4LCB0OCwgOAkJIyBza2lwcGluZyBmaXJzdCB0d28gZW50cmllcwotCWxpCXQyLCAyCi0xOgotCWx3CXQxLCAwKHQ4KQotCWJlcXoJdDEsIDJmCi0JIGFkZAl0MSwgczEKLQlzdwl0MSwgMCh0OCkKLTI6Ci0JYWRkaQl0MiwgMQotCWJsdAl0MiwgdDMsIDFiCi0JIGFkZGkJdDgsIDQKLQotCS8qIFVwZGF0ZSBkeW5hbWljIHJlbG9jYXRpb25zICovCi0JbHcJdDEsIC0xNih0MCkJCSMgdDEgPC0tIF9fcmVsX2R5bl9zdGFydAotCWx3CXQyLCAtMjAodDApCQkjIHQyIDwtLSBfX3JlbF9keW5fZW5kCi0KLQliCTJmCQkJIyBza2lwIGZpcnN0IHJlc2VydmVkIGVudHJ5Ci0JIGFkZGkJdDEsIDgKLQotMToKLQlsdwl0OCwgLTQodDEpCQkjIHQ4IDwtLSByZWxvY2F0aW9uIGluZm8KLQotCWxpCXQzLCAzCi0JYm5lCXQ4LCB0MywgMmYJCSMgc2tpcCBub24gUl9NSVBTX1JFTDMyIGVudHJpZXMKLQkgbm9wCi0KLQlsdwl0MywgLTgodDEpCQkjIHQzIDwtLSBsb2NhdGlvbiB0byBmaXggdXAgaW4gRkxBU0gKLQotCWx3CXQ4LCAwKHQzKQkJIyB0OCA8LS0gb3JpZ2luYWwgcG9pbnRlcgotCWFkZAl0OCwgczEJCQkjIHQ4IDwtLSBhZGp1c3RlZCBwb2ludGVyCi0KLQlhZGQJdDMsIHMxCQkJIyB0MyA8LS0gbG9jYXRpb24gdG8gZml4IHVwIGluIFJBTQotCXN3CXQ4LCAwKHQzKQotCi0yOgotCWJsdAl0MSwgdDIsIDFiCi0JIGFkZGkJdDEsIDgJCQkjIGVhY2ggcmVsLmR5biBlbnRyeSBpcyA4IGJ5dGVzCi0KLQkvKgotCSAqIENsZWFyIEJTUwotCSAqCi0JICogR09UIGlzIG5vdyByZWxvY2F0ZWQuIFRodXMgX19ic3Nfc3RhcnQgYW5kIF9fYnNzX2VuZCBjYW4gYmUKLQkgKiBhY2Nlc3NlZCBkaXJlY3RseSB2aWEgJGdwLgotCSAqLwotCWxhCXQxLCBfX2Jzc19zdGFydAkJIyB0MSA8LS0gX19ic3Nfc3RhcnQKLQlsYQl0MiwgX19ic3NfZW5kCQkjIHQyIDwtLSBfX2Jzc19lbmQKLQotMToKLQlzdwl6ZXJvLCAwKHQxKQotCWJsdAl0MSwgdDIsIDFiCi0JIGFkZGkJdDEsIDQKLQotCW1vdmUJYTAsIHMwCQkJIyBhMCA8LS0gZ2QKLQlsYQl0OSwgYm9hcmRfaW5pdF9yCi0JanIJdDkKLQkgbW92ZQlhMSwgczIKLQotCS5lbmQJcmVsb2NhdGVfY29kZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NwdS94YnVyc3QvdGltZXIuYyBiL2FyY2gvbWlwcy9jcHUveGJ1cnN0L3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZjM0ZjAuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2NwdS94YnVyc3QvdGltZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAwNgotICogIEluZ2VuaWMgU2VtaWNvbmR1Y3RvciwgPGpsd2VpQGluZ2VuaWMuY24+Ci0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSA8YXNtL2p6NDc0MC5oPgotCi0jZGVmaW5lIFRJTUVSX0NIQU4gIDAKLSNkZWZpbmUgVElNRVJfRkRBVEEgMHhmZmZmICAvKiBUaW1lciBmdWxsIGRhdGEgdmFsdWUgKi8KLQotREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7Ci0KLXN0YXRpYyBzdHJ1Y3Qgano0NzQwX3RjdSAqdGN1ID0gKHN0cnVjdCBqejQ3NDBfdGN1ICopSlo0NzQwX1RDVV9CQVNFOwotCi12b2lkIHJlc2V0X3RpbWVyX21hc2tlZCh2b2lkKQotewotCS8qIHJlc2V0IHRpbWUgKi8KLQlnZC0+YXJjaC5sYXN0aW5jID0gcmVhZGwoJnRjdS0+dGNudDApOwotCWdkLT5hcmNoLnRibCA9IDA7Ci19Ci0KLXVsb25nIGdldF90aW1lcl9tYXNrZWQodm9pZCkKLXsKLQl1bG9uZyBub3cgPSByZWFkbCgmdGN1LT50Y250MCk7Ci0KLQlpZiAoZ2QtPmFyY2gubGFzdGluYyA8PSBub3cpCi0JCWdkLT5hcmNoLnRibCArPSBub3cgLSBnZC0+YXJjaC5sYXN0aW5jOyAvKiBub3JtYWwgbW9kZSAqLwotCWVsc2UgewotCQkvKiB3ZSBoYXZlIGFuIG92ZXJmbG93IC4uLiAqLwotCQlnZC0+YXJjaC50YmwgKz0gVElNRVJfRkRBVEEgKyBub3cgLSBnZC0+YXJjaC5sYXN0aW5jOwotCX0KLQotCWdkLT5hcmNoLmxhc3RpbmMgPSBub3c7Ci0KLQlyZXR1cm4gZ2QtPmFyY2gudGJsOwotfQotCi12b2lkIHVkZWxheV9tYXNrZWQodW5zaWduZWQgbG9uZyB1c2VjKQotewotCXVsb25nIHRtbzsKLQl1bG9uZyBlbmR0aW1lOwotCXNpZ25lZCBsb25nIGRpZmY7Ci0KLQkvKiBub3JtYWxpemUgKi8KLQlpZiAodXNlYyA+PSAxMDAwKSB7Ci0JCXRtbyA9IHVzZWMgLyAxMDAwOwotCQl0bW8gKj0gQ09ORklHX1NZU19IWjsKLQkJdG1vIC89IDEwMDA7Ci0JfSBlbHNlIHsKLQkJaWYgKHVzZWMgPiAxKSB7Ci0JCQl0bW8gPSB1c2VjICogQ09ORklHX1NZU19IWjsKLQkJCXRtbyAvPSAxMDAwKjEwMDA7Ci0JCX0gZWxzZQotCQkJdG1vID0gMTsKLQl9Ci0KLQllbmR0aW1lID0gZ2V0X3RpbWVyX21hc2tlZCgpICsgdG1vOwotCi0JZG8gewotCQl1bG9uZyBub3cgPSBnZXRfdGltZXJfbWFza2VkKCk7Ci0JCWRpZmYgPSBlbmR0aW1lIC0gbm93OwotCX0gd2hpbGUgKGRpZmYgPj0gMCk7Ci19Ci0KLWludCB0aW1lcl9pbml0KHZvaWQpCi17Ci0Jd3JpdGVsKFRDVV9UQ1NSX1BSRVNDQUxFMjU2IHwgVENVX1RDU1JfRVhUX0VOLCAmdGN1LT50Y3NyMCk7Ci0KLQl3cml0ZWwoMCwgJnRjdS0+dGNudDApOwotCXdyaXRlbCgwLCAmdGN1LT50ZGhyMCk7Ci0Jd3JpdGVsKFRJTUVSX0ZEQVRBLCAmdGN1LT50ZGZyMCk7Ci0KLQkvKiBtYXNrIGlycXMgKi8KLQl3cml0ZWwoKDEgPDwgVElNRVJfQ0hBTikgfCAoMSA8PCAoVElNRVJfQ0hBTiArIDE2KSksICZ0Y3UtPnRtc3IpOwotCXdyaXRlbCgxIDw8IFRJTUVSX0NIQU4sICZ0Y3UtPnRzY3IpOyAvKiBlbmFibGUgdGltZXIgY2xvY2sgKi8KLQl3cml0ZWIoMSA8PCBUSU1FUl9DSEFOLCAmdGN1LT50ZXNyKTsgLyogc3RhcnQgY291bnRpbmcgdXAgKi8KLQotCWdkLT5hcmNoLmxhc3RpbmMgPSAwOwotCWdkLT5hcmNoLnRibCA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByZXNldF90aW1lcih2b2lkKQotewotCXJlc2V0X3RpbWVyX21hc2tlZCgpOwotfQotCi11bG9uZyBnZXRfdGltZXIodWxvbmcgYmFzZSkKLXsKLQlyZXR1cm4gZ2V0X3RpbWVyX21hc2tlZCgpIC0gYmFzZTsKLX0KLQotdm9pZCBzZXRfdGltZXIodWxvbmcgdCkKLXsKLQlnZC0+YXJjaC50YmwgPSB0OwotfQotCi12b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKLXsKLQl1bG9uZyB0bW8sIHRtcDsKLQotCS8qIG5vcm1hbGl6ZSAqLwotCWlmICh1c2VjID49IDEwMDApIHsKLQkJdG1vID0gdXNlYyAvIDEwMDA7Ci0JCXRtbyAqPSBDT05GSUdfU1lTX0haOwotCQl0bW8gLz0gMTAwMDsKLQl9IGVsc2UgewotCQlpZiAodXNlYyA+PSAxKSB7Ci0JCQl0bW8gPSB1c2VjICogQ09ORklHX1NZU19IWjsKLQkJCXRtbyAvPSAxMDAwICogMTAwMDsKLQkJfSBlbHNlCi0JCQl0bW8gPSAxOwotCX0KLQotCS8qIGNoZWNrIGZvciByb2xsb3ZlciBkdXJpbmcgdGhpcyBkZWxheSAqLwotCXRtcCA9IGdldF90aW1lcigwKTsKLQlpZiAoKHRtcCArIHRtbykgPCB0bXApCi0JCXJlc2V0X3RpbWVyX21hc2tlZCgpOyAgLyogdGltZXIgd291bGQgcm9sbCBvdmVyICovCi0JZWxzZQotCQl0bW8gKz0gdG1wOwotCi0Jd2hpbGUgKGdldF90aW1lcl9tYXNrZWQoKSA8IHRtbykKLQkJOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gUG93ZXJQQyBjb2RlIChyZWFkIHRpbWViYXNlIGFzIGxvbmcgbG9uZykuCi0gKiBPbiBNSVBTIGl0IGp1c3QgcmV0dXJucyB0aGUgdGltZXIgdmFsdWUuCi0gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBnZXRfdGlja3Modm9pZCkKLXsKLQlyZXR1cm4gZ2V0X3RpbWVyKDApOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gUG93ZXJQQyBjb2RlICh0aW1lYmFzZSBjbG9jayBmcmVxdWVuY3kpLgotICogT24gTUlQUyBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGltZXIgdGlja3MgcGVyIHNlY29uZC4KLSAqLwotdWxvbmcgZ2V0X3RiY2xrKHZvaWQpCi17Ci0JcmV0dXJuIENPTkZJR19TWVNfSFo7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW5jYS1pcC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2luY2EtaXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYwM2UyYS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW5jYS1pcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICAgQ29weXJpZ2h0IChjKSAyMDAyLCBJbmZpbmVvbiBUZWNobm9sb2dpZXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0JCQkgICAgICAgTm8gV2FycmFudHkKLSAgIEJlY2F1c2UgdGhlIHByb2dyYW0gaXMgbGljZW5zZWQgZnJlZSBvZiBjaGFyZ2UsIHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvcgotICAgdGhlIHByb2dyYW0sIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LiAgRXhjZXB0IHdoZW4KLSAgIG90aGVyd2lzZSBzdGF0ZWQgaW4gd3JpdGluZyB0aGUgY29weXJpZ2h0IGhvbGRlcnMgYW5kL29yIG90aGVyIHBhcnRpZXMKLSAgIHByb3ZpZGUgdGhlIHByb2dyYW0gImFzIGlzIiB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIKLSAgIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIGltcGxpZWQKLSAgIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVGhlCi0gICBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIHByb2dyYW0gaXMgd2l0aAotICAgeW91LiAgc2hvdWxkIHRoZSBwcm9ncmFtIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZSB0aGUgY29zdCBvZiBhbGwKLSAgIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciBvciBjb3JyZWN0aW9uLgotCi0gICBJbiBubyBldmVudCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcKLSAgIHdpbGwgYW55IGNvcHlyaWdodCBob2xkZXIsIG9yIGFueSBvdGhlciBwYXJ0eSB3aG8gbWF5IG1vZGlmeSBhbmQvb3IKLSAgIHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSBhcyBwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0byB5b3UgZm9yCi0gICBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbAotICAgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlIHByb2dyYW0KLSAgIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGxvc3Mgb2YgZGF0YSBvciBkYXRhIGJlaW5nIHJlbmRlcmVkCi0gICBpbmFjY3VyYXRlIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgeW91IG9yIHRoaXJkIHBhcnRpZXMgb3IgYSBmYWlsdXJlIG9mCi0gICB0aGUgcHJvZ3JhbSB0byBvcGVyYXRlIHdpdGggYW55IG90aGVyIHByb2dyYW1zKSwgZXZlbiBpZiBzdWNoIGhvbGRlciBvcgotICAgb3RoZXIgcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBNb2R1bGUgICAgICA6ICBXRFQgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBJTkNBX0lQX1dEVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QjgwMDAwMDApCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotLyoqKlJlc2V0IFN0YXR1cyBSZWdpc3RlciBQb3dlciBPbioqKi8KLSNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1NSICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfV0RUKyAweDAwMTQpKQotCi0vKioqUmVzZXQgUmVxdWVzdCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUSAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfV0RUKyAweDAwMTApKQotI2RlZmluZSBJTkNBX0lQX1dEVF9SU1RfUkVRX1NXQk9PVCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI0KQotI2RlZmluZSBJTkNBX0lQX1dEVF9SU1RfUkVRX1NXQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUV9SUlBIWSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUV9SUkhTUCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUV9SUkZQSSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUV9SUkVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUV9SUkRTUCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUV9SUkNQVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKk5NSSBTdGF0dXMgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfV0RUX05NSVNSICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1dEVCsgMHgwMDJDKSkKLSNkZWZpbmUgSU5DQV9JUF9XRFRfTk1JU1JfTk1JV0RUICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9XRFRfTk1JU1JfTk1JUExMICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9XRFRfTk1JU1JfTk1JRVhUICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKk1hbnVmYWN0dXJlciBJZGVudGlmaWNhdGlvbiBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9XRFRfTUFOSUQgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfV0RUKyAweDAwNzApKQotI2RlZmluZSBJTkNBX0lQX1dEVF9NQU5JRF9NQU5VRiAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMTEpIC0gMSkgJiAodmFsdWUpKSA8PCA1KQotCi0vKioqQ2hpcCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9XRFRfQ0hJUElEICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfV0RUKyAweDAwNzQpKQotI2RlZmluZSBJTkNBX0lQX1dEVF9DSElQSURfVkVSU0lPTiAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAyOCkKLSNkZWZpbmUgSU5DQV9JUF9XRFRfQ0hJUElEX1BBUlRfTlVNQkVSICh2YWx1ZSkgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDEyKQotI2RlZmluZSBJTkNBX0lQX1dEVF9DSElQSURfTUFOSUQgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDExKSAtIDEpICYgKHZhbHVlKSkgPDwgMSkKLQotLyoqKlJlZGVzaWduIFRyYWNpbmcgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfV0RUX1JUSUQgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1dEVCsgMHgwMDc4KSkKLSNkZWZpbmUgSU5DQV9JUF9XRFRfUlRJRF9MQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBJTkNBX0lQX1dEVF9SVElEX1JJWCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKldhdGNoZG9nIFRpbWVyIENvbnRyb2wgUmVnaXN0ZXIgMCoqKi8KLSNkZWZpbmUgSU5DQV9JUF9XRFRfV0RUX0NPTjAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9XRFQrIDB4MDAyMCkpCi0KLS8qKipXYXRjaGRvZyBUaW1lciBDb250cm9sIFJlZ2lzdGVyIDEqKiovCi0jZGVmaW5lIElOQ0FfSVBfV0RUX1dEVF9DT04xICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfV0RUKyAweDAwMjQpKQotI2RlZmluZSBJTkNBX0lQX1dEVF9XRFRfQ09OMV9XRFREUiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9XRFRfV0RUX0NPTjFfV0RUSVIgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0KLS8qKipXYXRjaGRvZyBUaW1lciBTdGF0dXMgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfV0RUX1dEVF9TUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1dEVCsgMHgwMDI4KSkKLSNkZWZpbmUgSU5DQV9JUF9XRFRfV0RUX1NSX1dEVFRJTSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQotI2RlZmluZSBJTkNBX0lQX1dEVF9XRFRfU1JfV0RUUFIgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIElOQ0FfSVBfV0RUX1dEVF9TUl9XRFRUTyAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9XRFRfV0RUX1NSX1dEVERTICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX1dEVF9XRFRfU1JfV0RUSVMgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfV0RUX1dEVF9TUl9XRFRPRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9XRFRfV0RUX1NSX1dEVEFFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgTW9kdWxlICAgICAgOiAgQ0dVIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSU5DQV9JUF9DR1UgICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGMTA3MDAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKipDR1UgUExMMSBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMUNSICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9DR1UrIDB4MDAwOCkpCi0jZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwxQ1JfU1dSU1QgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMUNSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwxQ1JfTkRJViAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDFDUl9NRElWICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipDR1UgUExMMCBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMENSICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9DR1UrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwwQ1JfU1dSU1QgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMENSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwwQ1JfTkRJViAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDBDUl9NRElWICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipDR1UgUExMMCBTdGF0dXMgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwwU1IgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0NHVSsgMHgwMDA0KSkKLSNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDBTUl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMFNSX1JDRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI5KQotI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMFNSX1BMTEJZUCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQotCi0vKioqQ0dVIFBMTDEgU3RhdHVzIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMVNSICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9DR1UrIDB4MDAwQykpCi0jZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwxU1JfTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKLSNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDFTUl9SQ0YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOSkKLSNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDFTUl9QTExCWVAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKLQotLyoqKkNHVSBEaXZpZGVyIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9ESVZDUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0NHVSsgMHgwMDEwKSkKLQotLyoqKkNHVSBNdWx0aXBsZXhlciBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfTVVYQ1IgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9DR1UrIDB4MDAxNCkpCi0jZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9NVVhDUl9TV1JTVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9NVVhDUl9NVVhJSSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX01VWENSX01VWEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkNHVSBGcmFjdGlvbmFsIERpdmlkZXIgQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX0ZEQ1IgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9DR1UrIDB4MDAxOCkpCi0jZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9GRENSX0ZERU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9GRENSX0lOVEVHRVIgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAxMikgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQotI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfRkRDUl9GUkFDVElPTiAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBNb2R1bGUgICAgICA6ICBQTVUgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBJTkNBX0lQX1BNVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QkYxMDIwMDApCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotLyoqKlBNIEdsb2JhbCBFbmFibGUgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BNVSsgMHgwMDAwKSkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fR0VOX0VOMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTl9FTjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU5fRU4xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fR0VOX0VOMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTMpCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTl9FTjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU5fRU4xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fR0VOX0VOMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTl9FTjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU5fRU44ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fR0VOX0VONyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTl9FTjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU5fRU41ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fR0VOX0VONCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTl9FTjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU5fRU4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fR0VOX0VOMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipQTSBQb3dlciBEb3duIEVuYWJsZSBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fUERFTiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfUE1VKyAweDAwMDgpKQotI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9QREVOX0VOMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1BERU5fRU4xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fUERFTl9FTjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQotI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9QREVOX0VOMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTMpCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1BERU5fRU4xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fUERFTl9FTjExICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQotI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9QREVOX0VOMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1BERU5fRU45ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fUERFTl9FTjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9QREVOX0VONyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1BERU5fRU41ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fUERFTl9FTjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9QREVOX0VOMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1BERU5fRU4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fUERFTl9FTjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqUE0gV2FrZS1VcCBmcm9tIFBvd2VyIERvd24gUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1dVUCAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BNVSsgMHgwMDEwKSkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDEzICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMykKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDEyICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDExICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDEwICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDggICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKlBNIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0NSICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BNVSsgMHgwMDE0KSkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fQ1JfQVdFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKLSNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fQ1JfU1dSU1QgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMwKQotI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9DUl9TV0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0NSX0NSRCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIE1vZHVsZSAgICAgIDogIEJDVSByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElOQ0FfSVBfQkNVICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDEwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKioqQkNVIENvbnRyb2wgUmVnaXN0ZXIgKDAwMTBIKSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0NPTiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQkNVKyAweDAwMTApKQotI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfQ09OX1NQQyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCi0jZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9DT05fU1BFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTkpCi0jZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9DT05fUFNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9DT05fREJHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9DT05fVE9VVCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkJDVSBFcnJvciBDb250cm9sIENhcHR1cmUgUmVnaXN0ZXIgKDAwMjBIKSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VDT04gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9CQ1UrIDB4MDAyMCkpCi0jZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9FQ09OX1RBRyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCi0jZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9FQ09OX1JETiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIzKQotI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUNPTl9XUk4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VDT05fU1ZNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9FQ09OX0FDSyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMTkpCi0jZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9FQ09OX0FCVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE4KQotI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUNPTl9SRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNykKLSNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VDT05fVE9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VDT05fRVJSQ05UICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VDT05fT1BDICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAyOCkKLQotLyoqKkJDVSBFcnJvciBBZGRyZXNzIENhcHR1cmUgUmVnaXN0ZXIgKDAwMjQgSCkqKiovCi0jZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9FQUREICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQkNVKyAweDAwMjQpKQotI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUFERF9GUElBRFIKLQotLyoqKkJDVSBFcnJvciBEYXRhIENhcHR1cmUgUmVnaXN0ZXIgKDAwMjhIKSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VEQVQgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9CQ1UrIDB4MDAyOCkpCi0jZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9FREFUX0ZQSURBVAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgTW9kdWxlICAgICAgOiAgTUJDIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSU5DQV9JUF9NQkMgICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGMTAzMDAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKipNYWlsYm94IENQVSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ0ZHICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA4MCkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19DRkdfU1dBUCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ0ZHX1JFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19DRkdfRldJRCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ0ZHX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKk1haWxib3ggQ1BVIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JU1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDg0KSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lTUl9CM0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSVNSX0IyREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JU1JfQjFFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JU1JfQjBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjgpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JU1JfV0RUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjcpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JU1JfRFMyNjAgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMjcpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqTWFpbGJveCBDUFUgTWFzayBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwODgpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLX0IzREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0tfQjJEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TS19CMUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TS19CMEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TS19XRFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNykKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TS19EUzI2MCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyNykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipNYWlsYm94IENQVSBNYXNrIDAxIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLMDEgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA4QykpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0swMV9CM0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLMDFfQjJEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSzAxX0IxRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI5KQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLMDFfQjBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjgpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0swMV9XRFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNykKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSzAxX0RTMjYwICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDI3KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKk1haWxib3ggQ1BVIE1hc2sgMTAgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0sxMCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDkwKSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSzEwX0IzREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0sxMF9CMkRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMwKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLMTBfQjFFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0sxMF9CMEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSzEwX1dEVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI3KQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLMTBfRFMyNjAgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMjcpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqTWFpbGJveCBDUFUgU2hvcnQgQ29tbWFuZCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NNRCAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwOTQpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ01EX0NTMjcwICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDI4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKk1haWxib3ggQ1BVIElucHV0IERhdGEgb2YgQnVmZmVyIDAqKiovCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JRDAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDAwKSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lEMF9JTkRBVEEKLQotLyoqKk1haWxib3ggQ1BVIElucHV0IERhdGEgb2YgQnVmZmVyIDEqKiovCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JRDEgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDIwKSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lEMV9JTkRBVEEKLQotLyoqKk1haWxib3ggQ1BVIE91dHB1dCBEYXRhIG9mIEJ1ZmZlciAyKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT0QyICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA0MCkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PRDJfT1VUREFUQQotCi0vKioqTWFpbGJveCBDUFUgT3V0cHV0IERhdGEgb2YgQnVmZmVyIDMqKiovCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PRDMgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDYwKSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09EM19PVVREQVRBCi0KLS8qKipNYWlsYm94IENQVSBDb250cm9sIFJlZ2lzdGVyIG9mIEJ1ZmZlciAwKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ1IwICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAwNCkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19DUjBfUkRZQUJURkxTICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqTWFpbGJveCBDUFUgQ29udHJvbCBSZWdpc3RlciBvZiBCdWZmZXIgMSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NSMSAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMjQpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ1IxX1JEWUFCVEZMUyAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKk1haWxib3ggQ1BVIENvbnRyb2wgUmVnaXN0ZXIgb2YgQnVmZmVyIDIqKiovCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19DUjIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDQ0KSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NSMl9SRFlBQlRGTFMgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipNYWlsYm94IENQVSBDb250cm9sIFJlZ2lzdGVyIG9mIEJ1ZmZlciAzKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ1IzICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA2NCkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19DUjNfUkRZQUJURkxTICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqTWFpbGJveCBDUFUgRnJlZSBTcGFjZSBvZiBCdWZmZXIgMCoqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0ZTMCAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMDgpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfRlMwX0ZTCi0KLS8qKipNYWlsYm94IENQVSBGcmVlIFNwYWNlIG9mIEJ1ZmZlciAxKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfRlMxICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAyOCkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19GUzFfRlMKLQotLyoqKk1haWxib3ggQ1BVIEZyZWUgU3BhY2Ugb2YgQnVmZmVyIDIqKiovCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19GUzIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDQ4KSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0ZTMl9GUwotCi0vKioqTWFpbGJveCBDUFUgRnJlZSBTcGFjZSBvZiBCdWZmZXIgMyoqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0ZTMyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNjgpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfRlMzX0ZTCi0KLS8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMCoqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0RBMCAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMEMpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfREEwX0RBCi0KLS8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0RBMSAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMkMpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfREExX0RBCi0KLS8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMioqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0RBMiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNEMpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfREEyX0RBCi0KLS8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMyoqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0RBMyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNkMpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfREEzX0RBCi0KLS8qKipNYWlsYm94IENQVSBJbnB1dCBBYnNvbHV0ZSBQb2ludGVyIG9mIEJ1ZmZlciAwKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSUFCUzAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAxMCkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JQUJTMF9JQUJTCi0KLS8qKipNYWlsYm94IENQVSBJbnB1dCBBYnNvbHV0ZSBQb2ludGVyIG9mIEJ1ZmZlciAxKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSUFCUzEgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAzMCkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JQUJTMV9JQUJTCi0KLS8qKipNYWlsYm94IENQVSBJbnB1dCBBYnNvbHV0ZSBQb2ludGVyIG9mIEJ1ZmZlciAyKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSUFCUzIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA1MCkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JQUJTMl9JQUJTCi0KLS8qKipNYWlsYm94IENQVSBJbnB1dCBBYnNvbHV0ZSBQb2ludGVyIG9mIEJ1ZmZlciAzKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSUFCUzMgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA3MCkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JQUJTM19JQUJTCi0KLS8qKipNYWlsYm94IENQVSBJbnB1dCBUZW1wb3JhcnkgUG9pbnRlciBvZiBCdWZmZXIgMCoqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lUTVAwICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMTQpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSVRNUDBfSVRNUAotCi0vKioqTWFpbGJveCBDUFUgSW5wdXQgVGVtcG9yYXJ5IFBvaW50ZXIgb2YgQnVmZmVyIDEqKiovCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JVE1QMSAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDM0KSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lUTVAxX0lUTVAKLQotLyoqKk1haWxib3ggQ1BVIElucHV0IFRlbXBvcmFyeSBQb2ludGVyIG9mIEJ1ZmZlciAyKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSVRNUDIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA1NCkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JVE1QMl9JVE1QCi0KLS8qKipNYWlsYm94IENQVSBJbnB1dCBUZW1wb3JhcnkgUG9pbnRlciBvZiBCdWZmZXIgMyoqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lUTVAzICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNzQpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSVRNUDNfSVRNUAotCi0vKioqTWFpbGJveCBDUFUgT3V0cHV0IEFic29sdXRlIFBvaW50ZXIgb2YgQnVmZmVyIDAqKiovCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PQUJTMCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDE4KSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09BQlMwX09BQlMKLQotLyoqKk1haWxib3ggQ1BVIE91dHB1dCBBYnNvbHV0ZSBQb2ludGVyIG9mIEJ1ZmZlciAxKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT0FCUzEgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAzOCkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PQUJTMV9PQUJTCi0KLS8qKipNYWlsYm94IENQVSBPdXRwdXQgQWJzb2x1dGUgUG9pbnRlciBvZiBCdWZmZXIgMioqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09BQlMyICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNTgpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT0FCUzJfT0FCUwotCi0vKioqTWFpbGJveCBDUFUgT3V0cHV0IEFic29sdXRlIFBvaW50ZXIgb2YgQnVmZmVyIDMqKiovCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PQUJTMyAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDc4KSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09BQlMzX09BQlMKLQotLyoqKk1haWxib3ggQ1BVIE91dHB1dCBUZW1wb3JhcnkgUG9pbnRlciBvZiBCdWZmZXIgMCoqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09UTVAwICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMUMpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT1RNUDBfT1RNUAotCi0vKioqTWFpbGJveCBDUFUgT3V0cHV0IFRlbXBvcmFyeSBQb2ludGVyIG9mIEJ1ZmZlciAxKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT1RNUDEgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAzQykpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PVE1QMV9PVE1QCi0KLS8qKipNYWlsYm94IENQVSBPdXRwdXQgVGVtcG9yYXJ5IFBvaW50ZXIgb2YgQnVmZmVyIDIqKiovCi0jZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PVE1QMiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDVDKSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09UTVAyX09UTVAKLQotLyoqKk1haWxib3ggQ1BVIE91dHB1dCBUZW1wb3JhcnkgUG9pbnRlciBvZiBCdWZmZXIgMyoqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09UTVAzICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwN0MpKQotI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT1RNUDNfT1RNUAotCi0vKioqRFNQIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfTUJDX0RDVFJMICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMEEwKSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfRENUUkxfQkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBJTkNBX0lQX01CQ19EQ1RSTF9CTU9EICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX0RDVFJMX0lETCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX0RDVFJMX1JFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQotCi0vKioqRFNQIFN0YXR1cyBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9NQkNfRFNUQSAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwQTQpKQotI2RlZmluZSBJTkNBX0lQX01CQ19EU1RBX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfRFNUQV9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0KLS8qKipEU1AgVGVzdCAxIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX01CQ19EVFNUMSAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDBBOCkpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX0RUU1QxX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBJTkNBX0lQX01CQ19EVFNUMV9IV0YzMiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9NQkNfRFRTVDFfSFdGNE0gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfTUJDX0RUU1QxX0hXRk9QICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgTW9kdWxlICAgICAgOiAgU3dpdGNoIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2ggICAgICAgICAgICAgICAgICAgICAgICgweEJGMTA0MDAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKipVbmtub3duIERlc3RpbmF0aW9uIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9VTl9ERVNUICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1VOX0RFU1RfQ0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9VTl9ERVNUX0xCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVU5fREVTVF9QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1VOX0RFU1RfQ00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9VTl9ERVNUX0xNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVU5fREVTVF9QTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1VOX0RFU1RfQ1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9VTl9ERVNUX0xVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVU5fREVTVF9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipWTEFOIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1ZMQU5fQ1RSTCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDA0KSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1NQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1RDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1ZBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKlBDIFZMQU4gQ29uZmlndXJhdGlvbiBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfVkxBTiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAwMDgpKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19WTEFOX1BSSSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1ZMQU5fVkxBTl9JRCAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDEyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkxBTiBWTEFOIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9WTEFOICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAwMEMpKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fVkxBTl9QUkkgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDEyKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fVkxBTl9WTEFOX0lEICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMTIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqQ1BVIFZMQU4gQ29uZmlndXJhdGlvbiBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1ZMQU4gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAxMCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9WTEFOX1BSSSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9WTEFOX1ZMQU5fSUQgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAxMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipQcmlvcml0eSBDb1MgTWFwcGluZyBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUFJJX0NvUyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAwMTQpKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QUklfQ29TX1A3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUFJJX0NvU19QNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BSSV9Db1NfUDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QUklfQ29TX1A0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUFJJX0NvU19QMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BSSV9Db1NfUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QUklfQ29TX1AxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUFJJX0NvU19QMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipTcGFubmluZyBUcmVlIFBvcnQgU3RhdHVzIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9TVF9QVCAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAxOCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1NUX1BUX0NQUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfU1RfUFRfTFBTICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9TVF9QVF9QUFMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipBUkwgQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTCAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAwMUMpKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9BUkxfQ1RMX0NIQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0FSTF9DVExfQ0hDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTF9DSENQICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9BUkxfQ1RMX0NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0FSTF9DVExfQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTF9DUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9BUkxfQ1RMX0NHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTF9QUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0FSTF9DVExfTVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTF9TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9BUkxfQ1RMX0FUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0FSTF9DVExfQUdFX1RJQ0tfU0VMICh2YWx1ZSkgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9BUkxfQ1RMX01BRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0FSTF9DVExfRU5MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTF9SZXMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMTkpIC0gMSkgJiAodmFsdWUpKSA8PCAxMykKLQotLyoqKkNQVSBBY2Nlc3MgQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX0FDVEwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAyMCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9BQ1RMX1JBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9BQ1RMX1JXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9BQ1RMX1JlcyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyMSkgLSAxKSAmICh2YWx1ZSkpIDw8IDkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9BQ1RMX0FWQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9BQ1RMX0lEWCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkNQVSBBY2Nlc3MgRGF0YSBSZWdpc3RlciAxKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9EQVRBMSAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAyNCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0RBVEExX0RhdGEgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipDUFUgQWNjZXNzIERhdGEgUmVnaXN0ZXIgMioqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfREFUQTIgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAwMjgpKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9EQVRBMl9EYXRhCi0KLS8qKipDUFUgUG9ydCBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfUENUTCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDJDKSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1BDVExfREFfUE9SVFMgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDExKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfUENUTF9EQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1BDVExfTUFfU1RBVEUgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9QQ1RMX01BTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9QQ1RMX01BX1BvcnRzICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfUENUTF9NQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfUENUTF9FTUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfUENUTF9FREwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfUENUTF9SZXMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMTgpIC0gMSkgJiAodmFsdWUpKSA8PCAxNCkKLQotLyoqKkRTQ1AgQ29TIE1hcHBpbmcgUmVnaXN0ZXIgMSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfRFNDUF9DT1MxICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAwMzApKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9EU0NQX0NPUzFfRFNDUAotCi0vKioqRFNDUCBDb1MgTWFwcGluZyBSZWdpc3RlciAxKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9EU0NQX0NPUzIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAzNCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0RTQ1BfQ09TMl9EU0NQCi0KLS8qKipQQyBXRlEgQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfV0ZRX0NUTCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAwODApKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19XRlFfQ1RMX1AxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfV0ZRX0NUTF9QMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1dGUV9DVExfV1QxICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCA1KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19XRlFfQ1RMX1dUMCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfV0ZRX0NUTF9TQ0hfU0VMICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipQQyBUWCBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19UWF9DVEwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDA4NCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1RYX0NUTF9FTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19UWF9DVExfRUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkxBTiBXRlEgQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1dGUV9DVEwgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAxMDApKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fV0ZRX0NUTF9QMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9XRlFfQ1RMX1AwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1dGUV9DVExfV1QxICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCA1KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fV0ZRX0NUTF9XVDAgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9XRlFfQ1RMX1NDSF9TRUwgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkxBTiBUWCBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fVFhfQ1RMICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDEwNCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9UWF9DVExfRUxSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1RYX0NUTF9FRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqQ1BVIFdGUSBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfV0ZRX0NUTCAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDE4MCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9XRlFfQ1RMX1AxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1dGUV9DVExfUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfV0ZRX0NUTF9XVDEgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDUpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9XRlFfQ1RMX1dUMCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1dGUV9DVExfU0NIX1NFTCAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqUE0gUEMgUlggV2F0ZXJtYXJrIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19XTSAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDIwMCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1dNX1JYX1dNMSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1dNX1JYX1dNMiAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1dNX1JYX1dNMyAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfV01fUlhfV000ICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqUE0gTEFOIFJYIFdhdGVybWFyayBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1dNICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAyMDQpKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fV01fUlhfV00xICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAyNCkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1dNX1JYX1dNMiAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9XTV9SWF9XTTMgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9XTV9SWF9XTTQgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipQTSBDUFUgUlggV2F0ZXJtYXJrIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfV00gICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDIwOCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9XTV9SWF9XTTEgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDI0KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfV01fUlhfV00yICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1dNX1JYX1dNMyAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1dNX1JYX1dNNCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKlBNIENQVSBSWCBXYXRlcm1hcmsgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0dCTF9XTSAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjBDKSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfR0JMX1dNX0dCTF9SWF9XTTEgKHZhbHVlKSAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0dCTF9XTV9HQkxfUlhfV00yICh2YWx1ZSkgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9HQkxfV01fR0JMX1JYX1dNMyAodmFsdWUpICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9HQkxfV01fR0JMX1JYX1dNNCAodmFsdWUpICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqUE0gQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1fQ1RMICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAyMTApKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTV9DVExfR0ROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1fQ1RMX0NETiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNX0NUTF9MRE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTV9DVExfUEROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKlBNIEhlYWRlciBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0hEX0NUTCAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDI4MCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfSERfQ1RMX1JMMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0hEX0NUTF9SQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIwKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0hEX0NUTF9DTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE5KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0hEX0NUTF9DViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE4KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0hEX0NUTF9UWVBFX0xFTiAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfSERfQ1RMX1RBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfSERfQ1RMX0FERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipQTSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciAxKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1NBMSAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjg0KSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19TQTFfU0FfNDdfMzIgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqUE0gU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgMioqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19TQTIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDI4OCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfU0EyX1NBXzMxXzAKLQotLyoqKlBNIERlc3QgQWRkcmVzcyBSZWdpc3RlciAxKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0RBMSAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjhDKSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19EQTFfREFfNDdfMzIgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqUE0gRGVzdCBBZGRyZXNzIFJlZ2lzdGVyIDIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfREEyICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAyOTApKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0RBMl9EQV8zMV8wCi0KLS8qKipQTSBWTEFOIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1ZMQU4gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDI5NCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfVkxBTl9QUkkgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDEzKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1ZMQU5fQ0ZJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfVkxBTl9WTEFOSUQgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMTIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqUE0gVFggSVBHIENvdW50ZXIgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfVFhfSVBHICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjk4KSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19UWF9JUEdfSVBHQ05UICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqUE0gUlggSVBHIENvdW50ZXIgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfUlhfSVBHICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjlDKSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19SWF9JUEdfSVBHQ05UICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqTWlycm9yIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NUlIgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDMwMCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01SUl9NUlIgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01SUl9FQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01SUl9FTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01SUl9FUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01SUl9JQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01SUl9JTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01SUl9JUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipQYWNrZXQgTGVuZ3RoIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QS1RfTEVOICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDMwNCkpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BLVF9MRU5fQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BLVF9MRU5fTUFYX1BLVF9MRU4gKHZhbHVlKSAgICAgICAgKCgoKCAxIDw8IDExKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKk1ESU8gQWNjZXNzIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NRElPX0FDQyAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwNDgwKSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19BQ0NfUkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19BQ0NfUlcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19BQ0NfUEhZX0FERFIgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgNSkgLSAxKSAmICh2YWx1ZSkpIDw8IDIxKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NRElPX0FDQ19SRUdfQUREUiAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCA1KSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDX1BIWV9EQVRBICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkV0aGVybmV0IFBIWSBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfRVBIWSAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDA0ODQpKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9FUEhZX1NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfRVBIWV9TUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0VQSFlfTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9FUEhZX0xQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfRVBIWV9ETCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0VQSFlfRFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9FUEhZX1BMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfRVBIWV9QUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipQYXVzZSBXcml0ZSBFbmFibGUgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BXUl9FTiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwNDg4KSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUFdSX0VOX1BMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUFdSX0VOX1BQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKk1ESU8gQ29uZmlndXJhdGlvbiBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19DRkcgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDQ4QykpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01ESU9fQ0ZHX01EUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMTQpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01ESU9fQ0ZHX1BIWV9MQU5fQUREUiAodmFsdWUpICAgICAgICgoKCggMSA8PCA1KSAtIDEpICYgKHZhbHVlKSkgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19DRkdfUEhZX1BDX0FERFIgKHZhbHVlKSAgICAgICAgKCgoKCAxIDw8IDUpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NRElPX0NGR19VRVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NRElPX0NGR19QUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01ESU9fQ0ZHX1BUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19DRkdfVU1NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkNsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NMS19DRkcgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwNTAwKSkKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ0xLX0NGR19BUkxfSUQgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DTEtfQ0ZHX0NQVV9JRCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NMS19DRkdfTEFOX0lEICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ0xLX0NGR19QQ19JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ0xLX0NGR19TRV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIE1vZHVsZSAgICAgIDogIFNTQzEgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElOQ0FfSVBfU1NDMSAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDUwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKioqQ29udHJvbCBSZWdpc3RlciAoUHJvZ3JhbW1pbmcgTW9kZSkqKiovCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX1BSRyAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MxKyAweDAwMTApKQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9QUkdfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fUFJHX01TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX1BSR19BUkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9QUkdfQkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX1BSR19QRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fUFJHX1JFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX1BSR19URU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9QUkdfTEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9QUkdfUE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9QUkdfUEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9QUkdfSEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9QUkdfQk0gKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipTQ0MgQ29udHJvbCBSZWdpc3RlciAoT3BlcmF0aW5nIE1vZGUpKioqLwotI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9PUFIgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMSsgMHgwMDEwKSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fT1BSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX09QUl9NUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9PUFJfQlNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX09QUl9CRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9PUFJfUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fT1BSX1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fT1BSX1RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fT1BSX0JDICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqU1NDIFdyaXRlIEhhcmR3YXJlIE1vZGlmaWVkIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfV0hCQ09OICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MxKyAweDAwNDApKQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1dIQkNPTl9TRVRCRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfV0hCQ09OX1NFVFBFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19XSEJDT05fU0VUUkUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1dIQkNPTl9TRVRURSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfV0hCQ09OX0NMUkJFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19XSEJDT05fQ0xSUEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1dIQkNPTl9DTFJSRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19XSEJDT05fQ0xSVEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCi0KLS8qKipTU0MgQmF1ZHJhdGUgVGltZXIgUmVsb2FkIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX0JSICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMSsgMHgwMDE0KSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19CUl9CUl9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipTU0MgVHJhbnNtaXR0ZXIgQnVmZmVyIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1RCICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMSsgMHgwMDIwKSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19UQl9UQl9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipTU0MgUmVjZWl2ZXIgQnVmZmVyIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1JCICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMSsgMHgwMDI0KSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19SQl9SQl9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipTU0MgUmVjZWl2ZSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfUlhGQ09OICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MxKyAweDAwMzApKQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1JYRkNPTl9SWEZJVEwgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfUlhGQ09OX1JYVE1FTiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfUlhGQ09OX1JYRkxVICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1JYRkNPTl9SWEZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKlNTQyBUcmFuc21pdCBGSUZPIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfVFhGQ09OICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MxKyAweDAwMzQpKQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1RYRkNPTl9SWEZJVEwgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfVFhGQ09OX1RYVE1FTiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfVFhGQ09OX1RYRkxVICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1RYRkNPTl9UWEZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKlNTQyBGSUZPIFN0YXR1cyBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19GU1RBVCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzErIDB4MDAzOCkpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfRlNUQVRfVFhGRkwgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX0ZTVEFUX1JYRkZMICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKlNTQyBDbG9jayBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX0NMQyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMSsgMHgwMDAwKSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19DTENfUk1DICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX0NMQ19ESVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfQ0xDX0RJU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIE1vZHVsZSAgICAgIDogIFNTQzIgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElOQ0FfSVBfU1NDMiAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDYwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKioqQ29udHJvbCBSZWdpc3RlciAoUHJvZ3JhbW1pbmcgTW9kZSkqKiovCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX1BSRyAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MyKyAweDAwMTApKQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9QUkdfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fUFJHX01TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX1BSR19BUkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9QUkdfQkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX1BSR19QRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fUFJHX1JFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX1BSR19URU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9QUkdfTEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9QUkdfUE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9QUkdfUEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9QUkdfSEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9QUkdfQk0gKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipTQ0MgQ29udHJvbCBSZWdpc3RlciAoT3BlcmF0aW5nIE1vZGUpKioqLwotI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9PUFIgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMisgMHgwMDEwKSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fT1BSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX09QUl9NUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9PUFJfQlNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX09QUl9CRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9PUFJfUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fT1BSX1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fT1BSX1RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fT1BSX0JDICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqU1NDIFdyaXRlIEhhcmR3YXJlIE1vZGlmaWVkIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfV0hCQ09OICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MyKyAweDAwNDApKQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1dIQkNPTl9TRVRCRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfV0hCQ09OX1NFVFBFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19XSEJDT05fU0VUUkUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1dIQkNPTl9TRVRURSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfV0hCQ09OX0NMUkJFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19XSEJDT05fQ0xSUEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1dIQkNPTl9DTFJSRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19XSEJDT05fQ0xSVEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCi0KLS8qKipTU0MgQmF1ZHJhdGUgVGltZXIgUmVsb2FkIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX0JSICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMisgMHgwMDE0KSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19CUl9CUl9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipTU0MgVHJhbnNtaXR0ZXIgQnVmZmVyIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1RCICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMisgMHgwMDIwKSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19UQl9UQl9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipTU0MgUmVjZWl2ZXIgQnVmZmVyIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1JCICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMisgMHgwMDI0KSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19SQl9SQl9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipTU0MgUmVjZWl2ZSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfUlhGQ09OICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MyKyAweDAwMzApKQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1JYRkNPTl9SWEZJVEwgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfUlhGQ09OX1JYVE1FTiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfUlhGQ09OX1JYRkxVICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1JYRkNPTl9SWEZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKlNTQyBUcmFuc21pdCBGSUZPIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfVFhGQ09OICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MyKyAweDAwMzQpKQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1RYRkNPTl9SWEZJVEwgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfVFhGQ09OX1RYVE1FTiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfVFhGQ09OX1RYRkxVICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1RYRkNPTl9UWEZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKlNTQyBGSUZPIFN0YXR1cyBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19GU1RBVCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzIrIDB4MDAzOCkpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfRlNUQVRfVFhGRkwgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX0ZTVEFUX1JYRkZMICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKlNTQyBDbG9jayBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX0NMQyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMisgMHgwMDAwKSkKLSNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19DTENfUk1DICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX0NMQ19ESVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfQ0xDX0RJU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIE1vZHVsZSAgICAgIDogIEVCVSByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElOQ0FfSVBfRUJVICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDIwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKioqRUJVIENsb2NrIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9DTEMgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0VCVSsgMHgwMDAwKSkKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0NMQ19ESVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9DTENfRElTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqRUJVIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQ09OICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9FQlUrIDB4MDAxMCkpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9DT05fRFRBQ1MgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAyMCkKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0NPTl9EVEFSVyAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQ09OX1RPVVRDICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0NPTl9BUkJNT0RFICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9DT05fQVJCU1lOQyAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQ09OXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotCi0vKioqRUJVIEFkZHJlc3MgU2VsZWN0IFJlZ2lzdGVyIDAqKiovCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwwICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0VCVSsgMHgwMDIwKSkKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDBfQkFTRSAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIwKSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwwX01BU0sgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDBfTUlSUk9SRSAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMF9SRUdFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkVCVSBBZGRyZXNzIFNlbGVjdCBSZWdpc3RlciAxKioqLwotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMSAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9FQlUrIDB4MDAyNCkpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwxX0JBU0UgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyMCkgLSAxKSAmICh2YWx1ZSkpIDw8IDEyKQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMV9NQVNLICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwxX01JUlJPUkUgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDFfUkVHRU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipFQlUgQWRkcmVzcyBTZWxlY3QgUmVnaXN0ZXIgMioqKi8KLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDIgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRUJVKyAweDAwMjgpKQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMl9CQVNFICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMjApIC0gMSkgJiAodmFsdWUpKSA8PCAxMikKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDJfTUFTSyAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMl9NSVJST1JFICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwyX1JFR0VOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqRUJVIEJ1cyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAqKiovCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04wICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0VCVSsgMHgwMDYwKSkKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjBfV1JESVMgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9BTEVDICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI5KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9CQ0dFTiAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI3KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9BR0VOICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI0KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9DTVVMVFIgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIyKQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9XQUlUICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIwKQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9XQUlUSU5WICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE5KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9TRVRVUCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04wX1BPUlRXICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04wX1dBSVRSREMgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCA3KSAtIDEpICYgKHZhbHVlKSkgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjBfV0FJVFdSQyAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9IT0xEQyAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04wX1JFQ09WQyAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjBfQ01VTFQgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqRUJVIEJ1cyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEqKiovCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04xICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0VCVSsgMHgwMDY0KSkKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfV1JESVMgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMV9BTEVDICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI5KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMV9CQ0dFTiAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI3KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMV9BR0VOICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI0KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMV9DTVVMVFIgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIyKQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMV9XQUlUICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIwKQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMV9XQUlUSU5WICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE5KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMV9TRVRVUCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04xX1BPUlRXICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04xX1dBSVRSREMgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCA3KSAtIDEpICYgKHZhbHVlKSkgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfV0FJVFdSQyAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMV9IT0xEQyAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04xX1JFQ09WQyAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfQ01VTFQgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqRUJVIEJ1cyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIqKiovCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0VCVSsgMHgwMDY4KSkKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjJfV1JESVMgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMl9BTEVDICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI5KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMl9CQ0dFTiAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI3KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMl9BR0VOICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI0KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMl9DTVVMVFIgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIyKQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMl9XQUlUICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIwKQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMl9XQUlUSU5WICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE5KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMl9TRVRVUCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX1BPUlRXICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX1dBSVRSREMgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCA3KSAtIDEpICYgKHZhbHVlKSkgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjJfV0FJVFdSQyAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMl9IT0xEQyAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX1JFQ09WQyAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjJfQ01VTFQgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgTW9kdWxlICAgICAgOiAgU0RSQU0gcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSU5DQV9JUF9TRFJBTSAgICAgICAgICAgICAgICAgICAgICAgICgweEJGODAwMDAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKipNQyBBY2Nlc3MgRXJyb3IgQ2F1c2UgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfRVJSQ0FVU0UgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU0RSQU0rIDB4MDEwMCkpCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfRVJSQ0FVU0VfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfRVJSQ0FVU0VfUE9SVCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19FUlJDQVVTRV9DQVVTRSAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfRVJSQ0FVU0VfUmVzICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IE5hTikgLSAxKSAmICh2YWx1ZSkpIDw8IE5hTikKLQotLyoqKk1DIEFjY2VzcyBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0VSUkFERFIgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NEUkFNKyAweDAxMDgpKQotI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0VSUkFERFJfQUREUgotCi0vKioqTUMgSS9PIEdlbmVyYWwgUHVycG9zZSBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19JT0dQICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TRFJBTSsgMHgwODAwKSkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19JT0dQX0dQUjYgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMjgpCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfSU9HUF9HUFI1ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDI0KQotI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0lPR1BfR1BSNCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAyMCkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19JT0dQX0dQUjMgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfSU9HUF9HUFIyICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDEyKQotI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0lPR1BfQ1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfSU9HUF9DTEtERUxBWSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19JT0dQX0NMS1JBVCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19JT0dQX1JEREVMICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKk1DIFNlbGYgUmVmcmVzaCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19TRUxGUkZTSCAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TRFJBTSsgMHgwQTAwKSkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19TRUxGUkZTSF9QV0RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfU0VMRlJGU0hfUFdEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19TRUxGUkZTSF9SZXMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMzApIC0gMSkgJiAodmFsdWUpKSA8PCAyKQotCi0vKioqTUMgRW5hYmxlIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0NUUkxFTkEgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NEUkFNKyAweDEwMDApKQotI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0NUUkxFTkFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19DVFJMRU5BX1JlcyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzMSkgLSAxKSAmICh2YWx1ZSkpIDw8IDEpCi0KLS8qKipNQyBNb2RlIFJlZ2lzdGVyIFNldHVwIENvZGUqKiovCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTVJTQ09ERSAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU0RSQU0rIDB4MTAwOCkpCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTVJTQ09ERV9VTUMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNSkgLSAxKSAmICh2YWx1ZSkpIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTVJTQ09ERV9DTCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19NUlNDT0RFX1dUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19NUlNDT0RFX0JMICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqTUMgQ29uZmlndXJhdGlvbiBEYXRhLXdvcmQgV2lkdGggUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHRFcgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TRFJBTSsgMHgxMDEwKSkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19DRkdEV19EVyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19DRkdEV19SZXMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMjgpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQotCi0vKioqTUMgQ29uZmlndXJhdGlvbiBQaHlzaWNhbCBCYW5rIDAgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU0RSQU0rIDB4MTAxOCkpCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwX01DU0VOMCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwX0JBTktOMCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19DRkdQQjBfUk9XVzAgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0NGR1BCMF9DT0xXMCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwX1JlcyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQotCi0vKioqTUMgTGF0ZW5jeSBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19MQVRFTkNZICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TRFJBTSsgMHgxMDM4KSkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19MQVRFTkNZX1RSUCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTEFURU5DWV9UUkFTICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDEyKQotI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0xBVEVOQ1lfVFJDRCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0xBVEVOQ1lfVERQTCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0xBVEVOQ1lfVERBTCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0xBVEVOQ1lfUmVzICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDEyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjApCi0KLS8qKipNQyBSZWZyZXNoIEN5Y2xlIFRpbWUgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfVFJFRlJFU0ggICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU0RSQU0rIDB4MTA0MCkpCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfVFJFRlJFU0hfVFJFRiAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDEzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19UUkVGUkVTSF9SZXMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMTkpIC0gMSkgJiAodmFsdWUpKSA8PCAxMykKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIE1vZHVsZSAgICAgIDogIEdQVFUgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElOQ0FfSVBfR1BUVSAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDMwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKioqR1BUIENsb2NrIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfQ0xDICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwMDApKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX0NMQ19STUMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfQ0xDX0RJU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9DTENfRElTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqR1BUIFRpbWVyIDMgQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UM0NPTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDAxNCkpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDNDT05fVDNSRElSICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDNDT05fVDNDSERJUiAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UM0NPTl9UM0VER0UgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMykKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UM0NPTl9CUFMxICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDExKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QzQ09OX1QzT1RMICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UM0NPTl9UM1VEICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDNDT05fVDNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UM0NPTl9UM00gKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDNDT05fVDNJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqR1BUIFdyaXRlIEhhcmR3YXJlIE1vZGlmaWVkIFRpbWVyIDMgQ29udHJvbCBSZWdpc3RlcgotSWYgc2V0IGFuZCBjbGVhciBiaXQgYXJlIHdyaXR0ZW4gY29uY3VycmVudGx5IHdpdGggMSwgdGhlIGFzc29jaWF0ZWQgYml0IGlzIG5vdCBjaGFuZ2VkLioqKi8KLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUM0NPTiAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDA0QykpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDNDT05fU0VUVDNDSERJUiAgICAgICAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUM0NPTl9DTFJUM0NIRElSICAgICAgICAgICAgICAgICgxIDw8IDE0KQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQzQ09OX1NFVFQzRURHRSAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQzQ09OX0NMUlQzRURHRSAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQzQ09OX1NFVFQzT1RMICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDNDT05fQ0xSVDNPVEwgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKLQotLyoqKkdQVCBUaW1lciAyIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDJDT04gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwMTApKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QyQ09OX1R4UkRJUiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QyQ09OX1R4Q0hESVIgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDJDT05fVHhFREdFICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTMpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDJDT05fVHhJUkRJUyAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UMkNPTl9UeFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDJDT05fVHhVRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QyQ09OX1R4UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDJDT05fVHhNICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QyQ09OX1R4SSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkdQVCBUaW1lciA0IENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT04gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwMTgpKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q0Q09OX1R4UkRJUiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q0Q09OX1R4Q0hESVIgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT05fVHhFREdFICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTMpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT05fVHhJUkRJUyAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNENPTl9UeFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT05fVHhVRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q0Q09OX1R4UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT05fVHhNICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q0Q09OX1R4SSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkdQVCBXcml0ZSBIVyBNb2RpZmllZCBUaW1lciAyIENvbnRyb2wgUmVnaXN0ZXIgSWYgc2V0Ci0gYW5kIGNsZWFyIGJpdCBhcmUgd3JpdHRlbiBjb25jdXJyZW50bHkgd2l0aCAxLCB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgbm90IGNoYW5nZWQuKioqLwotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQyQ09OICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfR1BUVSsgMHgwMDQ4KSkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUMkNPTl9TRVRUeENIRElSICAgICAgICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQyQ09OX0NMUlR4Q0hESVIgICAgICAgICAgICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDJDT05fU0VUVHhFREdFICAgICAgICAgICAgICAgICAgKDEgPDwgMTMpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDJDT05fQ0xSVHhFREdFICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCi0KLS8qKipHUFQgV3JpdGUgSFcgTW9kaWZpZWQgVGltZXIgNCBDb250cm9sIFJlZ2lzdGVyIElmIHNldAotIGFuZCBjbGVhciBiaXQgYXJlIHdyaXR0ZW4gY29uY3VycmVudGx5IHdpdGggMSwgdGhlIGFzc29jaWF0ZWQgYml0IGlzIG5vdCBjaGFuZ2VkLioqKi8KLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUNENPTiAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDA1MCkpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDRDT05fU0VUVHhDSERJUiAgICAgICAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUNENPTl9DTFJUeENIRElSICAgICAgICAgICAgICAgICgxIDw8IDE0KQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQ0Q09OX1NFVFR4RURHRSAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQ0Q09OX0NMUlR4RURHRSAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQotCi0vKioqR1BUIENhcHR1cmUgUmVsb2FkIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX0NBUFJFTCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfR1BUVSsgMHgwMDMwKSkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9DQVBSRUxfQ0FQUkVMICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkdQVCBUaW1lciAyIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QyICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfR1BUVSsgMHgwMDM0KSkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UMl9UVkFMICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqR1BUIFRpbWVyIDMgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDMgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwMzgpKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QzX1RWQUwgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipHUFQgVGltZXIgNCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNCAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDAzQykpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRfVFZBTCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkdQVCBUaW1lciA1IFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1ICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfR1BUVSsgMHgwMDQwKSkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNV9UVkFMICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqR1BUIFRpbWVyIDYgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDYgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwNDQpKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q2X1RWQUwgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipHUFQgVGltZXIgNiBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q2Q09OICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfR1BUVSsgMHgwMDIwKSkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNkNPTl9UNlNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q2Q09OX1Q2Q0xSICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNkNPTl9CUFMyICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDExKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q2Q09OX1Q2T1RMICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNkNPTl9UNlVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDZDT05fVDZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNkNPTl9UNk0gKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDZDT05fVDZJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqR1BUIFdyaXRlIEhXIE1vZGlmaWVkIFRpbWVyIDYgQ29udHJvbCBSZWdpc3RlciBJZiBzZXQKLSBhbmQgY2xlYXIgYml0IGFyZSB3cml0dGVuIGNvbmN1cnJlbnRseSB3aXRoIDEsIHRoZSBhc3NvY2lhdGVkIGJpdCBpcyBub3QgY2hhbmdlZC4qKiovCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDZDT04gICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwNTQpKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQ2Q09OX1NFVFQ2T1RMICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDZDT05fQ0xSVDZPVEwgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKLQotLyoqKkdQVCBUaW1lciA1IENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDVDT04gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwMUMpKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1Q09OX1Q1U0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDVDT05fVDVDTFIgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1Q09OX0NJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAxMikKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNUNPTl9UNUNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1Q09OX0NUMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQotI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1Q09OX1Q1UkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNUNPTl9UNVVERSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNUNPTl9UNVVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDVDT05fVDVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNUNPTl9UNU0gKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDVDT05fVDVJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgTW9kdWxlICAgICAgOiAgSU9NIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSU5DQV9JUF9JT00gICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGMTA1MDAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKipSZWNlaXZlIEZJRk8qKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1JGSUZPICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDAwKSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fUkZJRk9fUlhEICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqVHJhbnNtaXQgRklGTyoqKi8KLSNkZWZpbmUgSU5DQV9JUF9JT01fWEZJRk8gICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwMDApKQotI2RlZmluZSBJTkNBX0lQX0lPTV9YRklGT19UWEQgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIEhETEMqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0lTVEFIICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDgwKSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fSVNUQUhfUk1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9JT01fSVNUQUhfUlBGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9JT01fSVNUQUhfUkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fSVNUQUhfWFBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9JT01fSVNUQUhfWE1SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9JT01fSVNUQUhfWERVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLQotLyoqKkludGVycnVwdCBNYXNrIFJlZ2lzdGVyIEhETEMqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX01BU0tIICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDgwKSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fTUFTS0hfUk1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9JT01fTUFTS0hfUlBGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9JT01fTUFTS0hfUkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fTUFTS0hfWFBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9JT01fTUFTS0hfWE1SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9JT01fTUFTS0hfWERVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLQotLyoqKlN0YXR1cyBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9JT01fU1RBUiAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwODQpKQotI2RlZmluZSBJTkNBX0lQX0lPTV9TVEFSX1hET1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9JT01fU1RBUl9YRlcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX0lPTV9TVEFSX1JBQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9JT01fU1RBUl9YQUNJICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0KLS8qKipDb21tYW5kIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0lPTV9DTURSICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDA4NCkpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NNRFJfUk1DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9JT01fQ01EUl9SUkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NNRFJfWFRGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9JT01fQ01EUl9YTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX0lPTV9DTURSX1hSRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKk1vZGUgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX01PREVIICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDg4KSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fTU9ERUhfTURTMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJTkNBX0lQX0lPTV9NT0RFSF9NRFMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX01PREVIX01EUzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fTU9ERUhfUkFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9JT01fTU9ERUhfRElNMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX0lPTV9NT0RFSF9ESU0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX01PREVIX0RJTTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkV4dGVuZGVkIE1vZGUgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0VYTVIgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDhDKSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fRVhNUl9YRkJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0VYTVJfUkZCUyAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA1KQotI2RlZmluZSBJTkNBX0lQX0lPTV9FWE1SX1NSQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0VYTVJfWENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX0lPTV9FWE1SX1JDUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9JT01fRVhNUl9JVEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqU0FQSTEgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1NBUDEgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDk0KSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fU0FQMV9TQVBJMSAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1NBUDFfTUhBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKlJlY2VpdmUgRnJhbWUgQnl0ZSBDb3VudCBMb3cqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1JCQ0wgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDk4KSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fUkJDTF9SQkModmFsdWUpICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqU0FQSTIgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1NBUDIgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDk4KSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fU0FQMl9TQVBJMiAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1NBUDJfTUxBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKlJlY2VpdmUgRnJhbWUgQnl0ZSBDb3VudCBIaWdoKioqLwotI2RlZmluZSBJTkNBX0lQX0lPTV9SQkNIICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDA5QykpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1JCQ0hfT1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX0lPTV9SQkNIX1JCQzExICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX0lPTV9SQkNIX1JCQzEwICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX0lPTV9SQkNIX1JCQzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fUkJDSF9SQkM4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipURUkxIFJlZ2lzdGVyIDEqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1RFSTEgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDlDKSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fVEVJMV9URUkxICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNykgLSAxKSAmICh2YWx1ZSkpIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1RFSTFfRUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1JTVEEgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMEEwKSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fUlNUQV9WRlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJTkNBX0lQX0lPTV9SU1RBX1JETyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1JTVEFfQ1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fUlNUQV9SQUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX0lPTV9SU1RBX1NBMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1JTVEFfU0EwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9JT01fUlNUQV9UQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1JTVEFfQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotCi0vKioqVEVJMiBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9JT01fVEVJMiAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwQTApKQotI2RlZmluZSBJTkNBX0lQX0lPTV9URUkyX1RFSTIgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA3KSAtIDEpICYgKHZhbHVlKSkgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fVEVJMl9FQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipUZXN0IE1vZGUgUmVnaXN0ZXIgSERMQyoqKi8KLSNkZWZpbmUgSU5DQV9JUF9JT01fVE1IICAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwQTQpKQotI2RlZmluZSBJTkNBX0lQX0lPTV9UTUhfVExQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkNvbW1hbmQvSW5kaWNhdGlvbiBSZWNlaXZlIDAqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NJUjAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMEI4KSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fQ0lSMF9DT0RSMCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NJUjBfQ0lDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX0lPTV9DSVIwX0NJQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9JT01fQ0lSMF9TRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NJUjBfQkFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkNvbW1hbmQvSW5kaWNhdGlvbiBUcmFuc21pdCAwKioqLwotI2RlZmluZSBJTkNBX0lQX0lPTV9DSVgwICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDBCOCkpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NJWDBfQ09EWDAgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX0lPTV9DSVgwX1RCQTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9JT01fQ0lYMF9UQkExICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NJWDBfVEJBMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX0lPTV9DSVgwX0JBQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipDb21tYW5kL0luZGljYXRpb24gUmVjZWl2ZSAxKioqLwotI2RlZmluZSBJTkNBX0lQX0lPTV9DSVIxICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDBCQykpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NJUjFfQ09EUjEgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQotCi0vKioqQ29tbWFuZC9JbmRpY2F0aW9uIFRyYW5zbWl0IDEqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NJWDEgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMEJDKSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fQ0lYMV9DT0RYMSAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NJWDFfQ0lDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX0lPTV9DSVgxX0NJMUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkNvbnRyb2xsZXIgRGF0YSBBY2Nlc3MgUmVnLiAoQ0gxMCkqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTEwICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTAwKSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMTBfQ0RBICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqQ29udHJvbGxlciBEYXRhIEFjY2VzcyBSZWcuIChDSDExKSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMTEgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMDQpKQotI2RlZmluZSBJTkNBX0lQX0lPTV9DREExMV9DREEgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipDb250cm9sbGVyIERhdGEgQWNjZXNzIFJlZy4gKENIMjApKioqLwotI2RlZmluZSBJTkNBX0lQX0lPTV9DREEyMCAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDEwOCkpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTIwX0NEQSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkNvbnRyb2xsZXIgRGF0YSBBY2Nlc3MgUmVnLiAoQ0gyMSkqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTIxICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTBDKSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMjFfQ0RBICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqVGltZSBTbG90IGFuZCBEYXRhIFBvcnQgU2VsLiAoQ0gxMCkqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQV9UU0RQMTAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTEwKSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBX1RTRFAxMF9EUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJTkNBX0lQX0lPTV9DREFfVFNEUDEwX1RTUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMTEpKioqLwotI2RlZmluZSBJTkNBX0lQX0lPTV9DREFfVFNEUDExICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDExNCkpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQV9UU0RQMTFfRFBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBX1RTRFAxMV9UU1MgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipUaW1lIFNsb3QgYW5kIERhdGEgUG9ydCBTZWwuIChDSDIwKSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBX1RTRFAyMCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMTgpKQotI2RlZmluZSBJTkNBX0lQX0lPTV9DREFfVFNEUDIwX0RQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQV9UU0RQMjBfVFNTICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqVGltZSBTbG90IGFuZCBEYXRhIFBvcnQgU2VsLiAoQ0gyMSkqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQV9UU0RQMjEgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTFDKSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBX1RTRFAyMV9EUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJTkNBX0lQX0lPTV9DREFfVFNEUDIxX1RTUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMTApKioqLwotI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMTAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDEyMCkpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NPX1RTRFAxMF9EUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMTBfVFNTICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqVGltZSBTbG90IGFuZCBEYXRhIFBvcnQgU2VsLiAoQ0gxMSkqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NPX1RTRFAxMSAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTI0KSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDExX0RQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NPX1RTRFAxMV9UU1MgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipUaW1lIFNsb3QgYW5kIERhdGEgUG9ydCBTZWwuIChDSDIwKSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDIwICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMjgpKQotI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMjBfRFBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDIwX1RTUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMjEpKioqLwotI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMjEgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDEyQykpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NPX1RTRFAyMV9EUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMjFfVFNTICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqQ3RybC4gUmVnLiBDb250ci4gRGF0YSBBY2Nlc3MgQ0gxeCoqKi8KLSNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMV9DUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMzgpKQotI2RlZmluZSBJTkNBX0lQX0lPTV9DREExX0NSX0VOX1RCTSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTFfQ1JfRU5fSTEgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTFfQ1JfRU5fSTAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTFfQ1JfRU5fTzEgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTFfQ1JfRU5fTzAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTFfQ1JfU1dBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqQ3RybC4gUmVnLiBDb250ci4gRGF0YSBBY2Nlc3MgQ0gxeCoqKi8KLSNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMl9DUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxM0MpKQotI2RlZmluZSBJTkNBX0lQX0lPTV9DREEyX0NSX0VOX1RCTSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTJfQ1JfRU5fSTEgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTJfQ1JfRU5fSTAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTJfQ1JfRU5fTzEgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTJfQ1JfRU5fTzAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTJfQ1JfU1dBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqQ29udHJvbCBSZWdpc3RlciBCLUNoYW5uZWwgRGF0YSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9JT01fQkNIQV9DUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxNDQpKQotI2RlZmluZSBJTkNBX0lQX0lPTV9CQ0hBX0NSX0VOX0JDMiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0JDSEFfQ1JfRU5fQkMxICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLQotLyoqKkNvbnRyb2wgUmVnaXN0ZXIgQi1DaGFubmVsIERhdGEqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0JDSEJfQ1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTQ4KSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fQkNIQl9DUl9FTl9CQzIgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX0lPTV9CQ0hCX0NSX0VOX0JDMSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0KLS8qKipDb250cm9sIFJlZy4gZm9yIEhETEMgYW5kIENJMSBEYXRhKioqLwotI2RlZmluZSBJTkNBX0lQX0lPTV9EQ0lfQ1IgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDE0QykpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0RDSV9DUl9EUFNfQ0kxICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0RDSV9DUl9FTl9DSTEgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX0lPTV9EQ0lfQ1JfRU5fRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQotCi0vKioqQ29udHJvbCBSZWcuIGZvciBIRExDIGFuZCBDSTEgRGF0YSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9JT01fRENJQ19DUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxNEMpKQotI2RlZmluZSBJTkNBX0lQX0lPTV9EQ0lDX0NSX0RQU19DSTAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9JT01fRENJQ19DUl9FTl9DSTAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX0lPTV9EQ0lDX0NSX0RQU19EICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQotCi0vKioqQ29udHJvbCBSZWcuIFNlcmlhbCBEYXRhIFN0cm9iZSB4KioqLwotI2RlZmluZSBJTkNBX0lQX0lPTV9TRFNfQ1IgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDE1NCkpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1NEU19DUl9FTlNfVFNTICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1NEU19DUl9FTlNfVFNTXzEgICAgICAgICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX0lPTV9TRFNfQ1JfRU5TX1RTU18zICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fU0RTX0NSX1RTUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkNvbnRyb2wgUmVnaXN0ZXIgSU9NIERhdGEqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0lPTV9DUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTVDKSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fSU9NX0NSX1NQVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0lPTV9DUl9DSV9DUyAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fSU9NX0NSX1RJQ19ESVMgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9JT01fSU9NX0NSX0VOX0JDTCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0lPTV9DUl9DTEtNICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0lPTV9DUl9SZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX0lPTV9JT01fQ1JfRElTX0lPTSAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqU3luY2hyb25vdXMgVHJhbnNmZXIgSW50ZXJydXB0KioqLwotI2RlZmluZSBJTkNBX0lQX0lPTV9TVEkgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDE2MCkpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1NUSV9TVE9WMjEgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJTkNBX0lQX0lPTV9TVElfU1RPVjIwICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9JT01fU1RJX1NUT1YxMSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1NUSV9TVE9WMTAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX0lPTV9TVElfU1RJMjEgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1NUSV9TVEkyMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9JT01fU1RJX1NUSTExICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX0lPTV9TVElfU1RJMTAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipBY2tub3dsZWRnZSBTeW5jaHJvbm91cyBUcmFuc2ZlciBJbnRlcnJ1cHQqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX0FTVEkgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTYwKSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fQVNUSV9BQ0syMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9JT01fQVNUSV9BQ0syMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9JT01fQVNUSV9BQ0sxMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fQVNUSV9BQ0sxMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKk1hc2sgU3luY2hyb25vdXMgVHJhbnNmZXIgSW50ZXJydXB0KioqLwotI2RlZmluZSBJTkNBX0lQX0lPTV9NU1RJICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDE2NCkpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX01TVElfU1RPVjIxICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9JT01fTVNUSV9TVE9WMjAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX0lPTV9NU1RJX1NUT1YxMSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX01TVElfU1RPVjEwICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9JT01fTVNUSV9TVEkyMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9JT01fTVNUSV9TVEkyMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9JT01fTVNUSV9TVEkxMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9JT01fTVNUSV9TVEkxMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgZm9yIFNlcmlhbCBEYXRhIFN0cm9iZXMqKiovCi0jZGVmaW5lIElOQ0FfSVBfSU9NX1NEU19DT05GICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxNjgpKQotI2RlZmluZSBJTkNBX0lQX0lPTV9TRFNfQ09ORl9TRFNfQkNMICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipNb25pdG9yaW5nIENEQSBCaXRzKioqLwotI2RlZmluZSBJTkNBX0lQX0lPTV9NQ0RBICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDE2QykpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX01DREFfTUNEQTIxICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX0lPTV9NQ0RBX01DREEyMCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9JT01fTUNEQV9NQ0RBMTEgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfSU9NX01DREFfTUNEQTEwICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgTW9kdWxlICAgICAgOiAgQVNDIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSU5DQV9JUF9BU0MgICAgICAgICAgICAgICAgICAgICAgICAgICgweEI4MDAwNDAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKipBU0MgUG9ydCBJbnB1dCBTZWxlY3QgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19QSVNFTCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDA0KSkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1BJU0VMX1JJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipBU0MgQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NPTiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwMTApKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NPTl9MQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX0JSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX09ERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX0ZERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX09FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19DT05fRkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX1BFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NPTl9PRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX0ZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19DT05fUEVOUlhESSAgICAgICAgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19DT05fUkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NPTl9TVFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX00gKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipBU0MgV3JpdGUgSGFyZHdhcmUgTW9kaWZpZWQgQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkNPTiAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwNTApKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQ09OX1NFVE9FICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMykKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkNPTl9TRVRGRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJDT05fU0VUUEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQ09OX0NMUk9FICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkNPTl9DTFJGRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkNPTl9DTFJQRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkNPTl9TRVRSRU4gICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQ09OX0NMUlJFTiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCi0KLS8qKipBU0MgQmF1ZHJhdGUgVGltZXIvUmVsb2FkIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQlRSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDAxNCkpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19CVFJfQlJfVkFMVUUgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqQVNDIEZyYWN0aW9uYWwgRGl2aWRlciBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0ZEViAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwMTgpKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfRkRWX0ZEX1ZBTFVFICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDkpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqQVNDIElyREEgUHVsc2UgTW9kZS9XaWR0aCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1BNVyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwMUMpKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfUE1XX0lSUFcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1BNV19QV19WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkFTQyBUcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19UQlVGICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwMjApKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfVEJVRl9URF9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCA5KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkFTQyBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1JCVUYgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDAyNCkpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19SQlVGX1JEX1ZBTFVFICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDkpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqQVNDIEF1dG9iYXVkIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQkNPTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDMwKSkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCQ09OX1JYSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCQ09OX1RYSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCQ09OX0FCRU0gKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCQ09OX0ZDREVURU4gICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCQ09OX0FCREVURU4gICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCQ09OX0FCU1RFTiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQkNPTl9BVVJFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCQ09OX0FCRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKlJlY2VpdmUgRklGTyBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FTQ19SWEZDT04gICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDA0MCkpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX1JYRkNPTl9SWEZJVEwgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX1JYRkNPTl9SWFRNRU4gICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX0FTQ19SWEZDT05fUlhGRkxVICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfUlhGQ09OX1JYRkVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqVHJhbnNtaXQgRklGTyBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FTQ19UWEZDT04gICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDA0NCkpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX1RYRkNPTl9UWEZJVEwgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX1RYRkNPTl9UWFRNRU4gICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX0FTQ19UWEZDT05fVFhGRkxVICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfVFhGQ09OX1RYRkVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqRklGTyBTdGF0dXMgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0ZTVEFUICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDQ4KSkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfRlNUQVRfVFhGRkwgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX0FTQ19GU1RBVF9SWEZGTCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipBU0MgV3JpdGUgSFcgTW9kaWZpZWQgQXV0b2JhdWQgQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkFCQ09OICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwNTQpKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQUJDT05fU0VUQUJFTiAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQUJDT05fQ0xSQUJFTiAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqQVNDIEF1dG9iYXVkIFN0YXR1cyBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCU1RBVCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwMzQpKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQUJTVEFUX0RFVFdBSVQgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCU1RBVF9TQ0NERVQgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQUJTVEFUX1NDU0RFVCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQlNUQVRfRkNDREVUICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCU1RBVF9GQ1NERVQgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqQVNDIFdyaXRlIEhXIE1vZGlmaWVkIEF1dG9iYXVkIFN0YXR1cyBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkFCU1RBVCAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDU4KSkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkFCU1RBVF9TRVRERVRXQUlUICAgICAgICAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJBQlNUQVRfQ0xSREVUV0FJVCAgICAgICAgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQUJTVEFUX1NFVFNDQ0RFVCAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJBQlNUQVRfQ0xSU0NDREVUICAgICAgICAgICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkFCU1RBVF9TRVRTQ1NERVQgICAgICAgICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQUJTVEFUX0NMUlNDU0RFVCAgICAgICAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJBQlNUQVRfU0VURkNDREVUICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkFCU1RBVF9DTFJGQ0NERVQgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQUJTVEFUX1NFVEZDU0RFVCAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJBQlNUQVRfQ0xSRkNTREVUICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkFTQyBDbG9jayBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ0xDICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19DTENfUk1DICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ0xDX0RJU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NMQ19ESVNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBNb2R1bGUgICAgICA6ICBETUEgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBJTkNBX0lQX0RNQSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QkYxMDgwMDApCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotLyoqKkRNQSBSWCBDaGFubmVsIDAgQ29tbWFuZCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4MDApKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhDQ1IwX0xCRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhDQ1IwX0hQRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjBfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhDQ1IwX09GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjBfSFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqRE1BIFJYIENoYW5uZWwgMSBDb21tYW5kIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhDQ1IxICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDgwNCkpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjFfTEJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjFfSFBFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMV9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjFfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMV9IUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipETUEgUmVjZWl2ZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhJU1IgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDgwOCkpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElTUl9SREVSUnggKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElTUl9DTURDUFR4ICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElTUl9FT1B4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElTUl9DUFR4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElTUl9ITER4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipETUEgUmVjZWl2ZSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYSU1SICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4MEMpKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhJTVJfUkRFUlJ4ICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhJTVJfQ01EQ1BUeCAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhJTVJfRU9QeCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhJTVJfQ1BUeCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhJTVJfSExEeCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqRE1BIEZpcnN0IFJlY2VpdmUgRGVzY3JpcHRvciBBZGRyLiBmb3IgUnggQ2hhbm5lbCAwCi0qKiovCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWEZSREEwICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RNQSsgMHgwODEwKSkKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYRlJEQTBfUlhGUkRBICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDI4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkRNQSBGaXJzdCBSZWNlaXZlIERlc2NyaXB0b3IgQWRkci4gZm9yIFJ4IENoYW5uZWwgMQotKioqLwotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhGUkRBMSAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDgxNCkpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWEZSREExX1JYRlJEQSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipETUEgUmVjZWl2ZSBDaGFubmVsIFBvbGxpbmcgVGltZSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYUE9MTCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4MTgpKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhQT0xMX0JTWjEgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMzApCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWFBPTExfQlNaMCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyOCkKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYUE9MTF9SWFBPTExUSU1FICh2YWx1ZSkgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipETUEgVFggQ2hhbm5lbCAwIENvbW1hbmQgUmVnaXN0ZXIgKFZvaWNlIFBvcnQpKioqLwotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IwICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDg4MCkpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjBfTEJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjBfSFBFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMF9IUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjBfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMF9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipETUEgVFggQ2hhbm5lbCAxIENvbW1hbmQgUmVnaXN0ZXIgKE1hbmdtdCBQb3J0KSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMSAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4ODQpKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IxX0xCRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IxX0hQRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjFfSFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IxX09GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjFfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqRE1BIFRYIENoYW5uZWwgMiBDb21tYW5kIFJlZ2lzdGVyIChTU0MgUG9ydCkqKiovCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjIgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RNQSsgMHgwODg4KSkKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMl9MQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMl9IUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMwKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IyX0hCRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI5KQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IyX0hSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMl9PRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IyX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkRNQSBGaXJzdCBSZWNlaXZlIERlc2NyaXB0b3IgQWRkci4gZm9yIFR4IENoYW5uZWwgMAotKioqLwotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhGUkRBMCAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDhBMCkpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWEZSREEwX1RYRlJEQSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipETUEgRmlyc3QgUmVjZWl2ZSBEZXNjcmlwdG9yIEFkZHIuIGZvciBUeCBDaGFubmVsIDEKLSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYRlJEQTEgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4QTQpKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhGUkRBMV9UWEZSREEgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMjgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqRE1BIEZpcnN0IFJlY2VpdmUgRGVzY3JpcHRvciBBZGRyLiBmb3IgVHggQ2hhbm5lbCAyCi0qKiovCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWEZSREEyICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RNQSsgMHgwOEE4KSkKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYRlJEQTJfVFhGUkRBICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDI4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkRNQSBUcmFuc21pdCBDaGFubmVsIEFyYml0cmF0aW9uIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhXR1QgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDhDMCkpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWFdHVF9UWDJQUiAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWFdHVF9UWDFQUkkgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWFdHVF9UWDBQUkkgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipETUEgVHJhbnNtaXQgQ2hhbm5lbCBQb2xsaW5nIFRpbWUqKiovCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWFBPTEwgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RNQSsgMHgwOEM0KSkKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYUE9MTF9CU1oyICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDMwKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhQT0xMX0JTWjEgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjgpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWFBPTExfQlNaMCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyNikKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYUE9MTF9UWFBPTExUSU1FICh2YWx1ZSkgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipETUEgVHJhbnNtaXQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4QzgpKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhJU1JfUkRFUlJ4ICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAxMikKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSX0hMRHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSX0NQVHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSX0VPUHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSX0NNRENQVHggKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkRNQSBUcmFuc21pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSU1SICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4Q0MpKQotI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhJTVJfUkRFUlJ4ICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAxMikKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSU1SX0hMRHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgOSkKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSU1SX0NQVHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSU1SX0VPUHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSU1SX0NNRENQVHggKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIE1vZHVsZSAgICAgIDogIERlYnVnIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElOQ0FfSVBfRGVidWcgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjEwNjAwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKioqTUNEIEJyZWFrIEJ1cyBTd2l0Y2ggUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX0JCUyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRGVidWcrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX0JCU19CVFAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE5KQotI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9CQlNfQlRQMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxOCkKLSNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfQkJTX0JTUDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX0JCU19CU1AwICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQotI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9CQlNfQlQ1RU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9CQlNfQlQ0RU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQotI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9CQlNfQlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTMpCi0jZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX0JCU19CVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKLSNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfQkJTX0JTNUVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9CQlNfQlM0RU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX0JCU19CUzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9CQlNfQlM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLQotLyoqKk1DRCBNdWx0aXBsZXhlciBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9NQ1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RlYnVnKyAweDAwMDgpKQotI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9NQ1JfTVVYNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9NQ1JfTVVYNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9NQ1JfTVVYMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgTW9kdWxlICAgICAgOiAgVFNGIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSU5DQV9JUF9UU0YgICAgICAgICAgICAgICAgICAgICAgICAgICgweEI4MDAwOTAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKipUU0YgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoMDAwMEgpKioqLwotI2RlZmluZSBJTkNBX0lQX1RTRl9UU0ZfQ09ORiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1RTRisgMHgwMDAwKSkKLSNkZWZpbmUgSU5DQV9JUF9UU0ZfVFNGX0NPTkZfUFdNRU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfVFNGX1RTRl9DT05GX0xFREVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX1RTRl9UU0ZfQ09ORl9LRVlFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKktleSBzY2FuIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKDAwMDRIKSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9UU0ZfS0VZX0NPTkYgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9UU0YrIDB4MDAwNCkpCi0jZGVmaW5lIElOQ0FfSVBfVFNGX0tFWV9DT05GX1NMICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqU2NhbiBSZWdpc3RlciBMaW5lIDAgYW5kIDEgKDAwMDhIKSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzAxICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfVFNGKyAweDAwMDgpKQotI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHMDFfUkVTMXggKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDEyKSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUcwMV9SRVMweCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMTMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqU2NhbiBSZWdpc3RlciBMaW5lIDIgYW5kIDMgKDAwMENIKSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzIzICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfVFNGKyAweDAwMEMpKQotI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHMjNfUkVTM3ggKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDEwKSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUcyM19SRVMyeCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMTEpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqU2NhbiBSZWdpc3RlciBMaW5lIDQsIDUgYW5kIDYgKDAwMTBIKSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzQ1NiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfVFNGKyAweDAwMTApKQotI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHNDU2X1JFUzZ4ICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA3KSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCi0jZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUc0NTZfUkVTNXggKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzQ1Nl9SRVM0eCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgOSkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipTY2FuIFJlZ2lzdGVyIExpbmUgNyB0byAxMiAoMDAxNEgpKioqLwotI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHN3RvMTIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9UU0YrIDB4MDAxNCkpCi0jZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUc3dG8xMl9SRVMxMnggICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKLSNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzd0bzEyX1JFUzExeCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCi0jZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUc3dG8xMl9SRVMxMHggKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDIwKQotI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHN3RvMTJfUkVTOXggKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzd0bzEyX1JFUzh4ICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA1KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzd0bzEyX1JFUzd4ICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkxFRE1VWCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICgwMDE4SCkqKiovCi0jZGVmaW5lIElOQ0FfSVBfVFNGX0xFRE1VWF9DT05GICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1RTRisgMHgwMDE4KSkKLSNkZWZpbmUgSU5DQV9JUF9UU0ZfTEVETVVYX0NPTkZfRVRMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNSkKLSNkZWZpbmUgSU5DQV9JUF9UU0ZfTEVETVVYX0NPTkZfRVNUQTEgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI0KQotI2RlZmluZSBJTkNBX0lQX1RTRl9MRURNVVhfQ09ORl9FRFBYMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIElOQ0FfSVBfVFNGX0xFRE1VWF9DT05GX0VBQ1QxICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgSU5DQV9JUF9UU0ZfTEVETVVYX0NPTkZfRVNQRDEgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBJTkNBX0lQX1RTRl9MRURNVVhfQ09ORl9FVEwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIwKQotI2RlZmluZSBJTkNBX0lQX1RTRl9MRURNVVhfQ09ORl9FU1RBMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTkpCi0jZGVmaW5lIElOQ0FfSVBfVFNGX0xFRE1VWF9DT05GX0VEUFgwICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxOCkKLSNkZWZpbmUgSU5DQV9JUF9UU0ZfTEVETVVYX0NPTkZfRUFDVDAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE3KQotI2RlZmluZSBJTkNBX0lQX1RTRl9MRURNVVhfQ09ORl9FU1BEMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfVFNGX0xFRE1VWF9DT05GX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfVFNGX0xFRE1VWF9DT05GX05DT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkxFRCBSZWdpc3RlciAoMDAxQ0gpKioqLwotI2RlZmluZSBJTkNBX0lQX1RTRl9MRURfUkVHICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9UU0YrIDB4MDAxQykpCi0jZGVmaW5lIElOQ0FfSVBfVFNGX0xFRF9SRUdfTHh5ICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDI0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKlB1bHNlIFdpZHRoIE1vZHVsYXRvciAxIGFuZCAyIFJlZ2lzdGVyICgwMDIwSCkqKiovCi0jZGVmaW5lIElOQ0FfSVBfVFNGX1BXTTEyICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1RTRisgMHgwMDIwKSkKLSNkZWZpbmUgSU5DQV9JUF9UU0ZfUFdNMTJfUFcyUFcxICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IE5hTikgLSAxKSAmICh2YWx1ZSkpIDw8IE5hTikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIE1vZHVsZSAgICAgIDogIFBvcnRzIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElOQ0FfSVBfUG9ydHMgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMEEwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKioqUG9ydCAxIERhdGEgT3V0cHV0IFJlZ2lzdGVyICgwMDIwSCkqKiovCi0jZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDFfT1VUICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfUG9ydHMrIDB4MDAyMCkpCi0jZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDFfT1VUX1AodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKlBvcnQgMiBEYXRhIE91dHB1dCBSZWdpc3RlciAoMDA0MEgpKioqLwotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX09VVCAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwNDApKQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX09VVF9QKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKipQb3J0IDEgRGF0YSBJbnB1dCBSZWdpc3RlciAoMDAyNEgpKioqLwotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX0lOICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMjQpKQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX0lOX1AodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKlBvcnQgMiBEYXRhIElucHV0IFJlZ2lzdGVyICgwMDQ0SCkqKiovCi0jZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfSU4gICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfUG9ydHMrIDB4MDA0NCkpCi0jZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfSU5fUCh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqUG9ydCAxIERpcmVjdGlvbiBSZWdpc3RlciAoMDAyOEgpKioqLwotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX0RJUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMjgpKQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX0RJUl9Qb3J0MVAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLSNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMV9ESVJfUG9ydDJQbiAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0KLS8qKipQb3J0IDIgRGlyZWN0aW9uIFJlZ2lzdGVyICgwMDQ4SCkqKiovCi0jZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfRElSICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfUG9ydHMrIDB4MDA0OCkpCi0jZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfRElSX1BvcnQxUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX0RJUl9Qb3J0MlBuICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKlBvcnQgMCBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIDAgKDAwMEMgSCkKLSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9BTFRTRUwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDBDKSkKLSNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9BTFRTRUxfUG9ydDBQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKipQb3J0IDEgQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciAwICgwMDJDIEgpCi0qKiovCi0jZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDFfQUxUU0VMICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfUG9ydHMrIDB4MDAyQykpCi0jZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDFfQUxUU0VMX1BvcnQxUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX0FMVFNFTF9Qb3J0MlAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKlBvcnQgMiBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIDAgKDAwNEMgSCkKLSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9BTFRTRUwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDRDKSkKLSNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9BTFRTRUxfUG9ydDFQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQotCi0jZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfQUxUU0VMX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqUG9ydCAwIElucHV0IFNjaG1pdHQtVHJpZ2dlciBPZmYgUmVnaXN0ZXIgKDAwMTAgSCkKLSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9TVE9GRiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMTApKQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AwX1NUT0ZGX1BvcnQwUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqUG9ydCAxIElucHV0IFNjaG1pdHQtVHJpZ2dlciBPZmYgUmVnaXN0ZXIgKDAwMzAgSCkKLSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMV9TVE9GRiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMzApKQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX1NUT0ZGX1BvcnQxUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX1NUT0ZGX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqUG9ydCAyIElucHV0IFNjaG1pdHQtVHJpZ2dlciBPZmYgUmVnaXN0ZXIgKDAwNTAgSCkKLSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9TVE9GRiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwNTApKQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX1NUT0ZGX1BvcnQxUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX1NUT0ZGX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqUG9ydCAyIE9wZW4gRHJhaW4gQ29udHJvbCBSZWdpc3RlciAoMDA1NEgpKioqLwotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX09EICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwNTQpKQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX09EX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqUG9ydCAwIFB1bGwgVXAgRGV2aWNlIEVuYWJsZSBSZWdpc3RlciAoMDAxOCBIKSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9QVURFTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMTgpKQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AwX1BVREVOX1BvcnQwUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqUG9ydCAyIFB1bGwgVXAgRGV2aWNlIEVuYWJsZSBSZWdpc3RlciAoMDA1OCBIKSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9QVURFTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwNTgpKQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX1BVREVOX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX1BVREVOX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqUG9ydCAwIFB1bGwgVXAvUHVsbCBEb3duIFNlbGVjdCBSZWdpc3RlciAoMDAxQyBIKSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9QVURTRUwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDFDKSkKLSNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9QVURTRUxfUG9ydDBQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKipQb3J0IDIgUHVsbCBVcC9QdWxsIERvd24gU2VsZWN0IFJlZ2lzdGVyICgwMDVDIEgpKioqLwotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX1BVRFNFTCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwNUMpKQotI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX1BVRFNFTF9Qb3J0MlAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLSNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9QVURTRUxfUG9ydDJQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBNb2R1bGUgICAgICA6ICBERVMvM0RFUyByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElOQ0FfSVBfREVTXzNERVMgICAgICAgICAgICAgICAgICAgICgweEI4MDAwODAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKipERVMgSW5wdXQgRGF0YSBIaWdoIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19JSFIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RFU18zREVTKyAweDAwMDApKQotI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19JSFJfSUgodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKkRFUyBJbnB1dCBEYXRhIExvdyBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSUxSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDA0KSkKLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSUxSX0lMKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKipERVMgS2V5ICMxIEhpZ2ggUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0sxSFIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDA4KSkKLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSzFIUl9LMUgodmFsdWUpICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqREVTIEtleSAjMSBMb3cgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0sxTFIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDBDKSkKLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSzFMUl9LMUwodmFsdWUpICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqREVTIEtleSAjMiBIaWdoIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19LMkhSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfREVTXzNERVMrIDB4MDAxMCkpCi0jZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0sySFJfSzJIKHZhbHVlKSAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKkRFUyBLZXkgIzIgTG93IFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19LMkxSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfREVTXzNERVMrIDB4MDAxNCkpCi0jZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0syTFJfSzJMKHZhbHVlKSAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKkRFUyBLZXkgIzMgSGlnaCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSzNIUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RFU18zREVTKyAweDAwMTgpKQotI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19LM0hSX0szSCh2YWx1ZSkgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKipERVMgS2V5ICMzIExvdyBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSzNMUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RFU18zREVTKyAweDAwMUMpKQotI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19LM0xSX0szTCh2YWx1ZSkgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKipERVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yIEhpZ2ggUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0lWSFIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDIwKSkKLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSVZIUl9JVkgodmFsdWUpICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqREVTIEluaXRpYWxpemF0aW9uIFZlY3RvciBMb3cgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0lWTFIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDI0KSkKLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSVZMUl9JVkwodmFsdWUpICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqREVTIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0NPTlRST0xSICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfREVTXzNERVMrIDB4MDAyOCkpCi0jZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0NPTlRST0xSX0tSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19DT05UUk9MUl9EQVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfQ09OVFJPTFJfRih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19DT05UUk9MUl9PKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotCi0jZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0NPTlRST0xSX0dPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfQ09OVFJPTFJfU1RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfQ09OVFJPTFJfSUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfQ09OVFJPTFJfQlVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfQ09OVFJPTFJfU00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19DT05UUk9MUl9FX0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19DT05UUk9MUl9NKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKipERVMgT3V0cHV0IERhdGEgSGlnaCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfT0hSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDJDKSkKLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfT0hSX09IKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKipERVMgT3V0cHV0IERhdGEgTG93IFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19PTFIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RFU18zREVTKyAweDAwMzApKQotI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19PTFJfT0wodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIE1vZHVsZSAgICAgIDogIEFFUyByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElOQ0FfSVBfQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDg4MCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKioqQUVTIElucHV0IERhdGEgMyBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lEM1IgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19JRDNSX0kodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKkFFUyBJbnB1dCBEYXRhIDIgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19JRDJSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSUQyUl9JKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKipBRVMgSW5wdXQgRGF0YSAxIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSUQxUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lEMVJfSSh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqQUVTIElucHV0IERhdGEgMCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lEMFIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19JRDBSX0kodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKkFFUyBPdXRwdXQgRGF0YSAzIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfT0QzUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX09EM1JfTyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqQUVTIE91dHB1dCBEYXRhIDIgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19PRDJSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfT0QyUl9PKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKipBRVMgT3V0cHV0IERhdGEgMSBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX09EMVIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19PRDFSX08odmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKkFFUyBPdXRwdXQgRGF0YSAwIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfT0QwUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX09EMFJfTyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqQUVTIEtleSA3IFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzdSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LN1JfSyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqQUVTIEtleSA2IFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzZSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LNlJfSyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqQUVTIEtleSA1IFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzVSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LNVJfSyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqQUVTIEtleSA0IFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzRSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LNFJfSyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqQUVTIEtleSAzIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzNSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LM1JfSyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqQUVTIEtleSAyIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzJSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LMlJfSyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqQUVTIEtleSAxIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzFSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LMVJfSyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqQUVTIEtleSAwIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzBSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LMFJfSyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqQUVTIEluaXRpYWxpemF0aW9uIFZlY3RvciAzIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSVYzUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lWM1JfSVYodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKkFFUyBJbml0aWFsaXphdGlvbiBWZWN0b3IgMiBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lWMlIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19JVjJSX0lWKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKipBRVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yIDEgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19JVjFSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSVYxUl9JVih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqQUVTIEluaXRpYWxpemF0aW9uIFZlY3RvciAwIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSVYwUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lWMFJfSVYgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMzIpIC0gMSkgJih2YWx1ZSkpIDw8IDApCi0KLS8qKipBRVMgQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0NPTlRST0xSICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfS1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19DT05UUk9MUl9EQVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0NPTlRST0xSX1BOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfRih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfTyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfR08gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfU1RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0NPTlRST0xSX0lFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19DT05UUk9MUl9CVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfU00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfRV9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0NPTlRST0xSX0tWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0NPTlRST0xSX0sodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIE1vZHVsZSAgICAgIDogIEmyQyByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElOQ0FfSVBfSUlDICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDcwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKioqSbJDIFBvcnQgSW5wdXQgU2VsZWN0IFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfUElTRUwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JSUMrIDB4MDAwNCkpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19QSVNFTF9TREFJUyh2YWx1ZSkgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfUElTRUxfU0NMSVModmFsdWUpICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKkmyQyBDbG9jayBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQ0xDICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JSUMrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19DTENfUk1DICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQ0xDX0RJU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0NMQ19ESVNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipJskMgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMCAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lJQysgMHgwMDEwKSkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX1dNRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMF9DSSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjYpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMF9TVFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNSkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX0lHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI0KQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfVFJYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX0FDS0RJUyAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfQlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjApCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMF9NT0QgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDE4KQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfUlNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMF9NMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX1JNRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMF9DTyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX0lSUUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX0lSUVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX0lSUUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX0JCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX0xSQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMF9TTEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfQURSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkmyQyBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMTApKQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzFfUk0gKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDI0KQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzFfVFJYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMV9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX0FDS0RJUyAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzFfQlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjApCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMV9NT0QgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDE4KQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzFfUlNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMV9NMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX1JNRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMV9DTyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX0lSUUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX0lSUVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX0lSUUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX0JCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX0xSQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMV9TTEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzFfQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzFfQURSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKkmyQyBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMTApKQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfV01FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yX0NJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyNikKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yX1NUUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI1KQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfSUdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjQpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9UUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMykKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIyKQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfQUNLRElTICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9CVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMCkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yX01PRCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMTgpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9SU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNykKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yX00xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfV00gKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9JUlFFICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9JUlFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9JUlFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9CQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9MUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfU0xBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yX0FMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yX0FEUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKipJskMgV3JpdGUgSGFyZHdhcmUgTW9kaWZpZWQgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIKLSoqKi8KLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1dIQlNZU0NPTiAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lJQysgMHgwMDIwKSkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1dIQlNZU0NPTl9DTFJXTUVOICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX1NFVFdNRU4gICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fU0VUU1RQICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjYpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fQ0xSU1RQICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjUpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fU0VUVFJYICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjQpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fQ0xSVFJYICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fU0VUQUNLRElTICAgICAgICAgICAgICAgICAgKDEgPDwgMjIpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fQ0xSQUNLRElTICAgICAgICAgICAgICAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fU0VUQlVNICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjApCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fQ0xSQlVNICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTkpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fU0VUUlNDICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fQ0xSUlNDICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fU0VUUk1FTiAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1dIQlNZU0NPTl9DTFJSTUVOICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX1NFVElSUUUgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fU0VUSVJRUCAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX1NFVElSUUQgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1dIQlNZU0NPTl9DTFJJUlFFICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fQ0xSSVJRUCAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX0NMUklSUUQgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1dIQlNZU0NPTl9TRVRBTCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1dIQlNZU0NPTl9DTFJBTCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLQotLyoqKkmyQyBCdXMgQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8wICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMTQpKQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQlVTQ09OXzBfQlJQTU9EICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMF9QUkVESVYgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI5KQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQlVTQ09OXzBfSUNBOV8wICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDEwKSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMF9CUlAgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMF9TQ0xFTih2YWx1ZSkgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQlVTQ09OXzBfU0RBRU4odmFsdWUpICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKkmyQyBCdXMgQ29udHJvbCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8xICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMTQpKQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQlVTQ09OXzFfQlJQTU9EICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMV9QUkVESVYgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI5KQotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQlVTQ09OXzFfSUNBN18xICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDcpIC0gMSkgJiAodmFsdWUpKSA8PCAxNykKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8xX0JSUCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8xX1NDTEVOKHZhbHVlKSAgICAgICAgICAgICgxIDw8IHZhbHVlKQotCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMV9TREFFTih2YWx1ZSkgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqSbJDIFJlY2VpdmUgVHJhbnNtaXQgQnVmZmVyKioqLwotI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfUlRCICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JSUMrIDB4MDAxOCkpCi0jZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19SVEJfUlRCKHZhbHVlKSAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIE1vZHVsZSAgICAgIDogIEZCIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSU5DQV9JUF9GQiAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QkY4ODAwMDApCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotLyoqKkZCIEFjY2VzcyBFcnJvciBDYXVzZSBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9GQl9GQl9FUlJDQVVTRSAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9GQisgMHgwMTAwKSkKLSNkZWZpbmUgSU5DQV9JUF9GQl9GQl9FUlJDQVVTRV9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKLSNkZWZpbmUgSU5DQV9JUF9GQl9GQl9FUlJDQVVTRV9QT1JUICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQotI2RlZmluZSBJTkNBX0lQX0ZCX0ZCX0VSUkNBVVNFX0NBVVNFICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkZCIEFjY2VzcyBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0ZCX0ZCX0VSUkFERFIgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0ZCKyAweDAxMDgpKQotI2RlZmluZSBJTkNBX0lQX0ZCX0ZCX0VSUkFERFJfQUREUgotCi0vKioqRkIgQ29uZmlndXJhdGlvbiBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9GQl9GQl9DRkcgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9GQisgMHgwODAwKSkKLSNkZWZpbmUgSU5DQV9JUF9GQl9GQl9DRkdfU1ZNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIE1vZHVsZSAgICAgIDogIFNSQU0gcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElOQ0FfSVBfU1JBTSAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjk4MDAwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKioqU1JBTSBTaXplIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX1NSQU1fU1JBTV9TSVpFICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1JBTSsgMHgwODAwKSkKLSNkZWZpbmUgSU5DQV9JUF9TUkFNX1NSQU1fU0laRV9TSVpFICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMjMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgTW9kdWxlICAgICAgOiAgQklVIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSU5DQV9JUF9CSVUgICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGQTgwMDAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKipCSVUgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfQklVX0JJVV9JRCAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0JJVSsgMHgwMDAwKSkKLSNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0lEX0FSQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCi0jZGVmaW5lIElOQ0FfSVBfQklVX0JJVV9JRF9JRCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKLSNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0lEX1JFViAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkJJVSBBY2Nlc3MgRXJyb3IgQ2F1c2UgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfQklVX0JJVV9FUlJDQVVTRSAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0JJVSsgMHgwMTAwKSkKLSNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0VSUkNBVVNFX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBJTkNBX0lQX0JJVV9CSVVfRVJSQ0FVU0VfUE9SVCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0VSUkNBVVNFX0NBVVNFICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLQotLyoqKkJJVSBBY2Nlc3MgRXJyb3IgQWRkcmVzcyBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0VSUkFERFIgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQklVKyAweDAxMDgpKQotI2RlZmluZSBJTkNBX0lQX0JJVV9CSVVfRVJSQUREUl9BRERSCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBNb2R1bGUgICAgICA6ICBJQ1UgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBJTkNBX0lQX0lDVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QkYxMDEwMDApCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotLyoqKklNMCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0lDVV9JTTBfSVNSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MDAwMCkpCi0jZGVmaW5lIElOQ0FfSVBfSUNVX0lNMF9JU1JfSVIodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKklNMSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0lDVV9JTTFfSVNSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MDIwMCkpCi0jZGVmaW5lIElOQ0FfSVBfSUNVX0lNMV9JU1JfSVIodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKklNMiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0lDVV9JTTJfSVNSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MDQwMCkpCi0jZGVmaW5lIElOQ0FfSVBfSUNVX0lNMl9JU1JfSVIodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKklNMCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0lDVV9JTTBfSUVSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MDAwOCkpCi0jZGVmaW5lIElOQ0FfSVBfSUNVX0lNMF9JRVJfSVIodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKklNMSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0lDVV9JTTFfSUVSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MDIwOCkpCi0jZGVmaW5lIElOQ0FfSVBfSUNVX0lNMV9JRVJfSVIodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKklNMiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0lDVV9JTTJfSUVSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MDQwOCkpCi0jZGVmaW5lIElOQ0FfSVBfSUNVX0lNMl9JRVJfSVIodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKklNMCBJbnRlcnJ1cHQgT3V0cHV0IFN0YXR1cyBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0wX0lPU1IgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MDAxMCkpCi0jZGVmaW5lIElOQ0FfSVBfSUNVX0lNMF9JT1NSX0lSKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKipJTTEgSW50ZXJydXB0IE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfSUNVX0lNMV9JT1NSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUNVKyAweDAyMTApKQotI2RlZmluZSBJTkNBX0lQX0lDVV9JTTFfSU9TUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqSU0yIEludGVycnVwdCBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0lDVV9JTTJfSU9TUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwNDEwKSkKLSNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0yX0lPU1JfSVIodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKklNMCBJbnRlcnJ1cHQgUmVxdWVzdCBTZXQgUmVnaXN0ZXIqKiovCi0jZGVmaW5lIElOQ0FfSVBfSUNVX0lNMF9JUlNSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUNVKyAweDAwMTgpKQotI2RlZmluZSBJTkNBX0lQX0lDVV9JTTBfSVJTUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLQotCi0vKioqSU0xIEludGVycnVwdCBSZXF1ZXN0IFNldCBSZWdpc3RlcioqKi8KLSNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0xX0lSU1IgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MDIxOCkpCi0jZGVmaW5lIElOQ0FfSVBfSUNVX0lNMV9JUlNSX0lSKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotCi0KLS8qKipJTTIgSW50ZXJydXB0IFJlcXVlc3QgU2V0IFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0lDVV9JTTJfSVJTUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwNDE4KSkKLSNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0yX0lSU1JfSVIodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0KLQotLyoqKkV4dGVybmFsIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyKioqLwotI2RlZmluZSBJTkNBX0lQX0lDVV9JQ1VfRUlDUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwQjAwKSkKLSNkZWZpbmUgSU5DQV9JUF9JQ1VfSUNVX0VJQ1JfRUlJNSAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAyMCkKLSNkZWZpbmUgSU5DQV9JUF9JQ1VfSUNVX0VJQ1JfRUlJNCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9JQ1VfSUNVX0VJQ1JfRUlJMyAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAxMikKLSNkZWZpbmUgSU5DQV9JUF9JQ1VfSUNVX0VJQ1JfRUlJMiAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQotI2RlZmluZSBJTkNBX0lQX0lDVV9JQ1VfRUlDUl9FSUkxICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCi0jZGVmaW5lIElOQ0FfSVBfSUNVX0lDVV9FSUNSX0VJSTAgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91LWJvb3QtbWlwcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3UtYm9vdC1taXBzLmgKaW5kZXggOWYzY2NlOS4uYTViMmZjMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3UtYm9vdC1taXBzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3UtYm9vdC1taXBzLmgKQEAgLTIxLDUgKzIxLDMgQEAKIAlleHRlcm4gY2hhciBfX2ltYWdlX2NvcHlfZW5kW107CiAJcmV0dXJuICh1bnNpZ25lZCBsb25nKSAmX19pbWFnZV9jb3B5X2VuZDsKIH0KLQotZXh0ZXJuIGludCBpbmNhaXBfc2V0X2NwdWNsayh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91LWJvb3QuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91LWJvb3QuaAppbmRleCA5ODVkN2Q4Li4wZWIxNzBkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdS1ib290LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3UtYm9vdC5oCkBAIC0xNSw2ICsxNSwxMyBAQAogI2lmbmRlZiBfVV9CT09UX0hfCiAjZGVmaW5lIF9VX0JPT1RfSF8JMQogCisjaWZkZWYgQ09ORklHX1NZU19HRU5FUklDX0JPQVJECisKKy8qIFVzZSB0aGUgZ2VuZXJpYyBib2FyZCB3aGljaCByZXF1aXJlcyBhIHVuaWZpZWQgYmRfaW5mbyAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3UtYm9vdC5oPgorCisjZWxzZSAvKiAhQ09ORklHX1NZU19HRU5FUklDX0JPQVJEICovCisKIHR5cGVkZWYgc3RydWN0IGJkX2luZm8gewogCXVuc2lnbmVkIGludAliaV9iYXVkcmF0ZTsJLyogc2VyaWFsIGNvbnNvbGUgYmF1ZHJhdGUgKi8KIAl1bnNpZ25lZCBsb25nCWJpX2FyY2hfbnVtYmVyOwkvKiB1bmlxdWUgaWQgZm9yIHRoaXMgYm9hcmQgKi8KQEAgLTI2LDYgKzMzLDggQEAKIAl1bnNpZ25lZCBsb25nCWJpX2ZsYXNob2Zmc2V0OwkvKiByZXNlcnZlZCBhcmVhIGZvciBzdGFydHVwIG1vbml0b3IgKi8KIH0gYmRfdDsKIAorI2VuZGlmIC8qICFDT05GSUdfU1lTX0dFTkVSSUNfQk9BUkQgKi8KKwogLyogRm9yIGltYWdlLmg6aW1hZ2VfY2hlY2tfdGFyZ2V0X2FyY2goKSAqLwogI2RlZmluZSBJSF9BUkNIX0RFRkFVTFQgSUhfQVJDSF9NSVBTCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUgYi9hcmNoL21pcHMvbGliL01ha2VmaWxlCmluZGV4IGZhYmViODMuLmU0ODNlODYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2xpYi9NYWtlZmlsZQpAQCAtNSw3ICs1LDExIEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwogIwogCitpZm5kZWYgQ09ORklHX1NZU19HRU5FUklDX0JPQVJECiBvYmoteQkrPSBib2FyZC5vCitlbmRpZgorb2JqLXkJKz0gaW8ubworCiBvYmotJChDT05GSUdfQ01EX0JPT1RNKSArPSBib290bS5vCiAKIGxpYi0kKENPTkZJR19VU0VfUFJJVkFURV9MSUJHQ0MpICs9IGFzaGxkaTMubyBhc2hyZGkzLm8gbHNocmRpMy5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGliL2JvYXJkLmMgYi9hcmNoL21pcHMvbGliL2JvYXJkLmMKaW5kZXggOWU2YmExNS4uMzIwMGQ4NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xpYi9ib2FyZC5jCisrKyBiL2FyY2gvbWlwcy9saWIvYm9hcmQuYwpAQCAtMjcsMTIgKzI3LDYgQEAKIAogc3RhdGljIGNoYXIgKmZhaWxlZCA9ICIqKiogZmFpbGVkICoqKlxuIjsKIAotLyoKLSAqIG1pcHNfaW9fcG9ydF9iYXNlIGlzIHRoZSBiZWdpbiBvZiB0aGUgYWRkcmVzcyBzcGFjZSB0byB3aGljaCB4ODYgc3R5bGUKLSAqIEkvTyBwb3J0cyBhcmUgbWFwcGVkLgotICovCi1jb25zdCB1bnNpZ25lZCBsb25nIG1pcHNfaW9fcG9ydF9iYXNlID0gLTE7Ci0KIGludCBfX2JvYXJkX2Vhcmx5X2luaXRfZih2b2lkKQogewogCS8qCkBAIC0xMDksOSArMTAzLDYgQEAKIAlib2FyZF9lYXJseV9pbml0X2YsCiAJdGltZXJfaW5pdCwKIAllbnZfaW5pdCwJCS8qIGluaXRpYWxpemUgZW52aXJvbm1lbnQgKi8KLSNpZmRlZiBDT05GSUdfSU5DQV9JUAotCWluY2FpcF9zZXRfY3B1Y2xrLAkvKiBzZXQgY3B1IGNsb2NrIGFjY29yZGluZyB0byBlbnYuIHZhcmlhYmxlICovCi0jZW5kaWYKIAlpbml0X2JhdWRyYXRlLAkJLyogaW5pdGlhbGl6ZSBiYXVkcmF0ZSBzZXR0aW5ncyAqLwogCXNlcmlhbF9pbml0LAkJLyogc2VyaWFsIGNvbW11bmljYXRpb25zIHNldHVwICovCiAJY29uc29sZV9pbml0X2YsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGliL2lvLmMgYi9hcmNoL21pcHMvbGliL2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkNGEwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9saWIvaW8uYwpAQCAtMCwwICsxLDEyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKworICovCisKKy8qCisgKiBtaXBzX2lvX3BvcnRfYmFzZSBpcyB0aGUgYmVnaW4gb2YgdGhlIGFkZHJlc3Mgc3BhY2UgdG8gd2hpY2ggeDg2IHN0eWxlCisgKiBJL08gcG9ydHMgYXJlIG1hcHBlZC4KKyAqLworY29uc3QgdW5zaWduZWQgbG9uZyBtaXBzX2lvX3BvcnRfYmFzZSA9IC0xOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjR4L2NwdV9pbml0LmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgyNHgvY3B1X2luaXQuYwppbmRleCA0N2FjMThlLi42OGQ4OGU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgyNHgvY3B1X2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgyNHgvY3B1X2luaXQuYwpAQCAtNDYsOCArNDYsNiBAQAogdm9pZAogY3B1X2luaXRfZiAodm9pZCkKIHsKLS8qIE1PVVNTRSBib2FyZCBpcyBpbml0aWFsaXplZCBpbiBhc20gKi8KLSNpZiAhZGVmaW5lZChDT05GSUdfTU9VU1NFKQogICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdmFsOwogICAgIENPTkZJR19XUklURV9IQUxGV09SRChQQ0lDUiwgMHgwNik7IC8qIEJ1cyBNYXN0ZXIsIHJlc3BvbmQgdG8gUENJIG1lbW9yeSBzcGFjZSBhY2Vzc2VzKi8KIC8qICAgIENPTkZJR19XUklURV9IQUxGV09SRChQQ0lTUiwgMHhmZmZmKTsgKi8gLypyZXNldCBQQ0lTUiovCkBAIC0zMDIsOTggKzMwMCwxMiBAQAogCUNPTkZJR19SRUFEX1dPUkQoTUNDUjEsIHZhbCk7CiAJQ09ORklHX1dSSVRFX1dPUkQoTUNDUjEsIHZhbCB8IE1DQ1IxX01FTUdPKTsgLyogc2V0IG1lbW9yeSBhY2Nlc3MgZ29pbmcgKi8KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZWllaW8iKTsKLQotI2VuZGlmIC8qICFDT05GSUdfTU9VU1NFICovCiB9CiAKLQotI2lmZGVmIENPTkZJR19NT1VTU0UKLSNpZmRlZiBJTkNMVURFX01QQzEwN19SRVBPUlQKLXN0cnVjdCBNUEMxMDdfcyB7Ci0JdW5zaWduZWQgaW50IGlvYmFzZTsKLQljaGFyIGRlc2NbMTIwXTsKLX0gTVBDMTA3UmVnc1tdID0gewotCXsgQk1DX0JBU0UgKyAgMHgwMCwgIk1QQzEwNyBWZW5kb3IvRGV2aWNlIElEIgkJfSwKLQl7IEJNQ19CQVNFICsgIDB4MDQsICJNUEMxMDcgUENJIENvbW1hbmQvU3RhdHVzIFJlZ2lzdGVyIiB9LAotCXsgQk1DX0JBU0UgKyAgMHgwOCwgIk1QQzEwNyBSZXZpc2lvbiIJCQl9LAotCXsgQk1DX0JBU0UgKyAgMHgwQywgIk1QQzEwNyBDYWNoZSBMaW5lIFNpemUiCQl9LAotCXsgQk1DX0JBU0UgKyAgMHgxMCwgIk1QQzEwNyBMTUJBUiIJCQl9LAotCXsgQk1DX0JBU0UgKyAgMHgxNCwgIk1QQzgyNHggUENTUiIJCQl9LAotCXsgQk1DX0JBU0UgKyAgMHhBOCwgIk1QQzgyNHggUElDUjEiCQkJfSwKLQl7IEJNQ19CQVNFICsgIDB4QUMsICJNUEM4MjR4IFBJQ1IyIgkJCX0sCi0JeyBCTUNfQkFTRSArICAweDQ2LCAiTVBDODI0eCBQQUNSIgkJCX0sCi0JeyBCTUNfQkFTRSArIDB4MzEwLCAiTVBDODI0eCBJVFdSIgkJCX0sCi0JeyBCTUNfQkFTRSArIDB4MzAwLCAiTVBDODI0eCBPTUJBUiIJCQl9LAotCXsgQk1DX0JBU0UgKyAweDMwOCwgIk1QQzgyNHggT1RXUiIJCQl9LAotCXsgQk1DX0JBU0UgKyAgMHgxNCwgIk1QQzEwNyBQZXJpcGhlcmFsIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciIgfSwKLQl7IEJNQ19CQVNFICsgMHg3OCwgIk1QQzEwNyBFVU1CQVIiCQkJfSwKLQl7IEJNQ19CQVNFICsgMHhDMCwgIk1QQzEwNyBQcm9jZXNzb3IgQnVzIEVycm9yIFN0YXR1cyIJfSwKLQl7IEJNQ19CQVNFICsgMHhDNCwgIk1QQzEwNyBQQ0kgQnVzIEVycm9yIFN0YXR1cyIJfSwKLQl7IEJNQ19CQVNFICsgMHhDOCwgIk1QQzEwNyBQcm9jZXNzb3IvUENJIEVycm9yIEFkZHJlc3MiCX0sCi0JeyBCTUNfQkFTRSArIDB4RTAsICJNUEMxMDcgQU1CT1IgUmVnaXN0ZXIiCQl9LAotCXsgQk1DX0JBU0UgKyAweEYwLCAiTVBDMTA3IE1DQ1IxIFJlZ2lzdGVyIgkJfSwKLQl7IEJNQ19CQVNFICsgMHhGNCwgIk1QQzEwNyBNQ0NSMiBSZWdpc3RlciIJCX0sCi0JeyBCTUNfQkFTRSArIDB4RjgsICJNUEMxMDcgTUNDUjMgUmVnaXN0ZXIiCQl9LAotCXsgQk1DX0JBU0UgKyAweEZDLCAiTVBDMTA3IE1DQ1I0IFJlZ2lzdGVyIgkJfSwKLX07Ci0jZGVmaW5lIE5fTVBDMTA3X1JlZ3MJKHNpemVvZihNUEMxMDdSZWdzKS9zaXplb2YoTVBDMTA3UmVnc1swXSkpCi0jZW5kaWYgLyogSU5DTFVERV9NUEMxMDdfUkVQT1JUICovCi0jZW5kaWYgLyogQ09ORklHX01PVVNTRSAqLwotCiAvKgogICogaW5pdGlhbGl6ZSBoaWdoZXIgbGV2ZWwgcGFydHMgb2YgQ1BVIGxpa2UgdGltZSBiYXNlIGFuZCB0aW1lcnMKICAqLwogaW50IGNwdV9pbml0X3IgKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX01PVVNTRQotI2lmZGVmIElOQ0xVREVfTVBDMTA3X1JFUE9SVAotCXVuc2lnbmVkIGludCB0bXAgPSAwLCBpOwotI2VuZGlmCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSBFVU1CQkFSIChFbWJlZGRlZCBVdGlsIE1lbSBCbG9jayBCYXNlIEFkZHIgUmVnKS4KLQkgKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWZvcmUgdGhlIEVQSUMsIERNQSBjdGxyLCBJMkMgY3RsciwgZXRjLiBjYW4KLQkgKiBiZSBhY2Nlc3NlZC4KLQkgKi8KLQotI2lmZGVmIENPTkZJR19NUEM4MjQwCQkJLyogb25seSBvbiBNUEM4MjQwICovCi0JbXBjODI0eF9tcGMxMDdfc2V0cmVnIChFVU1CQkFSLCBFVU1CQkFSX1ZBTCk7Ci0JLyogTU9UL1NQUzogSXNzdWUgIzEwMDAyLCBQQ0kgKEZEIEFsaWFzIGVuYWJsZSkgKi8KLQltcGM4MjR4X21wYzEwN19zZXRyZWcgKEFNQk9SLCAweDAwMDAwMEMwKTsKLSNlbmRpZgotCi0KLSNpZmRlZiBJTkNMVURFX01QQzEwN19SRVBPUlQKLQkvKiBDaGVjayBNUEM4MjR4IFBDSSBEZXZpY2UgYW5kIFZlbmRvciBJRCAqLwotCXdoaWxlICgodG1wID0gbXBjODI0eF9tcGMxMDdfZ2V0cmVnIChCTUNfQkFTRSkpICE9IDB4MzEwNTcpIHsKLQkJcHJpbnRmICgiCU1QQzEwNzogb2Zmc2V0PTB4JXgsIHZhbCA9IDB4JXhcbiIsCi0JCQlCTUNfQkFTRSwKLQkJCXRtcCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IE5fTVBDMTA3X1JlZ3M7IGkrKykgewotCQlwcmludGYgKCIJMHgleC8lcyA9IDB4JXhcbiIsCi0JCQlNUEMxMDdSZWdzW2ldLmlvYmFzZSwKLQkJCU1QQzEwN1JlZ3NbaV0uZGVzYywKLQkJCW1wYzgyNHhfbXBjMTA3X2dldHJlZyAoTVBDMTA3UmVnc1tpXS5pb2Jhc2UpKTsKLQl9Ci0KLQlwcmludGYgKCJJQkFUMEwgPSAweCUwOFhcbiIsIG1mc3ByIChJQkFUMEwpKTsKLQlwcmludGYgKCJJQkFUMFUgPSAweCUwOFhcbiIsIG1mc3ByIChJQkFUMFUpKTsKLQlwcmludGYgKCJJQkFUMUwgPSAweCUwOFhcbiIsIG1mc3ByIChJQkFUMUwpKTsKLQlwcmludGYgKCJJQkFUMVUgPSAweCUwOFhcbiIsIG1mc3ByIChJQkFUMVUpKTsKLQlwcmludGYgKCJJQkFUMkwgPSAweCUwOFhcbiIsIG1mc3ByIChJQkFUMkwpKTsKLQlwcmludGYgKCJJQkFUMlUgPSAweCUwOFhcbiIsIG1mc3ByIChJQkFUMlUpKTsKLQlwcmludGYgKCJJQkFUM0wgPSAweCUwOFhcbiIsIG1mc3ByIChJQkFUM0wpKTsKLQlwcmludGYgKCJJQkFUM1UgPSAweCUwOFhcbiIsIG1mc3ByIChJQkFUM1UpKTsKLQlwcmludGYgKCJEQkFUMEwgPSAweCUwOFhcbiIsIG1mc3ByIChEQkFUMEwpKTsKLQlwcmludGYgKCJEQkFUMFUgPSAweCUwOFhcbiIsIG1mc3ByIChEQkFUMFUpKTsKLQlwcmludGYgKCJEQkFUMUwgPSAweCUwOFhcbiIsIG1mc3ByIChEQkFUMUwpKTsKLQlwcmludGYgKCJEQkFUMVUgPSAweCUwOFhcbiIsIG1mc3ByIChEQkFUMVUpKTsKLQlwcmludGYgKCJEQkFUMkwgPSAweCUwOFhcbiIsIG1mc3ByIChEQkFUMkwpKTsKLQlwcmludGYgKCJEQkFUMlUgPSAweCUwOFhcbiIsIG1mc3ByIChEQkFUMlUpKTsKLQlwcmludGYgKCJEQkFUM0wgPSAweCUwOFhcbiIsIG1mc3ByIChEQkFUM0wpKTsKLQlwcmludGYgKCJEQkFUM1UgPSAweCUwOFhcbiIsIG1mc3ByIChEQkFUM1UpKTsKLSNlbmRpZiAvKiBJTkNMVURFX01QQzEwN19SRVBPUlQgKi8KLSNlbmRpZiAvKiBDT05GSUdfTU9VU1NFICovCiAJcmV0dXJuICgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC9jcHUuYyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC9jcHUuYwppbmRleCBlMjc1ZmNlLi5lNDE5ODhkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvY3B1LmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L2NwdS5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8dHNlYy5oPgogI2luY2x1ZGUgPG5ldGRldi5oPgogI2luY2x1ZGUgPGZzbF9lc2RoYy5oPgotI2lmZGVmIENPTkZJR19CT09UQ09VTlRfTElNSVQKKyNpZiBkZWZpbmVkKENPTkZJR19CT09UQ09VTlRfTElNSVQpICYmICFkZWZpbmVkKENPTkZJR19NUEM4MzF4KQogI2luY2x1ZGUgPGFzbS9pbW1hcF9xZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvZmR0LmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvZmR0LmMKaW5kZXggY2NlN2Q2Yi4uNDUwYTk3MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L2ZkdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC9mZHQuYwpAQCAtMTcsNyArMTcsNyBAQAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKICNpZiBkZWZpbmVkKENPTkZJR19CT09UQ09VTlRfTElNSVQpICYmIFwKLQkoZGVmaW5lZChDT05GSUdfUUUpKQorCShkZWZpbmVkKENPTkZJR19RRSkgJiYgIWRlZmluZWQoQ09ORklHX01QQzgzMXgpKQogI2luY2x1ZGUgPGFzbS9pbW1hcF9xZS5oPgogCiB2b2lkIGZkdF9maXh1cF9tdXJhbSAodm9pZCAqYmxvYikKQEAgLTEyNCw3ICsxMjQsOCBAQAogCiAJZmR0X2ZpeHVwX21lbW9yeShibG9iLCAodTY0KWJkLT5iaV9tZW1zdGFydCwgKHU2NCliZC0+YmlfbWVtc2l6ZSk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19CT09UQ09VTlRfTElNSVQpCisjaWYgZGVmaW5lZChDT05GSUdfQk9PVENPVU5UX0xJTUlUKSAmJiBcCisJKGRlZmluZWQoQ09ORklHX1FFKSAmJiAhZGVmaW5lZChDT05GSUdfTVBDODMxeCkpCiAJZmR0X2ZpeHVwX211cmFtIChibG9iKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L01ha2VmaWxlCmluZGV4IGVmNzYzN2EuLjQwOTQ3ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvTWFrZWZpbGUKQEAgLTEwMiw3ICsxMDIsOSBAQAogb2JqLXkJKz0gY3B1X2luaXQubwogb2JqLXkJKz0gY3B1X2luaXRfZWFybHkubwogb2JqLXkJKz0gaW50ZXJydXB0cy5vCitpZm5lcSAoJChDT05GSUdfUUVNVV9FNTAwKSx5KQogb2JqLXkJKz0gc3BlZWQubworZW5kaWYKIG9iai15CSs9IHRsYi5vCiBvYmoteQkrPSB0cmFwcy5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9jbWRfZXJyYXRhLmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvY21kX2VycmF0YS5jCmluZGV4IDhiNzljMDUuLjlkOGFjZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9jbWRfZXJyYXRhLmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NtZF9lcnJhdGEuYwpAQCAtMTEzLDYgKzExMywyMSBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9FUlJBVFVNX0EwMDcyMTIKKy8qCisgKiBUaGlzIHdvcmthcm91bmQgY2FuIGJlIGltcGxlbWVudGVkIGluIFBCSSwgb3IgYnkgdS1ib290LgorICovCitzdGF0aWMgdm9pZCBjaGVja19lcnJhdHVtX2EwMDcyMTIodm9pZCkKK3sKKwl1MzIgX19pb21lbSAqcGxsZGdkY3IgPSAodm9pZCAqKShDT05GSUdfU1lTX0RDU1JCQVIgKyAweDIxYzIwKTsKKworCWlmIChpbl9iZTMyKHBsbGRnZGNyKSAmIDB4MWZlKSB7CisJCS8qIGNoZWNrIGlmIFBMTCByYXRpbyBpcyBzZXQgYnkgd29ya2Fyb3VuZCAqLworCQlwdXRzKCJXb3JrLWFyb3VuZCBmb3IgRXJyYXR1bSBBMDA3MjEyIGVuYWJsZWRcbiIpOworCX0KK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IGRvX2VycmF0YShjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCiB7CiAjaWZkZWYgQ09ORklHX1NZU19GU0xfRVJSQVRVTV9OTUdfQ1BVX0EwMTEKQEAgLTI2OCw2ICsyODMsMTAgQEAKICNpZmRlZiBDT05GSUdfU1lTX0ZTTF9FUlJBVFVNX0EwMDUxMjUKIAlwdXRzKCJXb3JrLWFyb3VuZCBmb3IgRXJyYXR1bSBBMDA1MTI1IGVuYWJsZWRcbiIpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRVJSQVRVTV9BMDA3MDc1CisJaWYgKGhhc19lcnJhdHVtX2EwMDcwNzUoKSkKKwkJcHV0cygiV29yay1hcm91bmQgZm9yIEVycmF0dW0gQTAwNzA3NSBlbmFibGVkXG4iKTsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fSTJDX0EwMDQ0NDcKIAlpZiAoKFNWUl9TT0NfVkVSKHN2cikgPT0gU1ZSXzg1NDggJiYgSVNfU1ZSX1JFVihzdnIsIDMsIDEpKSB8fAogCSAgICAoU1ZSX1JFVihzdnIpIDw9IENPTkZJR19TWVNfRlNMX0EwMDQ0NDdfU1ZSX1JFVikpCkBAIC0yNzcsNiArMjk2LDEwIEBACiAJaWYgKGhhc19lcnJhdHVtX2EwMDYyNjEoKSkKIAkJcHV0cygiV29yay1hcm91bmQgZm9yIEVycmF0dW0gQTAwNjI2MSBlbmFibGVkXG4iKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fQTAwNzIxMgorCWNoZWNrX2VycmF0dW1fYTAwNzIxMigpOworI2VuZGlmCisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdS5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdS5jCmluZGV4IDNlOTliMDcuLjEyZThlMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9jcHUuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvY3B1LmMKQEAgLTEzMCw2ICsxMzAsMTEgQEAKIAogCWdldF9zeXNfaW5mbygmc3lzaW5mbyk7CiAKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9TSU5HTEVfU09VUkNFX0NMSworCWlmIChzeXNpbmZvLmRpZmZfc3lzY2xrID09IDEpCisJCXB1dHMoIlNpbmdsZSBTb3VyY2UgQ2xvY2sgQ29uZmlndXJhdGlvblxuIik7CisjZW5kaWYKKwogCXB1dHMoIkNsb2NrIENvbmZpZ3VyYXRpb246Iik7CiAJZm9yX2VhY2hfY3B1KGksIGNvcmUsIG5yX2NvcmVzLCBtYXNrKSB7CiAJCWlmICghKGkgJiAzKSkKQEAgLTI3Miw3ICsyNzcsNyBAQAogI2lmbmRlZiBDT05GSUdfU1lTX0ZTTF9UQkNMS19ESVYKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfVEJDTEtfRElWIDgKICNlbmRpZgotdW5zaWduZWQgbG9uZyBnZXRfdGJjbGsgKHZvaWQpCitfX3dlYWsgdW5zaWduZWQgbG9uZyBnZXRfdGJjbGsgKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0YmNsa19kaXYgPSBDT05GSUdfU1lTX0ZTTF9UQkNMS19ESVY7CiAKQEAgLTMzOCw3ICszNDMsOCBAQAogCSFkZWZpbmVkKENPTkZJR19TWVNfSU5JVF9MMl9BRERSKQogcGh5c19zaXplX3QgaW5pdGRyYW0oaW50IGJvYXJkX3R5cGUpCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU1BEX0VFUFJPTSkgfHwgZGVmaW5lZChDT05GSUdfRERSX1NQRCkKKyNpZiBkZWZpbmVkKENPTkZJR19TUERfRUVQUk9NKSB8fCBkZWZpbmVkKENPTkZJR19ERFJfU1BEKSB8fCBcCisJZGVmaW5lZChDT05GSUdfUUVNVV9FNTAwKQogCXJldHVybiBmc2xfZGRyX3NkcmFtX3NpemUoKTsKICNlbHNlCiAJcmV0dXJuIChwaHlzX3NpemVfdClDT05GSUdfU1lTX1NEUkFNX1NJWkUgKiAxMDI0ICogMTAyNDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9jcHVfaW5pdC5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0LmMKaW5kZXggODFhZWFkZC4uMzZlZjIzMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0LmMKQEAgLTMzLDkgKzMzLDM1IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2RyaXZlcnMvYmxvY2svZnNsX3NhdGEuaCIKKyNpZmRlZiBDT05GSUdfVV9RRQorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2RyaXZlcnMvcWUvcWUuaCIKKyNlbmRpZgogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAorI2lmZGVmIENPTkZJR19TWVNfRlNMX1NJTkdMRV9TT1VSQ0VfQ0xLCisvKgorICogRm9yIGRlcml2aW5nIHVzYiBjbG9jayBmcm9tIDEwME1IeiBzeXNjbGssIHJlZmVyZW5jZSBkaXZpc29yIGlzIHNldAorICogdG8gYSB2YWx1ZSBvZiA1LCB3aGljaCBnaXZlcyBhbiBpbnRlcm1lZGlhdGUgdmFsdWUgMjAoMTAwLzUpLiBUaGUKKyAqIG11bHRpcGxpY2F0aW9uIGZhY3RvciBpbnRlZ2VyIGlzIHNldCB0byAyNCwgd2hpY2ggd2hlbiBtdWx0aXBsaWVkIHRvCisgKiBhYm92ZSBpbnRlcm1lZGlhdGUgdmFsdWUgcHJvdmlkZXMgY2xvY2sgZm9yIHVzYiBpcC4KKyAqLwordm9pZCB1c2Jfc2luZ2xlX3NvdXJjZV9jbGtfY29uZmlndXJlKHN0cnVjdCBjY3NyX3VzYl9waHkgKnVzYl9waHkpCit7CisJc3lzX2luZm9fdCBzeXNpbmZvOworCisJZ2V0X3N5c19pbmZvKCZzeXNpbmZvKTsKKwlpZiAoc3lzaW5mby5kaWZmX3N5c2NsayA9PSAxKSB7CisJCWNscmJpdHNfYmUzMigmdXNiX3BoeS0+cGxscHJnWzFdLAorCQkJICAgICBDT05GSUdfU1lTX0ZTTF9VU0JfUExMUFJHMl9NRkkpOworCQlzZXRiaXRzX2JlMzIoJnVzYl9waHktPnBsbHByZ1sxXSwKKwkJCSAgICAgQ09ORklHX1NZU19GU0xfVVNCX1BMTFBSRzJfUkVGX0RJVl9JTlRFUk5BTF9DTEsgfAorCQkJICAgICBDT05GSUdfU1lTX0ZTTF9VU0JfUExMUFJHMl9NRklfSU5URVJOQUxfQ0xLIHwKKwkJCSAgICAgQ09ORklHX1NZU19GU0xfVVNCX0lOVEVSTkFMX1NPQ19DTEtfRU4pOworCQl9Cit9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fQTAwNjI2MQogdm9pZCBmc2xfZXJyYXR1bV9hMDA2MjYxX3dvcmthcm91bmQoc3RydWN0IGNjc3JfdXNiX3BoeSBfX2lvbWVtICp1c2JfcGh5KQogewpAQCAtODQsNyArMTEwLDcgQEAKICNlbmRpZgogCiAKLSNpZmRlZiBDT05GSUdfUUUKKyNpZiBkZWZpbmVkKENPTkZJR19RRSkgJiYgIWRlZmluZWQoQ09ORklHX1VfUUUpCiBleHRlcm4gcWVfaW9wX2NvbmZfdCBxZV9pb3BfY29uZl90YWJbXTsKIGV4dGVybiB2b2lkIHFlX2NvbmZpZ19pb3Bpbih1OCBwb3J0LCB1OCBwaW4sIGludCBkaXIsCiAJCQkJaW50IG9wZW5fZHJhaW4sIGludCBhc3NpZ24pOwpAQCAtMTczLDE3ICsxOTksMTQgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NZU19GU0xfQ1BDCi1zdGF0aWMgdm9pZCBlbmFibGVfY3BjKHZvaWQpCisjaWYgZGVmaW5lZChDT05GSUdfUkFNQk9PVF9QQkwpIHx8IGRlZmluZWQoQ09ORklHX1NZU19DUENfUkVJTklUX0YpCitzdGF0aWMgdm9pZCBkaXNhYmxlX2NwY19zcmFtKHZvaWQpCiB7CiAJaW50IGk7Ci0JdTMyIHNpemUgPSAwOwogCiAJY3BjX2NvcmVuZXRfdCAqY3BjID0gKGNwY19jb3JlbmV0X3QgKilDT05GSUdfU1lTX0ZTTF9DUENfQUREUjsKIAogCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfU1lTX05VTV9DUEM7IGkrKywgY3BjKyspIHsKLQkJdTMyIGNwY2NmZzAgPSBpbl9iZTMyKCZjcGMtPmNwY2NmZzApOwotCQlzaXplICs9IENQQ19DRkcwX1NaX0soY3BjY2ZnMCk7Ci0jaWZkZWYgQ09ORklHX1JBTUJPT1RfUEJMCiAJCWlmIChpbl9iZTMyKCZjcGMtPmNwY3NyY3IwKSAmIENQQ19TUkNSMF9TUkFNRU4pIHsKIAkJCS8qIGZpbmQgYW5kIGRpc2FibGUgTEFXIG9mIFNSQU0gKi8KIAkJCXN0cnVjdCBsYXdfZW50cnkgbGF3ID0gZmluZF9sYXcoQ09ORklHX1NZU19JTklUX0wzX0FERFIpOwpAQCAtMTk4LDggKzIyMSwyMSBAQAogCQkJb3V0X2JlMzIoJmNwYy0+Y3BjY3NyMCwgMCk7CiAJCQlvdXRfYmUzMigmY3BjLT5jcGNzcmNyMCwgMCk7CiAJCX0KKwl9Cit9CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgZW5hYmxlX2NwYyh2b2lkKQoreworCWludCBpOworCXUzMiBzaXplID0gMDsKKworCWNwY19jb3JlbmV0X3QgKmNwYyA9IChjcGNfY29yZW5ldF90ICopQ09ORklHX1NZU19GU0xfQ1BDX0FERFI7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX1NZU19OVU1fQ1BDOyBpKyssIGNwYysrKSB7CisJCXUzMiBjcGNjZmcwID0gaW5fYmUzMigmY3BjLT5jcGNjZmcwKTsKKwkJc2l6ZSArPSBDUENfQ0ZHMF9TWl9LKGNwY2NmZzApOworCiAjaWZkZWYgQ09ORklHX1NZU19GU0xfRVJSQVRVTV9DUENfQTAwMgogCQlzZXRiaXRzX2JlMzIoJmNwYy0+Y3BjaGRiY3IwLCBDUENfSERCQ1IwX1RBR19FQ0NfU0NSVUJfRElTKTsKICNlbmRpZgpAQCAtMjY3LDExICszMDMsNzcgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRVJSQVRVTV9BMDA3MjEyCit2b2lkIGZzbF9lcnJhdHVtX2EwMDcyMTJfd29ya2Fyb3VuZCh2b2lkKQoreworCWNjc3JfZ3VyX3QgX19pb21lbSAqZ3VyID0gKHZvaWQgKikoQ09ORklHX1NZU19NUEM4NXh4X0dVVFNfQUREUik7CisJdTMyIGRkcl9wbGxfcmF0aW87CisJdTMyIF9faW9tZW0gKnBsbGRnZGNyMSA9ICh2b2lkICopKENPTkZJR19TWVNfRENTUkJBUiArIDB4MjFjMjApOworCXUzMiBfX2lvbWVtICpwbGxkYWRjcjEgPSAodm9pZCAqKShDT05GSUdfU1lTX0RDU1JCQVIgKyAweDIxYzI4KTsKKwl1MzIgX19pb21lbSAqZHBkb3ZyY3I0ID0gKHZvaWQgKikoQ09ORklHX1NZU19EQ1NSQkFSICsgMHgyMWU4MCk7CisjaWYgKENPTkZJR19OVU1fRERSX0NPTlRST0xMRVJTID49IDIpCisJdTMyIF9faW9tZW0gKnBsbGRnZGNyMiA9ICh2b2lkICopKENPTkZJR19TWVNfRENTUkJBUiArIDB4MjFjNDApOworCXUzMiBfX2lvbWVtICpwbGxkYWRjcjIgPSAodm9pZCAqKShDT05GSUdfU1lTX0RDU1JCQVIgKyAweDIxYzQ4KTsKKyNpZiAoQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMgPj0gMykKKwl1MzIgX19pb21lbSAqcGxsZGdkY3IzID0gKHZvaWQgKikoQ09ORklHX1NZU19EQ1NSQkFSICsgMHgyMWM2MCk7CisJdTMyIF9faW9tZW0gKnBsbGRhZGNyMyA9ICh2b2lkICopKENPTkZJR19TWVNfRENTUkJBUiArIDB4MjFjNjgpOworI2VuZGlmCisjZW5kaWYKKwkvKgorCSAqIEV2ZW4gdGhpcyB3b3JrYXJvdW5kIGFwcGxpZXMgdG8gc2VsZWN0ZWQgdmVyc2lvbiBvZiBTb0NzLCBpdCBpcworCSAqIHNhZmUgdG8gYXBwbHkgdG8gYWxsIHZlcnNpb25zLCB3aXRoIHRoZSBsaW1pdGF0aW9uIG9mIG9kZCByYXRpb3MuCisJICogSWYgUkNXIGhhcyBkaXNhYmxlZCBERFIgUExMLCB3ZSBoYXZlIHRvIGFwcGx5IHRoaXMgd29ya2Fyb3VuZCwKKwkgKiBvdGhlcndpc2UgRERSIHdpbGwgbm90IHdvcmsuCisJICovCisJZGRyX3BsbF9yYXRpbyA9IChpbl9iZTMyKCZndXItPnJjd3NyWzBdKSA+PgorCQlGU0xfQ09SRU5FVF9SQ1dTUjBfTUVNX1BMTF9SQVRfU0hJRlQpICYKKwkJRlNMX0NPUkVORVRfUkNXU1IwX01FTV9QTExfUkFUX01BU0s7CisJLyogY2hlY2sgaWYgUkNXIHNldHMgcmF0aW8gdG8gMCwgcmVxdWlyZWQgYnkgdGhpcyB3b3JrYXJvdW5kICovCisJaWYgKGRkcl9wbGxfcmF0aW8gIT0gMCkKKwkJcmV0dXJuOworCWRkcl9wbGxfcmF0aW8gPSAoaW5fYmUzMigmZ3VyLT5yY3dzclswXSkgPj4KKwkJRlNMX0NPUkVORVRfUkNXU1IwX01FTV9QTExfUkFUX1JFU1ZfU0hJRlQpICYKKwkJRlNMX0NPUkVORVRfUkNXU1IwX01FTV9QTExfUkFUX01BU0s7CisJLyogY2hlY2sgaWYgcmVzZXJ2ZWQgYml0cyBoYXZlIHRoZSBkZXNpcmVkIHJhdGlvICovCisJaWYgKGRkcl9wbGxfcmF0aW8gPT0gMCkgeworCQlwcmludGYoIkVycm9yOiBVbmtub3duIEREUiBQTEwgcmF0aW8hXG4iKTsKKwkJcmV0dXJuOworCX0KKwlkZHJfcGxsX3JhdGlvID4+PSAxOworCisJc2V0Yml0c19iZTMyKHBsbGRhZGNyMSwgMHgwMjAwMDAwMSk7CisjaWYgKENPTkZJR19OVU1fRERSX0NPTlRST0xMRVJTID49IDIpCisJc2V0Yml0c19iZTMyKHBsbGRhZGNyMiwgMHgwMjAwMDAwMSk7CisjaWYgKENPTkZJR19OVU1fRERSX0NPTlRST0xMRVJTID49IDMpCisJc2V0Yml0c19iZTMyKHBsbGRhZGNyMywgMHgwMjAwMDAwMSk7CisjZW5kaWYKKyNlbmRpZgorCXNldGJpdHNfYmUzMihkcGRvdnJjcjQsIDB4ZTAwMDAwMDApOworCW91dF9iZTMyKHBsbGRnZGNyMSwgMHgwODAwMDAwMSB8IChkZHJfcGxsX3JhdGlvIDw8IDEpKTsKKyNpZiAoQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMgPj0gMikKKwlvdXRfYmUzMihwbGxkZ2RjcjIsIDB4MDgwMDAwMDEgfCAoZGRyX3BsbF9yYXRpbyA8PCAxKSk7CisjaWYgKENPTkZJR19OVU1fRERSX0NPTlRST0xMRVJTID49IDMpCisJb3V0X2JlMzIocGxsZGdkY3IzLCAweDA4MDAwMDAxIHwgKGRkcl9wbGxfcmF0aW8gPDwgMSkpOworI2VuZGlmCisjZW5kaWYKKwl1ZGVsYXkoMTAwKTsKKwljbHJiaXRzX2JlMzIocGxsZGFkY3IxLCAweDAyMDAwMDAxKTsKKyNpZiAoQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMgPj0gMikKKwljbHJiaXRzX2JlMzIocGxsZGFkY3IyLCAweDAyMDAwMDAxKTsKKyNpZiAoQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMgPj0gMykKKwljbHJiaXRzX2JlMzIocGxsZGFkY3IzLCAweDAyMDAwMDAxKTsKKyNlbmRpZgorI2VuZGlmCisJY2xyYml0c19iZTMyKGRwZG92cmNyNCwgMHhlMDAwMDAwMCk7Cit9CisjZW5kaWYKKwogdm9pZCBjcHVfaW5pdF9mICh2b2lkKQogewogCWV4dGVybiB2b2lkIG04NTYwX2NwbV9yZXNldCAodm9pZCk7CiAjaWZkZWYgQ09ORklHX1NZU19EQ1NSQkFSX1BIWVMKIAljY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKShDT05GSUdfU1lTX01QQzg1eHhfR1VUU19BRERSKTsKKwlnZCA9IChnZF90ICopKENPTkZJR19TWVNfSU5JVF9SQU1fQUREUiArIENPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUKTsKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX1NFQ1VSRV9CT09UKQogCXN0cnVjdCBsYXdfZW50cnkgbGF3OwpAQCAtMjk4LDYgKzQwMCwxMCBAQAogCWxhdyA9IGZpbmRfbGF3KENPTkZJR19TWVNfUEJJX0ZMQVNIX0JBU0UpOwogCWlmIChsYXcuaW5kZXggIT0gLTEpCiAJCWRpc2FibGVfbGF3KGxhdy5pbmRleCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfQ1BDX1JFSU5JVF9GKQorCWRpc2FibGVfY3BjX3NyYW0oKTsKKyNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQ1BNMgpAQCAtMzA5LDEwICs0MTUsMTIgQEAKICNpZiBkZWZpbmVkKENPTkZJR19DUE0yKQogCW04NTYwX2NwbV9yZXNldCgpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1FFCisKKyNpZiBkZWZpbmVkKENPTkZJR19RRSkgJiYgIWRlZmluZWQoQ09ORklHX1VfUUUpCiAJLyogQ29uZmlnIFFFIGlvcG9ydHMgKi8KIAljb25maWdfcWVfaW9wb3J0cygpOwogI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19GU0xfRE1BKQogCWRtYV9pbml0KCk7CiAjZW5kaWYKQEAgLTMzMCw2ICs0MzgsMTcgQEAKIAlpbl9iZTMyKCZndXItPmRjc3Jjcik7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TWVNfRENTUkJBUl9QSFlTCisjaWZkZWYgQ09ORklHX0RFRVBfU0xFRVAKKwkvKiBkaXNhYmxlIHRoZSBjb25zb2xlIGlmIGJvb3QgZnJvbSBkZWVwIHNsZWVwICovCisJaWYgKGluX2JlMzIoJmd1ci0+c2NydHNyWzBdKSAmICgxIDw8IDMpKQorCQlnZC0+ZmxhZ3MgfD0gR0RfRkxHX1NJTEVOVCB8IEdEX0ZMR19ESVNBQkxFX0NPTlNPTEU7CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fQTAwNzIxMgorCWZzbF9lcnJhdHVtX2EwMDcyMTJfd29ya2Fyb3VuZCgpOworI2VuZGlmCisKIH0KIAogLyogSW1wbGVtZW50IGEgZHVtbXkgZnVuY3Rpb24gZm9yIHRob3NlIHBsYXRmb3JtcyB3L28gU0VSREVTICovCkBAIC01OTgsNiArNzE3LDkgQEAKIAlwdXRzKCJkaXNhYmxlZFxuIik7CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1JBTUJPT1RfUEJMKQorCWRpc2FibGVfY3BjX3NyYW0oKTsKKyNlbmRpZgogCWVuYWJsZV9jcGMoKTsKIAogI2lmbmRlZiBDT05GSUdfU1lTX0ZTTF9OT19TRVJERVMKQEAgLTcxNiw2ICs4MzgsOSBAQAogCQkJICAgICBDT05GSUdfU1lTX0ZTTF9VU0JfUExMUFJHMl9QSFkxX0NMS19FTiB8CiAJCQkgICAgIENPTkZJR19TWVNfRlNMX1VTQl9QTExQUkcyX01GSSB8CiAJCQkgICAgIENPTkZJR19TWVNfRlNMX1VTQl9QTExQUkcyX1BMTF9FTik7CisjaWZkZWYgQ09ORklHX1NZU19GU0xfU0lOR0xFX1NPVVJDRV9DTEsKKwkJdXNiX3NpbmdsZV9zb3VyY2VfY2xrX2NvbmZpZ3VyZSh1c2JfcGh5KTsKKyNlbmRpZgogCQlzZXRiaXRzX2JlMzIoJnVzYl9waHktPnBvcnQxLmN0cmwsCiAJCQkgICAgIENPTkZJR19TWVNfRlNMX1VTQl9DVFJMX1BIWV9FTik7CiAJCXNldGJpdHNfYmUzMigmdXNiX3BoeS0+cG9ydDEuZHJ2dmJ1c2NmZywKQEAgLTc2Nyw4ICs4OTIsNiBAQAogCXJldHVybiAwOwogfQogCi1leHRlcm4gdm9pZCBzZXR1cF9pdm9ycyh2b2lkKTsKLQogdm9pZCBhcmNoX3ByZWJvb3Rfb3Modm9pZCkKIHsKIAl1MzIgbXNyOwpAQCAtNzgxLDggKzkwNCw2IEBACiAJbXNyID0gbWZtc3IoKTsKIAltc3IgJj0gfihNU1JfTUV8TVNSX0NFKTsKIAltdG1zcihtc3IpOwotCi0Jc2V0dXBfaXZvcnMoKTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0NNRF9TQVRBKSAmJiBkZWZpbmVkKENPTkZJR19GU0xfU0FUQSkKQEAgLTc5NywyMSArOTE4LDEzIEBACiAKIHZvaWQgY3B1X3NlY29uZGFyeV9pbml0X3Iodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfUUUKKyNpZmRlZiBDT05GSUdfVV9RRQorCXVpbnQgcWVfYmFzZSA9IENPTkZJR19TWVNfSU1NUiArIDB4MDAxNDAwMDA7IC8qIFFFIGltbXIgYmFzZSAqLworI2VsaWYgZGVmaW5lZCBDT05GSUdfUUUKIAl1aW50IHFlX2Jhc2UgPSBDT05GSUdfU1lTX0lNTVIgKyAweDAwMDgwMDAwOyAvKiBRRSBpbW1yIGJhc2UgKi8KLSNpZmRlZiBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTkFORAotCWludCByZXQ7Ci0Jc2l6ZV90IGZ3X2xlbmd0aCA9IENPTkZJR19TWVNfUUVfRk1BTl9GV19MRU5HVEg7Ci0KLQkvKiBsb2FkIFFFIGZpcm13YXJlIGZyb20gTkFORCBmbGFzaCB0byBERFIgZmlyc3QgKi8KLQlyZXQgPSBuYW5kX3JlYWQoJm5hbmRfaW5mb1swXSwgKGxvZmZfdClDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTkFORCwKLQkJCSZmd19sZW5ndGgsICh1X2NoYXIgKilDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUik7Ci0KLQlpZiAocmV0ICYmIHJldCA9PSAtRVVDTEVBTikgewotCQlwcmludGYgKCJOQU5EIHJlYWQgZm9yIFFFIGZpcm13YXJlIGF0IG9mZnNldCAleCBmYWlsZWQgJWRcbiIsCi0JCQkJQ09ORklHX1NZU19RRV9GTUFOX0ZXX0lOX05BTkQsIHJldCk7Ci0JfQogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUUUKIAlxZV9pbml0KHFlX2Jhc2UpOwogCXFlX3Jlc2V0KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9jcHVfaW5pdF9lYXJseS5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0X2Vhcmx5LmMKaW5kZXggOTkzYjhiOC4uOTk4NzgxYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0X2Vhcmx5LmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0X2Vhcmx5LmMKQEAgLTc5LDcgKzc5LDcgQEAKICNlbmRpZgogCiAvKiBXZSBydW4gY3B1X2luaXRfZWFybHlfZiBpbiBBUyA9IDEgKi8KLXZvaWQgY3B1X2luaXRfZWFybHlfZih2b2lkKQordm9pZCBjcHVfaW5pdF9lYXJseV9mKHZvaWQgKmZkdCkKIHsKIAl1MzIgbWFzMCwgbWFzMSwgbWFzMiwgbWFzMywgbWFzNzsKIAlpbnQgaTsKQEAgLTEwMiw2ICsxMDIsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGdkX3QpOyBpKyspCiAJCSgoY2hhciAqKWdkKVtpXSA9IDA7CiAKKwkvKgorCSAqIENPTkZJR19TWVNfQ0NTUkJBUl9QSFlTIGJlbG93IG1heSB1c2UgZ2QtPmZkdF9ibG9iIG9uIGVQQVBSIHN5c3RlbXMsCisJICogc28gd2UgbmVlZCB0byBwb3B1bGF0ZSBpdCBiZWZvcmUgaXQgYWNjZXNzZXMgaXQuCisJICovCisJZ2QtPmZkdF9ibG9iID0gZmR0OworCiAJbWFzMCA9IE1BUzBfVExCU0VMKDEpIHwgTUFTMF9FU0VMKDEzKTsKIAltYXMxID0gTUFTMV9WQUxJRCB8IE1BUzFfVElEKDApIHwgTUFTMV9UUyB8IE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzFNKTsKIAltYXMyID0gRlNMX0JPT0tFX01BUzIoQ09ORklHX1NZU19DQ1NSQkFSLCBNQVMyX0l8TUFTMl9HKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9mZHQuYyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9mZHQuYwppbmRleCAzM2JjOTAwLi4wY2MyMWM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvZmR0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2ZkdC5jCkBAIC0yNzUsMTIgKzI3NSwxNiBAQAogCQkJdTMyICpyZWcgPSAodTMyICopZmR0X2dldHByb3AoYmxvYiwgb2ZmLCAicmVnIiwgMCk7CiAjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9RT1JJUV9DSEFTU0lTMikgJiYgZGVmaW5lZChDT05GSUdfRTY1MDApCiAJCQkvKiBPbmx5IGluaXRpYWxpemUgZXZlcnkgZWlnaHRoIHRocmVhZCAqLwotCQkJaWYgKHJlZyAmJiAhKCgqcmVnKSAlIDgpKQorCQkJaWYgKHJlZyAmJiAhKCgqcmVnKSAlIDgpKSB7CisJCQkJZmR0X3NldHByb3BfY2VsbChibG9iLCBsMl9vZmYsICJjYWNoZS1zdGFzaC1pZCIsCisJCQkJCQkgKCpyZWcgLyA0KSArIDMyICsgMSk7CisJCQl9CiAjZWxzZQotCQkJaWYgKHJlZykKLSNlbmRpZgorCQkJaWYgKHJlZykgewogCQkJCWZkdF9zZXRwcm9wX2NlbGwoYmxvYiwgbDJfb2ZmLCAiY2FjaGUtc3Rhc2gtaWQiLAotCQkJCQkgKCpyZWcgKiAyKSArIDMyICsgMSk7CisJCQkJCQkgKCpyZWcgKiAyKSArIDMyICsgMSk7CisJCQl9CisjZW5kaWYKICNlbmRpZgogCiAJCQlmZHRfc2V0cHJvcChibG9iLCBsMl9vZmYsICJjYWNoZS11bmlmaWVkIiwgTlVMTCwgMCk7CkBAIC01ODIsNiArNTg2LDMzIEBACiAjZGVmaW5lIGZkdF9maXh1cF91c2IoeCkKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX1QxMDQwKQorc3RhdGljIHZvaWQgZmR0X2ZpeHVwX2wyX3N3aXRjaCh2b2lkICpibG9iKQoreworCXVjaGFyIGwyc3dhZGRyWzZdOworCWludCBub2RlOworCisJLyogVGhlIGwyc3dpdGNoIG5vZGUgZnJvbSBkZXZpY2UtdHJlZSBoYXMKKwkgKiBjb21wYXRpYmxlIHN0cmluZyAidml0ZXNzZS05OTUzIiAqLworCW5vZGUgPSBmZHRfbm9kZV9vZmZzZXRfYnlfY29tcGF0aWJsZShibG9iLCAtMSwgInZpdGVzc2UtOTk1MyIpOworCWlmIChub2RlID09IC1GRFRfRVJSX05PVEZPVU5EKQorCQkvKiBubyBsMnN3aXRjaCBub2RlIGhhcyBiZWVuIGZvdW5kICovCisJCXJldHVybjsKKworCS8qIEdldCBNQUMgYWRkcmVzcyBmb3IgdGhlIGwyc3dpdGNoIGZyb20gImwyc3dpdGNoYWRkciIqLworCWlmICghZXRoX2dldGVudl9lbmV0YWRkcigibDJzd2l0Y2hhZGRyIiwgbDJzd2FkZHIpKSB7CisJCXByaW50ZigiV2FybmluZzogTUFDIGFkZHJlc3MgZm9yIGwyc3dpdGNoIG5vdCBmb3VuZFxuIik7CisJCW1lbXNldChsMnN3YWRkciwgMCwgc2l6ZW9mKGwyc3dhZGRyKSk7CisJfQorCisJLyogQWRkIE1BQyBhZGRyZXNzIHRvIGwyc3dpdGNoIG5vZGUgKi8KKwlmZHRfc2V0cHJvcChibG9iLCBub2RlLCAibG9jYWwtbWFjLWFkZHJlc3MiLCBsMnN3YWRkciwKKwkJICAgIHNpemVvZihsMnN3YWRkcikpOworfQorI2Vsc2UKKyNkZWZpbmUgZmR0X2ZpeHVwX2wyX3N3aXRjaCh4KQorI2VuZGlmCisKIHZvaWQgZnRfY3B1X3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQogewogCWludCBvZmY7CkBAIC03MTksNiArNzUwLDggQEAKIAkJCSJjbG9jay1mcmVxdWVuY3kiLCBnZC0+YnVzX2Nsay8yLCAxKTsKIAogCWZkdF9maXh1cF91c2IoYmxvYik7CisKKwlmZHRfZml4dXBfbDJfc3dpdGNoKGJsb2IpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2ZpeGVkX2l2b3IuUyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9maXhlZF9pdm9yLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYmI4YzAuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2ZpeGVkX2l2b3IuUworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgotICoKLSAqIEt1bWFyIEdhbGEgPGt1bWFyLmdhbGFAZnJlZXNjYWxlLmNvbT4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0vKiBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgaW5jbHVkZWQgYnkgb3RoZXIgYXNtIGNvZGUgc2luY2UKLSAqIHdlIHdpbGwgd2FudCB0byBleGVjdXRlIHRoaXMgb24gYm90aCB0aGUgcHJpbWFyeSBjb3JlIHdoZW4KLSAqIGl0IGRvZXMgYSBib290bSBhbmQgdGhlIHNlY29uZGFyeSBjb3JlJ3MgdGhhdCBnZXQgcmVsZWFzZWQKLSAqIG91dCBvZiB0aGUgc3BpbiB0YWJsZSAqLwotCi0jZGVmaW5lIFNFVF9JVk9SKHZlY3Rvcl9udW1iZXIsIHZlY3Rvcl9vZmZzZXQpCVwKLQlsaQlyMyx2ZWN0b3Jfb2Zmc2V0QGw7IAkJXAotCW10c3ByCVNQUk5fSVZPUiMjdmVjdG9yX251bWJlcixyMzsKLQotI2RlZmluZSBTRVRfR0lWT1IodmVjdG9yX251bWJlciwgdmVjdG9yX29mZnNldCkJXAotCWxpCXIzLHZlY3Rvcl9vZmZzZXRAbDsgCQlcCi0JbXRzcHIJU1BSTl9HSVZPUiMjdmVjdG9yX251bWJlcixyMzsKLQotCVNFVF9JVk9SKDAsIDB4MDIwKSAvKiBDcml0aWNhbCBJbnB1dCAqLwotCVNFVF9JVk9SKDEsIDB4MDAwKSAvKiBNYWNoaW5lIENoZWNrICovCi0JU0VUX0lWT1IoMiwgMHgwNjApIC8qIERhdGEgU3RvcmFnZSAqLwotCVNFVF9JVk9SKDMsIDB4MDgwKSAvKiBJbnN0cnVjdGlvbiBTdG9yYWdlICovCi0JU0VUX0lWT1IoNCwgMHgwYTApIC8qIEV4dGVybmFsIElucHV0ICovCi0JU0VUX0lWT1IoNSwgMHgwYzApIC8qIEFsaWdubWVudCAqLwotCVNFVF9JVk9SKDYsIDB4MGUwKSAvKiBQcm9ncmFtICovCi0JU0VUX0lWT1IoNywgMHgxMDApIC8qIEZQIFVuYXZhaWxhYmxlICovCi0JU0VUX0lWT1IoOCwgMHgxMjApIC8qIFN5c3RlbSBDYWxsICovCi0JU0VUX0lWT1IoOSwgMHgxNDApIC8qIEF1eGlsaWFyeSBQcm9jZXNzb3IgVW5hdmFpbGFibGUgKi8KLQlTRVRfSVZPUigxMCwgMHgxNjApIC8qIERlY3JlbWVudGVyICovCi0JU0VUX0lWT1IoMTEsIDB4MTgwKSAvKiBGaXhlZCBJbnRlcnZhbCBUaW1lciAqLwotCVNFVF9JVk9SKDEyLCAweDFhMCkgLyogV2F0Y2hkb2cgVGltZXIgKi8KLQlTRVRfSVZPUigxMywgMHgxYzApIC8qIERhdGEgVExCIEVycm9yICovCi0JU0VUX0lWT1IoMTQsIDB4MWUwKSAvKiBJbnN0cnVjdGlvbiBUTEIgRXJyb3IgKi8KLQlTRVRfSVZPUigxNSwgMHgwNDApIC8qIERlYnVnICovCi0KLS8qIGU1MDB2MSAmIGU1MDB2MiBvbmx5ICovCi0jaWZuZGVmIENPTkZJR19FNTAwTUMKLQlTRVRfSVZPUigzMiwgMHgyMDApIC8qIFNQRSBVbmF2YWlsYWJsZSAqLwotCVNFVF9JVk9SKDMzLCAweDIyMCkgLyogRW1iZWRkZWQgRlAgRGF0YSAqLwotCVNFVF9JVk9SKDM0LCAweDI0MCkgLyogRW1iZWRkZWQgRlAgUm91bmQgKi8KLSNlbmRpZgotCi0JU0VUX0lWT1IoMzUsIDB4MjYwKSAvKiBQZXJmb3JtYW5jZSBtb25pdG9yICovCi0KLS8qIGU1MDBtYyBvbmx5ICovCi0jaWZkZWYgQ09ORklHX0U1MDBNQwotCVNFVF9JVk9SKDM2LCAweDI4MCkgLyogUHJvY2Vzc29yIGRvb3JiZWxsICovCi0JU0VUX0lWT1IoMzcsIDB4MmEwKSAvKiBQcm9jZXNzb3IgZG9vcmJlbGwgY3JpdGljYWwgKi8KLQlTRVRfSVZPUigzOCwgMHgyYzApIC8qIEd1ZXN0IFByb2Nlc3NvciBkb29yYmVsbCAqLwotCVNFVF9JVk9SKDM5LCAweDJlMCkgLyogR3Vlc3QgUHJvY2Vzc29yIGNyaXRpY2FsICYgbWFjaGluZSBjaGVjayAqLwotCVNFVF9JVk9SKDQwLCAweDMwMCkgLyogSHlwZXJ2aXNvciBzeXN0ZW0gY2FsbCAqLwotCVNFVF9JVk9SKDQxLCAweDMyMCkgLyogSHlwZXJ2aXNvciBQcml2aWxlZGdlICovCi0KLQlTRVRfR0lWT1IoMiwgMHgwNjApIC8qIEd1ZXN0IERhdGEgU3RvcmFnZSAqLwotCVNFVF9HSVZPUigzLCAweDA4MCkgLyogR3Vlc3QgSW5zdHJ1Y3Rpb24gU3RvcmFnZSAqLwotCVNFVF9HSVZPUig0LCAweDBhMCkgLyogR3Vlc3QgRXh0ZXJuYWwgSW5wdXQgKi8KLQlTRVRfR0lWT1IoOCwgMHgxMjApIC8qIEd1ZXN0IFN5c3RlbSBDYWxsICovCi0JU0VUX0dJVk9SKDEzLCAweDFjMCkgLyogR3Vlc3QgRGF0YSBUTEIgRXJyb3IgKi8KLQlTRVRfR0lWT1IoMTQsIDB4MWUwKSAvKiBHdWVzdCBJbnN0cnVjdGlvbiBUTEIgRXJyb3IgKi8KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3FlX2lvLmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvcWVfaW8uYwppbmRleCA3NmM2MGRhLi5kMjgyNWVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvcWVfaW8uYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvcWVfaW8uYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgImFzbS9pby5oIgogI2luY2x1ZGUgImFzbS9pbW1hcF84NXh4LmgiCiAKLSNpZiBkZWZpbmVkKENPTkZJR19RRSkKKyNpZiBkZWZpbmVkKENPTkZJR19RRSkgJiYgIWRlZmluZWQoQ09ORklHX1VfUUUpCiAjZGVmaW5lCU5VTV9PRl9QSU5TCTMyCiB2b2lkIHFlX2NvbmZpZ19pb3Bpbih1OCBwb3J0LCB1OCBwaW4sIGludCBkaXIsIGludCBvcGVuX2RyYWluLCBpbnQgYXNzaWduKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3JlbGVhc2UuUyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9yZWxlYXNlLlMKaW5kZXggZmNmYmE3ZS4uYTJjMGFkNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3JlbGVhc2UuUworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvcmVsZWFzZS5TCkBAIC00MDUsOSArNDA1LDYgQEAKIAlibmUJM2IKIAlpc3luYwogCi0JLyogc2V0dXAgSVZPUnMgdG8gbWF0Y2ggZml4ZWQgb2Zmc2V0cyAqLwotI2luY2x1ZGUgImZpeGVkX2l2b3IuUyIKLQogCS8qIGdldCB0aGUgdXBwZXIgYml0cyBvZiB0aGUgYWRkciAqLwogCWx3eglyMTEsRU5UUllfQUREUl9VUFBFUihyMTApCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9zcGVlZC5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3NwZWVkLmMKaW5kZXggYWRmMDllZi4uZDUxNmQ0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3NwZWVkLmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3NwZWVkLmMKQEAgLTc0LDI4ICs3NCwzMyBAQAogCXVpbnQgcmF0aW9bQ09ORklHX1NZU19GU0xfTlVNX0NDX1BMTFNdOwogCXVuc2lnbmVkIGxvbmcgc3lzY2xrID0gQ09ORklHX1NZU19DTEtfRlJFUTsKIAl1aW50IG1lbV9wbGxfcmF0OwotI2lmZGVmIENPTkZJR19TWVNfRlNMX1NJTkdMRV9TT1VSQ0VfQ0xLCi0JdWludCBzaW5nbGVfc3JjOwotI2VuZGlmCiAKIAlzeXNfaW5mby0+ZnJlcV9zeXN0ZW1idXMgPSBzeXNjbGs7CiAjaWZkZWYgQ09ORklHX1NZU19GU0xfU0lOR0xFX1NPVVJDRV9DTEsKKwl1aW50IGRkcl9yZWZjbGtfc2VsOworCXVuc2lnbmVkIGludCBwb3JzcjFfc3lzX2NsazsKKwlwb3JzcjFfc3lzX2NsayA9IGluX2JlMzIoJmd1ci0+cG9yc3IxKSA+PiBGU0xfRENGR19QT1JTUjFfU1lTQ0xLX1NISUZUCisJCQkJCQkmIEZTTF9EQ0ZHX1BPUlNSMV9TWVNDTEtfTUFTSzsKKwlpZiAocG9yc3IxX3N5c19jbGsgPT0gRlNMX0RDRkdfUE9SU1IxX1NZU0NMS19ESUZGKQorCQlzeXNfaW5mby0+ZGlmZl9zeXNjbGsgPSAxOworCWVsc2UKKwkJc3lzX2luZm8tPmRpZmZfc3lzY2xrID0gMDsKKwogCS8qCiAJICogRERSX1JFRkNMS19TRUwgcmN3IGJpdCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBERFIgUExMUwogCSAqIGFyZSBkcml2ZW4gYnkgc2VwYXJhdGUgRERSIFJlZmNsb2NrIG9yIHNpbmdsZSBzb3VyY2UKIAkgKiBkaWZmZXJlbnRpYWwgY2xvY2suCiAJICovCi0Jc2luZ2xlX3NyYyA9IChpbl9iZTMyKCZndXItPnJjd3NyWzVdKSA+PgorCWRkcl9yZWZjbGtfc2VsID0gKGluX2JlMzIoJmd1ci0+cmN3c3JbNV0pID4+CiAJCSAgICAgIEZTTF9DT1JFTkVUMl9SQ1dTUjVfRERSX1JFRkNMS19TRUxfU0hJRlQpICYKIAkJICAgICAgRlNMX0NPUkVORVQyX1JDV1NSNV9ERFJfUkVGQ0xLX1NFTF9NQVNLOwogCS8qCi0JICogRm9yIHNpbmdsZSBzb3VyY2UgY2xvY2tpbmcsIGJvdGggZGRyY2xvY2sgYW5kIHN5Y2xvY2sKKwkgKiBGb3Igc2luZ2xlIHNvdXJjZSBjbG9ja2luZywgYm90aCBkZHJjbG9jayBhbmQgc3lzY2xvY2sKIAkgKiBhcmUgZHJpdmVuIGJ5IGRpZmZlcmVudGlhbCBzeXNjbG9jay4KIAkgKi8KLQlpZiAoc2luZ2xlX3NyYyA9PSBGU0xfQ09SRU5FVDJfUkNXU1I1X0REUl9SRUZDTEtfU0lOR0xFX0NMSykgewotCQlwcmludGYoIlNpbmdsZSBTb3VyY2UgQ2xvY2sgQ29uZmlndXJhdGlvblxuIik7CisJaWYgKGRkcl9yZWZjbGtfc2VsID09IEZTTF9DT1JFTkVUMl9SQ1dTUjVfRERSX1JFRkNMS19TSU5HTEVfQ0xLKQogCQlzeXNfaW5mby0+ZnJlcV9kZHJidXMgPSBDT05GSUdfU1lTX0NMS19GUkVROwotCX0gZWxzZQorCWVsc2UKICNlbmRpZgogI2lmZGVmIENPTkZJR19ERFJfQ0xLX0ZSRVEKIAkJc3lzX2luZm8tPmZyZXFfZGRyYnVzID0gQ09ORklHX0REUl9DTEtfRlJFUTsKQEAgLTEwNyw2ICsxMTIsMTMgQEAKIAltZW1fcGxsX3JhdCA9IChpbl9iZTMyKCZndXItPnJjd3NyWzBdKSA+PgogCQkJRlNMX0NPUkVORVRfUkNXU1IwX01FTV9QTExfUkFUX1NISUZUKQogCQkJJiBGU0xfQ09SRU5FVF9SQ1dTUjBfTUVNX1BMTF9SQVRfTUFTSzsKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9FUlJBVFVNX0EwMDcyMTIKKwlpZiAobWVtX3BsbF9yYXQgPT0gMCkgeworCQltZW1fcGxsX3JhdCA9IChpbl9iZTMyKCZndXItPnJjd3NyWzBdKSA+PgorCQkJRlNMX0NPUkVORVRfUkNXU1IwX01FTV9QTExfUkFUX1JFU1ZfU0hJRlQpICYKKwkJCUZTTF9DT1JFTkVUX1JDV1NSMF9NRU1fUExMX1JBVF9NQVNLOworCX0KKyNlbmRpZgogCS8qIFQ0MjQwL1Q0MTYwIFJldjIuMCBNRU1fUExMX1JBVCB1c2VzIGEgdmFsdWUgd2hpY2ggaXMgaGFsZiBvZgogCSAqIFQ0MjQwL1Q0MTYwIFJldjEuMC4gZWcuIEl0J3MgMTIgaW4gUmV2MS4wLCBob3dldmVyLCBmb3IgUmV2Mi4wCiAJICogaXQgdXNlcyA2LgpAQCAtMTUxLDggKzE2Myw4IEBACiAJCXN5c19pbmZvLT5mcmVxX3Byb2Nlc3NvcltjcHVdID0KIAkJCSBmcmVxX2NfcGxsW2NwbHhfcGxsXSAvIGNvcmVfY3BseF9wbGxfZGl2W2NfcGxsX3NlbF07CiAJfQotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19CNDg2MCkgfHwgZGVmaW5lZChDT05GSUdfUFBDX1QyMDgwKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfUFBDX1QyMDgxKQorI2lmIGRlZmluZWQoQ09ORklHX1BQQ19CNDg2MCkgfHwgZGVmaW5lZChDT05GSUdfUFBDX0I0NDIwKSB8fCBcCisJZGVmaW5lZChDT05GSUdfUFBDX1QyMDgwKSB8fCBkZWZpbmVkKENPTkZJR19QUENfVDIwODEpCiAjZGVmaW5lIEZNMV9DTEtfU0VMCTB4ZTAwMDAwMDAKICNkZWZpbmUgRk0xX0NMS19TSElGVAkyOQogI2Vsc2UKQEAgLTMzNiw2ICszNDgsMTAgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TWVNfRlNMX1FPUklRX0NIQVNTSVMyICovCiAKKyNpZmRlZiBDT05GSUdfVV9RRQorCXN5c19pbmZvLT5mcmVxX3FlID0gIHN5c19pbmZvLT5mcmVxX3N5c3RlbWJ1cyAvIDI7CisjZW5kaWYKKwogI2Vsc2UgLyogQ09ORklHX0ZTTF9DT1JFTkVUICovCiAJdWludCBwbGF0X3JhdGlvLCBlNTAwX3JhdGlvLCBoYWxmX2ZyZXFfc3lzdGVtYnVzOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3N0YXJ0LlMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvc3RhcnQuUwppbmRleCBkYmJkOGU1Li4wZTNjODZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvc3RhcnQuUworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvc3RhcnQuUwpAQCAtMjYsNiArMjYsOCBAQAogI3VuZGVmCU1TUl9LRVJORUwKICNkZWZpbmUgTVNSX0tFUk5FTCAoIE1TUl9NRSApCS8qIE1hY2hpbmUgQ2hlY2sgKi8KIAorI2RlZmluZSBMQVdfRU4JCTB4ODAwMDAwMDAKKwogI2lmIGRlZmluZWQoQ09ORklHX05BTkRfU1BMKSB8fCBcCiAJKGRlZmluZWQoQ09ORklHX1NQTF9CVUlMRCkgJiYgZGVmaW5lZChDT05GSUdfU1BMX0lOSVRfTUlOSU1BTCkpCiAjZGVmaW5lIE1JTklNQUxfU1BMCkBAIC03OCw2ICs4MCwxMyBAQAogCWxpCXIxLE1TUl9ERQogCW10bXNyIAlyMQogCisJLyoKKwkgKiBJZiB3ZSBnb3QgYW4gZVBBUFIgZGV2aWNlIHRyZWUgcG9pbnRlciBwYXNzZWQgaW4gYXMgcjMsIHdlIG5lZWQgdGhhdAorCSAqIGxhdGVyIGluIGNwdV9pbml0X2Vhcmx5X2YoKS4gU2F2ZSBpdCB0byBhIHNhZmUgcmVnaXN0ZXIgYmVmb3JlIHdlCisJICogY2xvYmJlciBpdCBzbyB0aGF0IHdlIGNhbiBmZXRjaCBpdCBmcm9tIHRoZXJlIGxhdGVyLgorCSAqLworCW1yCXIyNCwgcjMKKwogI2lmZGVmIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fQTAwNDUxMAogCW1mc3ByCXIzLFNQUk5fU1ZSCiAJcmx3aW5tCXIzLHIzLDAsMHhmZgpAQCAtMTE1LDcgKzEyNCw4IEBACiAjZW5kaWYKIAogCi0jaWYgZGVmaW5lZChDT05GSUdfU0VDVVJFX0JPT1QpICYmIGRlZmluZWQoQ09ORklHX0U1MDBNQykKKyNpZiBkZWZpbmVkKENPTkZJR19TRUNVUkVfQk9PVCkgJiYgZGVmaW5lZChDT05GSUdfRTUwME1DKSAmJiBcCisJIWRlZmluZWQoQ09ORklHX0U2NTAwKQogCS8qIElTQkMgdXNlcyBMMiBhcyBzdGFjay4KIAkgKiBEaXNhYmxlIEwyIGNhY2hlIGhlcmUgc28gdGhhdCB1LWJvb3QgY2FuIGVuYWJsZSBpdCBsYXRlcgogCSAqIGFzIHBhcnQgb2YgaXQncyBub3JtYWwgZmxvdwpAQCAtNDYwLDcgKzQ3MCw4IEBACiAyOgljbXB3CXIzLCByNAogCWJsdAkxYgogCi0jaWYgZGVmaW5lZChDT05GSUdfU1lTX1BQQ19FNTAwX0RFQlVHX1RMQikgJiYgIWRlZmluZWQoTUlOSU1BTF9TUEwpCisjaWYgZGVmaW5lZChDT05GSUdfU1lTX1BQQ19FNTAwX0RFQlVHX1RMQikgJiYgIWRlZmluZWQoTUlOSU1BTF9TUEwpICYmIFwKKwkhZGVmaW5lZChDT05GSUdfU0VDVVJFX0JPT1QpCiAvKgogICogVExCIGVudHJ5IGZvciBkZWJ1Z2dnaW5nIGluIEFTMQogICogQ3JlYXRlIHRlbXBvcmFyeSBUTEIgZW50cnkgaW4gQVMwIHRvIGhhbmRsZSBkZWJ1ZyBleGNlcHRpb24KQEAgLTQ4MSwxMiArNDkyLDYgQEAKIAkJMHhmZmMwMDAwMCwgTUFTM19TWHxNQVMzX1NXfE1BUzNfU1IsIFwKIAkJMCwgcjYKIAotI2VsaWYgIWRlZmluZWQoQ09ORklHX1NZU19SQU1CT09UKSAmJiBkZWZpbmVkKENPTkZJR19TRUNVUkVfQk9PVCkKLQljcmVhdGVfdGxiMV9lbnRyeSBDT05GSUdfU1lTX1BQQ19FNTAwX0RFQlVHX1RMQiwgXAotCQkwLCBCT09LRV9QQUdFU1pfMU0sIFwKLQkJQ09ORklHX1NZU19NT05JVE9SX0JBU0UsIE1BUzJfSXxNQVMyX0csIFwKLQkJQ09ORklHX1NZU19QQklfRkxBU0hfV0lORE9XLCBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgXAotCQkwLCByNgogI2Vsc2UKIC8qCiAgKiBUTEIgZW50cnkgaXMgY3JlYXRlZCBmb3IgSVZQUiArIElWT1IxNSB0byBtYXAgb24gdmFsaWQgT1AgY29kZSBhZGRyZXNzCkBAIC01NzQsNyArNTc5LDYgQEAKICNpZmRlZiBDT05GSUdfRlNMX0NPUkVORVQKIAogI2RlZmluZSBDQ1NSX0xBV0JBUkgwCShDT05GSUdfU1lTX0NDU1JCQVIgKyAweDEwMDApCi0jZGVmaW5lIExBV19FTgkJMHg4MDAwMDAwMAogI2RlZmluZSBMQVdfU0laRV80SwkweGIKICNkZWZpbmUgQ0NTUkJBUl9MQVdBUgkoTEFXX0VOIHwgKDB4MWUgPDwgMjApIHwgTEFXX1NJWkVfNEspCiAjZGVmaW5lIENDU1JBUl9DCTB4ODAwMDAwMDAJLyogQ29tbWl0ICovCkBAIC0xMTQyLDYgKzExNDYsMTAgQEAKIAltcglyMSxyMwkJLyogVHJhbnNmZXIgdG8gU1AocjEpICovCiAKIAlHRVRfR09UCisKKwkvKiBQYXNzIG91ciBwb3RlbnRpYWwgZVBBUFIgZGV2aWNlIHRyZWUgcG9pbnRlciB0byBjcHVfaW5pdF9lYXJseV9mICovCisJbXIJcjMsIHIyNAorCiAJYmwJY3B1X2luaXRfZWFybHlfZgogCiAJLyogc3dpdGNoIGJhY2sgdG8gQVMgPSAwICovCkBAIC0xNjQ0LDYgKzE2NTIsNyBAQAogCW1yCXIxMCxyNQkJLyogU2F2ZSBjb3B5IG9mIERlc3RpbmF0aW9uIEFkZHJlc3MJKi8KIAogCUdFVF9HT1QKKyNpZm5kZWYgQ09ORklHX1NQTF9TS0lQX1JFTE9DQVRFCiAJbXIJcjMscjUJCQkJLyogRGVzdGluYXRpb24gQWRkcmVzcwkqLwogCWxpcwlyNCxDT05GSUdfU1lTX01PTklUT1JfQkFTRUBoCQkvKiBTb3VyY2UgICAgICBBZGRyZXNzCSovCiAJb3JpCXI0LHI0LENPTkZJR19TWVNfTU9OSVRPUl9CQVNFQGwKQEAgLTE3MzQsNiArMTc0Myw3IEBACiAKIAltdGxyCXIwCiAJYmxyCQkJCS8qIE5FVkVSIFJFVFVSTlMhICovCisjZW5kaWYKIAkuZ2xvYmwJaW5fcmFtCiBpbl9yYW06CiAKQEAgLTE5NjUsMTAgKzE5NzUsNCBAQAogCWlzeW5jCiAKIAlibHIKLQotLmdsb2JsIHNldHVwX2l2b3JzCi1zZXR1cF9pdm9yczoKLQotI2luY2x1ZGUgImZpeGVkX2l2b3IuUyIKLQlibHIKICNlbmRpZiAvKiAhTUlOSU1BTF9TUEwgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC90MTA0MF9pZHMuYyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC90MTA0MF9pZHMuYwppbmRleCA2ODE2MGE5Li4xMDM0Y2Q0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdDEwNDBfaWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3QxMDQwX2lkcy5jCkBAIC00Niw2ICs0Niw3IEBACiAJU0VUX0RNQV9MSU9ETigyLCAyMjcpLAogCiAJLyogU0VUX05FWFVTX0xJT0ROKDU1NyksIC0tIG5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKwlTRVRfUUVfTElPRE4oNTU5KSwKIH07CiBpbnQgbGlvZG5fdGJsX3N6ID0gQVJSQVlfU0laRShsaW9kbl90YmwpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdGxiLmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdGxiLmMKaW5kZXggODc0OGVjZC4uMTI5ZWM2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3RsYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC90bGIuYwpAQCAtMjQsNyArMjQsNyBAQAogCQltdHNwcihNTVVDU1IwLCAweDIpOwogfQogCi12b2lkIGluaXRfdGxicyh2b2lkKQorX193ZWFrIHZvaWQgaW5pdF90bGJzKHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTIzNiwyMCArMjM2LDI2IEBACiB9CiAjZW5kaWYKIAotdW5zaWduZWQgaW50Ci1zZXR1cF9kZHJfdGxic19waHlzKHBoeXNfYWRkcl90IHBfYWRkciwgdW5zaWduZWQgaW50IG1lbXNpemVfaW5fbWVnKQordWludDY0X3QgdGxiX21hcF9yYW5nZSh1bG9uZyB2X2FkZHIsIHBoeXNfYWRkcl90IHBfYWRkciwgdWludDY0X3Qgc2l6ZSwKKwkJICAgICAgIGVudW0gdGxiX21hcF90eXBlIG1hcF90eXBlKQogewogCWludCBpOwogCXVuc2lnbmVkIGludCB0bGJfc2l6ZTsKLQl1bnNpZ25lZCBpbnQgd2ltZ2UgPSBNQVMyX007Ci0JdW5zaWduZWQgaW50IHJhbV90bGJfYWRkcmVzcyA9ICh1bnNpZ25lZCBpbnQpQ09ORklHX1NZU19ERFJfU0RSQU1fQkFTRTsKKwl1bnNpZ25lZCBpbnQgd2ltZ2U7CisJdW5zaWduZWQgaW50IHBlcm07CiAJdW5zaWduZWQgaW50IG1heF9jYW0sIHRzaXplX21hc2s7Ci0JdTY0IHNpemUsIG1lbXNpemUgPSAodTY0KW1lbXNpemVfaW5fbWVnIDw8IDIwOwogCisJaWYgKG1hcF90eXBlID09IFRMQl9NQVBfUkFNKSB7CisJCXBlcm0gPSBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUjsKKwkJd2ltZ2UgPSBNQVMyX007CiAjaWZkZWYgQ09ORklHX1NZU19QUENfRERSX1dJTUdFCi0Jd2ltZ2UgPSBDT05GSUdfU1lTX1BQQ19ERFJfV0lNR0U7CisJCXdpbWdlID0gQ09ORklHX1NZU19QUENfRERSX1dJTUdFOwogI2VuZGlmCi0Jc2l6ZSA9IG1pbihtZW1zaXplLCBDT05GSUdfTUFYX01FTV9NQVBQRUQpOworCX0gZWxzZSB7CisJCXBlcm0gPSBNQVMzX1NXfE1BUzNfU1I7CisJCXdpbWdlID0gTUFTMl9JfE1BUzJfRzsKKwl9CisKIAlpZiAoKG1mc3ByKFNQUk5fTU1VQ0ZHKSAmIE1NVUNGR19NQVZOKSA9PSBNTVVDRkdfTUFWTl9WMSkgewogCQkvKiBDb252ZXJ0ICg0Xm1heCkga0IgdG8gKDJebWF4KSBieXRlcyAqLwogCQltYXhfY2FtID0gKChtZnNwcihTUFJOX1RMQjFDRkcpID4+IDE2KSAmIDB4ZikgKiAyICsgMTA7CkBAIC0yNjEsMTEgKzI2NywxMSBAQAogCX0KIAogCWZvciAoaSA9IDA7IHNpemUgJiYgaSA8IDg7IGkrKykgewotCQlpbnQgcmFtX3RsYl9pbmRleCA9IGZpbmRfZnJlZV90bGJjYW0oKTsKKwkJaW50IHRsYl9pbmRleCA9IGZpbmRfZnJlZV90bGJjYW0oKTsKIAkJdTMyIGNhbXNpemUgPSBfX2lsb2cyX3U2NChzaXplKSAmIHRzaXplX21hc2s7Ci0JCXUzMiBhbGlnbiA9IF9faWxvZzIocmFtX3RsYl9hZGRyZXNzKSAmIHRzaXplX21hc2s7CisJCXUzMiBhbGlnbiA9IF9faWxvZzIodl9hZGRyKSAmIHRzaXplX21hc2s7CiAKLQkJaWYgKHJhbV90bGJfaW5kZXggPT0gLTEpCisJCWlmICh0bGJfaW5kZXggPT0gLTEpCiAJCQlicmVhazsKIAogCQlpZiAoYWxpZ24gPT0gLTIpIGFsaWduID0gbWF4X2NhbTsKQEAgLTI3NywxOCArMjgzLDI5IEBACiAKIAkJdGxiX3NpemUgPSBjYW1zaXplIC0gMTA7CiAKLQkJc2V0X3RsYigxLCByYW1fdGxiX2FkZHJlc3MsIHBfYWRkciwKLQkJCU1BUzNfU1h8TUFTM19TV3xNQVMzX1NSLCB3aW1nZSwKLQkJCTAsIHJhbV90bGJfaW5kZXgsIHRsYl9zaXplLCAxKTsKKwkJc2V0X3RsYigxLCB2X2FkZHIsIHBfYWRkciwgcGVybSwgd2ltZ2UsCisJCQkwLCB0bGJfaW5kZXgsIHRsYl9zaXplLCAxKTsKIAogCQlzaXplIC09IDFVTEwgPDwgY2Ftc2l6ZTsKLQkJbWVtc2l6ZSAtPSAxVUxMIDw8IGNhbXNpemU7Ci0JCXJhbV90bGJfYWRkcmVzcyArPSAxVUwgPDwgY2Ftc2l6ZTsKKwkJdl9hZGRyICs9IDFVTCA8PCBjYW1zaXplOwogCQlwX2FkZHIgKz0gMVVMIDw8IGNhbXNpemU7CiAJfQogCisJcmV0dXJuIHNpemU7Cit9CisKK3Vuc2lnbmVkIGludCBzZXR1cF9kZHJfdGxic19waHlzKHBoeXNfYWRkcl90IHBfYWRkciwKKwkJCQkgdW5zaWduZWQgaW50IG1lbXNpemVfaW5fbWVnKQoreworCXVuc2lnbmVkIGludCByYW1fdGxiX2FkZHJlc3MgPSAodW5zaWduZWQgaW50KUNPTkZJR19TWVNfRERSX1NEUkFNX0JBU0U7CisJdTY0IG1lbXNpemUgPSAodTY0KW1lbXNpemVfaW5fbWVnIDw8IDIwOworCisJbWVtc2l6ZSA9IG1pbihtZW1zaXplLCBDT05GSUdfTUFYX01FTV9NQVBQRUQpOworCW1lbXNpemUgPSB0bGJfbWFwX3JhbmdlKHJhbV90bGJfYWRkcmVzcywgcF9hZGRyLCBtZW1zaXplLCBUTEJfTUFQX1JBTSk7CisKIAlpZiAobWVtc2l6ZSkKIAkJcHJpbnRfc2l6ZShtZW1zaXplLCAiIGxlZnQgdW5tYXBwZWRcbiIpOworCiAJcmV0dXJuIG1lbXNpemVfaW5fbWVnOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kLmxkcwppbmRleCBkZjNiMGY5Li5kNzdhNmRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMKQEAgLTQsNiArNCwxMiBAQAogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCiAgKi8KIAorI2luY2x1ZGUgImNvbmZpZy5oIgkvKiBDT05GSUdfQk9BUkRESVIgKi8KKworI2lmbmRlZiBDT05GSUdfU1lTX01PTklUT1JfTEVOCisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JMHg4MDAwMAorI2VuZGlmCisKIE9VVFBVVF9BUkNIKHBvd2VycGMpCiAvKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwogICAgX19EWU5BTUlDID0gMDsgICAgKi8KQEAgLTc2LDcgKzgyLDcgQEAKICAgICBLRUVQKGFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9zdGFydC5vICguYm9vdHBnKSkKICAgfSA6dGV4dCA9IDB4ZmZmZgogCi0gIC4gPSBBRERSKC50ZXh0KSArIDB4ODAwMDA7CisgIC4gPSBBRERSKC50ZXh0KSArIENPTkZJR19TWVNfTU9OSVRPUl9MRU47CiAKICAgX19ic3Nfc3RhcnQgPSAuOwogICAuYnNzIChOT0xPQUQpICAgICAgIDoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3Qtc3BsLmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3Qtc3BsLmxkcwppbmRleCBhY2FhMDkzLi44NDUzZjNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1zcGwubGRzCkBAIC01Nyw2ICs1NywxNiBAQAogCS4gPSBBTElHTig4KTsKIAlfX2luaXRfYmVnaW4gPSAuOwogCV9faW5pdF9lbmQgPSAuOworI2lmZGVmIENPTkZJR19TUExfU0tJUF9SRUxPQ0FURQorCS4gPSBBTElHTig0KTsKKwlfX2Jzc19zdGFydCA9IC47CisJLmJzcyA6IHsKKwkJKiguc2JzcyopCisJCSooLmJzcyopCisJfQorCS4gPSBBTElHTig0KTsKKwlfX2Jzc19lbmQgPSAuOworI2VuZGlmCiAKIC8qIEZvciBpZmMsIGVsYmMsIGVzZGhjLCBlc3BpLCBhbGwgbmVlZCB0aGUgU1BMIHdpdGhvdXQgc2VjdGlvbiAucmVzZXR2ZWMgKi8KICNpZmRlZiBDT05GSUdfU1lTX01QQzg1WFhfTk9fUkVTRVRWRUMKQEAgLTY2LDExICs3NiwxNiBAQAogCX0gOnRleHQgPSAweGZmZmYKICNlbHNlCiAjaWYgZGVmaW5lZChDT05GSUdfRlNMX0lGQykgLyogUmVzdHJpY3QgYm9vdHBnIGF0IDRLIGJvdW5kcnkgZm9yIElGQyAqLwotCS5ib290cGcgQUREUigudGV4dCkgKyAweDEwMDAgOgorI2lmbmRlZiBCT09UX1BBR0VfT0ZGU0VUCisjZGVmaW5lIEJPT1RfUEFHRV9PRkZTRVQgMHgxMDAwCisjZW5kaWYKKwkuYm9vdHBnIEFERFIoLnRleHQpICsgQk9PVF9QQUdFX09GRlNFVCA6CiAJewogCQlhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvc3RhcnQubyAoLmJvb3RwZykKIAl9CisjaWZuZGVmIFJFU0VUX1ZFQ1RPUl9PRkZTRVQKICNkZWZpbmUgUkVTRVRfVkVDVE9SX09GRlNFVCAweDFmZmMgLyogSUZDIGhhcyA4SyBzcmFtICovCisjZW5kaWYKICNlbGlmIGRlZmluZWQoQ09ORklHX0ZTTF9FTEJDKQogI2RlZmluZSBSRVNFVF9WRUNUT1JfT0ZGU0VUIDB4ZmZjIC8qIExCQyBoYXMgNGsgc3JhbSAqLwogI2Vsc2UKQEAgLTgxLDYgKzk2LDcgQEAKIAl9ID0gMHhmZmZmCiAjZW5kaWYKIAorI2lmbmRlZiBDT05GSUdfU1BMX1NLSVBfUkVMT0NBVEUKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBic3Mgc2VnbWVudCBpc24ndCBsaW5rZWQgYXQgMHgwLCBvdGhlcndpc2UgaXRzCiAJICogYWRkcmVzcyB3b24ndCBiZSB1cGRhdGVkIGR1cmluZyByZWxvY2F0aW9uIGZpeHVwcy4KQEAgLTk1LDQgKzExMSw1IEBACiAJfQogCS4gPSBBTElHTig0KTsKIAlfX2Jzc19lbmQgPSAuOworI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzCmluZGV4IDJhZjRjODAuLjBiOTA4NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzCkBAIC0xMiw3ICsxMiwxMiBAQAogI2RlZmluZSBSRVNFVF9WRUNUT1JfQUREUkVTUwkweGZmZmZmZmZjCiAjZW5kaWYKIAorI2lmbmRlZiBDT05GSUdfU1lTX01PTklUT1JfTEVOCisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JMHg4MDAwMAorI2VuZGlmCisKIE9VVFBVVF9BUkNIKHBvd2VycGMpCitFTlRSWShfc3RhcnRfZTUwMCkKIAogUEhEUlMKIHsKQEAgLTg0LDcgKzg5LDcgQEAKICAgewogICAgIEtFRVAoYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3N0YXJ0Lm8gKC5ib290cGcpKQogICB9IDp0ZXh0ID0gMHhmZmZmCi0gIC4gPSBBRERSKC50ZXh0KSArIDB4ODAwMDA7CisgIC4gPSBBRERSKC50ZXh0KSArIENPTkZJR19TWVNfTU9OSVRPUl9MRU47CiAjZWxzZQogICAuYm9vdHBnIFJFU0VUX1ZFQ1RPUl9BRERSRVNTIC0gMHhmZmMgOgogICB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eC9jcHVfaW5pdC5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvY3B1X2luaXQuYwppbmRleCA1M2Y4NzNkLi45YzMxMDJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eC9jcHVfaW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4L2NwdV9pbml0LmMKQEAgLTI5LDEyICsyOSwxMCBAQAogICovCiB2b2lkIGNwdV9pbml0X2YgKHZvbGF0aWxlIGltbWFwX3QgKiBpbW1yKQogewotI2lmbmRlZiBDT05GSUdfTUJYCiAJdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1yLT5pbV9tZW1jdGw7CiAjIGlmZGVmIENPTkZJR19TWVNfUExQUkNSCiAJdWxvbmcgbWZtYXNrOwogIyBlbmRpZgotI2VuZGlmCiAJdWxvbmcgcmVnOwogCiAJLyogU1lQQ1IgLSBjb250YWlucyB3YXRjaGRvZyBjb250cm9sICgxMS05KSAqLwpAQCAtNzQsOCArNzIsNiBAQAogCiAJaW1tci0+aW1fY2xrcnN0ay5jYXJrX3BscHJjcmsgPSBLQVBXUl9LRVk7CiAKLSNpZm5kZWYgQ09ORklHX01CWAkJLyogTUJYIGJvYXJkIGRvZXMgdGhpbmdzIGRpZmZlcmVudCAqLwotCiAJLyogSWYgQ09ORklHX1NZU19QTFBSQ1IgKHNldCBpbiB0aGUgdmFyaW91cyAqX2NvbmZpZy5oIGZpbGVzKSB0cmllcyB0bwogCSAqIHNldCB0aGUgTUYgZmllbGQsIHRoZW4ganVzdCBjb3B5IENPTkZJR19TWVNfUExQUkNSIG92ZXIgY2FyX3BscHJjciwKIAkgKiBvdGhlcndpc2UgT1IgaW4gQ09ORklHX1NZU19QTFBSQ1Igc28gd2UgZG8gbm90IGNoYW5nZSB0aGUgY3VycmVudCBNRgpAQCAtMTQyLDcgKzEzOCw2IEBACiAgICAgZGVmaW5lZChDT05GSUdfTUhQQykJfHwgXAogICAgIGRlZmluZWQoQ09ORklHX1IzNjBNUEkpCXx8IFwKICAgICBkZWZpbmVkKENPTkZJR19STVUpCQl8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfUlBYQ0xBU1NJQykJfHwgXAogICAgIGRlZmluZWQoQ09ORklHX1JQWExJVEUpCXx8IFwKICAgICBkZWZpbmVkKENPTkZJR19TUEMxOTIwKQl8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfU1BEODIzVFMpCkBAIC0yMDMsOCArMTk4LDYgQEAKIAltZW1jdGwtPm1lbWNfYnI3ID0gQ09ORklHX1NZU19CUjdfUFJFTElNOwogI2VuZGlmCiAKLSNlbmRpZiAvKiAhIENPTkZJR19NQlggKi8KLQogCS8qCiAJICogUmVzZXQgQ1BNCiAJICovCkBAIC0yMTMsMjAgKzIwNiw2IEBACiAJCV9fYXNtX18gKCJlaWVpbyIpOwogCX0gd2hpbGUgKGltbXItPmltX2NwbS5jcF9jcGNyICYgQ1BNX0NSX0ZMRyk7CiAKLSNpZmRlZiBDT05GSUdfTUJYCi0JLyoKLQkgKiBvbiB0aGUgTUJYLCB0aGluZ3MgYXJlIGEgbGl0dGxlIGJpdCBkaWZmZXJlbnQ6Ci0JICogLSB3ZSBuZWVkIHRvIHJlYWQgdGhlIFZQRCB0byBnZXQgYm9hcmQgaW5mb3JtYXRpb24KLQkgKiAtIHRoZSBwbHByY3IgaXMgc2V0IHVwIGR5bmFtaWNhbGx5Ci0JICogLSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgaXMgc2V0IHVwIGR5bmFtaWNhbGx5Ci0JICovCi0JbWJ4X2luaXQgKCk7Ci0jZW5kaWYgLyogQ09ORklHX01CWCAqLwotCi0jaWZkZWYgQ09ORklHX1JQWENMQVNTSUMKLQlycHhjbGFzc2ljX2luaXQgKCk7Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1JQWExJVEUpICYmIGRlZmluZWQoQ09ORklHX0VOVl9JU19JTl9OVlJBTSkKIAlycHhsaXRlX2luaXQgKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4L3NjYy5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvc2NjLmMKaW5kZXggMmVmNzdiNC4uNWRhNjk3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvc2NjLmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvc2NjLmMKQEAgLTQ2MSwyMyArNDYxLDYgQEAKICNlcnJvciBDb25maWd1cmF0aW9uIEVycm9yOiBleGFjdGx5IE9ORSBvZiBQQl9FTkVUX1RFTkEsIFBDX0VORVRfVEVOQSBtdXN0IGJlIGRlZmluZWQKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQURTKSAmJiBkZWZpbmVkKENPTkZJR19NUEM4NjApCi0JLyoKLQkgKiBQb3J0IEMgaXMgdXNlZCB0byBjb250cm9sIHRoZSBQSFksTUM2ODE2MC4KLQkgKi8KLQlpbW1yLT5pbV9pb3BvcnQuaW9wX3BjZGlyIHw9Ci0JCShQQ19FTkVUX0VUSExPT1AgfCBQQ19FTkVUX1RQRkxETCB8IFBDX0VORVRfVFBTUUVMKTsKLQotCWltbXItPmltX2lvcG9ydC5pb3BfcGNkYXQgfD0gUENfRU5FVF9UUEZMREw7Ci0JaW1tci0+aW1faW9wb3J0LmlvcF9wY2RhdCAmPSB+KFBDX0VORVRfRVRITE9PUCB8IFBDX0VORVRfVFBTUUVMKTsKLQkqKCh1aW50ICopIEJDU1IxKSAmPSB+QkNTUjFfRVRIRU47Ci0jZW5kaWYgLyogTVBDODYwQURTICovCi0KLSNpZmRlZiBDT05GSUdfUlBYQ0xBU1NJQwotCSooKHVjaGFyICopIEJDU1IwKSAmPSB+QkNTUjBfRVRITFBCSzsKLQkqKCh1Y2hhciAqKSBCQ1NSMCkgfD0gKEJDU1IwX0VUSEVOIHwgQkNTUjBfQ09MVEVTVCB8IEJDU1IwX0ZVTExEUExYKTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1JQWExJVEUKIAkqKCh1Y2hhciAqKSBCQ1NSMCkgfD0gQkNTUjBfRVRIRU47CiAjZW5kaWYKQEAgLTQ5MiwxMCArNDc1LDYgQEAKIAlpbW1yLT5pbV9jcG0uY3BfcGJkYXQgJj0gfjB4MDAwMDAwMTA7CiAjZW5kaWYgLyogUVM4NjBUICovCiAKLSNpZmRlZiBDT05GSUdfTUJYCi0JYm9hcmRfZXRoZXJfaW5pdCAoKTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfTkVUVklBKQogI2lmIGRlZmluZWQoUEFfRU5FVF9QRE4pCiAJaW1tci0+aW1faW9wb3J0LmlvcF9wYXBhciAmPSB+UEFfRU5FVF9QRE47CkBAIC01MjgsOCArNTA3LDYgQEAKIAkgKi8KICNpZiBkZWZpbmVkIChDT05GSUdfRkFEUykKIAl1ZGVsYXkgKDEwMDAwKTsJCS8qIHdhaXQgMTAgbXMgKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX1JQWENMQVNTSUMpCi0JdWRlbGF5ICgxMDAwMDApOwkvKiB3YWl0IDEwMCBtcyAqLwogI2VuZGlmCiAKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4L3NlcmlhbC5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvc2VyaWFsLmMKaW5kZXggNGU4NDA0OS4uOTMyMTQxMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvc2VyaWFsLmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvc2VyaWFsLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogIyBlbmRpZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQURTKSB8fCBkZWZpbmVkKENPTkZJR19BRFMpCisjaWYgZGVmaW5lZChDT05GSUdfRkFEUykKIAkvKiBFbmFibGUgUlMyMzIgKi8KICNpZiBkZWZpbmVkKENPTkZJR184eHhfQ09OU19TTUMxKQogCSooKHVpbnQgKikgQkNTUjEpICY9IH5CQ1NSMV9SUzIzMkVOXzE7CkBAIC0xODIsNyArMTgyLDcgQEAKICNlbmRpZgogI2VuZGlmCS8qIENPTkZJR19GQURTICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19SUFhMSVRFKSB8fCBkZWZpbmVkKENPTkZJR19SUFhDTEFTU0lDKQorI2lmIGRlZmluZWQoQ09ORklHX1JQWExJVEUpCiAJLyogRW5hYmxlIE1vbml0b3IgUG9ydCBUcmFuc2NlaXZlciAqLwogCSooKHVjaGFyICopIEJDU1IwKSB8PSBCQ1NSMF9FTk1PTlhDVlIgOwogI2VuZGlmIC8qIENPTkZJR19SUFhMSVRFICovCkBAIC0yMjUsMTAgKzIyNSw2IEBACiAJdXAtPnNtY190c3RhdGUgPSAwOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NQlgpCi0JYm9hcmRfc2VyaWFsX2luaXQoKTsKLSNlbmRpZgkvKiBDT05GSUdfTUJYICovCi0KIAkvKiBTZXQgVUFSVCBtb2RlLCA4IGJpdCwgbm8gcGFyaXR5LCBvbmUgc3RvcC4KIAkgKiBFbmFibGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eC93bGtiZC5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvd2xrYmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E0MWMyZi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eC93bGtiZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogUGFvbG8gU2NhZmZhcmRpLCBBSVJWRU5UIFNBTSBzLnAuYSAtIFJJTUlOSShJVEFMWSksIGFyc2VuaW9AdGluLml0Ci0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGNvbmZpZy5oPgotCi0jaWZkZWYgQ09ORklHX1dMXzRQUE1fS0VZQk9BUkQKLQotLyogV0lQOiBXaXJlbGVzcyBrZXlib2FyZCBvbiBTTUMKLSAqLwotaW50CWRydl93bGtiZF9pbml0ICh2b2lkKQotewotICAgIHJldHVybiAwIDsKLX0KLQotI2VuZGlmCS8qIENPTkZJR19XTF80UFBNX0tFWUJPQVJEICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eHgvbGF3LmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eHgvbGF3LmMKaW5kZXggYTQwMTA4My4uMzNkNTNhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHh4L2xhdy5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4eC9sYXcuYwpAQCAtMjIxLDYgKzIyMSwzMiBAQAogfQogI2VuZGlmIC8qIG5vdCBTUEwgKi8KIAordm9pZCBkaXNhYmxlX25vbl9kZHJfbGF3cyh2b2lkKQoreworCWludCBpOworCWludCBpZDsKKwlmb3IgKGkgPSAwOyBpIDwgRlNMX0hXX05VTV9MQVdTOyBpKyspIHsKKwkJdTMyIGxhd2FyID0gaW5fYmUzMihMQVdBUl9BRERSKGkpKTsKKworCQlpZiAobGF3YXIgJiBMQVdfRU4pIHsKKwkJCWlkID0gKGxhd2FyICYgfkxBV19FTikgPj4gMjA7CisJCQlzd2l0Y2ggKGlkKSB7CisJCQljYXNlIExBV19UUkdUX0lGX0REUl8xOgorCQkJY2FzZSBMQVdfVFJHVF9JRl9ERFJfMjoKKwkJCWNhc2UgTEFXX1RSR1RfSUZfRERSXzM6CisJCQljYXNlIExBV19UUkdUX0lGX0REUl80OgorCQkJY2FzZSBMQVdfVFJHVF9JRl9ERFJfSU5UUkxWOgorCQkJY2FzZSBMQVdfVFJHVF9JRl9ERFJfSU5UTFZfMzQ6CisJCQljYXNlIExBV19UUkdUX0lGX0REUl9JTlRMVl8xMjM6CisJCQljYXNlIExBV19UUkdUX0lGX0REUl9JTlRMVl8xMjM0OgorCQkJCQkJY29udGludWU7CisJCQlkZWZhdWx0OgorCQkJCQkJZGlzYWJsZV9sYXcoaSk7CisJCQl9CisJCX0KKwl9Cit9CisKIHZvaWQgaW5pdF9sYXdzKHZvaWQpCiB7CiAJaW50IGk7CkBAIC0yMzMsNiArMjU5LDIzIEBACiAjZXJyb3IgRlNMX0hXX05VTV9MQVdTIGNhbiBub3QgYmUgZ3JlYXRlciB0aGFuIDMyIHcvbyBjb2RlIGNoYW5nZXMKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfU0VDVVJFX0JPT1QpICYmIGRlZmluZWQoQ09ORklHX0U1MDApICYmIFwKKwkJCQkJCSFkZWZpbmVkKENPTkZJR19FNTAwTUMpCisJLyogSVNCQyAoQm9vdCBST00pIGNyZWF0ZXMgYSBMQVcgMCBlbnRyeSBmb3Igbm9uIFBCTCBwbGF0Zm9ybXMsCisJICogd2hpY2ggaXMgbm90IGRpc2FibGVkIGJlZm9yZSB0cmFuc2ZlcnJpbmcgdGhlIGNvbnRyb2wgdG8gdWJvb3QuCisJICogRGlzYWJsZSB0aGUgTEFXIDAgZW50cnkgaGVyZS4KKwkgKi8KKwlkaXNhYmxlX2xhdygwKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX1NFQ1VSRV9CT09UKQorCS8qCisJICogaWYgYW55IG5vbiBERFIgTEFXcyBoYXMgYmVlbiBjcmVhdGVkIGVhcmxpZXIsIHJlbW92ZSB0aGVtIGJlZm9yZQorCSAqIExBVyB0YWJsZSBpcyBwYXJzZWQuCisJKi8KKwlkaXNhYmxlX25vbl9kZHJfbGF3cygpOworI2VuZGlmCisKIAkvKgogCSAqIEFueSBMQVdzIHRoYXQgd2VyZSBzZXQgdXAgYmVmb3JlIHdlIGJvb3RlZCBhc3N1bWUgdGhleSBhcmUgbWVhbnQgdG8KIAkgKiBiZSBhcm91bmQgYW5kIG1hcmsgdGhlbSB1c2VkLgpAQCAtMjQ0LDE1ICsyODcsNiBAQAogCQkJZ2QtPmFyY2gudXNlZF9sYXdzIHw9ICgxIDw8IGkpOwogCX0KIAotI2lmIChkZWZpbmVkKENPTkZJR19OQU5EX1VfQk9PVCkgJiYgIWRlZmluZWQoQ09ORklHX05BTkRfU1BMKSkgfHwgXAotCShkZWZpbmVkKENPTkZJR19TUEwpICYmICFkZWZpbmVkKENPTkZJR19TUExfQlVJTEQpKQotCS8qCi0JICogaW4gU1BMIGJvb3Qgd2UndmUgYWxyZWFkeSBwYXJzZWQgdGhlIGxhd190YWJsZSBhbmQgc2V0dXAgdGhvc2UgTEFXcwotCSAqIHNvIGRvbid0IGRvIGl0IGFnYWluLgotCSAqLwotCXJldHVybjsKLSNlbmRpZgotCiAJZm9yIChpID0gMDsgaSA8IG51bV9sYXdfZW50cmllczsgaSsrKSB7CiAJCWlmIChsYXdfdGFibGVbaV0uaW5kZXggPT0gLTEpCiAJCQlzZXRfbmV4dF9sYXcobGF3X3RhYmxlW2ldLmFkZHIsIGxhd190YWJsZVtpXS5zaXplLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvbmZpZ19tcGM4NXh4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY29uZmlnX21wYzg1eHguaAppbmRleCBkZjQ0NDUxLi44NjRlNzRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY29uZmlnX21wYzg1eHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY29uZmlnX21wYzg1eHguaApAQCAtMTksOCArMTksOCBAQAogICovCiAjZGVmaW5lIENPTkZJR19QUENfU1BJTlRBQkxFX0NPTVBBVElCTEUKIAotI2RlZmluZSBGU0xfRERSX1ZFUl80XzcJNDcKLSNkZWZpbmUgRlNMX0REUl9WRVJfNV8wCTUwCisjaW5jbHVkZSA8ZnNsX2RkcmNfdmVyc2lvbi5oPgorI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9ERFJfQkUKIAogLyogSVAgZW5kaWFubmVzcyAqLwogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9JRkNfQkUKQEAgLTE1NCw2ICsxNTQsNyBAQAogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9FUlJBVFVNX0lGQ19BMDAzMzk5CiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fQTAwNTEyNQogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9FUlJBVFVNX0kyQ19BMDA0NDQ3CisjZGVmaW5lIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fQTAwNzA3NQogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9FUlJBVFVNX0EwMDYyNjEKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfQTAwNDQ0N19TVlJfUkVWCTB4MTAKICNkZWZpbmUgQ09ORklHX0VTREhDX0hDX0JMS19BRERSCkBAIC00MDEsNiArNDAyLDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19OVU1fRk0xX0RUU0VDCTUKICNkZWZpbmUgQ09ORklHX1NZU19OVU1fRk0xXzEwR0VDCTEKICNkZWZpbmUgQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMJMQorI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9ERFJfVkVSCQlGU0xfRERSX1ZFUl80XzUKICNkZWZpbmUgQ09ORklHX1NZU19GTV9NVVJBTV9TSVpFCTB4MjgwMDAKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfVEJDTEtfRElWCTMyCiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX1BDSUVfQ09NUEFUCSJmc2wscW9yaXEtcGNpZS12Mi4yIgpAQCAtNDQyLDYgKzQ0NCw3IEBACiAjZGVmaW5lIENPTkZJR19TWVNfTlVNX0ZNMV8xMEdFQwkxCiAjZGVmaW5lIENPTkZJR19TWVNfTlVNX0ZNMl8xMEdFQwkxCiAjZGVmaW5lIENPTkZJR19OVU1fRERSX0NPTlRST0xMRVJTCTIKKyNkZWZpbmUgQ09ORklHX1NZU19GU0xfRERSX1ZFUgkJRlNMX0REUl9WRVJfNF80CiAjZGVmaW5lIENPTkZJR19VU0JfTUFYX0NPTlRST0xMRVJfQ09VTlQJMgogI2RlZmluZSBDT05GSUdfU1lTX0ZNX01VUkFNX1NJWkUJMHgyODAwMAogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9UQkNMS19ESVYJMTYKQEAgLTQ3Niw2ICs0NzksNyBAQAogI2RlZmluZSBDT05GSUdfU1lTX1A0MDgwX0VSUkFUVU1fUENJRV9BMDAzCiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fQTAwNTgxMgogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9FUlJBVFVNX0kyQ19BMDA0NDQ3CisjZGVmaW5lIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fQTAwNzA3NQogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9BMDA0NDQ3X1NWUl9SRVYJMHgyMAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfUDUwMjApIC8qIGFsc28gc3VwcG9ydHMgUDUwMTAgKi8KQEAgLTQ5MCw2ICs0OTQsNyBAQAogI2RlZmluZSBDT05GSUdfU1lTX05VTV9GTTFfRFRTRUMJNQogI2RlZmluZSBDT05GSUdfU1lTX05VTV9GTTFfMTBHRUMJMQogI2RlZmluZSBDT05GSUdfTlVNX0REUl9DT05UUk9MTEVSUwkyCisjZGVmaW5lIENPTkZJR19TWVNfRlNMX0REUl9WRVIJCUZTTF9ERFJfVkVSXzRfNAogI2RlZmluZSBDT05GSUdfVVNCX01BWF9DT05UUk9MTEVSX0NPVU5UCTIKICNkZWZpbmUgQ09ORklHX1NZU19GTV9NVVJBTV9TSVpFCTB4MjgwMDAKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfVEJDTEtfRElWCTMyCkBAIC01MjcsNiArNTMyLDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19OVU1fRk0yX0RUU0VDCTUKICNkZWZpbmUgQ09ORklHX1NZU19OVU1fRk0yXzEwR0VDCTEKICNkZWZpbmUgQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMJMgorI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9ERFJfVkVSCQlGU0xfRERSX1ZFUl80XzQKICNkZWZpbmUgQ09ORklHX1VTQl9NQVhfQ09OVFJPTExFUl9DT1VOVAkyCiAjZGVmaW5lIENPTkZJR19TWVNfRk1fTVVSQU1fU0laRQkweDI4MDAwCiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX1RCQ0xLX0RJVgkxNgpAQCAtNTUzLDYgKzU1OSw3IEBACiAjZGVmaW5lIENPTkZJR19UU0VDVjIKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfU0VDX0NPTVBBVAk0CiAjZGVmaW5lIENPTkZJR19OVU1fRERSX0NPTlRST0xMRVJTCTEKKyNkZWZpbmUgQ09ORklHX1NZU19GU0xfRERSX1ZFUgkJRlNMX0REUl9WRVJfNF80CiAjZGVmaW5lIENPTkZJR19VU0JfTUFYX0NPTlRST0xMRVJfQ09VTlQJMQogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9EU1BfTTJfUkFNX0FERFIJMHhiMDAwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9EU1BfQ0NTUkJBUl9ERUZBVUxUCTB4ZmY2MDAwMDAKQEAgLTU3MSw2ICs1NzgsNyBAQAogI2RlZmluZSBDT05GSUdfVFNFQ1YyCiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX1NFQ19DT01QQVQJNAogI2RlZmluZSBDT05GSUdfTlVNX0REUl9DT05UUk9MTEVSUwkyCisjZGVmaW5lIENPTkZJR19TWVNfRlNMX0REUl9WRVIJCUZTTF9ERFJfVkVSXzRfNgogI2RlZmluZSBDT05GSUdfVVNCX01BWF9DT05UUk9MTEVSX0NPVU5UCTEKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfRFNQX0REUl9BRERSCTB4NDAwMDAwMDAKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfRFNQX00yX1JBTV9BRERSCTB4YjAwMDAwMDAKQEAgLTY2OCw4ICs2NzYsMTAgQEAKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfRVJSQVRVTV9BMDA1ODcxCiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fQTAwNjM3OQogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9FUlJBVFVNX0EwMDY1OTMKKyNkZWZpbmUgQ09ORklHX1NZU19GU0xfRVJSQVRVTV9BMDA3MDc1CiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fQTAwNjQ3NQogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9FUlJBVFVNX0EwMDYzODQKKyNkZWZpbmUgQ09ORklHX1NZU19GU0xfRVJSQVRVTV9BMDA3MjEyCiAjZGVmaW5lIENPTkZJR19TWVNfQ0NTUkJBUl9ERUZBVUxUCTB4ZmUwMDAwMDAKIAogI2lmZGVmIENPTkZJR19QUENfQjQ4NjAKQEAgLTcwNCw2ICs3MTQsOSBAQAogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9RT1JJUV9DSEFTU0lTMgkvKiBGcmVlc2NhbGUgQ2hhc3NpcyBnZW5lcmF0aW9uIDIgKi8KICNkZWZpbmUgQ09ORklHX1NZU19GU0xfQ09SRVNfUEVSX0NMVVNURVIgMQogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9RTUFOX1YzCQkvKiBRTUFOIHZlcnNpb24gMyAqLworI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKyNkZWZpbmUgQ09ORklHX1NZU19GU0xfRERSQ19HRU40CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19QUENfVDEwNDApIHx8IGRlZmluZWQoQ09ORklHX1BQQ19UMTA0MikKICNkZWZpbmUgQ09ORklHX01BWF9DUFVTCQkJNAogI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX1QxMDIwKSB8fCBkZWZpbmVkKENPTkZJR19QUENfVDEwMjIpCkBAIC03MzYsNiArNzQ5LDkgQEAKICNkZWZpbmUgQ09ORklHX1NZU19DQ1NSQkFSX0RFRkFVTFQJMHhmZTAwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9FUlJBVFVNX0VTREhDMTExCiAjZGVmaW5lIEVTREhDSV9RVUlSS19CUk9LRU5fVElNRU9VVF9WQUxVRQorI2RlZmluZSBRRV9NVVJBTV9TSVpFCQkJMHg2MDAwVUwKKyNkZWZpbmUgTUFYX1FFX1JJU0MJCQkxCisjZGVmaW5lIFFFX05VTV9PRl9TTlVNCQkJMjgKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX1QyMDgwKSB8fCBkZWZpbmVkKENPTkZJR19QUENfVDIwODEpCiAjZGVmaW5lIENPTkZJR19FNjUwMApAQCAtNzc3LDYgKzc5Myw3IEBACiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX1BDSUVfQ09NUEFUCSJmc2wscW9yaXEtcGNpZS12My4wIgogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9VU0JfRFVBTF9QSFlfRU5BQkxFCiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX1VTQl9JTlRFUk5BTF9VVE1JX1BIWQorI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9FUlJBVFVNX0EwMDcyMTIKICNkZWZpbmUgQ09ORklHX1NZU19DQ1NSQkFSX0RFRkFVTFQJMHhmZTAwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9TRlBfVkVSXzNfMAogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9JU0JDX1ZFUgkJMgpAQCAtNzkzLDEwICs4MTAsMTUgQEAKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfU0VDX0NPTVBBVAk2CiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fRVNESEMxMTEKICNkZWZpbmUgQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMJMQorI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9ERFJfVkVSCQlGU0xfRERSX1ZFUl80XzYKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfSUZDX0JBTktfQ09VTlQJOAogI2RlZmluZSBDT05GSUdfU1lTX0NDU1JCQVJfREVGQVVMVAkweGZmNzAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fQTAwNTEyNQogCisjZWxpZiBkZWZpbmVkKENPTkZJR19RRU1VX0U1MDApCisjZGVmaW5lIENPTkZJR19NQVhfQ1BVUwkJCTEKKyNkZWZpbmUgQ09ORklHX1NZU19DQ1NSQkFSX0RFRkFVTFQJMHhlMDAwMDAwMAorCiAjZWxzZQogI2Vycm9yIFByb2Nlc3NvciB0eXBlIG5vdCBkZWZpbmVkIGZvciB0aGlzIHBsYXRmb3JtCiAjZW5kaWYKQEAgLTgxMyw3ICs4MzUsOCBAQAogCiAjaWYgIWRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSQ19HRU4xKSAmJiBcCiAJIWRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSQ19HRU4yKSAmJiBcCi0JIWRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSQ19HRU4zKQorCSFkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUkNfR0VOMykgJiYgXAorCSFkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUkNfR0VONCkKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfRERSQ19HRU4zCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZzbF9lcnJhdGEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mc2xfZXJyYXRhLmgKaW5kZXggYzk5ODJjYy4uNGViYTg1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZzbF9lcnJhdGEuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnNsX2VycmF0YS5oCkBAIC02MCw0ICs2MCwyMCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNfZXJyYXR1bV9hMDA3MDc1KHZvaWQpCit7CisJdTMyIHN2ciA9IGdldF9zdnIoKTsKKwl1MzIgc29jID0gU1ZSX1NPQ19WRVIoc3ZyKTsKKworCXN3aXRjaCAoc29jKSB7CisJY2FzZSBTVlJfQjQ4NjA6CisJY2FzZSBTVlJfQjQ0MjA6CisJCXJldHVybiBJU19TVlJfUkVWKHN2ciwgMSwgMCkgfHwgSVNfU1ZSX1JFVihzdnIsIDIsIDApOworCWNhc2UgU1ZSX1AxMDEwOgorCQlyZXR1cm4gSVNfU1ZSX1JFVihzdnIsIDEsIDApOworCWNhc2UgU1ZSX1A0MDgwOgorCQlyZXR1cm4gSVNfU1ZSX1JFVihzdnIsIDIsIDApIHx8IElTX1NWUl9SRVYoc3ZyLCAzLCAwKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnNsX2xpb2RuLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnNsX2xpb2RuLmgKaW5kZXggNDRiYzg4ZC4uZjY1OGJjYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZzbF9saW9kbi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mc2xfbGlvZG4uaApAQCAtOTksNiArOTksMTAgQEAKIAlTRVRfR1VUU19MSU9ETigiZnNsLGVzZGhjIiwgbGlvZG4sIHNkbW1jIyNzZGhjTnVtIyNsaW9kbnIsXAogCQlDT05GSUdfU1lTX01QQzg1eHhfRVNESENfT0ZGU0VUKQogCisjZGVmaW5lIFNFVF9RRV9MSU9ETihsaW9kbikgXAorCVNFVF9HVVRTX0xJT0ROKCJmc2wscWUiLCBsaW9kbiwgcWVsaW9kbnIsXAorCQlDT05GSUdfU1lTX01QQzg1eHhfUUVfT0ZGU0VUKQorCiAjZGVmaW5lIFNFVF9RTUFOX0xJT0ROKGxpb2RuKSBcCiAJU0VUX0xJT0ROX0VOVFJZXzEoImZzbCxxbWFuIiwgbGlvZG4sIG9mZnNldG9mKGNjc3JfcW1hbl90LCBsaW9kbnIpICsgXAogCQlDT05GSUdfU1lTX0ZTTF9RTUFOX09GRlNFVCwgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZzbF9zZWN1cmVfYm9vdC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZzbF9zZWN1cmVfYm9vdC5oCmluZGV4IDRjN2YwYjEuLjI5YmVmOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mc2xfc2VjdXJlX2Jvb3QuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnNsX3NlY3VyZV9ib290LmgKQEAgLTEwLDEwICsxMCwyMiBAQAogI2lmZGVmIENPTkZJR19TRUNVUkVfQk9PVAogI2lmIGRlZmluZWQoQ09ORklHX0ZTTF9DT1JFTkVUKQogI2RlZmluZSBDT05GSUdfU1lTX1BCSV9GTEFTSF9CQVNFCQkweGMwMDAwMDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19CU0M5MTMyUURTKQorI2RlZmluZSBDT05GSUdfU1lTX1BCSV9GTEFTSF9CQVNFCQkweGM4MDAwMDAwCiAjZWxzZQogI2RlZmluZSBDT05GSUdfU1lTX1BCSV9GTEFTSF9CQVNFCQkweGNlMDAwMDAwCiAjZW5kaWYKICNkZWZpbmUgQ09ORklHX1NZU19QQklfRkxBU0hfV0lORE9XCQkweGNmZjgwMDAwCiAKKyNpZiBkZWZpbmVkKENPTkZJR19CNDg2MFFEUykgfHwgXAorCWRlZmluZWQoQ09ORklHX1Q0MjQwUURTKSB8fCBcCisJZGVmaW5lZChDT05GSUdfVDIwODBRRFMpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19UMTA0MFFEUykgfHwgXAorCWRlZmluZWQoQ09ORklHX1QxMDQwUkRCKQorI2RlZmluZSBDT05GSUdfU1lTX0NQQ19SRUlOSVRfRgorI3VuZGVmIENPTkZJR19TWVNfSU5JVF9MM19BRERSCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9MM19BRERSCQkJMHhiZmYwMDAwMAorI2VuZGlmCisKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW1tYXBfNTEyeC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ltbWFwXzUxMnguaAppbmRleCBiZWQ4MGFhLi42MDg2YTczIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW1tYXBfNTEyeC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pbW1hcF81MTJ4LmgKQEAgLTU5LDcgKzU5LDYgQEAKIAl1OCByZXMyWzB4MjhdOwogCWxhdzUxMnhfdCBkZHJsYXc7CS8qIEREUiBMb2NhbCBBY2Nlc3MgV2luZG93ICovCiAJdTggcmVzM1sweDE4XTsKLQl1MzIgbWJ4YmFyOwkJLyogTUJYIEJhc2UgQWRkcmVzcyAqLwogCXUzMiBzcmFtYmFyOwkJLyogU1JBTSBCYXNlIEFkZHJlc3MgKi8KIAl1MzIgbmZjYmFyOwkJLyogTkZDIEJhc2UgQWRkcmVzcyAqLwogCXU4IHJlczRbMHgzNF07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW1tYXBfODV4eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ltbWFwXzg1eHguaAppbmRleCA0YjZmOWQwLi43NDFiODYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW1tYXBfODV4eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pbW1hcF84NXh4LmgKQEAgLTE1ODMsNiArMTU4MywxMiBAQAogdHlwZWRlZiBzdHJ1Y3QgY2Nzcl9ndXIgewogCXUzMglwb3JzcjE7CQkvKiBQT1Igc3RhdHVzIDEgKi8KIAl1MzIJcG9yc3IyOwkJLyogUE9SIHN0YXR1cyAyICovCisjaWZkZWYJQ09ORklHX1NZU19GU0xfU0lOR0xFX1NPVVJDRV9DTEsKKyNkZWZpbmUJRlNMX0RDRkdfUE9SU1IxX1NZU0NMS19TSElGVAkxNQorI2RlZmluZQlGU0xfRENGR19QT1JTUjFfU1lTQ0xLX01BU0sJMHgxCisjZGVmaW5lCUZTTF9EQ0ZHX1BPUlNSMV9TWVNDTEtfU0lOR0xFX0VOREVECTB4MQorI2RlZmluZQlGU0xfRENGR19QT1JTUjFfU1lTQ0xLX0RJRkYJMHgwCisjZW5kaWYKIAl1OAlyZXNfMDA4WzB4MjAtMHg4XTsKIAl1MzIJZ3Bwb3JjcjE7CS8qIEdlbmVyYWwtcHVycG9zZSBQT1IgY29uZmlndXJhdGlvbiAqLwogCXUzMglncHBvcmNyMjsJLyogR2VuZXJhbC1wdXJwb3NlIFBPUiBjb25maWd1cmF0aW9uIDIgKi8KQEAgLTE3MzksNiArMTc0NSw4IEBACiAKICNpZmRlZiBDT05GSUdfU1lTX0ZTTF9RT1JJUV9DSEFTU0lTMgogI2RlZmluZSBGU0xfQ09SRU5FVF9SQ1dTUjBfTUVNX1BMTF9SQVRfU0hJRlQJMTYKKy8qIHVzZSByZXNlcnZlZCBiaXRzIDE4fjIzIGFzIHNjcmF0Y2ggc3BhY2UgdG8gaG9zdCBERFIgUExMIHJhdGlvICovCisjZGVmaW5lIEZTTF9DT1JFTkVUX1JDV1NSMF9NRU1fUExMX1JBVF9SRVNWX1NISUZUCTgKICNkZWZpbmUgRlNMX0NPUkVORVRfUkNXU1IwX01FTV9QTExfUkFUX01BU0sJMHgzZgogI2lmIGRlZmluZWQoQ09ORklHX1BQQ19UNDI0MCkgfHwgZGVmaW5lZChDT05GSUdfUFBDX1Q0MTYwKQogI2RlZmluZSBGU0xfQ09SRU5FVDJfUkNXU1I0X1NSRFMxX1BSVENMCQkweGZjMDAwMDAwCkBAIC0xODg5LDcgKzE4OTcsOSBAQAogCXUzMglzYXRhMmxpb2RucjsJLyogU0FUQSAyIExJT0ROICovCiAJdTMyCXNhdGEzbGlvZG5yOwkvKiBTQVRBIDMgTElPRE4gKi8KIAl1MzIJc2F0YTRsaW9kbnI7CS8qIFNBVEEgNCBMSU9ETiAqLwotCXU4CXJlczIyWzMyXTsKKwl1OCAgICAgIHJlczIyWzI0XTsKKwl1MzIgICAgIHFlbGlvZG5yOyAgICAgICAvKiBRRSBMSU9ETiAqLworCXU4ICAgICAgcmVzXzU3Y1s0XTsKIAl1MzIJZG1hMWxpb2RucjsJLyogRE1BIDEgTElPRE4gKi8KIAl1MzIJZG1hMmxpb2RucjsJLyogRE1BIDIgTElPRE4gKi8KIAl1MzIJZG1hM2xpb2RucjsJLyogRE1BIDMgTElPRE4gKi8KQEAgLTI4NzcsNiArMjg4Nyw3IEBACiAjZGVmaW5lIENPTkZJR19TWVNfTVBDODV4eF9MQkNfT0ZGU0VUCQkweDEyNDAwMAogI2RlZmluZSBDT05GSUdfU1lTX01QQzg1eHhfSUZDX09GRlNFVAkJMHgxMjQwMDAKICNkZWZpbmUgQ09ORklHX1NZU19NUEM4NXh4X0dQSU9fT0ZGU0VUCQkweDEzMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX01QQzg1eHhfUUVfT0ZGU0VUCQkweDE0MDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9DT1JFTkVUX1JNQU5fT0ZGU0VUCTB4MWUwMDAwCiAjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9RT1JJUV9DSEFTU0lTMikgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19CNDg2MClcCiAJJiYgIWRlZmluZWQoQ09ORklHX1BQQ19CNDQyMCkKQEAgLTMxNTEsNCArMzE2MiwyNiBAQAogI2RlZmluZQlEQ1NSX0RDRkdfRUNDX0RJU0FCTEVfVVNCMgkweDAwMDA0MDAwCiAJdTggIHJlc181MjRbMHgxMDAwIC0gMHg1MjRdOyAvKiAweDUyNCAtIDB4MTAwMCAqLwogfTsKKworI2RlZmluZSBDT05GSUdfU1lTX01QQzg1eHhfU0NGRyBcCisJKENPTkZJR19TWVNfSU1NUiArIENPTkZJR19TWVNfTVBDODV4eF9TQ0ZHX09GRlNFVCkKKyNkZWZpbmUgQ09ORklHX1NZU19NUEM4NXh4X1NDRkdfT0ZGU0VUCTB4ZmMwMDAKKy8qIFRoZSBzdXBwbGVtZW50IGNvbmZpZ3VyYXRpb24gdW5pdCByZWdpc3RlciAqLworc3RydWN0IGNjc3Jfc2NmZyB7CisJdTMyIGRwc2xwY3I7CS8qIDB4MDAwIERlZXAgU2xlZXAgQ29udHJvbCByZWdpc3RlciAqLworCXUzMiB1c2IxZHBzbHBjc3I7LyogMHgwMDQgVVNCMSBEZWVwIFNsZWVwIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyICovCisJdTMyIHVzYjJkcHNscGNzcjsvKiAweDAwOCBVU0IyIERlZXAgU2xlZXAgQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgKi8KKwl1MzIgZm1jbGtkcHNscGNyOy8qIDB4MDBjIEZNIENsb2NrIERlZXAgU2xlZXAgQ29udHJvbCByZWdpc3RlciAqLworCXUzMiByZXMxWzRdOworCXUzMiBlc2dtaWlzZWxjcjsvKiAweDAyMCBFdGhlcm5ldCBTd2l0Y2ggU0dNSUkgU2VsZWN0IENvbnRyb2wgcmVnICovCisJdTMyIHJlczI7CisJdTMyIHBpeGNsa2NyOwkvKiAweDAyOCBQaXhlbCBDbG9jayBDb250cm9sIHJlZ2lzdGVyICovCisJdTMyIHJlczNbMjQ1XTsKKwl1MzIgcWVpb2Nsa2NyOwkvKiAweDQwMCBRVUlDQyBFbmdpbmUgSU8gQ2xvY2sgQ29udHJvbCByZWdpc3RlciAqLworCXUzMiBlbWlpb2NyOwkvKiAweDQwNCBFTUkgTURJTyBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyIHNkaGNpb3ZzZWxjcjsvKiAweDQwOCBTREhDIElPIFZTRUwgQ29udHJvbCByZWdpc3RlciAqLworCXUzMiBxbWlmcnN0Y3I7CS8qIDB4NDBjIFFNQU4gSW50ZXJmYWNlIFJlc2V0IENvbnRyb2wgcmVnaXN0ZXIgKi8KKwl1MzIgcmVzNFs2MF07CisJdTMyIHNwYXJlY3JbOF07CS8qIDB4NTAwIFNwYXJlIENvbnRyb2wgcmVnaXN0ZXIoMC03KSAqLworfTsKICNlbmRpZiAvKl9fSU1NQVBfODV4eF9fKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaAppbmRleCBjYWRhZWVmLi41YWE5MTZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oCkBAIC01MDksNiArNTA5LDE0IEBACiBleHRlcm4gdW5zaWduZWQgaW50IHNldHVwX2Rkcl90bGJzKHVuc2lnbmVkIGludCBtZW1zaXplX2luX21lZyk7CiBleHRlcm4gdm9pZCBjbGVhcl9kZHJfdGxicyh1bnNpZ25lZCBpbnQgbWVtc2l6ZV9pbl9tZWcpOwogCitlbnVtIHRsYl9tYXBfdHlwZSB7CisJVExCX01BUF9SQU0sCisJVExCX01BUF9JTywKK307CisKK2V4dGVybiB1aW50NjRfdCB0bGJfbWFwX3JhbmdlKHVsb25nIHZfYWRkciwgcGh5c19hZGRyX3QgcF9hZGRyLCB1aW50NjRfdCBzaXplLAorCQkJICAgICAgZW51bSB0bGJfbWFwX3R5cGUgbWFwX3R5cGUpOworCiBleHRlcm4gdm9pZCB3cml0ZV90bGIodTMyIF9tYXMwLCB1MzIgX21hczEsIHUzMiBfbWFzMiwgdTMyIF9tYXMzLCB1MzIgX21hczcpOwogCiAjZGVmaW5lIFNFVF9UTEJfRU5UUlkoX3RsYiwgX2VwbiwgX3JwbiwgX3Blcm1zLCBfd2ltZ2UsIF90cywgX2VzZWwsIF9zeiwgX2lwcm90KSBcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdS1ib290LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdS1ib290LmgKaW5kZXggM2MyODQyMC4uZjRkNGE2YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3UtYm9vdC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91LWJvb3QuaApAQCAtMTA2LDkgKzEwNiw2IEBACiAJdW5zaWduZWQgaW50CWJpX29wYmZyZXE7CQkvKiBPUEIgY2xvY2sgaW4gSHogKi8KIAlpbnQJCWJpX2lpY19mYXN0WzJdOwkJLyogVXNlIGZhc3QgaTJjIG1vZGUgKi8KICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX05YODIzKQotCXVuc2lnbmVkIGNoYXIJYmlfc2VybnVtWzhdOwotI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfNHh4KQogI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfNDYwRVgpIHx8IGRlZmluZWQoQ09ORklHXzQ2MEdUKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9ib2FyZC5jIGIvYXJjaC9wb3dlcnBjL2xpYi9ib2FyZC5jCmluZGV4IGY4NmM2ZjMuLjhiMDNkM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvYm9hcmQuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL2JvYXJkLmMKQEAgLTM0Myw2ICszNDMsMTMgQEAKICNpZmRlZiBDT05GSUdfUFJBTQogCXVsb25nIHJlZzsKICNlbmRpZgorI2lmZGVmIENPTkZJR19ERUVQX1NMRUVQCisJY29uc3QgY2Nzcl9ndXJfdCAqZ3VyID0gKHZvaWQgX19pb21lbSAqKShDT05GSUdfU1lTX01QQzg1eHhfR1VUU19BRERSKTsKKwlzdHJ1Y3QgY2Nzcl9zY2ZnICpzY2ZnID0gKHZvaWQgKilDT05GSUdfU1lTX01QQzg1eHhfU0NGRzsKKwl1MzIgc3RhcnRfYWRkcjsKKwl0eXBlZGVmIHZvaWQgKCpmdW5jX3QpKHZvaWQpOworCWZ1bmNfdCBrZXJuZWxfcmVzdW1lOworI2VuZGlmCiAKIAkvKiBQb2ludGVyIGlzIHdyaXRhYmxlIHNpbmNlIHdlIGFsbG9jYXRlZCBhIHJlZ2lzdGVyIGZvciBpdCAqLwogCWdkID0gKGdkX3QgKikgKENPTkZJR19TWVNfSU5JVF9SQU1fQUREUiArIENPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUKTsKQEAgLTM2MCw2ICszNjcsMTUgQEAKIAkJaWYgKCgqaW5pdF9mbmNfcHRyKSAoKSAhPSAwKQogCQkJaGFuZygpOwogCisjaWZkZWYgQ09ORklHX0RFRVBfU0xFRVAKKwkvKiBKdW1wIHRvIGtlcm5lbCBpbiBkZWVwIHNsZWVwIGNhc2UgKi8KKwlpZiAoaW5fYmUzMigmZ3VyLT5zY3J0c3JbMF0pICYgKDEgPDwgMykpIHsKKwkJc3RhcnRfYWRkciA9IGluX2JlMzIoJnNjZmctPnNwYXJlY3JbMV0pOworCQlrZXJuZWxfcmVzdW1lID0gKGZ1bmNfdClzdGFydF9hZGRyOworCQlrZXJuZWxfcmVzdW1lKCk7CisJfQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfUE9TVAogCXBvc3RfYm9vdG1vZGVfaW5pdCgpOwogCXBvc3RfcnVuKE5VTEwsIFBPU1RfUk9NIHwgcG9zdF9ib290bW9kZV9nZXQoTlVMTCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jcHUvc2gyL2NhY2hlLmMgYi9hcmNoL3NoL2NwdS9zaDIvY2FjaGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA5M2U5OC4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2NwdS9zaDIvY2FjaGUuYworKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDcKLSAqIFlvc2hpaGlybyBTaGltb2RhIDxzaGltb2RhLnlvc2hpaGlyb0ByZW5lc2FzLmNvbT4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggTm9ib2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotLyoKLSAqIEp1bXAgdG8gUDIgYXJlYS4KLSAqIFdoZW4gaGFuZGxpbmcgVExCIG9yIGNhY2hlcywgd2UgbmVlZCB0byBkbyBpdCBmcm9tIFAyIGFyZWEuCi0gKi8KLSNkZWZpbmUganVtcF90b19QMigpCQkJXAotZG8gewkJCQkJXAotCXVuc2lnbmVkIGxvbmcgX19kdW1teTsJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCVwKLQkJIm1vdi5sICAxZiwgJTBcblx0IglcCi0JCSJvciAgICAgJTEsICUwXG5cdCIJXAotCQkiam1wICAgIEAlMFxuXHQiCVwKLQkJIiBub3Bcblx0IgkJXAotCQkiLmJhbGlnbiA0XG4iCQlcCi0JCSIxOiAgICAgLmxvbmcgMmZcbiIJXAotCQkiMjoiCQkJXAotCQk6ICI9JnIiIChfX2R1bW15KQlcCi0JCTogInIiICgweDIwMDAwMDAwKSk7CVwKLX0gd2hpbGUgKDApCi0KLS8qCi0gKiBCYWNrIHRvIFAxIGFyZWEuCi0gKi8KLSNkZWZpbmUgYmFja190b19QMSgpCQkJXAotZG8gewkJCQkJXAotCXVuc2lnbmVkIGxvbmcgX19kdW1teTsJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCVwKLQkJIm5vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcFxuXHQiCVwKLQkJIm1vdi5sICAxZiwgJTBcblx0IglcCi0JCSJqbXAgICAgQCUwXG5cdCIJXAotCQkiIG5vcFxuXHQiCQlcCi0JCSIuYmFsaWduIDRcbiIJCVwKLQkJIjE6ICAgICAubG9uZyAyZlxuIglcCi0JCSIyOiIJCQlcCi0JCTogIj0mciIgKF9fZHVtbXkpKTsJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBDQUNIRV9WQUxJRAkxCi0jZGVmaW5lIENBQ0hFX1VQREFURUQJMgotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2FjaGVfd2JhY2tfYWxsKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyLCBkYXRhLCBpLCBqOwotCi0JanVtcF90b19QMigpOwotCWZvciAoaSA9IDA7IGkgPCBDQUNIRV9PQ19OVU1fRU5UUklFUzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBDQUNIRV9PQ19OVU1fV0FZUzsgaisrKSB7Ci0JCQlhZGRyID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWQotCQkJCXwgKGogPDwgQ0FDSEVfT0NfV0FZX1NISUZUKQotCQkJCXwgKGkgPDwgQ0FDSEVfT0NfRU5UUllfU0hJRlQpOwotCQkJZGF0YSA9IGlubChhZGRyKTsKLQkJCWlmIChkYXRhICYgQ0FDSEVfVVBEQVRFRCkgewotCQkJCWRhdGEgJj0gfkNBQ0hFX1VQREFURUQ7Ci0JCQkJb3V0bChkYXRhLCBhZGRyKTsKLQkJCX0KLQkJfQotCX0KLQliYWNrX3RvX1AxKCk7Ci19Ci0KLQotI2RlZmluZSBDQUNIRV9FTkFCTEUJMAotI2RlZmluZSBDQUNIRV9ESVNBQkxFCTEKLQotaW50IGNhY2hlX2NvbnRyb2wodW5zaWduZWQgaW50IGNtZCkKLXsKLQl1bnNpZ25lZCBsb25nIGNjcjsKLQotCWp1bXBfdG9fUDIoKTsKLQljY3IgPSBpbmwoQ0NSKTsKLQotCWlmIChjY3IgJiBDQ1JfQ0FDSEVfRU5BQkxFKQotCQljYWNoZV93YmFja19hbGwoKTsKLQotCWlmIChjbWQgPT0gQ0FDSEVfRElTQUJMRSkKLQkJb3V0bChDQ1JfQ0FDSEVfU1RPUCwgQ0NSKTsKLQllbHNlCi0JCW91dGwoQ0NSX0NBQ0hFX0lOSVQsIENDUik7Ci0JYmFja190b19QMSgpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2NwdS9sZW9uMi9jb25maWcubWsgYi9hcmNoL3NwYXJjL2NwdS9sZW9uMi9jb25maWcubWsKaW5kZXggZjliMGQzNC4uYzQ0YjA5MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9jcHUvbGVvbjIvY29uZmlnLm1rCisrKyBiL2FyY2gvc3BhcmMvY3B1L2xlb24yL2NvbmZpZy5tawpAQCAtNyw0ICs3LDQgQEAKIAogUExBVEZPUk1fUkVMRkxBR1MgKz0gLWZQSUMKIAotUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfTEVPTgorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfTEVPTiAtRENPTkZJR19MRU9OMgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9jcHUvbGVvbjMvY29uZmlnLm1rIGIvYXJjaC9zcGFyYy9jcHUvbGVvbjMvY29uZmlnLm1rCmluZGV4IGY5YjBkMzQuLmNhNmM5YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvY3B1L2xlb24zL2NvbmZpZy5taworKysgYi9hcmNoL3NwYXJjL2NwdS9sZW9uMy9jb25maWcubWsKQEAgLTcsNCArNyw0IEBACiAKIFBMQVRGT1JNX1JFTEZMQUdTICs9IC1mUElDCiAKLVBMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHX0xFT04KK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHX0xFT04gLURDT05GSUdfTEVPTjMKZGlmZiAtLWdpdCBhL2JvYXJkL01hcnZlbGwvY29tbW9uL2VjY3Rlc3QuYyBiL2JvYXJkL01hcnZlbGwvY29tbW9uL2VjY3Rlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE5YTJhNC4uMDAwMDAwMAotLS0gYS9ib2FyZC9NYXJ2ZWxsL2NvbW1vbi9lY2N0ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpZmRlZiBFQ0NfVEVTVAotc3RhdGljIGlubGluZSB2b2lkIGVjY19vZmYgKHZvaWQpCi17Ci0JKih2b2xhdGlsZSBpbnQgKikgKElOVEVSTkFMX1JFR19CQVNFX0FERFIgKyAweDRiNCkgJj0gfjB4MDAyMDAwMDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlY2Nfb24gKHZvaWQpCi17Ci0JKih2b2xhdGlsZSBpbnQgKikgKElOVEVSTkFMX1JFR19CQVNFX0FERFIgKyAweDRiNCkgfD0gMHgwMDIwMDAwMDsKLX0KLQotc3RhdGljIGludCBwdXRzaGV4IChjb25zdCBjaGFyICpidWYsIGludCBsZW4pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJcHJpbnRmICgiJTAyeCIsIGJ1ZltpXSk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNoYXJfbWVtY3B5ICh2b2lkICpkLCBjb25zdCB2b2lkICpzLCBpbnQgbGVuKQotewotCWludCBpOwotCWNoYXIgKmNkID0gZDsKLQljb25zdCBjaGFyICpjcyA9IHM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJKihjZCsrKSA9ICooY3MrKyk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1lbW9yeV90ZXN0IChjaGFyICpidWYpCi17Ci0JY29uc3QgY2hhciBzcmNbXVsxNl0gPSB7Ci0JCXswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSwKLQkJezB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCi0JCSAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxfSwKLQkJezB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsCi0JCSAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyfSwKLQkJezB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsCi0JCSAweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDA0fSwKLQkJezB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsCi0JCSAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4fSwKLQkJezB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JCSAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwfSwKLQkJezB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsCi0JCSAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwfSwKLQkJezB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsCi0JCSAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwfSwKLQkJezB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsCi0JCSAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwfSwKLQkJezB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsCi0JCSAweDU1LCAweDU1LCAweDU1LCAweDU1LCAweDU1LCAweDU1fSwKLQkJezB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCSAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhfSwKLQkJezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JCSAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfQotCX07Ci0JY29uc3QgaW50IGZvb1tdID0geyAwIH07Ci0JaW50IGksIGosIGE7Ci0KLQlwcmludGYgKCJcbnRlc3QgQCAlZCAlcFxuIiwgZm9vWzBdLCBidWYpOwotCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7Ci0JCWZvciAoYSA9IDA7IGEgPCA4OyBhKyspIHsKLQkJCWNvbnN0IGNoYXIgKnMgPSBzcmNbaV0gKyBhOwotCQkJaW50IGFsaWduID0gKHVuc2lnbmVkKSAocykgJiAweDc7Ci0KLQkJCS8qIGVjY19vZmYoKTsgKi8KLQkJCW1lbWNweSAoYnVmLCBzLCA4KTsKLQkJCS8qIGVjY19vbigpOyAqLwotCQkJcHV0c2hleCAocywgOCk7Ci0JCQlpZiAobWVtY21wIChidWYsIHMsIDgpKSB7Ci0JCQkJcHV0YyAoJ1xuJyk7Ci0JCQkJcHV0c2hleCAoYnVmLCA4KTsKLQkJCQlwcmludGYgKCIgW0ZBSUxdICglcCkgYWxpZ249JWRcbiIsIHMsIGFsaWduKTsKLQkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7Ci0JCQkJCXNbal0gPT0gYnVmW2pdID8gcHV0cyAoIiAgIikgOgotCQkJCQkJcHJpbnRmICgiJTAyeCIsCi0JCQkJCQkJKHNbal0pIF4gKGJ1ZltqXSkpOwotCQkJCX0KLQkJCQlwdXRjICgnXG4nKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRmICgiIFtQQVNTXSAoJXApIGFsaWduPSVkXG4iLCBzLCBhbGlnbik7Ci0JCQl9Ci0JCQkvKiBlY2Nfb2ZmKCk7ICovCi0JCQljaGFyX21lbWNweSAoYnVmLCBzLCA4KTsKLQkJCS8qIGVjY19vbigpOyAqLwotCQkJcHV0c2hleCAocywgOCk7Ci0JCQlpZiAobWVtY21wIChidWYsIHMsIDgpKSB7Ci0JCQkJcHV0YyAoJ1xuJyk7Ci0JCQkJcHV0c2hleCAoYnVmLCA4KTsKLQkJCQlwcmludGYgKCIgW0ZBSUxdICglcCkgYWxpZ249JWRcbiIsIHMsIGFsaWduKTsKLQkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7Ci0JCQkJCXNbal0gPT0gYnVmW2pdID8gcHV0cyAoIiAgIikgOgotCQkJCQkJcHJpbnRmICgiJTAyeCIsCi0JCQkJCQkJKHNbal0pIF4gKGJ1ZltqXSkpOwotCQkJCX0KLQkJCQlwdXRjICgnXG4nKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRmICgiIFtQQVNTXSAoJXApIGFsaWduPSVkXG4iLCBzLCBhbGlnbik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvUlBYQ2xhc3NpYy9NYWtlZmlsZSBiL2JvYXJkL1JQWENsYXNzaWMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZGI3NTQuLjAwMDAwMDAKLS0tIGEvYm9hcmQvUlBYQ2xhc3NpYy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgotIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotIwotIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSMKLQotb2JqLXkJPSBSUFhDbGFzc2ljLm8gZmxhc2gubyBlY2N4Lm8KZGlmZiAtLWdpdCBhL2JvYXJkL1JQWENsYXNzaWMvUkVBRE1FIGIvYm9hcmQvUlBYQ2xhc3NpYy9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwM2Y2NzAuLjAwMDAwMDAKLS0tIGEvYm9hcmQvUlBYQ2xhc3NpYy9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIFBvcnRpbmcgVS1Cb290IG9udG8gUlBYQ2xhc3NpYyBMRl9CVzMxIGJvYXJkCi0jIFdyaXR0ZW4gYnkgUGllcnJlIEFVQkVSVAotIyBFLU1haWwgIHAuYXViZXJ0QHN0YXVibGkuY29tCi0jIFN0w6R1YmxpIEZhdmVyZ2VzIC0gPHd3dy5zdGF1YmxpLmNvbT4KLSMKLSMgU2VwdC4gMjAgMjAwMQotIwotIyBDcm9zcyBjb21waWxlOiBNb250YXZpc3RhIEhhcmRoYXQgcG9ydGVkIG9uIEhQLVVYIDEwLjIwCi0jCi0KLUZsYXNoIG1lbW9yaWVzIDogQU0yOURMMzIzQiAoMiBiYW5rcyBmbGFzaCBtZW1vcmllcykgMTYgTWIgZnJvbSAweGZmMDAwMDAwCi1EUkFNIDogMTYgTWIgZnJvbSAwCi1OVlJBTSA6IDUxMiBrYiBmcm9tIDB4ZmEwMDAwMDAKLQotCi0tIGVudmlyb25tZW50IGlzIHN0b3JlZCBpbiBOVlJBTQotLSBNYWMgYWRkcmVzcyBpcyByZWFkIGZyb20gRUVQUk9NCi0tIGV0aGVybmV0IG9uIFNDQzEgb3IgZmFzdCBldGhlcm5ldCBvbiBGRUMgYXJlIHJ1bm5pbmcgKGRlcGVuZGluZyBvbiB0aGUKLSAgY29uZmlndXJhdGlvbiBmbGFnIENPTkZJR19GRUNfRU5FVCkKZGlmZiAtLWdpdCBhL2JvYXJkL1JQWENsYXNzaWMvUlBYQ2xhc3NpYy5jIGIvYm9hcmQvUlBYQ2xhc3NpYy9SUFhDbGFzc2ljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YjcyMzIuLjAwMDAwMDAKLS0tIGEvYm9hcmQvUlBYQ2xhc3NpYy9SUFhDbGFzc2ljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotLyoKLSAqIChDKQlDb3B5cmlnaHQgMjAwMQotICogU3TDpHVibGkgRmF2ZXJnZXMgLSA8d3d3LnN0YXVibGkuY29tPgotICogUGllcnJlIEFVQkVSVCAgcC5hdWJlcnRAc3RhdWJsaS5jb20KLSAqIFUtQm9vdCBwb3J0IG9uIFJQWENsYXNzaWMgTEYgKENMTEZfQlczMSkgYm9hcmQKLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGkyYy5oPgotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2luY2x1ZGUgPG1wYzh4eC5oPgotI2luY2x1ZGUgPG5ldC5oPgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBsb25nIGludCBkcmFtX3NpemUgKGxvbmcgaW50LCBsb25nIGludCAqLCBsb25nIGludCk7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBhc2NoZXhfdG9fYnl0ZSAodW5zaWduZWQgY2hhciAqY3ApOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNkZWZpbmUgX05PVF9VU0VEXwkweEZGRkZDQzI1Ci0KLWNvbnN0IHVpbnQgc2RyYW1fdGFibGVbXSA9Ci17Ci0JLyoKLQkgKiBTaW5nbGUgUmVhZC4gKE9mZnNldCAwMGggaW4gVVBNQSBSQU0pCi0JICovCi0JMHhDRkZGQ0MyNCwgMHgwRkZGQ0MwNCwgMFgwQ0FGQ0MwNCwgMFgwM0FGQ0MwOCwKLQkweDNGQkZDQzI3LCAvKiBsYXN0ICovCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQotCS8qCi0JICogQnVyc3QgUmVhZC4gKE9mZnNldCAwOGggaW4gVVBNQSBSQU0pCi0JICovCi0JMHhDRkZGQ0MyNCwgMHgwRkZGQ0MwNCwgMHgwQ0FGQ0M4NCwgMHgwM0FGQ0M4OCwKLQkweDNGQkZDQzI3LCAvKiBsYXN0ICovCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAotCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCi0KLQkvKgotCSAqIFNpbmdsZSBXcml0ZS4gKE9mZnNldCAxOGggaW4gVVBNQSBSQU0pCi0JICovCi0JMHhDRkZGQ0MyNCwgMHgwRkZGQ0MwNCwgMHgwQ0ZGQ0MwNCwgMHgwM0ZGQ0MwMCwKLQkweDNGRkZDQzI3LCAvKiBsYXN0ICovCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQotCS8qCi0JICogQnVyc3QgV3JpdGUuIChPZmZzZXQgMjBoIGluIFVQTUEgUkFNKQotCSAqLwotCTB4Q0ZGRkNDMjQsIDB4MEZGRkNDMDQsIDB4MENGRkNDODAsIDB4MDNGRkNDOEMsCi0JMHgwQ0ZGQ0MwMCwgMHgzM0ZGQ0MyNywgLyogbGFzdCAqLwotCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLAotCi0JLyoKLQkgKiBSZWZyZXNoLiAoT2Zmc2V0IDMwaCBpbiBVUE1BIFJBTSkKLQkgKi8KLQkweEMwRkZDQzI0LCAweDAzRkZDQzI0LCAweDBGRkZDQzI0LCAweDBGRkZDQzI0LAotCTB4M0ZGRkNDMjcsIC8qIGxhc3QgKi8KLQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAotCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCi0KLQkvKgotCSAqIEV4Y2VwdGlvbi4gKE9mZnNldCAzQ2ggaW4gVVBNQSBSQU0pCi0JICovCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXwotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0KLS8qCi0gKiBDaGVjayBCb2FyZCBJZGVudGl0eToKLSAqLwotCi1pbnQgY2hlY2tib2FyZCAodm9pZCkKLXsKLQlwdXRzICgiQm9hcmQ6IFJQWENsYXNzaWNcbiIpOwotCXJldHVybiAoMCk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGJvYXJkX2dldF9lbmV0YWRkciAtLSBSZWFkIHRoZSBNQUMgQWRkcmVzcyBpbiB0aGUgSTJDIEVFUFJPTQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgdm9pZCBib2FyZF9nZXRfZW5ldGFkZHIodWNoYXIgKmVuZXQpCi17Ci0JaW50IGk7Ci0JY2hhciBidWZmWzI1Nl0sICpjcDsKLQotCS8qIEluaXRpYWxpemUgSTJDCQkJCQkqLwotCWkyY19pbml0IChDT05GSUdfU1lTX0kyQ19TUEVFRCwgQ09ORklHX1NZU19JMkNfU0xBVkUpOwotCi0JLyogUmVhZCAyNTYgYnl0ZXMgaW4gRUVQUk9NCQkJCSovCi0JaTJjX3JlYWQgKDB4NTQsIDAsIDEsICh1Y2hhciAqKWJ1ZmYsIDEyOCk7Ci0JaTJjX3JlYWQgKDB4NTQsIDEyOCwgMSwgKHVjaGFyICopYnVmZiArIDEyOCwgMTI4KTsKLQotCS8qIFJldHJpZXZlIE1BQyBhZGRyZXNzIGluIGJ1ZmZlciAoa2V5IEVBKQkJKi8KLQlmb3IgKGNwID0gYnVmZjs7KSB7Ci0JCWlmIChjcFswXSA9PSAnRScgJiYgY3BbMV0gPT0gJ0EnKSB7Ci0JCQljcCArPSAzOwotCQkJLyogUmVhZCBNQUMgYWRkcmVzcwkJCSovCi0JCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrLCBjcCArPSAyKSB7Ci0JCQkJZW5ldFtpXSA9IGFzY2hleF90b19ieXRlICgodW5zaWduZWQgY2hhciAqKWNwKTsKLQkJCX0KLQkJfQotCQkvKiBTY2FuIHRvIHRoZSBlbmQgb2YgdGhlIHJlY29yZAkJKi8KLQkJd2hpbGUgKCgqY3AgIT0gJ1xuJykgJiYgKCpjcCAhPSAoY2hhcikweGZmKSkgewotCQkJY3ArKzsKLQkJfQotCQkvKiBJZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgYSBcbiwgMCBvciBmZiwgd2UgYXJlIGRvbmUuCSovCi0JCWNwKys7Ci0JCWlmICgoKmNwID09ICdcbicpIHx8ICgqY3AgPT0gMCkgfHwgKCpjcCA9PSAoY2hhcikweGZmKSkKLQkJCWJyZWFrOwotCX0KLQotI2lmZGVmIENPTkZJR19GRUNfRU5FVAotCS8qIFRoZSBNQUMgYWRkcmVzcyBpcyB0aGUgc2FtZSBhcyBub3JtYWwgZXRoZXJuZXQgZXhjZXB0IHRoZSAzcmQgYnl0ZQkgKi8KLQkvKiAoU2VlIHRoZSBFLlAuIFBsYW5ldCBDb3JlIE92ZXJ2aWV3IG1hbnVhbAkJKi8KLQllbmV0WzNdIHw9IDB4ODA7Ci0jZW5kaWYKLQotCXByaW50ZigiTUFDIGFkZHJlc3MgPSAlcE1cbiIsIGVuZXQpOwotfQotCi1pbnQgbWlzY19pbml0X3Iodm9pZCkKLXsKLQl1Y2hhciBlbmV0YWRkcls2XTsKLQotCWlmICghZXRoX2dldGVudl9lbmV0YWRkcigiZXRoYWRkciIsIGVuZXRhZGRyKSkgewotCQlib2FyZF9nZXRfZW5ldGFkZHIoZW5ldGFkZHIpOwotCQlldGhfc2V0ZW52X2VuZXRhZGRyKCJldGhhZGRyIiwgZW5ldGFkZHIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi12b2lkIHJweGNsYXNzaWNfaW5pdCAodm9pZCkKLXsKLQkvKiBFbmFibGUgTlZSQU0gKi8KLQkqKCh1Y2hhciAqKSBCQ1NSMCkgfD0gQkNTUjBfRU5OVlJBTTsKLQotI2lmZGVmIENPTkZJR19GRUNfRU5FVAotCi0JLyogVmFsaWRhdGUgdGhlIGZhc3QgZXRoZXJuZXQgdHJhbmNlaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkqKCh2b2xhdGlsZSB1Y2hhciAqKSBCQ1NSMikgJj0gfkJDU1IyX01JSUNUTDsKLQkqKCh2b2xhdGlsZSB1Y2hhciAqKSBCQ1NSMikgJj0gfkJDU1IyX01JSVBXUkRXTjsKLQkqKCh2b2xhdGlsZSB1Y2hhciAqKSBCQ1NSMikgfD0gQkNTUjJfTUlJUlNUOwotCSooKHZvbGF0aWxlIHVjaGFyICopIEJDU1IyKSB8PSBCQ1NSMl9NSUlQV1JEV047Ci0jZW5kaWYKLQotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXBoeXNfc2l6ZV90IGluaXRkcmFtIChpbnQgYm9hcmRfdHlwZSkKLXsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENPTkZJR19TWVNfSU1NUjsKLQl2b2xhdGlsZSBtZW1jdGw4eHhfdCAqbWVtY3RsID0gJmltbWFwLT5pbV9tZW1jdGw7Ci0JbG9uZyBpbnQgc2l6ZTEwOwotCi0JdXBtY29uZmlnIChVUE1BLCAodWludCAqKSBzZHJhbV90YWJsZSwKLQkJCSAgIHNpemVvZiAoc2RyYW1fdGFibGUpIC8gc2l6ZW9mICh1aW50KSk7Ci0KLQkvKiBSZWZyZXNoIGNsb2NrIHByZXNjYWxhciAqLwotCW1lbWN0bC0+bWVtY19tcHRwciA9IENPTkZJR19TWVNfTVBUUFI7Ci0KLQltZW1jdGwtPm1lbWNfbWFyID0gMHgwMDAwMDAwMDsKLQotCS8qIE1hcCBjb250cm9sbGVyIGJhbmtzIDEgdG8gdGhlIFNEUkFNIGJhbmsgKi8KLQltZW1jdGwtPm1lbWNfb3IxID0gQ09ORklHX1NZU19PUjFfUFJFTElNOwotCW1lbWN0bC0+bWVtY19icjEgPSBDT05GSUdfU1lTX0JSMV9QUkVMSU07Ci0KLQltZW1jdGwtPm1lbWNfbWFtciA9IENPTkZJR19TWVNfTUFNUl8xMENPTCAmICh+KE1BTVJfUFRBRSkpOwkvKiBubyByZWZyZXNoIHlldCAqLwotCi0JdWRlbGF5ICgyMDApOwotCi0JLyogcGVyZm9ybSBTRFJBTSBpbml0aWFsaXpzYXRpb24gc2VxdWVuY2UgKi8KLQotCW1lbWN0bC0+bWVtY19tY3IgPSAweDgwMDAyMjMwOwkvKiBTRFJBTSBiYW5rIDAgLSByZWZyZXNoIHR3aWNlICovCi0JdWRlbGF5ICgxKTsKLQotCW1lbWN0bC0+bWVtY19tYW1yIHw9IE1BTVJfUFRBRTsgLyogZW5hYmxlIHJlZnJlc2ggKi8KLQotCXVkZWxheSAoMTAwMCk7Ci0KLQkvKiBDaGVjayBCYW5rIDAgTWVtb3J5IFNpemUKLQkgKiB0cnkgMTAgY29sdW1uIG1vZGUKLQkgKi8KLQotCXNpemUxMCA9IGRyYW1fc2l6ZSAoQ09ORklHX1NZU19NQU1SXzEwQ09MLCBTRFJBTV9CQVNFX1BSRUxJTSwKLQkJCQkJCVNEUkFNX01BWF9TSVpFKTsKLQotCXJldHVybiAoc2l6ZTEwKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogQ2hlY2sgbWVtb3J5IHJhbmdlIGZvciB2YWxpZCBSQU0uIEEgc2ltcGxlIG1lbW9yeSB0ZXN0IGRldGVybWluZXMKLSAqIHRoZSBhY3R1YWxseSBhdmFpbGFibGUgUkFNIHNpemUgYmV0d2VlbiBhZGRyZXNzZXMgYGJhc2UnIGFuZAotICogYGJhc2UgKyBtYXhzaXplJy4gU29tZSAobm90IGFsbCkgaGFyZHdhcmUgZXJyb3JzIGFyZSBkZXRlY3RlZDoKLSAqIC0gc2hvcnQgYmV0d2VlbiBhZGRyZXNzIGxpbmVzCi0gKiAtIHNob3J0IGJldHdlZW4gZGF0YSBsaW5lcwotICovCi0KLXN0YXRpYyBsb25nIGludCBkcmFtX3NpemUgKGxvbmcgaW50IG1hbXJfdmFsdWUsIGxvbmcgaW50ICpiYXNlLCBsb25nIGludCBtYXhzaXplKQotewotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgQ09ORklHX1NZU19JTU1SOwotCXZvbGF0aWxlIG1lbWN0bDh4eF90ICptZW1jdGwgPSAmaW1tYXAtPmltX21lbWN0bDsKLQotCW1lbWN0bC0+bWVtY19tYW1yID0gbWFtcl92YWx1ZTsKLQotCXJldHVybiAoZ2V0X3JhbV9zaXplKGJhc2UsIG1heHNpemUpKTsKLX0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGFzY2hleF90b19ieXRlIC0tCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGFzY2hleF90b19ieXRlICh1bnNpZ25lZCBjaGFyICpjcCkKLXsKLQl1X2NoYXIgYnl0ZSwgYzsKLQotCWMgPSAqY3ArKzsKLQotCWlmICgoYyA+PSAnQScpICYmIChjIDw9ICdGJykpIHsKLQkJYyAtPSAnQSc7Ci0JCWMgKz0gMTA7Ci0JfSBlbHNlIGlmICgoYyA+PSAnYScpICYmIChjIDw9ICdmJykpIHsKLQkJYyAtPSAnYSc7Ci0JCWMgKz0gMTA7Ci0JfSBlbHNlIHsKLQkJYyAtPSAnMCc7Ci0JfQotCi0JYnl0ZSA9IGMgKiAxNjsKLQotCWMgPSAqY3A7Ci0KLQlpZiAoKGMgPj0gJ0EnKSAmJiAoYyA8PSAnRicpKSB7Ci0JCWMgLT0gJ0EnOwotCQljICs9IDEwOwotCX0gZWxzZSBpZiAoKGMgPj0gJ2EnKSAmJiAoYyA8PSAnZicpKSB7Ci0JCWMgLT0gJ2EnOwotCQljICs9IDEwOwotCX0gZWxzZSB7Ci0JCWMgLT0gJzAnOwotCX0KLQotCWJ5dGUgKz0gYzsKLQotCXJldHVybiAoYnl0ZSk7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9SUFhDbGFzc2ljL2VjY3guYyBiL2JvYXJkL1JQWENsYXNzaWMvZWNjeC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjZhMTllLi4wMDAwMDAwCi0tLSBhL2JvYXJkL1JQWENsYXNzaWMvZWNjeC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzM1ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIFN0w6R1YmxpIEZhdmVyZ2VzIC0gPHd3dy5zdGF1YmxpLmNvbT4KLSAqIFBpZXJyZSBBVUJFUlQgIHAuYXViZXJ0QHN0YXVibGkuY29tCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLS8qIFZpZGVvIHN1cHBvcnQgZm9yIHRoZSBFQ0NYIGRhdWdodGVyIGJvYXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0KLSNpZmRlZiBDT05GSUdfVklERU9fU0VEMTM4MDYKLSNpbmNsdWRlIDxzZWQxMzgwNi5oPgotCi0KLS8qIFNjcmVlbiBjb25maWd1cmF0aW9uczogdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBTRDEzODA2IGRlcGVuZHMgb24KLSAgIHNjcmVlbiBhbmQgb24gZGlzcGxheSBtb2RlLiBXZSBoYW5kbGUgb25seSA4YnBwIGFuZCAxNiBicHAgbW9kZXMgICAgICAgICAgKi8KLQotLyogRUNDWCBib2FyZCBpcyBzdXBwbGllZCB3aXRoIGEgTkVDIE5MNjQ0OEJDMjAgc2NyZWVuICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmZGVmIENPTkZJR19ORUNfTkw2NDQ4QkMyMAotI2RlZmluZSBESVNQTEFZX1dJRFRIICAgNjQwCi0jZGVmaW5lIERJU1BMQVlfSEVJR0hUICA0ODAKLQotI2lmZGVmIENPTkZJR19WSURFT19TRUQxMzgwNl84QlBQCi1zdGF0aWMgY29uc3QgUzFEX1JFR1MgaW5pdF9yZWdzIFtdID0KLXsKLSAgICB7MHgwMDAxLDB4MDB9LCAgIC8qIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMUZDLDB4MDB9LCAgIC8qIERpc3BsYXkgTW9kZSBSZWdpc3RlciAqLwotICAgIHsweDAwMDQsMHgxYn0sICAgLyogR2VuZXJhbCBJTyBQaW5zIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLwotICAgIHsweDAwMDUsMHgwMH0sICAgLyogR2VuZXJhbCBJTyBQaW5zIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLwotICAgIHsweDAwMDgsMHhlNX0sICAgLyogR2VuZXJhbCBJTyBQaW5zIENvbnRyb2wgUmVnaXN0ZXIgMCAqLwotICAgIHsweDAwMDksMHgxZn0sICAgLyogR2VuZXJhbCBJTyBQaW5zIENvbnRyb2wgUmVnaXN0ZXIgMSAqLwotICAgIHsweDAwMTAsMHgwMn0sICAgLyogTWVtb3J5IENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDE0LDB4MTB9LCAgIC8qIExDRCBQaXhlbCBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0gICAgezB4MDAxOCwweDAyfSwgICAvKiBDUlQvVFYgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotICAgIHsweDAwMUMsMHgwMn0sICAgLyogTWVkaWFQbHVnIENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDFFLDB4MDF9LCAgIC8qIENQVSBUbyBNZW1vcnkgV2FpdCBTdGF0ZSBTZWxlY3QgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDIxLDB4MDR9LCAgIC8qIERSQU0gUmVmcmVzaCBSYXRlIFJlZ2lzdGVyICovCi0gICAgezB4MDAyQSwweDAwfSwgICAvKiBEUkFNIFRpbWluZ3MgQ29udHJvbCBSZWdpc3RlciAwICovCi0gICAgezB4MDAyQiwweDAxfSwgICAvKiBEUkFNIFRpbWluZ3MgQ29udHJvbCBSZWdpc3RlciAxICovCi0gICAgezB4MDAyMCwweDgwfSwgICAvKiBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotICAgIHsweDAwMzAsMHgyNX0sICAgLyogUGFuZWwgVHlwZSBSZWdpc3RlciAqLwotICAgIHsweDAwMzEsMHgwMH0sICAgLyogTU9EIFJhdGUgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDMyLDB4NEZ9LCAgIC8qIExDRCBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDM0LDB4MTN9LCAgIC8qIExDRCBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciAqLwotICAgIHsweDAwMzUsMHgwMX0sICAgLyogVEZUIEZQTElORSBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciAqLwotICAgIHsweDAwMzYsMHgwQn0sICAgLyogVEZUIEZQTElORSBQdWxzZSBXaWR0aCBSZWdpc3RlciAqLwotICAgIHsweDAwMzgsMHhERn0sICAgLyogTENEIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMDM5LDB4MDF9LCAgIC8qIExDRCBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAxICovCi0gICAgezB4MDAzQSwweDJDfSwgICAvKiBMQ0QgVmVydGljYWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyICovCi0gICAgezB4MDAzQiwweDAwfSwgICAvKiBURlQgRlBGUkFNRSBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciAqLwotICAgIHsweDAwM0MsMHgwMX0sICAgLyogVEZUIEZQRlJBTUUgUHVsc2UgV2lkdGggUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDQwLDB4MDN9LCAgIC8qIExDRCBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDQxLDB4MDJ9LCAgIC8qIExDRCBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyICovCi0gICAgezB4MDA0MiwweDAwfSwgICAvKiBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMDQzLDB4MDB9LCAgIC8qIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSAqLwotICAgIHsweDAwNDQsMHgwMH0sICAgLyogTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyICovCi0gICAgezB4MDA0NiwweDQwfSwgICAvKiBMQ0QgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMDQ3LDB4MDF9LCAgIC8qIExDRCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSAqLwotICAgIHsweDAwNDgsMHgwMH0sICAgLyogTENEIFBpeGVsIFBhbm5pbmcgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDRBLDB4MDB9LCAgIC8qIExDRCBEaXNwbGF5IEZJRk8gSGlnaCBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciAqLwotICAgIHsweDAwNEIsMHgwMH0sICAgLyogTENEIERpc3BsYXkgRklGTyBMb3cgVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDUwLDB4NEZ9LCAgIC8qIENSVC9UViBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDUyLDB4MTN9LCAgIC8qIENSVC9UViBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciAqLwotICAgIHsweDAwNTMsMHgwMX0sICAgLyogQ1JUL1RWIEhSVEMgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDU0LDB4MEJ9LCAgIC8qIENSVC9UViBIUlRDIFB1bHNlIFdpZHRoIFJlZ2lzdGVyICovCi0gICAgezB4MDA1NiwweERGfSwgICAvKiBDUlQvVFYgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMCAqLwotICAgIHsweDAwNTcsMHgwMX0sICAgLyogQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgwMDU4LDB4MkJ9LCAgIC8qIENSVC9UViBWZXJ0aWNhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDU5LDB4MDl9LCAgIC8qIENSVC9UViBWUlRDIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyICovCi0gICAgezB4MDA1QSwweDAxfSwgICAvKiBDUlQvVFYgVlJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciAqLwotICAgIHsweDAwNUIsMHgwMH0sICAgLyogVFYgT3V0cHV0IENvbnRyb2wgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDYwLDB4MDN9LCAgIC8qIENSVC9UViBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDYyLDB4MDB9LCAgIC8qIENSVC9UViBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMCAqLwotICAgIHsweDAwNjMsMHgwMH0sICAgLyogQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxICovCi0gICAgezB4MDA2NCwweDAwfSwgICAvKiBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KLSAgICB7MHgwMDY2LDB4NDB9LCAgIC8qIENSVC9UViBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMCAqLwotICAgIHsweDAwNjcsMHgwMX0sICAgLyogQ1JUL1RWIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxICovCi0gICAgezB4MDA2OCwweDAwfSwgICAvKiBDUlQvVFYgUGl4ZWwgUGFubmluZyBSZWdpc3RlciAqLwotICAgIHsweDAwNkEsMHgwMH0sICAgLyogQ1JUL1RWIERpc3BsYXkgRklGTyBIaWdoIFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyICovCi0gICAgezB4MDA2QiwweDAwfSwgICAvKiBDUlQvVFYgRGlzcGxheSBGSUZPIExvdyBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciAqLwotICAgIHsweDAwNzAsMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgQ29udHJvbCBSZWdpc3RlciAqLwotICAgIHsweDAwNzEsMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLwotICAgIHsweDAwNzIsMHgwMH0sICAgLyogTENEIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMDczLDB4MDB9LCAgIC8qIExDRCBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAxICovCi0gICAgezB4MDA3NCwweDAwfSwgICAvKiBMQ0QgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMCAqLwotICAgIHsweDAwNzUsMHgwMH0sICAgLyogTENEIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgwMDc2LDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMCBSZWdpc3RlciAqLwotICAgIHsweDAwNzcsMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMCBSZWdpc3RlciAqLwotICAgIHsweDAwNzgsMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDdBLDB4MUZ9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMSBSZWdpc3RlciAqLwotICAgIHsweDAwN0IsMHgzRn0sICAgLyogTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMSBSZWdpc3RlciAqLwotICAgIHsweDAwN0MsMHgxRn0sICAgLyogTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDdFLDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyICovCi0gICAgezB4MDA4MCwweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBDb250cm9sIFJlZ2lzdGVyICovCi0gICAgezB4MDA4MSwweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCi0gICAgezB4MDA4MiwweDAwfSwgICAvKiBDUlQvVFYgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMCAqLwotICAgIHsweDAwODMsMHgwMH0sICAgLyogQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgwMDg0LDB4MDB9LCAgIC8qIENSVC9UViBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwICovCi0gICAgezB4MDA4NSwweDAwfSwgICAvKiBDUlQvVFYgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMSAqLwotICAgIHsweDAwODYsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAwIFJlZ2lzdGVyICovCi0gICAgezB4MDA4NywweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyICovCi0gICAgezB4MDA4OCwweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBSZWQgQ29sb3IgMCBSZWdpc3RlciAqLwotICAgIHsweDAwOEEsMHgxRn0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAxIFJlZ2lzdGVyICovCi0gICAgezB4MDA4QiwweDNGfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyICovCi0gICAgezB4MDA4QywweDFGfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBSZWQgQ29sb3IgMSBSZWdpc3RlciAqLwotICAgIHsweDAwOEUsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgRklGTyBUaHJlc2hvbGQgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMTAwLDB4MDB9LCAgIC8qIEJpdEJsdCBDb250cm9sIFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMTAxLDB4MDB9LCAgIC8qIEJpdEJsdCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgwMTAyLDB4MDB9LCAgIC8qIEJpdEJsdCBST1AgQ29kZS9Db2xvciBFeHBhbnNpb24gUmVnaXN0ZXIgKi8KLSAgICB7MHgwMTAzLDB4MDB9LCAgIC8qIEJpdEJsdCBPcGVyYXRpb24gUmVnaXN0ZXIgKi8KLSAgICB7MHgwMTA0LDB4MDB9LCAgIC8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwICovCi0gICAgezB4MDEwNSwweDAwfSwgICAvKiBCaXRCbHQgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSAqLwotICAgIHsweDAxMDYsMHgwMH0sICAgLyogQml0Qmx0IFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KLSAgICB7MHgwMTA4LDB4MDB9LCAgIC8qIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMTA5LDB4MDB9LCAgIC8qIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgwMTBBLDB4MDB9LCAgIC8qIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KLSAgICB7MHgwMTBDLDB4MDB9LCAgIC8qIEJpdEJsdCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMCAqLwotICAgIHsweDAxMEQsMHgwMH0sICAgLyogQml0Qmx0IE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxICovCi0gICAgezB4MDExMCwweDAwfSwgICAvKiBCaXRCbHQgV2lkdGggUmVnaXN0ZXIgMCAqLwotICAgIHsweDAxMTEsMHgwMH0sICAgLyogQml0Qmx0IFdpZHRoIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgwMTEyLDB4MDB9LCAgIC8qIEJpdEJsdCBIZWlnaHQgUmVnaXN0ZXIgMCAqLwotICAgIHsweDAxMTMsMHgwMH0sICAgLyogQml0Qmx0IEhlaWdodCBSZWdpc3RlciAxICovCi0gICAgezB4MDExNCwweDAwfSwgICAvKiBCaXRCbHQgQmFja2dyb3VuZCBDb2xvciBSZWdpc3RlciAwICovCi0gICAgezB4MDExNSwweDAwfSwgICAvKiBCaXRCbHQgQmFja2dyb3VuZCBDb2xvciBSZWdpc3RlciAxICovCi0gICAgezB4MDExOCwweDAwfSwgICAvKiBCaXRCbHQgRm9yZWdyb3VuZCBDb2xvciBSZWdpc3RlciAwICovCi0gICAgezB4MDExOSwweDAwfSwgICAvKiBCaXRCbHQgRm9yZWdyb3VuZCBDb2xvciBSZWdpc3RlciAxICovCi0gICAgezB4MDFFMCwweDAwfSwgICAvKiBMb29rLVVwIFRhYmxlIE1vZGUgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMUUyLDB4MDB9LCAgIC8qIExvb2stVXAgVGFibGUgQWRkcmVzcyBSZWdpc3RlciAqLwotICAgIHsweDAxRTQsMHgwMH0sICAgLyogTG9vay1VcCBUYWJsZSBEYXRhIFJlZ2lzdGVyICovCi0gICAgezB4MDFGMCwweDEwfSwgICAvKiBQb3dlciBTYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSAgICB7MHgwMUYxLDB4MDB9LCAgIC8qIFBvd2VyIFNhdmUgU3RhdHVzIFJlZ2lzdGVyICovCi0gICAgezB4MDFGNCwweDAwfSwgICAvKiBDUFUtdG8tTWVtb3J5IEFjY2VzcyBXYXRjaGRvZyBUaW1lciBSZWdpc3RlciAqLwotICAgIHsweDAxRkMsMHgwMX0sICAgLyogRGlzcGxheSBNb2RlIFJlZ2lzdGVyICovCi0gICAgezAsIDB9Ci19OwotI2VuZGlmIC8qIENPTkZJR19WSURFT19TRUQxMzgwNl84QlBQICovCi0KLSNpZmRlZiBDT05GSUdfVklERU9fU0VEMTM4MDZfMTZCUFAKLQotc3RhdGljIGNvbnN0IFMxRF9SRUdTIGluaXRfcmVncyBbXSA9Ci17Ci0gICAgezB4MDAwMSwweDAwfSwgICAvKiBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyICovCi0gICAgezB4MDFGQywweDAwfSwgICAvKiBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDA0LDB4MWJ9LCAgIC8qIEdlbmVyYWwgSU8gUGlucyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMDA1LDB4MDB9LCAgIC8qIEdlbmVyYWwgSU8gUGlucyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgwMDA4LDB4ZTV9LCAgIC8qIEdlbmVyYWwgSU8gUGlucyBDb250cm9sIFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMDA5LDB4MWZ9LCAgIC8qIEdlbmVyYWwgSU8gUGlucyBDb250cm9sIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgwMDEwLDB4MDJ9LCAgIC8qIE1lbW9yeSBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0gICAgezB4MDAxNCwweDEwfSwgICAvKiBMQ0QgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotICAgIHsweDAwMTgsMHgwMn0sICAgLyogQ1JUL1RWIFBpeGVsIENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDFDLDB4MDJ9LCAgIC8qIE1lZGlhUGx1ZyBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0gICAgezB4MDAxRSwweDAxfSwgICAvKiBDUFUgVG8gTWVtb3J5IFdhaXQgU3RhdGUgU2VsZWN0IFJlZ2lzdGVyICovCi0gICAgezB4MDAyMSwweDA0fSwgICAvKiBEUkFNIFJlZnJlc2ggUmF0ZSBSZWdpc3RlciAqLwotICAgIHsweDAwMkEsMHgwMH0sICAgLyogRFJBTSBUaW1pbmdzIENvbnRyb2wgUmVnaXN0ZXIgMCAqLwotICAgIHsweDAwMkIsMHgwMX0sICAgLyogRFJBTSBUaW1pbmdzIENvbnRyb2wgUmVnaXN0ZXIgMSAqLwotICAgIHsweDAwMjAsMHg4MH0sICAgLyogTWVtb3J5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDMwLDB4MjV9LCAgIC8qIFBhbmVsIFR5cGUgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDMxLDB4MDB9LCAgIC8qIE1PRCBSYXRlIFJlZ2lzdGVyICovCi0gICAgezB4MDAzMiwweDRGfSwgICAvKiBMQ0QgSG9yaXpvbnRhbCBEaXNwbGF5IFdpZHRoIFJlZ2lzdGVyICovCi0gICAgezB4MDAzNCwweDEzfSwgICAvKiBMQ0QgSG9yaXpvbnRhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDM1LDB4MDF9LCAgIC8qIFRGVCBGUExJTkUgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDM2LDB4MEJ9LCAgIC8qIFRGVCBGUExJTkUgUHVsc2UgV2lkdGggUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDM4LDB4REZ9LCAgIC8qIExDRCBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAwICovCi0gICAgezB4MDAzOSwweDAxfSwgICAvKiBMQ0QgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMSAqLwotICAgIHsweDAwM0EsMHgyQ30sICAgLyogTENEIFZlcnRpY2FsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciAqLwotICAgIHsweDAwM0IsMHgwMH0sICAgLyogVEZUIEZQRlJBTUUgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDNDLDB4MDF9LCAgIC8qIFRGVCBGUEZSQU1FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyICovCi0gICAgezB4MDA0MCwweDA1fSwgICAvKiBMQ0QgRGlzcGxheSBNb2RlIFJlZ2lzdGVyICovCi0gICAgezB4MDA0MSwweDAyfSwgICAvKiBMQ0QgTWlzY2VsbGFuZW91cyBSZWdpc3RlciAqLwotICAgIHsweDAwNDIsMHgwMH0sICAgLyogTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwICovCi0gICAgezB4MDA0MywweDAwfSwgICAvKiBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgwMDQ0LDB4MDB9LCAgIC8qIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMiAqLwotICAgIHsweDAwNDYsMHg4MH0sICAgLyogTENEIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwICovCi0gICAgezB4MDA0NywweDAyfSwgICAvKiBMQ0QgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgwMDQ4LDB4MDB9LCAgIC8qIExDRCBQaXhlbCBQYW5uaW5nIFJlZ2lzdGVyICovCi0gICAgezB4MDA0QSwweDAwfSwgICAvKiBMQ0QgRGlzcGxheSBGSUZPIEhpZ2ggVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDRCLDB4MDB9LCAgIC8qIExDRCBEaXNwbGF5IEZJRk8gTG93IFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyICovCi0gICAgezB4MDA1MCwweDRGfSwgICAvKiBDUlQvVFYgSG9yaXpvbnRhbCBEaXNwbGF5IFdpZHRoIFJlZ2lzdGVyICovCi0gICAgezB4MDA1MiwweDEzfSwgICAvKiBDUlQvVFYgSG9yaXpvbnRhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDUzLDB4MDF9LCAgIC8qIENSVC9UViBIUlRDIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyICovCi0gICAgezB4MDA1NCwweDBCfSwgICAvKiBDUlQvVFYgSFJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciAqLwotICAgIHsweDAwNTYsMHhERn0sICAgLyogQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMDU3LDB4MDF9LCAgIC8qIENSVC9UViBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAxICovCi0gICAgezB4MDA1OCwweDJCfSwgICAvKiBDUlQvVFYgVmVydGljYWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyICovCi0gICAgezB4MDA1OSwweDA5fSwgICAvKiBDUlQvVFYgVlJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciAqLwotICAgIHsweDAwNUEsMHgwMX0sICAgLyogQ1JUL1RWIFZSVEMgUHVsc2UgV2lkdGggUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDVCLDB4MDB9LCAgIC8qIFRWIE91dHB1dCBDb250cm9sIFJlZ2lzdGVyICovCi0gICAgezB4MDA2MCwweDA1fSwgICAvKiBDUlQvVFYgRGlzcGxheSBNb2RlIFJlZ2lzdGVyICovCi0gICAgezB4MDA2MiwweDAwfSwgICAvKiBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMDYzLDB4MDB9LCAgIC8qIENSVC9UViBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSAqLwotICAgIHsweDAwNjQsMHgwMH0sICAgLyogQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyICovCi0gICAgezB4MDA2NiwweDgwfSwgICAvKiBDUlQvVFYgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMDY3LDB4MDJ9LCAgIC8qIENSVC9UViBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSAqLwotICAgIHsweDAwNjgsMHgwMH0sICAgLyogQ1JUL1RWIFBpeGVsIFBhbm5pbmcgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDZBLDB4MDB9LCAgIC8qIENSVC9UViBEaXNwbGF5IEZJRk8gSGlnaCBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciAqLwotICAgIHsweDAwNkIsMHgwMH0sICAgLyogQ1JUL1RWIERpc3BsYXkgRklGTyBMb3cgVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDcwLDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDcxLDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDcyLDB4MDB9LCAgIC8qIExDRCBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAwICovCi0gICAgezB4MDA3MywweDAwfSwgICAvKiBMQ0QgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMSAqLwotICAgIHsweDAwNzQsMHgwMH0sICAgLyogTENEIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMDc1LDB4MDB9LCAgIC8qIExDRCBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAxICovCi0gICAgezB4MDA3NiwweDAwfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDAgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDc3LDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEdyZWVuIENvbG9yIDAgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDc4LDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIFJlZCBDb2xvciAwIFJlZ2lzdGVyICovCi0gICAgezB4MDA3QSwweDFGfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDEgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDdCLDB4M0Z9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEdyZWVuIENvbG9yIDEgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDdDLDB4MUZ9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIFJlZCBDb2xvciAxIFJlZ2lzdGVyICovCi0gICAgezB4MDA3RSwweDAwfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBGSUZPIFRocmVzaG9sZCBSZWdpc3RlciAqLwotICAgIHsweDAwODAsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgQ29udHJvbCBSZWdpc3RlciAqLwotICAgIHsweDAwODEsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLwotICAgIHsweDAwODIsMHgwMH0sICAgLyogQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMDgzLDB4MDB9LCAgIC8qIENSVC9UViBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAxICovCi0gICAgezB4MDA4NCwweDAwfSwgICAvKiBDUlQvVFYgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMCAqLwotICAgIHsweDAwODUsMHgwMH0sICAgLyogQ1JUL1RWIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgwMDg2LDB4MDB9LCAgIC8qIENSVC9UViBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMCBSZWdpc3RlciAqLwotICAgIHsweDAwODcsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMCBSZWdpc3RlciAqLwotICAgIHsweDAwODgsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDhBLDB4MUZ9LCAgIC8qIENSVC9UViBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMSBSZWdpc3RlciAqLwotICAgIHsweDAwOEIsMHgzRn0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMSBSZWdpc3RlciAqLwotICAgIHsweDAwOEMsMHgxRn0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMDhFLDB4MDB9LCAgIC8qIENSVC9UViBJbmsvQ3Vyc29yIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyICovCi0gICAgezB4MDEwMCwweDAwfSwgICAvKiBCaXRCbHQgQ29udHJvbCBSZWdpc3RlciAwICovCi0gICAgezB4MDEwMSwweDAwfSwgICAvKiBCaXRCbHQgQ29udHJvbCBSZWdpc3RlciAxICovCi0gICAgezB4MDEwMiwweDAwfSwgICAvKiBCaXRCbHQgUk9QIENvZGUvQ29sb3IgRXhwYW5zaW9uIFJlZ2lzdGVyICovCi0gICAgezB4MDEwMywweDAwfSwgICAvKiBCaXRCbHQgT3BlcmF0aW9uIFJlZ2lzdGVyICovCi0gICAgezB4MDEwNCwweDAwfSwgICAvKiBCaXRCbHQgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMCAqLwotICAgIHsweDAxMDUsMHgwMH0sICAgLyogQml0Qmx0IFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgwMTA2LDB4MDB9LCAgIC8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyICovCi0gICAgezB4MDEwOCwweDAwfSwgICAvKiBCaXRCbHQgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwICovCi0gICAgezB4MDEwOSwweDAwfSwgICAvKiBCaXRCbHQgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxICovCi0gICAgezB4MDEwQSwweDAwfSwgICAvKiBCaXRCbHQgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyICovCi0gICAgezB4MDEwQywweDAwfSwgICAvKiBCaXRCbHQgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMTBELDB4MDB9LCAgIC8qIEJpdEJsdCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSAqLwotICAgIHsweDAxMTAsMHgwMH0sICAgLyogQml0Qmx0IFdpZHRoIFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMTExLDB4MDB9LCAgIC8qIEJpdEJsdCBXaWR0aCBSZWdpc3RlciAxICovCi0gICAgezB4MDExMiwweDAwfSwgICAvKiBCaXRCbHQgSGVpZ2h0IFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgwMTEzLDB4MDB9LCAgIC8qIEJpdEJsdCBIZWlnaHQgUmVnaXN0ZXIgMSAqLwotICAgIHsweDAxMTQsMHgwMH0sICAgLyogQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCAqLwotICAgIHsweDAxMTUsMHgwMH0sICAgLyogQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMSAqLwotICAgIHsweDAxMTgsMHgwMH0sICAgLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCAqLwotICAgIHsweDAxMTksMHgwMH0sICAgLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMSAqLwotICAgIHsweDAxRTAsMHgwMX0sICAgLyogTG9vay1VcCBUYWJsZSBNb2RlIFJlZ2lzdGVyICovCi0gICAgezB4MDFFMiwweDAwfSwgICAvKiBMb29rLVVwIFRhYmxlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMUU0LDB4MDB9LCAgIC8qIExvb2stVXAgVGFibGUgRGF0YSBSZWdpc3RlciAqLwotICAgIHsweDAxRjAsMHgxMH0sICAgLyogUG93ZXIgU2F2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0gICAgezB4MDFGMSwweDAwfSwgICAvKiBQb3dlciBTYXZlIFN0YXR1cyBSZWdpc3RlciAqLwotICAgIHsweDAxRjQsMHgwMH0sICAgLyogQ1BVLXRvLU1lbW9yeSBBY2Nlc3MgV2F0Y2hkb2cgVGltZXIgUmVnaXN0ZXIgKi8KLSAgICB7MHgwMUZDLDB4MDF9LCAgIC8qIERpc3BsYXkgTW9kZSBSZWdpc3RlciAqLwotICAgIHswLCAwfQotfTsKLQotI2VuZGlmIC8qIENPTkZJR19WSURFT19TRUQxMzgwNl8xNkJQUCAqLwotI2VuZGlmIC8qIENPTkZJR19ORUNfTkw2NDQ4QkMyMCAqLwotCi0KLSNpZmRlZiBDT05GSUdfQ09OU09MRV9FWFRSQV9JTkZPCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHZpZGVvX2dldF9pbmZvX3N0ciAtLSBzZXR1cCBhIGJvYXJkIHN0cmluZzogdHlwZSwgc3BlZWQsIGV0Yy4KLSAqIGxpbmVfbnVtYmVyPSBsb2NhdGlvbiB0byBwbGFjZSBpbmZvIHN0cmluZyBiZXNpZGUgbG9nbwotICogaW5mbz0gYnVmZmVyIGZvciBpbmZvIHN0cmluZwotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi12b2lkIHZpZGVvX2dldF9pbmZvX3N0ciAoaW50IGxpbmVfbnVtYmVyLCBjaGFyICppbmZvKQotewotICAgIGlmIChsaW5lX251bWJlciA9PSAxKSB7Ci0Jc3RyY3B5IChpbmZvLCAiIFJQWENsYXNzaWMgYm9hcmQiKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0JaW5mbyBbMF0gPSAnXDAnOwotICAgIH0KLQotfQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGJvYXJkX3ZpZGVvX2luaXQgLS0gaW5pdCBkZSBsJ0VQU09OLCBjb25maWcgZHUgQ1MKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotdW5zaWduZWQgaW50IGJvYXJkX3ZpZGVvX2luaXQgKHZvaWQpCi17Ci0gICAgdm9sYXRpbGUgaW1tYXBfdCAgICAgKmltbWFwICA9IChpbW1hcF90ICopQ09ORklHX1NZU19JTU1SOwotICAgIHZvbGF0aWxlIG1lbWN0bDh4eF90ICptZW1jdGwgPSAmaW1tYXAtPmltX21lbWN0bDsKLQotICAgIC8qIFByb2dyYW0gRUNDWCByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICooRUNDWF9DU1IxMikgfD0gRUNDWF84NjA7Ci0gICAgKihFQ0NYX0NTUjgpIHw9IEVDQ1hfQkUgfCBFQ0NYX0NTMjsKLSAgICAqKEVDQ1hfQ1NSOCkgfD0gRUNDWF9FTkVQU09OOwotCi0gICAgbWVtY3RsLT5tZW1jX29yMiA9IFNFRDEzODA2X09SOwotICAgIG1lbWN0bC0+bWVtY19icjIgPSBTRUQxMzgwNl9SRUdfQUREUiB8IFNFRDEzODA2X0FDQ0VTOwotCi0gICAgcmV0dXJuIChTRUQxMzgwNl9SRUdfQUREUik7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGJvYXJkX3ZhbGlkYXRlX3NjcmVlbiAtLQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi12b2lkIGJvYXJkX3ZhbGlkYXRlX3NjcmVlbiAodW5zaWduZWQgaW50IGJhc2UpCi17Ci0gICAgLyogQWN0aXZhdGUgdGhlIHBhbmVsIGJpYXMgcG93ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGJhc2UgKyBSRUdfR1BJT19DVFJMKSA9IDB4ODA7Ci19Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBib2FyZF9nZXRfcmVncyAtLQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1jb25zdCBTMURfUkVHUyAqYm9hcmRfZ2V0X3JlZ3MgKHZvaWQpCi17Ci0gICAgcmV0dXJuIChpbml0X3JlZ3MpOwotfQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogYm9hcmRfZ2V0X3dpZHRoIC0tCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWludCBib2FyZF9nZXRfd2lkdGggKHZvaWQpCi17Ci0gICAgcmV0dXJuIChESVNQTEFZX1dJRFRIKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogYm9hcmRfZ2V0X2hlaWdodCAtLQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1pbnQgYm9hcmRfZ2V0X2hlaWdodCAodm9pZCkKLXsKLSAgICByZXR1cm4gKERJU1BMQVlfSEVJR0hUKTsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19WSURFT19TRUQxMzgwNiAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvUlBYQ2xhc3NpYy9mbGFzaC5jIGIvYm9hcmQvUlBYQ2xhc3NpYy9mbGFzaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2ZmYTY4Li4wMDAwMDAwCi0tLSBhL2JvYXJkL1JQWENsYXNzaWMvZmxhc2guYworKysgL2Rldi9udWxsCkBAIC0xLDQzMSArMCwwIEBACi0vKgotICogKEMpICBDb3B5cmlnaHQgMjAwMQotICogU3TDpHVibGkgRmF2ZXJnZXMgLSA8d3d3LnN0YXVibGkuY29tPgotICogUGllcnJlIEFVQkVSVCAgcC5hdWJlcnRAc3RhdWJsaS5jb20KLSAqIFUtQm9vdCBwb3J0IG9uIFJQWENsYXNzaWMgTEYgKENMTEZfQlczMSkgYm9hcmQKLSAqCi0gKiBSUFhDbGFzc2ljIHVzZXMgQW0yOURMMzIzQiBmbGFzaCBtZW1vcnkgd2l0aCAyIGJhbmtzCi0gKgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxtcGM4eHguaD4KLQotZmxhc2hfaW5mb190CWZsYXNoX2luZm9bQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1NdOyAvKiBpbmZvIGZvciBGTEFTSCBjaGlwcwkqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbnMKLSAqLwotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplICh2dV9sb25nICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pOwotc3RhdGljIGludCB3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpOwotc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqaW5mbyk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi11bnNpZ25lZCBsb25nIGZsYXNoX2luaXQgKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBzaXplX2IwIDsKLQlpbnQgaTsKLQotCS8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KLQlmb3IgKGk9MDsgaTxDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUzsgKytpKSB7Ci0JCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotCX0KLQotCXNpemVfYjAgPSBmbGFzaF9nZXRfc2l6ZSgodnVfbG9uZyAqKUNPTkZJR19TWVNfRkxBU0hfQkFTRSwgJmZsYXNoX2luZm9bMF0pOwotCi0KLQlmbGFzaF9nZXRfb2Zmc2V0cyAoQ09ORklHX1NZU19GTEFTSF9CQVNFLCAmZmxhc2hfaW5mb1swXSk7Ci0KLSNpZiBDT05GSUdfU1lTX01PTklUT1JfQkFTRSA+PSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UKLQkvKiBtb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLwotCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLQkJICAgICAgQ09ORklHX1NZU19NT05JVE9SX0JBU0UsCi0JCSAgICAgIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFK21vbml0b3JfZmxhc2hfbGVuLTEsCi0JCSAgICAgICZmbGFzaF9pbmZvWzBdKTsKLSNlbmRpZgotCi0JZmxhc2hfaW5mb1swXS5zaXplID0gc2l6ZV9iMDsKLQotCXJldHVybiAoc2l6ZV9iMCk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQlpbnQgaTsKLQotCWlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX0JUWVBFKSB7Ci0JCS8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgYm90dG9tIGJvb3QgYmxvY2sgdHlwZQkqLwotCQlpbmZvLT5zdGFydFswXSA9IGJhc2UgKyAweDAwMDAwMDAwOwotCQlpbmZvLT5zdGFydFsxXSA9IGJhc2UgKyAweDAwMDA4MDAwOwotCQlpbmZvLT5zdGFydFsyXSA9IGJhc2UgKyAweDAwMDEwMDAwOwotCQlpbmZvLT5zdGFydFszXSA9IGJhc2UgKyAweDAwMDE4MDAwOwotCQlpbmZvLT5zdGFydFs0XSA9IGJhc2UgKyAweDAwMDIwMDAwOwotCQlpbmZvLT5zdGFydFs1XSA9IGJhc2UgKyAweDAwMDI4MDAwOwotCQlpbmZvLT5zdGFydFs2XSA9IGJhc2UgKyAweDAwMDMwMDAwOwotCQlpbmZvLT5zdGFydFs3XSA9IGJhc2UgKyAweDAwMDM4MDAwOwotCQlmb3IgKGkgPSA4OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLQkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArICgoaS03KSAqIDB4MDAwNDAwMDApIDsKLQkJfQotCX0KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi12b2lkIGZsYXNoX3ByaW50X2luZm8gIChmbGFzaF9pbmZvX3QgKmluZm8pCi17Ci0JaW50IGk7Ci0KLQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKLQljYXNlIEZMQVNIX01BTl9BTUQ6CXByaW50ZiAoIkFNRCAiKTsJCWJyZWFrOwotCWRlZmF1bHQ6CQlwcmludGYgKCJVbmtub3duIFZlbmRvciAiKTsJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7Ci0JY2FzZSBGTEFTSF9BTURMMzIzQjoKLQkgICAgcHJpbnRmICgiQU1ETDMyM0RCICgxNiBNYnl0ZXMsIGJvdHRvbSBib290IHNlY3QpXG4iKTsKLQkgICAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgICAgcHJpbnRmICgiVW5rbm93biBDaGlwIFR5cGVcbiIpOwotCSAgICBicmVhazsKLQl9Ci0KLQlwcmludGYgKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAotCQlpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOwotCi0JcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwotCWZvciAoaT0wOyBpPGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSB7Ci0JCWlmICgoaSAlIDUpID09IDApCi0JCQlwcmludGYgKCJcbiAgICIpOwotCQlwcmludGYgKCIgJTA4bFglcyIsCi0JCQlpbmZvLT5zdGFydFtpXSwKLQkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIgotCQkpOwotCX0KLQlwcmludGYgKCJcbiIpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgY29kZSBjYW5ub3QgYmUgcnVuIGZyb20gRkxBU0ghCi0gKi8KLQotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplICh2dV9sb25nICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pCi17Ci0Jc2hvcnQgaTsKLQl1bG9uZyB2YWx1ZTsKLQl1bG9uZyBiYXNlID0gKHVsb25nKWFkZHI7Ci0KLQkvKiBSZXNldCBmbGFzaCBjb21wb25lbnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCWFkZHIgWzBdID0gMHhmMGYwZjBmMDsKLQotCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCi0JYWRkclsweEFBQV0gPSAweEFBQUFBQUFBIDsKLQlhZGRyWzB4NTU1XSA9IDB4NTU1NTU1NTUgOwotCWFkZHJbMHhBQUFdID0gMHg5MDkwOTA5MCA7Ci0KLQl2YWx1ZSA9IGFkZHJbMF0gOwotCi0Jc3dpdGNoICh2YWx1ZSAmIDB4MDBGRjAwRkYpIHsKLQljYXNlIEFNRF9NQU5VRkFDVDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fQU1EOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7Ci0JCWluZm8tPnNpemUgPSAwOwotCQlyZXR1cm4gKDApOwkJCS8qIG5vIG9yIHVua25vd24gZmxhc2gJKi8KLQl9Ci0KLQl2YWx1ZSA9IGFkZHJbMl0gOwkJLyogZGV2aWNlIElECQkqLwotCi0Jc3dpdGNoICh2YWx1ZSAmIDB4MDBGRjAwRkYpIHsKLQljYXNlIChBTURfSURfREwzMjNCICYgMHgwMEZGMDBGRik6Ci0JICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNREwzMjNCOwotCSAgICBpbmZvLT5zZWN0b3JfY291bnQgPSA3MTsKLQkgICAgaW5mby0+c2l6ZSA9IDB4MDEwMDAwMDA7ICAgICAgICAgICAgLyogMTYgTWIgICAgICAgICAgICAgICAgICAgICAqLwotCi0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKLQkJcmV0dXJuICgwKTsJCQkvKiA9PiBubyBvciB1bmtub3duIGZsYXNoICovCi0KLQl9Ci0JLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCi0JLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlCSovCi0JaW5mby0+c3RhcnRbMF0gPSBiYXNlICsgMHgwMDAwMDAwMDsKLQlpbmZvLT5zdGFydFsxXSA9IGJhc2UgKyAweDAwMDA4MDAwOwotCWluZm8tPnN0YXJ0WzJdID0gYmFzZSArIDB4MDAwMTAwMDA7Ci0JaW5mby0+c3RhcnRbM10gPSBiYXNlICsgMHgwMDAxODAwMDsKLQlpbmZvLT5zdGFydFs0XSA9IGJhc2UgKyAweDAwMDIwMDAwOwotCWluZm8tPnN0YXJ0WzVdID0gYmFzZSArIDB4MDAwMjgwMDA7Ci0JaW5mby0+c3RhcnRbNl0gPSBiYXNlICsgMHgwMDAzMDAwMDsKLQlpbmZvLT5zdGFydFs3XSA9IGJhc2UgKyAweDAwMDM4MDAwOwotCWZvciAoaSA9IDg7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgewotCSAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoKGktNykgKiAweDAwMDQwMDAwKSA7Ci0JfQotCi0JLyogY2hlY2sgZm9yIHByb3RlY3RlZCBzZWN0b3JzICovCi0JZm9yIChpID0gMDsgaSA8IDIzOyBpKyspIHsKLQkgICAgLyogcmVhZCBzZWN0b3IgcHJvdGVjdGlvbiBhdCBzZWN0b3IgYWRkcmVzcywgKEE3IC4uIEEwKSA9IDB4MDIgKi8KLQkgICAgLyogRDAgPSAxIGlmIHByb3RlY3RlZCAqLwotCSAgICBhZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoaW5mby0+c3RhcnRbaV0pOwotCSAgICBpbmZvLT5wcm90ZWN0W2ldID0gYWRkcls0XSAmIDEgOwotCX0KLQkvKiBDaGVjayBmb3IgcHJvdGVjdGVkIHNlY3RvcnMgaW4gdGhlIDJuZCBiYW5rICAgICAgICAgICAgICAgICAgICAgICAqLwotCWFkZHJbMHgxMDBBQUFdID0gMHhBQUFBQUFBQSA7Ci0JYWRkclsweDEwMDU1NV0gPSAweDU1NTU1NTU1IDsKLQlhZGRyWzB4MTAwQUFBXSA9IDB4OTA5MDkwOTAgOwotCi0JZm9yIChpID0gMjM7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgewotCSAgICAvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQTcgLi4gQTApID0gMHgwMiAqLwotCSAgICAvKiBEMCA9IDEgaWYgcHJvdGVjdGVkICovCi0JICAgIGFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShpbmZvLT5zdGFydFtpXSk7Ci0JICAgIGluZm8tPnByb3RlY3RbaV0gPSBhZGRyWzRdICYgMSA7Ci0JfQotCi0JLyoKLQkgKiBQcmV2ZW50IHdyaXRlcyB0byB1bmluaXRpYWxpemVkIEZMQVNILgotCSAqLwotCWlmIChpbmZvLT5mbGFzaF9pZCAhPSBGTEFTSF9VTktOT1dOKSB7Ci0JCWFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKWluZm8tPnN0YXJ0WzBdOwotCi0JCSphZGRyID0gMHhGMEYwRjBGMDsJLyogcmVzZXQgYmFuayAxICAgICAgICAgICAgICAgICAgICAgICovCi0JCWFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKWluZm8tPnN0YXJ0WzIzXTsKLQotCQkqYWRkciA9IDB4RjBGMEYwRjA7CS8qIHJlc2V0IGJhbmsgMiAgICAgICAgICAgICAgICAgICAgICAqLwotCi0JfQotCi0JcmV0dXJuIChpbmZvLT5zaXplKTsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotaW50CWZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKmluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQotewotCXZ1X2xvbmcgKmFkZHIgPSAodnVfbG9uZyopKGluZm8tPnN0YXJ0WzBdKTsKLQlpbnQgZmxhZywgcHJvdCwgc2VjdCwgbF9zZWN0OwotCXVsb25nIHN0YXJ0LCBub3csIGxhc3Q7Ci0KLQlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKLQkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJCXByaW50ZiAoIi0gbWlzc2luZ1xuIik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOwotCQl9Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgfHwKLQkgICAgKGluZm8tPmZsYXNoX2lkID4gRkxBU0hfQU1EX0NPTVApKSB7Ci0JCXByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAlMDhseCAtIGFib3J0ZWRcbiIsCi0JCQlpbmZvLT5mbGFzaF9pZCk7Ci0JCXJldHVybiAxOwotCX0KLQotCXByb3QgPSAwOwotCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgewotCQkJcHJvdCsrOwotCQl9Ci0JfQotCi0JaWYgKHByb3QpIHsKLQkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAotCQkJcHJvdCk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmICgiXG4iKTsKLQl9Ci0KLQlsX3NlY3QgPSAtMTsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKLQotCWFkZHJbMHhBQUFdID0gMHhBQUFBQUFBQTsKLQlhZGRyWzB4NTU1XSA9IDB4NTU1NTU1NTU7Ci0JYWRkclsweEFBQV0gPSAweDgwODA4MDgwOwotCWFkZHJbMHhBQUFdID0gMHhBQUFBQUFBQTsKLQlhZGRyWzB4NTU1XSA9IDB4NTU1NTU1NTU7Ci0KLQkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCi0JZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdDw9c19sYXN0OyBzZWN0KyspIHsKLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewkvKiBub3QgcHJvdGVjdGVkICovCi0JCQlhZGRyID0gKHZ1X2xvbmcgKikoaW5mby0+c3RhcnRbc2VjdF0pIDsKLQkJCWFkZHJbMF0gPSAweDMwMzAzMDMwIDsKLQkJCWxfc2VjdCA9IHNlY3Q7Ci0JCX0KLQl9Ci0KLQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoZmxhZykKLQkJZW5hYmxlX2ludGVycnVwdHMoKTsKLQotCS8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLwotCXVkZWxheSAoMTAwMCk7Ci0KLQkvKgotCSAqIFdlIHdhaXQgZm9yIHRoZSBsYXN0IHRyaWdnZXJlZCBzZWN0b3IKLQkgKi8KLQlpZiAobF9zZWN0IDwgMCkKLQkJZ290byBET05FOwotCi0Jc3RhcnQgPSBnZXRfdGltZXIgKDApOwotCWxhc3QgID0gc3RhcnQ7Ci0JYWRkciA9ICh2dV9sb25nICopKGluZm8tPnN0YXJ0W2xfc2VjdF0pOwotCXdoaWxlICgoYWRkclswXSAmIDB4ODA4MDgwODApICE9IDB4ODA4MDgwODApIHsKLQkJaWYgKChub3cgPSBnZXRfdGltZXIoc3RhcnQpKSA+IENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVCkgewotCQkJcHJpbnRmICgiVGltZW91dFxuIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLwotCQlpZiAoKG5vdyAtIGxhc3QpID4gMTAwMCkgewkvKiBldmVyeSBzZWNvbmQgKi8KLQkJCXB1dGMgKCcuJyk7Ci0JCQlsYXN0ID0gbm93OwotCQl9Ci0JfQotCi1ET05FOgotCS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLwotCWFkZHIgPSAodnVfbG9uZyAqKWluZm8tPnN0YXJ0WzBdOwotCWFkZHJbMF0gPSAweEYwRjBGMEYwOwkvKiByZXNldCBiYW5rICovCi0KLQlwcmludGYgKCIgZG9uZVxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENvcHkgbWVtb3J5IHRvIGZsYXNoLCByZXR1cm5zOgotICogMCAtIE9LCi0gKiAxIC0gd3JpdGUgdGltZW91dAotICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqLwotCi1pbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCi17Ci0JdWxvbmcgY3AsIHdwLCBkYXRhOwotCWludCBpLCBsLCByYzsKLQotCXdwID0gKGFkZHIgJiB+Myk7CS8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLwotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHN0YXJ0IGJ5dGVzCi0JICovCi0JaWYgKChsID0gYWRkciAtIHdwKSAhPSAwKSB7Ci0JCWRhdGEgPSAwOwotCQlmb3IgKGk9MCwgY3A9d3A7IGk8bDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQkJfQotCQlmb3IgKDsgaTw0ICYmIGNudD4wOyArK2kpIHsKLQkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLQkJCS0tY250OwotCQkJKytjcDsKLQkJfQotCQlmb3IgKDsgY250PT0wICYmIGk8NDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQkJfQotCi0JCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotCQkJcmV0dXJuIChyYyk7Ci0JCX0KLQkJd3AgKz0gNDsKLQl9Ci0KLQkvKgotCSAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAotCSAqLwotCXdoaWxlIChjbnQgPj0gNCkgewotCQlkYXRhID0gMDsKLQkJZm9yIChpPTA7IGk8NDsgKytpKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0JCX0KLQkJaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7Ci0JCQlyZXR1cm4gKHJjKTsKLQkJfQotCQl3cCAgKz0gNDsKLQkJY250IC09IDQ7Ci0JfQotCi0JaWYgKGNudCA9PSAwKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKLQkgKi8KLQlkYXRhID0gMDsKLQlmb3IgKGk9MCwgY3A9d3A7IGk8NCAmJiBjbnQ+MDsgKytpLCArK2NwKSB7Ci0JCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLQkJLS1jbnQ7Ci0JfQotCWZvciAoOyBpPDQ7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQl9Ci0KLQlyZXR1cm4gKHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogV3JpdGUgYSB3b3JkIHRvIEZsYXNoLCByZXR1cm5zOgotICogMCAtIE9LCi0gKiAxIC0gd3JpdGUgdGltZW91dAotICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqLwotc3RhdGljIGludCB3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpCi17Ci0JdnVfbG9uZyAqYWRkciA9ICh2dV9sb25nICopKGluZm8tPnN0YXJ0WzBdKTsKLQl1bG9uZyBzdGFydDsKLQlpbnQgZmxhZzsKLQotCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwotCWlmICgoKigodnVfbG9uZyAqKWRlc3QpICYgZGF0YSkgIT0gZGF0YSkgewotCQlyZXR1cm4gKDIpOwotCX0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQlhZGRyWzB4QUFBXSA9IDB4QUFBQUFBQUE7Ci0JYWRkclsweDU1NV0gPSAweDU1NTU1NTU1OwotCWFkZHJbMHhBQUFdID0gMHhBMEEwQTBBMDsKLQotCSooKHZ1X2xvbmcgKilkZXN0KSA9IGRhdGE7Ci0KLQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoZmxhZykKLQkJZW5hYmxlX2ludGVycnVwdHMoKTsKLQotCS8qIGRhdGEgcG9sbGluZyBmb3IgRDcgKi8KLQlzdGFydCA9IGdldF90aW1lciAoMCk7Ci0Jd2hpbGUgKCgqKCh2dV9sb25nICopZGVzdCkgJiAweDgwODA4MDgwKSAhPSAoZGF0YSAmIDB4ODA4MDgwODApKSB7Ci0JCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUKSB7Ci0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvUlBYQ2xhc3NpYy91LWJvb3QubGRzIGIvYm9hcmQvUlBYQ2xhc3NpYy91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWIyZmJhLi4wMDAwMDAwCi0tLSBhL2JvYXJkL1JQWENsYXNzaWMvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAxMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotCi1TRUNUSU9OUwotewotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvc3RhcnQubwkoLnRleHQqKQotICAgIGFyY2gvcG93ZXJwYy9jcHUvbXBjOHh4L3RyYXBzLm8JKC50ZXh0KikKLQotICAgICooLnRleHQqKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgS0VFUCgqKC5nb3QyKSkKLSAgICBLRUVQKCooLmdvdCkpCi0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7Ci0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgS0VFUCgqKC5maXh1cCkpCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4gMikgLSAxOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEqKQotICAgICooLnNkYXRhKikKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0KLSAgLiA9IEFMSUdOKDQpOwotICAudV9ib290X2xpc3QgOiB7Ci0JS0VFUCgqKFNPUlQoLnVfYm9vdF9saXN0KikpKTsKLSAgfQotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLmJzcyopCi0gICAqKC5zYnNzKikKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9fYnNzX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL1JQWENsYXNzaWMvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL1JQWENsYXNzaWMvdS1ib290Lmxkcy5kZWJ1ZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjljODRjNy4uMDAwMDAwMAotLS0gYS9ib2FyZC9SUFhDbGFzc2ljL3UtYm9vdC5sZHMuZGVidWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGFyY2gvcG93ZXJwYy9jcHUvbXBjOHh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGNvbW1vbi9kbG1hbGxvYy5vCSgudGV4dCkKLSAgICBsaWIvdnNwcmludGYubwkoLnRleHQpCi0gICAgbGliL2NyYzMyLm8JCSgudGV4dCkKLQotICAgIC4gPSBlbnZfb2Zmc2V0OwotICAgIGNvbW1vbi9lbnZfZW1iZWRkZWQubygudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLnJvZGF0YSkKLSAgICAqKC5yb2RhdGExKQotICAgICooLnJvZGF0YS5zdHIxLjQpCi0gICAgKiguZWhfZnJhbWUpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwRkZGKSAmIDB4RkZGRkYwMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotCi0gIC4gPSBBTElHTig0KTsKLSAgLnVfYm9vdF9saXN0IDogewotCUtFRVAoKihTT1JUKC51X2Jvb3RfbGlzdCopKSk7Ci0gIH0KLQotCi0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICB9Ci0gIF9fYnNzX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL1JQWGxpdGUvTWFrZWZpbGUgYi9ib2FyZC9SUFhsaXRlL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTdjYmFjLi4wMDAwMDAwCi0tLSBhL2JvYXJkL1JQWGxpdGUvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKLSMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSMKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0jCi0KLW9iai15CT0gUlBYbGl0ZS5vIGZsYXNoLm8KZGlmZiAtLWdpdCBhL2JvYXJkL1JQWGxpdGUvUkVBRE1FIGIvYm9hcmQvUlBYbGl0ZS9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYTY3MTEuLjAwMDAwMDAKLS0tIGEvYm9hcmQvUlBYbGl0ZS9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw4NzcgKzAsMCBAQAotIyBQb3J0aW5nIFUtQm9vdCBvbnRvIFJQWGxpdGUgYm9hcmQKLSMgV3JpdHRlbiBieSBZb28uIEpvbmdob29uCi0jIEUtTWFpbCA6IHlvb3RoQGlwb25lLmNvLmtyCi0jIElQIE9ORSBJbmMuCi0KLSMgU2luY2UgMjAwMS4gMS4gMjkKLQotIyBTaGVsbCA6IGJhc2gKLSMgQ3Jvc3MtY29tcGlsZSB0b29scyA6IE1vbnRhdmlzdGEgSGFyZGhhdAotIyBEZWJ1Z2dpbmcgdG9vbHMgOiBXaW5kcml2ZXIgVmlzaW9uUHJvYmUgKFBvd2VyUEMgQkRNKQotIyBwcGNib290IHZlci4gOiBwcGNib290LTAuOC4xCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwkxLiBIYXJkd2FyZSBzZXR0aW5nCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotMS4xLiBCb2FyZCwgQkRNIHNldHRpbmdzCi0JSW5zdGFsbCBib2FyZCwgQkRNLCBjb25uZWN0IGVhY2ggb3RoZXIKLQotMS4yLiBTYXZlIFJlZ2lzdGVyIHZhbHVlCi0JQm9vdCB3aXRoIGJvYXJkLW9uIG1vbml0b3IgcHJvZ3JhbSBhbmQgc2F2ZSB0aGUKLQlyZWdpc3RlciB2YWx1ZXMgd2l0aCBCRE0uCi0KLTEuMy4gQ29uZmlndXJlIGZsYXNoIHByb2dyYW1tZXIKLQlDaGVjayBmbGFzaCBtZW1vcnkgYXJlYSBpbiB0aGUgbWVtb3J5IG1hcC4KLQkweEZGQzAwMDAwIC0gMHhGRkZGRkZGRgotCi0JQm9vdCBtb25pdG9yIHByb2dyYW0gaXMgYXQKLQkweEZGRjAwMDAwCi0KLQlZb3UgY2FuIHByb2dyYW0gb24tYm9hcmQgZmxhc2ggbWVtb3J5IHdpdGggVmlzaW9uQ2xpY2sKLQlmbGFzaCBwcm9ncmFtbWVyLiBTZXQgdGhlIHRhcmdldCBmbGFzaCBkZXZpY2UgYXM6Ci0KLQkyOURMODAwQgotCi0JKD8pIFRoZSBmbGFzaCBtZW1vcnkgZGV2aWNlIGluIHRoZSBib2FyZCAqaXMqIDI5TFY4MDBCLAotCQlidXQgSSBjYW5ub3QgcHJvZ3JhbSBpdCB3aXRoICcyOUxWODAwQicgb3B0aW9uLgotCQkoaW4gVmlzaW9uQ2xpY2sgZmxhc2ggcHJvZ3JhbW1pbmcgdG9vbHMpCi0JCUkgZG9uJ3Qga25vdyB3aHkuLi4KLQotMS40LiBTYXZlIGJvb3QgbW9uaXRvciBwcm9ncmFtICpJTVBPUlRBTlQqCi0JVXBsb2FkIGJvb3QgbW9uaXRvciBwcm9ncmFtIGZyb20gYm9hcmQgdG8gZmlsZS4KLQlib290IG1vbml0b3IgcHJvZ3JhbSBzdGFydHMgYXQgMHhGRkYwMDAwMAotCi0xLjUuIFRlc3QgZmxhc2ggbWVtb3J5IHByb2dyYW1taW5nCi0JVHJ5IHRvIGVyYXNlIGJvb3QgcHJvZ3JhbSBpbiB0aGUgZmxhc2ggbWVtb3J5LAotCWFuZCByZS13cml0ZSB0aGVtLgotCSpXQVJOSU5HKiBZT1UgTVVTVCBTQVZFIEJPT1QgUFJPR1JBTSBUTyBGSUxFCi0JCUJFRk9SRSBFUkFTSU5HIEZMQVNICi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwkyLiBVLUJvb3Qgc2V0dGluZwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLTIuMS4gRG93bmxvYWQgVS1Cb290IHRhcmJhbGwgYXQKLQlmdHA6Ly9mdHAuZGVueC5kZQotCShUaGUgbGF0ZXN0IHZlcnNpb24gaXMgcHBjYm9vdC0wLjguMS50YXIuYnoyKQotCi0JVG8gZXh0cmFjdCB0aGUgYXJjaGl2ZSB1c2UgdGhlIGZvbGxvd2luZyBzeW50YXggOgotCT4gYnppcDIgLWNkIHBwY2Jvb3QtMC44LjEudGFyLmJ6MiB8IHRhciB4ZiAtCi0KLTIuMi4gQWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgaW4gJy5wcm9maWxlJwotCWV4cG9ydCBQQVRIPSRQQVRIOi9vcHQvaGFyZGhhdC9kZXZraXQvcHBjLzh4eC9iaW4KLQotMi4zLiBNYWtlIGJvYXJkIHNwZWNpZmljIGNvbmZpZywgZm9yIGV4YW1wbGU6Ci0JPiBjZCBwcGNib290LTAuOC4xCi0JPiBtYWtlIFRRTTg2MExfY29uZmlnCi0KLQlOb3cgd2UgY2FuIGJ1aWxkIHBwY2Jvb3QgYmluIGZpbGVzLgotCUFmdGVyIG1ha2UgYWxsLCB5b3UgbXVzdCBzZWUgdGhlc2UgZmlsZXMgaW4geW91cgotCXBwY2Jvb3Qgcm9vdCBkaXJlY3RvcnkuCi0KLQlwcGNib290Ci0JcHBjYm9vdC5iaW4KLQlwcGNib290LnNyZWMKLQlwcGNib290Lm1hcAotCi0yLjQuIE1ha2UgeW91ciBvd24gYm9hcmQgZGlyZWN0b3J5IGludG8gdGhlCi0JcHBjYm9vdC0wLjguMS9ib2FyZAotCWFuZCBtYWtlIHlvdXIgYm9hcmQtc3BlY2lmaWMgZmlsZXMgaGVyZS4KLQotCUZvciBleG1hbnBsZSwgdHFtOHh4IGZpbGVzIGFyZSBjb21wb3NlZCBvZgotCS5kZXBlbmQgOiBOb3RoaW5nCi0JTWFrZWZpbGUgOiBUbyBtYWtlIGNvbmZpZyBmaWxlCi0JY29uZmlnLm1rIDogU2V0cyBiYXNlIGFkZHJlc3MKLQlmbGFzaC5jIDogRmxhc2ggbWVtb3J5IGNvbnRyb2wgZmlsZXMKLQlwcGNib290LmxkcyA6IGxpbmtlcihsZCkgc2NyaXB0PyAoSSBkb24ndCBrbm93IHRoaXMgeWV0KQotCXRxbTh4eC5jIDogRFJBTSBjb250cm9sIGFuZCBib2FyZCBjaGVjayByb3V0aW5lcwotCi0JQW5kLCBhZGQgeW91ciBib2FyZCBjb25maWcgbGluZXMgaW4gdGhlCi0JcHBjYm9vdC0wLjguMS9NYWtlZmlsZQotCi0JRmluYWxseSwgYWRkIGNvbmZpZ18oeW91ciBib2FyZCkuaCBmaWxlIGluIHRoZQotCXBwY2Jvb3QtMC44LjEvaW5jbHVkZS8KLQotCUkndmUgbWFkZSBib2FyZC9ycHhsaXRlIGRpcmVjdG9yeSwgYW5kIGp1c3QgY29waWVkCi0JdHFtOHh4IHNldHRpbmdzIGZvciBub3cuCi0KLQlSZWJ1aWxkIHBwY2Jvb3QgZm9yIHJweGxpdGUgYm9hcmQ6Ci0JPiBtYWtlIHJweGxpdGVfY29uZmlnCi0JPiBtYWtlCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwkzLiBVLUJvb3QgcG9ydGluZwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLTMuMS4gTXkgUlBYbGl0ZSBmaWxlcyBhcmUgYmFzZWQgb24gdHFtOHh4IGJvYXJkIGZpbGVzLgotCT4gY2QgYm9hcmQKLQk+IGNwIC1yIHRxbTh4eCBSUFhMSVRFCi0JPiBjZCBSUFhMSVRFCi0JPiBtdiB0cW04eHguYyBSUFhMSVRFLmMKLQk+IGNkIC4uLy4uL2luY2x1ZGUKLQk+IGNwIGNvbmZpZ190cW04eHguaCBjb25maWdfUlBYTElURS5oCi0KLTMuMi4gTW9kaWZpZWQgZmlsZXMgYXJlOgotCWJvYXJkL1JQWExJVEUvUlBYTElURS5jCQkvKiBEUkFNLXJlbGF0ZWQgcm91dGluZXMgKi8KLQlib2FyZC9SUFhMSVRFL2ZsYXNoLmMJCS8qIGZsYXNoLXJlbGF0ZWQgcm91dGluZXMgKi8KLQlib2FyZC9SUFhMSVRFL2NvbmZpZy5tawkJLyogc2V0IHRleHQgYmFzZSBhZGRyZXNzICovCi0JYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvc2VyaWFsLmMgLyogYm9hcmQgc3BlY2lmaWMgcmVnaXN0ZXIgc2V0dGluZyAqLwotCWluY2x1ZGUvY29uZmlnX1JQWExJVEUuaAkvKiBib2FyZCBzcGVjaWZpYyByZWdpc3RlcnMgKi8KLQotCVNlZSAncmVnX2NvbmZpZy50eHQnIGZvciByZWdpc3RlciB2YWx1ZXMgaW4gZGV0YWlsLgotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMJNC4gUnVubmluZyBMaW51eAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCU1pc2MgSW5mb3JtYXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1tZW1fY29uZmlnLnR4dDoKLT09PT09PT09PT09PT09PQotCi1GbGFzaCBtZW1vcnkgZGV2aWNlIDogQU0yOUxWODAwQkIgKDFNeDhCaXQpIHggNCBkZXZpY2UKLW1hbnVmYWN0dXJlciBpZCA6IDAxICAgICAoQU1EKQotZGV2aWNlIGlkICAgICAgIDogNUIgICAgIChBTTI5TFY4MDBCKQotc2l6ZSAgICAgICAgICAgIDogNE1ieXRlCi1zZWN0b3IgIyAgICAgICAgOiAxOQotCi1TZWN0b3IgaW5mb3JtYXRpb24gOgotCi1udW1iZXIgICBzdGFydCBhZGRyLiAgICAgc2l6ZQotMDAgICAgICAgRkZDMF8wMDAwICAgICAgIDY0Ci0wMSAgICAgICBGRkMxXzAwMDAgICAgICAgMzIKLTAyICAgICAgIEZGQzFfODAwMCAgICAgICAzMgotMDMgICAgICAgRkZDMl8wMDAwICAgICAgIDEyOAotMDQgICAgICAgRkZDNF8wMDAwICAgICAgIDI1NgotMDUgICAgICAgRkZDOF8wMDAwICAgICAgIDI1NgotMDYgICAgICAgRkZDQ18wMDAwICAgICAgIDI1NgotMDcgICAgICAgRkZEMF8wMDAwICAgICAgIDI1NgotMDggICAgICAgRkZENF8wMDAwICAgICAgIDI1NgotMDkgICAgICAgRkZEOF8wMDAwICAgICAgIDI1NgotMTAgICAgICAgRkZEQ18wMDAwICAgICAgIDI1NgotMTEgICAgICAgRkZFMF8wMDAwICAgICAgIDI1NgotMTIgICAgICAgRkZFNF8wMDAwICAgICAgIDI1NgotMTMgICAgICAgRkZFOF8wMDAwICAgICAgIDI1NgotMTQgICAgICAgRkZFQ18wMDAwICAgICAgIDI1NgotMTUgICAgICAgRkZGMF8wMDAwICAgICAgIDI1NgotMTYgICAgICAgRkZGNF8wMDAwICAgICAgIDI1NgotMTcgICAgICAgRkZGOF8wMDAwICAgICAgIDI1NgotMTggICAgICAgRkZGQ18wMDAwICAgICAgIDI1NgotCi0KLXJlZ19jb25maWcudHh0OgotPT09PT09PT09PT09PT09Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCVNJVSAoU3lzdGVtIEludGVyZmFjZSBVbml0KSAqLwotLyogKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQotLyojIyMgSU1NUiAqLwotLyojIyMgSW50ZXJuYWwgTWVtb3J5IE1hcCBSZWdpc3RlciAqLwotLyojIyMgQ2hhcC4gMTEuNC4xICovCi0KLQlJU0IJCT0gMHhGQTIwCQkvKiBTZXQgdGhlIEltbWFwIGJhc2UgPSAweEZBMjAgMDAwMCAqLwotCVBBUlROVU0gPSAweDIxCi0JTUFTS05VTSA9IDB4MDAKLQotCT0+IDB4RkEyMCAyMTAwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKiMjIyBTSVVNQ1IgKi8KLS8qIyMjIFNJVSBNb2R1bGUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotLyojIyMgQ2hhcC4gMTEuNC4yICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDAwMCAqLwotCi0JRUFSQgk9IDAKLQlFQVJQCT0gMAotCURTSFcJPSAwCi0JREJHQwk9IDAKLQlEQlBDCT0gMAotCUZSQwkJPSAwCi0JRExLCQk9IDAKLQlPUEFSCT0gMAotCVBOQ1MJPSAwCi0JRFBDCQk9IDAKLQlNUFJFCT0gMAotCU1MUkMJPSAxMAkJLyogfktSL35SRVRSWS9+SVJRNC9TUEtST1VUIGZ1bmN0aW9ucyBhcyB+S1IvflRSVFJZICovCi0JQUVNRQk9IDAKLQlTRU1FCT0gMAotCUJTQwkJPSAwCi0JR0I1RQk9IDAKLQlCMkRECT0gMAotCUIzREQJPSAwCi0KLQk9PiAweDAwMDAgMDgwMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLyojIyMgU1lQQ1IgKi8KLS8qIyMjIFN5c3RlbSBQcm90ZWN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KLS8qIyMjIENoYXAuIDExLjQuMyAqLwotLyojIyMgT2Zmc2V0IDogMHgwMDAwIDAwMDQgKi8KLQotCVNXVEMJPSAweEZGRkYJLyogU1cgd2F0Y2hkb2cgdGltZXIgY291bnQgPSAweEZGRkYgKi8KLQlCTVQJCT0gMHgwNgkJLyogQlVTIG1vbml0b3JpbmcgdGltaW5nICovCi0JQk1FCQk9IDEJCQkvKiBCVVMgbW9uaXRvciBlbmFibGUgKi8KLQlTV0YJCT0gMQotCVNXRQkJPSAwCQkJLyogU1cgd2F0Y2hkb2cgZGlzYWJsZSAqLwotCVNXUkkJPSAwCi0JU1dQCQk9IDEKLQotCT0+IDB4RkZGRiAwNjg5Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKiMjIyBURVNSICovCi0vKiMjIyBUcmFuc2ZlciBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgKi8KLS8qIyMjIENoYXAuIDExLjQuNCAqLwotLyojIyMgT2Zmc2V0IDogMHgwMDAwIDAwMjAgKi8KLQotCUlFWFQJPSAwCi0JSVRNVAk9IDAKLQlJUEIJCT0gMDAwMAotCURFWFQJPSAwCi0JRFRNVAk9IDAKLQlEUEIJCT0gMDAwMAotCi0JPT4gMHgwMDAwIDAwMDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8qIyMjIFNJUEVORCAqLwotLyojIyMgU0lVIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyICovCi0vKiMjIyBDaGFwLiAxMS41LjQuMSAqLwotLyojIyMgT2Zmc2V0IDogMHgwMDAwIDAwMTAgKi8KLQotCUlSUTB+SVJRNyA9IDAKLQlMVkwwfkxWTDcgPSAwCi0KLQk9PiAweDAwMDAgMDAwMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLyojIyMgU0lNQVNLICovCi0vKiMjIyBTSVUgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLS8qIyMjIENoYXAuIDExLjUuNC4yICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDAxNCAqLwotCi0JSVJNMH5JUk03ID0gMAkJLyogTWFzayBhbGwgaW50ZXJydXB0cyAqLwotCUxWTDB+TFZMNyA9IDAKLQotCT0+IDB4MDAwMCAwMDAwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKiMjIyBTSUVMICovCi0vKiMjIyBTSVUgSW50ZXJydXB0IEVkZ2UvTGV2ZWwgUmVnaXN0ZXIgKi8KLS8qIyMjIENoYXAuIDExLjUuNC4zICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDAxOCAqLwotCi0JRUQwfkVENyA9IDAJCQkvKiBMb3cgbGV2ZWwgdHJpZ2dlcmVkICovCi0JV01uMH5XTW43ID0gMAkJLyogTm90IGFsbG93ZWQgdG8gZXhpdCBmcm9tIGxvdy1wb3dlciBtb2RlICovCi0KLQk9PiAweDAwMDAgMDAwMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLyojIyMgU0lWRUMgKi8KLS8qIyMjIFNJVSBJbnRlcnJ1cHQgVmVjdG9yIFJlZ2lzdGVyICovCi0vKiMjIyBDaGFwLiAxMS41LjQuNCAqLwotLyojIyMgT2Zmc2V0IDogMHgwMDAwIDAwMUMgKi8KLQotCUlOVEMgPSAzQwkJLyogVGhlIGxvd2VzdCBpbnRlcnJ1cHQgaXMgcGVuZGluZy4uKD8pICovCi0KLQk9PiAweDNDMDAgMDAwMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLyojIyMgU1dTUiAqLwotLyojIyMgU29mdHdhcmUgU2VydmljZSBSZWdpc3RlciAqLwotLyojIyMgQ2hhcC4gMTEuNy4xICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDAxRSAqLwotCi0JU0VRID0gMAotCi0JPT4gMHgwMDAwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKiMjIyBTRENSICovCi0vKiMjIyBTRE1BIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLS8qIyMjIENoYXAuIDIwLjIuMSAqLwotLyojIyMgT2Zmc2V0IDogMHgwMDAwIDAwMzIgKi8KLQotCUZSWiA9IDAKLQlSQUlEID0gMDEJLyogUHJpb3JpdHkgbGV2ZWwgNSAoQlI1KSAobm9ybWFsIG9wZXJhdGlvbikgKi8KLQotCT0+IDB4MDAwMCAwMDAxCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCVVQTUEgKFVzZXIgUHJvZ3JhbW1hYmxlIE1hY2hpbmUgQSkgKi8KLS8qICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiMjIyBDaGFwLiAxNi42LjQuMSAqLwotLyojIyMgT2Zmc2V0ID0gMHgwMDAwIDAxN2MgKi8KLQotCVQwICA9IENGRkYgQ0MyNAkJLyogU2luZ2xlIFJlYWQgKi8KLQlUMSAgPSAwRkZGIENDMDQKLQlUMiAgPSAwQ0FGIENDMDQKLQlUMyAgPSAwM0FGIENDMDgKLQlUNCAgPSAzRkJGIENDMjcJCS8qIGxhc3QgKi8KLQlUNSAgPSBGRkZGIENDMjUKLQlUNiAgPSBGRkZGIENDMjUKLQlUNyAgPSBGRkZGIENDMjUKLQlUOCAgPSBDRkZGIENDMjQJCS8qIEJ1cnN0IFJlYWQgKi8KLQlUOSAgPSAwRkZGIENDMDQKLQlUMTAgPSAwQ0FGIENDODQKLQlUMTEgPSAwM0FGIENDODgKLQlUMTIgPSAzRkJGIENDMjcJCS8qIGxhc3QgKi8KLQlUMTMgPSBGRkZGIENDMjUKLQlUMTQgPSBGRkZGIENDMjUKLQlUMTUgPSBGRkZGIENDMjUKLQlUMTYgPSBGRkZGIENDMjUKLQlUMTcgPSBGRkZGIENDMjUKLQlUMTggPSBGRkZGIENDMjUKLQlUMTkgPSBGRkZGIENDMjUKLQlUMjAgPSBGRkZGIENDMjUKLQlUMjEgPSBGRkZGIENDMjUKLQlUMjIgPSBGRkZGIENDMjUKLQlUMjMgPSBGRkZGIENDMjUKLQlUMjQgPSBDRkZGIENDMjQJCS8qIFNpbmdsZSBXcml0ZSAqLwotCVQyNSA9IDBGRkYgQ0MwNAotCVQyNiA9IDBDRkYgQ0MwNAotCVQyNyA9IDAzRkYgQ0MwMAotCVQyOCA9IDNGRkYgQ0MyNwkJLyogbGFzdCAqLwotCVQyOSA9IEZGRkYgQ0MyNQotCVQzMCA9IEZGRkYgQ0MyNQotCVQzMSA9IEZGRkYgQ0MyNQotCVQzMiA9IENGRkYgQ0MyNAkJLyogQnVyc3QgV3JpdGUgKi8KLQlUMzMgPSAwRkZGIENDMDQKLQlUMzQgPSAwQ0ZGIENDODAKLQlUMzUgPSAwM0ZGIENDOEMKLQlUMzYgPSAwQ0ZGIENDMDAKLQlUMzcgPSAzM0ZGIENDMjcJCS8qIGxhc3QgKi8KLQlUMzggPSBGRkZGIENDMjUKLQlUMzkgPSBGRkZGIENDMjUKLQlUNDAgPSBGRkZGIENDMjUKLQlUNDEgPSBGRkZGIENDMjUKLQlUNDIgPSBGRkZGIENDMjUKLQlUNDMgPSBGRkZGIENDMjUKLQlUNDQgPSBGRkZGIENDMjUKLQlUNDUgPSBGRkZGIENDMjUKLQlUNDYgPSBGRkZGIENDMjUKLQlUNDcgPSBGRkZGIENDMjUKLQlUNDggPSBDMEZGIENDMjQJCS8qIFJlZnJlc2ggKi8KLQlUNDkgPSAwM0ZGIENDMjQKLQlUNTAgPSAwRkZGIENDMjQKLQlUNTEgPSAwRkZGIENDMjQKLQlUNTIgPSAzRkZGIENDMjcJCS8qIGxhc3QgKi8KLQlUNTMgPSBGRkZGIENDMjUKLQlUNTQgPSBGRkZGIENDMjUKLQlUNTUgPSBGRkZGIENDMjUKLQlUNTYgPSBGRkZGIENDMjUKLQlUNTcgPSBGRkZGIENDMjUKLQlUNTggPSBGRkZGIENDMjUKLQlUNTkgPSBGRkZGIENDMjUKLQlUNjAgPSBGRkZGIENDMjUJCS8qIEV4Y2VwdGlvbiAqLwotCVQ2MSA9IEZGRkYgQ0MyNQotCVQ2MiA9IEZGRkYgQ0MyNQotCVQ2MyA9IEZGRkYgQ0MyNQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKglVUE1CICovCi0vKiAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKiMjIyBDaGFwLiAxNi42LjQuMSAqLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKglNRU1DICovCi0vKiAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKiMjIyBCUjAgJiBPUjAgKi8KLS8qIyMjIEJhc2UgUmVnaXN0ZXJzICYgT3B0aW9uIFJlZ2lzdGVycyAqLwotLyojIyMgQ2hhcC4gMTYuNC4xICYgMTYuNC4yICovCi0vKiMjIyBPZmZzZXQgOiBCUjAoMHgwMDAwIDAxMDApICYgT1IwKDB4MDAwMCAwMTA0KSAqLwotLyojIyMgRmxhc2ggbWVtb3J5ICovCi0KLQlCQSAgID0gMTExMSAxMTEwIDAwMDAgMDAwMCAwCS8qIEJhc2UgYWRkciA9IDB4RkUwMCAwMDAwICovCi0JQVQgICA9IDAwMAotCVBTICAgPSAwMAotCVBBUkUgPSAwCi0JV1AgICA9IDAKLQlNUyAgID0gMAkJCQkvKiBHUENNICovCi0JViAgICA9IDEJCQkJLyogVmFsaWQgKi8KLQotCT0+IDB4RkUwMCAwMDAxCi0KLQlBTSAgICAgICAgICAgID0gMTExMSAxMTEwIDAwMDAgMDAwMCAwCS8qIDMyTUJ5dGVzICovCi0JQVRNICAgICAgICAgICA9IDAwMAotCUNTTlQvU0FNICAgICAgPSAwCi0JQUNTL0c1TEEsRzVMUyA9IDAwCi0JQklIICAgICAgICAgICA9IDEJCQkvKiBCdXJzdCBpbmhpYml0ZWQgKi8KLQlTQ1kgICAgICAgICAgID0gMDEwMAkJLyogY3ljbGUgbGVuZ3RoID0gNCAqLwotCVNFVEEgICAgICAgICAgPSAwCi0JVFJMWCAgICAgICAgICA9IDAKLQlFSFRSICAgICAgICAgID0gMAotCi0JPT4gMHhGRTAwIDAxNDAKLQotLyojIyMgQlIxICYgT1IxICovCi0vKiMjIyBCYXNlIFJlZ2lzdGVycyAmIE9wdGlvbiBSZWdpc3RlcnMgKi8KLS8qIyMjIENoYXAuIDE2LjQuMSAmIDE2LjQuMiAqLwotLyojIyMgT2Zmc2V0IDogQlIxKDB4MDAwMCAwMTA4KSAmIE9SMSgweDAwMDAgMDEwQykgKi8KLS8qIyMjIFNEUkFNICovCi0KLQlCQSAgID0gMDAwMCAwMDAwIDAwMDAgMDAwMCAwCS8qIEJhc2UgYWRkciA9IDB4MDAwMCAwMDAwICovCi0JQVQgICA9IDAwMAotCVBTICAgPSAwMAotCVBBUkUgPSAwCi0JV1AgICA9IDAKLQlNUyAgID0gMQkJCQkvKiBVUE1BICovCi0JViAgICA9IDEJCQkJLyogVmFsaWQgKi8KLQotCT0+IDB4MDAwMCAwMDgxCi0KLQlBTSAgICAgICAgICAgID0gMTExMSAxMTEwIDAwMDAgMDAwMAkvKiAzMk1CeXRlcyAqLwotCUFUTSAgICAgICAgICAgPSAwMDAKLQlDU05UL1NBTSAgICAgID0gMQotCUFDUy9HNUxBLEc1TFMgPSAxMQotCUJJSCAgICAgICAgICAgPSAwCi0JU0NZICAgICAgICAgICA9IDAwMDAJCS8qIGN5Y2xlIGxlbmd0aCA9IDAgKi8KLQlTRVRBICAgICAgICAgID0gMAotCVRSTFggICAgICAgICAgPSAwCi0JRUhUUiAgICAgICAgICA9IDAKLQotCT0+IDB4RkUwMCAwRTAwCi0KLS8qIyMjIEJSMiAmIE9SMiAqLwotLyojIyMgQmFzZSBSZWdpc3RlcnMgJiBPcHRpb24gUmVnaXN0ZXJzICovCi0vKiMjIyBDaGFwLiAxNi40LjEgJiAxNi40LjIgKi8KLS8qIyMjIE9mZnNldCA6IEJSMigweDAwMDAgMDExMCkgJiBPUjIoMHgwMDAwIDAxMTQpICovCi0KLQlCUjIgJiBPUjIgPSAweDAwMDAgMDAwMAkJLyogTm90IHVzZWQgKi8KLQotLyojIyMgQlIzICYgT1IzICovCi0vKiMjIyBCYXNlIFJlZ2lzdGVycyAmIE9wdGlvbiBSZWdpc3RlcnMgKi8KLS8qIyMjIENoYXAuIDE2LjQuMSAmIDE2LjQuMiAqLwotLyojIyMgT2Zmc2V0IDogQlIzKDB4MDAwMCAwMTE4KSAmIE9SMygweDAwMDAgMDExQykgKi8KLS8qIyMjIEJDU1IgKi8KLQotCUJBICAgPSAxMTExIDEwMTAgMDEwMCAwMDAwIDAJLyogQmFzZSBhZGRyID0gMHhGQTQwIDAwMDAgKi8KLQlBVCAgID0gMDAwCi0JUFMgICA9IDAwCi0JUEFSRSA9IDAKLQlXUCAgID0gMAotCU1TICAgPSAwCQkJCS8qIEdQQ00gKi8KLQlWICAgID0gMQkJCQkvKiBWYWxpZCAqLwotCi0JPT4gMHhGQTQwIDAwMDEKLQotCUFNICAgICAgICAgICAgPSAxMTExIDExMTEgMDExMSAxMTExIDEJLyogKD8pICovCi0JQVRNICAgICAgICAgICA9IDAwMAotCUNTTlQvU0FNICAgICAgPSAxCi0JQUNTL0c1TEEsRzVMUyA9IDAwCi0JQklIICAgICAgICAgICA9IDEJCQkvKiBCdXJzdCBpbmhpYml0ZWQgKi8KLQlTQ1kgICAgICAgICAgID0gMDAwMQkJLyogY3ljbGUgbGVuZ3RoID0gMSAqLwotCVNFVEEgICAgICAgICAgPSAwCi0JVFJMWCAgICAgICAgICA9IDAKLQotCT0+IDB4RkY3RiA4OTEwCi0KLS8qIyMjIEJSNCAmIE9SNCAqLwotLyojIyMgQmFzZSBSZWdpc3RlcnMgJiBPcHRpb24gUmVnaXN0ZXJzICovCi0vKiMjIyBDaGFwLiAxNi40LjEgJiAxNi40LjIgKi8KLS8qIyMjIE9mZnNldCA6IEJSNCgweDAwMDAgMDEyMCkgJiBPUjQoMHgwMDAwIDAxMjQpICovCi0vKiMjIyBOVlJBTSAmIFNSQU0gKi8KLQotCUJBICAgPSAxMTExIDEwMTAgMDAwMCAwMDAwIDAJLyogQmFzZSBhZGRyID0gMHhGQTAwIDAwMDAgKi8KLQlBVCAgID0gMDAwCi0JUFMgICA9IDAxCi0JUEFSRSA9IDAKLQlXUCAgID0gMAotCU1TICAgPSAwCQkJCS8qIEdQQ00gKi8KLQlWICAgID0gMQkJCQkvKiBWYWxpZCAqLwotCi0JPT4gMHhGQTAwIDA0MDEKLQotCUFNICAgICAgICAgICAgPSAxMTExIDExMTEgMTExMSAxMDAwIDAJLyogOE1CeXRlICovCi0JQVRNICAgICAgICAgICA9IDAwMAotCUNTTlQvU0FNICAgICAgPSAxCi0JQUNTL0c1TEEsRzVMUyA9IDAwCi0JQklIICAgICAgICAgICA9IDEJCQkvKiBCdXJzdCBpbmhpYml0ZWQgKi8KLQlTQ1kgICAgICAgICAgID0gMDExMQkJLyogY3ljbGUgbGVuZ3RoID0gNyAqLwotCVNFVEEgICAgICAgICAgPSAwCi0JVFJMWCAgICAgICAgICA9IDAKLQotCT0+IDB4RkZGOCAwOTcwCi0KLS8qIyMjIEJSNSAmIE9SNSAqLwotLyojIyMgQmFzZSBSZWdpc3RlcnMgJiBPcHRpb24gUmVnaXN0ZXJzICovCi0vKiMjIyBDaGFwLiAxNi40LjEgJiAxNi40LjIgKi8KLS8qIyMjIE9mZnNldCA6IEJSMigweDAwMDAgMDEyOCkgJiBPUjIoMHgwMDAwIDAxMkMpICovCi0KLQlCUjUgJiBPUjUgPSAweDAwMDAgMDAwMAkJLyogTm90IHVzZWQgKi8KLQotLyojIyMgQlI2ICYgT1I2ICovCi0vKiMjIyBCYXNlIFJlZ2lzdGVycyAmIE9wdGlvbiBSZWdpc3RlcnMgKi8KLS8qIyMjIENoYXAuIDE2LjQuMSAmIDE2LjQuMiAqLwotLyojIyMgT2Zmc2V0IDogQlIyKDB4MDAwMCAwMTMwKSAmIE9SMigweDAwMDAgMDEzNCkgKi8KLQotCUJSNiAmIE9SNiA9IDB4MDAwMCAwMDAwCQkvKiBOb3QgdXNlZCAqLwotCi0vKiMjIyBCUjcgJiBPUjcgKi8KLS8qIyMjIEJhc2UgUmVnaXN0ZXJzICYgT3B0aW9uIFJlZ2lzdGVycyAqLwotLyojIyMgQ2hhcC4gMTYuNC4xICYgMTYuNC4yICovCi0vKiMjIyBPZmZzZXQgOiBCUjcoMHgwMDAwIDAxMzgpICYgT1I3KDB4MDAwMCAwMTNDKSAqLwotCi0JQlI3ICYgT1I3ID0gMHgwMDAwIDAwMDAJCS8qIE5vdCB1c2VkICovCi0KLS8qIyMjIE1BUiAqLwotLyojIyMgTWVtb3J5IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLS8qIyMjIENoYXAuIDE2LjQuNyAqLwotLyojIyMgT2Zmc2V0IDogMHgwMDAwIDAxNjQgKi8KLQotCU1BID0gRXh0ZXJuYWwgbWVtb3J5IGFkZHJlc3MKLQotLyojIyMgTUNSICovCi0vKiMjIyBNZW1vcnkgQ29tbWFuZCBSZWdpc3RlciAqLwotLyojIyMgQ2hhcC4gMTYuNC41ICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDE2OCAqLwotCi0JT1AgICA9IHh4CQkJLyogQ29tbWFuZCBvcCBjb2RlICovCi0JVU0gICA9IDEJCQkvKiBTZWxlY3QgVVBNQSAqLwotCU1CICAgPSAwMDEJCQkvKiBTZWxlY3QgQ1MxICovCi0JTUNMRiA9IHh4eHgJCQkvKiBMb29wIHRpbWVzICovCi0JTUFEICA9IHh4IHh4eHgJCS8qIE1lbW9yeSBhcnJheSBpbmRleCAqLwotCi0vKiMjIyBNQU1SICovCi0vKiMjIyBNYWNoaW5lIEEgTW9kZSBSZWdpc3RlciAqLwotLyojIyMgQ2hhcC4gMTYuNC40ICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDE3MCAqLwotCi0JUFRBID0gMDEwMSAxMDAwCi0JUFRBRSA9IDEJCQkvKiBQZXJpb2RpYyB0aW1lciBBIGVuYWJsZWQgKi8KLQlBTUEgPSAwMTAKLQlEU0EgPSAwMAotCUcwQ0xBID0gMDAwCi0JR1BMQTRESVMgPSAxCi0JUkxGQSA9IDAxMDAKLQlXTEZBID0gMDAxMQotCVRMRkEgPSAwMDAwCi0KLQk9PiAweDU4QTAgMTQzMAotCi0vKiMjIyBNQk1SICovCi0vKiMjIyBNYWNoaW5lIEIgTW9kZSBSZWdpc3RlciAqLwotLyojIyMgQ2hhcC4gMTYuNC40ICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDE3NCAqLwotCi0JUFRBID0gMDEwMCAxMTEwCi0JUFRBRSA9IDAJCQkvKiBQZXJpb2RpYyB0aW1lciBCIGRpc2FibGVkICovCi0JQU1BID0gMDAwCi0JRFNBID0gMDAKLQlHMENMQSA9IDAwMAotCUdQTEE0RElTID0gMQotCVJMRkEgPSAwMDAwCi0JV0xGQSA9IDAwMDAKLQlUTEZBID0gMDAwMAotCi0JPT4gMHg0RTAwIDEwMDAKLQotLyojIyMgTVNUQVQgKi8KLS8qIyMjIE1lbW9yeSBTdGF0dXMgUmVnaXN0ZXIgKi8KLS8qIyMjIENoYXAuIDE2LjQuMyAqLwotLyojIyMgT2Zmc2V0IDogMHgwMDAwIDAxNzggKi8KLQotCVBFUjB+UEVSNyA9IFBhcml0eSBlcnJvcgotCVdQRVIgICAgICA9IFdyaXRlIHByb3RlY3Rpb24gZXJyb3IKLQotCT0+IDB4MDAwMAotCi0vKiMjIyBNUFRQUiAqLwotLyojIyMgTWVtb3J5IFBlcmlvZGljIFRpbWVyIFByZXNjYWxlciBSZWdpc3RlciAqLwotLyojIyMgQ2hhcC4gMTYuNC44ICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDE3QSAqLwotCi0JUFRQID0gMDAwMCAxMDAwCQkvKiBEaXZpZGUgYnkgOCAqLwotCi0JPT4gMHgwODAwCi0KLS8qIyMjIE1EUiAqLwotLyojIyMgTWVtb3J5IERhdGEgUmVnaXN0ZXIgKi8KLS8qIyMjIENoYXAuIDE2LjQuNiAqLwotLyojIyMgT2Zmc2V0IDogMHgwMDAwIDAxN0MgKi8KLQotCU1EID0gTWVtb3J5IGRhdGEgY29udGFpbnMgdGhlIFJBTSBhcnJheSB3b3JkCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCVRJTUVSUyAqLwotLyogKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLyojIyMgVEJSRUZ4ICovCi0vKiMjIyBUaW1lYmFzZSBSZWZlcmVuY2UgUmVnaXN0ZXJzICovCi0vKiMjIyBDaGFwLiAxMS45LjIgKi8KLS8qIyMjIE9mZnNldCA6IFRCUkVGRjAoMHgwMDAwIDAyMDQpL1RCUkVGRjEoMHgwMDAwIDAyMDgpICovCi0vKiMjIyAoTG9ja2VkKSAqLwotCi0JVEJSRUZGMCA9IDB4RkZGRiBGRkZGCi0JVEJSRUZGMSA9IDB4RkZGRiBGRkZGCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKiMjIyBUQlNDUiAqLwotLyojIyMgVGltZWJhc2UgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVycyAqLwotLyojIyMgQ2hhcC4gMTEuOS4zICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDIwMCAqLwotLyojIyMgKExvY2tlZCkgKi8KLQotCVRCSVJRID0gMDAwMDAwMDAKLQlSRUYwICA9IDAKLQlSRUYxICA9IDAKLQlSRUZFMCA9IDAJCQkvKiBSZWZlcmVuY2UgaW50ZXJydXB0IGRpc2FibGUgKi8KLQlSRUZFMSA9IDAKLQlUQkYgICA9IDEKLQlUQkUgICA9IDEJCQkvKiBUaW1lYmFzZSBlbmFibGUgKi8KLQotCT0+IDB4MDAwMwotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLyojIyMgUlRDU0MgKi8KLS8qIyMjIFJlYWwtVGltZSBDbG9jayBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXJzICovCi0vKiMjIyBDaGFwLiAxMS4xMC4xICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDIyMCAqLwotLyojIyMgKExvY2tlZCkgKi8KLQotCVJUQ0lSUSA9IDAwMDAwMDAwCi0JU0VDID0gMQotCUFMUiA9IDAKLQkzOEsgPSAwCQkJCS8qIFBJVFJUQ0xLIGlzIGRyaXZlbiBieSAzMi43NjhLSHogKi8KLQlTSUUgPSAwCi0JQUxFID0gMAotCVJURiA9IDAKLQlSVEUgPSAxCQkJCS8qIFJlYWwtVGltZSBjbG9jayBlbmFibGVkICovCi0KLQk9PiAweDAwODEKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8qIyMjIFJUQyAqLwotLyojIyMgUmVhbC1UaW1lIENsb2NrIFJlZ2lzdGVycyAqLwotLyojIyMgQ2hhcC4gMTEuMTAuMiAqLwotLyojIyMgT2Zmc2V0IDogMHgwMDAwIDAyMjQgKi8KLS8qIyMjIChMb2NrZWQpICovCi0KLQlSVEMgPSBSZWFsIHRpbWUgY2xvY2sgbWVhc3VyZWQgaW4gc2Vjb25kCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKiMjIyBSVENBTCAqLwotLyojIyMgUmVhbC1UaW1lIENsb2NrIEFsYXJtIFJlZ2lzdGVycyAqLwotLyojIyMgQ2hhcC4gMTEuMTAuMyAqLwotLyojIyMgT2Zmc2V0IDogMHgwMDAwIDAyMkMgKi8KLS8qIyMjIChMb2NrZWQpICovCi0KLQlBTEFSTSA9IDB4RkZGRiBGRkZGCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKiMjIyBSVFNFQyAqLwotLyojIyMgUmVhbC1UaW1lIENsb2NrIEFsYXJtIFNlY29uZCBSZWdpc3RlcnMgKi8KLS8qIyMjIENoYXAuIDExLjEwLjQgKi8KLS8qIyMjIE9mZnNldCA6IDB4MDAwMCAwMjI4ICovCi0vKiMjIyAoTG9ja2VkKSAqLwotCi0JQ09VTlRFUiA9IENvdW50ZXIgYml0cyhmcmFjdGlvbiBvZiBhIHNlY29uZCkKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8qIyMjIFBJU0NSICovCi0vKiMjIyBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyICovCi0vKiMjIyBDaGFwLiAxMS4xMS4xICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDI0MCAqLwotLyojIyMgKExvY2tlZCkgKi8KLQotCVBJUlEgPSAwCi0JUFMgICA9IDAJCS8qIFdyaXRlIDEgdG8gY2xlYXIgKi8KLQlQSUUgID0gMAotCVBJVEYgPSAxCi0JUFRFICA9IDAJCS8qIFBJVCBkaXNhYmxlZCAqLwotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLyojIyMgUElUQyAqLwotLyojIyMgUElUIENvdW50IFJlZ2lzdGVyICovCi0vKiMjIyBDaGFwLiAxMS4xMS4yICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDI0NCAqLwotLyojIyMgKExvY2tlZCkgKi8KLQotCVBJVEMgPSBQSVQgY291bnQKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8qIyMjIFBJVFIgKi8KLS8qIyMjIFBJVCBSZWdpc3RlciAqLwotLyojIyMgQ2hhcC4gMTEuMTEuMyAqLwotLyojIyMgT2Zmc2V0IDogMHgwMDAwIDAyNDggKi8KLS8qIyMjIChMb2NrZWQpICovCi0KLQlQSVQgPSBQSVQgY291bnQJCS8qIFJlYWQgb25seSAqLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKglDTE9DS1MgKi8KLS8qICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8qIyMjIFNDQ1IgKi8KLS8qIyMjIFN5c3RlbSBDbG9jayBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLwotLyojIyMgQ2hhcC4gMTUuNi4xICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDI4MCAqLwotLyojIyMgKExvY2tlZCkgKi8KLQotCUNPTSAgICA9IDExCQkvKiBDbG9jayBvdXRwdXQgZGlzYWJsZWQgKi8KLQlUQlMgICAgPSAxCQkvKiBUaW1lYmFzZSBmcmVxdWVuY3kgc291cmNlIGlzIEdDTEsyIGRpdmlkZWQgYnkgMTYgKi8KLQlSVERJViAgPSAwCQkvKiBUaGUgY2xvY2sgaXMgZGl2aWRlZCBieSA0ICovCi0JUlRTRUwgID0gMAkJLyogT1NDTShDcnlzdGFsIG9zY2lsbGF0b3IpIGlzIHNlbGVjdGVkICovCi0JQ1JRRU4gID0gMAotCVBSUUVOICA9IDAKLQlFQkRGICAgPSAwMAkJLyogQ0xLT1VUIGlzIEdDTEsyIGRpdmlkZWQgYnkgMSAqLwotCURGU1lOQyA9IDAwCQkvKiBEaXZpZGVkIGJ5IDEgKG5vcm1hbCBvcGVyYXRpb24pICovCi0JREZCUkcgID0gMDAJCS8qIERpdmlkZWQgYnkgMSAobm9ybWFsIG9wZXJhdGlvbikgKi8KLQlERk5MICAgPSAwMDAKLQlERk5IICAgPSAwMDAKLQotCT0+IDB4NjIwMCAwMDAwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKiMjIyBQTFBSQ1IgKi8KLS8qIyMjIFBMTCwgTG93LVBvd2VyLCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLwotLyojIyMgQ2hhcC4gMTUuNi4yICovCi0vKiMjIyBPZmZzZXQgOiAweDAwMDAgMDI4NCAqLwotLyojIyMgKExvY2tlZCkgKi8KLQotCU1GICAgID0gMHgwMDUJLyogNDhNSHogKD8pICggID0gOE1IeiAqIChNRisxKSApICovCi0JU1BMU1MgPSAwCi0JVEVYUFMgPSAwCi0JVE1JU1QgPSAwCi0JQ1NSQyAgPSAwCQkvKiBUaGUgZ2VuZXJhbCBzeXN0ZW0gY2xvY2sgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBERk5IIGZpZWxkICovCi0JTFBNICAgPSAwMAkJLyogTm9ybWFsIGhpZ2gvbm9ybWFsIGxvdyBtb2RlICovCi0JQ1NSICAgPSAwCi0JTE9MUkUgPSAwCi0JRklPUEQgPSAwCi0KLQk9PiAweDAwNTAgMDAwMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLyojIyMgUlNSICovCi0vKiMjIyBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgKi8KLS8qIyMjIENoYXAuIDEyLjIgKi8KLS8qIyMjIE9mZnNldCA6IDB4MDAwMCAwMjg4ICovCi0vKiMjIyAoTG9ja2VkKSAqLwotCi0JRUhSUyAgPSBFeHRlcm5hbCBoYXJkIHJlc2V0Ci0JRVNSUyAgPSBFeHRlcm5hbCBzb2Z0IHJlc2V0Ci0JTExSUyAgPSBMb3NzLW9mLWxvY2sgcmVzZXQKLQlTV1JTICA9IFNvZnR3YXJlIHdhdGNoZG9nIHJlc2V0Ci0JQ1NSUyAgPSBDaGVjayBzdG9wIHJlc2V0Ci0JREJIUlMgPSBEZWJ1ZyBwb3J0IGhhcmQgcmVzZXQKLQlEQlNSUyA9IERlYnVnIHBvcnQgc29mdCByZXNldAotCUpUUlMgID0gSlRBRyByZXNldAotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKglETUEgKi8KLS8qICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8qIyMjIFNEU1IgKi8KLS8qIyMjIFNETUEgU3RhdHVzIFJlZ2lzdGVyICovCi0vKiMjIyBDaGFwLiAyMC4yLjIgKi8KLS8qIyMjIE9mZnNldCA6IDB4MDAwMCAwOTA4ICovCi0KLQlTQkVSID0gMAkvKiBTRE1BIGNoYW5uZWwgYnVzIGVycm9yICovCi0JRFNQMiA9IDAJLyogRFNQIGNoYWluMiAoVHgpIGludGVycnVwdCAqLwotCURTUDEgPSAwCS8qIERTUCBjaGFpbjEgKFJ4KSBpbnRlcnJ1cHQgKi8KLQotCT0+IDB4MDAKLQotLyojIyMgU0RNUiAqLwotLyojIyMgU0RNQSBNYXNrIFJlZ2lzdGVyICovCi0vKiMjIyBDaGFwLiAyMC4yLjMgKi8KLS8qIyMjIE9mZnNldCA6IDB4MDAwMCAwOTBDICovCi0KLQlTQkVSID0gMAotCURTUDIgPSAwCi0JRFNQMSA9IDAJLyogQWxsIGludGVycnVwdHMgYXJlIG1hc2tlZCAqLwotCi0JPT4gMHgwMAotCi0vKiMjIyBTREFSICovCi0vKiMjIyBTRE1BIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLS8qIyMjIENoYXAuIDIwLjIuNCAqLwotLyojIyMgT2Zmc2V0IDogMHgwMDAwIDA5MDQgKi8KLQotCUFSID0gMHh4eHh4IHh4eHgJLyogY3VycmVudCBzeXN0ZW0gYWRkcmVzcyAqLwotCi0JPT4gMHhGQTIwIDIzQUMKLQotLyojIyMgSURTUnggKi8KLS8qIyMjIElETUEgU3RhdHVzIFJlZ2lzdGVyICovCi0vKiMjIyBDaGFwLiAyMC4zLjMuMiAqLwotLyojIyMgT2Zmc2V0IDogSURTUjEoMHgwMDAwIDA5MTApICYgSURTUjIoMHgwMDAwIDA5MTgpICovCi0KLQlBRCAgID0gMAotCURPTkUgPSAwCi0JT0IgICA9IDAKLQotCT0+IDB4MDAKLQotLyojIyMgSURNUnggKi8KLS8qIyMjIElETUEgTWFzayBSZWdpc3RlciAqLwotLyojIyMgQ2hhcC4gMjAuMy4zLjMgKi8KLS8qIyMjIE9mZnNldCA6IElETVIxKDB4MDAwMCAwOTE0KSAmIElETVIyKDB4MDAwMCAwOTFDKSAqLwotCi0JQUQgICA9IDAKLQlET05FID0gMAotCU9CICAgPSAwCmRpZmYgLS1naXQgYS9ib2FyZC9SUFhsaXRlL1JFQURNRS5QbGFuZXRDb3JlIGIvYm9hcmQvUlBYbGl0ZS9SRUFETUUuUGxhbmV0Q29yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjczYzVmNS4uMDAwMDAwMAotLS0gYS9ib2FyZC9SUFhsaXRlL1JFQURNRS5QbGFuZXRDb3JlCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLUFmdGVyIHNldmVyYWwgaGVhcnQtc3RydWNrIGZhaWx1cmUsIEkgZ290IG9uZSB3b3JrYWJsZSB3YXkgdG8gcHJvZ3JhbQotZWFjaCBvdGhlciBpbiBGTEFTSCBiZXR3ZWVuIFBsYW5ldENvcmUgYW5kIFUtQm9vdC4KLQotSGFyZHdhcmUgUGxhdGZvcm0gOiBSUFhsaXRlIERXKEVQIDgyMyBIMSBEVykKLQotMS4gRnJvbSBVLUJvb3QgdG8gUGxhbmV0Q29yZQotCi1VdGlsaXRpZXMgOiBQbGFuZXRDb3JlIEJvb3QgTG9hZGVyIC0gUENMMjAwLm1vdAotCi1bcm9vdEBzYW0gdGZ0cGJvb3RdIyBwcGNfOHh4LW9iamNvcHkgLU8gcHBjYm9vdAotUENMMjAwLm1vdCBwY2wyMDAuYmluCi0KLVtUYXJnZXQgT3BlcmF0aW9uXQotdS1ib290PnQgMTAwMDAwIHBjbDIwMC5iaW4KLXUtYm9vdD5nbyAweDEwMDAwMAotIyMgU3RhcnRpbmcgYXBwbGljYXRpb24gYXQgMHgwMDEwMDAwMCAuLi4KLQotTVBDOHh4IFBsYW5ldENvcmUgRmxhc2ggQnVybmVyIHYyLjAwCi1Db3B5cmlnaHQgMjAwMSBFbWJlZGRlZCBQbGFuZXQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi1Db25zdHJ1Y3QgRmxhc2ggRGV2aWNlLi4uLi5kb25lLgotCi0KLVByb2dyYW0gTVBDOHh4IFBsYW5ldENvcmUgQm9vdCBMb2FkZXIgdjIuMDAKLUJ1aWx0IFNlcCAxOSwgMjAwMSBhdCAxNDozNDo0MgotSW1hZ2UgbG9jYXRlZCBmcm9tIEZDMDAwMDAwIHRvIEZDMDFCNUQxLgotKFNraXBwaW5nIGFuIGltYWdlLCBvbmx5IGxvYWRpbmcgbG93IGJvb3QgaW1hZ2UpCi0KLUxvdyBib290IGJvYXJkIGRldGVjdGVkLCBza2lwcGluZyBoaWdoIGJvb3QgaW1hZ2UuCi1FcmFzaW5nLCBwcm9ncmFtbWluZyBhbmQgdmVyaWZ5aW5nIHdpbGwgc3RhcnQgaW4gMjAKLXNlY29uZHMKLVByZXNzIFAgdG8gc3RhcnQgaW1tZWRpYXRlbHkgb3IgRVNDIHRvIGNhbmNlbAotUHJlc3MgU3BhY2Ugb3IgRW50ZXIgZm9yIG1vcmUgb3B0aW9ucy4KLS4uLi4uLi4uLi4uLi4uCi0KLUVyYXNpbmcKLVByb2dyYW1taW5nCi1GTEFTSCBwcm9ncmFtbWVkIHN1Y2Nlc3NmdWxseSEKLVByZXNzIFIgdG8gaW5kdWNlIGEgaGFyZCByZXNldAotCi1NUEM4eHggUGxhbmV0Q29yZSBCb290IExvYWRlciB2Mi4wMAotQ29weXJpZ2h0IDIwMDEgRW1iZWRkZWQgUGxhbmV0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLURSQU0gYXZhaWxhYmxlIHNpemUgPSA2NCBNQgotd3ZDVgotRFJBTSBPSwotPgotCi0yLiBGcm9tIFBsYW5ldENvcmUgdG8gVS1Cb290Ci0KLVV0aWxpdGllcyA6IFBsYW5ldENvcmUgRkxBU0ggQnVybmVyIC0gUENCMjAwLm1vdAotCi1Vc2UgRmxhc2ggQnVybmVyIHRvIGZpbmlzaCB0aGUgd29yazoKLQotRmlyc3QsIFRGVFAgdGhlIFUtQm9vdCBpbWFnZSBmaWxlIHRvIFJBTTsgRm9yIGV4YW1wbGUsCi1SUFhsaXRlX0RXLmJpbiB0byAweDQwMDAwMAotU2Vjb25kLCBURlRQIEZMQVNIIEJ1cm5lciB0byBSQU07IEZvciBleGFtcGxlLAotMHgxMDAwMDAKLVRoaXJkLCBydW4gdGhlIEZMQVNIIEJ1cm5lciBhbmQgUHJvZ3JhbSB0aGUgVS1Cb290Ci1pbWFnZSBpbnRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uIGluIEZMQVNILgotCi1bVGFyZ2V0IE9wZXJhdGlvbl0KLU1QQzh4eCBQbGFuZXRDb3JlIEJvb3QgTG9hZGVyIHYyLjAwCi1Db3B5cmlnaHQgMjAwMSBFbWJlZGRlZCBQbGFuZXQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotRFJBTSBhdmFpbGFibGUgc2l6ZSA9IDY0IE1CCi13dkNWCi1EUkFNIE9LCi0+dAotTG9hZCB1c2luZyB0ZnRwIHZpYSBFdGhlcm5ldAotRW50ZXIgc2VydmVyIElQIGFkZHJlc3MgPDE3Mi4xNi4xMTUuNj4gOgotRW50ZXIgc2VydmVyIGZpbGVuYW1lICAgPFBDTDIwMC5tb3Q+IDogUlBYbGl0ZV9EVy5iaW4KLUVudGVyIChCKWluYXJ5IG9yIChTKXJlY29yZCBpbnB1dCBtb2RlIDxTPiA6IEIKLUVudGVyIGFkZHJlc3Mgb2Zmc2V0ICA6IDwwMDQwMDAwMCBoZXg+IDoKLQotVG90YWwgYnl0ZXMgPSAxMjAwOTYgaW4gMjMyMTg0IHVTZWNzCi1Mb2FkZWQgYWRkcmVzc2VzIDAwNDAwMDAwIHRocm91Z2ggMDA0MUQ1MUYuCi1TdGFydCBhZGRyZXNzID0gMDA0MDAwMDAKLT50Ci1Mb2FkIHVzaW5nIHRmdHAgdmlhIEV0aGVybmV0Ci1FbnRlciBzZXJ2ZXIgSVAgYWRkcmVzcyA8MTcyLjE2LjExNS42PiA6Ci1FbnRlciBzZXJ2ZXIgZmlsZW5hbWUgICA8UlBYbGl0ZV9EVy5iaW4+IDogUENCMjAwLm1vdAotRW50ZXIgKEIpaW5hcnkgb3IgKFMpcmVjb3JkIGlucHV0IG1vZGUgPEI+IDogUwotRW50ZXIgYWRkcmVzcyBvZmZzZXQgIDogPDAwMDAwMDAwIGhleD4gOgotLjUxMi4xMDI0Li4yMDQ4Li4uLjQwOTYuLi4uLgotVG90YWwgYnl0ZXMgPSAzMjYyODAgaW4gMjU3MDI0OSB1U2VjcwotTG9hZGVkIGFkZHJlc3NlcyAwMDEwMDAwMCB0aHJvdWdoIDAwMTFCQjUxLgotU3RhcnQgYWRkcmVzcyA9IDAwMTAwMDAwCi0+Z28KLVtHbyAwMDEwMDAwMF0KLQotTVBDOHh4IFBsYW5ldENvcmUgRmxhc2ggQnVybmVyIHYyLjAwCi1Db3B5cmlnaHQgMjAwMSBFbWJlZGRlZCBQbGFuZXQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi1Db25zdHJ1Y3QgRmxhc2ggRGV2aWNlLi4uLi5kb25lLgotCi1CYWQgc3RhcnQgYWRkcmVzcwotU3RhcnQgPSAweEZGRkZGRkZGLCB0YXJnZXQgPSAweEZGRkZGRkZGLCBsZW5ndGggPQotMHhGRkZGRkZGRgotRm9yY2luZyBNZW51IEludGVyZmFjZQotCi1oW2VscF0gICAgIFNob3cgY29tbWFuZHMuCi1jW29kZV0gICAgIFNob3cgaW5mb3JtYXRpb24gb24gY29kZSB0byBiZSBsb2FkZWQuCi1kaVtzcGxheV0gIERpc3BsYXkgYWxsIGZsYXNoIHNlY3Rpb25zLgotZHVbbXBdICAgICBEdW1wIG1lbW9yeS4gZCA/IGZvciBtb3JlIGluZm8uCi1lW3Jhc2VdICAgIEVyYXNlIGZsYXNoIHNlY3Rpb25zLgotZltpbGxdICAgICBGaWxsIGZsYXNoIHNlY3Rpb25zLgotaW1bYWdlXSAgICBUb2dnbGUgbG9hZCBoaWdoLCBsb3csIG9yIGJvdGggZmxhc2gKLWltYWdlcy4KLWluW2ZvXSAgICAgU2hvdyBmbGFzaCBpbmZvcm1hdGlvbi4KLW1hW3BdICAgICAgU2hvdyBtZW1vcnkgbWFwLgotbW9bZGlmeV0gICBNb2RpZnkgbWVtb3J5LiAgbSA/IGZvciBtb3JlIGluZm8uCi1wW3JvZ3JhbV0gIEVyYXNlLCBwcm9ncmFtLCBhbmQgdmVyaWZ5IG5vdy4KLXJlc2V0ICAgICAgUmVzdGFydCB0aGUgbG9hZGVyLgotc1tob3ddICAgICBTaG93IGZsYXNoIHNlY3Rpb25zIHRvIGVyYXNlIGFuZCBwcm9ncmFtLgotdFtlc3RdICAgICBUZXN0IGZsYXNoIHNlY3Rpb25zLgotcVt1aXRdICAgICBRdWl0IHdpdGhvdXQgcHJvZ3JhbW1pbmcuCi0jcHJvZ3JhbSA0MDAwMDAgZmYwMDAwMDAgMUQ1MUYKLWRvUHJvZ3JhbSggNDAwMDAwIGZmMDAwMDAwIDFENTFGICkKLQotU3RhcnQgPSAweDAwNDAwMDAwLCB0YXJnZXQgPSAweEZGMDAwMDAwLCBsZW5ndGggPQotMHgwMDAxRDUxRgotRXJhc2luZyBzZWN0b3IgMHhGRjAwMDAwMCwgbGVuZ3RoIDB4MDA4MDAwLgotRXJhc2luZyBzZWN0b3IgMHhGRjAwODAwMCwgbGVuZ3RoIDB4MDA4MDAwLgotRXJhc2luZyBzZWN0b3IgMHhGRjAxMDAwMCwgbGVuZ3RoIDB4MDA4MDAwLgotRXJhc2luZyBzZWN0b3IgMHhGRjAxODAwMCwgbGVuZ3RoIDB4MDA4MDAwLgotUHJvZ3JhbW1pbmcgRkYwMDAwMDAgdGhyb3VnaCBGRjAxRDUxRQotRkxBU0ggcHJvZ3JhbW1lZCBzdWNjZXNzZnVsbHkhCi1QcmVzcyBSIHRvIGluZHVjZSBhIGhhcmQgcmVzZXQKLQotRm9yY2luZyBIYXJkIFJlc2V0IGJ5IE1hY2hpbmVDaGVjayBhbmQKLVJlc2V0T25DaGVja3N0b3AuLi4KLQotVS1Cb290IDEuMS4yIChBdWcgMjkgMjAwNCAtIDE1OjExOjI3KQotCi1DUFU6ICAgUFBDODIzRVpUbm5CMiBhdCA0OCBNSHo6IDE2IGtCIEktQ2FjaGUgOCBrQgotRC1DYWNoZQotQm9hcmQ6IFJQWGxpdGVfRFcKLURSQU06ICA2NCBNQgotRkxBU0g6IDE2IE1CCi0qKiogV2FybmluZyAtIGJhZCBDUkMsIHVzaW5nIGRlZmF1bHQgZW52aXJvbm1lbnQKLQotSW46ICAgIHNlcmlhbAotT3V0OiAgIHNlcmlhbAotRXJyOiAgIHNlcmlhbAotTmV0OiAgIFNDQyBFVEhFUk5FVAotdS1ib290PgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdlbGwsIHNvbWV0aW1lcyBuZXR3b3JrIGZ1bmN0aW9uIG9mIFBsYW5ldENvcmUgY291bGRuJ3Qgd29yayB3aGVuCi1zd2l0Y2hpbmcgZnJvbSBVLUJvb3QgdG8gUGxhbmV0Q29yZS4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZG4ndAotZG93bmxvYWQgYSBmaWxlIGZyb20gSE9TVCBQQyB2aWEgVEZUUC4gRG9uJ3Qgd29ycnksIGp1c3QgcmVzdGFydCB5b3VyCi1IT1NUIFBDIGFuZCBldmVyeXRoaW5nIHdvdWxkIHdvcmsgYXMgc21vb3RoIGFzIGNsb2Nrd29yay4gSSBkb24ndAota25vdyB0aGUgcmVhc29uIFdIWTotKQotCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1NZXJyeSBDaHJpc3RtYXMgYW5kIEhhcHB5IE5ldyBZZWFyIQotCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLT09PT09Ci1CZXN0IHJlZ2FyZHMsCi0KLVNhbQpkaWZmIC0tZ2l0IGEvYm9hcmQvUlBYbGl0ZS9SUFhsaXRlLmMgYi9ib2FyZC9SUFhsaXRlL1JQWGxpdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg1NzVhNC4uMDAwMDAwMAotLS0gYS9ib2FyZC9SUFhsaXRlL1JQWGxpdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLS8qCi0gKiBZb28uIEpvbmdob29uLCBJUG9uZSwgeW9vdGhAaXBvbmUuY28ua3IKLSAqIFUtQm9vdCBwb3J0IG9uIFJQWGxpdGUgYm9hcmQKLSAqCi0gKiBEUkFNIHJlbGF0ZWQgVVBNQSByZWdpc3RlciB2YWx1ZXMgYXJlIG1vZGlmaWVkLgotICogU2VlIFJQWExpdGUgZW5naW5lZXJpbmcgbm90ZSA6IDUwTUh6LzYwbnMgLSBVUE0gUkFNIFdPUkRTCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPG1wYzh4eC5oPgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBsb25nIGludCBkcmFtX3NpemUgKGxvbmcgaW50LCBsb25nIGludCAqLCBsb25nIGludCk7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2RlZmluZQlfTk9UX1VTRURfCTB4RkZGRkNDMjUKLQotY29uc3QgdWludCBzZHJhbV90YWJsZVtdID0gewotCS8qCi0JICogU2luZ2xlIFJlYWQuIChPZmZzZXQgMDBoIGluIFVQTUEgUkFNKQotCSAqLwotCTB4Q0ZGRkNDMjQsIDB4MEZGRkNDMDQsIDBYMENBRkNDMDQsIDBYMDNBRkNDMDgsCi0JMHgzRkJGQ0MyNywJCS8qIGxhc3QgKi8KLQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAotCi0JLyoKLQkgKiBCdXJzdCBSZWFkLiAoT2Zmc2V0IDA4aCBpbiBVUE1BIFJBTSkKLQkgKi8KLQkweENGRkZDQzI0LCAweDBGRkZDQzA0LCAweDBDQUZDQzg0LCAweDAzQUZDQzg4LAotCTB4M0ZCRkNDMjcsCQkvKiBsYXN0ICovCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAotCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCi0KLQkvKgotCSAqIFNpbmdsZSBXcml0ZS4gKE9mZnNldCAxOGggaW4gVVBNQSBSQU0pCi0JICovCi0JMHhDRkZGQ0MyNCwgMHgwRkZGQ0MwNCwgMHgwQ0ZGQ0MwNCwgMHgwM0ZGQ0MwMCwKLQkweDNGRkZDQzI3LAkJLyogbGFzdCAqLwotCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCi0KLQkvKgotCSAqIEJ1cnN0IFdyaXRlLiAoT2Zmc2V0IDIwaCBpbiBVUE1BIFJBTSkKLQkgKi8KLQkweENGRkZDQzI0LCAweDBGRkZDQzA0LCAweDBDRkZDQzgwLCAweDAzRkZDQzhDLAotCTB4MENGRkNDMDAsIDB4MzNGRkNDMjcsCS8qIGxhc3QgKi8KLQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAotCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQotCS8qCi0JICogUmVmcmVzaC4gKE9mZnNldCAzMGggaW4gVVBNQSBSQU0pCi0JICovCi0JMHhDMEZGQ0MyNCwgMHgwM0ZGQ0MyNCwgMHgwRkZGQ0MyNCwgMHgwRkZGQ0MyNCwKLQkweDNGRkZDQzI3LAkJLyogbGFzdCAqLwotCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQotCS8qCi0JICogRXhjZXB0aW9uLiAoT2Zmc2V0IDNDaCBpbiBVUE1BIFJBTSkKLQkgKi8KLQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQotLyoKLSAqIENoZWNrIEJvYXJkIElkZW50aXR5OgotICovCi0KLWludCBjaGVja2JvYXJkICh2b2lkKQotewotCXB1dHMgKCJCb2FyZDogUlBYbGl0ZVxuIik7Ci0JcmV0dXJuICgwKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1waHlzX3NpemVfdCBpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDT05GSUdfU1lTX0lNTVI7Ci0Jdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1hcC0+aW1fbWVtY3RsOwotCWxvbmcgaW50IHNpemUxMDsKLQotCXVwbWNvbmZpZyAoVVBNQSwgKHVpbnQgKikgc2RyYW1fdGFibGUsCi0JCSAgIHNpemVvZiAoc2RyYW1fdGFibGUpIC8gc2l6ZW9mICh1aW50KSk7Ci0KLQkvKiBSZWZyZXNoIGNsb2NrIHByZXNjYWxhciAqLwotCW1lbWN0bC0+bWVtY19tcHRwciA9IENPTkZJR19TWVNfTVBUUFI7Ci0KLQltZW1jdGwtPm1lbWNfbWFyID0gMHgwMDAwMDAwMDsKLQotCS8qIE1hcCBjb250cm9sbGVyIGJhbmtzIDEgdG8gdGhlIFNEUkFNIGJhbmsgKi8KLQltZW1jdGwtPm1lbWNfb3IxID0gQ09ORklHX1NZU19PUjFfUFJFTElNOwotCW1lbWN0bC0+bWVtY19icjEgPSBDT05GSUdfU1lTX0JSMV9QUkVMSU07Ci0KLQltZW1jdGwtPm1lbWNfbWFtciA9IENPTkZJR19TWVNfTUFNUl8xMENPTCAmICh+KE1BTVJfUFRBRSkpOwkvKiBubyByZWZyZXNoIHlldCAqLwotCi0JdWRlbGF5ICgyMDApOwotCi0JLyogcGVyZm9ybSBTRFJBTSBpbml0aWFsaXpzYXRpb24gc2VxdWVuY2UgKi8KLQotCW1lbWN0bC0+bWVtY19tY3IgPSAweDgwMDAyMjMwOwkvKiBTRFJBTSBiYW5rIDAgLSByZWZyZXNoIHR3aWNlICovCi0JdWRlbGF5ICgxKTsKLQotCW1lbWN0bC0+bWVtY19tYW1yIHw9IE1BTVJfUFRBRTsJLyogZW5hYmxlIHJlZnJlc2ggKi8KLQotCXVkZWxheSAoMTAwMCk7Ci0KLQkvKiBDaGVjayBCYW5rIDAgTWVtb3J5IFNpemUKLQkgKiB0cnkgMTAgY29sdW1uIG1vZGUKLQkgKi8KLQotCXNpemUxMCA9IGRyYW1fc2l6ZSAoQ09ORklHX1NZU19NQU1SXzEwQ09MLCBTRFJBTV9CQVNFX1BSRUxJTSwKLQkJCSAgICBTRFJBTV9NQVhfU0laRSk7Ci0KLQlyZXR1cm4gKHNpemUxMCk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIENoZWNrIG1lbW9yeSByYW5nZSBmb3IgdmFsaWQgUkFNLiBBIHNpbXBsZSBtZW1vcnkgdGVzdCBkZXRlcm1pbmVzCi0gKiB0aGUgYWN0dWFsbHkgYXZhaWxhYmxlIFJBTSBzaXplIGJldHdlZW4gYWRkcmVzc2VzIGBiYXNlJyBhbmQKLSAqIGBiYXNlICsgbWF4c2l6ZScuIFNvbWUgKG5vdCBhbGwpIGhhcmR3YXJlIGVycm9ycyBhcmUgZGV0ZWN0ZWQ6Ci0gKiAtIHNob3J0IGJldHdlZW4gYWRkcmVzcyBsaW5lcwotICogLSBzaG9ydCBiZXR3ZWVuIGRhdGEgbGluZXMKLSAqLwotCi1zdGF0aWMgbG9uZyBpbnQgZHJhbV9zaXplIChsb25nIGludCBtYW1yX3ZhbHVlLCBsb25nIGludCAqYmFzZSwKLQkJCSAgIGxvbmcgaW50IG1heHNpemUpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDT05GSUdfU1lTX0lNTVI7Ci0Jdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1hcC0+aW1fbWVtY3RsOwotCi0JbWVtY3RsLT5tZW1jX21hbXIgPSBtYW1yX3ZhbHVlOwotCi0JcmV0dXJuIChnZXRfcmFtX3NpemUgKGJhc2UsIG1heHNpemUpKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL1JQWGxpdGUvZmxhc2guYyBiL2JvYXJkL1JQWGxpdGUvZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFiMTFkNC4uMDAwMDAwMAotLS0gYS9ib2FyZC9SUFhsaXRlL2ZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MDggKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0vKgotICogWW9vLiBKb25naG9vbiwgSVBvbmUsIHlvb3RoQGlwb25lLmNvLmtyCi0gKiBVLUJvb3QgcG9ydCBvbiBSUFhsaXRlIGJvYXJkCi0gKgotICogU29tZSBvZiBmbGFzaCBjb250cm9sIHdvcmRzIGFyZSBtb2RpZmllZC4gKGZyb20gMngxNmJpdCBkZXZpY2UKLSAqIHRvIDR4OGJpdCBkZXZpY2UpCi0gKiBSUFhMaXRlIGJvYXJkIEkgdGVzdGVkIGhhcyBvbmx5IDQgQU0yOUxWODAwQkIgZGV2aWNlcy4gT3RoZXIgZGV2aWNlcwotICogYXJlIG5vdCB0ZXN0ZWQuCi0gKgotICogKD8pIERvZXMgYW4gUlBYTGl0ZSBib2FyZCB3aGljaAotICoJZG9lcyBub3QgdXNlIEFNMjlMVjgwMCBmbGFzaCBtZW1vcnkgZXhpc3QgPwotICoJSSBkb24ndCBrbm93Li4uCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPG1wYzh4eC5oPgotCi1mbGFzaF9pbmZvX3QJZmxhc2hfaW5mb1tDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LU107IC8qIGluZm8gZm9yIEZMQVNIIGNoaXBzCSovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZ1bmN0aW9ucwotICovCi1zdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKHZ1X2xvbmcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbyk7Ci1zdGF0aWMgaW50IHdyaXRlX3dvcmQgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSk7Ci1zdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyAodWxvbmcgYmFzZSwgZmxhc2hfaW5mb190ICppbmZvKTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLXVuc2lnbmVkIGxvbmcgZmxhc2hfaW5pdCAodm9pZCkKLXsKLS8qCXZvbGF0aWxlIGltbWFwX3QgICAgICppbW1hcCAgPSAoaW1tYXBfdCAqKUNPTkZJR19TWVNfSU1NUjsgKi8KLS8qCXZvbGF0aWxlIG1lbWN0bDh4eF90ICptZW1jdGwgPSAmaW1tYXAtPmltX21lbWN0bDsgKi8KLQl1bnNpZ25lZCBsb25nIHNpemVfYjAgOwotCWludCBpOwotCi0JLyogSW5pdDogbm8gRkxBU0hlcyBrbm93biAqLwotCWZvciAoaT0wOyBpPENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTOyArK2kpIHsKLQkJZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047Ci0JfQotCi0JLyogU3RhdGljIEZMQVNIIEJhbmsgY29uZmlndXJhdGlvbiBoZXJlIC0gRklYTUUgWFhYICovCi0vKgotCXNpemVfYjAgPSBmbGFzaF9nZXRfc2l6ZSgodnVfbG9uZyAqKUZMQVNIX0JBU0VfREVCVUcsICZmbGFzaF9pbmZvWzBdKTsKLQotCWlmIChmbGFzaF9pbmZvWzBdLmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJcHJpbnRmICgiIyMgVW5rbm93biBGTEFTSCBvbiBCYW5rIDAgLSBTaXplID0gMHglMDhseCA9ICVsZCBNQlxuIiwKLQkJCXNpemVfYjAsIHNpemVfYjA8PDIwKTsKLQl9Ci0qLwotCS8qIFJlbWFwIEZMQVNIIGFjY29yZGluZyB0byByZWFsIHNpemUgKi8KLS8qJSUlCi0JbWVtY3RsLT5tZW1jX29yMCA9IENPTkZJR19TWVNfT1JfVElNSU5HX0ZMQVNIIHwgKC1zaXplX2IwICYgMHhGRkZGODAwMCk7Ci0JbWVtY3RsLT5tZW1jX2JyMCA9IChDT05GSUdfU1lTX0ZMQVNIX0JBU0UgJiBCUl9CQV9NU0spIHwgQlJfTVNfR1BDTSB8IEJSX1Y7Ci0lJSUqLwotCS8qIFJlLWRvIHNpemluZyB0byBnZXQgZnVsbCBjb3JyZWN0IGluZm8gKi8KLQotCXNpemVfYjAgPSBmbGFzaF9nZXRfc2l6ZSgodnVfbG9uZyAqKUNPTkZJR19TWVNfRkxBU0hfQkFTRSwgJmZsYXNoX2luZm9bMF0pOwotCWZsYXNoX2dldF9vZmZzZXRzIChDT05GSUdfU1lTX0ZMQVNIX0JBU0UsICZmbGFzaF9pbmZvWzBdKTsKLQotI2lmIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFID49IENPTkZJR19TWVNfRkxBU0hfQkFTRQotCS8qIG1vbml0b3IgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCi0JZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotCQkgICAgICBDT05GSUdfU1lTX01PTklUT1JfQkFTRSwKLQkJICAgICAgQ09ORklHX1NZU19NT05JVE9SX0JBU0UrbW9uaXRvcl9mbGFzaF9sZW4tMSwKLQkJICAgICAgJmZsYXNoX2luZm9bMF0pOwotI2VuZGlmCi0KLQlmbGFzaF9pbmZvWzBdLnNpemUgPSBzaXplX2IwOwotCi0JcmV0dXJuIChzaXplX2IwKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyAodWxvbmcgYmFzZSwgZmxhc2hfaW5mb190ICppbmZvKQotewotCWludCBpOwotCi0JLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCi0JaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfQlRZUEUpIHsKLQkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlCSovCi0JCWluZm8tPnN0YXJ0WzBdID0gYmFzZSArIDB4MDAwMDAwMDA7Ci0JCWluZm8tPnN0YXJ0WzFdID0gYmFzZSArIDB4MDAwMTAwMDA7Ci0JCWluZm8tPnN0YXJ0WzJdID0gYmFzZSArIDB4MDAwMTgwMDA7Ci0JCWluZm8tPnN0YXJ0WzNdID0gYmFzZSArIDB4MDAwMjAwMDA7Ci0JCWZvciAoaSA9IDQ7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgewotCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKChpLTMpICogMHgwMDA0MDAwMCkgOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciB0b3AgYm9vdCBibG9jayB0eXBlCQkqLwotCQlpID0gaW5mby0+c2VjdG9yX2NvdW50IC0gMTsKLQkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAxMDAwMDsKLQkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAxODAwMDsKLQkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAyMDAwMDsKLQkJZm9yICg7IGkgPj0gMDsgaS0tKSB7Ci0JCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyBpICogMHgwMDA0MDAwMDsKLQkJfQotCX0KLQotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXZvaWQgZmxhc2hfcHJpbnRfaW5mbyAgKGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQlpbnQgaTsKLQotCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7Ci0JCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgewotCWNhc2UgRkxBU0hfTUFOX0FNRDoJcHJpbnRmICgiQU1EICIpOwkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9NQU5fRlVKOglwcmludGYgKCJGVUpJVFNVICIpOwkJYnJlYWs7Ci0JZGVmYXVsdDoJCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOwlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKLQljYXNlIEZMQVNIX0FNNDAwQjoJcHJpbnRmICgiQU0yOUxWNDAwQiAoNCBNYml0LCBib3R0b20gYm9vdCBzZWN0KVxuIik7Ci0JCQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9BTTQwMFQ6CXByaW50ZiAoIkFNMjlMVjQwMFQgKDQgTWJpdCwgdG9wIGJvb3Qgc2VjdG9yKVxuIik7Ci0JCQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9BTTgwMEI6CXByaW50ZiAoIkFNMjlMVjgwMEIgKDggTWJpdCwgYm90dG9tIGJvb3Qgc2VjdClcbiIpOwotCQkJCWJyZWFrOwotCWNhc2UgRkxBU0hfQU04MDBUOglwcmludGYgKCJBTTI5TFY4MDBUICg4IE1iaXQsIHRvcCBib290IHNlY3RvcilcbiIpOwotCQkJCWJyZWFrOwotCWNhc2UgRkxBU0hfQU0xNjBCOglwcmludGYgKCJBTTI5TFYxNjBCICgxNiBNYml0LCBib3R0b20gYm9vdCBzZWN0KVxuIik7Ci0JCQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9BTTE2MFQ6CXByaW50ZiAoIkFNMjlMVjE2MFQgKDE2IE1iaXQsIHRvcCBib290IHNlY3RvcilcbiIpOwotCQkJCWJyZWFrOwotCWNhc2UgRkxBU0hfQU0zMjBCOglwcmludGYgKCJBTTI5TFYzMjBCICgzMiBNYml0LCBib3R0b20gYm9vdCBzZWN0KVxuIik7Ci0JCQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9BTTMyMFQ6CXByaW50ZiAoIkFNMjlMVjMyMFQgKDMyIE1iaXQsIHRvcCBib290IHNlY3RvcilcbiIpOwotCQkJCWJyZWFrOwotCWRlZmF1bHQ6CQlwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7Ci0JCQkJYnJlYWs7Ci0JfQotCi0JcHJpbnRmICgiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKLQkJaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKLQotCXByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKLQlmb3IgKGk9MDsgaTxpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgewotCQlpZiAoKGkgJSA1KSA9PSAwKQotCQkJcHJpbnRmICgiXG4gICAiKTsKLQkJcHJpbnRmICgiICUwOGxYJXMiLAotCQkJaW5mby0+c3RhcnRbaV0sCi0JCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIKLQkJKTsKLQl9Ci0JcHJpbnRmICgiXG4iKTsKLQlyZXR1cm47Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0vKgotICogVGhlIGZvbGxvd2luZyBjb2RlIGNhbm5vdCBiZSBydW4gZnJvbSBGTEFTSCEKLSAqLwotCi1zdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKHZ1X2xvbmcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQlzaG9ydCBpOwotCXVsb25nIHZhbHVlOwotCXVsb25nIGJhc2UgPSAodWxvbmcpYWRkcjsKLQotCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCi0JYWRkclsweEFBQV0gPSAweDAwQUEwMEFBIDsKLQlhZGRyWzB4NTU1XSA9IDB4MDA1NTAwNTUgOwotCWFkZHJbMHhBQUFdID0gMHgwMDkwMDA5MCA7Ci0KLQl2YWx1ZSA9IGFkZHJbMF0gOwotCi0Jc3dpdGNoICh2YWx1ZSAmIDB4MDBGRjAwRkYpIHsKLQljYXNlIEFNRF9NQU5VRkFDVDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fQU1EOwotCQlicmVhazsKLQljYXNlIEZVSl9NQU5VRkFDVDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fRlVKOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7Ci0JCWluZm8tPnNpemUgPSAwOwotCQlyZXR1cm4gKDApOwkJCS8qIG5vIG9yIHVua25vd24gZmxhc2gJKi8KLQl9Ci0KLQl2YWx1ZSA9IGFkZHJbMl0gOwkJLyogZGV2aWNlIElECQkqLwotCi0Jc3dpdGNoICh2YWx1ZSAmIDB4MDBGRjAwRkYpIHsKLQljYXNlIChBTURfSURfTFY0MDBUICYgMHgwMEZGMDBGRik6Ci0JCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNNDAwVDsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMTE7Ci0JCWluZm8tPnNpemUgPSAweDAwMTAwMDAwOwotCQlicmVhazsJCQkJLyogPT4gMSBNQgkJKi8KLQotCWNhc2UgKEFNRF9JRF9MVjQwMEIgJiAweDAwRkYwMEZGKToKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU00MDBCOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxMTsKLQkJaW5mby0+c2l6ZSA9IDB4MDAxMDAwMDA7Ci0JCWJyZWFrOwkJCQkvKiA9PiAxIE1CCQkqLwotCi0JY2FzZSAoQU1EX0lEX0xWODAwVCAmIDB4MDBGRjAwRkYpOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTgwMFQ7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDE5OwotCQlpbmZvLT5zaXplID0gMHgwMDIwMDAwMDsKLQkJYnJlYWs7CQkJCS8qID0+IDIgTUIJCSovCi0KLQljYXNlIChBTURfSURfTFY4MDBCICYgMHgwMEZGMDBGRik6Ci0JCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNODAwQjsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMTk7Ci0JCWluZm8tPnNpemUgPSAweDAwNDAwMDAwOwkvKiUlJSBTaXplIGRvdWJsZWQgYnkgeW9vdGggKi8KLQkJYnJlYWs7CQkJCS8qID0+IDQgTUIJCSovCi0KLQljYXNlIChBTURfSURfTFYxNjBUICYgMHgwMEZGMDBGRik6Ci0JCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMTYwVDsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMzU7Ci0JCWluZm8tPnNpemUgPSAweDAwNDAwMDAwOwotCQlicmVhazsJCQkJLyogPT4gNCBNQgkJKi8KLQotCWNhc2UgKEFNRF9JRF9MVjE2MEIgJiAweDAwRkYwMEZGKToKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU0xNjBCOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSAzNTsKLQkJaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDA7Ci0JCWJyZWFrOwkJCQkvKiA9PiA0IE1CCQkqLwotI2lmIDAJLyogZW5hYmxlIHdoZW4gZGV2aWNlIElEcyBhcmUgYXZhaWxhYmxlICovCi0JY2FzZSBBTURfSURfTFYzMjBUOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTMyMFQ7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDY3OwotCQlpbmZvLT5zaXplID0gMHgwMDgwMDAwMDsKLQkJYnJlYWs7CQkJCS8qID0+IDggTUIJCSovCi0KLQljYXNlIEFNRF9JRF9MVjMyMEI6Ci0JCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMzIwQjsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gNjc7Ci0JCWluZm8tPnNpemUgPSAweDAwODAwMDAwOwotCQlicmVhazsJCQkJLyogPT4gOCBNQgkJKi8KLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKLQkJcmV0dXJuICgwKTsJCQkvKiA9PiBubyBvciB1bmtub3duIGZsYXNoICovCi0KLQl9Ci0JLyolJSUgc2VjdG9yIHN0YXJ0IGFkZHJlc3MgbW9kaWZpZWQgKi8KLQkvKiBzZXQgdXAgc2VjdG9yIHN0YXJ0IGFkZHJlc3MgdGFibGUgKi8KLQlpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9CVFlQRSkgewotCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUJKi8KLQkJaW5mby0+c3RhcnRbMF0gPSBiYXNlICsgMHgwMDAwMDAwMDsKLQkJaW5mby0+c3RhcnRbMV0gPSBiYXNlICsgMHgwMDAxMDAwMDsKLQkJaW5mby0+c3RhcnRbMl0gPSBiYXNlICsgMHgwMDAxODAwMDsKLQkJaW5mby0+c3RhcnRbM10gPSBiYXNlICsgMHgwMDAyMDAwMDsKLQkJZm9yIChpID0gNDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0JCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoKGktMykgKiAweDAwMDQwMDAwKSA7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIHRvcCBib290IGJsb2NrIHR5cGUJCSovCi0JCWkgPSBpbmZvLT5zZWN0b3JfY291bnQgLSAxOwotCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDEwMDAwOwotCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDE4MDAwOwotCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDIwMDAwOwotCQlmb3IgKDsgaSA+PSAwOyBpLS0pIHsKLQkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIGkgKiAweDAwMDQwMDAwOwotCQl9Ci0JfQotCi0JLyogY2hlY2sgZm9yIHByb3RlY3RlZCBzZWN0b3JzICovCi0JZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0JCS8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsIChBNyAuLiBBMCkgPSAweDAyICovCi0JCS8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KLQkJYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKGluZm8tPnN0YXJ0W2ldKTsKLQkJaW5mby0+cHJvdGVjdFtpXSA9IGFkZHJbNF0gJiAxIDsKLQl9Ci0KLQkvKgotCSAqIFByZXZlbnQgd3JpdGVzIHRvIHVuaW5pdGlhbGl6ZWQgRkxBU0guCi0JICovCi0JaWYgKGluZm8tPmZsYXNoX2lkICE9IEZMQVNIX1VOS05PV04pIHsKLQkJYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopaW5mby0+c3RhcnRbMF07Ci0KLQkJKmFkZHIgPSAweEYwRjBGMEYwOwkvKiByZXNldCBiYW5rICovCi0JfQotCi0JcmV0dXJuIChpbmZvLT5zaXplKTsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotaW50CWZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKmluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQotewotCXZ1X2xvbmcgKmFkZHIgPSAodnVfbG9uZyopKGluZm8tPnN0YXJ0WzBdKTsKLQlpbnQgZmxhZywgcHJvdCwgc2VjdCwgbF9zZWN0OwotCXVsb25nIHN0YXJ0LCBub3csIGxhc3Q7Ci0KLQlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKLQkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJCXByaW50ZiAoIi0gbWlzc2luZ1xuIik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOwotCQl9Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgfHwKLQkgICAgKGluZm8tPmZsYXNoX2lkID4gRkxBU0hfQU1EX0NPTVApKSB7Ci0JCXByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAlMDhseCAtIGFib3J0ZWRcbiIsCi0JCQlpbmZvLT5mbGFzaF9pZCk7Ci0JCXJldHVybiAxOwotCX0KLQotCXByb3QgPSAwOwotCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgewotCQkJcHJvdCsrOwotCQl9Ci0JfQotCi0JaWYgKHByb3QpIHsKLQkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAotCQkJcHJvdCk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmICgiXG4iKTsKLQl9Ci0KLQlsX3NlY3QgPSAtMTsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKLQotCWFkZHJbMHhBQUFdID0gMHhBQUFBQUFBQTsKLQlhZGRyWzB4NTU1XSA9IDB4NTU1NTU1NTU7Ci0JYWRkclsweEFBQV0gPSAweDgwODA4MDgwOwotCWFkZHJbMHhBQUFdID0gMHhBQUFBQUFBQTsKLQlhZGRyWzB4NTU1XSA9IDB4NTU1NTU1NTU7Ci0KLQkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCi0JZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdDw9c19sYXN0OyBzZWN0KyspIHsKLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewkvKiBub3QgcHJvdGVjdGVkICovCi0JCQlhZGRyID0gKHZ1X2xvbmcgKikoaW5mby0+c3RhcnRbc2VjdF0pIDsKLQkJCWFkZHJbMF0gPSAweDMwMzAzMDMwIDsKLQkJCWxfc2VjdCA9IHNlY3Q7Ci0JCX0KLQl9Ci0KLQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoZmxhZykKLQkJZW5hYmxlX2ludGVycnVwdHMoKTsKLQotCS8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLwotCXVkZWxheSAoMTAwMCk7Ci0KLQkvKgotCSAqIFdlIHdhaXQgZm9yIHRoZSBsYXN0IHRyaWdnZXJlZCBzZWN0b3IKLQkgKi8KLQlpZiAobF9zZWN0IDwgMCkKLQkJZ290byBET05FOwotCi0Jc3RhcnQgPSBnZXRfdGltZXIgKDApOwotCWxhc3QgID0gc3RhcnQ7Ci0JYWRkciA9ICh2dV9sb25nICopKGluZm8tPnN0YXJ0W2xfc2VjdF0pOwotCXdoaWxlICgoYWRkclswXSAmIDB4ODA4MDgwODApICE9IDB4ODA4MDgwODApIHsKLQkJaWYgKChub3cgPSBnZXRfdGltZXIoc3RhcnQpKSA+IENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVCkgewotCQkJcHJpbnRmICgiVGltZW91dFxuIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLwotCQlpZiAoKG5vdyAtIGxhc3QpID4gMTAwMCkgewkvKiBldmVyeSBzZWNvbmQgKi8KLQkJCXB1dGMgKCcuJyk7Ci0JCQlsYXN0ID0gbm93OwotCQl9Ci0JfQotCi1ET05FOgotCS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLwotCWFkZHIgPSAodnVfbG9uZyAqKWluZm8tPnN0YXJ0WzBdOwotCWFkZHJbMF0gPSAweEYwRjBGMEYwOwkvKiByZXNldCBiYW5rICovCi0KLQlwcmludGYgKCIgZG9uZVxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENvcHkgbWVtb3J5IHRvIGZsYXNoLCByZXR1cm5zOgotICogMCAtIE9LCi0gKiAxIC0gd3JpdGUgdGltZW91dAotICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqLwotCi1pbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCi17Ci0JdWxvbmcgY3AsIHdwLCBkYXRhOwotCWludCBpLCBsLCByYzsKLQotCXdwID0gKGFkZHIgJiB+Myk7CS8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLwotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHN0YXJ0IGJ5dGVzCi0JICovCi0JaWYgKChsID0gYWRkciAtIHdwKSAhPSAwKSB7Ci0JCWRhdGEgPSAwOwotCQlmb3IgKGk9MCwgY3A9d3A7IGk8bDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQkJfQotCQlmb3IgKDsgaTw0ICYmIGNudD4wOyArK2kpIHsKLQkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLQkJCS0tY250OwotCQkJKytjcDsKLQkJfQotCQlmb3IgKDsgY250PT0wICYmIGk8NDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQkJfQotCi0JCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotCQkJcmV0dXJuIChyYyk7Ci0JCX0KLQkJd3AgKz0gNDsKLQl9Ci0KLQkvKgotCSAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAotCSAqLwotCXdoaWxlIChjbnQgPj0gNCkgewotCQlkYXRhID0gMDsKLQkJZm9yIChpPTA7IGk8NDsgKytpKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0JCX0KLQkJaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7Ci0JCQlyZXR1cm4gKHJjKTsKLQkJfQotCQl3cCAgKz0gNDsKLQkJY250IC09IDQ7Ci0JfQotCi0JaWYgKGNudCA9PSAwKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKLQkgKi8KLQlkYXRhID0gMDsKLQlmb3IgKGk9MCwgY3A9d3A7IGk8NCAmJiBjbnQ+MDsgKytpLCArK2NwKSB7Ci0JCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLQkJLS1jbnQ7Ci0JfQotCWZvciAoOyBpPDQ7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQl9Ci0KLQlyZXR1cm4gKHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogV3JpdGUgYSB3b3JkIHRvIEZsYXNoLCByZXR1cm5zOgotICogMCAtIE9LCi0gKiAxIC0gd3JpdGUgdGltZW91dAotICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqLwotc3RhdGljIGludCB3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpCi17Ci0JdnVfbG9uZyAqYWRkciA9ICh2dV9sb25nICopKGluZm8tPnN0YXJ0WzBdKTsKLQl1bG9uZyBzdGFydDsKLQlpbnQgZmxhZzsKLQotCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwotCWlmICgoKigodnVfbG9uZyAqKWRlc3QpICYgZGF0YSkgIT0gZGF0YSkgewotCQlyZXR1cm4gKDIpOwotCX0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQlhZGRyWzB4QUFBXSA9IDB4QUFBQUFBQUE7Ci0JYWRkclsweDU1NV0gPSAweDU1NTU1NTU1OwotCWFkZHJbMHhBQUFdID0gMHhBMEEwQTBBMDsKLQotCSooKHZ1X2xvbmcgKilkZXN0KSA9IGRhdGE7Ci0KLQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoZmxhZykKLQkJZW5hYmxlX2ludGVycnVwdHMoKTsKLQotCS8qIGRhdGEgcG9sbGluZyBmb3IgRDcgKi8KLQlzdGFydCA9IGdldF90aW1lciAoMCk7Ci0Jd2hpbGUgKCgqKCh2dV9sb25nICopZGVzdCkgJiAweDgwODA4MDgwKSAhPSAoZGF0YSAmIDB4ODA4MDgwODApKSB7Ci0JCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUKSB7Ci0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvUlBYbGl0ZS91LWJvb3QubGRzIGIvYm9hcmQvUlBYbGl0ZS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWIyZmJhLi4wMDAwMDAwCi0tLSBhL2JvYXJkL1JQWGxpdGUvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAxMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotCi1TRUNUSU9OUwotewotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvc3RhcnQubwkoLnRleHQqKQotICAgIGFyY2gvcG93ZXJwYy9jcHUvbXBjOHh4L3RyYXBzLm8JKC50ZXh0KikKLQotICAgICooLnRleHQqKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgS0VFUCgqKC5nb3QyKSkKLSAgICBLRUVQKCooLmdvdCkpCi0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7Ci0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgS0VFUCgqKC5maXh1cCkpCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4gMikgLSAxOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEqKQotICAgICooLnNkYXRhKikKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0KLSAgLiA9IEFMSUdOKDQpOwotICAudV9ib290X2xpc3QgOiB7Ci0JS0VFUCgqKFNPUlQoLnVfYm9vdF9saXN0KikpKTsKLSAgfQotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLmJzcyopCi0gICAqKC5zYnNzKikKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9fYnNzX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL1JQWGxpdGUvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL1JQWGxpdGUvdS1ib290Lmxkcy5kZWJ1ZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjljODRjNy4uMDAwMDAwMAotLS0gYS9ib2FyZC9SUFhsaXRlL3UtYm9vdC5sZHMuZGVidWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGFyY2gvcG93ZXJwYy9jcHUvbXBjOHh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGNvbW1vbi9kbG1hbGxvYy5vCSgudGV4dCkKLSAgICBsaWIvdnNwcmludGYubwkoLnRleHQpCi0gICAgbGliL2NyYzMyLm8JCSgudGV4dCkKLQotICAgIC4gPSBlbnZfb2Zmc2V0OwotICAgIGNvbW1vbi9lbnZfZW1iZWRkZWQubygudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLnJvZGF0YSkKLSAgICAqKC5yb2RhdGExKQotICAgICooLnJvZGF0YS5zdHIxLjQpCi0gICAgKiguZWhfZnJhbWUpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwRkZGKSAmIDB4RkZGRkYwMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotCi0gIC4gPSBBTElHTig0KTsKLSAgLnVfYm9vdF9saXN0IDogewotCUtFRVAoKihTT1JUKC51X2Jvb3RfbGlzdCopKSk7Ci0gIH0KLQotCi0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICB9Ci0gIF9fYnNzX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2FsdGVyYS9jb21tb24vQU1ETFYwNjVELmMgYi9ib2FyZC9hbHRlcmEvY29tbW9uL0FNRExWMDY1RC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWE2Yjk4Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2FsdGVyYS9jb21tb24vQU1ETFYwNjVELmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0Ci0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2lmIGRlZmluZWQoQ09ORklHX05JT1MpCi0jaW5jbHVkZSA8bmlvcy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNlbmRpZgotCi0jZGVmaW5lIFNFQ1RTWgkJKDY0ICogMTAyNCkKLWZsYXNoX2luZm9fdCBmbGFzaF9pbmZvW0NPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTXTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXVuc2lnbmVkIGxvbmcgZmxhc2hfaW5pdCAodm9pZCkKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JZmxhc2hfaW5mb190ICpmbGkgPSAmZmxhc2hfaW5mb1swXTsKLQotCWZsaS0+c2l6ZSA9IENPTkZJR19TWVNfRkxBU0hfU0laRTsKLQlmbGktPnNlY3Rvcl9jb3VudCA9IENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1Q7Ci0JZmxpLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQgKyBGTEFTSF9BTURMVjA2NUQ7Ci0KLQlhZGRyID0gQ09ORklHX1NZU19GTEFTSF9CQVNFOwotCWZvciAoaSA9IDA7IGkgPCBmbGktPnNlY3Rvcl9jb3VudDsgKytpKSB7Ci0JCWZsaS0+c3RhcnRbaV0gPSBhZGRyOwotCQlhZGRyICs9IFNFQ1RTWjsKLQkJZmxpLT5wcm90ZWN0W2ldID0gMTsKLQl9Ci0KLQlyZXR1cm4gKENPTkZJR19TWVNfRkxBU0hfU0laRSk7Ci19Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICogaW5mbykKLXsKLQlpbnQgaSwgazsKLQlpbnQgZXJhc2VkOwotCXVuc2lnbmVkIGxvbmcgKmFkZHI7Ci0KLQlwcmludGYgKCIgIFNpemU6ICVsZCBLQiBpbiAlZCBTZWN0b3JzXG4iLAotCQlpbmZvLT5zaXplID4+IDEwLCBpbmZvLT5zZWN0b3JfY291bnQpOwotCXByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKLQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKLQotCQkvKiBDaGVjayBpZiB3aG9sZSBzZWN0b3IgaXMgZXJhc2VkICovCi0JCWVyYXNlZCA9IDE7Ci0JCWFkZHIgPSAodW5zaWduZWQgbG9uZyAqKSBpbmZvLT5zdGFydFtpXTsKLQkJZm9yIChrID0gMDsgayA8IFNFQ1RTWi9zaXplb2YodW5zaWduZWQgbG9uZyk7IGsrKykgewotCQkJaWYgKCByZWFkbChhZGRyKyspICE9ICh1bnNpZ25lZCBsb25nKS0xKSB7Ci0JCQkJZXJhc2VkID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCS8qIFByaW50IHRoZSBpbmZvICovCi0JCWlmICgoaSAlIDUpID09IDApCi0JCQlwcmludGYgKCJcbiAgICIpOwotCQlwcmludGYgKCIgJTA4bFglcyVzIiwKLQkJCWluZm8tPnN0YXJ0W2ldLAotCQkJZXJhc2VkID8gIiBFIiA6ICIgICIsCi0JCQlpbmZvLT5wcm90ZWN0W2ldID8gIlJPICIgOiAiICAgIik7Ci0JfQotCXByaW50ZiAoIlxuIik7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLQotaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKLXsKLQl1bnNpZ25lZCBjaGFyICphZGRyID0gKHVuc2lnbmVkIGNoYXIgKikgaW5mby0+c3RhcnRbMF07Ci0JdW5zaWduZWQgY2hhciAqYWRkcjI7Ci0JaW50IHByb3QsIHNlY3Q7Ci0JdWxvbmcgc3RhcnQ7Ci0KLQkvKiBTb21lIHNhbml0eSBjaGVja2luZyAqLwotCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgewotCQlwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlwcm90ID0gMDsKLQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgKytzZWN0KSB7Ci0JCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7Ci0JCQlwcm90Kys7Ci0JCX0KLQl9Ci0JaWYgKHByb3QpIHsKLQkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAotCQkJcHJvdCk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmICgiXG4iKTsKLQl9Ci0KLQkvKiBJdCdzIG9rIHRvIGVyYXNlIG11bHRpcGxlIHNlY3RvcnMgcHJvdmlkZWQgd2UgZG9uJ3QgZGVsYXkgbW9yZQotCSAqIHRoYW4gNTAgdXNlYyBiZXR3ZWVuIGNtZHMgLi4uIGF0IHdoaWNoIHBvaW50IHRoZSBlcmFzZSB0aW1lLW91dAotCSAqIG9jY3Vycy4gU28gZG9uJ3QgZ28gYW5kIHB1dCBwcmludGYoKSBjYWxscyBpbiB0aGUgbG9vcCAuLi4gaXQKLQkgKiB3b24ndCBiZSB2ZXJ5IGhlbHBmdWwgOy0pCi0JICovCi0JZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7IHNlY3QrKykgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KLQkJCWFkZHIyID0gKHVuc2lnbmVkIGNoYXIgKikgaW5mby0+c3RhcnRbc2VjdF07Ci0JCQl3cml0ZWIgKDB4YWEsIGFkZHIpOwotCQkJd3JpdGViICgweDU1LCBhZGRyKTsKLQkJCXdyaXRlYiAoMHg4MCwgYWRkcik7Ci0JCQl3cml0ZWIgKDB4YWEsIGFkZHIpOwotCQkJd3JpdGViICgweDU1LCBhZGRyKTsKLQkJCXdyaXRlYiAoMHgzMCwgYWRkcjIpOwotCQkJLyogTm93IGp1c3Qgd2FpdCBmb3IgMHhmZiAmIHByb3ZpZGUgc29tZSB1c2VyCi0JCQkgKiBmZWVkYmFjayB3aGlsZSB3ZSB3YWl0LgotCQkJICovCi0JCQlzdGFydCA9IGdldF90aW1lciAoMCk7Ci0JCQl3aGlsZSAoIHJlYWRiIChhZGRyMikgIT0gMHhmZikgewotCQkJCXVkZWxheSAoMTAwMCAqIDEwMDApOwotCQkJCXB1dGMgKCcuJyk7Ci0JCQkJaWYgKGdldF90aW1lciAoc3RhcnQpID4gQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUKSB7Ci0JCQkJCXByaW50ZiAoInRpbWVvdXRcbiIpOwotCQkJCQlyZXR1cm4gMTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JcHJpbnRmICgiXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29weSBtZW1vcnkgdG8gZmxhc2gsIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICovCi0KLWludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1Y2hhciAqIHNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQotewotCi0JdnVfY2hhciAqY21kID0gKHZ1X2NoYXIgKikgaW5mby0+c3RhcnRbMF07Ci0JdnVfY2hhciAqZHN0ID0gKHZ1X2NoYXIgKikgYWRkcjsKLQl1bnNpZ25lZCBjaGFyIGI7Ci0JdWxvbmcgc3RhcnQ7Ci0KLQl3aGlsZSAoY250KSB7Ci0JCS8qIENoZWNrIGZvciBzdWZmaWNpZW50IGVyYXNlICovCi0JCWIgPSAqc3JjOwotCQlpZiAoKHJlYWRiIChkc3QpICYgYikgIT0gYikgewotCQkJcHJpbnRmICgiJTAyeCA6ICUwMnhcbiIsIHJlYWRiIChkc3QpLCBiKTsKLQkJCXJldHVybiAoMik7Ci0JCX0KLQotCQl3cml0ZWIgKDB4YWEsIGNtZCk7Ci0JCXdyaXRlYiAoMHg1NSwgY21kKTsKLQkJd3JpdGViICgweGEwLCBjbWQpOwotCQl3cml0ZWIgKGIsIGRzdCk7Ci0KLQkJLyogVmVyaWZ5IHdyaXRlICovCi0JCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKLQkJd2hpbGUgKHJlYWRiIChkc3QpICE9IGIpIHsKLQkJCWlmIChnZXRfdGltZXIgKHN0YXJ0KSA+IENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVCkgewotCQkJCXJldHVybiAxOwotCQkJfQotCQl9Ci0JCWRzdCsrOwotCQlzcmMrKzsKLQkJY250LS07Ci0JfQotCi0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2FsdGVyYS9jb21tb24vZmxhc2guYyBiL2JvYXJkL2FsdGVyYS9jb21tb24vZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY1NmEzMC4uMDAwMDAwMAotLS0gYS9ib2FyZC9hbHRlcmEvY29tbW9uL2ZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0Ci0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPG5pb3MuaD4KLQotZmxhc2hfaW5mb190IGZsYXNoX2luZm9bQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1NdOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICogaW5mbykKLXsKLQlpbnQgaSwgazsKLQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JaW50IGVyYXNlZDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpmbGFzaDsKLQotCXByaW50ZiAoIiAgU2l6ZTogJWxkIEtCIGluICVkIFNlY3RvcnNcbiIsCi0JCWluZm8tPnNpemUgPj4gMTAsIGluZm8tPnNlY3Rvcl9jb3VudCk7Ci0JcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgewotCi0JCS8qIENoZWNrIGlmIHdob2xlIHNlY3RvciBpcyBlcmFzZWQgKi8KLQkJaWYgKGkgIT0gKGluZm8tPnNlY3Rvcl9jb3VudCAtIDEpKQotCQkJc2l6ZSA9IGluZm8tPnN0YXJ0W2kgKyAxXSAtIGluZm8tPnN0YXJ0W2ldOwotCQllbHNlCi0JCQlzaXplID0gaW5mby0+c3RhcnRbMF0gKyBpbmZvLT5zaXplIC0gaW5mby0+c3RhcnRbaV07Ci0JCWVyYXNlZCA9IDE7Ci0JCWZsYXNoID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgaW5mby0+c3RhcnRbaV07Ci0JCWZvciAoayA9IDA7IGsgPCBzaXplOyBrKyspIHsKLQkJCWlmICgqZmxhc2grKyAhPSAweGZmKSB7Ci0JCQkJZXJhc2VkID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCS8qIFByaW50IHRoZSBpbmZvICovCi0JCWlmICgoaSAlIDUpID09IDApCi0JCQlwcmludGYgKCJcbiAgICIpOwotCQlwcmludGYgKCIgJTA4bFglcyVzIiwgaW5mby0+c3RhcnRbaV0sIGVyYXNlZCA/ICIgRSIgOiAiICAiLAotCQkJaW5mby0+cHJvdGVjdFtpXSA/ICJSTyAiIDogIiAgICIpOwotCX0KLQlwcmludGYgKCJcbiIpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLWludCBmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCi17Ci0Jdm9sYXRpbGUgQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUgKmFkZHIgPSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUgKikgKGluZm8tPnN0YXJ0WzBdKTsKLQl2b2xhdGlsZSBDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSAqYWRkcjI7Ci0JaW50IHByb3QsIHNlY3Q7Ci0JdW5zaWduZWQgb2xkcHJpOwotCXVsb25nIHN0YXJ0OwotCi0JLyogU29tZSBzYW5pdHkgY2hlY2tpbmcgKi8KLQlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKLQkJcHJpbnRmICgiLSBubyBzZWN0b3JzIHRvIGVyYXNlXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcHJvdCA9IDA7Ci0JZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7ICsrc2VjdCkgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgewotCQkJcHJvdCsrOwotCQl9Ci0JfQotCWlmIChwcm90KSB7Ci0JCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKLQkJCXByb3QpOwotCX0gZWxzZSB7Ci0JCXByaW50ZiAoIlxuIik7Ci0JfQotCi0jaWZkZWYgREVCVUcKLQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgc2VjdCsrKSB7Ci0JCXByaW50ZigiLSBFcmFzZTogU2VjdDogJWkgQCAweCUwOHhcbiIsIHNlY3QsICBpbmZvLT5zdGFydFtzZWN0XSk7Ci0JfQotI2VuZGlmCi0KLQkvKiBOT1RFOiBkaXNhYmxpbmcgaW50ZXJydXB0cyBvbiBOaW9zIGNhbiBiZSB2ZXJ5IGJhZCBzaW5jZSBpdAotCSAqIGFsc28gZGlzYWJsZXMgdGhlIExPX0xJTUlUIGV4Y2VwdGlvbi4gSXQncyBiZXR0ZXIgaGVyZSB0bwotCSAqIHNldCB0aGUgaW50ZXJydXB0IHByaW9yaXR5IHRvIDMgJiByZXN0b3JlIGl0IHdoZW4gd2UncmUgZG9uZS4KLQkgKi8KLQlvbGRwcmkgPSBpcHJpICgzKTsKLQotCS8qIEl0J3Mgb2sgdG8gZXJhc2UgbXVsdGlwbGUgc2VjdG9ycyBwcm92aWRlZCB3ZSBkb24ndCBkZWxheSBtb3JlCi0JICogdGhhbiA1MCB1c2VjIGJldHdlZW4gY21kcyAuLi4gYXQgd2hpY2ggcG9pbnQgdGhlIGVyYXNlIHRpbWUtb3V0Ci0JICogb2NjdXJzLiBTbyBkb24ndCBnbyBhbmQgcHV0IHByaW50ZigpIGNhbGxzIGluIHRoZSBsb29wIC4uLiBpdAotCSAqIHdvbid0IGJlIHZlcnkgaGVscGZ1bCA7LSkKLQkgKi8KLQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgc2VjdCsrKSB7Ci0JCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsJLyogbm90IHByb3RlY3RlZCAqLwotCQkJYWRkcjIgPSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUgKikgKGluZm8tPnN0YXJ0W3NlY3RdKTsKLQkJCSphZGRyID0gMHhhYTsKLQkJCSphZGRyID0gMHg1NTsKLQkJCSphZGRyID0gMHg4MDsKLQkJCSphZGRyID0gMHhhYTsKLQkJCSphZGRyID0gMHg1NTsKLQkJCSphZGRyMiA9IDB4MzA7Ci0JCQkvKiBOb3cganVzdCB3YWl0IGZvciAweGZmICYgcHJvdmlkZSBzb21lIHVzZXIKLQkJCSAqIGZlZWRiYWNrIHdoaWxlIHdlIHdhaXQuIEhlcmUgd2UgaGF2ZSB0byBncmFudAotCQkJICogdGltZXIgaW50ZXJydXB0cy4gT3RoZXJ3aXNlIGdldF90aW1lcigpIGNhbid0Ci0JCQkgKiB3b3JrIHJpZ2h0LiAqLwotCQkJaXByaShvbGRwcmkpOwotCQkJc3RhcnQgPSBnZXRfdGltZXIgKDApOwotCQkJd2hpbGUgKCphZGRyMiAhPSAweGZmKSB7Ci0JCQkJdWRlbGF5ICgxMDAwICogMTAwMCk7Ci0JCQkJcHV0YyAoJy4nKTsKLQkJCQlpZiAoZ2V0X3RpbWVyIChzdGFydCkgPiBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQpIHsKLQkJCQkJcHJpbnRmICgidGltZW91dFxuIik7Ci0JCQkJCXJldHVybiAxOwotCQkJCX0KLQkJCX0KLQkJCW9sZHByaSA9IGlwcmkgKDMpOyAvKiBkaXNhbGxvdyBub24gaW1wb3J0YW50IGlycXMgYWdhaW4gKi8KLQkJfQotCX0KLQotCXByaW50ZiAoIlxuIik7Ci0KLQkvKiBSZXN0b3JlIGludGVycnVwdCBwcmlvcml0eSAqLwotCWlwcmkgKG9sZHByaSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29weSBtZW1vcnkgdG8gZmxhc2gsIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICovCi0KLWludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1Y2hhciAqIHNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQotewotCi0JdnVfY2hhciAqY21kID0gKHZ1X2NoYXIgKikgaW5mby0+c3RhcnRbMF07Ci0JdnVfY2hhciAqZHN0ID0gKHZ1X2NoYXIgKikgYWRkcjsKLQl1bnNpZ25lZCBjaGFyIGI7Ci0JdW5zaWduZWQgb2xkcHJpOwotCXVsb25nIHN0YXJ0OwotCi0Jd2hpbGUgKGNudCkgewotCQkvKiBDaGVjayBmb3Igc3VmZmljaWVudCBlcmFzZSAqLwotCQliID0gKnNyYzsKLQkJaWYgKCgqZHN0ICYgYikgIT0gYikgewotCQkJcHJpbnRmICgiJTAyeCA6ICUwMnhcbiIsICpkc3QsIGIpOwotCQkJcmV0dXJuICgyKTsKLQkJfQotCi0JCS8qIERpc2FibGUgaW50ZXJydXB0cyBvdGhlciB0aGFuIHdpbmRvdyB1bmRlcmZsb3cKLQkJICogKGludGVycnVwdCBwcmlvcml0eSAyKQotCQkgKi8KLQkJb2xkcHJpID0gaXByaSAoMyk7Ci0JCSpjbWQgPSAweGFhOwotCQkqY21kID0gMHg1NTsKLQkJKmNtZCA9IDB4YTA7Ci0JCSpkc3QgPSBiOwotCi0JCS8qIFZlcmlmeSB3cml0ZSAqLwotCQlzdGFydCA9IGdldF90aW1lciAoMCk7Ci0JCXdoaWxlICgqZHN0ICE9IGIpIHsKLQkJCWlmIChnZXRfdGltZXIgKHN0YXJ0KSA+IENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVCkgewotCQkJCWlwcmkgKG9sZHByaSk7Ci0JCQkJcmV0dXJuIDE7Ci0JCQl9Ci0JCX0KLQkJZHN0Kys7Ci0JCXNyYysrOwotCQljbnQtLTsKLQkJaXByaSAob2xkcHJpKTsKLQl9Ci0KLQlyZXR1cm4gKDApOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYnJvYWRjb20vYmNtMjgxNTVfYXAvTWFrZWZpbGUgYi9ib2FyZC9icm9hZGNvbS9iY20yODE1NV9hcC9NYWtlZmlsZQppbmRleCBiMTg3ODVhLi40YmI5ZTcwIDEwMDY0NAotLS0gYS9ib2FyZC9icm9hZGNvbS9iY20yODE1NV9hcC9NYWtlZmlsZQorKysgYi9ib2FyZC9icm9hZGNvbS9iY20yODE1NV9hcC9NYWtlZmlsZQpAQCAtNCw0ICs0LDQgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCiAjCiAKLW9iai15CSs9ICQoQk9BUkQpLm8KK29iai15CSs9IGJjbTI4MTU1X2FwLm8KZGlmZiAtLWdpdCBhL2JvYXJkL2NvbXB1bGFiL2NtX3QzMzUvTWFrZWZpbGUgYi9ib2FyZC9jb21wdWxhYi9jbV90MzM1L01ha2VmaWxlCmluZGV4IDBlNmU5NmUuLmI0MDVjYWEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NvbXB1bGFiL2NtX3QzMzUvTWFrZWZpbGUKKysrIGIvYm9hcmQvY29tcHVsYWIvY21fdDMzNS9NYWtlZmlsZQpAQCAtNiw1ICs2LDUgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCiAjCiAKLW9iai15CSs9ICQoQk9BUkQpLm8KK29iai15CSs9IGNtX3QzMzUubwogb2JqLSQoQ09ORklHX1NQTF9CVUlMRCkgKz0gbXV4Lm8gc3BsLm8KZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmUvUFBDaGFtZWxlb25FVkIvZnBnYWRhdGEuYyBiL2JvYXJkL2RhdmUvUFBDaGFtZWxlb25FVkIvZnBnYWRhdGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFiMjMwYS4uMDAwMDAwMAotLS0gYS9ib2FyZC9kYXZlL1BQQ2hhbWVsZW9uRVZCL2ZwZ2FkYXRhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjc3ICswLDAgQEAKLTB4MWYsIDB4OGIsIDB4MDgsIDB4MDgsIDB4ODAsIDB4YjAsIDB4YzAsIDB4M2UsCi0weDAwLCAweDAzLCAweDYxLCAweDczLCAweDY4LCAweDM0LCAweDMwLCAweDM1LAotMHg1ZiwgMHgzMSwgMHg1ZiwgMHgzMCwgMHgzMCwgMHgyZSwgMHg2MiwgMHg2OSwKLTB4NzQsIDB4MDAsIDB4OTQsIDB4OWIsIDB4N2YsIDB4NzAsIDB4MTQsIDB4NjUsCi0weDlhLCAweGM3LCAweDlmLCAweGU5LCAweGVlLCAweDI0LCAweDlkLCAweDk5LAotMHg0ZSwgMHhhNiwgMHgwZCwgMHg4NCwgMHg0MiwgMHhlNSwgMHg0NywgMHhlNywKLTB4YzcsIDB4YmEsIDB4YTMsIDB4MzcsIDB4MGMsIDB4NjMsIDB4ODIsIDB4OWEsCi0weDA1LCAweDMyLCAweDY5LCAweDAzLCAweDdmLCAweGU0LCAweDg0LCAweDJkLAotMHhkOSwgMHhiZCwgMHhiYSwgMHhhYSwgMHhkYiwgMHg1YSwgMHg2YiwgMHgxZCwKLTB4NWQsIDB4YmMsIDB4ZTIsIDB4YjYsIDB4ZDAsIDB4Y2EsIDB4ZWEsIDB4NTUsCi0weDFkLCAweDY3LCAweDZkLCAweGRkLCAweGJkLCAweDI0LCAweDM5LCAweDA4LAotMHgwNywgMHgyYiwgMHgwMSwgMHhiOSwgMHgyMywgMHhlZSwgMHg1MSwgMHg1YywKLTB4ZjMsIDB4NjMsIDB4Y2IsIDB4YTgsIDB4YTksIDB4YWQsIDB4MTEsIDB4NzYsCi0weDBkLCAweDBhLCAweGE1LCAweDRkLCAweDJlLCAweDhiLCAweDIxLCAweDQ0LAotMHhjOCwgMHhiMSwgMHhkNiwgMHg2ZSwgMHg0NCwgMHg5NywgMHgxZCwgMHgzNCwKLTB4YWIsIDB4MjMsIDB4NzIsIDB4MTgsIDB4ZDEsIDB4OTIsIDB4NDQsIDB4MjAsCi0weGI5LCAweGY3LCAweGVkLCAweGVlLCAweGY3LCAweGVkLCAweDlmLCAweDMzLAotMHhjOSwgMHg4ZSwgMHg3ZiwgMHhmOCwgMHhlNCwgMHg5ZCwgMHhkNywgMHhmNiwKLTB4N2QsIDB4OWUsIDB4NzksIDB4ZmIsIDB4NzksIDB4M2UsIDB4ZmQsIDB4N2QsCi0weGRlLCAweDg2LCAweGQyLCAweGU4LCAweGI4LCAweGY5LCAweDBmLCAweDQwLAotMHhlOCwgMHgzMSwgMHg5MCwgMHgxZiwgMHg3YiwgMHg2NiwgMHhjMywgMHhiMiwKLTB4ZTQsIDB4N2QsIDB4OGYsIDB4ZGUsIDB4ZmIsIDB4NjgsIDB4MzIsIDB4OTksCi0weDc4LCAweGVhLCAweGM3LCAweGViLCAweGUxLCAweDcxLCAweDg4LCAweGQ0LAotMHgzZCwgMHg3MywgMHg1ZiwgMHhmMiwgMHg4OSwgMHg3ZiwgMHhmYywgMHhlOSwKLTB4YmQsIDB4Y2IsIDB4OTYsIDB4YzEsIDB4OGYsIDB4ZjEsIDB4NWYsIDB4YzksCi0weDY0LCAweGZkLCAweGQyLCAweGU0LCAweDdkLCAweDRiLCAweGVmLCAweGFkLAotMHg4NywgMHhmNSwgMHg1MCwgMHg3YSwgMHg2ZiwgMHg3MiwgMHhmOSwgMHhiMiwKLTB4NjUsIDB4Y2IsIDB4OTcsIDB4MzUsIDB4YzAsIDB4MTMsIDB4MTAsIDB4YWEsCi0weDNmLCAweDNjLCAweDhkLCAweDNmLCAweDJmLCAweGJmLCAweGYwLCAweGI3LAotMHg3ZiwgMHg5ZiwgMHgwNCwgMHgxNCwgMHgwMiwgMHg4MCwgMHg5MiwgMHg2NCwKLTB4MjgsIDB4NGQsIDB4ZmUsIDB4MWQsIDB4NDksIDB4ODYsIDB4OTQsIDB4MTAsCi0weGEwLCAweGE2LCAweDI1LCAweDQ5LCAweGQwLCAweGM5LCAweGRmLCAweDYwLAotMHg3ZCwgMHg1ZiwgMHg5YSwgMHgwNCwgMHhjNSwgMHhmOSwgMHg3NywgMHgyOCwKLTB4MDksIDB4MmEsIDB4YWMsIDB4MDMsIDB4NzUsIDB4MDcsIDB4NTQsIDB4MjQsCi0weDYxLCAweGU2LCAweDhmLCAweDJhLCAweDIwLCAweDZhLCAweGZlLCAweDg1LAotMHhmMywgMHhhNywgMHg4NywgMHg1MCwgMHhkZSwgMHg1OSwgMHhmNiwgMHhhNywKLTB4ZTksIDB4OWEsIDB4NDYsIDB4NGQsIDB4NmUsIDB4MTYsIDB4ZDcsIDB4MGYsCi0weGE5LCAweGMwLCAweGFlLCAweDdmLCAweDYxLCAweDU2LCAweGQ3LCAweGZmLAotMHg5YSwgMHg1ZSwgMHhmZiwgMHgyZiwgMHg5ZCwgMHgwZiwgMHgxNSwgMHhiMywKLTB4OTgsIDB4MGUsIDB4MjAsIDB4YjAsIDB4ZjUsIDB4NTgsIDB4ZjMsIDB4MTEsCi0weGM0LCAweDIwLCAweDBjLCAweDFjLCAweDAyLCAweDBkLCAweDE0LCAweDZjLAotMHg3OCwgMHhhZiwgMHgzZiwgMHg0MCwgMHhhZCwgMHg5MywgMHg0NSwgMHg1MywKLTB4NzAsIDB4MDMsIDB4MzUsIDB4NjUsIDB4YTMsIDB4YTMsIDB4ZmMsIDB4M2MsCi0weDM4LCAweDg3LCAweDlhLCAweDQwLCAweDlhLCAweGUwLCAweDUzLCAweDMwLAotMHg0ZCwgMHg0NiwgMHg4ZSwgMHhmMSwgMHg1NywgMHg0ZCwgMHg2MywgMHg4MiwKLTB4MWYsIDB4ODcsIDB4NTYsIDB4NmIsIDB4N2UsIDB4ZmYsIDB4ZmMsIDB4NWYsCi0weGMxLCAweDcxLCAweDk0LCAweGM4LCAweDQ2LCAweGJhLCAweDlhLCAweDEzLAotMHhkYywgMHg3NiwgMHg5NCwgMHg4MCwgMHhiMiwgMHg0YywgMHgzOCwgMHg2MSwKLTB4OGUsIDB4MWMsIDB4ZTMsIDB4YWUsIDB4NTIsIDB4MjMsIDB4MmIsIDB4ZDAsCi0weDI4LCAweDBlLCAweDBhLCAweDNiLCAweGUwLCAweDI4LCAweGM0LCAweGY1LAotMHg4OCwgMHgxYywgMHhhZSwgMHg4NSwgMHg3NiwgMHg4OCwgMHg4MywgMHg5OCwKLTB4ZTQsIDB4MjQsIDB4NzMsIDB4MjQsIDB4YzksIDB4MGQsIDB4NTMsIDB4YTMsCi0weDFmLCAweDJmLCAweGQyLCAweGZjLCAweGU4LCAweGQwLCAweDBiLCAweGM3LAotMHgyMSwgMHhhMSwgMHg0NywgMHhiYSwgMHhmYiwgMHgxMywgMHhiMCwgMHgxZCwKLTB4MTIsIDB4NzAsIDB4N2IsIDB4OTIsIDB4OGIsIDB4OWIsIDB4MjMsIDB4MTksCi0weGVlLCAweDBhLCAweDM1LCAweGM2LCAweDA1LCAweGJhLCAweDllLCAweGVmLAotMHg1NSwgMHg1ZSwgMHg4MSwgMHgxYiwgMHg5MCwgMHhkMiwgMHhhMywgMHhmYiwKLTB4ZjgsIDB4YTUsIDB4Y2EsIDB4MTksIDB4NTgsIDB4MTksIDB4OTMsIDB4MzIsCi0weDM1LCAweDcxLCAweDczLCAweDI0LCAweGMzLCAweDVmLCAweGExLCAweGM2LAotMHhjOCwgMHg2YSwgMHgzYSwgMHg1ZiwgMHgwYiwgMHg5ZCwgMHg4MCwgMHg2OSwKLTB4NjgsIDB4ZDIsIDB4YTMsIDB4MjMsIDB4ZmMsIDB4NGQsIDB4NjIsIDB4MjQsCi0weGEzLCAweGUzLCAweGE2LCAweGExLCAweDNiLCAweDhkLCAweDFjLCAweGE0LAotMHhlOSwgMHg3YSwgMHhlNCwgMHg1ZSwgMHg3YSwgMHhmZCwgMHg4ZCwgMHhmMCwKLTB4MTksIDB4YTQsIDB4YTAsIDB4ZGMsIDB4NzEsIDB4NTksIDB4NjYsIDB4OGMsCi0weDBiLCAweDc0LCAweGZkLCAweGEzLCAweDQ1LCAweDcxLCAweGQ5LCAweDVjLAotMHhmZiwgMHgzZCwgMHgxMiwgMHhiYywgMHg4ZiwgMHhkNywgMHhkZiwgMHhmOSwKLTB4MWIsIDB4N2IsIDB4ZDksIDB4Y2MsIDB4YjgsIDB4ODYsIDB4NzcsIDB4YmYsCi0weDc1LCAweDdkLCAweDYxLCAweGFkLCAweDE5LCAweDA0LCAweGM0LCAweDdkLAotMHhiNywgMHhlMywgMHgxMCwgMHgxNywgMHhkNywgMHhlZSwgMHg3NCwgMHg4NCwKLTB4ODUsIDB4MTksIDB4MTMsIDB4ZjgsIDB4NWUsIDB4MzEsIDB4M2YsIDB4ZTMsCi0weGYwLCAweDIzLCAweGU4LCAweDQzLCAweDRiLCAweGIyLCAweDkxLCAweDFmLAotMHg4NCwgMHg1MywgMHhmMiwgMHg1ZSwgMHhiNCwgMHhmNCwgMHhjMywgMHhkMiwKLTB4NGQsIDB4ZGMsIDB4NDUsIDB4NzMsIDB4MDQsIDB4MWIsIDB4YzgsIDB4MzIsCi0weDQ2LCAweGQ5LCAweGY1LCAweDViLCAweGM0LCAweGI1LCAweGYwLCAweDI1LAotMHg1YSwgMHhhOSwgMHg0NywgMHg3NywgMHhmMSwgMHg2YiwgMHg5NSwgMHg4ZiwKLTB4NjAsIDB4MjUsIDB4OGEsIDB4MjYsIDB4ZjksIDB4NjEsIDB4ZjgsIDB4MTIsCi0weGYwLCAweDQ4LCAweDAzLCAweDdmLCAweDE2LCAweDYxLCAweDIzLCAweDhiLAotMHg0NywgMHhjZSwgMHg3MywgMHg3NCwgMHgzZiwgMHhhOCwgMHgwYiwgMHg3YiwKLTB4Y2QsIDB4MjAsIDB4N2MsIDB4NjEsIDB4NDQsIDB4YTMsIDB4NTEsIDB4MmYsCi0weDY3LCAweDYxLCAweGY5LCAweDgyLCAweGJmLCAweGEyLCAweDVhLCAweGYxLAotMHgxOSwgMHgyOSwgMHhhNiwgMHhmMSwgMHgxMSwgMHg4YiwgMHg3YSwgMHhhNSwKLTB4MWIsIDB4MDIsIDB4MGUsIDB4MDIsIDB4OGEsIDB4YzQsIDB4ZTEsIDB4MGMsCi0weDhlLCAweDhmLCAweGU0LCAweDg5LCAweGNmLCAweGNhLCAweDJjLCAweDFlLAotMHgxOSwgMHg2MiwgMHhiZiwgMHhlZiwgMHhlMCwgMHhlZCwgMHhmYiwgMHhhMCwKLTB4MGYsIDB4OTYsIDB4ZTgsIDB4OTEsIDB4NzUsIDB4ZGMsIDB4MDIsIDB4ZDgsCi0weDhhLCAweDBkLCAweGIxLCAweDk1LCAweGZiLCAweGMwLCAweDFjLCAweGExLAotMHgwNiwgMHgxZSwgMHhiOSwgMHhjNiwgMHhlMiwgMHhhOSwgMHhjMCwgMHg3ZSwKLTB4YTEsIDB4MGYsIDB4M2QsIDB4OTksIDB4OGQsIDB4ZmMsIDB4MWQsIDB4YjcsCi0weGJjLCAweDdhLCAweDJiLCAweDhhLCAweDZiLCAweDJlLCAweDdmLCAweDBkLAotMHg0MywgMHhkYywgMHhjNCwgMHhlOSwgMHhlYywgMHhmYSwgMHgxYiwgMHhlOCwKLTB4N2UsIDB4Y2IsIDB4ZTAsIDB4NmQsIDB4ZDYsIDB4MGUsIDB4OTIsIDB4N2UsCi0weGI3LCAweDJmLCAweDllLCAweDc4LCAweDA3LCAweDllLCAweDY3LCAweGQ3LAotMHhjZiwgMHg1NiwgMHhlNiwgMHhlMCwgMHgxYiwgMHg0OCwgMHhhMSwgMHg2OCwKLTB4OTYsIDB4NWYsIDB4MjEsIDB4MGMsIDB4NzEsIDB4NGQsIDB4MDcsIDB4Y2IsCi0weDM0LCAweGRlLCAweDFhLCAweDMxLCAweDBjLCAweDIxLCAweDg1LCAweGZmLAotMHg5ZiwgMHhmYywgMHg4NCwgMHg0MCwgMHhmZCwgMHg2ZCwgMHgwOSwgMHg2OSwKLTB4YTEsIDB4MDksIDB4ZWMsIDB4NjYsIDB4MTQsIDB4ZjEsIDB4OTcsIDB4MTQsCi0weDZjLCAweGM4LCAweGU1LCAweDg4LCAweGNmLCAweDgyLCAweDM1LCAweGMyLAotMHg4YywgMHhmMywgMHg0MCwgMHhmNywgMHhiZiwgMHgyOCwgMHgxZiwgMHg4NiwKLTB4NDksIDB4NDgsIDB4YTksIDB4ZDEsIDB4MmUsIDB4ZmUsIDB4MDksIDB4MzgsCi0weDBkLCAweDJiLCAweDU1LCAweGE5LCAweDhiLCAweGFmLCAweGE1LCAweDIzLAotMHg2MywgMHhkNCwgMHhlOCwgMHg2NywgMHhmNywgMHgwYiwgMHgxMiwgMHhkNiwKLTB4YzMsIDB4ZWIsIDB4OTAsIDB4NTAsIDB4MjMsIDB4YmIsIDB4ZGEsIDB4OGEsCi0weGRiLCAweDRhLCAweDIxLCAweGIxLCAweDIxLCAweGI2LCAweDhmLCAweGFiLAotMHgzNSwgMHg0NywgMHhiYSwgMHhiOCwgMHgzMSwgMHg2YSwgMHg2NCwgMHg0MSwKLTB4YjYsIDB4ZTYsIDB4MzcsIDB4MTQsIDB4YjEsIDB4NmYsIDB4ZDcsIDB4YzMsCi0weDM2LCAweDQ4LCAweGI0LCAweDg4LCAweGYzLCAweDljLCAweGYzLCAweDZmLAotMHgzNywgMHg4ZCwgMHg1MywgMHg2YywgMHgzZiwgMHhjNCwgMHhlNiwgMHgwYSwKLTB4ZjAsIDB4MmEsIDB4YzQsIDB4ZDUsIDB4ODgsIDB4Y2MsIDB4MDksIDB4ZTIsCi0weDY2LCAweDg4LCAweDNmLCAweDM0LCAweDFmLCAweDFiLCAweDc0LCAweDY0LAotMHg4MCwgMHgxYSwgMHhmZCwgMHgyMSwgMHhiYSwgMHgxZiwgMHgzNiwgMHg5NSwKLTB4YTUsIDB4YTksIDB4NTMsIDB4NjksIDB4MTgsIDB4ODQsIDB4OTQsIDB4MjgsCi0weGExLCAweDg4LCAweGUyLCAweGYzLCAweGY3LCAweDIyLCAweDRmLCAweGY3LAotMHg2NywgMHg3NywgMHhhNSwgMHhlOSwgMHhkNCwgMHhjMywgMHg0ZiwgMHhiNywKLTB4N2YsIDB4ODAsIDB4OGQsIDB4YTYsIDB4ODcsIDB4YTIsIDB4YmIsIDB4ZGIsCi0weGM3LCAweDdjLCAweGZlLCAweDdlLCAweDVjLCAweDRjLCAweGVmLCAweGM3LAotMHhmOSwgMHg0NSwgMHhkNiwgMHhlMCwgMHgzYSwgMHg3ZSwgMHgwZiwgMHg4ZSwKLTB4NGYsIDB4NTMsIDB4NGIsIDB4ZjksIDB4M2EsIDB4ZGUsIDB4MzUsIDB4YmYsCi0weDg5LCAweDE4LCAweGE3LCAweDU4LCAweGZlLCAweDY5LCAweDk4LCAweDlmLAotMHg4NSwgMHg2MywgMHhmOCwgMHhiNiwgMHg4YSwgMHhiNCwgMHhiNSwgMHgyOSwKLTB4MzAsIDB4MmEsIDB4MjQsIDB4ZTYsIDB4ODUsIDB4ZGIsIDB4MzgsIDB4NmIsCi0weDA0LCAweGQ5LCAweGM2LCAweDU5LCAweDE2LCAweGNmLCAweDE2LCAweGU4LAotMHgzMCwgMHg5ZCwgMHhkYSwgMHgxZCwgMHhlZSwgMHg4MCwgMHhjZCwgMHg1YywKLTB4NjIsIDB4MzAsIDB4MmMsIDB4YjcsIDB4NjEsIDB4MzcsIDB4MDUsIDB4ZTIsCi0weDY2LCAweDA1LCAweGYzLCAweGY3LCAweDdjLCAweDg4LCAweDVlLCAweGJmLAotMHg1YiwgMHgzOCwgMHg2YywgMHg0NiwgMHg2ZiwgMHgzNywgMHgwZSwgMHhlMywKLTB4MGIsIDB4ZDgsIDB4MDgsIDB4M2IsIDB4YzIsIDB4Y2UsIDB4OGMsIDB4OGYsCi0weGQ5LCAweDdlLCAweGQwLCAweDBjLCAweDdmLCAweDEzLCAweDZhLCAweDc0LAotMHgwMSwgMHhkZiwgMHg4MSwgMHhkNywgMHg5ZiwgMHg0YSwgMHg5NywgMHg3NywKLTB4ZjEsIDB4N2UsIDB4N2YsIDB4NzMsIDB4MmMsIDB4NWYsIDB4MGQsIDB4ODYsCi0weGFjLCAweGZkLCAweGQwLCAweGNkLCAweDhmLCAweDU1LCAweDYzLCAweDYzLAotMHhjMywgMHhkMiwgMHhhMCwgMHhmOSwgMHhkZiwgMHhiMCwgMHhmYywgMHgyMywKLTB4Y2EsIDB4MWEsIDB4MDksIDB4M2IsIDB4NDQsIDB4YjcsIDB4ZjAsIDB4OWEsCi0weDM4LCAweDI4LCAweDE4LCAweGQxLCAweGQ2LCAweDdjLCAweGYxLCAweDFmLAotMHg2MiwgMHhmYiwgMHgzOSwgMHg1NiwgMHgxNCwgMHg4MywgMHgzNywgMHgyMCwKLTB4ODEsIDB4MjIsIDB4NjMsIDB4ZGMsIDB4ZWIsIDB4ZjAsIDB4MzIsIDB4MmMsCi0weGU5LCAweGUyLCAweDNmLCAweGU0LCAweDYyLCAweDIyLCAweDE5LCAweGQ5LAotMHhhZSwgMHg3MSwgMHgzOSwgMHhmMywgMHgyYiwgMHg4ZCwgMHgxYiwgMHhiMiwKLTB4ZjcsIDB4ODMsIDB4YjAsIDB4NTYsIDB4YTgsIDB4MTEsIDB4ZjAsIDB4ZGQsCi0weDUxLCAweGNiLCAweDg5LCAweGQwLCAweDJlLCAweGM0LCAweGNmLCAweGUzLAotMHhkYiwgMHg2NCwgMHg4NywgMHhlYiwgMHg3ZSwgMHgzOSwgMHg4OSwgMHg4ZCwKLTB4MjEsIDB4YjYsIDB4ZGYsIDB4OTAsIDB4ZmMsIDB4ODgsIDB4NzksIDB4YjcsCi0weDY2LCAweGU3LCAweDY1LCAweDYyLCAweDJmLCAweGMyLCAweDEyLCAweDE1LAotMHhkZiwgMHg4NiwgMHgwYiwgMHhkOCwgMHhmZCwgMHgyYiwgMHgzZiwgMHhjMCwKLTB4MTksIDB4NDYsIDB4OGUsIDB4Y2QsIDB4ZWYsIDB4ZWMsIDB4ZmMsIDB4MTEsCi0weDdjLCAweDgyLCAweDFhLCAweGIzLCAweGQxLCAweDBkLCAweGRmLCAweGFlLAotMHg4MCwgMHhiNywgMHhkYiwgMHgxYSwgMHhiNSwgMHhlOCwgMHgwNiwgMHg3ZSwKLTB4M2YsIDB4NWMsIDB4NDcsIDB4MGIsIDB4YjMsIDB4ZDEsIDB4NGQsIDB4ZmMsCi0weDQ1LCAweGY4LCAweGE3LCAweDhlLCAweDQ2LCAweDYyLCAweDVjLCAweGFlLAotMHhhNiwgMHhmMywgMHhjNSwgMHg0YSwgMHg5YywgMHg2ZiwgMHg0MywgMHgzOCwKLTB4N2IsIDB4NjgsIDB4ZDgsIDB4YmIsIDB4MWIsIDB4ZjAsIDB4MmYsIDB4MTAsCi0weGZkLCAweGI1LCAweDM3LCAweGRmLCAweDJlLCAweGNlLCAweGYwLCAweGZkLAotMHg2ZCwgMHgzNCwgMHgzZSwgMHgyMCwgMHhiYywgMHhhOSwgMHg0ZSwgMHhhMywKLTB4ZDQsIDB4NTgsIDB4MzQsIDB4MTcsIDB4OTksIDB4MDcsIDB4NjcsIDB4M2EsCi0weDlhLCAweGM2LCAweGUyLCAweDM3LCAweGFkLCAweGZhLCAweGI1LCAweDczLAotMHg4MiwgMHg5ZiwgMHg4MiwgMHhlOSwgMHhiNiwgMHhhNiwgMHg0YiwgMHhiOCwKLTB4N2UsIDB4ZTksIDB4MWEsIDB4OGQsIDB4ZmYsIDB4Y2IsIDB4ZjMsIDB4ZjcsCi0weGMxLCAweDc1LCAweDU4LCAweDkyLCAweDhiLCAweGE0LCAweDM5LCAweGI5LAotMHg2NSwgMHg2YiwgMHhlNiwgMHhkYiwgMHhhYiwgMHhjNSwgMHg3MSwgMHg3YiwKLTB4ZmQsIDB4MTcsIDB4ZDUsIDB4YmUsIDB4OGEsIDB4MzgsIDB4MzEsIDB4MmUsCi0weGIzLCAweGRmLCAweDE3LCAweDYwLCAweDVmLCAweDA4LCAweDdmLCAweDNiLAotMHg3OCwgMHg2NywgMHgyYiwgMHhkNywgMHg0YSwgMHhmMiwgMHhkNSwgMHg0MCwKLTB4NzcsIDB4ZGEsIDB4ZTEsIDB4YWYsIDB4NjgsIDB4MTksIDB4NzYsIDB4ZmUsCi0weDUxLCAweDg0LCAweDFkLCAweGE1LCAweDM1LCAweDQ2LCAweGY0LCAweGRhLAotMHgxZSwgMHg0NCwgMHgzYywgMHhkNCwgMHg3ZSwgMHgzZiwgMHg0NiwgMHgxMiwKLTB4ZDEsIDB4ZDEsIDB4ZDAsIDB4NDYsIDB4MjMsIDB4OWUsIDB4NDUsIDB4NTYsCi0weDYwLCAweDA3LCAweGQ5LCAweGZlLCAweGVjLCAweGE5LCAweDI0LCAweDQ1LAotMHgwMSwgMHg3YiwgMHgyNywgMHhmMiwgMHgwZiwgMHg5MiwgMHhmYywgMHg5OSwKLTB4NWUsIDB4OTAsIDB4ZjksIDB4MmIsIDB4N2YsIDB4ZmQsIDB4YjIsIDB4ZDcsCi0weDgzLCAweDQyLCAweGJkLCAweDgyLCAweDMxLCAweDc4LCAweDYwLCAweGNlLAotMHgyMSwgMHg2YywgMHgyYywgMHg0YSwgMHg0NywgMHg4MywgMHhlYSwgMHg1MSwKLTB4OTYsIDB4ZGQsIDB4MmYsIDB4NTUsIDB4YjIsIDB4NTUsIDB4ZWYsIDB4YjIsCi0weDdjLCAweDEyLCAweGNlLCAweGUxLCAweDdjLCAweDJlLCAweDY1LCAweGY5LAotMHg5NSwgMHhhYywgMHhkZSwgMHg4NSwgMHgyYywgMHg0MywgMHg1ZiwgMHg0ZCwKLTB4ZDcsIDB4N2YsIDB4NDAsIDB4ZDgsIDB4NjgsIDB4MTYsIDB4MjksIDB4OGQsCi0weGFiLCAweDQxLCAweGFmLCAweDQwLCAweGUyLCAweGYxLCAweDU4LCAweDI2LAotMHhlYywgMHhhZiwgMHhiZiwgMHhkOSwgMHgwNywgMHhkOSwgMHg3ZSwgMHgyOCwKLTB4OGEsIDB4YzMsIDB4MmIsIDB4NjQsIDB4YjAsIDB4OTMsIDB4YWIsIDB4MjYsCi0weGY1LCAweDNhLCAweDFiLCAweGViLCAweDM2LCAweGVhLCAweGY1LCAweDNkLAotMHhlZSwgMHhmOSwgMHg2YywgMHhiZiwgMHg4OSwgMHg3MywgMHgyNSwgMHg3OCwKLTB4NWUsIDB4OGUsIDB4MGYsIDB4NDYsIDB4YjQsIDB4NjIsIDB4ODAsIDB4NDMsCi0weDYyLCAweDVjLCAweDE1LCAweDY1LCAweDliLCAweDA3LCAweGRlLCAweGQxLAotMHgyOCwgMHgwZiwgMHhiMCwgMHhmYywgMHgwMywgMHg2NSwgMHgxYiwgMHg0MywKLTB4YjgsIDB4ZWMsIDB4MGUsIDB4NjIsIDB4YTcsIDB4MTQsIDB4MzgsIDB4YTMsCi0weGE0LCAweGM4LCAweGZhLCAweDQ5LCAweDdjLCAweDk2LCAweGViLCAweGU3LAotMHg3ZSwgMHhjMywgMHhmZiwgMHgxZiwgMHhjMiwgMHhhMSwgMHg3YiwgMHgxNywKLTB4N2YsIDB4YTUsIDB4YjMsIDB4ZmMsIDB4NzMsIDB4YjAsIDB4ZjIsIDB4YTYsCi0weDNjLCAweGFkLCAweDM0LCAweDBkLCAweDQ0LCAweDVhLCAweDMxLCAweGI0LAotMHg0YywgMHg5MywgMHhlYywgMHhjMSwgMHhlYSwgMHhkNywgMHgzNSwgMHgxYywKLTB4MWYsIDB4NWEsIDB4ZGYsIDB4NTksIDB4ZmUsIDB4ZDEsIDB4Y2IsIDB4MTgsCi0weGU0LCAweDVjLCAweDgwLCAweDNmLCAweDc1LCAweDE5LCAweDA2LCAweGRlLAotMHgzNiwgMHgyOCwgMHg3NSwgMHhlOSwgMHgzOSwgMHhjYiwgMHg3MCwgMHhmMywKLTB4MGYsIDB4MDIsIDB4MDYsIDB4MzksIDB4MzksIDB4OTEsIDB4ZjgsIDB4ZWIsCi0weGM0LCAweDllLCAweDAwLCAweGZlLCAweDExLCAweDhiLCAweDU4LCAweGY1LAotMHhjOSwgMHhjMSwgMHhmMywgMHg4YSwgMHhiYiwgMHhhYywgMHhiMywgMHhmYiwKLTB4YWIsIDB4OWYsIDB4ZTUsIDB4MWYsIDB4ZmQsIDB4YjYsIDB4NWUsIDB4MWEsCi0weGI0LCAweGNiLCAweDI0LCAweDllLCAweGFlLCAweDMwLCAweDNhLCAweGY4LAotMHg4NywgMHhlZCwgMHhjZiwgMHhiOSwgMHhiZCwgMHhmNCwgMHg0NywgMHgxZiwKLTB4YzIsIDB4YmMsIDB4ZTEsIDB4ZDgsIDB4MDYsIDB4NGUsIDB4NTAsIDB4ZDEsCi0weDU5LCAweDdlLCAweGI4LCAweDA0LCAweDI3LCAweDY4LCAweDEwLCAweDI2LAotMHhiOCwgMHg2OSwgMHg1OCwgMHhhYSwgMHgwNywgMHhmMiwgMHhjZiwgMHg4NCwKLTB4NGEsIDB4ZTcsIDB4MzMsIDB4ZmUsIDB4YzksIDB4ZTAsIDB4NmEsIDB4ZjgsCi0weGJlLCAweDY3LCAweDliLCAweDA1LCAweGYwLCAweGNmLCAweGEwLCAweGMwLAotMHg3NiwgMHg0YiwgMHg0ZSwgMHg3YywgMHhkZiwgMHhiZiwgMHg3ZSwgMHhjZSwKLTB4ZTIsIDB4MWYsIDB4ZmEsIDB4ZjksIDB4YjAsIDB4NjgsIDB4MmQsIDB4OGQsCi0weDg2LCAweDBlLCAweGNmLCAweDQzLCAweDQwLCAweDdjLCAweGRjLCAweGZjLAotMHhmMywgMHg1OCwgMHg2OCwgMHgxMSwgMHhhZCwgMHhmZSwgMHhkZiwgMHhjMCwKLTB4NWUsIDB4YzMsIDB4MjgsIDB4MzYsIDB4MzAsIDB4MjAsIDB4MTcsIDB4NzEsCi0weDgwLCAweDgxLCAweDgzLCAweDdmLCAweGEwLCAweDFjLCAweGJlLCAweGNjLAotMHgxOCwgMHg5MCwgMHg3MywgMHgxMiwgMHg3ZSwgMHg0NywgMHg0MCwgMHhjOCwKLTB4ZTIsIDB4OWYsIDB4MWMsIDB4MzUsIDB4M2MsIDB4ZmMsIDB4NTMsIDB4NjksCi0weGM3LCAweDA3LCAweGE2LCAweDY1LCAweDE2LCAweDk2LCAweGQ0LCAweDAwLAotMHgyMSwgMHgyMiwgMHhjYywgMHgzZiwgMHgyOSwgMHgwMiwgMHg0MiwgMHgzNiwKLTB4ZmYsIDB4ZjQsIDB4NTQsIDB4OWUsIDB4YzUsIDB4YjcsIDB4YWQsIDB4MDEsCi0weDM5LCAweGQ5LCAweGZjLCAweGYxLCAweGI5LCAweDZjLCAweGU3LCAweGZmLAotMHhkYiwgMHhmNiwgMHhjMSwgMHhkYiwgMHgyNiwgMHhlNCwgMHg4YywgMHgxYSwKLTB4ZmMsIDB4MTMsIDB4ZjEsIDB4ZjEsIDB4NGYsIDB4ODQsIDB4ZjAsIDB4MGYsCi0weGJkLCAweGJlLCAweDBlLCAweGZiLCAweDYxLCAweGFiLCAweDA5LCAweDM5LAotMHhkNywgMHgyYywgMHg3ZiwgMHhiZCwgMHhmYywgMHg4MywgMHg4ZCwgMHg3MSwKLTB4OTYsIDB4N2YsIDB4NWEsIDB4MzAsIDB4NGYsIDB4YjYsIDB4OWIsIDB4OTAsCi0weDMzLCAweDhjLCAweGI2LCAweGRiLCAweDYxLCAweDk0LCAweDVjLCAweGYxLAotMHhiNCwgMHhmOSwgMHgyNCwgMHg1NywgMHhkNCwgMHg1MywgMHgzMSwgMHgwNCwKLTB4MDYsIDB4ZTQsIDB4YmMsIDB4MDcsIDB4MTcsIDB4MzgsIDB4OGEsIDB4M2QsCi0weGUwLCAweDM2LCAweGVjLCAweDdhLCAweGQ0LCAweGEyLCAweDY2LCAweDIxLAotMHhlNywgMHhhOSwgMHgzZSwgMHhkNCwgMHgyOCwgMHgwOSwgMHhlMiwgMHgxZiwKLTB4MzAsIDB4OGIsIDB4NWEsIDB4ODQsIDB4NTQsIDB4YjcsIDB4ZDMsIDB4NzAsCi0weGJmLCAweGIzLCAweGNjLCAweGQ1LCAweDViLCAweGE4LCAweGQwLCAweDM1LAotMHhhNywgMHgxZiwgMHg3YywgMHhmYywgMHg0MywgMHhhYSwgMHhlZCwgMHg0YiwKLTB4NTAsIDB4ZWQsIDB4MmMsIDB4YmIsIDB4MTUsIDB4MzYsIDB4ZmYsIDB4YzgsCi0weDM0LCAweGZmLCAweGNjLCAweDlmLCAweDZiLCAweGQzLCAweDBlLCAweGI3LAotMHgwZCwgMHhlZSwgMHg3MiwgMHg5NSwgMHg2OSwgMHg2NiwgMHg5YywgMHgxMiwKLTB4ZTgsIDB4ZWYsIDB4MmIsIDB4MGEsIDB4OGMsIDB4NzYsIDB4YzYsIDB4NjAsCi0weDMzLCAweGZlLCAweGJkLCAweDlkLCAweGQ4LCAweDYzLCAweGYzLCAweDBmLAotMHhkYiwgMHg5ZiwgMHhjNywgMHg0NCwgMHhjYSwgMHgzZiwgMHhmNSwgMHg1OSwKLTB4NWMsIDB4ODgsIDB4ZWYsIDB4NzcsIDB4M2IsIDB4MmUsIDB4NWEsIDB4YzYsCi0weDU5LCAweDhlLCAweGFlLCAweGE3LCAweGJiLCAweDhjLCAweGYxLCAweGRlLAotMHhiYiwgMHhkYSwgMHg2NCwgMHhjYywgMHg1ZCwgMHhkNiwgMHgwMywgMHhmOCwKLTB4YTcsIDB4YmIsIDB4ZTgsIDB4MmIsIDB4MGEsIDB4MzksIDB4N2YsIDB4ZTYsCi0weDRlLCAweGMzLCAweDExLCAweGY3LCAweDdjLCAweDcxLCAweDkyLCAweDRiLAotMHg3OSwgMHhmOCwgMHgwNywgMHgxYywgMHhiNCwgMHhkMywgMHgwOSwgMHgwNywKLTB4NjEsIDB4MGQsIDB4MmEsIDB4YzgsIDB4M2YsIDB4NjIsIDB4ZTUsIDB4ODAsCi0weGYwLCAweDJhLCAweDQ3LCAweGZkLCAweDhkLCAweDI5LCAweDVlLCAweDdmLAotMHg0MywgMHgxNiwgMHhlZiwgMHgzMSwgMHgxZSwgMHhhYiwgMHgzYywgMHhjYywKLTB4YTIsIDB4YTcsIDB4NmMsIDB4NzMsIDB4YzYsIDB4YmYsIDB4ZDQsIDB4MTUsCi0weDRmLCAweGJhLCAweDFmLCAweDBlLCAweDU2LCAweDkyLCAweDQxLCAweGIyLAotMHhjOCwgMHg5MiwgMHhkZiwgMHhjMiwgMHg0OSwgMHhhOCwgMHgwYiwgMHhmNiwKLTB4MzcsIDB4ZDcsIDB4NDEsIDB4YWYsIDB4ZGYsIDB4MDMsIDB4MzQsIDB4M2UsCi0weDM1LCAweGZlLCAweDY5LCAweGNjLCAweGI4LCAweDhjLCAweGU4LCAweGZkLAotMHgxYiwgMHg5MywgMHg0ZCwgMHhkYSwgMHg5MSwgMHgzMCwgMHg2ZiwgMHhjMywKLTB4NDQsIDB4MjgsIDB4MDUsIDB4M2IsIDB4ODMsIDB4NzgsIDB4N2IsIDB4YTgsCi0weDgzLCAweGVlLCAweDdmLCAweDQ1LCAweDMwLCAweGY5LCAweDI3LCAweDQ2LAotMHg2OCwgMHhlNywgMHg0ZCwgMHg5MywgMHg3NiwgMHgzMCwgMHhmNiwgMHg3MCwKLTB4YTYsIDB4MzEsIDB4ZGYsIDB4ZTIsIDB4OWYsIDB4NDEsIDB4OWIsIDB4N2YsCi0weGFjLCAweGZjLCAweDIzLCAweDA2LCAweGE1LCAweDFkLCAweDY2LCAweDBjLAotMHhiMSwgMHhmYywgMHg1MywgMHgxNSwgMHgzMiwgMHhhYSwgMHg3ZiwgMHg1NiwKLTB4NmMsIDB4YWQsIDB4YzAsIDB4NzcsIDB4NmIsIDB4MzIsIDB4Y2YsIDB4ZmQsCi0weDNiLCAweGE4LCAweGIyLCAweGViLCAweGMzLCAweDIyLCAweDRjLCAweDNiLAotMHg4ZCwgMHg1OSwgMHg4OSwgMHhkMCwgMHhjZSwgMHg3NSwgMHhhZCwgMHhkMSwKLTB4YzQsIDB4MWUsIDB4MzIsIDB4ZTIsIDB4MzQsIDB4ODYsIDB4NTgsIDB4ZmUsCi0weDMxLCAweGY4LCAweDg3LCAweDNjLCAweDlkLCAweGUxLCAweGVjLCAweGExLAotMHg5OCwgMHhkOSwgMHgyMywgMHhlNCwgMHhjZiwgMHgyNywgMHhmZCwgMHgyYywKLTB4ZmYsIDB4YTgsIDB4OTUsIDB4NTMsIDB4YWEsIDB4NTUsIDB4YmYsIDB4YTYsCi0weGQyLCAweGU3LCAweGQwLCAweDBhLCAweDVhLCAweGJmLCAweGYwLCAweGM4LAotMHhlYiwgMHhmOCwgMHhmOSwgMHhmZCwgMHg4NiwgMHhmOSwgMHhkNSwgMHgwOCwKLTB4ZGIsIDB4M2YsIDB4M2QsIDB4MzgsIDB4ZmYsIDB4MTgsIDB4NGUsIDB4YjUsCi0weDcyLCAweDM3LCAweGUxLCAweDc3LCAweDk4LCAweDY3LCAweGVjLCAweDY1LAotMHhiMywgMHg3YywgMHhlMiwgMHhlNCwgMHg5ZiwgMHgxNywgMHg2MCwgMHgxZiwKLTB4ODUsIDB4OWMsIDB4MGYsIDB4NDIsIDB4ZWUsIDB4N2MsIDB4ZjUsIDB4YjQsCi0weGMxLCAweDNmLCAweDRmLCAweDllLCAweGM0LCAweDIzLCAweDU5LCAweDk2LAotMHg3ZiwgMHhkMiwgMHgwMiwgMHgwYiwgMHhkYSwgMHgzOSwgMHgzNSwgMHg2ZiwKLTB4M2UsIDB4MWYsIDB4NjUsIDB4ZmIsIDB4YjMsIDB4YTEsIDB4YTgsIDB4NTcsCi0weGI0LCAweDljLCAweGJhLCAweGE1LCAweDllLCAweDgzLCAweDY3LCAweDgzLAotMHhmMywgMHhlNywgMHg5MCwgMHg2MCwgMHhkNywgMHg1ZiwgMHgzYSwgMHhiOCwKLTB4Y2EsIDB4OGYsIDB4ODUsIDB4MGUsIDB4ZmUsIDB4YTEsIDB4ZWIsIDB4ZDksCi0weDBjLCAweDhlLCAweGVhLCAweGY2LCAweDI3LCAweDc3LCAweDk5LCAweGFiLAotMHg3MSwgMHhmMCwgMHgwZiwgMHg1ZCwgMHhjZiwgMHg0OSwgMHhjYSwgMHgzZiwKLTB4OTksIDB4ZWEsIDB4MmIsIDB4MjYsIDB4ZDgsIDB4MDQsIDB4ZDYsIDB4NWYsCi0weDliLCAweDdmLCAweDJhLCAweGU5LCAweDdjLCAweDhjLCAweGNkLCAweDc5LAotMHhlYiwgMHhiNSwgMHg4MywgMHg3ZiwgMHg4NCwgMHgzMiwgMHgzOCwgMHgyYSwKLTB4NWIsIDB4ZDEsIDB4MzgsIDB4ODQsIDB4MGQsIDB4ZmEsIDB4YmMsIDB4M2YsCi0weDgyLCAweDg5LCAweDcxLCAweDU4LCAweDM5LCAweGFhLCAweGM0LCAweDQ3LAotMHhkNywgMHgzOCwgMHhmOSwgMHg0NywgMHgyZiwgMHg3ZCwgMHg5MiwgMHhjNCwKLTB4NjcsIDB4MDAsIDB4M2IsIDB4NzUsIDB4YzIsIDB4NTUsIDB4NWYsIDB4NDYsCi0weDBjLCAweDAzLCAweGYzLCAweGNmLCAweDA1LCAweDE3LCAweGZmLCAweDY4LAotMHgwYiwgMHhiMSwgMHg3NywgMHg0YSwgMHhkMywgMHhhMCwgMHhlOSwgMHhhNiwKLTB4ZDIsIDB4ZTQsIDB4YWQsIDB4ZWYsIDB4NmEsIDB4Y2EsIDB4YzMsIDB4M2YsCi0weDQ1LCAweDUzLCAweDk0LCAweDdmLCAweGJlLCAweDE2LCAweGM3LCAweGQxLAotMHg3ZCwgMHg5YSwgMHgzNCwgMHg0MiwgMHhmNSwgMHgxZiwgMHgyMiwgMHgwNCwKLTB4OWQsIDB4ZjMsIDB4ZWEsIDB4M2YsIDB4YmEsIDB4NmMsIDB4NDEsIDB4NGUsCi0weDkyLCAweGZiLCAweDE4LCAweDNhLCAweDk1LCAweDdiLCAweDUwLCAweDY3LAotMHhiNiwgMHgyMiwgMHg0ZSwgMHhiMSwgMHhlNywgMHg1NywgMHhiMCwgMHhkZCwKLTB4YTcsIDB4ZmYsIDB4ZDgsIDB4ZmMsIDB4MzMsIDB4ODYsIDB4OTMsIDB4ZTksCi0weDVkLCAweGE4LCAweDM0LCAweDc5LCAweDg3LCAweGU0LCAweDdjLCAweDQyLAotMHhmNywgMHhlYSwgMHgzZiwgMHg5NSwgMHg4YywgMHg3ZiwgMHgzZSwgMHg4MSwKLTB4NGUsIDB4NTQsIDB4YWQsIDB4OTUsIDB4ZjYsIDB4ZDgsIDB4ZmMsIDB4ZDksCi0weDRiLCAweDIzLCAweDZjLCAweGViLCAweDNmLCAweDNhLCAweGQ1LCAweDdmLAotMHgzMiwgMHg3ZiwgMHg3MywgMHgwZSwgMHhjNiwgMHhmNSwgMHhmYiwgMHhiMywKLTB4NjUsIDB4ZGQsIDB4ZWQsIDB4OGMsIDB4OWYsIDB4MGQsIDB4NDUsIDB4MjIsCi0weDhmLCAweGZlLCAweDMzLCAweGRlLCAweDdjLCAweDEzLCAweDZmLCAweDhkLAotMHgyNiwgMHgzZCwgMHhlMSwgMHg4YywgMHgwZiwgMHg5NywgMHg1ZiwgMHhmZiwKLTB4YzksIDB4ZTAsIDB4YzcsIDB4ZjYsIDB4NDEsIDB4NzUsIDB4YjksIDB4MjYsCi0weGE1LCAweDIyLCAweDdlLCAweDNlLCAweDc3LCAweGYwLCAweDRmLCAweGM4LAotMHg1YywgMHg2ZCwgMHhmOSwgMHgwOSwgMHhmYywgMHhmYywgMHhkOCwgMHhhOSwKLTB4MjgsIDB4N2IsIDB4MzYsIDB4MWMsIDB4YjMsIDB4ZjUsIDB4YWIsIDB4NjEsCi0weGJmLCAweGZlLCAweDkzLCAweGE1LCAweGZjLCAweGYzLCAweDAwLCAweDdlLAotMHgwYywgMHg0NywgMHgxMCwgMHg0MywgMHhlMiwgMHgzMiwgMHg4ZSwgMHgyOSwKLTB4MTgsIDB4MDEsIDB4ZmMsIDB4OTMsIDB4YzUsIDB4ZmMsIDB4ZjMsIDB4MDAsCi0weGJlLCAweDQ5LCAweGMzLCAweDliLCAweDllLCAweDdlLCAweDQwLCAweGVkLAotMHgzOCwgMHg1MCwgMHg3MywgMHhiOCwgMHg2NSwgMHg4MiwgMHhkYiwgMHg2ZiwKLTB4ZGMsIDB4YjYsIDB4N2MsIDB4MjAsIDB4ZmYsIDB4M2MsIDB4MjQsIDB4NGEsCi0weGE2LCAweGRhLCAweDkzLCAweGU0LCAweDA1LCAweGQwLCAweGI1LCAweDA2LAotMHg0MSwgMHhhYSwgMHhlMywgMHg3NywgMHhkMCwgMHg5MSwgMHhiMywgMHhkNCwKLTB4NzAsIDB4ZjAsIDB4NGYsIDB4ZDksIDB4MDksIDB4ZWMsIDB4OTQsIDB4MTEsCi0weDg0LCAweDc3LCAweGUxLCAweGE2LCAweGRjLCAweDI0LCAweDQ0LCAweDViLAotMHhmOSwgMHg5ZiwgMHg5OSwgMHhiMiwgMHg0ZiwgMHhjNiwgMHgwZSwgMHg5NCwKLTB4Y2QsIDB4M2YsIDB4MmYsIDB4MTcsIDB4NTksIDB4NDEsIDB4MzgsIDB4MTYsCi0weDExLCAweGEwLCAweDFhLCAweDhlLCAweGU4LCAweGYxLCAweGQ3LCAweDIyLAotMHgwOSwgMHgxYSwgMHhmNiwgMHhiMywgMHhkNCwgMHg3MCwgMHhlOCwgMHgzZiwKLTB4YmIsIDB4OGMsIDB4ZTcsIDB4MjksIDB4OTIsIDB4NDYsIDB4ZTYsIDB4YzIsCi0weGVmLCAweGExLCAweDQ2LCAweDE3LCAweGM3LCAweGRiLCAweDU2LCAweGMyLAotMHgxZiwgMHg2OCwgMHg2MiwgMHhkOSwgMHg0YSwgMHhmOSwgMHg4NywgMHhjZSwKLTB4NDcsIDB4YjAsIDB4OWYsIDB4M2EsIDB4ZjUsIDB4N2QsIDB4NjUsIDB4ZWYsCi0weGI2LCAweGFhLCAweDJhLCAweDBjLCAweDQyLCAweDhiLCAweDBjLCAweDIyLAotMHgzMiwgMHhmMiwgMHg5NSwgMHg2NSwgMHhkOCwgMHhjZiwgMHg1ZiwgMHgyZCwKLTB4NzMsIDB4NjksIDB4ZDAsIDB4OWEsIDB4NTcsIDB4YzMsIDB4ZWUsIDB4NzQsCi0weDM1LCAweDMyLCAweGY0LCAweDQ2LCAweDk2LCAweDg4LCAweGFjLCAweGZkLAotMHhlNiwgMHhkNCwgMHg3ZiwgMHg3YSwgMHgyOCwgMHhlNCwgMHhmYywgMHg0MCwKLTB4ZjgsIDB4N2QsIDB4NzMsIDB4ZmQsIDB4OWUsIDB4MDUsIDB4NjMsIDB4N2MsCi0weDBjLCAweDg2LCAweDJjLCAweGZlLCAweGUxLCAweDJjLCAweGMzLCAweGExLAotMHhmZiwgMHg4MCwgMHg1NSwgMHg3NCwgMHgzYSwgMHhmOCwgMHgwMywgMHg0NCwKLTB4ZmYsIDB4ODEsIDB4NDcsIDB4M2IsIDB4ZGEsIDB4MGIsIDB4ZWIsIDB4M2YsCi0weDYzLCAweGYwLCAweDI5LCAweGFkLCAweDZlLCAweDlmLCAweGQ2LCAweGQ0LAotMHhiNSwgMHgwZSwgMHhlZiwgMHg1YSwgMHg1ZSwgMHgyYiwgMHhjZSwgMHg0MiwKLTB4ZmYsIDB4ZDksIDB4ZDMsIDB4MzYsIDB4MjYsIDB4NmMsIDB4NTMsIDB4YWEsCi0weDViLCAweDM2LCAweGVjLCAweDhiLCAweGFjLCAweDJmLCAweGEwLCAweGZmLAotMHhjYywgMHhhNywgMHhmYSwgMHg0ZiwgMHg3NywgMHhmMSwgMHg5OCwgMHhmOCwKLTB4MGEsIDB4YWUsIDB4ZDcsIDB4MmQsIDB4NzIsIDB4ZjMsIDB4NjEsIDB4M2YsCi0weGZmLCAweDM4LCAweGYyLCAweDBmLCAweGU1LCAweDlmLCAweGU2LCAweGUxLAotMHhkMCwgMHgzNiwgMHg1MCwgMHg1NCwgMHhiMSwgMHhhZSwgMHg2ZCwgMHgwMCwKLTB4NzYsIDB4ZTUsIDB4ZDUsIDB4N2YsIDB4MWEsIDB4Y2EsIDB4ZDIsIDB4OTgsCi0weGY3LCAweDEyLCAweDEwLCAweDA1LCAweDllLCAweDgwLCAweDVmLCAweDFkLAotMHg0OCwgMHg2ZCwgMHgzNSwgMHg3ZSwgMHhmZCwgMHhjMSwgMHhkNiwgMHg3ZiwKLTB4NDYsIDB4MTcsIDB4NWEsIDB4NGUsIDB4ZWQsIDB4NmUsIDB4ZmYsIDB4MGEsCi0weDZlLCAweGM1LCAweGRlLCAweDdhLCAweDI4LCAweDdhLCAweGJlLCAweDdkLAotMHhiZCwgMHgzNiwgMHgwYiwgMHhmZCwgMHg2NywgMHgxNywgMHhkZSwgMHg2ZiwKLTB4ZWYsIDB4NDAsIDB4YmQsIDB4MmUsIDB4OWQsIDB4NmYsIDB4NjcsIDB4ZmEsCi0weGQ4LCAweDU3LCAweGQ0LCAweGIwLCAweGY5LCAweDY3LCAweDkzLCAweDZjLAotMHg0MSwgMHgwZSwgMHhlMCwgMHhiMiwgMHg4ZSwgMHhlZiwgMHgyZiwgMHhmMSwKLTB4OWUsIDB4MmQsIDB4NjEsIDB4MDUsIDB4MTUsIDB4ZTAsIDB4OWYsIDB4MjIsCi0weGNiLCAweGE5LCAweDBhLCAweGMyLCAweDNmLCAweGEyLCAweGQ2LCAweDJjLAotMHhjYSwgMHg2ZCwgMHg4MiwgMHhlMiwgMHhlNSwgMHgzZCwgMHg1YiwgMHhmZiwKLTB4OTksIDB4N2YsIDB4ZGIsIDB4NjEsIDB4MDcsIDB4NGYsIDB4YWEsIDB4Y2EsCi0weGVhLCAweGIwLCAweGRjLCAweGVjLCAweGQ3LCAweGRmLCAweGJjLCAweGZhLAotMHg4ZiwgMHhiNSwgMHhjOCwgMHhkMywgMHhlYSwgMHg5MSwgMHhhNywgMHgwMywKLTB4ZjUsIDB4M2QsIDB4NWIsIDB4ZmYsIDB4YzksIDB4NTEsIDB4ZmQsIDB4MjcsCi0weGMzLCAweDhmLCAweGExLCAweDQ5LCAweDMxLCAweGQ1LCAweDFjLCAweGZkLAotMHg0NSwgMHg0MSwgMHhmZCwgMHg4NywgMHhmMiwgMHgwZiwgMHgwZSwgMHhiMiwKLTB4ODIsIDB4ZjMsIDB4NGYsIDB4NGEsIDB4OGUsIDB4MTMsIDB4NjMsIDB4MTYsCi0weGZhLCAweGNmLCAweDJmLCAweDliLCAweGJmLCAweDAzLCAweDUzLCAweGIwLAotMHg3NCwgMHg3NywgMHg0ZiwgMHgzNiwgMHgxYywgMHhhMywgMHhiMiwgMHg0ZiwKLTB4OTAsIDB4ZmUsIDB4NDMsIDB4ZjMsIDB4NGYsIDB4MDMsIDB4MTcsIDB4NDksCi0weDZmLCAweDIzLCAweDIwLCAweGQ0LCAweDEwLCAweGEwLCAweGNmLCAweGRiLAotMHhmYSwgMHg4ZiwgMHg2NiwgMHhmMCwgMHhjZiwgMHg5MywgMHg3YSwgMHg2NCwKLTB4MjMsIDB4YjcsIDB4MTIsIDB4ZmEsIDB4YzQsIDB4MjUsIDB4ODAsIDB4ZjMsCi0weGQ1LCAweDAyLCAweGRkLCAweGNiLCAweDNmLCAweGI2LCAweGZlLCAweGQzLAotMHgyMywgMHg5YSwgMHhmYywgMHgxMywgMHhmZCwgMHg4NywgMHhjOCwgMHgxZCwKLTB4ZjAsIDB4NWIsIDB4ZDQsIDB4NzgsIDB4NjksIDB4ZWQsIDB4ODYsIDB4NTUsCi0weDhiLCAweDc0LCAweDJmLCAweGZmLCAweDM4LCAweGY0LCAweDlmLCAweDg1LAotMHg1NiwgMHhiZSwgMHgzZCwgMHgxOCwgMHhjYSwgMHgwOSwgMHgzNywgMHgzMCwKLTB4ZWYsIDB4MmQsIDB4YzUsIDB4NjksIDB4MTYsIDB4ZTUsIDB4ZTcsIDB4MWYsCi0weGY4LCAweGI3LCAweDI5LCAweGY4LCAweDU3LCAweDUyLCAweGE0LCAweDcyLAotMHhmOCwgMHhhNiwgMHg3YiwgMHhhNywgMHhhYiwgMHhmZSwgMHg3MCwgMHg3NCwKLTB4YjIsIDB4ODYsIDB4OTUsIDB4MmQsIDB4ODYsIDB4NDYsIDB4YjYsIDB4ZmUsCi0weDQzLCAweGY4LCAweGE3LCAweDRmLCAweGMzLCAweDhiLCAweDRjLCAweDU3LAotMHg4YywgMHg3MCwgMHgzYiwgMHhhMSwgMHg0YSwgMHg1YSwgMHhmMywgMHgyNSwKLTB4YjcsIDB4ODAsIDB4ZTYsIDB4OWYsIDB4YjMsIDB4YTgsIDB4MGYsIDB4YmUsCi0weDYzLCAweGU4LCAweDNmLCAweDJjLCAweGZlLCAweDAwLCAweDc4LCAweGJlLAotMHg4MiwgMHhiZiwgMHg1NSwgMHhiOSwgMHhmZiwgMHg4NSwgMHgyZCwgMHhhMSwKLTB4YWEsIDB4OTMsIDB4M2YsIDB4NTQsIDB4ZGIsIDB4MWUsIDB4ZjEsIDB4M2QsCi0weGI4LCAweDM5LCAweGY0LCAweDFmLCAweDlhLCAweDdmLCAweDgwLCAweGQzLAotMHhlNSwgMHgzNiwgMHg1NSwgMHg1MSwgMHg3ZSwgMHhiOCwgMHg5MiwgMHg1YiwKLTB4ZWIsIDB4N2MsIDB4YjAsIDB4OGQsIDB4NzksIDB4ZjUsIDB4MWYsIDB4Y2IsCi0weDVmLCAweDhkLCAweGQ3LCAweGI5LCAweGMxLCAweDc1LCAweDc1LCAweGU5LAotMHg0OCwgMHgyNywgMHhmZiwgMHgzMywgMHgyMywgMHg2ZCwgMHgyZSwgMHhjZSwKLTB4Y2MsIDB4MDksIDB4NzgsIDB4N2UsIDB4YzQsIDB4ZmMsIDB4NjMsIDB4ZjIsCi0weDkyLCAweDhlLCAweDc5LCAweGY4LCAweDFiLCAweDM1LCAweDI1LCAweDQ0LAotMHhiOSwgMHgzOSwgMHhiZCwgMHhiZSwgMHg3YSwgMHg5NCwgMHg2NSwgMHhlYiwKLTB4MGYsIDB4YzksIDB4NTYsIDB4ZDIsIDB4Y2UsIDB4Y2QsIDB4MTksIDB4ODcsCi0weDBmLCAweDYwLCAweDg1LCAweDJlLCAweGU5LCAweDBlLCAweGZkLCAweDA3LAotMHhhNiwgMHgwNSwgMHg4ZiwgMHhmZSwgMHg4MywgMHgyOCwgMHhmZiwgMHg3NCwKLTB4NTQsIDB4N2MsIDB4MDQsIDB4ZTcsIDB4MWYsIDB4YWMsIDB4NTYsIDB4ZDYsCi0weGZlLCAweGJjLCAweDM5LCAweDQwLCAweGZmLCAweDUxLCAweDE5LCAweGZmLAotMHg5MCwgMHg3YSwgMHg0NywgMHgxZSwgMHhlYSwgMHg3ZiwgMHg1OSwgMHhmYywKLTB4YTEsIDB4ZDIsIDB4MmQsIDB4YzYsIDB4M2EsIDB4YzQsIDB4MGUsIDB4YWIsCi0weGRlLCAweDg1LCAweGYzLCAweGYwLCAweDBmLCAweGRlLCAweDVkLCAweGNhLAotMHg0NiwgMHgyMywgMHgzZSwgMHhmMCwgMHgwYiwgMHg1NSwgMHg4MSwgMHg2ZCwKLTB4NjAsIDB4ZTYsIDB4NjcsIDB4MjIsIDB4ODMsIDB4MGMsIDB4YTcsIDB4OGYsCi0weGMyLCAweDQ2LCAweDlmLCAweGZlLCAweDAzLCAweGM3LCAweDYzLCAweGE0LAotMHhiZiwgMHhjMCwgMHg2NywgMHg4NSwgMHgwYiwgMHhlYSwgMHg3MiwgMHg3ZCwKLTB4MDEsIDB4ZTIsIDB4MTcsIDB4MzAsIDB4N2YsIDB4ZTksIDB4YzYsIDB4ZDAsCi0weDRiLCAweDljLCAweGZjLCAweDQzLCAweGVhLCAweGQ3LCAweGMzLCAweDNhLAotMHg4NiwgMHg5NiwgMHgyOSwgMHg2OCwgMHg4MiwgMHg3MiwgMHhkZCwgMHgyZSwKLTB4NWIsIDB4NTcsIDB4OTAsIDB4NWYsIDB4ZmYsIDB4YjEsIDB4ZjksIDB4NjcsCi0weGFhLCAweDg1LCAweDE4LCAweGU1LCAweDEzLCAweGZjLCAweDRkLCAweDY0LAotMHhjOSwgMHgzZSwgMHhlYywgMHgyYiwgMHg4NywgMHhmZSwgMHgyMywgMHg3ZiwKLTB4NGMsIDB4NjksIDB4ZTcsIDB4MGEsIDB4M2EsIDB4OGUsIDB4ZWUsIDB4MjIsCi0weGM2LCAweGY0LCAweGVjLCAweGY0LCAweDlmLCAweDYxLCAweDQ0LCAweDhjLAotMHgzMCwgMHgzNiwgMHg1NCwgMHg1ZiwgMHhmZiwgMHhjYiwgMHhkNiwgMHg3ZiwKLTB4ZjAsIDB4ZjMsIDB4OTcsIDB4MjMsIDB4ZGEsIDB4NzcsIDB4Y2QsIDB4YTQsCi0weGZmLCAweGE4LCAweDk1LCAweDU3LCAweDU1LCAweGQ3LCAweGFmLCAweDFmLAotMHhkOCwgMHg5ZiwgMHgxYSwgMHg2MSwgMHhmYiwgMHgyNywgMHgxYiwgMHg3YSwKLTB4Y2QsIDB4YTcsIDB4ZjYsIDB4MDQsIDB4ZTgsIDB4M2YsIDB4NDEsIDB4ZmMsCi0weGUzLCAweGJmLCAweDZjLCAweDEwLCAweGZmLCAweGUwLCAweDdhLCAweGU0LAotMHg1ZCwgMHhlZCwgMHhjZCwgMHgwMiwgMHhmZCwgMHhhZiwgMHg2YywgMHhkMSwKLTB4ZWEsIDB4ZmMsIDB4OGYsIDB4NWQsIDB4MDEsIDB4ZmMsIDB4OTMsIDB4MGUsCi0weGNkLCAweGYzLCAweGE5LCAweDFmLCAweDdlLCAweGMzLCAweGQ5LCAweGZmLAotMHgxMiwgMHgyOCwgMHhlNCwgMHgwYywgMHhiYiwgMHg4YywgMHg2YywgMHgzNCwKLTB4NTksIDB4MzMsIDB4MWMsIDB4YzAsIDB4M2YsIDB4MGIsIDB4N2YsIDB4NGQsCi0weGQ0LCAweDFlLCAweGJkLCAweDA0LCAweGQzLCAweDhlLCAweDZhLCAweDgxLAotMHhkMCwgMHg0ZCwgMHhkNSwgMHgyMSwgMHgwNCwgMHg3OSwgMHhmOCwgMHhhNywKLTB4MDcsIDB4ZDcsIDB4MmYsIDB4NmYsIDB4MzQsIDB4YTYsIDB4ZjQsIDB4MzMsCi0weDVlLCAweGZkLCAweDg3LCAweGVkLCAweDlmLCAweGMxLCAweGRiLCAweGY2LAotMHhmOCwgMHg5ZSwgMHgxNiwgMHg4NywgMHgxNSwgMHg2ZiwgMHgzZSwgMHg3MSwKLTB4ZWEsIDB4M2YsIDB4ZmYsIDB4MTksIDB4ZTAsIDB4ZTYsIDB4NTYsIDB4Y2YsCi0weDg4LCAweDQzLCAweGZmLCAweDk5LCAweDNiLCAweDEwLCAweDEwLCAweGM2LAotMHg3NiwgMHhjZiwgMHhjOCwgMHg3OSwgMHhiNiwgMHgzZiwgMHg3MywgMHgzNiwKLTB4ZmYsIDB4ZDgsIDB4YjIsIDB4MGYsIDB4YzUsIDB4MWUsIDB4NWIsIDB4ZmYsCi0weGYxLCAweGYzLCAweDRmLCAweGQwLCAweDYzLCAweDc4LCAweDFlLCAweGZlLAotMHhiMSwgMHhkNSwgMHgwYywgMHhjYiwgMHgxMCwgMHgyNiwgMHg0MywgMHgzMywKLTB4ZjIsIDB4NGYsIDB4OTAsIDB4OGMsIDB4NTMsIDB4ODgsIDB4N2YsIDB4MGEsCi0weGNlLCAweDBmLCAweGUyLCAweDFmLCAweDg3LCAweDBjLCAweGEyLCAweGU1LAotMHhlZiwgMHg3ZiwgMHgzNSwgMHhkOCwgMHhmZCwgMHgyZiwgMHhkYiwgMHg0ZCwKLTB4ZTQsIDB4MWQsIDB4MzksIDB4NmIsIDB4ZjcsIDB4YmYsIDB4Y2EsIDB4MjgsCi0weGI0LCAweGNjLCAweDE5LCAweGQzLCAweGRlLCAweGNiLCAweGE3LCAweDZmLAotMHgwNCwgMHhmMCwgMHg0ZiwgMHgxNywgMHhmZiwgMHg2NywgMHhjMywgMHhkOCwKLTB4MTksIDB4MzQsIDB4ZmYsIDB4MTQsIDB4YmIsIDB4N2YsIDB4MWIsIDB4NjQsCi0weDA2LCAweDM5LCAweGJhLCAweDg1LCAweDNkLCAweGNkLCAweDk3LCAweGQ0LAotMHg1OSwgMHhmMCwgMHg0ZiwgMHg5MCwgMHhjYywgMHhlNSwgMHhmMCwgMHgzNywKLTB4NDgsIDB4ZmYsIDB4MjksIDB4MTQsIDB4NGYsIDB4YmEsIDB4MWYsIDB4YjQsCi0weGNhLCAweGY1LCAweGY5LCAweDY1LCAweDFjLCAweGQzLCAweDU4LCAweDhjLAotMHhmOSwgMHhjNywgMHhkNiwgMHgxZiwgMHg0MiwgMHg4NywgMHg2NywgMHg5YSwKLTB4NGYsIDB4ZjQsIDB4OWYsIDB4MjAsIDB4ZmUsIDB4YzksIDB4OWEsIDB4OGQsCi0weDMwLCAweDYyLCAweDhjLCAweDdhLCAweGY5LCAweDg3LCAweGVkLCAweDdmLAotMHhjNiwgMHgzZiwgMHg4NCwgMHg3NiwgMHhmZSwgMHgxZCwgMHgxYiwgMHg1MSwKLTB4NmEsIDB4Y2MsIDB4YzAsIDB4M2YsIDB4YzksIDB4NjIsIDB4YzcsIDB4NmQsCi0weGUyLCAweDE1LCAweDJlLCAweDg2LCAweDA0LCAweDU2LCAweDVmLCAweDQyLAotMHg3NiwgMHhiNywgMHgwOCwgMHg1OSwgMHhiNywgMHhlZCwgMHg1OSwgMHgxZiwKLTB4MGYsIDB4ZTQsIDB4ZDgsIDB4ZjUsIDB4MDksIDB4ZmYsIDB4ZjQsIDB4NTksCi0weGI0LCAweGEzLCAweGJjLCAweDRkLCAweGIxLCAweGU3LCAweDBmLCAweDVlLAotMHhmZSwgMHhiMSwgMHhmNSwgMHg5ZiwgMHg4NSwgMHg3NiwgMHhiZSwgMHhlZCwKLTB4MzcsIDB4ZjMsIDB4YjksIDB4NTcsIDB4ZTgsIDB4NzAsIDB4ZjMsIDB4OGYsCi0weDU5LCAweGJmLCAweGM2LCAweDhjLCAweDZhLCAweDc1LCAweGFlLCAweGNkLAotMHg5MCwgMHg3ZCwgMHg1OCwgMHhkOSwgMHhiYSwgMHhjYSwgMHhmOCwgMHhjNywKLTB4YTUsIDB4ZmYsIDB4ZjQsIDB4OTEsIDB4ZmUsIDB4MTcsIDB4ZDEsIDB4N2YsCi0weGI2LCAweDEyLCAweDEwLCAweDdhLCAweGQ2LCAweDVlLCAweGY2LCAweDQ1LAotMHg2YSwgMHhiOCwgMHhmYSwgMHg1ZiwgMHg3NiwgMHhiZSwgMHhkYSwgMHhhYSwKLTB4OTgsIDB4YjIsIDB4MGYsIDB4MWIsIDB4NDEsIDB4ZjksIDB4ZjksIDB4MjcsCi0weDI4LCAweGVkLCAweDMwLCAweDIzLCAweDgwLCAweDdmLCAweDcwLCAweGJlLAotMHhlNSwgMHhiYywgMHg2OSwgMHgzMywgMHhhOCwgMHhmZiwgMHgwNSwgMHg1NywKLTB4YWMsIDB4N2EsIDB4YjcsIDB4OGEsIDB4MTQsIDB4ZmEsIDB4NDQsIDB4YzAsCi0weGZjLCAweDlkLCAweDg0LCAweDdmLCAweGU4LCAweGY1LCAweDA5LCAweGZmLAotMHg5YywgMHgzMywgMHg5MiwgMHhmNiwgMHgxYywgMHhiYiwgMHhjYywgMHhjOSwKLTB4YzQsIDB4NTgsIDB4OGMsIDB4MGQsIDB4ZDEsIDB4YTcsIDB4ZmYsIDB4NmMsCi0weDE2LCAweGQ2LCAweGJhLCAweDY1LCAweDlmLCAweDM1LCAweDgxLCAweDdhLAotMHg4ZSwgMHhjZCwgMHgzZiwgMHg0NSwgMHg3MSwgMHgyNiwgMHhmYiwgMHgwOCwKLTB4ZGUsIDB4NjksIDB4ZDQsIDB4NjgsIDB4NzYsIDB4ZjIsIDB4NGYsIDB4MWMsCi0weDBlLCAweDU5LCAweGQxLCAweDEwLCAweDhlLCAweDhhLCAweDc2LCAweDU4LAotMHgwNiwgMHgxOCwgMHgyMSwgMHhhYywgMHhmMSwgMHhmMiwgMHgwZiwgMHgwZSwKLTB4Y2IsIDB4NjksIDB4ZTMsIDB4ZTksIDB4ZGIsIDB4NzAsIDB4ZjMsIDB4ODgsCi0weGE1LCAweGZmLCAweDQ0LCAweGIwLCAweGJmLCAweDFhLCAweGU1LCAweDFmLAotMHg5ZSwgMHg0ZSwgMHgzNywgMHhmNCwgMHgxZiwgMHhhMiwgMHgxNywgMHg5MSwKLTB4NmEsIDB4NzUsIDB4MjMsIDB4NDQsIDB4OGUsIDB4NmQsIDB4ZDQsIDB4NTAsCi0weGM3LCAweGVkLCAweDA4LCAweGU0LCAweDRhLCAweDAyLCAweGY4LCAweGU3LAotMHgyNiwgMHhkOSwgMHg4ZCwgMHg4YSwgMHhlNCwgMHg2OCwgMHg3YiwgMHgwNSwKLTB4ZjUsIDB4YmYsIDB4NjQsIDB4MDYsIDB4MzksIDB4NTMsIDB4YzQsIDB4NTAsCi0weDYyLCAweDgxLCAweGZkLCAweDJmLCAweDA4LCAweGUyLCAweDFmLCAweDYyLAotMHgwMCwgMHg3ZSwgMHhiZSwgMHhmMCwgMHhlZiwgMHgwNywgMHgyNywgMHhmZiwKLTB4YjgsIDB4NjksIDB4NTMsIDB4MTUsIDB4OGYsIDB4Y2QsIDB4YjYsIDB4ZmYsCi0weDY1LCAweDljLCAweDM2LCAweGYxLCAweDlkLCAweDNmLCAweGM5LCAweGRmLAotMHhmZiwgMHgzMiwgMHhhMiwgMHg1MSwgMHgzMSwgMHhmYiwgMHhmZSwgMHhkNywKLTB4MTUsIDB4NzQsIDB4MDYsIDB4ZDUsIDB4YzEsIDB4ZGEsIDB4MzcsIDB4MGEsCi0weGViLCAweDNmLCAweGFjLCAweGZmLCAweDU1LCAweDNkLCAweGE1LCAweDZjLAotMHg4NywgMHhlYSwgMHhlNiwgMHhiMiwgMHgxMywgMHgwMSwgMHhlNywgMHg5NywKLTB4ZWMsIDB4ZmUsIDB4NTcsIDB4ZDYsIDB4ZWUsIDB4N2YsIDB4OWQsIDB4ODMsCi0weDc2LCAweDAxLCAweDMyLCAweGY4LCAweDc5LCAweGNhLCAweGZmLCAweGZjLAotMHhlNSwgMHhlNCwgMHg5ZiwgMHg0NSwgMHgwZSwgMHgwYywgMHgxOCwgMHhhOCwKLTB4MzksIDB4NWMsIDB4NGEsIDB4ZjQsIDB4MTAsIDB4MWYsIDB4ZmYsIDB4MDgsCi0weDc0LCAweGJmLCAweGI1LCAweDg4LCAweGY4LCAweDZhLCAweGI0LCAweGVkLAotMHhmNSwgMHgzZiwgMHg0YSwgMHhkNywgMHhlNiwgMHgxZCwgMHhkNSwgMHhiYywKLTB4NDQsIDB4OGYsIDB4ZmQsIDB4ZDgsIDB4ZmQsIDB4YWYsIDB4NjIsIDB4YmEsCi0weDFlLCAweDc1LCAweGExLCAweDE1LCAweDlmLCAweDBjLCAweGZmLCAweDQ3LAotMHg2MiwgMHg5YywgMHg4YywgMHhhNiwgMHgwMywgMHhlMiwgMHgzMywgMHhjMiwKLTB4ZTIsIDB4ZGYsIDB4NTMsIDB4NzQsIDB4MDUsIDB4M2UsIDB4NDIsIDB4NzUsCi0weDY0LCAweGZlLCAweDU1LCAweDc5LCAweDBkLCAweGFjLCAweDQ0LCAweGQyLAotMHgzMSwgMHhhMywgMHgzZiwgMHg2YiwgMHg3NCwgMHhjNCwgMHhkOCwgMHhmOSwKLTB4MWYsIDB4MjcsIDB4ZmYsIDB4OTAsIDB4ZmMsIDB4NTksIDB4NDUsIDB4OTIsCi0weGM2LCAweDFmLCAweGJiLCAweGYxLCAweDYzLCAweDE3LCAweDJhLCAweDZiLAotMHhiNSwgMHhmYSwgMHhlOSwgMHhlYywgMHgyMCwgMHg5MCwgMHhlOCwgMHhlZCwKLTB4N2YsIDB4ZjUsIDB4YTEsIDB4MmEsIDB4ZTIsIDB4ZDQsIDB4NTksIDB4NzgsCi0weDExLCAweDJkLCAweDRkLCAweDhhLCAweDM5LCAweGNiLCAweDVmLCAweGQxLAotMHg3MSwgMHhmZSwgMHg2NywgMHhkYywgMHhhMywgMHhmZiwgMHgyOCwgMHgzOCwKLTB4NjgsIDB4ZDUsIDB4YzQsIDB4ZDgsIDB4NzgsIDB4ZjIsIDB4NmUsIDB4MDgsCi0weDRiLCAweDZlLCAweDg1LCAweDVmLCAweDc0LCAweGYzLCAweDBmLCAweDgxLAotMHg5YywgMHgyMywgMHhiOCwgMHg0YywgMHg5NCwgMHhlNCwgMHhlMCwgMHgzMiwKLTB4MzQsIDB4NmEsIDB4NTIsIDB4OTYsIDB4OGYsIDB4MTksIDB4ZDgsIDB4MTMsCi0weGE3LCAweGZjLCAweDEzLCAweDc3LCAweGYzLCAweDhmLCAweGEzLCAweDFlLAotMHg3NSwgMHhhYiwgMHgyOSwgMHg1OCwgMHhkYywgMHgzMSwgMHg2YiwgMHhmZSwKLTB4ODEsIDB4YzksIDB4OGEsIDB4OTQsIDB4MmEsIDB4NzUsIDB4Y2YsIDB4MTksCi0weDkzLCAweDY3LCAweGExLCAweGZmLCAweDE4LCAweGQ1LCAweDU2LCAweGM1LAotMHhmYiwgMHhmZiwgMHg4NSwgMHhmZSwgMHg4MiwgMHhmYywgMHgyMywgMHhkNCwKLTB4YzIsIDB4NGIsIDB4YjQsIDB4NWYsIDB4NDMsIDB4YmUsIDB4MTUsIDB4ODMsCi0weGViLCAweDM1LCAweGZkLCAweDg4LCAweDYwLCAweGYzLCAweDhmLCAweDU2LAotMHgyZiwgMHgyNCwgMHgxZSwgMHg4YiwgMHgxNSwgMHhlZSwgMHg3ZiwgMHgzNSwKLTB4ODgsIDB4NjksIDB4ZDYsIDB4ZWYsIDB4NDMsIDB4NjYsIDB4MjMsIDB4NjYsCi0weDk1LCAweGRmLCAweDVmLCAweDQ3LCAweGZmLCAweDZiLCAweGExLCAweGFiLAotMHg5YSwgMHgzNywgMHg5MSwgMHg4MywgMHgzZCwgMHgzMywgMHhmMSwgMHhjZiwKLTB4MmQsIDB4NGIsIDB4ZWQsIDB4NDEsIDB4YjcsIDB4ZjAsIDB4N2MsIDB4YTksCi0weGQ1LCAweGQwLCAweDRmLCAweDlhLCAweGYyLCAweDlkLCAweGZmLCAweGIxLAotMHhmOSwgMHhlNywgMHg5MiwgMHg2MSwgMHg3YywgMHg1NywgMHhhYiwgMHg1MCwKLTB4MGEsIDB4ZjUsIDB4YmYsIDB4MmMsIDB4ZmUsIDB4ZDksIDB4OGUsIDB4YmQsCi0weDViLCAweGZkLCAweDJhLCAweDI0LCAweGQyLCAweGEyLCAweGRjLCAweDFjLAotMHg3NCwgMHhkZSwgMHgyOSwgMHgxZiwgMHhmZiwgMHhiNCwgMHg5NCwgMHg3NiwKLTB4MDUsIDB4OWMsIDB4YmYsIDB4YjIsIDB4ZmIsIDB4NWYsIDB4ZGEsIDB4NWMsCi0weDBmLCAweGNmLCAweGM0LCAweDc3LCAweDQ1LCAweDBhLCAweGU5LCAweDNmLAotMHg3NiwgMHhmZiwgMHg4YiwgMHg3YywgMHgyYiwgMHhlNiwgMHhlZCwgMHg3ZiwKLTB4ZDEsIDB4ZWIsIDB4ZmIsIDB4ZjgsIDB4NDcsIDB4ZGEsIDB4MTIsIDB4YTQsCi0weGZmLCAweGQ4LCAweGZkLCAweGFmLCAweDBlLCAweGNjLCAweDNmLCAweDIxLAotMHgwMiwgMHgzOSwgMHgxNSwgMHgzNywgMHg3NiwgMHgzZiwgMHgyNywgMHgyZSwKLTB4NDEsIDB4M2QsIDB4MWIsIDB4ZGEsIDB4N2EsIDB4MTgsIDB4MTEsIDB4YzksCi0weDc5LCAweGZiLCAweDVmLCAweGE0LCAweGZmLCAweDhlLCAweGRhLCAweDcwLAotMHgzNCwgMHg0NCwgMHgyNSwgMHg0OCwgMHhmZiwgMHg1MSwgMHgzYywgMHhmZCwKLTB4MmYsIDB4OTMsIDB4MTYsIDB4YjYsIDB4YzAsIDB4OTIsIDB4MzYsIDB4NzEsCi0weDljLCAweGRiLCAweDU3LCAweGE4LCAweGZmLCAweDQ1LCAweGY1LCAweDlmLAotMHg0ZCwgMHg3YywgMHgzZiwgMHhiYywgMHg0ZCwgMHhlYSwgMHhjYiwgMHgyNiwKLTB4N2UsIDB4NTEsIDB4YTEsIDB4ZmUsIDB4OTcsIDB4Y2QsIDB4M2YsIDB4MzksCi0weDkyLCAweDNkLCAweGQwLCAweGMzLCAweDQxLCAweGY5LCAweGRjLCAweGQxLAotMHhmZiwgMHgyYSwgMHhiYSwgMHhkYSwgMHg3MiwgMHgxZCwgMHhkNSwgMHg5MywKLTB4MjIsIDB4ZjUsIDB4MDYsIDB4NWMsIDB4YzQsIDB4ODYsIDB4ZjQsIDB4Y2YsCi0weDc2LCAweGZmLCAweDgyLCAweGQ0LCAweGFmLCAweDE1LCAweGRlLCAweGZlLAotMHhkNywgMHg3ZSwgMHg1YywgMHg2NCwgMHgwZiwgMHg5MCwgMHg0NSwgMHg4ZSwKLTB4NzYsIDB4ZWMsIDB4NDQsIDB4NzcsIDB4NmYsIDB4MTEsIDB4OWYsIDB4YTksCi0weDU4LCAweGUwLCAweDViLCAweGJmLCAweDkzLCAweDM3LCAweDg4LCAweDc3LAotMHhkZiwgMHgzMiwgMHhlNiwgMHg0YiwgMHgyNywgMHhhMCwgMHhhYSwgMHhhYiwKLTB4YjQsIDB4YjUsIDB4ZGEsIDB4MzUsIDB4ZmYsIDB4NmUsIDB4ZGQsIDB4ZGQsCi0weGZmLCAweDMyLCAweGYyLCAweDRmLCAweGFkLCAweDAxLCAweDM5LCAweDcwLAotMHgwMCwgMHg2MiwgMHg5YiwgMHg0YiwgMHg4MywgMHhmNCwgMHgzNCwgMHhiYiwKLTB4ZmYsIDB4MTUsIDB4MzMsIDB4ZmEsIDB4MTcsIDB4YWYsIDB4NjEsIDB4YTcsCi0weDRhLCAweDdhLCAweDhhLCAweGJlLCAweDgwLCAweDI0LCAweDJhLCAweDMzLAotMHhmMywgMHgyNywgMHhmMywgMHg3NywgMHhiOSwgMHhkOSwgMHhmZiwgMHhiMiwKLTB4ZDcsIDB4ZDMsIDB4NGIsIDB4MDcsIDB4M2YsIDB4ODUsIDB4ZmYsIDB4ZTIsCi0weDUyLCAweDVkLCAweGU1LCAweGZmLCAweDExLCAweDc4LCAweGZlLCAweGM3LAotMHhjOSwgMHgzZiwgMHhlYywgMHhhMSwgMHhmZSwgMHhkNiwgMHhlMSwgMHg3YSwKLTB4MjQsIDB4OGQsIDB4YmIsIDB4ZjQsIDB4OWYsIDB4N2MsIDB4ZmQsIDB4YWYsCi0weGQyLCAweDBjLCAweGY3LCAweDE5LCAweDFjLCAweDRmLCAweDU3LCAweDFmLAotMHgwOSwgMHgyZiwgMHgwZiwgMHgzYSwgMHg3ZiwgMHhlYiwgMHhlMiwgMHgxZiwKLTB4NmIsIDB4YjAsIDB4MjcsIDB4ZmQsIDB4ODYsIDB4NTAsIDB4YWQsIDB4ODksCi0weGM3LCAweDAyLCAweGU2LCAweDdiLCAweGY0LCAweDFmLCAweDFjLCAweDg0LAotMHhkMiwgMHg2NCwgMHhmMywgMHgyMCwgMHgxYywgMHg1NSwgMHgwZSwgMHg2ZSwKLTB4N2UsIDB4ZDYsIDB4M2EsIDB4MGYsIDB4M2MsIDB4NjAsIDB4YzYsIDB4ODcsCi0weGY3LCAweDllLCAweGZmLCAweDkxLCAweGUyLCAweGU4LCAweGM2LCAweDNhLAotMHg2YiwgMHgzZiwgMHg0YywgMHg0MCwgMHgxZCwgMHg5MiwgMHgzMiwgMHg1NiwKLTB4N2MsIDB4MjIsIDB4OGUsIDB4NDYsIDB4OTgsIDB4OTMsIDB4N2YsIDB4NmUsCi0weDE5LCAweDRlLCAweDk1LCAweDhkLCAweGYzLCAweGEzLCAweDMwLCAweGE5LAotMHgzNiwgMHgyMiwgMHhlYSwgMHhlNiwgMHgyMCwgMHgzNSwgMHg4NiwgMHgwMiwKLTB4ZjgsIDB4MjcsIDB4NjUsIDB4NjIsIDB4YjMsIDB4ZDksIDB4MmQsIDB4NWQsCi0weGUzLCAweGRhLCAweDNmLCAweGY1LCAweGZlLCAweGZlLCAweGQ3LCAweDBhLAotMHgwMiwgMHgzOSwgMHg0NywgMHgyYywgMHhkYSwgMHg5MSwgMHg4ZSwgMHg3MSwKLTB4YWUsIDB4ZjMsIDB4Y2YsIDB4ZDUsIDB4YmUsIDB4ZmUsIDB4OTcsIDB4NzAsCi0weDM0LCAweDE0LCAweGQ3LCAweGI3LCAweDNiLCAweDdlLCAweDdkLCAweGQ3LAotMHg3ZSwgMHg1MCwgMHhmMiwgMHhmNiwgMHhiZiwgMHhjYywgMHhlOCwgMHg4OSwKLTB4MTksIDB4NzcsIDB4M2MsIDB4YWIsIDB4ZjMsIDB4ZjUsIDB4YmYsIDB4ZWMsCi0weDVmLCAweGRmLCAweGI1LCAweDdmLCAweGVhLCAweGYyLCAweGY1LCAweGJmLAotMHhmMiwgMHhlOCwgMHgzZiwgMHg2ZiwgMHhlNSwgMHhlZCwgMHg3ZiwgMHhjZCwKLTB4NGEsIDB4ZmYsIDB4MTksIDB4MmQsIDB4ZjIsIDB4ZmMsIDB4ZmEsIDB4N2MsCi0weGQyLCAweGM5LCAweDZmLCAweDQ3LCAweGJkLCAweGZhLCAweDRmLCAweGNlLAotMHhjZSwgMHgzZiwgMHhiMywgMHhkMiwgMHg3ZiwgMHhjNiwgMHg0MywgMHg4YiwKLTB4Y2MsIDB4NDMsIDB4Y2UsIDB4Y2YsIDB4OTIsIDB4ZWEsIDB4YWYsIDB4OTksCi0weGQ4LCAweDIzLCAweGU0LCAweGQ3LCAweDdmLCAweGZlLCAweDVhLCAweDJjLAotMHgyNywgMHg5MCwgMHgzMywgMHgxNiwgMHg1ZCwgMHg0ZSwgMHg2OCwgMHg0NywKLTB4MzMsIDB4OGUsIDB4M2QsIDB4MGYsIDB4ZmIsIDB4MTQsIDB4MjEsIDB4YTcsCi0weGZlLCAweDYzLCAweGY0LCAweGJmLCAweDA2LCAweDAyLCAweGUyLCAweDYzLAotMHhmYSwgMHhlYiwgMHhkMywgMHg3ZiwgMHhmMCwgMHhhMCwgMHhjOSwgMHgzZiwKLTB4NTYsIDB4MzQsIDB4MWEsIDB4NzgsIDB4M2YsIDB4MWYsIDB4YmEsIDB4ZmEsCi0weDVmLCAweGYwLCAweDE2LCAweGRjLCAweGU3LCAweGNhLCAweDM2LCAweGZlLAotMHhmYywgMHhlMywgMHhlYSwgMHg3ZiwgMHhjOSwgMHg2ZiwgMHg5OSwgMHhmYywKLTB4YzMsIDB4YmMsIDB4ZjMsIDB4ZjMsIDB4OWUsIDB4YjcsIDB4ZmYsIDB4NTUsCi0weGViLCAweGVhLCAweDFlLCAweGZhLCAweGYzLCAweDhmLCAweGI3LCAweGZmLAotMHg1NSwgMHhlNywgMHg1NCwgMHg3YiwgMHgyMiwgMHgzMSwgMHg5ZiwgMHgyMiwKLTB4MTQsIDB4ZDAsIDB4ZmYsIDB4YjIsIDB4YWIsIDB4Y2YsIDB4OWMsIDB4YWMsCi0weDMwLCAweDJiLCAweGZlLCAweGYxLCAweDk3LCAweGM1LCAweGMyLCAweGZjLAotMHg1MywgMHg0MCwgMHhkOCwgMHhmMSwgMHhlOCwgMHgzZiwgMHhhMSwgMHg4NCwKLTB4YmEsIDB4YTYsIDB4ZTAsIDB4ZmMsIDB4MjAsIDB4ZmQsIDB4MjcsIDB4MWMsCi0weDIwLCAweDA0LCAweDE1LCAweGQ0LCAweDdmLCAweGZjLCAweDY1LCAweDM3LAotMHhhOCwgMHhmZiwgMHg1NSwgMHhjNiwgMHhmYSwgMHg1ZiwgMHgwNSwgMHhmNCwKLTB4MGQsIDB4MzcsIDB4ZmYsIDB4N2MsIDB4ZWEsIDB4ZmEsIDB4NzYsIDB4ODQsCi0weDc3LCAweGYwLCAweGExLCAweDg1LCAweDQ2LCAweGE3LCAweDM4LCAweDY3LAotMHhmZiwgMHgyYiwgMHg2NywgMHg5ZSwgMHg3ZiwgMHhmNiwgMHgxZiwgMHhmYiwKLTB4YjEsIDB4ZjksIDB4MDcsIDB4OWMsIDB4ZmMsIDB4NzMsIDB4YzAsIDB4ZWMsCi0weDdmLCAweDUxLCAweGVmLCAweDJhLCAweDA2LCAweGU0LCAweDAyLCAweGZkLAotMHgyZiwgMHhjYywgMHgzZiwgMHgyZiwgMHhjMSwgMHg1MywgMHgzMywgMHhlOCwKLTB4M2YsIDB4ZWUsIDB4ZmUsIDB4MTcsIDB4NWUsIDB4ZmYsIDB4ODMsIDB4ODUsCi0weGY1LCAweDljLCAweDgwLCAweGZlLCAweDk3LCAweDQzLCAweDFkLCAweDlhLAotMHhhOSwgMHhmZiwgMHg5NSwgMHhlZiwgMHhiYywgMHg1OSwgMHhiZSwgMHhmZSwKLTB4ZDcsIDB4NGYsIDB4MGMsIDB4YzgsIDB4MDEsIDB4YWEsIDB4ZjYsIDB4MzAsCi0weGMzLCAweGE5LCAweGZmLCAweGIwLCAweGViLCAweGIzLCAweGZjLCAweDIzLAotMHgxNCwgMHhjOCwgMHgzZiwgMHhkZSwgMHhmZSwgMHgxNywgMHhiZSwgMHg0OSwKLTB4N2YsIDB4NWEsIDB4ZWMsIDB4M2YsIDB4ZjYsIDB4MTMsIDB4ZDQsIDB4ZmYsCi0weGVhLCAweGY0LCAweGQwLCAweGNlLCAweDdmLCAweDA3LCAweDlkLCAweGZmLAotMHhiOSwgMHhhYywgMHhiMCwgMHhmZSwgMHhkNywgMHhlZCwgMHhiZCwgMHhlNCwKLTB4MzUsIDB4MTMsIDB4M2QsIDB4MTAsIDB4N2IsIDB4NGMsIDB4YTMsIDB4MjQsCi0weDUzLCAweGQzLCAweGNmLCAweGUyLCAweGNmLCAweDU5LCAweGNmLCAweGVmLAotMHg4YiwgMHgyNywgMHhmOSwgMHgyOSwgMHhmNSwgMHgyZCwgMHhmYiwgMHhmYywKLTB4YWEsIDB4ZDUsIDB4ZmYsIDB4YmEsIDB4OGUsIDB4OGUsIDB4OGMsIDB4OTUsCi0weGJiLCAweGY1LCAweDlmLCAweDFkLCAweDQ1LCAweDlmLCAweGUwLCAweDQ1LAotMHg2ZSwgMHg2NywgMHhhYiwgMHg0ZCwgMHg1MiwgMHhlMywgMHg1OSwgMHhiOCwKLTB4YjgsIDB4YjksIDB4NGYsIDB4YWIsIDB4MjIsIDB4ZDIsIDB4ZDAsIDB4ZTUsCi0weDBlLCAweDdhLCAweDdkLCAweDQwLCAweGZiLCAweGUwLCAweDQ1LCAweGNiLAotMHgzYiwgMHg4OSwgMHhiOSwgMHhiOSwgMHgxNywgMHhhOCwgMHgxMCwgMHhhNCwKLTB4NTQsIDB4MGQsIDB4ODYsIDB4YmQsIDB4ZmEsIDB4Y2YsIDB4YTEsIDB4NDIsCi0weGY5LCAweDVjLCAweDMxLCAweGY1LCAweDFmLCAweDE2LCAweDlmLCAweDRhLAotMHhkMywgMHg1ZiwgMHhkMiwgMHg5ZCwgMHgzMSwgMHhiYywgMHgzMywgMHgxYywKLTB4YjcsIDB4MGYsIDB4YmEsIDB4ODQsIDB4OGUsIDB4OTAsIDB4OGUsIDB4ODYsCi0weGFiLCAweGZmLCAweDY1LCAweGNlLCAweDJmLCAweDU4LCAweDhmLCAweGRjLAotMHhmZCwgMHhhZiwgMHhjZiwgMHhmMywgMHhkNCwgMHgzYiwgMHhlZSwgMHg4NCwKLTB4Y2QsIDB4M2YsIDB4NzQsIDB4ZmQsIDB4YWMsIDB4ZmYsIDB4MTUsIDB4MjQsCi0weGZiLCAweGU0LCAweGQxLCAweDdmLCAweGNjLCAweGMxLCAweDYyLCAweGYyLAotMHg2ZCwgMHhmMSwgMHhjYywgMHhlNywgMHg3ZiwgMHgyNCwgMHhlYiwgMHhiNCwKLTB4MGYsIDB4ZDEsIDB4N2YsIDB4YmMsIDB4ZjEsIDB4OTEsIDB4YjEsIDB4ZDEsCi0weDdmLCAweGE3LCAweDU3LCAweGZmLCAweGIxLCAweGZkLCAweDk1LCAweGIxLAotMHhjMSwgMHhjZSwgMHhjMywgMHgxZiwgMHg5OSwgMHhkMywgMHg5YiwgMHhiYywKLTB4NjEsIDB4MWUsIDB4OGQsIDB4NzYsIDB4OWQsIDB4ZmYsIDB4NTEsIDB4NGMsCi0weGE3LCAweGRhLCAweGFkLCAweGYzLCAweDNmLCAweGQ3LCAweGRhLCAweDJkLAotMHg3ZiwgMHg1ZiwgMHgyNSwgMHhmZiwgMHhhMSwgMHgxYSwgMHhkMCwgMHhmZiwKLTB4ZmEsIDB4ZGMsIDB4ZGEsIDB4MmQsIDB4ZjIsIDB4MzQsIDB4NzksIDB4ZmYsCi0weDZiLCAweGQ0LCAweGRlLCAweDNmLCAweDZmLCAweDA2LCAweGY1LCAweGJmLAotMHhhZSwgMHhjMiwgMHg2NywgMHgzNiwgMHhlZCwgMHgyYywgMHhjZCwgMHhiNiwKLTB4NzQsIDB4Y2YsIDB4ZjYsIDB4ZmMsIDB4YjMsIDB4NjEsIDB4MjgsIDB4ZjMsCi0weGU1LCAweDE5LCAweGY0LCAweDFmLCAweDM3LCAweGZmLCAweDIwLCAweGIxLAotMHg3YiwgMHg4NiwgMHhmZSwgMHg5NywgMHhmYiwgMHhkNywgMHhhZiwgMHg4ZCwKLTB4ZWQsIDB4NjksIDB4NjcsIDB4MjMsIDB4MGMsIDB4NWQsIDB4OWMsIDB4ZmQsCi0weGFmLCAweDEzLCAweGNlLCAweGZkLCAweGQwLCAweDA4LCAweGY0LCAweDQ1LAotMHhiMCwgMHg1OSwgMHhmNCwgMHhiZiwgMHhkMiwgMHgzNywgMHhlMCwgMHg3ZSwKLTB4YjEsIDB4Y2MsIDB4ZjcsIDB4M2UsIDB4ODIsIDB4YTcsIDB4ZmYsIDB4NDUsCi0weGY3LCAweDAzLCAweDE4LCAweGI0LCAweDA2LCAweGUyLCAweGVlLCAweDgyLAotMHhlZiwgMHg3ZiwgMHgzOSwgMHhmNCwgMHg5ZiwgMHhiMywgMHg5OCwgMHg4NywKLTB4NmIsIDB4NDcsIDB4NDQsIDB4ODAsIDB4YzIsIDB4ZmQsIDB4YWYsIDB4NDUsCi0weGU2LCAweDY5LCAweDY3LCAweDgzLCAweDdmLCAweDkwLCAweDkyLCAweDE1LAotMHhkNywgMHhjZSwgMHhkMCwgMHhmZiwgMHg5MiwgMHhjYywgMHhkMywgMHhjZSwKLTB4OTgsIDB4N2YsIDB4ZDAsIDB4OTcsIDB4NjgsIDB4OTksIDB4MmUsIDB4YzEsCi0weDhjLCAweGZjLCAweDgzLCAweDgzLCAweDMwLCAweGIwLCAweDkzLCAweGJjLAotMHhmZiwgMHg3NSwgMHg1ZCwgMHg0ZSwgMHg4ZCwgMHgzYywgMHg2NSwgMHhmNiwKLTB4NGYsIDB4NTMsIDB4NzksIDB4ZmIsIDB4NWYsIDB4MzQsIDB4MDgsIDB4MjUsCi0weDFiLCAweDBkLCAweDFhLCAweDk3LCAweGJhLCAweDljLCAweGYxLCAweDc5LAotMHhkZiwgMHhkZiwgMHhmZiwgMHhhMiwgMHg0ZiwgMHg4YiwgMHg0NiwgMHhmZSwKLTB4OGMsIDB4ZWIsIDB4OWQsIDB4ZWIsIDB4NjYsIDB4M2MsIDB4ZmYsIDB4NmMsCi0weDNhLCAweDU1LCAweDYxLCAweGJjLCAweGY4LCAweGY2LCAweDYxLCAweGNjLAotMHhkNSwgMHgwOCwgMHhkYiwgMHhlYiwgMHhlZiwgMHg3ZiwgMHhmOSwgMHhkZiwKLTB4ZjYsIDB4ZjIsIDB4YzcsIDB4ZDMsIDB4ZGIsIDB4ZmYsIDB4MjIsIDB4NmQsCi0weDgyLCAweDU1LCAweDJkLCAweGYyLCAweDM3LCAweGQwLCAweDg4LCAweGE0LAotMHhjNywgMHg5ZCwgMHhlNywgMHg5ZiwgMHgyZiwgMHhlNCwgMHhlZiwgMHg3ZiwKLTB4NjEsIDB4YTMsIDB4NDEsIDB4NGQsIDB4YzksIDB4MGYsIDB4NzcsIDB4Y2UsCi0weDU2LCAweGZmLCAweGY5LCAweGI4LCAweGYzLCAweDM0LCAweGE0LCAweDlhLAotMHhjNSwgMHgwMCwgMHgxMCwgMHhlMiwgMHhmYywgMHhmYywgMHhiMywgMHhiZCwKLTB4OGIsIDB4ZmIsIDB4NDQsIDB4ZGMsIDB4OTYsIDB4MzYsIDB4ZjQsIDB4MWMsCi0weDdmLCAweDQ3LCAweDI2LCAweDRmLCAweGZmLCAweDZiLCAweDFiLCAweDI0LAotMHg5YSwgMHhjMywgMHg4MSwgMHg3YSwgMHg0NSwgMHg3MCwgMHhmZiwgMHg2YiwKLTB4MzMsIDB4MjQsIDB4MWUsIDB4MGEsIDB4Y2IsIDB4NWMsIDB4YzcsIDB4YWMsCi0weGY4LCAweDY3LCAweDU1LCAweDRlLCAweDI2LCAweGVmLCAweDdmLCAweDNkLAotMHhhNywgMHgwNSwgMHg4MCwgMHg5MCwgMHhhMywgMHhmZiwgMHhjNSwgMHhmNCwKLTB4OWYsIDB4MzksIDB4NjMsIDB4YzUsIDB4OTMsIDB4NzgsIDB4YjcsIDB4MmMsCi0weDE5LCAweDk5LCAweDY1LCAweGZmLCAweDhiLCAweGZiLCAweDBhLCAweGQzLAotMHg0ZSwgMHhiZCwgMHg1YSwgMHgzNiwgMHgxMiwgMHgwMCwgMHg4YSwgMHgzNiwKLTB4ZmYsIDB4MzgsIDB4ZjQsIDB4MWYsIDB4NjIsIDB4ZGMsIDB4MTMsIDB4MGEsCi0weDIzLCAweDNlLCAweDNkLCAweDAzLCAweGZmLCAweDU4LCAweDRlLCAweGFkLAotMHgwZSwgMHhiZCwgMHhjYSwgMHhhNSwgMHhkNywgMHg5NSwgMHg5YSwgMHhlZiwKLTB4YmIsIDB4ZDUsIDB4MWEsIDB4MjAsIDB4MjQsIDB4OTAsIDB4YWYsIDB4ZDYsCi0weGM4LCAweDE1LCAweDQxLCAweGZhLCAweDRmLCAweDMxLCAweDg5LCAweGRlLAotMHg0ZiwgMHhjOCwgMHg4YiwgMHg2MCwgMHhmZSwgMHg4ZSwgMHhlNCwgMHgyOSwKLTB4MTcsIDB4ZmYsIDB4OTgsIDB4ZTcsIDB4OWYsIDB4ZjksIDB4ZjUsIDB4MGIsCi0weDI2LCAweGExLCAweGVlLCAweDdiLCAweDY1LCAweDcyLCAweGMxLCAweGYzLAotMHgzZiwgMHhiZSwgMHhmZSwgMHg5NywgMHhlMywgMHg3ZCwgMHhiMSwgMHg5MiwKLTB4M2MsIDB4ZmQsIDB4MmYsIDB4YWIsIDB4ZGIsIDB4YTUsIDB4YzEsIDB4ODQsCi0weDcyLCAweDNmLCAweDc5LCAweGRmLCAweDcwLCAweDU2LCAweGU3LCAweDdmLAotMHgzNCwgMHg2ZSwgMHhiMiwgMHhlMywgMHgzNSwgMHhhOCwgMHhlYSwgMHgxMiwKLTB4MmYsIDB4NzEsIDB4YTYsIDB4ZmUsIDB4YjMsIDB4MDYsIDB4ZjMsIDB4OGYsCi0weDYwLCAweDdlLCAweDU1LCAweDExLCAweGQ0LCAweGZmLCAweGUyLCAweGRhLAotMHhkMSwgMHgxMSwgMHhiZCwgMHg3NiwgMHg2ZiwgMHgzOCwgMHg0OCwgMHg3ZiwKLTB4YjYsIDB4Y2YsIDB4M2YsIDB4M2IsIDB4ZmEsIDB4NWYsIDB4MjMsIDB4ZDAsCi0weDI3LCAweDdlLCAweGViLCAweGU0LCAweDFkLCAweGQ5LCAweDM2LCAweDlmLAotMHhmZSwgMHgwMywgMHhlZSwgMHhmZSwgMHg5NywgMHgwNSwgMHgzOSwgMHhiYiwKLTB4ZTEsIDB4NmIsIDB4YjQsIDB4NGMsIDB4MmIsIDB4MGYsIDB4ZDIsIDB4N2YsCi0weDJlLCAweGQzLCAweGVkLCAweGM2LCAweGY0LCAweDlmLCAweDEyLCAweDVjLAotMHhjNCwgMHhlNSwgMHg2YiwgMHhiMCwgMHg3YywgMHhmMywgMHhjZiwgMHg5MywKLTB4NDEsIDB4ZmEsIDB4OGYsIDB4YWQsIDB4ZmYsIDB4OTMsIDB4ZjcsIDB4OTcsCi0weGJiLCAweDhjLCAweDYzLCAweDFiLCAweDUzLCAweGQwLCAweDgxLCAweDU2LAotMHhkNCwgMHgyZSwgMHg3YywgMHhjZiwgMHhkMCwgMHg3ZiwgMHhhYywgMHg4MywKLTB4ZDAsIDB4OWYsIDB4OWIsIDB4YWQsIDB4MzEsIDB4NGYsIDB4ZmYsIDB4MGIsCi0weDE5LCAweDRlLCAweDhkLCAweDcwLCAweDQ4LCAweGE5LCAweDkyLCAweGE0LAotMHg2NywgMHhmOCwgMHg0NywgMHg5YywgMHhlYiwgMHg2ZiwgMHhjYywgMHhmYSwKLTB4ZmIsIDB4NWYsIDB4Y2EsIDB4MTIsIDB4M2QsIDB4NGMsIDB4ZmMsIDB4ZWQsCi0weDA4LCAweGM1LCAweDIwLCAweDM2LCAweDYyLCAweDNjLCAweGFmLCAweGRkLAotMHhjZCwgMHhmYywgMHgxZCwgMHhjYywgMHhkNywgMHhmZiwgMHhkMiwgMHg0NSwKLTB4MDQsIDB4OGEsIDB4MjIsIDB4ZGUsIDB4Y2IsIDB4ZjksIDB4OWYsIDB4NzAsCi0weGRkLCAweGZkLCAweGFmLCAweGUzLCAweGU2LCAweGIxLCAweDhkLCAweDJjLAotMHg0ZSwgMHg3NiwgMHgwZCwgMHhmMywgMHhhNCwgMHhmZiwgMHg2NywgMHhlZiwKLTB4ZmEsIDB4NjMsIDB4YWIsIDB4YjgsIDB4YjIsIDB4ZjMsIDB4N2QsIDB4ZjMsCi0weGM2LCAweDMwLCAweGI2LCAweDlmLCAweGVkLCAweGIxLCAweDgxLCAweDk2LAotMHgyYywgMHgwNCwgMHgwNiwgMHgwMywgMHg1YiwgMHg5NywgMHhiYSwgMHhlMCwKLTB4YzUsIDB4ODgsIDB4YjAsIDB4MGUsIDB4MzEsIDB4ODMsIDB4NDksIDB4NTQsCi0weDE2LCAweGEyLCAweDgwLCAweDM2LCAweDZkLCAweGI1LCAweDJiLCAweDQ1LAotMHg5MSwgMHg0NSwgMHhhOCwgMHg4YSwgMHg1NCwgMHhiNiwgMHg2MiwgMHg3ZiwKLTB4ZmMsIDB4ZTEsIDB4MjUsIDB4YWIsIDB4Y2QsIDB4ODAsIDB4YzksIDB4YzYsCi0weDU5LCAweGQzLCAweGFlLCAweDkzLCAweGNkLCAweDZhLCAweDg5LCAweGIyLAotMHhiYiwgMHg3ZCwgMHgwNCwgMHg1NCwgMHg1MCwgMHg5NywgMHg1NiwgMHg0MCwKLTB4ZDIsIDB4MmMsIDB4MzQsIDB4MjgsIDB4NzksIDB4MTAsIDB4NGIsIDB4NzEsCi0weDEyLCAweDI3LCAweDU4LCAweGQ5LCAweDU0LCAweDliLCAweDFmLCAweDk0LAotMHg3ZCwgMHhkMSwgMHhkMiwgMHhjNCwgMHgwZCwgMHgwZSwgMHg3MSwgMHg0OCwKLTB4OTQsIDB4M2EsIDB4YzEsIDB4ZTAsIDB4Y2UsIDB4OWQsIDB4YjksIDB4M2YsCi0weGU3LCAweDllLCAweDdiLCAweDY3LCAweDFjLCAweDM2LCAweDliLCAweDQ4LAotMHg4ZCwgMHhmZiwgMHgzYSwgMHg3YSwgMHgxZSwgMHg5ZSwgMHhlNiwgMHgxZSwKLTB4YzYsIDB4ZjcsIDB4N2UsIDB4ZjMsIDB4OWQsIDB4ZWYsIDB4N2MsIDB4NjcsCi0weDA1LCAweGU5LCAweDZmLCAweDhhLCAweGQ2LCAweDdiLCAweDFlLCAweGE4LAotMHg3ZiwgMHhkMSwgMHgyNCwgMHhiYywgMHg4ZSwgMHhjNiwgMHg1NiwgMHhiNywKLTB4YTMsIDB4ZGEsIDB4YzQsIDB4NzksIDB4ZDQsIDB4YTYsIDB4ZTUsIDB4N2YsCi0weDJlLCAweGEyLCAweDcxLCAweDc0LCAweDNkLCAweGFhLCAweDE5LCAweGNmLAotMHg3ZiwgMHhjZiwgMHhjMCwgMHhmZiwgMHhlYywgMHhlMCwgMHhmOCwgMHgyNywKLTB4ZmMsIDB4NmIsIDB4MGEsIDB4OTYsIDB4N2IsIDB4MzUsIDB4MjcsIDB4NzYsCi0weDFhLCAweGY1LCAweDNmLCAweGZjLCAweDdkLCAweGJmLCAweDVjLCAweDNjLAotMHg1NiwgMHg1YSwgMHhkNCwgMHg1MiwgMHg3OSwgMHhkOCwgMHg1MiwgMHgxMSwKLTB4OTQsIDB4Y2EsIDB4ZmYsIDB4NTQsIDB4MmYsIDB4OWIsIDB4NTIsIDB4NDIsCi0weDg3LCAweGRkLCAweDA1LCAweGU4LCAweDJiLCAweGYxLCAweGZiLCAweDI5LAotMHg5NiwgMHhmZCwgMHhjNCwgMHgwNywgMHhkZiwgMHg0MCwgMHg1MiwgMHhmZiwKLTB4NTMsIDB4ZmYsIDB4YjgsIDB4NDMsIDB4NDAsIDB4ZGQsIDB4OTgsIDB4ZGYsCi0weDg2LCAweDdlLCAweDdlLCAweDM4LCAweGJmLCAweDU1LCAweGFkLCAweGVmLAotMHg3MCwgMHhmYywgMHg3MywgMHg0ZCwgMHhiNCwgMHhhOCwgMHg1MywgMHg3NSwKLTB4MTcsIDB4ZjMsIDB4NDMsIDB4NjgsIDB4ZGMsIDB4NWIsIDB4ODUsIDB4ZWEsCi0weGI2LCAweGM5LCAweGU3LCAweDdiLCAweGZiLCAweDEwLCAweGFjLCAweGZmLAotMHhmOSwgMHg1MCwgMHg4NCwgMHhjZCwgMHgxMSwgMHgyMiwgMHgzYSwgMHhjNiwKLTB4MTgsIDB4MjEsIDB4YTgsIDB4ZmUsIDB4NzUsIDB4OTgsIDB4YTMsIDB4OWQsCi0weDkxLCAweGEwLCAweDM3LCAweDFkLCAweGZmLCAweDJjLCAweDZkLCAweDE4LAotMHhjYywgMHhiMSwgMHhjNywgMHg4MCwgMHgyMCwgMHhlNCwgMHhkZCwgMHhlOSwKLTB4ZjgsIDB4MjcsIDB4N2UsIDB4OTEsIDB4NGYsIDB4MGEsIDB4Y2IsIDB4MjUsCi0weGZjLCAweDkzLCAweDUzLCAweDYxLCAweGYwLCAweDc5LCAweDIzLCAweGZlLAotMHhiOSwgMHg3YSwgMHhmZCwgMHg0ZiwgMHhiMiwgMHhkMSwgMHg0OSwgMHhjNiwKLTB4M2YsIDB4OTcsIDB4MTQsIDB4ZDgsIDB4OWMsIDB4YmMsIDB4N2YsIDB4MTAsCi0weGZmLCAweDA4LCAweGM3LCAweDc0LCAweGIyLCAweGZlLCAweDBlLCAweGQ3LAotMHhiZiwgMHg1YywgMHgxYSwgMHgzOCwgMHhmNywgMHgyNCwgMHgxOCwgMHgyMSwKLTB4MDUsIDB4ZmYsIDB4NDgsIDB4NjgsIDB4NjcsIDB4MDQsIDB4ZmQsIDB4MWEsCi0weDk3LCAweGJkLCAweDE4LCAweDIzLCAweDI0LCAweGUxLCAweDlmLCAweGYwLAotMHhmZCwgMHhlYiwgMHgxZCwgMHhkMiwgMHgxZCwgMHg0MCwgMHg2OSwgMHgxZiwKLTB4ZDIsIDB4ZjYsIDB4ODUsIDB4ZGYsIDB4NTAsIDB4MjYsIDB4ZGMsIDB4YTgsCi0weGI0LCAweDBhLCAweGUwLCAweDlmLCAweDYzLCAweGQ1LCAweDU4LCAweDA4LAotMHgxNywgMHg2NSwgMHhlMywgMHgwMiwgMHg3YSwgMHgwZSwgMHhjZCwgMHg5MSwKLTB4ZjIsIDB4MDMsIDB4ZTEsIDB4MWYsIDB4OTEsIDB4ZjYsIDB4MzEsIDB4ZTksCi0weDdmLCAweDk4LCAweGZlLCAweDc5LCAweDhlLCAweDlkLCAweDQ5LCAweGZmLAotMHgwMywgMHhkMSwgMHgzZSwgMHg5OSwgMHhmNCwgMHgzZiwgMHgwMiwgMHhlZCwKLTB4MzMsIDB4MjksIDB4ZmQsIDB4Y2YsIDB4YjQsIDB4ZjIsIDB4OTQsIDB4YWMsCi0weGY1LCAweGFmLCAweDQ5LCAweGYxLCAweDNmLCAweDdmLCAweDM4LCAweGZkLAotMHg0ZiwgMHgxNiwgMHhmYywgMHg4MywgMHhlNiwgMHhiMywgMHhkNSwgMHg5NSwKLTB4ZDAsIDB4OTgsIDB4OTUsIDB4OGEsIDB4N2YsIDB4MzgsIDB4ZmYsIDB4ZDMsCi0weDdhLCAweGFlLCAweDQ4LCAweGRhLCAweGI4LCAweGMyLCAweDRmLCAweGYyLAotMHgzYSwgMHhmYywgMHhmMywgMHgwMCwgMHhhMywgMHg3ZCwgMHhhNiwgMHg5ZCwKLTB4ZjMsIDB4MTUsIDB4ZmMsIDB4MDMsIDB4ZDUsIDB4YmYsIDB4NGMsIDB4ZmMsCi0weDBmLCAweDU4LCAweGZmLCAweGEyLCAweGMyLCAweGVmLCAweGZlLCAweGUwLAotMHhhYSwgMHhmNSwgMHgzZiwgMHg5MCwgMHhmZSwgMHhkOSwgMHhjMCwgMHhlNywKLTB4MjgsIDB4ZjgsIDB4ODcsIDB4ZjMsIDB4NDUsIDB4ZmYsIDB4OTQsIDB4YWUsCi0weGZmLCAweDk5LCAweDJjLCAweGZmLCAweDEzLCAweGQ3LCAweGJmLCAweDJjLAotMHg5NSwgMHhmNiwgMHhkMSwgMHhlOCwgMHg3ZiwgMHg4YywgMHg3YywgMHg4NSwKLTB4MGUsIDB4ZmYsIDB4ODgsIDB4MzIsIDB4MTgsIDB4NWYsIDB4ZTUsIDB4N2YsCi0weGU4LCAweGY3LCAweDYzLCAweGZjLCAweDEzLCAweGY1LCAweGJmLCAweDZmLAotMHhlZiwgMHhlNiwgMHhiNCwgMHg0ZiwgMHg1MSwgMHhjMSwgMHgzZiwgMHhhMCwKLTB4ZmUsIDB4YzcsIDB4ZDYsIDB4ZjIsIDB4MWIsIDB4YjIsIDB4ZmUsIDB4MDcsCi0weGUzLCAweDlmLCAweGJhLCAweGUzLCAweGRkLCAweDIxLCAweGVjLCAweGU5LAotMHg0YiwgMHgxYywgMHg2NCwgMHgwOCwgMHhkNiwgMHhmZiwgMHg2MCwgMHhkOSwKLTB4Y2YsIDB4NDcsIDB4NzQsIDB4ZmYsIDB4ZTksIDB4YjIsIDB4ZTIsIDB4MTcsCi0weDMxLCAweGI4LCAweGZlLCAweGM1LCAweGY0LCAweDNmLCAweGRmLCAweGIyLAotMHg4OCwgMHhmMCwgMHhmYiwgMHg1YiwgMHhjMCwgMHhmYiwgMHgxYSwgMHg4OCwKLTB4N2YsIDB4NTQsIDB4MTgsIDB4MDksIDB4ZTIsIDB4MWYsIDB4YzIsIDB4OTYsCi0weDhmLCAweGZlLCAweDFkLCAweGEzLCAweGNkLCAweDg5LCAweGQwLCAweDQ1LAotMHgxMCwgMHgzZSwgMHgwMSwgMHhmOCwgMHg2NywgMHgxNCwgMHg0OCwgMHg4YiwKLTB4YTEsIDB4ZmUsIDB4YjUsIDB4NDEsIDB4N2YsIDB4ZGUsIDB4ZDUsIDB4MjQsCi0weGYwLCAweDhmLCAweGYzLCAweGYxLCAweGY4LCAweDFmLCAweGUzLCAweGY1LAotMHgyYSwgMHhmZSwgMHg2OSwgMHhkOSwgMHgzOSwgMHg2OCwgMHhiNywgMHg0NiwKLTB4YzAsIDB4NDAsIDB4Y2EsIDB4OGYsIDB4OWIsIDB4YWMsIDB4N2YsIDB4ZDUsCi0weDg0LCAweDY4LCAweGM3LCAweDEzLCAweGQ3LCAweDdiLCAweGI0LCAweDNiLAotMHhjYSwgMHhjZiwgMHg0YiwgMHg4YywgMHgwOCwgMHhhYSwgMHg1MSwgMHhmYSwKLTB4YmYsIDB4MjQsIDB4YjUsIDB4MmEsIDB4MTYsIDB4NGEsIDB4YzUsIDB4ZmQsCi0weGVmLCAweDk0LCAweDExLCAweDAyLCAweGYwLCAweGNmLCAweGIzLCAweDM1LAotMHg2MywgMHhmOSwgMHg3NiwgMHhjYywgMHhmZiwgMHg3NCwgMHg0YSwgMHhmYywKLTB4MjEsIDB4Y2MsIDB4ZmYsIDB4M2MsIDB4MWUsIDB4MmMsIDB4MTksIDB4NzUsCi0weDQ4LCAweGQ5LCAweGFiLCAweDMzLCAweDUzLCAweGZmLCAweGZiLCAweDYyLAotMHg1NCwgMHg0OSwgMHg5ZSwgMHg4NywgMHhkNSwgMHhlMCwgMHhmMywgMHg5MCwKLTB4YzAsIDB4M2YsIDB4YjksIDB4YzUsIDB4MWQsIDB4M2QsIDB4YjgsIDB4ZGIsCi0weDJiLCAweGNjLCAweGRlLCAweDhkLCAweDRhLCAweDNlLCAweDRmLCAweDQyLAotMHhmYywgMHhjZiwgMHg0YiwgMHgzNSwgMHhhNCwgMHhlYywgMHhkNSwgMHgzOSwKLTB4MTUsIDB4N2EsIDB4MWUsIDB4MTQsIDB4ZmMsIDB4NTMsIDB4YWUsIDB4MWIsCi0weGFkLCAweDhlLCAweDYwLCAweDcwLCAweDI3LCAweGY4LCAweDYwLCAweDI4LAotMHhmOCwgMHhjNywgMHhiZCwgMHg5OSwgMHg3YywgMHhkYiwgMHg0ZCwgMHhhOSwKLTB4ZmEsIDB4NjcsIDB4ZmMsIDB4M2MsIDB4MzQsIDB4NzcsIDB4MzgsIDB4MmQsCi0weDI4LCAweGVhLCAweDc2LCAweGZmLCAweDBlLCAweGY4LCAweDNjLCAweDI4LAotMHhmOCwgMHhhNywgMHhiMywgMHg4OSwgMHg2NCwgMHg2MywgMHg2MywgMHhhYSwKLTB4ZmUsIDB4MTksIDB4ZTMsIDB4OWYsIDB4ZTYsIDB4MmQsIDB4NTQsIDB4ZmQsCi0weGIyLCAweDg1LCAweGMyLCAweDAwLCAweDVkLCAweGZmLCAweDdiLCAweDhjLAotMHg3ZiwgMHg0ZSwgMHgxNiwgMHgwOCwgMHhmZSwgMHhkOSwgMHhhMiwgMHhmNCwKLTB4YmYsIDB4MjcsIDB4ZjksIDB4OWYsIDB4YzgsIDB4ZmYsIDB4NjcsIDB4OTgsCi0weDY2LCAweGUzLCAweDQ2LCAweDFhLCAweGUwLCAweGZlLCAweGY3LCAweDExLAotMHgyZCwgMHhmZiwgMHhiMywgMHg5NiwgMHhjYSwgMHhhZSwgMHg3YywgMHg5YywKLTB4MTYsIDB4ZTcsIDB4NGUsIDB4ODMsIDB4ZmUsIDB4MzksIDB4ZGEsIDB4NGYsCi0weDNhLCAweDU0LCAweGRiLCAweDFmLCAweDEzLCAweGZlLCAweDY5LCAweDhlLAotMHhkNCwgMHgzZSwgMHhiOSwgMHg3MCwgMHg3NSwgMHg5ZCwgMHg2OSwgMHhmZCwKLTB4ZWYsIDB4NzgsIDB4ZmYsIDB4YjEsIDB4MzgsIDB4ZWQsIDB4ZTMsIDB4ODMsCi0weGY5LCAweDRjLCAweGUyLCAweDlmLCAweDU1LCAweDRjLCAweGVkLCAweGIzLAotMHgxMywgMHhlZSwgMHg3ZiwgMHhkNywgMHhlMiwgMHgxZiwgMHg5NywgMHgxZCwKLTB4NDMsIDB4NzMsIDB4MGQsIDB4ZjgsIDB4NjcsIDB4ZTUsIDB4ZTYsIDB4YzIsCi0weDI0LCAweGYxLCAweDBmLCAweDk1LCAweGYxLCAweDdjLCAweDM1LCAweDIzLAotMHhmZSwgMHg3MSwgMHhlMiwgMHg3ZSwgMHhmOSwgMHhhYywgMHhmOCwgMHg2NywKLTB4MWQsIDB4MjgsIDB4ZmIsIDB4ZDEsIDB4ZTMsIDB4MWYsIDB4YTcsIDB4MTAsCi0weGU0LCAweGY1LCAweDhkLCAweGZmLCAweDBhLCAweGZlLCAweDkxLCAweGQ1LAotMHgzYiwgMHhlNywgMHg5MiwgMHhjMiwgMHhlNiwgMHgzNSwgMHg0OSwgMHhmYywKLTB4YjMsIDB4NmEsIDB4NGIsIDB4MjEsIDB4YTYsIDB4N2QsIDB4NmUsIDB4ZjAsCi0weGExLCAweDQ0LCAweGRkLCAweDIxLCAweGUxLCAweDFmLCAweDI3LCAweDA0LAotMHgzOSwgMHg3ZCwgMHg0ZSwgMHg2MCwgMHg3OSwgMHgzOCwgMHg0MCwgMHg0ZSwKLTB4MjYsIDB4ZmMsIDB4YjMsIDB4ZDEsIDB4MjEsIDB4MzYsIDB4NDcsIDB4YWIsCi0weDJiLCAweDUzLCAweGY1LCAweGNmLCAweDM5LCAweDJjLCAweGZiLCAweDcxLAotMHgyOCwgMHg4ZCwgMHg1NiwgMHg5OSwgMHgwOSwgMHhmZiwgMHg2YywgMHg2YywKLTB4OGUsIDB4NjgsIDB4YmQsIDB4ZGMsIDB4Y2EsIDB4Y2UsIDB4M2YsIDB4Y2YsCi0weDg0LCAweDdmLCAweGMyLCAweDBmLCAweGFiLCAweGEzLCAweGRmLCAweGFlLAotMHg5ZCwgMHg5MywgMHgwNSwgMHhmZiwgMHhhYywgMHhjNCwgMHg2ZCwgMHg1ZiwKLTB4NjUsIDB4ZGEsIDB4MDgsIDB4OWYsIDB4OGEsIDB4N2YsIDB4MzAsIDB4NmQsCi0weGVlLCAweDQ1LCAweDY4LCAweDY3LCAweGM5LCAweDAzLCAweGViLCAweDMyLAotMHhlMSwgMHg5ZiwgMHgzMiwgMHhmZCwgMHg3YiwgMHhkOSwgMHgwNSwgMHhmMiwKLTB4YTUsIDB4MGEsIDB4ZmUsIDB4MTksIDB4YTIsIDB4N2YsIDB4YmYsIDB4YTgsCi0weDBhLCAweGFlLCAweDdmLCAweGQxLCAweGVmLCAweDhmLCAweGYxLCAweGNmLAotMHhjYSwgMHhjZSwgMHg2NiwgMHg4YSwgMHg3NiwgMHgwYSwgMHg2MCwgMHhmZCwKLTB4NGIsIDB4ODMsIDB4N2YsIDB4NzIsIDB4ZTEsIDB4ZWEsIDB4NDAsIDB4ZmMsCi0weDYzLCAweGQxLCAweGZjLCAweDEwLCAweGZkLCAweDczLCAweGI5LCAweDQwLAotMHhkZSwgMHhkNiwgMHgzZCwgMHhmMCwgMHhmYywgMHg1MiwgMHhmNCwgMHhjZiwKLTB4YTUsIDB4YTYsIDB4M2IsIDB4ZjEsIDB4ZGQsIDB4MDYsIDB4Y2QsIDB4MGUsCi0weDU5LCAweDQ4LCAweDczLCAweGFjLCAweGU4LCAweGQ2LCAweGUxLCAweDFmLAotMHg5ZiwgMHg1YywgMHhiNiwgMHg0NCwgMHg1ZSwgMHgyZiwgMHhhYywgMHg3ZiwKLTB4NmUsIDB4YzUsIDB4Y2YsIDB4MWIsIDB4ZDMsIDB4YmIsIDB4YTYsIDB4ZTEsCi0weDFmLCAweGJjLCAweGRlLCAweDk1LCAweGZkLCAweDU0LCAweDJkLCAweGU5LAotMHg4MSwgMHhmZCwgMHgzYiwgMHgxMiwgMHhmZSwgMHg3MSwgMHhjNCwgMHhkZiwKLTB4ZGEsIDB4OTksIDB4ZjAsIDB4NGYsIDB4YmIsIDB4NWYsIDB4MjAsIDB4ZGIsCi0weDM4LCAweDJhLCAweDQwLCAweGU3LCAweDlkLCAweGNhLCAweGZmLCAweDM0LAotMHgxMSwgMHgzZCwgMHg3MywgMHg2MywgMHg1NSwgMHhhMiwgMHgxMSwgMHhhOSwKLTB4MGQsIDB4YzAsIDB4M2YsIDB4YjksIDB4YzUsIDB4YTUsIDB4YjUsIDB4ZTQsCi0weDc0LCAweGYzLCAweDljLCAweDZjLCAweGY4LCAweGM3LCAweDY5LCAweDY5LAotMHg4OCwgMHhiMiwgMHhlMSwgMHg1NiwgMHhjNSwgMHhiMiwgMHgxZiwgMHhhYywKLTB4OTgsIDB4NmEsIDB4NjAsIDB4ZmQsIDB4NzEsIDB4MDksIDB4ZmMsIDB4ODMsCi0weGVmLCAweDNmLCAweDVhLCAweGRkLCAweGJjLCAweDc2LCAweDc3LCAweDM2LAotMHhmZSwgMHg1YSwgMHgyMiwgMHhmYiwgMHgxMSwgMHhmNCwgMHhjZiwgMHgxMiwKLTB4ZmUsIDB4YzEsIDB4ZGIsIDB4NGUsIDB4ZTQsIDB4NWYsIDB4ZTcsIDB4ZGYsCi0weDgwLCAweDQ0LCAweGQ5LCAweDBmLCAweDNlLCAweGJmLCAweGFlLCAweDRmLAotMHhlMCwgMHg5ZiwgMHgxOSwgMHhjYywgMHhmZiwgMHg4NywgMHgxYiwgMHgyOSwKLTB4YjgsIDB4YTQsIDB4MTEsIDB4MGMsIDB4YzQsIDB4M2YsIDB4N2YsIDB4NGYsCi0weDQxLCAweGNlLCAweGEwLCAweDQ1LCAweDY4LCAweDlmLCAweDkxLCAweGFjLAotMHhmNSwgMHhhZiwgMHg3ZCwgMHhmMSwgMHhlYSwgMHgwNiwgMHg4OSwgMHgwMiwKLTB4MGEsIDB4YzQsIDB4M2YsIDB4MTUsIDB4ODcsIDB4ZjQsIDB4YjQsIDB4MDksCi0weGM0LCAweGZmLCAweDU0LCAweGU4LCAweDYwLCAweGIwLCAweGY4LCAweDIwLAotMHgxOSwgMHhmOSwgMHg5ZiwgMHgzNSwgMHg0NiwgMHhmYywgMHg4MywgMHgwZSwKLTB4NzEsIDB4N2UsIDB4MjksIDB4NDksIDB4ZmIsIDB4ZTAsIDB4NjAsIDB4YjksCi0weGFlLCAweGZlLCAweDQ1LCAweGVlLCAweGJmLCAweDM2LCAweDA1LCAweGZmLAotMHhjYywgMHg2MCwgMHhmYywgMHhjZiwgMHgwOCwgMHhlOCwgMHhmZiwgMHhiMywKLTB4NDAsIDB4YzEsIDB4M2YsIDB4MDEsIDB4M2QsIDB4ZmQsIDB4MGIsIDB4OTgsCi0weDA2LCAweGE5LCAweDRhLCAweGViLCAweGZmLCAweGFhLCAweGE1LCAweGZhLAotMHhlNywgMHgxNywgMHhkMCwgMHhhZCwgMHhlOCwgMHg3YiwgMHg0YSwgMHgyMywKLTB4ZDgsIDB4MzIsIDB4YjAsIDB4ZmUsIDB4NTUsIDB4OGEsIDB4ZGIsIDB4YmUsCi0weDcyLCAweDc3LCAweDMxLCAweGRhLCAweDUwLCAweDBhLCAweDY0LCAweGZjLAotMHhmMywgMHgxZSwgMHhkNSwgMHhmZiwgMHg0MCwgMHhmOSwgMHgwMSwgMHhmMSwKLTB4Y2YsIDB4M2MsIDB4MTAsIDB4ZjYsIDB4MzQsIDB4NjgsIDB4ZjEsIDB4Y2YsCi0weDQyLCAweGI2LCAweGJhLCAweGQ3LCAweGQ5LCAweDMyLCAweDJiLCAweDBkLAotMHhmYywgMHg0ZiwgMHg5NCwgMHhiNCwgMHg0MSwgMHg4NywgMHgyNSwgMHgzNiwKLTB4MGQsIDB4ZmYsIDB4M2MsIDB4MjYsIDB4NTUsIDB4YmIsIDB4ZDIsIDB4ZjEsCi0weDRmLCAweGRiLCAweGM3LCAweGVhLCAweGZmLCAweDIyLCAweDQyLCAweDE3LAotMHgwYiwgMHgxYiwgMHgwMSwgMHhiMSwgMHhmMywgMHhhZSwgMHhkNiwgMHhjMCwKLTB4ZmYsIDB4YmMsIDB4YzIsIDB4OGQsIDB4ODAsIDB4YjQsIDB4ZjgsIDB4MjcsCi0weDE3LCAweDFlLCAweGQzLCAweDU2LCAweGY0LCAweDYxLCAweDNmLCAweGFlLAotMHg3ZiwgMHhiMSwgMHg0MiwgMHg1OCwgMHgxOCwgMHg3NCwgMHg0MCwgMHhmOCwKLTB4MjcsIDB4ZDIsIDB4M2YsIDB4NmYsIDB4ZjUsIDB4NjcsIDB4ZTEsIDB4ZDMsCi0weDlmLCAweGI1LCAweGJkLCAweGVmLCAweGQ1LCAweGUzLCAweDlmLCAweDgyLAotMHhkMCwgMHhmZiwgMHhjNSwgMHhmMCwgMHgwZiwgMHgxNiwgMHhlMiwgMHg0ZSwKLTB4NGQsIDB4YTksIDB4N2YsIDB4ZTUsIDB4Y2YsIDB4MTUsIDB4OTUsIDB4YzAsCi0weGE4LCAweDdmLCAweGZlLCAweDZmLCAweDNkLCAweDNlLCAweDg0LCAweGY5LAotMHg5ZiwgMHg2MCwgMHg4NSwgMHg5ZSwgMHhmZiwgMHg2MSwgMHg3YSwgMHgxMiwKLTB4YTgsIDB4ZmYsIDB4MGIsIDB4ZTgsIDB4NzcsIDB4MzMsIDB4ZjAsIDB4M2YsCi0weDhkLCAweDI2LCAweGZmLCAweDFmLCAweDg1LCAweGZmLCAweDQ5LCAweGQxLAotMHhmZiwgMHg1YywgMHg1NSwgMHhmZiwgMHg1NywgMHg1NiwgMHhmZSwgMHgyNywKLTB4MDIsIDB4MzksIDB4OWIsIDB4MzIsIDB4ZjMsIDB4M2YsIDB4ZTksIDB4ZmEsCi0weDQzLCAweGIwLCAweGZlLCAweGE1LCAweGMyLCAweDAwLCAweDBkLCAweGZlLAotMHhkMSwgMHhkMiwgMHgzZSwgMHgxMCwgMHhmZSwgMHhhOSwgMHhhMSwgMHhmOCwKLTB4NjcsIDB4Y2QsIDB4ZGIsIDB4N2QsIDB4MzQsIDB4ZjAsIDB4NTMsIDB4ZmIsCi0weGJmLCAweGEyLCAweDYzLCAweGNiLCAweDIzLCAweGMxLCAweDQ0LCAweDBhLAotMHhmZSwgMHg3OSwgMHg4NCwgMHhiNCwgMHg5ZCwgMHg0NiwgMHg3NywgMHg1YiwKLTB4MGIsIDB4ZTEsIDB4MzcsIDB4NGQsIDB4ZmYsIDB4OTcsIDB4MzYsIDB4ODAsCi0weGZiLCAweGJmLCAweDIyLCAweDdkLCAweDRiLCAweDE1LCAweDRmLCAweDYzLAotMHg0NywgMHg0YSwgMHhmZiwgMHg1NywgMHg2YywgMHg4NCwgMHhjOCwgMHhmOSwKLTB4OWYsIDB4YmYsIDB4MzAsIDB4ZjEsIDB4M2YsIDB4OTQsIDB4MWQsIDB4MDIsCi0weGYxLCAweDEyLCAweDU4LCAweGZmLCAweDFhLCAweDI3LCAweGE3LCAweGZmLAotMHgzNCwgMHhkYSwgMHgxMSwgMHg5NiwgMHg1MiwgMHhmZiwgMHg4YSwgMHg4ZCwKLTB4MTksIDB4YTMsIDB4MjAsIDB4NjksIDB4MDQsIDB4YTQsIDB4ZjIsIDB4M2YsCi0weGIzLCAweDg0LCAweGZlLCAweDJmLCAweGI1LCAweDVlLCAweDIzLCAweGUxLAotMHgxZiwgMHg5ZiwgMHg5MCwgMHgzYywgMHhjZiwgMHg4YiwgMHhjMCwgMHg0MCwKLTB4NTYsIDB4MDgsIDB4NGIsIDB4ZjgsIDB4YzcsIDB4MjUsIDB4OGIsIDB4YmEsCi0weDRjLCAweGFiLCAweDdiLCAweGUzLCAweDI4LCAweGQ5LCAweDI4LCAweDI3LAotMHhlMCwgMHg5ZiwgMHhhZiwgMHg0OCwgMHhiNiwgMHgzZiwgMHhkNywgMHg5NywKLTB4MzYsIDB4NDAsIDB4ZTcsIDB4M2IsIDB4NTAsIDB4ZmYsIDB4YzIsIDB4ZjgsCi0weGY5LCAweGI3LCAweDg5LCAweGM3LCAweDQ2LCAweGNiLCAweGZmLCAweDQ4LAotMHg2OCwgMHg2NywgMHg5MywgMHhmOCwgMHhjOSwgMHhjZSwgMHgwNCwgMHhmZSwKLTB4NjksIDB4YWEsIDB4MzAsIDB4ZmMsIDB4NTksIDB4ZjEsIDB4ZjUsIDB4ZWEsCi0weGY1LCAweGNmLCAweDFhLCAweGZjLCAweDQzLCAweGVmLCAweDA3LCAweGQ5LAotMHg2OSwgMHhmYSwgMHhlNCwgMHg5MywgMHgzOCwgMHgzZiwgMHhkYywgMHhkZiwKLTB4ZDIsIDB4ZTUsIDB4ZTcsIDB4YmIsIDB4YTcsIDB4YWQsIDB4N2YsIDB4MGQsCi0weDgzLCAweGZkLCAweDVmLCAweDE0LCAweGVkLCAweDE4LCAweGY5LCAweDFmLAotMHhlZSwgMHg3ZiwgMHg3OCwgMHhjMSwgMHgyMywgMHg4MSwgMHg1YSwgMHgwZiwKLTB4ZTUsIDB4ZmQsIDB4NWYsIDB4MjUsIDB4YzYsIDB4MDcsIDB4OGEsIDB4Y2YsCi0weDgzLCAweDgxLCAweGZmLCAweDQxLCAweGFhLCAweGZhLCAweGY3LCAweDc2LAotMHgxOSwgMHgxOCwgMHhjMCwgMHhmNSwgMHhhZiwgMHgxNSwgMHhmOSwgMHg0MSwKLTB4ZTcsIDB4YmQsIDB4ZGMsIDB4YjIsIDB4OTMsIDB4NjIsIDB4ZGIsIDB4M2IsCi0weGM0LCAweGZmLCAweGNjLCAweDhlLCAweGYzLCAweDMzLCAweDM3LCAweGMyLAotMHgzZiwgMHg5OCwgMHhmNiwgMHgzOSwgMHg0YywgMHg2OSwgMHgxZiwgMHhkMCwKLTB4ZmYsIDB4YzcsIDB4OTEsIDB4ZjEsIDB4NjcsIDB4OWIsIDB4OTgsIDB4OTYsCi0weGY5LCAweDgwLCAweGZlLCAweDc5LCAweDM4LCAweDA3LCAweGVjLCAweDI3LAotMHhiNiwgMHg1ZSwgMHhmZiwgMHg4YywgMHg3OCwgMHhmZCwgMHhjYiwgMHhkMCwKLTB4ZWYsIDB4MmYsIDB4ZWEsIDB4OWYsIDB4ZjksIDB4N2UsIDB4MWUsIDB4ZDUsCi0weDViLCAweDk5LCAweDlmLCAweDc2LCAweGE1LCAweDg0LCAweDdmLCAweGQ4LAotMHhmZCwgMHhkOCwgMHg1OCwgMHgxZCwgMHhjMSwgMHhkMCwgMHhjZSwgMHg3NiwKLTB4MTgsIDB4ZmYsIDB4N2MsIDB4YzgsIDB4ZjEsIDB4MGYsIDB4M2IsIDB4OGYsCi0weGZlLCAweDA0LCAweDlmLCAweDNlLCAweGRmLCAweDk3LCAweGNmLCAweDIzLAotMHgxYiwgMHhjMCwgMHgzZiwgMHhmNCwgMHhiYywgMHg5YiwgMHg4NiwgMHhmMSwKLTB4OGMsIDB4NDYsIDB4MjgsIDB4ZmIsIDB4MTQsIDB4YzcsIDB4M2YsIDB4ODgsCi0weGQ2LCAweGIzLCAweGYyLCAweDg2LCAweDQyLCAweDhjLCAweGRjLCAweGZmLAotMHhjNSwgMHhmYywgMHhmYSwgMHgwYywgMHhmNSwgMHgyZiwgMHhiYSwgMHg1ZSwKLTB4YTEsIDB4ZmUsIDB4YTUsIDB4Y2EsIDB4N2UsIDB4YTAsIDB4ZmUsIDB4YWYsCi0weDZiLCAweGM0LCAweGZlLCAweDc3LCAweDRiLCAweDczLCAweGZlLCAweDllLAotMHg2NSwgMHhmZCwgMHg1ZiwgMHhjNywgMHg2YSwgMHhiMiwgMHhlMCwgMHg4MSwKLTB4MzcsIDB4YjgsIDB4OWUsIDB4MDcsIDB4ZjMsIDB4M2YsIDB4NzYsIDB4OTQsCi0weDlmLCAweGY3LCAweDEzLCAweDk3LCAweDBkLCAweDMxLCAweGZmLCAweDFmLAotMHg4MSwgMHhmZiwgMHg5OSwgMHg2OSwgMHhhYywgMHg3ZiwgMHhiOSwgMHg3YSwKLTB4ZmYsIDB4NjcsIDB4YmEsIDB4YmEsIDB4NTksIDB4ZDAsIDB4N2EsIDB4MDUsCi0weGZkLCAweGYzLCAweDc0LCAweDk2LCAweGY2LCAweDkxLCAweDRjLCAweGZhLAotMHg2NywgMHhkYiwgMHhiYywgMHhkZSwgMHgxYywgMHhmNiwgMHhiNywgMHg5YywKLTB4MmYsIDB4ZTgsIDB4OWYsIDB4ZGQsIDB4ZmQsIDB4MGUsIDB4NjUsIDB4YzMsCi0weDNjLCAweGVkLCAweDNmLCAweDA0LCAweGZkLCAweDdmLCAweDMyLCAweGUxLAotMHgxZiwgMHg2NCwgMHgzMywgMHhmZCwgMHhjZiwgMHg1OCwgMHg0MCwgMHg2ZCwKLTB4MGYsIDB4ZjEsIDB4MjcsIDB4M2IsIDB4NDQsIDB4ZmMsIDB4MzMsIDB4ZTAsCi0weGQxLCAweGZkLCAweGMxLCAweGI5LCAweDliLCAweGZkLCAweGJkLCAweDljLAotMHgzNCwgMHhlMSwgMHgxZiwgMHhmYSwgMHgzMywgMHhhZiwgMHg1ZSwgMHhkNCwKLTB4ZmYsIDB4NjgsIDB4ZjAsIDB4NDAsIDB4YzcsIDB4MDAsIDB4ZmQsIDB4N2EsCi0weGRjLCAweGZmLCAweGU1LCAweDEyLCAweDkwLCAweGYzLCAweGEyLCAweDAyLAotMHg3YiwgMHg3OCwgMHhmZiwgMHg1NywgMHgyMywgMHhiZCwgMHhkZSwgMHhlMSwKLTB4NzgsIDB4YTAsIDB4YWMsIDB4ZGYsIDB4ZDgsIDB4NGYsIDB4ZmQsIDB4ODAsCi0weGU2LCAweGE3LCAweGQzLCAweDY2LCAweDIyLCAweGQ1LCAweGIzLCAweDkxLAotMHhlZCwgMHhjZiwgMHgzZCwgMHhhNCwgMHg2ZCwgMHhmOSwgMHg1YywgMHhkZCwKLTB4NzcsIDB4ZjMsIDB4NzMsIDB4YTgsIDB4MTEsIDB4ZDAsIDB4NTAsIDB4YzAsCi0weGYwLCAweDBmLCAweGZhLCAweDE5LCAweGFkLCAweGQ2LCAweDBkLCAweGY5LAotMHhiZiwgMHgxMSwgMHg2ZSwgMHgxYiwgMHgyYiwgMHgyYSwgMHg2NywgMHg1YiwKLTB4NTEsIDB4MjEsIDB4ZmUsIDB4OWIsIDB4ODIsIDB4ZmUsIDB4MzksIDB4ZTAsCi0weGY4LCAweDQ3LCAweGY1LCAweDZiLCAweDlkLCAweDRkLCAweDNmLCAweGUxLAotMHhmZCwgMHg1ZiwgMHhmZSwgMHg3NCwgMHgyNiwgMHhlYSwgMHg1MCwgMHhmZCwKLTB4NmMsIDB4OTksIDB4ZGYsIDB4OWQsIDB4ZDAsIDB4ZmYsIDB4NTUsIDB4MjEsCi0weGFjLCAweGI3LCAweDU3LCAweDVlLCAweDY2LCAweDc1LCAweDMzLCAweGVkLAotMHg4OCwgMHhlNywgMHhmZiwgMHhiZiwgMHg0NSwgMHg3NywgMHgyNCwgMHg0MywKLTB4N2UsIDB4ZjgsIDB4ZmQsIDB4MDgsIDB4ZjgsIDB4ZTcsIDB4M2QsIDB4YWQsCi0weDEwLCAweDVhLCAweDM4LCAweDFmLCAweGI5LCAweGZmLCAweGExLCAweGY1LAotMHg5NCwgMHg4MSwgMHg3ZiwgMHg2MCwgMHhmZiwgMHhiZiwgMHgwMSwgMHgzZiwKLTB4ZWYsIDB4Y2EsIDB4YTIsIDB4MTAsIDB4NWEsIDB4OGIsIDB4N2YsIDB4NTAsCi0weDgxLCAweGU3LCAweDQ3LCAweDk0LCAweDI1LCAweDBjLCAweDg4LCAweDg1LAotMHgzMCwgMHgwMSwgMHhmZiwgMHhjYywgMHgyNCwgMHg2YSwgMHg5ZiwgMHg3ZiwKLTB4NGYsIDB4YWMsIDB4ZjcsIDB4NTksIDB4MGQsIDB4ZmUsIDB4YTksIDB4NjEsCi0weDhiLCAweDFhLCAweDRkLCAweDJjLCAweGYzLCAweDA4LCAweDhjLCAweDdmLAotMHhjZSwgMHg1YSwgMHhlNCwgMHgyMSwgMHgxOSwgMHhjNywgMHg2YSwgMHhiMSwKLTB4NTIsIDB4Y2QsIDB4MTgsIDB4YzYsIDB4NGIsIDB4YzEsIDB4YWEsIDB4ZDcsCi0weDM1LCAweGZjLCAweGNmLCAweGNjLCAweDBiLCAweGQ0LCAweGU0LCAweGYwLAotMHg0YywgMHhlOSwgMHg5NywgMHhiYiwgMHg5NiwgMHg4YywgMHg1NiwgMHgxZiwKLTB4ZWIsIDB4OTgsIDB4ZjAsIDB4Y2QsIDB4ZmMsIDB4MGYsIDB4NWQsIDB4YTYsCi0weGI3LCAweDhmLCAweDA4LCAweGJmLCAweDg1LCAweGJmLCAweDJmLCAweDNiLAotMHg4OSwgMHg3ZiwgMHgyYSwgMHgwZSwgMHhmMSwgMHhiNCwgMHhlYiwgMHhmZCwKLTB4MjcsIDB4MzksIDB4ZmUsIDB4OTksIDB4YjEsIDB4ZDUsIDB4NjEsIDB4NjgsCi0weGYwLCAweDdjLCAweDVjLCAweDBkLCAweGM0LCAweDY5LCAweDk5LCAweDIzLAotMHgwMSwgMHg2MywgMHhmZSwgMHhmZiwgMHgyYiwgMHhmNCwgMHg3ZiwgMHg5ZCwKLTB4ODksIDB4ZmMsIDB4MzAsIDB4N2IsIDB4YTMsIDB4ZmMsIDB4NTgsIDB4MjYsCi0weGZjLCAweGMzLCAweGY0LCAweGU3LCAweGFmLCAweDkxLCAweDM2LCAweDI4LAotMHgzYiwgMHg5YSwgMHhmOCwgMHhhMCwgMHhhOSwgMHg3ZiwgMHgxNSwgMHg4MiwKLTB4NWUsIDB4NmEsIDB4ZmIsIDB4ZDMsIDB4NmIsIDB4MmYsIDB4MDksIDB4ODMsCi0weDA2LCAweGVlLCAweGZmLCAweDMzLCAweDFkLCAweGMwLCAweDNmLCAweDk4LAotMHg3ZiwgMHg4ZSwgMHhmOSwgMHg4YSwgMHgyYywgMHhmZSwgMHhjZiwgMHg5ZCwKLTB4ZWUsIDB4ZWQsIDB4OGEsIDB4ZmIsIDB4OWYsIDB4ODAsIDB4MDcsIDB4YWUsCi0weDUzLCAweGY1LCAweDNmLCAweDM3LCAweGEzLCAweGRmLCAweDA1LCAweGNiLAotMHg2MiwgMHhiNCwgMHg3MywgMHhhYiwgMHgyYiwgMHhjMCwgMHg5ZSwgMHhhOSwKLTB4MmQsIDB4ZjMsIDB4NWYsIDB4ODgsIDB4NDcsIDB4NjMsIDB4MjQsIDB4ZmQsCi0weDlmLCAweDcxLCAweGY2LCAweDI4LCAweDNlLCAweDRjLCAweDM2LCAweDgyLAotMHg1OSwgMHg0OSwgMHhmYywgMHgxMywgMHhiYiwgMHhiMywgMHg5NiwgMHg2YiwKLTB4NDgsIDB4ZmUsIDB4MDcsIDB4YzMsIDB4YjQsIDB4NWYsIDB4MDksIDB4Y2UsCi0weDQ3LCAweDJmLCAweDI2LCAweGYzLCAweDE5LCAweDIzLCAweDk0LCAweDljLAotMHg3ZiwgMHhiMSwgMHhhNCwgMHhlNCwgMHg2YywgMHhiMywgMHhjNiwgMHg4YiwKLTB4ZjcsIDB4ZDgsIDB4Y2QsIDB4YTcsIDB4YzIsIDB4ZTAsIDB4NzksIDB4NWYsCi0weGQ1LCAweGZmLCAweGQwLCAweGViLCAweGJkLCAweDA4LCAweGZmLCAweDJjLAotMHg4OSwgMHhkOCwgMHg5ZSwgMHhlMCwgMHgwMCwgMHhlMSwgMHhiYiwgMHhhMiwKLTB4ODAsIDB4ZjEsIDB4M2YsIDB4ZWIsIDB4ZTUsIDB4ZjksIDB4MTcsIDB4MDIsCi0weGRhLCAweGExLCAweDQ2LCAweGQwLCAweDgwLCAweGZlLCAweDg3LCAweDVlLAotMHgzZiwgMHg0YywgMHhlNiwgMHg1ZiwgMHg0NCwgMHg2MywgMHgyZiwgMHhkZSwKLTB4MGEsIDB4ODMsIDB4NWEsIDB4MjksIDB4NzgsIDB4NTUsIDB4ZTksIDB4ZmYsCi0weGNhLCAweGVkLCAweDhkLCAweGU2LCAweDVmLCAweGQ0LCAweDQ2LCAweDMyLAotMHg5OCwgMHgyNCwgMHhmZSwgMHgzMSwgMHhjZSwgMHhiZiwgMHhjMCwgMHhmOCwKLTB4NjcsIDB4ZTUsIDB4NmEsIDB4YTEsIDB4YmUsIDB4NjMsIDB4ZTEsIDB4NjAsCi0weDRlLCAweDE4LCAweGU0LCAweDQ0LCAweGZlLCAweGU3LCAweDZmLCAweDExLAotMHg5ZSwgMHhhNywgMHhiMCwgMHg5ZSwgMHhkMiwgMHgzOCwgMHgzNSwgMHhkMiwKLTB4ZjksIDB4ZmIsIDB4ZTUsIDB4MjQsIDB4ZmUsIDB4NTksIDB4NTEsIDB4YjEsCi0weGQwLCAweDY3LCAweGJmLCAweDdkLCAweDUwLCAweGU5LCAweDdmLCAweDdmLAotMHgzMCwgMHg5NywgMHhlOCwgMHg3ZiwgMHg2ZiwgMHg3MiwgMHg2ZCwgMHhjNiwKLTB4ZjYsIDB4MTQsIDB4ZWYsIDB4NDMsIDB4Y2QsIDB4ZWIsIDB4MmEsIDB4MjEsCi0weDNlLCAweGU0LCAweDI5LCAweDc2LCAweGZkLCAweGIxLCAweDAyLCAweDU2LAotMHgxNywgMHhlMywgMHg0NSwgMHhjZCwgMHgyZiwgMHgwNywgMHgyZiwgMHg5MywKLTB4NDIsIDB4MTgsIDB4ZjcsIDB4ZmYsIDB4ZTksIDB4NGEsIDB4ZTIsIDB4OWYsCi0weDNkLCAweDAyLCAweDFmLCAweDUyLCAweGZjLCAweDFmLCAweGQ5LCAweGVmLAotMHhmYSwgMHg1NiwgMHhmNiwgMHhhYiwgMHgzNywgMHgyNSwgMHhmZiwgMHhlNywKLTB4NTcsIDB4ZTgsIDB4ZjUsIDB4Y2YsIDB4MjcsIDB4MWIsIDB4YzEsIDB4NjgsCi0weDIwLCAweGY4LCAweGZmLCAweGNjLCAweGM0LCAweGI2LCAweGNmLCAweDZkLAotMHhiOSwgMHhjOCwgMHhmZiwgMHhlNywgMHgyMCwgMHg1YSwgMHhlYywgMHg2MiwKLTB4ZDgsIDB4ZTMsIDB4MmIsIDB4ZjgsIDB4NjcsIDB4OGEsIDB4ODgsIDB4N2YsCi0weDI4LCAweGNkLCAweDU1LCAweGRjLCAweDgxLCAweDlhLCAweDZmLCAweGFjLAotMHg3NiwgMHgxYiwgMHhmMSwgMHgzMiwgMHg5YiwgMHg3NCwgMHhmOCwgMHhjNywKLTB4ZGUsIDB4MWYsIDB4YTYsIDB4N2QsIDB4NTEsIDB4NGMsIDB4ZmIsIDB4NjgsCi0weGViLCAweDg5LCAweDZmLCAweDcwLCAweGZmLCAweDlmLCAweGJmLCAweGVhLAotMHgyNywgMHhmNywgMHgzZiwgMHhlZCwgMHg5YywgMHhmZCwgMHgwYywgMHhiNywKLTB4NzUsIDB4NmEsIDB4OTMsIDB4ZjEsIDB4OGYsIDB4YzcsIDB4ZjgsIDB4Y2YsCi0weDg4LCAweGZmLCAweDg5LCAweDdlLCAweGJiLCAweDk5LCAweGU4LCAweDg1LAotMHg3MiwgMHg5YiwgMHg5MywgMHhmOCwgMHg2NywgMHgxYSwgMHhlNywgMHgxYiwKLTB4MWQsIDB4YjcsIDB4ZDgsIDB4NDksIDB4NjksIDB4MzcsIDB4NmIsIDB4MjAsCi0weDBiLCAweGZmLCAweGQzLCAweGU2LCAweGIwLCAweDZlLCAweDc3LCAweDZjLAotMHhmYiwgMHhiMywgMHgxZSwgMHhlMiwgMHg3ZiwgMHhjNCwgMHhmZSwgMHhmNywKLTB4MGQsIDB4NDQsIDB4ZmYsIDB4MTMsIDB4MWUsIDB4NWIsIDB4ZGQsIDB4MzEsCi0weDVmLCAweGExLCAweDMyLCAweDQyLCAweDFjLCAweGZmLCAweDA0LCAweDBjLAotMHhmZiwgMHg0YywgMHgzOSwgMHhhMywgMHhmYywgMHhkOSwgMHgwMiwgMHhmOCwKLTB4YTcsIDB4YzcsIDB4YjksIDB4M2YsIDB4ZDYsIDB4ZmYsIDB4ODQsIDB4NjgsCi0weGM3LCAweDdmLCAweDdhLCAweGM3LCAweDBkLCAweGU1LCAweDBkLCAweDVkLAotMHg2YiwgMHhjYywgMHhmOCwgMHhhNywgMHgxOCwgMHhlZSwgMHg5NiwgMHhiMSwKLTB4N2EsIDB4NzAsIDB4ZjcsIDB4ZjUsIDB4NDgsIDB4ZDMsIDB4MDgsIDB4NzYsCi0weDZhLCAweDBhLCAweDVkLCAweGFmLCAweDZmLCAweDFmLCAweDQ1LCAweGE3LAotMHhmYiwgMHg2MiwgMHhmZiwgMHgxZiwgMHhmZiwgMHhlOSwgMHhiZSwgMHhkNiwKLTB4ZjgsIDB4NDUsIDB4M2UsIDB4YzIsIDB4M2YsIDB4NWQsIDB4OTEsIDB4MTAsCi0weDNhLCAweDBhLCAweDVjLCAweDk2LCAweGZmLCAweDgzLCAweDMzLCAweGZiLAotMHhkMCwgMHhhZiwgMHg4YiwgMHg5MSwgMHhmZiwgMHgwZiwgMHhmNiwgMHgyZiwKLTB4OWEsIDB4NTcsIDB4YWEsIDB4ZmUsIDB4MmUsIDB4YzUsIDB4M2YsIDB4ZGIsCi0weDIyLCAweDg1LCAweDQ2LCAweDE4LCAweDdjLCAweGIzLCAweDYzLCAweDkxLAotMHhjMCwgMHhmZiwgMHhmNCwgMHhjNSwgMHhiNiwgMHgzZiwgMHg5OCwgMHgyZiwKLTB4YmEsIDB4NDcsIDB4OTAsIDB4M2QsIDB4NGIsIDB4MGEsIDB4NDYsIDB4NGYsCi0weGYwLCAweDdmLCAweDBlLCAweDQ0LCAweGI3LCAweGQ1LCAweDI2LCAweDMxLAotMHg4ZCwgMHgxZCwgMHhlYywgMHhlOCwgMHg5ZiwgMHgyOSwgMHhmNCwgMHhiZiwKLTB4ZjcsIDB4YTAsIDB4ZTcsIDB4NzIsIDB4OTEsIDB4NjksIDB4Y2YsIDB4ZjgsCi0weDk0LCAweGU3LCAweGQwLCAweDQ3LCAweGEyLCAweDhkLCAweDMzLCAweDU2LAotMHg1NCwgMHhjNiwgMHg0MSwgMHg5NSwgMHhkMCwgMHgwZiwgMHgxYiwgMHhjMywKLTB4MDAsIDB4OTIsIDB4OTYsIDB4YmYsIDB4NGUsIDB4YzMsIDB4M2YsIDB4NDUsCi0weGY3LCAweGEyLCAweGUyLCAweDdlLCAweDczLCAweDI2LCAweGUyLCAweDdmLAotMHg2YSwgMHg0MCwgMHhmYywgMHhiMywgMHhkNywgMHhkZSwgMHhlNCwgMHhhYiwKLTB4YzcsIDB4NmUsIDB4ZjIsIDB4MTMsIDB4MDEsIDB4ZmYsIDB4ZGMsIDB4ZTQsCi0weDc5LCAweGVhLCAweGY1LCAweDA2LCAweGZlLCAweDY3LCAweDNhLCAweDQyLAotMHhmYiwgMHhkNiwgMHgzNiwgMHg5ZiwgMHg4YSwgMHhmMCwgMHgwMCwgMHgxNSwKLTB4MDYsIDB4ZTMsIDB4MjcsIDB4NzAsIDB4MjAsIDB4NGUsIDB4OTQsIDB4OWYsCi0weGMwLCAweDNmLCAweDQxLCAweGI4LCAweGZmLCAweDljLCAweGVmLCAweDhjLAotMHg5YSwgMHhiYywgMHhjNiwgMHg4MywgMHg1OCwgMHhmZiwgMHgxMywgMHgyZSwKLTB4MzMsIDB4M2MsIDB4ZjEsIDB4NGYsIDB4ODUsIDB4MjcsIDB4Y2UsIDB4ZGIsCi0weDZiLCAweDJmLCAweGY5LCAweDQ5LCAweGZjLCAweDUzLCAweGQxLCAweGM3LAotMHhmNSwgMHg1MSwgMHhiZiwgMHhiNSwgMHg1NiwgMHg5ZCwgMHgyNCwgMHg4MywKLTB4OWMsIDB4ZTIsIDB4ZjMsIDB4MmIsIDB4YzAsIDB4YTMsIDB4MzEsIDB4MjQsCi0weGZjLCAweDgzLCAweDUwLCAweGY4LCAweDFlLCAweGI4LCAweDM3LCAweGRjLAotMHgwZSwgMHhhMiwgMHgzZSwgMHgxMCwgMHg1ZCwgMHg4MCwgMHhjNCwgMHgxZiwKLTB4MWIsIDB4ODUsIDB4NzcsIDB4ZTcsIDB4ODcsIDB4M2IsIDB4YjAsIDB4MjEsCi0weDEwLCAweDdmLCAweDc2LCAweGExLCAweDc5LCAweGM4LCAweGYxLCAweGMzLAotMHgxZCwgMHhkMiwgMHgxMCwgMHg1YywgMHhjZCwgMHhmNywgMHgwNywgMHhlMSwKLTB4N2YsIDB4YjYsIDB4ODMsIDB4MmMsIDB4NjMsIDB4MjAsIDB4ZmMsIDB4OTgsCi0weDJmLCAweDhjLCAweDgzLCAweGFiLCAweGY5LCAweGZlLCAweGM5LCAweGZlLAotMHg3YywgMHhjNiwgMHhmMiwgMHhlZiwgMHhlMiwgMHg1OSwgMHg3ZSwgMHg4MywKLTB4ZTgsIDB4ZGIsIDB4NjgsIDB4NzYsIDB4YzksIDB4MTAsIDB4ZDgsIDB4MWYsCi0weGZiLCAweGZiLCAweDNmLCAweGUxLCAweGZjLCAweGRiLCAweDZlLCAweDkwLAotMHgyMSwgMHhlNywgMHgzOSwgMHg4MSwgMHg1ZiwgMHg5YSwgMHhkYywgMHhjZiwKLTB4Y2EsIDB4OTUsIDB4NTksIDB4YWUsIDB4YWEsIDB4YWIsIDB4ZmIsIDB4OTgsCi0weDVmLCAweGZmLCAweDA3LCAweGY4LCAweDU5LCAweDM1LCAweDMxLCAweDMxLAotMHg1MSwgMHg0YSwgMHgwOSwgMHhmZSwgMHgzZiwgMHg1ZiwgMHhmZiwgMHgxOSwKLTB4ZmIsIDB4N2IsIDB4ZmMsIDB4N2MsIDB4M2YsIDB4ZmMsIDB4N2MsIDB4M2YsCi0weGJjLCAweDhhLCAweGZjLCAweDdmLCAweGJlLCAweDFmLCAweGE2LCAweGZkLAotMHg3YywgMHhkNiwgMHhmNiwgMHg5ZiwgMHhjZiwgMHhkNiwgMHhmNSwgMHhhMiwKLTB4M2YsIDB4MzYsIDB4N2UsIDB4OWIsIDB4NTAsIDB4MDIsIDB4NmQsIDB4N2QsCi0weGIwLCAweDkxLCAweDA2LCAweDBkLCAweDQ2LCAweDdkLCAweDM4LCAweGRhLAotMHg1ZCwgMHhhZiwgMHhhMywgMHg5ZCwgMHgzYiwgMHhjMCwgMHhmYSwgMHhhMCwKLTB4YTEsIDB4MmMsIDB4MDgsIDB4ZjAsIDB4NjMsIDB4MzksIDB4YTEsIDB4N2UsCi0weDE3LCAweDE1LCAweDUyLCAweGFiLCAweGExLCAweGY3LCAweDA1LCAweDAxLAotMHhmZiwgMHgyNywgMHhmYywgMHgyMSwgMHg5NSwgMHg2MCwgMHhhZSwgMHhiNiwKLTB4M2UsIDB4YzgsIDB4MDIsIDB4YjUsIDB4M2YsIDB4MTEsIDB4YWEsIDB4MGYsCi0weGU2LCAweDEzLCAweDY1LCAweGMxLCAweDVlLCAweDlkLCAweDNmLCAweDY0LAotMHg4ZSwgMHhiMSwgMHhjNywgMHg1OSwgMHhlYSwgMHg4MywgMHhiNCwgMHgzZiwKLTB4NmUsIDB4Y2MsIDB4MjIsIDB4ODMsIDB4NjIsIDB4YjcsIDB4ZjMsIDB4YjEsCi0weGIwLCAweGE2LCAweGZhLCAweGUwLCAweGUxLCAweDc4LCAweDJjLCAweDA4LAotMHg2ZSwgMHg4YiwgMHhiYiwgMHgyNSwgMHhmNiwgMHg4NywgMHg1YywgMHgwMSwKLTB4ZDYsIDB4MDcsIDB4MDUsIDB4N2QsIDB4MTQsIDB4OGEsIDB4ZGMsIDB4OTAsCi0weDA0LCAweDU5LCAweDM4LCAweDUwLCAweDFmLCAweDZjLCAweGIyLCAweDBmLAotMHhhMSwgMHhkNywgMHhlMCwgMHhiMiwgMHhhOSwgMHg2MCwgMHg5NCwgMHgyNCwKLTB4ZjAsIDB4NjMsIDB4YWUsIDB4NWUsIDB4NmYsIDB4ZTAsIDB4Y2UsIDB4MzYsCi0weGQ1LCAweDA3LCAweGJmLCAweGE4LCAweGNhLCAweGEyLCAweDU4LCAweGE5LAotMHg1NCwgMHhhYywgMHgwZiwgMHhlZSwgMHhkNiwgMHhhNywgMHhiMSwgMHhhMCwKLTB4ZjIsIDB4NjMsIDB4ZDgsIDB4MWYsIDB4ZTksIDB4NTUsIDB4YjQsIDB4MWMsCi0weDJjLCAweDBiLCAweDcyLCAweGEzLCAweDI0LCAweGFkLCAweDNmLCAweDUyLAotMHgwNiwgMHg3ZSwgMHg0YywgMHhhOCwgMHhmZSwgMHg3YywgMHg5ZCwgMHhkMywKLTB4MjAsIDB4OGIsIDB4NTMsIDB4ZmIsIDB4ZTMsIDB4OTAsIDB4M2EsIDB4MTYsCi0weDRkLCAweGUwLCAweGM3LCAweGU4LCAweGY1LCAweDQyLCAweDdkLCAweDcwLAotMHg3MywgMHhjNCwgMHg4ZiwgMHhjOSwgMHg3YywgMHhjZSwgMHg4MywgMHg4YSwKLTB4M2YsIDB4NjQsIDB4YTYsIDB4ZmUsIDB4MzgsIDB4Y2UsIDB4OGYsIDB4NzUsCi0weDU1LCAweDBhLCAweGY1LCAweDQxLCAweDZhLCAweGNiLCAweGVjLCAweGU4LAotMHhlYiwgMHg4MywgMHgwOSwgMHg3ZiwgMHg0OCwgMHgxYSwgMHg1NCwgMHhjOCwKLTB4OWYsIDB4YmMsIDB4OTksIDB4ZDAsIDB4ODcsIDB4ODMsIDB4NjUsIDB4MzIsCi0weGMxLCAweDU4LCAweGMwLCAweGQ4LCAweDFmLCAweGQ3LCAweGE4LCAweDA0LAotMHg2MiwgMHg3ZCwgMHhiMCwgMHg2MiwgMHg5NywgMHg1OCwgMHgwZiwgMHg2ZCwKLTB4MDIsIDB4ZDYsIDB4NWIsIDB4MjUsIDB4Y2QsIDB4ODcsIDB4OWQsIDB4NmUsCi0weDI4LCAweGNiLCAweDAyLCAweGY1LCAweGMxLCAweDg3LCAweDQ1LCAweDdkLAotMHhkNCwgMHg3MSwgMHg0NiwgMHg4YiwgMHgyNSwgMHhmNSwgMHg1MSwgMHgwYiwKLTB4NTgsIDB4N2QsIDB4MTAsIDB4ZDQsIDB4NDcsIDB4MWQsIDB4NGYsIDB4MDQsCi0weDUyLCAweDdkLCAweDMwLCAweGUyLCAweDYzLCAweGU3LCAweDY0LCAweGFjLAotMHgwZiwgMHg3YSwgMHgxNSwgMHg4OSwgMHg2OSwgMHgyMCwgMHg3NSwgMHgyOSwKLTB4ZmMsIDB4MTgsIDB4OWUsIDB4YTcsIDB4NmMsIDB4NmQsIDB4NGQsIDB4ZDEsCi0weDZmLCAweDA4LCAweGY1LCAweDQxLCAweDI0LCAweGU5LCAweGEzLCAweGJlLAotMHg5MSwgMHg1YSwgMHgxZiwgMHhlYywgMHg4OSwgMHhmZCwgMHhiMSwgMHg2YiwKLTB4YTMsIDB4NjksIDB4YjAsIDB4MTksIDB4ZWEsIDB4ODMsIDB4YjMsIDB4MTMsCi0weDdhLCAweDBmLCAweDUwLCAweGZmLCAweDIzLCAweGYwLCAweDYzLCAweDE1LAotMHg0YywgMHhkZiwgMHhmYiwgMHg3ZCwgMHgzYywgMHgwZCwgMHg1NiwgMHgzYSwKLTB4YjYsIDB4ZDgsIDB4YWYsIDB4ODYsIDB4MTgsIDB4M2YsIDB4ZjYsIDB4MmYsCi0weGY1LCAweGJmLCAweGU4LCAweDIxLCAweDc3LCAweDdiLCAweDFiLCAweGZhLAotMHg2OSwgMHgzMSwgMHhmMiwgMHg0NywgMHg3YSwgMHgyMSwgMHgyMCwgMHg0NiwKLTB4NDksIDB4NjcsIDB4ZWYsIDB4OGUsIDB4YWQsIDB4OWYsIDB4M2EsIDB4MjQsCi0weDdmLCAweGM4LCAweDFkLCAweDdjLCAweDc1LCAweDFlLCAweGQzLCAweDgzLAotMHgyZCwgMHg5NCwgMHg4NCwgMHg2MSwgMHg0OSwgMHg3ZiwgMHhjOCwgMHgzNCwKLTB4M2QsIDB4OGMsIDB4NTAsIDB4MWYsIDB4OWMsIDB4N2UsIDB4ODgsIDB4Y2EsCi0weGEyLCAweGMyLCAweGQ1LCAweDQ1LCAweDY1LCAweDE3LCAweDMyLCAweDE2LAotMHhlNCwgMHg0NywgMHhjMiwgMHg3YSwgMHg5ZiwgMHgxNSwgMHhmOCwgMHgzMSwKLTB4ZTEsIDB4MTgsIDB4ZDIsIDB4ZWEsIDB4NTEsIDB4YzUsIDB4ZmEsIDB4YTAsCi0weGYxLCAweGJjLCAweDdiLCAweDUyLCAweGFkLCAweDBmLCAweDM2LCAweGViLAotMHhjNywgMHg1MiwgMHg0MCwgMHhmYywgMHg5OCwgMHhhOCwgMHgwNywgMHg5NiwKLTB4ODIsIDB4ZTcsIDB4ZjAsIDB4ODQsIDB4MzUsIDB4NTAsIDB4MWYsIDB4ZmUsCi0weDYzLCAweDVhLCAweDBmLCAweDdhLCAweGM0LCAweDYxLCAweDYzLCAweDQxLAotMHhjMiwgMHhiNCwgMHgyYywgMHgyMywgMHhmZSwgMHhkOCwgMHg0OSwgMHg3ZCwKLTB4NTQsIDB4YzAsIDB4NTcsIDB4NTcsIDB4NmMsIDB4ZmYsIDB4NGYsIDB4ZGMsCi0weDE2LCAweDE3LCAweDdlLCAweDMyLCAweDY3LCAweDg4LCAweDA0LCAweDhhLAotMHgzZSwgMHhmYywgMHg3MiwgMHhmZCwgMHg5MywgMHhlOCwgMHg4ZiwgMHhkOSwKLTB4ZjksIDB4MzUsIDB4NWMsIDB4NzcsIDB4YjEsIDB4M2IsIDB4MWEsIDB4MGIsCi0weGYyLCAweDZjLCAweGRkLCAweGM1LCAweDU4LCAweGYxLCAweDkyLCAweGE4LAotMHgwZiwgMHhkZSwgMHgyZCwgMHgzZSwgMHgyZCwgMHhkZSwgMHhhYSwgMHg3MywKLTB4YjUsIDB4NjYsIDB4N2QsIDB4NTQsIDB4YzksIDB4MTEsIDB4ZDAsIDB4Y2UsCi0weDkzLCAweDQzLCAweGNkLCAweDI1LCAweDA3LCAweGVhLCAweDhmLCAweDFiLAotMHg2NSwgMHhmYiwgMHhmMywgMHgwMCwgMHhkYSwgMHg2ZCwgMHhlMywgMHg3ZSwKLTB4MjUsIDB4ZjYsIDB4YmYsIDB4NWYsIDB4YTUsIDB4MDQsIDB4ZTEsIDB4YWYsCi0weDJlLCAweDcyLCAweDdkLCAweGI4LCAweDJkLCAweGU5LCAweGEzLCAweDlhLAotMHg0YiwgMHhhMCwgMHhkZSwgMHg5ZSwgMHhlYiwgMHhjMywgMHhlYiwgMHg5MywKLTB4ZmEsIDB4NzAsIDB4ZjAsIDB4ZWYsIDB4ZTUsIDB4MWMsIDB4YzMsIDB4NGIsCi0weGM1LCAweDdhLCAweGYxLCAweDc5LCAweGM4LCAweGU5LCAweGY0LCAweDUxLAotMHg2YywgMHhmZiwgMHgxOSwgMHg3MiwgMHgwZiwgMHhmMSwgMHg3ZSwgMHg4NCwKLTB4NzcsIDB4YzQsIDB4ZWYsIDB4YWYsIDB4ODUsIDB4ZjEsIDB4Y2YsIDB4NGQsCi0weGMyLCAweGYzLCAweGYwLCAweDY0LCAweGU0LCAweDZmLCAweGQ5LCAweGMxLAotMHhlZiwgMHhkZiwgMHgyNSwgMHhjMSwgMHgwNywgMHhlYywgMHg3OSwgMHgxMCwKLTB4ZjQsIDB4NTEsIDB4NmEsIDB4NWEsIDB4MDAsIDB4ZmMsIDB4MzMsIDB4ZWEsCi0weDcyLCAweDdkLCAweDc4LCAweDE0LCAweDM4LCAweGRiLCAweGE3LCAweGE4LAotMHg3YSwgMHhhMSwgMHg3MSwgMHg4ZSwgMHg3ZiwgMHg2NiwgMHhkNiwgMHhhMiwKLTB4ZjcsIDB4ZGMsIDB4OTUsIDB4YTUsIDB4ZDMsIDB4MmQsIDB4ZDMsIDB4NWUsCi0weDcwLCAweDdlLCAweDE3LCAweGEyLCAweDlkLCAweGRhLCAweDM2LCAweDZlLAotMHg4YiwgMHhmZCwgMHg0MiwgMHhmOCwgMHg2ZSwgMHg4NywgMHhmMSwgMHhjZiwKLTB4MWQsIDB4MmYsIDB4YjIsIDB4YzcsIDB4Y2QsIDB4OWYsIDB4N2UsIDB4MDIsCi0weDVkLCAweDYyLCAweGZkLCAweDk1LCAweDBlLCAweDRmLCAweDRiLCAweDdmLAotMHhkYywgMHhhMSwgMHhhOSwgMHhkNCwgMHgwNywgMHgwNSwgMHg3ZiwgMHg3MiwKLTB4YzAsIDB4YTgsIDB4ODEsIDB4MTQsIDB4NTIsIDB4MDUsIDB4N2QsIDB4YjgsCi0weDIzLCAweGUyLCAweDFmLCAweGRkLCAweDdjLCAweGM5LCAweDhiLCAweDBiLAotMHhlOCwgMHhmNywgMHg3YiwgMHg5MiwgMHgzZSwgMHhlYSwgMHgwNywgMHg5MCwKLTB4M2UsIDB4NmEsIDB4N2QsIDB4NTcsIDB4NDMsIDB4OTksIDB4ZTEsIDB4ZDUsCi0weDJkLCAweDc2LCAweDhjLCAweDdmLCAweGYyLCAweGM2LCAweGZkLCAweDg3LAotMHhlYiwgMHhjMywgMHhjYiwgMHhkMywgMHhiMSwgMHgzZSwgMHg3YywgMHgwZSwKLTB4MmMsIDB4OGIsIDB4MDIsIDB4ZmQsIDB4MjEsIDB4MDUsIDB4YmQsIDB4Y2EsCi0weDY4LCAweDE2LCAweDdkLCAweGY4LCAweDdlLCAweGEyLCAweGZmLCAweDg5LAotMHhjZSwgMHgzYiwgMHhjZCwgMHhmYywgMHg1MCwgMHgxMSwgMHhmZiwgMHgyYywKLTB4NzAsIDB4ODUsIDB4ZDMsIDB4YjYsIDB4MTEsIDB4M2UsIDB4N2YsIDB4ODUsCi0weGZhLCAweGUwLCAweDRkLCAweDBiLCAweGVjLCAweGY0LCAweGViLCAweGI5LAotMHgzZSwgMHhiYywgMHg2OSwgMHhiYSwgMHg4OCwgMHg3ZiwgMHg5YSwgMHg4YSwKLTB4MWEsIDB4N2QsIDB4MTQsIDB4ZGIsIDB4N2YsIDB4YmEsIDB4YWUsIDB4ZWQsCi0weDc0LCAweGU5LCAweDdjLCAweDU4LCAweDdiLCAweGNjLCAweDViLCAweDBhLAotMHhjZiwgMHgyNywgMHhiZCwgMHhjMCwgMHhmNiwgMHg5ZiwgMHg2MywgMHgzMywKLTB4ZjgsIDB4MTgsIDB4MTQsIDB4NWMsIDB4MzgsIDB4NWIsIDB4NDcsIDB4OTYsCi0weGI5LCAweDNjLCAweDU2LCAweDg4LCAweDkxLCAweDVmLCAweDdkLCAweGMwLAotMHhmNiwgMHg5ZiwgMHgxNSwgMHgwNCwgMHhmZiwgMHhkNCwgMHhlMCwgMHg3YSwKLTB4ZDksIDB4MmIsIDB4NjgsIDB4ZTksIDB4YzYsIDB4NWEsIDB4NTAsIDB4NGYsCi0weGM1LCAweGY1LCAweDUxLCAweDRlLCAweDMxLCAweGY2LCAweDg3LCAweDhjLAotMHhmMSwgMHg0ZiwgMHgyMywgMHg3MiwgMHg4MiwgMHgwNiwgMHgwNSwgMHgxMSwKLTB4MzUsIDB4OWMsIDB4ZTUsIDB4ZjgsIDB4YzcsIDB4MTYsIDB4ZjUsIDB4NTEsCi0weGJlLCAweGU3LCAweGZmLCAweDUwLCAweDVhLCAweGVmLCAweDdkLCAweGM5LAotMHhmYSwgMHhlMCwgMHgxZSwgMHg3YiwgMHhiZiwgMHg1MCwgMHgxNiwgMHhjYywKLTB4M2QsIDB4YWMsIDB4ZjEsIDB4MWIsIDB4MTcsIDB4ZjQsIDB4NTEsIDB4ZmIsCi0weDM5LCAweDdhLCAweGY5LCAweDMwLCAweGQ3LCAweGUwLCAweGZmLCAweDAyLAotMHhiOCwgMHhmZiwgMHgxYywgMHg5ZiwgMHgwZiwgMHgzYiwgMHgyMCwgMHhkNiwKLTB4OGIsIDB4ZGYsIDB4YjUsIDB4NzEsIDB4ZjUsIDB4NTAsIDB4YmQsIDB4N2UsCi0weGNkLCAweDQ3LCAweGNjLCAweDFmLCAweGRiLCAweDQ5LCAweGZhLCAweDAzLAotMHhhNCwgMHhjYywgMHg4NywgMHg3NSwgMHhiOCwgMHgzZSwgMHg4YSwgMHhiOSwKLTB4NjEsIDB4NTMsIDB4ZDgsIDB4ZDMsIDB4MDgsIDB4ZTAsIDB4MWYsIDB4YzcsCi0weDk2LCAweGFhLCAweDgxLCAweDhiLCAweDc1LCAweGY4LCAweDg3LCAweGZlLAotMHhmZiwgMHgyMiwgMHg1NywgMHhmOCwgMHg2YiwgMHhiZCwgMHg0ZSwgMHg5YSwKLTB4YWYsIDB4MmEsIDB4ZWEsIDB4YzMsIDB4OTksIDB4M2YsIDB4YjYsIDB4YjMsCi0weGU3LCAweDc2LCAweDA5LCAweGVkLCAweGJjLCAweDU1LCAweDQ3LCAweGViLAotMHg4MywgMHg1MywgMHhhNSwgMHhmOSwgMHg2OCwgMHhmNCwgMHhlYiwgMHgwNSwKLTB4N2QsIDB4OTQsIDB4YTEsIDB4ZmYsIDB4NWQsIDB4ZDAsIDB4NDcsIDB4ZWQsCi0weDdhLCAweDYyLCAweDIzLCAweGM3LCAweDNmLCAweDYxLCAweDUwLCAweGUwLAotMHhjNywgMHhkNiwgMHhiNCwgMHgyYiwgMHgwZSwgMHgzZCwgMHhiZiwgMHhiOCwKLTB4M2UsIDB4Y2EsIDB4ZDksIDB4OGQsIDB4MzcsIDB4MGQsIDB4N2EsIDB4YjcsCi0weDRiLCAweDRhLCAweDU1LCAweDVmLCAweGUyLCAweGZkLCAweDcxLCAweDgzLAotMHhiMSwgMHg1MCwgMHg1MywgMHhkNCwgMHg0NywgMHgyMSwgMHhmNCwgMHgzMywKLTB4ZmIsIDB4M2EsIDB4NzEsIDB4NzUsIDB4NjAsIDB4NjMsIDB4NmYsIDB4M2YsCi0weGQ3LCAweDQ3LCAweGQ5LCAweGUyLCAweGZiLCAweDk3LCAweGFkLCAweGQxLAotMHg4NywgMHg4YiwgMHhmYSwgMHhhOCwgMHg3MCwgMHg1MSwgMHg3MSwgMHg3ZCwKLTB4NzAsIDB4YzQsIDB4N2UsIDB4M2MsIDB4ZGMsIDB4NWQsIDB4YzEsIDB4ZjksCi0weDBlLCAweGFmLCAweGYyLCAweGU3LCAweGFkLCAweDVlLCAweGM5LCAweGNmLAotMHhiNCwgMHgxMSwgMHg1NywgMHgzOSwgMHhlZiwgMHhkOCwgMHhmZSwgMHgzMywKLTB4Y2YsIDB4M2QsIDB4ZTEsIDB4YjAsIDB4ZDMsIDB4MGQsIDB4ZWIsIDB4YTMsCi0weGFhLCAweGExLCAweGYzLCAweDZlLCAweDk0LCAweGRkLCAweGNmLCAweGRlLAotMHg0YywgMHhmZSwgMHg5MCwgMHhlNywgMHhkOCwgMHhmZSwgMHgxMywgMHg1NCwKLTB4MjgsIDB4ZDcsIDB4NjMsIDB4N2QsIDB4NTQsIDB4NGUsIDB4NWIsIDB4MWYsCi0weDc0LCAweDBiLCAweGJlLCAweDM4LCAweDE2LCAweGE0LCAweDE0LCAweDBkLAotMHhhNiwgMHgyMSwgMHhmMywgMHhiYiwgMHg5OSwgMHg0MiwgMHg1OCwgMHhjMCwKLTB4M2YsIDB4N2IsIDB4ODgsIDB4M2YsIDB4YzAsIDB4ZTEsIDB4ZmMsIDB4ZGIsCi0weGYxLCAweGZiLCAweGY4LCAweDkxLCAweDU4LCAweGZmLCAweGQzLCAweDRmLAotMHgzZSwgMHg4OSwgMHhmMSwgMHgxZSwgMHhjNywgMHgzZiwgMHgzMywgMHg3MCwKLTB4MTksIDB4MzEsIDB4NWUsIDB4NWQsIDB4MzEsIDB4YjYsIDB4MDUsIDB4YzgsCi0weGNiLCAweGZlLCAweGQ4LCAweDQ5LCAweDdkLCAweDE0LCAweDAxLCAweGM5LAotMHgyZiwgMHhjYiwgMHhiNiwgMHhlYSwgMHg1YSwgMHhmYywgMHhiMywgMHg4NywKLTB4ODAsIDB4OWMsIDB4ZmIsIDB4YWQsIDB4N2YsIDB4NTMsIDB4NjAsIDB4MGYsCi0weGMwLCAweGZmLCAweDg0LCAweGY4LCAweDI3LCAweDVlLCAweDU0LCAweDcxLAotMHhhNywgMHg4MSwgMHhkZiwgMHhlMCwgMHhmYywgMHg0ZiwgMHhkOSwgMHgzZSwKLTB4MTQsIDB4ODMsIDB4ODQsIDB4YTIsIDB4NjUsIDB4MTAsIDB4OGEsIDB4NzMsCi0weGZlLCAweDY3LCAweGY1LCAweDBjLCAweGEyLCAweDU2LCAweDdhLCAweDAwLAotMHhiMCwgMHg2NSwgMHhlNiwgMHhmZCwgMHg3MSwgMHhhYSwgMHgzZiwgMHhmNiwKLTB4OGIsIDB4MzksIDB4ODMsIDB4M2YsIDB4MTIsIDB4YzcsIDB4M2YsIDB4ZmQsCi0weDk0LCAweGZmLCAweDc5LCAweGI0LCAweGRhLCAweGYwLCAweDg3LCAweDA5LAotMHhmOCwgMHg2MywgMHhiNywgMHgwMCwgMHhiNiwgMHg1YSwgMHg0MCwgMHg3ZiwKLTB4NWMsIDB4ODksIDB4ZWQsIDB4M2YsIDB4NTUsIDB4OTksIDB4ZjgsIDB4OWYsCi0weDUxLCAweGY3LCAweDc2LCAweDg1LCAweGZkLCAweDMwLCAweGY3LCAweGM3LAotMHhkZCwgMHgxMiwgMHg5MywgMHgzYywgMHgyNywgMHhmOCwgMHg1OCwgMHg1OCwKLTB4YTMsIDB4M2UsIDB4N2MsIDB4YzYsIDB4MDksIDB4ZmYsIDB4NDksIDB4MmUsCi0weDhiLCAweDEyLCAweGZiLCAweDM1LCAweDM0LCAweGZjLCAweDBmLCAweDcxLAotMHhhMywgMHhlYSwgMHgzMywgMHhlNSwgMHg1ZiwgMHhlMCwgMHg3ZiwgMHg2NiwKLTB4MTIsIDB4ZmMsIDB4YjMsIDB4MTEsIDB4YjAsIDB4YzUsIDB4ZDYsIDB4ZTgsCi0weGMzLCAweDBmLCAweDA0LCAweDVjLCAweDA2LCAweDlmLCAweGE2LCAweDBmLAotMHhhNywgMHhmYSwgMHhhOCwgMHhlYSwgMHgxMywgMHgzZiwgMHgzNCwgMHgzNCwKLTB4ZmUsIDB4ODgsIDB4ZmMsIDB4NGYsIDB4YWMsIDB4ODYsIDB4YWEsIDB4N2IsCi0weDJiLCAweGJmLCAweDg1LCAweDBiLCAweGM1LCAweDcxLCAweDMwLCAweDE3LAotMHhkNiwgMHg4NywgMHhlNywgMHg4YSwgMHg5NCwgMHhmNiwgMHgzMSwgMHgwOCwKLTB4NzcsIDB4MjUsIDB4ZmMsIDB4ZTMsIDB4ZTIsIDB4YjYsIDB4YjgsIDB4MGQsCi0weGY3LCAweGU1LCAweDE3LCAweDI0LCAweDhjLCAweGEwLCAweDM1LCAweGZhLAotMHg3MCwgMHhjMiwgMHhmZiwgMHhlYywgMHhjOSwgMHg2NywgMHhmMiwgMHhjNywKLTB4NWUsIDB4NTEsIDB4MjEsIDB4ZjAsIDB4M2YsIDB4MTksIDB4ZmMsIDB4OTEsCi0weDM4LCAweGZlLCAweDk5LCAweDkyLCAweGM5LCAweDFmLCAweGJiLCAweGFiLAotMHg4NiwgMHhjYywgMHgwNywgMHg0MSwgMHhkNSwgMHg5YywgMHgwOCwgMHhhYSwKLTB4ZDQsIDB4ZmIsIDB4NjMsIDB4MzMsIDB4N2QsIDB4ZDQsIDB4OGIsIDB4ZGQsCi0weDI2LCAweDdkLCAweGI4LCAweGNhLCAweGZmLCAweDQwLCAweGI2LCAweDkwLAotMHgxMCwgMHhmZiwgMHgzMywgMHg5MywgMHg4MCwgMHg5YywgMHgyYSwgMHg0YiwKLTB4MWQsIDB4MGIsIDB4MDIsIDB4ZjEsIDB4M2YsIDB4NjgsIDB4MTcsIDB4ZDEsCi0weDgzLCAweGRkLCAweDZmLCAweDNiLCAweGRhLCAweGY1LCAweGNhLCAweGY4LAotMHgyNywgMHg0YSwgMHg1YSwgMHhiZCwgMHhjOSwgMHg2ZiwgMHg1YywgMHhmMiwKLTB4YzcsIDB4OGUsIDB4NmQsIDB4OWQsIDB4ZWUsIDB4MDcsIDB4YzYsIDB4ODIsCi0weDAwLCAweGZkLCAweDcxLCAweDU4LCAweDFmLCAweDc1LCAweDVjLCAweDc3LAotMHgxOSwgMHhhMCwgMHgwZiwgMHg3NywgMHhhOCwgMHgzZSwgMHg3YywgMHg1NywKLTB4ZGUsIDB4MjMsIDB4NDIsIDB4YjUsIDB4OGMsIDB4ZmQsIDB4NzEsIDB4NTYsCi0weDFjLCAweGY0LCAweGE2LCAweGY0LCAweGM3LCAweDcxLCAweGZjLCAweDYzLAotMHhkOCwgMHg3ZiwgMHhiOCwgMHgzZiwgMHg3NiwgMHhlMCwgMHhkZSwgMHg5NiwKLTB4ZTEsIDB4ZWYsIDB4OTcsIDB4ZmIsIDB4NjMsIDB4ZjcsIDB4ZjQsIDB4ZGMsCi0weDllLCAweDhiLCAweDQwLCAweGNlLCAweGQ3LCAweGFiLCAweDU1LCAweDViLAotMHg0OCwgMHg2OCwgMHgzZSwgMHgyYywgMHhjNSwgMHgzZiwgMHg4ZiwgMHgxOSwKLTB4ZjEsIDB4MGYsIDB4ZWYsIDB4OGYsIDB4ZTMsIDB4ZmEsIDB4ZjAsIDB4ZjYsCi0weGI4LCAweGJmLCAweDI5LCAweGQ2LCAweDQ3LCAweGFkLCAweDNhLCAweDQ3LAotMHg4MywgMHhiMiwgMHgzYywgMHgxZiwgMHg5NiwgMHhlZSwgMHgzZiwgMHgyZSwKLTB4YmQsIDB4ZmYsIDB4M2IsIDB4ZTMsIDB4ZGIsIDB4MmUsIDB4ZDMsIDB4YTAsCi0weDI0LCAweGY3LCAweGM3LCAweDA1LCAweGU0LCAweGZhLCAweGFmLCAweDU1LAotMHhjOSwgMHhlYiwgMHgxZCwgMHhkMCwgMHhmNCwgMHhjNywgMHg3MSwgMHhmYywKLTB4MjMsIDB4ZTQsIDB4YjMsIDB4MzUsIDB4OTEsIDB4NGYsIDB4YjEsIDB4M2YsCi0weDhlLCAweDJkLCAweDhhLCAweGVmLCAweDlmLCAweDA1LCAweGNlLCAweDA4LAotMHhhMSwgMHg2OCwgMHgwMiwgMHg5YSwgMHhlMCwgMHg4ZiwgMHg5ZCwgMHgyMywKLTB4ZjksIDB4ZTksIDB4NGIsIDB4YTYsIDB4ZTUsIDB4YjQsIDB4YzQsIDB4ZmYsCi0weGQwLCAweGZiLCAweDY3LCAweGY4LCAweDY3LCAweDA4LCAweDE4LCAweDBiLAotMHgwMiwgMHhlYSwgMHhhMywgMHgwOCwgMHg5ZSwgMHg2OSwgMHg2MSwgMHg2MywKLTB4ZDksIDB4MWIsIDB4ZDUsIDB4ZjMsIDB4MGIsIDB4ZjQsIDB4NDcsIDB4MzIsCi0weDljLCAweDc3LCAweGEyLCAweDNlLCAweDhhLCAweGE0LCAweGU1LCAweDAxLAotMHg5YSwgMHg5ZiwgMHhhNSwgMHhiMSwgMHgyZCwgMHhiNiwgMHg0ZSwgMHgxZiwKLTB4ZmUsIDB4MGYsIDB4NWIsIDB4ZmQsIDB4NjgsIDB4NTEsIDB4N2YsIDB4NDksCi0weGYzLCAweDczLCAweDhjLCAweGJjLCAweDY4LCAweDhiLCAweDQ2LCAweDQwLAotMHgyNSwgMHgxMSwgMHhmZiwgMHhmNCwgMHhjOSwgMHhhYiwgMHg3YiwgMHgzZiwKLTB4NGYsIDB4MjYsIDB4YTYsIDB4YmQsIDB4MGIsIDB4ZTMsIDB4MWYsIDB4MTUsCi0weGVkLCAweDA4LCAweDQxLCAweGVjLCAweDBmLCAweDc5LCAweDg3LCAweGFlLAotMHgzZiwgMHhhZSwgMHgyOSwgMHgxNSwgMHhmZiwgMHg4OCwgMHhmZSwgMHgwMCwKLTB4ZDMsIDB4YzksIDB4ZjQsIDB4NWIsIDB4ZmEsIDB4NDksIDB4NDMsIDB4YjQsCi0weGYwLCAweDc4LCAweGJkLCAweGVjLCAweDdlLCAweGVhLCAweGY1LCAweGIwLAotMHhhNywgMHgwMSwgMHhlMCwgMHg3ZiwgMHgxMCwgMHgzMCwgMHgxZiwgMHgwNCwKLTB4YTgsIDB4N2YsIDB4NjUsIDB4ZjAsIDB4ODcsIDB4OWMsIDB4NmIsIDB4ZjIsCi0weDQ3LCAweDJhLCAweDExLCAweGZkLCAweGY5LCAweDUyLCAweGY5LCAweGZiLAotMHhkZCwgMHgzYiwgMHg1NSwgMHg3ZCwgMHhiOCwgMHhmMCwgMHgxOCwgMHg5YywKLTB4OGYsIDB4YTcsIDB4OTksIDB4YTQsIDB4ZmIsIDB4MjMsIDB4OTEsIDB4YjQsCi0weGVjLCAweDhiLCAweGRkLCAweGUzLCAweDU5LCAweGM2LCAweDc2LCAweGFiLAotMHhmOCwgMHg0NywgMHg5YSwgMHg4ZiwgMHg3NiwgMHg0MCwgMHg2OCwgMHg5YywKLTB4ZTcsIDB4YzEsIDB4MmMsIDB4MDksIDB4ZmYsIDB4YWMsIDB4MmQsIDB4MzgsCi0weDBjLCAweGVkLCAweDljLCAweDQ3LCAweDJkLCAweDQ5LCAweGZjLCAweDczLAotMHgxOCwgMHhmNiwgMHg0NywgMHhhMiwgMHg2OSwgMHg3OSwgMHhiYywgMHg0NCwKLTB4ZGEsIDB4ZTIsIDB4ODgsIDB4ZTIsIDB4NGUsIDB4ZjUsIDB4MDcsIDB4OTgsCi0weDcxLCAweDQxLCAweDFjLCAweDZiLCAweGI4LCAweGJjLCAweGI0LCAweDQxLAotMHg2OCwgMHg4YiwgMHg4MywgMHhmYywgMHgwMSwgMHhhZSwgMHgzOSwgMHhjMSwKLTB4ZGIsIDB4NGMsIDB4N2UsIDB4YWEsIDB4MzEsIDB4MGEsIDB4OTAsIDB4ZmMsCi0weDAxLCAweDllLCAweDEwLCAweDY1LCAweGYwLCAweGQwLCAweDdhLCAweGIxLAotMHgzZiwgMHgwMCwgMHhlMywgMHg3ZiwgMHhkNiwgMHhkYSwgMHg4MiwgMHgxYSwKLTB4ZmMsIDB4YTEsIDB4NDQsIDB4M2UsIDB4MzUsIDB4ZmUsIDB4MDAsIDB4ODIsCi0weDFiLCAweDI0LCAweDVjLCAweDA4LCAweGZiLCAweDNkLCAweGNkLCAweDg3LAotMHgyNSwgMHgzNCwgMHg0OCwgMHgwYSwgMHhmZiwgMHgyMywgMHhjMSwgMHgxOCwKLTB4ODEsIDB4Y2YsIDB4ZTksIDB4Y2QsIDB4ZTIsIDB4MGYsIDB4ZjksIDB4NDUsCi0weGU5LCAweDk4LCAweDhlLCAweDhmLCAweGYyLCAweDU5LCAweDA2LCAweDdmLAotMHg0OCwgMHgyZiwgMHgwZCwgMHhmZiwgMHg0OCwgMHhmMywgMHg2MSwgMHg0NywKLTB4ZDEsIDB4NzIsIDB4NzEsIDB4OTksIDB4NmIsIDB4MDAsIDB4ZmUsIDB4MjcsCi0weGFlLCAweDdmLCAweGQxLCAweGVhLCAweDVlLCAweDkzLCAweDRjLCAweDZiLAotMHg5OCwgMHhmMCwgMHg4ZiwgMHgwOSwgMHgwZiwgMHhkYywgMHhmMSwgMHg4NiwKLTB4YTYsIDB4ZmUsIDB4ZTUsIDB4MDEsIDB4ZjgsIDB4MjcsIDB4NjcsIDB4OTgsCi0weDBmLCAweGViLCAweDI0LCAweGYwLCAweDhmLCAweDdkLCAweGY1LCAweGZlLAotMHg5MCwgMHhjOSwgMHhmOSwgMHg2OCwgMHgzZiwgMHg5MiwgMHhlYSwgMHg1OSwKLTB4NDQsIDB4ZWYsIDB4Y2QsIDB4ZjksIDB4MWYsIDB4NzksIDB4M2UsIDB4OWEsCi0weGQ2LCAweDFmLCAweDAwLCAweDllLCAweDhmLCAweDk2LCAweGM1LCAweDFmLAotMHhjMCwgMHg2ZSwgMHhkMiwgMHhkYSwgMHgwMiwgMHg0MCwgMHhmYywgMHhjZiwKLTB4NjQsIDB4ZmQsIDB4MDEsIDB4M2MsIDB4YzgsIDB4MWYsIDB4NDAsIDB4ZTksCi0weDZmLCAweGU1LCAweGZjLCAweDhmLCAweDMwLCAweDFmLCAweDJkLCAweDQ0LAotMHgzYiwgMHg0MywgMHhlOSwgMHhmZSwgMHgwMCwgMHhkNywgMHgxZSwgMHgxMiwKLTB4ZDgsIDB4OGMsIDB4Y2UsIDB4NTQsIDB4ZmMsIDB4ZTMsIDB4NTcsIDB4MzAsCi0weGI1LCAweDA2LCAweDllLCAweDA2LCAweGRiLCAweDlhLCAweGY2LCAweGZlLAotMHg0ZSwgMHhmYywgMHg5MSwgMHhjYSwgMHhjNCwgMHgwZCwgMHgyOSwgMHhkYywKLTB4N2YsIDB4YjYsIDB4NzMsIDB4NWIsIDB4OTIsIDB4YzgsIDB4MWYsIDB4YTksCi0weDBjLCAweGY5LCAweDAzLCAweDljLCAweDI0LCAweGFiLCAweDliLCAweGE3LAotMHhjZSwgMHg4NywgMHgzZCwgMHgyOSwgMHhmMSwgMHgzZiwgMHg3MiwgMHhmZCwKLTB4Y2IsIDB4ZDYsIDB4ZWMsIDB4M2YsIDB4ZTIsIDB4N2MsIDB4MzQsIDB4ZTEsCi0weDdjLCAweDk5LCAweDQwLCAweDQ3LCAweGUxLCAweGY1LCAweDllLCAweDg1LAotMHhmYywgMHhiMSwgMHgwZCwgMHhjMSwgMHhlYiwgMHgzYSwgMHg3ZiwgMHgwMCwKLTB4NGQsIDB4YzAsIDB4ZjksIDB4MWYsIDB4YzksIDB4MWYsIDB4ZTAsIDB4N2MsCi0weDA2LCAweDdmLCAweGM4LCAweDljLCAweDcwLCAweGJkLCAweGI2LCAweDlmLAotMHg0YiwgMHhlOSwgMHg4ZiwgMHgxYiwgMHgyMCwgMHhlNywgMHgxZCwgMHhjNiwKLTB4M2YsIDB4M2IsIDB4YzUsIDB4ZmMsIDB4ZjgsIDB4NDksIDB4ZmMsIDB4ZTMsCi0weDQ0LCAweDZhLCAweDEzLCAweGFjLCAweDBmLCAweDFmLCAweDA5LCAweGRlLAotMHhhNCwgMHhmYSwgMHg3MCwgMHhiYSwgMHhkZSwgMHhkZCwgMHg5NywgMHg1NiwKLTB4NDcsIDB4YmYsIDB4MmEsIDB4MjcsIDB4ZmQsIDB4OTEsIDB4YjAsIDB4MDksCi0weGY2LCAweGU1LCAweGI4LCAweDFmLCAweDUwLCAweDY4LCAweGViLCAweDdlLAotMHgxYiwgMHg5MSwgMHhkMSwgMHhiMSwgMHgwNiwgMHhmYywgMHg1MywgMHgzMywKLTB4OTYsIDB4OWIsIDB4YTQsIDB4M2YsIDB4YzAsIDB4YTQsIDB4ZTYsIDB4ODMsCi0weDY4LCAweGY4LCAweDFmLCAweDkzLCAweDNmLCAweGY2LCAweDI2LCAweDFjLAotMHhkNCwgMHg0YSwgMHg4MywgMHg3YSwgMHgyNywgMHg4ZiwgMHg3ZiwgMHhlOCwKLTB4ZjMsIDB4YzksIDB4ZjEsIDB4Y2YsIDB4MzQsIDB4YzMsIDB4ZjMsIDB4MDAsCi0weGNjLCAweDg3LCAweDNkLCAweGEyLCAweDdlLCAweDJkLCAweDNmLCAweGU4LAotMHgzNSwgMHhmOCwgMHhjNywgMHhjMCwgMHhmZiwgMHhkMCwgMHgxZiwgMHhkOCwKLTB4MWYsIDB4M2IsIDB4ODMsIDB4ZmUsIDB4YzcsIDB4ZDgsIDB4MmYsIDB4MmYsCi0weGU5LCAweDdmLCAweDZjLCAweDk5LCAweGVkLCAweGI5LCAweDFlLCAweDA3LAotMHg4MSwgMHg5NiwgMHhmZiwgMHhiOSwgMHg1NiwgMHg4NywgMHgwZiwgMHg2MSwKLTB4ZmUsIDB4ZTcsIDB4YTAsIDB4ZDYsIDB4OWYsIDB4NGEsIDB4ODMsIDB4N2YsCi0weGI4LCAweDNmLCAweDc2LCAweDI2LCAweDdmLCAweGM4LCAweDkzLCAweDk5LAotMHhmYywgMHgwMSwgMHgyNCwgMHg3ZiwgMHgyNCwgMHg3NSwgMHhlYywgMHg4ZSwKLTB4MDksIDB4ZmYsIDB4ZmMsIDB4ZTQsIDB4MjAsIDB4NDcsIDB4M2IsIDB4OTgsCi0weGY2LCAweGE5LCAweGZlLCAweDQ0LCAweGYxLCAweDhmLCAweDI2LCAweGY4LAotMHhlNCwgMHhmZCwgMHhiMSwgMHhlOSwgMHg0ZiwgMHg0NiwgMHg3ZiwgMHg2YywKLTB4NzYsIDB4ZmQsIDB4MzEsIDB4MTEsIDB4ZmYsIDB4NjgsIDB4MDMsIDB4ZWQsCi0weDdjLCAweGQ4LCAweDM4LCAweDcwLCAweDkyLCAweDlmLCAweDcwLCAweGZjLAotMHhiMywgMHg4NywgMHhmMSwgMHgzZiwgMHgyMCwgMHg3ZiwgMHhmMiwgMHg4YywKLTB4NDEsIDB4ZmYsIDB4MTMsIDB4ZjMsIDB4M2YsIDB4NzUsIDB4MjIsIDB4ZmUsCi0weGIxLCAweDdhLCAweDBjLCAweGYzLCAweDQxLCAweGEwLCAweDg1LCAweGVmLAotMHgzMCwgMHhlMCwgMHg5ZiwgMHgzOCwgMHhiMSwgMHg1NSwgMHg1MiwgMHgzZSwKLTB4ZWYsIDB4NGQsIDB4ZTIsIDB4OWYsIDB4ODcsIDB4ZWIsIDB4ZDksIDB4ZGQsCi0weGM2LCAweGY3LCAweDVmLCAweDJkLCAweGRjLCAweDdmLCAweDNmLCAweGJkLAotMHhmZiwgMHg0OSwgMHhmYiwgMHgyMywgMHgzMSwgMHhmYywgMHhiMywgMHg4OCwKLTB4ZTMsIDB4MWYsIDB4YzMsIDB4N2MsIDB4M2EsIDB4NjEsIDB4M2UsIDB4MmMsCi0weGU1LCAweDdmLCAweGJjLCAweDg4LCAweGNmLCAweDk0LCAweDBiLCAweDYxLAotMHg2MywgMHgwNiwgMHhmYywgMHhlMywgMHgwMiwgMHhmYywgMHhjZiwgMHgwMCwKLTB4YzMsIDB4M2YsIDB4NmMsIDB4M2UsIDB4MmMsIDB4ZjMsIDB4NDcsIDB4ZGEsCi0weDY4LCAweGIxLCAweGIxLCAweDFhLCAweDJjLCAweDc4LCAweDk5LCAweDA2LAotMHgwMywgMHgzNywgMHhkMiwgMHhlZiwgMHg2NywgMHhmZSwgMHg0OCwgMHg1ZiwKLTB4NjMsIDB4NjMsIDB4NDEsIDB4YTYsIDB4MzEsIDB4ZDgsIDB4ZjMsIDB4MmEsCi0weGQzLCAweGZmLCAweGIwLCAweGY5LCAweGQ0LCAweGNjLCAweDFmLCAweGQyLAotMHgwNSwgMHhiNiwgMHg5MSwgMHg2MSwgMHg4NiwgMHg3ZiwgMHhmOCwgMHhmYiwKLTB4MTEsIDB4M2QsIDB4YmYsIDB4ZDgsIDB4NTgsIDB4YWIsIDB4ZTMsIDB4ZmMsCi0weGQ4LCAweGZhLCAweDg4LCAweGU5LCAweDdmLCAweDE0LCAweDdmLCAweGM4LAotMHhmMCwgMHhmZSwgMHhjOSwgMHg2ZSwgMHhiMywgMHgyMiwgMHgwYywgMHgxZSwKLTB4NDksIDB4ZGMsIDB4M2YsIDB4ZTAsIDB4OGYsIDB4YzQsIDB4YWUsIDB4MTcsCi0weGYwLCAweDBmLCAweGJiLCAweDllLCAweGViLCAweDZkLCAweGE4LCAweDNmLAotMHg1MiwgMHhkZSwgMHgyNSwgMHg2OSwgMHg1YywgMHgxMywgMHgwZiwgMHhhYSwKLTB4OTYsIDB4ZjMsIDB4YzksIDB4ZjEsIDB4Y2YsIDB4MTYsIDB4OGEsIDB4N2YsCi0weDI4LCAweDlmLCAweGYzLCAweDM0LCAweGI0LCAweGRlLCAweDY3LCAweGIzLAotMHhlMSwgMHgxZiwgMHg3NiwgMHgzZCwgMHhkNywgMHgwNywgMHg5NiwgMHgyOCwKLTB4ZmUsIDB4MTksIDB4ODIsIDB4OGUsIDB4MzksIDB4ODMsIDB4M2YsIDB4MTIsCi0weDM0LCAweDk2LCAweDdkLCAweDk4LCAweGViLCAweDdmLCAweDE0LCAweGZlLAotMHgwNywgMHgxYSwgMHg4MywgMHgzNSwgMHgwYywgMHhlMCwgMHg5ZiwgMHhhNCwKLTB4ZGUsIDB4MDMsIDB4MWIsIDB4NjUsIDB4MmIsIDB4ZjksIDB4MTEsIDB4ZmEsCi0weGUzLCAweDZhLCAweGI2LCAweDI2LCAweGY4LCAweGFlLCAweDQ3LCAweDcwLAotMHhiMCwgMHg1MSwgMHg1ZSwgMHhhZiwgMHhlMiwgMHgwZiwgMHgyOSwgMHgyYywKLTB4ZjMsIDB4MjIsIDB4YjAsIDB4NWUsIDB4OGUsIDB4N2YsIDB4NGUsIDB4NTUsCi0weDVjLCAweGIxLCAweDI3LCAweDc2LCAweDI0LCAweDY4LCAweDlmLCAweDhkLAotMHgwYywgMHhmZiwgMHhiYywgMHgxMywgMHg1NywgMHg1NCwgMHg4NSwgMHhmYSwKLTB4ZDcsIDB4NGMsIDB4MTUsIDB4ZWQsIDB4MGMsIDB4MDYsIDB4ZjEsIDB4YzQsCi0weDkwLCAweDlkLCAweDIzLCAweDkxLCAweDc1LCAweDQwLCAweGQ1LCAweDMxLAotMHg2YiwgMHg1NCwgMHhhZCwgMHg3ZiwgMHhhOSwgMHhjNywgMHhkMCwgMHg1MiwKLTB4NmIsIDB4YjAsIDB4YjgsIDB4MmYsIDB4Y2MsIDB4NGYsIDB4YTUsIDB4NDEsCi0weGZmLCAweDQzLCAweDgyLCAweDg3LCAweGMyLCAweDIwLCAweGM0LCAweDNmLAotMHhiMSwgMHhmMSwgMHg1NCwgMHg5NSwgMHg4OCwgMHg3ZiwgMHg1NiwgMHg5YiwKLTB4ZjEsIDB4MGYsIDB4MmUsIDB4Y2QsIDB4MTQsIDB4MGUsIDB4ZTcsIDB4ZGYsCi0weGU3LCAweGZhLCAweDFmLCAweDk1LCAweGZmLCAweDgxLCAweGZjLCAweGEzLAotMHgxNCwgMHhmZSwgMHhhNywgMHg0NiwgMHhmYSwgMHhkYSwgMHhkNywgMHg0OCwKLTB4ZTEsIDB4OTUsIDB4NTIsIDB4MWYsIDB4ZGYsIDB4NjEsIDB4ZjgsIDB4YTcsCi0weDE0LCAweDNkLCAweDBmLCAweGI1LCAweGJhLCAweDdlLCAweGM5LCAweGRlLAotMHgyNCwgMHhmZiwgMHgzMywgMHg2MCwgMHg0MywgMHhmOCwgMHg0NywgMHhlOCwKLTB4MzAsIDB4OGQsIDB4MmEsIDB4ZjIsIDB4NWQsIDB4NTAsIDB4ZmQsIDB4NGIsCi0weDgwLCAweDAxLCAweDQ5LCAweGM3LCAweDAwLCAweDQxLCAweGZmLCAweGUzLAotMHhkYywgMHhhYywgMHhhMCwgMHg5ZCwgMHg0MSwgMHgzYywgMHgxZiwgMHhhNCwKLTB4MTQsIDB4MGQsIDB4MGEsIDB4NzksIDB4MmEsIDB4MGUsIDB4YmUsIDB4MmEsCi0weGY5LCAweDAzLCAweDE4LCAweGYxLCAweDRmLCAweGNjLCAweGZmLCAweGZjLAotMHgzMywgMHhjZCwgMHgwZiwgMHhkNiwgMHhmZiwgMHhiYywgMHgxNywgMHhjOCwKLTB4YjQsIDB4ZDgsIDB4ODUsIDB4YjgsIDB4MjIsIDB4ODYsIDB4MjcsIDB4ODYsCi0weGJjLCAweGE2LCAweGUwLCAweDFmLCAweDU3LCAweGY1LCAweDg3LCAweDFjLAotMHg4ZiwgMHgxOSwgMHhhMSwgMHg1MSwgMHhjZSwgMHhhOCwgMHgyNywgMHhmNSwKLTB4M2YsIDB4ZjMsIDB4MTIsIDB4ZWIsIDB4M2QsIDB4NDAsIDB4MmIsIDB4ODAsCi0weDY0LCAweDNlLCAweDFhLCAweGRmLCAweDdmLCAweGI2LCAweDYwLCAweGZkLAotMHhiMywgMHg5NSwgMHg3YywgMHhlZCwgMHhlYSwgMHg0ZSwgMHgzMCwgMHhkMiwKLTB4ODIsIDB4ZmUsIDB4YTcsIDB4MWUsIDB4ODMsIDB4OWMsIDB4YTMsIDB4MDksCi0weGRhLCAweGU3LCAweDJkLCAweDNhLCAweDMxLCAweDA0LCAweGYwLCAweDA3LAotMHhjOCwgMHhmMiwgMHgzZSwgMHhhZSwgMHhmMSwgMHgwNywgMHg0OCwgMHgwNCwKLTB4MTYsIDB4MGIsIDB4NTQsIDB4ZmMsIDB4NTMsIDB4NmIsIDB4YzIsIDB4MzMsCi0weDhkLCAweDYwLCAweGZkLCAweDJiLCAweGQzLCAweDdjLCAweDEwLCAweDVhLAotMHhmZiwgMHhhYSwgMHgzMiwgMHhlMywgMHgxZiwgMHhhOSwgMHhmZSwgMHg5NSwKLTB4MDEsIDB4ZmYsIDB4MjgsIDB4ZjUsIDB4MmYsIDB4NDksIDB4YzYsIDB4NzMsCi0weDM4LCAweGFlLCAweDEwLCAweDc1LCAweDMzLCAweGEzLCAweGM4LCAweDBmLAotMHgyNCwgMHhmZSwgMHhlNywgMHg3MiwgMHgyMiwgMHgzZiwgMHg5YiwgMHgzNywKLTB4NDYsIDB4MWQsIDB4ZjcsIDB4MGYsIDB4ZTQsIDB4NTksIDB4ZWEsIDB4YzQsCi0weGZhLCAweDU3LCAweDUxLCAweDJkLCAweDdiLCAweDA1LCAweDExLCAweGVjLAotMHhkOSwgMHg2OSwgMHg3OSwgMHg0NSwgMHhmMiwgMHg4OSwgMHg0ZSwgMHhmZiwKLTB4NDMsIDB4MDYsIDB4YTUsIDB4MDUsIDB4NDQsIDB4ZjYsIDB4YjMsIDB4OGIsCi0weDBlLCAweDBhLCAweGI5LCAweDVmLCAweGE5LCAweDdmLCAweGU1LCAweDU1LAotMHhkOCwgMHhlMywgMHgxMiwgMHg0NCwgMHg5NCwgMHhlZiwgMHhlYiwgMHgzMCwKLTB4ZmIsIDB4NDMsIDB4NmUsIDB4YTYsIDB4OGUsIDB4MDcsIDB4ZWMsIDB4ZmUsCi0weDBmLCAweDRhLCAweGY1LCAweGFmLCAweDc0LCAweGZjLCAweDAzLCAweGQ0LAotMHhiZiwgMHgxMiwgMHg2OSwgMHg2ZiwgMHg5MywgMHgxNCwgMHhlOSwgMHg2MiwKLTB4ZmQsIDB4ZWIsIDB4NjAsIDB4OTIsIDB4ZjYsIDB4ODksIDB4ZTYsIDB4YzMsCi0weGI2LCAweGM1LCAweDlmLCAweDYwLCAweGM3LCAweDgwLCAweDNhLCAweDRkLAotMHhmZCwgMHg2YiwgMHgzMCwgMHg5YSwgMHg0ZSwgMHhiZSwgMHgxZSwgMHgxYiwKLTB4ZmIsIDB4M2YsIDB4NDIsIDB4MWIsIDB4ZGIsIDB4N2YsIDB4OWMsIDB4ZTQsCi0weDdmLCAweDU4LCAweGZkLCAweDZiLCAweDliLCAweDRjLCAweDgzLCAweGUwLAotMHhjNiwgMHhmOSwgMHgyOSwgMHhiOCwgMHhlMywgMHgzZSwgMHhlMSwgMHgwZiwKLTB4ZDksIDB4ZDMsIDB4NDMsIDB4ZjUsIDB4M2YsIDB4MTYsIDB4YTcsIDB4N2QsCi0weGZjLCAweDVmLCAweDA1LCAweDVmLCAweDJlLCAweGQ3LCAweDZkLCAweGNmLAotMHg1ZiwgMHhmMSwgMHg3ZSwgMHgxMywgMHg1YywgMHhhYiwgMHhlOCwgMHg3ZiwKLTB4ZWEsIDB4OTMsIDB4ZGIsIDB4MzgsIDB4ZjEsIDB4ODcsIDB4N2MsIDB4MzQsCi0weDNmLCAweDUyLCAweGMyLCAweGMxLCAweDJkLCAweDUyLCAweGZkLCAweDZiLAotMHhkNywgMHgxMywgMHhhZSwgMHg1YSwgMHhiNiwgMHg4OCwgMHhlNiwgMHg1YiwKLTB4OGQsIDB4NzcsIDB4NWYsIDB4NDEsIDB4YTcsIDB4NzcsIDB4NDQsIDB4YTMsCi0weDYzLCAweDA1LCAweDdmLCAweGM4LCAweDk5LCAweGNjLCAweDFmLCAweDUyLAotMHhiMCwgMHhhNSwgMHg2NSwgMHg4YywgMHhmNCwgMHgzZCwgMHhkOSwgMHhmYywKLTB4MjEsIDB4MGYsIDB4MjQsIDB4YWUsIDB4MmYsIDB4NzksIDB4MzQsIDB4ZmYsCi0weDllLCAweDBkLCAweDlkLCAweDc3LCAweGRkLCAweDcyLCAweGQwLCAweDI4LAotMHhkNywgMHhiZiwgMHgxZSwgMHg0ZiwgMHhhYywgMHg3NywgMHg5YywgMHg0ZSwKLTB4OGMsIDB4NjUsIDB4NDYsIDB4ODgsIDB4ODIsIDB4MWUsIDB4M2IsIDB4NzcsCi0weDA4LCAweGRkLCAweDA5LCAweDlmLCAweDc3LCAweGEzLCAweGY5LCAweDExLAotMHg0YiwgMHhjMSwgMHgzZiwgMHhmMywgMHgwYywgMHhmYSwgMHhlNywgMHg3OSwKLTB4ODAsIDB4M2YsIDB4YTQsIDB4NTksIDB4ZmYsIDB4OTMsIDB4NjMsIDB4NzgsCi0weDA2LCAweGE4LCAweDdmLCAweDQxLCAweGVmLCAweGZiLCAweGJmLCAweDA0LAotMHhlYiwgMHg1ZiwgMHgyZSwgMHhmYywgMHg1YSwgMHhiYSwgMHgwOSwgMHhhYSwKLTB4N2YsIDB4NjEsIDB4ZmMsIDB4ZTMsIDB4Y2IsIDB4ZWIsIDB4M2QsIDB4NDMsCi0weGQ3LCAweDdiLCAweDA2LCAweDlkLCAweGNmLCAweGM1LCAweGZlLCAweDg3LAotMHg2YywgMHhmZiwgMHhkOSwgMHgzYiwgMHgyMywgMHg5NSwgMHhlZiwgMHgzYSwKLTB4OWQsIDB4YTksIDB4ZmUsIDB4ZTUsIDB4ZDUsIDB4YWUsIDB4Y2QsIDB4N2YsCi0weDgwLCAweDRlLCAweGEzLCAweGQ2LCAweDRjLCAweGZjLCAweDBmLCAweDVhLAotMHg1YywgMHg3NiwgMHhmYSwgMHg3NiwgMHhlMiwgMHg4ZCwgMHhhMiwgMHhiMSwKLTB4YTQsIDB4ZjIsIDB4M2YsIDB4YjksIDB4NTgsIDB4ZTYsIDB4MmQsIDB4MDksCi0weGVkLCAweDUwLCAweDk1LCAweDE3LCAweGE2LCAweGE1LCAweDFiLCAweDFkLAotMHg0YywgMHhlNSwgMHg3ZiwgMHg0OCwgMHhlMCwgMHg4NCwgMHg2OSwgMHhiNCwKLTB4ZWUsIDB4NDUsIDB4OGIsIDB4NjQsIDB4ZmUsIDB4YzcsIDB4MDcsIDB4OWUsCi0weDlmLCAweDI4LCAweGMwLCAweDBlLCAweDM2LCAweDgzLCAweGU4LCAweDM5LAotMHhlZiwgMHgwYiwgMHhmOCwgMHg5MywgMHg0YywgMHhmMywgMHhkMSwgMHg0MiwKLTB4ODQsIDB4ZWMsIDB4NWQsIDB4MmUsIDB4NWUsIDB4YTcsIDB4YWIsIDB4N2YsCi0weDRkLCAweDk1LCAweGJlLCAweDdmLCAweDI5LCAweGFhLCAweDdiLCAweDM4LAotMHgzYywgMHgxZiwgMHgyZiwgMHhiOSwgMHg0YiwgMHgxNSwgMHhmZSwgMHgwNywKLTB4OWMsIDB4MmYsIDB4YjMsIDB4MGMsIDB4MDcsIDB4N2YsIDB4OGEsIDB4OGUsCi0weDBmLCAweDJkLCAweDg3LCAweGVhLCAweDVmLCAweGVhLCAweGYzLCAweGUwLAotMHhhMSwgMHg2YSwgMHhkYiwgMHhhYSwgMHg0MCwgMHhmZiwgMHhlMSwgMHgzNywKLTB4NjUsIDB4ZTMsIDB4N2YsIDB4MTYsIDB4YmUsIDB4NWUsIDB4ZmQsIDB4NzIsCi0weGQ1LCAweDFmLCAweGExLCAweGM3LCAweDAwLCAweGZlLCAweDg3LCAweGMwLAotMHgxZSwgMHg2YiwgMHg5MCwgMHgwNywgMHg5NywgMHg1MCwgMHg0YiwgMHhhZSwKLTB4Y2UsIDB4Y2IsIDB4YTMsIDB4ZGMsIDB4MjUsIDB4YjQsIDB4MjIsIDB4OWQsCi0weGZmLCAweDYxLCAweGZkLCAweDVmLCAweDE3LCAweGQxLCAweDg0LCAweDdiLAotMHg5ZCwgMHg2NiwgMHgzZSwgMHg5YSwgMHhkMCwgMHgxZiwgMHg4NywgMHgzZiwKLTB4NTksIDB4ODksIDB4ZjMsIDB4ZGYsIDB4OGMsIDB4NDcsIDB4Y2YsIDB4OTcsCi0weDBiLCAweDJiLCAweGFhLCAweDE3LCAweDY1LCAweGUwLCAweDdmLCAweDFjLAotMHhhYywgMHgyOCwgMHgzOCwgMHg4YSwgMHhmNiwgMHg2MSwgMHg4NSwgMHhlMSwKLTB4NTIsIDB4NjgsIDB4M2UsIDB4OWEsIDB4YjQsIDB4ZGUsIDB4MjUsIDB4NWUsCi0weGQ1LCAweGIwLCAweGY1LCAweDA1LCAweDBmLCAweDU3LCAweGM0LCAweDljLAotMHgyZSwgMHhhYiwgMHgyNSwgMHhlMSwgMHg4ZiwgMHgyZCwgMHhlNSwgMHgzMywKLTB4MWEsIDB4M2IsIDB4YjgsIDB4MTUsIDB4M2IsIDB4ZDIsIDB4NTcsIDB4MjEsCi0weDZjLCAweDlkLCAweGVkLCAweGI0LCAweDU4LCAweDBkLCAweGQwLCAweDdjLAotMHhiNCwgMHgwNCwgMHhlZCwgMHg1MywgMHhlYiwgMHg4NSwgMHhmZiwgMHhiZiwKLTB4NTcsIDB4ZDAsIDB4NzIsIDB4M2MsIDB4M2EsIDB4YTQsIDB4MGQsIDB4ZTYsCi0weDdmLCAweGJhLCAweGU0LCAweDgzLCAweGE5LCAweDdhLCAweDE0LCAweDhkLAotMHhmYSwgMHg2ZCwgMHg5OSwgMHhmOCwgMHgxZiwgMHgzZiwgMHg1MiwgMHhmYywKLTB4MmUsIDB4NDAsIDB4MWYsIDB4ZWUsIDB4NmQsIDB4Y2MsIDB4YzQsIDB4ZmYsCi0weDA0LCAweGNkLCAweDdlLCAweDNjLCAweGIxLCAweGEyLCAweGIzLCAweDMxLAotMHgxYiwgMHhmZiwgMHhiMywgMHhjOCwgMHhhZiwgMHgxYywgMHhiMiwgMHg5NiwKLTB4NTUsIDB4NDQsIDB4MTMsIDB4NGUsIDB4ZTEsIDB4ZmEsIDB4NTcsIDB4ODcsCi0weDU0LCAweDA2LCAweDVhLCAweGUyLCAweDNiLCAweDQzLCAweGQ2LCAweDc0LAotMHg3NCwgMHhhNCwgMHg2OSwgMHg4YiwgMHhhMSwgMHhmZSwgMHgyNSwgMHg5ZCwKLTB4YmYsIDB4MzUsIDB4NDEsIDB4YmUsIDB4YzUsIDB4MWUsIDB4ZjMsIDB4ZGEsCi0weGY0LCAweGZlLCAweGQ4LCAweDQyLCAweDgwLCAweDBiLCAweDYxLCAweDBkLAotMHhiZCwgMHgyMywgMHhjNSwgMHg4OSwgMHhhNiwgMHhjNywgMHhkNiwgMHhhNSwKLTB4ZDUsIDB4YmYsIDB4YTYsIDB4MmUsIDB4ODgsIDB4MTEsIDB4ZDEsIDB4NGIsCi0weGY5LCAweDk3LCAweGZjLCAweGNiLCAweGE4LCAweGY1LCAweDQ2LCAweGVjLAotMHg4ZiwgMHhhNCwgMHg5YiwgMHgwZiwgMHg4YiwgMHg4MywgMHg3YywgMHg2NywKLTB4NWMsIDB4MDgsIDB4ZGIsIDB4ODksIDB4M2YsIDB4NzEsIDB4MWEsIDB4YjUsCi0weGZjLCAweDBmLCAweDA5LCAweGZhLCAweDcwLCAweDIzLCAweDk4LCAweGQzLAotMHhlYywgMHhmNywgMHgzNiwgMHg1OCwgMHhmZCwgMHhjMSwgMHgxMSwgMHhkNywKLTB4NGIsIDB4YWYsIDB4N2YsIDB4NmQsIDB4MTYsIDB4MTEsIDB4NTEsIDB4NjMsCi0weGFhLCAweDNmLCAweGI2LCAweGM1LCAweDEwLCAweDBlLCAweDc2LCAweGZjLAotMHgzZSwgMHg5YSwgMHg5OSwgMHhmZiwgMHg3OSwgMHgxMCwgMHgwNywgMHg0ZSwKLTB4N2IsIDB4NDcsIDB4NWQsIDB4OGEsIDB4M2YsIDB4YjYsIDB4NTUsIDB4OGUsCi0weDE1LCAweGU5LCAweDNkLCAweDc5LCAweDBmLCAweDk1LCAweDM2LCAweDJlLAotMHg0NSwgMHhjZCwgMHgxYSwgMHhmZCwgMHgwZiwgMHhjNSwgMHgzZiwgMHg1MywKLTB4NDgsIDB4MzAsIDB4NmMsIDB4YjUsIDB4YTEsIDB4N2YsIDB4MGMsIDB4N2UsCi0weDU1LCAweDc0LCAweGNhLCAweDQ2LCAweDdmLCAweGVjLCAweGMzLCAweDBkLAotMHg4MywgMHgwNSwgMHgxYywgMHhjYywgMHhmYSwgMHg5MiwgMHg1NSwgMHhlYiwKLTB4NzcsIDB4OTcsIDB4YmMsIDB4NmQsIDB4OTUsIDB4OWUsIDB4ZWMsIDB4OGYsCi0weGVkLCAweDY4LCAweDY4LCAweGRiLCAweGIxLCAweGFhLCAweDM2LCAweGY0LAotMHgxMywgMHhiNCwgMHg3MCwgMHg1MywgMHg2NSwgMHhhNywgMHhjNiwgMHgxZiwKLTB4NWIsIDB4MDEsIDB4NDIsIDB4ZDgsIDB4YmYsIDB4YjEsIDB4YjUsIDB4YjMsCi0weDY2LCAweDBiLCAweDMwLCAweDFmLCAweDE2LCAweDM4LCAweGRmLCAweDViLAotMHhmMiwgMHhjMywgMHgxNiwgMHg1NiwgMHhkMCwgMHhkNSwgMHgxNiwgMHgxMywKLTB4ZjMsIDB4NjEsIDB4MjcsIDB4ODIsIDB4YjksIDB4ZDIsIDB4ZjksIDB4MTUsCi0weDBiLCAweGExLCAweGViLCAweDg2LCAweGYzLCAweGVkLCAweDIxLCAweGZlLAotMHg2OSwgMHgyZCwgMHgxNywgMHg4NiwgMHhmMywgMHg0OCwgMHhlNSwgMHg3ZiwKLTB4ZDQsIDB4ZmIsIDB4MWYsIDB4YjUsIDB4NTYsIDB4ZjgsIDB4NzcsIDB4YTMsCi0weDNmLCAweDJiLCAweDM5LCAweDlkLCAweGQ2LCAweDIyLCAweDA5LCAweGZmLAotMHgxYywgMHg4MCwgMHhhZiwgMHhlZiwgMHhiNCwgMHg2ZSwgMHg0MywgMHhkOCwKLTB4NjEsIDB4MjksIDB4YmMsIDB4MWUsIDB4ODEsIDB4ZmUsIDB4ZDgsIDB4MzQsCi0weGMwLCAweDc4LCAweGIyLCAweDc5LCAweDJjLCAweDBjLCAweGQ2LCAweGExLAotMHgxZCwgMHg0MSwgMHg1MywgMHhjOSwgMHhmMSwgMHgyYywgMHg0NywgMHhmMiwKLTB4YzcsIDB4OTYsIDB4ZTYsIDB4ZGQsIDB4NTcsIDB4OTMsIDB4ZjksIDB4MTcsCi0weGU1LCAweDEwLCAweGZmLCAweGZmLCAweGNkLCAweGNlLCAweDgxLCAweDllLAotMHg0NiwgMHhiYywgMHhmZiwgMHgyYywgMHg0YSwgMHhlNywgMHg3ZiwgMHhmYSwKLTB4MzEsIDB4ZGUsIDB4MGUsIDB4ZGUsIDB4ZjUsIDB4ZGIsIDB4ZmIsIDB4ZTYsCi0weDE2LCAweGYzLCAweDVhLCAweDdmLCAweDZjLCAweDEyLCAweGZjLCAweDE3LAotMHgxNiwgMHg0MiwgMHgwZiwgMHg3NSwgMHgyZiwgMHgwYiwgMHhmMSwgMHhkNSwKLTB4YjcsIDB4MGYsIDB4MTYsIDB4Y2EsIDB4ZjMsIDB4YjUsIDB4ZmUsIDB4ZDgsCi0weDI0LCAweGI4LCAweDE3LCAweDA3LCAweDdkLCAweGQ2LCAweGMyLCAweGUwLAotMHhkZSwgMHhmMiwgMHhmMiwgMHgzZSwgMHhhNywgMHg5OCwgMHgzYSwgMHgxZiwKLTB4ZWQsIDB4MjEsIDB4NmYsIDB4NzEsIDB4NjksIDB4NTYsIDB4OTMsIDB4NTUsCi0weDA4LCAweDdhLCAweDc3LCAweGVjLCAweDFmLCAweGMyLCAweGQ3LCAweDliLAotMHhmOCwgMHgxZiwgMHg2YiwgMHg4NCwgMHhiZiwgMHg5ZiwgMHhlZSwgMHgwOCwKLTB4ZjcsIDB4ZTcsIDB4MjYsIDB4NGYsIDB4OWQsIDB4MGYsIDB4MjIsIDB4YWUsCi0weDM3LCAweGJjLCAweGZlLCAweDE1LCAweDFjLCAweDE0LCAweGYzLCAweGQ4LAotMHgzZiwgMHhmMywgMHhiMSwgMHg1MiwgMHhhMSwgMHg2OCwgMHhlNCwgMHg3ZiwKLTB4NDYsIDB4YTcsIDB4OGUsIDB4ODcsIDB4ZmIsIDB4YzksIDB4YWEsIDB4ZDIsCi0weDU0LCAweGZjLCAweGM5LCAweDY1LCAweDc0LCAweDU3LCAweGE5LCAweGFlLAotMHhkMywgMHg1YywgMHhmZiwgMHg5YSwgMHhhYywgMHgzZiwgMHhmNiwgMHhlNCwKLTB4ZWEsIDB4NWYsIDB4YTIsIDB4NGQsIDB4ZjEsIDB4NmUsIDB4ZmEsIDB4N2UsCi0weDkxLCAweDQ1LCAweGZmLCAweDMzLCAweDhiLCAweDM3LCAweDUyLCAweDIxLAotMHg2NSwgMHgzZSwgMHgxYSwgMHhjZiwgMHg4ZiwgMHg0MCwgMHhkNCwgMHhhYywKLTB4ZTEsIDB4ZmEsIDB4ZTcsIDB4ZGYsIDB4Y2YsIDB4N2MsIDB4ZDgsIDB4YTQsCi0weDJkLCAweDc5LCAweDVhLCAweGZkLCAweGViLCAweGI1LCAweDc0LCAweGZkLAotMHhiMywgMHg4NCwgMHg3ZiwgMHg5MiwgMHgzNiwgMHg4NiwgMHhkYSwgMHhmYSwKLTB4ZDcsIDB4MzcsIDB4MzAsIDB4MGMsIDB4YjgsIDB4NDIsIDB4ZDksIDB4OGYsCi0weDk0LCAweGZhLCAweDE3LCAweDFmLCAweDBiLCAweGZiLCAweDU0LCAweDA2LAotMHhmZCwgMHhmMywgMHhiNSwgMHhkOCwgMHgxZiwgMHg1MiwgMHg4NiwgMHgzZCwKLTB4OWYsIDB4NjYsIDB4ZmQsIDB4NGIsIDB4ODcsIDB4N2YsIDB4MGMsIDB4ZjUsCi0weGFmLCAweDBjLCAweGY1LCAweDQ0LCAweDcwLCAweDNlLCAweGFjLCAweGExLAotMHhmZiwgMHhlYiwgMHhiMywgMHg1MCwgMHhmZiwgMHg1YSwgMHhmZiwgMHhlOSwKLTB4Y2UsIDB4ODcsIDB4MDUsIDB4OTYsIDB4MzksIDB4M2YsIDB4NjUsIDB4M2UsCi0weGM4LCAweGE0LCAweGY0LCAweGNmLCAweGY4LCAweGI3LCAweDQ5LCAweDIyLAotMHgyOCwgMHg1YiwgMHhmZiwgMHhiYiwgMHgxYSwgMHgyMCwgMHg1OSwgMHhmZiwKLTB4NDMsIDB4ZmQsIDB4MjEsIDB4ZGQsIDB4ZmIsIDB4YzQsIDB4NjUsIDB4NTYsCi0weDRhLCAweGViLCAweDlkLCAweDk0LCAweGZlLCAweDI3LCAweGMxLCAweGZmLAotMHhiYywgMHgyMiwgMHhmNCwgMHhiYiwgMHhjMSwgMHhmNywgMHhmZiwgMHg2OSwKLTB4Y2MsIDB4MDcsIDB4YzksIDB4M2UsIDB4MWYsIDB4NzYsIDB4MzIsIDB4ZmEsCi0weDFmLCAweDcwLCAweDNlLCAweDA4LCAweGEwLCAweDdmLCAweGE2LCAweGRmLAotMHhhZiwgMHhlMCwgMHg5ZiwgMHhhOSwgMHg0YSwgMHhhMCwgMHg5ZCwgMHg4ZiwKLTB4OTYsIDB4MGMsIDB4ZTIsIDB4YzYsIDB4ZjAsIDB4OTMsIDB4NzUsIDB4Y2EsCi0weDdjLCAweDkwLCAweGJlLCAweGY4LCAweGI0LCAweGYyLCAweGZmLCAweDM3LAotMHhkMiwgMHhmZiwgMHhjYywgMHgyNywgMHhmZSwgMHg5MCwgMHg2MywgMHg3NywKLTB4ZTAsIDB4ODksIDB4NTcsIDB4ZWQsIDB4ZWEsIDB4N2MsIDB4MTAsIDB4ZDIsCi0weGZmLCAweDQ1LCAweGY0LCAweDNmLCAweGRiLCAweGE4LCAweGZlLCAweDk5LAotMHgwNCwgMHhjMywgMHgyYSwgMHhmZiwgMHhlMywgMHhiMSwgMHhkNSwgMHhmMSwKLTB4ZWIsIDB4MjMsIDB4ZmQsIDB4YjMsIDB4NDMsIDB4MDIsIDB4NzgsIDB4M2UsCi0weDA4LCAweDdlLCAweDhkLCAweDg1LCAweGYzLCAweDk5LCAweDljLCAweDBmLAotMHhiMiwgMHg5OCwgMHgyZSwgMHg1MywgMHhhMywgMHhmZiwgMHg4MSwgMHhlNiwKLTB4ODMsIDB4OTgsIDB4ZjYsIDB4ZGIsIDB4MzQsIDB4ZmMsIDB4NDMsIDB4ODIsCi0weDEzLCAweDJhLCAweGZmLCAweDAzLCAweGUzLCAweDlmLCAweDM4LCAweDIwLAotMHhlNywgMHg2ZiwgMHg1ZSwgMHgzYiwgMHgxZiwgMHgzNiwgMHg4YiwgMHhmZSwKLTB4MDcsIDB4ZTMsIDB4MWYsIDB4MmYsIDB4Y2UsIDB4NDYsIDB4MjAsIDB4ZjQsCi0weDdmLCAweGYxLCAweGZjLCAweDNjLCAweGYzLCAweDEwLCAweDMwLCAweDFmLAotMHg4ZCwgMHg1NywgMHg3MywgMHhlOCwgMHgzMiwgMHgwNywgMHhlOCwgMHgxYiwKLTB4ZjcsIDB4ODAsIDB4NTIsIDB4ZmYsIDB4YmEsIDB4ZTQsIDB4ZGUsIDB4NDUsCi0weGQ1LCAweDNlLCAweDdjLCAweGJkLCAweDQzLCAweDYyLCAweDIzLCAweGIzLAotMHg5OSwgMHhmZiwgMHgxOSwgMHgwZiwgMHgyNiwgMHgxNiwgMHhiNCwgMHgwZSwKLTB4MTQsIDB4YmEsIDB4ZjIsIDB4ZWQsIDB4ZTEsIDB4MWIsIDB4NTIsIDB4MmIsCi0weGZlLCAweDg2LCAweDE2LCAweDVlLCAweGZmLCAweDAyLCAweGYwLCAweGNmLAotMHgzYiwgMHhlOCwgMHg3OCwgMHg1ZiwgMHhlMywgMHgzNiwgMHgzYywgMHgzMSwKLTB4ZDYsIDB4ZTksIDB4MGQsIDB4MWUsIDB4N2UsIDB4YjQsIDB4ZmEsIDB4NWYsCi0weDJkLCAweDhmLCAweGQ3LCAweGJmLCAweDAwLCAweGZkLCAweDRmLCAweGJmLAotMHgxZiwgMHgzZSwgMHgxOCwgMHg3OCwgMHgxMCwgMHg2MSwgMHgzMywgMHhlYSwKLTB4MGQsIDB4OWYsIDB4OTAsIDB4ZjUsIDB4MmQsIDB4OTYsIDB4NjUsIDB4OWEsCi0weDBmLCAweDEyLCAweGE1LCAweGJkLCAweDExLCAweDg1LCAweGRmLCAweDFmLAotMHg1ZSwgMHhiZiwgMHhhYiwgMHhiMSwgMHg1NCwgMHg3ZCwgMHhhNCwgMHhhMywKLTB4ODUsIDB4ZWQsIDB4MjcsIDB4ZmYsIDB4ZDcsIDB4ZGUsIDB4ZDUsIDB4MDcsCi0weGQ3LCAweDU1LCAweDVjLCAweGY3LCAweGIzLCAweGY3LCAweGVkLCAweDk1LAotMHhhZiwgMHhhNCwgMHgyNywgMHhlYiwgMHgzZSwgMHhlOSwgMHgzZCwgMHhmYiwKLTB4YzEsIDB4MTgsIDB4YjgsIDB4OTIsIDB4MGQsIDB4NjgsIDB4ODgsIDB4MjEsCi0weDRmLCAweGMyLCAweDgwLCAweDgzLCAweDI5LCAweGJhLCAweDdhLCAweGZhLAotMHhiMCwgMHhmYywgMHgwMSwgMHg3ZSwgMHhkOCwgMHhiMiwgMHg1MSwgMHhhOSwKLTB4YTYsIDB4NzMsIDB4Y2QsIDB4YjgsIDB4MGMsIDB4OWQsIDB4NzEsIDB4MzMsCi0weGI2LCAweDNiLCAweDBkLCAweDc0LCAweDlhLCAweGMyLCAweDdkLCAweDkyLAotMHgzMCwgMHg5YSwgMHg0MCwgMHhjYSwgMHhhYiwgMHhlMywgMHgwZSwgMHg2MiwKLTB4ODYsIDB4MTksIDB4NWUsIDB4NTIsIDB4NGYsIDB4Y2EsIDB4NGMsIDB4NjgsCi0weDQ3LCAweDQwLCAweDA4LCAweGNlLCAweDQwLCAweGUyLCAweDI3LCAweDIzLAotMHgxYiwgMHgwNywgMHgxMywgMHhhYSwgMHg1MiwgMHgyNywgMHhmMSwgMHg1MCwKLTB4MGYsIDB4YjYsIDB4M2IsIDB4MmUsIDB4ZTMsIDB4YjQsIDB4MDYsIDB4OWMsCi0weGMxLCAweDA5LCAweDc2LCAweGMwLCAweGI4LCAweDY3LCAweDc3LCAweGVmLAotMHhjNywgMHhkZSwgMHhmNywgMHgyNSwgMHgxOSwgMHgwMiwgMHhlZCwgMHgyNCwKLTB4ZjcsIDB4ZmMsIDB4ZTMsIDB4ZGYsIDB4ZWMsIDB4NWIsIDB4NWQsIDB4ZWYsCi0weGRkLCAweGJiLCAweDdiLCAweGY2LCAweGI3LCAweDY3LCAweGY3LCAweDljLAotMHg1MywgMHhjMiwgMHg3ZiwgMHgzOCwgMHhmOCwgMHgwMCwgMHg1MiwgMHg4NSwKLTB4YzUsIDB4ZWMsIDB4NDYsIDB4ZmQsIDB4MmIsIDB4NzYsIDB4ODcsIDB4YjksCi0weDY2LCAweDc3LCAweGJkLCAweDVlLCAweGVhLCAweGZmLCAweDE1LCAweDE4LAotMHgwZiwgMHhlNywgMHg2MSwgMHgwZiwgMHgwMywgMHg5ZiwgMHhkOCwgMHgxNywKLTB4ZDgsIDB4N2EsIDB4ZDcsIDB4NTYsIDB4ZTYsIDB4ZmMsIDB4Y2IsIDB4MzUsCi0weGZiLCAweDMwLCAweDcwLCAweDgyLCAweDViLCAweGU0LCAweGEyLCAweGUyLAotMHhjNiwgMHg3ZSwgMHg4NywgMHhiOSwgMHhmOCwgMHhkOSwgMHhmYSwgMHg1NCwKLTB4YTUsIDB4ZmIsIDB4M2YsIDB4ZWUsIDB4ZmQsIDB4NjcsIDB4ZTQsIDB4YzMsCi0weDFhLCAweGUzLCAweGI3LCAweDJmLCAweGE5LCAweGFkLCAweDQ3LCAweGYwLAotMHg0NSwgMHgzYSwgMHgyYSwgMHhkOSwgMHg3ZiwgMHg5YywgMHhmOSwgMHhmMiwKLTB4MWMsIDB4ZjAsIDB4YzAsIDB4Y2UsIDB4OTQsIDB4OTcsIDB4MjAsIDB4NDgsCi0weDc5LCAweGZhLCAweGU3LCAweDk4LCAweDZjLCAweGZmLCAweGQ5LCAweGUzLAotMHgxZSwgMHgwYywgMHg3ZCwgMHhkZiwgMHg1ZSwgMHg2YywgMHg2OSwgMHg1ZiwKLTB4NTcsIDB4MmUsIDB4NjcsIDB4MjUsIDB4NzksIDB4NmQsIDB4YjMsIDB4OTIsCi0weDJjLCAweGM3LCAweDdmLCAweGI4LCAweGQ5LCAweDg3LCAweDgxLCAweDI5LAotMHg1NiwgMHg2MiwgMHg0NywgMHg1MywgMHgxMSwgMHhmYywgMHhjOSwgMHg0YywKLTB4MTUsIDB4MTAsIDB4NWMsIDB4NWEsIDB4YzksIDB4ZmUsIDB4YjMsIDB4YzcsCi0weGViLCAweDI4LCAweGY4LCAweGYyLCAweDM0LCAweDhiLCAweDlmLCAweGEwLAotMHhlZiwgMHg5OSwgMHg4MSwgMHhmZiwgMHgzYywgMHhiNiwgMHgzYiwgMHhmMiwKLTB4MmYsIDB4ZjAsIDB4MWEsIDB4NzYsIDB4NTQsIDB4NTQsIDB4ZTgsIDB4YWIsCi0weDBlLCAweGIzLCAweDcxLCAweDNjLCAweDUyLCAweGU3LCAweGZiLCAweDdmLAotMHg5NSwgMHhmMCwgMHgxZiwgMHg3NiwgMHhlYywgMHgzNSwgMHhjYSwgMHhiNiwKLTB4NTEsIDB4OGUsIDB4ODYsIDB4YjEsIDB4ZWIsIDB4NGQsIDB4ZTUsIDB4NjYsCi0weDI5LCAweGRlLCAweDQ1LCAweDMxLCAweGZmLCAweDM5LCAweGFiLCAweDZjLAotMHg4NywgMHgxMSwgMHhkYiwgMHhlMCwgMHgxOSwgMHg2MywgMHhkOSwgMHhmYiwKLTB4NWEsIDB4ZjUsIDB4NDksIDB4NjksIDB4ZmYsIDB4ODUsIDB4ZmMsIDB4NDcsCi0weDJmLCAweDFlLCAweDZmLCAweDUxLCAweDY1LCAweDA0LCAweGYyLCAweDUzLAotMHg2ZCwgMHgyOSwgMHhlNSwgMHgwZCwgMHg3OCwgMHgzZSwgMHg2MywgMHgxYywKLTB4YWIsIDB4NGYsIDB4ZDYsIDB4MzUsIDB4NDksIDB4ZjEsIDB4YjEsIDB4NGIsCi0weGY5LCAweGNmLCAweGQzLCAweGYwLCAweDA2LCAweGI0LCAweDRmLCAweGUwLAotMHhiNiwgMHhlMiwgMHhiNywgMHhmMCwgMHg4OSwgMHhmZCwgMHg3YywgMHhiZSwKLTB4ZjEsIDB4YmYsIDB4MjMsIDB4NGIsIDB4NjcsIDB4ZTYsIDB4M2YsIDB4MWEsCi0weDAzLCAweGU2LCAweDU5LCAweGY4LCAweDMxLCAweDlkLCAweDA1LCAweGZmLAotMHhmOSwgMHgxNSwgMHgxYiwgMHgzNiwgMHgwOCwgMHhlOCwgMHg0ZiwgMHhiNCwKLTB4OTQsIDB4MTksIDB4OWQsIDB4ODksIDB4ZmYsIDB4ZmMsIDB4MTcsIDB4ZmMsCi0weDMwLCAweGRkLCAweDlhLCAweGQxLCAweDcyLCAweGZjLCAweGJlLCAweGNhLAotMHg3NywgMHhjYywgMHhiNiwgMHg5ZCwgMHgzMywgMHhmMSwgMHgxZiwgMHhlMywKLTB4MjUsIDB4YWQsIDB4MzUsIDB4YmQsIDB4NzIsIDB4OWMsIDB4MWYsIDB4ZGMsCi0weGI0LCAweDlhLCAweDVhLCAweDZlLCAweDc4LCAweDA2LCAweGZlLCAweGIzLAotMHhlYiwgMHhkOSwgMHgzNiwgMHg2MywgMHg2NSwgMHg5ZCwgMHg4ZSwgMHhmNSwKLTB4YjMsIDB4MDAsIDB4MmIsIDB4YjUsIDB4YTYsIDB4ZTEsIDB4MTksIDB4ZjgsCi0weDhmLCAweDdkLCAweGQ2LCAweGU4LCAweGQwLCAweGU2LCAweGIyLCAweDkyLAotMHgwMywgMHhkMCwgMHhhMSwgMHhhZCwgMHgxZSwgMHg5NiwgMHhmZCwgMHhiZiwKLTB4Y2EsIDB4ZjAsIDB4OWYsIDB4MzMsIDB4NmMsIDB4N2UsIDB4OTksIDB4MGQsCi0weGQzLCAweGNkLCAweDY3LCAweDk0LCAweDVmLCAweGIzLCAweGQ0LCAweDhkLAotMHhkMywgMHgzMywgMHhkZCwgMHg3ZiwgMHgzNiwgMHhjZSwgMHhiNSwgMHg3NSwKLTB4YjAsIDB4OGMsIDB4OTAsIDB4YmMsIDB4YTMsIDB4NTYsIDB4NDYsIDB4NzcsCi0weDhjLCAweDU0LCAweGU1LCAweDNmLCAweGY4LCAweDQ1LCAweDc2LCAweDliLAotMHhhZCwgMHg2ZSwgMHhhMiwgMHhkOCwgMHg2YiwgMHg3NCwgMHg2ZCwgMHgyYSwKLTB4MTAsIDB4ZmYsIDB4YTcsIDB4ODQsIDB4ZGQsIDB4YTUsIDB4YTcsIDB4ZTAsCi0weDA1LCAweGJiLCAweDI1LCAweGEzLCAweDY1LCAweDlhLCAweDBlLCAweGMxLAotMHgxZSwgMHhmOCwgMHhiNiwgMHhhNSwgMHgwZCwgMHhjYSwgMHhmMSwgMHhiMSwKLTB4MDMsIDB4ZmMsIDB4NDcsIDB4MTEsIDB4ZjEsIDB4OTcsIDB4Y2MsIDB4MWYsCi0weGQxLCAweDg1LCAweDY2LCAweGRiLCAweDliLCAweGNhLCAweDE5LCAweGZiLAotMHg0NywgMHhjNiwgMHg5NywgMHg5OCwgMHhhMSwgMHhlYywgMHg5ZCwgMHhhYSwKLTB4ZTcsIDB4NWYsIDB4ZWYsIDB4YzAsIDB4YjksIDB4YzIsIDB4NzMsIDB4ZTksCi0weDI4LCAweDAzLCAweGJmLCAweGQyLCAweDNhLCAweDMyLCAweDhiLCAweDc3LAotMHg0YSwgMHhmYywgMHhhNywgMHg1YywgMHhmYywgMHgxZiwgMHhhYywgMHg2ZiwKLTB4ZGMsIDB4YzIsIDB4MWMsIDB4ZTEsIDB4ZGYsIDB4MjksIDB4M2QsIDB4ZmYsCi0weDJhLCAweGUxLCAweDNmLCAweDczLCAweGRjLCAweGMwLCAweDBiLCAweGMyLAotMHgxMSwgMHhkZSwgMHg0YywgMHhjMSwgMHg5YSwgMHg4MiwgMHgxNCwgMHgzZiwKLTB4YjksIDB4ODQsIDB4ZmYsIDB4YzgsIDB4ZmUsIDB4NWYsIDB4YmYsIDB4NDQsCi0weGQwLCAweGNhLCAweDQwLCAweGRkLCAweDRjLCAweGZjLCAweDQ3LCAweDQ0LAotMHgyYywgMHhmOSwgMHhhOSwgMHhjZCwgMHhmNCwgMHhjZiwgMHgyYSwgMHgwMywKLTB4ZWIsIDB4YmIsIDB4ZTMsIDB4YWQsIDB4ODQsIDB4ZmYsIDB4M2MsIDB4YzIsCi0weGMwLCAweDBiLCAweGMyLCAweDFlLCAweDcyLCAweDg0LCAweGY1LCAweDI3LAotMHhkNCwgMHhkZiwgMHhhYiwgMHhiNCwgMHg3OSwgMHhmNSwgMHhjYiwgMHhkOCwKLTB4N2YsIDB4MjIsIDB4NmYsIDB4YzEsIDB4NmYsIDB4ZWMsIDB4M2YsIDB4Y2EsCi0weDM3LCAweDBlLCAweGYyLCAweDkyLCAweDc2LCAweDE2LCAweDg4LCAweGVjLAotMHgxYSwgMHhkZiwgMHhmZiwgMHhhYiwgMHgwYywgMHhmZiwgMHgzOSwgMHhjOSwKLTB4NWUsIDB4ZGMsIDB4OGUsIDB4ZDgsIDB4YWMsIDB4ODQsIDB4NjIsIDB4NTcsCi0weDU0LCAweGNhLCAweDhmLCAweGU2LCAweDgwLCAweDZlLCAweDc2LCAweGZlLAotMHg3NSwgMHhmZCwgMHg3MSwgMHgyYywgMHhiOSwgMHgxNCwgMHhmNiwgMHgzMSwKLTB4NDYsIDB4NzQsIDB4MzIsIDB4NTIsIDB4YjAsIDB4MDMsIDB4ZmMsIDB4YTcsCi0weDg0LCAweGI2LCAweDNkLCAweGM0LCAweDg4LCAweDhkLCAweDg1LCAweDZhLAotMHgxMywgMHgwMSwgMHgyMCwgMHgwOCwgMHhmOCwgMHhiZiwgMHg5NywgMHhkNCwKLTB4M2YsIDB4MGMsIDB4ZGYsIDB4NjEsIDB4NmEsIDB4NmEsIDB4NWEsIDB4MTksCi0weDM0LCAweGY4LCAweDFmLCAweGRlLCAweDVmLCAweDk5LCAweGZmLCAweGYwLAotMHg0MCwgMHgxYywgMHgyNywgMHhjMSwgMHhiNiwgMHgyMSwgMHg1ZiwgMHhhZiwKLTB4MzEsIDB4ZmIsIDB4Y2YsIDB4MzEsIDB4NDMsIDB4YWYsIDB4NWYsIDB4NTIsCi0weDNlLCAweDNmLCAweDlhLCAweDdjLCAweDdmLCAweDIwLCAweDhmLCAweDZhLAotMHg3MywgMHhmNywgMHhjOCwgMHgzZCwgMHhmMCwgMHhkYSwgMHg4MSwgMHg4ZSwKLTB4NjMsIDB4ZjgsIDB4ZTksIDB4MjUsIDB4ZmYsIDB4YWYsIDB4MzIsIDB4ZmMsCi0weGU3LCAweDNkLCAweDFjLCAweDM2LCAweDJmLCAweGY3LCAweDM0LCAweGU2LAotMHg1NywgMHhlZCwgMHg0MiwgMHgwZCwgMHg3NiwgMHg4YiwgMHg3MSwgMHgwNSwKLTB4NDgsIDB4ZmUsIDB4NWYsIDB4YzgsIDB4N2YsIDB4OTIsIDB4YTUsIDB4YjcsCi0weDNiLCAweGRlLCAweDg2LCAweDRlLCAweDM1LCAweDNhLCAweGRkLCAweDdhLAotMHgwNiwgMHgxNSwgMHhkZCwgMHhmNSwgMHg3YiwgMHhhMywgMHhmZiwgMHgzNiwKLTB4MDIsIDB4OWUsIDB4ZmYsIDB4OTcsIDB4NWQsIDB4ODYsIDB4ZmYsIDB4OWMsCi0weDA0LCAweDc2LCAweGJlLCAweDhjLCAweGYzLCAweDZiLCAweDBhLCAweDg2LAotMHhkOSwgMHg0MiwgMHg5YywgMHg1MywgMHg4YywgMHg5OSwgMHhlYywgMHgzZiwKLTB4MmMsIDB4NTAsIDB4ZmYsIDB4ODQsIDB4ZjIsIDB4OWYsIDB4NzQsIDB4MGMsCi0weDU3LCAweDQwLCAweDk2LCAweGNhLCAweDc5LCAweDA2LCAweGZiLCAweDBmLAotMHhiYiwgMHg4NiwgMHhkNywgMHg2NiwgMHg2MCwgMHgzNywgMHg4ZSwgMHhkOSwKLTB4NzksIDB4NjgsIDB4ODMsIDB4M2EsIDB4YTUsIDB4OWEsIDB4ZmQsIDB4NDcsCi0weGE0LCAweDJkLCAweDgwLCAweGQ1LCAweGI5LCAweGM4LCAweDMxLCAweDdhLAotMHg4MCwgMHgyZCwgMHgzNCwgMHhiOSwgMHgwOCwgMHg1NCwgMHhiMywgMHhmZiwKLTB4NDQsIDB4Y2UsIDB4YzIsIDB4YzcsIDB4YTQsIDB4MTMsIDB4ZDYsIDB4OTgsCi0weDkxLCAweGQzLCAweGYwLCAweDMxLCAweGVkLCAweDg0LCAweGM3LCAweGE2LAotMHg2NywgMHhlZiwgMHhmZiwgMHhmNSwgMHhhZiwgMHgxNywgMHg2OSwgMHhmZiwKLTB4ZjksIDB4ZGUsIDB4NDUsIDB4ZGQsIDB4N2YsIDB4ZjYsIDB4MGMsIDB4NWYsCi0weDU1LCAweGNlLCAweGJmLCAweDZhLCAweGNiLCAweDlkLCAweDI3LCAweGNlLAotMHhmYSwgMHhmZSwgMHgzMywgMHgwYiwgMHhiZCwgMHhiZSwgMHg2NiwgMHhhMiwKLTB4N2IsIDB4MzYsIDB4ZmUsIDB4NWYsIDB4MGUsIDB4ZjgsIDB4NzIsIDB4MTUsCi0weGZiLCAweDRmLCAweDQ1LCAweDUwLCAweDY0LCAweGZmLCAweGExLCAweDMzLAotMHhkZiwgMHg3ZiwgMHg3NiwgMHhjNywgMHg0MywgMHhkNSwgMHhmYiwgMHhjZiwKLTB4YTcsIDB4M2UsIDB4Y2QsIDB4ZmQsIDB4ZTcsIDB4OTMsIDB4OTUsIDB4ZWMsCi0weDNmLCAweGE1LCAweDY2LCAweDFmLCAweDBlLCAweDBlLCAweDU0LCAweDM4LAotMHhmZiwgMHgyYSwgMHg4YSwgMHgwZiwgMHgzMCwgMHhmNSwgMHhkNCwgMHg2OSwKLTB4ZmUsIDB4YmUsIDB4ZmYsIDB4M2YsIDB4ZWQsIDB4M2YsIDB4YmUsIDB4ZmYsCi0weGQ3LCAweDE3LCAweDY4LCAweGZmLCAweGExLCAweDlmLCAweGI3LCAweGZkLAotMHhlNywgMHgyYiwgMHgxNywgMHg3ZCwgMHhmZiwgMHhmOSwgMHgxYSwgMHgwZSwKLTB4YzgsIDB4ZTcsIDB4NjYsIDB4ZmYsIDB4YTksIDB4OTAsIDB4MTgsIDB4YjcsCi0weGQ4LCAweGZmLCAweGViLCAweDIyLCAweGVjLCAweDNmLCAweGIzLCAweGNhLAotMHhhZiwgMHg1YSwgMHhjOSwgMHhmZiwgMHg2YiwgMHg2NiwgMHhmZiwgMHhmNywKLTB4YjIsIDB4ZjksIDB4NjEsIDB4ODMsIDB4ZTAsIDB4OTEsIDB4ODAsIDB4ZmQsCi0weDQ3LCAweDJkLCAweDYzLCAweGZmLCAweDI5LCAweGVkLCAweGNmLCAweDQwLAotMHhmYywgMHg5ZiwgMHgzMiwgMHhjZCwgMHgyNiwgMHhjMSwgMHg0NCwgMHg3OCwKLTB4OTIsIDB4ZmQsIDB4NjcsIDB4NzYsIDB4ZmUsIDB4NWYsIDB4M2UsIDB4ZmYsCi0weDgxLCAweDhiLCAweGI0LCAweGZmLCAweDU0LCAweGYxLCAweGZmLCAweDJhLAotMHgxYiwgMHhmZiwgMHgzMCwgMHg1MSwgMHg0NSwgMHhmZiwgMHhmOCwgMHhmNiwKLTB4MWYsIDB4ZWYsIDB4ZmUsIDB4NzMsIDB4NTksIDB4ZmYsIDB4YWYsIDB4MmEsCi0weGYxLCAweDdmLCAweGRhLCAweGNhLCAweGYwLCAweDFmLCAweDE5LCAweGYwLAotMHg4YywgMHgyMSwgMHhjZCwgMHhiMywgMHhiMywgMHhmZiwgMHgyYywgMHgyYywKLTB4ZTcsIDB4ZmYsIDB4OTUsIDB4YTgsIDB4YmEsIDB4N2UsIDB4MzksIDB4ZjYsCi0weDFmLCAweGM5LCAweGZmLCAweGViLCAweDEyLCAweDQ5LCAweGZmLCAweDdjLAotMHhlOCwgMHgzNywgMHg3YiwgMHgzMSwgMHhiNywgMHgwOCwgMHgzMSwgMHg1MCwKLTB4YzYsIDB4ZmUsIDB4NTMsIDB4ZjUsIDB4N2QsIDB4OTksIDB4ZmQsIDB4YzcsCi0weGNmLCAweDNmLCAweDY4LCAweGQxLCAweDZhLCAweGZhLCAweGM3LCAweDc1LAotMHhjZCwgMHhhOCwgMHhlMCwgMHhmZiwgMHg1NSwgMHgxNiwgMHg0YywgMHgzZSwKLTB4MjYsIDB4YzcsIDB4ZmYsIDB4OTEsIDB4ZjksIDB4MGYsIDB4MDksIDB4MWMsCi0weDljLCAweDNkLCAweDI1LCAweGZkLCAweGUxLCAweDg5LCAweGYyLCAweGY2LAotMHg5ZiwgMHhmNywgMHg0NSwgMHg3NiwgMHhmOCwgMHg1OSwgMHhmYiwgMHg3ZiwKLTB4N2QsIDB4NTQsIDB4MWEsIDB4ZDgsIDB4YTcsIDB4YWEsIDB4ZmYsIDB4NTcsCi0weDAwLCAweGQ0LCAweDRkLCAweGYwLCAweDA4LCAweDM2LCAweDVmLCAweDJkLAotMHhlNywgMHhmZiwgMHhiNSwgMHhiOSwgMHhlMiwgMHg3OCwgMHgyMywgMHg5YiwKLTB4ZGYsIDB4YWEsIDB4NGYsIDB4YjUsIDB4OTYsIDB4ZjgsIDB4N2YsIDB4YjksCi0weGY2LCAweDlmLCAweDliLCAweGE1LCAweGYzLCAweDNlLCAweDA0LCAweDA2LAotMHg4MiwgMHhjMywgMHhlNSwgMHhmYywgMHhiZiwgMHhmOCwgMHhkYiwgMHhkMSwKLTB4NDAsIDB4M2UsIDB4YjgsIDB4MzUsIDB4ZDIsIDB4ODksIDB4ODYsIDB4YzQsCi0weDdmLCAweGJlLCAweDI5LCAweDQ2LCAweDRiLCAweGQ5LCAweGIwLCAweDg3LAotMHhjOCwgMHg3ZiwgMHgwYSwgMHg0NSwgMHhmNywgMHg3ZiwgMHgwYSwgMHgxMCwKLTB4YTQsIDB4M2QsIDB4YzcsIDB4MDUsIDB4ZDgsIDB4MmUsIDB4MmUsIDB4NDIsCi0weGViLCAweDhmLCAweDQwLCAweDZiLCAweDkwLCAweGZmLCAweDljLCAweDY0LAotMHhmMSwgMHgwZiwgMHg2OSwgMHhhNSwgMHhmNSwgMHgzZCwgMHgzZiwgMHg2MiwKLTB4MTgsIDB4YzIsIDB4YmUsIDB4ZWEsIDB4OGUsIDB4MWYsIDB4MzcsIDB4ZmUsCi0weDhmLCAweDE0LCAweDJkLCAweGI5LCAweDQ5LCAweDMyLCAweDA0LCAweDhkLAotMHgxMCwgMHg2NiwgMHg1MSwgMHg0OSwgMHg5ZiwgMHhmNSwgMHhmNCwgMHg4OSwKLTB4NGEsIDB4YzUsIDB4ZjgsIDB4OTksIDB4NWIsIDB4NmUsIDB4OWEsIDB4YmMsCi0weDAxLCAweDA3LCAweDI5LCAweGI3LCAweGQ4LCAweDk0LCAweDhmLCAweGZmLAotMHg2YywgMHgxNCwgMHgwZiwgMHg4MywgMHg0ZiwgMHhkMiwgMHg2ZSwgMHhmZiwKLTB4ZjgsIDB4ZmUsIDB4NWYsIDB4NWUsIDB4YmMsIDB4Y2QsIDB4NjYsIDB4N2YsCi0weGUwLCAweGU5LCAweDVlLCAweGEyLCAweGQ4LCAweDgzLCAweGQwLCAweDMxLAotMHg4OSwgMHhmYywgMHg0YSwgMHg4YSwgMHhmZiwgMHgxMywgMHhmNywgMHhmOCwKLTB4ZjAsIDB4YmIsIDB4NjUsIDB4MGMsIDB4NDEsIDB4ZDgsIDB4M2YsIDB4OTMsCi0weDQxLCAweGZmLCAweGFmLCAweDMyLCAweDdjLCAweGY4LCAweDc1LCAweDcwLAotMHgzMywgMHhiYywgMHg5MywgMHgxMSwgMHhlMSwgMHg0MSwgMHgyOSwgMHhjNSwKLTB4ZmYsIDB4OTEsIDB4ZjIsIDB4YzMsIDB4MWEsIDB4NWUsIDB4ZmMsIDB4NjcsCi0weGM3LCAweDEwLCAweGY0LCAweDBiLCAweGVkLCAweGUxLCAweDQyLCAweDRiLAotMHhmMCwgMHhmYywgMHhlYiwgMHg1ZSwgMHhlMCwgMHhmYywgMHg2NywgMHhjYSwKLTB4YTcsIDB4M2QsIDB4MzcsIDB4NjMsIDB4YjcsIDB4N2MsIDB4MDQsIDB4NGUsCi0weGM2LCAweGI0LCAweDgzLCAweDM0LCAweDU1LCAweDc0LCAweGZlLCAweDE1LAotMHhhZiwgMHgzNiwgMHgxZiwgMHhjZCwgMHg4ZiwgMHg3NCwgMHg3MSwgMHg5ZSwKLTB4ZTgsIDB4YzcsIDB4M2YsIDB4OGMsIDB4NTYsIDB4YTksIDB4ZmYsIDB4MWUsCi0weDFjLCAweDFjLCAweGU2LCAweGZkLCAweGVmLCAweGM3LCAweDc3LCAweDNhLAotMHg1MCwgMHhhYywgMHg0ZiwgMHg1NiwgMHg2ZCwgMHhmMSwgMHhmZCwgMHg0ZiwKLTB4MGYsIDB4ZjEsIDB4ZjMsIDB4ZjQsIDB4MGEsIDB4ZjEsIDB4OWYsIDB4Y2IsCi0weGYyLCAweDlmLCAweDg3LCAweGM1LCAweDhiLCAweDRiLCAweGYxLCAweDlmLAotMHg4MywgMHhmNywgMHgwZiwgMHg4YiwgMHhlMywgMHhiOSwgMHg4ZCwgMHgwOCwKLTB4MGIsIDB4OWIsIDB4Y2YsIDB4N2YsIDB4MGEsIDB4ZWEsIDB4ZDMsIDB4N2EsCi0weDY1LCAweGZlLCAweDgzLCAweDAzLCAweGYzLCAweGI5LCAweDJhLCAweGYxLAotMHgwZiwgMHg0YiwgMHg4MCwgMHg1NiwgMHhjYSwgMHg3ZiwgMHhmYywgMHhmNSwKLTB4ZWUsIDB4MWQsIDB4OWIsIDB4ODEsIDB4ODYsIDB4MTksIDB4ZjgsIDB4NGYsCi0weDdjLCAweDkxLCAweGViLCAweGVkLCAweGZlLCAweDBlLCAweDA3LCAweDIyLAotMHhmZSwgMHgxZSwgMHgxNSwgMHg4NiwgMHgyMCwgMHhiYiwgMHg2YSwgMHg3ZSwKLTB4NTgsIDB4MGUsIDB4NmEsIDB4YTUsIDB4ZmEsIDB4ZjgsIDB4ODQsIDB4ZTEsCi0weDYyLCAweGZmLCAweDJmLCAweDA4LCAweGYwLCAweDFmLCAweDdjLCAweGJlLAotMHhiOCwgMHhmZiwgMHhiMywgMHhkOSwgMHgyOSwgMHhjOSwgMHgxNiwgMHhmOSwKLTB4N2YsIDB4MGQsIDB4ODIsIDB4Y2IsIDB4N2YsIDB4OWEsIDB4YzUsIDB4NmIsCi0weDM2LCAweDQ4LCAweGVmLCAweDViLCAweGQwLCAweDRlLCAweDk3LCAweGM0LAotMHg3ZiwgMHhhZSwgMHhjNiwgMHg2NywgMHhjZSwgMHhlYywgMHg3MiwgMHgzYywKLTB4ZTIsIDB4Y2IsIDB4ZGEsIDB4N2YsIDB4NDQsIDB4MzYsIDB4ZDgsIDB4MzUsCi0weGZlLCAweGI1LCAweGYwLCAweGM4LCAweGFmLCAweGUxLCAweGE3LCAweGM1LAotMHhlNywgMHg1ZiwgMHhkNSwgMHhmMywgMHhjMywgMHg2YSwgMHg2MywgMHhjNSwKLTB4ZmMsIDB4ZTcsIDB4NWUsIDB4MjgsIDB4YmEsIDB4ZmYsIDB4ZmMsIDB4MjcsCi0weDdhLCAweDkzLCAweGVjLCAweGZmLCAweGQ1LCAweDU2LCAweDE0LCAweGZmLAotMHg2NywgMHg3NywgMHhmOSwgMHhmYywgMHhiMCwgMHhhMiwgMHgzZiwgMHg0ZiwKLTB4OGMsIDB4MDksIDB4ZmYsIDB4YWYsIDB4YjQsIDB4MTQsIDB4ZmYsIDB4YjksCi0weDNjLCAweGZmLCAweGYxLCAweGZjLCAweGQ3LCAweDA0LCAweDExLCAweDkyLAotMHhlMiwgMHgxZiwgMHhjMiwgMHgyZSwgMHhlYSwgMHg1NywgMHg1MywgMHg4YSwKLTB4NjgsIDB4OWUsIDB4ZTIsIDB4ZGEsIDB4N2YsIDB4ZmMsIDB4ZjgsIDB4ODcsCi0weGQyLCAweDc4LCAweDMzLCAweDljLCAweGM0LCAweDdjLCAweGQyLCAweGMwLAotMHgzYiwgMHg1MCwgMHhlYywgMHhmZiwgMHgyNSwgMHhlNSwgMHg4NywgMHhmZCwKLTB4YzgsIDB4ZjYsIDB4NjksIDB4MGYsIDB4YmQsIDB4NGUsIDB4ZjgsIDB4N2YsCi0weGZkLCAweDVkLCAweDMxLCAweGZmLCAweDkxLCAweGY2LCAweGUzLCAweDA1LAotMHgwZSwgMHhlNCwgMHhmOCwgMHhhYiwgMHhhNywgMHg5NCwgMHgxMSwgMHhhMSwKLTB4YmEsIDB4MGYsIDB4N2EsIDB4ZTMsIDB4ODEsIDB4ZjgsIDB4NDEsIDB4ZGEsCi0weGE3LCAweDc1LCAweDMxLCAweDdmLCAweDk1LCAweDIzLCAweGZhLCAweDhiLAotMHhlNCwgMHgyZiwgMHg4NCwgMHg2MSwgMHg2NCwgMHhiYiwgMHhlMywgMHhmZiwKLTB4ZTUsIDB4M2UsIDB4MWUsIDB4YjQsIDB4MzEsIDB4OGYsIDB4ZmYsIDB4ODgsCi0weGZjLCAweGIwLCAweDczLCAweDI1LCAweGZlLCAweGYzLCAweDFiLCAweDc4LAotMHg1NSwgMHg4MCwgMHg4MywgMHhkZSwgMHhmZCwgMHhlNywgMHgzNiwgMHg1ZiwKLTB4ZmYsIDB4YzgsIDB4ZjksIDB4NDAsIDB4MTUsIDB4NjcsIDB4NTksIDB4NzcsCi0weGY5LCAweGNmLCAweDc2LCAweGY3LCAweDdkLCAweGNkLCAweDQ3LCAweDdmLAotMHhkYywgMHhlZiwgMHhhYywgMHg1NiwgMHg2ZiwgMHhjMSwgMHhmYiwgMHhhMywKLTB4MDgsIDB4Y2UsIDB4YjEsIDB4NDAsIDB4YmUsIDB4M2IsIDB4NDQsIDB4YzYsCi0weDM0LCAweGI4LCAweDMwLCAweGNhLCAweDdmLCAweDBhLCAweGU0LCAweDg3LAotMHhmNSwgMHhiNCwgMHg4ZCwgMHhjOCwgMHhlZiwgMHg3NiwgMHgzMywgMHg4YiwKLTB4ZmYsIDB4OWMsIDB4MTcsIDB4ODYsIDB4MWQsIDB4ZWIsIDB4MDcsIDB4Y2UsCi0weGZkLCAweDY3LCAweGNmLCAweGZlLCAweDkzLCAweDg3LCAweDI3LCAweDc1LAotMHhmNywgMHg3ZCwgMHhiZCwgMHg4YiwgMHg0MCwgMHhhNiwgMHhlMywgMHhmNiwKLTB4N2UsIDB4YTgsIDB4ZDQsIDB4ZmYsIDB4NGIsIDB4OGEsIDB4N2YsIDB4MzgsCi0weGM1LCAweDc3LCAweGY3LCAweDA3LCAweDI3LCAweDdjLCAweDQ1LCAweDM0LAotMHhjNSwgMHgyMywgMHhmYSwgMHgwNiwgMHhmOCwgMHg4ZiwgMHhhNiwgMHgzZSwKLTB4NDMsIDB4YmQsIDB4ZjcsIDB4ZmQsIDB4NWUsIDB4YTksIDB4NjEsIDB4ODcsCi0weDNlLCAweDUwLCAweDY4LCAweDBjLCAweGM0LCAweDdmLCAweDI2LCAweDVlLAotMHgzYywgMHhkZSwgMHhlMywgMHgzZSwgMHgxMSwgMHg3MiwgMHgwZCwgMHgyMywKLTB4ZjEsIDB4YjMsIDB4ZWUsIDB4YTMsIDB4ZGMsIDB4ZmEsIDB4YzQsIDB4NWYsCi0weGVmLCAweDRlLCAweGYzLCAweGI0LCAweDY4LCAweDhkLCAweGE3LCAweDk1LAotMHhhZiwgMHg1MywgMHg1NiwgMHgxMiwgMHgzZCwgMHgxZCwgMHhiOSwgMHg4MCwKLTB4MGIsIDB4ZmQsIDB4ZjUsIDB4ODUsIDB4NDAsIDB4ZmMsIDB4OWYsIDB4YzksCi0weGI4LCAweGU3LCAweGJmLCAweDMzLCAweGU5LCAweGRlLCAweGRmLCAweDEwLAotMHgyYiwgMHg1YSwgMHgwMywgMHhhZSwgMHg1ZiwgMHhkYSwgMHg0YiwgMHhiOSwKLTB4NTYsIDB4ZTEsIDB4ZmYsIDB4ZTUsIDB4N2UsIDB4MmYsIDB4MWIsIDB4MTYsCi0weGMzLCAweDMyLCAweDg1LCAweGIzLCAweDlkLCAweDkzLCAweGMxLCAweGI0LAotMHg2OCwgMHgzYywgMHg3MCwgMHhmMSwgMHgwZiwgMHhjNSwgMHhjMiwgMHgxNywKLTB4ZTAsIDB4M2YsIDB4OWEsIDB4YzMsIDB4N2YsIDB4OWMsIDB4ZmMsIDB4YjAsCi0weDNmLCAweDUwLCAweGJlLCAweDM5LCAweGZhLCAweGJjLCAweGMxLCAweGRkLAotMHhhMCwgMHgwZSwgMHg2OCwgMHgxMywgMHg5MCwgMHgyZiwgMHhhYywgMHg0YSwKLTB4MzUsIDB4NDksIDB4ZmMsIDB4MDcsIDB4MzYsIDB4ZmIsIDB4ZTMsIDB4ODEsCi0weGU3LCAweGNmLCAweDdkLCAweDM5LCAweGYyLCAweDNlLCAweDdjLCAweGY0LAotMHhmNCwgMHhhZCwgMHg0ZSwgMHhhMCwgMHg0OCwgMHg0NSwgMHhhYywgMHhlZiwKLTB4MWUsIDB4ZmYsIDB4YzksIDB4ZmEsIDB4ZjcsIDB4OWYsIDB4NGYsIDB4MTMsCi0weDBlLCAweDVlLCAweDhlLCAweDNjLCAweGU4LCAweDg0LCAweGVkLCAweDY1LAotMHgxZSwgMHhkZiwgMHhiNCwgMHg0YywgMHhmYywgMHg5ZiwgMHhhMywgMHhmNiwKLTB4NGQsIDB4ZGMsIDB4NmMsIDB4MTgsIDB4YmMsIDB4NDgsIDB4MWYsIDB4M2QsCi0weDFiLCAweDc5LCAweDhmLCAweDFlLCAweDFjLCAweDJlLCAweGYyLCAweGZmLAotMHg5MiwgMHhlZCwgMHgzZiwgMHhmYSwgMHgzMiwgMHgwNCwgMHgxMSwgMHg5NywKLTB4MDgsIDB4ZDUsIDB4YjksIDB4ZjYsIDB4OWYsIDB4ODAsIDB4ZmYsIDB4OTcsCi0weDYzLCAweGZmLCAweDI5LCAweGJkLCAweGZmLCAweGNjLCAweDhlLCAweDc1LAotMHg0ZSwgMHg3MSwgMHhmZiwgMHhhNiwgMHg2NCwgMHhjMCwgMHhmZiwgMHhjYiwKLTB4YjEsIDB4ZmYsIDB4NDQsIDB4MjYsIDB4ZjQsIDB4NTMsIDB4YjAsIDB4NGMsCi0weGY2LCAweGZmLCAweGZhLCAweDg2LCAweDZiLCAweGZmLCAweGE5LCAweDliLAotMHg0OCwgMHg0YiwgMHhmNiwgMHg5ZiwgMHhmOCwgMHgzMywgMHhmMSwgMHhmZiwKLTB4MjAsIDB4MzcsIDB4NGUsIDB4MzYsIDB4NGUsIDB4OTAsIDB4NTMsIDB4ZjAsCi0weDM3LCAweGUyLCAweDM2LCAweGI4LCAweDE4LCAweDNmLCAweGVjLCAweGZjLAotMHg0NSwgMHgzZiwgMHhjOCwgMHgwMSwgMHg2ZSwgMHhkNSwgMHhkZCwgMHhlNywKLTB4MWYsIDB4YjcsIDB4NWYsIDB4ODYsIDB4YTMsIDB4YjAsIDB4MDYsIDB4M2IsCi0weDYxLCAweGUxLCAweGM3LCAweGI0LCAweGEyLCAweDIzLCAweDU4LCAweGY5LAotMHhmMywgMHgyZiwgMHgzNywgMHgzMCwgMHhjNSwgMHg2MiwgMHg4ZiwgMHgxMSwKLTB4YjksIDB4MjUsIDB4YzUsIDB4ZjksIDB4MmYsIDB4YmUsIDB4Y2EsIDB4MGUsCi0weDQ5LCAweDVkLCAweGRhLCAweDE2LCAweDQ4LCAweDg0LCAweGMxLCAweDAzLAotMHg2MywgMHg4MiwgMHgxZiwgMHhmZiwgMHhkOSwgMHhlNywgMHgzZiwgMHg2OSwKLTB4ZmYsIDB4YmMsIDB4YzYsIDB4OWQsIDB4MmYsIDB4YTcsIDB4NWMsIDB4NTAsCi0weDY0LCAweGZmLCAweDE5LCAweDY1LCAweGFiLCAweDdmLCAweGRhLCAweDNiLAotMHgwZiwgMHg5MiwgMHgzZCwgMHhjMiwgMHhmMiwgMHhkNywgMHg4YSwgMHhhYiwKLTB4NDEsIDB4ZWUsIDB4ZjMsIDB4ODUsIDB4ZmQsIDB4NjcsIDB4NzEsIDB4YTEsCi0weGIxLCAweGRkLCAweGU1LCAweDNmLCAweDEzLCAweDExLCAweGMxLCAweDg4LAotMHhhZSwgMHg2MCwgMHhmMSwgMHg5ZiwgMHgzZiwgMHhjOCwgMHhmMywgMHg0MCwKLTB4ZDAsIDB4YjIsIDB4ZmQsIDB4ZTcsIDB4MTYsIDB4YjksIDB4MzcsIDB4YWUsCi0weDI4LCAweDM0LCAweGNhLCAweGYxLCAweDdmLCAweGNjLCAweDBiLCAweGZhLAotMHhhZCwgMHhlNSwgMHhlZCwgMHgzZiwgMHhiOCwgMHg0OSwgMHgyOSwgMHg0YSwKLTB4OWIsIDB4MmIsIDB4MjUsIDB4M2EsIDB4MGMsIDB4ZGEsIDB4N2YsIDB4NzQsCi0weGNmLCAweDZjLCAweDVlLCAweDdlLCAweDYzLCAweGI1LCAweDRhLCAweGY2LAotMHhmZiwgMHhhYSwgMHg2NiwgMHhmZiwgMHg0OSwgMHg3YiwgMHgyNSwgMHhjNywKLTB4NjYsIDB4YjIsIDB4ZmYsIDB4OTAsIDB4Y2YsIDB4NjQsIDB4ZmYsIDB4ZTksCi0weGFlLCAweDk4LCAweGZmLCAweGEyLCAweDQyLCAweDNlLCAweDg4LCAweGQ5LAotMHhkYSwgMHg3ZiwgMHhlMiwgMHhlNywgMHhjOCwgMHhjNSwgMHhmOSwgMHhiZiwKLTB4OTcsIDB4ZTQsIDB4ODcsIDB4MmQsIDB4ZTEsIDB4M2YsIDB4ODEsIDB4ZjUsCi0weGJhLCAweDhjLCAweGZkLCAweDA3LCAweDY2LCAweGIyLCAweGZmLCAweDc0LAotMHgwNSwgMHhlYywgMHgzZiwgMHhiYiwgMHhiNSwgMHhkOSwgMHhmOCwgMHg3ZiwKLTB4NWQsIDB4YWMsIDB4ZmQsIDB4YzcsIDB4ZjcsIDB4ZmYsIDB4MWEsIDB4OWYsCi0weDRkLCAweGZjLCAweDlmLCAweDhiLCAweGI2LCAweGZmLCAweGJjLCAweDNkLAotMHg0YiwgMHhmYiwgMHhjZiwgMHg4MiwgMHg2NywgMHhjOSwgMHg2MiwgMHhmMywKLTB4YTAsIDB4ZGUsIDB4NWEsIDB4ZTksIDB4ZmMsIDB4YWIsIDB4MDIsIDB4YTgsCi0weDkxLCAweGZjLCAweGRmLCAweDhiLCAweGUzLCAweGZmLCAweGNjLCAweDc0LAotMHhmZiwgMHg2NywgMHg1NiwgMHhmNiwgMHg5ZiwgMHgyYSwgMHhlNywgMHg1ZiwKLTB4MjUsIDB4ODAsIDB4M2MsIDB4MTYsIDB4YzgsIDB4N2YsIDB4ZjEsIDB4ZjksCi0weGM0LCAweGZmLCAweGYxLCAweGVjLCAweDNmLCAweDJkLCAweGNjLCAweGZlLAotMHg0MywgMHgyZiwgMHhjYSwgMHhmZSwgMHg1MywgMHhmYiwgMHhlMSwgMHg0MywKLTB4MzMsIDB4ZGEsIDB4N2YsIDB4N2MsIDB4ZmYsIDB4YWYsIDB4Y2IsIDB4OWUsCi0weDUxLCAweDJiLCAweGVmLCAweGJmLCAweDc0LCAweDcxLCAweGZmLCAweGE3LAotMHgzYiwgMHg2MCwgMHhmZiwgMHgzMSwgMHg4ZiwgMHhlNiwgMHgzYSwgMHg4ZiwKLTB4M2IsIDB4ZjEsIDB4N2YsIDB4NGEsIDB4ZWMsIDB4M2YsIDB4MDYsIDB4MjcsCi0weDQyLCAweDQ1LCAweGY2LCAweDFmLCAweGRkLCAweDhmLCAweGY2LCAweGUzLAotMHgzNSwgMHhmYiwgMHhlNCwgMHgyYSwgMHg2ZSwgMHgxMSwgMHhkMiwgMHgxNywKLTB4MWYsIDB4MGIsIDB4ZDgsIDB4N2YsIDB4YzYsIDB4ZTEsIDB4NDksIDB4ZjIsCi0weGEyLCAweDUyLCAweGMxLCAweGVjLCAweDczLCAweDg0LCAweDNkLCAweDhhLAotMHg4MSwgMHgyOSwgMHhjZiwgMHhmZiwgMHhjYiwgMHhhMiwgMHhhZiwgMHhhYiwKLTB4YzUsIDB4ZGEsIDB4ZTYsIDB4NzUsIDB4NGYsIDB4YzMsIDB4YzcsIDB4OWQsCi0weDlmLCAweDdjLCAweGZlLCAweGIzLCAweDM0LCAweGYxLCAweDhjLCAweDk3LAotMHhjNiwgMHg0MiwgMHgyZiwgMHg1NiwgMHg5YiwgMHhhNywgMHg1NCwgMHg4NywKLTB4ZjgsIDB4OTUsIDB4OGYsIDB4ZmYsIDB4NDMsIDB4OGEsIDB4MTcsIDB4MjYsCi0weGVmLCAweDg2LCAweDhjLCAweDFmLCAweGZmLCAweDI3LCAweGViLCAweGQ5LAotMHg3ZiwgMHhhYSwgMHhjNSwgMHhmYiwgMHhmNSwgMHhkNywgMHhlYiwgMHhjOSwKLTB4ZDEsIDB4Y2QsIDB4N2EsIDB4NzksIDB4N2IsIDB4OGUsIDB4YjcsIDB4YTIsCi0weDNkLCAweDEyLCAweGY0LCAweGZmLCAweGRhLCAweGFjLCAweDhiLCAweDQzLAotMHg5OSwgMHhiNSwgMHgyMiwgMHhiYiwgMHg0MSwgMHgxZCwgMHhhZiwgMHhhNiwKLTB4Y2MsIDB4MTAsIDB4ZmYsIDB4MDcsIDB4M2IsIDB4ZTEsIDB4MWUsIDB4MmYsCi0weGRiLCAweDA1LCAweGY2LCAweDRmLCAweGNkLCAweGU2LCAweDAzLCAweGVlLAotMHhjMSwgMHhlYiwgMHhkZSwgMHg4MCwgMHhmZiwgMHg5NywgMHhhZCwgMHg2ZCwKLTB4YTYsIDB4ZmYsIDB4MjMsIDB4M2EsIDB4YzEsIDB4Y2IsIDB4NzYsIDB4ZTEsCi0weGRkLCAweGZmLCAweDc5LCAweDk3LCAweDVkLCAweDQ0LCAweDM5LCAweDhjLAotMHhlMywgMHhhMSwgMHhjOCwgMHhmZSwgMHgyMywgMHg0OCwgMHg4ZSwgMHg5NywKLTB4ZWQsIDB4ZTIsIDB4NjMsIDB4MzcsIDB4ZWMsIDB4Y2YsIDB4YzcsIDB4ZjksCi0weDBiLCAweDZkLCAweGI3LCAweGJlLCAweDE2LCAweGUwLCAweDNmLCAweDE1LAotMHhmMiwgMHhmMSwgMHhlNSwgMHg1ZiwgMHhmZiwgMHg1ZCwgMHhlNywgMHhlMywKLTB4NmIsIDB4ZDUsIDB4YzEsIDB4Y2QsIDB4OGUsIDB4YTcsIDB4OGQsIDB4MmEsCi0weDJkLCAweDMwLCAweDg2LCAweDI1LCAweDFlLCAweGY4LCAweDRjLCAweGNmLAotMHgwZiwgMHhmMywgMHgyMSwgMHg3ZSwgMHg5ZSwgMHhmOSwgMHgxMCwgMHhjZCwKLTB4YTIsIDB4MTIsIDB4YTgsIDB4OTQsIDB4MGYsIDB4NzEsIDB4NDEsIDB4YTEsCi0weGY0LCAweGIxLCAweDBmLCAweGE3LCAweDEwLCAweGZjLCAweDY1LCAweGY5LAotMHg3YywgMHg4OCwgMHg3YSwgMHg5OSwgMHg4ZSwgMHhhNCwgMHgwYywgMHg5OCwKLTB4ZTUsIDB4ZmIsIDB4NWYsIDB4MmYsIDB4ZDMsIDB4ZWQsIDB4YTMsIDB4MGMsCi0weDk4LCAweGU1LCAweGYzLCAweDIxLCAweDQ2LCAweDBiLCAweDk1LCAweGZiLAotMHgzYywgMHhjYywgMHg4NywgMHg1OCwgMHgxZCwgMHhmYywgMHgyMSwgMHhkNywKLTB4ZmYsIDB4MDIsIDB4ZTcsIDB4MjMsIDB4ZDcsIDB4N2UsIDB4NGMsIDB4MWYsCi0weDNhLCAweDFhLCAweDUyLCAweDBiLCAweGYzLCAweGMzLCAweGNhLCAweGZkLAotMHhmZiwgMHg3MCwgMHhlYSwgMHhmMywgMHhlZCwgMHg3ZiwgMHg3YiwgMHhkNiwKLTB4ZmEsIDB4OTAsIDB4MjksIDB4M2QsIDB4ZmUsIDB4YjQsIDB4MzAsIDB4M2YsCi0weDZjLCAweDkxLCAweDg0LCAweGZhLCAweGYwLCAweGY3LCAweGJjLCAweGZlLAotMHhiZSwgMHhhZSwgMHhjOCwgMHgxNiwgMHhmMywgMHg4OCwgMHg3ZSwgMHgxMywKLTB4YTgsIDB4NTksIDB4MDEsIDB4ZTIsIDB4ZWEsIDB4YmUsIDB4YzgsIDB4NTYsCi0weDczLCAweDQ4LCAweGJmLCAweDJmLCAweGRlLCAweGYwLCAweDJhLCAweDAzLAotMHg5OSwgMHhmOSwgMHhmNCwgMHhiMiwgMHg0MiwgMHhiYiwgMHg1NywgMHhiZiwKLTB4YjcsIDB4NDcsIDB4ZGQsIDB4NGEsIDB4ODYsIDB4Y2MsIDB4M2IsIDB4NzUsCi0weDcwLCAweDgxLCAweDNhLCAweGM1LCAweDQxLCAweGI3LCAweDllLCAweDk4LAotMHgyMiwgMHhhMiwgMHgyNCwgMHg1MSwgMHg4OCwgMHhiOSwgMHg3YywgMHgxNSwKLTB4NmMsIDB4ODUsIDB4MTgsIDB4NzYsIDB4YmYsIDB4ZDEsIDB4YTQsIDB4ZDEsCi0weDYxLCAweDAxLCAweDkyLCAweDc0LCAweDNiLCAweDY5LCAweDQxLCAweDMwLAotMHhkZiwgMHgyOSwgMHhiMSwgMHhmMCwgMHgyNywgMHhkYiwgMHhmMCwgMHg5ZSwKLTB4NmYsIDB4MDMsIDB4YjEsIDB4NjAsIDB4MTAsIDB4ZTYsIDB4YzEsIDB4NGUsCi0weDViLCAweDAwLCAweDRkLCAweDQ1LCAweDQwLCAweDA2LCAweDk1LCAweDc5LAotMHg0OSwgMHg3NSwgMHg5NCwgMHg2YywgMHgyNCwgMHg4MywgMHhiMCwgMHgwMSwKLTB4MTIsIDB4NTIsIDB4ZmQsIDB4N2QsIDB4ODMsIDB4NTcsIDB4ZGUsIDB4NDgsCi0weDZlLCAweGIzLCAweGQ3LCAweDc1LCAweGQxLCAweDMxLCAweDc1LCAweDFiLAotMHgxOSwgMHhiMiwgMHhlZiwgMHgzNCwgMHgxMiwgMHgwNywgMHgzOCwgMHg5OCwKLTB4OGYsIDB4ODAsIDB4MjAsIDB4YzgsIDB4NjMsIDB4NDksIDB4YTEsIDB4ZGQsCi0weDZiLCAweGNmLCAweGJlLCAweDJlLCAweGQzLCAweGQwLCAweDM1LCAweGFhLAotMHgxMCwgMHhmYywgMHg5ZiwgMHgyYywgMHg0OCwgMHg5YSwgMHgzNSwgMHg0MCwKLTB4ODYsIDB4YzEsIDB4YjIsIDB4OTMsIDB4ZDAsIDB4MDcsIDB4YzQsIDB4YTYsCi0weDA2LCAweDAyLCAweDJjLCAweGIxLCAweGZkLCAweGY3LCAweGRkLCAweGQ3LAotMHg0ZiwgMHhlZiwgMHgyNiwgMHg0OSwgMHhiYiwgMHhjZiwgMHg4MCwgMHgzMSwKLTB4ZGEsIDB4NGEsIDB4MzQsIDB4M2IsIDB4NmQsIDB4ZTgsIDB4NjMsIDB4ZDQsCi0weDEwLCAweGMwLCAweGE2LCAweDE2LCAweGQxLCAweDgwLCAweDAxLCAweGE5LAotMHhmZSwgMHgyYSwgMHg3NSwgMHg2ZCwgMHg3NiwgMHgyMCwgMHhiZiwgMHhiZSwKLTB4OGQsIDB4Y2UsIDB4NTUsIDB4ZDMsIDB4ZDksIDB4Y2MsIDB4ZTksIDB4ODEsCi0weGI2LCAweDQ0LCAweDlkLCAweGRhLCAweDM1LCAweDlhLCAweGM5LCAweDIzLAotMHhhOCwgMHg1MSwgMHhjZCwgMHhkMSwgMHg4YywgMHgxMSwgMHhiZiwgMHg0NSwKLTB4MDUsIDB4YmYsIDB4M2QsIDB4ZjYsIDB4MDIsIDB4MzIsIDB4MDcsIDB4ZDYsCi0weDE3LCAweDEyLCAweDE5LCAweDdhLCAweDM5LCAweGI5LCAweDEzLCAweDQxLAotMHg2YywgMHg4YiwgMHgzYSwgMHg0NCwgMHhkNiwgMHhjMSwgMHg0MCwgMHgyMSwKLTB4OTEsIDB4NTIsIDB4ZmYsIDB4OTQsIDB4NDQsIDB4MTgsIDB4NTgsIDB4NGEsCi0weDNkLCAweGYzLCAweDBmLCAweGQ2LCAweDY3LCAweDFhLCAweGEwLCAweDA5LAotMHhhOCwgMHhhZCwgMHg1MywgMHhhNiwgMHhmOSwgMHg0YywgMHgwMiwgMHgzMSwKLTB4ODAsIDB4NmUsIDB4MWIsIDB4YjUsIDB4OTcsIDB4NGUsIDB4MjgsIDB4YWEsCi0weDg2LCAweGE0LCAweDRkLCAweDc1LCAweGU4LCAweDkyLCAweGZhLCAweGM3LAotMHg1MiwgMHgzNCwgMHg2MCwgMHgxZCwgMHg5ZCwgMHhjYywgMHgzMywgMHgwMCwKLTB4MmQsIDB4YTgsIDB4NDMsIDB4MzgsIDB4MzAsIDB4NmMsIDB4Y2QsIDB4YTgsCi0weDcxLCAweDQwLCAweDk3LCAweGQ0LCAweDNmLCAweDE5LCAweDc1LCAweDExLAotMHhmOSwgMHg2MywgMHhkOCwgMHg2MCwgMHhjNiwgMHg3MywgMHg2NCwgMHgxMywKLTB4MDcsIDB4ODksIDB4OWMsIDB4NmEsIDB4YzEsIDB4NjEsIDB4ZDYsIDB4ZWQsCi0weDM5LCAweGQ1LCAweDIwLCAweDg3LCAweGUxLCAweDZiLCAweGQ4LCAweGZmLAotMHhkMiwgMHhmYiwgMHg5YSwgMHgxMSwgMHhmNiwgMHg5OSwgMHg2ZSwgMHhjNCwKLTB4MTYsIDB4NDUsIDB4NTgsIDB4YjUsIDB4YWYsIDB4YzEsIDB4NmQsIDB4NzYsCi0weGU0LCAweDZlLCAweDJjLCAweGI5LCAweDg5LCAweDFkLCAweDI1LCAweDIxLAotMHhiMCwgMHhlNywgMHgyMSwgMHg5MCwgMHhjNiwgMHg0ZiwgMHg5YSwgMHhhNiwKLTB4ZWMsIDB4YTgsIDB4ZDEsIDB4YWQsIDB4NjksIDB4YzMsIDB4MzQsIDB4OTUsCi0weDY1LCAweDQwLCAweGRmLCAweGNiLCAweDQxLCAweDFmLCAweDAyLCAweDcwLAotMHg0YSwgMHhhNCwgMHhlZiwgMHg4NSwgMHg5MiwgMHhjMiwgMHgzZCwgMHg1NSwKLTB4ODQsIDB4OGQsIDB4MGMsIDB4MDcsIDB4MTQsIDB4MzgsIDB4NTAsIDB4ZDgsCi0weDYxLCAweDhiLCAweDViLCAweDIyLCAweGY1LCAweDhmLCAweDQyLCAweDUyLAotMHhmNiwgMHg2YSwgMHhhMywgMHg5OSwgMHg4ZCwgMHgyZSwgMHgwNiwgMHhkNiwKLTB4NjksIDB4NzQsIDB4MmYsIDB4NDksIDB4NGQsIDB4ZjIsIDB4OTIsIDB4ODMsCi0weDBjLCAweGE0LCAweGIwLCAweDQ0LCAweGFhLCAweGJmLCAweDJmLCAweGFkLAotMHg1YSwgMHhkOSwgMHg0MSwgMHg2MywgMHgwMywgMHhkMCwgMHg2MSwgMHgwMSwKLTB4YjQsIDB4MDQsIDB4ODIsIDB4NDksIDB4MGUsIDB4NDYsIDB4MDgsIDB4NGMsCi0weDBlLCAweGE2LCAweDEwLCAweGQ4LCAweDUyLCAweGZmLCAweGE0LCAweDc5LAotMHhjZiwgMHhmMSwgMHgyZSwgMHgwNCwgMHgxNywgMHgxOCwgMHhmOCwgMHg0NiwKLTB4MGMsIDB4NTAsIDB4MDYsIDB4MjIsIDB4MWEsIDB4YzgsIDB4ZWYsIDB4YmIsCi0weDk2LCAweDVhLCAweGQ5LCAweGE0LCAweGQxLCAweGQ3LCAweDBmLCAweDNiLAotMHgxMCwgMHg1YywgMHg4MiwgMHhhZiwgMHgxOSwgMHgxYiwgMHhhNiwgMHg5YiwKLTB4ZDgsIDB4ZmIsIDB4ZjYsIDB4YzcsIDB4NzYsIDB4NTAsIDB4ODMsIDB4YmQsCi0weDZmLCAweDdmLCAweGNjLCAweDhlLCAweDQ5LCAweGRmLCAweDRiLCAweDFkLAotMHgyNCwgMHgxYiwgMHg2MCwgMHgzZCwgMHg4ZSwgMHg0NSwgMHgwZSwgMHgxMiwKLTB4NzYsIDB4MDIsIDB4NGIsIDB4NjgsIDB4MWYsIDB4OTYsIDB4MjAsIDB4ZDAsCi0weDcwLCAweDk4LCAweGM2LCAweGVjLCAweDg0LCAweDI5LCAweDhkLCAweDlmLAotMHgxYSwgMHhiMiwgMHhkNSwgMHgxZSwgMHhiMCwgMHgxMiwgMHhlMywgMHhiNCwKLTB4ODYsIDB4NzQsIDB4ZDksIDB4MTksIDB4MmIsIDB4OWUsIDB4NTQsIDB4NGIsCi0weDAxLCAweDE4LCAweGRlLCAweDkyLCAweDU0LCAweDY4LCAweGMyLCAweDRkLAotMHhiMywgMHg2NiwgMHgwMCwgMHhiNiwgMHgwNywgMHhhNywgMHg0MCwgMHg5NywKLTB4OTgsIDB4MGIsIDB4ZDQsIDB4YzYsIDB4NDksIDB4ZDEsIDB4NGYsIDB4OWIsCi0weGIwLCAweDg0LCAweDAzLCAweGVmLCAweDc4LCAweDAxLCAweGRiLCAweGQzLAotMHhhNywgMHhjNCwgMHhiMiwgMHhhMywgMHg1NiwgMHg0YiwgMHgzMiwgMHhkOSwKLTB4MTcsIDB4YjksIDB4YzMsIDB4M2UsIDB4NjQsIDB4ZGQsIDB4OTAsIDB4NmMsCi0weDYwLCAweDYwLCAweDhhLCAweDgzLCAweDM5LCAweDRlLCAweDg5LCAweGQ0LAotMHg5ZSwgMHhhOSwgMHgzZSwgMHhiMiwgMHgzNSwgMHgzYiwgMHg2NCwgMHhkZCwKLTB4YTksIDB4NWYsIDB4YjYsIDB4NWYsIDB4ZTUsIDB4MjAsIDB4OTksIDB4NjAsCi0weGUwLCAweGIwLCAweGU5LCAweDgwLCAweDIzLCAweGQ2LCAweDdkLCAweGM5LAotMHg4NCwgMHhhYywgMHg0ZiwgMHhiMCwgMHhiZSwgMHgzZCwgMHg2NCwgMHhkZCwKLTB4OTQsIDB4NmMsIDB4ZDgsIDB4MWYsIDB4ZDksIDB4NmEsIDB4MWYsIDB4NzEsCi0weDQwLCAweDU2LCAweDk0LCAweDM0LCAweGIzLCAweDlmLCAweGU2LCAweDI3LAotMHgxYiwgMHgwYSwgMHgzMSwgMHhhOSwgMHgzZSwgMHhlNSwgMHg4ZiwgMHgxZCwKLTB4ODQsIDB4ZmQsIDB4MDksIDB4MDYsIDB4ZTYsIDB4YjMsIDB4YzcsIDB4ZGUsCi0weGYxLCAweDUwLCAweDk0LCAweGZmLCAweDQ3LCAweGQwLCAweDkyLCAweDhkLAotMHg1YSwgMHhjYiwgMHg5MywgMHhlYiwgMHgyNSwgMHhmZCwgMHgwMywgMHg2YywKLTB4M2MsIDB4ZjQsIDB4YjcsIDB4MzQsIDB4NjksIDB4ZWEsIDB4YjAsIDB4YWMsCi0weDg4LCAweDg2LCAweDdjLCAweDgwLCAweDAzLCAweGMzLCAweDk2LCAweDQ2LAotMHgxYiwgMHhlYiwgMHhiNCwgMHg0MSwgMHg2YiwgMHg1ZSwgMHgzMiwgMHhiZSwKLTB4OWQsIDB4NmMsIDB4ZTQsIDB4NDAsIDB4OTUsIDB4NDAsIDB4NGIsIDB4NzYsCi0weGQwLCAweGRhLCAweDkwLCAweDU0LCAweGE1LCAweGZhLCAweGJkLCAweDY2LAotMHgyMiwgMHg0NSwgMHg1NiwgMHhjMywgMHgzYSwgMHgxYywgMHhmZiwgMHhlYSwKLTB4MTYsIDB4MzIsIDB4MDQsIDB4Y2IsIDB4MjEsIDB4NTEsIDB4ZTAsIDB4ZTAsCi0weDRlLCAweDA0LCAweDI0LCAweGU1LCAweDAwLCAweGJmLCAweDNkLCAweGJkLAotMHgzOCwgMHg3ZSwgMHhmMiwgMHg1YSwgMHg5YiwgMHg1MiwgMHgwNywgMHg1YywKLTB4ZWQsIDB4ZTAsIDB4MTQsIDB4MjQsIDB4M2UsIDB4NjAsIDB4ZmEsIDB4ODcsCi0weDAxLCAweDY5LCAweDNjLCAweGY0LCAweGFlLCAweGE0LCAweGQ2LCAweGI3LAotMHg3MSwgMHhmYywgMHhkNCwgMHhiMSwgMHhkMSwgMHg4NSwgMHgxZiwgMHgyZSwKLTB4YWQsIDB4ZTksIDB4MTIsIDB4YjAsIDB4MDQsIDB4OTAsIDB4ZWIsIDB4NzcsCi0weDVkLCAweDk5LCAweGU5LCAweDFhLCAweDY4LCAweDVhLCAweDhmLCAweGVjLAotMHg1MywgMHgzNSwgMHhiMywgMHgxOSwgMHg2MywgMHg0MCwgMHg4YiwgMHgzMSwKLTB4NzAsIDB4MDcsIDB4ODIsIDB4NDQsIDB4MjQsIDB4OTEsIDB4YjEsIDB4NTEsCi0weGZmLCAweDY4LCAweDA5LCAweDkwLCAweGZhLCAweGE3LCAweDhlLCAweDY0LAotMHgwZSwgMHgwYywgMHhhNCwgMHgxMiwgMHgxYSwgMHg4ZCwgMHg5MCwgMHg0YywKLTB4NjEsIDB4YzAsIDB4NDgsIDB4NDQsIDB4ZDUsIDB4NmUsIDB4MDYsIDB4NTIsCi0weDA4LCAweGQyLCAweDAyLCAweDY4LCAweGFhLCAweDI5LCAweGY1LCAweDBmLAotMHg5OCwgMHg2NiwgMHg0YywgMHhhNywgMHg5NCwgMHhlMCwgMHgwZSwgMHgyZiwKLTB4MGQsIDB4YTgsIDB4MDIsIDB4MGQsIDB4YTYsIDB4MDIsIDB4MjksIDB4MDcsCi0weDAwLCAweDc3LCAweDgzLCAweDAzLCAweGZjLCAweGY2LCAweGE0LCAweDE1LAotMHhjNSwgMHhiNiwgMHhmMywgMHg0NiwgMHhiZiwgMHhhZCwgMHgyOCwgMHg2MCwKLTB4MzMsIDB4ZWQsIDB4YTUsIDB4MzEsIDB4OTAsIDB4NmQsIDB4MzMsIDB4MTAsCi0weDAwLCAweDJiLCAweDQxLCAweDIwLCAweGI1LCAweGE3LCAweGQ3LCAweDljLAotMHg2MywgMHgzMSwgMHgyNSwgMHgxZiwgMHhjMSwgMHhmZSwgMHhiNCwgMHgxYywKLTB4NmQsIDB4OGYsIDB4ZTAsIDB4MzAsIDB4NjUsIDB4YTAsIDB4YzEsIDB4NzIsCi0weGY0LCAweDhmLCAweDM0LCAweDVmLCAweGNjLCAweGY5LCAweDRjLCAweGVkLAotMHhjYywgMHg4YiwgMHgzYywgMHg2YSwgMHg0NywgMHgxOCwgMHhiOCwgMHg5MSwKLTB4YTksIDB4MWQsIDB4OGIsIDB4MGUsIDB4NTEsIDB4MDYsIDB4ZTYsIDB4MTgsCi0weDMwLCAweDA0LCAweGYzLCAweDExLCAweDQ4LCAweDBkLCAweDIyLCAweDM0LAotMHg0NSwgMHg5OCwgMHhkMiwgMHhiMCwgMHg2ZCwgMHgwZSwgMHhiYSwgMHg0MSwKLTB4MmYsIDB4MjAsIDB4NDgsIDB4MmEsIDB4MGMsIDB4MjgsIDB4MDYsIDB4NjEsCi0weDBiLCAweDgxLCAweDVlLCAweDkwLCAweGM3LCAweDgzLCAweDUwLCAweDMyLAotMHgyNiwgMHg5MiwgMHhiYiwgMHg3NiwgMHg4OCwgMHg5YSwgMHg5MSwgMHg0MSwKLTB4MzgsIDB4MDQsIDB4NGIsIDB4YTAsIDB4OTYsIDB4OTUsIDB4MWMsIDB4MzIsCi0weDE3LCAweDIxLCAweDUwLCAweDRjLCAweDkwLCAweGViLCAweGFiLCAweDZhLAotMHhiYiwgMHhiOSwgMHgzYSwgMHhkMywgMHg5YywgMHhkYiwgMHgzOSwgMHg0MiwKLTB4MTAsIDB4OTgsIDB4Y2QsIDB4NzEsIDB4ZmEsIDB4MmEsIDB4NjksIDB4ZWYsCi0weGJhLCAweDNkLCAweDgzLCAweDYwLCAweDNmLCAweDY5LCAweGU5LCAweDVhLAotMHg5ZCwgMHg1OSwgMHhhNywgMHg1MywgMHhiOSwgMHhmZSwgMHg0MiwgMHhmNSwKLTB4ZGUsIDB4YzksIDB4YmIsIDB4NTIsIDB4MWIsIDB4YzYsIDB4ZTgsIDB4M2YsCi0weGFhLCAweDdmLCAweDNlLCAweDc5LCAweGQ3LCAweDk2LCAweDBkLCAweDRmLAotMHgyNiwgMHhmZSwgMHg4OSwgMHg5NSwgMHgxOCwgMHgxYiwgMHgxZSwgMHgxNSwKLTB4MjAsIDB4ODUsIDB4NDAsIDB4NmUsIDB4M2YsIDB4ZTUsIDB4NDksIDB4MDEsCi0weGYxLCAweDNmLCAweDE1LCAweDViLCAweDY5LCAweDA0LCAweDM5LCAweDU4LAotMHgyNCwgMHhkYSwgMHgyMywgMHgwMCwgMHhmZiwgMHg0OSwgMHg5MiwgMHgxZSwKLTB4MmIsIDB4OTYsIDB4YTQsIDB4N2QsIDB4MDQsIDB4ZDcsIDB4MmYsIDB4YjEsCi0weDkwLCAweGM1LCAweDEwLCAweGM0LCAweDkyLCAweGEzLCAweGRkLCAweDJkLAotMHgzMSwgMHhiYiwgMHg4NywgMHg4MSwgMHgzZSwgMHgwNCwgMHg3MiwgMHhmZCwKLTB4OGQsIDB4OTksIDB4ZDgsIDB4MDAsIDB4NWQsIDB4OGYsIDB4OGIsIDB4ODksCi0weDhhLCAweGEwLCAweDY3LCAweDNkLCAweDQ5LCAweDk4LCAweGJkLCAweDE5LAotMHgxOCwgMHhhMCwgMHg3NywgMHg0MCwgMHhjMiwgMHhlYywgMHhjYSwgMHhlOCwKLTB4MDMsIDB4ZDEsIDB4MDQsIDB4OTYsIDB4NDgsIDB4ZDUsIDB4YjUsIDB4MTYsCi0weDQ1LCAweDMzLCAweDg3LCAweDc1LCAweDYzLCAweDU0LCAweDZiLCAweDQ5LAotMHg2YiwgMHg5OSwgMHhlMSwgMHhiOCwgMHhhMSwgMHg2YSwgMHhjNCwgMHgwNSwKLTB4MWIsIDB4ZDcsIDB4YjYsIDB4NzEsIDB4MjAsIDB4M2YsIDB4YmUsIDB4MGUsCi0weDE0LCAweDFiLCAweGYyLCAweDk5LCAweDM2LCAweDFjLCAweDc4LCAweDhhLAotMHg2ZCwgMHhlNiwgMHhmNSwgMHgzNiwgMHg4YSwgMHg2MCwgMHg0YywgMHgwMCwKLTB4NzAsIDB4NGEsIDB4ZTQsIDB4ZmEsIDB4NTEsIDB4YTUsIDB4MTksIDB4NDYsCi0weDBiLCAweDdmLCAweDk2LCAweDRhLCAweGFlLCAweDhlLCAweGFjLCAweDgzLAotMHg0MywgMHg4NSwgMHhmNiwgMHg1NCwgMHg4MywgMHgwMCwgMHgzNywgMHgyMCwKLTB4YTgsIDB4NjksIDB4MTYsIDB4NDAsIDB4NmUsIDB4NGYsIDB4YWQsIDB4YmEsCi0weGFkLCAweDZiLCAweDI4LCAweGU3LCAweGQyLCAweDgwLCAweGIxLCAweDc5LAotMHgwMiwgMHgxYywgMHhlMSwgMHhjNCwgMHhhMCwgMHg5NywgMHg4MSwgMHhmYiwKLTB4OGMsIDB4N2YsIDB4OTAsIDB4ZmIsIDB4YmYsIDB4N2UsIDB4NjUsIDB4ZmEsCi0weGU3LCAweGI5LCAweDE3LCAweDc2LCAweDVkLCAweDViLCAweGNiLCAweGMxLAotMHhmNywgMHg3NywgMHg1ZCwgMHhiYiwgMHhhMiwgMHg3ZSwgMHhlZCwgMHhjYSwKLTB4ZTksIDB4MWQsIDB4MmYsIDB4MmMsIDB4ZmEsIDB4ZTcsIDB4ZGEsIDB4ZmEsCi0weGY0LCAweGNhLCAweDQzLCAweDFjLCAweGM4LCAweGVkLCAweDU5LCAweGY2LAotMHhlMCwgMHhlZCwgMHgxNywgMHhmZSwgMHg3ZCwgMHhjZiwgMHg5OSwgMHg3NywKLTB4Y2YsIDB4NzEsIDB4ZjAsIDB4ZTIsIDB4OTksIDB4ZjcsIDB4Y2YsIDB4MmQsCi0weGZiLCAweDY0LCAweGNkLCAweGQxLCAweDZmLCAweDVkLCAweDM4LCAweDcxLAotMHhmZSwgMHhkYywgMHhiMiwgMHgwNywgMHhkNiwgMHg1YywgMHhlMCwgMHgwMCwKLTB4M2UsIDB4ODMsIDB4ZGMsIDB4ZmEsIDB4NDQsIDB4ZWQsIDB4NTUsIDB4ZTksCi0weDE1LCAweGI5LCAweDFkLCAweDliLCAweDNhLCAweGNmLCAweDM1LCAweDdlLAotMHhiNywgMHhmYiwgMHg0MiwgMHhlZSwgMHhiNywgMHg3ZiwgMHg3YiwgMHhlYiwKLTB4NTMsIDB4MmIsIDB4MWUsIDB4N2MsIDB4NzMsIDB4NDUsIDB4ZWUsIDB4ZjEsCi0weGYzLCAweDlkLCAweDE3LCAweDU2LCAweDVjLCAweGZkLCAweGU2LCAweDhhLAotMHgzMywgMHg4ZiwgMHg5ZiwgMHg5NywgMHhlYiwgMHg3NywgMHgzZSwgMHg3MCwKLTB4ZmIsIDB4ZDEsIDB4NmYsIDB4YmQsIDB4NzgsIDB4ZTIsIDB4ZGQsIDB4NzMsCi0weDlkLCAweDRlLCAweDMzLCAweGNlLCAweDc3LCAweGYyLCAweDg2LCAweDlkLAotMHg3OCwgMHgxZiwgMHhlYiwgMHhkZiwgMHg3ZSwgMHg5NCwgMHhiNSwgMHgzMCwKLTB4NTAsIDB4N2YsIDB4ZTEsIDB4ZTUsIDB4ZmQsIDB4NDcsIDB4NzcsIDB4ZGMsCi0weDc0LCAweGUyLCAweGQxLCAweDhkLCAweGNiLCAweGQ4LCAweDFmLCAweDNlLAotMHg4YiwgMHg3ZiwgMHg4OCwgMHhlMCwgMHhlZCwgMHhlNiwgMHgxNywgMHg0NywKLTB4ZGYsIDB4M2QsIDB4YjcsIDB4MzAsIDB4YzksIDB4YzEsIDB4YTksIDB4YmYsCi0weDBlLCAweDM0LCAweGE4LCAweDc1LCAweDhiLCAweGY5LCAweGE0LCAweDdlLAotMHhiNSwgMHg5ZSwgMHgyZCwgMHgyOCwgMHgwOCwgMHhlMCwgMHg2YSwgMHg1YSwKLTB4M2IsIDB4MDksIDB4NWIsIDB4YjEsIDB4NjQsIDB4NGUsIDB4YmMsIDB4NzYsCi0weDlmLCAweDgyLCAweDIwLCAweDczLCAweDM1LCAweDI1LCAweDcyLCAweDdmLAotMHg1MiwgMHg5NywgMHgxZiwgMHg4ZSwgMHg1ZSwgMHhlOSwgMHhiMCwgMHg0MSwKLTB4ZTQsIDB4ODcsIDB4MzAsIDB4NjQsIDB4Y2UsIDB4ZTcsIDB4YzAsIDB4ZTEsCi0weDg3LCAweDUyLCAweGZkLCAweDYyLCAweDdlLCAweGU4LCAweDAxLCAweDVjLAotMHg5MSwgMHgxOSwgMHg1MSwgMHhlNCwgMHhmYywgMHgzMCwgMHhkMCwgMHgyMCwKLTB4YTQsIDB4NmQsIDB4NTAsIDB4MTMsIDB4Y2IsIDB4ZDksIDB4MDIsIDB4MzAsCi0weGRhLCAweGI2LCAweDkxLCAweDAxLCAweDhkLCAweDZjLCAweDQ3LCAweDQ2LAotMHhjNCwgMHg0YSwgMHgwMiwgMHhlMywgMHg1OSwgMHhlYiwgMHhkOSwgMHg0NiwKLTB4YTIsIDB4YzMsIDB4ZGQsIDB4MGQsIDB4ZjYsIDB4NTgsIDB4NGYsIDB4MDcsCi0weDU5LCAweDMwLCAweGJhLCAweGRjLCAweDg4LCAweDFkLCAweGEwLCAweGRiLAotMHhjOCwgMHgwMiwgMHgxYiwgMHhjMSwgMHhlYiwgMHg3NCwgMHg1YiwgMHg5NiwKLTB4ODMsIDB4NDIsIDB4ZjAsIDB4ZjksIDB4MGUsIDB4M2YsIDB4YjQsIDB4MGMsCi0weDQ4LCAweGVhLCAweGVjLCAweGY5LCAweGRlLCAweDdmLCAweGM0LCAweDgwLAotMHhjMSwgMHg4MSwgMHgyZiwgMHg1MSwgMHhhNCwgMHg4NSwgMHgzOCwgMHhhZCwKLTB4MzIsIDB4N2MsIDB4N2UsIDB4MjEsIDB4MmQsIDB4YjQsIDB4ZjQsIDB4MWMsCi0weGJkLCAweDZhLCAweDEyLCAweGMxLCAweDE2LCAweDdkLCAweDljLCAweDVlLAotMHg0NSwgMHg2YSwgMHhlZCwgMHhiNCwgMHgxOSwgMHhkOCwgMHhhMywgMHg3ZCwKLTB4ODksIDB4YWUsIDB4Y2MsIDB4Y2UsIDB4Y2IsIDB4ZjcsIDB4OGUsIDB4YzEsCi0weDc1LCAweGY0LCAweGFlLCAweDZjLCAweGQzLCAweDQ0LCAweGNmLCAweGQzLAotMHhiMSwgMHg1NiwgMHg1OCwgMHg5NSwgMHg2ZCwgMHhjYSwgMHgyMywgMHhiOCwKLTB4MGUsIDB4N2YsIDB4NDIsIDB4MzAsIDB4MmUsIDB4ZTksIDB4NGYsIDB4YWQsCi0weGQwLCAweDA4LCAweGNkLCAweDEwLCAweDJmLCAweGE4LCAweDM5LCAweDk4LAotMHg4YiwgMHg0YSwgMHgyYiwgMHg4ZSwgMHhkYywgMHg4NywgMHhhZiwgMHgzNiwKLTB4NTgsIDB4YjIsIDB4ZDQsIDB4MDcsIDB4YTYsIDB4ZmYsIDB4MDcsIDB4YjgsCi0weDU1LCAweGQ1LCAweDcxLCAweGI1LCAweGE3LCAweDViLCAweDc0LCAweDM2LAotMHg4YiwgMHg3MCwgMHhkOSwgMHgzNywgMHg1MSwgMHhhNSwgMHhmNSwgMHhiMiwKLTB4ZGQsIDB4NmQsIDB4ODYsIDB4YzQsIDB4ZjUsIDB4MWUsIDB4NjQsIDB4OGIsCi0weDc0LCAweDBiLCAweGYxLCAweGNjLCAweGU3LCAweGY4LCAweDdjLCAweGQzLAotMHhiMSwgMHhiYywgMHgyNSwgMHhmOSwgMHgwNiwgMHg1MywgMHgxNywgMHg3NiwKLTB4M2EsIDB4YjYsIDB4MjUsIDB4MzUsIDB4YzcsIDB4ZjQsIDB4NTYsIDB4YWEsCi0weDY1LCAweDE1LCAweDU2LCAweDIyLCAweGQ3LCAweDQ3LCAweGQyLCAweGNiLAotMHg5NSwgMHgyNCwgMHg1MywgMHhmNCwgMHg0OSwgMHg0OCwgMHg2MywgMHg2ZiwKLTB4ZDcsIDB4YjAsIDB4OTIsIDB4N2IsIDB4MTAsIDB4ZWMsIDB4MTIsIDB4M2YsCi0weDVkLCAweDYyLCAweDdiLCAweGY1LCAweDc1LCAweDYyLCAweDJhLCAweDE2LAotMHg4YywgMHhjMywgMHg1NSwgMHgwNiwgMHhlYSwgMHgyYywgMHgwZSwgMHhhMCwKLTB4NzYsIDB4MGMsIDB4MzYsIDB4MzEsIDB4YzAsIDB4YWUsIDB4MzIsIDB4YjEsCi0weDljLCAweGY2LCAweDU3LCAweDE5LCAweGI4LCAweDAyLCAweGJhLCAweDYyLAotMHgzMiwgMHg3ZSwgMHhjOCwgMHg0OSwgMHg5MSwgMHgyZSwgMHhmMywgMHhjMywKLTB4MzEsIDB4MDYsIDB4NzIsIDB4N2IsIDB4OTcsIDB4ODgsIDB4OTIsIDB4OWMsCi0weGJmLCAweDllLCAweGIyLCAweDM3LCAweDJmLCAweGUxLCAweDg3LCAweDY2LAotMHgxMSwgMHgzMCwgMHgwYiwgMHg5ZSwgMHg3ZCwgMHhkZSwgMHhjNCwgMHhiNywKLTB4NGMsIDB4NzEsIDB4OTIsIDB4YTYsIDB4MGYsIDB4M2IsIDB4MDAsIDB4NWUsCi0weGExLCAweDBlLCAweGQ4LCAweDJiLCAweDRhLCAweGEyLCAweDkyLCAweGZlLAotMHgzNywgMHg3YiwgMHg0ZCwgMHhjMSwgMHhkZiwgMHhkOCwgMHhkMSwgMHgyNSwKLTB4MDIsIDB4NDAsIDB4ZmUsIDB4MzYsIDB4YzIsIDB4N2EsIDB4YzAsIDB4NjAsCi0weDQ0LCAweDRjLCAweGZjLCAweDQ0LCAweDkxLCAweGJmLCAweDc5LCAweGVkLAotMHgyMSwgMHgxMiwgMHgzZiwgMHhmNCwgMHg0MCwgMHhhYSwgMHhhOCwgMHhjNCwKLTB4N2YsIDB4N2UsIDB4ODYsIDB4YTQsIDB4YzUsIDB4NDMsIDB4MTgsIDB4N2IsCi0weDE0LCAweDIwLCAweGM2LCAweDVlLCAweGRjLCAweDAxLCAweGEyLCAweGE0LAotMHhhOCwgMHgzZCwgMHhmOCwgMHgyMSwgMHhmMSwgMHg4YiwgMHgwMiwgMHgzOCwKLTB4MjAsIDB4ODYsIDB4ZGIsIDB4MDAsIDB4MDcsIDB4YjgsIDB4M2YsIDB4YTUsCi0weGJkLCAweGY2LCAweGY0LCAweGUzLCAweGI4LCAweGVkLCAweGIyLCAweGUzLAotMHg5NiwgMHhjYSwgMHgwNiwgMHhmMCwgMHg1NiwgMHg1YiwgMHhiNywgMHg2OCwKLTB4OTIsIDB4YjAsIDB4OTIsIDB4MjAsIDB4ZjAsIDB4ODcsIDB4NGYsIDB4M2YsCi0weGIwLCAweDkxLCAweGVmLCAweGYxLCAweDViLCAweDZmLCAweGFmLCAweDE0LAotMHgwNCwgMHgyMCwgMHhiNSwgMHg2NywgMHgwMywgMHhiMiwgMHg0MSwgMHhlNCwKLTB4ODcsIDB4ODMsIDB4ZGEsIDB4MDYsIDB4MjUsIDB4NjYsIDB4ZmYsIDB4Y2MsCi0weGU1LCAweDg3LCAweDAzLCAweDJlLCAweDEwLCAweGZjLCAweGQwLCAweDVmLAotMHhkZiwgMHgwOSwgMHhlMywgMHg2ZiwgMHgwYiwgMHhhYywgMHhlNSwgMHg3YSwKLTB4NmMsIDB4YmYsIDB4MDAsIDB4YzksIDB4ZDgsIDB4ZmUsIDB4OWEsIDB4YmYsCi0weDIyLCAweDA4LCAweDMyLCAweGIxLCAweDQzLCAweDc0LCAweDJiLCAweDU5LAotMHg2MCwgMHgyZSwgMHgxZiwgMHhiYywgMHg0NCwgMHg3YSwgMHg1ZiwgMHhkMiwKLTB4ODcsIDB4YjQsIDB4ZjAsIDB4NDksIDB4ZWIsIDB4ZWEsIDB4MjQsIDB4ZDksCi0weGFmLCAweDA4LCAweDUwLCAweGJiLCAweDFmLCAweDVjLCAweGUwLCAweDk0LAotMHg0OCwgMHhmYSwgMHgyNywgMHhkMywgMHhkYiwgMHhhNywgMHhiNiwgMHg3MywKLTB4ZGEsIDB4MDksIDB4MTIsIDB4ZmYsIDB4YmMsIDB4YzEsIDB4NjYsIDB4OGMsCi0weDMxLCAweGYxLCAweGYzLCAweDg0LCAweGEwLCAweDhlLCAweGZhLCAweDVlLAotMHg2OSwgMHhmYywgMHgzNCwgMHgxMSwgMHg4YiwgMHg2OSwgMHgxYiwgMHhjNiwKLTB4ODcsIDB4MGQsIDB4N2IsIDB4ODUsIDB4ZDAsIDB4M2YsIDB4OWIsIDB4NzgsCi0weDg5LCAweGFiLCAweDg4LCAweGZhLCAweGQ1LCAweDgyLCAweGQ3LCAweDQzLAotMHgyNiwgMHgwZSwgMHhlMCwgMHg4ZCwgMHg3NiwgMHhkMiwgMHhhYSwgMHgxOSwKLTB4ZDcsIDB4YmYsIDB4OGIsIDB4ZTAsIDB4NTIsIDB4YWIsIDB4MjYsIDB4NDksCi0weGI2LCAweGFiLCAweGJjLCAweDA0LCAweDgxLCAweGY4LCAweDI5LCAweDI5LAotMHhlYiwgMHg5ZiwgMHg1ZSwgMHg4YiwgMHhkZSwgMHhkZiwgMHgzMiwgMHgxNywKLTB4NzcsIDB4NjgsIDB4OTAsIDB4MWYsIDB4NWQsIDB4NGEsIDB4MmUsIDB4NDcsCi0weDEwLCAweDNiLCAweGI2LCAweGU4LCAweDdlLCAweDA0LCAweGNiLCAweDExLAotMHg1MCwgMHgwNywgMHg0OCwgMHhlMywgMHg5OSwgMHhhYywgMHg0NSwgMHgzNiwKLTB4ODgsIDB4ZmQsIDB4OGYsIDB4ZWQsIDB4YzEsIDB4ZDEsIDB4NzIsIDB4MDksCi0weDdlLCAweDA4LCAweDljLCAweDFkLCAweDliLCAweDE4LCAweDJkLCAweGVjLAotMHgyNywgMHgzYiwgMHgwNCwgMHg1MSwgMHhlYywgMHg5NywgMHhmNCwgMHgwZiwKLTB4OGUsIDB4MzcsIDB4NjQsIDB4ODMsIDB4N2MsIDB4ZmMsIDB4N2MsIDB4ODMsCi0weGIxLCAweGMxLCAweDdjLCAweDVmLCAweDgwLCAweDFmLCAweDNhLCAweDQwLAotMHhhYSwgMHg4ZiwgMHhmMywgMHhjYiwgMHhlYywgMHg4YSwgMHhlYiwgMHhiZCwKLTB4MzgsIDB4NWQsIDB4NjgsIDB4MjYsIDB4YWIsIDB4MWIsIDB4YmQsIDB4MWEsCi0weDcyLCAweDI5LCAweDEzLCAweDQxLCAweDBmLCAweDAyLCAweDJhLCAweDAwLAotMHgwMSwgMHhhOSwgMHg3ZiwgMHg3MCwgMHhiZSwgMHgxNCwgMHhlMiwgMHgxZCwKLTB4YjgsIDB4ZjMsIDB4YTgsIDB4YzMsIDB4MDksIDB4MTUsIDB4OWYsIDB4MjAsCi0weDUxLCAweGQyLCAweDBkLCAweDk5LCAweDQyLCAweDNjLCAweGE1LCAweDIyLAotMHgzMCwgMHgxYywgMHg2MCwgMHhmYSwgMHhjZiwgMHg0NywgMHg2NSwgMHhhMSwKLTB4ZWIsIDB4OWMsIDB4MWYsIDB4ZGEsIDB4NjYsIDB4MmIsIDB4YWEsIDB4MWQsCi0weDgyLCAweGZjLCAweGQwLCAweDc0LCAweDg5LCAweGEyLCAweDBiLCAweGU0LAotMHhmMSwgMHg5MywgMHg2ZSwgMHg2ZCwgMHg2MiwgMHhmYywgMHg1MCwgMHgxYiwKLTB4NTcsIDB4NWEsIDB4OTEsIDB4OTMsIDB4NzUsIDB4YjQsIDB4NzAsIDB4N2UsCi0weDM4LCAweDA2LCAweDg2LCAweDUxLCAweDM3LCAweDg2LCAweDI1LCAweDc5LAotMHhjNiwgMHgwZiwgMHhjNywgMHhhNCwgMHhmNiwgMHgxMCwgMHg1NywgMHhmZiwKLTB4MjQsIDB4ODUsIDB4ZmUsIDB4ZTksIDB4NzMsIDB4ZjUsIDB4MGYsIDB4MDMsCi0weDhiLCAweDcwLCAweDljLCAweDJiLCAweDRjLCAweGZmLCAweDQ4LCAweGZkLAotMHg2MywgMHg3MiwgMHgyNSwgMHg1MywgMHg2MywgMHg4ZSwgMHhlNSwgMHg1MCwKLTB4N2IsIDB4M2YsIDB4MjEsIDB4ZDQsIDB4Y2UsIDB4MTYsIDB4NmQsIDB4OWMsCi0weGEwLCAweDIyLCAweGNhLCAweDM5LCAweDFhLCAweGE5LCAweDRiLCAweDllLAotMHg1ZiwgMHgxNiwgMHg3ZSwgMHgyNiwgMHg1NCwgMHhiNSwgMHhkOCwgMHgyNiwKLTB4MWIsIDB4ODEsIDB4ODYsIDB4NWIsIDB4ZWIsIDB4NjMsIDB4NzAsIDB4YWYsCi0weDg2LCAweDVmLCAweDcwLCAweDM4LCAweDc3LCAweDZjLCAweGQxLCAweGQyLAotMHhkYSwgMHhiOSwgMHgwYSwgMHg3ZSwgMHg0MSwgMHg3ZiwgMHhiZSwgMHg2NywKLTB4ODAsIDB4YzAsIDB4NTcsIDB4YWMsIDB4YjksIDB4NWIsIDB4MjIsIDB4MmMsCi0weDhjLCAweDU0LCAweGNhLCAweDhjLCAweGVhLCAweDExLCAweDBhLCAweGFmLAotMHgyMiwgMHgzMSwgMHhlMywgMHg2MCwgMHg5ZiwgMHgyMSwgMHg0YSwgMHg2YywKLTB4YTksIDB4M2QsIDB4YzgsIDB4ZGYsIDB4OTYsIDB4OTgsIDB4MGQsIDB4OTksCi0weDQ4LCAweDI2LCAweGI3LCAweDEzLCAweGRhLCAweGNkLCAweDA2LCAweDMzLAotMHgzMiwgMHgwMCwgMHgzZiwgMHhhMywgMHhlZCwgMHhmZCwgMHhkMSwgMHg0YywKLTB4MjQsIDB4MGUsIDB4YmYsIDB4YzAsIDB4MTIsIDB4MDYsIDB4ZjQsIDB4YmQsCi0weDUyLCAweDdiLCAweGJhLCAweDI5LCAweGVlLCAweDQ2LCAweDUzLCAweDdkLAotMHg0OSwgMHg0MCwgMHhiNSwgMHgzMywgMHg5OSwgMHg0YywgMHhmNSwgMHg0NSwKLTB4NjMsIDB4N2YsIDB4ZWYsIDB4ODIsIDB4YzcsIDB4NWQsIDB4MjAsIDB4ZWIsCi0weDFmLCAweDEzLCAweGY5LCAweDYxLCAweGIyLCAweGUwLCAweDFlLCAweDllLAotMHg1NCwgMHhiMiwgMHgyMywgMHhmYSwgMHhmZCwgMHhkMywgMHg4ZiwgMHhmYywKLTB4NTAsIDB4NDMsIDB4N2UsIDB4NjgsIDB4ZGIsIDB4OWIsIDB4ZWUsIDB4NjYsCi0weDQ0LCAweGQxLCAweDg4LCAweDhkLCAweDUzLCAweDg3LCAweDE2LCAweDdhLAotMHg0MCwgMHgxZSwgMHgzZiwgMHg2NiwgMHhhZiwgMHgxYSwgMHg0YiwgMHhkNCwKLTB4ZjQsIDB4MjIsIDB4NWQsIDB4ZWUsIDB4YzksIDB4YzQsIDB4ZTIsIDB4YjQsCi0weDk3LCAweGM0LCAweDRjLCAweDEzLCAweGQ1LCAweDBlLCAweDE1LCAweGZhLAotMHg4NywgMHg5NSwgMHgwMCwgMHgzMSwgMHhhNSwgMHhmMSwgMHhhMywgMHgzMSwKLTB4OTYsIDB4ZWEsIDB4NmEsIDB4M2UsIDB4N2QsIDB4NTgsIDB4YzUsIDB4NjEsCi0weDYwLCAweGUwLCAweDMwLCAweDE4LCAweDE2LCAweDFiLCAweDA3LCAweDNlLAotMHgxZSwgMHhiMiwgMHgyMCwgMHgwOSwgMHhhMywgMHg4NSwgMHg5MCwgMHgzNywKLTB4ODMsIDB4ZmMsIDB4OTAsIDB4ODMsIDB4MWUsIDB4YWYsIDB4NDQsIDB4MWUsCi0weDNmLCAweGI3LCAweDJkLCAweDVjLCAweDY3LCAweDhlLCAweDRlLCAweDZmLAotMHg1YywgMHgzMiwgMHg3ZSwgMHg1YiwgMHhjZCwgMHgzYSwgMHhmMywgMHhkMCwKLTB4YjQsIDB4YjEsIDB4YTQsIDB4ZTEsIDB4MzYsIDB4YjIsIDB4Y2UsIDB4MWMsCi0weDk4LCAweGJlLCAweDAxLCAweDQxLCAweDg0LCAweDk1LCAweDIwLCAweDkwLAotMHhkYSwgMHg0MywgMHhmYSwgMHhlOSwgMHhiNiwgMHhhZSwgMHgwNSwgMHgzOSwKLTB4NWMsIDB4ZjQsIDB4N2YsIDB4ZjIsIDB4YjAsIDB4NDMsIDB4MDMsIDB4M2MsCi0weDNlLCAweGMwLCAweDAxLCAweDJjLCAweDM3LCAweDI0LCAweGZkLCAweDgzLAotMHhlYiwgMHhiNSwgMHhjZiwgMHgwZiwgMHg1NywgMHhjYSwgMHhmYywgMHg3MCwKLTB4NTcsIDB4MDUsIDB4N2UsIDB4ZDgsIDB4ZTksIDB4ZjMsIDB4YzMsIDB4MzUsCi0weDMyLCAweDNmLCAweDNjLCAweGYzLCAweDNiLCAweGUyLCAweDg3LCAweDU3LAotMHgzMiwgMHg1YSwgMHhmOCwgMHhjYiwgMHhkYywgMHg4NSwgMHhmMywgMHg5ZCwKLTB4ZTcsIDB4MzgsIDB4NTEsIDB4NDQsIDB4N2UsIDB4ZjgsIDB4NDQsIDB4NmQsCi0weDkwLCAweDFmLCAweDllLCAweDkwLCAweGViLCAweGYzLCAweGZmLCAweGZkLAotMHhjMywgMHgxMywgMHg1OCwgMHhmZiwgMHgxMywgMHg0ZSwgMHgxNCwgMHg5MSwKLTB4MWYsIDB4M2UsIDB4NTAsIDB4YzQsIDB4MGYsIDB4MDMsIDB4ZWQsIDB4NTksCi0weGU2LCAweGYyLCAweGMzLCAweDg1LCAweDk3LCAweGRmLCAweDdlLCAweDc0LAotMHg0NywgMHgzYiwgMHgyMywgMHg5NiwgMHhmNywgMHgxNywgMHhkNSwgMHgzZiwKLTB4ZmUsIDB4ZTksIDB4NWIsIDB4OWYsIDB4MDIsIDB4ODMsIDB4ZTAsIDB4ZmMsCi0weGM2LCAweDdmLCAweGJiLCAweGEzLCAweDlmLCAweGZlLCAweDI5LCAweGExLAotMHg4NCwgMHgxMiwgMHg0YSwgMHgyOCwgMHhhMSwgMHg4NCwgMHgxMiwgMHg0YSwKLTB4MjgsIDB4YTEsIDB4ODQsIDB4MTIsIDB4Y2EsIDB4ZWYsIDB4YmIsIDB4ZjAsCi0weGJkLCAweDAzLCAweDBkLCAweGY3LCAweDBlLCAweGExLCAweDg0LCAweDEyLAotMHg0YSwgMHgyOCwgMHhhMSwgMHg4NCwgMHgxMiwgMHg0YSwgMHgyOCwgMHhhMSwKLTB4ODQsIDB4MTIsIDB4NGEsIDB4NzUsIDB4ZTEsIDB4N2IsIDB4ODcsIDB4OWEsCi0weDcwLCAweGVmLCAweDEwLCAweDRhLCAweDI4LCAweGExLCAweDg0LCAweDEyLAotMHg0YSwgMHgyOCwgMHhhMSwgMHg4NCwgMHgxMiwgMHg0YSwgMHgyOCwgMHhhMSwKLTB4NTQsIDB4MTcsIDB4YmUsIDB4NzcsIDB4ZDAsIDB4ZjgsIDB4ZGUsIDB4ZTEsCi0weGZmLCAweGJhLCAweDI5LCAweGExLCAweDg0LCAweDEyLCAweDRhLCAweDI4LAotMHhhMSwgMHg4NCwgMHgxMiwgMHg0YSwgMHgyOCwgMHhhMSwgMHg4NCwgMHgxMiwKLTB4Y2EsIDB4MTcsIDB4MjgsIDB4MjksIDB4MTYsIDB4NzIsIDB4MTksIDB4NWUsCi0weGY5LCAweDIwLCAweDA1LCAweDM2LCAweGYzLCAweDYyLCAweDhhLCAweGE0LAotMHhjMCwgMHhiYywgMHhlOCwgMHhmMywgMHgwNCwgMHhlNywgMHg2ZiwgMHhkNSwKLTB4MTQsIDB4ZTQsIDB4ODksIDB4ZmYsIDB4Y2MsIDB4ZTMsIDB4NzcsIDB4MTUsCi0weGQ3LCAweGZiLCAweDVmLCAweDJiLCAweDkyLCAweGFkLCAweDQ2LCAweGYxLAotMHgzMywgMHgwMSwgMHgwMCwKZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmUvY29tbW9uL2ZwZ2EuYyBiL2JvYXJkL2RhdmUvY29tbW9uL2ZwZ2EuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg2OWNhMC4uMDAwMDAwMAotLS0gYS9ib2FyZC9kYXZlL2NvbW1vbi9mcGdhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDAgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMS0yMDAzCi0gKiBNYXR0aGlhcyBGdWNocywgZXNkIGdtYmggZ2VybWFueSwgbWF0dGhpYXMuZnVjaHNAZXNkLWVsZWN0cm9uaWNzLmNvbQotICogU3RlZmFuIFJvZXNlLCBlc2QgZ21iaCBnZXJtYW55LCBzdGVmYW4ucm9lc2VAZXNkLWVsZWN0cm9uaWNzLmNvbQotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8Y29tbWFuZC5oPgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBGUEdBX0RFQlVHCi0jZGVmaW5lIERCRyh4Li4uKSBwcmludGYoeCkKLSNlbHNlCi0jZGVmaW5lIERCRyh4Li4uKQotI2VuZGlmIC8qIERFQlVHICovCi0KLSNkZWZpbmUgTUFYX09ORVMgICAgICAgICAgICAgICAyMjYKLQotI2lmZGVmIENPTkZJR19TWVNfRlBHQV9QUkcKLSMgZGVmaW5lIEZQR0FfUFJHICAgICAgICAgICAgICBDT05GSUdfU1lTX0ZQR0FfUFJHIC8qIEZQR0EgcHJvZ3JhbSBwaW4gKHBwYyBvdXRwdXQpKi8KLSMgZGVmaW5lIEZQR0FfQ0xLICAgICAgICAgICAgICBDT05GSUdfU1lTX0ZQR0FfQ0xLIC8qIEZQR0EgY2xrIHBpbiAocHBjIG91dHB1dCkgICAgKi8KLSMgZGVmaW5lIEZQR0FfREFUQSAgICAgICAgICAgICBDT05GSUdfU1lTX0ZQR0FfREFUQSAvKiBGUEdBIGRhdGEgcGluIChwcGMgb3V0cHV0KSAgKi8KLSMgZGVmaW5lIEZQR0FfRE9ORSAgICAgICAgICAgICBDT05GSUdfU1lTX0ZQR0FfRE9ORSAvKiBGUEdBIGRvbmUgcGluIChwcGMgaW5wdXQpICAgKi8KLSMgZGVmaW5lIEZQR0FfSU5JVCAgICAgICAgICAgICBDT05GSUdfU1lTX0ZQR0FfSU5JVCAvKiBGUEdBIGluaXQgcGluIChwcGMgaW5wdXQpICAgKi8KLSNlbHNlCi0jIGRlZmluZSBGUEdBX1BSRyAgICAgICAgICAgICAgMHgwNDAwMDAwMCAgLyogRlBHQSBwcm9ncmFtIHBpbiAocHBjIG91dHB1dCkgKi8KLSMgZGVmaW5lIEZQR0FfQ0xLICAgICAgICAgICAgICAweDAyMDAwMDAwICAvKiBGUEdBIGNsayBwaW4gKHBwYyBvdXRwdXQpICAgICAqLwotIyBkZWZpbmUgRlBHQV9EQVRBICAgICAgICAgICAgIDB4MDEwMDAwMDAgIC8qIEZQR0EgZGF0YSBwaW4gKHBwYyBvdXRwdXQpICAgICovCi0jIGRlZmluZSBGUEdBX0RPTkUgICAgICAgICAgICAgMHgwMDgwMDAwMCAgLyogRlBHQSBkb25lIHBpbiAocHBjIGlucHV0KSAgICAgKi8KLSMgZGVmaW5lIEZQR0FfSU5JVCAgICAgICAgICAgICAweDAwNDAwMDAwICAvKiBGUEdBIGluaXQgcGluIChwcGMgaW5wdXQpICAgICAqLwotI2VuZGlmCi0KLSNkZWZpbmUgRVJST1JfRlBHQV9QUkdfSU5JVF9MT1cgIC0xICAgICAgICAvKiBUaW1lb3V0IGFmdGVyIFBSRyogYXNzZXJ0ZWQgICAqLwotI2RlZmluZSBFUlJPUl9GUEdBX1BSR19JTklUX0hJR0ggLTIgICAgICAgIC8qIFRpbWVvdXQgYWZ0ZXIgUFJHKiBkZWFzc2VydGVkICovCi0jZGVmaW5lIEVSUk9SX0ZQR0FfUFJHX0RPTkUgICAgICAtMyAgICAgICAgLyogVGltZW91dCBhZnRlciBwcm9ncmFtbWluZyAgICAgKi8KLQotI2RlZmluZSBTRVRfRlBHQShkYXRhKSAgICAgICAgIG91dDMyKEdQSU8wX09SLCBkYXRhKQotCi0jZGVmaW5lIEZQR0FfV1JJVEVfMSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlTRVRfRlBHQShGUEdBX1BSRyB8ICAgICAgICAgICAgRlBHQV9EQVRBKTsgIC8qIHNldCBjbG9jayB0byAwICovICBcCi0JU0VUX0ZQR0EoRlBHQV9QUkcgfCAgICAgICAgICAgIEZQR0FfREFUQSk7ICAvKiBzZXQgZGF0YSB0byAxICAqLyAgXAotCVNFVF9GUEdBKEZQR0FfUFJHIHwgRlBHQV9DTEsgfCBGUEdBX0RBVEEpOyAgLyogc2V0IGNsb2NrIHRvIDEgKi8gIFwKLQlTRVRfRlBHQShGUEdBX1BSRyB8IEZQR0FfQ0xLIHwgRlBHQV9EQVRBKTt9IC8qIHNldCBkYXRhIHRvIDEgICovCi0KLSNkZWZpbmUgRlBHQV9XUklURV8wIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCVNFVF9GUEdBKEZQR0FfUFJHIHwgICAgICAgICAgICBGUEdBX0RBVEEpOyAgLyogc2V0IGNsb2NrIHRvIDAgKi8gIFwKLQlTRVRfRlBHQShGUEdBX1BSRyk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCBkYXRhIHRvIDAgICovICBcCi0JU0VUX0ZQR0EoRlBHQV9QUkcgfCBGUEdBX0NMSyk7ICAgICAgICAgICAgICAvKiBzZXQgY2xvY2sgdG8gMSAqLyAgXAotCVNFVF9GUEdBKEZQR0FfUFJHIHwgRlBHQV9DTEsgfCBGUEdBX0RBVEEpO30gLyogc2V0IGRhdGEgdG8gMSAgKi8KLQotI2lmIDAKLXN0YXRpYyBpbnQgZnBnYV9ib290ICh1bnNpZ25lZCBjaGFyICpmcGdhZGF0YSwgaW50IHNpemUpCi17Ci0JaW50IGksIGluZGV4LCBsZW47Ci0JaW50IGNvdW50OwotCi0jaWZkZWYgQ09ORklHX1NZU19GUEdBX1NQQVJUQU4yCi0JaW50IGo7Ci0jZWxzZQotCXVuc2lnbmVkIGNoYXIgYjsKLQlpbnQgYml0OwotI2VuZGlmCi0KLQkvKiBkaXNwbGF5IGluZm9zIG9uIGZwZ2FpbWFnZSAqLwotCWluZGV4ID0gMTU7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlsZW4gPSBmcGdhZGF0YVtpbmRleF07Ci0JCURCRyAoIkZQR0E6ICVzXG4iLCAmKGZwZ2FkYXRhW2luZGV4ICsgMV0pKTsKLQkJaW5kZXggKz0gbGVuICsgMzsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfU1lTX0ZQR0FfU1BBUlRBTjIKLQkvKiBzZWFyY2ggZm9yIHByZWFtYmxlIDB4RkZGRkZGRkYgKi8KLQl3aGlsZSAoMSkgewotCQlpZiAoKGZwZ2FkYXRhW2luZGV4XSA9PSAweGZmKSAmJiAoZnBnYWRhdGFbaW5kZXggKyAxXSA9PSAweGZmKQotCQkgICAgJiYgKGZwZ2FkYXRhW2luZGV4ICsgMl0gPT0gMHhmZikKLQkJICAgICYmIChmcGdhZGF0YVtpbmRleCArIDNdID09IDB4ZmYpKQotCQkJYnJlYWs7CS8qIHByZWFtYmxlIGZvdW5kICovCi0JCWVsc2UKLQkJCWluZGV4Kys7Ci0JfQotI2Vsc2UKLQkvKiBzZWFyY2ggZm9yIHByZWFtYmxlIDB4RkYyWCAqLwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHNpemUgLSAxOyBpbmRleCsrKSB7Ci0JCWlmICgoZnBnYWRhdGFbaW5kZXhdID09IDB4ZmYpCi0JCSAgICAmJiAoKGZwZ2FkYXRhW2luZGV4ICsgMV0gJiAweGYwKSA9PSAweDMwKSkKLQkJCWJyZWFrOwotCX0KLQlpbmRleCArPSAyOwotI2VuZGlmCi0KLQlEQkcgKCJGUEdBOiBjb25maWdkYXRhIHN0YXJ0cyBhdCBwb3NpdGlvbiAweCV4XG4iLCBpbmRleCk7Ci0JREJHICgiRlBHQTogbGVuZ3RoIG9mIGZwZ2EtZGF0YSAlZFxuIiwgc2l6ZSAtIGluZGV4KTsKLQotCS8qCi0JICogU2V0dXAgcG9ydCBwaW5zIGZvciBmcGdhIHByb2dyYW1taW5nCi0JICovCi0Jb3V0MzIgKEdQSU8wX09EUiwgMHgwMDAwMDAwMCk7CS8qIG5vIG9wZW4gZHJhaW4gcGlucyAqLwotCW91dDMyIChHUElPMF9UQ1IsIGluMzIgKEdQSU8wX1RDUikgfCBGUEdBX1BSRyB8IEZQR0FfQ0xLIHwgRlBHQV9EQVRBKTsJLyogc2V0dXAgZm9yIG91dHB1dCAqLwotCW91dDMyIChHUElPMF9PUiwgaW4zMiAoR1BJTzBfT1IpIHwgRlBHQV9QUkcgfCBGUEdBX0NMSyB8IEZQR0FfREFUQSk7CS8qIHNldCBwaW5zIHRvIGhpZ2ggKi8KLQotCURCRyAoIiVzLCAiLAotCSAgICAgKChpbjMyIChHUElPMF9JUikgJiBGUEdBX0RPTkUpID09IDApID8gIk5PVCBET05FIiA6ICJET05FIik7Ci0JREJHICgiJXNcbiIsCi0JICAgICAoKGluMzIgKEdQSU8wX0lSKSAmIEZQR0FfSU5JVCkgPT0gMCkgPyAiTk9UIElOSVQiIDogIklOSVQiKTsKLQotCS8qCi0JICogSW5pdCBmcGdhIGJ5IGFzc2VydGluZyBhbmQgZGVhc3NlcnRpbmcgUFJPR1JBTSoKLQkgKi8KLQlTRVRfRlBHQSAoRlBHQV9DTEsgfCBGUEdBX0RBVEEpOwotCi0JLyogV2FpdCBmb3IgRlBHQSBpbml0IGxpbmUgbG93ICovCi0JY291bnQgPSAwOwotCXdoaWxlIChpbjMyIChHUElPMF9JUikgJiBGUEdBX0lOSVQpIHsKLQkJdWRlbGF5ICgxMDAwKTsJLyogd2FpdCAxbXMgKi8KLQkJLyogQ2hlY2sgZm9yIHRpbWVvdXQgLSAxMDB1cyBtYXgsIHNvIHVzZSAzbXMgKi8KLQkJaWYgKGNvdW50KysgPiAzKSB7Ci0JCQlEQkcgKCJGUEdBOiBCb290aW5nIGZhaWxlZCFcbiIpOwotCQkJcmV0dXJuIEVSUk9SX0ZQR0FfUFJHX0lOSVRfTE9XOwotCQl9Ci0JfQotCi0JREJHICgiJXMsICIsCi0JICAgICAoKGluMzIgKEdQSU8wX0lSKSAmIEZQR0FfRE9ORSkgPT0gMCkgPyAiTk9UIERPTkUiIDogIkRPTkUiKTsKLQlEQkcgKCIlc1xuIiwKLQkgICAgICgoaW4zMiAoR1BJTzBfSVIpICYgRlBHQV9JTklUKSA9PSAwKSA/ICJOT1QgSU5JVCIgOiAiSU5JVCIpOwotCi0JLyogZGVhc3NlcnQgUFJPR1JBTSogKi8KLQlTRVRfRlBHQSAoRlBHQV9QUkcgfCBGUEdBX0NMSyB8IEZQR0FfREFUQSk7Ci0KLQkvKiBXYWl0IGZvciBGUEdBIGVuZCBvZiBpbml0IHBlcmlvZCAuICAqLwotCWNvdW50ID0gMDsKLQl3aGlsZSAoIShpbjMyIChHUElPMF9JUikgJiBGUEdBX0lOSVQpKSB7Ci0JCXVkZWxheSAoMTAwMCk7CS8qIHdhaXQgMW1zICovCi0JCS8qIENoZWNrIGZvciB0aW1lb3V0ICovCi0JCWlmIChjb3VudCsrID4gMykgewotCQkJREJHICgiRlBHQTogQm9vdGluZyBmYWlsZWQhXG4iKTsKLQkJCXJldHVybiBFUlJPUl9GUEdBX1BSR19JTklUX0hJR0g7Ci0JCX0KLQl9Ci0KLQlEQkcgKCIlcywgIiwKLQkgICAgICgoaW4zMiAoR1BJTzBfSVIpICYgRlBHQV9ET05FKSA9PSAwKSA/ICJOT1QgRE9ORSIgOiAiRE9ORSIpOwotCURCRyAoIiVzXG4iLAotCSAgICAgKChpbjMyIChHUElPMF9JUikgJiBGUEdBX0lOSVQpID09IDApID8gIk5PVCBJTklUIiA6ICJJTklUIik7Ci0KLQlEQkcgKCJ3cml0ZSBjb25maWd1cmF0aW9uIGRhdGEgaW50byBmcGdhXG4iKTsKLQkvKiB3cml0ZSBjb25maWd1cmF0aW9uLWRhdGEgaW50byBmcGdhLi4uICovCi0KLSNpZmRlZiBDT05GSUdfU1lTX0ZQR0FfU1BBUlRBTjIKLQkvKgotCSAqIExvYWQgdW5jb21wcmVzc2VkIGltYWdlIGludG8gZnBnYQotCSAqLwotCWZvciAoaSA9IGluZGV4OyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKLQkJCWlmICgoZnBnYWRhdGFbaV0gJiAweDgwKSA9PSAweDgwKSB7Ci0JCQkJRlBHQV9XUklURV8xOwotCQkJfSBlbHNlIHsKLQkJCQlGUEdBX1dSSVRFXzA7Ci0JCQl9Ci0JCQlmcGdhZGF0YVtpXSA8PD0gMTsKLQkJfQotCX0KLSNlbHNlCS8qICEgQ09ORklHX1NZU19GUEdBX1NQQVJUQU4yICovCi0JLyogc2VuZCAweGZmIDB4MjAgKi8KLQlGUEdBX1dSSVRFXzE7Ci0JRlBHQV9XUklURV8xOwotCUZQR0FfV1JJVEVfMTsKLQlGUEdBX1dSSVRFXzE7Ci0JRlBHQV9XUklURV8xOwotCUZQR0FfV1JJVEVfMTsKLQlGUEdBX1dSSVRFXzE7Ci0JRlBHQV9XUklURV8xOwotCUZQR0FfV1JJVEVfMDsKLQlGUEdBX1dSSVRFXzA7Ci0JRlBHQV9XUklURV8xOwotCUZQR0FfV1JJVEVfMDsKLQlGUEdBX1dSSVRFXzA7Ci0JRlBHQV9XUklURV8wOwotCUZQR0FfV1JJVEVfMDsKLQlGUEdBX1dSSVRFXzA7Ci0KLQkvKgotCSAqKiBCaXRfRGVDb21wcmVzc2lvbgotCSAqKiAgIENvZGUgMSAgICAgICAgICAgLi4gbWF4T25lcyAgICAgOiBuICAgICAgICAgICAgICAgICAnMSdzIGZvbGxvd2VkIGJ5ICcwJwotCSAqKiAgICAgICAgbWF4T25lcyArIDEgLi4gbWF4T25lcyArIDEgOiBuIC0gMSAgICAgICAgICAgICAnMSdzIG5vICcwJwotCSAqKiAgICAgICAgbWF4T25lcyArIDIgLi4gMjU0ICAgICAgICAgOiBuIC0gKG1heE9uZXMgKyAyKSAnMCdzIGZvbGxvd2VkIGJ5ICcxJwotCSAqKiAgICAgICAgMjU1ICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAnMScKLQkgKi8KLQotCWZvciAoaSA9IGluZGV4OyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCWIgPSBmcGdhZGF0YVtpXTsKLQkJaWYgKChiID49IDEpICYmIChiIDw9IE1BWF9PTkVTKSkgewotCQkJZm9yIChiaXQgPSAwOyBiaXQgPCBiOyBiaXQrKykgewotCQkJCUZQR0FfV1JJVEVfMTsKLQkJCX0KLQkJCUZQR0FfV1JJVEVfMDsKLQkJfSBlbHNlIGlmIChiID09IChNQVhfT05FUyArIDEpKSB7Ci0JCQlmb3IgKGJpdCA9IDE7IGJpdCA8IGI7IGJpdCsrKSB7Ci0JCQkJRlBHQV9XUklURV8xOwotCQkJfQotCQl9IGVsc2UgaWYgKChiID49IChNQVhfT05FUyArIDIpKSAmJiAoYiA8PSAyNTQpKSB7Ci0JCQlmb3IgKGJpdCA9IDA7IGJpdCA8IChiIC0gKE1BWF9PTkVTICsgMikpOyBiaXQrKykgewotCQkJCUZQR0FfV1JJVEVfMDsKLQkJCX0KLQkJCUZQR0FfV1JJVEVfMTsKLQkJfSBlbHNlIGlmIChiID09IDI1NSkgewotCQkJRlBHQV9XUklURV8xOwotCQl9Ci0JfQotI2VuZGlmCS8qIENPTkZJR19TWVNfRlBHQV9TUEFSVEFOMiAqLwotCi0JREJHICgiJXMsICIsCi0JICAgICAoKGluMzIgKEdQSU8wX0lSKSAmIEZQR0FfRE9ORSkgPT0gMCkgPyAiTk9UIERPTkUiIDogIkRPTkUiKTsKLQlEQkcgKCIlc1xuIiwKLQkgICAgICgoaW4zMiAoR1BJTzBfSVIpICYgRlBHQV9JTklUKSA9PSAwKSA/ICJOT1QgSU5JVCIgOiAiSU5JVCIpOwotCi0JLyoKLQkgKiBDaGVjayBpZiBmcGdhJ3MgRE9ORSBzaWduYWwgLSBjb3JyZWN0bHkgYm9vdGVkID8KLQkgKi8KLQotCS8qIFdhaXQgZm9yIEZQR0EgZW5kIG9mIHByb2dyYW1taW5nIHBlcmlvZCAuICAqLwotCWNvdW50ID0gMDsKLQl3aGlsZSAoIShpbjMyIChHUElPMF9JUikgJiBGUEdBX0RPTkUpKSB7Ci0JCXVkZWxheSAoMTAwMCk7CS8qIHdhaXQgMW1zICovCi0JCS8qIENoZWNrIGZvciB0aW1lb3V0ICovCi0JCWlmIChjb3VudCsrID4gMykgewotCQkJREJHICgiRlBHQTogQm9vdGluZyBmYWlsZWQhXG4iKTsKLQkJCXJldHVybiBFUlJPUl9GUEdBX1BSR19ET05FOwotCQl9Ci0JfQotCi0JREJHICgiRlBHQTogQm9vdGluZyBzdWNjZXNzZnVsIVxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYJLyogMCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2ZS9jb21tb24vcGNpLmMgYi9ib2FyZC9kYXZlL2NvbW1vbi9wY2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFiYzhhYy4uMDAwMDAwMAotLS0gYS9ib2FyZC9kYXZlL2NvbW1vbi9wY2kuYworKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBTdGVmYW4gUm9lc2UsIGVzZCBnbWJoIGdlcm1hbnksIHN0ZWZhbi5yb2VzZUBlc2QtZWxlY3Ryb25pY3MuY29tCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9wcGM0eHguaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8cGNpLmg+Ci0KLQotdV9sb25nIHBjaTkwNTRfaW9iYXNlOwotCi0KLSNkZWZpbmUgUENJX1BSSU1BUllfQ0FSCSgweDUwMDAwMGRjKSAvKiBQQ0kgY29uZmlnIGFkZHJlc3MgcmVnICovCi0jZGVmaW5lIFBDSV9QUklNQVJZX0NEUgkoMHg4MDAwMDAwMCkgLyogUENJIGNvbmZpZyBkYXRhICAgIHJlZyAqLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18ICBTdWJyb3V0aW5lOiAgcGNpOTA1NF9yZWFkX2NvbmZpZ19kd29yZAotfCAgRGVzY3JpcHRpb246IFJlYWQgYSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcgotfCAgSW5wdXRzOgotfCAgICAgICAgICAgICAgIGhvc2UgICAgICAgICAgICBQQ0kgQ29udHJvbGxlcgotfCAgICAgICAgICAgICAgIGRldiAgICAgICAgICAgICBQQ0kgQnVzK0RldmljZStGdW5jdGlvbiBudW1iZXIKLXwgICAgICAgICAgICAgICBvZmZzZXQgICAgICAgICAgQ29uZmlndXJhdGlvbiByZWdpc3RlciBudW1iZXIKLXwgICAgICAgICAgICAgICB2YWx1ZSAgICAgICAgICAgQWRkcmVzcyBvZiB0aGUgY29uZmlndXJhdGlvbiByZWdpc3RlciB2YWx1ZQotfCAgUmV0dXJuIHZhbHVlOgotfCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICBTdWNjZXNzZnVsCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IHBjaTkwNTRfcmVhZF9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAotCQkJICAgICAgcGNpX2Rldl90IGRldiwgaW50IG9mZnNldCwgdTMyKiB2YWx1ZSkKLXsKLSAgdW5zaWduZWQgbG9uZyAgICAgIGNvbkFkclZhbDsKLSAgdW5zaWduZWQgbG9uZyAgICAgIHZhbDsKLQotICAvKiBnZW5lcmF0ZSBjb2RlZCB2YWx1ZSBmb3IgQ09OX0FEUiByZWdpc3RlciAqLwotICBjb25BZHJWYWwgPSBkZXYgfCAob2Zmc2V0ICYgMHhmYykgfCAweDgwMDAwMDAwOwotCi0gIC8qIExvYWQgdGhlIENPTl9BRFIgKENBUikgdmFsdWUgZmlyc3QsIHRoZW4gcmVhZCBmcm9tIENPTl9EQVRBIChDRFIpICovCi0gICoodW5zaWduZWQgbG9uZyAqKVBDSV9QUklNQVJZX0NBUiA9IGNvbkFkclZhbDsKLQotICAvKiBOb3RlOiAqcFJlc3VsdCBjb21lcyBiYWNrIGFzIC0xIGlmIG1hY2hpbmUgY2hlY2sgaGFwcGVuZWQgKi8KLSAgdmFsID0gaW4zMnIoUENJX1BSSU1BUllfQ0RSKTsKLQotICAqdmFsdWUgPSAodW5zaWduZWQgbG9uZykgdmFsOwotCi0gIG91dDMycihQQ0lfUFJJTUFSWV9DQVIsIDApOwotCi0gIGlmICgoKih1bnNpZ25lZCBsb25nICopMHg1MDAwMDMwNCkgJiAweDYwMDAwMDAwKQotICAgIHsKLSAgICAgIC8qIGNsZWFyIHBjaSBtYXN0ZXIvdGFyZ2V0IGFib3J0IGJpdHMgKi8KLSAgICAgICoodW5zaWduZWQgbG9uZyAqKTB4NTAwMDAzMDQgPSAqKHVuc2lnbmVkIGxvbmcgKikweDUwMDAwMzA0OwotICAgIH0KLQotICByZXR1cm4gMDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgIFN1YnJvdXRpbmU6ICBwY2k5MDU0X3dyaXRlX2NvbmZpZ19kd29yZAotfCAgRGVzY3JpcHRpb246IFdyaXRlIGEgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCi18ICBJbnB1dHM6Ci18ICAgICAgICAgICAgICAgaG9zZSAgICAgICAgICAgIFBDSSBDb250cm9sbGVyCi18ICAgICAgICAgICAgICAgZGV2ICAgICAgICAgICAgIFBDSSBCdXMrRGV2aWNlK0Z1bmN0aW9uIG51bWJlcgotfCAgICAgICAgICAgICAgIG9mZnNldCAgICAgICAgICBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIG51bWJlcgotfCAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIHZhbHVlCi18ICBSZXR1cm4gdmFsdWU6Ci18ICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWwKLXwgVXBkYXRlZCBmb3IgcGFzczIgZXJyYXRhICM2LiBOZWVkIHRvIGRpc2FibGUgaW50ZXJydXB0cyBhbmQgY2xlYXIgdGhlCi18IFBDSUNGR0FEUiByZWcgYWZ0ZXIgd3JpdGluZyB0aGUgUENJQ0ZHREFUQSByZWcuCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IHBjaTkwNTRfd3JpdGVfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKLQkJCSAgICAgICBwY2lfZGV2X3QgZGV2LCBpbnQgb2Zmc2V0LCB1MzIgdmFsdWUpCi17Ci0gIHVuc2lnbmVkIGxvbmcgICAgICBjb25BZHJWYWw7Ci0KLSAgY29uQWRyVmFsID0gZGV2IHwgKG9mZnNldCAmIDB4ZmMpIHwgMHg4MDAwMDAwMDsKLQotICAqKHVuc2lnbmVkIGxvbmcgKilQQ0lfUFJJTUFSWV9DQVIgPSBjb25BZHJWYWw7Ci0KLSAgb3V0MzJyKFBDSV9QUklNQVJZX0NEUiwgdmFsdWUpOwotCi0gIG91dDMycihQQ0lfUFJJTUFSWV9DQVIsIDApOwotCi0gIC8qIGNsZWFyIHBjaSBtYXN0ZXIvdGFyZ2V0IGFib3J0IGJpdHMgKi8KLSAgKih1bnNpZ25lZCBsb25nICopMHg1MDAwMDMwNCA9ICoodW5zaWduZWQgbG9uZyAqKTB4NTAwMDAzMDQ7Ci0KLSAgcmV0dXJuICgwKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNpZmRlZiBDT05GSUdfREFTQV9TSU0KLXN0YXRpYyB2b2lkIHBjaV9kYXNhX3NpbV9jb25maWdfcGNpOTA1NChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHBjaV9kZXZfdCBkZXYsCi0JCQkJCXN0cnVjdCBwY2lfY29uZmlnX3RhYmxlICpfKQotewotICB1bnNpZ25lZCBpbnQgaW9iYXNlOwotICB1bnNpZ25lZCBzaG9ydCBzdGF0dXMgPSAwOwotICB1bnNpZ25lZCBjaGFyIHRpbWVyOwotCi0gIC8qCi0gICAqIENvbmZpZ3VyZSBQTFggUENJOTA1NAotICAgKi8KLSAgcGNpX3JlYWRfY29uZmlnX3dvcmQoQ09ORklHX1NZU19QQ0k5MDU0X0RFVl9GTiwgUENJX0NPTU1BTkQsICZzdGF0dXMpOwotICBzdGF0dXMgfD0gUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlk7Ci0gIHBjaV93cml0ZV9jb25maWdfd29yZChDT05GSUdfU1lTX1BDSTkwNTRfREVWX0ZOLCBQQ0lfQ09NTUFORCwgc3RhdHVzKTsKLQotICAvKiBDaGVjayB0aGUgbGF0ZW5jeSB0aW1lciBmb3IgdmFsdWVzID49IDB4NjAuCi0gICAqLwotICBwY2lfcmVhZF9jb25maWdfYnl0ZShDT05GSUdfU1lTX1BDSTkwNTRfREVWX0ZOLCBQQ0lfTEFURU5DWV9USU1FUiwgJnRpbWVyKTsKLSAgaWYgKHRpbWVyIDwgMHg2MCkKLSAgICB7Ci0gICAgICBwY2lfd3JpdGVfY29uZmlnX2J5dGUoQ09ORklHX1NZU19QQ0k5MDU0X0RFVl9GTiwgUENJX0xBVEVOQ1lfVElNRVIsIDB4NjApOwotICAgIH0KLQotICAvKiBTZXQgSS9PIGJhc2UgcmVnaXN0ZXIuCi0gICAqLwotICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKENPTkZJR19TWVNfUENJOTA1NF9ERVZfRk4sIFBDSV9CQVNFX0FERFJFU1NfMCwgQ09ORklHX1NZU19QQ0k5MDU0X0lPQkFTRSk7Ci0gIHBjaV9yZWFkX2NvbmZpZ19kd29yZChDT05GSUdfU1lTX1BDSTkwNTRfREVWX0ZOLCBQQ0lfQkFTRV9BRERSRVNTXzAsICZpb2Jhc2UpOwotCi0gIHBjaTkwNTRfaW9iYXNlID0gcGNpX21lbV90b19waHlzKENPTkZJR19TWVNfUENJOTA1NF9ERVZfRk4sIGlvYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0spOwotCi0gIGlmIChwY2k5MDU0X2lvYmFzZSA9PSAweGZmZmZmZmZmKQotICAgIHsKLSAgICAgIHByaW50ZigiRXJyb3I6IENhbiBub3Qgc2V0IEkvTyBiYXNlIHJlZ2lzdGVyLlxuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotfQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2NvbmZpZ190YWJsZSBwY2k5MDU0X2NvbmZpZ190YWJsZVtdID0gewotI2lmbmRlZiBDT05GSUdfUENJX1BOUAotICB7IFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCi0gICAgUENJX0JVUyhDT05GSUdfU1lTX0VUSF9ERVZfRk4pLCBQQ0lfREVWKENPTkZJR19TWVNfRVRIX0RFVl9GTiksIFBDSV9GVU5DKENPTkZJR19TWVNfRVRIX0RFVl9GTiksCi0gICAgcGNpX2NmZ2Z1bmNfY29uZmlnX2RldmljZSwgeyBDT05GSUdfU1lTX0VUSF9JT0JBU0UsCi0JCQkJIENPTkZJR19TWVNfRVRIX0lPQkFTRSwKLQkJCQkgUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NQVNURVIgfX0sCi0jaWZkZWYgQ09ORklHX0RBU0FfU0lNCi0gIHsgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKLSAgICBQQ0lfQlVTKENPTkZJR19TWVNfUENJOTA1NF9ERVZfRk4pLCBQQ0lfREVWKENPTkZJR19TWVNfUENJOTA1NF9ERVZfRk4pLCBQQ0lfRlVOQyhDT05GSUdfU1lTX1BDSTkwNTRfREVWX0ZOKSwKLSAgICBwY2lfZGFzYV9zaW1fY29uZmlnX3BjaTkwNTQgfSwKLSNlbmRpZgotI2VuZGlmCi0gIHsgfQotfTsKLQotc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBwY2k5MDU0X2hvc2UgPSB7Ci0gIGNvbmZpZ190YWJsZTogcGNpOTA1NF9jb25maWdfdGFibGUsCi19OwotCi12b2lkIHBjaV9pbml0KHZvaWQpCi17Ci0gIHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9ICZwY2k5MDU0X2hvc2U7Ci0KLSAgLyoKLSAgICogUmVnaXN0ZXIgdGhlIGhvc2UKLSAgICovCi0gIGhvc2UtPmZpcnN0X2J1c25vID0gMDsKLSAgaG9zZS0+bGFzdF9idXNubyA9IDB4ZmY7Ci0KLSAgLyogU3lzdGVtIG1lbW9yeSBzcGFjZSAqLwotICBwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMCwKLQkJIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDEwMDAwMDAsCi0JCSBQQ0lfUkVHSU9OX01FTSB8IFBDSV9SRUdJT05fU1lTX01FTU9SWSk7Ci0KLSAgLyogUENJIE1lbW9yeSBzcGFjZSAqLwotICBwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMSwKLQkJIDB4MDAwMDAwMDAsIDB4YzAwMDAwMDAsIDB4MTAwMDAwMDAsCi0JCSBQQ0lfUkVHSU9OX01FTSk7Ci0KLSAgcGNpX3NldF9vcHMoaG9zZSwKLQkgICAgICBwY2lfaG9zZV9yZWFkX2NvbmZpZ19ieXRlX3ZpYV9kd29yZCwKLQkgICAgICBwY2lfaG9zZV9yZWFkX2NvbmZpZ193b3JkX3ZpYV9kd29yZCwKLQkgICAgICBwY2k5MDU0X3JlYWRfY29uZmlnX2R3b3JkLAotCSAgICAgIHBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlX3ZpYV9kd29yZCwKLQkgICAgICBwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZF92aWFfZHdvcmQsCi0JICAgICAgcGNpOTA1NF93cml0ZV9jb25maWdfZHdvcmQpOwotCi0gIGhvc2UtPnJlZ2lvbl9jb3VudCA9IDI7Ci0KLSAgcGNpX3JlZ2lzdGVyX2hvc2UoaG9zZSk7Ci0KLSAgaG9zZS0+bGFzdF9idXNubyA9IHBjaV9ob3NlX3NjYW4oaG9zZSk7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvYWRjaW9wL01ha2VmaWxlIGIvYm9hcmQvZXNkL2FkY2lvcC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBlMjY0ZC4uMDAwMDAwMAotLS0gYS9ib2FyZC9lc2QvYWRjaW9wL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2Ci0jIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0jCi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotIwotCi1vYmoteQk9IGFkY2lvcC5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubyAuLi9jb21tb24vcGNpLm8KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9hZGNpb3AvYWRjaW9wLmMgYi9ib2FyZC9lc2QvYWRjaW9wL2FkY2lvcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2Q2MzdlLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2VzZC9hZGNpb3AvYWRjaW9wLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxuZXRkZXYuaD4KLSNpbmNsdWRlICJhZGNpb3AuaCIKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZGVmaW5lCV9OT1RfVVNFRF8JMHhGRkZGRkZGRgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQotaW50IGJvYXJkX2Vhcmx5X2luaXRfZiAodm9pZCkKLXsKLQkvKgotCSAqIFNldCBwb3J0IHBpbiBpbiBlc2NjMiB0byBrZWVwIGxpdmluZywgYW5kIGNvbmZpZ3VyZSB1c2VyIGxlZCBvdXRwdXQKLQkgKi8KLQkqKHVuc2lnbmVkIGNoYXIgKikgMHgyMDAwMDMzZSA9IDB4Nzc7CS8qIEVTQ0MyOiBQQ1IgYml0Mz1wd3Igb24sIGJpdDc9bGVkIG91dCAqLwotCSoodW5zaWduZWQgY2hhciAqKSAweDIwMDAwMzNjID0gMHg4ODsJLyogRVNDQzI6IFBWUiBwd3Igb24sIGxlZCBvZmYgKi8KLQotCS8qCi0JICogSW5pdCBwY2kgcmVncwotCSAqLwotCSoodW5zaWduZWQgbG9uZyAqKSAweDUwMDAwMzA0ID0gMHgwMjkwMDAwNzsJLyogZW5hYmxlIG1lbS9pby9tYXN0ZXIgYml0cyAqLwotCSoodW5zaWduZWQgbG9uZyAqKSAweDUwMDAwMWI0ID0gMHgwMDAwMDAwMDsJLyogZGlzYWJsZSBwY2kgaW50ZXJydXB0IG91dHB1dCBlbmFibGUgKi8KLQkqKHVuc2lnbmVkIGxvbmcgKikgMHg1MDAwMDM1NCA9IDB4MDBjMDU4MDA7CS8qIGRpc2FibGUgZW11biBpbnRlcnJ1cHQgb3V0cHV0IGVuYWJsZSAqLwotCSoodW5zaWduZWQgbG9uZyAqKSAweDUwMDAwMzQ0ID0gMHgwMDAwMDAwMDsJLyogZGlzYWJsZSBwbWUgaW50ZXJydXB0IG91dHB1dCBlbmFibGUgKi8KLQkqKHVuc2lnbmVkIGxvbmcgKikgMHg1MDAwMDMxMCA9IDB4MDAwMDAwMDA7CS8qIHBjaWJhcjAgKi8KLQkqKHVuc2lnbmVkIGxvbmcgKikgMHg1MDAwMDMxNCA9IDB4MDAwMDAwMDA7CS8qIHBjaWJhcjEgKi8KLQkqKHVuc2lnbmVkIGxvbmcgKikgMHg1MDAwMDMxOCA9IDB4MDAwMDAwMDA7CS8qIHBjaWJhcjIgKi8KLQotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBDaGVjayBCb2FyZCBJZGVudGl0eToKLSAqLwotCi1pbnQgY2hlY2tib2FyZCAodm9pZCkKLXsKLQljaGFyIHN0cls2NF07Ci0JaW50IGkgPSBnZXRlbnZfZigic2VyaWFsIyIsIHN0ciwgc2l6ZW9mIChzdHIpKTsKLQotCXB1dHMgKCJCb2FyZDogIik7Ci0KLQlpZiAoIWkgfHwgc3RybmNtcCAoc3RyLCAiQURDSU9QIiwgNikpIHsKLQkJcHV0cyAoIiMjIyBObyBIVyBJRCAtIGFzc3VtaW5nIEFEQ0lPUFxuIik7Ci0JCXJldHVybiAoMSk7Ci0JfQotCi0JcHV0cyAoc3RyKTsKLQotCXB1dGMgKCdcbicpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotcGh5c19zaXplX3QgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQotewotCXJldHVybiAoMTYgKiAxMDI0ICogMTAyNCk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotaW50IHRlc3RkcmFtICh2b2lkKQotewotCS8qIFRPRE86IFhYWCBYWFggWFhYICovCi0JcHJpbnRmICgidGVzdDogMTYgTUIgLSBva1xuIik7Ci0KLQlyZXR1cm4gKDApOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWludCBib2FyZF9ldGhfaW5pdChiZF90ICpiaXMpCi17Ci0JcmV0dXJuIHBjaV9ldGhfaW5pdChiaXMpOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2FkY2lvcC9hZGNpb3AuaCBiL2JvYXJkL2VzZC9hZGNpb3AvYWRjaW9wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZTc5NTAuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZXNkL2FkY2lvcC9hZGNpb3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEZMQVNIIE1lbW9yeSBNYXAgYXMgdXNlZCBieSBUUSBNb25pdG9yOgotICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydCBBZGRyZXNzICAgIExlbmd0aAotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAweDQwMDBfMDAwMCAgICAgU3RhcnQgb2YgRmxhc2ggLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHwgTU9OOHh4IGNvZGUgICAgICAgICAgIHwgMHg0MDAwXzAxMDAgICAgIFJlc2V0IFZlY3RvcgotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAweDQwMD9fPz8/PwotICogfCAodW51c2VkKSAgICAgICAgICAgICAgfAotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAweDQwMDFfRkYwMAotICogfCBFdGhlcm5ldCBBZGRyZXNzZXMgICAgfCAgICAgICAgICAgICAgICAgMHg3OAotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAweDQwMDFfRkY3OAotICogfCAoUmVzZXJ2ZWQgZm9yIE1PTjh4eCkgfCAgICAgICAgICAgICAgICAgMHg0NAotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAweDQwMDFfRkZCQwotICogfCBMb2NrIEFkZHJlc3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgMHgwNAotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAweDQwMDFfRkZDMCAgICAgICAgICAgICAgICAgICAgIF4KLSAqIHwgSGFyZHdhcmUgSW5mb3JtYXRpb24gIHwgICAgICAgICAgICAgICAgIDB4NDAgICAgICAgICAgICB8IE1PTjh4eAotICogKz09PT09PT09PT09PT09PT09PT09PT09KyAweDQwMDJfMDAwMCAoc2VjdG9yIGJvcmRlcikgICAgLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHwgQXV0b3N0YXJ0IEhlYWRlciAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFwcGxpY2F0aW9ucwotICogfCAuLi4gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvYWRjaW9wL2ZsYXNoLmMgYi9ib2FyZC9lc2QvYWRjaW9wL2ZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZGIxMmUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZXNkL2FkY2lvcC9mbGFzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogU3RlZmFuIFJvZXNlLCBlc2QgZ21iaCBnZXJtYW55LCBzdGVmYW4ucm9lc2VAZXNkLWVsZWN0cm9uaWNzLmNvbQotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxhc20vcHBjNHh4Lmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotCi0vKgotICogaW5jbHVkZSBjb21tb24gZmxhc2ggY29kZSAoZm9yIGVzZCBib2FyZHMpCi0gKi8KLSNpbmNsdWRlICIuLi9jb21tb24vZmxhc2guYyIKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRnVuY3Rpb25zCi0gKi8KLXN0YXRpYyB1bG9uZyBmbGFzaF9nZXRfc2l6ZSAodnVfbG9uZyAqYWRkciwgZmxhc2hfaW5mb190ICppbmZvKTsKLXN0YXRpYyB2b2lkIGZsYXNoX2dldF9vZmZzZXRzICh1bG9uZyBiYXNlLCBmbGFzaF9pbmZvX3QgKmluZm8pOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotdW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgc2l6ZV9iMCwgc2l6ZV9iMTsKLQlpbnQgaTsKLQotCS8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KLQlmb3IgKGk9MDsgaTxDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUzsgKytpKSB7Ci0JCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotCX0KLQotCXNpemVfYjAgPSBmbGFzaF9nZXRfc2l6ZSgodnVfbG9uZyAqKUZMQVNIX0JBU0UwX1BSRUxJTSwgJmZsYXNoX2luZm9bMF0pOwotCi0JaWYgKGZsYXNoX2luZm9bMF0uZmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCQlwcmludGYgKCIjIyBVbmtub3duIEZMQVNIIG9uIEJhbmsgMCAtIFNpemUgPSAweCUwOGx4ID0gJWxkIE1CXG4iLAotCQkJc2l6ZV9iMCwgc2l6ZV9iMDw8MjApOwotCX0KLQotCXNpemVfYjEgPSBmbGFzaF9nZXRfc2l6ZSgodnVfbG9uZyAqKUZMQVNIX0JBU0UxX1BSRUxJTSwgJmZsYXNoX2luZm9bMV0pOwotCi0JaWYgKHNpemVfYjEgPiBzaXplX2IwKSB7Ci0JCXByaW50ZiAoIiMjIEVSUk9SOiAiCi0JCQkiQmFuayAxICgweCUwOGx4ID0gJWxkIE1CKSA+IEJhbmsgMCAoMHglMDhseCA9ICVsZCBNQilcbiIsCi0JCQlzaXplX2IxLCBzaXplX2IxPDwyMCwKLQkJCXNpemVfYjAsIHNpemVfYjA8PDIwCi0JCSk7Ci0JCWZsYXNoX2luZm9bMF0uZmxhc2hfaWQJPSBGTEFTSF9VTktOT1dOOwotCQlmbGFzaF9pbmZvWzFdLmZsYXNoX2lkCT0gRkxBU0hfVU5LTk9XTjsKLQkJZmxhc2hfaW5mb1swXS5zZWN0b3JfY291bnQJPSAtMTsKLQkJZmxhc2hfaW5mb1sxXS5zZWN0b3JfY291bnQJPSAtMTsKLQkJZmxhc2hfaW5mb1swXS5zaXplCQk9IDA7Ci0JCWZsYXNoX2luZm9bMV0uc2l6ZQkJPSAwOwotCQlyZXR1cm4gKDApOwotCX0KLQotCS8qIFJlLWRvIHNpemluZyB0byBnZXQgZnVsbCBjb3JyZWN0IGluZm8gKi8KLQlzaXplX2IwID0gZmxhc2hfZ2V0X3NpemUoKHZ1X2xvbmcgKilGTEFTSF9CQVNFMF9QUkVMSU0sICZmbGFzaF9pbmZvWzBdKTsKLQotCWZsYXNoX2dldF9vZmZzZXRzIChGTEFTSF9CQVNFMF9QUkVMSU0sICZmbGFzaF9pbmZvWzBdKTsKLQotCS8qIG1vbml0b3IgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCi0JZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotCQkgICAgICBGTEFTSF9CQVNFMF9QUkVMSU0rc2l6ZV9iMC1tb25pdG9yX2ZsYXNoX2xlbiwKLQkJICAgICAgRkxBU0hfQkFTRTBfUFJFTElNK3NpemVfYjAtMSwKLQkJICAgICAgJmZsYXNoX2luZm9bMF0pOwotCi0JaWYgKHNpemVfYjEpIHsKLQkJLyogUmUtZG8gc2l6aW5nIHRvIGdldCBmdWxsIGNvcnJlY3QgaW5mbyAqLwotCQlzaXplX2IxID0gZmxhc2hfZ2V0X3NpemUoKHZ1X2xvbmcgKikoRkxBU0hfQkFTRTBfUFJFTElNICsgc2l6ZV9iMCksCi0JCQkJCSAgJmZsYXNoX2luZm9bMV0pOwotCi0JCWZsYXNoX2dldF9vZmZzZXRzIChGTEFTSF9CQVNFMF9QUkVMSU0gKyBzaXplX2IwLCAmZmxhc2hfaW5mb1sxXSk7Ci0KLQkJLyogbW9uaXRvciBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KLQkJZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotCQkJICAgICAgRkxBU0hfQkFTRTBfUFJFTElNK3NpemVfYjArc2l6ZV9iMS1tb25pdG9yX2ZsYXNoX2xlbiwKLQkJCSAgICAgIEZMQVNIX0JBU0UwX1BSRUxJTStzaXplX2IwK3NpemVfYjEtMSwKLQkJCSAgICAgICZmbGFzaF9pbmZvWzFdKTsKLQkJLyogbW9uaXRvciBwcm90ZWN0aW9uIE9GRiBieSBkZWZhdWx0IChvbmUgaXMgZW5vdWdoKSAqLwotCQlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9DTEVBUiwKLQkJCSAgICAgIEZMQVNIX0JBU0UwX1BSRUxJTStzaXplX2IwLW1vbml0b3JfZmxhc2hfbGVuLAotCQkJICAgICAgRkxBU0hfQkFTRTBfUFJFTElNK3NpemVfYjAtMSwKLQkJCSAgICAgICZmbGFzaF9pbmZvWzBdKTsKLQl9IGVsc2UgewotCQlmbGFzaF9pbmZvWzFdLmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKLQkJZmxhc2hfaW5mb1sxXS5zZWN0b3JfY291bnQgPSAtMTsKLQl9Ci0KLQlmbGFzaF9pbmZvWzBdLnNpemUgPSBzaXplX2IwOwotCWZsYXNoX2luZm9bMV0uc2l6ZSA9IHNpemVfYjE7Ci0KLQlyZXR1cm4gKHNpemVfYjAgKyBzaXplX2IxKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kYXNhX3NpbS9NYWtlZmlsZSBiL2JvYXJkL2VzZC9kYXNhX3NpbS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5ZjVmOC4uMDAwMDAwMAotLS0gYS9ib2FyZC9lc2QvZGFzYV9zaW0vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKLSMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSMKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0jCi0KLW9iai15CT0gZGFzYV9zaW0ubyBmbGFzaC5vIGNtZF9kYXNhX3NpbS5vIGVlcHJvbS5vIC4uL2NvbW1vbi9wY2kubwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2Rhc2Ffc2ltL2NtZF9kYXNhX3NpbS5jIGIvYm9hcmQvZXNkL2Rhc2Ffc2ltL2NtZF9kYXNhX3NpbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTkxNjI0Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2VzZC9kYXNhX3NpbS9jbWRfZGFzYV9zaW0uYworKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBTdGVmYW4gUm9lc2UsIGVzZCBnbWJoIGdlcm1hbnksIHN0ZWZhbi5yb2VzZUBlc2QtZWxlY3Ryb25pY3MuY29tCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxwY2kuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2RlZmluZSBPSyAwCi0jZGVmaW5lIEVSUk9SICgtMSkKLQotZXh0ZXJuIHVfbG9uZyBwY2k5MDU0X2lvYmFzZTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogUm91dGluZXMgZm9yIFBMWCBQQ0k5MDU0IGVlcHJvbSBhY2Nlc3MKLSAqCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBQY2lFZXByb21SZWFkTG9uZ1ZQRCAoaW50IG9mZnMpCi17Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCXVuc2lnbmVkIGludCByZXQ7Ci0JaW50IGNvdW50OwotCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZCAoQ09ORklHX1NZU19QQ0k5MDU0X0RFVl9GTiwgMHg0YywKLQkJCQkob2ZmcyA8PCAxNikgfCAweDAwMDMpOwotCWNvdW50ID0gMDsKLQotCWZvciAoOzspIHsKLQkJdWRlbGF5ICgxMCAqIDEwMDApOwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQgKENPTkZJR19TWVNfUENJOTA1NF9ERVZfRk4sIDB4NGMsICZyZXQpOwotCQlpZiAoKHJldCAmIDB4ODAwMDAwMDApICE9IDApIHsKLQkJCWJyZWFrOwotCQl9IGVsc2UgewotCQkJY291bnQrKzsKLQkJCWlmIChjb3VudCA+IDEwKSB7Ci0JCQkJcHJpbnRmICgiXG5UaW1lb3V0OiByZXQ9JTA4eCAtIFBsZWFzZSB0cnkgYWdhaW4hXG4iLCByZXQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkIChDT05GSUdfU1lTX1BDSTkwNTRfREVWX0ZOLCAweDUwLCAmdmFsdWUpOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi0KLXN0YXRpYyBpbnQgUGNpRWVwcm9tV3JpdGVMb25nVlBEIChpbnQgb2ZmcywgdW5zaWduZWQgaW50IHZhbHVlKQotewotCXVuc2lnbmVkIGludCByZXQ7Ci0JaW50IGNvdW50OwotCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZCAoQ09ORklHX1NZU19QQ0k5MDU0X0RFVl9GTiwgMHg1MCwgdmFsdWUpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQgKENPTkZJR19TWVNfUENJOTA1NF9ERVZfRk4sIDB4NGMsCi0JCQkJKG9mZnMgPDwgMTYpIHwgMHg4MDAwMDAwMyk7Ci0JY291bnQgPSAwOwotCi0JZm9yICg7OykgewotCQl1ZGVsYXkgKDEwICogMTAwMCk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZCAoQ09ORklHX1NZU19QQ0k5MDU0X0RFVl9GTiwgMHg0YywgJnJldCk7Ci0JCWlmICgocmV0ICYgMHg4MDAwMDAwMCkgPT0gMCkgewotCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQljb3VudCsrOwotCQkJaWYgKGNvdW50ID4gMTApIHsKLQkJCQlwcmludGYgKCJcblRpbWVvdXQ6IHJldD0lMDh4IC0gUGxlYXNlIHRyeSBhZ2FpbiFcbiIsIHJldCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotCi1zdGF0aWMgdm9pZCBzaG93UGNpOTA1NCAodm9pZCkKLXsKLQlpbnQgdmFsOwotCWludCBsLCBpOwotCi0JLyogcmVhZCA5MDU0LXZhbHVlcyAqLwotCWZvciAobCA9IDA7IGwgPCA2OyBsKyspIHsKLQkJcHJpbnRmICgiJTAyeDogIiwgbCAqIDB4MTApOwotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQlwY2lfcmVhZF9jb25maWdfZHdvcmQgKENPTkZJR19TWVNfUENJOTA1NF9ERVZfRk4sCi0JCQkJCQlsICogMTYgKyBpICogNCwKLQkJCQkJCSh1bnNpZ25lZCBpbnQgKikmdmFsKTsKLQkJCXByaW50ZiAoIiUwOHggIiwgdmFsKTsKLQkJfQotCQlwcmludGYgKCJcbiIpOwotCX0KLQlwcmludGYgKCJcbiIpOwotCi0JZm9yIChsID0gMDsgbCA8IDc7IGwrKykgewotCQlwcmludGYgKCIlMDJ4OiAiLCBsICogMHgxMCk7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCQlwcmludGYgKCIlMDh4ICIsCi0JCQkJUGNpRWVwcm9tUmVhZExvbmdWUEQgKChpICsgbCAqIDQpICogNCkpOwotCQlwcmludGYgKCJcbiIpOwotCX0KLQlwcmludGYgKCJcbiIpOwotfQotCi0KLXN0YXRpYyB2b2lkIHVwZGF0ZVBjaTkwNTQgKHZvaWQpCi17Ci0JLyoKLQkgKiBTZXQgRUVQUk9NIHdyaXRlLXByb3RlY3QgcmVnaXN0ZXIgdG8gMAotCSAqLwotCW91dF9iZTMyICgodm9pZCAqKShwY2k5MDU0X2lvYmFzZSArIDB4MGMpLAotCQkgIGluX2JlMzIgKCh2b2lkICopKHBjaTkwNTRfaW9iYXNlICsgMHgwYykpICYgMHhmZmZmMDBmZik7Ci0KLQkvKiBMb25nIFNlcmlhbCBFRVBST00gTG9hZCBSZWdpc3RlcnMuLi4gKi8KLQlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDAsIDB4OTA1NDEwYjUpOwotCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgwNCwgMHgwOTgwMDAwMSk7CS8qIG90aGVyIGlucHV0IGNvbnRyb2xsZXIgKi8KLQlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDgsIDB4MjgxNDAxMDApOwotCi0JUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDBjLCAweDAwMDAwMDAwKTsJLyogTUJPWDAuLi4gKi8KLQlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MTAsIDB4MDAwMDAwMDApOwotCi0JLyogbGFzMDogZnBnYSBhY2Nlc3MgKDB4MDAwMC4wMDAwIC4uLiAweDAwMDMuZmZmZikgKi8KLQlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MTQsIDB4ZmZmYzAwMDApOwkvKiBMQVMwUlIuLi4gKi8KLQlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MTgsIDB4MDAwMDAwMDEpOwkvKiBMQVMwQkEgKi8KLQotCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgxYywgMHgwMDIwMDAwMCk7CS8qIE1BUkJSLi4uICovCi0JUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDIwLCAweDAwMzAwNTAwKTsJLyogTE1JU0MvQklHRU5EICovCi0KLQlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MjQsIDB4MDAwMDAwMDApOwkvKiBFUk9NUlIuLi4gKi8KLQlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MjgsIDB4MDAwMDAwMDApOwkvKiBFUk9NQkEgKi8KLQotCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgyYywgMHg0MzAzMDAwMCk7CS8qIExCUkQwLi4uICovCi0KLQlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MzAsIDB4MDAwMDAwMDApOwkvKiBETVJSLi4uICovCi0JUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDM0LCAweDAwMDAwMDAwKTsKLQlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MzgsIDB4MDAwMDAwMDApOwotCi0JUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDNjLCAweDAwMDAwMDAwKTsJLyogRE1QQkFNLi4uICovCi0JUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDQwLCAweDAwMDAwMDAwKTsKLQotCS8qIEV4dHJhIExvbmcgU2VyaWFsIEVFUFJPTSBMb2FkIFJlZ2lzdGVycy4uLiAqLwotCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHg0NCwgMHgwMTAyMTJmZSk7CS8qIFBDSVNJRC4uLiAqLwotCi0JLyogbGFzMTogNTA1LXNyYW0gYWNjZXNzICgweDAwMDQuMDAwMCAuLi4gMHgwMDFmLmZmZmYpICovCi0JLyogT2Zmc2V0IHRvIExBUzE6IEdyb3VwIDE6IDB4MDAwNDAwMDAgICAgICAgICAgICAgICAgICovCi0JLyogICAgICAgICAgICAgICAgIEdyb3VwIDI6IDB4MDAwODAwMDAgICAgICAgICAgICAgICAgICovCi0JLyogICAgICAgICAgICAgICAgIEdyb3VwIDM6IDB4MDAwYzAwMDAgICAgICAgICAgICAgICAgICovCi0JUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDQ4LCAweGZmZTAwMDAwKTsJLyogTEFTMVJSICovCi0JUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDRjLCAweDAwMDQwMDAxKTsJLyogTEFTMUJBICovCi0JUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDUwLCAweDAwMDAwMjA4KTsJLyogTEJSRDEgKi8gLyogc28gd2FycyBiaXNoZXIgKi8KLQotCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHg1NCwgMHgwMDAwNGMwNik7CS8qIEhvdFN3YXAuLi4gKi8KLQotCXByaW50ZiAoIkZpbmlzaGVkIHdyaXRpbmcgZGVmYXVsdHMgaW50byBQTFggUENJOTA1NCBFRVBST00hXG4iKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBjbGVhclBjaTkwNTQgKHZvaWQpCi17Ci0JLyoKLQkgKiBTZXQgRUVQUk9NIHdyaXRlLXByb3RlY3QgcmVnaXN0ZXIgdG8gMAotCSAqLwotCW91dF9iZTMyICgodm9pZCAqKShwY2k5MDU0X2lvYmFzZSArIDB4MGMpLAotCQkgIGluX2JlMzIgKCh2b2lkICopKHBjaTkwNTRfaW9iYXNlICsgMHgwYykpICYgMHhmZmZmMDBmZik7Ci0KLQkvKiBMb25nIFNlcmlhbCBFRVBST00gTG9hZCBSZWdpc3RlcnMuLi4gKi8KLQlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDAsIDB4ZmZmZmZmZmYpOwotCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgwNCwgMHhmZmZmZmZmZik7CS8qIG90aGVyIGlucHV0IGNvbnRyb2xsZXIgKi8KLQotCXByaW50ZiAoIkZpbmlzaGVkIGNsZWFyaW5nIFBMWCBQQ0k5MDU0IEVFUFJPTSFcbiIpOwotfQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLWludCBkb19wY2k5MDU0IChjbWRfdGJsX3QgKiBjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLAotCQkJCWNoYXIgKiBjb25zdCBhcmd2W10pCi17Ci0JaWYgKHN0cmNtcCAoYXJndlsxXSwgImluZm8iKSA9PSAwKSB7Ci0JCXNob3dQY2k5MDU0ICgpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc3RyY21wIChhcmd2WzFdLCAidXBkYXRlIikgPT0gMCkgewotCQl1cGRhdGVQY2k5MDU0ICgpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc3RyY21wIChhcmd2WzFdLCAiY2xlYXIiKSA9PSAwKSB7Ci0JCWNsZWFyUGNpOTA1NCAoKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIGNtZF91c2FnZShjbWR0cCk7Ci19Ci0KLVVfQk9PVF9DTUQoCi0JcGNpOTA1NCwgMywgMSwgZG9fcGNpOTA1NCwKLQkiUExYIFBDSTkwNTQgRUVQUk9NIGFjY2VzcyIsCi0JInBjaTkwNTQgaW5mbyAtIHByaW50IEVFUFJPTSB2YWx1ZXNcbiIKLQkicGNpOTA1NCB1cGRhdGUgLSB1cGRhdGVzIEVFUFJPTSB3aXRoIGRlZmF1bHQgdmFsdWVzIgotKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2Rhc2Ffc2ltL2Rhc2Ffc2ltLmMgYi9ib2FyZC9lc2QvZGFzYV9zaW0vZGFzYV9zaW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc3OWEwOS4uMDAwMDAwMAotLS0gYS9ib2FyZC9lc2QvZGFzYV9zaW0vZGFzYV9zaW0uYworKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBTdGVmYW4gUm9lc2UsIGVzZCBnbWJoIGdlcm1hbnksIHN0ZWZhbi5yb2VzZUBlc2QtZWxlY3Ryb25pY3MuY29tCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPG5ldGRldi5oPgotI2luY2x1ZGUgImRhc2Ffc2ltLmgiCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI3VuZGVmIEZQR0FfREVCVUcKLQotI2RlZmluZQlfTk9UX1VTRURfCTB4RkZGRkZGRkYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBmcGdhIGNvbmZpZ3VyYXRpb24gZGF0YSAtIGdlbmVyYXRlZCBieSBiaXQyaW5jICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBmcGdhZGF0YVtdID0gewotI2luY2x1ZGUgImZwZ2FkYXRhLmMiCi19OwotCi0jZGVmaW5lIEZQR0FfUFJHX1NMRUVQICAgICAgICAgMzIJLyogZnBnYSBwcm9ncmFtIHNsZWVwLXRpbWUgKi8KLSNkZWZpbmUgTE9BRF9MT05HKGEpICAgICAgICAgICBhCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIHN5c0ZwZ2FCb290IC0gTG9hZCBmcGdhLWltYWdlIGludG8gZnBnYQotICoKLSAqLwotc3RhdGljIGludCBmcGdhQm9vdCAodm9pZCkKLXsKLQlpbnQgaSwgaiwgaW5kZXgsIGxlbjsKLQl1bnNpZ25lZCBjaGFyIGI7Ci0JaW50IGltYWdlU2l6ZTsKLQotCWltYWdlU2l6ZSA9IHNpemVvZiAoZnBnYWRhdGEpOwotCi0JLyogZGlzcGxheSBpbmZvcyBvbiBmcGdhaW1hZ2UgKi8KLQlpbmRleCA9IDE1OwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJbGVuID0gZnBnYWRhdGFbaW5kZXhdOwotCQlpbmRleCArPSBsZW4gKyAzOwotCX0KLQotCS8qIHNlYXJjaCBmb3IgcHJlYW1ibGUgMHhGRjJYICovCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgaW1hZ2VTaXplIC0gMTsgaW5kZXgrKykgewotCQlpZiAoKGZwZ2FkYXRhW2luZGV4XSA9PSAweGZmKQotCQkJJiYgKChmcGdhZGF0YVtpbmRleCArIDFdICYgMHhmMCkgPT0gMHgyMCkpCi0JCQlicmVhazsKLQl9Ci0KLQkvKiBlbmFibGUgY3MxIGluc3RlYWQgb2YgdXNlcjAuLi4gKi8KLQkqKHVuc2lnbmVkIGxvbmcgKikgMHg1MDAwMDA4NCAmPSB+MHgwMDAwMDAwMjsKLQotI2lmZGVmIEZQR0FfREVCVUcKLQlwcmludGYgKCIlc1xuIiwKLQkJKChpbl9iZTMyICgodm9pZCAqKTB4NTAwMDAwODQpICYgMHgwMDAxMDAwMCkgPT0gMCkgPwotCQkiTk9UIERPTkUiIDogIkRPTkUiKTsKLSNlbmRpZgotCi0JLyogaW5pdCBmcGdhIGJ5IGFzc2VydGluZyBhbmQgZGVhc3NlcnRpbmcgUFJPR1JBTSogKFVTRVIyKS4uLiAqLwotCSoodW5zaWduZWQgbG9uZyAqKSAweDUwMDAwMDg0ICY9IH4weDAwMDAwNDAwOwotCXVkZWxheSAoRlBHQV9QUkdfU0xFRVAgKiAxMDAwKTsKLQotCSoodW5zaWduZWQgbG9uZyAqKSAweDUwMDAwMDg0IHw9IDB4MDAwMDA0MDA7Ci0JdWRlbGF5IChGUEdBX1BSR19TTEVFUCAqIDEwMDApOwotCi0jaWZkZWYgRlBHQV9ERUJVRwotCXByaW50ZiAoIiVzXG4iLAotCQkoKGluX2JlMzIgKCh2b2lkICopMHg1MDAwMDA4NCkgJiAweDAwMDEwMDAwKSA9PSAwKSA/Ci0JCSJOT1QgRE9ORSIgOiAiRE9ORSIpOwotI2VuZGlmCi0KLQkvKiBjczE6IGRpc2FibGUgYnVyc3QsIGRpc2FibGUgcmVhZHkgKi8KLQkqKHVuc2lnbmVkIGxvbmcgKikgMHg1MDAwMDExNCAmPSB+MHgwMDAwMDMwMDsKLQotCS8qIGNzMTogc2V0IHdyaXRlIHRpbWluZyAqLwotCSoodW5zaWduZWQgbG9uZyAqKSAweDUwMDAwMTE4IHw9IDB4MDAwMTA5MDA7Ci0KLQkvKiB3cml0ZSBjb25maWd1cmF0aW9uLWRhdGEgaW50byBmcGdhLi4uICovCi0JZm9yIChpID0gaW5kZXg7IGkgPCBpbWFnZVNpemU7IGkrKykgewotCQliID0gZnBnYWRhdGFbaV07Ci0JCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKLQkJCSoodW5zaWduZWQgbG9uZyAqKSAweDMwMDAwMDAwID0KLQkJCQkoKGIgJiAweDgwKSA9PSAweDgwKQotCQkJCT8gTE9BRF9MT05HICgweDAzMDMwMTAxKQotCQkJCTogTE9BRF9MT05HICgweDAyMDIwMDAwKTsKLQkJCWIgPDw9IDE7Ci0JCX0KLQl9Ci0KLSNpZmRlZiBGUEdBX0RFQlVHCi0JcHJpbnRmICgiJXNcbiIsCi0JCSgoaW5fYmUzMiAoKHZvaWQgKikweDUwMDAwMDg0KSAmIDB4MDAwMTAwMDApID09IDApID8KLQkJIk5PVCBET05FIiA6ICJET05FIik7Ci0jZW5kaWYKLQotCS8qIHNldCBjczEgdG8gMzIgYml0IGRhdGEtd2lkdGgsIGRpc2FibGUgYnVyc3QsIGVuYWJsZSByZWFkeSAqLwotCSoodW5zaWduZWQgbG9uZyAqKSAweDUwMDAwMTE0IHw9IDB4MDAwMDAyMDI7Ci0JKih1bnNpZ25lZCBsb25nICopIDB4NTAwMDAxMTQgJj0gfjB4MDAwMDAxMDA7Ci0KLQkvKiBjczE6IHNldCBpb3AgYWNjZXNzIHRvIGxpdHRsZSBlbmRpYW4gKi8KLQkqKHVuc2lnbmVkIGxvbmcgKikgMHg1MDAwMDExNCAmPSB+MHgwMDAwMDAxMDsKLQotCS8qIGNzMTogc2V0IHJlYWQgYW5kIHdyaXRlIHRpbWluZyAqLwotCSoodW5zaWduZWQgbG9uZyAqKSAweDUwMDAwMTE4ID0gMHgwMDAxMDAwMDsKLQkqKHVuc2lnbmVkIGxvbmcgKikgMHg1MDAwMDExYyA9IDB4MDAwMTAwMDE7Ci0KLSNpZmRlZiBGUEdBX0RFQlVHCi0JcHJpbnRmICgiJXNcbiIsCi0JCSgoaW5fYmUzMiAoKHZvaWQgKikweDUwMDAwMDg0KSAmIDB4MDAwMTAwMDApID09IDApID8KLQkJIk5PVCBET05FIiA6ICJET05FIik7Ci0jZW5kaWYKLQotCS8qIHdhaXQgZm9yIDMwIG1zLi4uICovCi0JdWRlbGF5ICgzMCAqIDEwMDApOwotCS8qIGNoZWNrIGlmIGZwZ2EncyBET05FIHNpZ25hbCAtIGNvcnJlY3RseSBib290ZWQgPyAqLwotCWlmICgoKih1bnNpZ25lZCBsb25nICopIDB4NTAwMDAwODQgJiAweDAwMDEwMDAwKSA9PSAwKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgYm9hcmRfZWFybHlfaW5pdF9mICh2b2lkKQotewotCS8qCi0JICogSW5pdCBwY2kgcmVncwotCSAqLwotCSoodW5zaWduZWQgbG9uZyAqKSAweDUwMDAwMzA0ID0gMHgwMjkwMDAwNzsJLyogZW5hYmxlIG1lbS9pby9tYXN0ZXIgYml0cyAqLwotCSoodW5zaWduZWQgbG9uZyAqKSAweDUwMDAwMWI0ID0gMHgwMDAwMDAwMDsJLyogZGlzYWJsZSBwY2kgaW50ZXJydXB0IG91dHB1dCBlbmFibGUgKi8KLQkqKHVuc2lnbmVkIGxvbmcgKikgMHg1MDAwMDM1NCA9IDB4MDBjMDU4MDA7CS8qIGRpc2FibGUgZW11biBpbnRlcnJ1cHQgb3V0cHV0IGVuYWJsZSAqLwotCSoodW5zaWduZWQgbG9uZyAqKSAweDUwMDAwMzQ0ID0gMHgwMDAwMDAwMDsJLyogZGlzYWJsZSBwbWUgaW50ZXJydXB0IG91dHB1dCBlbmFibGUgKi8KLQkqKHVuc2lnbmVkIGxvbmcgKikgMHg1MDAwMDMxMCA9IDB4MDAwMDAwMDA7CS8qIHBjaWJhcjAgKi8KLQkqKHVuc2lnbmVkIGxvbmcgKikgMHg1MDAwMDMxNCA9IDB4MDAwMDAwMDA7CS8qIHBjaWJhcjEgKi8KLQkqKHVuc2lnbmVkIGxvbmcgKikgMHg1MDAwMDMxOCA9IDB4MDAwMDAwMDA7CS8qIHBjaWJhcjIgKi8KLQotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBDaGVjayBCb2FyZCBJZGVudGl0eToKLSAqLwotCi1pbnQgY2hlY2tib2FyZCAodm9pZCkKLXsKLQlpbnQgaW5kZXg7Ci0JaW50IGxlbjsKLQljaGFyIHN0cls2NF07Ci0JaW50IGkgPSBnZXRlbnZfZigic2VyaWFsIyIsIHN0ciwgc2l6ZW9mIChzdHIpKTsKLQlpbnQgZnBnYTsKLQl1bnNpZ25lZCBzaG9ydCB2YWw7Ci0KLQlwdXRzICgiQm9hcmQ6ICIpOwotCi0JLyoKLQkgKiBCb290IG9uYm9hcmQgRlBHQQotCSAqLwotCWZwZ2EgPSBmcGdhQm9vdCAoKTsKLQotCWlmICghaSB8fCBzdHJuY21wIChzdHIsICJEQVNBX1NJTSIsIDgpKSB7Ci0JCXB1dHMgKCIjIyMgTm8gSFcgSUQgLSBhc3N1bWluZyBEQVNBX1NJTSIpOwotCX0KLQotCXB1dHMgKHN0cik7Ci0KLQlpZiAoZnBnYSA9PSAwKSB7Ci0JCXZhbCA9ICoodW5zaWduZWQgc2hvcnQgKikgMHgzMDAwMDIwMjsKLQkJcHJpbnRmICgiIChJZD0lZCBWZXJzaW9uPSVkIFJldmlzaW9uPSVkKSIsCi0JCQkodmFsICYgMHgwN2Y4KSA+PiAzLCB2YWwgJiAweDAwMDEsICh2YWwgJiAweDAwMDYpID4+IDEpOwotCi0JCXB1dHMgKCJcbkZQR0E6ICAiKTsKLQotCQkvKiBkaXNwbGF5IGluZm9zIG9uIGZwZ2FpbWFnZSAqLwotCQlpbmRleCA9IDE1OwotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQlsZW4gPSBmcGdhZGF0YVtpbmRleF07Ci0JCQlwcmludGYgKCIlcyAiLCAmKGZwZ2FkYXRhW2luZGV4ICsgMV0pKTsKLQkJCWluZGV4ICs9IGxlbiArIDM7Ci0JCX0KLQl9IGVsc2UgewotCQlwdXRzICgiXG5GUEdBOiAgQm9vdGluZyBmYWlsZWQhIik7Ci0JfQotCi0JcHV0YyAoJ1xuJyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotcGh5c19zaXplX3QgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQotewotCXJldHVybiAoMTYgKiAxMDI0ICogMTAyNCk7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvZGFzYV9zaW0vZGFzYV9zaW0uaCBiL2JvYXJkL2VzZC9kYXNhX3NpbS9kYXNhX3NpbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWU3OTUwLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2VzZC9kYXNhX3NpbS9kYXNhX3NpbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRkxBU0ggTWVtb3J5IE1hcCBhcyB1c2VkIGJ5IFRRIE1vbml0b3I6Ci0gKgotICogICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IEFkZHJlc3MgICAgTGVuZ3RoCi0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4NDAwMF8wMDAwICAgICBTdGFydCBvZiBGbGFzaCAtLS0tLS0tLS0tLS0tLS0tLQotICogfCBNT044eHggY29kZSAgICAgICAgICAgfCAweDQwMDBfMDEwMCAgICAgUmVzZXQgVmVjdG9yCi0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4NDAwP18/Pz8/Ci0gKiB8ICh1bnVzZWQpICAgICAgICAgICAgICB8Ci0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4NDAwMV9GRjAwCi0gKiB8IEV0aGVybmV0IEFkZHJlc3NlcyAgICB8ICAgICAgICAgICAgICAgICAweDc4Ci0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4NDAwMV9GRjc4Ci0gKiB8IChSZXNlcnZlZCBmb3IgTU9OOHh4KSB8ICAgICAgICAgICAgICAgICAweDQ0Ci0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4NDAwMV9GRkJDCi0gKiB8IExvY2sgQWRkcmVzcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAweDA0Ci0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4NDAwMV9GRkMwICAgICAgICAgICAgICAgICAgICAgXgotICogfCBIYXJkd2FyZSBJbmZvcm1hdGlvbiAgfCAgICAgICAgICAgICAgICAgMHg0MCAgICAgICAgICAgIHwgTU9OOHh4Ci0gKiArPT09PT09PT09PT09PT09PT09PT09PT0rIDB4NDAwMl8wMDAwIChzZWN0b3IgYm9yZGVyKSAgICAtLS0tLS0tLS0tLS0tLS0tLQotICogfCBBdXRvc3RhcnQgSGVhZGVyICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQXBwbGljYXRpb25zCi0gKiB8IC4uLiAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kYXNhX3NpbS9lZXByb20uYyBiL2JvYXJkL2VzZC9kYXNhX3NpbS9lZXByb20uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZjNzhkZS4uMDAwMDAwMAotLS0gYS9ib2FyZC9lc2QvZGFzYV9zaW0vZWVwcm9tLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogU3RlZmFuIFJvZXNlLCBlc2QgZ21iaCBnZXJtYW55LCBzdGVmYW4ucm9lc2VAZXNkLWVsZWN0cm9uaWNzLmNvbQotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNkZWZpbmUgRUVQUk9NX0NBUCAgICAgICAgICAgICAgMHg1MDAwMDM1OAotI2RlZmluZSBFRVBST01fREFUQSAgICAgICAgICAgICAweDUwMDAwMzVjCi0KLQotdW5zaWduZWQgaW50IGVlcHJvbVJlYWRMb25nKGludCBvZmZzKQotewotICB1bnNpZ25lZCBpbnQgdmFsdWU7Ci0gIHVuc2lnbmVkIHNob3J0IHJldDsKLSAgaW50IGNvdW50OwotCi0gIG91dF9iZTE2KCh2b2lkICopRUVQUk9NX0NBUCwgb2Zmcyk7Ci0KLSAgY291bnQgPSAwOwotCi0gIGZvciAoOzspCi0gICAgewotICAgICAgY291bnQrKzsKLSAgICAgIHJldCA9IGluX2JlMTYoKHZvaWQgKilFRVBST01fQ0FQKTsKLQotICAgICAgaWYgKChyZXQgJiAweDgwMDApICE9IDApCi0JYnJlYWs7Ci0gICAgfQotCi0gIHZhbHVlID0gaW5fYmUzMigodm9pZCAqKUVFUFJPTV9EQVRBKTsKLQotICByZXR1cm4gdmFsdWU7Ci19Ci0KLQotdW5zaWduZWQgY2hhciBlZXByb21SZWFkQnl0ZShpbnQgb2ZmcykKLXsKLSAgdW5zaWduZWQgaW50IHZhbHVlTG9uZzsKLSAgdW5zaWduZWQgY2hhciAqcHRyOwotCi0gIHZhbHVlTG9uZyA9IGVlcHJvbVJlYWRMb25nKG9mZnMgJiB+Myk7Ci0gIHB0ciA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlTG9uZzsKLQotICByZXR1cm4gcHRyW29mZnMgJiAzXTsKLX0KLQotCi12b2lkIGVlcHJvbVdyaXRlTG9uZyhpbnQgb2ZmcywgdW5zaWduZWQgaW50IHZhbHVlKQotewotICB1bnNpZ25lZCBzaG9ydCByZXQ7Ci0gIGludCBjb3VudDsKLQotICBjb3VudCA9IDA7Ci0KLSAgb3V0X2JlMzIoKHZvaWQgKilFRVBST01fREFUQSwgdmFsdWUpOwotICBvdXRfYmUxNigodm9pZCAqKUVFUFJPTV9DQVAsIDB4ODAwMCArIG9mZnMpOwotCi0gIGZvciAoOzspCi0gICAgewotICAgICAgY291bnQrKzsKLSAgICAgIHJldCA9IGluX2JlMTYoKHZvaWQgKilFRVBST01fQ0FQKTsKLQotICAgICAgaWYgKChyZXQgJiAweDgwMDApID09IDApCi0JYnJlYWs7Ci0gICAgfQotfQotCi0KLXZvaWQgZWVwcm9tV3JpdGVCeXRlKGludCBvZmZzLCB1bnNpZ25lZCBjaGFyIHZhbHVlQnl0ZSkKLXsKLSAgdW5zaWduZWQgaW50IHZhbHVlTG9uZzsKLSAgdW5zaWduZWQgY2hhciAqcHRyOwotCi0gIHZhbHVlTG9uZyA9IGVlcHJvbVJlYWRMb25nKG9mZnMgJiB+Myk7Ci0gIHB0ciA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlTG9uZzsKLQotICBwdHJbb2ZmcyAmIDNdID0gdmFsdWVCeXRlOwotCi0gIGVlcHJvbVdyaXRlTG9uZyhvZmZzICYgfjMsIHZhbHVlTG9uZyk7Ci19Ci0KLQotdm9pZCBpMmNfcmVhZCAodWNoYXIgKmFkZHIsIGludCBhbGVuLCB1Y2hhciAqYnVmZmVyLCBpbnQgbGVuKQotewotICBpbnQgaTsKLSAgaW50IGxlbjIsIHB0cjsKLQotICAvKiAgcHJpbnRmKCJcbmFkZHI9JXggYWxlbj0leCBidWZmZXI9JXggbGVuPSV4IiwgYWRkclswXSwgYWRkclsxXSwgKihzaG9ydCAqKWFkZHIsIGFsZW4sIGJ1ZmZlciwgbGVuKTsgLyMjIyogdGVzdC1vbmx5ICovCi0KLSAgcHRyID0gKihzaG9ydCAqKWFkZHI7Ci0KLSAgLyoKLSAgICogUmVhZCB0aWxsIGx3b3JkIGJvdW5kYXJ5Ci0gICAqLwotICBsZW4yID0gNCAtICgqKHNob3J0ICopYWRkciAmIDB4MDAwMyk7Ci0gIGZvciAoaT0wOyBpPGxlbjI7IGkrKykKLSAgICB7Ci0gICAgICAqYnVmZmVyKysgPSBlZXByb21SZWFkQnl0ZShwdHIrKyk7Ci0gICAgfQotCi0gIC8qCi0gICAqIFJlYWQgYWxsIGx3b3JkcwotICAgKi8KLSAgbGVuMiA9IChsZW4gLSBsZW4yKSA+PiAyOwotICBmb3IgKGk9MDsgaTxsZW4yOyBpKyspCi0gICAgewotICAgICAgKih1bnNpZ25lZCBpbnQgKilidWZmZXIgPSBlZXByb21SZWFkTG9uZyhwdHIpOwotICAgICAgYnVmZmVyICs9IDQ7Ci0gICAgICBwdHIgKz0gNDsKLSAgICB9Ci0KLSAgLyoKLSAgICogUmVhZCBsYXN0IGJ5dGVzCi0gICAqLwotICBsZW4yID0gKCooc2hvcnQgKilhZGRyICsgbGVuKSAmIDB4MDAwMzsKLSAgZm9yIChpPTA7IGk8bGVuMjsgaSsrKQotICAgIHsKLSAgICAgICpidWZmZXIrKyA9IGVlcHJvbVJlYWRCeXRlKHB0cisrKTsKLSAgICB9Ci19Ci0KLXZvaWQgaTJjX3dyaXRlICh1Y2hhciAqYWRkciwgaW50IGFsZW4sIHVjaGFyICpidWZmZXIsIGludCBsZW4pCi17Ci0gIGludCBpOwotICBpbnQgbGVuMiwgcHRyOwotCi0gIC8qICBwcmludGYoIlxuYWRkcj0leCBhbGVuPSV4IGJ1ZmZlcj0leCBsZW49JXgiLCBhZGRyWzBdLCBhZGRyWzFdLCAqKHNob3J0ICopYWRkciwgYWxlbiwgYnVmZmVyLCBsZW4pOyAvIyMjKiB0ZXN0LW9ubHkgKi8KLQotICBwdHIgPSAqKHNob3J0ICopYWRkcjsKLQotICAvKgotICAgKiBXcml0ZSB0aWxsIGx3b3JkIGJvdW5kYXJ5Ci0gICAqLwotICBsZW4yID0gNCAtICgqKHNob3J0ICopYWRkciAmIDB4MDAwMyk7Ci0gIGZvciAoaT0wOyBpPGxlbjI7IGkrKykKLSAgICB7Ci0gICAgICBlZXByb21Xcml0ZUJ5dGUocHRyKyssICpidWZmZXIrKyk7Ci0gICAgfQotCi0gIC8qCi0gICAqIFdyaXRlIGFsbCBsd29yZHMKLSAgICovCi0gIGxlbjIgPSAobGVuIC0gbGVuMikgPj4gMjsKLSAgZm9yIChpPTA7IGk8bGVuMjsgaSsrKQotICAgIHsKLSAgICAgIGVlcHJvbVdyaXRlTG9uZyhwdHIsICoodW5zaWduZWQgaW50ICopYnVmZmVyKTsKLSAgICAgIGJ1ZmZlciArPSA0OwotICAgICAgcHRyICs9IDQ7Ci0gICAgfQotCi0gIC8qCi0gICAqIFdyaXRlIGxhc3QgYnl0ZXMKLSAgICovCi0gIGxlbjIgPSAoKihzaG9ydCAqKWFkZHIgKyBsZW4pICYgMHgwMDAzOwotICBmb3IgKGk9MDsgaTxsZW4yOyBpKyspCi0gICAgewotICAgICAgZWVwcm9tV3JpdGVCeXRlKHB0cisrLCAqYnVmZmVyKyspOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kYXNhX3NpbS9mbGFzaC5jIGIvYm9hcmQvZXNkL2Rhc2Ffc2ltL2ZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NjkxZDAuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZXNkL2Rhc2Ffc2ltL2ZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBTdGVmYW4gUm9lc2UsIGVzZCBnbWJoIGdlcm1hbnksIHN0ZWZhbi5yb2VzZUBlc2QtZWxlY3Ryb25pY3MuY29tCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9wcGM0eHguaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0KLS8qCi0gKiBpbmNsdWRlIGNvbW1vbiBmbGFzaCBjb2RlIChmb3IgZXNkIGJvYXJkcykKLSAqLwotI2luY2x1ZGUgIi4uL2NvbW1vbi9mbGFzaC5jIgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbnMKLSAqLwotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplICh2dV9sb25nICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pOwotc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqaW5mbyk7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLXVuc2lnbmVkIGxvbmcgZmxhc2hfaW5pdCAodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHNpemVfYjA7Ci0JaW50IGk7Ci0KLQkvKiBJbml0OiBubyBGTEFTSGVzIGtub3duICovCi0JZm9yIChpPTA7IGk8Q09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1M7ICsraSkgewotCQlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKLQl9Ci0KLQkvKiBTdGF0aWMgRkxBU0ggQmFuayBjb25maWd1cmF0aW9uIGhlcmUgLSBGSVhNRSBYWFggKi8KLQotCXNpemVfYjAgPSBmbGFzaF9nZXRfc2l6ZSgodnVfbG9uZyAqKUZMQVNIX0JBU0UwX1BSRUxJTSwgJmZsYXNoX2luZm9bMF0pOwotCi0JaWYgKGZsYXNoX2luZm9bMF0uZmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCQlwcmludGYgKCIjIyBVbmtub3duIEZMQVNIIG9uIEJhbmsgMCAtIFNpemUgPSAweCUwOGx4ID0gJWxkIE1CXG4iLAotCQkJc2l6ZV9iMCwgc2l6ZV9iMDw8MjApOwotCX0KLQotCS8qIFNldHVwIG9mZnNldHMgKi8KLQlmbGFzaF9nZXRfb2Zmc2V0cyAoLXNpemVfYjAsICZmbGFzaF9pbmZvWzBdKTsKLQotCS8qIE1vbml0b3IgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCi0JKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotCQkJICAgIC1tb25pdG9yX2ZsYXNoX2xlbiwKLQkJCSAgICAweGZmZmZmZmZmLAotCQkJICAgICZmbGFzaF9pbmZvWzBdKTsKLQotCWZsYXNoX2luZm9bMF0uc2l6ZSA9IHNpemVfYjA7Ci0KLQlyZXR1cm4gKHNpemVfYjApOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2Rhc2Ffc2ltL2ZwZ2FkYXRhLmMgYi9ib2FyZC9lc2QvZGFzYV9zaW0vZnBnYWRhdGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU0ZWYxYy4uMDAwMDAwMAotLS0gYS9ib2FyZC9lc2QvZGFzYV9zaW0vZnBnYWRhdGEuYworKysgL2Rldi9udWxsCkBAIC0xLDM5MDMgKzAsMCBAQAotMHgwMCwgMHgwOSwgMHgwZiwgMHhmMCwgMHgwZiwgMHhmMCwgMHgwZiwgMHhmMCwKLTB4MGYsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjEsIDB4MDAsIDB4MGQsCi0weDYxLCAweDYzLCAweDZkLCAweDMwLCAweDMwLCAweDMwLCAweDM1LCAweDY0LAotMHgyZSwgMHg2ZSwgMHg2MywgMHg2NCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwYiwKLTB4NzMsIDB4MzMsIDB4MzAsIDB4NzgsIDB4NmMsIDB4NzQsIDB4NzEsIDB4MzEsCi0weDM0LCAweDM0LCAweDAwLCAweDYzLCAweDAwLCAweDBiLCAweDMyLCAweDMwLAotMHgzMCwgMHgzMCwgMHgyZiwgMHgzMCwgMHgzNywgMHgyZiwgMHgzMSwgMHgzMCwKLTB4MDAsIDB4NjQsIDB4MDAsIDB4MDksIDB4MzEsIDB4MzksIDB4M2EsIDB4MzIsCi0weDM3LCAweDNhLCAweDMzLCAweDM4LCAweDAwLCAweDY1LCAweDAwLCAweDAwLAotMHg3OSwgMHhhYSwgMHhmZiwgMHgyMCwgMHgzYywgMHhkNCwgMHg5ZiwgMHg1YiwKLTB4ZmYsIDB4N2UsIDB4ZGUsIDB4ZWUsIDB4YmQsIDB4YWEsIDB4ZmUsIDB4YmYsCi0weDllLCAweGZmLCAweGZiLCAweGZlLCAweDVmLCAweGJmLCAweGVkLCAweGFiLAotMHhkYiwgMHhiZSwgMHhlNSwgMHhmYiwgMHhmZSwgMHhmYiwgMHg5ZiwgMHhlYiwKLTB4ZmEsIDB4ZmUsIDB4NWYsIDB4YjYsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmUsCi0weGFmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZlLCAweGVmLCAweGJmLAotMHhlZiwgMHhmZiwgMHhiYSwgMHhmZiwgMHhiYiwgMHhmZSwgMHhmYiwgMHhiZSwKLTB4ZmYsIDB4ZWUsIDB4ZWIsIDB4ZmYsIDB4ZWYsIDB4YmIsIDB4ZWYsIDB4ZmYsCi0weGJlLCAweGZmLCAweGJmLCAweGZmLCAweGZiLCAweGZlLCAweGZmLCAweGJiLAotMHhmZiwgMHhlMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZCwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmMsIDB4ZmYsIDB4YmYsIDB4ZmYsCi0weGZiLCAweGZkLCAweGZmLCAweGRmLCAweGY3LCAweGZmLCAweGZmLCAweGJmLAotMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmNywgMHhmZCwKLTB4ZmYsIDB4ZmYsIDB4ZmUsIDB4M2YsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmIsCi0weGZlLCAweGZmLCAweGJmLCAweGVmLCAweGUzLCAweGY2LCAweGZmLCAweGJmLAotMHhlZiwgMHhmYiwgMHhmZSwgMHhmZiwgMHhlZiwgMHhkYiwgMHhmZSwgMHhmZiwKLTB4YmYsIDB4ZWYsIDB4ZTMsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmIsCi0weGZlLCAweGZlLCAweDNmLCAweGZmLCAweGY3LCAweGZmLCAweGVmLCAweGJiLAotMHhlNywgMHhmOSwgMHhiZSwgMHg3ZiwgMHhiZiwgMHhlYywgMHhmOCwgMHhmZSwKLTB4ZmYsIDB4YmIsIDB4ZWYsIDB4ZmIsIDB4YmUsIDB4N2IsIDB4ZTMsIDB4ZmIsCi0weGJlLCAweGZmLCAweGJmLCAweGVjLCAweGZiLCAweGZlLCAweGZmLCAweGJiLAotMHhlZSwgMHhmYiwgMHhmZSwgMHhjZiwgMHhiZiwgMHhmNiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4MTcsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLAotMHg5MywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGVmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZjMsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZGYsCi0weGY3LCAweGY1LCAweGZkLCAweGZmLCAweGRmLCAweGY3LCAweGZmLCAweGZkLAotMHhmZiwgMHhkZiwgMHhmNSwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhkZiwgMHhmZCwKLTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZDcsIDB4ZjcsIDB4ZmQsIDB4N2YsIDB4ZGYsCi0weGQ3LCAweGY3LCAweGZmLCAweDZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGJmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLAotMHhmZiwgMHhmZSwgMHhkZiwgMHhmZiwgMHhjZCwgMHg3ZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4NGYsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZkLCAweGZmLAotMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmUsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4M2YsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZmLCAweGZlLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmYywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmIsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDU3LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGRmLCAweGZmLCAweGZlLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZWMsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZjcsIDB4ZmQsIDB4ZmYsCi0weDNmLCAweGRmLCAweGY3LCAweGZkLCAweDdmLCAweDdmLCAweGNmLCAweGYzLAotMHhmYywgMHhmZiwgMHhkZiwgMHg3MywgMHhkZCwgMHhmZiwgMHg3ZiwgMHhkZiwKLTB4ZjcsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4Y2YsIDB4ZjcsIDB4ZmQsIDB4ZmYsCi0weDdmLCAweGZjLCAweDlmLCAweGZmLCAweGVmLCAweGJiLCAweGZlLCAweGJmLAotMHhkZiwgMHhlZiwgMHhiYiwgMHhmZSwgMHhmYiwgMHhiZiwgMHhlZiwgMHhmYSwKLTB4ZWUsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsCi0weGZhLCAweGVlLCAweGZmLCAweGJlLCAweGVmLCAweGJiLCAweGZlLCAweGZmLAotMHhiZiwgMHhlZiwgMHhmNywgMHhlYiwgMHhmZiwgMHhlNywgMHhmOSwgMHhmZSwKLTB4N2EsIDB4OWQsIDB4ZTcsIDB4ZjksIDB4N2MsIDB4N2UsIDB4OWUsIDB4ZTcsCi0weDU5LCAweGY2LCAweDdlLCAweDlmLCAweGU5LCAweDIyLCAweDdmLCAweDliLAotMHhlNiwgMHhiOSwgMHhmZSwgMHg0ZiwgMHg5ZiwgMHhlNiwgMHhmOSwgMHhmZSwKLTB4N2IsIDB4OWQsIDB4ZTYsIDB4ZmUsIDB4ZmUsIDB4N2UsIDB4ZmYsIDB4YmYsCi0weGVmLCAweGZiLCAweGVlLCAweGZmLCAweGJmLCAweGU3LCAweGY5LCAweGZlLAotMHhmZiwgMHg5ZiwgMHhlZiwgMHhmYiwgMHhmZSwgMHhmZCwgMHhkZiwgMHhmYiwKLTB4ZWUsIDB4ZmIsIDB4YmYsIDB4ZWYsIDB4ZmIsIDB4ZWUsIDB4ZjcsIDB4YmYsCi0weGVmLCAweGY3LCAweGZlLCAweGZmLCAweDdmLCAweDVmLCAweDBmLCAweDlmLAotMHg5YiwgMHhlNywgMHhmOSwgMHhmZSwgMHg3ZiwgMHg5ZiwgMHhlNywgMHhmOSwKLTB4ZmUsIDB4N2YsIDB4OWYsIDB4NjYsIDB4ZjksIDB4ZmUsIDB4N2YsIDB4ZTcsCi0weGY5LCAweGVlLCAweDc3LCAweDlmLCAweGU3LCAweGY5LCAweGRlLCAweDdkLAotMHg5ZCwgMHhlNywgMHhmOSwgMHhlZSwgMHg3ZiwgMHg5ZiwgMHhlZCwgMHhjOSwKLTB4ZmYsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZmQsIDB4ZmQsIDB4ZmYsCi0weDdmLCAweGRmLCAweGY3LCAweGZkLCAweGZmLCAweDdmLCAweGRmLCAweGZkLAotMHhmZiwgMHhkZiwgMHhkZiwgMHhmNywgMHhmZCwgMHhmZiwgMHg3ZiwgMHhkZiwKLTB4ZjcsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsCi0weGZjLCAweGI3LCAweGZlLCAweGZmLCAweGJmLCAweGVmLCAweGZhLCAweGZlLAotMHhmZiwgMHhiZiwgMHhlZiwgMHhmYiwgMHhmYywgMHhmZCwgMHhiZCwgMHg2ZiwKLTB4YmEsIDB4ZWUsIDB4YjUsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4YmYsCi0weGVmLCAweGZiLCAweGZhLCAweGZmLCAweGJmLCAweGVmLCAweGZiLCAweGZlLAotMHhmZiwgMHhmZiwgMHg2NSwgMHhhZiwgMHhkYiwgMHhkNiwgMHhmZCwgMHhiZiwKLTB4N2YsIDB4ZGIsIDB4ZjYsIDB4ZmQsIDB4YmYsIDB4NmYsIDB4ZmIsIDB4ZjYsCi0weGY5LCAweGFlLCAweGY3LCAweGQ0LCAweDc5LCAweGJmLCAweDZmLCAweGRiLAotMHhiNiwgMHg3ZCwgMHhiZiwgMHg2ZiwgMHhkYiwgMHhmNiwgMHhmZCwgMHhiZCwKLTB4NmYsIDB4ZGIsIDB4ZjcsIDB4ZTgsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLAotMHhlNywgMHhmYiwgMHhmNywgMHg3YywgMHhmZCwgMHhmZiwgMHhmNywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGJmLCAweGZmLCAweGZmLCAweDlkLCAweDllLCAweGZmLCAweGZmLAotMHhmZiwgMHhiZiwgMHg3ZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHg5ZiwKLTB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4YmIsIDB4ZmYsIDB4ZmQsCi0weGZmLCAweGZmLCAweGZiLCAweGZmLCAweDdmLCAweGRiLCAweGU3LCAweGZmLAotMHhiZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZSwgMHhlMywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmIsIDB4ZWYsIDB4ZmYsIDB4ZjcsIDB4ZmQsCi0weGZmLCAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGNmLCAweDc3LAotMHhkZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhkNywgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZGYsIDB4ZjcsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmQsCi0weDdiLCAweGZmLCAweGZmLCAweGZjLCAweGZmLCAweGZiLCAweGZmLCAweGZmLAotMHhmZiwgMHhlZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhiZiwgMHhmNywgMHhmZiwKLTB4NGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZlLAotMHhmZSwgMHhhZCwgMHhmZiwgMHhmNywgMHhmZCwgMHhmZiwgMHg3ZiwgMHhkZiwKLTB4ZjcsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZjcsIDB4ZmQsIDB4ZmYsCi0weDc5LCAweGRmLCAweDVkLCAweGZmLCAweDdkLCAweGRmLCAweGY3LCAweGZjLAotMHhmZiwgMHg3ZiwgMHhkZiwgMHhmNywgMHhmZCwgMHhmZiwgMHg3ZiwgMHhkZiwKLTB4ZjcsIDB4ZmYsIDB4ZWQsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4MmYsCi0weGQzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAotMHhmZiwgMHhmZiwgMHhkYiwgMHhmZiwgMHhmYiwgMHhmYiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsCi0weGZmLCAweGZmLCAweGY3LCAweGZkLCAweGJmLCAweGZmLCAweGZmLCAweGZmLAotMHhmNywgMHhmZCwgMHhiZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmYiwKLTB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmIsIDB4ZGIsIDB4ZmIsIDB4YmYsIDB4ZWYsCi0weGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHg5NywgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGVmLCAweGZmLCAweGVmLCAweDdmLCAweGZmLCAweGNmLAotMHhkYiwgMHhmZCwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4ZmYsCi0weGZmLCAweGY3LCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmYiwgMHg3ZCwgMHhmNSwKLTB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZmYsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4N2YsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweGZkLAotMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZGYsIDB4ZmYsIDB4N2UsIDB4ZGYsIDB4N2YsCi0weGZlLCAweGZmLCAweGRmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhlZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4YjMsIDB4ZmYsIDB4ZTMsIDB4ZjksIDB4ZmYsIDB4ZmYsIDB4YWYsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweGZkLCAweGZkLCAweGZhLCAweDdmLAotMHhmZCwgMHhhYiwgMHhmYSwgMHg3ZCwgMHhmZSwgMHg5ZiwgMHg3ZiwgMHhiZiwKLTB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmEsIDB4ZmUsIDB4YmYsIDB4ZmYsCi0weGZkLCAweGZmLCAweGY3LCAweDdmLCAweGZlLCAweGZmLCAweGZmLCAweGZmLAotMHhmNiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwKLTB4ZGYsIDB4ZmYsIDB4ZjYsIDB4ZmUsIDB4ZGQsIDB4ZmYsIDB4ZmYsIDB4ZjcsCi0weGZmLCAweGZmLCAweGZmLCAweDdmLCAweGJmLCAweGZmLCAweGVlLCAweGZiLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHg4ZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4NzcsIDB4ZWYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4M2YsCi0weGZlLCAweGFkLCAweDdmLCAweGZiLCAweGZmLCAweGNmLCAweGY3LCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZCwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwKLTB4N2IsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZDEsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmYiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlZCwgMHhmYiwgMHhmZiwgMHhlZiwKLTB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmIsIDB4ZmYsCi0weGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY5LCAweDNmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhjZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZDcsCi0weDdmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHgzZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4NDYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweGY4LCAweDdlLAotMHhiZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmYiwgMHhmZiwgMHhmZSwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGUyLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZjcsIDB4ZmQsIDB4ZjcsIDB4ZjcsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHg5ZiwgMHhmMywgMHhmYywgMHhmZiwgMHhmZCwKLTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZmQsCi0weGZmLCAweGZmLCAweGJiLCAweGYxLCAweGYzLCAweGJmLCAweGZmLCAweGZmLAotMHhmNywgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZlLCAweDNkLCAweGNkLCAweGZmLCAweDdmLCAweGRmLCAweGZmLCAweGZkLAotMHhmZiwgMHhmZiwgMHhlZiwgMHhlZiwgMHhmZiwgMHhmYSwgMHhmZiwgMHhmNywKLTB4ZmIsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY1LCAweDdmLCAweGVmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHg1ZiwgMHhmZiwgMHhmZiwgMHhmYywKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4N2YsCi0weGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhjMywKLTB4ZmYsIDB4ZmYsIDB4ZmMsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZkLCAweGZmLCAweDNmLCAweGY5LAotMHhmYywgMHhmZiwgMHhmZiwgMHhjYywgMHhmNSwgMHhmZiwgMHhjZiwgMHhlNywKLTB4ZmYsIDB4ZmYsIDB4M2YsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4YmYsIDB4ZmYsCi0weDI5LCAweGFmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgyZiwKLTB4ZmYsIDB4OWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4ZWYsCi0weGZlLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LAotMHhmZiwgMHg1ZiwgMHgzZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjksIDB4YWYsCi0weGZiLCAweGNhLCAweGZmLCAweGZiLCAweDJiLCAweGQyLCAweGJmLCAweGZmLAotMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmUsIDB4ZmYsIDB4ZWYsIDB4YTYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmNSwgMHhmZCwgMHhmZiwgMHg1ZiwgMHhmZiwgMHhlNSwgMHg3ZiwgMHg1ZiwKLTB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGRmLCAweGZmLCAweDc0LCAweGZiLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4NWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGJkLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHg1YiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweDVmLCAweGZmLCAweGZkLCAweGY3LCAweDdmLCAweGRmLCAweGZmLAotMHhmZiwgMHg3ZiwgMHhkZiwgMHhmZiwgMHhkZCwgMHhhZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NzcsIDB4ZmQsIDB4ODksCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhhZiwgMHhmZiwgMHhkMiwgMHhjNywgMHhiZiwgMHhhZiwKLTB4ZmYsIDB4ZmUsIDB4YmYsIDB4YWYsIDB4ZmYsIDB4ZDYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweDdmLCAweGVmLCAweGZmLAotMHhlMCwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjUsIDB4ZmYsIDB4ZmIsIDB4NWYsIDB4ZGYsCi0weGY1LCAweGZmLCAweGZmLCAweGQ3LCAweGY1LCAweGZmLCAweGZmLCAweDdmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgzZiwgMHhmZCwKLTB4ZmYsIDB4ZjIsIDB4NmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY5LCAweGZmLCAweGJmLAotMHg5ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OWYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGVkLCAweGZmLCAweDhmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmOCwgMHgxZiwgMHhmZiwgMHhiZiwKLTB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmIsIDB4ZmUsCi0weGZiLCAweGJmLCAweGVmLCAweGZiLCAweGZlLCAweGZmLCAweGVmLCAweGZiLAotMHg3ZSwgMHhmZiwgMHhiZiwgMHhlZiwgMHhmYiwgMHhmNiwgMHhmZiwgMHhiZiwKLTB4ZWUsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4YjcsIDB4ZmUsIDB4ZTYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdjLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmQsIDB4NTcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4N2YsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweDdmLCAweGZmLCAweGQ3LCAweGU1LAotMHhmZiwgMHhmZiwgMHhmNywgMHhmNSwgMHhmZiwgMHhmYiwgMHhmZiwgMHhkNywKLTB4ZmYsIDB4ZWYsIDB4N2YsIDB4ZmYsIDB4ZDcsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weDVmLCAweGZlLCAweDliLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDlmLAotMHhlNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhhNywgMHhmZiwgMHhmYSwKLTB4N2UsIDB4OWYsIDB4ZmYsIDB4ZGUsIDB4N2UsIDB4OWQsIDB4ZmYsIDB4ZmYsCi0weGZhLCAweDc3LCAweGZmLCAweGI3LCAweGZmLCAweGZhLCAweDdmLCAweGZmLAotMHhmZiwgMHhlOSwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4YjcsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGQ3LCAweGZmLCAweGVmLCAweGRmLCAweGZmLCAweGZmLAotMHhkZiwgMHhmZiwgMHg1ZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHhmYiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmQsIDB4N2YsIDB4ZmUsIDB4OGYsIDB4ZmYsIDB4ZmYsCi0weDlmLCAweGU2LCAweGU5LCAweGJjLCAweDdmLCAweDlmLCAweGU3LCAweGY5LAotMHhmZSwgMHg3ZiwgMHg5ZiwgMHhjMiwgMHhmOSwgMHhmZSwgMHg3YiwgMHhlNywKLTB4ZjksIDB4ZmUsIDB4N2YsIDB4OGIsIDB4ZTcsIDB4ZjgsIDB4ZmUsIDB4N2YsCi0weDlmLCAweGU3LCAweGY5LCAweGZlLCAweDJmLCAweDlmLCAweGUxLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmNywgMHhhZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZDMsIDB4ZmYsIDB4ZmQsIDB4N2EsIDB4ZmYsIDB4ZmIsIDB4ZmYsCi0weDNmLCAweDVmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LAotMHhmZiwgMHhmZCwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwKLTB4M2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZWUsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZhLCAweGZmLCAweGZmLCAweGFmLCAweGZmLCAweGZmLAotMHg3ZiwgMHhlZiwgMHhlYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmIsIDB4ZmYsIDB4ZmYsIDB4YWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGM3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDc3LCAweGRmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhlNCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZSwKLTB4ZmIsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZkLCAweGZmLCAweDlmLCAweGZmLCAweGZkLCAweGZmLAotMHg3ZiwgMHhmZiwgMHhmNywgMHhlZCwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweDJmLCAweGZmLCAweDhiLCAweGZmLCAweGZlLAotMHhiZiwgMHhhZiwgMHhlYiwgMHhmYSwgMHhmZSwgMHhiZiwgMHhhNywgMHhlOSwKLTB4ZmEsIDB4ZmUsIDB4YmYsIDB4YTcsIDB4YzgsIDB4ZmEsIDB4N2YsIDB4YTMsCi0weGU5LCAweGZhLCAweGJlLCAweGJmLCAweGFiLCAweGVhLCAweGZhLCAweGJlLAotMHhhZiwgMHhhZCwgMHhlYiwgMHhmYSwgMHhmZSwgMHhiZiwgMHhkNSwgMHg3YiwKLTB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZjLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZiLAotMHhjZCwgMHhmZiwgMHhmYywgMHhjZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsCi0weDQ3LCAweGZmLCAweGZmLCAweGZiLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHg3NywgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZCwKLTB4ZmYsIDB4ZWYsIDB4YmYsIDB4YmEsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhiNSwgMHhmZiwgMHhkZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YWYsIDB4ZWYsIDB4ZmIsIDB4ZmYsCi0weGY3LCAweGZmLCAweGY2LCAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhlZiwgMHhmYiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OWYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGRmLAotMHhmNywgMHg1ZCwgMHhmZiwgMHg3ZSwgMHg3NiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4OGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZlLCAweDNmLCAweGZmLCAweDE3LCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYSwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NWYsIDB4ZmYsIDB4ZmQsCi0weGZmLCAweDdmLCAweGY3LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhkZCwgMHhmZiwgMHhlYSwgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4ZWYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweGZmLCAweGZkLCAweGQ3LCAweGZkLCAweGZmLCAweGY5LCAweGZiLAotMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhlZiwKLTB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZmUsIDB4MWYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZmLAotMHhiZSwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhiZiwKLTB4N2IsIDB4ZmUsIDB4ZmQsIDB4YWYsIDB4ZWQsIDB4ZjksIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhiYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZWYsIDB4ZmYsCi0weDdmLCAweGU3LCAweGRmLCAweGZmLCAweGJkLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZjcsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmUsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweDdmLCAweGVmLCAweGZmLAotMHhmZiwgMHg3NiwgMHhmZCwgMHhmZiwgMHhjNywgMHgzZiwgMHhmZiwgMHhmZiwKLTB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4YzcsIDB4ZmYsCi0weGZmLCAweGRmLCAweGZlLCAweDRmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwKLTB4ZmUsIDB4N2YsIDB4ZmUsIDB4ZmYsIDB4OWYsIDB4ZmUsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZlLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkNSwgMHhmZiwgMHhkZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmQsCi0weDNmLCAweDRmLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGY3LCAweGY5LAotMHhmNywgMHg3ZiwgMHhkZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZjgsIDB4M2YsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg5ZiwgMHg3ZiwgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4ZmUsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGE3LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGVmLCAweGZmLCAweGZmLCAweDNmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4NmUsIDB4MGYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGMxLCAweGIzLCAweGZmLCAweGZmLCAweDNmLCAweGM3LCAweGYxLAotMHhmYywgMHhmZiwgMHhmZCwgMHgzMSwgMHg1YywgMHhmZiwgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weDdmLCAweGYyLCAweDViLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZSwgMHg3ZiwgMHg5NywgMHgzZiwgMHhmZiwgMHhmNywgMHhmZCwKLTB4ZjMsIDB4N2MsIDB4YWYsIDB4ZmYsIDB4OTcsIDB4ZTcsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHgzYiwgMHhmNSwgMHg5YiwgMHg3ZiwgMHhlZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmUsIDB4ZjcsIDB4ZmYsIDB4MmIsCi0weDRhLCAweGRmLCAweGJmLCAweGVmLCAweDNhLCAweGZlLCAweGVkLCAweDZhLAotMHg2YiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmUsIDB4ZjQsIDB4MmQsIDB4ZmQsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLAotMHhlZCwgMHg3MywgMHg1ZiwgMHhkZiwgMHhmNywgMHhjZiwgMHg1ZiwgMHhkZiwKLTB4ZjcsIDB4ZmQsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweGY3LCAweDIzLCAweGZmLAotMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwKLTB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZjUsIDB4YmQsIDB4N2YsCi0weGZiLCAweGZlLCAweGZiLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHg1ZiwgMHhkOCwKLTB4YmYsIDB4ZjcsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweDc3LCAweGZmLCAweGZmLCAweDdmLCAweGRmLCAweDc3LCAweDlkLAotMHg2ZiwgMHhkZiwgMHg3NywgMHhkZCwgMHhlZiwgMHg3ZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4NmIsCi0weGQ5LCAweDM3LCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmNiwgMHhiOSwgMHhhZiwgMHhmYiwKLTB4YzYsIDB4ZmYsIDB4YWYsIDB4ZWYsIDB4ZmEsIDB4ZGEsIDB4YjUsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhiNSwgMHg3ZSwgMHhmMywgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmMsIDB4NTcsIDB4YTUsCi0weGZkLCAweGZiLCAweDdlLCAweGI1LCAweGZkLCAweGZmLCAweDdmLCAweGQ3LAotMHgxZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZGYsIDB4M2YsIDB4ZTgsIDB4ZmYsIDB4YjcsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4YjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsCi0weGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHg4ZiwgMHhmZiwgMHhmYSwgMHhmZiwgMHhmZiwgMHhmOSwgMHhmZiwKLTB4ZmIsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmYsCi0weGJmLCAweGVmLCAweGZiLCAweGZlLCAweGZkLCAweGJmLCAweDZmLCAweGZlLAotMHhkNSwgMHhiNywgMHhlZiwgMHhiYiwgMHhmNiwgMHhmZiwgMHhiZiwgMHhlZiwKLTB4ZmIsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4YmIsIDB4ZmYsIDB4ZWUsCi0weDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhiZiwgMHg2ZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZjYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmNiwgMHhjZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsCi0weGY3LCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweDdmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4Y2QsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRlLCAweGZmLCAweGU1LCAweGY5LAotMHg3ZiwgMHhkZiwgMHhmNywgMHhmZCwgMHg3YiwgMHhkZiwgMHhkNywgMHhmNSwKLTB4ZWIsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4N2YsIDB4ZmYsCi0weGQ3LCAweGZmLCAweGVmLCAweGY5LCAweDNmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3OSwgMHhmNywgMHg3ZSwKLTB4OWYsIDB4YTcsIDB4NmQsIDB4ZDMsIDB4NzcsIDB4YTcsIDB4ZWQsIDB4ZjIsCi0weDdlLCAweDlmLCAweGI3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGE3LAotMHg3ZiwgMHhmYSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHgzMywgMHhmZCwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NzcsCi0weGZlLCAweGQ3LCAweDc1LCAweGZiLCAweDdmLCAweGRkLCAweGY1LCAweGZmLAotMHg3ZiwgMHhkZiwgMHhkNywgMHg3ZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YzQsIDB4ZmYsCi0weGZmLCAweGY5LCAweGZlLCAweDdmLCAweDlmLCAweGU3LCAweGY5LCAweGZlLAotMHg2ZiwgMHg5ZiwgMHhlMiwgMHhmOCwgMHhiZSwgMHgzZiwgMHg4ZiwgMHhlNiwKLTB4YmUsIDB4M2YsIDB4OWYsIDB4ZTIsIDB4ZjgsIDB4ZmUsIDB4N2YsIDB4OWYsCi0weGU3LCAweGY5LCAweGZlLCAweDdmLCAweDlmLCAweGU3LCAweGY5LCAweGZmLAotMHgxZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmQsIDB4ZmYsIDB4OWYsIDB4ZTcsIDB4ZmYsIDB4ZmMsIDB4N2YsCi0weDFmLCAweGZiLCAweGZjLCAweGZmLCAweDNmLCAweGZmLCAweGYzLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhkNywgMHhmZSwgMHhmZCwgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4ZTMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotMHhmZiwgMHhiZiwgMHhmZiwgMHg3ZSwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmYiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmEsIDB4ZmYsIDB4ZGYsIDB4YWYsCi0weGZmLCAweGZmLCAweGZkLCAweDNmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmMsIDB4ZmYsCi0weGZmLCAweGNmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHg0ZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4N2YsIDB4ZGYsCi0weGY3LCAweGZmLCAweGZiLCAweDdlLCAweGRmLCAweGZkLCAweGZiLCAweDdmLAotMHhkZiwgMHhmZiwgMHhlZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTUsIDB4ZGYsIDB4ZjQsCi0weGZmLCAweGRmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGVmLAotMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4MmIsIDB4YzksIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZhLCAweDNmLAotMHhmZSwgMHhlYiwgMHhmYSwgMHhmZSwgMHhhZiwgMHhhZiwgMHhlYiwgMHhmYSwKLTB4ZmUsIDB4YWYsIDB4MjUsIDB4ZTgsIDB4ZmEsIDB4M2UsIDB4YWYsIDB4MmIsCi0weGZhLCAweGY2LCAweGFmLCAweGFiLCAweGViLCAweGZhLCAweGZlLCAweGFmLAotMHhhZiwgMHhlYSwgMHhmYSwgMHhmZSwgMHhiZiwgMHhhZiwgMHhlYiwgMHhmZCwKLTB4ODcsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZkLCAweDNmLCAweGZmLCAweGYzLCAweGZkLCAweGRmLCAweGI3LAotMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHg4NywgMHhmZiwgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGY4LCAweDRmLCAweDdmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLAotMHhmZiwgMHhmNywgMHhmZiwgMHg2ZiwgMHhkZiwgMHhiZSwgMHhmZiwgMHhiYiwKLTB4NTYsIDB4ZGYsIDB4YjcsIDB4ZTksIDB4ZmYsIDB4ZjMsIDB4ZjcsIDB4MzcsCi0weGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZCwgMHhmYSwgMHg1ZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NzYsIDB4ZmIsIDB4ZWMsIDB4NmYsCi0weGZmLCAweDdmLCAweGZmLCAweGY1LCAweDdmLCAweGVlLCAweGRmLCAweGY3LAotMHhmYiwgMHhiZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZjEsIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweGRmLCAweGZmLCAweGVkLCAweGZmLAotMHhlZiwgMHhkZSwgMHhmNywgMHhmZSwgMHhmZiwgMHhlYSwgMHg3ZiwgMHhkZSwKLTB4OGYsIDB4YWIsIDB4ZmYsIDB4M2YsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4YmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZjLCAweDdmLCAweGY3LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4OWYsIDB4YmYsIDB4YmYsIDB4ZGYsIDB4ZmQsIDB4ZGIsCi0weGZmLCAweGE3LCAweGZhLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZSwgMHg0NywKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGVmLCAweGVmLCAweGZmLCAweGZlLCAweGZiLCAweGZjLCAweGFmLCAweGJiLAotMHg4YiwgMHhkZSwgMHgxZiwgMHhiYiwgMHhlZSwgMHhmZCwgMHg3ZiwgMHhmZiwKLTB4YWYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGU1LCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweDJmLCAweGZmLCAweGZlLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmNiwgMHhmYywgMHhiYiwgMHhlZiwKLTB4Y2YsIDB4ZjcsIDB4YmYsIDB4ZmYsIDB4Y2IsIDB4ZjIsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGNmLCAweGZmLCAweGZkLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotMHg3ZiwgMHhmOCwgMHhiZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmYiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmQsIDB4N2YsIDB4N2YsIDB4ZDYsIDB4ZjUsIDB4ZWMsCi0weGZlLCAweDVlLCAweGNjLCAweDc1LCAweDdkLCAweGRiLCAweGRmLCAweGJmLAotMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlZiwgMHg3ZiwgMHhmZiwKLTB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZTcsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZGMsCi0weGZmLCAweGZmLCAweGZmLCAweGYxLCAweGZlLCAweGZmLCAweGY3LCAweGFmLAotMHhmNywgMHhjYSwgMHhmZSwgMHg3ZiwgMHhkYiwgMHhmOSwgMHhmZiwgMHhiZiwKLTB4ZGYsIDB4ZjEsIDB4ZmQsIDB4N2YsIDB4ZmQsIDB4Y2YsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweDdmLCAweGZmLCAweGU0LCAweGVmLCAweGZmLCAweGZmLAotMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmMywgMHhmZSwKLTB4ZmQsIDB4ZmUsIDB4ZmYsIDB4ZGYsIDB4ZWYsIDB4NTksIDB4N2YsIDB4M2IsCi0weGY3LCAweGUzLCAweGVmLCAweGJmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZCwgMHg5ZiwgMHg3ZiwKLTB4ZmYsIDB4ZmYsIDB4ZjksIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGViLCAweGZmLCAweGNmLCAweGIzLCAweGVkLCAweGViLCAweDdmLCAweGZmLAotMHhiZiwgMHhmYiwgMHhmZiwgMHhlZiwgMHhkNywgMHhmZiwgMHhmZiwgMHhmZCwKLTB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YjksCi0weGY1LCAweGZmLCAweGZmLCAweGZlLCAweGFmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmOSwgMHhlMywgMHhmOCwgMHhmZSwgMHgzZSwgMHg4ZiwKLTB4ZGEsIDB4ZGEsIDB4OTYsIDB4YWQsIDB4ZWIsIDB4ZmUsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZmLCAweGZmLAotMHhlYSwgMHg3ZCwgMHhmZiwgMHhlZiwgMHhmZiwgMHhkZiwgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGRiLCAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZmLCAweGJmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4NDEsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4M2YsCi0weGZmLCAweGZmLCAweGZjLCAweGZiLCAweGZmLCAweGNmLCAweGZmLCAweDNmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmOSwgMHhmZiwKLTB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjEsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGY5LCAweGYzLCAweGZmLCAweDFkLCAweGFmLCAweGZmLCAweGZmLCAweGRmLAotMHhlZiwgMHhmZiwgMHhmMywgMHhmYywgMHhjZiwgMHg3ZiwgMHhmZCwgMHhmZiwKLTB4ZTcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4ZmYsCi0weDNmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweGZmLAotMHgzYiwgMHhmZiwgMHhhZiwgMHhmZiwgMHg1ZiwgMHgzNSwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZWYsIDB4ZmIsCi0weGY1LCAweDc5LCAweGRmLCAweDM3LCAweGNkLCAweGZmLCAweGRmLCAweDU3LAotMHhkNSwgMHhmZiwgMHg3ZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmIsIDB4ZDIsIDB4ZmYsIDB4ZWYsIDB4ZWYsIDB4ODYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGY3LCAweGZkLAotMHhmMywgMHg3ZSwgMHhmZiwgMHg5ZiwgMHhlNywgMHhmOSwgMHhmZSwgMHhmZiwKLTB4ZTcsIDB4ZjksIDB4ZmUsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZkLCAweGZmLCAweDVmLCAweGZmLCAweGZmLCAweDYwLAotMHgzZiwgMHhiNywgMHhmZiwgMHhmZiwgMHhhZiwgMHhmZiwgMHhmZSwgMHhmZiwKLTB4YmYsIDB4YmYsIDB4ZmIsIDB4YTcsIDB4ZWQsIDB4ZjUsIDB4N2YsIDB4NWYsCi0weGVmLCAweGY3LCAweGZkLCAweDVmLCAweDQ3LCAweGZlLCAweGZmLCAweGZmLAotMHhlYiwgMHhmZiwgMHhmZSwgMHhiZiwgMHhlZiwgMHg1ZiwgMHhmZiwgMHhmZiwKLTB4ZmQsIDB4NWIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjUsIDB4N2YsIDB4ZmYsCi0weDc3LCAweGRkLCAweGE3LCAweDdkLCAweGRhLCAweGZmLCAweGJlLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhiYiwgMHhlZSwgMHhmZiwgMHhkZCwKLTB4ZmYsIDB4ZmQsIDB4NWYsIDB4ZmYsIDB4ZDUsIDB4ZjcsIDB4NmIsIDB4ZGYsCi0weGZmLCAweGZkLCAweDhiLCAweDdmLCAweGZmLCAweGZmLCAweGZlLCAweGJmLAotMHhmZiwgMHhmYiwgMHhmZSwgMHhkZSwgMHhmZiwgMHhhZiwgMHg3NywgMHhlZCwKLTB4ZmYsIDB4N2QsIDB4ZGMsIDB4N2QsIDB4ZmYsIDB4N2UsIDB4ZGYsIDB4YjcsCi0weGZiLCAweGZmLCAweGZmLCAweGFmLCAweGZmLCAweGZhLCAweGZmLCAweGJmLAotMHhhZiwgMHhmZiwgMHg3ZiwgMHhlYywgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZDcsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZjcsIDB4YzcsCi0weGZmLCAweGZmLCAweGZmLCAweDFmLCAweGViLCAweGZjLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmNSwgMHhmZiwgMHhmZiwgMHg1ZiwKLTB4ZGYsIDB4ZjUsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ODcsIDB4ZmIsIDB4N2YsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweGU3LAotMHhmYiwgMHg2ZiwgMHhmYiwgMHhiZSwgMHhlNywgMHhiZiwgMHhmYiwgMHhiNiwKLTB4ZWYsIDB4YmIsIDB4ZWUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGQxLCAweGZmLAotMHg5ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYiwgMHhmZiwKLTB4ZmUsIDB4ZmYsIDB4ZmYsIDB4NmYsIDB4ZmEsIDB4ZjYsIDB4ZmQsIDB4ZmYsCi0weGZiLCAweGZlLCAweGJmLCAweDhmLCAweDYzLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmOSwKLTB4MWYsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4YjMsCi0weGVmLCAweGZiLCAweGI2LCAweGZkLCAweGJjLCAweDZmLCAweDFiLCAweGI2LAotMHhmZCwgMHhlZSwgMHhkYiwgMHhlNiwgMHhmZCwgMHhiZiwgMHhlZiwgMHhmYiwKLTB4ZmUsIDB4ZGYsIDB4YmYsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4YmYsCi0weGZlLCAweGE3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHg3ZiwgMHhlZiwgMHhmYiwKLTB4ZjcsIDB4ZmYsIDB4N2YsIDB4ZjMsIDB4ZmMsIDB4ZmQsIDB4YmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHg3OCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZjcsCi0weGJkLCAweGVmLCAweGZiLCAweGZmLCAweGJiLCAweGVlLCAweGZiLCAweGJlLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4MWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweGZmLCAweGZmLCAweDVmLCAweGQ3LCAweGY1LCAweGVmLCAweDdmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmYiwgMHhmZiwgMHhiZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweDhiLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHg5ZiwgMHhmZiwgMHhlOSwgMHhmMiwgMHg3ZSwgMHg5ZiwKLTB4YTcsIDB4ZmUsIDB4OWYsIDB4YmYsIDB4ZWIsIDB4ZmEsIDB4ZmYsIDB4YmYsCi0weGVmLCAweGZiLCAweDdlLCAweGI2LCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmOSwgMHg3ZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4N2YsIDB4ZmIsIDB4ZmYsIDB4NWYsCi0weGZmLCAweGZkLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZCwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhkZSwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmUsCi0weDY3LCAweGZmLCAweGZmLCAweDlmLCAweGU2LCAweGYxLCAweGZlLCAweDdmLAotMHg4YiwgMHhlNywgMHhmOSwgMHhiZSwgMHg3ZiwgMHg5ZiwgMHhlNywgMHhmOSwKLTB4ZmUsIDB4N2YsIDB4ZTcsIDB4ZjksIDB4ZmUsIDB4N2YsIDB4OWIsIDB4ZTcsCi0weGY5LCAweGZlLCAweDdmLCAweDlmLCAweGM3LCAweGY5LCAweGZlLCAweDdmLAotMHg5ZiwgMHhlOSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZSwgMHhiZiwKLTB4ZjUsIDB4ZmYsIDB4YmYsIDB4NGYsIDB4ZjEsIDB4ZmUsIDB4ZmYsIDB4ZmYsCi0weGU3LCAweGY5LCAweGZmLCAweDlmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLAotMHgzZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYSwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsCi0weGZmLCAweGZlLCAweGJmLCAweGY3LCAweGU5LCAweGZiLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZTcsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweDU3LCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4YmYsCi0weGZmLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhjNCwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZjcsCi0weGZkLCAweGZmLCAweGRmLCAweGY3LCAweGZkLCAweGZmLCAweDdmLCAweGY3LAotMHhmZCwgMHhmZiwgMHg3ZiwgMHhkZiwgMHg5ZiwgMHhmNywgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGMsIDB4Y2YsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmNywgMHhmNSwgMHhlZiwgMHg3YiwgMHhkZiwgMHhmMiwgMHhmYywgMHhiZiwKLTB4Y2IsIDB4ZjIsIDB4ZmQsIDB4MmYsIDB4N2YsIDB4ZjIsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmYiwgMHhmZiwgMHhmZSwgMHhiZiwgMHhhZiwgMHhlYiwgMHhmYSwgMHhmZSwKLTB4YmYsIDB4YWYsIDB4ZWEsIDB4ZGEsIDB4YmMsIDB4OTcsIDB4YWIsIDB4NmEsCi0weGRhLCAweGI1LCAweGFiLCAweDY5LCAweGRhLCAweDc2LCAweGFmLCAweDJmLAotMHhlYSwgMHhmYSwgMHhmZSwgMHhiNywgMHhhZiwgMHhlYiwgMHhmYSwgMHhmZSwKLTB4YWYsIDB4ZjUsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4Y2YsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGNmLCAweGVlLCAweGZlLCAweGZhLCAweDNmLCAweGJkLAotMHhmZCwgMHg3ZiwgMHhmZiwgMHhmZCwgMHhmMywgMHg3ZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGY2LCAweDA3LCAweGZmLCAweGZmLCAweGViLCAweGY3LAotMHhmNywgMHhmZiwgMHhmZiwgMHhhYiwgMHhmZiwgMHhmYywgMHhjYiwgMHhlNiwKLTB4YmQsIDB4ZjcsIDB4ZWYsIDB4ZmIsIDB4N2YsIDB4YjUsIDB4ZTUsIDB4ZmQsCi0weGZkLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4OSwgMHg3ZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZjcsIDB4YmYsIDB4Y2YsIDB4ZmYsIDB4ZGYsIDB4ZjcsIDB4YmYsCi0weGU3LCAweGViLCAweGY2LCAweGZiLCAweGZmLCAweGI3LCAweGVmLCAweGRmLAotMHhmZiwgMHg3ZSwgMHg3YiwgMHhmZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4MWYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweGRmLAotMHhmZSwgMHhmNiwgMHhiZiwgMHhhZiwgMHg0OSwgMHhiYSwgMHg3YiwgMHhhNywKLTB4ODksIDB4ZGEsIDB4ZmQsIDB4YjcsIDB4ZjcsIDB4ZGYsIDB4ZmYsIDB4ZmYsCi0weGZiLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGU3LAotMHhmZiwgMHg3ZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmYiwKLTB4ZmYsIDB4ZmYsIDB4N2IsIDB4ZDcsIDB4ZDUsIDB4ZmQsIDB4N2EsIDB4NWIsCi0weDk1LCAweGVkLCAweDVkLCAweDVmLCAweGVmLCAweGZmLCAweGZmLCAweGZkLAotMHhmZiwgMHg3ZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwKLTB4ZWMsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmUsCi0weGZmLCAweGZjLCAweGZlLCAweGYzLCAweGZjLCAweGRmLCAweDNiLCAweGNlLAotMHhmMywgMHhmYiwgMHgzZiwgMHhjZSwgMHhmMywgMHhmZiwgMHhlZiwgMHhmYiwKLTB4ZmQsIDB4ZmQsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGZmLCAweGZkLCAweDVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhjZiwgMHg1YiwgMHhmZSwgMHhlZiwgMHhmZCwgMHg3ZiwgMHg1ZiwgMHhkMywKLTB4ZjYsIDB4ZmQsIDB4YjcsIDB4NWIsIDB4ZDYsIDB4ZmQsIDB4YmYsIDB4ZmYsCi0weGZiLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhlMiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4Y2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGRmLCAweGQ2LCAweGVkLCAweGVmLCAweDQ2LCAweGQ3LCAweGI3LCAweGJmLAotMHhmZSwgMHhmZiwgMHhkZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4N2UsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweGZmLCAweGZmLCAweGRlLCAweGZmLCAweGJmLCAweGZjLCAweGZmLAotMHhmOSwgMHg3ZSwgMHg3ZiwgMHhiZiwgMHhlZSwgMHhkZCwgMHgzZCwgMHhjNywKLTB4ZjMsIDB4ZmIsIDB4ZjYsIDB4MWYsIDB4M2YsIDB4Y2YsIDB4ZGIsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGFlLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZCwgMHhkNywKLTB4ZjksIDB4ZjUsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4YmIsCi0weGZkLCAweGZlLCAweGRmLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkNSwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWIsCi0weGJmLCAweGVjLCAweGZmLCAweDdmLCAweGNiLCAweGYyLCAweGZjLCAweGJmLAotMHgzZSwgMHhmMywgMHhmZSwgMHhiZSwgMHhhNSwgMHhlNywgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZiLCAweDFmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGY3LAotMHhmZCwgMHhmZiwgMHhmZiwgMHhkZSwgMHhmNiwgMHhiZiwgMHhhZCwgMHhlYiwKLTB4NmEsIDB4ZmYsIDB4MmQsIDB4NmIsIDB4N2EsIDB4ZmYsIDB4YjcsIDB4ZmYsCi0weGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZSwgMHg3NywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4YWYsIDB4N2YsIDB4ZGUsIDB4YmYsIDB4ZmQsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LAotMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWUsIDB4M2YsIDB4ZmYsIDB4MWYsIDB4ZDcsCi0weGZmLCAweGZmLCAweGZmLCAweDNlLCAweGRmLCAweGY3LCAweGZmLCAweDdmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4N2YsIDB4M2YsIDB4Y2YsIDB4ZmYsIDB4M2MsIDB4N2YsIDB4M2YsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYxLCAweDVhLCAweGZmLCAweGY3LAotMHhmZiwgMHhmZiwgMHhmYywgMHhlZiwgMHhlZiwgMHhkZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4M2YsCi0weGZmLCAweGY5LCAweGZmLCAweGNiLCAweGZmLCAweGU3LCAweGZmLCAweGY3LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNSwgMHhlMywgMHhkZiwKLTB4ZmYsIDB4ZmYsIDB4ZjIsIDB4YmYsIDB4ZWYsIDB4ZmYsIDB4ZmIsIDB4ZmYsCi0weGYxLCAweGQ2LCAweDc1LCAweGZkLCAweDY3LCAweDVmLCAweGQ2LCAweDdkLAotMHg2NywgMHg1ZCwgMHg1NywgMHhmZSwgMHhmZSwgMHhlNiwgMHhiZiwgMHhmYiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZjYsCi0weDZmLCAweGZmLCAweGZmLCAweGZmLCAweGQ3LCAweGY3LCAweGZmLCAweGZmLAotMHg3ZiwgMHhmZiwgMHgzZiwgMHg3ZiwgMHhkMywgMHhmNCwgMHhmYiwgMHgzZiwKLTB4N2YsIDB4ZmYsIDB4ZmIsIDB4YmYsIDB4N2YsIDB4ZmYsIDB4N2MsIDB4ZDcsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmNiwgMHhjZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiYiwKLTB4MmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4N2MsIDB4ZGYsIDB4ZmYsCi0weGQ1LCAweGZiLCAweDdlLCAweGI3LCAweGYxLCAweGZmLCAweGZmLCAweGZiLAotMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4Y2QsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsCi0weGRkLCAweGY1LCAweDdkLCAweGRmLCAweGY3LCAweGZmLCAweGVmLCAweGJiLAotMHhmYSwgMHhmYiwgMHhmZiwgMHhlZiwgMHhmZSwgMHhmZCwgMHhiZiwgMHhhZiwKLTB4N2QsIDB4ZGMsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGRlLCAweDFmLCAweGZmLCAweGZkLCAweGZkLAotMHg0YiwgMHhmZSwgMHhmZSwgMHhiNywgMHhiZSwgMHg3ZiwgMHg1NSwgMHhmMSwKLTB4NzYsIDB4ZGQsIDB4ZjcsIDB4ZmQsIDB4ZjEsIDB4ZGUsIDB4MzcsIDB4N2QsCi0weGZmLCAweGZmLCAweGVkLCAweDBiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHgxNywgMHhmZiwgMHhmZiwKLTB4MWYsIDB4Y2QsIDB4N2YsIDB4N2YsIDB4ZDcsIDB4ZjcsIDB4ZWYsIDB4ZmIsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhlOSwgMHg3ZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotMHhmZiwgMHhiYiwgMHhmZSwgMHhmZiwgMHhiYiwgMHhlZSwgMHg3YiwgMHhlZiwKLTB4YmIsIDB4NmUsIDB4ZmIsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdkLAotMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmQsIDB4YWYsIDB4ZWYsCi0weGRmLCAweGZkLCAweGJmLCAweDZiLCAweGQ4LCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZSwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmQsIDB4YzAsIDB4ZmYsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsCi0weGZiLCAweDdlLCAweGZmLCAweGI3LCAweDZmLCAweGRiLCAweGQ2LCAweGYxLAotMHhiYiwgMHhlZiwgMHhkZSwgMHhlZCwgMHhiZSwgMHg2ZiwgMHhmYiwgMHhmZSwKLTB4ZGYsIDB4YmYsIDB4NmYsIDB4ZmIsIDB4ZWUsIDB4ZmYsIDB4YmYsIDB4ZWYsCi0weGZiLCAweGY3LCAweGU1LCAweDZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmNywgMHhmZSwKLTB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZjcsIDB4ZmYsIDB4M2YsIDB4Y2YsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGNmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmNiwgMHhmNywgMHhjZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGVmLCAweDdiLCAweGRlLCAweGVmLCAweGJmLCAweGZiLCAweGJlLCAweGVmLAotMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZTksIDB4N2YsIDB4YmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY1LCAweGZkLCAweDdmLCAweDVmLAotMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmYiwKLTB4ZmYsIDB4ZmYsIDB4YWQsIDB4ZjksIDB4N2YsIDB4NWYsIDB4ZjcsIDB4ZjUsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGU4LCAweDM3LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHg5ZiwgMHhhNywKLTB4ZTksIDB4ZmYsIDB4YWYsIDB4ZWYsIDB4ZmEsIDB4ZmUsIDB4ZmYsIDB4YWYsCi0weGZhLCAweGZlLCAweDlmLCAweGFmLCAweDlkLCAweGE3LCAweGU5LCAweGZiLAotMHg3ZSwgMHg5ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4MjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZDcsCi0weGY1LCAweGU5LCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZiLAotMHhmZCwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmNSwgMHhmZCwKLTB4N2YsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZlLCAweGZmLCAweGZmLCAweGY5LCAweGZlLCAweDdmLCAweDlmLAotMHhlMiwgMHhmOCwgMHhiZSwgMHgyZiwgMHg5ZiwgMHhlNywgMHhmOSwgMHhmZSwKLTB4N2YsIDB4OWYsIDB4ZTcsIDB4ZmUsIDB4N2YsIDB4OWYsIDB4ZTYsIDB4ZjgsCi0weGJlLCAweDJmLCAweDhmLCAweGU3LCAweGY5LCAweGZlLCAweDdmLCAweDlmLAotMHhlNywgMHhmOSwgMHhmZSwgMHg1NywgMHhmZiwgMHhlNywgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4OWYsIDB4ZWYsCi0weGZiLCAweGZlLCAweGZmLCAweDlmLCAweGZiLCAweGZlLCAweGZmLCAweGJmLAotMHhjZiwgMHhmOSwgMHhmZiwgMHhmZiwgMHg3ZiwgMHg1ZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWIsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotMHhmZCwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhkZiwKLTB4ZjcsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZWIsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweDdmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmUsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweDNmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhhZiwKLTB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmQsCi0weGZmLCAweDdmLCAweGY3LCAweGZkLCAweGZmLCAweDdmLCAweGRmLCAweGY3LAotMHhmZiwgMHg3ZiwgMHhkZiwgMHhmNywgMHhlNywgMHhmZCwgMHhmZiwgMHhmZSwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGY5LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHg3YywgMHg4ZiwgMHhmYiwgMHhmYSwgMHhmMiwgMHhmZiwgMHhiZiwgMHgyZiwKLTB4ZmEsIDB4ZmMsIDB4YmYsIDB4ZWYsIDB4Y2EsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLAotMHhlZiwgMHhmMywgMHgyZiwgMHhmZiwgMHhlYiwgMHhmYSwgMHhmZSwgMHg5ZiwKLTB4YTcsIDB4ZWIsIDB4ZmEsIDB4ZGUsIDB4YmYsIDB4YWUsIDB4Y2EsIDB4ZmEsCi0weDZjLCAweDFmLCAweGFmLCAweDM4LCAweGJlLCAweGJiLCAweGEzLCAweGU4LAotMHhmYSwgMHgzZSwgMHg5ZiwgMHhhZiwgMHhlYiwgMHg3YSwgMHhiZSwgMHhiZiwKLTB4YWIsIDB4ZWIsIDB4ZmYsIDB4NTYsIDB4N2YsIDB4ZjMsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweGZiLCAweGZmLCAweGZiLCAweGZmLCAweDNlLCAweDU3LCAweGZiLAotMHhmNSwgMHhkZiwgMHhhZiwgMHg3ZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHhmZiwKLTB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYwLCAweDdmLCAweGZmLCAweGZmLAotMHhmZiwgMHg3ZiwgMHhiZiwgMHhmNywgMHhlZCwgMHhkYSwgMHhmZiwgMHg3ZiwKLTB4ZGIsIDB4ZGYsIDB4ZmYsIDB4MzcsIDB4N2YsIDB4ZWYsIDB4ZmYsIDB4ZmYsCi0weGJkLCAweGZmLCAweGZkLCAweGY3LCAweGY4LCAweGJmLCAweGViLCAweGZmLAotMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhkZCwgMHhmYSwgMHg5ZiwgMHhmZiwKLTB4NWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmEsIDB4ZmYsIDB4MzUsCi0weGJhLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGZiLCAweGJhLCAweDdmLAotMHg2ZSwgMHhlYiwgMHhiZiwgMHhkYiwgMHhmYiwgMHhlZiwgMHhmYiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OGIsCi0weGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZkLCAweGY3LCAweDY5LCAweGZiLAotMHhmZSwgMHg1ZiwgMHhhNywgMHhjYiwgMHhmYSwgMHhmNiwgMHhiNSwgMHhhNywKLTB4ZmEsIDB4ZmUsIDB4YmYsIDB4YWYsIDB4M2QsIDB4ZGYsIDB4YjYsIDB4M2YsCi0weGZlLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhhYywgMHg3ZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4NzksIDB4ZWUsIDB4ZmYsIDB4OTUsIDB4YWQsIDB4N2QsIDB4NWQsIDB4ZDUsCi0weGRkLCAweGY1LCAweGRlLCAweGY2LCAweGZkLCAweGJmLCAweGZmLCAweGZmLAotMHg1ZiwgMHhkZiwgMHhmNywgMHhmZiwgMHhmNywgMHg3ZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmUsIDB4OGYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZWYsCi0weGZmLCAweDhlLCAweGYzLCAweDZjLCAweGZmLCAweGI3LCAweGVlLCAweDdiLAotMHhlZSwgMHhlZSwgMHhiYiwgMHg4YiwgMHhiYiwgMHhmNiwgMHhiZiwgMHhjZSwKLTB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZjcsIDB4ZmUsIDB4ZmYsIDB4N2YsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweDk5LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmNSwgMHhmZCwgMHg3ZiwgMHg0ZiwgMHg5ZSwgMHhmNiwKLTB4ZmQsIDB4ZmYsIDB4NmYsIDB4ZGIsIDB4ZjQsIDB4M2YsIDB4NGYsIDB4YWYsCi0weGZlLCAweGZmLCAweGU3LCAweGVmLCAweDdmLCAweGJmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZSwgMHgzZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZGYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4N2UsCi0weDNmLCAweDk1LCAweDY1LCAweGQ5LCAweDdlLCAweDNlLCAweGZlLCAweDdmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MjUsIDB4ZmYsCi0weGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGNjLCAweGMzLCAweDM4LAotMHhmNywgMHgzOCwgMHg0ZiwgMHg3MywgMHhkYywgMHhmZiwgMHhiZCwgMHg5ZSwKLTB4ZjgsIDB4M2UsIDB4ZmYsIDB4ZmYsIDB4NzMsIDB4ZGYsIDB4ZmYsIDB4M2QsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwKLTB4YjcsIDB4ZWYsIDB4YmIsIDB4NzYsIDB4ZmYsIDB4YmYsIDB4OWYsIDB4ZmQsCi0weGZiLCAweGZmLCAweGVmLCAweGZmLCAweGRmLCAweGZlLCAweGFmLCAweGZmLAotMHhlNiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmMsIDB4ZDUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsCi0weDlmLCAweGE3LCAweGU4LCAweGRlLCAweDc3LCAweDhjLCAweGU1LCAweDlkLAotMHhmYiwgMHg2MywgMHhmNywgMHhmZCwgMHgxYiwgMHhiZSwgMHhkYSwgMHhmZiwKLTB4YmUsIDB4ZWYsIDB4ZmYsIDB4ZjcsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweDIxLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLAotMHhmYiwgMHhlOSwgMHhlYSwgMHhmZSwgMHhiNywgMHhhZiwgMHhlYiwgMHg3MiwKLTB4N2UsIDB4YmYsIDB4YWYsIDB4ZmUsIDB4ZTcsIDB4YmYsIDB4ZmQsIDB4ZmIsCi0weGZmLCAweGRmLCAweGU3LCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhiZiwgMHhmMCwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4YmYsIDB4ZmYsIDB4ZmQsIDB4ZGYsIDB4NzcsIDB4ZGYsIDB4ZjcsIDB4ZmQsCi0weGZmLCAweDdmLCAweGRmLCAweGY3LCAweGZmLCAweDVlLCAweGQ3LCAweGZmLAotMHhmYywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTMsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweDNmLCAweGQ5LCAweGZmLCAweDNmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmMywgMHhmZiwgMHhmYywgMHg3ZiwKLTB4ZmYsIDB4Y2YsIDB4ZmYsIDB4ZmMsIDB4ZmIsIDB4M2YsIDB4Y2YsIDB4ZmYsCi0weDNmLCAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweDMxLCAweGFmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmNiwgMHhiZiwgMHgzZiwgMHhlNywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4YmYsIDB4OWYsCi0weGVmLCAweDdlLCAweGJkLCAweGZmLCAweGZmLCAweGRmLCAweDc3LCAweGNiLAotMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHg1YSwKLTB4M2QsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YzcsIDB4NzksCi0weGRmLCAweGY3LCAweDlkLCAweGYzLCAweDdmLCAweGRlLCAweDc1LCAweGZkLAotMHg3NSwgMHhiYiwgMHgzZiwgMHgxZiwgMHhmMywgMHhmNSwgMHgyZiwgMHhlZiwKLTB4N2UsIDB4ZTYsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsCi0weGVmLCAweGE2LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHgzZiwgMHhlNywgMHhmMywgMHhmZSwgMHg3ZiwgMHgzZiwgMHhjZiwKLTB4ZjMsIDB4ZWYsIDB4ZjcsIDB4Y2QsIDB4ZmYsIDB4N2UsIDB4NzcsIDB4YjUsCi0weGZkLCAweGZmLCAweDdlLCAweDU3LCAweGZmLCAweGZmLCAweGZmLCAweDdmLAotMHhmZiwgMHhmZiwgMHg2YywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmIsIDB4N2UsIDB4ZGYsIDB4ZmYsIDB4ZjUsCi0weGZkLCAweDdiLCAweDVmLCAweDU3LCAweGJmLCAweGZmLCAweGY5LCAweGY3LAotMHg3MSwgMHhmZiwgMHhiZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZWYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4OWIsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGRmLCAweGZiLCAweGZmLCAweGVmLCAweGZiLCAweGZmLAotMHhmZiwgMHhiZiwgMHhlZiwgMHhkYiwgMHhlZSwgMHhkZCwgMHhhNywgMHg2YiwKLTB4MzgsIDB4ZWYsIDB4YmQsIDB4ZjcsIDB4N2QsIDB4ZGYsIDB4ZjcsIDB4ZmYsCi0weGZmLCAweGZkLCAweGRmLCAweGZmLCAweGZkLCAweDg5LCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3NywgMHhmZCwgMHhmYiwgMHg3ZSwKLTB4ZGYsIDB4ZjcsIDB4Y2QsIDB4ZmIsIDB4N2QsIDB4ZGYsIDB4YmEsIDB4ZmUsCi0weGJmLCAweGZmLCAweGZmLCAweGVhLCAweGRlLCAweGZmLCAweGVmLCAweGViLAotMHhkZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhlMiwgMHg3ZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTMsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweGZjLCAweGZmLCAweDhmLCAweGZmLAotMHg3ZSwgMHhkNywgMHhmZiwgMHhlYiwgMHhmZiwgMHg1ZiwgMHhkZiwgMHhmNywKLTB4ZmQsIDB4NzksIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZjcsCi0weGVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVlLAotMHg3YiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhlZiwgMHhmYiwgMHhiZSwgMHhlNywKLTB4YmYsIDB4ZmYsIDB4YWYsIDB4ZmYsIDB4ZGYsIDB4ZjcsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGY5LCAweGZmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZSwgMHhlZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZTcsIDB4ZGYsIDB4ZjYsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZGEsCi0weGY2LCAweGZmLCAweGZmLCAweGZlLCAweGZlLCAweGZmLCAweGZmLCAweGU3LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmIsIDB4MWYsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmIsCi0weGZlLCAweGRkLCAweGJmLCAweGVmLCAweGRiLCAweGVlLCAweGZkLCAweGJkLAotMHg2ZiwgMHgxYiwgMHhiZSwgMHhmZCwgMHhlZiwgMHhmYiwgMHhlNiwgMHg1ZiwKLTB4OWYsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZGYsIDB4YmYsIDB4ZWYsIDB4ZmIsCi0weGZlLCAweGRmLCAweGJmLCAweGZlLCAweDY2LCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZCwKLTB4ZmYsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4M2YsIDB4ZmIsIDB4ZjcsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3MiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsCi0weGZiLCAweGZlLCAweGY3LCAweGJkLCAweGVmLCAweGJiLCAweGRmLCAweGZlLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OTcsCi0weGZmLCAweGZmLCAweGZmLCAweGY1LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZjcsIDB4ZjUsIDB4ZmYsIDB4OWYsIDB4ZWYsIDB4ZDcsIDB4ZmQsIDB4ZWQsCi0weDdmLCAweDVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotMHhjYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHg5ZiwgMHhmZiwgMHg3ZSwKLTB4ZmYsIDB4YWYsIDB4ZWIsIDB4ZmEsIDB4ZmUsIDB4YmYsIDB4YWYsIDB4ZWIsCi0weGZiLCAweGZhLCAweDdlLCAweDlmLCAweGZmLCAweGZmLCAweGZhLCAweDdmLAotMHg5ZiwgMHgyNywgMHhlOSwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmMsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZDcsIDB4ZmYsCi0weGRmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZjLAotMHhmZiwgMHg3ZiwgMHhlZiwgMHhkZSwgMHhiNywgMHhiZiwgMHhmZiwgMHg3YSwKLTB4NWYsIDB4YjcsIDB4ZmYsIDB4ZmQsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweDZmLCAweGZmLCAweGZmLCAweDlmLCAweGUyLAotMHhmOSwgMHhmZSwgMHg3ZiwgMHg5ZiwgMHhlNywgMHhmOSwgMHhmZSwgMHg3ZiwKLTB4OWYsIDB4ZTcsIDB4ZjksIDB4ZmUsIDB4NmYsIDB4ZTcsIDB4ZjksIDB4ZGUsCi0weDZmLCAweDBiLCAweGU2LCAweGU5LCAweGZlLCAweDJmLCAweDlmLCAweGU3LAotMHhmOSwgMHhmZSwgMHg3ZiwgMHg5ZiwgMHhkNSwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjksCi0weGZlLCAweDdmLCAweDlmLCAweGVmLCAweGZiLCAweGZmLCAweDFmLCAweGNmLAotMHhkOSwgMHhmNSwgMHhmYiwgMHhiZiwgMHhkZiwgMHhkMywgMHhmZSwgMHg3ZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4M2YsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHg3ZiwgMHhlZiwKLTB4ZmQsIDB4ZmUsIDB4ZmUsIDB4YmYsIDB4ZjcsIDB4ZmIsIDB4YWEsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDE3LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGVmLCAweGZmLCAweDdmLCAweDdmLCAweGZmLCAweGJmLCAweGZmLCAweDdmLAotMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZWUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsCi0weGRmLCAweGY3LCAweGZkLCAweGZmLCAweDdmLCAweGRmLCAweGY3LCAweGZkLAotMHhmZiwgMHg3ZiwgMHhkZiwgMHhmNywgMHhmOSwgMHhmZiwgMHhmNywgMHhkZiwKLTB4ZTYsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZjLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLAotMHhlZiwgMHhhYiwgMHhlYiwgMHhmYSwgMHhmZSwgMHhiZiwgMHhhZiwgMHhlOSwKLTB4ZmEsIDB4ZmUsIDB4YWYsIDB4ZGIsIDB4ZDcsIDB4ZjUsIDB4ZmYsIDB4MmYsCi0weGZmLCAweGZhLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZjLAotMHg5ZiwgMHhmZiwgMHhmZiwgMHhiYSwgMHhmZiwgMHhmZSwgMHhiZiwgMHhhZiwKLTB4ZTksIDB4ZmEsIDB4N2UsIDB4MGYsIDB4YTMsIDB4ZTgsIDB4ZmEsIDB4ZmUsCi0weGI3LCAweGFiLCAweGViLCAweGZhLCAweGY3LCAweGFmLCAweDYzLCAweGZhLAotMHg3NiwgMHhhZiwgMHhhYiwgMHhlYSwgMHhmYSwgMHhiZSwgMHhiZiwgMHhhYiwKLTB4ZWEsIDB4ZmEsIDB4ZmUsIDB4YmYsIDB4NWYsIDB4N2YsIDB4ZWYsIDB4ZWQsCi0weGZmLCAweGYzLCAweGVmLCAweDdmLCAweGZmLCAweGZiLCAweGZkLCAweGZmLAotMHhkZiwgMHhlZiwgMHhmNSwgMHhmZiwgMHg2ZiwgMHg3ZiwgMHgzZiwgMHhmZiwKLTB4YmEsIDB4ZmYsIDB4MzMsIDB4Y2YsIDB4ZjMsIDB4N2QsIDB4YmYsIDB4ZGMsCi0weGZmLCAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGRlLCAweGE3LCAweGZmLAotMHhmZiwgMHhkZiwgMHhiMiwgMHhmZiwgMHhmYSwgMHhmZiwgMHhmZiwgMHhmNywKLTB4N2QsIDB4ZmYsIDB4N2QsIDB4YmYsIDB4NzcsIDB4ZmYsIDB4ZjcsIDB4N2UsCi0weGRmLCAweGY0LCAweGRmLCAweDVlLCAweGNmLCAweGZmLCAweGZkLCAweGZmLAotMHhmZiwgMHg3ZiwgMHg3ZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHg3ZiwgMHg4NSwKLTB4NWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4YmIsCi0weGZmLCAweGZmLCAweGZlLCAweGVmLCAweGZiLCAweGZlLCAweGZmLCAweGJiLAotMHhmMywgMHhhZiwgMHhmZiwgMHhmYiwgMHg2YiwgMHhmYSwgMHhmZSwgMHg1ZiwKLTB4YjcsIDB4ZWYsIDB4ZGIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweDNmLCAweGZmLCAweGZkLCAweGY3LCAweGY4LCAweGQ3LCAweDc2LAotMHg5ZCwgMHhhNiwgMHg0YiwgMHhkYSwgMHg3NiwgMHg5ZCwgMHhhNywgMHg2OSwKLTB4ZGEsIDB4ZGIsIDB4YmYsIDB4YWQsIDB4ZmEsIDB4ZmUsIDB4YjcsIDB4YTcsCi0weDdkLCAweGZmLCAweDdlLCAweDNmLCAweGZmLCAweDNmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhjNywgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmNSwgMHhkZiwKLTB4ZmYsIDB4YTcsIDB4ZDksIDB4ZmUsIDB4N2UsIDB4OWYsIDB4NjcsIDB4ZDksCi0weGY2LCAweDdmLCAweDlmLCAweGRlLCAweGJmLCAweDdmLCAweGViLCAweDdiLAotMHg3ZSwgMHg1NywgMHhmZCwgMHhmZiwgMHg1ZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZlLCAweGZmLCAweGZlLCAweGVmLCAweGFiLCAweGVmLCAweGZhLCAweGZlLAotMHgzZiwgMHhiZiwgMHhlZiwgMHhmZSwgMHhmYiwgMHhiOSwgMHhlOSwgMHhhOCwKLTB4ZmEsIDB4ZmUsIDB4YmYsIDB4ZWUsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4ZmIsCi0weGVmLCAweGZmLCAweDdmLCAweGZmLCAweGVkLCAweDlmLCAweGVmLCAweGZkLAotMHhmYiwgMHhkZSwgMHg3ZCwgMHgzZiwgMHg2ZiwgMHhkYiwgMHhlNiwgMHhmZCwKLTB4YmYsIDB4N2YsIDB4ZGIsIDB4ZDYsIDB4ZjksIDB4M2QsIDB4NmIsIDB4ZmIsCi0weGZlLCAweGZmLCAweGJiLCAweGVlLCAweGZhLCAweGZlLCAweGJmLCAweGI3LAotMHhmYiwgMHhmNSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiYiwgMHhiZiwKLTB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmIsIDB4ZmQsIDB4ZjksIDB4OWUsIDB4NzcsCi0weDlmLCAweGUzLCAweGY5LCAweGRlLCAweDU3LCAweDlkLCAweGZlLCAweGVmLAotMHhlZiwgMHhmNiwgMHhmZiwgMHg1ZiwgMHhkZiwgMHg5ZiwgMHhmZiwgMHg3ZiwKLTB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjMsCi0weDdmLCAweGZmLCAweGZmLCAweDdjLCAweGNkLCAweGZmLCAweGZkLCAweGY3LAotMHhmOCwgMHhkNywgMHhmMSwgMHg5ZiwgMHhlNywgMHgxZiwgMHhjNywgMHhmZSwKLTB4ZjUsIDB4M2YsIDB4Y2YsIDB4NzEsIDB4ZGMsIDB4MzYsIDB4M2QsIDB4OGYsCi0weGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHg4ZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmYSwgMHhmZiwgMHhmZiwKLTB4YmQsIDB4ZmYsIDB4ZmYsIDB4ZDcsIDB4YmYsIDB4ZmYsIDB4ZmQsIDB4ZmUsCi0weGZiLCAweGZmLCAweGJiLCAweDVlLCAweGZmLCAweGRmLCAweGY3LCAweGZiLAotMHhmZSwgMHhmZiwgMHhmNywgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4YzEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGY3LCAweGZkLCAweDdmLCAweDM2LCAweGRkLCAweGY3LCAweDNjLCAweGNmLAotMHg3YiwgMHhkYSwgMHhmZiwgMHhmYSwgMHg3ZSwgMHg5YywgMHhiMywgMHgzZCwKLTB4YmUsIDB4N2QsIDB4OWYsIDB4ZjcsIDB4ZWQsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweDlmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZSwgMHg3YSwgMHg1ZSwgMHhiZiwgMHgyZiwgMHhlYiwgMHhhYSwgMHhkYywKLTB4YmYsIDB4YWUsIDB4YWIsIDB4ZmYsIDB4ZmYsIDB4YWYsIDB4YWIsIDB4N2EsCi0weGRjLCAweGJmLCAweGFkLCAweGViLCAweDdhLCAweGZlLCAweGI3LCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYSwgMHg2NywgMHhkZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZjcsIDB4ZmQsIDB4ZjcsCi0weDc3LCAweGRmLCAweGY3LCAweGZkLCAweGZmLCAweGZmLCAweGY3LCAweGY5LAotMHhkZiwgMHg3ZiwgMHhkZiwgMHg3NywgMHhmZCwgMHhmZiwgMHg3ZiwgMHhkZiwKLTB4ZWYsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTgsIDB4YmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZlLCAweDdmLCAweGZmLCAweGRmLCAweGZjLAotMHhmZCwgMHhmZiwgMHhkNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZCwgMHg5ZiwKLTB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmQsIDB4ZmYsCi0weDlmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGYxLAotMHhjYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhhYiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4OWYsIDB4ZmYsIDB4ZjksIDB4ZmUsIDB4N2YsIDB4ZmYsIDB4ZmQsCi0weGUzLCAweGZmLCAweGZmLCAweGNmLCAweGYzLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmYSwgMHhmZiwgMHhjZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZjUsIDB4YWIsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4ZDYsCi0weDc1LCAweDlkLCAweDdmLCAweDU5LCAweGQ3LCAweDM1LCAweGZkLCAweGU3LAotMHg3OSwgMHhhZiwgMHg1ZCwgMHhmNSwgMHg3YywgMHhkNywgMHg1NSwgMHhkNSwKLTB4ZmYsIDB4N2QsIDB4NTcsIDB4ZjUsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZlLCAweGYwLCAweDZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHg5ZiwgMHg3ZiwgMHhkMywgMHhmZSwgMHhmYiwgMHgzZiwgMHhlNywgMHhmOSwKLTB4ZmMsIDB4ZmYsIDB4MzUsIDB4ZTcsIDB4ZmUsIDB4N2YsIDB4YmUsIDB4ZTcsCi0weGJiLCAweGZlLCAweGZmLCAweDNmLCAweDZmLCAweGJmLCAweDdmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHg0NywgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZjUsIDB4N2YsIDB4ZGUsIDB4ZTcsIDB4ZDUsIDB4ZTMsCi0weDdhLCAweGRmLCAweGZmLCAweGZjLCAweGJmLCAweDdmLCAweGZmLCAweGY5LAotMHhmZiwgMHg3YywgMHg5ZiwgMHhlZiwgMHhjZCwgMHhmNiwgMHg3ZiwgMHhmYiwKLTB4ZjIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZDEsIDB4YmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGY3LCAweGZlLCAweGZmLCAweGUzLCAweGY0LCAweGZhLAotMHhiZSwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZCwgMHgxZCwgMHg0ZiwgMHhmYSwKLTB4ZmQsIDB4M2YsIDB4NGYsIDB4YWIsIDB4ZmEsIDB4ZmIsIDB4YmUsIDB4NGYsCi0weGU5LCAweGRjLCAweDU3LCAweGZmLCAweGZmLCAweGZmLCAweGQ4LCAweDlmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHg3ZiwgMHhkZiwKLTB4NzcsIDB4ZmQsIDB4ZjcsIDB4N2QsIDB4ZGYsIDB4YjcsIDB4ZDIsIDB4ZjcsCi0weGRmLCAweGY3LCAweDdkLCAweGZmLCAweDdmLCAweGRmLCAweGY3LCAweGM1LAotMHhmNywgMHg3NywgMHhlZiwgMHhhYiwgMHhmZiwgMHhmNSwgMHhmZCwgMHg3ZSwKLTB4ZTYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGU3LCAweGZmLCAweGZlLCAweDdmLCAweDFmLCAweGZmLCAweGYzLAotMHg1ZSwgMHg3ZiwgMHhmZiwgMHhmYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYiwKLTB4ZmIsIDB4ZmUsIDB4N2YsIDB4ZjcsIDB4ZmQsIDB4N2YsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGU2LCAweDVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLAotMHg5ZSwgMHhlNywgMHhiZSwgMHhlZSwgMHhkYiwgMHhlZSwgMHhmZiwgMHhiYiwKLTB4ZWUsIDB4N2YsIDB4ZWYsIDB4YmYsIDB4ZWUsIDB4ZmIsIDB4YmUsIDB4ZWYsCi0weGI5LCAweGVmLCAweGJiLCAweGVlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHg3ZiwgMHgxYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZjksIDB4ZjYsIDB4N2QsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZjcsCi0weGZkLCAweGFmLCAweDZmLCAweGY5LCAweGZkLCAweGZmLCAweDZiLCAweGQ4LAotMHhmZSwgMHgzZCwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmNiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YjEsIDB4ZmYsIDB4ZmIsIDB4ZmUsCi0weGZmLCAweGJmLCAweDZmLCAweGRiLCAweGZlLCAweGZkLCAweGJiLCAweDZmLAotMHhkYiwgMHhkNiwgMHhmMSwgMHhiYiwgMHg2ZiwgMHhmZSwgMHhmZCwgMHhiZSwKLTB4NmYsIDB4ZGIsIDB4ZjYsIDB4ZmQsIDB4YmUsIDB4NmYsIDB4ZGIsIDB4ZWUsCi0weGZmLCAweGJmLCAweGVmLCAweGZiLCAweGZmLCAweGU1LCAweDZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmNywgMHhmZiwgMHhmZiwgMHg3ZiwKLTB4NmYsIDB4ZGYsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4NmYsIDB4ZmYsIDB4ZmYsCi0weDNmLCAweGNmLCAweGRiLCAweGZkLCAweGZkLCAweGZmLCAweGRmLCAweGY3LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNiwgMHg4ZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmIsCi0weGZlLCAweGY3LCAweGJmLCAweGVmLCAweDdiLCAweGRlLCAweGZiLCAweGZmLAotMHhmYiwgMHhiZSwgMHhlZiwgMHhiYiwgMHhlZiwgMHhmYiwgMHhmZSwgMHhmZiwKLTB4YmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweGZmLCAweGY1LCAweGZmLCAweGZmLCAweDVmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwKLTB4ZDcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLAotMHhmZiwgMHhlYiwgMHhiZiwgMHhmYywgMHg5ZiwgMHhmZiwgMHhlOSwgMHhmZiwKLTB4YmYsIDB4ZWIsIDB4ZmEsIDB4N2UsIDB4ZmYsIDB4YmYsIDB4ZWIsIDB4ZmEsCi0weDdlLCAweGJhLCAweDdmLCAweGZhLCAweGZlLCAweDlmLCAweGFmLCAweGVkLAotMHhmYSwgMHhmZSwgMHhmZiwgMHhiZiwgMHhlYiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YjMsIDB4ZmYsIDB4ZDcsIDB4ZmYsIDB4ZmQsCi0weDdmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmNywgMHhkZCwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweGY4LCAweGZmLCAweGZhLCAweGY5LAotMHhmZSwgMHgyZiwgMHg5ZiwgMHhlNywgMHhmOSwgMHhmZSwgMHg3ZiwgMHg5ZiwKLTB4ZTcsIDB4ZjksIDB4ZmUsIDB4N2YsIDB4OGIsIDB4YzcsIDB4ZmUsIDB4N2YsCi0weDlmLCAweGU3LCAweGY5LCAweGZlLCAweDdmLCAweDlmLCAweGM3LCAweGY5LAotMHhmZSwgMHg3ZiwgMHgxZiwgMHhlNywgMHhmOSwgMHhmZiwgMHg5ZiwgMHhmZiwKLTB4ZmYsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmIsIDB4ZmUsCi0weGZmLCAweGJmLCAweGZmLCAweGZmLCAweGZlLCAweDdkLCAweDdhLCAweGZmLAotMHhmZSwgMHg3ZiwgMHhiZiwgMHhlZiwgMHhmOSwgMHhmZSwgMHg3ZiwgMHg5ZSwKLTB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZWIsIDB4ZmYsIDB4ZTcsIDB4ZmYsIDB4ODMsCi0weGZmLCAweGZmLCAweGZmLCAweDdmLCAweGRmLCAweGZmLCAweGZkLCAweGZmLAotMHhmZiwgMHhkZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhhZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmYiwgMHg3ZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhlZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4N2YsCi0weGY3LCAweGZkLCAweGZmLCAweDdmLCAweGRmLCAweGY3LCAweGZkLCAweGZmLAotMHg3ZiwgMHhkZSwgMHhmZCwgMHhmZiwgMHg3ZiwgMHhkZiwgMHhmNywgMHhmZCwKLTB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGY3LCAweGZmLCAweGQxLCAweGZmLCAweGZmLCAweGZmLCAweGVmLAotMHhmZiwgMHhkMywgMHhmNCwgMHhmZCwgMHgxZiwgMHg0ZiwgMHhkMywgMHhmNCwKLTB4ZmQsIDB4M2YsIDB4NGYsIDB4ZDgsIDB4ZmQsIDB4M2YsIDB4NGYsIDB4ZDEsCi0weGY0LCAweGZkLCAweDNmLCAweDQ3LCAweDUzLCAweGY0LCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNiwgMHhhZiwgMHhmZiwgMHhlMywKLTB4ZmEsIDB4ZmUsIDB4YmIsIDB4YTQsIDB4ZTksIDB4YmEsIDB4Y2UsIDB4YWIsCi0weGFlLCAweGViLCAweDNhLCAweGNlLCAweGIzLCAweDJiLCAweDdhLCAweGZlLAotMHhiZiwgMHhhMywgMHhlYiwgMHhmYSwgMHgzZSwgMHg5ZiwgMHg4ZiwgMHhlYiwKLTB4N2EsIDB4YmUsIDB4YWYsIDB4YWQsIDB4ZWIsIDB4N2IsIDB4MDcsIDB4ZmYsCi0weGZmLCAweGZmLCAweDdmLCAweGZlLCAweGM3LCAweGYyLCAweGZkLCAweDVmLAotMHhmZiwgMHhmZCwgMHhmZiwgMHg3ZiwgMHhkZiwgMHhmNywgMHg3ZiwgMHhmYiwKLTB4ZWUsIDB4ZWYsIDB4YmYsIDB4ZWYsIDB4N2IsIDB4YWUsIDB4ZmIsIDB4OWEsCi0weGUxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYyLAotMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3OSwgMHhmNywgMHhmYSwgMHg3ZCwKLTB4ZmYsIDB4ZmYsIDB4ZGYsIDB4OWYsIDB4ZWIsIDB4ZmIsIDB4ZmUsIDB4ZmYsCi0weGY3LCAweGZiLCAweDdkLCAweGJmLCAweGJmLCAweGRiLCAweGZmLCAweDdlLAotMHhiZiwgMHhkYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwKLTB4ZmEsIDB4NWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmIsIDB4N2YsCi0weGY1LCAweGI3LCAweDNmLCAweGVmLCAweGY3LCAweGZmLCAweGZmLCAweGFmLAotMHg3ZiwgMHhiYiwgMHg3ZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZSwKLTB4ZmYsIDB4ZmIsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZiLCAweGZmLCAweGViLCAweGZmLCAweGVlLCAweDNmLAotMHg4ZCwgMHhlMywgMHhmOCwgMHhmYywgMHgzNywgMHgwZiwgMHg2MywgMHhjOCwKLTB4ZmUsIDB4MWQsIDB4YTcsIDB4ZjgsIDB4N2MsIDB4M2YsIDB4ODMsIDB4MjMsCi0weGY4LCAweGRjLCAweDFmLCAweDg3LCAweGUzLCAweGZmLCAweGVmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZSwgMHg3MCwgMHg3ZiwgMHhmNiwgMHg3ZiwgMHhmZiwKLTB4ZGYsIDB4ZjcsIDB4ZjUsIDB4ZmYsIDB4NzcsIDB4OWYsIDB4MzcsIDB4ZjksCi0weGZmLCAweDdmLCAweGRmLCAweGZlLCAweGVkLCAweDdmLCAweGRmLCAweDc3LAotMHhkZCwgMHhlZiwgMHg3ZiwgMHhkZiwgMHg5NywgMHhmNSwgMHhmNywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZjAsIDB4MGYsIDB4ZmYsIDB4ZmUsCi0weGZmLCAweGVmLCAweGVmLCAweGQ3LCAweGY3LCAweGZiLCAweGZmLCAweGZmLAotMHgxZiwgMHhlZSwgMHhmMywgMHhiZSwgMHhiZSwgMHhmMiwgMHhiYiwgMHhiZiwKLTB4ZjksIDB4YmYsIDB4ZmUsIDB4YmIsIDB4ZmMsIDB4NWYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweDA5LCAweGZmLAotMHg3ZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhiZiwKLTB4N2YsIDB4ZDcsIDB4ZTUsIDB4ZmQsIDB4YmYsIDB4M2IsIDB4ZGYsIDB4ZjQsCi0weDNiLCAweDVkLCAweGNmLCAweGZlLCAweGZjLCAweDdmLCAweDdmLCAweDNiLAotMHhmZiwgMHhmZiwgMHg5ZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmMCwKLTB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmUsIDB4ZGYsIDB4ZjUsCi0weDczLCAweGRiLCAweDVmLCAweGJmLCAweGRkLCAweGJkLCAweGVmLCAweDdiLAotMHhlZSwgMHg3ZiwgMHhmZiwgMHg3YiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhlZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4N2UsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGI3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLAotMHhjZiwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmYiwgMHhmMywKLTB4ZmUsIDB4ZmUsIDB4ZGUsIDB4ZmMsIDB4ZmEsIDB4YmYsIDB4M2YsIDB4NmYsCi0weGZmLCAweGJmLCAweDFmLCAweGQ3LCAweGZmLCAweGZjLCAweDdmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhkNiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwKLTB4ZjcsIDB4ZmIsIDB4N2YsIDB4ZDcsIDB4ZmUsIDB4ZmYsIDB4ZmQsIDB4ZWYsCi0weGRmLCAweGZmLCAweGZmLCAweGYzLCAweGZmLCAweGI3LCAweGZiLCAweGZmLAotMHhmNywgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGFmLCAweDdiLCAweGZjLCAweGZmLCAweGJmLCAweGVkLCAweDcyLAotMHhmZiwgMHhmMywgMHg3ZCwgMHhkZiwgMHhmZiwgMHhmNywgMHhlZCwgMHhmOSwKLTB4N2UsIDB4ZGQsIDB4N2IsIDB4ZmQsIDB4N2YsIDB4ZmUsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDExLCAweDdmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhlZiwgMHhlYywgMHhmZCwgMHg3ZiwgMHhmYSwgMHhiZiwKLTB4ZWYsIDB4ZjksIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWQsIDB4ZjAsIDB4ZmIsCi0weGJmLCAweGVkLCAweGY5LCAweGZmLCAweGFmLCAweDZlLCAweGZiLCAweGZlLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmNywgMHg3ZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4ZjUsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZkLCAweDdlLCAweGZmLCAweDVmLCAweGRmLCAweGZiLCAweGVmLAotMHhmNywgMHhjZiwgMHhmYiwgMHhmOCwgMHhlZiwgMHhmZiwgMHhmZCwgMHg3ZiwKLTB4OWYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjYsCi0weGMzLCAweGZmLCAweGJmLCAweGZjLCAweGZmLCAweGY1LCAweGNjLCAweGY3LAotMHgzYywgMHhmZiwgMHhmZSwgMHhjZiwgMHhmMiwgMHg2YywgMHhjZiwgMHhkZiwKLTB4Y2YsIDB4ZWMsIDB4N2YsIDB4M2YsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZmIsCi0weDc1LCAweGNmLCAweGIzLCAweGZmLCAweGZmLCAweGU3LCAweGZmLCAweGZmLAotMHhmZiwgMHgzNSwgMHhhZiwgMHhmNywgMHhiZiwgMHhkZiwgMHhmZiwgMHhmZiwKLTB4YTMsIDB4ZTUsIDB4ZmYsIDB4M2YsIDB4ZGQsIDB4ZmUsIDB4YTksIDB4ZWYsCi0weDdlLCAweDdmLCAweGZjLCAweDVhLCAweDNiLCAweGRmLCAweGY3LCAweGZmLAotMHhmZiwgMHhmZSwgMHhiYiwgMHhmNiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhiZiwKLTB4ZmYsIDB4ZmYsIDB4NTgsIDB4YmQsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4MmIsCi0weGZmLCAweDlmLCAweDlkLCAweDczLCAweDJiLCAweGZhLCAweGU3LCAweGJmLAotMHhhYiwgMHg1ZCwgMHhjYiwgMHg5ZiwgMHhhYywgMHg2YSwgMHg5ZiwgMHg3ZSwKLTB4OWYsIDB4ZjcsIDB4ZWYsIDB4N2YsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmQsCi0weGZmLCAweGZmLCAweGZmLCAweGVmLCAweDg2LCAweGZmLCAweGRmLCAweGZmLAotMHhlZCwgMHg3ZiwgMHhmZiwgMHhjZCwgMHg5MywgMHg2NSwgMHg3OSwgMHg3ZSwKLTB4ZGYsIDB4MzcsIDB4ZWQsIDB4ZDMsIDB4N2YsIDB4ZjUsIDB4ZTUsIDB4N2YsCi0weDc2LCAweGRkLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLAotMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3OCwgMHhmZiwgMHhmYiwKLTB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZWIsIDB4ZmUsIDB4N2QsIDB4ZGQsIDB4MmYsCi0weGNiLCAweGMzLCAweGZlLCAweGJlLCAweDdjLCAweGRiLCAweGZmLCAweGZmLAotMHgyZiwgMHhmZiwgMHgyMiwgMHhkZiwgMHhmNywgMHhmZiwgMHhlYiwgMHhmYiwKLTB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4ZGIsCi0weGZmLCAweDc3LCAweGZmLCAweGZmLCAweDdkLCAweDVmLCAweDc3LCAweDFkLAotMHhmNywgMHg1MSwgMHg1ZSwgMHg3NywgMHg5NSwgMHg4NywgMHg3ZCwgMHhkZSwKLTB4ZGQsIDB4ODcsIDB4NzksIDB4ZGYsIDB4N2IsIDB4ZGQsIDB4ZmYsIDB4NzksCi0weDVmLCAweDc3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLAotMHg5OSwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZSwgMHhiZiwgMHhhZCwgMHhmYiwKLTB4Y2EsIDB4ZmUsIDB4YmYsIDB4YWYsIDB4YWIsIDB4NDIsIDB4ZmUsIDB4YWQsCi0weDJmLCAweDNmLCAweGZlLCAweGJlLCAweGFmLCAweDRiLCAweGZlLCAweGRmLAotMHhmZSwgMHhhZiwgMHhlZiwgMHg5ZiwgMHhmNywgMHhlZCwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZTMsIDB4N2YsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZDcsIDB4ZjUsCi0weGZkLCAweGI4LCAweDRmLCAweGQ3LCAweGY1LCAweGZkLCAweGZhLCAweDVmLAotMHhkNiwgMHhmNywgMHhjNiwgMHg3ZiwgMHhkNywgMHhmNSwgMHg2ZCwgMHhmZiwKLTB4NzYsIDB4ZmYsIDB4MzUsIDB4ZmQsIDB4ZjMsIDB4ZmUsIDB4N2YsIDB4OWYsCi0weGZmLCAweGZmLCAweGZmLCAweDRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmNiwgMHhmZCwgMHhiZiwgMHhlZCwgMHhmZiwgMHhmZSwKLTB4ZGYsIDB4YmYsIDB4Y2QsIDB4ZmIsIDB4N2YsIDB4YmYsIDB4ZWQsIDB4ZDAsCi0weGZjLCAweGZkLCAweDI3LCAweGVkLCAweGZmLCAweGZmLCAweGZmLCAweGVmLAotMHg1YiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTMsIDB4ZmUsIDB4ZmUsIDB4ZmYsCi0weDlmLCAweGU3LCAweGZhLCAweGZlLCAweGZmLCAweGZiLCAweGZhLCAweGZlLAotMHhmOSwgMHhmZiwgMHhmYiwgMHg5YiwgMHhmZSwgMHg3ZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZTcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjksIDB4MWYsIDB4ZmYsCi0weGJmLCAweGVmLCAweGZiLCAweGZlLCAweGZkLCAweDlmLCAweDY3LCAweGRiLAotMHgzNiwgMHhkZiwgMHhiZiwgMHhlZSwgMHhkYiwgMHhiZSwgMHhmZCwgMHhlZSwKLTB4ZGIsIDB4ZWUsIDB4NzUsIDB4YmYsIDB4NjcsIDB4YmIsIDB4ZmUsIDB4ZmYsCi0weGJmLCAweGVmLCAweGY4LCAweGZlLCAweGZmLCAweGJmLCAweGZlLCAweDU2LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhiZiwgMHg2ZiwKLTB4ZGIsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZjMsIDB4ZmUsIDB4ZmQsCi0weGJmLCAweGRiLCAweGZmLCAweGZiLCAweGJlLCAweGRmLCAweGJmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4NzYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGY3LCAweGZkLCAweGZlLCAweGZmLCAweGZmLCAweGY3LCAweGZlLCAweGZmLAotMHhiZiwgMHhiZiwgMHhmYiwgMHhmZiwgMHhmZSwgMHhkZiwgMHhmZiwgMHhlZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZkLCAweDE3LCAweGZlLCAweDVmLCAweGZmLCAweGZmLCAweGZmLAotMHg3ZiwgMHg0NywgMHhkMSwgMHhmNSwgMHhmZCwgMHg3ZiwgMHhkZiwgMHhkNywKLTB4ZjUsIDB4ZWYsIDB4N2YsIDB4ZDcsIDB4YjUsIDB4ZmIsIDB4MWIsIDB4NWUsCi0weGY5LCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweGZlLCAweDdmLAotMHhmZiwgMHhmZSwgMHhmZiwgMHg4YiwgMHhmZiwgMHhlOSwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZTcsIDB4ZWIsIDB4ZmEsIDB4ZmUsIDB4OWYsIDB4YTcsIDB4ZTksCi0weGZhLCAweDdlLCAweDhmLCAweGE3LCAweGZiLCAweDc2LCAweDlmLCAweGUzLAotMHhlYSwgMHhkNywgMHgzZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YjAsIDB4N2IsIDB4ZmQsIDB4N2YsCi0weGZkLCAweGZmLCAweGZkLCAweGZiLCAweDM3LCAweDRmLCAweGY3LCAweGU1LAotMHhlZiwgMHg3ZiwgMHg1ZiwgMHhmNywgMHhiZCwgMHhlZiwgMHg3ZiwgMHhmNywKLTB4M2UsIDB4ZmYsIDB4NzcsIDB4NWMsIDB4ZjcsIDB4YmYsIDB4ZGYsIDB4ZjcsCi0weGZlLCAweGZiLCAweGJmLCAweGZmLCAweGZmLCAweGZkLCAweDJmLCAweGZmLAotMHhhZiwgMHg5ZiwgMHhlNywgMHhmOSwgMHhiZSwgMHgzZiwgMHg4YiwgMHhjMiwKLTB4ZjgsIDB4YmUsIDB4M2YsIDB4OGIsIDB4YTcsIDB4ZjksIDB4YmUsIDB4NmYsCi0weGUyLCAweGY5LCAweGZlLCAweDJmLCAweDg5LCAweGU2LCAweGY5LCAweGZlLAotMHg3ZiwgMHg5ZiwgMHhlNywgMHhmOSwgMHhmZSwgMHg3ZiwgMHg5ZiwgMHhkZCwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjMsIDB4ZjUsIDB4ZmYsCi0weDdhLCAweDVmLCAweGY3LCAweGZjLCAweDdmLCAweDM3LCAweGRmLCAweGYxLAotMHhmZCwgMHgxZiwgMHg0ZiwgMHhmMSwgMHhmNSwgMHhmZiwgMHgxZiwgMHhlZiwKLTB4ZmYsIDB4ZmUsIDB4N2YsIDB4OWYsIDB4ZTcsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGViLCAweDNmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweDdlLAotMHhiZiwgMHhiZiwgMHhlYiwgMHhmYSwgMHhmZiwgMHhiZiwgMHhhNywgMHhiZiwKLTB4ZmIsIDB4ZmYsIDB4YmYsIDB4ZTksIDB4ZmUsIDB4ZmUsIDB4YmYsIDB4YmYsCi0weGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHgxMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZmYsIDB4ZmQsCi0weGZmLCAweDdmLCAweGZmLCAweGU3LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotMHhmZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTYsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGY5LCAweGZmLCAweDdmLCAweGZmLCAweGJmLCAweGVmLCAweGZmLAotMHg3ZSwgMHhkYiwgMHhmZCwgMHhmZCwgMHhmZSwgMHhkZiwgMHhiNywgMHhmZiwKLTB4N2YsIDB4ZGYsIDB4YjcsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZGYsCi0weGZkLCAweGZkLCAweGZmLCAweGZmLCAweGZkLCAweDlmLCAweGY3LCAweDdmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhkZiwgMHhmNywgMHhmZCwKLTB4YmYsIDB4ZWUsIDB4ZGYsIDB4ZjYsIDB4ZmQsIDB4YWQsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweGFmLCAweDI3LCAweGRlLCAweGYyLCAweGZmLCAweGZmLCAweGFiLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMywgMHhmZiwKLTB4ZjYsIDB4YmYsIDB4YTcsIDB4ZTksIDB4ZmEsIDB4ZGUsIDB4YmIsIDB4YWYsCi0weGVhLCAweGI4LCAweGZjLCAweDMzLCAweGFmLCAweGU5LCAweGZhLCAweGY3LAotMHhhZiwgMHhlMywgMHhiYSwgMHhmNiwgMHhiYiwgMHhhNywgMHg2OSwgMHhmYSwKLTB4N2UsIDB4YmYsIDB4YWYsIDB4ZWIsIDB4ZmEsIDB4ZmUsIDB4YmIsIDB4ZjMsCi0weDdmLCAweGRmLCAweGZmLCAweGNkLCAweGZmLCAweGZmLCAweGRmLCAweDE3LAotMHhjZCwgMHhhZSwgMHhmNiwgMHhiZCwgMHhlZiwgMHhmNSwgMHhjMywgMHg3MywKLTB4ZWYsIDB4ZmYsIDB4ZmUsIDB4ZTQsIDB4N2YsIDB4M2YsIDB4YzcsIDB4ZmYsCi0weDZmLCAweGRmLCAweGZkLCAweGZmLCAweGIzLCAweGZmLCAweGZmLCAweGZmLAotMHhlZSwgMHhhNywgMHhmZiwgMHhmZiwgMHhkZiwgMHhlZiwgMHhmZiwgMHhlZiwKLTB4YmUsIDB4OTMsIDB4ZGYsIDB4ZmQsIDB4N2YsIDB4N2IsIDB4ZmYsIDB4ZmYsCi0weGU3LCAweGVmLCAweGZmLCAweDVmLCAweGY3LCAweGZkLCAweGZmLCAweGRmLAotMHhmZiwgMHhlNywgMHhmYiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZCwKLTB4ZjcsIDB4ZmYsIDB4OTUsIDB4ZWYsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGVkLCAweGFmLCAweGNkLCAweGYyLCAweGZmLCAweGJmLCAweDNmLAotMHhmZSwgMHgzZiwgMHhmZiwgMHhlNywgMHhiYiwgMHhmYiwgMHhjZiwgMHhiMywKLTB4ZTgsIDB4ZjYsIDB4ZmYsIDB4ZmQsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4M2YsCi0weGZmLCAweGZmLCAweGZmLCAweGU5LCAweGJmLCAweGZhLCAweGJmLCAweGZmLAotMHhmZiwgMHhmZiwgMHg3ZSwgMHg5YSwgMHhiNywgMHhjOSwgMHhmOSwgMHhmZCwKLTB4OWYsIDB4NmYsIDB4NzksIDB4Y2UsIDB4ZGYsIDB4ZmYsIDB4YWEsIDB4ZmYsCi0weGZlLCAweDlmLCAweDhmLCAweGY5LCAweGVmLCAweDdiLCAweGRmLCAweGZlLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZCwgMHhkNSwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTcsIDB4ZmQsIDB4ZWYsIDB4YmIsCi0weGZkLCAweGRmLCAweGJiLCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweGFkLAotMHg3ZiwgMHhmYywgMHg1NywgMHhiZiwgMHhmNiwgMHhmZiwgMHhmZiwgMHhmZCwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTgsIDB4ZmYsCi0weGZlLCAweGZkLCAweGZmLCAweGY3LCAweGZmLCAweGJmLCAweGZmLCAweGZmLAotMHhhZSwgMHhmZiwgMHhmZiwgMHhlZiwgMHgzZCwgMHhhYiwgMHhlZSwgMHhkYiwKLTB4ZmIsIDB4ZmYsIDB4NzMsIDB4ZmMsIDB4ZmUsIDB4ZmYsIDB4Y2YsIDB4ZmYsCi0weGY3LCAweGZmLCAweGZiLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLAotMHgxZiwgMHhmZiwgMHgzNywgMHhmYiwgMHhlZiwgMHhmNywgMHhiZiwgMHhlZiwKLTB4ZmIsIDB4ZjQsIDB4ZWQsIDB4N2YsIDB4ZmYsIDB4N2IsIDB4ZjMsIDB4ZGYsCi0weGZmLCAweDU5LCAweGZmLCAweGZmLCAweGZhLCAweGViLCAweGRiLCAweGY1LAotMHhmZiwgMHhiNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4OWEsIDB4N2YsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGRmLCAweGZmLCAweGQ3LCAweGZmLCAweDdmLCAweGZmLCAweGZlLAotMHhmZiwgMHhmZiwgMHhhYiwgMHhmZiwgMHhlZCwgMHhmZiwgMHhkZiwgMHhmZSwKLTB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmUsIDB4ZmYsCi0weGZmLCAweGZmLCAweGQwLCAweDdmLCAweGZkLCAweGZmLCAweGZmLCAweDdiLAotMHhmZSwgMHhmZiwgMHhmZiwgMHgzNywgMHg3ZCwgMHhmMywgMHhmYywgMHhmYiwKLTB4YWMsIDB4ODcsIDB4ZDEsIDB4ZDksIDB4ZmUsIDB4YTksIDB4NmYsIDB4YmYsCi0weGY3LCAweGZmLCAweDRkLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhhZiwgMHhmZiwgMHhiZiwgMHhmZiwKLTB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZTcsIDB4ZmYsIDB4ZmUsIDB4YmUsCi0weGI2LCAweGJiLCAweGRlLCAweGE5LCAweDdkLCAweGJlLCAweGZmLCAweDdmLAotMHhmNywgMHhmZiwgMHhmZiwgMHhjMSwgMHhiZCwgMHhmZSwgMHhmZiwgMHhkZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YzUsIDB4ZmYsIDB4YmYsCi0weGZmLCAweGZmLCAweGZiLCAweDdmLCAweGZmLCAweGFmLCAweDdiLCAweGY3LAotMHhkNywgMHg3NSwgMHhmZiwgMHhmNywgMHhmYiwgMHhmZiwgMHg2ZiwgMHhmZSwKLTB4ZmUsIDB4ZDUsIDB4N2QsIDB4ZWYsIDB4ZWYsIDB4ZmYsIDB4ZDcsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweDlkLAotMHhmYiwgMHhmNywgMHhmZCwgMHhmZSwgMHhmZiwgMHg3YiwgMHhlZiwgMHg0ZiwKLTB4ZmYsIDB4YmYsIDB4ZmYsIDB4YmYsIDB4ZmIsIDB4ZmIsIDB4YmUsIDB4ZGYsCi0weGVmLCAweGZmLCAweGZlLCAweDdmLCAweDc1LCAweGVmLCAweGZiLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKLTB4NTYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGZlLCAweGZmLAotMHhkZiwgMHhlZCwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZCwgMHhiZSwKLTB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZhLCAweDFmLCAweGZmLCAweDM1LCAweGNmLCAweGYxLCAweDJmLAotMHg3ZiwgMHgzMywgMHhjZiwgMHhmNywgMHg1YywgMHg1MywgMHg1ZSwgMHhkNywKLTB4YjEsIDB4ZWMsIDB4Y2YsIDB4ZmYsIDB4ZjMsIDB4NWYsIDB4ZmYsIDB4M2YsCi0weGNmLCAweGYxLCAweGVmLCAweGZmLCAweGU3LCAweGM3LCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmMSwgMHhkYSwgMHhmZiwgMHhlOCwgMHhmZiwgMHgzMywKLTB4ZmYsIDB4ZjksIDB4ZjQsIDB4ZmYsIDB4YWYsIDB4ZTcsIDB4YWEsIDB4N2MsCi0weGRmLCAweDk3LCAweGJmLCAweGZhLCAweGNmLCAweGFmLCAweDY1LCAweGVmLAotMHhlYiwgMHhmYywgMHg5NywgMHhiZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjUsIDB4ZTMsIDB4NWYsIDB4ZmYsIDB4ZmYsCi0weGJmLCAweGFkLCAweDc3LCAweDRiLCAweGQyLCAweDNmLCAweDlmLCAweGY3LAotMHhlZCwgMHhkMiwgMHg3ZSwgMHg4ZiwgMHhiYiwgMHg1YSwgMHg3ZSwgMHhiZiwKLTB4ZmYsIDB4ZmIsIDB4ZmUsIDB4ZmUsIDB4ZWYsIDB4YmYsIDB4ZmYsIDB4ZmYsCi0weGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZhLCAweDZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHg3ZCwgMHg3YiwgMHgxNiwgMHg0YiwKLTB4ZmIsIDB4ZmMsIDB4YjksIDB4MzcsIDB4Y2QsIDB4ZmYsIDB4ZTcsIDB4MTcsCi0weGM3LCAweGI3LCAweGU1LCAweGZmLCAweDdmLCAweGQ3LCAweGY3LCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNiwgMHg4MywKLTB4ZmIsIDB4MmYsIDB4ZmYsIDB4ZmUsIDB4ZmMsIDB4OTcsIDB4N2YsIDB4YmQsCi0weGZiLCAweDZjLCAweDhmLCAweGI3LCAweGU5LCAweGYyLCAweDdjLCAweGZiLAotMHg2OSwgMHhmZiwgMHg3YiwgMHhmZiwgMHgzZSwgMHhjZiwgMHhiMywgMHhmZSwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGQxLCAweGJmLCAweGY1LCAweDdmLCAweGZmLCAweDc3LCAweDFiLCAweDhmLAotMHg3ZiwgMHhkZiwgMHg3NywgMHhkNSwgMHhmNywgMHg3ZCwgMHg1OCwgMHg1NSwKLTB4M2QsIDB4ZmQsIDB4ZDYsIDB4ZjcsIDB4ZGQsIDB4ODcsIDB4NjksIDB4ZGYsCi0weGQ3LCAweGRkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhkZiwgMHgzNywgMHhmZSwgMHhiZiwgMHhmZiwgMHg3YiwgMHg4ZiwKLTB4ZmUsIDB4YmYsIDB4YWYsIDB4ZWIsIDB4NTIsIDB4ZjQsIDB4ZmYsIDB4YWYsCi0weDZiLCAweDliLCAweGZmLCAweDJmLCAweGViLCAweGRhLCAweGZlLCAweGJmLAotMHhhZiwgMHg0ZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZGUsIDB4OTcsIDB4ZmYsIDB4ZDcsIDB4ZmYsIDB4ZTUsCi0weGZhLCAweGY3LCAweGQ3LCAweGY0LCAweGNkLCAweGJhLCAweDRlLCAweDliLAotMHhiNCwgMHhjNSwgMHgzMywgMHhmZiwgMHhmNCwgMHhmZCwgMHgzZCwgMHg1ZiwKLTB4ZGYsIDB4ZjcsIDB4Y2YsIDB4N2YsIDB4N2UsIDB4YmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY2LCAweDdmLCAweGZmLCAweGZmLAotMHhmZSwgMHhmZiwgMHhmZCwgMHgzZiwgMHhmZiwgMHhkOSwgMHhmNiwgMHhkZCwKLTB4ZmYsIDB4N2IsIDB4ZGIsIDB4ZjcsIDB4ZmYsIDB4YjcsIDB4ZGYsIDB4ZjcsCi0weGZmLCAweGZmLCAweGZmLCAweGY5LCAweGZlLCAweGRmLCAweGI3LCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhkZiwgMHhmYiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmEsIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGVmLCAweGZiLCAweGZmLCAweGZmLCAweGVmLCAweGVmLCAweGY5LCAweGZmLAotMHhmZiwgMHhlNywgMHhmYiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmYiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OTEsCi0weDdmLCAweGJiLCAweGZlLCAweGZmLCAweGJlLCAweDY2LCAweGZiLCAweGZlLAotMHg2ZCwgMHg5ZSwgMHhlNywgMHg5OSwgMHhmNiwgMHg3ZiwgMHg5YiwgMHhlZCwKLTB4ZDYsIDB4N2QsIDB4OWYsIDB4NmYsIDB4YmIsIDB4YjYsIDB4ZmQsIDB4YmUsCi0weGVlLCAweGZiLCAweGZlLCAweGZmLCAweGJmLCAweGVmLCAweGZiLCAweGZmLAotMHhlZCwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4M2YsIDB4ZmYsIDB4ZGIsIDB4ZmMsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGY3LCAweGZmLCAweDdmLCAweDZmLCAweGZiLCAweGY3LCAweGZkLAotMHhiZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmUsIDB4ZjcsIDB4OGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZiLCAweGZlLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhlZiwgMHhmZCwgMHhmZiwKLTB4ZmYsIDB4ZWYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZlLCAweGZmLCAweGQxLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotMHg1ZiwgMHhmMSwgMHhmZiwgMHhlZCwgMHgxYiwgMHg0NywgMHhkMywgMHhmYywKLTB4N2QsIDB4MWIsIDB4NDYsIDB4ZGYsIDB4ZmYsIDB4MWYsIDB4NDcsIDB4ZDcsCi0weGZkLCAweGZkLCAweDdmLCAweGRmLCAweDlmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhlOSwgMHgzZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4NDksIDB4ZmIsIDB4YmYsIDB4ZmYsIDB4YWYsIDB4ZWIsIDB4ZmEsCi0weGZlLCAweGJmLCAweDJmLCAweGNiLCAweGZiLCAweDdmLCAweDJmLCAweGViLAotMHhmYSwgMHg3ZSwgMHg5ZiwgMHgyNywgMHhlOSwgMHhmZiwgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MzMsIDB4ZmYsCi0weGZmLCAweDdmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZjLCAweGRmLAotMHgzZiwgMHhkZiwgMHhmMywgMHhmNCwgMHhmZCwgMHgzZiwgMHhmZCwgMHhmZCwKLTB4ZmYsIDB4N2YsIDB4ZGUsIDB4ZjcsIDB4ZmQsIDB4ZGYsIDB4ZjYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYwLAotMHhmZiwgMHhiZiwgMHhmOSwgMHhmZSwgMHg3ZiwgMHg5ZCwgMHhlNywgMHhmOSwKLTB4YmUsIDB4M2YsIDB4OWIsIDB4ZTIsIDB4ZjgsIDB4YmUsIDB4MmYsIDB4OWYsCi0weGU2LCAweDljLCAweDM3LCAweDlmLCAweGUzLCAweGY5LCAweGZlLCAweDdmLAotMHg5ZiwgMHhlNywgMHhmOSwgMHhmZSwgMHg3ZiwgMHg5ZiwgMHhlNywgMHhmOSwKLTB4ZmQsIDB4NWYsIDB4ZmYsIDB4ZmYsIDB4ZjksIDB4ZjQsIDB4N2YsIDB4N2YsCi0weGZmLCAweGYxLCAweGY0LCAweGZkLCAweDdmLCAweGNmLCAweGY3LCAweGZjLAotMHg3ZiwgMHhiZiwgMHhmNywgMHhhYywgMHg3ZiwgMHg3ZiwgMHhjZiwgMHhmMSwKLTB4ZmUsIDB4ZmQsIDB4OWYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGEzLCAweGZkLCAweGZmLCAweGZmLCAweGZlLCAweGJmLAotMHhiZiwgMHhmZiwgMHhmZSwgMHhmZSwgMHhiZiwgMHhhZiwgMHhlZiwgMHhmYiwKLTB4ZmYsIDB4YmYsIDB4ZjcsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmIsCi0weGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHgzZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmIsIDB4ZmYsIDB4ZmYsCi0weDNmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGRmLCAweGY3LCAweGZkLAotMHhmZiwgMHhiZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4YWUsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweGZmLCAweDdmLCAweGY3LCAweGY3LCAweGY5LCAweGZmLCAweDdmLAotMHhkZiwgMHhiNywgMHhmZCwgMHhmZiwgMHg3ZiwgMHhkZiwgMHhlZiwgMHhmYiwKLTB4N2YsIDB4ZGYsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZjcsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGU1LCAweGZmLAotMHhkZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4N2YsIDB4ZmYsIDB4ZjQsIDB4N2QsIDB4YmIsIDB4N2YsIDB4Y2IsIDB4ZmQsCi0weGZmLCAweGZlLCAweGNiLCAweGZlLCAweGJkLCAweGJmLCAweDZmLCAweGQzLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiMiwKLTB4YmYsIDB4ZmYsIDB4ZWIsIDB4ZmEsIDB4ZmUsIDB4YWYsIDB4YWQsIDB4ZTksCi0weGYyLCAweGZlLCAweGJmLCAweGE2LCAweGU4LCAweGJhLCAweDc2LCAweDlkLAotMHhhZiwgMHg3YSwgMHhiZSwgMHhiYiwgMHhhMywgMHhlYiwgMHhkYSwgMHhjZSwKLTB4YmIsIDB4YWQsIDB4ZTIsIDB4ZmEsIDB4ZmUsIDB4YjcsIDB4YWYsIDB4ZWIsCi0weGZmLCAweGM3LCAweGZmLCAweGZmLCAweGZmLCAweDVmLCAweGZiLCAweGRkLAotMHhmMSwgMHg3YywgMHhkYSwgMHgzNywgMHhjZCwgMHhiMywgMHhmNCwgMHgzNywKLTB4MzcsIDB4ZmMsIDB4YjgsIDB4ZGYsIDB4MTMsIDB4ZjUsIDB4ZDMsIDB4ODQsCi0weDdkLCAweGQ3LCAweGZjLCAweGY1LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHg3NCwgMHg3ZiwgMHhmZiwgMHhmNywgMHhmYSwgMHhmZiwKLTB4N2YsIDB4ZmYsIDB4NjcsIDB4ZjksIDB4ZGYsIDB4NzcsIDB4ZGYsIDB4ZGYsCi0weGZkLCAweGZjLCAweGRmLCAweGJmLCAweGYzLCAweGNiLCAweDdmLCAweGJmLAotMHhmZiwgMHg1ZiwgMHhmYiwgMHhkZiwgMHg3ZSwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZjgsIDB4OTcsIDB4ZmYsIDB4ZmIsIDB4ZmYsCi0weDZmLCAweDdlLCAweGZhLCAweDVmLCAweDk0LCAweGJiLCAweGZlLCAweGZmLAotMHgzZiwgMHg5NywgMHhlNSwgMHhmZiwgMHhlZiwgMHg1NywgMHhmZiwgMHhiZiwKLTB4ZjcsIDB4NGIsIDB4ZWYsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmIsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweDk5LCAweGZkLCAweGZkLAotMHhmZiwgMHhiNywgMHhmZSwgMHhmZCwgMHhmZSwgMHhmYSwgMHg3ZSwgMHhiZCwKLTB4MjcsIDB4NmIsIDB4YjksIDB4ZjYsIDB4ZmYsIDB4NjcsIDB4ZjMsIDB4ZmUsCi0weDFmLCAweDhmLCAweGZiLCAweGRiLCAweGZmLCAweGJkLCAweGZiLCAweGZmLAotMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhlZiwgMHg3ZiwKLTB4ZmYsIDB4ZWUsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OWUsCi0weGZiLCAweGY5LCAweGZlLCAweDdkLCAweGZmLCAweGY3LCAweGZiLCAweGY1LAotMHhlZSwgMHhmZCwgMHhmYiwgMHhmNSwgMHhmZiwgMHhlZiwgMHg3ZiwgMHhmZiwKLTB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsCi0weGE3LCAweGZmLCAweGZlLCAweGZkLCAweDc3LCAweGZmLCAweGJmLCAweGVlLAotMHhmZCwgMHhlYiwgMHhlZiwgMHgzYSwgMHhmNywgMHhmZiwgMHhmZiwgMHg1ZiwKLTB4ZmYsIDB4YjMsIDB4ZjgsIDB4ZjcsIDB4M2IsIDB4ZWYsIDB4ZmIsIDB4ZjMsCi0weGVkLCAweDNiLCAweGZlLCAweGZmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHg4OSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhkZSwKLTB4ZjYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmQsIDB4Y2YsCi0weDdmLCAweGRmLCAweGU1LCAweGZmLCAweDdlLCAweGRiLCAweDdhLCAweGZlLAotMHhhZiwgMHhlZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4YmYsCi0weGZiLCAweDdlLCAweGQ3LCAweGVkLCAweGZlLCAweGZlLCAweDlmLCAweGZmLAotMHgzZiwgMHhlZiwgMHhkYiwgMHhmZiwgMHhlZiwgMHhkYSwgMHhlZSwgMHhlNywKLTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGE3LCAweGZkLCAweGNmLCAweGYzLAotMHhkZSwgMHhmZiwgMHhhZCwgMHhjZiwgMHhlZiwgMHhmYiwgMHhmZSwgMHhmZCwKLTB4MmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4YmYsIDB4YmYsIDB4ZjcsCi0weDMzLCAweGZmLCAweGVmLCAweGZmLCAweGJjLCAweDFmLCAweGJmLCAweGVmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYywgMHhlZiwgMHhmZSwKLTB4ZmYsIDB4N2UsIDB4ZjcsIDB4ZDcsIDB4ZGIsIDB4N2YsIDB4ZWIsIDB4ZmIsCi0weGZlLCAweGZmLCAweDdmLCAweGY3LCAweGZmLCAweGZlLCAweDc5LCAweGViLAotMHhmZiwgMHg5YiwgMHg2NywgMHhiNywgMHhmZiwgMHhmZiwgMHhmYSwgMHhkZiwKLTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4OWQsCi0weGVmLCAweGJmLCAweGVmLCAweDVmLCAweGRmLCAweDc3LCAweDVmLCAweGJkLAotMHhmZCwgMHhkYiwgMHhmZiwgMHg1YSwgMHhmNywgMHhhZCwgMHg4YiwgMHgzYSwKLTB4ZjcsIDB4YmYsIDB4ZGUsIDB4N2YsIDB4ZmQsIDB4YjMsIDB4YWMsIDB4ZDksCi0weDdmLCAweGZmLCAweGJmLCAweGRmLCAweGZkLCAweDdmLCAweGZmLCAweGZmLAotMHgxOSwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhkZiwgMHhmNywgMHhkZiwgMHhmZiwKLTB4YmYsIDB4ZGYsIDB4YjUsIDB4ZWQsIDB4NzksIDB4ZWUsIDB4ZDcsIDB4MzcsCi0weGNlLCAweGZlLCAweGYzLCAweGJmLCAweGVmLCAweGJiLCAweDdlLCAweGRiLAotMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhhZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4NzcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGVmLCAweGZmLCAweGZmLCAweGNmLCAweGZiLCAweDdmLCAweDdmLCAweDNmLAotMHhiNywgMHhmZCwgMHhmZiwgMHg1ZiwgMHhmNywgMHhmNSwgMHhmZiwgMHg3ZiwKLTB4NWYsIDB4ZGYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZlLCAweDYzLCAweGZmLCAweGYxLCAweGZjLCAweGNiLAotMHgzZiwgMHhkZCwgMHg3MiwgMHg3ZCwgMHhjZiwgMHgxZiwgMHhkZiwgMHhiMywKLTB4M2YsIDB4N2YsIDB4ZmYsIDB4ZmQsIDB4N2YsIDB4ZmYsIDB4ZTcsIDB4ZjksCi0weGZmLCAweGZmLCAweDlmLCAweDNmLCAweGZmLCAweGYzLCAweGZmLCAweGNmLAotMHgzZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgzNSwgMHhhZiwgMHhmZiwgMHg3YywKLTB4YjksIDB4NmYsIDB4ZmYsIDB4M2UsIDB4ZmYsIDB4ZmEsIDB4ZmIsIDB4ZmYsCi0weGE3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGFmLCAweGZmLCAweGZjLAotMHhmZiwgMHg5ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwKLTB4ZjMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NWMsIDB4YmQsIDB4ZmYsCi0weGZmLCAweGVmLCAweGVmLCAweGQ2LCAweGZmLCAweGZmLCAweGJmLCAweDRlLAotMHhjYiwgMHhmZSwgMHhlOSwgMHhkNiwgMHg3NSwgMHg5ZCwgMHg3MywgMHhkNywKLTB4NTUsIDB4ZDUsIDB4NzUsIDB4NWQsIDB4NTcsIDB4ZmUsIDB4ZmUsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGE2LAotMHhmZiwgMHhmZiwgMHhmNywgMHhmZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHg5NywKLTB4ZWQsIDB4ZjksIDB4N2YsIDB4ZGYsIDB4OWYsIDB4NGYsIDB4YjMsIDB4ZmMsCi0weGZlLCAweGZmLCAweGY5LCAweGVmLCAweGZmLCAweDlmLCAweGZmLCAweGZmLAotMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4NmEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4M2YsIDB4ZjksIDB4ZmEsCi0weGZlLCAweDllLCAweGVlLCAweGRiLCAweGQzLCAweGZmLCAweGY3LCAweGZjLAotMHhkZSwgMHhiNywgMHhmNSwgMHg3OCwgMHhkZiwgMHg1NywgMHg5ZCwgMHhlNSwKLTB4N2YsIDB4ZTksIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZlLCAweDFiLCAweGZmLCAweGZmLCAweGRkLCAweGM3LCAweDdmLAotMHgzZiwgMHg1NywgMHhkMywgMHhmNywgMHg3OSwgMHhkZSwgMHg3NywgMHhmZSwKLTB4NmYsIDB4YmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4OWIsIDB4ZWYsIDB4ZmIsCi0weDdlLCAweGVmLCAweGZkLCAweDM2LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZCwgMHhkOSwgMHhmZiwgMHhmZiwgMHhmZSwgMHhkYSwKLTB4ZjcsIDB4ZWQsIDB4NmIsIDB4N2EsIDB4ZTYsIDB4YmUsIDB4YWUsIDB4MmYsCi0weGZkLCAweGZmLCAweDc3LCAweGRmLCAweDVkLCAweGRmLCAweDdmLCAweGRmLAotMHhmNywgMHg3ZCwgMHhmYiwgMHhmZiwgMHhhZiwgMHhmZiwgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTUsIDB4N2YsIDB4ZmYsIDB4ZmYsCi0weDdmLCAweGRmLCAweGZmLCAweGM1LCAweDdmLCAweDVlLCAweGRmLCAweGY3LAotMHhjZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYiwgMHhmZSwgMHhiZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjUsIDB4ZWYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhkYiwgMHhmZiwgMHhmZCwgMHhhNywKLTB4ZTcsIDB4ZmYsIDB4ZmUsIDB4ZGIsIDB4YmUsIDB4ZTcsIDB4YmIsIDB4ZmIsCi0weGJlLCAweGVmLCAweGJiLCAweGVlLCAweGZiLCAweGZmLCAweGU3LCAweGRlLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlOSwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4M2QsIDB4YWYsIDB4ZmYsCi0weGZiLCAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZhLCAweGZlLCAweGZkLAotMHhlZiwgMHhmZSwgMHhmZSwgMHhiZiwgMHg4ZiwgMHhlMywgMHhmYiwgMHhmZSwKLTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGVlLCAweDlmLCAweGZmLCAweGJmLCAweGVmLCAweGZiLCAweGZlLCAweDM5LAotMHhiZiwgMHg2NywgMHg5YiwgMHhmNiwgMHhmOSwgMHhiNSwgMHg2ZiwgMHgxYiwKLTB4YmUsIDB4ZmQsIDB4ZWYsIDB4ZGIsIDB4ZTYsIDB4ZmQsIDB4YmYsIDB4NmYsCi0weDFiLCAweGZlLCAweDdkLCAweGJmLCAweGVmLCAweGZiLCAweGZlLCAweGZmLAotMHhiZiwgMHhmZSwgMHgxNiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmIsIDB4M2YsIDB4ZGYsIDB4ZGIsIDB4ZmMsIDB4ZmQsIDB4YmYsIDB4ZWYsCi0weGZiLCAweGZlLCAweGZkLCAweGZmLCAweGYzLCAweGZjLCAweGZkLCAweGJmLAotMHhjZiwgMHhmYiwgMHhmZSwgMHhmZiwgMHgzZiwgMHhlZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NzQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZkLCAweGZmLCAweGJmLCAweGVmLAotMHhmNywgMHhiZCwgMHhlZSwgMHhmYiwgMHhmZiwgMHhiYiwgMHhlZSwgMHhmYiwKLTB4YmUsIDB4ZmIsIDB4YmIsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZmIsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDE3LCAweGZmLCAweGZmLAotMHhmZiwgMHhmNSwgMHhmZiwgMHgzZiwgMHhmZiwgMHhmYiwgMHhmNSwgMHhmZiwKLTB4N2YsIDB4NWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGVmLCAweGZmLCAweGZmLCAweGZmLCAweGY1LCAweGZmLCAweDlmLCAweGRmLAotMHhmNywgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhiYiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmUsIDB4OWQsIDB4ZWIsIDB4ZmQsIDB4ZDcsIDB4N2UsCi0weDlmLCAweGE3LCAweGU5LCAweGZmLCAweGJmLCAweGVkLCAweGZhLCAweGZmLAotMHhiZiwgMHhlZiwgMHhmYiwgMHhmZSwgMHhmZiwgMHhiYywgMHg5ZiwgMHhmNywKLTB4ZWQsIDB4ZmIsIDB4N2YsIDB4ZmYsIDB4ZTcsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAotMHhmZCwgMHhmNywgMHhhZCwgMHhmZiwgMHg3YiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZjcsCi0weGZmLCAweDdiLCAweDdmLCAweGRmLCAweGZmLCAweDZkLCAweGZmLCAweGZmLAotMHhmZSwgMHhjZiwgMHhmNywgMHhmZiwgMHg5ZiwgMHhlNywgMHhmOSwgMHhmZSwKLTB4N2YsIDB4OWYsIDB4ZTcsIDB4ZTksIDB4YmEsIDB4N2YsIDB4OWYsIDB4ZTcsCi0weGY5LCAweGZlLCAweDdmLCAweGU3LCAweGY5LCAweGZlLCAweDdmLCAweDlmLAotMHhlNywgMHhmOSwgMHhmZSwgMHgzZiwgMHg4ZiwgMHhlNywgMHhmOSwgMHhiYywKLTB4N2YsIDB4OWYsIDB4OTksIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4NWYsCi0weGY3LCAweGZmLCAweGZmLCAweGZmLCAweGNkLCAweGYzLCAweDdjLCAweGZmLAotMHhmZiwgMHhlZiwgMHhmYiwgMHhmZiwgMHg5ZiwgMHhlZiwgMHhmYiwgMHhmZiwKLTB4ZmYsIDB4YmYsIDB4ZGYsIDB4ZGIsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZmYsCi0weGY3LCAweGVmLCAweGZmLCAweGZkLCAweDNmLCAweGRmLCAweGRmLCAweGZmLAotMHhlYiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhlYiwgMHhmYiwKLTB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdlLCAweGZmLCAweGJmLAotMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHgyNywgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4M2YsCi0weGVmLCAweGY3LCAweGZmLCAweGZmLCAweGJmLCAweGVmLCAweGVmLCAweGZmLAotMHhiZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHg3ZiwgMHg3ZiwgMHhmNywKLTB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZGUsIDB4ZmYsIDB4ZmYsIDB4ZDIsIDB4ZmYsCi0weGZmLCAweDdmLCAweGZmLCAweGY3LCAweGZmLCAweDdlLCAweDdmLCAweDlmLAotMHhmNiwgMHhmZCwgMHhmZiwgMHg3ZiwgMHhmNywgMHhmZCwgMHhmZiwgMHg3ZiwKLTB4ZjcsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZjcsIDB4ZmYsIDB4ZmQsCi0weGZiLCAweGZlLCAweGZmLCAweGZmLCAweGZiLCAweGRmLCAweGZmLCAweGZmLAotMHhkYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZCwgMHhmZiwgMHhmZiwKLTB4ZGYsIDB4ZjIsIDB4ZmQsIDB4ZmYsIDB4NmYsIDB4ZDMsIDB4ZjQsIDB4NzUsCi0weDNmLCAweGQxLCAweGY0LCAweGZkLCAweDNmLCAweDRmLCAweGQzLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHhlNywgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZDIsIDB4ZmYsIDB4YmUsIDB4YWYsIDB4YWQsIDB4ZWEsIDB4ZDgsCi0weDdlLCAweGJkLCAweDhlLCAweGU5LCAweGJhLCAweDU2LCAweDliLCAweDg2LAotMHhlMSwgMHhiYSwgMHgzMywgMHg4ZSwgMHhjMCwgMHhiOCwgMHgyYywgMHhiYiwKLTB4MGIsIDB4ZTMsIDB4ZmEsIDB4YmUsIDB4YmYsIDB4YWYsIDB4ZWIsIDB4ZmEsCi0weGZlLCAweGJmLCAweGY2LCAweDdmLCAweGZmLCAweDFmLCAweGZkLCAweGVmLAotMHg3YywgMHhmYiwgMHhmYSwgMHhmZiwgMHhmNywgMHhlYywgMHhkZCwgMHhmZSwKLTB4Y2YsIDB4YjEsIDB4ZWQsIDB4ZGYsIDB4ZjMsIDB4YjYsIDB4ZmYsIDB4YmYsCi0weGQ2LCAweGMzLCAweGZmLCAweGZmLCAweGZmLCAweDNmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZSwgMHhmZSwgMHgyNSwgMHhmZiwgMHhjZiwgMHhkZiwKLTB4ZmYsIDB4N2MsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZjcsIDB4ZjYsIDB4ZmIsCi0weGZhLCAweDc3LCAweDU0LCAweGZmLCAweGZmLCAweDdmLCAweDdmLCAweGY3LAotMHhkZiwgMHg3ZiwgMHhkMywgMHhmZiwgMHhmYiwgMHhmZiwgMHgzZiwgMHhmZSwKLTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4N2YsIDB4ZmYsIDB4YmQsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweDNiLCAweGZmLCAweGJmLAotMHhlYywgMHhmZiwgMHhmYSwgMHhmZiwgMHhmYiwgMHhlZiwgMHhmNywgMHhmZiwKLTB4YmIsIDB4YmYsIDB4ZmYsIDB4ZDcsIDB4ZWUsIDB4ZmQsIDB4ZmYsIDB4ZmQsCi0weGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGRmLCAweDNmLAotMHhmZiwgMHhmYiwgMHhmZiwgMHg3ZiwgMHhlZiwgMHg3YywgMHg4ZiwgMHhhNywKLTB4M2IsIDB4NWEsIDB4N2UsIDB4MzcsIDB4OGYsIDB4YzMsIDB4ZjEsIDB4NzcsCi0weDFmLCAweGRmLCAweGZmLCAweGYzLCAweGZmLCAweGJmLCAweGZiLCAweGNmLAotMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmOSwgMHhmZiwKLTB4MTUsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmIsIDB4ZmEsIDB4ZmQsIDB4ZjcsCi0weDllLCAweGZlLCAweGZlLCAweGRkLCAweGVmLCAweGRmLCAweGZmLCAweGZmLAotMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZSwgMHhmNiwKLTB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZDcsIDB4ZGYsIDB4ZmYsIDB4ZmYsCi0weGVmLCAweDY0LCAweGZmLCAweGJmLCAweGVmLCAweGZiLCAweGZiLCAweGYzLAotMHhmMywgMHhmYywgMHhmNywgMHhlZSwgMHhlZiwgMHhmZiwgMHg3ZSwgMHhmZSwKLTB4YjUsIDB4ZmQsIDB4NmIsIDB4ZmQsIDB4ZmYsIDB4N2QsIDB4ZTcsIDB4ZjcsCi0weGZmLCAweGNmLCAweGZmLCAweGJmLCAweGRmLCAweGZmLCAweGZmLCAweGZlLAotMHhmZiwgMHhmZiwgMHhmYywgMHgxZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwKLTB4ZWQsIDB4N2YsIDB4ZWYsIDB4ZmYsIDB4ZjIsIDB4N2QsIDB4NmIsIDB4N2YsCi0weGQzLCAweGI3LCAweGZkLCAweDdmLCAweDViLCAweGY1LCAweDNkLCAweGZmLAotMHg0YiwgMHhkYiwgMHhmNSwgMHhmNywgMHhiNywgMHhmZiwgMHhmZiwgMHhlZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OTMsIDB4N2YsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZlLCAweGRmLCAweDdmLCAweGNmLCAweGFmLCAweGZkLAotMHhmYiwgMHgyZiwgMHhlZiwgMHhiNywgMHhmZCwgMHg2ZSwgMHhkNywgMHhmZCwKLTB4ZWYsIDB4ZmYsIDB4ZmIsIDB4YmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4N2YsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGYxLCAweDdmLCAweGRmLAotMHhmZiwgMHhmZCwgMHhiZCwgMHg2YiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhhZiwKLTB4ZTcsIDB4ZmMsIDB4ZjYsIDB4M2IsIDB4OWYsIDB4MzMsIDB4ZjgsIDB4M2YsCi0weGNmLCAweGYzLCAweGI0LCAweGVmLCAweGJkLCAweDdmLCAweGZmLCAweDc3LAotMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhhZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmIsIDB4ZmYsCi0weGZlLCAweGVlLCAweGZmLCAweGY3LCAweDRkLCAweDdiLCAweGZmLCAweGRmLAotMHg5ZCwgMHhmNywgMHg3ZiwgMHhkNiwgMHg3NywgMHhmYiwgMHhkZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmUsCi0weGQxLCAweGZmLCAweGZlLCAweGFmLCAweGJmLCAweGZkLCAweGI3LCAweGZmLAotMHhkZiwgMHgzZSwgMHg1ZSwgMHg5NywgMHg3OSwgMHhmZiwgMHhmZSwgMHhkZiwKLTB4YTMsIDB4MWUsIDB4N2IsIDB4OWMsIDB4YTMsIDB4NzgsIDB4ZGIsIDB4YTcsCi0weGQ5LCAweGZmLCAweDdmLCAweGRiLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotMHhmNywgMHhiZSwgMHg5ZiwgMHhmZiwgMHhlZiwgMHhmZCwgMHhmOCwgMHhmZiwKLTB4ZjksIDB4ZmYsIDB4ZWYsIDB4ZjksIDB4N2UsIDB4ZGQsIDB4ZDcsIDB4YWYsCi0weDNmLCAweDZmLCAweGRmLCAweGZkLCAweGIzLCAweDdjLCAweGZmLCAweDNmLAotMHhmOSwgMHhkYSwgMHg3ZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZWYsIDB4ZmYsIDB4ZmUsIDB4ODcsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weDdmLCAweDdmLCAweGZkLCAweGYzLCAweGZmLCAweDVmLCAweGJmLCAweDlmLAotMHhmZiwgMHhmZCwgMHhmZiwgMHg3ZiwgMHhmNywgMHhmZiwgMHg1ZSwgMHhkZiwKLTB4ZjcsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZGYsCi0weGZmLCAweGZmLCAweGZmLCAweGJlLCAweGU0LCAweGJmLCAweGZmLCAweDM1LAotMHhjOSwgMHhmNSwgMHhmZCwgMHgxZiwgMHgzNSwgMHhjZiwgMHhmMywgMHhmZCwKLTB4ZmYsIDB4ZmYsIDB4ZmQsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsCi0weGZmLCAweGZmLCAweGZmLCAweGNmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLAotMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmMSwgMHgwYSwgMHhmZiwKLTB4ZjcsIDB4ZmYsIDB4M2YsIDB4ZmUsIDB4ZjksIDB4ZmUsIDB4YWMsIDB4ZmUsCi0weGZkLCAweGZmLCAweGZmLCAweGZmLCAweGFmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmNywgMHhmZiwgMHhmZiwKLTB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjUsIDB4Y2IsCi0weGRmLCAweDRiLCAweGQyLCAweGE2LCAweGJjLCAweGZmLCAweDNlLCAweGQ3LAotMHhmZSwgMHhmZiwgMHhmZSwgMHg3NywgMHg5ZCwgMHg3MywgMHg1ZiwgMHhkZSwKLTB4N2QsIDB4ZjUsIDB4N2QsIDB4NWYsIDB4NTcsIDB4Y2UsIDB4ZjUsIDB4ZmYsCi0weGFmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotMHhmOSwgMHg2ZiwgMHhmZCwgMHg3OSwgMHg1ZSwgMHg1NywgMHg5ZiwgMHhjZiwKLTB4ZjksIDB4ZmYsIDB4ZGYsIDB4MzcsIDB4Y2YsIDB4ZjMsIDB4ZmUsIDB4N2IsCi0weDlmLCAweGNmLCAweGZlLCAweDdmLCAweDlmLCAweGNmLCAweGZiLCAweDNlLAotMHg1ZiwgMHg5NSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZjcsIDB4YTcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weDlmLCAweGVmLCAweGZkLCAweGZlLCAweGVkLCAweGZmLCAweGZlLCAweGRlLAotMHg3ZiwgMHhjZCwgMHhmYiwgMHg3ZiwgMHhkNywgMHhkZiwgMHhmZCwgMHg3ZCwKLTB4YWQsIDB4YjcsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGM1LCAweGJmLCAweGZmLCAweDdmLCAweGRmLAotMHhmNywgMHhmYiwgMHhmZCwgMHg3ZiwgMHhiYSwgMHg3NywgMHg5ZCwgMHhhZiwKLTB4ZmYsIDB4ZWUsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmIsIDB4YmYsCi0weGVmLCAweGE5LCAweGRlLCAweDc2LCAweDNkLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkYiwgMHg5ZiwgMHhmZSwgMHhiZCwKLTB4YWYsIDB4ZWIsIDB4ZmIsIDB4ZjUsIDB4ZmYsIDB4ZmYsIDB4NGIsIDB4OGEsCi0weGY3LCAweDdkLCAweGRkLCAweDE3LCAweGZkLCAweGZmLCAweGRmLCAweGI3LAotMHhlZCwgMHhlMywgMHg3ZCwgMHgyZiwgMHgyYiwgMHg5YSwgMHhlNywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4NDcsIDB4ZmYsCi0weGQ3LCAweDg1LCAweGZkLCAweDczLCAweGZlLCAweGJmLCAweGZmLCAweGVkLAotMHhmYiwgMHg1YywgMHg3ZiwgMHg5ZiwgMHhlYiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4YTYsIDB4ZTUsIDB4N2EsIDB4NWMsCi0weGZmLCAweGZmLCAweGViLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDZjLAotMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhiNywgMHhmZiwKLTB4ZGUsIDB4ZmYsIDB4YmYsIDB4OWUsIDB4ZWIsIDB4YmIsIDB4ZWUsIDB4N2IsCi0weGJmLCAweGJiLCAweGVlLCAweGZiLCAweGJlLCAweGVmLCAweGRhLCAweDdlLAotMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZWMsIDB4OWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY5LCAweGY3LCAweGJmLCAweGFmLAotMHhlZiwgMHhkZSwgMHhmZCwgMHhlZiwgMHhlYiwgMHhkOCwgMHhmZSwgMHgzZiwKLTB4OWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZkLCAweGM5LCAweGZmLCAweDViLCAweGZlLCAweGRmLCAweGJmLAotMHhlNiwgMHhkYiwgMHhmNiwgMHg3NSwgMHhiZCwgMHg2ZiwgMHg1YiwgMHhkNiwKLTB4ZjEsIDB4YmIsIDB4ZWYsIDB4ZGUsIDB4ZmQsIDB4YmUsIDB4NmYsIDB4ZGIsCi0weGQ2LCAweDdmLCAweGJmLCAweGVmLCAweGZiLCAweGZlLCAweGZmLCAweGJmLAotMHhlZiwgMHhmYiwgMHhmZiwgMHhlYSwgMHg2ZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZjMsIDB4ZmMsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmIsCi0weGZlLCAweGZmLCAweGJmLCAweGVmLCAweGYzLCAweGZmLCAweDNmLCAweGNmLAotMHhkYiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4OGYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweDdmLCAweGVmLCAweGZiLAotMHhmZSwgMHhlZiwgMHg3YiwgMHhkZSwgMHhmYiwgMHhiYiwgMHhmYiwgMHhiZSwKLTB4ZWYsIDB4YmIsIDB4ZWYsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGM1LCAweGZmLAotMHhmZCwgMHhmZCwgMHg3ZiwgMHhkZiwgMHhmOSwgMHhiZiwgMHhmZCwgMHg5ZiwKLTB4ZGYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmIsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweDFiLCAweGRmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZSwKLTB4M2YsIDB4ZmUsIDB4ZGYsIDB4YTcsIDB4ZDksIDB4ZmYsIDB4ZjYsIDB4ZGYsCi0weGVmLCAweGU5LCAweGYyLCAweDdmLCAweGViLCAweGZiLCAweGZlLCAweGZmLAotMHhhNywgMHhmYSwgMHg3ZSwgMHhmZiwgMHhhZiwgMHhlZiwgMHhhZiwgMHhlOSwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGUzLCAweGZmLCAweGY3LCAweGY1LCAweGZmLCAweDdmLCAweDZmLAotMHhmZiwgMHg3NywgMHhmYiwgMHg3ZiwgMHhkZSwgMHhmZiwgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4YmQsCi0weDdmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmYywgMHhmZiwgMHhmYiwgMHhmOCwgMHhiZSwgMHg2ZiwKLTB4OGYsIDB4ZTMsIDB4ZjksIDB4OWUsIDB4M2YsIDB4MWIsIDB4YzcsIDB4ZjksCi0weGZlLCAweDdmLCAweDlmLCAweGU3LCAweGZlLCAweDdmLCAweDlmLCAweGU3LAotMHhmOCwgMHhmYSwgMHg2ZiwgMHg5ZiwgMHhlNywgMHhmOSwgMHhmZSwgMHg3ZiwKLTB4OWYsIDB4ZTcsIDB4ZjksIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4YzcsIDB4ZmYsCi0weGZkLCAweGZmLCAweGZmLCAweGVmLCAweGYxLCAweGZjLCAweDZiLCAweDNlLAotMHhlNywgMHhmYiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZSwgMHhmYiwKLTB4OWYsIDB4ZTcsIDB4ZjcsIDB4N2MsIDB4N2YsIDB4OWYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGUzLCAweGZmLCAweGVmLAotMHhlZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwKLTB4YjcsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZhLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmMiwgMHg3ZiwKLTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZjcsIDB4ZmYsIDB4YmYsIDB4ZGYsCi0weGZmLCAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZlLAotMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weDZmLCAweGZmLCAweGI2LCAweGZmLCAweGZlLCAweDdlLCAweGZmLCAweGY3LAotMHhmZCwgMHhmZiwgMHg3ZiwgMHhkZiwgMHhmZCwgMHhmZiwgMHg3ZiwgMHhkZiwKLTB4ZjcsIDB4ZmYsIDB4N2YsIDB4ZDcsIDB4ZjcsIDB4ZmQsIDB4ZWQsIDB4YmYsCi0weDdmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhkZCwKLTB4ZjQsIDB4N2QsIDB4ZmYsIDB4Y2YsIDB4ZGIsIDB4ZmUsIDB4ZmMsIDB4YmYsCi0weGNmLCAweGYzLCAweGZlLCAweGJmLCAweGFmLCAweGViLCAweGJjLCAweGZkLAotMHgzZiwgMHg2ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmUsIDB4YWYsIDB4ZmYsIDB4ZTksIDB4ZmEsIDB4YmUsCi0weGFmLCAweGE3LCAweDZiLCAweGI4LCAweGZlLCAweDliLCAweGE3LCAweGU5LAotMHhiYSwgMHhmZSwgMHhiZiwgMHhhYiwgMHg3OCwgMHhmZSwgMHhhZiwgMHhhNywKLTB4ZTgsIDB4YjgsIDB4YWUsIDB4YmYsIDB4YWQsIDB4ZWIsIDB4ZmEsIDB4ZmUsCi0weGJmLCAweGFmLCAweGViLCAweGZkLCAweDI3LCAweGZmLCAweGYzLCAweGZmLAotMHhmNywgMHhmNywgMHhiZiwgMHhmMywgMHhlZCwgMHhmYiwgMHhkZiwgMHg3ZiwKLTB4OWYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZTcsIDB4ZmYsIDB4YmIsIDB4M2YsCi0weGZkLCAweGZmLCAweDdlLCAweGJkLCAweGZmLCAweGY3LCAweGZiLCAweGZmLAotMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmMiwgMHg3ZiwgMHhlZSwKLTB4ZmQsIDB4ZmYsIDB4N2UsIDB4ZmUsIDB4YmEsIDB4ZWYsIDB4ZmQsIDB4ZmYsCi0weDdkLCAweDlmLCAweGVkLCAweGYxLCAweGZlLCAweGVmLCAweDdkLCAweGRmLAotMHhmZiwgMHhkZiwgMHg1NywgMHhmZCwgMHg3ZiwgMHhmYSwgMHhkZiwgMHhmZCwKLTB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZGYsIDB4ZjcsIDB4ZmYsIDB4ZmIsIDB4NTcsCi0weGZmLCAweDdmLCAweGJiLCAweGVmLCAweGZiLCAweGZlLCAweGZiLCAweGY3LAotMHhiZSwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhiYSwKLTB4N2YsIDB4NjQsIDB4YmYsIDB4ZjUsIDB4ZjcsIDB4ZmUsIDB4ZmYsIDB4YmYsCi0weGZlLCAweGZmLCAweGZjLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHg5MywgMHhmZiwgMHhmZiwgMHhkYiwgMHhkNywgMHhmNSwgMHhmZiwgMHg2ZiwKLTB4ZjIsIDB4ZDIsIDB4OWMsIDB4YWYsIDB4ZTksIDB4ZWEsIDB4ZmUsIDB4OWYsCi0weGFmLCAweGZhLCAweGZlLCAweDllLCAweGFmLCAweDZiLCAweGZlLCAweGI2LAotMHhiZiwgMHhmZSwgMHg3ZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZGYsIDB4ZjcsIDB4N2YsIDB4ZmIsIDB4ZmYsIDB4ZWYsIDB4N2YsIDB4ZmYsCi0weGZmLCAweGJmLCAweGRlLCAweGRiLCAweDc1LCAweGFlLCAweGJmLCAweGFmLAotMHg2YiwgMHg5YSwgMHg2ZiwgMHhhZSwgMHhlYiwgMHhmYSwgMHhmZSwgMHhiZSwKLTB4ZmYsIDB4ZjcsIDB4YWYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4N2YsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZlLCAweGFmLCAweGZmLCAweGZlLCAweGZmLCAweDdlLAotMHhmZiwgMHhmYiwgMHg0ZiwgMHhhZCwgMHg3YywgMHhmZiwgMHhmYiwgMHhlZiwKLTB4ZmYsIDB4OWYsIDB4ZWYsIDB4ZmYsIDB4OWEsIDB4M2YsIDB4ZjcsIDB4M2YsCi0weGZmLCAweGUzLCAweGZiLCAweGVmLCAweGZiLCAweGZlLCAweGZmLCAweGJmLAotMHhlZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhjMSwgMHhmZiwgMHhmZSwgMHhmZiwKLTB4ZmYsIDB4MmUsIDB4ZGIsIDB4ZjYsIDB4ZmIsIDB4ZmUsIDB4NWMsIDB4ZDMsCi0weGY1LCAweGJmLCAweGZiLCAweDdmLCAweGZmLCAweGY0LCAweGZlLCAweGZiLAotMHhkNiwgMHhmNywgMHg3ZCwgMHg3ZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmMsIDB4YjcsIDB4ZmYsCi0weGY3LCAweGY5LCAweGVmLCAweDdiLCAweGZmLCAweGI1LCAweGZlLCAweGRmLAotMHhmZiwgMHhlZCwgMHhkZiwgMHhmYywgMHhmYiwgMHhjZiwgMHhiZSwgMHhiZCwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmQsIDB4ZjksIDB4N2YsIDB4ZmYsIDB4ZGYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGY3LCAweGZmLCAweDU3LAotMHhmZCwgMHhjZiwgMHhmMywgMHg0OCwgMHhmMywgMHgyZCwgMHhjZCwgMHhmMywKLTB4ZmYsIDB4YmYsIDB4NGYsIDB4Y2YsIDB4ZWYsIDB4ZTgsIDB4ZjcsIDB4ZmYsCi0weDViLCAweGZmLCAweGJmLCAweGFmLCAweGVmLCAweDdhLCAweGRmLCAweGZmLAotMHgzZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwKLTB4ZTYsIDB4ZWYsIDB4N2QsIDB4YmYsIDB4N2YsIDB4ZGYsIDB4OTcsIDB4ZTUsCi0weGZkLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGRmLAotMHhmZiwgMHhkYiwgMHhiZiwgMHhmZSwgMHhmYiwgMHg4ZCwgMHhmOSwgMHhiZiwKLTB4ZmYsIDB4ZDcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweDVmLCAweGZlLCAweGI3LCAweGVmLCAweGUxLCAweGQ2LAotMHhmMywgMHhiZSwgMHhlZiwgMHhiZCwgMHhiZiwgMHgyYiwgMHg5ZSwgMHhiNywKLTB4ZTgsIDB4Y2IsIDB4N2YsIDB4ZDcsIDB4YWQsIDB4ZWIsIDB4NmYsIDB4ZmMsCi0weGZmLCAweDI1LCAweGZlLCAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZmLAotMHhmZCwgMHhmZiwgMHhmYiwgMHhkOSwgMHhmZiwgMHhmZSwgMHg3NywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NjcsIDB4NWIsIDB4N2UsIDB4ZTcsIDB4ZDcsCi0weDNmLCAweGZlLCAweDM3LCAweGRlLCAweGZmLCAweGRmLCAweGJmLCAweGViLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YTIsIDB4N2YsIDB4ZmYsIDB4ZDcsCi0weGZmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY1LAotMHhmZiwgMHhmZiwgMHg3MywgMHhiZSwgMHhiZiwgMHhmZiwgMHhmZiwgMHhjZiwKLTB4ZjMsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweDQxLCAweGZmLAotMHhiZiwgMHgzZiwgMHhkNywgMHhmZiwgMHhmYywgMHhmMywgMHhmZiwgMHhmZiwKLTB4N2UsIDB4YzksIDB4YjMsIDB4ZmMsIDB4ZmYsIDB4ZjMsIDB4Y2MsIDB4ZmMsCi0weDRmLCAweDNmLCAweGNkLCAweDdmLCAweDNjLCAweGZmLCAweDI3LCAweGM3LAotMHhmZiwgMHgyYywgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmMSwgMHhmZiwgMHg2NSwKLTB4YWYsIDB4OTcsIDB4ZmYsIDB4ZmEsIDB4ZmYsIDB4ZmYsIDB4OTcsIDB4N2YsCi0weGZmLCAweGZmLCAweGMzLCAweDM3LCAweDNlLCAweGNmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmMywgMHhmZiwgMHhmNSwgMHg5ZiwgMHhlNywgMHhkYSwgMHgzZiwKLTB4ZmYsIDB4ZjMsIDB4OGQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCi0weDU5LCAweDM1LCAweGZlLCAweGZmLCAweGZmLCAweDNmLCAweGZmLCAweGYzLAotMHhmOSwgMHhlZiwgMHhmZiwgMHg3YSwgMHhkMiwgMHhiZCwgMHg2ZiwgMHg1ZiwKLTB4Y2YsIDB4OWYsIDB4ZTEsIDB4ZmUsIDB4ZmYsIDB4ZjIsIDB4ZDksIDB4ZWYsCi0weGZlLCAweDdmLCAweGJmLCAweGJmLCAweGJiLCAweGZmLCAweGZmLCAweGZmLAotMHhmOSwgMHhlZiwgMHgzNiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhjZiwgMHhmZiwKLTB4ZmUsIDB4ZmYsIDB4M2QsIDB4ZWQsIDB4ZmYsIDB4NWYsIDB4YzcsIDB4YmQsCi0weGNkLCAweGY5LCAweGZlLCAweGYzLCAweGZmLCAweGZmLCAweGRlLCAweGRiLAotMHhiMywgMHhlZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmNywgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4OWYsIDB4N2EsIDB4M2YsIDB4ZmIsIDB4ZGYsIDB4ZjcsCi0weGI2LCAweGQ5LCAweDI2LCAweDdkLCAweDljLCAweDdmLCAweDVmLCAweGYyLAotMHg3MSwgMHhmZCwgMHg3NSwgMHhmZiwgMHhlZSwgMHhjZiwgMHhmZiwgMHhmZiwKLTB4ZWEsIDB4NWEsIDB4ZGEsIDB4NmYsIDB4NWYsIDB4ZmUsIDB4ZmUsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY5LCAweDViLCAweGZhLCAweDc3LAotMHhmZiwgMHhmNiwgMHhmZiwgMHhiZiwgMHg0ZCwgMHgzYiwgMHhmZiwgMHg3ZCwKLTB4ZDQsIDB4NzUsIDB4YmQsIDB4NjYsIDB4ZGIsIDB4ZGYsIDB4ZGQsIDB4NmYsCi0weGZmLCAweGRhLCAweDRmLCAweGRkLCAweGY3LCAweDViLCAweGZmLCAweDc3LAotMHg5ZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhhMywgMHg3ZiwKLTB4ZWYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4YWYsIDB4N2YsIDB4ZmUsIDB4ZmUsCi0weGY3LCAweGZmLCAweGViLCAweGQ3LCAweGQ1LCAweGZmLCAweGFmLCAweDdhLAotMHhmNywgMHhmZCwgMHg3ZCwgMHhlYSwgMHhmYSwgMHhmZSwgMHhmNywgMHhmZiwKLTB4ZmIsIDB4ZWIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWUsCi0weDdmLCAweGZkLCAweGRmLCAweGY3LCAweGRmLCAweGY3LCAweDc3LCAweGZmLAotMHhmZiwgMHhkZiwgMHgzNywgMHhmZCwgMHgzYSwgMHhmZSwgMHg5OSwgMHhmNSwKLTB4ZjYsIDB4NmUsIDB4N2YsIDB4ZmYsIDB4ZmQsIDB4N2YsIDB4NmUsIDB4ZjcsCi0weGZmLCAweGZkLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHgwNywgMHhmYiwgMHg3NSwgMHhmZCwgMHg3ZiwgMHg3ZiwgMHhkMywKLTB4ZjYsIDB4N2QsIDB4ZmYsIDB4ZWQsIDB4ZmIsIDB4ZjcsIDB4ZmYsIDB4YjcsCi0weDQ3LCAweGZiLCAweGRkLCAweGFmLCAweGU3LCAweGZiLCAweDc0LCAweDdkLAotMHhhNywgMHhmZiwgMHhmOSwgMHhmZiwgMHhmZiwgMHhiNywgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4OWQsIDB4YmYsIDB4OWUsIDB4N2YsIDB4OWYsIDB4ZjcsCi0weGZmLCAweGFmLCAweDdmLCAweGRmLCAweGZlLCAweDdmLCAweGVmLCAweGZmLAotMHhmOSwgMHhmZSwgMHg3ZiwgMHhhZiwgMHhmYSwgMHhmZSwgMHg3ZiwgMHhiZiwKLTB4NjcsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4OWYsIDB4ZmYsIDB4ZjksIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZlLCAweDFmLCAweGZmLCAweDlmLCAweGU3LAotMHhmOCwgMHhmZSwgMHg2ZiwgMHg4ZiwgMHg2MywgMHhkYiwgMHhmNiwgMHhmZCwKLTB4OWYsIDB4NmYsIDB4ZDksIDB4ZDYsIDB4ZTUsIDB4ZTcsIDB4YmIsIDB4ZmUsCi0weGVmLCAweDlmLCAweGU2LCAweGRiLCAweGVlLCAweGZmLCAweGJmLCAweGVmLAotMHhmYiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhmYSwgMHhlNywgMHhmZiwgMHhmZSwKLTB4ZmYsIDB4YmIsIDB4ZWYsIDB4ZmYsIDB4ZmUsIDB4NmYsIDB4YjMsIDB4ZmMsCi0weGZkLCAweGZmLCAweGNmLCAweGRiLCAweGZlLCAweGZmLCAweGJmLCAweGZiLAotMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhkYiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NmEsIDB4ZmYsCi0weGZmLCAweGJmLCAweGVkLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZkLAotMHhmZiwgMHhiZiwgMHhmZiwgMHhmYiwgMHhmZSwgMHhmZSwgMHhmZiwgMHhlZiwKLTB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotMHg1ZiwgMHhmZiwgMHhlNywgMHhmYiwgMHhiNiwgMHg3ZiwgMHg5ZiwgMHg0NywKLTB4ZjMsIDB4ZmQsIDB4ZmQsIDB4N2YsIDB4NDcsIDB4ZDcsIDB4ZmMsIDB4ZmYsCi0weDdmLCAweGIzLCAweGZkLCAweGZkLCAweGZlLCAweGU3LCAweGQxLCAweGZkLAotMHhmOSwgMHg3ZSwgMHg1ZiwgMHhkNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4YjMsIDB4ZmQsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmIsCi0weGVhLCAweGRiLCAweGJlLCAweDlmLCAweDM3LCAweGViLCAweGZiLCAweDdlLAotMHhhZiwgMHhhNywgMHhkYSwgMHhmNiwgMHg5ZiwgMHhiNywgMHg1YywgMHhmYSwKLTB4ZmUsIDB4ZGYsIDB4YTcsIDB4ZTksIDB4ZmEsIDB4N2YsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGYyLCAweDNmLCAweGRmLCAweGZmLCAweGZmLCAweGRmLAotMHhmZiwgMHg2ZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmNywgMHhmZCwgMHg3YiwKLTB4N2UsIDB4ZjcsIDB4YmQsIDB4ZmUsIDB4ZGYsIDB4ZjcsIDB4NmYsIDB4ZmYsCi0weGI3LCAweGQ3LCAweGZmLCAweGJmLCAweGZkLCAweDdmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhhZiwgMHhmZiwgMHhmNywgMHgxZiwKLTB4YTcsIDB4NzksIDB4ZmUsIDB4NzcsIDB4OGYsIDB4ZTcsIDB4ZjgsIDB4ZmUsCi0weDI3LCAweDBmLCAweGUyLCAweGY5LCAweGJlLCAweDZmLCAweGU2LCAweGU5LAotMHhmZSwgMHg3ZiwgMHg5YiwgMHhjNywgMHhmMSwgMHhmZSwgMHgyZiwgMHg5ZiwKLTB4YTcsIDB4ZjksIDB4ZmUsIDB4N2YsIDB4OWYsIDB4ZjksIDB4ZmUsIDB4ZmUsCi0weGZiLCAweGZmLCAweDdmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhkMywgMHhmYywgMHg3OSwgMHgxZiwgMHhjZiwgMHhmMSwgMHhmZiwgMHgzZiwKLTB4YzUsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4N2EsIDB4ZGUsIDB4OTMsIDB4ZmYsCi0weGZkLCAweDNmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweGJmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZWIsIDB4ZmIsIDB4ZmYsCi0weGE3LCAweGViLCAweGVmLCAweDdmLCAweGZmLCAweGVmLCAweGZmLCAweGZhLAotMHg3ZiwgMHhmZiwgMHhhZSwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4NzcsIDB4ZmYsIDB4ZmIsIDB4YmYsIDB4ZGQsIDB4ZmYsIDB4NGYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweDZmLCAweGY3LCAweGI3LCAweGZmLCAweDNmLAotMHhmZiwgMHhlZCwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmMywgMHhmZCwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGYyLCAweGQ3LCAweGZmLCAweGRmLCAweGYzLCAweGZkLCAweGU5LAotMHg3ZiwgMHhkZiwgMHhmNywgMHhmZiwgMHhlZCwgMHhmZiwgMHg3ZSwgMHhkZiwKLTB4YjUsIDB4ZmQsIDB4ZmUsIDB4ZGYsIDB4ZTYsIDB4ZmQsIDB4ZmIsIDB4ZGYsCi0weDlkLCAweGZmLCAweDdkLCAweGZmLCAweGZmLCAweGRiLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmYywgMHg0YSwgMHhmZiwgMHg0ZiwgMHhmZiwgMHhiYywKLTB4ZmQsIDB4M2YsIDB4ZWYsIDB4ZDEsIDB4ZmUsIDB4ZmMsIDB4YmYsIDB4N2YsCi0weGQzLCAweGZjLCAweGZmLCAweGZmLCAweGM4LCAweGZmLCAweGZmLCAweDlmLAotMHhjZiwgMHhkYiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhkMSwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YWIsIDB4YmYsIDB4ZGUsIDB4YmYsCi0weGE1LCAweGU5LCAweGRhLCAweGZlLCAweDhkLCAweGFiLCAweGVhLCAweGZhLAotMHhhZSwgMHg4ZCwgMHhhMywgMHhlMywgMHhmYSwgMHhmNywgMHhhZiwgMHhlOCwKLTB4ZmEsIDB4ZmMsIDB4OGQsIDB4YTcsIDB4ZWEsIDB4ZmEsIDB4ZmUsIDB4YWQsCi0weGFmLCAweGViLCAweGZhLCAweGRlLCAweGJmLCAweGYwLCAweDdmLCAweGJlLAotMHgzZSwgMHhjYiwgMHhmZiwgMHhlZCwgMHhiZCwgMHgzZiwgMHhjZSwgMHhkZiwKLTB4NzgsIDB4Y2YsIDB4MWYsIDB4ZWYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGZmLCAweDc0LCAweGRmLCAweDNmLCAweDVmLCAweGJmLCAweGRmLCAweGRiLAotMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgzZiwgMHhmZiwgMHgwNywKLTB4ZmYsIDB4ZGUsIDB4ZWYsIDB4N2YsIDB4YzcsIDB4ZmYsIDB4NGUsIDB4Y2IsCi0weGJmLCAweGVjLCAweGZmLCAweDRlLCAweGQ2LCAweGJiLCAweGY1LCAweGRmLAotMHg3ZiwgMHhmNywgMHg3NCwgMHhhZCwgMHhmZiwgMHhkZCwgMHhmZiwgMHhmZCwKLTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGE1LCAweGZmLCAweGZiLCAweGVhLCAweGZmLCAweGZmLCAweGVmLCAweGJmLAotMHhiZiwgMHhlZiwgMHhmYiwgMHhlZiwgMHhmZiwgMHgzZiwgMHhlZSwgMHhmYSwKLTB4YmIsIDB4ZTcsIDB4ZWYsIDB4ZmQsIDB4ZmUsIDB4ZTMsIDB4ZGIsIDB4NzcsCi0weGZkLCAweGJmLCAweDdmLCAweGZmLCAweDdkLCAweGY3LCAweDdkLCAweGQ1LAotMHg3ZiwgMHhmOCwgMHg5ZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhiZSwgMHhkYiwKLTB4ZmYsIDB4YmYsIDB4YWYsIDB4ZjksIDB4ZGYsIDB4N2UsIDB4OWQsIDB4ZmYsCi0weGU3LCAweGZhLCAweGZmLCAweDc3LCAweDNmLCAweGRlLCAweGRlLCAweDM3LAotMHhhZCwgMHg2NywgMHhmZiwgMHhmYywgMHg3ZiwgMHhmZSwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweGVlLCAweGRmLCAweGZlLCAweGRkLCAweGZmLCAweGZmLCAweGI2LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHg3ZSwKLTB4ZWYsIDB4ZDUsIDB4ZmYsIDB4ZjksIDB4ZmYsIDB4ZmQsIDB4N2YsIDB4ZjcsCi0weGVmLCAweGZmLCAweDdmLCAweGZmLCAweGQwLCAweDdmLCAweGZmLCAweGVmLAotMHhkNywgMHhlZCwgMHhmMywgMHhmZiwgMHhmZSwgMHhmZCwgMHhlZiwgMHhmYiwKLTB4YjAsIDB4ZGYsIDB4M2IsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4N2UsCi0weGZmLCAweGZmLCAweGVmLCAweGZhLCAweGVlLCAweGZkLCAweDdmLCAweGZmLAotMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhkZiwgMHhmZiwKLTB4N2YsIDB4ZmYsIDB4ZjMsIDB4ZWQsIDB4N2YsIDB4ZmYsIDB4ZGUsIDB4ZTMsCi0weGZjLCAweGJmLCAweGY3LCAweGZmLCAweGZmLCAweGRkLCAweDNmLCAweDU2LAotMHhlNSwgMHhmZCwgMHhiZiwgMHg0ZiwgMHhkYiwgMHhmMiwgMHhmZCwgMHhmZiwKLTB4NTYsIDB4ZGYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4MDIsCi0weGZmLCAweGZiLCAweGZmLCAweGRlLCAweGZmLCAweGZlLCAweDdmLCAweGZiLAotMHhmNiwgMHhlNywgMHhlYiwgMHhkZiwgMHhkZiwgMHhkZiwgMHhmYiwgMHhmYiwKLTB4YWYsIDB4ZmYsIDB4ZmYsIDB4ZWQsIDB4ZmUsIDB4MWUsIDB4ZWEsIDB4ZmYsCi0weDZmLCAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHg3NCwgMHg3ZiwgMHg5ZiwgMHhmZiwgMHg1ZCwgMHhmZiwgMHgzMCwgMHhmZSwKLTB4ZmUsIDB4ZmYsIDB4OGYsIDB4ZTMsIDB4ZWUsIDB4ZGQsIDB4ZmYsIDB4Y2UsCi0weGZhLCAweDc1LCAweDNmLCAweDRmLCAweGYzLCAweDdjLCAweGZmLCAweDNmLAotMHhjZiwgMHhmMywgMHhmYywgMHhmZiwgMHgzZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZjcsIDB4ZjQsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZjksCi0weGJmLCAweDVmLCAweDdmLCAweGJkLCAweGJmLCAweDdmLCAweGVmLCAweGJmLAotMHhlMywgMHg3ZiwgMHhkZCwgMHhiNywgMHhkZSwgMHhmZiwgMHhiZiwgMHhlZiwKLTB4ZmIsIDB4ZmUsIDB4ZTcsIDB4YmYsIDB4ZWYsIDB4ZmEsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGQ1LCAweGZmLCAweGVkLCAweGJmLCAweGIyLAotMHhlZCwgMHhmZiwgMHhiZiwgMHhkMywgMHg3YiwgMHgxYywgMHhhNywgMHg3ZiwKLTB4ZGQsIDB4NzcsIDB4ZGYsIDB4YmYsIDB4ZmUsIDB4NjcsIDB4OWYsIDB4YTcsCi0weGU5LCAweGZhLCAweDZhLCAweDhmLCAweGU3LCAweDM5LCAweGZhLCAweDdmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhiOCwgMHgxZiwgMHhmZiwgMHg3ZiwKLTB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZmIsIDB4YjcsIDB4Y2YsIDB4ZmIsIDB4ZmMsCi0weGZkLCAweGJmLCAweGVmLCAweGZmLCAweGZmLCAweGZiLCAweGVmLCAweDczLAotMHgzYywgMHg0ZiwgMHgzNywgMHhjNywgMHhmMywgMHg3YywgMHhkZiwgMHgzNywKLTB4Y2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4YTcsIDB4ZmYsCi0weGZkLCAweGVmLCAweDdmLCAweGZmLCAweGY3LCAweGVlLCAweGZkLCAweGZmLAotMHg3ZiwgMHhkNSwgMHhlZiwgMHhmYiwgMHg3ZCwgMHhmZiwgMHhmZiwgMHhmMywKLTB4N2UsIDB4ZjcsIDB4YmYsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmIsIDB4YmYsCi0weGVmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVhLAotMHhiNywgMHhmZiwgMHhmZiwgMHhjZCwgMHg3NywgMHg1YywgMHhjZiwgMHgyNywKLTB4Y2YsIDB4ZmYsIDB4ZmMsIDB4N2IsIDB4MWYsIDB4Y2YsIDB4ZjMsIDB4ZmQsCi0weGZlLCAweGNmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLAotMHgzZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhiZiwgMHhlZiwgMHhmYiwgMHhmZiwKLTB4ZjEsIDB4MWIsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4YWYsIDB4ZmYsIDB4YjMsCi0weGZlLCAweDdlLCAweGYzLCAweGViLCAweGZmLCAweDNmLCAweGZjLCAweGY5LAotMHg3ZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4Y2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmQsIDB4ZmYsCi0weDdmLCAweGY1LCAweGQzLCAweGZmLCAweGZmLCAweDUyLCAweGQzLCAweGZjLAotMHhmZiwgMHhmZSwgMHhjZiwgMHhiZSwgMHhiZCwgMHg3YiwgMHgzZSwgMHhjZSwKLTB4ZTYsIDB4YjUsIDB4N2QsIDB4ZmYsIDB4ZTcsIDB4NzksIDB4ZGYsIDB4MzcsCi0weDlkLCAweGU3LCAweDdkLCAweDVmLCAweDU3LCAweDlkLCAweGZlLCAweGZmLAotMHhiZiwgMHhlZiwgMHhmZSwgMHhmYSwgMHgyZCwgMHhmZiwgMHhmZiwgMHg1YywKLTB4ZGYsIDB4YjcsIDB4ZmYsIDB4ZmIsIDB4ZmMsIDB4ZGYsIDB4M2YsIDB4ZWYsCi0weGZiLCAweDdjLCAweGQ3LCAweGY3LCAweGNmLCAweGZjLCAweGZmLCAweDNmLAotMHhlZiwgMHhmMywgMHhmYywgMHhmZiwgMHgzZiwgMHhlZiwgMHhmMywgMHhmZiwKLTB4ZGYsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4ZjYsIDB4NDcsIDB4ZmYsIDB4YWYsCi0weGZmLCAweGZmLCAweGYxLCAweGRmLCAweGZmLCAweGJmLCAweGZhLCAweGRkLAotMHhkZSwgMHg3ZiwgMHg4ZiwgMHhiNiwgMHhmZCwgMHhmZiwgMHg2ZCwgMHhmZiwKLTB4ZmYsIDB4ZmMsIDB4N2YsIDB4NWYsIDB4ZDcsIDB4ZDUsIDB4ZjYsIDB4ZmYsCi0weGZmLCAweDdiLCAweGZlLCAweGZmLCAweGJmLCAweGZmLCAweGM4LCAweGJmLAotMHhmNSwgMHg3ZiwgMHhkZiwgMHhmNywgMHhmZiwgMHhlZiwgMHhmZiwgMHhkZiwKLTB4N2IsIDB4NWIsIDB4ZGYsIDB4NTEsIDB4ZGEsIDB4NTUsIDB4M2QsIDB4NGYsCi0weDNmLCAweGZmLCAweGJmLCAweGVmLCAweGZiLCAweGZlLCAweGZiLCAweGJlLAotMHhlZiwgMHhmYiwgMHhlYSwgMHg3NywgMHhkZCwgMHhmNywgMHg3ZiwgMHhkOSwKLTB4MWYsIDB4ZmUsIDB4YmYsIDB4YWYsIDB4ZWYsIDB4ZmYsIDB4ZmIsIDB4ZmYsCi0weGFmLCAweDZiLCAweGZiLCAweGZmLCAweGZmLCAweGFmLCAweDZiLCAweGZiLAotMHhmNywgMHhmZCwgMHhmNywgMHg2ZCwgMHhmYiwgMHg3ZSwgMHhkZiwgMHgzNywKLTB4ZWQsIDB4ZmIsIDB4N2UsIDB4ZGYsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmYsCi0weGZlLCAweGYzLCAweGZmLCAweGQ3LCAweDM1LCAweGZkLCAweGYzLCAweGZmLAotMHhmZiwgMHhmNSwgMHhjNSwgMHhmZiwgMHg2ZiwgMHhmZiwgMHhmNywgMHhlMSwKLTB4N2YsIDB4N2YsIDB4N2UsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGUzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweDdmLAotMHhkZiwgMHhmZiwgMHhlNCwgMHhmZiwgMHhiNywgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4YjcsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmQsIDB4YjcsIDB4ZmYsCi0weGZiLCAweDdlLCAweDdmLCAweGZmLCAweGRmLCAweGVlLCAweGZiLCAweGJlLAotMHhlZiwgMHhiYiwgMHhlZSwgMHg3YiwgMHhmZSwgMHhlNywgMHhiYiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZGYsIDB4ZjksIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGRiLAotMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmYiwgMHhmZCwgMHhiZiwgMHg2YiwKLTB4ZDgsIDB4ZjYsIDB4M2QsIDB4ZWYsIDB4ZTcsIDB4ZmYsIDB4ZjYsIDB4N2YsCi0weGVmLCAweGU3LCAweGZmLCAweGZmLCAweGZmLCAweGUwLCAweGZmLCAweGZiLAotMHhmZSwgMHhmZCwgMHhiZiwgMHhlZiwgMHg1YiwgMHhmZSwgMHhmNSwgMHhiZSwKLTB4ZTIsIDB4ZmIsIDB4ZDYsIDB4ZjksIDB4YmQsIDB4NmYsIDB4MWUsIDB4MmQsCi0weGJlLCAweDZmLCAweGRiLCAweGQ2LCAweGZmLCAweGJmLCAweDZmLCAweGRiLAotMHhmNiwgMHhmZiwgMHhiZiwgMHhlZiwgMHhmYiwgMHhmZiwgMHhlZCwgMHg2ZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4ZmYsIDB4ZmIsIDB4ZmUsIDB4ZmYsCi0weGJlLCAweGZmLCAweGJiLCAweGZlLCAweGZkLCAweGJmLCAweGVmLCAweGZmLAotMHhmYiwgMHgzZiwgMHhjZiwgMHhkYiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhjZiwKLTB4ZGYsIDB4ZjYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsCi0weGNmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZlLCAweGZmLAotMHhiZiwgMHhlZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhlZiwgMHhmYiwKLTB4ZmYsIDB4ZmYsIDB4YmUsIDB4ZWYsIDB4YmIsIDB4ZWUsIDB4ZmIsIDB4ZWUsCi0weGVmLCAweGJmLCAweGVmLCAweDdiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhjZCwgMHhmZiwgMHhmZCwgMHhmZiwgMHhmZSwgMHg3ZiwgMHhkMywKLTB4ZmQsIDB4ZmQsIDB4N2YsIDB4NWYsIDB4ZDMsIDB4ZjUsIDB4ZWQsIDB4N2YsCi0weGRmLCAweDlmLCAweGY5LCAweDNmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHg1ZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4YmYsIDB4ZmYsIDB4OWYsIDB4ZmYsIDB4ZjksCi0weGZhLCAweGZmLCAweGRkLCAweGE3LCAweDZhLCAweGZhLCAweGJmLCAweDlmLAotMHhhNywgMHhlOSwgMHhkZSwgMHg3ZiwgMHhhYiwgMHhmZSwgMHg5ZiwgMHhhZiwKLTB4ZWIsIDB4ZmEsIDB4ZmUsIDB4ZGYsIDB4YjcsIDB4ZWIsIDB4ZmIsIDB4ZTksCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweDA3LCAweGZlLCAweGY3LCAweGZmLAotMHhlZCwgMHhmZiwgMHhmZCwgMHhmZiwgMHg3NSwgMHhmZiwgMHg3ZiwgMHhkZiwKLTB4ZDcsIDB4ZmQsIDB4Y2QsIDB4NzcsIDB4NWYsIDB4ZWQsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmOCwgMHhmZiwgMHhmZSwKLTB4ZjksIDB4ZmUsIDB4NmYsIDB4OWYsIDB4ZTcsIDB4ZjgsIDB4YmUsIDB4MmYsCi0weDhmLCAweGU2LCAweGY5LCAweGZlLCAweDJmLCAweDBiLCAweGU2LCAweGZlLAotMHg3ZiwgMHg5ZiwgMHhhNywgMHhmOSwgMHhmZSwgMHg3ZiwgMHg5ZiwgMHhhNywKLTB4ZjksIDB4ZmUsIDB4N2YsIDB4OWYsIDB4ZTcsIDB4ZjksIDB4ZmUsIDB4OWYsCi0weGZmLCAweGM3LCAweGZiLCAweGY1LCAweGZmLCAweGZmLCAweGVmLCAweGYxLAotMHhmZCwgMHhmZCwgMHg3ZiwgMHg2ZiwgMHhmMSwgMHhmYywgMHhmOSwgMHhiZiwKLTB4ZjcsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZTcsIDB4ZjksIDB4ZmUsIDB4ZmYsCi0weGZmLCAweGVmLCAweGZiLCAweGY1LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmYiwgMHhmZiwgMHhmYiwgMHhmZiwgMHg3ZSwgMHhiZiwgMHhmZiwgMHhmZCwKLTB4ZmYsIDB4ZmYsIDB4YmYsIDB4YWYsIDB4ZjksIDB4ZmYsIDB4ZmUsIDB4ZGYsCi0weGU3LCAweGZhLCAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZSwgMHhiZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZjAsIDB4N2YsIDB4ZmIsIDB4N2YsIDB4ZmYsIDB4ZDcsIDB4ZmYsCi0weGZmLCAweGZmLCAweGRmLCAweGY3LCAweGZkLCAweGZkLCAweGZmLCAweGRmLAotMHhkNywgMHhiNSwgMHhmZSwgMHhkZiwgMHhmYiwgMHhmZSwgMHhkZiwgMHhmZiwKLTB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZGYsIDB4YmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweDRmLCAweGZmLCAweGU3LCAweGZkLCAweGZhLAotMHg3ZiwgMHhkZiwgMHhmNywgMHhmZCwgMHhmZSwgMHhkZiwgMHhmNywgMHhlNywKLTB4ZmQsIDB4ZmEsIDB4NzYsIDB4OWYsIDB4ZWYsIDB4N2YsIDB4ZGYsIDB4ZjMsCi0weGZkLCAweGZmLCAweDdmLCAweGRmLCAweGYzLCAweGZkLCAweGZmLCAweDdmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlNSwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4MmYsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4MjcsIDB4ZWIsCi0weGYyLCAweGZkLCAweGJmLCAweGE3LCAweGYzLCAweGZkLCAweGZmLCAweDRmLAotMHhkMywgMHhmNCwgMHhmNSwgMHgzZCwgMHg0ZiwgMHhkMywgMHhmNCwgMHhmNSwKLTB4M2QsIDB4NmYsIDB4ZGIsIDB4ZjcsIDB4ZmYsIDB4ZmIsIDB4MzcsIDB4ZjMsCi0weGViLCAweGZhLCAweDJlLCAweGI1LCAweGFmLCAweGU4LCAweGZhLCAweGZlLAotMHhiZiwgMHg4ZiwgMHg2YiwgMHhiYSwgMHhiZSwgMHhiZiwgMHhhNywgMHgzYSwKLTB4ZWUsIDB4YmIsIDB4YWUsIDB4ZWIsIDB4YmEsIDB4ZWUsIDB4OGIsIDB4YTYsCi0weGViLCAweDNhLCAweGJlLCAweGIzLCAweGFkLCAweGViLCAweGZkLCAweDI3LAotMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmNSwgMHgzZiwgMHhmZiwKLTB4ZWUsIDB4ZjMsIDB4ZmIsIDB4ZmUsIDB4ZjQsIDB4ZmYsIDB4YjYsIDB4ZmYsCi0weGJjLCAweGRmLCAweDE3LCAweGNkLCAweDNmLCAweGZmLCAweGViLCAweDE1LAotMHhmZCwgMHhmZiwgMHg3ZCwgMHhmYywgMHhmZiwgMHg3ZiwgMHhlZiwgMHhkZiwKLTB4ZWUsIDB4NmYsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4YWYsCi0weGVkLCAweGZmLCAweDdmLCAweGRmLCAweDdmLCAweGZiLCAweDdiLCAweGJlLAotMHhiZiwgMHg5ZCwgMHhmZCwgMHgyZSwgMHg2YiwgMHg5ZiwgMHhlNywgMHhmZiwKLTB4ZGUsIDB4ZGYsIDB4YmYsIDB4Y2IsIDB4YmIsIDB4N2YsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGY4LCAweDlmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLAotMHhkMywgMHhmYiwgMHg3ZSwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhlZSwKLTB4ZWYsIDB4YmIsIDB4ZjYsIDB4NTcsIDB4ZWYsIDB4ZWIsIDB4ZmIsIDB4ZmYsCi0weGZmLCAweGZkLCAweGY3LCAweGZmLCAweGZmLCAweDdmLCAweDdmLCAweGRmLAotMHhkZiwgMHhmNywgMHhmZSwgMHhlMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHg5ZSwKLTB4OWUsIDB4ZmYsIDB4ZTQsIDB4ZjgsIDB4N2EsIDB4OWYsIDB4YWYsIDB4ZjksCi0weGRlLCAweDdlLCAweDlmLCAweGZmLCAweGY4LCAweGZlLCAweGJmLCAweGFmLAotMHhjOCwgMHhmYSwgMHg5ZSwgMHhhNSwgMHhhZCwgMHhjYiwgMHhmYSwgMHhlZCwKLTB4ZmYsIDB4ZmYsIDB4YmYsIDB4NmYsIDB4ZjEsIDB4NmYsIDB4ZmYsIDB4ZjksCi0weGZkLCAweGZiLCAweGZmLCAweGNiLCAweGZmLCAweGJmLCAweGY3LCAweGQ1LAotMHhiZiwgMHhmZiwgMHhiNywgMHg1NywgMHhkZiwgMHhmZiwgMHhiZSwgMHhlYiwKLTB4ZmEsIDB4ZWUsIDB4YjksIDB4YWQsIDB4NmIsIDB4ZmEsIDB4ZGUsIDB4YmIsCi0weGFmLCAweGZkLCAweDdmLCAweGZmLCAweGZiLCAweGZlLCAweDQ3LCAweGZmLAotMHhmZiwgMHhmZiwgMHhmYSwgMHg3ZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHg5OCwKLTB4NzcsIDB4YWIsIDB4YmUsIDB4ZmIsIDB4YmYsIDB4ZmYsIDB4ZmIsIDB4YmIsCi0weGJlLCAweGZmLCAweGZiLCAweGZlLCAweGZiLCAweGZmLCAweGVmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhjOSwKLTB4N2UsIDB4ZmYsIDB4ZmYsIDB4ZWQsIDB4N2YsIDB4ZmYsIDB4ZGYsIDB4YmYsCi0weGZkLCAweDdkLCAweGZmLCAweGU3LCAweGZjLCAweGZmLCAweDZlLCAweGRiLAotMHhmNSwgMHhmZSwgMHg1ZiwgMHhmZiwgMHhmZSwgMHhmZSwgMHhmNywgMHhlZiwKLTB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NmYsCi0weGY4LCAweGJmLCAweGZiLCAweGY3LCAweGZiLCAweGVkLCAweGRmLCAweGQ3LAotMHhkZCwgMHhmZiwgMHg2ZiwgMHg3ZiwgMHgzNywgMHhiZiwgMHhlZiwgMHg3YiwKLTB4ZDYsIDB4ZWUsIDB4ZTcsIDB4ZmQsIDB4ZmYsIDB4ZGYsIDB4ZmQsIDB4N2IsCi0weDdmLCAweGY3LCAweGZmLCAweGZmLCAweDdkLCAweDdmLCAweGVmLCAweGZmLAotMHhmZiwgMHhmNywgMHgwNywgMHhmYiwgMHhjZiwgMHhmMywgMHhkNSwgMHg3ZSwKLTB4MTcsIDB4YmYsIDB4NzIsIDB4N2MsIDB4ZmYsIDB4M2QsIDB4Y2UsIDB4ZjEsCi0weGZjLCAweGVmLCAweDJiLCAweGQzLCAweDljLCAweGVmLCAweDNmLCAweGFlLAotMHg3MywgMHhmZCwgMHhmZCwgMHgzYywgMHhmZSwgMHg3ZiwgMHhmZiwgMHhlZCwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4ZGQsIDB4YmYsIDB4NzUsCi0weGZmLCAweGZkLCAweGJmLCAweGJiLCAweDdiLCAweGRmLCAweDk3LCAweDdkLAotMHhiZCwgMHg2MywgMHhkOSwgMHhlYiwgMHhmYSwgMHg3MywgMHhmNywgMHhlZCwKLTB4ZGUsIDB4ZWUsIDB4N2IsIDB4YmYsIDB4ZjcsIDB4ZjcsIDB4ZGYsIDB4ZmYsCi0weGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweDk5LCAweGZlLCAweGJlLAotMHhlZSwgMHg3ZiwgMHhmYiwgMHg3ZCwgMHhmZiwgMHhlYiwgMHhmMSwgMHhkZSwKLTB4N2EsIDB4YWUsIDB4ZDcsIDB4ZmIsIDB4ZmYsIDB4ZmEsIDB4ZjUsIDB4ZTksCi0weGViLCAweGZlLCAweDVlLCAweGZmLCAweGFlLCAweGJlLCAweGRiLCAweGVkLAotMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhjMywgMHhiZiwKLTB4NmIsIDB4N2EsIDB4ZmQsIDB4ZjYsIDB4Y2UsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGJmLCAweGU3LCAweGY5LCAweGVlLCAweGI5LCAweGJmLCAweGVmLCAweGRhLAotMHhmMywgMHgyYiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhlZiwgMHhmYiwgMHhmZiwKLTB4ZmEsIDB4ZmYsIDB4OWIsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTQsCi0weDdmLCAweGJmLCAweGZmLCAweGY3LCAweGZmLCAweGZkLCAweGZmLCAweGRmLAotMHhmZiwgMHhmNywgMHhmMywgMHhmZiwgMHg3ZiwgMHhkZiwgMHhmNywgMHhmYiwKLTB4ZmYsIDB4NzYsIDB4ZWYsIDB4ZWYsIDB4ZmYsIDB4NWYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweDZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LAotMHhmZSwgMHg4ZiwgMHg4ZCwgMHhkNSwgMHhmZCwgMHg3ZiwgMHhmZiwgMHhmZiwKLTB4YTcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsCi0weGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGVmLAotMHhmZiwgMHhiZiwgMHhmZiwgMHhkZiwgMHhmYiwgMHhmYiwgMHhiZiwgMHhlZiwKLTB4ZmQsIDB4ZmYsIDB4ZTksIDB4ZmUsIDB4ZGUsIDB4ZmYsIDB4YmYsIDB4N2YsCi0weGZkLCAweGZmLCAweDdlLCAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmOSwgMHhmZSwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmUsIDB4ZmQsIDB4OWYsIDB4ZjcsCi0weGQ5LCAweGZlLCAweGRjLCAweGVlLCAweDBmLCAweGZmLCAweGQ0LCAweGZmLAotMHhmYywgMHhmYiwgMHgzZiwgMHhjZiwgMHhiZiwgMHgzZiwgMHhmZiwgMHhmZiwKLTB4ZmMsIDB4ZjMsIDB4NWYsIDB4ZmYsIDB4MzUsIDB4ZjEsIDB4ZmMsIDB4ZmYsCi0weGZlLCAweGZmLCAweGYzLCAweGZkLCAweGZmLCAweGRmLCAweGRmLCAweGYxLAotMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmYywgMHg5NiwgMHhiZiwgMHhmZiwKLTB4YWYsIDB4ZmYsIDB4M2YsIDB4Y2IsIDB4ZmQsIDB4ZjMsIDB4ZWIsIDB4ZWYsCi0weDdjLCAweGZmLCAweGY5LCAweGNmLCAweGZmLCAweGZjLCAweGZlLCAweGZmLAotMHhiZiwgMHhmZSwgMHg5ZiwgMHhmZSwgMHhmYywgMHhmZiwgMHg3ZiwgMHhmZSwKLTB4ZjMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmQsIDB4NzgsIDB4ZjcsCi0weGZmLCAweGU2LCAweGI5LCAweGZkLCAweDVmLCAweGNiLCAweGQ0LCAweGJmLAotMHhmZSwgMHg2YiwgMHg5ZSwgMHhkMywgMHhhZCwgMHg2ZiwgMHgyZSwgMHhjZiwKLTB4OWYsIDB4YmYsIDB4ZmQsIDB4ZmIsIDB4ZjIsIDB4YmYsIDB4ZWYsIDB4ZmIsCi0weGQyLCAweGZmLCAweGE5LCAweGFlLCAweDZiLCAweGZiLCAweGZmLCAweGJmLAotMHg5YiwgMHhmZiwgMHhmYywgMHhkNywgMHhmZiwgMHhmZiwgMHhmMywgMHhkZSwKLTB4NTcsIDB4YjcsIDB4Y2QsIDB4N2IsIDB4N2UsIDB4NTcsIDB4ZjcsIDB4Y2QsCi0weGZmLCAweGNmLCAweDk3LCAweGZlLCAweGZmLCAweDNjLCAweGQ3LCAweGY3LAotMHhlZiwgMHg3ZiwgMHg1ZiwgMHhkZiwgMHhiNSwgMHhlNSwgMHg3ZiwgMHg3ZiwKLTB4ZmQsIDB4ZmIsIDB4ZTcsIDB4ZmQsIDB4ZmYsIDB4NWYsIDB4ZmQsIDB4M2UsCi0weGNmLCAweGQyLCAweGU5LCAweGY3LCAweGJmLCAweDBmLCAweDUyLCAweGZjLAotMHhmNywgMHhlZiwgMHg1YiwgMHgzZiwgMHg5ZiwgMHg3MywgMHhlZCwgMHhmZiwKLTB4ZmYsIDB4YmUsIDB4N2MsIDB4ZGYsIDB4ZmUsIDB4ZjksIDB4ZmYsIDB4ZmYsCi0weGVmLCAweGZmLCAweGY2LCAweDZmLCAweGZmLCAweGZmLCAweGY3LCAweGZkLAotMHhhZCwgMHg1YiwgMHg1NiwgMHg3ZiwgMHhmZCwgMHhlNywgMHhmOSwgMHhkNiwKLTB4NTYsIDB4MWQsIDB4YTcsIDB4NmIsIDB4NzUsIDB4OWIsIDB4Y2YsIDB4ZmQsCi0weGRmLCAweGY3LCAweGRkLCAweGM3LCAweDZiLCAweGRmLCAweDc3LCAweDNkLAotMHhmZiwgMHg3ZCwgMHhkZiwgMHhmNiwgMHhjNywgMHhmZiwgMHhmZSwgMHg2YiwKLTB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZWIsIDB4ZmUsIDB4YmEsIDB4YmUsCi0weGFiLCAweGViLCAweGZhLCAweGJlLCAweGJmLCAweGViLCAweDVhLCAweGUzLAotMHhmZCwgMHhiZiwgMHg3ZiwgMHhmZSwgMHhmMSwgMHhhZCwgMHgyZiwgMHg1YiwKLTB4ZWEsIDB4ZmUsIDB4YmYsIDB4YmYsIDB4ZmYsIDB4YjEsIDB4ZmYsIDB4ZmUsCi0weGU5LCAweDFmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweDdmLCAweDdmLAotMHhkNywgMHhmNywgMHhmZCwgMHg3ZiwgMHg3ZiwgMHhkZiwgMHhmZCwgMHhiOSwKLTB4N2UsIDB4YmIsIDB4ZDYsIDB4YzcsIDB4ZmYsIDB4N2MsIDB4ZjcsIDB4YTUsCi0weGNkLCAweGZmLCAweDVmLCAweGQ3LCAweGY3LCAweGZmLCAweGY5LCAweGJmLAotMHhlZCwgMHhkZiwgMHhmNCwgMHg3ZiwgMHg5ZiwgMHhlNywgMHhmYiwgMHhmYywKLTB4N2YsIDB4M2YsIDB4Y2YsIDB4ZDMsIDB4N2UsIDB4N2QsIDB4MzcsIDB4ZWQsCi0weGY2LCAweGJkLCAweGJmLCAweDZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLAotMHg0NywgMHhmZiwgMHhmZSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4YTUsIDB4ZmUsIDB4NzksIDB4YmUsIDB4YTcsIDB4ZmYsIDB4ZmUsIDB4ZmYsCi0weGFmLCAweDdmLCAweGY4LCAweGY2LCAweGI5LCAweDlmLCAweGU3LCAweDliLAotMHhmZSwgMHhmZiwgMHhlMywgMHhmYSwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZTcsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGVlLCAweDdmLCAweGQ2LCAweDI1LCAweDlmLCAweDZmLCAweDViLAotMHhlZSwgMHhlZiwgMHhiZiwgMHhlZiwgMHg1YiwgMHhjNiwgMHgzNSwgMHhiZiwKLTB4NjIsIDB4ZmIsIDB4MzcsIDB4OWYsIDB4ZTYsIDB4NTksIDB4NzYsIDB4N2YsCi0weGJmLCAweGVmLCAweGQ4LCAweDdlLCAweGZmLCAweGJiLCAweGVmLCAweGZiLAotMHhmZSwgMHhmZiwgMHhmOCwgMHg5YiwgMHhmZiwgMHhmMywgMHhiZiwgMHhjZiwKLTB4ZmIsIDB4ZmUsIDB4ZmYsIDB4ZmMsIDB4ZWYsIDB4YmYsIDB4ZWUsIDB4ZmIsCi0weGJmLCAweGNmLCAweGJiLCAweGY2LCAweGZmLCAweGZmLCAweGZiLCAweGZkLAotMHhmZiwgMHhiZiwgMHhmZiwgMHhkYiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZjMsIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGZiLCAweGZlLCAweGZmLCAweDdmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLAotMHg3ZiwgMHhlZiwgMHhmNywgMHhmYiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZSwKLTB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweDVmLCAweGVkLAotMHgzZiwgMHhjNywgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHg1ZSwgMHhmZiwKLTB4ZjUsIDB4ZmYsIDB4M2UsIDB4NWYsIDB4ZDMsIDB4ZmQsIDB4ZmUsIDB4YzcsCi0weGQxLCAweGY0LCAweGZkLCAweDFmLCAweGZmLCAweGQ3LCAweGZlLCAweDZiLAotMHg3ZSwgMHg1ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHgyZiwKLTB4ZmYsIDB4YWIsIDB4ZWEsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZjcsIDB4ZWEsCi0weDliLCAweGJlLCAweGFiLCAweDIzLCAweDY5LCAweGYyLCAweDNlLCAweDlmLAotMHhlYiwgMHhmZSwgMHg3ZSwgMHhiZCwgMHhhZiwgMHhmZCwgMHhmMiwgMHg3ZiwKLTB4OGYsIDB4ZTcsIDB4NjksIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweGZmLCAweGY1LCAweGVkLCAweDdmLCAweGZkLCAweGZmLCAweGZmLAotMHhkZCwgMHg3ZiwgMHhmZiwgMHhmNywgMHhmZCwgMHhmZCwgMHg3ZiwgMHhkZSwKLTB4ZjcsIDB4ZmIsIDB4N2UsIDB4NzQsIDB4ZDcsIDB4ZjUsIDB4ZmYsIDB4ZmYsCi0weDVlLCAweGZkLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmMSwgMHgzZCwgMHhmZiwgMHhiZSwgMHgyNywgMHg5ZiwgMHhjNywKLTB4ZjksIDB4ZmMsIDB4MmYsIDB4OWYsIDB4YTIsIDB4ZjksIDB4YmEsIDB4NmUsCi0weDlmLCAweGM2LCAweGYxLCAweGI3LCAweDBiLCAweGUyLCAweGY4LCAweDllLAotMHg3ZSwgMHg4YiwgMHhlNiwgMHhmOSwgMHhiZSwgMHg3ZiwgMHg5ZiwgMHhlNywKLTB4ZjksIDB4ZmUsIDB4N2YsIDB4OTcsIDB4ZmIsIDB4ZDcsIDB4ZjUsIDB4ZmYsCi0weGZhLCAweGVmLCAweGRmLCAweGU1LCAweGZmLCAweDdmLCAweGRmLCAweGY3LAotMHhmNCwgMHhmZiwgMHg3YSwgMHhjZiwgMHhiZCwgMHhlOSwgMHhiZiwgMHhjZiwKLTB4ZjEsIDB4ZmMsIDB4ZmYsIDB4YmYsIDB4NGYsIDB4ZjMsIDB4ZjQsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYwLCAweGZmLCAweGZlLCAweGZmLAotMHhiZiwgMHhmZiwgMHhmZiwgMHhmYSwgMHhmZSwgMHhiZiwgMHhiZiwgMHhhZiwKLTB4ZmIsIDB4ZWIsIDB4OWUsIDB4ZmYsIDB4ZWQsIDB4ZmUsIDB4YmYsIDB4YWYsCi0weGVkLCAweGZmLCAweGZlLCAweGZhLCAweGY3LCAweGViLCAweGZlLCAweGZlLAotMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhkZiwgMHhmZiwKLTB4NWYsIDB4ZDcsIDB4ZjcsIDB4ZmQsIDB4YmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsCi0weGRmLCAweDdmLCAweGZmLCAweGQ3LCAweDdkLCAweGZmLCAweGZiLCAweGI3LAotMHhmNCwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmMywgMHhmZiwgMHhmZiwgMHgzZiwKLTB4Y2YsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YzMsCi0weGZmLCAweGViLCAweDdhLCAweDVmLCAweGJmLCAweGY3LCAweGZmLCAweGRmLAotMHhkZiwgMHhmMywgMHhiZCwgMHhmZiwgMHgzZSwgMHg3ZiwgMHhmNywgMHhmNywKLTB4ZmIsIDB4ZmUsIDB4OWYsIDB4ZjcsIDB4ZmQsIDB4ZmIsIDB4NmYsIDB4ZGYsCi0weGJkLCAweGY5LCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZSwgMHg3ZiwgMHhmNywgMHhmZiwgMHhmYiwgMHhkYiwgMHhmZiwgMHhmNywKLTB4ZmYsIDB4Y2YsIDB4ZGEsIDB4YjcsIDB4ZjUsIDB4YWIsIDB4Y2YsIDB4ZmIsCi0weGQ3LCAweGZmLCAweDc3LCAweGQzLCAweGZmLCAweGY1LCAweDNkLCAweGZmLAotMHhmZSwgMHhmMiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhmYywKLTB4YmYsIDB4ZmUsIDB4MGUsIDB4ZmEsIDB4ZmEsIDB4ZmUsIDB4YWQsIDB4YWIsCi0weGUxLCAweGZhLCAweDdlLCAweGJiLCAweGFhLCAweGViLCAweGJhLCAweGZlLAotMHgxZiwgMHgyMiwgMHhlOSwgMHg1ZSwgMHgzZCwgMHhhYiwgMHhlYiwgMHhmYSwKLTB4ZGUsIDB4YmYsIDB4YWMsIDB4ZWIsIDB4ZjgsIDB4ZGUsIDB4YmYsIDB4YWIsCi0weGViLCAweGZhLCAweGRmLCAweDcxLCAweGJlLCAweGZmLCAweGRmLCAweGY3LAotMHg3YywgMHg3MSwgMHhmYywgMHhkYiwgMHhmZCwgMHg3ZiwgMHhmZiwgMHg2NCwKLTB4ZmYsIDB4ZGYsIDB4NTUsIDB4ZmYsIDB4ZmUsIDB4ZmIsIDB4YzUsIDB4ZmYsCi0weDdiLCAweGZmLCAweDdmLCAweGY3LCAweGY5LCAweDdjLCAweGZmLCAweDNmLAotMHhmZiwgMHhmZiwgMHhmYiwgMHhmYiwgMHhmYiwgMHg5ZiwgMHhmZiwgMHhmYSwKLTB4N2YsIDB4ZmYsIDB4ZjUsIDB4ZmQsIDB4NzcsIDB4ZjcsIDB4ZmQsIDB4ZjcsCi0weGU2LCAweGZmLCAweDdmLCAweGZiLCAweGY3LCAweGViLCAweDczLCAweDk3LAotMHhiZiwgMHhlZCwgMHhlZSwgMHhmZiwgMHhmZiwgMHg2YiwgMHhhZSwgMHhmNywKLTB4Y2YsIDB4ZGYsIDB4NmYsIDB4ZmYsIDB4ZmYsIDB4N2UsIDB4NjcsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGY2LCAweGJmLCAweGI3LCAweGZlLCAweGZmLAotMHhmZSwgMHhmZiwgMHhiNywgMHhlZiwgMHhlZiwgMHhmNywgMHhmYiwgMHhkZiwKLTB4ZmEsIDB4ZmEsIDB4ZmYsIDB4YmYsIDB4ZmIsIDB4YmYsIDB4YmUsIDB4ZmIsCi0weGI3LCAweGVmLCAweGJmLCAweGZmLCAweGZmLCAweGJlLCAweGVmLCAweDc4LAotMHg1ZiwgMHhkZiwgMHhkMiwgMHg1ZiwgMHhmYiwgMHhlYiwgMHhkYiwgMHhkNSwKLTB4YmQsIDB4YmYsIDB4ZjksIDB4ZmEsIDB4YmUsIDB4OWUsIDB4ZWIsIDB4ZTksCi0weGVmLCAweGZmLCAweGFmLCAweGZiLCAweGZlLCAweGQ0LCAweDNkLCAweDZmLAotMHg2MSwgMHhiZiwgMHhkZiwgMHhkZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywKLTB4ZmUsIDB4NWYsIDB4ZWYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4N2YsCi0weGRmLCAweGVmLCAweGZlLCAweGY3LCAweGRiLCAweGRmLCAweGZiLCAweGZmLAotMHhmZiwgMHg3ZiwgMHhmZSwgMHhkZSwgMHhjNywgMHhmZiwgMHhmZiwgMHhkZiwKLTB4ZjcsIDB4ZGUsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGY1LCAweGZkLCAweGExLCAweGZmLCAweGYzLCAweGJjLCAweDE3LCAweDlmLAotMHhiZSwgMHhmZiwgMHhmZSwgMHhlZiwgMHhmYiwgMHg4ZSwgMHhlYiwgMHg3YSwKLTB4YmUsIDB4ZmIsIDB4YmYsIDB4ZWYsIDB4OWUsIDB4ZmYsIDB4YjUsIDB4ZWUsCi0weGVmLCAweGViLCAweGJmLCAweGVmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHg2ZiwgMHhmZCwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZjYsIDB4ZmYsIDB4ZWYsIDB4ZWQsIDB4NWYsIDB4YmUsIDB4ZmMsCi0weGJlLCAweDRmLCAweGQzLCAweGRmLCAweDdkLCAweGVmLCAweGJmLCAweGZmLAotMHhmZiwgMHhlZiwgMHhmYiwgMHg5NywgMHhmNywgMHhmNywgMHg5ZiwgMHhmZCwKLTB4OTMsIDB4ZGYsIDB4ZmYsIDB4ZmUsIDB4ZmUsIDB4ZWYsIDB4ZmYsIDB4ZWYsCi0weGZmLCAweGRmLCAweDU2LCAweGVkLCAweGZmLCAweGZkLCAweDdiLCAweGRmLAotMHhlZCwgMHhlYiwgMHg1ZCwgMHhmZiwgMHhkZCwgMHhmZiwgMHg5ZiwgMHhmZiwKLTB4ZDcsIDB4ZWYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4N2IsIDB4OWYsIDB4ZmYsCi0weGZmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweGUxLCAweGZmLAotMHhkZiwgMHhjZiwgMHhiZSwgMHhmNywgMHg4ZCwgMHhlYiwgMHg0OCwgMHhmYiwKLTB4M2YsIDB4Y2YsIDB4ZjMsIDB4OWMsIDB4ZmQsIDB4ZjcsIDB4Y2MsIDB4NjUsCi0weGZhLCAweGI3LCAweGZmLCAweGZmLCAweGY0LCAweGQ3LCAweDRmLCAweGFmLAotMHg2MywgMHhmYSwgMHhmZSwgMHgzZiwgMHhmZiwgMHhmMywgMHhmZiwgMHhmZCwKLTB4YmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmQsIDB4ZGYsIDB4N2YsCi0weGRmLCAweGI3LCAweGZkLCAweGZkLCAweDdlLCAweGY3LCAweGRmLCAweGJkLAotMHhkYSwgMHhiZiwgMHhmYiwgMHhmNywgMHhkZiwgMHhmZiwgMHg3NywgMHg3ZiwKLTB4ZmQsIDB4ZmYsIDB4NzcsIDB4ZWYsIDB4ZjcsIDB4N2YsIDB4ZmYsIDB4N2YsCi0weGZmLCAweDE1LCAweDdmLCAweGI3LCAweDc1LCAweDhiLCAweGZlLCAweDlmLAotMHhiZiwgMHg3OCwgMHhmZSwgMHhiYSwgMHgxZiwgMHhlNywgMHhmMSwgMHhiZiwKLTB4M2QsIDB4OWQsIDB4ZmQsIDB4ZmIsIDB4N2UsIDB4ZGMsIDB4YmYsIDB4NmIsCi0weGRmLCAweDc3LCAweGZkLCAweGFmLCAweDdmLCAweGY2LCAweDNmLCAweGZmLAotMHhlOSwgMHhmZiwgMHhlYSwgMHhmZiwgMHhmZCwgMHhkZCwgMHhiZiwgMHhmZSwKLTB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZjMsIDB4ZWYsIDB4ZjksIDB4ZWYsIDB4ZGYsCi0weGZmLCAweDhmLCAweGZiLCAweGZmLCAweDdlLCAweGFmLCAweDczLCAweGZmLAotMHhmZiwgMHhmNywgMHgyYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZSwKLTB4ZmYsIDB4NzcsIDB4ZmYsIDB4ZjgsIDB4MWYsIDB4ZWUsIDB4ZmYsIDB4ZWYsCi0weGZmLCAweGRkLCAweDdmLCAweGZmLCAweGRkLCAweGJkLCAweGJlLCAweGY3LAotMHg3YiwgMHhmZiwgMHg3ZiwgMHhlYywgMHhmZiwgMHhmZSwgMHhlNywgMHhkZSwKLTB4ZjcsIDB4ZmIsIDB4ZmYsIDB4ZjcsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGY1LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRhLCAweGZmLCAweGZjLAotMHhmZiwgMHhmZiwgMHhkNywgMHhmYywgMHg3YywgMHhjZiwgMHhmZiwgMHhjZiwKLTB4ZmYsIDB4NWYsIDB4ZDMsIDB4M2YsIDB4Y2YsIDB4YmYsIDB4ZmYsIDB4M2YsCi0weGNjLCAweGY3LCAweGZjLCAweDlmLCAweDNmLCAweGQ3LCAweGY2LCAweDdmLAotMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNiwgMHg2YiwKLTB4ZTcsIDB4NGYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmQsIDB4ZjMsIDB4ZjgsCi0weGZmLCAweGZmLCAweGU3LCAweGY5LCAweDNmLCAweGZjLCAweGZmLCAweGZmLAotMHhlZiwgMHhkYSwgMHhhYiwgMHg4ZSwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwKLTB4OGYsIDB4ZmYsIDB4M2YsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsCi0weDRmLCAweDc5LCAweGZmLCAweDNmLCAweDFmLCAweGZmLCAweGY3LCAweGZiLAotMHg1ZiwgMHhjYiwgMHhiNSwgMHhiOSwgMHhiZiwgMHhlYSwgMHhjZiwgMHhmNSwKLTB4ZmYsIDB4ZWIsIDB4N2EsIDB4ZmYsIDB4YmYsIDB4ZTksIDB4ZmUsIDB4Y2YsCi0weGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZiLCAweGZmLCAweGZmLCAweGZmLAotMHhmYiwgMHhkMSwgMHhiZiwgMHhmZiwgMHhjZiwgMHhmMywgMHhmZiwgMHhmZiwKLTB4YmYsIDB4ZTcsIDB4ZjMsIDB4N2UsIDB4ZGYsIDB4YjcsIDB4ZWMsIDB4ZjksCi0weGZlLCAweDdmLCAweDNkLCAweDdmLCAweDVmLCAweGZmLCAweGZmLCAweGZmLAotMHhmMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4Y2YsIDB4ZDksIDB4MTcsIDB4ZWQsIDB4ZmQsIDB4N2YsIDB4NWYsCi0weGQ3LCAweGZiLCAweGRiLCAweDZjLCAweGRkLCAweGMzLCAweGRiLCAweGI2LAotMHgyNiwgMHhkZCwgMHhmYiwgMHg2ZCwgMHhmZiwgMHhmZCwgMHhkNiwgMHhmNSwKLTB4YmYsIDB4ZjcsIDB4ZmYsIDB4ZmEsIDB4ZmYsIDB4ZjcsIDB4ZWYsIDB4Y2IsCi0weGZmLCAweGZmLCAweGY3LCAweGZlLCAweGM2LCAweGZlLCAweGJkLCAweDZkLAotMHg3YiwgMHhkZiwgMHhmNSwgMHg5ZiwgMHhlNSwgMHg2YiwgMHhiYSwgMHg3NSwKLTB4OWQsIDB4YzcsIDB4NmIsIDB4ZGYsIDB4Y2UsIDB4YmYsIDB4N2QsIDB4YjYsCi0weGY3LCAweGJkLCAweGZmLCAweGZmLCAweGRhLCAweDU3LCAweGZmLCAweGY3LAotMHg3MSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3NCwgMHhkZiwgMHhmZiwKLTB4ZGYsIDB4ZmMsIDB4N2UsIDB4N2YsIDB4ZmYsIDB4ZGIsIDB4ZTcsIDB4YWYsCi0weGVhLCAweDlhLCAweGJhLCAweGI3LCAweGVmLCAweGZmLCAweGZlLCAweGI5LAotMHhhZiwgMHg1YiwgMHhjZSwgMHhkZiwgMHhmNywgMHhmZiwgMHg0YiwgMHg1NywKLTB4OWYsIDB4YmUsIDB4YWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZGYsCi0weGZmLCAweGZmLCAweGZmLCAweGJmLCAweGZkLCAweGZmLCAweGZmLCAweGY3LAotMHhmNywgMHhmZCwgMHhmYSwgMHg3ZiwgMHhkMywgMHhmZSwgMHhmZiwgMHhiZiwKLTB4OTcsIDB4YjUsIDB4Y2YsIDB4ZjgsIDB4ZmMsIDB4ZmIsIDB4ZjcsIDB4ZTksCi0weDdiLCAweGZjLCAweGRmLCAweGY1LCAweGZmLCAweGZmLCAweGY3LCAweGZmLAotMHhlOSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlOSwgMHhmZiwgMHhmZCwgMHhmZiwKLTB4YmYsIDB4NWYsIDB4ZGYsIDB4ZjQsIDB4ZGQsIDB4N2YsIDB4NjcsIDB4ZGIsCi0weDc2LCAweDdmLCAweGU5LCAweGRiLCAweDdlLCAweGRmLCAweGZmLCAweGU3LAotMHhmYiwgMHg3ZiwgMHhiZCwgMHgzNywgMHhmZiwgMHhmNywgMHhmZiwgMHhmZCwKLTB4N2YsIDB4ZTQsIDB4NWYsIDB4ZmIsIDB4ZmIsIDB4ZmUsIDB4N2YsIDB4ZmYsCi0weDdmLCAweGZlLCAweGU2LCAweGZkLCAweGZlLCAweDZmLCAweDliLCAweGZmLAotMHhmYiwgMHhiZiwgMHg2NywgMHhmZSwgMHhmZiwgMHhiZiwgMHhlZiwgMHhmZiwKLTB4ZmUsIDB4N2YsIDB4YmYsIDB4ZmYsIDB4OWYsIDB4ZmYsIDB4ZmMsIDB4ZmYsCi0weGZmLCAweDhmLCAweGZhLCAweGM3LCAweGZmLCAweDZmLCAweDFiLCAweGQ2LAotMHhmZCwgMHhiZiwgMHhlZiwgMHhmOCwgMHhiNiwgMHgzZCwgMHg4MSwgMHg2MiwKLTB4ZjksIDB4ZjYsIDB4NzEsIDB4OGYsIDB4ZmIsIDB4YmUsIDB4NmYsIDB4YmIsCi0weGVmLCAweGRiLCAweGZlLCAweGVmLCAweGJmLCAweGUzLCAweGZiLCAweDdlLAotMHhmZiwgMHhiZiwgMHhlNywgMHhmZiwgMHhiOSwgMHhiZiwgMHg2ZiwgMHhmYiwKLTB4ZmUsIDB4ZmQsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWMsIDB4ZmIsIDB4M2UsCi0weGVmLCAweGJmLCAweGZjLCAweGZmLCAweGZlLCAweGZiLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmMywgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiYiwKLTB4ZmYsIDB4ZjMsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4ZjksIDB4YmYsIDB4ZmIsCi0weGZlLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLAotMHhlZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCi0weGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGM3LAotMHhmZiwgMHhkNywgMHhiNSwgMHhmZCwgMHg3ZiwgMHhkZiwgMHhiYiwgMHhmNCwKLTB4ZmYsIDB4M2YsIDB4YzcsIDB4ZjMsIDB4ZjQsIDB4ZmQsIDB4MWYsIDB4NGYsCi0weGVmLCAweGZmLCAweDliLCAweGZmLCAweGJmLCAweGZmLCAweDZiLCAweGZmLAotMHhmZSwgMHhkMSwgMHhmZCwgMHhmZCwgMHg3ZiwgMHhmZiwgMHhmYiwgMHhmZiwKLTB4ZTIsIDB4ZmYsIDB4ZmEsIDB4N2UsIDB4OWYsIDB4YTcsIDB4N2MsIDB4YmYsCi0weGY2LCAweDhmLCAweDIzLCAweGU4LCAweGRhLCAweDNlLCAweGJkLCAweGFmLAotMHg2YSwgMHhmZiwgMHhkZiwgMHhiNywgMHhkZCwgMHhmZiwgMHg3NywgMHhkZiwKLTB4ZTcsIDB4ZmYsIDB4ZmEsIDB4M2UsIDB4ZGQsIDB4YWEsIDB4ZmYsIDB4ZmYsCi0weGJmLCAweGZmLCAweDlmLCAweGZmLCAweGRmLCAweGQ3LCAweGU1LCAweGZmLAotMHhmZiwgMHhmZSwgMHhkNywgMHhmZCwgMHhmZiwgMHg1ZiwgMHhkZiwgMHhmNywKLTB4ZTUsIDB4ZmYsIDB4N2YsIDB4YjcsIDB4ZWYsIDB4NWYsIDB4N2IsIDB4ZmYsCi0weGJiLCAweGZmLCAweGVmLCAweGZmLCAweGY2LCAweGI3LCAweGY1LCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHg5MywgMHhmZiwgMHhlYiwgMHhlMywgMHhlOCwKLTB4YmUsIDB4N2YsIDB4OWYsIDB4ZTIsIDB4ZjgsIDB4YmUsIDB4M2YsIDB4MGYsCi0weGU2LCAweGYwLCAweDllLCAweDJmLCAweDllLCAweGY5LCAweGZlLCAweDdmLAotMHg5ZiwgMHhlNywgMHhmOSwgMHhmZSwgMHg3ZiwgMHg5ZiwgMHhlMywgMHhmOCwKLTB4YmUsIDB4N2YsIDB4OWYsIDB4ZTcsIDB4ZjIsIDB4N2YsIDB4ZmQsIDB4N2YsCi0weDQ1LCAweGY3LCAweGZmLCAweGZmLCAweGJmLCAweGRmLCAweGZmLCAweGZkLAotMHhlYiwgMHg3ZiwgMHg0NiwgMHg5MSwgMHhmNSwgMHhmZiwgMHhlNywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4MWYsIDB4NmYsIDB4ZmIsIDB4ZmUsIDB4ZmQsIDB4N2YsCi0weGNmLCAweGY3LCAweGZmLCAweGZmLCAweDlmLCAweGZlLCAweGFmLCAweGZmLAotMHhhZiwgMHhlYiwgMHhlYSwgMHhmZiwgMHhmZiwgMHhmNywgMHhmYiwgMHhmZiwKLTB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZWIsIDB4ZmEsIDB4ZmUsIDB4YmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZiLCAweGZmLCAweDdiLCAweGRmLAotMHhhZiwgMHhlZCwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmMSwKLTB4ZmUsIDB4ZmQsIDB4ZmQsIDB4N2YsIDB4ZGYsIDB4ZmYsIDB4ZjcsIDB4ZmQsCi0weDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDVmLCAweGZmLAotMHhmYiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGY5LCAweDNmLCAweGZlLCAweDlmLCAweGE3LCAweGViLCAweGZmLCAweGRlLAotMHhkZiwgMHhhZCwgMHhmZiwgMHg3ZiwgMHhkZiwgMHhmNywgMHhmNywgMHhmOSwKLTB4ZmYsIDB4ZGYsIDB4ZTcsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZjcsCi0weGZkLCAweGJmLCAweDdmLCAweGY3LCAweGI3LCAweGZiLCAweDdmLCAweGZmLAotMHhmNywgMHhmZiwgMHg5MywgMHhmZiwgMHhkYiwgMHhmNywgMHg2ZCwgMHg5ZiwKLTB4MmYsIDB4ZDEsIDB4ZGYsIDB4ZmYsIDB4M2YsIDB4MjcsIDB4ZGIsIDB4ZmUsCi0weDNmLCAweGJmLCAweDZmLCAweGZmLCAweGJmLCAweGJmLCAweGFmLCAweGViLAotMHhmZiwgMHhmZSwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhiZiwKLTB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZTIsIDB4ZmYsIDB4ZmQsIDB4ODUsIDB4ZTksCi0weGZhLCAweGVlLCAweGJmLCAweGFkLCAweGU4LCAweGZhLCAweGVlLCAweDNmLAotMHhhZCwgMHhlOCwgMHhmYSwgMHhiNiwgMHhiZCwgMHhlYiwgMHhmYSwgMHhiZSwKLTB4MWYsIDB4YWYsIDB4ZTksIDB4ZjgsIDB4YmUsIDB4YmYsIDB4YWIsIDB4ZWIsCi0weDVhLCAweGJlLCAweGJmLCAweGFmLCAweGY0LCAweDlmLCAweGZlLCAweDVmLAotMHhlZiwgMHhmMywgMHhiZiwgMHhmZiwgMHhiZiwgMHhmZCwgMHhmYywgMHhmZiwKLTB4ZWYsIDB4MGQsIDB4ZDMsIDB4ZjQsIDB4YmQsIDB4ZjYsIDB4ZmYsIDB4ZjcsCi0weGRmLCAweGVmLCAweGZmLCAweGIzLCAweDdmLCAweGJmLCAweGY3LCAweGZmLAotMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhjNywgMHhmZiwgMHg5OSwgMHg3ZCwKLTB4N2IsIDB4ZmYsIDB4M2QsIDB4ZmIsIDB4N2EsIDB4ZGYsIDB4YWYsIDB4N2MsCi0weGZlLCAweGY5LCAweGRlLCAweGZjLCAweGZkLCAweGZmLCAweGY3LCAweDdmLAotMHhmNywgMHhlYiwgMHhmNywgMHhkZiwgMHhiZCwgMHhhZCwgMHhmZiwgMHg3ZiwKLTB4YmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZTYsCi0weDY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDVmLCAweDdmLCAweGNhLAotMHhmZCwgMHhiMiwgMHhmZiwgMHg2ZCwgMHg3ZiwgMHhmZiwgMHg4ZSwgMHhlZiwKLTB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmEsIDB4YmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweGVmLCAweGZhLCAweGZmLAotMHhmZiwgMHg0NSwgMHhmYywgMHhmZiwgMHgyZiwgMHhkYSwgMHhmZSwgMHhiZiwKLTB4MWYsIDB4ZWIsIDB4ZmUsIDB4ZmQsIDB4YjcsIDB4YWYsIDB4ZmIsIDB4ZmEsCi0weGU3LCAweGJmLCAweGZkLCAweGYwLCAweGU0LCAweGFkLCAweDgzLCAweGVmLAotMHhlOCwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4N2YsIDB4Y2QsIDB4ZmYsIDB4ZmYsIDB4N2IsIDB4YmYsIDB4ZWMsCi0weDdiLCAweGJmLCAweGZmLCAweGJmLCAweGJmLCAweGRmLCAweGZlLCAweGZmLAotMHhmZiwgMHg5ZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHg3ZiwgMHhlNywgMHhkNywKLTB4ZWYsIDB4N2YsIDB4N2YsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZjcsIDB4NzcsCi0weGZmLCAweGZmLCAweGZmLCAweGY5LCAweDlmLCAweGZmLCAweGJiLCAweGNlLAotMHhlMywgMHhmYiwgMHhhZiwgMHhlZiwgMHhiZSwgMHhmZiwgMHhlZiwgMHhmZSwKLTB4M2YsIDB4OGUsIDB4ZmYsIDB4ZmIsIDB4ZWUsIDB4ZmUsIDB4ZmYsIDB4N2UsCi0weGZmLCAweGFmLCAweGVmLCAweGZmLCAweGJlLCAweGVmLCAweGZiLCAweGZmLAotMHhmZiwgMHhmZiwgMHhkZiwgMHgzZiwgMHhmZiwgMHgxNSwgMHhmYiwgMHhlYywKLTB4MzYsIDB4ZmQsIDB4ZWUsIDB4N2YsIDB4ZGYsIDB4ZmUsIDB4ZmYsIDB4ZmYsCi0weGZiLCAweGZmLCAweGQ3LCAweGZkLCAweGVmLCAweGVmLCAweGZmLCAweDdmLAotMHhmZCwgMHg2ZCwgMHhkYiwgMHhmNiwgMHhlZiwgMHhiZiwgMHg2ZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NTcsIDB4ZWYsIDB4ZTAsIDB4ZmYsCi0weGRmLCAweGJlLCAweGY1LCAweDZlLCAweGVmLCAweDc2LCAweGZmLCAweGY3LAotMHhmYiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhiZCwgMHhiYiwgMHhmZiwgMHg4YiwKLTB4ZmYsIDB4ZmQsIDB4NmQsIDB4ZjYsIDB4NzYsIDB4ZGUsIDB4ZmQsIDB4ZWQsCi0weDVmLCAweGY3LCAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGRmLCAweGZjLAotMHg1ZiwgMHhmNywgMHgyMywgMHg4ZiwgMHhmMywgMHgzYiwgMHhmZCwgMHhmZiwKLTB4ZmQsIDB4ZDMsIDB4ZmYsIDB4ZmYsIDB4NWYsIDB4OGQsIDB4ZjEsIDB4YmUsCi0weGZmLCAweDRlLCAweGUxLCAweGQ5LCAweGRkLCAweDJmLCAweGNmLCAweGZiLAotMHhmNCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmMywgMHhmZiwgMHhmZiwgMHhmZiwKLTB4N2YsIDB4OTMsIDB4YjcsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZmYsCi0weGZmLCAweGRmLCAweGZmLCAweDc3LCAweGZlLCAweGZmLCAweGJhLCAweGZiLAotMHhiYSwgMHg2ZiwgMHhlOSwgMHhiZiwgMHg3ZiwgMHhiZiwgMHhmNywgMHhmZCwKLTB4ZmYsIDB4N2QsIDB4ZGYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZhLCAweDc3LCAweGZhLCAweDNmLCAweDFlLCAweGUzLAotMHgyNSwgMHhkNSwgMHg3NiwgMHhmZCwgMHhlNywgMHhlZCwgMHhmYiwgMHhiZiwKLTB4ZDcsIDB4ZmYsIDB4ZmUsIDB4ZGYsIDB4ZGYsIDB4YjcsIDB4ZmQsIDB4MzgsCi0weDc2LCAweDlmLCAweGZmLCAweGY5LCAweGZiLCAweGZmLCAweGZmLCAweDZmLAotMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhjNiwgMHhmZiwgMHhmNywgMHhiZiwKLTB4YjYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4N2UsIDB4N2UsIDB4MzMsCi0weGFlLCAweGZiLCAweGZmLCAweGZmLCAweGE3LCAweDYxLCAweGZlLCAweGZmLAotMHhmZiwgMHhhNywgMHhmMywgMHhmZSwgMHhmZiwgMHhiNywgMHhhZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4N2YsIDB4ODksIDB4ZmYsIDB4ZjcsCi0weGZmLCAweGY3LCAweDVmLCAweGZlLCAweGZkLCAweDdmLCAweGZmLCAweDVmLAotMHhmZCwgMHhmZiwgMHhmZCwgMHg1ZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwKLTB4M2YsIDB4ZGYsIDB4ZWYsIDB4ZmYsIDB4N2YsIDB4YmYsIDB4Y2UsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGRmLCAweGU4LCAweDBmLAotMHhmMiwgMHhmZiwgMHhiZiwgMHg1ZiwgMHhmYiwgMHg3ZSwgMHhkZiwgMHhiZiwKLTB4ZmYsIDB4NTcsIDB4M2UsIDB4ZGYsIDB4YmQsIDB4ZmQsIDB4ZDMsIDB4M2YsCi0weGY1LCAweDVjLCAweGZmLCAweDNlLCAweGY3LCAweGZkLCAweDVjLCAweGZiLAotMHhmZSwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmYiwgMHhmZSwgMHhkZiwgMHhmYywKLTB4ZTYsIDB4YmUsIDB4OTcsIDB4ZjMsIDB4ZTUsIDB4ZmYsIDB4MWIsIDB4Y2YsCi0weGY3LCAweGZmLCAweGZhLCAweDdmLCAweGNmLCAweGY3LCAweGZlLCAweGY5LAotMHg3NCwgMHhmZiwgMHhhYiwgMHhkZiwgMHhhZiwgMHhjZSwgMHhmMywgMHhjZiwKLTB4ZmYsIDB4M2YsIDB4ZGYsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4N2YsIDB4YzcsCi0weGZkLCAweDdjLCAweGY3LCAweGZiLCAweGZlLCAweGJjLCAweGFmLCAweDJiLAotMHhmYSwgMHhmMiwgMHhkZiwgMHhmZSwgMHg3YSwgMHhjZiwgMHhjNiwgMHg5ZiwKLTB4ZWQsIDB4ZWQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmEsIDB4ZmUsCi0weGJmLCAweGZiLCAweGViLCAweGNhLCAweDdmLCAweGZmLCAweGFmLCAweGVmLAotMHhjYSwgMHg3ZiwgMHhiZSwgMHg5YiwgMHhmZiwgMHg1YywgMHhkNywgMHgzNSwKLTB4Y2QsIDB4N2YsIDB4N2UsIDB4NTUsIDB4OWYsIDB4Y2YsIDB4N2IsIDB4ZmUsCi0weGQ1LCAweGZmLCAweGZjLCAweGZmLCAweGVmLCAweGZiLCAweGZmLCAweGZmLAotMHg1ZSwgMHg1NywgMHhmZiwgMHhlZCwgMHg3YiwgMHg1NywgMHhmZiwgMHhmNywKLTB4ZmQsIDB4ZjMsIDB4NTcsIDB4ZmQsIDB4OTMsIDB4ZmYsIDB4ZWQsIDB4MzIsCi0weDRjLCAweDkzLCAweDI3LCAweGNiLCAweGZiLCAweDZkLCAweGZmLCAweGZmLAotMHg4YiwgMHhhMiwgMHg1ZSwgMHhiZiwgMHgzMywgMHhmZiwgMHg3ZiwgMHhkZiwKLTB4ZjYsIDB4Y2IsIDB4ZjcsIDB4ZGYsIDB4ZGUsIDB4YTUsIDB4MGYsIDB4ZmYsCi0weGZlLCAweGI3LCAweGJmLCAweGViLCAweGZmLCAweGYwLCAweDZmLCAweGZkLAotMHhmZSwgMHg1ZiwgMHhkZCwgMHhlYywgMHhmNSwgMHg1YSwgMHg3ZSwgMHhiZiwKLTB4ZTcsIDB4NTEsIDB4ZGYsIDB4NGYsIDB4ZmQsIDB4ODcsIDB4N2YsIDB4ZjcsCi0weGZmLCAweGZlLCAweDc5LCAweDU4LCAweDdiLCAweGZmLCAweGY1LCAweGY5LAotMHhmZiwgMHhmZiwgMHhkZSwgMHg2NywgMHg3ZCwgMHg3NiwgMHhmNiwgMHgyNywKLTB4ZmYsIDB4YmYsIDB4YWIsIDB4ZmEsIDB4ZGEsIDB4YjcsIDB4YWUsIDB4NmYsCi0weGQ2LCAweGZiLCAweGJmLCAweGJmLCAweDZhLCAweGZhLCAweGU2LCAweGZkLAotMHhmZiwgMHhmZiwgMHhmNSwgMHhkZSwgMHhhZCwgMHhlYiwgMHhmZiwgMHhmZSwKLTB4YmUsIDB4YWQsIDB4ZmYsIDB4ZmEsIDB4ZGUsIDB4ZmYsIDB4ZWYsIDB4NWYsCi0weGI5LCAweGZmLCAweGY3LCAweDY5LCAweDVmLCAweDQ2LCAweGQzLCAweDM1LAotMHhmZCwgMHgzYiwgMHg3ZiwgMHhmNywgMHhmZCwgMHhlNSwgMHg2YSwgMHhmZiwKLTB4ZGIsIDB4ZGIsIDB4YjMsIDB4ZWUsIDB4ZmIsIDB4YjUsIDB4ZmQsIDB4N2YsCi0weGVmLCAweGQxLCAweGY1LCAweGZmLCAweGZmLCAweDdmLCAweGRmLCAweGY1LAotMHhjZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhkNywgMHhmYywgMHhkZCwgMHgyZiwKLTB4NmQsIDB4ZmIsIDB4NzYsIDB4OWYsIDB4MWYsIDB4ZWQsIDB4ZjgsIDB4ZmQsCi0weGZmLCAweGZmLCAweDZkLCAweGY3LCAweGZkLCAweDhmLCAweDdiLCAweGYzLAotMHhmZCwgMHhmZiwgMHhiNywgMHg0ZiwgMHhmMywgMHhmZiwgMHhmZiwgMHgzNywKLTB4ZmYsIDB4ZmIsIDB4N2YsIDB4ZjcsIDB4ZmUsIDB4NzksIDB4ZmYsIDB4YWYsCi0weDllLCAweGZmLCAweGZmLCAweGJlLCAweDZmLCAweGRmLCAweGZlLCAweGZmLAotMHhmZSwgMHg3ZiwgMHhmZiwgMHhmZSwgMHhlZiwgMHhlNywgMHhmZiwgMHhmZSwKLTB4ZmMsIDB4YWYsIDB4ZmYsIDB4ZmIsIDB4ZTYsIDB4YmQsIDB4YWYsIDB4ZmYsCi0weGVmLCAweGZmLCAweGZkLCAweGZmLCAweGY4LCAweDVmLCAweGZlLCAweDc1LAotMHhiYiwgMHg2NSwgMHhkOSwgMHhkNiwgMHhlZiwgMHg5OSwgMHg2ZiwgMHhkYiwKLTB4YjYsIDB4ZmYsIDB4OGYsIDB4NmYsIDB4ZjksIDB4YmYsIDB4OWYsIDB4ZTcsCi0weGZiLCAweDE2LCAweGU1LCAweGJmLCAweDZmLCAweDk5LCAweGI2LCAweGVmLAotMHhiZiwgMHhlZiwgMHhmYiwgMHhmZSwgMHhmZiwgMHhmOCwgMHg1YiwgMHhmZiwKLTB4ZmIsIDB4ZmYsIDB4NmYsIDB4YjMsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZWYsCi0weDliLCAweGZkLCAweGZmLCAweGZlLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmYiwgMHhmZiwgMHhmMywgMHhiZiwgMHg3ZiwgMHhmNywgMHhlZCwKLTB4ZmIsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4ZmYsIDB4ZjMsIDB4ZmQsIDB4YWIsCi0weGZmLCAweGZlLCAweGZmLCAweGZiLCAweGVkLCAweGZmLCAweGZmLCAweGZmLAotMHhlZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZSwgMHg1ZiwgMHhiZiwgMHgxZiwgMHhjZiwgMHhmMSwgMHhmNCwgMHhmOSwKLTB4ZmYsIDB4NDcsIDB4ZDcsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZTcsIDB4ZGYsCi0weGY0LCAweDdlLCAweDQ3LCAweGQxLCAweGY0LCAweDdkLCAweDdlLCAweDVmLAotMHhmNSwgMHhmNCwgMHg3ZCwgMHg3ZiwgMHhmZiwgMHhkNywgMHhmZiwgMHhmYiwKLTB4ZmYsIDB4ZmEsIDB4YWYsIDB4ZmQsIDB4ZTMsIDB4N2EsIDB4ZmUsIDB4YmUsCi0weGJmLCAweGI3LCAweDZhLCAweGJlLCAweGFkLCAweDlmLCAweDc3LCAweGNjLAotMHhmZSwgMHg3NiwgMHhiZiwgMHhlYiwgMHhmYSwgMHhmNCwgMHhiZiwgMHhhMiwKLTB4ZWMsIDB4ZjcsIDB4ZmUsIDB4YTksIDB4YWEsIDB4ZmYsIDB4ZGEsIDB4YmYsCi0weGZmLCAweGYyLCAweGZmLCAweGZkLCAweGZmLCAweGZkLCAweGZkLCAweDdiLAotMHhmZCwgMHhkNywgMHhmZiwgMHhmZCwgMHg1YiwgMHhkZSwgMHhmZiwgMHhmZCwKLTB4ZWIsIDB4ZmIsIDB4N2YsIDB4ZDcsIDB4YjksIDB4N2YsIDB4NTUsIDB4ZDUsCi0weDc1LCAweGZkLCAweDdmLCAweGNkLCAweGQ3LCAweDc1LCAweGZmLCAweGZmLAotMHg1ZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmOCwgMHhiZiwgMHhmZiwgMHg5ZSwKLTB4MmYsIDB4OWQsIDB4ZTIsIDB4ZjgsIDB4ZmUsIDB4MmYsIDB4OWIsIDB4ZTcsCi0weGY4LCAweGZlLCAweDM3LCAweDliLCAweGUyLCAweDY5LCAweGE3LCAweDhiLAotMHhhMiwgMHhmOCwgMHhiZSwgMHgzZiwgMHg4ZiwgMHhlMiwgMHg3OCwgMHhmZSwKLTB4N2YsIDB4OGIsIDB4ZTcsIDB4ZjksIDB4ZmUsIDB4N2YsIDB4ZTcsIDB4ZmYsCi0weGYxLCAweGZjLCAweGZmLCAweDFmLCAweGRmLCAweGY3LCAweGY1LCAweGZkLAotMHg3ZiwgMHhjZiwgMHhkMywgMHhmZSwgMHhmZCwgMHgzZiwgMHhjZCwgMHhmYywKLTB4ZmYsIDB4NzcsIDB4NGYsIDB4ZDcsIDB4ZjUsIDB4ZmYsIDB4ZmYsIDB4NWYsCi0weGQ3LCAweGZmLCAweGZkLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGUwLAotMHhmZiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhlZiwgMHhlYiwgMHhmZSwgMHhmYSwKLTB4YmYsIDB4ZWYsIDB4ZTksIDB4ZmEsIDB4N2UsIDB4ZGYsIDB4YTcsIDB4ZjksCi0weGVmLCAweGJmLCAweGVmLCAweGFiLCAweGZhLCAweGZlLCAweGZmLCAweGZmLAotMHhlYiwgMHhmYSwgMHhmZiwgMHhmZiwgMHhhZiwgMHhiZiwgMHhmZiwgMHhmZiwKLTB4ZmQsIDB4MWYsIDB4ZmYsIDB4ZGYsIDB4ZjMsIDB4ZmYsIDB4ZmQsIDB4N2YsCi0weGRmLCAweGY3LCAweGZkLCAweGZmLCAweDdmLCAweGRmLCAweGZmLCAweGY1LAotMHhmZiwgMHhmZiwgMHhiYiwgMHhmZiwgMHhmZiwgMHgzZiwgMHg1ZiwgMHhkNywKLTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weDVmLCAweGZmLCAweDkzLCAweGZmLCAweGZiLCAweDdhLCAweDVmLCAweGI3LAotMHhhZiwgMHhmZiwgMHhiYiwgMHhkZiwgMHhiNywgMHhhNywgMHhmOSwgMHhmZiwKLTB4ZGUsIDB4OWYsIDB4ZjYsIDB4ZmYsIDB4N2YsIDB4ZGIsIDB4YTcsIDB4ZmIsCi0weDdiLCAweGRmLCAweGZmLCAweGFkLCAweGVmLCAweDdmLCAweGZmLCAweGYzLAotMHhmZiwgMHhlYiwgMHg3ZiwgMHhmOCwgMHgzZiwgMHhiZSwgMHhiZiwgMHhlZiwKLTB4ZmQsIDB4ZjcsIDB4N2QsIDB4YmYsIDB4NmUsIDB4ZmYsIDB4ZjIsIDB4ZmQsCi0weDNmLCAweDZmLCAweGZiLCAweGZjLCAweGZmLCAweGY3LCAweGZmLCAweGY0LAotMHhmZCwgMHgzZiwgMHhlZiwgMHhmZiwgMHhmMiwgMHhlYywgMHhiZiwgMHhmZiwKLTB4ZDMsIDB4ZjQsIDB4ZmQsIDB4M2QsIDB4ZmUsIDB4MmYsIDB4ZmYsIDB4ZmEsCi0weDdlLCAweGJmLCAweGFmLCAweDZiLCAweGZhLCAweDdlLCAweDhmLCAweGFlLAotMHhlYiwgMHg1YSwgMHhiNiwgMHhhZiwgMHhhNywgMHhlYiwgMHg1ZSwgMHhiZiwKLTB4YWQsIDB4NmIsIDB4YmEsIDB4YmUsIDB4M2YsIDB4YWEsIDB4ZTEsIDB4M2EsCi0weGRlLCAweGJkLCAweGE3LCAweGViLCAweGQyLCAweGZmLCAweDYxLCAweGZmLAotMHhmZiwgMHhkOSwgMHg3YiwgMHhmZiwgMHhmZiwgMHg3MywgMHhmYywgMHgzZiwKLTB4ZjcsIDB4ZmYsIDB4N2YsIDB4N2QsIDB4MzcsIDB4N2YsIDB4YjMsIDB4N2YsCi0weGZiLCAweGRkLCAweGYxLCAweGZmLCAweDdkLCAweGZmLCAweGZjLCAweGZkLAotMHhkYywgMHhmZiwgMHhmZiwgMHhmZiwgMHg2ZiwgMHhiYywgMHhmZiwgMHhmYSwKLTB4MTcsIDB4ZjcsIDB4ZmUsIDB4ZmUsIDB4N2YsIDB4ZjcsIDB4ZjksIDB4ZjEsCi0weGY2LCAweGZmLCAweGY3LCAweGRmLCAweGZhLCAweGZjLCAweGRjLCAweGJiLAotMHhlYiwgMHhmZiwgMHhmYiwgMHhiYywgMHhiZCwgMHhkYiwgMHhmYywgMHhmZiwKLTB4ZjcsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZjcsIDB4ZWQsCi0weGZlLCAweGI3LCAweGZiLCAweGZhLCAweGZkLCAweGZmLCAweGZhLCAweGZiLAotMHhiZCwgMHhmMywgMHhmZiwgMHhlZiwgMHhmZSwgMHhmYywgMHhlMywgMHhmZiwKLTB4ZmYsIDB4ZGYsIDB4OWUsIDB4YmYsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGVmLCAweGZmLCAweGNmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhjZiwgMHhmZiwgMHhlNCwgMHg1ZiwgMHg5ZiwgMHhiZSwgMHgzZiwgMHhlZiwKLTB4ZjksIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4NjMsIDB4ZmUsIDB4ZGUsCi0weGFmLCAweGVmLCAweDY1LCAweGZmLCAweDlmLCAweGFmLCAweDY5LCAweGZiLAotMHhmZiwgMHhmMywgMHhlMywgMHhlYiwgMHhkYSwgMHhmNywgMHhmZiwgMHg4ZCwKLTB4ZmYsIDB4ZmIsIDB4N2YsIDB4ZmYsIDB4NWYsIDB4ZmYsIDB4ZmYsIDB4ZWYsCi0weGZmLCAweGQ2LCAweGRlLCAweGZmLCAweGJmLCAweGRmLCAweGZlLCAweGZkLAotMHg3ZiwgMHg1NywgMHhmNywgMHhmZiwgMHhlNywgMHhmZiwgMHhkZCwgMHhmNywKLTB4YmUsIDB4ZGYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4YmYsIDB4NmUsIDB4ZmYsCi0weGViLCAweDdmLCAweGZmLCAweGRmLCAweGZlLCAweGI5LCAweGZmLCAweGZmLAotMHhiZiwgMHhmYSwgMHhiZiwgMHhmZiwgMHhlZCwgMHhiZiwgMHhlZiwgMHhkNiwKLTB4ZmUsIDB4ZmYsIDB4N2UsIDB4ZTcsIDB4YmEsIDB4ZmYsIDB4ZWIsIDB4ZGUsCi0weGZiLCAweDNmLCAweGZmLCAweGJmLCAweGY2LCAweDFmLCAweGJkLCAweGZiLAotMHg3ZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYSwgMHg3ZiwKLTB4ZmIsIDB4ZmYsIDB4NmUsIDB4ZWYsIDB4ZjUsIDB4ZmQsIDB4N2YsIDB4ZmIsCi0weGZmLCAweGJlLCAweDdkLCAweGY3LCAweDJmLCAweGRmLCAweGZlLCAweGZjLAotMHhmZiwgMHhiYiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhmZiwgMHhkZiwgMHhmZiwKLTB4ZmMsIDB4ZmYsIDB4ZmYsIDB4N2IsIDB4ZmYsIDB4ZGYsIDB4YmYsIDB4ZmUsCi0weGFmLCAweGZiLCAweGZkLCAweDdiLCAweGJmLCAweGZmLCAweGY3LCAweGZmLAotMHg1ZiwgMHhmZiwgMHg5YiwgMHhmZiwgMHhiYiwgMHhlZiwgMHhmYiwgMHg1ZiwKLTB4ZWYsIDB4YmUsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4N2QsIDB4N2YsIDB4ZGUsCi0weGRkLCAweGY3LCAweGJmLCAweGJmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLAotMHhlZCwgMHhkNSwgMHg3ZiwgMHhmYiwgMHg1YywgMHhmYSwgMHgyZSwgMHhiZiwKLTB4ZWYsIDB4ZGMsIDB4OWUsIDB4M2YsIDB4Y2YsIDB4YTMsIDB4ZjMsIDB4YjYsCi0weGJlLCAweGNmLCAweDc0LCAweGY1LCAweDJmLCAweGZmLCAweGYxLCAweDU4LAotMHhmZSwgMHhmZiwgMHg3ZiwgMHhkMywgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmUsIDB4YWYsIDB4ZmIsIDB4N2YsIDB4NWYsIDB4ZjcsCi0weGZmLCAweGJmLCAweGZmLCAweGRmLCAweGY3LCAweDMzLCAweDdmLCAweDc5LAotMHhmZiwgMHhmYiwgMHhlYiwgMHg3ZSwgMHhkYiwgMHhmZCwgMHhmZiwgMHhmZiwKLTB4N2YsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4N2YsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweDEzLCAweDdhLCAweGY3LCAweGJhLAotMHhmZSwgMHg2NywgMHhkZSwgMHg3ZSwgMHhmYiwgMHhkZSwgMHhmZiwgMHhkZCwKLTB4ZTcsIDB4ZWYsIDB4Y2QsIDB4MzcsIDB4ZmUsIDB4ZjgsIDB4ZGUsIDB4ZmUsCi0weGZmLCAweGQzLCAweGViLCAweGZmLCAweGY3LCAweGZmLCAweGViLCAweGZmLAotMHhmNywgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhlZSwgMHhlZiwgMHhmZiwKLTB4N2YsIDB4ZjcsIDB4ZWYsIDB4ZmYsIDB4M2EsIDB4YmYsIDB4ZmQsIDB4ZWUsCi0weGY3LCAweDdlLCAweGVlLCAweGJmLCAweGZkLCAweGZmLCAweDdmLCAweDc3LAotMHgyZSwgMHhmZiwgMHhmZiwgMHhkZSwgMHhiZiwgMHhhYiwgMHhmZSwgMHhmZiwKLTB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4MWYsCi0weGZmLCAweDdmLCAweGZmLCAweGYzLCAweGZkLCAweGZmLCAweGZmLCAweGZmLAotMHhmYiwgMHhmZiwgMHhmZiwgMHg1ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZWYsIDB4NmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZiLCAweGZmLAotMHg4MCwgMHhmZiwgMHg1YywgMHhjYiwgMHhkZiwgMHhmNywgMHhiMywgMHhmYywKLTB4ZmIsIDB4ZGUsIDB4ZmQsIDB4MzMsIDB4MmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsCi0weGI2LCAweDdmLCAweDkzLCAweGNjLCAweGYxLCAweGVjLCAweGZiLCAweGZlLAotMHhkZiwgMHhiZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4Y2YsIDB4NmIsIDB4ZTcsIDB4ZmEsIDB4MWEsIDB4OGYsIDB4ZjcsCi0weDdmLCAweGRmLCAweDdiLCAweGRmLCAweDNmLCAweGJkLCAweGZmLCAweGZmLAotMHhkZiwgMHhmNywgMHhlYiwgMHhmZiwgMHhmZiwgMHhhZiwgMHhiZCwgMHhiZiwKLTB4ZGYsIDB4ZGYsIDB4ZjcsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGQ2LCAweDRmLCAweDdmLCAweGE5LCAweDVmLCAweGQyLAotMHhmNCwgMHhmZCwgMHg3ZiwgMHg0ZiwgMHg5YSwgMHhmZSwgMHhlZCwgMHgzZiwKLTB4NWYsIDB4OWIsIDB4ZGUsIDB4ZmYsIDB4ZmUsIDB4N2YsIDB4M2UsIDB4YWYsCi0weGJmLCAweGVmLCAweDFmLCAweGZlLCAweGY5LCAweGVmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhjZCwgMHhiZiwgMHg5NSwgMHhjZCwKLTB4ZmYsIDB4NWUsIDB4ZGYsIDB4ZmYsIDB4ZTUsIDB4NzMsIDB4NWYsIDB4ZmYsCi0weGY1LCAweGVmLCAweGZmLCAweDdmLCAweGRmLCAweGZmLCAweGZmLCAweGJlLAotMHg1NywgMHhmNywgMHhmZiwgMHg3OSwgMHhmZiwgMHhkZiwgMHg5NywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGIsIDB4M2YsIDB4ZmYsCi0weGZmLCAweGFjLCAweGRkLCAweGUzLCAweDdkLCAweGZkLCAweDM1LCAweDRmLAotMHhmYiwgMHhmZSwgMHg5MiwgMHgyZiwgMHhkYiwgMHhmYiwgMHhmZiwgMHhmZiwKLTB4ZmMsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4YjYsIDB4Y2IsIDB4ZmIsIDB4ZmUsCi0weGI3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDE2LAotMHhmZiwgMHhmZCwgMHhmNSwgMHg3ZiwgMHhmZCwgMHg2ZiwgMHg3NSwgMHhlNywKLTB4NTksIDB4ZmYsIDB4ZjcsIDB4ZDUsIDB4ZmQsIDB4NjEsIDB4ZGYsIDB4NzcsCi0weGZlLCAweGZmLCAweGZmLCAweGY3LCAweGRkLCAweGZkLCAweGU5LCAweDVmLAotMHg3NywgMHhkYywgMHhhZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4NzAsIDB4N2YsIDB4ZmEsIDB4ZGUsIDB4YmYsIDB4ZmQsIDB4ZWYsIDB4ZGYsCi0weGQyLCAweGZkLCAweDJmLCAweGVmLCAweGZhLCAweGZlLCAweGZkLCAweGFmLAotMHhlZiwgMHhmZiwgMHhkZiwgMHhmZCwgMHg2YiwgMHhmYiwgMHhmZSwgMHhmZiwKLTB4YWYsIDB4ZWYsIDB4ZmEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGY5LCAweDEzLCAweGZmLCAweDVmLCAweGQ1LCAweGZiLCAweGZmLAotMHhiOCwgMHhmYywgMHg1MSwgMHhhNSwgMHhmZiwgMHhmZiwgMHg0NywgMHhmNywKLTB4MTUsIDB4Y2QsIDB4ZmEsIDB4ZmUsIDB4ZmUsIDB4ZTEsIDB4N2YsIDB4N2YsCi0weGYzLCAweGY1LCAweGZkLCAweGZmLCAweDVmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHg5YiwgMHhmZSwgMHhkZiwgMHhmZiwgMHg0NywKLTB4ZDMsIDB4NzcsIDB4ZmYsIDB4ZmYsIDB4NDcsIDB4ZjMsIDB4N2UsIDB4ZGQsCi0weDdmLCAweDZmLCAweGZiLCAweDdmLCAweGZmLCAweGRmLCAweGRmLCAweGZmLAotMHhmZiwgMHhiNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4N2YsIDB4ZWYsIDB4ZmYsCi0weGU3LCAweGY4LCAweGJmLCAweGZmLCAweGY5LCAweGVlLCAweDdkLCAweGJmLAotMHhlNywgMHhiYiwgMHhmZSwgMHhiZiwgMHhiZiwgMHhlZiwgMHhmYiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZjksIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjksCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweDg3LCAweGZiLAotMHhlZiwgMHg1OSwgMHhmZSwgMHgzOSwgMHg5ZiwgMHg2ZiwgMHhkOSwgMHhmZSwKLTB4ZjksIDB4YmYsIDB4NjcsIDB4OWIsIDB4YmUsIDB4ZmIsIDB4YjMsIDB4N2IsCi0weGZlLCAweDdmLCAweGJmLCAweGVkLCAweGRiLCAweGY2LCAweGZmLCAweGJmLAotMHg2ZCwgMHhmYiwgMHhmZSwgMHhmZiwgMHhiZiwgMHg2ZiwgMHhmZiwgMHhhMSwKLTB4YmYsIDB4ZmYsIDB4ZmIsIDB4ZWYsIDB4ZjEsIDB4YmYsIDB4Y2YsIDB4ZjcsCi0weGZlLCAweGY5LCAweGJmLCAweDZmLCAweGYzLCAweGZlLCAweGZmLCAweGZmLAotMHhjZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmMywgMHhlNiwgMHhmZiwKLTB4ZmYsIDB4NmYsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4Y2YsIDB4ZmYsCi0weGRjLCAweDNmLCAweGZmLCAweGZlLCAweGZiLCAweGZmLCAweGRmLCAweGZiLAotMHhmZiwgMHhmZiwgMHg3ZiwgMHhkZiwgMHhmYiwgMHhmZSwgMHhmZSwgMHhmZiwKLTB4ZmYsIDB4ZmIsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZmUsIDB4ZmYsCi0weDdmLCAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLAotMHhmZiwgMHhmZiwgMHhlNSwgMHhmZiwgMHhmNywgMHhmZSwgMHg3ZiwgMHg5ZiwKLTB4Y2YsIDB4ZjcsIDB4YjQsIDB4ZWQsIDB4N2YsIDB4ZGYsIDB4ZDEsIDB4ZWMsCi0weDdmLCAweDdmLCAweDVmLCAweGU1LCAweDdiLCAweDFmLCAweGZmLCAweGQ3LAotMHhmNywgMHhmZiwgMHhmZiwgMHhmZSwgMHhkNywgMHhmZiwgMHhmZCwgMHg3ZiwKLTB4ZmYsIDB4YjcsIDB4ZmYsIDB4ZjQsIDB4ZmYsIDB4ZmUsIDB4NzcsIDB4Y2YsCi0weGZiLCAweGNiLCAweGZlLCAweDdlLCAweGFmLCAweGFhLCAweDQ5LCAweGZhLAotMHhiZiwgMHhiZiwgMHhlNywgMHhjOSwgMHhmNiwgMHg4ZiwgMHhhZiwgMHhmZiwKLTB4ZmEsIDB4N2QsIDB4Y2IsIDB4NjcsIDB4ZmYsIDB4ZmEsIDB4M2YsIDB4ZmYsCi0weGE3LCAweGZmLCAweGZiLCAweDdmLCAweGZmLCAweDFmLCAweGZmLCAweGRmLAotMHhkZiwgMHhiZiwgMHhmZiwgMHg3YiwgMHhkZiwgMHhkNywgMHhiNSwgMHhmZiwKLTB4NzcsIDB4NWUsIDB4ZmYsIDB4ZjUsIDB4ZmYsIDB4ZmYsIDB4OTUsIDB4ZmMsCi0weGZmLCAweGZmLCAweGZlLCAweGRmLCAweGZmLCAweGRmLCAweGZmLCAweDVmLAotMHhmZiwgMHhlNSwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHgwYiwgMHhmZiwKLTB4ZmIsIDB4ZTYsIDB4NzEsIDB4ZGEsIDB4MmYsIDB4OWIsIDB4ZTIsIDB4ZTgsCi0weGZlLCAweDJmLCAweDg5LCAweGU3LCAweDc4LCAweGJlLCAweDdmLCAweDlhLAotMHhlOCwgMHhiZSwgMHg3ZiwgMHg5ZiwgMHhlNywgMHhmOSwgMHhiZSwgMHg3ZiwKLTB4OGIsIDB4ZTcsIDB4ZjgsIDB4YmUsIDB4N2YsIDB4OGYsIDB4ZTcsIDB4ZjksCi0weDdmLCAweGZmLCAweDNmLCAweGVmLCAweGIzLCAweGZjLCAweDdmLCAweDFmLAotMHg0NywgMHhkNywgMHhmNCwgMHhmZCwgMHgzZiwgMHhjNywgMHhkMywgMHhmNCwKLTB4ZmYsIDB4NWQsIDB4ZjcsIDB4ZmUsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAotMHhmZSwgMHg4ZiwgMHhmZiwgMHhlNywgMHhmZiwgMHhmYSwgMHhmYSwgMHhiZiwKLTB4ZWYsIDB4ZWIsIDB4ZWEsIDB4ZmUsIDB4OWYsIDB4YWYsIDB4ZmYsIDB4ZmUsCi0weDdlLCAweDlmLCAweGVmLCAweGViLCAweGZmLCAweGZmLCAweGFmLCAweGZmLAotMHhmZSwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4YmYsIDB4ZmYsIDB4ZDQsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4YmIsIDB4ZWQsCi0weGY3LCAweGZmLCAweGZmLCAweDc3LCAweGRmLCAweGY3LCAweGZjLCAweGZmLAotMHhmZiwgMHg1ZiwgMHhmZiwgMHhmOSwgMHg3ZiwgMHhkZiwgMHhmYiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZkLCAweGZmLCAweGY4LCAweGJmLCAweGZmLCAweDlmLCAweGZkLAotMHhmZiwgMHg3YSwgMHg3ZiwgMHg5ZiwgMHhhNCwgMHhlZiwgMHg3ZSwgMHg3ZSwKLTB4OTcsIDB4ZjcsIDB4ZTksIDB4ZmYsIDB4N2YsIDB4YmQsIDB4ZWYsIDB4ZmYsCi0weDdmLCAweGZmLCAweGZkLCAweGZiLCAweGZmLCAweGZmLCAweGY3LCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHg0NywgMHhmZiwgMHhmZSwKLTB4ZjYsIDB4YmYsIDB4ZmYsIDB4Y2YsIDB4ZmMsIDB4ZjYsIDB4ZmQsIDB4ZmYsCi0weDc2LCAweGRmLCAweGY2LCAweGZkLCAweGJmLCAweDJmLCAweGZmLCAweDdmLAotMHhmZiwgMHhmZiwgMHhmZCwgMHhiZiwgMHhmZCwgMHhmZiwgMHg2ZiwgMHhjYiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmEsIDB4ZmYsCi0weGVmLCAweGFmLCAweGVhLCAweGZhLCAweGJlLCAweGJmLCAweGFlLCAweGU5LAotMHhkYSwgMHhhZSwgMHg4ZiwgMHhhZSwgMHhlYiwgMHhiMiwgMHhmNiwgMHhiZCwKLTB4ZWIsIDB4ZmEsIDB4N2UsIDB4OGYsIDB4YTcsIDB4ZWIsIDB4M2EsIDB4ZmUsCi0weDlkLCAweGFmLCAweGViLCAweGZhLCAweGZlLCAweGJmLCAweGFmLCAweGY2LAotMHgxZiwgMHhlZiwgMHhmNywgMHhjMSwgMHhmZiwgMHhmYiwgMHgxZiwgMHhjZiwKLTB4ZGIsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4OGYsIDB4ZGYsIDB4ZTcsIDB4N2YsCi0weGY2LCAweGZmLCAweDZmLCAweGZmLCAweDlmLCAweGZmLCAweGYzLCAweGZmLAotMHhkYywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmQsIDB4YzksIDB4ZmYsIDB4ZGYsIDB4ZWEsIDB4ZmQsIDB4ZjIsIDB4ZGYsCi0weGNiLCAweGZkLCAweGY3LCAweGZmLCAweGZmLCAweGQzLCAweGY3LCAweGRmLAotMHhlZSwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZCwgMHhiZiwgMHhkZSwgMHhmZiwKLTB4ZGYsIDB4ZmIsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGViLCAweDdkLCAweGZmLCAweGY3LCAweGZmLCAweDdlLAotMHhmYSwgMHhmYiwgMHhlYSwgMHhmZCwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlZiwKLTB4ZWYsIDB4YmIsIDB4ZWYsIDB4M2QsIDB4ZmYsIDB4ZmIsIDB4NmYsIDB4YmYsCi0weGZjLCAweDRmLCAweGZlLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHgyNSwgMHhiZCwgMHhmZiwgMHhhYiwKLTB4ZmUsIDB4YmQsIDB4ZGYsIDB4YTcsIDB4ZWIsIDB4YWEsIDB4ZjYsIDB4MjcsCi0weGE3LCAweGU3LCAweDc5LCAweDk3LCAweGZmLCAweGUzLCAweGQ4LCAweGY3LAotMHhmZSwgMHhiNywgMHhlYiwgMHhkZiwgMHhkZiwgMHhkZCwgMHhhZiwgMHgzZiwKLTB4ZjgsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZjUsIDB4ZmYsIDB4NWYsCi0weGY3LCAweGJkLCAweGZmLCAweGZmLCAweGY1LCAweGY3LCAweDdmLCAweGViLAotMHg2ZiwgMHhkZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmZSwKLTB4ZmYsIDB4ZmYsIDB4ZWQsIDB4ZmQsIDB4OTcsIDB4ZmYsIDB4YmYsIDB4ZWQsCi0weGZmLCAweGZmLCAweGJlLCAweGZmLCAweGZmLCAweGJmLCAweGZhLCAweDlmLAotMHhmZiwgMHgzNywgMHgzZSwgMHhlZiwgMHg2YywgMHhlZiwgMHhhZiwgMHg4NywKLTB4ZWYsIDB4YjYsIDB4N2UsIDB4ZjIsIDB4ZmYsIDB4N2YsIDB4ZmMsIDB4ZmUsCi0weDdlLCAweGVmLCAweGZlLCAweGZmLCAweGZkLCAweGVmLCAweGZmLCAweGRlLAotMHhmZSwgMHgzZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwKLTB4MTQsIDB4ZmIsIDB4OWIsIDB4NzcsIDB4ZmQsIDB4M2YsIDB4N2YsIDB4Y2YsCi0weGE3LCAweGZmLCAweGZmLCAweDNmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLAotMHg1ZiwgMHhkZSwgMHhmYiwgMHhlMywgMHhlNywgMHhmYiwgMHhmMywgMHhiZCwKLTB4YmYsIDB4M2YsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsCi0weGZmLCAweGY2LCAweGZmLCAweGZiLCAweGM3LCAweGI3LCAweGZmLCAweGZiLAotMHg3YiwgMHhmZSwgMHhlYiwgMHg3ZiwgMHhmYiwgMHhmZSwgMHhkZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZDksIDB4ZjUsIDB4N2YsIDB4ZmQsIDB4ZmYsIDB4ZmIsCi0weGFmLCAweGJmLCAweGZiLCAweGZmLCAweGZmLCAweGY3LCAweGZiLCAweGZmLAotMHhkZiwgMHhmZiwgMHhmYywgMHgxZiwgMHhmZiwgMHgzZiwgMHhmZiwgMHg3ZiwKLTB4ZjQsIDB4N2YsIDB4MzcsIDB4Y2UsIDB4ZDYsIDB4ZjcsIDB4ZjcsIDB4M2YsCi0weGNmLCAweDczLCAweGZmLCAweGY2LCAweDRmLCAweDdmLCAweGJmLCAweGZmLAotMHhmZCwgMHhjZiwgMHhiMywgMHhmYywgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZDMsIDB4ZmYsIDB4ZjYsIDB4ZTcsCi0weGJmLCAweGZmLCAweGVmLCAweGY3LCAweDNkLCAweGY2LCAweGY3LCAweDdmLAotMHhmNywgMHhmZCwgMHhlZiwgMHg3ZCwgMHhmZiwgMHhlZCwgMHhkZiwgMHhmZSwKLTB4ZmYsIDB4N2YsIDB4N2QsIDB4ZmYsIDB4N2YsIDB4ZGQsIDB4ZmYsIDB4ZjcsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY4LCAweDNiLCAweGVlLAotMHhmYiwgMHhjYywgMHhkNywgMHhmNSwgMHhmZSwgMHhiZiwgMHg5ZiwgMHhmYiwKLTB4ZmUsIDB4YzgsIDB4M2MsIDB4YmIsIDB4ZTUsIDB4ZmUsIDB4ZWIsIDB4YmUsCi0weGQ3LCAweGZmLCAweGRiLCAweGZmLCAweDliLCAweGFiLCAweGI5LCAweGVmLAotMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhlZCwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YjYsIDB4NmYsIDB4ZGYsCi0weGZhLCAweGVlLCAweGFmLCAweGVlLCAweGZmLCAweGVmLCAweGY3LCAweGZmLAotMHhmZiwgMHhmYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4N2YsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGI1LCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGFmLCAweGZiLAotMHhmZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHg1ZiwgMHhmZiwgMHg3ZiwKLTB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsCi0weGZiLCAweGZmLCAweGY3LCAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZSwgMHhmZSwgMHg4ZiwgMHhmNSwgMHhmZiwgMHhiMywgMHhlZiwgMHhmZiwKLTB4M2YsIDB4ZWYsIDB4YmUsIDB4N2MsIDB4ZmYsIDB4N2UsIDB4ZmYsIDB4ZmQsCi0weGZmLCAweDliLCAweDI3LCAweGJmLCAweGZjLCAweGZmLCAweGZmLCAweGNmLAotMHhmZiwgMHhlZiwgMHg3YiwgMHhjNywgMHhjZiwgMHhmZiwgMHhmYywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmQsIDB4NDQsIDB4YWMsIDB4ZmYsIDB4ZmYsIDB4N2MsCi0weGY5LCAweGVlLCAweDdmLCAweGY3LCAweGNmLCAweDNmLCAweDNmLCAweGRlLAotMHgzZiwgMHhmYywgMHhmOSwgMHhkZSwgMHhiNywgMHhlNiwgMHhjZiwgMHhmZSwKLTB4YmQsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmMsIDB4Y2YsIDB4ZmYsIDB4ZmYsCi0weGRmLCAweGZmLCAweGZmLCAweGZkLCAweDQ0LCAweGQ1LCAweGZmLCAweGYzLAotMHhmZiwgMHhhZiwgMHhmZiwgMHgxZiwgMHhiNSwgMHhmYywgMHhmZiwgMHhmYiwKLTB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZWUsIDB4ZmUsIDB4ZmYsIDB4ZWYsCi0weGZmLCAweGZmLCAweGY1LCAweGZkLCAweDJmLCAweDJiLCAweDllLCAweGJmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlNywgMHhiYywgMHg1YiwgMHhmOSwKLTB4ZmUsIDB4N2YsIDB4ZjUsIDB4ZTcsIDB4ZjksIDB4ZmYsIDB4ZmYsIDB4M2YsCi0weGNkLCAweGY5LCAweDVmLCAweGZmLCAweGY3LCAweGZmLCAweDdmLCAweGRmLAotMHgzNywgMHhmZiwgMHhmZiwgMHhmZSwgMHg3ZiwgMHg5NSwgMHhlNSwgMHg3YiwKLTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmQsIDB4ZjEsCi0weDdmLCAweGRmLCAweDdmLCAweDZjLCAweGJkLCAweDdmLCAweGZmLCAweDdhLAotMHhmZiwgMHhmZiwgMHgzZiwgMHhjYiwgMHhiNywgMHhkZiwgMHg5MywgMHgyZiwKLTB4ZmIsIDB4NWYsIDB4YmIsIDB4MmYsIDB4ZmYsIDB4ZmYsIDB4ZWQsIDB4ZmYsCi0weGFmLCAweDhmLCAweGI3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLAotMHhlYSwgMHg2ZCwgMHhlMywgMHhlNiwgMHhmZiwgMHhkNSwgMHhlZiwgMHg3YiwKLTB4ZmYsIDB4NWYsIDB4ZmYsIDB4ODcsIDB4NjEsIDB4ZGYsIDB4ZmYsIDB4ZGQsCi0weGU1LCAweDdiLCAweDdmLCAweGZkLCAweGU3LCAweDdmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmNSwgMHg1MSwgMHhkYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZjcsIDB4Y2QsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZGEsIDB4ZmIsCi0weGZlLCAweGJmLCAweGViLCAweGZmLCAweGY2LCAweGJkLCAweDJmLCAweGZlLAotMHhmZSwgMHhkMCwgMHhiZSwgMHhjZiwgMHhmZiwgMHhkYSwgMHhiZiwgMHhmZiwKLTB4ZmIsIDB4ZmEsIDB4ZGUsIDB4YmYsIDB4YWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGI1LCAweGJmLCAweGZkLCAweGZmLCAweGZkLAotMHg1ZSwgMHg5ZiwgMHhmNywgMHg3ZCwgMHg3ZiwgMHhmYywgMHg1NywgMHhhNSwKLTB4ZmYsIDB4ZmYsIDB4NjYsIDB4ZDcsIDB4ZmQsIDB4ZGYsIDB4ZmYsIDB4ZGYsCi0weGZmLCAweGZkLCAweGZmLCAweDVmLCAweGQ3LCAweGY1LCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmOCwgMHgxNywgMHhlNywgMHhmMywKLTB4N2YsIDB4ZmYsIDB4YjcsIDB4ZWQsIDB4ZjcsIDB4ZmMsIDB4ZGYsIDB4OWYsCi0weGU3LCAweGYxLCAweGY1LCAweGZkLCAweDI3LCAweGVkLCAweGY0LCAweDdmLAotMHg5ZiwgMHhlZCwgMHhmOSwgMHhmYywgMHg3ZiwgMHgzNywgMHhjZCwgMHhmYiwKLTB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4NzcsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGY5LCAweGZlLCAweDdiLCAweDlmLCAweDdmLAotMHhmZiwgMHhmZiwgMHhmZCwgMHhmZSwgMHg3ZiwgMHhhZiwgMHhmZSwgMHg3ZSwKLTB4YTcsIDB4ZjksIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4N2YsIDB4ZGIsIDB4ZmUsCi0weGZmLCAweDhmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGFjLAotMHg3ZiwgMHhmZSwgMHhmNSwgMHhiNSwgMHg2ZiwgMHhmYiwgMHhmZSwgMHg3ZCwKLTB4YmYsIDB4NmYsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4OGQsIDB4NjcsIDB4ZmIsCi0weDU3LCAweDlkLCAweDZmLCAweGZiLCAweDY2LCAweGU1LCAweGJmLCAweDZmLAotMHgxYiwgMHg0NiwgMHhkNSwgMHhiZiwgMHhlZiwgMHhmYiwgMHhmZSwgMHhmZiwKLTB4ZmIsIDB4OWYsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsCi0weGYxLCAweGJlLCAweDZmLCAweGZmLCAweGZlLCAweGZiLCAweGZlLCAweGVmLAotMHhmZiwgMHhmZSwgMHhiZiwgMHhlZiwgMHhmZiwgMHhmNiwgMHhmZiwgMHhiZSwKLTB4NmYsIDB4YmIsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZkLCAweDhiLCAweGZmLCAweDdmLCAweGVmLCAweGZmLCAweGZkLAotMHhmZiwgMHhmZiwgMHhkZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwKLTB4ZWYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4N2YsCi0weGJmLCAweGVmLCAweGZiLCAweGZlLCAweGZmLCAweGVmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmMywgMHg3ZiwgMHhmZiwgMHhmZiwgMHhlZiwKLTB4ZmYsIDB4YmQsIDB4ZWQsIDB4MmYsIDB4N2YsIDB4ZjksIDB4YmYsIDB4ZmYsCi0weDdmLCAweGU3LCAweGQzLCAweGZmLCAweGZlLCAweGU3LCAweGY3LCAweGZmLAotMHhmZiwgMHg3ZiwgMHhkZSwgMHhmZiwgMHhmNSwgMHhmYiwgMHg3ZiwgMHhkZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NGYsIDB4ZmYsIDB4ZjMsCi0weGZiLCAweGY3LCAweDdmLCAweGRkLCAweGFiLCAweDdhLCAweGJmLCAweGZmLAotMHhkZCwgMHhhMiwgMHg3ZSwgMHhmYSwgMHhiZiwgMHhkZiwgMHhmZSwgMHhmYSwKLTB4N2QsIDB4ZGQsIDB4MzcsIDB4NmUsIDB4YmUsIDB4YWUsIDB4YWYsIDB4YTcsCi0weGNkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGQwLCAweGZmLAotMHhmZiwgMHhlZiwgMHhmYiwgMHg3ZiwgMHhmZiwgMHgzZCwgMHhmZCwgMHg3NywKLTB4ZjcsIDB4ZmYsIDB4ZjUsIDB4ZmYsIDB4ZmYsIDB4NWYsIDB4ZDcsIDB4ZjksCi0weDdmLCAweGZlLCAweGZmLCAweGY1LCAweGVmLCAweDc3LCAweGZmLCAweGQ3LAotMHhmNSwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywKLTB4YmYsIDB4ZmUsIDB4ZmUsIDB4NmYsIDB4OWYsIDB4ZTcsIDB4ZTksIDB4YmUsCi0weDZmLCAweDlmLCAweGU3LCAweGY4LCAweGJlLCAweDc3LCAweDhmLCAweGUyLAotMHhmOSwgMHhhNywgMHg5ZiwgMHhjNywgMHhmOCwgMHhiZSwgMHgyZiwgMHg5YiwKLTB4YzIsIDB4ZjgsIDB4YmEsIDB4M2YsIDB4OWYsIDB4ZTcsIDB4ZjksIDB4ZmUsCi0weDdmLCAweDY3LCAweGZmLCAweGZmLCAweGZlLCAweDdmLCAweDlmLCAweGZkLAotMHhkNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhjZiwgMHhmNywgMHhmZSwgMHhmZCwKLTB4MWYsIDB4ZWYsIDB4ZmUsIDB4ZmYsIDB4N2UsIDB4NmYsIDB4ZjcsIDB4ZmQsCi0weGZkLCAweDdlLCAweDVmLCAweGY3LCAweGY1LCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhlZiwgMHhmOCwgMHhmZiwgMHhiZiwgMHhmZiwgMHhiZiwgMHhmZiwKLTB4ZmYsIDB4ZWEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmEsIDB4ZmYsCi0weGZmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGFmLCAweDZkLCAweGZiLAotMHhmZSwgMHhmZiwgMHhhZiwgMHhlYiwgMHhmYSwgMHhmYSwgMHhiZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4OGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweDVmLCAweGY3LCAweGY3LCAweGZmLCAweGJmLAotMHhkZiwgMHhmYiwgMHhmNSwgMHhmZCwgMHgzZiwgMHhiMywgMHhmZiwgMHhmZCwKLTB4N2YsIDB4NWYsIDB4ZjcsIDB4ZmYsIDB4ZWYsIDB4N2YsIDB4ZGQsIDB4ZjcsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDkzLCAweGJmLCAweGZkLAotMHg3ZSwgMHg3ZiwgMHhkZiwgMHhmNywgMHhlYiwgMHg3ZSwgMHhkZiwgMHhkZiwKLTB4ZjcsIDB4ZmIsIDB4N2YsIDB4ZGUsIDB4OTcsIDB4YTcsIDB4ZmIsIDB4NWYsCi0weGRkLCAweGE3LCAweGU5LCAweGZhLCAweGRmLCAweGI3LCAweGFkLCAweGVmLAotMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmMSwgMHg3ZiwKLTB4ZmQsIDB4ZmYsIDB4NGYsIDB4NzMsIDB4YjYsIDB4N2QsIDB4YWYsIDB4NmYsCi0weGQ5LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHg2NywgMHhmZCwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHg1YiwgMHhmNywKLTB4N2MsIDB4OWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWUsCi0weDJmLCAweGZmLCAweGJhLCAweGY2LCAweGJmLCAweGFmLCAweDZhLCAweGRhLAotMHhmZSwgMHgzNywgMHhhNywgMHhjYiwgMHg3MiwgMHg3ZSwgMHhiZiwgMHhhYiwKLTB4ZWIsIDB4NTYsIDB4YmYsIDB4YWUsIDB4ZWIsIDB4N2EsIDB4ZmUsIDB4YjcsCi0weDhlLCAweGViLCAweGJhLCAweGZjLCAweGJmLCAweGFmLCAweGViLCAweGZhLAotMHhmZiwgMHg0OSwgMHhmZiwgMHhmZiwgMHhkYiwgMHgzZiwgMHhmYiwgMHhkZiwKLTB4NzQsIDB4ZjgsIDB4ZGYsIDB4MzcsIDB4ZmIsIDB4M2YsIDB4ZmYsIDB4NmUsCi0weGNkLCAweGYzLCAweGZkLCAweDE2LCAweGRkLCAweGZmLCAweGZjLCAweGY3LAotMHhmZiwgMHgzNywgMHhiZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhjZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmUsIDB4OWYsIDB4ZmQsIDB4ZmYsIDB4YmYsIDB4ZmQsCi0weGZmLCAweGVmLCAweDdmLCAweGZmLCAweGJlLCAweGVkLCAweGRmLCAweGZmLAotMHg3ZiwgMHhlZiwgMHhiNSwgMHgzYiwgMHhkZiwgMHg3ZiwgMHhmZiwgMHg3ZiwKLTB4ZmYsIDB4N2QsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZkLCAweGY3LCAweDdlLCAweDY0LCAweGZmLCAweGZmLCAweGJjLAotMHhmYiwgMHhjZiwgMHhmNywgMHg2YiwgMHg2ZiwgMHhiYiwgMHhkZiwgMHhmZiwKLTB4ZmUsIDB4ZmQsIDB4YWYsIDB4NWYsIDB4YzcsIDB4OWIsIDB4ZmUsIDB4ZmUsCi0weGZiLCAweDhkLCAweGZmLCAweGZiLCAweGZhLCAweGZmLCAweGZlLCAweDdmLAotMHhmYywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZSwgMHg3ZiwgMHg3OCwKLTB4YmYsIDB4ZjcsIDB4OGYsIDB4ZTUsIDB4ZmEsIDB4ZmUsIDB4YmYsIDB4YTcsCi0weDZmLCAweGZlLCAweGZmLCAweGZmLCAweGFkLCAweGRmLCAweGZlLCAweDNjLAotMHhmZiwgMHhlMywgMHhmZiwgMHhmNywgMHhmZCwgMHhhNiwgMHhlOSwgMHhmYSwKLTB4ZmUsIDB4YmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4NWYsCi0weGZkLCAweDdmLCAweGJmLCAweGQ3LCAweGRmLCAweGY1LCAweDZmLCAweGZiLAotMHg3NSwgMHhmZiwgMHhiZiwgMHg3ZiwgMHhmZiwgMHhmNiwgMHg3ZiwgMHhmYiwKLTB4ZGYsIDB4ZWYsIDB4ZmUsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZjUsIDB4ZDcsCi0weDdkLCAweGRmLCAweGZiLCAweGJmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotMHhjOSwgMHhmZiwgMHhmZiwgMHhiYywgMHg1NywgMHgzZiwgMHhlZiwgMHhmZCwKLTB4NWEsIDB4ZjcsIDB4OWEsIDB4Y2YsIDB4N2IsIDB4YmUsIDB4N2YsIDB4ZGYsCi0weGNiLCAweGVjLCAweGZmLCAweGZmLCAweGVkLCAweGZiLCAweGFmLCAweDVmLAotMHhmZiwgMHhiZiwgMHg2ZiwgMHg3YiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmZiwKLTB4ZmYsIDB4ZmIsIDB4N2YsIDB4ZmYsIDB4OWYsIDB4N2YsIDB4ZGYsIDB4ZmYsCi0weGJmLCAweGZlLCAweGJmLCAweGNmLCAweGZmLCAweGJjLCAweGZmLCAweDdmLAotMHhkNywgMHhmNSwgMHhlOSwgMHg3NywgMHhmYiwgMHhmMywgMHhiOCwgMHhiZiwKLTB4NWYsIDB4ZGYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4N2YsCi0weGZmLCAweGZmLCAweGZmLCAweDRlLCAweGJmLCAweGZkLCAweGRhLCAweGRlLAotMHhiZiwgMHhkNywgMHg3ZiwgMHhmZiwgMHhmNiwgMHhmZiwgMHhlZiwgMHg2ZiwKLTB4Y2MsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4OWIsIDB4ZmYsIDB4ZGQsIDB4YmYsCi0weGJmLCAweGZmLCAweGZlLCAweGZmLCAweGVmLCAweGZkLCAweGZmLCAweGRmLAotMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhjMSwgMHg3NiwgMHhmZiwgMHg3YywKLTB4ZmIsIDB4M2YsIDB4ZmQsIDB4ZDMsIDB4ZDgsIDB4ZmQsIDB4YWYsIDB4Y2MsCi0weGYzLCAweDdjLCAweGY2LCAweDNiLCAweDlmLCAweGY0LCAweGJiLCAweDM3LAotMHhmZiwgMHhlZiwgMHhkMCwgMHg3ZiwgMHgzZiwgMHhmZiwgMHhiMywgMHhmZiwKLTB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4M2UsIDB4ZmYsCi0weGZmLCAweGRjLCAweGU3LCAweGRmLCAweGVmLCAweDdkLCAweGY3LCAweDc3LAotMHhlZCwgMHhmNywgMHg3OSwgMHhkZiwgMHhmNywgMHhmYiwgMHhmZiwgMHhkZiwKLTB4ZjcsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZGUsIDB4MGQsIDB4ZmYsIDB4ZmQsCi0weGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDA3LAotMHhmZiwgMHhiYiwgMHhmYiwgMHhmZiwgMHhlNiwgMHhkZiwgMHg0NiwgMHg2YiwKLTB4ZmYsIDB4ZmIsIDB4OWYsIDB4ZWYsIDB4ZmIsIDB4Y2UsIDB4NzMsIDB4Y2IsCi0weGI5LCAweGRlLCAweGZmLCAweGZlLCAweGJmLCAweGZkLCAweGY3LCAweDdlLAotMHhkZiwgMHhlZiwgMHhiZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKLTB4ZWUsIDB4N2YsIDB4ZmYsIDB4NGUsIDB4YmIsIDB4ZWYsIDB4NzMsIDB4OTYsCi0weGZlLCAweGIyLCAweGZmLCAweGYzLCAweGJmLCAweGQ1LCAweGJmLCAweGVmLAotMHhmZCwgMHhmZiwgMHgzZiwgMHgyZSwgMHg3ZiwgMHhkZiwgMHhmZiwgMHhiZiwKLTB4ZDcsIDB4ZjcsIDB4ZjIsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGRiLCAweDk3LCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZlLAotMHhmZiwgMHhkMywgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhlZiwKLTB4ZjUsIDB4N2QsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGQ3LCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhhOCwgMHhmZiwgMHhmZCwgMHhmYiwgMHhmZiwKLTB4ZGQsIDB4NzMsIDB4ZmYsIDB4MWYsIDB4MzUsIDB4Y2YsIDB4YmYsIDB4ZmYsCi0weGZiLCAweGZmLCAweGNjLCAweGYzLCAweGZmLCAweGZmLCAweGZjLCAweGIxLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhjNywgMHhmNywgMHhlYywgMHhmYiwgMHhmZiwKLTB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YzQsIDB4NGIsIDB4ZmMsIDB4ZmYsCi0weGJmLCAweGZmLCAweGE3LCAweGZkLCAweGZmLCAweGZmLCAweGU3LCAweGY3LAotMHhmYywgMHhmMywgMHgzZiwgMHhmNSwgMHg5ZSwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4OTEsIDB4ZmYsIDB4ZmYsIDB4OWYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4MzksCi0weDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGQ3LCAweDRkLCAweDdmLAotMHhlZiwgMHhlYiwgMHhkNywgMHhjNywgMHhlZiwgMHhhZSwgMHg3ZSwgMHgxZSwKLTB4MzIsIDB4ZmYsIDB4ZWYsIDB4ZWIsIDB4NGYsIDB4ZmUsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGFkLCAweDdmLCAweDVmLCAweDdiLCAweGZmLCAweGY5LAotMHhmZCwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhlZCwKLTB4YmYsIDB4ZjcsIDB4Y2QsIDB4N2IsIDB4ZmYsIDB4ZmYsIDB4ZjUsIDB4ZmYsCi0weGYzLCAweDk2LCAweDVmLCAweGY3LCAweGNkLCAweDc5LCAweGZlLCAweDVmLAotMHgzZiwgMHhmZiwgMHhmYywgMHhkZiwgMHg5ZiwgMHhlNywgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4YmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGRmLCAweDlmLCAweGZmLCAweGJmLCAweGFkLCAweDlmLCAweGZmLCAweGZmLAotMHhmZiwgMHhiZSwgMHhkZCwgMHhmYiwgMHhmZSwgMHhiZiwgMHhhNywgMHhmZCwKLTB4ZmYsIDB4N2YsIDB4YTUsIDB4ZmYsIDB4ZmEsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGY3LCAweGZhLCAweGZiLCAweDNmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhiNiwgMHhmZiwgMHg5ZCwgMHhlNSwgMHg5MywgMHhkYSwKLTB4ZjYsIDB4OWYsIDB4ZWYsIDB4N2YsIDB4MWYsIDB4N2YsIDB4ZGYsIDB4ZTQsCi0weDdmLCAweGRlLCAweGZmLCAweGY1LCAweGJmLCAweGZmLCAweDU2LCAweGJkLAotMHhlZiwgMHg3ZiwgMHhmNCwgMHhmZiwgMHhmNSwgMHhhNywgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2MsIDB4N2YsIDB4ZWUsIDB4ZjIsIDB4YjcsCi0weGZmLCAweGZmLCAweGRhLCAweGZiLCAweGZmLCAweGY3LCAweGViLCAweGZhLAotMHhkYSwgMHhiZCwgMHhmZiwgMHhiZiwgMHhmZSwgMHhiZiwgMHhmZiwgMHhlYiwKLTB4OWYsIDB4ZTMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OWYsIDB4ZmUsIDB4ZmYsCi0weGZkLCAweDVmLCAweGZmLCAweGZmLCAweGY5LCAweDkzLCAweGZmLCAweDdlLAotMHg1NywgMHhmNywgMHhmZiwgMHhmZCwgMHg1ZiwgMHhmZiwgMHhmZSwgMHhmZCwKLTB4N2YsIDB4N2YsIDB4YzMsIDB4MWUsIDB4ZmYsIDB4ZmYsIDB4ZGIsIDB4YWYsCi0weGZkLCAweDdiLCAweDdlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmOSwgMHhmZiwKLTB4ZmYsIDB4ZWYsIDB4ZGYsIDB4ZjksIDB4ZmUsIDB4ZmYsIDB4MzcsIDB4ZWYsCi0weGQ5LCAweGZkLCAweGZmLCAweDdmLCAweDVmLCAweGRiLCAweDdlLCAweGRmLAotMHg0NywgMHhmMywgMHg3ZiwgMHhiZiwgMHhhNywgMHhlZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjYsCi0weDdmLCAweGZmLCAweGZmLCAweGZiLCAweGZmLCAweGJmLCAweGZiLCAweGRiLAotMHhmZSwgMHhiZiwgMHhmZiwgMHg3ZiwgMHhjOSwgMHhlZSwgMHhmOSwgMHg5ZiwKLTB4ZTcsIDB4ZTYsIDB4N2QsIDB4YmYsIDB4ZWYsIDB4ZjksIDB4ZmUsIDB4YmYsCi0weGJmLCAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZSwgMHhlNywgMHhmZiwgMHhlZiwgMHhkYiwgMHhmZSwgMHhmOSwgMHhiZCwKLTB4NmUsIDB4ZGIsIDB4YmUsIDB4ZjUsIDB4YmQsIDB4NmYsIDB4NTksIDB4MzYsCi0weDNmLCAweGJmLCAweDc4LCAweGZlLCAweGU1LCAweGIzLCAweDZkLCAweGZiLAotMHg5NiwgMHhlZCwgMHhiZCwgMHg2ZSwgMHhmYiwgMHg3ZSwgMHhmZiwgMHhiZiwKLTB4ZWYsIDB4ZGYsIDB4OTksIDB4ZmYsIDB4ZmYsIDB4ZGIsIDB4ZmUsIDB4ZmQsCi0weGZmLCAweGVmLCAweDliLCAweGZmLCAweGZmLCAweGJlLCAweGVmLCAweGJiLAotMHhmNiwgMHhmMywgMHhmZiwgMHg2ZiwgMHhlZiwgMHhmYiwgMHhiZiwgMHg3ZiwKLTB4ZmYsIDB4ZmUsIDB4ZmYsIDB4M2YsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGRiLCAweGRkLCAweDNmLCAweGZmLCAweGZkLCAweGZmLAotMHg3ZiwgMHhmZiwgMHhmNywgMHhmZCwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmYiwKLTB4ZmUsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmUsIDB4ZWYsCi0weGZmLCAweGZmLCAweGZlLCAweGZmLCAweGVmLCAweGY3LCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHg1NywgMHhmZSwgMHhmZiwKLTB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZGYsIDB4YmYsIDB4ZmYsIDB4ZGYsCi0weDVmLCAweGQ3LCAweGZlLCAweDdmLCAweDFmLCAweGVmLCAweGU0LCAweDZmLAotMHg3ZiwgMHg1ZSwgMHhkZiwgMHhmNSwgMHhmZiwgMHhiZiwgMHg1ZiwgMHg5ZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjQsIDB4ZmYsCi0weGZmLCAweGZmLCAweGNmLCAweGY3LCAweGRkLCAweGZlLCAweGFkLCAweGRmLAotMHhmZiwgMHg3YSwgMHg5YSwgMHhhZiwgMHhlZiwgMHhhYiwgMHhmZiwgMHhmZSwKLTB4YWYsIDB4ZWIsIDB4ZTksIDB4ZmUsIDB4N2MsIDB4OWYsIDB4N2YsIDB4ZTksCi0weGZiLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLAotMHg0ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmYywKLTB4ZmYsIDB4N2UsIDB4ZmQsIDB4NzcsIDB4NWYsIDB4ZmYsIDB4YjUsIDB4NmYsCi0weGZmLCAweDlkLCAweGJkLCAweGZkLCAweDdmLCAweGZmLCAweGY3LCAweGZmLAotMHhlZCwgMHg3ZiwgMHg3ZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZTMsIDB4ZmUsIDB4ZmYsIDB4ZTcsIDB4ZjksIDB4ZmUsIDB4N2YsCi0weDFmLCAweGU3LCAweGY5LCAweGZlLCAweDZmLCAweDhiLCAweGU3LCAweDc4LAotMHhmZSwgMHg3ZiwgMHg5ZiwgMHhmOSwgMHhiZSwgMHgyZiwgMHg5ZiwgMHhlNiwKLTB4ZjksIDB4ZmUsIDB4MmYsIDB4OGYsIDB4ZTcsIDB4ZjksIDB4ZmUsIDB4N2YsCi0weDlmLCAweGU3LCAweGUyLCAweDdmLCAweGZmLCAweGJmLCAweGZmLCAweGZiLAotMHhmZSwgMHg3OSwgMHg3ZiwgMHg0ZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHg3ZiwKLTB4ZTcsIDB4ZDcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjMsIDB4ZjQsIDB4N2QsCi0weDFmLCAweDRmLCAweGZmLCAweGZjLCAweGZkLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHgwZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4N2YsIDB4YmYsIDB4ZWYsIDB4ZTksIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGFmLCAweGZiLCAweGZhLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZlLAotMHhiZiwgMHhhZiwgMHhlOSwgMHhmZiwgMHhmZSwgMHhiZiwgMHhiZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YzQsIDB4ZmYsIDB4ZmUsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJkLCAweGZmLCAweDdmLCAweDdmLAotMHhmNywgMHhmZCwgMHhmZiwgMHhmZiwgMHg1ZiwgMHhkZiwgMHhmYiwgMHhmZiwKLTB4Y2YsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZjMsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY4LCAweGJmLAotMHhmZiwgMHhkZiwgMHhmZCwgMHhmZCwgMHhmZiwgMHg3NywgMHhiNywgMHhhNywKLTB4ZmIsIDB4ZmUsIDB4ZGUsIDB4ZjcsIDB4ZmQsIDB4ZWIsIDB4N2IsIDB4N2YsCi0weGZkLCAweGZmLCAweDdlLCAweDdmLCAweGRmLCAweGU3LCAweGVmLCAweGZhLAotMHg3ZSwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4NzcsIDB4ZmYsIDB4ZmYsIDB4ZjQsIDB4ZmQsIDB4M2YsIDB4Y2YsIDB4ZGEsCi0weGY3LCAweGZmLCAweDNkLCAweDdmLCAweGRiLCAweGYyLCAweDdkLCAweGZmLAotMHhmZiwgMHg3YSwgMHhiZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmNywgMHhiZCwKLTB4YmIsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGUwLCAweGZmLCAweGZmLCAweGFmLCAweDZhLCAweGRhLCAweGRlLAotMHg5NywgMHhhZiwgMHhlMiwgMHhmYSwgMHg2ZSwgMHgxZiwgMHhhZSwgMHhlOCwKLTB4YmEsIDB4ZmUsIDB4YWQsIDB4ZWIsIDB4ZjgsIDB4ZmUsIDB4OWIsIDB4YWYsCi0weGViLCAweGZhLCAweGRlLCAweGJmLCAweDhiLCAweGNiLCAweGZhLCAweGZlLAotMHhiZiwgMHhhZiwgMHhmZiwgMHg1ZCwgMHhmZiwgMHhjZCwgMHhmZiwgMHhiZiwKLTB4ZmIsIDB4ZmYsIDB4MzYsIDB4YWYsIDB4YmUsIDB4YmYsIDB4ZWYsIDB4MzYsCi0weGZlLCAweGRkLCAweGRmLCAweGVmLCAweGZkLCAweGZjLCAweDdmLCAweGZmLAotMHhmZSwgMHhlZCwgMHhiMiwgMHhmZiwgMHgzZCwgMHhmZiwgMHhlZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4YTEsIDB4ZWYsIDB4ZmYsIDB4ZmYsCi0weGZkLCAweGVmLCAweDdlLCAweGJmLCAweGZmLCAweDdkLCAweDZmLCAweDdmLAotMHhkZiwgMHg3NywgMHhmZiwgMHhiYSwgMHhmZSwgMHhkZiwgMHhmYywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4N2IsIDB4YWUsIDB4YmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVhLCAweDViLCAweGJkLAotMHg1ZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZCwgMHhmZiwKLTB4ZWYsIDB4ZGYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZWQsIDB4ZjcsCi0weDM3LCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweDdmLAotMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhlZiwKLTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmIsIDB4N2MsIDB4ZDksIDB4YTcsIDB4Y2YsCi0weGYzLCAweGY2LCAweDNjLCAweDhmLCAweGUyLCAweGZhLCAweDdjLCAweDhmLAotMHg3YiwgMHhkZSwgMHhmNiwgMHhiYiwgMHhhZiwgMHg1ZiwgMHhkYSwgMHhmZSwKLTB4YmUsIDB4ZWYsIDB4ZmUsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGJkLCAweGZmLCAweGZmLCAweGY3LCAweDdmLCAweGVmLCAweGZiLCAweGZkLAotMHhmZiwgMHhiZCwgMHhlZCwgMHg1ZSwgMHg3ZiwgMHhkZSwgMHhkZiwgMHg1ZiwKLTB4ZjcsIDB4ZmYsIDB4ZjcsIDB4NzcsIDB4ZmIsIDB4ZmQsIDB4ZmYsIDB4ZjUsCi0weDk5LCAweDY3LCAweDdiLCAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmYSwgMHgzZiwgMHhmYiwgMHhmNywgMHhmZSwgMHgzYiwgMHhlZiwKLTB4ZmUsIDB4ZmEsIDB4YzYsIDB4ZmIsIDB4ZmYsIDB4ZmUsIDB4YmQsIDB4ZWIsCi0weGJmLCAweGVhLCAweGVlLCAweDNmLCAweGZiLCAweGFhLCAweGZhLCAweGZmLAotMHhjZiwgMHhmYiwgMHhmYywgMHhmNywgMHhmYiwgMHhmZCwgMHhmZiwgMHhmZiwKLTB4ZWYsIDB4ZmYsIDB4ZmUsIDB4YzcsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZmQsCi0weGZmLCAweGZmLCAweGRiLCAweGY3LCAweGZmLCAweGVmLCAweDViLCAweGNlLAotMHhmNywgMHhkZiwgMHhiZiwgMHhlZiwgMHhkZiwgMHhmZCwgMHhmZiwgMHhmYiwKLTB4ZjksIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4N2MsIDB4ZmYsIDB4ZmYsIDB4ZmIsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY2LCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhiMSwgMHhmZSwgMHhiZSwgMHhmZiwgMHhiZCwgMHhmNSwgMHhmZiwKLTB4ZmIsIDB4ZDQsIDB4ZGQsIDB4N2QsIDB4YmQsIDB4ZGIsIDB4ZWQsIDB4YjUsCi0weGZkLCAweGZmLCAweGZmLCAweGZmLCAweGU3LCAweGZiLCAweGZmLCAweDliLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHg5YiwgMHhlZCwKLTB4ZmYsIDB4ZmQsIDB4NDEsIDB4ZjAsIDB4ZmMsIDB4MGQsIDB4Y2IsIDB4ZjMsCi0weGZmLCAweGVkLCAweDNmLCAweGNjLCAweGYxLCAweGY4LCAweGZlLCAweDQ3LAotMHhmMywgMHhmNywgMHhlZSwgMHgzZiwgMHhjZiwgMHhkZSwgMHhmZiwgMHhmNywKLTB4M2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTMsCi0weGZmLCAweGZmLCAweGRmLCAweGZmLCAweGRkLCAweGRmLCAweGZiLCAweGY5LAotMHhlZiwgMHg3ZiwgMHhmZiwgMHhlZCwgMHhmZCwgMHhmZiwgMHhiZCwgMHhkZSwKLTB4ZWYsIDB4N2QsIDB4N2IsIDB4N2EsIDB4MzYsIDB4ZmQsIDB4ZWYsIDB4ZmIsCi0weGZiLCAweGI3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmOCwgMHg3ZiwgMHhmYiwgMHhmZiwgMHhmNywgMHhiZiwgMHg3OSwgMHhmMywKLTB4ZWYsIDB4NWMsIDB4ZTEsIDB4MmMsIDB4ZmYsIDB4N2YsIDB4OGUsIDB4ZDcsCi0weGY4LCAweGZiLCAweGZkLCAweGUzLCAweGZmLCAweGZlLCAweGYyLCAweDFiLAotMHhmNywgMHhhZiwgMHhmYywgMHgzZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmUsIDB4MDcsIDB4ZmYsIDB4ZmYsIDB4Y2IsIDB4ZmUsIDB4N2YsCi0weGI3LCAweGY3LCAweGZhLCAweGZmLCAweGRlLCAweDFmLCAweDhmLCAweGRiLAotMHhmZSwgMHhiZCwgMHhiZiwgMHhmYiwgMHhmYywgMHhmZSwgMHg5ZiwgMHhmZiwKLTB4ZmIsIDB4YmEsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmIsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGU1LCAweDdiLCAweDdmLCAweGZmLCAweGZmLAotMHhiZiwgMHhjZCwgMHhmZiwgMHg3ZiwgMHg3ZiwgMHg3ZiwgMHhmZiwgMHhmZiwKLTB4ZmQsIDB4N2YsIDB4YmYsIDB4Y2YsIDB4ZmYsIDB4NWYsIDB4ZGYsIDB4ZmYsCi0weGVmLCAweGZmLCAweDdmLCAweDdlLCAweGZmLCAweGZiLCAweGZkLCAweDdmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmYSwgMHhhZiwgMHhmZiwgMHhmZiwKLTB4YmYsIDB4ZmQsIDB4ZmYsIDB4ZGUsIDB4YzcsIDB4YmYsIDB4ZmYsIDB4ZmYsCi0weDNmLCAweGZjLCAweGJmLCAweGZjLCAweGNmLCAweGZmLCAweGY3LCAweGZmLAotMHg5ZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4YzIsIDB4YmYsCi0weGNmLCAweGYzLCAweGZmLCAweGZmLCAweGZmLCAweGNhLCAweGYzLCAweGZmLAotMHhmZiwgMHhkNywgMHhmZSwgMHhhMSwgMHhmZSwgMHhhMywgMHhkZiwgMHhmZCwKLTB4YmMsIDB4ZjMsIDB4ZmYsIDB4ZjYsIDB4ZjcsIDB4ZmYsIDB4NzMsIDB4M2YsCi0weGNmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweDQ0LAotMHhmNywgMHhmZSwgMHhmNCwgMHhiZCwgMHg3ZCwgMHhlYiwgMHhkMiwgMHhmZSwKLTB4YjksIDB4YWYsIDB4M2YsIDB4ZmYsIDB4ZjIsIDB4YmYsIDB4ZmYsIDB4ZmYsCi0weGNmLCAweGY5LCAweGZlLCAweDdmLCAweDdmLCAweGZmLCAweGY5LCAweGZlLAotMHg2YiwgMHhjYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlNywKLTB4YmQsIDB4NWIsIDB4ZmYsIDB4N2UsIDB4NTcsIDB4OWYsIDB4Y2QsIDB4N2IsCi0weDVlLCAweGQ3LCAweGY1LCAweGU3LCAweGZmLCAweGZlLCAweDU3LCAweGZmLAotMHhmZiwgMHg3YiwgMHhmZiwgMHhiZiwgMHhjZiwgMHhmYiwgMHhmZiwgMHhkZiwKLTB4M2YsIDB4ZWQsIDB4NzksIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZjLCAweGZkLCAweGU5LCAweGZmLCAweGRiLCAweGZhLCAweDdlLCAweGZkLAotMHgzZCwgMHhhOSwgMHhhMiwgMHg3ZCwgMHhiNSwgMHg3NywgMHg0YiwgMHhmYiwKLTB4Y2QsIDB4ZmYsIDB4ZmQsIDB4YmYsIDB4ZmEsIDB4YjUsIDB4N2YsIDB4YWQsCi0weGYyLCAweGNkLCAweGRjLCAweDI3LCAweGZiLCAweGY3LCAweDdmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhlNSwgMHg2ZiwgMHhkMSwgMHhkZSwgMHg0ZCwKLTB4YmQsIDB4ZTcsIDB4YmQsIDB4M2UsIDB4NGUsIDB4MWUsIDB4NmYsIDB4ZDksCi0weDVmLCAweDc2LCAweGJkLCAweGVmLCAweDViLCAweGY3LCAweGQ2LCAweGVmLAotMHg2YiwgMHg1NCwgMHg1YSwgMHhiZiwgMHhhNCwgMHhmOSwgMHhmOCwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4YTcsIDB4ZmYsIDB4ZWYsCi0weGFiLCAweGZmLCAweGYyLCAweGJmLCAweGFmLCAweGFiLCAweGZhLCAweGRmLAotMHhmZiwgMHhhZiwgMHhlYiwgMHhmZiwgMHhmYiwgMHhlZCwgMHhmZiwgMHhkYSwKLTB4ZGIsIDB4ZmYsIDB4ZjcsIDB4NGIsIDB4ZmYsIDB4ZmUsIDB4YmUsIDB4YWQsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDg1LCAweGZmLAotMHhmNywgMHhmZCwgMHgzZiwgMHhmYywgMHg1NywgMHhmNCwgMHhmZCwgMHgzZiwKLTB4NWYsIDB4ZmYsIDB4ZjUsIDB4ZmQsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4OWYsCi0weGYxLCAweDVmLCAweGY3LCAweGZhLCAweGU5LCAweDdmLCAweGZmLCAweGQzLAotMHhmNywgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwKLTB4OWYsIDB4ZmYsIDB4ZjksIDB4ZjYsIDB4ZGYsIDB4ZmYsIDB4Y2YsIDB4ZGYsCi0weGY2LCAweDdmLCAweDdmLCAweGU3LCAweGZmLCAweGY0LCAweGRmLCAweGZmLAotMHg0OSwgMHhmZSwgMHhmZiwgMHgzNywgMHhlZCwgMHhkZiwgMHhmYywgMHg3ZiwKLTB4YmYsIDB4N2YsIDB4ZjcsIDB4ZjYsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZlLCAweGI3LCAweGZlLCAweDdmLCAweDlmLCAweGVmLCAweGY5LCAweGZlLAotMHhiZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZSwgMHg3ZiwgMHhmZSwgMHg2NywKLTB4ZjksIDB4ZTcsIDB4ZmYsIDB4ZmIsIDB4ZmIsIDB4ZmUsIDB4ZjksIDB4ZmYsCi0weGZmLCAweGZhLCAweGZlLCAweGZkLCAweDllLCAweGVmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhlNiwgMHg3ZiwgMHhmZSwgMHhmZiwgMHg5MywgMHg2ZiwKLTB4ZGIsIDB4OTYsIDB4N2YsIDB4OWQsIDB4NmYsIDB4OWIsIDB4ZmUsIDB4ZmYsCi0weDlkLCAweDZmLCAweGY4LCAweDc3LCAweGJmLCAweDZlLCAweGRiLCAweGI2LAotMHgzNSwgMHhiZCwgMHg2ZSwgMHg1OSwgMHhiNiwgMHhmZiwgMHg5YiwgMHhlZiwKLTB4ZmIsIDB4ZmUsIDB4ZmYsIDB4ZmEsIDB4ZGIsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGRmLCAweGYzLCAweGVlLCAweGZmLCAweGZmLCAweGZmLCAweDliLCAweGZmLAotMHhmZiwgMHhmZSwgMHhlZiwgMHhmYiwgMHhlYywgMHhmZiwgMHg2ZiwgMHhiMywKLTB4ZjYsIDB4ZjMsIDB4ZmMsIDB4ZWYsIDB4ZmIsIDB4ZjYsIDB4ZmIsIDB4YmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweDgzLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZSwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmIsIDB4ZmQsIDB4ZmYsIDB4YmYsIDB4ZmIsCi0weGZlLCAweGZmLCAweDdmLCAweGZmLCAweGVmLCAweGZiLCAweGZmLCAweDdmLAotMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmMSwgMHg3ZiwKLTB4ZmQsIDB4N2YsIDB4NGYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4M2YsIDB4NGUsCi0weGRmLCAweGZlLCAweGZkLCAweDdmLCAweGU3LCAweGQ3LCAweGU0LCAweDdhLAotMHhmZiwgMHhmNywgMHhiZiwgMHhmZiwgMHgxYiwgMHg1ZiwgMHhmYiwgMHhiNCwKLTB4ZWQsIDB4ZmYsIDB4NGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weDZmLCAweGZmLCAweGE3LCAweGViLCAweGY3LCAweDdmLCAweGVmLCAweGFmLAotMHg2YiwgMHhmYiwgMHhiZiwgMHhmZCwgMHhhNywgMHg3YywgMHhmYSwgMHg3NiwKLTB4OGYsIDB4ZmQsIDB4ZmYsIDB4M2YsIDB4ZGYsIDB4YjMsIDB4NmEsIDB4ZmYsCi0weGZlLCAweGJkLCAweGFhLCAweGViLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhlMCwgMHhmZiwgMHhlZiwgMHhmZCwgMHg3YiwgMHhmYywgMHhmNywKLTB4ZjUsIDB4ZmQsIDB4N2YsIDB4NWYsIDB4YmYsIDB4ZmQsIDB4ZWQsIDB4ZjcsCi0weDVkLCAweGY3LCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGJkLCAweDZkLAotMHg3NywgMHhmZiwgMHhkNywgMHhmNywgMHhmZCwgMHg3ZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZjcsIDB4YmYsIDB4ZmYsIDB4ZmUsIDB4MmYsIDB4OWIsCi0weGUzLCAweGY4LCAweGJlLCAweDJmLCAweDhmLCAweGU3LCAweGY5LCAweGJlLAotMHgzNywgMHg4ZiwgMHhlMiwgMHg3OSwgMHhmZiwgMHg5ZiwgMHhlNywgMHhmOCwKLTB4ZmUsIDB4MmYsIDB4OWYsIDB4ZTIsIDB4ZjksIDB4YmUsIDB4MmYsIDB4OWYsCi0weGU3LCAweGY5LCAweGZlLCAweDdmLCAweDI3LCAweGZmLCAweGQ3LCAweGY1LAotMHhmZiwgMHhiZiwgMHhkZiwgMHhmNywgMHhmNCwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZDMsIDB4ZmUsIDB4ZmQsIDB4N2YsIDB4YzcsIDB4ZmUsIDB4ZmYsIDB4ZmYsCi0weDdmLCAweGYzLCAweGZkLCAweGZmLCAweGZmLCAweDVmLCAweGRmLCAweGY1LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlNiwgMHhmZiwgMHhmYSwKLTB4ZmUsIDB4YmYsIDB4ZjcsIDB4ZmIsIDB4ZmIsIDB4ZmUsIDB4OWYsIDB4ZmYsCi0weGZmLCAweGZhLCAweDdmLCAweGZmLCAweGFmLCAweGViLCAweGZmLCAweGRmLAotMHhmZiwgMHhmZiwgMHhmYiwgMHhmZSwgMHhiZiwgMHhmZiwgMHhlYiwgMHhmYiwKLTB4ZmUsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4Y2YsCi0weGY3LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDdmLCAweGRmLCAweGY3LAotMHhmZCwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmYiwgMHhmNSwgMHhmZiwgMHg3ZiwKLTB4OWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4Y2YsIDB4ZjcsIDB4ZjcsIDB4ZmYsCi0weDdmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhjMywgMHhmZiwgMHhmZiwgMHhmYSwgMHhmZiwgMHhkZiwgMHhhZCwgMHhlZiwKLTB4ZmUsIDB4N2UsIDB4ZjcsIDB4ZWYsIDB4ZjksIDB4ZmYsIDB4ZGUsIDB4YmYsCi0weGVkLCAweGZmLCAweDdmLCAweGY3LCAweGY3LCAweGVmLCAweDdiLCAweGRmLAotMHhmZiwgMHhiNywgMHhmZiwgMHg3YSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmUsIDB4ZmIsIDB4NzcsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZDMsIDB4ZmYsCi0weGZkLCAweGZmLCAweDY3LCAweGZmLCAweGYyLCAweGZmLCAweGZmLCAweDQ3LAotMHhmZiwgMHhmNiwgMHhmZiwgMHg2NywgMHhmZSwgMHhmNywgMHhmZiwgMHhmZiwKLTB4MmUsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGRmLCAweDZmLCAweGZmLCAweGZhLCAweGY2LCAweDlkLAotMHg4ZiwgMHhlYiwgMHhmYSwgMHhmNCwgMHhiZiwgMHgyZiwgMHg2YiwgMHhmYSwKLTB4ZjYsIDB4YjcsIDB4YWIsIDB4ZTksIDB4ZGUsIDB4YmYsIDB4YWYsIDB4ZWIsCi0weGY4LCAweGFlLCAweDNiLCAweGFmLCAweGViLCAweDdhLCAweGZlLCAweGJmLAotMHhhZiwgMHhlYiwgMHhmYSwgMHhmZCwgMHg1OSwgMHhiZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmIsIDB4ZmQsIDB4ZjcsIDB4ZjQsIDB4ZjcsCi0weDdmLCAweGZmLCAweDdmLCAweGZkLCAweGNkLCAweDZjLCAweGRmLCAweGZmLAotMHhlZiwgMHhmYywgMHhiZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwKLTB4M2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MWYsIDB4ZmYsCi0weGZmLCAweDdmLCAweDdmLCAweGZmLCAweGUzLCAweGZiLCAweDdmLCAweGZkLAotMHhmNywgMHhmZiwgMHhmZSwgMHhlZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwKLTB4ZGUsIDB4YjcsIDB4ZjcsIDB4MmYsIDB4ZmYsIDB4ZmYsIDB4NzcsIDB4ZmIsCi0weGZmLCAweDNmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweDdlLCAweDM3LAotMHhiZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhkZiwgMHhmZiwgMHhmZCwgMHhmZiwKLTB4ZmYsIDB4ZWYsIDB4YmYsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZWYsIDB4ZmYsCi0weGRlLCAweGViLCAweGZiLCAweGU1LCAweGZmLCAweGZmLCAweGZiLCAweGRiLAotMHhmNywgMHhmZiwgMHhiZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZTQsIDB4MWYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4YWYsIDB4ZWIsIDB4YjgsCi0weGZmLCAweGJkLCAweDZmLCAweGU3LCAweGRmLCAweGZlLCAweDdmLCAweGVmLAotMHgzYiwgMHhkZSwgMHhmZiwgMHhiNiwgMHhjYiwgMHhmZiwgMHg3ZiwgMHhhNywKLTB4YmYsIDB4ZWIsIDB4ZmIsIDB4ZmUsIDB4YmMsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZlLCAweDlmLCAweGZmLCAweGZmLCAweGZmLCAweGZhLCAweGZkLAotMHg3NywgMHhiZiwgMHhkZiwgMHhkZiwgMHhmZiwgMHhlZCwgMHhmZiwgMHhmZiwKLTB4NjcsIDB4ZmYsIDB4ZjcsIDB4ZmIsIDB4N2UsIDB4ZmUsIDB4NzcsIDB4ZjksCi0weGVmLCAweGRlLCAweDVmLCAweDc1LCAweGVmLCAweGI3LCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhiZCwgMHg5OSwgMHhmZSwgMHhmZiwgMHhiYywgMHhmYiwKLTB4M2UsIDB4ZWYsIDB4YmYsIDB4ZmMsIDB4N2UsIDB4ZmIsIDB4ZmYsIDB4ZmYsCi0weGJmLCAweGZmLCAweDNiLCAweGJmLCAweDhmLCAweGZmLCAweGZlLCAweGNmLAotMHhmYiwgMHhmYywgMHhkZiwgMHhiZSwgMHgzZiwgMHhmMywgMHhiMiwgMHhkZiwKLTB4ZmYsIDB4ZmUsIDB4ZmUsIDB4ZmYsIDB4ZmQsIDB4N2YsIDB4ZmIsIDB4ZmYsCi0weDdiLCAweGQ3LCAweGQzLCAweGZmLCAweGJmLCAweDVmLCAweGZkLCAweGZmLAotMHhkZiwgMHhmZiwgMHg3ZSwgMHhmZiwgMHhmZiwgMHhmZCwgMHg3ZiwgMHhmZSwKLTB4ZTcsIDB4ZmQsIDB4ZGYsIDB4NmYsIDB4YzcsIDB4ZmUsIDB4ZmYsIDB4ZmYsCi0weDNmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweDBkLCAweGZmLAotMHhmZiwgMHg1YSwgMHhkZiwgMHhmZiwgMHhiZiwgMHhmYiwgMHhmZiwgMHhkZiwKLTB4OWQsIDB4ZmYsIDB4ZmQsIDB4N2EsIDB4NmYsIDB4OTcsIDB4ZmYsIDB4YWYsCi0weGZmLCAweGZmLCAweGJmLCAweGU3LCAweGVlLCAweGZmLCAweGZmLCAweGZkLAotMHhmZCwgMHhiYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhjNSwKLTB4ZGUsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZmMsCi0weGY3LCAweGZmLCAweGNmLCAweGUzLCAweDdmLCAweGZmLCAweDNmLCAweGNmLAotMHhmNCwgMHhmZCwgMHgzZiwgMHhmZCwgMHhmZiwgMHhiYywgMHhmZiwgMHhmZiwKLTB4ZWYsIDB4NjcsIDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZhLCAweGJiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLAotMHhmZiwgMHhkZiwgMHhmZiwgMHhmZCwgMHhkZiwgMHg3ZiwgMHhmYiwgMHhmNiwKLTB4YmQsIDB4ZmUsIDB4ZGYsIDB4ZWIsIDB4ZWYsIDB4ZGQsIDB4ZmUsIDB4NWYsCi0weDdmLCAweGZkLCAweGZjLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHgzMywgMHhmZiwgMHhiZiwgMHhkZCwgMHhmZiwgMHg3ZiwKLTB4NWYsIDB4OTcsIDB4ZjksIDB4ZmYsIDB4ZmYsIDB4YmQsIDB4ZWIsIDB4ZWQsCi0weGRjLCAweDdiLCAweDhjLCAweGE5LCAweGRmLCAweDZmLCAweGRiLCAweGY3LAotMHhmYiwgMHhkZiwgMHg3YSwgMHg1ZiwgMHhkNywgMHhmMSwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4M2IsCi0weGZmLCAweGZiLCAweGZlLCAweGJmLCAweGJmLCAweDc2LCAweGRmLCAweGZmLAotMHhlZiwgMHgzZiwgMHhlZSwgMHhkZiwgMHhiZiwgMHhmNywgMHhjZCwgMHhmYiwKLTB4YmUsIDB4ZmYsIDB4ZmYsIDB4MGUsIDB4ZGIsIDB4ZmUsIDB4YmYsIDB4YmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZhLCAweDFmLCAweGZmLCAweGZmLAotMHhmNywgMHhmNywgMHhmZiwgMHg1YiwgMHhkZiwgMHhkNywgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmQsIDB4ZmQsIDB4ZGYsIDB4OWYsIDB4ZmQsCi0weDdjLCAweGZmLCAweDU3LCAweGZkLCAweGZmLCAweGZmLCAweDc3LCAweGJmLAotMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhjMiwgMHhmZiwKLTB4ZWYsIDB4ZDcsIDB4MWYsIDB4ZmYsIDB4ZmYsIDB4M2MsIDB4ZmYsIDB4ZTcsCi0weGNmLCAweGZmLCAweGZmLCAweGZmLCAweDNlLCAweGZmLCAweGI3LCAweGZiLAotMHhkZiwgMHhmZiwgMHhmMywgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwKLTB4M2YsIDB4ZmIsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4Y2EsCi0weDJlLCAweGZkLCAweGY5LCAweGZiLCAweGZmLCAweGZmLCAweGJmLCAweGRmLAotMHhmZiwgMHhjZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhjZiwgMHhmNywKLTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4N2MsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGYzLCAweGViLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhkNywgMHg4ZSwgMHg1ZiwgMHhiZiwgMHg1ZSwgMHhmZiwgMHhkMywgMHhmZiwKLTB4YWYsIDB4NWIsIDB4ZmUsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4Y2EsCi0weGZlLCAweGZjLCAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweGFmLCAweGZmLAotMHg5ZiwgMHhmMiwgMHg5YywgMHhmNywgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmIsIDB4YzQsIDB4YmYsIDB4ZjcsIDB4ZWYsIDB4ZjMsIDB4ZmUsCi0weGZmLCAweDk1LCAweGZkLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGNmLAotMHhmYiwgMHg1ZiwgMHhkZiwgMHgzZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgzNSwKLTB4ZTcsIDB4ZjMsIDB4ZmUsIDB4YzcsIDB4M2EsIDB4ZmQsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGQ4LCAweDlmLCAweGZlLCAweGZlLCAweGZmLAotMHhkZiwgMHhhNiwgMHhmNSwgMHhkZiwgMHhhZSwgMHhkOSwgMHhmZiwgMHhkZiwKLTB4ZjcsIDB4ZjYsIDB4ODksIDB4NzMsIDB4N2YsIDB4YmYsIDB4ZmYsIDB4ZmIsCi0weGZlLCAweDlmLCAweDc1LCAweGZiLCAweGEyLCAweDNlLCAweGRmLCAweGFjLAotMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgyMiwgMHhkZiwgMHhkZCwKLTB4ZmYsIDB4NTMsIDB4ZDYsIDB4ZjUsIDB4YmQsIDB4ZjUsIDB4ZjksIDB4ZGYsCi0weGZmLCAweGZmLCAweGZkLCAweGU5LCAweDc4LCAweDdmLCAweGY3LCAweGZmLAotMHhmZiwgMHg3NywgMHhkMywgMHhkZSwgMHgxYiwgMHhkNiwgMHg3NywgMHg5ZCwKLTB4ZjcsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NmMsIDB4N2YsCi0weGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZhLCAweGZlLCAweGJlLAotMHhlZiwgMHhmZiwgMHhmZiwgMHhlNywgMHhmZiwgMHhhZiwgMHhlZiwgMHhkNiwKLTB4ZjcsIDB4ZmYsIDB4ZmIsIDB4ZmEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWIsCi0weGNhLCAweGZlLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY5LAotMHg0ZiwgMHhmZiwgMHg3ZiwgMHhkZiwgMHhmNywgMHhmZiwgMHhmZiwgMHg0ZiwKLTB4ZDcsIDB4ZjYsIDB4ZmYsIDB4ZGYsIDB4ZjcsIDB4ZmYsIDB4ZjUsIDB4N2QsCi0weGZmLCAweGRmLCAweGZmLCAweGZmLCAweDdmLCAweDRmLCAweGRiLCAweGZmLAotMHhmZCwgMHgzMSwgMHg0ZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4YjMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTcsIDB4ZmIsIDB4N2UsCi0weGZkLCAweGI3LCAweGNkLCAweGQ5LCAweGY1LCAweGZkLCAweDdmLCAweGVkLAotMHhmMywgMHg3NywgMHhmZiwgMHhjZCwgMHhmYiwgMHhmZiwgMHhmZCwgMHhmZiwKLTB4NWYsIDB4ZmYsIDB4ZjYsIDB4ZmQsIDB4YjcsIDB4ZGYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGYzLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhiZiwgMHhlYiwgMHhiZiwgMHhmNiwgMHg3YiwgMHhmZSwgMHg3ZiwgMHg5ZiwKLTB4ZmYsIDB4ZmUsIDB4YmUsIDB4NmYsIDB4ZjIsIDB4ZmYsIDB4YWYsIDB4ZWYsCi0weGZiLCAweGY2LCAweDdmLCAweGJmLCAweGZiLCAweGZiLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg2NywgMHhmZiwgMHhlZCwgMHhmYiwKLTB4ZjYsIDB4ZjksIDB4YmIsIDB4NjcsIDB4ZmIsIDB4ZmUsIDB4N2YsIDB4OWYsCi0weGU3LCAweGZiLCAweGQ2LCAweGZiLCAweDhlLCAweGZiLCAweGU2LCAweGVkLAotMHhiZSwgMHg2NywgMHgxOCwgMHhmNiwgMHhlZCwgMHg5ZiwgMHhlNiwgMHhmYiwKLTB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmUsIDB4OTEsIDB4YmYsIDB4ZmYsCi0weGZiLCAweGZjLCAweGZkLCAweGJmLCAweGNmLCAweGZiLCAweGVmLCAweGZmLAotMHhmZSwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhlNiwKLTB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZTYsIDB4ZmYsIDB4M2YsIDB4ZWYsCi0weGZiLCAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRjLCAweGJmLAotMHhmZiwgMHhmZCwgMHhmZiwgMHhiZiwgMHhkZiwgMHhmYiwgMHhmYiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweGVmLAotMHhmYiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4YTcsIDB4ZmYsIDB4ZmYsIDB4ZWQsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZDEsCi0weGY3LCAweGZkLCAweDFmLCAweGVlLCAweGY5LCAweGZlLCAweGZmLCAweDNmLAotMHhjZiwgMHhlNywgMHhmZiwgMHg3ZiwgMHg3ZiwgMHhkMywgMHhiNCwgMHhmZiwKLTB4ZmYsIDB4YzcsIDB4ZjEsIDB4YjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGFlLCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGY3LCAweGRkLAotMHhmMiwgMHhmZiwgMHhhYiwgMHhhZiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhmZiwKLTB4ZWIsIDB4ZmEsIDB4ZmUsIDB4ZTksIDB4ZjcsIDB4ZmQsIDB4ZmEsIDB4ZmMsCi0weDhmLCAweGY3LCAweGZiLCAweGZlLCAweGZlLCAweGVmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmYywgMHg5ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwKLTB4ZmYsIDB4ZmYsIDB4NWYsIDB4ZDcsIDB4ZjUsIDB4ZmYsIDB4ZjcsIDB4ZmYsCi0weGY3LCAweGY1LCAweGZmLCAweDdiLCAweGJmLCAweGZmLCAweGZmLCAweGY3LAotMHg1ZiwgMHhmNywgMHhlZiwgMHhmZiwgMHgzZiwgMHhjZiwgMHhkNywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZDEsIDB4ZmYsIDB4ZmYsIDB4ZTcsCi0weGY5LCAweGZlLCAweDdmLCAweDg5LCAweGU2LCAweGY4LCAweDllLCAweDdmLAotMHg5ZCwgMHhlNiwgMHhmOCwgMHhiZSwgMHg2ZiwgMHg5ZiwgMHhmOSwgMHhmZSwKLTB4N2YsIDB4OGIsIDB4ZTIsIDB4ZjksIDB4ZmUsIDB4NmYsIDB4OWIsIDB4ZTMsCi0weGY5LCAweGZlLCAweDdmLCAweDlmLCAweGU3LCAweGZmLCAweDdmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHg3ZiwgMHhmZiwgMHhkNywKLTB4ZmUsIDB4N2YsIDB4OWYsIDB4ZmYsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4ZmYsCi0weGZiLCAweGY3LCAweGZkLCAweDdmLCAweDVmLCAweGZmLCAweGZkLCAweGZmLAotMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhjZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4YWYsIDB4ZmYsCi0weGZhLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZiLCAweGJmLAotMHhlZiwgMHhmZiwgMHg3ZiwgMHhiZiwgMHhhZiwgMHhlYiwgMHhmZSwgMHhmZiwKLTB4YmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGNkLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLAotMHhmZiwgMHg3ZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhkZiwKLTB4ZDcsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4N2YsCi0weGZmLCAweGY3LCAweGZkLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZSwgMHgzZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmUsIDB4YmYsIDB4ZWQsIDB4ZWIsIDB4ZmYsIDB4ZGYsIDB4ZjcsIDB4ZWYsCi0weGViLCAweDNhLCAweGRmLCAweGZkLCAweGZkLCAweGZmLCAweGZlLCAweGJmLAotMHhhZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZCwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NzcsIDB4ZmYsIDB4ZWIsIDB4YjYsIDB4ZmYsCi0weGZiLCAweDc3LCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLAotMHhmMiwgMHhmZiwgMHgzZiwgMHg2NywgMHhmMiwgMHhiZiwgMHhmZiwgMHgyZiwKLTB4Y2IsIDB4ZjYsIDB4ZmMsIDB4YmYsIDB4MmYsIDB4ZmIsIDB4ZmEsIDB4ZmYsCi0weGZmLCAweGZlLCAweGZmLCAweGZmLCAweGZlLCAweGJmLCAweGZmLCAweGFmLAotMHg2OSwgMHhmYSwgMHgzZSwgMHhiNywgMHhhNywgMHhlMSwgMHhmYSwgMHhmZSwKLTB4M2YsIDB4YTQsIDB4ZTksIDB4ZmEsIDB4ZWUsIDB4M2QsIDB4ZWEsIDB4ZmEsCi0weGVlLCAweGJkLCAweGFiLCAweGViLCAweDcyLCAweGFlLCAweGI3LCAweGE1LAotMHhlYiwgMHhmYSwgMHhmZSwgMHhiZiwgMHhhZiwgMHhmNywgMHhkZiwgMHhmZiwKLTB4ZmYsIDB4OWYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZGYsIDB4YmMsIDB4ZmQsCi0weGZmLCAweDNmLCAweGZmLCAweGZiLCAweDdmLCAweGRkLCAweDdmLCAweGVkLAotMHhmZiwgMHhlZiwgMHgzZiwgMHhmYiwgMHhjZSwgMHhmYiwgMHhmYiwgMHhmZiwKLTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZDEsCi0weDdkLCAweGRmLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGJmLCAweGRmLAotMHhmZCwgMHhmMywgMHhkZiwgMHhmZiwgMHhmYiwgMHhmZCwgMHhmZiwgMHhmZiwKLTB4ZGYsIDB4N2YsIDB4ZjUsIDB4YWYsIDB4YmYsIDB4N2YsIDB4ZmIsIDB4ZGIsCi0weGZhLCAweGJmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhlZiwgMHg1ZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhlZSwKLTB4ZmYsIDB4ZmUsIDB4ZWYsIDB4ZmIsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmUsCi0weGVkLCAweGU5LCAweGZiLCAweGJmLCAweGVmLCAweGZiLCAweGRlLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmUsIDB4Y2YsIDB4ZmYsIDB4ZmYsIDB4ZWIsIDB4ZjksIDB4ZmUsCi0weGJmLCAweDhkLCAweGZkLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhlZSwgMHhlZiwgMHhiYSwgMHhmZSwgMHgzZiwgMHg5ZiwKLTB4ZmYsIDB4ZTgsIDB4ZmYsIDB4YmYsIDB4YmYsIDB4ZTMsIDB4ZGYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGRkLCAweGZmLCAweGZmLCAweGY1LCAweDdmLAotMHhmZCwgMHhmYiwgMHhmYiwgMHhmYiwgMHhmNSwgMHg3ZiwgMHhmZSwgMHhkZiwKLTB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OTksIDB4NmYsIDB4NmUsCi0weGZmLCAweGRmLCAweGZmLCAweGZmLCAweGRmLCAweGZlLCAweGY2LCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmOCwgMHhiZiwgMHhmZiwgMHhmZCwKLTB4ZmUsIDB4ZGIsIDB4ZmIsIDB4NWYsIDB4ZmIsIDB4Y2YsIDB4ZmIsIDB4YmYsCi0weGVkLCAweGZiLCAweGZmLCAweGZmLCAweGJjLCAweGVlLCAweGNlLCAweGYzLAotMHhiZiwgMHhmZiwgMHgyZiwgMHhjMywgMHhlYiwgMHhiZiwgMHhlMywgMHgzYiwKLTB4Y2UsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZDcsIDB4ZmYsCi0weGZlLCAweGZlLCAweGZkLCAweGVmLCAweDU3LCAweGRmLCAweGY1LCAweGJkLAotMHhmYiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhiNywgMHg1ZiwgMHhkNiwKLTB4N2QsIDB4YmYsIDB4ZmIsIDB4YmUsIDB4ZjUsIDB4ZmMsIDB4ZWYsIDB4ZWYsCi0weGRmLCAweGI1LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGUwLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlNywgMHhiZiwgMHhkZSwgMHhmZiwKLTB4ZjksIDB4ZTMsIDB4ZmYsIDB4N2YsIDB4ZDcsIDB4ZmQsIDB4ZWYsIDB4ZmYsCi0weGRiLCAweGJmLCAweGU5LCAweDNlLCAweGRmLCAweGZmLCAweGZkLCAweGVkLAotMHhmZiwgMHhmYiwgMHhkZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4MWYsIDB4ZWYsIDB4ZmYsIDB4YmYsIDB4MDMsIDB4N2MsIDB4ZmYsCi0weGZmLCAweGNmLCAweDczLCAweGJjLCAweDdmLCAweGZkLCAweGZjLCAweGZmLAotMHhjYywgMHhlZiwgMHg0ZSwgMHhmZiwgMHhmYywgMHhkZiwgMHhmMSwgMHhjZiwKLTB4ZjMsIDB4ZWMsIDB4NzcsIDB4ZjcsIDB4Y2YsIDB4N2YsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGViLCAweGZlLCAweGJmLCAweGZmLCAweGJmLCAweDdmLAotMHhkZiwgMHhmZiwgMHhmOSwgMHhmZiwgMHg2ZiwgMHhmNywgMHhmZiwgMHhmZiwKLTB4ZGYsIDB4ZjcsIDB4ZGYsIDB4ZWQsIDB4ZmYsIDB4ZWYsIDB4YWUsIDB4ZmYsCi0weDdkLCAweGZiLCAweDdmLCAweGY3LCAweGRmLCAweGZkLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHg3ZiwgMHhmZiwgMHhmZSwgMHg1ZiwKLTB4ZWIsIDB4ZjksIDB4ZmQsIDB4N2YsIDB4NWYsIDB4YTcsIDB4ZmYsIDB4ZDcsCi0weGY3LCAweGZkLCAweGZmLCAweGY5LCAweGZhLCAweDE1LCAweGI3LCAweGZkLAotMHhmNywgMHhmYiwgMHg5ZiwgMHhlYiwgMHhlZiwgMHhlZiwgMHhmZiwgMHg4ZiwKLTB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZWUsIDB4MjcsIDB4ZmYsIDB4ZmYsCi0weGZiLCAweGZlLCAweGRlLCAweDM3LCAweGVkLCAweGZmLCAweDdjLCAweGZmLAotMHhkZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHg4ZSwgMHhlOSwgMHhhOCwKLTB4ZGYsIDB4YmYsIDB4ZWYsIDB4ZmEsIDB4NWUsIDB4ZGYsIDB4ZjcsIDB4ZmYsCi0weGQ3LCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGJkLCAweGExLCAweGZmLAotMHhmZiwgMHhmZSwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHhmZiwKLTB4ZGQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4Y2QsIDB4ZmYsCi0weGZmLCAweGZmLCAweGQ3LCAweGZiLCAweGZjLCAweGZmLCAweGRmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKLTB4OGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZjksCi0weGIxLCAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGQ3LAotMHhkZiwgMHhiZCwgMHg1YywgMHhjZiwgMHgzZSwgMHhjZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZjLCAweDM2LCAweGJmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDNmLAotMHhjZiwgMHg5MywgMHhmYywgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwKLTB4NjksIDB4YmYsIDB4ZjMsIDB4Y2QsIDB4ZWEsIDB4ZmIsIDB4Y2IsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZiLCAweGNmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZCwgMHg3YywgMHhmNywgMHhmZiwgMHhmZiwgMHhmOSwgMHhhZiwKLTB4ZmIsIDB4Y2EsIDB4ZGUsIDB4YWYsIDB4ZWYsIDB4ZmYsIDB4ZmIsIDB4ZjQsCi0weGJjLCAweGZmLCAweGZiLCAweDU2LCAweGI5LCAweGZhLCAweDdlLCAweGQyLAotMHhmMywgMHhmNywgMHhlZiwgMHhmZiwgMHhkMiwgMHhmNSwgMHhiZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmMsIDB4OWIsIDB4ZmYsIDB4ZmUsIDB4N2YsCi0weDk1LCAweGZkLCAweGYzLCAweDVmLCAweGNmLCAweGY3LCAweGZmLCAweGZmLAotMHg3ZSwgMHhkNywgMHg5ZiwgMHhmZiwgMHhmOSwgMHhkNywgMHhmZiwgMHhjZiwKLTB4ZjksIDB4NWUsIDB4N2YsIDB4YjcsIDB4ZmYsIDB4ZjksIDB4NWUsIDB4ZGYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGViLCAweGZmLCAweGZmLAotMHhmZiwgMHhmNCwgMHhmZiwgMHhhYywgMHhjOSwgMHhkMiwgMHg2YywgMHhiYiwKLTB4N2YsIDB4ZWYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4N2QsIDB4NWIsIDB4ZGQsCi0weGZmLCAweGZmLCAweGU5LCAweGZmLCAweGYwLCAweGIzLCAweDc3LCAweGU5LAotMHhlMiwgMHhmNSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHg2ZiwKLTB4ZmYsIDB4ZmYsIDB4ZjUsIDB4OWYsIDB4ZjcsIDB4YTksIDB4M2UsIDB4NDcsCi0weDlmLCAweGZmLCAweGZkLCAweGRmLCAweGY3LCAweGZkLCAweDRkLCAweDdmLAotMHg1YSwgMHgzZCwgMHg2ZiwgMHg3OSwgMHgzZSwgMHhmNywgMHg5NiwgMHhhZiwKLTB4ZmQsIDB4MzQsIDB4NWQsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsCi0weGU3LCAweGZmLCAweGZmLCAweGZmLCAweGZhLCAweGZlLCAweGI3LCAweGFmLAotMHhhOSwgMHhlYSwgMHhkZiwgMHhmZiwgMHhiZiwgMHhlYiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZWIsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4YWYsIDB4YmYsIDB4ZWEsCi0weGZmLCAweGZkLCAweDJmLCAweGViLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZSwgMHhlOSwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg1ZiwgMHhkZiwKLTB4ZjQsIDB4ZmQsIDB4M2IsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZmQsIDB4N2YsCi0weGZmLCAweGY1LCAweGZkLCAweDdmLCAweGZmLCAweGRmLCAweGY0LCAweGZkLAotMHhmZiwgMHg1ZiwgMHhmYiwgMHhhNCwgMHhmZCwgMHg3ZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZjksIDB4MmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weDdmLCAweGM3LCAweGRmLCAweGY3LCAweGJmLCAweDdmLCAweGZmLCAweGZiLAotMHg3ZiwgMHhmZiwgMHhiZiwgMHg1ZiwgMHhmYywgMHhmZiwgMHg5ZiwgMHhlZiwKLTB4ZGIsIDB4N2UsIDB4ZGYsIDB4N2YsIDB4NmYsIDB4ZGIsIDB4N2QsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGRmLCAweDE3LCAweGZlLCAweGZmLCAweGZmLAotMHhlZiwgMHhkYiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlZiwgMHhkYiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZTcsIDB4ZmYsIDB4MmIsIDB4ZmYsCi0weGZmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGVlLCAweGJmLCAweGJmLAotMHg2ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlNiwgMHg3ZiwgMHhlZSwKLTB4ZmQsIDB4YmMsIDB4NmUsIDB4ZGIsIDB4YjYsIDB4N2YsIDB4YjMsIDB4NmYsCi0weGJiLCAweGZlLCAweGRmLCAweGI3LCAweGVkLCAweGY5LCAweGQ3LCAweGJiLAotMHhlZiwgMHhkYiwgMHhkNiwgMHg3ZiwgMHhiZiwgMHg2ZiwgMHhmOSwgMHhiZSwKLTB4NmYsIDB4YmUsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmQsIDB4ZmEsIDB4OWIsCi0weGZmLCAweGZmLCAweDdmLCAweGVmLCAweDliLCAweGU2LCAweGZmLCAweGZmLAotMHhkZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwKLTB4ZmMsIDB4ZWYsIDB4ZjcsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4NmYsIDB4YmIsCi0weGZlLCAweGZmLCAweGJlLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweGJkLAotMHg5YiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZCwgMHhmZiwgMHg3ZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZiLCAweGY3LCAweGVmLCAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGY3LAotMHhmZSwgMHhmZSwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZWYsIDB4ZmEsIDB4NWYsIDB4ZmYsIDB4ZmIsIDB4N2YsIDB4ZGYsIDB4ZmYsCi0weGZkLCAweDNmLCAweGZmLCAweGRmLCAweGZmLCAweGZkLCAweDdmLCAweGZmLAotMHhkNywgMHhiNCwgMHg2ZiwgMHhkZiwgMHhmNywgMHhmZCwgMHhmZCwgMHgzZiwKLTB4ZGYsIDB4ZmYsIDB4ZjQsIDB4N2QsIDB4M2IsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZhLCAweGZmLCAweDZmLCAweGZmLCAweGZmLCAweGRkLCAweGZlLAotMHhhZSwgMHhlZiwgMHhhZiwgMHg3ZiwgMHhkZSwgMHhhZiwgMHhmZiwgMHhhNywKLTB4ZmYsIDB4ZmEsIDB4N2UsIDB4OGYsIDB4ZmMsIDB4YjMsIDB4N2YsIDB4ZGYsCi0weGFmLCAweGZkLCAweGZlLCAweGI2LCAweGJmLCAweGFmLCAweGZlLCAweGJmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkMSwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmQsIDB4ZDcsIDB4ZjUsIDB4ZmIsIDB4ZmYsIDB4NWUsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZlLCAweDVlLCAweGI3LCAweGZiLCAweGZmLCAweGRlLAotMHhmZiwgMHhmNSwgMHhkYiwgMHhmYiwgMHg1ZCwgMHhkMywgMHhmNSwgMHhlZiwKLTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4M2YsIDB4ZmYsCi0weGZlLCAweDdmLCAweDlmLCAweGUyLCAweGY4LCAweGJlLCAweDdmLCAweDliLAotMHhlNywgMHhmOSwgMHhmYywgMHg3ZiwgMHg4YiwgMHhlNiwgMHg3OSwgMHhmZiwKLTB4OGIsIDB4ZTcsIDB4ZjgsIDB4YmUsIDB4N2YsIDB4OGIsIDB4ZTIsIDB4ZjgsCi0weGJlLCAweDZmLCAweDlmLCAweGU3LCAweGY5LCAweGZlLCAweDdmLCAweGI3LAotMHhmZiwgMHhmZiwgMHhmZSwgMHhmZCwgMHg3ZiwgMHhmZiwgMHhmNywgMHhmZSwKLTB4N2YsIDB4ZmYsIDB4ZWYsIDB4ZDcsIDB4ZWYsIDB4ZmQsIDB4M2YsIDB4NGYsCi0weGZmLCAweGZmLCAweDdmLCAweGVmLCAweGQ3LCAweGZlLCAweGZmLCAweGZmLAotMHg0NywgMHhkNywgMHhmZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZWEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZWYsIDB4ZmEsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweGZhLCAweGZmLCAweGZmLCAweGE3LAotMHhlYiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZCwgMHhmYSwgMHhmZiwgMHhkZiwKLTB4ZWYsIDB4ZWIsIDB4ZmEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGY2LCAweGRmLCAweGZlLCAweGZmLCAweGZiLCAweGZkLCAweGZmLAotMHhmZiwgMHhkZiwgMHhkZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwKLTB4ZmQsIDB4ZmYsIDB4M2YsIDB4YmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZGYsCi0weGZmLCAweGZmLCAweGZmLCAweDdmLCAweGRmLCAweGY3LCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHg5YiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwKLTB4YjcsIDB4YmQsIDB4ZWIsIDB4ZmIsIDB4N2YsIDB4YjcsIDB4ZjcsIDB4ZmYsCi0weGRmLCAweGZmLCAweDlmLCAweGVkLCAweGZmLCAweGRlLCAweGZmLCAweGY3LAotMHhlYiwgMHhmZiwgMHg3ZiwgMHhiNywgMHhhNywgMHhlZiwgMHhmYSwgMHhkZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4MmYsIDB4ZmYsIDB4ZmYsCi0weGFmLCAweGZiLCAweGZmLCAweGZjLCAweGJmLCAweDdmLCAweGQ5LCAweGZmLAotMHg3ZCwgMHgxZiwgMHhmZiwgMHhkZiwgMHhmYywgMHhmZiwgMHgyZiwgMHhkMywKLTB4ZjYsIDB4YmMsIDB4YmYsIDB4NmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4OWQsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweGVmLCAweGZiLAotMHhmYSwgMHhmZSwgMHhiZiwgMHhhZiwgMHhlYiwgMHhiYSwgMHhiNiwgMHhiZiwKLTB4YWYsIDB4ZWIsIDB4ZGEsIDB4ZmUsIDB4YWQsIDB4OGIsIDB4ZTMsIDB4NGUsCi0weGI3LCAweGFkLCAweGViLCAweDU4LCAweGQ2LCAweGJmLCAweGFiLCAweGViLAotMHhiYSwgMHhmZSwgMHhiZiwgMHhhZiwgMHhlYiwgMHhmYSwgMHhmZiwgMHhjOSwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4N2YsIDB4ZmYsIDB4ZWYsIDB4ZmIsCi0weDNlLCAweDM3LCAweGJmLCAweGZmLCAweGZmLCAweGY3LCAweGY3LCAweGYzLAotMHhiZiwgMHhmNywgMHhiZiwgMHhjZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHhmNywKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsCi0weGY5LCAweDFmLCAweGZmLCAweGZkLCAweGJmLCAweDdmLCAweGZmLCAweDdmLAotMHhmZiwgMHhhZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKLTB4N2EsIDB4ZmIsIDB4ZmUsIDB4YmYsIDB4YjcsIDB4YWYsIDB4ZmUsIDB4ZmYsCi0weDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZkLAotMHhmZiwgMHhkZSwgMHg4NSwgMHhmYiwgMHhmZiwgMHhmZCwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGY3LCAweGRkLCAweGVmLCAweGJmLCAweDNmLCAweGZmLCAweGYzLCAweGZmLAotMHhmZiwgMHgyZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZWMsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGFmLCAweGViLCAweGZlLCAweGZlLCAweDc5LCAweGVmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhiZiwgMHg3ZiwgMHhmZSwgMHgzZCwgMHhhZiwgMHg2OCwKLTB4Y2IsIDB4M2EsIDB4NWYsIDB4ZWUsIDB4YWIsIDB4ZmIsIDB4ZmEsIDB4N2YsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY4LCAweDlmLCAweGZmLCAweGZmLAotMHg1ZiwgMHhmNSwgMHhkZiwgMHg3NywgMHhiZiwgMHhmZiwgMHhmYiwgMHhmZiwKLTB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZGYsIDB4MWYsIDB4ZGQsCi0weGRmLCAweDc2LCAweGVkLCAweGZmLCAweGVmLCAweGZkLCAweDdlLCAweGRkLAotMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg5MSwgMHhmZiwKLTB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZGYsIDB4YmYsIDB4ZjMsIDB4ZmUsIDB4ZWYsCi0weGJiLCAweGZiLCAweGZmLCAweGZmLCAweDdmLCAweGJmLCAweGNkLCAweGVlLAotMHhmZSwgMHgzZiwgMHg4ZiwgMHhmYiwgMHhmZSwgMHhlZSwgMHhiYiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZTMsCi0weDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGI2LCAweGZkLCAweGJmLAotMHgzZiwgMHhjZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkYiwgMHhmNywKLTB4ZmQsIDB4N2QsIDB4ZmYsIDB4ZjUsIDB4ZmMsIDB4ZmYsIDB4MTcsIDB4Y2UsCi0weGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHg2ZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhiZCwKLTB4ZWYsIDB4ZmIsIDB4ZjYsIDB4ZmYsIDB4ZjMsIDB4ZmYsIDB4ZmYsIDB4NWUsCi0weDZmLCAweGFkLCAweGI5LCAweGJmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAotMHhiYiwgMHhmZCwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZDUsIDB4ZjcsIDB4ZmYsIDB4ZmMsIDB4YmYsIDB4ZmYsCi0weGRmLCAweGZmLCAweGY4LCAweGZiLCAweGZmLCAweGZmLCAweGZlLCAweDVmLAotMHhmZiwgMHhmYiwgMHhmYiwgMHhmNywgMHhjZSwgMHgxZiwgMHhmYiwgMHhlMiwKLTB4ZGYsIDB4ZWYsIDB4YjksIDB4ZmUsIDB4ZmUsIDB4N2YsIDB4ZjcsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweGJlLCAweGZmLCAweGZmLCAweGRmLAotMHhmZiwgMHhmYiwgMHhmOSwgMHhmZiwgMHg5ZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmEsIDB4ZmYsIDB4ZmIsIDB4ZmYsCi0weGU3LCAweGRmLCAweDdmLCAweDc3LCAweGZmLCAweGZiLCAweGZiLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4MywgMHhiZiwgMHhmZiwKLTB4ZmIsIDB4ZmYsIDB4ZjcsIDB4ZmQsIDB4MzMsIDB4ZmYsIDB4ZmQsIDB4N2YsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLAotMHg3ZiwgMHhkYiwgMHhjNywgMHg1ZCwgMHg3ZiwgMHgxYiwgMHhmNywgMHhmMywKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjYsIDB4YmYsCi0weGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZlLCAweGZhLCAweGZmLCAweGY5LAotMHhlYiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmNywgMHhmZiwgMHhmYiwgMHhmZiwKLTB4ZjcsIDB4Y2QsIDB4NzksIDB4ZWUsIDB4ZjYsIDB4M2YsIDB4ZjcsIDB4ZmYsCi0weGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY4LAotMHg1ZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhkNywgMHg3ZiwKLTB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsCi0weGZmLCAweGZkLCAweGZkLCAweGZjLCAweGRmLCAweGRkLCAweGZkLCAweGY3LAotMHhmZiwgMHhmZiwgMHg1ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZDgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weDNmLCAweGZmLCAweGZmLCAweGRmLCAweGYzLCAweGZkLCAweGZmLCAweGZmLAotMHhmZiwgMHhmMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4M2YsIDB4ZmYsIDB4YmYsIDB4M2YsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGM5LCAweDZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4OWYsIDB4YmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGVmLCAweGRmLCAweGYzLCAweGZjLCAweGZmLCAweDdmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhkNywgMHg2ZiwgMHg3ZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmMsIDB4YjcsIDB4ZmYsIDB4ZmYsIDB4ZjQsIDB4YmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweDlmLCAweGU3LAotMHhmZiwgMHhmZiwgMHg1YiwgMHhmZiwgMHhmZSwgMHhiZCwgMHgyNywgMHhlZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZDEsIDB4YmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweDM2LCAweGZmLCAweGZmLCAweGZlLAotMHhkNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYywgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmMsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4N2UsIDB4ZDcsIDB4YjYsCi0weGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGQ5LCAweGI3LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYSwgMHhmZSwgMHhiNywgMHhhZiwKLTB4ZWIsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWIsIDB4ZmYsIDB4N2YsCi0weGFmLCAweGZiLCAweGZmLCAweGY1LCAweGZlLCAweDdmLCAweGViLCAweDQyLAotMHg3OSwgMHhiYiwgMHgzZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4NDYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NTcsIDB4ZDYsCi0weGY1LCAweDdkLCAweDVmLCAweGY3LCAweGZmLCAweGZmLCAweGZkLCAweDVmLAotMHg3ZSwgMHhiNSwgMHg3ZiwgMHhkZSwgMHhmNywgMHhmZCwgMHg4ZiwgMHg2OSwKLTB4NmUsIDB4NGQsIDB4MWYsIDB4ZjcsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweDdhLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGViLAotMHhmYSwgMHhmZSwgMHhiZiwgMHhhZiwgMHhlYiwgMHhmZiwgMHhmNSwgMHhmZiwKLTB4YWYsIDB4ZmYsIDB4ZGUsIDB4YmYsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZmYsCi0weGY3LCAweGFkLCAweGFiLCAweGZhLCAweGZlLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmYSwgMHgxZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmQsIDB4N2YsIDB4NWYsIDB4ZDcsIDB4ZjUsIDB4ZTksIDB4N2YsIDB4ZmYsCi0weGZmLCAweGY1LCAweGZmLCAweGYxLCAweGQ3LCAweGZmLCAweGZkLCAweGZmLAotMHg3ZiwgMHhmZiwgMHhhNSwgMHhmZCwgMHgzZiwgMHg3ZiwgMHhkZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjMsIDB4ZmUsIDB4ZGYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhkZiwgMHhlNywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZjcsIDB4ZjcsIDB4ZmYsIDB4N2YsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweDdmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmOSwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmUsCi0weDdmLCAweGJmLCAweGZmLCAweGZhLCAweGZmLCAweGJmLCAweGJmLCAweGZmLAotMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHg4NywKLTB4ZmYsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4NmYsIDB4ZmIsCi0weDdlLCAweGZmLCAweGI3LCAweGVmLCAweGZiLCAweGZlLCAweGZmLCAweGJjLAotMHg3YiwgMHhmNiwgMHhlZiwgMHhiZiwgMHhlZSwgMHhkYiwgMHhmNiwgMHhmOSwKLTB4OWYsIDB4ZWYsIDB4ZmIsIDB4N2UsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmYsCi0weDg5LCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGNmLAotMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZWYsIDB4ZmMsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZjMsIDB4ZmMsCi0weGY5LCAweGZmLCAweGVmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhkYSwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGVmLCAweGZmLCAweGJmLCAweGRmLCAweGY3LCAweGZlLAotMHhmZiwgMHhiZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MjUsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZmYsCi0weGZmLCAweGZlLCAweGZmLCAweGZmLCAweGVmLCAweDdmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZSwgMHhjZiwgMHhlZiwgMHhmZiwgMHhmYiwgMHhkZSwKLTB4YjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJlLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhkYiwgMHhiZiwgMHhmZiwgMHhlNywgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZjcsIDB4ZGYsIDB4ZjcsCi0weGZkLCAweGRmLCAweDdkLCAweGRmLCAweGJiLCAweGViLCAweGRmLCAweGFmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg1ZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmQsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDlmLAotMHhhZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZCwgMHg3YiwKLTB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YTMsCi0weGZmLCAweGZmLCAweGU3LCAweGY5LCAweGZlLCAweDdmLCAweDhmLCAweGU3LAotMHhmOSwgMHhiZSwgMHg3ZiwgMHg5ZiwgMHhlNywgMHhmOSwgMHhmZSwgMHg3ZiwKLTB4OWUsIDB4ZjksIDB4ZmUsIDB4N2YsIDB4OWYsIDB4ZTcsIDB4ZjgsIDB4ZmUsCi0weDJmLCAweDFiLCAweGU3LCAweGY5LCAweGZlLCAweDdmLCAweDlmLCAweGU3LAotMHhmNSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZSwgMHhmZCwKLTB4N2YsIDB4ZWYsIDB4ZjMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsCi0weGZjLCAweDdmLCAweGZmLCAweGZiLCAweGZlLCAweDdmLCAweGJmLCAweGU3LAotMHhkNywgMHhmZCwgMHhlYiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZGUsIDB4NmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsCi0weGRmLCAweGFmLCAweGZkLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmNywKLTB4ZWYsIDB4ZmEsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGNkLCAweGZmLCAweGVmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhjZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZjksIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZkLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwKLTB4ZjcsIDB4ZmYsIDB4ZmYsIDB4N2UsIDB4ZjcsIDB4ZjcsIDB4ZjksIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweDdmLCAweGVmLCAweGVkLAotMHhmZiwgMHg3ZiwgMHhkZiwgMHhmNywgMHhlZiwgMHg3YiwgMHhmNiwgMHhiNywKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjMsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweGZkLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg2ZiwgMHhmZiwKLTB4ZmQsIDB4YWYsIDB4N2YsIDB4ZGYsIDB4ZjYsIDB4N2MsIDB4YmYsIDB4NzMsCi0weGRiLCAweGY0LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVjLAotMHhmZCwgMHhmZiwgMHhhYiwgMHhlYiwgMHhmYSwgMHhiZSwgMHhiZiwgMHhhZiwKLTB4ZWIsIDB4ZmEsIDB4ZmUsIDB4YmYsIDB4YWYsIDB4ZWIsIDB4ZmEsIDB4ZmUsCi0weGFkLCAweGViLCAweDdhLCAweGRlLCAweGJkLCAweGFlLCAweGNiLCAweDMyLAotMHhmNCwgMHhiNywgMHhhZiwgMHhlYiwgMHhmYSwgMHhmZSwgMHhiZiwgMHhhZiwKLTB4ZjUsIDB4MWIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZkLCAweGZmLCAweDNmLCAweGZmLCAweGZmLCAweGZjLAotMHg3OCwgMHhkZiwgMHhmZiwgMHhmMywgMHhmZSwgMHhmZiwgMHhmZiwgMHg5ZCwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZkLCAweGM5LCAweGZkLCAweGZmLCAweGY3LCAweGZkLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhhZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmUsIDB4YmYsIDB4ZjksIDB4ZGYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGVmLCAweGY5LCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhlMiwgMHg1ZiwgMHhmZiwgMHhmZCwgMHhmNywKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjUsIDB4ZmYsCi0weGZmLCAweGVmLCAweGZmLCAweGZmLCAweGRjLCAweGVmLCAweGJmLCAweGJlLAotMHhiZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4YTcsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGRmLCAweGE3LCAweGZkLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZSwKLTB4ZmUsIDB4YWYsIDB4ZWYsIDB4YTcsIDB4ZjgsIDB4ZmUsIDB4M2YsIDB4ZWYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGUxLCAweGZmLAotMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNSwgMHhkZiwgMHhmZiwKLTB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4N2IsCi0weGY1LCAweGJkLCAweGZiLCAweDdmLCAweGJmLCAweGZmLCAweGJmLCAweGVmLAotMHg3ZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZSwKLTB4MWYsIDB4ZGYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGViLCAweGZmLCAweGZmLCAweGZmLAotMHhmYSwgMHhmZiwgMHhmZiwgMHhmYSwgMHhmZSwgMHhiZiwgMHhlZiwgMHg3YSwKLTB4ZmYsIDB4YmUsIDB4ZWYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsCi0weGZmLCAweDk2LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwKLTB4ZmYsIDB4ZmIsIDB4ZGYsIDB4NzcsIDB4ZmYsIDB4NmYsIDB4OWUsIDB4ZjMsCi0weGZjLCAweGVmLCAweDVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmNCwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGFiLCAweGY3LCAweGZmLCAweGVkLCAweGZiLAotMHg2ZiwgMHhiZiwgMHhlYiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZjMsIDB4ZmQsIDB4NWYsIDB4N2YsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGVmLCAweGZmLCAweDNmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHg4ZiwgMHg3ZiwgMHhiZiwgMHhmZiwKLTB4ZmYsIDB4ZmQsIDB4NGYsIDB4ZjMsIDB4ZmMsIDB4ZmQsIDB4M2YsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJiLCAweGVmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4YmYsCi0weGZmLCAweGZiLCAweGZmLCAweGZkLCAweGZmLCAweDdkLCAweGRkLCAweGY3LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmMCwgMHg3ZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWUsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHg1ZCwgMHhmZiwgMHhhZiwgMHhlMywgMHhmZiwgMHgxZiwgMHhjNywgMHhmOSwKLTB4ZmUsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weDA3LCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4Y2EsIDB4YmYsIDB4ZmIsIDB4YmYsIDB4ZWYsIDB4ZmIsIDB4ZmUsCi0weGZmLCAweDNiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhiMSwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwKLTB4YmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsCi0weGY3LCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGVmLCAweGZiLCAweGZlLAotMHhkZiwgMHhkNywgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZWYsIDB4ZmUsIDB4MGIsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlNywKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZlLCAweGQ0LCAweGZmLCAweGZmLCAweGY3LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZlLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhlNiwgMHhkNywgMHhmZiwKLTB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGJmLAotMHhmZiwgMHhmZiwgMHg5ZiwgMHhmZiwgMHhiYywgMHhhZiwgMHg0YiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjMsIDB4YmUsIDB4Y2IsCi0weGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmMywKLTB4ZDcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4NWYsIDB4YjUsIDB4ZmQsCi0weDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweDdkLAotMHhkOSwgMHg3ZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweDRmLCAweGQyLCAweGM5LAotMHhiZCwgMHgzZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZWEsIDB4MmQsIDB4ZmYsIDB4ZmYsIDB4NzcsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHg3YiwgMHhkZiwKLTB4NWEsIDB4OWYsIDB4YTcsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGY3LCAweDRkLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHg1ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWIsIDB4ZmYsIDB4ZmYsIDB4ZmUsCi0weGZmLCAweGViLCAweGZhLCAweGRlLCAweGJmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4MCwgMHhmZiwgMHhmZiwgMHhmZCwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4Y2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweDdmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZCwgMHg3ZiwgMHg1ZiwgMHhkNywgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4YmYsIDB4ZWYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4M2YsIDB4YzcsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweDA3LAotMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZlLCAweDdmLCAweGZmLCAweGZiLCAweGRlLAotMHhmZSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZTgsIDB4N2YsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmIsIDB4ZmUsCi0weGZmLCAweGJmLCAweGVmLCAweGZiLCAweGZlLCAweGZmLCAweGJmLCAweGVmLAotMHhmYiwgMHhmZiwgMHhiZiwgMHhlZiwgMHg1YiwgMHhmNiwgMHhmZCwgMHhiZiwKLTB4NmYsIDB4ZGIsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmIsIDB4ZmUsCi0weGZmLCAweGZiLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmQsCi0weGZlLCAweGRmLCAweDliLCAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhkMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4N2YsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGY1LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZmYsIDB4ZWYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZmLCAweGFmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmUsIDB4OWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjksCi0weGZmLCAweGZkLCAweGRkLCAweDc3LCAweDZhLCAweGZiLCAweGFlLCAweGVmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYywKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGQ3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhlZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmMywgMHhmZCwKLTB4ZDcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGYzLCAweDNmLCAweGZmLCAweGZlLCAweDdmLCAweDlmLCAweGU3LCAweGY5LAotMHhmZSwgMHg3ZiwgMHg5ZiwgMHhlMiwgMHhlOSwgMHhmZSwgMHg3ZiwgMHg5ZiwKLTB4ZTcsIDB4ZjksIDB4ZWYsIDB4OWYsIDB4ZTYsIDB4ZTksIDB4YmUsIDB4NmYsCi0weDFmLCAweGUyLCAweGU5LCAweGZlLCAweDdmLCAweDlmLCAweGU3LCAweGY5LAotMHhmZSwgMHg3ZiwgMHg2NywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmNywgMHhmOSwgMHg3ZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwKLTB4ZWYsIDB4ZmUsIDB4ZmQsIDB4YmYsIDB4ZWYsIDB4ZWYsIDB4N2YsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YjcsIDB4ZmYsCi0weGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweGY3LCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgzYiwgMHhmZSwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotMHhmZiwgMHhmZiwgMHhmZSwgMHhmZCwgMHhmZiwgMHhkNiwgMHhmNywgMHhiZCwKLTB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjQsCi0weDNmLCAweGZmLCAweGZmLCAweDRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZWYsIDB4ZmUsIDB4ZmYsIDB4ZjIsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGYyLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhlZSwgMHg4ZiwgMHhmZiwgMHhmYSwgMHhmZSwgMHhiZiwgMHhhYiwgMHhlYiwKLTB4ZmEsIDB4YmUsIDB4YmYsIDB4YWIsIDB4Y2IsIDB4ZmEsIDB4YmUsIDB4YmYsCi0weGFmLCAweGViLCAweGRlLCAweGFmLCAweGFmLCAweGViLCAweGRhLCAweGRlLAotMHhhZiwgMHhhZSwgMHhlYSwgMHhmYSwgMHhkZSwgMHhiZiwgMHhhZiwgMHhlYiwKLTB4ZmEsIDB4ZmYsIDB4YzUsIDB4ZmYsIDB4ZmYsIDB4ZmEsIDB4ZmQsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhlZiwKLTB4ZmYsIDB4ZGQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGVmLCAweGZmLCAweGY4LCAweDlmLCAweGZmLCAweGZmLCAweGZmLAotMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZSwgMHg2NSwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLAotMHhmZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZjIsIDB4N2YsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhlMywgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZCwgMHhmZiwgMHg3ZiwKLTB4ZGYsIDB4ZjcsIDB4ZTMsIDB4ZmUsIDB4N2YsIDB4OWYsIDB4YWUsIDB4ZWQsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHg5ZiwgMHhmZiwgMHhmYiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCi0weGZmLCAweDdkLCAweGRmLCAweGRkLCAweGZmLCAweGJmLCAweDdmLCAweGVhLAotMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZTEsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhlNywgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwKLTB4N2YsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsCi0weGZmLCAweGZmLCAweGYxLCAweDdmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZDcsIDB4ZmIsIDB4N2QsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmIsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDVmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhjZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweDlmLCAweDdmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZDUsIDB4ZmYsIDB4YmYsCi0weGJmLCAweGZmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNCwgMHhmZiwKLTB4ZmYsIDB4YzcsIDB4ZGYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZkLCAweGJmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmUsCi0weGY3LCAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4YjcsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmUsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmMywgMHhlYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhkZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZlLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmIsIDB4ZmYsIDB4ZWYsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZGYsCi0weGY3LCAweGZkLCAweGZmLCAweDdmLCAweGRmLCAweGY3LCAweGZiLCAweGZmLAotMHhmZiwgMHhmNywgMHhmYSwgMHhkZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhiZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YjAsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhlNywgMHhmOSwgMHhmZiwgMHhmZiwgMHhmNSwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGM2LCAweDZiLCAweGZjLAotMHhmZiwgMHgzYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4YmYsIDB4YWYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkNywgMHhjZiwKLTB4N2YsIDB4ZWYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsCi0weGZkLCAweGJmLCAweGY3LCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotMHhmZiwgMHhkYiwgMHgzNywgMHhmZiwgMHhiZCwgMHg2ZiwgMHhkZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGViLCAweGZhLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhhZiwgMHhlZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4YmYsIDB4YTYsIDB4ZmYsIDB4ZGQsIDB4YTcsIDB4NzcsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZCwgMHg1ZiwgMHg1NywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjUsIDB4N2QsCi0weGRmLCAweGZmLCAweGZmLCAweGZmLCAweDdhLCAweGRmLCAweGZlLCAweGZmLAotMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YWYsIDB4ZWIsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotMHhiZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmOCwgMHhkZiwgMHhmZiwKLTB4N2YsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY1LCAweGZkLCAweDdmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZDcsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZDMsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmIsIDB4N2UsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY5LAotMHhmNSwgMHg3ZiwgMHhlZiwgMHhmOSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweDlmLCAweGViLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4YmUsIDB4MDcsIDB4ZmUsIDB4ZWQsIDB4ZmIsIDB4ZmUsIDB4ZmYsCi0weGJmLCAweGVmLCAweGZiLCAweGZlLCAweGZmLCAweGJmLCAweGVmLCAweGZiLAotMHhmZSwgMHhmZiwgMHhiNywgMHhmYiwgMHhmZSwgMHhmZiwgMHhiZSwgMHhlZiwKLTB4ZmIsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4ZmYsCi0weGJmLCAweGVmLCAweGZmLCAweGIxLCAweGJmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZSwgMHhiZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZDUsIDB4ZmYsCi0weGQ3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZWQsIDB4N2YsIDB4NWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweDVmLCAweGZmLCAweGZmLCAweGY0LAotMHhmZiwgMHhmYSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGE3LCAweGU5LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlOSwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4MWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhlZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4N2YsCi0weGZmLCAweGZmLCAweGViLCAweGZmLCAweGZmLCAweGU3LCAweGY5LCAweGZlLAotMHg3ZiwgMHg5ZiwgMHhlNywgMHhmOSwgMHhmZSwgMHg3ZiwgMHg5ZiwgMHhlNywKLTB4ZjksIDB4ZmUsIDB4N2YsIDB4OWYsIDB4ZjksIDB4ZmUsIDB4N2YsIDB4MWYsCi0weGU3LCAweGY5LCAweGZlLCAweDdmLCAweDlmLCAweGU3LCAweGU5LCAweGZlLAotMHgyZiwgMHg5ZiwgMHhlNywgMHhlMywgMHg3ZiwgMHhmZCwgMHg3ZiwgMHhmZiwKLTB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGQ3LCAweGY0LAotMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4NGYsIDB4ZmYsIDB4YWYsCi0weGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmYSwKLTB4ZmUsIDB4OWQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVkLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwKLTB4M2YsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweGZmLAotMHg3ZiwgMHhmNywgMHhmZCwgMHhmZiwgMHg3NywgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweDgzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwKLTB4ZmIsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZjksIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY1LCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhjMCwgMHhkZCwgMHhmZiwgMHhhZCwgMHhlYiwgMHg3YSwKLTB4ZmUsIDB4YmYsIDB4YWQsIDB4ZWIsIDB4ZmEsIDB4ZmUsIDB4YmYsIDB4YWYsCi0weGViLCAweGZhLCAweGZlLCAweDhmLCAweGU5LCAweDdhLCAweGJlLCAweGFmLAotMHhhZiwgMHhlYSwgMHhmYSwgMHhmZSwgMHhiZiwgMHgyYiwgMHhlYiwgMHhkYSwKLTB4ZmUsIDB4YmYsIDB4YWYsIDB4ZmQsIDB4NWYsIDB4ZmQsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY5LCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhhOSwgMHg1ZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweDdmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLAotMHhmYiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmNywgMHhiZiwgMHhlZiwKLTB4ZjMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjksIDB4ZmYsCi0weDQ3LCAweGZkLCAweGY3LCAweGZkLCAweGZmLCAweGZmLCAweGY3LCAweGZlLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4YmYsIDB4YWYsIDB4YmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGJmLCAweGZmLAotMHhmZiwgMHhjMSwgMHhmZiwgMHhmZiwgMHhlNywgMHhmNSwgMHhmZiwgMHhmZCwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGYzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLAotMHhmZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYiwKLTB4ZmYsIDB4ZmIsIDB4ZGYsIDB4MWYsIDB4ZmQsIDB4ZGYsIDB4ZmYsIDB4ZjMsCi0weGZmLCAweGZmLCAweGZmLCAweGVmLCAweGYzLCAweGZjLCAweGZmLCAweGZiLAotMHhmZiwgMHhmYiwgMHhmNiwgMHhmZSwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmQsIDB4N2YsIDB4NWIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweDdmLCAweGZmLCAweGZmLCAweDk3LCAweGZmLCAweGQ3LCAweDc1LAotMHg3ZCwgMHhiZiwgMHg3ZiwgMHhmYiwgMHhmYiwgMHhmZCwgMHhmZiwgMHhmZiwKLTB4ZDMsIDB4ZmYsIDB4ZmQsIDB4YmYsIDB4MmYsIDB4YzQsIDB4ZmYsIDB4YmYsCi0weGZmLCAweGZiLCAweDdmLCAweGJjLCAweGZmLCAweGVmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZSwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGU3LCAweDZmLCAweGY5LCAweGRmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4NWYsCi0weGY3LCAweGY3LCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiNSwKLTB4N2YsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGRmLAotMHhmYiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsCi0weGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4N2QsIDB4ZmYsIDB4NWYsIDB4NWYsIDB4ZDcsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGQ2LCAweDc1LCAweDVmLCAweGY3LCAweGRlLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZCwgMHgzZiwgMHhkZiwgMHhmNywKLTB4NWQsIDB4ZjcsIDB4ZGQsIDB4ZmYsIDB4ZmYsIDB4NWYsIDB4ZmYsIDB4ZmYsCi0weDdmLCAweGZmLCAweGRlLCAweGU3LCAweGRmLCAweDhmLCAweGZiLCAweGZmLAotMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZWIsIDB4ZmUsIDB4ZGYsIDB4YmYsIDB4ZjcsIDB4ZmUsIDB4ZmYsIDB4YmYsCi0weGZmLCAweGZmLCAweGZjLCAweGZmLCAweGJmLCAweGZmLCAweGZiLCAweGZmLAotMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHg5NSwgMHhmNywgMHhmZiwgMHhmZiwKLTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsCi0weGZmLCAweGZkLCAweGZiLCAweGIzLCAweGY3LCAweDZmLCAweGZmLCAweGJmLAotMHhmNywgMHhiZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhkNywgMHhmZiwgMHhmZiwKLTB4NzcsIDB4ZmYsIDB4ZWYsIDB4YmYsIDB4ZmIsIDB4ZmMsIDB4YmIsIDB4ZmYsCi0weDhmLCAweGU3LCAweGY5LCAweDdlLCAweDdmLCAweDliLCAweGU3LCAweGY5LAotMHhmZSwgMHg3ZiwgMHg5ZiwgMHhlNywgMHhmOSwgMHhmZSwgMHg3ZiwgMHhlNywKLTB4ZjksIDB4ZjYsIDB4NWYsIDB4OWYsIDB4ZTcsIDB4ZjksIDB4ZmUsIDB4N2YsCi0weDlmLCAweGU3LCAweGY5LCAweGZlLCAweDdmLCAweDlmLCAweGZjLCAweDE2LAotMHhmZiwgMHhmMywgMHhmYSwgMHhmZiwgMHhiNywgMHhlZCwgMHhmYiwgMHg3ZSwKLTB4ZmYsIDB4YmYsIDB4Y2YsIDB4ZmIsIDB4N2EsIDB4ZmUsIDB4YmYsIDB4Y2YsCi0weGZlLCAweGZlLCAweGJkLCAweGNmLCAweGZiLCAweGZlLCAweGZmLCAweGJmLAotMHhjZiwgMHhmYiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhlZiwgMHhmYiwgMHhmZiwKLTB4YTQsIDB4Y2YsIDB4ZmUsIDB4N2YsIDB4OWQsIDB4ZTcsIDB4ZmIsIDB4ZmUsCi0weGZmLCAweGJmLCAweGU3LCAweGI5LCAweGZlLCAweGZmLCAweGJmLCAweGU3LAotMHg3OCwgMHhmZCwgMHg5ZiwgMHg2NywgMHhmYiwgMHhmOCwgMHhmNSwgMHhhZiwKLTB4NjcsIDB4ZGIsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZWIsIDB4YWMsCi0weGZmLCAweGZlLCAweDlmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKLTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZjcsIDB4N2YsCi0weGZmLCAweGZmLCAweGJmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLAotMHhmZCwgMHhmZiwgMHhmZCwgMHhjMywgMHhmZiwgMHhmYiwgMHhkZSwgMHhmNywKLTB4YmYsIDB4ZWYsIDB4ZmIsIDB4YmUsIDB4ZmYsIDB4YWUsIDB4ZTcsIDB4ZmIsCi0weGZlLCAweGZmLCAweGJkLCAweGU3LCAweGZlLCAweGJkLCAweGJmLCAweGU3LAotMHhmYiwgMHhmZSwgMHhlZiwgMHhiZCwgMHhlZiwgMHhmYiwgMHhmZSwgMHhmZiwKLTB4YmYsIDB4ZWYsIDB4ZmIsIDB4ZmYsIDB4ZmEsIDB4N2YsIDB4ZmMsIDB4ZmYsCi0weDM3LCAweGNmLCAweGYzLCAweGZjLCAweGZmLCAweDNmLCAweGNmLCAweGQzLAotMHg3YywgMHhmZiwgMHgzZiwgMHhjZiwgMHhmMywgMHhmZiwgMHgzZiwgMHhjZiwKLTB4ZjMsIDB4ZmUsIDB4ZWYsIDB4M2YsIDB4Y2YsIDB4ZjMsIDB4ZmMsIDB4ZmYsCi0weDNmLCAweGNmLCAweGZiLCAweGY2LCAweGVmLCAweGZlLCAweDBmLCAweGZmLAotMHhiNywgMHhlZCwgMHhmYiwgMHg3ZSwgMHhmZiwgMHhiZiwgMHg2ZiwgMHhmYiwKLTB4N2UsIDB4ZGIsIDB4YmYsIDB4ZWYsIDB4ZmIsIDB4N2EsIDB4ZGYsIDB4ZWQsCi0weGViLCAweDdlLCAweGZmLCAweGJlLCAweGVmLCAweGRiLCAweDdlLCAweGZmLAotMHhiZiwgMHhjZiwgMHhmYiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhmYiwgMHhlNSwKLTB4ZmYsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZTUsIDB4ZjksIDB4N2UsCi0weDVmLCAweGJmLCAweGVmLCAweGY5LCAweDdlLCAweDVmLCAweGJmLCAweGVmLAotMHhmYSwgMHhmZiwgMHhiZiwgMHhlNSwgMHhmOSwgMHg3ZSwgMHhkZiwgMHhiZiwKLTB4ZTUsIDB4ZjksIDB4N2UsIDB4NWYsIDB4OTcsIDB4ZWQsIDB4ZjksIDB4N2YsCi0weGY5LCAweGJmLCAweGZmLCAweDViLCAweGQ3LCAweGY1LCAweGZkLCAweGZmLAotMHg3ZCwgMHhkZiwgMHhmNSwgMHhmZCwgMHg3ZiwgMHg3ZiwgMHhkYiwgMHhmNSwKLTB4ZmQsIDB4MzcsIDB4ZDcsIDB4ZjUsIDB4N2QsIDB4ZjcsIDB4N2YsIDB4ZDcsCi0weGY1LCAweGZkLCAweGVmLCAweDdiLCAweGRmLCAweGY3LCAweGZkLCAweDdmLAotMHg3ZiwgMHhmZiwgMHg5NywgMHhmZiwgMHhmNywgMHhmZCwgMHhmZiwgMHg3ZiwKLTB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweDdmLCAweGRmLCAweGJkLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotMHhmZCwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZGYsIDB4ZmYsIDB4ZmIsIDB4ZjAsIDB4ZmYsIDB4ZWQsIDB4ZmYsIDB4NmYsCi0weGRiLCAweGY2LCAweGZkLCAweGI3LCAweGVkLCAweGRmLCAweGY3LCAweGZkLAotMHhmZiwgMHg3ZiwgMHhkZSwgMHhmNSwgMHhmYiwgMHg2ZiwgMHhkYiwgMHhmNywKLTB4ZmQsIDB4YmYsIDB4N2QsIDB4ZGIsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4NmYsCi0weGZiLCAweGY3LCAweGZkLCAweGZmLCAweDdlLCAweGRmLCAweGZmLCAweGY3LAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwKLTB4ZGYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsCi0weGZiLCAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkYiwgMHhmZCwKLTB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4N2YsCi0weGQ3LCAweGY3LCAweGZkLCAweGZmLCAweDdkLCAweGRmLCAweGY3LCAweGZmLAotMHg3ZiwgMHhkZiwgMHhmNywgMHhmZCwgMHhmZiwgMHg3ZiwgMHhkZiwgMHhmNywKLTB4ZmQsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4ZjUsCi0weDdiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhkZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsCi0weGZmLCAweGZjLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhhZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsCi0weGZiLCAweGZmLCAweGI3LCAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwKLTB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweGVmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHg3ZiwgMHhmNCwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwKLTB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsCi0weGNmLCAweGZiLCAweGZmLCAweGJlLCAweDNmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg1NywgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZCwgMHhmZiwgMHg3ZiwgMHhkZiwgMHhmZiwgMHhmZCwgMHhmZiwKLTB4N2YsIDB4ZGYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWUsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZlLAotMHg5ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZWYsIDB4OGIsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGY1LCAweDdmLCAweGZmLCAweGZiLCAweGZlLCAweGZmLAotMHhiZiwgMHhlZiwgMHhmYiwgMHhmZSwgMHhmZiwgMHhiZiwgMHhlZiwgMHhmYiwKLTB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmUsIDB4ZmYsIDB4YmYsIDB4ZWYsCi0weGZiLCAweGZlLCAweGZmLCAweGJmLCAweGVmLCAweGZiLCAweGZlLCAweGZmLAotMHhiZiwgMHhlZiwgMHhmYiwgMHhmZSwgMHhjZiwgMHhmZiwgMHhjZiwgMHhmMywKLTB4ZmMsIDB4ZmYsIDB4YmYsIDB4ZWYsIDB4ZmIsIDB4ZmMsIDB4ZmYsIDB4M2YsCi0weGVmLCAweGYzLCAweGZjLCAweGZmLCAweDNmLCAweGIzLCAweGZjLCAweGZmLAotMHgzZiwgMHhlZiwgMHhmMywgMHhmYywgMHhmZiwgMHgzZiwgMHhlZiwgMHhmMywKLTB4ZmUsIDB4ZmYsIDB4M2YsIDB4ZWYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsCi0weGJmLCAweGVmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGZlLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmNywgMHhmZiwKLTB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY4LCAweDNmLAotMHhmZSwgMHhmZSwgMHhiYiwgMHhhZiwgMHhlYiwgMHhmYSwgMHhmZiwgMHhiZiwKLTB4YWUsIDB4ZWIsIDB4YmEsIDB4ZmUsIDB4ZmIsIDB4ZWUsIDB4ZWIsIDB4ZmIsCi0weGJiLCAweGFlLCAweGVmLCAweGJlLCAweGZmLCAweGJiLCAweGVlLCAweGVmLAotMHhiZSwgMHhmZiwgMHhmYiwgMHhlZiwgMHhmYiwgMHhiZSwgMHhlZiwgMHhmZiwKLTB4MTcsIDB4ZmYsIDB4NzUsIDB4YWQsIDB4YWIsIDB4NGEsIDB4YmEsIDB4ZWYsCi0weGViLCAweGFmLCAweDZhLCAweGRhLCAweGFlLCAweGI1LCAweGZiLCAweDdhLAotMHhkMiwgMHhiZCwgMHhhYiwgMHg3YSwgMHg1ZiwgMHhhZiwgMHhlZCwgMHg3YiwKLTB4N2EsIDB4NWYsIDB4YWYsIDB4ZTUsIDB4ZmEsIDB4ZmUsIDB4ZGIsIDB4YmYsCi0weGUyLCAweGQ0LCAweGZmLCAweGZmLApkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2Rhc2Ffc2ltL3UtYm9vdC5sZHMgYi9ib2FyZC9lc2QvZGFzYV9zaW0vdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhmYjM3MC4uMDAwMDAwMAotLS0gYS9ib2FyZC9lc2QvZGFzYV9zaW0vdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLQotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgS0VFUCgqKC5yZXNldHZlYykpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICAuID0gZW52X29mZnNldDsKLSAgICBjb21tb24vZW52X2VtYmVkZGVkLm8JCSgudGV4dCopCi0KLSAgICAqKC50ZXh0KikKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwRkZGKSAmIDB4RkZGRkYwMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgIEtFRVAoKiguZ290MikpCi0gICAgS0VFUCgqKC5nb3QpKQotICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOwotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgIEtFRVAoKiguZml4dXApKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKChfR0xPQkFMX09GRlNFVF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+IDIpIC0gMTsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKikKLSAgICAqKC5zZGF0YSopCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotCi0gIC4gPSBBTElHTig0KTsKLSAgLnVfYm9vdF9saXN0IDogewotCUtFRVAoKihTT1JUKC51X2Jvb3RfbGlzdCopKSk7Ci0gIH0KLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLmJzcyopCi0gICAqKC5zYnNzKikKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9fYnNzX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9wbWM0NDAvcG1jNDQwLmMgYi9ib2FyZC9lc2QvcG1jNDQwL3BtYzQ0MC5jCmluZGV4IGU4Njk5NmMuLjA2MmFlNjcgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9wbWM0NDAvcG1jNDQwLmMKKysrIGIvYm9hcmQvZXNkL3BtYzQ0MC9wbWM0NDAuYwpAQCAtMTIsNyArMTIsNiBAQAogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwogICovCi0KICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxsaWJmZHQuaD4KICNpbmNsdWRlIDxmZHRfc3VwcG9ydC5oPgpAQCAtMzQsMTQgKzMzLDE0IEBACiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCi1leHRlcm4gZmxhc2hfaW5mb190IGZsYXNoX2luZm9bQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1NdOyAvKiBpbmZvIGZvciBGTEFTSCBjaGlwcyAqLworZXh0ZXJuIGZsYXNoX2luZm9fdCBmbGFzaF9pbmZvW0NPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTXTsKIGV4dGVybiB2b2lkIF9fZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpOwogCiB1bG9uZyBmbGFzaF9nZXRfc2l6ZSh1bG9uZyBiYXNlLCBpbnQgYmFua251bSk7Ci1pbnQgcGNpX2lzXzY2bWh6KHZvaWQpOworc3RhdGljIGludCBwY2lfaXNfNjZtaHoodm9pZCk7CiBpbnQgaXNfbW9uYXJjaCh2b2lkKTsKLWludCBib290c3RyYXBfZWVwcm9tX3JlYWQodW5zaWduZWQgZGV2X2FkZHIsIHVuc2lnbmVkIG9mZnNldCwKLQkJCSAgdWNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgY250KTsKK3N0YXRpYyBpbnQgYm9vdHN0cmFwX2VlcHJvbV9yZWFkKHVuc2lnbmVkIGRldl9hZGRyLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkJIHVjaGFyICpidWZmZXIsIHVuc2lnbmVkIGNudCk7CiAKIHN0cnVjdCBzZXJpYWxfZGV2aWNlICpkZWZhdWx0X3NlcmlhbF9jb25zb2xlKHZvaWQpCiB7CkBAIC01OCwyMyArNTcsMjQgQEAKIAlpZiAoKCh2YWwgJiAweGYwMDAwMDAwKSA+PiAyOSkgIT0gNykKIAkJcmV0dXJuICZlc2VyaWFsMl9kZXZpY2U7CiAKLQl1bG9uZyBzY3JhdGNocmVnID0gaW5fYmUzMigodm9pZCopR1BJTzBfSVNSM0wpOworCXVsb25nIHNjcmF0Y2hyZWcgPSBpbl9iZTMyKCh2b2lkICopR1BJTzBfSVNSM0wpOwogCWlmICghKHNjcmF0Y2hyZWcgJiAweDgwKSkgewogCQkvKiBtYXJrIHNjcmF0Y2hyZWcgdmFsaWQgKi8KIAkJc2NyYXRjaHJlZyA9IChzY3JhdGNocmVnICYgMHhmZmZmZmYwMCkgfCAweDgwOwogCisJCWkyY19pbml0X2FsbCgpOworCiAJCWkgPSBib290c3RyYXBfZWVwcm9tX3JlYWQoQ09ORklHX1NZU19JMkNfQk9PVF9FRVBST01fQUREUiwKIAkJCQkJICAweDEwLCBidWYsIDQpOwogCQlpZiAoKGkgIT0gLTEpICYmIChidWZbMF0gPT0gMHgxOSkgJiYgKGJ1ZlsxXSA9PSAweDc1KSkgewogCQkJc2NyYXRjaHJlZyB8PSBidWZbMl07CiAKIAkJCS8qIGJyaW5ndXAgZGVsYXkgZm9yIGNvbnNvbGUgKi8KLQkJCWZvciAoZGVsYXk9MDsgZGVsYXk8KDEwMDAgKiAodWxvbmcpYnVmWzNdKTsgZGVsYXkrKykgeworCQkJZm9yIChkZWxheSA9IDA7IGRlbGF5IDwgKDEwMDAgKiAodWxvbmcpYnVmWzNdKTsgZGVsYXkrKykKIAkJCQl1ZGVsYXkoMTAwMCk7Ci0JCQl9CiAJCX0gZWxzZQogCQkJc2NyYXRjaHJlZyB8PSAweDAxOwotCQlvdXRfYmUzMigodm9pZCopR1BJTzBfSVNSM0wsIHNjcmF0Y2hyZWcpOworCQlvdXRfYmUzMigodm9pZCAqKUdQSU8wX0lTUjNMLCBzY3JhdGNocmVnKTsKIAl9CiAKIAlpZiAoc2NyYXRjaHJlZyAmIDB4MDEpCkBAIC05MywxMCArOTMsNyBAQAogCW10ZGNyKEVCQzBfQ0ZHQUREUiwgRUJDMF9DRkcpOwogCW10ZGNyKEVCQzBfQ0ZHREFUQSwgMHhmODQwMDAwMCk7CiAKLQkvKgotCSAqIFNldHVwIHRoZSBHUElPIHBpbnMKLQkgKiBUT0RPOiBzZXR1cCBHUElPcyB2aWEgQ09ORklHX1NZU180eHhfR1BJT19UQUJMRSBpbiBib2FyZCdzIGNvbmZpZyBmaWxlCi0JICovCisJLyogU2V0dXAgdGhlIEdQSU8gcGlucyAqLwogCW91dF9iZTMyKCh2b2lkICopR1BJTzBfT1IsICAgIDB4NDAwMDAxMDIpOwogCW91dF9iZTMyKCh2b2lkICopR1BJTzBfVENSLCAgIDB4NGM5MDAxMWYpOwogCW91dF9iZTMyKCh2b2lkICopR1BJTzBfT1NSTCwgIDB4MjgwNTE0MDApOwpAQCAtMjU5LDcgKzI1Niw3IEBACiAJICogVVNCIHN1ZmYuLi4KIAkgKi8KIAlpZiAoKGFjdCA9PSBOVUxMIHx8IHN0cmNtcChhY3QsICJob3N0IikgPT0gMCkgJiYKLQkgICAgIShpbl9iZTMyKCh2b2lkKilHUElPMF9JUikgJiBHUElPMF9VU0JfUFJTTlQpKXsKKwkgICAgIShpbl9iZTMyKCh2b2lkICopR1BJTzBfSVIpICYgR1BJTzBfVVNCX1BSU05UKSkgewogCQkvKiBTRFIgU2V0dGluZyAqLwogCQltZnNkcihTRFIwX1BGQzEsIHNkcjBfcGZjMSk7CiAJCW1mc2RyKFNEUjBfVVNCMkQwQ1IsIHVzYjJkMGNyKTsKQEAgLTMyNiwxNiArMzIzLDE2IEBACiAJCW10c2RyKFNEUjBfU1JTVDEsIDB4MDAwMDAwMDApOwogCQltdHNkcihTRFIwX1NSU1QwLCAweDAwMDAwMDAwKTsKIAotCQlpZiAoIShpbl9iZTMyKCh2b2lkKilHUElPMF9JUikgJiBHUElPMF9VU0JfUFJTTlQpKSB7CisJCWlmICghKGluX2JlMzIoKHZvaWQgKilHUElPMF9JUikgJiBHUElPMF9VU0JfUFJTTlQpKSB7CiAJCQkvKiBlbmFibGUgcG93ZXIgb24gVVNCIHNvY2tldCAqLwotCQkJb3V0X2JlMzIoKHZvaWQqKUdQSU8xX09SLAotCQkJCSBpbl9iZTMyKCh2b2lkKilHUElPMV9PUikgJiB+R1BJTzFfVVNCX1BXUl9OKTsKKwkJCW91dF9iZTMyKCh2b2lkICopR1BJTzFfT1IsCisJCQkJIGluX2JlMzIoKHZvaWQgKilHUElPMV9PUikgJiB+R1BJTzFfVVNCX1BXUl9OKTsKIAkJfQogCiAJCXByaW50ZigiVVNCOiAgIEhvc3RcbiIpOwogCiAJfSBlbHNlIGlmICgoc3RyY21wKGFjdCwgImRldiIpID09IDApIHx8Ci0JCSAgIChpbl9iZTMyKCh2b2lkKilHUElPMF9JUikgJiBHUElPMF9VU0JfUFJTTlQpKSB7CisJCSAgIChpbl9iZTMyKCh2b2lkICopR1BJTzBfSVIpICYgR1BJTzBfVVNCX1BSU05UKSkgewogCQltZnNkcihTRFIwX1VTQjJQSFkwQ1IsIHVzYjJwaHkwY3IpOwogCiAJCXVzYjJwaHkwY3IgPSB1c2IycGh5MGNyICZ+U0RSMF9VU0IyUEhZMENSX1hPQ0xLX01BU0s7CkBAIC00MTQsMzAgKzQxMSwzMSBAQAogI2VuZGlmCiAKIAkvKiB0dXJuIG9mZiBQT1NUIExFRCAqLwotCW91dF9iZTMyKCh2b2lkKilHUElPMV9PUiwgIGluX2JlMzIoKHZvaWQqKUdQSU8xX09SKSAmIH5HUElPMV9QT1NUX04pOworCW91dF9iZTMyKCh2b2lkICopR1BJTzFfT1IsIGluX2JlMzIoKHZvaWQgKilHUElPMV9PUikgJiB+R1BJTzFfUE9TVF9OKTsKIAkvKiB0dXJuIG9uIFJVTiBMRUQgKi8KLQlvdXRfYmUzMigodm9pZCopR1BJTzBfT1IsICBpbl9iZTMyKCh2b2lkKilHUElPMF9PUikgJiB+R1BJTzBfTEVEX1JVTl9OKTsKKwlvdXRfYmUzMigodm9pZCAqKUdQSU8wX09SLAorCQkgaW5fYmUzMigodm9pZCAqKUdQSU8wX09SKSAmIH5HUElPMF9MRURfUlVOX04pOwogCXJldHVybiAwOwogfQogCiBpbnQgaXNfbW9uYXJjaCh2b2lkKQogewotCWlmIChpbl9iZTMyKCh2b2lkKilHUElPMV9JUikgJiBHUElPMV9OT05NT05BUkNIKQorCWlmIChpbl9iZTMyKCh2b2lkICopR1BJTzFfSVIpICYgR1BJTzFfTk9OTU9OQVJDSCkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKIH0KIAotaW50IHBjaV9pc182Nm1oeih2b2lkKQorc3RhdGljIGludCBwY2lfaXNfNjZtaHoodm9pZCkKIHsKLQlpZiAoaW5fYmUzMigodm9pZCopR1BJTzFfSVIpICYgR1BJTzFfTTY2RU4pCisJaWYgKGluX2JlMzIoKHZvaWQgKilHUElPMV9JUikgJiBHUElPMV9NNjZFTikKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBib2FyZF9yZXZpc2lvbih2b2lkKQorc3RhdGljIGludCBib2FyZF9yZXZpc2lvbih2b2lkKQogewotCXJldHVybiAoaW50KSgoaW5fYmUzMigodm9pZCopR1BJTzFfSVIpICYgR1BJTzFfSFdJRF9NQVNLKSA+PiA0KTsKKwlyZXR1cm4gKGludCkoKGluX2JlMzIoKHZvaWQgKilHUElPMV9JUikgJiBHUElPMV9IV0lEX01BU0spID4+IDQpOwogfQogCiBpbnQgY2hlY2tib2FyZCh2b2lkKQpAQCAtNDk1LDcgKzQ5Myw3IEBACiAJb3V0MzJyKFBDSUwwX1BNTTBNQSwgMHgwMDAwMDAwMCk7CS8qIFBNTTAgTWFzay9BdHRyaWJ1dGUgKi8KIAkJCQkJCS8qIC0gZGlzYWJsZWQgYjQgc2V0dGluZyAqLwogCW91dDMycihQQ0lMMF9QTU0wTEEsIENPTkZJR19TWVNfUENJX01FTUJBU0UpOwkvKiBQTU0wIExvY2FsIEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NMFBDSUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFKTsgLyogUE1NMCBQQ0kgTG93IEFkZHJlc3MgKi8KKwlvdXQzMnIoUENJTDBfUE1NMFBDSUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFKTsgLyogUE1NMCBQQ0kgTG93IEFkZHIgKi8KIAlvdXQzMnIoUENJTDBfUE1NMFBDSUhBLCAweDAwMDAwMDAwKTsJLyogUE1NMCBQQ0kgSGlnaCBBZGRyZXNzICovCiAJb3V0MzJyKFBDSUwwX1BNTTBNQSwgMHhjMDAwMDAwMSk7CS8qIDFHICsgTm8gcHJlZmV0Y2hpbmcsICovCiAJCQkJCQkvKiBhbmQgZW5hYmxlIHJlZ2lvbiAqLwpAQCAtNTMyLDcgKzUzMCw4IEBACiAKIAlpZiAoaXNfbW9uYXJjaCgpKSB7CiAJCS8qIEJBUjI6IG1hcCBGUEdBIHJlZ2lzdGVycyBiZWhpbmQgc3lzdGVtIG1lbW9yeSBhdCAxR0IgKi8KLQkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2R3b3JkKGhvc2UsIDAsIFBDSV9CQVNFX0FERFJFU1NfMiwgMHg0MDAwMDAwOCk7CisJCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19kd29yZChob3NlLCAwLAorCQkJCQkgICAgUENJX0JBU0VfQUREUkVTU18yLCAweDQwMDAwMDA4KTsKIAl9CiAKIAkvKgpAQCAtNTYyLDEwICs1NjEsMTAgQEAKIAkJCQkJICAgQ09ORklHX1NZU19QQ0lfQ0xBU1NDT0RFX05PTk1PTkFSQ0gpOwogCiAJCS8qIFBDSSBjb25maWd1cmF0aW9uIGRvbmU6IHJlbGVhc2UgRVJSRUFEWSAqLwotCQlvdXRfYmUzMigodm9pZCopR1BJTzFfT1IsCi0JCQkgaW5fYmUzMigodm9pZCopR1BJTzFfT1IpIHwgR1BJTzFfUFBDX0VSRUFEWSk7Ci0JCW91dF9iZTMyKCh2b2lkKilHUElPMV9UQ1IsCi0JCQkgaW5fYmUzMigodm9pZCopR1BJTzFfVENSKSB8IEdQSU8xX1BQQ19FUkVBRFkpOworCQlvdXRfYmUzMigodm9pZCAqKUdQSU8xX09SLAorCQkJIGluX2JlMzIoKHZvaWQgKilHUElPMV9PUikgfCBHUElPMV9QUENfRVJFQURZKTsKKwkJb3V0X2JlMzIoKHZvaWQgKilHUElPMV9UQ1IsCisJCQkgaW5fYmUzMigodm9pZCAqKUdQSU8xX1RDUikgfCBHUElPMV9QUENfRVJFQURZKTsKIAl9IGVsc2UgewogCQkvKiBQcm9ncmFtIHRoZSBib2FyZCdzIHN1YnN5c3RlbSBpZC9jbGFzc2NvZGUgKi8KIAkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgMCwgUENJX1NVQlNZU1RFTV9JRCwKQEAgLTU5NSwxNCArNTk0LDE0IEBACiAKIHN0YXRpYyB2b2lkIHdhaXRfZm9yX3BjaV9yZWFkeSh2b2lkKQogewotCWlmICghKGluX2JlMzIoKHZvaWQqKUdQSU8xX0lSKSAmIEdQSU8xX1BQQ19FUkVBRFkpKSB7CisJaWYgKCEoaW5fYmUzMigodm9pZCAqKUdQSU8xX0lSKSAmIEdQSU8xX1BQQ19FUkVBRFkpKSB7CiAJCXByaW50ZigiUENJOiAgIFdhaXRpbmcgZm9yIEVSRUFEWSAoQ1RSTC1DIHRvIHNraXApIC4uLiAiKTsKIAkJd2hpbGUgKDEpIHsKIAkJCWlmIChjdHJsYygpKSB7CiAJCQkJcHV0cygiYWJvcnRcbiIpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKGluX2JlMzIoKHZvaWQqKUdQSU8xX0lSKSAmIEdQSU8xX1BQQ19FUkVBRFkpIHsKKwkJCWlmIChpbl9iZTMyKCh2b2lkICopR1BJTzFfSVIpICYgR1BJTzFfUFBDX0VSRUFEWSkgewogCQkJCXByaW50ZigiZG9uZVxuIik7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC02NDEsMzQgKzY0MCw3MyBAQAogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KIAogI2lmZGVmIENPTkZJR19SRVNFVF9QSFlfUgotdm9pZCByZXNldF9waHkodm9pZCkKK3N0YXRpYyBpbnQgcG1jNDQwX3NldHVwX3ZzYzg2MDEoY2hhciAqZGV2bmFtZSwgaW50IHBoeV9hZGRyLAorCQkJCXVuc2lnbmVkIHNob3J0IGJlaGF2aW9yLCB1bnNpZ25lZCBzaG9ydCBtZXRob2QpCiB7Ci0JY2hhciAqczsKLQl1bnNpZ25lZCBzaG9ydCB2YWxfbWV0aG9kLCB2YWxfYmVoYXZpb3I7CisJLyogYWRqdXN0IExFRCBiZWhhdmlvciAqLworCWlmIChtaWlwaHlfd3JpdGUoZGV2bmFtZSwgcGh5X2FkZHIsIDB4MWYsIDB4MDAwMSkgIT0gMCkgeworCQlwcmludGYoIlBoeSVkOiByZWdpc3RlciB3cml0ZSBhY2Nlc3MgZmFpbGVkXG4iLCBwaHlfYWRkcik7CisJCXJldHVybiAtMTsKKwl9CiAKLQkvKiBzcGVjaWFsIExFRCBzZXR1cCBmb3IgTkdDQy9DQU5ERVMgKi8KLQlpZiAoKHMgPSBnZXRlbnYoImJkX3R5cGUiKSkgJiYKLQkgICAgKCghc3RyY21wKHMsICJuZ2NjIikpIHx8ICghc3RyY21wKHMsICJjYW5kZXMiKSkpKSB7Ci0JCXZhbF9tZXRob2QgICA9IDB4MGUwYTsKLQkJdmFsX2JlaGF2aW9yID0gMHgwY2YyOwotCX0gZWxzZSB7Ci0JCS8qIFBNQzQ0MCBzdGFuZGFyZCB0eXBlICovCi0JCXZhbF9tZXRob2QgICA9IDB4MGUxMDsKLQkJdmFsX2JlaGF2aW9yID0gMHgwY2YwOworCW1paXBoeV93cml0ZShkZXZuYW1lLCBwaHlfYWRkciwgMHgxMSwgMHgwMDEwKTsKKwltaWlwaHlfd3JpdGUoZGV2bmFtZSwgcGh5X2FkZHIsIDB4MTEsIGJlaGF2aW9yKTsKKwltaWlwaHlfd3JpdGUoZGV2bmFtZSwgcGh5X2FkZHIsIDB4MTAsIG1ldGhvZCk7CisJbWlpcGh5X3dyaXRlKGRldm5hbWUsIHBoeV9hZGRyLCAweDFmLCAweDAwMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG1jNDQwX3NldHVwX2tzejkwMzEoY2hhciAqZGV2bmFtZSwgaW50IHBoeV9hZGRyKQoreworCXVuc2lnbmVkIHNob3J0IGlkMSwgaWQyOworCisJaWYgKG1paXBoeV9yZWFkKGRldm5hbWUsIHBoeV9hZGRyLCAyLCAmaWQxKSB8fAorCSAgICBtaWlwaHlfcmVhZChkZXZuYW1lLCBwaHlfYWRkciwgMywgJmlkMikpIHsKKwkJcHJpbnRmKCJQaHklZDogY2Fubm90IHJlYWQgaWRcbiIsIHBoeV9hZGRyKTsKKwkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChtaWlwaHlfd3JpdGUoInBwY180eHhfZXRoMCIsIENPTkZJR19QSFlfQUREUiwgMHgxZiwgMHgwMDAxKSA9PSAwKSB7Ci0JCW1paXBoeV93cml0ZSgicHBjXzR4eF9ldGgwIiwgQ09ORklHX1BIWV9BRERSLCAweDExLCAweDAwMTApOwotCQltaWlwaHlfd3JpdGUoInBwY180eHhfZXRoMCIsIENPTkZJR19QSFlfQUREUiwgMHgxMSwgdmFsX2JlaGF2aW9yKTsKLQkJbWlpcGh5X3dyaXRlKCJwcGNfNHh4X2V0aDAiLCBDT05GSUdfUEhZX0FERFIsIDB4MTAsIHZhbF9tZXRob2QpOwotCQltaWlwaHlfd3JpdGUoInBwY180eHhfZXRoMCIsIENPTkZJR19QSFlfQUREUiwgMHgxZiwgMHgwMDAwKTsKKwlpZiAoKGlkMSAhPSAweDAwMjIpIHx8ICgoaWQyICYgMHhmZmYwKSAhPSAweDE2MjApKSB7CisJCXByaW50ZigiUGh5JWQ6IHVuZXhwZWN0ZWQgaWRcbiIsIHBoeV9hZGRyKTsKKwkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChtaWlwaHlfd3JpdGUoInBwY180eHhfZXRoMSIsIENPTkZJR19QSFkxX0FERFIsIDB4MWYsIDB4MDAwMSkgPT0gMCkgewotCQltaWlwaHlfd3JpdGUoInBwY180eHhfZXRoMSIsIENPTkZJR19QSFkxX0FERFIsIDB4MTEsIDB4MDAxMCk7Ci0JCW1paXBoeV93cml0ZSgicHBjXzR4eF9ldGgxIiwgQ09ORklHX1BIWTFfQUREUiwgMHgxMSwgdmFsX2JlaGF2aW9yKTsKLQkJbWlpcGh5X3dyaXRlKCJwcGNfNHh4X2V0aDEiLCBDT05GSUdfUEhZMV9BRERSLCAweDEwLCB2YWxfbWV0aG9kKTsKLQkJbWlpcGh5X3dyaXRlKCJwcGNfNHh4X2V0aDEiLCBDT05GSUdfUEhZMV9BRERSLCAweDFmLCAweDAwMDApOworCS8qIE1NRCAyLjA4OiBhZGp1c3QgdHhfY2xrIHBhZCBza2V3ICovCisJbWlpcGh5X3dyaXRlKGRldm5hbWUsIHBoeV9hZGRyLCAweDBkLCAyKTsKKwltaWlwaHlfd3JpdGUoZGV2bmFtZSwgcGh5X2FkZHIsIDB4MGUsIDgpOworCW1paXBoeV93cml0ZShkZXZuYW1lLCBwaHlfYWRkciwgMHgwZCwgMHg0MDAyKTsKKwltaWlwaHlfd3JpdGUoZGV2bmFtZSwgcGh5X2FkZHIsIDB4MGUsIDB4ZiB8ICgweDE3IDw8IDUpKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHJlc2V0X3BoeSh2b2lkKQoreworCWNoYXIgKnM7CisJdW5zaWduZWQgc2hvcnQgdmFsX21ldGhvZCwgdmFsX2JlaGF2aW9yOworCisJaWYgKGdkLT5ib2FyZF90eXBlIDwgNCkgeworCQkvKiBzcGVjaWFsIExFRCBzZXR1cCBmb3IgTkdDQy9DQU5ERVMgKi8KKwkJcyA9IGdldGVudigiYmRfdHlwZSIpOworCQlpZiAocyAmJiAoKCFzdHJjbXAocywgIm5nY2MiKSkgfHwgKCFzdHJjbXAocywgImNhbmRlcyIpKSkpIHsKKwkJCXZhbF9tZXRob2QgICA9IDB4MGUwYTsKKwkJCXZhbF9iZWhhdmlvciA9IDB4MGNmMjsKKwkJfSBlbHNlIHsKKwkJCS8qIFBNQzQ0MCBzdGFuZGFyZCB0eXBlICovCisJCQl2YWxfbWV0aG9kICAgPSAweDBlMTA7CisJCQl2YWxfYmVoYXZpb3IgPSAweDBjZjA7CisJCX0KKworCQkvKiBib2FyZHMgdXAgdG8gcmV2LiAxLjMgdXNlIFZpdGVzc2UgVlNDODYwMSBwaHlzICovCisJCXBtYzQ0MF9zZXR1cF92c2M4NjAxKCJwcGNfNHh4X2V0aDAiLCBDT05GSUdfUEhZX0FERFIsCisJCQkJICAgICB2YWxfbWV0aG9kLCB2YWxfYmVoYXZpb3IpOworCQlwbWM0NDBfc2V0dXBfdnNjODYwMSgicHBjXzR4eF9ldGgxIiwgQ09ORklHX1BIWTFfQUREUiwKKwkJCQkgICAgIHZhbF9tZXRob2QsIHZhbF9iZWhhdmlvcik7CisJfSBlbHNlIHsKKwkJLyogcmV2LiAxLjQgdXNlcyBhIE1pY3JlbCBLU1o5MDMxICovCisJCXBtYzQ0MF9zZXR1cF9rc3o5MDMxKCJwcGNfNHh4X2V0aDAiLCBDT05GSUdfUEhZX0FERFIpOworCQlwbWM0NDBfc2V0dXBfa3N6OTAzMSgicHBjXzR4eF9ldGgxIiwgQ09ORklHX1BIWTFfQUREUik7CiAJfQogfQogI2VuZGlmCkBAIC03MjksNyArNzY3LDYgQEAKIAkgKiBXZSBtdXN0IHdyaXRlIHRoZSBhZGRyZXNzIGFnYWluIHdoZW4gY2hhbmdpbmcgcGFnZXMKIAkgKiBiZWNhdXNlIHRoZSBhZGRyZXNzIGNvdW50ZXIgb25seSBpbmNyZW1lbnRzIHdpdGhpbiBhIHBhZ2UuCiAJICovCi0KIAl3aGlsZSAob2Zmc2V0IDwgZW5kKSB7CiAJCXVuc2lnbmVkIGFsZW4sIGxlbjsKIAkJdW5zaWduZWQgbWF4bGVuOwpAQCAtNzcxLDggKzgwOCw4IEBACiAJcmV0dXJuIHJjb2RlOwogfQogCi1pbnQgYm9vdHN0cmFwX2VlcHJvbV9yZWFkICh1bnNpZ25lZCBkZXZfYWRkciwgdW5zaWduZWQgb2Zmc2V0LAotCQkJICAgdWNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgY250KQorc3RhdGljIGludCBib290c3RyYXBfZWVwcm9tX3JlYWQodW5zaWduZWQgZGV2X2FkZHIsIHVuc2lnbmVkIG9mZnNldCwKKwkJCQkgdWNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgY250KQogewogCXVuc2lnbmVkIGVuZCA9IG9mZnNldCArIGNudDsKIAl1bnNpZ25lZCBibGtfb2ZmOwpAQCAtODIwLDEwICs4NTcsMTAgQEAKIAlpbnQgaTsKIAogCWlmICgoYWN0ID09IE5VTEwgfHwgc3RyY21wKGFjdCwgImhvc3QiKSA9PSAwKSAmJgotCSAgICAhKGluX2JlMzIoKHZvaWQqKUdQSU8wX0lSKSAmIEdQSU8wX1VTQl9QUlNOVCkpCisJICAgICEoaW5fYmUzMigodm9pZCAqKUdQSU8wX0lSKSAmIEdQSU8wX1VTQl9QUlNOVCkpCiAJCS8qIGVuYWJsZSBwb3dlciBvbiBVU0Igc29ja2V0ICovCi0JCW91dF9iZTMyKCh2b2lkKilHUElPMV9PUiwKLQkJCSBpbl9iZTMyKCh2b2lkKilHUElPMV9PUikgJiB+R1BJTzFfVVNCX1BXUl9OKTsKKwkJb3V0X2JlMzIoKHZvaWQgKilHUElPMV9PUiwKKwkJCSBpbl9iZTMyKCh2b2lkICopR1BJTzFfT1IpICYgfkdQSU8xX1VTQl9QV1JfTik7CiAKIAlmb3IgKGk9MDsgaTwxMDAwOyBpKyspCiAJCXVkZWxheSgxMDAwKTsKQEAgLTgzNCw3ICs4NzEsNyBAQAogaW50IHVzYl9ib2FyZF9zdG9wKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBwb3dlciBvbiBVU0Igc29ja2V0ICovCi0Jb3V0X2JlMzIoKHZvaWQqKUdQSU8xX09SLCBpbl9iZTMyKCh2b2lkKilHUElPMV9PUikgfCBHUElPMV9VU0JfUFdSX04pOworCW91dF9iZTMyKCh2b2lkICopR1BJTzFfT1IsIGluX2JlMzIoKHZvaWQgKilHUElPMV9PUikgfCBHUElPMV9VU0JfUFdSX04pOwogCXJldHVybiAwOwogfQogCkBAIC04NTgsOCArODk1LDggQEAKIAkJcmMgPSBmZHRfZmluZF9hbmRfc2V0cHJvcChibG9iLCAiL3BsYi9wY2lAMWVjMDAwMDAwIiwgInN0YXR1cyIsCiAJCQkJCSAgImRpc2FibGVkIiwgc2l6ZW9mKCJkaXNhYmxlZCIpLCAxKTsKIAkJaWYgKHJjKSB7Ci0JCQlwcmludGYoIlVuYWJsZSB0byB1cGRhdGUgcHJvcGVydHkgc3RhdHVzIGluIFBDSSBub2RlLCBlcnI9JXNcbiIsCi0JCQkgICAgICAgZmR0X3N0cmVycm9yKHJjKSk7CisJCQlwcmludGYoIlVuYWJsZSB0byB1cGRhdGUgcHJvcGVydHkgc3RhdHVzIGluIFBDSSBub2RlLCAiKTsKKwkJCXByaW50ZigiZXJyPSVzXG4iLCBmZHRfc3RyZXJyb3IocmMpKTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2V2YjY0MjYwL2VjY3Rlc3QuYyBiL2JvYXJkL2V2YjY0MjYwL2VjY3Rlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQzNjc5YS4uMDAwMDAwMAotLS0gYS9ib2FyZC9ldmI2NDI2MC9lY2N0ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotaW5kZW50OiBTdGFuZGFyZCBpbnB1dDoyNzogV2FybmluZzpvbGQgc3R5bGUgYXNzaWdubWVudCBhbWJpZ3VpdHkgaW4gIj0qIi4gIEFzc3VtaW5nICI9ICoiCi0KLSNpZmRlZiBFQ0NfVEVTVAotc3RhdGljIGlubGluZSB2b2lkIGVjY19vZmYgKHZvaWQpCi17Ci0JKih2b2xhdGlsZSBpbnQgKikgKElOVEVSTkFMX1JFR19CQVNFX0FERFIgKyAweDRiNCkgJj0gfjB4MDAyMDAwMDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlY2Nfb24gKHZvaWQpCi17Ci0JKih2b2xhdGlsZSBpbnQgKikgKElOVEVSTkFMX1JFR19CQVNFX0FERFIgKyAweDRiNCkgfD0gMHgwMDIwMDAwMDsKLX0KLQotc3RhdGljIGludCBwdXRzaGV4IChjb25zdCBjaGFyICpidWYsIGludCBsZW4pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJcHJpbnRmICgiJTAyeCIsIGJ1ZltpXSk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNoYXJfbWVtY3B5ICh2b2lkICpkLCBjb25zdCB2b2lkICpzLCBpbnQgbGVuKQotewotCWludCBpOwotCWNoYXIgKmNkID0gZDsKLQljb25zdCBjaGFyICpjcyA9IHM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJKihjZCsrKSA9ICooY3MrKyk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1lbW9yeV90ZXN0IChjaGFyICpidWYpCi17Ci0JY29uc3QgY2hhciBzcmNbXVsxNl0gPSB7Ci0JCXswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSwKLQkJezB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCi0JCSAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxfSwKLQkJezB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsCi0JCSAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyfSwKLQkJezB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsCi0JCSAweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDA0fSwKLQkJezB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsCi0JCSAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4fSwKLQkJezB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JCSAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwfSwKLQkJezB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsCi0JCSAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwfSwKLQkJezB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsCi0JCSAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwfSwKLQkJezB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsCi0JCSAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwfSwKLQkJezB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsCi0JCSAweDU1LCAweDU1LCAweDU1LCAweDU1LCAweDU1LCAweDU1fSwKLQkJezB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCSAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhfSwKLQkJezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JCSAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfQotCX07Ci0JY29uc3QgaW50IGZvb1tdID0geyAwIH07Ci0JaW50IGksIGosIGE7Ci0KLQlwcmludGYgKCJcbnRlc3QgQCAlZCAlcFxuIiwgZm9vWzBdLCBidWYpOwotCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7Ci0JCWZvciAoYSA9IDA7IGEgPCA4OyBhKyspIHsKLQkJCWNvbnN0IGNoYXIgKnMgPSBzcmNbaV0gKyBhOwotCQkJaW50IGFsaWduID0gKHVuc2lnbmVkKSAocykgJiAweDc7Ci0KLQkJCS8qIGVjY19vZmYoKTsgKi8KLQkJCW1lbWNweSAoYnVmLCBzLCA4KTsKLQkJCS8qIGVjY19vbigpOyAqLwotCQkJcHV0c2hleCAocywgOCk7Ci0JCQlpZiAobWVtY21wIChidWYsIHMsIDgpKSB7Ci0JCQkJcHV0YyAoJ1xuJyk7Ci0JCQkJcHV0c2hleCAoYnVmLCA4KTsKLQkJCQlwcmludGYgKCIgW0ZBSUxdICglcCkgYWxpZ249JWRcbiIsIHMsIGFsaWduKTsKLQkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7Ci0JCQkJCXNbal0gPT0gYnVmW2pdID8gcHV0cyAoIiAgIikgOgotCQkJCQkJcHJpbnRmICgiJTAyeCIsCi0JCQkJCQkJKHNbal0pIF4gKGJ1ZltqXSkpOwotCQkJCX0KLQkJCQlwdXRjICgnXG4nKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRmICgiIFtQQVNTXSAoJXApIGFsaWduPSVkXG4iLCBzLCBhbGlnbik7Ci0JCQl9Ci0JCQkvKiBlY2Nfb2ZmKCk7ICovCi0JCQljaGFyX21lbWNweSAoYnVmLCBzLCA4KTsKLQkJCS8qIGVjY19vbigpOyAqLwotCQkJcHV0c2hleCAocywgOCk7Ci0JCQlpZiAobWVtY21wIChidWYsIHMsIDgpKSB7Ci0JCQkJcHV0YyAoJ1xuJyk7Ci0JCQkJcHV0c2hleCAoYnVmLCA4KTsKLQkJCQlwcmludGYgKCIgW0ZBSUxdICglcCkgYWxpZ249JWRcbiIsIHMsIGFsaWduKTsKLQkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7Ci0JCQkJCXNbal0gPT0gYnVmW2pdID8gcHV0cyAoIiAgIikgOgotCQkJCQkJcHJpbnRmICgiJTAyeCIsCi0JCQkJCQkJKHNbal0pIF4gKGJ1ZltqXSkpOwotCQkJCX0KLQkJCQlwdXRjICgnXG4nKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRmICgiIFtQQVNTXSAoJXApIGFsaWduPSVkXG4iLCBzLCBhbGlnbik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvZmFkcy9mYWRzLmMgYi9ib2FyZC9mYWRzL2ZhZHMuYwppbmRleCA4OWRkOWVmLi5mZGI0NmIxIDEwMDY0NAotLS0gYS9ib2FyZC9mYWRzL2ZhZHMuYworKysgYi9ib2FyZC9mYWRzL2ZhZHMuYwpAQCAtMjEwLDExICsyMTAsNyBAQAogCiAJc3dpdGNoIChub01ieXRlcykgewogCWNhc2UgNDoJCQkJLyogNCBNYnl0ZSB1c2VzIG9ubHkgQ1MyICovCi0jaWZkZWYgQ09ORklHX0FEUwotCQltZW1jdGwtPm1lbWNfbWFtciA9IDB4YzBhMjExMTQ7Ci0jZWxzZQogCQltZW1jdGwtPm1lbWNfbWFtciA9IDB4MTNhMDExMTQ7CS8qIFBUQSAweDEzIEFNQSAwMTAgKi8KLSNlbmRpZgogCQltZW1jdGwtPm1lbWNfb3IyID0gMHhmZmMwMDgwMDsJLyogNE0gKi8KIAkJYnJlYWs7CiAKQEAgLTIyNiwxMSArMjIyLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIDE2OgkJCS8qIDE2IE1ieXRlIHVzZXMgb25seSBDUzIgKi8KLSNpZmRlZiBDT05GSUdfQURTCS8qIFhYWDogd2h5IFBUQT0weDYwIG9ubHkgaW4gMTZNIGNhc2U/IC0gTlRMICovCi0JCW1lbWN0bC0+bWVtY19tYW1yID0gMHg2MGIyMTExNDsJLyogUFRBIDB4NjAgQU1BIDAxMSAqLwotI2Vsc2UKIAkJbWVtY3RsLT5tZW1jX21hbXIgPSAweDEzYjAxMTE0OwkvKiBQVEEgMHgxMyBBTUEgMDExICovCi0jZW5kaWYKIAkJbWVtY3RsLT5tZW1jX29yMiA9IDB4ZmYwMDA4MDA7CS8qIDE2TSAqLwogCQlicmVhazsKIApAQCAtNjc0LDQyICs2NjYsNiBAQAogICogQ2hlY2sgQm9hcmQgSWRlbnRpdHk6CiAgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0ZBRFMpICYmIGRlZmluZWQoQ09ORklHX1NZU19EQVVHSFRFUkJPQVJEKQotc3RhdGljIHZvaWQgY2hlY2tkYm9hcmQodm9pZCkKLXsKLQkvKiBnZXQgZGIgdHlwZSBmcm9tIEJDU1IgMyAqLwotCXVpbnQgayA9ICgqKCh1aW50ICopQkNTUjMpID4+IDI0KSAmIDB4M2Y7Ci0KLQlwdXRzICgiIHdpdGggZGIgIik7Ci0KLQlzd2l0Y2goaykgewotCWNhc2UgMHgwMyA6Ci0JCXB1dHMgKCJNUEM4MjMiKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDIwIDoKLQkJcHV0cyAoIk1QQzgwMSIpOwotCQlicmVhazsKLQljYXNlIDB4MjEgOgotCQlwdXRzICgiTVBDODUwIik7Ci0JCWJyZWFrOwotCWNhc2UgMHgyMiA6Ci0JCXB1dHMgKCJNUEM4MjEsIE1QQzg2MCAvIE1QQzg2MFNBUiAvIE1QQzg2MFQiKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDIzIDoKLQkJcHV0cyAoIk1QQzg2MFNBUiIpOwotCQlicmVhazsKLQljYXNlIDB4MjQgOgotCWNhc2UgMHgyQSA6Ci0JCXB1dHMgKCJNUEM4NjBUIik7Ci0JCWJyZWFrOwotCWNhc2UgMHgzRiA6Ci0JCXB1dHMgKCJNUEM4NTBTQVIiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdCA6IHByaW50ZigiMHgleCIsIGspOwotCX0KLX0KLSNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19GQURTKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfREFVR0hURVJCT0FSRCkgKi8KLQogaW50IGNoZWNrYm9hcmQgKHZvaWQpCiB7CiAjaWYgICBkZWZpbmVkKENPTkZJR19NUEM4NnhBRFMpCkBAIC03MzIsMjcgKzY4OCwxMiBAQAogCXB1dHMgKCIgcmV2ICIpOwogCiAJc3dpdGNoIChyKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfQURTKQotCWNhc2UgMHgwMDoKLQkJcHV0cyAoIkVORyAtIHRoaXMgYm9hcmQgc3Vja3MsIGNoZWNrIHRoZSBlcnJhdGEsIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JY2FzZSAweDAxOgotCQlwdXRzICgiUElMT1QgLSB3YXJuaW5nLCByZWFkIGVycmF0YSBcbiIpOwotCQlicmVhazsKLQljYXNlIDB4MDI6Ci0JCXB1dHMgKCJBIC0gd2FybmluZywgcmVhZCBlcnJhdGEgXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDAzOgotCQlwdXRzICgiQlxuIik7Ci0JCWJyZWFrOwotI2Vsc2UgIC8qIEZBRFMgKi8KIAljYXNlIDB4MDA6CiAJCXB1dHMgKCJFTkdcbiIpOwogCQlicmVhazsKIAljYXNlIDB4MDE6CiAJCXB1dHMgKCJQSUxPVFxuIik7CiAJCWJyZWFrOwotI2VuZGlmIC8qIENPTkZJR19BRFMgKi8KIAlkZWZhdWx0OgogCQlwcmludGYgKCJ1bmtub3duICgweCV4KVxuIiwgcik7CiAJCXJldHVybiAtMTsKQEAgLTg2NSwxMiArODA2LDYgQEAKICNlbmRpZgogCWNhc2UgNToKIAkJcHJpbnRmKCI7IHVzaW5nIDVWIik7Ci0jaWZkZWYgQ09ORklHX0FEUwotCQkvKgotCQkqKiBFbmFibGUgNSB2b2x0IFZjYy4KLQkJKi8KLQkJKigodWludCAqKUJDU1IxKSAmPSB+QkNTUjFfUENDVkNDT047Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfRkFEUwogCQkvKgogCQkqKiBFbmFibGUgNSB2b2x0IFZjYy4KZGlmZiAtLWdpdCBhL2JvYXJkL2ZhZHMvZmFkcy5oIGIvYm9hcmQvZmFkcy9mYWRzLmgKaW5kZXggZmE0OTA4MC4uMWJlMDBiOSAxMDA2NDQKLS0tIGEvYm9hcmQvZmFkcy9mYWRzLmgKKysrIGIvYm9hcmQvZmFkcy9mYWRzLmgKQEAgLTY2LDEzICs2Niw4IEBACiAgKiBtb3RoZXJib2FyZCBhbmQgRkVDIEV0aGVybmV0IG9uIGRhdWdodGVyYm9hcmQuIEFsbCBuZXcgUFExIGNoaXBzIGhhdmUKICAqIGdvdCBGRUMgc28gRkVDIGlzIHRoZSBkZWZhdWx0LgogICovCi0jaWZuZGVmIENPTkZJR19BRFMKICN1bmRlZglDT05GSUdfU0NDMV9FTkVUCQkvKiBEaXNhYmxlIFNDQzEgZXRoZXJuZXQgKi8KICNkZWZpbmUJQ09ORklHX0ZFQ19FTkVUCQkJLyogVXNlIEZFQyBldGhlcm5ldCAgKi8KLSNlbHNlCQkJCQkvKiBPbGQgQURTIGhhcyBub3QgZ290IEZFQyBvcHRpb24gKi8KLSNkZWZpbmUJQ09ORklHX1NDQzFfRU5FVAkJLyogVXNlIFNDQzEgZXRoZXJuZXQgKi8KLSN1bmRlZglDT05GSUdfRkVDX0VORVQJCQkvKiBObyBGRUMgZXRoZXJuZXQgICovCi0jZW5kaWYgLyogIUNPTkZJR19BRFMgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1NDQzFfRU5FVCkgJiYgZGVmaW5lZChDT05GSUdfRkVDX0VORVQpCiAjZXJyb3IgQm90aCBDT05GSUdfU0NDMV9FTkVUIGFuZCBDT05GSUdfRkVDX0VORVQgY29uZmlndXJlZApkaWZmIC0tZ2l0IGEvYm9hcmQvZmFkcy9sYW1wLmMgYi9ib2FyZC9mYWRzL2xhbXAuYwppbmRleCA0ZTU4MjkxLi5mZmNjMmIzIDEwMDY0NAotLS0gYS9ib2FyZC9mYWRzL2xhbXAuYworKysgYi9ib2FyZC9mYWRzL2xhbXAuYwpAQCAtMSw3ICsxLDUgQEAKICNpbmNsdWRlIDxjb25maWcuaD4KIAotI2lmbmRlZiBDT05GSUdfQURTIC8qIE9sZCBBRFMgaGFzIG5vdCBnb3QgYW55IHVzZXItY29udHJvbGxhYmxlIExFRCAqLwotCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAKIHZvaWQKQEAgLTQzLDUgKzQxLDMgQEAKICAgICBzaWduYWxfZGVsYXkoMHgwMDEwMDAwMCk7CiAgIH0KIH0KLQotI2VuZGlmIC8qICFDT05GSUdfQURTICovCmRpZmYgLS1naXQgYS9ib2FyZC9mYWRzL3BjbWNpYS5jIGIvYm9hcmQvZmFkcy9wY21jaWEuYwppbmRleCA5OWZlMGI0Li45OTZmMDMyIDEwMDY0NAotLS0gYS9ib2FyZC9mYWRzL3BjbWNpYS5jCisrKyBiL2JvYXJkL2ZhZHMvcGNtY2lhLmMKQEAgLTE0LDExICsxNCw3IEBACiAKICNpZmRlZglDT05GSUdfUENNQ0lBCiAKLSNpZmRlZglDT05GSUdfQURTCi0jZGVmaW5lCVBDTUNJQV9CT0FSRF9NU0cgIkFEUyIKLSNlbHNlCiAjZGVmaW5lCVBDTUNJQV9CT0FSRF9NU0cgIkZBRFMiCi0jZW5kaWYKIAogaW50IHBjbWNpYV92b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKIHsKQEAgLTMzLDkgKzI5LDYgQEAKIAogCXN3aXRjaCh2Y2MpIHsKIAkJY2FzZSAwOiByZWcgPSAwOyBicmVhazsKLSNpZmRlZiBDT05GSUdfQURTCi0JY2FzZSA1MDogcmVnID0gQkNTUjFfUENDVkNDT047IGJyZWFrOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZBRFMKIAljYXNlIDMzOiByZWcgPSBCQ1NSMV9QQ0NWQ0MwIHwgQkNTUjFfUENDVkNDMTsgYnJlYWs7CiAJY2FzZSA1MDogcmVnID0gQkNTUjFfUENDVkNDMTsgYnJlYWs7CkBAIC00NSw5ICszOCw2IEBACiAKIAkvKiBmaXJzdCwgdHVybiBvZmYgYWxsIHBvd2VyICovCiAKLSNpZmRlZiBDT05GSUdfQURTCi0JKigodWludCAqKUJDU1IxKSB8PSBCQ1NSMV9QQ0NWQ0NPTjsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19GQURTCiAJKigodWludCAqKUJDU1IxKSAmPSB+KEJDU1IxX1BDQ1ZDQzAgfCBCQ1NSMV9QQ0NWQ0MxKTsKICNlbmRpZgpAQCAtNTUsOSArNDUsNiBAQAogCiAJLyogZW5hYmxlIG5ldyBwb3dlcnNldHRpbmdzICovCiAKLSNpZmRlZiBDT05GSUdfQURTCi0JKigodWludCAqKUJDU1IxKSAmPSB+cmVnOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZBRFMKIAkqKCh1aW50ICopQkNTUjEpIHw9IHJlZzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL2I0ODYwcWRzL01ha2VmaWxlIGIvYm9hcmQvZnJlZXNjYWxlL2I0ODYwcWRzL01ha2VmaWxlCmluZGV4IGU1Y2MwNTQuLjBhY2QyYTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9iNDg2MHFkcy9NYWtlZmlsZQorKysgYi9ib2FyZC9mcmVlc2NhbGUvYjQ4NjBxZHMvTWFrZWZpbGUKQEAgLTQsOSArNCwxNCBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKICMKIAoraWZkZWYgQ09ORklHX1NQTF9CVUlMRAorb2JqLXkgKz0gc3BsLm8KK2Vsc2UKIG9iai15CSs9IGI0ODYwcWRzLm8KLW9iai15CSs9IGRkci5vCiBvYmotJChDT05GSUdfQjQ4NjBRRFMpKz0gZXRoX2I0ODYwcWRzLm8KLW9iai0kKENPTkZJR19QQ0kpCSs9IHBjaS5vCitvYmotJChDT05GSUdfUENJKSAgICAgICs9IHBjaS5vCitlbmRpZgorCitvYmoteQkrPSBkZHIubwogb2JqLXkJKz0gbGF3Lm8KIG9iai15CSs9IHRsYi5vCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvYjQ4NjBxZHMvYjRfcGJpLmNmZyBiL2JvYXJkL2ZyZWVzY2FsZS9iNDg2MHFkcy9iNF9wYmkuY2ZnCmluZGV4IDU3YjcyNmUuLjA1Mzc3YmEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9iNDg2MHFkcy9iNF9wYmkuY2ZnCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9iNDg2MHFkcy9iNF9wYmkuY2ZnCkBAIC0yMiw2ICsyMiw5IEBACiAwOTExMDAyNCAwMDEwMDAwOAogMDkxMTAwMjggMDAxMDAwMDgKIDA5MTEwMDJjIDAwMTAwMDA4Cisjc2xvd2luZyBkb3duIHRoZSBNREMgY2xvY2sgdG8gbWFrZSBpdCA8PSAyLjUgTUhaCiswOTRmYzAzMCAwMDAwODE0OAorMDk0ZmQwMzAgMDAwMDgxNDgKICNGbHVzaCBQQkwgZGF0YQogMDkxMzgwMDAgMDAwMDAwMDAKIDA5MTM4MGMwIDAwMDAwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvYjQ4NjBxZHMvZGRyLmMgYi9ib2FyZC9mcmVlc2NhbGUvYjQ4NjBxZHMvZGRyLmMKaW5kZXggMTg3YzNiMy4uMmMxNzE1NiAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL2I0ODYwcWRzL2Rkci5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9iNDg2MHFkcy9kZHIuYwpAQCAtMTc5LDYgKzE3OSw3IEBACiB7CiAJcGh5c19zaXplX3QgZHJhbV9zaXplOwogCisjaWYgZGVmaW5lZChDT05GSUdfU1BMX0JVSUxEKSB8fCAhZGVmaW5lZChDT05GSUdfUkFNQk9PVF9QQkwpCiAJcHV0cygiSW5pdGlhbGl6aW5nLi4uLnVzaW5nIFNQRFxuIik7CiAKIAlkcmFtX3NpemUgPSBmc2xfZGRyX3NkcmFtKCk7CkBAIC0xODYsNyArMTg3LDkgQEAKIAlkcmFtX3NpemUgPSBzZXR1cF9kZHJfdGxicyhkcmFtX3NpemUgLyAweDEwMDAwMCk7CiAJZHJhbV9zaXplICo9IDB4MTAwMDAwOwogCi0JcHV0cygiICAgIEREUjogIik7CisjZWxzZQorCWRyYW1fc2l6ZSA9ICBmc2xfZGRyX3NkcmFtX3NpemUoKTsKKyNlbmRpZgogCXJldHVybiBkcmFtX3NpemU7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9iNDg2MHFkcy9zcGwuYyBiL2JvYXJkL2ZyZWVzY2FsZS9iNDg2MHFkcy9zcGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWE1YTc4Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZnJlZXNjYWxlL2I0ODYwcWRzL3NwbC5jCkBAIC0wLDAgKzEsMTE0IEBACisvKiBDb3B5cmlnaHQgMjAxMyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAgICBHUEwtMi4wKworICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vc3BsLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8bnMxNjU1MC5oPgorI2luY2x1ZGUgPG5hbmQuaD4KKyNpbmNsdWRlIDxpMmMuaD4KKyNpbmNsdWRlICIuLi9jb21tb24vcWl4aXMuaCIKKyNpbmNsdWRlICJiNDg2MHFkc19xaXhpcy5oIgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworcGh5c19zaXplX3QgZ2V0X2VmZmVjdGl2ZV9tZW1zaXplKHZvaWQpCit7CisJcmV0dXJuIENPTkZJR19TWVNfTDNfU0laRTsKK30KKwordW5zaWduZWQgbG9uZyBnZXRfYm9hcmRfc3lzX2Nsayh2b2lkKQoreworCXU4IHN5c2Nsa19jb25mID0gUUlYSVNfUkVBRChicmRjZmdbMV0pOworCisJc3dpdGNoICgoc3lzY2xrX2NvbmYgJiAweDBDKSA+PiAyKSB7CisJY2FzZSBRSVhJU19DTEtfMTAwOgorCQlyZXR1cm4gMTAwMDAwMDAwOworCWNhc2UgUUlYSVNfQ0xLXzEyNToKKwkJcmV0dXJuIDEyNTAwMDAwMDsKKwljYXNlIFFJWElTX0NMS18xMzM6CisJCXJldHVybiAxMzMzMzMzMzM7CisJfQorCXJldHVybiA2NjY2NjY2NjsKK30KKwordW5zaWduZWQgbG9uZyBnZXRfYm9hcmRfZGRyX2Nsayh2b2lkKQoreworCXU4IGRkcmNsa19jb25mID0gUUlYSVNfUkVBRChicmRjZmdbMV0pOworCisJc3dpdGNoIChkZHJjbGtfY29uZiAmIDB4MDMpIHsKKwljYXNlIFFJWElTX0NMS18xMDA6CisJCXJldHVybiAxMDAwMDAwMDA7CisJY2FzZSBRSVhJU19DTEtfMTI1OgorCQlyZXR1cm4gMTI1MDAwMDAwOworCWNhc2UgUUlYSVNfQ0xLXzEzMzoKKwkJcmV0dXJuIDEzMzMzMzMzMzsKKwl9CisJcmV0dXJuIDY2NjY2NjY2OworfQorCit2b2lkIGJvYXJkX2luaXRfZih1bG9uZyBib290ZmxhZykKK3sKKwl1MzIgcGxhdF9yYXRpbywgc3lzX2NsaywgdWFydF9jbGs7CisJY2Nzcl9ndXJfdCAqZ3VyID0gKHZvaWQgKilDT05GSUdfU1lTX01QQzg1eHhfR1VUU19BRERSOworCisJLyogTWVtY3B5IGV4aXN0aW5nIEdEIGF0IENPTkZJR19TUExfR0RfQUREUiAqLworCW1lbWNweSgodm9pZCAqKUNPTkZJR19TUExfR0RfQUREUiwgKHZvaWQgKilnZCwgc2l6ZW9mKGdkX3QpKTsKKworCS8qIFVwZGF0ZSBHRCBwb2ludGVyICovCisJZ2QgPSAoZ2RfdCAqKShDT05GSUdfU1BMX0dEX0FERFIpOworCisJLyogY29tcGlsZXIgb3B0aW1pemF0aW9uIGJhcnJpZXIgbmVlZGVkIGZvciBHQ0MgPj0gMy40ICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIiIgOiA6IDogIm1lbW9yeSIpOworCisJY29uc29sZV9pbml0X2YoKTsKKworCS8qIGluaXRpYWxpemUgc2VsZWN0ZWQgcG9ydCB3aXRoIGFwcHJvcHJpYXRlIGJhdWQgcmF0ZSAqLworCXN5c19jbGsgPSBnZXRfYm9hcmRfc3lzX2NsaygpOworCXBsYXRfcmF0aW8gPSAoaW5fYmUzMigmZ3VyLT5yY3dzclswXSkgPj4gMjUpICYgMHgxZjsKKwl1YXJ0X2NsayA9IHN5c19jbGsgKiBwbGF0X3JhdGlvIC8gMjsKKworCU5TMTY1NTBfaW5pdCgoTlMxNjU1MF90KUNPTkZJR19TWVNfTlMxNjU1MF9DT00xLAorCQkgICAgIHVhcnRfY2xrIC8gMTYgLyBDT05GSUdfQkFVRFJBVEUpOworCisJcmVsb2NhdGVfY29kZShDT05GSUdfU1BMX1JFTE9DX1NUQUNLLCAoZ2RfdCAqKUNPTkZJR19TUExfR0RfQUREUiwgMHgwKTsKK30KKwordm9pZCBib2FyZF9pbml0X3IoZ2RfdCAqZ2QsIHVsb25nIGRlc3RfYWRkcikKK3sKKwliZF90ICpiZDsKKworCWJkID0gKGJkX3QgKikoZ2QgKyBzaXplb2YoZ2RfdCkpOworCW1lbXNldChiZCwgMCwgc2l6ZW9mKGJkX3QpKTsKKwlnZC0+YmQgPSBiZDsKKwliZC0+YmlfbWVtc3RhcnQgPSBDT05GSUdfU1lTX0lOSVRfTDNfQUREUjsKKwliZC0+YmlfbWVtc2l6ZSA9IENPTkZJR19TWVNfTDNfU0laRTsKKworCXByb2JlY3B1KCk7CisJZ2V0X2Nsb2NrcygpOworCW1lbV9tYWxsb2NfaW5pdChDT05GSUdfU1BMX1JFTE9DX01BTExPQ19BRERSLAorCQkJQ09ORklHX1NQTF9SRUxPQ19NQUxMT0NfU0laRSk7CisKKyNpZm5kZWYgQ09ORklHX1NQTF9OQU5EX0JPT1QKKwllbnZfaW5pdCgpOworCWVudl9yZWxvY2F0ZSgpOworI2Vsc2UKKwkvKiByZWxvY2F0ZSBlbnZpcm9ubWVudCBmdW5jdGlvbiBwb2ludGVycyBldGMuICovCisJbmFuZF9zcGxfbG9hZF9pbWFnZShDT05GSUdfRU5WX09GRlNFVCwgQ09ORklHX0VOVl9TSVpFLAorCQkJICAgICh1Y2hhciAqKUNPTkZJR19FTlZfQUREUik7CisJZ2QtPmVudl9hZGRyICA9ICh1bG9uZykoQ09ORklHX0VOVl9BRERSKTsKKwlnZC0+ZW52X3ZhbGlkID0gMTsKKyNlbmRpZgorCisJaTJjX2luaXRfYWxsKCk7CisKKwlwdXRzKCJcblxuIik7CisKKwlnZC0+cmFtX3NpemUgPSBpbml0ZHJhbSgwKTsKKworI2lmZGVmIENPTkZJR19TUExfTkFORF9CT09UCisJbmFuZF9ib290KCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9iNDg2MHFkcy90bGIuYyBiL2JvYXJkL2ZyZWVzY2FsZS9iNDg2MHFkcy90bGIuYwppbmRleCAwMDc5OGExLi43YjU1Yjg2IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvYjQ4NjBxZHMvdGxiLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL2I0ODYwcWRzL3RsYi5jCkBAIC02Miw2ICs2Miw3IEBACiAJCSAgICAgIE1BUzNfU1h8TUFTM19TUiwgTUFTMl9XfE1BUzJfRywKIAkJICAgICAgMCwgMiwgQk9PS0VfUEFHRVNaXzI1Nk0sIDEpLAogCisjaWZuZGVmIENPTkZJR19TUExfQlVJTEQKIAkvKiAqSSpHKiAtIFBDSSAqLwogCVNFVF9UTEJfRU5UUlkoMSwgQ09ORklHX1NZU19QQ0lFMV9NRU1fVklSVCwgQ09ORklHX1NZU19QQ0lFMV9NRU1fUEhZUywKIAkJICAgICAgTUFTM19TWHxNQVMzX1NXfE1BUzNfU1IsIE1BUzJfSXxNQVMyX0csCkBAIC05Niw2ICs5Nyw3IEBACiAJCSAgICAgIE1BUzNfU1h8TUFTM19TV3xNQVMzX1NSLCBNQVMyX0l8TUFTMl9HLAogCQkgICAgICAwLCA5LCBCT09LRV9QQUdFU1pfMTZNLCAxKSwKICNlbmRpZgorI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NZU19EQ1NSQkFSX1BIWVMKIAlTRVRfVExCX0VOVFJZKDEsIENPTkZJR19TWVNfRENTUkJBUiwgQ09ORklHX1NZU19EQ1NSQkFSX1BIWVMsCiAJCSAgICAgIE1BUzNfU1h8TUFTM19TV3xNQVMzX1NSLCBNQVMyX0l8TUFTMl9HLApAQCAtMTE4LDYgKzEyMCw3IEBACiAJICogZW50cnkgMTQgYW5kIDE1IGhhcyBiZWVuIHVzZWQgaGFyZCBjb2RlZCwgdGhleSB3aWxsIGJlIGRpc2FibGVkCiAJICogaW4gY3B1X2luaXRfZiwgc28gd2UgdXNlIGVudHJ5IDE2IGZvciBTUklPMi4KIAkgKi8KKyNpZm5kZWYgQ09ORklHX1NQTF9CVUlMRAogI2lmZGVmIENPTkZJR19TWVNfU1JJTzFfTUVNX1BIWVMKIAkvKiAqSSpHKiAtIFNSSU8xICovCiAJU0VUX1RMQl9FTlRSWSgxLCBDT05GSUdfU1lTX1NSSU8xX01FTV9WSVJULCBDT05GSUdfU1lTX1NSSU8xX01FTV9QSFlTLApAQCAtMTQwLDYgKzE0MywxMyBAQAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgTUFTMl9HLAogCQkgICAgICAwLCAxNywgQk9PS0VfUEFHRVNaXzFNLCAxKSwKICNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19SQU1CT09UX1BCTCkgJiYgIWRlZmluZWQoQ09ORklHX1NQTF9CVUlMRCkKKwlTRVRfVExCX0VOVFJZKDEsIENPTkZJR19TWVNfRERSX1NEUkFNX0JBU0UsIENPTkZJR19TWVNfRERSX1NEUkFNX0JBU0UsCisJCSAgICAgIE1BUzNfU1h8TUFTM19TV3xNQVMzX1NSLCAwLAorCQkgICAgICAwLCAxNywgQk9PS0VfUEFHRVNaXzJHLCAxKQorI2VuZGlmCiB9OwogCiBpbnQgbnVtX3RsYl9lbnRyaWVzID0gQVJSQVlfU0laRSh0bGJfdGFibGUpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvbW91c3NlL01ha2VmaWxlIGIvYm9hcmQvZnJlZXNjYWxlL3FlbXUtcHBjZTUwMC9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDYzJQpyZW5hbWUgZnJvbSBib2FyZC9tb3Vzc2UvTWFrZWZpbGUKcmVuYW1lIHRvIGJvYXJkL2ZyZWVzY2FsZS9xZW11LXBwY2U1MDAvTWFrZWZpbGUKaW5kZXggZTI5NTFkNS4uMmQyNzQ5MiAxMDA2NDQKLS0tIGEvYm9hcmQvbW91c3NlL01ha2VmaWxlCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9xZW11LXBwY2U1MDAvTWFrZWZpbGUKQEAgLTEsOCArMSw5IEBACiAjCisjIENvcHlyaWdodCAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwogIwogCi1vYmoteQk9IG1vdXNzZS5vIG00OHQ1OXkubyBwY2kubyBmbGFzaC5vCitvYmoteQkrPSBxZW11LXBwY2U1MDAubwpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL3FlbXUtcHBjZTUwMC9xZW11LXBwY2U1MDAuYyBiL2JvYXJkL2ZyZWVzY2FsZS9xZW11LXBwY2U1MDAvcWVtdS1wcGNlNTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RiYjBjZgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9xZW11LXBwY2U1MDAvcWVtdS1wcGNlNTAwLmMKQEAgLTAsMCArMSwzNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNywyMDA5LTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPHBjaS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL2ZzbF9wY2kuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaWJmZHQuaD4KKyNpbmNsdWRlIDxmZHRfc3VwcG9ydC5oPgorI2luY2x1ZGUgPG5ldGRldi5oPgorI2luY2x1ZGUgPGZkdGRlYy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCitzdGF0aWMgdm9pZCAqZ2V0X2ZkdF92aXJ0KHZvaWQpCit7CisJcmV0dXJuICh2b2lkICopQ09ORklHX1NZU19UTVBWSVJUOworfQorCitzdGF0aWMgdWludDY0X3QgZ2V0X2ZkdF9waHlzKHZvaWQpCit7CisJcmV0dXJuICh1aW50NjRfdCkodWludHB0cl90KWdkLT5mZHRfYmxvYjsKK30KKworc3RhdGljIHZvaWQgbWFwX2ZkdF9hcyhpbnQgZXNlbCkKK3sKKwl1MzIgbWFzMCwgbWFzMSwgbWFzMiwgbWFzMywgbWFzNzsKKwl1aW50NjRfdCBmZHRfcGh5cyA9IGdldF9mZHRfcGh5cygpOworCXVuc2lnbmVkIGxvbmcgZmR0X3BoeXNfdGxiID0gZmR0X3BoeXMgJiB+MHhmZmZmZnVsOworCXVuc2lnbmVkIGxvbmcgZmR0X3ZpcnRfdGxiID0gKHVsb25nKWdldF9mZHRfdmlydCgpICYgfjB4ZmZmZmZ1bDsKKworCW1hczAgPSBNQVMwX1RMQlNFTCgxKSB8IE1BUzBfRVNFTChlc2VsKTsKKwltYXMxID0gTUFTMV9WQUxJRCB8IE1BUzFfVElEKDApIHwgTUFTMV9UUyB8IE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzFNKTsKKwltYXMyID0gRlNMX0JPT0tFX01BUzIoZmR0X3ZpcnRfdGxiLCAwKTsKKwltYXMzID0gRlNMX0JPT0tFX01BUzMoZmR0X3BoeXNfdGxiLCAwLCBNQVMzX1NXfE1BUzNfU1IpOworCW1hczcgPSBGU0xfQk9PS0VfTUFTNyhmZHRfcGh5c190bGIpOworCisJd3JpdGVfdGxiKG1hczAsIG1hczEsIG1hczIsIG1hczMsIG1hczcpOworfQorCit1aW50NjRfdCBnZXRfcGh5c19jY3NyYmFyX2FkZHJfZWFybHkodm9pZCkKK3sKKwl2b2lkICpmZHQgPSBnZXRfZmR0X3ZpcnQoKTsKKwl1aW50NjRfdCByOworCisJLyoKKwkgKiBUbyBiZSBhYmxlIHRvIHJlYWQgdGhlIEZEVCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBUTEIKKwkgKiBtYXAgZm9yIGl0LgorCSAqLworCW1hcF9mZHRfYXMoMTApOworCXIgPSBmZHRfZ2V0X2Jhc2VfYWRkcmVzcyhmZHQsIGZkdF9wYXRoX29mZnNldChmZHQsICIvc29jIikpOworCWRpc2FibGVfdGxiKDEwKTsKKworCXJldHVybiByOworfQorCitpbnQgYm9hcmRfZWFybHlfaW5pdF9mKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjaGVja2JvYXJkKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpX21hcF9yZWdpb24odm9pZCAqZmR0LCBpbnQgcGNpX25vZGUsIGludCByYW5nZV9pZCwKKwkJCSAgcGh5c19zaXplX3QgKnBwYWRkciwgcGNpX2FkZHJfdCAqcHZhZGRyLAorCQkJICBwY2lfc2l6ZV90ICpwc2l6ZSwgdWxvbmcgKnBtYXBfYWRkcikKK3sKKwl1aW50NjRfdCBhZGRyOworCXVpbnQ2NF90IHNpemU7CisJdWxvbmcgbWFwX2FkZHI7CisJaW50IHI7CisKKwlyID0gZmR0X3JlYWRfcmFuZ2UoZmR0LCBwY2lfbm9kZSwgMCwgTlVMTCwgJmFkZHIsICZzaXplKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlpZiAocHBhZGRyKQorCQkqcHBhZGRyID0gYWRkcjsKKwlpZiAocHNpemUpCisJCSpwc2l6ZSA9IHNpemU7CisKKwlpZiAoIXBtYXBfYWRkcikKKwkJcmV0dXJuIDA7CisKKwltYXBfYWRkciA9ICpwbWFwX2FkZHI7CisKKwkvKiBBbGlnbiBtYXBfYWRkciAqLworCW1hcF9hZGRyICs9IHNpemUgLSAxOworCW1hcF9hZGRyICY9IH4oc2l6ZSAtIDEpOworCisJaWYgKG1hcF9hZGRyICsgc2l6ZSA+PSBDT05GSUdfU1lTX1BDSV9NQVBfRU5EKQorCQlyZXR1cm4gLTE7CisKKwkvKiBNYXAgdmlydHVhbCBtZW1vcnkgZm9yIHJhbmdlICovCisJYXNzZXJ0KCF0bGJfbWFwX3JhbmdlKG1hcF9hZGRyLCBhZGRyLCBzaXplLCBUTEJfTUFQX0lPKSk7CisJKnBtYXBfYWRkciA9IG1hcF9hZGRyICsgc2l6ZTsKKworCWlmIChwdmFkZHIpCisJCSpwdmFkZHIgPSBtYXBfYWRkcjsKKworCXJldHVybiAwOworfQorCit2b2lkIHBjaV9pbml0X2JvYXJkKHZvaWQpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpwY2lfaG9zZXM7CisJdm9pZCAqZmR0ID0gZ2V0X2ZkdF92aXJ0KCk7CisJaW50IHBjaV9ub2RlID0gLTE7CisJaW50IHBjaV9udW0gPSAwOworCWludCBwY2lfY291bnQgPSAwOworCXVsb25nIG1hcF9hZGRyOworCisJcHV0cygiXG4iKTsKKworCS8qIFN0YXJ0IE1NSU8gYW5kIFBJTyByYW5nZSBtYXBzIGFib3ZlIFJBTSAqLworCW1hcF9hZGRyID0gQ09ORklHX1NZU19QQ0lfTUFQX1NUQVJUOworCisJLyogQ291bnQgYW5kIGFsbG9jYXRlIFBDSSBidXNlcyAqLworCXBjaV9ub2RlID0gZmR0X25vZGVfb2Zmc2V0X2J5X3Byb3BfdmFsdWUoZmR0LCBwY2lfbm9kZSwKKwkJCSJkZXZpY2VfdHlwZSIsICJwY2kiLCA0KTsKKwl3aGlsZSAocGNpX25vZGUgIT0gLUZEVF9FUlJfTk9URk9VTkQpIHsKKwkJcGNpX25vZGUgPSBmZHRfbm9kZV9vZmZzZXRfYnlfcHJvcF92YWx1ZShmZHQsIHBjaV9ub2RlLAorCQkJCSJkZXZpY2VfdHlwZSIsICJwY2kiLCA0KTsKKwkJcGNpX2NvdW50Kys7CisJfQorCisJaWYgKHBjaV9jb3VudCkgeworCQlwY2lfaG9zZXMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfY29udHJvbGxlcikgKiBwY2lfY291bnQpOworCX0gZWxzZSB7CisJCXByaW50ZigiUENJOiBkaXNhYmxlZFxuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFNwYXduIFBDSSBidXNlcyBiYXNlZCBvbiBkZXZpY2UgdHJlZSAqLworCXBjaV9ub2RlID0gZmR0X25vZGVfb2Zmc2V0X2J5X3Byb3BfdmFsdWUoZmR0LCBwY2lfbm9kZSwKKwkJCSJkZXZpY2VfdHlwZSIsICJwY2kiLCA0KTsKKwl3aGlsZSAocGNpX25vZGUgIT0gLUZEVF9FUlJfTk9URk9VTkQpIHsKKwkJc3RydWN0IGZzbF9wY2lfaW5mbyBwY2lfaW5mbyA9IHsgfTsKKwkJY29uc3QgZmR0MzJfdCAqcmVnOworCQlpbnQgcjsKKworCQlyZWcgPSBmZHRfZ2V0cHJvcChmZHQsIHBjaV9ub2RlLCAicmVnIiwgTlVMTCk7CisJCXBjaV9pbmZvLnJlZ3MgPSBmZHRfdHJhbnNsYXRlX2FkZHJlc3MoZmR0LCBwY2lfbm9kZSwgcmVnKTsKKworCQkvKiBNYXAgTU1JTyByYW5nZSAqLworCQlyID0gcGNpX21hcF9yZWdpb24oZmR0LCBwY2lfbm9kZSwgMCwgJnBjaV9pbmZvLm1lbV9waHlzLCBOVUxMLAorCQkJCSAgICZwY2lfaW5mby5tZW1fc2l6ZSwgJm1hcF9hZGRyKTsKKwkJaWYgKHIpCisJCQlicmVhazsKKworCQkvKiBNYXAgUElPIHJhbmdlICovCisJCXIgPSBwY2lfbWFwX3JlZ2lvbihmZHQsIHBjaV9ub2RlLCAxLCAmcGNpX2luZm8uaW9fcGh5cywgTlVMTCwKKwkJCQkgICAmcGNpX2luZm8uaW9fc2l6ZSwgJm1hcF9hZGRyKTsKKwkJaWYgKHIpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBUaGUgUENJIGZyYW1ld29yayBmaW5kcyB2aXJ0dWFsIGFkZHJlc3NlcyBmb3IgdGhlIGJ1c2VzCisJCSAqIHRocm91Z2ggb3VyIGFkZHJlc3MgbWFwLCBzbyB0ZWxsIGl0IHRoZSBwaHlzaWNhbCBhZGRyZXNzZXMuCisJCSAqLworCQlwY2lfaW5mby5tZW1fYnVzID0gcGNpX2luZm8ubWVtX3BoeXM7CisJCXBjaV9pbmZvLmlvX2J1cyA9IHBjaV9pbmZvLmlvX3BoeXM7CisKKwkJLyogSW5zdGFudGlhdGUgKi8KKwkJcGNpX2luZm8ucGNpX251bSA9IHBjaV9udW0gKyAxOworCisJCWZzbF9zZXR1cF9ob3NlKCZwY2lfaG9zZXNbcGNpX251bV0sIHBjaV9pbmZvLnJlZ3MpOworCQlwcmludGYoIlBDSTogYmFzZSBhZGRyZXNzICVseFxuIiwgcGNpX2luZm8ucmVncyk7CisKKwkJZnNsX3BjaV9pbml0X3BvcnQoJnBjaV9pbmZvLCAmcGNpX2hvc2VzW3BjaV9udW1dLCBwY2lfbnVtKTsKKworCQkvKiBKdW1wIHRvIG5leHQgUENJIG5vZGUgKi8KKwkJcGNpX25vZGUgPSBmZHRfbm9kZV9vZmZzZXRfYnlfcHJvcF92YWx1ZShmZHQsIHBjaV9ub2RlLAorCQkJCSJkZXZpY2VfdHlwZSIsICJwY2kiLCA0KTsKKwkJcGNpX251bSsrOworCX0KKworCXB1dHMoIlxuIik7Cit9CisKK2ludCBsYXN0X3N0YWdlX2luaXQodm9pZCkKK3sKKwl2b2lkICpmZHQgPSBnZXRfZmR0X3ZpcnQoKTsKKwlpbnQgbGVuID0gMDsKKwljb25zdCB1aW50NjRfdCAqcHJvcDsKKwlpbnQgY2hvc2VuOworCisJY2hvc2VuID0gZmR0X3BhdGhfb2Zmc2V0KGZkdCwgIi9jaG9zZW4iKTsKKwlpZiAoY2hvc2VuIDwgMCkgeworCQlwcmludGYoIkNvdWxkbid0IGZpbmQgL2Nob3NlbiBub2RlIGluIGZkdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIC1rZXJuZWwgYm9vdCAqLworCXByb3AgPSBmZHRfZ2V0cHJvcChmZHQsIGNob3NlbiwgInFlbXUsYm9vdC1rZXJuZWwiLCAmbGVuKTsKKwlpZiAocHJvcCAmJiAobGVuID49IDgpKQorCQlzZXRlbnZfaGV4KCJxZW11X2tlcm5lbF9hZGRyIiwgKnByb3ApOworCisJLyogR2l2ZSB0aGUgdXNlciBhIHZhcmlhYmxlIGZvciB0aGUgaG9zdCBmZHQgKi8KKwlzZXRlbnZfaGV4KCJmZHRfYWRkcl9yIiwgKHVsb25nKWZkdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQ2NF90IGdldF9saW5lYXJfcmFtX3NpemUodm9pZCkKK3sKKwl2b2lkICpmZHQgPSBnZXRfZmR0X3ZpcnQoKTsKKwljb25zdCB2b2lkICpwcm9wOworCWludCBtZW1vcnk7CisJaW50IGxlbjsKKworCW1lbW9yeSA9IGZkdF9wYXRoX29mZnNldChmZHQsICIvbWVtb3J5Iik7CisJcHJvcCA9IGZkdF9nZXRwcm9wKGZkdCwgbWVtb3J5LCAicmVnIiwgJmxlbik7CisKKwlpZiAocHJvcCAmJiBsZW4gPj0gMTYpCisJCXJldHVybiAqKHVpbnQ2NF90ICopKHByb3ArOCk7CisKKwlwYW5pYygiQ291bGRuJ3QgZGV0ZXJtaW5lIFJBTSBzaXplIik7Cit9CisKK2ludCBib2FyZF9ldGhfaW5pdChiZF90ICpiaXMpCit7CisJcmV0dXJuIHBjaV9ldGhfaW5pdChiaXMpOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCit2b2lkIGZ0X2JvYXJkX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCUZUX0ZTTF9QQ0lfU0VUVVA7Cit9CisjZW5kaWYKKwordm9pZCBwcmludF9sYXdzKHZvaWQpCit7CisJLyogV2UgZG9uJ3QgZW11bGF0ZSBMQVdzIHlldCAqLworfQorCitwaHlzX3NpemVfdCBmaXhlZF9zZHJhbSh2b2lkKQoreworCXJldHVybiBnZXRfbGluZWFyX3JhbV9zaXplKCk7Cit9CisKK3BoeXNfc2l6ZV90IGZzbF9kZHJfc2RyYW1fc2l6ZSh2b2lkKQoreworCXJldHVybiBnZXRfbGluZWFyX3JhbV9zaXplKCk7Cit9CisKK3ZvaWQgaW5pdF90bGJzKHZvaWQpCit7CisJcGh5c19zaXplX3QgcmFtX3NpemU7CisKKwkvKgorCSAqIENyZWF0ZSBhIHRlbXBvcmFyeSBBUz0xIG1hcCBmb3IgdGhlIGZkdAorCSAqCisJICogV2UgdXNlIEVTRUw9MCBoZXJlIHRvIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgQVM9MCBtYXAgZm9yIG91cnNlbHZlcworCSAqIHdoaWNoIHdhcyBvbmx5IDRrIGJpZy4gVGhpcyB3YXkgd2UgZG9uJ3QgaGF2ZSB0byBjbGVhciBhbnkgb3RoZXIgbWFwcy4KKwkgKi8KKwltYXBfZmR0X2FzKDApOworCisJLyogRmV0Y2ggUkFNIHNpemUgZnJvbSB0aGUgZmR0ICovCisJcmFtX3NpemUgPSBnZXRfbGluZWFyX3JhbV9zaXplKCk7CisKKwkvKiBBbmQgcmVtb3ZlIG91ciBmZHQgbWFwIGFnYWluICovCisJZGlzYWJsZV90bGIoMCk7CisKKwkvKiBDcmVhdGUgYW4gaW50ZXJuYWwgbWFwIG9mIG1hbnVhbGx5IGNyZWF0ZWQgVExCIG1hcHMgKi8KKwlpbml0X3VzZWRfdGxiX2NhbXMoKTsKKworCS8qIENyZWF0ZSBhIGR5bmFtaWMgQVM9MCBDQ1NSQkFSIG1hcHBpbmcgKi8KKwlhc3NlcnQoIXRsYl9tYXBfcmFuZ2UoQ09ORklHX1NZU19DQ1NSQkFSLCBDT05GSUdfU1lTX0NDU1JCQVJfUEhZUywKKwkJCSAgICAgIDEwMjQgKiAxMDI0LCBUTEJfTUFQX0lPKSk7CisKKwkvKiBDcmVhdGUgYSBSQU0gbWFwIHRoYXQgc3BhbnMgYWxsIGFjY2Vzc2libGUgUkFNICovCisJc2V0dXBfZGRyX3RsYnMocmFtX3NpemUgPj4gMjApOworCisJLyogQ3JlYXRlIGEgbWFwIGZvciB0aGUgVExCICovCisJYXNzZXJ0KCF0bGJfbWFwX3JhbmdlKCh1bG9uZylnZXRfZmR0X3ZpcnQoKSwgZ2V0X2ZkdF9waHlzKCksCisJCQkgICAgICAxMDI0ICogMTAyNCwgVExCX01BUF9SQU0pKTsKK30KKwordm9pZCBpbml0X2xhd3Modm9pZCkKK3sKKwkvKiBXZSBkb24ndCBlbXVsYXRlIExBV3MgeWV0ICovCit9CisKK3N0YXRpYyB1aW50MzJfdCBnZXRfY3B1X2ZyZXEodm9pZCkKK3sKKwl2b2lkICpmZHQgPSBnZXRfZmR0X3ZpcnQoKTsKKwlpbnQgY3B1c19ub2RlID0gZmR0X3BhdGhfb2Zmc2V0KGZkdCwgIi9jcHVzIik7CisJaW50IGNwdV9ub2RlID0gZmR0X2ZpcnN0X3N1Ym5vZGUoZmR0LCBjcHVzX25vZGUpOworCWNvbnN0IGNoYXIgKnByb3AgPSAiY2xvY2stZnJlcXVlbmN5IjsKKwlyZXR1cm4gZmR0X2dldHByb3BfdTMyX2RlZmF1bHRfbm9kZShmZHQsIGNwdV9ub2RlLCAwLCBwcm9wLCAwKTsKK30KKwordm9pZCBnZXRfc3lzX2luZm8oc3lzX2luZm9fdCAqc3lzX2luZm8pCit7CisJaW50IGZyZXEgPSBnZXRfY3B1X2ZyZXEoKTsKKworCW1lbXNldChzeXNfaW5mbywgMCwgc2l6ZW9mKHN5c19pbmZvX3QpKTsKKwlzeXNfaW5mby0+ZnJlcV9zeXN0ZW1idXMgPSBmcmVxOworCXN5c19pbmZvLT5mcmVxX2RkcmJ1cyA9IGZyZXE7CisJc3lzX2luZm8tPmZyZXFfcHJvY2Vzc29yWzBdID0gZnJlcTsKK30KKworaW50IGdldF9jbG9ja3MgKHZvaWQpCit7CisJc3lzX2luZm9fdCBzeXNfaW5mbzsKKworCWdldF9zeXNfaW5mbygmc3lzX2luZm8pOworCisJZ2QtPmNwdV9jbGsgPSBzeXNfaW5mby5mcmVxX3Byb2Nlc3NvclswXTsKKwlnZC0+YnVzX2NsayA9IHN5c19pbmZvLmZyZXFfc3lzdGVtYnVzOworCWdkLT5tZW1fY2xrID0gc3lzX2luZm8uZnJlcV9kZHJidXM7CisJZ2QtPmFyY2gubGJjX2NsayA9IHN5c19pbmZvLmZyZXFfZGRyYnVzOworCisJcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3RiY2xrICh2b2lkKQoreworCXZvaWQgKmZkdCA9IGdldF9mZHRfdmlydCgpOworCWludCBjcHVzX25vZGUgPSBmZHRfcGF0aF9vZmZzZXQoZmR0LCAiL2NwdXMiKTsKKwlpbnQgY3B1X25vZGUgPSBmZHRfZmlyc3Rfc3Vibm9kZShmZHQsIGNwdXNfbm9kZSk7CisJY29uc3QgY2hhciAqcHJvcCA9ICJ0aW1lYmFzZS1mcmVxdWVuY3kiOworCXJldHVybiBmZHRfZ2V0cHJvcF91MzJfZGVmYXVsdF9ub2RlKGZkdCwgY3B1X25vZGUsIDAsIHByb3AsIDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdldF9idXNfZnJlcQorICogcmV0dXJuIHN5c3RlbSBidXMgZnJlcSBpbiBIegorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Vsb25nIGdldF9idXNfZnJlcSAodWxvbmcgZHVtbXkpCit7CisJc3lzX2luZm9fdCBzeXNfaW5mbzsKKwlnZXRfc3lzX2luZm8oJnN5c19pbmZvKTsKKwlyZXR1cm4gc3lzX2luZm8uZnJlcV9zeXN0ZW1idXM7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvdDEwNDBxZHMvZGRyLmMgYi9ib2FyZC9mcmVlc2NhbGUvdDEwNDBxZHMvZGRyLmMKaW5kZXggZGE4OWEzNi4uNDNmOTUyZiAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL3QxMDQwcWRzL2Rkci5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS90MTA0MHFkcy9kZHIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAxMyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwogICovCkBAIC0zOSwxNCArMzksMTAgQEAKIAkJaWYgKHBic3AtPm5fcmFua3MgPT0gcGRpbW0tPm5fcmFua3MgJiYKIAkJICAgIChwZGltbS0+cmFua19kZW5zaXR5ID4+IDMwKSA+PSBwYnNwLT5yYW5rX2diKSB7CiAJCQlpZiAoZGRyX2ZyZXEgPD0gcGJzcC0+ZGF0YXJhdGVfbWh6X2hpZ2gpIHsKLQkJCQlwb3B0cy0+Y3BvX292ZXJyaWRlID0gcGJzcC0+Y3BvOwotCQkJCXBvcHRzLT53cml0ZV9kYXRhX2RlbGF5ID0KLQkJCQkJcGJzcC0+d3JpdGVfZGF0YV9kZWxheTsKIAkJCQlwb3B0cy0+Y2xrX2FkanVzdCA9IHBic3AtPmNsa19hZGp1c3Q7CiAJCQkJcG9wdHMtPndybHZsX3N0YXJ0ID0gcGJzcC0+d3Jsdmxfc3RhcnQ7CiAJCQkJcG9wdHMtPndybHZsX2N0bF8yID0gcGJzcC0+d3JsdmxfY3RsXzI7CiAJCQkJcG9wdHMtPndybHZsX2N0bF8zID0gcGJzcC0+d3JsdmxfY3RsXzM7Ci0JCQkJcG9wdHMtPnR3b3RfZW4gPSBwYnNwLT5mb3JjZV8ydDsKIAkJCQlnb3RvIGZvdW5kOwogCQkJfQogCQkJcGJzcF9oaWdoZXN0ID0gcGJzcDsKQEAgLTU5LDEzICs1NSwxMCBAQAogCQlwcmludGYoImZvciBkYXRhIHJhdGUgJWx1IE1UL3NcbiIsIGRkcl9mcmVxKTsKIAkJcHJpbnRmKCJUcnlpbmcgdG8gdXNlIHRoZSBoaWdoZXN0IHNwZWVkICgldSkgcGFyYW1ldGVyc1xuIiwKIAkJICAgICAgIHBic3BfaGlnaGVzdC0+ZGF0YXJhdGVfbWh6X2hpZ2gpOwotCQlwb3B0cy0+Y3BvX292ZXJyaWRlID0gcGJzcF9oaWdoZXN0LT5jcG87Ci0JCXBvcHRzLT53cml0ZV9kYXRhX2RlbGF5ID0gcGJzcF9oaWdoZXN0LT53cml0ZV9kYXRhX2RlbGF5OwogCQlwb3B0cy0+Y2xrX2FkanVzdCA9IHBic3BfaGlnaGVzdC0+Y2xrX2FkanVzdDsKIAkJcG9wdHMtPndybHZsX3N0YXJ0ID0gcGJzcF9oaWdoZXN0LT53cmx2bF9zdGFydDsKIAkJcG9wdHMtPndybHZsX2N0bF8yID0gcGJzcC0+d3JsdmxfY3RsXzI7CiAJCXBvcHRzLT53cmx2bF9jdGxfMyA9IHBic3AtPndybHZsX2N0bF8zOwotCQlwb3B0cy0+dHdvdF9lbiA9IHBic3BfaGlnaGVzdC0+Zm9yY2VfMnQ7CiAJfSBlbHNlIHsKIAkJcGFuaWMoIkRJTU0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJvYXJkIik7CiAJfQpAQCAtODEsNyArNzQsNyBAQAogCSAqIEZhY3RvcnMgdG8gY29uc2lkZXIgZm9yIGhhbGYtc3RyZW5ndGggZHJpdmVyIGVuYWJsZToKIAkgKgktIG51bWJlciBvZiBESU1NcyBpbnN0YWxsZWQKIAkgKi8KLQlwb3B0cy0+aGFsZl9zdHJlbmd0aF9kcml2ZXJfZW5hYmxlID0gMDsKKwlwb3B0cy0+aGFsZl9zdHJlbmd0aF9kcml2ZXJfZW5hYmxlID0gMTsKIAkvKgogCSAqIFdyaXRlIGxldmVsaW5nIG92ZXJyaWRlCiAJICovCkBAIC05Nyw4ICs5MCwxNCBAQAogCXBvcHRzLT56cV9lbiA9IDE7CiAKIAkvKiBESENfRU4gPTEsIE9EVCA9IDc1IE9obSAqLworI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwlwb3B0cy0+ZGRyX2NkcjEgPSBERFJfQ0RSMV9ESENfRU4gfCBERFJfQ0RSMV9PRFQoRERSX0NEUl9PRFRfODBvaG0pOworCXBvcHRzLT5kZHJfY2RyMiA9IEREUl9DRFIyX09EVChERFJfQ0RSX09EVF84MG9obSkgfAorCQkJICBERFJfQ0RSMl9WUkVGX09WUkQoNzApOwkvKiBWcmVmID0gNzAlICovCisjZWxzZQogCXBvcHRzLT5kZHJfY2RyMSA9IEREUl9DRFIxX0RIQ19FTiB8IEREUl9DRFIxX09EVChERFJfQ0RSX09EVF83NW9obSk7CiAJcG9wdHMtPmRkcl9jZHIyID0gRERSX0NEUjJfT0RUKEREUl9DRFJfT0RUXzc1b2htKTsKKyNlbmRpZgogfQogCiBwaHlzX3NpemVfdCBpbml0ZHJhbShpbnQgYm9hcmRfdHlwZSkKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS90MTA0MHFkcy9kZHIuaCBiL2JvYXJkL2ZyZWVzY2FsZS90MTA0MHFkcy9kZHIuaAppbmRleCBhZmE3MmFmLi5hNmUxNjczIDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvdDEwNDBxZHMvZGRyLmgKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3QxMDQwcWRzL2Rkci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDEzIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCiAgKi8KQEAgLTE0LDkgKzE0LDYgQEAKIAl1MzIgd3Jsdmxfc3RhcnQ7CiAJdTMyIHdybHZsX2N0bF8yOwogCXUzMiB3cmx2bF9jdGxfMzsKLQl1MzIgY3BvOwotCXUzMiB3cml0ZV9kYXRhX2RlbGF5OwotCXUzMiBmb3JjZV8ydDsKIH07CiAKIC8qCkBAIC0yOCwyMSArMjUsMjUgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYm9hcmRfc3BlY2lmaWNfcGFyYW1ldGVycyB1ZGltbTBbXSA9IHsKIAkvKgogCSAqIG1lbW9yeSBjb250cm9sbGVyIDAKLQkgKiAgIG51bXwgIGhpfCByYW5rfCAgY2xrfCB3cmx2bCB8ICAgd3JsdmwgICB8ICB3cmx2bCB8IGNwbyAgfHdyZGF0YXwyVAotCSAqIHJhbmtzfCBtaHp8IEdCICB8YWRqc3R8IHN0YXJ0IHwgICBjdGwyICAgIHwgIGN0bDMgIHwgICAgICB8ZGVsYXkgfAorCSAqICAgbnVtfCAgaGl8IHJhbmt8ICBjbGt8IHdybHZsIHwgICB3cmx2bCAgIHwgIHdybHZsIHwKKwkgKiByYW5rc3wgbWh6fCBHQiAgfGFkanN0fCBzdGFydCB8ICAgY3RsMiAgICB8ICBjdGwzICB8CiAJICovCi0JezIsICA4MzMsICA0LCA0LCAgICAgNiwgMHgwNjA2MDYwNywgMHgwODA4MDgwNywgICAweGZmLCAgICAyLCAgMH0sCi0JezIsICA4MzMsICAwLCA0LCAgICAgNiwgMHgwNjA2MDYwNywgMHgwODA4MDgwNywgICAweGZmLCAgICAyLCAgMH0sCi0JezIsICAxMzUwLCA0LCA0LCAgICAgNywgMHgwNzA4MDgwQSwgMHgwQTBCMEMwOSwgICAweGZmLCAgICAyLCAgMH0sCi0JezIsICAxMzUwLCAwLCA0LCAgICAgNywgMHgwNzA4MDgwQSwgMHgwQTBCMEMwOSwgICAweGZmLCAgICAyLCAgMH0sCi0JezIsICAxNjY2LCA0LCA0LCAgICAgNywgMHgwODA4MDkwQiwgMHgwQzBEMEUwQSwgICAweGZmLCAgICAyLCAgMH0sCi0JezIsICAxNjY2LCAwLCA0LCAgICAgNywgMHgwODA4MDkwQiwgMHgwQzBEMEUwQSwgICAweGZmLCAgICAyLCAgMH0sCi0JezEsICA4MzMsICA0LCA0LCAgICAgNiwgMHgwNjA2MDYwNywgMHgwODA4MDgwNywgICAweGZmLCAgICAyLCAgMH0sCi0JezEsICA4MzMsICAwLCA0LCAgICAgNiwgMHgwNjA2MDYwNywgMHgwODA4MDgwNywgICAweGZmLCAgICAyLCAgMH0sCi0JezEsICAxMzUwLCA0LCA0LCAgICAgNywgMHgwNzA4MDgwQSwgMHgwQTBCMEMwOSwgICAweGZmLCAgICAyLCAgMH0sCi0JezEsICAxMzUwLCAwLCA0LCAgICAgNywgMHgwNzA4MDgwQSwgMHgwQTBCMEMwOSwgICAweGZmLCAgICAyLCAgMH0sCi0JezEsICAxNjY2LCA0LCA0LCAgICAgNywgMHgwODA4MDkwQiwgMHgwQzBEMEUwQSwgICAweGZmLCAgICAyLCAgMH0sCi0JezEsICAxNjY2LCAwLCA0LCAgICAgNywgMHgwODA4MDkwQiwgMHgwQzBEMEUwQSwgICAweGZmLCAgICAyLCAgMH0sCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorCXsyLCAgMTY2NiwgMCwgNCwgICAgIDcsIDB4MDgwODA5MEIsIDB4MEMwRDBFMEEsfSwKKwl7MiwgIDE5MDAsIDAsIDQsICAgICA2LCAweDA4MDgwQTBDLCAweDBEMEUwRjBBLH0sCisJezEsICAxNjY2LCAwLCA0LCAgICAgNiwgMHgwNzA4MDkwQiwgMHgwQzBEMEUwOSx9LAorCXsxLCAgMTkwMCwgMCwgNCwgICAgIDYsIDB4MDgwODBBMEMsIDB4MEQwRTBGMEEsfSwKKwl7MSwgIDIyMDAsIDAsIDQsICAgICA3LCAweDA4MDkwQTBELCAweDBGMEYxMDBDLH0sCisjZWxpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpCisJezIsICA4MzMsICAwLCA0LCAgICAgNiwgMHgwNjA2MDYwNywgMHgwODA4MDgwNyx9LAorCXsyLCAgMTM1MCwgMCwgNCwgICAgIDcsIDB4MDcwODA4MEEsIDB4MEEwQjBDMDksfSwKKwl7MiwgIDE2NjYsIDAsIDQsICAgICA3LCAweDA4MDgwOTBCLCAweDBDMEQwRTBBLH0sCisJezEsICA4MzMsICAwLCA0LCAgICAgNiwgMHgwNjA2MDYwNywgMHgwODA4MDgwNyx9LAorCXsxLCAgMTM1MCwgMCwgNCwgICAgIDcsIDB4MDcwODA4MEEsIDB4MEEwQjBDMDksfSwKKwl7MSwgIDE2NjYsIDAsIDQsICAgICA3LCAweDA4MDgwOTBCLCAweDBDMEQwRTBBLH0sCisjZWxzZQorI2Vycm9yIEREUiB0eXBlIG5vdCBkZWZpbmVkCisjZW5kaWYKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL3QxMDQwcWRzL3QxMDQwcWRzLmMgYi9ib2FyZC9mcmVlc2NhbGUvdDEwNDBxZHMvdDEwNDBxZHMuYwppbmRleCAzZGVjNDQ3Li4wZTgzZDE3IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvdDEwNDBxZHMvdDEwNDBxZHMuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvdDEwNDBxZHMvdDEwNDBxZHMuYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgPGFzbS9mc2xfcG9ydGFscy5oPgogI2luY2x1ZGUgPGFzbS9mc2xfbGlvZG4uaD4KICNpbmNsdWRlIDxmbV9ldGguaD4KKyNpbmNsdWRlIDxod2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tcGM4NXh4X2dwaW8uaD4KIAogI2luY2x1ZGUgIi4uL2NvbW1vbi9xaXhpcy5oIgogI2luY2x1ZGUgInQxMDQwcWRzLmgiCkBAIC04OSw2ICs5MSwzMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBxZV9ib2FyZF9zZXR1cCh2b2lkKQoreworCXU4IGJyZGNmZzE1LCBicmRjZmc5OworCisJaWYgKGh3Y29uZmlnKCJxZSIpICYmIGh3Y29uZmlnKCJ0ZG0iKSkgeworCQlicmRjZmcxNSA9IFFJWElTX1JFQUQoYnJkY2ZnWzE1XSk7CisJCS8qCisJCSAqIFRETVJpc2VyIHVzZXMgUUUtVERNCisJCSAqIFJvdXRlIFFFX1RETSBzaWduYWxzIHRvIFRETSBSaXNlciBzbG90CisJCSAqLworCQlRSVhJU19XUklURShicmRjZmdbMTVdLCBicmRjZmcxNSB8IDcpOworCX0gZWxzZSBpZiAoaHdjb25maWcoInFlIikgJiYgaHdjb25maWcoInVhcnQiKSkgeworCQlicmRjZmcxNSA9IFFJWElTX1JFQUQoYnJkY2ZnWzE1XSk7CisJCWJyZGNmZzkgPSBRSVhJU19SRUFEKGJyZGNmZ1s5XSk7CisJCS8qCisJCSAqIFJvdXRlIFFFX1RETSBzaWduYWxzIHRvIFVDQworCQkgKiBQcm9maUJ1cyBjb250cm9sbGVkIGJ5IFVDQzMKKwkJICovCisJCWJyZGNmZzE1ICY9IDB4ZmM7CisJCVFJWElTX1dSSVRFKGJyZGNmZ1sxNV0sIGJyZGNmZzE1IHwgMik7CisJCVFJWElTX1dSSVRFKGJyZGNmZ1s5XSwgYnJkY2ZnOSB8IDQpOworCX0KK30KKwogaW50IGJvYXJkX2Vhcmx5X2luaXRfcih2b2lkKQogewogI2lmZGVmIENPTkZJR19TWVNfRkxBU0hfQkFTRQpAQCAtMTk2LDYgKzIyMiw4IEBACiAJCX0KIAl9CiAKKwlxZV9ib2FyZF9zZXR1cCgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NSwzICsyNzMsMTQgQEAKIHsKIAlyZXR1cm4gMTsKIH0KKworI2lmZGVmIENPTkZJR19ERUVQX1NMRUVQCit2b2lkIGJvYXJkX21lbV9zbGVlcF9zZXR1cCh2b2lkKQoreworCS8qIGRvZXMgbm90IHByb3ZpZGUgSFcgc2lnbmFscyBmb3IgcG93ZXIgbWFuYWdlbWVudCAqLworCVFJWElTX1dSSVRFKHB3cl9jdGxbMV0sIChRSVhJU19SRUFEKHB3cl9jdGxbMV0pICYgfjB4MikpOworCS8qIERpc2FibGUgTUNLRSBpc29sYXRpb24gKi8KKwlncGlvX3NldF92YWx1ZSgyLCAwKTsKKwl1ZGVsYXkoMSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi9NYWtlZmlsZSBiL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi9NYWtlZmlsZQppbmRleCBlNTFmYjdhLi42Y2QzMDRjIDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvTWFrZWZpbGUKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3QxMDR4cmRiL01ha2VmaWxlCkBAIC00LDEwICs0LDE0IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwogIwogCi0KK2lmZGVmIENPTkZJR19TUExfQlVJTEQKK29iai15ICs9IHNwbC5vCitlbHNlCiBvYmoteQkrPSB0MTA0eHJkYi5vCi1vYmoteQkrPSBkZHIubworb2JqLXkJKz0gY3BsZC5vCiBvYmoteQkrPSBldGgubwogb2JqLSQoQ09ORklHX1BDSSkJKz0gcGNpLm8KK2VuZGlmCitvYmoteQkrPSBkZHIubwogb2JqLXkJKz0gbGF3Lm8KIG9iai15CSs9IHRsYi5vCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvUkVBRE1FIGIvYm9hcmQvZnJlZXNjYWxlL3QxMDR4cmRiL1JFQURNRQppbmRleCAxZGE1MmJiLi5jZGJlMWZhIDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvUkVBRE1FCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi9SRUFETUUKQEAgLTE5OCwzICsxOTgsNzYgQEAKIAogCTIuVG8gY2hhbmdlIGZyb20gdmJhbms0IHRvIHZiYW5rMAogCQk9PiBxaXhpcyByZXNldCAoaXQgd2lsbCBib290IHVzaW5nIHZiYW5rMCkKKworTkFORCBib290IHdpdGggMiBTdGFnZSBib290IGxvYWRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUEJMIGluaXRpYWxpc2UgdGhlIGludGVybmFsIFNSQU0gYW5kIGNvcHkgU1BMKDE2MEtCKSBpbiBTUkFNLgorU1BMIGZ1cnRoZXIgaW5pdGlhbGlzZSBERFIgdXNpbmcgU1BEIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIGNvcHkKK3UtYm9vdCg3NjggS0IpIGZyb20gZmxhc2ggdG8gRERSLgorRmluYWxseSBTUEwgdHJhbnNlciBjb250cm9sIHRvIHUtYm9vdCBmb3IgZnV0aGVyIGJvb3RpbmcuCisKK1NQTCBoYXMgZm9sbG93aW5nIGZlYXR1cmVzOgorIC0gRXhlY3V0ZXMgd2l0aGluIDI1NksKKyAtIE5vIHJlbG9jYXRpb24gcmVxdWlyZWQKKworIFJ1biB0aW1lIHZpZXcgb2YgU1BMIGZyYW1ld29yayBkdXJpbmcgIGJvb3QgOi0KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFyZWEgICAgICAgIHwgQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlY3VyZSBib290IHwgMHhGRkZDMDAwMCAoMzJLQikgICAgICAgICAgICAgICB8CisgaGVhZGVycyAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdELCBCRCAgICAgIHwgMHhGRkZDODAwMCAoNEtCKSAgICAgICAgICAgICAgICB8CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBFTlYgICAgICAgICB8IDB4RkZGQzkwMDAgKDhLQikgICAgICAgICAgICAgICAgfAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSEVBUCAgICAgICAgfCAweEZGRkNCMDAwICgzMEtCKSAgICAgICAgICAgICAgIHwKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNUQUNLICAgICAgIHwgMHhGRkZEODAwMCAoMjJLQikgICAgICAgICAgICAgICB8CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVLWJvb3QgU1BMICB8IDB4RkZGRDgwMDAgKDE2MEtCKSAgICAgICAgICAgICAgfAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05BTkQgRmxhc2ggbWVtb3J5IE1hcCBvbiBUMTA0eFJEQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU3RhcnQJCSBFbmQJCURlZmluaXRpb24JCQlTaXplCisweDAwMDAwMAkweDBGRkZGRgl1LWJvb3QgICAgICAgICAgICAgICAgICAgICAgICAgIDFNQgorMHgxODAwMDAJMHgxOUZGRkYJdS1ib290IGVudiAgICAgICAgICAgICAgICAgICAgICAxMjhLQgorMHgyODAwMDAJMHgyOUZGRkYJRk1BTiBVY29kZSAgICAgICAgICAgICAgICAgICAgICAxMjhLQgorMHgzODAwMDAJMHgzOUZGRkYJUUUgRmlybXdhcmUgICAgICAgICAgICAgICAgICAgICAxMjhLQgorCitTRCBDYXJkIG1lbW9yeSBNYXAgb24gVDEwNHhSREIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJsb2NrCQkjYmxvY2tzCQlEZWZpbml0aW9uCQkJU2l6ZQorMHgwMDgJCTIwNDgJCXUtYm9vdCAgICAgICAgICAgICAgICAgICAgICAgICAgMU1CCisweDgwMAkJMDAyNAkJdS1ib290IGVudiAgICAgICAgICAgICAgICAgICAgICA4S0IKKzB4ODIwCQkwMjU2CQlGTUFOIFVjb2RlICAgICAgICAgICAgICAgICAgICAgIDEyOEtCCisweDkyMAkJMDI1NgkJUUUgRmlybXdhcmUgICAgICAgICAgICAgICAgICAgICAxMjhLQgorCitTUEkgRmxhc2ggbWVtb3J5IE1hcCBvbiBUMTA0eFJEQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU3RhcnQJCSBFbmQJCURlZmluaXRpb24JCQlTaXplCisweDAwMDAwMAkweDBGRkZGRgl1LWJvb3QgICAgICAgICAgICAgICAgICAgICAgICAgIDFNQgorMHgxMDAwMDAJMHgxMDFGRkYJdS1ib290IGVudiAgICAgICAgICAgICAgICAgICAgICA4S0IKKzB4MTEwMDAwCTB4MTJGRkZGCUZNQU4gVWNvZGUgICAgICAgICAgICAgICAgICAgICAgMTI4S0IKKzB4MTMwMDAwCTB4MTRGRkZGCVFFIEZpcm13YXJlICAgICAgICAgICAgICAgICAgICAgMTI4S0IKKworUGxlYXNlIG5vdGUgUUUgRmlybXdhcmUgaXMgb25seSB2YWxpZCBmb3IgVDEwNDBSREIKKworCitTd2l0Y2ggU2V0dGluZ3M6IChPTiBpcyAwLCBPRkYgaXMgMSkKKz09PT09PT09PT09PT09PQorTkFORCBib290IFNXIHNldHRpbmc6CitTVzE6IDEwMDAxMDAwCitTVzI6IDAwMTExMDAxCitTVzM6IDExMTEwMDAxCisKK1NQSSBib290IFNXIHNldHRpbmc6CitTVzE6IDAwMTAwMDEwCitTVzI6IDEwMTExMDAxCitTVzM6IDExMTAwMDAxCisKK1NEIGJvb3QgU1cgc2V0dGluZzoKK1NXMTogMDAxMDAwMDAKK1NXMjogMDAxMTEwMDEKK1NXMzogMTExMDAwMDEKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi9jcGxkLmMgYi9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvY3BsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMGUzNDgKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvY3BsZC5jCkBAIC0wLDAgKzEsMTEyIEBACisvKioKKyAqIENvcHlyaWdodCAyMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCisgKgorICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBib2FyZC1zcGVjaWZpYyBDUExEIHVzZWQgb24gc29tZSBGcmVlc2NhbGUKKyAqIHJlZmVyZW5jZSBib2FyZHMuCisgKgorICogVGhlIGZvbGxvd2luZyBtYWNyb3MgbmVlZCB0byBiZSBkZWZpbmVkOgorICoKKyAqIENPTkZJR19TWVNfQ1BMRF9CQVNFLVRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGJhc2Ugb2YgdGhlIENQTEQgcmVnaXN0ZXIgbWFwCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgImNwbGQuaCIKKwordTggY3BsZF9yZWFkKHVuc2lnbmVkIGludCByZWcpCit7CisJdm9pZCAqcCA9ICh2b2lkICopQ09ORklHX1NZU19DUExEX0JBU0U7CisKKwlyZXR1cm4gaW5fOChwICsgcmVnKTsKK30KKwordm9pZCBjcGxkX3dyaXRlKHVuc2lnbmVkIGludCByZWcsIHU4IHZhbHVlKQoreworCXZvaWQgKnAgPSAodm9pZCAqKUNPTkZJR19TWVNfQ1BMRF9CQVNFOworCisJb3V0XzgocCArIHJlZywgdmFsdWUpOworfQorCisvKioKKyAqIFNldCB0aGUgYm9vdCBiYW5rIHRvIHRoZSBhbHRlcm5hdGUgYmFuaworICovCit2b2lkIGNwbGRfc2V0X2FsdGJhbmsodm9pZCkKK3sKKwl1OCByZWcgPSBDUExEX1JFQUQoZmxhc2hfY3RsX3N0YXR1cyk7CisKKwlyZWcgPSAocmVnICYgfkNQTERfQkFOS19TRUxfTUFTSykgfCBDUExEX0xCTUFQX0FMVEJBTks7CisKKwlDUExEX1dSSVRFKGZsYXNoX2N0bF9zdGF0dXMsIHJlZyk7CisJQ1BMRF9XUklURShyZXNldF9jdGwxLCBDUExEX0xCTUFQX1JFU0VUKTsKK30KKworLyoqCisgKiBTZXQgdGhlIGJvb3QgYmFuayB0byB0aGUgZGVmYXVsdCBiYW5rCisgKi8KK3ZvaWQgY3BsZF9zZXRfZGVmYmFuayh2b2lkKQoreworCXU4IHJlZyA9IENQTERfUkVBRChmbGFzaF9jdGxfc3RhdHVzKTsKKworCXJlZyA9IChyZWcgJiB+Q1BMRF9CQU5LX1NFTF9NQVNLKSB8IENQTERfTEJNQVBfREZMVEJBTks7CisKKwlDUExEX1dSSVRFKGZsYXNoX2N0bF9zdGF0dXMsIHJlZyk7CisJQ1BMRF9XUklURShyZXNldF9jdGwxLCBDUExEX0xCTUFQX1JFU0VUKTsKK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCBjcGxkX2R1bXBfcmVncyh2b2lkKQoreworCXByaW50ZigiY3BsZF92ZXIJID0gMHglMDJ4XG4iLCBDUExEX1JFQUQoY3BsZF92ZXIpKTsKKwlwcmludGYoImNwbGRfdmVyX3N1YgkgPSAweCUwMnhcbiIsIENQTERfUkVBRChjcGxkX3Zlcl9zdWIpKTsKKwlwcmludGYoImh3X3ZlcgkJID0gMHglMDJ4XG4iLCBDUExEX1JFQUQoaHdfdmVyKSk7CisJcHJpbnRmKCJzd192ZXIJCSA9IDB4JTAyeFxuIiwgQ1BMRF9SRUFEKHN3X3ZlcikpOworCXByaW50ZigicmVzZXRfY3RsMQkgPSAweCUwMnhcbiIsIENQTERfUkVBRChyZXNldF9jdGwxKSk7CisJcHJpbnRmKCJyZXNldF9jdGwyCSA9IDB4JTAyeFxuIiwgQ1BMRF9SRUFEKHJlc2V0X2N0bDIpKTsKKwlwcmludGYoImludF9zdGF0dXMJID0gMHglMDJ4XG4iLCBDUExEX1JFQUQoaW50X3N0YXR1cykpOworCXByaW50ZigiZmxhc2hfY3RsX3N0YXR1cyA9IDB4JTAyeFxuIiwgQ1BMRF9SRUFEKGZsYXNoX2N0bF9zdGF0dXMpKTsKKwlwcmludGYoImZhbl9jdGxfc3RhdHVzCSA9IDB4JTAyeFxuIiwgQ1BMRF9SRUFEKGZhbl9jdGxfc3RhdHVzKSk7CisJcHJpbnRmKCJsZWRfY3RsX3N0YXR1cwkgPSAweCUwMnhcbiIsIENQTERfUkVBRChsZWRfY3RsX3N0YXR1cykpOworCXByaW50Zigic2ZwX2N0bF9zdGF0dXMJID0gMHglMDJ4XG4iLCBDUExEX1JFQUQoc2ZwX2N0bF9zdGF0dXMpKTsKKwlwcmludGYoIm1pc2NfY3RsX3N0YXR1cwkgPSAweCUwMnhcbiIsIENQTERfUkVBRChtaXNjX2N0bF9zdGF0dXMpKTsKKwlwcmludGYoImJvb3Rfb3ZlcnJpZGUJID0gMHglMDJ4XG4iLCBDUExEX1JFQUQoYm9vdF9vdmVycmlkZSkpOworCXByaW50ZigiYm9vdF9jb25maWcxCSA9IDB4JTAyeFxuIiwgQ1BMRF9SRUFEKGJvb3RfY29uZmlnMSkpOworCXByaW50ZigiYm9vdF9jb25maWcyCSA9IDB4JTAyeFxuIiwgQ1BMRF9SRUFEKGJvb3RfY29uZmlnMikpOworCXB1dGMoJ1xuJyk7Cit9CisjZW5kaWYKKworaW50IGRvX2NwbGQoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQoreworCWludCByYyA9IDA7CisKKwlpZiAoYXJnYyA8PSAxKQorCQlyZXR1cm4gY21kX3VzYWdlKGNtZHRwKTsKKworCWlmIChzdHJjbXAoYXJndlsxXSwgInJlc2V0IikgPT0gMCkgeworCQlpZiAoc3RyY21wKGFyZ3ZbMl0sICJhbHRiYW5rIikgPT0gMCkKKwkJCWNwbGRfc2V0X2FsdGJhbmsoKTsKKwkJZWxzZQorCQkJY3BsZF9zZXRfZGVmYmFuaygpOworI2lmZGVmIERFQlVHCisJfSBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgImR1bXAiKSA9PSAwKSB7CisJCWNwbGRfZHVtcF9yZWdzKCk7CisjZW5kaWYKKwl9IGVsc2UKKwkJcmMgPSBjbWRfdXNhZ2UoY21kdHApOworCisJcmV0dXJuIHJjOworfQorCitVX0JPT1RfQ01EKAorCWNwbGQsIENPTkZJR19TWVNfTUFYQVJHUywgMSwgZG9fY3BsZCwKKwkiUmVzZXQgdGhlIGJvYXJkIG9yIGFsdGVybmF0ZSBiYW5rIiwKKwkicmVzZXQgLSBoYXJkIHJlc2V0IHRvIGRlZmF1bHQgYmFua1xuIgorCSJjcGxkIHJlc2V0IGFsdGJhbmsgLSByZXNldCB0byBhbHRlcm5hdGUgYmFua1xuIgorI2lmZGVmIERFQlVHCisJImNwbGQgZHVtcCAtIGRpc3BsYXkgdGhlIENQTEQgcmVnaXN0ZXJzXG4iCisjZW5kaWYKKwkpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL3QxMDR4cmRiL2NwbGQuaCBiL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi9jcGxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhOWEwMQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi9jcGxkLmgKQEAgLTAsMCArMSw0MCBAQAorLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvcgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKworICoKKyAqIFRoaXMgZmlsZSBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgbmdQSVhJUywgYSBib2FyZC1zcGVjaWZpYyBGUEdBIHVzZWQgb24KKyAqIHNvbWUgRnJlZXNjYWxlIHJlZmVyZW5jZSBib2FyZHMuCisgKi8KKworLyoKKyAqIENQTEQgcmVnaXN0ZXIgc2V0LiBGZWVsIGZyZWUgdG8gYWRkIGJvYXJkLXNwZWNpZmljICNpZmRlZnMgd2hlcmUgbmVjZXNzYXJ5LgorICovCitzdHJ1Y3QgY3BsZF9kYXRhIHsKKwl1OCBjcGxkX3ZlcjsJCS8qIDB4MDAgLSBDUExEIE1ham9yIFJldmlzaW9uIFJlZ2lzdGVyICovCisJdTggY3BsZF92ZXJfc3ViOwkvKiAweDAxIC0gQ1BMRCBNaW5vciBSZXZpc2lvbiBSZWdpc3RlciAqLworCXU4IGh3X3ZlcjsJCS8qIDB4MDIgLSBIYXJkd2FyZSBSZXZpc2lvbiBSZWdpc3RlciAqLworCXU4IHN3X3ZlcjsJCS8qIDB4MDMgLSBTb2Z0d2FyZSBSZXZpc2lvbiByZWdpc3RlciAqLworCXU4IHJlczBbMTJdOwkJLyogMHgwNCAtIDB4MEYgLSBub3QgdXNlZCAqLworCXU4IHJlc2V0X2N0bDE7CQkvKiAweDEwIC0gUmVzZXQgY29udHJvbCBSZWdpc3RlcjEgKi8KKwl1OCByZXNldF9jdGwyOwkJLyogMHgxMSAtIFJlc2V0IGNvbnRyb2wgUmVnaXN0ZXIyICovCisJdTggaW50X3N0YXR1czsJCS8qIDB4MTIgLSBJbnRlcnJ1cHQgc3RhdHVzIFJlZ2lzdGVyICovCisJdTggZmxhc2hfY3RsX3N0YXR1czsJLyogMHgxMyAtIEZsYXNoIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlciAqLworCXU4IGZhbl9jdGxfc3RhdHVzOwkvKiAweDE0IC0gRmFuIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlciAgKi8KKwl1OCBsZWRfY3RsX3N0YXR1czsJLyogMHgxNSAtIExFRCBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwl1OCBzZnBfY3RsX3N0YXR1czsJLyogMHgxNiAtIFNGUCBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgICovCisJdTggbWlzY19jdGxfc3RhdHVzOwkvKiAweDE3IC0gTWlzY2VsbGFuaWVzIGN0cmwgJiBzdGF0dXMgcmVnaXN0ZXIqLworCXU4IGJvb3Rfb3ZlcnJpZGU7CS8qIDB4MTggLSBCb290IG92ZXJyaWRlIHJlZ2lzdGVyICovCisJdTggYm9vdF9jb25maWcxOwkvKiAweDE5IC0gQm9vdCBjb25maWcgb3ZlcnJpZGUgcmVnaXN0ZXIqLworCXU4IGJvb3RfY29uZmlnMjsJLyogMHgxQSAtIEJvb3QgY29uZmlnIG92ZXJyaWRlIHJlZ2lzdGVyKi8KK30gY3BsZF9kYXRhX3Q7CisKKworLyogUG9pbnRlciB0byB0aGUgQ1BMRCByZWdpc3RlciBzZXQgKi8KKwordTggY3BsZF9yZWFkKHVuc2lnbmVkIGludCByZWcpOwordm9pZCBjcGxkX3dyaXRlKHVuc2lnbmVkIGludCByZWcsIHU4IHZhbHVlKTsKKworI2RlZmluZSBDUExEX1JFQUQocmVnKSBjcGxkX3JlYWQob2Zmc2V0b2Yoc3RydWN0IGNwbGRfZGF0YSwgcmVnKSkKKyNkZWZpbmUgQ1BMRF9XUklURShyZWcsIHZhbHVlKVwKKwkJY3BsZF93cml0ZShvZmZzZXRvZihzdHJ1Y3QgY3BsZF9kYXRhLCByZWcpLCB2YWx1ZSkKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi9kZHIuYyBiL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi9kZHIuYwppbmRleCA1N2QwZjljLi4zNGM5MjI0IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvZGRyLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3QxMDR4cmRiL2Rkci5jCkBAIC0xMTMsNiArMTEzLDcgQEAKIHsKIAlwaHlzX3NpemVfdCBkcmFtX3NpemU7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUExfQlVJTEQpIHx8ICFkZWZpbmVkKENPTkZJR19SQU1CT09UX1BCTCkKIAlwdXRzKCJJbml0aWFsaXppbmcuLi4udXNpbmcgU1BEXG4iKTsKIAogCWRyYW1fc2l6ZSA9IGZzbF9kZHJfc2RyYW0oKTsKQEAgLTEyMCw2ICsxMjEsOCBAQAogCWRyYW1fc2l6ZSA9IHNldHVwX2Rkcl90bGJzKGRyYW1fc2l6ZSAvIDB4MTAwMDAwKTsKIAlkcmFtX3NpemUgKj0gMHgxMDAwMDA7CiAKLQlwdXRzKCIgICAgRERSOiAiKTsKKyNlbHNlCisJZHJhbV9zaXplID0gIGZzbF9kZHJfc2RyYW1fc2l6ZSgpOworI2VuZGlmCiAJcmV0dXJuIGRyYW1fc2l6ZTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi9ldGguYyBiL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi9ldGguYwppbmRleCAwMTg4ZmQ0Li42M2U1ZjkwIDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvZXRoLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3QxMDR4cmRiL2V0aC5jCkBAIC00MSw2ICs0MSw3IEBACiAJCQkvKiBUMTA0MFJEQiBvbmx5IHN1cHBvcnRzIFNHTUlJIG9uIERUU0VDMyAqLwogCQkJZm1faW5mb19zZXRfcGh5X2FkZHJlc3MoRk0xX0RUU0VDMywKIAkJCQkJCUNPTkZJR19TWVNfU0dNSUkxX1BIWV9BRERSKTsKKwkJCWJyZWFrOwogI2VuZGlmCiAJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOgogCQkJaWYgKEZNMV9EVFNFQzQgPT0gaSkKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi9zcGwuYyBiL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi9zcGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjI4Yzk1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3QxMDR4cmRiL3NwbC5jCkBAIC0wLDAgKzEsMTIyIEBACisvKiBDb3B5cmlnaHQgMjAxMyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAgICBHUEwtMi4wKworICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxuczE2NTUwLmg+CisjaW5jbHVkZSA8bmFuZC5oPgorI2luY2x1ZGUgPGkyYy5oPgorI2luY2x1ZGUgPG1tYy5oPgorI2luY2x1ZGUgPGZzbF9lc2RoYy5oPgorI2luY2x1ZGUgPHNwaV9mbGFzaC5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworcGh5c19zaXplX3QgZ2V0X2VmZmVjdGl2ZV9tZW1zaXplKHZvaWQpCit7CisJcmV0dXJuIENPTkZJR19TWVNfTDNfU0laRTsKK30KKwordW5zaWduZWQgbG9uZyBnZXRfYm9hcmRfc3lzX2Nsayh2b2lkKQoreworCXJldHVybiBDT05GSUdfU1lTX0NMS19GUkVROworfQorCit1bnNpZ25lZCBsb25nIGdldF9ib2FyZF9kZHJfY2xrKHZvaWQpCit7CisJcmV0dXJuIENPTkZJR19ERFJfQ0xLX0ZSRVE7Cit9CisKKyNkZWZpbmUgRlNMX0NPUkVORVRfQ0NTUl9QT1JTUjFfUkNXX01BU0sJMHhGRjgwMDAwMAordm9pZCBib2FyZF9pbml0X2YodWxvbmcgYm9vdGZsYWcpCit7CisJdTMyIHBsYXRfcmF0aW8sIHN5c19jbGssIHVhcnRfY2xrOworI2lmZGVmIENPTkZJR19TUExfTkFORF9CT09UCisJdTMyIHBvcnNyMSwgcGluY3RsOworI2VuZGlmCisJY2Nzcl9ndXJfdCAqZ3VyID0gKHZvaWQgKilDT05GSUdfU1lTX01QQzg1eHhfR1VUU19BRERSOworCisjaWZkZWYgQ09ORklHX1NQTF9OQU5EX0JPT1QKKwkvKgorCSAqIFRoZXJlIGlzIFQxMDQwIFNvQyBpc3N1ZSB3aGVyZSBOT1IsIEZQR0EgYXJlIGluYWNjZXNzaWJsZSBkdXJpbmcKKwkgKiBOQU5EIGJvb3QgYmVjYXVzZSBJRkMgc2lnbmFscyA+IElGQ19BRDcgYXJlIG5vdCBlbmFibGVkLgorCSAqIFRoaXMgd29ya2Fyb3VuZCBjaGFuZ2VzIFJDVyBzb3VyY2UgdG8gbWFrZSBhbGwgc2lnbmFscyBlbmFibGVkLgorCSAqLworCXBvcnNyMSA9IGluX2JlMzIoJmd1ci0+cG9yc3IxKTsKKwlwaW5jdGwgPSAoKHBvcnNyMSAmIH4oRlNMX0NPUkVORVRfQ0NTUl9QT1JTUjFfUkNXX01BU0spKSB8IDB4MjQ4MDAwMDApOworCW91dF9iZTMyKCh1bnNpZ25lZCBpbnQgKikoQ09ORklHX1NZU19EQ1NSQkFSICsgMHgyMDAwMCksIHBpbmN0bCk7CisjZW5kaWYKKworCS8qIE1lbWNweSBleGlzdGluZyBHRCBhdCBDT05GSUdfU1BMX0dEX0FERFIgKi8KKwltZW1jcHkoKHZvaWQgKilDT05GSUdfU1BMX0dEX0FERFIsICh2b2lkICopZ2QsIHNpemVvZihnZF90KSk7CisKKwkvKiBVcGRhdGUgR0QgcG9pbnRlciAqLworCWdkID0gKGdkX3QgKikoQ09ORklHX1NQTF9HRF9BRERSKTsKKworCS8qIGNvbXBpbGVyIG9wdGltaXphdGlvbiBiYXJyaWVyIG5lZWRlZCBmb3IgR0NDID49IDMuNCAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCIiIDogOiA6ICJtZW1vcnkiKTsKKworCWNvbnNvbGVfaW5pdF9mKCk7CisKKwkvKiBpbml0aWFsaXplIHNlbGVjdGVkIHBvcnQgd2l0aCBhcHByb3ByaWF0ZSBiYXVkIHJhdGUgKi8KKwlzeXNfY2xrID0gZ2V0X2JvYXJkX3N5c19jbGsoKTsKKwlwbGF0X3JhdGlvID0gKGluX2JlMzIoJmd1ci0+cmN3c3JbMF0pID4+IDI1KSAmIDB4MWY7CisJdWFydF9jbGsgPSBzeXNfY2xrICogcGxhdF9yYXRpbyAvIDI7CisKKwlOUzE2NTUwX2luaXQoKE5TMTY1NTBfdClDT05GSUdfU1lTX05TMTY1NTBfQ09NMSwKKwkJICAgICB1YXJ0X2NsayAvIDE2IC8gQ09ORklHX0JBVURSQVRFKTsKKworCXJlbG9jYXRlX2NvZGUoQ09ORklHX1NQTF9SRUxPQ19TVEFDSywgKGdkX3QgKilDT05GSUdfU1BMX0dEX0FERFIsIDB4MCk7Cit9CisKK3ZvaWQgYm9hcmRfaW5pdF9yKGdkX3QgKmdkLCB1bG9uZyBkZXN0X2FkZHIpCit7CisJYmRfdCAqYmQ7CisKKwliZCA9IChiZF90ICopKGdkICsgc2l6ZW9mKGdkX3QpKTsKKwltZW1zZXQoYmQsIDAsIHNpemVvZihiZF90KSk7CisJZ2QtPmJkID0gYmQ7CisJYmQtPmJpX21lbXN0YXJ0ID0gQ09ORklHX1NZU19JTklUX0wzX0FERFI7CisJYmQtPmJpX21lbXNpemUgPSBDT05GSUdfU1lTX0wzX1NJWkU7CisKKwlwcm9iZWNwdSgpOworCWdldF9jbG9ja3MoKTsKKwltZW1fbWFsbG9jX2luaXQoQ09ORklHX1NQTF9SRUxPQ19NQUxMT0NfQUREUiwKKwkJCUNPTkZJR19TUExfUkVMT0NfTUFMTE9DX1NJWkUpOworCisjaWZkZWYgQ09ORklHX1NQTF9NTUNfQk9PVAorCW1tY19pbml0aWFsaXplKGJkKTsKKyNlbmRpZgorCisJLyogcmVsb2NhdGUgZW52aXJvbm1lbnQgZnVuY3Rpb24gcG9pbnRlcnMgZXRjLiAqLworI2lmZGVmIENPTkZJR19TUExfTkFORF9CT09UCisJbmFuZF9zcGxfbG9hZF9pbWFnZShDT05GSUdfRU5WX09GRlNFVCwgQ09ORklHX0VOVl9TSVpFLAorCQkJICAgICh1Y2hhciAqKUNPTkZJR19FTlZfQUREUik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1BMX01NQ19CT09UCisJbW1jX3NwbF9sb2FkX2ltYWdlKENPTkZJR19FTlZfT0ZGU0VULCBDT05GSUdfRU5WX1NJWkUsCisJCQkgICAodWNoYXIgKilDT05GSUdfRU5WX0FERFIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NQTF9TUElfQk9PVAorCXNwaV9zcGxfbG9hZF9pbWFnZShDT05GSUdfRU5WX09GRlNFVCwgQ09ORklHX0VOVl9TSVpFLAorCQkJICAgKHVjaGFyICopQ09ORklHX0VOVl9BRERSKTsKKyNlbmRpZgorCWdkLT5lbnZfYWRkciAgPSAodWxvbmcpKENPTkZJR19FTlZfQUREUik7CisJZ2QtPmVudl92YWxpZCA9IDE7CisKKwlpMmNfaW5pdF9hbGwoKTsKKworCXB1dHMoIlxuXG4iKTsKKworCWdkLT5yYW1fc2l6ZSA9IGluaXRkcmFtKDApOworCisjaWZkZWYgQ09ORklHX1NQTF9NTUNfQk9PVAorCW1tY19ib290KCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19TUExfU1BJX0JPT1QpCisJc3BpX2Jvb3QoKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NQTF9OQU5EX0JPT1QpCisJbmFuZF9ib290KCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi90MTA0MF9yY3cuY2ZnIGIvYm9hcmQvZnJlZXNjYWxlL3QxMDR4cmRiL3QxMDQwX3Jjdy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMwMGMxOAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi90MTA0MF9yY3cuY2ZnCkBAIC0wLDAgKzEsNyBAQAorI1BCTCBwcmVhbWJsZSBhbmQgUkNXIGhlYWRlcgorYWE1NWFhNTUgMDEwZTAxMDAKKyMgc2VyZGVzIHByb3RvY29sIDB4NjYKKzBjMTgwMDBlIDBlMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwCis2NjAwMDAwMiA4MDAwMDAwMiBlODEwNjAwMCAwMTAwMDAwMAorMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMzI4MTAKKzAwMDAwMDAwIDAzNDI1MDBmIDAwMDAwMDAwIDAwMDAwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvdDEwNDJfcmN3LmNmZyBiL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi90MTA0Ml9yY3cuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZWE4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvdDEwNDJfcmN3LmNmZwpAQCAtMCwwICsxLDcgQEAKKyNQQkwgcHJlYW1ibGUgYW5kIFJDVyBoZWFkZXIKK2FhNTVhYTU1IDAxMGUwMTAwCisjIHNlcmRlcyBwcm90b2NvbCAweDY2CiswYzE4MDAwZSAwZTAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMAorMDYwMDAwMDIgMDA0MDAwMDIgZTgxMDYwMDAgMDEwMDAwMDAKKzAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDMwODEwCiswMDAwMDAwMCAwMWZlMGEwNiAwMDAwMDAwMCAwMDAwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL3QxMDR4cmRiL3QxMDR4X3BiaS5jZmcgYi9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvdDEwNHhfcGJpLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjllOWIwCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3QxMDR4cmRiL3QxMDR4X3BiaS5jZmcKQEAgLTAsMCArMSwyNiBAQAorI1BCSSBjb21tYW5kcworI0luaXRpYWxpemUgQ1BDMQorMDkwMTAwMDAgMDAyMDA0MDAKKzA5MTM4MDAwIDAwMDAwMDAwCiswOTEzODBjMCAwMDAwMDEwMAorI0NvbmZpZ3VyZSBDUEMxIGFzIDI1NktCIFNSQU0KKzA5MDEwMTAwIDAwMDAwMDAwCiswOTAxMDEwNCBmZmZjMDAwNworMDkwMTBmMDAgMDgwMDAwMDAKKzA5MDEwMDAwIDgwMDAwMDAwCisjQ29uZmlndXJlIExBVyBmb3IgQ1BDMQorMDkwMDBjZDAgMDAwMDAwMDAKKzA5MDAwY2Q0IGZmZmMwMDAwCiswOTAwMGNkOCA4MTAwMDAxMQorI0NvbmZpZ3VyZSBhbHRlcm5hdGUgc3BhY2UKKzA5MDAwMDEwIDAwMDAwMDAwCiswOTAwMDAxNCBmZjAwMDAwMAorMDkwMDAwMTggODEwMDAwMDAKKyNDb25maWd1cmUgU1BJIGNvbnRyb2xsZXIKKzA5MTEwMDAwIDgwMDAwNDAzCiswOTExMDAyMCAyZDE3MDAwOAorMDkxMTAwMjQgMDAxMDAwMDgKKzA5MTEwMDI4IDAwMTAwMDA4CiswOTExMDAyYyAwMDEwMDAwOAorI0ZsdXNoIFBCTCBkYXRhCiswOTEzODBjMCAwMDBGRkZGRgpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL3QxMDR4cmRiL3QxMDR4cmRiLmMgYi9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvdDEwNHhyZGIuYwppbmRleCA2ZTI5ZDY0Li5mYjViODQ5IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvdDEwNHhyZGIuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvdDEwNHhyZGIuYwpAQCAtMTcsMTYgKzE3LDMwIEBACiAjaW5jbHVkZSA8YXNtL2ZzbF9wb3J0YWxzLmg+CiAjaW5jbHVkZSA8YXNtL2ZzbF9saW9kbi5oPgogI2luY2x1ZGUgPGZtX2V0aC5oPgorI2luY2x1ZGUgPGFzbS9tcGM4NXh4X2dwaW8uaD4KIAogI2luY2x1ZGUgInQxMDR4cmRiLmgiCisjaW5jbHVkZSAiY3BsZC5oIgogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAogaW50IGNoZWNrYm9hcmQodm9pZCkKIHsKIAlzdHJ1Y3QgY3B1X3R5cGUgKmNwdSA9IGdkLT5hcmNoLmNwdTsKKwl1OCBzdzsKIAogCXByaW50ZigiQm9hcmQ6ICVzUkRCXG4iLCBjcHUtPm5hbWUpOworCXByaW50ZigiQm9hcmQgcmV2OiAweCUwMnggQ1BMRCB2ZXI6IDB4JTAyeCwgIiwKKwkgICAgICAgQ1BMRF9SRUFEKGh3X3ZlciksIENQTERfUkVBRChzd192ZXIpKTsKKworCXN3ID0gQ1BMRF9SRUFEKGZsYXNoX2N0bF9zdGF0dXMpOworCXN3ID0gKChzdyAmIENQTERfTEJNQVBfTUFTSykgPj4gQ1BMRF9MQk1BUF9TSElGVCk7CisKKwlpZiAoc3cgPD0gNykKKwkJcHJpbnRmKCJ2QmFuazogJWRcbiIsIHN3KTsKKwllbHNlCisJCXByaW50ZigiVW5zdXBwb3J0ZWQgQmFuaz0leFxuIiwgc3cpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkxLDMgKzEwNSwxMiBAQAogCWZkdF9maXh1cF9mbWFuX2V0aGVybmV0KGJsb2IpOwogI2VuZGlmCiB9CisKKyNpZmRlZiBDT05GSUdfREVFUF9TTEVFUAordm9pZCBib2FyZF9tZW1fc2xlZXBfc2V0dXAodm9pZCkKK3sKKwkvKiBEaXNhYmxlIE1DS0UgaXNvbGF0aW9uICovCisJZ3Bpb19zZXRfdmFsdWUoMiwgMCk7CisJdWRlbGF5KDEpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvdGxiLmMgYi9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvdGxiLmMKaW5kZXggODRmOTdhNC4uOTVjMTVhYSAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL3QxMDR4cmRiL3RsYi5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi90bGIuYwpAQCAtNTMsNiArNTMsNyBAQAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1IsIE1BUzJfV3xNQVMyX0csCiAJCSAgICAgIDAsIDIsIEJPT0tFX1BBR0VTWl8yNTZNLCAxKSwKIAorI2lmbmRlZiBDT05GSUdfU1BMX0JVSUxECiAJLyogKkkqRyogLSBQQ0kgKi8KIAlTRVRfVExCX0VOVFJZKDEsIENPTkZJR19TWVNfUENJRTFfTUVNX1ZJUlQsIENPTkZJR19TWVNfUENJRTFfTUVNX1BIWVMsCiAJCSAgICAgIE1BUzNfU1h8TUFTM19TV3xNQVMzX1NSLCBNQVMyX0l8TUFTMl9HLApAQCAtODIsNiArODMsNyBAQAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgTUFTMl9JfE1BUzJfRywKIAkJICAgICAgMCwgOCwgQk9PS0VfUEFHRVNaXzE2TSwgMSksCiAjZW5kaWYKKyNlbmRpZgogI2lmZGVmIENPTkZJR19TWVNfRENTUkJBUl9QSFlTCiAJU0VUX1RMQl9FTlRSWSgxLCBDT05GSUdfU1lTX0RDU1JCQVIsIENPTkZJR19TWVNfRENTUkJBUl9QSFlTLAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgTUFTMl9JfE1BUzJfRywKQEAgLTEwMiw2ICsxMDQsMTYgQEAKIAkJICAgICAgTUFTM19TV3xNQVMzX1NSLCBNQVMyX0l8TUFTMl9HLAogCQkgICAgICAwLCAxMSwgQk9PS0VfUEFHRVNaXzI1NkssIDEpLAogI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19SQU1CT09UX1BCTCkgJiYgIWRlZmluZWQoQ09ORklHX1NQTF9CVUlMRCkKKwlTRVRfVExCX0VOVFJZKDEsIENPTkZJR19TWVNfRERSX1NEUkFNX0JBU0UsIENPTkZJR19TWVNfRERSX1NEUkFNX0JBU0UsCisJCSAgICAgIE1BUzNfU1h8TUFTM19TV3xNQVMzX1NSLCAwLAorCQkgICAgICAwLCAxMiwgQk9PS0VfUEFHRVNaXzFHLCAxKSwKKwlTRVRfVExCX0VOVFJZKDEsIENPTkZJR19TWVNfRERSX1NEUkFNX0JBU0UgKyAweDQwMDAwMDAwLAorCQkgICAgICBDT05GSUdfU1lTX0REUl9TRFJBTV9CQVNFICsgMHg0MDAwMDAwMCwKKwkJICAgICAgTUFTM19TWHxNQVMzX1NXfE1BUzNfU1IsIDAsCisJCSAgICAgIDAsIDEzLCBCT09LRV9QQUdFU1pfMUcsIDEpCisjZW5kaWYKIH07CiAKIGludCBudW1fdGxiX2VudHJpZXMgPSBBUlJBWV9TSVpFKHRsYl90YWJsZSk7CmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvdDIwOHhxZHMvTWFrZWZpbGUgYi9ib2FyZC9mcmVlc2NhbGUvdDIwOHhxZHMvTWFrZWZpbGUKaW5kZXggOTQ3YjdmNy4uNmNiNzJjOSAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cWRzL01ha2VmaWxlCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS90MjA4eHFkcy9NYWtlZmlsZQpAQCAtNCwxMSArNCwxNiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogICAgICBHUEwtMi4wKwogIwogCitpZmRlZiBDT05GSUdfU1BMX0JVSUxECitvYmoteSArPSBzcGwubworZWxzZQogb2JqLSQoQ09ORklHX1QyMDgwUURTKSArPSB0MjA4eHFkcy5vCiBvYmotJChDT05GSUdfVDIwODBRRFMpICs9IGV0aF90MjA4eHFkcy5vCiBvYmotJChDT05GSUdfVDIwODFRRFMpICs9IHQyMDh4cWRzLm8KIG9iai0kKENPTkZJR19UMjA4MVFEUykgKz0gZXRoX3QyMDh4cWRzLm8KIG9iai0kKENPTkZJR19QQ0kpICAgICAgKz0gcGNpLm8KK2VuZGlmCisKIG9iai15ICAgKz0gZGRyLm8KIG9iai15ICAgKz0gbGF3Lm8KIG9iai15ICAgKz0gdGxiLm8KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS90MjA4eHFkcy9kZHIuYyBiL2JvYXJkL2ZyZWVzY2FsZS90MjA4eHFkcy9kZHIuYwppbmRleCBlZDEzMzRkLi4zMzQ4OTcxIDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvdDIwOHhxZHMvZGRyLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cWRzL2Rkci5jCkBAIC0xMDcsMTMgKzEwNywxNiBAQAogewogCXBoeXNfc2l6ZV90IGRyYW1fc2l6ZTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1NQTF9CVUlMRCkgfHwgIWRlZmluZWQoQ09ORklHX1JBTUJPT1RfUEJMKQogCXB1dHMoIkluaXRpYWxpemluZy4uLi51c2luZyBTUERcbiIpOwotCiAJZHJhbV9zaXplID0gZnNsX2Rkcl9zZHJhbSgpOwogCiAJZHJhbV9zaXplID0gc2V0dXBfZGRyX3RsYnMoZHJhbV9zaXplIC8gMHgxMDAwMDApOwogCWRyYW1fc2l6ZSAqPSAweDEwMDAwMDsKKyNlbHNlCisJLyogRERSIGhhcyBiZWVuIGluaXRpYWxpc2VkIGJ5IGZpcnN0IHN0YWdlIGJvb3QgbG9hZGVyICovCisJZHJhbV9zaXplID0gIGZzbF9kZHJfc2RyYW1fc2l6ZSgpOworI2VuZGlmCiAKLQlwdXRzKCIgICAgRERSOiAiKTsKIAlyZXR1cm4gZHJhbV9zaXplOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cWRzL3NwbC5jIGIvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cWRzL3NwbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MWM2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9mcmVlc2NhbGUvdDIwOHhxZHMvc3BsLmMKQEAgLTAsMCArMSwxMzcgQEAKKy8qIENvcHlyaWdodCAyMDEzIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICAgIEdQTC0yLjArCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPG5zMTY1NTAuaD4KKyNpbmNsdWRlIDxuYW5kLmg+CisjaW5jbHVkZSA8aTJjLmg+CisjaW5jbHVkZSA8bW1jLmg+CisjaW5jbHVkZSA8ZnNsX2VzZGhjLmg+CisjaW5jbHVkZSA8c3BpX2ZsYXNoLmg+CisjaW5jbHVkZSAiLi4vY29tbW9uL3FpeGlzLmgiCisjaW5jbHVkZSAidDIwOHhxZHNfcWl4aXMuaCIKKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKK3BoeXNfc2l6ZV90IGdldF9lZmZlY3RpdmVfbWVtc2l6ZSh2b2lkKQoreworCXJldHVybiBDT05GSUdfU1lTX0wzX1NJWkU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X2JvYXJkX3N5c19jbGsodm9pZCkKK3sKKwl1OCBzeXNjbGtfY29uZiA9IFFJWElTX1JFQUQoYnJkY2ZnWzFdKTsKKworCXN3aXRjaCAoc3lzY2xrX2NvbmYgJiAweDBGKSB7CisJY2FzZSBRSVhJU19TWVNDTEtfODM6CisJCXJldHVybiA4MzMzMzMzMzsKKwljYXNlIFFJWElTX1NZU0NMS18xMDA6CisJCXJldHVybiAxMDAwMDAwMDA7CisJY2FzZSBRSVhJU19TWVNDTEtfMTI1OgorCQlyZXR1cm4gMTI1MDAwMDAwOworCWNhc2UgUUlYSVNfU1lTQ0xLXzEzMzoKKwkJcmV0dXJuIDEzMzMzMzMzMzsKKwljYXNlIFFJWElTX1NZU0NMS18xNTA6CisJCXJldHVybiAxNTAwMDAwMDA7CisJY2FzZSBRSVhJU19TWVNDTEtfMTYwOgorCQlyZXR1cm4gMTYwMDAwMDAwOworCWNhc2UgUUlYSVNfU1lTQ0xLXzE2NjoKKwkJcmV0dXJuIDE2NjY2NjY2NjsKKwl9CisJcmV0dXJuIDY2NjY2NjY2OworfQorCit1bnNpZ25lZCBsb25nIGdldF9ib2FyZF9kZHJfY2xrKHZvaWQpCit7CisJdTggZGRyY2xrX2NvbmYgPSBRSVhJU19SRUFEKGJyZGNmZ1sxXSk7CisKKwlzd2l0Y2ggKChkZHJjbGtfY29uZiAmIDB4MzApID4+IDQpIHsKKwljYXNlIFFJWElTX0REUkNMS18xMDA6CisJCXJldHVybiAxMDAwMDAwMDA7CisJY2FzZSBRSVhJU19ERFJDTEtfMTI1OgorCQlyZXR1cm4gMTI1MDAwMDAwOworCWNhc2UgUUlYSVNfRERSQ0xLXzEzMzoKKwkJcmV0dXJuIDEzMzMzMzMzMzsKKwl9CisJcmV0dXJuIDY2NjY2NjY2OworfQorCit2b2lkIGJvYXJkX2luaXRfZih1bG9uZyBib290ZmxhZykKK3sKKwl1MzIgcGxhdF9yYXRpbywgc3lzX2NsaywgY2NiX2NsazsKKwljY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKUNPTkZJR19TWVNfTVBDODV4eF9HVVRTX0FERFI7CisKKwkvKiBNZW1jcHkgZXhpc3RpbmcgR0QgYXQgQ09ORklHX1NQTF9HRF9BRERSICovCisJbWVtY3B5KCh2b2lkICopQ09ORklHX1NQTF9HRF9BRERSLCAodm9pZCAqKWdkLCBzaXplb2YoZ2RfdCkpOworCisJLyogVXBkYXRlIEdEIHBvaW50ZXIgKi8KKwlnZCA9IChnZF90ICopKENPTkZJR19TUExfR0RfQUREUik7CisKKwljb25zb2xlX2luaXRfZigpOworCisJLyogaW5pdGlhbGl6ZSBzZWxlY3RlZCBwb3J0IHdpdGggYXBwcm9wcmlhdGUgYmF1ZCByYXRlICovCisJc3lzX2NsayA9IGdldF9ib2FyZF9zeXNfY2xrKCk7CisJcGxhdF9yYXRpbyA9IChpbl9iZTMyKCZndXItPnJjd3NyWzBdKSA+PiAyNSkgJiAweDFmOworCWNjYl9jbGsgPSBzeXNfY2xrICogcGxhdF9yYXRpbyAvIDI7CisKKwlOUzE2NTUwX2luaXQoKE5TMTY1NTBfdClDT05GSUdfU1lTX05TMTY1NTBfQ09NMSwKKwkJICAgICBjY2JfY2xrIC8gMTYgLyBDT05GSUdfQkFVRFJBVEUpOworCisjaWYgZGVmaW5lZChDT05GSUdfU1BMX01NQ19CT09UKQorCXB1dHMoIlxuU0QgYm9vdC4uLlxuIik7CisjZWxpZiBkZWZpbmVkKENPTkZJR19TUExfU1BJX0JPT1QpCisJcHV0cygiXG5TUEkgYm9vdC4uLlxuIik7CisjZWxpZiBkZWZpbmVkKENPTkZJR19TUExfTkFORF9CT09UKQorCXB1dHMoIlxuTkFORCBib290Li4uXG4iKTsKKyNlbmRpZgorCisJcmVsb2NhdGVfY29kZShDT05GSUdfU1BMX1JFTE9DX1NUQUNLLCAoZ2RfdCAqKUNPTkZJR19TUExfR0RfQUREUiwgMHgwKTsKK30KKwordm9pZCBib2FyZF9pbml0X3IoZ2RfdCAqZ2QsIHVsb25nIGRlc3RfYWRkcikKK3sKKwliZF90ICpiZDsKKworCWJkID0gKGJkX3QgKikoZ2QgKyBzaXplb2YoZ2RfdCkpOworCW1lbXNldChiZCwgMCwgc2l6ZW9mKGJkX3QpKTsKKwlnZC0+YmQgPSBiZDsKKwliZC0+YmlfbWVtc3RhcnQgPSBDT05GSUdfU1lTX0lOSVRfTDNfQUREUjsKKwliZC0+YmlfbWVtc2l6ZSA9IENPTkZJR19TWVNfTDNfU0laRTsKKworCXByb2JlY3B1KCk7CisJZ2V0X2Nsb2NrcygpOworCW1lbV9tYWxsb2NfaW5pdChDT05GSUdfU1BMX1JFTE9DX01BTExPQ19BRERSLAorCQkJQ09ORklHX1NQTF9SRUxPQ19NQUxMT0NfU0laRSk7CisKKyNpZmRlZiBDT05GSUdfU1BMX05BTkRfQk9PVAorCW5hbmRfc3BsX2xvYWRfaW1hZ2UoQ09ORklHX0VOVl9PRkZTRVQsIENPTkZJR19FTlZfU0laRSwKKwkJCSAgICAodWNoYXIgKilDT05GSUdfRU5WX0FERFIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NQTF9NTUNfQk9PVAorCW1tY19pbml0aWFsaXplKGJkKTsKKwltbWNfc3BsX2xvYWRfaW1hZ2UoQ09ORklHX0VOVl9PRkZTRVQsIENPTkZJR19FTlZfU0laRSwKKwkJCSAgICh1Y2hhciAqKUNPTkZJR19FTlZfQUREUik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1BMX1NQSV9CT09UCisJc3BpX3NwbF9sb2FkX2ltYWdlKENPTkZJR19FTlZfT0ZGU0VULCBDT05GSUdfRU5WX1NJWkUsCisJCQkgICAodWNoYXIgKilDT05GSUdfRU5WX0FERFIpOworI2VuZGlmCisKKwlnZC0+ZW52X2FkZHIgID0gKHVsb25nKShDT05GSUdfRU5WX0FERFIpOworCWdkLT5lbnZfdmFsaWQgPSAxOworCisJaTJjX2luaXRfYWxsKCk7CisKKwlnZC0+cmFtX3NpemUgPSBpbml0ZHJhbSgwKTsKKworI2lmZGVmIENPTkZJR19TUExfTU1DX0JPT1QKKwltbWNfYm9vdCgpOworI2VsaWYgZGVmaW5lZChDT05GSUdfU1BMX1NQSV9CT09UKQorCXNwaV9ib290KCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19TUExfTkFORF9CT09UKQorCW5hbmRfYm9vdCgpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvdDIwOHhxZHMvdGxiLmMgYi9ib2FyZC9mcmVlc2NhbGUvdDIwOHhxZHMvdGxiLmMKaW5kZXggNjJjZDExMC4uOGQ2MDI5OCAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cWRzL3RsYi5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS90MjA4eHFkcy90bGIuYwpAQCAtNjUsNiArNjUsNyBAQAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1IsIE1BUzJfV3xNQVMyX0csCiAJCSAgICAgIDAsIDIsIEJPT0tFX1BBR0VTWl8yNTZNLCAxKSwKIAorI2lmbmRlZiBDT05GSUdfU1BMX0JVSUxECiAJLyogKkkqRyogLSBQQ0llIDEsIDB4ODAwMDAwMDAgKi8KIAlTRVRfVExCX0VOVFJZKDEsIENPTkZJR19TWVNfUENJRTFfTUVNX1ZJUlQsIENPTkZJR19TWVNfUENJRTFfTUVNX1BIWVMsCiAJCSAgICAgIE1BUzNfU1h8TUFTM19TV3xNQVMzX1NSLCBNQVMyX0l8TUFTMl9HLApAQCAtMTEwLDYgKzExMSw3IEBACiAJCSAgICAgIE1BUzNfU1h8TUFTM19TV3xNQVMzX1NSLCBNQVMyX0l8TUFTMl9HLAogCQkgICAgICAwLCAxMiwgQk9PS0VfUEFHRVNaXzE2TSwgMSksCiAjZW5kaWYKKyNlbmRpZgogI2lmZGVmIENPTkZJR19TWVNfRENTUkJBUl9QSFlTCiAJU0VUX1RMQl9FTlRSWSgxLCBDT05GSUdfU1lTX0RDU1JCQVIsIENPTkZJR19TWVNfRENTUkJBUl9QSFlTLAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgTUFTMl9JfE1BUzJfRywKQEAgLTE0MSw2ICsxNDMsMTEgQEAKIAkJICAgICAgMCwgMTgsIEJPT0tFX1BBR0VTWl8xTSwgMSksCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1JBTUJPT1RfUEJMKSAmJiAhZGVmaW5lZChDT05GSUdfU1BMX0JVSUxEKQorCVNFVF9UTEJfRU5UUlkoMSwgQ09ORklHX1NZU19ERFJfU0RSQU1fQkFTRSwgQ09ORklHX1NZU19ERFJfU0RSQU1fQkFTRSwKKwkJICAgICAgTUFTM19TWHxNQVMzX1NXfE1BUzNfU1IsIDAsCisJCSAgICAgIDAsIDE5LCBCT09LRV9QQUdFU1pfMkcsIDEpCisjZW5kaWYKIH07CiAKIGludCBudW1fdGxiX2VudHJpZXMgPSBBUlJBWV9TSVpFKHRsYl90YWJsZSk7CmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvdDIwOHhyZGIvTWFrZWZpbGUgYi9ib2FyZC9mcmVlc2NhbGUvdDIwOHhyZGIvTWFrZWZpbGUKaW5kZXggMDkyYzlmZi4uOTYwNWY4YiAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cmRiL01ha2VmaWxlCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS90MjA4eHJkYi9NYWtlZmlsZQpAQCAtNCwxMCArNCwxNSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogICAgICBHUEwtMi4wKwogIwogCitpZmRlZiBDT05GSUdfU1BMX0JVSUxECitvYmoteSArPSBzcGwubworZWxzZQogb2JqLSQoQ09ORklHX1QyMDgwUkRCKSArPSB0MjA4eHJkYi5vCiBvYmotJChDT05GSUdfVDIwODBSREIpICs9IGV0aF90MjA4eHJkYi5vCiBvYmotJChDT05GSUdfVDIwODBSREIpICs9IGNwbGQubwogb2JqLSQoQ09ORklHX1BDSSkgICAgICArPSBwY2kubworZW5kaWYKKwogb2JqLXkgICArPSBkZHIubwogb2JqLXkgICArPSBsYXcubwogb2JqLXkgICArPSB0bGIubwpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cmRiL1JFQURNRSBiL2JvYXJkL2ZyZWVzY2FsZS90MjA4eHJkYi9SRUFETUUKaW5kZXggMDAxMmM2Yy4uMjQ0ODRjZCAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cmRiL1JFQURNRQorKysgYi9ib2FyZC9mcmVlc2NhbGUvdDIwOHhyZGIvUkVBRE1FCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgIC0gT25lIFBDSWUgeDIgZW5kLXBvaW50IGRldmljZSAoQzI5MyBDcnlwdG8gY28tcHJvY2Vzc29yKQogIC0gSUZDL0xvY2FsIEJ1cwogICAgICAtIE5PUjogIDEyOE1CIDE2LWJpdCBOT1IgRmxhc2gKLSAgICAgLSBOQU5EOiA1MTJNQiA4LWJpdCBOQU5EIGZsYXNoCisgICAgIC0gTkFORDogMUdCIDgtYml0IE5BTkQgZmxhc2gKICAgICAgLSBDUExEOiBmb3Igc3lzdGVtIGNvbnRyb2xsaW5nIHdpdGggcHJvZ3JhbWFibGUgaGVhZGVyIG9uLWJvYXJkCiAgLSBTQVRBCiAgICAgIC0gVHdvIFNBVEEgMi4wIG9ubmVjdG9ycyBvbi1ib2FyZApAQCAtMTIwLDcgKzEyMCw3IEBACiAweEVCRjAwMDAwCTB4RUJGMUZGRkYJRk1BTiB1Y29kZSAoYWx0IGJhbmspCQkxMjhLQgogMHhFQkUwMDAwMAkweEVCRTNGRkZGCVBIWSBDUzQzMTUgZmlybXdhcmUgKGFsdCBiYW5rKQkyNTZLQgogMHhFOTMwMDAwMAkweEVCRUZGRkZGCXJvb3RmcyAoY3VycmVudCBiYW5rKQkJNDRNQgotMHhFODgwMDAwMAkweEU4OEZGRkZGCUhhcmR3YXJlIGRldmljZSB0cmVlIChjdXIgYmFuaykJMTFNQiArIDUxMktCCisweEU4ODAwMDAwCTB4RTg4RkZGRkYJSGFyZHdhcmUgZGV2aWNlIHRyZWUgKGN1ciBiYW5rKQkxTUIKIDB4RTgwMjAwMDAJMHhFODZGRkZGRglMaW51eC51SW1hZ2UgKGN1cnJlbnQgYmFuaykJN01CICsgODc1S0IKIDB4RTgwMDAwMDAJMHhFODAxRkZGRglSQ1cgKGN1cnJlbnQgYmFuaykJCTEyOEtCCiAKQEAgLTE0Niw3ICsxNDYsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxLiBOT1IgYm9vdDoKICAgIGEuIGJ1aWxkIE5PUiBib290IGltYWdlCi0JJCBtYWtlIFQyMDgwUkRCCisJJCBtYWtlIFQyMDgwUkRCX2NvbmZpZworCSQgbWFrZQogICAgYi4gcHJvZ3JhbSB1LWJvb3QuYmluIGltYWdlIHRvIE5PUiBmbGFzaAogCT0+IHRmdHAgMTAwMDAwMCB1LWJvb3QuYmluCiAJPT4gcHJvIG9mZiBhbGw7ZXJhIGVmZjQwMDAwIGVmZmZmZmZmO2NwLmIgMTAwMDAwMCBlZmY0MDAwMCAkZmlsZXNpemUKQEAgLTE1NSwxOCArMTU2LDE4IEBACiAgICBTd2l0Y2hpbmcgYmV0d2VlbiBkZWZhdWx0IGJhbmsgYW5kIGFsdGVybmF0ZSBiYW5rIG9uIE5PUiBmbGFzaAogICAgVG8gY2hhbmdlIGJvb3Qgc291cmNlIHRvIHZiYW5rNDoKIAl2aWEgc29mdHdhcmU6ICAgcnVuIGNvbW1hbmQgJ2NwbGQgcmVzZXQgYWx0YmFuaycgaW4gdS1ib290LgotCXZpYSBESVAtc3dpdGNoOiBzZXQgU1czWzU6N10gPSAnMDExJworCXZpYSBESVAtc3dpdGNoOiBzZXQgU1czWzU6N10gPSAnMTAwJwogCiAgICBUbyBjaGFuZ2UgYm9vdCBzb3VyY2UgdG8gdmJhbmswOgogCXZpYSBzb2Z0d2FyZTogICBydW4gY29tbWFuZCAnY3BsZCByZXNldCcgaW4gdS1ib290LgotCXZpYSBESVAtU3dpdGNoOiBzZXQgU1czWzU6N10gPSAnMTExJworCXZpYSBESVAtU3dpdGNoOiBzZXQgU1czWzU6N10gPSAnMDAwJwogCiAyLiBOQU5EIEJvb3Q6CiAgICBhLiBidWlsZCBQQkwgaW1hZ2UgZm9yIE5BTkQgYm9vdAogCSQgbWFrZSBUMjA4MFJEQl9OQU5EX2NvbmZpZwotCSQgbWFrZSB1LWJvb3QucGJsCi0gICBiLiBwcm9ncmFtIHUtYm9vdC5wYmwgdG8gTkFORCBmbGFzaAotCT0+IHRmdHAgMTAwMDAwMCB1LWJvb3QucGJsCisJJCBtYWtlCisgICBiLiBwcm9ncmFtIHUtYm9vdC13aXRoLXNwbC1wYmwuYmluIHRvIE5BTkQgZmxhc2gKKwk9PiB0ZnRwIDEwMDAwMDAgdS1ib290LXdpdGgtc3BsLXBibC5iaW4KIAk9PiBuYW5kIGVyYXNlIDAgZDAwMDAKIAk9PiBuYW5kIHdyaXRlIDEwMDAwMDAgMCAkZmlsZXNpemUKIAlzZXQgU1cxWzE6OF0gPSAnMTAwMDAwMTAnLCBTVzJbMV0gPSAnMScsIFNXM1s0XSA9ICcxJyBmb3IgTkFORCBib290CkBAIC0xNzQsOSArMTc1LDkgQEAKIDMuIFNQSSBCb290OgogICAgYS4gYnVpbGQgUEJMIGltYWdlIGZvciBTUEkgYm9vdAogCSQgbWFrZSBUMjA4MFJEQl9TUElGTEFTSF9jb25maWcKLQkkIG1ha2UgdS1ib290LnBibAotICAgYi4gcHJvZ3JhbSB1LWJvb3QucGJsIHRvIFNQSSBmbGFzaAotCT0+IHRmdHAgMTAwMDAwMCB1LWJvb3QucGJsCisJJCBtYWtlCisgICBiLiBwcm9ncmFtIHUtYm9vdC13aXRoLXNwbC1wYmwuYmluIHRvIFNQSSBmbGFzaAorCT0+IHRmdHAgMTAwMDAwMCB1LWJvb3Qtd2l0aC1zcGwtcGJsLmJpbgogCT0+IHNmIHByb2JlIDAKIAk9PiBzZiBlcmFzZSAwIGQwMDAwCiAJPT4gc2Ygd3JpdGUgMTAwMDAwMCAwICRmaWxlc2l6ZQpAQCAtMTg1LDEzICsxODYsNjggQEAKIDQuIFNEIEJvb3Q6CiAgICBhLiBidWlsZCBQQkwgaW1hZ2UgZm9yIFNEIGJvb3QKIAkkIG1ha2UgVDIwODBSREJfU0RDQVJEX2NvbmZpZwotCSQgbWFrZSB1LWJvb3QucGJsCi0gICBiLiBwcm9ncmFtIHUtYm9vdC5wYmwgdG8gVEYgY2FyZAotCT0+IHRmdHAgMTAwMDAwMCB1LWJvb3QucGJsCi0JPT4gbW1jIHdyaXRlIDEwMDAwMDAgOCAxNjUwCisJJCBtYWtlCisgICBiLiBwcm9ncmFtIHUtYm9vdC13aXRoLXNwbC1wYmwuYmluIHRvIG1pY3JvLVNEL1RGIGNhcmQKKwk9PiB0ZnRwIDEwMDAwMDAgdS1ib290LXdpdGgtc3BsLXBibC5iaW4KKwk9PiBtbWMgd3JpdGUgMTAwMDAwMCA4IDB4ODAwCiAJc2V0IFNXMVsxOjhdID0gJzAwMTAwMDAwJywgU1cyWzFdID0gJzAnIGZvciBTRCBib290CiAKIAorMi1zdGFnZSBOQU5EL1NQSS9TRCBib290IGxvYWRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUEJMIGluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBDUEMtU1JBTSBhbmQgY29weSBTUEwoMTYwSykgdG8gU1JBTS4KK1NQTCBmdXJ0aGVyIGluaXRpYWxpemVzIEREUiB1c2luZyBTUEQgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcworYW5kIGNvcHkgdS1ib290KDc2OCBLQikgZnJvbSBOQU5EL1NQSS9TRCBkZXZpY2UgdG8gRERSLgorRmluYWxseSBTUEwgdHJhbnNlcnMgY29udHJvbCB0byB1LWJvb3QgZm9yIGZ1dGhlciBib290aW5nLgorCitTUEwgaGFzIGZvbGxvd2luZyBmZWF0dXJlczoKKyAtIEV4ZWN1dGVzIHdpdGhpbiAyNTZLCisgLSBObyByZWxvY2F0aW9uIHJlcXVpcmVkCisKK1J1biB0aW1lIHZpZXcgb2YgU1BMIGZyYW1ld29yaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfEFyZWEJCSAgIHwgQWRkcmVzcwkJCXwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3xTZWN1cmVCb290IGhlYWRlciB8IDB4RkZGQzAwMDAgKDMyS0IpCQl8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8R0QsIEJECQkgICB8IDB4RkZGQzgwMDAgKDRLQikJCXwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3xFTlYJCSAgIHwgMHhGRkZDOTAwMCAoOEtCKQkJfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfEhFQVAJCSAgIHwgMHhGRkZDQjAwMCAoNTBLQikJCXwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3xTVEFDSwkJICAgfCAweEZGRkQ4MDAwICgyMktCKQkJfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfFUtYm9vdCBTUEwJICAgfCAweEZGRkQ4MDAwICgxNjBLQikJCXwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTkFORCBGbGFzaCBtZW1vcnkgTWFwIG9uIFQyMDgwUkRCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3RhcnQJCUVuZAkJRGVmaW5pdGlvbglTaXplCisweDAwMDAwMAkweDBGRkZGRgl1LWJvb3QgaW1nCTFNQiAgKDIgYmxvY2tzKQorMHgxMDAwMDAJMHgxN0ZGRkYJdS1ib290IGVudgk1MTJLQiAoMSBibG9jaykKKzB4MTgwMDAwCTB4MUZGRkZGCUZNQU4gdWNvZGUJNTEyS0IgKDEgYmxvY2spCisweDIwMDAwMAkweDI3RkZGRglDUzQzMTUgdWNvZGUJNTEyS0IgKDEgYmxvY2spCisKKworTWljcm8gU0QgQ2FyZCBtZW1vcnkgTWFwIG9uIFQyMDgwUkRCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCbG9jawkJI2Jsb2NrcwkJRGVmaW5pdGlvbglTaXplCisweDAwOAkJMjA0OAkJdS1ib290IGltZwkxTUIKKzB4ODAwCQkwMDE2CQl1LWJvb3QgZW52CThLQgorMHg4MjAJCTAxMjgJCUZNQU4gdWNvZGUJNjRLQgorMHg4YTAJCTA1MTIJCUNTNDMxNSB1Y29kZQkyNTZLQgorCisKK1NQSSBGbGFzaCBtZW1vcnkgTWFwIG9uIFQyMDgwUkRCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTdGFydAkJRW5kCQlEZWZpbml0aW9uCVNpemUKKzB4MDAwMDAwCTB4MEZGRkZGCXUtYm9vdCBpbWcJMU1CCisweDEwMDAwMAkweDEwMUZGRgl1LWJvb3QgZW52CThLQgorMHgxMTAwMDAJMHgxMUZGRkYJRk1BTiB1Y29kZQk2NEtCCisweDEyMDAwMCAgICAgICAgMHgxNUZGRkYgICAgICAgIENTNDMxNSB1Y29kZQkyNTZLQgorCisKIEhvdyB0byB1cGRhdGUgdGhlIHVjb2RlIG9mIENvcnRpbmEgQ1M0MzE1L0NTNDM0MCAxMEcgUEhZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogPT4gdGZ0cCAxMDAwMDAwIENTNDMxNS1DUzQzNDAtUEhZLXVjb2RlLnR4dApkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cmRiL2NwbGQuaCBiL2JvYXJkL2ZyZWVzY2FsZS90MjA4eHJkYi9jcGxkLmgKaW5kZXggNGNlZTRlNS4uM2YxNTMzOCAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cmRiL2NwbGQuaAorKysgYi9ib2FyZC9mcmVlc2NhbGUvdDIwOHhyZGIvY3BsZC5oCkBAIC0zNSw4ICszNSw4IEBACiAjZGVmaW5lIENQTERfTEJNQVBfTUFTSwkJMHgzRgogI2RlZmluZSBDUExEX0JBTktfU0VMX01BU0sJMHgwNwogI2RlZmluZSBDUExEX0JBTktfT1ZFUlJJREUJMHg0MAotI2RlZmluZSBDUExEX0xCTUFQX0FMVEJBTksJMHg0MyAvKiBCQU5LIE9SIHwgQkFOSyA0ICovCi0jZGVmaW5lIENQTERfTEJNQVBfREZMVEJBTksJMHg0NyAvKiBCQU5LIE9SIHwgQkFOSyAwICovCisjZGVmaW5lIENQTERfTEJNQVBfQUxUQkFOSwkweDQ0IC8qIEJBTksgT1IgfCBCQU5LIDQgKi8KKyNkZWZpbmUgQ1BMRF9MQk1BUF9ERkxUQkFOSwkweDQwIC8qIEJBTksgT1IgfCBCQU5LIDAgKi8KICNkZWZpbmUgQ1BMRF9MQk1BUF9SRVNFVAkweEZGCiAjZGVmaW5lIENQTERfTEJNQVBfU0hJRlQJMHgwMwogI2RlZmluZSBDUExEX0JPT1RfU0VMCQkweDgwCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvdDIwOHhyZGIvZGRyLmMgYi9ib2FyZC9mcmVlc2NhbGUvdDIwOHhyZGIvZGRyLmMKaW5kZXggMDFlOTE3My4uOGEyNjI3NiAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cmRiL2Rkci5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS90MjA4eHJkYi9kZHIuYwpAQCAtMTAwLDEzICsxMDAsMTUgQEAKIHsKIAlwaHlzX3NpemVfdCBkcmFtX3NpemU7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUExfQlVJTEQpIHx8ICFkZWZpbmVkKENPTkZJR19SQU1CT09UX1BCTCkKIAlwdXRzKCJJbml0aWFsaXppbmcuLi4udXNpbmcgU1BEXG4iKTsKLQogCWRyYW1fc2l6ZSA9IGZzbF9kZHJfc2RyYW0oKTsKIAogCWRyYW1fc2l6ZSA9IHNldHVwX2Rkcl90bGJzKGRyYW1fc2l6ZSAvIDB4MTAwMDAwKTsKIAlkcmFtX3NpemUgKj0gMHgxMDAwMDA7Ci0KLQlwdXRzKCIgICAgRERSOiAiKTsKKyNlbHNlCisJLyogRERSIGhhcyBiZWVuIGluaXRpYWxpc2VkIGJ5IGZpcnN0IHN0YWdlIGJvb3QgbG9hZGVyICovCisJZHJhbV9zaXplID0gZnNsX2Rkcl9zZHJhbV9zaXplKCk7CisjZW5kaWYKIAlyZXR1cm4gZHJhbV9zaXplOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cmRiL3NwbC5jIGIvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cmRiL3NwbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZTJiMWUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9mcmVlc2NhbGUvdDIwOHhyZGIvc3BsLmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qIENvcHlyaWdodCAyMDEzIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICAgIEdQTC0yLjArCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPG5zMTY1NTAuaD4KKyNpbmNsdWRlIDxuYW5kLmg+CisjaW5jbHVkZSA8aTJjLmg+CisjaW5jbHVkZSA8bW1jLmg+CisjaW5jbHVkZSA8ZnNsX2VzZGhjLmg+CisjaW5jbHVkZSA8c3BpX2ZsYXNoLmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCitwaHlzX3NpemVfdCBnZXRfZWZmZWN0aXZlX21lbXNpemUodm9pZCkKK3sKKwlyZXR1cm4gQ09ORklHX1NZU19MM19TSVpFOworfQorCit1bnNpZ25lZCBsb25nIGdldF9ib2FyZF9zeXNfY2xrKHZvaWQpCit7CisJcmV0dXJuIENPTkZJR19TWVNfQ0xLX0ZSRVE7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X2JvYXJkX2Rkcl9jbGsodm9pZCkKK3sKKwlyZXR1cm4gQ09ORklHX0REUl9DTEtfRlJFUTsKK30KKwordm9pZCBib2FyZF9pbml0X2YodWxvbmcgYm9vdGZsYWcpCit7CisJdTMyIHBsYXRfcmF0aW8sIHN5c19jbGssIGNjYl9jbGs7CisJY2Nzcl9ndXJfdCAqZ3VyID0gKHZvaWQgKilDT05GSUdfU1lTX01QQzg1eHhfR1VUU19BRERSOworCisJLyogTWVtY3B5IGV4aXN0aW5nIEdEIGF0IENPTkZJR19TUExfR0RfQUREUiAqLworCW1lbWNweSgodm9pZCAqKUNPTkZJR19TUExfR0RfQUREUiwgKHZvaWQgKilnZCwgc2l6ZW9mKGdkX3QpKTsKKworCS8qIFVwZGF0ZSBHRCBwb2ludGVyICovCisJZ2QgPSAoZ2RfdCAqKShDT05GSUdfU1BMX0dEX0FERFIpOworCisJY29uc29sZV9pbml0X2YoKTsKKworCS8qIGluaXRpYWxpemUgc2VsZWN0ZWQgcG9ydCB3aXRoIGFwcHJvcHJpYXRlIGJhdWQgcmF0ZSAqLworCXN5c19jbGsgPSBnZXRfYm9hcmRfc3lzX2NsaygpOworCXBsYXRfcmF0aW8gPSAoaW5fYmUzMigmZ3VyLT5yY3dzclswXSkgPj4gMjUpICYgMHgxZjsKKwljY2JfY2xrID0gc3lzX2NsayAqIHBsYXRfcmF0aW8gLyAyOworCisJTlMxNjU1MF9pbml0KChOUzE2NTUwX3QpQ09ORklHX1NZU19OUzE2NTUwX0NPTTEsCisJCSAgICAgY2NiX2NsayAvIDE2IC8gQ09ORklHX0JBVURSQVRFKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NQTF9NTUNfQk9PVCkKKwlwdXRzKCJcblNEIGJvb3QuLi5cbiIpOworI2VsaWYgZGVmaW5lZChDT05GSUdfU1BMX1NQSV9CT09UKQorCXB1dHMoIlxuU1BJIGJvb3QuLi5cbiIpOworI2VsaWYgZGVmaW5lZChDT05GSUdfU1BMX05BTkRfQk9PVCkKKwlwdXRzKCJcbk5BTkQgYm9vdC4uLlxuIik7CisjZW5kaWYKKworCXJlbG9jYXRlX2NvZGUoQ09ORklHX1NQTF9SRUxPQ19TVEFDSywgKGdkX3QgKilDT05GSUdfU1BMX0dEX0FERFIsIDB4MCk7Cit9CisKK3ZvaWQgYm9hcmRfaW5pdF9yKGdkX3QgKmdkLCB1bG9uZyBkZXN0X2FkZHIpCit7CisJYmRfdCAqYmQ7CisKKwliZCA9IChiZF90ICopKGdkICsgc2l6ZW9mKGdkX3QpKTsKKwltZW1zZXQoYmQsIDAsIHNpemVvZihiZF90KSk7CisJZ2QtPmJkID0gYmQ7CisJYmQtPmJpX21lbXN0YXJ0ID0gQ09ORklHX1NZU19JTklUX0wzX0FERFI7CisJYmQtPmJpX21lbXNpemUgPSBDT05GSUdfU1lTX0wzX1NJWkU7CisKKwlwcm9iZWNwdSgpOworCWdldF9jbG9ja3MoKTsKKwltZW1fbWFsbG9jX2luaXQoQ09ORklHX1NQTF9SRUxPQ19NQUxMT0NfQUREUiwKKwkJCUNPTkZJR19TUExfUkVMT0NfTUFMTE9DX1NJWkUpOworCisjaWZkZWYgQ09ORklHX1NQTF9OQU5EX0JPT1QKKwluYW5kX3NwbF9sb2FkX2ltYWdlKENPTkZJR19FTlZfT0ZGU0VULCBDT05GSUdfRU5WX1NJWkUsCisJCQkgICAgKHVjaGFyICopQ09ORklHX0VOVl9BRERSKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TUExfTU1DX0JPT1QKKwltbWNfaW5pdGlhbGl6ZShiZCk7CisJbW1jX3NwbF9sb2FkX2ltYWdlKENPTkZJR19FTlZfT0ZGU0VULCBDT05GSUdfRU5WX1NJWkUsCisJCQkgICAodWNoYXIgKilDT05GSUdfRU5WX0FERFIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NQTF9TUElfQk9PVAorCXNwaV9zcGxfbG9hZF9pbWFnZShDT05GSUdfRU5WX09GRlNFVCwgQ09ORklHX0VOVl9TSVpFLAorCQkJICAgKHVjaGFyICopQ09ORklHX0VOVl9BRERSKTsKKyNlbmRpZgorCisJZ2QtPmVudl9hZGRyICA9ICh1bG9uZykoQ09ORklHX0VOVl9BRERSKTsKKwlnZC0+ZW52X3ZhbGlkID0gMTsKKworCWkyY19pbml0X2FsbCgpOworCisJZ2QtPnJhbV9zaXplID0gaW5pdGRyYW0oMCk7CisKKyNpZmRlZiBDT05GSUdfU1BMX01NQ19CT09UCisJbW1jX2Jvb3QoKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NQTF9TUElfQk9PVCkKKwlzcGlfYm9vdCgpOworI2VsaWYgZGVmaW5lZChDT05GSUdfU1BMX05BTkRfQk9PVCkKKwluYW5kX2Jvb3QoKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cmRiL3QyMDh4cmRiLmMgYi9ib2FyZC9mcmVlc2NhbGUvdDIwOHhyZGIvdDIwOHhyZGIuYwppbmRleCBmM2ZlYzJhLi4yNjVjMWY5IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvdDIwOHhyZGIvdDIwOHhyZGIuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvdDIwOHhyZGIvdDIwOHhyZGIuYwpAQCAtNDQsNyArNDQsNyBAQAogCQlwdXRzKCJOQU5EXG4iKTsKIAl9IGVsc2UgewogCQlyZWcgPSAoKHJlZyAmIENQTERfTEJNQVBfTUFTSykgPj4gQ1BMRF9MQk1BUF9TSElGVCk7Ci0JCXByaW50ZigiTk9SIHZCYW5rJWRcbiIsIH5yZWcgJiAweDcpOworCQlwcmludGYoIk5PUiB2QmFuayVkXG4iLCByZWcpOwogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvdDIwOHhyZGIvdGxiLmMgYi9ib2FyZC9mcmVlc2NhbGUvdDIwOHhyZGIvdGxiLmMKaW5kZXggMDg1ZDlmNS4uMmViZWEzNiAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL3QyMDh4cmRiL3RsYi5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS90MjA4eHJkYi90bGIuYwpAQCAtNjUsNiArNjUsNyBAQAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1IsIE1BUzJfV3xNQVMyX0csCiAJCSAgICAgIDAsIDIsIEJPT0tFX1BBR0VTWl8yNTZNLCAxKSwKIAorI2lmbmRlZiBDT05GSUdfU1BMX0JVSUxECiAJLyogKkkqRyogLSBQQ0llIDEsIDB4ODAwMDAwMDAgKi8KIAlTRVRfVExCX0VOVFJZKDEsIENPTkZJR19TWVNfUENJRTFfTUVNX1ZJUlQsIENPTkZJR19TWVNfUENJRTFfTUVNX1BIWVMsCiAJCSAgICAgIE1BUzNfU1h8TUFTM19TV3xNQVMzX1NSLCBNQVMyX0l8TUFTMl9HLApAQCAtMTEwLDYgKzExMSw3IEBACiAJCSAgICAgIE1BUzNfU1h8TUFTM19TV3xNQVMzX1NSLCBNQVMyX0l8TUFTMl9HLAogCQkgICAgICAwLCAxMiwgQk9PS0VfUEFHRVNaXzE2TSwgMSksCiAjZW5kaWYKKyNlbmRpZgogI2lmZGVmIENPTkZJR19TWVNfRENTUkJBUl9QSFlTCiAJU0VUX1RMQl9FTlRSWSgxLCBDT05GSUdfU1lTX0RDU1JCQVIsIENPTkZJR19TWVNfRENTUkJBUl9QSFlTLAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgTUFTMl9JfE1BUzJfRywKQEAgLTE0MCw3ICsxNDIsNyBAQAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgTUFTMl9HLAogCQkgICAgICAwLCAxOCwgQk9PS0VfUEFHRVNaXzFNLCAxKSwKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NZU19SQU1CT09UKQorI2lmIGRlZmluZWQoQ09ORklHX1JBTUJPT1RfUEJMKSAmJiAhZGVmaW5lZChDT05GSUdfU1BMX0JVSUxEKQogCVNFVF9UTEJfRU5UUlkoMSwgQ09ORklHX1NZU19ERFJfU0RSQU1fQkFTRSwgQ09ORklHX1NZU19ERFJfU0RSQU1fQkFTRSwKIAkJICAgICAgTUFTM19TWHxNQVMzX1NXfE1BUzNfU1IsIDAsCiAJCSAgICAgIDAsIDE5LCBCT09LRV9QQUdFU1pfMkcsIDEpCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvdDRxZHMvTWFrZWZpbGUgYi9ib2FyZC9mcmVlc2NhbGUvdDRxZHMvTWFrZWZpbGUKaW5kZXggMmIxZjdhYS4uNGU4ZTVjYiAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL3Q0cWRzL01ha2VmaWxlCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS90NHFkcy9NYWtlZmlsZQpAQCAtNCwxMCArNCwxNCBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKICMKIAoraWZkZWYgQ09ORklHX1NQTF9CVUlMRAorb2JqLXkgKz0gc3BsLm8KK2Vsc2UKIG9iai0kKENPTkZJR19UNDI0MFFEUykgKz0gdDQyNDBxZHMubwogb2JqLSQoQ09ORklHX1Q0MjQwRU1VKSArPSB0NDI0MGVtdS5vCi1vYmoteQkrPSBkZHIubwogb2JqLSQoQ09ORklHX1Q0MjQwUURTKSs9IGV0aC5vCiBvYmotJChDT05GSUdfUENJKQkrPSBwY2kubworZW5kaWYKK29iai15CSs9IGRkci5vCiBvYmoteQkrPSBsYXcubwogb2JqLXkJKz0gdGxiLm8KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS90NHFkcy9kZHIuYyBiL2JvYXJkL2ZyZWVzY2FsZS90NHFkcy9kZHIuYwppbmRleCA3NTg2Y2MzLi43YWJkMzhkIDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvdDRxZHMvZGRyLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3Q0cWRzL2Rkci5jCkBAIC0xMTcsMTEgKzExNywxNSBAQAogCiAJcHV0cygiSW5pdGlhbGl6aW5nLi4uLnVzaW5nIFNQRFxuIik7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUExfQlVJTEQpIHx8ICFkZWZpbmVkKENPTkZJR19SQU1CT09UX1BCTCkKIAlkcmFtX3NpemUgPSBmc2xfZGRyX3NkcmFtKCk7CiAKIAlkcmFtX3NpemUgPSBzZXR1cF9kZHJfdGxicyhkcmFtX3NpemUgLyAweDEwMDAwMCk7CiAJZHJhbV9zaXplICo9IDB4MTAwMDAwOwogCi0JcHV0cygiICAgIEREUjogIik7CisjZWxzZQorCS8qIEREUiBoYXMgYmVlbiBpbml0aWFsaXNlZCBieSBmaXJzdCBzdGFnZSBib290IGxvYWRlciAqLworCWRyYW1fc2l6ZSA9IGZzbF9kZHJfc2RyYW1fc2l6ZSgpOworI2VuZGlmCiAJcmV0dXJuIGRyYW1fc2l6ZTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS90NHFkcy9zcGwuYyBiL2JvYXJkL2ZyZWVzY2FsZS90NHFkcy9zcGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzYxNTZlCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3Q0cWRzL3NwbC5jCkBAIC0wLDAgKzEsMTQxIEBACisvKiBDb3B5cmlnaHQgMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAgICBHUEwtMi4wKworICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vc3BsLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8bnMxNjU1MC5oPgorI2luY2x1ZGUgPG5hbmQuaD4KKyNpbmNsdWRlIDxtbWMuaD4KKyNpbmNsdWRlIDxmc2xfZXNkaGMuaD4KKyNpbmNsdWRlIDxpMmMuaD4KKyNpbmNsdWRlICIuLi9jb21tb24vcWl4aXMuaCIKKyNpbmNsdWRlICJ0NDI0MHFkc19xaXhpcy5oIgorCisjZGVmaW5lIEZTTF9DT1JFTkVUX0NDU1JfUE9SU1IxX1JDV19NQVNLCTB4RkY4MDAwMDAKKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKK3BoeXNfc2l6ZV90IGdldF9lZmZlY3RpdmVfbWVtc2l6ZSh2b2lkKQoreworCXJldHVybiBDT05GSUdfU1lTX0wzX1NJWkU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X2JvYXJkX3N5c19jbGsodm9pZCkKK3sKKwl1OCBzeXNjbGtfY29uZiA9IFFJWElTX1JFQUQoYnJkY2ZnWzFdKTsKKworCXN3aXRjaCAoc3lzY2xrX2NvbmYgJiAweDBGKSB7CisJY2FzZSBRSVhJU19TWVNDTEtfODM6CisJCXJldHVybiA4MzMzMzMzMzsKKwljYXNlIFFJWElTX1NZU0NMS18xMDA6CisJCXJldHVybiAxMDAwMDAwMDA7CisJY2FzZSBRSVhJU19TWVNDTEtfMTI1OgorCQlyZXR1cm4gMTI1MDAwMDAwOworCWNhc2UgUUlYSVNfU1lTQ0xLXzEzMzoKKwkJcmV0dXJuIDEzMzMzMzMzMzsKKwljYXNlIFFJWElTX1NZU0NMS18xNTA6CisJCXJldHVybiAxNTAwMDAwMDA7CisJY2FzZSBRSVhJU19TWVNDTEtfMTYwOgorCQlyZXR1cm4gMTYwMDAwMDAwOworCWNhc2UgUUlYSVNfU1lTQ0xLXzE2NjoKKwkJcmV0dXJuIDE2NjY2NjY2NjsKKwl9CisJcmV0dXJuIDY2NjY2NjY2OworfQorCit1bnNpZ25lZCBsb25nIGdldF9ib2FyZF9kZHJfY2xrKHZvaWQpCit7CisJdTggZGRyY2xrX2NvbmYgPSBRSVhJU19SRUFEKGJyZGNmZ1sxXSk7CisKKwlzd2l0Y2ggKChkZHJjbGtfY29uZiAmIDB4MzApID4+IDQpIHsKKwljYXNlIFFJWElTX0REUkNMS18xMDA6CisJCXJldHVybiAxMDAwMDAwMDA7CisJY2FzZSBRSVhJU19ERFJDTEtfMTI1OgorCQlyZXR1cm4gMTI1MDAwMDAwOworCWNhc2UgUUlYSVNfRERSQ0xLXzEzMzoKKwkJcmV0dXJuIDEzMzMzMzMzMzsKKwl9CisJcmV0dXJuIDY2NjY2NjY2OworfQorCit2b2lkIGJvYXJkX2luaXRfZih1bG9uZyBib290ZmxhZykKK3sKKwl1MzIgcGxhdF9yYXRpbywgc3lzX2NsaywgY2NiX2NsazsKKwljY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKUNPTkZJR19TWVNfTVBDODV4eF9HVVRTX0FERFI7CisjaWZkZWYgQ09ORklHX1NQTF9OQU5EX0JPT1QKKwl1MzIgcG9yc3IxLCBwaW5jdGw7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TUExfTkFORF9CT09UCisJcG9yc3IxID0gaW5fYmUzMigmZ3VyLT5wb3JzcjEpOworCXBpbmN0bCA9ICgocG9yc3IxICYgfihGU0xfQ09SRU5FVF9DQ1NSX1BPUlNSMV9SQ1dfTUFTSykpIHwgMHgyNDgwMDAwMCk7CisJb3V0X2JlMzIoKHVuc2lnbmVkIGludCAqKShDT05GSUdfU1lTX0RDU1JCQVIgKyAweDIwMDAwKSwgcGluY3RsKTsKKyNlbmRpZgorCS8qIE1lbWNweSBleGlzdGluZyBHRCBhdCBDT05GSUdfU1BMX0dEX0FERFIgKi8KKwltZW1jcHkoKHZvaWQgKilDT05GSUdfU1BMX0dEX0FERFIsICh2b2lkICopZ2QsIHNpemVvZihnZF90KSk7CisKKwkvKiBVcGRhdGUgR0QgcG9pbnRlciAqLworCWdkID0gKGdkX3QgKikoQ09ORklHX1NQTF9HRF9BRERSKTsKKworCS8qIGNvbXBpbGVyIG9wdGltaXphdGlvbiBiYXJyaWVyIG5lZWRlZCBmb3IgR0NDID49IDMuNCAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCIiIDogOiA6ICJtZW1vcnkiKTsKKworCWNvbnNvbGVfaW5pdF9mKCk7CisKKwkvKiBpbml0aWFsaXplIHNlbGVjdGVkIHBvcnQgd2l0aCBhcHByb3ByaWF0ZSBiYXVkIHJhdGUgKi8KKwlzeXNfY2xrID0gZ2V0X2JvYXJkX3N5c19jbGsoKTsKKwlwbGF0X3JhdGlvID0gKGluX2JlMzIoJmd1ci0+cmN3c3JbMF0pID4+IDI1KSAmIDB4MWY7CisJY2NiX2NsayA9IHN5c19jbGsgKiBwbGF0X3JhdGlvIC8gMjsKKworCU5TMTY1NTBfaW5pdCgoTlMxNjU1MF90KUNPTkZJR19TWVNfTlMxNjU1MF9DT00xLAorCQkgICAgIGNjYl9jbGsgLyAxNiAvIENPTkZJR19CQVVEUkFURSk7CisKKyNpZmRlZiBDT05GSUdfU1BMX01NQ19CT09UCisJcHV0cygiXG5TRCBib290Li4uXG4iKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NQTF9OQU5EX0JPT1QpCisJcHV0cygiXG5OQU5EIGJvb3QuLi5cbiIpOworI2VuZGlmCisJcmVsb2NhdGVfY29kZShDT05GSUdfU1BMX1JFTE9DX1NUQUNLLCAoZ2RfdCAqKUNPTkZJR19TUExfR0RfQUREUiwgMHgwKTsKK30KKwordm9pZCBib2FyZF9pbml0X3IoZ2RfdCAqZ2QsIHVsb25nIGRlc3RfYWRkcikKK3sKKwliZF90ICpiZDsKKworCWJkID0gKGJkX3QgKikoZ2QgKyBzaXplb2YoZ2RfdCkpOworCW1lbXNldChiZCwgMCwgc2l6ZW9mKGJkX3QpKTsKKwlnZC0+YmQgPSBiZDsKKwliZC0+YmlfbWVtc3RhcnQgPSBDT05GSUdfU1lTX0lOSVRfTDNfQUREUjsKKwliZC0+YmlfbWVtc2l6ZSA9IENPTkZJR19TWVNfTDNfU0laRTsKKworCXByb2JlY3B1KCk7CisJZ2V0X2Nsb2NrcygpOworCW1lbV9tYWxsb2NfaW5pdChDT05GSUdfU1BMX1JFTE9DX01BTExPQ19BRERSLAorCQkJQ09ORklHX1NQTF9SRUxPQ19NQUxMT0NfU0laRSk7CisKKyNpZmRlZiBDT05GSUdfU1BMX05BTkRfQk9PVAorCW5hbmRfc3BsX2xvYWRfaW1hZ2UoQ09ORklHX0VOVl9PRkZTRVQsIENPTkZJR19FTlZfU0laRSwKKwkJCSAgICAodWNoYXIgKilDT05GSUdfRU5WX0FERFIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NQTF9NTUNfQk9PVAorCW1tY19pbml0aWFsaXplKGJkKTsKKwltbWNfc3BsX2xvYWRfaW1hZ2UoQ09ORklHX0VOVl9PRkZTRVQsIENPTkZJR19FTlZfU0laRSwKKwkJCSAgICh1Y2hhciAqKUNPTkZJR19FTlZfQUREUik7CisjZW5kaWYKKworCWdkLT5lbnZfYWRkciAgPSAodWxvbmcpKENPTkZJR19FTlZfQUREUik7CisJZ2QtPmVudl92YWxpZCA9IDE7CisKKwlpMmNfaW5pdF9hbGwoKTsKKworCWdkLT5yYW1fc2l6ZSA9IGluaXRkcmFtKDApOworCisjaWZkZWYgQ09ORklHX1NQTF9NTUNfQk9PVAorCW1tY19ib290KCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19TUExfTkFORF9CT09UKQorCW5hbmRfYm9vdCgpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvdDRxZHMvdDRfcGJpLmNmZyBiL2JvYXJkL2ZyZWVzY2FsZS90NHFkcy90NF9wYmkuY2ZnCmluZGV4IGM1OThmYjUuLjYxMjYyNjYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS90NHFkcy90NF9wYmkuY2ZnCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS90NHFkcy90NF9wYmkuY2ZnCkBAIC0xMywyMCArMTMsNiBAQAogMDkwMDBkMDAgMDAwMDAwMDAKIDA5MDAwZDA0IGZmZjgwMDAwCiAwOTAwMGQwOCA4MTAwMDAxMgotI3dvcmthcm91bmQgZm9yIElGQyBidXMgc3BlZWQKLTA5MTI0MWMwIGYwM2YzZjNmCi0wOTEyNDFjNCBmZjAwM2YzZgotMDkxMjQwMTAgMDAwMDAxMDEKLTA5MTI0MTMwIDAwMDAwMDBjCi0jd29ya2Fyb3VuZCBmb3IgU0VSREVTIEEtMDA2MDMxCi0wOTBlYTAwMCAwNjQ3NDBlNgotMDkwZWEwMjAgMDY0NzQwZTYKLTA5MGViMDAwIDA2NDc0MGU2Ci0wOTBlYjAyMCAwNjQ3NDBlNgotMDkwZWMwMDAgMDY0NzQwZTYKLTA5MGVjMDIwIDA2NDc0MGU2Ci0wOTBlZDAwMCAwNjQ3NDBlNgotMDkwZWQwMjAgMDY0NzQwZTYKICNDb25maWd1cmUgYWx0ZXJuYXRlIHNwYWNlCiAwOTAwMDAxMCAwMDAwMDAwMAogMDkwMDAwMTQgZmYwMDAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS90NHFkcy90NF9yY3cuY2ZnIGIvYm9hcmQvZnJlZXNjYWxlL3Q0cWRzL3Q0X3Jjdy5jZmcKaW5kZXggNzRkZjAxYS4uM2U1NjgxNyAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL3Q0cWRzL3Q0X3Jjdy5jZmcKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3Q0cWRzL3Q0X3Jjdy5jZmcKQEAgLTEsNyArMSw3IEBACiAjUEJMIHByZWFtYmxlIGFuZCBSQ1cgaGVhZGVyCiBhYTU1YWE1NSAwMTBlMDEwMAogI3NlcmRlcyBwcm90b2NvbCAgMV8yOF82XzEyCi0xMjBjMDAxOSAwYzEwMTkxNSAwMDAwMDAwMCAwMDAwMDAwMAotMDQzODMwNjMgMzA1NDhjMDAgNmMwMjAwMDAgMWQwMDAwMDAKKzE2MDcwMDE5IDE4MTAxOTE2IDAwMDAwMDAwIDAwMDAwMDAwCiswNDM4MzA2MCAzMDU0OGMwMCBlYzAyMDAwMCBmNTAwMDAwMAogMDAwMDAwMDAgZWUwMDAwZWUgMDAwMDAwMDAgMDAwMzA3ZmMKLTAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDIwCiswMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAyOApkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL3Q0cWRzL3RsYi5jIGIvYm9hcmQvZnJlZXNjYWxlL3Q0cWRzL3RsYi5jCmluZGV4IGI3MDFlNzUuLjFlNGQwOTYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS90NHFkcy90bGIuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvdDRxZHMvdGxiLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAlTRVRfVExCX0VOVFJZKDEsIENPTkZJR19TWVNfRkxBU0hfQkFTRSwgQ09ORklHX1NZU19GTEFTSF9CQVNFX1BIWVMsCiAJCSAgICAgIE1BUzNfU1h8TUFTM19TUiwgTUFTMl9XfE1BUzJfRywKIAkJICAgICAgMCwgMiwgQk9PS0VfUEFHRVNaXzI1Nk0sIDEpLAotCisjaWZuZGVmIENPTkZJR19TUExfQlVJTEQKIAkvKiAqSSpHKiAtIFBDSSAqLwogCVNFVF9UTEJfRU5UUlkoMSwgQ09ORklHX1NZU19QQ0lFMV9NRU1fVklSVCwgQ09ORklHX1NZU19QQ0lFMV9NRU1fUEhZUywKIAkJICAgICAgTUFTM19TWHxNQVMzX1NXfE1BUzNfU1IsIE1BUzJfSXxNQVMyX0csCkBAIC0xMDUsNiArMTA1LDcgQEAKIAkJICAgICAgTUFTM19TWHxNQVMzX1NXfE1BUzNfU1IsIE1BUzJfSXxNQVMyX0csCiAJCSAgICAgIDAsIDEyLCBCT09LRV9QQUdFU1pfMTZNLCAxKSwKICNlbmRpZgorI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NZU19EQ1NSQkFSX1BIWVMKIAlTRVRfVExCX0VOVFJZKDEsIENPTkZJR19TWVNfRENTUkJBUiwgQ09ORklHX1NZU19EQ1NSQkFSX1BIWVMsCiAJCSAgICAgIE1BUzNfU1h8TUFTM19TV3xNQVMzX1NSLCBNQVMyX0l8TUFTMl9HLApAQCAtMTM2LDYgKzEzNywxMSBAQAogCQkgICAgICAwLCAxOCwgQk9PS0VfUEFHRVNaXzFNLCAxKSwKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfUkFNQk9PVF9QQkwpICYmICFkZWZpbmVkKENPTkZJR19TUExfQlVJTEQpCisJU0VUX1RMQl9FTlRSWSgxLCBDT05GSUdfU1lTX0REUl9TRFJBTV9CQVNFLCBDT05GSUdfU1lTX0REUl9TRFJBTV9CQVNFLAorCQkgICAgICBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgMCwKKwkJICAgICAgMCwgMTksIEJPT0tFX1BBR0VTWl8yRywgMSkKKyNlbmRpZgogfTsKIAogaW50IG51bV90bGJfZW50cmllcyA9IEFSUkFZX1NJWkUodGxiX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2dlbmlldHYvTWFrZWZpbGUgYi9ib2FyZC9nZW5pZXR2L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDExZjE0Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2dlbmlldHYvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKLSMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSMKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0jCi0KLW9iai15CT0gZ2VuaWV0di5vIGZsYXNoLm8KZGlmZiAtLWdpdCBhL2JvYXJkL2dlbmlldHYvZmxhc2guYyBiL2JvYXJkL2dlbmlldHYvZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY1Nzk3OC4uMDAwMDAwMAotLS0gYS9ib2FyZC9nZW5pZXR2L2ZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NDkgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDExCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxtcGM4eHguaD4KLQotZmxhc2hfaW5mb190CWZsYXNoX2luZm9bQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1NdOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbnMKLSAqLwotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplKHZ1X2xvbmcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbyk7Ci1zdGF0aWMgaW50IHdyaXRlX3dvcmQoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCB1bG9uZyBkYXRhKTsKLXN0YXRpYyB2b2lkIGZsYXNoX2dldF9vZmZzZXRzKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqaW5mbyk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi11bnNpZ25lZCBsb25nIGZsYXNoX2luaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHNpemVfYjA7Ci0JaW50IGk7Ci0KLQkvKiBJbml0OiBubyBGTEFTSGVzIGtub3duICovCi0JZm9yIChpID0gMDsgaSA8IENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTOyArK2kpCi0JCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotCi0JLyogRGV0ZWN0IHNpemUgKi8KLQlzaXplX2IwID0gZmxhc2hfZ2V0X3NpemUoKHZ1X2xvbmcgKilDT05GSUdfU1lTX0ZMQVNIX0JBU0UsCi0JCQkmZmxhc2hfaW5mb1swXSk7Ci0KLQkvKiBTZXR1cCBvZmZzZXRzICovCi0JZmxhc2hfZ2V0X29mZnNldHMoQ09ORklHX1NZU19GTEFTSF9CQVNFLCAmZmxhc2hfaW5mb1swXSk7Ci0KLSNpZiBDT05GSUdfU1lTX01PTklUT1JfQkFTRSA+PSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UKLQkvKiBNb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLwotCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLQkJICAgICAgQ09ORklHX1NZU19NT05JVE9SX0JBU0UsCi0JCSAgICAgIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFK21vbml0b3JfZmxhc2hfbGVuLTEsCi0JCSAgICAgICZmbGFzaF9pbmZvWzBdKTsKLSNlbmRpZgotCi0JZmxhc2hfaW5mb1swXS5zaXplID0gc2l6ZV9iMDsKLQotCXJldHVybiBzaXplX2IwOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGaXggdGhpcyB0byBzdXBwb3J0IHZhcmlhYmxlIHNlY3RvciBzaXplcwotKi8KLXN0YXRpYyB2b2lkIGZsYXNoX2dldF9vZmZzZXRzKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQlpbnQgaTsKLQotCS8qIHNldCB1cCBzZWN0b3Igc3RhcnQgYWRkcmVzcyB0YWJsZSAqLwotCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU0wNDApIHsKLQkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlCSovCi0JCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKLQkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCk7Ci0JfQotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXZvaWQgZmxhc2hfcHJpbnRfaW5mbyhmbGFzaF9pbmZvX3QgKmluZm8pCi17Ci0JaW50IGk7Ci0KLQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCQlwdXRzKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKLQljYXNlIEZMQVNIX01BTl9BTUQ6Ci0JCXByaW50ZigiQU1EICIpOwotCQlicmVhazsKLQljYXNlIEZMQVNIX01BTl9GVUo6Ci0JCXByaW50ZigiRlVKSVRTVSAiKTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9NQU5fQk06Ci0JCXByaW50ZigiQlJJR0hUIE1JQ1JPICIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGYoIlVua25vd24gVmVuZG9yICIpOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKLQljYXNlIEZMQVNIX0FNMDQwOgotCQlwcmludGYoIjI5RjA0MCBvciAyOUxWMDQwICg0IE1iaXQsIHVuaWZvcm0gc2VjdG9ycylcbiIpOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0FNNDAwQjoKLQkJcHJpbnRmKCJBTTI5TFY0MDBCICg0IE1iaXQsIGJvdHRvbSBib290IHNlY3QpXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9BTTQwMFQ6Ci0JCXByaW50ZigiQU0yOUxWNDAwVCAoNCBNYml0LCB0b3AgYm9vdCBzZWN0b3IpXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9BTTgwMEI6Ci0JCXByaW50ZigiQU0yOUxWODAwQiAoOCBNYml0LCBib3R0b20gYm9vdCBzZWN0KVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQU04MDBUOgotCQlwcmludGYoIkFNMjlMVjgwMFQgKDggTWJpdCwgdG9wIGJvb3Qgc2VjdG9yKVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQU0xNjBCOgotCQlwcmludGYoIkFNMjlMVjE2MEIgKDE2IE1iaXQsIGJvdHRvbSBib290IHNlY3QpXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9BTTE2MFQ6Ci0JCXByaW50ZigiQU0yOUxWMTYwVCAoMTYgTWJpdCwgdG9wIGJvb3Qgc2VjdG9yKVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQU0zMjBCOgotCQlwcmludGYoIkFNMjlMVjMyMEIgKDMyIE1iaXQsIGJvdHRvbSBib290IHNlY3QpXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9BTTMyMFQ6Ci0JCXByaW50ZigiQU0yOUxWMzIwVCAoMzIgTWJpdCwgdG9wIGJvb3Qgc2VjdG9yKVxuIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ZigiVW5rbm93biBDaGlwIFR5cGVcbiIpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoaW5mby0+c2l6ZSA+PiAyMCkgewotCQlwcmludGYoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCi0JCQlpbmZvLT5zaXplID4+IDIwLAotCQkJaW5mby0+c2VjdG9yX2NvdW50KTsKLQl9IGVsc2UgewotCQlwcmludGYoIiAgU2l6ZTogJWxkIEtCIGluICVkIFNlY3RvcnNcbiIsCi0JCQlpbmZvLT5zaXplID4+IDEwLAotCQkJaW5mby0+c2VjdG9yX2NvdW50KTsKLQl9Ci0KLQlwdXRzKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKLQkJaWYgKChpICUgNSkgPT0gMCkKLQkJCXB1dHMoIlxuICAgIik7Ci0KLQkJcHJpbnRmKCIgJTA4bFglcyIsCi0JCQlpbmZvLT5zdGFydFtpXSwKLQkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7Ci0JfQotCi0JcHV0YygnXG4nKTsKLQlyZXR1cm47Ci19Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgY29kZSBjYW5ub3QgYmUgcnVuIGZyb20gRkxBU0ghCi0gKi8KLQotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplKHZ1X2xvbmcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQlzaG9ydCBpOwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmNhZGRyOwotCWNoYXIgdmFsdWU7Ci0KLQljYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopYWRkciA7Ci0KLQkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kOiByZWFkIE1hbnVmYWN0dXJlciBJRCAqLwotCi0JZGVidWcoIkJhc2UgYWRkcmVzcyBpczogJThwXG4iLCBjYWRkcik7Ci0KLQljYWRkclsweDA1NTVdID0gMHhBQTsKLQljYWRkclsweDAyQUFdID0gMHg1NTsKLQljYWRkclsweDA1NTVdID0gMHg5MDsKLQotCXZhbHVlID0gY2FkZHJbMF07Ci0KLQlkZWJ1ZygiTWFudWZhY3QgSUQ6ICUwMnhcbiIsIHZhbHVlKTsKLQotCXN3aXRjaCAodmFsdWUpIHsKLQljYXNlIDB4MTogLyogQU1EX01BTlVGQUNUICovCi0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0FNRDsKLQkJYnJlYWs7Ci0JY2FzZSAweDQ6IC8qIEZVSl9NQU5VRkFDVCAqLwotCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9GVUo7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMDsKLQkJaW5mby0+c2l6ZSA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCXZhbHVlID0gY2FkZHJbMV07CQkJLyogZGV2aWNlIElECQkqLwotCi0JZGVidWcoIkRldmljZSBJRDogJTAyeFxuIiwgdmFsdWUpOwotCi0Jc3dpdGNoICh2YWx1ZSkgewotCWNhc2UgQU1EX0lEX0xWMDQwQjoKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU0wNDA7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDg7Ci0JCWluZm8tPnNpemUgPSAweDAwMDgwMDAwOwotCQlicmVhazsJCQkJLyogPT4gNTEyS2IJCSovCi0KLQlkZWZhdWx0OgotCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047Ci0JCXJldHVybiAwOwkJCS8qID0+IG5vIG9yIHVua25vd24gZmxhc2ggKi8KLQl9Ci0KLQlmbGFzaF9nZXRfb2Zmc2V0cygodWxvbmcpYWRkciwgJmZsYXNoX2luZm9bMF0pOwotCi0JLyogY2hlY2sgZm9yIHByb3RlY3RlZCBzZWN0b3JzICovCi0JZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0JCS8qCi0JCSAqIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsCi0JCSAqIChBNyAuLiBBMCkgPSAweDAyCi0JCSAqIEQwID0gMSBpZiBwcm90ZWN0ZWQKLQkJICovCi0JCWNhZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoaW5mby0+c3RhcnRbaV0pOwotCQlpbmZvLT5wcm90ZWN0W2ldID0gY2FkZHJbMl0gJiAxOwotCX0KLQotCS8qCi0JICogUHJldmVudCB3cml0ZXMgdG8gdW5pbml0aWFsaXplZCBGTEFTSC4KLQkgKi8KLQlpZiAoaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfVU5LTk9XTikgewotCQljYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopaW5mby0+c3RhcnRbMF07Ci0JCSpjYWRkciA9IDB4RjA7CS8qIHJlc2V0IGJhbmsgKi8KLQl9Ci0KLQlyZXR1cm4gaW5mby0+c2l6ZTsKLX0KLQotaW50CWZsYXNoX2VyYXNlKGZsYXNoX2luZm9fdCAqaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYWRkciA9Ci0JCSh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGluZm8tPnN0YXJ0WzBdKTsKLQlpbnQgZmxhZywgcHJvdCwgc2VjdCwgbF9zZWN0OwotCXVsb25nIHN0YXJ0LCBub3csIGxhc3Q7Ci0KLQlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKLQkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pCi0JCQlwcmludGYoIi0gbWlzc2luZ1xuIik7Ci0JCWVsc2UKLQkJCXByaW50ZigiLSBubyBzZWN0b3JzIHRvIGVyYXNlXG4iKTsKLQotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHx8Ci0JICAgIChpbmZvLT5mbGFzaF9pZCA+IEZMQVNIX0FNRF9DT01QKSkgewotCQlwcmludGYoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAtIGFib3J0ZWRcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlwcm90ID0gMDsKLQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgKytzZWN0KSB7Ci0JCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKQotCQkJcHJvdCsrOwotCX0KLQotCWlmIChwcm90KSB7Ci0JCXByaW50ZigiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAotCQkJcHJvdCk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmKCJcbiIpOwotCX0KLQotCWxfc2VjdCA9IC0xOwotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCi0JZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwotCi0JYWRkclsweDA1NTVdID0gMHhBQTsKLQlhZGRyWzB4MDJBQV0gPSAweDU1OwotCWFkZHJbMHgwNTU1XSA9IDB4ODA7Ci0JYWRkclsweDA1NTVdID0gMHhBQTsKLQlhZGRyWzB4MDJBQV0gPSAweDU1OwotCi0JLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLwotCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyBzZWN0KyspIHsKLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewkvKiBub3QgcHJvdGVjdGVkICovCi0JCQlhZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoaW5mby0+c3RhcnRbc2VjdF0pOwotCQkJYWRkclswXSA9IDB4MzA7Ci0JCQlsX3NlY3QgPSBzZWN0OwotCQl9Ci0JfQotCi0JLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCi0JaWYgKGZsYWcpCi0JCWVuYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQkvKiB3YWl0IGF0IGxlYXN0IDgwdXMgLSBsZXQncyB3YWl0IDEgbXMgKi8KLQl1ZGVsYXkoMTAwMCk7Ci0KLQkvKgotCSAqIFdlIHdhaXQgZm9yIHRoZSBsYXN0IHRyaWdnZXJlZCBzZWN0b3IKLQkgKi8KLQlpZiAobF9zZWN0IDwgMCkKLQkJZ290byBET05FOwotCi0Jc3RhcnQgPSBnZXRfdGltZXIoMCk7Ci0JbGFzdCAgPSBzdGFydDsKLQlhZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoaW5mby0+c3RhcnRbbF9zZWN0XSk7Ci0KLQl3aGlsZSAoKGFkZHJbMF0gJiAweEZGKSAhPSAweEZGKSB7Ci0KLQkJbm93ID0gZ2V0X3RpbWVyKHN0YXJ0KTsKLQotCQlpZiAobm93ID4gQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUKSB7Ci0JCQlwcmludGYoIlRpbWVvdXRcbiIpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KLQkJaWYgKChub3cgLSBsYXN0KSA+IDEwMDApIHsJLyogZXZlcnkgc2Vjb25kICovCi0JCQlwdXRjKCcuJyk7Ci0JCQlsYXN0ID0gbm93OwotCQl9Ci0JfQotCi1ET05FOgotCS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLwotCWFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKWluZm8tPnN0YXJ0WzBdOwotCi0JYWRkclswXSA9IDB4RjA7CS8qIHJlc2V0IGJhbmsgKi8KLQotCXByaW50ZigiIGRvbmVcbiIpOwotCXJldHVybiAwOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDb3B5IG1lbW9yeSB0byBmbGFzaCwgcmV0dXJuczoKLSAqIDAgLSBPSwotICogMSAtIHdyaXRlIHRpbWVvdXQKLSAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCi0gKi8KLQotaW50IHdyaXRlX2J1ZmYoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCi17Ci0JdWxvbmcgY3AsIHdwLCBkYXRhOwotCWludCBpLCBsLCByYzsKLQotCXdwID0gKGFkZHIgJiB+Myk7CS8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLwotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHN0YXJ0IGJ5dGVzCi0JICovCi0JbCA9IGFkZHIgLSB3cDsKLQotCWlmIChsICE9IDApIHsKLQkJZGF0YSA9IDA7Ci0JCWZvciAoaSA9IDAsIGNwID0gd3A7IGkgPCBsOyArK2ksICsrY3ApCi0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQotCQlmb3IgKDsgaSA8IDQgJiYgY250ID4gMDsgKytpKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0JCQktLWNudDsKLQkJCSsrY3A7Ci0JCX0KLQkJZm9yICg7IGNudCA9PSAwICYmIGkgPCA0OyArK2ksICsrY3ApCi0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQotCQlyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpOwotCi0JCWlmIChyYyAhPSAwKQotCQkJcmV0dXJuIHJjOwotCi0JCXdwICs9IDQ7Ci0JfQotCi0JLyoKLQkgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKLQkgKi8KLQl3aGlsZSAoY250ID49IDQpIHsKLQkJZGF0YSA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCi0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0KLQkJcmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKTsKLQotCQlpZiAocmMgIT0gMCkKLQkJCXJldHVybiByYzsKLQotCQl3cCAgKz0gNDsKLQkJY250IC09IDQ7Ci0JfQotCi0JaWYgKGNudCA9PSAwKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzCi0JICovCi0JZGF0YSA9IDA7Ci0JZm9yIChpID0gMCwgY3AgPSB3cDsgaSA8IDQgJiYgY250ID4gMDsgKytpLCArK2NwKSB7Ci0JCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLQkJLS1jbnQ7Ci0JfQotCWZvciAoOyBpIDwgNDsgKytpLCArK2NwKQotCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQotCXJldHVybiB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogV3JpdGUgYSB3b3JkIHRvIEZsYXNoLCByZXR1cm5zOgotICogMCAtIE9LCi0gKiAxIC0gd3JpdGUgdGltZW91dAotICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqLwotc3RhdGljIGludCB3cml0ZV93b3JkKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpjZGVzdCwgKmNkYXRhOwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmFkZHIgPQotCQkodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShpbmZvLT5zdGFydFswXSk7Ci0JdWxvbmcgc3RhcnQ7Ci0JaW50IGZsYWcsIGNvdW50ID0gNCA7Ci0KLQljZGVzdCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopZGVzdCA7Ci0JY2RhdGEgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSZkYXRhIDsKLQotCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwotCWlmICgoKigodnVfbG9uZyAqKWRlc3QpICYgZGF0YSkgIT0gZGF0YSkKLQkJcmV0dXJuIDI7Ci0KLQl3aGlsZSAoY291bnQtLSkgewotCi0JCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQkJYWRkclsweDA1NTVdID0gMHhBQTsKLQkJYWRkclsweDAyQUFdID0gMHg1NTsKLQkJYWRkclsweDA1NTVdID0gMHhBMDsKLQotCQkqY2Rlc3QgPSAqY2RhdGE7Ci0KLQkJLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCi0JCWlmIChmbGFnKQotCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKLQotCQkvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCi0JCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOwotCQl3aGlsZSAoKCpjZGVzdCBeICpjZGF0YSkgJiAweDgwKSB7Ci0JCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVCkKLQkJCQlyZXR1cm4gMTsKLQkJfQotCi0JCWNkYXRhKysgOwotCQljZGVzdCsrIDsKLQl9Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9nZW5pZXR2L2dlbmlldHYuYyBiL2JvYXJkL2dlbmlldHYvZ2VuaWV0di5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTAxNWVhLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2dlbmlldHYvZ2VuaWV0di5jCisrKyAvZGV2L251bGwKQEAgLTEsMzYwICswLDAgQEAKLS8qCi0gKiBnZW5pZXR2L2dlbmlldHYuYwotICoKLSAqIFRoZSBHRU5JRVRWIGlzIHVzaW5nIHRoZSBmb2xsb3dpbmcgcGh5c2ljYWwgbWVtb3J5bWFwIChjb3BpZWQgZnJvbQotICogdGhlIEZBRFMgY29uZmlndXJhdGlvbik6Ci0gKgotICogZmYwMjAwMDAgLT4gZmYwMmZmZmYgOiBwY21jaWEKLSAqIGZmMDEwMDAwIC0+IGZmMDFmZmZmIDogQkNTUiAgICAgICBjb25uZWN0ZWQgdG8gQ1MxLCBzZXR1cCBieSA4eHhST00KLSAqIGZmMDAwMDAwIC0+IGZmMDBmZmZmIDogSU1BUCAgICAgICBpbnRlcm5hbCBpbiB0aGUgY3B1Ci0gKiAwMjgwMDAwMCAtPiAwMjg3ZmZmZiA6IGZsYXNoICAgICAgY29ubmVjdGVkIHRvIENTMAotICogMDAwMDAwMDAgLT4gbm5ubm5ubm4gOiBzZHJhbSAgICAgIHNldHVwIGJ5IFUtQm9vdAotICoKLSAqIENTIHBpbnMgYXJlIGNvbm5lY3RlZCBhcyBmb2xsb3dzOgotICoKLSAqIENTMCAtNTEyS2IgYm9vdCBmbGFzaAotICogQ1MxIC0gU0RSQU0gIzEKLSAqIENTMiAtIFNEUkFNICMyCi0gKiBDUzMgLSBGbGFzaCAjMQotICogQ1M0IC0gRmxhc2ggIzIKLSAqIENTNSAtIExPTiAoaWYgcHJlc2VudCkKLSAqIENTNiAtIFBDTUNJQSAjMQotICogQ1M3IC0gUENNQ0lBICMyCi0gKgotICogUG9ydHMgYXJlIGNvbmZpZ3VyZWQgYXMgZm9sbG93czoKLSAqCi0gKiBQQTcgLSBTRFJBTSBiYW5rcyBlbmFibGUKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8bXBjOHh4Lmg+Ci0KLSNkZWZpbmUgQ09ORklHX1NZU19QQTcJCTB4MDEwMAotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBsb25nIGludCBkcmFtX3NpemUgKGxvbmcgaW50LCBsb25nIGludCAqLCBsb25nIGludCk7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2RlZmluZQlfTk9UX1VTRURfCTB4RkZGRkZGRkYKLQotY29uc3QgdWludCBzZHJhbV90YWJsZVtdID0gewotCS8qCi0JICogU2luZ2xlIFJlYWQuIChPZmZzZXQgMCBpbiBVUE1CIFJBTSkKLQkgKi8KLQkweDFGMERGQzA0LCAweEVFQUZCQzA0LCAweDExQUY3QzA0LCAweEVGQkVFQzAwLAotCTB4MUZGRERDNDcsCQkvKiBsYXN0ICovCi0JLyoKLQkgKiBTRFJBTSBJbml0aWFsaXphdGlvbiAob2Zmc2V0IDUgaW4gVVBNQiBSQU0pCi0JICoKLQkgKiBUaGlzIGlzIG5vIFVQTSBlbnRyeSBwb2ludC4gVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIHVzZXMKLQkgKiB0aGUgcmVtYWluaW5nIHNwYWNlIHRvIGVzdGFibGlzaCBhbiBpbml0aWFsaXphdGlvbgotCSAqIHNlcXVlbmNlLCB3aGljaCBpcyBleGVjdXRlZCBieSBhIFJVTiBjb21tYW5kLgotCSAqCi0JICovCi0JMHgxRkZEREMzNCwgMHhFRkVFQUMzNCwgMHgxRkJENUMzNSwJLyogbGFzdCAqLwotCS8qCi0JICogQnVyc3QgUmVhZC4gKE9mZnNldCA4IGluIFVQTUIgUkFNKQotCSAqLwotCTB4MUYwREZDMDQsIDB4RUVBRkJDMDQsIDB4MTBBRjdDMDQsIDB4RjBBRkZDMDAsCi0JMHhGMEFGRkMwMCwgMHhGMUFGRkMwMCwgMHhFRkJFRUMwMCwgMHgxRkZEREM0NywJLyogbGFzdCAqLwotCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQkvKgotCSAqIFNpbmdsZSBXcml0ZS4gKE9mZnNldCAxOCBpbiBVUE1CIFJBTSkKLQkgKi8KLQkweDFGMkRGQzA0LCAweEVFQUZBQzAwLCAweDAxQkU0QzA0LCAweDFGRkREQzQ3LAkvKiBsYXN0ICovCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQkvKgotCSAqIEJ1cnN0IFdyaXRlLiAoT2Zmc2V0IDIwIGluIFVQTUIgUkFNKQotCSAqLwotCTB4MUYwREZDMDQsIDB4RUVBRkFDMDAsIDB4MTBBRjVDMDAsIDB4RjBBRkZDMDAsCi0JMHhGMEFGRkMwMCwgMHhFMUJFRUMwNCwgMHgxRkZEREM0NywJLyogbGFzdCAqLwotCV9OT1RfVVNFRF8sCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAotCS8qCi0JICogUmVmcmVzaCAgKE9mZnNldCAzMCBpbiBVUE1CIFJBTSkKLQkgKi8KLQkweDFGRkQ3Qzg0LCAweEZGRkZGQzA0LCAweEZGRkZGQzA0LCAweEZGRkZGQzA0LAotCTB4RkZGRkZDODQsIDB4RkZGRkZDMDcsCS8qIGxhc3QgKi8KLQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLAotCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCi0JLyoKLQkgKiBFeGNlcHRpb24uIChPZmZzZXQgM2MgaW4gVVBNQiBSQU0pCi0JICovCi0JMHg3RkZGRkMwNywJCS8qIGxhc3QgKi8KLQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0KLS8qCi0gKiBDaGVjayBCb2FyZCBJZGVudGl0eQotICovCi0KLWludCBjaGVja2JvYXJkICh2b2lkKQotewotCXB1dHMgKCJCb2FyZDogR2VuaWVUVlxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZCBQcmludFN0YXRlICh2b2lkKQotewotCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKikgQ09ORklHX1NZU19JTU1SOwotCXZvbGF0aWxlIG1lbWN0bDh4eF90ICptZW1jdGwgPSAmaW0tPmltX21lbWN0bDsKLQotCXByaW50ZiAoIlxuMCAtIEZMQVNIOiBCPSUwOHggTz0lMDh4IiwgbWVtY3RsLT5tZW1jX2JyMCwKLQkJbWVtY3RsLT5tZW1jX29yMCk7Ci0JcHJpbnRmICgiXG4xIC0gU0RSQU06IEI9JTA4eCBPPSUwOHgiLCBtZW1jdGwtPm1lbWNfYnIxLAotCQltZW1jdGwtPm1lbWNfb3IxKTsKLQlwcmludGYgKCJcbjIgLSBTRFJBTTogQj0lMDh4IE89JTA4eCIsIG1lbWN0bC0+bWVtY19icjIsCi0JCW1lbWN0bC0+bWVtY19vcjIpOwotfQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotcGh5c19zaXplX3QgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQotewotCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKikgQ09ORklHX1NZU19JTU1SOwotCXZvbGF0aWxlIG1lbWN0bDh4eF90ICptZW1jdGwgPSAmaW0tPmltX21lbWN0bDsKLQlsb25nIGludCBzaXplX2IwLCBzaXplX2IxLCBzaXplODsKLQotCS8qIEVuYWJsZSBTRFJBTSAqLwotCi0JLyogQ29uZmlndXJpbmcgUEE3IGZvciBnZW5lcmFsIHB1cnBvdXNlIG91dHB1dCBwaW4gKi8KLQlpbS0+aW1faW9wb3J0LmlvcF9wYXBhciAmPSB+Q09ORklHX1NZU19QQTc7CS8qIDAgPSBnZW5lcmFsIHB1cnBvdXNlICovCi0JaW0tPmltX2lvcG9ydC5pb3BfcGFkaXIgfD0gQ09ORklHX1NZU19QQTc7CS8qIDEgPSBvdXRwdXQgKi8KLQotCS8qIEVuYWJsZSBTRFJBTSAtIFBBNyA9IDEgKi8KLQlpbS0+aW1faW9wb3J0LmlvcF9wYWRhdCB8PSBDT05GSUdfU1lTX1BBNzsJLyogdmFsdWUgb2YgUEE3ICovCi0KLQkvKgotCSAqIFByZWxpbWluYXJ5IHByZXNjYWxlciBmb3IgcmVmcmVzaCAoZGVwZW5kcyBvbiBudW1iZXIgb2YKLQkgKiBiYW5rcyk6IFRoaXMgdmFsdWUgaXMgc2VsZWN0ZWQgZm9yIGZvdXIgY3ljbGVzIGV2ZXJ5IDYyLjQgdXMKLQkgKiB3aXRoIHR3byBTRFJBTSBiYW5rcyBvciBmb3VyIGN5Y2xlcyBldmVyeSAzMS4yIHVzIHdpdGggb25lCi0JICogYmFuay4gSXQgd2lsbCBiZSBhZGp1c3RlZCBhZnRlciBtZW1vcnkgc2l6aW5nLgotCSAqLwotCW1lbWN0bC0+bWVtY19tcHRwciA9IENPTkZJR19TWVNfTVBUUFJfMkJLXzRLOwotCi0JbWVtY3RsLT5tZW1jX21ibXIgPSBDT05GSUdfU1lTX01CTVJfOENPTDsKLQotCXVwbWNvbmZpZyAoVVBNQiwgKHVpbnQgKikgc2RyYW1fdGFibGUsCi0JCSAgIHNpemVvZiAoc2RyYW1fdGFibGUpIC8gc2l6ZW9mICh1aW50KSk7Ci0KLQkvKgotCSAqIE1hcCBjb250cm9sbGVyIGJhbmtzIDEgYW5kIDIgdG8gdGhlIFNEUkFNIGJhbmtzIDEgYW5kIDIgYXQKLQkgKiBwcmVsaW1pbmFyeSBhZGRyZXNzZXMgLSB0aGVzZSBoYXZlIHRvIGJlIG1vZGlmaWVkIGFmdGVyIHRoZQotCSAqIFNEUkFNIHNpemUgaGFzIGJlZW4gZGV0ZXJtaW5lZC4KLQkgKi8KLQotCW1lbWN0bC0+bWVtY19vcjEgPSAweEYwMDAwMDAwIHwgQ09ORklHX1NZU19PUl9USU1JTkdfU0RSQU07Ci0JbWVtY3RsLT5tZW1jX2JyMSA9Ci0JCSgoU0RSQU1fQkFTRTFfUFJFTElNICYgQlJfQkFfTVNLKSB8IEJSX01TX1VQTUIgfCBCUl9WKTsKLQotCW1lbWN0bC0+bWVtY19vcjIgPSAweEYwMDAwMDAwIHwgQ09ORklHX1NZU19PUl9USU1JTkdfU0RSQU07Ci0JbWVtY3RsLT5tZW1jX2JyMiA9Ci0JCSgoU0RSQU1fQkFTRTJfUFJFTElNICYgQlJfQkFfTVNLKSB8IEJSX01TX1VQTUIgfCBCUl9WKTsKLQotCS8qIHBlcmZvcm0gU0RSQU0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgKi8KLQltZW1jdGwtPm1lbWNfbWFyID0gMHgwMDAwMDA4ODsKLQotCW1lbWN0bC0+bWVtY19tY3IgPSAweDgwODAyMTA1OwkvKiBTRFJBTSBiYW5rIDAgKi8KLQotCW1lbWN0bC0+bWVtY19tY3IgPSAweDgwODA0MTA1OwkvKiBTRFJBTSBiYW5rIDEgKi8KLQotCS8qIEV4ZWN1dGUgcmVmcmVzaCA4IHRpbWVzICovCi0JbWVtY3RsLT5tZW1jX21ibXIgPSAoQ09ORklHX1NZU19NQk1SXzhDT0wgJiB+TUJNUl9UTEZCX01TSykgfCBNQk1SX1RMRkJfOFg7Ci0KLQltZW1jdGwtPm1lbWNfbWNyID0gMHg4MDgwMjEzMDsJLyogU0RSQU0gYmFuayAwIC0gZXhlY3V0ZSB0d2ljZSAqLwotCi0JbWVtY3RsLT5tZW1jX21jciA9IDB4ODA4MDQxMzA7CS8qIFNEUkFNIGJhbmsgMSAtIGV4ZWN1dGUgdHdpY2UgKi8KLQotCS8qIEV4ZWN1dGUgcmVmcmVzaCA0IHRpbWVzICovCi0JbWVtY3RsLT5tZW1jX21ibXIgPSBDT05GSUdfU1lTX01CTVJfOENPTDsKLQotCS8qCi0JICogQ2hlY2sgQmFuayAwIE1lbW9yeSBTaXplIGZvciByZS1jb25maWd1cmF0aW9uCi0JICoKLQkgKiB0cnkgOCBjb2x1bW4gbW9kZQotCSAqLwotCi0jaWYgMAotCVByaW50U3RhdGUgKCk7Ci0jZW5kaWYKLS8qICAgIHByaW50ZiAoIlxuQ2hlY2tpbmcgYmFuazEuLi4iKTsgKi8KLQlzaXplOCA9IGRyYW1fc2l6ZSAoQ09ORklHX1NZU19NQk1SXzhDT0wsIChsb25nICopIFNEUkFNX0JBU0UxX1BSRUxJTSwKLQkJCSAgIFNEUkFNX01BWF9TSVpFKTsKLQotCXNpemVfYjAgPSBzaXplODsKLQotLyogICAgcHJpbnRmICgiXG5DaGVja2luZyBiYW5rMi4uLiIpOyAqLwotCXNpemVfYjEgPQotCQlkcmFtX3NpemUgKG1lbWN0bC0+bWVtY19tYm1yLCAobG9uZyAqKSBTRFJBTV9CQVNFMl9QUkVMSU0sCi0JCQkgICBTRFJBTV9NQVhfU0laRSk7Ci0KLQkvKgotCSAqIEZpbmFsIG1hcHBpbmc6IG1hcCBiaWdnZXIgYmFuayBmaXJzdAotCSAqLwotCi0JbWVtY3RsLT5tZW1jX29yMSA9ICgoLXNpemVfYjApICYgMHhGRkZGMDAwMCkgfCBDT05GSUdfU1lTX09SX1RJTUlOR19TRFJBTTsKLQltZW1jdGwtPm1lbWNfYnIxID0gKENPTkZJR19TWVNfU0RSQU1fQkFTRSAmIEJSX0JBX01TSykgfCBCUl9NU19VUE1CIHwgQlJfVjsKLQotCWlmIChzaXplX2IxID4gMCkgewotCQkvKgotCQkgKiBQb3NpdGlvbiBCYW5rIDEgaW1tZWRpYXRlbHkgYWJvdmUgQmFuayAwCi0JCSAqLwotCQltZW1jdGwtPm1lbWNfb3IyID0KLQkJCSgoLXNpemVfYjEpICYgMHhGRkZGMDAwMCkgfCBDT05GSUdfU1lTX09SX1RJTUlOR19TRFJBTTsKLQkJbWVtY3RsLT5tZW1jX2JyMiA9Ci0JCQkoKENPTkZJR19TWVNfU0RSQU1fQkFTRSAmIEJSX0JBX01TSykgfCBCUl9NU19VUE1CIHwgQlJfVikgKwotCQkJKHNpemVfYjAgJiBCUl9CQV9NU0spOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIE5vIGJhbmsgMQotCQkgKgotCQkgKiBpbnZhbGlkYXRlIGJhbmsKLQkJICovCi0JCW1lbWN0bC0+bWVtY19icjIgPSAwOwotCQkvKiBhZGp1c3QgcmVmcmVzaCByYXRlIGRlcGVuZGluZyBvbiBTRFJBTSB0eXBlLCBvbmUgYmFuayAqLwotCQltZW1jdGwtPm1lbWNfbXB0cHIgPSBDT05GSUdfU1lTX01QVFBSXzFCS180SzsKLQl9Ci0KLQkvKiBJZiBubyBtZW1vcnkgZGV0ZWN0ZWQsIGRpc2FibGUgU0RSQU0gKi8KLQlpZiAoKHNpemVfYjAgKyBzaXplX2IxKSA9PSAwKSB7Ci0JCXByaW50ZiAoImRpc2FibGluZyBTRFJBTSFcbiIpOwotCQkvKiBEaXNhYmxlIFNEUkFNIC0gUEE3ID0gMSAqLwotCQlpbS0+aW1faW9wb3J0LmlvcF9wYWRhdCAmPSB+Q09ORklHX1NZU19QQTc7CS8qIHZhbHVlIG9mIFBBNyAqLwotCX0KLS8qCWVsc2UgKi8KLS8qICAgIHByaW50ZigiZG9uZSEgKCUwOGx4KVxuIiwgc2l6ZV9iMCArIHNpemVfYjEpOyAqLwotCi0jaWYgMAotCVByaW50U3RhdGUgKCk7Ci0jZW5kaWYKLQlyZXR1cm4gKHNpemVfYjAgKyBzaXplX2IxKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogQ2hlY2sgbWVtb3J5IHJhbmdlIGZvciB2YWxpZCBSQU0uIEEgc2ltcGxlIG1lbW9yeSB0ZXN0IGRldGVybWluZXMKLSAqIHRoZSBhY3R1YWxseSBhdmFpbGFibGUgUkFNIHNpemUgYmV0d2VlbiBhZGRyZXNzZXMgYGJhc2UnIGFuZAotICogYGJhc2UgKyBtYXhzaXplJy4gU29tZSAobm90IGFsbCkgaGFyZHdhcmUgZXJyb3JzIGFyZSBkZXRlY3RlZDoKLSAqIC0gc2hvcnQgYmV0d2VlbiBhZGRyZXNzIGxpbmVzCi0gKiAtIHNob3J0IGJldHdlZW4gZGF0YSBsaW5lcwotICovCi0KLXN0YXRpYyBsb25nIGludCBkcmFtX3NpemUgKGxvbmcgaW50IG1ibXJfdmFsdWUsIGxvbmcgaW50ICpiYXNlLAotCQkJICAgbG9uZyBpbnQgbWF4c2l6ZSkKLXsKLQlsb25nIHNpemU7Ci0KLQkvKm1lbWN0bC0+bWVtY19tYm1yID0gbWJtcl92YWx1ZTsgKi8KLQotCXNpemUgPSBnZXRfcmFtX3NpemUgKGJhc2UsIG1heHNpemUpOwotCi0JaWYgKHNpemUpIHsKLS8qICAgICAgcHJpbnRmKCIoJTA4bHgpIiwgc2l6ZSk7ICovCi0JfSBlbHNlIHsKLQkJcHJpbnRmICgiKDApIik7Ci0JfQotCi0JcmV0dXJuIChzaXplKTsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0NNRF9QQ01DSUEpCi0KLSNpZmRlZglDT05GSUdfU1lTX1BDTUNJQV9NRU1fQUREUgotdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcGNtY2lhX21lbSA9ICh1bnNpZ25lZCBjaGFyICopIENPTkZJR19TWVNfUENNQ0lBX01FTV9BRERSOwotI2VuZGlmCi0KLWludCBwY21jaWFfaW5pdCAodm9pZCkKLXsKLQl2b2xhdGlsZSBwY21jb25mOHh4X3QgKnBjbXA7Ci0JdWludCB2LCBzbG90YSwgc2xvdGI7Ci0KLQkvKgotCSAqKiBFbmFibGUgdGhlIFBDTUNJQSBmb3IgYSBGbGFzaCBjYXJkLgotCSAqLwotCXBjbXAgPSAocGNtY29uZjh4eF90ICopICgmKCgoaW1tYXBfdCAqKSBDT05GSUdfU1lTX0lNTVIpLT5pbV9wY21jaWEpKTsKLQotI2lmIDAKLQlwY21wLT5wY21jX3BicjAgPSBDT05GSUdfU1lTX1BDTUNJQV9NRU1fQUREUjsKLQlwY21wLT5wY21jX3BvcjAgPSAweGMwMGZmMDVkOwotI2VuZGlmCi0KLQkvKiBTZXQgYWxsIHNsb3RzIHRvIHplcm8gYnkgZGVmYXVsdC4gKi8KLQlwY21wLT5wY21jX3BnY3JhID0gMDsKLQlwY21wLT5wY21jX3BnY3JiID0gMDsKLSNpZmRlZiBQQ01DSUFfU0xPVF9BCi0JcGNtcC0+cGNtY19wZ2NyYSA9IDB4NDA7Ci0jZW5kaWYKLSNpZmRlZiBQQ01DSUFfU0xPVF9CCi0JcGNtcC0+cGNtY19wZ2NyYiA9IDB4NDA7Ci0jZW5kaWYKLQotCS8qIENoZWNrIGlmIGFueSBQQ01DSUEgY2FyZCBpcyBsdWdlZCBpbi4gKi8KLQlzbG90YSA9IChwY21wLT5wY21jX3BpcHIgJiAweDE4MDAwMDAwKSA9PSAwOwotCXNsb3RiID0gKHBjbXAtPnBjbWNfcGlwciAmIDB4MDAwMDE4MDApID09IDA7Ci0KLQlpZiAoIShzbG90YSB8fCBzbG90YikpIHsKLQkJcHJpbnRmICgiTm8gY2FyZCBwcmVzZW50XG4iKTsKLSNpZmRlZiBQQ01DSUFfU0xPVF9BCi0JCXBjbXAtPnBjbWNfcGdjcmEgPSAwOwotI2VuZGlmCi0jaWZkZWYgUENNQ0lBX1NMT1RfQgotCQlwY21wLT5wY21jX3BnY3JiID0gMDsKLSNlbmRpZgotCQlyZXR1cm4gLTE7Ci0JfSBlbHNlCi0JCXByaW50ZiAoIlVua25vd24gY2FyZCAoIik7Ci0KLQl2ID0gMDsKLQotCXN3aXRjaCAoKHBjbXAtPnBjbWNfcGlwciA+PiAxNCkgJiAzKSB7Ci0JY2FzZSAweDAwOgotCQlwcmludGYgKCI1ViIpOwotCQl2ID0gNTsKLQkJYnJlYWs7Ci0JY2FzZSAweDAxOgotCQlwcmludGYgKCI1ViBhbmQgM1YiKTsKLQkJdiA9IDM7Ci0JCWJyZWFrOwotCWNhc2UgMHgwMzoKLQkJcHJpbnRmICgiNVYsIDNWIGFuZCB4LnhWIik7Ci0JCXYgPSAzOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKHYpIHsKLQljYXNlIDM6Ci0JCXByaW50ZiAoIjsgdXNpbmcgM1YiKTsKLQkJLyogRW5hYmxlIDMgdm9sdCBWY2MuICovCi0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwcmludGYgKCI7IHVua25vd24gdm9sdGFnZSIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXByaW50ZiAoIilcbiIpOwotCS8qIGRpc2FibGUgcGNtY2lhIHJlc2V0IGFmdGVyIGEgd2hpbGUgKi8KLQotCXVkZWxheSAoMjApOwotCi0JcGNtcC0+cGNtY19wZ2NyYiA9IDA7Ci0KLQkvKiBJZiB5b3UgdXNpbmcgYSByZWFsIGhkIHlvdSBzaG91bGQgZ2l2ZSBhIHNob3J0Ci0JICogc3Bpbi11cCB0aW1lLiAqLwotI2lmZGVmIENPTkZJR19ESVNLX1NQSU5VUF9USU1FCi0JdWRlbGF5IChDT05GSUdfRElTS19TUElOVVBfVElNRSk7Ci0jZW5kaWYKLQotCXJldHVybiAwOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9nZW5pZXR2L3UtYm9vdC5sZHMgYi9ib2FyZC9nZW5pZXR2L3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwYWI3MDIuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZ2VuaWV0di91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAxMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotCi1TRUNUSU9OUwotewotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLwotICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLwotCi0gICAgYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvc3RhcnQubwkoLnRleHQqKQotICAgIGFyY2gvcG93ZXJwYy9jcHUvbXBjOHh4L3RyYXBzLm8JKC50ZXh0KikKLSAgICBsaWIvYnVpbHQtaW4ubwkJCSgudGV4dCopCi0gICAgbmV0L2J1aWx0LWluLm8JCQkoLnRleHQqKQotICAgIGFyY2gvcG93ZXJwYy9jcHUvbXBjOHh4L2J1aWx0LWluLm8JKC50ZXh0KikKLSAgICBib2FyZC9nZW5pZXR2L2J1aWx0LWluLm8JCSgudGV4dCopCi0gICAgYXJjaC9wb3dlcnBjL2xpYi9idWlsdC1pbi5vCQkoLnRleHQqKQotICAgICooLnRleHQuZG9fbG9hZF9zZXJpYWwqKQotICAgICooLnRleHQuZG9fbWVtXyopCi0gICAgKigudGV4dC5kb19ib290bSopCi0KLSAgICAuID0gZW52X29mZnNldDsKLSAgICBjb21tb24vZW52X2VtYmVkZGVkLm8JCSgudGV4dCopCi0KLSAgICAqKC50ZXh0KikKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwRkZGKSAmIDB4RkZGRkYwMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgIEtFRVAoKiguZ290MikpCi0gICAgS0VFUCgqKC5nb3QpKQotICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOwotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgIEtFRVAoKiguZml4dXApKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKChfR0xPQkFMX09GRlNFVF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+IDIpIC0gMTsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKikKLSAgICAqKC5zZGF0YSopCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotCi0gIC4gPSBBTElHTig0KTsKLSAgLnVfYm9vdF9saXN0IDogewotCUtFRVAoKihTT1JUKC51X2Jvb3RfbGlzdCopKSk7Ci0gIH0KLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLmJzcyopCi0gICAqKC5zYnNzKikKLSAgICooQ09NTU9OKQotICB9Ci0gIC4gPSBBTElHTigyNTYgKiAxMDI0KTsKLSAgLnBwY2Vudgk6Ci0gIHsKLSAgICBjb21tb24vZW52X2VtYmVkZGVkLm8gKC5wcGNlbnYpCi0gIH0KLSAgLiA9IEFMSUdOKDQpOwotICBfX2Jzc19lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9nZW5pZXR2L3UtYm9vdC5sZHMuZGVidWcgYi9ib2FyZC9nZW5pZXR2L3UtYm9vdC5sZHMuZGVidWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOGNkM2EuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZ2VuaWV0di91LWJvb3QubGRzLmRlYnVnCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBhcmNoL3Bvd2VycGMvY3B1L21wYzh4eC9zdGFydC5vCSgudGV4dCkKLSAgICBjb21tb24vZGxtYWxsb2MubwkoLnRleHQpCi0gICAgYXJjaC9wb3dlcnBjL2xpYi9wcGNzdHJpbmcubwkoLnRleHQpCi0gICAgbGliL3ZzcHJpbnRmLm8JKC50ZXh0KQotICAgIGxpYi9jcmMzMi5vCQkoLnRleHQpCi0gICAgbGliL3psaWIubwkJKC50ZXh0KQotCi0gICAgLiA9IGVudl9vZmZzZXQ7Ci0gICAgY29tbW9uL2Vudl9lbWJlZGRlZC5vKC50ZXh0KQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLnJvZGF0YSkKLSAgICAqKC5yb2RhdGExKQotICAgICooLnJvZGF0YS5zdHIxLjQpCi0gICAgKiguZWhfZnJhbWUpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwRkZGKSAmIDB4RkZGRkYwMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotCi0gIC4gPSBBTElHTig0KTsKLSAgLnVfYm9vdF9saXN0IDogewotCUtFRVAoKihTT1JUKC51X2Jvb3RfbGlzdCopKSk7Ci0gIH0KLQotCi0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICB9Ci0gIC4gPSBBTElHTigyNTYgKiAxMDI0KTsKLSAgLnBwY2Vudgk6Ci0gIHsKLSAgICBjb21tb24vZW52X2VtYmVkZGVkLm8gKC5wcGNlbnYpCi0gIH0KLSAgX19ic3NfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvaGlkZGVuX2RyYWdvbi9lYXJseV9pbml0LlMgYi9ib2FyZC9oaWRkZW5fZHJhZ29uL2Vhcmx5X2luaXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE5YjkyNC4uMDAwMDAwMAotLS0gYS9ib2FyZC9oaWRkZW5fZHJhZ29uL2Vhcmx5X2luaXQuUworKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBUaG9tYXMgS29lbGxlciwgdGtvZWxsZXJAZ214Lm5ldAotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpZm5kZWYJX19BU1NFTUJMWV9fCi0jZGVmaW5lIF9fQVNTRU1CTFlfXwkxCi0jZW5kaWYKLQotI2luY2x1ZGUgPGFzbS1vZmZzZXRzLmg+Ci0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPG1wYzgyNHguaD4KLSNpbmNsdWRlIDxwcGNfYXNtLnRtcGw+Ci0KLSNpZiBkZWZpbmVkKFVTRV9ESU5LMzIpCi0gIC8qIFdlIGFyZSBydW5uaW5nIGZyb20gUkFNLCBzbyBkbyBub3QgY2xlYXIgdGhlIE1DQ1IxX01FTUdPIGJpdCEgKi8KLSAgI2RlZmluZSBNQ0NSMVZBTCAoKENPTkZJR19TWVNfUk9NTkFMIDw8IE1DQ1IxX1JPTU5BTF9TSElGVCkgfCAoQ09ORklHX1NZU19ST01GQUwgPDwgTUNDUjFfUk9NRkFMX1NISUZUKSB8IE1DQ1IxX01FTUdPKQotI2Vsc2UKLSAgI2RlZmluZSBNQ0NSMVZBTCAoQ09ORklHX1NZU19ST01OQUwgPDwgTUNDUjFfUk9NTkFMX1NISUZUKSB8IChDT05GSUdfU1lTX1JPTUZBTCA8PCBNQ0NSMV9ST01GQUxfU0hJRlQpCi0jZW5kaWYKLQotCS50ZXh0Ci0KLQkvKiBWYWx1ZXMgdG8gcHJvZ3JhbSBpbnRvIG1lbW9yeSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLwotdGJsOgkubG9uZwlNQ0NSMSwgTUNDUjFWQUwKLQkubG9uZwlNQ0NSMiwgQ09ORklHX1NZU19SRUZJTlQgPDwgTUNDUjJfUkVGSU5UX1NISUZUCi0JLmxvbmcJTUNDUjMKLQkubG9uZwkoKChDT05GSUdfU1lTX0JTVE9QUkUgJiAweDAwMDAwMGYwKSA+PiA0KSA8PCBNQ0NSM19CU1RPUFJFMlRPNV9TSElGVCkgfCBcCi0JCShDT05GSUdfU1lTX1JFRlJFQyA8PCBNQ0NSM19SRUZSRUNfU0hJRlQpIHwgXAotCQkoQ09ORklHX1NZU19SRExBVCAgPDwgTUNDUjNfUkRMQVRfU0hJRlQpCi0JLmxvbmcJTUNDUjQKLQkubG9uZwkoQ09ORklHX1NZU19QUkVUT0FDVCA8PCBNQ0NSNF9QUkVUT0FDVF9TSElGVCkgfCAoQ09ORklHX1NZU19BQ1RUT1BSRSA8PCBNQ0NSNF9BQ1RUT1BSRV9TSElGVCkgfCBcCi0JCShDT05GSUdfU1lTX1JFR0lTVEVSRF9UWVBFX0JVRkZFUiA8PCAyMCkgfCBcCi0JCSgoKENPTkZJR19TWVNfQlNUT1BSRSAmIDB4MDAwMDAzMDApID4+IDgpIDw8IE1DQ1I0X0JTVE9QUkUwVE8xX1NISUZUICkgfCBcCi0JCSgoQ09ORklHX1NZU19TRE1PREVfQ0FTX0xBVCA8PCA0KSB8IChDT05GSUdfU1lTX1NETU9ERV9XUkFQIDw8IDMpIHwgXAotCQkoQ09ORklHX1NZU19TRE1PREVfQlVSU1RMRU4pIDw8IE1DQ1I0X1NETU9ERV9TSElGVCkgfCBcCi0JCShDT05GSUdfU1lTX0FDVFRPUlcgPDwgTUNDUjRfQUNUVE9SV19TSElGVCkgfCBcCi0JCSgoQ09ORklHX1NZU19CU1RPUFJFICYgMHgwMDAwMDAwZikgPDwgTUNDUjRfQlNUT1BSRTZUTzlfU0hJRlQgKQotCS5sb25nCU1TQVIxCi0JLmxvbmcJKCgoQ09ORklHX1NZU19CQU5LMF9TVEFSVCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8ICAwKSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LMV9TVEFSVCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8ICA4KSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LMl9TVEFSVCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8IDE2KSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LM19TVEFSVCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8IDI0KQotCS5sb25nCUVNU0FSMQotCS5sb25nCSgoKENPTkZJR19TWVNfQkFOSzBfU1RBUlQgJiBNSUNSX0VBRERSX01BU0spID4+IE1JQ1JfRUFERFJfU0hJRlQpIDw8ICAwKSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LMV9TVEFSVCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgIDgpIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTksyX1NUQVJUICYgTUlDUl9FQUREUl9NQVNLKSA+PiBNSUNSX0VBRERSX1NISUZUKSA8PCAxNikgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzNfU1RBUlQgJiBNSUNSX0VBRERSX01BU0spID4+IE1JQ1JfRUFERFJfU0hJRlQpIDw8IDI0KQotCS5sb25nCU1TQVIyCi0JLmxvbmcJKCgoQ09ORklHX1NZU19CQU5LNF9TVEFSVCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8ICAwKSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LNV9TVEFSVCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8ICA4KSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LNl9TVEFSVCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8IDE2KSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LN19TVEFSVCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8IDI0KQotCS5sb25nCUVNU0FSMgotCS5sb25nCSgoKENPTkZJR19TWVNfQkFOSzRfU1RBUlQgJiBNSUNSX0VBRERSX01BU0spID4+IE1JQ1JfRUFERFJfU0hJRlQpIDw8ICAwKSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LNV9TVEFSVCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgIDgpIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTks2X1NUQVJUICYgTUlDUl9FQUREUl9NQVNLKSA+PiBNSUNSX0VBRERSX1NISUZUKSA8PCAxNikgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzdfU1RBUlQgJiBNSUNSX0VBRERSX01BU0spID4+IE1JQ1JfRUFERFJfU0hJRlQpIDw8IDI0KQotCS5sb25nCU1FQVIxCi0JLmxvbmcJKCgoQ09ORklHX1NZU19CQU5LMF9FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAgMCkgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzFfRU5EICYgTUlDUl9BRERSX01BU0spID4+IE1JQ1JfQUREUl9TSElGVCkgPDwgIDgpIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTksyX0VORCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8IDE2KSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LM19FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAyNCkKLQkubG9uZwlFTUVBUjEKLQkubG9uZwkoKChDT05GSUdfU1lTX0JBTkswX0VORCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgIDApIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTksxX0VORCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgIDgpIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTksyX0VORCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgMTYpIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTkszX0VORCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgMjQpCi0JLmxvbmcJTUVBUjIKLQkubG9uZwkoKChDT05GSUdfU1lTX0JBTks0X0VORCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8ICAwKSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LNV9FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAgOCkgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzZfRU5EICYgTUlDUl9BRERSX01BU0spID4+IE1JQ1JfQUREUl9TSElGVCkgPDwgMTYpIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTks3X0VORCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8IDI0KQotCS5sb25nCUVNRUFSMgotCS5sb25nCSgoKENPTkZJR19TWVNfQkFOSzRfRU5EICYgTUlDUl9FQUREUl9NQVNLKSA+PiBNSUNSX0VBRERSX1NISUZUKSA8PCAgMCkgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzVfRU5EICYgTUlDUl9FQUREUl9NQVNLKSA+PiBNSUNSX0VBRERSX1NISUZUKSA8PCAgOCkgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzZfRU5EICYgTUlDUl9FQUREUl9NQVNLKSA+PiBNSUNSX0VBRERSX1NISUZUKSA8PCAxNikgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzdfRU5EICYgTUlDUl9FQUREUl9NQVNLKSA+PiBNSUNSX0VBRERSX1NISUZUKSA8PCAyNCkKLQkubG9uZwkwCi0KLQotCS8qCi0JICogRWFybHkgQ1BVIGluaXRpYWxpemF0aW9uLiBTZXQgdXAgbWVtb3J5IGNvbnRyb2xsZXIsIHNvIHdlIGNhbiBhY2Nlc3MgYW55IFJBTSBhdCBhbGwuIFRoaXMKLQkgKiBtdXN0IGJlIGRvbmUgaW4gYXNzZW1ibHksIHNpbmNlIHdlIGhhdmUgbm8gc3RhY2sgYXQgdGhpcyBwb2ludC4KLQkgKi8KLQkuZ2xvYmFsCWVhcmx5X2luaXRfZgotZWFybHlfaW5pdF9mOgotCW1mbHIJcjEwCi0KLQkvKiBiYXNpYyBtZW1vcnkgY29udHJvbGxlciBjb25maWd1cmF0aW9uICovCi0JbGlzCXIzLCBDT05GSUdfQUREUl9ISUdICi0JbGlzCXI0LCBDT05GSUdfREFUQV9ISUdICi0JYmwJbGFiCi1sYWI6CW1mbHIJcjUKLQlsd3p1CXIwLCB0YmwgLSBsYWIocjUpCi1sb29wOglsd3oJcjEsIDQocjUpCi0Jc3R3YnJ4CXIwLCAwLCByMwotCWVpZWlvCi0Jc3R3YnJ4CXIxLCAwLCByNAotCWVpZWlvCi0JbHd6dQlyMCwgOChyNSkKLQljbXBsaQljcjAsIDAsIHIwLCAwCi0JYm5lCWNyMCwgbG9vcAotCi0JLyogc2V0IGJhbmsgZW5hYmxlIGJpdHMgKi8KLQlsaXMJcjAsIE1CRVJAaAotCW9yaQlyMCwgMCwgTUJFUkBsCi0JbGkJcjEsIENPTkZJR19TWVNfQkFOS19FTkFCTEUKLQlzdHdicngJcjAsIDAsIHIzCi0JZWllaW8KLQlzdGIJcjEsIDAocjQpCi0JZWllaW8KLQotCS8qIGRlbGF5IGxvb3AgKi8KLQlsaXMJcjAsIDB4MDAwMwotCW10Y3RyICAgcjAKLWRlbGF5OgliZG56CWRlbGF5Ci0KLQkvKiBlbmFibGUgbWVtb3J5IGNvbnRyb2xsZXIgKi8KLQlsaXMJcjAsIE1DQ1IxQGgKLQlvcmkJcjAsIDAsIE1DQ1IxQGwKLQlzdHdicngJcjAsIDAsIHIzCi0JZWllaW8KLQlsd2JyeAlyMCwgMCwgcjQKLQlvcmlzCXIwLCAwLCBNQ0NSMV9NRU1HT0BoCi0Jc3R3YnJ4CXIwLCAwLCByNAotCWVpZWlvCi0KLQkvKiBzZXQgdXAgc3RhY2sgcG9pbnRlciAqLwotCWxpcwlyMSwgQ09ORklHX1NZU19JTklUX1NQX09GRlNFVEBoCi0Jb3JpCXIxLCByMSwgQ09ORklHX1NZU19JTklUX1NQX09GRlNFVEBsCi0KLQltdGxyCXIxMAotCWJscgpkaWZmIC0tZ2l0IGEvYm9hcmQvaWRzODI0Ny9NYWtlZmlsZSBiL2JvYXJkL2lkcy9pZHM4MjQ3L01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9pZHM4MjQ3L01ha2VmaWxlCnJlbmFtZSB0byBib2FyZC9pZHMvaWRzODI0Ny9NYWtlZmlsZQpkaWZmIC0tZ2l0IGEvYm9hcmQvaWRzODI0Ny9pZHM4MjQ3LmMgYi9ib2FyZC9pZHMvaWRzODI0Ny9pZHM4MjQ3LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL2lkczgyNDcvaWRzODI0Ny5jCnJlbmFtZSB0byBib2FyZC9pZHMvaWRzODI0Ny9pZHM4MjQ3LmMKZGlmZiAtLWdpdCBhL2JvYXJkL2lkcy9pZHM4MzEzL01ha2VmaWxlIGIvYm9hcmQvaWRzL2lkczgzMTMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjZmQ0MAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2lkcy9pZHM4MzEzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIChDKSBDb3B5cmlnaHQgMjAxMworIyBIZWlrbyBTY2hvY2hlciwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGhzQGRlbnguZGU+CisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKworIworCitvYmoteQk9IGlkczgzMTMubwpkaWZmIC0tZ2l0IGEvYm9hcmQvaWRzL2lkczgzMTMvaWRzODMxMy5jIGIvYm9hcmQvaWRzL2lkczgzMTMvaWRzODMxMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NDIxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9pZHMvaWRzODMxMy9pZHM4MzEzLmMKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMTMKKyAqIEhlaWtvIFNjaG9jaGVyLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBoc0BkZW54LmRlLgorICoKKyAqIEJhc2VkIG9uOgorICogQ29weXJpZ2h0IChjKSAyMDExIElEUyBHbWJILCBHZXJtYW55CisgKiBpZHM4MzEzLmMgLSBpZHM4MzEzIGJvYXJkIHN1cHBvcnQuCisgKgorICogU2VyZ2VqIFN0ZXBhbm92IDxzdGVAaWRzLmRlPgorICogQmFzZWQgb24gYm9hcmQvZnJlZXNjYWxlL21wYzgzMTNlcmRiL21wYzgzMTNlcmRiLmMKKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bXBjODN4eC5oPgorI2luY2x1ZGUgPHNwaS5oPgorI2luY2x1ZGUgPGxpYmZkdC5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKy8qKiBDUExEIGNvbnRhaW5zIHRoZSBpbmZvIGFib3V0OgorICogLSBib2FyZCB0eXBlOiAqcENwbGQgJiAweEYwCisgKiAtIGh3LXJldmlzaW9uOiAqcENwbGQgJiAweDBGCisgKiAtIGNwbGQtcmV2aXNpb246ICpwQ3BsZCsxCisgKi8KK2ludCBjaGVja2JvYXJkKHZvaWQpCit7CisJY2hhciAqcGNwbGQgPSAoY2hhciAqKUNPTkZJR19TWVNfQ1BMRF9CQVNFOworCXU4IHU4VmVycyA9IHJlYWRiKHBjcGxkKTsKKwl1OCB1OFJldnMgPSByZWFkYihwY3BsZCArIDEpOworCisJcHJpbnRmKCJCb2FyZDogIik7CisJc3dpdGNoICh1OFZlcnMgJiAweEYwKSB7CisJY2FzZSAnXHg0MCc6CisJCXByaW50ZigiQ1U3M1giKTsKKwkJYnJlYWs7CisJY2FzZSAnXHg1MCc6CisJCXByaW50ZigiQ0M3M1giKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJ1bmtub3duKDB4JTAyWCwgMHglMDJYKVxuIiwgdThWZXJzLCB1OFJldnMpOworCQlyZXR1cm4gMDsKKwl9CisJcHJpbnRmKCJcbkluZm86ICBIVy1SZXY6ICVpLCBDUExELVJldjogJWlcbiIsCisJICAgICAgIHU4VmVycyAmIDB4MEYsIHU4UmV2cyAmIDB4RkYpOworCXJldHVybiAwOworfQorCisvKgorICogIGZpeGVkIHNkcmFtIGluaXQKKyAqLworaW50IGZpeGVkX3NkcmFtKHVuc2lnbmVkIGxvbmcgY29uZmlnKQoreworCWltbWFwX3QgKmltID0gKGltbWFwX3QgKilDT05GSUdfU1lTX0lNTVI7CisJdTMyIG1zaXplID0gQ09ORklHX1NZU19ERFJfU0laRSA8PCAyMDsKKworI2lmbmRlZiBDT05GSUdfU1lTX1JBTUJPT1QKKwl1MzIgbXNpemVfbG9nMiA9IF9faWxvZzIobXNpemUpOworCisJb3V0X2JlMzIoJmltLT5zeXNjb25mLmRkcmxhd1swXS5iYXIsCisJCSAoQ09ORklHX1NZU19ERFJfU0RSQU1fQkFTRSAmIDB4ZmZmZmYwMDApKTsKKwlvdXRfYmUzMigmaW0tPnN5c2NvbmYuZGRybGF3WzBdLmFyLCBMQkxBV0FSX0VOIHwgKG1zaXplX2xvZzIgLSAxKSk7CisJb3V0X2JlMzIoJmltLT5zeXNjb25mLmRkcmNkciwgQ09ORklHX1NZU19ERFJDRFJfVkFMVUUpOworCXN5bmMoKTsKKworCS8qCisJICogRXJyYXR1bSBERFIzIHJlcXVpcmVzIGEgNTBtcyBkZWxheSBhZnRlciBjbGVhcmluZyBERFJDRFJbRERSX2NmZ10sCisJICogb3IgdGhlIEREUjIgY29udHJvbGxlciBtYXkgZmFpbCB0byBpbml0aWFsaXplIGNvcnJlY3RseS4KKwkgKi8KKwl1ZGVsYXkoNTAwMDApOworCisJb3V0X2JlMzIoJmltLT5kZHIuY3NibmRzWzBdLmNzYm5kcywgKG1zaXplIC0gMSkgPj4gMjQpOworCW91dF9iZTMyKCZpbS0+ZGRyLmNzX2NvbmZpZ1swXSwgY29uZmlnKTsKKworCS8qIGN1cnJlbnRseSB3ZSB1c2Ugb25seSBvbmUgQ1MsIHNvIGRpc2FibGUgdGhlIG90aGVyIGJhbmtzICovCisJb3V0X2JlMzIoJmltLT5kZHIuY3NfY29uZmlnWzFdLCAwKTsKKwlvdXRfYmUzMigmaW0tPmRkci5jc19jb25maWdbMl0sIDApOworCW91dF9iZTMyKCZpbS0+ZGRyLmNzX2NvbmZpZ1szXSwgMCk7CisKKwlvdXRfYmUzMigmaW0tPmRkci50aW1pbmdfY2ZnXzMsIENPTkZJR19TWVNfRERSX1RJTUlOR18zKTsKKwlvdXRfYmUzMigmaW0tPmRkci50aW1pbmdfY2ZnXzEsIENPTkZJR19TWVNfRERSX1RJTUlOR18xKTsKKwlvdXRfYmUzMigmaW0tPmRkci50aW1pbmdfY2ZnXzIsIENPTkZJR19TWVNfRERSX1RJTUlOR18yKTsKKwlvdXRfYmUzMigmaW0tPmRkci50aW1pbmdfY2ZnXzAsIENPTkZJR19TWVNfRERSX1RJTUlOR18wKTsKKworCW91dF9iZTMyKCZpbS0+ZGRyLnNkcmFtX2NmZywgQ09ORklHX1NZU19TRFJBTV9DRkcpOworCW91dF9iZTMyKCZpbS0+ZGRyLnNkcmFtX2NmZzIsIENPTkZJR19TWVNfU0RSQU1fQ0ZHMik7CisKKwlvdXRfYmUzMigmaW0tPmRkci5zZHJhbV9tb2RlLCBDT05GSUdfU1lTX0REUl9NT0RFKTsKKwlvdXRfYmUzMigmaW0tPmRkci5zZHJhbV9tb2RlMiwgQ09ORklHX1NZU19ERFJfTU9ERV8yKTsKKworCW91dF9iZTMyKCZpbS0+ZGRyLnNkcmFtX2ludGVydmFsLCBDT05GSUdfU1lTX0REUl9JTlRFUlZBTCk7CisJb3V0X2JlMzIoJmltLT5kZHIuc2RyYW1fY2xrX2NudGwsIENPTkZJR19TWVNfRERSX0NMS19DTlRMKTsKKwlzeW5jKCk7CisJdWRlbGF5KDMwMCk7CisKKwkvKiBlbmFibGUgRERSIGNvbnRyb2xsZXIgKi8KKwlzZXRiaXRzX2JlMzIoJmltLT5kZHIuc2RyYW1fY2ZnLCBTRFJBTV9DRkdfTUVNX0VOKTsKKwkvKiBub3cgY2hlY2sgdGhlIHJlYWwgc2l6ZSAqLworCWRpc2FibGVfYWRkcl90cmFucygpOworCW1zaXplID0gZ2V0X3JhbV9zaXplKENPTkZJR19TWVNfRERSX0JBU0UsIG1zaXplKTsKKwllbmFibGVfYWRkcl90cmFucygpOworI2VuZGlmCisJcmV0dXJuIG1zaXplOworfQorCitzdGF0aWMgaW50IHNldHVwX3NkcmFtKHZvaWQpCit7CisJdTMyIG1zaXplID0gQ09ORklHX1NZU19ERFJfU0laRSA8PCAyMDsKKwlsb25nIGludCBzaXplXzAxLCBzaXplXzAyOworCisJc2l6ZV8wMSA9IGZpeGVkX3NkcmFtKENPTkZJR19TWVNfRERSX0NPTkZJRyk7CisJc2l6ZV8wMiA9IGZpeGVkX3NkcmFtKENPTkZJR19TWVNfRERSX0NPTkZJR18yNTYpOworCisJaWYgKHNpemVfMDEgPiBzaXplXzAyKQorCQltc2l6ZSA9IGZpeGVkX3NkcmFtKENPTkZJR19TWVNfRERSX0NPTkZJRyk7CisJZWxzZQorCQltc2l6ZSA9IHNpemVfMDI7CisKKwlyZXR1cm4gbXNpemU7Cit9CisKK3BoeXNfc2l6ZV90IGluaXRkcmFtKGludCBib2FyZF90eXBlKQoreworCWltbWFwX3QgKmltID0gKGltbWFwX3QgKilDT05GSUdfU1lTX0lNTVI7CisJZnNsX2xiY190ICpsYmMgPSAmaW0tPmltX2xiYzsKKwl1MzIgbXNpemUgPSAwOworCisJaWYgKChpbl9iZTMyKCZpbS0+c3lzY29uZi5pbW1yYmFyKSAmIElNTVJCQVJfQkFTRV9BRERSKSAhPSAodTMyKWltKQorCQlyZXR1cm4gLTE7CisKKwltc2l6ZSA9IHNldHVwX3NkcmFtKCk7CisKKwlvdXRfYmUzMigmbGJjLT5sYmNyLCBDT05GSUdfU1lTX0xCQ19MQkNSKTsKKwlvdXRfYmUzMigmbGJjLT5tcnRwciwgQ09ORklHX1NZU19MQkNfTVJUUFIpOworCXN5bmMoKTsKKworCXJldHVybiBtc2l6ZTsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQordm9pZCBmdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKK3sKKwlmdF9jcHVfc2V0dXAoYmxvYiwgYmQpOworfQorI2VuZGlmCisKKy8qIGdwaW8gbWFzayBmb3Igc3BpX2NzICovCisjZGVmaW5lIElEU0NQTERfU1BJX0NTX01BU0sJCTB4MDAwMDAwMDEKKy8qIHNwaV9jcyBtdWx0aXBsZXhlZCB0aHJvdWdoIGNwbGQgKi8KKyNkZWZpbmUgSURTQ1BMRF9TUElfQ1NfQkFTRQkJKENPTkZJR19TWVNfQ1BMRF9CQVNFICsgMHhmKQorCisjaWYgZGVmaW5lZChDT05GSUdfTUlTQ19JTklUX1IpCisvKiBzcnAgdW1jciBtYXNrIGZvciBydHMgKi8KKyNkZWZpbmUgSURTVU1DUl9SVFNfTUFTSyAweDA0CitpbnQgbWlzY19pbml0X3Iodm9pZCkKK3sKKwkvKnNycCovCisJZHVhcnQ4M3h4X3QgKnVhcnQxID0gJigoaW1tYXBfdCAqKUNPTkZJR19TWVNfSU1NUiktPmR1YXJ0WzBdOworCWR1YXJ0ODN4eF90ICp1YXJ0MiA9ICYoKGltbWFwX3QgKilDT05GSUdfU1lTX0lNTVIpLT5kdWFydFsxXTsKKworCWdwaW84M3h4X3QgKmlvcGQgPSAmKChpbW1hcF90ICopQ09ORklHX1NZU19JTU1SKS0+Z3Bpb1swXTsKKwl1OCAqc3BpX2Jhc2UgPSAodTggKilJRFNDUExEX1NQSV9DU19CQVNFOworCisJLyogZGVhY3RpdmF0ZSBzcGlfY3MgY2hhbm5lbHMgKi8KKwlvdXRfOChzcGlfYmFzZSwgMCk7CisJLyogZGVhY3RpdmF0ZSB0aGUgc3BpX2NzICovCisJc2V0Yml0c19iZTMyKCZpb3BkLT5kaXIsIElEU0NQTERfU1BJX0NTX01BU0spOworCS8qc3JwIC0gZGVhY3RpdmF0ZSBydHMqLworCW91dF84KCZ1YXJ0MS0+dW1jciwgSURTVU1DUl9SVFNfTUFTSyk7CisJb3V0XzgoJnVhcnQyLT51bWNyLCBJRFNVTUNSX1JUU19NQVNLKTsKKworCisJZ2QtPmZkdF9ibG9iID0gKHZvaWQgKilDT05GSUdfU1lTX0ZMQVNIX0JBU0U7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NUEM4WFhYX1NQSQorLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgU1BJIGNoaXAgc2VsZWN0cworICovCitpbnQgc3BpX2NzX2lzX3ZhbGlkKHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBjcykKK3sKKwlyZXR1cm4gYnVzID09IDAgJiYgKChjcyA+PSAwKSAmJiAoY3MgPD0gMikpOworfQorCit2b2lkIHNwaV9jc19hY3RpdmF0ZShzdHJ1Y3Qgc3BpX3NsYXZlICpzbGF2ZSkKK3sKKwlncGlvODN4eF90ICppb3BkID0gJigoaW1tYXBfdCAqKUNPTkZJR19TWVNfSU1NUiktPmdwaW9bMF07CisJdTggKnNwaV9iYXNlID0gKHU4ICopSURTQ1BMRF9TUElfQ1NfQkFTRTsKKworCS8qIHNlbGVjdCB0aGUgc3BpX2NzIGNoYW5uZWwgKi8KKwlvdXRfOChzcGlfYmFzZSwgMSA8PCBzbGF2ZS0+Y3MpOworCS8qIGFjdGl2YXRlIHRoZSBzcGlfY3MgKi8KKwljbHJiaXRzX2JlMzIoJmlvcGQtPmRhdCwgSURTQ1BMRF9TUElfQ1NfTUFTSyk7Cit9CisKK3ZvaWQgc3BpX2NzX2RlYWN0aXZhdGUoc3RydWN0IHNwaV9zbGF2ZSAqc2xhdmUpCit7CisJZ3BpbzgzeHhfdCAqaW9wZCA9ICYoKGltbWFwX3QgKilDT05GSUdfU1lTX0lNTVIpLT5ncGlvWzBdOworCXU4ICpzcGlfYmFzZSA9ICh1OCAqKUlEU0NQTERfU1BJX0NTX0JBU0U7CisKKwkvKiBzZWxlY3QgdGhlIHNwaV9jcyBjaGFubmVsICovCisJb3V0Xzgoc3BpX2Jhc2UsIDEgPDwgc2xhdmUtPmNzKTsKKwkvKiBkZWFjdGl2YXRlIHRoZSBzcGlfY3MgKi8KKwlzZXRiaXRzX2JlMzIoJmlvcGQtPmRhdCwgSURTQ1BMRF9TUElfQ1NfTUFTSyk7Cit9CisjZW5kaWYgLyogQ09ORklHX0hBUkRfU1BJICovCmRpZmYgLS1naXQgYS9ib2FyZC9pbmNhaXAvTWFrZWZpbGUgYi9ib2FyZC9pbmNhaXAvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMmQzMGUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvaW5jYWlwL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jCi0jIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2Ci0jIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0jCi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotIwotCi1vYmoteQk9IGluY2FpcC5vIGZsYXNoLm8KLW9iai15CSs9IGxvd2xldmVsX2luaXQubwpkaWZmIC0tZ2l0IGEvYm9hcmQvaW5jYWlwL1JFQURNRSBiL2JvYXJkL2luY2FpcC9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMjkxNTIuLjAwMDAwMDAKLS0tIGEvYm9hcmQvaW5jYWlwL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLQotRmxhc2ggcHJvZ3JhbW1pbmcgb24gdGhlIElOQ0EtSVAgYm9hcmQgaXMgY29tcGxpY2F0ZWQgYmVjYXVzZSBvZiB0aGUKLUVCVSBzd2FwcGluZyB1bml0LiBBIEJESTIwMDAgY2FuIGJlIHVzZWQgZm9yIGZsYXNoIHByb2dyYW1taW5nIG9ubHkKLWlmIHRoZSBFQlUgc3dhcHBpbmcgdW5pdCBpcyBlbmFibGVkOyBvdGhlcndpc2UgaXQgd2lsbCBub3QgZGV0ZWN0IHRoZQotZmxhc2ggbWVtb3J5LiBCdXQgdGhlIEVCVSBzd2FwcGluZyB1bml0IGlzIGRpc2FkYmxlZCBhZnRlciByZXNldCwgc28KLWlmIHlvdSBwcm9ncmFtIHNvbWUgY29kZSB0byBmbGFzaCB3aXRoIHRoZSBzd2FwcGluZyB1bml0IG9uLCBpdCB3aWxsCi1ub3QgYmUgcnVubmFibGUgd2l0aCB0aGUgc3dhcHBpbmcgdW5pdCBvZmYuCi0KLVRoZSBjb25zZXF1ZW5jZSBpcyB0aGF0IHlvdSBoYXZlIHRvIHdyaXRlIGEgcHJlLXN3YXBwZWQgaW1hZ2UgdG8KLWZsYXNoIHVzaW5nIHRoZSBCREkyMDAwLiBBIHNpbXBsZSBob3N0LXNpZGUgdG9vbCAiaW5jYS1zd2FwLWJ5dGVzIiBpcwotcHJvdmlkZWQgaW4gdGhlICJ0b29scy8iIGRpcmVjdG9yeS4gVXNlIGl0IGFzIGZvbGxvd3M6Ci0KLQliYXNoJCAuL2luY2Etc3dhcC1ieXRlcyA8dS1ib290LmJpbiA+dS1ib290LmJpbi5zd3AKLQotTm90ZSB0aGF0IHRoZSBjdXJyZW50IEJESSBjb25maWcgZmlsZSBfZGlzYWJsZXNfIHRoZSBFQlUgc3dhcHBpbmcKLXVuaXQgZm9yIHRoZSBmbGFzaCBiYW5rIDAuIFRvIGVuYWJsZSBpdCwgKHRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZQotQkRJIGZsYXNoIGNvbW1hbmRzIHRvIHdvcmspIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaW4gdGhlCi1jb25maWcgZmlsZToKLQotCTtXTTMyICAgMHhiODAwMDI2MCAgICAgIDB4NDA0MTYxZmYgOyBTd2FwcGluZyB1bml0IGVuYWJsZWQKLQotYW5kIGNvbW1lbnQgb3V0Ci0KLQlXTTMyICAgIDB4YjgwMDAyNjAgICAgICAweDAwNDE2MWZmIDsgU3dhcHBpbmcgdW5pdCBkaXNhYmxlZAotCi1BbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSAibW0gMHhiODAwMDI2MCA8dmFsdWU+IiBjb21tYW5kcyB0bwotZW5hYmxlL2Rpc2FibGUgdGhlIHN3YXBwaW5nIHVuaXQgbWFudWFsbHkuCi0KLUp1c3QgZm9yIHJlZmVyZW5jZSwgaGVyZSBpcyB0aGUgY29tcGxldGUgc2VxdWVuY2Ugb2YgYWN0aW9ucyB3ZSB0b29rCi10byBpbnN0YWxsIGEgVS1Cb290IGltYWdlIGludG8gZmxhc2guCi0KLSAgICAxLiAuL2luY2Etc3dhcC1ieXRlcyA8dS1ib290LmJpbiA+dS1ib290LmJpbi5zd3AKLQotICAgIDIuIEZyb20gQkRJOgotCi0JbW0gMHhiODAwMDI2MCAgMHg0MDQxNjFmZgotCWVyYXNlIDB4YjAwMDAwMDAKLQllcmFzZSAweGIwMDEwMDAwCi0JcHJvZyAweGIwMDAwMDAwIC90ZnRwYm9vdC9JTkNBL3UtYm9vdC5iaW4uc3dwIGJpbgotCW1tIDB4YjgwMDAyNjAgMHgwMDQxNjFmZgotCWdvIDB4YjAwMDAwMDAKLQotCi1FdGhlcm5ldCBhdXRvbmVnb3RpYXRpb24gbmVlZHMgc29tZSB0aW1lIHRvIGNvbXBsZXRlLiBJbnN0ZWFkIG9mCi1kZWxheWluZyB0aGUgYm9vdCBwcm9jZXNzIGluIGFsbCBjYXNlcywgd2UganVzdCBzdGFydCB0aGUKLWF1dG9uZWdvdGlhdGlvbiBwcm9jZXNzIHdoZW4gVS1Cb290IGNvbWVzIHVwIGFuZCB0aGF0IGlzIGFsbC4gTW9zdAotbGlrZWx5LCBpdCB3aWxsIGNvbXBsZXRlIGJ5IHRoZSB0aW1lIHRoZSBuZXR3b3JrIHRyYW5zZmVyIGlzCi1hdHRlbXB0ZWQgZm9yIHRoZSBmaXJzdCB0aW1lLiBJbiB0aGUgd29yc3QgY2FzZSwgaWYgYSB0cmFuc2ZlciBpcwotYXR0ZW1wdGVkIGJlZm9yZSB0aGUgYXV0b25lZ290aWF0aW9uIGlzIGNvbXBsZXRlLCBqdXN0IGEgc2luZ2xlCi1wYWNrZXQgd291bGQgYmUgbG9zdCByZXN1bHRpbmcgaW4gYSBzaW5nbGUgdGltZW91dCBlcnJvciwgYW5kIHRoZW4KLXRoZSB0cmFuc2ZlciB3b3VsZCBwcm9jZWVkIG5vcm1hbGx5LiBTbyB0aGUgdGltZSB0aGF0IHdlIHdvdWxkIGhhdmUKLWxvc3QgdW5jb25kaXRpb25hbGx5IHdhaXRpbmcgZm9yIHRoZSBhdXRvbmVnb3RpYXRpb24gdG8gY29tcGxldGUsIHdlCi1oYXZlIHRvIHdhaXQgb25seSBpZiB0aGUgZmlsZSB0cmFuc2ZlciBpcyBzdGFydGVkIGltbWVkaWF0ZWx5IGFmdGVyCi1yZXNldC4gV2UndmUgdmVyaWZpZWQgdGhhdCB0aGlzIHdvcmtzIGZvciBhbGwgdGhlIGNsb2NrCi1jb25maWd1cmF0aW9ucy4KLQotKEMpIDIwMDMgV29sZmdhbmcgRGVuawpkaWZmIC0tZ2l0IGEvYm9hcmQvaW5jYWlwL2NvbmZpZy5tayBiL2JvYXJkL2luY2FpcC9jb25maWcubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NTRmOGUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvaW5jYWlwL2NvbmZpZy5taworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMKLSMgKEMpIENvcHlyaWdodCAyMDAzCi0jIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0jCi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotIwotCi0jCi0jIElOQ0EtSVAgYm9hcmQgd2l0aCBNSVBTIDRLYyBDUFUgY29yZQotIwotCi0jIFJPTSB2ZXJzaW9uCi1DT05GSUdfU1lTX1RFWFRfQkFTRSA9IDB4QjAwMDAwMDAKLQotIyBSQU0gdmVyc2lvbgotI0NPTkZJR19TWVNfVEVYVF9CQVNFID0gMHg4MDEwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvaW5jYWlwL2ZsYXNoLmMgYi9ib2FyZC9pbmNhaXAvZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4NmFjOS4uMDAwMDAwMAotLS0gYS9ib2FyZC9pbmNhaXAvZmxhc2guYworKysgL2Rldi9udWxsCkBAIC0xLDY1NSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAzCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxhc20vaW5jYS1pcC5oPgotCi1mbGFzaF9pbmZvX3QJZmxhc2hfaW5mb1tDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LU107IC8qIGluZm8gZm9yIEZMQVNIIGNoaXBzCSovCi0KLS8qIE5PVEUgLSBDT05GSUdfRkxBU0hfMTZCSVQgbWVhbnMgdGhlIENQVSBpbnRlcmZhY2UgaXMgMTYtYml0LCBpdAotICogICAgICAgIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGZsYXNoIGNoaXAgYmVpbmcgOC1iaXQgb3IgMTYtYml0LgotICovCi0jaWZkZWYgQ09ORklHX0ZMQVNIXzE2QklUCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IEZMQVNIX1BPUlRfV0lEVEg7Ci10eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IEZMQVNIX1BPUlRfV0lEVEhWOwotI2RlZmluZQlGTEFTSF9JRF9NQVNLCTB4RkZGRgotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBGTEFTSF9QT1JUX1dJRFRIOwotdHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIEZMQVNIX1BPUlRfV0lEVEhWOwotI2RlZmluZQlGTEFTSF9JRF9NQVNLCTB4RkZGRkZGRkYKLSNlbmRpZgotCi0jZGVmaW5lIEZQVwlGTEFTSF9QT1JUX1dJRFRICi0jZGVmaW5lIEZQV1YJRkxBU0hfUE9SVF9XSURUSFYKLQotI2RlZmluZSBPUk1BU0soc2l6ZSkgKCgtc2l6ZSkgJiBPUl9BTV9NU0spCi0KLSNpZiAwCi0jZGVmaW5lIEZMQVNIX0NZQ0xFMQkweDA1NTUKLSNkZWZpbmUgRkxBU0hfQ1lDTEUyCTB4MDJhYQotI2Vsc2UKLSNkZWZpbmUgRkxBU0hfQ1lDTEUxCTB4MDU1NAotI2RlZmluZSBGTEFTSF9DWUNMRTIJMHgwMmFiCi0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRnVuY3Rpb25zCi0gKi8KLXN0YXRpYyB1bG9uZyBmbGFzaF9nZXRfc2l6ZShGUFdWICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pOwotc3RhdGljIHZvaWQgZmxhc2hfcmVzZXQoZmxhc2hfaW5mb190ICppbmZvKTsKLXN0YXRpYyBpbnQgd3JpdGVfd29yZF9pbnRlbChmbGFzaF9pbmZvX3QgKmluZm8sIEZQV1YgKmRlc3QsIEZQVyBkYXRhKTsKLXN0YXRpYyBpbnQgd3JpdGVfd29yZF9hbWQoZmxhc2hfaW5mb190ICppbmZvLCBGUFdWICpkZXN0LCBGUFcgZGF0YSk7Ci1zdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyh1bG9uZyBiYXNlLCBmbGFzaF9pbmZvX3QgKmluZm8pOwotc3RhdGljIGZsYXNoX2luZm9fdCAqZmxhc2hfZ2V0X2luZm8odWxvbmcgYmFzZSk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGZsYXNoX2luaXQoKQotICoKLSAqIHNldHMgdXAgZmxhc2hfaW5mbyBhbmQgcmV0dXJucyBzaXplIG9mIEZMQVNIIChieXRlcykKLSAqLwotdW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7Ci0JaW50IGk7Ci0KLQkvKiBJbml0OiBubyBGTEFTSGVzIGtub3duICovCi0JZm9yIChpPTA7IGkgPCBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUzsgKytpKSB7Ci0JCXVsb25nIGZsYXNoYmFzZSA9IChpID09IDApID8gUEhZU19GTEFTSF8xIDogUEhZU19GTEFTSF8yOwotCQl1bG9uZyAqIGJ1c2NvbiA9ICh1bG9uZyAqKQotCQkJKChpID09IDApID8gSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjAgOiBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMik7Ci0KLQkJLyogRGlzYWJsZSB3cml0ZSBwcm90ZWN0aW9uICovCi0JCSpidXNjb24gJj0gfklOQ0FfSVBfRUJVX0VCVV9CVVNDT04xX1dSRElTOwotCi0jaWYgMQotCQltZW1zZXQoJmZsYXNoX2luZm9baV0sIDAsIHNpemVvZihmbGFzaF9pbmZvX3QpKTsKLSNlbmRpZgotCi0JCWZsYXNoX2luZm9baV0uc2l6ZSA9Ci0JCQlmbGFzaF9nZXRfc2l6ZSgoRlBXICopZmxhc2hiYXNlLCAmZmxhc2hfaW5mb1tpXSk7Ci0KLQkJaWYgKGZsYXNoX2luZm9baV0uZmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCQkJcHJpbnRmICgiIyMgVW5rbm93biBGTEFTSCBvbiBCYW5rICVkIC0gU2l6ZSA9IDB4JTA4bHhcbiIsCi0JCQlpLCBmbGFzaF9pbmZvW2ldLnNpemUpOwotCQl9Ci0KLQkJc2l6ZSArPSBmbGFzaF9pbmZvW2ldLnNpemU7Ci0JfQotCi0jaWYgQ09ORklHX1NZU19NT05JVE9SX0JBU0UgPj0gQ09ORklHX1NZU19GTEFTSF9CQVNFCi0JLyogbW9uaXRvciBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KLQlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCi0JCSAgICAgIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFLAotCQkgICAgICBDT05GSUdfU1lTX01PTklUT1JfQkFTRSttb25pdG9yX2ZsYXNoX2xlbi0xLAotCQkgICAgICBmbGFzaF9nZXRfaW5mbyhDT05GSUdfU1lTX01PTklUT1JfQkFTRSkpOwotI2VuZGlmCi0KLSNpZmRlZglDT05GSUdfRU5WX0lTX0lOX0ZMQVNICi0JLyogRU5WIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLwotCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLQkJICAgICAgQ09ORklHX0VOVl9BRERSLAotCQkgICAgICBDT05GSUdfRU5WX0FERFIrQ09ORklHX0VOVl9TSVpFLTEsCi0JCSAgICAgIGZsYXNoX2dldF9pbmZvKENPTkZJR19FTlZfQUREUikpOwotI2VuZGlmCi0KLQotCXJldHVybiBzaXplOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyB2b2lkIGZsYXNoX3Jlc2V0KGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQlGUFdWICpiYXNlID0gKEZQV1YgKikoaW5mby0+c3RhcnRbMF0pOwotCi0JLyogUHV0IEZMQVNIIGJhY2sgaW4gcmVhZCBtb2RlICovCi0JaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fSU5URUwpCi0JCSpiYXNlID0gKEZQVykweDAwRkYwMEZGOwkvKiBJbnRlbCBSZWFkIE1vZGUgKi8KLQllbHNlIGlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0FNRCkKLQkJKmJhc2UgPSAoRlBXKTB4MDBGMDAwRjA7CS8qIEFNRCBSZWFkIE1vZGUgKi8KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyAodWxvbmcgYmFzZSwgZmxhc2hfaW5mb190ICppbmZvKQotewotCWludCBpOwotCi0JLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCi0JaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fSU5URUwKLQkgICAgJiYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfQlRZUEUpKSB7Ci0JCWludCBib290c2VjdF9zaXplOwkvKiBudW1iZXIgb2YgYnl0ZXMvYm9vdCBzZWN0b3IJKi8KLQkJaW50IHNlY3Rfc2l6ZTsJCS8qIG51bWJlciBvZiBieXRlcy9yZWd1bGFyIHNlY3RvciAqLwotCi0JCWJvb3RzZWN0X3NpemUgPSAweDAwMDAyMDAwICogKHNpemVvZihGUFcpLzIpOwotCQlzZWN0X3NpemUgPSAgICAgMHgwMDAxMDAwMCAqIChzaXplb2YoRlBXKS8yKTsKLQotCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUJKi8KLQkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkgewotCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiBib290c2VjdF9zaXplKTsKLQkJfQotCQlmb3IgKGkgPSA4OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLQkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArICgoaSAtIDcpICogc2VjdF9zaXplKTsKLQkJfQotCX0KLQllbHNlIGlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0FNRAotCQkgJiYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNNjQwVSkgewotCi0JCWludCBzZWN0X3NpemU7CQkvKiBudW1iZXIgb2YgYnl0ZXMvc2VjdG9yICovCi0KLQkJc2VjdF9zaXplID0gMHgwMDAxMDAwMCAqIChzaXplb2YoRlBXKS8yKTsKLQotCQkvKiBzZXQgdXAgc2VjdG9yIHN0YXJ0IGFkZHJlc3MgdGFibGUgKHVuaWZvcm0gc2VjdG9yIHR5cGUpICovCi0JCWZvciggaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKyApCi0JCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIHNlY3Rfc2l6ZSk7Ci0JfQotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotc3RhdGljIGZsYXNoX2luZm9fdCAqZmxhc2hfZ2V0X2luZm8odWxvbmcgYmFzZSkKLXsKLQlpbnQgaTsKLQlmbGFzaF9pbmZvX3QgKiBpbmZvOwotCi0JZm9yIChpID0gMDsgaSA8IENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTOyBpICsrKSB7Ci0JCWluZm8gPSAmIGZsYXNoX2luZm9baV07Ci0JCWlmIChpbmZvLT5zdGFydFswXSA8PSBiYXNlICYmIGJhc2UgPCBpbmZvLT5zdGFydFswXSArIGluZm8tPnNpemUpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gaSA9PSBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUyA/IDAgOiBpbmZvOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotdm9pZCBmbGFzaF9wcmludF9pbmZvIChmbGFzaF9pbmZvX3QgKmluZm8pCi17Ci0JaW50IGk7Ci0JdWNoYXIgKmJvb3R0eXBlOwotCXVjaGFyICpib290bGV0dGVyOwotCWNoYXIgKmZtdDsKLQl1Y2hhciBib3Rib290bGV0dGVyW10gPSAiQiI7Ci0JdWNoYXIgdG9wYm9vdGxldHRlcltdID0gIlQiOwotCXVjaGFyIGJvdGJvb3R0eXBlW10gPSAiYm90dG9tIGJvb3Qgc2VjdG9yIjsKLQl1Y2hhciB0b3Bib290dHlwZVtdID0gInRvcCBib290IHNlY3RvciI7Ci0KLQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKLQljYXNlIEZMQVNIX01BTl9BTUQ6CXByaW50ZiAoIkFNRCAiKTsJCWJyZWFrOwotCWNhc2UgRkxBU0hfTUFOX0JNOglwcmludGYgKCJCUklHSFQgTUlDUk8gIik7CWJyZWFrOwotCWNhc2UgRkxBU0hfTUFOX0ZVSjoJcHJpbnRmICgiRlVKSVRTVSAiKTsJCWJyZWFrOwotCWNhc2UgRkxBU0hfTUFOX1NTVDoJcHJpbnRmICgiU1NUICIpOwkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9NQU5fU1RNOglwcmludGYgKCJTVE0gIik7CQlicmVhazsKLQljYXNlIEZMQVNIX01BTl9JTlRFTDoJcHJpbnRmICgiSU5URUwgIik7CQlicmVhazsKLQlkZWZhdWx0OgkJcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7CWJyZWFrOwotCX0KLQotCS8qIGNoZWNrIGZvciB0b3Agb3IgYm90dG9tIGJvb3QsIGlmIGl0IGFwcGxpZXMgKi8KLQlpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9CVFlQRSkgewotCQlib290dHlwZSA9IGJvdGJvb3R0eXBlOwotCQlib290bGV0dGVyID0gYm90Ym9vdGxldHRlcjsKLQl9Ci0JZWxzZSB7Ci0JCWJvb3R0eXBlID0gdG9wYm9vdHR5cGU7Ci0JCWJvb3RsZXR0ZXIgPSB0b3Bib290bGV0dGVyOwotCX0KLQotCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewotCWNhc2UgRkxBU0hfQU02NDBVOgotCQlmbXQgPSAiMjlMVjY0MUQgKDY0IE1iaXQsIHVuaWZvcm0gc2VjdG9ycylcbiI7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfMjhGODAwQzNCOgotCWNhc2UgRkxBU0hfMjhGODAwQzNUOgotCQlmbXQgPSAiMjhGODAwQzMlcyAoOCBNYml0LCAlcylcbiI7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfSU5URUw4MDBCOgotCWNhc2UgRkxBU0hfSU5URUw4MDBUOgotCQlmbXQgPSAiMjhGODAwQjMlcyAoOCBNYml0LCAlcylcbiI7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfMjhGMTYwQzNCOgotCWNhc2UgRkxBU0hfMjhGMTYwQzNUOgotCQlmbXQgPSAiMjhGMTYwQzMlcyAoMTYgTWJpdCwgJXMpXG4iOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0lOVEVMMTYwQjoKLQljYXNlIEZMQVNIX0lOVEVMMTYwVDoKLQkJZm10ID0gIjI4RjE2MEIzJXMgKDE2IE1iaXQsICVzKVxuIjsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF8yOEYzMjBDM0I6Ci0JY2FzZSBGTEFTSF8yOEYzMjBDM1Q6Ci0JCWZtdCA9ICIyOEYzMjBDMyVzICgzMiBNYml0LCAlcylcbiI7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfSU5URUwzMjBCOgotCWNhc2UgRkxBU0hfSU5URUwzMjBUOgotCQlmbXQgPSAiMjhGMzIwQjMlcyAoMzIgTWJpdCwgJXMpXG4iOwotCQlicmVhazsKLQljYXNlIEZMQVNIXzI4RjY0MEMzQjoKLQljYXNlIEZMQVNIXzI4RjY0MEMzVDoKLQkJZm10ID0gIjI4RjY0MEMzJXMgKDY0IE1iaXQsICVzKVxuIjsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9JTlRFTDY0MEI6Ci0JY2FzZSBGTEFTSF9JTlRFTDY0MFQ6Ci0JCWZtdCA9ICIyOEY2NDBCMyVzICg2NCBNYml0LCAlcylcbiI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWZtdCA9ICJVbmtub3duIENoaXAgVHlwZVxuIjsKLQkJYnJlYWs7Ci0JfQotCi0JcHJpbnRmIChmbXQsIGJvb3RsZXR0ZXIsIGJvb3R0eXBlKTsKLQotCXByaW50ZiAoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCi0JCWluZm8tPnNpemUgPj4gMjAsCi0JCWluZm8tPnNlY3Rvcl9jb3VudCk7Ci0KLQlwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7Ci0KLQlmb3IgKGk9MDsgaTxpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgewotCQlpZiAoKGkgJSA1KSA9PSAwKSB7Ci0JCQlwcmludGYgKCJcbiAgICIpOwotCQl9Ci0KLQkJcHJpbnRmICgiICUwOGxYJXMiLCBpbmZvLT5zdGFydFtpXSwKLQkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7Ci0JfQotCi0JcHJpbnRmICgiXG4iKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGNvZGUgY2Fubm90IGJlIHJ1biBmcm9tIEZMQVNIIQotICovCi0KLXVsb25nIGZsYXNoX2dldF9zaXplIChGUFdWICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pCi17Ci0JLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZDogcmVhZCBNYW51ZmFjdHVyZXIgSUQgKi8KLQotCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQgc2VxdWVuY2UgYW5kIHRlc3QgRkxBU0ggYW5zd2VyICovCi0JYWRkcltGTEFTSF9DWUNMRTFdID0gKEZQVykweDAwQUEwMEFBOwkvKiBmb3IgQU1ELCBJbnRlbCBpZ25vcmVzIHRoaXMgKi8KLQlhZGRyW0ZMQVNIX0NZQ0xFMl0gPSAoRlBXKTB4MDA1NTAwNTU7CS8qIGZvciBBTUQsIEludGVsIGlnbm9yZXMgdGhpcyAqLwotCWFkZHJbRkxBU0hfQ1lDTEUxXSA9IChGUFcpMHgwMDkwMDA5MDsJLyogc2VsZWN0cyBJbnRlbCBvciBBTUQgKi8KLQotCS8qIFRoZSBtYW51ZmFjdHVyZXIgY29kZXMgYXJlIG9ubHkgMSBieXRlLCBzbyBqdXN0IHVzZSAxIGJ5dGUuCi0JICogVGhpcyB3b3JrcyBmb3IgYW55IGJ1cyB3aWR0aCBhbmQgYW55IEZMQVNIIGRldmljZSB3aWR0aC4KLQkgKi8KLQlzd2l0Y2ggKGFkZHJbMV0gJiAweGZmKSB7Ci0KLQljYXNlICh1Y2hhcilBTURfTUFOVUZBQ1Q6Ci0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0FNRDsKLQkJYnJlYWs7Ci0KLQljYXNlICh1Y2hhcilJTlRFTF9NQU5VRkFDVDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fSU5URUw7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSAwOwotCQlpbmZvLT5zaXplID0gMDsKLQkJYnJlYWs7Ci0JfQotCi0JLyogQ2hlY2sgMTYgYml0cyBvciAzMiBiaXRzIG9mIElEIHNvIHdvcmsgb24gMzIgb3IgMTYgYml0IGJ1cy4gKi8KLQlpZiAoaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfVU5LTk9XTikgc3dpdGNoIChhZGRyWzBdKSB7Ci0KLQljYXNlIChGUFcpQU1EX0lEX0xWNjQwVToJLyogMjlMVjY0MCBhbmQgMjlMVjY0MSBoYXZlIHNhbWUgSUQgKi8KLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU02NDBVOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxMjg7Ci0JCWluZm8tPnNpemUgPSAweDAwODAwMDAwICogKHNpemVvZihGUFcpLzIpOwotCQlicmVhazsJCQkJLyogPT4gOCBvciAxNiBNQgkqLwotCi0JY2FzZSAoRlBXKUlOVEVMX0lEXzI4RjgwMEMzQjoKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGODAwQzNCOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSAyMzsKLQkJaW5mby0+c2l6ZSA9IDB4MDAxMDAwMDAgKiAoc2l6ZW9mKEZQVykvMik7Ci0JCWJyZWFrOwkJCQkvKiA9PiAxIG9yIDIgTUIJCSovCi0KLQljYXNlIChGUFcpSU5URUxfSURfMjhGODAwQjNCOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9JTlRFTDgwMEI7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDIzOwotCQlpbmZvLT5zaXplID0gMHgwMDEwMDAwMCAqIChzaXplb2YoRlBXKS8yKTsKLQkJYnJlYWs7CQkJCS8qID0+IDEgb3IgMiBNQgkJKi8KLQotCWNhc2UgKEZQVylJTlRFTF9JRF8yOEYxNjBDM0I6Ci0JCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjE2MEMzQjsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMzk7Ci0JCWluZm8tPnNpemUgPSAweDAwMjAwMDAwICogKHNpemVvZihGUFcpLzIpOwotCQlicmVhazsJCQkJLyogPT4gMiBvciA0IE1CCQkqLwotCi0JY2FzZSAoRlBXKUlOVEVMX0lEXzI4RjE2MEIzQjoKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfSU5URUwxNjBCOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSAzOTsKLQkJaW5mby0+c2l6ZSA9IDB4MDAyMDAwMDAgKiAoc2l6ZW9mKEZQVykvMik7Ci0JCWJyZWFrOwkJCQkvKiA9PiAyIG9yIDQgTUIJCSovCi0KLQljYXNlIChGUFcpSU5URUxfSURfMjhGMzIwQzNCOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEYzMjBDM0I7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOwotCQlpbmZvLT5zaXplID0gMHgwMDQwMDAwMCAqIChzaXplb2YoRlBXKS8yKTsKLQkJYnJlYWs7CQkJCS8qID0+IDQgb3IgOCBNQgkJKi8KLQotCWNhc2UgKEZQVylJTlRFTF9JRF8yOEYzMjBCM0I6Ci0JCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0lOVEVMMzIwQjsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gNzE7Ci0JCWluZm8tPnNpemUgPSAweDAwNDAwMDAwICogKHNpemVvZihGUFcpLzIpOwotCQlicmVhazsJCQkJLyogPT4gNCBvciA4IE1CCQkqLwotCi0JY2FzZSAoRlBXKUlOVEVMX0lEXzI4RjY0MEMzQjoKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGNjQwQzNCOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxMzU7Ci0JCWluZm8tPnNpemUgPSAweDAwODAwMDAwICogKHNpemVvZihGUFcpLzIpOwotCQlicmVhazsJCQkJLyogPT4gOCBvciAxNiBNQgkqLwotCi0JY2FzZSAoRlBXKUlOVEVMX0lEXzI4RjY0MEIzQjoKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfSU5URUw2NDBCOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxMzU7Ci0JCWluZm8tPnNpemUgPSAweDAwODAwMDAwICogKHNpemVvZihGUFcpLzIpOwotCQlicmVhazsJCQkJLyogPT4gOCBvciAxNiBNQgkqLwotCi0JZGVmYXVsdDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSAwOwotCQlpbmZvLT5zaXplID0gMDsKLQkJcmV0dXJuICgwKTsJCQkvKiA9PiBubyBvciB1bmtub3duIGZsYXNoICovCi0JfQotCi0JZmxhc2hfZ2V0X29mZnNldHMoKHVsb25nKWFkZHIsIGluZm8pOwotCi0JLyogUHV0IEZMQVNIIGJhY2sgaW4gcmVhZCBtb2RlICovCi0JZmxhc2hfcmVzZXQoaW5mbyk7Ci0KLQlyZXR1cm4gKGluZm8tPnNpemUpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotaW50CWZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKmluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQotewotCUZQV1YgKmFkZHI7Ci0JaW50IGZsYWcsIHByb3QsIHNlY3Q7Ci0JaW50IGludGVsID0gKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9JTlRFTDsKLQl1bG9uZyBzdGFydCwgbm93LCBsYXN0OwotCWludCByY29kZSA9IDA7Ci0KLQlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKLQkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJCXByaW50ZiAoIi0gbWlzc2luZ1xuIik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOwotCQl9Ci0JCXJldHVybiAxOwotCX0KLQotCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewotCWNhc2UgRkxBU0hfSU5URUw4MDBCOgotCWNhc2UgRkxBU0hfSU5URUwxNjBCOgotCWNhc2UgRkxBU0hfSU5URUwzMjBCOgotCWNhc2UgRkxBU0hfSU5URUw2NDBCOgotCWNhc2UgRkxBU0hfMjhGODAwQzNCOgotCWNhc2UgRkxBU0hfMjhGMTYwQzNCOgotCWNhc2UgRkxBU0hfMjhGMzIwQzNCOgotCWNhc2UgRkxBU0hfMjhGNjQwQzNCOgotCWNhc2UgRkxBU0hfQU02NDBVOgotCQlicmVhazsKLQljYXNlIEZMQVNIX1VOS05PV046Ci0JZGVmYXVsdDoKLQkJcHJpbnRmICgiQ2FuJ3QgZXJhc2UgdW5rbm93biBmbGFzaCB0eXBlICUwOGx4IC0gYWJvcnRlZFxuIiwKLQkJCWluZm8tPmZsYXNoX2lkKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcHJvdCA9IDA7Ci0JZm9yIChzZWN0PXNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgKytzZWN0KSB7Ci0JCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7Ci0JCQlwcm90Kys7Ci0JCX0KLQl9Ci0KLQlpZiAocHJvdCkgewotCQlwcmludGYgKCItIFdhcm5pbmc6ICVkIHByb3RlY3RlZCBzZWN0b3JzIHdpbGwgbm90IGJlIGVyYXNlZCFcbiIsCi0JCQlwcm90KTsKLQl9IGVsc2UgewotCQlwcmludGYgKCJcbiIpOwotCX0KLQotCWxhc3QgID0gZ2V0X3RpbWVyKDApOwotCi0JLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLwotCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdCAmJiByY29kZSA9PSAwOyBzZWN0KyspIHsKLQotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSAhPSAwKQkvKiBwcm90ZWN0ZWQsIHNraXAgaXQgKi8KLQkJCWNvbnRpbnVlOwotCi0JCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQkJYWRkciA9IChGUFdWICopKGluZm8tPnN0YXJ0W3NlY3RdKTsKLQkJaWYgKGludGVsKSB7Ci0JCQkqYWRkciA9IChGUFcpMHgwMDUwMDA1MDsgLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyICovCi0JCQkqYWRkciA9IChGUFcpMHgwMDIwMDAyMDsgLyogZXJhc2Ugc2V0dXAgKi8KLQkJCSphZGRyID0gKEZQVykweDAwRDAwMEQwOyAvKiBlcmFzZSBjb25maXJtICovCi0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBtdXN0IGJlIEFNRCBzdHlsZSBpZiBub3QgSW50ZWwgKi8KLQkJCUZQV1YgKmJhc2U7CQkvKiBmaXJzdCBhZGRyZXNzIGluIGJhbmsgKi8KLQotCQkJYmFzZSA9IChGUFdWICopKGluZm8tPnN0YXJ0WzBdKTsKLQkJCWJhc2VbRkxBU0hfQ1lDTEUxXSA9IChGUFcpMHgwMEFBMDBBQTsJLyogdW5sb2NrICovCi0JCQliYXNlW0ZMQVNIX0NZQ0xFMl0gPSAoRlBXKTB4MDA1NTAwNTU7CS8qIHVubG9jayAqLwotCQkJYmFzZVtGTEFTSF9DWUNMRTFdID0gKEZQVykweDAwODAwMDgwOwkvKiBlcmFzZSBtb2RlICovCi0JCQliYXNlW0ZMQVNIX0NZQ0xFMV0gPSAoRlBXKTB4MDBBQTAwQUE7CS8qIHVubG9jayAqLwotCQkJYmFzZVtGTEFTSF9DWUNMRTJdID0gKEZQVykweDAwNTUwMDU1OwkvKiB1bmxvY2sgKi8KLQkJCSphZGRyID0gKEZQVykweDAwMzAwMDMwOwkvKiBlcmFzZSBzZWN0b3IgKi8KLQkJfQotCi0JCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwotCQlpZiAoZmxhZykKLQkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQkJc3RhcnQgPSBnZXRfdGltZXIoMCk7Ci0KLQkJLyogd2FpdCBhdCBsZWFzdCA1MHVzIGZvciBBTUQsIDgwdXMgZm9yIEludGVsLgotCQkgKiBMZXQncyB3YWl0IDEgbXMuCi0JCSAqLwotCQl1ZGVsYXkgKDEwMDApOwotCi0JCXdoaWxlICgoKmFkZHIgJiAoRlBXKTB4MDA4MDAwODApICE9IChGUFcpMHgwMDgwMDA4MCkgewotCQkJaWYgKChub3cgPSBnZXRfdGltZXIoc3RhcnQpKSA+IENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVCkgewotCQkJCXByaW50ZiAoIlRpbWVvdXRcbiIpOwotCi0JCQkJaWYgKGludGVsKSB7Ci0JCQkJCS8qIHN1c3BlbmQgZXJhc2UJKi8KLQkJCQkJKmFkZHIgPSAoRlBXKTB4MDBCMDAwQjA7Ci0JCQkJfQotCi0JCQkJZmxhc2hfcmVzZXQoaW5mbyk7CS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLwotCQkJCXJjb2RlID0gMTsJCS8qIGZhaWxlZCAqLwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLwotCQkJaWYgKChnZXRfdGltZXIobGFzdCkpID4gQ09ORklHX1NZU19IWikgey8qIGV2ZXJ5IHNlY29uZCAqLwotCQkJCXB1dGMgKCcuJyk7Ci0JCQkJbGFzdCA9IGdldF90aW1lcigwKTsKLQkJCX0KLQkJfQotCi0JCS8qIHNob3cgdGhhdCB3ZSdyZSB3YWl0aW5nICovCi0JCWlmICgoZ2V0X3RpbWVyKGxhc3QpKSA+IENPTkZJR19TWVNfSFopIHsJLyogZXZlcnkgc2Vjb25kICovCi0JCQlwdXRjICgnLicpOwotCQkJbGFzdCA9IGdldF90aW1lcigwKTsKLQkJfQotCi0JCWZsYXNoX3Jlc2V0KGluZm8pOwkvKiByZXNldCB0byByZWFkIG1vZGUJKi8KLQl9Ci0KLQlwcmludGYgKCIgZG9uZVxuIik7Ci0JcmV0dXJuIHJjb2RlOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDb3B5IG1lbW9yeSB0byBmbGFzaCwgcmV0dXJuczoKLSAqIDAgLSBPSwotICogMSAtIHdyaXRlIHRpbWVvdXQKLSAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCi0gKi8KLWludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKmluZm8sIHVjaGFyICpzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKLXsKLSAgICBGUFcgZGF0YSA9IDA7IC8qIDE2IG9yIDMyIGJpdCB3b3JkLCBtYXRjaGVzIGZsYXNoIGJ1cyB3aWR0aCBvbiBNUEM4WFggKi8KLSAgICBpbnQgYnl0ZXM7CSAgLyogbnVtYmVyIG9mIGJ5dGVzIHRvIHByb2dyYW0gaW4gY3VycmVudCB3b3JkCQkqLwotICAgIGludCBsZWZ0OwkgIC8qIG51bWJlciBvZiBieXRlcyBsZWZ0IHRvIHByb2dyYW0JCQkqLwotICAgIGludCBpLCByZXM7Ci0KLSAgICBmb3IgKGxlZnQgPSBjbnQsIHJlcyA9IDA7Ci0JIGxlZnQgPiAwICYmIHJlcyA9PSAwOwotCSBhZGRyICs9IHNpemVvZihkYXRhKSwgbGVmdCAtPSBzaXplb2YoZGF0YSkgLSBieXRlcykgewotCi0JYnl0ZXMgPSBhZGRyICYgKHNpemVvZihkYXRhKSAtIDEpOwotCWFkZHIgJj0gfihzaXplb2YoZGF0YSkgLSAxKTsKLQotCS8qIGNvbWJpbmUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkYXRhIHNvIGNhbiBwcm9ncmFtCi0JICogYW4gZW50aXJlIHdvcmQgb2YgMTYgb3IgMzIgYml0cwotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGF0YSk7IGkrKykgewotCSAgICBkYXRhIDw8PSA4OwotCSAgICBpZiAoaSA8IGJ5dGVzIHx8IGkgLSBieXRlcyA+PSBsZWZ0ICkKLQkJZGF0YSArPSAqKCh1Y2hhciAqKWFkZHIgKyBpKTsKLQkgICAgZWxzZQotCQlkYXRhICs9ICpzcmMrKzsKLQl9Ci0KLQkvKiB3cml0ZSBvbmUgd29yZCB0byB0aGUgZmxhc2ggKi8KLQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKLQljYXNlIEZMQVNIX01BTl9BTUQ6Ci0JCXJlcyA9IHdyaXRlX3dvcmRfYW1kKGluZm8sIChGUFdWICopYWRkciwgZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfTUFOX0lOVEVMOgotCQlyZXMgPSB3cml0ZV93b3JkX2ludGVsKGluZm8sIChGUFdWICopYWRkciwgZGF0YSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIHVua25vd24gZmxhc2ggdHlwZSwgZXJyb3IhICovCi0JCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKLQkJcmVzID0gMTsJLyogbm90IHJlYWxseSBhIHRpbWVvdXQsIGJ1dCBnaXZlcyBlcnJvciAqLwotCQlicmVhazsKLQl9Ci0gICAgfQotCi0gICAgcmV0dXJuIChyZXMpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBXcml0ZSBhIHdvcmQgdG8gRmxhc2ggZm9yIEFNRCBGTEFTSAotICogQSB3b3JkIGlzIDE2IG9yIDMyIGJpdHMsIHdoaWNoZXZlciB0aGUgYnVzIHdpZHRoIG9mIHRoZSBmbGFzaCBiYW5rCi0gKiAobm90IGFuIGluZGl2aWR1YWwgY2hpcCkgaXMuCi0gKgotICogcmV0dXJuczoKLSAqIDAgLSBPSwotICogMSAtIHdyaXRlIHRpbWVvdXQKLSAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCi0gKi8KLXN0YXRpYyBpbnQgd3JpdGVfd29yZF9hbWQgKGZsYXNoX2luZm9fdCAqaW5mbywgRlBXViAqZGVzdCwgRlBXIGRhdGEpCi17Ci0gICAgdWxvbmcgc3RhcnQ7Ci0gICAgaW50IGZsYWc7Ci0gICAgaW50IHJlcyA9IDA7CS8qIHJlc3VsdCwgYXNzdW1lIHN1Y2Nlc3MJKi8KLSAgICBGUFdWICpiYXNlOwkJLyogZmlyc3QgYWRkcmVzcyBpbiBmbGFzaCBiYW5rCSovCi0KLSAgICAvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KLSAgICBpZiAoKCpkZXN0ICYgZGF0YSkgIT0gZGF0YSkgewotCXJldHVybiAoMik7Ci0gICAgfQotCi0KLSAgICBiYXNlID0gKEZQV1YgKikoaW5mby0+c3RhcnRbMF0pOwotCi0gICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCi0gICAgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwotCi0gICAgYmFzZVtGTEFTSF9DWUNMRTFdID0gKEZQVykweDAwQUEwMEFBOwkvKiB1bmxvY2sgKi8KLSAgICBiYXNlW0ZMQVNIX0NZQ0xFMl0gPSAoRlBXKTB4MDA1NTAwNTU7CS8qIHVubG9jayAqLwotICAgIGJhc2VbRkxBU0hfQ1lDTEUxXSA9IChGUFcpMHgwMEEwMDBBMDsJLyogc2VsZWN0cyBwcm9ncmFtIG1vZGUgKi8KLQotICAgICpkZXN0ID0gZGF0YTsJCS8qIHN0YXJ0IHByb2dyYW1taW5nIHRoZSBkYXRhCSovCi0KLSAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLSAgICBpZiAoZmxhZykKLQllbmFibGVfaW50ZXJydXB0cygpOwotCi0gICAgc3RhcnQgPSBnZXRfdGltZXIgKDApOwotCi0gICAgLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLwotICAgIHdoaWxlIChyZXMgPT0gMCAmJiAoKmRlc3QgJiAoRlBXKTB4MDA4MDAwODApICE9IChkYXRhICYgKEZQVykweDAwODAwMDgwKSkgewotCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUKSB7Ci0JICAgICpkZXN0ID0gKEZQVykweDAwRjAwMEYwOwkvKiByZXNldCBiYW5rICovCi0JICAgIHJlcyA9IDE7Ci0JfQotICAgIH0KLQotICAgIHJldHVybiAocmVzKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogV3JpdGUgYSB3b3JkIHRvIEZsYXNoIGZvciBJbnRlbCBGTEFTSAotICogQSB3b3JkIGlzIDE2IG9yIDMyIGJpdHMsIHdoaWNoZXZlciB0aGUgYnVzIHdpZHRoIG9mIHRoZSBmbGFzaCBiYW5rCi0gKiAobm90IGFuIGluZGl2aWR1YWwgY2hpcCkgaXMuCi0gKgotICogcmV0dXJuczoKLSAqIDAgLSBPSwotICogMSAtIHdyaXRlIHRpbWVvdXQKLSAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCi0gKi8KLXN0YXRpYyBpbnQgd3JpdGVfd29yZF9pbnRlbCAoZmxhc2hfaW5mb190ICppbmZvLCBGUFdWICpkZXN0LCBGUFcgZGF0YSkKLXsKLSAgICB1bG9uZyBzdGFydDsKLSAgICBpbnQgZmxhZzsKLSAgICBpbnQgcmVzID0gMDsJLyogcmVzdWx0LCBhc3N1bWUgc3VjY2VzcwkqLwotCi0gICAgLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCi0gICAgaWYgKCgqZGVzdCAmIGRhdGEpICE9IGRhdGEpIHsKLQlyZXR1cm4gKDIpOwotICAgIH0KLQotICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotICAgIGZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKLQotICAgICpkZXN0ID0gKEZQVykweDAwNTAwMDUwOwkvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIJKi8KLSAgICAqZGVzdCA9IChGUFcpMHgwMEZGMDBGRjsJLyogbWFrZSBzdXJlIGluIHJlYWQgbW9kZQkqLwotICAgICpkZXN0ID0gKEZQVykweDAwNDAwMDQwOwkvKiBwcm9ncmFtIHNldHVwCQkqLwotCi0gICAgKmRlc3QgPSBkYXRhOwkJLyogc3RhcnQgcHJvZ3JhbW1pbmcgdGhlIGRhdGEJKi8KLQotICAgIC8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwotICAgIGlmIChmbGFnKQotCWVuYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLSAgICBzdGFydCA9IGdldF90aW1lciAoMCk7Ci0KLSAgICB3aGlsZSAocmVzID09IDAgJiYgKCpkZXN0ICYgKEZQVykweDAwODAwMDgwKSAhPSAoRlBXKTB4MDA4MDAwODApIHsKLQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVCkgewotCSAgICAqZGVzdCA9IChGUFcpMHgwMEIwMDBCMDsJLyogU3VzcGVuZCBwcm9ncmFtCSovCi0JICAgIHJlcyA9IDE7Ci0JfQotICAgIH0KLQotICAgIGlmIChyZXMgPT0gMCAmJiAoKmRlc3QgJiAoRlBXKTB4MDAxMDAwMTApKQotCXJlcyA9IDE7CS8qIHdyaXRlIGZhaWxlZCwgdGltZSBvdXQgZXJyb3IgaXMgY2xvc2UgZW5vdWdoCSovCi0KLSAgICAqZGVzdCA9IChGUFcpMHgwMDUwMDA1MDsJLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyCSovCi0gICAgKmRlc3QgPSAoRlBXKTB4MDBGRjAwRkY7CS8qIG1ha2Ugc3VyZSBpbiByZWFkIG1vZGUJKi8KLQotICAgIHJldHVybiAocmVzKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2luY2FpcC9pbmNhaXAuYyBiL2JvYXJkL2luY2FpcC9pbmNhaXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE3YjhhZi4uMDAwMDAwMAotLS0gYS9ib2FyZC9pbmNhaXAvaW5jYWlwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMwotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPG5ldGRldi5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vaW5jYS1pcC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KLQotZXh0ZXJuIHVpbnQgaW5jYWlwX2dldF9jcHVjbGsodm9pZCk7Ci0KLXZvaWQgX21hY2hpbmVfcmVzdGFydCh2b2lkKQotewotCSpJTkNBX0lQX1dEVF9SU1RfUkVRID0gMHgzZjsKLX0KLQotc3RhdGljIHVsb25nIG1heF9zZHJhbV9zaXplKHZvaWQpCi17Ci0JLyogVGhlIG9ubHkgc3VwcG9ydGVkIFNEUkFNIGRhdGEgd2lkdGggaXMgMTZiaXQuCi0JICovCi0jZGVmaW5lIENPTkZJR19TWVNfRFcJMgotCi0JLyogVGhlIG9ubHkgc3VwcG9ydGVkIG51bWJlciBvZiBTRFJBTSBiYW5rcyBpcyA0LgotCSAqLwotI2RlZmluZSBDT05GSUdfU1lTX05CCTQKLQotCXVsb25nIGNmZ3BiMCA9ICpJTkNBX0lQX1NEUkFNX01DX0NGR1BCMDsKLQlpbnQgICBjb2xzICAgPSBjZmdwYjAgJiAweEY7Ci0JaW50ICAgcm93cyAgID0gKGNmZ3BiMCAmIDB4RjApID4+IDQ7Ci0JdWxvbmcgc2l6ZSAgID0gKDEgPDwgKHJvd3MgKyBjb2xzKSkgKiBDT05GSUdfU1lTX0RXICogQ09ORklHX1NZU19OQjsKLQotCXJldHVybiBzaXplOwotfQotCi1waHlzX3NpemVfdCBpbml0ZHJhbShpbnQgYm9hcmRfdHlwZSkKLXsKLQlpbnQgICByb3dzLCBjb2xzLCBiZXN0X3ZhbCA9ICpJTkNBX0lQX1NEUkFNX01DX0NGR1BCMDsKLQl1bG9uZyBzaXplLCBtYXhfc2l6ZSAgICAgICA9IDA7Ci0JdWxvbmcgb3VyX2FkZHJlc3M7Ci0KLQlhc20gdm9sYXRpbGUgKCJtb3ZlICUwLCAkMjUiIDogIj1yIiAob3VyX2FkZHJlc3MpIDopOwotCi0JCS8qIENhbid0IHByb2JlIGZvciBSQU0gc2l6ZSB1bmxlc3Mgd2UgYXJlIHJ1bm5pbmcgZnJvbSBGbGFzaC4KLQkJICovCi0JaWYgKENQSFlTQUREUihvdXJfYWRkcmVzcykgPCBDUEhZU0FERFIoUEhZU19GTEFTSF8xKSkKLQl7Ci0JCXJldHVybiBtYXhfc2RyYW1fc2l6ZSgpOwotCX0KLQotCWZvciAoY29scyA9IDB4ODsgY29scyA8PSAweEM7IGNvbHMrKykKLQl7Ci0JCWZvciAocm93cyA9IDB4Qjsgcm93cyA8PSAweEQ7IHJvd3MrKykKLQkJewotCQkJKklOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwID0gKDB4MTQgPDwgOCkgfAotCQkJCQkJICAgKHJvd3MgPDwgNCkgfCBjb2xzOwotCQkJc2l6ZSA9IGdldF9yYW1fc2l6ZSgobG9uZyAqKUNPTkZJR19TWVNfU0RSQU1fQkFTRSwKLQkJCQkJCQkgICAgIG1heF9zZHJhbV9zaXplKCkpOwotCi0JCQlpZiAoc2l6ZSA+IG1heF9zaXplKQotCQkJewotCQkJCWJlc3RfdmFsID0gKklOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwOwotCQkJCW1heF9zaXplID0gc2l6ZTsKLQkJCX0KLQkJfQotCX0KLQotCSpJTkNBX0lQX1NEUkFNX01DX0NGR1BCMCA9IGJlc3RfdmFsOwotCXJldHVybiBtYXhfc2l6ZTsKLX0KLQotaW50IGNoZWNrYm9hcmQgKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBjaGlwaWQgPSAqSU5DQV9JUF9XRFRfQ0hJUElEOwotCWludCBwYXJ0X251bTsKLQotCXB1dHMgKCJCb2FyZDogSU5DQS1JUCAiKTsKLQlwYXJ0X251bSA9IChjaGlwaWQgPj4gMTIpICYgMHhmZmZmOwotCXN3aXRjaCAocGFydF9udW0pIHsKLQljYXNlIDB4YzA6Ci0JCXByaW50ZiAoIlN0YW5kYXJkIFZlcnNpb24sICIpOwotCQlicmVhazsKLQljYXNlIDB4YzE6Ci0JCXByaW50ZiAoIkJhc2ljIFZlcnNpb24sICIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGYgKCJVbmtub3duIFBhcnQgTnVtYmVyIDB4JXggIiwgcGFydF9udW0pOwotCQlicmVhazsKLQl9Ci0KLQlwcmludGYgKCJDaGlwIFYxLiVsZCwgIiwgKGNoaXBpZCA+PiAyOCkpOwotCi0JcHJpbnRmKCJDUFUgU3BlZWQgJWQgTUh6XG4iLCBpbmNhaXBfZ2V0X2NwdWNsaygpLzEwMDAwMDApOwotCi0Jc2V0X2lvX3BvcnRfYmFzZSgwKTsKLQotCXJldHVybiAwOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfSU5DQV9JUF9TV0lUQ0gpCi1pbnQgYm9hcmRfZXRoX2luaXQoYmRfdCAqYmlzKQotewotCXJldHVybiBpbmNhX3N3aXRjaF9pbml0aWFsaXplKGJpcyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2luY2FpcC9sb3dsZXZlbF9pbml0LlMgYi9ib2FyZC9pbmNhaXAvbG93bGV2ZWxfaW5pdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmNmNmE5Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2luY2FpcC9sb3dsZXZlbF9pbml0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyODcgKzAsMCBAQAotLyoKLSAqICBNZW1vcnkgc3ViLXN5c3RlbSBpbml0aWFsaXphdGlvbiBjb2RlIGZvciBJTkNBLUlQIGRldmVsb3BtZW50IGJvYXJkLgotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDMJV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgotCi0KLSNkZWZpbmUgRUJVX01PRFVMX0JBU0UJCTB4QjgwMDAyMDAKLSNkZWZpbmUgRUJVX0NMQyh2YWx1ZSkJCTB4MDAwMCh2YWx1ZSkKLSNkZWZpbmUgRUJVX0NPTih2YWx1ZSkJCTB4MDAxMCh2YWx1ZSkKLSNkZWZpbmUgRUJVX0FERFNFTDAodmFsdWUpCTB4MDAyMCh2YWx1ZSkKLSNkZWZpbmUgRUJVX0FERFNFTDEodmFsdWUpCTB4MDAyNCh2YWx1ZSkKLSNkZWZpbmUgRUJVX0FERFNFTDIodmFsdWUpCTB4MDAyOCh2YWx1ZSkKLSNkZWZpbmUgRUJVX0JVU0NPTjAodmFsdWUpCTB4MDA2MCh2YWx1ZSkKLSNkZWZpbmUgRUJVX0JVU0NPTjEodmFsdWUpCTB4MDA2NCh2YWx1ZSkKLSNkZWZpbmUgRUJVX0JVU0NPTjIodmFsdWUpCTB4MDA2OCh2YWx1ZSkKLQotI2RlZmluZSBNQ19NT0RVTF9CQVNFCQkweEJGODAwMDAwCi0jZGVmaW5lIE1DX0VSUkNBVVNFKHZhbHVlKQkweDAxMDAodmFsdWUpCi0jZGVmaW5lIE1DX0VSUkFERFIodmFsdWUpCTB4MDEwOCh2YWx1ZSkKLSNkZWZpbmUgTUNfSU9HUCh2YWx1ZSkJCTB4MDgwMCh2YWx1ZSkKLSNkZWZpbmUgTUNfU0VMRlJGU0godmFsdWUpCTB4MEEwMCh2YWx1ZSkKLSNkZWZpbmUgTUNfQ1RSTEVOQSh2YWx1ZSkJMHgxMDAwKHZhbHVlKQotI2RlZmluZSBNQ19NUlNDT0RFKHZhbHVlKQkweDEwMDgodmFsdWUpCi0jZGVmaW5lIE1DX0NGR0RXKHZhbHVlKQkJMHgxMDEwKHZhbHVlKQotI2RlZmluZSBNQ19DRkdQQjAodmFsdWUpCTB4MTAxOCh2YWx1ZSkKLSNkZWZpbmUgTUNfTEFURU5DWSh2YWx1ZSkJMHgxMDM4KHZhbHVlKQotI2RlZmluZSBNQ19UUkVGUkVTSCh2YWx1ZSkJMHgxMDQwKHZhbHVlKQotCi0jZGVmaW5lIENHVV9NT0RVTF9CQVNFCQkweEJGMTA3MDAwCi0jZGVmaW5lIENHVV9QTEwxQ1IodmFsdWUpCTB4MDAwOCh2YWx1ZSkKLSNkZWZpbmUgQ0dVX0RJVkNSKHZhbHVlKQkweDAwMTAodmFsdWUpCi0jZGVmaW5lIENHVV9NVVhDUih2YWx1ZSkJMHgwMDE0KHZhbHVlKQotI2RlZmluZSBDR1VfUExMMVNSKHZhbHVlKQkweDAwMEModmFsdWUpCi0KLQkuc2V0CW5vcmVvcmRlcgotCi0KLS8qCi0gKiB2b2lkIGVidV9pbml0KGxvbmcpCi0gKgotICogYTAgaGFzIHRoZSBjbG9jayB2YWx1ZSB3ZSBhcmUgZ29pbmcgdG8gcnVuIGF0Ci0gKi8KLQkuZ2xvYmwJZWJ1X2luaXQKLQkuZW50CWVidV9pbml0Ci1lYnVfaW5pdDoKLV9fZWJ1X2luaXQ6Ci0KLQlsaQl0MSwgRUJVX01PRFVMX0JBU0UKLQlsaQl0MiwgMHhBMDAwMDA0MQotCXN3CXQyLCBFQlVfQUREU0VMMCh0MSkKLQlsaQl0MiwgMHhBMDgwMDA0MQotCXN3CXQyLCBFQlVfQUREU0VMMih0MSkKLQlsaQl0MiwgMHhCRTAwMDBGMQotCXN3CXQyLCBFQlVfQUREU0VMMSh0MSkKLQotCWxpCXQzLCAxMDAwMDAwMDAKLQliZXEJYTAsIHQzLCAxZgotCW5vcAotCWxpCXQzLCAxMzMwMDAwMDAKLQliZXEJYTAsIHQzLCAyZgotCW5vcAotCWxpCXQzLCAxNTAwMDAwMDAKLQliZXEJYTAsIHQzLCAyZgotCW5vcAotCWIJM2YKLQlub3AKLQotCS8qIDEwMCBNSHogKi8KLTE6Ci0JbGkJdDIsIDB4ODg0MTQxN0QKLQlzdwl0MiwgRUJVX0JVU0NPTjAodDEpCi0Jc3cJdDIsIEVCVV9CVVNDT04yKHQxKQotCWxpCXQyLCAweDY4NDE0MkJECi0JYgkzZgotCXN3CXQyLCBFQlVfQlVTQ09OMSh0MSkJLyogZGVsYXkgc2xvdCAqLwotCi0JLyogMTMzIG9yIDE1MCBNSHogKi8KLTI6Ci0JbGkJdDIsIDB4ODg0MTQxN0UKLQlzdwl0MiwgRUJVX0JVU0NPTjAodDEpCi0Jc3cJdDIsIEVCVV9CVVNDT04yKHQxKQotCWxpCXQyLCAweDY4NDE0M0ZECi0Jc3cJdDIsIEVCVV9CVVNDT04xKHQxKQotMzoKLQlqcglyYQotCW5vcAotCi0JLmVuZAllYnVfaW5pdAotCi0KLS8qCi0gKiB2b2lkIGNndV9pbml0KGxvbmcpCi0gKgotICogYTAgaGFzIHRoZSBjbG9jayB2YWx1ZQotICovCi0JLmdsb2JsCWNndV9pbml0Ci0JLmVudAljZ3VfaW5pdAotY2d1X2luaXQ6Ci1fX2NndV9pbml0OgotCi0JbGkJdDEsIENHVV9NT0RVTF9CQVNFCi0KLQlsaQl0MywgMTAwMDAwMDAwCi0JYmVxCWEwLCB0MywgMWYKLQlub3AKLQlsaQl0MywgMTMzMDAwMDAwCi0JYmVxCWEwLCB0MywgMmYKLQlub3AKLQlsaQl0MywgMTUwMDAwMDAwCi0JYmVxCWEwLCB0MywgM2YKLQlub3AKLQliCTVmCi0Jbm9wCi0KLQkvKiAxMDAgTUh6IGNsb2NrICovCi0xOgotCWxpCXQyLCAweDgwMDAwMDE0Ci0Jc3cJdDIsIENHVV9ESVZDUih0MSkKLQlsaQl0MiwgMHg4MDAwMDAwMAotCXN3CXQyLCBDR1VfTVVYQ1IodDEpCi0JbGkJdDIsIDB4ODAwQjAwMDEKLQliCTVmCi0Jc3cJdDIsIENHVV9QTEwxQ1IodDEpCS8qIGRlbGF5IHNsb3QgKi8KLQotCS8qIDEzMyBNSHogY2xvY2sgKi8KLTI6Ci0JbGkJdDIsIDB4ODAwMDAwNTQKLQlzdwl0MiwgQ0dVX0RJVkNSKHQxKQotCWxpCXQyLCAweDgwMDAwMDAwCi0Jc3cJdDIsIENHVV9NVVhDUih0MSkKLQlsaQl0MiwgMHg4MDBCMDAwMQotCWIJNWYKLQlzdwl0MiwgQ0dVX1BMTDFDUih0MSkJLyogZGVsYXkgc2xvdCAqLwotCi0JLyogMTUwIE1IeiBjbG9jayAqLwotMzoKLQlsaQl0MiwgMHg4MDAwMDAxNwotCXN3CXQyLCBDR1VfRElWQ1IodDEpCi0JbGkJdDIsIDB4QzAwQjAwMDEKLQlzdwl0MiwgQ0dVX1BMTDFDUih0MSkKLQlsaQl0MywgMHg4MDAwMDAwMAotNDoKLQlsdwl0MiwgQ0dVX1BMTDFTUih0MSkKLQlhbmQJdDIsIHQyLCB0MwotCWJlcQl0MiwgemVybywgNGIKLQlub3AKLQlsaQl0MiwgMHg4MDAwMDAwMQotCXN3CXQyLCBDR1VfTVVYQ1IodDEpCi01OgotCWpyCXJhCi0Jbm9wCi0KLQkuZW5kCWNndV9pbml0Ci0KLQotLyoKLSAqIHZvaWQgc2RyYW1faW5pdChsb25nKQotICoKLSAqIGEwIGhhcyB0aGUgY2xvY2sgdmFsdWUKLSAqLwotCS5nbG9ibAlzZHJhbV9pbml0Ci0JLmVudAlzZHJhbV9pbml0Ci1zZHJhbV9pbml0OgotX19zZHJhbV9pbml0OgotCi0JbGkJdDEsIE1DX01PRFVMX0JBU0UKLQotI2lmIDAKLQkvKiBEaXNhYmxlIG1lbW9yeSBjb250cm9sbGVyIGJlZm9yZSBjaGFuZ2luZyBhbnkgb2YgaXRzIHJlZ2lzdGVycyAqLwotCXN3CXplcm8sIE1DX0NUUkxFTkEodDEpCi0jZW5kaWYKLQotCWxpCXQyLCAxMDAwMDAwMDAKLQliZXEJYTAsIHQyLCAxZgotCW5vcAotCWxpCXQyLCAxMzMwMDAwMDAKLQliZXEJYTAsIHQyLCAyZgotCW5vcAotCWxpCXQyLCAxNTAwMDAwMDAKLQliZXEJYTAsIHQyLCAzZgotCW5vcAotCWIJNWYKLQlub3AKLQotCS8qIDEwMCBNSHogY2xvY2sgKi8KLTE6Ci0JLyogU2V0IGNsb2NrIHJhdGlvIChjbGtyYXQ9MToxLCByZGRlbD0zKSAqLwotCWxpCXQyLCAweDAwMDAwMDAzCi0Jc3cJdDIsIE1DX0lPR1AodDEpCi0KLQkvKiBTZXQgc2RyYW0gcmVmcmVzaCByYXRlICg0Sy82NG1zIEAgMTAwTUh6KSAqLwotCWxpCXQyLCAweDAwMDAwNjFBCi0JYgk0ZgotCXN3CXQyLCBNQ19UUkVGUkVTSCh0MSkKLQotCS8qIDEzMyBNSHogY2xvY2sgKi8KLTI6Ci0JLyogU2V0IGNsb2NrIHJhdGlvIChjbGtyYXQ9MToxLCByZGRlbD0zKSAqLwotCWxpCXQyLCAweDAwMDAwMDAzCi0Jc3cJdDIsIE1DX0lPR1AodDEpCi0KLQkvKiBTZXQgc2RyYW0gcmVmcmVzaCByYXRlICg0Sy82NG1zIEAgMTMzTUh6KSAqLwotCWxpCXQyLCAweDAwMDAwODIyCi0JYgk0ZgotCXN3CXQyLCBNQ19UUkVGUkVTSCh0MSkKLQotCS8qIDE1MCBNSHogY2xvY2sgKi8KLTM6Ci0JLyogU2V0IGNsb2NrIHJhdGlvIChjbGtyYXQ9MzoyLCByZGRlbD00KSAqLwotCWxpCXQyLCAweDAwMDAwMDE0Ci0Jc3cJdDIsIE1DX0lPR1AodDEpCi0KLQkvKiBTZXQgc2RyYW0gcmVmcmVzaCByYXRlICg0Sy82NG1zIEAgMTUwTUh6KSAqLwotCWxpCXQyLCAweDAwMDAwOTI3Ci0Jc3cJdDIsIE1DX1RSRUZSRVNIKHQxKQotCi00OgotCS8qIENsZWFyIEVycm9yIGxvZyByZWdpc3RlcnMgKi8KLQlzdwl6ZXJvLCBNQ19FUlJDQVVTRSh0MSkKLQlzdwl6ZXJvLCBNQ19FUlJBRERSKHQxKQotCi0JLyogQ2xlYXIgUG93ZXItZG93biByZWdpc3RlcnMgKi8KLQlzdwl6ZXJvLCBNQ19TRUxGUkZTSCh0MSkKLQotCS8qIFNldCBDQVMgTGF0ZW5jeSAqLwotCWxpCXQyLCAweDAwMDAwMDIwCQkvKiBDTCA9IDIgKi8KLQlzdwl0MiwgTUNfTVJTQ09ERSh0MSkKLQotCS8qIFNldCB3b3JkIHdpZHRoIHRvIDE2IGJpdCAqLwotCWxpCXQyLCAweDIKLQlzdwl0MiwgTUNfQ0ZHRFcodDEpCi0KLQkvKiBTZXQgQ1MwIHRvIFNEUkFNIHBhcmFtZXRlcnMgKi8KLQlsaQl0MiwgMHgwMDAwMTRDOQotCXN3CXQyLCBNQ19DRkdQQjAodDEpCi0KLQkvKiBTZXQgU0RSQU0gbGF0ZW5jeSBwYXJhbWV0ZXJzICovCi0JbGkJdDIsIDB4MDAwMjYzMjUJCS8qIEJDIFBDMTAwICovCi0Jc3cJdDIsIE1DX0xBVEVOQ1kodDEpCi0KLTU6Ci0JLyogRmluYWxseSBlbmFibGUgdGhlIGNvbnRyb2xsZXIgKi8KLQlsaQl0MiwgMHgwMDAwMDAwMQotCXN3CXQyLCBNQ19DVFJMRU5BKHQxKQotCi0JanIJcmEKLQlub3AKLQotCS5lbmQJc2RyYW1faW5pdAotCi0KLQkuZ2xvYmwJbG93bGV2ZWxfaW5pdAotCS5lbnQJbG93bGV2ZWxfaW5pdAotbG93bGV2ZWxfaW5pdDoKLQotCS8qIERpc2FibGUgV2F0Y2hkb2cuCi0JICovCi0JbGEJdDksIGRpc2FibGVfaW5jYWlwX3dkdAotCWphbHIJdDkKLQlub3AKLQotCS8qIEVCVSwgQ0dVIGFuZCBTRFJBTSBJbml0aWFsaXphdGlvbi4KLQkgKi8KLQlsaQlhMCwgQ09ORklHX0NQVV9DTE9DS19SQVRFCi0JbW92ZQl0MCwgcmEKLQotCS8qIFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBuZWl0aGVyIGVidV9pbml0KCkgbm9yIGNndV9pbml0KCkgbm9yIHNkcmFtX2luaXQoKQotCSAqIG1vZGlmeSB0MCBhbmQgYTAuCi0JICovCi0JYmFsCV9fY2d1X2luaXQKLQlub3AKLQliYWwJX19lYnVfaW5pdAotCW5vcAotCWJhbAlfX3NkcmFtX2luaXQKLQlub3AKLQltb3ZlCXJhLCB0MAotCi0JanIJcmEKLQlub3AKLQotCS5lbmQJbG93bGV2ZWxfaW5pdApkaWZmIC0tZ2l0IGEvYm9hcmQvbHViYm9jay9NYWtlZmlsZSBiL2JvYXJkL2x1YmJvY2svTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYTUxM2EuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbHViYm9jay9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgotIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotIwotIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSMKLQotb2JqLXkJOj0gbHViYm9jay5vIGZsYXNoLm8KZGlmZiAtLWdpdCBhL2JvYXJkL2x1YmJvY2svZmxhc2guYyBiL2JvYXJkL2x1YmJvY2svZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZiYjIyYy4uMDAwMDAwMAotLS0gYS9ib2FyZC9sdWJib2NrL2ZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogS3lsZSBIYXJyaXMsIE5leHVzIFRlY2hub2xvZ2llcywgSW5jLiBraGFycmlzQG5leHVzLXRlY2gubmV0Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYi5oPgotCi0KLWZsYXNoX2luZm9fdCBmbGFzaF9pbmZvW0NPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTXTsJLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMgICAgKi8KLQotLyogQm9hcmQgc3VwcG9ydCBmb3IgMSBvciAyIGZsYXNoIGRldmljZXMgKi8KLSNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSDMyCi0jdW5kZWYgRkxBU0hfUE9SVF9XSURUSDE2Ci0KLSNpZmRlZiBGTEFTSF9QT1JUX1dJRFRIMTYKLSNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSAkJdXNob3J0Ci0jZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEhWCQl2dV9zaG9ydAotI2RlZmluZSBTV0FQKHgpICAgICAgICAgICAgICAgX19zd2FiMTYoeCkKLSNlbHNlCi0jZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEgJCXVsb25nCi0jZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEhWCQl2dV9sb25nCi0jZGVmaW5lIFNXQVAoeCkgICAgICAgICAgICAgICBfX3N3YWIzMih4KQotI2VuZGlmCi0KLSNkZWZpbmUgRlBXCSAgIEZMQVNIX1BPUlRfV0lEVEgKLSNkZWZpbmUgRlBXViAgIEZMQVNIX1BPUlRfV0lEVEhWCi0KLSNkZWZpbmUgbWIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOiA6IDogIm1lbW9yeSIpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZ1bmN0aW9ucwotICovCi1zdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKEZQVyAqYWRkciwgZmxhc2hfaW5mb190ICppbmZvKTsKLXN0YXRpYyBpbnQgd3JpdGVfZGF0YSAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCBGUFcgZGF0YSk7Ci1zdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyAodWxvbmcgYmFzZSwgZmxhc2hfaW5mb190ICppbmZvKTsKLXZvaWQgaW5saW5lIHNwaW5fd2hlZWwgKHZvaWQpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotdW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKQotewotCWludCBpOwotCXVsb25nIHNpemUgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTOyBpKyspIHsKLQkJc3dpdGNoIChpKSB7Ci0JCWNhc2UgMDoKLQkJCWZsYXNoX2dldF9zaXplICgoRlBXICopIFBIWVNfRkxBU0hfMSwgJmZsYXNoX2luZm9baV0pOwotCQkJZmxhc2hfZ2V0X29mZnNldHMgKFBIWVNfRkxBU0hfMSwgJmZsYXNoX2luZm9baV0pOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWZsYXNoX2dldF9zaXplICgoRlBXICopIFBIWVNfRkxBU0hfMiwgJmZsYXNoX2luZm9baV0pOwotCQkJZmxhc2hfZ2V0X29mZnNldHMgKFBIWVNfRkxBU0hfMiwgJmZsYXNoX2luZm9baV0pOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwYW5pYyAoImNvbmZpZ3VyZWQgdG9vIG1hbnkgZmxhc2ggYmFua3MhXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOwotCX0KLQotCS8qIFByb3RlY3QgbW9uaXRvciBhbmQgZW52aXJvbm1lbnQgc2VjdG9ycwotCSAqLwotCWZsYXNoX3Byb3RlY3QgKCBGTEFHX1BST1RFQ1RfU0VULAotCQkJQ09ORklHX1NZU19GTEFTSF9CQVNFLAotCQkJQ09ORklHX1NZU19GTEFTSF9CQVNFICsgbW9uaXRvcl9mbGFzaF9sZW4gLSAxLAotCQkJJmZsYXNoX2luZm9bMF0gKTsKLQotCWZsYXNoX3Byb3RlY3QgKCBGTEFHX1BST1RFQ1RfU0VULAotCQkJQ09ORklHX0VOVl9BRERSLAotCQkJQ09ORklHX0VOVl9BRERSICsgQ09ORklHX0VOVl9TSVpFIC0gMSwgJmZsYXNoX2luZm9bMF0gKTsKLQotCXJldHVybiBzaXplOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyB2b2lkIGZsYXNoX2dldF9vZmZzZXRzICh1bG9uZyBiYXNlLCBmbGFzaF9pbmZvX3QgKmluZm8pCi17Ci0JaW50IGk7Ci0KLQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCQlyZXR1cm47Ci0JfQotCi0JaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fSU5URUwpIHsKLQkJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0JCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIFBIWVNfRkxBU0hfU0VDVF9TSVpFKTsKLQkJCWluZm8tPnByb3RlY3RbaV0gPSAwOwotCQl9Ci0JfQotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXZvaWQgZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICppbmZvKQotewotCWludCBpOwotCi0JaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJcHJpbnRmICgibWlzc2luZyBvciB1bmtub3duIEZMQVNIIHR5cGVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSB7Ci0JY2FzZSBGTEFTSF9NQU5fSU5URUw6Ci0JCXByaW50ZiAoIklOVEVMICIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGYgKCJVbmtub3duIFZlbmRvciAiKTsKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7Ci0JY2FzZSBGTEFTSF8yOEYxMjhKM0E6Ci0JCXByaW50ZiAoIjI4RjEyOEozQVxuIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ZiAoIlVua25vd24gQ2hpcCBUeXBlXG4iKTsKLQkJYnJlYWs7Ci0JfQotCi0JcHJpbnRmICgiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKLQkJCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7Ci0KLQlwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7Ci0JZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSB7Ci0JCWlmICgoaSAlIDUpID09IDApCi0JCQlwcmludGYgKCJcbiAgICIpOwotCQlwcmludGYgKCIgJTA4bFglcyIsCi0JCQlpbmZvLT5zdGFydFtpXSwKLQkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7Ci0JfQotCXByaW50ZiAoIlxuIik7Ci0JcmV0dXJuOwotfQotCi0vKgotICogVGhlIGZvbGxvd2luZyBjb2RlIGNhbm5vdCBiZSBydW4gZnJvbSBGTEFTSCEKLSAqLwotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplIChGUFcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQl2b2xhdGlsZSBGUFcgdmFsdWU7Ci0KLQkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kOiByZWFkIE1hbnVmYWN0dXJlciBJRCAqLwotCWFkZHJbMHg1NTU1XSA9IChGUFcpIDB4MDBBQTAwQUE7Ci0JYWRkclsweDJBQUFdID0gKEZQVykgMHgwMDU1MDA1NTsKLQlhZGRyWzB4NTU1NV0gPSAoRlBXKSAweDAwOTAwMDkwOwotCi0JbWIgKCk7Ci0JdmFsdWUgPSBhZGRyWzBdOwotCi0Jc3dpdGNoICh2YWx1ZSkgewotCi0JY2FzZSAoRlBXKSBJTlRFTF9NQU5VRkFDVDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fSU5URUw7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSAwOwotCQlpbmZvLT5zaXplID0gMDsKLQkJYWRkclswXSA9IChGUFcpIDB4MDBGRjAwRkY7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCi0JCXJldHVybiAoMCk7CQkJLyogbm8gb3IgdW5rbm93biBmbGFzaCAgKi8KLQl9Ci0KLQltYiAoKTsKLQl2YWx1ZSA9IGFkZHJbMV07CQkJLyogZGV2aWNlIElEICAgICAgICAqLwotCi0Jc3dpdGNoICh2YWx1ZSkgewotCi0JY2FzZSAoRlBXKSBJTlRFTF9JRF8yOEYxMjhKM0E6Ci0JCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjEyOEozQTsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMTI4OwotCQlpbmZvLT5zaXplID0gMHgwMjAwMDAwMDsKLQkJYnJlYWs7CQkJCS8qID0+IDE2IE1CICAgICAqLwotCi0JZGVmYXVsdDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoaW5mby0+c2VjdG9yX2NvdW50ID4gQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVCkgewotCQlwcmludGYgKCIqKiBFUlJPUjogc2VjdG9yIGNvdW50ICVkID4gbWF4ICglZCkgKipcbiIsCi0JCQlpbmZvLT5zZWN0b3JfY291bnQsIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QpOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUOwotCX0KLQotCWFkZHJbMF0gPSAoRlBXKSAweDAwRkYwMEZGOwkJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KLQotCXJldHVybiAoaW5mby0+c2l6ZSk7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLWludCBmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICppbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKLXsKLQlpbnQgcHJvdCwgc2VjdDsKLQl1bG9uZyB0eXBlLCBzdGFydDsKLQlpbnQgcmNvZGUgPSAwOwotCi0JaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7Ci0JCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7Ci0JCQlwcmludGYgKCItIG1pc3NpbmdcbiIpOwotCQl9IGVsc2UgewotCQkJcHJpbnRmICgiLSBubyBzZWN0b3JzIHRvIGVyYXNlXG4iKTsKLQkJfQotCQlyZXR1cm4gMTsKLQl9Ci0KLQl0eXBlID0gKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spOwotCWlmICgodHlwZSAhPSBGTEFTSF9NQU5fSU5URUwpKSB7Ci0JCXByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAlMDhseCAtIGFib3J0ZWRcbiIsCi0JCQlpbmZvLT5mbGFzaF9pZCk7Ci0JCXJldHVybiAxOwotCX0KLQotCXByb3QgPSAwOwotCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyArK3NlY3QpIHsKLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKLQkJCXByb3QrKzsKLQkJfQotCX0KLQotCWlmIChwcm90KSB7Ci0JCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKLQkJCXByb3QpOwotCX0gZWxzZSB7Ci0JCXByaW50ZiAoIlxuIik7Ci0JfQotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCi0JZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCi0JZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7IHNlY3QrKykgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KLQkJCUZQV1YgKmFkZHIgPSAoRlBXViAqKSAoaW5mby0+c3RhcnRbc2VjdF0pOwotCQkJRlBXIHN0YXR1czsKLQotCQkJcHJpbnRmICgiRXJhc2luZyBzZWN0b3IgJTJkIC4uLiAiLCBzZWN0KTsKLQotCQkJLyogYXJtIHNpbXBsZSwgbm9uIGludGVycnVwdCBkZXBlbmRlbnQgdGltZXIgKi8KLQkJCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOwotCi0JCQkqYWRkciA9IChGUFcpIDB4MDA1MDAwNTA7CS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciAqLwotCQkJKmFkZHIgPSAoRlBXKSAweDAwMjAwMDIwOwkvKiBlcmFzZSBzZXR1cCAqLwotCQkJKmFkZHIgPSAoRlBXKSAweDAwRDAwMEQwOwkvKiBlcmFzZSBjb25maXJtICovCi0KLQkJCXdoaWxlICgoKHN0YXR1cyA9ICphZGRyKSAmIChGUFcpIDB4MDA4MDAwODApICE9IChGUFcpIDB4MDA4MDAwODApIHsKLQkJCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVCkgewotCQkJCQlwcmludGYgKCJUaW1lb3V0XG4iKTsKLQkJCQkJKmFkZHIgPSAoRlBXKSAweDAwQjAwMEIwOwkvKiBzdXNwZW5kIGVyYXNlICAgICAqLwotCQkJCQkqYWRkciA9IChGUFcpIDB4MDBGRjAwRkY7CS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLwotCQkJCQlyY29kZSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJKmFkZHIgPSAweDAwNTAwMDUwOwkvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgY21kLiAgICovCi0JCQkqYWRkciA9IDB4MDBGRjAwRkY7CS8qIHJlc2VzdCB0byByZWFkIG1vZGUgICAgICAgICAgKi8KLQotCQkJcHJpbnRmICgiIGRvbmVcbiIpOwotCQl9Ci0JfQotCXJldHVybiByY29kZTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29weSBtZW1vcnkgdG8gZmxhc2gsIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICogNCAtIEZsYXNoIG5vdCBpZGVudGlmaWVkCi0gKi8KLQotaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqaW5mbywgdWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQotewotCXVsb25nIGNwLCB3cDsKLQlGUFcgZGF0YTsKLQlpbnQgY291bnQsIGksIGwsIHJjLCBwb3J0X3dpZHRoOwotCi0JaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJcmV0dXJuIDQ7Ci0JfQotLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCi0jaWZkZWYgRkxBU0hfUE9SVF9XSURUSDE2Ci0Jd3AgPSAoYWRkciAmIH4xKTsKLQlwb3J0X3dpZHRoID0gMjsKLSNlbHNlCi0Jd3AgPSAoYWRkciAmIH4zKTsKLQlwb3J0X3dpZHRoID0gNDsKLSNlbmRpZgotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHN0YXJ0IGJ5dGVzCi0JICovCi0JaWYgKChsID0gYWRkciAtIHdwKSAhPSAwKSB7Ci0JCWRhdGEgPSAwOwotCQlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgbDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKSBjcCk7Ci0JCX0KLQkJZm9yICg7IGkgPCBwb3J0X3dpZHRoICYmIGNudCA+IDA7ICsraSkgewotCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotCQkJLS1jbnQ7Ci0JCQkrK2NwOwotCQl9Ci0JCWZvciAoOyBjbnQgPT0gMCAmJiBpIDwgcG9ydF93aWR0aDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKSBjcCk7Ci0JCX0KLQotCQlpZiAoKHJjID0gd3JpdGVfZGF0YSAoaW5mbywgd3AsIFNXQVAgKGRhdGEpKSkgIT0gMCkgewotCQkJcmV0dXJuIChyYyk7Ci0JCX0KLQkJd3AgKz0gcG9ydF93aWR0aDsKLQl9Ci0KLQkvKgotCSAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAotCSAqLwotCWNvdW50ID0gMDsKLQl3aGlsZSAoY250ID49IHBvcnRfd2lkdGgpIHsKLQkJZGF0YSA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBwb3J0X3dpZHRoOyArK2kpIHsKLQkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLQkJfQotCQlpZiAoKHJjID0gd3JpdGVfZGF0YSAoaW5mbywgd3AsIFNXQVAgKGRhdGEpKSkgIT0gMCkgewotCQkJcmV0dXJuIChyYyk7Ci0JCX0KLQkJd3AgKz0gcG9ydF93aWR0aDsKLQkJY250IC09IHBvcnRfd2lkdGg7Ci0JCWlmIChjb3VudCsrID4gMHg4MDApIHsKLQkJCXNwaW5fd2hlZWwgKCk7Ci0JCQljb3VudCA9IDA7Ci0JCX0KLQl9Ci0KLQlpZiAoY250ID09IDApIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci0KLQkvKgotCSAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcwotCSAqLwotCWRhdGEgPSAwOwotCWZvciAoaSA9IDAsIGNwID0gd3A7IGkgPCBwb3J0X3dpZHRoICYmIGNudCA+IDA7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0JCS0tY250OwotCX0KLQlmb3IgKDsgaSA8IHBvcnRfd2lkdGg7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKSBjcCk7Ci0JfQotCi0JcmV0dXJuICh3cml0ZV9kYXRhIChpbmZvLCB3cCwgU1dBUCAoZGF0YSkpKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogV3JpdGUgYSB3b3JkIG9yIGhhbGZ3b3JkIHRvIEZsYXNoLCByZXR1cm5zOgotICogMCAtIE9LCi0gKiAxIC0gd3JpdGUgdGltZW91dAotICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqLwotc3RhdGljIGludCB3cml0ZV9kYXRhIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIEZQVyBkYXRhKQotewotCUZQV1YgKmFkZHIgPSAoRlBXViAqKSBkZXN0OwotCXVsb25nIHN0YXR1czsKLQl1bG9uZyBzdGFydDsKLQotCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwotCWlmICgoKmFkZHIgJiBkYXRhKSAhPSBkYXRhKSB7Ci0JCXByaW50ZiAoIm5vdCBlcmFzZWQgYXQgJTA4bHggKCVseClcbiIsICh1bG9uZykgYWRkciwgKmFkZHIpOwotCQlyZXR1cm4gKDIpOwotCX0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLQlkaXNhYmxlX2ludGVycnVwdHMoKTsKLQotCSphZGRyID0gKEZQVykgMHgwMDQwMDA0MDsJLyogd3JpdGUgc2V0dXAgKi8KLQkqYWRkciA9IGRhdGE7Ci0KLQkvKiBhcm0gc2ltcGxlLCBub24gaW50ZXJydXB0IGRlcGVuZGVudCB0aW1lciAqLwotCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOwotCi0JLyogd2FpdCB3aGlsZSBwb2xsaW5nIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKi8KLQl3aGlsZSAoKChzdGF0dXMgPSAqYWRkcikgJiAoRlBXKSAweDAwODAwMDgwKSAhPSAoRlBXKSAweDAwODAwMDgwKSB7Ci0JCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUKSB7Ci0JCQkqYWRkciA9IChGUFcpIDB4MDBGRjAwRkY7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCi0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JfQotCi0JKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLwotCi0JcmV0dXJuICgwKTsKLX0KLQotdm9pZCBpbmxpbmUgc3Bpbl93aGVlbCAodm9pZCkKLXsKLQlzdGF0aWMgaW50IHAgPSAwOwotCXN0YXRpYyBjaGFyIHdbXSA9ICJcXC8tIjsKLQotCXByaW50ZiAoIlwwMTAlYyIsIHdbcF0pOwotCSgrK3AgPT0gMykgPyAocCA9IDApIDogMDsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2x1YmJvY2svbHViYm9jay5jIGIvYm9hcmQvbHViYm9jay9sdWJib2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkYWZmOWEuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbHViYm9jay9sdWJib2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBLeWxlIEhhcnJpcywgTmV4dXMgVGVjaG5vbG9naWVzLCBJbmMuIGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQKLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgotICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxuZXRkZXYuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9weGEuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtbW1jLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCi0vKgotICogTWlzY2VsYW5lb3VzIHBsYXRmb3JtIGRlcGVuZGVudCBpbml0aWFsaXNhdGlvbnMKLSAqLwotCi1pbnQgYm9hcmRfaW5pdCAodm9pZCkKLXsKLQkvKiBXZSBoYXZlIFJBTSwgZGlzYWJsZSBjYWNoZSAqLwotCWRjYWNoZV9kaXNhYmxlKCk7Ci0JaWNhY2hlX2Rpc2FibGUoKTsKLQotCS8qIGFyY2ggbnVtYmVyIG9mIEx1YmJvY2stQm9hcmQgKi8KLQlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX0xVQkJPQ0s7Ci0KLQkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCi0JZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IDB4YTAwMDAxMDA7Ci0KLQkvKiBDb25maWd1cmUgR1BJTzYgYW5kIEdQSU84IGFzIE9VVCwgQUYxLiAqLwotCXNldGJpdHNfbGUzMihHUERSMCwgKDEgPDwgNikgfCAoMSA8PCA4KSk7Ci0JY2xyc2V0Yml0c19sZTMyKEdBRlIwX0wsICgzIDw8IDEyKSB8ICgzIDw8IDE2KSwgKDEgPDwgMTIpIHwgKDEgPDwgMTYpKTsKLQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX0NNRF9NTUMKLWludCBib2FyZF9tbWNfaW5pdChiZF90ICpiaXMpCi17Ci0JcHhhX21tY19yZWdpc3RlcigwKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1pbnQgYm9hcmRfbGF0ZV9pbml0KHZvaWQpCi17Ci0Jc2V0ZW52KCJzdGRvdXQiLCAic2VyaWFsIik7Ci0Jc2V0ZW52KCJzdGRlcnIiLCAic2VyaWFsIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBkcmFtX2luaXQodm9pZCkKLXsKLQlweGEyeHhfZHJhbV9pbml0KCk7Ci0JZ2QtPnJhbV9zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHJhbV9pbml0X2JhbmtzaXplKHZvaWQpCi17Ci0JZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTV8xOwotCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7Ci19Ci0KLSNpZmRlZiBDT05GSUdfQ01EX05FVAotaW50IGJvYXJkX2V0aF9pbml0KGJkX3QgKmJpcykKLXsKLQlpbnQgcmMgPSAwOwotI2lmZGVmIENPTkZJR19MQU45MUM5NgotCXJjID0gbGFuOTFjOTZfaW5pdGlhbGl6ZSgwLCBDT05GSUdfTEFOOTFDOTZfQkFTRSk7Ci0jZW5kaWYKLQlyZXR1cm4gcmM7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21ieDh4eC9NYWtlZmlsZSBiL2JvYXJkL21ieDh4eC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA3NGI2Yi4uMDAwMDAwMAotLS0gYS9ib2FyZC9tYng4eHgvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKLSMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSMKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0jCi0KLW9iai15CT0gbWJ4OHh4Lm8gZmxhc2gubyB2cGQubyBwY21jaWEubwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWJ4OHh4L1JFQURNRSBiL2JvYXJkL21ieDh4eC9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ODlmZTkuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbWJ4OHh4L1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLUlNUE9SVEFOVCBOT1RFIC0gcmVhZCBiZWZvcmUgZGVmaW5pbmcgQ09ORklHX1NZU19VU0VfT1NDQ0xLIGluIHlvdXIgYm9hcmQKLQkJIGNvbmZpZyBmaWxlISEhCi0KLQotV0FSTklORzogV3Jvbmcgc2V0dGluZ3Mgb2YgdGhpcyBwYXJhbWV0ZXIgaGF2ZSB0aGUgcG90ZW50aWFsIHRvCi1kYW1hZ2UgaGFyZHdhcmUgYnkgcnVubmluZyB0aGUgTUJYJ3MgQ1BVIGF0IGZyZXF1ZW5jaWVzIHRoYXQgZXhjZWVkCi1pdCdzIHJhdGluZyBhbmQvb3Igb3ZlcmRyaXZpbmcgdGhlIGl0J3MgU1BMTCEKLQotCi1SYW1ibGluZ3M6Ci0xKSBNb3Rvcm9sYSBvZmZlcmVkIDEyIGRpZmZlcmVudCB2YXJpYW50cyBvZiB0aGUgTUJYLCA2IDgyM3MgYW5kIDYgODYwcy4KLTIpIE9mIHRoZXNlIDEyIHZhcmlhbnRzLCBvbmx5IDIgd2VyZSBlbnRyeSBsZXZlbCBib2FyZHMuCi0zKSBJIGJlbGlldmUgdGhhdCB0aGUgMiBlbnRyeSBsZXZlbCBib2FyZHMgd2VyZSB0aGUgb25seSBvbmVzIHRoYXQKLSAgIHVzZWQgT1NDTSBjbG9ja2luZy4gSSBjYW4ndCBiZSBjb21wbGV0ZWx5IGNlcnRhaW4gb2YgdGhpcyBhdCB0aGlzCi0gICBwb2ludC4KLTQpIE1vdG9yb2xhIG5ldmVyIG9mZmVyZWQgYW4gTUJYIHRoYXQgcmFuIGZhc3RlciB0aGFuIDUwTWh6LgotNSkgVGhlIDEwLCBub24tZW50cnkgbGV2ZWwgYm9hcmRzLCByYW4gYXQgNDBNaHouCi02KSBUaGUgRVhUQ0xLIGlucHV0IGhhcyBhIG1pbmltdW0gY2xvY2sgb2YgMTVNaHogZm9yIHRoZSA4MjMvODYwLgotNykgTW90b3JvbGEgbm8gbG9uZ2VyIHNlbGxzIE1CWHMuCi0KLUJhc2VkIG9uIHRoaXMgaW5mb3JtYXRpb24sIEkgY2FuIHN1cm1pc2UgdGhhdCB0aGUgZGVmYXVsdCBwb3dlci1vbgotcmVzZXQgY2xvY2tpbmcgd2FzIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRocmVlIG9wdGlvbnMuCi0KLU11bHRpcGxpZXIgICAgICAgU1BMTCBPcHRpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTUxMyAgICAgICAgICAgICAgT1NDTSBpcyBTUExMIGlucHV0Ci01ICAgICAgICAgICAgICAgIE9TQ00gaXMgU1BMTCBpbnB1dAotMSAgICAgICAgICAgICAgICBFWFRDTEsgaXMgU1BMTCBpbnB1dAotCi1UaGUgZm9ydGggb3B0aW9uOgotCi01ICAgICAgICAgICAgICAgIEVYVENMSyBpcyBTUExMIGlucHV0Ci0KLWlzIG5vdCBwb3NzaWJsZSBvbiBNQlhzLiBUaGlzIGlzIGJlY2F1c2UgdGhlIG1pbmltdW0gRVhUQ0xLIGlucHV0Ci1mcmVxdWVuY3kgaXMgMTVNaHouIDUgKiAxNU1oeiA9IDc1IE1oei4gVGhlcmUgd2FzIG5vIHZhcmlhbnQgdGhhdCByYW4KLWFib3ZlIDUwIE1oei4KLQotVGhlIGJvYXJkIEkgaGF2ZSBib3Jyb3dlZCBkZWZpbml0ZWx5IHVzZXMgYSBtdWx0aXBsaWVyIG9mIDEgZm9yCi1FWFRDTEsgYW5kIHJ1bnMgYXQgNDBNaHouIEkgZXZlbiB3ZW50IHNvIGZhciBhcyB0byBwdXQgYSBzY29wZSBvbiBpdC4KLQotT25lIG9mIHRoZSB0d28gZGVmYXVsdCBPU0NNIG1vZGVzIGFyZSBtb3N0IGxpa2VseSB3aGF0IHdhcyB1c2VkIG9uCi10aGUgZW50cnkgbGV2ZWwgYm9hcmRzIHRvIGNoZWFwZW4gdGhlbSBieSBlbGltaW5hdGluZyB0aGUgZXh0ZXJuYWwKLWNyeXN0YWwgb3NjaWxsYXRvci4KLQotVG8gYWRkIGluc3VsdCB0byBpbmp1cnksIHRoZSBzdHVwaWQgODYwIFBMUFJDUiByZWdpc3RlciByZXRhaW5zIGl0J3MKLW11bHRpcGxpY2F0aW9uIGZhY3RvciB0aHJvdWdoIGhhcmQgcmVzZXRzLiBZb3UgY2FuJ3QgY2xlYXIgaXQgb3V0Ci1iZWNhdXNlIGl0IGlzIGJhdHRlcnkgYmFja2VkIGFuZCBvbmNlIGl0IGlzIHNldCB3cm9uZywgaXQgc3RheXMKLXdyb25nLiBUaGUgb25seSB3YXkgdG8gcmVzZXQgaXQsIHNvIHRoYXQgaXQgdGFrZXMgb24gaXQncyBkZWZhdWx0Ci1tdWx0aXBsaWVyIGlzIHRvIGRpc2Nvbm5lY3QgYWxsIHBvd2VyIGluY2x1ZGluZyBleHRlcm5hbCwgYmF0dGVyaWVzLAotYXMgd2VsbCBkaXNjaGFyZ2luZyBjYXBzIG9uIHRoZSBib2FyZC4gVGhpcyBwcmVjbHVkZXMgdGhlIGZhY3QgdGhhdAoteW91ciA4NjAgbWF5IGJlIHF1aXRlIERFQUQgYnkgdGhpcyB0aW1lIQotCi1JZiB5b3UgZG9uJ3Qgc2V0dXAgdGhlIG11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IgYm9hcmRzIHRoYXQgdXNlIHRoZQotT1NDTSBpbnB1dCwgdGhleSB3b24ndCBydW4gY29ycmVjdGx5LCBidXQgYXQgbGVhc3QgdGhleSB3b24ndCBiZQotZGVhZC4KLQotQWRkdGlvbmFsbHksIHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIGRldGVybWluZSB0aGUgY2xvY2sgaW5wdXQgc291cmNlCi1mcm9tIENQVSByZWdpc3RlciBkYXRhLiBUaGUgb25seSB3YXkgdG8gZGVhbCB3aXRoIHRoaXMgaXMgZWl0aGVyIGhhcmQKLWNvZGUgaXQsIGRldGVybWluZSB0aGUgY29ycmVjdCB2YWx1ZSB3aXRoIHNvbWUgcmF0aGVyIE5BU1RZIHRpbWluZwotbG9vcHMsIG9yIHRyeSB0byBncm9rIGl0IGZyb20gZXh0ZXJuYWwgZGF0YSBzb3VyY2VzLiBNb3Rvcm9sYQotZmlybXdhcmUgb3B0cyBmb3IgdGhlIE5BU1RZIHRpbWluZyBsb29wcywgYnV0IG5lZWRzIHRvIGNvbmZpZ3VyZSB0aGUKLXNlcmlhbCBwb3J0cyB0byBkbyBzby4KLQotCi1Zb3UgbWF5IGhhdmUgYSBsZWdpdGltYXRlIG5lZWQgdG8gZGVmaW5lIENPTkZJR19TWVNfVVNFX09TQ0NMSyBpZiB5b3VyCi1NQlg4eHggYm9hcmQgaXMgdXNpbmcgdGhlIE9TQ00gY2xvY2tpbmcgbW9kZS4KLQotWW91IGJldHRlciBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBoZXJlLgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWJ4OHh4L2Nzci5oIGIvYm9hcmQvbWJ4OHh4L2Nzci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzcwNjA5Li4wMDAwMDAwCi0tLSBhL2JvYXJkL21ieDh4eC9jc3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLSNpZm5kZWYgX19jc3JfaAotI2RlZmluZSBfX2Nzcl9oCi0KLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgotICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgotICoKLSAqIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIE1CWAotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLS8qIGJpdHMgZm9yIGNvbnRyb2wgcmVnaXN0ZXIgIzEgLyBzdGF0dXMgcmVnaXN0ZXIgIzEgKi8KLSNkZWZpbmUgQ1NSMV9FVEVOICAgICAgIDB4ODAgICAgLyogRXRoZXJuZXQgVHJhbnNjZWl2ZXIgRW5hYmxlZCAgICAgICAgICAgICAqLwotI2RlZmluZSBDU1IxX0VMRU4gICAgICAgMHg0MCAgICAvKiBFdGhlcm5ldCBYQ1ZSIGluIEludGVybmFsIExvb3BiYWNrICAgICAgICovCi0jZGVmaW5lIENTUjFfRUFFTiAgICAgICAweDIwICAgIC8qIEF1dG8gc2VsZWN0aW9uIFRQL0FVSSBFbmFibGVkICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ1NSMV9UUEVOICAgICAgIDB4MTAgICAgLyogVFAgbWFudWFsbHkgc2VsZWN0ZWQgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBDU1IxX0ZERElTICAgICAgMHgwOCAgICAvKiBGdWxsIER1cGxleCBNb2RlIGRpc2FibGVkICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENTUjFfRkNURU4gICAgICAweDA0ICAgIC8qIENvbGxpc2lvbiBUZXN0aW5nIG9mIFhDVlIgZGlzYWJsZWQgICAgICAgKi8KLSNkZWZpbmUgQ1NSMV9DT00xRU4gICAgIDB4MDIgICAgLyogQ09NMSBzaWduYWxzIHJvdXRlZCB0byBSUzIzMiBUcmFuc2NlaXZlciAqLwotI2RlZmluZSBDU1IxX1hDVlJESVMgICAgMHgwMSAgICAvKiBPbmJvYXJkIFJTMjMyIFRyYW5zY2VpdmVyIERpc2FibGVkICAgICAgICovCi0KLS8qIGJpdHMgZm9yIGNvbnRyb2wgcmVnaXN0ZXIgIzIgKi8KLSNkZWZpbmUgQ1IyX1ZERFNFTCAgICAgIDB4QzAgICAgLyogUENNQ0lBIFN1cHBseSBWb2x0YWdlICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBDUjJfVlBQU0VMICAgICAgMHgzMCAgICAvKiBQQ01DSUEgUHJvZ3JhbW1pbmcgVm9sdGFnZSAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENSMl9CUkRGQUlMICAgICAweDA4ICAgIC8qIEJvYXJkIGZhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ1IyX1NXUzEgICAgICAgIDB4MDQgICAgLyogU29mdHdhcmUgU3RhdHVzICMyIExFRCAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBDUjJfU1dTMiAgICAgICAgMHgwMiAgICAvKiBTb2Z0d2FyZSBTdGF0dXMgIzIgTEVEICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENSMl9RU1BBTlJTVCAgICAweDAxICAgIC8qIFJlc2V0IFFTUEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotLyogYml0cyBmb3Igc3RhdHVzIHJlZ2lzdGVyICMyICovCi0jZGVmaW5lIFNSMl9WRERTRUwgICAgICAweEMwICAgIC8qIFBDTUNJQSBTdXBwbHkgVm9sdGFnZSAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgU1IyX1ZQUFNFTCAgICAgIDB4MzAgICAgLyogUENNQ0lBIFByb2dyYW1taW5nIFZvbHRhZ2UgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTUjJfQkFUR0QgICAgICAgMHgwOCAgICAvKiBMb3cgVm9sdGFnZSBpbmRpY2F0aW9uIGZvciBvbmJvYXJkIGJhdCAgICovCi0jZGVmaW5lIFNSMl9OVkJBVEdEICAgICAweDA0ICAgIC8qIExvdyBWb2x0YWdlIGluZGljYXRpb24gZm9yIE5WUkFNICAgICAgICAgKi8KLSNkZWZpbmUgU1IyX1JEWSAgICAgICAgIDB4MDIgICAgLyogRmxhc2ggcHJvZ3JhbW1pbmcgc3RhdHVzIGJpdCAgICAgICAgICAgICAqLwotI2RlZmluZSBTUjJfRlQgICAgICAgICAgMHgwMSAgICAvKiBSZXNlcnZlZCBmb3IgRmFjdG9yeSB0ZXN0IHB1cnBvc2VzICAgICAgICovCi0KLSNkZWZpbmUgTUJYX0NTUjEgKCooKHVjaGFyICopQ09ORklHX1NZU19DU1JfQkFTRSkpCi0jZGVmaW5lIE1CWF9DU1IyICgqKCh1Y2hhciAqKUNPTkZJR19TWVNfQ1NSX0JBU0UgKyAxKSkKLQotI2VuZGlmIC8qIF9fY3NyX2ggKi8KZGlmZiAtLWdpdCBhL2JvYXJkL21ieDh4eC9kaW1tLmggYi9ib2FyZC9tYng4eHgvZGltbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDBmMTEyLi4wMDAwMDAwCi0tLSBhL2JvYXJkL21ieDh4eC9kaW1tLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0jaWZuZGVmIF9fZGltbV9oCi0jZGVmaW5lIF9fZGltbV9oCi0KLS8qCi0gKiBNb2R1bGUgbmFtZTogJU0lCi0gKiBEZXNjcmlwdGlvbjoKLSAqIFNlcmlhbCBQcmVzZW5jZSBEZXRlY3QgRGVmaW5pdGlvbnMgTW9kdWxlCi0gKiBTQ0NTIGlkZW50aWZpY2F0aW9uOiAlSSUKLSAqIEJyYW5jaDogJUIlCi0gKiBTZXF1ZW5jZTogJVMlCi0gKiBEYXRlIG5ld2VzdCBhcHBsaWVkIGRlbHRhIHdhcyBjcmVhdGVkIChNTS9ERC9ZWSk6ICVHJQotICogVGltZSBuZXdlc3QgYXBwbGllZCBkZWx0YSB3YXMgY3JlYXRlZCAoSEg6TU06U1MpOiAlVSUKLSAqIFNDQ1MgZmlsZSBuYW1lICVGJQotICogRnVsbHkgcXVhbGlmaWVkIFNDQ1MgZmlsZSBuYW1lOgotICogJVAlCi0gKiBDb3B5cmlnaHQ6Ci0gKiAoQykgQ09QWVJJR0hUIE1PVE9ST0xBLCBJTkMuIDE5OTYKLSAqIEFMTCBSSUdIVFMgUkVTRVJWRUQKLSAqIE5vdGVzOgotICogMS4gQWxsIGRhdGEgd2FzIHRha2VuIGZyb20gYW4gSUJNIGFwcGxpY2F0aW9uIG5vdGUgdGl0bGVkCi0gKiAiU2VyaWFsIFByZXNlbmNlIERldGVjdCBEZWZpbml0aW9ucyIuCi0gKiBIaXN0b3J5OgotICogRGF0ZSBXaG8KLSAqCi0gKiAxMC8yNC85NiBSb2IgQmF4dGVyCi0gKiBJbml0aWFsIHJlbGVhc2UuCi0gKgotICovCi0KLS8qCi0gKiBzZXJpYWwgUEQgYnl0ZSBhc3NpZ25tZW50IGFkZHJlc3MgbWFwICgyNTYgYnl0ZSBFRVBST00pCi0gKi8KLXR5cGVkZWYgc3RydWN0IGRpbW0KLXsKLQl1Y2hhciBuX2J5dGVzOyAvKiAwMCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi91c2VkICovCi0JdWNoYXIgdF9ieXRlczsgLyogMDEgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIHNlcmlhbCBQRCBkZXZpY2UgKi8KLQl1Y2hhciBmbXQ7IC8qIDAyIGZ1bmRhbWVudGFsIG1lbW9yeSB0eXBlIChGUE0vRURPL1NEUkFNKSAqLwotCXVjaGFyIG5fcm93OyAvKiAwMyBudW1iZXIgb2Ygcm93cyAqLwotCXVjaGFyIG5fY29sOyAvKiAwNCBudW1iZXIgb2YgY29sdW1ucyAqLwotCXVjaGFyIG5fYmFua3M7IC8qIDA1IG51bWJlciBvZiBiYW5rcyAqLwotCXVjaGFyIGRhdGFfd19sbzsgLyogMDYgZGF0YSB3aWR0aCAqLwotCXVjaGFyIGRhdGFfd19oaTsgLyogMDcgZGF0YSB3aWR0aCAqLwotCXVjaGFyIGlmbDsgLyogMDggaW50ZXJmYWNlIGxldmVscyAqLwotCXVjaGFyIGFfcmFzOyAvKiAwOSBSQVMgYWNjZXNzICovCi0JdWNoYXIgYV9jYXM7IC8qIDBBIENBUyBhY2Nlc3MgKi8KLQl1Y2hhciBjdDsgLyogMEIgY29uZmlndXJhdGlvbiB0eXBlIChub24tcGFyaXR5L3Bhcml0eS9FQ0MpICovCi0JdWNoYXIgcmVmcmVzaF9ydDsgLyogMEMgcmVmcmVzaCByYXRlL3R5cGUgKi8KLQl1Y2hhciBwX2RyYW1fbzsgLyogMEQgcHJpbWFyeSBEUkFNIG9yZ2FuaXphdGlvbiAqLwotCXVjaGFyIHNfZHJhbV9vOyAvKiAwRSBzZWNvbmRhcnkgRFJBTSBvcmdhbml6YXRpb24gKHBhcml0eS9FQ0MtY2hlY2tiaXRzKSAqLwotCXVjaGFyIHJlc2VydmVkWzE3XTsgLyogMEYgcmVzZXJ2ZWQgZmllbGRzIGZvciBmdXR1cmUgb2ZmZXJpbmdzICovCi0JdWNoYXIgc3NfaW5mb1szMl07IC8qIDIwIHN1cGVyc2V0IGluZm9ybWF0aW9uIChtYXkgYmUgdXNlZCBpbiB0aGUgZnV0dXJlKSAqLwotCXVjaGFyIG1faW5mb1s2NF07IC8qIDQwIG1hbnVmYWN0dXJlciBpbmZvcm1hdGlvbiAob3B0aW9uYWwpICovCi0JdWNoYXIgdW51c2VkWzEyOF07IC8qIDgwIHVudXNlZCBzdG9yYWdlIGxvY2F0aW9ucyAqLwotfSBkaW1tX3Q7Ci0KLS8qCi0gKiBtZW1vcnkgdHlwZSBkZWZpbml0aW9ucwotICovCi0jZGVmaW5lIERJTU1fTVRfRlBNIDEgLyogc3RhbmRhcmQgRlBNIChmYXN0IHBhZ2UgbW9kZSkgRFJBTSAqLwotI2RlZmluZSBESU1NX01UX0VETyAyIC8qIEVETyAoZXh0ZW5kZWQgZGF0YSBvdXQpICovCi0jZGVmaW5lIERJTU1fTVRfUE4gMyAvKiBwaXBlbGluZWQgbmliYmxlICovCi0jZGVmaW5lIERJTU1fTVRfU0RSQU0gNCAvKiBTRFJBTSAoc3luY2hyb25vdXMgRFJBTSkgKi8KLQotLyoKLSAqIHJvdyBhZGRyZXNzZXMgZGVmaW5pdGlvbnMKLSAqLwotI2RlZmluZSBESU1NX1JBX1JETkROVCAoMTw8NykgLyogcmVkdW5kYW50IGFkZHJlc3NpbmcgKi8KLSNkZWZpbmUgRElNTV9SQV9NQVNLIDB4N2YgLyogbnVtYmVyIG9mIHJvdyBhZGRyZXNzZXMgbWFzayAqLwotCi0vKgotICogbW9kdWxlIGludGVyZmFjZSBsZXZlbHMgZGVmaW5pdGlvbnMKLSAqLwotI2RlZmluZSBESU1NX0lGTF9UVEwgMCAvKiBUVEwvNVYgdG9sZXJhbnQgKi8KLSNkZWZpbmUgRElNTV9JRkxfTFZUVEwgMSAvKiBMVlRUTCAobm90IDVWIHRvbGVyYW50KSAqLwotI2RlZmluZSBESU1NX0lGTF9IU1RMMTUgMiAvKiBIU1RMIDEuNSAqLwotI2RlZmluZSBESU1NX0lGTF9TU1RMMzMgMyAvKiBTU1RMIDMuMyAqLwotI2RlZmluZSBESU1NX0lGTF9TU1RMMjUgNCAvKiBTU1RMIDIuNSAqLwotCi0vKgotICogRElNTSBjb25maWd1cmF0aW9uIHR5cGUgZGVmaW5pdGlvbnMKLSAqLwotI2RlZmluZSBESU1NX0NUX05PTkUgMCAvKiBub25lICovCi0jZGVmaW5lIERJTU1fQ1RfUEFSSVRZIDEgLyogcGFyaXR5ICovCi0jZGVmaW5lIERJTU1fQ1RfRUNDIDIgLyogRUNDICovCi0KLS8qCi0gKiByb3cgYWRkcmVzc2VzIGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgRElNTV9SUlRfU1IgKDE8PDcpIC8qIHNlbGYgcmVmcmVzaCBmbGFnICovCi0jZGVmaW5lIERJTU1fUlJUX01BU0sgMHg3ZiAvKiByZWZyZXNoIHJhdGUgbWFzayAqLwotI2RlZmluZSBESU1NX1JSVF9OUk1MIDB4MDAgLyogbm9ybWFsICgxNS42MjV1cykgKi8KLSNkZWZpbmUgRElNTV9SUlRfUl8zXzkgMHgwMSAvKiByZWR1Y2VkIC4yNXggKDMuOXVzKSAqLwotI2RlZmluZSBESU1NX1JSVF9SXzdfOCAweDAyIC8qIHJlZHVjZWQgLjV4ICg3Ljh1cykgKi8KLSNkZWZpbmUgRElNTV9SUlRfRV8zMV8zIDB4MDMgLyogZXh0ZW5kZWQgMnggKDMxLjN1cykgKi8KLSNkZWZpbmUgRElNTV9SUlRfRV82Ml81IDB4MDQgLyogZXh0ZW5kZWQgNHggKDYyLjV1cykgKi8KLSNkZWZpbmUgRElNTV9SUlRfRV8xMjUgMHgwNSAvKiBleHRlbmRlZCA4eCAoMTI1dXMpICovCi0KLSNlbmRpZiAvKiBfX2RpbW1faCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWJ4OHh4L2ZsYXNoLmMgYi9ib2FyZC9tYng4eHgvZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEwNzE1Mi4uMDAwMDAwMAotLS0gYS9ib2FyZC9tYng4eHgvZmxhc2guYworKysgL2Rldi9udWxsCkBAIC0xLDM5MiArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+Ci0gKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogRmxhc2ggUm91dGluZXMgZm9yIEFNMjkwWzQ4XTBCIGRldmljZXMKLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8bXBjOHh4Lmg+Ci0jaW5jbHVkZSAidnBkLmgiCi0KLWZsYXNoX2luZm9fdAlmbGFzaF9pbmZvW0NPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTXTsgLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMJKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRnVuY3Rpb25zCi0gKi8KLQotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplICh2dV9sb25nICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pOwotc3RhdGljIGludCB3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotdW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKQotewotICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdG90c2l6ZTsKLSAgICBpbnQgaTsKLSAgICB1bG9uZyBhZGRyOwotCi0gICAgLyogSW5pdDogbm8gRkxBU0hlcyBrbm93biAqLwotICAgIGZvciAoaT0wOyBpPENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTOyArK2kpIHsKLQlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKLSAgICB9Ci0KLSAgICB0b3RzaXplID0gMDsKLSAgICBhZGRyID0gMHhmYzAwMDAwMDsKLSAgICBmb3IoaSA9IDA7IGkgPCBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUzsgaSsrKSB7Ci0Jc2l6ZSA9IGZsYXNoX2dldF9zaXplKCh2dV9sb25nICopYWRkciwgJmZsYXNoX2luZm9baV0pOwotCWlmIChmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pCi0JICBicmVhazsKLQl0b3RzaXplICs9IHNpemU7Ci0JYWRkciArPSBzaXplOwotICAgIH0KLQotICAgIGFkZHIgPSAweGZlMDAwMDAwOwotICAgIGZvcihpID0gMDsgaSA8IENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTOyBpKyspIHsKLQotCXNpemUgPSBmbGFzaF9nZXRfc2l6ZSgodnVfbG9uZyAqKWFkZHIsICZmbGFzaF9pbmZvW2ldKTsKLQlpZiAoZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKQotCSAgYnJlYWs7Ci0JdG90c2l6ZSArPSBzaXplOwotCWFkZHIgKz0gc2l6ZTsKLSAgICB9Ci0KLSNpZiBDT05GSUdfU1lTX01PTklUT1JfQkFTRSA+PSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UKLSAgICAvKiBtb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLwotICAgIGZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLQkJICBDT05GSUdfU1lTX01PTklUT1JfQkFTRSwKLQkJICBDT05GSUdfU1lTX01PTklUT1JfQkFTRSttb25pdG9yX2ZsYXNoX2xlbi0xLAotCQkgICZmbGFzaF9pbmZvWzBdKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuICh0b3RzaXplKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi12b2lkIGZsYXNoX3ByaW50X2luZm8gIChmbGFzaF9pbmZvX3QgKmluZm8pCi17Ci0gICAgaW50IGk7Ci0KLSAgICBpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKLQlyZXR1cm47Ci0gICAgfQotCi0gICAgc3dpdGNoIChpbmZvLT5mbGFzaF9pZCA+PiAxNikgewotICAgIGNhc2UgMHgxOgotCXByaW50ZiAoIkFNRCAiKTsKLQlicmVhazsKLSAgICBkZWZhdWx0OgotCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOwotCWJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewotICAgIGNhc2UgQU1EX0lEX0YwNDBCOgotCXByaW50ZiAoIkFNMjlGMDQwQiAoNCBNYml0KVxuIik7Ci0JYnJlYWs7Ci0gICAgY2FzZSBBTURfSURfRjA4MEI6Ci0JcHJpbnRmICgiQU0yOUYwODBCICg4IE1iaXQpXG4iKTsKLQlicmVhazsKLSAgICBjYXNlIEFNRF9JRF9GMDE2RDoKLQlwcmludGYgKCJBTTI5RjAxNkQgKDE2IE1iaXQpXG4iKTsKLQlicmVhazsKLSAgICBkZWZhdWx0OgotCXByaW50ZiAoIlVua25vd24gQ2hpcCBUeXBlXG4iKTsKLQlicmVhazsKLSAgICB9Ci0KLSAgICBwcmludGYgKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAotCSAgICBpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOwotCi0gICAgcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwotICAgIGZvciAoaT0wOyBpPGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSB7Ci0JaWYgKChpICUgNSkgPT0gMCkKLQkgIHByaW50ZiAoIlxuICAgIik7Ci0JcHJpbnRmICgiICUwOGxYJXMiLAotCQlpbmZvLT5zdGFydFtpXSwKLQkJaW5mby0+cHJvdGVjdFtpXSA/ICIgKFJPKSIgOiAiICAgICAiCi0JCSk7Ci0gICAgfQotICAgIHByaW50ZiAoIlxuIik7Ci0gICAgcmV0dXJuOwotfQotCi0vKgotICogVGhlIGZvbGxvd2luZyBjb2RlIGNhbm5vdCBiZSBydW4gZnJvbSBGTEFTSCEKLSAqLwotCi1zdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKHZ1X2xvbmcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLSAgICBzaG9ydCBpOwotICAgIHVsb25nIHZlbmRvciwgZGV2aWQ7Ci0gICAgdWxvbmcgYmFzZSA9ICh1bG9uZylhZGRyOwotCi0gICAgLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZDogcmVhZCBNYW51ZmFjdHVyZXIgSUQgKi8KLSAgICBhZGRyWzB4MDU1NV0gPSAweEFBQUFBQUFBOwotICAgIGFkZHJbMHgwMkFBXSA9IDB4NTU1NTU1NTU7Ci0gICAgYWRkclsweDA1NTVdID0gMHg5MDkwOTA5MDsKLQotICAgIHZlbmRvciA9IGFkZHJbMF07Ci0gICAgZGV2aWQgPSBhZGRyWzFdICYgMHhmZjsKLQotICAgIC8qIG9ubHkgc3VwcG9ydCBBTUQgKi8KLSAgICBpZiAodmVuZG9yICE9IDB4MDEwMTAxMDEpIHsKLQlyZXR1cm4gMDsKLSAgICB9Ci0KLSAgICB2ZW5kb3IgJj0gMHhmOwotICAgIGRldmlkICY9IDB4ZmY7Ci0KLSAgICBpZiAoZGV2aWQgPT0gQU1EX0lEX0YwNDBCKSB7Ci0JaW5mby0+Zmxhc2hfaWQgICAgID0gdmVuZG9yIDw8IDE2IHwgZGV2aWQ7Ci0JaW5mby0+c2VjdG9yX2NvdW50ID0gODsKLQlpbmZvLT5zaXplICAgICAgICAgPSBpbmZvLT5zZWN0b3JfY291bnQgKiAweDEwMDAwOwotICAgIH0KLSAgICBlbHNlIGlmIChkZXZpZCA9PSBBTURfSURfRjA4MEIpIHsKLQlpbmZvLT5mbGFzaF9pZCAgICAgPSB2ZW5kb3IgPDwgMTYgfCBkZXZpZDsKLQlpbmZvLT5zZWN0b3JfY291bnQgPSAxNjsKLQlpbmZvLT5zaXplICAgICAgICAgPSA0ICogaW5mby0+c2VjdG9yX2NvdW50ICogMHgxMDAwMDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGV2aWQgPT0gQU1EX0lEX0YwMTZEKSB7Ci0JaW5mby0+Zmxhc2hfaWQgICAgID0gdmVuZG9yIDw8IDE2IHwgZGV2aWQ7Ci0JaW5mby0+c2VjdG9yX2NvdW50ID0gMzI7Ci0JaW5mby0+c2l6ZSAgICAgICAgID0gNCAqIGluZm8tPnNlY3Rvcl9jb3VudCAqIDB4MTAwMDA7Ci0gICAgfQotICAgIGVsc2UgewotCXByaW50ZiAoIiMjIFVua25vd24gRmxhc2ggVHlwZTogJTA4bHhcbiIsIGRldmlkKTsKLQlyZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiBjaGVjayBmb3IgcHJvdGVjdGVkIHNlY3RvcnMgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLQkvKiBzZWN0b3IgYmFzZSBhZGRyZXNzICovCi0JaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgaSAqIChpbmZvLT5zaXplIC8gaW5mby0+c2VjdG9yX2NvdW50KTsKLQkvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQTcgLi4gQTApID0gMHgwMiAqLwotCS8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KLQlhZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoaW5mby0+c3RhcnRbaV0pOwotCWluZm8tPnByb3RlY3RbaV0gPSBhZGRyWzJdICYgMTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFByZXZlbnQgd3JpdGVzIHRvIHVuaW5pdGlhbGl6ZWQgRkxBU0guCi0gICAgICovCi0gICAgaWYgKGluZm8tPmZsYXNoX2lkICE9IEZMQVNIX1VOS05PV04pIHsKLQlhZGRyID0gKHZ1X2xvbmcgKilpbmZvLT5zdGFydFswXTsKLQlhZGRyWzBdID0gMHhGMDsJLyogcmVzZXQgYmFuayAqLwotICAgIH0KLQotICAgIHJldHVybiAoaW5mby0+c2l6ZSk7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLWludAlmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICppbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKLXsKLSAgICB2dV9sb25nICphZGRyID0gKHZ1X2xvbmcqKShpbmZvLT5zdGFydFswXSk7Ci0gICAgaW50IGZsYWcsIHByb3QsIHNlY3QsIGxfc2VjdDsKLSAgICB1bG9uZyBzdGFydCwgbm93LCBsYXN0OwotCi0gICAgaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7Ci0JaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkgICAgcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKLQl9IGVsc2UgewotCSAgICBwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOwotCX0KLQlyZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBwcm90ID0gMDsKLSAgICBmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgc2VjdCsrKSB7Ci0JaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKLQkgICAgcHJvdCsrOwotCX0KLSAgICB9Ci0KLSAgICBpZiAocHJvdCkgewotCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKLQkJcHJvdCk7Ci0gICAgfSBlbHNlIHsKLQlwcmludGYgKCJcbiIpOwotICAgIH0KLQotICAgIGxfc2VjdCA9IC0xOwotCi0gICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCi0gICAgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwotCi0gICAgYWRkclsweDA1NTVdID0gMFhBQUFBQUFBQTsKLSAgICBhZGRyWzB4MDJBQV0gPSAweDU1NTU1NTU1OwotICAgIGFkZHJbMHgwNTU1XSA9IDB4ODA4MDgwODA7Ci0gICAgYWRkclsweDA1NTVdID0gMFhBQUFBQUFBQTsKLSAgICBhZGRyWzB4MDJBQV0gPSAweDU1NTU1NTU1OwotCi0gICAgLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLwotICAgIGZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgc2VjdCsrKSB7Ci0JaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewkvKiBub3QgcHJvdGVjdGVkICovCi0JICAgIGFkZHIgPSAodnVfbG9uZyopKGluZm8tPnN0YXJ0W3NlY3RdKTsKLQkgICAgYWRkclswXSA9IDB4MzAzMDMwMzA7Ci0JICAgIGxfc2VjdCA9IHNlY3Q7Ci0JfQotICAgIH0KLQotICAgIC8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwotICAgIGlmIChmbGFnKQotICAgICAgZW5hYmxlX2ludGVycnVwdHMoKTsKLQotICAgIC8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLwotICAgIHVkZWxheSAoMTAwMCk7Ci0KLSAgICAvKgotICAgICAqIFdlIHdhaXQgZm9yIHRoZSBsYXN0IHRyaWdnZXJlZCBzZWN0b3IKLSAgICAgKi8KLSAgICBpZiAobF9zZWN0IDwgMCkKLSAgICAgIGdvdG8gRE9ORTsKLQotICAgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKLSAgICBsYXN0ICA9IHN0YXJ0OwotICAgIGFkZHIgPSAodnVfbG9uZyopKGluZm8tPnN0YXJ0W2xfc2VjdF0pOwotICAgIHdoaWxlICgoYWRkclswXSAmIDB4ODA4MDgwODApICE9IDB4ODA4MDgwODApIHsKLQlpZiAoKG5vdyA9IGdldF90aW1lcihzdGFydCkpID4gQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUKSB7Ci0JICAgIHByaW50ZiAoIlRpbWVvdXRcbiIpOwotCSAgICByZXR1cm4gMTsKLQl9Ci0JLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KLQlpZiAoKG5vdyAtIGxhc3QpID4gMTAwMCkgewkvKiBldmVyeSBzZWNvbmQgKi8KLQkgICAgc2VyaWFsX3B1dGMgKCcuJyk7Ci0JICAgIGxhc3QgPSBub3c7Ci0JfQotICAgIH0KLQotICAgIERPTkU6Ci0gICAgLyogcmVzZXQgdG8gcmVhZCBtb2RlICovCi0gICAgYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopaW5mby0+c3RhcnRbMF07Ci0gICAgYWRkclswXSA9IDB4RjBGMEYwRjA7CS8qIHJlc2V0IGJhbmsgKi8KLQotICAgIHByaW50ZiAoIiBkb25lXG4iKTsKLSAgICByZXR1cm4gMDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29weSBtZW1vcnkgdG8gZmxhc2gsIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICovCi0KLWludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKmluZm8sIHVjaGFyICpzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKLXsKLSAgICB1bG9uZyBjcCwgd3AsIGRhdGE7Ci0gICAgaW50IGksIGwsIHJjOwotCi0gICAgd3AgPSAoYWRkciAmIH4zKTsJLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCi0KLSAgICAvKgotICAgICAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKLSAgICAgKi8KLSAgICBpZiAoKGwgPSBhZGRyIC0gd3ApICE9IDApIHsKLQlkYXRhID0gMDsKLQlmb3IgKGk9MCwgY3A9d3A7IGk8bDsgKytpLCArK2NwKSB7Ci0JICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotCX0KLQlmb3IgKDsgaTw0ICYmIGNudD4wOyArK2kpIHsKLQkgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotCSAgICAtLWNudDsKLQkgICAgKytjcDsKLQl9Ci0JZm9yICg7IGNudD09MCAmJiBpPDQ7ICsraSwgKytjcCkgewotCSAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQl9Ci0KLQlpZiAoKHJjID0gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKLQkgICAgcmV0dXJuIChyYyk7Ci0JfQotCXdwICs9IDQ7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKLSAgICAgKi8KLSAgICB3aGlsZSAoY250ID49IDQpIHsKLQlkYXRhID0gMDsKLQlmb3IgKGk9MDsgaTw0OyArK2kpIHsKLQkgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotCX0KLQlpZiAoKHJjID0gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKLQkgICAgcmV0dXJuIChyYyk7Ci0JfQotCXdwICArPSA0OwotCWNudCAtPSA0OwotICAgIH0KLQotICAgIGlmIChjbnQgPT0gMCkgewotCXJldHVybiAoMCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKLSAgICAgKi8KLSAgICBkYXRhID0gMDsKLSAgICBmb3IgKGk9MCwgY3A9d3A7IGk8NCAmJiBjbnQ+MDsgKytpLCArK2NwKSB7Ci0JZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotCS0tY250OwotICAgIH0KLSAgICBmb3IgKDsgaTw0OyArK2ksICsrY3ApIHsKLQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogV3JpdGUgYSB3b3JkIHRvIEZsYXNoLCByZXR1cm5zOgotICogMCAtIE9LCi0gKiAxIC0gd3JpdGUgdGltZW91dAotICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqLwotc3RhdGljIGludCB3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpCi17Ci0gICAgdnVfbG9uZyAqYWRkciA9ICh2dV9sb25nKikoaW5mby0+c3RhcnRbMF0pOwotICAgIHVsb25nIHN0YXJ0OwotICAgIGludCBmbGFnOwotCi0gICAgLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCi0gICAgaWYgKCgqKCh2dV9sb25nICopZGVzdCkgJiBkYXRhKSAhPSBkYXRhKSB7Ci0JcmV0dXJuICgyKTsKLSAgICB9Ci0gICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCi0gICAgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwotCi0gICAgYWRkclsweDA1NTVdID0gMHhBQUFBQUFBQTsKLSAgICBhZGRyWzB4MDJBQV0gPSAweDU1NTU1NTU1OwotICAgIGFkZHJbMHgwNTU1XSA9IDB4QTBBMEEwQTA7Ci0KLSAgICAqKCh2dV9sb25nICopZGVzdCkgPSBkYXRhOwotCi0gICAgLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCi0gICAgaWYgKGZsYWcpCi0gICAgICBlbmFibGVfaW50ZXJydXB0cygpOwotCi0gICAgLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLwotICAgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKLSAgICB3aGlsZSAoKCooKHZ1X2xvbmcgKilkZXN0KSAmIDB4ODA4MDgwODApICE9IChkYXRhICYgMHg4MDgwODA4MCkpIHsKLQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVCkgewotCSAgICByZXR1cm4gKDEpOwotCX0KLSAgICB9Ci0gICAgcmV0dXJuICgwKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCmRpZmYgLS1naXQgYS9ib2FyZC9tYng4eHgvbWJ4OHh4LmMgYi9ib2FyZC9tYng4eHgvbWJ4OHh4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YzcyM2YuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbWJ4OHh4L21ieDh4eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzgzICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgotICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgotICoKLSAqIEJvYXJkIHNwZWNpZmljIHJvdXRpbmVzIGZvciB0aGUgTUJYCi0gKgotICogLSBpbml0aWFsaXNhdGlvbgotICogLSBpbnRlcmZhY2UgdG8gVlBEIGRhdGEgKG1hYyBhZGRyZXNzLCBjbG9jayBzcGVlZHMpCi0gKiAtIG1lbW9yeSBjb250cm9sbGVyCi0gKiAtIHNlcmlhbCBpbyBpbml0aWFsaXNhdGlvbgotICogLSBldGhlcm5ldCBpbyBpbml0aWFsaXNhdGlvbgotICoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y29tbXByb2MuaD4KLSNpbmNsdWRlIDxtcGM4eHguaD4KLSNpbmNsdWRlIDxuZXQuaD4KLSNpbmNsdWRlICJkaW1tLmgiCi0jaW5jbHVkZSAidnBkLmgiCi0jaW5jbHVkZSAiY3NyLmgiCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGNvbnN0IHVpbnQgc2RyYW1fdGFibGVfNDBbXSA9IHsKLQkvKiBEUkFNIC0gc2luZ2xlIHJlYWQuIChvZmZzZXQgMCBpbiB1cG0gUkFNKQotCSAqLwotCTB4Q0ZBRkMwMDQsIDB4MEZBRkM0MDQsIDB4MENBRjBDMDQsIDB4MzBBRjBDMDAsCi0JMHhGMUJGNDgwNSwgMHhGRkZGQzAwNSwgMHhGRkZGQzAwNSwgMHhGRkZGQzAwNSwKLQotCS8qIERSQU0gLSBidXJzdCByZWFkLiAob2Zmc2V0IDggaW4gdXBtIFJBTSkKLQkgKi8KLQkweENGQUZDMDA0LCAweDBGQUZDNDA0LCAweDBDQUYwQzA0LCAweDAzQUYwQzA4LAotCTB4MENBRjBDMDQsIDB4MDNBRjBDMDgsIDB4MENBRjBDMDQsIDB4MDNBRjBDMDgsCi0JMHgwQ0FGMEMwNCwgMHgzMEFGMEMwMCwgMHhGM0JGNDgwNSwgMHhGRkZGQzAwNSwKLQkweEZGRkZDMDA1LCAweEZGRkZDMDA1LCAweEZGRkZDMDA1LCAweEZGRkZDMDA1LAotCi0JLyogRFJBTSAtIHNpbmdsZSB3cml0ZS4gKG9mZnNldCAxOCBpbiB1cG0gUkFNKQotCSAqLwotCTB4Q0ZGRjAwMDQsIDB4MEZGRjA0MDQsIDB4MENGRjBDMDAsIDB4MzNGRjQ4MDQsCi0JMHhGRkZGQzAwNSwgMHhGRkZGQzAwNSwgMHhGRkZGQzAwNSwgMHhGRkZGQzAwNSwKLQotCS8qIERSQU0gLSBidXJzdCB3cml0ZS4gKG9mZnNldCAyMCBpbiB1cG0gUkFNKQotCSAqLwotCTB4Q0ZGRjAwMDQsIDB4MEZGRjA0MDQsIDB4MENGRjBDMDAsIDB4MDNGRjBDMEMsCi0JMHgwQ0ZGMEMwMCwgMHgwM0ZGMEMwQywgMHgwQ0ZGMEMwMCwgMHgwM0ZGMEMwQywKLQkweDBDRkYwQzAwLCAweDMzRkY0ODA0LCAweEZGRkZDMDA1LCAweEZGRkZDMDA1LAotCTB4RkZGRkMwMDUsIDB4RkZGRkMwMDUsIDB4RkZGRkMwMDUsIDB4RkZGRkMwMDUsCi0KLQkvKiByZWZyZXNoICAob2Zmc2V0IDMwIGluIHVwbSBSQU0pCi0JICovCi0JMHhGQ0ZGQzAwNCwgMHhDMEZGQzAwNCwgMHgwMUZGQzAwNCwgMHgwRkZGQzAwNCwKLQkweDNGRkZDMDA0LCAweEZGRkZDMDA1LCAweEZGRkZDMDA1LCAweEZGRkZDMDA1LAotCTB4RkZGRkMwMDUsIDB4RkZGRkMwMDUsIDB4RkZGRkMwMDUsIDB4RkZGRkMwMDUsCi0KLQkvKiBleGNlcHRpb24uIChvZmZzZXQgM2MgaW4gdXBtIFJBTSkKLQkgKi8KLQkweEZGRkZDMDA3LCAweEZGRkZDMDA3LCAweEZGRkZDMDA3LCAweEZGRkZDMDA3LAotfTsKLQotc3RhdGljIGNvbnN0IHVpbnQgc2RyYW1fdGFibGVfNTBbXSA9IHsKLQkvKiBEUkFNIC0gc2luZ2xlIHJlYWQuIChvZmZzZXQgMCBpbiB1cG0gUkFNKQotCSAqLwotCTB4Q0ZBRkMwMDQsIDB4MEZBRkM0MDQsIDB4MENBRjhDMDQsIDB4MTBBRjBDMDQsCi0JMHhGMEFGMEMwMCwgMHhGM0JGNDgwNSwgMHhGRkZGQzAwNSwgMHhGRkZGQzAwNSwKLQotCS8qIERSQU0gLSBidXJzdCByZWFkLiAob2Zmc2V0IDggaW4gdXBtIFJBTSkKLQkgKi8KLQkweENGQUZDMDA0LCAwWDBGQUZDNDA0LCAwWDBDQUY4QzA0LCAwWDAwQUYwQzA0LAotICAvKgkwWDA3QUYwQzA4LCAwWDBDQUYwQzA0LCAwWDAxQUYwQzA0LCAwWDBGQUYwQzA0LAkqLwotCTBYMDdBRjBDMDgsIDBYMENBRjBDMDQsIDBYMDFBRjBDMDQsIDBYMEZBRjBDMDgsCi0JMFgwQ0FGMEMwNCwgMFgwMUFGMEMwNCwgMFgwRkFGMEMwOCwgMFgwQ0FGMEMwNCwKLSAgLyoJMFgxMEFGMEMwNCwgMFhGMEFGQzAwMCwgMFhGM0ZGNDgwNSwgMFhGRkZGQzAwNSwJKi8KLQkwWDEwQUYwQzA0LCAwWEYwQUZDMDAwLCAwWEYzQkY0ODA1LCAwWEZGRkZDMDA1LAotCi0JLyogRFJBTSAtIHNpbmdsZSB3cml0ZS4gKG9mZnNldCAxOCBpbiB1cG0gUkFNKQotCSAqLwotCTB4Q0ZGRjAwMDQsIDB4MEZGRjA0MDQsIDB4MENGRjBDMDAsIDB4MTNGRjQ4MDQsCi0JMHhGRkZGQzAwNCwgMHhGRkZGQzAwNSwgMHhGRkZGQzAwNSwgMHhGRkZGQzAwNSwKLQotCS8qIERSQU0gLSBidXJzdCB3cml0ZS4gKG9mZnNldCAyMCBpbiB1cG0gUkFNKQotCSAqLwotCTB4Q0ZGRjAwMDQsIDB4MEZGRjA0MDQsIDB4MENGRjBDMDAsIDB4MDNGRjBDMEMsCi0JMHgwQ0ZGMEMwMCwgMHgwM0ZGMEMwQywgMHgwQ0ZGMEMwMCwgMHgwM0ZGMEMwQywKLQkweDBDRkYwQzAwLCAweDEzRkY0ODA0LCAweEZGRkZDMDA0LCAweEZGRkZDMDA1LAotCTB4RkZGRkMwMDUsIDB4RkZGRkMwMDUsIDB4RkZGRkMwMDUsIDB4RkZGRkMwMDUsCi0KLQkvKiByZWZyZXNoICAob2Zmc2V0IDMwIGluIHVwbSBSQU0pCi0JICovCi0JMHhGQ0ZGQzAwNCwgMHhDMEZGQzAwNCwgMHgwMUZGQzAwNCwgMHgwRkZGQzAwNCwKLQkweDFGRkZDMDA0LCAweEZGRkZDMDA0LCAweEZGRkZDMDA1LCAweEZGRkZDMDA1LAotCTB4RkZGRkMwMDUsIDB4RkZGRkMwMDUsIDB4RkZGRkMwMDUsIDB4RkZGRkMwMDUsCi0KLQkvKiBleGNlcHRpb24uIChvZmZzZXQgM2MgaW4gdXBtIFJBTSkKLQkgKi8KLQkweEZGRkZDMDA3LCAweEZGRkZDMDA3LCAweEZGRkZDMDA3LCAweEZGRkZDMDA3LAotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgQ09ORklHX1NZU19VU0VfT1NDQ0xLCi1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9yZWZmcmVxKHZvaWQpOwotI2VuZGlmCi1zdGF0aWMgdW5zaWduZWQgaW50IGJvYXJkX2dldF9jcHVmcmVxKHZvaWQpOwotCi12b2lkIG1ieF9pbml0ICh2b2lkKQotewotCXZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKSBDT05GSUdfU1lTX0lNTVI7Ci0Jdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1yLT5pbV9tZW1jdGw7Ci0JdWxvbmcgc3BlZWQsIHBscHJjciwgc2NjcjsKLQl1bG9uZyBicjBfMzIgPSBtZW1jdGwtPm1lbWNfYnIwICYgMHg0MDA7Ci0KLQkvKiByZWFsLXRpbWUgY2xvY2sgc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyICovCi0JaW1tci0+aW1fc2l0ay5zaXRrX3J0Y3NjayA9IEtBUFdSX0tFWTsKLQlpbW1yLT5pbV9zaXQuc2l0X3J0Y3NjID0gMHgwMEMzOwotCi0JLyogU0lFTCBhbmQgU0lNQVNLIFJlZ2lzdGVycyAoc2VlIE1CWCBQUkcgMi0zKSAqLwotCWltbXItPmltX3NpdV9jb25mLnNjX3NpbWFzayA9IDB4MDAwMDAwMDA7Ci0JaW1tci0+aW1fc2l1X2NvbmYuc2Nfc2llbCA9IDB4QUFBQTAwMDA7Ci0JaW1tci0+aW1fc2l1X2NvbmYuc2NfdGVzciA9IDB4RkZGRkZGRkY7Ci0KLQkvKgotCSAqIFByZXBhcmUgYWNjZXNzIHRvIGkyYyBidXMuIFRoZSBNQlggb2ZmZXJzIDMgZGV2aWNlcyBvbiB0aGUgaTJjIGJ1czoKLQkgKiAxLiBWaXRhbCBQcm9kdWN0IERhdGEgKGNvbnRhaW5zIGNsb2NrIHNwZWVkcywgTUFDIGFkZHJlc3MgZXRjLCBzZWUgdnBkLmgpCi0JICogMi4gUkFNICBTcGVjcyAoc2VlIGRpbW0uaCkKLQkgKiAyLiBESU1NIFNwZWNzIChzZWUgZGltbS5oKQotCSAqLwotCXZwZF9pbml0ICgpOwotCi0JLyogc3lzdGVtIGNsb2NrIGFuZCByZXNldCBjb250cm9sIHJlZ2lzdGVyICovCi0JaW1tci0+aW1fY2xrcnN0ay5jYXJrX3NjY3JrID0gS0FQV1JfS0VZOwotCXNjY3IgPSBpbW1yLT5pbV9jbGtyc3QuY2FyX3NjY3I7Ci0Jc2NjciAmPSBTQ0NSX01BU0s7Ci0Jc2NjciB8PSBDT05GSUdfU1lTX1NDQ1I7Ci0JaW1tci0+aW1fY2xrcnN0LmNhcl9zY2NyID0gc2NjcjsKLQotCXNwZWVkID0gYm9hcmRfZ2V0X2NwdWZyZXEgKCk7Ci0KLSNpZiAoKENPTkZJR19TWVNfUExQUkNSICYgUExQUkNSX01GX01TSykgIT0gMCkKLQlwbHByY3IgPSBDT05GSUdfU1lTX1BMUFJDUjsKLSNlbHNlCi0JcGxwcmNyID0gaW1tci0+aW1fY2xrcnN0LmNhcl9wbHByY3I7Ci0JcGxwcmNyICY9IFBMUFJDUl9NRl9NU0s7CS8qIGlzb2xhdGUgTUYgZmllbGQgKi8KLQlwbHByY3IgfD0gQ09ORklHX1NZU19QTFBSQ1I7CQkvKiByZXNldCBjb250cm9sIGJpdHMgICAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfU1lTX1VTRV9PU0NDTEsJCQkvKiBTZWUgZG9jL1JFQURNRS5NQlggISAqLwotCXBscHJjciB8PSAoKHNwZWVkICsgZ2V0X3JlZmZyZXEoKSAvIDIpIC8gcmVmY2xvY2sgLSAxKSA8PCAyMDsKLSNlbmRpZgotCi0JaW1tci0+aW1fY2xrcnN0ay5jYXJrX3BscHJjcmsgPSBLQVBXUl9LRVk7Ci0JaW1tci0+aW1fY2xrcnN0LmNhcl9wbHByY3IgPSBwbHByY3I7Ci0KLQkvKgotCSAqIHByZWxpbWluYXJ5IHNldHVwIG9mIG1lbW9yeSBjb250cm9sbGVyOgotCSAqIC0gbWFwIEZsYXNoLCBvdGhlcndpc2UgY29uZmlndXJhdGlvbi9zdGF0dXMKLQkgKiAgICByZWdpc3RlcnMgd29uJ3QgYmUgYWNjZXNzaWJsZSB3aGVuIHJlYWQKLQkgKiAgICBieSBib2FyZF9pbml0X2YuCi0JICogLSBtYXAgTlZSQU0gYW5kIGNvbmZpZ3VhdGlvbi9zdGF0dXMgcmVnaXN0ZXJzLgotCSAqIC0gbWFwIHBjaSByZWdpc3RlcnMuCi0JICogLSBET04nVCBtYXAgcmFtIHlldCwgdGhpcyBpcyBkb25lIGluIGluaXRkcmFtKCkuCi0JICovCi0Jc3dpdGNoIChzcGVlZCAvIDEwMDAwMDApIHsKLQljYXNlIDQwOgotCQltZW1jdGwtPm1lbWNfYnIwID0gMHhGRTAwMDAwMCB8IGJyMF8zMiB8IDE7Ci0JCW1lbWN0bC0+bWVtY19vcjAgPSAweEZGODAwOTMwOwotCQltZW1jdGwtPm1lbWNfb3I0ID0gQ09ORklHX1NZU19OVlJBTV9PUiB8IDB4OTIwOwotCQltZW1jdGwtPm1lbWNfYnI0ID0gQ09ORklHX1NZU19OVlJBTV9CQVNFIHwgMHg0MDE7Ci0JCWJyZWFrOwotCWNhc2UgNTA6Ci0JCW1lbWN0bC0+bWVtY19icjAgPSAweEZFMDAwMDAwIHwgYnIwXzMyIHwgMTsKLQkJbWVtY3RsLT5tZW1jX29yMCA9IDB4RkY4MDA5NDA7Ci0JCW1lbWN0bC0+bWVtY19vcjQgPSBDT05GSUdfU1lTX05WUkFNX09SIHwgMHg5MzA7Ci0JCW1lbWN0bC0+bWVtY19icjQgPSBDT05GSUdfU1lTX05WUkFNX0JBU0UgfCAweDQwMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaGFuZyAoKTsKLQkJYnJlYWs7Ci0JfQotI2lmZGVmIENPTkZJR19VU0VfUENJCi0JbWVtY3RsLT5tZW1jX29yNSA9IENPTkZJR19TWVNfUENJTUVNX09SOwotCW1lbWN0bC0+bWVtY19icjUgPSBDT05GSUdfU1lTX1BDSU1FTV9CQVNFIHwgMHgwMDE7Ci0JbWVtY3RsLT5tZW1jX29yNiA9IENPTkZJR19TWVNfUENJQlJJREdFX09SOwotCW1lbWN0bC0+bWVtY19icjYgPSBDT05GSUdfU1lTX1BDSUJSSURHRV9CQVNFIHwgMHgwMDE7Ci0jZW5kaWYKLQkvKgotCSAqIEZJWE1FOiBJIGRvIG5vdCB1bmRlcnN0YW5kIHdoeSBJIGhhdmUgdG8gY2FsbCB0aGlzIHRvCi0JICogaW5pdGlhbGlzZSB0aGUgY29udHJvbCByZWdpc3RlciBoZXJlIGJlZm9yZSBib290aW5nIGZyb20KLQkgKiB0aGUgUENNQ0lBIGNhcmQgYnV0IGlmIEkgZG8gbm90IHRoZSBMaW51eCBrZXJuZWwgZmFsbHMKLQkgKiBvdmVyIGluIGEgYmlnIGhlYXAuIElmIHlvdSBjYW4gYW5zd2VyIHRoaXMgcXVlc3Rpb24gSQotCSAqIHdvdWxkIGxpa2UgdG8ga25vdyBhYm91dCBpdC4KLQkgKi8KLQlib2FyZF9ldGhlcl9pbml0KCk7Ci19Ci0KLXZvaWQgYm9hcmRfc2VyaWFsX2luaXQgKHZvaWQpCi17Ci0JTUJYX0NTUjEgJj0gfihDU1IxX0NPTTFFTiB8IENTUjFfWENWUkRJUyk7Ci19Ci0KLXZvaWQgYm9hcmRfZXRoZXJfaW5pdCAodm9pZCkKLXsKLQlNQlhfQ1NSMSAmPSB+KENTUjFfRUFFTiB8IENTUjFfRUxFTik7Ci0JTUJYX0NTUjEgfD0gQ1NSMV9FVEVOIHwgQ1NSMV9UUEVOIHwgQ1NSMV9GRERJUzsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBib2FyZF9nZXRfY3B1ZnJlcSAodm9pZCkKLXsKLSNpZm5kZWYgQ09ORklHXzh4eF9HQ0xLX0ZSRVEKLQl2cGRfcGFja2V0X3QgKnBhY2tldDsKLQl1bG9uZyAqcDsKLQotCXBhY2tldCA9IHZwZF9maW5kX3BhY2tldCAoVlBEX1BJRF9JQ1MpOwotCXAgPSAodWxvbmcgKilwYWNrZXQtPmRhdGE7Ci0JcmV0dXJuICpwOwotI2Vsc2UKLQlyZXR1cm4oKHVuc2lnbmVkIGludClDT05GSUdfOHh4X0dDTEtfRlJFUSApOwotI2VuZGlmIC8qIENPTkZJR184eHhfR0NMS19GUkVRICovCi19Ci0KLSNpZmRlZiBDT05GSUdfU1lTX1VTRV9PU0NDTEsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3JlZmZyZXEgKHZvaWQpCi17Ci0JdnBkX3BhY2tldF90ICpwYWNrZXQ7Ci0JdWxvbmcgKnA7Ci0KLQlwYWNrZXQgPSB2cGRfZmluZF9wYWNrZXQgKFZQRF9QSURfUkNTKTsKLQlwID0gKHVsb25nICopcGFja2V0LT5kYXRhOwotCXJldHVybiAqcDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBib2FyZF9nZXRfZW5ldGFkZHIodWNoYXIgKmFkZHIpCi17Ci0JaW50IGk7Ci0JdnBkX3BhY2tldF90ICpwYWNrZXQ7Ci0KLQlwYWNrZXQgPSB2cGRfZmluZF9wYWNrZXQgKFZQRF9QSURfRUEpOwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCWFkZHJbaV0gPSBwYWNrZXQtPmRhdGFbaV07Ci19Ci0KLWludCBtaXNjX2luaXRfcih2b2lkKQotewotCXVjaGFyIGVuZXRhZGRyWzZdOwotCi0JaWYgKCFldGhfZ2V0ZW52X2VuZXRhZGRyKCJldGhhZGRyIiwgZW5ldGFkZHIpKSB7Ci0JCWJvYXJkX2dldF9lbmV0YWRkcihlbmV0YWRkcik7Ci0JCWV0aF9zZXRlbnZfZW5ldGFkZHIoImV0aGFkZHIiLCBlbmV0YWRkcik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDaGVjayBCb2FyZCBJZGVudGl0eToKLSAqLwotCi1pbnQgY2hlY2tib2FyZCAodm9pZCkKLXsKLQl2cGRfcGFja2V0X3QgKnBhY2tldDsKLQlpbnQgaTsKLQljb25zdCBjaGFyICpjb25zdCBmbXQgPQotCQkiXG4JICoqKiBXYXJuaW5nOiBMb3cgQmF0dGVyeSBTdGF0dXMgLSAlcyBCYXR0ZXJ5ICoqKiI7Ci0KLQlwdXRzICgiQm9hcmQ6ICIpOwotCi0JcGFja2V0ID0gdnBkX2ZpbmRfcGFja2V0IChWUERfUElEX1BJRCk7Ci0JZm9yIChpID0gMDsgaSA8IHBhY2tldC0+c2l6ZTsgaSsrKSB7Ci0JCXNlcmlhbF9wdXRjIChwYWNrZXQtPmRhdGFbaV0pOwotCX0KLQlwYWNrZXQgPSB2cGRfZmluZF9wYWNrZXQgKFZQRF9QSURfTVQpOwotCWZvciAoaSA9IDA7IGkgPCBwYWNrZXQtPnNpemU7IGkrKykgewotCQlzZXJpYWxfcHV0YyAocGFja2V0LT5kYXRhW2ldKTsKLQl9Ci0Jc2VyaWFsX3B1dGMgKCcoJyk7Ci0JcGFja2V0ID0gdnBkX2ZpbmRfcGFja2V0IChWUERfUElEX0ZBTik7Ci0JZm9yIChpID0gMDsgaSA8IHBhY2tldC0+c2l6ZTsgaSsrKSB7Ci0JCXNlcmlhbF9wdXRjIChwYWNrZXQtPmRhdGFbaV0pOwotCX0KLQlzZXJpYWxfcHV0YyAoJyknKTsKLQotCWlmICghKE1CWF9DU1IyICYgU1IyX0JBVEdEKSkKLQkJcHJpbnRmIChmbXQsICJPbi1Cb2FyZCIpOwotCWlmICghKE1CWF9DU1IyICYgU1IyX05WQkFUR0QpKQotCQlwcmludGYgKGZtdCwgIk5WUkFNIik7Ci0KLQlzZXJpYWxfcHV0YyAoJ1xuJyk7Ci0KLQlyZXR1cm4gKDApOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB1bG9uZyBnZXRfcmFtc2l6ZSAoZGltbV90ICogZGltbSkKLXsKLQl1bG9uZyBzaXplID0gMDsKLQotCWlmIChkaW1tLT5mbXQgPT0gMSB8fCBkaW1tLT5mbXQgPT0gMiB8fCBkaW1tLT5mbXQgPT0gMwotCQl8fCBkaW1tLT5mbXQgPT0gNCkgewotCQlzaXplID0gKDEgPDwgKGRpbW0tPm5fcm93ICsgZGltbS0+bl9jb2wpKSAqIGRpbW0tPm5fYmFua3MgKgotCQkJKChkaW1tLT5kYXRhX3dfaGkgPDwgOCB8IGRpbW0tPmRhdGFfd19sbykgLyA4KTsKLQl9Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQotcGh5c19zaXplX3QgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQotewotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgQ09ORklHX1NZU19JTU1SOwotCXZvbGF0aWxlIG1lbWN0bDh4eF90ICptZW1jdGwgPSAmaW1tYXAtPmltX21lbWN0bDsKLQl1bnNpZ25lZCBsb25nIHJhbV9zeiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBkaW1tX3N6ID0gMDsKLQlkaW1tX3QgdnBkX2RpbW0sIHZwZF9kcmFtOwotCXVuc2lnbmVkIGludCBzcGVlZCA9IGJvYXJkX2dldF9jcHVmcmVxICgpIC8gMTAwMDAwMDsKLQotCWlmICh2cGRfcmVhZCAoMHhhMiwgKHVjaGFyICopICYgdnBkX2RpbW0sIHNpemVvZiAodnBkX2RpbW0pLCAwKSA+IDApIHsKLQkJZGltbV9zeiA9IGdldF9yYW1zaXplICgmdnBkX2RpbW0pOwotCX0KLQlpZiAodnBkX3JlYWQgKDB4YTYsICh1Y2hhciAqKSAmIHZwZF9kcmFtLCBzaXplb2YgKHZwZF9kcmFtKSwgMCkgPiAwKSB7Ci0JCXJhbV9zeiA9IGdldF9yYW1zaXplICgmdnBkX2RyYW0pOwotCX0KLQotCS8qCi0JICogT25seSBpbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIHdoZW4gcnVubmluZyBmcm9tIEZMQVNILgotCSAqIFdoZW4gcnVubmluZyBmcm9tIFJBTSwgZG9uJ3QgdG91Y2ggaXQuCi0JICovCi0JaWYgKCh1bG9uZykgaW5pdGRyYW0gJiAweGZmMDAwMDAwKSB7Ci0JCXVsb25nIGRpbW1fYmFuazsKLQkJdWxvbmcgYnIwXzMyID0gbWVtY3RsLT5tZW1jX2JyMCAmIDB4NDAwOwotCi0JCXN3aXRjaCAoc3BlZWQpIHsKLQkJY2FzZSA0MDoKLQkJCXVwbWNvbmZpZyAoVVBNQSwgKHVpbnQgKikgc2RyYW1fdGFibGVfNDAsCi0JCQkJCSAgIHNpemVvZiAoc2RyYW1fdGFibGVfNDApIC8gc2l6ZW9mICh1aW50KSk7Ci0JCQltZW1jdGwtPm1lbWNfbXB0cHIgPSAweDAyMDA7Ci0JCQltZW1jdGwtPm1lbWNfbWFtciA9IGRpbW1fc3ogPyAweDA2ODAxMDAwIDogMHgxMzgwMTAwMDsKLQkJCW1lbWN0bC0+bWVtY19vcjcgPSAweGZmODAwOTMwOwotCQkJbWVtY3RsLT5tZW1jX2JyNyA9IDB4ZmMwMDAwMDAgfCAoYnIwXzMyIF4gYnIwXzMyKSB8IDE7Ci0JCQlicmVhazsKLQkJY2FzZSA1MDoKLQkJCXVwbWNvbmZpZyAoVVBNQSwgKHVpbnQgKikgc2RyYW1fdGFibGVfNTAsCi0JCQkJCSAgIHNpemVvZiAoc2RyYW1fdGFibGVfNTApIC8gc2l6ZW9mICh1aW50KSk7Ci0JCQltZW1jdGwtPm1lbWNfbXB0cHIgPSAweDAyMDA7Ci0JCQltZW1jdGwtPm1lbWNfbWFtciA9IGRpbW1fc3ogPyAweDA4ODAxMDAwIDogMHgxODgwMTAwOwotCQkJbWVtY3RsLT5tZW1jX29yNyA9IDB4ZmY4MDA5NDA7Ci0JCQltZW1jdGwtPm1lbWNfYnI3ID0gMHhmYzAwMDAwMCB8IChicjBfMzIgXiBicjBfMzIpIHwgMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaGFuZyAoKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogbm93IG1hcCByYW0gYW5kIGRpbW0sIGxhcmdlc3Qgb25lIGZpcnN0ICovCi0JCWRpbW1fYmFuayA9IGRpbW1fc3ogLyAyOwotCQlpZiAoIWRpbW1fc3opIHsKLQkJCW1lbWN0bC0+bWVtY19vcjEgPSB+KHJhbV9zeiAtIDEpIHwgMHg0MDA7Ci0JCQltZW1jdGwtPm1lbWNfYnIxID0gQ09ORklHX1NZU19TRFJBTV9CQVNFIHwgMHg4MTsKLQkJCW1lbWN0bC0+bWVtY19icjIgPSAwOwotCQkJbWVtY3RsLT5tZW1jX2JyMyA9IDA7Ci0JCX0gZWxzZSBpZiAocmFtX3N6ID4gZGltbV9iYW5rKSB7Ci0JCQltZW1jdGwtPm1lbWNfb3IxID0gfihyYW1fc3ogLSAxKSB8IDB4NDAwOwotCQkJbWVtY3RsLT5tZW1jX2JyMSA9IENPTkZJR19TWVNfU0RSQU1fQkFTRSB8IDB4ODE7Ci0JCQltZW1jdGwtPm1lbWNfb3IyID0gfihkaW1tX2JhbmsgLSAxKSB8IDB4NDAwOwotCQkJbWVtY3RsLT5tZW1jX2JyMiA9IChDT05GSUdfU1lTX1NEUkFNX0JBU0UgKyByYW1fc3opIHwgMHg4MTsKLQkJCW1lbWN0bC0+bWVtY19vcjMgPSB+KGRpbW1fYmFuayAtIDEpIHwgMHg0MDA7Ci0JCQltZW1jdGwtPm1lbWNfYnIzID0gKENPTkZJR19TWVNfU0RSQU1fQkFTRSArIHJhbV9zeiArIGRpbW1fYmFuaykgXAotCQkJCQkJCQkgICAgIHwgMHg4MTsKLQkJfSBlbHNlIHsKLQkJCW1lbWN0bC0+bWVtY19vcjIgPSB+KGRpbW1fYmFuayAtIDEpIHwgMHg0MDA7Ci0JCQltZW1jdGwtPm1lbWNfYnIyID0gQ09ORklHX1NZU19TRFJBTV9CQVNFIHwgMHg4MTsKLQkJCW1lbWN0bC0+bWVtY19vcjMgPSB+KGRpbW1fYmFuayAtIDEpIHwgMHg0MDA7Ci0JCQltZW1jdGwtPm1lbWNfYnIzID0gKENPTkZJR19TWVNfU0RSQU1fQkFTRSArIGRpbW1fYmFuaykgfCAweDgxOwotCQkJbWVtY3RsLT5tZW1jX29yMSA9IH4ocmFtX3N6IC0gMSkgfCAweDQwMDsKLQkJCW1lbWN0bC0+bWVtY19icjEgPSAoQ09ORklHX1NZU19TRFJBTV9CQVNFICsgZGltbV9zeikgfCAweDgxOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJhbV9zeiArIGRpbW1fc3o7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9tYng4eHgvcGNtY2lhLmMgYi9ib2FyZC9tYng4eHgvcGNtY2lhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5N2UyNjAuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbWJ4OHh4L3BjbWNpYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxtcGM4eHguaD4KLSNpbmNsdWRlIDxwY21jaWEuaD4KLQotI2luY2x1ZGUgImNzci5oIgotCi0jdW5kZWYJQ09ORklHX1BDTUNJQQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX1BDTUNJQSkKLSNkZWZpbmUJQ09ORklHX1BDTUNJQQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfSURFKSAmJiBkZWZpbmVkKENPTkZJR19JREVfOHh4X1BDQ0FSRCkKLSNkZWZpbmUJQ09ORklHX1BDTUNJQQotI2VuZGlmCi0KLSNpZmRlZglDT05GSUdfUENNQ0lBCi0KLS8qIEEgbG90IG9mIHRoaXMgaGFzIGJlZW4gdGFrZW4gZnJvbSB0aGUgUlBYIGNvZGUgaW4gdGhpcyBmaWxlIGl0IHdvcmtzIGZyb20gbWUuCi0gICBJIGhhdmUgYWRkZWQgdGhlIHZvbHRhZ2Ugc2VsZWN0aW9uIGZvciB0aGUgTUJYIGJvYXJkLiAqLwotCi0vKiBNQlggdm9sdGFnZSBiaXQgaW4gY29udHJvbCByZWdpc3RlciAjMiAqLwotI2RlZmluZSBDUjJfVlBQMTIgICAgICAgKCh1Y2hhcikweDEwKQotI2RlZmluZSBDUjJfVlBQVkREICAgICAgKCh1Y2hhcikweDIwKQotI2RlZmluZSBDUjJfVkRENSAgICAgICAgKCh1Y2hhcikweDQwKQotI2RlZmluZSBDUjJfVkREMyAgICAgICAgKCh1Y2hhcikweDgwKQotCi0jZGVmaW5lIFBDTUNJQV9CT0FSRF9NU0cgIk1CWDg2MCIKLQotaW50IHBjbWNpYV92b2x0YWdlX3NldCAoaW50IHNsb3QsIGludCB2Y2MsIGludCB2cHApCi17Ci0JdWNoYXIgcmVnID0gMDsKLQotCWRlYnVnICgidm9sdGFnZV9zZXQ6IFBDTUNJQV9CT0FSRF9NU0cgU2xvdCAlYywgVmNjPSVkLiVkLCBWcHA9JWQuJWRcbiIsCi0JICAgICAgICdBJyArIHNsb3QsIHZjYyAvIDEwLCB2Y2MgJSAxMCwgdnBwIC8gMTAsIHZjYyAlIDEwKTsKLQotCXN3aXRjaCAodmNjKSB7Ci0JCWNhc2UgMDoKLQkJCWJyZWFrOwotCQljYXNlIDMzOgotCQkJcmVnIHw9IENSMl9WREQzOwotCQkJYnJlYWs7Ci0JCWNhc2UgNTA6Ci0JCQlyZWcgfD0gQ1IyX1ZERDU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAxOwotCX0KLQotCXN3aXRjaCAodnBwKSB7Ci0JCWNhc2UgMDoKLQkJCWJyZWFrOwotCQljYXNlIDMzOgotCQljYXNlIDUwOgotCQkJaWYgKHZjYyA9PSB2cHApIHsKLQkJCQlyZWcgfD0gQ1IyX1ZQUFZERDsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIDE7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAxMjA6Ci0JCQlyZWcgfD0gQ1IyX1ZQUDEyOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBmaXJzdCwgdHVybiBvZmYgYWxsIHBvd2VyICovCi0JTUJYX0NTUjIgJj0gfihDUjJfVkREU0VMIHwgQ1IyX1ZQUFNFTCk7Ci0KLQkvKiBlbmFibGUgbmV3IHBvd2Vyc2V0dGluZ3MgKi8KLQlNQlhfQ1NSMiB8PSByZWc7Ci0JZGVidWcgKCJNQlhfQ1NSMiByZWFkID0gMHglMDJ4XG4iLCBNQlhfQ1NSMik7Ci0KLQlyZXR1cm4gKDApOwotfQotCi1pbnQgcGNtY2lhX2hhcmR3YXJlX2VuYWJsZSAoaW50IHNsb3QpCi17Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90ICpwY21wOwotCXVpbnQgcmVnLCBtYXNrOwotCi0JZGVidWcgKCJoYXJkd2FyZV9lbmFibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsCi0JICAgICAgICdBJyArIHNsb3QpOwotCi0JdWRlbGF5ICgxMDAwMCk7Ci0KLQlwY21wID0gKHBjbWNvbmY4eHhfdCAqKSAoJigoKGltbWFwX3QgKikgQ09ORklHX1NZU19JTU1SKS0+aW1fcGNtY2lhKSk7Ci0KLQkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdGUsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KLQlwY21wLT5wY21jX3BzY3IgPSBQQ01DSUFfTUFTSyAoX3Nsb3RfKTsKLQlwY21wLT5wY21jX3BlciAmPSB+UENNQ0lBX01BU0sgKF9zbG90Xyk7Ci0KLQkvKgotCSogRGlzYWJsZSBpbnRlcnJ1cHRzLCBETUEsIGFuZCBQQ01DSUEgYnVmZmVycwotCSogKGlzb2xhdGUgdGhlIGludGVyZmFjZSkgYW5kIGFzc2VydCBSRVNFVCBzaWduYWwKLQkqLwotCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKLQlyZWcgPSAwOwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlggKF9zbG90XykgPSByZWc7Ci0JdWRlbGF5ICg1MDApOwotCi0JLyogcmVtb3ZlIGFsbCBwb3dlciAqLwotCXBjbWNpYV92b2x0YWdlX3NldCAoc2xvdCwgMCwgMCk7Ci0JLyoKLQkqIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIGNhcmQgaW4gdGhlIHNsb3QsIHRoZW4gY29uZmlndXJlIHRoZSBpbnRlcmZhY2UuCi0JKi8KLQl1ZGVsYXkoMTAwMDApOwotCWRlYnVnICgiWyVkXSAlczogUElQUiglcCk9MHgleFxuIiwKLQkgICAgICAgX19MSU5FX18sX19GVU5DVElPTl9fLAotCSAgICAgICAmKHBjbXAtPnBjbWNfcGlwcikscGNtcC0+cGNtY19waXByKTsKLQlpZiAocGNtcC0+cGNtY19waXByICYgKDB4MTAwMDAwMDAgPj4gKHNsb3QgPDwgNCkpKSB7Ci0JCXByaW50ZiAoIiAgIE5vIENhcmQgZm91bmRcbiIpOwotCQlyZXR1cm4gKDEpOwotCX0KLQotCS8qCi0JKiBQb3dlciBPbi4KLQkqLwotCW1hc2sgPSBQQ01DSUFfVlMxIChfc2xvdF8pIHwgUENNQ0lBX1ZTMiAoX3Nsb3RfKTsKLQlyZWcgPSBwY21wLT5wY21jX3BpcHI7Ci0JZGVidWcgKCJQSVBSOiAweCV4ID09PiBWUzE9byVzLCBWUzI9byVzXG4iLCByZWcsCi0JICAgICAgIChyZWcgJiBQQ01DSUFfVlMxIChzbG90KSkgPyAibiIgOiAiZmYiLAotCSAgICAgICAocmVnICYgUENNQ0lBX1ZTMiAoc2xvdCkpID8gIm4iIDogImZmIik7Ci0KLQlpZiAoKHJlZyAmIG1hc2spID09IG1hc2spIHsKLQkJcGNtY2lhX3ZvbHRhZ2Vfc2V0IChfc2xvdF8sIDUwLCAwKTsKLQkJcHJpbnRmICgiIDUuMFYgY2FyZCBmb3VuZDogIik7Ci0JfSBlbHNlIHsKLQkJcGNtY2lhX3ZvbHRhZ2Vfc2V0IChfc2xvdF8sIDMzLCAwKTsKLQkJcHJpbnRmICgiIDMuM1YgY2FyZCBmb3VuZDogIik7Ci0JfQotCi0JZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOwotCXJlZyA9IFBDTUNJQV9QR0NSWCAoX3Nsb3RfKTsKLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlggKF9zbG90XykgPSByZWc7Ci0KLQl1ZGVsYXkgKDI1MDAwMCk7CS8qIHNvbWUgY2FyZHMgbmVlZCA+MTUwIG1zIHRvIGNvbWUgdXAgOi0oICovCi0KLQlkZWJ1ZyAoIiMgaGFyZHdhcmVfZW5hYmxlIGRvbmVcbiIpOwotCi0JcmV0dXJuICgwKTsKLQl9Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfUENNQ0lBKQotaW50IHBjbWNpYV9oYXJkd2FyZV9kaXNhYmxlIChpbnQgc2xvdCkKLXsKLQlyZXR1cm4gMDsJLyogTm8gaGFyZHdhcmUgdG8gZGlzYWJsZSAqLwotfQotI2VuZGlmCi0KLSNlbmRpZgkvKiBDT05GSUdfUENNQ0lBICovCmRpZmYgLS1naXQgYS9ib2FyZC9tYng4eHgvdS1ib290LmxkcyBiL2JvYXJkL21ieDh4eC91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWIyZmJhLi4wMDAwMDAwCi0tLSBhL2JvYXJkL21ieDh4eC91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDEwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0KLVNFQ1RJT05TCi17Ci0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICBhcmNoL3Bvd2VycGMvY3B1L21wYzh4eC9zdGFydC5vCSgudGV4dCopCi0gICAgYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvdHJhcHMubwkoLnRleHQqKQotCi0gICAgKigudGV4dCopCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICBLRUVQKCooLmdvdDIpKQotICAgIEtFRVAoKiguZ290KSkKLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICBLRUVQKCooLmZpeHVwKSkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9ICgoX0dMT0JBTF9PRkZTRVRfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PiAyKSAtIDE7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSopCi0gICAgKiguc2RhdGEqKQotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLQotICAuID0gQUxJR04oNCk7Ci0gIC51X2Jvb3RfbGlzdCA6IHsKLQlLRUVQKCooU09SVCgudV9ib290X2xpc3QqKSkpOwotICB9Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguYnNzKikKLSAgICooLnNic3MqKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX19ic3NfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWJ4OHh4L3UtYm9vdC5sZHMuZGVidWcgYi9ib2FyZC9tYng4eHgvdS1ib290Lmxkcy5kZWJ1ZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NmZWQxZi4uMDAwMDAwMAotLS0gYS9ib2FyZC9tYng4eHgvdS1ib290Lmxkcy5kZWJ1ZworKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLwotICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLwotCi0gICAgYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvc3RhcnQubwkoLnRleHQpCi0gICAgY29tbW9uL2RsbWFsbG9jLm8JKC50ZXh0KQotICAgIGxpYi92c3ByaW50Zi5vCSgudGV4dCkKLSAgICBsaWIvY3JjMzIubwkJKC50ZXh0KQotICAgIGFyY2gvcG93ZXJwYy9saWIvZXh0YWJsZS5vCSgudGV4dCkKLQotICAgIC4gPSBlbnZfb2Zmc2V0OwotICAgIGNvbW1vbi9lbnZfZW1iZWRkZWQubygudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLnJvZGF0YSkKLSAgICAqKC5yb2RhdGExKQotICAgICooLnJvZGF0YS5zdHIxLjQpCi0gICAgKiguZWhfZnJhbWUpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwRkZGKSAmIDB4RkZGRkYwMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotCi0gIC4gPSBBTElHTig0KTsKLSAgLnVfYm9vdF9saXN0IDogewotCUtFRVAoKihTT1JUKC51X2Jvb3RfbGlzdCopKSk7Ci0gIH0KLQotCi0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICB9Ci0gIF9fYnNzX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL21ieDh4eC92cGQuYyBiL2JvYXJkL21ieDh4eC92cGQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJhNzU0ZS4uMDAwMDAwMAotLS0gYS9ib2FyZC9tYng4eHgvdnBkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+Ci0gKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+Ci0gKgotICogQ29kZSBpbiBmYWludGx5IHJlbGF0ZWQgdG8gbGludXgvYXJjaC9wb3dlcnBjLzh4eF9pbzoKLSAqIE1QQzh4eCBDUE0gSTJDIGludGVyZmFjZS4gQ29weXJpZ2h0IChjKSAxOTk5IERhbiBNYWxlayAoZG1hbGVrQGpsYy5uZXQpLgotICoKLSAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGZ1bmN0aW9ucyB0byByZWFkIHRoZSBNQlgncyBWaXRhbCBQcm9kdWN0IERhdGEKLSAqIChWUEQpLiBJIGNhbid0IHVzZSB0aGUgbW9yZSBnZW5lcmFsIGkyYyBjb2RlIGluIG1wYzh4eC8uLi4gc2luY2UgSSBuZWVkCi0gKiB0aGUgVlBEIGF0IGEgdGltZSB3aGVyZSB0aGVyZSBpcyBubyBSQU0gYXZhaWxhYmxlIHlldC4gSGVuY2UgdGhlIFZQRCBpcwotICogcmVhZCBpbnRvIGEgc3BlY2lhbCBhcmVhIGluIHRoZSBEUFJBTSAoc2VlIGNvbmZpZ19NQlguaDo6Q0ZHX0RQUkFNVlBEKS4KLSAqCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2lmZGVmIENPTkZJR184eHgKLSNpbmNsdWRlIDxjb21tcHJvYy5oPgotI2VuZGlmCi0jaW5jbHVkZSAidnBkLmgiCi0KLS8qIExvY2F0aW9uIG9mIHJlY2VpdmUvdHJhbnNtaXQgYnVmZmVyIGRlc2NyaXB0b3JzCi0gKiBBbGxvY2F0ZSBvbmUgdHJhbnNtaXQgYmQgYW5kIG9uZSByZWNlaXZlIGJkLgotICogSUlDX0JEX0ZSRUUgcG9pbnRzIHRvIGZyZWUgYmQgc3BhY2Ugd2hpY2ggd2UnbGwgdXNlIGFzIHR4IGJ1ZmZlci4KLSAqLwotI2RlZmluZSBJSUNfQkRfVFgxICAgICAoQkRfSUlDX1NUQVJUICsgMCpzaXplb2YoY2JkX3QpKQotI2RlZmluZSBJSUNfQkRfVFgyICAgICAoQkRfSUlDX1NUQVJUICsgMSpzaXplb2YoY2JkX3QpKQotI2RlZmluZSBJSUNfQkRfUlggICAgICAoQkRfSUlDX1NUQVJUICsgMipzaXplb2YoY2JkX3QpKQotI2RlZmluZSBJSUNfQkRfRlJFRSAgICAoQkRfSUlDX1NUQVJUICsgMypzaXplb2YoY2JkX3QpKQotCi0vKiBGSVhNRSAtLSByZXBsYWNlIDB4MjAwMCB3aXRoIG9mZnNldG9mICovCi0jZGVmaW5lIFZQRF9QICgodnBkX3QgKikoQ09ORklHX1NZU19JTU1SICsgMHgyMDAwICsgQ09ORklHX1NZU19EUFJBTVZQRCkpCi0KLS8qIHRyYW5zbWl0L3JlY2VpdmUgYnVmZmVycyAqLwotI2RlZmluZSBJSUNfUlhfTEVOR1RIIDEyOAotCi0jZGVmaW5lIFdJVEhfTUlDUk9DT0RFX1BBVENICi0KLXZwZF9wYWNrZXRfdCAqIHZwZF9maW5kX3BhY2tldCh1X2NoYXIgaWRlbnQpCi17Ci0gICAgdnBkX3BhY2tldF90ICpwYWNrZXQ7Ci0gICAgdnBkX3QgKnZwZCA9IFZQRF9QOwotCi0gICAgcGFja2V0ID0gKHZwZF9wYWNrZXRfdCAqKSZ2cGQtPnBhY2tldHM7Ci0gICAgd2hpbGUgKChwYWNrZXQtPmlkZW50aWZpZXIgIT0gaWRlbnQpICYmIHBhY2tldC0+aWRlbnRpZmllciAhPSAweEZGKQotICAgIHsKLQlwYWNrZXQgPSAodnBkX3BhY2tldF90ICopKChjaGFyICopcGFja2V0ICsgcGFja2V0LT5zaXplICsgMik7Ci0gICAgfQotICAgIHJldHVybiBwYWNrZXQ7Ci19Ci0KLXZvaWQgdnBkX2luaXQodm9pZCkKLXsKLSAgICB2b2xhdGlsZSBpbW1hcF90ICAqaW0gPSAoaW1tYXBfdCAqKUNPTkZJR19TWVNfSU1NUjsKLSAgICB2b2xhdGlsZSBjcG04eHhfdCAqY3AgPSAmKGltLT5pbV9jcG0pOwotICAgIHZvbGF0aWxlIGkyYzh4eF90ICppMmMgPSAoaTJjOHh4X3QgKikmKGltLT5pbV9pMmMpOwotICAgIHZvbGF0aWxlIGlpY190ICppaXA7Ci0jaWZkZWYgV0lUSF9NSUNST0NPREVfUEFUQ0gKLSAgICB1bG9uZyByZWxvYyA9IDA7Ci0jZW5kaWYKLQotICAgIGlpcCA9IChpaWNfdCAqKSZjcC0+Y3BfZHBhcmFtW1BST0ZGX0lJQ107Ci0KLSAgICAvKgotICAgICAqIGtsdWRnZTogd2hlbiBydW5uaW5nIGZyb20gZmxhc2gsIG5vIG1pY3JvY29kZSBwYXRjaCBjYW4gYmUKLSAgICAgKiBpbnN0YWxsZWQuIEhvd2V2ZXIsIHRoZSBEUE1FTSB1c3VhbGx5IGNvbnRhaW5zIG5vbi16ZXJvCi0gICAgICogZ2FyYmFnZSBhdCB0aGUgcmVsb2NhdGFibGUgcGF0Y2ggYmFzZSBsb2NhdGlvbiwgc28gbGV0cyBjbGVhcgotICAgICAqIGl0IG5vdy4gVGhpcyB3YXkgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgY2FuIHN1cHBvcnQgdGhlIG1pY3JvY29kZQotICAgICAqIHBhdGNoIGR5bmFtaWNhbGx5LgotICAgICAqLwotICAgIGlmICgodWxvbmcpdnBkX2luaXQgJiAweGZmMDAwMDAwKQotICAgICAgaWlwLT5paWNfcnBiYXNlID0gMDsKLQotI2lmZGVmIFdJVEhfTUlDUk9DT0RFX1BBVENICi0gICAgLyogQ2hlY2sgZm9yIGFuZCB1c2UgYSBtaWNyb2NvZGUgcmVsb2NhdGlvbiBwYXRjaC4gKi8KLSAgICBpZiAoKHJlbG9jID0gaWlwLT5paWNfcnBiYXNlKSkKLSAgICAgIGlpcCA9IChpaWNfdCAqKSZjcC0+Y3BfZHBtZW1baWlwLT5paWNfcnBiYXNlXTsKLSNlbmRpZgotICAgIC8qIEluaXRpYWxpemUgUG9ydCBCIElJQyBwaW5zICovCi0gICAgY3AtPmNwX3BicGFyIHw9IDB4MDAwMDAwMzA7Ci0gICAgY3AtPmNwX3BiZGlyIHw9IDB4MDAwMDAwMzA7Ci0gICAgY3AtPmNwX3Bib2RyIHw9IDB4MDAwMDAwMzA7Ci0KLSAgICBpMmMtPmkyY19pMm1vZCA9IDB4MDQ7ICAvKiBmaWx0ZXIgY2xvY2sgKi8KLSAgICBpMmMtPmkyY19pMmFkZCA9IDB4MzQ7CS8qIHNlbGVjdCBhbiBhcmJpdHJhcnkgKHVuaXF1ZSkgYWRkcmVzcyAqLwotICAgIGkyYy0+aTJjX2kyYnJnID0gMHgwNzsgIC8qIG1ha2UgY2xvY2sgcnVuIG1heGltdW0gc2xvdwkqLwotICAgIGkyYy0+aTJjX2kyY21yID0gMHgwMDsgIC8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwotICAgIGkyYy0+aTJjX2kyY2VyID0gMHgxZjsgIC8qIGNsZWFyIGV2ZW50cyAqLwotICAgIGkyYy0+aTJjX2kyY29tID0gMHgwMTsgIC8qIGNvbmZpZ3VyZSBpMmMgdG8gd29yayBhcyBtYXN0ZXIgKi8KLQotICAgIGlmICh2cGRfcmVhZCgweGE0LCAodWNoYXIqKVZQRF9QLCBWUERfRUVQUk9NX1NJWkUsIDApICE9IFZQRF9FRVBST01fU0laRSkKLSAgICB7Ci0JaGFuZygpOwotICAgIH0KLX0KLQotCi0vKiBSZWFkIGZyb20gSTJDLgotICogVGhpcyBpcyBhIHR3byBzdGVwIHByb2Nlc3MuICBGaXJzdCwgd2Ugc2VuZCB0aGUgImR1bW15IiB3cml0ZQotICogdG8gc2V0IHRoZSBkZXZpY2Ugb2Zmc2V0IGZvciB0aGUgcmVhZC4gIFNlY29uZCwgd2UgcGVyZm9ybQotICogdGhlIHJlYWQgb3BlcmF0aW9uLgotICovCi1pbnQgdnBkX3JlYWQodWludCBpaWNfZGV2aWNlLCB1Y2hhciAqYnVmLCBpbnQgY291bnQsIGludCBvZmZzZXQpCi17Ci0gICAgdm9sYXRpbGUgaW1tYXBfdCAgKmltID0gKGltbWFwX3QgKilDT05GSUdfU1lTX0lNTVI7Ci0gICAgdm9sYXRpbGUgY3BtOHh4X3QgKmNwID0gJihpbS0+aW1fY3BtKTsKLSAgICB2b2xhdGlsZSBpMmM4eHhfdCAqaTJjID0gKGkyYzh4eF90ICopJihpbS0+aW1faTJjKTsKLSAgICB2b2xhdGlsZSBpaWNfdCAqaWlwOwotICAgIHZvbGF0aWxlIGNiZF90ICp0YmRmMSwgKnRiZGYyLCAqcmJkZjsKLSAgICB1Y2hhciAqdGI7Ci0gICAgdWNoYXIgZXZlbnQ7Ci0jaWZkZWYgV0lUSF9NSUNST0NPREVfUEFUQ0gKLSAgICB1bG9uZyByZWxvYyA9IDA7Ci0jZW5kaWYKLQotICAgIGlpcCA9IChpaWNfdCAqKSZjcC0+Y3BfZHBhcmFtW1BST0ZGX0lJQ107Ci0jaWZkZWYgV0lUSF9NSUNST0NPREVfUEFUQ0gKLSAgICAvKiBDaGVjayBmb3IgYW5kIHVzZSBhIG1pY3JvY29kZSByZWxvY2F0aW9uIHBhdGNoLiAqLwotICAgIGlmICgocmVsb2MgPSBpaXAtPmlpY19ycGJhc2UpKQotICAgICAgaWlwID0gKGlpY190ICopJmNwLT5jcF9kcG1lbVtpaXAtPmlpY19ycGJhc2VdOwotI2VuZGlmCi0gICAgdGJkZjEgPSAoY2JkX3QgKikmY3AtPmNwX2RwbWVtW0lJQ19CRF9UWDFdOwotICAgIHRiZGYyID0gKGNiZF90ICopJmNwLT5jcF9kcG1lbVtJSUNfQkRfVFgyXTsKLSAgICByYmRmICA9IChjYmRfdCAqKSZjcC0+Y3BfZHBtZW1bSUlDX0JEX1JYXTsKLQotICAgIC8qIFNlbmQgYSAiZHVtbXkgd3JpdGUiIG9wZXJhdGlvbi4gIFRoaXMgaXMgYSB3cml0ZSByZXF1ZXN0IHdpdGgKLSAgICAgKiBvbmx5IHRoZSBvZmZzZXQgc2VudCwgZm9sbG93ZWQgYnkgYW5vdGhlciBzdGFydCBjb25kaXRpb24uCi0gICAgICogVGhpcyB3aWxsIGVuc3VyZSB3ZSBzdGFydCByZWFkaW5nIGZyb20gdGhlIGZpcnN0IGxvY2F0aW9uCi0gICAgICogb2YgdGhlIEVFUFJPTS4KLSAgICAgKi8KLSAgICB0YiA9ICh1Y2hhciopJmNwLT5jcF9kcG1lbVtJSUNfQkRfRlJFRV07Ci0gICAgdGJbMF0gPSBpaWNfZGV2aWNlICYgMHhmZTsJLyogZGV2aWNlIGFkZHJlc3MgKi8KLSAgICB0YlsxXSA9IG9mZnNldDsJICAgICAgICAvKiBvZmZzZXQgKi8KLSAgICB0YmRmMS0+Y2JkX2J1ZmFkZHIgPSAodWludCl0YjsKLSAgICB0YmRmMS0+Y2JkX2RhdGxlbiA9IDI7Ci0gICAgdGJkZjEtPmNiZF9zYyA9IDB4ODQwMDsKLQotICAgIHRiICs9IDI7Ci0gICAgdGJbMF0gPSBpaWNfZGV2aWNlIHwgMTsJLyogZGV2aWNlIGFkZHJlc3MgKi8KLSAgICB0YmRmMi0+Y2JkX2J1ZmFkZHIgPSAodWludCl0YjsKLSAgICB0YmRmMi0+Y2JkX2RhdGxlbiA9IGNvdW50KzE7Ci0gICAgdGJkZjItPmNiZF9zYyA9IDB4YmMwMDsKLQotICAgIHJiZGYtPmNiZF9idWZhZGRyID0gKHVpbnQpYnVmOwotICAgIHJiZGYtPmNiZF9kYXRsZW4gPSAwOwotICAgIHJiZGYtPmNiZF9zYyA9IDB4YjAwMDsKLQotICAgIGlpcC0+aWljX3RiYXNlID0gSUlDX0JEX1RYMTsKLSAgICBpaXAtPmlpY190YnB0ciA9IElJQ19CRF9UWDE7Ci0gICAgaWlwLT5paWNfcmJhc2UgPSBJSUNfQkRfUlg7Ci0gICAgaWlwLT5paWNfcmJwdHIgPSBJSUNfQkRfUlg7Ci0gICAgaWlwLT5paWNfcmZjciA9IDB4MTU7Ci0gICAgaWlwLT5paWNfdGZjciA9IDB4MTU7Ci0gICAgaWlwLT5paWNfbXJibHIgPSBjb3VudDsKLSAgICBpaXAtPmlpY19yc3RhdGUgPSAwOwotICAgIGlpcC0+aWljX3RzdGF0ZSA9IDA7Ci0KLSAgICBpMmMtPmkyY19pMmNlciA9IDB4MWY7ICAvKiBjbGVhciBldmVudCBtYXNrICovCi0gICAgaTJjLT5pMmNfaTJtb2QgfD0gMTsgICAgLyogZW5hYmxlIGlpYyBvcGVyYXRpb24gKi8KLSAgICBpMmMtPmkyY19pMmNvbSB8PSAweDgwOwkvKiBzdGFydCBtYXN0ZXIgKi8KLQotICAgIC8qIHdhaXQgZm9yIElJQyB0cmFuc2ZlciAqLwotICAgIGRvIHsKLQlfX2FzbV9fIHZvbGF0aWxlICgiZWllaW8iKTsKLQlldmVudCA9IGkyYy0+aTJjX2kyY2VyOwotICAgIH0gd2hpbGUgKGV2ZW50ID09IDApOwotCi0gICAgaWYgKChldmVudCAmIDB4MTApIHx8IChldmVudCAmIDB4MDQpKSB7Ci0JY291bnQgPSAtMTsKLQlnb3RvIGJhaWxvdXQ7Ci0gICAgfQotCi1iYWlsb3V0OgotICAgIGkyYy0+aTJjX2kybW9kICY9IH4xOyAgIC8qIHR1cm4gb2ZmIGlpYyBvcGVyYXRpb24gKi8KLSAgICBpMmMtPmkyY19pMmNlciA9IDB4MWY7ICAvKiBjbGVhciBldmVudCBtYXNrICovCi0KLSAgICByZXR1cm4gY291bnQ7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9tYng4eHgvdnBkLmggYi9ib2FyZC9tYng4eHgvdnBkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkOWViN2YuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbWJ4OHh4L3ZwZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLSNpZm5kZWYgX192cGRfaAotI2RlZmluZSBfX3ZwZF9oCi0KLS8qCi0gKiBNb2R1bGUgbmFtZTogJU0lCi0gKiBEZXNjcmlwdGlvbjoKLSAqIFZpdGFsIFByb2R1Y3QgRGF0YSAoVlBEKSBIZWFkZXIgTW9kdWxlCi0gKiBTQ0NTIGlkZW50aWZpY2F0aW9uOiAlSSUKLSAqIEJyYW5jaDogJUIlCi0gKiBTZXF1ZW5jZTogJVMlCi0gKiBEYXRlIG5ld2VzdCBhcHBsaWVkIGRlbHRhIHdhcyBjcmVhdGVkIChNTS9ERC9ZWSk6ICVHJQotICogVGltZSBuZXdlc3QgYXBwbGllZCBkZWx0YSB3YXMgY3JlYXRlZCAoSEg6TU06U1MpOiAlVSUKLSAqIFNDQ1MgZmlsZSBuYW1lICVGJQotICogRnVsbHkgcXVhbGlmaWVkIFNDQ1MgZmlsZSBuYW1lOgotICogJVAlCi0gKiBDb3B5cmlnaHQ6Ci0gKiAoQykgQ09QWVJJR0hUIE1PVE9ST0xBLCBJTkMuIDE5OTYKLSAqIEFMTCBSSUdIVFMgUkVTRVJWRUQKLSAqIE5vdGVzOgotICogSGlzdG9yeToKLSAqIERhdGUgV2hvCi0gKgotICogMTAvMjQvOTYgUm9iIEJheHRlcgotICogSW5pdGlhbCByZWxlYXNlLgotICoKLSAqLwotCi0jZGVmaW5lIFZQRF9FRVBST01fU0laRSAyNTYgLyogRUVQUk9NIHNpemUgaW4gYnl0ZXMgKi8KLQotLyoKLSAqIHBhY2tldCB0dXBsZSBpZGVudGlmaWVycwotICoKLSAqIDB4MEQgLSAweEJGIHJlc2VydmVkCi0gKiAweEMwIC0gMHhGRSB1c2VyIGRlZmluZWQKLSAqLwotI2RlZmluZSBWUERfUElEX0dJICAgMHgwMCAvKiBndWFyYW50ZWVkIGlsbGVnYWwgKi8KLSNkZWZpbmUgVlBEX1BJRF9QSUQgIDB4MDEgLyogcHJvZHVjdCBpZGVudGlmaWVyIChBU0NJSSkgKi8KLSNkZWZpbmUgVlBEX1BJRF9GQU4gIDB4MDIgLyogZmFjdG9yeSBhc3NlbWJseS1udW1iZXIgKEFTQ0lJKSAqLwotI2RlZmluZSBWUERfUElEX1NOICAgMHgwMyAvKiBzZXJpYWwtbnVtYmVyIChBU0NJSSkgKi8KLSNkZWZpbmUgVlBEX1BJRF9QQ08gIDB4MDQgLyogcHJvZHVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMoYmluYXJ5KSAqLwotI2RlZmluZSBWUERfUElEX0lDUyAgMHgwNSAvKiBpbnRlcm5hbCBjbG9jayBzcGVlZCBpbiBIWiAoaW50ZWdlcikgKi8KLSNkZWZpbmUgVlBEX1BJRF9FQ1MgIDB4MDYgLyogZXh0ZXJuYWwgY2xvY2sgc3BlZWQgaW4gSFogKGludGVnZXIpICovCi0jZGVmaW5lIFZQRF9QSURfUkNTICAweDA3IC8qIHJlZmVyZW5jZSBjbG9jayBzcGVlZCBpbiBIWihpbnRlZ2VyKSAqLwotI2RlZmluZSBWUERfUElEX0VBICAgMHgwOCAvKiBldGhlcm5ldCBhZGRyZXNzIChiaW5hcnkpICovCi0jZGVmaW5lIFZQRF9QSURfTVQgICAweDA5IC8qIG1pY3JvcHJvY2Vzc29yIHR5cGUgKEFTQ0lJKSAqLwotI2RlZmluZSBWUERfUElEX0NSQyAgMHgwQSAvKiBFRVBST00gQ1JDIChpbnRlZ2VyKSAqLwotI2RlZmluZSBWUERfUElEX0ZNQyAgMHgwQiAvKiBGTEFTSCBtZW1vcnkgY29uZmlndXJhdGlvbiAoYmluYXJ5KSAqLwotI2RlZmluZSBWUERfUElEX1ZMU0kgMHgwQyAvKiBWTFNJIHJldmlzaW9ucy92ZXJzaW9ucyAoYmluYXJ5KSAqLwotI2RlZmluZSBWUERfUElEX1RFUk0gMHhGRiAvKiB0ZXJtaW5hdGlvbiAqLwotCi0vKgotICogVlBEIHN0cnVjdHVyZSAoZm9ybWF0KQotICovCi0jZGVmaW5lIFZQRF9FWUVfU0laRSA4IC8qIGV5ZWNhdGNoZXIgc2l6ZSAqLwotdHlwZWRlZiBzdHJ1Y3QgdnBkX2hlYWRlcgotewotCXVjaGFyIGV5ZWNhdGNoZXJbVlBEX0VZRV9TSVpFXTsgLyogZXllY2F0Y2hlciAtICJNT1RPUk9MQSIgKi8KLQl1c2hvcnQgc2l6ZTsgLyogc2l6ZSBvZiBFRVBST00gKi8KLX0gdnBkX2hlYWRlcl90OwotCi0jZGVmaW5lIFZQRF9EQVRBX1NJWkUgKFZQRF9FRVBST01fU0laRS1zaXplb2YodnBkX2hlYWRlcl90KSkKLXR5cGVkZWYgc3RydWN0IHZwZAotewotCXZwZF9oZWFkZXJfdCBoZWFkZXI7IC8qIGhlYWRlciAqLwotCXVjaGFyIHBhY2tldHNbVlBEX0RBVEFfU0laRV07IC8qIGRhdGEgKi8KLX0gdnBkX3Q7Ci0KLS8qCi0gKiBwYWNrZXQgdHVwbGUgc3RydWN0dXJlIChmb3JtYXQpCi0gKi8KLXR5cGVkZWYgc3RydWN0IHZwZF9wYWNrZXQKLXsKLSAgICB1Y2hhciBpZGVudGlmaWVyOyAvKiBpZGVudGlmaWVyIChQSURzIGFib3ZlKSAqLwotICAgIHVjaGFyIHNpemU7ICAgICAgIC8qIHNpemUgb2YgdGhlIGZvbGxvd2luZyBkYXRhIGFyZWEgKi8KLSAgICB1Y2hhciBkYXRhWzFdOyAgICAvKiBkYXRhIChzaXplIGlzIGRlcGVuZGVudCB1cG9uIFBJRCkgKi8KLX0gdnBkX3BhY2tldF90OwotCi0vKgotICogTUJYIHByb2R1Y3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGJpdCBkZWZpbml0aW9ucwotICoKLSAqIE5vdGVzOgotICogMS4gVGhlIGJpdCBudW1iZXJpbmcgaXMgcmV2ZXJzZWQgaW4gcGVyc3BlY3RpdmUgd2l0aCB0aGUgQyBjb21waWxlci4KLSAqLwotI2RlZmluZSBQQ09fQkJSQU0gICAgKDE8PDApICAvKiBiYXR0ZXJ5LWJhY2tlZCBSQU0gKEJCUkFNKSBhbmQgc29ja2V0ICovCi0jZGVmaW5lIFBDT19CT09UUk9NICAoMTw8MSkgIC8qIGJvb3QgUk9NIGFuZCBzb2NrZXQgKGkuZS4sIHNvY2tldGVkIEZMQVNIKSAqLwotI2RlZmluZSBQQ09fS0FQV1IgICAgKDE8PDIpICAvKiBrZWVwIGFsaXZlIHBvd2VyIHNvdXJjZSAobGl0aGl1bSBiYXR0ZXkpIGFuZCBjb250cm9sIGNpcmN1aXQgKi8KLSNkZWZpbmUgUENPX0VORVRfVFAgICgxPDwzKSAgLyogZXRoZXJuZXQgdHdpc3RlZCBwYWlyIChUUCkgY29ubmVjdG9yIChSSjQ1KSAqLwotI2RlZmluZSBQQ09fRU5FVF9BVUkgKDE8PDQpICAvKiBldGhlcm5ldCBhdHRhY2htZW50IHVuaXQgaW50ZXJmYWNlIChBVUkpIGhlYWRlciAqLwotI2RlZmluZSBQQ09fUENNQ0lBICAgKDE8PDUpICAvKiBQQ01DSUEgc29ja2V0ICovCi0jZGVmaW5lIFBDT19ESU1NICAgICAoMTw8NikgIC8qIERJTU0gbW9kdWxlIHNvY2tldCAqLwotI2RlZmluZSBQQ09fRFRUICAgICAgKDE8PDcpICAvKiBkaWdpdGFsIHRoZXJtb21ldGVyIGFuZCB0aGVybW9zdGF0IChEVFQpIGRldmljZSAqLwotI2RlZmluZSBQQ09fTENEICAgICAgKDE8PDgpICAvKiBsaXF1aWQgY3J5c3RhbCBkaXNwbGF5IChMQ0QpIGRldmljZSAqLwotI2RlZmluZSBQQ09fUENJICAgICAgKDE8PDkpICAvKiBQQ0ktQnVzIGJyaWRnZSBkZXZpY2UgKFFTcGFuKSBhbmQgSVNBLUJ1cyBicmlkZ2UgZGV2aWNlIChXaW5ib25kKSAqLwotI2RlZmluZSBQQ09fUENJTyAgICAgKDE8PDEwKSAvKiBQQyBJL08gKENPTTEsIENPTTIsIEZEQywgTFBULCBLZXlib2FyZC9Nb3VzZSkgKi8KLSNkZWZpbmUgUENPX0VJREUgICAgICgxPDwxMSkgLyogZW5oYW5jZWQgSURFIChFSURFKSBoZWFkZXIgKi8KLSNkZWZpbmUgUENPX0ZEQyAgICAgICgxPDwxMikgLyogZmxvcHB5IGRpc2sgY29udHJvbGxlciAoRkRDKSBoZWFkZXIgKi8KLSNkZWZpbmUgUENPX0xQVF84WFggICgxPDwxMykgLyogcGFyYWxsZWwgcG9ydCBoZWFkZXIgdmlhIE1QQzh4eCAqLwotI2RlZmluZSBQQ09fTFBUX1BDSU8gKDE8PDE0KSAvKiBwYXJhbGxlbCBwb3J0IGhlYWRlciB2aWEgUEMgSS9PICovCi0KLS8qCi0gKiBGTEFTSCBtZW1vcnkgY29uZmlndXJhdGlvbiBwYWNrZXQgZGF0YQotICovCi10eXBlZGVmIHN0cnVjdCB2cGRfZm1jCi17Ci0gICAgdXNob3J0IG1pZDsgLyogbWFudWZhY3R1cmVyJ3MgaWRlbml0ZmllciAqLwotICAgIHVzaG9ydCBkaWQ7IC8qIG1hbnVmYWN0dXJlcidzIGRldmljZSBpZGVuaXRmaWVyICovCi0gICAgdWNoYXIgZGR3OyAgLyogZGV2aWNlIGRhdGEgd2lkdGggKGUuZy4sIDgtYml0cywgMTYtYml0cykgKi8KLSAgICB1Y2hhciBub2Q7ICAvKiBudW1iZXIgb2YgZGV2aWNlcyBwcmVzZW50ICovCi0gICAgdWNoYXIgbm9jOyAgLyogbnVtYmVyIG9mIGNvbHVtbnMgKi8KLSAgICB1Y2hhciBjdzsgICAvKiBjb2x1bW4gd2lkdGggaW4gYml0cyAqLwotICAgIHVjaGFyIHdlZHc7IC8qIHdyaXRlL2VyYXNlIGRhdGEgd2lkdGggKi8KLX0gdnBkX2ZtY190OwotCi0vKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1leHRlcm4gdm9pZCB2cGRfaW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgIHZwZF9yZWFkKHVpbnQgaWljX2RldmljZSwgdWNoYXIgKmJ1ZiwgaW50IGNvdW50LCBpbnQgb2Zmc2V0KTsKLWV4dGVybiAgICAgIHZwZF9wYWNrZXRfdCAqdnBkX2ZpbmRfcGFja2V0KHVfY2hhciBpZGVudCk7Ci0KLSNlbmRpZiAvKiBfX3ZwZF9oICovCmRpZmYgLS1naXQgYS9ib2FyZC9tb3Vzc2UvUkVBRE1FIGIvYm9hcmQvbW91c3NlL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVkZGE3YS4uMDAwMDAwMAotLS0gYS9ib2FyZC9tb3Vzc2UvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMzQ2ICswLDAgQEAKLQotVS1Cb290IGZvciBNT1VTU0UvTVBDODI0MCAoS0FITFVBKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSmFtZXMgRG91Z2hlcnR5IChqZmRAYnJvYWRjb20uY29tKSwgMDkvMTAvMDEKLQotVGhlIEJyb2FkY29tL1Zvb2hhIE1vdXNzZSBib2FyZCBpcyBhIDNVIENvbXBhY3QgUENJIHN5c3RlbSBib2FyZAotd2hpY2ggdXNlcyB0aGUgTVBDODI0MCwgYSA2NE1CIFNEUkFNIFNJTU0sIGFuZCBoYXMgb25ib2FyZAotREVDIDIxMTQzLCBOUzE2NTUwIFVBUlQsIGFuIFNHUyBNNDhUNTlZIFRPRCwgYW5kIDRNQiBGTEFTSC4KLVNlZSBhbHNvOiBodHRwOi8vd3d3LnZvb2hhLmNvbS8KLQotKiBOVlJBTSBzZXRlbnYvcHJpbnRlbnYvc2F2ZW52IHN1cHBvcnRlZC4KLSogRGF0ZSBDb21tYW5kCi0qIFNlcmlhbCBDb25zb2xlIHN1cHBvcnQKLSogTmV0d29yayBzdXBwb3J0Ci0qIEZMQVNIIG9mIGtlcm5lbCBpbWFnZXMgaXMgc3VwcG9ydGVkLgotKiBGTEFTSCBvZiBVLUJvb3QgdG8gb25ib2FyZCBhbmQgUExDQyBib290IHJlZ2lvbi4KLSogS2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb25zIGZyb20gTlZSQU0gaXMgc3VwcG9ydGVkLgotKiBJUCBQTlAgb3B0aW9ucyBzdXBwb3J0ZWQuCi0KLVUtQm9vdCBMb2FkaW5nLi4uCi0KLQotVS1Cb290IDEuMC41IChTZXAgMTAgMjAwMSAtIDAwOjIyOjI1KQotCi1DUFU6ICAgTVBDODI0MCBSZXZpc2lvbiAxLjEgYXQgMTk4IE1IejogMTYga0IgSS1DYWNoZSAxNiBrQiBELUNhY2hlCi1Cb2FyZDogTU9VU1NFIE1QQzgyNDAvS0FITFVBIC0gQ0hSUCAoTUFQIEIpCi1CdWlsdDogU2VwIDEwIDIwMDEgYXQgMDE6MDE6NTAKLU1QTEQ6ICBSZXZpc2lvbiAxMjcKLUxvY2FsIEJ1czogIDMzIE1IegotUlRDOiAgIE00OFQ1ODkgVE9EL05WUkFNICg4MTc2KSBieXRlcwotICBDdXJyZW50IGRhdGUvdGltZTogOS8xMC8yMDAxIDA6MTg6NTIKLURSQU06ICA2NCBNQgotRkxBU0g6ICAxLjk2MCBNQgotUENJOiAgICBzY2FubmluZyBidXMwIC4uLgotICBidXMgZGV2IGZuIHZlbklEIGRldklEIGNsYXNzICByZXYgTUJBUjAgICAgTUJBUjEgICAgSVBJTiBJTElORQotICAwMCAgMDAgIDAwIDEwNTcgIDAwMDMgIDA2MDAwMCAxMSAgMDAwMDAwMDggMDAwMDAwMDAgMDEgICAwMAotICAwMCAgMGQgIDAwIDEwMTEgIDAwMTkgIDAyMDAwMCA0MSAgODAwMDAwMDEgODAwMDAwMDAgMDEgICAwMQotICAwMCAgMGUgIDAwIDEwNWEgIDRkMzggIDAxODAwMCAwMSAgYTAwMDAwMDEgYTAwMDEwMDEgMDEgICAwMwotSW46ICAgIHNlcmlhbAotT3V0OiAgIHNlcmlhbAotRXJyOiAgIHNlcmlhbAotCi1IaXQgYW55IGtleSB0byBzdG9wIGF1dG9ib290OiAgMAotPT4KLQotSS4gUm9vdCBGaWxlU3lzdGVtL0lQIENvbmZpZ3VyYXRpb24KLQotYm9vdGNtZD10ZnRwIDEwMDAwMCB2bWxpbnV4LmltZztib290bQotYm9vdGRlbGF5PTMKLWJhdWRyYXRlPTk2MDAKLWlwYWRkcj08SVAgQUREUkVTUz4KLW5ldG1hc2s9PE5FVE1BU0s+Ci1ob3N0bmFtZT08TkFNRT4KLXNlcnZlcmlwPTxORlMgU0VSVkVSIElQIEFERFJFU1M+Ci1ldGhhZGRyPTAwOjAwOjEwOjIwOjMwOjQ0Ci1uZnNyb290PTxORlMgU0VSVkVSIElQIEFERFJFU1M+Oi9ib290L3Jvb3QtZnMKLWdhdGV3YXk9PElQIEFERFJFU1M+Ci1yb290PS9kZXYvbmZzCi1zdGRpbj1zZXJpYWwKLXN0ZG91dD1zZXJpYWwKLXN0ZGVycj1zZXJpYWwKLQotTlZSQU0gZW52aXJvbm1lbnQgdmFyaWFibGVzLgotCi11c2UgdGhlIGNvbW1hbmQ6Ci0KLXNldGVudiA8YXR0cmlidXRlPiA8dmFsdWU+Ci0KLXR5cGUgInNhdmVlbnYiIHRvIHdyaXRlIHRvIE5WUkFNLgotCi0KLUlJLiBUbyBib290IGZyb20gYSBoYXJkIGRyaXZlOgotCi1zZXRlbnYgcm9vdCAvZGV2L2hkYTEKLQotCi1JSUkuIElQIG9wdGlvbnMgd2hpY2ggY29uZmlndXJlIHRoZSBuZXR3b3JrOgotCi1pcGFkZHI9PElQIEFERFJFU1MgT0YgTUFDSElORT4KLW5ldG1hc2s9PE5FVE1BU0s+Ci1ob3N0bmFtZT1tb3Vzc2UKLWV0aGFkZHI9MDA6MDA6MTA6MjA6MzA6NDQKLWdhdGV3YXk9PElQIEFERFJFU1MgT0YgR0FURVdBWS9ST1VURVI+Ci0KLQotSVYuIElQIE9wdGlvbnMgd2hpY2ggY29uZmlndXJlIE5GUyBSb290L0Jvb3QgU3VwcG9ydAotCi1yb290PS9kZXYvbmZzCi1zZXJ2ZXJpcD08TkZTIFNFUlZFUiBJUCBBRERSRVNTPgotbmZzcm9vdD08TkZTIFNFUlZFUiBJUCBBRERSRVNTPjovYm9vdC9yb290LWZzCi0KLVYuIFUtQm9vdCBJbWFnZSBTdXBwb3J0Ci0KLVRoZSBVLUJvb3QgYm9vdCBsb2FkZXIgYXNzdW1lcyB0aGF0IGFmdGVyIHlvdSBidWlsZAoteW91ciBrZXJuZWwgKHZtbGludXgpLCB5b3Ugd2lsbCBjcmVhdGUgYSBVLUJvb3QgaW1hZ2UKLXVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgb3Igc2NyaXB0OgotCi0jIS9iaW4vY3NoCi0vYmluL3RvdWNoIHZtbGludXguaW1nCi0vYmluL3JtIHZtbGludXguaW1nCi1zZXQgcGF0aD0oJFRPT0xCQVNFL2JpbiAkcGF0aCkKLXNldCBwYXRoPSgkVV9CT09UL3Rvb2xzICRwYXRoKQotcG93ZXJwYy1saW51eC1vYmpjb3B5IC1TIC1PIGJpbmFyeSB2bWxpbnV4IHZtbGludXguYmluCi1nemlwIC12ZiB2bWxpbnV4LmJpbgotbWtpbWFnZSAtQSBwcGMgLU8gbGludXggLVQga2VybmVsIC1DIGd6aXAgLWEgMCAtZSAwIC1uIHZtbGludXguYmluLmd6IC1kIHZtbGludXguYmluLmd6IHZtbGludXguaW1nCi1scyAtbCB2bWxpbnV4LmltZwotCi0KLVZJLiBPTkJPQVJEIEZMQVNIIFN1cHBvcnQKLQotRkxBU0ggc3VwcG9ydCBpcyBwcm92aWRlZCBmb3IgdGhlIG9uYm9hcmQgRkxBU0ggY2hpcCBCb290cm9tIGFyZWEuCi1VLUJvb3QgaXMgbG9hZGVkIGludG8gZWl0aGVyIHRoZSBST00gYm9vdCByZWdpb24gb2YgdGhlIEZMQVNIIGNoaXAsCi1hZnRlciBmaXJzdCBiZWluZyBib290LXN0cmFwcGVkIGZyb20gYSBwcmUtcHJvZ2FtbWVkIEFNRDI5RjA0MCBQTENDCi1ib290cm9tLiBUaGUgUExDQyBuZWVkcyB0byBiZSBwcm9ncmFtbWVkIHdpdGggYSBST00gYnVybmVyIHVzaW5nCi1BTUQgMjlGMDQwIFJPTSBwYXJ0cyBhbmQgdGhlIHUtYm9vdC5iaW4gb3IgdS1ib290LmhleCAoUy1SZWNvcmQpCi1pbWFnZXMuCi0KLVRoZSBQTENDIG92ZXJsYXlzIHRoaXMgc2FtZSByZWdpb24gb2YgZmxhc2ggYXMgdGhlIG9uYm9hcmQgRkxBU0gsCi10aGUganVtcGVyIEoxMDAgaXMgYSBjaGlwLXNlbGVjdCBmb3Igd2hpY2ggZmxhc2ggY2hpcCB5b3Ugd2FudCB0bwotcHJvZ2FtLiBXaGVuIGp1bXBlciBKMTAwIGlzIGNvbm5lY3RlZCB0byBwaW5zIDItMywgeW91IGJvb3QgZnJvbQotUExDQyBGTEFTSC4KLQotVG8gYnJpbmd1cCBhIHN5c3RlbSwgc2ltcGx5IGZsYXNoIGEgZmxhc2ggYW4gQU1EMjlGMDQwIFBMQ0MKLWJvb3Ryb20sIGFuZCBwdXQgdGhpcyBpbiB0aGUgUExDQyBzb2NrZXQuIE1vdmUganVtcGVyIEoxMDAgdG8KLXBpbnMgMi0zIGFuZCBib290IGZyb20gdGhlIFBMQ0MuCi0KLQotTm93LCB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsIG1vdmUgSnVtcGVyIEoxMDAgdG8KLXBpbnMgMS0yIGFuZCBmb2xsb3cgdGhlIHByb2NlZHVyZSBiZWxvdyB0byBGTEFTSCBhIGJvb3Ryb20KLSh1LWJvb3QuYmluKSBpbWFnZSBpbnRvIHRoZSBvbmJvYXJkIGJvb3Ryb20gcmVnaW9uIChBTUQyOUxWMTYwREIpOgotCi10ZnRwIDEwMDAwMCB1LWJvb3QuYmluCi1wcm90ZWN0IG9mZiBGRkYwMDAwMCBGRkY3RkZGRgotZXJhc2UgRkZGMDAwMDAgRkZGN0ZGRkYKLWNwLmIgMTAwMDAwIEZGRjAwMDAwIFwke2ZpbGVzaXplfVwKLQotCi1IZXJlIGlzIGFuIGV4YW1wbGU6Ci0KLT0+dGZ0cCAxMDAwMDAgdS1ib290LmJpbgotZXRoX2hhbHQKLWV0aDA6IERDMjExNDMgRXRoZXJuZXQgYWRhcHRlcihidXM9MCwgZGV2aWNlPTEzLCBmdW5jPTApCi1ERUMgRXRoZXJuZXQgaW9iYXNlPTB4ODAwMDAwMDAKLUFSUCBicm9hZGNhc3QgMQotRmlsZW5hbWUgJ3UtYm9vdC5iaW4nLgotTG9hZCBhZGRyZXNzOiAweDEwMDAwMAotTG9hZGluZzogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotZG9uZQotQnl0ZXMgdHJhbnNmZXJyZWQgPSAxMjMyMjAgKDFlMTU0IGhleCkKLWV0aF9oYWx0Ci09PnByb3RlY3Qgb2ZmIEZGRjAwMDAwIEZGRjdGRkZGCi1Vbi1Qcm90ZWN0ZWQgOCBzZWN0b3JzCi09PmVyYXNlIEZGRjAwMDAwIEZGRjdGRkZGCi1FcmFzZSBGbGFzaCBmcm9tIDB4ZmZmMDAwMDAgdG8gMHhmZmY3ZmZmZgotRXJhc2UgRkxBU0hbUExDQ19CT09UXSAtOCBzZWN0b3JzOi4uLi4uLi4uIGRvbmUKLUVyYXNlZCA4IHNlY3RvcnMKLT0+Y3AuYiAxMDAwMDAgRkZGMDAwMDAgMWUxNTQKLUNvcHkgdG8gRmxhc2guLi4gRkxBU0hbUExDQ19CT09UXTouLmRvbmUKLT0+Ci0KLQotQi4gRkxBU0ggUkFNRElTSyBSRUdJT04KLQotRkxBU0ggc3VwcG9ydCBpcyBwcm92aWRlZCBmb3IgYW4gT25ib2FyZCA1MTJLIFJBTURJU0sgcmVnaW9uLgotCi1UVGhlIGZvbGxvd2luZyBjb21tYW5kcyB3aWxsIEZMQVNIIGEgYm9vdHJvbSAodS1ib290LmJpbikgaW1hZ2UKLWludG8gdGhlIG9uYm9hcmQgRkxBU0ggcmVnaW9uIChBTUQyOUxWMTYwREIgMk1CIEZMQVNIKToKLQotdGZ0cCAxMDAwMDAgdS1ib290LmJpbgotcHJvdGVjdCBvZmYgRkZGODAwMDAgRkZGRkZGRkYKLWVyYXNlIEZGRjgwMDAwIEZGRkZGRkZGCi1jcC5iIDEwMDAwMCBGRkY4MDAwMCBcJHtmaWxlc2l6ZX1cCi0KLQotQy4gRkxBU0ggS0VSTkVMIFJFR0lPTiAoOTYwS0IpCi0KLUZMQVNIIHN1cHBvcnQgaXMgcHJvdmlkZWQgZm9yIHRoZSA5NjBLQiBvbmJvYXJkIEZMQVNIMSBzZWdtZW50LgotVGhpcyBhbGxvd3MgZmxhc2hpbmcgb2Yga2VybmVsIGltYWdlcyB3aGljaCBVLUJvb3QgY2FuIGxvYWQKLWFuZCBydW4gKHN0YW5kYWxvbmUpIGZyb20gdGhlIG9uYm9hcmQgRkxBU0ggY2hpcC4gSXQgYWxzbyBhc3N1bWVzCi0KLVRoZSBmb2xsb3dpbmcgY29tbWFuZHMgd2lsbCBGTEFTSCBhIGtlcm5lbCBpbWFnZSB0byAweGZmZTEwMDAwCi0KLXRmdHAgMTAwMDAwIHZtbGludXguaW1nCi1wcm90ZWN0IG9mZiBGRkUxMDAwMCBGRkVGRkZGRgotZXJhc2UgRkZFMTAwMDAgRkZFRkZGRkYKLWNwLmIgMTAwMDAwIEZGRTEwMDAwIFwke2ZpbGVzaXplfVwKLXJlc2V0Ci0KLUhlcmUgaXMgYW4gZXhhbXBsZToKLQotCi09PnRmdHAgMTAwMDAwIHZtbGludXguaW1nCi1ldGhfaGFsdAotZXRoMDogREMyMTE0MyBFdGhlcm5ldCBhZGFwdGVyKGJ1cz0wLCBkZXZpY2U9MTMsIGZ1bmM9MCkKLURFQyBFdGhlcm5ldCBpb2Jhc2U9MHg4MDAwMDAwMAotQVJQIGJyb2FkY2FzdCAxCi1URlRQIGZyb20gc2VydmVyIDIwOS4xMjguOTMuMTMzOyBvdXIgSVAgYWRkcmVzcyBpcyAyMDkuMTI4LjkzLjEzOAotRmlsZW5hbWUgJ3ZtbGludXguaW1nJy4KLUxvYWQgYWRkcmVzczogMHgxMDAwMDAKLUxvYWRpbmc6ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1kb25lCi1CeXRlcyB0cmFuc2ZlcnJlZCA9IDc2MDIzMSAoYjk5YTcgaGV4KQotZXRoX2hhbHQKLT0+cHJvdGVjdCBvZmYgRkZFMTAwMDAgRkZFRkZGRkYKLVVuLVByb3RlY3RlZCAxNSBzZWN0b3JzCi09PmVyYXNlIEZGRTEwMDAwIEZGRUZGRkZGCi1FcmFzZSBGbGFzaCBmcm9tIDB4ZmZlMTAwMDAgdG8gMHhmZmVmZmZmZgotRXJhc2UgRkxBU0hbRjBfU0EzKEtFUk5FTCldIC0xNSBzZWN0b3JzOi4uLi4uLi4uLi4uLi4uLiBkb25lCi1FcmFzZWQgMTUgc2VjdG9ycwotPT5jcC5iIDEwMDAwMCBGRkUxMDAwMCBiOTlhNwotQ29weSB0byBGbGFzaC4uLiBGTEFTSFtGMF9TQTMoS0VSTkVMKV06Li4uLi4uLi4uLi4uZG9uZQotPT4KLQotCi1XaGVuIGZpbmlzaGVkLCB1c2UgdGhlIGNvbW1hbmQ6Ci0KLWJvb3RtIGZmZTEwMDAwCi0KLXRvIHN0YXJ0IHRoZSBrZXJuZWwuCi0KLUZpbmFsbHksIHRvIG1ha2UgdGhpcyB0aGUgZGVmYXVsdCBib290IGNvbW1hbmQsIHVzZQotdGhlIGZvbGxvd2luZyBjb21tYW5kczoKLQotc2V0ZW52IGJvb3RjbWQgYm9vdG0gZmZlMTAwMDAKLXNhdmVudgotCi10byBtYWtlIGl0IGF1dG9tYXRpY2FsbHkgYm9vdCB0aGUga2VybmVsIGZyb20gRkxBU0guCi0KLQotVG8gZ28gYmFjayB0byBkZXZlbG9wbWVudCBtb2RlIChORlMgYm9vdCkKLQotc2V0ZW52IGJvb3RjbWQgdGZ0cCAxMDAwMDAgdm1saW51eC5pbWdcO2Jvb3RtCi1zYXZlbnYKLQotCi09PnRmdHAgMTAwMDAwIHZtbGludXguaW1nCi1ldGgwOiBEQzIxMTQzIEV0aGVybmV0IGFkYXB0ZXIoYnVzPTAsIGRldmljZT0xMywgZnVuYz0wKQotREVDIEV0aGVybmV0IGlvYmFzZT0weDgwMDAwMDAwCi1BUlAgYnJvYWRjYXN0IDEKLUZpbGVuYW1lICd2bWxpbnV4LmltZycuCi1Mb2FkIGFkZHJlc3M6IDB4MTAwMDAwCi1Mb2FkaW5nOiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1kb25lCi1CeXRlcyB0cmFuc2ZlcnJlZCA9IDc1MjcxNyAoYjdjNGQgaGV4KQotZXRoX2hhbHQKLT0+cHJvdGVjdCBvZmYgRkZFMTAwMDAgRkZFRkZGRkYKLVVuLVByb3RlY3RlZCAxNSBzZWN0b3JzCi09PmVyYXNlIEZGRTEwMDAwIEZGRUZGRkZGCi1FcmFzZSBGbGFzaCBmcm9tIDB4ZmZlMTAwMDAgdG8gMHhmZmVmZmZmZgotRXJhc2UgRkxBU0hbRjBfU0EzKEtFUk5FTCldIC0xNSBzZWN0b3JzOi4uLi4uLi4uLi4uLi4uLiBkb25lCi1FcmFzZWQgMTUgc2VjdG9ycwotPT5jcC5iIDEwMDAwMCBGRkUxMDAwMCBiN2M0ZAotQ29weSB0byBGbGFzaC4uLiBGTEFTSFtGMF9TQTMoS0VSTkVMKV06Li4uLi4uLi4uLi4uZG9uZQotPT5ib290bSBmZmUxMDAwMAotIyMgQm9vdGluZyBpbWFnZSBhdCBmZmUxMDAwMCAuLi4KLSAgIEltYWdlIE5hbWU6ICAgdm1saW51eC5iaW4uZ3oKLSAgIEltYWdlIFR5cGU6ICAgUG93ZXJQQyBMaW51eCBLZXJuZWwgSW1hZ2UgKGd6aXAgY29tcHJlc3NlZCkKLSAgIERhdGEgU2l6ZTogICAgNzUyNjUzIEJ5dGVzID0gNzM1IGtCID0gMCBNQgotICAgTG9hZCBBZGRyZXNzOiAwMDAwMDAwMAotICAgRW50cnkgUG9pbnQ6ICAwMDAwMDAwMAotICAgVmVyaWZ5aW5nIENoZWNrc3VtIC4uLiBPSwotICAgVW5jb21wcmVzc2luZyBLZXJuZWwgSW1hZ2UgLi4uIE9LCi1Ub3RhbCBtZW1vcnkgPSA2NE1COyB1c2luZyAwa0IgZm9yIGhhc2ggdGFibGUgKGF0IDAwMDAwMDAwKQotTGludXggdmVyc2lvbiAyLjQuMl9oaGwyMCAoamZkQGF0bGFudGlzKSAoZ2NjIHZlcnNpb24gMi45NS4yIDE5OTkxMDI0IChyZWxlYXNlKSkgIzU5NyBXZWQgU2VwIDUgMjM6MjM6MjMgUERUIDIwMDEKLWNwdTA6IE1QQzgyNDAvS0FITFVBIDogTU9VU1NFIFBsYXRmb3JtIDogNjRNQiBSQU06IE1QTEQgUmV2LiA3ZgotU2FuZHBvaW50IHBvcnQgKEMpIDIwMDAsIDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiAoc291cmNlQG12aXN0YS5jb20pCi1JUCBQTlA6IDgwMi4zIEV0aGVybmV0IEFkZHJlc3M9PDA6MDoxMDoyMDozMDo0ND4KLU5PVElDRTogbW91bnRpbmcgcm9vdCBmaWxlIHN5c3RlbSB2aWEgTkZTCi1PbiBub2RlIDAgdG90YWxwYWdlczogMTYzODQKLXpvbmUoMCk6IDE2Mzg0IHBhZ2VzLgotem9uZSgxKTogMCBwYWdlcy4KLXpvbmUoMik6IDAgcGFnZXMuCi10aW1lX2luaXQ6IGRlY3JlbWVudGVyIGZyZXF1ZW5jeSA9IDE2LjY2NTkxNCBNSHoKLXRpbWVfaW5pdDogTVBDODI0MCBQQ0kgQnVzIGZyZXF1ZW5jeSA9IDMzLjMzMTgyOCBNSHoKLUNhbGlicmF0aW5nIGRlbGF5IGxvb3AuLi4gMTMzLjEyIEJvZ29NSVBTCi1NZW1vcnk6IDYyNDM2ayBhdmFpbGFibGUgKDEzMzZrIGtlcm5lbCBjb2RlLCA1MDBrIGRhdGEsIDg4ayBpbml0LCAwayBoaWdobWVtKQotRGVudHJ5LWNhY2hlIGhhc2ggdGFibGUgZW50cmllczogODE5MiAob3JkZXI6IDQsIDY1NTM2IGJ5dGVzKQotQnVmZmVyLWNhY2hlIGhhc2ggdGFibGUgZW50cmllczogNDA5NiAob3JkZXI6IDIsIDE2Mzg0IGJ5dGVzKQotUGFnZS1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDE2Mzg0IChvcmRlcjogNCwgNjU1MzYgYnl0ZXMpCi1Jbm9kZS1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDQwOTYgKG9yZGVyOiAzLCAzMjc2OCBieXRlcykKLVBPU0lYIGNvbmZvcm1hbmNlIHRlc3RpbmcgYnkgVU5JRklYCi1QQ0k6IFByb2JpbmcgUENJIGhhcmR3YXJlCi1MaW51eCBORVQ0LjAgZm9yIExpbnV4IDIuNAotQmFzZWQgdXBvbiBTd2Fuc2VhIFVuaXZlcnNpdHkgQ29tcHV0ZXIgU29jaWV0eSBORVQzLjAzOQotSW5pdGlhbGl6aW5nIFJUIG5ldGxpbmsgc29ja2V0Ci1TdGFydGluZyBrc3dhcGQgdjEuOAotcHR5OiAyNTYgVW5peDk4IHB0eXMgY29uZmlndXJlZAotYmxvY2s6IHF1ZXVlZCBzZWN0b3JzIG1heC9sb3cgNDEzOTRrQi8xMzc5OGtCLCAxMjggc2xvdHMgcGVyIHF1ZXVlCi1Vbmlmb3JtIE11bHRpLVBsYXRmb3JtIEUtSURFIGRyaXZlciBSZXZpc2lvbjogNi4zMQotaWRlOiBBc3N1bWluZyAzM01IeiBzeXN0ZW0gYnVzIHNwZWVkIGZvciBQSU8gbW9kZXM7IG92ZXJyaWRlIHdpdGggaWRlYnVzPXh4Ci1QREMyMDI2MjogSURFIGNvbnRyb2xsZXIgb24gUENJIGJ1cyAwMCBkZXYgNzAKLVBEQzIwMjYyOiBjaGlwc2V0IHJldmlzaW9uIDEKLVBEQzIwMjYyOiBub3QgMTAwJSBuYXRpdmUgbW9kZTogd2lsbCBwcm9iZSBpcnFzIGxhdGVyCi1QREMyMDI2MjogUk9NIGVuYWJsZWQgYXQgMHgwMDBkMDAwMAotUERDMjAyNjI6IChVKURNQSBCdXJzdCBCaXQgRElTQUJMRUQgUHJpbWFyeSBQQ0kgTW9kZSBTZWNvbmRhcnkgUENJIE1vZGUuCi1QREMyMDI2MjogRk9SQ0lORyBCVVJTVCBCSVQgMHgwMCAtPiAweDAxIEFDVElWRQotUERDMjAyNjI6IGlycT0zIGRldi0+aXJxPTMKLSAgICBpZGUwOiBCTS1ETUEgYXQgMHhiZmZmMDAtMHhiZmZmMDcsIEJJT1Mgc2V0dGluZ3M6IGhkYTpETUEsIGhkYjpETUEKLSAgICBpZGUxOiBCTS1ETUEgYXQgMHhiZmZmMDgtMHhiZmZmMGYsIEJJT1Mgc2V0dGluZ3M6IGhkYzpwaW8sIGhkZDpwaW8KLWhkYTogV0RDIFdEMzAwQUItMDBCVkEwLCBBVEEgRElTSyBkcml2ZQotaGRjOiBTT05ZIENELVJXIENSWDE2MEUsIEFUQVBJIENEL0RWRC1ST00gZHJpdmUKLWlkZTAgYXQgMHhiZmZmNzgtMHhiZmZmN2YsMHhiZmZmNzYgb24gaXJxIDMKLWlkZTEgYXQgMHhiZmZmNjgtMHhiZmZmNmYsMHhiZmZmNjYgb24gaXJxIDMKLWhkYTogNTg2MzMzNDQgc2VjdG9ycyAoMzAwMjAgTUIpIHcvMjA0OEtpQiBDYWNoZSwgQ0hTPTU4MTY4LzE2LzYzLCBVRE1BKDY2KQotaGRjOiBBVEFQSSAzMlggQ0QtUk9NIENELVIvUlcgZHJpdmUsIDQwOTZrQiBDYWNoZQotVW5pZm9ybSBDRC1ST00gZHJpdmVyIFJldmlzaW9uOiAzLjEyCi1QYXJ0aXRpb24gY2hlY2s6Ci0gL2Rldi9pZGUvaG9zdDAvYnVzMC90YXJnZXQwL2x1bjA6IHAxIHAyCi1oZDogdW5hYmxlIHRvIGdldCBtYWpvciAzIGZvciBoYXJkIGRpc2sKLXVkZjogcmVnaXN0ZXJpbmcgZmlsZXN5c3RlbQotbG9vcDogbG9hZGVkIChtYXggOCBkZXZpY2VzKQotU2VyaWFsIGRyaXZlciB2ZXJzaW9uIDUuMDIgKDIwMDAtMDgtMDkpIHdpdGggTUFOWV9QT1JUUyBTSEFSRV9JUlEgU0VSSUFMX1BDSSBlbmFibGVkCi10dHlTMDAgYXQgMHhmZmUwODA4MCAoaXJxID0gNCkgaXMgYSBTVDE2NjUwCi1MaW51eCBUdWxpcCBkcml2ZXIgdmVyc2lvbiAwLjkuMTNhIChKYW51YXJ5IDIwLCAyMDAxKQotZXRoMDogRGlnaXRhbCBEUzIxMTQzIFR1bGlwIHJldiA2NSBhdCAweGJmZmY4MCwgRUVQUk9NIG5vdCBwcmVzZW50LCAwMDowMDoxMDoyMDozMDo0NCwgSVJRIDEuCi1ldGgwOiAgTUlJIHRyYW5zY2VpdmVyICMwIGNvbmZpZyAzMDAwIHN0YXR1cyA3ODI5IGFkdmVydGlzaW5nIDAxZTEuCi1ORVQ0OiBMaW51eCBUQ1AvSVAgMS4wIGZvciBORVQ0LjAKLUlQIFByb3RvY29sczogSUNNUCwgVURQLCBUQ1AKLUlQOiByb3V0aW5nIGNhY2hlIGhhc2ggdGFibGUgb2YgNTEyIGJ1Y2tldHMsIDRLYnl0ZXMKLVRDUDogSGFzaCB0YWJsZXMgY29uZmlndXJlZCAoZXN0YWJsaXNoZWQgNDA5NiBiaW5kIDQwOTYpCi1ORVQ0OiBVbml4IGRvbWFpbiBzb2NrZXRzIDEuMC9TTVAgZm9yIExpbnV4IE5FVDQuMC4KLWRldmZzOiB2MC4xMDIgKDIwMDAwNjIyKSBSaWNoYXJkIEdvb2NoIChyZ29vY2hAYXRuZi5jc2lyby5hdSkKLWRldmZzOiBib290X29wdGlvbnM6IDB4MAotVkZTOiBNb3VudGVkIHJvb3QgKG5mcyBmaWxlc3lzdGVtKS4KLU1vdW50ZWQgZGV2ZnMgb24gL2RldgotRnJlZWluZyB1bnVzZWQga2VybmVsIG1lbW9yeTogODhrIGluaXQgNGsgb3BlbmZpcm13YXJlCi1ldGgwOiBTZXR0aW5nIGZ1bGwtZHVwbGV4IGJhc2VkIG9uIE1JSSMwIGxpbmsgcGFydG5lciBjYXBhYmlsaXR5IG9mIDQ1ZTEuCi1JTklUOiB2ZXJzaW9uIDIuNzggYm9vdGluZwotSU5JVDogRW50ZXJpbmcgcnVubGV2ZWw6IDIKLQotCi1XZWxjb21lIHRvIExpbnV4L1BQQwotTVBDODI0MC9NT1VTU0UKLQotCi1tb3Vzc2UgbG9naW46IHJvb3QKLVBhc3N3b3JkOgotUEFNX3VuaXhbMTNdOiAobG9naW4pIHNlc3Npb24gb3BlbmVkIGZvciB1c2VyIHJvb3QgYnkgTE9HSU4odWlkPTApCi1MYXN0IGxvZ2luOiBUaHUgU2VwICA2IDAwOjE2OjUxIDIwMDEgb24gY29uc29sZQotCi0KLVdlbGNvbWUgdG8gTGludXgvUFBDCi1NUEM4MjQwL01PVVNTRQotCi0KLW1vdXNzZSMKZGlmZiAtLWdpdCBhL2JvYXJkL21vdXNzZS9mbGFzaC5jIGIvYm9hcmQvbW91c3NlL2ZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZWRjYjEuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbW91c3NlL2ZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MTcgKzAsMCBAQAotLyoKLSAqIE1PVVNTRS9NUEM4MjQwIEJvYXJkIGRlZmluaXRpb25zLgotICogRmxhc2ggUm91dGluZXMgZm9yIE1PVVNTRSBvbmJvYXJkIEFNRDI5TFYxMDZEQiBkZXZpY2VzCi0gKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+Ci0gKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogKEMpIENvcHlyaWdodCAxOTk5LCBieSBDdXJ0IE1jRG93ZWxsLCAwOC0wNi05OSwgQnJvYWRjb20gQ29ycC4KLSAqIChDKSBDb3B5cmlnaHQgMjAwMSwgSmFtZXMgRG91Z2hlcnR5LCAwNy8xOC8wMSwgQnJvYWRjb20gQ29ycC4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8bXBjOHh4Lmg+Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0jaW5jbHVkZSAibW91c3NlLmgiCi0jaW5jbHVkZSAiZmxhc2guaCIKLQotaW50IGZsYXNoTGliRGVidWcgPSAwOwotaW50IGZsYXNoTGliSW5pdGVkID0gMDsKLQotI2RlZmluZSBPSyAgMAotI2RlZmluZSBFUlJPUiAtMQotI2RlZmluZSBTVEFUVVMgaW50Ci0jZGVmaW5lIFBSSU5URgkJCWlmIChmbGFzaExpYkRlYnVnKSBwcmludGYKLSNpZiAwCi0jZGVmaW5lIFBSSVZBVEUJCQlzdGF0aWMKLSNlbHNlCi0jZGVmaW5lIFBSSVZBVEUKLSNlbmRpZgotCi1mbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LU107Ci0KLSNkZWZpbmUgU0xFRVBfREVMQVkgICAgMTY2Ci0jZGVmaW5lIEZMQVNIX1NFQ1RPUl9TSVpFICAgKDY0KjEwMjQpCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBWaXJ0dWFsIEZsYXNoIERldmljZXMgb24gTW91c3NlIGJvYXJkCi0gKgotICogVGhlc2UgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgaW4gZmxhc2hMaWIuaC4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLVBSSVZBVEUgZmxhc2hfZGV2X3QgZmxhc2hEZXZbXSA9IHsKLSAgICAvKiBCYW5rIDAgc2VjdG9yIFNBMCAoMTYga0IpICovCi0gICAgewkiU0EwIixGTEFTSDBfQkFOSywgRkxBU0gwX1NFRzBfU1RBUlQsIDEsIDE0LAotCUZMQVNIMF9WRU5ET1JfSUQsIEZMQVNIMF9ERVZJQ0VfSUQKLSAgICB9LAotICAgIC8qIEJhbmsgMCBzZWN0b3IgU0ExICg4IGtCKSAqLwotICAgIHsJIlNBMSIsIEZMQVNIMF9CQU5LLCBGTEFTSDBfU0VHMF9TVEFSVCArIDB4NDAwMCwgMSwgMTMsCi0JRkxBU0gwX1ZFTkRPUl9JRCwgRkxBU0gwX0RFVklDRV9JRAotICAgIH0sCi0gICAgLyogQmFuayAwIHNlY3RvciBTQTIgKDgga0IpICovCi0gICAgewkiU0EyIiwgRkxBU0gwX0JBTkssIEZMQVNIMF9TRUcwX1NUQVJUICsgMHg2MDAwLCAxLCAxMywKLQlGTEFTSDBfVkVORE9SX0lELCBGTEFTSDBfREVWSUNFX0lECi0gICAgfSwKLSAgICAvKiBCYW5rIDAgc2VjdG9yIFNBMyBpcyBvY2NsdWRlZCBieSBNb3Vzc2UgSS9PIGRldmljZXMgKi8KLSAgICAvKiBCYW5rIDAgc2VjdG9ycyBTQTQtU0ExOCwgYWZ0ZXIgTW91c3NlIGRldmljZXMgdXAgdG8gUExDQyAoOTYwIGtCKSAgKi8KLSAgICB7CSJLRVJORUwiLCBGTEFTSDBfQkFOSywgRkxBU0gwX1NFRzFfU1RBUlQsIDE1LCAxNiwKLQlGTEFTSDBfVkVORE9SX0lELCBGTEFTSDBfREVWSUNFX0lECi0gICAgfSwKLSAgICAvKiBCYW5rIDAgc2VjdG9ycyBTQTE5LVNBMjYsIGp1bXBlciBjYW4gb2NjbHVkZSB0aGlzIGJ5IFBMQ0MgKDUxMiBrQikgKi8KLSAgICAvKiBUaGlzIGlzIHdoZXJlIHRoZSBLYWhsdWEgYm9vdCB2ZWN0b3IgYW5kIGJvb3QgUk9NIGNvZGUgcmVzaWRlcy4gKi8KLSAgICB7CSJCT09UIixGTEFTSDBfQkFOSywgRkxBU0gwX1NFRzJfU1RBUlQsIDgsIDE2LAotCUZMQVNIMF9WRU5ET1JfSUQsIEZMQVNIMF9ERVZJQ0VfSUQKLSAgICB9LAotICAgIC8qIEJhbmsgMCBzZWN0b3JzIFNBMjctU0EzNCAoNTEyIGtCKSAqLwotICAgIHsJIlJBTURJU0siLEZMQVNIMF9CQU5LLCBGTEFTSDBfU0VHM19TVEFSVCwgOCwgMTYsCi0JRkxBU0gwX1ZFTkRPUl9JRCwgRkxBU0gwX0RFVklDRV9JRAotICAgIH0sCi19OwotCi1pbnQgZmxhc2hEZXZDb3VudCA9IChzaXplb2YgKGZsYXNoRGV2KSAvIHNpemVvZiAoZmxhc2hEZXZbMF0pKTsKLQotI2RlZmluZSBERVYobm8pCQkJKCZmbGFzaERldltub10pCi0jZGVmaW5lIERFVl9OTyhkZXYpCQkoKGRldikgLSBmbGFzaERldikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogUHJpdmF0ZSBGbGFzaCBSb3V0aW5lcwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFRoZSBjb252ZW50aW9uIGlzOgotICoKLSAqICJhZGRyIiBpcyBhbHdheXMgdGhlIFBST00gcmF3IGFkZHJlc3MsIHdoaWNoIGlzIHRoZSBhZGRyZXNzIG9mIGFuCi0gKiA4LWJpdCBxdWFudGl0eSBmb3IgZmxhc2ggMCBhbmQgMTYtYml0IHF1YW50aXR5IGZvciBmbGFzaCAxLgotICoKLSAqICJwb3MiIGlzIGFsd2F5cyBhIGxvZ2ljYWwgYnl0ZSBwb3NpdGlvbiBmcm9tIHRoZSBQUk9NIGJlZ2lubmluZy4KLSAqLwotCi0jZGVmaW5lIEZMQVNIMF9BRERSKGRldiwgYWRkcikgXAotCSgodW5zaWduZWQgY2hhciAqKSAoKGRldiktPmJhc2UgKyAoYWRkcikpKQotCi0jZGVmaW5lIEZMQVNIMF9XUklURShkZXYsIGFkZHIsIHZhbHVlKSBcCi0JKCpGTEFTSDBfQUREUihkZXYsIGFkZHIpID0gKHZhbHVlKSkKLQotI2RlZmluZSBGTEFTSDBfUkVBRChkZXYsIGFkZHIpIFwKLQkoKkZMQVNIMF9BRERSKGRldiwgYWRkcikpCi0KLVBSSVZBVEUgaW50IGZsYXNoQ2hlY2sgKGZsYXNoX2Rldl90ICogZGV2KQotewotCWlmICghZmxhc2hMaWJJbml0ZWQpIHsKLQkJcHJpbnRmICgiZmxhc2hDaGVjazogZmxhc2hMaWIgbm90IGluaXRpYWxpemVkXG4iKTsKLQkJcmV0dXJuIEVSUk9SOwotCX0KLQotCWlmIChkZXYgPCAmZmxhc2hEZXZbMF0gfHwgZGV2ID49ICZmbGFzaERldltmbGFzaERldkNvdW50XSkgewotCQlwcmludGYgKCJmbGFzaENoZWNrOiBCYWQgZGV2IHBhcmFtZXRlclxuIik7Ci0JCXJldHVybiBFUlJPUjsKLQl9Ci0KLQlpZiAoIWRldi0+Zm91bmQpIHsKLQkJcHJpbnRmICgiZmxhc2hDaGVjazogRGV2aWNlICVkIG5vdCBhdmFpbGFibGVcbiIsIERFVl9OTyAoZGV2KSk7Ci0JCXJldHVybiBFUlJPUjsKLQl9Ci0KLQlyZXR1cm4gT0s7Ci19Ci0KLVBSSVZBVEUgdm9pZCBmbGFzaFJlc2V0IChmbGFzaF9kZXZfdCAqIGRldikKLXsKLQlQUklOVEYgKCJmbGFzaFJlc2V0OiBkZXY9JWRcbiIsIERFVl9OTyAoZGV2KSk7Ci0KLQlpZiAoZGV2LT5iYW5rID09IEZMQVNIMF9CQU5LKSB7Ci0JCUZMQVNIMF9XUklURSAoZGV2LCAweDU1NSwgMHhhYSk7Ci0JCUZMQVNIMF9XUklURSAoZGV2LCAweGFhYSwgMHg1NSk7Ci0JCUZMQVNIMF9XUklURSAoZGV2LCAweDU1NSwgMHhmMCk7Ci0JfQotCi0JdWRlbGF5IChTTEVFUF9ERUxBWSk7Ci0KLQlQUklOVEYgKCJmbGFzaFJlc2V0OiBkb25lXG4iKTsKLX0KLQotUFJJVkFURSBpbnQgZmxhc2hQcm9iZSAoZmxhc2hfZGV2X3QgKiBkZXYpCi17Ci0JaW50IHJ2LCBkZXZpY2VJRCwgdmVuZG9ySUQ7Ci0KLQlQUklOVEYgKCJmbGFzaFByb2JlOiBkZXY9JWRcbiIsIERFVl9OTyAoZGV2KSk7Ci0KLQlpZiAoZGV2LT5iYW5rICE9IEZMQVNIMF9CQU5LKSB7Ci0JCXJ2ID0gRVJST1I7Ci0JCWdvdG8gRE9ORTsKLQl9Ci0KLQlGTEFTSDBfV1JJVEUgKGRldiwgMHhhYWEsIDB4YWEpOwotCUZMQVNIMF9XUklURSAoZGV2LCAweDU1NSwgMHg1NSk7Ci0JRkxBU0gwX1dSSVRFIChkZXYsIDB4YWFhLCAweDkwKTsKLQotCXVkZWxheSAoU0xFRVBfREVMQVkpOwotCi0JdmVuZG9ySUQgPSBGTEFTSDBfUkVBRCAoZGV2LCAwKTsKLQlkZXZpY2VJRCA9IEZMQVNIMF9SRUFEIChkZXYsIDIpOwotCi0JRkxBU0gwX1dSSVRFIChkZXYsIDAsIDB4ZjApOwotCi0JUFJJTlRGICgiZmxhc2hQcm9iZTogdmVuZG9yPTB4JXggZGV2aWNlPTB4JXhcbiIsIHZlbmRvcklELCBkZXZpY2VJRCk7Ci0KLQlpZiAodmVuZG9ySUQgPT0gZGV2LT52ZW5kb3JJRCAmJiBkZXZpY2VJRCA9PSBkZXYtPmRldmljZUlEKQotCQlydiA9IE9LOwotCWVsc2UKLQkJcnYgPSBFUlJPUjsKLQotICBET05FOgotCVBSSU5URiAoImZsYXNoUHJvYmU6IHJ2PSVkXG4iLCBydik7Ci0KLQlyZXR1cm4gcnY7Ci19Ci0KLVBSSVZBVEUgaW50IGZsYXNoV2FpdCAoZmxhc2hfZGV2X3QgKiBkZXYsIGludCBhZGRyLCBpbnQgZXhwZWN0LCBpbnQgZXJhc2UpCi17Ci0JaW50IHJ2ID0gRVJST1I7Ci0JaW50IGksIGRhdGE7Ci0JaW50IHBvbGxzOwotCi0jaWYgMAotCVBSSU5URiAoImZsYXNoV2FpdDogZGV2PSVkIGFkZHI9MHgleCBleHBlY3Q9MHgleCBlcmFzZT0lZFxuIiwKLQkJREVWX05PIChkZXYpLCBhZGRyLCBleHBlY3QsIGVyYXNlKTsKLSNlbmRpZgotCi0JaWYgKGRldi0+YmFuayAhPSBGTEFTSDBfQkFOSykgewotCQlydiA9IEVSUk9SOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JaWYgKGVyYXNlKQotCQlwb2xscyA9IEZMQVNIX0VSQVNFX1NFQ1RPUl9USU1FT1VUOwkvKiBUaWNrcyAqLwotCWVsc2UKLQkJcG9sbHMgPSBGTEFTSF9QUk9HUkFNX1BPTExTOwkvKiBMb29wcyAqLwotCi0JZm9yIChpID0gMDsgaSA8IHBvbGxzOyBpKyspIHsKLQkJaWYgKGVyYXNlKQotCQkJdWRlbGF5IChTTEVFUF9ERUxBWSk7Ci0KLQkJZGF0YSA9IEZMQVNIMF9SRUFEIChkZXYsIGFkZHIpOwotCi0JCWlmICgoKGRhdGEgXiBleHBlY3QpICYgMHg4MCkgPT0gMCkgewotCQkJcnYgPSBPSzsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWlmIChkYXRhICYgMHgyMCkgewotCQkJLyoKLQkJCSAqIElmIHRoZSAweDIwIGJpdCBoYXMgY29tZSBvbiwgaXQgY291bGQgYWN0dWFsbHkgYmUgYmVjYXVzZQotCQkJICogdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQsIHNvIGNoZWNrIHRoZSBkb25lIGJpdCBhZ2Fpbi4KLQkJCSAqLwotCi0JCQlkYXRhID0gRkxBU0gwX1JFQUQgKGRldiwgYWRkcik7Ci0KLQkJCWlmICgoKGRhdGEgXiBleHBlY3QpICYgMHg4MCkgPT0gMCkgewotCQkJCXJ2ID0gT0s7Ci0JCQkJZ290byBkb25lOwotCQkJfQotCi0JCQlwcmludGYgKCJmbGFzaFdhaXQ6IFByb2dyYW0gZXJyb3IgKGRldjogJWQsIGFkZHI6IDB4JXgpXG4iLAotCQkJCQlERVZfTk8gKGRldiksIGFkZHIpOwotCi0JCQlmbGFzaFJlc2V0IChkZXYpOwotCQkJcnYgPSBFUlJPUjsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KLQotCXByaW50ZiAoImZsYXNoV2FpdDogVGltZW91dCAlcyAoZGV2OiAlZCwgYWRkcjogMHgleClcbiIsCi0JCWVyYXNlID8gImVyYXNpbmcgc2VjdG9yIiA6ICJwcm9ncmFtbWluZyBieXRlIiwKLQkJREVWX05PIChkZXYpLCBhZGRyKTsKLQotICBkb25lOgotCi0jaWYgMAotCVBSSU5URiAoImZsYXNoV2FpdDogcnY9JWRcbiIsIHJ2KTsKLSNlbmRpZgotCi0JcmV0dXJuIHJ2OwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBQdWJsaWMgRmxhc2ggUm91dGluZXMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLVNUQVRVUyBmbGFzaExpYkluaXQgKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlQUklOVEYgKCJmbGFzaExpYkluaXQ6IGRldmljZXM9JWRcbiIsIGZsYXNoRGV2Q291bnQpOwotCi0JZm9yIChpID0gMDsgaSA8IGZsYXNoRGV2Q291bnQ7IGkrKykgewotCQlmbGFzaF9kZXZfdCAqZGV2ID0gJmZsYXNoRGV2W2ldOwotCi0JCS8qCi0JCSAqIEZvciBiYW5rIDEsIHByb2JlIGJvdGggd2l0aG91dCBhbmQgd2l0aCBieXRlIHN3YXBwYWdlLAotCQkgKiBzbyB0aGF0IHRoaXMgbW9kdWxlIHdvcmtzIG9uIGJvdGggb2xkIGFuZCBuZXcgTW91c3NlIGJvYXJkcy4KLQkJICovCi0KLQkJZmxhc2hSZXNldCAoZGV2KTsKLQotCQlpZiAoZmxhc2hQcm9iZSAoZGV2KSAhPSBFUlJPUikKLQkJCWRldi0+Zm91bmQgPSAxOwotCi0JCWZsYXNoUmVzZXQgKGRldik7Ci0KLQkJaWYgKGZsYXNoUHJvYmUgKGRldikgIT0gRVJST1IpCi0JCQlkZXYtPmZvdW5kID0gMTsKLQotCQlkZXYtPnN3YXAgPSAwOwotCi0JCWlmIChkZXYtPmZvdW5kKSB7Ci0JCQlQUklOVEYgKCJcbiAgRkxBU0ggJXNbJWRdOiBpb2Jhc2U9MHgleCAtICVkIHNlY3RvcnMgJWQgS0IiLAotCQkJCWZsYXNoRGV2W2ldLm5hbWUsIGksIGZsYXNoRGV2W2ldLmJhc2UsCi0JCQkJZmxhc2hEZXZbaV0uc2VjdG9ycywKLQkJCQkoZmxhc2hEZXZbaV0uc2VjdG9ycyAqIEZMQVNIX1NFQ1RPUl9TSVpFKSAvIDEwMjQpOwotCi0JCX0KLQl9Ci0KLQlmbGFzaExpYkluaXRlZCA9IDE7Ci0KLQlQUklOVEYgKCJmbGFzaExpYkluaXQ6IGRvbmVcbiIpOwotCi0JcmV0dXJuIE9LOwotfQotCi1TVEFUVVMgZmxhc2hFcmFzZVNlY3RvciAoZmxhc2hfZGV2X3QgKiBkZXYsIGludCBzZWN0b3IpCi17Ci0JaW50IHBvcywgYWRkcjsKLQotCVBSSU5URiAoImZsYXNoRXJhc2VzZWN0b3I6IGRldj0lZCBzZWN0b3I9JWRcbiIsIERFVl9OTyAoZGV2KSwgc2VjdG9yKTsKLQotCWlmIChmbGFzaENoZWNrIChkZXYpID09IEVSUk9SKQotCQlyZXR1cm4gRVJST1I7Ci0KLQlpZiAoc2VjdG9yIDwgMCB8fCBzZWN0b3IgPj0gZGV2LT5zZWN0b3JzKSB7Ci0JCXByaW50ZiAoImZsYXNoRXJhc2VTZWN0b3I6IFNlY3RvciBvdXQgb2YgcmFuZ2UgKGRldjogJWQsIHNlY3RvcjogJWQpXG4iLCBERVZfTk8gKGRldiksIHNlY3Rvcik7Ci0JCXJldHVybiBFUlJPUjsKLQl9Ci0KLQlwb3MgPSBGTEFTSF9TRUNUT1JfUE9TIChkZXYsIHNlY3Rvcik7Ci0KLQlpZiAoZGV2LT5iYW5rICE9IEZMQVNIMF9CQU5LKSB7Ci0JCXJldHVybiBFUlJPUjsKLQl9Ci0KLQlhZGRyID0gcG9zOwotCi0JRkxBU0gwX1dSSVRFIChkZXYsIDB4YWFhLCAweGFhKTsKLQlGTEFTSDBfV1JJVEUgKGRldiwgMHg1NTUsIDB4NTUpOwotCUZMQVNIMF9XUklURSAoZGV2LCAweGFhYSwgMHg4MCk7Ci0JRkxBU0gwX1dSSVRFIChkZXYsIDB4YWFhLCAweGFhKTsKLQlGTEFTSDBfV1JJVEUgKGRldiwgMHg1NTUsIDB4NTUpOwotCUZMQVNIMF9XUklURSAoZGV2LCBhZGRyLCAweDMwKTsKLQotCXJldHVybiBmbGFzaFdhaXQgKGRldiwgYWRkciwgMHhmZiwgMSk7Ci19Ci0KLS8qCi0gKiBOb3RlOiBpdCB0YWtlcyBhYm91dCBhcyBsb25nIHRvIGZsYXNoIGFsbCBzZWN0b3JzIHRvZ2V0aGVyIHdpdGggQ2hpcAotICogRXJhc2UgYXMgaXQgZG9lcyB0byBmbGFzaCB0aGVtIG9uZSBhdCBhIHRpbWUgKGFib3V0IDMwIHNlY29uZHMgZm9yIDIKLSAqIE1CKS4gIEFsc28gc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIHRyZWF0IHN1YnNldHMgb2Ygc2VjdG9ycyBhcyBpZgotICogdGhleSB3ZXJlIGNvbXBsZXRlIGRldmljZXMsIHdlIGRvbid0IHVzZSBDaGlwIEVyYXNlLgotICovCi0KLVNUQVRVUyBmbGFzaEVyYXNlIChmbGFzaF9kZXZfdCAqIGRldikKLXsKLQlpbnQgc2VjdG9yOwotCi0JUFJJTlRGICgiZmxhc2hFcmFzZTogZGV2PSVkIHNlY3RvcnM9JWRcbiIsIERFVl9OTyAoZGV2KSwgZGV2LT5zZWN0b3JzKTsKLQotCWlmIChmbGFzaENoZWNrIChkZXYpID09IEVSUk9SKQotCQlyZXR1cm4gRVJST1I7Ci0KLQlmb3IgKHNlY3RvciA9IDA7IHNlY3RvciA8IGRldi0+c2VjdG9yczsgc2VjdG9yKyspIHsKLQkJaWYgKGZsYXNoRXJhc2VTZWN0b3IgKGRldiwgc2VjdG9yKSA9PSBFUlJPUikKLQkJCXJldHVybiBFUlJPUjsKLQl9Ci0JcmV0dXJuIE9LOwotfQotCi0vKgotICogUmVhZCBhbmQgd3JpdGUgYnl0ZXMKLSAqLwotCi1TVEFUVVMgZmxhc2hSZWFkIChmbGFzaF9kZXZfdCAqIGRldiwgaW50IHBvcywgY2hhciAqYnVmLCBpbnQgbGVuKQotewotCWludCBhZGRyLCB3b3JkczsKLQotCVBSSU5URiAoImZsYXNoUmVhZDogZGV2PSVkIHBvcz0weCV4IGJ1Zj0weCV4IGxlbj0weCV4XG4iLAotCQlERVZfTk8gKGRldiksIHBvcywgKGludCkgYnVmLCBsZW4pOwotCi0JaWYgKGZsYXNoQ2hlY2sgKGRldikgPT0gRVJST1IpCi0JCXJldHVybiBFUlJPUjsKLQotCWlmIChwb3MgPCAwIHx8IGxlbiA8IDAgfHwgcG9zICsgbGVuID4gRkxBU0hfTUFYX1BPUyAoZGV2KSkgewotCQlwcmludGYgKCJmbGFzaFJlYWQ6IFBvc2l0aW9uIG91dCBvZiByYW5nZSAiCi0JCQkiKGRldjogJWQsIHBvczogMHgleCwgbGVuOiAweCV4KVxuIiwKLQkJCURFVl9OTyAoZGV2KSwgcG9zLCBsZW4pOwotCQlyZXR1cm4gRVJST1I7Ci0JfQotCi0JaWYgKGxlbiA9PSAwKQotCQlyZXR1cm4gT0s7Ci0KLQlpZiAoZGV2LT5iYW5rID09IEZMQVNIMF9CQU5LKSB7Ci0JCWFkZHIgPSBwb3M7Ci0JCXdvcmRzID0gbGVuOwotCi0JCVBSSU5URiAoImZsYXNoUmVhZDogbWVtY3B5KDB4JXgsIDB4JXgsIDB4JXgpXG4iLAotCQkJKGludCkgYnVmLCAoaW50KSBGTEFTSDBfQUREUiAoZGV2LCBwb3MpLCBsZW4pOwotCi0JCW1lbWNweSAoYnVmLCBGTEFTSDBfQUREUiAoZGV2LCBhZGRyKSwgd29yZHMpOwotCi0JfQotCVBSSU5URiAoImZsYXNoUmVhZDogcnY9T0tcbiIpOwotCi0JcmV0dXJuIE9LOwotfQotCi1TVEFUVVMgZmxhc2hXcml0ZSAoZmxhc2hfZGV2X3QgKiBkZXYsIGludCBwb3MsIGNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQlpbnQgYWRkciwgd29yZHM7Ci0KLQlQUklOVEYgKCJmbGFzaFdyaXRlOiBkZXY9JWQgcG9zPTB4JXggYnVmPTB4JXggbGVuPTB4JXhcbiIsCi0JCURFVl9OTyAoZGV2KSwgcG9zLCAoaW50KSBidWYsIGxlbik7Ci0KLQlpZiAoZmxhc2hDaGVjayAoZGV2KSA9PSBFUlJPUikKLQkJcmV0dXJuIEVSUk9SOwotCi0JaWYgKHBvcyA8IDAgfHwgbGVuIDwgMCB8fCBwb3MgKyBsZW4gPiBGTEFTSF9NQVhfUE9TIChkZXYpKSB7Ci0JCXByaW50ZiAoImZsYXNoV3JpdGU6IFBvc2l0aW9uIG91dCBvZiByYW5nZSAiCi0JCQkiKGRldjogJWQsIHBvczogMHgleCwgbGVuOiAweCV4KVxuIiwKLQkJCURFVl9OTyAoZGV2KSwgcG9zLCBsZW4pOwotCQlyZXR1cm4gRVJST1I7Ci0JfQotCi0JaWYgKGxlbiA9PSAwKQotCQlyZXR1cm4gT0s7Ci0KLQlpZiAoZGV2LT5iYW5rID09IEZMQVNIMF9CQU5LKSB7Ci0JCXVuc2lnbmVkIGNoYXIgdG1wOwotCi0JCWFkZHIgPSBwb3M7Ci0JCXdvcmRzID0gbGVuOwotCi0JCXdoaWxlICh3b3Jkcy0tKSB7Ci0JCQl0bXAgPSAqYnVmOwotCQkJaWYgKH5GTEFTSDBfUkVBRCAoZGV2LCBhZGRyKSAmIHRtcCkgewotCQkJCXByaW50ZiAoImZsYXNoV3JpdGU6IEF0dGVtcHQgdG8gcHJvZ3JhbSAwIHRvIDEgIgotCQkJCQkiKGRldjogJWQsIGFkZHI6IDB4JXgsIGRhdGE6IDB4JXgpXG4iLAotCQkJCQlERVZfTk8gKGRldiksIGFkZHIsIHRtcCk7Ci0JCQkJcmV0dXJuIEVSUk9SOwotCQkJfQotCQkJRkxBU0gwX1dSSVRFIChkZXYsIDB4YWFhLCAweGFhKTsKLQkJCUZMQVNIMF9XUklURSAoZGV2LCAweDU1NSwgMHg1NSk7Ci0JCQlGTEFTSDBfV1JJVEUgKGRldiwgMHhhYWEsIDB4YTApOwotCQkJRkxBU0gwX1dSSVRFIChkZXYsIGFkZHIsIHRtcCk7Ci0JCQlpZiAoZmxhc2hXYWl0IChkZXYsIGFkZHIsIHRtcCwgMCkgPCAwKQotCQkJCXJldHVybiBFUlJPUjsKLQkJCWJ1ZisrOwotCQkJYWRkcisrOwotCQl9Ci0JfQotCi0JUFJJTlRGICgiZmxhc2hXcml0ZTogcnY9T0tcbiIpOwotCi0JcmV0dXJuIE9LOwotfQotCi0vKgotICogZmxhc2hXcml0YWJsZSByZXR1cm5zIHRydWUgaWYgYSByYW5nZSBjb250YWlucyBhbGwgRidzLgotICovCi0KLVNUQVRVUyBmbGFzaFdyaXRhYmxlIChmbGFzaF9kZXZfdCAqIGRldiwgaW50IHBvcywgaW50IGxlbikKLXsKLQlpbnQgYWRkciwgd29yZHM7Ci0JaW50IHJ2ID0gRVJST1I7Ci0KLQlQUklOVEYgKCJmbGFzaFdyaXRhYmxlOiBkZXY9JWQgcG9zPTB4JXggbGVuPTB4JXhcbiIsCi0JCQlERVZfTk8gKGRldiksIHBvcywgbGVuKTsKLQotCWlmIChmbGFzaENoZWNrIChkZXYpID09IEVSUk9SKQotCQlnb3RvIGRvbmU7Ci0KLQlpZiAocG9zIDwgMCB8fCBsZW4gPCAwIHx8IHBvcyArIGxlbiA+IEZMQVNIX01BWF9QT1MgKGRldikpIHsKLQkJcHJpbnRmICgiZmxhc2hXcml0YWJsZTogUG9zaXRpb24gb3V0IG9mIHJhbmdlICIKLQkJCSIoZGV2OiAlZCwgcG9zOiAweCV4LCBsZW46IDB4JXgpXG4iLAotCQkJREVWX05PIChkZXYpLCBwb3MsIGxlbik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAobGVuID09IDApIHsKLQkJcnYgPSAxOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JaWYgKGRldi0+YmFuayA9PSBGTEFTSDBfQkFOSykgewotCQlhZGRyID0gcG9zOwotCQl3b3JkcyA9IGxlbjsKLQotCQl3aGlsZSAod29yZHMtLSkgewotCQkJaWYgKEZMQVNIMF9SRUFEIChkZXYsIGFkZHIpICE9IDB4ZmYpIHsKLQkJCQlydiA9IDA7Ci0JCQkJZ290byBkb25lOwotCQkJfQotCQkJYWRkcisrOwotCQl9Ci0JfQotCi0JcnYgPSAxOwotCi0gIGRvbmU6Ci0JUFJJTlRGICgiZmxhc2hXcml0ZTogcnY9JWRcbiIsIHJ2KTsKLQlyZXR1cm4gcnY7Ci19Ci0KLQotLyoKLSAqIE5PVEU6IHRoZSBiZWxvdyBjb2RlIGNhbm5vdCBydW4gZnJvbSBGTEFTSCEhIQotICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGbGFzaCBEaWFnbm9zdGljcwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotU1RBVFVTIGZsYXNoRGlhZyAoZmxhc2hfZGV2X3QgKiBkZXYpCi17Ci0JdW5zaWduZWQgaW50ICpidWYgPSAwOwotCWludCBpLCBsZW4sIHNlY3RvcjsKLQlpbnQgcnYgPSBFUlJPUjsKLQotCWlmIChmbGFzaENoZWNrIChkZXYpID09IEVSUk9SKQotCQlyZXR1cm4gRVJST1I7Ci0KLQlwcmludGYgKCJmbGFzaERpYWc6IFRlc3RpbmcgZGV2aWNlICVkLCAiCi0JCSJiYXNlOiAweCV4LCAlZCBzZWN0b3JzIEAgJWQga0IgPSAlZCBrQlxuIiwKLQkJREVWX05PIChkZXYpLCBkZXYtPmJhc2UsCi0JCWRldi0+c2VjdG9ycywKLQkJMSA8PCAoZGV2LT5sZ1NlY3RvclNpemUgLSAxMCksCi0JCWRldi0+c2VjdG9ycyA8PCAoZGV2LT5sZ1NlY3RvclNpemUgLSAxMCkpOwotCi0JbGVuID0gMSA8PCBkZXYtPmxnU2VjdG9yU2l6ZTsKLQotCXByaW50ZiAoImZsYXNoRGlhZzogRXJhc2luZ1xuIik7Ci0KLQlpZiAoZmxhc2hFcmFzZSAoZGV2KSA9PSBFUlJPUikgewotCQlwcmludGYgKCJmbGFzaERpYWc6IEVyYXNlIGZhaWxlZFxuIik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JcHJpbnRmICgiJWQgYnl0ZXMgcmVxdWVzdGVkIC4uLlxuIiwgbGVuKTsKLQlidWYgPSBtYWxsb2MgKGxlbik7Ci0JcHJpbnRmICgiYWxsb2NhdGVkICVkIGJ5dGVzIC4uLlxuIiwgbGVuKTsKLQlpZiAoYnVmID09IDApIHsKLQkJcHJpbnRmICgiZmxhc2hEaWFnOiBPdXQgb2YgbWVtb3J5XG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCS8qCi0JICogV3JpdGUgdW5pcXVlIGNvdW50aW5nIHBhdHRlcm4gdG8gZWFjaCBzZWN0b3IKLQkgKi8KLQotCWZvciAoc2VjdG9yID0gMDsgc2VjdG9yIDwgZGV2LT5zZWN0b3JzOyBzZWN0b3IrKykgewotCQlwcmludGYgKCJmbGFzaERpYWc6IFdyaXRlIHNlY3RvciAlZFxuIiwgc2VjdG9yKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gNDsgaSsrKQotCQkJYnVmW2ldID0gc2VjdG9yIDw8IDI0IHwgaTsKLQotCQlpZiAoZmxhc2hXcml0ZSAoZGV2LAotCQkJCXNlY3RvciA8PCBkZXYtPmxnU2VjdG9yU2l6ZSwKLQkJCQkoY2hhciAqKSBidWYsIGxlbikgPT0gRVJST1IpIHsKLQkJCXByaW50ZiAoImZsYXNoRGlhZzogV3JpdGUgZmFpbGVkIChkZXY6ICVkLCBzZWN0b3I6ICVkKVxuIiwKLQkJCQlERVZfTk8gKGRldiksIHNlY3Rvcik7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFZlcmlmeQotCSAqLwotCi0JZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgPCBkZXYtPnNlY3RvcnM7IHNlY3RvcisrKSB7Ci0JCXByaW50ZiAoImZsYXNoRGlhZzogVmVyaWZ5IHNlY3RvciAlZFxuIiwgc2VjdG9yKTsKLQotCQlpZiAoZmxhc2hSZWFkIChkZXYsCi0JCQkJICAgc2VjdG9yIDw8IGRldi0+bGdTZWN0b3JTaXplLAotCQkJCSAgIChjaGFyICopIGJ1ZiwgbGVuKSA9PSBFUlJPUikgewotCQkJcHJpbnRmICgiZmxhc2hEaWFnOiBSZWFkIGZhaWxlZCAoZGV2OiAlZCwgc2VjdG9yOiAlZClcbiIsCi0JCQkJREVWX05PIChkZXYpLCBzZWN0b3IpOwotCQkJZ290byBkb25lOwotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IGxlbiAvIDQ7IGkrKykgewotCQkJaWYgKGJ1ZltpXSAhPSAoc2VjdG9yIDw8IDI0IHwgaSkpIHsKLQkJCQlwcmludGYgKCJmbGFzaERpYWc6IFZlcmlmeSBlcnJvciAiCi0JCQkJCSIoZGV2OiAlZCwgc2VjdG9yOiAlZCwgb2Zmc2V0OiAweCV4KVxuIiwKLQkJCQkJREVWX05PIChkZXYpLCBzZWN0b3IsIGkpOwotCQkJCXByaW50ZiAoImZsYXNoRGlhZzogRXhwZWN0ZWQgMHglMDh4LCBnb3QgMHglMDh4XG4iLAotCQkJCQlzZWN0b3IgPDwgMjQgfCBpLCBidWZbaV0pOwotCi0JCQkJZ290byBkb25lOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpbnRmICgiZmxhc2hEaWFnOiBFcmFzaW5nXG4iKTsKLQotCWlmIChmbGFzaEVyYXNlIChkZXYpID09IEVSUk9SKSB7Ci0JCXByaW50ZiAoImZsYXNoRGlhZzogRmluYWwgZXJhc2UgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCXJ2ID0gT0s7Ci0KLSAgZG9uZToKLQlpZiAoYnVmKQotCQlmcmVlIChidWYpOwotCi0JaWYgKHJ2ID09IE9LKQotCQlwcmludGYgKCJmbGFzaERpYWc6IERldmljZSAlZCBwYXNzZWRcbiIsIERFVl9OTyAoZGV2KSk7Ci0JZWxzZQotCQlwcmludGYgKCJmbGFzaERpYWc6IERldmljZSAlZCBmYWlsZWRcbiIsIERFVl9OTyAoZGV2KSk7Ci0KLQlyZXR1cm4gcnY7Ci19Ci0KLVNUQVRVUyBmbGFzaERpYWdBbGwgKHZvaWQpCi17Ci0JaW50IGk7Ci0JaW50IHJ2ID0gT0s7Ci0KLQlQUklOVEYgKCJmbGFzaERpYWdBbGw6IGRldmljZXM9JWRcbiIsIGZsYXNoRGV2Q291bnQpOwotCi0JZm9yIChpID0gMDsgaSA8IGZsYXNoRGV2Q291bnQ7IGkrKykgewotCQlmbGFzaF9kZXZfdCAqZGV2ID0gJmZsYXNoRGV2W2ldOwotCi0JCWlmIChkZXYtPmZvdW5kICYmIGZsYXNoRGlhZyAoZGV2KSA9PSBFUlJPUikKLQkJCXJ2ID0gRVJST1I7Ci0JfQotCi0JaWYgKHJ2ID09IE9LKQotCQlwcmludGYgKCJmbGFzaERpYWdBbGw6IFBhc3NlZFxuIik7Ci0JZWxzZQotCQlwcmludGYgKCJmbGFzaERpYWdBbGw6IEZhaWxlZCBiZWNhdXNlIG9mIGVhcmxpZXIgZXJyb3JzXG4iKTsKLQotCXJldHVybiBPSzsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXVuc2lnbmVkIGxvbmcgZmxhc2hfaW5pdCAodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSAwOwotCWZsYXNoX2Rldl90ICpkZXYgPSBOVUxMOwotCi0JZmxhc2hMaWJJbml0ICgpOwotCi0JLyoKLQkgKiBQcm92aWRlIGluZm8gZm9yIEZMQVNIICh1cCB0byA5NjBLKSBvZiBLZXJuZWwgSW1hZ2UgZGF0YS4KLQkgKi8KLQlkZXYgPSBGTEFTSF9ERVZfQkFOSzBfTE9XOwotCWZsYXNoX2luZm9bRkxBU0hfQkFOS19LRVJORUxdLmZsYXNoX2lkID0KLQkJCShkZXYtPnZlbmRvcklEIDw8IDE2KSB8IGRldi0+ZGV2aWNlSUQ7Ci0JZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0tFUk5FTF0uc2VjdG9yX2NvdW50ID0gZGV2LT5zZWN0b3JzOwotCWZsYXNoX2luZm9bRkxBU0hfQkFOS19LRVJORUxdLnNpemUgPQotCQkJZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0tFUk5FTF0uc2VjdG9yX2NvdW50ICogRkxBU0hfU0VDVE9SX1NJWkU7Ci0JZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0tFUk5FTF0uc3RhcnRbRklSU1RfU0VDVE9SXSA9IGRldi0+YmFzZTsKLQlzaXplICs9IGZsYXNoX2luZm9bRkxBU0hfQkFOS19LRVJORUxdLnNpemU7Ci0KLQkvKgotCSAqIFByb3ZpZGUgaW5mbyBmb3IgNTEySyBQTENDIEZMQVNIIFJPTSAoVS1Cb290KQotCSAqLwotCWRldiA9IEZMQVNIX0RFVl9CQU5LMF9CT09UOwotCWZsYXNoX2luZm9bRkxBU0hfQkFOS19CT09UXS5mbGFzaF9pZCA9Ci0JCQkoZGV2LT52ZW5kb3JJRCA8PCAxNikgfCBkZXYtPmRldmljZUlEOwotCWZsYXNoX2luZm9bRkxBU0hfQkFOS19CT09UXS5zZWN0b3JfY291bnQgPSBkZXYtPnNlY3RvcnM7Ci0JZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0JPT1RdLnNpemUgPQotCQkJZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0JPT1RdLnNlY3Rvcl9jb3VudCAqIEZMQVNIX1NFQ1RPUl9TSVpFOwotCWZsYXNoX2luZm9bRkxBU0hfQkFOS19CT09UXS5zdGFydFtGSVJTVF9TRUNUT1JdID0gZGV2LT5iYXNlOwotCXNpemUgKz0gZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0JPT1RdLnNpemU7Ci0KLQotCS8qCi0JICogUHJvdmlkZSBpbmZvIGZvciA1MTJLIEZMQVNIMCBzZWdtZW50IChVLUJvb3QpCi0JICovCi0JZGV2ID0gRkxBU0hfREVWX0JBTkswX0hJR0g7Ci0JZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0FVWF0uZmxhc2hfaWQgPQotCQkJKGRldi0+dmVuZG9ySUQgPDwgMTYpIHwgZGV2LT5kZXZpY2VJRDsKLQlmbGFzaF9pbmZvW0ZMQVNIX0JBTktfQVVYXS5zZWN0b3JfY291bnQgPSBkZXYtPnNlY3RvcnM7Ci0JZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0FVWF0uc2l6ZSA9Ci0JCQlmbGFzaF9pbmZvW0ZMQVNIX0JBTktfQVVYXS5zZWN0b3JfY291bnQgKiBGTEFTSF9TRUNUT1JfU0laRTsKLQlmbGFzaF9pbmZvW0ZMQVNIX0JBTktfQVVYXS5zdGFydFtGSVJTVF9TRUNUT1JdID0gZGV2LT5iYXNlOwotCXNpemUgKz0gZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0FVWF0uc2l6ZTsKLQotCi0JcmV0dXJuIHNpemU7Ci19Ci0KLS8qCi0gKiBHZXQgZmxhc2ggZGV2aWNlIGZyb20gVS1Cb290IGZsYXNoIGluZm8uCi0gKi8KLWZsYXNoX2Rldl90ICpnZXRGbGFzaERldkZyb21JbmZvIChmbGFzaF9pbmZvX3QgKiBpbmZvKQotewotCWludCBpOwotCi0JaWYgKCFpbmZvKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAoaSA9IDA7IGkgPCBmbGFzaERldkNvdW50OyBpKyspIHsKLQkJZmxhc2hfZGV2X3QgKmRldiA9ICZmbGFzaERldltpXTsKLQotCQlpZiAoZGV2LT5mb3VuZCAmJiAoZGV2LT5iYXNlID09IGluZm8tPnN0YXJ0WzBdKSkKLQkJCXJldHVybiBkZXY7Ci0JfQotCXByaW50ZiAoIkVSUk9SOiBub3RpY2UsIG5vIEZMQVNIIG1hcHBlZCBhdCBhZGRyZXNzIDB4JXhcbiIsCi0JCQkodW5zaWduZWQgaW50KSBpbmZvLT5zdGFydFswXSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXVsb25nIGZsYXNoX2dldF9zaXplICh2dV9sb25nICogYWRkciwgZmxhc2hfaW5mb190ICogaW5mbykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBmbGFzaERldkNvdW50OyBpKyspIHsKLQkJZmxhc2hfZGV2X3QgKmRldiA9ICZmbGFzaERldltpXTsKLQotCQlpZiAoZGV2LT5mb3VuZCkgewotCQkJaWYgKGRldi0+YmFzZSA9PSAodW5zaWduZWQgaW50KSBhZGRyKSB7Ci0JCQkJaW5mby0+Zmxhc2hfaWQgPSAoZGV2LT52ZW5kb3JJRCA8PCAxNikgfCBkZXYtPmRldmljZUlEOwotCQkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IGRldi0+c2VjdG9yczsKLQkJCQlpbmZvLT5zaXplID0gaW5mby0+c2VjdG9yX2NvdW50ICogRkxBU0hfU0VDVE9SX1NJWkU7Ci0JCQkJcmV0dXJuIGRldi0+c2VjdG9ycyAqIEZMQVNIX1NFQ1RPUl9TSVpFOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqIGluZm8pCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgaW50IGNoaXA7Ci0KLQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKChpbmZvLT5mbGFzaF9pZCA+PiAxNikgJiAweGZmKSB7Ci0JY2FzZSAweDE6Ci0JCXByaW50ZiAoIkFNRCAiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7Ci0JCWJyZWFrOwotCX0KLQljaGlwID0gKHVuc2lnbmVkIGludCkgaW5mby0+Zmxhc2hfaWQgJiAweDAwMDAwMGZmOwotCi0Jc3dpdGNoIChjaGlwKSB7Ci0KLQljYXNlIEFNRF9JRF9GMDQwQjoKLQkJcHJpbnRmICgiQU0yOUYwNDBCICg0IE1iaXQpXG4iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFNRF9JRF9MVjE2MEI6Ci0JY2FzZSBGTEFTSF9BTTE2MExWOgotCWNhc2UgMHg0OToKLQkJcHJpbnRmICgiQU0yOUxWMTYwQiAoMTYgTWJpdCAvIDJNIHggOGJpdClcbiIpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByaW50ZiAoIlVua25vd24gQ2hpcCBUeXBlOjB4JXhcbiIsIGNoaXApOwotCQlicmVhazsKLQl9Ci0KLQlwcmludGYgKCIgIFNpemU6ICVsZCBieXRlcyBpbiAlZCBTZWN0b3JzXG4iLAotCQlpbmZvLT5zaXplLCBpbmZvLT5zZWN0b3JfY291bnQpOwotCi0JcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgewotCQlpZiAoKGkgJSA1KSA9PSAwKQotCQkJcHJpbnRmICgiXG4gICAiKTsKLQkJcHJpbnRmICgiICUwOGxYJXMiLAotCQkJaW5mby0+c3RhcnRbRklSU1RfU0VDVE9SXSArIGkgKiBGTEFTSF9TRUNUT1JfU0laRSwKLQkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7Ci0JfQotCXByaW50ZiAoIlxuIik7Ci19Ci0KLQotLyoKLSAqIEVyYXNlIGEgcmFuZ2Ugb2YgZmxhc2ggc2VjdG9ycy4KLSAqLwotaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKLXsKLQlpbnQgcHJvdCwgc2VjdDsKLQlmbGFzaF9kZXZfdCAqZGV2ID0gTlVMTDsKLQotCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgewotCQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCQkJcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7Ci0JCX0KLQkJcmV0dXJuIDE7Ci0JfQotCi0JcHJvdCA9IDA7Ci0JZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7IHNlY3QrKykgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgewotCQkJcHJvdCsrOwotCQl9Ci0JfQotCi0JaWYgKHByb3QpIHsKLQkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAotCQkJcHJvdCk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmICgiXG4iKTsKLQl9Ci0KLQkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCi0JZGV2ID0gZ2V0Rmxhc2hEZXZGcm9tSW5mbyAoaW5mbyk7Ci0JaWYgKGRldikgewotCQlwcmludGYgKCJFcmFzZSBGTEFTSFslc10gLSVkIHNlY3RvcnM6IiwgZGV2LT5uYW1lLCBkZXYtPnNlY3RvcnMpOwotCQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgc2VjdCsrKSB7Ci0JCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KLQkJCQlwcmludGYgKCIuIik7Ci0JCQkJaWYgKEVSUk9SID09IGZsYXNoRXJhc2VTZWN0b3IgKGRldiwgc2VjdCkpIHsKLQkJCQkJcHJpbnRmICgiRVJST1I6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQgb24gRkxBU0hbJXNdXG4iLCBzZWN0LCBkZXYtPm5hbWUpOwotCQkJCQlyZXR1cm4gMTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JcHJpbnRmICgiIGRvbmVcbiIpOwotCXJldHVybiAwOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBXcml0ZSBhIHdvcmQgdG8gRmxhc2gsIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICovCi1zdGF0aWMgaW50IHdyaXRlX3dvcmQgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpCi17Ci0KLQlmbGFzaF9kZXZfdCAqZGV2ID0gZ2V0Rmxhc2hEZXZGcm9tSW5mbyAoaW5mbyk7Ci0JaW50IGFkZHIgPSBkZXN0IC0gaW5mby0+c3RhcnRbMF07Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoT0sgIT0gZmxhc2hXcml0ZSAoZGV2LCBhZGRyLCAoY2hhciAqKSAmZGF0YSwgc2l6ZW9mICh1bG9uZykpKSB7Ci0JCXByaW50ZiAoIkVSUk9SOiBjb3VsZCBub3Qgd3JpdGUgdG8gYWRkcj0weCV4LCBkYXRhPTB4JXhcbiIsCi0JCQkodW5zaWduZWQgaW50KSBhZGRyLCAodW5zaWduZWQpIGRhdGEpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoKGFkZHIgJSBGTEFTSF9TRUNUT1JfU0laRSkgPT0gMCkKLQkJcHJpbnRmICgiLiIpOwotCi0KLQlQUklOVEYgKCJ3cml0ZV93b3JkOjB4JXgsIGJhc2U9MHgleCwgYWRkcj0weCV4LCBkYXRhPTB4JXhcbiIsCi0JCSh1bnNpZ25lZCkgaW5mby0+c3RhcnRbMF0sCi0JCSh1bnNpZ25lZCkgZGVzdCwKLQkJKHVuc2lnbmVkKSAoZGVzdCAtIGluZm8tPnN0YXJ0WzBdKSwgKHVuc2lnbmVkKSBkYXRhKTsKLQotCXJldHVybiAoMCk7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29weSBtZW1vcnkgdG8gZmxhc2gsIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICovCi0KLWludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1Y2hhciAqIHNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQotewotCXVsb25nIGNwLCB3cCwgZGF0YTsKLQlpbnQgaSwgbCwgcmM7Ci0JZmxhc2hfZGV2X3QgKmRldiA9IGdldEZsYXNoRGV2RnJvbUluZm8gKGluZm8pOwotCi0JaWYgKGRldikgewotCQlwcmludGYgKCJGTEFTSFslc106IiwgZGV2LT5uYW1lKTsKLQkJd3AgPSAoYWRkciAmIH4zKTsJLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCi0KLQkJLyoKLQkJICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcwotCQkgKi8KLQkJaWYgKChsID0gYWRkciAtIHdwKSAhPSAwKSB7Ci0JCQlkYXRhID0gMDsKLQkJCWZvciAoaSA9IDAsIGNwID0gd3A7IGkgPCBsOyArK2ksICsrY3ApIHsKLQkJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKSBjcCk7Ci0JCQl9Ci0JCQlmb3IgKDsgaSA8IDQgJiYgY250ID4gMDsgKytpKSB7Ci0JCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotCQkJCS0tY250OwotCQkJCSsrY3A7Ci0JCQl9Ci0JCQlmb3IgKDsgY250ID09IDAgJiYgaSA8IDQ7ICsraSwgKytjcCkgewotCQkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopIGNwKTsKLQkJCX0KLQkJCWlmICgocmMgPSB3cml0ZV93b3JkIChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKLQkJCQlyZXR1cm4gKHJjKTsKLQkJCX0KLQkJCXdwICs9IDQ7Ci0JCX0KLQotCQkvKgotCQkgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKLQkJICovCi0JCXdoaWxlIChjbnQgPj0gNCkgewotCQkJZGF0YSA9IDA7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0JCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotCQkJfQotCQkJaWYgKChyYyA9IHdyaXRlX3dvcmQgKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotCQkJCXJldHVybiAocmMpOwotCQkJfQotCQkJd3AgKz0gNDsKLQkJCWNudCAtPSA0OwotCQl9Ci0KLQkJaWYgKGNudCA9PSAwKSB7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0KLQkJLyoKLQkJICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzCi0JCSAqLwotCQlkYXRhID0gMDsKLQkJZm9yIChpID0gMCwgY3AgPSB3cDsgaSA8IDQgJiYgY250ID4gMDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0JCQktLWNudDsKLQkJfQotCQlmb3IgKDsgaSA8IDQ7ICsraSwgKytjcCkgewotCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOwotCQl9Ci0KLQkJcmV0dXJuICh3cml0ZV93b3JkIChpbmZvLCB3cCwgZGF0YSkpOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCmRpZmYgLS1naXQgYS9ib2FyZC9tb3Vzc2UvZmxhc2guaCBiL2JvYXJkL21vdXNzZS9mbGFzaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2U0NjE5Li4wMDAwMDAwCi0tLSBhL2JvYXJkL21vdXNzZS9mbGFzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotI2lmbmRlZglGTEFTSF9MSUJfSAotI2RlZmluZQlGTEFTSF9MSUJfSAotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0KLS8qIFBJTyBvcGVyYXRpb25zIG1heCAqLwotI2RlZmluZQlGTEFTSF9QUk9HUkFNX1BPTExTCQkxMDAwMDAKLQotLyogMTAgU2Vjb25kcyBkZWZhdWx0ICovCi0jZGVmaW5lCUZMQVNIX0VSQVNFX1NFQ1RPUl9USU1FT1VUCSgxMCoxMDAwIC8qU0VDKi8gKQotCi0vKiBGbGFzaCBkZXZpY2UgaW5mbyBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0IGZsYXNoX2Rldl9zIHsKLSAgICBjaGFyICAgICAgICBuYW1lWzI0XTsgICAgICAgICAgICAgICAvKiBCYW5rIE5hbWUgKi8KLSAgICBpbnQJCWJhbms7CQkJLyogQmFuayAwIG9yIDEgKi8KLSAgICB1bnNpZ25lZCBpbnQgYmFzZTsJCQkvKiBCYXNlIGFkZHJlc3MgKi8KLSAgICBpbnQJCXNlY3RvcnM7CQkvKiBTZWN0b3IgY291bnQgKi8KLSAgICBpbnQJCWxnU2VjdG9yU2l6ZTsJCS8qIExvZzIodXNhYmxlIGJ5dGVzL3NlY3RvcikgKi8KLSAgICBpbnQJCXZlbmRvcklEOwkJLyogRXhwZWN0ZWQgdmVuZG9yIElEICovCi0gICAgaW50CQlkZXZpY2VJRDsJCS8qIEV4cGVjdGVkIGRldmljZSBJRCAqLwotICAgIGludAkJZm91bmQ7CQkJLyogU2V0IGlmIGZvdW5kIGJ5IGZsYXNoTGliSW5pdCAqLwotICAgIGludAkJc3dhcDsJCQkvKiBTZXQgZm9yIGJhbmsgMSBpZiBieXRlIHN3YXAgcmVxJ2QgKi8KLX0gZmxhc2hfZGV2X3Q7Ci0KLSNkZWZpbmUgRkxBU0hfTUFYX1BPUyhkZXYpIFwKLQkoKGRldiktPnNlY3RvcnMgPDwgKGRldiktPmxnU2VjdG9yU2l6ZSkKLQotI2RlZmluZSBGTEFTSF9TRUNUT1JfUE9TKGRldiwgc2VjdG9yKSBcCi0JKChzZWN0b3IpIDw8IChkZXYpLT5sZ1NlY3RvclNpemUpCi0KLS8qIEFNRCAyOUYwNDAgKi8KLSNkZWZpbmUgRkxBU0gwX0JBTksJCQkwCi0jZGVmaW5lIEZMQVNIMF9WRU5ET1JfSUQJCTB4MDEKLSNkZWZpbmUgRkxBU0gwX0RFVklDRV9JRAkJMHg0OQotCi0vKiBBTUQyOUxWMTYwREIgKi8KLSNkZWZpbmUgRkxBU0gxX0JBTksJCQkxCi0jZGVmaW5lIEZMQVNIMV9WRU5ET1JfSUQJCTB4MDAwMQotI2RlZmluZSBGTEFTSDFfREVWSUNFX0lECQkweDIyNDkKLQotZXh0ZXJuCWZsYXNoX2Rldl90CQkJZmxhc2hEZXZbXTsKLWV4dGVybglpbnQJCQkJZmxhc2hEZXZDb3VudDsKLQotLyoKLSAqIERldmljZSBwb2ludGVycwotICoKLSAqIFRoZXNlIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHRhYmxlIGluIGZsYXNoTGliLmMuCi0gKi8KLSNkZWZpbmUgRkxBU0hfREVWX0JBTkswX1NBMAkJKCZmbGFzaERldlswXSkKLSNkZWZpbmUgRkxBU0hfREVWX0JBTkswX1NBMQkJKCZmbGFzaERldlsxXSkKLSNkZWZpbmUgRkxBU0hfREVWX0JBTkswX1NBMgkJKCZmbGFzaERldlsyXSkKLSNkZWZpbmUgRkxBU0hfREVWX0JBTkswX0xPVwkJKCZmbGFzaERldlszXSkgLyogOTYwSyAqLwotI2RlZmluZSBGTEFTSF9ERVZfQkFOSzBfQk9PVAkJKCZmbGFzaERldls0XSkgLyogUExDQyAqLwotI2RlZmluZSBGTEFTSF9ERVZfQkFOSzBfSElHSAkJKCZmbGFzaERldls1XSkgLyogNTEySyBQTENDIHNoYWRvdyAqLwotCi11bnNpZ25lZCBsb25nIGZsYXNoX2luaXQodm9pZCk7Ci1pbnQgZmxhc2hFcmFzZVNlY3RvcihmbGFzaF9kZXZfdCAqZGV2LCBpbnQgc2VjdG9yKTsKLWludCBmbGFzaEVyYXNlKGZsYXNoX2Rldl90ICpkZXYpOwotaW50IGZsYXNoUmVhZChmbGFzaF9kZXZfdCAqZGV2LCBpbnQgcG9zLCBjaGFyICpidWYsIGludCBsZW4pOwotaW50IGZsYXNoV3JpdGUoZmxhc2hfZGV2X3QgKmRldiwgaW50IHBvcywgY2hhciAqYnVmLCBpbnQgbGVuKTsKLWludCBmbGFzaFdyaXRhYmxlKGZsYXNoX2Rldl90ICpkZXYsIGludCBwb3MsIGludCBsZW4pOwotaW50IGZsYXNoRGlhZyhmbGFzaF9kZXZfdCAqZGV2KTsKLWludCBmbGFzaERpYWdBbGwodm9pZCk7Ci0KLXVsb25nIGZsYXNoX2dldF9zaXplICh2dV9sb25nICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pOwotdm9pZCBmbGFzaF9wcmludF9pbmZvICAoZmxhc2hfaW5mb190ICppbmZvKTsKLWludCAgZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpOwotaW50ICB3cml0ZV9idWZmICAoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpOwotCi0vKgotICogRmxhc2ggaW5mbyBpbmRpY2VzLgotICovCi0jZGVmaW5lIEZMQVNIX0JBTktfS0VSTkVMIDAKLSNkZWZpbmUgRkxBU0hfQkFOS19CT09UICAgMQotI2RlZmluZSBGTEFTSF9CQU5LX0FVWCAgICAyCi0jZGVmaW5lIEZJUlNUX1NFQ1RPUiAgICAgIDAKLQotI2VuZGlmCS8qICFGTEFTSF9MSUJfSCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbW91c3NlL200OHQ1OXkuYyBiL2JvYXJkL21vdXNzZS9tNDh0NTl5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNzBkYmUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbW91c3NlL200OHQ1OXkuYworKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKgotICogU0dTIE00OC1UNTlZIFRPRC9OVlJBTSBEcml2ZXIKLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogKEMpIENvcHlyaWdodCAxOTk5LCBieSBDdXJ0IE1jRG93ZWxsLCAwOC0wNi05OSwgQnJvYWRjb20gQ29ycC4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDEsIEphbWVzIERvdWdoZXJ0eSwgMDcvMTgvMDEsIEJyb2FkY29tIENvcnAuCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotLyoKLSAqIFNHUyBNNDgtVDU5WSBUT0QvTlZSQU0gRHJpdmVyCi0gKgotICogVGhlIFNHUyBNNDggYW4gOEsgTlZSQU0gc3RhcnRpbmcgYXQgb2Zmc2V0IE00OF9CQVNFX0FERFIgYW5kCi0gKiBjb250aW51aW5nIGZvciA4MTc2IGJ5dGVzLiBBZnRlciB0aGF0IHN0YXJ0cyB0aGUgVGltZS1PZi1EYXkgKFRPRCkKLSAqIHJlZ2lzdGVycyB3aGljaCBhcmUgdXNlZCB0byBzZXQvZ2V0IHRoZSBpbnRlcm5hbCBkYXRlL3RpbWUgZnVuY3Rpb25zLgotICoKLSAqIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgWTJLIGNvbXBsaWFuY2UgYnkgdGFraW5nIGZ1bGwgeWVhciBudW1iZXJzCi0gKiBhbmQgdHJhbnNsYXRpbmcgYmFjayBhbmQgZm9ydGggZnJvbSB0aGUgVE9EIDItZGlnaXQgeWVhci4KLSAqCi0gKiBOT1RFOiBmb3IgcHJvcGVyIGludGVyYWN0aW9uIHdpdGggYW4gb3BlcmF0aW5nIHN5c3RlbSwgdGhlIFRPRCBzaG91bGQKLSAqIGJlIHVzZWQgdG8gc3RvcmUgVW5pdmVyc2FsIENvb3JkaW5hdGVkIFRpbWUgKEdNVCkgYW5kIHRpbWV6b25lCi0gKiBjb252ZXJzaW9ucyBzaG91bGQgYmUgdXNlZC4KLSAqCi0gKiBIZXJlIGlzIGEgZGlhZ3JhbSBvZiB0aGUgbWVtb3J5IGxheW91dDoKLSAqCi0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAweGZmZTBhMDAwCi0gKiB8IE5vbi12b2xhdGlsZSBtZW1vcnkgICAgICAgICAgICAgICAgICAgICAgICAgfCAuCi0gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAuCi0gKiB8ICg4MTc2IGJ5dGVzIG9mIE5vbi12b2xhdGlsZSBtZW1vcnkpICAgICAgICAgfCAuCi0gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAuCi0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAweGZmZTBiZmYwCi0gKiB8IEZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgMHhmZmUwYmZmMQotICogfCBVbnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4ZmZlMGJmZjIKLSAqIHwgQWxhcm0gU2Vjb25kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAweGZmZTBiZmYzCi0gKiB8IEFsYXJtIE1pbnV0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgMHhmZmUwYmZmNAotICogfCBBbGFybSBEYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4ZmZlMGJmZjUKLSAqIHwgSW50ZXJydXB0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAweGZmZTBiZmY2Ci0gKiB8IFdhdGNoRG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgMHhmZmUwYmZmNwotICogfCBDYWxpYnJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4ZmZlMGJmZjgKLSAqIHwgU2Vjb25kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAweGZmZTBiZmY5Ci0gKiB8IE1pbnV0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgMHhmZmUwYmZmYQotICogfCBIb3VycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4ZmZlMGJmZmIKLSAqIHwgRGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAweGZmZTBiZmZjCi0gKiB8IERhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgMHhmZmUwYmZmZAotICogfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIDB4ZmZlMGJmZmUKLSAqIHwgWWVhciAoMiBkaWdpdHMgb25seSkgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAweGZmZTBiZmZmCi0gKi8KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxydGMuaD4KLSNpbmNsdWRlICJtb3Vzc2UuaCIKLQotLyoKLSAqIEltcG9ydGVkIGZyb20gbW91c3NlLmg6Ci0gKgotICogICBUT0RfUkVHX0JBU0UJCUJhc2Ugb2YgbTQ4dDU5eSBUT0QgcmVnaXN0ZXJzCi0gKiAgIFNZU19UT0RfVU5QUk9URUNUKCkJRGlzYWJsZSBOVlJBTSB3cml0ZSBwcm90ZWN0Ci0gKiAgIFNZU19UT0RfUFJPVEVDVCgpCQlSZS1lbmFibGUgTlZSQU0gd3JpdGUgcHJvdGVjdAotICovCi0KLSNkZWZpbmUgWUVBUgkJMHhmCi0jZGVmaW5lIE1PTlRICQkweGUKLSNkZWZpbmUgREFZCQkweGQKLSNkZWZpbmUgREFZX09GX1dFRUsJMHhjCi0jZGVmaW5lIEhPVVIJCTB4YgotI2RlZmluZSBNSU5VVEUJCTB4YQotI2RlZmluZSBTRUNPTkQJCTB4OQotI2RlZmluZSBDT05UUk9MCQkweDgKLSNkZWZpbmUgV0FUQ0gJCTB4NwotI2RlZmluZSBJTlRDVEwJCTB4NgotI2RlZmluZSBXRF9EQVRFCQkweDUKLSNkZWZpbmUgV0RfSE9VUgkJMHg0Ci0jZGVmaW5lIFdEX01JTgkJMHgzCi0jZGVmaW5lIFdEX1NFQwkJMHgyCi0jZGVmaW5lIF9VTlVTRUQJCTB4MQotI2RlZmluZSBGTEFHUwkJMHgwCi0KLSNkZWZpbmUgTTQ4X0FERFIJKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIFRPRF9SRUdfQkFTRSkKLQotaW50IG00OF90b2RfaW5pdCh2b2lkKQotewotICAgIFNZU19UT0RfVU5QUk9URUNUKCk7Ci0KLSAgICBNNDhfQUREUltDT05UUk9MXSA9IDA7Ci0gICAgTTQ4X0FERFJbV0FUQ0hdID0gMDsKLSAgICBNNDhfQUREUltJTlRDVExdID0gMDsKLQotICAgIC8qCi0gICAgICogSWYgdGhlIG9zY2lsbGF0b3IgaXMgY3VycmVudGx5IHN0b3BwZWQgKGFzIG9uIGEgbmV3IHBhcnQgc2hpcHBlZAotICAgICAqIGZyb20gdGhlIGZhY3RvcnkpLCBzdGFydCBpdCBydW5uaW5nLgotICAgICAqCi0gICAgICogSGVyZSBpcyBhbiBleGFtcGxlIG9mIHRoZSBUT0QgYnl0ZXMgb24gYSBicmFuZCBuZXcgTTQ4VDU5WSBwYXJ0OgotICAgICAqCQkwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCA4OCA4YyBjMyBiZiBjOCBmNSAwMQotICAgICAqLwotCi0gICAgaWYgKE00OF9BRERSW1NFQ09ORF0gJiAweDgwKQotCU00OF9BRERSW1NFQ09ORF0gPSAwOwotCi0gICAgLyogSXMgYmF0dGVyeSBsb3cgKi8KLSAgICBpZiAoIE00OF9BRERSW0ZMQUdTXSAmIDB4MTApIHsKLQkgcHJpbnRmKCJOT1RJQ0U6IEJhdHRlcnkgbG93IG9uIFJlYWwtVGltZSBDbG9jayAocmVwbGFjZSBTTkFQSEFUKS5cbiIpOwotICAgIH0KLQotICAgIFNZU19UT0RfUFJPVEVDVCgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBtNDhfdG9kX3NldAotICovCi0KLXN0YXRpYyBpbnQgdG9fYmNkKGludCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUgLyAxMCAqIDE2ICsgdmFsdWUgJSAxMDsKLX0KLQotc3RhdGljIGludCBmcm9tX2JjZChpbnQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlIC8gMTYgKiAxMCArIHZhbHVlICUgMTY7Ci19Ci0KLXN0YXRpYyBpbnQgZGF5X29mX3dlZWsoaW50IHksIGludCBtLCBpbnQgZCkJLyogMC02ID09PiBTdW4tU2F0ICovCi17Ci0gICAgc3RhdGljIGludCB0W10gPSB7MCwgMywgMiwgNSwgMCwgMywgNSwgMSwgNCwgNiwgMiwgNH07Ci0gICAgeSAtPSBtIDwgMzsKLSAgICByZXR1cm4gKHkgKyB5LzQgLSB5LzEwMCArIHkvNDAwICsgdFttLTFdICsgZCkgJSA3OwotfQotCi0vKgotICogTm90ZTogdGhlIFRPRCBzaG91bGQgc3RvcmUgdGhlIGN1cnJlbnQgR01UCi0gKi8KLQotaW50IG00OF90b2Rfc2V0KGludCB5ZWFyLAkJLyogMTk4MC0yMDc5ICovCi0JCWludCBtb250aCwJCS8qIDAxLTEyICovCi0JCWludCBkYXksCQkvKiAwMS0zMSAqLwotCQlpbnQgaG91ciwJCS8qIDAwLTIzICovCi0JCWludCBtaW51dGUsCQkvKiAwMC01OSAqLwotCQlpbnQgc2Vjb25kKQkJLyogMDAtNTkgKi8KLQotewotICAgIFNZU19UT0RfVU5QUk9URUNUKCk7Ci0KLSAgICBNNDhfQUREUltDT05UUk9MXSB8PSAweDgwOwkvKiBTZXQgV1JJVEUgYml0ICovCi0KLSAgICBNNDhfQUREUltZRUFSXSA9IHRvX2JjZCh5ZWFyICUgMTAwKTsKLSAgICBNNDhfQUREUltNT05USF0gPSB0b19iY2QobW9udGgpOwotICAgIE00OF9BRERSW0RBWV0gPSB0b19iY2QoZGF5KTsKLSAgICBNNDhfQUREUltEQVlfT0ZfV0VFS10gPSBkYXlfb2Zfd2Vlayh5ZWFyLCBtb250aCwgZGF5KSArIDE7Ci0gICAgTTQ4X0FERFJbSE9VUl0gPSB0b19iY2QoaG91cik7Ci0gICAgTTQ4X0FERFJbTUlOVVRFXSA9IHRvX2JjZChtaW51dGUpOwotICAgIE00OF9BRERSW1NFQ09ORF0gPSB0b19iY2Qoc2Vjb25kKTsKLQotICAgIE00OF9BRERSW0NPTlRST0xdICY9IH4weDgwOwkvKiBDbGVhciBXUklURSBiaXQgKi8KLQotICAgIFNZU19UT0RfUFJPVEVDVCgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBOb3RlOiB0aGUgVE9EIHNob3VsZCBzdG9yZSB0aGUgY3VycmVudCBHTVQKLSAqLwotCi1pbnQgbTQ4X3RvZF9nZXQoaW50ICp5ZWFyLAkJLyogMTk4MC0yMDc5ICovCi0JCWludCAqbW9udGgsCQkvKiAwMS0xMiAqLwotCQlpbnQgKmRheSwJCS8qIDAxLTMxICovCi0JCWludCAqaG91ciwJCS8qIDAwLTIzICovCi0JCWludCAqbWludXRlLAkJLyogMDAtNTkgKi8KLQkJaW50ICpzZWNvbmQpCQkvKiAwMC01OSAqLwotewotICAgIGludCB5OwotCi0gICAgU1lTX1RPRF9VTlBST1RFQ1QoKTsKLQotICAgIE00OF9BRERSW0NPTlRST0xdIHw9IDB4NDA7CS8qIFNldCBSRUFEIGJpdCAqLwotCi0gICAgeSA9IGZyb21fYmNkKE00OF9BRERSW1lFQVJdKTsKLSAgICAqeWVhciA9IHkgPCA4MCA/IDIwMDAgKyB5IDogMTkwMCArIHk7Ci0gICAgKm1vbnRoID0gZnJvbV9iY2QoTTQ4X0FERFJbTU9OVEhdKTsKLSAgICAqZGF5ID0gZnJvbV9iY2QoTTQ4X0FERFJbREFZXSk7Ci0gICAgLyogZGF5X29mX3dlZWsgPSBNNDhfQUREUltEQVlfT0ZfV0VFS10gJiAweGY7ICovCi0gICAgKmhvdXIgPSBmcm9tX2JjZChNNDhfQUREUltIT1VSXSk7Ci0gICAgKm1pbnV0ZSA9IGZyb21fYmNkKE00OF9BRERSW01JTlVURV0pOwotICAgICpzZWNvbmQgPSBmcm9tX2JjZChNNDhfQUREUltTRUNPTkRdICYgMHg3Zik7Ci0KLSAgICBNNDhfQUREUltDT05UUk9MXSAmPSB+MHg0MDsJLyogQ2xlYXIgUkVBRCBiaXQgKi8KLQotICAgIFNZU19UT0RfUFJPVEVDVCgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBtNDhfdG9kX2dldF9zZWNvbmQodm9pZCkKLXsKLSAgICByZXR1cm4gZnJvbV9iY2QoTTQ4X0FERFJbU0VDT05EXSAmIDB4N2YpOwotfQotCi0vKgotICogV2F0Y2hkb2cgZnVuY3Rpb24KLSAqCi0gKiAgSWYgdXNlYyBpcyAwLCB0aGUgd2F0Y2hkb2cgdGltZXIgaXMgZGlzYXJtZWQuCi0gKgotICogIElmIHVzZWMgaXMgbm9uLXplcm8sIHRoZSB3YXRjaGRvZyB0aW1lciBpcyBhcm1lZCAob3IgcmUtYXJtZWQpIGZvcgotICogICAgYXBwcm94aW1hdGVseSB1c2VjIG1pY3Jvc2Vjb25kcyAoaWYgdGhlIGV4YWN0IHJlcXVlc3RlZCB1c2VjIGlzCi0gKiAgICBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjaGlwLCB0aGUgbmV4dCBoaWdoZXIgYXZhaWxhYmxlIHZhbHVlIGlzIHVzZWQpLgotICoKLSAqICBNaW5pbXVtIHdhdGNoZG9nIHRpbWVvdXQgPSA2MjUwMCB1c2VjCi0gKiAgTWF4aW11bSB3YXRjaGRvZyB0aW1lb3V0ID0gMTI0IHNlYyAoMTI0MDAwMDAwIHVzZWMpCi0gKi8KLQotdm9pZCBtNDhfd2F0Y2hkb2dfYXJtKGludCB1c2VjKQotewotICAgIGludAkJbXB5LCByZXM7Ci0KLSAgICBTWVNfVE9EX1VOUFJPVEVDVCgpOwotCi0gICAgaWYgKHVzZWMgPT0gMCkgewotCXJlcyA9IDA7Ci0JbXB5ID0gMDsKLSAgICB9IGVsc2UgaWYgKHVzZWMgPCAyMDAwMDAwKSB7CS8qIFJlc29sdXRpb246IDEvMTZzIGlmIGJlbG93IDJzICovCi0JcmVzID0gMDsKLQltcHkgPSAodXNlYyArIDYyNDk5KSAvIDYyNTAwOwotICAgIH0gZWxzZSBpZiAodXNlYyA8IDgwMDAwMDApIHsJLyogUmVzb2x1dGlvbjogMS80cyBpZiBiZWxvdyA4cyAqLwotCXJlcyA9IDE7Ci0JbXB5ID0gKHVzZWMgKyAyNDk5OTkpIC8gMjUwMDAwOwotICAgIH0gZWxzZSBpZiAodXNlYyA8IDMyMDAwMDAwKSB7CS8qIFJlc29sdXRpb246IDFzIGlmIGJlbG93IDMycyAqLwotCXJlcyA9IDI7Ci0JbXB5ID0gKHVzZWMgKyA5OTk5OTkpIC8gMTAwMDAwMDsKLSAgICB9IGVsc2UgewkJCQkvKiBSZXNvbHV0aW9uOiA0cyB1cCB0byAxMjRzICovCi0JcmVzID0gMzsKLQltcHkgPSAodXNlYyArIDM5OTk5OTkpIC8gNDAwMDAwMDsKLQlpZiAobXB5ID4gMzEpCi0JICAgIG1weSA9IDMxOwotICAgIH0KLQotICAgIE00OF9BRERSW1dBVENIXSA9ICgweDgwIHwJCS8qIFN0ZWVyIHRvIFJTVCBzaWduYWwgKElSUSA9IE4vQykgKi8KLQkJICAgICAgIG1weSA8PCAyIHwKLQkJICAgICAgIHJlcyk7Ci0KLSAgICBTWVNfVE9EX1BST1RFQ1QoKTsKLX0KLQotLyoKLSAqIFUtQm9vdCBSVEMgc3VwcG9ydC4KLSAqLwotaW50Ci1ydGNfZ2V0KCBzdHJ1Y3QgcnRjX3RpbWUgKnRtcCApCi17Ci0JbTQ4X3RvZF9nZXQoJnRtcC0+dG1feWVhciwKLQkJICAgICZ0bXAtPnRtX21vbiwKLQkJICAgICZ0bXAtPnRtX21kYXksCi0JCSAgICAmdG1wLT50bV9ob3VyLAotCQkgICAgJnRtcC0+dG1fbWluLAotCQkgICAgJnRtcC0+dG1fc2VjKTsKLQl0bXAtPnRtX3lkYXkgPSAwOwotCXRtcC0+dG1faXNkc3Q9IDA7Ci0KLSNpZmRlZiBSVENfREVCVUcKLQlwcmludGYoICJHZXQgREFURTogJTRkLSUwMmQtJTAyZCAod2RheT0lZCkgIFRJTUU6ICUyZDolMDJkOiUwMmRcbiIsCi0JCXRtcC0+dG1feWVhciwgdG1wLT50bV9tb24sIHRtcC0+dG1fbWRheSwgdG1wLT50bV93ZGF5LAotCQl0bXAtPnRtX2hvdXIsIHRtcC0+dG1fbWluLCB0bXAtPnRtX3NlYyApOwotI2VuZGlmCi0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHJ0Y19zZXQoIHN0cnVjdCBydGNfdGltZSAqdG1wICkKLXsKLQltNDhfdG9kX3NldCh0bXAtPnRtX3llYXIsCQkvKiAxOTgwLTIwNzkgKi8KLQkJICAgIHRtcC0+dG1fbW9uLAkJLyogMDEtMTIgKi8KLQkJICAgIHRtcC0+dG1fbWRheSwgICAgICAgICAgICAgIC8qIDAxLTMxICovCi0JCSAgICB0bXAtPnRtX2hvdXIsCQkvKiAwMC0yMyAqLwotCQkgICAgdG1wLT50bV9taW4sCQkvKiAwMC01OSAqLwotCQkgICAgdG1wLT50bV9zZWMpOwkJLyogMDAtNTkgKi8KLQotI2lmZGVmIFJUQ19ERUJVRwotCXByaW50ZiggIlNldCBEQVRFOiAlNGQtJTAyZC0lMDJkICh3ZGF5PSVkKSAgVElNRTogJTJkOiUwMmQ6JTAyZFxuIiwKLQkJdG1wLT50bV95ZWFyLCB0bXAtPnRtX21vbiwgdG1wLT50bV9tZGF5LCB0bXAtPnRtX3dkYXksCi0JCXRtcC0+dG1faG91ciwgdG1wLT50bV9taW4sIHRtcC0+dG1fc2VjKTsKLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLXJ0Y19yZXNldCAodm9pZCkKLXsKLSAgbTQ4X3RvZF9pbml0KCk7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9tb3Vzc2UvbTQ4dDU5eS5oIGIvYm9hcmQvbW91c3NlL200OHQ1OXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM3YzA5Mi4uMDAwMDAwMAotLS0gYS9ib2FyZC9tb3Vzc2UvbTQ4dDU5eS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIFNHUyBNNDgtVDU5WSBUT0QvTlZSQU0gRHJpdmVyCi0gKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIChDKSBDb3B5cmlnaHQgMTk5OSwgYnkgQ3VydCBNY0Rvd2VsbCwgMDgtMDYtOTksIEJyb2FkY29tIENvcnAuCi0gKgotICogKEMpIENvcHlyaWdodCAyMDAxLCBKYW1lcyBEb3VnaGVydHksIDA3LzE4LzAxLCBCcm9hZGNvbSBDb3JwLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpZm5kZWYgX19NNDhfVDU5X1lfSAotI2RlZmluZSBfX000OF9UNTlfWV9ICi0KLS8qCi0gKiBNNDggVDU5WSAtVGltZWtlZXBpbmcgQmF0dGVyeSBiYWNrZWQgU1JBTS4KLSAqLwotCi1pbnQgbTQ4X3RvZF9pbml0KHZvaWQpOwotCi1pbnQgbTQ4X3RvZF9zZXQoaW50IHllYXIsCi0JCWludCBtb250aCwKLQkJaW50IGRheSwKLQkJaW50IGhvdXIsCi0JCWludCBtaW51dGUsCi0JCWludCBzZWNvbmQpOwotCi1pbnQgbTQ4X3RvZF9nZXQoaW50ICp5ZWFyLAotCQlpbnQgKm1vbnRoLAotCQlpbnQgKmRheSwKLQkJaW50ICpob3VyLAotCQlpbnQgKm1pbnV0ZSwKLQkJaW50ICpzZWNvbmQpOwotCi1pbnQgbTQ4X3RvZF9nZXRfc2Vjb25kKHZvaWQpOwotCi12b2lkIG00OF93YXRjaGRvZ19hcm0oaW50IHVzZWMpOwotCi0jZW5kaWYgLyohX19NNDhfVDU5X1lfSCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbW91c3NlL21vdXNzZS5jIGIvYm9hcmQvbW91c3NlL21vdXNzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTcyNGU2Li4wMDAwMDAwCi0tLSBhL2JvYXJkL21vdXNzZS9tb3Vzc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBNT1VTU0UgQm9hcmQgU3VwcG9ydAotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDEKLSAqIEphbWVzIERvdWdoZXJ0eSwgamZkQGNzLnN0YW5mb3JkLmVkdQotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxtcGM4MjR4Lmg+Ci0jaW5jbHVkZSA8bmV0ZGV2Lmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPHRpbWVzdGFtcC5oPgotCi0jaW5jbHVkZSAibW91c3NlLmgiCi0jaW5jbHVkZSAibTQ4dDU5eS5oIgotI2luY2x1ZGUgPHBjaS5oPgotCi0KLWludCBjaGVja2JvYXJkICh2b2lkKQotewotCXVsb25nIGJ1c2ZyZXEgPSBnZXRfYnVzX2ZyZXEgKDApOwotCWNoYXIgYnVmWzMyXTsKLQotCXB1dHMgKCJCb2FyZDogTU9VU1NFIE1QQzgyNDAvS0FITFVBIC0gQ0hSUCAoTUFQIEIpXG4iKTsKLQlwcmludGYgKCJCdWlsdDogJXMgYXQgJXNcbiIsIFVfQk9PVF9EQVRFLCBVX0JPT1RfVElNRSk7Ci0JcHJpbnRmICgiTVBMRDogIFJldmlzaW9uICVkXG4iLCBTWVNfUkVWSURfR0VUICgpKTsKLQlwcmludGYgKCJMb2NhbCBCdXM6ICAlcyBNSHpcbiIsIHN0cm1oeiAoYnVmLCBidXNmcmVxKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGNoZWNrZmxhc2ggKHZvaWQpCi17Ci0JcHJpbnRmICgiY2hlY2tmbGFzaFxuIik7Ci0JZmxhc2hfaW5pdCAoKTsKLQlyZXR1cm4gMDsKLX0KLQotcGh5c19zaXplX3QgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQotewotCXJldHVybiBDT05GSUdfU1lTX1JBTV9TSVpFOwotfQotCi0KLXZvaWQgZ2V0X3RvZCAodm9pZCkKLXsKLQlpbnQgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQ7Ci0KLQltNDhfdG9kX2dldCAoJnllYXIsICZtb250aCwgJmRheSwgJmhvdXIsICZtaW51dGUsICZzZWNvbmQpOwotCi0JcHJpbnRmICgiICBDdXJyZW50IGRhdGUvdGltZTogJWQvJWQvJWQgJWQ6JWQ6JWQgXG4iLAotCQltb250aCwgZGF5LCB5ZWFyLCBob3VyLCBtaW51dGUsIHNlY29uZCk7Ci0KLX0KLQotLyoKLSAqIEVQSUMsIFBDSSwgYW5kIEkvTyBkZXZpY2VzLgotICogSW5pdGlhbGl6ZSBNb3Vzc2UgUGxhdGZvcm0sIHByb2JlIGZvciBQQ0kgZGV2aWNlcywKLSAqIFF1ZXJ5IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpZiBub3Qgc2V0LgotICovCi1pbnQgbWlzY19pbml0X2YgKHZvaWQpCi17Ci0JbTQ4X3RvZF9pbml0ICgpOwkvKiBJbml0IFNHUyBNNDhUNTlZIFRPRC9OVlJBTSAqLwotCXByaW50ZiAoIlJUQzogICBNNDhUNTg5IFRPRC9OVlJBTSAoJWQpIGJ5dGVzXG4iLCBUT0RfTlZSQU1fU0laRSk7Ci0JZ2V0X3RvZCAoKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGJvYXJkX2V0aF9pbml0KGJkX3QgKmJpcykKLXsKLQlyZXR1cm4gcGNpX2V0aF9pbml0KGJpcyk7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9tb3Vzc2UvbW91c3NlLmggYi9ib2FyZC9tb3Vzc2UvbW91c3NlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlOGEwNTQuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbW91c3NlL21vdXNzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qCi0gKiBNT1VTU0UvTVBDODI0MCBCb2FyZCBkZWZpbml0aW9ucy4KLSAqIEZvciBtb3JlIGluZm8sIHNlZSBodHRwOi8vd3d3LnZvb2hhLmNvbS8KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBKYW1lcyBEb3VnaGVydHkgKGpmZEBjcy5zdGFuZm9yZC5lZHUpCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2lmbmRlZiBfX01PVVNTRV9ICi0jZGVmaW5lIF9fTU9VU1NFX0gKLQotLyogU3lzdGVtIGFkZHJlc3NlcyAqLwotCi0jZGVmaW5lIFBDSV9TUEVDSUFMX0JBU0UJMHhmZTAwMDAwMAotI2RlZmluZSBQQ0lfU1BFQ0lBTF9TSVpFCTB4MDEwMDAwMDAKLQotLyogUE9SVFggRGV2aWNlIEFkZHJlc3NlcyBmb3IgTW91c3NlICovCi0KLSNkZWZpbmUgUE9SVFhfREVWX0JBU0UJCTB4ZmYwMDAwMDAKLSNkZWZpbmUgUE9SVFhfREVWX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBFTkVUX0RFVl9CQVNFCQkweDgwMDAwMDAwCi0KLSNkZWZpbmUgUExEX1JFR19CQVNFCQkoUE9SVFhfREVWX0JBU0UgfCAweGUwOTAwMCkKLSNkZWZpbmUgUExEX1JFRyhvZmYpCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIFwKLQkJCQkgKFBMRF9SRUdfQkFTRSArIChvZmYpKSkKLQotI2RlZmluZSBQTERfUkVWSURfQjEJCTB4N2YKLSNkZWZpbmUgUExEX1JFVklEX0IyCQkweDAxCi0KLS8qIE1QTEQgKi8KLSNkZWZpbmUgU1lTX0hBUkRfUkVTRVQoKQl7IGZvciAoOzspIFBMRF9SRUcoMCkgPSAwOyB9IC8qIGNsciAweDgwIGJpdCAqLwotI2RlZmluZSBTWVNfUkVWSURfR0VUKCkJCSgoaW50KSBQTERfUkVHKDApICYgMHg3ZikKLSNkZWZpbmUgU1lTX0xFRF9PRkYoKQkJKFBMRF9SRUcoMSkgfD0gMHg4MCkKLSNkZWZpbmUgU1lTX0xFRF9PTigpCQkoUExEX1JFRygxKSAmPSB+MHg4MCkKLSNkZWZpbmUgU1lTX1dBVENIRE9HX0lSUTMoKQkoUExEX1JFRygyKSB8PSAweDgwKQotI2RlZmluZSBTWVNfV0FUQ0hET0dfUkVTRVQoKQkoUExEX1JFRygyKSAmPSB+MHg4MCkKLSNkZWZpbmUgU1lTX1RPRF9QUk9URUNUKCkJKFBMRF9SRUcoMykgfD0gMHg4MCkKLSNkZWZpbmUgU1lTX1RPRF9VTlBST1RFQ1QoKQkoUExEX1JFRygzKSAmPSB+MHg4MCkKLQotLyogU0dTIE00OFQ1OVkgKi8KLSNkZWZpbmUgVE9EX0JBU0UJCShQT1JUWF9ERVZfQkFTRSB8IDB4ZTBhMDAwKQotI2RlZmluZSBUT0RfUkVHX0JBU0UJCShUT0RfQkFTRSB8IDB4MWZmMCkKLSNkZWZpbmUgVE9EX05WUkFNX0JBU0UJCVRPRF9CQVNFCi0jZGVmaW5lIFRPRF9OVlJBTV9TSVpFCQkweDFmZjAKLSNkZWZpbmUgVE9EX05WUkFNX0xJTUlUCQkoVE9EX05WUkFNX0JBU0UgKyBUT0RfTlZSQU1fU0laRSkKLQotLyogTlMxNjU1MiBTSU8gKi8KLSNkZWZpbmUgU0VSSUFMX0JBU0UoX3gpCQkoUE9SVFhfREVWX0JBU0UgfCAweGUwODAwMCB8ICgoX3gpID8gMCA6IDB4ODApKQotI2RlZmluZSBOX1NJT19DSEFOTkVMUwkJMgotI2RlZmluZSBOX0NPTV9QT1JUUwkJTl9TSU9fQ0hBTk5FTFMKLQotLyoKLSAqIE9uLWJvYXJkIERlYzIxMTQzIFBDSSBFdGhlcm5ldAotICogTm90ZTogVGhlIFBDSSBNQkFSIGNob3NlbiBoZXJlIHdhcyB1c2VkIGZyb20gTVBDODI0MFVNIHdoaWNoIHN0YXRlcwotICogdGhhdCBQQ0kgbWVtb3J5IGlzIGF0OiAweDgwMDAwIC0gMHhGREZGRkZGRiwgaWYgQU1CT1JbQ1BVX0ZEX0FMSUFTXQotICogaXMgc2V0LCB0aGVuIFBDSSBtZW1vcnkgbWFwcyAxLTEgd2l0aCB0aGlzIGFkZHJlc3MgcmFuZ2UgaW4gdGhlCi0gKiBjb3JyZWN0IGJ5dGUgb3JkZXIuCi0gKi8KLSNkZWZpbmUgUENJX0VORVRfSU9BRERSCQkweDgwMDAwMDAwCi0jZGVmaW5lIFBDSV9FTkVUX01FTUFERFIJMHg4MDAwMDAwMAotCi0vKgotICogRmxhc2ggTWVtb3J5IExheW91dAotICoKLSAqICAgIDIgTUIgRmxhc2ggQmFuayAwIHJ1bnMgaW4gOC1iaXQgbW9kZS4gIEluIEZsYXNoIEJhbmsgMCwgdGhlIDMyIGtCCi0gKiAgICBzZWN0b3IgU0EzIGlzIG9ic2N1cmVkIGJ5IHRoZSAzMiBrQiBzZXJpYWwvVE9EIGFjY2VzcyBzcGFjZSwgYW5kCi0gKiAgICB0aGUgNjQga0Igc2VjdG9ycyBTQTE5LVNBMjYgYXJlIG9ic2N1cmVkIGJ5IHRoZSA1MTIga0IgUExDQwotICogICAgY29udGFpbmluZyB0aGUgZml4ZWQgYm9vdCBST00uICAoSWYgdGhlIDUxMiBrQiBQTENDIGlzCi0gKiAgICBkZWNvbmZpZ3VyZWQgYnkganVtcGVyLCB0aGlzIHdpbmRvdyB0byBGbGFzaCBCYW5rIDAgYmVjb21lcwotICogICAgdmlzaWJsZSwgYnV0IGl0IHN0aWxsIGNvbnRhaW5zIHRoZSBmaXhlZCBib290IGNvZGUgYW5kIHNob3VsZCBiZQotICogICAgY29uc2lkZXJlZCByZWFkLW9ubHkpLiAgRmxhc2ggQmFuayAwIHNlY3RvcnMgU0EwICgxNiBrQiksIFNBMSAoOAotICogICAga0IpLCBhbmQgU0EyICg4IGtCKSBhcmUgY3VycmVudGx5IHVudXNlZC4KLSAqCi0gKiAgICAyIE1CIEZsYXNoIEJhbmsgMSBydW5zIGluIDE2LWJpdCBtb2RlLiAgRmxhc2ggQmFuayAxIGlzIGZ1bGx5Ci0gKiAgICB1c2FibGUsIGJ1dCBpdCdzIGEgMTYtYml0IHdpZGUgZGV2aWNlIG9uIGEgNjQtYml0IGJ1cy4gIFRoZXJlZm9yZQotICogICAgMTYtYml0IHdvcmRzIG9ubHkgZXhpc3QgYXQgYWRkcmVzc2VzIHRoYXQgYXJlIG11bHRpcGxlcyBvZiA4LiAgQWxsCi0gKiAgICBQUk9NIGRhdGEgYW5kIGNvbnRyb2wgYWRkcmVzc2VzIG11c3QgYmUgbXVsdGlwbGllZCBieSA4LgotICoKLSAqICAgIFNlZSBmbGFzaE1hcC5jIGZvciBkZXNjcmlwdGlvbiBvZiBmbGFzaCBmaWxlc3lzdGVtIGxheW91dC4KLSAqLwotCi0vKgotICogRkxBU0ggbWVtb3J5IGFkZHJlc3Mgc3BhY2U6IDgtYml0IHdpZGUgRkxBU0ggbWVtb3J5IHNwYWNlcy4KLSAqLwotI2RlZmluZSBGTEFTSDBfU0VHMF9TVEFSVAkweGZmZTAwMDAwCSAvKiBCYWJ5IDMyS2Igc2VnbWVudCAqLwotI2RlZmluZSBGTEFTSDBfU0VHMF9FTkQJCTB4ZmZlMDdmZmYJIC8qIDE2IGtCICsgOCBrQiArIDgga0IgKi8KLSNkZWZpbmUgRkxBU0gwX1NFRzBfU0laRQkweDAwMDA4MDAwCSAvKiAgIChzZWN0b3JzIFNBMC1TQTIpICovCi0KLSNkZWZpbmUgRkxBU0gwX1NFRzFfU1RBUlQJMHhmZmUxMDAwMAkgLyogMU1CIC0gNjRLYiBGTEFTSDAgc2VnICovCi0jZGVmaW5lIEZMQVNIMF9TRUcxX0VORAkJMHhmZmVmZmZmZgkgLyogOTYwIGtCICovCi0jZGVmaW5lIEZMQVNIMF9TRUcxX1NJWkUJMHgwMDBmMDAwMAotCi0jZGVmaW5lIEZMQVNIMF9TRUcyX1NUQVJUCTB4ZmZmMDAwMDAJIC8qIEJvb3QgTG9hZGVyIHN0b3JlZCBoZXJlICovCi0jZGVmaW5lIEZMQVNIMF9TRUcyX0VORAkJMHhmZmY3ZmZmZgkgLyogNTEyIGtCIEZMQVNIMC9QTENDIHNlZyAqLwotI2RlZmluZSBGTEFTSDBfU0VHMl9TSVpFCTB4MDAwODAwMDAKLQotI2RlZmluZSBGTEFTSDBfU0VHM19TVEFSVAkweGZmZjgwMDAwCSAvKiA1MTIga0IgRkxBU0gwIHNlZyAqLwotI2RlZmluZSBGTEFTSDBfU0VHM19FTkQJCTB4ZmZmZmZmZmYKLSNkZWZpbmUgRkxBU0gwX1NFRzNfU0laRQkweDAwMDgwMDAwCi0KLS8qIFdoZXJlIEthaGx1YSBzdGFydHMgKi8KLSNkZWZpbmUgRkxBU0hfUkVTRVRfVkVDVAkweGZmZjAwMTAwCi0KLS8qCi0gKiBDSFJQIC8gUFJFUCAoTUFQIEEvQikgZGVmaW5pdGlvbnMuCi0gKi8KLQotI2RlZmluZSBQUkVQX1JFR19BRERSCQkweDgwMDAwY2Y4CS8qIE1QQzEwNyBDb25maWcsIE1hcCBBICovCi0jZGVmaW5lIFBSRVBfUkVHX0RBVEEJCTB4ODAwMDBjZmMJLyogTVBDMTA3IENvbmZpZywgTWFwIEEgKi8KLS8qIE1QQzEwNyAoTVBDODI0MCBpbnRlcm5hbCBFVU1CQkFSIG1hcHBlZCkgKi8KLSNkZWZpbmUgQ0hSUF9SRUdfQUREUgkJMHhmZWMwMDAwMAkvKiBNUEMxMDYgQ29uZmlnLCBNYXAgQiAqLwotI2RlZmluZSBDSFJQX1JFR19EQVRBCQkweGZlZTAwMDAwCS8qIE1QQzEwNiBDb25maWcsIE1hcCBCICovCi0KLS8qCi0gKiBNb3Vzc2UgUENJIElEU0VMIEFzc2lnbm1lbnRzIChEZXZpY2UgTnVtYmVyKQotICovCi0jZGVmaW5lIE1PVVNTRV9JRFNFTF9FTkVUCTEzCQkvKiBPbi1ib2FyZCAyMTE0MyBFdGhlcm5ldCAqLwotI2RlZmluZSBNT1VTU0VfSURTRUxfTFBDSQkxNAkJLyogT24tYm9hcmQgUENJIHNsb3QgKi8KLSNkZWZpbmUgTU9VU1NFX0lEU0VMXzgyMzcxCTE1CQkvKiBUaGF0IG90aGVyIHRoaW5nICovCi0jZGVmaW5lIE1PVVNTRV9JRFNFTF9DUENJMgkzMQkJLyogQ1BDSSBzbG90IDIgKi8KLSNkZWZpbmUgTU9VU1NFX0lEU0VMX0NQQ0kzCTMwCQkvKiBDUENJIHNsb3QgMyAqLwotI2RlZmluZSBNT1VTU0VfSURTRUxfQ1BDSTQJMjkJCS8qIENQQ0kgc2xvdCA0ICovCi0jZGVmaW5lIE1PVVNTRV9JRFNFTF9DUENJNQkyOAkJLyogQ1BDSSBzbG90IDUgKi8KLSNkZWZpbmUgTU9VU1NFX0lEU0VMX0NQQ0k2CTI3CQkvKiBDUENJIHNsb3QgNiAqLwotCi0vKgotICogTW91c3NlIEludGVycnVwdCBNYXBwaW5nOgotICoKLSAqCUlSUTEJRW5ldCAoaW50QXxpbnRCfGludEN8aW50RCkKLSAqCUlSUTIJQ1BDSSBpbnRBIChTZWUgYmVsb3cpCi0gKglJUlEzCUxvY2FsIFBDSSBzbG90IGludEF8aW50QnxpbnRDfGludEQKLSAqCUlSUTQJQ09NMSBTZXJpYWwgcG9ydCAoQWN0dWFsbHkgaGlnaGVyIGFkZHJlc3NlZCBwb3J0IG9uIGR1YXJ0KQotICoKLSAqIFBDSSBJbnRlcnJ1cHQgTWFwcGluZyBpbiBDUENJIGNoYXNzaXM6Ci0gKgotICoJCSAgIHwJICAgICAgIENQQ0kgU2xvdAotICoJCSAgIHwgMSAoQ1BVKQkyCTMJNAk1CTYKLSAqCS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKLSAqCSAgaW50QQkgICB8CVgJCVgJCVgKLSAqCSAgaW50QgkgICB8CQlYCQlYCQlYCi0gKgkgIGludEMJICAgfAlYCQlYCQlYCi0gKgkgIGludEQJICAgfAkJWAkJWAkJWAotICovCi0KLQotI2RlZmluZSBFUElDX1ZFQ1RPUl9FWFQwCTAKLSNkZWZpbmUgRVBJQ19WRUNUT1JfRVhUMQkxCi0jZGVmaW5lIEVQSUNfVkVDVE9SX0VYVDIJMgotI2RlZmluZSBFUElDX1ZFQ1RPUl9FWFQzCTMKLSNkZWZpbmUgRVBJQ19WRUNUT1JfRVhUNAk0Ci0jZGVmaW5lIEVQSUNfVkVDVE9SX1RNMAkJMTYKLSNkZWZpbmUgRVBJQ19WRUNUT1JfVE0xCQkxNwotI2RlZmluZSBFUElDX1ZFQ1RPUl9UTTIJCTE4Ci0jZGVmaW5lIEVQSUNfVkVDVE9SX1RNMwkJMTkKLSNkZWZpbmUgRVBJQ19WRUNUT1JfSTJDCQkyMAotI2RlZmluZSBFUElDX1ZFQ1RPUl9ETUEwCTIxCi0jZGVmaW5lIEVQSUNfVkVDVE9SX0RNQTEJMjIKLSNkZWZpbmUgRVBJQ19WRUNUT1JfSTJPCQkyMwotCi0KLSNkZWZpbmUgSU5UX1ZFQ19JUlEwCQkwCi0jZGVmaW5lIElOVF9OVU1fSVJRMAkJSU5UX1ZFQ19JUlEwCi0jZGVmaW5lIE1PVVNTRV9JUlFfRU5FVAkJRVBJQ19WRUNUT1JfRVhUMQkvKiBIYXJkd2lyZWQgKi8KLSNkZWZpbmUgTU9VU1NFX0lSUV9DUENJCQlFUElDX1ZFQ1RPUl9FWFQyCS8qIEhhcmR3aXJlZCAqLwotI2RlZmluZSBNT1VTU0VfSVJRX0xQQ0kJCUVQSUNfVkVDVE9SX0VYVDMJLyogSGFyZHdpcmVkICovCi0jZGVmaW5lIE1PVVNTRV9JUlFfRFVBUlQJRVBJQ19WRUNUT1JfRVhUNAkvKiBIYXJkd2lyZWQgKi8KLQotLyogT25ib2FyZCBERUMgMjExNDMgRXRoZXJuZXQgKi8KLSNkZWZpbmUgUENJX0VORVRfTUVNQUREUgkweDgwMDAwMDAwCi0jZGVmaW5lIFBDSV9FTkVUX0lPQUREUgkJMHg4MDAwMDAwMAotCi0vKiBTb21lIG90aGVyIFBDSSBkZXZpY2UgKi8KLSNkZWZpbmUgUENJX1NMT1RfTUVNQUREUgkweDgxMDAwMDAwCi0jZGVmaW5lIFBDSV9TTE9UX0lPQUREUgkJMHg4MTAwMDAwMAotCi0vKiBQcm9taXNlIEFUQTY2IFBDSSBEZXZpY2UgKEFUQSBjb250cm9sbGVyKSAqLwotI2RlZmluZSBQUk9NSVNFX01CQVIwICAweGEwMDAwMDAwCi0jZGVmaW5lIFBST01JU0VfTUJBUjEgIChQUk9NSVNFX01CQVIwICsgMHgxMDAwKQotI2RlZmluZSBQUk9NSVNFX01CQVIyICAoUFJPTUlTRV9NQkFSMCArIDB4MjAwMCkKLSNkZWZpbmUgUFJPTUlTRV9NQkFSMyAgKFBST01JU0VfTUJBUjAgKyAweDMwMDApCi0jZGVmaW5lIFBST01JU0VfTUJBUjQgIChQUk9NSVNFX01CQVIwICsgMHg0MDAwKQotI2RlZmluZSBQUk9NSVNFX01CQVI1ICAoUFJPTUlTRV9NQkFSMCArIDB4NTAwMCkKLQotLyogQVRBLzY2IENvbnRyb2xsZXIgb2Zmc2V0cyAqLwotI2RlZmluZSBDT05GSUdfU1lTX0FUQV9CQVNFX0FERFIgICAgIFBST01JU0VfTUJBUjAKLSNkZWZpbmUgQ09ORklHX1NZU19JREVfTUFYQlVTCSAgICAgICAyIC8qIGlkZTAvaWRlMSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lERV9NQVhERVZJQ0UgICAgICAyIC8qIDIgZHJpdmVzIHBlciBjb250cm9sbGVyICovCi0jZGVmaW5lIENPTkZJR19TWVNfQVRBX0lERTBfT0ZGU0VUICAgIDAKLSNkZWZpbmUgQ09ORklHX1NZU19BVEFfSURFMV9PRkZTRVQgICAgMHgzMDAwCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIGFjY2Vzc2luZyBJREUgY29udHJvbGxlciByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0FUQV9EQVRBX09GRlNFVCAgICAwCi0jZGVmaW5lIENPTkZJR19TWVNfQVRBX1JFR19PRkZTRVQgICAgIDAKLSNkZWZpbmUgQ09ORklHX1NZU19BVEFfQUxUX09GRlNFVCAgICAoMHgxMDAwKQotCi0vKgotICogVGhlIGNvbnN0YW50cyBST01fVEVYVF9BRFJTLCBST01fU0laRSwgUkFNX0hJR0hfQURSUywgYW5kIFJBTV9MT1dfQURSUwotICogYXJlIGRlZmluZWQgaW4gY29uZmlnLmggYW5kIE1ha2VmaWxlLgotICogQWxsIGRlZmluaXRpb25zIGZvciB0aGVzZSBjb25zdGFudHMgbXVzdCBiZSBpZGVudGljYWwuCi0gKi8KLSNkZWZpbmUgUk9NX0JBU0VfQURSUwkJMHhmZmYwMDAwMAkvKiBiYXNlIGFkZHJlc3Mgb2YgUk9NICovCi0jZGVmaW5lIFJPTV9URVhUX0FEUlMJCShST01fQkFTRV9BRFJTKzB4MDEwMCkgLyogd2l0aCBQQyAmIFNQICovCi0jZGVmaW5lIFJPTV9XQVJNX0FEUlMJCShST01fVEVYVF9BRFJTKzB4MDAwNCkgLyogd2FybSByZWJvb3QgZW50cnkgKi8KLSNkZWZpbmUgUk9NX1NJWkUJCTB4MDAwODAwMDAJLyogNTEyS0IgUk9NIHNwYWNlICovCi0jZGVmaW5lIFJBTV9MT1dfQURSUwkJMHgwMDAxMDAwMCAgIC8qIFJBTSBhZGRyZXNzIGZvciB2eFdvcmtzICovCi0jZGVmaW5lIFJBTV9ISUdIX0FEUlMJCTB4MDBjMDAwMDAgICAvKiBSQU0gYWRkcmVzcyBmb3IgYm9vdHJvbSAqLwotCi0vKgotICogIE5WUkFNIGNvbmZpZ3VyYXRpb24KLSAqICBOVlJBTSBpcyBpbXBsZW1lbnRlZCB2aWEgdGhlIFNHUyBUaG9tc29uIE00OFQ1OVkKLSAqICA2NEtiaXQgKDhLYng4KSBUaW1la2VlcGVyIFNSQU0uCi0gKiAgVGhpcyA4S0IgTlZSQU0gYWxzbyBoYXMgYSBUT0QuIFNlZSBtNDh0NTl5LntoLGN9IGZvciBtb3JlIGluZm9ybWF0aW9uLgotICovCi0KLSNkZWZpbmUgTlZfUkFNX0FEUlMJCVRPRF9OVlJBTV9CQVNFCi0jZGVmaW5lIE5WX1JBTV9JTlRSVkwJCTEKLSNkZWZpbmUgTlZfUkFNX1dSX0VOQkwJCVNZU19UT0RfVU5QUk9URUNUKCkKLSNkZWZpbmUgTlZfUkFNX1dSX0RTQkwJCVNZU19UT0RfUFJPVEVDVCgpCi0KLSNkZWZpbmUgTlZfT0ZGX0JPT1QwCQkweDAwMDAJLyogQm9vdCBzdHJpbmcgMCAoMjU2YikgKi8KLSNkZWZpbmUgTlZfT0ZGX0JPT1QxCQkweDAxMDAJLyogQm9vdCBzdHJpbmcgMSAoMjU2YikgKi8KLSNkZWZpbmUgTlZfT0ZGX0JPT1QyCQkweDAyMDAJLyogQm9vdCBzdHJpbmcgMiAoMjU2YikqLwotI2RlZmluZSBOVl9PRkZfTUFDQUREUgkJMHgwNDAwCS8qIDIxMTQzIE1BQyBhZGRyZXNzICg2YikgKi8KLSNkZWZpbmUgTlZfT0ZGX0FDVElWRUJPT1QJMHgwNDA2CS8qIEFjdGl2ZSBib290IHN0cmluZywgMCB0byAyICgxYikgKi8KLSNkZWZpbmUgTlZfT0ZGX1VOVVNFRDEJCTB4MDQwNwkvKiBVbnVzZWQgKDFiKSAqLwotI2RlZmluZSBOVl9PRkZfQklOREZJWAkJMHgwNDA4CS8qIFNlZSBzeXNMaWIuYzpzeXNCaW5kRml4KCkgKDFiKSAqLwotI2RlZmluZSBOVl9PRkZfVU5VU0VEMgkJMHgwNDA5CS8qIFVudXNlZCAoN2IpICovCi0jZGVmaW5lIE5WX09GRl9USU1FWk9ORQkJMHgwNDEwCS8qIFRJTUVaT05FIGVudiB2YXIgKDY0YikgKi8KLSNkZWZpbmUgTlZfT0ZGX1ZYV09SS1NfRU5ECTB4MDdGRgkvKiAyMDQ3IFZ4V29ya3MgVG90YWwgKi8KLSNkZWZpbmUgTlZfT0ZGX1VfQk9PVAkJMHgwODAwCS8qIDIwNDggVS1Cb290IGJvb3QtbG9hZGVyICovCi0jZGVmaW5lIE5WX09GRl9VX0JPT1RfQUREUgkoVE9EX0JBU0UgKyBOVl9PRkZfVV9CT09UKSAvKiBzeXNhZGRyKi8KLSNkZWZpbmUgTlZfVV9CT09UX0VOVl9TSVpFCTIwNDgJLyogMksgLSBVLUJvb3QgVG90YWwgKi8KLSNkZWZpbmUgTlZfT0ZGX19uZXh0X2ZyZWUJKE5WX1VfQk9PVF9FTlZTSVpFICsxKQotI2RlZmluZSBOVl9SQU1fU0laRQkJODE3NgkvKiBOVlJBTSBFbmQgKi8KLQotI2VuZGlmIC8qIF9fTU9VU1NFX0ggKi8KZGlmZiAtLWdpdCBhL2JvYXJkL21vdXNzZS9wY2kuYyBiL2JvYXJkL21vdXNzZS9wY2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY0MTQ0Yi4uMDAwMDAwMAotLS0gYS9ib2FyZC9tb3Vzc2UvcGNpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyoKLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBKYW1lcyBEb3VnaGVydHkgKGpmZEBjcy5zdGFuZm9yZC5lZHUpCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotLyoKLSAqIFBDSSBDb25maWd1cmF0aW9uIHNwYWNlIGFjY2VzcyBzdXBwb3J0IGZvciBNUEM4MjR4L01QQzEwNyBQQ0kgQnJpZGdlCi0gKi8KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxtcGM4MjR4Lmg+Ci0jaW5jbHVkZSA8cGNpLmg+Ci0KLSNpbmNsdWRlICJtb3Vzc2UuaCIKLQotLyoKLSAqIFByb21pc2UgQVRBLzY2IHN1cHBvcnQuCi0gKi8KLSNkZWZpbmUgWEZFUl9QSU9fNAkweDBDCS8qIDAwMDB8MTEwMCAqLwotI2RlZmluZSBYRkVSX1BJT18zCTB4MEIJLyogMDAwMHwxMDExICovCi0jZGVmaW5lIFhGRVJfUElPXzIJMHgwQQkvKiAwMDAwfDEwMTAgKi8KLSNkZWZpbmUgWEZFUl9QSU9fMQkweDA5CS8qIDAwMDB8MTAwMSAqLwotI2RlZmluZSBYRkVSX1BJT18wCTB4MDgJLyogMDAwMHwxMDAwICovCi0jZGVmaW5lIFhGRVJfUElPX1NMT1cJMHgwMAkvKiAwMDAwfDAwMDAgKi8KLQotLyogUHJvbWlzZSBSZWdzICovCi0jZGVmaW5lIFJFR19BCQkweDAxCi0jZGVmaW5lIFJFR19CCQkweDAyCi0jZGVmaW5lIFJFR19DCQkweDA0Ci0jZGVmaW5lIFJFR19ECQkweDA4Ci0KLXZvaWQKLXBkYzIwMnh4X2RlY29kZV9yZWdpc3RlcnMgKHVuc2lnbmVkIGNoYXIgcmVnaXN0ZXJzLCB1bnNpZ25lZCBjaGFyIHZhbHVlKQotewotCXVuc2lnbmVkIGNoYXIJYml0ID0gMCwgYml0MSA9IDAsIGJpdDIgPSAwOwotCXN3aXRjaChyZWdpc3RlcnMpIHsKLQkJY2FzZSBSRUdfQToKLQkJCWJpdDIgPSAwOwotCQkJcHJpbnRmKCIgIEEgUmVnaXN0ZXIgIik7Ci0JCQlpZiAodmFsdWUgJiAweDgwKSBwcmludGYoIlNZTkNfSU4gIik7Ci0JCQlpZiAodmFsdWUgJiAweDQwKSBwcmludGYoIkVSUkRZX0VOICIpOwotCQkJaWYgKHZhbHVlICYgMHgyMCkgcHJpbnRmKCJJT1JEWV9FTiAiKTsKLQkJCWlmICh2YWx1ZSAmIDB4MTApIHByaW50ZigiUFJFRkVUQ0hfRU4gIik7Ci0JCQlpZiAodmFsdWUgJiAweDA4KSB7IHByaW50ZigiUEEzICIpO2JpdDIgfD0gMHgwODsgfQotCQkJaWYgKHZhbHVlICYgMHgwNCkgeyBwcmludGYoIlBBMiAiKTtiaXQyIHw9IDB4MDQ7IH0KLQkJCWlmICh2YWx1ZSAmIDB4MDIpIHsgcHJpbnRmKCJQQTEgIik7Yml0MiB8PSAweDAyOyB9Ci0JCQlpZiAodmFsdWUgJiAweDAxKSB7IHByaW50ZigiUEEwICIpO2JpdDIgfD0gMHgwMTsgfQotCQkJcHJpbnRmKCJQSU8oQSkgPSAlZCAiLCBiaXQyKTsKLQkJCWJyZWFrOwotCQljYXNlIFJFR19COgotCQkJYml0MSA9IDA7Yml0MiA9IDA7Ci0JCQlwcmludGYoIiAgQiBSZWdpc3RlciAiKTsKLQkJCWlmICh2YWx1ZSAmIDB4ODApIHsgcHJpbnRmKCJNQjIgIik7Yml0MSB8PSAweDgwOyB9Ci0JCQlpZiAodmFsdWUgJiAweDQwKSB7IHByaW50ZigiTUIxICIpO2JpdDEgfD0gMHg0MDsgfQotCQkJaWYgKHZhbHVlICYgMHgyMCkgeyBwcmludGYoIk1CMCAiKTtiaXQxIHw9IDB4MjA7IH0KLQkJCXByaW50ZigiRE1BKEIpID0gJWQgIiwgYml0MSA+PiA1KTsKLQkJCWlmICh2YWx1ZSAmIDB4MTApIHByaW50ZigiUElPX0ZPUkNFRC9QQjQgIik7Ci0JCQlpZiAodmFsdWUgJiAweDA4KSB7IHByaW50ZigiUEIzICIpO2JpdDIgfD0gMHgwODsgfQotCQkJaWYgKHZhbHVlICYgMHgwNCkgeyBwcmludGYoIlBCMiAiKTtiaXQyIHw9IDB4MDQ7IH0KLQkJCWlmICh2YWx1ZSAmIDB4MDIpIHsgcHJpbnRmKCJQQjEgIik7Yml0MiB8PSAweDAyOyB9Ci0JCQlpZiAodmFsdWUgJiAweDAxKSB7IHByaW50ZigiUEIwICIpO2JpdDIgfD0gMHgwMTsgfQotCQkJcHJpbnRmKCJQSU8oQikgPSAlZCAiLCBiaXQyKTsKLQkJCWJyZWFrOwotCQljYXNlIFJFR19DOgotCQkJYml0MiA9IDA7Ci0JCQlwcmludGYoIiAgQyBSZWdpc3RlciAiKTsKLQkJCWlmICh2YWx1ZSAmIDB4ODApIHByaW50ZigiRE1BUlFwICIpOwotCQkJaWYgKHZhbHVlICYgMHg0MCkgcHJpbnRmKCJJT1JEWXAgIik7Ci0JCQlpZiAodmFsdWUgJiAweDIwKSBwcmludGYoIkRNQVJfRU4gIik7Ci0JCQlpZiAodmFsdWUgJiAweDEwKSBwcmludGYoIkRNQVdfRU4gIik7Ci0KLQkJCWlmICh2YWx1ZSAmIDB4MDgpIHsgcHJpbnRmKCJNQzMgIik7Yml0MiB8PSAweDA4OyB9Ci0JCQlpZiAodmFsdWUgJiAweDA0KSB7IHByaW50ZigiTUMyICIpO2JpdDIgfD0gMHgwNDsgfQotCQkJaWYgKHZhbHVlICYgMHgwMikgeyBwcmludGYoIk1DMSAiKTtiaXQyIHw9IDB4MDI7IH0KLQkJCWlmICh2YWx1ZSAmIDB4MDEpIHsgcHJpbnRmKCJNQzAgIik7Yml0MiB8PSAweDAxOyB9Ci0JCQlwcmludGYoIkRNQShDKSA9ICVkICIsIGJpdDIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVHX0Q6Ci0JCQlwcmludGYoIiAgRCBSZWdpc3RlciAiKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuOwotCX0KLQlwcmludGYoIlxuICAgICAgICAlcyAiLCAocmVnaXN0ZXJzICYgUkVHX0QpID8gIkRQIiA6Ci0JCQkJKHJlZ2lzdGVycyAmIFJFR19DKSA/ICJDUCIgOgotCQkJCShyZWdpc3RlcnMgJiBSRUdfQikgPyAiQlAiIDoKLQkJCQkocmVnaXN0ZXJzICYgUkVHX0EpID8gIkFQIiA6ICJFUlJPUiIpOwotCWZvciAoYml0PTEyODtiaXQ+MDtiaXQvPTIpCi0JCXByaW50ZigiJXMiLCAodmFsdWUgJiBiaXQpID8gIjEiIDogIjAiKTsKLQlwcmludGYoIlxuIik7Ci19Ci0KLS8qCi0gKiBQcm9taXNlIEFUQS82NiBTdXBwb3J0OiBjb25maWd1cmUgUHJvbWlzZSBBVEE2NiBjYXJkIGluIHNwZWNpZmllZCBtb2RlLgotICovCi1pbnQKLXBkYzIwMnh4X3R1bmVfY2hpcHNldCAocGNpX2Rldl90IGRldiwgaW50IGRyaXZlLCB1bnNpZ25lZCBjaGFyIHNwZWVkKQotewotCXVuc2lnbmVkIHNob3J0CQlkcml2ZV9jb25mOwotCWludAkJCWVyciA9IDA7Ci0JdW5zaWduZWQgY2hhcgkJCWRyaXZlX3BjaSwgQVAsIEJQLCBDUCwgRFA7Ci0JdW5zaWduZWQgY2hhcgkJCVRBID0gMCwgVEIgPSAwOwotCi0Jc3dpdGNoIChkcml2ZSkgewotCQljYXNlIDA6IGRyaXZlX3BjaSA9IDB4NjA7IGJyZWFrOwotCQljYXNlIDE6IGRyaXZlX3BjaSA9IDB4NjQ7IGJyZWFrOwotCQljYXNlIDI6IGRyaXZlX3BjaSA9IDB4Njg7IGJyZWFrOwotCQljYXNlIDM6IGRyaXZlX3BjaSA9IDB4NmM7IGJyZWFrOwotCQlkZWZhdWx0OiByZXR1cm4gLTE7Ci0JfQotCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBkcml2ZV9wY2ksICZkcml2ZV9jb25mKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpLCAmQVApOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSl8MHgwMSwgJkJQKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpfDB4MDIsICZDUCk7Ci0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAoZHJpdmVfcGNpKXwweDAzLCAmRFApOwotCi0JaWYgKChBUCAmIDB4MEYpIHx8IChCUCAmIDB4MDcpKSB7Ci0JICAvKiBjbGVhciBQSU8gbW9kZXMgb2YgbG93ZXIgODQyMSBiaXRzIG9mIEEgUmVnaXN0ZXIgKi8KLQkgIHBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpLCBBUCAmIH4weDBGKTsKLQkgIHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSksICZBUCk7Ci0KLQkgIC8qIGNsZWFyIFBJTyBtb2RlcyBvZiBsb3dlciA0MjEgYml0cyBvZiBCIFJlZ2lzdGVyICovCi0JICBwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAoZHJpdmVfcGNpKXwweDAxLCBCUCAmIH4weDA3KTsKLQkgIHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSl8MHgwMSwgJkJQKTsKLQotCSAgcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAoZHJpdmVfcGNpKSwgJkFQKTsKLQkgIHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSl8MHgwMSwgJkJQKTsKLQl9Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpLCAmQVApOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSl8MHgwMSwgJkJQKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpfDB4MDIsICZDUCk7Ci0KLQlzd2l0Y2goc3BlZWQpIHsKLQkJY2FzZSBYRkVSX1BJT180OglUQSA9IDB4MDE7IFRCID0gMHgwNDsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9QSU9fMzoJVEEgPSAweDAyOyBUQiA9IDB4MDY7IGJyZWFrOwotCQljYXNlIFhGRVJfUElPXzI6CVRBID0gMHgwMzsgVEIgPSAweDA4OyBicmVhazsKLQkJY2FzZSBYRkVSX1BJT18xOglUQSA9IDB4MDU7IFRCID0gMHgwQzsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9QSU9fMDoKLQkJZGVmYXVsdDoJCVRBID0gMHgwOTsgVEIgPSAweDEzOyBicmVhazsKLQl9Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAoZHJpdmVfcGNpKSwgQVB8VEEpOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpfDB4MDEsIEJQfFRCKTsKLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSksICZBUCk7Ci0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAoZHJpdmVfcGNpKXwweDAxLCAmQlApOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSl8MHgwMiwgJkNQKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpfDB4MDMsICZEUCk7Ci0KLQotI2lmZGVmIFBEQzIwMlhYX0RFQlVHCi0JcGRjMjAyeHhfZGVjb2RlX3JlZ2lzdGVycyhSRUdfQSwgQVApOwotCXBkYzIwMnh4X2RlY29kZV9yZWdpc3RlcnMoUkVHX0IsIEJQKTsKLQlwZGMyMDJ4eF9kZWNvZGVfcmVnaXN0ZXJzKFJFR19DLCBDUCk7Ci0JcGRjMjAyeHhfZGVjb2RlX3JlZ2lzdGVycyhSRUdfRCwgRFApOwotI2VuZGlmCi0JcmV0dXJuIGVycjsKLX0KLS8qCi0gKiBTaG93L0luaXQgUENJIGRldmljZXMgb24gdGhlIHNwZWNpZmllZCBidXMgbnVtYmVyLgotICovCi0KLXZvaWQgcGNpX21vdXNzZV9maXh1cF9pcnEoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBwY2lfZGV2X3QgZGV2KQotewotCXVuc2lnbmVkIGludCBsaW5lOwotCi0Jc3dpdGNoKFBDSV9ERVYoZGV2KSkgewotCWNhc2UgMHgwZDoKLQkJbGluZSA9IDB4MDAwMDAxMDE7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDBlOgotCWRlZmF1bHQ6Ci0JCWxpbmUgPSAweDAwMDAwMzAzOwotCQlicmVhazsKLQl9Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCBsaW5lKTsKLX0KLQotdm9pZCBwY2lfbW91c3NlX3NldHVwX3BkYzIwMnh4KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgcGNpX2Rldl90IGRldiwKLQkJCSAgICAgICBzdHJ1Y3QgcGNpX2NvbmZpZ190YWJsZSAqXykKLXsKLQl1bnNpZ25lZCBzaG9ydCB2ZW5kb3JJZDsKLQl1bnNpZ25lZCBpbnQgbWJhcjAsIGNtZDsKLQlpbnQgYmFyLCBhOwotCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfVkVORE9SX0lELCAmdmVuZG9ySWQpOwotCi0JaWYodmVuZG9ySWQgPT0gUENJX1ZFTkRPUl9JRF9QUk9NSVNFIHx8IHZlbmRvcklkID09IFBDSV9WRU5ET1JfSURfQ01EKXsKLQkJLyogUERDIDIwMnh4IGNhcmQgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSwgaXQgaXMgYSBib290YWJsZQotCQkgKiBkZXZpY2UgYW5kIG5lZWRzIGFsbCA1IE1CQVIncyBjb25maWd1cmVkCi0JCSAqLwotCQlmb3IoYmFyID0gMDsgYmFyIDwgNTsgYmFyKyspewotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0JBU0VfQUREUkVTU18wK2Jhcio0LCAmbWJhcjApOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCtiYXIqNCwgfjApOwotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0JBU0VfQUREUkVTU18wK2Jhcio0LCAmbWJhcjApOwotI2lmZGVmIERFQlVHCi0JCQlwcmludGYoIiAgQVRBX2JhclslZF0gPSAlZGJ5dGVzXG4iLCBiYXIsCi0JCQkgICAgICAgfihtYmFyMCAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0spICsgMSk7Ci0jZW5kaWYKLQkJfQotCi0JCS8qIFByb2dyYW0gYWxsIEJBUidzICovCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsIFBST01JU0VfTUJBUjApOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX0JBU0VfQUREUkVTU18xLCBQUk9NSVNFX01CQVIxKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9CQVNFX0FERFJFU1NfMiwJUFJPTUlTRV9NQkFSMik7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzMsCVBST01JU0VfTUJBUjMpOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX0JBU0VfQUREUkVTU180LAlQUk9NSVNFX01CQVI0KTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9CQVNFX0FERFJFU1NfNSwJUFJPTUlTRV9NQkFSNSk7Ci0KLQkJZm9yKGJhciA9IDA7IGJhciA8IDU7IGJhcisrKXsKLQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCtiYXIqNCwgJm1iYXIwKTsKLSNpZmRlZiBERUJVRwotCQkJcHJpbnRmKCIgIEFUQV9iYXJbJWRdQDB4JXhcbiIsIGJhciwgbWJhcjApOwotI2VuZGlmCi0JCX0KLQotCQkvKiBFbmFibGUgUk9NIEV4cGFuc2lvbiBiYXNlICovCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfUk9NX0FERFJFU1MsIFBST01JU0VfTUJBUjV8MSk7Ci0KLQkJLyogSW8gZW5hYmxlLCBNZW1vcnkgZW5hYmxlLCBtYXN0ZXIgZW5hYmxlICovCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLQkJY21kICY9IH4weGZmZmYwMDAwOwotCQljbWQgfD0gUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfSU87Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKLQotCQkvKiBCcmVhdGggc29tZSBsaWZlIGludG8gdGhlIGNvbnRyb2xsZXIgKi8KLQkJZm9yKCBhID0gMDsgYSA8IDQ7IGErKykKLQkJCXBkYzIwMnh4X3R1bmVfY2hpcHNldChkZXYsIGEsIFhGRVJfUElPXzApOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfY29uZmlnX3RhYmxlIHBjaV9zYW5kcG9pbnRfY29uZmlnX3RhYmxlW10gPSB7Ci0JeyBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAweDAwLCAweDBlLCAweDAwLAotCSAgcGNpX21vdXNzZV9zZXR1cF9wZGMyMDJ4eCB9LAotI2lmbmRlZiBDT05GSUdfUENJX1BOUAotCXsgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMHgwMCwgMHgwZCwgMHgwMCwKLQkgIHBjaV9jZmdmdW5jX2NvbmZpZ19kZXZpY2UsIHtQQ0lfRU5FVF9JT0FERFIsCi0JCQkJICAgICAgUENJX0VORVRfTUVNQUREUiwKLQkJCQkgICAgICBQQ0lfQ09NTUFORF9NRU1PUlkgfAotCQkJCSAgICAgIFBDSV9DT01NQU5EX01BU1RFUn19LAotCXsgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKLQkgIHBjaV9jZmdmdW5jX2NvbmZpZ19kZXZpY2UsIHtQQ0lfU0xPVF9JT0FERFIsCi0JCQkJICAgICAgUENJX1NMT1RfTUVNQUREUiwKLQkJCQkgICAgICBQQ0lfQ09NTUFORF9NRU1PUlkgfAotCQkJCSAgICAgIFBDSV9DT01NQU5EX01BU1RFUn19LAotI2VuZGlmCi0JeyB9Ci19OwotCi1zdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgaG9zZSA9IHsKLQljb25maWdfdGFibGU6IHBjaV9zYW5kcG9pbnRfY29uZmlnX3RhYmxlLAotCWZpeHVwX2lycTogcGNpX21vdXNzZV9maXh1cF9pcnEsCi19OwotCi12b2lkIHBjaV9pbml0X2JvYXJkKHZvaWQpCi17Ci0JcGNpX21wYzgyNHhfaW5pdCgmaG9zZSk7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9tb3Vzc2UvdS1ib290LmxkcyBiL2JvYXJkL21vdXNzZS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDkxNjFjLi4wMDAwMDAwCi0tLSBhL2JvYXJkL21vdXNzZS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICBhcmNoL3Bvd2VycGMvY3B1L21wYzgyNHgvc3RhcnQubwkoLnRleHQqKQotICAgICooLnRleHQqKQotICAgIC4gPSBBTElHTigxNik7Ci0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICBLRUVQKCooLmdvdDIpKQotICAgIEtFRVAoKiguZ290KSkKLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICBLRUVQKCooLmZpeHVwKSkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9ICgoX0dMT0JBTF9PRkZTRVRfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PiAyKSAtIDE7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXykgPj4gMjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKikKLSAgICAqKC5zZGF0YSopCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotCi0gIC4gPSBBTElHTig0KTsKLSAgLnVfYm9vdF9saXN0IDogewotCUtFRVAoKihTT1JUKC51X2Jvb3RfbGlzdCopKSk7Ci0gIH0KLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLmJzcyopCi0gICAqKC5zYnNzKikKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0KLSAgX19ic3NfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbW91c3NlL3UtYm9vdC5sZHMucmFtIGIvYm9hcmQvbW91c3NlL3UtYm9vdC5sZHMucmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDI4MTMxLi4wMDAwMDAwCi0tLSBhL2JvYXJkL21vdXNzZS91LWJvb3QubGRzLnJhbQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFJvYiBUYXlsb3IsIEZseWluZyBQaWcgU3lzdGVtcyBMdGQuIHJvYnRAZmx5aW5ncGlnLmNvbQotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0KLU1FTU9SWSB7Ci0JcmFtICAoIXJ4KSA6IG9yZyA9IDB4MDAwMDAwMDAgLCBMRU5HVEggPSA4TQotCWNvZGUgKCFyeCkgOiBvcmcgPSAweDAwMDAyMDAwICwgTEVOR1RIID0gKDRNIC0gMHgyMDAwKQotCXJvbSAgIChyeCkgOiBvcmcgPSAweGZmZjAwMDAwICwgTEVOR1RIID0gNTEySwotfQotCi1TRUNUSU9OUwotewotICBfZl9pbml0ID0gLjsKLSAgUFJPVklERShfZl9pbml0ID0gLik7Ci0gIF9mX2luaXRfcm9tID0gLjsKLSAgUFJPVklERShfZl9pbml0X3JvbSA9IC4pOwotCi0gIC5pbml0IDogewotICAgICAgYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjR4L3N0YXJ0Lm8JKC50ZXh0KQotICAgICAgKiguaW5pdCkKLSAgfSA+IHJhbQotICBfaW5pdF9zaXplID0gU0laRU9GKC5pbml0KTsKLSAgUFJPVklERShfaW5pdF9zaXplID0gU0laRU9GKC5pbml0KSk7Ci0KLSAgRU5UUlkoX3N0YXJ0KQotCi0vKiAgX2Z0ZXh0ID0gLjsKLSAgX2Z0ZXh0X3JvbSA9IC47Ci0gIF90ZXh0X3NpemUgPSBTSVpFT0YoLnRleHQpOwotICovCi0gIC50ZXh0IDogewotICAgICAgKigudGV4dCkKLSAgICAgICooLmdvdDEpCi0gICAgICB9ID4gcmFtCi0gIC5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfSA+IHJhbQotICAuZHRvcnMgOiB7ICooLmR0b3JzKSB9ID4gcmFtCi0gIC5kYXRhIDogeyAqKC5kYXRhKSB9ID4gcmFtCi0gIC5zZGF0YSA6IHsgKiguc2RhdGEpIH0gPiByYW0KLSAgLnNkYXRhMiA6IHsgKiguc2RhdGEyKQotICAgICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgICB9ID4gcmFtCi0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuc2JzcyA6IHsgKiguc2JzcykgfSA+IHJhbQotICAuc2JzczIgOiB7ICooLnNic3MyKSB9ID4gcmFtCi0gIC5ic3MgOiB7ICooLmJzcykgfSA+IHJhbQotICAuZGVidWcgOiB7ICooLmRlYnVnKSB9ID4gcmFtCi0gIC5saW5lIDogeyAqKC5saW5lKSB9ID4gcmFtCi0gIC5zeW10YWIgOiB7ICooLnN5bXRhYikgfSA+IHJhbQotICAuc2hyc3RydGFiIDogeyAqKC5zaHN0cnRhYikgfSA+IHJhbQotICAuc3RydGFiIDogeyAqKC5zdHJ0YWIpIH0gPiByYW0KLSAvKiAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9ID4gcmFtCi0gICovCi0KLQotICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0gPiByYW0KLSAgICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLQotICAucHBjZW52CToKLSAgewotICAgIGNvbW1vbi9lbnZfZW1iZWRkZWQubyAoLnBwY2VudikKLSAgfSA+IHJhbQotCi0gIF9fYnNzX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL21vdXNzZS91LWJvb3QubGRzLnJvbSBiL2JvYXJkL21vdXNzZS91LWJvb3QubGRzLnJvbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE2MmFlMy4uMDAwMDAwMAotLS0gYS9ib2FyZC9tb3Vzc2UvdS1ib290Lmxkcy5yb20KKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGFyY2gvcG93ZXJwYy9jcHUvbXBjODI0eC9zdGFydC5vCSgudGV4dCkKLQkgY29tbW9uL2JvYXJkLm8gKC50ZXh0KQotICAgIGFyY2gvcG93ZXJwYy9saWIvcHBjc3RyaW5nLm8JKC50ZXh0KQotICAgIGxpYi92c3ByaW50Zi5vCSgudGV4dCkKLSAgICBsaWIvY3JjMzIubwkJKC50ZXh0KQotICAgIGxpYi96bGliLm8JCSgudGV4dCkKLQotCQkuID0gZW52X29mZnNldDsKLSAgICBjb21tb24vZW52X2VtYmVkZGVkLm8gKC50ZXh0KQotCi0JCSooLnRleHQpCi0KLSAgICAqKC5nb3QxKQotICAgIC4gPSBBTElHTigxNik7Ci0gICAgKigucm9kYXRhKQotICAgICooLnJvZGF0YTEpCi0gICAgKigucm9kYXRhLnN0cjEuNCkKLSAgICAqKC5laF9mcmFtZSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PiAyOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pID4+IDI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLQotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgfQotCi0gIF9fYnNzX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL254ODIzL01ha2VmaWxlIGIvYm9hcmQvbng4MjMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMmJlNWMuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbng4MjMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMKLSMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKLSMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSMKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0jCi0KLW9iai15CT0gbng4MjMubyBmbGFzaC5vCmRpZmYgLS1naXQgYS9ib2FyZC9ueDgyMy9mbGFzaC5jIGIvYm9hcmQvbng4MjMvZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlMTdkZC4uMDAwMDAwMAotLS0gYS9ib2FyZC9ueDgyMy9mbGFzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQ5ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDEKLSAqIEt5bGUgSGFycmlzLCBOZXh1cyBUZWNobm9sb2dpZXMsIEluYy4ga2hhcnJpc0BuZXh1cy10ZWNoLm5ldAotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8bXBjOHh4Lmg+Ci0KLURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCi1mbGFzaF9pbmZvX3QJZmxhc2hfaW5mb1tDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LU107IC8qIGluZm8gZm9yIEZMQVNIIGNoaXBzCSovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFByb3RlY3Rpb24gRmxhZ3M6Ci0gKi8KLSNkZWZpbmUgRkxBR19QUk9URUNUX1NFVAkweDAxCi0jZGVmaW5lIEZMQUdfUFJPVEVDVF9DTEVBUgkweDAyCi0KLS8qIEJvYXJkIHN1cHBvcnQgZm9yIDEgb3IgMiBmbGFzaCBkZXZpY2VzICovCi0jdW5kZWYgRkxBU0hfUE9SVF9XSURUSDMyCi0jZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEgxNgotCi0jaWZkZWYgRkxBU0hfUE9SVF9XSURUSDE2Ci0jZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEgJCXVzaG9ydAotI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRIVgkJdnVfc2hvcnQKLSNlbHNlCi0jZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEgJCXVsb25nCi0jZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEhWCQl2dV9sb25nCi0jZW5kaWYKLQotI2RlZmluZSBGUFcJCUZMQVNIX1BPUlRfV0lEVEgKLSNkZWZpbmUgRlBXVglGTEFTSF9QT1JUX1dJRFRIVgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbnMKLSAqLwotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplIChGUFcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbyk7Ci1zdGF0aWMgaW50ICAgd3JpdGVfZGF0YSAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCBGUFcgZGF0YSk7Ci1zdGF0aWMgdm9pZCAgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqaW5mbyk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi11bnNpZ25lZCBsb25nIGZsYXNoX2luaXQgKHZvaWQpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdCAgICAgKmltbWFwICA9IChpbW1hcF90ICopQ09ORklHX1NZU19JTU1SOwotCXZvbGF0aWxlIG1lbWN0bDh4eF90ICptZW1jdGwgPSAmaW1tYXAtPmltX21lbWN0bDsKLQl1bnNpZ25lZCBsb25nIHNpemVfYjA7Ci0JaW50IGk7Ci0KLQkvKiBJbml0OiBubyBGTEFTSGVzIGtub3duICovCi0JZm9yIChpPTA7IGk8Q09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1M7ICsraSkgewotCQlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKLQl9Ci0KLQkvKiBTdGF0aWMgRkxBU0ggQmFuayBjb25maWd1cmF0aW9uIGhlcmUgLSBGSVhNRSBYWFggKi8KLQlzaXplX2IwID0gZmxhc2hfZ2V0X3NpemUoKEZQVyAqKUZMQVNIX0JBU0UwX1BSRUxJTSwgJmZsYXNoX2luZm9bMF0pOwotCi0JaWYgKGZsYXNoX2luZm9bMF0uZmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCQlwcmludGYgKCIjIyBVbmtub3duIEZMQVNIIG9uIEJhbmsgMCAtIFNpemUgPSAweCUwOGx4ID0gJWxkIE1CXG4iLAotCQkJc2l6ZV9iMCwgc2l6ZV9iMDw8MjApOwotCX0KLQotCS8qIFJlbWFwIEZMQVNIIGFjY29yZGluZyB0byByZWFsIHNpemUgKi8KLQltZW1jdGwtPm1lbWNfb3IwID0gQ09ORklHX1NZU19PUl9USU1JTkdfRkxBU0ggfCAoLXNpemVfYjAgJiAweEZGRkY4MDAwKTsKLQltZW1jdGwtPm1lbWNfYnIwID0gKENPTkZJR19TWVNfRkxBU0hfQkFTRSAmIEJSX0JBX01TSykgfCBCUl9QU18xNiB8IEJSX01TX0dQQ00gfCBCUl9WOwotCi0JLyogUmUtZG8gc2l6aW5nIHRvIGdldCBmdWxsIGNvcnJlY3QgaW5mbyAqLwotCXNpemVfYjAgPSBmbGFzaF9nZXRfc2l6ZSgoRlBXICopQ09ORklHX1NZU19GTEFTSF9CQVNFLCAmZmxhc2hfaW5mb1swXSk7Ci0KLQlmbGFzaF9nZXRfb2Zmc2V0cyAoQ09ORklHX1NZU19GTEFTSF9CQVNFLCAmZmxhc2hfaW5mb1swXSk7Ci0KLQkvKiBtb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLwotCSh2b2lkKWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLQkJCSAgICBDT05GSUdfU1lTX0ZMQVNIX0JBU0UsCi0JCQkgICAgQ09ORklHX1NZU19GTEFTSF9CQVNFK21vbml0b3JfZmxhc2hfbGVuLTEsCi0JCQkgICAgJmZsYXNoX2luZm9bMF0pOwotCi0JZmxhc2hfaW5mb1swXS5zaXplID0gc2l6ZV9iMDsKLQotCXJldHVybiAoc2l6ZV9iMCk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQlpbnQgaTsKLQotCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9JTlRFTCkgewotCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLQkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAyMDAwMCk7Ci0JCX0KLQl9Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotdm9pZCBmbGFzaF9wcmludF9pbmZvICAoZmxhc2hfaW5mb190ICppbmZvKQotewotCWludCBpOwotCi0JaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJcHJpbnRmICgibWlzc2luZyBvciB1bmtub3duIEZMQVNIIHR5cGVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSB7Ci0JCWNhc2UgRkxBU0hfTUFOX0lOVEVMOglwcmludGYgKCJJTlRFTCAiKTsJCWJyZWFrOwotCQlkZWZhdWx0OgkJcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7CWJyZWFrOwotCX0KLQotCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewotICAgY2FzZSBGTEFTSF8yOEYzMjBKM0E6Ci0JCQkJcHJpbnRmICgiMjhGMzIwSjNBXG4iKTsgYnJlYWs7Ci0gICBjYXNlIEZMQVNIXzI4RjY0MEozQToKLQkJCQlwcmludGYgKCIyOEY2NDBKM0FcbiIpOyBicmVhazsKLSAgIGNhc2UgRkxBU0hfMjhGMTI4SjNBOgotCQkJCXByaW50ZiAoIjI4RjEyOEozQVxuIik7IGJyZWFrOwotCWRlZmF1bHQ6CQlwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7IGJyZWFrOwotCX0KLQotCXByaW50ZiAoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCi0JCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7Ci0KLQlwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7Ci0JZm9yIChpPTA7IGk8aW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKLQkJaWYgKChpICUgNSkgPT0gMCkKLQkJCXByaW50ZiAoIlxuICAgIik7Ci0JCXByaW50ZiAoIiAlMDhsWCVzIiwKLQkJCWluZm8tPnN0YXJ0W2ldLAotCQkJaW5mby0+cHJvdGVjdFtpXSA/ICIgKFJPKSIgOiAiICAgICAiCi0JCSk7Ci0JfQotCXByaW50ZiAoIlxuIik7Ci0JcmV0dXJuOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgY29kZSBjYW5ub3QgYmUgcnVuIGZyb20gRkxBU0ghCi0gKi8KLQotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplIChGUFcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQlGUFcgdmFsdWU7Ci0KLQkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kOiByZWFkIE1hbnVmYWN0dXJlciBJRCAqLwotCWFkZHJbMHg1NTU1XSA9IChGUFcpMHgwMEFBMDBBQTsKLQlhZGRyWzB4MkFBQV0gPSAoRlBXKTB4MDA1NTAwNTU7Ci0JYWRkclsweDU1NTVdID0gKEZQVykweDAwOTAwMDkwOwotCi0JdmFsdWUgPSBhZGRyWzBdOwotCi0gICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICBjYXNlIChGUFcpSU5URUxfTUFOVUZBQ1Q6Ci0gICAgICBpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9JTlRFTDsKLSAgICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMDsKLQkJaW5mby0+c2l6ZSA9IDA7Ci0JCWFkZHJbMF0gPSAoRlBXKTB4MDBGRjAwRkY7ICAgICAgLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KLQkJcmV0dXJuICgwKTsJCQkvKiBubyBvciB1bmtub3duIGZsYXNoCSovCi0JfQotCi0JdmFsdWUgPSBhZGRyWzFdOwkJCS8qIGRldmljZSBJRAkJKi8KLQotICAgc3dpdGNoICh2YWx1ZSkgewotICAgY2FzZSAoRlBXKUlOVEVMX0lEXzI4RjMyMEozQToKLSAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjMyMEozQTsKLSAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDMyOwotICAgICAgaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDA7Ci0gICAgICBicmVhazsgICAgICAgICAgICAvKiA9PiA0IE1CICAgICAqLwotCi0gICBjYXNlIChGUFcpSU5URUxfSURfMjhGNjQwSjNBOgotICAgICAgaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGNjQwSjNBOwotICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gNjQ7Ci0gICAgICBpbmZvLT5zaXplID0gMHgwMDgwMDAwMDsKLSAgICAgIGJyZWFrOyAgICAgICAgICAgIC8qID0+IDggTUIgICAgICovCi0KLSAgIGNhc2UgKEZQVylJTlRFTF9JRF8yOEYxMjhKM0E6Ci0gICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEYxMjhKM0E7Ci0gICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSAxMjg7Ci0gICAgICBpbmZvLT5zaXplID0gMHgwMTAwMDAwMDsKLSAgICAgIGJyZWFrOyAgICAgICAgICAgIC8qID0+IDE2IE1CICAgICAqLwotCi0JZGVmYXVsdDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoaW5mby0+c2VjdG9yX2NvdW50ID4gQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVCkgewotCQlwcmludGYgKCIqKiBFUlJPUjogc2VjdG9yIGNvdW50ICVkID4gbWF4ICglZCkgKipcbiIsCi0JCQlpbmZvLT5zZWN0b3JfY291bnQsIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QpOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUOwotCX0KLQotCWFkZHJbMF0gPSAoRlBXKTB4MDBGRjAwRkY7ICAgICAgLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KLQotCXJldHVybiAoaW5mby0+c2l6ZSk7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLWludAlmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICppbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKLXsKLQlpbnQgZmxhZywgcHJvdCwgc2VjdDsKLQl1bG9uZyB0eXBlLCBzdGFydCwgbm93LCBsYXN0OwotCWludCByY29kZSA9IDA7Ci0KLQlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKLQkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJCXByaW50ZiAoIi0gbWlzc2luZ1xuIik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOwotCQl9Ci0JCXJldHVybiAxOwotCX0KLQotCXR5cGUgPSAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSyk7Ci0JaWYgKCh0eXBlICE9IEZMQVNIX01BTl9JTlRFTCkpIHsKLQkJcHJpbnRmICgiQ2FuJ3QgZXJhc2UgdW5rbm93biBmbGFzaCB0eXBlICUwOGx4IC0gYWJvcnRlZFxuIiwKLQkJCWluZm8tPmZsYXNoX2lkKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcHJvdCA9IDA7Ci0JZm9yIChzZWN0PXNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgKytzZWN0KSB7Ci0JCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7Ci0JCQlwcm90Kys7Ci0JCX0KLQl9Ci0KLQlpZiAocHJvdCkgewotCQlwcmludGYgKCItIFdhcm5pbmc6ICVkIHByb3RlY3RlZCBzZWN0b3JzIHdpbGwgbm90IGJlIGVyYXNlZCFcbiIsCi0JCQlwcm90KTsKLQl9IGVsc2UgewotCQlwcmludGYgKCJcbiIpOwotCX0KLQotCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKLQlsYXN0ICA9IHN0YXJ0OwotCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KLQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7IHNlY3QrKykgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KLQkJCUZQV1YgKmFkZHIgPSAoRlBXViAqKShpbmZvLT5zdGFydFtzZWN0XSk7Ci0JCQlGUFcgc3RhdHVzOwotCi0JCQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLQkJCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKLQotCQkJKmFkZHIgPSAoRlBXKTB4MDA1MDAwNTA7CS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciAqLwotCQkJKmFkZHIgPSAoRlBXKTB4MDAyMDAwMjA7CS8qIGVyYXNlIHNldHVwICovCi0JCQkqYWRkciA9IChGUFcpMHgwMEQwMDBEMDsJLyogZXJhc2UgY29uZmlybSAqLwotCi0JCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLQkJCWlmIChmbGFnKQotCQkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQkJCS8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLwotCQkJdWRlbGF5ICgxMDAwKTsKLQotCQkJd2hpbGUgKCgoc3RhdHVzID0gKmFkZHIpICYgKEZQVykweDAwODAwMDgwKSAhPSAoRlBXKTB4MDA4MDAwODApIHsKLQkJCQlpZiAoKG5vdz1nZXRfdGltZXIoc3RhcnQpKSA+IENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVCkgewotCQkJCQlwcmludGYgKCJUaW1lb3V0XG4iKTsKLQkJCQkJKmFkZHIgPSAoRlBXKTB4MDBCMDAwQjA7IC8qIHN1c3BlbmQgZXJhc2UJICAqLwotCQkJCQkqYWRkciA9IChGUFcpMHgwMEZGMDBGRjsgLyogcmVzZXQgdG8gcmVhZCBtb2RlICovCi0JCQkJCXJjb2RlID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KLQkJCWlmICgobm93IC0gbGFzdCkgPiAxMDAwKSB7CS8qIGV2ZXJ5IHNlY29uZCAqLwotCQkJCQlwdXRjICgnLicpOwotCQkJCQlsYXN0ID0gbm93OwotCQkJCX0KLQkJCX0KLQotCQkJKmFkZHIgPSAoRlBXKTB4MDBGRjAwRkY7CS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLwotCQkJcHJpbnRmICgiIGRvbmVcbiIpOwotCQl9Ci0JfQotCXJldHVybiByY29kZTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29weSBtZW1vcnkgdG8gZmxhc2gsIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICogNCAtIEZsYXNoIG5vdCBpZGVudGlmaWVkCi0gKi8KLQotaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqaW5mbywgdWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQotewotCXVsb25nIGNwLCB3cDsKLQlGUFcgZGF0YTsKLQlpbnQgY291bnQsIGksIGwsIHJjLCBwb3J0X3dpZHRoOwotCi0JaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJcmV0dXJuIDQ7Ci0JfQotLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCi0jaWZkZWYgRkxBU0hfUE9SVF9XSURUSDE2Ci0Jd3AgPSAoYWRkciAmIH4xKTsKLQlwb3J0X3dpZHRoID0gMjsKLSNlbHNlCi0Jd3AgPSAoYWRkciAmIH4zKTsKLQlwb3J0X3dpZHRoID0gNDsKLSNlbmRpZgotCi0JLyogc2F2ZSBzZXJudW0gaWYgbmVlZGVkICovCi0JaWYgKGFkZHIgPj0gQ09ORklHX1NZU19GTEFTSF9TTl9TRUNUT1IgJiYgYWRkciA8IENPTkZJR19TWVNfRkxBU0hfU05fQkFTRSkKLQl7Ci0JCXVfbG9uZyBkZXN0ID0gQ09ORklHX1NZU19GTEFTSF9TTl9CQVNFOwotCQl1X3Nob3J0ICpzbiA9ICh1X3Nob3J0ICopZ2QtPmJkLT5iaV9zZXJudW07Ci0KLQkJcHJpbnRmKCIoc2F2aW5nIHNlcm51bSkiKTsKLQkJZm9yIChpPTA7IGk8NDsgaSsrKQotCQl7Ci0JCQlpZiAoKHJjID0gd3JpdGVfZGF0YShpbmZvLCBkZXN0LCBzbltpXSkpICE9IDApIHsKLQkJCQlyZXR1cm4gKHJjKTsKLQkJCX0KLQkJCWRlc3QgKz0gcG9ydF93aWR0aDsKLQkJfQotCX0KLQotCS8qCi0JICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcwotCSAqLwotCWlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgewotCQlkYXRhID0gMDsKLQkJZm9yIChpPTAsIGNwPXdwOyBpPGw7ICsraSwgKytjcCkgewotCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7Ci0JCX0KLQkJZm9yICg7IGk8cG9ydF93aWR0aCAmJiBjbnQ+MDsgKytpKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0JCQktLWNudDsKLQkJCSsrY3A7Ci0JCX0KLQkJZm9yICg7IGNudD09MCAmJiBpPHBvcnRfd2lkdGg7ICsraSwgKytjcCkgewotCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7Ci0JCX0KLQotCQlpZiAoKHJjID0gd3JpdGVfZGF0YShpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKLQkJCXJldHVybiAocmMpOwotCQl9Ci0JCXdwICs9IHBvcnRfd2lkdGg7Ci0JfQotCi0JLyoKLQkgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKLQkgKi8KLQljb3VudCA9IDA7Ci0Jd2hpbGUgKGNudCA+PSBwb3J0X3dpZHRoKSB7Ci0JCWRhdGEgPSAwOwotCQlmb3IgKGk9MDsgaTxwb3J0X3dpZHRoOyArK2kpIHsKLQkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLQkJfQotCQlpZiAoKHJjID0gd3JpdGVfZGF0YShpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKLQkJCXJldHVybiAocmMpOwotCQl9Ci0JCXdwICArPSBwb3J0X3dpZHRoOwotCQljbnQgLT0gcG9ydF93aWR0aDsKLQkJaWYgKGNvdW50KysgPiAweDgwMCkKLQkJewotCQkJcHV0YygnLicpOwotCQkJY291bnQgPSAwOwotCQl9Ci0JfQotCi0JaWYgKGNudCA9PSAwKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKLQkgKi8KLQlkYXRhID0gMDsKLQlmb3IgKGk9MCwgY3A9d3A7IGk8cG9ydF93aWR0aCAmJiBjbnQ+MDsgKytpLCArK2NwKSB7Ci0JCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLQkJLS1jbnQ7Ci0JfQotCWZvciAoOyBpPHBvcnRfd2lkdGg7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQl9Ci0KLQlyZXR1cm4gKHdyaXRlX2RhdGEoaW5mbywgd3AsIGRhdGEpKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogV3JpdGUgYSB3b3JkIG9yIGhhbGZ3b3JkIHRvIEZsYXNoLCByZXR1cm5zOgotICogMCAtIE9LCi0gKiAxIC0gd3JpdGUgdGltZW91dAotICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqLwotc3RhdGljIGludCB3cml0ZV9kYXRhIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIEZQVyBkYXRhKQotewotCUZQV1YgKmFkZHIgPSAoRlBXViAqKWRlc3Q7Ci0JdWxvbmcgc3RhdHVzOwotCXVsb25nIHN0YXJ0OwotCWludCBmbGFnOwotCi0JLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCi0JaWYgKCgqYWRkciAmIGRhdGEpICE9IGRhdGEpIHsKLQkJcHJpbnRmKCJub3QgZXJhc2VkIGF0ICUwOGx4ICgleClcbiIsKHVsb25nKWFkZHIsKmFkZHIpOwotCQlyZXR1cm4gKDIpOwotCX0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQkqYWRkciA9IChGUFcpMHgwMDQwMDA0MDsJCS8qIHdyaXRlIHNldHVwICovCi0JKmFkZHIgPSBkYXRhOwotCi0JLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCi0JaWYgKGZsYWcpCi0JCWVuYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQlzdGFydCA9IGdldF90aW1lciAoMCk7Ci0KLQl3aGlsZSAoKChzdGF0dXMgPSAqYWRkcikgJiAoRlBXKTB4MDA4MDAwODApICE9IChGUFcpMHgwMDgwMDA4MCkgewotCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVCkgewotCQkJKmFkZHIgPSAoRlBXKTB4MDBGRjAwRkY7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCi0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JfQotCi0JKmFkZHIgPSAoRlBXKTB4MDBGRjAwRkY7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCi0KLQlyZXR1cm4gKDApOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbng4MjMvbng4MjMuYyBiL2JvYXJkL254ODIzL254ODIzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OWZhOGMuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbng4MjMvbng4MjMuYworKysgL2Rldi9udWxsCkBAIC0xLDM3NCArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBLeWxlIEhhcnJpcywgTmV4dXMgVGVjaG5vbG9naWVzLCBJbmMuIGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQKLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDEtMjAwMgotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bXBjOHh4Lmg+Ci0jaW5jbHVkZSA8bmV0Lmg+Ci0KLURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCi1zdGF0aWMgbG9uZyBpbnQgZHJhbV9zaXplIChsb25nIGludCwgbG9uZyBpbnQgKiwgbG9uZyBpbnQpOwotCi0jZGVmaW5lCV9OT1RfVVNFRF8JMHhGRkZGRkZGRgotCi1jb25zdCB1aW50IHNkcmFtX3RhYmxlW10gPSB7Ci0jaWYgKE1QQzhYWF9TUEVFRCA8PSA1MDAwMDAwMEwpCi0JLyoKLQkgKiBTaW5nbGUgUmVhZC4gKE9mZnNldCAwIGluIFVQTUEgUkFNKQotCSAqLwotCTB4MEYwN0VDMDQsIDB4MDFCQkQ4MDQsIDB4MUZGN0Y0NDAsIDB4RkZGRkZDMDcsCi0JMHhGRkZGRkZGRiwKLQotCS8qCi0JICogU0RSQU0gSW5pdGlhbGl6YXRpb24gKG9mZnNldCA1IGluIFVQTUEgUkFNKQotCSAqCi0JICogVGhpcyBpcyBubyBVUE0gZW50cnkgcG9pbnQuIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiB1c2VzCi0JICogdGhlIHJlbWFpbmluZyBzcGFjZSB0byBlc3RhYmxpc2ggYW4gaW5pdGlhbGl6YXRpb24KLQkgKiBzZXF1ZW5jZSwgd2hpY2ggaXMgZXhlY3V0ZWQgYnkgYSBSVU4gY29tbWFuZC4KLQkgKgotCSAqLwotCTB4MUZFN0Y0MzQsIDB4RUZBQkU4MzQsIDB4MUZBN0Q0MzUsCi0KLQkvKgotCSAqIEJ1cnN0IFJlYWQuIChPZmZzZXQgOCBpbiBVUE1BIFJBTSkKLQkgKi8KLQkweDBGMDdFQzA0LCAweDEwRUZEQzA0LCAweEYwQUZGQzAwLCAweEYwQUZGQzAwLAotCTB4RjFBRkZDMDAsIDB4RkZBRkZDNDAsIDB4RkZBRkZDMDcsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCi0JLyoKLQkgKiBTaW5nbGUgV3JpdGUuIChPZmZzZXQgMTggaW4gVVBNQSBSQU0pCi0JICovCi0JMHgwRTA3RTgwNCwgMHgwMUJCRDAwMCwgMHgxRkY3RjQ0NywgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCi0JLyoKLQkgKiBCdXJzdCBXcml0ZS4gKE9mZnNldCAyMCBpbiBVUE1BIFJBTSkKLQkgKi8KLQkweDBFMDdFODAwLCAweDEwRUZENDAwLCAweEYwQUZGQzAwLCAweEYwQUZGQzAwLAotCTB4RjFBRkZDNDcsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCi0JLyoKLQkgKiBSZWZyZXNoICAoT2Zmc2V0IDMwIGluIFVQTUEgUkFNKQotCSAqLwotCTB4MUZGN0RDODQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDODQsIDB4RkZGRkZDMDcsCi0JMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCi0JLyoKLQkgKiBFeGNlcHRpb24uIChPZmZzZXQgM2MgaW4gVVBNQSBSQU0pCi0JICovCi0JMHg3RkZGRkMwNywgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRgotI2Vsc2UKLQotCS8qCi0JICogU2luZ2xlIFJlYWQuIChPZmZzZXQgMCBpbiBVUE1BIFJBTSkKLQkgKi8KLQkweDFGMDdGQzA0LCAweEVFQUZFQzA0LCAweDExQUZEQzA0LCAweEVGQkJGODAwLAotCTB4MUZGN0Y0NDcsCi0KLQkvKgotCSAqIFNEUkFNIEluaXRpYWxpemF0aW9uIChvZmZzZXQgNSBpbiBVUE1BIFJBTSkKLQkgKgotCSAqIFRoaXMgaXMgbm8gVVBNIGVudHJ5IHBvaW50LiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gdXNlcwotCSAqIHRoZSByZW1haW5pbmcgc3BhY2UgdG8gZXN0YWJsaXNoIGFuIGluaXRpYWxpemF0aW9uCi0JICogc2VxdWVuY2UsIHdoaWNoIGlzIGV4ZWN1dGVkIGJ5IGEgUlVOIGNvbW1hbmQuCi0JICoKLQkgKi8KLQkweDFGRjdGNDM0LCAweEVGRUJFODM0LCAweDFGQjdENDM1LAotCi0JLyoKLQkgKiBCdXJzdCBSZWFkLiAoT2Zmc2V0IDggaW4gVVBNQSBSQU0pCi0JICovCi0JMHgxRjA3RkMwNCwgMHhFRUFGRUMwNCwgMHgxMEFGREMwNCwgMHhGMEFGRkMwMCwKLQkweEYwQUZGQzAwLCAweEYxQUZGQzAwLCAweEVGQkJGODAwLCAweDFGRjdGNDQ3LAotCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQotCS8qCi0JICogU2luZ2xlIFdyaXRlLiAoT2Zmc2V0IDE4IGluIFVQTUEgUkFNKQotCSAqLwotCTB4MUYwN0ZDMDQsIDB4RUVBRkU4MDAsIDB4MDFCQkQwMDQsIDB4MUZGN0Y0NDcsCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQotCS8qCi0JICogQnVyc3QgV3JpdGUuIChPZmZzZXQgMjAgaW4gVVBNQSBSQU0pCi0JICovCi0JMHgxRjA3RkMwNCwgMHhFRUFGRTgwMCwgMHgxMEFGRDQwMCwgMHhGMEFGRkMwMCwKLQkweEYwQUZGQzAwLCAweEUxQkJGODA0LCAweDFGRjdGNDQ3LCBfTk9UX1VTRURfLAotCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQotCS8qCi0JICogUmVmcmVzaCAgKE9mZnNldCAzMCBpbiBVUE1BIFJBTSkKLQkgKi8KLQkweDFGRjdEQzg0LCAweEZGRkZGQzA0LCAweEZGRkZGQzA0LCAweEZGRkZGQzA0LAotCTB4RkZGRkZDODQsIDB4RkZGRkZDMDcsCi0JX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKLQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAotCi0JLyoKLQkgKiBFeGNlcHRpb24uIChPZmZzZXQgM2MgaW4gVVBNQSBSQU0pCi0JICovCi0JMHg3RkZGRkMwNywJCS8qIGxhc3QgKi8KLQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAotI2VuZGlmCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQotLyoKLSAqIENoZWNrIEJvYXJkIElkZW50aXR5OgotICoKLSAqLwotCi1pbnQgY2hlY2tib2FyZCAodm9pZCkKLXsKLQlwcmludGYgKCJCb2FyZDogTmV4dXMgTlg4MjMiKTsKLQlyZXR1cm4gKDApOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXBoeXNfc2l6ZV90IGluaXRkcmFtIChpbnQgYm9hcmRfdHlwZSkKLXsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENPTkZJR19TWVNfSU1NUjsKLQl2b2xhdGlsZSBtZW1jdGw4eHhfdCAqbWVtY3RsID0gJmltbWFwLT5pbV9tZW1jdGw7Ci0JbG9uZyBpbnQgc2l6ZV9iMCwgc2l6ZV9iMSwgc2l6ZTgsIHNpemU5OwotCi0JdXBtY29uZmlnIChVUE1BLCAodWludCAqKSBzZHJhbV90YWJsZSwKLQkJICAgc2l6ZW9mIChzZHJhbV90YWJsZSkgLyBzaXplb2YgKHVpbnQpKTsKLQotCS8qCi0JICogVXAgdG8gMiBCYW5rcyBvZiA2NE1iaXQgeCAyIGRldmljZXMKLQkgKiBJbml0aWFsIGJ1aWxkcyBvbmx5IGhhdmUgMQotCSAqLwotCW1lbWN0bC0+bWVtY19tcHRwciA9IENPTkZJR19TWVNfTVBUUFJfMUJLXzRLOwotCW1lbWN0bC0+bWVtY19tYXIgPSAweDAwMDAwMDg4OwotCi0JLyoKLQkgKiBNYXAgY29udHJvbGxlciBTRFJBTSBiYW5rIDAKLQkgKi8KLQltZW1jdGwtPm1lbWNfb3IxID0gQ09ORklHX1NZU19PUjFfUFJFTElNOwotCW1lbWN0bC0+bWVtY19icjEgPSBDT05GSUdfU1lTX0JSMV9QUkVMSU07Ci0JbWVtY3RsLT5tZW1jX21hbXIgPSBDT05GSUdfU1lTX01BTVJfOENPTCAmICh+KE1BTVJfUFRBRSkpOwkvKiBubyByZWZyZXNoIHlldCAqLwotCXVkZWxheSAoMjAwKTsKLQotCS8qCi0JICogTWFwIGNvbnRyb2xsZXIgU0RSQU0gYmFuayAxCi0JICovCi0JbWVtY3RsLT5tZW1jX29yMiA9IENPTkZJR19TWVNfT1IyX1BSRUxJTTsKLQltZW1jdGwtPm1lbWNfYnIyID0gQ09ORklHX1NZU19CUjJfUFJFTElNOwotCi0JLyoKLQkgKiBQZXJmb3JtIFNEUkFNIGluaXRpYWxpenNhdGlvbiBzZXF1ZW5jZQotCSAqLwotCW1lbWN0bC0+bWVtY19tY3IgPSAweDgwMDAyMTA1OwkvKiBTRFJBTSBiYW5rIDAgKi8KLQl1ZGVsYXkgKDEpOwotCW1lbWN0bC0+bWVtY19tY3IgPSAweDgwMDAyMjMwOwkvKiBTRFJBTSBiYW5rIDAgLSBleGVjdXRlIHR3aWNlICovCi0JdWRlbGF5ICgxKTsKLQotCW1lbWN0bC0+bWVtY19tY3IgPSAweDgwMDA0MTA1OwkvKiBTRFJBTSBiYW5rIDEgKi8KLQl1ZGVsYXkgKDEpOwotCW1lbWN0bC0+bWVtY19tY3IgPSAweDgwMDA0MjMwOwkvKiBTRFJBTSBiYW5rIDEgLSBleGVjdXRlIHR3aWNlICovCi0JdWRlbGF5ICgxKTsKLQotCW1lbWN0bC0+bWVtY19tYW1yIHw9IE1BTVJfUFRBRTsJLyogZW5hYmxlIHJlZnJlc2ggKi8KLQl1ZGVsYXkgKDEwMDApOwotCi0JLyoKLQkgKiBQcmVsaW1pbmFyeSBwcmVzY2FsZXIgZm9yIHJlZnJlc2ggKGRlcGVuZHMgb24gbnVtYmVyIG9mCi0JICogYmFua3MpOiBUaGlzIHZhbHVlIGlzIHNlbGVjdGVkIGZvciBmb3VyIGN5Y2xlcyBldmVyeSA2Mi40IHVzCi0JICogd2l0aCB0d28gU0RSQU0gYmFua3Mgb3IgZm91ciBjeWNsZXMgZXZlcnkgMzEuMiB1cyB3aXRoIG9uZQotCSAqIGJhbmsuIEl0IHdpbGwgYmUgYWRqdXN0ZWQgYWZ0ZXIgbWVtb3J5IHNpemluZy4KLQkgKi8KLQltZW1jdGwtPm1lbWNfbXB0cHIgPSBDT05GSUdfU1lTX01QVFBSXzJCS184SzsKLQotCW1lbWN0bC0+bWVtY19tYXIgPSAweDAwMDAwMDg4OwotCi0KLQkvKgotCSAqIENoZWNrIEJhbmsgMCBNZW1vcnkgU2l6ZSBmb3IgcmUtY29uZmlndXJhdGlvbgotCSAqCi0JICogdHJ5IDggY29sdW1uIG1vZGUKLQkgKi8KLQlzaXplOCA9IGRyYW1fc2l6ZSAoQ09ORklHX1NZU19NQU1SXzhDT0wsIChsb25nICopIFNEUkFNX0JBU0UxX1BSRUxJTSwKLQkJCSAgIFNEUkFNX01BWF9TSVpFKTsKLQotCXVkZWxheSAoMTAwMCk7Ci0KLQkvKgotCSAqIHRyeSA5IGNvbHVtbiBtb2RlCi0JICovCi0Jc2l6ZTkgPSBkcmFtX3NpemUgKENPTkZJR19TWVNfTUFNUl85Q09MLCAobG9uZyAqKSBTRFJBTV9CQVNFMV9QUkVMSU0sCi0JCQkgICBTRFJBTV9NQVhfU0laRSk7Ci0KLQlpZiAoc2l6ZTggPCBzaXplOSkgewkvKiBsZWF2ZSBjb25maWd1cmF0aW9uIGF0IDkgY29sdW1ucyAgICAgKi8KLQkJc2l6ZV9iMCA9IHNpemU5OwotLyoJZGVidWcgKCJTRFJBTSBCYW5rIDAgaW4gOSBjb2x1bW4gbW9kZTogJWxkIE1CXG4iLCBzaXplID4+IDIwKTsJKi8KLQl9IGVsc2UgewkJLyogYmFjayB0byA4IGNvbHVtbnMgICAgICAgICAgICAgICAgICAgICovCi0JCXNpemVfYjAgPSBzaXplODsKLQkJbWVtY3RsLT5tZW1jX21hbXIgPSBDT05GSUdfU1lTX01BTVJfOENPTDsKLQkJdWRlbGF5ICg1MDApOwotLyoJZGVidWcgKCJTRFJBTSBCYW5rIDAgaW4gOCBjb2x1bW4gbW9kZTogJWxkIE1CXG4iLCBzaXplID4+IDIwKTsJKi8KLQl9Ci0KLQkvKgotCSAqIENoZWNrIEJhbmsgMSBNZW1vcnkgU2l6ZQotCSAqIHVzZSBjdXJyZW50IGNvbHVtbiBzZXR0aW5ncwotCSAqIFs5IGNvbHVtbiBTRFJBTSBtYXkgYWxzbyBiZSB1c2VkIGluIDggY29sdW1uIG1vZGUsCi0JICogIGJ1dCB0aGVuIG9ubHkgaGFsZiB0aGUgcmVhbCBzaXplIHdpbGwgYmUgdXNlZC5dCi0JICovCi0Jc2l6ZV9iMSA9IGRyYW1fc2l6ZSAobWVtY3RsLT5tZW1jX21hbXIsIChsb25nICopIFNEUkFNX0JBU0UyX1BSRUxJTSwKLQkJCSAgICAgU0RSQU1fTUFYX1NJWkUpOwotLyoJZGVidWcgKCJTRFJBTSBCYW5rIDE6ICVsZCBNQlxuIiwgc2l6ZTggPj4gMjApOwkqLwotCi0JdWRlbGF5ICgxMDAwKTsKLQotCS8qCi0JICogQWRqdXN0IHJlZnJlc2ggcmF0ZSBkZXBlbmRpbmcgb24gU0RSQU0gdHlwZSwgYm90aCBiYW5rcwotCSAqIEZvciB0eXBlcyA+IDEyOCBNQml0IGxlYXZlIGl0IGF0IHRoZSBjdXJyZW50IChmYXN0KSByYXRlCi0JICovCi0JaWYgKChzaXplX2IwIDwgMHgwMjAwMDAwMCkgJiYgKHNpemVfYjEgPCAweDAyMDAwMDAwKSkgewotCQkvKiByZWR1Y2UgdG8gMTUuNiB1cyAoNjIuNCB1cyAvIHF1YWQpICovCi0JCW1lbWN0bC0+bWVtY19tcHRwciA9IENPTkZJR19TWVNfTVBUUFJfMkJLXzRLOwotCQl1ZGVsYXkgKDEwMDApOwotCX0KLQotCS8qCi0JICogRmluYWwgbWFwcGluZzogbWFwIGJpZ2dlciBiYW5rIGZpcnN0Ci0JICovCi0JaWYgKHNpemVfYjEgPiBzaXplX2IwKSB7CS8qIFNEUkFNIEJhbmsgMSBpcyBiaWdnZXIgLSBtYXAgZmlyc3QgICAqLwotCi0JCW1lbWN0bC0+bWVtY19vcjIgPQotCQkJKCgtc2l6ZV9iMSkgJiAweEZGRkYwMDAwKSB8IENPTkZJR19TWVNfT1JfVElNSU5HX1NEUkFNOwotCQltZW1jdGwtPm1lbWNfYnIyID0KLQkJCShDT05GSUdfU1lTX1NEUkFNX0JBU0UgJiBCUl9CQV9NU0spIHwgQlJfTVNfVVBNQSB8IEJSX1Y7Ci0KLQkJaWYgKHNpemVfYjAgPiAwKSB7Ci0JCQkvKgotCQkJICogUG9zaXRpb24gQmFuayAwIGltbWVkaWF0ZWx5IGFib3ZlIEJhbmsgMQotCQkJICovCi0JCQltZW1jdGwtPm1lbWNfb3IxID0KLQkJCQkoKC1zaXplX2IwKSAmIDB4RkZGRjAwMDApIHwKLQkJCQlDT05GSUdfU1lTX09SX1RJTUlOR19TRFJBTTsKLQkJCW1lbWN0bC0+bWVtY19icjEgPQotCQkJCSgoQ09ORklHX1NZU19TRFJBTV9CQVNFICYgQlJfQkFfTVNLKSB8IEJSX01TX1VQTUEgfAotCQkJCSBCUl9WKQotCQkJCSsgc2l6ZV9iMTsKLQkJfSBlbHNlIHsKLQkJCXVuc2lnbmVkIGxvbmcgcmVnOwotCi0JCQkvKgotCQkJICogTm8gYmFuayAwCi0JCQkgKgotCQkJICogaW52YWxpZGF0ZSBiYW5rCi0JCQkgKi8KLQkJCW1lbWN0bC0+bWVtY19icjEgPSAwOwotCi0JCQkvKiBhZGp1c3QgcmVmcmVzaCByYXRlIGRlcGVuZGluZyBvbiBTRFJBTSB0eXBlLCBvbmUgYmFuayAqLwotCQkJcmVnID0gbWVtY3RsLT5tZW1jX21wdHByOwotCQkJcmVnID4+PSAxOwkvKiByZWR1Y2UgdG8gQ09ORklHX1NZU19NUFRQUl8xQktfOEsgLyBfNEsgKi8KLQkJCW1lbWN0bC0+bWVtY19tcHRwciA9IHJlZzsKLQkJfQotCi0JfSBlbHNlIHsJCS8qIFNEUkFNIEJhbmsgMCBpcyBiaWdnZXIgLSBtYXAgZmlyc3QgICAqLwotCi0JCW1lbWN0bC0+bWVtY19vcjEgPQotCQkJKCgtc2l6ZV9iMCkgJiAweEZGRkYwMDAwKSB8IENPTkZJR19TWVNfT1JfVElNSU5HX1NEUkFNOwotCQltZW1jdGwtPm1lbWNfYnIxID0KLQkJCShDT05GSUdfU1lTX1NEUkFNX0JBU0UgJiBCUl9CQV9NU0spIHwgQlJfTVNfVVBNQSB8IEJSX1Y7Ci0KLQkJaWYgKHNpemVfYjEgPiAwKSB7Ci0JCQkvKgotCQkJICogUG9zaXRpb24gQmFuayAxIGltbWVkaWF0ZWx5IGFib3ZlIEJhbmsgMAotCQkJICovCi0JCQltZW1jdGwtPm1lbWNfb3IyID0KLQkJCQkoKC1zaXplX2IxKSAmIDB4RkZGRjAwMDApIHwKLQkJCQlDT05GSUdfU1lTX09SX1RJTUlOR19TRFJBTTsKLQkJCW1lbWN0bC0+bWVtY19icjIgPQotCQkJCSgoQ09ORklHX1NZU19TRFJBTV9CQVNFICYgQlJfQkFfTVNLKSB8IEJSX01TX1VQTUEgfAotCQkJCSBCUl9WKQotCQkJCSsgc2l6ZV9iMDsKLQkJfSBlbHNlIHsKLQkJCXVuc2lnbmVkIGxvbmcgcmVnOwotCi0JCQkvKgotCQkJICogTm8gYmFuayAxCi0JCQkgKgotCQkJICogaW52YWxpZGF0ZSBiYW5rCi0JCQkgKi8KLQkJCW1lbWN0bC0+bWVtY19icjIgPSAwOwotCi0JCQkvKiBhZGp1c3QgcmVmcmVzaCByYXRlIGRlcGVuZGluZyBvbiBTRFJBTSB0eXBlLCBvbmUgYmFuayAqLwotCQkJcmVnID0gbWVtY3RsLT5tZW1jX21wdHByOwotCQkJcmVnID4+PSAxOwkvKiByZWR1Y2UgdG8gQ09ORklHX1NZU19NUFRQUl8xQktfOEsgLyBfNEsgKi8KLQkJCW1lbWN0bC0+bWVtY19tcHRwciA9IHJlZzsKLQkJfQotCX0KLQotCXVkZWxheSAoMTAwMDApOwotCi0JcmV0dXJuIChzaXplX2IwICsgc2l6ZV9iMSk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIENoZWNrIG1lbW9yeSByYW5nZSBmb3IgdmFsaWQgUkFNLiBBIHNpbXBsZSBtZW1vcnkgdGVzdCBkZXRlcm1pbmVzCi0gKiB0aGUgYWN0dWFsbHkgYXZhaWxhYmxlIFJBTSBzaXplIGJldHdlZW4gYWRkcmVzc2VzIGBiYXNlJyBhbmQKLSAqIGBiYXNlICsgbWF4c2l6ZScuIFNvbWUgKG5vdCBhbGwpIGhhcmR3YXJlIGVycm9ycyBhcmUgZGV0ZWN0ZWQ6Ci0gKiAtIHNob3J0IGJldHdlZW4gYWRkcmVzcyBsaW5lcwotICogLSBzaG9ydCBiZXR3ZWVuIGRhdGEgbGluZXMKLSAqLwotCi1zdGF0aWMgbG9uZyBpbnQgZHJhbV9zaXplIChsb25nIGludCBtYW1yX3ZhbHVlLCBsb25nIGludCAqYmFzZSwKLQkJCSAgIGxvbmcgaW50IG1heHNpemUpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDT05GSUdfU1lTX0lNTVI7Ci0Jdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1hcC0+aW1fbWVtY3RsOwotCi0JbWVtY3RsLT5tZW1jX21hbXIgPSBtYW1yX3ZhbHVlOwotCi0JcmV0dXJuIChnZXRfcmFtX3NpemUgKGJhc2UsIG1heHNpemUpKTsKLX0KLQotaW50IG1pc2NfaW5pdF9yICh2b2lkKQotewotCWludCBpOwotCWNoYXIgdG1wWzUwXTsKLQl1Y2hhciBldGhhZGRyWzZdOwotCWJkX3QgKmJkID0gZ2QtPmJkOwotCXVsb25nICpteV9zZXJudW0gPSAodW5zaWduZWQgbG9uZyAqKSZiZC0+Ymlfc2VybnVtOwotCi0JLyogbG9hZCB1bmlxdWUgc2VyaWFsIG51bWJlciAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCi0JCWJkLT5iaV9zZXJudW1baV0gPSAqKHVfY2hhciAqKSAoQ09ORklHX1NZU19GTEFTSF9TTl9CQVNFICsgaSk7Ci0KLQkvKiBzYXZlIGVudiB2YXJpYWJsZXMgYWNjb3JkaW5nIHRvIHNlcm51bSAqLwotCXNwcmludGYgKHRtcCwgIiUwOGx4JTA4bHgiLCBteV9zZXJudW1bMF0sIG15X3Nlcm51bVsxXSk7Ci0Jc2V0ZW52ICgic2VyaWFsIyIsIHRtcCk7Ci0KLQlpZiAoIWV0aF9nZXRlbnZfZW5ldGFkZHIoImV0aGFkZHIiLCBldGhhZGRyKSkgewotCQlldGhhZGRyWzBdID0gMHgxMDsKLQkJZXRoYWRkclsxXSA9IDB4MjA7Ci0JCWV0aGFkZHJbMl0gPSAweDMwOwotCQlldGhhZGRyWzNdID0gYmQtPmJpX3Nlcm51bVsxXSA8PCA0IHwgYmQtPmJpX3Nlcm51bVsyXTsKLQkJZXRoYWRkcls0XSA9IGJkLT5iaV9zZXJudW1bNV07Ci0JCWV0aGFkZHJbNV0gPSBiZC0+Ymlfc2VybnVtWzZdOwotCX0KLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbng4MjMvdS1ib290LmxkcyBiL2JvYXJkL254ODIzL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZTkxZmYuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbng4MjMvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDEtMjAxMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotCi1TRUNUSU9OUwotewotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvc3RhcnQubwkoLnRleHQqKQotICAgIGFyY2gvcG93ZXJwYy9jcHUvbXBjOHh4L3RyYXBzLm8JKC50ZXh0KikKLQotICAgICooLnRleHQqKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgS0VFUCgqKC5nb3QyKSkKLSAgICBLRUVQKCooLmdvdCkpCi0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7Ci0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgS0VFUCgqKC5maXh1cCkpCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4gMikgLSAxOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEqKQotICAgICooLnNkYXRhKikKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0KLSAgLiA9IEFMSUdOKDQpOwotICAudV9ib290X2xpc3QgOiB7Ci0JS0VFUCgqKFNPUlQoLnVfYm9vdF9saXN0KikpKTsKLSAgfQotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLmJzcyopCi0gICAqKC5zYnNzKikKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9fYnNzX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL254ODIzL3UtYm9vdC5sZHMuZGVidWcgYi9ib2FyZC9ueDgyMy91LWJvb3QubGRzLmRlYnVnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDA5MWRiLi4wMDAwMDAwCi0tLSBhL2JvYXJkL254ODIzL3UtYm9vdC5sZHMuZGVidWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGFyY2gvcG93ZXJwYy9jcHUvbXBjOHh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGNvbW1vbi9kbG1hbGxvYy5vCSgudGV4dCkKLSAgICBsaWIvdnNwcmludGYubwkoLnRleHQpCi0gICAgbGliL2NyYzMyLm8JCSgudGV4dCkKLQotICAgIC4gPSBlbnZfb2Zmc2V0OwotICAgIGNvbW1vbi9lbnZfZW1iZWRkZWQubygudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLnJvZGF0YSkKLSAgICAqKC5yb2RhdGExKQotICAgICooLnJvZGF0YS5zdHIxLjQpCi0gICAgKiguZWhfZnJhbWUpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwRkZGKSAmIDB4RkZGRkYwMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotCi0gIC4gPSBBTElHTig0KTsKLSAgLnVfYm9vdF9saXN0IDogewotCUtFRVAoKihTT1JUKC51X2Jvb3RfbGlzdCopKSk7Ci0gIH0KLQotCi0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICB9Ci0gIF9fYnNzX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL3BwbWM4MjYwL3N0cmF0YWZsYXNoLmMgYi9ib2FyZC9wcG1jODI2MC9zdHJhdGFmbGFzaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTNjNDJlLi4wMDAwMDAwCi0tLSBhL2JvYXJkL3BwbWM4MjYwL3N0cmF0YWZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MzYgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogQnJhZCBLZW1wLCBTZXJhbm9hIE5ldHdvcmtzLCBCcmFkLktlbXBAc2VyYW5vYS5jb20KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8bXBjODI2MC5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLQotI3VuZGVmICBERUJVR19GTEFTSAotLyoKLSAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgQ29tbW9uIEZsYXNoIEludGVyZmFjZSAoQ0ZJKSBkcml2ZXIgZm9yIFUtQm9vdC4KLSAqIFRoZSB3aWR0aCBvZiB0aGUgcG9ydCBhbmQgdGhlIHdpZHRoIG9mIHRoZSBjaGlwcyBhcmUgZGV0ZXJtaW5lZCBhdCBpbml0aWFsaXphdGlvbi4KLSAqIFRoZXNlIHdpZHRocyBhcmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZm9yIGFjY2VzcyBDRkkgZGF0YSBzdHJ1Y3R1cmVzLgotICogSXQgaGFzIGJlZW4gdGVzdGVkIG9uIGFuIEludGVsIFN0cmF0YWZsYXNoIGltcGxlbWVudGF0aW9uLgotICoKLSAqIFJlZmVyZW5jZXMKLSAqIEpFREVDIFN0YW5kYXJkIEpFU0Q2OCAtIENvbW1vbiBGbGFzaCBJbnRlcmZhY2UgKENGSSkKLSAqIEpFREVDIFN0YW5kYXJkIEpFUDEzNy1BIENvbW1vbiBGbGFzaCBJbnRlcmZhY2UgKENGSSkgSUQgQ29kZXMKLSAqIEludGVsIEFwcGxpY2F0aW9uIE5vdGUgNjQ2IENvbW1vbiBGbGFzaCBJbnRlcmZhY2UgKENGSSkgYW5kIENvbW1hbmQgU2V0cwotICogSW50ZWwgMjkwNjY3LTAwOCAzIFZvbHQgSW50ZWwgU3RyYXRhRmxhc2ggTWVtb3J5IGRhdGFzaGVldAotICoKLSAqIFRPRE8KLSAqIFVzZSBQcmltYXJ5IEV4dGVuZGVkIFF1ZXJ5IHRhYmxlIChQUkkpIGFuZCBBbHRlcm5hdGUgQWxnb3JpdGhtIFF1ZXJ5IFRhYmxlIChBTFQpIHRvIGRldGVybWluZSBpZiBwcm90ZWN0aW9uIGlzIGF2YWlsYWJsZQotICogQWRkIHN1cHBvcnQgZm9yIG90aGVyIGNvbW1hbmQgc2V0cyBVc2UgdGhlIFBSSSBhbmQgQUxUIHRvIGRldGVybWluZSBjb21tYW5kIHNldAotICogVmVyaWZ5IGVyYXNlIGFuZCBwcm9ncmFtIHRpbWVvdXRzLgotICovCi0KLSNkZWZpbmUgRkxBU0hfQ01EX0NGSQkJCTB4OTgKLSNkZWZpbmUgRkxBU0hfQ01EX1JFQURfSUQJCTB4OTAKLSNkZWZpbmUgRkxBU0hfQ01EX1JFU0VUCQkJMHhmZgotI2RlZmluZSBGTEFTSF9DTURfQkxPQ0tfRVJBU0UJCTB4MjAKLSNkZWZpbmUgRkxBU0hfQ01EX0VSQVNFX0NPTkZJUk0JCTB4RDAKLSNkZWZpbmUgRkxBU0hfQ01EX1dSSVRFCQkJMHg0MAotI2RlZmluZSBGTEFTSF9DTURfUFJPVEVDVAkJMHg2MAotI2RlZmluZSBGTEFTSF9DTURfUFJPVEVDVF9TRVQJCTB4MDEKLSNkZWZpbmUgRkxBU0hfQ01EX1BST1RFQ1RfQ0xFQVIJCTB4RDAKLSNkZWZpbmUgRkxBU0hfQ01EX0NMRUFSX1NUQVRVUwkJMHg1MAotI2RlZmluZSBGTEFTSF9DTURfV1JJVEVfVE9fQlVGRkVSICAgICAgIDB4RTgKLSNkZWZpbmUgRkxBU0hfQ01EX1dSSVRFX0JVRkZFUl9DT05GSVJNICAweEQwCi0KLSNkZWZpbmUgRkxBU0hfU1RBVFVTX0RPTkUJCTB4ODAKLSNkZWZpbmUgRkxBU0hfU1RBVFVTX0VTUwkJMHg0MAotI2RlZmluZSBGTEFTSF9TVEFUVVNfRUNMQlMJCTB4MjAKLSNkZWZpbmUgRkxBU0hfU1RBVFVTX1BTTEJTCQkweDEwCi0jZGVmaW5lIEZMQVNIX1NUQVRVU19WUEVOUwkJMHgwOAotI2RlZmluZSBGTEFTSF9TVEFUVVNfUFNTCQkweDA0Ci0jZGVmaW5lIEZMQVNIX1NUQVRVU19EUFMJCTB4MDIKLSNkZWZpbmUgRkxBU0hfU1RBVFVTX1IJCQkweDAxCi0jZGVmaW5lIEZMQVNIX1NUQVRVU19QUk9URUNUCQkweDAxCi0KLSNkZWZpbmUgRkxBU0hfT0ZGU0VUX0NGSQkJMHg1NQotI2RlZmluZSBGTEFTSF9PRkZTRVRfQ0ZJX1JFU1AJCTB4MTAKLSNkZWZpbmUgRkxBU0hfT0ZGU0VUX1dUT1VUCQkweDFGCi0jZGVmaW5lIEZMQVNIX09GRlNFVF9XQlRPVVQgICAgICAgICAgICAgMHgyMAotI2RlZmluZSBGTEFTSF9PRkZTRVRfRVRPVVQJCTB4MjEKLSNkZWZpbmUgRkxBU0hfT0ZGU0VUX0NFVE9VVCAgICAgICAgICAgICAweDIyCi0jZGVmaW5lIEZMQVNIX09GRlNFVF9XTUFYX1RPVVQJCTB4MjMKLSNkZWZpbmUgRkxBU0hfT0ZGU0VUX1dCTUFYX1RPVVQgICAgICAgICAweDI0Ci0jZGVmaW5lIEZMQVNIX09GRlNFVF9FTUFYX1RPVVQJCTB4MjUKLSNkZWZpbmUgRkxBU0hfT0ZGU0VUX0NFTUFYX1RPVVQgICAgICAgICAweDI2Ci0jZGVmaW5lIEZMQVNIX09GRlNFVF9TSVpFCQkweDI3Ci0jZGVmaW5lIEZMQVNIX09GRlNFVF9JTlRFUkZBQ0UgICAgICAgICAgMHgyOAotI2RlZmluZSBGTEFTSF9PRkZTRVRfQlVGRkVSX1NJWkUgICAgICAgIDB4MkEKLSNkZWZpbmUgRkxBU0hfT0ZGU0VUX05VTV9FUkFTRV9SRUdJT05TCTB4MkMKLSNkZWZpbmUgRkxBU0hfT0ZGU0VUX0VSQVNFX1JFR0lPTlMJMHgyRAotI2RlZmluZSBGTEFTSF9PRkZTRVRfUFJPVEVDVAkJMHgwMgotI2RlZmluZSBGTEFTSF9PRkZTRVRfVVNFUl9QUk9URUNUSU9OICAgIDB4ODUKLSNkZWZpbmUgRkxBU0hfT0ZGU0VUX0lOVEVMX1BST1RFQ1RJT04gICAweDgxCi0KLQotI2RlZmluZSBGTEFTSF9NQU5fQ0ZJCQkJMHgwMTAwMDAwMAotCi0KLXR5cGVkZWYgdW5pb24gewotCXVuc2lnbmVkIGNoYXIgYzsKLQl1bnNpZ25lZCBzaG9ydCB3OwotCXVuc2lnbmVkIGxvbmcgbDsKLX0gY2Zpd29yZF90OwotCi10eXBlZGVmIHVuaW9uIHsKLQl1bnNpZ25lZCBjaGFyICogY3A7Ci0JdW5zaWduZWQgc2hvcnQgKndwOwotCXVuc2lnbmVkIGxvbmcgKmxwOwotfSBjZmlwdHJfdDsKLQotI2RlZmluZSBOVU1fRVJBU0VfUkVHSU9OUyA0Ci0KLWZsYXNoX2luZm9fdAlmbGFzaF9pbmZvW0NPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTXTsgLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMJKi8KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbnMKLSAqLwotCi0KLXN0YXRpYyB2b2lkIGZsYXNoX2FkZF9ieXRlKGZsYXNoX2luZm9fdCAqaW5mbywgY2Zpd29yZF90ICogY3dvcmQsIHVjaGFyIGMpOwotc3RhdGljIHZvaWQgZmxhc2hfbWFrZV9jbWQoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgY21kLCB2b2lkICogY21kYnVmKTsKLXN0YXRpYyB2b2lkIGZsYXNoX3dyaXRlX2NtZChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc2VjdCwgdWNoYXIgb2Zmc2V0LCB1Y2hhciBjbWQpOwotc3RhdGljIGludCBmbGFzaF9pc2VxdWFsKGZsYXNoX2luZm9fdCAqIGluZm8sIGludCBzZWN0LCB1Y2hhciBvZmZzZXQsIHVjaGFyIGNtZCk7Ci1zdGF0aWMgaW50IGZsYXNoX2lzc2V0KGZsYXNoX2luZm9fdCAqIGluZm8sIGludCBzZWN0LCB1Y2hhciBvZmZzZXQsIHVjaGFyIGNtZCk7Ci1zdGF0aWMgaW50IGZsYXNoX2RldGVjdF9jZmkoZmxhc2hfaW5mb190ICogaW5mbyk7Ci1zdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKHVsb25nIGJhc2UsIGludCBiYW5rbnVtKTsKLXN0YXRpYyBpbnQgZmxhc2hfd3JpdGVfY2Zpd29yZCAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCBjZml3b3JkX3QgY3dvcmQpOwotc3RhdGljIGludCBmbGFzaF9mdWxsX3N0YXR1c19jaGVjayhmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBzZWN0b3IsIHVsb25nIHRvdXQsIGNoYXIgKiBwcm9tcHQpOwotI2lmZGVmIENPTkZJR19TWVNfRkxBU0hfVVNFX0JVRkZFUl9XUklURQotc3RhdGljIGludCBmbGFzaF93cml0ZV9jZmlidWZmZXIoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgdWNoYXIgKiBjcCwgaW50IGxlbik7Ci0jZW5kaWYKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGNyZWF0ZSBhbiBhZGRyZXNzIGJhc2VkIG9uIHRoZSBvZmZzZXQgYW5kIHRoZSBwb3J0IHdpZHRoCi0gKi8KLWlubGluZSB1Y2hhciAqIGZsYXNoX21ha2VfYWRkcihmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc2VjdCwgaW50IG9mZnNldCkKLXsKLQlyZXR1cm4gKCh1Y2hhciAqKShpbmZvLT5zdGFydFtzZWN0XSArIChvZmZzZXQgKiBpbmZvLT5wb3J0d2lkdGgpKSk7Ci19Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiByZWFkIGEgY2hhcmFjdGVyIGF0IGEgcG9ydCB3aWR0aCBhZGRyZXNzCi0gKi8KLWlubGluZSB1Y2hhciBmbGFzaF9yZWFkX3VjaGFyKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyIG9mZnNldCkKLXsKLQl1Y2hhciAqY3A7Ci0JY3AgPSBmbGFzaF9tYWtlX2FkZHIoaW5mbywgMCwgb2Zmc2V0KTsKLQlyZXR1cm4gKGNwW2luZm8tPnBvcnR3aWR0aCAtIDFdKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogcmVhZCBhIHNob3J0IHdvcmQgYnkgc3dhcHBpbmcgZm9yIHBwYyBmb3JtYXQuCi0gKi8KLXVzaG9ydCBmbGFzaF9yZWFkX3VzaG9ydChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc2VjdCwgIHVjaGFyIG9mZnNldCkKLXsKLSAgICB1Y2hhciAqIGFkZHI7Ci0KLSAgICBhZGRyID0gZmxhc2hfbWFrZV9hZGRyKGluZm8sIHNlY3QsIG9mZnNldCk7Ci0gICAgcmV0dXJuICgoYWRkclsoMippbmZvLT5wb3J0d2lkdGgpIC0gMV0gPDwgOCkgfCBhZGRyW2luZm8tPnBvcnR3aWR0aCAtIDFdKTsKLQotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiByZWFkIGEgbG9uZyB3b3JkIGJ5IHBpY2tpbmcgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgZWFjaCBtYWl4aW11bQotICogcG9ydCBzaXplIHdvcmQuIFN3YXAgZm9yIHBwYyBmb3JtYXQuCi0gKi8KLXVsb25nIGZsYXNoX3JlYWRfbG9uZyhmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc2VjdCwgIHVjaGFyIG9mZnNldCkKLXsKLSAgICB1Y2hhciAqIGFkZHI7Ci0KLSAgICBhZGRyID0gZmxhc2hfbWFrZV9hZGRyKGluZm8sIHNlY3QsIG9mZnNldCk7Ci0gICAgcmV0dXJuICggKGFkZHJbKDIqaW5mby0+cG9ydHdpZHRoKSAtIDFdIDw8IDI0ICkgfCAoYWRkclsoaW5mby0+cG9ydHdpZHRoKSAtMV0gPDwgMTYpIHwKLQkgICAgKGFkZHJbKDQqaW5mby0+cG9ydHdpZHRoKSAtIDFdIDw8IDgpIHwgYWRkclsoMyppbmZvLT5wb3J0d2lkdGgpIC0gMV0pOwotCi19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotdW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nICBhZGRyZXNzOwotCi0KLQkvKiBUaGUgZmxhc2ggaXMgcG9zaXRpb25lZCBiYWNrIHRvIGJhY2ssIHdpdGggdGhlIGRlbXVsdGlwbGV4aW5nIG9mIHRoZSBjaGlwCi0JICogYmFzZWQgb24gdGhlIEEyNCBhZGRyZXNzIGxpbmUuCi0JICoKLQkgKi8KLQotCWFkZHJlc3MgPSBDT05GSUdfU1lTX0ZMQVNIX0JBU0U7Ci0Jc2l6ZSA9IDA7Ci0KLQotCS8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KLQlmb3IgKGk9MDsgaTxDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUzsgKytpKSB7Ci0JCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotCQlzaXplICs9IGZsYXNoX2luZm9baV0uc2l6ZSA9IGZsYXNoX2dldF9zaXplKGFkZHJlc3MsIGkpOwotCQlhZGRyZXNzICs9IENPTkZJR19TWVNfRkxBU0hfSU5DUkVNRU5UOwotCQlpZiAoZmxhc2hfaW5mb1swXS5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7Ci0JCQlwcmludGYgKCIjIyBVbmtub3duIEZMQVNIIG9uIEJhbmsgJWQgLSBTaXplID0gMHglMDhseCA9ICVsZCBNQlxuIixpLAotCQkJCWZsYXNoX2luZm9bMF0uc2l6ZSwgZmxhc2hfaW5mb1tpXS5zaXplPDwyMCk7Ci0JCX0KLQl9Ci0KLQkvKiBNb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLwotI2lmIChDT05GSUdfU1lTX01PTklUT1JfQkFTRSA+PSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UpCi0JZm9yKGk9MDsgZmxhc2hfaW5mb1swXS5zdGFydFtpXSA8IENPTkZJR19TWVNfTU9OSVRPUl9CQVNFK21vbml0b3JfZmxhc2hfbGVuLTE7IGkrKykKLQkJKHZvaWQpZmxhc2hfcmVhbF9wcm90ZWN0KCZmbGFzaF9pbmZvWzBdLCBpLCAxKTsKLSNlbmRpZgotCi0JcmV0dXJuIChzaXplKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1pbnQgZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCi17Ci0JaW50IHJjb2RlID0gMDsKLQlpbnQgcHJvdDsKLQlpbnQgc2VjdDsKLQotCWlmKCBpbmZvLT5mbGFzaF9pZCAhPSBGTEFTSF9NQU5fQ0ZJKSB7Ci0JCXByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAtIGFib3J0ZWRcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0JaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7Ci0JCXByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCXByb3QgPSAwOwotCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgewotCQkJcHJvdCsrOwotCQl9Ci0JfQotCWlmIChwcm90KSB7Ci0JCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKLQkJCXByb3QpOwotCX0gZWxzZSB7Ci0JCXByaW50ZiAoIlxuIik7Ci0JfQotCi0KLQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7IHNlY3QrKykgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7IC8qIG5vdCBwcm90ZWN0ZWQgKi8KLQkJCWZsYXNoX3dyaXRlX2NtZChpbmZvLCBzZWN0LCAwLCBGTEFTSF9DTURfQ0xFQVJfU1RBVFVTKTsKLQkJCWZsYXNoX3dyaXRlX2NtZChpbmZvLCBzZWN0LCAwLCBGTEFTSF9DTURfQkxPQ0tfRVJBU0UpOwotCQkJZmxhc2hfd3JpdGVfY21kKGluZm8sIHNlY3QsIDAsIEZMQVNIX0NNRF9FUkFTRV9DT05GSVJNKTsKLQotCQkJaWYoZmxhc2hfZnVsbF9zdGF0dXNfY2hlY2soaW5mbywgc2VjdCwgaW5mby0+ZXJhc2VfYmxrX3RvdXQsICJlcmFzZSIpKSB7Ci0JCQkJcmNvZGUgPSAxOwotCQkJfSBlbHNlCi0JCQkJcHJpbnRmKCIuIik7Ci0JCX0KLQl9Ci0JcHJpbnRmICgiIGRvbmVcbiIpOwotCXJldHVybiByY29kZTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi12b2lkIGZsYXNoX3ByaW50X2luZm8gIChmbGFzaF9pbmZvX3QgKmluZm8pCi17Ci0JaW50IGk7Ci0KLQlpZiAoaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfTUFOX0NGSSkgewotCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcmludGYoIkNGSSBjb25mb3JtYW50IEZMQVNIICglZCB4ICVkKSIsCi0JICAgICAgIChpbmZvLT5wb3J0d2lkdGgJIDw8IDMgKSwgKGluZm8tPmNoaXB3aWR0aCAgPDwgMyApKTsKLQlwcmludGYgKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAotCQlpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOwotCXByaW50ZigiIEVyYXNlIHRpbWVvdXQgJWxkIG1zLCB3cml0ZSB0aW1lb3V0ICVsZCBtcywgYnVmZmVyIHdyaXRlIHRpbWVvdXQgJWxkIG1zLCBidWZmZXIgc2l6ZSAlZFxuIiwKLQkgICAgICAgaW5mby0+ZXJhc2VfYmxrX3RvdXQsIGluZm8tPndyaXRlX3RvdXQsIGluZm8tPmJ1ZmZlcl93cml0ZV90b3V0LCBpbmZvLT5idWZmZXJfc2l6ZSk7Ci0KLQlwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7Ci0JZm9yIChpPTA7IGk8aW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKLQkJaWYgKChpICUgNSkgPT0gMCkKLQkJCXByaW50ZiAoIlxuIik7Ci0JCXByaW50ZiAoIiAlMDhsWCU1cyIsCi0JCQlpbmZvLT5zdGFydFtpXSwKLQkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAiCi0JCQkpOwotCX0KLQlwcmludGYgKCJcbiIpOwotCXJldHVybjsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29weSBtZW1vcnkgdG8gZmxhc2gsIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICovCi1pbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCi17Ci0JdWxvbmcgd3A7Ci0JdWxvbmcgY3A7Ci0JaW50IGFsbjsKLQljZml3b3JkX3QgY3dvcmQ7Ci0JaW50IGksIHJjOwotCi0JLyogZ2V0IGxvd2VyIGFsaWduZWQgYWRkcmVzcyAqLwotCXdwID0gKGFkZHIgJiB+KGluZm8tPnBvcnR3aWR0aCAtIDEpKTsKLQotCS8qIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgKi8KLQlpZigoYWxuID0gYWRkciAtIHdwKSAhPSAwKSB7Ci0JCWN3b3JkLmwgPSAwOwotCQljcCA9IHdwOwotCQlmb3IoaT0wO2k8YWxuOyArK2ksICsrY3ApCi0JCQlmbGFzaF9hZGRfYnl0ZShpbmZvLCAmY3dvcmQsICgqKHVjaGFyICopY3ApKTsKLQotCQlmb3IoOyAoaTwgaW5mby0+cG9ydHdpZHRoKSAmJiAoY250ID4gMCkgOyBpKyspIHsKLQkJCWZsYXNoX2FkZF9ieXRlKGluZm8sICZjd29yZCwgKnNyYysrKTsKLQkJCWNudC0tOwotCQkJY3ArKzsKLQkJfQotCQlmb3IoOyAoY250ID09IDApICYmIChpIDwgaW5mby0+cG9ydHdpZHRoKTsgKytpLCArK2NwKQotCQkJZmxhc2hfYWRkX2J5dGUoaW5mbywgJmN3b3JkLCAoKih1Y2hhciAqKWNwKSk7Ci0JCWlmKChyYyA9IGZsYXNoX3dyaXRlX2NmaXdvcmQoaW5mbywgd3AsIGN3b3JkKSkgIT0gMCkKLQkJCXJldHVybiByYzsKLQkJd3AgPSBjcDsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfU1lTX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUKLQl3aGlsZShjbnQgPj0gaW5mby0+cG9ydHdpZHRoKSB7Ci0JCWkgPSBpbmZvLT5idWZmZXJfc2l6ZSA+IGNudD8gY250OiBpbmZvLT5idWZmZXJfc2l6ZTsKLQkJaWYoKHJjID0gZmxhc2hfd3JpdGVfY2ZpYnVmZmVyKGluZm8sIHdwLCBzcmMsaSkpICE9IEVSUl9PSykKLQkJCXJldHVybiByYzsKLQkJd3AgKz0gaTsKLQkJc3JjICs9IGk7Ci0JCWNudCAtPWk7Ci0JfQotI2Vsc2UKLQkvKiBoYW5kbGUgdGhlIGFsaWduZWQgcGFydCAqLwotCXdoaWxlKGNudCA+PSBpbmZvLT5wb3J0d2lkdGgpIHsKLQkJY3dvcmQubCA9IDA7Ci0JCWZvcihpID0gMDsgaSA8IGluZm8tPnBvcnR3aWR0aDsgaSsrKSB7Ci0JCQlmbGFzaF9hZGRfYnl0ZShpbmZvLCAmY3dvcmQsICpzcmMrKyk7Ci0JCX0KLQkJaWYoKHJjID0gZmxhc2hfd3JpdGVfY2Zpd29yZChpbmZvLCB3cCwgY3dvcmQpKSAhPSAwKQotCQkJcmV0dXJuIHJjOwotCQl3cCArPSBpbmZvLT5wb3J0d2lkdGg7Ci0JCWNudCAtPSBpbmZvLT5wb3J0d2lkdGg7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19TWVNfRkxBU0hfVVNFX0JVRkZFUl9XUklURSAqLwotCWlmIChjbnQgPT0gMCkgewotCQlyZXR1cm4gKDApOwotCX0KLQotCS8qCi0JICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzCi0JICovCi0JY3dvcmQubCA9IDA7Ci0JZm9yIChpPTAsIGNwPXdwOyAoaTxpbmZvLT5wb3J0d2lkdGgpICYmIChjbnQ+MCk7ICsraSwgKytjcCkgewotCQlmbGFzaF9hZGRfYnl0ZShpbmZvLCAmY3dvcmQsICpzcmMrKyk7Ci0JCS0tY250OwotCX0KLQlmb3IgKDsgaTxpbmZvLT5wb3J0d2lkdGg7ICsraSwgKytjcCkgewotCQlmbGFzaF9hZGRfYnl0ZShpbmZvLCAmIGN3b3JkLCAoKih1Y2hhciAqKWNwKSk7Ci0JfQotCi0JcmV0dXJuIGZsYXNoX3dyaXRlX2NmaXdvcmQoaW5mbywgd3AsIGN3b3JkKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1pbnQgZmxhc2hfcmVhbF9wcm90ZWN0KGZsYXNoX2luZm9fdCAqaW5mbywgbG9uZyBzZWN0b3IsIGludCBwcm90KQotewotCWludCByZXRjb2RlID0gMDsKLQotCWZsYXNoX3dyaXRlX2NtZChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX0NNRF9DTEVBUl9TVEFUVVMpOwotCWZsYXNoX3dyaXRlX2NtZChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX0NNRF9QUk9URUNUKTsKLQlpZihwcm90KQotCQlmbGFzaF93cml0ZV9jbWQoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9DTURfUFJPVEVDVF9TRVQpOwotCWVsc2UKLQkJZmxhc2hfd3JpdGVfY21kKGluZm8sIHNlY3RvciwgMCwgRkxBU0hfQ01EX1BST1RFQ1RfQ0xFQVIpOwotCi0JaWYoKHJldGNvZGUgPSBmbGFzaF9mdWxsX3N0YXR1c19jaGVjayhpbmZvLCBzZWN0b3IsIGluZm8tPmVyYXNlX2Jsa190b3V0LAotCQkJCQkgcHJvdD8icHJvdGVjdCI6InVucHJvdGVjdCIpKSA9PSAwKSB7Ci0KLQkJaW5mby0+cHJvdGVjdFtzZWN0b3JdID0gcHJvdDsKLQkJLyogSW50ZWwncyB1bnByb3RlY3QgdW5wcm90ZWN0cyBhbGwgbG9ja2luZyAqLwotCQlpZihwcm90ID09IDApIHsKLQkJCWludCBpOwotCQkJZm9yKGkgPSAwIDsgaTxpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgewotCQkJCWlmKGluZm8tPnByb3RlY3RbaV0pCi0JCQkJCWZsYXNoX3JlYWxfcHJvdGVjdChpbmZvLCBpLCAxKTsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiByZXRjb2RlOwotfQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIHdhaXQgZm9yIFhTUi43IHRvIGJlIHNldC4gVGltZSBvdXQgd2l0aCBhbiBlcnJvciBpZiBpdCBkb2VzIG5vdC4KLSAqICBUaGlzIHJvdXRpbmUgZG9lcyBub3Qgc2V0IHRoZSBmbGFzaCB0byByZWFkLWFycmF5IG1vZGUuCi0gKi8KLXN0YXRpYyBpbnQgZmxhc2hfc3RhdHVzX2NoZWNrKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIHNlY3RvciwgdWxvbmcgdG91dCwgY2hhciAqIHByb21wdCkKLXsKLQl1bG9uZyBzdGFydDsKLQotCS8qIFdhaXQgZm9yIGNvbW1hbmQgY29tcGxldGlvbiAqLwotCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKLQl3aGlsZSghZmxhc2hfaXNzZXQoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9TVEFUVVNfRE9ORSkpIHsKLQkJaWYgKGdldF90aW1lcihzdGFydCkgPiBpbmZvLT5lcmFzZV9ibGtfdG91dCkgewotCQkJcHJpbnRmKCJGbGFzaCAlcyB0aW1lb3V0IGF0IGFkZHJlc3MgJWx4XG4iLCBwcm9tcHQsIGluZm8tPnN0YXJ0W3NlY3Rvcl0pOwotCQkJZmxhc2hfd3JpdGVfY21kKGluZm8sIHNlY3RvciwgMCwgRkxBU0hfQ01EX1JFU0VUKTsKLQkJCXJldHVybiBFUlJfVElNT1VUOwotCQl9Ci0JfQotCXJldHVybiBFUlJfT0s7Ci19Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBXYWl0IGZvciBYU1IuNyB0byBiZSBzZXQsIGlmIGl0IHRpbWVzIG91dCBwcmludCBhbiBlcnJvciwgb3RoZXJ3aXNlIGRvIGEgZnVsbCBzdGF0dXMgY2hlY2suCi0gKiBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgZmxhc2ggdG8gcmVhZC1hcnJheSBtb2RlLgotICovCi1zdGF0aWMgaW50IGZsYXNoX2Z1bGxfc3RhdHVzX2NoZWNrKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIHNlY3RvciwgdWxvbmcgdG91dCwgY2hhciAqIHByb21wdCkKLXsKLQlpbnQgcmV0Y29kZTsKLQlyZXRjb2RlID0gZmxhc2hfc3RhdHVzX2NoZWNrKGluZm8sIHNlY3RvciwgdG91dCwgcHJvbXB0KTsKLQlpZigocmV0Y29kZSA9PSBFUlJfT0spICYmICFmbGFzaF9pc2VxdWFsKGluZm8sc2VjdG9yLCAwLCBGTEFTSF9TVEFUVVNfRE9ORSkpIHsKLQkJcmV0Y29kZSA9IEVSUl9JTlZBTDsKLQkJcHJpbnRmKCJGbGFzaCAlcyBlcnJvciBhdCBhZGRyZXNzICVseFxuIiwgcHJvbXB0LGluZm8tPnN0YXJ0W3NlY3Rvcl0pOwotCQlpZihmbGFzaF9pc3NldChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX1NUQVRVU19FQ0xCUyB8IEZMQVNIX1NUQVRVU19QU0xCUykpewotCQkJcHJpbnRmKCJDb21tYW5kIFNlcXVlbmNlIEVycm9yLlxuIik7Ci0JCX0gZWxzZSBpZihmbGFzaF9pc3NldChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX1NUQVRVU19FQ0xCUykpewotCQkJcHJpbnRmKCJCbG9jayBFcmFzZSBFcnJvci5cbiIpOwotCQkJcmV0Y29kZSA9IEVSUl9OT1RfRVJBU0VEOwotCQl9IGVsc2UgaWYgKGZsYXNoX2lzc2V0KGluZm8sIHNlY3RvciwgMCwgRkxBU0hfU1RBVFVTX1BTTEJTKSkgewotCQkJcHJpbnRmKCJMb2NraW5nIEVycm9yXG4iKTsKLQkJfQotCQlpZihmbGFzaF9pc3NldChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX1NUQVRVU19EUFMpKXsKLQkJCXByaW50ZigiQmxvY2sgbG9ja2VkLlxuIik7Ci0JCQlyZXRjb2RlID0gRVJSX1BST1RFQ1RFRDsKLQkJfQotCQlpZihmbGFzaF9pc3NldChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX1NUQVRVU19WUEVOUykpCi0JCQlwcmludGYoIlZwcCBMb3cgRXJyb3IuXG4iKTsKLQl9Ci0JZmxhc2hfd3JpdGVfY21kKGluZm8sIHNlY3RvciwgMCwgRkxBU0hfQ01EX1JFU0VUKTsKLQlyZXR1cm4gcmV0Y29kZTsKLX0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotc3RhdGljIHZvaWQgZmxhc2hfYWRkX2J5dGUoZmxhc2hfaW5mb190ICppbmZvLCBjZml3b3JkX3QgKiBjd29yZCwgdWNoYXIgYykKLXsKLQlzd2l0Y2goaW5mby0+cG9ydHdpZHRoKSB7Ci0JY2FzZSBGTEFTSF9DRklfOEJJVDoKLQkJY3dvcmQtPmMgPSBjOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0NGSV8xNkJJVDoKLQkJY3dvcmQtPncgPSAoY3dvcmQtPncgPDwgOCkgfCBjOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0NGSV8zMkJJVDoKLQkJY3dvcmQtPmwgPSAoY3dvcmQtPmwgPDwgOCkgfCBjOwotCX0KLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBtYWtlIGEgcHJvcGVyIHNpemVkIGNvbW1hbmQgYmFzZWQgb24gdGhlIHBvcnQgYW5kIGNoaXAgd2lkdGhzCi0gKi8KLXN0YXRpYyB2b2lkIGZsYXNoX21ha2VfY21kKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyIGNtZCwgdm9pZCAqIGNtZGJ1ZikKLXsKLQlpbnQgaTsKLQl1Y2hhciAqY3AgPSAodWNoYXIgKiljbWRidWY7Ci0JZm9yKGk9MDsgaTwgaW5mby0+cG9ydHdpZHRoOyBpKyspCi0JCSpjcCsrID0gKChpKzEpICUgaW5mby0+Y2hpcHdpZHRoKSA/ICdcMCc6Y21kOwotfQotCi0vKgotICogV3JpdGUgYSBwcm9wZXIgc2l6ZWQgY29tbWFuZCB0byB0aGUgY29ycmVjdCBhZGRyZXNzCi0gKi8KLXN0YXRpYyB2b2lkIGZsYXNoX3dyaXRlX2NtZChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc2VjdCwgdWNoYXIgb2Zmc2V0LCB1Y2hhciBjbWQpCi17Ci0KLQl2b2xhdGlsZSBjZmlwdHJfdCBhZGRyOwotCWNmaXdvcmRfdCBjd29yZDsKLQlhZGRyLmNwID0gZmxhc2hfbWFrZV9hZGRyKGluZm8sIHNlY3QsIG9mZnNldCk7Ci0JZmxhc2hfbWFrZV9jbWQoaW5mbywgY21kLCAmY3dvcmQpOwotCXN3aXRjaChpbmZvLT5wb3J0d2lkdGgpIHsKLQljYXNlIEZMQVNIX0NGSV84QklUOgotCQkqYWRkci5jcCA9IGN3b3JkLmM7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgotCQkqYWRkci53cCA9IGN3b3JkLnc7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgotCQkqYWRkci5scCA9IGN3b3JkLmw7Ci0JCWJyZWFrOwotCX0KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgaW50IGZsYXNoX2lzZXF1YWwoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNlY3QsIHVjaGFyIG9mZnNldCwgdWNoYXIgY21kKQotewotCWNmaXB0cl90IGNwdHI7Ci0JY2Zpd29yZF90IGN3b3JkOwotCWludCByZXR2YWw7Ci0JY3B0ci5jcCA9IGZsYXNoX21ha2VfYWRkcihpbmZvLCBzZWN0LCBvZmZzZXQpOwotCWZsYXNoX21ha2VfY21kKGluZm8sIGNtZCwgJmN3b3JkKTsKLQlzd2l0Y2goaW5mby0+cG9ydHdpZHRoKSB7Ci0JY2FzZSBGTEFTSF9DRklfOEJJVDoKLQkJcmV0dmFsID0gKGNwdHIuY3BbMF0gPT0gY3dvcmQuYyk7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgotCQlyZXR2YWwgPSAoY3B0ci53cFswXSA9PSBjd29yZC53KTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9DRklfMzJCSVQ6Ci0JCXJldHZhbCA9IChjcHRyLmxwWzBdID09IGN3b3JkLmwpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR2YWwgPSAwOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJldHZhbDsKLX0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotc3RhdGljIGludCBmbGFzaF9pc3NldChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc2VjdCwgdWNoYXIgb2Zmc2V0LCB1Y2hhciBjbWQpCi17Ci0JY2ZpcHRyX3QgY3B0cjsKLQljZml3b3JkX3QgY3dvcmQ7Ci0JaW50IHJldHZhbDsKLQljcHRyLmNwID0gZmxhc2hfbWFrZV9hZGRyKGluZm8sIHNlY3QsIG9mZnNldCk7Ci0JZmxhc2hfbWFrZV9jbWQoaW5mbywgY21kLCAmY3dvcmQpOwotCXN3aXRjaChpbmZvLT5wb3J0d2lkdGgpIHsKLQljYXNlIEZMQVNIX0NGSV84QklUOgotCQlyZXR2YWwgPSAoKGNwdHIuY3BbMF0gJiBjd29yZC5jKSA9PSBjd29yZC5jKTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9DRklfMTZCSVQ6Ci0JCXJldHZhbCA9ICgoY3B0ci53cFswXSAmIGN3b3JkLncpID09IGN3b3JkLncpOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0NGSV8zMkJJVDoKLQkJcmV0dmFsID0gKChjcHRyLmxwWzBdICYgY3dvcmQubCkgPT0gY3dvcmQubCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHZhbCA9IDA7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBkZXRlY3QgaWYgZmxhc2ggaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBDb21tb24gRmxhc2ggSW50ZXJmYWNlIChDRkkpCi0gKiBodHRwOi8vd3d3LmplZGVjLm9yZy9kb3dubG9hZC9zZWFyY2gvamVzZDY4LnBkZgotICoKLSovCi1zdGF0aWMgaW50IGZsYXNoX2RldGVjdF9jZmkoZmxhc2hfaW5mb190ICogaW5mbykKLXsKLQotCWZvcihpbmZvLT5wb3J0d2lkdGg9RkxBU0hfQ0ZJXzhCSVQ7IGluZm8tPnBvcnR3aWR0aCA8PSBGTEFTSF9DRklfMzJCSVQ7Ci0JICAgIGluZm8tPnBvcnR3aWR0aCA8PD0gMSkgewotCQlmb3IoaW5mby0+Y2hpcHdpZHRoID1GTEFTSF9DRklfQlk4OwotCQkgICAgaW5mby0+Y2hpcHdpZHRoIDw9IGluZm8tPnBvcnR3aWR0aDsKLQkJICAgIGluZm8tPmNoaXB3aWR0aCA8PD0gMSkgewotCQkJZmxhc2hfd3JpdGVfY21kKGluZm8sIDAsIDAsIEZMQVNIX0NNRF9SRVNFVCk7Ci0JCQlmbGFzaF93cml0ZV9jbWQoaW5mbywgMCwgRkxBU0hfT0ZGU0VUX0NGSSwgRkxBU0hfQ01EX0NGSSk7Ci0JCQlpZihmbGFzaF9pc2VxdWFsKGluZm8sIDAsIEZMQVNIX09GRlNFVF9DRklfUkVTUCwnUScpICYmCi0JCQkgICBmbGFzaF9pc2VxdWFsKGluZm8sIDAsIEZMQVNIX09GRlNFVF9DRklfUkVTUCArIDEsICdSJykgJiYKLQkJCSAgIGZsYXNoX2lzZXF1YWwoaW5mbywgMCwgRkxBU0hfT0ZGU0VUX0NGSV9SRVNQICsgMiwgJ1knKSkKLQkJCQlyZXR1cm4gMTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGNvZGUgY2Fubm90IGJlIHJ1biBmcm9tIEZMQVNIIQotICoKLSAqLwotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplICh1bG9uZyBiYXNlLCBpbnQgYmFua251bSkKLXsKLQlmbGFzaF9pbmZvX3QgKiBpbmZvID0gJmZsYXNoX2luZm9bYmFua251bV07Ci0JaW50IGksIGo7Ci0JaW50IHNlY3RfY250OwotCXVuc2lnbmVkIGxvbmcgc2VjdG9yOwotCXVuc2lnbmVkIGxvbmcgdG1wOwotCWludCBzaXplX3JhdGlvOwotCXVjaGFyIG51bV9lcmFzZV9yZWdpb25zOwotCWludCAgZXJhc2VfcmVnaW9uX3NpemU7Ci0JaW50ICBlcmFzZV9yZWdpb25fY291bnQ7Ci0KLQlpbmZvLT5zdGFydFswXSA9IGJhc2U7Ci0KLQlpZihmbGFzaF9kZXRlY3RfY2ZpKGluZm8pKXsKLQkJc2l6ZV9yYXRpbyA9IGluZm8tPnBvcnR3aWR0aCAvIGluZm8tPmNoaXB3aWR0aDsKLQkJbnVtX2VyYXNlX3JlZ2lvbnMgPSBmbGFzaF9yZWFkX3VjaGFyKGluZm8sIEZMQVNIX09GRlNFVF9OVU1fRVJBU0VfUkVHSU9OUyk7Ci0jaWZkZWYgREVCVUdfRkxBU0gKLQkJcHJpbnRmKCJmb3VuZCAlZCBlcmFzZSByZWdpb25zXG4iLCBudW1fZXJhc2VfcmVnaW9ucyk7Ci0jZW5kaWYKLQkJc2VjdF9jbnQgPSAwOwotCQlzZWN0b3IgPSBiYXNlOwotCQlmb3IoaSA9IDAgOyBpIDwgbnVtX2VyYXNlX3JlZ2lvbnM7IGkrKykgewotCQkJaWYoaSA+IE5VTV9FUkFTRV9SRUdJT05TKSB7Ci0JCQkJcHJpbnRmKCIlZCBlcmFzZSByZWdpb25zIGZvdW5kLCBvbmx5ICVkIHVzZWRcbiIsCi0JCQkJICAgICAgIG51bV9lcmFzZV9yZWdpb25zLCBOVU1fRVJBU0VfUkVHSU9OUyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQl0bXAgPSBmbGFzaF9yZWFkX2xvbmcoaW5mbywgMCwgRkxBU0hfT0ZGU0VUX0VSQVNFX1JFR0lPTlMpOwotCQkJZXJhc2VfcmVnaW9uX3NpemUgPSAodG1wICYgMHhmZmZmKT8gKCh0bXAgJiAweGZmZmYpICogMjU2KTogMTI4OwotCQkJdG1wID4+PSAxNjsKLQkJCWVyYXNlX3JlZ2lvbl9jb3VudCA9ICh0bXAgJiAweGZmZmYpICsxOwotCQkJZm9yKGogPSAwOyBqPCBlcmFzZV9yZWdpb25fY291bnQ7IGorKykgewotCQkJCWluZm8tPnN0YXJ0W3NlY3RfY250XSA9IHNlY3RvcjsKLQkJCQlzZWN0b3IgKz0gKGVyYXNlX3JlZ2lvbl9zaXplICogc2l6ZV9yYXRpbyk7Ci0JCQkJaW5mby0+cHJvdGVjdFtzZWN0X2NudF0gPSBmbGFzaF9pc3NldChpbmZvLCBzZWN0X2NudCwgRkxBU0hfT0ZGU0VUX1BST1RFQ1QsIEZMQVNIX1NUQVRVU19QUk9URUNUKTsKLQkJCQlzZWN0X2NudCsrOwotCQkJfQotCQl9Ci0KLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gc2VjdF9jbnQ7Ci0JCS8qIG11bHRpcGx5IHRoZSBzaXplIGJ5IHRoZSBudW1iZXIgb2YgY2hpcHMgKi8KLQkJaW5mby0+c2l6ZSA9ICgxIDw8IGZsYXNoX3JlYWRfdWNoYXIoaW5mbywgRkxBU0hfT0ZGU0VUX1NJWkUpKSAqIHNpemVfcmF0aW87Ci0JCWluZm8tPmJ1ZmZlcl9zaXplID0gKDEgPDwgZmxhc2hfcmVhZF91c2hvcnQoaW5mbywgMCwgRkxBU0hfT0ZGU0VUX0JVRkZFUl9TSVpFKSk7Ci0JCXRtcCA9IDEgPDwgZmxhc2hfcmVhZF91Y2hhcihpbmZvLCBGTEFTSF9PRkZTRVRfRVRPVVQpOwotCQlpbmZvLT5lcmFzZV9ibGtfdG91dCA9ICh0bXAgKiAoMSA8PCBmbGFzaF9yZWFkX3VjaGFyKGluZm8sIEZMQVNIX09GRlNFVF9FTUFYX1RPVVQpKSk7Ci0JCXRtcCA9IDEgPDwgZmxhc2hfcmVhZF91Y2hhcihpbmZvLCBGTEFTSF9PRkZTRVRfV0JUT1VUKTsKLQkJaW5mby0+YnVmZmVyX3dyaXRlX3RvdXQgPSAodG1wICogKDEgPDwgZmxhc2hfcmVhZF91Y2hhcihpbmZvLCBGTEFTSF9PRkZTRVRfV0JNQVhfVE9VVCkpKTsKLQkJdG1wID0gMSA8PCBmbGFzaF9yZWFkX3VjaGFyKGluZm8sIEZMQVNIX09GRlNFVF9XVE9VVCk7Ci0JCWluZm8tPndyaXRlX3RvdXQgPSAodG1wICogKDEgPDwgZmxhc2hfcmVhZF91Y2hhcihpbmZvLCBGTEFTSF9PRkZTRVRfV01BWF9UT1VUKSkpLyAxMDAwOwotCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9DRkk7Ci0JfQotCi0JZmxhc2hfd3JpdGVfY21kKGluZm8sIDAsIDAsIEZMQVNIX0NNRF9SRVNFVCk7Ci0JcmV0dXJuKGluZm8tPnNpemUpOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotc3RhdGljIGludCBmbGFzaF93cml0ZV9jZml3b3JkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIGNmaXdvcmRfdCBjd29yZCkKLXsKLQotCWNmaXB0cl90IGN0bGFkZHI7Ci0JY2ZpcHRyX3QgY3B0cjsKLQlpbnQgZmxhZzsKLQotCWN0bGFkZHIuY3AgPSBmbGFzaF9tYWtlX2FkZHIoaW5mbywgMCwgMCk7Ci0JY3B0ci5jcCA9ICh1Y2hhciAqKWRlc3Q7Ci0KLQotCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwotCXN3aXRjaChpbmZvLT5wb3J0d2lkdGgpIHsKLQljYXNlIEZMQVNIX0NGSV84QklUOgotCQlmbGFnID0gKChjcHRyLmNwWzBdICYgY3dvcmQuYykgPT0gY3dvcmQuYyk7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgotCQlmbGFnID0gKChjcHRyLndwWzBdICYgY3dvcmQudykgPT0gY3dvcmQudyk7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgotCQlmbGFnID0gKChjcHRyLmxwWzBdICYgY3dvcmQubCkJPT0gY3dvcmQubCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAyOwotCX0KLQlpZighZmxhZykKLQkJcmV0dXJuIDI7Ci0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQlmbGFzaF93cml0ZV9jbWQoaW5mbywgMCwgMCwgRkxBU0hfQ01EX0NMRUFSX1NUQVRVUyk7Ci0JZmxhc2hfd3JpdGVfY21kKGluZm8sIDAsIDAsIEZMQVNIX0NNRF9XUklURSk7Ci0KLQlzd2l0Y2goaW5mby0+cG9ydHdpZHRoKSB7Ci0JY2FzZSBGTEFTSF9DRklfOEJJVDoKLQkJY3B0ci5jcFswXSA9IGN3b3JkLmM7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgotCQljcHRyLndwWzBdID0gY3dvcmQudzsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9DRklfMzJCSVQ6Ci0JCWNwdHIubHBbMF0gPSBjd29yZC5sOwotCQlicmVhazsKLQl9Ci0KLQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLQlpZihmbGFnKQotCQllbmFibGVfaW50ZXJydXB0cygpOwotCi0JcmV0dXJuIGZsYXNoX2Z1bGxfc3RhdHVzX2NoZWNrKGluZm8sIDAsIGluZm8tPndyaXRlX3RvdXQsICJ3cml0ZSIpOwotfQotCi0jaWZkZWYgQ09ORklHX1NZU19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCi0KLS8qIGxvb3AgdGhyb3VnaCB0aGUgc2VjdG9ycyBmcm9tIHRoZSBoaWdoZXN0IGFkZHJlc3MKLSAqIHdoZW4gdGhlIHBhc3NlZCBhZGRyZXNzIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIHNlY3RvciBhZGRyZXNzCi0gKiB3ZSBoYXZlIGEgbWF0Y2gKLSAqLwotc3RhdGljIGludCBmaW5kX3NlY3RvcihmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGFkZHIpCi17Ci0JaW50IHNlY3RvcjsKLQlmb3Ioc2VjdG9yID0gaW5mby0+c2VjdG9yX2NvdW50IC0gMTsgc2VjdG9yID49IDA7IHNlY3Rvci0tKSB7Ci0JCWlmKGFkZHIgPj0gaW5mby0+c3RhcnRbc2VjdG9yXSkKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gc2VjdG9yOwotfQotCi1zdGF0aWMgaW50IGZsYXNoX3dyaXRlX2NmaWJ1ZmZlcihmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBkZXN0LCB1Y2hhciAqIGNwLCBpbnQgbGVuKQotewotCi0JaW50IHNlY3RvcjsKLQlpbnQgY250OwotCWludCByZXRjb2RlOwotCXZvbGF0aWxlIGNmaXB0cl90IHNyYzsKLQl2b2xhdGlsZSBjZmlwdHJfdCBkc3Q7Ci0KLQlzcmMuY3AgPSBjcDsKLQlkc3QuY3AgPSAodWNoYXIgKilkZXN0OwotCXNlY3RvciA9IGZpbmRfc2VjdG9yKGluZm8sIGRlc3QpOwotCWZsYXNoX3dyaXRlX2NtZChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX0NNRF9DTEVBUl9TVEFUVVMpOwotCWZsYXNoX3dyaXRlX2NtZChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX0NNRF9XUklURV9UT19CVUZGRVIpOwotCWlmKChyZXRjb2RlID0gZmxhc2hfc3RhdHVzX2NoZWNrKGluZm8sIHNlY3RvciwgaW5mby0+YnVmZmVyX3dyaXRlX3RvdXQsCi0JCQkJCSAid3JpdGUgdG8gYnVmZmVyIikpID09IEVSUl9PSykgewotCQlzd2l0Y2goaW5mby0+cG9ydHdpZHRoKSB7Ci0JCWNhc2UgRkxBU0hfQ0ZJXzhCSVQ6Ci0JCQljbnQgPSBsZW47Ci0JCQlicmVhazsKLQkJY2FzZSBGTEFTSF9DRklfMTZCSVQ6Ci0JCQljbnQgPSBsZW4gPj4gMTsKLQkJCWJyZWFrOwotCQljYXNlIEZMQVNIX0NGSV8zMkJJVDoKLQkJCWNudCA9IGxlbiA+PiAyOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gRVJSX0lOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJZmxhc2hfd3JpdGVfY21kKGluZm8sIHNlY3RvciwgMCwgKHVjaGFyKWNudC0xKTsKLQkJd2hpbGUoY250LS0gPiAwKSB7Ci0JCQlzd2l0Y2goaW5mby0+cG9ydHdpZHRoKSB7Ci0JCQljYXNlIEZMQVNIX0NGSV84QklUOgotCQkJCSpkc3QuY3ArKyA9ICpzcmMuY3ArKzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgotCQkJCSpkc3Qud3ArKyA9ICpzcmMud3ArKzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgotCQkJCSpkc3QubHArKyA9ICpzcmMubHArKzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIEVSUl9JTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlmbGFzaF93cml0ZV9jbWQoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9DTURfV1JJVEVfQlVGRkVSX0NPTkZJUk0pOwotCQlyZXRjb2RlID0gZmxhc2hfZnVsbF9zdGF0dXNfY2hlY2soaW5mbywgc2VjdG9yLCBpbmZvLT5idWZmZXJfd3JpdGVfdG91dCwKLQkJCQkJICAgICAiYnVmZmVyIHdyaXRlIik7Ci0JfQotCWZsYXNoX3dyaXRlX2NtZChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX0NNRF9DTEVBUl9TVEFUVVMpOwotCXJldHVybiByZXRjb2RlOwotfQotI2VuZGlmIC8qIENPTkZJR19TWVNfVVNFX0ZMQVNIX0JVRkZFUl9XUklURSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvcHJvZHJpdmUvY29tbW9uL2ZsYXNoLmMgYi9ib2FyZC9wcm9kcml2ZS9jb21tb24vZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk1NDA1MS4uMDAwMDAwMAotLS0gYS9ib2FyZC9wcm9kcml2ZS9jb21tb24vZmxhc2guYworKysgL2Rldi9udWxsCkBAIC0xLDU0NCArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDA2Ci0gKiBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLQotZmxhc2hfaW5mb190CWZsYXNoX2luZm9bQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1NdOyAvKiBpbmZvIGZvciBGTEFTSCBjaGlwcwkqLwotCi0vKgotICogRnVuY3Rpb25zCi0gKi8KLXN0YXRpYyBpbnQgd3JpdGVfd29yZChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpOwotCi12b2lkIGZsYXNoX3ByaW50X2luZm8oZmxhc2hfaW5mb190ICppbmZvKQotewotCWludCBpOwotCWludCBrOwotCWludCBzaXplOwotCWludCBlcmFzZWQ7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqZmxhc2g7Ci0KLQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKLQljYXNlIEZMQVNIX01BTl9BTUQ6CXByaW50ZiAoIkFNRCAiKTsJCWJyZWFrOwotCWNhc2UgRkxBU0hfTUFOX0ZVSjoJcHJpbnRmICgiRlVKSVRTVSAiKTsJCWJyZWFrOwotCWNhc2UgRkxBU0hfTUFOX1NTVDoJcHJpbnRmICgiU1NUICIpOwkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9NQU5fU1RNOglwcmludGYgKCJTVCAiKTsJCQlicmVhazsKLQljYXNlIEZMQVNIX01BTl9FWENFTDoJcHJpbnRmICgiRXhjZWwgU2VtaWNvbmR1Y3RvciAiKTsgYnJlYWs7Ci0JZGVmYXVsdDoJCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOwlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKLQljYXNlIEZMQVNIX0FNNDAwQjoJcHJpbnRmICgiQU0yOUxWNDAwQiAoNCBNYml0LCBib3R0b20gYm9vdCBzZWN0KVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQU00MDBUOglwcmludGYgKCJBTTI5TFY0MDBUICg0IE1iaXQsIHRvcCBib290IHNlY3RvcilcbiIpOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0FNODAwQjoJcHJpbnRmICgiQU0yOUxWODAwQiAoOCBNYml0LCBib3R0b20gYm9vdCBzZWN0KVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQU04MDBUOglwcmludGYgKCJBTTI5TFY4MDBUICg4IE1iaXQsIHRvcCBib290IHNlY3RvcilcbiIpOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0FNMTYwQjoJcHJpbnRmICgiQU0yOUxWMTYwQiAoMTYgTWJpdCwgYm90dG9tIGJvb3Qgc2VjdClcbiIpOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0FNMTYwVDoJcHJpbnRmICgiQU0yOUxWMTYwVCAoMTYgTWJpdCwgdG9wIGJvb3Qgc2VjdG9yKVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQU0zMjBUOglwcmludGYgKCJBTTI5TFYzMjBUICgzMiBNLCB0b3Agc2VjdG9yKVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQU0zMjBCOglwcmludGYgKCJBTTI5TFYzMjBCICgzMiBNLCBib3R0b20gc2VjdG9yKVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQU1ETDMyMlQ6CXByaW50ZiAoIkFNMjlETDMyMlQgKDMyIE0sIHRvcCBzZWN0b3IpXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9BTURMMzIyQjoJcHJpbnRmICgiQU0yOURMMzIyQiAoMzIgTSwgYm90dG9tIHNlY3RvcilcbiIpOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0FNREwzMjNUOglwcmludGYgKCJBTTI5REwzMjNUICgzMiBNLCB0b3Agc2VjdG9yKVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQU1ETDMyM0I6CXByaW50ZiAoIkFNMjlETDMyM0IgKDMyIE0sIGJvdHRvbSBzZWN0b3IpXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9TU1QwMjA6CXByaW50ZiAoIlNTVDM5TEYvVkYwMjAgKDIgTWJpdCwgdW5pZm9ybSBzZWN0b3Igc2l6ZSlcbiIpOwotCQlicmVhazsKLQljYXNlIEZMQVNIX1NTVDA0MDoJcHJpbnRmICgiU1NUMzlMRi9WRjA0MCAoNCBNYml0LCB1bmlmb3JtIHNlY3RvciBzaXplKVxuIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CQlwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7Ci0JCWJyZWFrOwotCX0KLQotCXByaW50ZiAoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCi0JCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7Ci0KLQlwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7Ci0JZm9yIChpPTA7IGk8aW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKLSNpZmRlZiBDT05GSUdfU1lTX0ZMQVNIX0VNUFRZX0lORk8KLQkJLyoKLQkJICogQ2hlY2sgaWYgd2hvbGUgc2VjdG9yIGlzIGVyYXNlZAotCQkgKi8KLQkJaWYgKGkgIT0gKGluZm8tPnNlY3Rvcl9jb3VudC0xKSkKLQkJCXNpemUgPSBpbmZvLT5zdGFydFtpKzFdIC0gaW5mby0+c3RhcnRbaV07Ci0JCWVsc2UKLQkJCXNpemUgPSBpbmZvLT5zdGFydFswXSArIGluZm8tPnNpemUgLSBpbmZvLT5zdGFydFtpXTsKLQkJZXJhc2VkID0gMTsKLQkJZmxhc2ggPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKWluZm8tPnN0YXJ0W2ldOwotCQlzaXplID0gc2l6ZSA+PiAyOyAgICAgICAgLyogZGl2aWRlIGJ5IDQgZm9yIGxvbmd3b3JkIGFjY2VzcyAqLwotCQlmb3IgKGs9MDsgazxzaXplOyBrKyspIHsKLQkJCWlmICgqZmxhc2grKyAhPSAweGZmZmZmZmZmKSB7Ci0JCQkJZXJhc2VkID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmICgoaSAlIDUpID09IDApCi0JCQlwcmludGYgKCJcbiAgICIpOwotCQkvKiBwcmludCBlbXB0eSBhbmQgcmVhZC1vbmx5IGluZm8gKi8KLQkJcHJpbnRmICgiICUwOGxYJXMlcyIsCi0JCQlpbmZvLT5zdGFydFtpXSwKLQkJCWVyYXNlZCA/ICIgRSIgOiAiICAiLAotCQkJaW5mby0+cHJvdGVjdFtpXSA/ICJSTyAiIDogIiAgICIpOwotI2Vsc2UKLQkJaWYgKChpICUgNSkgPT0gMCkKLQkJCXByaW50ZiAoIlxuICAgIik7Ci0JCXByaW50ZiAoIiAlMDhsWCVzIiwKLQkJCWluZm8tPnN0YXJ0W2ldLAotCQkJaW5mby0+cHJvdGVjdFtpXSA/ICIgKFJPKSIgOiAiICAgICAiKTsKLSNlbmRpZgotCi0JfQotCXByaW50ZiAoIlxuIik7Ci0JcmV0dXJuOwotfQotCi0vKgotICogVGhlIGZvbGxvd2luZyBjb2RlIGNhbm5vdCBiZSBydW4gZnJvbSBGTEFTSCEKLSAqLwotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplKHZ1X2xvbmcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQlzaG9ydCBpOwotCXNob3J0IG47Ci0JQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUgdmFsdWU7Ci0JdWxvbmcgYmFzZSA9ICh1bG9uZylhZGRyOwotCXZvbGF0aWxlIENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSAqKWFkZHI7Ci0KLQkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kOiByZWFkIE1hbnVmYWN0dXJlciBJRCAqLwotCWFkZHIyW0NPTkZJR19TWVNfRkxBU0hfQUREUjBdID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7Ci0JYWRkcjJbQ09ORklHX1NZU19GTEFTSF9BRERSMV0gPSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKLQlhZGRyMltDT05GSUdfU1lTX0ZMQVNIX0FERFIwXSA9IChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSkweDAwOTAwMDkwOwotCi0JdmFsdWUgPSBhZGRyMltDT05GSUdfU1lTX0ZMQVNIX1JFQUQwXTsKLQotCXN3aXRjaCAodmFsdWUpIHsKLQljYXNlIChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSlBTURfTUFOVUZBQ1Q6Ci0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0FNRDsKLQkJYnJlYWs7Ci0JY2FzZSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUpRlVKX01BTlVGQUNUOgotCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9GVUo7Ci0JCWJyZWFrOwotCWNhc2UgKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKVNTVF9NQU5VRkFDVDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fU1NUOwotCQlicmVhazsKLQljYXNlIChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSlTVE1fTUFOVUZBQ1Q6Ci0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX1NUTTsKLQkJYnJlYWs7Ci0JY2FzZSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUpRVhDRUxfTUFOVUZBQ1Q6Ci0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0VYQ0VMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7Ci0JCWluZm8tPnNpemUgPSAwOwotCQlyZXR1cm4gKDApOwkJCS8qIG5vIG9yIHVua25vd24gZmxhc2gJKi8KLQl9Ci0KLQl2YWx1ZSA9IGFkZHIyW0NPTkZJR19TWVNfRkxBU0hfUkVBRDFdOwkJLyogZGV2aWNlIElECQkqLwotCi0Jc3dpdGNoICh2YWx1ZSkgewotCWNhc2UgKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9MVjQwMFQ6Ci0JCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNNDAwVDsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMTE7Ci0JCWluZm8tPnNpemUgPSAweDAwMDgwMDAwOwotCQlicmVhazsJCQkJLyogPT4gMC41IE1CCQkqLwotCi0JY2FzZSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUpQU1EX0lEX0xWNDAwQjoKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU00MDBCOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxMTsKLQkJaW5mby0+c2l6ZSA9IDB4MDAwODAwMDA7Ci0JCWJyZWFrOwkJCQkvKiA9PiAwLjUgTUIJCSovCi0KLQljYXNlIChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSlBTURfSURfTFY4MDBUOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTgwMFQ7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDE5OwotCQlpbmZvLT5zaXplID0gMHgwMDEwMDAwMDsKLQkJYnJlYWs7CQkJCS8qID0+IDEgTUIJCSovCi0KLQljYXNlIChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSlBTURfSURfTFY4MDBCOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTgwMEI7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDE5OwotCQlpbmZvLT5zaXplID0gMHgwMDEwMDAwMDsKLQkJYnJlYWs7CQkJCS8qID0+IDEgTUIJCSovCi0KLQljYXNlIChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSlBTURfSURfTFYxNjBUOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTE2MFQ7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDM1OwotCQlpbmZvLT5zaXplID0gMHgwMDIwMDAwMDsKLQkJYnJlYWs7CQkJCS8qID0+IDIgTUIJCSovCi0KLQljYXNlIChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSlBTURfSURfTFYxNjBCOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTE2MEI7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDM1OwotCQlpbmZvLT5zaXplID0gMHgwMDIwMDAwMDsKLQkJYnJlYWs7CQkJCS8qID0+IDIgTUIJCSovCi0KLQljYXNlIChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSlBTURfSURfTFYzMjBUOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTMyMFQ7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOwotCQlpbmZvLT5zaXplID0gMHgwMDQwMDAwMDsgIGJyZWFrOwkvKiA9PiA0IE1CCSovCi0KLQljYXNlIChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSlBTURfSURfTFYzMjBCOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTMyMEI7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOwotCQlpbmZvLT5zaXplID0gMHgwMDQwMDAwMDsgIGJyZWFrOwkvKiA9PiA0IE1CCSovCi0KLQljYXNlIChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSlBTURfSURfREwzMjJUOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTURMMzIyVDsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gNzE7Ci0JCWluZm8tPnNpemUgPSAweDAwNDAwMDAwOyAgYnJlYWs7CS8qID0+IDQgTUIJKi8KLQotCWNhc2UgKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9ETDMyMkI6Ci0JCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNREwzMjJCOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSA3MTsKLQkJaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDA7ICBicmVhazsJLyogPT4gNCBNQgkqLwotCi0JY2FzZSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUpQU1EX0lEX0RMMzIzVDoKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU1ETDMyM1Q7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOwotCQlpbmZvLT5zaXplID0gMHgwMDQwMDAwMDsgIGJyZWFrOwkvKiA9PiA0IE1CCSovCi0KLQljYXNlIChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSlBTURfSURfREwzMjNCOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTURMMzIzQjsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gNzE7Ci0JCWluZm8tPnNpemUgPSAweDAwNDAwMDAwOyAgYnJlYWs7CS8qID0+IDQgTUIJKi8KLQotCWNhc2UgKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKVNTVF9JRF94RjAyMDoKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfU1NUMDIwOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSA2NDsKLQkJaW5mby0+c2l6ZSA9IDB4MDAwNDAwMDA7Ci0JCWJyZWFrOwkJCQkvKiA9PiAyNTYga0IJCSovCi0KLQljYXNlIChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSlTU1RfSURfeEYwNDA6Ci0JCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX1NTVDA0MDsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMTI4OwotCQlpbmZvLT5zaXplID0gMHgwMDA4MDAwMDsKLQkJYnJlYWs7CQkJCS8qID0+IDUxMiBrQgkJKi8KLQotCWRlZmF1bHQ6Ci0JCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKLQkJcmV0dXJuICgwKTsJCQkvKiA9PiBubyBvciB1bmtub3duIGZsYXNoICovCi0KLQl9Ci0KLQkvKiBzZXQgdXAgc2VjdG9yIHN0YXJ0IGFkZHJlc3MgdGFibGUgKi8KLQlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9TU1QpIHsKLQkJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKQotCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDAxMDAwKTsKLQl9IGVsc2UgaWYgKCgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU1ETDMyMkIpIHx8Ci0JCSAgICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU1ETDMyM0IpIHx8Ci0JCSAgICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU0zMjBCKSB8fAotCQkgICAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNREwzMjRCKSkgewotCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUJKi8KLQkJZm9yIChpPTA7IGk8ODsgKytpKSB7CQkvKiAgOCB4IDhrIGJvb3Qgc2VjdG9ycwkqLwotCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlOwotCQkJYmFzZSArPSA4IDw8IDEwOwotCQl9Ci0JCXdoaWxlIChpIDwgaW5mby0+c2VjdG9yX2NvdW50KSB7CS8qIDY0ayByZWd1bGFyIHNlY3RvcnMJKi8KLQkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZTsKLQkJCWJhc2UgKz0gNjQgPDwgMTA7Ci0JCQkrK2k7Ci0JCX0KLQl9IGVsc2UgaWYgKCgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU1ETDMyMlQpIHx8Ci0JCSAgICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU1ETDMyM1QpIHx8Ci0JCSAgICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU0zMjBUKSB8fAotCQkgICAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNREwzMjRUKSkgewotCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIHRvcCBib290IGJsb2NrIHR5cGUJCSovCi0JCWJhc2UgKz0gaW5mby0+c2l6ZTsKLQkJaSA9IGluZm8tPnNlY3Rvcl9jb3VudDsKLQkJZm9yIChuPTA7IG48ODsgKytuKSB7CQkvKiAgOCB4IDhrIGJvb3Qgc2VjdG9ycwkqLwotCQkJYmFzZSAtPSA4IDw8IDEwOwotCQkJLS1pOwotCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlOwotCQl9Ci0JCXdoaWxlIChpID4gMCkgewkJCS8qIDY0ayByZWd1bGFyIHNlY3RvcnMJKi8KLQkJCWJhc2UgLT0gNjQgPDwgMTA7Ci0JCQktLWk7Ci0JCQlpbmZvLT5zdGFydFtpXSA9IGJhc2U7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9CVFlQRSkgewotCQkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlCSovCi0JCQlpbmZvLT5zdGFydFswXSA9IGJhc2UgKyAweDAwMDAwMDAwOwotCQkJaW5mby0+c3RhcnRbMV0gPSBiYXNlICsgMHgwMDAwNDAwMDsKLQkJCWluZm8tPnN0YXJ0WzJdID0gYmFzZSArIDB4MDAwMDYwMDA7Ci0JCQlpbmZvLT5zdGFydFszXSA9IGJhc2UgKyAweDAwMDA4MDAwOwotCQkJZm9yIChpID0gNDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0JCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDEwMDAwKSAtIDB4MDAwMzAwMDA7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIHRvcCBib290IGJsb2NrIHR5cGUJCSovCi0JCQlpID0gaW5mby0+c2VjdG9yX2NvdW50IC0gMTsKLQkJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDQwMDA7Ci0JCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA2MDAwOwotCQkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwODAwMDsKLQkJCWZvciAoOyBpID49IDA7IGktLSkgewotCQkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIGkgKiAweDAwMDEwMDAwOwotCQkJfQotCQl9Ci0JfQotCi0JLyogY2hlY2sgZm9yIHByb3RlY3RlZCBzZWN0b3JzICovCi0JZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0JCS8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsIChBNyAuLiBBMCkgPSAweDAyICovCi0JCS8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KLQkJYWRkcjIgPSAodm9sYXRpbGUgQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbaV0pOwotCQlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spICE9IEZMQVNIX01BTl9BTUQpCi0JCQlpbmZvLT5wcm90ZWN0W2ldID0gMDsKLQkJZWxzZQotCQkJaW5mby0+cHJvdGVjdFtpXSA9IGFkZHIyW0NPTkZJR19TWVNfRkxBU0hfUkVBRDJdICYgMTsKLQl9Ci0KLQkvKgotCSAqIFByZXZlbnQgd3JpdGVzIHRvIHVuaW5pdGlhbGl6ZWQgRkxBU0guCi0JICovCi0JaWYgKGluZm8tPmZsYXNoX2lkICE9IEZMQVNIX1VOS05PV04pIHsKLQkJYWRkcjIgPSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUgKilpbmZvLT5zdGFydFswXTsKLQkJKmFkZHIyID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDBGMDAwRjA7CS8qIHJlc2V0IGJhbmsgKi8KLQl9Ci0KLQlyZXR1cm4gKGluZm8tPnNpemUpOwotfQotCi0KLWludCBmbGFzaF9lcmFzZShmbGFzaF9pbmZvX3QgKmluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQotewotCXZvbGF0aWxlIENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFICphZGRyID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFICopKGluZm8tPnN0YXJ0WzBdKTsKLQl2b2xhdGlsZSBDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSAqYWRkcjI7Ci0JaW50IGZsYWcsIHByb3QsIHNlY3QsIGxfc2VjdDsKLQl1bG9uZyBzdGFydCwgbm93LCBsYXN0OwotCi0JaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7Ci0JCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKQotCQkJcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKLQkJZWxzZQotCQkJcHJpbnRmICgiLSBubyBzZWN0b3JzIHRvIGVyYXNlXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJcHJpbnRmICgiQ2FuJ3QgZXJhc2UgdW5rbm93biBmbGFzaCB0eXBlIC0gYWJvcnRlZFxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCXByb3QgPSAwOwotCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkKLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pCi0JCQlwcm90Kys7Ci0KLQlpZiAocHJvdCkKLQkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLCBwcm90KTsKLQllbHNlCi0JCXByaW50ZiAoIlxuIik7Ci0KLQlsX3NlY3QgPSAtMTsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKLQotCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KLQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7IHNlY3QrKykgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KLQkJCWFkZHIyID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFICopKGluZm8tPnN0YXJ0W3NlY3RdKTsKLQkJCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX1NTVCkgewotCQkJCWFkZHJbQ09ORklHX1NZU19GTEFTSF9BRERSMF0gPSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUpMHgwMEFBMDBBQTsKLQkJCQlhZGRyW0NPTkZJR19TWVNfRkxBU0hfQUREUjFdID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDA1NTAwNTU7Ci0JCQkJYWRkcltDT05GSUdfU1lTX0ZMQVNIX0FERFIwXSA9IChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwOwotCQkJCWFkZHJbQ09ORklHX1NZU19GTEFTSF9BRERSMF0gPSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUpMHgwMEFBMDBBQTsKLQkJCQlhZGRyW0NPTkZJR19TWVNfRkxBU0hfQUREUjFdID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDA1NTAwNTU7Ci0JCQkJYWRkcjJbMF0gPSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUpMHgwMDMwMDAzMDsgIC8qIHNlY3RvciBlcmFzZSAqLwotCi0JCQkJLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCi0JCQkJaWYgKGZsYWcpIHsKLQkJCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKLQkJCQkJZmxhZyA9IDA7Ci0JCQkJfQotCi0JCQkJLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLwotCQkJCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKLQkJCQl3aGlsZSAoKGFkZHIyWzBdICYgKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApICE9Ci0JCQkJICAgICAgIChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSB7Ci0JCQkJCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUKQotCQkJCQkJcmV0dXJuICgxKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChzZWN0ID09IHNfZmlyc3QpIHsKLQkJCQkJYWRkcltDT05GSUdfU1lTX0ZMQVNIX0FERFIwXSA9IChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOwotCQkJCQlhZGRyW0NPTkZJR19TWVNfRkxBU0hfQUREUjFdID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDA1NTAwNTU7Ci0JCQkJCWFkZHJbQ09ORklHX1NZU19GTEFTSF9BRERSMF0gPSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MDsKLQkJCQkJYWRkcltDT05GSUdfU1lTX0ZMQVNIX0FERFIwXSA9IChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOwotCQkJCQlhZGRyW0NPTkZJR19TWVNfRkxBU0hfQUREUjFdID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDA1NTAwNTU7Ci0JCQkJfQotCQkJCWFkZHIyWzBdID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDAzMDAwMzA7ICAvKiBzZWN0b3IgZXJhc2UgKi8KLQkJCX0KLQkJCWxfc2VjdCA9IHNlY3Q7Ci0JCX0KLQl9Ci0KLQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoZmxhZykKLQkJZW5hYmxlX2ludGVycnVwdHMoKTsKLQotCS8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLwotCXVkZWxheSAoMTAwMCk7Ci0KLQkvKgotCSAqIFdlIHdhaXQgZm9yIHRoZSBsYXN0IHRyaWdnZXJlZCBzZWN0b3IKLQkgKi8KLQlpZiAobF9zZWN0IDwgMCkKLQkJZ290byBET05FOwotCi0Jc3RhcnQgPSBnZXRfdGltZXIgKDApOwotCWxhc3QgID0gc3RhcnQ7Ci0JYWRkciA9IChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFtsX3NlY3RdKTsKLQl3aGlsZSAoKGFkZHJbMF0gJiAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkgIT0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApIHsKLQkJaWYgKChub3cgPSBnZXRfdGltZXIoc3RhcnQpKSA+IENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVCkgewotCQkJcHJpbnRmICgiVGltZW91dFxuIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLwotCQlpZiAoKG5vdyAtIGxhc3QpID4gMTAwMCkgewkvKiBldmVyeSBzZWNvbmQgKi8KLQkJCXB1dGMgKCcuJyk7Ci0JCQlsYXN0ID0gbm93OwotCQl9Ci0JfQotCi1ET05FOgotCS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLwotCWFkZHIgPSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUgKilpbmZvLT5zdGFydFswXTsKLQlhZGRyWzBdID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDBGMDAwRjA7CS8qIHJlc2V0IGJhbmsgKi8KLQotCXByaW50ZiAoIiBkb25lXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIENvcHkgbWVtb3J5IHRvIGZsYXNoLCByZXR1cm5zOgotICogMCAtIE9LCi0gKiAxIC0gd3JpdGUgdGltZW91dAotICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqLwotaW50IHdyaXRlX2J1ZmYoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCi17Ci0JdWxvbmcgY3AsIHdwLCBkYXRhOwotCWludCBpLCBsLCByYzsKLQotCXdwID0gKGFkZHIgJiB+Myk7CS8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLwotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHN0YXJ0IGJ5dGVzCi0JICovCi0JaWYgKChsID0gYWRkciAtIHdwKSAhPSAwKSB7Ci0JCWRhdGEgPSAwOwotCQlmb3IgKGk9MCwgY3A9d3A7IGk8bDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQkJfQotCQlmb3IgKDsgaTw0ICYmIGNudD4wOyArK2kpIHsKLQkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLQkJCS0tY250OwotCQkJKytjcDsKLQkJfQotCQlmb3IgKDsgY250PT0wICYmIGk8NDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKLQkJfQotCi0JCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotCQkJcmV0dXJuIChyYyk7Ci0JCX0KLQkJd3AgKz0gNDsKLQl9Ci0KLQkvKgotCSAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAotCSAqLwotCXdoaWxlIChjbnQgPj0gNCkgewotCQlkYXRhID0gMDsKLQkJZm9yIChpPTA7IGk8NDsgKytpKQotCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotCQlpZiAoKHJjID0gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpICE9IDApCi0JCQlyZXR1cm4gKHJjKTsKLQkJd3AgICs9IDQ7Ci0JCWNudCAtPSA0OwotCX0KLQotCWlmIChjbnQgPT0gMCkKLQkJcmV0dXJuICgwKTsKLQotCS8qCi0JICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzCi0JICovCi0JZGF0YSA9IDA7Ci0JZm9yIChpPTAsIGNwPXdwOyBpPDQgJiYgY250PjA7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0JCS0tY250OwotCX0KLQlmb3IgKDsgaTw0OyArK2ksICsrY3ApCi0JCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotCi0JcmV0dXJuICh3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSk7Ci19Ci0KLS8qCi0gKiBXcml0ZSBhIHdvcmQgdG8gRmxhc2gsIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICovCi1zdGF0aWMgaW50IHdyaXRlX3dvcmQoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCB1bG9uZyBkYXRhKQotewotCXZvbGF0aWxlIENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFswXSk7Ci0Jdm9sYXRpbGUgQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUgKmRlc3QyID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFICopZGVzdDsKLQl2b2xhdGlsZSBDT05GSUdfU1lTX0ZMQVNIX1dPUkRfU0laRSAqZGF0YTIgPSAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUgKikmZGF0YTsKLQl1bG9uZyBzdGFydDsKLQlpbnQgZmxhZzsKLQlpbnQgaTsKLQotCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwotCWlmICgoKigodnVfbG9uZyAqKWRlc3QpICYgZGF0YSkgIT0gZGF0YSkKLQkJcmV0dXJuICgyKTsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKLQotCWZvciAoaT0wOyBpPDQvc2l6ZW9mKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTsgaSsrKSB7Ci0JCWFkZHIyW0NPTkZJR19TWVNfRkxBU0hfQUREUjBdID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7Ci0JCWFkZHIyW0NPTkZJR19TWVNfRkxBU0hfQUREUjFdID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDA1NTAwNTU7Ci0JCWFkZHIyW0NPTkZJR19TWVNfRkxBU0hfQUREUjBdID0gKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDBBMDAwQTA7Ci0KLQkJZGVzdDJbaV0gPSBkYXRhMltpXTsKLQotCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLQkJaWYgKGZsYWcpCi0JCQllbmFibGVfaW50ZXJydXB0cygpOwotCi0JCS8qIGRhdGEgcG9sbGluZyBmb3IgRDcgKi8KLQkJc3RhcnQgPSBnZXRfdGltZXIgKDApOwotCQl3aGlsZSAoKGRlc3QyW2ldICYgKENPTkZJR19TWVNfRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApICE9Ci0JCSAgICAgICAoZGF0YTJbaV0gJiAoQ09ORklHX1NZU19GTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkpIHsKLQkJCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUKQotCQkJCXJldHVybiAoMSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gKDApOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvcHJvZHJpdmUvY29tbW9uL2ZwZ2EuYyBiL2JvYXJkL3Byb2RyaXZlL2NvbW1vbi9mcGdhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkY2UxMzEuLjAwMDAwMDAKLS0tIGEvYm9hcmQvcHJvZHJpdmUvY29tbW9uL2ZwZ2EuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDA2Ci0gKiBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCi0gKgotICogKEMpIENvcHlyaWdodCAyMDAxLTIwMDQKLSAqIE1hdHRoaWFzIEZ1Y2hzLCBlc2QgZ21iaCBnZXJtYW55LCBtYXR0aGlhcy5mdWNoc0Blc2QtZWxlY3Ryb25pY3MuY29tCi0gKiBTdGVmYW4gUm9lc2UsIGVzZCBnbWJoIGdlcm1hbnksIHN0ZWZhbi5yb2VzZUBlc2QtZWxlY3Ryb25pY3MuY29tCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxjb21tYW5kLmg+Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmZGVmIEZQR0FfREVCVUcKLSNkZWZpbmUgREJHKHguLi4pIHByaW50Zih4KQotI2Vsc2UKLSNkZWZpbmUgREJHKHguLi4pCi0jZW5kaWYgLyogREVCVUcgKi8KLQotI2RlZmluZSBGUEdBX1BSRwkJQ09ORklHX1NZU19GUEdBX1BSRyAvKiBGUEdBIHByb2dyYW0gcGluIChjcHUgb3V0cHV0KSovCi0jZGVmaW5lIEZQR0FfQ0xLCQlDT05GSUdfU1lTX0ZQR0FfQ0xLIC8qIEZQR0EgY2xrIHBpbiAoY3B1IG91dHB1dCkgICAgKi8KLSNkZWZpbmUgRlBHQV9EQVRBCQlDT05GSUdfU1lTX0ZQR0FfREFUQSAvKiBGUEdBIGRhdGEgcGluIChjcHUgb3V0cHV0KSAgKi8KLSNkZWZpbmUgRlBHQV9ET05FCQlDT05GSUdfU1lTX0ZQR0FfRE9ORSAvKiBGUEdBIGRvbmUgcGluIChjcHUgaW5wdXQpICAgKi8KLSNkZWZpbmUgRlBHQV9JTklUCQlDT05GSUdfU1lTX0ZQR0FfSU5JVCAvKiBGUEdBIGluaXQgcGluIChjcHUgaW5wdXQpICAgKi8KLQotI2RlZmluZSBFUlJPUl9GUEdBX1BSR19JTklUX0xPVyAgLTEgICAgICAgIC8qIFRpbWVvdXQgYWZ0ZXIgUFJHKiBhc3NlcnRlZCAgICovCi0jZGVmaW5lIEVSUk9SX0ZQR0FfUFJHX0lOSVRfSElHSCAtMiAgICAgICAgLyogVGltZW91dCBhZnRlciBQUkcqIGRlYXNzZXJ0ZWQgKi8KLSNkZWZpbmUgRVJST1JfRlBHQV9QUkdfRE9ORSAgICAgIC0zICAgICAgICAvKiBUaW1lb3V0IGFmdGVyIHByb2dyYW1taW5nICAgICAqLwotCi0jaWZuZGVmIE9MRF9WQUwKLSMgZGVmaW5lIE9MRF9WQUwJCTAKLSNlbmRpZgotCi0jaWYgMCAvKiB0ZXN0LW9ubHkgKi8KLSNkZWZpbmUgRlBHQV9XUklURV8xIHsgXAotCQlTRVRfRlBHQShPTERfVkFMIHwgRlBHQV9QUkcgfCAwICAgICAgICB8IEZQR0FfREFUQSk7ICAvKiBzZXQgY2xvY2sgdG8gMCAqLyBcCi0JCVNFVF9GUEdBKE9MRF9WQUwgfCBGUEdBX1BSRyB8IDAgICAgICAgIHwgRlBHQV9EQVRBKTsgIC8qIHNldCBkYXRhIHRvIDEgICovCVwKLQkJU0VUX0ZQR0EoT0xEX1ZBTCB8IEZQR0FfUFJHIHwgRlBHQV9DTEsgfCBGUEdBX0RBVEEpOyAgLyogc2V0IGNsb2NrIHRvIDEgKi8JXAotCQlTRVRfRlBHQShPTERfVkFMIHwgRlBHQV9QUkcgfCBGUEdBX0NMSyB8IEZQR0FfREFUQSk7fSAvKiBzZXQgZGF0YSB0byAxICAqLwotCi0jZGVmaW5lIEZQR0FfV1JJVEVfMCB7IFwKLQkJU0VUX0ZQR0EoT0xEX1ZBTCB8IEZQR0FfUFJHIHwgMCAgICAgICAgfCBGUEdBX0RBVEEpOyAgLyogc2V0IGNsb2NrIHRvIDAgKi8JXAotCQlTRVRfRlBHQShPTERfVkFMIHwgRlBHQV9QUkcgfCAwICAgICAgICB8IDAgICAgICAgICk7ICAvKiBzZXQgZGF0YSB0byAwICAqLwlcCi0JCVNFVF9GUEdBKE9MRF9WQUwgfCBGUEdBX1BSRyB8IEZQR0FfQ0xLIHwgMCAgICAgICAgKTsgIC8qIHNldCBjbG9jayB0byAxICovCVwKLQkJU0VUX0ZQR0EoT0xEX1ZBTCB8IEZQR0FfUFJHIHwgRlBHQV9DTEsgfCBGUEdBX0RBVEEpO30gLyogc2V0IGRhdGEgdG8gMSAgKi8KLSNlbHNlCi0jZGVmaW5lIEZQR0FfV1JJVEVfMSB7IFwKLQkJU0VUX0ZQR0EoT0xEX1ZBTCB8IEZQR0FfUFJHIHwgMCAgICAgICAgfCBGUEdBX0RBVEEpOyAgLyogc2V0IGRhdGEgdG8gMSAgKi8JXAotCQlTRVRfRlBHQShPTERfVkFMIHwgRlBHQV9QUkcgfCBGUEdBX0NMSyB8IEZQR0FfREFUQSk7fSAvKiBzZXQgZGF0YSB0byAxICAqLwotCi0jZGVmaW5lIEZQR0FfV1JJVEVfMCB7IFwKLQkJU0VUX0ZQR0EoT0xEX1ZBTCB8IEZQR0FfUFJHIHwgMCAgICAgICAgfCAwICAgICAgICApOyAgIC8qIHNldCBkYXRhIHRvIDAgICovCVwKLQkJU0VUX0ZQR0EoT0xEX1ZBTCB8IEZQR0FfUFJHIHwgRlBHQV9DTEsgfCAwICAgICAgICApO30gIC8qIHNldCBkYXRhIHRvIDEgICovCi0jZW5kaWYKLQotc3RhdGljIGludCBmcGdhX2Jvb3QodW5zaWduZWQgY2hhciAqZnBnYWRhdGEsIGludCBzaXplKQotewotCWludCBpLGluZGV4LGxlbjsKLQlpbnQgY291bnQ7Ci0JaW50IGo7Ci0KLQkvKiBkaXNwbGF5IGluZm9zIG9uIGZwZ2FpbWFnZSAqLwotCWluZGV4ID0gMTU7Ci0JZm9yIChpPTA7IGk8NDsgaSsrKSB7Ci0JCWxlbiA9IGZwZ2FkYXRhW2luZGV4XTsKLQkJREJHKCJGUEdBOiAlc1xuIiwgJihmcGdhZGF0YVtpbmRleCsxXSkpOwotCQlpbmRleCArPSBsZW4rMzsKLQl9Ci0KLQkvKiBzZWFyY2ggZm9yIHByZWFtYmxlIDB4RkZGRkZGRkYgKi8KLQl3aGlsZSAoMSkgewotCQlpZiAoKGZwZ2FkYXRhW2luZGV4XSA9PSAweGZmKSAmJiAoZnBnYWRhdGFbaW5kZXgrMV0gPT0gMHhmZikgJiYKLQkJICAgIChmcGdhZGF0YVtpbmRleCsyXSA9PSAweGZmKSAmJiAoZnBnYWRhdGFbaW5kZXgrM10gPT0gMHhmZikpCi0JCQlicmVhazsgLyogcHJlYW1ibGUgZm91bmQgKi8KLQkJZWxzZQotCQkJaW5kZXgrKzsKLQl9Ci0KLQlEQkcoIkZQR0E6IGNvbmZpZ2RhdGEgc3RhcnRzIGF0IHBvc2l0aW9uIDB4JXhcbiIsaW5kZXgpOwotCURCRygiRlBHQTogbGVuZ3RoIG9mIGZwZ2EtZGF0YSAlZFxuIiwgc2l6ZS1pbmRleCk7Ci0KLQkvKgotCSAqIFNldHVwIHBvcnQgcGlucyBmb3IgZnBnYSBwcm9ncmFtbWluZwotCSAqLwotCVNFVF9GUEdBKEZQR0FfUFJHIHwgRlBHQV9DTEsgfCBGUEdBX0RBVEEpOyAgICAgICAgICAgIC8qIHNldCBwaW5zIHRvIGhpZ2ggKi8KLQotCURCRygiJXMsICIsKEZQR0FfRE9ORV9TVEFURSA9PSAwKSA/ICJOT1QgRE9ORSIgOiAiRE9ORSIgKTsKLQlEQkcoIiVzXG4iLChGUEdBX0lOSVRfU1RBVEUgPT0gMCkgPyAiTk9UIElOSVQiIDogIklOSVQiICk7Ci0KLQkvKgotCSAqIEluaXQgZnBnYSBieSBhc3NlcnRpbmcgYW5kIGRlYXNzZXJ0aW5nIFBST0dSQU0qCi0JICovCi0JU0VUX0ZQR0EoMCB8IEZQR0FfQ0xLIHwgRlBHQV9EQVRBKTsgICAgICAgICAgICAgLyogc2V0IHByb2cgYWN0aXZlICovCi0KLQkvKiBXYWl0IGZvciBGUEdBIGluaXQgbGluZSBsb3cgKi8KLQljb3VudCA9IDA7Ci0Jd2hpbGUgKEZQR0FfSU5JVF9TVEFURSkgewotCQl1ZGVsYXkoMTAwMCk7IC8qIHdhaXQgMW1zICovCi0JCS8qIENoZWNrIGZvciB0aW1lb3V0IC0gMTAwdXMgbWF4LCBzbyB1c2UgM21zICovCi0JCWlmIChjb3VudCsrID4gMykgewotCQkJREJHKCJGUEdBOiBCb290aW5nIGZhaWxlZCFcbiIpOwotCQkJcmV0dXJuIEVSUk9SX0ZQR0FfUFJHX0lOSVRfTE9XOwotCQl9Ci0JfQotCi0JREJHKCIlcywgIiwoRlBHQV9ET05FX1NUQVRFID09IDApID8gIk5PVCBET05FIiA6ICJET05FIiApOwotCURCRygiJXNcbiIsKEZQR0FfSU5JVF9TVEFURSA9PSAwKSA/ICJOT1QgSU5JVCIgOiAiSU5JVCIgKTsKLQotCS8qIGRlYXNzZXJ0IFBST0dSQU0qICovCi0JU0VUX0ZQR0EoRlBHQV9QUkcgfCBGUEdBX0NMSyB8IEZQR0FfREFUQSk7ICAgICAgICAgICAvKiBzZXQgcHJvZyBpbmFjdGl2ZSAqLwotCi0JLyogV2FpdCBmb3IgRlBHQSBlbmQgb2YgaW5pdCBwZXJpb2QgLiAgKi8KLQljb3VudCA9IDA7Ci0Jd2hpbGUgKCEoRlBHQV9JTklUX1NUQVRFKSkgewotCQl1ZGVsYXkoMTAwMCk7IC8qIHdhaXQgMW1zICovCi0JCS8qIENoZWNrIGZvciB0aW1lb3V0ICovCi0JCWlmIChjb3VudCsrID4gMykgewotCQkJREJHKCJGUEdBOiBCb290aW5nIGZhaWxlZCFcbiIpOwotCQkJcmV0dXJuIEVSUk9SX0ZQR0FfUFJHX0lOSVRfSElHSDsKLQkJfQotCX0KLQotCURCRygiJXMsICIsKEZQR0FfRE9ORV9TVEFURSA9PSAwKSA/ICJOT1QgRE9ORSIgOiAiRE9ORSIgKTsKLQlEQkcoIiVzXG4iLChGUEdBX0lOSVRfU1RBVEUgPT0gMCkgPyAiTk9UIElOSVQiIDogIklOSVQiICk7Ci0KLQlEQkcoIndyaXRlIGNvbmZpZ3VyYXRpb24gZGF0YSBpbnRvIGZwZ2FcbiIpOwotCS8qIHdyaXRlIGNvbmZpZ3VyYXRpb24tZGF0YSBpbnRvIGZwZ2EuLi4gKi8KLQotCS8qCi0JICogTG9hZCB1bmNvbXByZXNzZWQgaW1hZ2UgaW50byBmcGdhCi0JICovCi0JZm9yIChpPWluZGV4OyBpPHNpemU7IGkrKykgewotCQlmb3IgKGo9MDsgajw4OyBqKyspIHsKLQkJCWlmICgoZnBnYWRhdGFbaV0gJiAweDgwKSA9PSAweDgwKSB7Ci0JCQkJRlBHQV9XUklURV8xOwotCQkJfSBlbHNlIHsKLQkJCQlGUEdBX1dSSVRFXzA7Ci0JCQl9Ci0JCQlmcGdhZGF0YVtpXSA8PD0gMTsKLQkJfQotCX0KLQotCURCRygiJXMsICIsKEZQR0FfRE9ORV9TVEFURSA9PSAwKSA/ICJOT1QgRE9ORSIgOiAiRE9ORSIgKTsKLQlEQkcoIiVzXG4iLChGUEdBX0lOSVRfU1RBVEUgPT0gMCkgPyAiTk9UIElOSVQiIDogIklOSVQiICk7Ci0KLQkvKgotCSAqIENoZWNrIGlmIGZwZ2EncyBET05FIHNpZ25hbCAtIGNvcnJlY3RseSBib290ZWQgPwotCSAqLwotCi0JLyogV2FpdCBmb3IgRlBHQSBlbmQgb2YgcHJvZ3JhbW1pbmcgcGVyaW9kIC4gICovCi0JY291bnQgPSAwOwotCXdoaWxlICghKEZQR0FfRE9ORV9TVEFURSkpIHsKLQkJdWRlbGF5KDEwMDApOyAvKiB3YWl0IDFtcyAqLwotCQkvKiBDaGVjayBmb3IgdGltZW91dCAqLwotCQlpZiAoY291bnQrKyA+IDMpIHsKLQkJCURCRygiRlBHQTogQm9vdGluZyBmYWlsZWQhXG4iKTsKLQkJCXJldHVybiBFUlJPUl9GUEdBX1BSR19ET05FOwotCQl9Ci0JfQotCi0JREJHKCJGUEdBOiBCb290aW5nIHN1Y2Nlc3NmdWwhXG4iKTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL3JweHN1cGVyL01ha2VmaWxlIGIvYm9hcmQvcnB4c3VwZXIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzOWI0MTkuLjAwMDAwMDAKLS0tIGEvYm9hcmQvcnB4c3VwZXIvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKLSMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSMKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0jCi0KLW9iai15CTo9IHJweHN1cGVyLm8gZmxhc2gubyBtaWlfcGh5Lm8KZGlmZiAtLWdpdCBhL2JvYXJkL3JweHN1cGVyL2ZsYXNoLmMgYi9ib2FyZC9ycHhzdXBlci9mbGFzaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGJjZDdjLi4wMDAwMDAwCi0tLSBhL2JvYXJkL3JweHN1cGVyL2ZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTYgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgotICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIEZsYXNoIFJvdXRpbmVzIGZvciBBTUQgMjlGMDgwQiBkZXZpY2VzCi0gKiBBZGRlZCBzdXBwb3J0IGZvciA2NGJpdCBhbmQgQU1EIDI5REwzMjNCCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPG1wYzh4eC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi1mbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LU107Ci0KLSNkZWZpbmUgUkRfU1dQMzIoeCkgaW5fbGUzMigodm9sYXRpbGUgdTMyKil4KQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbnMKLSAqLwotCi1zdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKHZ1X2xvbmcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbyk7Ci1zdGF0aWMgaW50IHdyaXRlX3dvcmQgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi11bnNpZ25lZCBsb25nIGZsYXNoX2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQotCS8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KLQlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1M7ICsraSkKLQkJZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047Ci0KLQkvKiBmb3Igbm93LCBvbmx5IHN1cHBvcnQgdGhlIDQgTUIgRmxhc2ggU0lNTSAqLwotCSh2b2lkKWZsYXNoX2dldF9zaXplKCh2dV9sb25nICopIENPTkZJR19TWVNfRkxBU0gwX0JBU0UsCi0JCQkgICAgICAmZmxhc2hfaW5mb1swXSk7Ci0KLQkvKgotCSAqIHByb3RlY3QgbW9uaXRvciBhbmQgZW52aXJvbm1lbnQgc2VjdG9ycwotCSAqLwotCi0jaWYgQ09ORklHX1NZU19NT05JVE9SX0JBU0UgPj0gQ09ORklHX1NZU19GTEFTSDBfQkFTRQotCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLQkJICAgICAgQ09ORklHX1NZU19NT05JVE9SX0JBU0UsCi0JCSAgICAgIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFICsgbW9uaXRvcl9mbGFzaF9sZW4gLSAxLAotCQkgICAgICAmZmxhc2hfaW5mb1swXSk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0VOVl9JU19JTl9GTEFTSCkgJiYgZGVmaW5lZChDT05GSUdfRU5WX0FERFIpCi0jaWZuZGVmIENPTkZJR19FTlZfU0laRQotI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJQ09ORklHX0VOVl9TRUNUX1NJWkUKLSNlbmRpZgotCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLQkJICAgICAgQ09ORklHX0VOVl9BRERSLAotCQkgICAgICBDT05GSUdfRU5WX0FERFIgKyBDT05GSUdfRU5WX1NJWkUgLSAxLCAmZmxhc2hfaW5mb1swXSk7Ci0jZW5kaWYKLQotCXJldHVybiBDT05GSUdfU1lTX0ZMQVNIMF9TSVpFICogMTAyNCAqIDEwMjQ7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotdm9pZCBmbGFzaF9wcmludF9pbmZvICAoZmxhc2hfaW5mb190ICppbmZvKQotewotICAgIGludCBpOwotCi0gICAgaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7Ci0JcmV0dXJuOwotICAgIH0KLQotICAgIHN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgewotICAgIGNhc2UgKEFNRF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKToKLQlwcmludGYgKCJBTUQgIik7Ci0JYnJlYWs7Ci0gICAgY2FzZSAoRlVKX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spOgotCXByaW50ZiAoIkZVSklUU1UgIik7Ci0JYnJlYWs7Ci0gICAgY2FzZSAoU1NUX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spOgotCXByaW50ZiAoIlNTVCAiKTsKLQlicmVhazsKLSAgICBkZWZhdWx0OgotCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOwotCWJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewotICAgIGNhc2UgKEFNRF9JRF9ETDMyM0IgJiBGTEFTSF9UWVBFTUFTSyk6Ci0JcHJpbnRmKCJBTTI5REwzMjNCICgzMiBNQml0KVxuIik7Ci0JYnJlYWs7Ci0gICAgZGVmYXVsdDoKLQlwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7Ci0JYnJlYWs7Ci0gICAgfQotCi0gICAgcHJpbnRmICgiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKLQkgICAgaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKLQotICAgIHByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKLQlpZiAoKGkgJSA1KSA9PSAwKSBwcmludGYgKCJcbiAgICIpOwotCXByaW50ZiAoIiAlMDhsWCVzIiwKLQkJaW5mby0+c3RhcnRbaV0sCi0JCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIgotCQkpOwotICAgIH0KLSAgICBwcmludGYgKCJcbiIpOwotICAgIHJldHVybjsKLX0KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgY29kZSBjYW5ub3QgYmUgcnVuIGZyb20gRkxBU0ghCi0gKi8KLQotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplICh2dV9sb25nICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pCi17Ci0gICAgc2hvcnQgaTsKLSAgICB2dV9sb25nIHZlbmRvclsyXSwgZGV2aWRbMl07Ci0gICAgdWxvbmcgYmFzZSA9ICh1bG9uZylhZGRyOwotCi0gICAgLyogUmVzZXQgYW5kIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCi0gICAgYWRkclswXSA9IDB4ZjBmMGYwZjA7Ci0gICAgYWRkclsyICogMHgwNTU1XSA9IDB4QUFBQUFBQUE7Ci0gICAgYWRkclsyICogMHgwMkFBXSA9IDB4NTU1NTU1NTU7Ci0gICAgYWRkclsyICogMHgwNTU1XSA9IDB4OTA5MDkwOTA7Ci0gICAgYWRkclsxXSA9IDB4ZjBmMGYwZjA7Ci0gICAgYWRkclsyICogMHgwNTU1ICsgMV0gPSAweEFBQUFBQUFBOwotICAgIGFkZHJbMiAqIDB4MDJBQSArIDFdID0gMHg1NTU1NTU1NTsKLSAgICBhZGRyWzIgKiAweDA1NTUgKyAxXSA9IDB4OTA5MDkwOTA7Ci0gICAgdWRlbGF5ICgxMDAwKTsKLQotICAgIHZlbmRvclswXSA9IFJEX1NXUDMyKCZhZGRyWzBdKTsKLSAgICB2ZW5kb3JbMV0gPSBSRF9TV1AzMigmYWRkclsxXSk7Ci0gICAgaWYgKHZlbmRvclswXSAhPSB2ZW5kb3JbMV0gfHwgdmVuZG9yWzBdICE9IEFNRF9NQU5VRkFDVCkgewotCWluZm8tPnNpemUgPSAwOwotCWdvdG8gb3V0OwotICAgIH0KLQotICAgIGRldmlkWzBdID0gUkRfU1dQMzIoJmFkZHJbMl0pOwotICAgIGRldmlkWzFdID0gUkRfU1dQMzIoJmFkZHJbM10pOwotCi0gICAgaWYgKGRldmlkWzBdID09IEFNRF9JRF9ETDMyM0IpIHsKLQkvKgotCSogd2UgaGF2ZSAyIEJhbmtzCi0JKiBCYW5rIDEgKDIzIFNlY3RvcnMpOiAwLTc9OGtieXRlLCA4LTIyPTY0a2J5dGUKLQkqIEJhbmsgMiAoNDggU2VjdG9ycyk6IDIzLTcwPTY0a2J5dGUKLQkqLwotCWluZm8tPmZsYXNoX2lkICAgICA9IChBTURfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSykgfAotCQkJICAgICAoQU1EX0lEX0RMMzIzQiAmIEZMQVNIX1RZUEVNQVNLKTsKLQlpbmZvLT5zZWN0b3JfY291bnQgPSA3MTsKLQlpbmZvLT5zaXplICAgICAgICAgPSA0ICogKDggKiA4ICsgNjMgKiA2NCkgKiAxMDI0OwotICAgIH0KLSAgICBlbHNlIHsKLQlpbmZvLT5zaXplID0gMDsKLQlnb3RvIG91dDsKLSAgICB9Ci0KLSAgICAvKiBzZXQgdXAgc2VjdG9yIHN0YXJ0IGFkZHJlc3MgdGFibGUgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDgwMDApOwotICAgIH0KLSAgICBmb3IgKGkgPSA4OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4NDAwMDApICsgOCAqIDB4ODAwMCAtIDggKiAweDQwMDAwOwotICAgIH0KLQotICAgIC8qIGNoZWNrIGZvciBwcm90ZWN0ZWQgc2VjdG9ycyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgewotCS8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MgKi8KLQlhZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoaW5mby0+c3RhcnRbaV0pOwotCWFkZHJbMiAqIDB4MDU1NV0gPSAweEFBQUFBQUFBOwotCWFkZHJbMiAqIDB4MDJBQV0gPSAweDU1NTU1NTU1OwotCWFkZHJbMiAqIDB4MDU1NV0gPSAweDkwOTA5MDkwOwotCWFkZHJbMiAqIDB4MDU1NSArIDFdID0gMHhBQUFBQUFBQTsKLQlhZGRyWzIgKiAweDAyQUEgKyAxXSA9IDB4NTU1NTU1NTU7Ci0JYWRkclsyICogMHgwNTU1ICsgMV0gPSAweDkwOTA5MDkwOwotCXVkZWxheSAoMTAwMCk7Ci0JYmFzZSA9IFJEX1NXUDMyKCZhZGRyWzRdKTsKLQliYXNlIHw9IFJEX1NXUDMyKCZhZGRyWzVdKTsKLQlpbmZvLT5wcm90ZWN0W2ldID0gYmFzZSAmIDB4MDAwMTAwMDEgPyAxIDogMDsKLSAgICB9Ci0gICAgYWRkciA9ICh2dV9sb25nKilpbmZvLT5zdGFydFswXTsKLQotb3V0OgotICAgIC8qIHJlc2V0IGNvbW1hbmQgKi8KLSAgICBhZGRyWzBdID0gMHhmMGYwZjBmMDsKLSAgICBhZGRyWzFdID0gMHhmMGYwZjBmMDsKLQotICAgIHJldHVybiBpbmZvLT5zaXplOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi1pbnQgZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCi17Ci0gICAgdnVfbG9uZyAqYWRkciA9ICh2dV9sb25nKikoaW5mby0+c3RhcnRbMF0pOwotICAgIGludCBmbGFnLCBwcm90LCBzZWN0LCBsX3NlY3Q7Ci0gICAgdWxvbmcgc3RhcnQsIG5vdywgbGFzdDsKLQotICAgIGlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgewotCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7Ci0JICAgIHByaW50ZiAoIi0gbWlzc2luZ1xuIik7Ci0JfSBlbHNlIHsKLQkgICAgcHJpbnRmICgiLSBubyBzZWN0b3JzIHRvIGVyYXNlXG4iKTsKLQl9Ci0JcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgcHJvdCA9IDA7Ci0gICAgZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7IHNlY3QrKykgewotCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7Ci0JICAgIHByb3QrKzsKLQl9Ci0gICAgfQotCi0gICAgaWYgKHByb3QpIHsKLQlwcmludGYgKCItIFdhcm5pbmc6ICVkIHByb3RlY3RlZCBzZWN0b3JzIHdpbGwgbm90IGJlIGVyYXNlZCFcbiIsCi0JCXByb3QpOwotICAgIH0gZWxzZSB7Ci0JcHJpbnRmICgiXG4iKTsKLSAgICB9Ci0KLSAgICBsX3NlY3QgPSAtMTsKLQotICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotICAgIGZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKLQotICAgIGFkZHJbMiAqIDB4MDU1NV0gPSAweEFBQUFBQUFBOwotICAgIGFkZHJbMiAqIDB4MDJBQV0gPSAweDU1NTU1NTU1OwotICAgIGFkZHJbMiAqIDB4MDU1NV0gPSAweDgwODA4MDgwOwotICAgIGFkZHJbMiAqIDB4MDU1NV0gPSAweEFBQUFBQUFBOwotICAgIGFkZHJbMiAqIDB4MDJBQV0gPSAweDU1NTU1NTU1OwotICAgIGFkZHJbMiAqIDB4MDU1NSArIDFdID0gMHhBQUFBQUFBQTsKLSAgICBhZGRyWzIgKiAweDAyQUEgKyAxXSA9IDB4NTU1NTU1NTU7Ci0gICAgYWRkclsyICogMHgwNTU1ICsgMV0gPSAweDgwODA4MDgwOwotICAgIGFkZHJbMiAqIDB4MDU1NSArIDFdID0gMHhBQUFBQUFBQTsKLSAgICBhZGRyWzIgKiAweDAyQUEgKyAxXSA9IDB4NTU1NTU1NTU7Ci0gICAgdWRlbGF5ICgxMDApOwotCi0gICAgLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLwotICAgIGZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgc2VjdCsrKSB7Ci0JaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewkvKiBub3QgcHJvdGVjdGVkICovCi0JICAgIGFkZHIgPSAodnVfbG9uZyopKGluZm8tPnN0YXJ0W3NlY3RdKTsKLQkgICAgYWRkclswXSA9IDB4MzAzMDMwMzA7Ci0JICAgIGFkZHJbMV0gPSAweDMwMzAzMDMwOwotCSAgICBsX3NlY3QgPSBzZWN0OwotCX0KLSAgICB9Ci0KLSAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLSAgICBpZiAoZmxhZykKLSAgICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLSAgICAvKiB3YWl0IGF0IGxlYXN0IDgwdXMgLSBsZXQncyB3YWl0IDEgbXMgKi8KLSAgICB1ZGVsYXkgKDEwMDApOwotCi0gICAgLyoKLSAgICAgKiBXZSB3YWl0IGZvciB0aGUgbGFzdCB0cmlnZ2VyZWQgc2VjdG9yCi0gICAgICovCi0gICAgaWYgKGxfc2VjdCA8IDApCi0gICAgICBnb3RvIERPTkU7Ci0KLSAgICBzdGFydCA9IGdldF90aW1lciAoMCk7Ci0gICAgbGFzdCAgPSBzdGFydDsKLSAgICBhZGRyID0gKHZ1X2xvbmcqKShpbmZvLT5zdGFydFtsX3NlY3RdKTsKLSAgICB3aGlsZSAoCShhZGRyWzBdICYgMHg4MDgwODA4MCkgIT0gMHg4MDgwODA4MCB8fAotCQkoYWRkclsxXSAmIDB4ODA4MDgwODApICE9IDB4ODA4MDgwODApIHsKLQlpZiAoKG5vdyA9IGdldF90aW1lcihzdGFydCkpID4gQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUKSB7Ci0JICAgIHByaW50ZiAoIlRpbWVvdXRcbiIpOwotCSAgICByZXR1cm4gMTsKLQl9Ci0JLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KLQlpZiAoKG5vdyAtIGxhc3QpID4gMTAwMCkgewkvKiBldmVyeSBzZWNvbmQgKi8KLQkgICAgc2VyaWFsX3B1dGMgKCcuJyk7Ci0JICAgIGxhc3QgPSBub3c7Ci0JfQotICAgIH0KLQotICAgIERPTkU6Ci0gICAgLyogcmVzZXQgdG8gcmVhZCBtb2RlICovCi0gICAgYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopaW5mby0+c3RhcnRbMF07Ci0gICAgYWRkclswXSA9IDB4RjBGMEYwRjA7CS8qIHJlc2V0IGJhbmsgKi8KLSAgICBhZGRyWzFdID0gMHhGMEYwRjBGMDsJLyogcmVzZXQgYmFuayAqLwotCi0gICAgcHJpbnRmICgiIGRvbmVcbiIpOwotICAgIHJldHVybiAwOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDb3B5IG1lbW9yeSB0byBmbGFzaCwgcmV0dXJuczoKLSAqIDAgLSBPSwotICogMSAtIHdyaXRlIHRpbWVvdXQKLSAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCi0gKi8KLQotaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqaW5mbywgdWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQotewotICAgIHVsb25nIGNwLCB3cCwgZGF0YTsKLSAgICBpbnQgaSwgbCwgcmM7Ci0KLSAgICB3cCA9IChhZGRyICYgfjMpOwkvKiBnZXQgbG93ZXIgd29yZCBhbGlnbmVkIGFkZHJlc3MgKi8KLQotICAgIC8qCi0gICAgICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcwotICAgICAqLwotICAgIGlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgewotCWRhdGEgPSAwOwotCWZvciAoaT0wLCBjcD13cDsgaTxsOyArK2ksICsrY3ApIHsKLQkgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7Ci0JfQotCWZvciAoOyBpPDQgJiYgY250PjA7ICsraSkgewotCSAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0JICAgIC0tY250OwotCSAgICArK2NwOwotCX0KLQlmb3IgKDsgY250PT0wICYmIGk8NDsgKytpLCArK2NwKSB7Ci0JICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotCX0KLQotCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotCSAgICByZXR1cm4gKHJjKTsKLQl9Ci0Jd3AgKz0gNDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAotICAgICAqLwotICAgIHdoaWxlIChjbnQgPj0gNCkgewotCWRhdGEgPSAwOwotCWZvciAoaT0wOyBpPDQ7ICsraSkgewotCSAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0JfQotCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotCSAgICByZXR1cm4gKHJjKTsKLQl9Ci0Jd3AgICs9IDQ7Ci0JY250IC09IDQ7Ci0gICAgfQotCi0gICAgaWYgKGNudCA9PSAwKSB7Ci0JcmV0dXJuICgwKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcwotICAgICAqLwotICAgIGRhdGEgPSAwOwotICAgIGZvciAoaT0wLCBjcD13cDsgaTw0ICYmIGNudD4wOyArK2ksICsrY3ApIHsKLQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0JLS1jbnQ7Ci0gICAgfQotICAgIGZvciAoOyBpPDQ7ICsraSwgKytjcCkgewotCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotICAgIH0KLQotICAgIHJldHVybiAod3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBXcml0ZSBhIHdvcmQgdG8gRmxhc2gsIHJldHVybnM6Ci0gKiAwIC0gT0sKLSAqIDEgLSB3cml0ZSB0aW1lb3V0Ci0gKiAyIC0gRmxhc2ggbm90IGVyYXNlZAotICovCi1zdGF0aWMgaW50IHdyaXRlX3dvcmQgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSkKLXsKLSAgICB2dV9sb25nICphZGRyID0gKHZ1X2xvbmcqKShpbmZvLT5zdGFydFswXSk7Ci0gICAgdWxvbmcgc3RhcnQ7Ci0gICAgaW50IGZsYWc7Ci0KLSAgICAvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KLSAgICBpZiAoKCooKHZ1X2xvbmcgKilkZXN0KSAmIGRhdGEpICE9IGRhdGEpIHsKLQlyZXR1cm4gKDIpOwotICAgIH0KLSAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLSAgICBmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLSAgICBpZiAoKGRlc3QgJiAweDAwMDAwMDA0KSA9PSAwKSB7Ci0JYWRkclsyICogMHgwNTU1XSA9IDB4QUFBQUFBQUE7Ci0JYWRkclsyICogMHgwMkFBXSA9IDB4NTU1NTU1NTU7Ci0JYWRkclsyICogMHgwNTU1XSA9IDB4QTBBMEEwQTA7Ci0gICAgfQotICAgIGVsc2UgewotCWFkZHJbMiAqIDB4MDU1NSArIDFdID0gMHhBQUFBQUFBQTsKLQlhZGRyWzIgKiAweDAyQUEgKyAxXSA9IDB4NTU1NTU1NTU7Ci0JYWRkclsyICogMHgwNTU1ICsgMV0gPSAweEEwQTBBMEEwOwotICAgIH0KLQotICAgICooKHZ1X2xvbmcgKilkZXN0KSA9IGRhdGE7Ci0KLSAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLSAgICBpZiAoZmxhZykKLSAgICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLSAgICAvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCi0gICAgc3RhcnQgPSBnZXRfdGltZXIgKDApOwotICAgIHdoaWxlICgoKigodnVfbG9uZyAqKWRlc3QpICYgMHg4MDgwODA4MCkgIT0gKGRhdGEgJiAweDgwODA4MDgwKSkgewotCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUKSB7Ci0JICAgIHJldHVybiAoMSk7Ci0JfQotICAgIH0KLSAgICByZXR1cm4gKDApOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3JweHN1cGVyL21paV9waHkuYyBiL2JvYXJkL3JweHN1cGVyL21paV9waHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJlMjNmNC4uMDAwMDAwMAotLS0gYS9ib2FyZC9ycHhzdXBlci9taWlfcGh5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPG1paV9waHkuaD4KLSNpbmNsdWRlICJycHhzdXBlci5oIgotCi0jZGVmaW5lIE1JSV9NRElPCTB4MDEKLSNkZWZpbmUgTUlJX01EQ0sJMHgwMgotI2RlZmluZSBNSUlfTURJUgkweDA0Ci0KLXZvaWQKLW1paV9kaXNjb3Zlcl9waHkodm9pZCkKLXsKLSAgICBpbnQga25vd247Ci0gICAgdW5zaWduZWQgc2hvcnQgcGh5X3JlZzsKLSAgICB1bnNpZ25lZCBsb25nIHBoeV9pZDsKLQotICAgIGtub3duID0gMDsKLSAgICBwcmludGYoIkRpc2NvdmVyaW5nIHBoeSBAIDA6ICIpOwotICAgIHBoeV9pZCA9IG1paV9waHlfcmVhZCgyKSA8PCAxNjsKLSAgICBwaHlfaWQgfD0gbWlpX3BoeV9yZWFkKDMpOwotICAgIGlmICgocGh5X2lkICYgMHhGRkZGRkMwMCkgPT0gMHgwMDEzNzgwMCkgewotCXByaW50ZigiTGV2ZWwgT25lICIpOwotCWlmICgocGh5X2lkICYgMHgwMDAwMDNGMCkgPT0gMHhFMCkgewotCSAgICBwcmludGYoIkxYVDk3MUEgUmV2aXNpb24gJWRcbiIsIChpbnQpKHBoeV9pZCAmIDB4RikpOwotCSAgICBrbm93biA9IDE7Ci0JfQotCWVsc2UgcHJpbnRmKCJ1bmtub3duIHR5cGVcbiIpOwotICAgIH0KLSAgICBlbHNlIHByaW50ZigidW5rbm93biBPVUkgPSAweCUwOGxYXG4iLCBwaHlfaWQpOwotCi0gICAgcGh5X3JlZyA9IG1paV9waHlfcmVhZCgxKTsKLSAgICBpZiAoIShwaHlfcmVnICYgMHgwMDA0KSkgcHJpbnRmKCJMaW5rIGlzIGRvd25cbiIpOwotICAgIGlmICghKHBoeV9yZWcgJiAweDAwMjApKSBwcmludGYoIkF1dG8tbmVnb3RpYXRpb24gbm90IGNvbXBsZXRlXG4iKTsKLSAgICBpZiAocGh5X3JlZyAmIDB4MDAwMikgcHJpbnRmKCJKYWJiZXIgY29uZGl0aW9uIGRldGVjdGVkXG4iKTsKLSAgICBpZiAocGh5X3JlZyAmIDB4MDAxMCkgcHJpbnRmKCJSZW1vdGUgZmF1bHQgY29uZGl0aW9uIGRldGVjdGVkIFxuIik7Ci0KLSAgICBpZiAoa25vd24pIHsKLQlwaHlfcmVnID0gbWlpX3BoeV9yZWFkKDE3KTsKLQlpZiAocGh5X3JlZyAmIDB4MDQwMCkKLQkgICAgcHJpbnRmKCJQaHkgb3BlcmF0aW5nIGF0ICVkIE1CaXQvcyBpbiAlcy1kdXBsZXggbW9kZVxuIiwKLQkJcGh5X3JlZyAmIDB4NDAwMCA/IDEwMCA6IDEwLAotCQlwaHlfcmVnICYgMHgwMjAwID8gImZ1bGwiIDogImhhbGYiKTsKLQllbHNlCi0JICAgIHByaW50ZigiYmFkIGxpbmshIVxuIik7Ci0vKgotbGVmdCAgb2ZmOiBubyBsaW5rLCBncmVlbiAxMDBNQml0LCB5ZWxsb3cgMTBNQml0Ci1yaWdodCBvZmY6IG5vIGFjdGl2aXR5LCBncmVlbiBmdWxsLWR1cGxleCwgeWVsbG93IGhhbGYtZHVwbGV4Ci0qLwotCW1paV9waHlfd3JpdGUoMjAsIDB4MDQ1Mik7Ci0gICAgfQotfQotCi11bnNpZ25lZCBzaG9ydAotbWlpX3BoeV9yZWFkKHVuc2lnbmVkIHNob3J0IHJlZykKLXsKLSAgICBpbnQgaTsKLSAgICB1bnNpZ25lZCBzaG9ydCB0bXAsIHZhbCA9IDAsIGFkciA9IDA7Ci0gICAgdF9ycHhfcmVncyAqcmVncyA9ICh0X3JweF9yZWdzKilDT05GSUdfU1lTX1JFR1NfQkFTRTsKLQotICAgIHRtcCA9IDB4NjAwMiB8IChhZHIgPDwgNykgfCAocmVnIDw8IDIpOwotICAgIHJlZ3MtPmJjc3I0ID0gMHhDMzsKLSAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCXJlZ3MtPmJjc3I0IF49IE1JSV9NRENLOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCXJlZ3MtPmJjc3I0ICY9IH5NSUlfTURDSzsKLQlpZiAodG1wICYgMHg4MDAwKSByZWdzLT5iY3NyNCB8PSBNSUlfTURJTzsKLQllbHNlIHJlZ3MtPmJjc3I0ICY9IH5NSUlfTURJTzsKLQlyZWdzLT5iY3NyNCB8PSBNSUlfTURDSzsKLQl0bXAgPDw9IDE7Ci0gICAgfQotICAgIHJlZ3MtPmJjc3I0IHw9IE1JSV9NRElSOwotICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JdmFsIDw8PSAxOwotCXJlZ3MtPmJjc3I0ID0gTUlJX01ESU8gfCAocmVncy0+YmNzcjQgfCBNSUlfTURDSyk7Ci0JaWYgKHJlZ3MtPmJjc3I0ICYgTUlJX01ESU8pIHZhbCB8PSAxOwotCXJlZ3MtPmJjc3I0ID0gTUlJX01ESU8gfCAocmVncy0+YmNzcjQgJj0gfk1JSV9NRENLKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbDsKLX0KLQotdm9pZAotbWlpX3BoeV93cml0ZSh1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCkKLXsKLSAgICBpbnQgaTsKLSAgICB1bnNpZ25lZCBzaG9ydCB0bXAsIGFkciA9IDA7Ci0gICAgdF9ycHhfcmVncyAqcmVncyA9ICh0X3JweF9yZWdzKilDT05GSUdfU1lTX1JFR1NfQkFTRTsKLQotICAgIHRtcCA9IDB4NTAwMiB8IChhZHIgPDwgNykgfCAocmVnIDw8IDIpOwotICAgIHJlZ3MtPmJjc3I0ID0gMHhDMzsKLSAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCXJlZ3MtPmJjc3I0IF49IE1JSV9NRENLOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCXJlZ3MtPmJjc3I0ICY9IH5NSUlfTURDSzsKLQlpZiAodG1wICYgMHg4MDAwKSByZWdzLT5iY3NyNCB8PSBNSUlfTURJTzsKLQllbHNlIHJlZ3MtPmJjc3I0ICY9IH5NSUlfTURJTzsKLQlyZWdzLT5iY3NyNCB8PSBNSUlfTURDSzsKLQl0bXAgPDw9IDE7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JcmVncy0+YmNzcjQgJj0gfk1JSV9NRENLOwotCWlmICh2YWwgJiAweDgwMDApIHJlZ3MtPmJjc3I0IHw9IE1JSV9NRElPOwotCWVsc2UgcmVncy0+YmNzcjQgJj0gfk1JSV9NRElPOwotCXJlZ3MtPmJjc3I0IHw9IE1JSV9NRENLOwotCXZhbCA8PD0gMTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9ycHhzdXBlci9yZWFkbWUgYi9ib2FyZC9ycHhzdXBlci9yZWFkbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMjY3YmQuLjAwMDAwMDAKLS0tIGEvYm9hcmQvcnB4c3VwZXIvcmVhZG1lCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotSGksCi0KLXNvIHRoaXMgaXMgdGhlIHBvcnQgdG8gdGhlIEVtYmVkZGVkIFBsYW5ldCBSUFggU3VwZXIgQm9hcmQuCi0KLUFUVEVOVElPTgotVGhpcyBjb2RlIGlzIG9ubHkgdGVzdGVkIG9uIHRoZSBBWS1WZXJzaW9uLCB3aGljaCBpcyBhbiBlYXJseSByZWxlYXNlIHdpdGggc29tZQotaGFyZHdhcmUgYnVncy4gVGhlIG1haW4gcHJvYmxlbSBpcyB0aGF0IHRoaXMgYm9hcmQgdXNlcyB0aGUgZGVmYXVsdCBIYXJkIFJlc2V0Ci1Db25maWd1cmF0aW9uIFdvcmQgYW5kIG5vdCB0aGUgNCBieXRlcyBsb2NhdGVkIGF0IHN0YXJ0IG9mIEZMQVNIIGJlY2F1c2UgYXQKLTB4RkUwMDAwMDAgaXMgbm8gRkxBU0guIFRoZSBGTEFTSCBjb25zaXN0cyBvdXQgb2YgNCBjaGlwcyBlYWNoIDE2Yml0cyB3aWRlLiBCZQotY2FyZWZ1bGwsIHRoZSBieXRlcyBhcmUgc3dhcHBlZC4gU28gRFEwLTcgaXMgdGhlIGhpZ2ggYnl0ZSwgRFE4LTE1IGlzdCB0aGUgbG93Ci1ieXRlLgotCi1UaGUgaWNhY2hlIGNhbiBvbmx5IG1hbnVhbGx5IGJlIGVuYWJsZWQgYWZ0ZXIgcmVzZXQuCi1UaGUgRkxBU0ggYW5kIG1haW4gU0RSQU0gaXMgd29ya2luZyB3aXRoIGljYWNoZSBlbmFibGVkLgotVGhlIGxvY2FsIFNEUkFNIGNhbiBvbmx5IGJlIHVzZWQgYXMgZGF0YSBtZW1vcnkgd2hlbiBpY2FjaGUgaXMgZW5hYmxlZC4KLUlmIFUtQm9vdCBydW5zIGluIGxvY2FsIFNEUkFNLCBURlRQIGRvZXMgbm90IHdvcmsuCi1UaGUgZnVuY3Rpb25zIGluIG1paV9waHkuYyBhcmUgYWxsIHdvcmtpbmcuIENhbGwgbWlpX3BoeV9kaXNjb3ZlcigpIG91dCBvZgotZXRoX2luaXQoKSBhbmQgc29sdmUgdGhlIGxpbmtlciBlcnJvci4KLUkyQywgUlRDL05WUkFNIGFuZCBQQ01DSUEgYXJlIG5vdCB3b3JraW5nIHlldC4KLQotVE9ETwotVGhlIDMyTUIgbG9jYWwgU0RSQU0gaXMgd29ya2luZyBidXQgbm90IHNob3duIGluIHRoZSBzdGFydHVwIG1lc3NhZ2VzIG9mCi1VLUJvb3QuIElmIHlvdSBsb2NhdGUgVS1Cb290IG9yIGFueSBvdGhlciBwcm9ncmFtIHRvIHRoaXMgYXJlYSBpdCB3b24ndCBydW4uCi1UdXJuaW5nIHRoZSBpY2hhY2hlIG9mZiBkb2VzIG5vdCBzb2x2ZSB0aGlzIHByb2JsZW0uCi0KLUFzIEkgd29uJ3QgYnV5IGFub3RoZXIgUlBYIFN1cGVyIHRoZXJlIG1pZ2h0IGJlIHNvbWUgbGl0dGxlIHdvcmsgdG8gZG8gZm9yIHlvdQotZ2V0dGluZyB0aGlzIFUtQm9vdCBwb3J0IHJ1bm5pbmcgb24gdGhlIGZpbmFsIGJvYXJkLgotCi0KLWZyYW5rLm1vcmF1ZkBzYWx6YnJlbm5lci5jb20KZGlmZiAtLWdpdCBhL2JvYXJkL3JweHN1cGVyL3JweHN1cGVyLmMgYi9ib2FyZC9ycHhzdXBlci9ycHhzdXBlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzU1ODcwLi4wMDAwMDAwCi0tLSBhL2JvYXJkL3JweHN1cGVyL3JweHN1cGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODkgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+Ci0gKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBBZHZlbnQgTmV0d29ya3MsIEluYy4gPGh0dHA6Ly93d3cuYWR2ZW50bmV0d29ya3MuY29tPgotICogSmF5IE1vbmttYW4gPGp0bUBzbW9vdGhzbW9vdGhpZS5jb20+Ci0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGlvcG9ydHMuaD4KLSNpbmNsdWRlIDxtcGM4MjYwLmg+Ci0jaW5jbHVkZSAicnB4c3VwZXIuaCIKLQotLyoKLSAqIEkvTyBQb3J0IGNvbmZpZ3VyYXRpb24gdGFibGUKLSAqCi0gKiBpZiBjb25mIGlzIDEsIHRoZW4gdGhhdCBwb3J0IHBpbiB3aWxsIGJlIGNvbmZpZ3VyZWQgYXQgYm9vdCB0aW1lCi0gKiBhY2NvcmRpbmcgdG8gdGhlIGZpdmUgdmFsdWVzIHBvZHIvcGRpci9wcGFyL3Bzb3IvcGRhdCBmb3IgdGhhdCBlbnRyeQotICovCi0KLWNvbnN0IGlvcF9jb25mX3QgaW9wX2NvbmZfdGFiWzRdWzMyXSA9IHsKLQotICAgIC8qIFBvcnQgQSBjb25maWd1cmF0aW9uICovCi0gICAgewkvKgkgICAgICBjb25mIHBwYXIgcHNvciBwZGlyIHBvZHIgcGRhdCAqLwotCS8qIFBBMzEgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSAqQVRNVFhFTiAqLwotCS8qIFBBMzAgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1UQ0EgICAqLwotCS8qIFBBMjkgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1UU09DICAqLwotCS8qIFBBMjggKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSAqQVRNUlhFTiAqLwotCS8qIFBBMjcgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1SU09DICovCi0JLyogUEEyNiAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIEFUTVJDQSAqLwotCS8qIFBBMjUgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1UWERbMF0gKi8KLQkvKiBQQTI0ICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNVFhEWzFdICovCi0JLyogUEEyMyAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIEFUTVRYRFsyXSAqLwotCS8qIFBBMjIgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1UWERbM10gKi8KLQkvKiBQQTIxICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNVFhEWzRdICovCi0JLyogUEEyMCAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIEFUTVRYRFs1XSAqLwotCS8qIFBBMTkgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1UWERbNl0gKi8KLQkvKiBQQTE4ICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNVFhEWzddICovCi0JLyogUEExNyAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIEFUTVJYRFs3XSAqLwotCS8qIFBBMTYgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1SWERbNl0gKi8KLQkvKiBQQTE1ICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNUlhEWzVdICovCi0JLyogUEExNCAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIEFUTVJYRFs0XSAqLwotCS8qIFBBMTMgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1SWERbM10gKi8KLQkvKiBQQTEyICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNUlhEWzJdICovCi0JLyogUEExMSAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIEFUTVJYRFsxXSAqLwotCS8qIFBBMTAgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1SWERbMF0gKi8KLQkvKiBQQTkgICovIHsgICAxLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFNNQzIgVFhEICovCi0JLyogUEE4ICAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBTTUMyIFJYRCAqLwotCS8qIFBBNyAgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEE3ICovCi0JLyogUEE2ICAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBQQTYgKi8KLQkvKiBQQTUgICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBBNSAqLwotCS8qIFBBNCAgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEE0ICovCi0JLyogUEEzICAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBQQTMgKi8KLQkvKiBQQTIgICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBBMiAqLwotCS8qIFBBMSAgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEExICovCi0JLyogUEEwICAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9ICAvKiBQQTAgKi8KLSAgICB9LAotCi0gICAgLyogUG9ydCBCIGNvbmZpZ3VyYXRpb24gKi8KLSAgICB7ICAgLyoJICAgICAgY29uZiBwcGFyIHBzb3IgcGRpciBwb2RyIHBkYXQgKi8KLQkvKiBQQjMxICovIHsgICAxLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIFRYX0VSICovCi0JLyogUEIzMCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBSWF9EViAqLwotCS8qIFBCMjkgKi8geyAgIDEsICAgMSwgICAxLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMiBNSUkgVFhfRU4gKi8KLQkvKiBQQjI4ICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIFJYX0VSICovCi0JLyogUEIyNyAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBDT0wgKi8KLQkvKiBQQjI2ICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIENSUyAqLwotCS8qIFBCMjUgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMiBNSUkgVHhEWzNdICovCi0JLyogUEIyNCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBUeERbMl0gKi8KLQkvKiBQQjIzICovIHsgICAxLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIFR4RFsxXSAqLwotCS8qIFBCMjIgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMiBNSUkgVHhEWzBdICovCi0JLyogUEIyMSAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBSeERbMF0gKi8KLQkvKiBQQjIwICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIFJ4RFsxXSAqLwotCS8qIFBCMTkgKi8geyAgIDEsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMiBNSUkgUnhEWzJdICovCi0JLyogUEIxOCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBSeERbM10gKi8KLQkvKiBQQjE3ICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzMgTUlJIFJYX0RWICovCi0JLyogUEIxNiAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBSWF9FUiAqLwotCS8qIFBCMTUgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMyBNSUkgVFhfRVIgKi8KLQkvKiBQQjE0ICovIHsgICAxLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzMgTUlJIFRYX0VOICovCi0JLyogUEIxMyAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBDT0wgKi8KLQkvKiBQQjEyICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzMgTUlJIENSUyAqLwotCS8qIFBCMTEgKi8geyAgIDEsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMyBNSUkgUnhEWzNdICovCi0JLyogUEIxMCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBSeERbMl0gKi8KLQkvKiBQQjkgICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzMgTUlJIFJ4RFsxXSAqLwotCS8qIFBCOCAgKi8geyAgIDEsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMyBNSUkgUnhEWzBdICovCi0JLyogUEI3ICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBQQjcgKi8KLQkvKiBQQjYgICovIHsgICAxLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzMgTUlJIFR4RFsxXSAqLwotCS8qIFBCNSAgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMyBNSUkgVHhEWzJdICovCi0JLyogUEI0ICAqLyB7ICAgMSwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBUeERbM10gKi8KLQkvKiBQQjMgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIHBpbiBkb2Vzbid0IGV4aXN0ICovCi0JLyogUEIyICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBwaW4gZG9lc24ndCBleGlzdCAqLwotCS8qIFBCMSAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogcGluIGRvZXNuJ3QgZXhpc3QgKi8KLQkvKiBQQjAgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0gIC8qIHBpbiBkb2Vzbid0IGV4aXN0ICovCi0gICAgfSwKLQotICAgIC8qIFBvcnQgQyAqLwotICAgIHsgICAvKgkgICAgICBjb25mIHBwYXIgcHNvciBwZGlyIHBvZHIgcGRhdCAqLwotCS8qIFBDMzEgKi8geyAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEMzMSAqLwotCS8qIFBDMzAgKi8geyAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEMzMCAqLwotCS8qIFBDMjkgKi8geyAgIDEsICAgMSwgICAxLCAgIDAsICAgMCwgICAwICAgfSwgLyogU0NDMSBFTiAqQ0xTTiAqLwotCS8qIFBDMjggKi8geyAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEMyOCAqLwotCS8qIFBDMjcgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMyBNSUkgVHhEWzBdICovCi0JLyogUEMyNiAqLyB7ICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBQQzI2ICovCi0JLyogUEMyNSAqLyB7ICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBQQzI1ICovCi0JLyogUEMyNCAqLyB7ICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBQQzI0ICovCi0JLyogUEMyMyAqLyB7ICAgMSwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBBVE1URkNMSyAqLwotCS8qIFBDMjIgKi8geyAgIDEsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogQVRNUkZDTEsgKi8KLQkvKiBQQzIxICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFNDQzEgRU4gUlhDTEsgKi8KLQkvKiBQQzIwICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFNDQzEgRU4gVFhDTEsgKi8KLQkvKiBQQzE5ICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIFJYX0NMSyAqLwotCS8qIFBDMTggKi8geyAgIDEsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMiBNSUkgVFhfQ0xLICovCi0JLyogUEMxNyAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBSWF9DTEsgKi8KLQkvKiBQQzE2ICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzMgTUlJIFRYX0NMSyAqLwotCS8qIFBDMTUgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEMxNSAqLwotCS8qIFBDMTQgKi8geyAgIDEsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogU0NDMSBFTiAqQ0QgKi8KLQkvKiBQQzEzICovIHsgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBDMTMgKi8KLQkvKiBQQzEyICovIHsgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBDMTIgKi8KLQkvKiBQQzExICovIHsgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBDMTEgKi8KLQkvKiBQQzEwICovIHsgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTURDICovCi0JLyogUEM5ICAqLyB7ICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1ESU8gKi8KLQkvKiBQQzggICovIHsgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBDOCAqLwotCS8qIFBDNyAgKi8geyAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEM3ICovCi0JLyogUEM2ICAqLyB7ICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBQQzYgKi8KLQkvKiBQQzUgICovIHsgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBDNSAqLwotCS8qIFBDNCAgKi8geyAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEM0ICovCi0JLyogUEMzICAqLyB7ICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBQQzMgKi8KLQkvKiBQQzIgICovIHsgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMSAgIH0sIC8qIEVORVQgRkRFICovCi0JLyogUEMxICAqLyB7ICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBFTkVUIERTUUUgKi8KLQkvKiBQQzAgICovIHsgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEVORVQgTEJLICovCi0gICAgfSwKLQotICAgIC8qIFBvcnQgRCAqLwotICAgIHsgICAvKgkgICAgICBjb25mIHBwYXIgcHNvciBwZGlyIHBvZHIgcGRhdCAqLwotCS8qIFBEMzEgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogU0NDMSBFTiBSeEQgKi8KLQkvKiBQRDMwICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFNDQzEgRU4gVHhEICovCi0JLyogUEQyOSAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBTQ0MxIEVOIFRFTkEgKi8KLQkvKiBQRDI4ICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBEMjggKi8KLQkvKiBQRDI3ICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBEMjcgKi8KLQkvKiBQRDI2ICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBEMjYgKi8KLQkvKiBQRDI1ICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBEMjUgKi8KLQkvKiBQRDI0ICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBEMjQgKi8KLQkvKiBQRDIzICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBEMjMgKi8KLQkvKiBQRDIyICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBEMjIgKi8KLQkvKiBQRDIxICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBEMjEgKi8KLQkvKiBQRDIwICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBEMjAgKi8KLQkvKiBQRDE5ICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBEMTkgKi8KLQkvKiBQRDE4ICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBEMTkgKi8KLQkvKiBQRDE3ICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNUlhQUlRZICovCi0JLyogUEQxNiAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIEFUTVRYUFJUWSAqLwotCS8qIFBEMTUgKi8geyAgIDEsICAgMSwgICAxLCAgIDAsICAgMSwgICAwICAgfSwgLyogSTJDIFNEQSAqLwotCS8qIFBEMTQgKi8geyAgIDEsICAgMSwgICAxLCAgIDAsICAgMSwgICAwICAgfSwgLyogSTJDIFNDTCAqLwotCS8qIFBEMTMgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEQxMyAqLwotCS8qIFBEMTIgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEQxMiAqLwotCS8qIFBEMTEgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEQxMSAqLwotCS8qIFBEMTAgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEQxMCAqLwotCS8qIFBEOSAgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogU01DMSBUWEQgKi8KLQkvKiBQRDggICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFNNQzEgUlhEICovCi0JLyogUEQ3ICAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBQRDcgKi8KLQkvKiBQRDYgICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFBENiAqLwotCS8qIFBENSAgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEQ1ICovCi0JLyogUEQ0ICAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBQRDQgKi8KLQkvKiBQRDMgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIHBpbiBkb2Vzbid0IGV4aXN0ICovCi0JLyogUEQyICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBwaW4gZG9lc24ndCBleGlzdCAqLwotCS8qIFBEMSAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogcGluIGRvZXNuJ3QgZXhpc3QgKi8KLQkvKiBQRDAgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0gIC8qIHBpbiBkb2Vzbid0IGV4aXN0ICovCi0gICAgfQotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogU2V0dXAgQ1M0IHRvIGVuYWJsZSB0aGUgQm9hcmQgQ29udHJvbC9TdGF0dXMgcmVnaXN0ZXJzLgotICogT3RoZXJ3aXNlIHRoZSBzbWNzIHdvbid0IHdvcmsuCi0qLwotaW50IGJvYXJkX2Vhcmx5X2luaXRfZiAodm9pZCkKLXsKLSAgICB2b2xhdGlsZSB0X3JweF9yZWdzICpyZWdzID0gKHRfcnB4X3JlZ3MqKUNPTkZJR19TWVNfUkVHU19CQVNFOwotICAgIHZvbGF0aWxlIGltbWFwX3QgKmltbWFwICA9IChpbW1hcF90ICopQ09ORklHX1NZU19JTU1SOwotICAgIHZvbGF0aWxlIG1lbWN0bDgyNjBfdCAqbWVtY3RsID0gJmltbWFwLT5pbV9tZW1jdGw7Ci0gICAgbWVtY3RsLT5tZW1jX2JyNCA9IENPTkZJR19TWVNfQlI0X1BSRUxJTTsKLSAgICBtZW1jdGwtPm1lbWNfb3I0ID0gQ09ORklHX1NZU19PUjRfUFJFTElNOwotICAgIHJlZ3MtPmJjc3IxID0gMHg3MDsgLyogdG8gZW5hYmxlIHRlcm1pbmFsIG5vIFNNQzEgKi8KLSAgICByZWdzLT5iY3NyMiA9IDB4MjA7CS8qIG11dCBiZSB3cml0dGVuIHRvIGVuYWJsZSB3cml0aW5nIEZMQVNIICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLXJlc2V0X3BoeSh2b2lkKQotewotICAgIHZvbGF0aWxlIHRfcnB4X3JlZ3MgKnJlZ3MgPSAodF9ycHhfcmVncyopQ09ORklHX1NZU19SRUdTX0JBU0U7Ci0gICAgcmVncy0+YmNzcjQgPSAweEMzOwotfQotCi0vKgotICogQ2hlY2sgQm9hcmQgSWRlbnRpdHk6Ci0gKi8KLQotaW50IGNoZWNrYm9hcmQodm9pZCkKLXsKLSAgICB2b2xhdGlsZSB0X3JweF9yZWdzICpyZWdzID0gKHRfcnB4X3JlZ3MqKUNPTkZJR19TWVNfUkVHU19CQVNFOwotICAgIHByaW50ZiAoIkJvYXJkOiBFbWJlZGRlZCBQbGFuZXQgUlBYIFN1cGVyLCBSZXZpc2lvbiAlZFxuIiwKLQlyZWdzLT5iY3NyMCA+PiA0KTsKLQotICAgIHJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXBoeXNfc2l6ZV90IGluaXRkcmFtKGludCBib2FyZF90eXBlKQotewotICAgIHZvbGF0aWxlIGltbWFwX3QgKmltbWFwICA9IChpbW1hcF90ICopQ09ORklHX1NZU19JTU1SOwotICAgIHZvbGF0aWxlIG1lbWN0bDgyNjBfdCAqbWVtY3RsID0gJmltbWFwLT5pbV9tZW1jdGw7Ci0gICAgdm9sYXRpbGUgdWNoYXIgYyA9IDAsICpyYW1hZGRyOwotICAgIHVsb25nIHBzZG1yLCBsc2RtciwgYmNyOwotICAgIGxvbmcgc2l6ZSA9IDA7Ci0gICAgaW50IGk7Ci0KLSAgICBwc2RtciA9IENPTkZJR19TWVNfUFNETVI7Ci0gICAgbHNkbXIgPSBDT05GSUdfU1lTX0xTRE1SOwotCi0gICAgLyoKLSAgICAgKiBRdW90ZSBmcm9tIDgyNjAgVU0gKDEwLjQuMiBTRFJBTSBQb3dlci1PbiBJbml0aWFsaXphdGlvbiwgMTAtMzUpOgotICAgICAqCi0gICAgICogIkF0IHN5c3RlbSByZXNldCwgaW5pdGlhbGl6YXRpb24gc29mdHdhcmUgbXVzdCBzZXQgdXAgdGhlCi0gICAgICogIHByb2dyYW1tYWJsZSBwYXJhbWV0ZXJzIGluIHRoZSBtZW1vcnkgY29udHJvbGxlciBiYW5rcyByZWdpc3RlcnMKLSAgICAgKiAgKE9SeCwgQlJ4LCBQL0xTRE1SKS4gQWZ0ZXIgYWxsIG1lbW9yeSBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkLAotICAgICAqICBzeXN0ZW0gc29mdHdhcmUgc2hvdWxkIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQotICAgICAqICBmb3IgZWFjaCBTRFJBTSBkZXZpY2UuCi0gICAgICoKLSAgICAgKiAgMS4gSXNzdWUgYSBQUkVDSEFSR0UtQUxMLUJBTktTIGNvbW1hbmQKLSAgICAgKiAgMi4gSXNzdWUgZWlnaHQgQ0JSIFJFRlJFU0ggY29tbWFuZHMKLSAgICAgKiAgMy4gSXNzdWUgYSBNT0RFLVNFVCBjb21tYW5kIHRvIGluaXRpYWxpemUgdGhlIG1vZGUgcmVnaXN0ZXIKLSAgICAgKgotICAgICAqICBUaGUgaW5pdGlhbCBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgYnkgc2V0dGluZyBQL0xTRE1SW09QXSBhbmQKLSAgICAgKiAgYWNjZXNzaW5nIHRoZSBTRFJBTSB3aXRoIGEgc2luZ2xlLWJ5dGUgdHJhbnNhY3Rpb24uIgotICAgICAqCi0gICAgICogVGhlIGFwcHJvcHJpYXRlIEJSeC9PUnggcmVnaXN0ZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHNldCB3aGVuIHdlCi0gICAgICogZ2V0IGhlcmUuIFRoZSBTRFJBTSBjYW4gYmUgYWNjZXNzZWQgYXQgdGhlIGFkZHJlc3MgQ09ORklHX1NZU19TRFJBTV9CQVNFLgotICAgICAqLwotCi0gICAgc2l6ZSA9IENPTkZJR19TWVNfU0RSQU0wX1NJWkU7Ci0gICAgYmNyID0gaW1tYXAtPmltX3NpdV9jb25mLnNjX2JjcjsKLSAgICBpbW1hcC0+aW1fc2l1X2NvbmYuc2NfYmNyID0gKGJjciAmIH5CQ1JfRUJNKTsKLQotICAgIG1lbWN0bC0+bWVtY19tcHRwciA9IENPTkZJR19TWVNfTVBUUFI7Ci0KLSAgICByYW1hZGRyID0gKHVjaGFyICopKENPTkZJR19TWVNfU0RSQU0wX0JBU0UpOwotICAgIG1lbWN0bC0+bWVtY19wc3J0ID0gQ09ORklHX1NZU19QU1JUOwotCi0gICAgbWVtY3RsLT5tZW1jX3BzZG1yID0gcHNkbXIgfCBQU0RNUl9PUF9QUkVBOwotICAgICpyYW1hZGRyID0gYzsKLQotICAgIG1lbWN0bC0+bWVtY19wc2RtciA9IHBzZG1yIHwgUFNETVJfT1BfQ0JSUjsKLSAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCSpyYW1hZGRyID0gYzsKLQotICAgIG1lbWN0bC0+bWVtY19wc2RtciA9IHBzZG1yIHwgUFNETVJfT1BfTVJXOwotICAgICpyYW1hZGRyID0gYzsKLQotICAgIG1lbWN0bC0+bWVtY19wc2RtciA9IHBzZG1yIHwgUFNETVJfT1BfTk9STSB8IFBTRE1SX1JGRU47Ci0gICAgKnJhbWFkZHIgPSBjOwotCi0gICAgaW1tYXAtPmltX3NpdV9jb25mLnNjX2JjciA9IGJjcjsKLQotI2lmbmRlZiBDT05GSUdfU1lTX1JBTUJPT1QKLS8qICAgIHNpemUgKz0gQ09ORklHX1NZU19TRFJBTTFfU0laRTsgKi8KLSAgICByYW1hZGRyID0gKHVjaGFyICopKENPTkZJR19TWVNfU0RSQU0xX0JBU0UpOwotICAgIG1lbWN0bC0+bWVtY19sc3J0ID0gQ09ORklHX1NZU19MU1JUOwotCi0gICAgbWVtY3RsLT5tZW1jX2xzZG1yID0gbHNkbXIgfCBQU0RNUl9PUF9QUkVBOwotICAgICpyYW1hZGRyID0gYzsKLQotICAgIG1lbWN0bC0+bWVtY19sc2RtciA9IGxzZG1yIHwgUFNETVJfT1BfQ0JSUjsKLSAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCSpyYW1hZGRyID0gYzsKLQotICAgIG1lbWN0bC0+bWVtY19sc2RtciA9IGxzZG1yIHwgUFNETVJfT1BfTVJXOwotICAgICpyYW1hZGRyID0gYzsKLQotICAgIG1lbWN0bC0+bWVtY19sc2RtciA9IGxzZG1yIHwgUFNETVJfT1BfTk9STSB8IFBTRE1SX1JGRU47Ci0gICAgKnJhbWFkZHIgPSBjOwotI2VuZGlmCi0KLSAgICAvKiByZXR1cm4gdG90YWwgcmFtIHNpemUgKi8KLSAgICByZXR1cm4gKHNpemUgKiAxMDI0ICogMTAyNCk7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9ycHhzdXBlci9ycHhzdXBlci5oIGIvYm9hcmQvcnB4c3VwZXIvcnB4c3VwZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYzMTA2MC4uMDAwMDAwMAotLS0gYS9ib2FyZC9ycHhzdXBlci9ycHhzdXBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotI2lmbmRlZiBfX1JQWDgyNjBfSF9fCi0jZGVmaW5lIF9fUlBYODI2MF9IX18KLQotdHlwZWRlZiBzdHJ1Y3QgdHRfcnB4X3JlZ3MKLXsKLSAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGJjc3IwOwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgYmNzcjE7Ci0gICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBiY3NyMjsKLSAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGJjc3IzOwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgYmNzcjQ7Ci0gICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBiY3NyNTsKLSAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGJjc3I2OwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgYmNzcjc7Ci0gICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBiY3NyODsKLSAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGJjc3I5OwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgYmNzcjEwOwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgYmNzcjExOwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgYmNzcjEyOwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgYmNzcjEzOwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgYmNzcjE0OwotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgYmNzcjE1OwotfSB0X3JweF9yZWdzOwotdHlwZWRlZiB0X3JweF9yZWdzKiB0cF9ycHhfcmVnczsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9yc2Rwcm90by9NYWtlZmlsZSBiL2JvYXJkL3JzZHByb3RvL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzUxZTk0Li4wMDAwMDAwCi0tLSBhL2JvYXJkL3JzZHByb3RvL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2Ci0jIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0jCi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotIwotCi1vYmoteQk6PSByc2Rwcm90by5vIGZsYXNoLm8KLW9iai15CSs9IGZsYXNoX2FzbS5vCmRpZmYgLS1naXQgYS9ib2FyZC9yc2Rwcm90by9mbGFzaC5jIGIvYm9hcmQvcnNkcHJvdG8vZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzczMjZkNS4uMDAwMDAwMAotLS0gYS9ib2FyZC9yc2Rwcm90by9mbGFzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzg2ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KLSAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBGbGFzaCBSb3V0aW5lcyBmb3IgQU0yOTBbNDhdMEIgZGV2aWNlcwotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxtcGM4eHguaD4KLQotLyogZmxhc2ggaGFyZHdhcmUgaWRzICovCi0jZGVmaW5lIFZFTkRPUl9BTUQgICAgIDB4MDAwMQotI2RlZmluZSBBTURfMjlETDMyM0NfQiAweDIyNTMKLQotLyogRGVmaW5lIHRoaXMgdG8gaW5jbHVkZSBhdXRvc2VsZWN0IHNlcXVlbmNlIGluIGZsYXNoX2luaXQoKS4gRG9lcyBOT1QKLSAqIHdvcmsgd2hlbiBleGVjdXRpbmcgZnJvbSBmbGFzaCBpdHNlbGYsIHNvIHRoaXMgc2hvdWxkIGJlIHR1cm5lZAotICogb24gb25seSB3aGVuIGRlYnVnZ2luZyB0aGUgUkFNIHZlcnNpb24uCi0gKi8KLSN1bmRlZiBXSVRIX0FVVE9TRUxFQ1QKLQotZmxhc2hfaW5mb190CWZsYXNoX2luZm9bQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1NdOyAvKiBpbmZvIGZvciBGTEFTSCBjaGlwcwkqLwotCi0jaWYgMQotI2RlZmluZSBEKHgpCi0jZWxzZQotI2RlZmluZSBEKHgpIHByaW50ZiB4Ci0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRnVuY3Rpb25zCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd3JpdGVfdWxsKGZsYXNoX2luZm9fdCAqaW5mbywKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIGRhdGEpOwotCi0vKiBmcm9tIGZsYXNoX2FzbS5TICovCi1leHRlcm4gdm9pZCB1bGxfd3JpdGUodW5zaWduZWQgbG9uZyBsb25nIHZvbGF0aWxlICphZGRyZXNzLAotCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdm9sYXRpbGUgKmRhdGEpOwotZXh0ZXJuIHZvaWQgdWxsX3JlYWQodW5zaWduZWQgbG9uZyBsb25nIHZvbGF0aWxlICphZGRyZXNzLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2b2xhdGlsZSAqZGF0YSk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi11bnNpZ25lZCBsb25nIGZsYXNoX2luaXQgKHZvaWQpCi17Ci0gICAgaW50IGk7Ci0gICAgdWxvbmcgYWRkcjsKLQotI2lmZGVmIFdJVEhfQVVUT1NFTEVDVAotCXsKLQkJdW5zaWduZWQgbG9uZyBsb25nICpmX2FkZHIgPSAodW5zaWduZWQgbG9uZyBsb25nICopUEhZU19GTEFTSDsKLQkJdW5zaWduZWQgbG9uZyBsb25nIGZfY29tbWFuZCwgdmVuZG9yLCBkZXZpY2U7Ci0JCS8qIFBlcmZvcm0gQXV0b3NlbGVjdCAqLwotCQlmX2NvbW1hbmQJPSAweDAwQUEwMEFBMDBBQTAwQUFVTEw7Ci0JCXVsbF93cml0ZSgmZl9hZGRyWzB4NTU1XSwgJmZfY29tbWFuZCk7Ci0JCWZfY29tbWFuZAk9IDB4MDA1NTAwNTUwMDU1MDA1NVVMTDsKLQkJdWxsX3dyaXRlKCZmX2FkZHJbMHgyQUFdLCAmZl9jb21tYW5kKTsKLQkJZl9jb21tYW5kCT0gMHgwMDkwMDA5MDAwOTAwMDkwVUxMOwotCQl1bGxfd3JpdGUoJmZfYWRkclsweDU1NV0sICZmX2NvbW1hbmQpOwotCQl1bGxfcmVhZCgmZl9hZGRyWzBdLCAmdmVuZG9yKTsKLQkJdmVuZG9yICY9IDB4ZmZmZjsKLQkJdWxsX3JlYWQoJmZfYWRkclsxXSwgJmRldmljZSk7Ci0JCWRldmljZSAmPSAweGZmZmY7Ci0JCWZfY29tbWFuZAk9IDB4MDBGMDAwRjAwMEYwMDBGMFVMTDsKLQkJdWxsX3dyaXRlKCZmX2FkZHJbMHg1NTVdLCAmZl9jb21tYW5kKTsKLQkJaWYgKHZlbmRvciAhPSBWRU5ET1JfQU1EIHx8IGRldmljZSAhPSBBTURfMjlETDMyM0NfQikKLQkJICByZXR1cm4gMDsKLQl9Ci0jZW5kaWYKLQotICAgIC8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KLSAgICBmb3IgKGk9MDsgaTxDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUzsgKytpKSB7Ci0JCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotICAgIH0KLQotCS8qIDFzdCBiYW5rOiA4IHggMzIgS0Igc2VjdG9ycyAqLwotCWZsYXNoX2luZm9bMF0uZmxhc2hfaWQgPSBWRU5ET1JfQU1EIDw8IDE2IHwgQU1EXzI5REwzMjNDX0I7Ci0JZmxhc2hfaW5mb1swXS5zZWN0b3JfY291bnQgPSA4OwotCWZsYXNoX2luZm9bMF0uc2l6ZSA9IGZsYXNoX2luZm9bMF0uc2VjdG9yX2NvdW50ICogMzIgKiAxMDI0OwotCWFkZHIgPSBQSFlTX0ZMQVNIOwotICAgIGZvcihpID0gMDsgaSA8IGZsYXNoX2luZm9bMF0uc2VjdG9yX2NvdW50OyBpKyspIHsKLQkJZmxhc2hfaW5mb1swXS5zdGFydFtpXSA9IGFkZHI7Ci0JCWFkZHIgKz0gZmxhc2hfaW5mb1swXS5zaXplIC8gZmxhc2hfaW5mb1swXS5zZWN0b3JfY291bnQ7Ci0JfQotCS8qIDFzdCBiYW5rOiA2MyB4IDI1NiBLQiBzZWN0b3JzICovCi0JZmxhc2hfaW5mb1sxXS5mbGFzaF9pZCA9IFZFTkRPUl9BTUQgPDwgMTYgfCBBTURfMjlETDMyM0NfQjsKLQlmbGFzaF9pbmZvWzFdLnNlY3Rvcl9jb3VudCA9IDYzOwotCWZsYXNoX2luZm9bMV0uc2l6ZSA9IGZsYXNoX2luZm9bMV0uc2VjdG9yX2NvdW50ICogMjU2ICogMTAyNDsKLSAgICBmb3IoaSA9IDA7IGkgPCBmbGFzaF9pbmZvWzFdLnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0JCWZsYXNoX2luZm9bMV0uc3RhcnRbaV0gPSBhZGRyOwotCQlhZGRyICs9IGZsYXNoX2luZm9bMV0uc2l6ZSAvIGZsYXNoX2luZm9bMV0uc2VjdG9yX2NvdW50OwotCX0KLQotCS8qCi0JICogcHJvdGVjdCBtb25pdG9yIGFuZCBlbnZpcm9ubWVudCBzZWN0b3JzCi0JICovCi0KLSNpZiBDT05GSUdfU1lTX01PTklUT1JfQkFTRSA+PSBQSFlTX0ZMQVNICi0JZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotCQkgICAgICBDT05GSUdfU1lTX01PTklUT1JfQkFTRSwKLQkJICAgICAgQ09ORklHX1NZU19NT05JVE9SX0JBU0UrbW9uaXRvcl9mbGFzaF9sZW4tMSwKLQkJICAgICAgJmZsYXNoX2luZm9bMF0pOwotCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLQkJICAgICAgQ09ORklHX1NZU19NT05JVE9SX0JBU0UsCi0JCSAgICAgIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFK21vbml0b3JfZmxhc2hfbGVuLTEsCi0JCSAgICAgICZmbGFzaF9pbmZvWzFdKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfRU5WX0lTX0lOX0ZMQVNIKSAmJiBkZWZpbmVkKENPTkZJR19FTlZfQUREUikKLSMgaWZuZGVmICBDT05GSUdfRU5WX1NJWkUKLSMgIGRlZmluZSBDT05GSUdfRU5WX1NJWkUJQ09ORklHX0VOVl9TRUNUX1NJWkUKLSMgZW5kaWYKLQlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCi0JCSAgICAgIENPTkZJR19FTlZfQUREUiwKLQkJICAgICAgQ09ORklHX0VOVl9BRERSICsgQ09ORklHX0VOVl9TSVpFIC0gMSwKLQkJICAgICAgJmZsYXNoX2luZm9bMF0pOwotCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLQkJICAgICAgQ09ORklHX0VOVl9BRERSLAotCQkgICAgICBDT05GSUdfRU5WX0FERFIgKyBDT05GSUdfRU5WX1NJWkUgLSAxLAotCQkgICAgICAmZmxhc2hfaW5mb1sxXSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBmbGFzaF9pbmZvWzBdLnNpemUgKyBmbGFzaF9pbmZvWzFdLnNpemU7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotdm9pZCBmbGFzaF9wcmludF9pbmZvICAoZmxhc2hfaW5mb190ICppbmZvKQotewotICAgIGludCBpOwotCi0gICAgaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJcHJpbnRmICgibWlzc2luZyBvciB1bmtub3duIEZMQVNIIHR5cGVcbiIpOwotCQlyZXR1cm47Ci0gICAgfQotCi0gICAgc3dpdGNoIChpbmZvLT5mbGFzaF9pZCA+PiAxNikgewotICAgIGNhc2UgVkVORE9SX0FNRDoKLQkJcHJpbnRmICgiQU1EICIpOwotCQlicmVhazsKLSAgICBkZWZhdWx0OgotCQlwcmludGYgKCJVbmtub3duIFZlbmRvciAiKTsKLQkJYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7Ci0gICAgY2FzZSBBTURfMjlETDMyM0NfQjoKLQkJcHJpbnRmICgiQU0yOURMMzIzQ0IgKDMyIE1iaXQpXG4iKTsKLQkJYnJlYWs7Ci0gICAgZGVmYXVsdDoKLQkJcHJpbnRmICgiVW5rbm93biBDaGlwIFR5cGVcbiIpOwotCQlicmVhazsKLSAgICB9Ci0KLSAgICBwcmludGYgKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAotCQkJaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKLQotICAgIHByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKLSAgICBmb3IgKGk9MDsgaTxpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgewotCQlpZiAoKGkgJSA1KSA9PSAwKQotCQkgIHByaW50ZiAoIlxuICAgIik7Ci0JCXByaW50ZiAoIiAlMDhsWCVzIiwKLQkJCQlpbmZvLT5zdGFydFtpXSwKLQkJCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIKLQkJCQkpOwotICAgIH0KLSAgICBwcmludGYgKCJcbiIpOwotICAgIHJldHVybjsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLWludAlmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICppbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKLXsKLSAgICBpbnQgZmxhZywgcHJvdCwgc2VjdCwgbF9zZWN0OwotICAgIHVsb25nIHN0YXJ0OwotCXVuc2lnbmVkIGxvbmcgbG9uZyB2b2xhdGlsZSAqZl9hZGRyOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB2b2xhdGlsZSBmX2NvbW1hbmQ7Ci0KLSAgICBpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKLQkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkJCXByaW50ZiAoIi0gbWlzc2luZ1xuIik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOwotCQl9Ci0JCXJldHVybiAxOwotICAgIH0KLQotICAgIHByb3QgPSAwOwotICAgIGZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyBzZWN0KyspIHsKLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKLQkJCXByb3QrKzsKLQkJfQotICAgIH0KLSAgICBpZiAocHJvdCkgewotCQlwcmludGYgKCItIFdhcm5pbmc6ICVkIHByb3RlY3RlZCBzZWN0b3JzIHdpbGwgbm90IGJlIGVyYXNlZCFcbiIsCi0JCQkJcHJvdCk7Ci0gICAgfSBlbHNlIHsKLQkJcHJpbnRmICgiXG4iKTsKLSAgICB9Ci0KLQlmX2FkZHIJPSAodW5zaWduZWQgbG9uZyBsb25nICopaW5mby0+c3RhcnRbMF07Ci0JZl9jb21tYW5kCT0gMHgwMEFBMDBBQTAwQUEwMEFBVUxMOwotCXVsbF93cml0ZSgmZl9hZGRyWzB4NTU1XSwgJmZfY29tbWFuZCk7Ci0JZl9jb21tYW5kCT0gMHgwMDU1MDA1NTAwNTUwMDU1VUxMOwotCXVsbF93cml0ZSgmZl9hZGRyWzB4MkFBXSwgJmZfY29tbWFuZCk7Ci0JZl9jb21tYW5kCT0gMHgwMDgwMDA4MDAwODAwMDgwVUxMOwotCXVsbF93cml0ZSgmZl9hZGRyWzB4NTU1XSwgJmZfY29tbWFuZCk7Ci0JZl9jb21tYW5kCT0gMHgwMEFBMDBBQTAwQUEwMEFBVUxMOwotCXVsbF93cml0ZSgmZl9hZGRyWzB4NTU1XSwgJmZfY29tbWFuZCk7Ci0JZl9jb21tYW5kCT0gMHgwMDU1MDA1NTAwNTUwMDU1VUxMOwotCXVsbF93cml0ZSgmZl9hZGRyWzB4MkFBXSwgJmZfY29tbWFuZCk7Ci0KLSAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KLSAgICBmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLSAgICAvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCi0gICAgZm9yIChsX3NlY3QgPSAtMSwgc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgc2VjdCsrKSB7Ci0JCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsJLyogbm90IHByb3RlY3RlZCAqLwotCi0JCQlmX2FkZHIJPQotCQkJICAodW5zaWduZWQgbG9uZyBsb25nICopKGluZm8tPnN0YXJ0W3NlY3RdKTsKLQkJCWZfY29tbWFuZAk9IDB4MDAzMDAwMzAwMDMwMDAzMFVMTDsKLQkJCXVsbF93cml0ZShmX2FkZHIsICZmX2NvbW1hbmQpOwotCQkJbF9zZWN0ID0gc2VjdDsKLQkJfQotICAgIH0KLQotICAgIC8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwotICAgIGlmIChmbGFnKQotICAgICAgZW5hYmxlX2ludGVycnVwdHMoKTsKLQotCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKLQlkbwotCXsKLQkJaWYgKGdldF90aW1lcihzdGFydCkgPiBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQpCi0JCXsJLyogd3JpdGUgcmVzZXQgY29tbWFuZCwgY29tbWFuZCBhZGRyZXNzIGlzIHVuaW1wb3J0YW50ICovCi0JCQkvKiB0aGlzIGNvbW1hbmQgdHVybnMgdGhlIGZsYXNoIGJhY2sgdG8gcmVhZCBtb2RlICAgICAqLwotCQkJZl9hZGRyID0KLQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShpbmZvLT5zdGFydFtsX3NlY3RdKTsKLQkJCWZfY29tbWFuZAk9IDB4MDBGMDAwRjAwMEYwMDBGMFVMTDsKLQkJCXVsbF93cml0ZShmX2FkZHIsICZmX2NvbW1hbmQpOwotCQkJcHJpbnRmICgiIHRpbWVvdXRcbiIpOwotCQkJcmV0dXJuIDE7Ci0JfQotCX0gd2hpbGUoKmZfYWRkciAhPSAweEZGRkZGRkZGRkZGRkZGRkZVTEwpOwotCi0gICAgcHJpbnRmICgiIGRvbmVcbiIpOwotICAgIHJldHVybiAwOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDb3B5IG1lbW9yeSB0byBmbGFzaCwgcmV0dXJuczoKLSAqIDAgLSBPSwotICogMSAtIHdyaXRlIHRpbWVvdXQKLSAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCi0gKi8KLQotaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqaW5mbywgdWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQotewotICAgIHVuc2lnbmVkIGxvbmcgY3AsIHdwOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhOwotICAgIGludCBpLCBsLCByYzsKLQotICAgIHdwID0gKGFkZHIgJiB+Nyk7CS8qIGdldCBsb3dlciBsb25nIGxvbmcgYWxpZ25lZCBhZGRyZXNzICovCi0KLSAgICAvKgotICAgICAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKLSAgICAgKi8KLSAgICBpZiAoKGwgPSBhZGRyIC0gd3ApICE9IDApIHsKLQkJZGF0YSA9IDA7Ci0JCWZvciAoaT0wLCBjcD13cDsgaTxsOyArK2ksICsrY3ApIHsKLQkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotCQl9Ci0JCWZvciAoOyBpPDggJiYgY250PjA7ICsraSkgewotCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotCQkJLS1jbnQ7Ci0JCQkrK2NwOwotCQl9Ci0JCWZvciAoOyBjbnQ9PTAgJiYgaTw4OyArK2ksICsrY3ApIHsKLQkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotCQl9Ci0KLQkJaWYgKChyYyA9IHdyaXRlX3VsbChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKLQkJCXJldHVybiByYzsKLQkJfQotCQl3cCArPSA0OwotICAgIH0KLQotICAgIC8qCi0gICAgICogaGFuZGxlIGxvbmcgbG9uZyBhbGlnbmVkIHBhcnQKLSAgICAgKi8KLSAgICB3aGlsZSAoY250ID49IDgpIHsKLQkJZGF0YSA9IDA7Ci0JCWZvciAoaT0wOyBpPDg7ICsraSkgewotCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotCQl9Ci0JCWlmICgocmMgPSB3cml0ZV91bGwoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQkJd3AgICs9IDg7Ci0JCWNudCAtPSA4OwotICAgIH0KLQotICAgIGlmIChjbnQgPT0gMCkgewotCQlyZXR1cm4gRVJSX09LOwotICAgIH0KLQotICAgIC8qCi0gICAgICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzCi0gICAgICovCi0gICAgZGF0YSA9IDA7Ci0gICAgZm9yIChpPTAsIGNwPXdwOyBpPDggJiYgY250PjA7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0JCS0tY250OwotICAgIH0KLSAgICBmb3IgKDsgaTw4OyArK2ksICsrY3ApIHsKLQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHdyaXRlX3VsbChpbmZvLCB3cCwgZGF0YSk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qCi0qIEZVTkNUSU9OIE5BTUU6ICB3cml0ZV91bGwKLSoKLSogREVTQ1JJUFRJT046ICAgd3JpdGVzIDggYnl0ZXMgdG8gZmxhc2gKLSoKLSogRVhURVJOQUwgRUZGRUNUOiBub3RoaW5nCi0qCi0qIFBBUkFNRVRFUlM6ICAgMzIgYml0IGxvbmcgcG9pbnRlciB0byBhZGRyZXNzLCA2NCBiaXQgbG9uZyBwb2ludGVyIHRvIGRhdGEKLSoKLSogUkVUVVJOUzoJMCBpZiBPSywgMSBpZiB0aW1lb3V0LCA0IGlmIHBhcmFtZXRlciBlcnJvcgotKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgd3JpdGVfdWxsKGZsYXNoX2luZm9fdCAqaW5mbywKLQkJCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkJCQkJICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIGRhdGEpCi17Ci0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBmX2NvbW1hbmQ7Ci0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqZl9hZGRyOwotCXVsb25nIHN0YXJ0OwotCi0JLyogYWRkcmVzcyBtdXNzIGJlIDgtYWxpZ25lZCEgKi8KLQlpZiAoYWRkcmVzcyAmIDB4NykKLQkgIHJldHVybiBFUlJfQUxJR047Ci0KLQlmX2FkZHIJPSAodW5zaWduZWQgbG9uZyBsb25nICopaW5mby0+c3RhcnRbMF07Ci0JZl9jb21tYW5kCT0gMHgwMEFBMDBBQTAwQUEwMEFBVUxMOwotCXVsbF93cml0ZSgmZl9hZGRyWzB4NTU1XSwgJmZfY29tbWFuZCk7Ci0JZl9jb21tYW5kCT0gMHgwMDU1MDA1NTAwNTUwMDU1VUxMOwotCXVsbF93cml0ZSgmZl9hZGRyWzB4MkFBXSwgJmZfY29tbWFuZCk7Ci0JZl9jb21tYW5kCT0gMHgwMEEwMDBBMDAwQTAwMEEwVUxMOwotCXVsbF93cml0ZSgmZl9hZGRyWzB4NTU1XSwgJmZfY29tbWFuZCk7Ci0KLQlmX2FkZHIJPSAodW5zaWduZWQgbG9uZyBsb25nICopYWRkcmVzczsKLQlmX2NvbW1hbmQJPSBkYXRhOwotCXVsbF93cml0ZShmX2FkZHIsICZmX2NvbW1hbmQpOwotCi0Jc3RhcnQgPSBnZXRfdGltZXIgKDApOwotCWRvCi0JewotCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVCkKLQkJewotCQkJLyogd3JpdGUgcmVzZXQgY29tbWFuZCwgY29tbWFuZCBhZGRyZXNzIGlzIHVuaW1wb3J0YW50ICovCi0JCQkvKiB0aGlzIGNvbW1hbmQgdHVybnMgdGhlIGZsYXNoIGJhY2sgdG8gcmVhZCBtb2RlICAgICAqLwotCQkJZl9hZGRyCT0gKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWluZm8tPnN0YXJ0WzBdOwotCQkJZl9jb21tYW5kCT0gMHgwMEYwMDBGMDAwRjAwMEYwVUxMOwotCQkJdWxsX3dyaXRlKGZfYWRkciwgJmZfY29tbWFuZCk7Ci0JCQlyZXR1cm4gRVJSX1RJTU9VVDsKLQkJfQotCX0gd2hpbGUoKigodW5zaWduZWQgbG9uZyBsb25nICopYWRkcmVzcykgIT0gZGF0YSk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL3JzZHByb3RvL2ZsYXNoX2FzbS5TIGIvYm9hcmQvcnNkcHJvdG8vZmxhc2hfYXNtLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1N2NhYzAuLjAwMDAwMDAKLS0tIGEvYm9hcmQvcnNkcHJvdG8vZmxhc2hfYXNtLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogLSotIG1vZGU6YyAtKi0KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KLSAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgotICoKLSAqIHZvaWQgdWxsX3dyaXRlKHVuc2lnbmVkIGxvbmcgbG9uZyB2b2xhdGlsZSAqYWRkcmVzcywKLSAqICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2b2xhdGlsZSAqZGF0YSkKLSAqIHIzID0gYWRkcmVzcwotICogcjQgPSBkYXRhCi0gKgotICogdm9pZCB1bGxfcmVhZCh1bnNpZ25lZCBsb25nIGxvbmcgdm9sYXRpbGUgKmFkZHJlc3MsCi0gKiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdm9sYXRpbGUgKmRhdGEpCi0gKiByMyA9IGFkZHJlc3MKLSAqIHI0ID0gZGF0YQotICoKLSAqIFVzZXMgdGhlIGZsb2F0aW5nIHBvaW50IHVuaXQgdG8gcmVhZCBhbmQgd3JpdGUgNjQgYml0IHdpZGUKLSAqIGRhdGEgKHVuc2lnbmVkIGxvbmcgbG9uZykgb24gdGhlIDYweCBidXMuIFRoaXMgaXMgbmVjZXNzYXJ5Ci0gKiBiZWNhdXNlIGFsbCA0IGZsYXNoIGNoaXBzIHVzZSB0aGUgL1dFIGxpbmUgZnJvbSBieXRlIGxhbmUgMAotICoKLSAqIElNUE9SVEFOVDogZGF0YSBzaG91bGQgYWx3YXlzIGJlIDgtYWxpZ25lZCwgb3RoZXJ3aXNlIGFuIGV4Y2VwdGlvbiB3aWxsCi0gKiBvY2N1ci4KLSAqLwotCi0jaW5jbHVkZSA8cHBjX2FzbS50bXBsPgotI2luY2x1ZGUgPHBwY19kZWZzLmg+Ci0KLQkuZ2xvYmwJdWxsX3dyaXRlCi11bGxfd3JpdGU6Ci0JbGZkCQkwLDAocjQpCi0Jc3RmZAkwLDAocjMpCi0JYmxyCi0KLQkuZ2xvYmwJdWxsX3JlYWQKLXVsbF9yZWFkOgotCWxmZAkJMCwgMChyMykKLQlzdGZkCTAsIDAocjQpCi0JYmxyCmRpZmYgLS1naXQgYS9ib2FyZC9yc2Rwcm90by9yc2Rwcm90by5jIGIvYm9hcmQvcnNkcHJvdG8vcnNkcHJvdG8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU4NWMyNy4uMDAwMDAwMAotLS0gYS9ib2FyZC9yc2Rwcm90by9yc2Rwcm90by5jCisrKyAvZGV2L251bGwKQEAgLTEsMzYxICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgotICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxpb3BvcnRzLmg+Ci0jaW5jbHVkZSA8bXBjODI2MC5oPgotI2luY2x1ZGUgPGkyYy5oPgotI2luY2x1ZGUgPGJjZC5oPgotCi0vKiBkZWZpbmUgdG8gaW5pdGlhbGlzZSB0aGUgU0RSQU0gb24gdGhlIGxvY2FsIGJ1cyAqLwotI3VuZGVmIElOSVRfTE9DQUxfQlVTX1NEUkFNCi0KLS8qIEkyQyBCdXMgYWRyZXNzZXMgZm9yIFBQQyAmIFByb3RvY29sIGJvYXJkICovCi0jZGVmaW5lIFBQQzgyNjBfSTJDX0FEUgkJMHgzMAkvKigwKTAxMS4wMDAwICovCi0jZGVmaW5lIExNODRfUFBDX0kyQ19BRFIJMHgyQQkvKigwKTAxMC4xMDEwICovCi0jZGVmaW5lIExNODRfU0hBUkNfSTJDX0FEUgkweDI5CS8qKDApMDEwLjEwMDEgKi8KLSNkZWZpbmUgVklSVEVYX0kyQ19BRFIJCTB4MjUJLyooMCkwMTAuMDEwMSAqLwotI2RlZmluZSBYMjQ2NDVfUFBDX0kyQ19BRFIJMHgwMAkvKigwKTAwWC5YWFhYICAtPiBiZSBjYXJlZnVsICEgTm8gb3RoZXIgaTJjLWNoaXAgc2hvdWxkIGhhdmUgYW4gYWRyZXNzIGJlZ2lubmluZyB3aXRoICgwKTAwICEhISAqLwotI2RlZmluZSBSUzVDMzcyX1BQQ19JMkNfQURSCTB4MzIJLyooMCkwMTEuMDAxMCAgLT4gdGhpcyBhZHJlc3MgaXMgcHJvZ3JhbW1lZCBieSB0aGUgbWFudWZhY3R1cmVyIGFuZCBjYW5ub3QgYmUgY2hhbmdlZCAhISEgKi8KLQotLyoKLSAqIEkvTyBQb3J0IGNvbmZpZ3VyYXRpb24gdGFibGUKLSAqCi0gKiBpZiBjb25mIGlzIDEsIHRoZW4gdGhhdCBwb3J0IHBpbiB3aWxsIGJlIGNvbmZpZ3VyZWQgYXQgYm9vdCB0aW1lCi0gKiBhY2NvcmRpbmcgdG8gdGhlIGZpdmUgdmFsdWVzIHBvZHIvcGRpci9wcGFyL3Bzb3IvcGRhdCBmb3IgdGhhdCBlbnRyeQotICovCi0KLWNvbnN0IGlvcF9jb25mX3QgaW9wX2NvbmZfdGFiWzRdWzMyXSA9IHsKLQotICAgIC8qIFBvcnQgQSBjb25maWd1cmF0aW9uICovCi0gICAgewkvKgkgICAgICBjb25mIHBwYXIgcHNvciBwZGlyIHBvZHIgcGRhdCAqLwotCS8qIFBBMzEgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQTMwICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEEyOSAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBBMjggKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQTI3ICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEEyNiAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBBMjUgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQTI0ICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEEyMyAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBBMjIgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQTIxICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEEyMCAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBBMTkgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQTE4ICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEExNyAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBBMTYgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQTE1ICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEExNCAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBBMTMgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQTEyICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEExMSAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBBMTAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQTkgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEE4ICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBBNyAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQTYgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEE1ICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBBNCAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQTMgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEEyICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBBMSAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQTAgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0KLSAgICB9LAotCi0KLSAgICB7ICAgLyoJICAgICAgY29uZiBwcGFyIHBzb3IgcGRpciBwb2RyIHBkYXQgKi8KLQkvKiBQQjMxICovIHsgICAxLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIFRYX0VSICovCi0JLyogUEIzMCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBSWF9EViAqLwotCS8qIFBCMjkgKi8geyAgIDEsICAgMSwgICAxLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMiBNSUkgVFhfRU4gKi8KLQkvKiBQQjI4ICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIFJYX0VSICovCi0JLyogUEIyNyAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBDT0wgKi8KLQkvKiBQQjI2ICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIENSUyAqLwotCS8qIFBCMjUgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMiBNSUkgVHhEWzNdICovCi0JLyogUEIyNCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBUeERbMl0gKi8KLQkvKiBQQjIzICovIHsgICAxLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIFR4RFsxXSAqLwotCS8qIFBCMjIgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMiBNSUkgVHhEWzBdICovCi0JLyogUEIyMSAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBSeERbMF0gKi8KLQkvKiBQQjIwICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIFJ4RFsxXSAqLwotCS8qIFBCMTkgKi8geyAgIDEsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMiBNSUkgUnhEWzJdICovCi0JLyogUEIxOCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBSeERbM10gKi8KLQkvKiBQQjE3ICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEIxNiAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBCMTUgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQjE0ICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEIxMyAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBCMTIgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQjExICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEIxMCAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBCOSAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQjggICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEI3ICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBCNiAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQjUgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEI0ICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBCMyAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogcGluIGRvZXNuJ3QgZXhpc3QgKi8KLQkvKiBQQjIgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIHBpbiBkb2Vzbid0IGV4aXN0ICovCi0JLyogUEIxICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBwaW4gZG9lc24ndCBleGlzdCAqLwotCS8qIFBCMCAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSAgLyogcGluIGRvZXNuJ3QgZXhpc3QgKi8KLSAgICB9LAotCi0KLSAgICB7ICAgLyoJICAgICAgY29uZiBwcGFyIHBzb3IgcGRpciBwb2RyIHBkYXQgKi8KLQkvKiBQQzMxICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEMzMCAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBDMjkgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQzI4ICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEMyNyAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBDMjYgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQzI1ICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEMyNCAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBDMjMgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQzIyICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEMyMSAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBDMjAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQzE5ICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEMxOCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBFVEhSWENMSzogQ0xLMTQgKi8KLQkvKiBQQzE3ICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEVUSFRYQ0xLOiBDTEsxNSAqLwotCS8qIFBDMTYgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQzE1ICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEMxNCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBTQ0MxIFVBUlQgQ0QvICovCi0JLyogUEMxMyAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBDMTIgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQzExICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEMxMCAqLyB7ICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBFVEhNREM6IEdQICovCi0JLyogUEM5ICAqLyB7ICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBFVEhNRElPOiBHUCAqLwotCS8qIFBDOCAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQzcgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEM2ICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBDNSAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQzQgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEMzICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBDMiAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQQzEgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEMwICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9Ci0gICAgfSwKLQotCi0gICAgeyAgIC8qCSAgICAgIGNvbmYgcHBhciBwc29yIHBkaXIgcG9kciBwZGF0ICovCi0JLyogUEQzMSAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBTQ0MxIFVBUlQgUnhEICovCi0JLyogUEQzMCAqLyB7ICAgMSwgICAxLCAgIDEsICAgMSwgICAwLCAgIDAgICB9LCAvKiBTQ0MxIFVBUlQgVHhEICovCi0JLyogUEQyOSAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBEMjggKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQRDI3ICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEQyNiAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBEMjUgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQRDI0ICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEQyMyAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBEMjIgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQRDIxICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEQyMCAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBEMTkgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQRDE4ICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEQxNyAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBEMTYgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQRDE1ICovIHsgICAxLCAgIDEsICAgMSwgICAwLCAgIDEsICAgMCAgIH0sIC8qIEkyQyBTREEgKi8KLQkvKiBQRDE0ICovIHsgICAxLCAgIDEsICAgMSwgICAwLCAgIDEsICAgMCAgIH0sIC8qIEkyQyBTQ0wgKi8KLQkvKiBQRDEzICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEQxMiAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBEMTEgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQRDEwICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEQ5ICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBEOCAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQRDcgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEQ2ICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAotCS8qIFBENSAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLQkvKiBQRDQgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0JLyogUEQzICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBwaW4gZG9lc24ndCBleGlzdCAqLwotCS8qIFBEMiAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogcGluIGRvZXNuJ3QgZXhpc3QgKi8KLQkvKiBQRDEgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIHBpbiBkb2Vzbid0IGV4aXN0ICovCi0JLyogUEQwICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9ICAvKiBwaW4gZG9lc24ndCBleGlzdCAqLwotICAgIH0KLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RydWN0IHRtIHsKLQl1bnNpZ25lZCBpbnQgdG1fc2VjOwotCXVuc2lnbmVkIGludCB0bV9taW47Ci0JdW5zaWduZWQgaW50IHRtX2hvdXI7Ci0JdW5zaWduZWQgaW50IHRtX3dkYXk7Ci0JdW5zaWduZWQgaW50IHRtX21kYXk7Ci0JdW5zaWduZWQgaW50IHRtX21vbjsKLQl1bnNpZ25lZCBpbnQgdG1feWVhcjsKLX07Ci0KLXZvaWQgcmVhZF9SUzVDMzcyX3RpbWUgKHN0cnVjdCB0bSAqdGltZWRhdGUpCi17Ci0JdW5zaWduZWQgY2hhciBidWZmZXJbOF07Ci0KLQlpZiAoISBpMmNfcmVhZCAoUlM1QzM3Ml9QUENfSTJDX0FEUiwgMCwgMSwgYnVmZmVyLCBzaXplb2YgKGJ1ZmZlcikpKSB7Ci0JCXRpbWVkYXRlLT50bV9zZWMgPSBiY2QyYmluIChidWZmZXJbMF0pOwotCQl0aW1lZGF0ZS0+dG1fbWluID0gYmNkMmJpbiAoYnVmZmVyWzFdKTsKLQkJdGltZWRhdGUtPnRtX2hvdXIgPSBiY2QyYmluIChidWZmZXJbMl0pOwotCQl0aW1lZGF0ZS0+dG1fd2RheSA9IGJjZDJiaW4gKGJ1ZmZlclszXSk7Ci0JCXRpbWVkYXRlLT50bV9tZGF5ID0gYmNkMmJpbiAoYnVmZmVyWzRdKTsKLQkJdGltZWRhdGUtPnRtX21vbiA9IGJjZDJiaW4gKGJ1ZmZlcls1XSk7Ci0JCXRpbWVkYXRlLT50bV95ZWFyID0gYmNkMmJpbiAoYnVmZmVyWzZdKSArIDIwMDA7Ci0JfSBlbHNlIHsKLQkJLypwcmludGYoImkyYyBlcnJvciAlMDJ4XG4iLCByYyk7ICovCi0JCW1lbXNldCAodGltZWRhdGUsIDAsIHNpemVvZiAoc3RydWN0IHRtKSk7Ci0JfQotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWludCByZWFkX0xNODRfdGVtcCAoaW50IGFkZHJlc3MpCi17Ci0JdW5zaWduZWQgY2hhciBidWZmZXJbOF07Ci0JLyppbnQgcmM7Ki8KLQotCWlmICghIGkyY19yZWFkIChhZGRyZXNzLCAwLCAxLCBidWZmZXIsIDEpKSB7Ci0JCXJldHVybiAoaW50KSBidWZmZXJbMF07Ci0JfSBlbHNlIHsKLQkJLypwcmludGYoImkyYyBlcnJvciAlMDJ4XG4iLCByYyk7ICovCi0JCXJldHVybiAtNDI7Ci0JfQotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBDaGVjayBCb2FyZCBJZGVudGl0eToKLSAqLwotCi1pbnQgY2hlY2tib2FyZCAodm9pZCkKLXsKLQlzdHJ1Y3QgdG0gdGltZWRhdGU7Ci0JdW5zaWduZWQgaW50IHBwY3RlbXAsIHByb3R0ZW1wOwotCi0JcHV0cyAoIkJvYXJkOiBSb2hkZSAmIFNjaHdhcnogODI2MCBQcm90b2NvbCBCb2FyZFxuIik7Ci0KLQkvKiBpbml0aWFsaXNlIGkyYyAqLwotCWkyY19pbml0IChDT05GSUdfU1lTX0kyQ19TUEVFRCwgQ09ORklHX1NZU19JMkNfU0xBVkUpOwotCi0JcmVhZF9SUzVDMzcyX3RpbWUgKCZ0aW1lZGF0ZSk7Ci0JcHJpbnRmICgiICBUaW1lOiAgJTAyZDolMDJkOiUwMmRcbiIsCi0JCQl0aW1lZGF0ZS50bV9ob3VyLCB0aW1lZGF0ZS50bV9taW4sIHRpbWVkYXRlLnRtX3NlYyk7Ci0JcHJpbnRmICgiICBEYXRlOiAgJTAyZC0lMDJkLSUwNGRcbiIsCi0JCQl0aW1lZGF0ZS50bV9tZGF5LCB0aW1lZGF0ZS50bV9tb24sIHRpbWVkYXRlLnRtX3llYXIpOwotCXBwY3RlbXAgPSByZWFkX0xNODRfdGVtcCAoTE04NF9QUENfSTJDX0FEUik7Ci0JcHJvdHRlbXAgPSByZWFkX0xNODRfdGVtcCAoTE04NF9TSEFSQ19JMkNfQURSKTsKLQlwcmludGYgKCIgIFRlbXA6ICBQUEMgJWQgQywgUHJvdG9jb2wgQm9hcmQgJWQgQ1xuIiwKLQkJCXBwY3RlbXAsIHByb3R0ZW1wKTsKLQotCXJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBNaXNjZWxhbmVvdXMgcGxhdGZvcm0gZGVwZW5kZW50IGluaXRpYWxpc2F0aW9ucyB3aGlsZSBzdGlsbAotICogcnVubmluZyBpbiBmbGFzaAotICovCi0KLWludCBtaXNjX2luaXRfZiAodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1waHlzX3NpemVfdCBpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDT05GSUdfU1lTX0lNTVI7Ci0Jdm9sYXRpbGUgbWVtY3RsODI2MF90ICptZW1jdGwgPSAmaW1tYXAtPmltX21lbWN0bDsKLQotI2lmZGVmIElOSVRfTE9DQUxfQlVTX1NEUkFNCi0Jdm9sYXRpbGUgdWNoYXIgKnJhbWFkZHI4OwotI2VuZGlmCi0Jdm9sYXRpbGUgdWxvbmcgKnJhbWFkZHIzMjsKLQl1bG9uZyBzZG1yOwotCWludCBpOwotCi0JLyoKLQkgKiBPbmx5IGluaXRpYWxpemUgU0RSQU0gd2hlbiBydW5uaW5nIGZyb20gRkxBU0guCi0JICogV2hlbiBydW5uaW5nIGZyb20gUkFNLCBkb24ndCB0b3VjaCBpdC4KLQkgKi8KLQlpZiAoKHVsb25nKSBpbml0ZHJhbSAmIDB4ZmYwMDAwMDApIHsKLQkJaW1tYXAtPmltX3NpdV9jb25mLnNjX3BwY19hY3IgPSAweDAyOwotCQlpbW1hcC0+aW1fc2l1X2NvbmYuc2NfcHBjX2FscmggPSAweDAxMjY3ODkzOwotCQlpbW1hcC0+aW1fc2l1X2NvbmYuc2NfcHBjX2FscmwgPSAweDg5QUJDREVGOwotCQlpbW1hcC0+aW1fc2l1X2NvbmYuc2NfbGNsX2FjciA9IDB4MDI7Ci0JCWltbWFwLT5pbV9zaXVfY29uZi5zY19sY2xfYWxyaCA9IDB4MDEyMzQ1Njc7Ci0JCWltbWFwLT5pbV9zaXVfY29uZi5zY19sY2xfYWxybCA9IDB4ODlBQkNERUY7Ci0JCS8qCi0JCSAqIFByb2dyYW0gbG9jYWwvNjB4IGJ1cyBUcmFuc2ZlciBFcnJvciBTdGF0dXMgYW5kIENvbnRyb2wgUmVnczoKLQkJICogRGlzYWJsZSBwYXJpdHkgZXJyb3JzCi0JCSAqLwotCQlpbW1hcC0+aW1fc2l1X2NvbmYuc2NfdGVzY3IxID0gMHgwMDA0MDAwMDsKLQkJaW1tYXAtPmltX3NpdV9jb25mLnNjX2x0ZXNjcjEgPSAweDAwMDQwMDAwOwotCi0JCS8qCi0JCSAqIFBlcmZvcm0gUG93ZXItVXAgSW5pdGlhbGlzYXRpb24gb2YgU0RSQU0gKHNlZSA4MjYwIFVNLCAxMC40LjIpCi0JCSAqCi0JCSAqIFRoZSBhcHByb3ByaWF0ZSBCUngvT1J4IHJlZ2lzdGVycyBoYXZlIGFscmVhZHkKLQkJICogYmVlbiBzZXQgd2hlbiB3ZSBnZXQgaGVyZSAoc2VlIGNwdV9pbml0X2YpLiBUaGUKLQkJICogU0RSQU0gY2FuIGJlIGFjY2Vzc2VkIGF0IHRoZSBhZGRyZXNzIENPTkZJR19TWVNfU0RSQU1fQkFTRS4KLQkJICovCi0JCW1lbWN0bC0+bWVtY19tcHRwciA9IDB4MjAwMDsKLQkJbWVtY3RsLT5tZW1jX21hciA9IDB4MDIwMDsKLSNpZmRlZiBJTklUX0xPQ0FMX0JVU19TRFJBTQotCQkvKiBpbml0aWFsaXNlIGxvY2FsIGJ1cyByYW0KLQkJICoKLQkJICogKHVzaW5nIHRoZSBQU1JNUl8gZGVmaW5pdGlvbnMgaXMgTk9UIGFuIGVycm9yIGhlcmUKLQkJICogLSB0aGUgTFNETVIgaGFzIHRoZSBzYW1lIGZpZWxkcyBhcyB0aGUgUFNETVIhKQotCQkgKi8KLQkJbWVtY3RsLT5tZW1jX2xzcnQgPSAweDBiOwotCQltZW1jdGwtPm1lbWNfbHVydCA9IDB4MDA7Ci0JCXJhbWFkZHIgPSAodWNoYXIgKikgUEhZU19TRFJBTV9MT0NBTDsKLQkJc2RtciA9IENPTkZJR19TWVNfTFNETVIgJiB+KFBTRE1SX09QX01TSyB8IFBTRE1SX1JGRU4gfCBQU0RNUl9QQkkpOwotCQltZW1jdGwtPm1lbWNfbHNkbXIgPSBzZG1yIHwgUFNETVJfT1BfUFJFQTsKLQkJKnJhbWFkZHIgPSAweGZmOwotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCQltZW1jdGwtPm1lbWNfbHNkbXIgPSBzZG1yIHwgUFNETVJfT1BfQ0JSUjsKLQkJCSpyYW1hZGRyID0gMHhmZjsKLQkJfQotCQltZW1jdGwtPm1lbWNfbHNkbXIgPSBzZG1yIHwgUFNETVJfT1BfTVJXOwotCQkqcmFtYWRkciA9IDB4ZmY7Ci0JCW1lbWN0bC0+bWVtY19sc2RtciA9IENPTkZJR19TWVNfTFNETVIgfCBQU0RNUl9PUF9OT1JNOwotI2VuZGlmCi0JCS8qIGluaXRpYWxpc2UgNjB4IGJ1cyByYW0gKi8KLQkJbWVtY3RsLT5tZW1jX3BzcnQgPSAweDBiOwotCQltZW1jdGwtPm1lbWNfcHVydCA9IDB4MDg7Ci0JCXJhbWFkZHIzMiA9ICh1bG9uZyAqKSBQSFlTX1NEUkFNXzYwWDsKLQkJc2RtciA9IENPTkZJR19TWVNfUFNETVIgJiB+KFBTRE1SX09QX01TSyB8IFBTRE1SX1JGRU4gfCBQU0RNUl9QQkkpOwotCQltZW1jdGwtPm1lbWNfcHNkbXIgPSBzZG1yIHwgUFNETVJfT1BfUFJFQTsKLQkJcmFtYWRkcjMyWzBdID0gMHgwMGZmMDBmZjsKLQkJcmFtYWRkcjMyWzFdID0gMHgwMGZmMDBmZjsKLQkJbWVtY3RsLT5tZW1jX3BzZG1yID0gc2RtciB8IFBTRE1SX09QX0NCUlI7Ci0JCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJCXJhbWFkZHIzMlswXSA9IDB4MDBmZjAwZmY7Ci0JCQlyYW1hZGRyMzJbMV0gPSAweDAwZmYwMGZmOwotCQl9Ci0JCW1lbWN0bC0+bWVtY19wc2RtciA9IHNkbXIgfCBQU0RNUl9PUF9NUlc7Ci0JCXJhbWFkZHIzMlswXSA9IDB4MDBmZjAwZmY7Ci0JCXJhbWFkZHIzMlsxXSA9IDB4MDBmZjAwZmY7Ci0JCW1lbWN0bC0+bWVtY19wc2RtciA9IHNkbXIgfCBQU0RNUl9PUF9OT1JNIHwgUFNETVJfUkZFTjsKLQl9Ci0KLQkvKiByZXR1cm4gdGhlIHNpemUgb2YgdGhlIDYweCBidXMgcmFtICovCi0JcmV0dXJuIFBIWVNfU0RSQU1fNjBYX1NJWkU7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIE1pc2NlbGFuZW91cyBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5pdGlhbGlzYXRpb25zIGFmdGVyIG1vbml0b3IKLSAqIGhhcyBiZWVuIHJlbG9jYXRlZCBpbnRvIHJhbQotICovCi0KLWludCBtaXNjX2luaXRfciAodm9pZCkKLXsKLQlwcmludGYgKCJtaXNjX2luaXRfclxuIik7Ci0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL3JzZHByb3RvL3UtYm9vdC5sZHMgYi9ib2FyZC9yc2Rwcm90by91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGJjZDE5Li4wMDAwMDAwCi0tLSBhL2JvYXJkL3JzZHByb3RvL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGFyY2gvcG93ZXJwYy9jcHUvbXBjODI2MC9zdGFydC5vCSgudGV4dCkKLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gICAgLyouID0gZW52X29mZnNldDsgKi8KLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwRkZGKSAmIDB4RkZGRkYwMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgIEtFRVAoKiguZ290MikpCi0gICAgS0VFUCgqKC5nb3QpKQotICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOwotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgIEtFRVAoKiguZml4dXApKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKChfR0xPQkFMX09GRlNFVF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+IDIpIC0gMTsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLQotICAuID0gQUxJR04oNCk7Ci0gIC51X2Jvb3RfbGlzdCA6IHsKLQlLRUVQKCooU09SVCgudV9ib290X2xpc3QqKSkpOwotICB9Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX19ic3NfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2Ftc3VuZy9jb21tb24vdW1zLmMgYi9ib2FyZC9zYW1zdW5nL2NvbW1vbi91bXMuYwppbmRleCBkYzE1NWFkLi5jZWJhYmU5IDEwMDY0NAotLS0gYS9ib2FyZC9zYW1zdW5nL2NvbW1vbi91bXMuYworKysgYi9ib2FyZC9zYW1zdW5nL2NvbW1vbi91bXMuYwpAQCAtNjYsMTEgKzY2LDkgQEAKIAogc3RydWN0IHVtcyAqdW1zX2luaXQodW5zaWduZWQgaW50IGRldl9udW0pCiB7Ci0Jc3RydWN0IG1tYyAqbW1jID0gTlVMTDsKKwlzdHJ1Y3QgbW1jICptbWMgPSBmaW5kX21tY19kZXZpY2UoZGV2X251bSk7CiAKLQltbWMgPSBmaW5kX21tY19kZXZpY2UoZGV2X251bSk7Ci0JaWYgKCFtbWMpCisJaWYgKCFtbWMgfHwgbW1jX2luaXQobW1jKSkKIAkJcmV0dXJuIE5VTEw7Ci0KIAlyZXR1cm4gdW1zX2Rpc2tfaW5pdChtbWMpOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2Ftc3VuZy9nb25pL21lbV9zZXR1cC5TIGIvYm9hcmQvc2Ftc3VuZy9nb25pL21lbV9zZXR1cC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGM5ODBjLi4wMDAwMDAwCi0tLSBhL2JvYXJkL3NhbXN1bmcvZ29uaS9tZW1fc2V0dXAuUworKysgL2Rldi9udWxsCkBAIC0xLDI0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFNhbXN1bmcgRWxlY3Rybm9pY3MKLSAqIE1pbmt5dSBLYW5nIDxtazcua2FuZ0BzYW1zdW5nLmNvbT4KLSAqIEt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+Ci0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotI2luY2x1ZGUgPGNvbmZpZy5oPgotCi0JLmdsb2JsIG1lbV9jdHJsX2FzbV9pbml0Ci1tZW1fY3RybF9hc21faW5pdDoKLQljbXAJcjcsIHI4Ci0KLQlsZHJlcQlyMCwgPVM1UEMxMDBfRE1DX0JBU0UJCQlAIDB4RTYwMDAwMDAKLQlsZHJuZQlyMCwgPVM1UEMxMTBfRE1DMF9CQVNFCQkJQCAweEYwMDAwMDAwCi0JbGRybmUJcjYsID1TNVBDMTEwX0RNQzFfQkFTRQkJCUAgMHhGMTQwMDAwMAotCi0JLyogRExMIHBhcmFtZXRlciBzZXR0aW5nICovCi0JbGRyCXIxLCA9MHg1MDEwMTAwMAotCXN0cglyMSwgW3IwLCAjMHgwMThdCQkJQCBQSFlDT05UUk9MMF9PRkZTRVQKLQlzdHJuZQlyMSwgW3I2LCAjMHgwMThdCQkJQCBQSFlDT05UUk9MMF9PRkZTRVQKLQlsZHIJcjEsID0weDAwMDAwMGY0Ci0Jc3RyCXIxLCBbcjAsICMweDAxQ10JCQlAIFBIWUNPTlRST0wxX09GRlNFVAotCXN0cm5lCXIxLCBbcjYsICMweDAxQ10JCQlAIFBIWUNPTlRST0wxX09GRlNFVAotCWxkcmVxCXIxLCA9MHgwCi0Jc3RyZXEJcjEsIFtyMCwgIzB4MDIwXQkJCUAgUEhZQ09OVFJPTDJfT0ZGU0VUCi0KLQkvKiBETEwgb24gKi8KLQlsZHIJcjEsID0weDUwMTAxMDAyCi0Jc3RyCXIxLCBbcjAsICMweDAxOF0JCQlAIFBIWUNPTlRST0wwX09GRlNFVAotCXN0cm5lCXIxLCBbcjYsICMweDAxOF0JCQlAIFBIWUNPTlRST0wwX09GRlNFVAotCi0JLyogRExMIHN0YXJ0ICovCi0JbGRyCXIxLCA9MHg1MDEwMTAwMwotCXN0cglyMSwgW3IwLCAjMHgwMThdCQkJQCBQSFlDT05UUk9MMF9PRkZTRVQKLQlzdHJuZQlyMSwgW3I2LCAjMHgwMThdCQkJQCBQSFlDT05UUk9MMF9PRkZTRVQKLQotCW1vdglyMiwgIzB4NDAwMAotd2FpdDoJc3VicwlyMiwgcjIsICMweDEKLQljbXAJcjIsICMweDAKLQlibmUJd2FpdAotCi0JY21wCXI3LCByOAotCS8qIEZvcmNlIHZhbHVlIGxvY2tpbmcgZm9yIERMTCBvZmYgKi8KLQlzdHIJcjEsIFtyMCwgIzB4MDE4XQkJCUAgUEhZQ09OVFJPTDBfT0ZGU0VUCi0Jc3RybmUJcjEsIFtyNiwgIzB4MDE4XQkJCUAgUEhZQ09OVFJPTDBfT0ZGU0VUCi0KLQkvKiBETEwgb2ZmICovCi0JbGRyCXIxLCA9MHg1MDEwMTAwOQotCXN0cglyMSwgW3IwLCAjMHgwMThdCQkJQCBQSFlDT05UUk9MMF9PRkZTRVQKLQlzdHJuZQlyMSwgW3I2LCAjMHgwMThdCQkJQCBQSFlDT05UUk9MMF9PRkZTRVQKLQotCS8qIGF1dG8gcmVmcmVzaCBvZmYgKi8KLQlsZHIJcjEsID0weGZmMDAxMDEwIHwgKDEgPDwgNykKLQlsZHIJcjIsID0weGZmMDAxMDEwIHwgKDEgPDwgNykKLQlzdHIJcjEsIFtyMCwgIzB4MDAwXQkJCUAgQ09OQ09OVFJPTF9PRkZTRVQKLQlzdHJuZQlyMiwgW3I2LCAjMHgwMDBdCQkJQCBDT05DT05UUk9MX09GRlNFVAotCi0JLyoKLQkgKiBCdXJzdCBMZW5ndGggNCwgMiBjaGlwcywgMzItYml0LCBMUEREUgotCSAqIE9GRjogZHluYW1pYyBzZWxmIHJlZnJlc2gsIGZvcmNlIHByZWNoYXJnZSwgZHluYW1pYyBwb3dlciBkb3duIG9mZgotCSAqLwotCWxkcglyMSwgPTB4MDAyMTIxMDAKLQlsZHIJcjIsID0weDAwMjEyMTAwCi0Jc3RyCXIxLCBbcjAsICMweDAwNF0JCQlAIE1FTUNPTlRST0xfT0ZGU0VUCi0Jc3RybmUJcjIsIFtyNiwgIzB4MDA0XQkJCUAgTUVNQ09OVFJPTF9PRkZTRVQKLQotCS8qCi0JICogTm90ZToKLQkgKiBJZiBCYW5rMCBoYXMgTW9iaWxlIFJBTSB3ZSBwbGFjZSBpdCBhdCAweDM4MDAnMDAwMCAoczVwYzEwMCBvbmx5KQotCSAqIFNvIGZpbmFsbHkgQmFuazEgT25lRFJBTSBzaG91bGQgYWRkcmVzcyBzdGFydCBhdCBhdCAweDMwMDAnMDAwMAotCSAqLwotCi0JLyoKLQkgKiBETUMwOiBDUzAgOiBTNVBDMTAwL1M1UEMxMTAKLQkgKiAweDMwIC0+IDB4MzAwMDAwMDAKLQkgKiAweGY4IC0+IDB4MzdGRkZGRkYKLQkgKiBbMTU6MTJdIDA6IExpbmVhcgotCSAqIFsxMTo4IF0gMjogOSBiaXRzCi0JICogWyA3OjQgXSAyOiAxNCBiaXRzCi0JICogWyAzOjAgXSAyOiA0IGJhbmtzCi0JICovCi0JbGRyCXIzLCA9MHgzMGY4MDIyMgotCWxkcglyNCwgPTB4NDBmMDAyMjIKLXN3YXBfbWVtb3J5OgotCXN0cglyMywgW3IwLCAjMHgwMDhdCQkJQCBNRU1DT05GSUcwX09GRlNFVAotCXN0cglyNCwgW3IwLCAjMHgwMENdCQkJQCBkdW1teSB3cml0ZQotCi0JLyoKLQkgKiBETUMxOiBDUzAgOiBTNVBDMTEwCi0JICogMHg0MCAtPiAweDQwMDAwMDAwCi0JICogMHhmOCAtPiAweDQ3RkZGRkZGICgxR2liKQotCSAqIDB4NDAgLT4gMHg0MDAwMDAwMAotCSAqIDB4ZjAgLT4gMHg0RkZGRkZGRiAoMkdpYikKLQkgKiBbMTU6MTJdIDA6IExpbmVhcgotCSAqIFsxMTo4IF0gMjogOSBiaXRzICAtIENvbCAoMUdpYikKLQkgKiBbMTE6OCBdIDM6IDEwIGJpdHMgLSBDb2wgKDJHaWIpCi0JICogWyA3OjQgXSAyOiAxNCBiaXRzIC0gUm93Ci0JICogWyAzOjAgXSAyOiA0IGJhbmtzCi0JICovCi0JLyogRGVmYXVsdCA6IDJHaUIgKi8KLQlsZHIJcjQsID0weDQwZjAxMzIyCQkJCUAgMkdpYjogTUNQIEIKLQlsZHIJcjUsID0weDUwZjgxMzEyCQkJCUAgZHVtbXk6IE1DUCBECi0JY21wCXI5LCAjMQotCWxkcmVxCXI0LCA9MHg0MGY4MTIyMgkJCQlAIDFHaWI6IE1DUCBBCi0JY21wCXI5LCAjMwotCWxkcmVxCXI1LCA9MHg1MGY4MTMxMgkJCQlAIDJHaWIgKyAxR2liOiBNQ1AgRAotCWNtcAlyOSwgIzQKLQlsZHJlcQlyNSwgPTB4NTBmMDEzMTIJCQkJQCAyR2liICsgMkdpYjogTUNQIEUKLQotCWNtcAlyNywgcjgKLQlzdHJuZQlyNCwgW3I2LCAjMHgwMDhdCQkJQCBNRU1DT05GSUcwX09GRlNFVAotCXN0cm5lCXI1LCBbcjYsICMweDAwQ10JCQlAIE1FTUNPTkZJRzFfT0ZGU0VUCi0KLQkvKgotCSAqIERNQzA6IENTMTogUzVQQzEwMAotCSAqIDB4MzggLT4gMHgzODAwMDAwMAotCSAqIDB4ZjggLT4gMHgzZkZGRkZGRgotCSAqIFsxNToxMl0gMDogTGluZWFyCi0JICogWzExOjggXSAyOiA5IGJpdHMKLQkgKiBbIDc6NCBdIDI6IDE0IGJpdHMKLQkgKiBbIDM6MCBdIDI6IDQgYmFua3MKLQkgKi8KLQllb3JlcQlyMywgcjMsICMweDA4MDAwMDAwCi0Jc3RyZXEJcjMsIFtyMCwgIzB4Y10JCQkJQCBNRU1DT05GSUcxX09GRlNFVAotCi0JbGRyCXIxLCA9MHgyMDAwMDAwMAotCXN0cglyMSwgW3IwLCAjMHgwMTRdCQkJQCBQUkVDSENPTkZJR19PRkZTRVQKLQlzdHJuZQlyMSwgW3IwLCAjMHgwMTRdCQkJQCBQUkVDSENPTkZJR19PRkZTRVQKLQlzdHJuZQlyMSwgW3I2LCAjMHgwMTRdCQkJQCBQUkVDSENPTkZJR19PRkZTRVQKLQotCS8qCi0JICogUzVQQzEwMDoKLQkgKiBETUM6ICBDUzA6IDE2Nk1IegotCSAqICAgICAgIENTMTogMTY2TUh6Ci0JICogUzVQQzExMDoKLQkgKiBETUMwOiBDUzA6IDE2Nk1IegotCSAqIERNQzE6IENTMDogMjAwTUh6Ci0JICoKLQkgKiA3Ljh1cyAqIDIwME1IeiAlTEUgJUxPTkcxNTYwKDB4NjE4KQotCSAqIDcuOHVzICogMTY2TUh6ICVMRSAlTE9ORzEyOTQoMHg1MEUpCi0JICogNy44dXMgKiAxMzNNSHogJUxFICVMT05HMTAzOCgweDQwRSksCi0JICogNy44dXMgKiAxMDBNSHogJUxFICVMT05HNzgwKDB4MzBDKSwKLQkgKi8KLQlsZHIJcjEsID0weDAwMDAwNTBFCi0Jc3RyCXIxLCBbcjAsICMweDAzMF0JCQlAIFRJTUlOR0FSRUZfT0ZGU0VUCi0JbGRybmUJcjEsID0weDAwMDAwNjE4Ci0Jc3RybmUJcjEsIFtyNiwgIzB4MDMwXQkJCUAgVElNSU5HQVJFRl9PRkZTRVQKLQotCWxkcglyMSwgPTB4MTQyMzMyODcKLQlzdHIJcjEsIFtyMCwgIzB4MDM0XQkJCUAgVElNSU5HUk9XX09GRlNFVAotCWxkcm5lCXIxLCA9MHgxODIzMzJjOAotCXN0cm5lCXIxLCBbcjYsICMweDAzNF0JCQlAIFRJTUlOR1JPV19PRkZTRVQKLQotCWxkcglyMSwgPTB4MTIxMzAwMDUKLQlzdHIJcjEsIFtyMCwgIzB4MDM4XQkJCUAgVElNSU5HREFUQV9PRkZTRVQKLQlsZHJuZQlyMSwgPTB4MTMxMzAwMDUKLQlzdHJuZQlyMSwgW3I2LCAjMHgwMzhdCQkJQCBUSU1JTkdEQVRBX09GRlNFVAotCi0JbGRyCXIxLCA9MHgwRTE0MDIyMgotCXN0cglyMSwgW3IwLCAjMHgwM0NdCQkJQCBUSU1JTkdQT1dFUl9PRkZTRVQKLQlsZHJuZQlyMSwgPTB4MEUxODAyMjIKLQlzdHJuZQlyMSwgW3I2LCAjMHgwM0NdCQkJQCBUSU1JTkdQT1dFUl9PRkZTRVQKLQotCS8qIGNoaXAwIERlc2VsZWN0ICovCi0JbGRyCXIxLCA9MHgwNzAwMDAwMAotCXN0cglyMSwgW3IwLCAjMHgwMTBdCQkJQCBESVJFQ1RDTURfT0ZGU0VUCi0Jc3RybmUJcjEsIFtyNiwgIzB4MDEwXQkJCUAgRElSRUNUQ01EX09GRlNFVAotCi0JLyogY2hpcDAgUEFMTCAqLwotCWxkcglyMSwgPTB4MDEwMDAwMDAKLQlzdHIJcjEsIFtyMCwgIzB4MDEwXQkJCUAgRElSRUNUQ01EX09GRlNFVAotCXN0cm5lCXIxLCBbcjYsICMweDAxMF0JCQlAIERJUkVDVENNRF9PRkZTRVQKLQotCS8qIGNoaXAwIFJFRkEgKi8KLQlsZHIJcjEsID0weDA1MDAwMDAwCi0Jc3RyCXIxLCBbcjAsICMweDAxMF0JCQlAIERJUkVDVENNRF9PRkZTRVQKLQlzdHJuZQlyMSwgW3I2LCAjMHgwMTBdCQkJQCBESVJFQ1RDTURfT0ZGU0VUCi0JLyogY2hpcDAgUkVGQSAqLwotCXN0cglyMSwgW3IwLCAjMHgwMTBdCQkJQCBESVJFQ1RDTURfT0ZGU0VUCi0Jc3RybmUJcjEsIFtyNiwgIzB4MDEwXQkJCUAgRElSRUNUQ01EX09GRlNFVAotCi0JLyogY2hpcDAgTVJTICovCi0JbGRyCXIxLCA9MHgwMDAwMDAzMgotCXN0cglyMSwgW3IwLCAjMHgwMTBdCQkJQCBESVJFQ1RDTURfT0ZGU0VUCi0Jc3RybmUJcjEsIFtyNiwgIzB4MDEwXQkJCUAgRElSRUNUQ01EX09GRlNFVAotCi0JLyogY2hpcDAgRU1SUyAqLwotCWxkcglyMSwgPTB4MDAwMjAwMjAKLQlzdHIJcjEsIFtyMCwgIzB4MDEwXQkJCUAgRElSRUNUQ01EX09GRlNFVAotCXN0cm5lCXIxLCBbcjYsICMweDAxMF0JCQlAIERJUkVDVENNRF9PRkZTRVQKLQotCS8qIGNoaXAxIERlc2VsZWN0ICovCi0JbGRyCXIxLCA9MHgwNzEwMDAwMAotCXN0cglyMSwgW3IwLCAjMHgwMTBdCQkJQCBESVJFQ1RDTURfT0ZGU0VUCi0Jc3RybmUJcjEsIFtyNiwgIzB4MDEwXQkJCUAgRElSRUNUQ01EX09GRlNFVAotCi0JLyogY2hpcDEgUEFMTCAqLwotCWxkcglyMSwgPTB4MDExMDAwMDAKLQlzdHIJcjEsIFtyMCwgIzB4MDEwXQkJCUAgRElSRUNUQ01EX09GRlNFVAotCXN0cm5lCXIxLCBbcjYsICMweDAxMF0JCQlAIERJUkVDVENNRF9PRkZTRVQKLQotCS8qIGNoaXAxIFJFRkEgKi8KLQlsZHIJcjEsID0weDA1MTAwMDAwCi0Jc3RyCXIxLCBbcjAsICMweDAxMF0JCQlAIERJUkVDVENNRF9PRkZTRVQKLQlzdHJuZQlyMSwgW3I2LCAjMHgwMTBdCQkJQCBESVJFQ1RDTURfT0ZGU0VUCi0JLyogY2hpcDEgUkVGQSAqLwotCXN0cglyMSwgW3IwLCAjMHgwMTBdCQkJQCBESVJFQ1RDTURfT0ZGU0VUCi0Jc3RybmUJcjEsIFtyNiwgIzB4MDEwXQkJCUAgRElSRUNUQ01EX09GRlNFVAotCi0JLyogY2hpcDEgTVJTICovCi0JbGRyCXIxLCA9MHgwMDEwMDAzMgotCXN0cglyMSwgW3IwLCAjMHgwMTBdCQkJQCBESVJFQ1RDTURfT0ZGU0VUCi0Jc3RybmUJcjEsIFtyNiwgIzB4MDEwXQkJCUAgRElSRUNUQ01EX09GRlNFVAotCi0JLyogY2hpcDEgRU1SUyAqLwotCWxkcglyMSwgPTB4MDAxMjAwMjAKLQlzdHIJcjEsIFtyMCwgIzB4MDEwXQkJCUAgRElSRUNUQ01EX09GRlNFVAotCXN0cm5lCXIxLCBbcjYsICMweDAxMF0JCQlAIERJUkVDVENNRF9PRkZTRVQKLQotCS8qIGF1dG8gcmVmcmVzaCBvbiAqLwotCWxkcglyMSwgPTB4RkYwMDIwMzAgfCAoMSA8PCA3KQotCXN0cglyMSwgW3IwLCAjMHgwMDBdCQkJQCBDT05DT05UUk9MX09GRlNFVAotCXN0cm5lCXIxLCBbcjYsICMweDAwMF0JCQlAIENPTkNPTlRST0xfT0ZGU0VUCi0KLQkvKiBQd3JkbkNvbmZpZyAqLwotCWxkcglyMSwgPTB4MDAxMDAwMDIKLQlzdHIJcjEsIFtyMCwgIzB4MDI4XQkJCUAgUFdSRE5DT05GSUdfT0ZGU0VUCi0Jc3RybmUJcjEsIFtyNiwgIzB4MDI4XQkJCUAgUFdSRE5DT05GSUdfT0ZGU0VUCi0KLQlsZHIJcjEsID0weDAwMjEyMTEzCi0Jc3RyCXIxLCBbcjAsICMweDAwNF0JCQlAIE1FTUNPTlRST0xfT0ZGU0VUCi0Jc3RybmUJcjEsIFtyNiwgIzB4MDA0XQkJCUAgTUVNQ09OVFJPTF9PRkZTRVQKLQotCS8qIFNraXAgd2hlbiBTNVBDMTEwICovCi0JYm5lCTFmCi0KLQkvKiBDaGVjayBPbmVEUkFNIGFjY2VzcyBhcmVhIGF0IHM1cGMxMDAgKi8KLQlsZHJlcQlyMywgPTB4MzhmODAyMjIKLQlsZHJlcQlyMSwgPTB4MzdmZmZmMDAKLQlzdHIJcjMsIFtyMV0KLQlsZHIJcjIsIFtyMV0KLQljbXAJcjIsIHIzCi0JYmVxCXN3YXBfbWVtb3J5Ci0xOgotCW1vdglwYywgbHIKLQotCS5sdG9yZwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2Ftc3VuZy9vcmlnZW4vb3JpZ2VuLmMgYi9ib2FyZC9zYW1zdW5nL29yaWdlbi9vcmlnZW4uYwppbmRleCBkNTAyZjAyLi5hNTM5MjY3IDEwMDY0NAotLS0gYS9ib2FyZC9zYW1zdW5nL29yaWdlbi9vcmlnZW4uYworKysgYi9ib2FyZC9zYW1zdW5nL29yaWdlbi9vcmlnZW4uYwpAQCAtMzAsMTMgKzMwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19VU0JfQ0FCTEVfQ0hFQ0sKLWludCB1c2JfY2FibGVfY29ubmVjdGVkKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX0YKIGludCBleHlub3NfZWFybHlfaW5pdF9mKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9ib2FyZC9zYW1zdW5nL3NtZGtjMTAwL21lbV9zZXR1cC5TIGIvYm9hcmQvc2Ftc3VuZy9zbWRrYzEwMC9tZW1fc2V0dXAuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYyZGYwYi4uMDAwMDAwMAotLS0gYS9ib2FyZC9zYW1zdW5nL3NtZGtjMTAwL21lbV9zZXR1cC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0gKiBPcmlnaW5hdGVzIGZyb20gU2Ftc3VuZydzIHUtYm9vdCAxLjEuNiBwb3J0IHRvIFM1UEMxeHgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJub2ljcwotICogSW5raSBEYWUgPGlua2kuZGFlQHNhbXN1bmcuY29tPgotICogSGV1bmdqdW4gS2ltIDxyaXZlcmZ1bC5raW1Ac2Ftc3VuZy5jb20+Ci0gKiBNaW5reXUgS2FuZyA8bWs3LmthbmdAc2Ftc3VuZy5jb20+Ci0gKiBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpbmNsdWRlIDxjb25maWcuaD4KLQotCS5nbG9ibCBtZW1fY3RybF9hc21faW5pdAotbWVtX2N0cmxfYXNtX2luaXQ6Ci0JbGRyCXI2LCA9UzVQQzEwMF9ETUNfQkFTRQkJCUAgMHhFNjAwMDAwMAotCi0JLyogRExMIHBhcmFtZXRlciBzZXR0aW5nICovCi0JbGRyCXIxLCA9MHg1MDEwMTAwMAotCXN0cglyMSwgW3I2LCAjMHgwMThdCQkJQCBQSFlDT05UUk9MMAotCWxkcglyMSwgPTB4ZjQKLQlzdHIJcjEsIFtyNiwgIzB4MDFDXQkJCUAgUEhZQ09OVFJPTDEKLQlsZHIJcjEsID0weDAKLQlzdHIJcjEsIFtyNiwgIzB4MDIwXQkJCUAgUEhZQ09OVFJPTDIKLQotCS8qIERMTCBvbiAqLwotCWxkcglyMSwgPTB4NTAxMDEwMDIKLQlzdHIJcjEsIFtyNiwgIzB4MDE4XQkJCUAgUEhZQ09OVFJPTDAKLQotCS8qIERMTCBzdGFydCAqLwotCWxkcglyMSwgPTB4NTAxMDEwMDMKLQlzdHIJcjEsIFtyNiwgIzB4MDE4XQkJCUAgUEhZQ09OVFJPTDAKLQotCS8qIEZvcmNlIHZhbHVlIGxvY2tpbmcgZm9yIERMTCBvZmYgKi8KLQlzdHIJcjEsIFtyNiwgIzB4MDE4XQkJCUAgUEhZQ09OVFJPTDAKLQotCS8qIERMTCBvZmYgKi8KLQlsZHIJcjEsID0weDUwMTAxMDAxCi0Jc3RyCXIxLCBbcjYsICMweDAxOF0JCQlAIFBIWUNPTlRST0wwCi0KLQkvKiBhdXRvIHJlZnJlc2ggb2ZmICovCi0JbGRyCXIxLCA9MHhmZjAwMTAxMAotCXN0cglyMSwgW3I2LCAjMHgwMDBdCQkJQCBDT05DT05UUk9MCi0KLQkvKgotCSAqIEJ1cnN0IExlbmd0aCA0LCAyIGNoaXBzLCAzMi1iaXQsIExQRERSCi0JICogT0ZGOiBkeW5hbWljIHNlbGYgcmVmcmVzaCwgZm9yY2UgcHJlY2hhcmdlLCBkeW5hbWljIHBvd2VyIGRvd24gb2ZmCi0JICovCi0JbGRyCXIxLCA9MHgwMDIxMjEwMAotCXN0cglyMSwgW3I2LCAjMHgwMDRdCQkJQCBNRU1DT05UUk9MCi0KLQkvKgotCSAqIE5vdGU6Ci0JICogSWYgQmFuazAgaGFzIE9uZURSQU0gd2UgcGxhY2UgaXQgYXQgMHgyODAwJzAwMDAKLQkgKiBTbyBmaW5hbGx5IEJhbmsxIHNob3VsZCBhZGRyZXNzIHN0YXJ0IGF0IGF0IDB4MjAwMCcwMDAwCi0JICovCi0JbW92CXI0LCAjMHgwCi0KLXN3YXBfbWVtb3J5OgotCS8qCi0JICogQmFuazAKLQkgKiAweDMwIC0+IDB4MzAwMDAwMDAKLQkgKiAweGY4IC0+IDB4MzdGRkZGRkYKLQkgKiBbMTU6MTJdIDA6IExpbmVhcgotCSAqIFsxMTo4IF0gMjogOSBiaXRzCi0JICogWyA3OjQgXSAyOiAxNCBiaXRzCi0JICogWyAzOjAgXSAyOiA0IGJhbmtzCi0JICovCi0JbGRyCXIxLCA9MHgzMGY4MDIyMgotCS8qIGlmIHI0IGlzIDEsIHN3YXAgdGhlIGJhbmsgKi8KLQljbXAJcjQsICMweDEKLQlvcnJlcQlyMSwgcjEsICMweDA4MDAwMDAwCi0Jc3RyCXIxLCBbcjYsICMweDAwOF0JCQlAIE1FTUNPTkZJRzAKLQotCS8qCi0JICogQmFuazEKLQkgKiAweDM4IC0+IDB4MzgwMDAwMDAKLQkgKiAweGY4IC0+IDB4M2ZGRkZGRkYKLQkgKiBbMTU6MTJdIDA6IExpbmVhcgotCSAqIFsxMTo4IF0gMjogOSBiaXRzCi0JICogWyA3OjQgXSAyOiAxNCBiaXRzCi0JICogWyAzOjAgXSAyOiA0IGJhbmtzCi0JICovCi0JbGRyCXIxLCA9MHgzOGY4MDIyMgotCS8qIGlmIHI0IGlzIDEsIHN3YXAgdGhlIGJhbmsgKi8KLQljbXAJcjQsICMweDEKLQliaWNlcQlyMSwgcjEsICMweDA4MDAwMDAwCi0Jc3RyCXIxLCBbcjYsICMweDAwY10JCQlAIE1FTUNPTkZJRzEKLQotCWxkcglyMSwgPTB4MjAwMDAwMDAKLQlzdHIJcjEsIFtyNiwgIzB4MDE0XQkJCUAgUFJFQ0hDT05GSUcKLQotCS8qCi0JICogRklYTUU6IFBsZWFzZSB2ZXJpZnkgdGhlc2UgdmFsdWVzCi0JICogNy44dXMgKiAxNjZNSHogJUxFICVMT05HMTI5NCgweDUwRSkKLQkgKiA3Ljh1cyAqIDEzM01IeiAlTEUgJUxPTkcxMDM4KDB4NDBFKSwKLQkgKiA3Ljh1cyAqIDEwME1IeiAlTEUgJUxPTkc3ODAoMHgzMEMpLAotCSAqIDcuOHVzICogMjBNSHogICVMRSAlTE9ORzE1NigweDlDKSwKLQkgKiA3Ljh1cyAqIDEwTUh6ICAlTEUgJUxPTkc3OCgweDRFKQotCSAqLwotCWxkcglyMSwgPTB4MDAwMDA1MGUKLQlzdHIJcjEsIFtyNiwgIzB4MDMwXQkJCUAgVElNSU5HQVJFRgotCi0JLyogMTY2IE1IeiAqLwotCWxkcglyMSwgPTB4MGMyMzMyODcKLQlzdHIJcjEsIFtyNiwgIzB4MDM0XQkJCUAgVElNSU5HUk9XCi0KLQkvKiB0d3RyPTMgdHdyPTIgdHJ0cD0zIGNsPTMgd2w9MyBybD0zICovCi0JbGRyCXIxLCA9MHgzMjMzMDMwMwotCXN0cglyMSwgW3I2LCAjMHgwMzhdCQkJQCBUSU1JTkdEQVRBCi0KLQkvKiB0ZmF3PTQgc3hzcj0weDE0IHR4cD0weDE0IHRja2U9MyB0bXJkPTMgKi8KLQlsZHIJcjEsID0weDA0MTQxNDMzCi0Jc3RyCXIxLCBbcjYsICMweDAzQ10JCQlAIFRJTUlOR1BPV0VSCi0KLQkvKiBjaGlwMCBEZXNlbGVjdCAqLwotCWxkcglyMSwgPTB4MDcwMDAwMDAKLQlzdHIJcjEsIFtyNiwgIzB4MDEwXQkJCUAgRElSRUNUQ01ECi0KLQkvKiBjaGlwMCBQQUxMICovCi0JbGRyCXIxLCA9MHgwMTAwMDAwMAotCXN0cglyMSwgW3I2LCAjMHgwMTBdCQkJQCBESVJFQ1RDTUQKLQotCS8qIGNoaXAwIFJFRkEgKi8KLQlsZHIJcjEsID0weDA1MDAwMDAwCi0Jc3RyCXIxLCBbcjYsICMweDAxMF0JCQlAIERJUkVDVENNRAotCS8qIGNoaXAwIFJFRkEgKi8KLQlzdHIJcjEsIFtyNiwgIzB4MDEwXQkJCUAgRElSRUNUQ01ECi0KLQkvKiBjaGlwMCBNUlMsIENMJUxFICVMT05HMywgQkwlTEUgJUxPTkc0ICovCi0JbGRyCXIxLCA9MHgwMDAwMDAzMgotCXN0cglyMSwgW3I2LCAjMHgwMTBdCQkJQCBESVJFQ1RDTUQKLQotCS8qIGNoaXAxIERlc2VsZWN0ICovCi0JbGRyCXIxLCA9MHgwNzEwMDAwMAotCXN0cglyMSwgW3I2LCAjMHgwMTBdCQkJQCBESVJFQ1RDTUQKLQotCS8qIGNoaXAxIFBBTEwgKi8KLQlsZHIJcjEsID0weDAxMTAwMDAwCi0Jc3RyCXIxLCBbcjYsICMweDAxMF0JCQlAIERJUkVDVENNRAotCi0JLyogY2hpcDEgUkVGQSAqLwotCWxkcglyMSwgPTB4MDUxMDAwMDAKLQlzdHIJcjEsIFtyNiwgIzB4MDEwXQkJCUAgRElSRUNUQ01ECi0JLyogY2hpcDEgUkVGQSAqLwotCXN0cglyMSwgW3I2LCAjMHgwMTBdCQkJQCBESVJFQ1RDTUQKLQotCS8qIGNoaXAxIE1SUywgQ0wlTEUgJUxPTkczLCBCTCVMRSAlTE9ORzQgKi8KLQlsZHIJcjEsID0weDAwMTAwMDMyCi0Jc3RyCXIxLCBbcjYsICMweDAxMF0JCQlAIERJUkVDVENNRAotCi0JLyogYXV0byByZWZyZXNoIG9uICovCi0JbGRyCXIxLCA9MHhmZjAwMjAzMAotCXN0cglyMSwgW3I2LCAjMHgwMDBdCQkJQCBDT05DT05UUk9MCi0KLQkvKiBQd3JkbkNvbmZpZyAqLwotCWxkcglyMSwgPTB4MDAxMDAwMDIKLQlzdHIJcjEsIFtyNiwgIzB4MDI4XQkJCUAgUFdSRE5DT05GSUcKLQotCS8qIEJMJUxFICVMT05HICovCi0JbGRyCXIxLCA9MHhmZjIxMjEwMAotCXN0cglyMSwgW3I2LCAjMHgwMDRdCQkJQCBNRU1DT05UUk9MCi0KLQotCS8qIFRyeSB0byB0ZXN0IG1lbW9yeSBhcmVhICovCi0JY21wCXI0LCAjMHgxCi0JYmVxCTFmCi0KLQltb3YJcjQsICMweDEKLQlsZHIJcjEsID0weDM3ZmZmZjAwCi0Jc3RyCXI0LCBbcjFdCi0Jc3RyCXI0LCBbcjEsICMweDRdCQkJCUAgZHVtbXkgd3JpdGUKLQlsZHIJcjAsIFtyMV0KLQljbXAJcjAsIHI0Ci0JYm5lCXN3YXBfbWVtb3J5Ci0KLTE6Ci0JbW92CXBjLCBscgotCi0JLmx0b3JnCmRpZmYgLS1naXQgYS9ib2FyZC9zYW1zdW5nL3RyYXRzL3RyYXRzLmMgYi9ib2FyZC9zYW1zdW5nL3RyYXRzL3RyYXRzLmMKaW5kZXggN2M3OWU3Yi4uYWIwYWQxZCAxMDA2NDQKLS0tIGEvYm9hcmQvc2Ftc3VuZy90cmF0cy90cmF0cy5jCisrKyBiL2JvYXJkL3NhbXN1bmcvdHJhdHMvdHJhdHMuYwpAQCAtNDMwLDggKzQzMCw3IEBACiAJcmV0dXJuIHMzY191ZGNfcHJvYmUoJnM1cGMyMTBfb3RnX2RhdGEpOwogfQogCi0jaWZkZWYgQ09ORklHX1VTQl9DQUJMRV9DSEVDSwotaW50IHVzYl9jYWJsZV9jb25uZWN0ZWQodm9pZCkKK2ludCBnX2RubF9ib2FyZF91c2JfY2FibGVfY29ubmVjdGVkKHZvaWQpCiB7CiAJc3RydWN0IHBtaWMgKm11aWMgPSBwbWljX2dldCgiTUFYODk5N19NVUlDIik7CiAJaWYgKCFtdWljKQpAQCAtNDQwLDcgKzQzOSw2IEBACiAJcmV0dXJuICEhbXVpYy0+Y2hyZy0+Y2hyZ190eXBlKG11aWMpOwogfQogI2VuZGlmCi0jZW5kaWYKIAogc3RhdGljIHZvaWQgcG1pY19yZXNldCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYm9hcmQvc2Ftc3VuZy90cmF0czIvdHJhdHMyLmMgYi9ib2FyZC9zYW1zdW5nL3RyYXRzMi90cmF0czIuYwppbmRleCBmNTU4ZWY5Li40NzA5NTI1IDEwMDY0NAotLS0gYS9ib2FyZC9zYW1zdW5nL3RyYXRzMi90cmF0czIuYworKysgYi9ib2FyZC9zYW1zdW5nL3RyYXRzMi90cmF0czIuYwpAQCAtMzEyLDggKzMxMiw3IEBACiAJcmV0dXJuIHMzY191ZGNfcHJvYmUoJnM1cGMyMTBfb3RnX2RhdGEpOwogfQogCi0jaWZkZWYgQ09ORklHX1VTQl9DQUJMRV9DSEVDSwotaW50IHVzYl9jYWJsZV9jb25uZWN0ZWQodm9pZCkKK2ludCBnX2RubF9ib2FyZF91c2JfY2FibGVfY29ubmVjdGVkKHZvaWQpCiB7CiAJc3RydWN0IHBtaWMgKm11aWMgPSBwbWljX2dldCgiTUFYNzc2OTNfTVVJQyIpOwogCWlmICghbXVpYykKQEAgLTMyMiw3ICszMjEsNiBAQAogCXJldHVybiAhIW11aWMtPmNocmctPmNocmdfdHlwZShtdWljKTsKIH0KICNlbmRpZgotI2VuZGlmCiAKIHN0YXRpYyBpbnQgcG1pY19pbml0X21heDc3Njg2KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9ib2FyZC9zYW1zdW5nL3VuaXZlcnNhbF9jMjEwL3VuaXZlcnNhbC5jIGIvYm9hcmQvc2Ftc3VuZy91bml2ZXJzYWxfYzIxMC91bml2ZXJzYWwuYwppbmRleCBmOWQ3MWI2Li44ZTQ5MTk1IDEwMDY0NAotLS0gYS9ib2FyZC9zYW1zdW5nL3VuaXZlcnNhbF9jMjEwL3VuaXZlcnNhbC5jCisrKyBiL2JvYXJkL3NhbXN1bmcvdW5pdmVyc2FsX2MyMTAvdW5pdmVyc2FsLmMKQEAgLTE5NywxMyArMTk3LDYgQEAKIAlyZXR1cm4gczNjX3VkY19wcm9iZSgmczVwYzIxMF9vdGdfZGF0YSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfVVNCX0NBQkxFX0NIRUNLCi1pbnQgdXNiX2NhYmxlX2Nvbm5lY3RlZCh2b2lkKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIGludCBleHlub3NfZWFybHlfaW5pdF9mKHZvaWQpCiB7CiAJd2R0X3N0b3AoKTsKZGlmZiAtLWdpdCBhL2JvYXJkL3NhbmRwb2ludC9lYXJseV9pbml0LlMgYi9ib2FyZC9zYW5kcG9pbnQvZWFybHlfaW5pdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTliOTI0Li4wMDAwMDAwCi0tLSBhL2JvYXJkL3NhbmRwb2ludC9lYXJseV9pbml0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogVGhvbWFzIEtvZWxsZXIsIHRrb2VsbGVyQGdteC5uZXQKLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0jaWZuZGVmCV9fQVNTRU1CTFlfXwotI2RlZmluZSBfX0FTU0VNQkxZX18JMQotI2VuZGlmCi0KLSNpbmNsdWRlIDxhc20tb2Zmc2V0cy5oPgotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxtcGM4MjR4Lmg+Ci0jaW5jbHVkZSA8cHBjX2FzbS50bXBsPgotCi0jaWYgZGVmaW5lZChVU0VfRElOSzMyKQotICAvKiBXZSBhcmUgcnVubmluZyBmcm9tIFJBTSwgc28gZG8gbm90IGNsZWFyIHRoZSBNQ0NSMV9NRU1HTyBiaXQhICovCi0gICNkZWZpbmUgTUNDUjFWQUwgKChDT05GSUdfU1lTX1JPTU5BTCA8PCBNQ0NSMV9ST01OQUxfU0hJRlQpIHwgKENPTkZJR19TWVNfUk9NRkFMIDw8IE1DQ1IxX1JPTUZBTF9TSElGVCkgfCBNQ0NSMV9NRU1HTykKLSNlbHNlCi0gICNkZWZpbmUgTUNDUjFWQUwgKENPTkZJR19TWVNfUk9NTkFMIDw8IE1DQ1IxX1JPTU5BTF9TSElGVCkgfCAoQ09ORklHX1NZU19ST01GQUwgPDwgTUNDUjFfUk9NRkFMX1NISUZUKQotI2VuZGlmCi0KLQkudGV4dAotCi0JLyogVmFsdWVzIHRvIHByb2dyYW0gaW50byBtZW1vcnkgY29udHJvbGxlciByZWdpc3RlcnMgKi8KLXRibDoJLmxvbmcJTUNDUjEsIE1DQ1IxVkFMCi0JLmxvbmcJTUNDUjIsIENPTkZJR19TWVNfUkVGSU5UIDw8IE1DQ1IyX1JFRklOVF9TSElGVAotCS5sb25nCU1DQ1IzCi0JLmxvbmcJKCgoQ09ORklHX1NZU19CU1RPUFJFICYgMHgwMDAwMDBmMCkgPj4gNCkgPDwgTUNDUjNfQlNUT1BSRTJUTzVfU0hJRlQpIHwgXAotCQkoQ09ORklHX1NZU19SRUZSRUMgPDwgTUNDUjNfUkVGUkVDX1NISUZUKSB8IFwKLQkJKENPTkZJR19TWVNfUkRMQVQgIDw8IE1DQ1IzX1JETEFUX1NISUZUKQotCS5sb25nCU1DQ1I0Ci0JLmxvbmcJKENPTkZJR19TWVNfUFJFVE9BQ1QgPDwgTUNDUjRfUFJFVE9BQ1RfU0hJRlQpIHwgKENPTkZJR19TWVNfQUNUVE9QUkUgPDwgTUNDUjRfQUNUVE9QUkVfU0hJRlQpIHwgXAotCQkoQ09ORklHX1NZU19SRUdJU1RFUkRfVFlQRV9CVUZGRVIgPDwgMjApIHwgXAotCQkoKChDT05GSUdfU1lTX0JTVE9QUkUgJiAweDAwMDAwMzAwKSA+PiA4KSA8PCBNQ0NSNF9CU1RPUFJFMFRPMV9TSElGVCApIHwgXAotCQkoKENPTkZJR19TWVNfU0RNT0RFX0NBU19MQVQgPDwgNCkgfCAoQ09ORklHX1NZU19TRE1PREVfV1JBUCA8PCAzKSB8IFwKLQkJKENPTkZJR19TWVNfU0RNT0RFX0JVUlNUTEVOKSA8PCBNQ0NSNF9TRE1PREVfU0hJRlQpIHwgXAotCQkoQ09ORklHX1NZU19BQ1RUT1JXIDw8IE1DQ1I0X0FDVFRPUldfU0hJRlQpIHwgXAotCQkoKENPTkZJR19TWVNfQlNUT1BSRSAmIDB4MDAwMDAwMGYpIDw8IE1DQ1I0X0JTVE9QUkU2VE85X1NISUZUICkKLQkubG9uZwlNU0FSMQotCS5sb25nCSgoKENPTkZJR19TWVNfQkFOSzBfU1RBUlQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAgMCkgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzFfU1RBUlQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAgOCkgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzJfU1RBUlQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAxNikgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzNfU1RBUlQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAyNCkKLQkubG9uZwlFTVNBUjEKLQkubG9uZwkoKChDT05GSUdfU1lTX0JBTkswX1NUQVJUICYgTUlDUl9FQUREUl9NQVNLKSA+PiBNSUNSX0VBRERSX1NISUZUKSA8PCAgMCkgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzFfU1RBUlQgJiBNSUNSX0VBRERSX01BU0spID4+IE1JQ1JfRUFERFJfU0hJRlQpIDw8ICA4KSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LMl9TVEFSVCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgMTYpIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTkszX1NUQVJUICYgTUlDUl9FQUREUl9NQVNLKSA+PiBNSUNSX0VBRERSX1NISUZUKSA8PCAyNCkKLQkubG9uZwlNU0FSMgotCS5sb25nCSgoKENPTkZJR19TWVNfQkFOSzRfU1RBUlQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAgMCkgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzVfU1RBUlQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAgOCkgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzZfU1RBUlQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAxNikgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzdfU1RBUlQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAyNCkKLQkubG9uZwlFTVNBUjIKLQkubG9uZwkoKChDT05GSUdfU1lTX0JBTks0X1NUQVJUICYgTUlDUl9FQUREUl9NQVNLKSA+PiBNSUNSX0VBRERSX1NISUZUKSA8PCAgMCkgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzVfU1RBUlQgJiBNSUNSX0VBRERSX01BU0spID4+IE1JQ1JfRUFERFJfU0hJRlQpIDw8ICA4KSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LNl9TVEFSVCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgMTYpIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTks3X1NUQVJUICYgTUlDUl9FQUREUl9NQVNLKSA+PiBNSUNSX0VBRERSX1NISUZUKSA8PCAyNCkKLQkubG9uZwlNRUFSMQotCS5sb25nCSgoKENPTkZJR19TWVNfQkFOSzBfRU5EICYgTUlDUl9BRERSX01BU0spID4+IE1JQ1JfQUREUl9TSElGVCkgPDwgIDApIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTksxX0VORCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8ICA4KSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LMl9FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAxNikgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzNfRU5EICYgTUlDUl9BRERSX01BU0spID4+IE1JQ1JfQUREUl9TSElGVCkgPDwgMjQpCi0JLmxvbmcJRU1FQVIxCi0JLmxvbmcJKCgoQ09ORklHX1NZU19CQU5LMF9FTkQgJiBNSUNSX0VBRERSX01BU0spID4+IE1JQ1JfRUFERFJfU0hJRlQpIDw8ICAwKSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LMV9FTkQgJiBNSUNSX0VBRERSX01BU0spID4+IE1JQ1JfRUFERFJfU0hJRlQpIDw8ICA4KSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LMl9FTkQgJiBNSUNSX0VBRERSX01BU0spID4+IE1JQ1JfRUFERFJfU0hJRlQpIDw8IDE2KSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LM19FTkQgJiBNSUNSX0VBRERSX01BU0spID4+IE1JQ1JfRUFERFJfU0hJRlQpIDw8IDI0KQotCS5sb25nCU1FQVIyCi0JLmxvbmcJKCgoQ09ORklHX1NZU19CQU5LNF9FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAgMCkgfCBcCi0JCSgoKENPTkZJR19TWVNfQkFOSzVfRU5EICYgTUlDUl9BRERSX01BU0spID4+IE1JQ1JfQUREUl9TSElGVCkgPDwgIDgpIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTks2X0VORCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8IDE2KSB8IFwKLQkJKCgoQ09ORklHX1NZU19CQU5LN19FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAyNCkKLQkubG9uZwlFTUVBUjIKLQkubG9uZwkoKChDT05GSUdfU1lTX0JBTks0X0VORCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgIDApIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTks1X0VORCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgIDgpIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTks2X0VORCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgMTYpIHwgXAotCQkoKChDT05GSUdfU1lTX0JBTks3X0VORCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgMjQpCi0JLmxvbmcJMAotCi0KLQkvKgotCSAqIEVhcmx5IENQVSBpbml0aWFsaXphdGlvbi4gU2V0IHVwIG1lbW9yeSBjb250cm9sbGVyLCBzbyB3ZSBjYW4gYWNjZXNzIGFueSBSQU0gYXQgYWxsLiBUaGlzCi0JICogbXVzdCBiZSBkb25lIGluIGFzc2VtYmx5LCBzaW5jZSB3ZSBoYXZlIG5vIHN0YWNrIGF0IHRoaXMgcG9pbnQuCi0JICovCi0JLmdsb2JhbAllYXJseV9pbml0X2YKLWVhcmx5X2luaXRfZjoKLQltZmxyCXIxMAotCi0JLyogYmFzaWMgbWVtb3J5IGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbiAqLwotCWxpcwlyMywgQ09ORklHX0FERFJfSElHSAotCWxpcwlyNCwgQ09ORklHX0RBVEFfSElHSAotCWJsCWxhYgotbGFiOgltZmxyCXI1Ci0JbHd6dQlyMCwgdGJsIC0gbGFiKHI1KQotbG9vcDoJbHd6CXIxLCA0KHI1KQotCXN0d2JyeAlyMCwgMCwgcjMKLQllaWVpbwotCXN0d2JyeAlyMSwgMCwgcjQKLQllaWVpbwotCWx3enUJcjAsIDgocjUpCi0JY21wbGkJY3IwLCAwLCByMCwgMAotCWJuZQljcjAsIGxvb3AKLQotCS8qIHNldCBiYW5rIGVuYWJsZSBiaXRzICovCi0JbGlzCXIwLCBNQkVSQGgKLQlvcmkJcjAsIDAsIE1CRVJAbAotCWxpCXIxLCBDT05GSUdfU1lTX0JBTktfRU5BQkxFCi0Jc3R3YnJ4CXIwLCAwLCByMwotCWVpZWlvCi0Jc3RiCXIxLCAwKHI0KQotCWVpZWlvCi0KLQkvKiBkZWxheSBsb29wICovCi0JbGlzCXIwLCAweDAwMDMKLQltdGN0ciAgIHIwCi1kZWxheToJYmRueglkZWxheQotCi0JLyogZW5hYmxlIG1lbW9yeSBjb250cm9sbGVyICovCi0JbGlzCXIwLCBNQ0NSMUBoCi0Jb3JpCXIwLCAwLCBNQ0NSMUBsCi0Jc3R3YnJ4CXIwLCAwLCByMwotCWVpZWlvCi0JbHdicngJcjAsIDAsIHI0Ci0Jb3JpcwlyMCwgMCwgTUNDUjFfTUVNR09AaAotCXN0d2JyeAlyMCwgMCwgcjQKLQllaWVpbwotCi0JLyogc2V0IHVwIHN0YWNrIHBvaW50ZXIgKi8KLQlsaXMJcjEsIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVRAaAotCW9yaQlyMSwgcjEsIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVRAbAotCi0JbXRscglyMTAKLQlibHIKZGlmZiAtLWdpdCBhL2JvYXJkcy5jZmcgYi9ib2FyZHMuY2ZnCmluZGV4IDBiNjNjNWEuLjJlYWRkMGQgMTAwNjQ0Ci0tLSBhL2JvYXJkcy5jZmcKKysrIGIvYm9hcmRzLmNmZwpAQCAtNTIyLDEwICs1MjIsNiBAQAogQWN0aXZlICBtaXBzICAgICAgICBtaXBzMzIgICAgICAgICBhdTF4MDAgICAgICAtICAgICAgICAgICAgICAgZGJhdTF4MDAgICAgICAgICAgICBkYmF1MTU1MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJhdTF4MDA6REJBVTE1NTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRob21hcyBMYW5nZSA8dGhvbWFzQGNvcmVsYXR1cy5zZT4KIEFjdGl2ZSAgbWlwcyAgICAgICAgbWlwczMyICAgICAgICAgYXUxeDAwICAgICAgLSAgICAgICAgICAgICAgIGRiYXUxeDAwICAgICAgICAgICAgZGJhdTE1NTBfZWwgICAgICAgICAgICAgICAgICAgICAgICAgIGRiYXUxeDAwOkRCQVUxNTUwLFNZU19MSVRUTEVfRU5ESUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaG9tYXMgTGFuZ2UgPHRob21hc0Bjb3JlbGF0dXMuc2U+CiBBY3RpdmUgIG1pcHMgICAgICAgIG1pcHMzMiAgICAgICAgIGF1MXgwMCAgICAgIC0gICAgICAgICAgICAgICBwYjF4MDAgICAgICAgICAgICAgIHBiMTAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYjF4MDA6UEIxMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotQWN0aXZlICBtaXBzICAgICAgICBtaXBzMzIgICAgICAgICBpbmNhaXAgICAgICAtICAgICAgICAgICAgICAgaW5jYWlwICAgICAgICAgICAgICBpbmNhaXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+Ci1BY3RpdmUgIG1pcHMgICAgICAgIG1pcHMzMiAgICAgICAgIGluY2FpcCAgICAgIC0gICAgICAgICAgICAgICBpbmNhaXAgICAgICAgICAgICAgIGluY2FpcF8xMDBNSHogICAgICAgICAgICAgICAgICAgICAgICBpbmNhaXA6Q1BVX0NMT0NLX1JBVEU9MTAwMDAwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KLUFjdGl2ZSAgbWlwcyAgICAgICAgbWlwczMyICAgICAgICAgaW5jYWlwICAgICAgLSAgICAgICAgICAgICAgIGluY2FpcCAgICAgICAgICAgICAgaW5jYWlwXzEzM01IeiAgICAgICAgICAgICAgICAgICAgICAgIGluY2FpcDpDUFVfQ0xPQ0tfUkFURT0xMzMwMDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgotQWN0aXZlICBtaXBzICAgICAgICBtaXBzMzIgICAgICAgICBpbmNhaXAgICAgICAtICAgICAgICAgICAgICAgaW5jYWlwICAgICAgICAgICAgICBpbmNhaXBfMTUwTUh6ICAgICAgICAgICAgICAgICAgICAgICAgaW5jYWlwOkNQVV9DTE9DS19SQVRFPTE1MDAwMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CiBBY3RpdmUgIG1pcHMgICAgICAgIG1pcHM2NCAgICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICBxZW11LW1pcHMgICAgICAgICAgIHFlbXVfbWlwczY0ICAgICAgICAgICAgICAgICAgICAgICAgICBxZW11LW1pcHM2NDpTWVNfQklHX0VORElBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQogQWN0aXZlICBtaXBzICAgICAgICBtaXBzNjQgICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgcWVtdS1taXBzICAgICAgICAgICBxZW11X21pcHM2NGVsICAgICAgICAgICAgICAgICAgICAgICAgcWVtdS1taXBzNjQ6U1lTX0xJVFRMRV9FTkRJQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KIEFjdGl2ZSAgbmRzMzIgICAgICAgbjEyMTMgICAgICAgICAgYWcxMDEgICAgICAgQW5kZXNUZWNoICAgICAgIGFkcC1hZzEwMSAgICAgICAgICAgYWRwLWFnMTAxICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmRlcyA8dWJvb3RAYW5kZXN0ZWNoLmNvbT4KQEAgLTUzNyw3ICs1MzMsNiBAQAogQWN0aXZlICBvcGVucmlzYyAgICBvcjEyMDAgICAgICAgICAtICAgICAgICAgICBvcGVucmlzYyAgICAgICAgb3BlbnJpc2MtZ2VuZXJpYyAgICBvcGVucmlzYy1nZW5lcmljICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ZWZhbiBLcmlzdGlhbnNzb24gPHN0ZWZhbi5rcmlzdGlhbnNzb25Ac2F1bmFsYWh0aS5maT4KIEFjdGl2ZSAgcG93ZXJwYyAgICAgNzR4eF83eHggICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgcHBtYzd4eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCiBBY3RpdmUgIHBvd2VycGMgICAgIDc0eHhfN3h4ICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICBldmI2NDI2MCAgICAgICAgICAgIFAzRzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KLUFjdGl2ZSAgcG93ZXJwYyAgICAgNzR4eF83eHggICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIGV2YjY0MjYwICAgICAgICAgICAgWlVNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOeWUgTGl1IDxueWV0QHp1bWFuZXR3b3Jrcy5jb20+CiBBY3RpdmUgIHBvd2VycGMgICAgIDc0eHhfN3h4ICAgICAgIC0gICAgICAgICAgIGVsdGVjICAgICAgICAgICBlbHBwYyAgICAgICAgICAgICAgIEVMUFBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQogQWN0aXZlICBwb3dlcnBjICAgICA3NHh4Xzd4eCAgICAgICAtICAgICAgICAgICBlc2QgICAgICAgICAgICAgY3BjaTc1MCAgICAgICAgICAgICBDUENJNzUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlaW5oYXJkIEFybHQgPHJlaW5oYXJkLmFybHRAZXNkLWVsZWN0cm9uaWNzLmNvbT4KIEFjdGl2ZSAgcG93ZXJwYyAgICAgNzR4eF83eHggICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIG1wYzc0NDhocGMyICAgICAgICAgbXBjNzQ0OGhwYzIgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb3kgWmFuZyA8dGllLWZlaS56YW5nQGZyZWVzY2FsZS5jb20+CkBAIC02NDQsMjMgKzYzOSwyMSBAQAogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4MjR4ICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgY3BjNDUgICAgICAgICAgICAgICBDUEM0NV9ST01CT09UICAgICAgICAgICAgICAgICAgICAgICAgQ1BDNDU6Qk9PVF9ST00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpvc2VmIFdhZ25lciA8V2FnbmVyQE1pY3Jvc3lzLmRlPgogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4MjR4ICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgY3U4MjQgICAgICAgICAgICAgICBDVTgyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzgyNHggICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICBlWGFsaW9uICAgICAgICAgICAgIGVYYWxpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9yc3RlbiBEZW1rZSA8dG9yc3Rlbi5kZW1rZUBmY2kuY29tPgotQWN0aXZlICBwb3dlcnBjICAgICBtcGM4MjR4ICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgbXVzZW5raSAgICAgICAgICAgICBNVVNFTktJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEppbSBUaG9tcHNvbiA8amltQG11c2Vua2kuY29tPgogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4MjR4ICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgbXZibHVlICAgICAgICAgICAgICBNVkJMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODI0eCAgICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIHNhbmRwb2ludCAgICAgICAgICAgU2FuZHBvaW50ODI0MCAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgotQWN0aXZlICBwb3dlcnBjICAgICBtcGM4MjR4ICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgc2FuZHBvaW50ICAgICAgICAgICBTYW5kcG9pbnQ4MjQ1ICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEppbSBUaG9tcHNvbiA8amltQG11c2Vua2kuY29tPgogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4MjYwICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICBhdGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzgyNjAgICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgIGVwODI2MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbmsgUGFubm8gPGZwYW5ub0BkZWxwaGludGVjaC5jb20+CiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzgyNjAgICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgIGVwODJ4eG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4MjYwICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICBndzgyNjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9saXZlciBCcm93biA8b2Jyb3duQGFkdmVudG5ldHdvcmtzLmNvbT4KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODI2MCAgICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgaHltb2QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdXJyYXkgSmVuc2VuIDxNdXJyYXkuSmVuc2VuQGNzaXJvLmF1PgotQWN0aXZlICBwb3dlcnBjICAgICBtcGM4MjYwICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICBwcG1jODI2MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyYWQgS2VtcCA8QnJhZC5LZW1wQHNlcmFub2EuY29tPgogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4MjYwICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICBzYWNzbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEplcnJ5IFZhbiBCYXJlbiA8Z2VyYWxkLnZhbmJhcmVuQHNtaXRocy1hZXJvc3BhY2UuY29tPgogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4MjYwICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgY29nZW50ICAgICAgICAgICAgICBjb2dlbnRfbXBjODI2MCAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11cnJheSBKZW5zZW4gPE11cnJheS5KZW5zZW5AY3Npcm8uYXU+CiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzgyNjAgICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICBjcHU4NiAgICAgICAgICAgICAgIENQVTg2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODI2MCAgICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIGNwdTg2ICAgICAgICAgICAgICAgQ1BVODZfUk9NQk9PVCAgICAgICAgICAgICAgICAgICAgICAgIENQVTg2OkJPT1RfUk9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4MjYwICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgY3B1ODcgICAgICAgICAgICAgICBDUFU4NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODI2MCAgICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIGNwdTg3ICAgICAgICAgICAgICAgQ1BVODdfUk9NQk9PVCAgICAgICAgICAgICAgICAgICAgICAgIENQVTg3OkJPT1RfUk9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi1BY3RpdmUgIHBvd2VycGMgICAgIG1wYzgyNjAgICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICBpZHM4MjQ3ICAgICAgICAgICAgIElEUzgyNDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CitBY3RpdmUgIHBvd2VycGMgICAgIG1wYzgyNjAgICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICBlcDgyNDggICAgICAgICAgICAgIGVwODI0OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWXVsaSBCYXJjb2hlbiA8eXVsaUBhcmFiZWxsYXN3LmNvbT4KK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODI2MCAgICAgICAgLSAgICAgICAgICAgaWRzICAgICAgICAgICAgIGlkczgyNDcgICAgICAgICAgICAgSURTODI0NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODI2MCAgICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIGlwaGFzZTQ1MzkgICAgICAgICAgSVBIQVNFNDUzOSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb2xmZ2FuZyBHcmFuZGVnZ2VyIDx3Z0BkZW54LmRlPgogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4MjYwICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgbXVhczMwMDEgICAgICAgICAgICBtdWFzMzAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4MjYwICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgbXVhczMwMDEgICAgICAgICAgICBtdWFzMzAwMV9kZXYgICAgICAgICAgICAgICAgICAgICAgICAgbXVhczMwMDE6TVVBU19ERVZfQk9BUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgpAQCAtNzI5LDYgKzcyMiw3IEBACiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzgzeHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICBtcGM4Mzd4ZW1kcyAgICAgICAgIE1QQzgzN1hFTURTICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF2ZSBMaXUgPGRhdmVsaXVAZnJlZXNjYWxlLmNvbT4KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODN4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIG1wYzgzN3hlbWRzICAgICAgICAgTVBDODM3WEVNRFNfSE9TVCAgICAgICAgICAgICAgICAgICAgIE1QQzgzN1hFTURTOlBDSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXZlIExpdSA8ZGF2ZWxpdUBmcmVlc2NhbGUuY29tPgogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4M3h4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgbXBjODM3eGVyZGIgICAgICAgICBNUEM4MzdYRVJEQiAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpvZSBEJ0FiYnJhY2NpbyA8bGpkMDE1QGZyZWVzY2FsZS5jb20+CitBY3RpdmUgIHBvd2VycGMgICAgIG1wYzgzeHggICAgICAgIC0gICAgICAgICAgIGlkcyAgICAgICAgICAgICBpZHM4MzEzICAgICAgICAgICAgIGlkczgzMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHM4MzEzOlNZU19URVhUX0JBU0U9MHhGRkYwMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzgzeHggICAgICAgIC0gICAgICAgICAgIGtleW1pbGUgICAgICAgICBrbTgzeHggICAgICAgICAgICAgIGttY29nZTVuZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbTgzNjA6S01DT0dFNU5FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9sZ2VyIEJydW5jayA8aG9sZ2VyLmJydW5ja0BrZXltaWxlLmNvbT4KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODN4eCAgICAgICAgLSAgICAgICAgICAga2V5bWlsZSAgICAgICAgIGttODN4eCAgICAgICAgICAgICAga21ldGVyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGttODM2MDpLTUVURVIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb2xnZXIgQnJ1bmNrIDxob2xnZXIuYnJ1bmNrQGtleW1pbGUuY29tPgogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4M3h4ICAgICAgICAtICAgICAgICAgICBrZXltaWxlICAgICAgICAga204M3h4ICAgICAgICAgICAgICBrbW9wdGkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHV4eDE6S01PUFRJMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvbGdlciBCcnVuY2sgPGhvbGdlci5icnVuY2tAa2V5bWlsZS5jb20+CkBAIC03NDgsMTAgKzc0MiwxMSBAQAogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgc29jcmF0ZXMgICAgICAgICAgICBzb2NyYXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZXhtZXJpdHVzICAgICAgIGh3dzF1MWEgICAgICAgICAgICAgSFdXMVUxQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLeWxlIE1vZmZldHQgPEt5bGUuRC5Nb2ZmZXR0QGJvZWluZy5jb20+CiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICBiNDg2MHFkcyAgICAgICAgICAgIEI0NDIwUURTICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCNDg2MFFEUzpQUENfQjQ0MjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgYjQ4NjBxZHMgICAgICAgICAgICBCNDQyMFFEU19OQU5EICAgICAgICAgICAgICAgICAgICAgICAgQjQ4NjBRRFM6UFBDX0I0NDIwLFJBTUJPT1RfUEJMLE5BTkQsU1lTX1RFWFRfQkFTRT0weEZGRjQwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIGI0ODYwcWRzICAgICAgICAgICAgQjQ0MjBRRFNfTkFORCAgICAgICAgICAgICAgICAgICAgICAgIEI0ODYwUURTOlBQQ19CNDQyMCxSQU1CT09UX1BCTCxTUExfRlNMX1BCTCxOQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIGI0ODYwcWRzICAgICAgICAgICAgQjQ0MjBRRFNfU1BJRkxBU0ggICAgICAgICAgICAgICAgICAgIEI0ODYwUURTOlBQQ19CNDQyMCxSQU1CT09UX1BCTCxTUElGTEFTSCxTWVNfVEVYVF9CQVNFPTB4RkZGNDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICBiNDg2MHFkcyAgICAgICAgICAgIEI0ODYwUURTICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCNDg2MFFEUzpQUENfQjQ4NjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgYjQ4NjBxZHMgICAgICAgICAgICBCNDg2MFFEU19OQU5EICAgICAgICAgICAgICAgICAgICAgICAgQjQ4NjBRRFM6UFBDX0I0ODYwLFJBTUJPT1RfUEJMLE5BTkQsU1lTX1RFWFRfQkFTRT0weEZGRjQwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIGI0ODYwcWRzICAgICAgICAgICAgQjQ4NjBRRFNfU0VDVVJFX0JPT1QgICAgICAgICAgICAgICAgIEI0ODYwUURTOlBQQ19CNDg2MCxTRUNVUkVfQk9PVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmVlc2ggQmFuc2FsIDxhbmVlc2guYmFuc2FsQGZyZWVzY2FsZS5jb20+CitBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICBiNDg2MHFkcyAgICAgICAgICAgIEI0ODYwUURTX05BTkQgICAgICAgICAgICAgICAgICAgICAgICBCNDg2MFFEUzpQUENfQjQ4NjAsUkFNQk9PVF9QQkwsU1BMX0ZTTF9QQkwsTkFORAogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgYjQ4NjBxZHMgICAgICAgICAgICBCNDg2MFFEU19TUElGTEFTSCAgICAgICAgICAgICAgICAgICAgQjQ4NjBRRFM6UFBDX0I0ODYwLFJBTUJPT1RfUEJMLFNQSUZMQVNILFNZU19URVhUX0JBU0U9MHhGRkY0MDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIGI0ODYwcWRzICAgICAgICAgICAgQjQ4NjBRRFNfU1JJT19QQ0lFX0JPT1QgICAgICAgICAgICAgIEI0ODYwUURTOlBQQ19CNDg2MCxTUklPX1BDSUVfQk9PVF9TTEFWRSxTWVNfVEVYVF9CQVNFPTB4RkZGNDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICBic2M5MTMxcmRiICAgICAgICAgIEJTQzkxMzFSREJfTkFORCAgICAgICAgICAgICAgICAgICAgICBCU0M5MTMxUkRCOkJTQzkxMzFSREIsTkFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9vbmFtIEFnZ3J3YWwgPHBvb25hbS5hZ2dyd2FsQGZyZWVzY2FsZS5jb20+CkBAIC03NjYsNiArNzYxLDE0IEBACiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICBic2M5MTMycWRzICAgICAgICAgIEJTQzkxMzJRRFNfU0RDQVJEX0REUkNMSzEzMyAgICAgICAgICBCU0M5MTMyUURTOkJTQzkxMzJRRFMsU0RDQVJELFNZU19DTEtfMTAwX0REUl8xMzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmF2ZWVuIEJ1cm1pIDxOYXZlZW5CdXJtaUBmcmVlc2NhbGUuY29tPgogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgYnNjOTEzMnFkcyAgICAgICAgICBCU0M5MTMyUURTX1NQSUZMQVNIX0REUkNMSzEwMCAgICAgICAgQlNDOTEzMlFEUzpCU0M5MTMyUURTLFNQSUZMQVNILFNZU19DTEtfMTAwX0REUl8xMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hdmVlbiBCdXJtaSA8TmF2ZWVuQnVybWlAZnJlZXNjYWxlLmNvbT4KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIGJzYzkxMzJxZHMgICAgICAgICAgQlNDOTEzMlFEU19TUElGTEFTSF9ERFJDTEsxMzMgICAgICAgIEJTQzkxMzJRRFM6QlNDOTEzMlFEUyxTUElGTEFTSCxTWVNfQ0xLXzEwMF9ERFJfMTMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYXZlZW4gQnVybWkgPE5hdmVlbkJ1cm1pQGZyZWVzY2FsZS5jb20+CitBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICBic2M5MTMycWRzICAgICAgICAgIEJTQzkxMzJRRFNfTk9SX0REUkNMSzEwMF9TRUNVUkUgICAgICBCU0M5MTMyUURTOkJTQzkxMzJRRFMsU1lTX0NMS18xMDBfRERSXzEwMCxTRUNVUkVfQk9PVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5lZXNoIEJhbnNhbCA8YW5lZXNoLmJhbnNhbEBmcmVlc2NhbGUuY29tPgorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgYnNjOTEzMnFkcyAgICAgICAgICBCU0M5MTMyUURTX05PUl9ERFJDTEsxMzNfU0VDVVJFICAgICAgQlNDOTEzMlFEUzpCU0M5MTMyUURTLFNZU19DTEtfMTAwX0REUl8xMzMsU0VDVVJFX0JPT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuZWVzaCBCYW5zYWwgPGFuZWVzaC5iYW5zYWxAZnJlZXNjYWxlLmNvbT4KK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIGJzYzkxMzJxZHMgICAgICAgICAgQlNDOTEzMlFEU19TRENBUkRfRERSQ0xLMTAwX1NFQ1VSRSAgIEJTQzkxMzJRRFM6QlNDOTEzMlFEUyxTRENBUkQsU1lTX0NMS18xMDBfRERSXzEwMCxTRUNVUkVfQk9PVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmVlc2ggQmFuc2FsIDxhbmVlc2guYmFuc2FsQGZyZWVzY2FsZS5jb20+CitBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICBic2M5MTMycWRzICAgICAgICAgIEJTQzkxMzJRRFNfU0RDQVJEX0REUkNMSzEzM19TRUNVUkUgICBCU0M5MTMyUURTOkJTQzkxMzJRRFMsU0RDQVJELFNZU19DTEtfMTAwX0REUl8xMzMsU0VDVVJFX0JPT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5lZXNoIEJhbnNhbCA8YW5lZXNoLmJhbnNhbEBmcmVlc2NhbGUuY29tPgorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgYnNjOTEzMnFkcyAgICAgICAgICBCU0M5MTMyUURTX1NQSUZMQVNIX0REUkNMSzEwMF9TRUNVUkUgQlNDOTEzMlFEUzpCU0M5MTMyUURTLFNQSUZMQVNILFNZU19DTEtfMTAwX0REUl8xMDAsU0VDVVJFX0JPT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuZWVzaCBCYW5zYWwgPGFuZWVzaC5iYW5zYWxAZnJlZXNjYWxlLmNvbT4KK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIGJzYzkxMzJxZHMgICAgICAgICAgQlNDOTEzMlFEU19TUElGTEFTSF9ERFJDTEsxMzNfU0VDVVJFIEJTQzkxMzJRRFM6QlNDOTEzMlFEUyxTUElGTEFTSCxTWVNfQ0xLXzEwMF9ERFJfMTMzLFNFQ1VSRV9CT09UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmVlc2ggQmFuc2FsIDxhbmVlc2guYmFuc2FsQGZyZWVzY2FsZS5jb20+CitBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICBic2M5MTMycWRzICAgICAgICAgIEJTQzkxMzJRRFNfTkFORF9ERFJDTEsxMDBfU0VDVVJFICAgICBCU0M5MTMyUURTOkJTQzkxMzJRRFMsTkFORF9TRUNCT09ULFNZU19DTEtfMTAwX0REUl8xMDAsU0VDVVJFX0JPT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5lZXNoIEJhbnNhbCA8YW5lZXNoLmJhbnNhbEBmcmVlc2NhbGUuY29tPgorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgYnNjOTEzMnFkcyAgICAgICAgICBCU0M5MTMyUURTX05BTkRfRERSQ0xLMTMzX1NFQ1VSRSAgICAgQlNDOTEzMlFEUzpCU0M5MTMyUURTLE5BTkRfU0VDQk9PVCxTWVNfQ0xLXzEwMF9ERFJfMTMzLFNFQ1VSRV9CT09UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuZWVzaCBCYW5zYWwgPGFuZWVzaC5iYW5zYWxAZnJlZXNjYWxlLmNvbT4KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIGMyOXhwY2llICAgICAgICAgICAgQzI5WFBDSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMyOVhQQ0lFOkMyOVhQQ0lFLDM2QklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbyBMaXUgPHBvLmxpdUBmcmVlc2NhbGUuY29tPgogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgYzI5eHBjaWUgICAgICAgICAgICBDMjlYUENJRV9OQU5EICAgICAgICAgICAgICAgICAgICAgICAgQzI5WFBDSUU6QzI5WFBDSUUsMzZCSVQsTkFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvIExpdSA8cG8ubGl1QGZyZWVzY2FsZS5jb20+CiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICBjMjl4cGNpZSAgICAgICAgICAgIEMyOVhQQ0lFX1NQSUZMQVNIICAgICAgICAgICAgICAgICAgICBDMjlYUENJRTpDMjlYUENJRSwzNkJJVCxTUElGTEFTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG8gTGl1IDxwby5saXVAZnJlZXNjYWxlLmNvbT4KQEAgLTk0MCwzMiArOTQzLDQ2IEBACiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICBwMjA0MXJkYiAgICAgICAgICAgIFAyMDQxUkRCX1NQSUZMQVNIICAgICAgICAgICAgICAgICAgICBQMjA0MVJEQjpSQU1CT09UX1BCTCxTUElGTEFTSCxTWVNfVEVYVF9CQVNFPTB4RkZGNDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgcDIwNDFyZGIgICAgICAgICAgICBQMjA0MVJEQl9TUklPX1BDSUVfQk9PVCAgICAgICAgICAgICAgUDIwNDFSREI6U1JJT19QQ0lFX0JPT1RfU0xBVkUsU1lTX1RFWFRfQkFTRT0weEZGRjQwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQxMDQwcWRzICAgICAgICAgICAgVDEwNDBRRFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQxMDQwUURTOlBQQ19UMTA0MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb29uYW0gQWdncndhbCA8cG9vbmFtLmFnZ3J3YWxAZnJlZXNjYWxlLmNvbT4KLUFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQxMDR4cmRiICAgICAgICAgICAgVDEwNDBSREIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQxMDQwUkRCOlBQQ19UMTA0MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb29uYW0gQWdncndhbCAgPHBvb25hbS5hZ2dyd2FsQGZyZWVzY2FsZS5jb20+Ci1BY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0MTA0eHJkYiAgICAgICAgICAgIFQxMDQyUkRCX1BJICAgICAgICAgICAgICAgICAgICAgICAgICBUMTA0MlJEQl9QSTpQUENfVDEwNDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9vbmFtIEFnZ3J3YWwgIDxwb29uYW0uYWdncndhbEBmcmVlc2NhbGUuY29tPgorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDEwNDBxZHMgICAgICAgICAgICBUMTA0MFFEU19ENCAgICAgICAgICAgICAgICAgICAgICAgICAgVDEwNDBRRFM6UFBDX1QxMDQwLFNZU19GU0xfRERSNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvb25hbSBBZ2dyd2FsIDxwb29uYW0uYWdncndhbEBmcmVlc2NhbGUuY29tPgorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDEwNDBxZHMgICAgICAgICAgICBUMTA0MFFEU19TRUNVUkVfQk9PVCAgICAgICAgICAgICAgICAgVDEwNDBRRFM6UFBDX1QxMDQwLFNFQ1VSRV9CT09UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuZWVzaCBCYW5zYWwgPGFuZWVzaC5iYW5zYWxAZnJlZXNjYWxlLmNvbT4KK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQxMDR4cmRiICAgICAgICAgICAgVDEwNDBSREIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQxMDR4UkRCOlBQQ19UMTA0MCxUMTA0MFJEQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcml5YW5rYSBKYWluICA8UHJpeWFua2EuSmFpbkBmcmVlc2NhbGUuY29tPgorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDEwNHhyZGIgICAgICAgICAgICBUMTA0MFJEQl9OQU5EICAgICAgICAgICAgICAgICAgICAgICAgVDEwNHhSREI6UFBDX1QxMDQwLFQxMDQwUkRCLFJBTUJPT1RfUEJMLFNQTF9GU0xfUEJMLE5BTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpeWFua2EgSmFpbiAgPFByaXlhbmthLkphaW5AZnJlZXNjYWxlLmNvbT4KK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQxMDR4cmRiICAgICAgICAgICAgVDEwNDBSREJfU0RDQVJEICAgICAgICAgICAgICAgICAgICAgIFQxMDR4UkRCOlBQQ19UMTA0MCxUMTA0MFJEQixSQU1CT09UX1BCTCxTUExfRlNMX1BCTCxTRENBUkQKK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQxMDR4cmRiICAgICAgICAgICAgVDEwNDBSREJfU0VDVVJFX0JPT1QgICAgICAgICAgICAgICAgIFQxMDR4UkRCOlBQQ19UMTA0MCxTRUNVUkVfQk9PVCxUMTA0MFJEQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmVlc2ggQmFuc2FsICA8YW5lZXNoLmJhbnNhbEBmcmVlc2NhbGUuY29tPgorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDEwNHhyZGIgICAgICAgICAgICBUMTA0MFJEQl9TUElGTEFTSCAgICAgICAgICAgICAgICAgICAgVDEwNHhSREI6UFBDX1QxMDQwLFQxMDQwUkRCLFJBTUJPT1RfUEJMLFNQTF9GU0xfUEJMLFNQSUZMQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpeWFua2EgSmFpbiAgPFByaXlhbmthLkphaW5AZnJlZXNjYWxlLmNvbT4KK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQxMDR4cmRiICAgICAgICAgICAgVDEwNDJSREJfUEkgICAgICAgICAgICAgICAgICAgICAgICAgIFQxMDR4UkRCOlBQQ19UMTA0MixUMTA0MlJEQl9QSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcml5YW5rYSBKYWluICA8UHJpeWFua2EuSmFpbkBmcmVlc2NhbGUuY29tPgorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDEwNHhyZGIgICAgICAgICAgICBUMTA0MlJEQl9QSV9OQU5EICAgICAgICAgICAgICAgICAgICAgVDEwNHhSREI6UFBDX1QxMDQyLFQxMDQyUkRCX1BJLFJBTUJPT1RfUEJMLFNQTF9GU0xfUEJMLE5BTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpeWFua2EgSmFpbiAgPFByaXlhbmthLkphaW5AZnJlZXNjYWxlLmNvbT4KK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQxMDR4cmRiICAgICAgICAgICAgVDEwNDJSREJfUElfU0RDQVJEICAgICAgICAgICAgICAgICAgIFQxMDR4UkRCOlBQQ19UMTA0MixUMTA0MlJEQl9QSSxSQU1CT09UX1BCTCxTUExfRlNMX1BCTCxTRENBUkQKK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQxMDR4cmRiICAgICAgICAgICAgVDEwNDJSREJfUElfU1BJRkxBU0ggICAgICAgICAgICAgICAgIFQxMDR4UkRCOlBQQ19UMTA0MixUMTA0MlJEQl9QSSxSQU1CT09UX1BCTCxTUExfRlNMX1BCTCxTUElGTEFTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaXlhbmthIEphaW4gIDxQcml5YW5rYS5KYWluQGZyZWVzY2FsZS5jb20+CiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0MjA4eHFkcyAgICAgICAgICAgIFQyMDgwUURTICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUMjA4eFFEUzpQUENfVDIwODAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDIwOHhxZHMgICAgICAgICAgICBUMjA4MFFEU19OQU5EICAgICAgICAgICAgICAgICAgICAgICAgVDIwOHhRRFM6UFBDX1QyMDgwLFJBTUJPT1RfUEJMLE5BTkQsU1lTX1RFWFRfQkFTRT0weEZGRjQwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLUFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQyMDh4cWRzICAgICAgICAgICAgVDIwODBRRFNfU0RDQVJEICAgICAgICAgICAgICAgICAgICAgIFQyMDh4UURTOlBQQ19UMjA4MCxSQU1CT09UX1BCTCxTRENBUkQsU1lTX1RFWFRfQkFTRT0weEZGRjQwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi1BY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0MjA4eHFkcyAgICAgICAgICAgIFQyMDgwUURTX1NQSUZMQVNIICAgICAgICAgICAgICAgICAgICBUMjA4eFFEUzpQUENfVDIwODAsUkFNQk9PVF9QQkwsU1BJRkxBU0gsU1lTX1RFWFRfQkFTRT0weEZGRjQwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDIwOHhxZHMgICAgICAgICAgICBUMjA4MFFEU19TRUNVUkVfQk9PVCAgICAgICAgICAgICAgICAgVDIwOHhRRFM6UFBDX1QyMDgwLFNFQ1VSRV9CT09UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuZWVzaCBCYW5zYWwgPGFuZWVzaC5iYW5zYWxAZnJlZXNjYWxlLmNvbT4KK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQyMDh4cWRzICAgICAgICAgICAgVDIwODBRRFNfTkFORCAgICAgICAgICAgICAgICAgICAgICAgIFQyMDh4UURTOlBQQ19UMjA4MCxSQU1CT09UX1BCTCxTUExfRlNMX1BCTCxOQU5ECitBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0MjA4eHFkcyAgICAgICAgICAgIFQyMDgwUURTX1NEQ0FSRCAgICAgICAgICAgICAgICAgICAgICBUMjA4eFFEUzpQUENfVDIwODAsUkFNQk9PVF9QQkwsU1BMX0ZTTF9QQkwsU0RDQVJECitBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0MjA4eHFkcyAgICAgICAgICAgIFQyMDgwUURTX1NQSUZMQVNIICAgICAgICAgICAgICAgICAgICBUMjA4eFFEUzpQUENfVDIwODAsUkFNQk9PVF9QQkwsU1BMX0ZTTF9QQkwsU1BJRkxBU0gKIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQyMDh4cWRzICAgICAgICAgICAgVDIwODBRRFNfU1JJT19QQ0lFX0JPT1QgICAgICAgICAgICAgIFQyMDh4UURTOlBQQ19UMjA4MCxTUklPX1BDSUVfQk9PVF9TTEFWRSxTWVNfVEVYVF9CQVNFPTB4RkZGNDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0MjA4eHFkcyAgICAgICAgICAgIFQyMDgxUURTICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUMjA4eFFEUzpQUENfVDIwODEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDIwOHhxZHMgICAgICAgICAgICBUMjA4MVFEU19OQU5EICAgICAgICAgICAgICAgICAgICAgICAgVDIwOHhRRFM6UFBDX1QyMDgxLFJBTUJPT1RfUEJMLE5BTkQsU1lTX1RFWFRfQkFTRT0weEZGRjQwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLUFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQyMDh4cWRzICAgICAgICAgICAgVDIwODFRRFNfU0RDQVJEICAgICAgICAgICAgICAgICAgICAgIFQyMDh4UURTOlBQQ19UMjA4MSxSQU1CT09UX1BCTCxTRENBUkQsU1lTX1RFWFRfQkFTRT0weEZGRjQwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi1BY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0MjA4eHFkcyAgICAgICAgICAgIFQyMDgxUURTX1NQSUZMQVNIICAgICAgICAgICAgICAgICAgICBUMjA4eFFEUzpQUENfVDIwODEsUkFNQk9PVF9QQkwsU1BJRkxBU0gsU1lTX1RFWFRfQkFTRT0weEZGRjQwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDIwOHhxZHMgICAgICAgICAgICBUMjA4MVFEU19OQU5EICAgICAgICAgICAgICAgICAgICAgICAgVDIwOHhRRFM6UFBDX1QyMDgxLFJBTUJPT1RfUEJMLFNQTF9GU0xfUEJMLE5BTkQKK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQyMDh4cWRzICAgICAgICAgICAgVDIwODFRRFNfU0RDQVJEICAgICAgICAgICAgICAgICAgICAgIFQyMDh4UURTOlBQQ19UMjA4MSxSQU1CT09UX1BCTCxTUExfRlNMX1BCTCxTRENBUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCitBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0MjA4eHFkcyAgICAgICAgICAgIFQyMDgxUURTX1NQSUZMQVNIICAgICAgICAgICAgICAgICAgICBUMjA4eFFEUzpQUENfVDIwODEsUkFNQk9PVF9QQkwsU1BMX0ZTTF9QQkwsU1BJRkxBU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDIwOHhxZHMgICAgICAgICAgICBUMjA4MVFEU19TUklPX1BDSUVfQk9PVCAgICAgICAgICAgICAgVDIwOHhRRFM6UFBDX1QyMDgxLFNSSU9fUENJRV9CT09UX1NMQVZFLFNZU19URVhUX0JBU0U9MHhGRkY0MDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQyMDh4cmRiICAgICAgICAgICAgVDIwODBSREIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQyMDh4UkRCOlBQQ19UMjA4MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi1BY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0MjA4eHJkYiAgICAgICAgICAgIFQyMDgwUkRCX05BTkQgICAgICAgICAgICAgICAgICAgICAgICBUMjA4eFJEQjpQUENfVDIwODAsUkFNQk9PVF9QQkwsTkFORCxTWVNfVEVYVF9CQVNFPTB4RkZGNDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDIwOHhyZGIgICAgICAgICAgICBUMjA4MFJEQl9TRENBUkQgICAgICAgICAgICAgICAgICAgICAgVDIwOHhSREI6UFBDX1QyMDgwLFJBTUJPT1RfUEJMLFNEQ0FSRCxTWVNfVEVYVF9CQVNFPTB4RkZGNDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLUFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQyMDh4cmRiICAgICAgICAgICAgVDIwODBSREJfU1BJRkxBU0ggICAgICAgICAgICAgICAgICAgIFQyMDh4UkRCOlBQQ19UMjA4MCxSQU1CT09UX1BCTCxTUElGTEFTSCxTWVNfVEVYVF9CQVNFPTB4RkZGNDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCitBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0MjA4eHJkYiAgICAgICAgICAgIFQyMDgwUkRCX05BTkQgICAgICAgICAgICAgICAgICAgICAgICBUMjA4eFJEQjpQUENfVDIwODAsUkFNQk9PVF9QQkwsU1BMX0ZTTF9QQkwsTkFORAorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDIwOHhyZGIgICAgICAgICAgICBUMjA4MFJEQl9TRENBUkQgICAgICAgICAgICAgICAgICAgICAgVDIwOHhSREI6UFBDX1QyMDgwLFJBTUJPT1RfUEJMLFNQTF9GU0xfUEJMLFNEQ0FSRAorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDIwOHhyZGIgICAgICAgICAgICBUMjA4MFJEQl9TUElGTEFTSCAgICAgICAgICAgICAgICAgICAgVDIwOHhSREI6UFBDX1QyMDgwLFJBTUJPT1RfUEJMLFNQTF9GU0xfUEJMLFNQSUZMQVNICiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0MjA4eHJkYiAgICAgICAgICAgIFQyMDgwUkRCX1NSSU9fUENJRV9CT09UICAgICAgICAgICAgICBUMjA4eFJEQjpQUENfVDIwODAsU1JJT19QQ0lFX0JPT1RfU0xBVkUsU1lTX1RFWFRfQkFTRT0weEZGRjQwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDRxZHMgICAgICAgICAgICAgICBUNDE2MFFEUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVDQyNDBRRFM6UFBDX1Q0MTYwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLUFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQ0cWRzICAgICAgICAgICAgICAgVDQxNjBRRFNfU0RDQVJEICAgICAgICAgICAgICAgICAgICAgIFQ0MjQwUURTOlBQQ19UNDE2MCxSQU1CT09UX1BCTCxTRENBUkQsU1lTX1RFWFRfQkFTRT0weEZGRjQwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCitBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0NHFkcyAgICAgICAgICAgICAgIFQ0MTYwUURTX1NFQ1VSRV9CT09UICAgICAgICAgICAgICAgICBUNDI0MFFEUzpQUENfVDQxNjAsU0VDVVJFX0JPT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5lZXNoIEJhbnNhbCA8YW5lZXNoLmJhbnNhbEBmcmVlc2NhbGUuY29tPgorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDRxZHMgICAgICAgICAgICAgICBUNDE2MFFEU19OQU5EICAgICAgICAgICAgICAgICAgICAgICAgVDQyNDBRRFM6UFBDX1Q0MTYwLFJBTUJPT1RfUEJMLFNQTF9GU0xfUEJMLE5BTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQ0cWRzICAgICAgICAgICAgICAgVDQxNjBRRFNfU0RDQVJEICAgICAgICAgICAgICAgICAgICAgIFQ0MjQwUURTOlBQQ19UNDE2MCxSQU1CT09UX1BCTCxTUExfRlNMX1BCTCxTRENBUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQ0cWRzICAgICAgICAgICAgICAgVDQxNjBRRFNfU1BJRkxBU0ggICAgICAgICAgICAgICAgICAgIFQ0MjQwUURTOlBQQ19UNDE2MCxSQU1CT09UX1BCTCxTUElGTEFTSCxTWVNfVEVYVF9CQVNFPTB4RkZGNDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0NHFkcyAgICAgICAgICAgICAgIFQ0MjQwRU1VICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUNDI0MEVNVTpQUENfVDQyNDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW9yayBTdW4gPHlvcmtzdW5AZnJlZXNjYWxlLmNvbT4KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQ0cWRzICAgICAgICAgICAgICAgVDQyNDBRRFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQ0MjQwUURTOlBQQ19UNDI0MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi1BY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0NHFkcyAgICAgICAgICAgICAgIFQ0MjQwUURTX05BTkQgICAgICAgICAgICAgICAgICAgICAgICBUNDI0MFFEUzpQUENfVDQyNDAsUkFNQk9PVF9QQkwsTkFORCxTWVNfVEVYVF9CQVNFPTB4RkZGNDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgdDRxZHMgICAgICAgICAgICAgICBUNDI0MFFEU19TRENBUkQgICAgICAgICAgICAgICAgICAgICAgVDQyNDBRRFM6UFBDX1Q0MjQwLFJBTUJPT1RfUEJMLFNEQ0FSRCxTWVNfVEVYVF9CQVNFPTB4RkZGNDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQ0cWRzICAgICAgICAgICAgICAgVDQyNDBRRFNfU0VDVVJFX0JPT1QgICAgICAgICAgICAgICAgIFQ0MjQwUURTOlBQQ19UNDI0MCxTRUNVUkVfQk9PVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmVlc2ggQmFuc2FsIDxhbmVlc2guYmFuc2FsQGZyZWVzY2FsZS5jb20+CitBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0NHFkcyAgICAgICAgICAgICAgIFQ0MjQwUURTX05BTkQJICAgICAgICAgICAgICAgIFQ0MjQwUURTOlBQQ19UNDI0MCxSQU1CT09UX1BCTCxTUExfRlNMX1BCTCxOQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KK0FjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQ0cWRzICAgICAgICAgICAgICAgVDQyNDBRRFNfU0RDQVJEICAgICAgICAgICAgICAgICAgICAgIFQ0MjQwUURTOlBQQ19UNDI0MCxSQU1CT09UX1BCTCxTUExfRlNMX1BCTCxTRENBUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZnJlZXNjYWxlICAgICAgIHQ0cWRzICAgICAgICAgICAgICAgVDQyNDBRRFNfU1BJRkxBU0ggICAgICAgICAgICAgICAgICAgIFQ0MjQwUURTOlBQQ19UNDI0MCxSQU1CT09UX1BCTCxTUElGTEFTSCxTWVNfVEVYVF9CQVNFPTB4RkZGNDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGZyZWVzY2FsZSAgICAgICB0NHFkcyAgICAgICAgICAgICAgIFQ0MjQwUURTX1NSSU9fUENJRV9CT09UICAgICAgICAgICAgICBUNDI0MFFEUzpQUENfVDQyNDAsU1JJT19QQ0lFX0JPT1RfU0xBVkUsU1lTX1RFWFRfQkFTRT0weEZGRjQwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQorQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBmcmVlc2NhbGUgICAgICAgcWVtdS1wcGNlNTAwICAgICAgICBxZW11LXBwY2U1MDAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsZXhhbmRlciBHcmFmIDxhZ3JhZkBzdXNlLmRlPgogQWN0aXZlICBwb3dlcnBjICAgICBtcGM4NXh4ICAgICAgICAtICAgICAgICAgICBnZHN5cyAgICAgICAgICAgcDEwMjIgICAgICAgICAgICAgICBjb250cm9sY2VudGVyZF8zNkJJVF9TRENBUkQgICAgICAgICAgY29udHJvbGNlbnRlcmQ6MzZCSVQsU0RDQVJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmsgRWliYWNoIDxlaWJhY2hAZ2RzeXMuZGU+CiBBY3RpdmUgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIC0gICAgICAgICAgIGdkc3lzICAgICAgICAgICBwMTAyMiAgICAgICAgICAgICAgIGNvbnRyb2xjZW50ZXJkXzM2QklUX1NEQ0FSRF9ERVZFTE9QICBjb250cm9sY2VudGVyZDozNkJJVCxTRENBUkQsREVWRUxPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyayBFaWJhY2ggPGVpYmFjaEBnZHN5cy5kZT4KIEFjdGl2ZSAgcG93ZXJwYyAgICAgbXBjODV4eCAgICAgICAgLSAgICAgICAgICAgZ2RzeXMgICAgICAgICAgIHAxMDIyICAgICAgICAgICAgICAgY29udHJvbGNlbnRlcmRfVFJBSUxCTEFaRVIgICAgICAgICAgIGNvbnRyb2xjZW50ZXJkOlRSQUlMQkxBWkVSLFNQSUZMQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJrIEVpYmFjaCA8ZWliYWNoQGdkc3lzLmRlPgpAQCAtMTE5NCw2ICsxMjExLDExIEBACiBBY3RpdmUgIHNwYXJjICAgICAgIGxlb24zICAgICAgICAgIC0gICAgICAgICAgIGdhaXNsZXIgICAgICAgICAtICAgICAgICAgICAgICAgICAgIGdyX3hjM3NfMTUwMCAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQogQWN0aXZlICBzcGFyYyAgICAgICBsZW9uMyAgICAgICAgICAtICAgICAgICAgICBnYWlzbGVyICAgICAgICAgLSAgICAgICAgICAgICAgICAgICBncnNpbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KIEFjdGl2ZSAgeDg2ICAgICAgICAgeDg2ICAgICAgICAgICAgY29yZWJvb3QgICAgY2hyb21lYm9vay14ODYgIGNvcmVib290ICAgICAgICAgICAgY29yZWJvb3QteDg2ICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVib290OlNZU19URVhUX0JBU0U9MHgwMTExMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCisjIFRoZSBmb2xsb3dpbmcgd2VyZSBtb3ZlZCB0byAiT3JwaGFuIiBpbiBBcHJpbCwgMjAxNAorT3JwaGFuICBwb3dlcnBjICAgICA3NHh4Xzd4eCAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgZXZiNjQyNjAgICAgICAgICAgICBaVU1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE55ZSBMaXUgPG55ZXRAenVtYW5ldHdvcmtzLmNvbT4KK09ycGhhbiAgcG93ZXJwYyAgICAgbXBjODI0eCAgICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIG11c2Vua2kgICAgICAgICAgICAgTVVTRU5LSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKaW0gVGhvbXBzb24gPGppbUBtdXNlbmtpLmNvbT4KK09ycGhhbiAgcG93ZXJwYyAgICAgbXBjODI0eCAgICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIHNhbmRwb2ludCAgICAgICAgICAgU2FuZHBvaW50ODI0NSAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKaW0gVGhvbXBzb24gPGppbUBtdXNlbmtpLmNvbT4KK09ycGhhbiAgcG93ZXJwYyAgICAgbXBjODI2MCAgICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgcHBtYzgyNjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFkIEtlbXAgPEJyYWQuS2VtcEBzZXJhbm9hLmNvbT4KICMgVGhlIGZvbGxvd2luZyB3ZXJlIG1vdmVkIHRvICJPcnBoYW4iIGluIE1hcmNoLCAyMDE0CiBPcnBoYW4gIGJsYWNrZmluICAgIGJsYWNrZmluICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgIGNtLWJmNTI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmx1ZXRlY2huaXggVGlueWJvYXJkcyA8Ymx1ZXRlY2huaXhAYmxhY2tmaW4udWNsaW51eC5vcmc+CiBPcnBoYW4gIGJsYWNrZmluICAgIGJsYWNrZmluICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgIGNtLWJmNTMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmx1ZXRlY2huaXggVGlueWJvYXJkcyA8Ymx1ZXRlY2huaXhAYmxhY2tmaW4udWNsaW51eC5vcmc+CkBAIC0xMjQzLDE4ICsxMjY1LDMgQEAKICMgVGhlIGZvbGxvd2luZyB3ZXJlIG1vdmUgdG8gIk9ycGhhbiIgaW4gU2VwdGVtYmVyLCAyMDEzCiBPcnBoYW4gIGFybSAgICAgICAgIGFybTExMzYgICAgICAgIG14MzEgICAgICAgIC0gICAgICAgICAgICAgICBpbXgzMV9waHljb3JlICAgICAgIGlteDMxX3BoeWNvcmVfZWV0ICAgICAgICAgICAgICAgICAgICBpbXgzMV9waHljb3JlOklNWDMxX1BIWUNPUkVfRUVUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc2lnbmVkKSBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KIE9ycGhhbiAgYXJtICAgICAgICAgYXJtMTEzNiAgICAgICAgbXgzMSAgICAgICAgZnJlZXNjYWxlICAgICAgIC0gICAgICAgICAgICAgICAgICAgbXgzMWFkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVzaWduZWQpIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgotT3JwaGFuICBhcm0gICAgICAgICBweGEgICAgICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICBsdWJib2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWFkIGFkZHJlc3MpIEt5bGUgSGFycmlzIDxraGFycmlzQG5leHVzLXRlY2gubmV0PgotT3JwaGFuICBwb3dlcnBjICAgICA3NHh4Xzd4eCAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgZXZiNjQyNjAgICAgICAgICAgICBFVkI2NDI2MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLU9ycGhhbiAgcG93ZXJwYyAgICAgbXBjODI0eCAgICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIG1vdXNzZSAgICAgICAgICAgICAgTU9VU1NFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi1PcnBoYW4gIHBvd2VycGMgICAgIG1wYzgyNjAgICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgIHJzZHByb3RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotT3JwaGFuICBwb3dlcnBjICAgICBtcGM4MjYwICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgcnB4c3VwZXIgICAgICAgICAgICBSUFhzdXBlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLU9ycGhhbiAgcG93ZXJwYyAgICAgbXBjOHh4ICAgICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgUlBYQ2xhc3NpYyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi1PcnBoYW4gIHBvd2VycGMgICAgIG1wYzh4eCAgICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgIFJQWGxpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotT3JwaGFuICBwb3dlcnBjICAgICBtcGM4eHggICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgZmFkcyAgICAgICAgICAgICAgICBBRFM4NjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLU9ycGhhbiAgcG93ZXJwYyAgICAgbXBjOHh4ICAgICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIGZhZHMgICAgICAgICAgICAgICAgRkFEUzgyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi1PcnBoYW4gIHBvd2VycGMgICAgIG1wYzh4eCAgICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICBmYWRzICAgICAgICAgICAgICAgIEZBRFM4NTBTQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotT3JwaGFuICBwb3dlcnBjICAgICBtcGM4eHggICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgZmFkcyAgICAgICAgICAgICAgICBGQURTODYwVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLU9ycGhhbiAgcG93ZXJwYyAgICAgbXBjOHh4ICAgICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIGdlbmlldHYgICAgICAgICAgICAgR0VOSUVUViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi1PcnBoYW4gIHBvd2VycGMgICAgIG1wYzh4eCAgICAgICAgIC0gICAgICAgICAgIC0gICAgICAgICAgICAgICBtYng4eHggICAgICAgICAgICAgIE1CWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotT3JwaGFuICBwb3dlcnBjICAgICBtcGM4eHggICAgICAgICAtICAgICAgICAgICAtICAgICAgICAgICAgICAgbWJ4OHh4ICAgICAgICAgICAgICBNQlg4NjBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLU9ycGhhbiAgcG93ZXJwYyAgICAgbXBjOHh4ICAgICAgICAgLSAgICAgICAgICAgLSAgICAgICAgICAgICAgIG54ODIzICAgICAgICAgICAgICAgTlg4MjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCmRpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUgYi9jb21tb24vTWFrZWZpbGUKaW5kZXggY2VjZDgxYS4uN2M4NTNhZSAxMDA2NDQKLS0tIGEvY29tbW9uL01ha2VmaWxlCisrKyBiL2NvbW1vbi9NYWtlZmlsZQpAQCAtNDgsNiArNDgsNyBAQAogb2JqLSQoQ09ORklHX0VOVl9JU19OT1dIRVJFKSArPSBlbnZfbm93aGVyZS5vCiAKICMgY29tbWFuZAorb2JqLSQoQ09ORklHX0NNRF9BRVMpICs9IGNtZF9hZXMubwogb2JqLSQoQ09ORklHX0NNRF9BTUJBUFApICs9IGNtZF9hbWJhcHAubwogb2JqLSQoQ09ORklHX1NPVVJDRSkgKz0gY21kX3NvdXJjZS5vCiBvYmotJChDT05GSUdfQ01EX1NPVVJDRSkgKz0gY21kX3NvdXJjZS5vCmRpZmYgLS1naXQgYS9jb21tb24vYm9hcmRfZi5jIGIvY29tbW9uL2JvYXJkX2YuYwppbmRleCBmMjg1YmFkLi5jYmRmMDZmIDEwMDY0NAotLS0gYS9jb21tb24vYm9hcmRfZi5jCisrKyBiL2NvbW1vbi9ib2FyZF9mLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BQQworI2lmIGRlZmluZWQoQ09ORklHX01JUFMpIHx8IGRlZmluZWQoQ09ORklHX1BQQykKIHN0YXRpYyBpbnQgaW5pdF9mdW5jX3JhbSh2b2lkKQogewogI2lmZGVmCUNPTkZJR19CT0FSRF9UWVBFUwpAQCAtODE5LDcgKzgxOSw3IEBACiAJLyogVE9ETzogY2FuIHdlIHJlbmFtZSB0aGlzIHRvIHRpbWVyX2luaXQoKT8gKi8KIAlpbml0X3RpbWViYXNlLAogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSTQorI2lmIGRlZmluZWQoQ09ORklHX0FSTSkgfHwgZGVmaW5lZChDT05GSUdfTUlQUykKIAl0aW1lcl9pbml0LAkJLyogaW5pdGlhbGl6ZSB0aW1lciAqLwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NZU19BTExPQ19EUFJBTQpAQCAtODg5LDcgKzg4OSw3IEBACiAjaWZkZWYgQ09ORklHX0FSTQogCWRyYW1faW5pdCwJCS8qIGNvbmZpZ3VyZSBhdmFpbGFibGUgUkFNIGJhbmtzICovCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfUFBDCisjaWYgZGVmaW5lZChDT05GSUdfTUlQUykgfHwgZGVmaW5lZChDT05GSUdfUFBDKQogCWluaXRfZnVuY19yYW0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUE9TVApkaWZmIC0tZ2l0IGEvY29tbW9uL2JvYXJkX3IuYyBiL2NvbW1vbi9ib2FyZF9yLmMKaW5kZXggODYyOWE2NS4uZDFmMGFhOSAxMDA2NDQKLS0tIGEvY29tbW9uL2JvYXJkX3IuYworKysgYi9jb21tb24vYm9hcmRfci5jCkBAIC01MjgsNiArNTI4LDcgQEAKICMgZWxzZQogCWNoZWNrYm9hcmQoKTsKICMgZW5kaWYKKwlyZXR1cm4gMDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2Flcy5jIGIvY29tbW9uL2NtZF9hZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmRhM2VmCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL2NtZF9hZXMuYwpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgorICoKKyAqIENvbW1hbmQgZm9yIGVuL2RlLWNyeXB0aW5nIGJsb2NrIG9mIG1lbW9yeSB3aXRoIEFFUy0xMjgtQ0JDIGNpcGhlci4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPGVudmlyb25tZW50Lmg+CisjaW5jbHVkZSA8YWVzLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisvKioKKyAqIGRvX2FlcygpIC0gSGFuZGxlIHRoZSAiYWVzIiBjb21tYW5kLWxpbmUgY29tbWFuZAorICogQGNtZHRwOglDb21tYW5kIGRhdGEgc3RydWN0IHBvaW50ZXIKKyAqIEBmbGFnOglDb21tYW5kIGZsYWcKKyAqIEBhcmdjOglDb21tYW5kLWxpbmUgYXJndW1lbnQgY291bnQKKyAqIEBhcmd2OglBcnJheSBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIENNRF9SRVRfVVNBR0UgaW4gY2FzZSBvZiBtaXN1c2UgYW5kIG5lZ2F0aXZlCisgKiBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCBkb19hZXMoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10pCit7CisJdWludDMyX3Qga2V5X2FkZHIsIHNyY19hZGRyLCBkc3RfYWRkciwgbGVuOworCXVpbnQ4X3QgKmtleV9wdHIsICpzcmNfcHRyLCAqZHN0X3B0cjsKKwl1aW50OF90IGtleV9leHBbQUVTX0VYUEFORF9LRVlfTEVOR1RIXTsKKwl1aW50MzJfdCBhZXNfYmxvY2tzOworCWludCBlbmM7CisKKwlpZiAoYXJnYyAhPSA2KQorCQlyZXR1cm4gQ01EX1JFVF9VU0FHRTsKKworCWlmICghc3RybmNtcChhcmd2WzFdLCAiZW5jIiwgMykpCisJCWVuYyA9IDE7CisJZWxzZSBpZiAoIXN0cm5jbXAoYXJndlsxXSwgImRlYyIsIDMpKQorCQllbmMgPSAwOworCWVsc2UKKwkJcmV0dXJuIENNRF9SRVRfVVNBR0U7CisKKwlrZXlfYWRkciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDE2KTsKKwlzcmNfYWRkciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbM10sIE5VTEwsIDE2KTsKKwlkc3RfYWRkciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbNF0sIE5VTEwsIDE2KTsKKwlsZW4gPSBzaW1wbGVfc3RydG91bChhcmd2WzVdLCBOVUxMLCAxNik7CisKKwlrZXlfcHRyID0gKHVpbnQ4X3QgKilrZXlfYWRkcjsKKwlzcmNfcHRyID0gKHVpbnQ4X3QgKilzcmNfYWRkcjsKKwlkc3RfcHRyID0gKHVpbnQ4X3QgKilkc3RfYWRkcjsKKworCS8qIEZpcnN0IHdlIGV4cGFuZCB0aGUga2V5LiAqLworCWFlc19leHBhbmRfa2V5KGtleV9wdHIsIGtleV9leHApOworCisJLyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgQUVTIGJsb2NrcyB0byBlbmNyeXB0LiAqLworCWFlc19ibG9ja3MgPSBESVZfUk9VTkRfVVAobGVuLCBBRVNfS0VZX0xFTkdUSCk7CisKKwlpZiAoZW5jKQorCQlhZXNfY2JjX2VuY3J5cHRfYmxvY2tzKGtleV9leHAsIHNyY19wdHIsIGRzdF9wdHIsIGFlc19ibG9ja3MpOworCWVsc2UKKwkJYWVzX2NiY19kZWNyeXB0X2Jsb2NrcyhrZXlfZXhwLCBzcmNfcHRyLCBkc3RfcHRyLCBhZXNfYmxvY2tzKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIENPTkZJR19TWVNfTE9OR0hFTFAKK3N0YXRpYyBjaGFyIGFlc19oZWxwX3RleHRbXSA9CisJImVuYyBrZXkgc3JjIGRzdCBsZW4gLSBFbmNyeXB0IGJsb2NrIG9mIGRhdGEgJGxlbiBieXRlcyBsb25nXG4iCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgYWRkcmVzcyAkc3JjIHVzaW5nIGEga2V5IGF0IGFkZHJlc3NcbiIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAka2V5IGFuZCBzdG9yZSB0aGUgcmVzdWx0IGF0IGFkZHJlc3NcbiIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAkZHN0LiBUaGUgJGxlbiBzaXplIG11c3QgYmUgbXVsdGlwbGUgb2ZcbiIKKwkiICAgICAgICAgICAgICAgICAgICAgICAgICAxNiBieXRlcyBhbmQgJGtleSBtdXN0IGJlIDE2IGJ5dGVzIGxvbmcuXG4iCisJImFlcyBkZWMga2V5IHNyYyBkc3QgbGVuIC0gRGVjcnlwdCBibG9jayBvZiBkYXRhICRsZW4gYnl0ZXMgbG9uZ1xuIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgIGF0IGFkZHJlc3MgJHNyYyB1c2luZyBhIGtleSBhdCBhZGRyZXNzXG4iCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgJGtleSBhbmQgc3RvcmUgdGhlIHJlc3VsdCBhdCBhZGRyZXNzXG4iCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgJGRzdC4gVGhlICRsZW4gc2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mXG4iCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgYnl0ZXMgYW5kICRrZXkgbXVzdCBiZSAxNiBieXRlcyBsb25nLiI7CisjZW5kaWYKKworVV9CT09UX0NNRCgKKwlhZXMsIDYsIDEsIGRvX2FlcywKKwkiQUVTIDEyOCBDQkMgZW5jcnlwdGlvbiIsCisJYWVzX2hlbHBfdGV4dAorKTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfYm9vdG0uYyBiL2NvbW1vbi9jbWRfYm9vdG0uYwppbmRleCA5NzUxZWRjLi5jMjQzYTViIDEwMDY0NAotLS0gYS9jb21tb24vY21kX2Jvb3RtLmMKKysrIGIvY29tbW9uL2NtZF9ib290bS5jCkBAIC00NTMsNyArNDUzLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfTFpNQSAqLwogI2lmZGVmIENPTkZJR19MWk8KIAljYXNlIElIX0NPTVBfTFpPOiB7Ci0JCXNpemVfdCBzaXplOworCQlzaXplX3Qgc2l6ZSA9IHVuY19sZW47CiAKIAkJcHJpbnRmKCIgICBVbmNvbXByZXNzaW5nICVzIC4uLiAiLCB0eXBlX25hbWUpOwogCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2RmdS5jIGIvY29tbW9uL2NtZF9kZnUuYwppbmRleCA1NTQ3Njc4Li5hMDM1MzhkIDEwMDY0NAotLS0gYS9jb21tb24vY21kX2RmdS5jCisrKyBiL2NvbW1vbi9jbWRfZGZ1LmMKQEAgLTIyLDcgKzIyLDYgQEAKIAljaGFyICppbnRlcmZhY2UgPSBhcmd2WzJdOwogCWNoYXIgKmRldnN0cmluZyA9IGFyZ3ZbM107CiAKLQljaGFyICpzID0gImRmdSI7CiAJaW50IHJldCwgaSA9IDA7CiAKIAlyZXQgPSBkZnVfaW5pdF9lbnZfZW50aXRpZXMoaW50ZXJmYWNlLCBzaW1wbGVfc3RydG91bChkZXZzdHJpbmcsCkBAIC0zOCw3ICszNyw3IEBACiAJaW50IGNvbnRyb2xsZXJfaW5kZXggPSBzaW1wbGVfc3RydG91bCh1c2JfY29udHJvbGxlciwgTlVMTCwgMCk7CiAJYm9hcmRfdXNiX2luaXQoY29udHJvbGxlcl9pbmRleCwgVVNCX0lOSVRfREVWSUNFKTsKIAotCWdfZG5sX3JlZ2lzdGVyKHMpOworCWdfZG5sX3JlZ2lzdGVyKCJ1c2JfZG5sX2RmdSIpOwogCXdoaWxlICgxKSB7CiAJCWlmIChkZnVfcmVzZXQoKSkKIAkJCS8qCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2Zkb3MuYyBiL2NvbW1vbi9jbWRfZmRvcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTMwMzI1Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9jbWRfZmRvcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIFN0w6R1YmxpIEZhdmVyZ2VzIC0gPHd3dy5zdGF1YmxpLmNvbT4KLSAqIFBpZXJyZSBBVUJFUlQgIHAuYXViZXJ0QHN0YXVibGkuY29tCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotLyoKLSAqIERvcyBmbG9wcHkgc3VwcG9ydAotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxjb25maWcuaD4KLSNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8ZmRjLmg+Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGRvX2Zkb3Nib290IC0tCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWludCBkb19mZG9zYm9vdChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCi17Ci0gICAgY2hhciAqbmFtZTsKLSAgICBjaGFyICplcDsKLSAgICBpbnQgc2l6ZTsKLSAgICBpbnQgZHJpdmUgPSBDT05GSUdfU1lTX0ZEQ19EUklWRV9OVU1CRVI7Ci0KLSAgICAvKiBwcmUtc2V0IGxvYWRfYWRkciAqLwotICAgIGlmICgoZXAgPSBnZXRlbnYoImxvYWRhZGRyIikpICE9IE5VTEwpIHsKLQlsb2FkX2FkZHIgPSBzaW1wbGVfc3RydG91bChlcCwgTlVMTCwgMTYpOwotICAgIH0KLQotICAgIC8qIHByZS1zZXQgQm9vdCBmaWxlIG5hbWUgKi8KLSAgICBpZiAoKG5hbWUgPSBnZXRlbnYoImJvb3RmaWxlIikpID09IE5VTEwpIHsKLQluYW1lID0gInVJbWFnZSI7Ci0gICAgfQotCi0gICAgc3dpdGNoIChhcmdjKSB7Ci0gICAgY2FzZSAxOgotCWJyZWFrOwotICAgIGNhc2UgMjoKLQkvKiBvbmx5IG9uZSBhcmcgLSBhY2NlcHQgdHdvIGZvcm1zOgotCSAqIGp1c3QgbG9hZCBhZGRyZXNzLCBvciBqdXN0IGJvb3QgZmlsZSBuYW1lLgotCSAqIFRoZSBsYXR0ZXIgZm9ybSBtdXN0IGJlIHdyaXR0ZW4gImZpbGVuYW1lIiBoZXJlLgotCSAqLwotCWlmIChhcmd2WzFdWzBdID09ICciJykgewkvKiBqdXN0IGJvb3QgZmlsZW5hbWUgKi8KLQkgICAgbmFtZSA9IGFyZ3YgWzFdOwotCX0gZWxzZSB7CQkJLyogbG9hZCBhZGRyZXNzCSovCi0JICAgIGxvYWRfYWRkciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsKLQl9Ci0JYnJlYWs7Ci0gICAgY2FzZSAzOgotCWxvYWRfYWRkciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsKLQluYW1lID0gYXJndiBbMl07Ci0JYnJlYWs7Ci0gICAgZGVmYXVsdDoKLQlyZXR1cm4gQ01EX1JFVF9VU0FHRTsKLSAgICB9Ci0KLSAgICAvKiBJbml0IHBoeXNpY2FsIGxheWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBpZiAoIWZkY19mZG9zX2luaXQgKGRyaXZlKSkgewotCXJldHVybiAoLTEpOwotICAgIH0KLQotICAgIC8qIE9wZW4gZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGlmIChkb3Nfb3BlbiAobmFtZSkgPCAwKSB7Ci0JcHJpbnRmICgiVW5hYmxlIHRvIG9wZW4gJXNcbiIsIG5hbWUpOwotCXJldHVybiAxOwotICAgIH0KLSAgICBpZiAoKHNpemUgPSBkb3NfcmVhZCAobG9hZF9hZGRyKSkgPCAwKSB7Ci0JcHJpbnRmICgiYm9vdCBlcnJvclxuIik7Ci0JcmV0dXJuIDE7Ci0gICAgfQotICAgIGZsdXNoX2NhY2hlIChsb2FkX2FkZHIsIHNpemUpOwotCi0gICAgc2V0ZW52X2hleCgiZmlsZXNpemUiLCBzaXplKTsKLQotICAgIHByaW50ZigiRmxvcHB5IERPUyBsb2FkIGNvbXBsZXRlOiAlZCBieXRlcyBsb2FkZWQgdG8gMHglbHhcbiIsCi0JICAgc2l6ZSwgbG9hZF9hZGRyKTsKLQotICAgIHJldHVybiBib290bV9tYXliZV9hdXRvc3RhcnQoY21kdHAsIGFyZ3ZbMF0pOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBkb19mZG9zbHMgLS0KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotaW50IGRvX2Zkb3NscyhjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCi17Ci0gICAgY2hhciAqcGF0aCA9ICIiOwotICAgIGludCBkcml2ZSA9IENPTkZJR19TWVNfRkRDX0RSSVZFX05VTUJFUjsKLQotICAgIHN3aXRjaCAoYXJnYykgewotICAgIGNhc2UgMToKLQlicmVhazsKLSAgICBjYXNlIDI6Ci0JcGF0aCA9IGFyZ3YgWzFdOwotCWJyZWFrOwotICAgIH0KLQotICAgIC8qIEluaXQgcGh5c2ljYWwgbGF5ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGlmICghZmRjX2Zkb3NfaW5pdCAoZHJpdmUpKSB7Ci0JcmV0dXJuICgtMSk7Ci0gICAgfQotICAgIC8qIE9wZW4gZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGlmIChkb3Nfb3BlbiAocGF0aCkgPCAwKSB7Ci0JcHJpbnRmICgiVW5hYmxlIHRvIG9wZW4gJXNcbiIsIHBhdGgpOwotCXJldHVybiAxOwotICAgIH0KLSAgICByZXR1cm4gKGRvc19kaXIgKCkpOwotfQotCi1VX0JPT1RfQ01EKAotCWZkb3Nib290LAkzLAkwLAlkb19mZG9zYm9vdCwKLQkiYm9vdCBmcm9tIGEgZG9zIGZsb3BweSBmaWxlIiwKLQkiW2xvYWRBZGRyXSBbZmlsZW5hbWVdIgotKTsKLQotVV9CT09UX0NNRCgKLQlmZG9zbHMsCTIsCTAsCWRvX2Zkb3NscywKLQkibGlzdCBmaWxlcyBpbiBhIGRpcmVjdG9yeSIsCi0JIltkaXJlY3RvcnldIgotKTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfZmR0LmMgYi9jb21tb24vY21kX2ZkdC5jCmluZGV4IDNhOWVkZDYuLmE2NzQ0ZWQgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfZmR0LmMKKysrIGIvY29tbW9uL2NtZF9mZHQuYwpAQCAtNTcwLDcgKzU3MCw3IEBACiAJCWZ0X2JvYXJkX3NldHVwKHdvcmtpbmdfZmR0LCBnZC0+YmQpOwogI2VuZGlmCiAJLyogQ3JlYXRlIGEgY2hvc2VuIG5vZGUgKi8KLQllbHNlIGlmIChhcmd2WzFdWzBdID09ICdjJykgeworCWVsc2UgaWYgKHN0cm5jbXAoYXJndlsxXSwgImNobyIsIDMpID09IDApIHsKIAkJdW5zaWduZWQgbG9uZyBpbml0cmRfc3RhcnQgPSAwLCBpbml0cmRfZW5kID0gMDsKIAogCQlpZiAoKGFyZ2MgIT0gMikgJiYgKGFyZ2MgIT0gNCkpCkBAIC01ODMsNiArNTgzLDQxIEBACiAKIAkJZmR0X2Nob3Nlbih3b3JraW5nX2ZkdCwgMSk7CiAJCWZkdF9pbml0cmQod29ya2luZ19mZHQsIGluaXRyZF9zdGFydCwgaW5pdHJkX2VuZCwgMSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19GSVRfU0lHTkFUVVJFKQorCX0gZWxzZSBpZiAoc3RybmNtcChhcmd2WzFdLCAiY2hlIiwgMykgPT0gMCkgeworCQlpbnQgY2ZnX25vZmZzZXQ7CisJCWludCByZXQ7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwkJc3RydWN0IGZkdF9oZWFkZXIgKmJsb2I7CisKKwkJaWYgKCF3b3JraW5nX2ZkdCkKKwkJCXJldHVybiBDTURfUkVUX0ZBSUxVUkU7CisKKwkJaWYgKGFyZ2MgPiAyKSB7CisJCQlhZGRyID0gc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTYpOworCQkJYmxvYiA9IG1hcF9zeXNtZW0oYWRkciwgMCk7CisJCX0gZWxzZSB7CisJCQlibG9iID0gKHN0cnVjdCBmZHRfaGVhZGVyICopZ2QtPmZkdF9ibG9iOworCQl9CisJCWlmICghZmR0X3ZhbGlkKCZibG9iKSkKKwkJCXJldHVybiAxOworCisJCWdkLT5mZHRfYmxvYiA9IGJsb2I7CisJCWNmZ19ub2Zmc2V0ID0gZml0X2NvbmZfZ2V0X25vZGUod29ya2luZ19mZHQsIE5VTEwpOworCQlpZiAoIWNmZ19ub2Zmc2V0KSB7CisJCQlwcmludGYoIkNvdWxkIG5vdCBmaW5kIGNvbmZpZ3VyYXRpb24gbm9kZTogJXNcbiIsCisJCQkgICAgICAgZmR0X3N0cmVycm9yKGNmZ19ub2Zmc2V0KSk7CisJCQlyZXR1cm4gQ01EX1JFVF9GQUlMVVJFOworCQl9CisKKwkJcmV0ID0gZml0X2NvbmZpZ192ZXJpZnkod29ya2luZ19mZHQsIGNmZ19ub2Zmc2V0KTsKKwkJaWYgKHJldCA9PSAxKQorCQkJcmV0dXJuIENNRF9SRVRfU1VDQ0VTUzsKKwkJZWxzZQorCQkJcmV0dXJuIENNRF9SRVRfRkFJTFVSRTsKKyNlbmRpZgorCiAJfQogCS8qIHJlc2l6ZSB0aGUgZmR0ICovCiAJZWxzZSBpZiAoc3RybmNtcChhcmd2WzFdLCAicmUiLCAyKSA9PSAwKSB7CkBAIC05OTIsNiArMTAyNywxMSBAQAogCSJmZHQgcnN2bWVtIGRlbGV0ZSA8aW5kZXg+ICAgICAgICAgICAtIERlbGV0ZSBhIG1lbSByZXNlcnZlc1xuIgogCSJmZHQgY2hvc2VuIFs8c3RhcnQ+IDxlbmQ+XSAgICAgICAgICAtIEFkZC91cGRhdGUgdGhlIC9jaG9zZW4gYnJhbmNoIGluIHRoZSB0cmVlXG4iCiAJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RhcnQ+LzxlbmQ+IC0gaW5pdHJkIHN0YXJ0L2VuZCBhZGRyXG4iCisjaWYgZGVmaW5lZChDT05GSUdfRklUX1NJR05BVFVSRSkKKwkiZmR0IGNoZWNrc2lnbiBbPGFkZHI+XSAgICAgICAgICAgICAgLSBjaGVjayBGSVQgc2lnbmF0dXJlXG4iCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RhcnQ+IC0gYWRkciBvZiBrZXkgYmxvYlxuIgorCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgZ2QtPmZkdF9ibG9iXG4iCisjZW5kaWYKIAkiTk9URTogRGVyZWZlcmVuY2UgYWxpYXNlcyBieSBvbWl0aW5nIHRoZSBsZWFkaW5nICcvJywgIgogCQkiZS5nLiBmZHQgcHJpbnQgZXRoZXJuZXQwLiI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfZ3Bpby5jIGIvY29tbW9uL2NtZF9ncGlvLmMKaW5kZXggNzc4YWE1Zi4uYWZmMDQ0NSAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9ncGlvLmMKKysrIGIvY29tbW9uL2NtZF9ncGlvLmMKQEAgLTExLDkgKzExLDEwIEBACiAjaW5jbHVkZSA8ZG0uaD4KICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogCi0jaWZuZGVmIG5hbWVfdG9fZ3BpbwotI2RlZmluZSBuYW1lX3RvX2dwaW8obmFtZSkgc2ltcGxlX3N0cnRvdWwobmFtZSwgTlVMTCwgMTApCi0jZW5kaWYKK2ludCBfX3dlYWsgbmFtZV90b19ncGlvKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIHNpbXBsZV9zdHJ0b3VsKG5hbWUsIE5VTEwsIDEwKTsKK30KIAogZW51bSBncGlvX2NtZCB7CiAJR1BJT19JTlBVVCwKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfdGhvcmRvd24uYyBiL2NvbW1vbi9jbWRfdGhvcmRvd24uYwppbmRleCBjNGIzNTExLi4yZGQ3NTA5IDEwMDY0NAotLS0gYS9jb21tb24vY21kX3Rob3Jkb3duLmMKKysrIGIvY29tbW9uL2NtZF90aG9yZG93bi5jCkBAIC0yMiw3ICsyMiw2IEBACiAJY2hhciAqaW50ZXJmYWNlID0gYXJndlsyXTsKIAljaGFyICpkZXZzdHJpbmcgPSBhcmd2WzNdOwogCi0JY29uc3QgY2hhciAqcyA9ICJ0aG9yIjsKIAlpbnQgcmV0OwogCiAJcHV0cygiVElaRU4gXCJUSE9SXCIgRG93bmxvYWRlclxuIik7CkBAIC00MCw3ICszOSw3IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlnX2RubF9yZWdpc3RlcihzKTsKKwlnX2RubF9yZWdpc3RlcigidXNiX2RubF90aG9yIik7CiAKIAlyZXQgPSB0aG9yX2luaXQoKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9jb21tb24vY21kX3VzYl9tYXNzX3N0b3JhZ2UuYyBiL2NvbW1vbi9jbWRfdXNiX21hc3Nfc3RvcmFnZS5jCmluZGV4IDVmNTU3ZDUuLmQ4ZDllZmQgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfdXNiX21hc3Nfc3RvcmFnZS5jCisrKyBiL2NvbW1vbi9jbWRfdXNiX21hc3Nfc3RvcmFnZS5jCkBAIC00MCwxNSArNDAsMTkgQEAKIAkJcmV0dXJuIENNRF9SRVRfRkFJTFVSRTsKIAl9CiAKLQlnX2RubF9yZWdpc3RlcigidW1zIik7CisJZ19kbmxfcmVnaXN0ZXIoInVzYl9kbmxfdW1zIik7CiAKIAkvKiBUaW1lb3V0IHVuaXQ6IHNlY29uZHMgKi8KIAlpbnQgY2FibGVfcmVhZHlfdGltZW91dCA9IFVNU19DQUJMRV9SRUFEWV9USU1FT1VUOwogCi0JaWYgKCF1c2JfY2FibGVfY29ubmVjdGVkKCkpIHsKKwlpZiAoIWdfZG5sX2JvYXJkX3VzYl9jYWJsZV9jb25uZWN0ZWQoKSkgeworCQkvKgorCQkgKiBXb24ndCBleGVjdXRlIGlmIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgY2FibGUgaXMKKwkJICogY29ubmVjdGVkLgorCQkgKi8KIAkJcHV0cygiUGxlYXNlIGNvbm5lY3QgVVNCIGNhYmxlLlxuIik7CiAKLQkJd2hpbGUgKCF1c2JfY2FibGVfY29ubmVjdGVkKCkpIHsKKwkJd2hpbGUgKCFnX2RubF9ib2FyZF91c2JfY2FibGVfY29ubmVjdGVkKCkpIHsKIAkJCWlmIChjdHJsYygpKSB7CiAJCQkJcHV0cygiXHJDVFJMK0MgLSBPcGVyYXRpb24gYWJvcnRlZC5cbiIpOwogCQkJCWdvdG8gZXhpdDsKZGlmZiAtLWdpdCBhL2NvbW1vbi9kZHJfc3BkLmMgYi9jb21tb24vZGRyX3NwZC5jCmluZGV4IDdhMzg4YmIuLjQzOGU3MWEgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9kZHJfc3BkLmMKKysrIGIvY29tbW9uL2Rkcl9zcGQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMDgtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xMTYsMyArMTE2LDQ2IEBACiAJCXJldHVybiAxOwogCX0KIH0KKwordW5zaWduZWQgaW50IGRkcjRfc3BkX2NoZWNrKGNvbnN0IHN0cnVjdCBkZHI0X3NwZF9lZXByb21fcyAqc3BkKQoreworCWNoYXIgKnAgPSAoY2hhciAqKXNwZDsKKwlpbnQgY3N1bTE2OworCWludCBsZW47CisJY2hhciBjcmNfbHNiOwkvKiBieXRlIDEyNiAqLworCWNoYXIgY3JjX21zYjsJLyogYnl0ZSAxMjcgKi8KKworCWxlbiA9IDEyNjsKKwljc3VtMTYgPSBjcmMxNihwLCBsZW4pOworCisJY3JjX2xzYiA9IChjaGFyKSAoY3N1bTE2ICYgMHhmZik7CisJY3JjX21zYiA9IChjaGFyKSAoY3N1bTE2ID4+IDgpOworCisJaWYgKHNwZC0+Y3JjWzBdICE9IGNyY19sc2IgfHwgc3BkLT5jcmNbMV0gIT0gY3JjX21zYikgeworCQlwcmludGYoIlNQRCBjaGVja3N1bSB1bmV4cGVjdGVkLlxuIgorCQkJIkNoZWNrc3VtIGxzYiBpbiBTUEQgPSAlMDJYLCBjb21wdXRlZCBTUEQgPSAlMDJYXG4iCisJCQkiQ2hlY2tzdW0gbXNiIGluIFNQRCA9ICUwMlgsIGNvbXB1dGVkIFNQRCA9ICUwMlhcbiIsCisJCQlzcGQtPmNyY1swXSwgY3JjX2xzYiwgc3BkLT5jcmNbMV0sIGNyY19tc2IpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwID0gKGNoYXIgKikoKHVsb25nKXNwZCArIDEyOCk7CisJbGVuID0gMTI2OworCWNzdW0xNiA9IGNyYzE2KHAsIGxlbik7CisKKwljcmNfbHNiID0gKGNoYXIpIChjc3VtMTYgJiAweGZmKTsKKwljcmNfbXNiID0gKGNoYXIpIChjc3VtMTYgPj4gOCk7CisKKwlpZiAoc3BkLT5tb2Rfc2VjdGlvbi51Y1sxMjZdICE9IGNyY19sc2IgfHwKKwkgICAgc3BkLT5tb2Rfc2VjdGlvbi51Y1sxMjddICE9IGNyY19tc2IpIHsKKwkJcHJpbnRmKCJTUEQgY2hlY2tzdW0gdW5leHBlY3RlZC5cbiIKKwkJCSJDaGVja3N1bSBsc2IgaW4gU1BEID0gJTAyWCwgY29tcHV0ZWQgU1BEID0gJTAyWFxuIgorCQkJIkNoZWNrc3VtIG1zYiBpbiBTUEQgPSAlMDJYLCBjb21wdXRlZCBTUEQgPSAlMDJYXG4iLAorCQkJc3BkLT5tb2Rfc2VjdGlvbi51Y1sxMjZdLAorCQkJY3JjX2xzYiwgc3BkLT5tb2Rfc2VjdGlvbi51Y1sxMjddLAorCQkJY3JjX21zYik7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9jb21tb24uYyBiL2NvbW1vbi9lbnZfY29tbW9uLmMKaW5kZXggYzBiZmMyZi4uY2Q3YjRjZCAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9jb21tb24uYworKysgYi9jb21tb24vZW52X2NvbW1vbi5jCkBAIC0xNDAsNiArMTQwLDUyIEBACiAJCQkJSF9OT0NMRUFSIHwgSF9JTlRFUkFDVElWRSwgbnZhcnMsIHZhcnMpOwogfQogCisjaWZkZWYgQ09ORklHX0VOVl9BRVMKKyNpbmNsdWRlIDxhZXMuaD4KKy8qKgorICogZW52X2Flc19jYmNfZ2V0X2tleSgpIC0gR2V0IEFFUy0xMjgtQ0JDIGtleSBmb3IgdGhlIGVudmlyb25tZW50CisgKgorICogVGhpcyBmdW5jdGlvbiBzaGFsbCByZXR1cm4gMTYtYnl0ZSBhcnJheSBjb250YWluaW5nIEFFUy0xMjgga2V5IHVzZWQKKyAqIHRvIGVuY3J5cHQgYW5kIGRlY3J5cHQgdGhlIGVudmlyb25tZW50LiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgb3ZlcnJpZGVuCisgKiBieSB0aGUgaW1wbGVtZW50ZXIgYXMgb3RoZXJ3aXNlIHRoZSBlbnZpcm9ubWVudCBlbmNyeXB0aW9uIHdpbGwgbm90CisgKiB3b3JrLgorICovCitfX3dlYWsgdWludDhfdCAqZW52X2Flc19jYmNfZ2V0X2tleSh2b2lkKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGVudl9hZXNfY2JjX2NyeXB0KGVudl90ICplbnYsIGNvbnN0IGludCBlbmMpCit7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IGVudi0+ZGF0YTsKKwl1aW50OF90ICprZXk7CisJdWludDhfdCBrZXlfZXhwW0FFU19FWFBBTkRfS0VZX0xFTkdUSF07CisJdWludDMyX3QgYWVzX2Jsb2NrczsKKworCWtleSA9IGVudl9hZXNfY2JjX2dldF9rZXkoKTsKKwlpZiAoIWtleSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBGaXJzdCB3ZSBleHBhbmQgdGhlIGtleS4gKi8KKwlhZXNfZXhwYW5kX2tleShrZXksIGtleV9leHApOworCisJLyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgQUVTIGJsb2NrcyB0byBlbmNyeXB0LiAqLworCWFlc19ibG9ja3MgPSBFTlZfU0laRSAvIEFFU19LRVlfTEVOR1RIOworCisJaWYgKGVuYykKKwkJYWVzX2NiY19lbmNyeXB0X2Jsb2NrcyhrZXlfZXhwLCBkYXRhLCBkYXRhLCBhZXNfYmxvY2tzKTsKKwllbHNlCisJCWFlc19jYmNfZGVjcnlwdF9ibG9ja3Moa2V5X2V4cCwgZGF0YSwgZGF0YSwgYWVzX2Jsb2Nrcyk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBlbnZfYWVzX2NiY19jcnlwdChlbnZfdCAqZW52LCBjb25zdCBpbnQgZW5jKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKIC8qCiAgKiBDaGVjayBpZiBDUkMgaXMgdmFsaWQgYW5kIChpZiB5ZXMpIGltcG9ydCB0aGUgZW52aXJvbm1lbnQuCiAgKiBOb3RlIHRoYXQgImJ1ZiIgbWF5IG9yIG1heSBub3QgYmUgYWxpZ25lZC4KQEAgLTE0Nyw2ICsxOTMsNyBAQAogaW50IGVudl9pbXBvcnQoY29uc3QgY2hhciAqYnVmLCBpbnQgY2hlY2spCiB7CiAJZW52X3QgKmVwID0gKGVudl90ICopYnVmOworCWludCByZXQ7CiAKIAlpZiAoY2hlY2spIHsKIAkJdWludDMyX3QgY3JjOwpAQCAtMTU5LDYgKzIwNiwxNCBAQAogCQl9CiAJfQogCisJLyogRGVjcnlwdCB0aGUgZW52IGlmIGRlc2lyZWQuICovCisJcmV0ID0gZW52X2Flc19jYmNfY3J5cHQoZXAsIDApOworCWlmIChyZXQpIHsKKwkJZXJyb3IoIkZhaWxlZCB0byBkZWNyeXB0IGVudiFcbiIpOworCQlzZXRfZGVmYXVsdF9lbnYoIiFpbXBvcnQgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCiAJaWYgKGhpbXBvcnRfcigmZW52X2h0YWIsIChjaGFyICopZXAtPmRhdGEsIEVOVl9TSVpFLCAnXDAnLCAwLAogCQkJMCwgTlVMTCkpIHsKIAkJZ2QtPmZsYWdzIHw9IEdEX0ZMR19FTlZfUkVBRFk7CkBAIC0xNzIsNiArMjI3LDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIEVtcG9ydCB0aGUgZW52aXJvbm1lbnQgYW5kIGdlbmVyYXRlIENSQyBmb3IgaXQuICovCitpbnQgZW52X2V4cG9ydChlbnZfdCAqZW52X291dCkKK3sKKwljaGFyICpyZXM7CisJc3NpemVfdAlsZW47CisJaW50IHJldDsKKworCXJlcyA9IChjaGFyICopZW52X291dC0+ZGF0YTsKKwlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAwLCAmcmVzLCBFTlZfU0laRSwgMCwgTlVMTCk7CisJaWYgKGxlbiA8IDApIHsKKwkJZXJyb3IoIkNhbm5vdCBleHBvcnQgZW52aXJvbm1lbnQ6IGVycm5vID0gJWRcbiIsIGVycm5vKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogRW5jcnlwdCB0aGUgZW52IGlmIGRlc2lyZWQuICovCisJcmV0ID0gZW52X2Flc19jYmNfY3J5cHQoZW52X291dCwgMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWVudl9vdXQtPmNyYyA9IGNyYzMyKDAsIGVudl9vdXQtPmRhdGEsIEVOVl9TSVpFKTsKKworCXJldHVybiAwOworfQorCiB2b2lkIGVudl9yZWxvY2F0ZSh2b2lkKQogewogI2lmIGRlZmluZWQoQ09ORklHX05FRURTX01BTlVBTF9SRUxPQykKZGlmZiAtLWdpdCBhL2NvbW1vbi9lbnZfZGF0YWZsYXNoLmMgYi9jb21tb24vZW52X2RhdGFmbGFzaC5jCmluZGV4IGI1M2I4N2UuLjAzNGUzMjMgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9lbnZfZGF0YWZsYXNoLmMKKysrIGIvY29tbW9uL2Vudl9kYXRhZmxhc2guYwpAQCAtNTYsMTcgKzU2LDEyIEBACiAKIGludCBzYXZlZW52KHZvaWQpCiB7Ci0JZW52X3QJZW52X25ldzsKLQlzc2l6ZV90CWxlbjsKLQljaGFyCSpyZXM7CisJZW52X3QgZW52X25ldzsKKwlpbnQgcmV0OwogCi0JcmVzID0gKGNoYXIgKikmZW52X25ldy5kYXRhOwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsIDAsICZyZXMsIEVOVl9TSVpFLCAwLCBOVUxMKTsKLQlpZiAobGVuIDwgMCkgewotCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwgZXJybm8pOwotCQlyZXR1cm4gMTsKLQl9Ci0JZW52X25ldy5jcmMgPSBjcmMzMigwLCBlbnZfbmV3LmRhdGEsIEVOVl9TSVpFKTsKKwlyZXQgPSBlbnZfZXhwb3J0KCZlbnZfbmV3KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIHdyaXRlX2RhdGFmbGFzaChDT05GSUdfRU5WX0FERFIsCiAJCQkJKHVuc2lnbmVkIGxvbmcpJmVudl9uZXcsCmRpZmYgLS1naXQgYS9jb21tb24vZW52X2VlcHJvbS5jIGIvY29tbW9uL2Vudl9lZXByb20uYwppbmRleCAwZGIyYmI2Li40OTBhYzczIDEwMDY0NAotLS0gYS9jb21tb24vZW52X2VlcHJvbS5jCisrKyBiL2NvbW1vbi9lbnZfZWVwcm9tLmMKQEAgLTk4LDggKzk4LDYgQEAKIGludCBzYXZlZW52KHZvaWQpCiB7CiAJZW52X3QJZW52X25ldzsKLQlzc2l6ZV90CWxlbjsKLQljaGFyCSpyZXM7CiAJaW50CXJjOwogCXVuc2lnbmVkIGludCBvZmYJPSBDT05GSUdfRU5WX09GRlNFVDsKICNpZmRlZiBDT05GSUdfRU5WX09GRlNFVF9SRURVTkQKQEAgLTEwOSwxMyArMTA3LDkgQEAKIAogCUJVR19PTihlbnZfcHRyICE9IE5VTEwpOwogCi0JcmVzID0gKGNoYXIgKikmZW52X25ldy5kYXRhOwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsIDAsICZyZXMsIEVOVl9TSVpFLCAwLCBOVUxMKTsKLQlpZiAobGVuIDwgMCkgewotCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwgZXJybm8pOwotCQlyZXR1cm4gMTsKLQl9Ci0JZW52X25ldy5jcmMgPSBjcmMzMigwLCBlbnZfbmV3LmRhdGEsIEVOVl9TSVpFKTsKKwlyYyA9IGVudl9leHBvcnQoJmVudl9uZXcpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCiAjaWZkZWYgQ09ORklHX0VOVl9PRkZTRVRfUkVEVU5ECiAJaWYgKGdkLT5lbnZfdmFsaWQgPT0gMSkgewpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9mYXQuYyBiL2NvbW1vbi9lbnZfZmF0LmMKaW5kZXggNzA4ZmQxMy4uYWFkMDQ4NyAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9mYXQuYworKysgYi9jb21tb24vZW52X2ZhdC5jCkBAIC0zNywxOSArMzcsMTQgQEAKIGludCBzYXZlZW52KHZvaWQpCiB7CiAJZW52X3QJZW52X25ldzsKLQlzc2l6ZV90CWxlbjsKLQljaGFyCSpyZXM7CiAJYmxvY2tfZGV2X2Rlc2NfdCAqZGV2X2Rlc2MgPSBOVUxMOwogCWludCBkZXYgPSBGQVRfRU5WX0RFVklDRTsKIAlpbnQgcGFydCA9IEZBVF9FTlZfUEFSVDsKIAlpbnQgZXJyOwogCi0JcmVzID0gKGNoYXIgKikmZW52X25ldy5kYXRhOwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsIDAsICZyZXMsIEVOVl9TSVpFLCAwLCBOVUxMKTsKLQlpZiAobGVuIDwgMCkgewotCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwgZXJybm8pOwotCQlyZXR1cm4gMTsKLQl9CisJZXJyID0gZW52X2V4cG9ydCgmZW52X25ldyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogI2lmZGVmIENPTkZJR19NTUMKIAlpZiAoc3RyY21wKEZBVF9FTlZfSU5URVJGQUNFLCAibW1jIikgPT0gMCkgewpAQCAtNzksNyArNzQsNiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQllbnZfbmV3LmNyYyA9IGNyYzMyKDAsIGVudl9uZXcuZGF0YSwgRU5WX1NJWkUpOwogCWVyciA9IGZpbGVfZmF0X3dyaXRlKEZBVF9FTlZfRklMRSwgKHZvaWQgKikmZW52X25ldywgc2l6ZW9mKGVudl90KSk7CiAJaWYgKGVyciA9PSAtMSkgewogCQlwcmludGYoIlxuKiogVW5hYmxlIHRvIHdyaXRlIFwiJXNcIiBmcm9tICVzJWQ6JWQgKipcbiIsCmRpZmYgLS1naXQgYS9jb21tb24vZW52X2ZsYXNoLmMgYi9jb21tb24vZW52X2ZsYXNoLmMKaW5kZXggN2Q1YTRjZi4uMDA0ZTg4NCAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9mbGFzaC5jCisrKyBiL2NvbW1vbi9lbnZfZmxhc2guYwpAQCAtMTA2LDggKzEwNiw3IEBACiBpbnQgc2F2ZWVudih2b2lkKQogewogCWVudl90CWVudl9uZXc7Ci0Jc3NpemVfdAlsZW47Ci0JY2hhcgkqcmVzLCAqc2F2ZWRfZGF0YSA9IE5VTEw7CisJY2hhcgkqc2F2ZWRfZGF0YSA9IE5VTEw7CiAJY2hhcglmbGFnID0gT0JTT0xFVEVfRkxBRywgbmV3X2ZsYWcgPSBBQ1RJVkVfRkxBRzsKIAlpbnQJcmMgPSAxOwogI2lmIENPTkZJR19FTlZfU0VDVF9TSVpFID4gQ09ORklHX0VOVl9TSVpFCkBAIC0xMjUsMTMgKzEyNCw5IEBACiAJaWYgKGZsYXNoX3NlY3RfcHJvdGVjdCgwLCAodWxvbmcpZmxhc2hfYWRkcl9uZXcsIGVuZF9hZGRyX25ldykpCiAJCWdvdG8gZG9uZTsKIAotCXJlcyA9IChjaGFyICopJmVudl9uZXcuZGF0YTsKLQlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAwLCAmcmVzLCBFTlZfU0laRSwgMCwgTlVMTCk7Ci0JaWYgKGxlbiA8IDApIHsKLQkJZXJyb3IoIkNhbm5vdCBleHBvcnQgZW52aXJvbm1lbnQ6IGVycm5vID0gJWRcbiIsIGVycm5vKTsKLQkJZ290byBkb25lOwotCX0KLQllbnZfbmV3LmNyYwk9IGNyYzMyKDAsIGVudl9uZXcuZGF0YSwgRU5WX1NJWkUpOworCXJjID0gZW52X2V4cG9ydCgmZW52X25ldyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAJZW52X25ldy5mbGFncwk9IG5ld19mbGFnOwogCiAjaWYgQ09ORklHX0VOVl9TRUNUX1NJWkUgPiBDT05GSUdfRU5WX1NJWkUKQEAgLTIyOSw5ICsyMjQsOCBAQAogaW50IHNhdmVlbnYodm9pZCkKIHsKIAllbnZfdAllbnZfbmV3OwotCXNzaXplX3QJbGVuOwogCWludAlyYyA9IDE7Ci0JY2hhcgkqcmVzLCAqc2F2ZWRfZGF0YSA9IE5VTEw7CisJY2hhcgkqc2F2ZWRfZGF0YSA9IE5VTEw7CiAjaWYgQ09ORklHX0VOVl9TRUNUX1NJWkUgPiBDT05GSUdfRU5WX1NJWkUKIAl1bG9uZwl1cF9kYXRhID0gMDsKIApAQCAtMjU4LDEzICsyNTIsOSBAQAogCWlmIChmbGFzaF9zZWN0X3Byb3RlY3QoMCwgKGxvbmcpZmxhc2hfYWRkciwgZW5kX2FkZHIpKQogCQlnb3RvIGRvbmU7CiAKLQlyZXMgPSAoY2hhciAqKSZlbnZfbmV3LmRhdGE7Ci0JbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgMCwgJnJlcywgRU5WX1NJWkUsIDAsIE5VTEwpOwotCWlmIChsZW4gPCAwKSB7Ci0JCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7CisJcmMgPSBlbnZfZXhwb3J0KCZlbnZfbmV3KTsKKwlpZiAocmMpCiAJCWdvdG8gZG9uZTsKLQl9Ci0JZW52X25ldy5jcmMgPSBjcmMzMigwLCBlbnZfbmV3LmRhdGEsIEVOVl9TSVpFKTsKIAogCXB1dHMoIkVyYXNpbmcgRmxhc2guLi4iKTsKIAlpZiAoZmxhc2hfc2VjdF9lcmFzZSgobG9uZylmbGFzaF9hZGRyLCBlbmRfYWRkcikpCmRpZmYgLS1naXQgYS9jb21tb24vZW52X21tYy5jIGIvY29tbW9uL2Vudl9tbWMuYwppbmRleCBmNDdiZDc3Li43ZGExMGU2IDEwMDY0NAotLS0gYS9jb21tb24vZW52X21tYy5jCisrKyBiL2NvbW1vbi9lbnZfbW1jLmMKQEAgLTEyOSw4ICsxMjksNiBAQAogaW50IHNhdmVlbnYodm9pZCkKIHsKIAlBTExPQ19DQUNIRV9BTElHTl9CVUZGRVIoZW52X3QsIGVudl9uZXcsIDEpOwotCXNzaXplX3QJbGVuOwotCWNoYXIJKnJlczsKIAlzdHJ1Y3QgbW1jICptbWMgPSBmaW5kX21tY19kZXZpY2UoQ09ORklHX1NZU19NTUNfRU5WX0RFVik7CiAJdTMyCW9mZnNldDsKIAlpbnQJcmV0LCBjb3B5ID0gMDsKQEAgLTEzOCwxNSArMTM2LDkgQEAKIAlpZiAoaW5pdF9tbWNfZm9yX2VudihtbWMpKQogCQlyZXR1cm4gMTsKIAotCXJlcyA9IChjaGFyICopJmVudl9uZXctPmRhdGE7Ci0JbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgMCwgJnJlcywgRU5WX1NJWkUsIDAsIE5VTEwpOwotCWlmIChsZW4gPCAwKSB7Ci0JCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldCA9IDE7CisJcmV0ID0gZW52X2V4cG9ydChlbnZfbmV3KTsKKwlpZiAocmV0KQogCQlnb3RvIGZpbmk7Ci0JfQotCi0JZW52X25ldy0+Y3JjID0gY3JjMzIoMCwgJmVudl9uZXctPmRhdGFbMF0sIEVOVl9TSVpFKTsKIAogI2lmZGVmIENPTkZJR19FTlZfT0ZGU0VUX1JFRFVORAogCWVudl9uZXctPmZsYWdzCT0gKytlbnZfZmxhZ3M7IC8qIGluY3JlYXNlIHRoZSBzZXJpYWwgKi8KZGlmZiAtLWdpdCBhL2NvbW1vbi9lbnZfbmFuZC5jIGIvY29tbW9uL2Vudl9uYW5kLmMKaW5kZXggNjk1YTllZS4uNWE3MzRhOSAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9uYW5kLmMKKysrIGIvY29tbW9uL2Vudl9uYW5kLmMKQEAgLTE4MSw4ICsxODEsNiBAQAogewogCWludAlyZXQgPSAwOwogCUFMTE9DX0NBQ0hFX0FMSUdOX0JVRkZFUihlbnZfdCwgZW52X25ldywgMSk7Ci0Jc3NpemVfdAlsZW47Ci0JY2hhcgkqcmVzOwogCWludAllbnZfaWR4ID0gMDsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGVudl9sb2NhdGlvbiBsb2NhdGlvbltdID0gewogCQl7CkBAIC0yMDcsMTMgKzIwNSwxMCBAQAogCWlmIChDT05GSUdfRU5WX1JBTkdFIDwgQ09ORklHX0VOVl9TSVpFKQogCQlyZXR1cm4gMTsKIAotCXJlcyA9IChjaGFyICopJmVudl9uZXctPmRhdGE7Ci0JbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgMCwgJnJlcywgRU5WX1NJWkUsIDAsIE5VTEwpOwotCWlmIChsZW4gPCAwKSB7Ci0JCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybiAxOwotCX0KLQllbnZfbmV3LT5jcmMgICA9IGNyYzMyKDAsIGVudl9uZXctPmRhdGEsIEVOVl9TSVpFKTsKKwlyZXQgPSBlbnZfZXhwb3J0KGVudl9uZXcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKICNpZmRlZiBDT05GSUdfRU5WX09GRlNFVF9SRURVTkQKIAllbnZfbmV3LT5mbGFncyA9ICsrZW52X2ZsYWdzOyAvKiBpbmNyZWFzZSB0aGUgc2VyaWFsICovCiAJZW52X2lkeCA9IChnZC0+ZW52X3ZhbGlkID09IDEpOwpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9udnJhbS5jIGIvY29tbW9uL2Vudl9udnJhbS5jCmluZGV4IDA4NjZjZGUuLjUyNGYwN2QgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9lbnZfbnZyYW0uYworKysgYi9jb21tb24vZW52X252cmFtLmMKQEAgLTY5LDE3ICs2OSwxMSBAQAogaW50IHNhdmVlbnYodm9pZCkKIHsKIAllbnZfdAllbnZfbmV3OwotCXNzaXplX3QJbGVuOwotCWNoYXIJKnJlczsKIAlpbnQJcmNvZGUgPSAwOwogCi0JcmVzID0gKGNoYXIgKikmZW52X25ldy5kYXRhOwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsIDAsICZyZXMsIEVOVl9TSVpFLCAwLCBOVUxMKTsKLQlpZiAobGVuIDwgMCkgewotCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwgZXJybm8pOwotCQlyZXR1cm4gMTsKLQl9Ci0JZW52X25ldy5jcmMgPSBjcmMzMigwLCBlbnZfbmV3LmRhdGEsIEVOVl9TSVpFKTsKKwlyY29kZSA9IGVudl9leHBvcnQoJmVudl9uZXcpOworCWlmIChyY29kZSkKKwkJcmV0dXJuIHJjb2RlOwogCiAjaWZkZWYgQ09ORklHX1NZU19OVlJBTV9BQ0NFU1NfUk9VVElORQogCW52cmFtX3dyaXRlKENPTkZJR19FTlZfQUREUiwgJmVudl9uZXcsIENPTkZJR19FTlZfU0laRSk7CmRpZmYgLS1naXQgYS9jb21tb24vZW52X29uZW5hbmQuYyBiL2NvbW1vbi9lbnZfb25lbmFuZC5jCmluZGV4IDRiNDQ2MzIuLmNjM2Q2NzAgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9lbnZfb25lbmFuZC5jCisrKyBiL2NvbW1vbi9lbnZfb25lbmFuZC5jCkBAIC02Niw4ICs2Niw3IEBACiBpbnQgc2F2ZWVudih2b2lkKQogewogCWVudl90CWVudl9uZXc7Ci0Jc3NpemVfdAlsZW47Ci0JY2hhcgkqcmVzOworCWludCByZXQ7CiAJc3RydWN0IG10ZF9pbmZvICptdGQgPSAmb25lbmFuZF9tdGQ7CiAjaWZkZWYgQ09ORklHX0VOVl9BRERSX0ZMRVgKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gJm9uZW5hbmRfY2hpcDsKQEAgLTc4LDEzICs3Nyw5IEBACiAJCS5jYWxsYmFjawk9IE5VTEwsCiAJfTsKIAotCXJlcyA9IChjaGFyICopJmVudl9uZXcuZGF0YTsKLQlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAwLCAmcmVzLCBFTlZfU0laRSwgMCwgTlVMTCk7Ci0JaWYgKGxlbiA8IDApIHsKLQkJZXJyb3IoIkNhbm5vdCBleHBvcnQgZW52aXJvbm1lbnQ6IGVycm5vID0gJWRcbiIsIGVycm5vKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWVudl9uZXcuY3JjID0gY3JjMzIoMCwgZW52X25ldy5kYXRhLCBFTlZfU0laRSk7CisJcmV0ID0gZW52X2V4cG9ydCgmZW52X25ldyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCWluc3RyLmxlbiA9IENPTkZJR19FTlZfU0laRTsKICNpZmRlZiBDT05GSUdfRU5WX0FERFJfRkxFWApkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9zZi5jIGIvY29tbW9uL2Vudl9zZi5jCmluZGV4IGJlMjcwZjIuLjM3YWIxM2EgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9lbnZfc2YuYworKysgYi9jb21tb24vZW52X3NmLmMKQEAgLTQ3LDggKzQ3LDcgQEAKIGludCBzYXZlZW52KHZvaWQpCiB7CiAJZW52X3QJZW52X25ldzsKLQlzc2l6ZV90CWxlbjsKLQljaGFyCSpyZXMsICpzYXZlZF9idWZmZXIgPSBOVUxMLCBmbGFnID0gT0JTT0xFVEVfRkxBRzsKKwljaGFyCSpzYXZlZF9idWZmZXIgPSBOVUxMLCBmbGFnID0gT0JTT0xFVEVfRkxBRzsKIAl1MzIJc2F2ZWRfc2l6ZSwgc2F2ZWRfb2Zmc2V0LCBzZWN0b3IgPSAxOwogCWludAlyZXQ7CiAKQEAgLTYyLDEzICs2MSw5IEBACiAJCX0KIAl9CiAKLQlyZXMgPSAoY2hhciAqKSZlbnZfbmV3LmRhdGE7Ci0JbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgMCwgJnJlcywgRU5WX1NJWkUsIDAsIE5VTEwpOwotCWlmIChsZW4gPCAwKSB7Ci0JCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybiAxOwotCX0KLQllbnZfbmV3LmNyYwk9IGNyYzMyKDAsIGVudl9uZXcuZGF0YSwgRU5WX1NJWkUpOworCXJldCA9IGVudl9leHBvcnQoJmVudl9uZXcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAJZW52X25ldy5mbGFncwk9IEFDVElWRV9GTEFHOwogCiAJaWYgKGdkLT5lbnZfdmFsaWQgPT0gMSkgewpAQCAtMjI1LDEwICsyMjAsOSBAQAogaW50IHNhdmVlbnYodm9pZCkKIHsKIAl1MzIJc2F2ZWRfc2l6ZSwgc2F2ZWRfb2Zmc2V0LCBzZWN0b3IgPSAxOwotCWNoYXIJKnJlcywgKnNhdmVkX2J1ZmZlciA9IE5VTEw7CisJY2hhcgkqc2F2ZWRfYnVmZmVyID0gTlVMTDsKIAlpbnQJcmV0ID0gMTsKIAllbnZfdAllbnZfbmV3OwotCXNzaXplX3QJbGVuOwogCiAJaWYgKCFlbnZfZmxhc2gpIHsKIAkJZW52X2ZsYXNoID0gc3BpX2ZsYXNoX3Byb2JlKENPTkZJR19FTlZfU1BJX0JVUywKQEAgLTI2MCwxMyArMjU0LDkgQEAKIAkJCXNlY3RvcisrOwogCX0KIAotCXJlcyA9IChjaGFyICopJmVudl9uZXcuZGF0YTsKLQlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAwLCAmcmVzLCBFTlZfU0laRSwgMCwgTlVMTCk7Ci0JaWYgKGxlbiA8IDApIHsKLQkJZXJyb3IoIkNhbm5vdCBleHBvcnQgZW52aXJvbm1lbnQ6IGVycm5vID0gJWRcbiIsIGVycm5vKTsKKwlyZXQgPSBlbnZfZXhwb3J0KCZlbnZfbmV3KTsKKwlpZiAocmV0KQogCQlnb3RvIGRvbmU7Ci0JfQotCWVudl9uZXcuY3JjID0gY3JjMzIoMCwgZW52X25ldy5kYXRhLCBFTlZfU0laRSk7CiAKIAlwdXRzKCJFcmFzaW5nIFNQSSBmbGFzaC4uLiIpOwogCXJldCA9IHNwaV9mbGFzaF9lcmFzZShlbnZfZmxhc2gsIENPTkZJR19FTlZfT0ZGU0VULApkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl91YmkuYyBiL2NvbW1vbi9lbnZfdWJpLmMKaW5kZXggYzA4MjhhNC4uNzdiYmZhNiAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl91YmkuYworKysgYi9jb21tb24vZW52X3ViaS5jCkBAIC0zNywxNSArMzcsMTEgQEAKIGludCBzYXZlZW52KHZvaWQpCiB7CiAJQUxMT0NfQ0FDSEVfQUxJR05fQlVGRkVSKGVudl90LCBlbnZfbmV3LCAxKTsKLQlzc2l6ZV90CWxlbjsKLQljaGFyICpyZXM7CisJaW50IHJldDsKIAotCXJlcyA9IChjaGFyICopJmVudl9uZXctPmRhdGE7Ci0JbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgMCwgJnJlcywgRU5WX1NJWkUsIDAsIE5VTEwpOwotCWlmIChsZW4gPCAwKSB7Ci0JCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCXJldHVybiAxOwotCX0KKwlyZXQgPSBlbnZfZXhwb3J0KGVudl9uZXcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlpZiAodWJpX3BhcnQoQ09ORklHX0VOVl9VQklfUEFSVCwgTlVMTCkpIHsKIAkJcHJpbnRmKCJcbioqIENhbm5vdCBmaW5kIG10ZCBwYXJ0aXRpb24gXCIlc1wiXG4iLApAQCAtNTMsNyArNDksNiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQllbnZfbmV3LT5jcmMgPSBjcmMzMigwLCBlbnZfbmV3LT5kYXRhLCBFTlZfU0laRSk7CiAJZW52X25ldy0+ZmxhZ3MgPSArK2Vudl9mbGFnczsgLyogaW5jcmVhc2UgdGhlIHNlcmlhbCAqLwogCiAJaWYgKGdkLT5lbnZfdmFsaWQgPT0gMSkgewpAQCAtODYsMTUgKzgxLDExIEBACiBpbnQgc2F2ZWVudih2b2lkKQogewogCUFMTE9DX0NBQ0hFX0FMSUdOX0JVRkZFUihlbnZfdCwgZW52X25ldywgMSk7Ci0Jc3NpemVfdAlsZW47Ci0JY2hhciAqcmVzOworCWludCByZXQ7CiAKLQlyZXMgPSAoY2hhciAqKSZlbnZfbmV3LT5kYXRhOwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsIDAsICZyZXMsIEVOVl9TSVpFLCAwLCBOVUxMKTsKLQlpZiAobGVuIDwgMCkgewotCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwgZXJybm8pOwotCQlyZXR1cm4gMTsKLQl9CisJcmV0ID0gZW52X2V4cG9ydChlbnZfbmV3KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJaWYgKHViaV9wYXJ0KENPTkZJR19FTlZfVUJJX1BBUlQsIE5VTEwpKSB7CiAJCXByaW50ZigiXG4qKiBDYW5ub3QgZmluZCBtdGQgcGFydGl0aW9uIFwiJXNcIlxuIiwKQEAgLTEwMiw4ICs5Myw2IEBACiAJCXJldHVybiAxOwogCX0KIAotCWVudl9uZXctPmNyYyA9IGNyYzMyKDAsIGVudl9uZXctPmRhdGEsIEVOVl9TSVpFKTsKLQogCWlmICh1Ymlfdm9sdW1lX3dyaXRlKENPTkZJR19FTlZfVUJJX1ZPTFVNRSwgKHZvaWQgKillbnZfbmV3LAogCQkJICAgICBDT05GSUdfRU5WX1NJWkUpKSB7CiAJCXByaW50ZigiXG4qKiBVbmFibGUgdG8gd3JpdGUgZW52IHRvICVzOiVzICoqXG4iLApkaWZmIC0tZ2l0IGEvY29tbW9uL2ZkdF9zdXBwb3J0LmMgYi9jb21tb24vZmR0X3N1cHBvcnQuYwppbmRleCBmOWYzNThlLi5mY2QyNTIzIDEwMDY0NAotLS0gYS9jb21tb24vZmR0X3N1cHBvcnQuYworKysgYi9jb21tb24vZmR0X3N1cHBvcnQuYwpAQCAtNTAsNiArNTAsMzcgQEAKIH0KIAogLyoqCisgKiBmZHRfZ2V0cHJvcF91MzJfZGVmYXVsdF9ub2RlIC0gUmV0dXJuIGEgbm9kZSdzIHByb3BlcnR5IG9yIGEgZGVmYXVsdAorICoKKyAqIEBmZHQ6IHB0ciB0byBkZXZpY2UgdHJlZQorICogQG9mZjogb2Zmc2V0IG9mIG5vZGUKKyAqIEBjZWxsOiBjZWxsIG9mZnNldCBpbiBwcm9wZXJ0eQorICogQHByb3A6IHByb3BlcnR5IG5hbWUKKyAqIEBkZmx0OiBkZWZhdWx0IHZhbHVlIGlmIHRoZSBwcm9wZXJ0eSBpc24ndCBmb3VuZAorICoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHJldHVybiBhIG5vZGUncyBwcm9wZXJ0eSBvciBhIGRlZmF1bHQgdmFsdWUgaWYKKyAqIHRoZSBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0LgorICovCit1MzIgZmR0X2dldHByb3BfdTMyX2RlZmF1bHRfbm9kZShjb25zdCB2b2lkICpmZHQsIGludCBvZmYsIGludCBjZWxsLAorCQkJCWNvbnN0IGNoYXIgKnByb3AsIGNvbnN0IHUzMiBkZmx0KQoreworCWNvbnN0IGZkdDMyX3QgKnZhbDsKKwlpbnQgbGVuOworCisJdmFsID0gZmR0X2dldHByb3AoZmR0LCBvZmYsIHByb3AsICZsZW4pOworCisJLyogQ2hlY2sgaWYgcHJvcGVydHkgZXhpc3RzICovCisJaWYgKCF2YWwpCisJCXJldHVybiBkZmx0OworCisJLyogQ2hlY2sgaWYgcHJvcGVydHkgaXMgbG9uZyBlbm91Z2ggKi8KKwlpZiAobGVuIDwgKChjZWxsICsgMSkgKiBzaXplb2YodWludDMyX3QpKSkKKwkJcmV0dXJuIGRmbHQ7CisKKwlyZXR1cm4gZmR0MzJfdG9fY3B1KCp2YWwpOworfQorCisvKioKICAqIGZkdF9nZXRwcm9wX3UzMl9kZWZhdWx0IC0gRmluZCBhIG5vZGUgYW5kIHJldHVybiBpdCdzIHByb3BlcnR5IG9yIGEgZGVmYXVsdAogICoKICAqIEBmZHQ6IHB0ciB0byBkZXZpY2UgdHJlZQpAQCAtNjMsMTggKzk0LDEzIEBACiB1MzIgZmR0X2dldHByb3BfdTMyX2RlZmF1bHQoY29uc3Qgdm9pZCAqZmR0LCBjb25zdCBjaGFyICpwYXRoLAogCQkJCWNvbnN0IGNoYXIgKnByb3AsIGNvbnN0IHUzMiBkZmx0KQogewotCWNvbnN0IGZkdDMyX3QgKnZhbDsKIAlpbnQgb2ZmOwogCiAJb2ZmID0gZmR0X3BhdGhfb2Zmc2V0KGZkdCwgcGF0aCk7CiAJaWYgKG9mZiA8IDApCiAJCXJldHVybiBkZmx0OwogCi0JdmFsID0gZmR0X2dldHByb3AoZmR0LCBvZmYsIHByb3AsIE5VTEwpOwotCWlmICh2YWwpCi0JCXJldHVybiBmZHQzMl90b19jcHUoKnZhbCk7Ci0JZWxzZQotCQlyZXR1cm4gZGZsdDsKKwlyZXR1cm4gZmR0X2dldHByb3BfdTMyX2RlZmF1bHRfbm9kZShmZHQsIG9mZiwgMCwgcHJvcCwgZGZsdCk7CiB9CiAKIC8qKgpAQCAtMTQwOSwzICsxNDM1LDk3IEBACiAKIAlyZXR1cm4gcHJvcCA/IGZkdF90cmFuc2xhdGVfYWRkcmVzcyhmZHQsIG5vZGUsIHByb3AgKyBuYWRkcikgOiAwOwogfQorCisvKgorICogUmVhZCBhIHByb3BlcnR5IG9mIHNpemUgPHByb3BfbGVuPi4gQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgMSBvciAyIGNlbGxzLgorICovCitzdGF0aWMgaW50IGZkdF9yZWFkX3Byb3AoY29uc3QgZmR0MzJfdCAqcHJvcCwgaW50IHByb3BfbGVuLCBpbnQgY2VsbF9vZmYsCisJCQkgdWludDY0X3QgKnZhbCwgaW50IGNlbGxzKQoreworCWNvbnN0IGZkdDMyX3QgKnByb3AzMiA9ICZwcm9wW2NlbGxfb2ZmXTsKKwljb25zdCBmZHQ2NF90ICpwcm9wNjQgPSAoY29uc3QgZmR0NjRfdCAqKSZwcm9wW2NlbGxfb2ZmXTsKKworCWlmICgoY2VsbF9vZmYgKyBjZWxscykgPiBwcm9wX2xlbikKKwkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CisKKwlzd2l0Y2ggKGNlbGxzKSB7CisJY2FzZSAxOgorCQkqdmFsID0gZmR0MzJfdG9fY3B1KCpwcm9wMzIpOworCQlicmVhazsKKwljYXNlIDI6CisJCSp2YWwgPSBmZHQ2NF90b19jcHUoKnByb3A2NCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRkRUX0VSUl9OT1NQQUNFOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGZkdF9yZWFkX3JhbmdlIC0gUmVhZCBhIG5vZGUncyBuJ3RoIHJhbmdlIHByb3BlcnR5CisgKgorICogQGZkdDogcHRyIHRvIGRldmljZSB0cmVlCisgKiBAbm9kZTogb2Zmc2V0IG9mIG5vZGUKKyAqIEBuOiByYW5nZSBpbmRleAorICogQGNoaWxkX2FkZHI6IHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlICJjaGlsZCBhZGRyZXNzIiBmaWVsZAorICogQGFkZHI6IHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIENQVSB2aWV3IHRyYW5zbGF0ZWQgcGh5c2ljYWwgc3RhcnQKKyAqIEBsZW46IHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJhbmdlIGxlbmd0aAorICoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgcmVhZHMgYW5kIGludGVycHJldHMgYSBzcGVjaWZpYyByYW5nZSBvdXQgb2YKKyAqIGEgbnVtYmVyIG9mIHRoZSAicmFuZ2VzIiBwcm9wZXJ0eSBhcnJheS4KKyAqLworaW50IGZkdF9yZWFkX3JhbmdlKHZvaWQgKmZkdCwgaW50IG5vZGUsIGludCBuLCB1aW50NjRfdCAqY2hpbGRfYWRkciwKKwkJICAgdWludDY0X3QgKmFkZHIsIHVpbnQ2NF90ICpsZW4pCit7CisJaW50IHBub2RlID0gZmR0X3BhcmVudF9vZmZzZXQoZmR0LCBub2RlKTsKKwljb25zdCBmZHQzMl90ICpyYW5nZXM7CisJaW50IHBhY2VsbHM7CisJaW50IGFjZWxsczsKKwlpbnQgc2NlbGxzOworCWludCByYW5nZXNfbGVuOworCWludCBjZWxsID0gMDsKKwlpbnQgciA9IDA7CisKKwkvKgorCSAqIFRoZSAicmFuZ2VzIiBwcm9wZXJ0eSBpcyBhbiBhcnJheSBvZgorCSAqIHsgPGNoaWxkIGFkZHJlc3M+IDxwYXJlbnQgYWRkcmVzcz4gPHNpemUgaW4gY2hpbGQgYWRkcmVzcyBzcGFjZT4gfQorCSAqCisJICogQWxsIDMgZWxlbWVudHMgY2FuIHNwYW4gYSBkaWZmZW50IG51bWJlciBvZiBjZWxscy4gRmV0Y2ggdGhlaXIgc2l6ZS4KKwkgKi8KKwlwYWNlbGxzID0gZmR0X2dldHByb3BfdTMyX2RlZmF1bHRfbm9kZShmZHQsIHBub2RlLCAwLCAiI2FkZHJlc3MtY2VsbHMiLCAxKTsKKwlhY2VsbHMgPSBmZHRfZ2V0cHJvcF91MzJfZGVmYXVsdF9ub2RlKGZkdCwgbm9kZSwgMCwgIiNhZGRyZXNzLWNlbGxzIiwgMSk7CisJc2NlbGxzID0gZmR0X2dldHByb3BfdTMyX2RlZmF1bHRfbm9kZShmZHQsIG5vZGUsIDAsICIjc2l6ZS1jZWxscyIsIDEpOworCisJLyogTm93IHRyeSB0byBnZXQgdGhlIHJhbmdlcyBwcm9wZXJ0eSAqLworCXJhbmdlcyA9IGZkdF9nZXRwcm9wKGZkdCwgbm9kZSwgInJhbmdlcyIsICZyYW5nZXNfbGVuKTsKKwlpZiAoIXJhbmdlcykKKwkJcmV0dXJuIC1GRFRfRVJSX05PVEZPVU5EOworCXJhbmdlc19sZW4gLz0gc2l6ZW9mKHVpbnQzMl90KTsKKworCS8qIEp1bXAgdG8gdGhlIG4ndGggZW50cnkgKi8KKwljZWxsID0gbiAqIChwYWNlbGxzICsgYWNlbGxzICsgc2NlbGxzKTsKKworCS8qIFJlYWQgPGNoaWxkIGFkZHJlc3M+ICovCisJaWYgKGNoaWxkX2FkZHIpIHsKKwkJciA9IGZkdF9yZWFkX3Byb3AocmFuZ2VzLCByYW5nZXNfbGVuLCBjZWxsLCBjaGlsZF9hZGRyLAorCQkJCSAgYWNlbGxzKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJY2VsbCArPSBhY2VsbHM7CisKKwkvKiBSZWFkIDxwYXJlbnQgYWRkcmVzcz4gKi8KKwlpZiAoYWRkcikKKwkJKmFkZHIgPSBmZHRfdHJhbnNsYXRlX2FkZHJlc3MoZmR0LCBub2RlLCByYW5nZXMgKyBjZWxsKTsKKwljZWxsICs9IHBhY2VsbHM7CisKKwkvKiBSZWFkIDxzaXplIGluIGNoaWxkIGFkZHJlc3Mgc3BhY2U+ICovCisJaWYgKGxlbikgeworCQlyID0gZmR0X3JlYWRfcHJvcChyYW5nZXMsIHJhbmdlc19sZW4sIGNlbGwsIGxlbiwgc2NlbGxzKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbW1vbi9oYXNoLmMgYi9jb21tb24vaGFzaC5jCmluZGV4IDg3MmNkODUuLjc2MjdiODQgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9oYXNoLmMKKysrIGIvY29tbW9uL2hhc2guYwpAQCAtMTIsNiArMTIsNyBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgogI2luY2x1ZGUgPGh3X3NoYS5oPgogI2luY2x1ZGUgPGhhc2guaD4KICNpbmNsdWRlIDxzaGExLmg+CkBAIC0xOSw2ICsyMCw4OCBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogCisjaWZkZWYgQ09ORklHX0NNRF9TSEExU1VNCitzdGF0aWMgaW50IGhhc2hfaW5pdF9zaGExKHN0cnVjdCBoYXNoX2FsZ28gKmFsZ28sIHZvaWQgKipjdHhwKQoreworCXNoYTFfY29udGV4dCAqY3R4ID0gbWFsbG9jKHNpemVvZihzaGExX2NvbnRleHQpKTsKKwlzaGExX3N0YXJ0cyhjdHgpOworCSpjdHhwID0gY3R4OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhc2hfdXBkYXRlX3NoYTEoc3RydWN0IGhhc2hfYWxnbyAqYWxnbywgdm9pZCAqY3R4LCBjb25zdCB2b2lkICpidWYsCisJCQkgICAgdW5zaWduZWQgaW50IHNpemUsIGludCBpc19sYXN0KQoreworCXNoYTFfdXBkYXRlKChzaGExX2NvbnRleHQgKiljdHgsIGJ1Ziwgc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFzaF9maW5pc2hfc2hhMShzdHJ1Y3QgaGFzaF9hbGdvICphbGdvLCB2b2lkICpjdHgsIHZvaWQgKmRlc3RfYnVmLAorCQkJICAgIGludCBzaXplKQoreworCWlmIChzaXplIDwgYWxnby0+ZGlnZXN0X3NpemUpCisJCXJldHVybiAtMTsKKworCXNoYTFfZmluaXNoKChzaGExX2NvbnRleHQgKiljdHgsIGRlc3RfYnVmKTsKKwlmcmVlKGN0eCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TSEEyNTYKK3N0YXRpYyBpbnQgaGFzaF9pbml0X3NoYTI1NihzdHJ1Y3QgaGFzaF9hbGdvICphbGdvLCB2b2lkICoqY3R4cCkKK3sKKwlzaGEyNTZfY29udGV4dCAqY3R4ID0gbWFsbG9jKHNpemVvZihzaGEyNTZfY29udGV4dCkpOworCXNoYTI1Nl9zdGFydHMoY3R4KTsKKwkqY3R4cCA9IGN0eDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYXNoX3VwZGF0ZV9zaGEyNTYoc3RydWN0IGhhc2hfYWxnbyAqYWxnbywgdm9pZCAqY3R4LAorCQkJICAgICAgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IGlzX2xhc3QpCit7CisJc2hhMjU2X3VwZGF0ZSgoc2hhMjU2X2NvbnRleHQgKiljdHgsIGJ1Ziwgc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFzaF9maW5pc2hfc2hhMjU2KHN0cnVjdCBoYXNoX2FsZ28gKmFsZ28sIHZvaWQgKmN0eCwgdm9pZAorCQkJICAgICAgKmRlc3RfYnVmLCBpbnQgc2l6ZSkKK3sKKwlpZiAoc2l6ZSA8IGFsZ28tPmRpZ2VzdF9zaXplKQorCQlyZXR1cm4gLTE7CisKKwlzaGEyNTZfZmluaXNoKChzaGEyNTZfY29udGV4dCAqKWN0eCwgZGVzdF9idWYpOworCWZyZWUoY3R4KTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGhhc2hfaW5pdF9jcmMzMihzdHJ1Y3QgaGFzaF9hbGdvICphbGdvLCB2b2lkICoqY3R4cCkKK3sKKwl1aW50MzJfdCAqY3R4ID0gbWFsbG9jKHNpemVvZih1aW50MzJfdCkpOworCSpjdHggPSAwOworCSpjdHhwID0gY3R4OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhc2hfdXBkYXRlX2NyYzMyKHN0cnVjdCBoYXNoX2FsZ28gKmFsZ28sIHZvaWQgKmN0eCwKKwkJCSAgICAgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IGlzX2xhc3QpCit7CisJKigodWludDMyX3QgKiljdHgpID0gY3JjMzIoKigodWludDMyX3QgKiljdHgpLCBidWYsIHNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhc2hfZmluaXNoX2NyYzMyKHN0cnVjdCBoYXNoX2FsZ28gKmFsZ28sIHZvaWQgKmN0eCwgdm9pZCAqZGVzdF9idWYsCisJCQkgICAgIGludCBzaXplKQoreworCWlmIChzaXplIDwgYWxnby0+ZGlnZXN0X3NpemUpCisJCXJldHVybiAtMTsKKworCSooKHVpbnQzMl90ICopZGVzdF9idWYpID0gKigodWludDMyX3QgKiljdHgpOworCWZyZWUoY3R4KTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFRoZXNlIGFyZSB0aGUgaGFzaCBhbGdvcml0aG1zIHdlIHN1cHBvcnQuIENoaXBzIHdoaWNoIHN1cHBvcnQgYWNjZWxlcmF0ZWQKICAqIGNyeXB0byBjb3VsZCBwZXJoYXBzIGFkZCBuYW1lZCB2ZXJzaW9uIG9mIHRoZXNlIGFsZ29yaXRobXMgaGVyZS4gTm90ZSB0aGF0CkBAIC01Myw2ICsxMzYsOSBAQAogCQlTSEExX1NVTV9MRU4sCiAJCXNoYTFfY3N1bV93ZCwKIAkJQ0hVTktTWl9TSEExLAorCQloYXNoX2luaXRfc2hhMSwKKwkJaGFzaF91cGRhdGVfc2hhMSwKKwkJaGFzaF9maW5pc2hfc2hhMSwKIAl9LAogI2RlZmluZSBNVUxUSV9IQVNICiAjZW5kaWYKQEAgLTYyLDYgKzE0OCw5IEBACiAJCVNIQTI1Nl9TVU1fTEVOLAogCQlzaGEyNTZfY3N1bV93ZCwKIAkJQ0hVTktTWl9TSEEyNTYsCisJCWhhc2hfaW5pdF9zaGEyNTYsCisJCWhhc2hfdXBkYXRlX3NoYTI1NiwKKwkJaGFzaF9maW5pc2hfc2hhMjU2LAogCX0sCiAjZGVmaW5lIE1VTFRJX0hBU0gKICNlbmRpZgpAQCAtNzAsNiArMTU5LDkgQEAKIAkJNCwKIAkJY3JjMzJfd2RfYnVmLAogCQlDSFVOS1NaX0NSQzMyLAorCQloYXNoX2luaXRfY3JjMzIsCisJCWhhc2hfdXBkYXRlX2NyYzMyLAorCQloYXNoX2ZpbmlzaF9jcmMzMiwKIAl9LAogfTsKIApAQCAtMjA0LDE2ICsyOTYsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBoYXNoX2FsZ28gKmZpbmRfaGFzaF9hbGdvKGNvbnN0IGNoYXIgKm5hbWUpCitpbnQgaGFzaF9sb29rdXBfYWxnbyhjb25zdCBjaGFyICphbGdvX25hbWUsIHN0cnVjdCBoYXNoX2FsZ28gKiphbGdvcCkKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhhc2hfYWxnbyk7IGkrKykgewotCQlpZiAoIXN0cmNtcChuYW1lLCBoYXNoX2FsZ29baV0ubmFtZSkpCi0JCQlyZXR1cm4gJmhhc2hfYWxnb1tpXTsKKwkJaWYgKCFzdHJjbXAoYWxnb19uYW1lLCBoYXNoX2FsZ29baV0ubmFtZSkpIHsKKwkJCSphbGdvcCA9ICZoYXNoX2FsZ29baV07CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAotCXJldHVybiBOVUxMOworCWRlYnVnKCJVbmtub3duIGhhc2ggYWxnb3JpdGhtICclcydcbiIsIGFsZ29fbmFtZSk7CisJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNob3dfaGFzaChzdHJ1Y3QgaGFzaF9hbGdvICphbGdvLCB1bG9uZyBhZGRyLCB1bG9uZyBsZW4sCkBAIC0yMzAsMTIgKzMyNSwxMiBAQAogCSAgICAgICB1aW50OF90ICpvdXRwdXQsIGludCAqb3V0cHV0X3NpemUpCiB7CiAJc3RydWN0IGhhc2hfYWxnbyAqYWxnbzsKKwlpbnQgcmV0OwogCi0JYWxnbyA9IGZpbmRfaGFzaF9hbGdvKGFsZ29fbmFtZSk7Ci0JaWYgKCFhbGdvKSB7Ci0JCWRlYnVnKCJVbmtub3duIGhhc2ggYWxnb3JpdGhtICclcydcbiIsIGFsZ29fbmFtZSk7Ci0JCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwotCX0KKwlyZXQgPSBoYXNoX2xvb2t1cF9hbGdvKGFsZ29fbmFtZSwgJmFsZ28pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlpZiAob3V0cHV0X3NpemUgJiYgKm91dHB1dF9zaXplIDwgYWxnby0+ZGlnZXN0X3NpemUpIHsKIAkJZGVidWcoIk91dHB1dCBidWZmZXIgc2l6ZSAlZCB0b28gc21hbGwgKG5lZWQgJWQgYnl0ZXMpIiwKIAkJICAgICAgKm91dHB1dF9zaXplLCBhbGdvLT5kaWdlc3Rfc2l6ZSk7CkBAIC0yNjUsOCArMzYwLDcgQEAKIAkJdTggdnN1bVtIQVNIX01BWF9ESUdFU1RfU0laRV07CiAJCXZvaWQgKmJ1ZjsKIAotCQlhbGdvID0gZmluZF9oYXNoX2FsZ28oYWxnb19uYW1lKTsKLQkJaWYgKCFhbGdvKSB7CisJCWlmIChoYXNoX2xvb2t1cF9hbGdvKGFsZ29fbmFtZSwgJmFsZ28pKSB7CiAJCQlwcmludGYoIlVua25vd24gaGFzaCBhbGdvcml0aG0gJyVzJ1xuIiwgYWxnb19uYW1lKTsKIAkJCXJldHVybiBDTURfUkVUX1VTQUdFOwogCQl9CmRpZmYgLS1naXQgYS9jb21tb24vaW1hZ2UtZml0LmMgYi9jb21tb24vaW1hZ2UtZml0LmMKaW5kZXggYjk0YTNmZS4uNzdmMzJiYyAxMDA2NDQKLS0tIGEvY29tbW9uL2ltYWdlLWZpdC5jCisrKyBiL2NvbW1vbi9pbWFnZS1maXQuYwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8Ym9vdHN0YWdlLmg+CiAjaW5jbHVkZSA8c2hhMS5oPgorI2luY2x1ZGUgPHNoYTI1Ni5oPgogI2luY2x1ZGUgPHUtYm9vdC9jcmMuaD4KICNpbmNsdWRlIDx1LWJvb3QvbWQ1Lmg+CiAKQEAgLTg4Miw2ICs4ODMsMTAgQEAKIAkJc2hhMV9jc3VtX3dkKCh1bnNpZ25lZCBjaGFyICopZGF0YSwgZGF0YV9sZW4sCiAJCQkgICAgICh1bnNpZ25lZCBjaGFyICopdmFsdWUsIENIVU5LU1pfU0hBMSk7CiAJCSp2YWx1ZV9sZW4gPSAyMDsKKwl9IGVsc2UgaWYgKElNQUdFX0VOQUJMRV9TSEEyNTYgJiYgc3RyY21wKGFsZ28sICJzaGEyNTYiKSA9PSAwKSB7CisJCXNoYTI1Nl9jc3VtX3dkKCh1bnNpZ25lZCBjaGFyICopZGF0YSwgZGF0YV9sZW4sCisJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKil2YWx1ZSwgQ0hVTktTWl9TSEEyNTYpOworCQkqdmFsdWVfbGVuID0gU0hBMjU2X1NVTV9MRU47CiAJfSBlbHNlIGlmIChJTUFHRV9FTkFCTEVfTUQ1ICYmIHN0cmNtcChhbGdvLCAibWQ1IikgPT0gMCkgewogCQltZDVfd2QoKHVuc2lnbmVkIGNoYXIgKilkYXRhLCBkYXRhX2xlbiwgdmFsdWUsIENIVU5LU1pfTUQ1KTsKIAkJKnZhbHVlX2xlbiA9IDE2OwpkaWZmIC0tZ2l0IGEvY29tbW9uL2ltYWdlLXNpZy5jIGIvY29tbW9uL2ltYWdlLXNpZy5jCmluZGV4IDk3M2IwNmQuLjcyMjg0ZWIgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9pbWFnZS1zaWcuYworKysgYi9jb21tb24vaW1hZ2Utc2lnLmMKQEAgLTE0LDE2ICsxNCw3OSBAQAogI2VuZGlmIC8qICFVU0VfSE9TVENDKi8KICNpbmNsdWRlIDxpbWFnZS5oPgogI2luY2x1ZGUgPHJzYS5oPgorI2luY2x1ZGUgPHJzYS1jaGVja3N1bS5oPgogCiAjZGVmaW5lIElNQUdFX01BWF9IQVNIRURfTk9ERVMJCTEwMAogCisjaWZkZWYgVVNFX0hPU1RDQwordm9pZCAqaG9zdF9ibG9iOwordm9pZCBpbWFnZV9zZXRfaG9zdF9ibG9iKHZvaWQgKmJsb2IpCit7CisJaG9zdF9ibG9iID0gYmxvYjsKK30KK3ZvaWQgKmltYWdlX2dldF9ob3N0X2Jsb2Iodm9pZCkKK3sKKwlyZXR1cm4gaG9zdF9ibG9iOworfQorI2VuZGlmCisKK3N0cnVjdCBjaGVja3N1bV9hbGdvIGNoZWNrc3VtX2FsZ29zW10gPSB7CisJeworCQkic2hhMSIsCisJCVNIQTFfU1VNX0xFTiwKKwkJUlNBMjA0OF9CWVRFUywKKyNpZiBJTUFHRV9FTkFCTEVfU0lHTgorCQlFVlBfc2hhMSwKKyNlbmRpZgorCQlzaGExX2NhbGN1bGF0ZSwKKwkJcGFkZGluZ19zaGExX3JzYTIwNDgsCisJfSwKKwl7CisJCSJzaGEyNTYiLAorCQlTSEEyNTZfU1VNX0xFTiwKKwkJUlNBMjA0OF9CWVRFUywKKyNpZiBJTUFHRV9FTkFCTEVfU0lHTgorCQlFVlBfc2hhMjU2LAorI2VuZGlmCisJCXNoYTI1Nl9jYWxjdWxhdGUsCisJCXBhZGRpbmdfc2hhMjU2X3JzYTIwNDgsCisJfSwKKwl7CisJCSJzaGEyNTYiLAorCQlTSEEyNTZfU1VNX0xFTiwKKwkJUlNBNDA5Nl9CWVRFUywKKyNpZiBJTUFHRV9FTkFCTEVfU0lHTgorCQlFVlBfc2hhMjU2LAorI2VuZGlmCisJCXNoYTI1Nl9jYWxjdWxhdGUsCisJCXBhZGRpbmdfc2hhMjU2X3JzYTQwOTYsCisJfQorCit9OworCiBzdHJ1Y3QgaW1hZ2Vfc2lnX2FsZ28gaW1hZ2Vfc2lnX2FsZ29zW10gPSB7CiAJewogCQkic2hhMSxyc2EyMDQ4IiwKIAkJcnNhX3NpZ24sCiAJCXJzYV9hZGRfdmVyaWZ5X2RhdGEsCiAJCXJzYV92ZXJpZnksCisJCSZjaGVja3N1bV9hbGdvc1swXSwKKwl9LAorCXsKKwkJInNoYTI1Nixyc2EyMDQ4IiwKKwkJcnNhX3NpZ24sCisJCXJzYV9hZGRfdmVyaWZ5X2RhdGEsCisJCXJzYV92ZXJpZnksCisJCSZjaGVja3N1bV9hbGdvc1sxXSwKKwl9LAorCXsKKwkJInNoYTI1Nixyc2E0MDk2IiwKKwkJcnNhX3NpZ24sCisJCXJzYV9hZGRfdmVyaWZ5X2RhdGEsCisJCXJzYV92ZXJpZnksCisJCSZjaGVja3N1bV9hbGdvc1syXSwKIAl9CisKIH07CiAKIHN0cnVjdCBpbWFnZV9zaWdfYWxnbyAqaW1hZ2VfZ2V0X3NpZ19hbGdvKGNvbnN0IGNoYXIgKm5hbWUpCmRpZmYgLS1naXQgYS9jb21tb24vbWFpbi5jIGIvY29tbW9uL21haW4uYwppbmRleCA4YjZmMjc0Li5lNTRmNjNiIDEwMDY0NAotLS0gYS9jb21tb24vbWFpbi5jCisrKyBiL2NvbW1vbi9tYWluLmMKQEAgLTQyNyw2ICs0MjcsMTIgQEAKIAogCWJvb3RzdGFnZV9tYXJrX25hbWUoQk9PVFNUQUdFX0lEX01BSU5fTE9PUCwgIm1haW5fbG9vcCIpOwogCisjaWZuZGVmIENPTkZJR19TWVNfR0VORVJJQ19CT0FSRAorCXB1dHMoIldhcm5pbmc6IFlvdXIgYm9hcmQgZG9lcyBub3QgdXNlIGdlbmVyaWMgYm9hcmQuIFBsZWFzZSByZWFkXG4iKTsKKwlwdXRzKCJkb2MvUkVBRE1FLmdlbmVyaWMtYm9hcmQgYW5kIHRha2UgYWN0aW9uLiBCb2FyZHMgbm90XG4iKTsKKwlwdXRzKCJ1cGdyYWRlZCBieSB0aGUgbGF0ZSAyMDE0IG1heSBicmVhayBvciBiZSByZW1vdmVkLlxuIik7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19NT0RFTV9TVVBQT1JUCiAJZGVidWcoIkRFQlVHOiBtYWluX2xvb3A6ICAgZG9fbWRtX2luaXQ9JWRcbiIsIGRvX21kbV9pbml0KTsKIAlpZiAoZG9fbWRtX2luaXQpIHsKZGlmZiAtLWdpdCBhL2NvbW1vbi91c2Jfa2JkLmMgYi9jb21tb24vdXNiX2tiZC5jCmluZGV4IDFhZDY3Y2EuLjBiNzdjMTYgMTAwNjQ0Ci0tLSBhL2NvbW1vbi91c2Jfa2JkLmMKKysrIGIvY29tbW9uL3VzYl9rYmQuYwpAQCAtOTEsNiArOTEsMTIgQEAKICNkZWZpbmUgVVNCX0tCRF9MRURNQVNLCQlcCiAJKFVTQl9LQkRfTlVNTE9DSyB8IFVTQl9LQkRfQ0FQU0xPQ0sgfCBVU0JfS0JEX1NDUk9MTExPQ0spCiAKKy8qCisgKiBVU0IgS2V5Ym9hcmQgcmVwb3J0cyBhcmUgOCBieXRlcyBpbiBib290IHByb3RvY29sLgorICogQXBwZW5kaXggQiBvZiBISUQgRGV2aWNlIENsYXNzIERlZmluaXRpb24gMS4xMQorICovCisjZGVmaW5lIFVTQl9LQkRfQk9PVF9SRVBPUlRfU0laRSA4CisKIHN0cnVjdCB1c2Jfa2JkX3BkYXRhIHsKIAl1aW50MzJfdAlyZXBlYXRfZGVsYXk7CiAKQEAgLTk5LDcgKzEwNSw3IEBACiAJdWludDhfdAkJdXNiX2tiZF9idWZmZXJbVVNCX0tCRF9CVUZGRVJfTEVOXTsKIAogCXVpbnQ4X3QJCSpuZXc7Ci0JdWludDhfdAkJb2xkWzhdOworCXVpbnQ4X3QJCW9sZFtVU0JfS0JEX0JPT1RfUkVQT1JUX1NJWkVdOwogCiAJdWludDhfdAkJZmxhZ3M7CiB9OwpAQCAtMTMxLDcgKzEzNyw4IEBACiAJLyogU3VibWl0IGEgaW50ZXJydXB0IHRyYW5zZmVyIHJlcXVlc3QgKi8KIAltYXhwID0gdXNiX21heHBhY2tldCh1c2Jfa2JkX2RldiwgcGlwZSk7CiAJdXNiX3N1Ym1pdF9pbnRfbXNnKHVzYl9rYmRfZGV2LCBwaXBlLCBkYXRhLT5uZXcsCi0JCQltYXhwID4gOCA/IDggOiBtYXhwLCBlcC0+YkludGVydmFsKTsKKwkJbWluKG1heHAsIFVTQl9LQkRfQk9PVF9SRVBPUlRfU0laRSksCisJCWVwLT5iSW50ZXJ2YWwpOwogfQogCiAvKiBQdXRzIGNoYXJhY3RlciBpbiB0aGUgcXVldWUgYW5kIHNldHMgdXAgdGhlIGluIGFuZCBvdXQgcG9pbnRlci4gKi8KQEAgLTI2Niw4ICsyNzMsMTEgQEAKIAkJb2xkID0gZGF0YS0+b2xkOwogCX0KIAotCWlmICgob2xkW2ldID4gMykgJiYgKG1lbXNjYW4obmV3ICsgMiwgb2xkW2ldLCA2KSA9PSBuZXcgKyA4KSkKKwlpZiAoKG9sZFtpXSA+IDMpICYmCisJICAgIChtZW1zY2FuKG5ldyArIDIsIG9sZFtpXSwgVVNCX0tCRF9CT09UX1JFUE9SVF9TSVpFIC0gMikgPT0KKwkJCW5ldyArIFVTQl9LQkRfQk9PVF9SRVBPUlRfU0laRSkpIHsKIAkJcmVzIHw9IHVzYl9rYmRfdHJhbnNsYXRlKGRhdGEsIG9sZFtpXSwgZGF0YS0+bmV3WzBdLCB1cCk7CisJfQogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTI4NSw3ICsyOTUsNyBAQAogCWVsc2UgaWYgKChkYXRhLT5uZXdbMF0gPT0gTEVGVF9DTlRSKSB8fCAoZGF0YS0+bmV3WzBdID09IFJJR0hUX0NOVFIpKQogCQlkYXRhLT5mbGFncyB8PSBVU0JfS0JEX0NUUkw7CiAKLQlmb3IgKGkgPSAyOyBpIDwgODsgaSsrKSB7CisJZm9yIChpID0gMjsgaSA8IFVTQl9LQkRfQk9PVF9SRVBPUlRfU0laRTsgaSsrKSB7CiAJCXJlcyB8PSB1c2Jfa2JkX3NlcnZpY2Vfa2V5KGRldiwgaSwgMCk7CiAJCXJlcyB8PSB1c2Jfa2JkX3NlcnZpY2Vfa2V5KGRldiwgaSwgMSk7CiAJfQpAQCAtMjk3LDcgKzMwNyw3IEBACiAJaWYgKHJlcyA9PSAxKQogCQl1c2Jfa2JkX3NldGxlZChkZXYpOwogCi0JbWVtY3B5KGRhdGEtPm9sZCwgZGF0YS0+bmV3LCA4KTsKKwltZW1jcHkoZGF0YS0+b2xkLCBkYXRhLT5uZXcsIFVTQl9LQkRfQk9PVF9SRVBPUlRfU0laRSk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTMwNSw3ICszMTUsOCBAQAogLyogS2V5Ym9hcmQgaW50ZXJydXB0IGhhbmRsZXIgKi8KIHN0YXRpYyBpbnQgdXNiX2tiZF9pcnEoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKIHsKLQlpZiAoKGRldi0+aXJxX3N0YXR1cyAhPSAwKSB8fCAoZGV2LT5pcnFfYWN0X2xlbiAhPSA4KSkgeworCWlmICgoZGV2LT5pcnFfc3RhdHVzICE9IDApIHx8CisJICAgIChkZXYtPmlycV9hY3RfbGVuICE9IFVTQl9LQkRfQk9PVF9SRVBPUlRfU0laRSkpIHsKIAkJZGVidWcoIlVTQiBLQkQ6IEVycm9yICVsWCwgbGVuICVkXG4iLAogCQkgICAgICBkZXYtPmlycV9zdGF0dXMsIGRldi0+aXJxX2FjdF9sZW4pOwogCQlyZXR1cm4gMTsKQEAgLTMzMyw3ICszNDQsOCBAQAogCS8qIFN1Ym1pdCBhIGludGVycnVwdCB0cmFuc2ZlciByZXF1ZXN0ICovCiAJbWF4cCA9IHVzYl9tYXhwYWNrZXQoZGV2LCBwaXBlKTsKIAl1c2Jfc3VibWl0X2ludF9tc2coZGV2LCBwaXBlLCAmZGF0YS0+bmV3WzBdLAotCQkJbWF4cCA+IDggPyA4IDogbWF4cCwgZXAtPmJJbnRlcnZhbCk7CisJCW1pbihtYXhwLCBVU0JfS0JEX0JPT1RfUkVQT1JUX1NJWkUpLAorCQllcC0+YkludGVydmFsKTsKIAogCXVzYl9rYmRfaXJxX3dvcmtlcihkZXYpOwogI2VsaWYJZGVmaW5lZChDT05GSUdfU1lTX1VTQl9FVkVOVF9QT0xMX1ZJQV9DT05UUk9MX0VQKQpAQCAtMzQxLDggKzM1Myw4IEBACiAJc3RydWN0IHVzYl9rYmRfcGRhdGEgKmRhdGEgPSBkZXYtPnByaXZwdHI7CiAJaWZhY2UgPSAmZGV2LT5jb25maWcuaWZfZGVzY1swXTsKIAl1c2JfZ2V0X3JlcG9ydChkZXYsIGlmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCi0JCQkxLCAwLCBkYXRhLT5uZXcsIHNpemVvZihkYXRhLT5uZXcpKTsKLQlpZiAobWVtY21wKGRhdGEtPm9sZCwgZGF0YS0+bmV3LCBzaXplb2YoZGF0YS0+bmV3KSkpCisJCSAgICAgICAxLCAwLCBkYXRhLT5uZXcsIFVTQl9LQkRfQk9PVF9SRVBPUlRfU0laRSk7CisJaWYgKG1lbWNtcChkYXRhLT5vbGQsIGRhdGEtPm5ldywgVVNCX0tCRF9CT09UX1JFUE9SVF9TSVpFKSkKIAkJdXNiX2tiZF9pcnFfd29ya2VyKGRldik7CiAjZW5kaWYKIH0KQEAgLTQ0MSw3ICs0NTMsOCBAQAogCW1lbXNldChkYXRhLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9rYmRfcGRhdGEpKTsKIAogCS8qIGFsbG9jYXRlIGlucHV0IGJ1ZmZlciBhbGlnbmVkIGFuZCBzaXplZCB0byBVU0IgRE1BIGFsaWdubWVudCAqLwotCWRhdGEtPm5ldyA9IG1lbWFsaWduKFVTQl9ETUFfTUlOQUxJR04sIHJvdW5kdXAoOCwgVVNCX0RNQV9NSU5BTElHTikpOworCWRhdGEtPm5ldyA9IG1lbWFsaWduKFVTQl9ETUFfTUlOQUxJR04sCisJCXJvdW5kdXAoVVNCX0tCRF9CT09UX1JFUE9SVF9TSVpFLCBVU0JfRE1BX01JTkFMSUdOKSk7CiAKIAkvKiBJbnNlcnQgcHJpdmF0ZSBkYXRhIGludG8gVVNCIGRldmljZSBzdHJ1Y3R1cmUgKi8KIAlkZXYtPnByaXZwdHIgPSBkYXRhOwpAQCAtNDU5LDcgKzQ3Miw4IEBACiAJdXNiX3NldF9pZGxlKGRldiwgaWZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwgUkVQRUFUX1JBVEUsIDApOwogCiAJZGVidWcoIlVTQiBLQkQ6IGVuYWJsZSBpbnRlcnJ1cHQgcGlwZS4uLlxuIik7Ci0JaWYgKHVzYl9zdWJtaXRfaW50X21zZyhkZXYsIHBpcGUsIGRhdGEtPm5ldywgbWF4cCA+IDggPyA4IDogbWF4cCwKKwlpZiAodXNiX3N1Ym1pdF9pbnRfbXNnKGRldiwgcGlwZSwgZGF0YS0+bmV3LAorCQkJICAgICAgIG1pbihtYXhwLCBVU0JfS0JEX0JPT1RfUkVQT1JUX1NJWkUpLAogCQkJICAgICAgIGVwLT5iSW50ZXJ2YWwpIDwgMCkgewogCQlwcmludGYoIkZhaWxlZCB0byBnZXQga2V5Ym9hcmQgc3RhdGUgZnJvbSBkZXZpY2UgJTA0eDolMDR4XG4iLAogCQkgICAgICAgZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yLCBkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKZGlmZiAtLWdpdCBhL2RvYy9Eb2NCb29rLy5naXRpZ25vcmUgYi9kb2MvRG9jQm9vay8uZ2l0aWdub3JlCmluZGV4IDcyMGYyNDUuLjdlYmQ1NDYgMTAwNjQ0Ci0tLSBhL2RvYy9Eb2NCb29rLy5naXRpZ25vcmUKKysrIGIvZG9jL0RvY0Jvb2svLmdpdGlnbm9yZQpAQCAtMTAsNSArMTAsNiBAQAogKi5vdXQKICoucG5nCiAqLmdpZgorKi5zdmcKIG1lZGlhLWluZGljZXMudG1wbAogbWVkaWEtZW50aXRpZXMudG1wbApkaWZmIC0tZ2l0IGEvZG9jL0RvY0Jvb2svTWFrZWZpbGUgYi9kb2MvRG9jQm9vay9NYWtlZmlsZQppbmRleCA5YjRhOWI2Li41OTMyMzdmIDEwMDY0NAotLS0gYS9kb2MvRG9jQm9vay9NYWtlZmlsZQorKysgYi9kb2MvRG9jQm9vay9NYWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQAogIyBUaGUgdGFyZ2V0cyB0aGF0IG1heSBiZSB1c2VkLgogUEhPTlkgKz0geG1sZG9jcyBzZ21sZG9jcyBwc2RvY3MgcGRmZG9jcyBodG1sZG9jcyBtYW5kb2NzIGluc3RhbGxtYW5kb2NzIGNsZWFuZG9jcwogCit0YXJnZXRzICs9ICQoRE9DQk9PS1MpCiBCT09LUyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoRE9DQk9PS1MpKQogeG1sZG9jczogJChCT09LUykKIHNnbWxkb2NzOiB4bWxkb2NzCkBAIC00NCwxNyArNDUsMTggQEAKIAogTUFOIDo9ICQocGF0c3Vic3QgJS54bWwsICUuOSwgJChCT09LUykpCiBtYW5kb2NzOiAkKE1BTikKKwkkKGlmICQod2lsZGNhcmQgJChvYmopL21hbi8qLjkpLGd6aXAgLWYgJChvYmopL21hbi8qLjkpCiAKIGluc3RhbGxtYW5kb2NzOiBtYW5kb2NzCiAJbWtkaXIgLXAgL3Vzci9sb2NhbC9tYW4vbWFuOS8KLQlpbnN0YWxsIGRvYy9Eb2NCb29rL21hbi8qLjkuZ3ogL3Vzci9sb2NhbC9tYW4vbWFuOS8KKwlpbnN0YWxsICQob2JqKS9tYW4vKi45Lmd6IC91c3IvbG9jYWwvbWFuL21hbjkvCiAKICMjIwogI0V4dGVybmFsIHByb2dyYW1zIHVzZWQKIEtFUk5FTERPQyA9ICQoc3JjdHJlZSkvc2NyaXB0cy9rZXJuZWwtZG9jCiBET0NQUk9DICAgPSAkKG9ianRyZWUpL3NjcmlwdHMvZG9jcHJvYwogCi1YTUxUT0ZMQUdTID0gLW0gJChzcmN0cmVlKS9kb2MvRG9jQm9vay9zdHlsZXNoZWV0LnhzbAorWE1MVE9GTEFHUyA9IC1tICQoc3JjdHJlZSkvJChzcmMpL3N0eWxlc2hlZXQueHNsCiBYTUxUT0ZMQUdTICs9IC0tc2tpcC12YWxpZGF0aW9uCiAKICMjIwpAQCAtNzYsMjEgKzc4LDkgQEAKICAgICAgICAgKSA+ICQoZGlyICRAKS4kKG5vdGRpciAkQCkuY21kCiBlbmRlZgogCi0lLnhtbDogJS50bXBsIEZPUkNFCislLnhtbDogJS50bXBsICQoS0VSTkVMRE9DKSAkKERPQ1BST0MpIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWRfcnVsZSxkb2Nwcm9jKQogCi0jIyMKLSNSZWFkIGluIGFsbCBzYXZlZCBkZXBlbmRlbmN5IGZpbGVzCi1jbWRfZmlsZXMgOj0gJCh3aWxkY2FyZCAkKGZvcmVhY2ggZiwkKEJPT0tTKSwkKGRpciAkKGYpKS4kKG5vdGRpciAkKGYpKS5jbWQpKQotCi1pZm5lcSAoJChjbWRfZmlsZXMpLCkKLSAgaW5jbHVkZSAkKGNtZF9maWxlcykKLWVuZGlmCi0KLSMjIwotIyBDaGFuZ2VzIGluIGtlcm5lbC1kb2MgZm9yY2UgYSByZWJ1aWxkIG9mIGFsbCBkb2N1bWVudGF0aW9uCi0kKEJPT0tTKTogJChLRVJORUxET0MpCi0KICMgVGVsbCBrYnVpbGQgdG8gYWx3YXlzIGJ1aWxkIHRoZSBwcm9ncmFtcwogYWx3YXlzIDo9ICQoaG9zdHByb2dzLXkpCiAKQEAgLTEyOCwxNiArMTE4LDE2IEBACiAKIAogaW5kZXggPSBpbmRleC5odG1sCi1tYWluX2lkeCA9IGRvYy9Eb2NCb29rLyQoaW5kZXgpCittYWluX2lkeCA9ICQob2JqKS8kKGluZGV4KQogYnVpbGRfbWFpbl9pbmRleCA9IHJtIC1yZiAkKG1haW5faWR4KTsgXAogCQkgICBlY2hvICc8aDE+VS1Cb290IEJvb3Rsb2FkZXIgSFRNTCBEb2N1bWVudGF0aW9uPC9oMT4nID4+ICQobWFpbl9pZHgpICYmIFwKIAkJICAgZWNobyAnPGgyPlUtQm9vdCBWZXJzaW9uOiAkKFVCT09UVkVSU0lPTik8L2gyPicgPj4gJChtYWluX2lkeCkgJiYgXAogCQkgICBjYXQgJChIVE1MKSA+PiAkKG1haW5faWR4KQogCiBxdWlldF9jbWRfZGIyaHRtbCA9IEhUTUwgICAgJEAKLSAgICAgIGNtZF9kYjJodG1sID0geG1sdG8geGh0bWwgJChYTUxUT0ZMQUdTKSAtbyAkKHBhdHN1YnN0ICUuaHRtbCwlLCRAKSAkPCAmJiBcCisgICAgICBjbWRfZGIyaHRtbCA9IHhtbHRvIGh0bWwgJChYTUxUT0ZMQUdTKSAtbyAkKHBhdHN1YnN0ICUuaHRtbCwlLCRAKSAkPCAmJiBcCiAJCWVjaG8gJzxhIEhSRUY9IiQocGF0c3Vic3QgJS5odG1sLCUsJChub3RkaXIgJEApKS9pbmRleC5odG1sIj4gXAotICAgICAgICAkKHBhdHN1YnN0ICUuaHRtbCwlLCQobm90ZGlyICRAKSk8L2E+PHA+JyA+ICRACisJCSQocGF0c3Vic3QgJS5odG1sLCUsJChub3RkaXIgJEApKTwvYT48cD4nID4gJEAKIAogJS5odG1sOgklLnhtbAogCUAod2hpY2ggeG1sdG8gPiAvZGV2L251bGwgMj4mMSkgfHwgXApAQCAtMTQ5LDcgKzEzOSw3IEBACiAgICAgICAgICAgICBjcCAkKFBORy0kKGJhc2VuYW1lICQobm90ZGlyICRAKSkpICQocGF0c3Vic3QgJS5odG1sLCUsJEApOyBmaQogCiBxdWlldF9jbWRfZGIybWFuID0gTUFOICAgICAkQAotICAgICAgY21kX2RiMm1hbiA9IGlmIGdyZXAgLXEgcmVmZW50cnkgJDw7IHRoZW4geG1sdG8gbWFuICQoWE1MVE9GTEFHUykgLW8gJChvYmopL21hbiAkPCA7IGd6aXAgLWYgJChvYmopL21hbi8qLjk7IGZpCisgICAgICBjbWRfZGIybWFuID0gaWYgZ3JlcCAtcSByZWZlbnRyeSAkPDsgdGhlbiB4bWx0byBtYW4gJChYTUxUT0ZMQUdTKSAtbyAkKG9iaikvbWFuICQ8IDsgZmkKICUuOSA6ICUueG1sCiAJQCh3aGljaCB4bWx0byA+IC9kZXYvbnVsbCAyPiYxKSB8fCBcCiAJIChlY2hvICIqKiogWW91IG5lZWQgdG8gaW5zdGFsbCB4bWx0byAqKioiOyBcCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLmI0ODYwcWRzIGIvZG9jL1JFQURNRS5iNDg2MHFkcwppbmRleCAzZGE3N2Q5Li5lYWRhMGM3IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLmI0ODYwcWRzCisrKyBiL2RvYy9SRUFETUUuYjQ4NjBxZHMKQEAgLTMyOCwzICszMjgsMzkgQEAKICAgIE9uIExpbnV4IHRoZSBpbnRlcmZhY2VzIGFyZSByZW5hbWVkIGFzOgogCS4gZXRoMiAtPiBmbTEtZ2IyCiAJLiBldGgzIC0+IGZtMS1nYjMKKworTkFORCBib290IHdpdGggMiBTdGFnZSBib290IGxvYWRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUEJMIGluaXRpYWxpc2UgdGhlIGludGVybmFsIFNSQU0gYW5kIGNvcHkgU1BMKDE2MEtCKSBpbiBTUkFNLgorU1BMIGZ1cnRoZXIgaW5pdGlhbGlzZSBERFIgdXNpbmcgU1BEIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIGNvcHkKK3UtYm9vdCg3NjggS0IpIGZyb20gZmxhc2ggdG8gRERSLgorRmluYWxseSBTUEwgdHJhbnNlciBjb250cm9sIHRvIHUtYm9vdCBmb3IgZnV0aGVyIGJvb3RpbmcuCisKK1NQTCBoYXMgZm9sbG93aW5nIGZlYXR1cmVzOgorIC0gRXhlY3V0ZXMgd2l0aGluIDI1NksKKyAtIE5vIHJlbG9jYXRpb24gcmVxdWlyZWQKKworIFJ1biB0aW1lIHZpZXcgb2YgU1BMIGZyYW1ld29yayBkdXJpbmcgIGJvb3QgOi0KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFyZWEgICAgICAgIHwgQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlY3VyZSBib290IHwgMHhGRkZDMDAwMCAoMzJLQikgICAgICAgICAgICAgICB8CisgaGVhZGVycyAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdELCBCRCAgICAgIHwgMHhGRkZDODAwMCAoNEtCKSAgICAgICAgICAgICAgICB8CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBFTlYgICAgICAgICB8IDB4RkZGQzkwMDAgKDhLQikgICAgICAgICAgICAgICAgfAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSEVBUCAgICAgICAgfCAweEZGRkNCMDAwICgzMEtCKSAgICAgICAgICAgICAgIHwKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNUQUNLICAgICAgIHwgMHhGRkZEODAwMCAoMjJLQikgICAgICAgICAgICAgICB8CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVLWJvb3QgU1BMICB8IDB4RkZGRDgwMDAgKDE2MEtCKSAgICAgICAgICAgICAgfAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05BTkQgRmxhc2ggbWVtb3J5IE1hcCBvbiBCNDg2MCBhbmQgQjQ0MjBRRFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFN0YXJ0CQkgRW5kCQlEZWZpbml0aW9uCQkJU2l6ZQorMHgwMDAwMDAJMHgwRkZGRkYJdS1ib290ICAgICAgICAgICAgICAgICAgICAgICAgICAxTUIKKzB4MTQwMDAwCTB4MTVGRkZGCXUtYm9vdCBlbnYgICAgICAgICAgICAgICAgICAgICAgMTI4S0IKKzB4MUEwMDAwCTB4MUJGRkZGCUZNQU4gVWNvZGUgICAgICAgICAgICAgICAgICAgICAgMTI4S0IKZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUuY29uc29sZSBiL2RvYy9SRUFETUUuY29uc29sZQppbmRleCBjOWVmNTllLi5hYWRmNTk2IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLmNvbnNvbGUKKysrIGIvZG9jL1JFQURNRS5jb25zb2xlCkBAIC0yNSw3ICsyNSw3IEBACiBhc3NpZ25pbmcgaXRzIG5hbWUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUuIEZvcgogZXhhbXBsZToKIAotICAgIHNldGVudiBzdGRpbiB3bF9rYmQJCTwtIFRvIHVzZSB0aGUgd2lyZWxlc3Mga2V5Ym9hcmQKKyAgICBzZXRlbnYgc3RkaW4gc2VyaWFsCQk8LSBUbyB1c2UgdGhlIHNlcmlhbCBpbnB1dAogICAgIHNldGVudiBzdGRvdXQgdmlkZW8JCTwtIFRvIHVzZSB0aGUgdmlkZW8gY29uc29sZQogCiBEbyBhIHNpbXBsZSAic2F2ZWVudiIgdG8gc2F2ZSB0aGUgY29uc29sZSBzZXR0aW5ncyBpbiB0aGUgZW52aXJvbm1lbnQKQEAgLTk5LDQgKzk5LDMgQEAKIENSRURJVFMgZm9yIG90aGVyIGNvbnRhY3QgaW5mb3JtYXRpb25zKToKIAogLSBNUEM4MjNGQURTIHdpdGggQUQ3MTc2IG9uIGEgUEFMIFRWIChZQ2JZQ3IpCS0gYXJzZW5pb0B0aW4uaXQKLS0gR0VOSUVUViAgICB3aXRoIEFENzE3NyBvbiBhIFBBTCBUViAoWUNiWUNyKQktIGFyc2VuaW9AdGluLml0CmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLmdlbmVyaWMtYm9hcmQgYi9kb2MvUkVBRE1FLmdlbmVyaWMtYm9hcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkM2EyNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9SRUFETUUuZ2VuZXJpYy1ib2FyZApAQCAtMCwwICsxLDE4OSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMTQgR29vZ2xlLCBJbmMKKyMgU2ltb24gR2xhc3MgPHNqZ0BjaHJvbWl1bS5vcmc+CisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKworIworCitERVBSRUNBVElPTiBOT1RJQ0UgRk9SIGFyY2gvPGFyY2g+L2xpYi9ib2FyZC5jCisKK0ZvciBib2FyZCBtYWludGFpbmVyczogUGxlYXNlIHN1Ym1pdCBwYXRjaGVzIGZvciBib2FyZHMgeW91IG1haW50YWluIGJlZm9yZQorSnVseSAyMDE0LCB0byBtYWtlIHRoZW0gdXNlIGdlbmVyaWMgYm9hcmQuCisKK0ZvciBhcmNoaXRlY3R1cmUgbWFpbnRhaW5lcnM6IFBsZWFzZSBzdWJtaXQgcGF0Y2hlcyB0byByZW1vdmUgeW91cgorYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJvYXJkLmMgZmlsZSBiZWZvcmUgT2N0b2JlciAyMDE0LgorCisKK0JhY2tncm91bmQKKy0tLS0tLS0tLS0KKworVS1Cb290IGhhcyB0cmFuZGl0aW9uYWxseSBoYWQgYSBib2FyZC5jIGZpbGUgZm9yIGVhY2ggYXJjaGl0ZWN0dXJlLiBUaGlzIGhhcworaW50cm9kdWNlZCBxdWl0ZSBhIGxvdCBvZiBkdXBsaWNhdGlvbiwgd2l0aCBlYWNoIGFyY2hpdGVjdHVyZSB0ZW5kaW5nIHRvIGRvCitpbml0aWFsaXNhdGlvbiBzbGlnaHRseSBkaWZmZXJlbnRseS4gVG8gYWRkcmVzcyB0aGlzLCBhIG5ldyAnZ2VuZXJpYyBib2FyZAoraW5pdCcgZmVhdHVyZSB3YXMgaW50cm9kdWNlZCBhIHllYXIgYWdvIGluIE1hcmNoIDIwMTMgKGZ1cnRoZXIgbW90aXZhdGlvbiBpcworcHJvdmlkZWQgaW4gdGhlIGNvdmVyIGxldHRlciBiZWxvdykuCisKKworV2hhdCBoYXMgY2hhbmdlZD8KKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtYWluIGNoYW5nZSBpcyB0aGF0IHRoZSBhcmNoLzxhcmNoPi9saWIvYm9hcmQuYyBmaWxlIGlzIGJlaW5nIHJlbW92ZWQgaW4KK2Zhdm91ciBvZiBjb21tb24vYm9hcmRfZi5jIChmb3IgcHJlLXJlbG9jYXRpb24gaW5pdCkgYW5kIGNvbW1vbi9ib2FyZF9yLmMKKyhmb3IgcG9zdC1yZWxvY2F0aW9uIGluaXQpLgorCitSZWxhdGVkIHRvIHRoaXMsIHRoZSBnbG9iYWxfZGF0YSBhbmQgYmRfdCBzdHJ1Y3R1cmVzIG5vdyBoYXZlIGEgY29yZSBzZXQgb2YKK2ZpZWxkcyB3aGljaCBhcmUgY29tbW9uIHRvIGFsbCBhcmNoaXRlY3R1cmVzLiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmllbGRzCitoYXZlIGJlZW4gbW92ZWQgdG8gc2VwYXJhdGUgc3RydWN0dXJlcy4KKworCitTdXBwb3J0ZWQgQXJjdGhpdGVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgYXJlIHVubHVja3kgdGhlbiB5b3VyIGFyY2hpdGVjdHVyZSBtYXkgbm90IHN1cHBvcnQgZ2VuZXJpYyBib2FyZC4KK1RoZSBmb2xsb3dpbmcgYXJjaGl0ZWN0dXJlcyBhcmUgc3VwcG9ydGVkIGF0IHRoZSB0aW1lIG9mIHdyaXRpbmc6CisKKyAgIGFyYworICAgYXJtCisgICBwb3dlcnBjCisgICBzYW5kYm94CisgICB4ODYKKworSWYgeW91ciBhcmNoaXRlY3R1cmUgaXMgbm90IHN1cHBvcnRlZCwgeW91IG5lZWQgdG8gYWRqdXN0IHlvdXIKK2FyY2gvPGFyY2g+L2NvbmZpZy5tayBmaWxlIHRvIGluY2x1ZGU6CisKKyAgIF9fSEFWRV9BUkNIX0dFTkVSSUNfQk9BUkQgOj0geQorCithbmQgdGVzdCBpdCB3aXRoIGEgc3VpdGFibGUgYm9hcmQsIGFzIGZvbGxvd3MuCisKKworQWRkaW5nIFN1cHBvcnQgZm9yIHlvdXIgQm9hcmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGVuYWJsZSBnZW5lcmljIGJvYXJkIGZvciB5b3VyIGJvYXJkLCBkZWZpbmUgQ09ORklHX1NZU19HRU5FUklDX0JPQVJEIGluCit5b3VyIGJvYXJkIGNvbmZpZyBoZWFkZXIgZmlsZS4KKworVGVzdCB0aGF0IFUtQm9vdCBzdGlsbCBmdW5jdGlvbnMgY29ycmVjdGx5IG9uIHlvdXIgYm9hcmQsIGFuZCBmaXggYW55Citwcm9ibGVtcyB5b3UgZmluZC4gRG9uJ3QgYmUgc3VycHJpc2VkIGlmIHRoZXJlIGFyZSBubyBwcm9ibGVtcyAtIGdlbmVyaWMKK2JvYXJkIGhhcyBoYWQgYSByZWFzb25hYmxlIGFtb3VudCBvZiB0ZXN0aW5nIHdpdGggY29tbW9uIGJvYXJkcy4KKworCitEZWFkTGluZQorLS0tLS0tLS0KKworUGxlYXNlIGRvbid0IHRha2UgdGhpcyB0aGUgd3Jvbmcgd2F5IC0gdGhlcmUgaXMgbm8gaW50ZW50IHRvIG1ha2UgeW91ciBsaWZlCittaXNlcmFibGUsIGFuZCB3ZSBoYXZlIHRoZSBncmVhdGVzdCByZXNwZWN0IGFuZCBhZG1pcmF0aW9uIGZvciBVLUJvb3QgdXNlcnMuCitIb3dldmVyLCB3aXRoIGFueSBtaWdyYXRpb24gdGhlcmUgaGFzIHRvIGJlIGEgcGVyaW9kIHdoZXJlIHRoZSBvbGQgd2F5IGlzCitkZXByZWNhdGVkIGFuZCByZW1vdmVkLiBFdmVyeSBwYXRjaCB0byB0aGUgZGVwcmVjYXRlZCBjb2RlIGludHJvZHVjZXMgYQorcG90ZW50aWFsIGJyZWFrYWdlIGluIHRoZSBuZXcgdW51c2VkIGNvZGUuIFRoZXJlZm9yZToKKworQm9hcmRzIG9yIGFyY2hpdGVjdHVyZXMgbm90IGNvbnZlcnRlZCBvdmVyIHRvIGdlbmVyYWwgYm9hcmQgYnkgdGhlCitlbmQgb2YgMjAxNCBtYXkgYmUgZm9yY2libHkgY2hhbmdlZCBvdmVyIChwb3RlbnRpYWxseSBjYXVzaW5nIHJ1bi10aW1lCiticmVha2FnZSkgb3IgcmVtb3ZlZC4KKworCisKK0Z1cnRoZXIgQmFja2dyb3VuZAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmdWxsIHRleHQgb2YgdGhlIG9yaWdpbmFsIGdlbmVyaWMgYm9hcmQgc2VyaWVzIGlzIHJlcHJvZHVjZWQgYmVsb3cuCisKKy0tODwtLS0tLS0tLS0tLS0tCisKK1RoaXMgc2VyaWVzIGNyZWF0ZXMgYSBnZW5lcmljIGJvYXJkLmMgaW1wbGVtZW50YXRpb24gd2hpY2ggY29udGFpbnMKK3RoZSBlc3NlbnRpYWwgZnVuY3Rpb25zIG9mIHRoZSBtYWpvciBhcmNoL3h4eC9saWIvYm9hcmQuYyBmaWxlcy4KKworV2hhdCBpcyB0aGUgbW90aXZhdGlvbiBmb3IgdGhpcyBjaGFuZ2U/CisKKzEuIFRoZXJlIGlzIGEgbG90IG9mIHJlcGVhdGVkIGNvZGUgaW4gdGhlIGJvYXJkLmMgZmlsZXMuIEFueSBjaGFuZ2UgdG8KK3RoaW5ncyBsaWtlIHNldHRpbmcgdXAgdGhlIGJhdWQgcmF0ZSByZXF1aXJlcyBhIGNoYW5nZSBpbiAxMCBzZXBhcmF0ZQorcGxhY2VzLgorCisyLiBTaW5jZSB0aGVyZSBhcmUgMTAgc2VwYXJhdGUgZmlsZXMsIGFkZGluZyBhIG5ldyBmZWF0dXJlIHdoaWNoIHJlcXVpcmVzCitpbml0aWFsaXNhdGlvbiBpcyBwYWluZnVsIHNpbmNlIGl0IG11c3QgYmUgaW5kZXBlbmRlbnRseSBhZGRlZCBpbiAxMAorcGxhY2VzLgorCiszLiBBcyB0aW1lIGdvZXMgYnkgdGhlIGFyY2hpdGVjdHVyZXMgbmF0dXJlbHkgZGl2ZXJnZSBzaW5jZSB0aGVyZSBpcyBsaW1pdGVkCitwcmVzc3VyZSB0byBjb21wYXJlIGZlYXR1cmVzIG9yIGV2ZW4gQ09ORklHIG9wdGlvbnMgYWdhaW5zdCBzaW1paWxhciB0aGluZ3MKK2luIG90aGVyIGJvYXJkLmMgZmlsZXMuCisKKzQuIE5ldyBhcmNoaXRlY3R1cmVzIG11c3QgaW1wbGVtZW50IGFsbCB0aGUgZmVhdHVyZXMgYWxsIG92ZXIgYWdhaW4sIGFuZAorc29tZXRpbWVzIGluIHN1YnRsZXkgZGlmZmVyZW50IHdheXMuIFRoaXMgcGxhY2VzIGFuIHVuZmFpciBidXJkZW4gb24gZ2V0dGluZworYSBuZXcgYXJjaGl0ZWN0dXJlIGZ1bGx5IGZ1bmN0aW9uYWwgYW5kIHJ1bm5pbmcgd2l0aCBVLUJvb3QuCisKKzUuIFdoaWxlIGl0IGlzIGEgYml0IG9mIGEgdHJpY2t5IGNoYW5nZSwgSSBiZWxpZXZlIGl0IGlzIHdvcnRod2hpbGUgYW5kCithY2hpZXZhYmxlLiBUaGVyZSBpcyBubyByZXF1aXJlbWVudCB0aGF0IGFsbCBjb2RlIGJlIGNvbW1vbiwgb25seSB0aGF0Cit0aGUgY29kZSB0aGF0IGlzIGNvbW1vbiBzaG91bGQgYmUgbG9jYXRlZCBpbiBjb21tb24vYm9hcmQuYyByYXRoZXIgdGhhbgorYXJjaC94eHgvbGliL2JvYXJkLmMuCisKK0FsbCB0aGUgZnVuY3Rpb25zIG9mIGJvYXJkX2luaXRfZigpIGFuZCBib2FyZF9pbml0X3IoKSBhcmUgYnJva2VuIGludG8KK3NlcGFyYXRlIGZ1bmN0aW9uIGNhbGxzIHNvIHRoYXQgdGhleSBjYW4gZWFzaWx5IGJlIGluY2x1ZGVkIG9yIGV4Y2x1ZGVkCitmb3IgYSBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZS4gSXQgYWxzbyBtYWtlcyBpdCBlYXNpZXIgdG8gYWRvcHQgR3JhZW1lJ3MKK2luaXRjYWxsIHByb3Bvc2FsIHdoZW4gaXQgaXMgcmVhZHkuCisKK2h0dHA6Ly9saXN0cy5kZW54LmRlL3BpcGVybWFpbC91LWJvb3QvMjAxMi1KYW51YXJ5LzExNDQ5OS5odG1sCisKK1RoaXMgc2VyaWVzIHJlbW92ZXMgdGhlIGRlcGVuZGVuY3kgb24gZ2VuZXJpYyByZWxvY2F0aW9uLiBTbyByZWxvY2F0aW9uCitoYXBwZW5zIGFzIG9uZSBiaWcgY2h1bmsgYW5kIGlzIHN0aWxsIGNvbXBsZXRlbHkgYXJjaC1zcGVjaWZpYy4gU2VlIHRoZQorcmVsb2NhdGlvbiBzZXJpZXMgZm9yIGEgcHJvcG9zZWQgc29sdXRpb24gdG8gdGhpcyBmb3IgQVJNOgorCitodHRwOi8vbGlzdHMuZGVueC5kZS9waXBlcm1haWwvdS1ib290LzIwMTEtRGVjZW1iZXIvMTEyOTI4Lmh0bWwKKworb3IgR3JhZW1lJ3MgcmVjZW50IHg4NiBzZXJpZXMgdjI6CisKK2h0dHA6Ly9saXN0cy5kZW54LmRlL3BpcGVybWFpbC91LWJvb3QvMjAxMi1KYW51YXJ5LzExNDQ2Ny5odG1sCisKK0luc3RlYWQgb2YgbW92aW5nIG92ZXIgYSB3aG9sZSBhcmNoaXRlY3R1cmUsIHRoaXMgc2VyaWVzIHRha2VzIHRoZSBhcHByb2FjaAorb2Ygc2ltcGx5IGVuYWJsaW5nIGdlbmVyaWMgYm9hcmQgc3VwcG9ydCBmb3IgYW4gYXJjaGl0ZWN0dXJlLiBJdCBpcyB0aGVuIHVwCit0byBlYWNoIGJvYXJkIHRvIG9wdCBpbiBieSBkZWZpbmluZyBDT05GSUdfU1lTX0dFTkVSSUNfQk9BUkQgaW4gdGhlIGJvYXJkCitjb25maWcgZmlsZS4gSWYgdGhpcyBpcyBub3QgZG9uZSwgdGhlbiB0aGUgY29kZSB3aWxsIGJlIGdlbmVyYXRlZCBhcworYmVmb3JlLiBUaGlzIGFsbG93cyBib3RoIHNldHMgb2YgY29kZSB0byBjby1leGlzdCB1bnRpbCB3ZSBhcmUgY29tZm9ydGFibGUKK3dpdGggdGhlIGdlbmVyaWMgYXBwcm9hY2gsIGFuZCBlbm91Z2ggYm9hcmRzIHJ1bi4KKworQVJNIGlzIGEgcmVsYXRpdmVseSBsYXJnZSBib2FyZC5jIGZpbGUgYW5kIG9uZSB3aGljaCBJIGNhbiB0ZXN0LCB0aGVyZWZvcmUKK0kgdGhpbmsgaXQgaXMgYSBnb29kIHRhcmdldCBmb3IgdGhpcyBzZXJpZXMuIE9uIHRoZSBvdGhlciBoYW5kLCB4ODYgaXMKK3JlbGF0aXZlbHkgc21hbGwgYW5kIHNpbXBsZSwgYnV0IGRpZmZlcmVudCBlbm91Z2ggdGhhdCBpdCBpbnRyb2R1Y2VzIGEKK2ZldyBpc3N1ZXMgdG8gYmUgc29sdmVkLiBTbyBJIGhhdmUgY2hvc2VuIGJvdGggQVJNIGFuZCB4ODYgZm9yIHRoaXMgc2VyaWVzLgorQWZ0ZXIgYSBzdWdnZXN0aW9uIGZyb20gV29sZmdhbmcgSSBoYXZlIGFkZGVkIFBQQyBhbHNvLiBUaGlzIGlzIHRoZQorbGFyZ2VzdCBhbmQgbW9zdCBmZWF0dXJlLWZ1bGwgYm9hcmQsIHNvIGhvcGVmdWxseSB3ZSBoYXZlIGFsbCBiYXNlcworY292ZXJlZCBpbiB0aGlzIFJGQy4KKworQSBnZW5lcmljIGdsb2JhbF9kYXRhIHN0cnVjdHVyZSBpcyBhbHNvIHJlcXVpcmVkLiBUaGlzIG1pZ2h0IHVwc2V0IGEgZmV3CitwZW9wbGUuIEhlcmUgaXMgbXkgYmFzaWMgcmVhc29uaW5nOiBtb3N0IGZpZWxkcyBhcmUgdGhlIHNhbWUsIGFsbAorYXJjaGl0ZWN0dXJlcyBpbmNsdWRlIGFuZCBuZWVkIGl0LCBtb3N0IGdsb2JhbF9kYXRhLmggZmlsZXMgYWxyZWFkeSBoYXZlCisjaWZkZWZzIHRvIHNlbGVjdCBmaWVsZHMgZm9yIGEgcGFydGljdWxhciBTT0MsIHNvIGl0IGlzIGhhcmQgdG8KK3NlZSB3aHkgYXJjaGl0ZWN1cmVzIGFyZSBkaWZmZXJlbnQgaW4gdGhpcyBhcmVhLiBXZSBjYW4gcGVyaGFwcyBhZGQgYQord2F5IHRvIHB1dCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmllbGRzIGludG8gYSBzZXBhcmF0ZSBoZWFkZXIgZmlsZSwgYnV0Citmb3Igbm93IEkgaGF2ZSBqdWRnZWQgdGhhdCB0byBiZSBjb3VudGVyLXByb2R1Y3RpdmUuCisKK1NpbWlsYXJseSB3ZSBuZWVkIGEgZ2VuZXJpYyBiZF9pbmZvIHN0cnVjdHVyZSwgc2luY2UgZ2VuZXJpYyBjb2RlIHdpbGwKK2JlIGFjY2Vzc2luZyBpdC4gSSBoYXZlIGRvbmUgdGhpcyBpbiB0aGUgc2FtZSB3YXkgYXMgZ2xvYmFsX2RhdGEgYW5kIHRoZQorc2FtZSBjb21tZW50cyBhcHBseS4KKworVGhlcmUgd2FzIGRpY3Vzc2lvbiBvbiB0aGUgbGlzdCBhYm91dCBwYXNzaW5nIGdkX3QgYXJvdW5kIGFzIGEgcGFyYW1ldGVyCit0byBwcmUtcmVsb2NhdGlvbiBpbml0IGZ1bmN0aW9ucy4gSSB0aGluayB0aGlzIG1ha2VzIHNlbnNlLCBidXQgaXQgY2FuCitiZSBkb25lIGFzIGEgc2VwYXJhdGUgY2hhbmdlLCBhbmQgdGhpcyBzZXJpZXMgZG9lcyBub3QgcmVxdWlyZSBpdC4KKworV2hpbGUgdGhpcyBzZXJpZXMgbmVlZHMgdG8gc3RhbmQgb24gaXRzIG93biAoYXMgd2l0aCB0aGUgbGluayBzY3JpcHQKK2NsZWFudXAgc2VyaWVzIGFuZCB0aGUgZ2VuZXJpYyByZWxvY2F0aW9uIHNlcmllcykgdGhlIGdvYWwgaXMgdGhlCit1bmlmaWNhdGlvbiBvZiB0aGUgYm9hcmQgaW5pdCBjb2RlLiBTbyBJIGhvcGUgd2UgY2FuIGFkZHJlc3MgaXNzdWVzIHdpdGgKK3RoaXMgaW4gbWluZCwgcmF0aGVyIHRoYW4gZm9jdXNpbmcgdG9vIG5hcnJvd2x5IG9uIHBhcnRpY3VsYXIgQVJNLCB4ODYgb3IKK1BQQyBpc3N1ZXMuCisKK0kgaGF2ZSBydW4tdGVzdGVkIEFSTSBvbiBUZWdyYSBTZWFib2FyZCBvbmx5LiBUbyB0cnkgaXQgb3V0LCBkZWZpbmUKK0NPTkZJR19TWVNfR0VORVJJQ19CT0FSRCBpbiB5b3VyIGJvYXJkIGZpbGUgYW5kIHJlYnVpbGQuIE1vc3QgbGlrZWx5IG9uCit4ODYgYW5kIFBQQyBhdCBsZWFzdCBpdCB3aWxsIGhhbmcsIGJ1dCBpZiB5b3UgYXJlIGx1Y2t5IGl0IHdpbGwgcHJpbnQKK3NvbWV0aGluZyBmaXJzdCA6LSkKKworSSBoYXZlIHJ1biB0aGlzIHRob3VnaCBNQUtFQUxMIHdpdGggQ09ORklHX1NZU19HRU5FUklDX0JPQVJEIG9uIGZvciBhbGwKK0FSTSwgUFBDIGFuZCB4ODYgYm9hcmRzLiBUaGVyZSBhcmUgYSBmZXcgZmFpbHVyZXMgZHVlIHRvIGVycm9ycyBpbgordGhlIGJvYXJkIGNvbmZpZywgd2hpY2ggSSBoYXZlIHNlbnQgcGF0Y2hlcyBmb3IuIFRoZSBtYWluIGlzc3VlIGlzCitqdXN0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gX19ic3NfZW5kIGFuZCBfX2Jzc19lbmRfXy4KKworTm90ZTogdGhlIGZpcnN0IGdyb3VwIG9mIGNvbW1pdHMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHNlcmllcyB0byBidWlsZCwKK2J1dCBjb3VsZCBiZSBzZXBhcmF0ZWQgb3V0IGlmIHJlcXVpcmVkLiBJIGhhdmUgaW5jbHVkZWQgdGhlbSBoZXJlIGZvcgorY29udmVuaWVuY2UuCisKKy0tLS0tLS0tLS0tLS0+OC0tCisKK1NpbW9uIEdsYXNzLCBzamdAY2hyb21pdW0ub3JnCitNYXJjaCAyMDE0CmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLnBvd2VyLWZyYW1ld29yayBiL2RvYy9SRUFETUUucG93ZXItZnJhbWV3b3JrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNmZkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvUkVBRE1FLnBvd2VyLWZyYW1ld29yawpAQCAtMCwwICsxLDE2NiBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcworIyBMdWthc3ogTWFqZXdza2kgPGwubWFqZXdza2lAc2Ftc3VuZy5jb20+CisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAgICAgIEdQTC0yLjArCisjCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBzZWNvbmQgdmVyc2lvbiBvZiB0aGUgdS1ib290J3MgUE1JQyAoUG93ZXIKK01hbmFnZW1lbnQgSUMpIGZyYW1ld29yay4gQXMgYSByZWZlcmVuY2UgYm9hcmRzIHBsZWFzZSBjb25zaWRlciBTYW1zdW5ncycgVHJhdHMKK2FuZCBUcmF0czIuCisKK0JhY2tncm91bmQKKy0tLS0tLS0tLS0KKworQm9hcmRzIHN1cHBvcnRlZCBieSB1LWJvb3QgYXJlIGdldHRpbmcgaW5jcmVhc2luZ2x5IGNvbXBsZXguIERldmVsb3BlcnMgYW5kCitkZXNpZ25lcnMgc3RyaXZlIHRvIGN1dCBkb3duIHBvd2VyIGNvbnN1bXB0aW9uLiBIZW5jZSBzZXZlcmFsIGRpZmZlcmVudCB0eXBlcyBvZgorZGV2aWNlcyBhcmUgbm93IGF2YWlsYWJsZSBvbiB0aGUgYm9hcmQgLSBuYW1lbHkgcG93ZXIgbWFuYWdlcnMgKFBNSUMpLCBmdWVsCitnYXVnZXMgKEZHKSwgbWljcm8gVVNCIGludGVyZmFjZSBjb250cm9sbGVycyAoTVVJQyksIGJhdHRlcmllcywgbXVsdGktZnVuY3Rpb24KK2RldmljZXMgKE1GRCkuCisKK0V4cGxhbmF0aW9uIG9mIGtleSBkZXNpZ24gZGVjaXNpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPbmUgcGFja2FnZSBjYW4gaW50ZWdyYXRlIFBNSUMgYW5kIE1VSUMgd2l0aCBkaWZmZXJlbnQgYWRkcmVzc2VzIG9uIHRoZSBJMkMgYnVzLgorVGhlIHNhbWUgZGV2aWNlIC0gZS5nLiBNQVg4OTk3IHVzZXMgdHdvIGRpZmZlcmVudCBJMkMgYnVzc2VzIGFuZCBhZGRyZXNzZXMuCisKK1Bvd2VyIGRldmljZXMgdXNlIG5vdCBvbmx5IEkyQyBmb3IgY29tbXVuaWNhdGlvbiwgYnV0IFNQSSBhcyB3ZWxsLiBBZGRpdGlvbmFsbHkKK2RpZmZlcmVudCBJQ3MgdXNlIGRpZmZlcmVudCBlbmRpYW5lc3MuIEZvciB0aGlzIHJlYXNvbiBzdHJ1Y3QgcG1pYyBob2xkcworaW5mb3JtYXRpb24gYWJvdXQgSTJDL1NQSSB0cmFuc21pc3Npb24sIHdoaWNoIGlzIHVzZWQgd2l0aCBnZW5lcmljCitwbWljX3JlcV93cml0ZSgpIGZ1bmN0aW9uLgorCitUaGUgImZsYXQiIGhpZXJhcmNoeSBmb3IgcG93ZXIgZGV2aWNlcyB3b3JrcyB3ZWxsIHdoZW4gZWFjaCBkZXZpY2UgcGVyZm9ybXMgb25seQorb25lIG9wZXJhdGlvbiAtIGUuZy4gUE1JQyBlbmFibGVzIExETy4KKworVGhlIHByb2JsZW0gZW1lcmdlcyB3aGVuIHdlIGhhdmUgYSBkZXZpY2UgKGJhdHRlcnkpIHdoaWNoIGNvbmNlcHR1YWxseSBzaGFsbCBiZQordGhlIG1hc3RlciBhbmQgdXNlcyBtZXRob2RzIGV4cG9ydGVkIGJ5IG90aGVyIGRldmljZXMuIFdlIG5lZWQgdG8gY29udHJvbCBNVUlDCit0byBzdGFydCBjaGFyZ2luZyB0aGUgYmF0dGVyeSwgdXNlIFBNSUMgdG8gcmVkdWNlIGJvYXJkJ3Mgb3ZlcmFsbCBwb3dlcgorY29uc3VtcHRpb24gKGJ5IGRpc2FibGluZyBub3QgbmVlZGVkIExET3MsIEJVQ0tzKSBhbmQgZ2V0IGN1cnJlbnQgc3RhdGUgb2YKK2VuZXJneSBvbiB0aGUgYmF0dGVyeSBmcm9tIEZHLgorVXAgdGlsbCBub3cgdS1ib290IGRvZXNuJ3Qgc3VwcG9ydCBkZXZpY2UgbW9kZWwsIHNvIGEgc2ltcGxlIG9uZSBoYWQgdG8gYmUKK2FkZGVkLgorCitUaGUgZGlyZWN0b3J5IGhpZXJhcmNoeSBoYXMgZm9sbG93aW5nIHN0cnVjdHVyZToKKy4vaW5jbHVkZS9wb3dlci88ZGV2aWNlX25hbWU+XzxkZXZpY2VfZnVuY3Rpb24+LmgKK2UuZy4gLi9pbmNsdWRlL3Bvd2VyL21heDg5OTdfcG1pYy5oCisKKy4vZHJpdmVycy9wb3dlci9wbWljL3Bvd2VyX3tjb3JlIGZpbGVzfS5jCitlLmcuIC4vZHJpdmVycy9wb3dlci9wbWljL3Bvd2VyX2NvcmUuYworCisuL2RyaXZlcnMvcG93ZXIvcG1pYy88ZGV2aWNlX2Z1bmN0aW9uPi88ZGV2aWNlX2Z1bmN0aW9uPl88ZGV2aWNlX25hbWU+LmMKK2UuZy4gLi9kcml2ZXJzL3Bvd2VyL3BtaWMvcG1pY19tYXg4OTk3LmMKK2UuZy4gLi9kcml2ZXJzL3Bvd2VyL2JhdHRlcnkvdHJhdHMvYmF0X3RyYXRzLmMKK2UuZy4gLi9kcml2ZXJzL3Bvd2VyL2Z1ZWxfZ2F1Z2UvZmdfbWF4MTcwNDIuYworCitUaGUgZnJhbWV3b3JrIGNsYXNzaWZpZXMgZGV2aWNlcyBieSB0aGVpciBmdW5jdGlvbiAtIHNlcGFyYXRlIGRpcmVjdG9yaWVzIHNob3VsZAorYmUgbWFpbnRhaW5lZCBmb3IgZGlmZmVyZW50IGNsYXNzZXMgb2YgZGV2aWNlcy4KKworQ3VycmVudCBkZXNpZ24KKy0tLS0tLS0tLS0tLS0tCisKK0V2ZXJ5dGhpbmcgaXMgYSBwb3dlciBkZXZpY2UgZGVzY3JpYmVkIGJ5IHN0cnVjdCBwbWljLiBFdmVuIGJhdHRlcnkgaXMKK2NvbnNpZGVyZWQgYXMgYSB2YWxpZCBwb3dlciBkZXZpY2UuIFRoaXMgaGVscHMgZm9yIGJldHRlciBtYW5hZ2VtZW50IG9mIHRob3NlCitkZXZpY2VzLgorCistIEJsb2NrIGRpYWdyYW0gb2YgdGhlIGhpZXJhcmNoeToKKwkJCS0tLS0tLS0tLS0tLS0tLS0tCisJCS0tLS0tLS0tfCBCQVQgICAgICAgICAgIHwtLS0tLS0tLS0tLS0KKwkJfCAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAorCQl8ICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICB8CisJCXwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwKKwkgICAgICAgXHwvICAgICAgICAgICAgIFx8LyAgICAgICAgICAgICAgICAgXHwvCisJLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tLS0tLS0tLS0tICAgICAgIC0tLS0tLS0tLQorCXxGRyAgICAgICB8ICAgICB8TVVJQyAgICAgICAgICAgfCAgICAgICB8Q0hSRyAgIHwKKwl8ICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICB8CisJLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tLS0tLS0tLS0tICAgICAgIC0tLS0tLS0tLQorCisKKzEuIFdoZW4gaGllcmFyY2h5IGlzIG5vdCBuZWVkZWQgKG5vIGNvbXBsZXggYmF0dGVyeSBjaGFyZ2UpOgorCitEZWZpbml0aW9uIG9mIHRoZSBzdHJ1Y3QgcG1pYyBpcyBvbmx5IHJlcXVpcmVkIHdpdGggcHJvcGVyIG5hbWUgYW5kIHBhcmFtZXRlcnMKK2ZvciBjb21tdW5pY2F0aW9uLiBUaGlzIGlzIGVub3VnaCB0byB1c2UgdGhlICJwbWljIiBjb21tYW5kIGluIHRoZSB1LWJvb3QKK3Byb21wdCB0byBjaGFuZ2UgdmFsdWVzIG9mIGRldmljZSdzIHJlZ2lzdGVyIChlbmFibGUvZGlzYWJsZSBMRE8sIEJVQ0spLgorCitUaGUgUEcsIE1VSUMgYW5kIENIUkcgYWJvdmUgYXJlIHJlZ2FyZGVkIHRvIGJlIGluIHRoZSBzYW1lIGxldmVsIGluIHRoZQoraGllcmFyY2h5LgorCisyLiBDb21wbGV4IGJhdHRlcnkgY2hhcmdpbmcuCisKK1RvIGNoYXJnZSBhIGJhdHRlcnksIGluZm9ybWF0aW9uIGZyb20gc2V2ZXJhbCAiYWJzdHJhY3QiIHBvd2VyIGRldmljZXMgaXMKK25lZWRlZCAoZGVmaW5lZCBhdCAuL2luY2x1ZGUvcG93ZXIvcG1pYy5oKToKKy0gRkcgZGV2aWNlIChzdHJ1Y3QgcG93ZXJfZmcpOgorCSAgICAgLS0gKmZnX2JhdHRlcnlfY2hlY2sgLSBjaGVjayBpZiBiYXR0ZXJ5IGlzIG5vdCBhYm92ZSBpdHMgbGltaXRzCisJICAgICAtLSAqZmdfYmF0dGVyeV91cGRhdGUgLSB1cGRhdGUgdGhlIHBtaWMgZnJhbWV3b3JrIHdpdGggY3VycmVudAorCQkJCSAgICAgYmF0dGVyeSBzdGF0ZSh2b2x0YWdlIGFuZCBjdXJyZW50IGNhcGFjaXR5KQorCistIENoYXJnZXIgZGV2aWNlIChzdHJ1Y3QgcG93ZXJfY2hycSk6CisJICAgICAtLSAqY2hyZ190eXBlIC0gdHlwZS9jYXBhY2l0eSBvZiB0aGUgY2hhcmdlciAoaW5jbHVkaW5nIGluZm9ybWF0aW9uCisJCQkgICAgIGFib3V0IFVTQiBjYWJsZSBkaXNjb25uZWN0aW9uKQorCSAgICAgLS0gKmNocmdfYmF0X3ByZXNlbnQgLSBkZXRlY3Rpb24gaWYgYmF0dGVyeSB0byBiZSBjaGFyZ2VkIGlzCisJCQkJICAgIHByZXNlbnQKKwkgICAgIC0tICpjaHJnX3N0YXRlIC0gc3RhdHVzIG9mIHRoZSBjaGFyZ2VyIC0gaWYgaXQgaXMgZW5hYmxlZCBvcgorCQkJICAgICAgZGlzYWJsZWQKKworLSBCYXR0ZXJ5IGRldmljZSAoc3RydWN0IHBvd2VyX2JhdHRlcnkpOgorCSAgICAgLS0gKmJhdHRlcnlfaW5pdCAtIGFzc2lnbiBwcm9wZXIgY2FsbGJhY2tzIHRvIGJlIHVzZWQgYnkgdG9wCisJCQkJaGllcmFyY2h5IGJhdHRlcnkgZGV2aWNlCisJICAgICAtLSAqYmF0dGVyeV9jaGFyZ2UgLSBjYWxsZWQgZnJvbSAicG1pYyIgY29tbWFuZCwgcmVzcG9uc2libGUKKwkJCQkgIGZvciBwZXJmb3JtaW5nIHRoZSBjaGFyZ2luZworCitOb3cgdHdvIGJhdHRlcmllcyBhcmUgc3VwcG9ydGVkOyB0cmF0cyBhbmQgdHJhdHMyIFsqXS4gVGhvc2UgZGlmZmVyIGluIHRoZSB3YXkKK2hvdyB0aGV5IGhhbmRsZSB0aGUgZXhhY3QgY2hhcmdpbmcuIFRyYXRzIHVzZXMgcG9sbGluZyAoTUFYODk5NykgYW5kIHRyYXRzMgorcmVsaWVzIG9uIHRoZSBQTUlDL01VSUMgSFcgY29tcGxldGVseSAoTUFYNzc2OTMpLgorCitfX0V4YW1wbGUgZm9yIHRyYXRzICh0aGlzIGNhbiBiZSB2ZXJ5IGRpZmZlcmVudCBmb3Igb3RoZXIgYm9hcmQpOl9fCisJICAgICAtLSAqZmdfYmF0dGVyeV9jaGVjayAgICAgICAtPiBGRyBkZXZpY2UgKGZnX21heDE3MDQyLmMpCisJICAgICAtLSAqZmdfYmF0dGVyeV91cGRhdGUgICAgICAtPiBGRyBkZXZpY2UgKGZnX21heDE3MDQyLmMpCisJICAgICAtLSAqY2hyZ190eXBlICAgICAgICAgICAgICAtPiBNVUlDIGRldmljZSAobXVpY19tYXg4OTk3LmMpCisJICAgICAtLSAqY2hyZ19iYXRfcHJlc2VudCAgICAgICAtPiBQTUlDIGRldmljZSAocG1pY19tYXg4OTk3LmMpCisJICAgICAtLSAqY2hyZ19zdGF0ZSAgICAgICAgICAgICAtPiBQTUlDIGRldmljZSAocG1pY19tYXg4OTk3LmMpCisJICAgICAtLSAqYmF0dGVyeV9pbml0ICAgICAgICAgICAtPiBCQVQgZGV2aWNlIChiYXRfdHJhdHMuYykKKwkgICAgIC0tICpiYXR0ZXJ5X2NoYXJnZSAgICAgICAgIC0+IEJBVCBkZXZpY2UgKGJhdF90cmF0cy5jKQorCitBbHNvIHRoZSBzdHJ1Y3QgcG1pYyBob2xkcyBtZXRob2QgKCpsb3dfcG93ZXJfbW9kZSkgZm9yIHJlZHVjaW5nIGJvYXJkJ3MKK3Bvd2VyIGNvbnN1bXB0aW9uIHdoZW4gb25lIGNhbGxzICJwbWljIEJBVF9UUkFUUyBiYXQgY2hhcmdlIiBjb21tYW5kLgorCitIb3cgdG8gYWRkIGEgbmV3IHBvd2VyIGRldmljZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gU2ltcGxlIGRldmljZSBzaG91bGQgYmUgYWRkZWQgd2l0aCBjcmVhdGlvbiBvZiBmaWxlCis8cG1pY19mdW5jdGlvbj5fPHBtaWNfbmFtZT4uYywgPHBtaWNfbmFtZT5fPHBtaWNfZnVuY3Rpb24+LmggIGFjY29yZGluZyB0byB0aGUKK3Byb3Bvc2VkIGFuZCBkZXNjcmliZWQgYWJvdmUgc2NoZW1lLgorCitUaGVuICJwbWljIiBjb21tYW5kIHN1cHBvcnRzIHJlYWRpbmcvd3JpdGluZy9kdW1wIG9mIGRldmljZSdzIGludGVybmFsCityZWdpc3RlcnMuCisKKzIuIENoYXJnaW5nIGJhdHRlcnkgd2l0aCBoaWVyYXJjaHkKK0RlZmluZSBkZXZpY2VzIGFzIGxpc3RlZCBhdCAxLgorCitEZWZpbmUgYmF0dGVyeSBmaWxlIChiYXRfPGJvYXJkPi5jKS4gUGxlYXNlIGFsc28gbm90ZSB0aGF0IG9uZSBtaWdodCBuZWVkIGEKK2NvcnJlc3BvbmRpbmcgYmF0dGVyeSBtb2RlbCBkZXNjcmlwdGlvbiBmb3IgRkcuCisKK0ZvciBwb2ludHMgMSBhbmQgMiB1c2UgYSBnZW5lcmljIGZ1bmN0aW9uIHBvd2VyX2luaXRfYm9hcmQoKSB0byBpbml0aWFsaXNlIHRoZQorcG93ZXIgZnJhbWV3b3JrIG9uIHlvdXIgYm9hcmQuCisKK0ZvciByZWZlcmVuY2UsIHBsZWFzZSBsb29rIGludG8gdGhlIHRyYXRzL3RyYXRzMiBib2FyZHMuCisKK1RPIERPIGxpc3QgKGZvciBQTUlDdjMpIC0gdXAgdGlsbCB2MjAxNC4wNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIERlc2NyaXB0aW9uIG9mIHRoZSBkZXZpY2VzIHJlbGF0ZWQgdG8gcG93ZXIgdmlhIGRldmljZSB0cmVlIGlzIG5vdCBhdmFpbGFibGUuCitUaGlzIGlzIHRoZSBtYWluIHByb2JsZW0gd2hlbiBhIGRldmVsb3BlciB0cmllcyB0byBidWlsZCBhIG11bHRpLWJvb3QgdS1ib290CitiaW5hcnkuIFRoZSBiZXN0IHdvdWxkIGJlIHRvIHBhcnNlIHRoZSBEVFMgZnJvbSBMaW51eCBrZXJuZWwuCisKKzIuIFRvIHN1cHBvcnQgbWFueSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgSUMsIGxpa2UgdHdvIE1BWDg5OTcsIG9uZSBuZWVkcyB0bworY29weSB0aGUgY29ycmVzcG9uZGluZyBwbWljX21heDg5OTcuYyBmaWxlIHdpdGggY2hhbmdlZCBuYW1lIHRvICJNQVg4OTk3X1BNSUNYIiwKK3doZXJlIFggaXMgdGhlIGRldmljZSBudW1iZXIuIFRoaXMgcHJvYmxlbSB3aWxsIGJlIGFkZHJlc3NlZCB3aGVuIGV4dGVuZGVkCitwbWljX2NvcmUuYyB3aWxsIHN1cHBvcnQgc3RvcmluZyBhdmFpbGFibGUgZGV2aWNlcyBpbiBhIGxpc3QuCisKKzMuIERlZmluaXRpb24gb2YgYmF0dGVyaWVzIFsqXSAoZm9yIHRyYXRzL3RyYXRzMikgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlCitjb2RlIHJlc3BvbnNpYmxlIGZvciBjaGFyZ2luZyB0aGVtIGFuZCBzaW5jZSBpdCBpbiBmYWN0IGRlc2NyaWJlcyB0aGUgY2hhcmdpbmcKK3Byb2ZpbGUgaXQgc2hvdWxkIGJlIHB1dCB0byBhIHNlcGFyYXRlIGZpbGUuCisKKzQuIEFkanVzdCB0aGUgZnJhbWV3b3JrIHRvIHdvcmsgd2l0aCB0aGUgZGV2aWNlIG1vZGVsLgpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5zY3JhcHlhcmQgYi9kb2MvUkVBRE1FLnNjcmFweWFyZAppbmRleCA3ZDY3MDMzLi5mOTc0MmU3IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLnNjcmFweWFyZAorKysgYi9kb2MvUkVBRE1FLnNjcmFweWFyZApAQCAtMTEsOCArMTEsMTcgQEAKIAogQm9hcmQgICAgICAgICAgICBBcmNoICAgICAgICBDUFUgICAgICAgICAgICBDb21taXQgICAgICBSZW1vdmVkICAgICBMYXN0IGtub3duIG1haW50YWluZXIvY29udGFjdAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotaWRtciAgICAgICAgICAgICBtNjhrICAgICAgICBtY2Y1MngyICAgICAgICAtICAgICAgICAgICAyMDE0LTAxLTI4Ci1NNTI3MUVWQiAgICAgICAgIG02OGsgICAgICAgIG1jZjUyeDIgICAgICAgIC0gICAgICAgICAgIDIwMTQtMDEtMjgKK2x1YmJvY2sgICAgICAgICAgYXJtICAgICAgICAgcHhhICAgICAgICAgICAgLSAgICAgICAgICAgMjAxNC0wNC0wNCAgS3lsZSBIYXJyaXMgPGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQ+CitNT1VTU0UgICAgICAgICAgIHBvd2VycGMgICAgIG1wYzgyNHggICAgICAgIC0gICAgICAgICAgIDIwMTQtMDQtMDQKK3JzZHByb3RvICAgICAgICAgcG93ZXJwYyAgICAgbXBjODI2MCAgICAgICAgLSAgICAgICAgICAgMjAxNC0wNC0wNAorUlBYc3VwZXIgICAgICAgICBwb3dlcnBjICAgICBtcGM4MjYwICAgICAgICAtICAgICAgICAgICAyMDE0LTA0LTA0CitSUFhDbGFzc2ljICAgICAgIHBvd2VycGMgICAgIG1wYzh4eCAgICAgICAgIC0gICAgICAgICAgIDIwMTQtMDQtMDQKK1JQWGxpdGUgICAgICAgICAgcG93ZXJwYyAgICAgbXBjOHh4ICAgICAgICAgLSAgICAgICAgICAgMjAxNC0wNC0wNAorZ2VuaWV0diAgICAgICAgICBwb3dlcnBjICAgICBtcGM4eHggICAgICAgICAtICAgICAgICAgICAyMDE0LTA0LTA0CittYng4eHggICAgICAgICAgIHBvd2VycGMgICAgIG1wYzh4eCAgICAgICAgIC0gICAgICAgICAgIDIwMTQtMDQtMDQKK254ODIzICAgICAgICAgICAgcG93ZXJwYyAgICAgbXBjOHh4ICAgICAgICAgLSAgICAgICAgICAgMjAxNC0wNC0wNAoraWRtciAgICAgICAgICAgICBtNjhrICAgICAgICBtY2Y1MngyICAgICAgICBiYTY1MGU5YiAgICAyMDE0LTAxLTI4CitNNTI3MUVWQiAgICAgICAgIG02OGsgICAgICAgIG1jZjUyeDIgICAgICAgIGJhNjUwZTliICAgIDIwMTQtMDEtMjgKIGR2bF9ob3N0ICAgICAgICAgYXJtICAgICAgICAgaXhwICAgICAgICAgICAgZTMxN2RlNmIgICAgMjAxNC0wMS0yOCAgTWljaGFlbCBTY2h3aW5nZW4gPG1pY2hhZWxAc2Nod2luZ2VuLm9yZz4KIGFjdHV4NCAgICAgICAgICAgYXJtICAgICAgICAgaXhwICAgICAgICAgICAgNmZmN2FhZmEgICAgMjAxNC0wMS0yOCAgTWljaGFlbCBTY2h3aW5nZW4gPG1pY2hhZWxAc2Nod2luZ2VuLm9yZz4KIGFjdHV4MyAgICAgICAgICAgYXJtICAgICAgICAgaXhwICAgICAgICAgICAgMzhkYTMzZjMgICAgMjAxNC0wMS0yOCAgTWljaGFlbCBTY2h3aW5nZW4gPG1pY2hhZWxAc2Nod2luZ2VuLm9yZz4KQEAgLTI2LDExICszNSwxNSBAQAogc2NwdSAgICAgICAgICAgICBhcm0gICAgICAgICBpeHAgICAgICAgICAgICAzMDRkYjBiICAgICAyMDEzLTA5LTI0ICBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CiBvbWFwMTUxMGlubiAgICAgIGFybSAgICAgICAgIGFybTkyNXQgICAgICAgIDA2MTBhMTYgICAgIDIwMTMtMDktMjMgIEtzaGl0aWogR3VwdGEgPGtzaGl0aWpAdGkuY29tPgogQ0FOQlQgICAgICAgICAgICBwb3dlcnBjICAgICA0MDVDUiAgICAgICAgICBmYjhmNGZkICAgICAyMDEzLTA4LTA3ICBNYXR0aGlhcyBGdWNocyA8bWF0dGhpYXMuZnVjaHNAZXNkLmV1Pgorb21hcDI0MjBoNCAgICAgICBhcm0gICAgICAgICBvbWFwMjR4eCAgICAgICA3ZjVlZWY5ICAgICAyMDEzLTA2LTA0ICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CiBBbGFza2E4MjIwICAgICAgIHBvd2VycGMgICAgIG1wYzgyMjAgICAgICAgIGQ2ZWQzMjIgICAgIDIwMTMtMDUtMTEKIFl1a29uODIyMCAgICAgICAgcG93ZXJwYyAgICAgbXBjODIyMCAgICAgICAgZDZlZDMyMiAgICAgMjAxMy0wNS0xMQogc29yY2VyeSAgICAgICAgICBwb3dlcnBjICAgICBtcGM4MjIwICAgICAgICBkNmVkMzIyICAgICAyMDEzLTA1LTExCiBzbWRrNjQwMCAgICAgICAgIGFybSAgICAgICAgIGFybTExNzYgICAgICAgIDUyNTg3ZjEgICAgIDIwMTMtMDQtMTIgIFpob25nIEhvbmdibyA8Ym9jdWkxMDdAZ21haWwuY29tPgogbnM5NzUwZGV2ICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICAgICA0Y2ZjNjExICAgICAyMDEzLTAyLTI4ICBNYXJrdXMgUGlldHJlayA8bXBpZXRyZWtAZnNmb3J0aC5kZT4KK2VORVQgICAgICAgICAgICAgeDg2ICAgICAgICAgeDg2ICAgICAgICAgICAgN2U4YzUzZCAgICAgMjAxMy0wMi0xNCAgR3JhZW1lIFJ1c3MgPGdyYWVtZS5ydXNzQGdtYWlsLmNvbT4KK1BDSVBQQzIgICAgICAgICAgcG93ZXJwYyAgICAgTVBDNzQwL01QQzc1MCAgN2M5ZTg5YiAgICAgMjAxMy0wMi0wNyAgV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK1BDSVBQQzYgICAgICAgICAgcG93ZXJwYyAgICAgTVBDNzQwL01QQzc1MCAgN2M5ZTg5YiAgICAgMjAxMy0wMi0wNyAgV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KIEFNWDg2MCAgICAgICAgICAgcG93ZXJwYyAgICAgbXBjODYwICAgICAgICAgMWIwNzU3ZSAgICAgMjAxMi0xMC0yOCAgV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KIGMybW9uICAgICAgICAgICAgcG93ZXJwYyAgICAgbXBjODU1ICAgICAgICAgMWIwNzU3ZSAgICAgMjAxMi0xMC0yOCAgV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KIEVQODh4ICAgICAgICAgICAgcG93ZXJwYyAgICAgbXBjODg1ICAgICAgICAgMWIwNzU3ZSAgICAgMjAxMi0xMC0yOApAQCAtNDAsMTUgKzUzLDE3IEBACiBTQ00gICAgICAgICAgICAgIHBvd2VycGMgICAgIG1wYzgyNjAgICAgICAgIDFiMDc1N2UgICAgIDIwMTItMTAtMjggIFdvbGZnYW5nIEdyYW5kZWdnZXIgPHdnQGRlbnguZGU+CiBTWDEgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNXQgICAgICAgIDUzYzQxNTQgICAgIDIwMTItMTAtMjYKIFRRTTg1eHggICAgICAgICAgcG93ZXJwYyAgICAgTVBDODV4eCAgICAgICAgZDkyM2E1ZCAgICAgMjAxMi0xMC0wNCAgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorQURDSU9QICAgICAgICAgICBwb3dlcnBjICAgICBwcGM0eHggICAgICAgICA5OWJjYWQxICAgICAyMDEyLTA5LTE5ICBNYXR0aGlhcyBGdWNocyA8bWF0dGhpYXMuZnVjaHNAZXNkLWVsZWN0cm9uaWNzLmNvbT4KK0RBU0FfU0lNICAgICAgICAgcG93ZXJwYyAgICAgcHBjNHh4ICAgICAgICAgOTliY2FkMSAgICAgMjAxMi0wOS0xOSAgTWF0dGhpYXMgRnVjaHMgPG1hdHRoaWFzLmZ1Y2hzQGVzZC1lbGVjdHJvbmljcy5jb20+CiBhcG9sbG9uICAgICAgICAgIGFybSAgICAgICAgIG9tYXAyNHh4ICAgICAgIDUzNWM3NGYgICAgIDIwMTItMDktMTggIEt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+CiB0YjAyMjkgICAgICAgICAgIG1pcHMgICAgICAgIG1pcHMzMiAgICAgICAgIDNmMzExMGQgICAgIDIwMTEtMTItMTIKIHJtdSAgICAgICAgICAgICAgcG93ZXJwYyAgICAgTVBDODUwICAgICAgICAgZmI4MmZkNyAgICAgMjAxMS0xMi0wNyAgV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KIE9YQyAgICAgICAgICAgICAgcG93ZXJwYyAgICAgTVBDODI0MCAgICAgICAgMzA5YTI5MiAgICAgMjAxMS0xMi0wNwogQkFCN3h4ICAgICAgICAgICBwb3dlcnBjICAgICBNUEM3NDAvTVBDNzUwICBjNTMwNDNiICAgICAyMDExLTEyLTA3ICBGcmFuayBHb3R0c2NobGluZyA8ZmdvdHRzY2hsaW5nQGVsdGVjLmRlPgoteG0yNTAgICAgICAgICAgICBhcm0gICAgICAgICBweGEgICAgICAgICAgICBjNzQ2Y2RkICAgICAyMDExLTI1LTExCi1wbGViMiAgICAgICAgICAgIGFybSAgICAgICAgIHB4YSAgICAgICAgICAgIGIxODVhMWMgICAgIDIwMTEtMjUtMTEKLWNyYWRsZSAgICAgICAgICAgYXJtICAgICAgICAgcHhhICAgICAgICAgICAgNGUyNGY4YSAgICAgMjAxMS0yNS0xMSAgS3lsZSBIYXJyaXMgPGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQ+Ci1jZXJmMjUwICAgICAgICAgIGFybSAgICAgICAgIHB4YSAgICAgICAgICAgIGEzZjEyNDEgICAgIDIwMTEtMjUtMTEgIFByYWthc2ggS3VtYXIgPHByYWthc2hAZW1iZWR4LmNvbT4KK3htMjUwICAgICAgICAgICAgYXJtICAgICAgICAgcHhhICAgICAgICAgICAgYzQ3N2Q3MiAgICAgMjAxMS0xMS0yNQorcGxlYjIgICAgICAgICAgICBhcm0gICAgICAgICBweGEgICAgICAgICAgICBkMjk5MTczICAgICAyMDExLTExLTI1CitjcmFkbGUgICAgICAgICAgIGFybSAgICAgICAgIHB4YSAgICAgICAgICAgIDAwYzRhY2EgICAgIDIwMTEtMTEtMjUgIEt5bGUgSGFycmlzIDxraGFycmlzQG5leHVzLXRlY2gubmV0PgorY2VyZjI1MCAgICAgICAgICBhcm0gICAgICAgICBweGEgICAgICAgICAgICBmMTNlYmE2ICAgICAyMDExLTExLTI1ICBQcmFrYXNoIEt1bWFyIDxwcmFrYXNoQGVtYmVkeC5jb20+CiBtcHExMDEgICAgICAgICAgIHBvd2VycGMgICAgIG1wYzg1eHggICAgICAgIGU4NzdmYWIgICAgIDIwMTEtMTAtMjMgIEFsZXggRHVib3YgPG9ha2FkQHlhaG9vLmNvbT4KIGl4ZHBnNDI1ICAgICAgICAgYXJtICAgICAgICAgaXhwICAgICAgICAgICAgMGNhOGViNyAgICAgMjAxMS0wOS0yMiAgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgogaXhkcDQyNSAgICAgICAgICBhcm0gICAgICAgICBpeHAgICAgICAgICAgICAwY2E4ZWI3ICAgICAyMDExLTA5LTIyICBLeWxlIEhhcnJpcyA8a2hhcnJpc0BuZXh1cy10ZWNoLm5ldD4KQEAgLTg3LDEzICsxMDIsMTMgQEAKIGFybWFkaWxsbyAgICAgICAgYXJtICAgICAgICAgYXJtNzIwdCAgICAgICAgYmUyODg1NyAgICAgMjAxMS0wNy0xNiAgUm93ZWwgQXRpZW56YSA8cm93ZWxAZGl3YWxhYnMuY29tPgogYXNzYWJldCAgICAgICAgICBhcm0gICAgICAgICBzYTExMDAgICAgICAgICBjOTFlOTBkICAgICAyMDExLTA3LTE2ICBHZW9yZ2UgRy4gRGF2aXMgPGdkYXZpc0BtdmlzdGEuY29tPgogdHJhYiAgICAgICAgICAgICBhcm0gICAgICAgICBTM0MyNDAwICAgICAgICA1NjZlNWNmICAgICAyMDExLTA1LTAxICBHYXJ5IEplbm5lam9obiA8Z2FyeWpAZGVueC5kZT4KLXhzZW5naW5lICAgICAgICAgQVJNICAgICAgICAgUFhBMnh4ICAgICAgICAgNDI2MmE3YyAgICAgMjAxMC0xMC0yMAotd2VwZXAyNTAgICAgICAgICBBUk0gICAgICAgICBQWEEyeHggICAgICAgICA3MzY5NDc4ICAgICAyMDEwLTEwLTIwICBQZXRlciBGaWd1bGkgPHBlcG9zaEBldGMuc2s+Ci1kZWx0YSAgICAgICAgICAgIEFSTSAgICAgICAgIFBYQTJ4eCAgICAgICAgIDc1ZTIwMzUgICAgIDIwMTAtMTAtMjAKIG1wMnVzYiAgICAgICAgICAgQVJNICAgICAgICAgQVQ5MVJNMjkwMCAgICAgZWU5ODZlMiAgICAgMjAxMS0wMS0yNSAgRXJpYyBCw6luYXJkIDxlcmljQGV1a3JlYS5jb20+CiBiYXJjbyAgICAgICAgICAgIHBvd2VycGMgICAgIE1QQzgyNDUgICAgICAgIGFmYWEyN2IgICAgIDIwMTAtMTEtMjMgIE1hcmMgTGVlbWFuIDxtYXJjLmxlZW1hbkBiYXJjby5jb20+CiBFUklDICAgICAgICAgICAgIHBvd2VycGMgICAgIDQwNUdQICAgICAgICAgIGQ5YmE0NTEgICAgIDIwMTAtMTEtMjEgIFN3ZW4gQW5kZXJzb24gPHNhbmRAcGVwcGVyY29uLmRlPgogVm9WUE4tR1dfMTAwTUh6ICBwb3dlcnBjICAgICBNUEM4MjYwICAgICAgICAyNmZlM2QyICAgICAyMDEwLTEwLTI0ICBKdWVyZ2VuIFNlbGVudCA8ai5zZWxlbnRAZWxtZWcuZGU+Cit4c2VuZ2luZSAgICAgICAgIEFSTSAgICAgICAgIFBYQTJ4eCAgICAgICAgIDQyNjJhN2MgICAgIDIwMTAtMTAtMjAKK3dlcGVwMjUwICAgICAgICAgQVJNICAgICAgICAgUFhBMnh4ICAgICAgICAgNzM2OTQ3OCAgICAgMjAxMC0xMC0yMCAgUGV0ZXIgRmlndWxpIDxwZXBvc2hAZXRjLnNrPgorZGVsdGEgICAgICAgICAgICBBUk0gICAgICAgICBQWEEyeHggICAgICAgICA3NWUyMDM1ICAgICAyMDEwLTEwLTIwCiBOQzY1MCAgICAgICAgICAgIHBvd2VycGMgICAgIE1QQzg1MiAgICAgICAgIDMzM2Q4NmQgICAgIDIwMTAtMTAtMTkgIFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CiBDUDg1MCAgICAgICAgICAgIHBvd2VycGMgICAgIE1QQzg1MiAgICAgICAgIDMzM2Q4NmQgICAgIDIwMTAtMTAtMTkgIFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CiBsb2dvZGwgICAgICAgICAgIEFSTSAgICAgICAgIFBYQTJ4eCAgICAgICAgIDA1OWU3NzggICAgIDIwMTAtMTAtMTggIEF1Z3VzdCBIb2VyYWVuZGwgPGF1Z3VzdC5ob2VyYW5kbEBnbXguYXQ+CkBAIC0xMTAsNyArMTI1LDQgQEAKIGFkc3ZpeCAgICAgICAgICAgQVJNICAgICAgICAgUFhBMjd4ICAgICAgICAgNzYxMGRiMSAgICAgMjAwOC0wNy0zMCAgQWRyaWFuIEZpbGlwaSA8YWRyaWFuLmZpbGlwaUBldXJvdGVjaC5jb20+CiBSNTIwMCAgICAgICAgICAgIENvbGRGaXJlICAgIC0gICAgICAgICAgICAgIDQ4ZWFkN2EgICAgIDIwMDgtMDMtMzEgIFphY2hhcnkgUC4gTGFuZGF1IDx6YWNoYXJ5LmxhbmRhdUBsYWJ4dGVjaG5vbG9naWVzLmNvbT4KIENQQ0k0NDAgICAgICAgICAgcG93ZXJwYyAgICAgNDQwR1AgICAgICAgICAgYjU2OGZkMiAgICAgMjAwNy0xMi0yNyAgTWF0dGhpYXMgRnVjaHMgPG1hdHRoaWFzLmZ1Y2hzQGVzZC1lbGVjdHJvbmljcy5jb20+Ci1QQ0lQUEMyICAgICAgICAgIHBvd2VycGMgICAgIE1QQzc0MC9NUEM3NTAgIDdjOWU4OWIgICAgIDIwMTMtMDItMDcgIFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+Ci1QQ0lQUEM2ICAgICAgICAgIHBvd2VycGMgICAgIE1QQzc0MC9NUEM3NTAgIC0gICAgICAgICAgIC0gICAgICAgICAgIFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+Ci1vbWFwMjQyMGg0ICAgICAgIGFybSAgICAgICAgIG9tYXAyNHh4ICAgICAgIC0gICAgICAgICAgIDIwMTMtMDYtMDQgIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KLWVORVQgICAgICAgICAgICAgeDg2ICAgICAgICAgeDg2ICAgICAgICAgICAgN2U4YzUzZCAgICAgMjAxMy0wMi0xNCAgR3JhZW1lIFJ1c3MgPGdyYWVtZS5ydXNzQGdtYWlsLmNvbT4KK2luY2FpcCAgICAgICAgICAgbWlwcyAgICAgICAgbWlwczMyICAgICAgICAgLSAgICAgICAgICAgMjAxNC0wNC0xNyAgV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUudDQyNDBxZHMgYi9kb2MvUkVBRE1FLnQ0MjQwcWRzCmluZGV4IGE5ODQxZmIuLmVmOGM3NWYgMTAwNjQ0Ci0tLSBhL2RvYy9SRUFETUUudDQyNDBxZHMKKysrIGIvZG9jL1JFQURNRS50NDI0MHFkcwpAQCAtMTIwLDMgKzEyMCw1NiBAQAogTm90ZTogdm9sdGFnZSBhZGp1c3RtZW50IG5lZWRzIHRvIGJlIGRvbmUgc3RlcCBieSBzdGVwLiBDaGFuZ2luZyB2b2x0YWdlIHRvbwogcmFwaWRseSBtYXkgY2F1c2UgY3VycmVudCBzdXJnZS4gVGhlIHZvbHRhZ2Ugc3RlcHBpbmcgaXMgZG9uZSBieSBzb2Z0d2FyZS4KIFVzZXJzIGNhbiBzZXQgdGhlIGZpbmFsIHZvbHRhZ2UgZGlyZWN0bHkuCisKKzItc3RhZ2UgTkFORC9TRCBib290IGxvYWRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUEJMIGluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBTUkFNIGFuZCBjb3B5IFNQTCgxNjBLKSBpbiBTUkFNLgorU1BMIGZ1cnRoZXIgaW5pdGlhbGlzZSBERFIgdXNpbmcgU1BEIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKK2FuZCBjb3B5IHUtYm9vdCg3NjggS0IpIGZyb20gTkFORC9TRCBkZXZpY2UgdG8gRERSLgorRmluYWxseSBTUEwgdHJhbnNlcnMgY29udHJvbCB0byB1LWJvb3QgZm9yIGZ1dGhlciBib290aW5nLgorCitTUEwgaGFzIGZvbGxvd2luZyBmZWF0dXJlczoKKyAtIEV4ZWN1dGVzIHdpdGhpbiAyNTZLCisgLSBObyByZWxvY2F0aW9uIHJlcXVpcmVkCisKK1J1biB0aW1lIHZpZXcgb2YgU1BMIGZyYW1ld29yaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfEFyZWEJCXwgQWRkcmVzcwkJCXwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3xTZWN1cmVCb290IGhlYWRlciB8IDB4RkZGQzAwMDAJKDMyS0IpCQl8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8R0QsIEJECQl8IDB4RkZGQzgwMDAJKDRLQikJCXwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3xFTlYJCXwgMHhGRkZDOTAwMAkoOEtCKQkJfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfEhFQVAJCXwgMHhGRkZDQjAwMAkoNTBLQikJCXwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3xTVEFDSwkJfCAweEZGRkQ4MDAwCSgyMktCKQkJfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfFUtYm9vdCBTUEwJfCAweEZGRkQ4MDAwIAkoMTYwS0IpCQl8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05BTkQgRmxhc2ggbWVtb3J5IE1hcCBvbiBUNFFEUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N0YXJ0CQlFbmQJCURlZmluaXRpb24JU2l6ZQorMHgwMDAwMDAJMHgwRkZGRkYJdS1ib290IGltZwkxTUIKKzB4MTQwMDAwCTB4MTVGRkZGCXUtYm9vdCBlbnYgICAgICAxMjhLQgorMHgxNjAwMDAJMHgxN0ZGRkYJRk1BTiBVY29kZSAgICAgIDEyOEtCCisKK01pY3JvIFNEIENhcmQgbWVtb3J5IE1hcCBvbiBUNFFEUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQmxvY2sJCSNibG9ja3MJCURlZmluaXRpb24JU2l6ZQorMHgwMDgJCTIwNDgJCXUtYm9vdCBpbWcJMU1CCisweDgwMAkJMDAxNgkJdS1ib290IGVudgk4S0IKKzB4ODIwCQkwMTI4CQlGTUFOIHVjb2RlCTY0S0IKKworU3dpdGNoIFNldHRpbmdzOiAoT04gaXMgMSwgT0ZGIGlzIDApCis9PT09PT09PT09PT09PT0KK05BTkQgYm9vdCBTVyBzZXR0aW5nOgorU1cxWzE6OF0gPSAxMDAwMDAxMAorU1cyWzEuMV0gPSAwCitTVzZbMTo0XSA9IDEwMDEKKworU0QgYm9vdCBTVyBzZXR0aW5nOgorU1cxWzE6OF0gPSAwMDEwMDAwMAorU1cyWzEuMV0gPSAwCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLnZpZGVvIGIvZG9jL1JFQURNRS52aWRlbwppbmRleCBmMDlkNWY5Li5kYWRiZmNkIDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLnZpZGVvCisrKyBiL2RvYy9SRUFETUUudmlkZW8KQEAgLTExLDggKzExLDYgQEAKIFRoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uczoKIAogLSBNUEM4MjNGQURTIHdpdGggQUQ3MTc2IG9uIGEgUEFMIFRWIChZQ2JZQ3IpCS0gYXJzZW5pb0B0aW4uaXQKLS0gR0VOSUVUViAgICB3aXRoIEFENzE3NyBvbiBhIFBBTCBUViAoWUNiWUNyKQktIGFyc2VuaW9AdGluLml0Ci0KIAogInZpZGVvLW1vZGUiIGVudmlyb25tZW50IHZhcmlhYmxlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9kb2MvdUltYWdlLkZJVC9zaWduYXR1cmUudHh0IGIvZG9jL3VJbWFnZS5GSVQvc2lnbmF0dXJlLnR4dAppbmRleCBiYzlmM2ZhLi45NTAyMDM3IDEwMDY0NAotLS0gYS9kb2MvdUltYWdlLkZJVC9zaWduYXR1cmUudHh0CisrKyBiL2RvYy91SW1hZ2UuRklUL3NpZ25hdHVyZS50eHQKQEAgLTM0Niw3ICszNDYsOSBAQAogCiBQbGVhc2Ugc2VlIGRvYy91SW1hZ2UuRklUL3ZlcmlmaWVkLWJvb3QudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uCiAKKy9ob21lL2hzL2lkcy91LWJvb3Qvc2FuZGJveC90b29scy9ta2ltYWdlIC1EIC1JIGR0cyAtTyBkdGIgLXAgMjAwMAogQnVpbGQga2V5cworZG8gc2hhMSB0ZXN0CiBCdWlsZCBGSVQgd2l0aCBzaWduZWQgaW1hZ2VzCiBUZXN0IFZlcmlmaWVkIEJvb3QgUnVuOiB1bnNpZ25lZCBzaWduYXR1cmVzOjogT0sKIFNpZ24gaW1hZ2VzCkBAIC0zNTUsMTAgKzM1NywyNiBAQAogVGVzdCBWZXJpZmllZCBCb290IFJ1bjogdW5zaWduZWQgY29uZmlnOiBPSwogU2lnbiBpbWFnZXMKIFRlc3QgVmVyaWZpZWQgQm9vdCBSdW46IHNpZ25lZCBjb25maWc6IE9LCitjaGVjayBzaWduZWQgY29uZmlnIG9uIHRoZSBob3N0CitPSworVGVzdCBWZXJpZmllZCBCb290IFJ1bjogc2lnbmVkIGNvbmZpZzogT0sKK1Rlc3QgVmVyaWZpZWQgQm9vdCBSdW46IHNpZ25lZCBjb25maWcgd2l0aCBiYWQgaGFzaDogT0sKK2RvIHNoYTI1NiB0ZXN0CitCdWlsZCBGSVQgd2l0aCBzaWduZWQgaW1hZ2VzCitUZXN0IFZlcmlmaWVkIEJvb3QgUnVuOiB1bnNpZ25lZCBzaWduYXR1cmVzOjogT0sKK1NpZ24gaW1hZ2VzCitUZXN0IFZlcmlmaWVkIEJvb3QgUnVuOiBzaWduZWQgaW1hZ2VzOiBPSworQnVpbGQgRklUIHdpdGggc2lnbmVkIGNvbmZpZ3VyYXRpb24KK1Rlc3QgVmVyaWZpZWQgQm9vdCBSdW46IHVuc2lnbmVkIGNvbmZpZzogT0sKK1NpZ24gaW1hZ2VzCitUZXN0IFZlcmlmaWVkIEJvb3QgUnVuOiBzaWduZWQgY29uZmlnOiBPSworY2hlY2sgc2lnbmVkIGNvbmZpZyBvbiB0aGUgaG9zdAorT0sKK1Rlc3QgVmVyaWZpZWQgQm9vdCBSdW46IHNpZ25lZCBjb25maWc6IE9LCitUZXN0IFZlcmlmaWVkIEJvb3QgUnVuOiBzaWduZWQgY29uZmlnIHdpdGggYmFkIGhhc2g6IE9LCiAKIFRlc3QgcGFzc2VkCiAKLQogRnV0dXJlIFdvcmsKIC0tLS0tLS0tLS0tCiAtIFJvbGwtYmFjayBwcm90ZWN0aW9uIHVzaW5nIGEgVFBNIGlzIGRvbmUgdXNpbmcgdGhlIHRwbSBjb21tYW5kLiBUaGlzIGNhbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZHIvZnNsL01ha2VmaWxlIGIvZHJpdmVycy9kZHIvZnNsL01ha2VmaWxlCmluZGV4IDI2NTIwNGYuLmRmNjZjMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGRyL2ZzbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Rkci9mc2wvTWFrZWZpbGUKQEAgLTEsMTkgKzEsMjAgQEAKICMKLSMgQ29weXJpZ2h0IDIwMDgtMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorIyBDb3B5cmlnaHQgMjAwOC0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICMgVmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogIwogCi1vYmotJChDT05GSUdfU1lTX0ZTTF9ERFIxKQkrPSBtYWluLm8gdXRpbC5vIGN0cmxfcmVncy5vIG9wdGlvbnMubyBcCi0JCQkJICAgbGNfY29tbW9uX2RpbW1fcGFyYW1zLm8KK29iai0kKENPTkZJR19TWVNfRlNMX0REUjEpICs9IG1haW4ubyB1dGlsLm8gY3RybF9yZWdzLm8gb3B0aW9ucy5vIFwKKwkJCQlsY19jb21tb25fZGltbV9wYXJhbXMubworb2JqLSQoQ09ORklHX1NZU19GU0xfRERSMikgKz0gbWFpbi5vIHV0aWwubyBjdHJsX3JlZ3MubyBvcHRpb25zLm8gXAorCQkJCWxjX2NvbW1vbl9kaW1tX3BhcmFtcy5vCitvYmotJChDT05GSUdfU1lTX0ZTTF9ERFIzKSArPSBtYWluLm8gdXRpbC5vIGN0cmxfcmVncy5vIG9wdGlvbnMubyBcCisJCQkJbGNfY29tbW9uX2RpbW1fcGFyYW1zLm8KK29iai0kKENPTkZJR19TWVNfRlNMX0REUjQpICs9IG1haW4ubyB1dGlsLm8gY3RybF9yZWdzLm8gb3B0aW9ucy5vIFwKKwkJCQlsY19jb21tb25fZGltbV9wYXJhbXMubwogCi1vYmotJChDT05GSUdfU1lTX0ZTTF9ERFIyKQkrPSBtYWluLm8gdXRpbC5vIGN0cmxfcmVncy5vIG9wdGlvbnMubyBcCi0JCQkJICAgbGNfY29tbW9uX2RpbW1fcGFyYW1zLm8KLQotb2JqLSQoQ09ORklHX1NZU19GU0xfRERSMykJKz0gbWFpbi5vIHV0aWwubyBjdHJsX3JlZ3MubyBvcHRpb25zLm8gXAotCQkJCSAgIGxjX2NvbW1vbl9kaW1tX3BhcmFtcy5vCiBpZmRlZiBDT05GSUdfRERSX1NQRAogU1BEIDo9IHkKIGVuZGlmCkBAIC0yNCw2ICsyNSw3IEBACiBvYmotJChDT05GSUdfU1lTX0ZTTF9ERFIxKQkrPSBkZHIxX2RpbW1fcGFyYW1zLm8KIG9iai0kKENPTkZJR19TWVNfRlNMX0REUjIpCSs9IGRkcjJfZGltbV9wYXJhbXMubwogb2JqLSQoQ09ORklHX1NZU19GU0xfRERSMykJKz0gZGRyM19kaW1tX3BhcmFtcy5vCitvYmotJChDT05GSUdfU1lTX0ZTTF9ERFI0KQkrPSBkZHI0X2RpbW1fcGFyYW1zLm8KIGVuZGlmCiAKIG9iai0kKENPTkZJR19GU0xfRERSX0lOVEVSQUNUSVZFKQkrPSBpbnRlcmFjdGl2ZS5vCkBAIC0zMiwzICszNCw0IEBACiBvYmotJChDT05GSUdfU1lTX0ZTTF9ERFJDX0dFTjMpCSs9IG1wYzg1eHhfZGRyX2dlbjMubwogb2JqLSQoQ09ORklHX1NZU19GU0xfRERSXzg2WFgpCQkrPSBtcGM4Nnh4X2Rkci5vCiBvYmotJChDT05GSUdfU1lTX0ZTTF9ERFJDX0FSTV9HRU4zKQkrPSBhcm1fZGRyX2dlbjMubworb2JqLSQoQ09ORklHX1NZU19GU0xfRERSQ19HRU40KSArPSBmc2xfZGRyX2dlbjQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZHIvZnNsL2N0cmxfcmVncy5jIGIvZHJpdmVycy9kZHIvZnNsL2N0cmxfcmVncy5jCmluZGV4IDA4ODI5MzIuLjc4ZTgyYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGRyL2ZzbC9jdHJsX3JlZ3MuYworKysgYi9kcml2ZXJzL2Rkci9mc2wvY3RybF9yZWdzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDgtMjAxMiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMDgtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwogICovCkBAIC0xNywyMCArMTcsNiBAQAogI2luY2x1ZGUgPGZzbF9pbW1hcC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jZGVmaW5lIF9ERFJfQUREUiBDT05GSUdfU1lTX0ZTTF9ERFJfQUREUgotCi1zdGF0aWMgdTMyIGZzbF9kZHJfZ2V0X3ZlcnNpb24odm9pZCkKLXsKLQlzdHJ1Y3QgY2Nzcl9kZHIgX19pb21lbSAqZGRyOwotCXUzMiB2ZXJfbWFqb3JfbWlub3JfZXJyYXRhOwotCi0JZGRyID0gKHZvaWQgKilfRERSX0FERFI7Ci0JdmVyX21ham9yX21pbm9yX2VycmF0YSA9IChkZHJfaW4zMigmZGRyLT5pcF9yZXYxKSAmIDB4RkZGRikgPDwgODsKLQl2ZXJfbWFqb3JfbWlub3JfZXJyYXRhIHw9IChkZHJfaW4zMigmZGRyLT5pcF9yZXYyKSAmIDB4RkYwMCkgPj4gODsKLQotCXJldHVybiB2ZXJfbWFqb3JfbWlub3JfZXJyYXRhOwotfQotCiB1bnNpZ25lZCBpbnQgcGljb3NfdG9fbWNsayh1bnNpZ25lZCBpbnQgcGljb3MpOwogCiAvKgpAQCAtODEsNiArNjcsMzkgQEAKIAlyZXR1cm4gcnR0OwogfQogCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorLyoKKyAqIGNvbXB1dGUgQ0FTIHdyaXRlIGxhdGVuY3kgYWNjb3JkaW5nIHRvIEREUjQgc3BlYworICogQ1dMID0gOSBmb3IgPD0gMTYwME1UL3MKKyAqICAgICAgIDEwIGZvciA8PSAxODY2TVQvcworICogICAgICAgMTEgZm9yIDw9IDIxMzNNVC9zCisgKiAgICAgICAxMiBmb3IgPD0gMjQwME1UL3MKKyAqICAgICAgIDE0IGZvciA8PSAyNjY3TVQvcworICogICAgICAgMTYgZm9yIDw9IDI5MzNNVC9zCisgKiAgICAgICAxOCBmb3IgaGlnaGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNvbXB1dGVfY2FzX3dyaXRlX2xhdGVuY3kodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY3dsOworCWNvbnN0IHVuc2lnbmVkIGludCBtY2xrX3BzID0gZ2V0X21lbW9yeV9jbGtfcGVyaW9kX3BzKCk7CisJaWYgKG1jbGtfcHMgPj0gMTI1MCkKKwkJY3dsID0gOTsKKwllbHNlIGlmIChtY2xrX3BzID49IDEwNzApCisJCWN3bCA9IDEwOworCWVsc2UgaWYgKG1jbGtfcHMgPj0gOTM1KQorCQljd2wgPSAxMTsKKwllbHNlIGlmIChtY2xrX3BzID49IDgzMykKKwkJY3dsID0gMTI7CisJZWxzZSBpZiAobWNsa19wcyA+PSA3NTApCisJCWN3bCA9IDE0OworCWVsc2UgaWYgKG1jbGtfcHMgPj0gNjgxKQorCQljd2wgPSAxNjsKKwllbHNlCisJCWN3bCA9IDE4OworCisJcmV0dXJuIGN3bDsKK30KKyNlbHNlCiAvKgogICogY29tcHV0ZSB0aGUgQ0FTIHdyaXRlIGxhdGVuY3kgYWNjb3JkaW5nIHRvIEREUjMgc3BlYwogICogQ1dMID0gNSBpZiB0Q0sgPj0gMi41bnMKQEAgLTExOSw2ICsxMzgsNyBAQAogCX0KIAlyZXR1cm4gY3dsOwogfQorI2VuZGlmCiAKIC8qIENoaXAgU2VsZWN0IENvbmZpZ3VyYXRpb24gKENTbl9DT05GSUcpICovCiBzdGF0aWMgdm9pZCBzZXRfY3NuX2NvbmZpZyhpbnQgZGltbV9udW1iZXIsIGludCBpLCBmc2xfZGRyX2NmZ19yZWdzX3QgKmRkciwKQEAgLTEzNSw2ICsxNTUsMTEgQEAKIAl1bnNpZ25lZCBpbnQgcm93X2JpdHNfY3NfbiA9IDA7IC8qIE51bSBvZiByb3cgYml0cyBmb3IgU0RSQU0gb24gQ1NuICovCiAJdW5zaWduZWQgaW50IGNvbF9iaXRzX2NzX24gPSAwOyAvKiBOdW0gb2Ygb2NsIGJpdHMgZm9yIFNEUkFNIG9uIENTbiAqLwogCWludCBnb19jb25maWcgPSAwOworI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwl1bnNpZ25lZCBpbnQgYmdfYml0c19jc19uID0gMDsgLyogTnVtIG9mIGJhbmsgZ3JvdXAgYml0cyAqLworI2Vsc2UKKwl1bnNpZ25lZCBpbnQgbl9iYW5rc19wZXJfc2RyYW1fZGV2aWNlOworI2VuZGlmCiAKIAkvKiBDb21wdXRlIENTX0NPTkZJRyBvbmx5IGZvciBleGlzdGluZyByYW5rcyBvZiBlYWNoIERJTU0uICAqLwogCXN3aXRjaCAoaSkgewpAQCAtMTc4LDE0ICsyMDMsMTggQEAKIAkJYnJlYWs7CiAJfQogCWlmIChnb19jb25maWcpIHsKLQkJdW5zaWduZWQgaW50IG5fYmFua3NfcGVyX3NkcmFtX2RldmljZTsKIAkJY3Nfbl9lbiA9IDE7CiAJCWFwX25fZW4gPSBwb3B0cy0+Y3NfbG9jYWxfb3B0c1tpXS5hdXRvX3ByZWNoYXJnZTsKIAkJb2R0X3JkX2NmZyA9IHBvcHRzLT5jc19sb2NhbF9vcHRzW2ldLm9kdF9yZF9jZmc7CiAJCW9kdF93cl9jZmcgPSBwb3B0cy0+Y3NfbG9jYWxfb3B0c1tpXS5vZHRfd3JfY2ZnOworI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwkJYmFfYml0c19jc19uID0gZGltbV9wYXJhbXNbZGltbV9udW1iZXJdLmJhbmtfYWRkcl9iaXRzOworCQliZ19iaXRzX2NzX24gPSBkaW1tX3BhcmFtc1tkaW1tX251bWJlcl0uYmFua19ncm91cF9iaXRzOworI2Vsc2UKIAkJbl9iYW5rc19wZXJfc2RyYW1fZGV2aWNlCiAJCQk9IGRpbW1fcGFyYW1zW2RpbW1fbnVtYmVyXS5uX2JhbmtzX3Blcl9zZHJhbV9kZXZpY2U7CiAJCWJhX2JpdHNfY3NfbiA9IF9faWxvZzIobl9iYW5rc19wZXJfc2RyYW1fZGV2aWNlKSAtIDI7CisjZW5kaWYKIAkJcm93X2JpdHNfY3NfbiA9IGRpbW1fcGFyYW1zW2RpbW1fbnVtYmVyXS5uX3Jvd19hZGRyIC0gMTI7CiAJCWNvbF9iaXRzX2NzX24gPSBkaW1tX3BhcmFtc1tkaW1tX251bWJlcl0ubl9jb2xfYWRkciAtIDg7CiAJfQpAQCAtMjAzLDYgKzIzMiw5IEBACiAKIAkJfCAoKGJhX2JpdHNfY3NfbiAmIDB4MykgPDwgMTQpCiAJCXwgKChyb3dfYml0c19jc19uICYgMHg3KSA8PCA4KQorI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwkJfCAoKGJnX2JpdHNfY3NfbiAmIDB4MykgPDwgNCkKKyNlbmRpZgogCQl8ICgoY29sX2JpdHNfY3NfbiAmIDB4NykgPDwgMCkKIAkJKTsKIAlkZWJ1ZygiRlNMRERSOiBjc1slZF1fY29uZmlnID0gMHglMDh4XG4iLCBpLGRkci0+Y3NbaV0uY29uZmlnKTsKQEAgLTI2MiwxMSArMjk0LDIzIEBACiAJLyogUHJlY2hhcmdlIHBvd2VyZG93biBleGl0IHRpbWluZyAodFhQKS4gKi8KIAl1bnNpZ25lZCBjaGFyIHByZV9wZF9leGl0X21jbGs7CiAJLyogT0RUIHBvd2VyZG93biBleGl0IHRpbWluZyAodEFYUEQpLiAqLwotCXVuc2lnbmVkIGNoYXIgdGF4cGRfbWNsazsKKwl1bnNpZ25lZCBjaGFyIHRheHBkX21jbGsgPSAwOwogCS8qIE1vZGUgcmVnaXN0ZXIgc2V0IGN5Y2xlIHRpbWUgKHRNUkQpLiAqLwogCXVuc2lnbmVkIGNoYXIgdG1yZF9tY2xrOwogCi0jaWZkZWYgQ09ORklHX1NZU19GU0xfRERSMworI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwkvKiB0WFA9bWF4KDRuQ0ssIDZucykgKi8KKwlpbnQgdHhwID0gbWF4KChnZXRfbWVtb3J5X2Nsa19wZXJpb2RfcHMoKSAqIDQpLCA2MDAwKTsgLyogdW5pdD1wcyAqLworCXRyd3RfbWNsayA9IDI7CisJdHdydF9tY2xrID0gMTsKKwlhY3RfcGRfZXhpdF9tY2xrID0gcGljb3NfdG9fbWNsayh0eHApOworCXByZV9wZF9leGl0X21jbGsgPSBhY3RfcGRfZXhpdF9tY2xrOworCS8qCisJICogTVJTX0NZQyA9IG1heCh0TVJELCB0TU9EKQorCSAqIHRNUkQgPSA4bkNLLCB0TU9EID0gbWF4KDI0bkNLLCAxNW5zKQorCSAqLworCXRtcmRfbWNsayA9IG1heCgyNCwgcGljb3NfdG9fbWNsaygxNTAwMCkpOworI2VsaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIzKQogCS8qCiAJICogKHRYQVJEIGFuZCB0WEFSRFMpLiBFbXBpcmljYWw/CiAJICogVGhlIEREUjMgc3BlYyBoYXMgbm90IHRYQVJELApAQCAtMjc1LDcgKzMxOSw3IEBACiAJICogc3BlYyBoYXMgbm90IHRoZSB0QVhQRCwgd2UgdXNlCiAJICogdEFYUEQ9MSwgbmVlZCBkZXNpZ24gdG8gY29uZmlybS4KIAkgKi8KLQlpbnQgdFhQID0gbWF4KChnZXRfbWVtb3J5X2Nsa19wZXJpb2RfcHMoKSAqIDMpLCA3NTAwKTsgLyogdW5pdD1wcyAqLworCWludCB0eHAgPSBtYXgoKGdldF9tZW1vcnlfY2xrX3BlcmlvZF9wcygpICogMyksIDc1MDApOyAvKiB1bml0PXBzICovCiAJdW5zaWduZWQgaW50IGRhdGFfcmF0ZSA9IGdldF9kZHJfZnJlcSgwKTsKIAl0bXJkX21jbGsgPSA0OwogCS8qIHNldCB0aGUgdHVybmFyb3VuZCB0aW1lICovCkBAIC0zMDAsNyArMzQ0LDcgQEAKIAkJdGF4cGRfbWNsayA9IDE7CiAJfSBlbHNlIHsKIAkJLyogYWN0X3BkX2V4aXRfbWNsayA9IHRYQVJELCBzZWUgYWJvdmUgKi8KLQkJYWN0X3BkX2V4aXRfbWNsayA9IHBpY29zX3RvX21jbGsodFhQKTsKKwkJYWN0X3BkX2V4aXRfbWNsayA9IHBpY29zX3RvX21jbGsodHhwKTsKIAkJLyogTW9kZSByZWdpc3RlciBNUjBbQTEyXSBpcyAnMScgLSBmYXN0IGV4aXQgKi8KIAkJcHJlX3BkX2V4aXRfbWNsayA9IGFjdF9wZF9leGl0X21jbGs7CiAJCXRheHBkX21jbGsgPSAxOwpAQCAtMzY0LDggKzQwOCwxMiBAQAogCWV4dF9hY3R0b3J3ID0gcGljb3NfdG9fbWNsayhjb21tb25fZGltbS0+dHJjZF9wcykgPj4gNDsKIAlleHRfY2FzbGF0ID0gKDIgKiBjYXNfbGF0ZW5jeSAtIDEpID4+IDQ7CiAJZXh0X2FkZF9sYXQgPSBhZGRpdGl2ZV9sYXRlbmN5ID4+IDQ7CisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorCWV4dF9yZWZyZWMgPSAocGljb3NfdG9fbWNsayhjb21tb25fZGltbS0+dHJmYzFfcHMpIC0gOCkgPj4gNDsKKyNlbHNlCiAJZXh0X3JlZnJlYyA9IChwaWNvc190b19tY2xrKGNvbW1vbl9kaW1tLT50cmZjX3BzKSAtIDgpID4+IDQ7CiAJLyogZXh0X3dycmVjIG9ubHkgZGVhbHMgd2l0aCAxNiBjbG9jayBhbmQgYWJvdmUsIG9yIDE0IHdpdGggT1RGICovCisjZW5kaWYKIAlleHRfd3JyZWMgPSAocGljb3NfdG9fbWNsayhjb21tb25fZGltbS0+dHdyX3BzKSArCiAJCShwb3B0cy0+b3RmX2J1cnN0X2Nob3BfZW4gPyAyIDogMCkpID4+IDQ7CiAKQEAgLTQwNCw5ICs0NTIsMTkgQEAKIAl1bnNpZ25lZCBjaGFyIGFjdHRvYWN0X21jbGs7CiAJLyogTGFzdCB3cml0ZSBkYXRhIHBhaXIgdG8gcmVhZCBjb21tYW5kIGlzc3VlIGludGVydmFsICh0V1RSKSAqLwogCXVuc2lnbmVkIGNoYXIgd3J0b3JkX21jbGs7CisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorCS8qIEREUjQgc3VwcG9ydHMgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjQgKi8KKwlzdGF0aWMgY29uc3QgdTggd3JyZWNfdGFibGVbXSA9IHsKKwkJMTAsIDEwLCAxMCwgMTAsIDEwLAorCQkxMCwgMTAsIDEwLCAxMCwgMTAsCisJCTEyLCAxMiwgMTQsIDE0LCAxNiwKKwkJMTYsIDE4LCAxOCwgMjAsIDIwLAorCQkyNCwgMjQsIDI0LCAyNH07CisjZWxzZQogCS8qIEREUl9TRFJBTV9NT0RFIGRvZXNuJ3Qgc3VwcG9ydCA5LDExLDEzLDE1ICovCiAJc3RhdGljIGNvbnN0IHU4IHdycmVjX3RhYmxlW10gPSB7CiAJCTEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDEwLCAxMCwgMTIsIDEyLCAxNCwgMTQsIDAsIDB9OworI2VuZGlmCiAKIAlwcmV0b2FjdF9tY2xrID0gcGljb3NfdG9fbWNsayhjb21tb25fZGltbS0+dHJwX3BzKTsKIAlhY3R0b3ByZV9tY2xrID0gcGljb3NfdG9fbWNsayhjb21tb25fZGltbS0+dHJhc19wcyk7CkBAIC00MzgsMjAgKzQ5NiwzNCBAQAogCSAqIHdlIG5lZWQgc2V0IGV4dGVuZCBiaXQgZm9yIGl0IGF0CiAJICogVElNSU5HX0NGR18zW0VYVF9DQVNMQVRdCiAJICovCi0JY2FzbGF0X2N0cmwgPSAyICogY2FzX2xhdGVuY3kgLSAxOworCWlmIChmc2xfZGRyX2dldF92ZXJzaW9uKCkgPD0gMHg0MDQwMCkKKwkJY2FzbGF0X2N0cmwgPSAyICogY2FzX2xhdGVuY3kgLSAxOworCWVsc2UKKwkJY2FzbGF0X2N0cmwgPSAoY2FzX2xhdGVuY3kgLSAxKSA8PCAxOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9ERFI0CisJcmVmcmVjX2N0cmwgPSBwaWNvc190b19tY2xrKGNvbW1vbl9kaW1tLT50cmZjMV9wcykgLSA4OworCXdycmVjX21jbGsgPSBwaWNvc190b19tY2xrKGNvbW1vbl9kaW1tLT50d3JfcHMpOworCWFjdHRvYWN0X21jbGsgPSBtYXgocGljb3NfdG9fbWNsayhjb21tb25fZGltbS0+dHJyZHNfcHMpLCA0KTsKKwl3cnRvcmRfbWNsayA9IG1heCgyLCBwaWNvc190b19tY2xrKDI1MDApKTsKKwlpZiAoKHdycmVjX21jbGsgPCAxKSB8fCAod3JyZWNfbWNsayA+IDI0KSkKKwkJcHJpbnRmKCJFcnJvcjogV1JSRUMgZG9lc24ndCBzdXBwb3J0ICVkIGNsb2Nrc1xuIiwgd3JyZWNfbWNsayk7CisJZWxzZQorCQl3cnJlY19tY2xrID0gd3JyZWNfdGFibGVbd3JyZWNfbWNsayAtIDFdOworI2Vsc2UKIAlyZWZyZWNfY3RybCA9IHBpY29zX3RvX21jbGsoY29tbW9uX2RpbW0tPnRyZmNfcHMpIC0gODsKIAl3cnJlY19tY2xrID0gcGljb3NfdG9fbWNsayhjb21tb25fZGltbS0+dHdyX3BzKTsKLQotCWlmICh3cnJlY19tY2xrID4gMTYpCi0JCXByaW50ZigiRXJyb3I6IFdSUkVDIGRvZXNuJ3Qgc3VwcG9ydCBtb3JlIHRoYW4gMTYgY2xvY2tzXG4iKTsKKwlhY3R0b2FjdF9tY2xrID0gcGljb3NfdG9fbWNsayhjb21tb25fZGltbS0+dHJyZF9wcyk7CisJd3J0b3JkX21jbGsgPSBwaWNvc190b19tY2xrKGNvbW1vbl9kaW1tLT50d3RyX3BzKTsKKwlpZiAoKHdycmVjX21jbGsgPCAxKSB8fCAod3JyZWNfbWNsayA+IDE2KSkKKwkJcHJpbnRmKCJFcnJvcjogV1JSRUMgZG9lc24ndCBzdXBwb3J0ICVkIGNsb2Nrc1xuIiwgd3JyZWNfbWNsayk7CiAJZWxzZQogCQl3cnJlY19tY2xrID0gd3JyZWNfdGFibGVbd3JyZWNfbWNsayAtIDFdOworI2VuZGlmCiAJaWYgKHBvcHRzLT5vdGZfYnVyc3RfY2hvcF9lbikKIAkJd3JyZWNfbWNsayArPSAyOwogCi0JYWN0dG9hY3RfbWNsayA9IHBpY29zX3RvX21jbGsoY29tbW9uX2RpbW0tPnRycmRfcHMpOwogCS8qCiAJICogSkVERUMgaGFzIG1pbiByZXF1aXJlbWVudCBmb3IgdFJSRAogCSAqLwpAQCAtNDU5LDcgKzUzMSw2IEBACiAJaWYgKGFjdHRvYWN0X21jbGsgPCA0KQogCQlhY3R0b2FjdF9tY2xrID0gNDsKICNlbmRpZgotCXdydG9yZF9tY2xrID0gcGljb3NfdG9fbWNsayhjb21tb25fZGltbS0+dHd0cl9wcyk7CiAJLyoKIAkgKiBKRURFQyBoYXMgc29tZSBtaW4gcmVxdWlyZW1lbnRzIGZvciB0V1RSCiAJICovCkBAIC01MjYsMTQgKzU5NywxOCBAQAogCXdyX2xhdCA9IGNvbXB1dGVfY2FzX3dyaXRlX2xhdGVuY3koKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorCXJkX3RvX3ByZSA9IHBpY29zX3RvX21jbGsoNzUwMCk7CisjZWxzZQogCXJkX3RvX3ByZSA9IHBpY29zX3RvX21jbGsoY29tbW9uX2RpbW0tPnRydHBfcHMpOworI2VuZGlmCiAJLyoKIAkgKiBKRURFQyBoYXMgc29tZSBtaW4gcmVxdWlyZW1lbnRzIGZvciB0UlRQCiAJICovCiAjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIyKQogCWlmIChyZF90b19wcmUgIDwgMikKIAkJcmRfdG9fcHJlICA9IDI7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpCisjZWxpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpIHx8IGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSNCkKIAlpZiAocmRfdG9fcHJlIDwgNCkKIAkJcmRfdG9fcHJlID0gNDsKICNlbmRpZgpAQCAtNTQxLDEzICs2MTYsMjAgQEAKIAkJcmRfdG9fcHJlICs9IDI7IC8qIGFjY29yZGluZyB0byBVTSAqLwogCiAJd3JfZGF0YV9kZWxheSA9IHBvcHRzLT53cml0ZV9kYXRhX2RlbGF5OworI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwljcG8gPSAwOworCWNrZV9wbHMgPSBtYXgoMywgcGljb3NfdG9fbWNsayg1MDAwKSk7CisjZWxzZQogCWNrZV9wbHMgPSBwaWNvc190b19tY2xrKHBvcHRzLT50Y2tlX2Nsb2NrX3B1bHNlX3dpZHRoX3BzKTsKKyNlbmRpZgorCiAJZm91cl9hY3QgPSBwaWNvc190b19tY2xrKHBvcHRzLT50ZmF3X3dpbmRvd19mb3VyX2FjdGl2YXRlc19wcyk7CiAKIAlkZHItPnRpbWluZ19jZmdfMiA9ICgwCiAJCXwgKChhZGRfbGF0X21jbGsgJiAweGYpIDw8IDI4KQogCQl8ICgoY3BvICYgMHgxZikgPDwgMjMpCiAJCXwgKCh3cl9sYXQgJiAweGYpIDw8IDE5KQorCQl8ICgod3JfbGF0ICYgMHgxMCkgPDwgMTQpCiAJCXwgKChyZF90b19wcmUgJiBSRF9UT19QUkVfTUFTSykgPDwgUkRfVE9fUFJFX1NISUZUKQogCQl8ICgod3JfZGF0YV9kZWxheSAmIFdSX0RBVEFfREVMQVlfTUFTSykgPDwgV1JfREFUQV9ERUxBWV9TSElGVCkKIAkJfCAoKGNrZV9wbHMgJiAweDcpIDw8IDYpCkBAIC02NDAsNyArNzIyLDggQEAKIAkgKiB3ZSBtdXN0IGNsZWFyIGl0IHdoZW4gdXNlIHRoZSBvbi10aGUtZmx5IG1vZGUsCiAJICogbXVzdCBzZXQgaXQgd2hlbiB1c2UgdGhlIDMyLWJpdHMgYnVzIG1vZGUuCiAJICovCi0JaWYgKHNkcmFtX3R5cGUgPT0gU0RSQU1fVFlQRV9ERFIzKSB7CisJaWYgKChzZHJhbV90eXBlID09IFNEUkFNX1RZUEVfRERSMykgfHwKKwkgICAgKHNkcmFtX3R5cGUgPT0gU0RSQU1fVFlQRV9ERFI0KSkgewogCQlpZiAocG9wdHMtPmJ1cnN0X2xlbmd0aCA9PSBERFJfQkw4KQogCQkJZWlnaHRfYmUgPSAxOwogCQlpZiAocG9wdHMtPmJ1cnN0X2xlbmd0aCA9PSBERFJfT1RGKQpAQCAtNjgyLDggKzc2NSw2IEBACiB7CiAJdW5zaWduZWQgaW50IGZyY19zciA9IDA7CS8qIEZvcmNlIHNlbGYgcmVmcmVzaCAqLwogCXVuc2lnbmVkIGludCBzcl9pZSA9IDA7CQkvKiBTZWxmLXJlZnJlc2ggaW50ZXJydXB0IGVuYWJsZSAqLwotCXVuc2lnbmVkIGludCBkbGxfcnN0X2RpczsJLyogRExMIHJlc2V0IGRpc2FibGUgKi8KLQl1bnNpZ25lZCBpbnQgZHFzX2NmZzsJCS8qIERRUyBjb25maWd1cmF0aW9uICovCiAJdW5zaWduZWQgaW50IG9kdF9jZmcgPSAwOwkvKiBPRFQgY29uZmlndXJhdGlvbiAqLwogCXVuc2lnbmVkIGludCBudW1fcHI7CQkvKiBOdW1iZXIgb2YgcG9zdGVkIHJlZnJlc2hlcyAqLwogCXVuc2lnbmVkIGludCBzbG93ID0gMDsJCS8qIEREUiB3aWxsIGJlIHJ1biBsZXNzIHRoYW4gMTI1MCAqLwpAQCAtNjk1LDkgKzc3NiwxMiBAQAogCXVuc2lnbmVkIGludCBtZF9lbiA9IDA7CQkvKiBNaXJyb3JlZCBESU1NIEVuYWJsZSAqLwogCXVuc2lnbmVkIGludCBxZF9lbiA9IDA7CQkvKiBxdWFkLXJhbmsgRElNTSBFbmFibGUgKi8KIAlpbnQgaTsKKyNpZm5kZWYgQ09ORklHX1NZU19GU0xfRERSNAorCXVuc2lnbmVkIGludCBkbGxfcnN0X2RpcyA9IDE7CS8qIERMTCByZXNldCBkaXNhYmxlICovCisJdW5zaWduZWQgaW50IGRxc19jZmc7CQkvKiBEUVMgY29uZmlndXJhdGlvbiAqLwogCi0JZGxsX3JzdF9kaXMgPSAxOwkvKiBNYWtlIHRoaXMgY29uZmlndXJhYmxlICovCiAJZHFzX2NmZyA9IHBvcHRzLT5kcXNfY29uZmlnOworI2VuZGlmCiAJZm9yIChpID0gMDsgaSA8IENPTkZJR19DSElQX1NFTEVDVFNfUEVSX0NUUkw7IGkrKykgewogCQlpZiAocG9wdHMtPmNzX2xvY2FsX29wdHNbaV0ub2R0X3JkX2NmZwogCQkJfHwgcG9wdHMtPmNzX2xvY2FsX29wdHNbaV0ub2R0X3dyX2NmZykgewpAQCAtNzE1LDcgKzc5OSw3IEBACiAJICogICAgICAgICogKHtFWFRfUkVGUkVDIHx8IFJFRlJFQ30gKyA4ICsgMildfQogCSAqICAgICAgPDwgRERSX1NEUkFNX0lOVEVSVkFMW1JFRklOVF0KIAkgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpCisjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIzKSB8fCBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjQpCiAJb2JjX2NmZyA9IHBvcHRzLT5vdGZfYnVyc3RfY2hvcF9lbjsKICNlbHNlCiAJb2JjX2NmZyA9IDA7CkBAIC03NDQsMTUgKzgyOCwxNyBAQAogCWRfaW5pdCA9IDA7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpIHx8IGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSNCkKIAltZF9lbiA9IHBvcHRzLT5taXJyb3JlZF9kaW1tOwogI2VuZGlmCiAJcWRfZW4gPSBwb3B0cy0+cXVhZF9yYW5rX3ByZXNlbnQgPyAxIDogMDsKIAlkZHItPmRkcl9zZHJhbV9jZmdfMiA9ICgwCiAJCXwgKChmcmNfc3IgJiAweDEpIDw8IDMxKQogCQl8ICgoc3JfaWUgJiAweDEpIDw8IDMwKQorI2lmbmRlZiBDT05GSUdfU1lTX0ZTTF9ERFI0CiAJCXwgKChkbGxfcnN0X2RpcyAmIDB4MSkgPDwgMjkpCiAJCXwgKChkcXNfY2ZnICYgMHgzKSA8PCAyNikKKyNlbmRpZgogCQl8ICgob2R0X2NmZyAmIDB4MykgPDwgMjEpCiAJCXwgKChudW1fcHIgJiAweGYpIDw8IDEyKQogCQl8ICgoc2xvdyAmIDEpIDw8IDExKQpAQCAtNzY4LDYgKzg1NCw3IEBACiAJZGVidWcoIkZTTEREUjogZGRyX3NkcmFtX2NmZ18yID0gMHglMDh4XG4iLCBkZHItPmRkcl9zZHJhbV9jZmdfMik7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9ERFI0CiAvKiBERFIgU0RSQU0gTW9kZSBjb25maWd1cmF0aW9uIDIgKEREUl9TRFJBTV9NT0RFXzIpICovCiBzdGF0aWMgdm9pZCBzZXRfZGRyX3NkcmFtX21vZGVfMihmc2xfZGRyX2NmZ19yZWdzX3QgKmRkciwKIAkJCQljb25zdCBtZW1jdGxfb3B0aW9uc190ICpwb3B0cywKQEAgLTc3Niw4ICs4NjMsOTMgQEAKIHsKIAl1bnNpZ25lZCBzaG9ydCBlc2Rtb2RlMiA9IDA7CS8qIEV4dGVuZGVkIFNEUkFNIG1vZGUgMiAqLwogCXVuc2lnbmVkIHNob3J0IGVzZG1vZGUzID0gMDsJLyogRXh0ZW5kZWQgU0RSQU0gbW9kZSAzICovCisJaW50IGk7CisJdW5zaWduZWQgaW50IHdyX2NyYyA9IDA7CS8qIERpc2FibGUgKi8KKwl1bnNpZ25lZCBpbnQgcnR0X3dyID0gMDsJLyogUnR0X1dSIC0gZHluYW1pYyBPRFQgb2ZmICovCisJdW5zaWduZWQgaW50IHNydCA9IDA7CS8qIHNlbGYtcmVmcmVzaCB0ZW1lcmF0dXJlLCBub3JtYWwgcmFuZ2UgKi8KKwl1bnNpZ25lZCBpbnQgY3dsID0gY29tcHV0ZV9jYXNfd3JpdGVfbGF0ZW5jeSgpIC0gOTsKKwl1bnNpZ25lZCBpbnQgbXByID0gMDsJLyogc2VyaWFsICovCisJdW5zaWduZWQgaW50IHdjX2xhdDsKKwljb25zdCB1bnNpZ25lZCBpbnQgbWNsa19wcyA9IGdldF9tZW1vcnlfY2xrX3BlcmlvZF9wcygpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIzKQorCWlmIChwb3B0cy0+cnR0X292ZXJyaWRlKQorCQlydHRfd3IgPSBwb3B0cy0+cnR0X3dyX292ZXJyaWRlX3ZhbHVlOworCWVsc2UKKwkJcnR0X3dyID0gcG9wdHMtPmNzX2xvY2FsX29wdHNbMF0ub2R0X3J0dF93cjsKKworCWlmIChjb21tb25fZGltbS0+ZXh0ZW5kZWRfb3Bfc3J0KQorCQlzcnQgPSBjb21tb25fZGltbS0+ZXh0ZW5kZWRfb3Bfc3J0OworCisJZXNkbW9kZTIgPSAoMAorCQl8ICgod3JfY3JjICYgMHgxKSA8PCAxMikKKwkJfCAoKHJ0dF93ciAmIDB4MykgPDwgOSkKKwkJfCAoKHNydCAmIDB4MykgPDwgNikKKwkJfCAoKGN3bCAmIDB4NykgPDwgMykpOworCisJaWYgKG1jbGtfcHMgPj0gMTI1MCkKKwkJd2NfbGF0ID0gMDsKKwllbHNlIGlmIChtY2xrX3BzID49IDgzMykKKwkJd2NfbGF0ID0gMTsKKwllbHNlCisJCXdjX2xhdCA9IDI7CisKKwllc2Rtb2RlMyA9ICgwCisJCXwgKChtcHIgJiAweDMpIDw8IDExKQorCQl8ICgod2NfbGF0ICYgMHgzKSA8PCA5KSk7CisKKwlkZHItPmRkcl9zZHJhbV9tb2RlXzIgPSAoMAorCQkJCSB8ICgoZXNkbW9kZTIgJiAweEZGRkYpIDw8IDE2KQorCQkJCSB8ICgoZXNkbW9kZTMgJiAweEZGRkYpIDw8IDApCisJCQkJICk7CisJZGVidWcoIkZTTEREUjogZGRyX3NkcmFtX21vZGVfMiA9IDB4JTA4eFxuIiwgZGRyLT5kZHJfc2RyYW1fbW9kZV8yKTsKKworCWlmICh1bnFfbXJzX2VuKSB7CS8qIHVuaXF1ZSBtb2RlIHJlZ2lzdGVycyBhcmUgc3VwcG9ydGVkICovCisJCWZvciAoaSA9IDE7IGkgPCBDT05GSUdfQ0hJUF9TRUxFQ1RTX1BFUl9DVFJMOyBpKyspIHsKKwkJCWlmIChwb3B0cy0+cnR0X292ZXJyaWRlKQorCQkJCXJ0dF93ciA9IHBvcHRzLT5ydHRfd3Jfb3ZlcnJpZGVfdmFsdWU7CisJCQllbHNlCisJCQkJcnR0X3dyID0gcG9wdHMtPmNzX2xvY2FsX29wdHNbaV0ub2R0X3J0dF93cjsKKworCQkJZXNkbW9kZTIgJj0gMHhGOUZGOwkvKiBjbGVhciBiaXQgMTAsIDkgKi8KKwkJCWVzZG1vZGUyIHw9IChydHRfd3IgJiAweDMpIDw8IDk7CisJCQlzd2l0Y2ggKGkpIHsKKwkJCWNhc2UgMToKKwkJCQlkZHItPmRkcl9zZHJhbV9tb2RlXzQgPSAoMAorCQkJCQl8ICgoZXNkbW9kZTIgJiAweEZGRkYpIDw8IDE2KQorCQkJCQl8ICgoZXNkbW9kZTMgJiAweEZGRkYpIDw8IDApCisJCQkJCSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJZGRyLT5kZHJfc2RyYW1fbW9kZV82ID0gKDAKKwkJCQkJfCAoKGVzZG1vZGUyICYgMHhGRkZGKSA8PCAxNikKKwkJCQkJfCAoKGVzZG1vZGUzICYgMHhGRkZGKSA8PCAwKQorCQkJCQkpOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCWRkci0+ZGRyX3NkcmFtX21vZGVfOCA9ICgwCisJCQkJCXwgKChlc2Rtb2RlMiAmIDB4RkZGRikgPDwgMTYpCisJCQkJCXwgKChlc2Rtb2RlMyAmIDB4RkZGRikgPDwgMCkKKwkJCQkJKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlkZWJ1ZygiRlNMRERSOiBkZHJfc2RyYW1fbW9kZV80ID0gMHglMDh4XG4iLAorCQkgICAgICBkZHItPmRkcl9zZHJhbV9tb2RlXzQpOworCQlkZWJ1ZygiRlNMRERSOiBkZHJfc2RyYW1fbW9kZV82ID0gMHglMDh4XG4iLAorCQkgICAgICBkZHItPmRkcl9zZHJhbV9tb2RlXzYpOworCQlkZWJ1ZygiRlNMRERSOiBkZHJfc2RyYW1fbW9kZV84ID0gMHglMDh4XG4iLAorCQkgICAgICBkZHItPmRkcl9zZHJhbV9tb2RlXzgpOworCX0KK30KKyNlbGlmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykKKy8qIEREUiBTRFJBTSBNb2RlIGNvbmZpZ3VyYXRpb24gMiAoRERSX1NEUkFNX01PREVfMikgKi8KK3N0YXRpYyB2b2lkIHNldF9kZHJfc2RyYW1fbW9kZV8yKGZzbF9kZHJfY2ZnX3JlZ3NfdCAqZGRyLAorCQkJCWNvbnN0IG1lbWN0bF9vcHRpb25zX3QgKnBvcHRzLAorCQkJCWNvbnN0IGNvbW1vbl90aW1pbmdfcGFyYW1zX3QgKmNvbW1vbl9kaW1tLAorCQkJCWNvbnN0IHVuc2lnbmVkIGludCB1bnFfbXJzX2VuKQoreworCXVuc2lnbmVkIHNob3J0IGVzZG1vZGUyID0gMDsJLyogRXh0ZW5kZWQgU0RSQU0gbW9kZSAyICovCisJdW5zaWduZWQgc2hvcnQgZXNkbW9kZTMgPSAwOwkvKiBFeHRlbmRlZCBTRFJBTSBtb2RlIDMgKi8KIAlpbnQgaTsKIAl1bnNpZ25lZCBpbnQgcnR0X3dyID0gMDsJLyogUnR0X1dSIC0gZHluYW1pYyBPRFQgb2ZmICovCiAJdW5zaWduZWQgaW50IHNydCA9IDA7CS8qIHNlbGYtcmVmcmVzaCB0ZW1lcmF0dXJlLCBub3JtYWwgcmFuZ2UgKi8KQEAgLTc5OSwxNCArOTcxLDEyIEBACiAJCXwgKChhc3IgJiAweDEpIDw8IDYpCiAJCXwgKChjd2wgJiAweDcpIDw8IDMpCiAJCXwgKChwYXNyICYgMHg3KSA8PCAwKSk7Ci0jZW5kaWYKIAlkZHItPmRkcl9zZHJhbV9tb2RlXzIgPSAoMAogCQkJCSB8ICgoZXNkbW9kZTIgJiAweEZGRkYpIDw8IDE2KQogCQkJCSB8ICgoZXNkbW9kZTMgJiAweEZGRkYpIDw8IDApCiAJCQkJICk7CiAJZGVidWcoIkZTTEREUjogZGRyX3NkcmFtX21vZGVfMiA9IDB4JTA4eFxuIiwgZGRyLT5kZHJfc2RyYW1fbW9kZV8yKTsKIAotI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjMKIAlpZiAodW5xX21yc19lbikgewkvKiB1bmlxdWUgbW9kZSByZWdpc3RlcnMgYXJlIHN1cHBvcnRlZCAqLwogCQlmb3IgKGkgPSAxOyBpIDwgQ09ORklHX0NISVBfU0VMRUNUU19QRVJfQ1RSTDsgaSsrKSB7CiAJCQlpZiAocG9wdHMtPnJ0dF9vdmVycmlkZSkKQEAgLTg0NCw5ICsxMDE0LDEyOCBAQAogCQlkZWJ1ZygiRlNMRERSOiBkZHJfc2RyYW1fbW9kZV84ID0gMHglMDh4XG4iLAogCQkJZGRyLT5kZHJfc2RyYW1fbW9kZV84KTsKIAl9Cit9CisKKyNlbHNlIC8qIGZvciBERFIyIGFuZCBERFIxICovCisvKiBERFIgU0RSQU0gTW9kZSBjb25maWd1cmF0aW9uIDIgKEREUl9TRFJBTV9NT0RFXzIpICovCitzdGF0aWMgdm9pZCBzZXRfZGRyX3NkcmFtX21vZGVfMihmc2xfZGRyX2NmZ19yZWdzX3QgKmRkciwKKwkJCQljb25zdCBtZW1jdGxfb3B0aW9uc190ICpwb3B0cywKKwkJCQljb25zdCBjb21tb25fdGltaW5nX3BhcmFtc190ICpjb21tb25fZGltbSwKKwkJCQljb25zdCB1bnNpZ25lZCBpbnQgdW5xX21yc19lbikKK3sKKwl1bnNpZ25lZCBzaG9ydCBlc2Rtb2RlMiA9IDA7CS8qIEV4dGVuZGVkIFNEUkFNIG1vZGUgMiAqLworCXVuc2lnbmVkIHNob3J0IGVzZG1vZGUzID0gMDsJLyogRXh0ZW5kZWQgU0RSQU0gbW9kZSAzICovCisKKwlkZHItPmRkcl9zZHJhbV9tb2RlXzIgPSAoMAorCQkJCSB8ICgoZXNkbW9kZTIgJiAweEZGRkYpIDw8IDE2KQorCQkJCSB8ICgoZXNkbW9kZTMgJiAweEZGRkYpIDw8IDApCisJCQkJICk7CisJZGVidWcoIkZTTEREUjogZGRyX3NkcmFtX21vZGVfMiA9IDB4JTA4eFxuIiwgZGRyLT5kZHJfc2RyYW1fbW9kZV8yKTsKK30KICNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorLyogRERSIFNEUkFNIE1vZGUgY29uZmlndXJhdGlvbiA5IChERFJfU0RSQU1fTU9ERV85KSAqLworc3RhdGljIHZvaWQgc2V0X2Rkcl9zZHJhbV9tb2RlXzkoZnNsX2Rkcl9jZmdfcmVnc190ICpkZHIsCisJCQkJY29uc3QgbWVtY3RsX29wdGlvbnNfdCAqcG9wdHMsCisJCQkJY29uc3QgY29tbW9uX3RpbWluZ19wYXJhbXNfdCAqY29tbW9uX2RpbW0sCisJCQkJY29uc3QgdW5zaWduZWQgaW50IHVucV9tcnNfZW4pCit7CisJaW50IGk7CisJdW5zaWduZWQgc2hvcnQgZXNkbW9kZTQgPSAwOwkvKiBFeHRlbmRlZCBTRFJBTSBtb2RlIDQgKi8KKwl1bnNpZ25lZCBzaG9ydCBlc2Rtb2RlNTsJLyogRXh0ZW5kZWQgU0RSQU0gbW9kZSA1ICovCisKKwllc2Rtb2RlNSA9IDB4MDAwMDA0MDA7CQkvKiBEYXRhIG1hc2sgZW5hYmxlZCAqLworCisJZGRyLT5kZHJfc2RyYW1fbW9kZV85ID0gKDAKKwkJCQkgfCAoKGVzZG1vZGU0ICYgMHhmZmZmKSA8PCAxNikKKwkJCQkgfCAoKGVzZG1vZGU1ICYgMHhmZmZmKSA8PCAwKQorCQkJCSk7CisJZGVidWcoIkZTTEREUjogZGRyX3NkcmFtX21vZGVfOSkgPSAweCUwOHhcbiIsIGRkci0+ZGRyX3NkcmFtX21vZGVfOSk7CisJaWYgKHVucV9tcnNfZW4pIHsJLyogdW5pcXVlIG1vZGUgcmVnaXN0ZXJzIGFyZSBzdXBwb3J0ZWQgKi8KKwkJZm9yIChpID0gMTsgaSA8IENPTkZJR19DSElQX1NFTEVDVFNfUEVSX0NUUkw7IGkrKykgeworCQkJc3dpdGNoIChpKSB7CisJCQljYXNlIDE6CisJCQkJZGRyLT5kZHJfc2RyYW1fbW9kZV8xMSA9ICgwCisJCQkJCXwgKChlc2Rtb2RlNCAmIDB4RkZGRikgPDwgMTYpCisJCQkJCXwgKChlc2Rtb2RlNSAmIDB4RkZGRikgPDwgMCkKKwkJCQkJKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlkZHItPmRkcl9zZHJhbV9tb2RlXzEzID0gKDAKKwkJCQkJfCAoKGVzZG1vZGU0ICYgMHhGRkZGKSA8PCAxNikKKwkJCQkJfCAoKGVzZG1vZGU1ICYgMHhGRkZGKSA8PCAwKQorCQkJCQkpOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCWRkci0+ZGRyX3NkcmFtX21vZGVfMTUgPSAoMAorCQkJCQl8ICgoZXNkbW9kZTQgJiAweEZGRkYpIDw8IDE2KQorCQkJCQl8ICgoZXNkbW9kZTUgJiAweEZGRkYpIDw8IDApCisJCQkJCSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZGVidWcoIkZTTEREUjogZGRyX3NkcmFtX21vZGVfMTEgPSAweCUwOHhcbiIsCisJCSAgICAgIGRkci0+ZGRyX3NkcmFtX21vZGVfMTEpOworCQlkZWJ1ZygiRlNMRERSOiBkZHJfc2RyYW1fbW9kZV8xMyA9IDB4JTA4eFxuIiwKKwkJICAgICAgZGRyLT5kZHJfc2RyYW1fbW9kZV8xMyk7CisJCWRlYnVnKCJGU0xERFI6IGRkcl9zZHJhbV9tb2RlXzE1ID0gMHglMDh4XG4iLAorCQkgICAgICBkZHItPmRkcl9zZHJhbV9tb2RlXzE1KTsKKwl9CiB9CiAKKy8qIEREUiBTRFJBTSBNb2RlIGNvbmZpZ3VyYXRpb24gMTAgKEREUl9TRFJBTV9NT0RFXzEwKSAqLworc3RhdGljIHZvaWQgc2V0X2Rkcl9zZHJhbV9tb2RlXzEwKGZzbF9kZHJfY2ZnX3JlZ3NfdCAqZGRyLAorCQkJCWNvbnN0IG1lbWN0bF9vcHRpb25zX3QgKnBvcHRzLAorCQkJCWNvbnN0IGNvbW1vbl90aW1pbmdfcGFyYW1zX3QgKmNvbW1vbl9kaW1tLAorCQkJCWNvbnN0IHVuc2lnbmVkIGludCB1bnFfbXJzX2VuKQoreworCWludCBpOworCXVuc2lnbmVkIHNob3J0IGVzZG1vZGU2ID0gMDsJLyogRXh0ZW5kZWQgU0RSQU0gbW9kZSA2ICovCisJdW5zaWduZWQgc2hvcnQgZXNkbW9kZTcgPSAwOwkvKiBFeHRlbmRlZCBTRFJBTSBtb2RlIDcgKi8KKwl1bnNpZ25lZCBpbnQgdGNjZGxfbWluID0gcGljb3NfdG9fbWNsayhjb21tb25fZGltbS0+dGNjZGxfcHMpOworCisJZXNkbW9kZTYgPSAoKHRjY2RsX21pbiAtIDQpICYgMHg3KSA8PCAxMDsKKworCWRkci0+ZGRyX3NkcmFtX21vZGVfMTAgPSAoMAorCQkJCSB8ICgoZXNkbW9kZTYgJiAweGZmZmYpIDw8IDE2KQorCQkJCSB8ICgoZXNkbW9kZTcgJiAweGZmZmYpIDw8IDApCisJCQkJKTsKKwlkZWJ1ZygiRlNMRERSOiBkZHJfc2RyYW1fbW9kZV8xMCkgPSAweCUwOHhcbiIsIGRkci0+ZGRyX3NkcmFtX21vZGVfMTApOworCWlmICh1bnFfbXJzX2VuKSB7CS8qIHVuaXF1ZSBtb2RlIHJlZ2lzdGVycyBhcmUgc3VwcG9ydGVkICovCisJCWZvciAoaSA9IDE7IGkgPCBDT05GSUdfQ0hJUF9TRUxFQ1RTX1BFUl9DVFJMOyBpKyspIHsKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSAxOgorCQkJCWRkci0+ZGRyX3NkcmFtX21vZGVfMTIgPSAoMAorCQkJCQl8ICgoZXNkbW9kZTYgJiAweEZGRkYpIDw8IDE2KQorCQkJCQl8ICgoZXNkbW9kZTcgJiAweEZGRkYpIDw8IDApCisJCQkJCSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJZGRyLT5kZHJfc2RyYW1fbW9kZV8xNCA9ICgwCisJCQkJCXwgKChlc2Rtb2RlNiAmIDB4RkZGRikgPDwgMTYpCisJCQkJCXwgKChlc2Rtb2RlNyAmIDB4RkZGRikgPDwgMCkKKwkJCQkJKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQlkZHItPmRkcl9zZHJhbV9tb2RlXzE2ID0gKDAKKwkJCQkJfCAoKGVzZG1vZGU2ICYgMHhGRkZGKSA8PCAxNikKKwkJCQkJfCAoKGVzZG1vZGU3ICYgMHhGRkZGKSA8PCAwKQorCQkJCQkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWRlYnVnKCJGU0xERFI6IGRkcl9zZHJhbV9tb2RlXzEyID0gMHglMDh4XG4iLAorCQkgICAgICBkZHItPmRkcl9zZHJhbV9tb2RlXzEyKTsKKwkJZGVidWcoIkZTTEREUjogZGRyX3NkcmFtX21vZGVfMTQgPSAweCUwOHhcbiIsCisJCSAgICAgIGRkci0+ZGRyX3NkcmFtX21vZGVfMTQpOworCQlkZWJ1ZygiRlNMRERSOiBkZHJfc2RyYW1fbW9kZV8xNiA9IDB4JTA4eFxuIiwKKwkJICAgICAgZGRyLT5kZHJfc2RyYW1fbW9kZV8xNik7CisJfQorfQorCisjZW5kaWYKKwogLyogRERSIFNEUkFNIEludGVydmFsIENvbmZpZ3VyYXRpb24gKEREUl9TRFJBTV9JTlRFUlZBTCkgKi8KIHN0YXRpYyB2b2lkIHNldF9kZHJfc2RyYW1faW50ZXJ2YWwoZnNsX2Rkcl9jZmdfcmVnc190ICpkZHIsCiAJCQkgICAgICAgY29uc3QgbWVtY3RsX29wdGlvbnNfdCAqcG9wdHMsCkBAIC04NjcsNyArMTE1Niw3IEBACiAJZGVidWcoIkZTTEREUjogZGRyX3NkcmFtX2ludGVydmFsID0gMHglMDh4XG4iLCBkZHItPmRkcl9zZHJhbV9pbnRlcnZhbCk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAogLyogRERSIFNEUkFNIE1vZGUgY29uZmlndXJhdGlvbiBzZXQgKEREUl9TRFJBTV9NT0RFKSAqLwogc3RhdGljIHZvaWQgc2V0X2Rkcl9zZHJhbV9tb2RlKGZzbF9kZHJfY2ZnX3JlZ3NfdCAqZGRyLAogCQkJICAgICAgIGNvbnN0IG1lbWN0bF9vcHRpb25zX3QgKnBvcHRzLApAQCAtODc2LDYgKzExNjUsNyBAQAogCQkJICAgICAgIHVuc2lnbmVkIGludCBhZGRpdGl2ZV9sYXRlbmN5LAogCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB1bnFfbXJzX2VuKQogeworCWludCBpOwogCXVuc2lnbmVkIHNob3J0IGVzZG1vZGU7CQkvKiBFeHRlbmRlZCBTRFJBTSBtb2RlICovCiAJdW5zaWduZWQgc2hvcnQgc2Rtb2RlOwkJLyogU0RSQU0gbW9kZSAqLwogCkBAIC04ODYsNiArMTE3NiwxNzYgQEAKIAl1bnNpZ25lZCBpbnQgd3JsdmxfZW4gPSAwOwkvKiBXcml0ZSBsZXZlbCBlbmFibGU6IDA9bm8sIDE9eWVzICovCiAJdW5zaWduZWQgaW50IGFsID0gMDsJCS8qIFBvc3RlZCBDQVMjIGFkZGl0aXZlIGxhdGVuY3kgKEFMKSAqLwogCXVuc2lnbmVkIGludCBkaWMgPSAwOwkJLyogT3V0cHV0IGRyaXZlciBpbXBlZGFuY2UsIDQwb2htICovCisJdW5zaWduZWQgaW50IGRsbF9lbiA9IDE7CS8qIERMTCBFbmFibGUgIDE9RW5hYmxlIChOb3JtYWwpLAorCQkJCQkJICAgICAgIDA9RGlzYWJsZSAoVGVzdC9EZWJ1ZykgKi8KKworCS8qIE1vZGUgUmVnaXN0ZXIgLSBNUjAgKi8KKwl1bnNpZ25lZCBpbnQgd3IgPSAwOwkvKiBXcml0ZSBSZWNvdmVyeSAqLworCXVuc2lnbmVkIGludCBkbGxfcnN0OwkvKiBETEwgUmVzZXQgKi8KKwl1bnNpZ25lZCBpbnQgbW9kZTsJLyogTm9ybWFsPTAgb3IgVGVzdD0xICovCisJdW5zaWduZWQgaW50IGNhc2xhdCA9IDQ7LyogQ0FTIyBsYXRlbmN5LCBkZWZhdWx0IHNldCBhcyA2IGN5Y2xlcyAqLworCS8qIEJUOiBCdXJzdCBUeXBlICgwPU5pYmJsZSBTZXF1ZW50aWFsLCAxPUludGVybGVhdmVkKSAqLworCXVuc2lnbmVkIGludCBidDsKKwl1bnNpZ25lZCBpbnQgYmw7CS8qIEJMOiBCdXJzdCBMZW5ndGggKi8KKworCXVuc2lnbmVkIGludCB3cl9tY2xrOworCS8qIEREUjQgc3VwcG9ydCBXUiAxMCwgMTIsIDE0LCAxNiwgMTgsIDIwLCAyNCAqLworCXN0YXRpYyBjb25zdCB1OCB3cl90YWJsZVtdID0geworCQkwLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA2LCA2LCA2fTsKKwkvKiBERFI0IHN1cHBvcnQgQ0FTIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxOCwgMjAsIDIyLCAyNCAqLworCXN0YXRpYyBjb25zdCB1OCBjYXNfbGF0ZW5jeV90YWJsZVtdID0geworCQkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA4LAorCQk5LCA5LCAxMCwgMTAsIDExLCAxMX07CisKKwlpZiAocG9wdHMtPnJ0dF9vdmVycmlkZSkKKwkJcnR0ID0gcG9wdHMtPnJ0dF9vdmVycmlkZV92YWx1ZTsKKwllbHNlCisJCXJ0dCA9IHBvcHRzLT5jc19sb2NhbF9vcHRzWzBdLm9kdF9ydHRfbm9ybTsKKworCWlmIChhZGRpdGl2ZV9sYXRlbmN5ID09IChjYXNfbGF0ZW5jeSAtIDEpKQorCQlhbCA9IDE7CisJaWYgKGFkZGl0aXZlX2xhdGVuY3kgPT0gKGNhc19sYXRlbmN5IC0gMikpCisJCWFsID0gMjsKKworCWlmIChwb3B0cy0+cXVhZF9yYW5rX3ByZXNlbnQpCisJCWRpYyA9IDE7CS8qIG91dHB1dCBkcml2ZXIgaW1wZWRhbmNlIDI0MC83IG9obSAqLworCisJLyoKKwkgKiBUaGUgZXNkbW9kZSB2YWx1ZSB3aWxsIGFsc28gYmUgdXNlZCBmb3Igd3JpdGluZworCSAqIE1SMSBkdXJpbmcgd3JpdGUgbGV2ZWxpbmcgZm9yIEREUjMsIGFsdGhvdWdoIHRoZQorCSAqIGJpdHMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHdyaXRlIGxldmVsaW5nCisJICogc2NoZW1lIHdpbGwgYmUgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBERFIKKwkgKiBjb250cm9sbGVyLiBzbyB3ZSBzZXQgdGhlIHdybHZsX2VuID0gMCBoZXJlLgorCSAqLworCWVzZG1vZGUgPSAoMAorCQl8ICgocW9mZiAmIDB4MSkgPDwgMTIpCisJCXwgKCh0ZHFzX2VuICYgMHgxKSA8PCAxMSkKKwkJfCAoKHJ0dCAmIDB4NykgPDwgOCkKKwkJfCAoKHdybHZsX2VuICYgMHgxKSA8PCA3KQorCQl8ICgoYWwgJiAweDMpIDw8IDMpCisJCXwgKChkaWMgJiAweDMpIDw8IDEpICAgLyogRElDIGZpZWxkIGlzIHNwbGl0ICovCisJCXwgKChkbGxfZW4gJiAweDEpIDw8IDApCisJCSk7CisKKwkvKgorCSAqIERMTCBjb250cm9sIGZvciBwcmVjaGFyZ2UgUEQKKwkgKiAwPXNsb3cgZXhpdCBETEwgb2ZmICh0WFBETEwpCisJICogMT1mYXN0IGV4aXQgRExMIG9uICh0WFApCisJICovCisKKwl3cl9tY2xrID0gcGljb3NfdG9fbWNsayhjb21tb25fZGltbS0+dHdyX3BzKTsKKwlpZiAod3JfbWNsayA8PSAyNCkgeworCQl3ciA9IHdyX3RhYmxlW3dyX21jbGsgLSAxMF07CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJFcnJvcjogdW5zdXBwb3J0ZWQgd3JpdGUgcmVjb3ZlcnkgZm9yIG1vZGUgcmVnaXN0ZXIgd3JfbWNsayA9ICVkXG4iLAorCQkgICAgICAgd3JfbWNsayk7CisJfQorCisJZGxsX3JzdCA9IDA7CS8qIGRsbCBubyByZXNldCAqLworCW1vZGUgPSAwOwkvKiBub3JtYWwgbW9kZSAqLworCisJLyogbG9vayB1cCB0YWJsZSB0byBnZXQgdGhlIGNhcyBsYXRlbmN5IGJpdHMgKi8KKwlpZiAoY2FzX2xhdGVuY3kgPj0gOSAmJiBjYXNfbGF0ZW5jeSA8PSAyNCkKKwkJY2FzbGF0ID0gY2FzX2xhdGVuY3lfdGFibGVbY2FzX2xhdGVuY3kgLSA5XTsKKwllbHNlCisJCXByaW50ZigiRXJyb3I6IHVuc3VwcG9ydGVkIGNhcyBsYXRlbmN5IGZvciBtb2RlIHJlZ2lzdGVyXG4iKTsKKworCWJ0ID0gMDsJLyogTmliYmxlIHNlcXVlbnRpYWwgKi8KKworCXN3aXRjaCAocG9wdHMtPmJ1cnN0X2xlbmd0aCkgeworCWNhc2UgRERSX0JMODoKKwkJYmwgPSAwOworCQlicmVhazsKKwljYXNlIEREUl9PVEY6CisJCWJsID0gMTsKKwkJYnJlYWs7CisJY2FzZSBERFJfQkM0OgorCQlibCA9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZigiRXJyb3I6IGludmFsaWQgYnVyc3QgbGVuZ3RoIG9mICV1IHNwZWNpZmllZC4gIiwKKwkJICAgICAgIHBvcHRzLT5idXJzdF9sZW5ndGgpOworCQlwdXRzKCJEZWZhdWx0aW5nIHRvIG9uLXRoZS1mbHkgQkM0IG9yIEJMOCBiZWF0cy5cbiIpOworCQlibCA9IDE7CisJCWJyZWFrOworCX0KKworCXNkbW9kZSA9ICgwCisJCSAgfCAoKHdyICYgMHg3KSA8PCA5KQorCQkgIHwgKChkbGxfcnN0ICYgMHgxKSA8PCA4KQorCQkgIHwgKChtb2RlICYgMHgxKSA8PCA3KQorCQkgIHwgKCgoY2FzbGF0ID4+IDEpICYgMHg3KSA8PCA0KQorCQkgIHwgKChidCAmIDB4MSkgPDwgMykKKwkJICB8ICgoY2FzbGF0ICYgMSkgPDwgMikKKwkJICB8ICgoYmwgJiAweDMpIDw8IDApCisJCSAgKTsKKworCWRkci0+ZGRyX3NkcmFtX21vZGUgPSAoMAorCQkJICAgICAgIHwgKChlc2Rtb2RlICYgMHhGRkZGKSA8PCAxNikKKwkJCSAgICAgICB8ICgoc2Rtb2RlICYgMHhGRkZGKSA8PCAwKQorCQkJICAgICAgICk7CisKKwlkZWJ1ZygiRlNMRERSOiBkZHJfc2RyYW1fbW9kZSA9IDB4JTA4eFxuIiwgZGRyLT5kZHJfc2RyYW1fbW9kZSk7CisKKwlpZiAodW5xX21yc19lbikgewkvKiB1bmlxdWUgbW9kZSByZWdpc3RlcnMgYXJlIHN1cHBvcnRlZCAqLworCQlmb3IgKGkgPSAxOyBpIDwgQ09ORklHX0NISVBfU0VMRUNUU19QRVJfQ1RSTDsgaSsrKSB7CisJCQlpZiAocG9wdHMtPnJ0dF9vdmVycmlkZSkKKwkJCQlydHQgPSBwb3B0cy0+cnR0X292ZXJyaWRlX3ZhbHVlOworCQkJZWxzZQorCQkJCXJ0dCA9IHBvcHRzLT5jc19sb2NhbF9vcHRzW2ldLm9kdF9ydHRfbm9ybTsKKworCQkJZXNkbW9kZSAmPSAweEY4RkY7CS8qIGNsZWFyIGJpdCAxMCw5LDggZm9yIHJ0dCAqLworCQkJZXNkbW9kZSB8PSAocnR0ICYgMHg3KSA8PCA4OworCQkJc3dpdGNoIChpKSB7CisJCQljYXNlIDE6CisJCQkJZGRyLT5kZHJfc2RyYW1fbW9kZV8zID0gKDAKKwkJCQkgICAgICAgfCAoKGVzZG1vZGUgJiAweEZGRkYpIDw8IDE2KQorCQkJCSAgICAgICB8ICgoc2Rtb2RlICYgMHhGRkZGKSA8PCAwKQorCQkJCSAgICAgICApOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCWRkci0+ZGRyX3NkcmFtX21vZGVfNSA9ICgwCisJCQkJICAgICAgIHwgKChlc2Rtb2RlICYgMHhGRkZGKSA8PCAxNikKKwkJCQkgICAgICAgfCAoKHNkbW9kZSAmIDB4RkZGRikgPDwgMCkKKwkJCQkgICAgICAgKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQlkZHItPmRkcl9zZHJhbV9tb2RlXzcgPSAoMAorCQkJCSAgICAgICB8ICgoZXNkbW9kZSAmIDB4RkZGRikgPDwgMTYpCisJCQkJICAgICAgIHwgKChzZG1vZGUgJiAweEZGRkYpIDw8IDApCisJCQkJICAgICAgICk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZGVidWcoIkZTTEREUjogZGRyX3NkcmFtX21vZGVfMyA9IDB4JTA4eFxuIiwKKwkJICAgICAgZGRyLT5kZHJfc2RyYW1fbW9kZV8zKTsKKwkJZGVidWcoIkZTTEREUjogZGRyX3NkcmFtX21vZGVfNSA9IDB4JTA4eFxuIiwKKwkJICAgICAgZGRyLT5kZHJfc2RyYW1fbW9kZV81KTsKKwkJZGVidWcoIkZTTEREUjogZGRyX3NkcmFtX21vZGVfNSA9IDB4JTA4eFxuIiwKKwkJICAgICAgZGRyLT5kZHJfc2RyYW1fbW9kZV81KTsKKwl9Cit9CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykKKy8qIEREUiBTRFJBTSBNb2RlIGNvbmZpZ3VyYXRpb24gc2V0IChERFJfU0RSQU1fTU9ERSkgKi8KK3N0YXRpYyB2b2lkIHNldF9kZHJfc2RyYW1fbW9kZShmc2xfZGRyX2NmZ19yZWdzX3QgKmRkciwKKwkJCSAgICAgICBjb25zdCBtZW1jdGxfb3B0aW9uc190ICpwb3B0cywKKwkJCSAgICAgICBjb25zdCBjb21tb25fdGltaW5nX3BhcmFtc190ICpjb21tb25fZGltbSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2FzX2xhdGVuY3ksCisJCQkgICAgICAgdW5zaWduZWQgaW50IGFkZGl0aXZlX2xhdGVuY3ksCisJCQkgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHVucV9tcnNfZW4pCit7CisJaW50IGk7CisJdW5zaWduZWQgc2hvcnQgZXNkbW9kZTsJCS8qIEV4dGVuZGVkIFNEUkFNIG1vZGUgKi8KKwl1bnNpZ25lZCBzaG9ydCBzZG1vZGU7CQkvKiBTRFJBTSBtb2RlICovCisKKwkvKiBNb2RlIFJlZ2lzdGVyIC0gTVIxICovCisJdW5zaWduZWQgaW50IHFvZmYgPSAwOwkJLyogT3V0cHV0IGJ1ZmZlciBlbmFibGUgMD15ZXMsIDE9bm8gKi8KKwl1bnNpZ25lZCBpbnQgdGRxc19lbiA9IDA7CS8qIFREUVMgRW5hYmxlOiAwPW5vLCAxPXllcyAqLworCXVuc2lnbmVkIGludCBydHQ7CisJdW5zaWduZWQgaW50IHdybHZsX2VuID0gMDsJLyogV3JpdGUgbGV2ZWwgZW5hYmxlOiAwPW5vLCAxPXllcyAqLworCXVuc2lnbmVkIGludCBhbCA9IDA7CQkvKiBQb3N0ZWQgQ0FTIyBhZGRpdGl2ZSBsYXRlbmN5IChBTCkgKi8KKwl1bnNpZ25lZCBpbnQgZGljID0gMDsJCS8qIE91dHB1dCBkcml2ZXIgaW1wZWRhbmNlLCA0MG9obSAqLwogCXVuc2lnbmVkIGludCBkbGxfZW4gPSAwOwkvKiBETEwgRW5hYmxlICAwPUVuYWJsZSAoTm9ybWFsKSwKIAkJCQkJCSAgICAgICAxPURpc2FibGUgKFRlc3QvRGVidWcpICovCiAKQEAgLTkwNyw5ICsxMzY3LDYgQEAKIAkgKi8KIAlzdGF0aWMgY29uc3QgdTggd3JfdGFibGVbXSA9IHsxLCAyLCAzLCA0LCA1LCA1LCA2LCA2LCA3LCA3LCAwLCAwfTsKIAotCWNvbnN0IHVuc2lnbmVkIGludCBtY2xrX3BzID0gZ2V0X21lbW9yeV9jbGtfcGVyaW9kX3BzKCk7Ci0JaW50IGk7Ci0KIAlpZiAocG9wdHMtPnJ0dF9vdmVycmlkZSkKIAkJcnR0ID0gcG9wdHMtPnJ0dF9vdmVycmlkZV92YWx1ZTsKIAllbHNlCkBAIC05NTAsNyArMTQwNyw3IEBACiAJICovCiAJZGxsX29uID0gMTsKIAotCXdyX21jbGsgPSAoY29tbW9uX2RpbW0tPnR3cl9wcyArIG1jbGtfcHMgLSAxKSAvIG1jbGtfcHM7CisJd3JfbWNsayA9IHBpY29zX3RvX21jbGsoY29tbW9uX2RpbW0tPnR3cl9wcyk7CiAJaWYgKHdyX21jbGsgPD0gMTYpIHsKIAkJd3IgPSB3cl90YWJsZVt3cl9tY2xrIC0gNV07CiAJfSBlbHNlIHsKQEAgLTExMDksOSArMTU2Niw2IEBACiAJdW5zaWduZWQgaW50IGJ0OwogCXVuc2lnbmVkIGludCBibDsJLyogQkw6IEJ1cnN0IExlbmd0aCAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIyKQotCWNvbnN0IHVuc2lnbmVkIGludCBtY2xrX3BzID0gZ2V0X21lbW9yeV9jbGtfcGVyaW9kX3BzKCk7Ci0jZW5kaWYKIAlkcXNfZW4gPSAhcG9wdHMtPmRxc19jb25maWc7CiAJcnR0ID0gZnNsX2Rkcl9nZXRfcnR0KCk7CiAKQEAgLTExNDEsNyArMTU5NSw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIxKQogCXdyID0gMDsgICAgICAgLyogSGlzdG9yaWNhbCAqLwogI2VsaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIyKQotCXdyID0gKGNvbW1vbl9kaW1tLT50d3JfcHMgKyBtY2xrX3BzIC0gMSkgLyBtY2xrX3BzIC0gMTsKKwl3ciA9IHBpY29zX3RvX21jbGsoY29tbW9uX2RpbW0tPnR3cl9wcyk7CiAjZW5kaWYKIAlkbGxfcmVzID0gMDsKIAltb2RlID0gMDsKQEAgLTEyNTUsNyArMTcwOSw3IEBACiAJdW5zaWduZWQgaW50IHd3dCA9IDA7IC8qIFdyaXRlLXRvLXdyaXRlIHR1cm5hcm91bmQgZm9yIHNhbWUgQ1MgKi8KIAl1bnNpZ25lZCBpbnQgZGxsX2xvY2sgPSAwOyAvKiBERFIgU0RSQU0gRExMIExvY2sgVGltZSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIzKQorI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykgfHwgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFI0KQogCWlmIChwb3B0cy0+YnVyc3RfbGVuZ3RoID09IEREUl9CTDgpIHsKIAkJLyogV2Ugc2V0IEJMLzIgZm9yIGZpeGVkIEJMOCAqLwogCQlycnQgPSAwOwkvKiBCTC8yIGNsb2NrcyAqLwpAQCAtMTI2NSw2ICsxNzE5LDExIEBACiAJCXJydCA9IDI7CS8qIEJMLzIgKyAyIGNsb2NrcyAqLwogCQl3d3QgPSAyOwkvKiBCTC8yICsgMiBjbG9ja3MgKi8KIAl9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwlkbGxfbG9jayA9IDI7CS8qIHRETExLID0gMTAyNCBjbG9ja3MgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykKIAlkbGxfbG9jayA9IDE7CS8qIHRETExLID0gNTEyIGNsb2NrcyBmcm9tIHNwZWMgKi8KICNlbmRpZgogCWRkci0+dGltaW5nX2NmZ180ID0gKDAKQEAgLTEyODUsOSArMTc0NCwxMiBAQAogCXVuc2lnbmVkIGludCB3b2R0X29uID0gMDsJLyogV3JpdGUgdG8gT0RUIG9uICovCiAJdW5zaWduZWQgaW50IHdvZHRfb2ZmID0gMDsJLyogV3JpdGUgdG8gT0RUIG9mZiAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIzKQorI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykgfHwgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFI0KQorCXVuc2lnbmVkIGludCB3cl9sYXQgPSAoKGRkci0+dGltaW5nX2NmZ18yICYgMHgwMDc4MDAwMCkgPj4gMTkpICsKKwkJCSAgICAgICgoZGRyLT50aW1pbmdfY2ZnXzIgJiAweDAwMDQwMDAwKSA+PiAxNCk7CiAJLyogcm9kdF9vbiA9IHRpbWluZ19jZmdfMVtjYXNsYXRdIC0gdGltaW5nX2NmZ18yW3dybGF0XSArIDEgKi8KLQlyb2R0X29uID0gY2FzX2xhdGVuY3kgLSAoKGRkci0+dGltaW5nX2NmZ18yICYgMHgwMDc4MDAwMCkgPj4gMTkpICsgMTsKKwlpZiAoY2FzX2xhdGVuY3kgPj0gd3JfbGF0KQorCQlyb2R0X29uID0gY2FzX2xhdGVuY3kgLSB3cl9sYXQgKyAxOwogCXJvZHRfb2ZmID0gNDsJLyogIDQgY2xvY2tzICovCiAJd29kdF9vbiA9IDE7CS8qICAxIGNsb2NrcyAqLwogCXdvZHRfb2ZmID0gNDsJLyogIDQgY2xvY2tzICovCkBAIC0xMzAyLDYgKzE3NjQsMTY0IEBACiAJZGVidWcoIkZTTEREUjogdGltaW5nX2NmZ181ID0gMHglMDh4XG4iLCBkZHItPnRpbWluZ19jZmdfNSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9ERFI0CitzdGF0aWMgdm9pZCBzZXRfdGltaW5nX2NmZ182KGZzbF9kZHJfY2ZnX3JlZ3NfdCAqZGRyKQoreworCXVuc2lnbmVkIGludCBoc19jYXNsYXQgPSAwOworCXVuc2lnbmVkIGludCBoc193cmxhdCA9IDA7CisJdW5zaWduZWQgaW50IGhzX3dycmVjID0gMDsKKwl1bnNpZ25lZCBpbnQgaHNfY2xrYWRqID0gMDsKKwl1bnNpZ25lZCBpbnQgaHNfd3Jsdmxfc3RhcnQgPSAwOworCisJZGRyLT50aW1pbmdfY2ZnXzYgPSAoMAorCQkJICAgICB8ICgoaHNfY2FzbGF0ICYgMHgxZikgPDwgMjQpCisJCQkgICAgIHwgKChoc193cmxhdCAmIDB4MWYpIDw8IDE5KQorCQkJICAgICB8ICgoaHNfd3JyZWMgJiAweDFmKSA8PCAxMikKKwkJCSAgICAgfCAoKGhzX2Nsa2FkaiAmIDB4MWYpIDw8IDYpCisJCQkgICAgIHwgKChoc193cmx2bF9zdGFydCAmIDB4MWYpIDw8IDApCisJCQkgICAgKTsKKwlkZWJ1ZygiRlNMRERSOiB0aW1pbmdfY2ZnXzYgPSAweCUwOHhcbiIsIGRkci0+dGltaW5nX2NmZ182KTsKK30KKworc3RhdGljIHZvaWQgc2V0X3RpbWluZ19jZmdfNyhmc2xfZGRyX2NmZ19yZWdzX3QgKmRkciwKKwkJCWNvbnN0IGNvbW1vbl90aW1pbmdfcGFyYW1zX3QgKmNvbW1vbl9kaW1tKQoreworCXVuc2lnbmVkIGludCB0eHByLCB0Y2tzcmUsIHRja3NyeDsKKwl1bnNpZ25lZCBpbnQgY2tlX3JzdCwgY2tzcmUsIGNrc3J4LCBwYXJfbGF0LCBjc190b19jbWQ7CisKKwl0eHByID0gbWF4KDUsIHBpY29zX3RvX21jbGsoY29tbW9uX2RpbW0tPnRyZmMxX3BzICsgMTAwMDApKTsKKwl0Y2tzcmUgPSBtYXgoNSwgcGljb3NfdG9fbWNsaygxMDAwMCkpOworCXRja3NyeCA9IG1heCg1LCBwaWNvc190b19tY2xrKDEwMDAwKSk7CisJcGFyX2xhdCA9IDA7CisJY3NfdG9fY21kID0gMDsKKworCWlmICh0eHByIDw9IDIwMCkKKwkJY2tlX3JzdCA9IDA7CisJZWxzZSBpZiAodHhwciA8PSAyNTYpCisJCWNrZV9yc3QgPSAxOworCWVsc2UgaWYgKHR4cHIgPD0gNTEyKQorCQlja2VfcnN0ID0gMjsKKwllbHNlCisJCWNrZV9yc3QgPSAzOworCisJaWYgKHRja3NyZSA8PSAxOSkKKwkJY2tzcmUgPSB0Y2tzcmUgLSA1OworCWVsc2UKKwkJY2tzcmUgPSAxNTsKKworCWlmICh0Y2tzcnggPD0gMTkpCisJCWNrc3J4ID0gdGNrc3J4IC0gNTsKKwllbHNlCisJCWNrc3J4ID0gMTU7CisKKwlkZHItPnRpbWluZ19jZmdfNyA9ICgwCisJCQkgICAgIHwgKChja2VfcnN0ICYgMHgzKSA8PCAyOCkKKwkJCSAgICAgfCAoKGNrc3JlICYgMHhmKSA8PCAyNCkKKwkJCSAgICAgfCAoKGNrc3J4ICYgMHhmKSA8PCAyMCkKKwkJCSAgICAgfCAoKHBhcl9sYXQgJiAweGYpIDw8IDE2KQorCQkJICAgICB8ICgoY3NfdG9fY21kICYgMHhmKSA8PCA0KQorCQkJICAgICk7CisJZGVidWcoIkZTTEREUjogdGltaW5nX2NmZ183ID0gMHglMDh4XG4iLCBkZHItPnRpbWluZ19jZmdfNyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF90aW1pbmdfY2ZnXzgoZnNsX2Rkcl9jZmdfcmVnc190ICpkZHIsCisJCQkgICAgIGNvbnN0IG1lbWN0bF9vcHRpb25zX3QgKnBvcHRzLAorCQkJICAgICBjb25zdCBjb21tb25fdGltaW5nX3BhcmFtc190ICpjb21tb25fZGltbSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNhc19sYXRlbmN5KQoreworCXVuc2lnbmVkIGludCByd3RfYmcsIHdydF9iZywgcnJ0X2JnLCB3d3RfYmc7CisJdW5zaWduZWQgaW50IGFjdHRvYWN0X2JnLCB3cnRvcmRfYmcsIHByZV9hbGxfcmVjOworCXVuc2lnbmVkIGludCB0Y2NkbCA9IHBpY29zX3RvX21jbGsoY29tbW9uX2RpbW0tPnRjY2RsX3BzKTsKKwl1bnNpZ25lZCBpbnQgd3JfbGF0ID0gKChkZHItPnRpbWluZ19jZmdfMiAmIDB4MDA3ODAwMDApID4+IDE5KSArCisJCQkgICAgICAoKGRkci0+dGltaW5nX2NmZ18yICYgMHgwMDA0MDAwMCkgPj4gMTQpOworCisJcnd0X2JnID0gY2FzX2xhdGVuY3kgKyAyICsgNCAtIHdyX2xhdDsKKwlpZiAocnd0X2JnIDwgdGNjZGwpCisJCXJ3dF9iZyA9IHRjY2RsIC0gcnd0X2JnOworCWVsc2UKKwkJcnd0X2JnID0gMDsKKworCXdydF9iZyA9IHdyX2xhdCArIDQgKyAxIC0gY2FzX2xhdGVuY3k7CisJaWYgKHdydF9iZyA8IHRjY2RsKQorCQl3cnRfYmcgPSB0Y2NkbCAtIHdydF9iZzsKKwllbHNlCisJCXdydF9iZyA9IDA7CisKKwlpZiAocG9wdHMtPmJ1cnN0X2xlbmd0aCA9PSBERFJfQkw4KSB7CisJCXJydF9iZyA9IHRjY2RsIC0gNDsKKwkJd3d0X2JnID0gdGNjZGwgLSA0OworCX0gZWxzZSB7CisJCXJydF9iZyA9IHRjY2RsIC0gMjsKKwkJd3d0X2JnID0gdGNjZGwgLSA0OworCX0KKworCWFjdHRvYWN0X2JnID0gcGljb3NfdG9fbWNsayhjb21tb25fZGltbS0+dHJyZGxfcHMpOworCXdydG9yZF9iZyA9IG1heCg0LCBwaWNvc190b19tY2xrKDc1MDApKTsKKwlwcmVfYWxsX3JlYyA9IDA7CisKKwlkZHItPnRpbWluZ19jZmdfOCA9ICgwCisJCQkgICAgIHwgKChyd3RfYmcgJiAweGYpIDw8IDI4KQorCQkJICAgICB8ICgod3J0X2JnICYgMHhmKSA8PCAyNCkKKwkJCSAgICAgfCAoKHJydF9iZyAmIDB4ZikgPDwgMjApCisJCQkgICAgIHwgKCh3d3RfYmcgJiAweGYpIDw8IDE2KQorCQkJICAgICB8ICgoYWN0dG9hY3RfYmcgJiAweGYpIDw8IDEyKQorCQkJICAgICB8ICgod3J0b3JkX2JnICYgMHhmKSA8PCA4KQorCQkJICAgICB8ICgocHJlX2FsbF9yZWMgJiAweDFmKSA8PCAwKQorCQkJICAgICk7CisKKwlkZWJ1ZygiRlNMRERSOiB0aW1pbmdfY2ZnXzggPSAweCUwOHhcbiIsIGRkci0+dGltaW5nX2NmZ184KTsKK30KKworc3RhdGljIHZvaWQgc2V0X3RpbWluZ19jZmdfOShmc2xfZGRyX2NmZ19yZWdzX3QgKmRkcikKK3sKKwlkZHItPnRpbWluZ19jZmdfOSA9IDA7CisJZGVidWcoIkZTTEREUjogdGltaW5nX2NmZ185ID0gMHglMDh4XG4iLCBkZHItPnRpbWluZ19jZmdfOSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kZHJfZHFfbWFwcGluZyhmc2xfZGRyX2NmZ19yZWdzX3QgKmRkciwKKwkJCSAgICAgICBjb25zdCBkaW1tX3BhcmFtc190ICpkaW1tX3BhcmFtcykKK3sKKwlkZHItPmRxX21hcF8wID0gKChkaW1tX3BhcmFtcy0+ZHFfbWFwcGluZ1swXSAmIDB4M0YpIDw8IDI2KSB8CisJCQkoKGRpbW1fcGFyYW1zLT5kcV9tYXBwaW5nWzFdICYgMHgzRikgPDwgMjApIHwKKwkJCSgoZGltbV9wYXJhbXMtPmRxX21hcHBpbmdbMl0gJiAweDNGKSA8PCAxNCkgfAorCQkJKChkaW1tX3BhcmFtcy0+ZHFfbWFwcGluZ1szXSAmIDB4M0YpIDw8IDgpIHwKKwkJCSgoZGltbV9wYXJhbXMtPmRxX21hcHBpbmdbNF0gJiAweDNGKSA8PCAyKTsKKworCWRkci0+ZHFfbWFwXzEgPSAoKGRpbW1fcGFyYW1zLT5kcV9tYXBwaW5nWzVdICYgMHgzRikgPDwgMjYpIHwKKwkJCSgoZGltbV9wYXJhbXMtPmRxX21hcHBpbmdbNl0gJiAweDNGKSA8PCAyMCkgfAorCQkJKChkaW1tX3BhcmFtcy0+ZHFfbWFwcGluZ1s3XSAmIDB4M0YpIDw8IDE0KSB8CisJCQkoKGRpbW1fcGFyYW1zLT5kcV9tYXBwaW5nWzEwXSAmIDB4M0YpIDw8IDgpIHwKKwkJCSgoZGltbV9wYXJhbXMtPmRxX21hcHBpbmdbMTFdICYgMHgzRikgPDwgMik7CisKKwlkZHItPmRxX21hcF8yID0gKChkaW1tX3BhcmFtcy0+ZHFfbWFwcGluZ1sxMl0gJiAweDNGKSA8PCAyNikgfAorCQkJKChkaW1tX3BhcmFtcy0+ZHFfbWFwcGluZ1sxM10gJiAweDNGKSA8PCAyMCkgfAorCQkJKChkaW1tX3BhcmFtcy0+ZHFfbWFwcGluZ1sxNF0gJiAweDNGKSA8PCAxNCkgfAorCQkJKChkaW1tX3BhcmFtcy0+ZHFfbWFwcGluZ1sxNV0gJiAweDNGKSA8PCA4KSB8CisJCQkoKGRpbW1fcGFyYW1zLT5kcV9tYXBwaW5nWzE2XSAmIDB4M0YpIDw8IDIpOworCisJZGRyLT5kcV9tYXBfMyA9ICgoZGltbV9wYXJhbXMtPmRxX21hcHBpbmdbMTddICYgMHgzRikgPDwgMjYpIHwKKwkJCSgoZGltbV9wYXJhbXMtPmRxX21hcHBpbmdbOF0gJiAweDNGKSA8PCAyMCkgfAorCQkJKChkaW1tX3BhcmFtcy0+ZHFfbWFwcGluZ1s5XSAmIDB4M0YpIDw8IDE0KSB8CisJCQlkaW1tX3BhcmFtcy0+ZHFfbWFwcGluZ19vcnM7CisKKwlkZWJ1ZygiRlNMRERSOiBkcV9tYXBfMCA9IDB4JTA4eFxuIiwgZGRyLT5kcV9tYXBfMCk7CisJZGVidWcoIkZTTEREUjogZHFfbWFwXzEgPSAweCUwOHhcbiIsIGRkci0+ZHFfbWFwXzEpOworCWRlYnVnKCJGU0xERFI6IGRxX21hcF8yID0gMHglMDh4XG4iLCBkZHItPmRxX21hcF8yKTsKKwlkZWJ1ZygiRlNMRERSOiBkcV9tYXBfMyA9IDB4JTA4eFxuIiwgZGRyLT5kcV9tYXBfMyk7Cit9CitzdGF0aWMgdm9pZCBzZXRfZGRyX3NkcmFtX2NmZ18zKGZzbF9kZHJfY2ZnX3JlZ3NfdCAqZGRyLAorCQkJICAgICAgIGNvbnN0IG1lbWN0bF9vcHRpb25zX3QgKnBvcHRzKQoreworCWludCByZF9wcmU7CisKKwlyZF9wcmUgPSBwb3B0cy0+cXVhZF9yYW5rX3ByZXNlbnQgPyAxIDogMDsKKworCWRkci0+ZGRyX3NkcmFtX2NmZ18zID0gKHJkX3ByZSAmIDB4MSkgPDwgMTY7CisKKwlkZWJ1ZygiRlNMRERSOiBkZHJfc2RyYW1fY2ZnXzMgPSAweCUwOHhcbiIsIGRkci0+ZGRyX3NkcmFtX2NmZ18zKTsKK30KKyNlbmRpZgkvKiBDT05GSUdfU1lTX0ZTTF9ERFI0ICovCisKIC8qIEREUiBaUSBDYWxpYnJhdGlvbiBDb250cm9sIChERFJfWlFfQ05UTCkgKi8KIHN0YXRpYyB2b2lkIHNldF9kZHJfenFfY250bChmc2xfZGRyX2NmZ19yZWdzX3QgKmRkciwgdW5zaWduZWQgaW50IHpxX2VuKQogewpAQCAtMTMxMCwxMSArMTkzMCwyMSBAQAogCXVuc2lnbmVkIGludCB6cW9wZXIgPSAwOwogCS8qIE5vcm1hbCBPcGVyYXRpb24gU2hvcnQgQ2FsaWJyYXRpb24gVGltZSAodFpRQ1MpICovCiAJdW5zaWduZWQgaW50IHpxY3MgPSAwOworI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwl1bnNpZ25lZCBpbnQgenFjc19pbml0OworI2VuZGlmCiAKIAlpZiAoenFfZW4pIHsKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9ERFI0CisJCXpxaW5pdCA9IDEwOwkvKiAxMDI0IGNsb2NrcyAqLworCQl6cW9wZXIgPSA5OwkvKiA1MTIgY2xvY2tzICovCisJCXpxY3MgPSA3OwkvKiAxMjggY2xvY2tzICovCisJCXpxY3NfaW5pdCA9IDU7CS8qIDEwMjQgcmVmcmVzaCBzZXF1ZW5jZXMgKi8KKyNlbHNlCiAJCXpxaW5pdCA9IDk7CS8qIDUxMiBjbG9ja3MgKi8KIAkJenFvcGVyID0gODsJLyogMjU2IGNsb2NrcyAqLwogCQl6cWNzID0gNjsJLyogNjQgY2xvY2tzICovCisjZW5kaWYKIAl9CiAKIAlkZHItPmRkcl96cV9jbnRsID0gKDAKQEAgLTEzMjIsNiArMTk1Miw5IEBACiAJCQkgICAgfCAoKHpxaW5pdCAmIDB4RikgPDwgMjQpCiAJCQkgICAgfCAoKHpxb3BlciAmIDB4RikgPDwgMTYpCiAJCQkgICAgfCAoKHpxY3MgJiAweEYpIDw8IDgpCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorCQkJICAgIHwgKCh6cWNzX2luaXQgJiAweEYpIDw8IDApCisjZW5kaWYKIAkJCSAgICApOwogCWRlYnVnKCJGU0xERFI6IHpxX2NudGwgPSAweCUwOHhcbiIsIGRkci0+ZGRyX3pxX2NudGwpOwogfQpAQCAtMTQ3OCw3ICsyMTExLDcgQEAKIAkgKi8KIAljYXNfbGF0ZW5jeSA9IChwb3B0cy0+Y2FzX2xhdGVuY3lfb3ZlcnJpZGUpCiAJCT8gcG9wdHMtPmNhc19sYXRlbmN5X292ZXJyaWRlX3ZhbHVlCi0JCTogY29tbW9uX2RpbW0tPmxvd2VzdF9jb21tb25fU1BEX2Nhc2xhdDsKKwkJOiBjb21tb25fZGltbS0+bG93ZXN0X2NvbW1vbl9zcGRfY2FzbGF0OwogCiAJYWRkaXRpdmVfbGF0ZW5jeSA9IChwb3B0cy0+YWRkaXRpdmVfbGF0ZW5jeV9vdmVycmlkZSkKIAkJPyBwb3B0cy0+YWRkaXRpdmVfbGF0ZW5jeV9vdmVycmlkZV92YWx1ZQpAQCAtMTYzOSw2ICsyMjcyLDEwIEBACiAJc2V0X2Rkcl9zZHJhbV9tb2RlKGRkciwgcG9wdHMsIGNvbW1vbl9kaW1tLAogCQkJCWNhc19sYXRlbmN5LCBhZGRpdGl2ZV9sYXRlbmN5LCB1bnFfbXJzX2VuKTsKIAlzZXRfZGRyX3NkcmFtX21vZGVfMihkZHIsIHBvcHRzLCBjb21tb25fZGltbSwgdW5xX21yc19lbik7CisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorCXNldF9kZHJfc2RyYW1fbW9kZV85KGRkciwgcG9wdHMsIGNvbW1vbl9kaW1tLCB1bnFfbXJzX2VuKTsKKwlzZXRfZGRyX3NkcmFtX21vZGVfMTAoZGRyLCBwb3B0cywgY29tbW9uX2RpbW0sIHVucV9tcnNfZW4pOworI2VuZGlmCiAJc2V0X2Rkcl9zZHJhbV9pbnRlcnZhbChkZHIsIHBvcHRzLCBjb21tb25fZGltbSk7CiAJc2V0X2Rkcl9kYXRhX2luaXQoZGRyKTsKIAlzZXRfZGRyX3NkcmFtX2Nsa19jbnRsKGRkciwgcG9wdHMpOwpAQCAtMTY0Niw2ICsyMjgzLDE0IEBACiAJc2V0X2Rkcl9pbml0X2V4dF9hZGRyKGRkcik7CiAJc2V0X3RpbWluZ19jZmdfNChkZHIsIHBvcHRzKTsKIAlzZXRfdGltaW5nX2NmZ181KGRkciwgY2FzX2xhdGVuY3kpOworI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwlzZXRfZGRyX3NkcmFtX2NmZ18zKGRkciwgcG9wdHMpOworCXNldF90aW1pbmdfY2ZnXzYoZGRyKTsKKwlzZXRfdGltaW5nX2NmZ183KGRkciwgY29tbW9uX2RpbW0pOworCXNldF90aW1pbmdfY2ZnXzgoZGRyLCBwb3B0cywgY29tbW9uX2RpbW0sIGNhc19sYXRlbmN5KTsKKwlzZXRfdGltaW5nX2NmZ185KGRkcik7CisJc2V0X2Rkcl9kcV9tYXBwaW5nKGRkciwgZGltbV9wYXJhbXMpOworI2VuZGlmCiAKIAlzZXRfZGRyX3pxX2NudGwoZGRyLCB6cV9lbik7CiAJc2V0X2Rkcl93cmx2bF9jbnRsKGRkciwgd3JsdmxfZW4sIHBvcHRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGRyL2ZzbC9kZHI0X2RpbW1fcGFyYW1zLmMgYi9kcml2ZXJzL2Rkci9mc2wvZGRyNF9kaW1tX3BhcmFtcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NDViN2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Rkci9mc2wvZGRyNF9kaW1tX3BhcmFtcy5jCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBjYWxjdWxhdGUgdGhlIG9yZ2FuaXphdGlvbiBhbmQgdGltaW5nIHBhcmFtZXRlcgorICogZnJvbSBkZHIzIHNwZCwgcGxlYXNlIHJlZmVyIHRvIHRoZSBzcGVjCisgKiBKRURFQyBzdGFuZGFyZCBOby4yMS1DIDRfMDFfMDJfMTJSMjNBLnBkZgorICoKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGZzbF9kZHJfc2RyYW0uaD4KKworI2luY2x1ZGUgPGZzbF9kZHIuaD4KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgRGVuc2l0eSBvZiBlYWNoIFBoeXNpY2FsIFJhbmsuCisgKiBSZXR1cm5lZCBzaXplIGlzIGluIGJ5dGVzLgorICoKKyAqIFRvdGFsIERJTU0gc2l6ZSA9CisgKiBzZHJhbSBjYXBhY2l0eShiaXQpIC8gOCAqIHByaW1hcnkgYnVzIHdpZHRoIC8gc2RyYW0gd2lkdGgKKyAqICAgICAgICAgICAgICAgICAgICAgKiBMb2dpY2FsIFJhbmtzIHBlciBESU1NCisgKgorICogd2hlcmU6IHNkcmFtIGNhcGFjaXR5ICA9IHNwZCBieXRlNFszOjBdCisgKiAgICAgICAgcHJpbWFyeSBidXMgd2lkdGggPSBzcGQgYnl0ZTEzWzI6MF0KKyAqICAgICAgICBzZHJhbSB3aWR0aCA9IHNwZCBieXRlMTJbMjowXQorICogICAgICAgIExvZ2ljYWwgUmFua3MgcGVyIERJTU0gPSBzcGQgYnl0ZTEyWzU6M10gZm9yIFNEUCwgRERQLCBRRFAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BkIGJ5dGUxMns1OjNdICogc3BkIGJ5dGU2WzY6NF0gZm9yIDNEUworICoKKyAqIFRvIHNpbXBsaWZ5IGVhY2ggcmFuayBzaXplID0gdG90YWwgRElNTSBzaXplIC8gTnVtYmVyIG9mIFBhY2thZ2UgUmFua3MKKyAqIHdoZXJlIE51bWJlciBvZiBQYWNrYWdlIFJhbmtzID0gc3BkIGJ5dGUxMls1OjNdCisgKgorICogU1BEIGJ5dGU0IC0gc2RyYW0gZGVuc2l0eSBhbmQgYmFua3MKKyAqCWJpdFszOjBdCXNpemUoYml0KQlzaXplKGJ5dGUpCisgKgkwMDAwCQkyNTZNYgkJMzJNQgorICoJMDAwMQkJNTEyTWIJCTY0TUIKKyAqCTAwMTAJCTFHYgkJMTI4TUIKKyAqCTAwMTEJCTJHYgkJMjU2TUIKKyAqCTAxMDAJCTRHYgkJNTEyTUIKKyAqCTAxMDEJCThHYgkJMUdCCisgKgkwMTEwCQkxNkdiCQkyR0IKKyAqICAgICAgMDExMQkJMzJHYgkJNEdCCisgKgorICogU1BEIGJ5dGUxMyAtIG1vZHVsZSBtZW1vcnkgYnVzIHdpZHRoCisgKgliaXRbMjowXQlwcmltYXJ5IGJ1cyB3aWR0aAorICoJMDAwCQk4Yml0cworICoJMDAxCQkxNmJpdHMKKyAqCTAxMAkJMzJiaXRzCisgKgkwMTEJCTY0Yml0cworICoKKyAqIFNQRCBieXRlMTIgLSBtb2R1bGUgb3JnYW5pemF0aW9uCisgKgliaXRbMjowXQlzZHJhbSBkZXZpY2Ugd2lkdGgKKyAqCTAwMAkJNGJpdHMKKyAqCTAwMQkJOGJpdHMKKyAqCTAxMAkJMTZiaXRzCisgKgkwMTEJCTMyYml0cworICoKKyAqIFNQRCBieXRlMTIgLSBtb2R1bGUgb3JnYW5pemF0aW9uCisgKgliaXRbNTozXQludW1iZXIgb2YgcGFja2FnZSByYW5rcyBwZXIgRElNTQorICoJMDAwCQkxCisgKgkwMDEJCTIKKyAqCTAxMAkJMworICoJMDExCQk0CisgKgorICogU1BEIGJ5dGU2IC0gU0RSQU0gcGFja2FnZSB0eXBlCisgKgliaXRbNjo0XQlEaWUgY291bnQKKyAqCTAwMAkJMQorICoJMDAxCQkyCisgKgkwMTAJCTMKKyAqCTAxMQkJNAorICoJMTAwCQk1CisgKgkxMDEJCTYKKyAqCTExMAkJNworICoJMTExCQk4CisgKgorICogU1BEIGJ5dGU2IC0gU1JBTSBwYWNrYWdlIHR5cGUKKyAqCWJpdFsxOjBdCVNpZ25hbCBsb2FkaW5nCisgKgkwMAkJTm90IHNwZWNpZmllZAorICoJMDEJCU11bHRpIGxvYWQgc3RhY2sKKyAqCTEwCQlTaWdsZSBsb2FkIHN0YWNrICgzRFMpCisgKgkxMQkJUmVzZXJ2ZWQKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZworY29tcHV0ZV9yYW5rc2l6ZShjb25zdCBzdHJ1Y3QgZGRyNF9zcGRfZWVwcm9tX3MgKnNwZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYnNpemU7CisKKwlpbnQgbmJpdF9zZHJhbV9jYXBfYnNpemUgPSAwOworCWludCBuYml0X3ByaW1hcnlfYnVzX3dpZHRoID0gMDsKKwlpbnQgbmJpdF9zZHJhbV93aWR0aCA9IDA7CisJaW50IGRpZV9jb3VudCA9IDA7CisJYm9vbCBwYWNrYWdlXzNkczsKKworCWlmICgoc3BkLT5kZW5zaXR5X2JhbmtzICYgMHhmKSA8PSA3KQorCQluYml0X3NkcmFtX2NhcF9ic2l6ZSA9IChzcGQtPmRlbnNpdHlfYmFua3MgJiAweGYpICsgMjg7CisJaWYgKChzcGQtPmJ1c193aWR0aCAmIDB4NykgPCA0KQorCQluYml0X3ByaW1hcnlfYnVzX3dpZHRoID0gKHNwZC0+YnVzX3dpZHRoICYgMHg3KSArIDM7CisJaWYgKChzcGQtPm9yZ2FuaXphdGlvbiAmIDB4NykgPCA0KQorCQluYml0X3NkcmFtX3dpZHRoID0gKHNwZC0+b3JnYW5pemF0aW9uICYgMHg3KSArIDI7CisJcGFja2FnZV8zZHMgPSAoc3BkLT5wYWNrYWdlX3R5cGUgJiAweDMpID09IDB4MjsKKwlpZiAocGFja2FnZV8zZHMpCisJCWRpZV9jb3VudCA9IChzcGQtPnBhY2thZ2VfdHlwZSA+PiA0KSAmIDB4NzsKKworCWJzaXplID0gMVVMTCA8PCAobmJpdF9zZHJhbV9jYXBfYnNpemUgLSAzICsKKwkJCSBuYml0X3ByaW1hcnlfYnVzX3dpZHRoIC0gbmJpdF9zZHJhbV93aWR0aCArCisJCQkgZGllX2NvdW50KTsKKworCWRlYnVnKCJERFI6IEREUiBJSUkgcmFuayBkZW5zaXR5ID0gMHglMTZsbHhcbiIsIGJzaXplKTsKKworCXJldHVybiBic2l6ZTsKK30KKworI2RlZmluZSBzcGRfdG9fcHMobXRiLCBmdGIpCVwKKwkobXRiICogcGRpbW0tPm10Yl9wcyArIChmdGIgKiBwZGltbS0+ZnRiXzEwdGhfcHMpIC8gMTApCisvKgorICogZGRyX2NvbXB1dGVfZGltbV9wYXJhbWV0ZXJzIGZvciBERFIzIFNQRAorICoKKyAqIENvbXB1dGUgRElNTSBwYXJhbWV0ZXJzIGJhc2VkIHVwb24gdGhlIFNQRCBpbmZvcm1hdGlvbiBpbiBzcGQuCisgKiBXcml0ZXMgdGhlIHJlc3VsdHMgdG8gdGhlIGRpbW1fcGFyYW1zX3Qgc3RydWN0dXJlIHBvaW50ZWQgYnkgcGRpbW0uCisgKgorICovCit1bnNpZ25lZCBpbnQKK2Rkcl9jb21wdXRlX2RpbW1fcGFyYW1ldGVycyhjb25zdCBnZW5lcmljX3NwZF9lZXByb21fdCAqc3BkLAorCQkJICAgIGRpbW1fcGFyYW1zX3QgKnBkaW1tLAorCQkJICAgIHVuc2lnbmVkIGludCBkaW1tX251bWJlcikKK3sKKwl1bnNpZ25lZCBpbnQgcmV0dmFsOworCWludCBpOworCisJaWYgKHNwZC0+bWVtX3R5cGUpIHsKKwkJaWYgKHNwZC0+bWVtX3R5cGUgIT0gU1BEX01FTVRZUEVfRERSNCkgeworCQkJcHJpbnRmKCJESU1NICV1OiBpcyBub3QgYSBERFI0IFNQRC5cbiIsIGRpbW1fbnVtYmVyKTsKKwkJCXJldHVybiAxOworCQl9CisJfSBlbHNlIHsKKwkJbWVtc2V0KHBkaW1tLCAwLCBzaXplb2YoZGltbV9wYXJhbXNfdCkpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR2YWwgPSBkZHI0X3NwZF9jaGVjayhzcGQpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRmKCJESU1NICV1OiBmYWlsZWQgY2hlY2tzdW1cbiIsIGRpbW1fbnVtYmVyKTsKKwkJcmV0dXJuIDI7CisJfQorCisJLyoKKwkgKiBUaGUgcGFydCBuYW1lIGluIEFTQ0lJIGluIHRoZSBTUEQgRUVQUk9NIGlzIG5vdCBudWxsIHRlcm1pbmF0ZWQuCisJICogR3VhcmFudGVlIG51bGwgdGVybWluYXRpb24gaGVyZSBieSBwcmVzZXR0aW5nIGFsbCBieXRlcyB0byAwCisJICogYW5kIGNvcHlpbmcgdGhlIHBhcnQgbmFtZSBpbiBBU0NJSSBmcm9tIHRoZSBTUEQgb250byBpdAorCSAqLworCW1lbXNldChwZGltbS0+bXBhcnQsIDAsIHNpemVvZihwZGltbS0+bXBhcnQpKTsKKwlpZiAoKHNwZC0+aW5mb19zaXplX2NyYyAmIDB4RikgPiAyKQorCQltZW1jcHkocGRpbW0tPm1wYXJ0LCBzcGQtPm1wYXJ0LCBzaXplb2YocGRpbW0tPm1wYXJ0KSAtIDEpOworCisJLyogRElNTSBvcmdhbml6YXRpb24gcGFyYW1ldGVycyAqLworCXBkaW1tLT5uX3JhbmtzID0gKChzcGQtPm9yZ2FuaXphdGlvbiA+PiAzKSAmIDB4NykgKyAxOworCXBkaW1tLT5yYW5rX2RlbnNpdHkgPSBjb21wdXRlX3JhbmtzaXplKHNwZCk7CisJcGRpbW0tPmNhcGFjaXR5ID0gcGRpbW0tPm5fcmFua3MgKiBwZGltbS0+cmFua19kZW5zaXR5OworCXBkaW1tLT5wcmltYXJ5X3NkcmFtX3dpZHRoID0gMSA8PCAoMyArIChzcGQtPmJ1c193aWR0aCAmIDB4NykpOworCWlmICgoc3BkLT5idXNfd2lkdGggPj4gMykgJiAweDMpCisJCXBkaW1tLT5lY19zZHJhbV93aWR0aCA9IDg7CisJZWxzZQorCQlwZGltbS0+ZWNfc2RyYW1fd2lkdGggPSAwOworCXBkaW1tLT5kYXRhX3dpZHRoID0gcGRpbW0tPnByaW1hcnlfc2RyYW1fd2lkdGgKKwkJCSAgKyBwZGltbS0+ZWNfc2RyYW1fd2lkdGg7CisJcGRpbW0tPmRldmljZV93aWR0aCA9IDEgPDwgKChzcGQtPm9yZ2FuaXphdGlvbiAmIDB4NykgKyAyKTsKKworCS8qIFRoZXNlIGFyZSB0aGUgdHlwZXMgZGVmaW5lZCBieSB0aGUgSkVERUMgRERSMyBTUEQgc3BlYyAqLworCXBkaW1tLT5taXJyb3JlZF9kaW1tID0gMDsKKwlwZGltbS0+cmVnaXN0ZXJlZF9kaW1tID0gMDsKKwlzd2l0Y2ggKHNwZC0+bW9kdWxlX3R5cGUgJiBERFIzX1NQRF9NT0RVTEVUWVBFX01BU0spIHsKKwljYXNlIEREUjNfU1BEX01PRFVMRVRZUEVfUkRJTU06CisJCS8qIFJlZ2lzdGVyZWQvYnVmZmVyZWQgRElNTXMgKi8KKwkJcGRpbW0tPnJlZ2lzdGVyZWRfZGltbSA9IDE7CisJCWJyZWFrOworCisJY2FzZSBERFIzX1NQRF9NT0RVTEVUWVBFX1VESU1NOgorCWNhc2UgRERSM19TUERfTU9EVUxFVFlQRV9TT19ESU1NOgorCQkvKiBVbmJ1ZmZlcmVkIERJTU1zICovCisJCWlmIChzcGQtPm1vZF9zZWN0aW9uLnVuYnVmZmVyZWQuYWRkcl9tYXBwaW5nICYgMHgxKQorCQkJcGRpbW0tPm1pcnJvcmVkX2RpbW0gPSAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ZigidW5rbm93biBtb2R1bGVfdHlwZSAweCUwMlhcbiIsIHNwZC0+bW9kdWxlX3R5cGUpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBTRFJBTSBkZXZpY2UgcGFyYW1ldGVycyAqLworCXBkaW1tLT5uX3Jvd19hZGRyID0gKChzcGQtPmFkZHJlc3NpbmcgPj4gMykgJiAweDcpICsgMTI7CisJcGRpbW0tPm5fY29sX2FkZHIgPSAoc3BkLT5hZGRyZXNzaW5nICYgMHg3KSArIDk7CisJcGRpbW0tPmJhbmtfYWRkcl9iaXRzID0gKHNwZC0+ZGVuc2l0eV9iYW5rcyA+PiA0KSAmIDB4MzsKKwlwZGltbS0+YmFua19ncm91cF9iaXRzID0gKHNwZC0+ZGVuc2l0eV9iYW5rcyA+PiA2KSAmIDB4MzsKKworCS8qCisJICogVGhlIFNQRCBzcGVjIGhhcyBub3QgdGhlIEVDQyBiaXQsCisJICogV2UgY29uc2lkZXIgdGhlIERJTU0gYXMgRUNDIGNhcGFiaWxpdHkKKwkgKiB3aGVuIHRoZSBleHRlbnNpb24gYnVzIGV4aXN0CisJICovCisJaWYgKHBkaW1tLT5lY19zZHJhbV93aWR0aCkKKwkJcGRpbW0tPmVkY19jb25maWcgPSAweDAyOworCWVsc2UKKwkJcGRpbW0tPmVkY19jb25maWcgPSAweDAwOworCisJLyoKKwkgKiBUaGUgU1BEIHNwZWMgaGFzIG5vdCB0aGUgYnVyc3QgbGVuZ3RoIGJ5dGUKKwkgKiBidXQgRERSNCBzcGVjIGhhcyBuYXR1cmUgQkw4IGFuZCBCQzQsCisJICogQkw4IC1iaXQzLCBCQzQgLWJpdDIKKwkgKi8KKwlwZGltbS0+YnVyc3RfbGVuZ3Roc19iaXRtYXNrID0gMHgwYzsKKwlwZGltbS0+cm93X2RlbnNpdHkgPSBfX2lsb2cyKHBkaW1tLT5yYW5rX2RlbnNpdHkpOworCisJLyogTVRCIC0gbWVkaXVtIHRpbWViYXNlCisJICogVGhlIE1UQiBpbiB0aGUgU1BEIHNwZWMgaXMgMTI1cHMsCisJICoKKwkgKiBGVEIgLSBmaW5lIHRpbWViYXNlCisJICogdXNlIDEvMTB0aCBvZiBwcyBhcyBvdXIgdW5pdCB0byBhdm9pZCBmbG9hdGluZyBwb2ludAorCSAqIGVnLCAxMCBmb3IgMXBzLCAyNSBmb3IgMi41cHMsIDUwIGZvciA1cHMKKwkgKi8KKwlpZiAoKHNwZC0+dGltZWJhc2VzICYgMHhmKSA9PSAweDApIHsKKwkJcGRpbW0tPm10Yl9wcyA9IDEyNTsKKwkJcGRpbW0tPmZ0Yl8xMHRoX3BzID0gMTA7CisKKwl9IGVsc2UgeworCQlwcmludGYoIlVua25vd24gVGltZWJhc2VzXG4iKTsKKwl9CisKKwkvKiBzZHJhbSBtaW5pbXVtIGN5Y2xlIHRpbWUgKi8KKwlwZGltbS0+dGNrbWluX3hfcHMgPSBzcGRfdG9fcHMoc3BkLT50Y2tfbWluLCBzcGQtPmZpbmVfdGNrX21pbik7CisKKwkvKiBzZHJhbSBtYXggY3ljbGUgdGltZSAqLworCXBkaW1tLT50Y2ttYXhfcHMgPSBzcGRfdG9fcHMoc3BkLT50Y2tfbWF4LCBzcGQtPmZpbmVfdGNrX21heCk7CisKKwkvKgorCSAqIENBUyBsYXRlbmN5IHN1cHBvcnRlZAorCSAqIGJpdDAgLSBDTDcKKwkgKiBiaXQ0IC0gQ0wxMQorCSAqIGJpdDggLSBDTDE1CisJICogYml0MTItIENMMTkKKwkgKiBiaXQxNi0gQ0wyMworCSAqLworCXBkaW1tLT5jYXNsYXRfeCAgPSAoc3BkLT5jYXNsYXRfYjEgPDwgNykJfAorCQkJICAgKHNwZC0+Y2FzbGF0X2IyIDw8IDE1KQl8CisJCQkgICAoc3BkLT5jYXNsYXRfYjMgPDwgMjMpOworCisJQlVHX09OKHNwZC0+Y2FzbGF0X2I0ICE9IDApOworCisJLyoKKwkgKiBtaW4gQ0FTIGxhdGVuY3kgdGltZQorCSAqLworCXBkaW1tLT50YWFfcHMgPSBzcGRfdG9fcHMoc3BkLT50YWFfbWluLCBzcGQtPmZpbmVfdGFhX21pbik7CisKKwkvKgorCSAqIG1pbiBSQVMgdG8gQ0FTIGRlbGF5IHRpbWUKKwkgKi8KKwlwZGltbS0+dHJjZF9wcyA9IHNwZF90b19wcyhzcGQtPnRyY2RfbWluLCBzcGQtPmZpbmVfdHJjZF9taW4pOworCisJLyoKKwkgKiBNaW4gUm93IFByZWNoYXJnZSBEZWxheSBUaW1lCisJICovCisJcGRpbW0tPnRycF9wcyA9IHNwZF90b19wcyhzcGQtPnRycF9taW4sIHNwZC0+ZmluZV90cnBfbWluKTsKKworCS8qIG1pbiBhY3RpdmUgdG8gcHJlY2hhcmdlIGRlbGF5IHRpbWUgKi8KKwlwZGltbS0+dHJhc19wcyA9ICgoKHNwZC0+dHJhc190cmNfZXh0ICYgMHhmKSA8PCA4KSArCisJCQkgIHNwZC0+dHJhc19taW5fbHNiKSAqIHBkaW1tLT5tdGJfcHM7CisKKwkvKiBtaW4gYWN0aXZlIHRvIGFjdGljZS9yZWZyZXNoIGRlbGF5IHRpbWUgKi8KKwlwZGltbS0+dHJjX3BzID0gc3BkX3RvX3BzKCgoKHNwZC0+dHJhc190cmNfZXh0ICYgMHhmMCkgPDwgNCkgKworCQkJCSAgIHNwZC0+dHJjX21pbl9sc2IpLCBzcGQtPmZpbmVfdHJjX21pbik7CisJLyogTWluIFJlZnJlc2ggUmVjb3ZlcnkgRGVsYXkgVGltZSAqLworCXBkaW1tLT50cmZjMV9wcyA9ICgoc3BkLT50cmZjMV9taW5fbXNiIDw8IDgpIHwgKHNwZC0+dHJmYzFfbWluX2xzYikpICoKKwkJICAgICAgIHBkaW1tLT5tdGJfcHM7CisJcGRpbW0tPnRyZmMyX3BzID0gKChzcGQtPnRyZmMyX21pbl9tc2IgPDwgOCkgfCAoc3BkLT50cmZjMl9taW5fbHNiKSkgKgorCQkgICAgICAgcGRpbW0tPm10Yl9wczsKKwlwZGltbS0+dHJmYzRfcHMgPSAoKHNwZC0+dHJmYzRfbWluX21zYiA8PCA4KSB8IChzcGQtPnRyZmM0X21pbl9sc2IpKSAqCisJCQlwZGltbS0+bXRiX3BzOworCS8qIG1pbiBmb3VyIGFjdGl2ZSB3aW5kb3cgZGVsYXkgdGltZSAqLworCXBkaW1tLT50ZmF3X3BzID0gKCgoc3BkLT50ZmF3X21zYiAmIDB4ZikgPDwgOCkgfCBzcGQtPnRmYXdfbWluKSAqCisJCQlwZGltbS0+bXRiX3BzOworCisJLyogbWluIHJvdyBhY3RpdmUgdG8gcm93IGFjdGl2ZSBkZWxheSB0aW1lLCBkaWZmZXJlbnQgYmFuayBncm91cCAqLworCXBkaW1tLT50cnJkc19wcyA9IHNwZF90b19wcyhzcGQtPnRycmRzX21pbiwgc3BkLT5maW5lX3RycmRzX21pbik7CisJLyogbWluIHJvdyBhY3RpdmUgdG8gcm93IGFjdGl2ZSBkZWxheSB0aW1lLCBzYW1lIGJhbmsgZ3JvdXAgKi8KKwlwZGltbS0+dHJyZGxfcHMgPSBzcGRfdG9fcHMoc3BkLT50cnJkbF9taW4sIHNwZC0+ZmluZV90cnJkbF9taW4pOworCS8qIG1pbiBDQVMgdG8gQ0FTIERlbGF5IFRpbWUgKHRDQ0RfTG1pbiksIHNhbWUgYmFuayBncm91cCAqLworCXBkaW1tLT50Y2NkbF9wcyA9IHNwZF90b19wcyhzcGQtPnRjY2RsX21pbiwgc3BkLT5maW5lX3RjY2RsX21pbik7CisKKwkvKgorCSAqIEF2ZXJhZ2UgcGVyaW9kaWMgcmVmcmVzaCBpbnRlcnZhbAorCSAqIHRSRUZJID0gNy44IHVzIGF0IG5vcm1hbCB0ZW1wZXJhdHVyZSByYW5nZQorCSAqLworCXBkaW1tLT5yZWZyZXNoX3JhdGVfcHMgPSA3ODAwMDAwOworCisJZm9yIChpID0gMDsgaSA8IDE4OyBpKyspCisJCXBkaW1tLT5kcV9tYXBwaW5nW2ldID0gc3BkLT5tYXBwaW5nW2ldOworCisJcGRpbW0tPmRxX21hcHBpbmdfb3JzID0gKChzcGQtPm1hcHBpbmdbMF0gPj4gNikgJiAweDMpID09IDAgPyAxIDogMDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZHIvZnNsL2ZzbF9kZHJfZ2VuNC5jIGIvZHJpdmVycy9kZHIvZnNsL2ZzbF9kZHJfZ2VuNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZDg3OGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Rkci9mc2wvZnNsX2Rkcl9nZW40LmMKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKworICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxmc2xfZGRyX3NkcmFtLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGZzbF9kZHIuaD4KKworI2lmIChDT05GSUdfQ0hJUF9TRUxFQ1RTX1BFUl9DVFJMID4gNCkKKyNlcnJvciBJbnZhbGlkIHNldHRpbmcgZm9yIENPTkZJR19DSElQX1NFTEVDVFNfUEVSX0NUUkwKKyNlbmRpZgorCisvKgorICogcmVncyBoYXMgdGhlIHRvLWJlLXNldCB2YWx1ZXMgZm9yIEREUiBjb250cm9sbGVyIHJlZ2lzdGVycworICogY3RybF9udW0gaXMgdGhlIEREUiBjb250cm9sbGVyIG51bWJlcgorICogc3RlcDogMCBnb2VzIHRocm91Z2ggdGhlIGluaXRpYWxpemF0aW9uIGluIG9uZSBwYXNzCisgKiAgICAgICAxIHNldHMgcmVnaXN0ZXJzIGFuZCByZXR1cm5zIGJlZm9yZSBlbmFibGluZyBjb250cm9sbGVyCisgKiAgICAgICAyIHJlc3VtZXMgZnJvbSBzdGVwIDEgYW5kIGNvbnRpbnVlcyB0byBpbml0aWFsaXplCisgKiBEaXZpZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gdG8gdHdvIHN0ZXBzIHRvIGRlYXNzZXJ0IEREUiByZXNldCBzaWduYWwKKyAqIHRvIGNvbXBseSB3aXRoIEpFREVDIHNwZWNzIGZvciBSRElNTXMuCisgKi8KK3ZvaWQgZnNsX2Rkcl9zZXRfbWVtY3RsX3JlZ3MoY29uc3QgZnNsX2Rkcl9jZmdfcmVnc190ICpyZWdzLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY3RybF9udW0sIGludCBzdGVwKQoreworCXVuc2lnbmVkIGludCBpLCBidXNfd2lkdGg7CisJc3RydWN0IGNjc3JfZGRyIF9faW9tZW0gKmRkcjsKKwl1MzIgdGVtcF9zZHJhbV9jZmc7CisJdTMyIHRvdGFsX2diX3NpemVfcGVyX2NvbnRyb2xsZXI7CisJaW50IHRpbWVvdXQ7CisKKwlzd2l0Y2ggKGN0cmxfbnVtKSB7CisJY2FzZSAwOgorCQlkZHIgPSAodm9pZCAqKUNPTkZJR19TWVNfRlNMX0REUl9BRERSOworCQlicmVhazsKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjJfQUREUikgJiYgKENPTkZJR19OVU1fRERSX0NPTlRST0xMRVJTID4gMSkKKwljYXNlIDE6CisJCWRkciA9ICh2b2lkICopQ09ORklHX1NZU19GU0xfRERSMl9BRERSOworCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSM19BRERSKSAmJiAoQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMgPiAyKQorCWNhc2UgMjoKKwkJZGRyID0gKHZvaWQgKilDT05GSUdfU1lTX0ZTTF9ERFIzX0FERFI7CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFI0X0FERFIpICYmIChDT05GSUdfTlVNX0REUl9DT05UUk9MTEVSUyA+IDMpCisJY2FzZSAzOgorCQlkZHIgPSAodm9pZCAqKUNPTkZJR19TWVNfRlNMX0REUjRfQUREUjsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlwcmludGYoIiVzIHVuZXhwZWN0ZWQgY3RybF9udW0gPSAldVxuIiwgX19mdW5jX18sIGN0cmxfbnVtKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzdGVwID09IDIpCisJCWdvdG8gc3RlcDI7CisKKwlpZiAocmVncy0+ZGRyX2VvcikKKwkJZGRyX291dDMyKCZkZHItPmVvciwgcmVncy0+ZGRyX2Vvcik7CisKKwlkZHJfb3V0MzIoJmRkci0+c2RyYW1fY2xrX2NudGwsIHJlZ3MtPmRkcl9zZHJhbV9jbGtfY250bCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX0NISVBfU0VMRUNUU19QRVJfQ1RSTDsgaSsrKSB7CisJCWlmIChpID09IDApIHsKKwkJCWRkcl9vdXQzMigmZGRyLT5jczBfYm5kcywgcmVncy0+Y3NbaV0uYm5kcyk7CisJCQlkZHJfb3V0MzIoJmRkci0+Y3MwX2NvbmZpZywgcmVncy0+Y3NbaV0uY29uZmlnKTsKKwkJCWRkcl9vdXQzMigmZGRyLT5jczBfY29uZmlnXzIsIHJlZ3MtPmNzW2ldLmNvbmZpZ18yKTsKKworCQl9IGVsc2UgaWYgKGkgPT0gMSkgeworCQkJZGRyX291dDMyKCZkZHItPmNzMV9ibmRzLCByZWdzLT5jc1tpXS5ibmRzKTsKKwkJCWRkcl9vdXQzMigmZGRyLT5jczFfY29uZmlnLCByZWdzLT5jc1tpXS5jb25maWcpOworCQkJZGRyX291dDMyKCZkZHItPmNzMV9jb25maWdfMiwgcmVncy0+Y3NbaV0uY29uZmlnXzIpOworCisJCX0gZWxzZSBpZiAoaSA9PSAyKSB7CisJCQlkZHJfb3V0MzIoJmRkci0+Y3MyX2JuZHMsIHJlZ3MtPmNzW2ldLmJuZHMpOworCQkJZGRyX291dDMyKCZkZHItPmNzMl9jb25maWcsIHJlZ3MtPmNzW2ldLmNvbmZpZyk7CisJCQlkZHJfb3V0MzIoJmRkci0+Y3MyX2NvbmZpZ18yLCByZWdzLT5jc1tpXS5jb25maWdfMik7CisKKwkJfSBlbHNlIGlmIChpID09IDMpIHsKKwkJCWRkcl9vdXQzMigmZGRyLT5jczNfYm5kcywgcmVncy0+Y3NbaV0uYm5kcyk7CisJCQlkZHJfb3V0MzIoJmRkci0+Y3MzX2NvbmZpZywgcmVncy0+Y3NbaV0uY29uZmlnKTsKKwkJCWRkcl9vdXQzMigmZGRyLT5jczNfY29uZmlnXzIsIHJlZ3MtPmNzW2ldLmNvbmZpZ18yKTsKKwkJfQorCX0KKworCWRkcl9vdXQzMigmZGRyLT50aW1pbmdfY2ZnXzMsIHJlZ3MtPnRpbWluZ19jZmdfMyk7CisJZGRyX291dDMyKCZkZHItPnRpbWluZ19jZmdfMCwgcmVncy0+dGltaW5nX2NmZ18wKTsKKwlkZHJfb3V0MzIoJmRkci0+dGltaW5nX2NmZ18xLCByZWdzLT50aW1pbmdfY2ZnXzEpOworCWRkcl9vdXQzMigmZGRyLT50aW1pbmdfY2ZnXzIsIHJlZ3MtPnRpbWluZ19jZmdfMik7CisJZGRyX291dDMyKCZkZHItPnRpbWluZ19jZmdfNCwgcmVncy0+dGltaW5nX2NmZ180KTsKKwlkZHJfb3V0MzIoJmRkci0+dGltaW5nX2NmZ181LCByZWdzLT50aW1pbmdfY2ZnXzUpOworCWRkcl9vdXQzMigmZGRyLT50aW1pbmdfY2ZnXzYsIHJlZ3MtPnRpbWluZ19jZmdfNik7CisJZGRyX291dDMyKCZkZHItPnRpbWluZ19jZmdfNywgcmVncy0+dGltaW5nX2NmZ183KTsKKwlkZHJfb3V0MzIoJmRkci0+dGltaW5nX2NmZ184LCByZWdzLT50aW1pbmdfY2ZnXzgpOworCWRkcl9vdXQzMigmZGRyLT50aW1pbmdfY2ZnXzksIHJlZ3MtPnRpbWluZ19jZmdfOSk7CisJZGRyX291dDMyKCZkZHItPmRkcl96cV9jbnRsLCByZWdzLT5kZHJfenFfY250bCk7CisJZGRyX291dDMyKCZkZHItPmRxX21hcF8wLCByZWdzLT5kcV9tYXBfMCk7CisJZGRyX291dDMyKCZkZHItPmRxX21hcF8xLCByZWdzLT5kcV9tYXBfMSk7CisJZGRyX291dDMyKCZkZHItPmRxX21hcF8yLCByZWdzLT5kcV9tYXBfMik7CisJZGRyX291dDMyKCZkZHItPmRxX21hcF8zLCByZWdzLT5kcV9tYXBfMyk7CisJZGRyX291dDMyKCZkZHItPnNkcmFtX2NmZ18yLCByZWdzLT5kZHJfc2RyYW1fY2ZnXzIpOworCWRkcl9vdXQzMigmZGRyLT5zZHJhbV9jZmdfMywgcmVncy0+ZGRyX3NkcmFtX2NmZ18zKTsKKwlkZHJfb3V0MzIoJmRkci0+c2RyYW1fbW9kZSwgcmVncy0+ZGRyX3NkcmFtX21vZGUpOworCWRkcl9vdXQzMigmZGRyLT5zZHJhbV9tb2RlXzIsIHJlZ3MtPmRkcl9zZHJhbV9tb2RlXzIpOworCWRkcl9vdXQzMigmZGRyLT5zZHJhbV9tb2RlXzMsIHJlZ3MtPmRkcl9zZHJhbV9tb2RlXzMpOworCWRkcl9vdXQzMigmZGRyLT5zZHJhbV9tb2RlXzQsIHJlZ3MtPmRkcl9zZHJhbV9tb2RlXzQpOworCWRkcl9vdXQzMigmZGRyLT5zZHJhbV9tb2RlXzUsIHJlZ3MtPmRkcl9zZHJhbV9tb2RlXzUpOworCWRkcl9vdXQzMigmZGRyLT5zZHJhbV9tb2RlXzYsIHJlZ3MtPmRkcl9zZHJhbV9tb2RlXzYpOworCWRkcl9vdXQzMigmZGRyLT5zZHJhbV9tb2RlXzcsIHJlZ3MtPmRkcl9zZHJhbV9tb2RlXzcpOworCWRkcl9vdXQzMigmZGRyLT5zZHJhbV9tb2RlXzgsIHJlZ3MtPmRkcl9zZHJhbV9tb2RlXzgpOworCWRkcl9vdXQzMigmZGRyLT5zZHJhbV9tb2RlXzksIHJlZ3MtPmRkcl9zZHJhbV9tb2RlXzkpOworCWRkcl9vdXQzMigmZGRyLT5zZHJhbV9tb2RlXzEwLCByZWdzLT5kZHJfc2RyYW1fbW9kZV8xMCk7CisJZGRyX291dDMyKCZkZHItPnNkcmFtX21vZGVfMTEsIHJlZ3MtPmRkcl9zZHJhbV9tb2RlXzExKTsKKwlkZHJfb3V0MzIoJmRkci0+c2RyYW1fbW9kZV8xMiwgcmVncy0+ZGRyX3NkcmFtX21vZGVfMTIpOworCWRkcl9vdXQzMigmZGRyLT5zZHJhbV9tb2RlXzEzLCByZWdzLT5kZHJfc2RyYW1fbW9kZV8xMyk7CisJZGRyX291dDMyKCZkZHItPnNkcmFtX21vZGVfMTQsIHJlZ3MtPmRkcl9zZHJhbV9tb2RlXzE0KTsKKwlkZHJfb3V0MzIoJmRkci0+c2RyYW1fbW9kZV8xNSwgcmVncy0+ZGRyX3NkcmFtX21vZGVfMTUpOworCWRkcl9vdXQzMigmZGRyLT5zZHJhbV9tb2RlXzE2LCByZWdzLT5kZHJfc2RyYW1fbW9kZV8xNik7CisJZGRyX291dDMyKCZkZHItPnNkcmFtX21kX2NudGwsIHJlZ3MtPmRkcl9zZHJhbV9tZF9jbnRsKTsKKwlkZHJfb3V0MzIoJmRkci0+c2RyYW1faW50ZXJ2YWwsIHJlZ3MtPmRkcl9zZHJhbV9pbnRlcnZhbCk7CisJZGRyX291dDMyKCZkZHItPnNkcmFtX2RhdGFfaW5pdCwgcmVncy0+ZGRyX2RhdGFfaW5pdCk7CisJZGRyX291dDMyKCZkZHItPmluaXRfYWRkciwgcmVncy0+ZGRyX2luaXRfYWRkcik7CisJZGRyX291dDMyKCZkZHItPmluaXRfZXh0X2FkZHIsIHJlZ3MtPmRkcl9pbml0X2V4dF9hZGRyKTsKKwlkZHJfb3V0MzIoJmRkci0+ZGRyX3dybHZsX2NudGwsIHJlZ3MtPmRkcl93cmx2bF9jbnRsKTsKKyNpZm5kZWYgQ09ORklHX1NZU19GU0xfRERSX0VNVQorCS8qCisJICogU2tpcCB0aGVzZSB0d28gcmVnaXN0ZXJzIGlmIHJ1bm5pbmcgb24gZW11bGF0b3IKKwkgKiBiZWNhdXNlIGVtdWxhdG9yIGRvZXNuJ3QgaGF2ZSBza2V3IGJldHdlZW4gYnl0ZXMuCisJICovCisKKwlpZiAocmVncy0+ZGRyX3dybHZsX2NudGxfMikKKwkJZGRyX291dDMyKCZkZHItPmRkcl93cmx2bF9jbnRsXzIsIHJlZ3MtPmRkcl93cmx2bF9jbnRsXzIpOworCWlmIChyZWdzLT5kZHJfd3JsdmxfY250bF8zKQorCQlkZHJfb3V0MzIoJmRkci0+ZGRyX3dybHZsX2NudGxfMywgcmVncy0+ZGRyX3dybHZsX2NudGxfMyk7CisjZW5kaWYKKworCWRkcl9vdXQzMigmZGRyLT5kZHJfc3JfY250ciwgcmVncy0+ZGRyX3NyX2NudHIpOworCWRkcl9vdXQzMigmZGRyLT5kZHJfc2RyYW1fcmN3XzEsIHJlZ3MtPmRkcl9zZHJhbV9yY3dfMSk7CisJZGRyX291dDMyKCZkZHItPmRkcl9zZHJhbV9yY3dfMiwgcmVncy0+ZGRyX3NkcmFtX3Jjd18yKTsKKwlkZHJfb3V0MzIoJmRkci0+ZGRyX3NkcmFtX3Jjd18zLCByZWdzLT5kZHJfc2RyYW1fcmN3XzMpOworCWRkcl9vdXQzMigmZGRyLT5kZHJfc2RyYW1fcmN3XzQsIHJlZ3MtPmRkcl9zZHJhbV9yY3dfNCk7CisJZGRyX291dDMyKCZkZHItPmRkcl9zZHJhbV9yY3dfNSwgcmVncy0+ZGRyX3NkcmFtX3Jjd181KTsKKwlkZHJfb3V0MzIoJmRkci0+ZGRyX3NkcmFtX3Jjd182LCByZWdzLT5kZHJfc2RyYW1fcmN3XzYpOworCWRkcl9vdXQzMigmZGRyLT5kZHJfY2RyMSwgcmVncy0+ZGRyX2NkcjEpOworCWRkcl9vdXQzMigmZGRyLT5kZHJfY2RyMiwgcmVncy0+ZGRyX2NkcjIpOworCWRkcl9vdXQzMigmZGRyLT5lcnJfZGlzYWJsZSwgcmVncy0+ZXJyX2Rpc2FibGUpOworCWRkcl9vdXQzMigmZGRyLT5lcnJfaW50X2VuLCByZWdzLT5lcnJfaW50X2VuKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAocmVncy0+ZGVidWdbaV0pIHsKKwkJCWRlYnVnKCJXcml0ZSB0byBkZWJ1Z18lZCBhcyAlMDh4XG4iLAorCQkJICAgICAgaSsxLCByZWdzLT5kZWJ1Z1tpXSk7CisJCQlkZHJfb3V0MzIoJmRkci0+ZGVidWdbaV0sIHJlZ3MtPmRlYnVnW2ldKTsKKwkJfQorCX0KKworCS8qCisJICogRm9yIFJESU1NcywgSkVERUMgc3BlYyByZXF1aXJlcyBjbG9ja3MgdG8gYmUgc3RhYmxlIGJlZm9yZSByZXNldCBpcworCSAqIGRlYXNzZXJ0ZWQuIENsb2NrcyBzdGFydCB3aGVuIGFueSBjaGlwIHNlbGVjdCBpcyBlbmFibGVkIGFuZCBjbG9jaworCSAqIGNvbnRyb2wgcmVnaXN0ZXIgaXMgc2V0LiBCZWNhdXNlIGFsbCBERFIgY29tcG9uZW50cyBhcmUgY29ubmVjdGVkIHRvCisJICogb25lIHJlc2V0IHNpZ25hbCwgdGhpcyBuZWVkcyB0byBiZSBkb25lIGluIHR3byBzdGVwcy4gU3RlcCAxIGlzIHRvCisJICogZ2V0IHRoZSBjbG9ja3Mgc3RhcnRlZC4gU3RlcCAyIHJlc3VtZXMgYWZ0ZXIgcmVzZXQgc2lnbmFsIGlzCisJICogZGVhc3NlcnRlZC4KKwkgKi8KKwlpZiAoc3RlcCA9PSAxKSB7CisJCXVkZWxheSgyMDApOworCQlyZXR1cm47CisJfQorCitzdGVwMjoKKwkvKiBTZXQsIGJ1dCBkbyBub3QgZW5hYmxlIHRoZSBtZW1vcnkgKi8KKwl0ZW1wX3NkcmFtX2NmZyA9IHJlZ3MtPmRkcl9zZHJhbV9jZmc7CisJdGVtcF9zZHJhbV9jZmcgJj0gfihTRFJBTV9DRkdfTUVNX0VOKTsKKwlkZHJfb3V0MzIoJmRkci0+c2RyYW1fY2ZnLCB0ZW1wX3NkcmFtX2NmZyk7CisKKwkvKgorCSAqIDUwMCBwYWluZnVsIG1pY3JvLXNlY29uZHMgbXVzdCBlbGFwc2UgYmV0d2VlbgorCSAqIHRoZSBERFIgY2xvY2sgc2V0dXAgYW5kIHRoZSBERFIgY29uZmlnIGVuYWJsZS4KKwkgKiBERFIyIG5lZWQgMjAwIHVzLCBhbmQgRERSMyBuZWVkIDUwMCB1cyBmcm9tIHNwZWMsCisJICogd2UgY2hvb3NlIHRoZSBtYXgsIHRoYXQgaXMgNTAwIHVzIGZvciBhbGwgb2YgY2FzZS4KKwkgKi8KKwl1ZGVsYXkoNTAwKTsKKwlhc20gdm9sYXRpbGUoInN5bmM7aXN5bmMiKTsKKworCS8qIExldCB0aGUgY29udHJvbGxlciBnbyAqLworCXRlbXBfc2RyYW1fY2ZnID0gZGRyX2luMzIoJmRkci0+c2RyYW1fY2ZnKSAmIH5TRFJBTV9DRkdfQkk7CisJZGRyX291dDMyKCZkZHItPnNkcmFtX2NmZywgdGVtcF9zZHJhbV9jZmcgfCBTRFJBTV9DRkdfTUVNX0VOKTsKKwlhc20gdm9sYXRpbGUoInN5bmM7aXN5bmMiKTsKKworCXRvdGFsX2diX3NpemVfcGVyX2NvbnRyb2xsZXIgPSAwOworCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfQ0hJUF9TRUxFQ1RTX1BFUl9DVFJMOyBpKyspIHsKKwkJaWYgKCEocmVncy0+Y3NbaV0uY29uZmlnICYgMHg4MDAwMDAwMCkpCisJCQljb250aW51ZTsKKwkJdG90YWxfZ2Jfc2l6ZV9wZXJfY29udHJvbGxlciArPSAxIDw8ICgKKwkJCSgocmVncy0+Y3NbaV0uY29uZmlnID4+IDE0KSAmIDB4MykgKyAyICsKKwkJCSgocmVncy0+Y3NbaV0uY29uZmlnID4+IDgpICYgMHg3KSArIDEyICsKKwkJCSgocmVncy0+Y3NbaV0uY29uZmlnID4+IDQpICYgMHgzKSArIDAgKworCQkJKChyZWdzLT5jc1tpXS5jb25maWcgPj4gMCkgJiAweDcpICsgOCArCisJCQkzIC0gKChyZWdzLT5kZHJfc2RyYW1fY2ZnID4+IDE5KSAmIDB4MykgLQorCQkJMjYpOwkJCS8qIG1pbnVzIDI2IChjb3VudCBvZiA2NE0pICovCisJfQorCWlmIChmc2xfZGRyX2dldF9pbnRsM3IoKSAmIDB4ODAwMDAwMDApCS8qIDMtd2F5IGludGVybGVhdmluZyAqLworCQl0b3RhbF9nYl9zaXplX3Blcl9jb250cm9sbGVyICo9IDM7CisJZWxzZSBpZiAocmVncy0+Y3NbMF0uY29uZmlnICYgMHgyMDAwMDAwMCkgLyogMi13YXkgaW50ZXJsZWF2aW5nICovCisJCXRvdGFsX2diX3NpemVfcGVyX2NvbnRyb2xsZXIgPDw9IDE7CisJLyoKKwkgKiB0b3RhbCBtZW1vcnkgLyBidXMgd2lkdGggPSB0cmFuc2FjdGlvbnMgbmVlZGVkCisJICogdHJhbnNhY3Rpb25zIG5lZWRlZCAvIGRhdGEgcmF0ZSA9IHNlY29uZHMKKwkgKiB0byBhZGQgcGxlbnR5IG9mIGJ1ZmZlciwgZG91YmxlIHRoZSB0aW1lCisJICogRm9yIGV4YW1wbGUsIDJHQiBvbiA2NjZNVC9zIDY0LWJpdCBidXMgdGFrZXMgYWJvdXQgNDAybXMKKwkgKiBMZXQncyB3YWl0IGZvciA4MDBtcworCSAqLworCWJ1c193aWR0aCA9IDMgLSAoKGRkci0+c2RyYW1fY2ZnICYgU0RSQU1fQ0ZHX0RCV19NQVNLKQorCQkJPj4gU0RSQU1fQ0ZHX0RCV19TSElGVCk7CisJdGltZW91dCA9ICgodG90YWxfZ2Jfc2l6ZV9wZXJfY29udHJvbGxlciA8PCAoNiAtIGJ1c193aWR0aCkpICogMTAwIC8KKwkJKGdldF9kZHJfZnJlcSgwKSA+PiAyMCkpIDw8IDI7CisJdG90YWxfZ2Jfc2l6ZV9wZXJfY29udHJvbGxlciA+Pj0gNDsJLyogc2hpZnQgZG93biB0byBnYiBzaXplICovCisJZGVidWcoInRvdGFsICVkIEdCXG4iLCB0b3RhbF9nYl9zaXplX3Blcl9jb250cm9sbGVyKTsKKwlkZWJ1ZygiTmVlZCB0byB3YWl0IHVwIHRvICVkICogMTBtc1xuIiwgdGltZW91dCk7CisKKwkvKiBQb2xsIEREUl9TRFJBTV9DRkdfMltEX0lOSVRdIGJpdCB1bnRpbCBhdXRvLWRhdGEgaW5pdCBpcyBkb25lLiAgKi8KKwl3aGlsZSAoKGRkcl9pbjMyKCZkZHItPnNkcmFtX2NmZ18yKSAmIFNEUkFNX0NGRzJfRF9JTklUKSAmJgorCQkodGltZW91dCA+PSAwKSkgeworCQl1ZGVsYXkoMTAwMDApOwkJLyogdGhyb3R0bGUgcG9sbGluZyByYXRlICovCisJCXRpbWVvdXQtLTsKKwl9CisKKwlpZiAodGltZW91dCA8PSAwKQorCQlwcmludGYoIldhaXRpbmcgZm9yIERfSU5JVCB0aW1lb3V0LiBNZW1vcnkgbWF5IG5vdCB3b3JrLlxuIik7CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGRyL2ZzbC9pbnRlcmFjdGl2ZS5jIGIvZHJpdmVycy9kZHIvZnNsL2ludGVyYWN0aXZlLmMKaW5kZXggZWJmM2VkNi4uY2ZlMWUxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kZHIvZnNsL2ludGVyYWN0aXZlLmMKKysrIGIvZHJpdmVycy9kZHIvZnNsL2ludGVyYWN0aXZlLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMTAtMjAxMiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTAtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwogICovCkBAIC0xNTMsMjUgKzE1MywzOCBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uc19zdHJpbmcgb3B0aW9uc1tdID0gewogCQlDT01NT05fVElNSU5HKHRja21pbl94X3BzKSwKIAkJQ09NTU9OX1RJTUlORyh0Y2ttYXhfcHMpLAotCQlDT01NT05fVElNSU5HKHRja21heF9tYXhfcHMpLAorCQlDT01NT05fVElNSU5HKHRhYW1pbl9wcyksCiAJCUNPTU1PTl9USU1JTkcodHJjZF9wcyksCiAJCUNPTU1PTl9USU1JTkcodHJwX3BzKSwKIAkJQ09NTU9OX1RJTUlORyh0cmFzX3BzKSwKLQkJQ09NTU9OX1RJTUlORyh0d3JfcHMpLAorCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorCQlDT01NT05fVElNSU5HKHRyZmMxX3BzKSwKKwkJQ09NTU9OX1RJTUlORyh0cmZjMl9wcyksCisJCUNPTU1PTl9USU1JTkcodHJmYzRfcHMpLAorCQlDT01NT05fVElNSU5HKHRycmRzX3BzKSwKKwkJQ09NTU9OX1RJTUlORyh0cnJkbF9wcyksCisJCUNPTU1PTl9USU1JTkcodGNjZGxfcHMpLAorI2Vsc2UKIAkJQ09NTU9OX1RJTUlORyh0d3RyX3BzKSwKIAkJQ09NTU9OX1RJTUlORyh0cmZjX3BzKSwKIAkJQ09NTU9OX1RJTUlORyh0cnJkX3BzKSwKKwkJQ09NTU9OX1RJTUlORyh0cnRwX3BzKSwKKyNlbmRpZgorCQlDT01NT05fVElNSU5HKHR3cl9wcyksCiAJCUNPTU1PTl9USU1JTkcodHJjX3BzKSwKIAkJQ09NTU9OX1RJTUlORyhyZWZyZXNoX3JhdGVfcHMpLAorCQlDT01NT05fVElNSU5HKGV4dGVuZGVkX29wX3NydCksCisjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIxKSB8fCBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjIpCiAJCUNPTU1PTl9USU1JTkcodGlzX3BzKSwKIAkJQ09NTU9OX1RJTUlORyh0aWhfcHMpLAogCQlDT01NT05fVElNSU5HKHRkc19wcyksCiAJCUNPTU1PTl9USU1JTkcodGRoX3BzKSwKLQkJQ09NTU9OX1RJTUlORyh0cnRwX3BzKSwKIAkJQ09NTU9OX1RJTUlORyh0ZHFzcV9tYXhfcHMpLAogCQlDT01NT05fVElNSU5HKHRxaHNfcHMpLAorI2VuZGlmCiAJCUNPTU1PTl9USU1JTkcobmRpbW1zX3ByZXNlbnQpLAotCQlDT01NT05fVElNSU5HKGxvd2VzdF9jb21tb25fU1BEX2Nhc2xhdCksCisJCUNPTU1PTl9USU1JTkcobG93ZXN0X2NvbW1vbl9zcGRfY2FzbGF0KSwKIAkJQ09NTU9OX1RJTUlORyhoaWdoZXN0X2NvbW1vbl9kZXJhdGVkX2Nhc2xhdCksCiAJCUNPTU1PTl9USU1JTkcoYWRkaXRpdmVfbGF0ZW5jeSksCiAJCUNPTU1PTl9USU1JTkcoYWxsX2RpbW1zX2J1cnN0X2xlbmd0aHNfYml0bWFzayksCkBAIC0yMTEsNyArMjI0LDEyIEBACiAJCURJTU1fUEFSTShuX3Jvd19hZGRyKSwKIAkJRElNTV9QQVJNKG5fY29sX2FkZHIpLAogCQlESU1NX1BBUk0oZWRjX2NvbmZpZyksCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorCQlESU1NX1BBUk0oYmFua19hZGRyX2JpdHMpLAorCQlESU1NX1BBUk0oYmFua19ncm91cF9iaXRzKSwKKyNlbHNlCiAJCURJTU1fUEFSTShuX2JhbmtzX3Blcl9zZHJhbV9kZXZpY2UpLAorI2VuZGlmCiAJCURJTU1fUEFSTShidXJzdF9sZW5ndGhzX2JpdG1hc2spLAogCQlESU1NX1BBUk0ocm93X2RlbnNpdHkpLAogCkBAIC0yMjksMjAgKzI0NywzMiBAQAogCQlESU1NX1BBUk0odHJjZF9wcyksCiAJCURJTU1fUEFSTSh0cnBfcHMpLAogCQlESU1NX1BBUk0odHJhc19wcyksCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorCQlESU1NX1BBUk0odHJmYzFfcHMpLAorCQlESU1NX1BBUk0odHJmYzJfcHMpLAorCQlESU1NX1BBUk0odHJmYzRfcHMpLAorCQlESU1NX1BBUk0odHJyZHNfcHMpLAorCQlESU1NX1BBUk0odHJyZGxfcHMpLAorCQlESU1NX1BBUk0odGNjZGxfcHMpLAorI2Vsc2UKIAkJRElNTV9QQVJNKHR3cl9wcyksCiAJCURJTU1fUEFSTSh0d3RyX3BzKSwKIAkJRElNTV9QQVJNKHRyZmNfcHMpLAogCQlESU1NX1BBUk0odHJyZF9wcyksCisJCURJTU1fUEFSTSh0cnRwX3BzKSwKKyNlbmRpZgogCQlESU1NX1BBUk0odHJjX3BzKSwKIAkJRElNTV9QQVJNKHJlZnJlc2hfcmF0ZV9wcyksCisJCURJTU1fUEFSTShleHRlbmRlZF9vcF9zcnQpLAogCisjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIxKSB8fCBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjIpCiAJCURJTU1fUEFSTSh0aXNfcHMpLAogCQlESU1NX1BBUk0odGloX3BzKSwKIAkJRElNTV9QQVJNKHRkc19wcyksCiAJCURJTU1fUEFSTSh0ZGhfcHMpLAotCQlESU1NX1BBUk0odHJ0cF9wcyksCiAJCURJTU1fUEFSTSh0ZHFzcV9tYXhfcHMpLAogCQlESU1NX1BBUk0odHFoc19wcyksCisjZW5kaWYKIAogCQlESU1NX1BBUk0ocmFua19kZW5zaXR5KSwKIAkJRElNTV9QQVJNKGNhcGFjaXR5KSwKQEAgLTI3MCw3ICszMDAsMTIgQEAKIAkJRElNTV9QQVJNKG5fcm93X2FkZHIpLAogCQlESU1NX1BBUk0obl9jb2xfYWRkciksCiAJCURJTU1fUEFSTShlZGNfY29uZmlnKSwKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9ERFI0CisJCURJTU1fUEFSTShiYW5rX2FkZHJfYml0cyksCisJCURJTU1fUEFSTShiYW5rX2dyb3VwX2JpdHMpLAorI2Vsc2UKIAkJRElNTV9QQVJNKG5fYmFua3NfcGVyX3NkcmFtX2RldmljZSksCisjZW5kaWYKIAogCQlESU1NX1BBUk0odGNrbWluX3hfcHMpLAogCQlESU1NX1BBUk0odGNrbWluX3hfbWludXNfMV9wcyksCkBAIC0yODYsMjAgKzMyMSwzMSBAQAogCQlESU1NX1BBUk0odHJjZF9wcyksCiAJCURJTU1fUEFSTSh0cnBfcHMpLAogCQlESU1NX1BBUk0odHJhc19wcyksCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorCQlESU1NX1BBUk0odHJmYzFfcHMpLAorCQlESU1NX1BBUk0odHJmYzJfcHMpLAorCQlESU1NX1BBUk0odHJmYzRfcHMpLAorCQlESU1NX1BBUk0odHJyZHNfcHMpLAorCQlESU1NX1BBUk0odHJyZGxfcHMpLAorCQlESU1NX1BBUk0odGNjZGxfcHMpLAorI2Vsc2UKIAkJRElNTV9QQVJNKHR3cl9wcyksCiAJCURJTU1fUEFSTSh0d3RyX3BzKSwKIAkJRElNTV9QQVJNKHRyZmNfcHMpLAogCQlESU1NX1BBUk0odHJyZF9wcyksCisJCURJTU1fUEFSTSh0cnRwX3BzKSwKKyNlbmRpZgogCQlESU1NX1BBUk0odHJjX3BzKSwKIAkJRElNTV9QQVJNKHJlZnJlc2hfcmF0ZV9wcyksCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjEpIHx8IGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMikKIAkJRElNTV9QQVJNKHRpc19wcyksCiAJCURJTU1fUEFSTSh0aWhfcHMpLAogCQlESU1NX1BBUk0odGRzX3BzKSwKIAkJRElNTV9QQVJNKHRkaF9wcyksCi0JCURJTU1fUEFSTSh0cnRwX3BzKSwKIAkJRElNTV9QQVJNKHRkcXNxX21heF9wcyksCiAJCURJTU1fUEFSTSh0cWhzX3BzKSwKKyNlbmRpZgogCX07CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuX29wdHMgPSBBUlJBWV9TSVpFKG9wdGlvbnMpOwogCkBAIC0zMjYsMjMgKzM3MiwzNiBAQAogCQljb25zdCBjb21tb25fdGltaW5nX3BhcmFtc190ICpwbGNkX2RpbW1fcGFyYW1zKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uc19zdHJpbmcgb3B0aW9uc1tdID0gewotCQlDT01NT05fVElNSU5HKHRja21heF9tYXhfcHMpLAorCQlDT01NT05fVElNSU5HKHRhYW1pbl9wcyksCiAJCUNPTU1PTl9USU1JTkcodHJjZF9wcyksCiAJCUNPTU1PTl9USU1JTkcodHJwX3BzKSwKIAkJQ09NTU9OX1RJTUlORyh0cmFzX3BzKSwKLQkJQ09NTU9OX1RJTUlORyh0d3JfcHMpLAorI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwkJQ09NTU9OX1RJTUlORyh0cmZjMV9wcyksCisJCUNPTU1PTl9USU1JTkcodHJmYzJfcHMpLAorCQlDT01NT05fVElNSU5HKHRyZmM0X3BzKSwKKwkJQ09NTU9OX1RJTUlORyh0cnJkc19wcyksCisJCUNPTU1PTl9USU1JTkcodHJyZGxfcHMpLAorCQlDT01NT05fVElNSU5HKHRjY2RsX3BzKSwKKyNlbHNlCiAJCUNPTU1PTl9USU1JTkcodHd0cl9wcyksCiAJCUNPTU1PTl9USU1JTkcodHJmY19wcyksCiAJCUNPTU1PTl9USU1JTkcodHJyZF9wcyksCisJCUNPTU1PTl9USU1JTkcodHJ0cF9wcyksCisjZW5kaWYKKwkJQ09NTU9OX1RJTUlORyh0d3JfcHMpLAogCQlDT01NT05fVElNSU5HKHRyY19wcyksCiAJCUNPTU1PTl9USU1JTkcocmVmcmVzaF9yYXRlX3BzKSwKKwkJQ09NTU9OX1RJTUlORyhleHRlbmRlZF9vcF9zcnQpLAorI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMSkgfHwgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIyKQogCQlDT01NT05fVElNSU5HKHRpc19wcyksCisJCUNPTU1PTl9USU1JTkcodGloX3BzKSwKIAkJQ09NTU9OX1RJTUlORyh0ZHNfcHMpLAogCQlDT01NT05fVElNSU5HKHRkaF9wcyksCi0JCUNPTU1PTl9USU1JTkcodHJ0cF9wcyksCiAJCUNPTU1PTl9USU1JTkcodGRxc3FfbWF4X3BzKSwKIAkJQ09NTU9OX1RJTUlORyh0cWhzX3BzKSwKLQkJQ09NTU9OX1RJTUlORyhsb3dlc3RfY29tbW9uX1NQRF9jYXNsYXQpLAorI2VuZGlmCisJCUNPTU1PTl9USU1JTkcobG93ZXN0X2NvbW1vbl9zcGRfY2FzbGF0KSwKIAkJQ09NTU9OX1RJTUlORyhoaWdoZXN0X2NvbW1vbl9kZXJhdGVkX2Nhc2xhdCksCiAJCUNPTU1PTl9USU1JTkcoYWRkaXRpdmVfbGF0ZW5jeSksCiAJCUNPTU1PTl9USU1JTkcobmRpbW1zX3ByZXNlbnQpLApAQCAtNDYwLDYgKzUxOSw5IEBACiAJCUNUUkxfT1BUSU9OUyh0ZmF3X3dpbmRvd19mb3VyX2FjdGl2YXRlc19wcyksCiAJCUNUUkxfT1BUSU9OUyh0cnd0X292ZXJyaWRlKSwKIAkJQ1RSTF9PUFRJT05TKHRyd3QpLAorCQlDVFJMX09QVElPTlMocnR0X292ZXJyaWRlKSwKKwkJQ1RSTF9PUFRJT05TKHJ0dF9vdmVycmlkZV92YWx1ZSksCisJCUNUUkxfT1BUSU9OUyhydHRfd3Jfb3ZlcnJpZGVfdmFsdWUpLAogCX07CiAKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5fb3B0cyA9IEFSUkFZX1NJWkUob3B0aW9ucyk7CkBAIC01MDUsNiArNTY3LDcgQEAKIAkJQ0ZHX1JFR1ModGltaW5nX2NmZ18yKSwKIAkJQ0ZHX1JFR1MoZGRyX3NkcmFtX2NmZyksCiAJCUNGR19SRUdTKGRkcl9zZHJhbV9jZmdfMiksCisJCUNGR19SRUdTKGRkcl9zZHJhbV9jZmdfMyksCiAJCUNGR19SRUdTKGRkcl9zZHJhbV9tb2RlKSwKIAkJQ0ZHX1JFR1MoZGRyX3NkcmFtX21vZGVfMiksCiAJCUNGR19SRUdTKGRkcl9zZHJhbV9tb2RlXzMpLApAQCAtNTEzLDYgKzU3NiwxNiBAQAogCQlDRkdfUkVHUyhkZHJfc2RyYW1fbW9kZV82KSwKIAkJQ0ZHX1JFR1MoZGRyX3NkcmFtX21vZGVfNyksCiAJCUNGR19SRUdTKGRkcl9zZHJhbV9tb2RlXzgpLAorI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwkJQ0ZHX1JFR1MoZGRyX3NkcmFtX21vZGVfOSksCisJCUNGR19SRUdTKGRkcl9zZHJhbV9tb2RlXzEwKSwKKwkJQ0ZHX1JFR1MoZGRyX3NkcmFtX21vZGVfMTEpLAorCQlDRkdfUkVHUyhkZHJfc2RyYW1fbW9kZV8xMiksCisJCUNGR19SRUdTKGRkcl9zZHJhbV9tb2RlXzEzKSwKKwkJQ0ZHX1JFR1MoZGRyX3NkcmFtX21vZGVfMTQpLAorCQlDRkdfUkVHUyhkZHJfc2RyYW1fbW9kZV8xNSksCisJCUNGR19SRUdTKGRkcl9zZHJhbV9tb2RlXzE2KSwKKyNlbmRpZgogCQlDRkdfUkVHUyhkZHJfc2RyYW1faW50ZXJ2YWwpLAogCQlDRkdfUkVHUyhkZHJfZGF0YV9pbml0KSwKIAkJQ0ZHX1JFR1MoZGRyX3NkcmFtX2Nsa19jbnRsKSwKQEAgLTUyMCw2ICs1OTMsMTIgQEAKIAkJQ0ZHX1JFR1MoZGRyX2luaXRfZXh0X2FkZHIpLAogCQlDRkdfUkVHUyh0aW1pbmdfY2ZnXzQpLAogCQlDRkdfUkVHUyh0aW1pbmdfY2ZnXzUpLAorI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwkJQ0ZHX1JFR1ModGltaW5nX2NmZ182KSwKKwkJQ0ZHX1JFR1ModGltaW5nX2NmZ183KSwKKwkJQ0ZHX1JFR1ModGltaW5nX2NmZ184KSwKKwkJQ0ZHX1JFR1ModGltaW5nX2NmZ185KSwKKyNlbmRpZgogCQlDRkdfUkVHUyhkZHJfenFfY250bCksCiAJCUNGR19SRUdTKGRkcl93cmx2bF9jbnRsKSwKIAkJQ0ZHX1JFR1MoZGRyX3dybHZsX2NudGxfMiksCkBAIC01MjksNiArNjA4LDEwIEBACiAJCUNGR19SRUdTKGRkcl9zZHJhbV9yY3dfMiksCiAJCUNGR19SRUdTKGRkcl9jZHIxKSwKIAkJQ0ZHX1JFR1MoZGRyX2NkcjIpLAorCQlDRkdfUkVHUyhkcV9tYXBfMCksCisJCUNGR19SRUdTKGRxX21hcF8xKSwKKwkJQ0ZHX1JFR1MoZHFfbWFwXzIpLAorCQlDRkdfUkVHUyhkcV9tYXBfMyksCiAJCUNGR19SRUdTKGVycl9kaXNhYmxlKSwKIAkJQ0ZHX1JFR1MoZXJyX2ludF9lbiksCiAJCUNGR19SRUdTKGRkcl9lb3IpLApAQCAtNTc0LDYgKzY1Nyw3IEBACiAJCUNGR19SRUdTKHRpbWluZ19jZmdfMiksCiAJCUNGR19SRUdTKGRkcl9zZHJhbV9jZmcpLAogCQlDRkdfUkVHUyhkZHJfc2RyYW1fY2ZnXzIpLAorCQlDRkdfUkVHUyhkZHJfc2RyYW1fY2ZnXzMpLAogCQlDRkdfUkVHUyhkZHJfc2RyYW1fbW9kZSksCiAJCUNGR19SRUdTKGRkcl9zZHJhbV9tb2RlXzIpLAogCQlDRkdfUkVHUyhkZHJfc2RyYW1fbW9kZV8zKSwKQEAgLTU4Miw2ICs2NjYsMTYgQEAKIAkJQ0ZHX1JFR1MoZGRyX3NkcmFtX21vZGVfNiksCiAJCUNGR19SRUdTKGRkcl9zZHJhbV9tb2RlXzcpLAogCQlDRkdfUkVHUyhkZHJfc2RyYW1fbW9kZV84KSwKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9ERFI0CisJCUNGR19SRUdTKGRkcl9zZHJhbV9tb2RlXzkpLAorCQlDRkdfUkVHUyhkZHJfc2RyYW1fbW9kZV8xMCksCisJCUNGR19SRUdTKGRkcl9zZHJhbV9tb2RlXzExKSwKKwkJQ0ZHX1JFR1MoZGRyX3NkcmFtX21vZGVfMTIpLAorCQlDRkdfUkVHUyhkZHJfc2RyYW1fbW9kZV8xMyksCisJCUNGR19SRUdTKGRkcl9zZHJhbV9tb2RlXzE0KSwKKwkJQ0ZHX1JFR1MoZGRyX3NkcmFtX21vZGVfMTUpLAorCQlDRkdfUkVHUyhkZHJfc2RyYW1fbW9kZV8xNiksCisjZW5kaWYKIAkJQ0ZHX1JFR1MoZGRyX3NkcmFtX2ludGVydmFsKSwKIAkJQ0ZHX1JFR1MoZGRyX2RhdGFfaW5pdCksCiAJCUNGR19SRUdTKGRkcl9zZHJhbV9jbGtfY250bCksCkBAIC01ODksNiArNjgzLDEyIEBACiAJCUNGR19SRUdTKGRkcl9pbml0X2V4dF9hZGRyKSwKIAkJQ0ZHX1JFR1ModGltaW5nX2NmZ180KSwKIAkJQ0ZHX1JFR1ModGltaW5nX2NmZ181KSwKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9ERFI0CisJCUNGR19SRUdTKHRpbWluZ19jZmdfNiksCisJCUNGR19SRUdTKHRpbWluZ19jZmdfNyksCisJCUNGR19SRUdTKHRpbWluZ19jZmdfOCksCisJCUNGR19SRUdTKHRpbWluZ19jZmdfOSksCisjZW5kaWYKIAkJQ0ZHX1JFR1MoZGRyX3pxX2NudGwpLAogCQlDRkdfUkVHUyhkZHJfd3JsdmxfY250bCksCiAJCUNGR19SRUdTKGRkcl93cmx2bF9jbnRsXzIpLApAQCAtNTk4LDYgKzY5OCwxMCBAQAogCQlDRkdfUkVHUyhkZHJfc2RyYW1fcmN3XzIpLAogCQlDRkdfUkVHUyhkZHJfY2RyMSksCiAJCUNGR19SRUdTKGRkcl9jZHIyKSwKKwkJQ0ZHX1JFR1MoZHFfbWFwXzApLAorCQlDRkdfUkVHUyhkcV9tYXBfMSksCisJCUNGR19SRUdTKGRxX21hcF8yKSwKKwkJQ0ZHX1JFR1MoZHFfbWFwXzMpLAogCQlDRkdfUkVHUyhlcnJfZGlzYWJsZSksCiAJCUNGR19SRUdTKGVycl9pbnRfZW4pLAogCQlDRkdfUkVHUyhkZHJfc2RyYW1fcmN3XzIpLApAQCAtNzA1LDYgKzgwOSw5IEBACiAJCUNUUkxfT1BUSU9OUyh0ZmF3X3dpbmRvd19mb3VyX2FjdGl2YXRlc19wcyksCiAJCUNUUkxfT1BUSU9OUyh0cnd0X292ZXJyaWRlKSwKIAkJQ1RSTF9PUFRJT05TKHRyd3QpLAorCQlDVFJMX09QVElPTlMocnR0X292ZXJyaWRlKSwKKwkJQ1RSTF9PUFRJT05TKHJ0dF9vdmVycmlkZV92YWx1ZSksCisJCUNUUkxfT1BUSU9OUyhydHRfd3Jfb3ZlcnJpZGVfdmFsdWUpLAogCX07CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuX29wdHMgPSBBUlJBWV9TSVpFKG9wdGlvbnMpOwogCkBAIC0xMjQyLDYgKzEzNDksMjY2IEBACiAJCXByaW50ZigiJTAyeCIsIHNwZC0+Y3VzdFtpIC0gMTc2XSk7CiAJcHJpbnRmKCIgICBNZmcncyBTcGVjaWZpYyBEYXRhXG4iKTsKIAorfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9ERFI0Cit2b2lkIGRkcjRfc3BkX2R1bXAoY29uc3Qgc3RydWN0IGRkcjRfc3BkX2VlcHJvbV9zICpzcGQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBHZW5lcmFsIFNlY3Rpb246IEJ5dGVzIDAtMTI3ICovCisKKyNkZWZpbmUgUFJJTlRfTlhTKHgsIHksIHouLi4pIHByaW50ZigiJS0zZCAgICA6ICUwMnggIiB6ICJcbiIsIHgsICh1OCl5KTsKKyNkZWZpbmUgUFJJTlRfTk5YWFMobjAsIG4xLCB4MCwgeDEsIHMpIFwKKwlwcmludGYoIiUtM2QtJTNkOiAlMDJ4ICUwMnggIiBzICJcbiIsIG4wLCBuMSwgeDAsIHgxKTsKKworCVBSSU5UX05YUygwLCBzcGQtPmluZm9fc2l6ZV9jcmMsCisJCSAgImluZm9fc2l6ZV9jcmMgIGJ5dGVzIHdyaXR0ZW4gaW50byBzZXJpYWwgbWVtb3J5LCBDUkMgY292ZXJhZ2UiKTsKKwlQUklOVF9OWFMoMSwgc3BkLT5zcGRfcmV2LAorCQkgICJzcGRfcmV2ICAgICAgICBTUEQgUmV2aXNpb24iKTsKKwlQUklOVF9OWFMoMiwgc3BkLT5tZW1fdHlwZSwKKwkJICAibWVtX3R5cGUgICAgICAgS2V5IEJ5dGUgLyBEUkFNIERldmljZSBUeXBlIik7CisJUFJJTlRfTlhTKDMsIHNwZC0+bW9kdWxlX3R5cGUsCisJCSAgIm1vZHVsZV90eXBlICAgIEtleSBCeXRlIC8gTW9kdWxlIFR5cGUiKTsKKwlQUklOVF9OWFMoNCwgc3BkLT5kZW5zaXR5X2JhbmtzLAorCQkgICJkZW5zaXR5X2JhbmtzICBTRFJBTSBEZW5zaXR5IGFuZCBCYW5rcyIpOworCVBSSU5UX05YUyg1LCBzcGQtPmFkZHJlc3NpbmcsCisJCSAgImFkZHJlc3NpbmcgICAgIFNEUkFNIEFkZHJlc3NpbmciKTsKKwlQUklOVF9OWFMoNiwgc3BkLT5wYWNrYWdlX3R5cGUsCisJCSAgInBhY2thZ2VfdHlwZSAgIFBhY2thZ2UgdHlwZSIpOworCVBSSU5UX05YUyg3LCBzcGQtPm9wdF9mZWF0dXJlLAorCQkgICJvcHRfZmVhdHVyZSAgICBPcHRpb25hbCBmZWF0dXJlcyIpOworCVBSSU5UX05YUyg4LCBzcGQtPnRoZXJtYWxfcmVmLAorCQkgICJ0aGVybWFsX3JlZiAgICBUaGVybWFsIGFuZCBSZWZyZXNoIG9wdGlvbnMiKTsKKwlQUklOVF9OWFMoOSwgc3BkLT5vdGhfb3B0X2ZlYXR1cmVzLAorCQkgICJvdGhfb3B0X2ZlYXR1cmVzIE90aGVyIFNEUkFNIG9wdGlvbmFsIGZlYXR1cmVzIik7CisJUFJJTlRfTlhTKDEwLCBzcGQtPnJlc18xMCwKKwkJICAicmVzXzEwICAgICAgICAgUmVzZXJ2ZWQiKTsKKwlQUklOVF9OWFMoMTEsIHNwZC0+bW9kdWxlX3ZkZCwKKwkJICAibW9kdWxlX3ZkZCAgICAgTW9kdWxlIE5vbWluYWwgVm9sdGFnZSwgVkREIik7CisJUFJJTlRfTlhTKDEyLCBzcGQtPm9yZ2FuaXphdGlvbiwKKwkJICAib3JnYW5pemF0aW9uIE1vZHVsZSBPcmdhbml6YXRpb24iKTsKKwlQUklOVF9OWFMoMTMsIHNwZC0+YnVzX3dpZHRoLAorCQkgICJidXNfd2lkdGggICAgICBNb2R1bGUgTWVtb3J5IEJ1cyBXaWR0aCIpOworCVBSSU5UX05YUygxNCwgc3BkLT50aGVybV9zZW5zb3IsCisJCSAgInRoZXJtX3NlbnNvciAgIE1vZHVsZSBUaGVybWFsIFNlbnNvciIpOworCVBSSU5UX05YUygxNSwgc3BkLT5leHRfdHlwZSwKKwkJICAiZXh0X3R5cGUgICAgICAgRXh0ZW5kZWQgbW9kdWxlIHR5cGUiKTsKKwlQUklOVF9OWFMoMTYsIHNwZC0+cmVzXzE2LAorCQkgICJyZXNfMTYgICAgICAgUmVzZXJ2ZWQiKTsKKwlQUklOVF9OWFMoMTcsIHNwZC0+dGltZWJhc2VzLAorCQkgICJ0aW1lYmFzZXMgICAgTVRiIGFuZCBGVEIiKTsKKwlQUklOVF9OWFMoMTgsIHNwZC0+dGNrX21pbiwKKwkJICAidGNrX21pbiAgICAgIHRDS0FWR21pbiIpOworCVBSSU5UX05YUygxOSwgc3BkLT50Y2tfbWF4LAorCQkgICJ0Y2tfbWF4ICAgICAgVENLQVZHbWF4Iik7CisJUFJJTlRfTlhTKDIwLCBzcGQtPmNhc2xhdF9iMSwKKwkJICAiY2FzbGF0X2IxICAgIENBUyBsYXRlbmNpZXMsIDFzdCBieXRlIik7CisJUFJJTlRfTlhTKDIxLCBzcGQtPmNhc2xhdF9iMiwKKwkJICAiY2FzbGF0X2IyICAgIENBUyBsYXRlbmNpZXMsIDJuZCBieXRlIik7CisJUFJJTlRfTlhTKDIyLCBzcGQtPmNhc2xhdF9iMywKKwkJICAiY2FzbGF0X2IzICAgIENBUyBsYXRlbmNpZXMsIDNyZCBieXRlICIpOworCVBSSU5UX05YUygyMywgc3BkLT5jYXNsYXRfYjQsCisJCSAgImNhc2xhdF9iNCAgICBDQVMgbGF0ZW5jaWVzLCA0dGggYnl0ZSIpOworCVBSSU5UX05YUygyNCwgc3BkLT50YWFfbWluLAorCQkgICJ0YWFfbWluICAgICAgTWluIENBUyBMYXRlbmN5IFRpbWUiKTsKKwlQUklOVF9OWFMoMjUsIHNwZC0+dHJjZF9taW4sCisJCSAgInRyY2RfbWluICAgICBNaW4gUkFTIyB0byBDQVMjIERlbGF5IFRpbWUiKTsKKwlQUklOVF9OWFMoMjYsIHNwZC0+dHJwX21pbiwKKwkJICAidHJwX21pbiAgICAgIE1pbiBSb3cgUHJlY2hhcmdlIERlbGF5IFRpbWUiKTsKKwlQUklOVF9OWFMoMjcsIHNwZC0+dHJhc190cmNfZXh0LAorCQkgICJ0cmFzX3RyY19leHQgVXBwZXIgTmliYmxlcyBmb3IgdFJBUyBhbmQgdFJDIik7CisJUFJJTlRfTlhTKDI4LCBzcGQtPnRyYXNfbWluX2xzYiwKKwkJICAidHJhc19taW5fbHNiIHRSQVNtaW4sIGxzYiIpOworCVBSSU5UX05YUygyOSwgc3BkLT50cmNfbWluX2xzYiwKKwkJICAidHJjX21pbl9sc2IgIHRSQ21pbiwgbHNiIik7CisJUFJJTlRfTlhTKDMwLCBzcGQtPnRyZmMxX21pbl9sc2IsCisJCSAgInRyZmMxX21pbl9sc2IgIE1pbiBSZWZyZXNoIFJlY292ZXJ5IERlbGF5IFRpbWUsIExTQiIpOworCVBSSU5UX05YUygzMSwgc3BkLT50cmZjMV9taW5fbXNiLAorCQkgICJ0cmZjMV9taW5fbXNiICBNaW4gUmVmcmVzaCBSZWNvdmVyeSBEZWxheSBUaW1lLCBNU0IgIik7CisJUFJJTlRfTlhTKDMyLCBzcGQtPnRyZmMyX21pbl9sc2IsCisJCSAgInRyZmMyX21pbl9sc2IgIE1pbiBSZWZyZXNoIFJlY292ZXJ5IERlbGF5IFRpbWUsIExTQiIpOworCVBSSU5UX05YUygzMywgc3BkLT50cmZjMl9taW5fbXNiLAorCQkgICJ0cmZjMl9taW5fbXNiICBNaW4gUmVmcmVzaCBSZWNvdmVyeSBEZWxheSBUaW1lLCBNU0IiKTsKKwlQUklOVF9OWFMoMzQsIHNwZC0+dHJmYzRfbWluX2xzYiwKKwkJICAidHJmYzRfbWluX2xzYiBNaW4gUmVmcmVzaCBSZWNvdmVyeSBEZWxheSBUaW1lLCBMU0IiKTsKKwlQUklOVF9OWFMoMzUsIHNwZC0+dHJmYzRfbWluX21zYiwKKwkJICAidHJmYzRfbWluX21zYiBNaW4gUmVmcmVzaCBSZWNvdmVyeSBEZWxheSBUaW1lLCBNU0IiKTsKKwlQUklOVF9OWFMoMzYsIHNwZC0+dGZhd19tc2IsCisJCSAgInRmYXdfbXNiICAgICAgVXBwZXIgTmliYmxlIGZvciB0RkFXIik7CisJUFJJTlRfTlhTKDM3LCBzcGQtPnRmYXdfbWluLAorCQkgICJ0ZmF3X21pbiAgICAgIHRGQVcsIGxzYiIpOworCVBSSU5UX05YUygzOCwgc3BkLT50cnJkc19taW4sCisJCSAgInRycmRzX21pbiAgICAgdFJSRF9TbWluLCBNVEIiKTsKKwlQUklOVF9OWFMoMzksIHNwZC0+dHJyZGxfbWluLAorCQkgICJ0cnJkbF9taW4gICAgIHRSUkRfTG1pbiwgTVRCIik7CisJUFJJTlRfTlhTKDQwLCBzcGQtPnRjY2RsX21pbiwKKwkJICAidGNjZGxfbWluICAgICB0Q0NTX0xtaW4sIE1UQiIpOworCisJcHJpbnRmKCIlLTNkLSUzZDogIiwgNDEsIDU5KTsgIC8qIFJlc2VydmVkLCBHZW5lcmFsIFNlY3Rpb24gKi8KKwlmb3IgKGkgPSA0MTsgaSA8PSA1OTsgaSsrKQorCQlwcmludGYoIiUwMnggIiwgc3BkLT5yZXNfNDFbaSAtIDQxXSk7CisKKwlwdXRzKCJcbiIpOworCXByaW50ZigiJS0zZC0lM2Q6ICIsIDYwLCA3Nyk7CisJZm9yIChpID0gNjA7IGkgPD0gNzc7IGkrKykKKwkJcHJpbnRmKCIlMDJ4ICIsIHNwZC0+bWFwcGluZ1tpIC0gNjBdKTsKKwlwdXRzKCIgICBtYXBwaW5nW10gQ29ubmVjdG9yIHRvIFNEUkFNIGJpdCBtYXBcbiIpOworCisJUFJJTlRfTlhTKDExNywgc3BkLT5maW5lX3RjY2RsX21pbiwKKwkJICAiZmluZV90Y2NkbF9taW4gRmluZSBvZmZzZXQgZm9yIHRDQ0RfTG1pbiIpOworCVBSSU5UX05YUygxMTgsIHNwZC0+ZmluZV90cnJkbF9taW4sCisJCSAgImZpbmVfdHJyZGxfbWluIEZpbmUgb2Zmc2V0IGZvciB0UlJEX0xtaW4iKTsKKwlQUklOVF9OWFMoMTE5LCBzcGQtPmZpbmVfdHJyZHNfbWluLAorCQkgICJmaW5lX3RycmRzX21pbiBGaW5lIG9mZnNldCBmb3IgdFJSRF9TbWluIik7CisJUFJJTlRfTlhTKDEyMCwgc3BkLT5maW5lX3RyY19taW4sCisJCSAgImZpbmVfdHJjX21pbiAgIEZpbmUgb2Zmc2V0IGZvciB0UkNtaW4iKTsKKwlQUklOVF9OWFMoMTIxLCBzcGQtPmZpbmVfdHJwX21pbiwKKwkJICAiZmluZV90cnBfbWluICAgRmluZSBvZmZzZXQgZm9yIHRSUG1pbiIpOworCVBSSU5UX05YUygxMjIsIHNwZC0+ZmluZV90cmNkX21pbiwKKwkJICAiZmluZV90cmNkX21pbiAgRmluZSBvZmZzZXQgZm9yIHRSQ0RtaW4iKTsKKwlQUklOVF9OWFMoMTIzLCBzcGQtPmZpbmVfdGFhX21pbiwKKwkJICAiZmluZV90YWFfbWluICAgRmluZSBvZmZzZXQgZm9yIHRBQW1pbiIpOworCVBSSU5UX05YUygxMjQsIHNwZC0+ZmluZV90Y2tfbWF4LAorCQkgICJmaW5lX3Rja19tYXggICBGaW5lIG9mZnNldCBmb3IgdENLQVZHbWF4Iik7CisJUFJJTlRfTlhTKDEyNSwgc3BkLT5maW5lX3Rja19taW4sCisJCSAgImZpbmVfdGNrX21pbiAgIEZpbmUgb2Zmc2V0IGZvciB0Q0tBVkdtaW4iKTsKKworCS8qIENSQzogQnl0ZXMgMTI2LTEyNyAqLworCVBSSU5UX05OWFhTKDEyNiwgMTI3LCBzcGQtPmNyY1swXSwgc3BkLT5jcmNbMV0sICIgIFNQRCBDUkMiKTsKKworCXN3aXRjaCAoc3BkLT5tb2R1bGVfdHlwZSkgeworCWNhc2UgMHgwMjogIC8qIFVESU1NICovCisJY2FzZSAweDAzOiAgLyogU08tRElNTSAqLworCQlQUklOVF9OWFMoMTI4LCBzcGQtPm1vZF9zZWN0aW9uLnVuYnVmZmVyZWQubW9kX2hlaWdodCwKKwkJCSAgIm1vZF9oZWlnaHQgICAgKFVuYnVmZmVyZWQpIE1vZHVsZSBOb21pbmFsIEhlaWdodCIpOworCQlQUklOVF9OWFMoMTI5LCBzcGQtPm1vZF9zZWN0aW9uLnVuYnVmZmVyZWQubW9kX3RoaWNrbmVzcywKKwkJCSAgIm1vZF90aGlja25lc3MgKFVuYnVmZmVyZWQpIE1vZHVsZSBNYXhpbXVtIFRoaWNrbmVzcyIpOworCQlQUklOVF9OWFMoMTMwLCBzcGQtPm1vZF9zZWN0aW9uLnVuYnVmZmVyZWQucmVmX3Jhd19jYXJkLAorCQkJICAicmVmX3Jhd19jYXJkICAoVW5idWZmZXJlZCkgUmVmZXJlbmNlIFJhdyBDYXJkIFVzZWQiKTsKKwkJUFJJTlRfTlhTKDEzMSwgc3BkLT5tb2Rfc2VjdGlvbi51bmJ1ZmZlcmVkLmFkZHJfbWFwcGluZywKKwkJCSAgImFkZHJfbWFwcGluZyAgKFVuYnVmZmVyZWQpIEFkZHJlc3MgbWFwcGluZyBmcm9tIEVkZ2UgQ29ubmVjdG9yIHRvIERSQU0iKTsKKwkJUFJJTlRfTk5YWFMoMjU0LCAyNTUsIHNwZC0+bW9kX3NlY3Rpb24udW5idWZmZXJlZC5jcmNbMF0sCisJCQkgICAgc3BkLT5tb2Rfc2VjdGlvbi51bmJ1ZmZlcmVkLmNyY1sxXSwgIiAgTW9kdWxlIENSQyIpOworCQlicmVhazsKKwljYXNlIDB4MDE6ICAvKiBSRElNTSAqLworCQlQUklOVF9OWFMoMTI4LCBzcGQtPm1vZF9zZWN0aW9uLnJlZ2lzdGVyZWQubW9kX2hlaWdodCwKKwkJCSAgIm1vZF9oZWlnaHQgICAgKFJlZ2lzdGVyZWQpIE1vZHVsZSBOb21pbmFsIEhlaWdodCIpOworCQlQUklOVF9OWFMoMTI5LCBzcGQtPm1vZF9zZWN0aW9uLnJlZ2lzdGVyZWQubW9kX3RoaWNrbmVzcywKKwkJCSAgIm1vZF90aGlja25lc3MgKFJlZ2lzdGVyZWQpIE1vZHVsZSBNYXhpbXVtIFRoaWNrbmVzcyIpOworCQlQUklOVF9OWFMoMTMwLCBzcGQtPm1vZF9zZWN0aW9uLnJlZ2lzdGVyZWQucmVmX3Jhd19jYXJkLAorCQkJICAicmVmX3Jhd19jYXJkICAoUmVnaXN0ZXJlZCkgUmVmZXJlbmNlIFJhdyBDYXJkIFVzZWQiKTsKKwkJUFJJTlRfTlhTKDEzMSwgc3BkLT5tb2Rfc2VjdGlvbi5yZWdpc3RlcmVkLm1vZHVfYXR0ciwKKwkJCSAgIm1vZHVfYXR0ciAgICAgKFJlZ2lzdGVyZWQpIERJTU0gTW9kdWxlIEF0dHJpYnV0ZXMiKTsKKwkJUFJJTlRfTlhTKDEzMiwgc3BkLT5tb2Rfc2VjdGlvbi5yZWdpc3RlcmVkLnRoZXJtYWwsCisJCQkgICJ0aGVybWFsICAgICAgIChSZWdpc3RlcmVkKSBUaGVybWFsIEhlYXQgU3ByZWFkZXIgU29sdXRpb24iKTsKKwkJUFJJTlRfTlhTKDEzMywgc3BkLT5tb2Rfc2VjdGlvbi5yZWdpc3RlcmVkLnJlZ19pZF9sbywKKwkJCSAgInJlZ19pZF9sbyAgICAgKFJlZ2lzdGVyZWQpIFJlZ2lzdGVyIE1hbnVmYWN0dXJlciBJRCBDb2RlLCBMU0IiKTsKKwkJUFJJTlRfTlhTKDEzNCwgc3BkLT5tb2Rfc2VjdGlvbi5yZWdpc3RlcmVkLnJlZ19pZF9oaSwKKwkJCSAgInJlZ19pZF9oaSAgICAgKFJlZ2lzdGVyZWQpIFJlZ2lzdGVyIE1hbnVmYWN0dXJlciBJRCBDb2RlLCBNU0IiKTsKKwkJUFJJTlRfTlhTKDEzNSwgc3BkLT5tb2Rfc2VjdGlvbi5yZWdpc3RlcmVkLnJlZ19yZXYsCisJCQkgICJyZWdfcmV2ICAgICAgIChSZWdpc3RlcmVkKSBSZWdpc3RlciBSZXZpc2lvbiBOdW1iZXIiKTsKKwkJUFJJTlRfTlhTKDEzNiwgc3BkLT5tb2Rfc2VjdGlvbi5yZWdpc3RlcmVkLnJlZ19tYXAsCisJCQkgICJyZWdfbWFwICAgICAgIChSZWdpc3RlcmVkKSBBZGRyZXNzIG1hcHBpbmciKTsKKwkJUFJJTlRfTk5YWFMoMjU0LCAyNTUsIHNwZC0+bW9kX3NlY3Rpb24ucmVnaXN0ZXJlZC5jcmNbMF0sCisJCQkgICAgc3BkLT5tb2Rfc2VjdGlvbi5yZWdpc3RlcmVkLmNyY1sxXSwgIiAgTW9kdWxlIENSQyIpOworCQlicmVhazsKKwljYXNlIDB4MDQ6ICAvKiBMUkRJTU0gKi8KKwkJUFJJTlRfTlhTKDEyOCwgc3BkLT5tb2Rfc2VjdGlvbi5sb2FkcmVkdWNlZC5tb2RfaGVpZ2h0LAorCQkJICAibW9kX2hlaWdodCAgICAoTG9hZHJlZHVjZWQpIE1vZHVsZSBOb21pbmFsIEhlaWdodCIpOworCQlQUklOVF9OWFMoMTI5LCBzcGQtPm1vZF9zZWN0aW9uLmxvYWRyZWR1Y2VkLm1vZF90aGlja25lc3MsCisJCQkgICJtb2RfdGhpY2tuZXNzIChMb2FkcmVkdWNlZCkgTW9kdWxlIE1heGltdW0gVGhpY2tuZXNzIik7CisJCVBSSU5UX05YUygxMzAsIHNwZC0+bW9kX3NlY3Rpb24ubG9hZHJlZHVjZWQucmVmX3Jhd19jYXJkLAorCQkJICAicmVmX3Jhd19jYXJkICAoTG9hZHJlZHVjZWQpIFJlZmVyZW5jZSBSYXcgQ2FyZCBVc2VkIik7CisJCVBSSU5UX05YUygxMzEsIHNwZC0+bW9kX3NlY3Rpb24ubG9hZHJlZHVjZWQubW9kdV9hdHRyLAorCQkJICAibW9kdV9hdHRyICAgICAoTG9hZHJlZHVjZWQpIERJTU0gTW9kdWxlIEF0dHJpYnV0ZXMiKTsKKwkJUFJJTlRfTlhTKDEzMiwgc3BkLT5tb2Rfc2VjdGlvbi5sb2FkcmVkdWNlZC50aGVybWFsLAorCQkJICAidGhlcm1hbCAgICAgICAoTG9hZHJlZHVjZWQpIFRoZXJtYWwgSGVhdCBTcHJlYWRlciBTb2x1dGlvbiIpOworCQlQUklOVF9OWFMoMTMzLCBzcGQtPm1vZF9zZWN0aW9uLmxvYWRyZWR1Y2VkLnJlZ19pZF9sbywKKwkJCSAgInJlZ19pZF9sbyAgICAgKExvYWRyZWR1Y2VkKSBSZWdpc3RlciBNYW51ZmFjdHVyZXIgSUQgQ29kZSwgTFNCIik7CisJCVBSSU5UX05YUygxMzQsIHNwZC0+bW9kX3NlY3Rpb24ubG9hZHJlZHVjZWQucmVnX2lkX2hpLAorCQkJICAicmVnX2lkX2hpICAgICAoTG9hZHJlZHVjZWQpIFJlZ2lzdGVyIE1hbnVmYWN0dXJlciBJRCBDb2RlLCBNU0IiKTsKKwkJUFJJTlRfTlhTKDEzNSwgc3BkLT5tb2Rfc2VjdGlvbi5sb2FkcmVkdWNlZC5yZWdfcmV2LAorCQkJICAicmVnX3JldiAgICAgICAoTG9hZHJlZHVjZWQpIFJlZ2lzdGVyIFJldmlzaW9uIE51bWJlciIpOworCQlQUklOVF9OWFMoMTM2LCBzcGQtPm1vZF9zZWN0aW9uLmxvYWRyZWR1Y2VkLnJlZ19tYXAsCisJCQkgICJyZWdfbWFwICAgICAgIChMb2FkcmVkdWNlZCkgQWRkcmVzcyBtYXBwaW5nIik7CisJCVBSSU5UX05YUygxMzcsIHNwZC0+bW9kX3NlY3Rpb24ubG9hZHJlZHVjZWQucmVnX2RydiwKKwkJCSAgInJlZ19kcnYgICAgICAgKExvYWRyZWR1Y2VkKSBSZWcgb3V0cHV0IGRyaXZlIHN0cmVuZ3RoIik7CisJCVBSSU5UX05YUygxMzgsIHNwZC0+bW9kX3NlY3Rpb24ubG9hZHJlZHVjZWQucmVnX2Rydl9jaywKKwkJCSAgInJlZ19kcnZfY2sgICAgKExvYWRyZWR1Y2VkKSBSZWcgb3V0cHV0IGRyaXZlIHN0cmVuZ3RoIGZvciBDSyIpOworCQlQUklOVF9OWFMoMTM5LCBzcGQtPm1vZF9zZWN0aW9uLmxvYWRyZWR1Y2VkLmRhdGFfYnVmX3JldiwKKwkJCSAgImRhdGFfYnVmX3JldiAgKExvYWRyZWR1Y2VkKSBEYXRhIEJ1ZmZlciBSZXZpc2lvbiBOdW1iZSIpOworCQlQUklOVF9OWFMoMTQwLCBzcGQtPm1vZF9zZWN0aW9uLmxvYWRyZWR1Y2VkLnZyZWZxZV9yMCwKKwkJCSAgInZyZWZxZV9yMCAgICAgKExvYWRyZWR1Y2VkKSBEUkFNIFZyZWZEUSBmb3IgUGFja2FnZSBSYW5rIDAiKTsKKwkJUFJJTlRfTlhTKDE0MSwgc3BkLT5tb2Rfc2VjdGlvbi5sb2FkcmVkdWNlZC52cmVmcWVfcjEsCisJCQkgICJ2cmVmcWVfcjEgICAgIChMb2FkcmVkdWNlZCkgRFJBTSBWcmVmRFEgZm9yIFBhY2thZ2UgUmFuayAxIik7CisJCVBSSU5UX05YUygxNDIsIHNwZC0+bW9kX3NlY3Rpb24ubG9hZHJlZHVjZWQudnJlZnFlX3IyLAorCQkJICAidnJlZnFlX3IyICAgICAoTG9hZHJlZHVjZWQpIERSQU0gVnJlZkRRIGZvciBQYWNrYWdlIFJhbmsgMiIpOworCQlQUklOVF9OWFMoMTQzLCBzcGQtPm1vZF9zZWN0aW9uLmxvYWRyZWR1Y2VkLnZyZWZxZV9yMywKKwkJCSAgInZyZWZxZV9yMyAgICAgKExvYWRyZWR1Y2VkKSBEUkFNIFZyZWZEUSBmb3IgUGFja2FnZSBSYW5rIDMiKTsKKwkJUFJJTlRfTlhTKDE0NCwgc3BkLT5tb2Rfc2VjdGlvbi5sb2FkcmVkdWNlZC5kYXRhX2ludGYsCisJCQkgICJkYXRhX2ludGYgICAgIChMb2FkcmVkdWNlZCkgRGF0YSBCdWZmZXIgVnJlZkRRIGZvciBEUkFNIEludGVyZmFjZSIpOworCQlQUklOVF9OWFMoMTQ1LCBzcGQtPm1vZF9zZWN0aW9uLmxvYWRyZWR1Y2VkLmRhdGFfZHJ2XzE4NjYsCisJCQkgICJkYXRhX2Rydl8xODY2IChMb2FkcmVkdWNlZCkgRGF0YSBCdWZmZXIgTURRIERyaXZlIFN0cmVuZ3RoIGFuZCBSVFQiKTsKKwkJUFJJTlRfTlhTKDE0Niwgc3BkLT5tb2Rfc2VjdGlvbi5sb2FkcmVkdWNlZC5kYXRhX2Rydl8yNDAwLAorCQkJICAiZGF0YV9kcnZfMjQwMCAoTG9hZHJlZHVjZWQpIERhdGEgQnVmZmVyIE1EUSBEcml2ZSBTdHJlbmd0aCBhbmQgUlRUIik7CisJCVBSSU5UX05YUygxNDcsIHNwZC0+bW9kX3NlY3Rpb24ubG9hZHJlZHVjZWQuZGF0YV9kcnZfMzIwMCwKKwkJCSAgImRhdGFfZHJ2XzMyMDAgKExvYWRyZWR1Y2VkKSBEYXRhIEJ1ZmZlciBNRFEgRHJpdmUgU3RyZW5ndGggYW5kIFJUVCIpOworCQlQUklOVF9OWFMoMTQ4LCBzcGQtPm1vZF9zZWN0aW9uLmxvYWRyZWR1Y2VkLmRyYW1fZHJ2LAorCQkJICAiZHJhbV9kcnYgICAgICAoTG9hZHJlZHVjZWQpIERSQU0gRHJpdmUgU3RyZW5ndGgiKTsKKwkJUFJJTlRfTlhTKDE0OSwgc3BkLT5tb2Rfc2VjdGlvbi5sb2FkcmVkdWNlZC5kcmFtX29kdF8xODY2LAorCQkJICAiZHJhbV9vZHRfMTg2NiAoTG9hZHJlZHVjZWQpIERSQU0gT0RUIChSVFRfV1IsIFJUVF9OT00pIik7CisJCVBSSU5UX05YUygxNTAsIHNwZC0+bW9kX3NlY3Rpb24ubG9hZHJlZHVjZWQuZHJhbV9vZHRfMjQwMCwKKwkJCSAgImRyYW1fb2R0XzI0MDAgKExvYWRyZWR1Y2VkKSBEUkFNIE9EVCAoUlRUX1dSLCBSVFRfTk9NKSIpOworCQlQUklOVF9OWFMoMTUxLCBzcGQtPm1vZF9zZWN0aW9uLmxvYWRyZWR1Y2VkLmRyYW1fb2R0XzMyMDAsCisJCQkgICJkcmFtX29kdF8zMjAwIChMb2FkcmVkdWNlZCkgRFJBTSBPRFQgKFJUVF9XUiwgUlRUX05PTSkiKTsKKwkJUFJJTlRfTlhTKDE1Miwgc3BkLT5tb2Rfc2VjdGlvbi5sb2FkcmVkdWNlZC5kcmFtX29kdF9wYXJrXzE4NjYsCisJCQkgICJkcmFtX29kdF9wYXJrXzE4NjYgKExvYWRyZWR1Y2VkKSBEUkFNIE9EVCAoUlRUX1BBUkspIik7CisJCVBSSU5UX05YUygxNTMsIHNwZC0+bW9kX3NlY3Rpb24ubG9hZHJlZHVjZWQuZHJhbV9vZHRfcGFya18yNDAwLAorCQkJICAiZHJhbV9vZHRfcGFya18yNDAwIChMb2FkcmVkdWNlZCkgRFJBTSBPRFQgKFJUVF9QQVJLKSIpOworCQlQUklOVF9OWFMoMTU0LCBzcGQtPm1vZF9zZWN0aW9uLmxvYWRyZWR1Y2VkLmRyYW1fb2R0X3BhcmtfMzIwMCwKKwkJCSAgImRyYW1fb2R0X3BhcmtfMzIwMCAoTG9hZHJlZHVjZWQpIERSQU0gT0RUIChSVFRfUEFSSykiKTsKKwkJUFJJTlRfTk5YWFMoMjU0LCAyNTUsIHNwZC0+bW9kX3NlY3Rpb24ubG9hZHJlZHVjZWQuY3JjWzBdLAorCQkJICAgIHNwZC0+bW9kX3NlY3Rpb24ubG9hZHJlZHVjZWQuY3JjWzFdLAorCQkJICAgICIgIE1vZHVsZSBDUkMiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTW9kdWxlLXNwZWNpZmljIFNlY3Rpb24sIFVuc3VwcG9ydGVkIE1vZHVsZSBUeXBlICovCisJCXByaW50ZigiJS0zZC0lM2Q6ICIsIDEyOCwgMjU1KTsKKworCQlmb3IgKGkgPSAxMjg7IGkgPD0gMjU1OyBpKyspCisJCQlwcmludGYoIiUwMngiLCBzcGQtPm1vZF9zZWN0aW9uLnVjW2kgLSA2MF0pOworCisJCWJyZWFrOworCX0KKworCS8qIFVuaXF1ZSBNb2R1bGUgSUQ6IEJ5dGVzIDMyMC0zODMgKi8KKwlQUklOVF9OWFMoMzIwLCBzcGQtPm1taWRfbHNiLCAiTW9kdWxlIE1mZ0lEIENvZGUgTFNCIC0gSkVQLTEwNiIpOworCVBSSU5UX05YUygzMjEsIHNwZC0+bW1pZF9tc2IsICJNb2R1bGUgTWZnSUQgQ29kZSBNU0IgLSBKRVAtMTA2Iik7CisJUFJJTlRfTlhTKDMyMiwgc3BkLT5tbG9jLCAgICAgIk1mZyBMb2NhdGlvbiIpOworCVBSSU5UX05OWFhTKDMyMywgMzI0LCBzcGQtPm1kYXRlWzBdLCBzcGQtPm1kYXRlWzFdLCAiTWZnIERhdGUiKTsKKworCXByaW50ZigiJS0zZC0lM2Q6ICIsIDMyNSwgMzI4KTsKKworCWZvciAoaSA9IDMyNTsgaSA8PSAzMjg7IGkrKykKKwkJcHJpbnRmKCIlMDJ4ICIsIHNwZC0+c2VybnVtW2kgLSAzMjVdKTsKKwlwcmludGYoIiAgIE1vZHVsZSBTZXJpYWwgTnVtYmVyXG4iKTsKKworCXByaW50ZigiJS0zZC0lM2Q6ICIsIDMyOSwgMzQ4KTsKKwlmb3IgKGkgPSAzMjk7IGkgPD0gMzQ4OyBpKyspCisJCXByaW50ZigiJTAyeCAiLCBzcGQtPm1wYXJ0W2kgLSAzMjldKTsKKwlwcmludGYoIiAgIE1mZydzIE1vZHVsZSBQYXJ0IE51bWJlclxuIik7CisKKwlQUklOVF9OWFMoMzQ5LCBzcGQtPm1yZXYsICJNb2R1bGUgUmV2aXNpb24gY29kZSIpOworCVBSSU5UX05YUygzNTAsIHNwZC0+ZG1pZF9sc2IsICJEUkFNIE1mZ0lEIENvZGUgTFNCIC0gSkVQLTEwNiIpOworCVBSSU5UX05YUygzNTEsIHNwZC0+ZG1pZF9tc2IsICJEUkFNIE1mZ0lEIENvZGUgTVNCIC0gSkVQLTEwNiIpOworCVBSSU5UX05YUygzNTIsIHNwZC0+c3RlcHBpbmcsICJEUkFNIHN0ZXBwaW5nIik7CisKKwlwcmludGYoIiUtM2QtJTNkOiAiLCAzNTMsIDM4MSk7CisJZm9yIChpID0gMzUzOyBpIDw9IDM4MTsgaSsrKQorCQlwcmludGYoIiUwMnggIiwgc3BkLT5tc2RbaSAtIDM1M10pOworCXByaW50ZigiICAgTWZnJ3MgU3BlY2lmaWMgRGF0YVxuIik7CiB9CiAjZW5kaWYKIApAQCAtMTI1Myw2ICsxNjIwLDggQEAKIAlkZHIyX3NwZF9kdW1wKHNwZCk7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpCiAJZGRyM19zcGRfZHVtcChzcGQpOworI2VsaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFI0KQorCWRkcjRfc3BkX2R1bXAoc3BkKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Rkci9mc2wvbGNfY29tbW9uX2RpbW1fcGFyYW1zLmMgYi9kcml2ZXJzL2Rkci9mc2wvbGNfY29tbW9uX2RpbW1fcGFyYW1zLmMKaW5kZXggNjEwMzE4YS4uMDVhMjRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kZHIvZnNsL2xjX2NvbW1vbl9kaW1tX3BhcmFtcy5jCisrKyBiL2RyaXZlcnMvZGRyL2ZzbC9sY19jb21tb25fZGltbV9wYXJhbXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDEyIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTExLDIwICsxMSwyMyBAQAogCiAjaW5jbHVkZSA8ZnNsX2Rkci5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIzKQorI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykgfHwgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFI0KQogc3RhdGljIHVuc2lnbmVkIGludAotY29tcHV0ZV9jYXNfbGF0ZW5jeV9kZHIzKGNvbnN0IGRpbW1fcGFyYW1zX3QgKmRpbW1fcGFyYW1zLAotCQkJIGNvbW1vbl90aW1pbmdfcGFyYW1zX3QgKm91dHBkaW1tLAotCQkJIHVuc2lnbmVkIGludCBudW1iZXJfb2ZfZGltbXMpCitjb21wdXRlX2Nhc19sYXRlbmN5KGNvbnN0IGRpbW1fcGFyYW1zX3QgKmRpbW1fcGFyYW1zLAorCQkgICAgY29tbW9uX3RpbWluZ19wYXJhbXNfdCAqb3V0cGRpbW0sCisJCSAgICB1bnNpZ25lZCBpbnQgbnVtYmVyX29mX2RpbW1zKQogewogCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCB0YWFtaW5fcHMgPSAwOwotCXVuc2lnbmVkIGludCB0Y2ttaW5feF9wcyA9IDA7CiAJdW5zaWduZWQgaW50IGNvbW1vbl9jYXNsYXQ7CiAJdW5zaWduZWQgaW50IGNhc2xhdF9hY3R1YWw7CiAJdW5zaWduZWQgaW50IHJldHJ5ID0gMTY7CiAJdW5zaWduZWQgaW50IHRtcDsKIAljb25zdCB1bnNpZ25lZCBpbnQgbWNsa19wcyA9IGdldF9tZW1vcnlfY2xrX3BlcmlvZF9wcygpOworI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjMKKwljb25zdCB1bnNpZ25lZCBpbnQgdGFhbWF4ID0gMjAwMDA7CisjZWxzZQorCWNvbnN0IHVuc2lnbmVkIGludCB0YWFtYXggPSAxODAwMDsKKyNlbmRpZgogCiAJLyogY29tcHV0ZSB0aGUgY29tbW9uIENBUyBsYXRlbmN5IHN1cHBvcnRlZCBiZXR3ZWVuIHNsb3RzICovCiAJdG1wID0gZGltbV9wYXJhbXNbMF0uY2FzbGF0X3g7CkBAIC0zNCwxOSArMzcsMjAgQEAKIAl9CiAJY29tbW9uX2Nhc2xhdCA9IHRtcDsKIAotCS8qIGNvbXB1dGUgdGhlIG1heCB0QUFtaW4gdENLbWluIGJldHdlZW4gc2xvdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX29mX2RpbW1zOyBpKyspIHsKLQkJdGFhbWluX3BzID0gbWF4KHRhYW1pbl9wcywgZGltbV9wYXJhbXNbaV0udGFhX3BzKTsKLQkJdGNrbWluX3hfcHMgPSBtYXgodGNrbWluX3hfcHMsIGRpbW1fcGFyYW1zW2ldLnRja21pbl94X3BzKTsKLQl9CiAJLyogdmFsaWRhdGUgaWYgdGhlIG1lbW9yeSBjbGsgaXMgaW4gdGhlIHJhbmdlIG9mIGRpbW1zICovCi0JaWYgKG1jbGtfcHMgPCB0Y2ttaW5feF9wcykgeworCWlmIChtY2xrX3BzIDwgb3V0cGRpbW0tPnRja21pbl94X3BzKSB7CiAJCXByaW50ZigiRERSIGNsb2NrIChNQ0xLIGN5Y2xlICV1IHBzKSBpcyBmYXN0ZXIgdGhhbiAiCiAJCQkidGhlIHNsb3dlc3QgRElNTShzKSAodENLbWluICV1IHBzKSBjYW4gc3VwcG9ydC5cbiIsCi0JCQltY2xrX3BzLCB0Y2ttaW5feF9wcyk7CisJCQltY2xrX3BzLCBvdXRwZGltbS0+dGNrbWluX3hfcHMpOwogCX0KKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9ERFI0CisJaWYgKG1jbGtfcHMgPiBvdXRwZGltbS0+dGNrbWF4X3BzKSB7CisJCXByaW50ZigiRERSIGNsb2NrIChNQ0xLIGN5Y2xlICV1IHBzKSBpcyBzbG93ZXIgdGhhbiBESU1NKHMpICh0Q0ttYXggJXUgcHMpIGNhbiBzdXBwb3J0LlxuIiwKKwkJICAgICAgIG1jbGtfcHMsIG91dHBkaW1tLT50Y2ttYXhfcHMpOworCX0KKyNlbmRpZgogCS8qIGRldGVybWluZSB0aGUgYWN1dGFsIGNhcyBsYXRlbmN5ICovCi0JY2FzbGF0X2FjdHVhbCA9ICh0YWFtaW5fcHMgKyBtY2xrX3BzIC0gMSkgLyBtY2xrX3BzOworCWNhc2xhdF9hY3R1YWwgPSAob3V0cGRpbW0tPnRhYW1pbl9wcyArIG1jbGtfcHMgLSAxKSAvIG1jbGtfcHM7CiAJLyogY2hlY2sgaWYgdGhlIGRpbW1zIHN1cHBvcnQgdGhlIENBUyBsYXRlbmN5ICovCiAJd2hpbGUgKCEoY29tbW9uX2Nhc2xhdCAmICgxIDw8IGNhc2xhdF9hY3R1YWwpKSAmJiByZXRyeSA+IDApIHsKIAkJY2FzbGF0X2FjdHVhbCsrOwpAQCAtNTQsMTYgKzU4LDE1MCBAQAogCX0KIAkvKiBvbmNlIHRoZSBjYWN1bGF0aW9uIG9mIGNhc2xhdF9hY3R1YWwgaXMgY29tcGxldGVkCiAJICogd2UgbXVzdCB2ZXJpZnkgdGhhdCB0aGlzIENBUyBsYXRlbmN5IHZhbHVlIGRvZXMgbm90Ci0JICogZXhjZWVkIHRBQW1heCwgd2hpY2ggaXMgMjAgbnMgZm9yIGFsbCBERFIzIHNwZWVkIGdyYWRlcworCSAqIGV4Y2VlZCB0QUFtYXgsIHdoaWNoIGlzIDIwIG5zIGZvciBhbGwgRERSMyBzcGVlZCBncmFkZXMsCisJICogMThucyBmb3IgYWxsIEREUjQgc3BlZWQgZ3JhZGVzLgogCSAqLwotCWlmIChjYXNsYXRfYWN0dWFsICogbWNsa19wcyA+IDIwMDAwKSB7CisJaWYgKGNhc2xhdF9hY3R1YWwgKiBtY2xrX3BzID4gdGFhbWF4KSB7CiAJCXByaW50ZigiVGhlIGNob29zZW4gY2FzIGxhdGVuY3kgJWQgaXMgdG9vIGxhcmdlXG4iLAogCQkJY2FzbGF0X2FjdHVhbCk7CiAJfQotCW91dHBkaW1tLT5sb3dlc3RfY29tbW9uX1NQRF9jYXNsYXQgPSBjYXNsYXRfYWN0dWFsOworCW91dHBkaW1tLT5sb3dlc3RfY29tbW9uX3NwZF9jYXNsYXQgPSBjYXNsYXRfYWN0dWFsOworCWRlYnVnKCJsb3dlc3RfY29tbW9uX3NwZF9jYXNsYXQgaXMgMHgleFxuIiwgY2FzbGF0X2FjdHVhbCk7CiAKIAlyZXR1cm4gMDsKIH0KKyNlbHNlCS8qIGZvciBERFIxIGFuZCBERFIyICovCitzdGF0aWMgdW5zaWduZWQgaW50Citjb21wdXRlX2Nhc19sYXRlbmN5KGNvbnN0IGRpbW1fcGFyYW1zX3QgKmRpbW1fcGFyYW1zLAorCQkgICAgY29tbW9uX3RpbWluZ19wYXJhbXNfdCAqb3V0cGRpbW0sCisJCSAgICB1bnNpZ25lZCBpbnQgbnVtYmVyX29mX2RpbW1zKQoreworCWludCBpOworCWNvbnN0IHVuc2lnbmVkIGludCBtY2xrX3BzID0gZ2V0X21lbW9yeV9jbGtfcGVyaW9kX3BzKCk7CisJdW5zaWduZWQgaW50IGxvd2VzdF9nb29kX2Nhc2xhdDsKKwl1bnNpZ25lZCBpbnQgbm90X29rOworCXVuc2lnbmVkIGludCB0ZW1wMSwgdGVtcDI7CisKKwlkZWJ1ZygidXNpbmcgbWNsa19wcyA9ICV1XG4iLCBtY2xrX3BzKTsKKwlpZiAobWNsa19wcyA+IG91dHBkaW1tLT50Y2ttYXhfcHMpIHsKKwkJcHJpbnRmKCJXYXJuaW5nOiBERFIgY2xvY2sgKCV1IHBzKSBpcyBzbG93ZXIgdGhhbiBESU1NKHMpICh0Q0ttYXggJXUgcHMpXG4iLAorCQkgICAgICAgbWNsa19wcywgb3V0cGRpbW0tPnRja21heF9wcyk7CisJfQorCisJLyoKKwkgKiBDb21wdXRlIGEgQ0FTIGxhdGVuY3kgc3VpdGFibGUgZm9yIGFsbCBESU1NcworCSAqCisJICogU3RyYXRlZ3kgZm9yIFNQRC1kZWZpbmVkIGxhdGVuY2llczogY29tcHV0ZSBvbmx5CisJICogQ0FTIGxhdGVuY3kgZGVmaW5lZCBieSBhbGwgRElNTXMuCisJICovCisKKwkvKgorCSAqIFN0ZXAgMTogZmluZCBDQVMgbGF0ZW5jeSBjb21tb24gdG8gYWxsIERJTU1zIHVzaW5nIGJpdHdpc2UKKwkgKiBvcGVyYXRpb24uCisJICovCisJdGVtcDEgPSAweEZGOworCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfb2ZfZGltbXM7IGkrKykgeworCQlpZiAoZGltbV9wYXJhbXNbaV0ubl9yYW5rcykgeworCQkJdGVtcDIgPSAwOworCQkJdGVtcDIgfD0gMSA8PCBkaW1tX3BhcmFtc1tpXS5jYXNsYXRfeDsKKwkJCXRlbXAyIHw9IDEgPDwgZGltbV9wYXJhbXNbaV0uY2FzbGF0X3hfbWludXNfMTsKKwkJCXRlbXAyIHw9IDEgPDwgZGltbV9wYXJhbXNbaV0uY2FzbGF0X3hfbWludXNfMjsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSB3YXMgbm8gZW50cnkgZm9yIFgtMiAoWC0xKSBpbgorCQkJICogdGhlIFNQRCwgdGhlbiBjYXNsYXRfeF9taW51c18yCisJCQkgKiAoY2FzbGF0X3hfbWludXNfMSkgY29udGFpbnMgZWl0aGVyIDI1NSBvcgorCQkJICogMHhGRkZGRkZGRiBiZWNhdXNlIHRoYXQncyB3aGF0IHRoZSBnbG9yaW91cworCQkJICogX19pbG9nMiBmdW5jdGlvbiByZXR1cm5zIGZvciBhbiBpbnB1dCBvZiAwLgorCQkJICogT24gMzItYml0IFBvd2VyUEMsIGxlZnQgc2hpZnQgY291bnRzIHdpdGggYml0CisJCQkgKiAyNiBzZXQgKHRoYXQgdGhlIHZhbHVlIG9mIDI1NSBvciAweEZGRkZGRkZGCisJCQkgKiB3aWxsIGhhdmUpLCBjYXVzZSB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgdG8KKwkJCSAqIGJlIDAuICBUaGF0IGlzIHdoeSB0aGlzIHdvcmtzLgorCQkJICovCisJCQl0ZW1wMSAmPSB0ZW1wMjsKKwkJfQorCX0KKworCS8qCisJICogU3RlcCAyOiBjaGVjayBlYWNoIGNvbW1vbiBDQVMgbGF0ZW5jeSBhZ2FpbnN0IHRDSyBvZiBlYWNoCisJICogRElNTSdzIFNQRC4KKwkgKi8KKwlsb3dlc3RfZ29vZF9jYXNsYXQgPSAwOworCXRlbXAyID0gMDsKKwl3aGlsZSAodGVtcDEpIHsKKwkJbm90X29rID0gMDsKKwkJdGVtcDIgPSAgX19pbG9nMih0ZW1wMSk7CisJCWRlYnVnKCJjaGVja2luZyBjb21tb24gY2FzbGF0ID0gJXVcbiIsIHRlbXAyKTsKKworCQkvKiBDaGVjayBpZiB0aGlzIENBUyBsYXRlbmN5IHdpbGwgd29yayBvbiBhbGwgRElNTXMgYXQgdENLLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX29mX2RpbW1zOyBpKyspIHsKKwkJCWlmICghZGltbV9wYXJhbXNbaV0ubl9yYW5rcykKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGRpbW1fcGFyYW1zW2ldLmNhc2xhdF94ID09IHRlbXAyKSB7CisJCQkJaWYgKG1jbGtfcHMgPj0gZGltbV9wYXJhbXNbaV0udGNrbWluX3hfcHMpIHsKKwkJCQkJZGVidWcoIkNMID0gJXUgb2sgb24gRElNTSAldSBhdCB0Q0s9JXUgcHMgd2l0aCB0Q0ttaW5fWF9wcyBvZiAldVxuIiwKKwkJCQkJICAgICAgdGVtcDIsIGksIG1jbGtfcHMsCisJCQkJCSAgICAgIGRpbW1fcGFyYW1zW2ldLnRja21pbl94X3BzKTsKKwkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJbm90X29rKys7CisJCQkJfQorCQkJfQorCisJCQlpZiAoZGltbV9wYXJhbXNbaV0uY2FzbGF0X3hfbWludXNfMSA9PSB0ZW1wMikgeworCQkJCXVuc2lnbmVkIGludCB0Y2ttaW5feF9taW51c18xX3BzCisJCQkJCT0gZGltbV9wYXJhbXNbaV0udGNrbWluX3hfbWludXNfMV9wczsKKwkJCQlpZiAobWNsa19wcyA+PSB0Y2ttaW5feF9taW51c18xX3BzKSB7CisJCQkJCWRlYnVnKCJDTCA9ICV1IG9rIG9uIERJTU0gJXUgYXQgdENLPSV1IHBzIHdpdGggdGNrbWluX3hfbWludXNfMV9wcyBvZiAldVxuIiwKKwkJCQkJICAgICAgdGVtcDIsIGksIG1jbGtfcHMsCisJCQkJCSAgICAgIHRja21pbl94X21pbnVzXzFfcHMpOworCQkJCQljb250aW51ZTsKKwkJCQl9IGVsc2UgeworCQkJCQlub3Rfb2srKzsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChkaW1tX3BhcmFtc1tpXS5jYXNsYXRfeF9taW51c18yID09IHRlbXAyKSB7CisJCQkJdW5zaWduZWQgaW50IHRja21pbl94X21pbnVzXzJfcHMKKwkJCQkJPSBkaW1tX3BhcmFtc1tpXS50Y2ttaW5feF9taW51c18yX3BzOworCQkJCWlmIChtY2xrX3BzID49IHRja21pbl94X21pbnVzXzJfcHMpIHsKKwkJCQkJZGVidWcoIkNMID0gJXUgb2sgb24gRElNTSAldSBhdCB0Q0s9JXUgcHMgd2l0aCB0Y2ttaW5feF9taW51c18yX3BzIG9mICV1XG4iLAorCQkJCQkgICAgICB0ZW1wMiwgaSwgbWNsa19wcywKKwkJCQkJICAgICAgdGNrbWluX3hfbWludXNfMl9wcyk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0gZWxzZSB7CisJCQkJCW5vdF9vaysrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmICghbm90X29rKQorCQkJbG93ZXN0X2dvb2RfY2FzbGF0ID0gdGVtcDI7CisKKwkJdGVtcDEgJj0gfigxIDw8IHRlbXAyKTsKKwl9CisKKwlkZWJ1ZygibG93ZXN0IGNvbW1vbiBTUEQtZGVmaW5lZCBDQVMgbGF0ZW5jeSA9ICV1XG4iLAorCSAgICAgIGxvd2VzdF9nb29kX2Nhc2xhdCk7CisJb3V0cGRpbW0tPmxvd2VzdF9jb21tb25fc3BkX2Nhc2xhdCA9IGxvd2VzdF9nb29kX2Nhc2xhdDsKKworCisJLyoKKwkgKiBDb21wdXRlIGEgY29tbW9uICdkZS1yYXRlZCcgQ0FTIGxhdGVuY3kuCisJICoKKwkgKiBUaGUgc3RyYXRlZ3kgaGVyZSBpcyB0byBmaW5kIHRoZSAqaGlnaGVzdCogZGVyZWF0ZWQgY2FzIGxhdGVuY3kKKwkgKiB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgYWxsIG9mIHRoZSBESU1NcyB3aWxsIHN1cHBvcnQgYSBkZXJlYXRlZAorCSAqIENBUyBsYXRlbmN5IGhpZ2hlciB0aGFuIG9yIGVxdWFsIHRvIHRoZWlyIGxvd2VzdCBkZXJlYXRlZCB2YWx1ZS4KKwkgKi8KKwl0ZW1wMSA9IDA7CisJZm9yIChpID0gMDsgaSA8IG51bWJlcl9vZl9kaW1tczsgaSsrKQorCQl0ZW1wMSA9IG1heCh0ZW1wMSwgZGltbV9wYXJhbXNbaV0uY2FzbGF0X2xvd2VzdF9kZXJhdGVkKTsKKworCW91dHBkaW1tLT5oaWdoZXN0X2NvbW1vbl9kZXJhdGVkX2Nhc2xhdCA9IHRlbXAxOworCWRlYnVnKCJoaWdoZXN0IGNvbW1vbiBkZXJlYXRlZCBDQVMgbGF0ZW5jeSA9ICV1XG4iLCB0ZW1wMSk7CisKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCiAvKgpAQCAtODIsMzQgKzIyMCw0MCBAQAogCiAJdW5zaWduZWQgaW50IHRja21pbl94X3BzID0gMDsKIAl1bnNpZ25lZCBpbnQgdGNrbWF4X3BzID0gMHhGRkZGRkZGRjsKLQl1bnNpZ25lZCBpbnQgdGNrbWF4X21heF9wcyA9IDA7CiAJdW5zaWduZWQgaW50IHRyY2RfcHMgPSAwOwogCXVuc2lnbmVkIGludCB0cnBfcHMgPSAwOwogCXVuc2lnbmVkIGludCB0cmFzX3BzID0gMDsKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpIHx8IGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSNCkKKwl1bnNpZ25lZCBpbnQgdGFhbWluX3BzID0gMDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwl1bnNpZ25lZCBpbnQgdHdyX3BzID0gMTUwMDA7CisJdW5zaWduZWQgaW50IHRyZmMxX3BzID0gMDsKKwl1bnNpZ25lZCBpbnQgdHJmYzJfcHMgPSAwOworCXVuc2lnbmVkIGludCB0cmZjNF9wcyA9IDA7CisJdW5zaWduZWQgaW50IHRycmRzX3BzID0gMDsKKwl1bnNpZ25lZCBpbnQgdHJyZGxfcHMgPSAwOworCXVuc2lnbmVkIGludCB0Y2NkbF9wcyA9IDA7CisjZWxzZQogCXVuc2lnbmVkIGludCB0d3JfcHMgPSAwOwogCXVuc2lnbmVkIGludCB0d3RyX3BzID0gMDsKIAl1bnNpZ25lZCBpbnQgdHJmY19wcyA9IDA7CiAJdW5zaWduZWQgaW50IHRycmRfcHMgPSAwOworCXVuc2lnbmVkIGludCB0cnRwX3BzID0gMDsKKyNlbmRpZgogCXVuc2lnbmVkIGludCB0cmNfcHMgPSAwOwogCXVuc2lnbmVkIGludCByZWZyZXNoX3JhdGVfcHMgPSAwOwogCXVuc2lnbmVkIGludCBleHRlbmRlZF9vcF9zcnQgPSAxOworI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMSkgfHwgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIyKQogCXVuc2lnbmVkIGludCB0aXNfcHMgPSAwOwogCXVuc2lnbmVkIGludCB0aWhfcHMgPSAwOwogCXVuc2lnbmVkIGludCB0ZHNfcHMgPSAwOwogCXVuc2lnbmVkIGludCB0ZGhfcHMgPSAwOwotCXVuc2lnbmVkIGludCB0cnRwX3BzID0gMDsKIAl1bnNpZ25lZCBpbnQgdGRxc3FfbWF4X3BzID0gMDsKIAl1bnNpZ25lZCBpbnQgdHFoc19wcyA9IDA7Ci0KKyNlbmRpZgogCXVuc2lnbmVkIGludCB0ZW1wMSwgdGVtcDI7CiAJdW5zaWduZWQgaW50IGFkZGl0aXZlX2xhdGVuY3kgPSAwOwotI2lmICFkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpCi0JY29uc3QgdW5zaWduZWQgaW50IG1jbGtfcHMgPSBnZXRfbWVtb3J5X2Nsa19wZXJpb2RfcHMoKTsKLQl1bnNpZ25lZCBpbnQgbG93ZXN0X2dvb2RfY2FzbGF0OwotCXVuc2lnbmVkIGludCBub3Rfb2s7Ci0KLQlkZWJ1ZygidXNpbmcgbWNsa19wcyA9ICV1XG4iLCBtY2xrX3BzKTsKLSNlbmRpZgogCiAJdGVtcDEgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfb2ZfZGltbXM7IGkrKykgewpAQCAtMTQ2LDMxICsyOTAsMzQgQEAKIAkJICogaS5lLiwgdGhpcyBpcyB0aGUgc2xvd2VzdCB0aGUgd2hvbGUgc3lzdGVtIGNhbiBnby4KIAkJICovCiAJCXRja21heF9wcyA9IG1pbih0Y2ttYXhfcHMsIGRpbW1fcGFyYW1zW2ldLnRja21heF9wcyk7Ci0KLQkJLyogRWl0aGVyIGZpbmQgbWF4aW11bSB2YWx1ZSB0byBkZXRlcm1pbmUgc2xvd2VzdAotCQkgKiBzcGVlZCwgZGVsYXksIHRpbWUsIHBlcmlvZCwgZXRjICovCisjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIzKSB8fCBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjQpCisJCXRhYW1pbl9wcyA9IG1heCh0YWFtaW5fcHMsIGRpbW1fcGFyYW1zW2ldLnRhYV9wcyk7CisjZW5kaWYKIAkJdGNrbWluX3hfcHMgPSBtYXgodGNrbWluX3hfcHMsIGRpbW1fcGFyYW1zW2ldLnRja21pbl94X3BzKTsKLQkJdGNrbWF4X21heF9wcyA9IG1heCh0Y2ttYXhfbWF4X3BzLCBkaW1tX3BhcmFtc1tpXS50Y2ttYXhfcHMpOwogCQl0cmNkX3BzID0gbWF4KHRyY2RfcHMsIGRpbW1fcGFyYW1zW2ldLnRyY2RfcHMpOwogCQl0cnBfcHMgPSBtYXgodHJwX3BzLCBkaW1tX3BhcmFtc1tpXS50cnBfcHMpOwogCQl0cmFzX3BzID0gbWF4KHRyYXNfcHMsIGRpbW1fcGFyYW1zW2ldLnRyYXNfcHMpOworI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwkJdHJmYzFfcHMgPSBtYXgodHJmYzFfcHMsIGRpbW1fcGFyYW1zW2ldLnRyZmMxX3BzKTsKKwkJdHJmYzJfcHMgPSBtYXgodHJmYzJfcHMsIGRpbW1fcGFyYW1zW2ldLnRyZmMyX3BzKTsKKwkJdHJmYzRfcHMgPSBtYXgodHJmYzRfcHMsIGRpbW1fcGFyYW1zW2ldLnRyZmM0X3BzKTsKKwkJdHJyZHNfcHMgPSBtYXgodHJyZHNfcHMsIGRpbW1fcGFyYW1zW2ldLnRycmRzX3BzKTsKKwkJdHJyZGxfcHMgPSBtYXgodHJyZGxfcHMsIGRpbW1fcGFyYW1zW2ldLnRycmRsX3BzKTsKKwkJdGNjZGxfcHMgPSBtYXgodGNjZGxfcHMsIGRpbW1fcGFyYW1zW2ldLnRjY2RsX3BzKTsKKyNlbHNlCiAJCXR3cl9wcyA9IG1heCh0d3JfcHMsIGRpbW1fcGFyYW1zW2ldLnR3cl9wcyk7CiAJCXR3dHJfcHMgPSBtYXgodHd0cl9wcywgZGltbV9wYXJhbXNbaV0udHd0cl9wcyk7CiAJCXRyZmNfcHMgPSBtYXgodHJmY19wcywgZGltbV9wYXJhbXNbaV0udHJmY19wcyk7CiAJCXRycmRfcHMgPSBtYXgodHJyZF9wcywgZGltbV9wYXJhbXNbaV0udHJyZF9wcyk7CisJCXRydHBfcHMgPSBtYXgodHJ0cF9wcywgZGltbV9wYXJhbXNbaV0udHJ0cF9wcyk7CisjZW5kaWYKIAkJdHJjX3BzID0gbWF4KHRyY19wcywgZGltbV9wYXJhbXNbaV0udHJjX3BzKTsKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjEpIHx8IGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMikKIAkJdGlzX3BzID0gbWF4KHRpc19wcywgZGltbV9wYXJhbXNbaV0udGlzX3BzKTsKIAkJdGloX3BzID0gbWF4KHRpaF9wcywgZGltbV9wYXJhbXNbaV0udGloX3BzKTsKIAkJdGRzX3BzID0gbWF4KHRkc19wcywgZGltbV9wYXJhbXNbaV0udGRzX3BzKTsKIAkJdGRoX3BzID0gbWF4KHRkaF9wcywgZGltbV9wYXJhbXNbaV0udGRoX3BzKTsKLQkJdHJ0cF9wcyA9IG1heCh0cnRwX3BzLCBkaW1tX3BhcmFtc1tpXS50cnRwX3BzKTsKIAkJdHFoc19wcyA9IG1heCh0cWhzX3BzLCBkaW1tX3BhcmFtc1tpXS50cWhzX3BzKTsKLQkJcmVmcmVzaF9yYXRlX3BzID0gbWF4KHJlZnJlc2hfcmF0ZV9wcywKLQkJCQkgICAgICBkaW1tX3BhcmFtc1tpXS5yZWZyZXNoX3JhdGVfcHMpOwotCQkvKiBleHRlbmRlZF9vcF9zcnQgaXMgZWl0aGVyIDAgb3IgMSwgMCBoYXZpbmcgcHJpb3JpdHkgKi8KLQkJZXh0ZW5kZWRfb3Bfc3J0ID0gbWluKGV4dGVuZGVkX29wX3NydCwKLQkJCQkgICAgICBkaW1tX3BhcmFtc1tpXS5leHRlbmRlZF9vcF9zcnQpOwotCiAJCS8qCiAJCSAqIEZpbmQgbWF4aW11bSB0ZHFzcV9tYXhfcHMgdG8gZmluZCBzbG93ZXN0LgogCQkgKgpAQCAtMTc4LDYgKzMyNSwxMiBAQAogCQkgKiBzdHJhdGVneSBmb3IgdGhpcyBwYXJhbWV0ZXI/CiAJCSAqLwogCQl0ZHFzcV9tYXhfcHMgPSBtYXgodGRxc3FfbWF4X3BzLCBkaW1tX3BhcmFtc1tpXS50ZHFzcV9tYXhfcHMpOworI2VuZGlmCisJCXJlZnJlc2hfcmF0ZV9wcyA9IG1heChyZWZyZXNoX3JhdGVfcHMsCisJCQkJICAgICAgZGltbV9wYXJhbXNbaV0ucmVmcmVzaF9yYXRlX3BzKTsKKwkJLyogZXh0ZW5kZWRfb3Bfc3J0IGlzIGVpdGhlciAwIG9yIDEsIDAgaGF2aW5nIHByaW9yaXR5ICovCisJCWV4dGVuZGVkX29wX3NydCA9IG1pbihleHRlbmRlZF9vcF9zcnQsCisJCQkJICAgICAgZGltbV9wYXJhbXNbaV0uZXh0ZW5kZWRfb3Bfc3J0KTsKIAl9CiAKIAlvdXRwZGltbS0+bmRpbW1zX3ByZXNlbnQgPSBudW1iZXJfb2ZfZGltbXMgLSB0ZW1wMTsKQEAgLTE4OSwyNCArMzQyLDM3IEBACiAKIAlvdXRwZGltbS0+dGNrbWluX3hfcHMgPSB0Y2ttaW5feF9wczsKIAlvdXRwZGltbS0+dGNrbWF4X3BzID0gdGNrbWF4X3BzOwotCW91dHBkaW1tLT50Y2ttYXhfbWF4X3BzID0gdGNrbWF4X21heF9wczsKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpIHx8IGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSNCkKKwlvdXRwZGltbS0+dGFhbWluX3BzID0gdGFhbWluX3BzOworI2VuZGlmCiAJb3V0cGRpbW0tPnRyY2RfcHMgPSB0cmNkX3BzOwogCW91dHBkaW1tLT50cnBfcHMgPSB0cnBfcHM7CiAJb3V0cGRpbW0tPnRyYXNfcHMgPSB0cmFzX3BzOwotCW91dHBkaW1tLT50d3JfcHMgPSB0d3JfcHM7CisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorCW91dHBkaW1tLT50cmZjMV9wcyA9IHRyZmMxX3BzOworCW91dHBkaW1tLT50cmZjMl9wcyA9IHRyZmMyX3BzOworCW91dHBkaW1tLT50cmZjNF9wcyA9IHRyZmM0X3BzOworCW91dHBkaW1tLT50cnJkc19wcyA9IHRycmRzX3BzOworCW91dHBkaW1tLT50cnJkbF9wcyA9IHRycmRsX3BzOworCW91dHBkaW1tLT50Y2NkbF9wcyA9IHRjY2RsX3BzOworI2Vsc2UKIAlvdXRwZGltbS0+dHd0cl9wcyA9IHR3dHJfcHM7CiAJb3V0cGRpbW0tPnRyZmNfcHMgPSB0cmZjX3BzOwogCW91dHBkaW1tLT50cnJkX3BzID0gdHJyZF9wczsKKwlvdXRwZGltbS0+dHJ0cF9wcyA9IHRydHBfcHM7CisjZW5kaWYKKwlvdXRwZGltbS0+dHdyX3BzID0gdHdyX3BzOwogCW91dHBkaW1tLT50cmNfcHMgPSB0cmNfcHM7CiAJb3V0cGRpbW0tPnJlZnJlc2hfcmF0ZV9wcyA9IHJlZnJlc2hfcmF0ZV9wczsKIAlvdXRwZGltbS0+ZXh0ZW5kZWRfb3Bfc3J0ID0gZXh0ZW5kZWRfb3Bfc3J0OworI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMSkgfHwgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIyKQogCW91dHBkaW1tLT50aXNfcHMgPSB0aXNfcHM7CiAJb3V0cGRpbW0tPnRpaF9wcyA9IHRpaF9wczsKIAlvdXRwZGltbS0+dGRzX3BzID0gdGRzX3BzOwogCW91dHBkaW1tLT50ZGhfcHMgPSB0ZGhfcHM7Ci0Jb3V0cGRpbW0tPnRydHBfcHMgPSB0cnRwX3BzOwogCW91dHBkaW1tLT50ZHFzcV9tYXhfcHMgPSB0ZHFzcV9tYXhfcHM7CiAJb3V0cGRpbW0tPnRxaHNfcHMgPSB0cWhzX3BzOworI2VuZGlmCiAKIAkvKiBEZXRlcm1pbmUgY29tbW9uIGJ1cnN0IGxlbmd0aCBmb3IgYWxsIERJTU1zLiAqLwogCXRlbXAxID0gMHhmZjsKQEAgLTI2NSwxMjggKzQzMSw5IEBACiAJaWYgKHRlbXAxICE9IDApCiAJCXByaW50ZigiRVJST1I6IE1peCBkaWZmZXJlbnQgUkRJTU0gZGV0ZWN0ZWQhXG4iKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykKLQlpZiAoY29tcHV0ZV9jYXNfbGF0ZW5jeV9kZHIzKGRpbW1fcGFyYW1zLCBvdXRwZGltbSwgbnVtYmVyX29mX2RpbW1zKSkKKwkvKiBjYWxjdWxhdGUgY2FzIGxhdGVuY3kgZm9yIGFsbCBERFIgdHlwZXMgKi8KKwlpZiAoY29tcHV0ZV9jYXNfbGF0ZW5jeShkaW1tX3BhcmFtcywgb3V0cGRpbW0sIG51bWJlcl9vZl9kaW1tcykpCiAJCXJldHVybiAxOwotI2Vsc2UKLQkvKgotCSAqIENvbXB1dGUgYSBDQVMgbGF0ZW5jeSBzdWl0YWJsZSBmb3IgYWxsIERJTU1zCi0JICoKLQkgKiBTdHJhdGVneSBmb3IgU1BELWRlZmluZWQgbGF0ZW5jaWVzOiBjb21wdXRlIG9ubHkKLQkgKiBDQVMgbGF0ZW5jeSBkZWZpbmVkIGJ5IGFsbCBESU1Ncy4KLQkgKi8KLQotCS8qCi0JICogU3RlcCAxOiBmaW5kIENBUyBsYXRlbmN5IGNvbW1vbiB0byBhbGwgRElNTXMgdXNpbmcgYml0d2lzZQotCSAqIG9wZXJhdGlvbi4KLQkgKi8KLQl0ZW1wMSA9IDB4RkY7Ci0JZm9yIChpID0gMDsgaSA8IG51bWJlcl9vZl9kaW1tczsgaSsrKSB7Ci0JCWlmIChkaW1tX3BhcmFtc1tpXS5uX3JhbmtzKSB7Ci0JCQl0ZW1wMiA9IDA7Ci0JCQl0ZW1wMiB8PSAxIDw8IGRpbW1fcGFyYW1zW2ldLmNhc2xhdF94OwotCQkJdGVtcDIgfD0gMSA8PCBkaW1tX3BhcmFtc1tpXS5jYXNsYXRfeF9taW51c18xOwotCQkJdGVtcDIgfD0gMSA8PCBkaW1tX3BhcmFtc1tpXS5jYXNsYXRfeF9taW51c18yOwotCQkJLyoKLQkJCSAqIEZJWE1FOiBJZiB0aGVyZSB3YXMgbm8gZW50cnkgZm9yIFgtMiAoWC0xKSBpbgotCQkJICogdGhlIFNQRCwgdGhlbiBjYXNsYXRfeF9taW51c18yCi0JCQkgKiAoY2FzbGF0X3hfbWludXNfMSkgY29udGFpbnMgZWl0aGVyIDI1NSBvcgotCQkJICogMHhGRkZGRkZGRiBiZWNhdXNlIHRoYXQncyB3aGF0IHRoZSBnbG9yaW91cwotCQkJICogX19pbG9nMiBmdW5jdGlvbiByZXR1cm5zIGZvciBhbiBpbnB1dCBvZiAwLgotCQkJICogT24gMzItYml0IFBvd2VyUEMsIGxlZnQgc2hpZnQgY291bnRzIHdpdGggYml0Ci0JCQkgKiAyNiBzZXQgKHRoYXQgdGhlIHZhbHVlIG9mIDI1NSBvciAweEZGRkZGRkZGCi0JCQkgKiB3aWxsIGhhdmUpLCBjYXVzZSB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgdG8KLQkJCSAqIGJlIDAuICBUaGF0IGlzIHdoeSB0aGlzIHdvcmtzLgotCQkJICovCi0JCQl0ZW1wMSAmPSB0ZW1wMjsKLQkJfQotCX0KLQotCS8qCi0JICogU3RlcCAyOiBjaGVjayBlYWNoIGNvbW1vbiBDQVMgbGF0ZW5jeSBhZ2FpbnN0IHRDSyBvZiBlYWNoCi0JICogRElNTSdzIFNQRC4KLQkgKi8KLQlsb3dlc3RfZ29vZF9jYXNsYXQgPSAwOwotCXRlbXAyID0gMDsKLQl3aGlsZSAodGVtcDEpIHsKLQkJbm90X29rID0gMDsKLQkJdGVtcDIgPSAgX19pbG9nMih0ZW1wMSk7Ci0JCWRlYnVnKCJjaGVja2luZyBjb21tb24gY2FzbGF0ID0gJXVcbiIsIHRlbXAyKTsKLQotCQkvKiBDaGVjayBpZiB0aGlzIENBUyBsYXRlbmN5IHdpbGwgd29yayBvbiBhbGwgRElNTXMgYXQgdENLLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX29mX2RpbW1zOyBpKyspIHsKLQkJCWlmICghZGltbV9wYXJhbXNbaV0ubl9yYW5rcykgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGRpbW1fcGFyYW1zW2ldLmNhc2xhdF94ID09IHRlbXAyKSB7Ci0JCQkJaWYgKG1jbGtfcHMgPj0gZGltbV9wYXJhbXNbaV0udGNrbWluX3hfcHMpIHsKLQkJCQkJZGVidWcoIkNMID0gJXUgb2sgb24gRElNTSAldSBhdCB0Q0s9JXUiCi0JCQkJCSAgICAiIHBzIHdpdGggaXRzIHRDS21pbl9YX3BzIG9mICV1XG4iLAotCQkJCQkgICAgICAgdGVtcDIsIGksIG1jbGtfcHMsCi0JCQkJCSAgICAgICBkaW1tX3BhcmFtc1tpXS50Y2ttaW5feF9wcyk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW5vdF9vaysrOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGRpbW1fcGFyYW1zW2ldLmNhc2xhdF94X21pbnVzXzEgPT0gdGVtcDIpIHsKLQkJCQl1bnNpZ25lZCBpbnQgdGNrbWluX3hfbWludXNfMV9wcwotCQkJCQk9IGRpbW1fcGFyYW1zW2ldLnRja21pbl94X21pbnVzXzFfcHM7Ci0JCQkJaWYgKG1jbGtfcHMgPj0gdGNrbWluX3hfbWludXNfMV9wcykgewotCQkJCQlkZWJ1ZygiQ0wgPSAldSBvayBvbiBESU1NICV1IGF0ICIKLQkJCQkJCSJ0Q0s9JXUgcHMgd2l0aCBpdHMgIgotCQkJCQkJInRja21pbl94X21pbnVzXzFfcHMgb2YgJXVcbiIsCi0JCQkJCSAgICAgICB0ZW1wMiwgaSwgbWNsa19wcywKLQkJCQkJICAgICAgIHRja21pbl94X21pbnVzXzFfcHMpOwotCQkJCQljb250aW51ZTsKLQkJCQl9IGVsc2UgewotCQkJCQlub3Rfb2srKzsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChkaW1tX3BhcmFtc1tpXS5jYXNsYXRfeF9taW51c18yID09IHRlbXAyKSB7Ci0JCQkJdW5zaWduZWQgaW50IHRja21pbl94X21pbnVzXzJfcHMKLQkJCQkJPSBkaW1tX3BhcmFtc1tpXS50Y2ttaW5feF9taW51c18yX3BzOwotCQkJCWlmIChtY2xrX3BzID49IHRja21pbl94X21pbnVzXzJfcHMpIHsKLQkJCQkJZGVidWcoIkNMID0gJXUgb2sgb24gRElNTSAldSBhdCAiCi0JCQkJCQkidENLPSV1IHBzIHdpdGggaXRzICIKLQkJCQkJCSJ0Y2ttaW5feF9taW51c18yX3BzIG9mICV1XG4iLAotCQkJCQkgICAgICAgdGVtcDIsIGksIG1jbGtfcHMsCi0JCQkJCSAgICAgICB0Y2ttaW5feF9taW51c18yX3BzKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbm90X29rKys7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJaWYgKCFub3Rfb2spIHsKLQkJCWxvd2VzdF9nb29kX2Nhc2xhdCA9IHRlbXAyOwotCQl9Ci0KLQkJdGVtcDEgJj0gfigxIDw8IHRlbXAyKTsKLQl9Ci0KLQlkZWJ1ZygibG93ZXN0IGNvbW1vbiBTUEQtZGVmaW5lZCBDQVMgbGF0ZW5jeSA9ICV1XG4iLAotCSAgICAgICBsb3dlc3RfZ29vZF9jYXNsYXQpOwotCW91dHBkaW1tLT5sb3dlc3RfY29tbW9uX1NQRF9jYXNsYXQgPSBsb3dlc3RfZ29vZF9jYXNsYXQ7Ci0KLQotCS8qCi0JICogQ29tcHV0ZSBhIGNvbW1vbiAnZGUtcmF0ZWQnIENBUyBsYXRlbmN5LgotCSAqCi0JICogVGhlIHN0cmF0ZWd5IGhlcmUgaXMgdG8gZmluZCB0aGUgKmhpZ2hlc3QqIGRlcmVhdGVkIGNhcyBsYXRlbmN5Ci0JICogd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IGFsbCBvZiB0aGUgRElNTXMgd2lsbCBzdXBwb3J0IGEgZGVyZWF0ZWQKLQkgKiBDQVMgbGF0ZW5jeSBoaWdoZXIgdGhhbiBvciBlcXVhbCB0byB0aGVpciBsb3dlc3QgZGVyZWF0ZWQgdmFsdWUuCi0JICovCi0JdGVtcDEgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfb2ZfZGltbXM7IGkrKykgewotCQl0ZW1wMSA9IG1heCh0ZW1wMSwgZGltbV9wYXJhbXNbaV0uY2FzbGF0X2xvd2VzdF9kZXJhdGVkKTsKLQl9Ci0Jb3V0cGRpbW0tPmhpZ2hlc3RfY29tbW9uX2RlcmF0ZWRfY2FzbGF0ID0gdGVtcDE7Ci0JZGVidWcoImhpZ2hlc3QgY29tbW9uIGRlcmVhdGVkIENBUyBsYXRlbmN5ID0gJXVcbiIsIHRlbXAxKTsKLSNlbmRpZiAvKiAjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIzKSAqLwogCiAJLyogRGV0ZXJtaW5lIGlmIGFsbCBESU1NcyBFQ0MgY2FwYWJsZS4gKi8KIAl0ZW1wMSA9IDE7CkBAIC00MDQsMTQgKzQ1MSw2IEBACiAJfQogCW91dHBkaW1tLT5hbGxfZGltbXNfZWNjX2NhcGFibGUgPSB0ZW1wMTsKIAotI2lmbmRlZiBDT05GSUdfU1lTX0ZTTF9ERFIzCi0JLyogRklYTUU6IG1vdmUgdG8gc29tZXdoZXJlIGVsc2UgdG8gdmFsaWRhdGUuICovCi0JaWYgKG1jbGtfcHMgPiB0Y2ttYXhfbWF4X3BzKSB7Ci0JCXByaW50ZigiV2FybmluZzogc29tZSBvZiB0aGUgaW5zdGFsbGVkIERJTU1zICIKLQkJCQkiY2FuIG5vdCBvcGVyYXRlIHRoaXMgc2xvd2x5LlxuIik7Ci0JCXJldHVybiAxOwotCX0KLSNlbmRpZgogCS8qCiAJICogQ29tcHV0ZSBhZGRpdGl2ZSBsYXRlbmN5LgogCSAqCkBAIC00NjgsMjcgKzUwNywyMCBAQAogCWFkZGl0aXZlX2xhdGVuY3kgPSAwOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIyKQotCWlmIChsb3dlc3RfZ29vZF9jYXNsYXQgPCA0KSB7Ci0JCWFkZGl0aXZlX2xhdGVuY3kgPSAocGljb3NfdG9fbWNsayh0cmNkX3BzKSA+IGxvd2VzdF9nb29kX2Nhc2xhdCkKLQkJCT8gcGljb3NfdG9fbWNsayh0cmNkX3BzKSAtIGxvd2VzdF9nb29kX2Nhc2xhdCA6IDA7CisJaWYgKChvdXRwZGltbS0+bG93ZXN0X2NvbW1vbl9zcGRfY2FzbGF0IDwgNCkgJiYKKwkgICAgKHBpY29zX3RvX21jbGsodHJjZF9wcykgPiBvdXRwZGltbS0+bG93ZXN0X2NvbW1vbl9zcGRfY2FzbGF0KSkgeworCQlhZGRpdGl2ZV9sYXRlbmN5ID0gcGljb3NfdG9fbWNsayh0cmNkX3BzKSAtCisJCQkJICAgb3V0cGRpbW0tPmxvd2VzdF9jb21tb25fc3BkX2Nhc2xhdDsKIAkJaWYgKG1jbGtfdG9fcGljb3MoYWRkaXRpdmVfbGF0ZW5jeSkgPiB0cmNkX3BzKSB7CiAJCQlhZGRpdGl2ZV9sYXRlbmN5ID0gcGljb3NfdG9fbWNsayh0cmNkX3BzKTsKIAkJCWRlYnVnKCJzZXR0aW5nIGFkZGl0aXZlX2xhdGVuY3kgdG8gJXUgYmVjYXVzZSBpdCB3YXMgIgogCQkJCSIgZ3JlYXRlciB0aGFuIHRSQ0RfcHNcbiIsIGFkZGl0aXZlX2xhdGVuY3kpOwogCQl9CiAJfQotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpCi0JLyoKLQkgKiBUaGUgc3lzdGVtIHdpbGwgbm90IHVzZSB0aGUgZ2xvYmFsIGF1dG8tcHJlY2hhcmdlIG1vZGUuCi0JICogSG93ZXZlciwgaXQgdXNlcyB0aGUgcGFnZSBtb2RlLCBzbyB3ZSBzZXQgQUw9MAotCSAqLwotCWFkZGl0aXZlX2xhdGVuY3kgPSAwOwogI2VuZGlmCiAKIAkvKgogCSAqIFZhbGlkYXRlIGFkZGl0aXZlIGxhdGVuY3kKLQkgKiBGSVhNRTogbW92ZSB0byBzb21ld2hlcmUgZWxzZSB0byB2YWxpZGF0ZQogCSAqCiAJICogQUwgPD0gdFJDRChtaW4pCiAJICovCkBAIC01MTYsMTAgKzU0OCwxOSBAQAogCWRlYnVnKCJ0cmNkX3BzICAgPSAldVxuIiwgb3V0cGRpbW0tPnRyY2RfcHMpOwogCWRlYnVnKCJ0cnBfcHMgICAgPSAldVxuIiwgb3V0cGRpbW0tPnRycF9wcyk7CiAJZGVidWcoInRyYXNfcHMgICA9ICV1XG4iLCBvdXRwZGltbS0+dHJhc19wcyk7Ci0JZGVidWcoInR3cl9wcyAgICA9ICV1XG4iLCBvdXRwZGltbS0+dHdyX3BzKTsKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9ERFI0CisJZGVidWcoInRyZmMxX3BzID0gJXVcbiIsIHRyZmMxX3BzKTsKKwlkZWJ1ZygidHJmYzJfcHMgPSAldVxuIiwgdHJmYzJfcHMpOworCWRlYnVnKCJ0cmZjNF9wcyA9ICV1XG4iLCB0cmZjNF9wcyk7CisJZGVidWcoInRycmRzX3BzID0gJXVcbiIsIHRycmRzX3BzKTsKKwlkZWJ1ZygidHJyZGxfcHMgPSAldVxuIiwgdHJyZGxfcHMpOworCWRlYnVnKCJ0Y2NkbF9wcyA9ICV1XG4iLCB0Y2NkbF9wcyk7CisjZWxzZQogCWRlYnVnKCJ0d3RyX3BzICAgPSAldVxuIiwgb3V0cGRpbW0tPnR3dHJfcHMpOwogCWRlYnVnKCJ0cmZjX3BzICAgPSAldVxuIiwgb3V0cGRpbW0tPnRyZmNfcHMpOwogCWRlYnVnKCJ0cnJkX3BzICAgPSAldVxuIiwgb3V0cGRpbW0tPnRycmRfcHMpOworI2VuZGlmCisJZGVidWcoInR3cl9wcyAgICA9ICV1XG4iLCBvdXRwZGltbS0+dHdyX3BzKTsKIAlkZWJ1ZygidHJjX3BzICAgID0gJXVcbiIsIG91dHBkaW1tLT50cmNfcHMpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Rkci9mc2wvbWFpbi5jIGIvZHJpdmVycy9kZHIvZnNsL21haW4uYwppbmRleCBkNjJjYTYzLi41ZTAwMWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Rkci9mc2wvbWFpbi5jCisrKyBiL2RyaXZlcnMvZGRyL2ZzbC9tYWluLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDgtMjAxMiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMDgtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC04MSwxNCArODEsMzcgQEAKIAogI2VuZGlmCiAKKyNkZWZpbmUgU1BEX1NQQTBfQUREUkVTUwkweDM2CisjZGVmaW5lIFNQRF9TUEExX0FERFJFU1MJMHgzNworCiBzdGF0aWMgdm9pZCBfX2dldF9zcGQoZ2VuZXJpY19zcGRfZWVwcm9tX3QgKnNwZCwgdTggaTJjX2FkZHJlc3MpCiB7CiAJaW50IHJldDsKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9ERFI0CisJdWludDhfdCBkdW1teSA9IDA7CisjZW5kaWYKIAogCWkyY19zZXRfYnVzX251bShDT05GSUdfU1lTX1NQRF9CVVNfTlVNKTsKIAorI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwkvKgorCSAqIEREUjQgU1BEIGhhcyAzODQgdG8gNTEyIGJ5dGVzCisJICogVG8gYWNjZXNzIHRoZSBsb3dlciAyNTYgYnl0ZXMsIHdlIG5lZWQgdG8gc2V0IEVFIHBhZ2UgYWRkcmVzcyB0byAwCisJICogVG8gYWNjZXNzIHRoZSB1cHBlciAyNTYgYnl0ZXMsIHdlIG5lZWQgdG8gc2V0IEVFIHBhZ2UgYWRkcmVzcyB0byAxCisJICogU2VlIEplZGVjIHN0YW5kYXIgTm8uIDIxLUMgZm9yIGRldGFpbAorCSAqLworCWkyY193cml0ZShTUERfU1BBMF9BRERSRVNTLCAwLCAxLCAmZHVtbXksIDEpOworCXJldCA9IGkyY19yZWFkKGkyY19hZGRyZXNzLCAwLCAxLCAodWNoYXIgKilzcGQsIDI1Nik7CisJaWYgKCFyZXQpIHsKKwkJaTJjX3dyaXRlKFNQRF9TUEExX0FERFJFU1MsIDAsIDEsICZkdW1teSwgMSk7CisJCXJldCA9IGkyY19yZWFkKGkyY19hZGRyZXNzLCAwLCAxLAorCQkJICAgICAgICh1Y2hhciAqKSgodWxvbmcpc3BkICsgMjU2KSwKKwkJCSAgICAgICBtaW4oMjU2LCBzaXplb2YoZ2VuZXJpY19zcGRfZWVwcm9tX3QpIC0gMjU2KSk7CisJfQorI2Vsc2UKIAlyZXQgPSBpMmNfcmVhZChpMmNfYWRkcmVzcywgMCwgMSwgKHVjaGFyICopc3BkLAogCQkJCXNpemVvZihnZW5lcmljX3NwZF9lZXByb21fdCkpOworI2VuZGlmCiAKIAlpZiAocmV0KSB7CiAJCWlmIChpMmNfYWRkcmVzcyA9PQpAQCAtMTk3LDYgKzIyMCwxMSBAQAogCWlmICgoMSA8PCBzKSAhPSBzdGVwKQogCQlyZXR1cm4gc3RlcF9zdHJpbmdfdGJsWzddOwogCisJaWYgKHMgPj0gQVJSQVlfU0laRShzdGVwX3N0cmluZ190YmwpKSB7CisJCXByaW50ZigiRXJyb3IgZm9yIHRoZSBzdGVwIGluICVzXG4iLCBfX2Z1bmNfXyk7CisJCXMgPSAwOworCX0KKwogCXJldHVybiBzdGVwX3N0cmluZ190Ymxbc107CiB9CiAKQEAgLTQ5Nyw2ICs1MjUsNyBAQAogCQkvKiBTVEVQIDU6ICBBc3NpZ24gYWRkcmVzc2VzIHRvIGNoaXAgc2VsZWN0cyAqLwogCQljaGVja19pbnRlcmxlYXZpbmdfb3B0aW9ucyhwaW5mbyk7CiAJCXRvdGFsX21lbSA9IHN0ZXBfYXNzaWduX2FkZHJlc3NlcyhwaW5mbywgZGJ3X2NhcGFjaXR5X2FkanVzdCk7CisJCWRlYnVnKCJUb3RhbCBtZW0gJWxsdSBhc3NpZ25lZFxuIiwgdG90YWxfbWVtKTsKIAogCWNhc2UgU1RFUF9DT01QVVRFX1JFR1M6CiAJCS8qIFNURVAgNjogIGNvbXB1dGUgY29udHJvbGxlciByZWdpc3RlciB2YWx1ZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGRyL2ZzbC9tcGM4NXh4X2Rkcl9nZW4zLmMgYi9kcml2ZXJzL2Rkci9mc2wvbXBjODV4eF9kZHJfZ2VuMy5jCmluZGV4IGM4MDUwODYuLjRkNTU3MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGRyL2ZzbC9tcGM4NXh4X2Rkcl9nZW4zLmMKKysrIGIvZHJpdmVycy9kZHIvZnNsL21wYzg1eHhfZGRyX2dlbjMuYwpAQCAtMTUsNiArMTUsNyBAQAogI2Vycm9yIEludmFsaWQgc2V0dGluZyBmb3IgQ09ORklHX0NISVBfU0VMRUNUU19QRVJfQ1RSTAogI2VuZGlmCiAKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCiAvKgogICogcmVncyBoYXMgdGhlIHRvLWJlLXNldCB2YWx1ZXMgZm9yIEREUiBjb250cm9sbGVyIHJlZ2lzdGVycwpAQCAtNDMsNiArNDQsMTYgQEAKIAl1MzIgc2F2ZTEsIHNhdmUyOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfREVFUF9TTEVFUAorCWNvbnN0IGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkIF9faW9tZW0gKikoQ09ORklHX1NZU19NUEM4NXh4X0dVVFNfQUREUik7CisJYm9vbCBzbGVlcF9mbGFnID0gMDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0RFRVBfU0xFRVAKKwlpZiAoaW5fYmUzMigmZ3VyLT5zY3J0c3JbMF0pICYgKDEgPDwgMykpCisJCXNsZWVwX2ZsYWcgPSAxOworI2VuZGlmCisKIAlzd2l0Y2ggKGN0cmxfbnVtKSB7CiAJY2FzZSAwOgogCQlkZHIgPSAodm9pZCAqKUNPTkZJR19TWVNfRlNMX0REUl9BRERSOwpAQCAtMTE5LDcgKzEzMCwxMyBAQAogCW91dF9iZTMyKCZkZHItPnRpbWluZ19jZmdfMCwgcmVncy0+dGltaW5nX2NmZ18wKTsKIAlvdXRfYmUzMigmZGRyLT50aW1pbmdfY2ZnXzEsIHJlZ3MtPnRpbWluZ19jZmdfMSk7CiAJb3V0X2JlMzIoJmRkci0+dGltaW5nX2NmZ18yLCByZWdzLT50aW1pbmdfY2ZnXzIpOwotCW91dF9iZTMyKCZkZHItPnNkcmFtX2NmZ18yLCByZWdzLT5kZHJfc2RyYW1fY2ZnXzIpOworI2lmZGVmIENPTkZJR19ERUVQX1NMRUVQCisJaWYgKHNsZWVwX2ZsYWcpCisJCW91dF9iZTMyKCZkZHItPnNkcmFtX2NmZ18yLAorCQkJIHJlZ3MtPmRkcl9zZHJhbV9jZmdfMiAmIH5TRFJBTV9DRkcyX0RfSU5JVCk7CisJZWxzZQorI2VuZGlmCisJCW91dF9iZTMyKCZkZHItPnNkcmFtX2NmZ18yLCByZWdzLT5kZHJfc2RyYW1fY2ZnXzIpOwogCW91dF9iZTMyKCZkZHItPnNkcmFtX21vZGUsIHJlZ3MtPmRkcl9zZHJhbV9tb2RlKTsKIAlvdXRfYmUzMigmZGRyLT5zZHJhbV9tb2RlXzIsIHJlZ3MtPmRkcl9zZHJhbV9tb2RlXzIpOwogCW91dF9iZTMyKCZkZHItPnNkcmFtX21vZGVfMywgcmVncy0+ZGRyX3NkcmFtX21vZGVfMyk7CkBAIC0xMzIsOCArMTQ5LDE2IEBACiAJb3V0X2JlMzIoJmRkci0+c2RyYW1faW50ZXJ2YWwsIHJlZ3MtPmRkcl9zZHJhbV9pbnRlcnZhbCk7CiAJb3V0X2JlMzIoJmRkci0+c2RyYW1fZGF0YV9pbml0LCByZWdzLT5kZHJfZGF0YV9pbml0KTsKIAlvdXRfYmUzMigmZGRyLT5zZHJhbV9jbGtfY250bCwgcmVncy0+ZGRyX3NkcmFtX2Nsa19jbnRsKTsKLQlvdXRfYmUzMigmZGRyLT5pbml0X2FkZHIsIHJlZ3MtPmRkcl9pbml0X2FkZHIpOwotCW91dF9iZTMyKCZkZHItPmluaXRfZXh0X2FkZHIsIHJlZ3MtPmRkcl9pbml0X2V4dF9hZGRyKTsKKyNpZmRlZiBDT05GSUdfREVFUF9TTEVFUAorCWlmIChzbGVlcF9mbGFnKSB7CisJCW91dF9iZTMyKCZkZHItPmluaXRfYWRkciwgMCk7CisJCW91dF9iZTMyKCZkZHItPmluaXRfZXh0X2FkZHIsICgxIDw8IDMxKSk7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCW91dF9iZTMyKCZkZHItPmluaXRfYWRkciwgcmVncy0+ZGRyX2luaXRfYWRkcik7CisJCW91dF9iZTMyKCZkZHItPmluaXRfZXh0X2FkZHIsIHJlZ3MtPmRkcl9pbml0X2V4dF9hZGRyKTsKKwl9CiAKIAlvdXRfYmUzMigmZGRyLT50aW1pbmdfY2ZnXzQsIHJlZ3MtPnRpbWluZ19jZmdfNCk7CiAJb3V0X2JlMzIoJmRkci0+dGltaW5nX2NmZ181LCByZWdzLT50aW1pbmdfY2ZnXzUpOwpAQCAtMzc0LDggKzM5OSwyMiBAQAogCXVkZWxheSg1MDApOwogCWFzbSB2b2xhdGlsZSgic3luYztpc3luYyIpOwogCisjaWZkZWYgQ09ORklHX0RFRVBfU0xFRVAKKwlpZiAoc2xlZXBfZmxhZykgeworCQkvKiBlbnRlciBzZWxmLXJlZnJlc2ggKi8KKwkJc2V0Yml0c19iZTMyKCZkZHItPnNkcmFtX2NmZ18yLCAoMSA8PCAzMSkpOworCQkvKiBkbyBib2FyZCBzcGVjaWZpYyBtZW1vcnkgc2V0dXAgKi8KKwkJYm9hcmRfbWVtX3NsZWVwX3NldHVwKCk7CisJfQorI2VuZGlmCisKIAkvKiBMZXQgdGhlIGNvbnRyb2xsZXIgZ28gKi8KLQl0ZW1wX3NkcmFtX2NmZyA9IGluX2JlMzIoJmRkci0+c2RyYW1fY2ZnKSAmIH5TRFJBTV9DRkdfQkk7CisjaWZkZWYgQ09ORklHX0RFRVBfU0xFRVAKKwlpZiAoc2xlZXBfZmxhZykKKwkJdGVtcF9zZHJhbV9jZmcgPSAoaW5fYmUzMigmZGRyLT5zZHJhbV9jZmcpIHwgU0RSQU1fQ0ZHX0JJKTsKKwllbHNlCisjZW5kaWYKKwkJdGVtcF9zZHJhbV9jZmcgPSAoaW5fYmUzMigmZGRyLT5zZHJhbV9jZmcpICYgflNEUkFNX0NGR19CSSk7CiAJb3V0X2JlMzIoJmRkci0+c2RyYW1fY2ZnLCB0ZW1wX3NkcmFtX2NmZyB8IFNEUkFNX0NGR19NRU1fRU4pOwogCWFzbSB2b2xhdGlsZSgic3luYztpc3luYyIpOwogCkBAIC01MjYsNCArNTY1LDkgQEAKIAkJY2xyYml0c19iZTMyKCZkZHItPnNkcmFtX2NmZywgMHgyKTsKIAl9CiAjZW5kaWYgLyogQ09ORklHX1NZU19GU0xfRVJSQVRVTV9ERFIxMTFfRERSMTM0ICovCisjaWZkZWYgQ09ORklHX0RFRVBfU0xFRVAKKwlpZiAoc2xlZXBfZmxhZykKKwkJLyogZXhpdCBzZWxmLXJlZnJlc2ggKi8KKwkJY2xyYml0c19iZTMyKCZkZHItPnNkcmFtX2NmZ18yLCAoMSA8PCAzMSkpOworI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Rkci9mc2wvb3B0aW9ucy5jIGIvZHJpdmVycy9kZHIvZnNsL29wdGlvbnMuYwppbmRleCBiMGNmMDQ2Li41OTg2ZTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Rkci9mc2wvb3B0aW9ucy5jCisrKyBiL2RyaXZlcnMvZGRyL2ZzbC9vcHRpb25zLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDgsIDIwMTAtMjAxMiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMDgsIDIwMTAtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwogICovCkBAIC0yOSw3ICsyOSw3IEBACiAJdW5zaWduZWQgaW50IG9kdF9ydHRfd3I7CiB9OwogCi0jaWZkZWYgQ09ORklHX1NZU19GU0xfRERSMworI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykgfHwgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFI0KQogc3RhdGljIGNvbnN0IHN0cnVjdCBkeW5hbWljX29kdCBzaW5nbGVfUVs0XSA9IHsKIAl7CS8qIGNzMCAqLwogCQlGU0xfRERSX09EVF9ORVZFUiwKQEAgLTI1OSw3ICsyNTksNyBAQAogCQlERFIzX1JUVF9PRkYKIAl9CiB9OwotI2Vsc2UJLyogQ09ORklHX1NZU19GU0xfRERSMyAqLworI2Vsc2UJLyogQ09ORklHX1NZU19GU0xfRERSMyB8fCBDT05GSUdfU1lTX0ZTTF9ERFI0ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGR5bmFtaWNfb2R0IHNpbmdsZV9RWzRdID0gewogCXswLCAwLCAwLCAwfSwKIAl7MCwgMCwgMCwgMH0sCkBAIC01MDcsNyArNTA3LDkgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAljaGFyIGJ1ZmZlcltIV0NPTkZJR19CVUZGRVJfU0laRV07CiAJY2hhciAqYnVmID0gTlVMTDsKLSNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpIHx8IGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMikKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjIpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjQpCiAJY29uc3Qgc3RydWN0IGR5bmFtaWNfb2R0ICpwZG9kdCA9IG9kdF91bmtub3duOwogI2VuZGlmCiAJdWxvbmcgZGRyX2ZyZXE7CkBAIC01MTksNzMgKzUyMSw3NiBAQAogCWlmIChnZXRlbnZfZigiaHdjb25maWciLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSA+IDApCiAJCWJ1ZiA9IGJ1ZmZlcjsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykgfHwgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIyKQorI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykgfHwgXAorCWRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMikgfHwgXAorCWRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSNCkKIAkvKiBDaGlwIHNlbGVjdCBvcHRpb25zLiAqLwotCWlmIChDT05GSUdfRElNTV9TTE9UU19QRVJfQ1RMUiA9PSAxKSB7Ci0JCXN3aXRjaCAocGRpbW1bMF0ubl9yYW5rcykgewotCQljYXNlIDE6Ci0JCQlwZG9kdCA9IHNpbmdsZV9TOwotCQkJYnJlYWs7CisjaWYgKENPTkZJR19ESU1NX1NMT1RTX1BFUl9DVExSID09IDEpCisJc3dpdGNoIChwZGltbVswXS5uX3JhbmtzKSB7CisJY2FzZSAxOgorCQlwZG9kdCA9IHNpbmdsZV9TOworCQlicmVhazsKKwljYXNlIDI6CisJCXBkb2R0ID0gc2luZ2xlX0Q7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcGRvZHQgPSBzaW5nbGVfUTsKKwkJYnJlYWs7CisJfQorI2VsaWYgKENPTkZJR19ESU1NX1NMT1RTX1BFUl9DVExSID09IDIpCisJc3dpdGNoIChwZGltbVswXS5uX3JhbmtzKSB7CisjaWZkZWYgQ09ORklHX0ZTTF9ERFJfRklSU1RfU0xPVF9RVUFEX0NBUEFCTEUKKwljYXNlIDQ6CisJCXBkb2R0ID0gc2luZ2xlX1E7CisJCWlmIChwZGltbVsxXS5uX3JhbmtzKQorCQkJcHJpbnRmKCJFcnJvcjogUXVhZC0gYW5kIER1YWwtcmFuayBESU1NcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxuIik7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSAyOgorCQlzd2l0Y2ggKHBkaW1tWzFdLm5fcmFua3MpIHsKIAkJY2FzZSAyOgotCQkJcGRvZHQgPSBzaW5nbGVfRDsKKwkJCXBkb2R0ID0gZHVhbF9ERDsKIAkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQlwZG9kdCA9IHNpbmdsZV9ROworCQljYXNlIDE6CisJCQlwZG9kdCA9IGR1YWxfRFM7CiAJCQlicmVhazsKLQkJfQotCX0gZWxzZSBpZiAoQ09ORklHX0RJTU1fU0xPVFNfUEVSX0NUTFIgPT0gMikgewotCQlzd2l0Y2ggKHBkaW1tWzBdLm5fcmFua3MpIHsKLSNpZmRlZiBDT05GSUdfRlNMX0REUl9GSVJTVF9TTE9UX1FVQURfQ0FQQUJMRQotCQljYXNlIDQ6Ci0JCQlwZG9kdCA9IHNpbmdsZV9ROwotCQkJaWYgKHBkaW1tWzFdLm5fcmFua3MpCi0JCQkJcHJpbnRmKCJFcnJvcjogUXVhZC0gYW5kIER1YWwtcmFuayBESU1NcyAiCi0JCQkJCSJjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxuIik7CisJCWNhc2UgMDoKKwkJCXBkb2R0ID0gZHVhbF9EMDsKIAkJCWJyZWFrOwotI2VuZGlmCisJCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzd2l0Y2ggKHBkaW1tWzFdLm5fcmFua3MpIHsKIAkJY2FzZSAyOgotCQkJc3dpdGNoIChwZGltbVsxXS5uX3JhbmtzKSB7Ci0JCQljYXNlIDI6Ci0JCQkJcGRvZHQgPSBkdWFsX0REOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCXBkb2R0ID0gZHVhbF9EUzsKLQkJCQlicmVhazsKLQkJCWNhc2UgMDoKLQkJCQlwZG9kdCA9IGR1YWxfRDA7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlwZG9kdCA9IGR1YWxfU0Q7CiAJCQlicmVhazsKIAkJY2FzZSAxOgotCQkJc3dpdGNoIChwZGltbVsxXS5uX3JhbmtzKSB7Ci0JCQljYXNlIDI6Ci0JCQkJcGRvZHQgPSBkdWFsX1NEOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCXBkb2R0ID0gZHVhbF9TUzsKLQkJCQlicmVhazsKLQkJCWNhc2UgMDoKLQkJCQlwZG9kdCA9IGR1YWxfUzA7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlwZG9kdCA9IGR1YWxfU1M7CiAJCQlicmVhazsKIAkJY2FzZSAwOgotCQkJc3dpdGNoIChwZGltbVsxXS5uX3JhbmtzKSB7Ci0JCQljYXNlIDI6Ci0JCQkJcGRvZHQgPSBkdWFsXzBEOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCXBkb2R0ID0gZHVhbF8wUzsKLQkJCQlicmVhazsKLQkJCX0KKwkJCXBkb2R0ID0gZHVhbF9TMDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgMDoKKwkJc3dpdGNoIChwZGltbVsxXS5uX3JhbmtzKSB7CisJCWNhc2UgMjoKKwkJCXBkb2R0ID0gZHVhbF8wRDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwZG9kdCA9IGR1YWxfMFM7CiAJCQlicmVhazsKIAkJfQorCQlicmVhazsKIAl9Ci0jZW5kaWYKKyNlbmRpZgkvKiBDT05GSUdfRElNTV9TTE9UU19QRVJfQ1RMUiAqLworI2VuZGlmCS8qIENPTkZJR19TWVNfRlNMX0REUjIsIDMsIDQgKi8KIAogCS8qIFBpY2sgY2hpcC1zZWxlY3QgbG9jYWwgb3B0aW9ucy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX0NISVBfU0VMRUNUU19QRVJfQ1RSTDsgaSsrKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIzKSB8fCBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjIpCisjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIzKSB8fCBcCisJZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIyKSB8fCBcCisJZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFI0KQogCQlwb3B0cy0+Y3NfbG9jYWxfb3B0c1tpXS5vZHRfcmRfY2ZnID0gcGRvZHRbaV0ub2R0X3JkX2NmZzsKIAkJcG9wdHMtPmNzX2xvY2FsX29wdHNbaV0ub2R0X3dyX2NmZyA9IHBkb2R0W2ldLm9kdF93cl9jZmc7CiAJCXBvcHRzLT5jc19sb2NhbF9vcHRzW2ldLm9kdF9ydHRfbm9ybSA9IHBkb2R0W2ldLm9kdF9ydHRfbm9ybTsKQEAgLTcwMyw3ICs3MDgsNyBAQAogCXBvcHRzLT54NF9lbiA9IChwZGltbVswXS5kZXZpY2Vfd2lkdGggPT0gNCkgPyAxIDogMDsKIAogCS8qIENob29zZSBidXJzdCBsZW5ndGguICovCi0jaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIzKQorI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykgfHwgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFI0KQogI2lmIGRlZmluZWQoQ09ORklHX0U1MDBNQykKIAlwb3B0cy0+b3RmX2J1cnN0X2Nob3BfZW4gPSAwOwkvKiBvbi10aGUtZmx5IGJ1cnN0IGNob3AgZGlzYWJsZSAqLwogCXBvcHRzLT5idXJzdF9sZW5ndGggPSBERFJfQkw4OwkvKiBGaXhlZCA4LWJlYXQgYnVyc3QgbGVuICovCkBAIC03MjIsNyArNzI3LDcgQEAKICNlbmRpZgogCiAJLyogQ2hvb3NlIGRkciBjb250cm9sbGVyIGFkZHJlc3MgbWlycm9yIG1vZGUgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpCisjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIzKSB8fCBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjQpCiAJcG9wdHMtPm1pcnJvcmVkX2RpbW0gPSBwZGltbVswXS5taXJyb3JlZF9kaW1tOwogI2VuZGlmCiAKQEAgLTc2NiwxMSArNzcxLDkgQEAKIAkgKiBCU1RUT1BSRSBwcmVjaGFyZ2UgaW50ZXJ2YWwKIAkgKgogCSAqIFNldCB0aGlzIHRvIDAgZm9yIGdsb2JhbCBhdXRvIHByZWNoYXJnZQotCSAqCi0JICogRklYTUU6IFNob3VsZCB0aGlzIGJlIGNvbmZpZ3VyZWQgaW4gcGljb3NlY29uZHM/Ci0JICogV2h5IGl0IHNob3VsZCBiZSBpbiBwczogIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMKLQkgKiByZWxhdGl2ZSB0byBhY3R1YWwgRFJBTSB0aW1pbmcgcGFyYW1ldGVycyBzdWNoIGFzIHRSQVMuCi0JICogZS5nLiB0UkFTKG1pbikgPSA0MCBucworCSAqIFRoZSB2YWx1ZSBvZiAweDEwMCBoYXMgYmVlbiB1c2VkIGZvciBERFIxLCBERFIyLCBERFIzLgorCSAqIEl0IGlzIG5vdCB3cm9uZy4gQW55IHZhbHVlIHNob3VsZCBiZSBPSy4gVGhlIHBlcmZvcm1hbmNlIGRlcGVuZHMgb24KKwkgKiBhcHBsaWNhdGlvbnMuIFRoZXJlIGlzIG5vIG9uZSBnb29kIHZhbHVlIGZvciBhbGwuCiAJICovCiAJcG9wdHMtPmJzdG9wcmUgPSAweDEwMDsKIApAQCAtNzk1LDEyICs3OTgsMTIgQEAKIAkgKi8KIAlwb3B0cy0+dGZhd193aW5kb3dfZm91cl9hY3RpdmF0ZXNfcHMgPSAzNzUwMDsKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIzKQorI2Vsc2UKIAlwb3B0cy0+dGZhd193aW5kb3dfZm91cl9hY3RpdmF0ZXNfcHMgPSBwZGltbVswXS50ZmF3X3BzOwogI2VuZGlmCiAJcG9wdHMtPnpxX2VuID0gMDsKIAlwb3B0cy0+d3JsdmxfZW4gPSAwOwotI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjMpIHx8IGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSNCkKIAkvKgogCSAqIGR1ZSB0byBkZHIzIGRpbW0gaXMgZmx5LWJ5IHRvcG9sb2d5CiAJICogd2Ugc3VnZ2VzdCB0byBlbmFibGUgd3JpdGUgbGV2ZWxpbmcgdG8KQEAgLTg0Myw4ICs4NDYsNyBAQAogCXBvcHRzLT5tZW1jdGxfaW50ZXJsZWF2aW5nX21vZGUgPSBGU0xfRERSXzI1NkJfSU5URVJMRUFWSU5HOwogCXBvcHRzLT5tZW1jdGxfaW50ZXJsZWF2aW5nID0gMTsKIAlkZWJ1ZygiMjU2IEJ5dGUgaW50ZXJsZWF2aW5nXG4iKTsKLQlnb3RvIGRvbmU7Ci0jZW5kaWYKKyNlbHNlCiAJLyoKIAkgKiB0ZXN0IG51bGwgZmlyc3QuIGlmIENPTkZJR19IV0NPTkZJRyBpcyBub3QgZGVmaW5lZAogCSAqIGh3Y29uZmlnX2FyZ19jbXAgcmV0dXJucyBub24temVybwpAQCAtOTI2LDggKzkyOCw5IEBACiAJCXBvcHRzLT5tZW1jdGxfaW50ZXJsZWF2aW5nID0gMDsKIAkJcHJpbnRmKCJod2NvbmZpZyBoYXMgdW5yZWNvZ25pemVkIHBhcmFtZXRlciBmb3IgY3Rscl9pbnRsdi5cbiIpOwogCX0KKyNlbmRpZgkvKiBDT05GSUdfU1lTX0ZTTF9ERFJfSU5UTFZfMjU2QiAqLwogZG9uZToKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19OVU1fRERSX0NPTlRST0xMRVJTID4gMSAqLwogCWlmICgoaHdjb25maWdfc3ViX2YoImZzbF9kZHIiLCAiYmFua19pbnRsdiIsIGJ1ZikpICYmCiAJCShDT05GSUdfQ0hJUF9TRUxFQ1RTX1BFUl9DVFJMID4gMSkpIHsKIAkJLyogdGVzdCBudWxsIGZpcnN0LiBpZiBDT05GSUdfSFdDT05GSUcgaXMgbm90IGRlZmluZWQsCkBAIC0xMTAyLDEwICsxMTA1LDExIEBACiAJCWNhc2UgRlNMX0REUl9QQUdFX0lOVEVSTEVBVklORzoKIAkJY2FzZSBGU0xfRERSX0JBTktfSU5URVJMRUFWSU5HOgogCQljYXNlIEZTTF9ERFJfU1VQRVJCQU5LX0lOVEVSTEVBVklORzoKLQkJCWlmICgzID09IENPTkZJR19OVU1fRERSX0NPTlRST0xMRVJTKQorI2lmICgzID09IENPTkZJR19OVU1fRERSX0NPTlRST0xMRVJTKQogCQkJCWsgPSAyOwotCQkJZWxzZQorI2Vsc2UKIAkJCQlrID0gQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlM7CisjZW5kaWYKIAkJCWJyZWFrOwogCQljYXNlIEZTTF9ERFJfM1dBWV8xS0JfSU5URVJMRUFWSU5HOgogCQljYXNlIEZTTF9ERFJfM1dBWV80S0JfSU5URVJMRUFWSU5HOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZHIvZnNsL3V0aWwuYyBiL2RyaXZlcnMvZGRyL2ZzbC91dGlsLmMKaW5kZXggYWQ1MzY1OC4uN2EyMmFhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kZHIvZnNsL3V0aWwuYworKysgYi9kcml2ZXJzL2Rkci9mc2wvdXRpbC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA4LTIwMTIgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjMsNiArMjMsMTggQEAKIAogI2RlZmluZSBVTExfOEZTIDB4RkZGRkZGRkZVTEwKIAordTMyIGZzbF9kZHJfZ2V0X3ZlcnNpb24odm9pZCkKK3sKKwlzdHJ1Y3QgY2Nzcl9kZHIgX19pb21lbSAqZGRyOworCXUzMiB2ZXJfbWFqb3JfbWlub3JfZXJyYXRhOworCisJZGRyID0gKHZvaWQgKilfRERSX0FERFI7CisJdmVyX21ham9yX21pbm9yX2VycmF0YSA9IChkZHJfaW4zMigmZGRyLT5pcF9yZXYxKSAmIDB4RkZGRikgPDwgODsKKwl2ZXJfbWFqb3JfbWlub3JfZXJyYXRhIHw9IChkZHJfaW4zMigmZGRyLT5pcF9yZXYyKSAmIDB4RkYwMCkgPj4gODsKKworCXJldHVybiB2ZXJfbWFqb3JfbWlub3JfZXJyYXRhOworfQorCiAvKgogICogUm91bmQgdXAgbWNsa19wcyB0byBuZWFyZXN0IDEgcHMgaW4gbWVtb3J5IGNvbnRyb2xsZXIgY29kZQogICogaWYgdGhlIGVycm9yIGlzIDAuNXBzIG9yIG1vcmUuCkBAIC0xNzUsNiArMTg3LDkgQEAKIAljYXNlIFNEUkFNX1RZUEVfRERSMzoKIAkJcHV0cygiMyIpOwogCQlicmVhazsKKwljYXNlIFNEUkFNX1RZUEVfRERSNDoKKwkJcHV0cygiNCIpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlwdXRzKCI/Iik7CiAJCWJyZWFrOwpAQCAtMTg4LDkgKzIwMywxMiBAQAogCQlwdXRzKCIsIDY0LWJpdCIpOwogCiAJLyogQ2FsY3VsYXRlIENBUyBsYXRlbmN5IGJhc2VkIG9uIHRpbWluZyBjZmcgdmFsdWVzICovCi0JY2FzX2xhdCA9ICgoZGRyX2luMzIoJmRkci0+dGltaW5nX2NmZ18xKSA+PiAxNikgJiAweGYpICsgMTsKLQlpZiAoKGRkcl9pbjMyKCZkZHItPnRpbWluZ19jZmdfMykgPj4gMTIpICYgMSkKLQkJY2FzX2xhdCArPSAoOCA8PCAxKTsKKwljYXNfbGF0ID0gKChkZHJfaW4zMigmZGRyLT50aW1pbmdfY2ZnXzEpID4+IDE2KSAmIDB4Zik7CisJaWYgKGZzbF9kZHJfZ2V0X3ZlcnNpb24oKSA8PSAweDQwNDAwKQorCQljYXNfbGF0ICs9IDE7CisJZWxzZQorCQljYXNfbGF0ICs9IDI7CisJY2FzX2xhdCArPSAoKGRkcl9pbjMyKCZkZHItPnRpbWluZ19jZmdfMykgPj4gMTIpICYgMykgPDwgNDsKIAlwcmludGYoIiwgQ0w9JWQiLCBjYXNfbGF0ID4+IDEpOwogCWlmIChjYXNfbGF0ICYgMHgxKQogCQlwdXRzKCIuNSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZnUvZGZ1LmMgYi9kcml2ZXJzL2RmdS9kZnUuYwppbmRleCA4YTA5YWFmLi41MWIxMDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RmdS9kZnUuYworKysgYi9kcml2ZXJzL2RmdS9kZnUuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCQlyZXQgPSB0cmV0OwogCX0KIAotCXJldHVybiByZXQgPSAwID8gc2l6ZSA6IHJldDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRmdV9yZWFkX2J1ZmZlcl9maWxsKHN0cnVjdCBkZnVfZW50aXR5ICpkZnUsIHZvaWQgKmJ1ZiwgaW50IHNpemUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RmdS9kZnVfbW1jLmMgYi9kcml2ZXJzL2RmdS9kZnVfbW1jLmMKaW5kZXggNjUxY2ZmZi4uNWUxMGVhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kZnUvZGZ1X21tYy5jCisrKyBiL2RyaXZlcnMvZGZ1L2RmdV9tbWMuYwpAQCAtMTg0LDY2ICsxODQsOTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogQHBhcmFtIHMgUGFyYW1ldGVyIHN0cmluZyBjb250YWluaW5nIHNwYWNlLXNlcGFyYXRlZCBhcmd1bWVudHM6CisgKgkxc3Q6CisgKgkJcmF3CShyYXcgcmVhZC93cml0ZSkKKyAqCQlmYXQJKGZpbGVzKQorICoJCWV4dDQJKF4pCisgKgkJcGFydAkocGFydGl0aW9uIGltYWdlKQorICoJMm5kIGFuZCAzcmQ6CisgKgkJbGJhX3N0YXJ0IGFuZCBsYmFfc2l6ZSwgZm9yIHJhdyB3cml0ZQorICoJCW1tY19kZXYgYW5kIG1tY19wYXJ0LCBmb3IgZmlsZXN5c3RlbXMgYW5kIHBhcnQKKyAqLwogaW50IGRmdV9maWxsX2VudGl0eV9tbWMoc3RydWN0IGRmdV9lbnRpdHkgKmRmdSwgY2hhciAqcykKIHsKLQlpbnQgZGV2LCBwYXJ0OwotCXN0cnVjdCBtbWMgKm1tYzsKLQlibG9ja19kZXZfZGVzY190ICpibGtfZGV2OwotCWRpc2tfcGFydGl0aW9uX3QgcGFydGluZm87Ci0JY2hhciAqc3Q7Ci0KLQlkZnUtPmRldl90eXBlID0gREZVX0RFVl9NTUM7Ci0Jc3QgPSBzdHJzZXAoJnMsICIgIik7Ci0JaWYgKCFzdHJjbXAoc3QsICJtbWMiKSkgewotCQlkZnUtPmxheW91dCA9IERGVV9SQVdfQUREUjsKLQkJZGZ1LT5kYXRhLm1tYy5sYmFfc3RhcnQgPSBzaW1wbGVfc3RydG91bChzLCAmcywgMTYpOwotCQlkZnUtPmRhdGEubW1jLmxiYV9zaXplID0gc2ltcGxlX3N0cnRvdWwoKytzLCAmcywgMTYpOwotCQlkZnUtPmRhdGEubW1jLmxiYV9ibGtfc2l6ZSA9IGdldF9tbWNfYmxrX3NpemUoZGZ1LT5kZXZfbnVtKTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoc3QsICJmYXQiKSkgewotCQlkZnUtPmxheW91dCA9IERGVV9GU19GQVQ7Ci0JfSBlbHNlIGlmICghc3RyY21wKHN0LCAiZXh0NCIpKSB7Ci0JCWRmdS0+bGF5b3V0ID0gREZVX0ZTX0VYVDQ7Ci0JfSBlbHNlIGlmICghc3RyY21wKHN0LCAicGFydCIpKSB7CisJY29uc3QgY2hhciAqZW50aXR5X3R5cGU7CisJc2l6ZV90IHNlY29uZF9hcmc7CisJc2l6ZV90IHRoaXJkX2FyZzsKIAotCQlkZnUtPmxheW91dCA9IERGVV9SQVdfQUREUjsKKwlzdHJ1Y3QgbW1jICptbWM7CiAKLQkJZGV2ID0gc2ltcGxlX3N0cnRvdWwocywgJnMsIDEwKTsKLQkJcysrOwotCQlwYXJ0ID0gc2ltcGxlX3N0cnRvdWwocywgJnMsIDEwKTsKKwljb25zdCBjaGFyICphcmd2WzNdOworCWNvbnN0IGNoYXIgKipwYXJnID0gYXJndjsKIAotCQltbWMgPSBmaW5kX21tY19kZXZpY2UoZGV2KTsKLQkJaWYgKG1tYyA9PSBOVUxMIHx8IG1tY19pbml0KG1tYykpIHsKLQkJCXByaW50ZigiJXM6IGNvdWxkIG5vdCBmaW5kIG1tYyBkZXZpY2UgIyVkIVxuIiwKLQkJCSAgICAgICBfX2Z1bmNfXywgZGV2KTsKKwlmb3IgKDsgcGFyZyA8IGFyZ3YgKyBzaXplb2YoYXJndikgLyBzaXplb2YoKmFyZ3YpOyArK3BhcmcpIHsKKwkJKnBhcmcgPSBzdHJzZXAoJnMsICIgIik7CisJCWlmICgqcGFyZyA9PSBOVUxMKSB7CisJCQllcnJvcigiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzLlxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQorCX0KKworCWVudGl0eV90eXBlID0gYXJndlswXTsKKwkvKgorCSAqIEJhc2UgMCBtZWFucyB3ZSdsbCBhY2NlcHQgKHByZWZpeGVkIHdpdGggMHggb3IgMCkgYmFzZSAxNiwgOCwKKwkgKiB3aXRoIGRlZmF1bHQgMTAuCisJICovCisJc2Vjb25kX2FyZyA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDApOworCXRoaXJkX2FyZyA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDApOworCisJbW1jID0gZmluZF9tbWNfZGV2aWNlKGRmdS0+ZGV2X251bSk7CisJaWYgKG1tYyA9PSBOVUxMKSB7CisJCWVycm9yKCJDb3VsZG4ndCBmaW5kIE1NQyBkZXZpY2Ugbm8uICVkLlxuIiwgZGZ1LT5kZXZfbnVtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKG1tY19pbml0KG1tYykpIHsKKwkJZXJyb3IoIkNvdWxkbid0IGluaXQgTU1DIGRldmljZS5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIXN0cmNtcChlbnRpdHlfdHlwZSwgInJhdyIpKSB7CisJCWRmdS0+bGF5b3V0CQkJPSBERlVfUkFXX0FERFI7CisJCWRmdS0+ZGF0YS5tbWMubGJhX3N0YXJ0CQk9IHNlY29uZF9hcmc7CisJCWRmdS0+ZGF0YS5tbWMubGJhX3NpemUJCT0gdGhpcmRfYXJnOworCQlkZnUtPmRhdGEubW1jLmxiYV9ibGtfc2l6ZQk9IG1tYy0+cmVhZF9ibF9sZW47CisJfSBlbHNlIGlmICghc3RyY21wKGVudGl0eV90eXBlLCAicGFydCIpKSB7CisJCWRpc2tfcGFydGl0aW9uX3QgcGFydGluZm87CisJCWJsb2NrX2Rldl9kZXNjX3QgKmJsa19kZXYgPSAmbW1jLT5ibG9ja19kZXY7CisJCWludCBtbWNkZXYgPSBzZWNvbmRfYXJnOworCQlpbnQgbW1jcGFydCA9IHRoaXJkX2FyZzsKIAotCQlibGtfZGV2ID0gJm1tYy0+YmxvY2tfZGV2OwotCQlpZiAoZ2V0X3BhcnRpdGlvbl9pbmZvKGJsa19kZXYsIHBhcnQsICZwYXJ0aW5mbykgIT0gMCkgewotCQkJcHJpbnRmKCIlczogY291bGQgbm90IGZpbmQgcGFydGl0aW9uICMlZCBvbiBtbWMgZGV2aWNlICMlZCFcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHBhcnQsIGRldik7CisJCWlmIChnZXRfcGFydGl0aW9uX2luZm8oYmxrX2RldiwgbW1jcGFydCwgJnBhcnRpbmZvKSAhPSAwKSB7CisJCQllcnJvcigiQ291bGRuJ3QgZmluZCBwYXJ0ICMlZCBvbiBtbWMgZGV2aWNlICMlZFxuIiwKKwkJCSAgICAgIG1tY3BhcnQsIG1tY2Rldik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCi0JCWRmdS0+ZGF0YS5tbWMubGJhX3N0YXJ0ID0gcGFydGluZm8uc3RhcnQ7Ci0JCWRmdS0+ZGF0YS5tbWMubGJhX3NpemUgPSBwYXJ0aW5mby5zaXplOwotCQlkZnUtPmRhdGEubW1jLmxiYV9ibGtfc2l6ZSA9IHBhcnRpbmZvLmJsa3N6OwotCisJCWRmdS0+bGF5b3V0CQkJPSBERlVfUkFXX0FERFI7CisJCWRmdS0+ZGF0YS5tbWMubGJhX3N0YXJ0CQk9IHBhcnRpbmZvLnN0YXJ0OworCQlkZnUtPmRhdGEubW1jLmxiYV9zaXplCQk9IHBhcnRpbmZvLnNpemU7CisJCWRmdS0+ZGF0YS5tbWMubGJhX2Jsa19zaXplCT0gcGFydGluZm8uYmxrc3o7CisJfSBlbHNlIGlmICghc3RyY21wKGVudGl0eV90eXBlLCAiZmF0IikpIHsKKwkJZGZ1LT5sYXlvdXQgPSBERlVfRlNfRkFUOworCX0gZWxzZSBpZiAoIXN0cmNtcChlbnRpdHlfdHlwZSwgImV4dDQiKSkgeworCQlkZnUtPmxheW91dCA9IERGVV9GU19FWFQ0OwogCX0gZWxzZSB7Ci0JCXByaW50ZigiJXM6IE1lbW9yeSBsYXlvdXQgKCVzKSBub3Qgc3VwcG9ydGVkIVxuIiwgX19mdW5jX18sIHN0KTsKKwkJZXJyb3IoIk1lbW9yeSBsYXlvdXQgKCVzKSBub3Qgc3VwcG9ydGVkIVxuIiwgZW50aXR5X3R5cGUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAoZGZ1LT5sYXlvdXQgPT0gREZVX0ZTX0VYVDQgfHwgZGZ1LT5sYXlvdXQgPT0gREZVX0ZTX0ZBVCkgewotCQlkZnUtPmRhdGEubW1jLmRldiA9IHNpbXBsZV9zdHJ0b3VsKHMsICZzLCAxMCk7Ci0JCWRmdS0+ZGF0YS5tbWMucGFydCA9IHNpbXBsZV9zdHJ0b3VsKCsrcywgJnMsIDEwKTsKKwkvKiBpZiBpdCdzIE5PVCBhIHJhdyB3cml0ZSAqLworCWlmIChzdHJjbXAoZW50aXR5X3R5cGUsICJyYXciKSkgeworCQlkZnUtPmRhdGEubW1jLmRldiA9IHNlY29uZF9hcmc7CisJCWRmdS0+ZGF0YS5tbWMucGFydCA9IHRoaXJkX2FyZzsKIAl9CiAKKwlkZnUtPmRldl90eXBlID0gREZVX0RFVl9NTUM7CiAJZGZ1LT5yZWFkX21lZGl1bSA9IGRmdV9yZWFkX21lZGl1bV9tbWM7CiAJZGZ1LT53cml0ZV9tZWRpdW0gPSBkZnVfd3JpdGVfbWVkaXVtX21tYzsKIAlkZnUtPmZsdXNoX21lZGl1bSA9IGRmdV9mbHVzaF9tZWRpdW1fbW1jOwotCi0JLyogaW5pdGlhbCBzdGF0ZSAqLwogCWRmdS0+aW5pdGVkID0gMDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvZnNsX2kyYy5jIGIvZHJpdmVycy9pMmMvZnNsX2kyYy5jCmluZGV4IDI5MWFkOTQuLmFhMTU5ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2ZzbF9pMmMuYworKysgYi9kcml2ZXJzL2kyYy9mc2xfaTJjLmMKQEAgLTQyMywxOCArNDIzLDQ1IEBACiAJc3RydWN0IGZzbF9pMmMgKmRldmljZSA9IChzdHJ1Y3QgZnNsX2kyYyAqKWkyY19kZXZbYWRhcC0+aHdhZGFwbnJdOwogCWludCBpID0gLTE7IC8qIHNpZ25hbCBlcnJvciAqLwogCXU4ICphID0gKHU4KikmYWRkcjsKKwlpbnQgbGVuID0gYWxlbiAqIC0xOwogCiAJaWYgKGkyY193YWl0NGJ1cyhhZGFwKSA8IDApCiAJCXJldHVybiAtMTsKIAotCWlmICgoIWxlbmd0aCB8fCBhbGVuID4gMCkKLQkgICAgJiYgaTJjX3dyaXRlX2FkZHIoYWRhcCwgZGV2LCBJMkNfV1JJVEVfQklULCAwKSAhPSAwCi0JICAgICYmIF9faTJjX3dyaXRlKGFkYXAsICZhWzQgLSBhbGVuXSwgYWxlbikgPT0gYWxlbikKLQkJaSA9IDA7IC8qIE5vIGVycm9yIHNvIGZhciAqLworCS8qIFRvIGhhbmRsZSB0aGUgbmVlZCBvZiBJMkMgZGV2aWNlcyB0aGF0IHJlcXVpcmUgdG8gd3JpdGUgZmV3IGJ5dGVzCisJICogKG1vcmUgdGhhbiA0IGJ5dGVzIG9mIGFkZHJlc3MgYXMgaW4gdGhlIGNhc2Ugb2YgZWxzZSBwYXJ0KQorCSAqIG9mIGRhdGEgYmVmb3JlIHJlYWRpbmcsIE5lZ2F0aXZlIGVxdWl2YWxlbnQgb2YgbGVuZ3RoKGJ5dGVzIHRvIHdyaXRlKQorCSAqIGlzIHBhc3NlZCwgYnV0IHVzZWQgdGhlICt2ZSBwYXJ0IG9mIGxlbiBmb3Igd3JpdGluZyBkYXRhCisJICovCisJaWYgKGFsZW4gPCAwKSB7CisJCS8qIEdlbmVyYXRlIGEgU1RBUlQgYW5kIHNlbmQgdGhlIEFkZHJlc3MgYW5kCisJCSAqIHRoZSBUeCBCeXRlcyB0byB0aGUgc2xhdmUuCisJCSAqICJTVEFSVDogQWRkcmVzczogV3JpdGUgYnl0ZXMgZGF0YVtsZW5dIgorCQkgKiBJRiBwYXJ0IHN1cHBvcnRzIHdyaXRpbmcgYW55IG51bWJlciBvZiBieXRlcyBpbiBjb250cmFzdAorCQkgKiB0byB0aGUgZWxzZSBwYXJ0LCB3aGljaCBzdXBwb3J0cyB3cml0aW5nIGFkZHJlc3Mgb2Zmc2V0CisJCSAqIG9mIHVwdG8gNCBieXRlcyBvbmx5LgorCQkgKiBieXRlcyB0aGF0IG5lZWQgdG8gYmUgd3JpdHRlbiBhcmUgcGFzc2VkIGluCisJCSAqICJkYXRhIiwgd2hpY2ggd2lsbCBldmVudHVhbGx5IGtlZXAgdGhlIGRhdGEgUkVBRCwKKwkJICogYWZ0ZXIgd3JpdGluZyB0aGUgbGVuIGJ5dGVzIG91dCBvZiBpdAorCQkgKi8KKwkJaWYgKGkyY193cml0ZV9hZGRyKGFkYXAsIGRldiwgSTJDX1dSSVRFX0JJVCwgMCkgIT0gMCkKKwkJCWkgPSBfX2kyY193cml0ZShhZGFwLCBkYXRhLCBsZW4pOworCisJCWlmIChpICE9IGxlbikKKwkJCXJldHVybiAtMTsKKworCQlpZiAobGVuZ3RoICYmIGkyY193cml0ZV9hZGRyKGFkYXAsIGRldiwgSTJDX1JFQURfQklULCAxKSAhPSAwKQorCQkJaSA9IF9faTJjX3JlYWQoYWRhcCwgZGF0YSwgbGVuZ3RoKTsKKwl9IGVsc2UgeworCQlpZiAoKCFsZW5ndGggfHwgYWxlbiA+IDApICYmCisJCSAgICBpMmNfd3JpdGVfYWRkcihhZGFwLCBkZXYsIEkyQ19XUklURV9CSVQsIDApICE9IDAgICYmCisJCSAgICBfX2kyY193cml0ZShhZGFwLCAmYVs0IC0gYWxlbl0sIGFsZW4pID09IGFsZW4pCisJCQlpID0gMDsgLyogTm8gZXJyb3Igc28gZmFyICovCiAKLQlpZiAobGVuZ3RoICYmCi0JICAgIGkyY193cml0ZV9hZGRyKGFkYXAsIGRldiwgSTJDX1JFQURfQklULCBhbGVuID8gMSA6IDApICE9IDApCi0JCWkgPSBfX2kyY19yZWFkKGFkYXAsIGRhdGEsIGxlbmd0aCk7CisJCWlmIChsZW5ndGggJiYKKwkJICAgIGkyY193cml0ZV9hZGRyKGFkYXAsIGRldiwgSTJDX1JFQURfQklULCBhbGVuID8gMSA6IDApICE9IDApCisJCQlpID0gX19pMmNfcmVhZChhZGFwLCBkYXRhLCBsZW5ndGgpOworCX0KIAogCXdyaXRlYihJMkNfQ1JfTUVOLCAmZGV2aWNlLT5jcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL214Y19pMmMuYyBiL2RyaXZlcnMvaTJjL214Y19pMmMuYwppbmRleCA1OTUwMTliLi40ODQ2OGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9teGNfaTJjLmMKKysrIGIvZHJpdmVycy9pMmMvbXhjX2kyYy5jCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8aTJjLmg+CiAjaW5jbHVkZSA8d2F0Y2hkb2cuaD4KIAorREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKICNpZmRlZiBJMkNfUVVJUktfUkVHCiBzdHJ1Y3QgbXhjX2kyY19yZWdzIHsKIAl1aW50OF90CQlpYWRyOwpAQCAtNDExLDEyICs0MTMsNiBAQAogCXN0cnVjdCBpMmNfcGFybXMgaTJjX2RhdGFbM107CiB9OwogCi0vKgotICogRm9yIFNQTCBib290IHNvbWUgYm9hcmRzIG5lZWQgaTJjIGJlZm9yZSBTRFJBTSBpcyBpbml0aWFsaXplZCBzbyBmb3JjZQotICogdmFyaWFibGVzIHRvIGxpdmUgaW4gU1JBTQotICovCi1zdGF0aWMgc3RydWN0IHNyYW1fZGF0YSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZGF0YSIpKSkgc3JkYXRhOwotCiBzdGF0aWMgdm9pZCAqIGNvbnN0IGkyY19iYXNlc1tdID0gewogI2lmIGRlZmluZWQoQ09ORklHX01YMjUpCiAJKHZvaWQgKilJTVhfSTJDX0JBU0UsCkBAIC00NDUsOSArNDQxLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX3Bhcm1zICppMmNfZ2V0X3Bhcm1zKHZvaWQgKmJhc2UpCiB7CisJc3RydWN0IHNyYW1fZGF0YSAqc3JkYXRhID0gKHZvaWQgKilnZC0+c3JkYXRhOwogCWludCBpID0gMDsKLQlzdHJ1Y3QgaTJjX3Bhcm1zICpwID0gc3JkYXRhLmkyY19kYXRhOwotCXdoaWxlIChpIDwgQVJSQVlfU0laRShzcmRhdGEuaTJjX2RhdGEpKSB7CisJc3RydWN0IGkyY19wYXJtcyAqcCA9IHNyZGF0YS0+aTJjX2RhdGE7CisJd2hpbGUgKGkgPCBBUlJBWV9TSVpFKHNyZGF0YS0+aTJjX2RhdGEpKSB7CiAJCWlmIChwLT5iYXNlID09IGJhc2UpCiAJCQlyZXR1cm4gcDsKIAkJcCsrOwpAQCAtNDkwLDggKzQ4Nyw5IEBACiB2b2lkIGJ1c19pMmNfaW5pdCh2b2lkICpiYXNlLCBpbnQgc3BlZWQsIGludCB1bnVzZWQsCiAJCWludCAoKmlkbGVfYnVzX2ZuKSh2b2lkICpwKSwgdm9pZCAqaWRsZV9idXNfZGF0YSkKIHsKKwlzdHJ1Y3Qgc3JhbV9kYXRhICpzcmRhdGEgPSAodm9pZCAqKWdkLT5zcmRhdGE7CiAJaW50IGkgPSAwOwotCXN0cnVjdCBpMmNfcGFybXMgKnAgPSBzcmRhdGEuaTJjX2RhdGE7CisJc3RydWN0IGkyY19wYXJtcyAqcCA9IHNyZGF0YS0+aTJjX2RhdGE7CiAJaWYgKCFiYXNlKQogCQlyZXR1cm47CiAJZm9yICg7OykgewpAQCAtNTA1LDcgKzUwMyw3IEBACiAJCX0KIAkJcCsrOwogCQlpKys7Ci0JCWlmIChpID49IEFSUkFZX1NJWkUoc3JkYXRhLmkyY19kYXRhKSkKKwkJaWYgKGkgPj0gQVJSQVlfU0laRShzcmRhdGEtPmkyY19kYXRhKSkKIAkJCXJldHVybjsKIAl9CiAJYnVzX2kyY19zZXRfYnVzX3NwZWVkKGJhc2UsIHNwZWVkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9mc2xfaWZjLmMgYi9kcml2ZXJzL21pc2MvZnNsX2lmYy5jCmluZGV4IGJlNjE5NzMuLjM5MDJlOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9mc2xfaWZjLmMKKysrIGIvZHJpdmVycy9taXNjL2ZzbF9pZmMuYwpAQCAtMTYyLDMgKzE2MiwxMCBAQAogCXNldF9pZmNfY3NvcihJRkNfQ1M3LCBDT05GSUdfU1lTX0NTT1I3KTsKICNlbmRpZgogfQorCit2b2lkIGluaXRfZmluYWxfbWVtY3RsX3JlZ3Modm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU1lTX0NTUFIwX0ZJTkFMCisJc2V0X2lmY19jc3ByKElGQ19DUzAsIENPTkZJR19TWVNfQ1NQUjBfRklOQUwpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9mc2xfZXNkaGNfc3BsLmMgYi9kcml2ZXJzL21tYy9mc2xfZXNkaGNfc3BsLmMKaW5kZXggOGZjMjYzZi4uYjFjYjRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvZnNsX2VzZGhjX3NwbC5jCisrKyBiL2RyaXZlcnMvbW1jL2ZzbF9lc2RoY19zcGwuYwpAQCAtMTksNiArMTksMzIgQEAKICNkZWZpbmUgTUJSREJSX0JPT1RfU0lHX0FBCTB4MWZmCiAjZGVmaW5lIENPTkZJR19DRkdfREFUQV9TRUNUT1IJMAogCisKK3ZvaWQgbW1jX3NwbF9sb2FkX2ltYWdlKHVpbnQzMl90IG9mZnMsIHVuc2lnbmVkIGludCBzaXplLCB2b2lkICp2ZHN0KQoreworCXVpbnQgYmxrX3N0YXJ0LCBibGtfY250LCBlcnI7CisKKwlzdHJ1Y3QgbW1jICptbWMgPSBmaW5kX21tY19kZXZpY2UoMCk7CisJaWYgKCFtbWMpIHsKKwkJcHV0cygic3BsOiBtbWMgZGV2aWNlIG5vdCBmb3VuZCEhXG4iKTsKKwkJaGFuZygpOworCX0KKworCWlmIChtbWNfaW5pdChtbWMpKSB7CisJCXB1dHMoIk1NQyBpbml0IGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlibGtfc3RhcnQgPSBBTElHTihvZmZzLCBtbWMtPnJlYWRfYmxfbGVuKSAvIG1tYy0+cmVhZF9ibF9sZW47CisJYmxrX2NudCA9IEFMSUdOKHNpemUsIG1tYy0+cmVhZF9ibF9sZW4pIC8gbW1jLT5yZWFkX2JsX2xlbjsKKworCWVyciA9IG1tYy0+YmxvY2tfZGV2LmJsb2NrX3JlYWQoMCwgYmxrX3N0YXJ0LCBibGtfY250LCB2ZHN0KTsKKwlpZiAoZXJyICE9IGJsa19jbnQpIHsKKwkJcHV0cygic3BsOiBtbWMgcmVhZCBmYWlsZWQhIVxuIik7CisJCWhhbmcoKTsKKwl9Cit9CisKIC8qCiAgKiBUaGUgbWFpbiBlbnRyeSBmb3IgbW1jIGJvb3RpbmcuIEl0J3MgbmVjZXNzYXJ5IHRoYXQgU0RSQU0gaXMgYWxyZWFkeQogICogY29uZmlndXJlZCBhbmQgYXZhaWxhYmxlIHNpbmNlIHRoaXMgY29kZSBsb2FkcyB0aGUgbWFpbiBVLUJvb3QgaW1hZ2UKQEAgLTI5LDEwICs1NSwxMiBAQAogewogCV9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgdm9pZCAoKnVib290KSh2b2lkKTsKIAl1aW50IGJsa19zdGFydCwgYmxrX2NudCwgZXJyOwotCXUzMiBibGtsZW47CisjaWZuZGVmIENPTkZJR19GU0xfQ09SRU5FVAogCXVjaGFyICp0bXBfYnVmOworCXUzMiBibGtsZW47CiAJdWNoYXIgdmFsOwogCXVpbnQgaSwgYnl0ZV9udW07CisjZW5kaWYKIAl1MzIgb2Zmc2V0LCBjb2RlX2xlbjsKIAlzdHJ1Y3QgbW1jICptbWM7CiAKQEAgLTEwMiw3ICsxMzAsOSBAQAogCQkJCQkodWNoYXIgKilDT05GSUdfU1lTX01NQ19VX0JPT1RfRFNUKTsKIAlpZiAoZXJyICE9IGJsa19jbnQpIHsKIAkJcHV0cygic3BsOiBtbWMgcmVhZCBmYWlsZWQhIVxuIik7CisjaWZuZGVmIENPTkZJR19GU0xfQ09SRU5FVAogCQlmcmVlKHRtcF9idWYpOworI2VuZGlmCiAJCWhhbmcoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZGlza29uY2hpcC5jIGIvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZDc0MWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzgwICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYwotICoKLSAqIChDKSAyMDAzIFJlZCBIYXQsIEluYy4KLSAqIChDKSAyMDA0IERhbiBCcm93biA8ZGFuX2Jyb3duQGllZWUub3JnPgotICogKEMpIDIwMDQgS2FsZXYgTGVtYmVyIDxrYWxldkBzbWFydGxpbmsuZWU+Ci0gKgotICogQXV0aG9yOiBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+Ci0gKiBBZGRpdGlvbmFsIERpc2tvbmNoaXAgMjAwMCBhbmQgTWlsbGVubml1bSBzdXBwb3J0IGJ5IERhbiBCcm93biA8ZGFuX2Jyb3duQGllZWUub3JnPgotICogRGlza29uY2hpcCBNaWxsZW5uaXVtIFBsdXMgc3VwcG9ydCBieSBLYWxldiBMZW1iZXIgPGthbGV2QHNtYXJ0bGluay5lZT4KLSAqCi0gKiBFcnJvciBjb3JyZWN0aW9uIGNvZGUgbGlmdGVkIGZyb20gdGhlIG9sZCBkb2NlY2MgY29kZQotICogQXV0aG9yOiBGYWJyaWNlIEJlbGxhcmQgKGZhYnJpY2UuYmVsbGFyZEBuZXRnZW0uY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAwIE5ldGdlbSBTLkEuCi0gKiBjb252ZXJ0ZWQgdG8gdGhlIGdlbmVyaWMgUmVlZC1Tb2xvbW9uIGxpYnJhcnkgYnkgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+Ci0gKgotICogSW50ZXJmYWNlIHRvIGdlbmVyaWMgTkFORCBjb2RlIGZvciBNLVN5c3RlbXMgRGlza09uQ2hpcCBkZXZpY2VzCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9yc2xpYi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvZG9jMjAwMC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXRtYWMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9pbmZ0bC5oPgotCi0vKiBXaGVyZSB0byBsb29rIGZvciB0aGUgZGV2aWNlcz8gKi8KLSNpZm5kZWYgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQUREUkVTUwotI2RlZmluZSBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9QUk9CRV9BRERSRVNTIDAKLSNlbmRpZgotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIGRvY19sb2NhdGlvbnNbXSA9IHsKLSNpZiBkZWZpbmVkIChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKLSNpZmRlZiBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9QUk9CRV9ISUdICi0JMHhmZmZjODAwMCwgMHhmZmZjYTAwMCwgMHhmZmZjYzAwMCwgMHhmZmZjZTAwMCwKLQkweGZmZmQwMDAwLCAweGZmZmQyMDAwLCAweGZmZmQ0MDAwLCAweGZmZmQ2MDAwLAotCTB4ZmZmZDgwMDAsIDB4ZmZmZGEwMDAsIDB4ZmZmZGMwMDAsIDB4ZmZmZGUwMDAsCi0JMHhmZmZlMDAwMCwgMHhmZmZlMjAwMCwgMHhmZmZlNDAwMCwgMHhmZmZlNjAwMCwKLQkweGZmZmU4MDAwLCAweGZmZmVhMDAwLCAweGZmZmVjMDAwLCAweGZmZmVlMDAwLAotI2Vsc2UgLyogIENPTkZJR19NVERfRE9DUFJPQkVfSElHSCAqLwotCTB4YzgwMDAsIDB4Y2EwMDAsIDB4Y2MwMDAsIDB4Y2UwMDAsCi0JMHhkMDAwMCwgMHhkMjAwMCwgMHhkNDAwMCwgMHhkNjAwMCwKLQkweGQ4MDAwLCAweGRhMDAwLCAweGRjMDAwLCAweGRlMDAwLAotCTB4ZTAwMDAsIDB4ZTIwMDAsIDB4ZTQwMDAsIDB4ZTYwMDAsCi0JMHhlODAwMCwgMHhlYTAwMCwgMHhlYzAwMCwgMHhlZTAwMCwKLSNlbmRpZiAvKiAgQ09ORklHX01URF9ET0NQUk9CRV9ISUdIICovCi0jZWxzZQotI3dhcm5pbmcgVW5rbm93biBhcmNoaXRlY3R1cmUgZm9yIERpc2tPbkNoaXAuIE5vIGRlZmF1bHQgcHJvYmUgbG9jYXRpb25zIGRlZmluZWQKLSNlbmRpZgotCTB4ZmZmZmZmZmYgfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZG9jbGlzdCA9IE5VTEw7Ci0KLXN0cnVjdCBkb2NfcHJpdiB7Ci0Jdm9pZCBfX2lvbWVtICp2aXJ0YWRyOwotCXVuc2lnbmVkIGxvbmcgcGh5c2FkcjsKLQl1X2NoYXIgQ2hpcElEOwotCXVfY2hhciBDRFNOQ29udHJvbDsKLQlpbnQgY2hpcHNfcGVyX2Zsb29yOwkvKiBUaGUgbnVtYmVyIG9mIGNoaXBzIGRldGVjdGVkIG9uIGVhY2ggZmxvb3IgKi8KLQlpbnQgY3VyZmxvb3I7Ci0JaW50IGN1cmNoaXA7Ci0JaW50IG1oMF9wYWdlOwotCWludCBtaDFfcGFnZTsKLQlzdHJ1Y3QgbXRkX2luZm8gKm5leHRkb2M7Ci19OwotCi0vKiBUaGlzIGlzIHRoZSBzeW5kcm9tZSBjb21wdXRlZCBieSB0aGUgSFcgZWNjIGdlbmVyYXRvciB1cG9uIHJlYWRpbmcgYW4gZW1wdHkKLSAgIHBhZ2UsIG9uZSB3aXRoIGFsbCAweGZmIGZvciBkYXRhIGFuZCBzdG9yZWQgZWNjIGNvZGUuICovCi1zdGF0aWMgdV9jaGFyIGVtcHR5X3JlYWRfc3luZHJvbWVbNl0gPSB7IDB4MjYsIDB4ZmYsIDB4NmQsIDB4NDcsIDB4NzMsIDB4N2EgfTsKLQotLyogVGhpcyBpcyB0aGUgZWNjIHZhbHVlIGNvbXB1dGVkIGJ5IHRoZSBIVyBlY2MgZ2VuZXJhdG9yIHVwb24gd3JpdGluZyBhbiBlbXB0eQotICAgcGFnZSwgb25lIHdpdGggYWxsIDB4ZmYgZm9yIGRhdGEuICovCi1zdGF0aWMgdV9jaGFyIGVtcHR5X3dyaXRlX2VjY1s2XSA9IHsgMHg0YiwgMHgwMCwgMHhlMiwgMHgwZSwgMHg5MywgMHhmNyB9OwotCi0jZGVmaW5lIElORlRMX0JCVF9SRVNFUlZFRF9CTE9DS1MgNAotCi0jZGVmaW5lIERvQ19pc19NaWxsZW5uaXVtUGx1cyhkb2MpICgoZG9jKS0+Q2hpcElEID09IERPQ19DaGlwSURfRG9jTWlsUGx1czE2IHx8IChkb2MpLT5DaGlwSUQgPT0gRE9DX0NoaXBJRF9Eb2NNaWxQbHVzMzIpCi0jZGVmaW5lIERvQ19pc19NaWxsZW5uaXVtKGRvYykgKChkb2MpLT5DaGlwSUQgPT0gRE9DX0NoaXBJRF9Eb2NNaWwpCi0jZGVmaW5lIERvQ19pc18yMDAwKGRvYykgKChkb2MpLT5DaGlwSUQgPT0gRE9DX0NoaXBJRF9Eb2MyaykKLQotc3RhdGljIHZvaWQgZG9jMjAweF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgYml0bWFzayk7Ci1zdGF0aWMgdm9pZCBkb2MyMDB4X3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCk7Ci0KLXN0YXRpYyBpbnQgZGVidWcgPSAwOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwotCi1zdGF0aWMgaW50IHRyeV9kd29yZCA9IDE7Ci1tb2R1bGVfcGFyYW0odHJ5X2R3b3JkLCBpbnQsIDApOwotCi1zdGF0aWMgaW50IG5vX2VjY19mYWlsdXJlcyA9IDA7Ci1tb2R1bGVfcGFyYW0obm9fZWNjX2ZhaWx1cmVzLCBpbnQsIDApOwotCi1zdGF0aWMgaW50IG5vX2F1dG9wYXJ0ID0gMDsKLW1vZHVsZV9wYXJhbShub19hdXRvcGFydCwgaW50LCAwKTsKLQotc3RhdGljIGludCBzaG93X2Zpcm13YXJlX3BhcnRpdGlvbiA9IDA7Ci1tb2R1bGVfcGFyYW0oc2hvd19maXJtd2FyZV9wYXJ0aXRpb24sIGludCwgMCk7Ci0KLSNpZmRlZiBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9CQlRXUklURQotc3RhdGljIGludCBpbmZ0bF9iYnRfd3JpdGUgPSAxOwotI2Vsc2UKLXN0YXRpYyBpbnQgaW5mdGxfYmJ0X3dyaXRlID0gMDsKLSNlbmRpZgotbW9kdWxlX3BhcmFtKGluZnRsX2JidF93cml0ZSwgaW50LCAwKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZG9jX2NvbmZpZ19sb2NhdGlvbiA9IENPTkZJR19NVERfTkFORF9ESVNLT05DSElQX1BST0JFX0FERFJFU1M7Ci1tb2R1bGVfcGFyYW0oZG9jX2NvbmZpZ19sb2NhdGlvbiwgdWxvbmcsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkb2NfY29uZmlnX2xvY2F0aW9uLCAiUGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MgYXQgd2hpY2ggdG8gcHJvYmUgZm9yIERpc2tPbkNoaXAiKTsKLQotLyogU2VjdG9yIHNpemUgZm9yIEhXIEVDQyAqLwotI2RlZmluZSBTRUNUT1JfU0laRSA1MTIKLS8qIFRoZSBzZWN0b3IgYnl0ZXMgYXJlIHBhY2tlZCBpbnRvIE5CX0RBVEEgMTAgYml0IHdvcmRzICovCi0jZGVmaW5lIE5CX0RBVEEgKCgoU0VDVE9SX1NJWkUgKyAxKSAqIDggKyA2KSAvIDEwKQotLyogTnVtYmVyIG9mIHJvb3RzICovCi0jZGVmaW5lIE5ST09UUyA0Ci0vKiBGaXJzdCBjb25zZWN0aXZlIHJvb3QgKi8KLSNkZWZpbmUgRkNSIDUxMAotLyogTnVtYmVyIG9mIHN5bWJvbHMgKi8KLSNkZWZpbmUgTk4gMTAyMwotCi0vKiB0aGUgUmVlZCBTb2xvbW9uIGNvbnRyb2wgc3RydWN0dXJlICovCi1zdGF0aWMgc3RydWN0IHJzX2NvbnRyb2wgKnJzX2RlY29kZXI7Ci0KLS8qCi0gKiBUaGUgSFcgZGVjb2RlciBpbiB0aGUgRG9DIEFTSUMncyBwcm92aWRlcyB1cyBhIGVycm9yIHN5bmRyb21lLAotICogd2hpY2ggd2UgbXVzdCBjb252ZXJ0IHRvIGEgc3RhbmRhcmQgc3luZHJvbWUgdXNhYmxlIGJ5IHRoZSBnZW5lcmljCi0gKiBSZWVkLVNvbG9tb24gbGlicmFyeSBjb2RlLgotICoKLSAqIEZhYnJpY2UgQmVsbGFyZCBmaWd1cmVkIHRoaXMgb3V0IGluIHRoZSBvbGQgZG9jZWNjIGNvZGUuIEkgYWRkZWQKLSAqIHNvbWUgY29tbWVudHMsIGltcHJvdmVkIGEgbWlub3IgYml0IGFuZCBjb252ZXJ0ZWQgaXQgdG8gbWFrZSB1c2UKLSAqIG9mIHRoZSBnZW5lcmljIFJlZWQtU29sb21vbiBsaWJhcnkuIHRnbHgKLSAqLwotc3RhdGljIGludCBkb2NfZWNjX2RlY29kZShzdHJ1Y3QgcnNfY29udHJvbCAqcnMsIHVpbnQ4X3QgKmRhdGEsIHVpbnQ4X3QgKmVjYykKLXsKLQlpbnQgaSwgaiwgbmVyciwgZXJycG9zWzhdOwotCXVpbnQ4X3QgcGFyaXR5OwotCXVpbnQxNl90IGRzWzRdLCBzWzVdLCB0bXAsIGVycnZhbFs4XSwgc3luWzRdOwotCi0JLyogQ29udmVydCB0aGUgZWNjIGJ5dGVzIGludG8gd29yZHMgKi8KLQlkc1swXSA9ICgoZWNjWzRdICYgMHhmZikgPj4gMCkgfCAoKGVjY1s1XSAmIDB4MDMpIDw8IDgpOwotCWRzWzFdID0gKChlY2NbNV0gJiAweGZjKSA+PiAyKSB8ICgoZWNjWzJdICYgMHgwZikgPDwgNik7Ci0JZHNbMl0gPSAoKGVjY1syXSAmIDB4ZjApID4+IDQpIHwgKChlY2NbM10gJiAweDNmKSA8PCA0KTsKLQlkc1szXSA9ICgoZWNjWzNdICYgMHhjMCkgPj4gNikgfCAoKGVjY1swXSAmIDB4ZmYpIDw8IDIpOwotCXBhcml0eSA9IGVjY1sxXTsKLQotCS8qIEluaXRpYWxpemUgdGhlIHN5bmRyb21lIGJ1ZmZlciAqLwotCWZvciAoaSA9IDA7IGkgPCBOUk9PVFM7IGkrKykKLQkJc1tpXSA9IGRzWzBdOwotCS8qCi0JICogIEV2YWx1YXRlCi0JICogIHNbaV0gPSBkc1szXXheMyArIGRzWzJdeF4yICsgZHNbMV14XjEgKyBkc1swXQotCSAqICB3aGVyZSB4ID0gYWxwaGFeKEZDUiArIGkpCi0JICovCi0JZm9yIChqID0gMTsgaiA8IE5ST09UUzsgaisrKSB7Ci0JCWlmIChkc1tqXSA9PSAwKQotCQkJY29udGludWU7Ci0JCXRtcCA9IHJzLT5pbmRleF9vZltkc1tqXV07Ci0JCWZvciAoaSA9IDA7IGkgPCBOUk9PVFM7IGkrKykKLQkJCXNbaV0gXj0gcnMtPmFscGhhX3RvW3JzX21vZG5uKHJzLCB0bXAgKyAoRkNSICsgaSkgKiBqKV07Ci0JfQotCi0JLyogQ2FsYyBzW2ldID0gc1tpXSAvIGFscGhhXih2ICsgaSkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJPT1RTOyBpKyspIHsKLQkJaWYgKHN5bltpXSkKLQkJCXN5bltpXSA9IHJzX21vZG5uKHJzLCBycy0+aW5kZXhfb2Zbc1tpXV0gKyAoTk4gLSBGQ1IgLSBpKSk7Ci0JfQotCS8qIENhbGwgdGhlIGRlY29kZXIgbGlicmFyeSAqLwotCW5lcnIgPSBkZWNvZGVfcnMxNihycywgTlVMTCwgTlVMTCwgMTAxOSwgc3luLCAwLCBlcnJwb3MsIDAsIGVycnZhbCk7Ci0KLQkvKiBJbmNvcnJlY3RhYmxlIGVycm9ycyA/ICovCi0JaWYgKG5lcnIgPCAwKQotCQlyZXR1cm4gbmVycjsKLQotCS8qCi0JICogQ29ycmVjdCB0aGUgZXJyb3JzLiBUaGUgYml0cG9zaXRpb25zIGFyZSBhIGJpdCBvZiBtYWdpYywKLQkgKiBidXQgdGhleSBhcmUgZ2l2ZW4gYnkgdGhlIGRlc2lnbiBvZiB0aGUgZGUvZW5jb2RlciBjaXJjdWl0Ci0JICogaW4gdGhlIERvQyBBU0lDJ3MuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG5lcnI7IGkrKykgewotCQlpbnQgaW5kZXgsIGJpdHBvcywgcG9zID0gMTAxNSAtIGVycnBvc1tpXTsKLQkJdWludDhfdCB2YWw7Ci0JCWlmIChwb3MgPj0gTkJfREFUQSAmJiBwb3MgPCAxMDE5KQotCQkJY29udGludWU7Ci0JCWlmIChwb3MgPCBOQl9EQVRBKSB7Ci0JCQkvKiBleHRyYWN0IGJpdCBwb3NpdGlvbiAoTVNCIGZpcnN0KSAqLwotCQkJcG9zID0gMTAgKiAoTkJfREFUQSAtIDEgLSBwb3MpIC0gNjsKLQkJCS8qIG5vdyBjb3JyZWN0IHRoZSBmb2xsb3dpbmcgMTAgYml0cy4gQXQgbW9zdCB0d28gYnl0ZXMKLQkJCSAgIGNhbiBiZSBtb2RpZmllZCBzaW5jZSBwb3MgaXMgZXZlbiAqLwotCQkJaW5kZXggPSAocG9zID4+IDMpIF4gMTsKLQkJCWJpdHBvcyA9IHBvcyAmIDc7Ci0JCQlpZiAoKGluZGV4ID49IDAgJiYgaW5kZXggPCBTRUNUT1JfU0laRSkgfHwgaW5kZXggPT0gKFNFQ1RPUl9TSVpFICsgMSkpIHsKLQkJCQl2YWwgPSAodWludDhfdCkgKGVycnZhbFtpXSA+PiAoMiArIGJpdHBvcykpOwotCQkJCXBhcml0eSBePSB2YWw7Ci0JCQkJaWYgKGluZGV4IDwgU0VDVE9SX1NJWkUpCi0JCQkJCWRhdGFbaW5kZXhdIF49IHZhbDsKLQkJCX0KLQkJCWluZGV4ID0gKChwb3MgPj4gMykgKyAxKSBeIDE7Ci0JCQliaXRwb3MgPSAoYml0cG9zICsgMTApICYgNzsKLQkJCWlmIChiaXRwb3MgPT0gMCkKLQkJCQliaXRwb3MgPSA4OwotCQkJaWYgKChpbmRleCA+PSAwICYmIGluZGV4IDwgU0VDVE9SX1NJWkUpIHx8IGluZGV4ID09IChTRUNUT1JfU0laRSArIDEpKSB7Ci0JCQkJdmFsID0gKHVpbnQ4X3QpIChlcnJ2YWxbaV0gPDwgKDggLSBiaXRwb3MpKTsKLQkJCQlwYXJpdHkgXj0gdmFsOwotCQkJCWlmIChpbmRleCA8IFNFQ1RPUl9TSVpFKQotCQkJCQlkYXRhW2luZGV4XSBePSB2YWw7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogSWYgdGhlIHBhcml0eSBpcyB3cm9uZywgbm8gcmVzY3VlIHBvc3NpYmxlICovCi0JcmV0dXJuIHBhcml0eSA/IC1FQkFETVNHIDogbmVycjsKLX0KLQotc3RhdGljIHZvaWQgRG9DX0RlbGF5KHN0cnVjdCBkb2NfcHJpdiAqZG9jLCB1bnNpZ25lZCBzaG9ydCBjeWNsZXMpCi17Ci0Jdm9sYXRpbGUgY2hhciBkdW1teTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBjeWNsZXM7IGkrKykgewotCQlpZiAoRG9DX2lzX01pbGxlbm5pdW0oZG9jKSkKLQkJCWR1bW15ID0gUmVhZERPQyhkb2MtPnZpcnRhZHIsIE5PUCk7Ci0JCWVsc2UgaWYgKERvQ19pc19NaWxsZW5uaXVtUGx1cyhkb2MpKQotCQkJZHVtbXkgPSBSZWFkRE9DKGRvYy0+dmlydGFkciwgTXBsdXNfTk9QKTsKLQkJZWxzZQotCQkJZHVtbXkgPSBSZWFkRE9DKGRvYy0+dmlydGFkciwgRE9DU3RhdHVzKTsKLQl9Ci0KLX0KLQotI2RlZmluZSBDRFNOX0NUUkxfRlJfQl9NQVNLCShDRFNOX0NUUkxfRlJfQjAgfCBDRFNOX0NUUkxfRlJfQjEpCi0KLS8qIERPQ19XYWl0UmVhZHk6IFdhaXQgZm9yIFJEWSBsaW5lIHRvIGJlIGFzc2VydGVkIGJ5IHRoZSBmbGFzaCBjaGlwICovCi1zdGF0aWMgaW50IF9Eb0NfV2FpdFJlYWR5KHN0cnVjdCBkb2NfcHJpdiAqZG9jKQotewotCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwotCXVuc2lnbmVkIGxvbmcgdGltZW8gPSBqaWZmaWVzICsgKEhaICogMTApOwotCi0JaWYgKGRlYnVnKQotCQlwcmludGsoIl9Eb0NfV2FpdFJlYWR5Li4uXG4iKTsKLQkvKiBPdXQtb2YtbGluZSByb3V0aW5lIHRvIHdhaXQgZm9yIGNoaXAgcmVzcG9uc2UgKi8KLQlpZiAoRG9DX2lzX01pbGxlbm5pdW1QbHVzKGRvYykpIHsKLQkJd2hpbGUgKChSZWFkRE9DKGRvY3B0ciwgTXBsdXNfRmxhc2hDb250cm9sKSAmIENEU05fQ1RSTF9GUl9CX01BU0spICE9IENEU05fQ1RSTF9GUl9CX01BU0spIHsKLQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvKSkgewotCQkJCXByaW50aygiX0RvQ19XYWl0UmVhZHkgdGltZWQgb3V0LlxuIik7Ci0JCQkJcmV0dXJuIC1FSU87Ci0JCQl9Ci0JCQl1ZGVsYXkoMSk7Ci0JCQljb25kX3Jlc2NoZWQoKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXdoaWxlICghKFJlYWRET0MoZG9jcHRyLCBDRFNOQ29udHJvbCkgJiBDRFNOX0NUUkxfRlJfQikpIHsKLQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvKSkgewotCQkJCXByaW50aygiX0RvQ19XYWl0UmVhZHkgdGltZWQgb3V0LlxuIik7Ci0JCQkJcmV0dXJuIC1FSU87Ci0JCQl9Ci0JCQl1ZGVsYXkoMSk7Ci0JCQljb25kX3Jlc2NoZWQoKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBEb0NfV2FpdFJlYWR5KHN0cnVjdCBkb2NfcHJpdiAqZG9jKQotewotCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwotCWludCByZXQgPSAwOwotCi0JaWYgKERvQ19pc19NaWxsZW5uaXVtUGx1cyhkb2MpKSB7Ci0JCURvQ19EZWxheShkb2MsIDQpOwotCi0JCWlmICgoUmVhZERPQyhkb2NwdHIsIE1wbHVzX0ZsYXNoQ29udHJvbCkgJiBDRFNOX0NUUkxfRlJfQl9NQVNLKSAhPSBDRFNOX0NUUkxfRlJfQl9NQVNLKQotCQkJLyogQ2FsbCB0aGUgb3V0LW9mLWxpbmUgcm91dGluZSB0byB3YWl0ICovCi0JCQlyZXQgPSBfRG9DX1dhaXRSZWFkeShkb2MpOwotCX0gZWxzZSB7Ci0JCURvQ19EZWxheShkb2MsIDQpOwotCi0JCWlmICghKFJlYWRET0MoZG9jcHRyLCBDRFNOQ29udHJvbCkgJiBDRFNOX0NUUkxfRlJfQikpCi0JCQkvKiBDYWxsIHRoZSBvdXQtb2YtbGluZSByb3V0aW5lIHRvIHdhaXQgKi8KLQkJCXJldCA9IF9Eb0NfV2FpdFJlYWR5KGRvYyk7Ci0JCURvQ19EZWxheShkb2MsIDIpOwotCX0KLQotCWlmIChkZWJ1ZykKLQkJcHJpbnRrKCJEb0NfV2FpdFJlYWR5IE9LXG4iKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBkb2MyMDAwX3dyaXRlX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciBkYXR1bSkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQotCWlmIChkZWJ1ZykKLQkJcHJpbnRrKCJ3cml0ZV9ieXRlICUwMnhcbiIsIGRhdHVtKTsKLQlXcml0ZURPQyhkYXR1bSwgZG9jcHRyLCBDRFNOU2xvd0lPKTsKLQlXcml0ZURPQyhkYXR1bSwgZG9jcHRyLCAya19DRFNOX0lPKTsKLX0KLQotc3RhdGljIHVfY2hhciBkb2MyMDAwX3JlYWRfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQl1X2NoYXIgcmV0OwotCi0JUmVhZERPQyhkb2NwdHIsIENEU05TbG93SU8pOwotCURvQ19EZWxheShkb2MsIDIpOwotCXJldCA9IFJlYWRET0MoZG9jcHRyLCAya19DRFNOX0lPKTsKLQlpZiAoZGVidWcpCi0JCXByaW50aygicmVhZF9ieXRlIHJldHVybnMgJTAyeFxuIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBkb2MyMDAwX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQlpbnQgaTsKLQlpZiAoZGVidWcpCi0JCXByaW50aygid3JpdGVidWYgb2YgJWQgYnl0ZXM6ICIsIGxlbik7Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCVdyaXRlRE9DXyhidWZbaV0sIGRvY3B0ciwgRG9DXzJrX0NEU05fSU8gKyBpKTsKLQkJaWYgKGRlYnVnICYmIGkgPCAxNikKLQkJCXByaW50aygiJTAyeCAiLCBidWZbaV0pOwotCX0KLQlpZiAoZGVidWcpCi0JCXByaW50aygiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgZG9jMjAwMF9yZWFkYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQlpbnQgaTsKLQotCWlmIChkZWJ1ZykKLQkJcHJpbnRrKCJyZWFkYnVmIG9mICVkIGJ5dGVzOiAiLCBsZW4pOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWJ1ZltpXSA9IFJlYWRET0MoZG9jcHRyLCAya19DRFNOX0lPICsgaSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkb2MyMDAwX3JlYWRidWZfZHdvcmQoc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCQkgICAgdV9jaGFyICpidWYsIGludCBsZW4pCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0Jdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7Ci0JaW50IGk7Ci0KLQlpZiAoZGVidWcpCi0JCXByaW50aygicmVhZGJ1Zl9kd29yZCBvZiAlZCBieXRlczogIiwgbGVuKTsKLQotCWlmICh1bmxpa2VseSgoKCh1bnNpZ25lZCBsb25nKWJ1ZikgfCBsZW4pICYgMykpIHsKLQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCQkqKHVpbnQ4X3QgKikgKCZidWZbaV0pID0gUmVhZERPQyhkb2NwdHIsIDJrX0NEU05fSU8gKyBpKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkgewotCQkJKih1aW50MzJfdCopICgmYnVmW2ldKSA9IHJlYWRsKGRvY3B0ciArIERvQ18ya19DRFNOX0lPICsgaSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgZG9jMjAwMF92ZXJpZnlidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQlpZiAoYnVmW2ldICE9IFJlYWRET0MoZG9jcHRyLCAya19DRFNOX0lPKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdWludDE2X3QgX19pbml0IGRvYzIwMHhfaWRlbnRfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG5yKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotCXVpbnQxNl90IHJldDsKLQotCWRvYzIwMHhfc2VsZWN0X2NoaXAobXRkLCBucik7Ci0JZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NNRF9SRUFESUQsCi0JCQkgIE5BTkRfQ1RSTF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKLQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIDAsIE5BTkRfQ1RSTF9BTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKLQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ01EX05PTkUsIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7Ci0KLQkvKiBXZSBjYW50JyB1c2UgZGV2X3JlYWR5IGhlcmUsIGJ1dCBhdCBsZWFzdCB3ZSB3YWl0IGZvciB0aGUKLQkgKiBjb21tYW5kIHRvIGNvbXBsZXRlCi0JICovCi0JdWRlbGF5KDUwKTsKLQotCXJldCA9IHRoaXMtPnJlYWRfYnl0ZShtdGQpIDw8IDg7Ci0JcmV0IHw9IHRoaXMtPnJlYWRfYnl0ZShtdGQpOwotCi0JaWYgKGRvYy0+Q2hpcElEID09IERPQ19DaGlwSURfRG9jMmsgJiYgdHJ5X2R3b3JkICYmICFucikgewotCQkvKiBGaXJzdCBjaGlwIHByb2JlLiBTZWUgaWYgd2UgZ2V0IHNhbWUgcmVzdWx0cyBieSAzMi1iaXQgYWNjZXNzICovCi0JCXVuaW9uIHsKLQkJCXVpbnQzMl90IGR3b3JkOwotCQkJdWludDhfdCBieXRlWzRdOwotCQl9IGlkZW50OwotCQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQotCQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ01EX1JFQURJRCwKLQkJCQkgIE5BTkRfQ1RSTF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKLQkJZG9jMjAweF9od2NvbnRyb2wobXRkLCAwLCBOQU5EX0NUUkxfQUxFIHwgTkFORF9DVFJMX0NIQU5HRSk7Ci0JCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DTURfTk9ORSwKLQkJCQkgIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7Ci0KLQkJdWRlbGF5KDUwKTsKLQotCQlpZGVudC5kd29yZCA9IHJlYWRsKGRvY3B0ciArIERvQ18ya19DRFNOX0lPKTsKLQkJaWYgKCgoaWRlbnQuYnl0ZVswXSA8PCA4KSB8IGlkZW50LmJ5dGVbMV0pID09IHJldCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiRGlza09uQ2hpcCAyMDAwIHJlc3BvbmRzIHRvIERXT1JEIGFjY2Vzc1xuIik7Ci0JCQl0aGlzLT5yZWFkX2J1ZiA9ICZkb2MyMDAwX3JlYWRidWZfZHdvcmQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZG9jMjAwMF9jb3VudF9jaGlwcyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl1aW50MTZfdCBtZnJpZDsKLQlpbnQgaTsKLQotCS8qIE1heCA0IGNoaXBzIHBlciBmbG9vciBvbiBEaXNrT25DaGlwIDIwMDAgKi8KLQlkb2MtPmNoaXBzX3Blcl9mbG9vciA9IDQ7Ci0KLQkvKiBGaW5kIG91dCB3aGF0IHRoZSBmaXJzdCBjaGlwIGlzICovCi0JbWZyaWQgPSBkb2MyMDB4X2lkZW50X2NoaXAobXRkLCAwKTsKLQotCS8qIEZpbmQgaG93IG1hbnkgY2hpcHMgaW4gZWFjaCBmbG9vci4gKi8KLQlmb3IgKGkgPSAxOyBpIDwgNDsgaSsrKSB7Ci0JCWlmIChkb2MyMDB4X2lkZW50X2NoaXAobXRkLCBpKSAhPSBtZnJpZCkKLQkJCWJyZWFrOwotCX0KLQlkb2MtPmNoaXBzX3Blcl9mbG9vciA9IGk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkRldGVjdGVkICVkIGNoaXBzIHBlciBmbG9vci5cbiIsIGkpOwotfQotCi1zdGF0aWMgaW50IGRvYzIwMHhfd2FpdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcykKLXsKLQlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0KLQlpbnQgc3RhdHVzOwotCi0JRG9DX1dhaXRSZWFkeShkb2MpOwotCXRoaXMtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TVEFUVVMsIC0xLCAtMSk7Ci0JRG9DX1dhaXRSZWFkeShkb2MpOwotCXN0YXR1cyA9IChpbnQpdGhpcy0+cmVhZF9ieXRlKG10ZCk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgdm9pZCBkb2MyMDAxX3dyaXRlX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciBkYXR1bSkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQotCVdyaXRlRE9DKGRhdHVtLCBkb2NwdHIsIENEU05TbG93SU8pOwotCVdyaXRlRE9DKGRhdHVtLCBkb2NwdHIsIE1pbF9DRFNOX0lPKTsKLQlXcml0ZURPQyhkYXR1bSwgZG9jcHRyLCBXcml0ZVBpcGVUZXJtKTsKLX0KLQotc3RhdGljIHVfY2hhciBkb2MyMDAxX3JlYWRfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQotCS8qUmVhZERPQyhkb2NwdHIsIENEU05TbG93SU8pOyAqLwotCS8qIDExLjQuNSAtLSBkZWxheSB0d2ljZSB0byBhbGxvdyBleHRlbmRlZCBsZW5ndGggY3ljbGUgKi8KLQlEb0NfRGVsYXkoZG9jLCAyKTsKLQlSZWFkRE9DKGRvY3B0ciwgUmVhZFBpcGVJbml0KTsKLQkvKnJldHVybiBSZWFkRE9DKGRvY3B0ciwgTWlsX0NEU05fSU8pOyAqLwotCXJldHVybiBSZWFkRE9DKGRvY3B0ciwgTGFzdERhdGFSZWFkKTsKLX0KLQotc3RhdGljIHZvaWQgZG9jMjAwMV93cml0ZWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0Jdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCVdyaXRlRE9DXyhidWZbaV0sIGRvY3B0ciwgRG9DX01pbF9DRFNOX0lPICsgaSk7Ci0JLyogVGVybWluYXRlIHdyaXRlIHBpcGVsaW5lICovCi0JV3JpdGVET0MoMHgwMCwgZG9jcHRyLCBXcml0ZVBpcGVUZXJtKTsKLX0KLQotc3RhdGljIHZvaWQgZG9jMjAwMV9yZWFkYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQlpbnQgaTsKLQotCS8qIFN0YXJ0IHJlYWQgcGlwZWxpbmUgKi8KLQlSZWFkRE9DKGRvY3B0ciwgUmVhZFBpcGVJbml0KTsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspCi0JCWJ1ZltpXSA9IFJlYWRET0MoZG9jcHRyLCBNaWxfQ0RTTl9JTyArIChpICYgMHhmZikpOwotCi0JLyogVGVybWluYXRlIHJlYWQgcGlwZWxpbmUgKi8KLQlidWZbaV0gPSBSZWFkRE9DKGRvY3B0ciwgTGFzdERhdGFSZWFkKTsKLX0KLQotc3RhdGljIGludCBkb2MyMDAxX3ZlcmlmeWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0Jdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7Ci0JaW50IGk7Ci0KLQkvKiBTdGFydCByZWFkIHBpcGVsaW5lICovCi0JUmVhZERPQyhkb2NwdHIsIFJlYWRQaXBlSW5pdCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKQotCQlpZiAoYnVmW2ldICE9IFJlYWRET0MoZG9jcHRyLCBNaWxfQ0RTTl9JTykpIHsKLQkJCVJlYWRET0MoZG9jcHRyLCBMYXN0RGF0YVJlYWQpOwotCQkJcmV0dXJuIGk7Ci0JCX0KLQlpZiAoYnVmW2ldICE9IFJlYWRET0MoZG9jcHRyLCBMYXN0RGF0YVJlYWQpKQotCQlyZXR1cm4gaTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVfY2hhciBkb2MyMDAxcGx1c19yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0Jdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7Ci0JdV9jaGFyIHJldDsKLQotCVJlYWRET0MoZG9jcHRyLCBNcGx1c19SZWFkUGlwZUluaXQpOwotCVJlYWRET0MoZG9jcHRyLCBNcGx1c19SZWFkUGlwZUluaXQpOwotCXJldCA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOwotCWlmIChkZWJ1ZykKLQkJcHJpbnRrKCJyZWFkX2J5dGUgcmV0dXJucyAlMDJ4XG4iLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvYzIwMDFwbHVzX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQlpbnQgaTsKLQotCWlmIChkZWJ1ZykKLQkJcHJpbnRrKCJ3cml0ZWJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJV3JpdGVET0NfKGJ1ZltpXSwgZG9jcHRyLCBEb0NfTWlsX0NEU05fSU8gKyBpKTsKLQkJaWYgKGRlYnVnICYmIGkgPCAxNikKLQkJCXByaW50aygiJTAyeCAiLCBidWZbaV0pOwotCX0KLQlpZiAoZGVidWcpCi0JCXByaW50aygiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgZG9jMjAwMXBsdXNfcmVhZGJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0Jdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7Ci0JaW50IGk7Ci0KLQlpZiAoZGVidWcpCi0JCXByaW50aygicmVhZGJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKLQotCS8qIFN0YXJ0IHJlYWQgcGlwZWxpbmUgKi8KLQlSZWFkRE9DKGRvY3B0ciwgTXBsdXNfUmVhZFBpcGVJbml0KTsKLQlSZWFkRE9DKGRvY3B0ciwgTXBsdXNfUmVhZFBpcGVJbml0KTsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAyOyBpKyspIHsKLQkJYnVmW2ldID0gUmVhZERPQyhkb2NwdHIsIE1pbF9DRFNOX0lPKTsKLQkJaWYgKGRlYnVnICYmIGkgPCAxNikKLQkJCXByaW50aygiJTAyeCAiLCBidWZbaV0pOwotCX0KLQotCS8qIFRlcm1pbmF0ZSByZWFkIHBpcGVsaW5lICovCi0JYnVmW2xlbiAtIDJdID0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7Ci0JaWYgKGRlYnVnICYmIGkgPCAxNikKLQkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltsZW4gLSAyXSk7Ci0JYnVmW2xlbiAtIDFdID0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7Ci0JaWYgKGRlYnVnICYmIGkgPCAxNikKLQkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltsZW4gLSAxXSk7Ci0JaWYgKGRlYnVnKQotCQlwcmludGsoIlxuIik7Ci19Ci0KLXN0YXRpYyBpbnQgZG9jMjAwMXBsdXNfdmVyaWZ5YnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQlpbnQgaTsKLQotCWlmIChkZWJ1ZykKLQkJcHJpbnRrKCJ2ZXJpZnlidWYgb2YgJWQgYnl0ZXM6ICIsIGxlbik7Ci0KLQkvKiBTdGFydCByZWFkIHBpcGVsaW5lICovCi0JUmVhZERPQyhkb2NwdHIsIE1wbHVzX1JlYWRQaXBlSW5pdCk7Ci0JUmVhZERPQyhkb2NwdHIsIE1wbHVzX1JlYWRQaXBlSW5pdCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMjsgaSsrKQotCQlpZiAoYnVmW2ldICE9IFJlYWRET0MoZG9jcHRyLCBNaWxfQ0RTTl9JTykpIHsKLQkJCVJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOwotCQkJUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7Ci0JCQlyZXR1cm4gaTsKLQkJfQotCWlmIChidWZbbGVuIC0gMl0gIT0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCkpCi0JCXJldHVybiBsZW4gLSAyOwotCWlmIChidWZbbGVuIC0gMV0gIT0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCkpCi0JCXJldHVybiBsZW4gLSAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBkb2MyMDAxcGx1c19zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0Jdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7Ci0JaW50IGZsb29yID0gMDsKLQotCWlmIChkZWJ1ZykKLQkJcHJpbnRrKCJzZWxlY3QgY2hpcCAoJWQpXG4iLCBjaGlwKTsKLQotCWlmIChjaGlwID09IC0xKSB7Ci0JCS8qIERpc2FibGUgZmxhc2ggaW50ZXJuYWxseSAqLwotCQlXcml0ZURPQygwLCBkb2NwdHIsIE1wbHVzX0ZsYXNoU2VsZWN0KTsKLQkJcmV0dXJuOwotCX0KLQotCWZsb29yID0gY2hpcCAvIGRvYy0+Y2hpcHNfcGVyX2Zsb29yOwotCWNoaXAgLT0gKGZsb29yICogZG9jLT5jaGlwc19wZXJfZmxvb3IpOwotCi0JLyogQXNzZXJ0IENoaXBFbmFibGUgYW5kIGRlYXNzZXJ0IFdyaXRlUHJvdGVjdCAqLwotCVdyaXRlRE9DKChET0NfRkxBU0hfQ0UpLCBkb2NwdHIsIE1wbHVzX0ZsYXNoU2VsZWN0KTsKLQl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVTRVQsIC0xLCAtMSk7Ci0KLQlkb2MtPmN1cmNoaXAgPSBjaGlwOwotCWRvYy0+Y3VyZmxvb3IgPSBmbG9vcjsKLX0KLQotc3RhdGljIHZvaWQgZG9jMjAweF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0Jdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7Ci0JaW50IGZsb29yID0gMDsKLQotCWlmIChkZWJ1ZykKLQkJcHJpbnRrKCJzZWxlY3QgY2hpcCAoJWQpXG4iLCBjaGlwKTsKLQotCWlmIChjaGlwID09IC0xKQotCQlyZXR1cm47Ci0KLQlmbG9vciA9IGNoaXAgLyBkb2MtPmNoaXBzX3Blcl9mbG9vcjsKLQljaGlwIC09IChmbG9vciAqIGRvYy0+Y2hpcHNfcGVyX2Zsb29yKTsKLQotCS8qIDExLjQuNCAtLSBkZWFzc2VydCBDRSBiZWZvcmUgY2hhbmdpbmcgY2hpcCAqLwotCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DTURfTk9ORSwgMCB8IE5BTkRfQ1RSTF9DSEFOR0UpOwotCi0JV3JpdGVET0MoZmxvb3IsIGRvY3B0ciwgRmxvb3JTZWxlY3QpOwotCVdyaXRlRE9DKGNoaXAsIGRvY3B0ciwgQ0RTTkRldmljZVNlbGVjdCk7Ci0KLQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ01EX05PTkUsIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7Ci0KLQlkb2MtPmN1cmNoaXAgPSBjaGlwOwotCWRvYy0+Y3VyZmxvb3IgPSBmbG9vcjsKLX0KLQotI2RlZmluZSBDRFNOX0NUUkxfTVNLIChDRFNOX0NUUkxfQ0UgfCBDRFNOX0NUUkxfQ0xFIHwgQ0RTTl9DVFJMX0FMRSkKLQotc3RhdGljIHZvaWQgZG9jMjAweF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY3RybCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQotCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgewotCQlkb2MtPkNEU05Db250cm9sICY9IH5DRFNOX0NUUkxfTVNLOwotCQlkb2MtPkNEU05Db250cm9sIHw9IGN0cmwgJiBDRFNOX0NUUkxfTVNLOwotCQlpZiAoZGVidWcpCi0JCQlwcmludGsoImh3Y29udHJvbCglZCk6ICUwMnhcbiIsIGNtZCwgZG9jLT5DRFNOQ29udHJvbCk7Ci0JCVdyaXRlRE9DKGRvYy0+Q0RTTkNvbnRyb2wsIGRvY3B0ciwgQ0RTTkNvbnRyb2wpOwotCQkvKiAxMS40LjMgLS0gNCBOT1BzIGFmdGVyIENTRE5Db250cm9sIHdyaXRlICovCi0JCURvQ19EZWxheShkb2MsIDQpOwotCX0KLQlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpIHsKLQkJaWYgKERvQ19pc18yMDAwKGRvYykpCi0JCQlkb2MyMDAwX3dyaXRlX2J5dGUobXRkLCBjbWQpOwotCQllbHNlCi0JCQlkb2MyMDAxX3dyaXRlX2J5dGUobXRkLCBjbWQpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZG9jMjAwMXBsdXNfY29tbWFuZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQotCS8qCi0JICogTXVzdCB0ZXJtaW5hdGUgd3JpdGUgcGlwZWxpbmUgYmVmb3JlIHNlbmRpbmcgYW55IGNvbW1hbmRzCi0JICogdG8gdGhlIGRldmljZS4KLQkgKi8KLQlpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9QQUdFUFJPRykgewotCQlXcml0ZURPQygweDAwLCBkb2NwdHIsIE1wbHVzX1dyaXRlUGlwZVRlcm0pOwotCQlXcml0ZURPQygweDAwLCBkb2NwdHIsIE1wbHVzX1dyaXRlUGlwZVRlcm0pOwotCX0KLQotCS8qCi0JICogV3JpdGUgb3V0IHRoZSBjb21tYW5kIHRvIHRoZSBkZXZpY2UuCi0JICovCi0JaWYgKGNvbW1hbmQgPT0gTkFORF9DTURfU0VRSU4pIHsKLQkJaW50IHJlYWRjbWQ7Ci0KLQkJaWYgKGNvbHVtbiA+PSBtdGQtPndyaXRlc2l6ZSkgewotCQkJLyogT09CIGFyZWEgKi8KLQkJCWNvbHVtbiAtPSBtdGQtPndyaXRlc2l6ZTsKLQkJCXJlYWRjbWQgPSBOQU5EX0NNRF9SRUFET09COwotCQl9IGVsc2UgaWYgKGNvbHVtbiA8IDI1NikgewotCQkJLyogRmlyc3QgMjU2IGJ5dGVzIC0tPiBSRUFEMCAqLwotCQkJcmVhZGNtZCA9IE5BTkRfQ01EX1JFQUQwOwotCQl9IGVsc2UgewotCQkJY29sdW1uIC09IDI1NjsKLQkJCXJlYWRjbWQgPSBOQU5EX0NNRF9SRUFEMTsKLQkJfQotCQlXcml0ZURPQyhyZWFkY21kLCBkb2NwdHIsIE1wbHVzX0ZsYXNoQ21kKTsKLQl9Ci0JV3JpdGVET0MoY29tbWFuZCwgZG9jcHRyLCBNcGx1c19GbGFzaENtZCk7Ci0JV3JpdGVET0MoMCwgZG9jcHRyLCBNcGx1c19Xcml0ZVBpcGVUZXJtKTsKLQlXcml0ZURPQygwLCBkb2NwdHIsIE1wbHVzX1dyaXRlUGlwZVRlcm0pOwotCi0JaWYgKGNvbHVtbiAhPSAtMSB8fCBwYWdlX2FkZHIgIT0gLTEpIHsKLQkJLyogU2VyaWFsbHkgaW5wdXQgYWRkcmVzcyAqLwotCQlpZiAoY29sdW1uICE9IC0xKSB7Ci0JCQkvKiBBZGp1c3QgY29sdW1ucyBmb3IgMTYgYml0IGJ1c3dpZHRoICovCi0JCQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCi0JCQkJY29sdW1uID4+PSAxOwotCQkJV3JpdGVET0MoY29sdW1uLCBkb2NwdHIsIE1wbHVzX0ZsYXNoQWRkcmVzcyk7Ci0JCX0KLQkJaWYgKHBhZ2VfYWRkciAhPSAtMSkgewotCQkJV3JpdGVET0MoKHVuc2lnbmVkIGNoYXIpKHBhZ2VfYWRkciAmIDB4ZmYpLCBkb2NwdHIsIE1wbHVzX0ZsYXNoQWRkcmVzcyk7Ci0JCQlXcml0ZURPQygodW5zaWduZWQgY2hhcikoKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYpLCBkb2NwdHIsIE1wbHVzX0ZsYXNoQWRkcmVzcyk7Ci0JCQkvKiBPbmUgbW9yZSBhZGRyZXNzIGN5Y2xlIGZvciBoaWdoZXIgZGVuc2l0eSBkZXZpY2VzICovCi0JCQlpZiAodGhpcy0+Y2hpcHNpemUgJiAweDBjMDAwMDAwKSB7Ci0JCQkJV3JpdGVET0MoKHVuc2lnbmVkIGNoYXIpKChwYWdlX2FkZHIgPj4gMTYpICYgMHgwZiksIGRvY3B0ciwgTXBsdXNfRmxhc2hBZGRyZXNzKTsKLQkJCQlwcmludGsoImhpZ2ggZGVuc2l0eVxuIik7Ci0JCQl9Ci0JCX0KLQkJV3JpdGVET0MoMCwgZG9jcHRyLCBNcGx1c19Xcml0ZVBpcGVUZXJtKTsKLQkJV3JpdGVET0MoMCwgZG9jcHRyLCBNcGx1c19Xcml0ZVBpcGVUZXJtKTsKLQkJLyogZGVhc3NlcnQgQUxFICovCi0JCWlmIChjb21tYW5kID09IE5BTkRfQ01EX1JFQUQwIHx8IGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRDEgfHwKLQkJICAgIGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRE9PQiB8fCBjb21tYW5kID09IE5BTkRfQ01EX1JFQURJRCkKLQkJCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfRmxhc2hDb250cm9sKTsKLQl9Ci0KLQkvKgotCSAqIHByb2dyYW0gYW5kIGVyYXNlIGhhdmUgdGhlaXIgb3duIGJ1c3kgaGFuZGxlcnMKLQkgKiBzdGF0dXMgYW5kIHNlcXVlbnRpYWwgaW4gbmVlZHMgbm8gZGVsYXkKLQkgKi8KLQlzd2l0Y2ggKGNvbW1hbmQpIHsKLQotCWNhc2UgTkFORF9DTURfUEFHRVBST0c6Ci0JY2FzZSBOQU5EX0NNRF9FUkFTRTE6Ci0JY2FzZSBOQU5EX0NNRF9FUkFTRTI6Ci0JY2FzZSBOQU5EX0NNRF9TRVFJTjoKLQljYXNlIE5BTkRfQ01EX1NUQVRVUzoKLQkJcmV0dXJuOwotCi0JY2FzZSBOQU5EX0NNRF9SRVNFVDoKLQkJaWYgKHRoaXMtPmRldl9yZWFkeSkKLQkJCWJyZWFrOwotCQl1ZGVsYXkodGhpcy0+Y2hpcF9kZWxheSk7Ci0JCVdyaXRlRE9DKE5BTkRfQ01EX1NUQVRVUywgZG9jcHRyLCBNcGx1c19GbGFzaENtZCk7Ci0JCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfV3JpdGVQaXBlVGVybSk7Ci0JCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfV3JpdGVQaXBlVGVybSk7Ci0JCXdoaWxlICghKHRoaXMtPnJlYWRfYnl0ZShtdGQpICYgMHg0MCkpIDsKLQkJcmV0dXJuOwotCi0JCS8qIFRoaXMgYXBwbGllcyB0byByZWFkIGNvbW1hbmRzICovCi0JZGVmYXVsdDoKLQkJLyoKLQkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGJ1c3kgcGluLCB3ZSBhcHBseSB0aGUgZ2l2ZW4KLQkJICogY29tbWFuZCBkZWxheQotCQkgKi8KLQkJaWYgKCF0aGlzLT5kZXZfcmVhZHkpIHsKLQkJCXVkZWxheSh0aGlzLT5jaGlwX2RlbGF5KTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCS8qIEFwcGx5IHRoaXMgc2hvcnQgZGVsYXkgYWx3YXlzIHRvIGVuc3VyZSB0aGF0IHdlIGRvIHdhaXQgdFdCIGluCi0JICogYW55IGNhc2Ugb24gYW55IG1hY2hpbmUuICovCi0JbmRlbGF5KDEwMCk7Ci0JLyogd2FpdCB1bnRpbCBjb21tYW5kIGlzIHByb2Nlc3NlZCAqLwotCXdoaWxlICghdGhpcy0+ZGV2X3JlYWR5KG10ZCkpIDsKLX0KLQotc3RhdGljIGludCBkb2MyMDB4X2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQotCWlmIChEb0NfaXNfTWlsbGVubml1bVBsdXMoZG9jKSkgewotCQkvKiAxMS40LjIgLS0gbXVzdCBOT1AgZm91ciB0aW1lcyBiZWZvcmUgY2hlY2tpbmcgRlIvQiMgKi8KLQkJRG9DX0RlbGF5KGRvYywgNCk7Ci0JCWlmICgoUmVhZERPQyhkb2NwdHIsIE1wbHVzX0ZsYXNoQ29udHJvbCkgJiBDRFNOX0NUUkxfRlJfQl9NQVNLKSAhPSBDRFNOX0NUUkxfRlJfQl9NQVNLKSB7Ci0JCQlpZiAoZGVidWcpCi0JCQkJcHJpbnRrKCJub3QgcmVhZHlcbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaWYgKGRlYnVnKQotCQkJcHJpbnRrKCJ3YXMgcmVhZHlcbiIpOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UgewotCQkvKiAxMS40LjIgLS0gbXVzdCBOT1AgZm91ciB0aW1lcyBiZWZvcmUgY2hlY2tpbmcgRlIvQiMgKi8KLQkJRG9DX0RlbGF5KGRvYywgNCk7Ci0JCWlmICghKFJlYWRET0MoZG9jcHRyLCBDRFNOQ29udHJvbCkgJiBDRFNOX0NUUkxfRlJfQikpIHsKLQkJCWlmIChkZWJ1ZykKLQkJCQlwcmludGsoIm5vdCByZWFkeVxuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQkvKiAxMS40LjIgLS0gTXVzdCBOT1AgdHdpY2UgaWYgaXQncyByZWFkeSAqLwotCQlEb0NfRGVsYXkoZG9jLCAyKTsKLQkJaWYgKGRlYnVnKQotCQkJcHJpbnRrKCJ3YXMgcmVhZHlcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgZG9jMjAweF9ibG9ja19iYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIGludCBnZXRjaGlwKQotewotCS8qIFRoaXMgaXMgb3VyIGxhc3QgcmVzb3J0IGlmIHdlIGNvdWxkbid0IGZpbmQgb3IgY3JlYXRlIGEgQkJULiAgSnVzdAotCSAgIHByZXRlbmQgYWxsIGJsb2NrcyBhcmUgZ29vZC4gKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZG9jMjAweF9lbmFibGVfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwotCi0JLyogUHJpbWUgdGhlIEVDQyBlbmdpbmUgKi8KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIE5BTkRfRUNDX1JFQUQ6Ci0JCVdyaXRlRE9DKERPQ19FQ0NfUkVTRVQsIGRvY3B0ciwgRUNDQ29uZik7Ci0JCVdyaXRlRE9DKERPQ19FQ0NfRU4sIGRvY3B0ciwgRUNDQ29uZik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9FQ0NfV1JJVEU6Ci0JCVdyaXRlRE9DKERPQ19FQ0NfUkVTRVQsIGRvY3B0ciwgRUNDQ29uZik7Ci0JCVdyaXRlRE9DKERPQ19FQ0NfRU4gfCBET0NfRUNDX1JXLCBkb2NwdHIsIEVDQ0NvbmYpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRvYzIwMDFwbHVzX2VuYWJsZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1vZGUpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0Jdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7Ci0KLQkvKiBQcmltZSB0aGUgRUNDIGVuZ2luZSAqLwotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgTkFORF9FQ0NfUkVBRDoKLQkJV3JpdGVET0MoRE9DX0VDQ19SRVNFVCwgZG9jcHRyLCBNcGx1c19FQ0NDb25mKTsKLQkJV3JpdGVET0MoRE9DX0VDQ19FTiwgZG9jcHRyLCBNcGx1c19FQ0NDb25mKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0VDQ19XUklURToKLQkJV3JpdGVET0MoRE9DX0VDQ19SRVNFVCwgZG9jcHRyLCBNcGx1c19FQ0NDb25mKTsKLQkJV3JpdGVET0MoRE9DX0VDQ19FTiB8IERPQ19FQ0NfUlcsIGRvY3B0ciwgTXBsdXNfRUNDQ29uZik7Ci0JCWJyZWFrOwotCX0KLX0KLQotLyogVGhpcyBjb2RlIGlzIG9ubHkgY2FsbGVkIG9uIHdyaXRlICovCi1zdGF0aWMgaW50IGRvYzIwMHhfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsIHVuc2lnbmVkIGNoYXIgKmVjY19jb2RlKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwotCWludCBpOwotCWludCBlbXB0eW1hdGNoID0gMTsKLQotCS8qIGZsdXNoIHRoZSBwaXBlbGluZSAqLwotCWlmIChEb0NfaXNfMjAwMChkb2MpKSB7Ci0JCVdyaXRlRE9DKGRvYy0+Q0RTTkNvbnRyb2wgJiB+Q0RTTl9DVFJMX0ZMQVNIX0lPLCBkb2NwdHIsIENEU05Db250cm9sKTsKLQkJV3JpdGVET0MoMCwgZG9jcHRyLCAya19DRFNOX0lPKTsKLQkJV3JpdGVET0MoMCwgZG9jcHRyLCAya19DRFNOX0lPKTsKLQkJV3JpdGVET0MoMCwgZG9jcHRyLCAya19DRFNOX0lPKTsKLQkJV3JpdGVET0MoZG9jLT5DRFNOQ29udHJvbCwgZG9jcHRyLCBDRFNOQ29udHJvbCk7Ci0JfSBlbHNlIGlmIChEb0NfaXNfTWlsbGVubml1bVBsdXMoZG9jKSkgewotCQlXcml0ZURPQygwLCBkb2NwdHIsIE1wbHVzX05PUCk7Ci0JCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfTk9QKTsKLQkJV3JpdGVET0MoMCwgZG9jcHRyLCBNcGx1c19OT1ApOwotCX0gZWxzZSB7Ci0JCVdyaXRlRE9DKDAsIGRvY3B0ciwgTk9QKTsKLQkJV3JpdGVET0MoMCwgZG9jcHRyLCBOT1ApOwotCQlXcml0ZURPQygwLCBkb2NwdHIsIE5PUCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQlpZiAoRG9DX2lzX01pbGxlbm5pdW1QbHVzKGRvYykpCi0JCQllY2NfY29kZVtpXSA9IFJlYWRET0NfKGRvY3B0ciwgRG9DX01wbHVzX0VDQ1N5bmRyb21lMCArIGkpOwotCQllbHNlCi0JCQllY2NfY29kZVtpXSA9IFJlYWRET0NfKGRvY3B0ciwgRG9DX0VDQ1N5bmRyb21lMCArIGkpOwotCQlpZiAoZWNjX2NvZGVbaV0gIT0gZW1wdHlfd3JpdGVfZWNjW2ldKQotCQkJZW1wdHltYXRjaCA9IDA7Ci0JfQotCWlmIChEb0NfaXNfTWlsbGVubml1bVBsdXMoZG9jKSkKLQkJV3JpdGVET0MoRE9DX0VDQ19ESVMsIGRvY3B0ciwgTXBsdXNfRUNDQ29uZik7Ci0JZWxzZQotCQlXcml0ZURPQyhET0NfRUNDX0RJUywgZG9jcHRyLCBFQ0NDb25mKTsKLSNpZiAwCi0JLyogSWYgZW1wdHltYXRjaD0xLCB3ZSBtaWdodCBoYXZlIGFuIGFsbC0weGZmIGRhdGEgYnVmZmVyLiAgQ2hlY2suICovCi0JaWYgKGVtcHR5bWF0Y2gpIHsKLQkJLyogTm90ZTogdGhpcyBzb21ld2hhdCBleHBlbnNpdmUgdGVzdCBzaG91bGQgbm90IGJlIHRyaWdnZXJlZAotCQkgICBvZnRlbi4gIEl0IGNvdWxkIGJlIG9wdGltaXplZCBhd2F5IGJ5IGV4YW1pbmluZyB0aGUgZGF0YSBpbgotCQkgICB0aGUgd3JpdGVidWYgcm91dGluZSwgYW5kIHJlbWVtYmVyaW5nIHRoZSByZXN1bHQuICovCi0JCWZvciAoaSA9IDA7IGkgPCA1MTI7IGkrKykgewotCQkJaWYgKGRhdFtpXSA9PSAweGZmKQotCQkJCWNvbnRpbnVlOwotCQkJZW1wdHltYXRjaCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQkvKiBJZiBlbXB0eW1hdGNoIHN0aWxsID0xLCB3ZSBkbyBoYXZlIGFuIGFsbC0weGZmIGRhdGEgYnVmZmVyLgotCSAgIFJldHVybiBhbGwtMHhmZiBlY2MgdmFsdWUgaW5zdGVhZCBvZiB0aGUgY29tcHV0ZWQgb25lLCBzbwotCSAgIGl0J2xsIGxvb2sganVzdCBsaWtlIGEgZnJlc2hseS1lcmFzZWQgcGFnZS4gKi8KLQlpZiAoZW1wdHltYXRjaCkKLQkJbWVtc2V0KGVjY19jb2RlLCAweGZmLCA2KTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRvYzIwMHhfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwKLQkJCQl1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmlzbnVsbCkKLXsKLQlpbnQgaSwgcmV0ID0gMDsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLQl1aW50OF90IGNhbGNfZWNjWzZdOwotCXZvbGF0aWxlIHVfY2hhciBkdW1teTsKLQlpbnQgZW1wdHltYXRjaCA9IDE7Ci0KLQkvKiBmbHVzaCB0aGUgcGlwZWxpbmUgKi8KLQlpZiAoRG9DX2lzXzIwMDAoZG9jKSkgewotCQlkdW1teSA9IFJlYWRET0MoZG9jcHRyLCAya19FQ0NTdGF0dXMpOwotCQlkdW1teSA9IFJlYWRET0MoZG9jcHRyLCAya19FQ0NTdGF0dXMpOwotCQlkdW1teSA9IFJlYWRET0MoZG9jcHRyLCAya19FQ0NTdGF0dXMpOwotCX0gZWxzZSBpZiAoRG9DX2lzX01pbGxlbm5pdW1QbHVzKGRvYykpIHsKLQkJZHVtbXkgPSBSZWFkRE9DKGRvY3B0ciwgTXBsdXNfRUNDQ29uZik7Ci0JCWR1bW15ID0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0VDQ0NvbmYpOwotCQlkdW1teSA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19FQ0NDb25mKTsKLQl9IGVsc2UgewotCQlkdW1teSA9IFJlYWRET0MoZG9jcHRyLCBFQ0NDb25mKTsKLQkJZHVtbXkgPSBSZWFkRE9DKGRvY3B0ciwgRUNDQ29uZik7Ci0JCWR1bW15ID0gUmVhZERPQyhkb2NwdHIsIEVDQ0NvbmYpOwotCX0KLQotCS8qIEVycm9yIG9jY3VyZWQgPyAqLwotCWlmIChkdW1teSAmIDB4ODApIHsKLQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQkJaWYgKERvQ19pc19NaWxsZW5uaXVtUGx1cyhkb2MpKQotCQkJCWNhbGNfZWNjW2ldID0gUmVhZERPQ18oZG9jcHRyLCBEb0NfTXBsdXNfRUNDU3luZHJvbWUwICsgaSk7Ci0JCQllbHNlCi0JCQkJY2FsY19lY2NbaV0gPSBSZWFkRE9DXyhkb2NwdHIsIERvQ19FQ0NTeW5kcm9tZTAgKyBpKTsKLQkJCWlmIChjYWxjX2VjY1tpXSAhPSBlbXB0eV9yZWFkX3N5bmRyb21lW2ldKQotCQkJCWVtcHR5bWF0Y2ggPSAwOwotCQl9Ci0JCS8qIElmIGVtcHR5bWF0Y2g9MSwgdGhlIHJlYWQgc3luZHJvbWUgaXMgY29uc2lzdGVudCB3aXRoIGFuCi0JCSAgIGFsbC0weGZmIGRhdGEgYW5kIHN0b3JlZCBlY2MgYmxvY2suICBDaGVjayB0aGUgc3RvcmVkIGVjYy4gKi8KLQkJaWYgKGVtcHR5bWF0Y2gpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLQkJCQlpZiAocmVhZF9lY2NbaV0gPT0gMHhmZikKLQkJCQkJY29udGludWU7Ci0JCQkJZW1wdHltYXRjaCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJLyogSWYgZW1wdHltYXRjaCBzdGlsbCA9MSwgY2hlY2sgdGhlIGRhdGEgYmxvY2suICovCi0JCWlmIChlbXB0eW1hdGNoKSB7Ci0JCQkvKiBOb3RlOiB0aGlzIHNvbWV3aGF0IGV4cGVuc2l2ZSB0ZXN0IHNob3VsZCBub3QgYmUgdHJpZ2dlcmVkCi0JCQkgICBvZnRlbi4gIEl0IGNvdWxkIGJlIG9wdGltaXplZCBhd2F5IGJ5IGV4YW1pbmluZyB0aGUgZGF0YSBpbgotCQkJICAgdGhlIHJlYWRidWYgcm91dGluZSwgYW5kIHJlbWVtYmVyaW5nIHRoZSByZXN1bHQuICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgNTEyOyBpKyspIHsKLQkJCQlpZiAoZGF0W2ldID09IDB4ZmYpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWVtcHR5bWF0Y2ggPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCS8qIElmIGVtcHR5bWF0Y2ggc3RpbGwgPTEsIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhIGZyZXNobHktCi0JCSAgIGVyYXNlZCBibG9jaywgaW4gd2hpY2ggY2FzZSB0aGUgRUNDIHdpbGwgbm90IGNvbWUgb3V0IHJpZ2h0LgotCQkgICBXZSdsbCBzdXBwcmVzcyB0aGUgZXJyb3IgYW5kIHRlbGwgdGhlIGNhbGxlciBldmVyeXRoaW5nJ3MKLQkJICAgT0suICBCZWNhdXNlIGl0IGlzLiAqLwotCQlpZiAoIWVtcHR5bWF0Y2gpCi0JCQlyZXQgPSBkb2NfZWNjX2RlY29kZShyc19kZWNvZGVyLCBkYXQsIGNhbGNfZWNjKTsKLQkJaWYgKHJldCA+IDApCi0JCQlwcmludGsoS0VSTl9FUlIgImRvYzIwMHhfY29ycmVjdF9kYXRhIGNvcnJlY3RlZCAlZCBlcnJvcnNcbiIsIHJldCk7Ci0JfQotCWlmIChEb0NfaXNfTWlsbGVubml1bVBsdXMoZG9jKSkKLQkJV3JpdGVET0MoRE9DX0VDQ19ESVMsIGRvY3B0ciwgTXBsdXNfRUNDQ29uZik7Ci0JZWxzZQotCQlXcml0ZURPQyhET0NfRUNDX0RJUywgZG9jcHRyLCBFQ0NDb25mKTsKLQlpZiAobm9fZWNjX2ZhaWx1cmVzICYmIG10ZF9pc19lY2NlcnIocmV0KSkgewotCQlwcmludGsoS0VSTl9FUlIgInN1cHByZXNzaW5nIEVDQyBmYWlsdXJlXG4iKTsKLQkJcmV0ID0gMDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyp1X2NoYXIgbXlkYXRhYnVmWzUyOF07ICovCi0KLS8qIFRoZSBzdHJhbmdlIG91dC1vZi1vcmRlciAub29iZnJlZSBsaXN0IGJlbG93IGlzIGEgKHBvc3NpYmx5IHVubmVlZGVkKQotICogYXR0ZW1wdCB0byByZXRhaW4gY29tcGF0aWJpbGl0eS4gIEl0IHVzZWQgdG8gcmVhZDoKLSAqIAkub29iZnJlZSA9IHsgezgsIDh9IH0KLSAqIFNpbmNlIHRoYXQgbGVhdmVzIHR3byBieXRlcyB1bnVzYWJsZSwgaXQgd2FzIGNoYW5nZWQuICBCdXQgdGhlIGZvbGxvd2luZwotICogc2NoZW1lIG1pZ2h0IGFmZmVjdCBleGlzdGluZyBqZmZzMiBpbnN0YWxscyBieSBtb3ZpbmcgdGhlIGNsZWFubWFya2VyOgotICogCS5vb2JmcmVlID0geyB7NiwgMTB9IH0KLSAqIGpmZnMyIHNlZW1zIHRvIGhhbmRsZSB0aGUgYWJvdmUgZ3JhY2VmdWxseSwgYnV0IHRoZSBjdXJyZW50IHNjaGVtZSBzZWVtcwotICogc2FmZXIuICBUaGUgb25seSBwcm9ibGVtIHdpdGggaXQgaXMgdGhhdCBhbnkgY29kZSB0aGF0IHBhcnNlcyBvb2JmcmVlIG11c3QKLSAqIGJlIGFibGUgdG8gaGFuZGxlIG91dC1vZi1vcmRlciBzZWdtZW50cy4KLSAqLwotc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBkb2MyMDB4X29vYmluZm8gPSB7Ci0JLmVjY2J5dGVzID0gNiwKLQkuZWNjcG9zID0gezAsIDEsIDIsIDMsIDQsIDV9LAotCS5vb2JmcmVlID0ge3s4LCA4fSwgezYsIDJ9fQotfTsKLQotLyogRmluZCB0aGUgKEkpTkZUTCBNZWRpYSBIZWFkZXIsIGFuZCBvcHRpb25hbGx5IGFsc28gdGhlIG1pcnJvciBtZWRpYSBoZWFkZXIuCi0gICBPbiBzdWNlc3NmdWwgcmV0dXJuLCBidWYgd2lsbCBjb250YWluIGEgY29weSBvZiB0aGUgbWVkaWEgaGVhZGVyIGZvcgotICAgZnVydGhlciBwcm9jZXNzaW5nLiAgaWQgaXMgdGhlIHN0cmluZyB0byBzY2FuIGZvciwgYW5kIHdpbGwgcHJlc3VtYWJseSBiZQotICAgZWl0aGVyICJBTkFORCIgb3IgIkJOQU5EIi4gIElmIGZpbmRtaXJyb3I9MSwgYWxzbyBsb29rIGZvciB0aGUgbWlycm9yIG1lZGlhCi0gICBoZWFkZXIuICBUaGUgcGFnZSAjcyBvZiB0aGUgZm91bmQgbWVkaWEgaGVhZGVycyBhcmUgcGxhY2VkIGluIG1oMF9wYWdlIGFuZAotICAgbWgxX3BhZ2UgaW4gdGhlIERPQyBwcml2YXRlIHN0cnVjdHVyZS4gKi8KLXN0YXRpYyBpbnQgX19pbml0IGZpbmRfbWVkaWFfaGVhZGVycyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGNvbnN0IGNoYXIgKmlkLCBpbnQgZmluZG1pcnJvcikKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQl1bnNpZ25lZCBvZmZzOwotCWludCByZXQ7Ci0Jc2l6ZV90IHJldGxlbjsKLQotCWZvciAob2ZmcyA9IDA7IG9mZnMgPCBtdGQtPnNpemU7IG9mZnMgKz0gbXRkLT5lcmFzZXNpemUpIHsKLQkJcmV0ID0gbXRkX3JlYWQobXRkLCBvZmZzLCBtdGQtPndyaXRlc2l6ZSwgJnJldGxlbiwgYnVmKTsKLQkJaWYgKHJldGxlbiAhPSBtdGQtPndyaXRlc2l6ZSkKLQkJCWNvbnRpbnVlOwotCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJFQ0MgZXJyb3Igc2Nhbm5pbmcgRE9DIGF0IDB4JXhcbiIsIG9mZnMpOwotCQl9Ci0JCWlmIChtZW1jbXAoYnVmLCBpZCwgNikpCi0JCQljb250aW51ZTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgRGlza09uQ2hpcCAlcyBNZWRpYSBIZWFkZXIgYXQgMHgleFxuIiwgaWQsIG9mZnMpOwotCQlpZiAoZG9jLT5taDBfcGFnZSA9PSAtMSkgewotCQkJZG9jLT5taDBfcGFnZSA9IG9mZnMgPj4gdGhpcy0+cGFnZV9zaGlmdDsKLQkJCWlmICghZmluZG1pcnJvcikKLQkJCQlyZXR1cm4gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWRvYy0+bWgxX3BhZ2UgPSBvZmZzID4+IHRoaXMtPnBhZ2Vfc2hpZnQ7Ci0JCXJldHVybiAyOwotCX0KLQlpZiAoZG9jLT5taDBfcGFnZSA9PSAtMSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJEaXNrT25DaGlwICVzIE1lZGlhIEhlYWRlciBub3QgZm91bmQuXG4iLCBpZCk7Ci0JCXJldHVybiAwOwotCX0KLQkvKiBPbmx5IG9uZSBtZWRpYWhlYWRlciB3YXMgZm91bmQuICBXZSB3YW50IGJ1ZiB0byBjb250YWluIGEKLQkgICBtZWRpYWhlYWRlciBvbiByZXR1cm4sIHNvIHdlJ2xsIGhhdmUgdG8gcmUtcmVhZCB0aGUgb25lIHdlIGZvdW5kLiAqLwotCW9mZnMgPSBkb2MtPm1oMF9wYWdlIDw8IHRoaXMtPnBhZ2Vfc2hpZnQ7Ci0JcmV0ID0gbXRkX3JlYWQobXRkLCBvZmZzLCBtdGQtPndyaXRlc2l6ZSwgJnJldGxlbiwgYnVmKTsKLQlpZiAocmV0bGVuICE9IG10ZC0+d3JpdGVzaXplKSB7Ci0JCS8qIEluc2FuaXR5LiAgR2l2ZSB1cC4gKi8KLQkJcHJpbnRrKEtFUk5fRVJSICJSZWFkIERpc2tPbkNoaXAgTWVkaWEgSGVhZGVyIG9uY2UsIGJ1dCBjYW4ndCByZXJlYWQgaXQ/Pz9cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBuZnRsX3BhcnRzY2FuKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0JaW50IHJldCA9IDA7Ci0JdV9jaGFyICpidWY7Ci0Jc3RydWN0IE5GVExNZWRpYUhlYWRlciAqbWg7Ci0JY29uc3QgdW5zaWduZWQgcHNpemUgPSAxIDw8IHRoaXMtPnBhZ2Vfc2hpZnQ7Ci0JaW50IG51bXBhcnRzID0gMDsKLQl1bnNpZ25lZCBibG9ja3MsIG1heGJsb2NrczsKLQlpbnQgb2ZmcywgbnVtaGVhZGVyczsKLQotCWJ1ZiA9IGttYWxsb2MobXRkLT53cml0ZXNpemUsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRGlza09uQ2hpcCBtZWRpYWhlYWRlciBrbWFsbG9jIGZhaWxlZCFcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKCEobnVtaGVhZGVycyA9IGZpbmRfbWVkaWFfaGVhZGVycyhtdGQsIGJ1ZiwgIkFOQU5EIiwgMSkpKQotCQlnb3RvIG91dDsKLQltaCA9IChzdHJ1Y3QgTkZUTE1lZGlhSGVhZGVyICopYnVmOwotCi0JbGUxNl90b19jcHVzKCZtaC0+TnVtRXJhc2VVbml0cyk7Ci0JbGUxNl90b19jcHVzKCZtaC0+Rmlyc3RQaHlzaWNhbEVVTik7Ci0JbGUzMl90b19jcHVzKCZtaC0+Rm9ybWF0dGVkU2l6ZSk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIgICAgRGF0YU9yZ0lEICAgICAgICA9ICVzXG4iCi0JCQkgIiAgICBOdW1FcmFzZVVuaXRzICAgID0gJWRcbiIKLQkJCSAiICAgIEZpcnN0UGh5c2ljYWxFVU4gPSAlZFxuIgotCQkJICIgICAgRm9ybWF0dGVkU2l6ZSAgICA9ICVkXG4iCi0JCQkgIiAgICBVbml0U2l6ZUZhY3RvciAgID0gJWRcbiIsCi0JCW1oLT5EYXRhT3JnSUQsIG1oLT5OdW1FcmFzZVVuaXRzLAotCQltaC0+Rmlyc3RQaHlzaWNhbEVVTiwgbWgtPkZvcm1hdHRlZFNpemUsCi0JCW1oLT5Vbml0U2l6ZUZhY3Rvcik7Ci0KLQlibG9ja3MgPSBtdGQtPnNpemUgPj4gdGhpcy0+cGh5c19lcmFzZV9zaGlmdDsKLQltYXhibG9ja3MgPSBtaW4oMzI3NjhVLCBtdGQtPmVyYXNlc2l6ZSAtIHBzaXplKTsKLQotCWlmIChtaC0+VW5pdFNpemVGYWN0b3IgPT0gMHgwMCkgewotCQkvKiBBdXRvLWRldGVybWluZSBVbml0U2l6ZUZhY3Rvci4gIFRoZSBjb25zdHJhaW50cyBhcmU6Ci0JCSAgIC0gVGhlcmUgY2FuIGJlIGF0IG1vc3QgMzI3NjggdmlydHVhbCBibG9ja3MuCi0JCSAgIC0gVGhlcmUgY2FuIGJlIGF0IG1vc3QgKHZpcnR1YWwgYmxvY2sgc2l6ZSAtIHBhZ2Ugc2l6ZSkKLQkJICAgdmlydHVhbCBibG9ja3MgKGJlY2F1c2UgTWVkaWFIZWFkZXIrQkJUIG11c3QgZml0IGluIDEpLgotCQkgKi8KLQkJbWgtPlVuaXRTaXplRmFjdG9yID0gMHhmZjsKLQkJd2hpbGUgKGJsb2NrcyA+IG1heGJsb2NrcykgewotCQkJYmxvY2tzID4+PSAxOwotCQkJbWF4YmxvY2tzID0gbWluKDMyNzY4VSwgKG1heGJsb2NrcyA8PCAxKSArIHBzaXplKTsKLQkJCW1oLT5Vbml0U2l6ZUZhY3Rvci0tOwotCQl9Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuaXRTaXplRmFjdG9yPTB4MDAgZGV0ZWN0ZWQuICBDb3JyZWN0IHZhbHVlIGlzIGFzc3VtZWQgdG8gYmUgMHglMDJ4LlxuIiwgbWgtPlVuaXRTaXplRmFjdG9yKTsKLQl9Ci0KLQkvKiBOT1RFOiBUaGUgbGluZXMgYmVsb3cgbW9kaWZ5IGludGVybmFsIHZhcmlhYmxlcyBvZiB0aGUgTkFORCBhbmQgTVRECi0JICAgbGF5ZXJzOyB2YXJpYWJsZXMgd2l0aCBoYXZlIGFscmVhZHkgYmVlbiBjb25maWd1cmVkIGJ5IG5hbmRfc2Nhbi4KLQkgICBVbmZvcnR1bmF0ZWx5LCB3ZSBkaWRuJ3Qga25vdyBiZWZvcmUgdGhpcyBwb2ludCB3aGF0IHRoZXNlIHZhbHVlcwotCSAgIHNob3VsZCBiZS4gIFRodXMsIHRoaXMgY29kZSBpcyBzb21ld2hhdCBkZXBlbmRhbnQgb24gdGhlIGV4YWN0Ci0JICAgaW1wbGVtZW50YXRpb24gb2YgdGhlIE5BTkQgbGF5ZXIuICAqLwotCWlmIChtaC0+VW5pdFNpemVGYWN0b3IgIT0gMHhmZikgewotCQl0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgKz0gKDB4ZmYgLSBtaC0+VW5pdFNpemVGYWN0b3IpOwotCQltdGQtPmVyYXNlc2l6ZSA8PD0gKDB4ZmYgLSBtaC0+VW5pdFNpemVGYWN0b3IpOwotCQlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIHZpcnR1YWwgZXJhc2Ugc2l6ZSB0byAlZFxuIiwgbXRkLT5lcmFzZXNpemUpOwotCQlibG9ja3MgPSBtdGQtPnNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0OwotCQltYXhibG9ja3MgPSBtaW4oMzI3NjhVLCBtdGQtPmVyYXNlc2l6ZSAtIHBzaXplKTsKLQl9Ci0KLQlpZiAoYmxvY2tzID4gbWF4YmxvY2tzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5pdFNpemVGYWN0b3Igb2YgMHglMDJ4IGlzIGluY29uc2lzdGVudCB3aXRoIGRldmljZSBzaXplLiAgQWJvcnRpbmcuXG4iLCBtaC0+VW5pdFNpemVGYWN0b3IpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBTa2lwIHBhc3QgdGhlIG1lZGlhIGhlYWRlcnMuICovCi0Jb2ZmcyA9IG1heChkb2MtPm1oMF9wYWdlLCBkb2MtPm1oMV9wYWdlKTsKLQlvZmZzIDw8PSB0aGlzLT5wYWdlX3NoaWZ0OwotCW9mZnMgKz0gbXRkLT5lcmFzZXNpemU7Ci0KLQlpZiAoc2hvd19maXJtd2FyZV9wYXJ0aXRpb24gPT0gMSkgewotCQlwYXJ0c1swXS5uYW1lID0gIiBEaXNrT25DaGlwIEZpcm13YXJlIC8gTWVkaWEgSGVhZGVyIHBhcnRpdGlvbiI7Ci0JCXBhcnRzWzBdLm9mZnNldCA9IDA7Ci0JCXBhcnRzWzBdLnNpemUgPSBvZmZzOwotCQludW1wYXJ0cyA9IDE7Ci0JfQotCi0JcGFydHNbbnVtcGFydHNdLm5hbWUgPSAiIERpc2tPbkNoaXAgQkRUTCBwYXJ0aXRpb24iOwotCXBhcnRzW251bXBhcnRzXS5vZmZzZXQgPSBvZmZzOwotCXBhcnRzW251bXBhcnRzXS5zaXplID0gKG1oLT5OdW1FcmFzZVVuaXRzIC0gbnVtaGVhZGVycykgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0OwotCi0Jb2ZmcyArPSBwYXJ0c1tudW1wYXJ0c10uc2l6ZTsKLQludW1wYXJ0cysrOwotCi0JaWYgKG9mZnMgPCBtdGQtPnNpemUpIHsKLQkJcGFydHNbbnVtcGFydHNdLm5hbWUgPSAiIERpc2tPbkNoaXAgUmVtYWluZGVyIHBhcnRpdGlvbiI7Ci0JCXBhcnRzW251bXBhcnRzXS5vZmZzZXQgPSBvZmZzOwotCQlwYXJ0c1tudW1wYXJ0c10uc2l6ZSA9IG10ZC0+c2l6ZSAtIG9mZnM7Ci0JCW51bXBhcnRzKys7Ci0JfQotCi0JcmV0ID0gbnVtcGFydHM7Ci0gb3V0OgotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogVGhpcyBpcyBhIHN0cmlwcGVkLWRvd24gY29weSBvZiB0aGUgY29kZSBpbiBpbmZ0bG1vdW50LmMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBpbmZ0bF9wYXJ0c2NhbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotCWludCByZXQgPSAwOwotCXVfY2hhciAqYnVmOwotCXN0cnVjdCBJTkZUTE1lZGlhSGVhZGVyICptaDsKLQlzdHJ1Y3QgSU5GVExQYXJ0aXRpb24gKmlwOwotCWludCBudW1wYXJ0cyA9IDA7Ci0JaW50IGJsb2NrczsKLQlpbnQgdnNoaWZ0LCBsYXN0dnVuaXQgPSAwOwotCWludCBpOwotCWludCBlbmQgPSBtdGQtPnNpemU7Ci0KLQlpZiAoaW5mdGxfYmJ0X3dyaXRlKQotCQllbmQgLT0gKElORlRMX0JCVF9SRVNFUlZFRF9CTE9DS1MgPDwgdGhpcy0+cGh5c19lcmFzZV9zaGlmdCk7Ci0KLQlidWYgPSBrbWFsbG9jKG10ZC0+d3JpdGVzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikgewotCQlwcmludGsoS0VSTl9FUlIgIkRpc2tPbkNoaXAgbWVkaWFoZWFkZXIga21hbGxvYyBmYWlsZWQhXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKCFmaW5kX21lZGlhX2hlYWRlcnMobXRkLCBidWYsICJCTkFORCIsIDApKQotCQlnb3RvIG91dDsKLQlkb2MtPm1oMV9wYWdlID0gZG9jLT5taDBfcGFnZSArICg0MDk2ID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCW1oID0gKHN0cnVjdCBJTkZUTE1lZGlhSGVhZGVyICopYnVmOwotCi0JbGUzMl90b19jcHVzKCZtaC0+Tm9PZkJvb3RJbWFnZUJsb2Nrcyk7Ci0JbGUzMl90b19jcHVzKCZtaC0+Tm9PZkJpbmFyeVBhcnRpdGlvbnMpOwotCWxlMzJfdG9fY3B1cygmbWgtPk5vT2ZCRFRMUGFydGl0aW9ucyk7Ci0JbGUzMl90b19jcHVzKCZtaC0+QmxvY2tNdWx0aXBsaWVyQml0cyk7Ci0JbGUzMl90b19jcHVzKCZtaC0+Rm9ybWF0RmxhZ3MpOwotCWxlMzJfdG9fY3B1cygmbWgtPlBlcmNlbnRVc2VkKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiAgICBib290UmVjb3JkSUQgICAgICAgICAgPSAlc1xuIgotCQkJICIgICAgTm9PZkJvb3RJbWFnZUJsb2NrcyAgID0gJWRcbiIKLQkJCSAiICAgIE5vT2ZCaW5hcnlQYXJ0aXRpb25zICA9ICVkXG4iCi0JCQkgIiAgICBOb09mQkRUTFBhcnRpdGlvbnMgICAgPSAlZFxuIgotCQkJICIgICAgQmxvY2tNdWx0aXBsZXJCaXRzICAgID0gJWRcbiIKLQkJCSAiICAgIEZvcm1hdEZsZ3MgICAgICAgICAgICA9ICVkXG4iCi0JCQkgIiAgICBPc2FrVmVyc2lvbiAgICAgICAgICAgPSAlZC4lZC4lZC4lZFxuIgotCQkJICIgICAgUGVyY2VudFVzZWQgICAgICAgICAgID0gJWRcbiIsCi0JCW1oLT5ib290UmVjb3JkSUQsIG1oLT5Ob09mQm9vdEltYWdlQmxvY2tzLAotCQltaC0+Tm9PZkJpbmFyeVBhcnRpdGlvbnMsCi0JCW1oLT5Ob09mQkRUTFBhcnRpdGlvbnMsCi0JCW1oLT5CbG9ja011bHRpcGxpZXJCaXRzLCBtaC0+Rm9ybWF0RmxhZ3MsCi0JCSgodW5zaWduZWQgY2hhciAqKSAmbWgtPk9zYWtWZXJzaW9uKVswXSAmIDB4ZiwKLQkJKCh1bnNpZ25lZCBjaGFyICopICZtaC0+T3Nha1ZlcnNpb24pWzFdICYgMHhmLAotCQkoKHVuc2lnbmVkIGNoYXIgKikgJm1oLT5Pc2FrVmVyc2lvbilbMl0gJiAweGYsCi0JCSgodW5zaWduZWQgY2hhciAqKSAmbWgtPk9zYWtWZXJzaW9uKVszXSAmIDB4ZiwKLQkJbWgtPlBlcmNlbnRVc2VkKTsKLQotCXZzaGlmdCA9IHRoaXMtPnBoeXNfZXJhc2Vfc2hpZnQgKyBtaC0+QmxvY2tNdWx0aXBsaWVyQml0czsKLQotCWJsb2NrcyA9IG10ZC0+c2l6ZSA+PiB2c2hpZnQ7Ci0JaWYgKGJsb2NrcyA+IDMyNzY4KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQmxvY2tNdWx0aXBsaWVyQml0cz0lZCBpcyBpbmNvbnNpc3RlbnQgd2l0aCBkZXZpY2Ugc2l6ZS4gIEFib3J0aW5nLlxuIiwgbWgtPkJsb2NrTXVsdGlwbGllckJpdHMpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlibG9ja3MgPSBkb2MtPmNoaXBzX3Blcl9mbG9vciA8PCAodGhpcy0+Y2hpcF9zaGlmdCAtIHRoaXMtPnBoeXNfZXJhc2Vfc2hpZnQpOwotCWlmIChpbmZ0bF9iYnRfd3JpdGUgJiYgKGJsb2NrcyA+IG10ZC0+ZXJhc2VzaXplKSkgewotCQlwcmludGsoS0VSTl9FUlIgIldyaXRlYWJsZSBCQlRzIHNwYW5uaW5nIG1vcmUgdGhhbiBvbmUgZXJhc2UgYmxvY2sgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLiAgRklYIE1FIVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFNjYW4gdGhlIHBhcnRpdGlvbnMgKi8KLQlmb3IgKGkgPSAwOyAoaSA8IDQpOyBpKyspIHsKLQkJaXAgPSAmKG1oLT5QYXJ0aXRpb25zW2ldKTsKLQkJbGUzMl90b19jcHVzKCZpcC0+dmlydHVhbFVuaXRzKTsKLQkJbGUzMl90b19jcHVzKCZpcC0+Zmlyc3RVbml0KTsKLQkJbGUzMl90b19jcHVzKCZpcC0+bGFzdFVuaXQpOwotCQlsZTMyX3RvX2NwdXMoJmlwLT5mbGFncyk7Ci0JCWxlMzJfdG9fY3B1cygmaXAtPnNwYXJlVW5pdHMpOwotCQlsZTMyX3RvX2NwdXMoJmlwLT5SZXNlcnZlZDApOwotCi0JCXByaW50ayhLRVJOX0lORk8JIiAgICBQQVJUSVRJT05bJWRdIC0+XG4iCi0JCQkiICAgICAgICB2aXJ0dWFsVW5pdHMgICAgPSAlZFxuIgotCQkJIiAgICAgICAgZmlyc3RVbml0ICAgICAgID0gJWRcbiIKLQkJCSIgICAgICAgIGxhc3RVbml0ICAgICAgICA9ICVkXG4iCi0JCQkiICAgICAgICBmbGFncyAgICAgICAgICAgPSAweCV4XG4iCi0JCQkiICAgICAgICBzcGFyZVVuaXRzICAgICAgPSAlZFxuIiwKLQkJCWksIGlwLT52aXJ0dWFsVW5pdHMsIGlwLT5maXJzdFVuaXQsCi0JCQlpcC0+bGFzdFVuaXQsIGlwLT5mbGFncywKLQkJCWlwLT5zcGFyZVVuaXRzKTsKLQotCQlpZiAoKHNob3dfZmlybXdhcmVfcGFydGl0aW9uID09IDEpICYmCi0JCSAgICAoaSA9PSAwKSAmJiAoaXAtPmZpcnN0VW5pdCA+IDApKSB7Ci0JCQlwYXJ0c1swXS5uYW1lID0gIiBEaXNrT25DaGlwIElQTCAvIE1lZGlhIEhlYWRlciBwYXJ0aXRpb24iOwotCQkJcGFydHNbMF0ub2Zmc2V0ID0gMDsKLQkJCXBhcnRzWzBdLnNpemUgPSBtdGQtPmVyYXNlc2l6ZSAqIGlwLT5maXJzdFVuaXQ7Ci0JCQludW1wYXJ0cyA9IDE7Ci0JCX0KLQotCQlpZiAoaXAtPmZsYWdzICYgSU5GVExfQklOQVJZKQotCQkJcGFydHNbbnVtcGFydHNdLm5hbWUgPSAiIERpc2tPbkNoaXAgQkRLIHBhcnRpdGlvbiI7Ci0JCWVsc2UKLQkJCXBhcnRzW251bXBhcnRzXS5uYW1lID0gIiBEaXNrT25DaGlwIEJEVEwgcGFydGl0aW9uIjsKLQkJcGFydHNbbnVtcGFydHNdLm9mZnNldCA9IGlwLT5maXJzdFVuaXQgPDwgdnNoaWZ0OwotCQlwYXJ0c1tudW1wYXJ0c10uc2l6ZSA9ICgxICsgaXAtPmxhc3RVbml0IC0gaXAtPmZpcnN0VW5pdCkgPDwgdnNoaWZ0OwotCQludW1wYXJ0cysrOwotCQlpZiAoaXAtPmxhc3RVbml0ID4gbGFzdHZ1bml0KQotCQkJbGFzdHZ1bml0ID0gaXAtPmxhc3RVbml0OwotCQlpZiAoaXAtPmZsYWdzICYgSU5GVExfTEFTVCkKLQkJCWJyZWFrOwotCX0KLQlsYXN0dnVuaXQrKzsKLQlpZiAoKGxhc3R2dW5pdCA8PCB2c2hpZnQpIDwgZW5kKSB7Ci0JCXBhcnRzW251bXBhcnRzXS5uYW1lID0gIiBEaXNrT25DaGlwIFJlbWFpbmRlciBwYXJ0aXRpb24iOwotCQlwYXJ0c1tudW1wYXJ0c10ub2Zmc2V0ID0gbGFzdHZ1bml0IDw8IHZzaGlmdDsKLQkJcGFydHNbbnVtcGFydHNdLnNpemUgPSBlbmQgLSBwYXJ0c1tudW1wYXJ0c10ub2Zmc2V0OwotCQludW1wYXJ0cysrOwotCX0KLQlyZXQgPSBudW1wYXJ0czsKLSBvdXQ6Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBuZnRsX3NjYW5fYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCWludCByZXQsIG51bXBhcnRzOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotCXN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRzWzJdOwotCi0JbWVtc2V0KChjaGFyICopcGFydHMsIDAsIHNpemVvZihwYXJ0cykpOwotCS8qIE9uIE5GVEwsIHdlIGhhdmUgdG8gZmluZCB0aGUgbWVkaWEgaGVhZGVycyBiZWZvcmUgd2UgY2FuIHJlYWQgdGhlCi0JICAgQkJUcywgc2luY2UgdGhleSdyZSBzdG9yZWQgaW4gdGhlIG1lZGlhIGhlYWRlciBlcmFzZWJsb2Nrcy4gKi8KLQludW1wYXJ0cyA9IG5mdGxfcGFydHNjYW4obXRkLCBwYXJ0cyk7Ci0JaWYgKCFudW1wYXJ0cykKLQkJcmV0dXJuIC1FSU87Ci0JdGhpcy0+YmJ0X3RkLT5vcHRpb25zID0gTkFORF9CQlRfQUJTUEFHRSB8IE5BTkRfQkJUXzhCSVQgfAotCQkJCU5BTkRfQkJUX1NBVkVDT05URU5UIHwgTkFORF9CQlRfV1JJVEUgfAotCQkJCU5BTkRfQkJUX1ZFUlNJT047Ci0JdGhpcy0+YmJ0X3RkLT52ZXJvZmZzID0gNzsKLQl0aGlzLT5iYnRfdGQtPnBhZ2VzWzBdID0gZG9jLT5taDBfcGFnZSArIDE7Ci0JaWYgKGRvYy0+bWgxX3BhZ2UgIT0gLTEpIHsKLQkJdGhpcy0+YmJ0X21kLT5vcHRpb25zID0gTkFORF9CQlRfQUJTUEFHRSB8IE5BTkRfQkJUXzhCSVQgfAotCQkJCQlOQU5EX0JCVF9TQVZFQ09OVEVOVCB8IE5BTkRfQkJUX1dSSVRFIHwKLQkJCQkJTkFORF9CQlRfVkVSU0lPTjsKLQkJdGhpcy0+YmJ0X21kLT52ZXJvZmZzID0gNzsKLQkJdGhpcy0+YmJ0X21kLT5wYWdlc1swXSA9IGRvYy0+bWgxX3BhZ2UgKyAxOwotCX0gZWxzZSB7Ci0JCXRoaXMtPmJidF9tZCA9IE5VTEw7Ci0JfQotCi0JLyogSXQncyBzYWZlIHRvIHNldCBiZD1OVUxMIGJlbG93IGJlY2F1c2UgTkFORF9CQlRfQ1JFQVRFIGlzIG5vdCBzZXQuCi0JICAgQXQgbGVhc3QgYXMgbmFuZF9iYnQuYyBpcyBjdXJyZW50bHkgd3JpdHRlbi4gKi8KLQlpZiAoKHJldCA9IG5hbmRfc2Nhbl9iYnQobXRkLCBOVUxMKSkpCi0JCXJldHVybiByZXQ7Ci0JYWRkX210ZF9kZXZpY2UobXRkKTsKLSNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKLQlpZiAoIW5vX2F1dG9wYXJ0KQotCQlhZGRfbXRkX3BhcnRpdGlvbnMobXRkLCBwYXJ0cywgbnVtcGFydHMpOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluZnRsX3NjYW5fYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCWludCByZXQsIG51bXBhcnRzOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotCXN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRzWzVdOwotCi0JaWYgKHRoaXMtPm51bWNoaXBzID4gZG9jLT5jaGlwc19wZXJfZmxvb3IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJNdWx0aS1mbG9vciBJTkZUTCBkZXZpY2VzIG5vdCB5ZXQgc3VwcG9ydGVkLlxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmIChEb0NfaXNfTWlsbGVubml1bVBsdXMoZG9jKSkgewotCQl0aGlzLT5iYnRfdGQtPm9wdGlvbnMgPSBOQU5EX0JCVF8yQklUIHwgTkFORF9CQlRfQUJTUEFHRTsKLQkJaWYgKGluZnRsX2JidF93cml0ZSkKLQkJCXRoaXMtPmJidF90ZC0+b3B0aW9ucyB8PSBOQU5EX0JCVF9XUklURTsKLQkJdGhpcy0+YmJ0X3RkLT5wYWdlc1swXSA9IDI7Ci0JCXRoaXMtPmJidF9tZCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJdGhpcy0+YmJ0X3RkLT5vcHRpb25zID0gTkFORF9CQlRfTEFTVEJMT0NLIHwgTkFORF9CQlRfOEJJVCB8IE5BTkRfQkJUX1ZFUlNJT047Ci0JCWlmIChpbmZ0bF9iYnRfd3JpdGUpCi0JCQl0aGlzLT5iYnRfdGQtPm9wdGlvbnMgfD0gTkFORF9CQlRfV1JJVEU7Ci0JCXRoaXMtPmJidF90ZC0+b2ZmcyA9IDg7Ci0JCXRoaXMtPmJidF90ZC0+bGVuID0gODsKLQkJdGhpcy0+YmJ0X3RkLT52ZXJvZmZzID0gNzsKLQkJdGhpcy0+YmJ0X3RkLT5tYXhibG9ja3MgPSBJTkZUTF9CQlRfUkVTRVJWRURfQkxPQ0tTOwotCQl0aGlzLT5iYnRfdGQtPnJlc2VydmVkX2Jsb2NrX2NvZGUgPSAweDAxOwotCQl0aGlzLT5iYnRfdGQtPnBhdHRlcm4gPSAiTVNZU19CQlQiOwotCi0JCXRoaXMtPmJidF9tZC0+b3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUXzhCSVQgfCBOQU5EX0JCVF9WRVJTSU9OOwotCQlpZiAoaW5mdGxfYmJ0X3dyaXRlKQotCQkJdGhpcy0+YmJ0X21kLT5vcHRpb25zIHw9IE5BTkRfQkJUX1dSSVRFOwotCQl0aGlzLT5iYnRfbWQtPm9mZnMgPSA4OwotCQl0aGlzLT5iYnRfbWQtPmxlbiA9IDg7Ci0JCXRoaXMtPmJidF9tZC0+dmVyb2ZmcyA9IDc7Ci0JCXRoaXMtPmJidF9tZC0+bWF4YmxvY2tzID0gSU5GVExfQkJUX1JFU0VSVkVEX0JMT0NLUzsKLQkJdGhpcy0+YmJ0X21kLT5yZXNlcnZlZF9ibG9ja19jb2RlID0gMHgwMTsKLQkJdGhpcy0+YmJ0X21kLT5wYXR0ZXJuID0gIlRCQl9TWVNNIjsKLQl9Ci0KLQkvKiBJdCdzIHNhZmUgdG8gc2V0IGJkPU5VTEwgYmVsb3cgYmVjYXVzZSBOQU5EX0JCVF9DUkVBVEUgaXMgbm90IHNldC4KLQkgICBBdCBsZWFzdCBhcyBuYW5kX2JidC5jIGlzIGN1cnJlbnRseSB3cml0dGVuLiAqLwotCWlmICgocmV0ID0gbmFuZF9zY2FuX2JidChtdGQsIE5VTEwpKSkKLQkJcmV0dXJuIHJldDsKLQltZW1zZXQoKGNoYXIgKilwYXJ0cywgMCwgc2l6ZW9mKHBhcnRzKSk7Ci0JbnVtcGFydHMgPSBpbmZ0bF9wYXJ0c2NhbihtdGQsIHBhcnRzKTsKLQkvKiBBdCBsZWFzdCBmb3Igbm93LCByZXF1aXJlIHRoZSBJTkZUTCBNZWRpYSBIZWFkZXIuICBXZSBjb3VsZCBwcm9iYWJseQotCSAgIGRvIHdpdGhvdXQgaXQgZm9yIG5vbi1JTkZUTCB1c2UsIHNpbmNlIGFsbCBpdCBnaXZlcyB1cyBpcwotCSAgIGF1dG9wYXJ0aXRpb25pbmcsIGJ1dCBJIHdhbnQgdG8gZ2l2ZSBpdCBtb3JlIHRob3VnaHQuICovCi0JaWYgKCFudW1wYXJ0cykKLQkJcmV0dXJuIC1FSU87Ci0JYWRkX210ZF9kZXZpY2UobXRkKTsKLSNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKLQlpZiAoIW5vX2F1dG9wYXJ0KQotCQlhZGRfbXRkX3BhcnRpdGlvbnMobXRkLCBwYXJ0cywgbnVtcGFydHMpOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBkb2MyMDAwX2luaXQoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0KLQl0aGlzLT5yZWFkX2J5dGUgPSBkb2MyMDAwX3JlYWRfYnl0ZTsKLQl0aGlzLT53cml0ZV9idWYgPSBkb2MyMDAwX3dyaXRlYnVmOwotCXRoaXMtPnJlYWRfYnVmID0gZG9jMjAwMF9yZWFkYnVmOwotCXRoaXMtPnZlcmlmeV9idWYgPSBkb2MyMDAwX3ZlcmlmeWJ1ZjsKLQl0aGlzLT5zY2FuX2JidCA9IG5mdGxfc2Nhbl9iYnQ7Ci0KLQlkb2MtPkNEU05Db250cm9sID0gQ0RTTl9DVFJMX0ZMQVNIX0lPIHwgQ0RTTl9DVFJMX0VDQ19JTzsKLQlkb2MyMDAwX2NvdW50X2NoaXBzKG10ZCk7Ci0JbXRkLT5uYW1lID0gIkRpc2tPbkNoaXAgMjAwMCAoTkZUTCBNb2RlbCkiOwotCXJldHVybiAoNCAqIGRvYy0+Y2hpcHNfcGVyX2Zsb29yKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19pbml0IGRvYzIwMDFfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQotCXRoaXMtPnJlYWRfYnl0ZSA9IGRvYzIwMDFfcmVhZF9ieXRlOwotCXRoaXMtPndyaXRlX2J1ZiA9IGRvYzIwMDFfd3JpdGVidWY7Ci0JdGhpcy0+cmVhZF9idWYgPSBkb2MyMDAxX3JlYWRidWY7Ci0JdGhpcy0+dmVyaWZ5X2J1ZiA9IGRvYzIwMDFfdmVyaWZ5YnVmOwotCi0JUmVhZERPQyhkb2MtPnZpcnRhZHIsIENoaXBJRCk7Ci0JUmVhZERPQyhkb2MtPnZpcnRhZHIsIENoaXBJRCk7Ci0JUmVhZERPQyhkb2MtPnZpcnRhZHIsIENoaXBJRCk7Ci0JaWYgKFJlYWRET0MoZG9jLT52aXJ0YWRyLCBDaGlwSUQpICE9IERPQ19DaGlwSURfRG9jTWlsKSB7Ci0JCS8qIEl0J3Mgbm90IGEgTWlsbGVubml1bTsgaXQncyBvbmUgb2YgdGhlIG5ld2VyCi0JCSAgIERpc2tPbkNoaXAgMjAwMCB1bml0cyB3aXRoIGEgc2ltaWxhciBBU0lDLgotCQkgICBUcmVhdCBpdCBsaWtlIGEgTWlsbGVubml1bSwgZXhjZXB0IHRoYXQgaXQKLQkJICAgY2FuIGhhdmUgbXVsdGlwbGUgY2hpcHMuICovCi0JCWRvYzIwMDBfY291bnRfY2hpcHMobXRkKTsKLQkJbXRkLT5uYW1lID0gIkRpc2tPbkNoaXAgMjAwMCAoSU5GVEwgTW9kZWwpIjsKLQkJdGhpcy0+c2Nhbl9iYnQgPSBpbmZ0bF9zY2FuX2JidDsKLQkJcmV0dXJuICg0ICogZG9jLT5jaGlwc19wZXJfZmxvb3IpOwotCX0gZWxzZSB7Ci0JCS8qIEJvZy1zdGFuZGFyZCBNaWxsZW5uaXVtICovCi0JCWRvYy0+Y2hpcHNfcGVyX2Zsb29yID0gMTsKLQkJbXRkLT5uYW1lID0gIkRpc2tPbkNoaXAgTWlsbGVubml1bSI7Ci0JCXRoaXMtPnNjYW5fYmJ0ID0gbmZ0bF9zY2FuX2JidDsKLQkJcmV0dXJuIDE7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX2luaXQgZG9jMjAwMXBsdXNfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLQotCXRoaXMtPnJlYWRfYnl0ZSA9IGRvYzIwMDFwbHVzX3JlYWRfYnl0ZTsKLQl0aGlzLT53cml0ZV9idWYgPSBkb2MyMDAxcGx1c193cml0ZWJ1ZjsKLQl0aGlzLT5yZWFkX2J1ZiA9IGRvYzIwMDFwbHVzX3JlYWRidWY7Ci0JdGhpcy0+dmVyaWZ5X2J1ZiA9IGRvYzIwMDFwbHVzX3ZlcmlmeWJ1ZjsKLQl0aGlzLT5zY2FuX2JidCA9IGluZnRsX3NjYW5fYmJ0OwotCXRoaXMtPmNtZF9jdHJsID0gTlVMTDsKLQl0aGlzLT5zZWxlY3RfY2hpcCA9IGRvYzIwMDFwbHVzX3NlbGVjdF9jaGlwOwotCXRoaXMtPmNtZGZ1bmMgPSBkb2MyMDAxcGx1c19jb21tYW5kOwotCXRoaXMtPmVjYy5od2N0bCA9IGRvYzIwMDFwbHVzX2VuYWJsZV9od2VjYzsKLQotCWRvYy0+Y2hpcHNfcGVyX2Zsb29yID0gMTsKLQltdGQtPm5hbWUgPSAiRGlza09uQ2hpcCBNaWxsZW5uaXVtIFBsdXMiOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRvY19wcm9iZSh1bnNpZ25lZCBsb25nIHBoeXNhZHIpCi17Ci0JdW5zaWduZWQgY2hhciBDaGlwSUQ7Ci0Jc3RydWN0IG10ZF9pbmZvICptdGQ7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqbmFuZDsKLQlzdHJ1Y3QgZG9jX3ByaXYgKmRvYzsKLQl2b2lkIF9faW9tZW0gKnZpcnRhZHI7Ci0JdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2w7Ci0JdW5zaWduZWQgY2hhciB0bXAsIHRtcGIsIHRtcGM7Ci0JaW50IHJlZywgbGVuLCBudW1jaGlwczsKLQlpbnQgcmV0ID0gMDsKLQotCXZpcnRhZHIgPSBpb3JlbWFwKHBoeXNhZHIsIERPQ19JT1JFTUFQX0xFTik7Ci0JaWYgKCF2aXJ0YWRyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRGlza29uY2hpcCBpb3JlbWFwIGZhaWxlZDogMHgleCBieXRlcyBhdCAweCVseFxuIiwgRE9DX0lPUkVNQVBfTEVOLCBwaHlzYWRyKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JLyogSXQncyBub3QgcG9zc2libGUgdG8gY2xlYW5seSBkZXRlY3QgdGhlIERpc2tPbkNoaXAgLSB0aGUKLQkgKiBib290dXAgcHJvY2VkdXJlIHdpbGwgcHV0IHRoZSBkZXZpY2UgaW50byByZXNldCBtb2RlLCBhbmQKLQkgKiBpdCdzIG5vdCBwb3NzaWJsZSB0byB0YWxrIHRvIGl0IHdpdGhvdXQgYWN0dWFsbHkgd3JpdGluZwotCSAqIHRvIHRoZSBET0NDb250cm9sIHJlZ2lzdGVyLiBTbyB3ZSBzdG9yZSB0aGUgY3VycmVudCBjb250ZW50cwotCSAqIG9mIHRoZSBET0NDb250cm9sIHJlZ2lzdGVyJ3MgbG9jYXRpb24sIGluIGNhc2Ugd2UgbGF0ZXIgZGVjaWRlCi0JICogdGhhdCBpdCdzIG5vdCBhIERpc2tPbkNoaXAsIGFuZCB3YW50IHRvIHB1dCBpdCBiYWNrIGhvdyB3ZQotCSAqIGZvdW5kIGl0LgotCSAqLwotCXNhdmVfY29udHJvbCA9IFJlYWRET0ModmlydGFkciwgRE9DQ29udHJvbCk7Ci0KLQkvKiBSZXNldCB0aGUgRGlza09uQ2hpcCBBU0lDICovCi0JV3JpdGVET0MoRE9DX01PREVfQ0xSX0VSUiB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JFU0VULCB2aXJ0YWRyLCBET0NDb250cm9sKTsKLQlXcml0ZURPQyhET0NfTU9ERV9DTFJfRVJSIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfUkVTRVQsIHZpcnRhZHIsIERPQ0NvbnRyb2wpOwotCi0JLyogRW5hYmxlIHRoZSBEaXNrT25DaGlwIEFTSUMgKi8KLQlXcml0ZURPQyhET0NfTU9ERV9DTFJfRVJSIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfTk9STUFMLCB2aXJ0YWRyLCBET0NDb250cm9sKTsKLQlXcml0ZURPQyhET0NfTU9ERV9DTFJfRVJSIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfTk9STUFMLCB2aXJ0YWRyLCBET0NDb250cm9sKTsKLQotCUNoaXBJRCA9IFJlYWRET0ModmlydGFkciwgQ2hpcElEKTsKLQotCXN3aXRjaCAoQ2hpcElEKSB7Ci0JY2FzZSBET0NfQ2hpcElEX0RvYzJrOgotCQlyZWcgPSBEb0NfMmtfRUNDU3RhdHVzOwotCQlicmVhazsKLQljYXNlIERPQ19DaGlwSURfRG9jTWlsOgotCQlyZWcgPSBEb0NfRUNDQ29uZjsKLQkJYnJlYWs7Ci0JY2FzZSBET0NfQ2hpcElEX0RvY01pbFBsdXMxNjoKLQljYXNlIERPQ19DaGlwSURfRG9jTWlsUGx1czMyOgotCWNhc2UgMDoKLQkJLyogUG9zc2libGUgTWlsbGVubml1bSBQbHVzLCBuZWVkIHRvIGRvIG1vcmUgY2hlY2tzICovCi0JCS8qIFBvc3NpYmx5IHJlbGVhc2UgZnJvbSBwb3dlciBkb3duIG1vZGUgKi8KLQkJZm9yICh0bXAgPSAwOyAodG1wIDwgNCk7IHRtcCsrKQotCQkJUmVhZERPQyh2aXJ0YWRyLCBNcGx1c19Qb3dlcik7Ci0KLQkJLyogUmVzZXQgdGhlIE1pbGxlbm5pdW0gUGx1cyBBU0lDICovCi0JCXRtcCA9IERPQ19NT0RFX1JFU0VUIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfUlNUX0xBVCB8IERPQ19NT0RFX0JERUNUOwotCQlXcml0ZURPQyh0bXAsIHZpcnRhZHIsIE1wbHVzX0RPQ0NvbnRyb2wpOwotCQlXcml0ZURPQyh+dG1wLCB2aXJ0YWRyLCBNcGx1c19DdHJsQ29uZmlybSk7Ci0KLQkJbWRlbGF5KDEpOwotCQkvKiBFbmFibGUgdGhlIE1pbGxlbm5pdW0gUGx1cyBBU0lDICovCi0JCXRtcCA9IERPQ19NT0RFX05PUk1BTCB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JTVF9MQVQgfCBET0NfTU9ERV9CREVDVDsKLQkJV3JpdGVET0ModG1wLCB2aXJ0YWRyLCBNcGx1c19ET0NDb250cm9sKTsKLQkJV3JpdGVET0MofnRtcCwgdmlydGFkciwgTXBsdXNfQ3RybENvbmZpcm0pOwotCQltZGVsYXkoMSk7Ci0KLQkJQ2hpcElEID0gUmVhZERPQyh2aXJ0YWRyLCBDaGlwSUQpOwotCi0JCXN3aXRjaCAoQ2hpcElEKSB7Ci0JCWNhc2UgRE9DX0NoaXBJRF9Eb2NNaWxQbHVzMTY6Ci0JCQlyZWcgPSBEb0NfTXBsdXNfVG9nZ2xlOwotCQkJYnJlYWs7Ci0JCWNhc2UgRE9DX0NoaXBJRF9Eb2NNaWxQbHVzMzI6Ci0JCQlwcmludGsoS0VSTl9FUlIgIkRpc2tPbkNoaXAgTWlsbGVubml1bSBQbHVzIDMyTUIgaXMgbm90IHN1cHBvcnRlZCwgaWdub3JpbmcuXG4iKTsKLQkJZGVmYXVsdDoKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCQlnb3RvIG5vdGZvdW5kOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBub3Rmb3VuZDsKLQl9Ci0JLyogQ2hlY2sgdGhlIFRPR0dMRSBiaXQgaW4gdGhlIEVDQyByZWdpc3RlciAqLwotCXRtcCA9IFJlYWRET0NfKHZpcnRhZHIsIHJlZykgJiBET0NfVE9HR0xFX0JJVDsKLQl0bXBiID0gUmVhZERPQ18odmlydGFkciwgcmVnKSAmIERPQ19UT0dHTEVfQklUOwotCXRtcGMgPSBSZWFkRE9DXyh2aXJ0YWRyLCByZWcpICYgRE9DX1RPR0dMRV9CSVQ7Ci0JaWYgKCh0bXAgPT0gdG1wYikgfHwgKHRtcCAhPSB0bXBjKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQb3NzaWJsZSBEaXNrT25DaGlwIGF0IDB4JWx4IGZhaWxlZCBUT0dHTEUgdGVzdCwgZHJvcHBpbmcuXG4iLCBwaHlzYWRyKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBub3Rmb3VuZDsKLQl9Ci0KLQlmb3IgKG10ZCA9IGRvY2xpc3Q7IG10ZDsgbXRkID0gZG9jLT5uZXh0ZG9jKSB7Ci0JCXVuc2lnbmVkIGNoYXIgb2xkdmFsOwotCQl1bnNpZ25lZCBjaGFyIG5ld3ZhbDsKLQkJbmFuZCA9IG10ZC0+cHJpdjsKLQkJZG9jID0gbmFuZC0+cHJpdjsKLQkJLyogVXNlIHRoZSBhbGlhcyByZXNvbHV0aW9uIHJlZ2lzdGVyIHRvIGRldGVybWluZSBpZiB0aGlzIGlzCi0JCSAgIGluIGZhY3QgdGhlIHNhbWUgRE9DIGFsaWFzZWQgdG8gYSBuZXcgYWRkcmVzcy4gIElmIHdyaXRlcwotCQkgICB0byBvbmUgY2hpcCdzIGFsaWFzIHJlc29sdXRpb24gcmVnaXN0ZXIgY2hhbmdlIHRoZSB2YWx1ZSBvbgotCQkgICB0aGUgb3RoZXIgY2hpcCwgdGhleSdyZSB0aGUgc2FtZSBjaGlwLiAqLwotCQlpZiAoQ2hpcElEID09IERPQ19DaGlwSURfRG9jTWlsUGx1czE2KSB7Ci0JCQlvbGR2YWwgPSBSZWFkRE9DKGRvYy0+dmlydGFkciwgTXBsdXNfQWxpYXNSZXNvbHV0aW9uKTsKLQkJCW5ld3ZhbCA9IFJlYWRET0ModmlydGFkciwgTXBsdXNfQWxpYXNSZXNvbHV0aW9uKTsKLQkJfSBlbHNlIHsKLQkJCW9sZHZhbCA9IFJlYWRET0MoZG9jLT52aXJ0YWRyLCBBbGlhc1Jlc29sdXRpb24pOwotCQkJbmV3dmFsID0gUmVhZERPQyh2aXJ0YWRyLCBBbGlhc1Jlc29sdXRpb24pOwotCQl9Ci0JCWlmIChvbGR2YWwgIT0gbmV3dmFsKQotCQkJY29udGludWU7Ci0JCWlmIChDaGlwSUQgPT0gRE9DX0NoaXBJRF9Eb2NNaWxQbHVzMTYpIHsKLQkJCVdyaXRlRE9DKH5uZXd2YWwsIHZpcnRhZHIsIE1wbHVzX0FsaWFzUmVzb2x1dGlvbik7Ci0JCQlvbGR2YWwgPSBSZWFkRE9DKGRvYy0+dmlydGFkciwgTXBsdXNfQWxpYXNSZXNvbHV0aW9uKTsKLQkJCVdyaXRlRE9DKG5ld3ZhbCwgdmlydGFkciwgTXBsdXNfQWxpYXNSZXNvbHV0aW9uKTsJLyogcmVzdG9yZSBpdCAqLwotCQl9IGVsc2UgewotCQkJV3JpdGVET0Mofm5ld3ZhbCwgdmlydGFkciwgQWxpYXNSZXNvbHV0aW9uKTsKLQkJCW9sZHZhbCA9IFJlYWRET0MoZG9jLT52aXJ0YWRyLCBBbGlhc1Jlc29sdXRpb24pOwotCQkJV3JpdGVET0MobmV3dmFsLCB2aXJ0YWRyLCBBbGlhc1Jlc29sdXRpb24pOwkvKiByZXN0b3JlIGl0ICovCi0JCX0KLQkJbmV3dmFsID0gfm5ld3ZhbDsKLQkJaWYgKG9sZHZhbCA9PSBuZXd2YWwpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJGb3VuZCBhbGlhcyBvZiBET0MgYXQgMHglbHggdG8gMHglbHhcbiIsIGRvYy0+cGh5c2FkciwgcGh5c2Fkcik7Ci0JCQlnb3RvIG5vdGZvdW5kOwotCQl9Ci0JfQotCi0JcHJpbnRrKEtFUk5fTk9USUNFICJEaXNrT25DaGlwIGZvdW5kIGF0IDB4JWx4XG4iLCBwaHlzYWRyKTsKLQotCWxlbiA9IHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsKLQkgICAgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApICsgc2l6ZW9mKHN0cnVjdCBkb2NfcHJpdikgKyAoMiAqIHNpemVvZihzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IpKTsKLQltdGQgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtdGQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJEaXNrT25DaGlwIGttYWxsb2MgKCVkIGJ5dGVzKSBmYWlsZWQhXG4iLCBsZW4pOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JbmFuZAkJCT0gKHN0cnVjdCBuYW5kX2NoaXAgKikgKG10ZCArIDEpOwotCWRvYwkJCT0gKHN0cnVjdCBkb2NfcHJpdiAqKSAobmFuZCArIDEpOwotCW5hbmQtPmJidF90ZAkJPSAoc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICopIChkb2MgKyAxKTsKLQluYW5kLT5iYnRfbWQJCT0gbmFuZC0+YmJ0X3RkICsgMTsKLQotCW10ZC0+cHJpdgkJPSBuYW5kOwotCW10ZC0+b3duZXIJCT0gVEhJU19NT0RVTEU7Ci0KLQluYW5kLT5wcml2CQk9IGRvYzsKLQluYW5kLT5zZWxlY3RfY2hpcAk9IGRvYzIwMHhfc2VsZWN0X2NoaXA7Ci0JbmFuZC0+Y21kX2N0cmwJCT0gZG9jMjAweF9od2NvbnRyb2w7Ci0JbmFuZC0+ZGV2X3JlYWR5CQk9IGRvYzIwMHhfZGV2X3JlYWR5OwotCW5hbmQtPndhaXRmdW5jCQk9IGRvYzIwMHhfd2FpdDsKLQluYW5kLT5ibG9ja19iYWQJCT0gZG9jMjAweF9ibG9ja19iYWQ7Ci0JbmFuZC0+ZWNjLmh3Y3RsCQk9IGRvYzIwMHhfZW5hYmxlX2h3ZWNjOwotCW5hbmQtPmVjYy5jYWxjdWxhdGUJPSBkb2MyMDB4X2NhbGN1bGF0ZV9lY2M7Ci0JbmFuZC0+ZWNjLmNvcnJlY3QJPSBkb2MyMDB4X2NvcnJlY3RfZGF0YTsKLQotCW5hbmQtPmVjYy5sYXlvdXQJPSAmZG9jMjAweF9vb2JpbmZvOwotCW5hbmQtPmVjYy5tb2RlCQk9IE5BTkRfRUNDX0hXX1NZTkRST01FOwotCW5hbmQtPmVjYy5zaXplCQk9IDUxMjsKLQluYW5kLT5lY2MuYnl0ZXMJCT0gNjsKLQluYW5kLT5lY2Muc3RyZW5ndGgJPSAyOwotCW5hbmQtPmJidF9vcHRpb25zCT0gTkFORF9CQlRfVVNFX0ZMQVNIOwotCi0JZG9jLT5waHlzYWRyCQk9IHBoeXNhZHI7Ci0JZG9jLT52aXJ0YWRyCQk9IHZpcnRhZHI7Ci0JZG9jLT5DaGlwSUQJCT0gQ2hpcElEOwotCWRvYy0+Y3VyZmxvb3IJCT0gLTE7Ci0JZG9jLT5jdXJjaGlwCQk9IC0xOwotCWRvYy0+bWgwX3BhZ2UJCT0gLTE7Ci0JZG9jLT5taDFfcGFnZQkJPSAtMTsKLQlkb2MtPm5leHRkb2MJCT0gZG9jbGlzdDsKLQotCWlmIChDaGlwSUQgPT0gRE9DX0NoaXBJRF9Eb2MyaykKLQkJbnVtY2hpcHMgPSBkb2MyMDAwX2luaXQobXRkKTsKLQllbHNlIGlmIChDaGlwSUQgPT0gRE9DX0NoaXBJRF9Eb2NNaWxQbHVzMTYpCi0JCW51bWNoaXBzID0gZG9jMjAwMXBsdXNfaW5pdChtdGQpOwotCWVsc2UKLQkJbnVtY2hpcHMgPSBkb2MyMDAxX2luaXQobXRkKTsKLQotCWlmICgocmV0ID0gbmFuZF9zY2FuKG10ZCwgbnVtY2hpcHMpKSkgewotCQkvKiBEQkIgbm90ZTogaSBiZWxpZXZlIG5hbmRfcmVsZWFzZSBpcyBuZWNlc3NhcnkgaGVyZSwgYXMKLQkJICAgYnVmZmVycyBtYXkgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiBuYW5kX2Jhc2UuICBDaGVjayB3aXRoCi0JCSAgIFRob21hcy4gRklYIE1FISAqLwotCQkvKiBuYW5kX3JlbGVhc2Ugd2lsbCBjYWxsIGRlbF9tdGRfZGV2aWNlLCBidXQgd2UgaGF2ZW4ndCB5ZXQKLQkJICAgYWRkZWQgaXQuICBUaGlzIGlzIGhhbmRsZWQgd2l0aG91dCBpbmNpZGVudCBieQotCQkgICBkZWxfbXRkX2RldmljZSwgYXMgZmFyIGFzIEkgY2FuIHRlbGwuICovCi0JCW5hbmRfcmVsZWFzZShtdGQpOwotCQlrZnJlZShtdGQpOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JLyogU3VjY2VzcyEgKi8KLQlkb2NsaXN0ID0gbXRkOwotCXJldHVybiAwOwotCi0gbm90Zm91bmQ6Ci0JLyogUHV0IGJhY2sgdGhlIGNvbnRlbnRzIG9mIHRoZSBET0NDb250cm9sIHJlZ2lzdGVyLCBpbiBjYXNlIGl0J3Mgbm90Ci0JICAgYWN0dWFsbHkgYSBEaXNrT25DaGlwLiAgKi8KLQlXcml0ZURPQyhzYXZlX2NvbnRyb2wsIHZpcnRhZHIsIERPQ0NvbnRyb2wpOwotIGZhaWw6Ci0JaW91bm1hcCh2aXJ0YWRyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCByZWxlYXNlX25hbmRkb2Modm9pZCkKLXsKLQlzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgKm5leHRtdGQ7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqbmFuZDsKLQlzdHJ1Y3QgZG9jX3ByaXYgKmRvYzsKLQotCWZvciAobXRkID0gZG9jbGlzdDsgbXRkOyBtdGQgPSBuZXh0bXRkKSB7Ci0JCW5hbmQgPSBtdGQtPnByaXY7Ci0JCWRvYyA9IG5hbmQtPnByaXY7Ci0KLQkJbmV4dG10ZCA9IGRvYy0+bmV4dGRvYzsKLQkJbmFuZF9yZWxlYXNlKG10ZCk7Ci0JCWlvdW5tYXAoZG9jLT52aXJ0YWRyKTsKLQkJa2ZyZWUobXRkKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfbmFuZGRvYyh2b2lkKQotewotCWludCBpLCByZXQgPSAwOwotCi0JLyogV2UgY291bGQgY3JlYXRlIHRoZSBkZWNvZGVyIG9uIGRlbWFuZCwgaWYgbWVtb3J5IGlzIGEgY29uY2Vybi4KLQkgKiBUaGlzIHdheSB3ZSBoYXZlIGl0IGhhbmR5LCBpZiBhbiBlcnJvciBoYXBwZW5zCi0JICoKLQkgKiBTeW1ib2xzaXplIGlzIDEwIChiaXRzKQotCSAqIFByaW1pdHZlIHBvbHlub21pYWwgaXMgeF4xMCt4XjMrMQotCSAqIGZpcnN0IGNvbnNlY3V0aXZlIHJvb3QgaXMgNTEwCi0JICogcHJpbWl0dmUgZWxlbWVudCB0byBnZW5lcmF0ZSByb290cyA9IDEKLQkgKiBnZW5lcmF0b3IgcG9saW5vbWlhbCBkZWdyZWUgPSA0Ci0JICovCi0JcnNfZGVjb2RlciA9IGluaXRfcnMoMTAsIDB4NDA5LCBGQ1IsIDEsIE5ST09UUyk7Ci0JaWYgKCFyc19kZWNvZGVyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRGlza09uQ2hpcDogQ291bGQgbm90IGNyZWF0ZSBhIFJTIGRlY29kZXJcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlpZiAoZG9jX2NvbmZpZ19sb2NhdGlvbikgewotCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBjb25maWd1cmVkIERpc2tPbkNoaXAgcHJvYmUgYWRkcmVzcyAweCVseFxuIiwgZG9jX2NvbmZpZ19sb2NhdGlvbik7Ci0JCXJldCA9IGRvY19wcm9iZShkb2NfY29uZmlnX2xvY2F0aW9uKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dGVycjsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyAoZG9jX2xvY2F0aW9uc1tpXSAhPSAweGZmZmZmZmZmKTsgaSsrKSB7Ci0JCQlkb2NfcHJvYmUoZG9jX2xvY2F0aW9uc1tpXSk7Ci0JCX0KLQl9Ci0JLyogTm8gYmFubmVyIG1lc3NhZ2UgYW55IG1vcmUuIFByaW50IGEgbWVzc2FnZSBpZiBubyBEaXNrT25DaGlwCi0JICAgZm91bmQsIHNvIHRoZSB1c2VyIGtub3dzIHdlIGF0IGxlYXN0IHRyaWVkLiAqLwotCWlmICghZG9jbGlzdCkgewotCQlwcmludGsoS0VSTl9JTkZPICJObyB2YWxpZCBEaXNrT25DaGlwIGRldmljZXMgZm91bmRcbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG91dGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci0gb3V0ZXJyOgotCWZyZWVfcnMocnNfZGVjb2Rlcik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfbmFuZGRvYyh2b2lkKQotewotCS8qIENsZWFudXAgdGhlIG5hbmQvRG9DIHJlc291cmNlcyAqLwotCXJlbGVhc2VfbmFuZGRvYygpOwotCi0JLyogRnJlZSB0aGUgcmVlZCBzb2xvbW9uIHJlc291cmNlcyAqLwotCWlmIChyc19kZWNvZGVyKSB7Ci0JCWZyZWVfcnMocnNfZGVjb2Rlcik7Ci0JfQotfQotCi1tb2R1bGVfaW5pdChpbml0X25hbmRkb2MpOwotbW9kdWxlX2V4aXQoY2xlYW51cF9uYW5kZG9jKTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNLVN5c3RlbXMgRGlza09uQ2hpcCAyMDAwLCBNaWxsZW5uaXVtIGFuZCBNaWxsZW5uaXVtIFBsdXMgZGV2aWNlIGRyaXZlclxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2ZzbF9pZmNfc3BsLmMgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF9pZmNfc3BsLmMKaW5kZXggMmY4MmY3Yy4uNTEwMDc3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfaWZjX3NwbC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZnNsX2lmY19zcGwuYwpAQCAtODgsMTEgKzg4LDcgQEAKIAkJcmV0dXJuIF9fcmF3X3JlYWR3KCh1MTYgKiltYXJrZXIpICE9IDB4ZmZmZjsKIH0KIAotI2lmZGVmIENPTkZJR19UUExfQlVJTEQKIGludCBuYW5kX3NwbF9sb2FkX2ltYWdlKHVpbnQzMl90IG9mZnMsIHVuc2lnbmVkIGludCB1Ym9vdF9zaXplLCB2b2lkICp2ZHN0KQotI2Vsc2UKLXN0YXRpYyBpbnQgbmFuZF9sb2FkKHVpbnQzMl90IG9mZnMsIHVuc2lnbmVkIGludCB1Ym9vdF9zaXplLCB2b2lkICp2ZHN0KQotI2VuZGlmCiB7CiAJc3RydWN0IGZzbF9pZmMgKmlmYyA9IElGQ19CQVNFX0FERFI7CiAJdWNoYXIgKmJ1ZiA9ICh1Y2hhciAqKUNPTkZJR19TWVNfTkFORF9CQVNFOwpAQCAtMjE4LDE1ICsyMTQsNiBAQAogfQogCiAvKgotICogRGVmaW5lcyBhIHN0YXRpYyBmdW5jdGlvbiBuYW5kX2xvYWRfaW1hZ2UoKSBoZXJlLCBiZWNhdXNlIG5vbi1zdGF0aWMgbWFrZXMKLSAqIHRoZSBjb2RlIHRvbyBsYXJnZSBmb3IgY2VydGFpbiBTUExzKG1pbmltYWwgU1BMLCBtYXhpbXVtIHNpemUgPD0gNEtieXRlcykKLSAqLwotI2lmbmRlZiBDT05GSUdfVFBMX0JVSUxECi0jZGVmaW5lIG5hbmRfc3BsX2xvYWRfaW1hZ2Uob2ZmcywgdWJvb3Rfc2l6ZSwgdmRzdCkgXAotCW5hbmRfbG9hZChvZmZzLCB1Ym9vdF9zaXplLCB2ZHN0KQotI2VuZGlmCi0KLS8qCiAgKiBNYWluIGVudHJ5cG9pbnQgZm9yIE5BTkQgQm9vdC4gSXQncyBuZWNlc3NhcnkgdGhhdCBTRFJBTSBpcyBhbHJlYWR5CiAgKiBjb25maWd1cmVkIGFuZCBhdmFpbGFibGUgc2luY2UgdGhpcyBjb2RlIGxvYWRzIHRoZSBtYWluIFUtYm9vdCBpbWFnZQogICogZnJvbSBOQU5EIGludG8gU0RSQU0gYW5kIHN0YXJ0cyBmcm9tIHRoZXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvc3BpL2ZzbF9lc3BpX3NwbC5jIGIvZHJpdmVycy9tdGQvc3BpL2ZzbF9lc3BpX3NwbC5jCmluZGV4IGU1YWM3OWIuLmI5MTU0NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3NwaS9mc2xfZXNwaV9zcGwuYworKysgYi9kcml2ZXJzL210ZC9zcGkvZnNsX2VzcGlfc3BsLmMKQEAgLTEyLDYgKzEyLDIwIEBACiAjZGVmaW5lIEVTUElfQk9PVF9JTUFHRV9BRERSCTB4NTAKICNkZWZpbmUgQ09ORklHX0NGR19EQVRBX1NFQ1RPUgkwCiAKK3ZvaWQgc3BpX3NwbF9sb2FkX2ltYWdlKHVpbnQzMl90IG9mZnMsIHVuc2lnbmVkIGludCBzaXplLCB2b2lkICp2ZHN0KQoreworCXN0cnVjdCBzcGlfZmxhc2ggKmZsYXNoOworCisJZmxhc2ggPSBzcGlfZmxhc2hfcHJvYmUoQ09ORklHX0VOVl9TUElfQlVTLCBDT05GSUdfRU5WX1NQSV9DUywKKwkJCUNPTkZJR19FTlZfU1BJX01BWF9IWiwgQ09ORklHX0VOVl9TUElfTU9ERSk7CisJaWYgKGZsYXNoID09IE5VTEwpIHsKKwkJcHV0cygiXG5zcGlfZmxhc2hfcHJvYmUgZmFpbGVkIik7CisJCWhhbmcoKTsKKwl9CisKKwlzcGlfZmxhc2hfcmVhZChmbGFzaCwgb2Zmcywgc2l6ZSwgdmRzdCk7Cit9CisKIC8qCiAgKiBUaGUgbWFpbiBlbnRyeSBmb3IgU1BJIGJvb3RpbmcuIEl0J3MgbmVjZXNzYXJ5IHRoYXQgU0RSQU0gaXMgYWxyZWFkeQogICogY29uZmlndXJlZCBhbmQgYXZhaWxhYmxlIHNpbmNlIHRoaXMgY29kZSBsb2FkcyB0aGUgbWFpbiBVLUJvb3QgaW1hZ2UKQEAgLTIwLDggKzM0LDEwIEBACiB2b2lkIHNwaV9ib290KHZvaWQpCiB7CiAJdm9pZCAoKnVib290KSh2b2lkKSBfX25vcmV0dXJuOwotCXUzMiBvZmZzZXQsIGNvZGVfbGVuOworCXUzMiBvZmZzZXQsIGNvZGVfbGVuLCBjb3B5X2xlbiA9IDA7CisjaWZuZGVmIENPTkZJR19GU0xfQ09SRU5FVAogCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisjZW5kaWYKIAlzdHJ1Y3Qgc3BpX2ZsYXNoICpmbGFzaDsKIAogCWZsYXNoID0gc3BpX2ZsYXNoX3Byb2JlKENPTkZJR19FTlZfU1BJX0JVUywgQ09ORklHX0VOVl9TUElfQ1MsCkBAIC01Niw4ICs3MiwxNSBAQAogCWNvZGVfbGVuID0gY29kZV9sZW4gLSBDT05GSUdfU1BMX01BWF9TSVpFOwogI2VuZGlmCiAJLyogY29weSBjb2RlIHRvIEREUiAqLwotCXNwaV9mbGFzaF9yZWFkKGZsYXNoLCBvZmZzZXQsIGNvZGVfbGVuLAotCQkgICAgICAgKHZvaWQgKilDT05GSUdfU1lTX1NQSV9GTEFTSF9VX0JPT1RfRFNUKTsKKwlwcmludGYoIkxvYWRpbmcgc2Vjb25kIHN0YWdlIGJvb3QgbG9hZGVyICIpOworCXdoaWxlIChjb3B5X2xlbiA8PSBjb2RlX2xlbikgeworCQlzcGlfZmxhc2hfcmVhZChmbGFzaCwgb2Zmc2V0ICsgY29weV9sZW4sIDB4MjAwMCwKKwkJCSAgICAgICAodm9pZCAqKShDT05GSUdfU1lTX1NQSV9GTEFTSF9VX0JPT1RfRFNUCisJCQkgICAgICAgKyBjb3B5X2xlbikpOworCQljb3B5X2xlbiA9IGNvcHlfbGVuICsgMHgyMDAwOworCQlwdXRjKCcuJyk7CisJfQorCiAJLyoKIAkqIEp1bXAgdG8gVS1Cb290IGltYWdlCiAJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwLmMgYi9kcml2ZXJzL25ldC9lMTAwMC5jCmluZGV4IDlhNjZlNjguLjlkOWIyNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAuYwpAQCAtNDUzMiw3ICs0NTMyLDYgQEAKIAkJCWh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NyB8fAogCQkJaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3X3Jldl8yKSB7CiAJCQlody0+cGh5X3R5cGUgPSBlMTAwMF9waHlfaWdwOwotCQkJaHctPnBoeV90eXBlID0gZTEwMDBfcGh5X2lncDsKIAkJCWJyZWFrOwogCQl9CiAJY2FzZSBJR1AwM0UxMDAwX0VfUEhZX0lEOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm0vZm0uYyBiL2RyaXZlcnMvbmV0L2ZtL2ZtLmMKaW5kZXggYmNhMjBiMy4uNDAwZTlkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm0vZm0uYworKysgYi9kcml2ZXJzL25ldC9mbS9mbS5jCkBAIC0zNTAsMTYgKzM1MCwxNiBAQAogewogCWludCByYzsKICNpZiBkZWZpbmVkKENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9OT1IpCi0Jdm9pZCAqYWRkciA9ICh2b2lkICopQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFI7CisJdm9pZCAqYWRkciA9ICh2b2lkICopQ09ORklHX1NZU19GTUFOX0ZXX0FERFI7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9OQU5EKQogCXNpemVfdCBmd19sZW5ndGggPSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfTEVOR1RIOwogCXZvaWQgKmFkZHIgPSBtYWxsb2MoQ09ORklHX1NZU19RRV9GTUFOX0ZXX0xFTkdUSCk7CiAKLQlyYyA9IG5hbmRfcmVhZCgmbmFuZF9pbmZvWzBdLCAobG9mZl90KUNPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSLAorCXJjID0gbmFuZF9yZWFkKCZuYW5kX2luZm9bMF0sIChsb2ZmX3QpQ09ORklHX1NZU19GTUFOX0ZXX0FERFIsCiAJCSAgICAgICAmZndfbGVuZ3RoLCAodV9jaGFyICopYWRkcik7CiAJaWYgKHJjID09IC1FVUNMRUFOKSB7CiAJCXByaW50ZigiTkFORCByZWFkIG9mIEZNQU4gZmlybXdhcmUgYXQgb2Zmc2V0IDB4JXggZmFpbGVkICVkXG4iLAotCQkJQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIsIHJjKTsKKwkJCUNPTkZJR19TWVNfRk1BTl9GV19BRERSLCByYyk7CiAJfQogI2VsaWYgZGVmaW5lZChDT05GSUdfU1lTX1FFX0ZXX0lOX1NQSUZMQVNIKQogCXN0cnVjdCBzcGlfZmxhc2ggKnVjb2RlX2ZsYXNoOwpAQCAtMzcxLDcgKzM3MSw3IEBACiAJaWYgKCF1Y29kZV9mbGFzaCkKIAkJcHJpbnRmKCJTRjogcHJvYmUgZm9yIHVjb2RlIGZhaWxlZFxuIik7CiAJZWxzZSB7Ci0JCXJldCA9IHNwaV9mbGFzaF9yZWFkKHVjb2RlX2ZsYXNoLCBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUiwKKwkJcmV0ID0gc3BpX2ZsYXNoX3JlYWQodWNvZGVfZmxhc2gsIENPTkZJR19TWVNfRk1BTl9GV19BRERSLAogCQkJCUNPTkZJR19TWVNfUUVfRk1BTl9GV19MRU5HVEgsIGFkZHIpOwogCQlpZiAocmV0KQogCQkJcHJpbnRmKCJTRjogcmVhZCBmb3IgdWNvZGUgZmFpbGVkXG4iKTsKQEAgLTM4MSw3ICszODEsNyBAQAogCWludCBkZXYgPSBDT05GSUdfU1lTX01NQ19FTlZfREVWOwogCXZvaWQgKmFkZHIgPSBtYWxsb2MoQ09ORklHX1NZU19RRV9GTUFOX0ZXX0xFTkdUSCk7CiAJdTMyIGNudCA9IENPTkZJR19TWVNfUUVfRk1BTl9GV19MRU5HVEggLyA1MTI7Ci0JdTMyIGJsayA9IENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSIC8gNTEyOworCXUzMiBibGsgPSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUiAvIDUxMjsKIAlzdHJ1Y3QgbW1jICptbWMgPSBmaW5kX21tY19kZXZpY2UoQ09ORklHX1NZU19NTUNfRU5WX0RFVik7CiAKIAlpZiAoIW1tYykKQEAgLTM5NSw3ICszOTUsNyBAQAogCQlmbHVzaF9jYWNoZSgodWxvbmcpYWRkciwgY250ICogNTEyKTsKIAl9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9SRU1PVEUpCi0Jdm9pZCAqYWRkciA9ICh2b2lkICopQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFI7CisJdm9pZCAqYWRkciA9ICh2b2lkICopQ09ORklHX1NZU19GTUFOX0ZXX0FERFI7CiAjZWxzZQogCXZvaWQgKmFkZHIgPSBOVUxMOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mbS9tZW1hY19waHkuYyBiL2RyaXZlcnMvbmV0L2ZtL21lbWFjX3BoeS5jCmluZGV4IDE0MGU1OWIuLjJmNGJjMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZtL21lbWFjX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2ZtL21lbWFjX3BoeS5jCkBAIC0xMzMsNSArMTMzLDE3IEBACiAKIAlidXMtPnByaXYgPSBpbmZvLT5yZWdzOwogCisJLyoKKwkgKiBPbiBzb21lIHBsYXRmb3JtcyBsaWtlIEI0ODYwLCBkZWZhdWx0IHZhbHVlIG9mIE1ESU9fQ0xLX0RJViBiaXRzCisJICogaW4gbWRpb19zdGF0KG1kaW9fY2ZnKSByZWdpc3RlciBnZW5lcmF0ZXMgTURJTyBjbG9jayB0b28gaGlnaAorCSAqIChtdWNoIGhpZ2hlciB0aGFuIDIuNU1IeiksIHZpb2xhdGluZyB0aGUgSUVFRSBzcGVjcy4KKwkgKiBPbiBvdGhlciBwbGF0Zm9ybXMgbGlrZSBUMTA0MCwgZGVmYXVsdCB2YWx1ZSBvZiBNRElPX0NMS19ESVYgYml0cworCSAqIGlzIHplcm8sIHNvIE1ESU8gY2xvY2sgaXMgZGlzYWJsZWQuCisJICogU28sIGZvciBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgTURJTywgTURJT19DTEtfRElWIGJpdHMgbmVlZHMgdG8KKwkgKiBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4KKwkgKi8KKwlzZXRiaXRzX2JlMzIoJigoc3RydWN0IG1lbWFjX21kaW9fY29udHJvbGxlciAqKWluZm8tPnJlZ3MpLT5tZGlvX3N0YXQsCisJCSAgICAgTURJT19TVEFUX0NMS0RJVigyNTgpKTsKKwogCXJldHVybiBtZGlvX3JlZ2lzdGVyKGJ1cyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pbmNhLWlwX3N3LmMgYi9kcml2ZXJzL25ldC9pbmNhLWlwX3N3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZmJmYTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvaW5jYS1pcF9zdy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzkzICswLDAgQEAKLS8qCi0gKiBJTkNBLUlQIGludGVybmFsIHN3aXRjaCBldGhlcm5ldCBkcml2ZXIuCi0gKgotICogKEMpIENvcHlyaWdodCAyMDAzLTIwMDQKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0KLSNpbmNsdWRlIDxtYWxsb2MuaD4KLSNpbmNsdWRlIDxuZXQuaD4KLSNpbmNsdWRlIDxuZXRkZXYuaD4KLSNpbmNsdWRlIDxhc20vaW5jYS1pcC5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLQotCi0jZGVmaW5lIE5VTV9SWF9ERVNDCVBLVEJVRlNSWAotI2RlZmluZSBOVU1fVFhfREVTQwkzCi0jZGVmaW5lIFRPVVRfTE9PUAkxMDAwMDAwCi0KLQotI2RlZmluZSBERUxBWQl1ZGVsYXkoMTAwMDApCi0gIC8qIFNvbWV0aW1lcyB0aGUgc3RvcmUgd29yZCBpbnN0cnVjdGlvbiBoYW5ncyB3aGlsZSB3cml0aW5nIHRvIG9uZQotICAgKiBvZiB0aGUgU3dpdGNoIHJlZ2lzdGVycy4gTW92aW5nIHRoZSBpbnN0cnVjdGlvbiBpbnRvIGEgc2VwYXJhdGUKLSAgICogZnVuY3Rpb24gc29tZWhvdyBtYWtlcyB0aGUgcHJvYmxlbSBnbyBhd2F5LgotICAgKi8KLXN0YXRpYyB2b2lkIFNXT1JEKHZvbGF0aWxlIHUzMiAqIHJlZywgdTMyIHZhbHVlKQotewotCSpyZWcgPSB2YWx1ZTsKLX0KLQotI2RlZmluZSBETUFfV1JJVEVfUkVHKHJlZywgdmFsdWUpICooKHZvbGF0aWxlIHUzMiAqKXJlZykgPSAodTMyKXZhbHVlOwotI2RlZmluZSBETUFfUkVBRF9SRUcocmVnLCB2YWx1ZSkgICAgdmFsdWUgPSAodTMyKSooKHZvbGF0aWxlIHUzMiopcmVnKQotI2RlZmluZSBTV19XUklURV9SRUcocmVnLCB2YWx1ZSkgICBcCi0JU1dPUkQocmVnLCB2YWx1ZSk7XAotCURFTEFZO1wKLQlTV09SRChyZWcsIHZhbHVlKTsKLQotI2RlZmluZSBTV19SRUFEX1JFRyhyZWcsIHZhbHVlKQkgICBcCi0JdmFsdWUgPSAodTMyKSooKHZvbGF0aWxlIHUzMiopcmVnKTtcCi0JREVMQVk7XAotCXZhbHVlID0gKHUzMikqKCh2b2xhdGlsZSB1MzIqKXJlZyk7Ci0KLSNkZWZpbmUgSU5DQV9ETUFfVFhfUE9MTElOR19USU1FCTB4MDcKLSNkZWZpbmUgSU5DQV9ETUFfUlhfUE9MTElOR19USU1FCTB4MDcKLQotI2RlZmluZSBJTkNBX0RNQV9UWF9IT0xECQkweDgwMDAwMDAwCi0jZGVmaW5lIElOQ0FfRE1BX1RYX0VPUAkJCTB4NDAwMDAwMDAKLSNkZWZpbmUgSU5DQV9ETUFfVFhfU09QCQkJMHgyMDAwMDAwMAotI2RlZmluZSBJTkNBX0RNQV9UWF9JQ1BUCQkweDEwMDAwMDAwCi0jZGVmaW5lIElOQ0FfRE1BX1RYX0lFT1AJCTB4MDgwMDAwMDAKLQotI2RlZmluZSBJTkNBX0RNQV9SWF9DCQkJMHg4MDAwMDAwMAotI2RlZmluZSBJTkNBX0RNQV9SWF9TT1AJCQkweDQwMDAwMDAwCi0jZGVmaW5lIElOQ0FfRE1BX1JYX0VPUAkJCTB4MjAwMDAwMDAKLQotI2RlZmluZSBJTkNBX1NXSVRDSF9QSFlfU1BFRURfMTBICTB4MQotI2RlZmluZSBJTkNBX1NXSVRDSF9QSFlfU1BFRURfMTBGCTB4NQotI2RlZmluZSBJTkNBX1NXSVRDSF9QSFlfU1BFRURfMTAwSAkweDIKLSNkZWZpbmUgSU5DQV9TV0lUQ0hfUEhZX1NQRUVEXzEwMEYJMHg2Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKiogQXV0byBNRElYIHNldHRpbmdzICoqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgSU5DQV9JUF9BVVRPX01ESVhfTEFOX1BPUlRTX0RJUgkJSU5DQV9JUF9Qb3J0c19QMV9ESVIKLSNkZWZpbmUgSU5DQV9JUF9BVVRPX01ESVhfTEFOX1BPUlRTX0FMVFNFTAlJTkNBX0lQX1BvcnRzX1AxX0FMVFNFTAotI2RlZmluZSBJTkNBX0lQX0FVVE9fTURJWF9MQU5fUE9SVFNfT1VUCQlJTkNBX0lQX1BvcnRzX1AxX09VVAotI2RlZmluZSBJTkNBX0lQX0FVVE9fTURJWF9MQU5fR1BJT19QSU5fUlhUWAkxNgotCi0jZGVmaW5lIFdBSVRfU0lHTkFMX1JFVFJJRVMJCQkxMDAKLSNkZWZpbmUgV0FJVF9MSU5LX1JFVFJJRVMJCQkxMDAKLSNkZWZpbmUgTElOS19SRVRSWV9ERUxBWQkJCTIwMDAgIC8qIG1zICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdm9sYXRpbGUgdTMyIEhPTEQJCToxOwotCQkJdm9sYXRpbGUgdTMyIElDcHQJCToxOwotCQkJdm9sYXRpbGUgdTMyIElFb3AJCToxOwotCQkJdm9sYXRpbGUgdTMyIG9mZnNldAkJOjM7Ci0JCQl2b2xhdGlsZSB1MzIgcmVzZXJ2ZWQwCQk6NDsKLQkJCXZvbGF0aWxlIHUzMiBORkIJCToyMjsKLQkJfWZpZWxkOwotCi0JCXZvbGF0aWxlIHUzMiB3b3JkOwotCX1wYXJhbXM7Ci0KLQl2b2xhdGlsZSB1MzIgbmV4dFJ4RGVzY1B0cjsKLQotCXZvbGF0aWxlIHUzMiBSeERhdGFQdHI7Ci0KLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQl2b2xhdGlsZSB1MzIgQwkJCToxOwotCQkJdm9sYXRpbGUgdTMyIFNvcAkJOjE7Ci0JCQl2b2xhdGlsZSB1MzIgRW9wCQk6MTsKLQkJCXZvbGF0aWxlIHUzMiByZXNlcnZlZDMJCToxMjsKLQkJCXZvbGF0aWxlIHUzMiBOQlQJCToxNzsKLQkJfWZpZWxkOwotCi0JCXZvbGF0aWxlIHUzMiB3b3JkOwotCX1zdGF0dXM7Ci0KLX0gaW5jYV9yeF9kZXNjcmlwdG9yX3Q7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQl2b2xhdGlsZSB1MzIgSE9MRAkJOjE7Ci0JCQl2b2xhdGlsZSB1MzIgRW9wCQk6MTsKLQkJCXZvbGF0aWxlIHUzMiBTb3AJCToxOwotCQkJdm9sYXRpbGUgdTMyIElDcHQJCToxOwotCQkJdm9sYXRpbGUgdTMyIElFb3AJCToxOwotCQkJdm9sYXRpbGUgdTMyIHJlc2VydmVkMAkJOjU7Ci0JCQl2b2xhdGlsZSB1MzIgTkJBCQk6MjI7Ci0JCX1maWVsZDsKLQotCQl2b2xhdGlsZSB1MzIgd29yZDsKLQl9cGFyYW1zOwotCi0Jdm9sYXRpbGUgdTMyIG5leHRUeERlc2NQdHI7Ci0KLQl2b2xhdGlsZSB1MzIgVHhEYXRhUHRyOwotCi0Jdm9sYXRpbGUgdTMyIEMJCQk6MTsKLQl2b2xhdGlsZSB1MzIgcmVzZXJ2ZWQzCQk6MzE7Ci0KLX0gaW5jYV90eF9kZXNjcmlwdG9yX3Q7Ci0KLQotc3RhdGljIGluY2FfcnhfZGVzY3JpcHRvcl90IHJ4X3JpbmdbTlVNX1JYX0RFU0NdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDE2KSkpOwotc3RhdGljIGluY2FfdHhfZGVzY3JpcHRvcl90IHR4X3JpbmdbTlVNX1RYX0RFU0NdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDE2KSkpOwotCi1zdGF0aWMgaW50IHR4X25ldywgcnhfbmV3LCB0eF9ob2xkLCByeF9ob2xkOwotc3RhdGljIGludCB0eF9vbGRfaG9sZCA9IC0xOwotc3RhdGljIGludCBpbml0aWFsaXplZAk9IDA7Ci0KLQotc3RhdGljIGludCBpbmNhX3N3aXRjaF9pbml0KHN0cnVjdCBldGhfZGV2aWNlICpkZXYsIGJkX3QgKiBiaXMpOwotc3RhdGljIGludCBpbmNhX3N3aXRjaF9zZW5kKHN0cnVjdCBldGhfZGV2aWNlICpkZXYsIHZvaWQgKnBhY2tldCwgaW50IGxlbmd0aCk7Ci1zdGF0aWMgaW50IGluY2Ffc3dpdGNoX3JlY3Yoc3RydWN0IGV0aF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBpbmNhX3N3aXRjaF9oYWx0KHN0cnVjdCBldGhfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgaW5jYV9pbml0X3N3aXRjaF9jaGlwKHZvaWQpOwotc3RhdGljIHZvaWQgaW5jYV9kbWFfaW5pdCh2b2lkKTsKLXN0YXRpYyBpbnQgaW5jYV9hbWRpeCh2b2lkKTsKLQotCi1pbnQgaW5jYV9zd2l0Y2hfaW5pdGlhbGl6ZShiZF90ICogYmlzKQotewotCXN0cnVjdCBldGhfZGV2aWNlICpkZXY7Ci0KLSNpZiAwCi0JcHJpbnRmKCJFbnRlcmVkIGluY2Ffc3dpdGNoX2luaXRpYWxpemUoKVxuIik7Ci0jZW5kaWYKLQotCWlmICghKGRldiA9IChzdHJ1Y3QgZXRoX2RldmljZSAqKSBtYWxsb2MgKHNpemVvZiAqZGV2KSkpIHsKLQkJcHJpbnRmKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCW1lbXNldChkZXYsIDAsIHNpemVvZigqZGV2KSk7Ci0KLQlpbmNhX2RtYV9pbml0KCk7Ci0KLQlpbmNhX2luaXRfc3dpdGNoX2NoaXAoKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0lOQ0FfSVBfU1dJVENIX0FNRElYKQotCWluY2FfYW1kaXgoKTsKLSNlbmRpZgotCi0Jc3ByaW50ZihkZXYtPm5hbWUsICJJTkNBLUlQIFN3aXRjaCIpOwotCWRldi0+aW5pdCA9IGluY2Ffc3dpdGNoX2luaXQ7Ci0JZGV2LT5oYWx0ID0gaW5jYV9zd2l0Y2hfaGFsdDsKLQlkZXYtPnNlbmQgPSBpbmNhX3N3aXRjaF9zZW5kOwotCWRldi0+cmVjdiA9IGluY2Ffc3dpdGNoX3JlY3Y7Ci0KLQlldGhfcmVnaXN0ZXIoZGV2KTsKLQotI2lmIDAKLQlwcmludGYoIkxlYXZpbmcgaW5jYV9zd2l0Y2hfaW5pdGlhbGl6ZSgpXG4iKTsKLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBpbmNhX3N3aXRjaF9pbml0KHN0cnVjdCBldGhfZGV2aWNlICpkZXYsIGJkX3QgKiBiaXMpCi17Ci0JaW50IGk7Ci0JdTMyIHYsIHJlZ1ZhbHVlOwotCXUxNiB3VG1wOwotCi0jaWYgMAotCXByaW50ZigiRW50ZXJpbmcgaW5jYV9zd2l0Y2hfaW5pdCgpXG4iKTsKLSNlbmRpZgotCi0JLyogU2V0IE1BQyBhZGRyZXNzLgotCSAqLwotCXdUbXAgPSAodTE2KWRldi0+ZW5ldGFkZHJbMF07Ci0JcmVnVmFsdWUgPSAod1RtcCA8PCA4KSB8IGRldi0+ZW5ldGFkZHJbMV07Ci0KLQlTV19XUklURV9SRUcoSU5DQV9JUF9Td2l0Y2hfUE1BQ19TQTEsIHJlZ1ZhbHVlKTsKLQotCXdUbXAgPSAodTE2KWRldi0+ZW5ldGFkZHJbMl07Ci0JcmVnVmFsdWUgPSAod1RtcCA8PCA4KSB8IGRldi0+ZW5ldGFkZHJbM107Ci0JcmVnVmFsdWUgPSByZWdWYWx1ZSA8PCAxNjsKLQl3VG1wID0gKHUxNilkZXYtPmVuZXRhZGRyWzRdOwotCXJlZ1ZhbHVlIHw9ICh3VG1wPDw4KSB8IGRldi0+ZW5ldGFkZHJbNV07Ci0KLQlTV19XUklURV9SRUcoSU5DQV9JUF9Td2l0Y2hfUE1BQ19TQTIsIHJlZ1ZhbHVlKTsKLQotCS8qIEluaXRpYWxpemUgdGhlIGRlc2NyaXB0b3IgcmluZ3MuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ERVNDOyBpKyspIHsKLQkJaW5jYV9yeF9kZXNjcmlwdG9yX3QgKiByeF9kZXNjID0gKGluY2FfcnhfZGVzY3JpcHRvcl90ICopQ0tTRUcxQUREUigmcnhfcmluZ1tpXSk7Ci0JCW1lbXNldChyeF9kZXNjLCAwLCBzaXplb2YocnhfcmluZ1tpXSkpOwotCi0JCS8qIFNldCBtYXhpbXVtIHNpemUgb2YgcmVjZWl2ZSBidWZmZXIuCi0JCSAqLwotCQlyeF9kZXNjLT5wYXJhbXMuZmllbGQuTkZCID0gUEtUU0laRV9BTElHTjsKLQotCQkvKiBTZXQgdGhlIG9mZnNldCBvZiB0aGUgcmVjZWl2ZSBidWZmZXIuIFplcm8gbWVhbnMKLQkJICogdGhhdCB0aGUgb2Zmc2V0IG1lY2hhbmlzbSBpcyBub3QgdXNlZC4KLQkJICovCi0JCXJ4X2Rlc2MtPnBhcmFtcy5maWVsZC5vZmZzZXQgPSAwOwotCi0JCS8qIENoZWNrIGlmIGl0IGlzIHRoZSBsYXN0IGRlc2NyaXB0b3IuCi0JCSAqLwotCQlpZiAoaSA9PSAoTlVNX1JYX0RFU0MgLSAxKSkgewotCQkJLyogTGV0IHRoZSBsYXN0IGRlc2NyaXB0b3IgcG9pbnQgdG8gdGhlIGZpcnN0Ci0JCQkgKiBvbmUuCi0JCQkgKi8KLQkJCXJ4X2Rlc2MtPm5leHRSeERlc2NQdHIgPSAodTMyKUNLU0VHMUFERFIocnhfcmluZyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBTZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIG5leHQgZGVzY3JpcHRvci4KLQkJCSAqLwotCQkJcnhfZGVzYy0+bmV4dFJ4RGVzY1B0ciA9ICh1MzIpQ0tTRUcxQUREUigmcnhfcmluZ1tpKzFdKTsKLQkJfQotCi0JCXJ4X2Rlc2MtPlJ4RGF0YVB0ciA9ICh1MzIpQ0tTRUcxQUREUihOZXRSeFBhY2tldHNbaV0pOwotCX0KLQotI2lmIDAKLQlwcmludGYoInJ4X3JpbmcgPSAweCUwOFggMHglMDhYXG4iLCAodTMyKXJ4X3JpbmcsICh1MzIpJnJ4X3JpbmdbMF0pOwotCXByaW50ZigidHhfcmluZyA9IDB4JTA4WCAweCUwOFhcbiIsICh1MzIpdHhfcmluZywgKHUzMikmdHhfcmluZ1swXSk7Ci0jZW5kaWYKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfREVTQzsgaSsrKSB7Ci0JCWluY2FfdHhfZGVzY3JpcHRvcl90ICogdHhfZGVzYyA9IChpbmNhX3R4X2Rlc2NyaXB0b3JfdCAqKUNLU0VHMUFERFIoJnR4X3JpbmdbaV0pOwotCi0JCW1lbXNldCh0eF9kZXNjLCAwLCBzaXplb2YodHhfcmluZ1tpXSkpOwotCi0JCXR4X2Rlc2MtPnBhcmFtcy53b3JkCSAgID0gMDsKLQkJdHhfZGVzYy0+cGFyYW1zLmZpZWxkLkhPTEQgPSAxOwotCQl0eF9kZXNjLT5DCQkgICA9IDE7Ci0KLQkJCS8qIENoZWNrIGlmIGl0IGlzIHRoZSBsYXN0IGRlc2NyaXB0b3IuCi0JCQkgKi8KLQkJaWYgKGkgPT0gKE5VTV9UWF9ERVNDIC0gMSkpIHsKLQkJCQkvKiBMZXQgdGhlIGxhc3QgZGVzY3JpcHRvciBwb2ludCB0byB0aGUKLQkJCQkgKiBmaXJzdCBvbmUuCi0JCQkJICovCi0JCQl0eF9kZXNjLT5uZXh0VHhEZXNjUHRyID0gKHUzMilDS1NFRzFBRERSKHR4X3JpbmcpOwotCQl9IGVsc2UgewotCQkJCS8qIFNldCB0aGUgYWRkcmVzcyBvZiB0aGUgbmV4dCBkZXNjcmlwdG9yLgotCQkJCSAqLwotCQkJdHhfZGVzYy0+bmV4dFR4RGVzY1B0ciA9ICh1MzIpQ0tTRUcxQUREUigmdHhfcmluZ1tpKzFdKTsKLQkJfQotCX0KLQotCS8qIEluaXRpYWxpemUgUnhETUEuCi0JICovCi0JRE1BX1JFQURfUkVHKElOQ0FfSVBfRE1BX0RNQV9SWElTUiwgdik7Ci0JZGVidWcoIlJYIHN0YXR1cyA9IDB4JTA4WFxuIiwgdik7Ci0KLQkvKiBXcml0aW5nIHRvIHRoZSBGUkRBIG9mIENIQU5ORUwuCi0JICovCi0JRE1BX1dSSVRFX1JFRyhJTkNBX0lQX0RNQV9ETUFfUlhGUkRBMCwgKHUzMilyeF9yaW5nKTsKLQotCS8qIFdyaXRpbmcgdG8gdGhlIENPTU1BTkQgUkVHLgotCSAqLwotCURNQV9XUklURV9SRUcoSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMCwgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMF9JTklUKTsKLQotCS8qIEluaXRpYWxpemUgVHhETUEuCi0JICovCi0JRE1BX1JFQURfUkVHKElOQ0FfSVBfRE1BX0RNQV9UWElTUiwgdik7Ci0JZGVidWcoIlRYIHN0YXR1cyA9IDB4JTA4WFxuIiwgdik7Ci0KLQkvKiBXcml0aW5nIHRvIHRoZSBGUkRBIG9mIENIQU5ORUwuCi0JICovCi0JRE1BX1dSSVRFX1JFRyhJTkNBX0lQX0RNQV9ETUFfVFhGUkRBMCwgKHUzMil0eF9yaW5nKTsKLQotCXR4X25ldyA9IHJ4X25ldyA9IDA7Ci0KLQl0eF9ob2xkID0gTlVNX1RYX0RFU0MgLSAxOwotCXJ4X2hvbGQgPSBOVU1fUlhfREVTQyAtIDE7Ci0KLSNpZiAwCi0JcnhfcmluZ1tyeF9ob2xkXS5wYXJhbXMuZmllbGQuSE9MRCA9IDE7Ci0jZW5kaWYKLQkvKiBlbmFibGUgc3Bhbm5pbmcgdHJlZSBmb3J3YXJkaW5nLCBlbmFibGUgdGhlIENQVSBwb3J0ICovCi0JLyogU1RfUFQ6Ci0JICoJQ1BTIChDUFUgcG9ydCBzdGF0dXMpCTB4MyAoZm9yd2FyZGluZykKLQkgKglMUFMgKExBTiBwb3J0IHN0YXR1cykJMHgzIChmb3J3YXJkaW5nKQotCSAqCVBQUyAoUEMgcG9ydCBzdGF0dXMpCTB4MyAoZm9yd2FyZGluZykKLQkgKi8KLQlTV19XUklURV9SRUcoSU5DQV9JUF9Td2l0Y2hfU1RfUFQsMHgzZik7Ci0KLSNpZiAwCi0JcHJpbnRmKCJMZWF2aW5nIGluY2Ffc3dpdGNoX2luaXQoKVxuIik7Ci0jZW5kaWYKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgaW5jYV9zd2l0Y2hfc2VuZChzdHJ1Y3QgZXRoX2RldmljZSAqZGV2LCB2b2lkICpwYWNrZXQsIGludCBsZW5ndGgpCi17Ci0JaW50CQkgICAgICAgaTsKLQlpbnQJCSAgICAgICByZXMJPSAtMTsKLQl1MzIJCSAgICAgICBjb21tYW5kOwotCXUzMgkJICAgICAgIHJlZ1ZhbHVlOwotCWluY2FfdHhfZGVzY3JpcHRvcl90ICogdHhfZGVzYwk9IChpbmNhX3R4X2Rlc2NyaXB0b3JfdCAqKUNLU0VHMUFERFIoJnR4X3JpbmdbdHhfbmV3XSk7Ci0KLSNpZiAwCi0JcHJpbnRmKCJFbnRlcmVkIGluY2Ffc3dpdGNoX3NlbmQoKVxuIik7Ci0jZW5kaWYKLQotCWlmIChsZW5ndGggPD0gMCkgewotCQlwcmludGYgKCIlczogYmFkIHBhY2tldCBzaXplOiAlZFxuIiwgZGV2LT5uYW1lLCBsZW5ndGgpOwotCQlnb3RvIERvbmU7Ci0JfQotCi0JZm9yKGkgPSAwOyB0eF9kZXNjLT5DID09IDA7IGkrKykgewotCQlpZiAoaSA+PSBUT1VUX0xPT1ApIHsKLQkJCXByaW50ZigiJXM6IHR4IGVycm9yIGJ1ZmZlciBub3QgcmVhZHlcbiIsIGRldi0+bmFtZSk7Ci0JCQlnb3RvIERvbmU7Ci0JCX0KLQl9Ci0KLQlpZiAodHhfb2xkX2hvbGQgPj0gMCkgewotCQkoKGluY2FfdHhfZGVzY3JpcHRvcl90ICopQ0tTRUcxQUREUigmdHhfcmluZ1t0eF9vbGRfaG9sZF0pKS0+cGFyYW1zLmZpZWxkLkhPTEQgPSAxOwotCX0KLQl0eF9vbGRfaG9sZCA9IHR4X2hvbGQ7Ci0KLQl0eF9kZXNjLT5wYXJhbXMud29yZCA9Ci0JCQkoSU5DQV9ETUFfVFhfU09QIHwgSU5DQV9ETUFfVFhfRU9QIHwgSU5DQV9ETUFfVFhfSE9MRCk7Ci0KLQl0eF9kZXNjLT5DID0gMDsKLQl0eF9kZXNjLT5UeERhdGFQdHIgPSAodTMyKXBhY2tldDsKLQl0eF9kZXNjLT5wYXJhbXMuZmllbGQuTkJBID0gbGVuZ3RoOwotCi0JKChpbmNhX3R4X2Rlc2NyaXB0b3JfdCAqKUNLU0VHMUFERFIoJnR4X3JpbmdbdHhfaG9sZF0pKS0+cGFyYW1zLmZpZWxkLkhPTEQgPSAwOwotCi0JdHhfaG9sZCA9IHR4X25ldzsKLQl0eF9uZXcJPSAodHhfbmV3ICsgMSkgJSBOVU1fVFhfREVTQzsKLQotCi0JaWYgKCEgaW5pdGlhbGl6ZWQpIHsKLQkJY29tbWFuZCA9IElOQ0FfSVBfRE1BX0RNQV9UWENDUjBfSU5JVDsKLQkJaW5pdGlhbGl6ZWQgPSAxOwotCX0gZWxzZSB7Ci0JCWNvbW1hbmQgPSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IwX0hSOwotCX0KLQotCURNQV9SRUFEX1JFRyhJTkNBX0lQX0RNQV9ETUFfVFhDQ1IwLCByZWdWYWx1ZSk7Ci0JcmVnVmFsdWUgfD0gY29tbWFuZDsKLSNpZiAwCi0JcHJpbnRmKCJyZWdWYWx1ZSA9IDB4JXhcbiIsIHJlZ1ZhbHVlKTsKLSNlbmRpZgotCURNQV9XUklURV9SRUcoSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMCwgcmVnVmFsdWUpOwotCi0jaWYgMQotCWZvcihpID0gMDsgKChpbmNhX3R4X2Rlc2NyaXB0b3JfdCAqKUNLU0VHMUFERFIoJnR4X3JpbmdbdHhfaG9sZF0pKS0+QyA9PSAwOyBpKyspIHsKLQkJaWYgKGkgPj0gVE9VVF9MT09QKSB7Ci0JCQlwcmludGYoIiVzOiB0eCBidWZmZXIgbm90IHJlYWR5XG4iLCBkZXYtPm5hbWUpOwotCQkJZ290byBEb25lOwotCQl9Ci0JfQotI2VuZGlmCi0JcmVzID0gbGVuZ3RoOwotRG9uZToKLSNpZiAwCi0JcHJpbnRmKCJMZWF2aW5nIGluY2Ffc3dpdGNoX3NlbmQoKVxuIik7Ci0jZW5kaWYKLQlyZXR1cm4gcmVzOwotfQotCi0KLXN0YXRpYyBpbnQgaW5jYV9zd2l0Y2hfcmVjdihzdHJ1Y3QgZXRoX2RldmljZSAqZGV2KQotewotCWludAkJICAgICAgIGxlbmd0aCAgPSAwOwotCWluY2FfcnhfZGVzY3JpcHRvcl90ICogcnhfZGVzYzsKLQotI2lmIDAKLQlwcmludGYoIkVudGVyZWQgaW5jYV9zd2l0Y2hfcmVjdigpXG4iKTsKLSNlbmRpZgotCi0JZm9yICg7OykgewotCQlyeF9kZXNjID0gKGluY2FfcnhfZGVzY3JpcHRvcl90ICopQ0tTRUcxQUREUigmcnhfcmluZ1tyeF9uZXddKTsKLQotCQlpZiAocnhfZGVzYy0+c3RhdHVzLmZpZWxkLkMgPT0gMCkgewotCQkJYnJlYWs7Ci0JCX0KLQotI2lmIDAKLQkJcnhfcmluZ1tyeF9uZXddLnBhcmFtcy5maWVsZC5IT0xEID0gMTsKLSNlbmRpZgotCi0JCWlmICghIHJ4X2Rlc2MtPnN0YXR1cy5maWVsZC5Fb3ApIHsKLQkJCXByaW50ZigiUGFydGx5IHJlY2VpdmVkIHBhY2tldCEhIVxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWxlbmd0aCA9IHJ4X2Rlc2MtPnN0YXR1cy5maWVsZC5OQlQ7Ci0JCXJ4X2Rlc2MtPnN0YXR1cy53b3JkICY9Ci0JCQkgfihJTkNBX0RNQV9SWF9FT1AgfCBJTkNBX0RNQV9SWF9TT1AgfCBJTkNBX0RNQV9SWF9DKTsKLSNpZiAwCi17Ci0gIGludCBpOwotICBmb3IgKGk9MDtpPGxlbmd0aCAtIDQ7aSsrKSB7Ci0gICAgaWYgKGkgJSAxNiA9PSAwKSBwcmludGYoIlxuJTA0eDogIiwgaSk7Ci0gICAgcHJpbnRmKCIlMDJYICIsIE5ldFJ4UGFja2V0c1tyeF9uZXddW2ldKTsKLSAgfQotICBwcmludGYoIlxuIik7Ci19Ci0jZW5kaWYKLQotCQlpZiAobGVuZ3RoKSB7Ci0jaWYgMAotCQkJcHJpbnRmKCJSZWNlaXZlZCAlZCBieXRlc1xuIiwgbGVuZ3RoKTsKLSNlbmRpZgotCQkJTmV0UmVjZWl2ZSgodm9pZCopQ0tTRUcxQUREUihOZXRSeFBhY2tldHNbcnhfbmV3XSksIGxlbmd0aCAtIDQpOwotCQl9IGVsc2UgewotI2lmIDEKLQkJCXByaW50ZigiWmVybyBsZW5ndGghISFcbiIpOwotI2VuZGlmCi0JCX0KLQotCi0JCSgoaW5jYV9yeF9kZXNjcmlwdG9yX3QgKilDS1NFRzFBRERSKCZyeF9yaW5nW3J4X2hvbGRdKSktPnBhcmFtcy5maWVsZC5IT0xEID0gMDsKLQotCQlyeF9ob2xkID0gcnhfbmV3OwotCi0JCXJ4X25ldyA9IChyeF9uZXcgKyAxKSAlIE5VTV9SWF9ERVNDOwotCX0KLQotI2lmIDAKLQlwcmludGYoIkxlYXZpbmcgaW5jYV9zd2l0Y2hfcmVjdigpXG4iKTsKLSNlbmRpZgotCi0JcmV0dXJuIGxlbmd0aDsKLX0KLQotCi1zdGF0aWMgdm9pZCBpbmNhX3N3aXRjaF9oYWx0KHN0cnVjdCBldGhfZGV2aWNlICpkZXYpCi17Ci0jaWYgMAotCXByaW50ZigiRW50ZXJlZCBpbmNhX3N3aXRjaF9oYWx0KClcbiIpOwotI2VuZGlmCi0KLSNpZiAxCi0JaW5pdGlhbGl6ZWQgPSAwOwotI2VuZGlmCi0jaWYgMQotCS8qIERpc2FibGUgZm9yd2FyZGluZyB0byB0aGUgQ1BVIHBvcnQuCi0JICovCi0JU1dfV1JJVEVfUkVHKElOQ0FfSVBfU3dpdGNoX1NUX1BULDB4Zik7Ci0KLQkvKiBDbG9zZSBSeERNQSBjaGFubmVsLgotCSAqLwotCURNQV9XUklURV9SRUcoSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMCwgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMF9PRkYpOwotCi0JLyogQ2xvc2UgVHhETUEgY2hhbm5lbC4KLQkgKi8KLQlETUFfV1JJVEVfUkVHKElOQ0FfSVBfRE1BX0RNQV9UWENDUjAsIElOQ0FfSVBfRE1BX0RNQV9UWENDUjBfT0ZGKTsKLQotCi0jZW5kaWYKLSNpZiAwCi0JcHJpbnRmKCJMZWF2aW5nIGluY2Ffc3dpdGNoX2hhbHQoKVxuIik7Ci0jZW5kaWYKLX0KLQotCi1zdGF0aWMgdm9pZCBpbmNhX2luaXRfc3dpdGNoX2NoaXAodm9pZCkKLXsKLQl1MzIgcmVnVmFsdWU7Ci0KLQkvKiBUbyB3b3JrYXJvdW5kIGEgcHJvYmxlbSB3aXRoIGNvbGxpc2lvbiBjb3VudGVyCi0JICogKHNlZSBFcnJhdGEgc2hlZXQpLgotCSAqLwotCVNXX1dSSVRFX1JFRyhJTkNBX0lQX1N3aXRjaF9QQ19UWF9DVEwsIDB4MDAwMDAwMDEpOwotCVNXX1dSSVRFX1JFRyhJTkNBX0lQX1N3aXRjaF9MQU5fVFhfQ1RMLCAweDAwMDAwMDAxKTsKLQotI2lmIDEKLQkvKiBpbml0IE1ESU8gY29uZmlndXJhdGlvbjoKLQkgKglNRFMgKFBvbGwgc3BlZWQpOgkweDAxICg0bXMpCi0JICoJUEhZX0xBTl9BRERSOgkJMHgwNgotCSAqCVBIWV9QQ19BRERSOgkJMHgwNQotCSAqCVVFUCAoVXNlIEV4dGVybmFsIFBIWSk6IDB4MDAgKEludGVybmFsIFBIWSBpcyB1c2VkKQotCSAqCVBTIChQb3J0IFNlbGVjdCk6CTB4MDAgKFBUL1VNTSBmb3IgTEFOKQotCSAqCVBUIChQSFkgVGVzdCk6CQkweDAwIChubyB0ZXN0IG1vZGUpCi0JICoJVU1NIChVc2UgTURJTyBNb2RlKToJMHgwMCAoc3RhdGUgbWFjaGluZSBpcyBkaXNhYmxlZCkKLQkgKi8KLQlTV19XUklURV9SRUcoSU5DQV9JUF9Td2l0Y2hfTURJT19DRkcsIDB4NGM1MCk7Ci0KLQkvKiBpbml0IFBIWToKLQkgKglTTCAoQXV0byBOZWcuIFNwZWVkIGZvciBMQU4pCi0JICoJU1AgKEF1dG8gTmVnLiBTcGVlZCBmb3IgUEMpCi0JICoJTEwgKExpbmsgU3RhdHVzIGZvciBMQU4pCi0JICoJTFAgKExpbmsgU3RhdHVzIGZvciBQQykKLQkgKglETCAoRHVwbGV4IFN0YXR1cyBmb3IgTEFOKQotCSAqCURQIChEdXBsZXggU3RhdHVzIGZvciBQQykKLQkgKglQTCAoQXV0byBOZWcuIFBhdXNlIFN0YXR1cyBmb3IgTEFOKQotCSAqCVBQIChBdXRvIE5lZy4gUGF1c2UgU3RhdHVzIGZvciBQQykKLQkgKi8KLQlTV19XUklURV9SRUcgKElOQ0FfSVBfU3dpdGNoX0VQSFksIDB4ZmYpOwotCi0JLyogTURJT19BQ0M6Ci0JICoJUkEgKFJlcXVlc3QvQWNrKSAgMHgwMSAoUmVxdWVzdCkKLQkgKglSVyAoUmVhZC9Xcml0ZSkJICAweDAxIChXcml0ZSkKLQkgKglQSFlfQUREUgkgIDB4MDUgKFBDKQotCSAqCVJFR19BRERSCSAgMHgwMCAoUEhZX0JDUjogYmFzaWMgY29udHJvbCByZWdpc3RlcikKLQkgKglQSFlfREFUQQkgIDB4ODAwMAotCSAqCQkgICAgICBSZXNldAkJICAgICAgLSBzb2Z0d2FyZSByZXNldAotCSAqCQkgICAgICBMQiAobG9vcCBiYWNrKQkgICAgICAtIG5vcm1hbAotCSAqCQkgICAgICBTUyAoc3BlZWQgc2VsZWN0KQkgICAgICAtIDEwIE1iaXQvcwotCSAqCQkgICAgICBBTkUgKGF1dG8gbmVnLiBlbmFibGUpICAtIGVuYWJsZQotCSAqCQkgICAgICBQRCAocG93ZXIgZG93bikJICAgICAgLSBub3JtYWwKLQkgKgkJICAgICAgSVNPIChpc29sYXRlKQkgICAgICAtIG5vcm1hbAotCSAqCQkgICAgICBSQU4gKHJlc3RhcnQgYXV0byBuZWcuKSAtIG5vcm1hbAotCSAqCQkgICAgICBETSAoZHVwbGV4IG1vZGUpCSAgICAgIC0gaGFsZiBkdXBsZXgKLQkgKgkJICAgICAgQ1QgKGNvbGxpc2lvbiB0ZXN0KSAgICAgLSBlbmFibGUKLQkgKi8KLQlTV19XUklURV9SRUcoSU5DQV9JUF9Td2l0Y2hfTURJT19BQ0MsIDB4YzBhMDkwMDApOwotCi0JLyogTURJT19BQ0M6Ci0JICoJUkEgKFJlcXVlc3QvQWNrKSAgMHgwMSAoUmVxdWVzdCkKLQkgKglSVyAoUmVhZC9Xcml0ZSkJICAweDAxIChXcml0ZSkKLQkgKglQSFlfQUREUgkgIDB4MDYgKExBTikKLQkgKglSRUdfQUREUgkgIDB4MDAgKFBIWV9CQ1I6IGJhc2ljIGNvbnRyb2wgcmVnaXN0ZXIpCi0JICoJUEhZX0RBVEEJICAweDgwMDAKLQkgKgkJICAgICAgUmVzZXQJCSAgICAgIC0gc29mdHdhcmUgcmVzZXQKLQkgKgkJICAgICAgTEIgKGxvb3AgYmFjaykJICAgICAgLSBub3JtYWwKLQkgKgkJICAgICAgU1MgKHNwZWVkIHNlbGVjdCkJICAgICAgLSAxMCBNYml0L3MKLQkgKgkJICAgICAgQU5FIChhdXRvIG5lZy4gZW5hYmxlKSAgLSBlbmFibGUKLQkgKgkJICAgICAgUEQgKHBvd2VyIGRvd24pCSAgICAgIC0gbm9ybWFsCi0JICoJCSAgICAgIElTTyAoaXNvbGF0ZSkJICAgICAgLSBub3JtYWwKLQkgKgkJICAgICAgUkFOIChyZXN0YXJ0IGF1dG8gbmVnLikgLSBub3JtYWwKLQkgKgkJICAgICAgRE0gKGR1cGxleCBtb2RlKQkgICAgICAtIGhhbGYgZHVwbGV4Ci0JICoJCSAgICAgIENUIChjb2xsaXNpb24gdGVzdCkgICAgIC0gZW5hYmxlCi0JICovCi0JU1dfV1JJVEVfUkVHKElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDLCAweGMwYzA5MDAwKTsKLQotI2VuZGlmCi0KLQkvKiBNYWtlIHN1cmUgdGhlIENQVSBwb3J0IGlzIGRpc2FibGVkIGZvciBub3cuIFdlCi0JICogZG9uJ3Qgd2FudCBwYWNrZXRzIHRvIGdldCBzdGFja2VkIGZvciB1cyB1bnRpbAotCSAqIHdlIGVuYWJsZSBETUEgYW5kIGFyZSBwcmVwYXJlZCB0byByZWNlaXZlIHRoZW0uCi0JICovCi0JU1dfV1JJVEVfUkVHKElOQ0FfSVBfU3dpdGNoX1NUX1BULDB4Zik7Ci0KLQlTV19SRUFEX1JFRyhJTkNBX0lQX1N3aXRjaF9BUkxfQ1RMLCByZWdWYWx1ZSk7Ci0KLQkvKiBDUkMgR0VOIGlzIGVuYWJsZWQuCi0JICovCi0JcmVnVmFsdWUgfD0gMHgwMDAwMDIwMDsKLQlTV19XUklURV9SRUcoSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTCwgcmVnVmFsdWUpOwotCi0JLyogQUREIFRBRyBpcyBkaXNhYmxlZC4KLQkgKi8KLQlTV19SRUFEX1JFRyhJTkNBX0lQX1N3aXRjaF9QTUFDX0hEX0NUTCwgcmVnVmFsdWUpOwotCXJlZ1ZhbHVlICY9IH4weDAwMDAwMDAyOwotCVNXX1dSSVRFX1JFRyhJTkNBX0lQX1N3aXRjaF9QTUFDX0hEX0NUTCwgcmVnVmFsdWUpOwotfQotCi0KLXN0YXRpYyB2b2lkIGluY2FfZG1hX2luaXQodm9pZCkKLXsKLQkvKiBTd2l0Y2ggb2ZmIGFsbCBETUEgY2hhbm5lbHMuCi0JICovCi0JRE1BX1dSSVRFX1JFRyhJTkNBX0lQX0RNQV9ETUFfUlhDQ1IwLCBJTkNBX0lQX0RNQV9ETUFfUlhDQ1IwX09GRik7Ci0JRE1BX1dSSVRFX1JFRyhJTkNBX0lQX0RNQV9ETUFfUlhDQ1IxLCBJTkNBX0lQX0RNQV9ETUFfUlhDQ1IxX09GRik7Ci0KLQlETUFfV1JJVEVfUkVHKElOQ0FfSVBfRE1BX0RNQV9UWENDUjAsIElOQ0FfSVBfRE1BX0RNQV9SWENDUjBfT0ZGKTsKLQlETUFfV1JJVEVfUkVHKElOQ0FfSVBfRE1BX0RNQV9UWENDUjEsIElOQ0FfSVBfRE1BX0RNQV9UWENDUjFfT0ZGKTsKLQlETUFfV1JJVEVfUkVHKElOQ0FfSVBfRE1BX0RNQV9UWENDUjIsIElOQ0FfSVBfRE1BX0RNQV9UWENDUjJfT0ZGKTsKLQotCS8qIFNldHVwIFRYIGNoYW5uZWwgcG9sbGluZyB0aW1lLgotCSAqLwotCURNQV9XUklURV9SRUcoSU5DQV9JUF9ETUFfRE1BX1RYUE9MTCwgSU5DQV9ETUFfVFhfUE9MTElOR19USU1FKTsKLQotCS8qIFNldHVwIFJYIGNoYW5uZWwgcG9sbGluZyB0aW1lLgotCSAqLwotCURNQV9XUklURV9SRUcoSU5DQV9JUF9ETUFfRE1BX1JYUE9MTCwgSU5DQV9ETUFfUlhfUE9MTElOR19USU1FKTsKLQotCS8qIEVSUkFUQTogd3JpdGUgcmVzZXQgdmFsdWUgaW50byB0aGUgRE1BIFJYIElNUiByZWdpc3Rlci4KLQkgKi8KLQlETUFfV1JJVEVfUkVHKElOQ0FfSVBfRE1BX0RNQV9SWElNUiwgMHhGRkZGRkZGRik7Ci0KLQkvKiBKdXN0IGluIGNhc2U6IGRpc2FibGUgYWxsIHRyYW5zbWl0IGludGVycnVwdHMgYWxzby4KLQkgKi8KLQlETUFfV1JJVEVfUkVHKElOQ0FfSVBfRE1BX0RNQV9UWElNUiwgMHhGRkZGRkZGRik7Ci0KLQlETUFfV1JJVEVfUkVHKElOQ0FfSVBfRE1BX0RNQV9UWElTUiwgMHhGRkZGRkZGRik7Ci0JRE1BX1dSSVRFX1JFRyhJTkNBX0lQX0RNQV9ETUFfUlhJU1IsIDB4RkZGRkZGRkYpOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfSU5DQV9JUF9TV0lUQ0hfQU1ESVgpCi1zdGF0aWMgaW50IGluY2FfYW1kaXgodm9pZCkKLXsKLQl1MzIgcGh5UmVnMSA9IDA7Ci0JdTMyIHBoeVJlZzQgPSAwOwotCXUzMiBwaHlSZWc1ID0gMDsKLQl1MzIgcGh5UmVnNiA9IDA7Ci0JdTMyIHBoeVJlZzMxID0gMDsKLQl1MzIgcmVnRXBoeSA9IDA7Ci0JaW50IG1kaV9mbGFnOwotCWludCByZXRyaWVzOwotCi0JLyogU2V0dXAgR1BJTyBwaW5zLgotCSAqLwotCSpJTkNBX0lQX0FVVE9fTURJWF9MQU5fUE9SVFNfRElSICAgIHw9ICgxIDw8IElOQ0FfSVBfQVVUT19NRElYX0xBTl9HUElPX1BJTl9SWFRYKTsKLQkqSU5DQV9JUF9BVVRPX01ESVhfTEFOX1BPUlRTX0FMVFNFTCB8PSAoMSA8PCBJTkNBX0lQX0FVVE9fTURJWF9MQU5fR1BJT19QSU5fUlhUWCk7Ci0KLSNpZiAwCi0JLyogV2FpdCBmb3Igc2lnbmFsLgotCSAqLwotCXJldHJpZXMgPSBXQUlUX1NJR05BTF9SRVRSSUVTOwotCXdoaWxlICgtLXJldHJpZXMpIHsKLQkJU1dfV1JJVEVfUkVHKElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDLAotCQkJCSgweDEgPDwgMzEpIHwJLyogUkEJCSovCi0JCQkJKDB4MCA8PCAzMCkgfAkvKiBSZWFkCQkqLwotCQkJCSgweDYgPDwgMjEpIHwJLyogTEFOCQkqLwotCQkJCSgxNyAgPDwgMTYpKTsJLyogUEhZX01DU1IJKi8KLQkJZG8gewotCQkJU1dfUkVBRF9SRUcoSU5DQV9JUF9Td2l0Y2hfTURJT19BQ0MsIHBoeVJlZzEpOwotCQl9IHdoaWxlIChwaHlSZWcxICYgKDEgPDwgMzEpKTsKLQotCQlpZiAocGh5UmVnMSAmICgxIDw8IDEpKSB7Ci0JCQkvKiBTaWduYWwgZGV0ZWN0ZWQgKi8KLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFyZXRyaWVzKQotCQlnb3RvIEZhaWw7Ci0jZW5kaWYKLQotCS8qIFNldCBNREkgbW9kZS4KLQkgKi8KLQkqSU5DQV9JUF9BVVRPX01ESVhfTEFOX1BPUlRTX09VVCAmPSB+KDEgPDwgSU5DQV9JUF9BVVRPX01ESVhfTEFOX0dQSU9fUElOX1JYVFgpOwotCW1kaV9mbGFnID0gMTsKLQotCS8qIFdhaXQgZm9yIGxpbmsuCi0JICovCi0JcmV0cmllcyA9IFdBSVRfTElOS19SRVRSSUVTOwotCXdoaWxlICgtLXJldHJpZXMpIHsKLQkJdWRlbGF5KExJTktfUkVUUllfREVMQVkgKiAxMDAwKTsKLQkJU1dfV1JJVEVfUkVHKElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDLAotCQkJCSgweDEgPDwgMzEpIHwJLyogUkEJCSovCi0JCQkJKDB4MCA8PCAzMCkgfAkvKiBSZWFkCQkqLwotCQkJCSgweDYgPDwgMjEpIHwJLyogTEFOCQkqLwotCQkJCSgxICAgPDwgMTYpKTsJLyogUEhZX0JTUgkqLwotCQlkbyB7Ci0JCQlTV19SRUFEX1JFRyhJTkNBX0lQX1N3aXRjaF9NRElPX0FDQywgcGh5UmVnMSk7Ci0JCX0gd2hpbGUgKHBoeVJlZzEgJiAoMSA8PCAzMSkpOwotCi0JCWlmIChwaHlSZWcxICYgKDEgPDwgMikpIHsKLQkJCS8qIExpbmsgaXMgdXAgKi8KLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKG1kaV9mbGFnKSB7Ci0JCQkvKiBTZXQgTURJWCBtb2RlICovCi0JCQkqSU5DQV9JUF9BVVRPX01ESVhfTEFOX1BPUlRTX09VVCB8PSAoMSA8PCBJTkNBX0lQX0FVVE9fTURJWF9MQU5fR1BJT19QSU5fUlhUWCk7Ci0JCQltZGlfZmxhZyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBTZXQgTURJIG1vZGUgKi8KLQkJCSpJTkNBX0lQX0FVVE9fTURJWF9MQU5fUE9SVFNfT1VUICY9IH4oMSA8PCBJTkNBX0lQX0FVVE9fTURJWF9MQU5fR1BJT19QSU5fUlhUWCk7Ci0JCQltZGlfZmxhZyA9IDE7Ci0JCX0KLQl9Ci0KLQlpZiAoIXJldHJpZXMpIHsKLQkJZ290byBGYWlsOwotCX0gZWxzZSB7Ci0JCVNXX1dSSVRFX1JFRyhJTkNBX0lQX1N3aXRjaF9NRElPX0FDQywKLQkJCQkoMHgxIDw8IDMxKSB8CS8qIFJBCQkqLwotCQkJCSgweDAgPDwgMzApIHwJLyogUmVhZAkJKi8KLQkJCQkoMHg2IDw8IDIxKSB8CS8qIExBTgkJKi8KLQkJCQkoMSAgIDw8IDE2KSk7CS8qIFBIWV9CU1IJKi8KLQkJZG8gewotCQkJU1dfUkVBRF9SRUcoSU5DQV9JUF9Td2l0Y2hfTURJT19BQ0MsIHBoeVJlZzEpOwotCQl9IHdoaWxlIChwaHlSZWcxICYgKDEgPDwgMzEpKTsKLQotCQkvKiBBdXRvLW5lZ290aWF0aW9uIC8gUGFyYWxsZWwgZGV0ZWN0aW9uIGNvbXBsZXRlCi0JCSAqLwotCQlpZiAocGh5UmVnMSAmICgxIDw8IDUpKSB7Ci0JCQlTV19XUklURV9SRUcoSU5DQV9JUF9Td2l0Y2hfTURJT19BQ0MsCi0JCQkJKDB4MSA8PCAzMSkgfAkvKiBSQQkJKi8KLQkJCQkoMHgwIDw8IDMwKSB8CS8qIFJlYWQJCSovCi0JCQkJKDB4NiA8PCAyMSkgfAkvKiBMQU4JCSovCi0JCQkJKDMxICA8PCAxNikpOwkvKiBQSFlfU0NTUgkqLwotCQkJZG8gewotCQkJCVNXX1JFQURfUkVHKElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDLCBwaHlSZWczMSk7Ci0JCQl9IHdoaWxlIChwaHlSZWczMSAmICgxIDw8IDMxKSk7Ci0KLQkJCXN3aXRjaCAoKHBoeVJlZzMxID4+IDIpICYgMHg3KSB7Ci0JCQljYXNlIElOQ0FfU1dJVENIX1BIWV9TUEVFRF8xMEg6Ci0JCQkJLyogMTBCYXNlLVQgSGFsZi1kdXBsZXggKi8KLQkJCQlyZWdFcGh5ID0gMDsKLQkJCQlicmVhazsKLQkJCWNhc2UgSU5DQV9TV0lUQ0hfUEhZX1NQRUVEXzEwRjoKLQkJCQkvKiAxMEJhc2UtVCBGdWxsLWR1cGxleCAqLwotCQkJCXJlZ0VwaHkgPSBJTkNBX0lQX1N3aXRjaF9FUEhZX0RMOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJTkNBX1NXSVRDSF9QSFlfU1BFRURfMTAwSDoKLQkJCQkvKiAxMDBCYXNlLVRYIEhhbGYtZHVwbGV4ICovCi0JCQkJcmVnRXBoeSA9IElOQ0FfSVBfU3dpdGNoX0VQSFlfU0w7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIElOQ0FfU1dJVENIX1BIWV9TUEVFRF8xMDBGOgotCQkJCS8qIDEwMEJhc2UtVFggRnVsbC1kdXBsZXggKi8KLQkJCQlyZWdFcGh5ID0gSU5DQV9JUF9Td2l0Y2hfRVBIWV9TTCB8IElOQ0FfSVBfU3dpdGNoX0VQSFlfREw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCS8qIEluIGNhc2Ugb2YgQXV0by1uZWdvdGlhdGlvbiwKLQkJCSAqIHVwZGF0ZSB0aGUgbmVnb3RpYXRlZCBQQVVTRSBzdXBwb3J0IHN0YXR1cwotCQkJICovCi0JCQlpZiAocGh5UmVnMSAmICgxIDw8IDMpKSB7Ci0JCQkJU1dfV1JJVEVfUkVHKElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDLAotCQkJCQkoMHgxIDw8IDMxKSB8CS8qIFJBCQkqLwotCQkJCQkoMHgwIDw8IDMwKSB8CS8qIFJlYWQJCSovCi0JCQkJCSgweDYgPDwgMjEpIHwJLyogTEFOCQkqLwotCQkJCQkoNiAgIDw8IDE2KSk7CS8qIE1JSV9FWFBBTlNJT04JKi8KLQkJCQlkbyB7Ci0JCQkJCVNXX1JFQURfUkVHKElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDLCBwaHlSZWc2KTsKLQkJCQl9IHdoaWxlIChwaHlSZWc2ICYgKDEgPDwgMzEpKTsKLQotCQkJCS8qIFdlIGFyZSBBdXRvbmVnLWFibGUuCi0JCQkJICogSXMgTGluayBwYXJ0bmVyIGFsc28gYWJsZSB0byBhdXRvbmVnPwotCQkJCSAqLwotCQkJCWlmIChwaHlSZWc2ICYgKDEgPDwgMCkpIHsKLQkJCQkJU1dfV1JJVEVfUkVHKElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDLAotCQkJCQkJKDB4MSA8PCAzMSkgfAkvKiBSQQkJKi8KLQkJCQkJCSgweDAgPDwgMzApIHwJLyogUmVhZAkJKi8KLQkJCQkJCSgweDYgPDwgMjEpIHwJLyogTEFOCQkqLwotCQkJCQkJKDQgICA8PCAxNikpOwkvKiBNSUlfQURWRVJUSVNFCSovCi0JCQkJCWRvIHsKLQkJCQkJCVNXX1JFQURfUkVHKElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDLCBwaHlSZWc0KTsKLQkJCQkJfSB3aGlsZSAocGh5UmVnNCAmICgxIDw8IDMxKSk7Ci0KLQkJCQkJLyogV2UgYWR2ZXJ0aXNlIFBBVVNFIGNhcGFiLgotCQkJCQkgKiBEb2VzIGxpbmsgcGFydG5lciBhbHNvIGFkdmVydGlzZSBpdD8KLQkJCQkJICovCi0JCQkJCWlmIChwaHlSZWc0ICYgKDEgPDwgMTApKSB7Ci0JCQkJCQlTV19XUklURV9SRUcoSU5DQV9JUF9Td2l0Y2hfTURJT19BQ0MsCi0JCQkJCQkJKDB4MSA8PCAzMSkgfAkvKiBSQQkJKi8KLQkJCQkJCQkoMHgwIDw8IDMwKSB8CS8qIFJlYWQJCSovCi0JCQkJCQkJKDB4NiA8PCAyMSkgfAkvKiBMQU4JCSovCi0JCQkJCQkJKDUgICA8PCAxNikpOwkvKiBNSUlfTFBBCSovCi0JCQkJCQlkbyB7Ci0JCQkJCQkJU1dfUkVBRF9SRUcoSU5DQV9JUF9Td2l0Y2hfTURJT19BQ0MsIHBoeVJlZzUpOwotCQkJCQkJfSB3aGlsZSAocGh5UmVnNSAmICgxIDw8IDMxKSk7Ci0KLQkJCQkJCS8qIExpbmsgcGFydG5lciBpcyBQQVVTRSBjYXBhYi4KLQkJCQkJCSAqLwotCQkJCQkJaWYgKHBoeVJlZzUgJiAoMSA8PCAxMCkpIHsKLQkJCQkJCQlyZWdFcGh5IHw9IElOQ0FfSVBfU3dpdGNoX0VQSFlfUEw7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCX0KLQotCQkJLyogTGluayBpcyB1cCAqLwotCQkJcmVnRXBoeSB8PSBJTkNBX0lQX1N3aXRjaF9FUEhZX0xMOwotCi0JCQlTV19XUklURV9SRUcoSU5DQV9JUF9Td2l0Y2hfRVBIWSwgcmVnRXBoeSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLQotRmFpbDoKLQlwcmludGYoIk5vIExpbmsgb24gTEFOIHBvcnRcbiIpOwotCXJldHVybiAtMTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfSU5DQV9JUF9TV0lUQ0hfQU1ESVggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xhbjkxYzk2LmggYi9kcml2ZXJzL25ldC9sYW45MWM5Ni5oCmluZGV4IDJmMGQ2NDAuLjNlOTE0Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xhbjkxYzk2LmgKKysrIGIvZHJpdmVycy9uZXQvbGFuOTFjOTYuaApAQCAtNTgsMTMgKzU4LDcgQEAKIAogI2lmZGVmIENPTkZJR19DUFVfUFhBMjVYCiAKLSNpZmRlZglDT05GSUdfTFVCQk9DSwotI2RlZmluZQlTTUNfSU9fU0hJRlQJMgotI3VuZGVmCVVTRV8zMl9CSVQKLQotI2Vsc2UKICNkZWZpbmUJU01DX0lPX1NISUZUCTAKLSNlbmRpZgogCiAjZGVmaW5lCVNNQ1JFRyhlZGV2LCByKQkoKGVkZXYpLT5pb2Jhc2UrKChyKTw8U01DX0lPX1NISUZUKSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNuZXQuYyBiL2RyaXZlcnMvbmV0L3BjbmV0LmMKaW5kZXggNzFhMzExMC4uMjM3ZmJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNuZXQuYworKysgYi9kcml2ZXJzL25ldC9wY25ldC5jCkBAIC03MSwxMiArNzEsMTYgQEAKIAl1MzIgcmVzZXJ2ZWQyOwogfTsKIAotdHlwZWRlZiBzdHJ1Y3QgcGNuZXRfcHJpdiB7CitzdHJ1Y3QgcGNuZXRfdW5jYWNoZWRfcHJpdiB7CiAJc3RydWN0IHBjbmV0X3J4X2hlYWQgcnhfcmluZ1tSWF9SSU5HX1NJWkVdOwogCXN0cnVjdCBwY25ldF90eF9oZWFkIHR4X3JpbmdbVFhfUklOR19TSVpFXTsKIAlzdHJ1Y3QgcGNuZXRfaW5pdF9ibG9jayBpbml0X2Jsb2NrOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcGNuZXRfcHJpdiB7CisJc3RydWN0IHBjbmV0X3VuY2FjaGVkX3ByaXYgKnVjOwogCS8qIFJlY2VpdmUgQnVmZmVyIHNwYWNlICovCi0JdW5zaWduZWQgY2hhciByeF9idWZbUlhfUklOR19TSVpFXVtQS1RfQlVGX1NaICsgNF07CisJdW5zaWduZWQgY2hhciAoKnJ4X2J1ZilbUlhfUklOR19TSVpFXVtQS1RfQlVGX1NaICsgNF07CiAJaW50IGN1cl9yeDsKIAlpbnQgY3VyX3R4OwogfSBwY25ldF9wcml2X3Q7CkBAIC0yODMsNiArMjg3LDcgQEAKIAogc3RhdGljIGludCBwY25ldF9pbml0KHN0cnVjdCBldGhfZGV2aWNlICpkZXYsIGJkX3QgKmJpcykKIHsKKwlzdHJ1Y3QgcGNuZXRfdW5jYWNoZWRfcHJpdiAqdWM7CiAJaW50IGksIHZhbDsKIAl1MzIgYWRkcjsKIApAQCAtMzI1LDI0ICszMzAsMzUgQEAKIAkJYWRkciA9ICh1MzIpbWFsbG9jKHNpemVvZihwY25ldF9wcml2X3QpICsgMHgxMCk7CiAJCWFkZHIgPSAoYWRkciArIDB4ZikgJiB+MHhmOwogCQlscCA9IChwY25ldF9wcml2X3QgKilhZGRyOworCisJCWFkZHIgPSAodTMyKW1lbWFsaWduKEFSQ0hfRE1BX01JTkFMSUdOLCBzaXplb2YoKmxwLT51YykpOworCQlmbHVzaF9kY2FjaGVfcmFuZ2UoYWRkciwgYWRkciArIHNpemVvZigqbHAtPnVjKSk7CisJCWFkZHIgPSBVTkNBQ0hFRF9TRFJBTShhZGRyKTsKKwkJbHAtPnVjID0gKHN0cnVjdCBwY25ldF91bmNhY2hlZF9wcml2ICopYWRkcjsKKworCQlhZGRyID0gKHUzMiltZW1hbGlnbihBUkNIX0RNQV9NSU5BTElHTiwgc2l6ZW9mKCpscC0+cnhfYnVmKSk7CisJCWZsdXNoX2RjYWNoZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZW9mKCpscC0+cnhfYnVmKSk7CisJCWxwLT5yeF9idWYgPSAodm9pZCAqKWFkZHI7CiAJfQogCi0JbHAtPmluaXRfYmxvY2subW9kZSA9IGNwdV90b19sZTE2KDB4MDAwMCk7Ci0JbHAtPmluaXRfYmxvY2suZmlsdGVyWzBdID0gMHgwMDAwMDAwMDsKLQlscC0+aW5pdF9ibG9jay5maWx0ZXJbMV0gPSAweDAwMDAwMDAwOworCXVjID0gbHAtPnVjOworCisJdWMtPmluaXRfYmxvY2subW9kZSA9IGNwdV90b19sZTE2KDB4MDAwMCk7CisJdWMtPmluaXRfYmxvY2suZmlsdGVyWzBdID0gMHgwMDAwMDAwMDsKKwl1Yy0+aW5pdF9ibG9jay5maWx0ZXJbMV0gPSAweDAwMDAwMDAwOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBSeCByaW5nLgogCSAqLwogCWxwLT5jdXJfcnggPSAwOwogCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgewotCQlscC0+cnhfcmluZ1tpXS5iYXNlID0gUENJX1RPX01FTV9MRShkZXYsIGxwLT5yeF9idWZbaV0pOwotCQlscC0+cnhfcmluZ1tpXS5idWZfbGVuZ3RoID0gY3B1X3RvX2xlMTYoLVBLVF9CVUZfU1opOwotCQlscC0+cnhfcmluZ1tpXS5zdGF0dXMgPSBjcHVfdG9fbGUxNigweDgwMDApOworCQl1Yy0+cnhfcmluZ1tpXS5iYXNlID0gUENJX1RPX01FTV9MRShkZXYsICgqbHAtPnJ4X2J1ZilbaV0pOworCQl1Yy0+cnhfcmluZ1tpXS5idWZfbGVuZ3RoID0gY3B1X3RvX2xlMTYoLVBLVF9CVUZfU1opOworCQl1Yy0+cnhfcmluZ1tpXS5zdGF0dXMgPSBjcHVfdG9fbGUxNigweDgwMDApOwogCQlQQ05FVF9ERUJVRzEKIAkJCSgiUnglZDogYmFzZT0weCV4IGJ1Zl9sZW5ndGg9MHglaHggc3RhdHVzPTB4JWh4XG4iLCBpLAotCQkJIGxwLT5yeF9yaW5nW2ldLmJhc2UsIGxwLT5yeF9yaW5nW2ldLmJ1Zl9sZW5ndGgsCi0JCQkgbHAtPnJ4X3JpbmdbaV0uc3RhdHVzKTsKKwkJCSB1Yy0+cnhfcmluZ1tpXS5iYXNlLCB1Yy0+cnhfcmluZ1tpXS5idWZfbGVuZ3RoLAorCQkJIHVjLT5yeF9yaW5nW2ldLnN0YXR1cyk7CiAJfQogCiAJLyoKQEAgLTM1MSwzNCArMzY3LDM0IEBACiAJICovCiAJbHAtPmN1cl90eCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IFRYX1JJTkdfU0laRTsgaSsrKSB7Ci0JCWxwLT50eF9yaW5nW2ldLmJhc2UgPSAwOwotCQlscC0+dHhfcmluZ1tpXS5zdGF0dXMgPSAwOworCQl1Yy0+dHhfcmluZ1tpXS5iYXNlID0gMDsKKwkJdWMtPnR4X3JpbmdbaV0uc3RhdHVzID0gMDsKIAl9CiAKIAkvKgogCSAqIFNldHVwIEluaXQgQmxvY2suCiAJICovCi0JUENORVRfREVCVUcxKCJJbml0IGJsb2NrIGF0IDB4JXA6IE1BQyIsICZscC0+aW5pdF9ibG9jayk7CisJUENORVRfREVCVUcxKCJJbml0IGJsb2NrIGF0IDB4JXA6IE1BQyIsICZscC0+dWMtPmluaXRfYmxvY2spOwogCiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQlscC0+aW5pdF9ibG9jay5waHlzX2FkZHJbaV0gPSBkZXYtPmVuZXRhZGRyW2ldOwotCQlQQ05FVF9ERUJVRzEoIiAlMDJ4IiwgbHAtPmluaXRfYmxvY2sucGh5c19hZGRyW2ldKTsKKwkJbHAtPnVjLT5pbml0X2Jsb2NrLnBoeXNfYWRkcltpXSA9IGRldi0+ZW5ldGFkZHJbaV07CisJCVBDTkVUX0RFQlVHMSgiICUwMngiLCBscC0+dWMtPmluaXRfYmxvY2sucGh5c19hZGRyW2ldKTsKIAl9CiAKLQlscC0+aW5pdF9ibG9jay50bGVuX3JsZW4gPSBjcHVfdG9fbGUxNihUWF9SSU5HX0xFTl9CSVRTIHwKKwl1Yy0+aW5pdF9ibG9jay50bGVuX3JsZW4gPSBjcHVfdG9fbGUxNihUWF9SSU5HX0xFTl9CSVRTIHwKIAkJCQkJICAgICAgIFJYX1JJTkdfTEVOX0JJVFMpOwotCWxwLT5pbml0X2Jsb2NrLnJ4X3JpbmcgPSBQQ0lfVE9fTUVNX0xFKGRldiwgbHAtPnJ4X3JpbmcpOwotCWxwLT5pbml0X2Jsb2NrLnR4X3JpbmcgPSBQQ0lfVE9fTUVNX0xFKGRldiwgbHAtPnR4X3JpbmcpOwotCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylscCwgKHVuc2lnbmVkIGxvbmcpJmxwLT5yeF9idWYpOworCXVjLT5pbml0X2Jsb2NrLnJ4X3JpbmcgPSBQQ0lfVE9fTUVNX0xFKGRldiwgdWMtPnJ4X3JpbmcpOworCXVjLT5pbml0X2Jsb2NrLnR4X3JpbmcgPSBQQ0lfVE9fTUVNX0xFKGRldiwgdWMtPnR4X3JpbmcpOwogCiAJUENORVRfREVCVUcxKCJcbnRsZW5fcmxlbj0weCV4IHJ4X3Jpbmc9MHgleCB0eF9yaW5nPTB4JXhcbiIsCi0JCSAgICAgbHAtPmluaXRfYmxvY2sudGxlbl9ybGVuLAotCQkgICAgIGxwLT5pbml0X2Jsb2NrLnJ4X3JpbmcsIGxwLT5pbml0X2Jsb2NrLnR4X3JpbmcpOworCQkgICAgIHVjLT5pbml0X2Jsb2NrLnRsZW5fcmxlbiwKKwkJICAgICB1Yy0+aW5pdF9ibG9jay5yeF9yaW5nLCB1Yy0+aW5pdF9ibG9jay50eF9yaW5nKTsKIAogCS8qCiAJICogVGVsbCB0aGUgY29udHJvbGxlciB3aGVyZSB0aGUgSW5pdCBCbG9jayBpcyBsb2NhdGVkLgogCSAqLwotCWFkZHIgPSBQQ0lfVE9fTUVNKGRldiwgJmxwLT5pbml0X2Jsb2NrKTsKKwliYXJyaWVyKCk7CisJYWRkciA9IFBDSV9UT19NRU0oZGV2LCAmbHAtPnVjLT5pbml0X2Jsb2NrKTsKIAlwY25ldF93cml0ZV9jc3IoZGV2LCAxLCBhZGRyICYgMHhmZmZmKTsKIAlwY25ldF93cml0ZV9jc3IoZGV2LCAyLCAoYWRkciA+PiAxNikgJiAweGZmZmYpOwogCkBAIC00MDgsNyArNDI0LDcgQEAKIHN0YXRpYyBpbnQgcGNuZXRfc2VuZChzdHJ1Y3QgZXRoX2RldmljZSAqZGV2LCB2b2lkICpwYWNrZXQsIGludCBwa3RfbGVuKQogewogCWludCBpLCBzdGF0dXM7Ci0Jc3RydWN0IHBjbmV0X3R4X2hlYWQgKmVudHJ5ID0gJmxwLT50eF9yaW5nW2xwLT5jdXJfdHhdOworCXN0cnVjdCBwY25ldF90eF9oZWFkICplbnRyeSA9ICZscC0+dWMtPnR4X3JpbmdbbHAtPmN1cl90eF07CiAKIAlQQ05FVF9ERUJVRzIoIlR4JWQ6ICVkIGJ5dGVzIGZyb20gMHglcCAiLCBscC0+Y3VyX3R4LCBwa3RfbGVuLAogCQkgICAgIHBhY2tldCk7CkBAIC00MTgsOSArNDM0LDcgQEAKIAogCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gYnkgdGVzdGluZyB0aGUgT1dOIGJpdCAqLwogCWZvciAoaSA9IDEwMDA7IGkgPiAwOyBpLS0pIHsKLQkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpZW50cnksCi0JCQkJCSh1bnNpZ25lZCBsb25nKWVudHJ5ICsgc2l6ZW9mKCplbnRyeSkpOwotCQlzdGF0dXMgPSBsZTE2X3RvX2NwdShlbnRyeS0+c3RhdHVzKTsKKwkJc3RhdHVzID0gcmVhZHcoJmVudHJ5LT5zdGF0dXMpOwogCQlpZiAoKHN0YXR1cyAmIDB4ODAwMCkgPT0gMCkKIAkJCWJyZWFrOwogCQl1ZGVsYXkoMTAwKTsKQEAgLTQzNywxMyArNDUxLDEwIEBACiAJICogU2V0dXAgVHggcmluZy4gQ2F1dGlvbjogdGhlIHdyaXRlIG9yZGVyIGlzIGltcG9ydGFudCBoZXJlLAogCSAqIHNldCB0aGUgc3RhdHVzIHdpdGggdGhlICJvd25lcnNoaXAiIGJpdHMgbGFzdC4KIAkgKi8KLQlzdGF0dXMgPSAweDgzMDA7Ci0JZW50cnktPmxlbmd0aCA9IGNwdV90b19sZTE2KC1wa3RfbGVuKTsKLQllbnRyeS0+bWlzYyA9IDB4MDAwMDAwMDA7Ci0JZW50cnktPmJhc2UgPSBQQ0lfVE9fTUVNX0xFKGRldiwgcGFja2V0KTsKLQllbnRyeS0+c3RhdHVzID0gY3B1X3RvX2xlMTYoc3RhdHVzKTsKLQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpZW50cnksCi0JCQkgICAodW5zaWduZWQgbG9uZyllbnRyeSArIHNpemVvZigqZW50cnkpKTsKKwl3cml0ZXcoLXBrdF9sZW4sICZlbnRyeS0+bGVuZ3RoKTsKKwl3cml0ZWwoMCwgJmVudHJ5LT5taXNjKTsKKwl3cml0ZWwoUENJX1RPX01FTShkZXYsIHBhY2tldCksICZlbnRyeS0+YmFzZSk7CisJd3JpdGV3KDB4ODMwMCwgJmVudHJ5LT5zdGF0dXMpOwogCiAJLyogVHJpZ2dlciBhbiBpbW1lZGlhdGUgc2VuZCBwb2xsLiAqLwogCXBjbmV0X3dyaXRlX2NzcihkZXYsIDAsIDB4MDAwOCk7CkBAIC00NTksNTQgKzQ3MCw1MSBAQAogc3RhdGljIGludCBwY25ldF9yZWN2IChzdHJ1Y3QgZXRoX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwY25ldF9yeF9oZWFkICplbnRyeTsKKwl1bnNpZ25lZCBjaGFyICpidWY7CiAJaW50IHBrdF9sZW4gPSAwOwotCXUxNiBzdGF0dXM7CisJdTE2IHN0YXR1cywgZXJyX3N0YXR1czsKIAogCXdoaWxlICgxKSB7Ci0JCWVudHJ5ID0gJmxwLT5yeF9yaW5nW2xwLT5jdXJfcnhdOwotCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyllbnRyeSwKLQkJCQkJKHVuc2lnbmVkIGxvbmcpZW50cnkgKyBzaXplb2YoKmVudHJ5KSk7CisJCWVudHJ5ID0gJmxwLT51Yy0+cnhfcmluZ1tscC0+Y3VyX3J4XTsKIAkJLyoKIAkJICogSWYgd2Ugb3duIHRoZSBuZXh0IGVudHJ5LCBpdCdzIGEgbmV3IHBhY2tldC4gU2VuZCBpdCB1cC4KIAkJICovCi0JCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGVudHJ5LT5zdGF0dXMpOworCQlzdGF0dXMgPSByZWFkdygmZW50cnktPnN0YXR1cyk7CiAJCWlmICgoc3RhdHVzICYgMHg4MDAwKSAhPSAwKQogCQkJYnJlYWs7Ci0JCXN0YXR1cyA+Pj0gODsKKwkJZXJyX3N0YXR1cyA9IHN0YXR1cyA+PiA4OwogCi0JCWlmIChzdGF0dXMgIT0gMHgwMykgewkvKiBUaGVyZSB3YXMgYW4gZXJyb3IuICovCisJCWlmIChlcnJfc3RhdHVzICE9IDB4MDMpIHsJLyogVGhlcmUgd2FzIGFuIGVycm9yLiAqLwogCQkJcHJpbnRmKCIlczogUnglZCIsIGRldi0+bmFtZSwgbHAtPmN1cl9yeCk7Ci0JCQlQQ05FVF9ERUJVRzEoIiAoc3RhdHVzPTB4JXgpIiwgc3RhdHVzKTsKLQkJCWlmIChzdGF0dXMgJiAweDIwKQorCQkJUENORVRfREVCVUcxKCIgKHN0YXR1cz0weCV4KSIsIGVycl9zdGF0dXMpOworCQkJaWYgKGVycl9zdGF0dXMgJiAweDIwKQogCQkJCXByaW50ZigiIEZyYW1lIik7Ci0JCQlpZiAoc3RhdHVzICYgMHgxMCkKKwkJCWlmIChlcnJfc3RhdHVzICYgMHgxMCkKIAkJCQlwcmludGYoIiBPdmVyZmxvdyIpOwotCQkJaWYgKHN0YXR1cyAmIDB4MDgpCisJCQlpZiAoZXJyX3N0YXR1cyAmIDB4MDgpCiAJCQkJcHJpbnRmKCIgQ1JDIik7Ci0JCQlpZiAoc3RhdHVzICYgMHgwNCkKKwkJCWlmIChlcnJfc3RhdHVzICYgMHgwNCkKIAkJCQlwcmludGYoIiBGaWZvIik7CiAJCQlwcmludGYoIiBFcnJvclxuIik7Ci0JCQllbnRyeS0+c3RhdHVzICY9IGxlMTZfdG9fY3B1KDB4MDNmZik7CisJCQlzdGF0dXMgJj0gMHgwM2ZmOwogCiAJCX0gZWxzZSB7Ci0JCQlwa3RfbGVuID0gKGxlMzJfdG9fY3B1KGVudHJ5LT5tc2dfbGVuZ3RoKSAmIDB4ZmZmKSAtIDQ7CisJCQlwa3RfbGVuID0gKHJlYWRsKCZlbnRyeS0+bXNnX2xlbmd0aCkgJiAweGZmZikgLSA0OwogCQkJaWYgKHBrdF9sZW4gPCA2MCkgewogCQkJCXByaW50ZigiJXM6IFJ4JWQ6IGludmFsaWQgcGFja2V0IGxlbmd0aCAlZFxuIiwKIAkJCQkgICAgICAgZGV2LT5uYW1lLCBscC0+Y3VyX3J4LCBwa3RfbGVuKTsKIAkJCX0gZWxzZSB7Ci0JCQkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoCi0JCQkJCSh1bnNpZ25lZCBsb25nKWxwLT5yeF9idWZbbHAtPmN1cl9yeF0sCi0JCQkJCSh1bnNpZ25lZCBsb25nKWxwLT5yeF9idWZbbHAtPmN1cl9yeF0gKwotCQkJCQlwa3RfbGVuKTsKLQkJCQlOZXRSZWNlaXZlKGxwLT5yeF9idWZbbHAtPmN1cl9yeF0sIHBrdF9sZW4pOworCQkJCWJ1ZiA9ICgqbHAtPnJ4X2J1ZilbbHAtPmN1cl9yeF07CisJCQkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYnVmLAorCQkJCQkodW5zaWduZWQgbG9uZylidWYgKyBwa3RfbGVuKTsKKwkJCQlOZXRSZWNlaXZlKGJ1ZiwgcGt0X2xlbik7CiAJCQkJUENORVRfREVCVUcyKCJSeCVkOiAlZCBieXRlcyBmcm9tIDB4JXBcbiIsCi0JCQkJCSAgICAgbHAtPmN1cl9yeCwgcGt0X2xlbiwKLQkJCQkJICAgICBscC0+cnhfYnVmW2xwLT5jdXJfcnhdKTsKKwkJCQkJICAgICBscC0+Y3VyX3J4LCBwa3RfbGVuLCBidWYpOwogCQkJfQogCQl9Ci0JCWVudHJ5LT5zdGF0dXMgfD0gY3B1X3RvX2xlMTYoMHg4MDAwKTsKLQkJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWVudHJ5LAotCQkJCSAgICh1bnNpZ25lZCBsb25nKWVudHJ5ICsgc2l6ZW9mKCplbnRyeSkpOworCisJCXN0YXR1cyB8PSAweDgwMDA7CisJCXdyaXRldyhzdGF0dXMsICZlbnRyeS0+c3RhdHVzKTsKIAogCQlpZiAoKytscC0+Y3VyX3J4ID49IFJYX1JJTkdfU0laRSkKIAkJCWxwLT5jdXJfcnggPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2F0aGVyb3MuYyBiL2RyaXZlcnMvbmV0L3BoeS9hdGhlcm9zLmMKaW5kZXggYjgwOTgwZC4uYWJkNGU1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2F0aGVyb3MuYworKysgYi9kcml2ZXJzL25ldC9waHkvYXRoZXJvcy5jCkBAIC01Myw3ICs1Myw3IEBACiAJLnVpZCA9IDB4NGRkMDc0LAogCS5tYXNrID0gMHhmZmZmZmZlZiwKIAkuZmVhdHVyZXMgPSBQSFlfR0JJVF9GRUFUVVJFUywKLQkuY29uZmlnID0gZ2VucGh5X2NvbmZpZywKKwkuY29uZmlnID0gYXI4MDIxX2NvbmZpZywKIAkuc3RhcnR1cCA9IGdlbnBoeV9zdGFydHVwLAogCS5zaHV0ZG93biA9IGdlbnBoeV9zaHV0ZG93biwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvdml0ZXNzZS5jIGIvZHJpdmVycy9uZXQvcGh5L3ZpdGVzc2UuYwppbmRleCBjNTU1OTc5Li4zYTU1ZDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvdml0ZXNzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS92aXRlc3NlLmMKQEAgLTI5Niw3ICsyOTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgVlNDODUxNF9kcml2ZXIgPSB7CiAJLm5hbWUgPSAiVml0ZXNzZSBWU0M4NTE0IiwKLQkudWlkID0gMHg3MDU3MCwKKwkudWlkID0gMHg3MDY3MCwKIAkubWFzayA9IDB4ZmZmZjAsCiAJLmZlYXR1cmVzID0gUEhZX0dCSVRfRkVBVFVSRVMsCiAJLmNvbmZpZyA9ICZ2c2M4NTE0X2NvbmZpZywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3p5bnFfZ2VtLmMgYi9kcml2ZXJzL25ldC96eW5xX2dlbS5jCmluZGV4IDEwMTQ4OWMuLjNjYWRkMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3p5bnFfZ2VtLmMKKysrIGIvZHJpdmVycy9uZXQvenlucV9nZW0uYwpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8bmV0Lmg+CisjaW5jbHVkZSA8bmV0ZGV2Lmg+CiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8ZmR0ZGVjLmg+CiAjaW5jbHVkZSA8bGliZmR0Lmg+CkBAIC0zMzgsNyArMzM5LDggQEAKIAlwaHlfZGV0ZWN0aW9uKGRldik7CiAKIAkvKiBpbnRlcmZhY2UgLSBsb29rIGF0IHRzZWMgKi8KLQlwaHlkZXYgPSBwaHlfY29ubmVjdChwcml2LT5idXMsIHByaXYtPnBoeWFkZHIsIGRldiwgMCk7CisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QocHJpdi0+YnVzLCBwcml2LT5waHlhZGRyLCBkZXYsCisJCQkgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwogCiAJcGh5ZGV2LT5zdXBwb3J0ZWQgPSBzdXBwb3J0ZWQgfCBBRFZFUlRJU0VEX1BhdXNlIHwKIAkJCSAgICBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tcGM4eHhfcGNtY2lhLmMgYi9kcml2ZXJzL3BjbWNpYS9tcGM4eHhfcGNtY2lhLmMKaW5kZXggMzczMjU4My4uNjYzODI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbXBjOHh4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL21wYzh4eF9wY21jaWEuYwpAQCAtMjExLDcgKzIxMSw3IEBACiAKICNpZgkwCiAKLSNpZglkZWZpbmVkKENPTkZJR19SUFhDTEFTU0lDKSB8fCBkZWZpbmVkKENPTkZJR19SUFhMSVRFKQorI2lmIGRlZmluZWQoQ09ORklHX1JQWExJVEUpCiAKIC8qIFRoZSBSUFggYm9hcmRzIHNlZW1zIHRvIGhhdmUgaXQncyBidXMgbW9uaXRvciB0aW1lb3V0IHNldCB0byA2KjggY2xvY2tzLgogICogU1lQQ1IgaXMgd3JpdGUgb25jZSBvbmx5LCB0aGVyZWZvcmUgbXVzdCB0aGUgc2xvd2VzdCBtZW1vcnkgYmUgZmFzdGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9ycHhfcGNtY2lhLmMgYi9kcml2ZXJzL3BjbWNpYS9ycHhfcGNtY2lhLmMKaW5kZXggYzdjNDI1Yi4uNWIyNGYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnB4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JweF9wY21jaWEuYwpAQCAtMTgsNyArMTgsNyBAQAogI2VuZGlmCiAKICNpZglkZWZpbmVkKENPTkZJR19QQ01DSUEpCVwKLQkmJiAoZGVmaW5lZChDT05GSUdfUlBYQ0xBU1NJQykgfHwgZGVmaW5lZChDT05GSUdfUlBYTElURSkpCisJJiYgZGVmaW5lZChDT05GSUdfUlBYTElURSkKIAogI2RlZmluZQlQQ01DSUFfQk9BUkRfTVNHCSJSUFggQ0xBU1NJQyBvciBSUFggTElURSIKIApAQCAtNzAsNCArNzAsNCBAQAogI2VuZGlmCiAKIAotI2VuZGlmCS8qIENPTkZJR19QQ01DSUEgJiYgKENPTkZJR19SUFhDTEFTU0lDIHx8IENPTkZJR19SUFhMSVRFKSAqLworI2VuZGlmCS8qIENPTkZJR19QQ01DSUEgJiYgQ09ORklHX1JQWExJVEUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcWUvcWUuYyBiL2RyaXZlcnMvcWUvcWUuYwppbmRleCBiNWRkYzRiLi5iMWRhNzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3FlL3FlLmMKKysrIGIvZHJpdmVycy9xZS9xZS5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAkvKgogCSAqIFVwbG9hZCBtaWNyb2NvZGUgdG8gSVJBTSBmb3IgdGhvc2UgU09DcyB3aGljaCBkbyBub3QgaGF2ZSBST00gaW4gUUUuCiAJICovCi0JcWVfdXBsb2FkX2Zpcm13YXJlKChjb25zdCB2b2lkICopQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIpOworCXFlX3VwbG9hZF9maXJtd2FyZSgoY29uc3Qgdm9pZCAqKUNPTkZJR19TWVNfUUVfRldfQUREUik7CiAKIAkvKiBlbmFibGUgdGhlIG1pY3JvY29kZSBpbiBJUkFNICovCiAJb3V0X2JlMzIoJnFlX2ltbXItPmlyYW0uaXJlYWR5LFFFX0lSQU1fUkVBRFkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9xZS9xZS5oIGIvZHJpdmVycy9xZS9xZS5oCmluZGV4IGM4MmFjN2IuLmViYjdjNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcWUvcWUuaAorKysgYi9kcml2ZXJzL3FlL3FlLmgKQEAgLTI4Miw1ICsyODIsNyBAQAogaW50IHFlX3VwbG9hZF9maXJtd2FyZShjb25zdCBzdHJ1Y3QgcWVfZmlybXdhcmUgKmZpcm13YXJlKTsKIHN0cnVjdCBxZV9maXJtd2FyZV9pbmZvICpxZV9nZXRfZmlybXdhcmVfaW5mbyh2b2lkKTsKIHZvaWQgZnRfcWVfc2V0dXAodm9pZCAqYmxvYik7Cit2b2lkIHFlX2luaXQodWludCBxZV9iYXNlKTsKK3ZvaWQgcWVfcmVzZXQodm9pZCk7CiAKICNlbmRpZiAvKiBfX1FFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWwuYwppbmRleCBkZjA1YmRlLi5jNGZiNTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWwuYwpAQCAtMTE3LDcgKzExNyw3IEBACiBzZXJpYWxfaW5pdGZ1bmMocHhhX3NlcmlhbF9pbml0aWFsaXplKTsKIHNlcmlhbF9pbml0ZnVuYyhzM2MyNHh4X3NlcmlhbF9pbml0aWFsaXplKTsKIHNlcmlhbF9pbml0ZnVuYyhzNXBfc2VyaWFsX2luaXRpYWxpemUpOwotc2VyaWFsX2luaXRmdW5jKHp5bnFfc2VyaWFsX2luaXRhbGl6ZSk7CitzZXJpYWxfaW5pdGZ1bmMoenlucV9zZXJpYWxfaW5pdGlhbGl6ZSk7CiBzZXJpYWxfaW5pdGZ1bmMoYmZpbl9zZXJpYWxfaW5pdGlhbGl6ZSk7CiBzZXJpYWxfaW5pdGZ1bmMoYmZpbl9qdGFnX2luaXRpYWxpemUpOwogc2VyaWFsX2luaXRmdW5jKG1wYzUxMnhfc2VyaWFsX2luaXRpYWxpemUpOwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJYmZpbl9zZXJpYWxfaW5pdGlhbGl6ZSgpOwogCWJmaW5fanRhZ19pbml0aWFsaXplKCk7CiAJdWFydGxpdGVfc2VyaWFsX2luaXRpYWxpemUoKTsKLQl6eW5xX3NlcmlhbF9pbml0YWxpemUoKTsKKwl6eW5xX3NlcmlhbF9pbml0aWFsaXplKCk7CiAJYXUxeDAwX3NlcmlhbF9pbml0aWFsaXplKCk7CiAJYXNjX3NlcmlhbF9pbml0aWFsaXplKCk7CiAJanpfc2VyaWFsX2luaXRpYWxpemUoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF96eW5xLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfenlucS5jCmluZGV4IDUzYThhZjAuLjFmZjI3ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF96eW5xLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3p5bnEuYwpAQCAtMTUzLDE3ICsxNTMsMTcgQEAKIAogLyogTXVsdGkgc2VyaWFsIGRldmljZSBmdW5jdGlvbnMgKi8KICNkZWZpbmUgREVDTEFSRV9QU1NFUklBTF9GVU5DVElPTlMocG9ydCkgXAotCWludCB1YXJ0X3p5bnEjI3BvcnQjI19pbml0KHZvaWQpIFwKKwlzdGF0aWMgaW50IHVhcnRfenlucSMjcG9ydCMjX2luaXQodm9pZCkgXAogCQkJCXsgcmV0dXJuIHVhcnRfenlucV9zZXJpYWxfaW5pdChwb3J0KTsgfSBcCi0Jdm9pZCB1YXJ0X3p5bnEjI3BvcnQjI19zZXRicmcodm9pZCkgXAorCXN0YXRpYyB2b2lkIHVhcnRfenlucSMjcG9ydCMjX3NldGJyZyh2b2lkKSBcCiAJCQkJeyByZXR1cm4gdWFydF96eW5xX3NlcmlhbF9zZXRicmcocG9ydCk7IH0gXAotCWludCB1YXJ0X3p5bnEjI3BvcnQjI19nZXRjKHZvaWQpIFwKKwlzdGF0aWMgaW50IHVhcnRfenlucSMjcG9ydCMjX2dldGModm9pZCkgXAogCQkJCXsgcmV0dXJuIHVhcnRfenlucV9zZXJpYWxfZ2V0Yyhwb3J0KTsgfSBcCi0JaW50IHVhcnRfenlucSMjcG9ydCMjX3RzdGModm9pZCkgXAorCXN0YXRpYyBpbnQgdWFydF96eW5xIyNwb3J0IyNfdHN0Yyh2b2lkKSBcCiAJCQkJeyByZXR1cm4gdWFydF96eW5xX3NlcmlhbF90c3RjKHBvcnQpOyB9IFwKLQl2b2lkIHVhcnRfenlucSMjcG9ydCMjX3B1dGMoY29uc3QgY2hhciBjKSBcCisJc3RhdGljIHZvaWQgdWFydF96eW5xIyNwb3J0IyNfcHV0Yyhjb25zdCBjaGFyIGMpIFwKIAkJCQl7IHVhcnRfenlucV9zZXJpYWxfcHV0YyhjLCBwb3J0KTsgfSBcCi0Jdm9pZCB1YXJ0X3p5bnEjI3BvcnQjI19wdXRzKGNvbnN0IGNoYXIgKnMpIFwKKwlzdGF0aWMgdm9pZCB1YXJ0X3p5bnEjI3BvcnQjI19wdXRzKGNvbnN0IGNoYXIgKnMpIFwKIAkJCQl7IHVhcnRfenlucV9zZXJpYWxfcHV0cyhzLCBwb3J0KTsgfQogCiAvKiBTZXJpYWwgZGV2aWNlIGRlc2NyaXB0b3IgKi8KQEAgLTE3OSwxMCArMTc5LDEwIEBACiB9CiAKIERFQ0xBUkVfUFNTRVJJQUxfRlVOQ1RJT05TKDApOwotc3RydWN0IHNlcmlhbF9kZXZpY2UgdWFydF96eW5xX3NlcmlhbDBfZGV2aWNlID0KK3N0YXRpYyBzdHJ1Y3Qgc2VyaWFsX2RldmljZSB1YXJ0X3p5bnFfc2VyaWFsMF9kZXZpY2UgPQogCUlOSVRfUFNTRVJJQUxfU1RSVUNUVVJFKDAsICJ0dHlQUzAiKTsKIERFQ0xBUkVfUFNTRVJJQUxfRlVOQ1RJT05TKDEpOwotc3RydWN0IHNlcmlhbF9kZXZpY2UgdWFydF96eW5xX3NlcmlhbDFfZGV2aWNlID0KK3N0YXRpYyBzdHJ1Y3Qgc2VyaWFsX2RldmljZSB1YXJ0X3p5bnFfc2VyaWFsMV9kZXZpY2UgPQogCUlOSVRfUFNTRVJJQUxfU1RSVUNUVVJFKDEsICJ0dHlQUzEiKTsKIAogI2lmZGVmIENPTkZJR19PRl9DT05UUk9MCkBAIC0yMjMsNyArMjIzLDcgQEAKIH0KICNlbmRpZgogCi12b2lkIHp5bnFfc2VyaWFsX2luaXRhbGl6ZSh2b2lkKQordm9pZCB6eW5xX3NlcmlhbF9pbml0aWFsaXplKHZvaWQpCiB7CiAJc2VyaWFsX3JlZ2lzdGVyKCZ1YXJ0X3p5bnFfc2VyaWFsMF9kZXZpY2UpOwogCXNlcmlhbF9yZWdpc3RlcigmdWFydF96eW5xX3NlcmlhbDFfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQppbmRleCA4MDRhMmJkLi44OTZjOGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCkBAIC0xMyw2ICsxMyw3IEBACiBvYmotJChDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBKSArPSBhdG1lbF91c2JhX3VkYy5vCiBvYmotJChDT05GSUdfVVNCX0dBREdFVF9TM0NfVURDX09URykgKz0gczNjX3VkY19vdGcubwogb2JqLSQoQ09ORklHX1VTQl9HQURHRVRfRk9URzIxMCkgKz0gZm90ZzIxMC5vCitvYmotJChDT05GSUdfQ0lfVURDKQkrPSBjaV91ZGMubwogb2JqLSQoQ09ORklHX1RIT1JfRlVOQ1RJT04pICs9IGZfdGhvci5vCiBvYmotJChDT05GSUdfVVNCRE9XTkxPQURfR0FER0VUKSArPSBnX2RubC5vCiBvYmotJChDT05GSUdfREZVX0ZVTkNUSU9OKSArPSBmX2RmdS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2lfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2lfdWRjLmMKaW5kZXggMTRiMWU5Yi4uMDJkM2ZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaV91ZGMuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJaWYgKGFkZHIgPT0gYmEpCiAJCXJldHVybjsJCS8qIG5vdCBhIGJvdW5jZSAqLwogCi0JbWVtY3B5KGVwLT5yZXEuYnVmLCBlcC0+Yl9idWYsIGVwLT5yZXEubGVuZ3RoKTsKKwltZW1jcHkoZXAtPnJlcS5idWYsIGVwLT5iX2J1ZiwgZXAtPnJlcS5hY3R1YWwpOwogZnJlZToKIAkvKiBMYXJnZSBwYXlsb2FkcyB1c2UgYWxsb2NhdGVkIGJ1ZmZlciwgZnJlZSBpdC4gKi8KIAlpZiAoZXAtPmJfYnVmICE9IGVwLT5iX2Zhc3QpCkBAIC0zNTAsNiArMzUwLDkgQEAKIAlpdGVtLT5pbmZvID0gSU5GT19CWVRFUyhsZW4pIHwgSU5GT19JT0MgfCBJTkZPX0FDVElWRTsKIAlpdGVtLT5wYWdlMCA9ICh1aW50MzJfdCljaV9lcC0+Yl9idWY7CiAJaXRlbS0+cGFnZTEgPSAoKHVpbnQzMl90KWNpX2VwLT5iX2J1ZiAmIDB4ZmZmZmYwMDApICsgMHgxMDAwOworCWl0ZW0tPnBhZ2UyID0gKCh1aW50MzJfdCljaV9lcC0+Yl9idWYgJiAweGZmZmZmMDAwKSArIDB4MjAwMDsKKwlpdGVtLT5wYWdlMyA9ICgodWludDMyX3QpY2lfZXAtPmJfYnVmICYgMHhmZmZmZjAwMCkgKyAweDMwMDA7CisJaXRlbS0+cGFnZTQgPSAoKHVpbnQzMl90KWNpX2VwLT5iX2J1ZiAmIDB4ZmZmZmYwMDApICsgMHg0MDAwOwogCWNpX2ZsdXNoX3F0ZChudW0pOwogCiAJaGVhZC0+bmV4dCA9ICh1bnNpZ25lZCkgaXRlbTsKQEAgLTM4NSw3ICszODgsNyBAQAogCQkgICAgICAgbnVtLCBpbiA/ICJpbiIgOiAib3V0IiwgaXRlbS0+aW5mbywgaXRlbS0+cGFnZTApOwogCiAJbGVuID0gKGl0ZW0tPmluZm8gPj4gMTYpICYgMHg3ZmZmOwotCWVwLT5yZXEubGVuZ3RoIC09IGxlbjsKKwllcC0+cmVxLmFjdHVhbCA9IGVwLT5yZXEubGVuZ3RoIC0gbGVuOwogCWNpX2RlYm91bmNlKGVwLCBpbik7CiAKIAlEQkcoImVwdCVkICVzIGNvbXBsZXRlICV4XG4iLApAQCAtNDEzLDcgKzQxNiwxMSBAQAogCiAJY2lfaW52YWxpZGF0ZV9xaCgwKTsKIAltZW1jcHkoJnIsIGhlYWQtPnNldHVwX2RhdGEsIHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSk7CisjaWZkZWYgQ09ORklHX0NJX1VEQ19IQVNfSE9TVFBDCisJd3JpdGVsKEVQVF9SWCgwKSwgJnVkYy0+ZXBzZXR1cHN0YXQpOworI2Vsc2UKIAl3cml0ZWwoRVBUX1JYKDApLCAmdWRjLT5lcHN0YXQpOworI2VuZGlmCiAJREJHKCJoYW5kbGUgc2V0dXAgJXMsICV4LCAleCBpbmRleCAleCB2YWx1ZSAleFxuIiwgcmVxbmFtZShyLmJSZXF1ZXN0KSwKIAkgICAgci5iUmVxdWVzdFR5cGUsIHIuYlJlcXVlc3QsIHIud0luZGV4LCByLndWYWx1ZSk7CiAKQEAgLTQ4MCw2ICs0ODcsOSBAQAogCXN0cnVjdCBlcHRfcXVldWVfaGVhZCAqaGVhZDsKIAlzdHJ1Y3QgY2lfdWRjICp1ZGMgPSAoc3RydWN0IGNpX3VkYyAqKWNvbnRyb2xsZXIuY3RybC0+aGNvcjsKIAl3cml0ZWwocmVhZGwoJnVkYy0+ZXBjb21wKSwgJnVkYy0+ZXBjb21wKTsKKyNpZmRlZiBDT05GSUdfQ0lfVURDX0hBU19IT1NUUEMKKwl3cml0ZWwocmVhZGwoJnVkYy0+ZXBzZXR1cHN0YXQpLCAmdWRjLT5lcHNldHVwc3RhdCk7CisjZW5kaWYKIAl3cml0ZWwocmVhZGwoJnVkYy0+ZXBzdGF0KSwgJnVkYy0+ZXBzdGF0KTsKIAl3cml0ZWwoMHhmZmZmZmZmZiwgJnVkYy0+ZXBmbHVzaCk7CiAKQEAgLTUyMSw3ICs1MzEsMTEgQEAKIAkJaW50IG1heCA9IDY0OwogCQlpbnQgc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKIAorI2lmZGVmIENPTkZJR19DSV9VRENfSEFTX0hPU1RQQworCQliaXQgPSAocmVhZGwoJnVkYy0+aG9zdHBjMV9kZXZsYykgPj4gMjUpICYgMzsKKyNlbHNlCiAJCWJpdCA9IChyZWFkbCgmdWRjLT5wb3J0c2MpID4+IDI2KSAmIDM7CisjZW5kaWYKIAkJREJHKCItLSBwb3J0Y2hhbmdlICV4ICVzXG4iLCBiaXQsIChiaXQgPT0gMikgPyAiSGlnaCIgOiAiRnVsbCIpOwogCQlpZiAoYml0ID09IDIpIHsKIAkJCXNwZWVkID0gVVNCX1NQRUVEX0hJR0g7CkBAIC01MzgsNyArNTUyLDExIEBACiAJCXByaW50ZigiPFVFSSAleD5cbiIsIHJlYWRsKCZ1ZGMtPmVwY29tcCkpOwogCiAJaWYgKChuICYgU1RTX1VJKSB8fCAobiAmIFNUU19VRUkpKSB7CisjaWZkZWYgQ09ORklHX0NJX1VEQ19IQVNfSE9TVFBDCisJCW4gPSByZWFkbCgmdWRjLT5lcHNldHVwc3RhdCk7CisjZWxzZQogCQluID0gcmVhZGwoJnVkYy0+ZXBzdGF0KTsKKyNlbmRpZgogCQlpZiAobiAmIEVQVF9SWCgwKSkKIAkJCWhhbmRsZV9zZXR1cCgpOwogCkBAIC02OTksNyArNzE3LDYgQEAKIAogaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQogewotCXN0cnVjdCBjaV91ZGMgKnVkYzsKIAlpbnQgcmV0OwogCiAJaWYgKCFkcml2ZXIpCkBAIC03MTQsMTIgKzczMSwxOCBAQAogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gY2lfdWRjX3Byb2JlKCk7CisjaWYgZGVmaW5lZChDT05GSUdfVVNCX0VIQ0lfTVg2KSB8fCBkZWZpbmVkKENPTkZJR19VU0JfRUhDSV9NWFMpCisJLyoKKwkgKiBGSVhNRTogdXNiX2xvd2xldmVsX2luaXQoKS0+ZWhjaV9oY2RfaW5pdCgpIHNob3VsZCBiZSBkb2luZyBhbGwKKwkgKiBIVy1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiwgZS5nLiBVTFBJLXZzLVVUTUkgUEhZIHNlbGVjdGlvbgorCSAqLwogCWlmICghcmV0KSB7Ci0JCXVkYyA9IChzdHJ1Y3QgY2lfdWRjICopY29udHJvbGxlci5jdHJsLT5oY29yOworCQlzdHJ1Y3QgY2lfdWRjICp1ZGMgPSAoc3RydWN0IGNpX3VkYyAqKWNvbnRyb2xsZXIuY3RybC0+aGNvcjsKIAogCQkvKiBzZWxlY3QgVUxQSSBwaHkgKi8KIAkJd3JpdGVsKFBUUyhQVFNfRU5BQkxFKSB8IFBGU0MsICZ1ZGMtPnBvcnRzYyk7CiAJfQorI2VuZGlmCiAKIAlyZXQgPSBkcml2ZXItPmJpbmQoJmNvbnRyb2xsZXIuZ2FkZ2V0KTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2lfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2lfdWRjLmgKaW5kZXggNDJmNmVmNC4uNDQyNWZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpX3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaV91ZGMuaApAQCAtOCw0NSArOCw3NCBAQAogCiAjZGVmaW5lIE5VTV9FTkRQT0lOVFMJCTYKIAorI2lmZGVmIENPTkZJR19DSV9VRENfSEFTX0hPU1RQQwogc3RydWN0IGNpX3VkYyB7Ci0jZGVmaW5lIE1JQ1JPXzhGUkFNRQkweDgKLSNkZWZpbmUgVVNCQ01EX0lUQyh4KQkoKCgoeCkgPiAweGZmKSA/IDB4ZmYgOiB4KSA8PCAxNikKLSNkZWZpbmUgVVNCQ01EX0ZTMgkoMSA8PCAxNSkKLSNkZWZpbmUgVVNCQ01EX1JTVAkoMSA8PCAxKQotI2RlZmluZSBVU0JDTURfUlVOCSgxKQorCXUzMiB1c2JjbWQ7CQkvKiAweDEzMCAqLworCXUzMiB1c2JzdHM7CQkvKiAweDEzNCAqLworCXUzMiBwYWQxWzNdOworCXUzMiBkZXZhZGRyOwkJLyogMHgxNDQgKi8KKwl1MzIgZXBpbml0YWRkcjsJCS8qIDB4MTQ4ICovCisJdTMyIHBhZDJbMTBdOworCXUzMiBwb3J0c2M7CQkvKiAweDE3NCAqLworCXUzMiBwYWQxNzhbKDB4MWI0IC0gKDB4MTc0ICsgNCkpIC8gNF07CisJdTMyIGhvc3RwYzFfZGV2bGM7CS8qIDB4MWI0ICovCisJdTMyIHBhZDFiOFsoMHgxZjggLSAoMHgxYjQgKyA0KSkgLyA0XTsKKwl1MzIgdXNibW9kZTsJCS8qIDB4MWY4ICovCisJdTMyIHBhZDFmY1soMHgyMDggLSAoMHgxZjggKyA0KSkgLyA0XTsKKwl1MzIgZXBzZXR1cHN0YXQ7CS8qIDB4MjA4ICovCisJdTMyIGVwcHJpbWU7CQkvKiAweDIwYyAqLworCXUzMiBlcGZsdXNoOwkJLyogMHgyMTAgKi8KKwl1MzIgZXBzdGF0OwkJLyogMHgyMTQgKi8KKwl1MzIgZXBjb21wOwkJLyogMHgyMTggKi8KKwl1MzIgZXBjdHJsWzE2XTsJCS8qIDB4MjFjICovCit9OworI2Vsc2UKK3N0cnVjdCBjaV91ZGMgewogCXUzMiB1c2JjbWQ7CQkvKiAweDE0MCAqLwotI2RlZmluZSBTVFNfU0xJCQkoMSA8PCA4KQotI2RlZmluZSBTVFNfVVJJCQkoMSA8PCA2KQotI2RlZmluZSBTVFNfUENJCQkoMSA8PCAyKQotI2RlZmluZSBTVFNfVUVJCQkoMSA8PCAxKQotI2RlZmluZSBTVFNfVUkJCSgxIDw8IDApCiAJdTMyIHVzYnN0czsJCS8qIDB4MTQ0ICovCiAJdTMyIHBhZDFbM107CiAJdTMyIGRldmFkZHI7CQkvKiAweDE1NCAqLwogCXUzMiBlcGluaXRhZGRyOwkJLyogMHgxNTggKi8KIAl1MzIgcGFkMlsxMF07Ci0jZGVmaW5lIFBUU19FTkFCTEUJMgotI2RlZmluZSBQVFMoeCkJCSgoKHgpICYgMHgzKSA8PCAzMCkKLSNkZWZpbmUgUEZTQwkJKDEgPDwgMjQpCiAJdTMyIHBvcnRzYzsJCS8qIDB4MTg0ICovCiAJdTMyIHBhZDNbOF07Ci0jZGVmaW5lIFVTQk1PREVfREVWSUNFCTIKIAl1MzIgdXNibW9kZTsJCS8qIDB4MWE4ICovCiAJdTMyIGVwc3RhdDsJCS8qIDB4MWFjICovCi0jZGVmaW5lIEVQVF9UWCh4KQkoMSA8PCAoKCh4KSAmIDB4ZmZmZikgKyAxNikpCi0jZGVmaW5lIEVQVF9SWCh4KQkoMSA8PCAoKHgpICYgMHhmZmZmKSkKIAl1MzIgZXBwcmltZTsJCS8qIDB4MWIwICovCiAJdTMyIGVwZmx1c2g7CQkvKiAweDFiNCAqLwogCXUzMiBwYWQ0OwogCXUzMiBlcGNvbXA7CQkvKiAweDFiYyAqLworCXUzMiBlcGN0cmxbMTZdOwkJLyogMHgxYzAgKi8KK307CisKKyNkZWZpbmUgUFRTX0VOQUJMRQkyCisjZGVmaW5lIFBUUyh4KQkJKCgoeCkgJiAweDMpIDw8IDMwKQorI2RlZmluZSBQRlNDCQkoMSA8PCAyNCkKKyNlbmRpZgorCisjZGVmaW5lIE1JQ1JPXzhGUkFNRQkweDgKKyNkZWZpbmUgVVNCQ01EX0lUQyh4KQkoKCgoeCkgPiAweGZmKSA/IDB4ZmYgOiB4KSA8PCAxNikKKyNkZWZpbmUgVVNCQ01EX0ZTMgkoMSA8PCAxNSkKKyNkZWZpbmUgVVNCQ01EX1JTVAkoMSA8PCAxKQorI2RlZmluZSBVU0JDTURfUlVOCSgxKQorCisjZGVmaW5lIFNUU19TTEkJCSgxIDw8IDgpCisjZGVmaW5lIFNUU19VUkkJCSgxIDw8IDYpCisjZGVmaW5lIFNUU19QQ0kJCSgxIDw8IDIpCisjZGVmaW5lIFNUU19VRUkJCSgxIDw8IDEpCisjZGVmaW5lIFNUU19VSQkJKDEgPDwgMCkKKworI2RlZmluZSBVU0JNT0RFX0RFVklDRQkyCisKKyNkZWZpbmUgRVBUX1RYKHgpCSgxIDw8ICgoKHgpICYgMHhmZmZmKSArIDE2KSkKKyNkZWZpbmUgRVBUX1JYKHgpCSgxIDw8ICgoeCkgJiAweGZmZmYpKQorCiAjZGVmaW5lIENUUkxfVFhFCSgxIDw8IDIzKQogI2RlZmluZSBDVFJMX1RYUgkoMSA8PCAyMikKICNkZWZpbmUgQ1RSTF9SWEUJKDEgPDwgNykKICNkZWZpbmUgQ1RSTF9SWFIJKDEgPDwgNikKICNkZWZpbmUgQ1RSTF9UWFRfQlVMSwkoMiA8PCAxOCkKICNkZWZpbmUgQ1RSTF9SWFRfQlVMSwkoMiA8PCAyKQotCXUzMiBlcGN0cmxbMTZdOwkJLyogMHgxYzAgKi8KLX07CiAKIHN0cnVjdCBjaV9lcCB7CiAJc3RydWN0IHVzYl9lcCBlcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2RmdS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZGZ1LmMKaW5kZXggZGU3NWZmMS4uMWIxZTE3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZGZ1LmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZGZ1LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IvY29tcG9zaXRlLmg+CiAKICNpbmNsdWRlIDxkZnUuaD4KKyNpbmNsdWRlIDxnX2RubC5oPgogI2luY2x1ZGUgImZfZGZ1LmgiCiAKIHN0cnVjdCBmX2RmdSB7CkBAIC04MTcsMyArODE4LDUgQEAKIAogCXJldHVybiBkZnVfYmluZF9jb25maWcoYyk7CiB9CisKK0RFQ0xBUkVfR0FER0VUX0JJTkRfQ0FMTEJBQ0sodXNiX2RubF9kZnUsIGRmdV9hZGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbWFzc19zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9tYXNzX3N0b3JhZ2UuYwppbmRleCBmODk2MTY5Li42Mzc0YmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9tYXNzX3N0b3JhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9tYXNzX3N0b3JhZ2UuYwpAQCAtMjQzLDcgKzI0Myw3IEBACiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8dXNiLmg+CisjaW5jbHVkZSA8Z19kbmwuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KQEAgLTI1NSw2ICsyNTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY29tcG9zaXRlLmg+CiAjaW5jbHVkZSA8dXNiL2xpbl9nYWRnZXRfY29tcGF0Lmg+CisjaW5jbHVkZSA8Z19kbmwuaD4KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC02ODAsMTEgKzY4MSwxMSBAQAogCQkJLyogSGFuZGxlIENUUkwrQyAqLwogCQkJaWYgKGN0cmxjKCkpCiAJCQkJcmV0dXJuIC1FUElQRTsKLSNpZmRlZiBDT05GSUdfVVNCX0NBQkxFX0NIRUNLCisKIAkJCS8qIENoZWNrIGNhYmxlIGNvbm5lY3Rpb24gKi8KLQkJCWlmICghdXNiX2NhYmxlX2Nvbm5lY3RlZCgpKQorCQkJaWYgKCFnX2RubF9ib2FyZF91c2JfY2FibGVfY29ubmVjdGVkKCkpCiAJCQkJcmV0dXJuIC1FSU87Ci0jZW5kaWYKKwogCQkJayA9IDA7CiAJCX0KIApAQCAtMjc3OCwzICsyNzc5LDUgQEAKIAogCXJldHVybiAwOwogfQorCitERUNMQVJFX0dBREdFVF9CSU5EX0NBTExCQUNLKHVzYl9kbmxfdW1zLCBmc2dfYWRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Rob3IuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Rob3IuYwppbmRleCBmNWMwMjI0Li5mZWVmOWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl90aG9yLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfdGhvci5jCkBAIC0yMDQsMTQgKzIwNCwxNCBAQAogCiBzdGF0aWMgaW50IGRvd25sb2FkX3RhaWwobG9uZyBsb25nIGludCBsZWZ0LCBpbnQgY250KQogeworCXN0cnVjdCBkZnVfZW50aXR5ICpkZnVfZW50aXR5ID0gZGZ1X2dldF9lbnRpdHkoYWx0X3NldHRpbmdfbnVtKTsKIAl2b2lkICp0cmFuc2Zlcl9idWZmZXIgPSBkZnVfZ2V0X2J1ZigpOwogCWludCByZXQ7CiAKIAlkZWJ1ZygiJXM6IGxlZnQ6ICVsbHUgY250OiAlZFxuIiwgX19mdW5jX18sIGxlZnQsIGNudCk7CiAKIAlpZiAobGVmdCkgewotCQlyZXQgPSBkZnVfd3JpdGUoZGZ1X2dldF9lbnRpdHkoYWx0X3NldHRpbmdfbnVtKSwKLQkJCQl0cmFuc2Zlcl9idWZmZXIsIGxlZnQsIGNudCsrKTsKKwkJcmV0ID0gZGZ1X3dyaXRlKGRmdV9lbnRpdHksIHRyYW5zZmVyX2J1ZmZlciwgbGVmdCwgY250KyspOwogCQlpZiAocmV0KSB7CiAJCQllcnJvcigiREZVIHdyaXRlIGZhaWxlZCBbJWRdOiBsZWZ0OiAlbGx1IiwgcmV0LCBsZWZ0KTsKIAkJCXJldHVybiByZXQ7CkBAIC0yMjUsMTEgKzIyNSwxNiBAQAogCSAqIFRoaXMgYWxzbyBmcmVlcyBtZW1vcnkgbWFsbG9jJ2VkIGJ5IGRmdV9nZXRfYnVmKCksIHNvIG5vIGV4cGxpY2l0CiAJICogbmVlZCBmbyBjYWxsIGRmdV9mcmVlX2J1ZigpIGlzIG5lZWRlZC4KIAkgKi8KLQlyZXQgPSBkZnVfd3JpdGUoZGZ1X2dldF9lbnRpdHkoYWx0X3NldHRpbmdfbnVtKSwKLQkJCXRyYW5zZmVyX2J1ZmZlciwgMCwgY250KTsKKwlyZXQgPSBkZnVfd3JpdGUoZGZ1X2VudGl0eSwgdHJhbnNmZXJfYnVmZmVyLCAwLCBjbnQpOwogCWlmIChyZXQpCiAJCWVycm9yKCJERlUgd3JpdGUgZmFpbGVkIFslZF0gY250OiAlZCIsIHJldCwgY250KTsKIAorCXJldCA9IGRmdV9mbHVzaChkZnVfZW50aXR5LCB0cmFuc2Zlcl9idWZmZXIsIDAsIGNudCk7CisJaWYgKHJldCkgeworCQllcnJvcigiREZVIGZsdXNoIGZhaWxlZCEiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05OTksMyArMTAwNCw1IEBACiAJZGVidWcoIiVzOlxuIiwgX19mdW5jX18pOwogCXJldHVybiB0aG9yX2Z1bmNfaW5pdChjKTsKIH0KKworREVDTEFSRV9HQURHRVRfQklORF9DQUxMQkFDSyh1c2JfZG5sX3Rob3IsIHRob3JfYWRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nX2RubC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dfZG5sLmMKaW5kZXggZGQ5NWFmZS4uMjU2MTFhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dfZG5sLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dfZG5sLmMKQEAgLTQxLDcgKzQxLDYgQEAKIAogI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJInVzYl9kbmwgMi4wIgogCi1zdGF0aWMgY29uc3QgY2hhciBzaG9ydG5hbWVbXSA9ICJ1c2JfZG5sXyI7CiBzdGF0aWMgY29uc3QgY2hhciBwcm9kdWN0W10gPSAiVVNCIGRvd25sb2FkIGdhZGdldCI7CiBzdGF0aWMgY2hhciBnX2RubF9zZXJpYWxbTUFYX1NUUklOR19TRVJJQUxdOwogc3RhdGljIGNvbnN0IGNoYXIgbWFudWZhY3R1cmVyW10gPSBDT05GSUdfR19ETkxfTUFOVUZBQ1RVUkVSOwpAQCAtOTYsMjkgKzk1LDM2IEBACiAJZnJlZShjZGV2LT5jb25maWcpOwogCWNkZXYtPmNvbmZpZyA9IE5VTEw7CiAJZGVidWcoIiVzOiBjYWxsaW5nIHVzYl9nYWRnZXRfZGlzY29ubmVjdCBmb3IgIgotCQkJImNvbnRyb2xsZXIgJyVzJ1xuIiwgc2hvcnRuYW1lLCBnYWRnZXQtPm5hbWUpOworCQkJImNvbnRyb2xsZXIgJyVzJ1xuIiwgX19mdW5jX18sIGdhZGdldC0+bmFtZSk7CiAJdXNiX2dhZGdldF9kaXNjb25uZWN0KGdhZGdldCk7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZ19kbmxfYmluZF9jYWxsYmFjayAqZ19kbmxfYmluZF9jYWxsYmFja19maXJzdCh2b2lkKQoreworCXJldHVybiBsbF9lbnRyeV9zdGFydChzdHJ1Y3QgZ19kbmxfYmluZF9jYWxsYmFjaywKKwkJCQlnX2RubF9iaW5kX2NhbGxiYWNrcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGdfZG5sX2JpbmRfY2FsbGJhY2sgKmdfZG5sX2JpbmRfY2FsbGJhY2tfZW5kKHZvaWQpCit7CisJcmV0dXJuIGxsX2VudHJ5X2VuZChzdHJ1Y3QgZ19kbmxfYmluZF9jYWxsYmFjaywKKwkJCQlnX2RubF9iaW5kX2NhbGxiYWNrcyk7Cit9CisKIHN0YXRpYyBpbnQgZ19kbmxfZG9fY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKIHsKIAljb25zdCBjaGFyICpzID0gYy0+Y2Rldi0+ZHJpdmVyLT5uYW1lOwotCWludCByZXQgPSAtMTsKKwlzdHJ1Y3QgZ19kbmxfYmluZF9jYWxsYmFjayAqY2FsbGJhY2sgPSBnX2RubF9iaW5kX2NhbGxiYWNrX2ZpcnN0KCk7CiAKIAlkZWJ1ZygiJXM6IGNvbmZpZ3VyYXRpb246IDB4JXAgY29tcG9zaXRlIGRldjogMHglcFxuIiwKIAkgICAgICBfX2Z1bmNfXywgYywgYy0+Y2Rldik7CiAKLQlwcmludGYoIkdBREdFVCBEUklWRVI6ICVzXG4iLCBzKTsKLQlpZiAoIXN0cmNtcChzLCAidXNiX2RubF9kZnUiKSkKLQkJcmV0ID0gZGZ1X2FkZChjKTsKLQllbHNlIGlmICghc3RyY21wKHMsICJ1c2JfZG5sX3VtcyIpKQotCQlyZXQgPSBmc2dfYWRkKGMpOwotCWVsc2UgaWYgKCFzdHJjbXAocywgInVzYl9kbmxfdGhvciIpKQotCQlyZXQgPSB0aG9yX2FkZChjKTsKLQotCXJldHVybiByZXQ7CisJZm9yICg7IGNhbGxiYWNrICE9IGdfZG5sX2JpbmRfY2FsbGJhY2tfZW5kKCk7IGNhbGxiYWNrKyspCisJCWlmICghc3RyY21wKHMsIGNhbGxiYWNrLT51c2JfZnVuY3Rpb25fbmFtZSkpCisJCQlyZXR1cm4gY2FsbGJhY2stPmZwdHIoYyk7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyBpbnQgZ19kbmxfY29uZmlnX3JlZ2lzdGVyKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKQEAgLTE1Miw2ICsxNTgsMTEgQEAKIAlyZXR1cm4gZ2NudW07CiB9CiAKK19fd2VhayBpbnQgZ19kbmxfYm9hcmRfdXNiX2NhYmxlX2Nvbm5lY3RlZCh2b2lkKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKwogc3RhdGljIGludCBnX2RubF9nZXRfYmNkX2RldmljZV9udW1iZXIoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQogewogCXN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQgPSBjZGV2LT5nYWRnZXQ7CkBAIC0yMDMsMTIgKzIxNCwxMiBAQAogCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBjcHVfdG9fbGUxNihnY251bSk7CiAJZWxzZSB7CiAJCWRlYnVnKCIlczogY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkXG4iLAotCQkJc2hvcnRuYW1lLCBnYWRnZXQtPm5hbWUpOworCQkJX19mdW5jX18sIGdhZGdldC0+bmFtZSk7CiAJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg5OTk5KTsKIAl9CiAKIAlkZWJ1ZygiJXM6IGNhbGxpbmcgdXNiX2dhZGdldF9jb25uZWN0IGZvciAiCi0JCQkiY29udHJvbGxlciAnJXMnXG4iLCBzaG9ydG5hbWUsIGdhZGdldC0+bmFtZSk7CisJCQkiY29udHJvbGxlciAnJXMnXG4iLCBfX2Z1bmNfXywgZ2FkZ2V0LT5uYW1lKTsKIAl1c2JfZ2FkZ2V0X2Nvbm5lY3QoZ2FkZ2V0KTsKIAogCXJldHVybiAwOwpAQCAtMjI3LDM2ICsyMzgsMjMgQEAKIAkudW5iaW5kID0gZ19kbmxfdW5iaW5kLAogfTsKIAotaW50IGdfZG5sX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUpCisvKgorICogTk9USUNFOgorICogUmVnaXN0ZXJpbmcgdmlhIFVTQiBmdW5jdGlvbiBuYW1lIHdvbid0IGJlIG5lY2Vzc2FyeSBhZnRlciByZXdyaXRpbmcKKyAqIGdfZG5sIHRvIHN1cHBvcnQgbXVsdGlwbGUgVVNCIGZ1bmN0aW9ucy4KKyAqLworaW50IGdfZG5sX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JLyogVGhlIGxhcmdlc3QgZnVuY3Rpb24gbmFtZSBpcyA0ICovCi0Jc3RhdGljIGNoYXIgbmFtZVtzaXplb2Yoc2hvcnRuYW1lKSArIDRdOwogCWludCByZXQ7CiAKLQlpZiAoIXN0cmNtcCh0eXBlLCAiZGZ1IikpIHsKLQkJc3RyY3B5KG5hbWUsIHNob3J0bmFtZSk7Ci0JCXN0cmNhdChuYW1lLCB0eXBlKTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgInVtcyIpKSB7Ci0JCXN0cmNweShuYW1lLCBzaG9ydG5hbWUpOwotCQlzdHJjYXQobmFtZSwgdHlwZSk7Ci0JfSBlbHNlIGlmICghc3RyY21wKHR5cGUsICJ0aG9yIikpIHsKLQkJc3RyY3B5KG5hbWUsIHNob3J0bmFtZSk7Ci0JCXN0cmNhdChuYW1lLCB0eXBlKTsKLQl9IGVsc2UgewotCQlwcmludGYoIiVzOiB1bmtub3duIGNvbW1hbmQ6ICVzXG4iLCBfX2Z1bmNfXywgdHlwZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQorCWRlYnVnKCIlczogZ19kbmxfZHJpdmVyLm5hbWUgPSAlc1xuIiwgX19mdW5jX18sIG5hbWUpOwogCWdfZG5sX2RyaXZlci5uYW1lID0gbmFtZTsKIAotCWRlYnVnKCIlczogZ19kbmxfZHJpdmVyLm5hbWU6ICVzXG4iLCBfX2Z1bmNfXywgZ19kbmxfZHJpdmVyLm5hbWUpOwogCXJldCA9IHVzYl9jb21wb3NpdGVfcmVnaXN0ZXIoJmdfZG5sX2RyaXZlcik7Ci0KIAlpZiAocmV0KSB7CiAJCXByaW50ZigiJXM6IGZhaWxlZCEsIGVycm9yOiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zdG9yYWdlX2NvbW1vbi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3N0b3JhZ2VfY29tbW9uLmMKaW5kZXggMDI4MDNkZi4uNzQzMDA3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3N0b3JhZ2VfY29tbW9uLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3N0b3JhZ2VfY29tbW9uLmMKQEAgLTMxMSw3ICszMTEsMTEgQEAKICNkZWZpbmUgREVMQVlFRF9TVEFUVVMJKEVQMF9CVUZTSVpFICsgOTk5KQkvKiBBbiBpbXBvc3NpYmx5IGxhcmdlIHZhbHVlICovCiAKIC8qIE51bWJlciBvZiBidWZmZXJzIHdlIHdpbGwgdXNlLiAgMiBpcyBlbm91Z2ggZm9yIGRvdWJsZS1idWZmZXJpbmcgKi8KKyNpZm5kZWYgQ09ORklHX0NJX1VEQwogI2RlZmluZSBGU0dfTlVNX0JVRkZFUlMJMgorI2Vsc2UKKyNkZWZpbmUgRlNHX05VTV9CVUZGRVJTCTEgLyogY2lfdWRjIG9ubHkgYWxsb3dzIDEgcmVxIHBlciBlcCBhdCBwcmVzZW50ICovCisjZW5kaWYKIAogLyogRGVmYXVsdCBzaXplIG9mIGJ1ZmZlciBsZW5ndGguICovCiAjZGVmaW5lIEZTR19CVUZMRU4JKCh1MzIpMTYzODQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdXNic3RyaW5nLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdXNic3RyaW5nLmMKaW5kZXggZGU1ZmEzZi4uOGMzZmY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VzYnN0cmluZy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91c2JzdHJpbmcuYwpAQCAtMTA4LDYgKzEwOCw5IEBACiAJc3RydWN0IHVzYl9zdHJpbmcJKnM7CiAJaW50CQkJbGVuOwogCisJaWYgKCF0YWJsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiBkZXNjcmlwdG9yIDAgaGFzIHRoZSBsYW5ndWFnZSBpZCAqLwogCWlmIChpZCA9PSAwKSB7CiAJCWJ1ZlswXSA9IDQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlIGIvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQppbmRleCA1NzhiMDk3Li5iMzAxZTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKQEAgLTM2LDYgKzM2LDcgQEAKIG9iai0kKENPTkZJR19VU0JfRUhDSV9TUEVBUikgKz0gZWhjaS1zcGVhci5vCiBvYmotJChDT05GSUdfVVNCX0VIQ0lfVEVHUkEpICs9IGVoY2ktdGVncmEubwogb2JqLSQoQ09ORklHX1VTQl9FSENJX1ZDVCkgKz0gZWhjaS12Y3Qubworb2JqLSQoQ09ORklHX1VTQl9FSENJX1JNT0JJTEUpICs9IGVoY2ktcm1vYmlsZS5vCiAKICMgeGhjaQogb2JqLSQoQ09ORklHX1VTQl9YSENJKSArPSB4aGNpLm8geGhjaS1tZW0ubyB4aGNpLXJpbmcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWV4eW5vcy5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWV4eW5vcy5jCmluZGV4IDkzNTY4NzguLmVkZDkxYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1leHlub3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZXh5bm9zLmMKQEAgLTE5Nyw3ICsxOTcsOCBAQAogCiAjaWZkZWYgQ09ORklHX09GX0NPTlRST0wKIAkvKiBzZXR1cCB0aGUgVmJ1cyBncGlvIGhlcmUgKi8KLQlpZiAoIWZkdGRlY19zZXR1cF9ncGlvKCZjdHgtPnZidXNfZ3BpbykpCisJaWYgKGZkdF9ncGlvX2lzdmFsaWQoJmN0eC0+dmJ1c19ncGlvKSAmJgorCSAgICAhZmR0ZGVjX3NldHVwX2dwaW8oJmN0eC0+dmJ1c19ncGlvKSkKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGN0eC0+dmJ1c19ncGlvLmdwaW8sIDEpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwppbmRleCAxY2E3Y2Y1Li42Y2I0ZDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCkBAIC0xNCw5ICsxNCwxMiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPHVzYi9laGNpLWZzbC5oPgogI2luY2x1ZGUgPGh3Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2ZzbF9lcnJhdGEuaD4KIAogI2luY2x1ZGUgImVoY2kuaCIKIAorc3RhdGljIHZvaWQgc2V0X3R4Zmlmb3RocmVzaChzdHJ1Y3QgdXNiX2VoY2kgKiwgdTMyKTsKKwogLyogQ2hlY2sgVVNCIFBIWSBjbG9jayB2YWxpZCAqLwogc3RhdGljIGludCB1c2JfcGh5X2Nsa192YWxpZChzdHJ1Y3QgdXNiX2VoY2kgKmVoY2kpCiB7CkBAIC00MSwxMSArNDQsMjMgQEAKIAlzdHJ1Y3QgdXNiX2VoY2kgKmVoY2kgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnBoeV90eXBlID0gTlVMTDsKIAlzaXplX3QgbGVuOworCWNoYXIgY3VycmVudF91c2JfY29udHJvbGxlcls1XTsKICNpZmRlZiBDT05GSUdfU1lTX0ZTTF9VU0JfSU5URVJOQUxfVVRNSV9QSFkKIAljaGFyIHVzYl9waHlbNV07CiAKIAl1c2JfcGh5WzBdID0gJ1wwJzsKICNlbmRpZgorCWlmIChoYXNfZXJyYXR1bV9hMDA3MDc1KCkpIHsKKwkJLyoKKwkJICogQSA1bXMgZGVsYXkgaXMgbmVlZGVkIGFmdGVyIGFwcGx5aW5nIHNvZnQtcmVzZXQgdG8gdGhlCisJCSAqIGNvbnRyb2xsZXIgdG8gbGV0IGV4dGVybmFsIFVMUEkgcGh5IGNvbWUgb3V0IG9mIHJlc2V0LgorCQkgKiBUaGlzIGRlbGF5IG5lZWRzIHRvIGJlIGFkZGVkIGJlZm9yZSByZS1pbml0aWFsaXppbmcKKwkJICogdGhlIGNvbnRyb2xsZXIgYWZ0ZXIgc29mdC1yZXNldHRpbmcgY29tcGxldGVzCisJCSAqLworCQltZGVsYXkoNSk7CisJfQorCW1lbXNldChjdXJyZW50X3VzYl9jb250cm9sbGVyLCAnXDAnLCA1KTsKKwlzbnByaW50ZihjdXJyZW50X3VzYl9jb250cm9sbGVyLCA0LCAidXNiJWQiLCBpbmRleCsxKTsKIAogCXN3aXRjaCAoaW5kZXgpIHsKIAljYXNlIDA6CkBAIC03MCw4ICs4NSw5IEBACiAJb3V0X2JlMzIoJmVoY2ktPnNub29wMiwgMHg4MDAwMDAwMCB8IFNOT09QX1NJWkVfMkdCKTsKIAogCS8qIEluaXQgcGh5ICovCi0JaWYgKGh3Y29uZmlnX3N1YigidXNiMSIsICJwaHlfdHlwZSIpKQotCQlwaHlfdHlwZSA9IGh3Y29uZmlnX3N1YmFyZygidXNiMSIsICJwaHlfdHlwZSIsICZsZW4pOworCWlmIChod2NvbmZpZ19zdWIoY3VycmVudF91c2JfY29udHJvbGxlciwgInBoeV90eXBlIikpCisJCXBoeV90eXBlID0gaHdjb25maWdfc3ViYXJnKGN1cnJlbnRfdXNiX2NvbnRyb2xsZXIsCisJCQkJInBoeV90eXBlIiwgJmxlbik7CiAJZWxzZQogCQlwaHlfdHlwZSA9IGdldGVudigidXNiX3BoeV90eXBlIik7CiAKQEAgLTEwOSw2ICsxMjUsMTAgQEAKIAogCWluX2xlMzIoJmVoY2ktPnVzYm1vZGUpOwogCisJaWYgKFNWUl9TT0NfVkVSKGdldF9zdnIoKSkgPT0gU1ZSX1Q0MjQwICYmCisJICAgIElTX1NWUl9SRVYoZ2V0X3N2cigpLCAyLCAwKSkKKwkJc2V0X3R4Zmlmb3RocmVzaChlaGNpLCBUWEZJRk9USFJFU0gpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMCwzICsxNDAsMTcgQEAKIHsKIAlyZXR1cm4gMDsKIH0KKworLyoKKyAqIFNldHRpbmcgdGhlIHZhbHVlIG9mIFRYRklGT19USFJFU0ggZmllbGQgaW4gVFhGSUxMVFVOSU5HIHJlZ2lzdGVyCisgKiB0byBjb3VudGVyIEREUiBsYXRlbmNpZXMgaW4gd3JpdGluZyBkYXRhIGludG8gVHggYnVmZmVyLgorICogVGhpcyBwcmV2ZW50cyBUeCBidWZmZXIgZnJvbSBnZXR0aW5nIHVuZGVycnVuCisgKi8KK3N0YXRpYyB2b2lkIHNldF90eGZpZm90aHJlc2goc3RydWN0IHVzYl9laGNpICplaGNpLCB1MzIgdHhmaWZvX3RocmVzaCkKK3sKKwl1MzIgY21kOworCWNtZCA9IGVoY2lfcmVhZGwoJmVoY2ktPnR4ZmlsbHR1bmluZyk7CisJY21kICY9IH5UWEZJRk9fVEhSRVNIX01BU0s7CisJY21kIHw9IFRYRklGT19USFJFU0godHhmaWZvX3RocmVzaCk7CisJZWhjaV93cml0ZWwoJmVoY2ktPnR4ZmlsbHR1bmluZywgY21kKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCA2MDE3MDkwLi5lYWY1OTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC05OTgsOCArOTk4LDggQEAKIAlpZiAoIWVoY2ljW2luZGV4XS5wZXJpb2RpY19saXN0KQogCQlyZXR1cm4gLUVOT01FTTsKIAlmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKSB7Ci0JCWVoY2ljW2luZGV4XS5wZXJpb2RpY19saXN0W2ldID0gKHVpbnQzMl90KXBlcmlvZGljCi0JCQkJCQl8IFFIX0xJTktfVFlQRV9RSDsKKwkJZWhjaWNbaW5kZXhdLnBlcmlvZGljX2xpc3RbaV0gPSBjcHVfdG9faGMzMigodWludDMyX3QpcGVyaW9kaWMKKwkJCQkJCXwgUUhfTElOS19UWVBFX1FIKTsKIAl9CiAKIAlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVpbnQzMl90KWVoY2ljW2luZGV4XS5wZXJpb2RpY19saXN0LApAQCAtMTA4OSw3ICsxMDg5LDcgQEAKIAlzdHJ1Y3QgcVREICp0ZHM7CiB9OwogCi0jZGVmaW5lIE5FWFRfUUgocWgpIChzdHJ1Y3QgUUggKikoKHFoKS0+cWhfbGluayAmIH4weDFmKQorI2RlZmluZSBORVhUX1FIKHFoKSAoc3RydWN0IFFIICopKGhjMzJfdG9fY3B1KChxaCktPnFoX2xpbmspICYgfjB4MWYpCiAKIHN0YXRpYyBpbnQKIGVuYWJsZV9wZXJpb2RpYyhzdHJ1Y3QgZWhjaV9jdHJsICpjdHJsKQpAQCAtMTE4NCw0MSArMTE4NCw0NyBAQAogCQlzdHJ1Y3QgcVREICp0ZCA9IHJlc3VsdC0+dGRzICsgaTsKIAkJdm9pZCAqKmJ1ZiA9ICZxaC0+YnVmZmVyOwogCi0JCXFoLT5xaF9saW5rID0gKHVpbnQzMl90KShxaCsxKSB8IFFIX0xJTktfVFlQRV9RSDsKKwkJcWgtPnFoX2xpbmsgPSBjcHVfdG9faGMzMigodWludDMyX3QpKHFoKzEpIHwgUUhfTElOS19UWVBFX1FIKTsKIAkJaWYgKGkgPT0gcXVldWVzaXplIC0gMSkKLQkJCXFoLT5xaF9saW5rID0gUUhfTElOS19URVJNSU5BVEU7CisJCQlxaC0+cWhfbGluayA9IGNwdV90b19oYzMyKFFIX0xJTktfVEVSTUlOQVRFKTsKIAotCQlxaC0+cWhfb3ZlcmxheS5xdF9uZXh0ID0gKHVpbnQzMl90KXRkOwotCQlxaC0+cWhfb3ZlcmxheS5xdF9hbHRuZXh0ID0gUVRfTkVYVF9URVJNSU5BVEU7Ci0JCXFoLT5xaF9lbmRwdDEgPSAoMCA8PCAyOCkgfCAvKiBObyBOQUsgcmVsb2FkIChlaGNpIDQuOSkgKi8KKwkJcWgtPnFoX292ZXJsYXkucXRfbmV4dCA9IGNwdV90b19oYzMyKCh1aW50MzJfdCl0ZCk7CisJCXFoLT5xaF9vdmVybGF5LnF0X2FsdG5leHQgPSBjcHVfdG9faGMzMihRVF9ORVhUX1RFUk1JTkFURSk7CisJCXFoLT5xaF9lbmRwdDEgPQorCQkJY3B1X3RvX2hjMzIoKDAgPDwgMjgpIHwgLyogTm8gTkFLIHJlbG9hZCAoZWhjaSA0LjkpICovCiAJCQkodXNiX21heHBhY2tldChkZXYsIHBpcGUpIDw8IDE2KSB8IC8qIE1QUyAqLwogCQkJKDEgPDwgMTQpIHwKIAkJCVFIX0VORFBUMV9FUFMoZWhjaV9lbmNvZGVfc3BlZWQoZGV2LT5zcGVlZCkpIHwKIAkJCSh1c2JfcGlwZWVuZHBvaW50KHBpcGUpIDw8IDgpIHwgLyogRW5kcG9pbnQgTnVtYmVyICovCi0JCQkodXNiX3BpcGVkZXZpY2UocGlwZSkgPDwgMCk7Ci0JCXFoLT5xaF9lbmRwdDIgPSAoMSA8PCAzMCkgfCAvKiAxIFR4IHBlciBtZnJhbWUgKi8KLQkJCSgxIDw8IDApOyAvKiBTLW1hc2s6IG1pY3JvZnJhbWUgMCAqLworCQkJKHVzYl9waXBlZGV2aWNlKHBpcGUpIDw8IDApKTsKKwkJcWgtPnFoX2VuZHB0MiA9IGNwdV90b19oYzMyKCgxIDw8IDMwKSB8IC8qIDEgVHggcGVyIG1mcmFtZSAqLworCQkJKDEgPDwgMCkpOyAvKiBTLW1hc2s6IG1pY3JvZnJhbWUgMCAqLwogCQlpZiAoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XIHx8CiAJCQkJZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkgewogCQkJZGVidWcoIlRUOiBwb3J0OiAlZCwgaHViIGFkZHJlc3M6ICVkXG4iLAogCQkJCWRldi0+cG9ydG5yLCBkZXYtPnBhcmVudC0+ZGV2bnVtKTsKLQkJCXFoLT5xaF9lbmRwdDIgfD0gKGRldi0+cG9ydG5yIDw8IDIzKSB8CisJCQlxaC0+cWhfZW5kcHQyIHw9IGNwdV90b19oYzMyKChkZXYtPnBvcnRuciA8PCAyMykgfAogCQkJCShkZXYtPnBhcmVudC0+ZGV2bnVtIDw8IDE2KSB8Ci0JCQkJKDB4MWMgPDwgOCk7IC8qIEMtbWFzazogbWljcm9mcmFtZXMgMi00ICovCisJCQkJKDB4MWMgPDwgOCkpOyAvKiBDLW1hc2s6IG1pY3JvZnJhbWVzIDItNCAqLwogCQl9CiAKLQkJdGQtPnF0X25leHQgPSBRVF9ORVhUX1RFUk1JTkFURTsKLQkJdGQtPnF0X2FsdG5leHQgPSBRVF9ORVhUX1RFUk1JTkFURTsKKwkJdGQtPnF0X25leHQgPSBjcHVfdG9faGMzMihRVF9ORVhUX1RFUk1JTkFURSk7CisJCXRkLT5xdF9hbHRuZXh0ID0gY3B1X3RvX2hjMzIoUVRfTkVYVF9URVJNSU5BVEUpOwogCQlkZWJ1ZygiY29tbXVuaWNhdGlvbiBkaXJlY3Rpb24gaXMgJyVzJ1xuIiwKIAkJICAgICAgdXNiX3BpcGVpbihwaXBlKSA/ICJpbiIgOiAib3V0Iik7Ci0JCXRkLT5xdF90b2tlbiA9IChlbGVtZW50c2l6ZSA8PCAxNikgfAorCQl0ZC0+cXRfdG9rZW4gPSBjcHVfdG9faGMzMigoZWxlbWVudHNpemUgPDwgMTYpIHwKIAkJCSgodXNiX3BpcGVpbihwaXBlKSA/IDEgOiAwKSA8PCA4KSB8IC8qIElOL09VVCB0b2tlbiAqLwotCQkJMHg4MDsgLyogYWN0aXZlICovCi0JCXRkLT5xdF9idWZmZXJbMF0gPSAodWludDMyX3QpYnVmZmVyICsgaSAqIGVsZW1lbnRzaXplOwotCQl0ZC0+cXRfYnVmZmVyWzFdID0gKHRkLT5xdF9idWZmZXJbMF0gKyAweDEwMDApICYgfjB4ZmZmOwotCQl0ZC0+cXRfYnVmZmVyWzJdID0gKHRkLT5xdF9idWZmZXJbMF0gKyAweDIwMDApICYgfjB4ZmZmOwotCQl0ZC0+cXRfYnVmZmVyWzNdID0gKHRkLT5xdF9idWZmZXJbMF0gKyAweDMwMDApICYgfjB4ZmZmOwotCQl0ZC0+cXRfYnVmZmVyWzRdID0gKHRkLT5xdF9idWZmZXJbMF0gKyAweDQwMDApICYgfjB4ZmZmOworCQkJMHg4MCk7IC8qIGFjdGl2ZSAqLworCQl0ZC0+cXRfYnVmZmVyWzBdID0KKwkJICAgIGNwdV90b19oYzMyKCh1aW50MzJfdClidWZmZXIgKyBpICogZWxlbWVudHNpemUpOworCQl0ZC0+cXRfYnVmZmVyWzFdID0KKwkJICAgIGNwdV90b19oYzMyKCh0ZC0+cXRfYnVmZmVyWzBdICsgMHgxMDAwKSAmIH4weGZmZik7CisJCXRkLT5xdF9idWZmZXJbMl0gPQorCQkgICAgY3B1X3RvX2hjMzIoKHRkLT5xdF9idWZmZXJbMF0gKyAweDIwMDApICYgfjB4ZmZmKTsKKwkJdGQtPnF0X2J1ZmZlclszXSA9CisJCSAgICBjcHVfdG9faGMzMigodGQtPnF0X2J1ZmZlclswXSArIDB4MzAwMCkgJiB+MHhmZmYpOworCQl0ZC0+cXRfYnVmZmVyWzRdID0KKwkJICAgIGNwdV90b19oYzMyKCh0ZC0+cXRfYnVmZmVyWzBdICsgMHg0MDAwKSAmIH4weGZmZik7CiAKIAkJKmJ1ZiA9IGJ1ZmZlciArIGkgKiBlbGVtZW50c2l6ZTsKIAl9CkBAIC0xMjQxLDcgKzEyNDcsNyBAQAogCS8qIGhvb2sgdXAgdG8gcGVyaW9kaWMgbGlzdCAqLwogCXN0cnVjdCBRSCAqbGlzdCA9ICZjdHJsLT5wZXJpb2RpY19xdWV1ZTsKIAlyZXN1bHQtPmxhc3QtPnFoX2xpbmsgPSBsaXN0LT5xaF9saW5rOwotCWxpc3QtPnFoX2xpbmsgPSAodWludDMyX3QpcmVzdWx0LT5maXJzdCB8IFFIX0xJTktfVFlQRV9RSDsKKwlsaXN0LT5xaF9saW5rID0gY3B1X3RvX2hjMzIoKHVpbnQzMl90KXJlc3VsdC0+Zmlyc3QgfCBRSF9MSU5LX1RZUEVfUUgpOwogCiAJZmx1c2hfZGNhY2hlX3JhbmdlKCh1aW50MzJfdClyZXN1bHQtPmxhc3QsCiAJCQkgICBBTElHTl9FTkRfQUREUihzdHJ1Y3QgUUgsIHJlc3VsdC0+bGFzdCwgMSkpOwpAQCAtMTI4MCw3ICsxMjg2LDcgQEAKIAkvKiBzdGlsbCBhY3RpdmUgKi8KIAlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodWludDMyX3QpY3VyLAogCQkJCUFMSUdOX0VORF9BRERSKHN0cnVjdCBRSCwgY3VyLCAxKSk7Ci0JaWYgKGN1ci0+cWhfb3ZlcmxheS5xdF90b2tlbiAmIDB4ODApIHsKKwlpZiAoY3VyLT5xaF9vdmVybGF5LnF0X3Rva2VuICYgY3B1X3RvX2hjMzIoMHg4MCkpIHsKIAkJZGVidWcoIkV4aXQgcG9sbF9pbnRfcXVldWUgd2l0aCBubyBjb21wbGV0ZWQgaW50ciB0cmFuc2Zlci4gIgogCQkgICAgICAidG9rZW4gaXMgJXhcbiIsIGN1ci0+cWhfb3ZlcmxheS5xdF90b2tlbik7CiAJCXJldHVybiBOVUxMOwpAQCAtMTMxMSw3ICsxMzE3LDcgQEAKIAogCXN0cnVjdCBRSCAqY3VyID0gJmN0cmwtPnBlcmlvZGljX3F1ZXVlOwogCXRpbWVvdXQgPSBnZXRfdGltZXIoMCkgKyA1MDA7IC8qIGFib3J0IGFmdGVyIDUwMG1zICovCi0Jd2hpbGUgKCEoY3VyLT5xaF9saW5rICYgUUhfTElOS19URVJNSU5BVEUpKSB7CisJd2hpbGUgKCEoY3VyLT5xaF9saW5rICYgY3B1X3RvX2hjMzIoUUhfTElOS19URVJNSU5BVEUpKSkgewogCQlkZWJ1ZygiY29uc2lkZXJpbmcgJXAsIHdpdGggcWhfbGluayAleFxuIiwgY3VyLCBjdXItPnFoX2xpbmspOwogCQlpZiAoTkVYVF9RSChjdXIpID09IHF1ZXVlLT5maXJzdCkgewogCQkJZGVidWcoImZvdW5kIGNhbmRpZGF0ZS4gcmVtb3ZpbmcgZnJvbSBjaGFpblxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcm1vYmlsZS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXJtb2JpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDllNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXJtb2JpbGUuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqICBFSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzLDIwMTQgUmVuZXNhcyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAxNCBOb2J1aGlybyBJd2FtYXRzdSA8bm9idWhpcm8uaXdhbWF0c3UueWpAcmVuZXNhcy5jb20+CisgKgorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAgICAgR1BMLTIuMAorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9laGNpLXJtb2JpbGUuaD4KKyNpbmNsdWRlICJlaGNpLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19SOEE3NzQwKQorc3RhdGljIHUzMiB1c2JfYmFzZV9hZGRyZXNzW0NPTkZJR19VU0JfTUFYX0NPTlRST0xMRVJfQ09VTlRdID0geworCTB4QzY3MDAwMDAKK307CisjZWxpZiBkZWZpbmVkKENPTkZJR19SOEE3NzkwKQorc3RhdGljIHUzMiB1c2JfYmFzZV9hZGRyZXNzW0NPTkZJR19VU0JfTUFYX0NPTlRST0xMRVJfQ09VTlRdID0geworCTB4RUUwODAwMDAsCS8qIFVTQjAgKEVIQ0kpICovCisJMHhFRTBBMDAwMCwJLyogVVNCMSAqLworCTB4RUUwQzAwMDAsCS8qIFVTQjIgKi8KKwkweEVFMDAwMDAwCS8qIFVTQjMgKFVTQjMuMCBIb3N0KSovCit9OworI2VsaWYgZGVmaW5lZChDT05GSUdfUjhBNzc5MSkKK3N0YXRpYyB1MzIgdXNiX2Jhc2VfYWRkcmVzc1tDT05GSUdfVVNCX01BWF9DT05UUk9MTEVSX0NPVU5UXSA9IHsKKwkweEVFMDgwMDAwLAkvKiBVU0IwIChFSENJKSAqLworCTB4RUUwQzAwMDAsCS8qIFVTQjEgKi8KKwkweEVFMDAwMDAwCS8qIFVTQjMgKFVTQjMuMCBIb3N0KSovCit9OworI2Vsc2UKKyNlcnJvciBybW9iaWxlIEVIQ0kgVVNCIGRyaXZlciBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0KKyNlbmRpZgorCitpbnQgZWhjaV9oY2Rfc3RvcChpbnQgaW5kZXgpCit7CisJaW50IGk7CisJdTMyIGJhc2U7CisJc3RydWN0IGFoYmNvbV9wY2lfYnJpZGdlICphaGJjb21fcGNpOworCisJYmFzZSA9IHVzYl9iYXNlX2FkZHJlc3NbaW5kZXhdOworCWFoYmNvbV9wY2kgPSAoc3RydWN0IGFoYmNvbV9wY2lfYnJpZGdlICopKGJhc2UgKyBBSEJQQ0lfT0ZGU0VUKTsKKwl3cml0ZWwoMCwgJmFoYmNvbV9wY2ktPmFoYl9idXNfY3RyKTsKKworCS8qIHJlc2V0IGVoY2kgKi8KKwlzZXRiaXRzX2xlMzIoYmFzZSArIEVIQ0lfVVNCQ01ELCBDTURfUkVTRVQpOworCWZvciAoaSA9IDEwMDsgaSA+IDA7IGktLSkgeworCQlpZiAoIShyZWFkbChiYXNlICsgRUhDSV9VU0JDTUQpICYgQ01EX1JFU0VUKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTAwKTsKKwl9CisKKwlpZiAoIWkpCisJCXByaW50ZigiZXJyb3IgOiBlaGNpKCVkKSByZXNldCBmYWlsZWQuXG4iLCBpbmRleCk7CisKKwlpZiAoaW5kZXggPT0gKENPTkZJR19VU0JfTUFYX0NPTlRST0xMRVJfQ09VTlQgLSAxKSkKKwkJc2V0Yml0c19sZTMyKFNNU1RQQ1I3LCBTTVNUUENSNzAzKTsKKworCXJldHVybiAwOworfQorCitpbnQgZWhjaV9oY2RfaW5pdChpbnQgaW5kZXgsIGVudW0gdXNiX2luaXRfdHlwZSBpbml0LAorCXN0cnVjdCBlaGNpX2hjY3IgKipoY2NyLCBzdHJ1Y3QgZWhjaV9oY29yICoqaGNvcikKK3sKKwl1MzIgYmFzZTsKKwl1MzIgcGh5c19iYXNlOworCXN0cnVjdCBybW9iaWxlX2VoY2lfcmVnICpyZWhjaTsKKwlzdHJ1Y3QgYWhiY29tX3BjaV9icmlkZ2UgKmFoYmNvbV9wY2k7CisJc3RydWN0IGFoYmNvbmZfcGNpX2JyaWRnZSAqYWhiY29uZl9wY2k7CisJc3RydWN0IGFoYl9wY2ljb25mICphaGJfcGNpY29uZl9vaGNpOworCXN0cnVjdCBhaGJfcGNpY29uZiAqYWhiX3BjaWNvbmZfZWhjaTsKKwl1aW50MzJfdCBjYXBfYmFzZTsKKworCWJhc2UgPSB1c2JfYmFzZV9hZGRyZXNzW2luZGV4XTsKKwlwaHlzX2Jhc2UgPSBiYXNlOworCWlmIChpbmRleCA9PSAwKQorCQljbHJiaXRzX2xlMzIoU01TVFBDUjcsIFNNU1RQQ1I3MDMpOworCisJcmVoY2kgPSAoc3RydWN0IHJtb2JpbGVfZWhjaV9yZWcgKikoYmFzZSArIEVIQ0lfT0ZGU0VUKTsKKwlhaGJjb21fcGNpID0gKHN0cnVjdCBhaGJjb21fcGNpX2JyaWRnZSAqKShiYXNlICsgQUhCUENJX09GRlNFVCk7CisJYWhiY29uZl9wY2kgPQorCQkoc3RydWN0IGFoYmNvbmZfcGNpX2JyaWRnZSAqKShiYXNlICsgUENJX0NPTkZfQUhCUENJX09GRlNFVCk7CisJYWhiX3BjaWNvbmZfb2hjaSA9IChzdHJ1Y3QgYWhiX3BjaWNvbmYgKikoYmFzZSArIFBDSV9DT05GX09IQ0lfT0ZGU0VUKTsKKwlhaGJfcGNpY29uZl9laGNpID0gKHN0cnVjdCBhaGJfcGNpY29uZiAqKShiYXNlICsgUENJX0NPTkZfRUhDSV9PRkZTRVQpOworCisJLyogQ2xvY2sgJiBSZXNldCAmIERpcmVjdCBQb3dlciBEb3duICovCisJY2xyc2V0Yml0c19sZTMyKCZhaGJjb21fcGNpLT51c2JjdHIsCisJCQkoRElSUEQgfCBQQ0lDTEtfTUFTSyB8IFVTQkhfUlNUKSwgVVNCQ1RSX1dJTl9TSVpFXzFHQik7CisJY2xyYml0c19sZTMyKCZhaGJjb21fcGNpLT51c2JjdHIsIFBMTF9SU1QpOworCisJLyogQUhCLVBDSSBCcmlkZ2UgQ29tbXVuaWNhdGlvbiBSZWdpc3RlcnMgKi8KKwl3cml0ZWwoQUhCX0JVU19DVFJfSU5JVCwgJmFoYmNvbV9wY2ktPmFoYl9idXNfY3RyKTsKKwl3cml0ZWwoKENPTkZJR19TWVNfU0RSQU1fQkFTRSAmIDB4ZjAwMDAwMDApIHwgUENJQUhCX1dJTl9QUkVGRVRDSCwKKwkgICAgICAgJmFoYmNvbV9wY2ktPnBjaWFoYl93aW4xX2N0cik7CisJd3JpdGVsKDB4ZjAwMDAwMDAgfCBQQ0lBSEJfV0lOX1BSRUZFVENILAorCSAgICAgICAmYWhiY29tX3BjaS0+cGNpYWhiX3dpbjJfY3RyKTsKKwl3cml0ZWwocGh5c19iYXNlIHwgUENJV0lOMl9QQ0lDTUQsICZhaGJjb21fcGNpLT5haGJwY2lfd2luMl9jdHIpOworCisJc2V0Yml0c19sZTMyKCZhaGJjb21fcGNpLT5wY2lfYXJiaXRlcl9jdHIsCisJCSAgICAgUENJQlBfTU9ERSB8IFBDSVJFUTEgfCBQQ0lSRVEwKTsKKworCS8qIFBDSSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyBmb3IgQUhCUENJICovCisJd3JpdGVsKFBDSVdJTjFfUENJQ01EIHwgQUhCX0NGR19BSEJQQ0ksCisJICAgICAgICZhaGJjb21fcGNpLT5haGJwY2lfd2luMV9jdHIpOworCXdyaXRlbChwaHlzX2Jhc2UgKyBBSEJQQ0lfT0ZGU0VULCAmYWhiY29uZl9wY2ktPmJhc2VhZCk7CisJd3JpdGVsKENPTkZJR19TWVNfU0RSQU1fQkFTRSAmIDB4ZjAwMDAwMDAsICZhaGJjb25mX3BjaS0+d2luMV9iYXNlYWQpOworCXdyaXRlbCgweGYwMDAwMDAwLCAmYWhiY29uZl9wY2ktPndpbjJfYmFzZWFkKTsKKwl3cml0ZWwoU0VSUkVOIHwgUEVSUkVOIHwgTUFTVEVSRU4gfCBNRU1FTiwKKwkgICAgICAgJmFoYmNvbmZfcGNpLT5jbW5kX3N0cyk7CisKKwkvKiBQQ0kgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgZm9yIEVIQ0kgKi8KKwl3cml0ZWwoUENJV0lOMV9QQ0lDTUQgfCBBSEJfQ0ZHX0hPU1QsICZhaGJjb21fcGNpLT5haGJwY2lfd2luMV9jdHIpOworCXdyaXRlbChwaHlzX2Jhc2UgKyBPSENJX09GRlNFVCwgJmFoYl9wY2ljb25mX29oY2ktPmJhc2VhZCk7CisJd3JpdGVsKHBoeXNfYmFzZSArIEVIQ0lfT0ZGU0VULCAmYWhiX3BjaWNvbmZfZWhjaS0+YmFzZWFkKTsKKwl3cml0ZWwoU0VSUkVOIHwgUEVSUkVOIHwgTUFTVEVSRU4gfCBNRU1FTiwKKwkgICAgICAgJmFoYl9wY2ljb25mX29oY2ktPmNtbmRfc3RzKTsKKwl3cml0ZWwoU0VSUkVOIHwgUEVSUkVOIHwgTUFTVEVSRU4gfCBNRU1FTiwKKwkgICAgICAgJmFoYl9wY2ljb25mX2VoY2ktPmNtbmRfc3RzKTsKKworCS8qIEVuYWJsZSBQQ0kgaW50ZXJydXB0ICovCisJc2V0Yml0c19sZTMyKCZhaGJjb21fcGNpLT5wY2lfaW50X2VuYWJsZSwKKwkJICAgICBVU0JIX1BNRUVOIHwgVVNCSF9JTlRCRU4gfCBVU0JIX0lOVEFFTik7CisKKwkqaGNjciA9IChzdHJ1Y3QgZWhjaV9oY2NyICopKCh1aW50MzJfdCkmcmVoY2ktPmhjaXZlcnNpb24pOworCWNhcF9iYXNlID0gZWhjaV9yZWFkbCgmKCpoY2NyKS0+Y3JfY2FwYmFzZSk7CisJKmhjb3IgPSAoc3RydWN0IGVoY2lfaGNvciAqKSgodWludDMyX3QpKmhjY3IgKyBIQ19MRU5HVEgoY2FwX2Jhc2UpKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWV4eW5vczUuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1leHlub3M1LmMKaW5kZXggMTE0NmQxMC4uYjQ5NDZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWV4eW5vczUuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZXh5bm9zNS5jCkBAIC0yOTgsNyArMjk4LDggQEAKIAogI2lmZGVmIENPTkZJR19PRl9DT05UUk9MCiAJLyogc2V0dXAgdGhlIFZidXMgZ3BpbyBoZXJlICovCi0JaWYgKCFmZHRkZWNfc2V0dXBfZ3BpbygmY3R4LT52YnVzX2dwaW8pKQorCWlmIChmZHRfZ3Bpb19pc3ZhbGlkKCZjdHgtPnZidXNfZ3BpbykgJiYKKwkgICAgIWZkdGRlY19zZXR1cF9ncGlvKCZjdHgtPnZidXNfZ3BpbykpCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChjdHgtPnZidXNfZ3Bpby5ncGlvLCAxKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiLW5ldy9tdXNiX3Vib290LmMgYi9kcml2ZXJzL3VzYi9tdXNiLW5ldy9tdXNiX3Vib290LmMKaW5kZXggMDUxMjY4MC4uMGQ3Yjg5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi1uZXcvbXVzYl91Ym9vdC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2ItbmV3L211c2JfdWJvb3QuYwpAQCAtMjA0LDcgKzIwNCwxMCBAQAogCiBpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKLQkvKiBUT0RPOiBpbXBsZW1lbnQgbWUgKi8KKwlpZiAoZHJpdmVyLT5kaXNjb25uZWN0KQorCQlkcml2ZXItPmRpc2Nvbm5lY3QoJmdhZGdldC0+Zyk7CisJaWYgKGRyaXZlci0+dW5iaW5kKQorCQlkcml2ZXItPnVuYmluZCgmZ2FkZ2V0LT5nKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZiAvKiBDT05GSUdfTVVTQl9HQURHRVQgKi8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3N0YW5kYWxvbmUveDg2LXRlc3RhcHAuYyBiL2V4YW1wbGVzL3N0YW5kYWxvbmUveDg2LXRlc3RhcHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUxNmVjNy4uMDAwMDAwMAotLS0gYS9leGFtcGxlcy9zdGFuZGFsb25lL3g4Ni10ZXN0YXBwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXZvaWQgKmZ1bmNbOF0sICoqcGZ1bmM7Ci0KLXR5cGVkZWYgc3RydWN0IHh4eCB4eHhfdDsKLXN0cnVjdCB4eHggewotCWludCBkdW1teTsKLQl2b2lkICoqcGZ1bmM7Ci19IHE7Ci0KLSNkZWZpbmUgWEZfc3RyY3B5IDMKLSNkZWZpbmUgWEZfcHJpbnRmIDQKLQotI2RlZmluZSBMQUJFTCh4KQkJCQkJXAotYXNtIHZvbGF0aWxlICgJCQkJCQlcCi0KLSNpZiBkZWZpbmVkKF9faTM4Nl9fKQotI2RlZmluZSBFWFBPUlRfRlVOQyh4KQkJCQkJXAotYXNtIHZvbGF0aWxlICgJCQkJCQlcCi0iCS5nbG9ibCBtb25fIiAjeCAiXG4iCQkJCVwKLSJtb25fIiAjeCAiOlxuIgkJCQkJCVwKLSIJbW92bAklMCwgJSVlYXhcbiIJCQkJXAotIgltb3ZsCXBmdW5jLCAlJWVjeFxuIgkJCQlcCi0iCWptcAkqKCUlZWN4LCUlZWF4KVxuIgkJCVwKLQk6IDogImkiKFhGXyAjIyB4ICogc2l6ZW9mKHZvaWQgKikpIDogImVheCIsICJlY3giKTsKLSNlbGlmIGRlZmluZWQoX19wb3dlcnBjX18pCi0jZGVmaW5lIEVYUE9SVF9GVU5DKHgpCQkJCQlcCi1hc20gdm9sYXRpbGUgKAkJCQkJCVwKLSIJLmdsb2JsIG1vbl8iICN4ICJcbiIJCQkJXAotIm1vbl8iICN4ICI6XG4iCQkJCQkJXAotIglsd3oJJSVyMTEsICUwKCUlcjIpXG4iCQkJXAotIglsd3oJJSVyMTEsICUxKCUlcjExKVxuIgkJCVwKLSIJbXRjdHIJJSVyMTFcbiIJCQkJXAotIgliY3RyXG4iCQkJCQlcCi0JOiA6ICJpIihvZmZzZXRvZih4eHhfdCwgcGZ1bmMpKSwgImkiKFhGXyAjIyB4ICogc2l6ZW9mKHZvaWQgKikpIDogInIxMSIsICJyMiIpOwotI2VsaWYgZGVmaW5lZChfX2FybV9fKQotI2RlZmluZSBFWFBPUlRfRlVOQyh4KQkJCQkJXAotYXNtIHZvbGF0aWxlICgJCQkJCQlcCi0iCS5nbG9ibCBtb25fIiAjeCAiXG4iCQkJCVwKLSJtb25fIiAjeCAiOlxuIgkJCQkJCVwKLSIJbGRyCWlwLCBbcjgsICUwXVxuIgkJCQlcCi0iCWxkcglwYywgW2lwLCAlMV1cbiIJCQkJXAotCTogOiAiaSIob2Zmc2V0b2YoeHh4X3QsIHBmdW5jKSksICJpIihYRl8gIyMgeCAqIHNpemVvZih2b2lkICopKSA6ICJpcCIpOwotI2VsaWYgZGVmaW5lZChfX21pcHNfXykKLSNkZWZpbmUgRVhQT1JUX0ZVTkMoeCkJCQkJCVwKLWFzbSB2b2xhdGlsZSAoCQkJCQkJXAotIgkuZ2xvYmwgbW9uXyIgI3ggIlxuIgkJCQlcCi0ibW9uXyIgI3ggIjpcbiIJCQkJCQlcCi0iCWx3CSQyNSwgJTAoJDI2KVxuIgkJCQlcCi0iCWx3CSQyNSwgJTEoJDI1KVxuIgkJCQlcCi0iCWpyCSQyNVxuIgkJCQkJXAotCTogOiAiaSIob2Zmc2V0b2YoeHh4X3QsIHBmdW5jKSksICJpIihYRl8gIyMgeCAqIHNpemVvZih2b2lkICopKSA6ICJ0OSIpOwotI2VsaWYgZGVmaW5lZChfX25kczMyX18pCi0jZGVmaW5lIEVYUE9SVF9GVU5DKHgpCQkJCQlcCi1hc20gdm9sYXRpbGUgKAkJCQkJCVwKLSIJLmdsb2JsIG1vbl8iICN4ICJcbiIJCQkJXAotIm1vbl8iICN4ICI6XG4iCQkJCQkJXAotIglsd2kJJHIxNiwgWyRncCArICglMCldXG4iCQkJXAotIglsd2kJJHIxNiwgWyRyMTYgKyAoJTEpXVxuIgkJCVwKLSIJanIJJHIxNlxuIgkJCQkJXAotOiA6ICJpIihvZmZzZXRvZih4eHhfdCwgcGZ1bmMpKSwJCQlcCi0iaSIoWEZfICMjIHggKiBzaXplb2Yodm9pZCAqKSkgOiAiJHIxNiIpOwotCi0jZWxzZQotI2Vycm9yIFtObyBzdHViIGNvZGUgZm9yIHRoaXMgYXJjaF0KLSNlbmRpZgotCi12b2lkIGR1bW15KHZvaWQpCi17Ci1FWFBPUlRfRlVOQyhwcmludGYpCi1FWFBPUlRfRlVOQyhzdHJjcHkpCi19Ci0KLWludCBtYWluKHZvaWQpCi17Ci0jaWYgZGVmaW5lZChfX2kzODZfXykKLQl4eHhfdCAqcHE7Ci0jZWxpZiBkZWZpbmVkKF9fcG93ZXJwY19fKQotCXJlZ2lzdGVyIHZvbGF0aWxlIHh4eF90ICpwcSBhc20oInIyIik7Ci0jZWxpZiBkZWZpbmVkKF9fYXJtX18pCi0JcmVnaXN0ZXIgdm9sYXRpbGUgeHh4X3QgKnBxIGFzbSgicjgiKTsKLSNlbGlmIGRlZmluZWQoX19taXBzX18pCi0JcmVnaXN0ZXIgdm9sYXRpbGUgeHh4X3QgKnBxIGFzbSgiazAiKTsKLSNlbGlmIGRlZmluZWQoX19uZHMzMl9fKQotCXJlZ2lzdGVyIHZvbGF0aWxlIHh4eF90ICpwcSBhc20oIiRyMTYiKTsKLSNlbmRpZgotCWNoYXIgYnVmWzMyXTsKLQotCWZ1bmNbWEZfc3RyY3B5XSA9IHN0cmNweTsKLQlmdW5jW1hGX3ByaW50Zl0gPSBwcmludGY7Ci0JcHEgPSAmcTsKLQlwcS0+cGZ1bmMgPSBwZnVuYyA9IGZ1bmM7Ci0KLQltb25fc3RyY3B5KGJ1ZiwgInRlc3QiKTsKLQltb25fcHJpbnRmKCJoaSAlcyAlZCB6XG4iLCBidWYsIDQ0NCk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWVzLmggYi9pbmNsdWRlL2Flcy5oCmluZGV4IGVhMDYzMDguLjYzMTVjMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWVzLmgKKysrIGIvaW5jbHVkZS9hZXMuaApAQCAtOCw2ICs4LDEzIEBACiAjaWZuZGVmIF9BRVNfUkVGX0hfCiAjZGVmaW5lIF9BRVNfUkVGX0hfCiAKKyNpZmRlZiBVU0VfSE9TVENDCisvKiBEZWZpbmUgY29tcGF0IHN0dWZmIGZvciB1c2UgaW4gZndfKiB0b29scy4gKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKyNkZWZpbmUgZGVidWcoLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCiAvKgogICogQUVTIGVuY3J5cHRpb24gbGlicmFyeSwgd2l0aCBzbWFsbCBjb2RlIHNpemUsIHN1cHBvcnRpbmcgb25seSAxMjgtYml0IEFFUwogICoKQEAgLTI1LDMwICszMiw2MyBAQAogfTsKIAogLyoqCisgKiBhZXNfZXhwYW5kX2tleSgpIC0gRXhwYW5kIHRoZSBBRVMga2V5CisgKgogICogRXhwYW5kIGEga2V5IGludG8gYSBrZXkgc2NoZWR1bGUsIHdoaWNoIGlzIHRoZW4gdXNlZCBmb3IgdGhlIG90aGVyCiAgKiBvcGVyYXRpb25zLgogICoKLSAqIFxwYXJhbSBrZXkJCUtleSwgb2YgbGVuZ3RoIEFFU19LRVlfTEVOR1RIIGJ5dGVzCi0gKiBccGFyYW0gZXhwa2V5CUJ1ZmZlciB0byBwbGFjZSBleHBhbmRlZCBrZXksIEFFU19FWFBBTkRfS0VZX0xFTkdUSAorICogQGtleQkJS2V5LCBvZiBsZW5ndGggQUVTX0tFWV9MRU5HVEggYnl0ZXMKKyAqIEBleHBrZXkJQnVmZmVyIHRvIHBsYWNlIGV4cGFuZGVkIGtleSwgQUVTX0VYUEFORF9LRVlfTEVOR1RICiAgKi8KIHZvaWQgYWVzX2V4cGFuZF9rZXkodTggKmtleSwgdTggKmV4cGtleSk7CiAKIC8qKgotICogRW5jcnlwdCBhIHNpbmdsZSBibG9jayBvZiBkYXRhCisgKiBhZXNfZW5jcnlwdCgpIC0gRW5jcnlwdCBzaW5nbGUgYmxvY2sgb2YgZGF0YSB3aXRoIEFFUyAxMjgKICAqCi0gKiBpbgkJSW5wdXQgZGF0YQotICogZXhwa2V5CUV4cGFuZGVkIGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24gKGZyb20gYWVzX2V4cGFuZF9rZXkoKSkKLSAqIG91dAkJT3V0cHV0IGRhdGEKKyAqIEBpbgkJSW5wdXQgZGF0YQorICogQGV4cGtleQlFeHBhbmRlZCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uIChmcm9tIGFlc19leHBhbmRfa2V5KCkpCisgKiBAb3V0CQlPdXRwdXQgZGF0YQogICovCiB2b2lkIGFlc19lbmNyeXB0KHU4ICppbiwgdTggKmV4cGtleSwgdTggKm91dCk7CiAKIC8qKgotICogRGVjcnlwdCBhIHNpbmdsZSBibG9jayBvZiBkYXRhCisgKiBhZXNfZGVjcnlwdCgpIC0gRGVjcnlwdCBzaW5nbGUgYmxvY2sgb2YgZGF0YSB3aXRoIEFFUyAxMjgKICAqCi0gKiBpbgkJSW5wdXQgZGF0YQotICogZXhwa2V5CUV4cGFuZGVkIGtleSB0byB1c2UgZm9yIGRlY3J5cHRpb24gKGZyb20gYWVzX2V4cGFuZF9rZXkoKSkKLSAqIG91dAkJT3V0cHV0IGRhdGEKKyAqIEBpbgkJSW5wdXQgZGF0YQorICogQGV4cGtleQlFeHBhbmRlZCBrZXkgdG8gdXNlIGZvciBkZWNyeXB0aW9uIChmcm9tIGFlc19leHBhbmRfa2V5KCkpCisgKiBAb3V0CQlPdXRwdXQgZGF0YQogICovCiB2b2lkIGFlc19kZWNyeXB0KHU4ICppbiwgdTggKmV4cGtleSwgdTggKm91dCk7CiAKKy8qKgorICogQXBwbHkgY2hhaW4gZGF0YSB0byB0aGUgZGVzdGluYXRpb24gdXNpbmcgRU9SCisgKgorICogRWFjaCBhcnJheSBpcyBvZiBsZW5ndGggQUVTX0tFWV9MRU5HVEguCisgKgorICogQGNiY19jaGFpbl9kYXRhCUNoYWluIGRhdGEKKyAqIEBzcmMJCQlTb3VyY2UgZGF0YQorICogQGRzdAkJCURlc3RpbmF0aW9uIGRhdGEsIHdoaWNoIGlzIG1vZGlmaWVkIGhlcmUKKyAqLwordm9pZCBhZXNfYXBwbHlfY2JjX2NoYWluX2RhdGEodTggKmNiY19jaGFpbl9kYXRhLCB1OCAqc3JjLCB1OCAqZHN0KTsKKworLyoqCisgKiBhZXNfY2JjX2VuY3J5cHRfYmxvY2tzKCkgLSBFbmNyeXB0IG11bHRpcGxlIGJsb2NrcyBvZiBkYXRhIHdpdGggQUVTIENCQy4KKyAqCisgKiBAa2V5X2V4cAkJRXhwYW5kZWQga2V5IHRvIHVzZQorICogQHNyYwkJCVNvdXJjZSBkYXRhIHRvIGVuY3J5cHQKKyAqIEBkc3QJCQlEZXN0aW5hdGlvbiBidWZmZXIKKyAqIEBudW1fYWVzX2Jsb2NrcwlOdW1iZXIgb2YgQUVTIGJsb2NrcyB0byBlbmNyeXB0CisgKi8KK3ZvaWQgYWVzX2NiY19lbmNyeXB0X2Jsb2Nrcyh1OCAqa2V5X2V4cCwgdTggKnNyYywgdTggKmRzdCwgdTMyIG51bV9hZXNfYmxvY2tzKTsKKworLyoqCisgKiBEZWNyeXB0IG11bHRpcGxlIGJsb2NrcyBvZiBkYXRhIHdpdGggQUVTIENCQy4KKyAqCisgKiBAa2V5X2V4cAkJRXhwYW5kZWQga2V5IHRvIHVzZQorICogQHNyYwkJCVNvdXJjZSBkYXRhIHRvIGRlY3J5cHQKKyAqIEBkc3QJCQlEZXN0aW5hdGlvbiBidWZmZXIKKyAqIEBudW1fYWVzX2Jsb2NrcwlOdW1iZXIgb2YgQUVTIGJsb2NrcyB0byBkZWNyeXB0CisgKi8KK3ZvaWQgYWVzX2NiY19kZWNyeXB0X2Jsb2Nrcyh1OCAqa2V5X2V4cCwgdTggKnNyYywgdTggKmRzdCwgdTMyIG51bV9hZXNfYmxvY2tzKTsKKwogI2VuZGlmIC8qIF9BRVNfUkVGX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2dsb2JhbF9kYXRhLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2dsb2JhbF9kYXRhLmgKaW5kZXggNzA3NDAwZS4uZTk4YjY2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9nbG9iYWxfZGF0YS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ2xvYmFsX2RhdGEuaApAQCAtODAsNiArODAsOSBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NZU19JMkMpCiAJaW50CQljdXJfaTJjX2J1czsJLyogY3VycmVudCB1c2VkIGkyYyBidXMgKi8KICNlbmRpZgorI2lmZGVmIENPTkZJR19TWVNfSTJDX01YQworCXZvaWQgKnNyZGF0YVsxMF07CisjZW5kaWYKIAl1bnNpZ25lZCBsb25nIHRpbWViYXNlX2g7CiAJdW5zaWduZWQgbG9uZyB0aW1lYmFzZV9sOwogCXN0cnVjdCBhcmNoX2dsb2JhbF9kYXRhIGFyY2g7CS8qIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkYXRhICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3UtYm9vdC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy91LWJvb3QuaAppbmRleCBlNzgxOTY3Li5jMThlNGNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3UtYm9vdC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdS1ib290LmgKQEAgLTEwOCw5ICsxMDgsNiBAQAogCXVuc2lnbmVkIGludAliaV9vcGJmcmVxOwkJLyogT1BCIGNsb2NrIGluIEh6ICovCiAJaW50CQliaV9paWNfZmFzdFsyXTsJCS8qIFVzZSBmYXN0IGkyYyBtb2RlICovCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19OWDgyMykKLQl1bnNpZ25lZCBjaGFyCWJpX3Nlcm51bVs4XTsKLSNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHXzR4eCkKICNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgXAogCQlkZWZpbmVkKENPTkZJR180NjBFWCkgfHwgZGVmaW5lZChDT05GSUdfNDYwR1QpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbW1vbi5oIGIvaW5jbHVkZS9jb21tb24uaAppbmRleCBjYmQzYzllLi41ZmIwYmIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvY29tbW9uLmgKQEAgLTUwNSwxOSArNTA1LDggQEAKIGV4dGVybiBzc2l6ZV90IHNwaV93cml0ZSAodWNoYXIgKiwgaW50LCB1Y2hhciAqLCBpbnQpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUlBYQ0xBU1NJQwotdm9pZCBycHhjbGFzc2ljX2luaXQgKHZvaWQpOwotI2VuZGlmCi0KIHZvaWQgcnB4bGl0ZV9pbml0ICh2b2lkKTsKIAotI2lmZGVmIENPTkZJR19NQlgKLS8qICQoQk9BUkQpL21ieDh4eC5jICovCi12b2lkCW1ieF9pbml0ICh2b2lkKTsKLXZvaWQJYm9hcmRfc2VyaWFsX2luaXQgKHZvaWQpOwotdm9pZAlib2FyZF9ldGhlcl9pbml0ICh2b2lkKTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0hFUk1FUwogLyogJChCT0FSRCkvaGVybWVzLmMgKi8KIHZvaWQgaGVybWVzX3N0YXJ0X2x4dDk4MCAoaW50IHNwZWVkKTsKQEAgLTY5Miw5ICs2ODEsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX0xIN0E0MFgpCiB1bG9uZwlnZXRfUExMQ0xLICh2b2lkKTsKICNlbmRpZgotI2lmIGRlZmluZWQgQ09ORklHX0lOQ0FfSVAKLXVpbnQJaW5jYWlwX2dldF9jcHVjbGsgKHZvaWQpOwotI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfSU1YKQogdWxvbmcgZ2V0X3N5c3RlbVBMTENMSyh2b2lkKTsKIHVsb25nIGdldF9GQ0xLKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb21tb25fdGltaW5nX3BhcmFtcy5oIGIvaW5jbHVkZS9jb21tb25fdGltaW5nX3BhcmFtcy5oCmluZGV4IDc2MzM4ZDQuLjgyMWRlMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbW9uX3RpbWluZ19wYXJhbXMuaAorKysgYi9pbmNsdWRlL2NvbW1vbl90aW1pbmdfcGFyYW1zLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTQsMzIgKzE0LDQ1IEBACiAKIAl1bnNpZ25lZCBpbnQgdGNrbWluX3hfcHM7CiAJdW5zaWduZWQgaW50IHRja21heF9wczsKLQl1bnNpZ25lZCBpbnQgdGNrbWF4X21heF9wczsKIAl1bnNpZ25lZCBpbnQgdHJjZF9wczsKIAl1bnNpZ25lZCBpbnQgdHJwX3BzOwogCXVuc2lnbmVkIGludCB0cmFzX3BzOworI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMykgfHwgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFI0KQorCXVuc2lnbmVkIGludCB0YWFtaW5fcHM7CisjZW5kaWYKIAotCXVuc2lnbmVkIGludCB0d3JfcHM7CS8qIG1heGltdW0gPSA2Mzc1MCBwcyAqLworI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwl1bnNpZ25lZCBpbnQgdHJmYzFfcHM7CisJdW5zaWduZWQgaW50IHRyZmMyX3BzOworCXVuc2lnbmVkIGludCB0cmZjNF9wczsKKwl1bnNpZ25lZCBpbnQgdHJyZHNfcHM7CisJdW5zaWduZWQgaW50IHRycmRsX3BzOworCXVuc2lnbmVkIGludCB0Y2NkbF9wczsKKyNlbHNlCiAJdW5zaWduZWQgaW50IHR3dHJfcHM7CS8qIG1heGltdW0gPSA2Mzc1MCBwcyAqLwogCXVuc2lnbmVkIGludCB0cmZjX3BzOwkvKiBtYXhpbXVtID0gMjU1IG5zICsgMjU2IG5zICsgLjc1IG5zCiAJCQkJCSAgID0gNTExNzUwIHBzICovCiAKIAl1bnNpZ25lZCBpbnQgdHJyZF9wczsJLyogbWF4aW11bSA9IDYzNzUwIHBzICovCisJdW5zaWduZWQgaW50IHRydHBfcHM7CS8qIGJ5dGUgMzgsIHNwZC0+dHJ0cCAqLworI2VuZGlmCisJdW5zaWduZWQgaW50IHR3cl9wczsJLyogbWF4aW11bSA9IDYzNzUwIHBzICovCiAJdW5zaWduZWQgaW50IHRyY19wczsJLyogbWF4aW11bSA9IDI1NCBucyArIC43NSBucyA9IDI1NDc1MCBwcyAqLwogCiAJdW5zaWduZWQgaW50IHJlZnJlc2hfcmF0ZV9wczsKIAl1bnNpZ25lZCBpbnQgZXh0ZW5kZWRfb3Bfc3J0OwogCisjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIxKSB8fCBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjIpCiAJdW5zaWduZWQgaW50IHRpc19wczsJLyogYnl0ZSAzMiwgc3BkLT5jYV9zZXR1cCAqLwogCXVuc2lnbmVkIGludCB0aWhfcHM7CS8qIGJ5dGUgMzMsIHNwZC0+Y2FfaG9sZCAqLwogCXVuc2lnbmVkIGludCB0ZHNfcHM7CS8qIGJ5dGUgMzQsIHNwZC0+ZGF0YV9zZXR1cCAqLwogCXVuc2lnbmVkIGludCB0ZGhfcHM7CS8qIGJ5dGUgMzUsIHNwZC0+ZGF0YV9ob2xkICovCi0JdW5zaWduZWQgaW50IHRydHBfcHM7CS8qIGJ5dGUgMzgsIHNwZC0+dHJ0cCAqLwogCXVuc2lnbmVkIGludCB0ZHFzcV9tYXhfcHM7CS8qIGJ5dGUgNDQsIHNwZC0+dGRxc3EgKi8KIAl1bnNpZ25lZCBpbnQgdHFoc19wczsJLyogYnl0ZSA0NSwgc3BkLT50cWhzICovCisjZW5kaWYKIAogCXVuc2lnbmVkIGludCBuZGltbXNfcHJlc2VudDsKLQl1bnNpZ25lZCBpbnQgbG93ZXN0X2NvbW1vbl9TUERfY2FzbGF0OworCXVuc2lnbmVkIGludCBsb3dlc3RfY29tbW9uX3NwZF9jYXNsYXQ7CiAJdW5zaWduZWQgaW50IGhpZ2hlc3RfY29tbW9uX2RlcmF0ZWRfY2FzbGF0OwogCXVuc2lnbmVkIGludCBhZGRpdGl2ZV9sYXRlbmN5OwogCXVuc2lnbmVkIGludCBhbGxfZGltbXNfYnVyc3RfbGVuZ3Roc19iaXRtYXNrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb21tcHJvYy5oIGIvaW5jbHVkZS9jb21tcHJvYy5oCmluZGV4IGMxMGE3OWMuLjI5YTNlNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbXByb2MuaAorKysgYi9pbmNsdWRlL2NvbW1wcm9jLmgKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBDUE0gY2FwYWJpbGl0aWVzLiAgSSAob3Igc29tZW9uZSBlbHNlKSB3aWxsIGFkZCBkZWZpbml0aW9ucyBhcyB0aGV5CiAgKiBhcmUgbmVlZGVkLiAgLS0gRGFuCiAgKgotICogT24gdGhlIE1CWCBib2FyZCwgRVBQQy1CdWcgbG9hZHMgQ1BNIG1pY3JvY29kZSBpbnRvIHRoZSBmaXJzdCA1MTIKLSAqIGJ5dGVzIG9mIHRoZSBEUCBSQU0gYW5kIHJlbG9jYXRlcyB0aGUgSTJDIHBhcmFtZXRlciBhcmVhIHRvIHRoZQotICogSURNQTEgc3BhY2UuICBUaGUgcmVtYWluaW5nIERQIFJBTSBpcyBhdmFpbGFibGUgZm9yIGJ1ZmZlciBkZXNjcmlwdG9ycwotICogb3Igb3RoZXIgdXNlLgogICovCiAjaWZuZGVmIF9fQ1BNXzhYWF9fCiAjZGVmaW5lIF9fQ1BNXzhYWF9fCkBAIC0xMzUsNyArMTMxLDYgQEAKICNkZWZpbmUgUFJPRkZfU01DMgkoKHVpbnQpMHgwMzgwKQogCiAvKiBEZWZpbmUgZW5vdWdoIHNvIEkgY2FuIGF0IGxlYXN0IHVzZSB0aGUgc2VyaWFsIHBvcnQgYXMgYSBVQVJULgotICogVGhlIE1CWCB1c2VzIFNNQzEgYXMgdGhlIGhvc3Qgc2VyaWFsIHBvcnQuCiAgKi8KIHR5cGVkZWYgc3RydWN0IHNtY191YXJ0IHsKIAl1c2hvcnQJc21jX3JiYXNlOwkvKiBSeCBCdWZmZXIgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KQEAgLTQzNCwzOCArNDI5LDYgQEAKICAqICNkZWZpbmUgRkVDX0VORVQgdG8gZW5hYmxlIHRoZSBTQ0MgcmVzcC4gRkVDIGV0aGVybmV0IGRyaXZlcnMuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCi0vKioqICBBRFMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NUEM4NjApICYmIGRlZmluZWQoQ09ORklHX0FEUykKLS8qIFRoaXMgRU5FVCBzdHVmZiBpcyBmb3IgdGhlIE1QQzg2MEFEUyB3aXRoIGV0aGVybmV0IG9uIFNDQzEuCi0gKi8KLQotI2RlZmluZQlQUk9GRl9FTkVUCVBST0ZGX1NDQzEKLSNkZWZpbmUJQ1BNX0NSX0VORVQJQ1BNX0NSX0NIX1NDQzEKLSNkZWZpbmUJU0NDX0VORVQJMAotCi0jZGVmaW5lIFBBX0VORVRfUlhECSgodXNob3J0KTB4MDAwMSkKLSNkZWZpbmUgUEFfRU5FVF9UWEQJKCh1c2hvcnQpMHgwMDAyKQotI2RlZmluZSBQQV9FTkVUX1RDTEsJKCh1c2hvcnQpMHgwMTAwKQotI2RlZmluZSBQQV9FTkVUX1JDTEsJKCh1c2hvcnQpMHgwMjAwKQotCi0jZGVmaW5lIFBCX0VORVRfVEVOQQkoKHVpbnQpMHgwMDAwMTAwMCkKLQotI2RlZmluZSBQQ19FTkVUX0NMU04JKCh1c2hvcnQpMHgwMDEwKQotI2RlZmluZSBQQ19FTkVUX1JFTkEJKCh1c2hvcnQpMHgwMDIwKQotCi0jZGVmaW5lIFNJQ1JfRU5FVF9NQVNLCSgodWludCkweDAwMDAwMGZmKQotI2RlZmluZSBTSUNSX0VORVRfQ0xLUlQJKCh1aW50KTB4MDAwMDAwMmMpCi0KLS8qIDY4MTYwIFBIWSBjb250cm9sICovCi0KLSNkZWZpbmUgUENfRU5FVF9FVEhMT09QICgodXNob3J0KTB4MDgwMCkKLSNkZWZpbmUgUENfRU5FVF9UUEZMREwJKCh1c2hvcnQpMHgwNDAwKQotI2RlZmluZSBQQ19FTkVUX1RQU1FFTCAgKCh1c2hvcnQpMHgwMjAwKQotCi0jZW5kaWYJLyogTVBDODYwQURTICovCi0KIC8qKiogIEJTRUlQICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWZkZWYgQ09ORklHX0JTRUlQCkBAIC01NjYsNjQgKzUyOSw4IEBACiAjZGVmaW5lIFBCX0VORVRfTE9PUEJBQ0sgKCh1aW50KTB4MDAwMDQwMDApCiAjZGVmaW5lIFBCX0VORVRfRkRQTEVYX0RJUyAoKHVpbnQpMHgwMDAwODAwMCkKIAotI2VuZGlmCi0KLS8qKiogIEZBRFM4MjMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTVBDODIzRkFEUykgJiYgZGVmaW5lZChDT05GSUdfRkFEUykKLS8qIFRoaXMgRU5FVCBzdHVmZiBpcyBmb3IgdGhlIE1QQzgyM0ZBRFMgd2l0aCBldGhlcm5ldCBvbiBTQ0MyLgotICovCi0jaWZkZWYgQ09ORklHX1NDQzJfRU5FVAotI2RlZmluZQlQUk9GRl9FTkVUCVBST0ZGX1NDQzIKLSNkZWZpbmUJQ1BNX0NSX0VORVQJQ1BNX0NSX0NIX1NDQzIKLSNkZWZpbmUJU0NDX0VORVQJMQotI2RlZmluZSBDUE1WRUNfRU5FVAlDUE1WRUNfU0NDMgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfU0NDMV9FTkVUCi0jZGVmaW5lCVBST0ZGX0VORVQJUFJPRkZfU0NDMQotI2RlZmluZQlDUE1fQ1JfRU5FVAlDUE1fQ1JfQ0hfU0NDMQotI2RlZmluZQlTQ0NfRU5FVAkwCi0jZGVmaW5lIENQTVZFQ19FTkVUCUNQTVZFQ19TQ0MxCiAjZW5kaWYKIAotI2RlZmluZSBQQV9FTkVUX1JYRAkoKHVzaG9ydCkweDAwMDQpCi0jZGVmaW5lIFBBX0VORVRfVFhECSgodXNob3J0KTB4MDAwOCkKLSNkZWZpbmUgUEFfRU5FVF9UQ0xLCSgodXNob3J0KTB4MDQwMCkKLSNkZWZpbmUgUEFfRU5FVF9SQ0xLCSgodXNob3J0KTB4MDIwMCkKLQotI2RlZmluZSBQQl9FTkVUX1RFTkEJKCh1aW50KTB4MDAwMDIwMDApCi0KLSNkZWZpbmUgUENfRU5FVF9DTFNOCSgodXNob3J0KTB4MDA0MCkKLSNkZWZpbmUgUENfRU5FVF9SRU5BCSgodXNob3J0KTB4MDA4MCkKLQotI2RlZmluZSBTSUNSX0VORVRfTUFTSwkoKHVpbnQpMHgwMDAwZmYwMCkKLSNkZWZpbmUgU0lDUl9FTkVUX0NMS1JUCSgodWludCkweDAwMDAyZTAwKQotCi0jZW5kaWYJLyogQ09ORklHX0ZBRFM4MjNGQURTICovCi0KLS8qKiogIEZBRFM4NTBTQVIgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTVBDODUwU0FSKSAmJiBkZWZpbmVkKENPTkZJR19GQURTKQotLyogVGhpcyBFTkVUIHN0dWZmIGlzIGZvciB0aGUgTVBDODUwU0FSIHdpdGggZXRoZXJuZXQgb24gU0NDMi4gIFNvbWUgb2YKLSAqIHRoaXMgbWF5IGJlIHVuaXF1ZSB0byB0aGUgRkFEUzg1MFNBUiBjb25maWd1cmF0aW9uLgotICogTm90ZSBURU5BIGlzIG9uIFBvcnQgQi4KLSAqLwotI2RlZmluZQlQUk9GRl9FTkVUCVBST0ZGX1NDQzIKLSNkZWZpbmUJQ1BNX0NSX0VORVQJQ1BNX0NSX0NIX1NDQzIKLSNkZWZpbmUJU0NDX0VORVQJMQotI2RlZmluZSBQQV9FTkVUX1JYRAkoKHVzaG9ydCkweDAwMDQpCS8qIFBBIDEzICovCi0jZGVmaW5lIFBBX0VORVRfVFhECSgodXNob3J0KTB4MDAwOCkJLyogUEEgMTIgKi8KLSNkZWZpbmUgUEFfRU5FVF9SQ0xLCSgodXNob3J0KTB4MDIwMCkJLyogUEEgNiAqLwotI2RlZmluZSBQQV9FTkVUX1RDTEsJKCh1c2hvcnQpMHgwODAwKQkvKiBQQSA0ICovCi0jZGVmaW5lIFBCX0VORVRfVEVOQQkoKHVpbnQpMHgwMDAwMjAwMCkJLyogUEIgMTggKi8KLSNkZWZpbmUgUENfRU5FVF9DTFNOCSgodXNob3J0KTB4MDA0MCkJLyogUEMgOSAqLwotI2RlZmluZSBQQ19FTkVUX1JFTkEJKCh1c2hvcnQpMHgwMDgwKQkvKiBQQyA4ICovCi0KLSNkZWZpbmUgU0lDUl9FTkVUX01BU0sJKCh1aW50KTB4MDAwMGZmMDApCi0jZGVmaW5lIFNJQ1JfRU5FVF9DTEtSVAkoKHVpbnQpMHgwMDAwMmYwMCkJLyogUkNMSy1DTEsyLCBUQ0xLLUNMSzQgKi8KLSNlbmRpZgkvKiBDT05GSUdfRkFEUzg1MFNBUiAqLwotCiAvKioqICBGQURTODYwVCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfRkFEUykgJiYgZGVmaW5lZChDT05GSUdfTVBDODZ4KQpAQCAtNzA5LDMyICs2MTYsNiBAQAogI2RlZmluZSBQRF9NSUlfTUFTSwkoKHVzaG9ydCkweDFGRkYpCS8qIFBEIDMtMTUJKi8KICNlbmRpZgkvKiBDT05GSUdfR0VOODYwVCAqLwogCi0vKioqICBHRU5JRVRWICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0dFTklFVFYpCi0vKiBFdGhlcm5ldCBpcyBvbmx5IG9uIFNDQzIgKi8KLQotI2RlZmluZSBDT05GSUdfU0NDMl9FTkVUCi0jZGVmaW5lCVBST0ZGX0VORVQJUFJPRkZfU0NDMgotI2RlZmluZQlDUE1fQ1JfRU5FVAlDUE1fQ1JfQ0hfU0NDMgotI2RlZmluZQlTQ0NfRU5FVAkxCi0jZGVmaW5lIENQTVZFQ19FTkVUCUNQTVZFQ19TQ0MyCi0KLSNkZWZpbmUgUEFfRU5FVF9SWEQJKCh1c2hvcnQpMHgwMDA0KQkvKiBQQSAxMyAqLwotI2RlZmluZSBQQV9FTkVUX1RYRAkoKHVzaG9ydCkweDAwMDgpCS8qIFBBIDEyICovCi0jZGVmaW5lIFBBX0VORVRfVENMSwkoKHVzaG9ydCkweDA0MDApCS8qIFBBICA1ICovCi0jZGVmaW5lIFBBX0VORVRfUkNMSwkoKHVzaG9ydCkweDAyMDApCS8qIFBBICA2ICovCi0KLSNkZWZpbmUgUEJfRU5FVF9URU5BCSgodWludCkweDAwMDAyMDAwKQkvKiBQQiAxOCAqLwotCi0jZGVmaW5lIFBDX0VORVRfQ0xTTgkoKHVzaG9ydCkweDAwNDApCS8qIFBDICA5ICovCi0jZGVmaW5lIFBDX0VORVRfUkVOQQkoKHVzaG9ydCkweDAwODApCS8qIFBDICA4ICovCi0KLSNkZWZpbmUgU0lDUl9FTkVUX01BU0sJKCh1aW50KTB4MDAwMGZmMDApCi0jZGVmaW5lIFNJQ1JfRU5FVF9DTEtSVAkoKHVpbnQpMHgwMDAwMmUwMCkKLQotI2VuZGlmCS8qIENPTkZJR19HRU5JRVRWICovCi0KIC8qKiogSEVSTUVTLVBSTyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIFRoZSBIRVJNRVMtUFJPIHVzZXMgdGhlIEZFQyBvbiBhIE1QQzg2MFQgZm9yIEV0aGVybmV0ICovCkBAIC04ODgsNjAgKzc2OSw2IEBACiAjZGVmaW5lIFNJQ1JfRU5FVF9DTEtSVAkoKHVpbnQpMHgwMDAwM0UwMCkKICNlbmRpZgkvKiBDT05GSUdfTFdNT04gKi8KIAotLyoqKiAgTlg4MjMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTlg4MjMpCi0vKiBCaXRzIGluIHBhcmFsbGVsIEkvTyBwb3J0IHJlZ2lzdGVycyB0aGF0IGhhdmUgdG8gYmUgc2V0L2NsZWFyZWQKLSAqIHRvIGNvbmZpZ3VyZSB0aGUgcGlucyBmb3IgU0NDMSB1c2UuCi0gKi8KLSNkZWZpbmUgUFJPRkZfRU5FVAlQUk9GRl9TQ0MyCi0jZGVmaW5lIENQTV9DUl9FTkVUCUNQTV9DUl9DSF9TQ0MyCi0jZGVmaW5lIFNDQ19FTkVUCTEKLSNkZWZpbmUgUEFfRU5FVF9SWEQJKCh1c2hvcnQpMHgwMDA0KSAgLyogUEEgMTMgKi8KLSNkZWZpbmUgUEFfRU5FVF9UWEQJKCh1c2hvcnQpMHgwMDA4KSAgLyogUEEgMTIgKi8KLSNkZWZpbmUgUEFfRU5FVF9SQ0xLCSgodXNob3J0KTB4MDIwMCkgIC8qIFBBICA2ICovCi0jZGVmaW5lIFBBX0VORVRfVENMSwkoKHVzaG9ydCkweDA4MDApICAvKiBQQSAgNCAqLwotCi0jZGVmaW5lIFBCX0VORVRfVEVOQQkoKHVpbnQpMHgwMDAwMjAwMCkgICAvKiBQQiAxOCAqLwotCi0jZGVmaW5lIFBDX0VORVRfQ0xTTgkoKHVzaG9ydCkweDAwNDApICAvKiBQQyAgOSAqLwotI2RlZmluZSBQQ19FTkVUX1JFTkEJKCh1c2hvcnQpMHgwMDgwKSAgLyogUEMgIDggKi8KLQotLyogQ29udHJvbCBiaXRzIGluIHRoZSBTSUNSIHRvIHJvdXRlIFRDTEsgKENMSzMpIGFuZCBSQ0xLIChDTEsxKSB0bwotICogU0NDMi4gIEFsc28sIG1ha2Ugc3VyZSBHUjIgKGJpdCAxNikgYW5kIFNDMiAoYml0IDE3KSBhcmUgemVyby4KLSAqLwotI2RlZmluZSBTSUNSX0VORVRfTUFTSwkoKHVpbnQpMHgwMDAwZmYwMCkKLSNkZWZpbmUgU0lDUl9FTkVUX0NMS1JUCSgodWludCkweDAwMDAyZjAwKQotCi0jZW5kaWYgICAvKiBDT05GSUdfTlg4MjMgKi8KLQotLyoqKiAgTUJYICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBDT05GSUdfTUJYCi0vKiBCaXRzIGluIHBhcmFsbGVsIEkvTyBwb3J0IHJlZ2lzdGVycyB0aGF0IGhhdmUgdG8gYmUgc2V0L2NsZWFyZWQKLSAqIHRvIGNvbmZpZ3VyZSB0aGUgcGlucyBmb3IgU0NDMSB1c2UuICBUaGUgVENMSyBhbmQgUkNMSyBzZWVtIHVuaXF1ZQotICogdG8gdGhlIE1CWDg2MCBib2FyZC4gIEFueSB0d28gb2YgdGhlIGZvdXIgYXZhaWxhYmxlIGNsb2NrcyBjb3VsZCBiZQotICogdXNlZCwgYW5kIHRoZSBNUEM4NjAgY29va2Jvb2sgbWFudWFsIGhhcyBhbiBleGFtcGxlIHVzaW5nIGRpZmZlcmVudAotICogY2xvY2sgcGlucy4KLSAqLwotI2RlZmluZQlQUk9GRl9FTkVUCVBST0ZGX1NDQzEKLSNkZWZpbmUJQ1BNX0NSX0VORVQJQ1BNX0NSX0NIX1NDQzEKLSNkZWZpbmUJU0NDX0VORVQJMAotI2RlZmluZSBQQV9FTkVUX1JYRAkoKHVzaG9ydCkweDAwMDEpCi0jZGVmaW5lIFBBX0VORVRfVFhECSgodXNob3J0KTB4MDAwMikKLSNkZWZpbmUgUEFfRU5FVF9UQ0xLCSgodXNob3J0KTB4MDIwMCkKLSNkZWZpbmUgUEFfRU5FVF9SQ0xLCSgodXNob3J0KTB4MDgwMCkKLSNkZWZpbmUgUENfRU5FVF9URU5BCSgodXNob3J0KTB4MDAwMSkKLSNkZWZpbmUgUENfRU5FVF9DTFNOCSgodXNob3J0KTB4MDAxMCkKLSNkZWZpbmUgUENfRU5FVF9SRU5BCSgodXNob3J0KTB4MDAyMCkKLQotLyogQ29udHJvbCBiaXRzIGluIHRoZSBTSUNSIHRvIHJvdXRlIFRDTEsgKENMSzIpIGFuZCBSQ0xLIChDTEs0KSB0bwotICogU0NDMS4gIEFsc28sIG1ha2Ugc3VyZSBHUjEgKGJpdCAyNCkgYW5kIFNDMSAoYml0IDI1KSBhcmUgemVyby4KLSAqLwotI2RlZmluZSBTSUNSX0VORVRfTUFTSwkoKHVpbnQpMHgwMDAwMDBmZikKLSNkZWZpbmUgU0lDUl9FTkVUX0NMS1JUCSgodWludCkweDAwMDAwMDNkKQotI2VuZGlmCS8qIENPTkZJR19NQlggKi8KLQogLyoqKiAgS004WFggICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogVGhlIEtNOFhYIFNlcnZpY2UgTW9kdWxlIHVzZXMgU0NDMyBmb3IgRXRoZXJuZXQgKi8KQEAgLTExMjcsNDEgKzk1NCw2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUVM4NjBUICovCiAKLS8qKiogIFJQWENMQVNTSUMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgQ09ORklHX1JQWENMQVNTSUMKLQotI2lmZGVmIENPTkZJR19GRUNfRU5FVAotCi0jIGRlZmluZSBGRUNfRU5FVAkJCQkvKiB1c2UgRkVDIGZvciBFVGhlcm5ldCAqLwotIyB1bmRlZiBTQ0NfRU5FVAotCi0jZWxzZQkvKiAhIENPTkZJR19GRUNfRU5FVCAqLwotCi0vKiBCaXRzIGluIHBhcmFsbGVsIEkvTyBwb3J0IHJlZ2lzdGVycyB0aGF0IGhhdmUgdG8gYmUgc2V0L2NsZWFyZWQKLSAqIHRvIGNvbmZpZ3VyZSB0aGUgcGlucyBmb3IgU0NDMSB1c2UuCi0gKi8KLSNkZWZpbmUJUFJPRkZfRU5FVAlQUk9GRl9TQ0MxCi0jZGVmaW5lCUNQTV9DUl9FTkVUCUNQTV9DUl9DSF9TQ0MxCi0jZGVmaW5lCVNDQ19FTkVUCTAKLSNkZWZpbmUgUEFfRU5FVF9SWEQJKCh1c2hvcnQpMHgwMDAxKQotI2RlZmluZSBQQV9FTkVUX1RYRAkoKHVzaG9ydCkweDAwMDIpCi0jZGVmaW5lIFBBX0VORVRfVENMSwkoKHVzaG9ydCkweDAyMDApCi0jZGVmaW5lIFBBX0VORVRfUkNMSwkoKHVzaG9ydCkweDA4MDApCi0jZGVmaW5lIFBCX0VORVRfVEVOQQkoKHVpbnQpMHgwMDAwMTAwMCkKLSNkZWZpbmUgUENfRU5FVF9DTFNOCSgodXNob3J0KTB4MDAxMCkKLSNkZWZpbmUgUENfRU5FVF9SRU5BCSgodXNob3J0KTB4MDAyMCkKLQotLyogQ29udHJvbCBiaXRzIGluIHRoZSBTSUNSIHRvIHJvdXRlIFRDTEsgKENMSzIpIGFuZCBSQ0xLIChDTEs0KSB0bwotICogU0NDMS4gIEFsc28sIG1ha2Ugc3VyZSBHUjEgKGJpdCAyNCkgYW5kIFNDMSAoYml0IDI1KSBhcmUgemVyby4KLSAqLwotI2RlZmluZSBTSUNSX0VORVRfTUFTSwkoKHVpbnQpMHgwMDAwMDBmZikKLSNkZWZpbmUgU0lDUl9FTkVUX0NMS1JUCSgodWludCkweDAwMDAwMDNkKQotCi0jZW5kaWYJLyogQ09ORklHX0ZFQ19FTkVUICovCi0KLSNlbmRpZgkvKiBDT05GSUdfUlBYQ0xBU1NJQyAqLwotCiAvKioqICBSUFhMSVRFICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2lmZGVmIENPTkZJR19SUFhMSVRFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvQURTODYwLmggYi9pbmNsdWRlL2NvbmZpZ3MvQURTODYwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZWExNzIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jb25maWdzL0FEUzg2MC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAgKiBBIGNvbGxlY3Rpb24gb2Ygc3RydWN0dXJlcywgYWRkcmVzc2VzLCBhbmQgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aAotICAqIHRoZSBNb3Rvcm9sYSA4NjAgQURTIGJvYXJkLgkgQ29waWVkIGZyb20gdGhlIE1CWCBzdHVmZi4KLSAgKiBNYWdudXMgRGFtbSBhZGRlZCBkZWZpbmVzIGZvciA4eHhyb20gYW5kIGV4dGVuZGVkIGJkX2luZm8uCi0gICogSGVsbXV0IEJ1Y2hzYmF1bSBhZGRlZCBiaXR2YWx1ZXMgZm9yIEJDU1J4Ci0gICoKLSAgKiBDb3B5cmlnaHQgKGMpIDE5OTggRGFuIE1hbGVrIChkbWFsZWtAamxjLm5ldCkKLSAgKgotICAqIE1vZGlmaWVkIGJ5LCBZdWxpIEJhcmNvaGVuLCBBcmFiZWxsYSBTb2Z0d2FyZSBMdGQuLCB5dWxpQGFyYWJlbGxhc3cuY29tCi0gICoKLSAgKiBWYWx1ZXMgY29tbW9uIHRvIGFsbCBGQURTIGZhbWlseSBib2FyZHMgYXJlIGluIGJvYXJkL2ZhZHMvZmFkcy5oCi0gICovCi0KLSNpZm5kZWYgX19DT05GSUdfSAotI2RlZmluZSBfX0NPTkZJR19ICi0KLS8qIEJvYXJkIHR5cGUgKi8KLSNkZWZpbmUgQ09ORklHX0FEUwkJMQkvKiBPbGQgTW90b3JvbGEgTVBDODIxLzg2MEFEUyAqLwotCi0vKiBQcm9jZXNzb3IgdHlwZSAqLwotI2RlZmluZSBDT05GSUdfTVBDODYwCQkxCi0KLSNkZWZpbmUJQ09ORklHX1NZU19URVhUX0JBU0UJMHhGRTAwMDAwMAotCi0jZGVmaW5lIENPTkZJR184eHhfQ09OU19TTUMxCTEJLyogQ29uc29sZSBpcyBvbiBTTUMxICovCi0jdW5kZWYJQ09ORklHXzh4eF9DT05TX1NNQzIKLSN1bmRlZglDT05GSUdfOHh4X0NPTlNfTk9ORQotCi0jZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMzg0MDAJLyogQ29uc29sZSBiYXVkcmF0ZSAqLwotCi0jaWYgMAotI2RlZmluZSBDT05GSUdfU1lTXzhYWF9GQUNUCQkxNTI2CS8qIDMyLjc2OCBrSHogY3J5c3RhbCBvbiBYVEFML0VYVEFMICovCi0jZWxzZQotI2RlZmluZSBDT05GSUdfU1lTXzhYWF9GQUNUCQkxMgkvKiA0IE1IeiBvc2NpbGxhdG9yIG9uIEVYVENMSyAqLwotI2VuZGlmCi0KLSNkZWZpbmUgQ09ORklHX1NZU19QTFBSQ1IgICgoKENPTkZJR19TWVNfOFhYX0ZBQ1QtMSkgPDwgUExQUkNSX01GX1NISUZUKSB8CVwKLQkJUExQUkNSX1NQTFNTIHwgUExQUkNSX1RFWFBTIHwgUExQUkNSX1RNSVNUKQotCi0jZGVmaW5lIENPTkZJR19EUkFNXzUwTUhaCQkxCi0KLQotLyoKLSAqIENvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uLgotICovCi0jaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+Ci0KLSNkZWZpbmUgQ09ORklHX0NNRF9ESENQCi0jZGVmaW5lIENPTkZJR19DTURfSU1NQVAKLSNkZWZpbmUgQ09ORklHX0NNRF9QQ01DSUEKLSNkZWZpbmUgQ09ORklHX0NNRF9QSU5HCi0KLS8qIFRoaXMgaXMgcGlja2VkIHVwIGFnYWluIGluIGZhZHMuaCAqLwotI2RlZmluZSBGQURTX0NPTU1BTkRTX0FMUkVBRFlfREVGSU5FRAotCi0jaW5jbHVkZSAiLi4vLi4vYm9hcmQvZmFkcy9mYWRzLmgiCi0KLSNkZWZpbmUgQ09ORklHX1NZU19QQ19JREVfUkVTRVQJKCh1c2hvcnQpMHgwMDA4KSAgICAvKiBQQyAxMgkqLwotCi0jZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0I0ODYwUURTLmggYi9pbmNsdWRlL2NvbmZpZ3MvQjQ4NjBRRFMuaAppbmRleCBiMjQ4MzAyLi5kZjM3MWI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvQjQ4NjBRRFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvQjQ4NjBRRFMuaApAQCAtMTQsMTAgKzE0LDQzIEBACiAjZGVmaW5lIENPTkZJR19QSFlTXzY0QklUCiAKICNpZmRlZiBDT05GSUdfUkFNQk9PVF9QQkwKKyNkZWZpbmUgQ09ORklHX1NZU19GU0xfUEJMX1BCSQkkKFNSQ1RSRUUpL2JvYXJkL2ZyZWVzY2FsZS9iNDg2MHFkcy9iNF9wYmkuY2ZnCisjZGVmaW5lIENPTkZJR19TWVNfRlNMX1BCTF9SQ1cJJChTUkNUUkVFKS9ib2FyZC9mcmVlc2NhbGUvYjQ4NjBxZHMvYjRfcmN3LmNmZworI2lmbmRlZiBDT05GSUdfTkFORAogI2RlZmluZSBDT05GSUdfUkFNQk9PVF9URVhUX0JBU0UJQ09ORklHX1NZU19URVhUX0JBU0UKICNkZWZpbmUgQ09ORklHX1JFU0VUX1ZFQ1RPUl9BRERSRVNTCTB4ZmZmZmZmZmMKLSNkZWZpbmUgQ09ORklHX1NZU19GU0xfUEJMX1BCSQlib2FyZC9mcmVlc2NhbGUvYjQ4NjBxZHMvYjRfcGJpLmNmZwotI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9QQkxfUkNXCWJvYXJkL2ZyZWVzY2FsZS9iNDg2MHFkcy9iNF9yY3cuY2ZnCisjZWxzZQorI2RlZmluZSBDT05GSUdfU1BMCisjZGVmaW5lIENPTkZJR19TUExfTVBDOFhYWF9JTklUX0REUl9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfRU5WX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9TRVJJQUxfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0ZMVVNIX0lNQUdFCisjZGVmaW5lIENPTkZJR19TUExfVEFSR0VUCQkidS1ib290LXdpdGgtc3BsLmJpbiIKKyNkZWZpbmUgQ09ORklHX1NQTF9MSUJHRU5FUklDX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9MSUJDT01NT05fU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0kyQ19TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfRFJJVkVSU19NSVNDX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX0ZTTF9MQVcgICAgICAgICAgICAgICAgIC8qIFVzZSBjb21tb24gRlNMIGluaXQgY29kZSAqLworI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkJMHgwMDIwMTAwMAorI2RlZmluZSBDT05GSUdfU1BMX1RFWFRfQkFTRQkJMHhGRkZEODAwMAorI2RlZmluZSBDT05GSUdfU1BMX1BBRF9UTwkJMHg0MDAwMAorI2RlZmluZSBDT05GSUdfU1BMX01BWF9TSVpFCQkweDI4MDAwCisjZGVmaW5lIFJFU0VUX1ZFQ1RPUl9PRkZTRVQJCTB4MjdGRkMKKyNkZWZpbmUgQk9PVF9QQUdFX09GRlNFVAkJMHgyNzAwMAorI2RlZmluZSBDT05GSUdfU1BMX05BTkRfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfVV9CT09UX1NJWkUJKDc2OCA8PCAxMCkKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1VfQk9PVF9EU1QJMHgwMDIwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfVV9CT09UX1NUQVJUCTB4MDAyMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1VfQk9PVF9PRkZTCSgyNTYgPDwgMTApCisjZGVmaW5lIENPTkZJR19TWVNfTERTQ1JJUFQJImFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMiCisjZGVmaW5lIENPTkZJR19TUExfTkFORF9CT09UCisjaWZkZWYgQ09ORklHX1NQTF9CVUlMRAorI2RlZmluZSBDT05GSUdfU1BMX1NLSVBfUkVMT0NBVEUKKyNkZWZpbmUgQ09ORklHX1NQTF9DT01NT05fSU5JVF9ERFIKKyNkZWZpbmUgQ09ORklHX1NZU19DQ1NSX0RPX05PVF9SRUxPQ0FURQorI2RlZmluZSBDT05GSUdfU1lTX05PX0ZMQVNICisjZW5kaWYKKyNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU1JJT19QQ0lFX0JPT1RfU0xBVkUKQEAgLTExMyw4ICsxNDYsOCBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfTkFORCkKICNkZWZpbmUgQ09ORklHX1NZU19FWFRSQV9FTlZfUkVMT0MKICNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9OQU5ECi0jZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCUNPTkZJR19TWVNfTkFORF9CTE9DS19TSVpFCi0jZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCQkoNyAqIENPTkZJR19TWVNfTkFORF9CTE9DS19TSVpFKQorI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCQkweDIwMDAKKyNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCSgxMCAqIENPTkZJR19TWVNfTkFORF9CTE9DS19TSVpFKQogI2VsaWYgZGVmaW5lZChDT05GSUdfU1JJT19QQ0lFX0JPT1RfU0xBVkUpCiAjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fUkVNT1RFCiAjZGVmaW5lIENPTkZJR19FTlZfQUREUgkJMHhmZmUyMDAwMApAQCAtMTY0LDcgKzE5NywxNiBAQAogLyoKICAqICBDb25maWcgdGhlIEwzIENhY2hlIGFzIEwzIFNSQU0KICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfTDNfQUREUgkJQ09ORklHX1JBTUJPT1RfVEVYVF9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9MM19BRERSCQkweEZGRkMwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfTDNfU0laRQkJMjU2IDw8IDEwCisjZGVmaW5lIENPTkZJR19TUExfR0RfQUREUgkJKENPTkZJR19TWVNfSU5JVF9MM19BRERSICsgMzIgKiAxMDI0KQorI2lmZGVmIENPTkZJR19OQU5ECisjZGVmaW5lIENPTkZJR19FTlZfQUREUgkJCShDT05GSUdfU1BMX0dEX0FERFIgKyA0ICogMTAyNCkKKyNlbmRpZgorI2RlZmluZSBDT05GSUdfU1BMX1JFTE9DX01BTExPQ19BRERSCShDT05GSUdfU1BMX0dEX0FERFIgKyAxMiAqIDEwMjQpCisjZGVmaW5lIENPTkZJR19TUExfUkVMT0NfTUFMTE9DX1NJWkUJKDMwIDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1BMX1JFTE9DX1NUQUNLCQkoQ09ORklHX1NQTF9HRF9BRERSICsgNjQgKiAxMDI0KQorI2RlZmluZSBDT05GSUdfU1BMX1JFTE9DX1NUQUNLX1NJWkUJKDIyIDw8IDEwKQogCiAjaWZkZWYgQ09ORklHX1BIWVNfNjRCSVQKICNkZWZpbmUgQ09ORklHX1NZU19EQ1NSQkFSCQkweGYwMDAwMDAwCkBAIC0xOTMsNyArMjM1LDkgQEAKICNkZWZpbmUgQ09ORklHX0REUl9TUEQKICNkZWZpbmUgQ09ORklHX1NZU19ERFJfUkFXX1RJTUlORwogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9ERFIzCisjaWZuZGVmIENPTkZJR19TUExfQlVJTEQKICNkZWZpbmUgQ09ORklHX0ZTTF9ERFJfSU5URVJBQ1RJVkUKKyNlbmRpZgogCiAjZGVmaW5lIENPTkZJR19TWVNfU1BEX0JVU19OVU0JMAogI2RlZmluZSBTUERfRUVQUk9NX0FERFJFU1MxCTB4NTEKQEAgLTM4MSw3ICs0MjUsMTEgQEAKICNkZWZpbmUgQ09ORklHX1NZU19DUzFfRlRJTTIJCUNPTkZJR19TWVNfTk9SX0ZUSU0yCiAjZGVmaW5lIENPTkZJR19TWVNfQ1MxX0ZUSU0zCQlDT05GSUdfU1lTX05PUl9GVElNMwogCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFCQlDT05GSUdfU1lTX1RFWFRfQkFTRQorI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UJQ09ORklHX1NQTF9URVhUX0JBU0UKKyNlbHNlCisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFCUNPTkZJR19TWVNfVEVYVF9CQVNFCS8qIHN0YXJ0IG9mIG1vbml0b3IgKi8KKyNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfUkFNQk9PVF9QQkwpCiAjZGVmaW5lIENPTkZJR19TWVNfUkFNQk9PVApAQCAtNDE0LDcgKzQ2Miw3IEBACiAJCQkJCUdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQogI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfT0ZGU0VUCUNPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCiAKLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDUxMiAqIDEwMjQpCisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSg3NjggKiAxMDI0KQogI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCSg0ICogMTAyNCAqIDEwMjQpCiAKIC8qIFNlcmlhbCBQb3J0IC0gY29udHJvbGxlZCBvbiBib2FyZCB3aXRoIGp1bXBlciBKOApAQCAtNDM1LDcgKzQ4Myw5IEBACiAjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9DT00zCShDT05GSUdfU1lTX0NDU1JCQVIrMHgxMUQ1MDApCiAjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9DT000CShDT05GSUdfU1lTX0NDU1JCQVIrMHgxMUQ2MDApCiAjZGVmaW5lIENPTkZJR19TRVJJQUxfTVVMVEkJCS8qIEVuYWJsZSBib3RoIHNlcmlhbCBwb3J0cyAqLworI2lmbmRlZiBDT05GSUdfU1BMX0JVSUxECiAjZGVmaW5lIENPTkZJR19TWVNfQ09OU09MRV9JU19JTl9FTlYJLyogZGV0ZXJtaW5lIGZyb20gZW52aXJvbm1lbnQgKi8KKyNlbmRpZgogCiAKIC8qIFVzZSB0aGUgSFVTSCBwYXJzZXIgKi8KQEAgLTU5Niw3ICs2NDYsNyBAQAogICogZW52LCBzbyB3ZSBnb3QgMHgxMTAwMDAuCiAgKi8KICNkZWZpbmUgQ09ORklHX1NZU19RRV9GV19JTl9TUElGTEFTSAotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUgkweDExMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkweDExMDAwMAogI2VsaWYgZGVmaW5lZChDT05GSUdfU0RDQVJEKQogLyoKICAqIFBCTCBTRCBib290IGltYWdlIHNob3VsZCBzdG9yZWQgYXQgMHgxMDAwKDggYmxvY2tzKSwgdGhlIHNpemUgb2YgdGhlIGltYWdlIGlzCkBAIC02MDQsMTAgKzY1NCwxMCBAQAogICogMHgyMDAwICgxNiBibG9ja3MpLCA4ICsgMTA4OSArIDE2ID0gMTExMywgZW5sYXJnZSBpdCB0byAxMTMwLgogICovCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9NTUMKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJKDUxMiAqIDExMzApCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCSg1MTIgKiAxMTMwKQogI2VsaWYgZGVmaW5lZChDT05GSUdfTkFORCkKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0lOX05BTkQKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJKDggKiBDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRSkKKyNkZWZpbmUgQ09ORklHX1NZU19GTUFOX0ZXX0FERFIJKDEzICogQ09ORklHX1NZU19OQU5EX0JMT0NLX1NJWkUpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUklPX1BDSUVfQk9PVF9TTEFWRSkKIC8qCiAgKiBTbGF2ZSBoYXMgbm8gdWNvZGUgbG9jYWxseSwgaXQgY2FuIGZldGNoIHRoaXMgZnJvbSByZW1vdGUuIFdoZW4gaW1wbGVtZW50aW5nCkBAIC02MTcsMTAgKzY2NywxMCBAQAogICogbWFzdGVyIExBVy0+dGhlIHVjb2RlIGFkZHJlc3MgaW4gbWFzdGVyJ3MgbWVtb3J5IHNwYWNlLgogICovCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9SRU1PVEUKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJMHhGRkUwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkweEZGRTAwMDAwCiAjZWxzZQogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTk9SCi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCQkweEVGRjAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCQkweEVGRjAwMDAwCiAjZW5kaWYKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0xFTkdUSAkweDEwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfRkRUX1BBRAkJKDB4MzAwMCArIENPTkZJR19TWVNfUUVfRk1BTl9GV19MRU5HVEgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvQlNDOTEzMVJEQi5oIGIvaW5jbHVkZS9jb25maWdzL0JTQzkxMzFSREIuaAppbmRleCBhMTYzZTNkLi41YTMxNmM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvQlNDOTEzMVJEQi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9CU0M5MTMxUkRCLmgKQEAgLTIyMCw3ICsyMjAsNyBAQAogCQkJCQkJLSBHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKICNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX09GRlNFVAlDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAogCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSgyNTYgKiAxMDI0KSAvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDc2OCAqIDEwMjQpCiAjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDEwMjQgKiAxMDI0KQkvKiBSZXNlcnZlZCBmb3IgbWFsbG9jKi8KIAogLyogU2VyaWFsIFBvcnQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9CU0M5MTMyUURTLmggYi9pbmNsdWRlL2NvbmZpZ3MvQlNDOTEzMlFEUy5oCmluZGV4IDA1MmEwZjEuLmU3NmEwNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9CU0M5MTMyUURTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0JTQzkxMzJRRFMuaApAQCAtMzIsNiArMzIsMTMgQEAKICNkZWZpbmUgQ09ORklHX1NZU19URVhUX0JBU0UJCTB4MTEwMDAwMDAKICNkZWZpbmUgQ09ORklHX1JFU0VUX1ZFQ1RPUl9BRERSRVNTCTB4MTEwYmZmZmMKICNlbmRpZgorI2lmZGVmIENPTkZJR19OQU5EX1NFQ0JPT1QKKyNkZWZpbmUgQ09ORklHX1JBTUJPT1RfTkFORAorI2RlZmluZSBDT05GSUdfU1lTX1JBTUJPT1QKKyNkZWZpbmUgQ09ORklHX1NZU19FWFRSQV9FTlZfUkVMT0MKKyNkZWZpbmUgQ09ORklHX1NZU19URVhUX0JBU0UJCTB4MTEwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1JFU0VUX1ZFQ1RPUl9BRERSRVNTCTB4MTEwYmZmZmMKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX05BTkQKICNkZWZpbmUgQ09ORklHX1NQTApAQCAtMzk2LDcgKzQwMyw3IEBACiAJCQkJCQktIEdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQogI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfT0ZGU0VUCUNPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCiAKLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDI1NiAqIDEwMjQpIC8qIFJlc2VydmUgMjU2IGtCIGZvciBNb24qLworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoNzY4ICogMTAyNCkKICNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoMTAyNCAqIDEwMjQpCS8qIFJlc2VydmVkIGZvciBtYWxsb2MqLwogCiAvKiBTZXJpYWwgUG9ydCAqLwpAQCAtNTUxLDcgKzU1OCw3IEBACiAjZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCTB4MTAwMDAwCS8qIDFNQiAqLwogI2RlZmluZSBDT05GSUdfRU5WX1NFQ1RfU0laRQkweDEwMDAwCiAjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJMHgyMDAwCi0jZWxpZiBkZWZpbmVkKENPTkZJR19OQU5EKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTkFORCkgfHwgZGVmaW5lZChDT05GSUdfTkFORF9TRUNCT09UKQogI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05BTkQKICNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQlDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRQogI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkoKDc2OCAqIDEwMjQpICsgQ09ORklHX1NZU19OQU5EX0JMT0NLX1NJWkUpCkBAIC02OTYsNCArNzAzLDYgQEAKIAogI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQgQ09ORklHX1JBTUJPT1RDT01NQU5ECiAKKyNpbmNsdWRlIDxhc20vZnNsX3NlY3VyZV9ib290Lmg+CisKICNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvQzI5WFBDSUUuaCBiL2luY2x1ZGUvY29uZmlncy9DMjlYUENJRS5oCmluZGV4IDkyOTEzYzguLjllMTJmYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9DMjlYUENJRS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9DMjlYUENJRS5oCkBAIC0zMzgsNyArMzM4LDcgQEAKIAkJCQkJCS0gR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCiAjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQKIAotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoNTEyICogMTAyNCkKKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDc2OCAqIDEwMjQpCiAjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDIgKiAxMDI0ICogMTAyNCkKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9FVkI2NDI2MC5oIGIvaW5jbHVkZS9jb25maWdzL0VWQjY0MjYwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYzc1ZDkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jb25maWdzL0VWQjY0MjYwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MDYgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogSm9zaCBIdWJlciA8aHViZXJAbWNseC5jb20+LCBNaXNzaW9uIENyaXRpY2FsIExpbnV4LCBJbmMuCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotLyoKLSAqIGJvYXJkL2NvbmZpZy5oIC0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBib2FyZCBzcGVjaWZpYwotICovCi0KLSNpZm5kZWYgX19DT05GSUdfSAotI2RlZmluZSBfX0NPTkZJR19ICi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8Z2FsaWxlby9jb3JlLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgIi4uL2JvYXJkL2V2YjY0MjYwL2xvY2FsLmgiCi0KLS8qCi0gKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwotICogKGVhc3kgdG8gY2hhbmdlKQotICovCi0KLSNkZWZpbmUgQ09ORklHX0VWQjY0MjYwCQkxCS8qIHRoaXMgaXMgYW4gRVZCNjQyNjAgYm9hcmQJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19HVF82NDI2eCAgICAgICAgR1RfNjQyNjAgLyogd2l0aCBhIDY0MjYwIHN5c3RlbSBjb250cm9sbGVyICovCi0KLSNkZWZpbmUJQ09ORklHX1NZU19URVhUX0JBU0UJMHhmZmYwMDAwMAotI2RlZmluZQlDT05GSUdfU1lTX0xEU0NSSVBUCSJib2FyZC9ldmI2NDI2MC91LWJvb3QubGRzIgotCi0jZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMzg0MDAJLyogY29uc29sZSBiYXVkcmF0ZSA9IDM4NDAwCSovCi0KLSN1bmRlZglDT05GSUdfRUNDCQkJLyogZW5hYmxlIEVDQyBzdXBwb3J0ICovCi0vKiAjZGVmaW5lIENPTkZJR19FVkI2NDI2MF83NTBDWCAgMSAqLyAgICAgIC8qIFN1cHBvcnQgdGhlIEVWQi02NDI2MC03NTBDWCBCb2FyZCAqLwotCi0vKiB3aGljaCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgdG8gY2FsbCBmb3IgdGhpcyBib2FyZCAqLwotI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IJMQotI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9GIDEKLQotI2lmbmRlZiBDT05GSUdfRVZCNjQyNjBfNzUwQ1gKLSNkZWZpbmUgQ09ORklHX1NZU19CT0FSRF9OQU1FCQkiRVZCNjQyNjAiCi0jZWxzZQotI2RlZmluZSBDT05GSUdfU1lTX0JPQVJEX05BTUUgICAgICAgICAiRVZCNjQyNjAtNzUwQ1giCi0jZW5kaWYKLQotI2RlZmluZSBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgbGV0IHlvdSBzZWxlY3Qgd2hhdCBzZXJpYWwgeW91IHdhbnQgdG8gdXNlCi0gKiBmb3IgeW91ciBjb25zb2xlIGRyaXZlci4KLSAqCi0gKiB3aGF0IHRvIGRvOgotICogdG8gdXNlIHRoZSBEVUFSVCwgdW5kZWYgQ09ORklHX01QU0MuICBJZiB5b3UgaGF2ZSBoYWNrZWQgYSBzZXJpYWwKLSAqIGNhYmxlIG9udG8gdGhlIHNlY29uZCBEVUFSVCBjaGFubmVsLCBjaGFuZ2UgdGhlIENPTkZJR19TWVNfRFVBUlQgcG9ydCBmcm9tIDEKLSAqIHRvIDAgYmVsb3cuCi0gKgotICogdG8gdXNlIHRoZSBNUFNDLCAjZGVmaW5lIENPTkZJR19NUFNDLiAgSWYgeW91IGhhdmUgd2lyZWQgdXAgYW5vdGhlcgotICogbXBzYyBjaGFubmVsLCBjaGFuZ2UgQ09ORklHX01QU0NfUE9SVCB0byB0aGUgZGVzaXJlZCB2YWx1ZS4KLSAqLwotI2RlZmluZQlDT05GSUdfTVBTQwotI2RlZmluZSBDT05GSUdfTVBTQ19QT1JUCTAKLQotCi0vKiBkZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCB0byBlbmFibGUgR1QgTUFDIGZpbHRlcmluZyAqLwotI2RlZmluZSBDT05GSUdfR1RfVVNFX01BQ19IQVNIX1RBQkxFCi0KLSN1bmRlZiBDT05GSUdfRVRIRVJfUE9SVF9NSUkJLyogdXNlIFJNSUkgKi8KLQotI2lmIDEKLSNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQktMQkvKiBhdXRvYm9vdCBkaXNhYmxlZAkJKi8KLSNlbHNlCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkvKiBhdXRvYm9vdCBhZnRlciA1IHNlY29uZHMJKi8KLSNlbmRpZgotI2RlZmluZSBDT05GSUdfWkVST19CT09UREVMQVlfQ0hFQ0sKLQotI3VuZGVmCUNPTkZJR19CT09UQVJHUwotI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJCQkJCQkgICAgIFwKLQkiYm9vdHAgJiYgIgkJCQkJCSAgICAgXAotCSJzZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PSRzZXJ2ZXJpcDokcm9vdHBhdGggIiBcCi0JImlwPSRpcGFkZHI6JHNlcnZlcmlwOiRnYXRld2F5aXA6IiBcCi0JIiRuZXRtYXNrOiRob3N0bmFtZTpldGgwOm5vbmU7ICYmICIgXAotCSJib290bSIKLQotI2RlZmluZSBDT05GSUdfTE9BRFNfRUNITwkwCS8qIGVjaG8gb2ZmIGZvciBzZXJpYWwgZG93bmxvYWQJKi8KLSNkZWZpbmUJQ09ORklHX1NZU19MT0FEU19CQVVEX0NIQU5HRQkJLyogYWxsb3cgYmF1ZHJhdGUgY2hhbmdlcwkqLwotCi0jdW5kZWYJQ09ORklHX1dBVENIRE9HCQkJLyogd2F0Y2hkb2cgZGlzYWJsZWQJCSovCi0jdW5kZWYJQ09ORklHX0FMVElWRUMgICAgICAgICAgICAgICAgICAvKiB1bmRlZiB0byBkaXNhYmxlICAgICAgICAgICAgICovCi0KLS8qCi0gKiBCT09UUCBvcHRpb25zCi0gKi8KLSNkZWZpbmUgQ09ORklHX0JPT1RQX1NVQk5FVE1BU0sKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0dBVEVXQVkKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0hPU1ROQU1FCi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09UUEFUSAotI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFCi0KLQotLyoKLSAqIENvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uLgotICovCi0jaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+Ci0KLSNkZWZpbmUgQ09ORklHX0NNRF9BU0tFTlYKLQotCi0vKgotICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwotICovCi0jZGVmaW5lCUNPTkZJR19TWVNfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKLSNkZWZpbmUJQ09ORklHX1NZU19DQlNJWkUJMTAyNAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KLSNlbHNlCi0jZGVmaW5lCUNPTkZJR19TWVNfQ0JTSVpFCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KLSNlbmRpZgotI2RlZmluZQlDT05GSUdfU1lTX1BCU0laRSAoQ09ORklHX1NZU19DQlNJWkUrc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUJQ09ORklHX1NZU19NQVhBUkdTCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLwotI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCUNPTkZJR19TWVNfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQJMHgwMDQwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCi0jZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCTB4MDBDMDAwMDAJLyogNCAuLi4gMTIgTUIgaW4gRFJBTQkqLwotCi0jZGVmaW5lCUNPTkZJR19TWVNfTE9BRF9BRERSCQkweDAwMzAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzCSovCi0jZGVmaW5lIENPTkZJR19TWVNfQlVTX0NMSwkJMTAwMDAwMDAwCS8qIDEwMCBNSHoJCSovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCwgMjMwNDAwIH0KLQotI2lmZGVmIENPTkZJR19FVkI2NDI2MF83NTBDWAotI2RlZmluZSBDT05GSUdfNzUwQ1gKLSNkZWZpbmUgQ09ORklHX1NZU19CUk9LRU5fQ0wyCi0jZW5kaWYKLQotLyoKLSAqIExvdyBMZXZlbCBDb25maWd1cmF0aW9uIFNldHRpbmdzCi0gKiAoYWRkcmVzcyBtYXBwaW5ncywgcmVnaXN0ZXIgaW5pdGlhbCB2YWx1ZXMsIGV0Yy4pCi0gKiBZb3Ugc2hvdWxkIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIGlmIHlvdSBtYWtlIGNoYW5nZXMgaGVyZS4KLSAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX0FERFIJMHg0MDAwMDAwMAotI2RlZmluZQlDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUJMHgxMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCShDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUgLSBHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKLSNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9MT0NLCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU3RhcnQgYWRkcmVzc2VzIGZvciB0aGUgZmluYWwgbWVtb3J5IGNvbmZpZ3VyYXRpb24KLSAqIChTZXQgdXAgYnkgdGhlIHN0YXJ0dXAgY29kZSkKLSAqIFBsZWFzZSBub3RlIHRoYXQgQ09ORklHX1NZU19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCi0gKi8KLSNkZWZpbmUJQ09ORklHX1NZU19TRFJBTV9CQVNFCQkweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRQkJMHhmZmYwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX1JFU0VUX0FERFJFU1MJMHhmZmYwMDEwMAotI2RlZmluZQlDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uaXRvciAqLwotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQlDT05GSUdfU1lTX0ZMQVNIX0JBU0UKLSNkZWZpbmUJQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgbWFsbG9jICovCi0KLS8qIGFyZWFzIHRvIG1hcCBkaWZmZXJlbnQgdGhpbmdzIHdpdGggdGhlIEdUIGluIHBoeXNpY2FsIHNwYWNlICovCi0jZGVmaW5lIENPTkZJR19TWVNfRFJBTV9CQU5LUwkJNAotI2RlZmluZSBDT05GSUdfU1lTX0RGTF9HVF9SRUdTCQkweDE0MDAwMDAwCS8qIGJvb3QgdGltZSBHVF9SRUdTICovCi0KLS8qIFdoYXQgdG8gcHV0IGluIHRoZSBiYXRzLiAqLwotI2RlZmluZSBDT05GSUdfU1lTX01JU0NfUkVHSU9OX0JBU0UJMHhmMDAwMDAwMAotCi0vKiBQZXJpcGhlcmFsIERldmljZSBzZWN0aW9uICovCi0jZGVmaW5lIENPTkZJR19TWVNfR1RfUkVHUwkJMHhmODAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0RFVl9CQVNFCQkweGZjMDAwMDAwCi0KLSNkZWZpbmUgQ09ORklHX1NZU19ERVYwX1NQQUNFCQlDT05GSUdfU1lTX0RFVl9CQVNFCi0jZGVmaW5lIENPTkZJR19TWVNfREVWMV9TUEFDRQkJKENPTkZJR19TWVNfREVWMF9TUEFDRSArIENPTkZJR19TWVNfREVWMF9TSVpFKQotI2RlZmluZSBDT05GSUdfU1lTX0RFVjJfU1BBQ0UJCShDT05GSUdfU1lTX0RFVjFfU1BBQ0UgKyBDT05GSUdfU1lTX0RFVjFfU0laRSkKLSNkZWZpbmUgQ09ORklHX1NZU19ERVYzX1NQQUNFCQkoQ09ORklHX1NZU19ERVYyX1NQQUNFICsgQ09ORklHX1NZU19ERVYyX1NJWkUpCi0KLSNkZWZpbmUgQ09ORklHX1NZU19ERVYwX1NJWkUJCSBfOE0gLyogZXZiNjQyNjAgc3JhbSAgQCAweGZjMDAuMDAwMCAqLwotI2RlZmluZSBDT05GSUdfU1lTX0RFVjFfU0laRQkJIF84TSAvKiBldmI2NDI2MCBydGMgICBAIDB4ZmM4MC4wMDAwICovCi0jZGVmaW5lIENPTkZJR19TWVNfREVWMl9TSVpFCQlfMTZNIC8qIGV2YjY0MjYwIGR1YXJ0IEAgMHhmZDAwLjAwMDAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19ERVYzX1NJWkUJCV8xNk0gLyogZXZiNjQyNjAgZmxhc2ggQCAweGZlMDAuMDAwMCAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfREVWMF9QQVIJCTB4MjAyMDUwOTMKLSNkZWZpbmUgQ09ORklHX1NZU19ERVYxX1BBUgkJMHhjZmNmZmZmZgotI2RlZmluZSBDT05GSUdfU1lTX0RFVjJfUEFSCQkweGMwMDU5YmQ0Ci0jZGVmaW5lIENPTkZJR19TWVNfOEJJVF9CT09UX1BBUgkweGMwMGI1ZTdjCi0jZGVmaW5lIENPTkZJR19TWVNfMzJCSVRfQk9PVF9QQVIJMHhjNGE4MjQxYwotCS8qICAgYyAgICA0ICAgIGEgICAgICA4ICAgICAyICAgICA0ICAgIDEgICAgICBjCQkqLwotCS8qIDMzIDIyfDIyMjJ8MjIgMjJ8MTExIDF8MTEgMTF8MSAxICB8ICAgIHwJCSovCi0JLyogMTAgOTh8NzY1NHwzMiAxMHw5ODcgNnw1NCAzMnwxIDA5OHw3IDY1NHwzIDIxMAkqLwotCS8qIDExfDAwfDAxMDB8MTAgMTB8MTAwfDAgMDB8MTAgMHwxMDAgMHwwMDEgMXwxMDAJKi8KLQkvKiAgM3wgMHwuLi4uIC4ufCAyfCA0IHwgIDAgfCAgNCB8ICA4ICB8ICAzICB8IDQJKi8KLQotI2lmIDAgLyogV3Jvbmc/PyBOVEwgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NUFBfQ09OVFJPTF8wCTB4NTM1NDE3MTcJLyogSW5pdEFjdCBFT1RbNF0gREJ1cnN0IFRDRW5bMV0gKi8KLQkJCQkJCS8qIERNQUFja1sxOjBdIEdOVDBbMTowXSAqLwotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX1NZU19NUFBfQ09OVFJPTF8wCTB4NTM1NDc3NzcJLyogSW5pdEFjdCBFT1RbNF0gREJ1cnN0IFRDRW5bMV0gKi8KLQkJCQkJCS8qIFJFUTBbMTowXSBHTlQwWzE6MF0gKi8KLSNlbmRpZgotI2RlZmluZSBDT05GSUdfU1lTX01QUF9DT05UUk9MXzEJMHg0NDAwOTkxMQkvKiBUQ0VuWzRdIFRDVGNudFs0XSBHUFBbMTM6MTJdICovCi0JCQkJCQkvKiBETUFSZXFbNF0gRE1BQWNrWzRdIFdETk1JIFdERSAqLwotI2lmIDAgLyogV3Jvbmc/PyBOVEwgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NUFBfQ09OVFJPTF8yCTB4NDAwOTE4MTgJLyogVENUY250WzBdIEdQUFsyMjoyMV0gQkNsa0luICovCi0JCQkJCQkvKiBETUFBY2tbMTowXSBHTlQxWzE6MF0gKi8KLSNlbHNlCi0jZGVmaW5lIENPTkZJR19TWVNfTVBQX0NPTlRST0xfMgkweDQwMDk4ODg4CS8qIFRDVGNudFswXSAqLwotCQkJCQkJLyogR1BQWzIyXSAoUlMyMzJJbnRCIG9yIFBDSTFJbnQpICovCi0JCQkJCQkvKiBHUFBbMjFdIChSUzMyM0ludEEpICovCi0JCQkJCQkvKiBCQ2xrSW4gKi8KLQkJCQkJCS8qIFJFUTFbMTowXSBHTlQxWzE6MF0gKi8KLSNlbmRpZgotCi0jaWYgMCAvKiBXcm9uZz8/IE5UTCAqLwotIyBkZWZpbmUgQ09ORklHX1NZU19NUFBfQ09OVFJPTF8zCTB4MDAwOTAwNjYJLyogR1BQWzMxOjI5XSBCQ2xrT3V0MCAqLwotCQkJCQkJLyogR1BQWzI3OjI2XSBJbnRbMTowXSAqLwotI2Vsc2UKLSMgZGVmaW5lIENPTkZJR19TWVNfTVBQX0NPTlRST0xfMwkweDIyMDkwMDY2ICAgICAgLyogTVJFUSBNR05UICovCi0JCQkJCQkvKiBHUFBbMjldICAgIChQQ0kxSW50KSAqLwotCQkJCQkJLyogQkNsa091dDAgKi8KLQkJCQkJCS8qIEdQUFsyN10gICAgKFBDSTBJbnQpICovCi0JCQkJCQkvKiBHUFBbMjZdICAgIChSdGNJbnQgb3IgUENJMUludCkgKi8KLQkJCQkJCS8qIENQVUludFsyNToyNF0gKi8KLSNlbmRpZgotCi0jIGRlZmluZSBDT05GSUdfU1lTX1NFUklBTF9QT1JUX01VWAkweDAwMDAwMTAyCS8qIDA9aGlaICAxPU1QU0MwIDI9RVRIIDAgYW5kIDIgUk1JSSAqLwotCi0jaWYgMCAvKiBXcm9uZz8/IC0gTlRMICovCi0jIGRlZmluZSBDT05GSUdfU1lTX0dQUF9MRVZFTF9DT05UUk9MCTB4MDAwMDAyYzYKLSNlbHNlCi0jIGRlZmluZSBDT05GSUdfU1lTX0dQUF9MRVZFTF9DT05UUk9MCTB4MmM2MDAwMDAJLyogMDAxMCAxMTAwIDAxMTAgMDAwMCAqLwotCQkJCQkJLyogZ3BwWzI5XSAqLwotCQkJCQkJLyogZ3BwWzI3OjI2XSAqLwotCQkJCQkJLyogZ3BwWzIyOjIxXSAqLwotCi0jIGRlZmluZSBDT05GSUdfU1lTX1NEUkFNX0NPTkZJRwkweGQ4ZTE4MjAwCS8qIDB4NDQ4ICovCi0JCQkJLyogaWRtYXMgdXNlIGJ1ZmZlciAxLDEKLQkJCQkgICBjb21tIHVzZSBidWZmZXIgMAotCQkJCSAgIHBjaSB1c2UgYnVmZmVyIDEsMQotCQkJCSAgIGNwdSB1c2UgYnVmZmVyIDAKLQkJCQkgICBub3JtYWwgbG9hZCAoc2VlIGFsc28gaWZkZWYgSFZMKQotCQkJCSAgIHN0YW5kYXJkIFNEUkFNIChzZWUgYWxzbyBpZmRlZiBSRUcpCi0JCQkJICAgbm9uIHN0YWdnZXJlZCByZWZyZXNoICovCi0JCQkJLyogMzE6MjYgIDI1IDIzICAyMCAxOSAxOCAxNiAqLwotCQkJCS8qIDExMDExMCAwMCAxMTEgMCAgMCAgMDAgMSAqLwotCQkJCS8qIHJlZnJlc2hfY291bnQ9MHgyMDAKLQkJCQkgICBwaGlzaWNhbCBpbnRlcmxlYXZpbmcgZGlzYWJsZQotCQkJCSAgIHZpcnR1YWwgaW50ZXJsZWF2aW5nIGVuYWJsZSAqLwotCQkJCS8qIDE1IDE0IDEzOjAgKi8KLQkJCQkvKiAxICAwICAweDIwMCAqLwotI2VuZGlmCi0KLSNkZWZpbmUgQ09ORklHX1NZU19EVUFSVF9JTwkJQ09ORklHX1NZU19ERVYyX1NQQUNFCi0jZGVmaW5lIENPTkZJR19TWVNfRFVBUlRfQ0hBTgkJMQkJLyogY2hhbm5lbCB0byB1c2UgZm9yIGNvbnNvbGUgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JTklUX0NIQU4xCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9DSEFOMgotCi0jZGVmaW5lIFNSQU1fQkFTRQkJQ09ORklHX1NZU19ERVYwX1NQQUNFCi0jZGVmaW5lIFNSQU1fU0laRQkJMHgwMDEwMDAwMAkJLyogMSBNQiBvZiBzcmFtICovCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUENJIHN0dWZmCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotI2RlZmluZSBQQ0lfSE9TVF9BREFQVEVSIDAgICAgICAgICAgICAgIC8qIGNvbmZpZ3VyZSBhciBwY2kgYWRhcHRlciAgICAgKi8KLSNkZWZpbmUgUENJX0hPU1RfRk9SQ0UgIDEgICAgICAgICAgICAgICAvKiBjb25maWd1cmUgYXMgcGNpIGhvc3QgICAgICAgICovCi0jZGVmaW5lIFBDSV9IT1NUX0FVVE8gICAyICAgICAgICAgICAgICAgLyogZGV0ZWN0ZWQgdmlhIGFyYml0ZXIgZW5hYmxlICAqLwotCi0jZGVmaW5lIENPTkZJR19QQ0kgICAgICAgICAgICAgICAgICAgICAgLyogaW5jbHVkZSBwY2kgc3VwcG9ydCAgICAgICAgICAqLwotI2RlZmluZSBDT05GSUdfUENJX0hPU1QgUENJX0hPU1RfRk9SQ0UgIC8qIHNlbGVjdCBwY2kgaG9zdCBmdW5jdGlvbiAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1BDSV9QTlAgICAgICAgICAgICAgICAgICAvKiBkbyBwY2kgcGx1Zy1hbmQtcGxheSAgICAgICAgICovCi0KLS8qIFBDSSBNRU1PUlkgTUFQIHNlY3Rpb24gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QQ0kwX01FTV9CQVNFCTB4ODAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0kwX01FTV9TSVpFCV8xMjhNCi0jZGVmaW5lIENPTkZJR19TWVNfUENJMV9NRU1fQkFTRQkweDg4MDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfUENJMV9NRU1fU0laRQlfMTI4TQotCi0jZGVmaW5lIENPTkZJR19TWVNfUENJMF8wX01FTV9TUEFDRQkoQ09ORklHX1NZU19QQ0kwX01FTV9CQVNFKQotI2RlZmluZSBDT05GSUdfU1lTX1BDSTFfMF9NRU1fU1BBQ0UJKENPTkZJR19TWVNfUENJMV9NRU1fQkFTRSkKLQotCi0vKiBQQ0kgSS9PIE1BUCBzZWN0aW9uICovCi0jZGVmaW5lIENPTkZJR19TWVNfUENJMF9JT19CQVNFCTB4ZmEwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0kwX0lPX1NJWkUJXzE2TQotI2RlZmluZSBDT05GSUdfU1lTX1BDSTFfSU9fQkFTRQkweGZiMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfUENJMV9JT19TSVpFCV8xNk0KLQotI2RlZmluZSBDT05GSUdfU1lTX1BDSTBfSU9fU1BBQ0UJKENPTkZJR19TWVNfUENJMF9JT19CQVNFKQotI2RlZmluZSBDT05GSUdfU1lTX1BDSTBfSU9fU1BBQ0VfUENJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0kxX0lPX1NQQUNFCShDT05GSUdfU1lTX1BDSTFfSU9fQkFTRSkKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0kxX0lPX1NQQUNFX1BDSQkweDAwMDAwMDAwCi0KLS8qCi0gKiBOUzE2NTUwIENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTAKLQotI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfUkVHX1NJWkUJLTQKLQotI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ0xLCQkzNjg2NDAwCi0KLSNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NPTTEJKENPTkZJR19TWVNfRFVBUlRfSU8gKyAwKQotI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ09NMgkoQ09ORklHX1NZU19EVUFSVF9JTyArIDB4MjApCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogSW5pdGlhbCBCQVQgbWFwcGluZ3MKLSAqLwotCi0vKiBOT1RFUzoKLSAqIDEpIEdVQVJERUQgYW5kIFdSSVRFX1RIUlUgbm90IGFsbG93ZWQgaW4gSUJBVFMKLSAqIDIpIENBQ0hFSU5ISUJJVCBhbmQgV1JJVEVUSFJPVUdIIG5vdCBhbGxvd2VkIHRvZ2V0aGVyIGluIHNhbWUgQkFUCi0gKi8KLQotLyogU0RSQU0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JQkFUMEwgKENPTkZJR19TWVNfU0RSQU1fQkFTRSB8IEJBVExfUFBfUlcgfCBCQVRMX0NBQ0hFSU5ISUJJVCkKLSNkZWZpbmUgQ09ORklHX1NZU19JQkFUMFUgKENPTkZJR19TWVNfU0RSQU1fQkFTRSB8IEJBVFVfQkxfMjU2TSB8IEJBVFVfVlMgfCBCQVRVX1ZQKQotI2RlZmluZSBDT05GSUdfU1lTX0RCQVQwTCAoQ09ORklHX1NZU19TRFJBTV9CQVNFIHwgQkFUTF9QUF9SVyB8IEJBVExfQ0FDSEVJTkhJQklUIHwgQkFUTF9HVUFSREVEU1RPUkFHRSkKLSNkZWZpbmUgQ09ORklHX1NZU19EQkFUMFUgQ09ORklHX1NZU19JQkFUMFUKLQotLyogaW5pdCByYW0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JQkFUMUwgIChDT05GSUdfU1lTX0lOSVRfUkFNX0FERFIgfCBCQVRMX1BQX1JXIHwgQkFUTF9NRU1DT0hFUkVOQ0UpCi0jZGVmaW5lIENPTkZJR19TWVNfSUJBVDFVICAoQ09ORklHX1NZU19JTklUX1JBTV9BRERSIHwgQkFUVV9CTF8xMjhLIHwgQkFUVV9WUyB8IEJBVFVfVlApCi0jZGVmaW5lIENPTkZJR19TWVNfREJBVDFMICBDT05GSUdfU1lTX0lCQVQxTAotI2RlZmluZSBDT05GSUdfU1lTX0RCQVQxVSAgQ09ORklHX1NZU19JQkFUMVUKLQotLyogUENJMCwgUENJMSBpbiBvbmUgQkFUICovCi0jZGVmaW5lIENPTkZJR19TWVNfSUJBVDJMIEJBVExfTk9fQUNDRVNTCi0jZGVmaW5lIENPTkZJR19TWVNfSUJBVDJVIENPTkZJR19TWVNfREJBVDJVCi0jZGVmaW5lIENPTkZJR19TWVNfREJBVDJMIChDT05GSUdfU1lTX1BDSTBfTUVNX0JBU0UgfCBCQVRMX0NBQ0hFSU5ISUJJVCB8IEJBVExfUFBfUlcgfCBCQVRMX0dVQVJERURTVE9SQUdFKQotI2RlZmluZSBDT05GSUdfU1lTX0RCQVQyVSAoQ09ORklHX1NZU19QQ0kwX01FTV9CQVNFIHwgQkFUVV9CTF8yNTZNIHwgQkFUVV9WUyB8IEJBVFVfVlApCi0KLS8qIEdUIHJlZ3MsIGJvb3Ryb20sIGFsbCB0aGUgZGV2aWNlcywgUENJIEkvTyAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lCQVQzTCAoQ09ORklHX1NZU19NSVNDX1JFR0lPTl9CQVNFIHwgQkFUTF9DQUNIRUlOSElCSVQgfCBCQVRMX1BQX1JXKQotI2RlZmluZSBDT05GSUdfU1lTX0lCQVQzVSAoQ09ORklHX1NZU19NSVNDX1JFR0lPTl9CQVNFIHwgQkFUVV9WUyB8IEJBVFVfVlAgfCBCQVRVX0JMXzI1Nk0pCi0jZGVmaW5lIENPTkZJR19TWVNfREJBVDNMIChDT05GSUdfU1lTX01JU0NfUkVHSU9OX0JBU0UgfCBCQVRMX0NBQ0hFSU5ISUJJVCB8IEJBVExfUFBfUlcgfCBCQVRMX0dVQVJERURTVE9SQUdFKQotI2RlZmluZSBDT05GSUdfU1lTX0RCQVQzVSBDT05GSUdfU1lTX0lCQVQzVQotCi0vKiBJMkMgc3BlZWQgYW5kIHNsYXZlIGFkZHJlc3MgKGZvciBjb21wYXRhYmlsaXR5KSBkZWZhdWx0cyAqLwotI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TUEVFRAk0MDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19JMkNfU0xBVkUJMHg3RgotCi0vKiBJMkMgYWRkcmVzc2VzIGZvciB0aGUgdHdvIERJTU0gU1BEIGNoaXBzICovCi0jaWZuZGVmIENPTkZJR19FVkI2NDI2MF83NTBDWAotI2RlZmluZSBESU1NMF9JMkNfQUREUgkweDU2Ci0jZGVmaW5lIERJTU0xX0kyQ19BRERSCTB4NTQKLSNlbHNlIC8qIENPTkZJR19FVkI2NDI2MF83NTBDWCAtIG9ubHkgaGFzIDEgRElNTSAqLwotI2RlZmluZSBESU1NMF9JMkNfQUREUiAgMHg1NAotI2RlZmluZSBESU1NMV9JMkNfQUREUgkweDU0Ci0jZW5kaWYKLQotLyoKLSAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKLSAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCi0gKiB0aGUgbWF4aW11bSBtYXBwZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gKi8KLSNkZWZpbmUJQ09ORklHX1NZU19CT09UTUFQU1oJCSg4PDwyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGTEFTSCBvcmdhbml6YXRpb24KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUwkyCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCSovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QJNjcJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19FWFRSQV9GTEFTSF9ERVZJQ0UJREVWSUNFMwkvKiBleHRyYSBmbGFzaCBhdCBkZXZpY2UgMyAqLwotI2RlZmluZSBDT05GSUdfU1lTX0VYVFJBX0ZMQVNIX1dJRFRICTQJLyogMzIgYml0ICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpICovCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKGluIG1zKSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0NGSQkJMQotCi0jZGVmaW5lCUNPTkZJR19FTlZfSVNfSU5fRkxBU0gJMQotI2RlZmluZQlDT05GSUdfRU5WX1NJWkUJCTB4MTAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNlY3RvciAqLwotI2RlZmluZSBDT05GSUdfRU5WX1NFQ1RfU0laRQkweDEwMDAwCi0jZGVmaW5lIENPTkZJR19FTlZfQUREUiAgICAoQ09ORklHX1NZU19GTEFTSF9CQVNFK0NPTkZJR19TWVNfTU9OSVRPUl9MRU4tQ09ORklHX0VOVl9TRUNUX1NJWkUpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENhY2hlIENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0NBQ0hFTElORV9TSVpFCTMyCS8qIEZvciBhbGwgTVBDNzR4eCBDUFVzCQkgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKLSNkZWZpbmUgQ09ORklHX1NZU19DQUNIRUxJTkVfU0hJRlQJNQkvKiBsb2cgYmFzZSAyIG9mIHRoZSBhYm92ZSB2YWx1ZSAqLwotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEwyQ1Igc2V0dXAgLS0gbWFrZSBzdXJlIHRoaXMgaXMgcmlnaHQgZm9yIHlvdXIgYm9hcmQhCi0gKiBsb29rIGluIGluY2x1ZGUvNzR4eF83eHguaCBmb3IgdGhlIGRlZmluZXMgdXNlZCBoZXJlCi0gKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0wyCi0KLSNpZmRlZiBDT05GSUdfNzUwQ1gKLSNkZWZpbmUgTDJfSU5JVAkJMAotI2Vsc2UKLSNkZWZpbmUgTDJfSU5JVAkJKEwyQ1JfTDJTSVpfMk0gfCBMMkNSX0wyQ0xLXzMgfCBMMkNSX0wyUkFNX0JVUlNUIHwgXAotCQkJIEwyQ1JfTDJPSF81IHwgTDJDUl9MMkNUTCB8IEwyQ1JfTDJXVCkKLSNlbmRpZgotCi0jZGVmaW5lIEwyX0VOQUJMRQkoTDJfSU5JVCB8IEwyQ1JfTDJFKQotCi0jZGVmaW5lIENPTkZJR19TWVNfQk9BUkRfQVNNX0lOSVQgICAgICAxCi0KLQotI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9GQURTODIzLmggYi9pbmNsdWRlL2NvbmZpZ3MvRkFEUzgyMy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGRlNGVhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY29uZmlncy9GQURTODIzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NzIgKzAsMCBAQAotIC8qCi0gICogQSBjb2xsZWN0aW9uIG9mIHN0cnVjdHVyZXMsIGFkZHJlc3NlcywgYW5kIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGgKLSAgKiB0aGUgTW90b3JvbGEgODYwVCBGQURTIGJvYXJkLiAgQ29waWVkIGZyb20gdGhlIE1CWCBzdHVmZi4KLSAgKiBNYWdudXMgRGFtbSBhZGRlZCBkZWZpbmVzIGZvciA4eHhyb20gYW5kIGV4dGVuZGVkIGJkX2luZm8uCi0gICogSGVsbXV0IEJ1Y2hzYmF1bSBhZGRlZCBiaXR2YWx1ZXMgZm9yIEJDU1J4Ci0gICoKLSAgKiBDb3B5cmlnaHQgKGMpIDE5OTggRGFuIE1hbGVrIChkbWFsZWtAamxjLm5ldCkKLSAgKi8KLQotLyoKLSAqIDE5OTktbm92LTI2OiBUaGUgRkFEUyBpcyB1c2luZyB0aGUgZm9sbG93aW5nIHBoeXNpY2FsIG1lbW9yeW1hcDoKLSAqCi0gKiBmZjAyMDAwMCAtPiBmZjAyZmZmZiA6IHBjbWNpYSAgICAgaW8gcmVtYXBwaW5nCi0gKiBmZjAxMDAwMCAtPiBmZjAxZmZmZiA6IEJDU1IgICAgICAgY29ubmVjdGVkIHRvIENTMSwgc2V0dXAgYnkgVS1Cb290Ci0gKiBmZjAwMDAwMCAtPiBmZjAwZmZmZiA6IElNQVAgICAgICAgaW50ZXJuYWwgaW4gdGhlIGNwdQotICogZTAwMDAwMDAgLT4gZjNmZmZmZmYgOiBwY21jaWEgICAgIG1lbW9yeSByZW1hcHBpbmcgYnkgbTh4eF9wY21jaWEKLSAqIGZlMDAwMDAwIC0+IGZlMWZmZmZmIDogZmxhc2ggICAgICBjb25uZWN0ZWQgdG8gQ1MwLCBzZXR1cCBieSBVLUJvb3QKLSAqIDAwMDAwMDAwIC0+IG5ubm5ubm5uIDogc2RyYW0vZHJhbSBzZXR1cCBieSBVLUJvb3QKLSovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19QQ01DSUFfSU9fQUREUgkweGZmMDIwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfUENNQ0lBX0lPX1NJWkUJMHgxMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX1BDTUNJQV9NRU1fQUREUgkweGUwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfUENNQ0lBX01FTV9TSVpFCTB4MTAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19JTU1SCQkweEZGMDAwMDAwCi0jZGVmaW5lCUNPTkZJR19TWVNfU0RSQU1fU0laRQkJKDQ8PDIwKSAvKiBzdGFuZGFyZCBGQURTIGhhcyA0TSAqLwotI2RlZmluZQlDT05GSUdfU1lTX1NEUkFNX0JBU0UJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQVNFCQkweDAyODAwMDAwCi0jZGVmaW5lIEJDU1JfQUREUgkJKCh1aW50KSAweGZmMDEwMDAwKQotI2RlZmluZSBGTEFTSF9CQVNFMF9QUkVMSU0JMHgwMjgwMDAwMAkvKiBGTEFTSCBiYW5rICMwCSovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIGJvYXJkL2NvbmZpZy5oIC0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBib2FyZCBzcGVjaWZpYwotICovCi0KLSNpZm5kZWYgX19DT05GSUdfSAotI2RlZmluZSBfX0NPTkZJR19ICi0KLSNkZWZpbmUJQ09ORklHX1NZU19URVhUX0JBU0UJMHhGRTAwMDAwMAotCi0jZGVmaW5lCUNPTkZJR19FVEhBRERSCQkwODowMDoyMjo1MDo3MDo2MwkvKiBFdGhlcm5ldCBhZGRyZXNzICovCi0jZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEJLyogT3ZlcndyaXRlIHRoZSBlbnZpcm9ubWVudCAqLwotCi0jZGVmaW5lIENPTkZJR19WSURFTwkJMQkvKiBUbyBlbmFibGUgdmlkZW8gY29udHJvbGxlciBzdXBwb3J0ICovCi0jZGVmaW5lIENPTkZJR19IQVJEX0kyQwkJMQkvKiBUbyBJMkMgd2l0aCBoYXJkd2FyZSBzdXBwb3J0ICovCi0jZGVmaW5lIENPTkZJR19TWVNfSTJDX1NQRUVECQk0MDAwMDAJLyogSTJDIHNwZWVkIGFuZCBzbGF2ZSBhZGRyZXNzICovCi0jZGVmaW5lIENPTkZJR19TWVNfSTJDX1NMQVZFCQkweDdGCi0KLS8qI2RlZmluZSBDT05GSUdfUENNQ0lBCQkxCS8gKiBUbyBlbmFibGUgUENNQ0lBIHN1cHBvcnQgKi8KLQotLyogVmlkZW8gcmVsYXRlZCAqLwotCi0jZGVmaW5lIENPTkZJR19WSURFT19MT0dPCQkJMQkvKiBTaG93IHRoZSBsb2dvICovCi0jZGVmaW5lIENPTkZJR19WSURFT19FTkNPREVSX0FENzE3NgkJMQkvKiBFbmFibGUgdGhpcyBlbmNvZGVyICovCi0jZGVmaW5lIENPTkZJR19WSURFT19FTkNPREVSX0FENzE3Nl9BRERSCTB4NTQJLyogRGVmYXVsdCBvbiBmYWRzICovCi0jZGVmaW5lIENPTkZJR19WSURFT19TSVpFCQkJKDIqMTAyNCoxMDI0KQotLyogI2RlZmluZSBDT05GSUdfVklERU9fQUREUiAoZ2QtPmJkLT5iaV9tZW1zaXplIC0gQ09ORklHX1ZJREVPX1NJWkUpIEZyYW1lIGJ1ZmZlciBhZGRyZXNzICovCi0KLS8qIFdpcmVsZXNzIDU2S2h6IDRQUE0ga2V5Ym9hcmQgb24gU01DeCAqLwotCi0vKiNkZWZpbmUgQ09ORklHX0tFWUJPQVJECQkxICovCi0jZGVmaW5lIENPTkZJR19XTF80UFBNX0tFWUJPQVJEX1NNQwkwCS8qIFNNQyB0byB1c2UgKDAgaW5kZXhlZCkgKi8KLQotLyoKLSAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCi0gKiAoZWFzeSB0byBjaGFuZ2UpCi0gKi8KLSNkZWZpbmUgQ09ORklHX01QQzgyMwkJMQotI2RlZmluZSBDT05GSUdfTVBDODIzRkFEUwkxCi0jZGVmaW5lIENPTkZJR19GQURTCQkxCi0KLSNkZWZpbmUJQ09ORklHXzh4eF9DT05TX1NNQzEJMQkvKiBDb25zb2xlIGlzIG9uIFNNQzEJCSovCi0jdW5kZWYJQ09ORklHXzh4eF9DT05TX1NNQzIKLSN1bmRlZglDT05GSUdfOHh4X0NPTlNfTk9ORQotI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAotCi0vKiBTZXQgdGhlIENQVSBzcGVlZCB0byA1ME1oeiBvbiB0aGUgRkFEUyAqLwotCi0jaWYgMAotI2RlZmluZSBNUEM4WFhfRkFDVAkxMAkJCS8qIE11bHRpcGx5IGJ5IDEwCQkqLwotI2RlZmluZSBNUEM4WFhfWElOCTUwMDAwMDAJCQkvKiA1IE1IeiBpbgkqLwotI2Vsc2UKLSNkZWZpbmUgTVBDOFhYX0ZBQ1QJMTAJCQkvKiBNdWx0aXBseSBieSAxMCAqLwotI2RlZmluZSBNUEM4WFhfWElOCTUwMDAwMDAJCQkvKiA1IE1IeiBpbiAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BMUFJDUl9NRgkoTVBDOFhYX0ZBQ1QtMSkgPDwgMjAJLyogRnJvbSAwIHRvIDQwOTUgKi8KLSNlbmRpZgotI2RlZmluZSBNUEM4WFhfSFogKChNUEM4WFhfWElOKSAqIChNUEM4WFhfRkFDVCkpCi0KLSNkZWZpbmUJQ09ORklHX0NMT0NLU19JTl9NSFoJMQkvKiBjbG9ja3MgcGFzc3NlZCB0byBMaW51eCBpbiBNSHogKi8KLQotI2lmIDEKLSNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkyCS8qIGF1dG9ib290IGFmdGVyIDIgc2Vjb25kcwkqLwotI2RlZmluZSBDT05GSUdfTE9BRFNfRUNITwkwCS8qIERvbnQgZWNob2VzIHJlY2VpdmVkIGNoYXJhY3RlcnMgKi8KLSNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCQkiIgotI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJCQkJCQkJXAotImJvb3RwIDsiCQkJCQkJCQkJXAotInNldGVudiBib290YXJncyBjb25zb2xlPXR0eTAgY29uc29sZT10dHlTMCAiCQkJCQlcCi0icm9vdD0vZGV2L25mcyBuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9ICIJCQkJXAotImlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfToke2hvc3RuYW1lfTpldGgwOm9mZiA7IglcCi0iYm9vdG0iCi0jZWxzZQotI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTAJLyogYXV0b2Jvb3QgZGlzYWJsZWQJCSovCi0jZW5kaWYKLQotI3VuZGVmCUNPTkZJR19XQVRDSERPRwkJCS8qIHdhdGNoZG9nIGRpc2FibGVkCQkqLwotCi0KLS8qCi0gKiBCT09UUCBvcHRpb25zCi0gKi8KLSNkZWZpbmUgQ09ORklHX0JPT1RQX1NVQk5FVE1BU0sKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0dBVEVXQVkKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0hPU1ROQU1FCi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09UUEFUSAotI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFCi0jZGVmaW5lIENPTkZJR19CT09UUF9TVUJORVRNQVNLCi0jZGVmaW5lIENPTkZJR19CT09UUF9HQVRFV0FZCi0jZGVmaW5lIENPTkZJR19CT09UUF9IT1NUTkFNRQotI2RlZmluZSBDT05GSUdfQk9PVFBfTklTRE9NQUlOCi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09UUEFUSAotI2RlZmluZSBDT05GSUdfQk9PVFBfRE5TCi0jZGVmaW5lIENPTkZJR19CT09UUF9ETlMyCi0jZGVmaW5lIENPTkZJR19CT09UUF9TRU5EX0hPU1ROQU1FCi0jZGVmaW5lIENPTkZJR19CT09UUF9OVFBTRVJWRVIKLSNkZWZpbmUgQ09ORklHX0JPT1RQX1RJTUVPRkZTRVQKLQotCi0vKgotICogQ29tbWFuZCBsaW5lIGNvbmZpZ3VyYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KLQotCi0vKgotICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwotICovCi0jZGVmaW5lCUNPTkZJR19TWVNfTE9OR0hFTFAJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCi0jZGVmaW5lCUNPTkZJR19TWVNfUFJPTVBUCQkiOj4iCQkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0CSovCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lCUNPTkZJR19TWVNfQ0JTSVpFCQkxMDI0CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLwotI2Vsc2UKLSNkZWZpbmUJQ09ORklHX1NZU19DQlNJWkUJCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KLSNlbmRpZgotI2RlZmluZQlDT05GSUdfU1lTX1BCU0laRQkJKENPTkZJR19TWVNfQ0JTSVpFK3NpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCi0jZGVmaW5lCUNPTkZJR19TWVNfTUFYQVJHUwkJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzCSovCi0jZGVmaW5lIENPTkZJR19TWVNfQkFSR1NJWkUJCUNPTkZJR19TWVNfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQJMHgwMDAwNDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCi0jZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCTB4MDEwMDAwMDAJLyogMCAuLi4gMTYgTUIgaW4gRFJBTQkqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfTE9BRF9BRERSCQkweDAwMTAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCi0KLS8qCi0gKiBMb3cgTGV2ZWwgQ29uZmlndXJhdGlvbiBTZXR0aW5ncwotICogKGFkZHJlc3MgbWFwcGluZ3MsIHJlZ2lzdGVyIGluaXRpYWwgdmFsdWVzLCBldGMuKQotICogWW91IHNob3VsZCBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBpZiB5b3UgbWFrZSBjaGFuZ2VzIGhlcmUuCi0gKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEludGVybmFsIE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lNTVJfU0laRQkJKCh1aW50KSg2NCAqIDEwMjQpKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIERQUkFNKQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fQUREUglDT05GSUdfU1lTX0lNTVIKLSNkZWZpbmUJQ09ORklHX1NZU19JTklUX1JBTV9TSVpFCTB4MkYwMAkvKiBTaXplIG9mIHVzZWQgYXJlYSBpbiBEUFJBTQkqLwotI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAkoQ09ORklHX1NZU19JTklUX1JBTV9TSVpFIC0gR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCi0jZGVmaW5lCUNPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU3RhcnQgYWRkcmVzc2VzIGZvciB0aGUgZmluYWwgbWVtb3J5IGNvbmZpZ3VyYXRpb24KLSAqIChTZXQgdXAgYnkgdGhlIHN0YXJ0dXAgY29kZSkKLSAqIFBsZWFzZSBub3RlIHRoYXQgQ09ORklHX1NZU19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCi0gKiBBbHNvIE5PVEUgdGhhdCBpdCBkb2Vzbid0IG1lYW4gU0RSQU0gLSBpdCBtZWFucyBNRU1PUlkuCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9TSVpFCQkoKHVpbnQpKDggKiAxMDI0ICogMTAyNCkpCS8qIG1heCA4TWJ5dGUgKi8KLSNpZiAwCi0jZGVmaW5lCUNPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSgyNTYgPDwgMTApCS8qIFJlc2VydmUgMjU2IGtCIGZvciBNb25pdG9yCSovCi0jZWxzZQotI2RlZmluZQlDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoNTEyIDw8IDEwKQkvKiBSZXNlcnZlIDUxMiBrQiBmb3IgTW9uaXRvcgkqLwotI2VuZGlmCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFCUNPTkZJR19TWVNfRkxBU0hfQkFTRQotI2RlZmluZQlDT05GSUdfU1lTX01BTExPQ19MRU4JCSgxMjggPDwgMTApCS8qIFJlc2VydmUgMTI4IGtCIGZvciBtYWxsb2MoKQkqLwotCi0vKgotICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQotICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKLSAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLSAqLwotI2RlZmluZQlDT05GSUdfU1lTX0JPT1RNQVBTWgkJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgJKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZMQVNIIG9yZ2FuaXphdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QJOAkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAJKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCi0KLSNkZWZpbmUJQ09ORklHX0VOVl9JU19JTl9GTEFTSAkxCi0jZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCQkweDAwMDQwMDAwCS8qIE9mZnNldCBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKi8KLSNkZWZpbmUJQ09ORklHX0VOVl9TSVpFCQkweDQwMDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCi0jZGVmaW5lCUNPTkZJR19TWVNfVVNFX1BQQ0VOVgkJCS8qIEVudmlyb25tZW50IGVtYmVkZGVkIGluIHNlY3QgLnBwY2VudiAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDYWNoZSBDb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19DQUNIRUxJTkVfU0laRQkxNgkvKiBGb3IgYWxsIE1QQzh4eCBDUFVzCQkJKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKLSNkZWZpbmUgQ09ORklHX1NZU19DQUNIRUxJTkVfU0hJRlQJNAkvKiBsb2cgYmFzZSAyIG9mIHRoZSBhYm92ZSB2YWx1ZQkqLwotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNZUENSIC0gU3lzdGVtIFByb3RlY3Rpb24gQ29udHJvbAkJCQkJMTEtOQotICogU1lQQ1IgY2FuIG9ubHkgYmUgd3JpdHRlbiBvbmNlIGFmdGVyIHJlc2V0IQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU29mdHdhcmUgJiBCdXMgTW9uaXRvciBUaW1lciBtYXgsIEJ1cyBNb25pdG9yIGVuYWJsZSwgU1cgV2F0Y2hkb2cgZnJlZXplCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKLSNkZWZpbmUgQ09ORklHX1NZU19TWVBDUgkoU1lQQ1JfU1dUQyB8IFNZUENSX0JNVCB8IFNZUENSX0JNRSB8IFNZUENSX1NXRiB8IFwKLQkJCSBTWVBDUl9TV0UgIHwgU1lQQ1JfU1dSSXwgU1lQQ1JfU1dQKQotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX1NZU19TWVBDUgkoU1lQQ1JfU1dUQyB8IFNZUENSX0JNVCB8IFNZUENSX0JNRSB8IFNZUENSX1NXRiB8IFNZUENSX1NXUCkKLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTSVVNQ1IgLSBTSVUgTW9kdWxlIENvbmZpZ3VyYXRpb24JCQkJCQkxMS02Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQQ01DSUEgY29uZmlnLiwgbXVsdGktZnVuY3Rpb24gcGluIHRyaS1zdGF0ZQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfU0lVTUNSCShTSVVNQ1JfREJHQzAwIHwgU0lVTUNSX0RCUEMwMCB8IFNJVU1DUl9NTFJDMDEpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRCU0NSIC0gVGltZSBCYXNlIFN0YXR1cyBhbmQgQ29udHJvbAkJCQkJMTEtMjYKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENsZWFyIFJlZmVyZW5jZSBJbnRlcnJ1cHQgU3RhdHVzLCBUaW1lYmFzZSBmcmVlemluZyBlbmFibGVkCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19UQlNDUgkoVEJTQ1JfUkVGQSB8IFRCU0NSX1JFRkIgfCBUQlNDUl9UQkUpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBJU0NSIC0gUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cyBhbmQgQ29udHJvbAkJMTEtMzEKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENsZWFyIFBlcmlvZGljIEludGVycnVwdCBTdGF0dXMsIEludGVycnVwdCBUaW1lciBmcmVlemluZyBlbmFibGVkCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QSVNDUgkoUElTQ1JfUFMgfCBQSVNDUl9QSVRGKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQTFBSQ1IgLSBQTEwsIExvdy1Qb3dlciwgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIJMTUtMzAKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFJlc2V0IFBMTCBsb2NrIHN0YXR1cyBzdGlja3kgYml0LCB0aW1lciBleHBpcmVkIHN0YXR1cyBiaXQgYW5kIHRpbWVyICAqCi0gKiBpbnRlcnJ1cHQgc3RhdHVzIGJpdCAtIGxlYXZlIFBMTCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgdW5jaGFuZ2VkICEKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BMUFJDUgkoUExQUkNSX1NQTFNTIHwgUExQUkNSX1RFWFBTIHwgUExQUkNSX1RNSVNUIHwgQ09ORklHX1NZU19QTFBSQ1JfTUYpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNDQ1IgLSBTeXN0ZW0gQ2xvY2sgYW5kIHJlc2V0IENvbnRyb2wgUmVnaXN0ZXIJCTE1LTI3Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTZXQgY2xvY2sgb3V0cHV0LCB0aW1lYmFzZSBhbmQgUlRDIHNvdXJjZSBhbmQgZGl2aWRlciwKLSAqIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHNvbWUgb3RoZXIgaW50ZXJuYWwgY2xvY2tzCi0gKi8KLSNkZWZpbmUgU0NDUl9NQVNLCVNDQ1JfRUJERjExCi0jZGVmaW5lIENPTkZJR19TWVNfU0NDUiAgICAgICAoU0NDUl9UQlMgICAgIHwgXAotCQkJCVNDQ1JfQ09NMDAgICB8IFNDQ1JfREZTWU5DMDAgfCBTQ0NSX0RGQlJHMDAgIHwgXAotCQkJCVNDQ1JfREZOTDAwMCB8IFNDQ1JfREZOSDAwMCAgfCBTQ0NSX0RGTENEMDAwIHwgXAotCQkJCVNDQ1JfREZBTENEMDApCi0KLSAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0RFUgkJMAotCi0vKiBCZWNhdXNlIG9mIHRoZSB3YXkgdGhlIDg2MCBzdGFydHMgdXAgYW5kIGFzc2lnbnMgQ1MwIHRoZQotKiBlbnRpcmUgYWRkcmVzcyBzcGFjZSwgd2UgaGF2ZSB0byBzZXQgdGhlIG1lbW9yeSBjb250cm9sbGVyCi0qIGRpZmZlcmVudGx5LiAgTm9ybWFsbHksIHlvdSB3cml0ZSB0aGUgb3B0aW9uIHJlZ2lzdGVyCi0qIGZpcnN0LCBhbmQgdGhlbiBlbmFibGUgdGhlIGNoaXAgc2VsZWN0IGJ5IHdyaXRpbmcgdGhlCi0qIGJhc2UgcmVnaXN0ZXIuICBGb3IgQ1MwLCB5b3UgbXVzdCB3cml0ZSB0aGUgYmFzZSByZWdpc3RlcgotKiBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlIG9wdGlvbiByZWdpc3Rlci4KLSovCi0KLS8qCi0gKiBJbml0IE1lbW9yeSBDb250cm9sbGVyOgotICoKLSAqIEJSMC8xIGFuZCBPUjAvMSAoRkxBU0gpCi0gKi8KLS8qIHRoZSBvdGhlciBDUzpzIGFyZSBkZXRlcm1pbmVkIGJ5IGxvb2tpbmcgYXQgcGFyYW1ldGVycyBpbiBCQ1NSeCAqLwotCi0jZGVmaW5lIEJDU1JfU0laRQkJKCh1aW50KSg2NCAqIDEwMjQpKQotCi0jZGVmaW5lIEZMQVNIX0JBU0UxX1BSRUxJTQkweDAwMDAwMDAwCS8qIEZMQVNIIGJhbmsgIzEJKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX1JFTUFQX09SX0FNCQkweDgwMDAwMDAwCS8qIE9SIGFkZHIgbWFzayAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BSRUxJTV9PUl9BTQkweEZGRTAwMDAwCS8qIE9SIGFkZHIgbWFzayAqLwotCi0vKiBGTEFTSCB0aW1pbmc6IEFDUyA9IDEwLCBUUkxYID0gMSwgQ1NOVCA9IDEsIFNDWSA9IDMsIEVIVFIgPSAwCSovCi0jZGVmaW5lIENPTkZJR19TWVNfT1JfVElNSU5HX0ZMQVNICShPUl9DU05UX1NBTSAgfCBPUl9BQ1NfRElWNCB8IE9SX0JJIHwgT1JfU0NZXzNfQ0xLIHwgT1JfVFJMWCkKLQotI2RlZmluZSBDT05GSUdfU1lTX09SMF9SRU1BUAkoQ09ORklHX1NZU19SRU1BUF9PUl9BTSAgfCBDT05GSUdfU1lTX09SX1RJTUlOR19GTEFTSCkKLSNkZWZpbmUgQ09ORklHX1NZU19PUjBfUFJFTElNCShDT05GSUdfU1lTX1BSRUxJTV9PUl9BTSB8IENPTkZJR19TWVNfT1JfVElNSU5HX0ZMQVNIKSAgIC8qIDEgTWJ5dGUgdW50aWwgZGV0ZWN0ZWQgYW5kIG9ubHkgMSBNYnl0ZSBpcyBuZWVkZWQqLwotI2RlZmluZSBDT05GSUdfU1lTX0JSMF9QUkVMSU0JKChGTEFTSF9CQVNFMF9QUkVMSU0gJiBCUl9CQV9NU0spIHwgQlJfViApCi0KLS8qIEJDU1J4IC0gQm9hcmQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVycyAqLwotI2RlZmluZSBDT05GSUdfU1lTX09SMV9SRU1BUAlDT05GSUdfU1lTX09SMF9SRU1BUAotI2RlZmluZSBDT05GSUdfU1lTX09SMV9QUkVMSU0JMHhmZmZmODExMAkJCQkJCQkJCS8qIDY0S2J5dGUgYWRkcmVzcyBzcGFjZSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JSMV9QUkVMSU0JKChCQ1NSX0FERFIpIHwgQlJfViApCi0KLQotLyoKLSAqIE1lbW9yeSBQZXJpb2RpYyBUaW1lciBQcmVzY2FsZXIKLSAqLwotCi0vKiBwZXJpb2RpYyB0aW1lciBmb3IgcmVmcmVzaCAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BTVJfUFRBCQk5NwkJLyogc3RhcnQgd2l0aCBkaXZpZGVyIGZvciAxMDAgTUh6CSovCi0KLS8qIHJlZnJlc2ggcmF0ZSAxNS42IHVzICg9IDY0IG1zIC8gNEsgPSA2Mi40IC8gcXVhZCBidXJzdHMpIGZvciA8PSAxMjggTUJpdAkqLwotI2RlZmluZSBDT05GSUdfU1lTX01QVFBSXzJCS180SwlNUFRQUl9QVFBfRElWMTYJCS8qIHNldHRpbmcgZm9yIDIgYmFua3MJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NUFRQUl8xQktfNEsJTVBUUFJfUFRQX0RJVjMyCQkvKiBzZXR0aW5nIGZvciAxIGJhbmsJKi8KLQotLyogcmVmcmVzaCByYXRlIDcuOCB1cyAoPSA2NCBtcyAvIDhLID0gMzEuMiAvIHF1YWQgYnVyc3RzKSBmb3IgMjU2IE1CaXQJCSovCi0jZGVmaW5lIENPTkZJR19TWVNfTVBUUFJfMkJLXzhLCU1QVFBSX1BUUF9ESVY4CQkvKiBzZXR0aW5nIGZvciAyIGJhbmtzCSovCi0jZGVmaW5lIENPTkZJR19TWVNfTVBUUFJfMUJLXzhLCU1QVFBSX1BUUF9ESVYxNgkJLyogc2V0dGluZyBmb3IgMSBiYW5rCSovCi0KLS8qCi0gKiBNQU1SIHNldHRpbmdzIGZvciBTRFJBTQotICovCi0KLS8qIDggY29sdW1uIFNEUkFNICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFNUl84Q09MCSgoQ09ORklHX1NZU19NQU1SX1BUQSA8PCBNQU1SX1BUQV9TSElGVCkgIHwgTUFNUl9QVEFFCSAgICB8CVwKLQkJCSBNQU1SX0FNQV9UWVBFXzAgfCBNQU1SX0RTQV8xX0NZQ0wgfCBNQU1SX0cwQ0xBX0ExMSB8CVwKLQkJCSBNQU1SX1JMRkFfMVgJIHwgTUFNUl9XTEZBXzFYCSAgIHwgTUFNUl9UTEZBXzRYKQotLyogOSBjb2x1bW4gU0RSQU0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQU1SXzlDT0wJKChDT05GSUdfU1lTX01BTVJfUFRBIDw8IE1BTVJfUFRBX1NISUZUKSAgfCBNQU1SX1BUQUUJICAgIHwJXAotCQkJIE1BTVJfQU1BX1RZUEVfMSB8IE1BTVJfRFNBXzFfQ1lDTCB8IE1BTVJfRzBDTEFfQTEwIHwJXAotCQkJIE1BTVJfUkxGQV8xWAkgfCBNQU1SX1dMRkFfMVgJICAgfCBNQU1SX1RMRkFfNFgpCi0KLSNkZWZpbmUgQ09ORklHX1NZU19NQU1SCQkweDEzYTAxMTE0Ci0KLS8qIHZhbHVlcyBhY2NvcmRpbmcgdG8gdGhlIG1hbnVhbCAqLwotCi0jZGVmaW5lCUJDU1IwCQkJKCh1aW50KSAoQkNTUl9BRERSICsgMDApKQotI2RlZmluZQlCQ1NSMQkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MDQpKQotI2RlZmluZQlCQ1NSMgkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MDgpKQotI2RlZmluZQlCQ1NSMwkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MGMpKQotI2RlZmluZQlCQ1NSNAkJCSgodWludCkgKEJDU1JfQUREUiArIDB4MTApKQotCi0vKiBGQURTIGJpdHZhbHVlcyBieSBIZWxtdXQgQnVjaHNiYXVtCi0gKiBzZWUgTVBDOHh4QURTIFVzZXIncyBNYW51YWwgZm9yIGEgcHJvcGVyIGRlc2NyaXB0aW9uCi0gKiBvZiB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZXMKLSAqLwotCi0jZGVmaW5lIEJDU1IwX0VSQiAgICAgICAoKHVpbnQpMHg4MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjBfSVAgICAgICAgICgodWludCkweDQwMDAwMDAwKQotI2RlZmluZSBCQ1NSMF9CRElTICAgICAgKCh1aW50KTB4MTAwMDAwMDApCi0jZGVmaW5lIEJDU1IwX0JQU19NQVNLICAoKHVpbnQpMHgwQzAwMDAwMCkKLSNkZWZpbmUgQkNTUjBfSVNCX01BU0sgICgodWludCkweDAxODAwMDAwKQotI2RlZmluZSBCQ1NSMF9EQkdDX01BU0sgKCh1aW50KTB4MDA2MDAwMDApCi0jZGVmaW5lIEJDU1IwX0RCUENfTUFTSyAoKHVpbnQpMHgwMDE4MDAwMCkKLSNkZWZpbmUgQkNTUjBfRUJERl9NQVNLICgodWludCkweDAwMDYwMDAwKQotCi0jZGVmaW5lIEJDU1IxX0ZMQVNIX0VOICAgICAgICAgICAoKHVpbnQpMHg4MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfRFJBTV9FTiAgICAgICAgICAgICgodWludCkweDQwMDAwMDAwKQotI2RlZmluZSBCQ1NSMV9FVEhFTiAgICAgICAgICAgICAgKCh1aW50KTB4MjAwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0lSREVOICAgICAgICAgICAgICAoKHVpbnQpMHgxMDAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfRkxBU0hfQ0ZHX0VOICAgICAgICgodWludCkweDA4MDAwMDAwKQotI2RlZmluZSBCQ1NSMV9DTlRfUkVHX0VOX1BST1RFQ1QgKCh1aW50KTB4MDQwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0JDU1JfRU4gICAgICAgICAgICAoKHVpbnQpMHgwMjAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfUlMyMzJFTl8xICAgICAgICAgICgodWludCkweDAxMDAwMDAwKQotI2RlZmluZSBCQ1NSMV9QQ0NFTiAgICAgICAgICAgICAgKCh1aW50KTB4MDA4MDAwMDApCi0jZGVmaW5lIEJDU1IxX1BDQ1ZDQzAgICAgICAgICAgICAoKHVpbnQpMHgwMDQwMDAwMCkKLSNkZWZpbmUgQkNTUjFfUENDVlBQX01BU0sgICAgICAgICgodWludCkweDAwMzAwMDAwKQotI2RlZmluZSBCQ1NSMV9EUkFNX0hBTEZfV09SRCAgICAgKCh1aW50KTB4MDAwODAwMDApCi0jZGVmaW5lIEJDU1IxX1JTMjMyRU5fMiAgICAgICAgICAoKHVpbnQpMHgwMDA0MDAwMCkKLSNkZWZpbmUgQkNTUjFfU0RSQU1fRU4gICAgICAgICAgICgodWludCkweDAwMDIwMDAwKQotI2RlZmluZSBCQ1NSMV9QQ0NWQ0MxICAgICAgICAgICAgKCh1aW50KTB4MDAwMTAwMDApCi0KLSNkZWZpbmUgQkNTUjJfRkxBU0hfUERfTUFTSyAgICAgICgodWludCkweEYwMDAwMDAwKQotI2RlZmluZSBCQ1NSMl9GTEFTSF9QRF9TSElGVAkgMjgKLSNkZWZpbmUgQkNTUjJfRFJBTV9QRF9NQVNLICAgICAgICgodWludCkweDA3ODAwMDAwKQotI2RlZmluZSBCQ1NSMl9EUkFNX1BEX1NISUZUICAgICAgMjMKLSNkZWZpbmUgQkNTUjJfRVhUVE9MSV9NQVNLICAgICAgICgodWludCkweDAwNzgwMDAwKQotI2RlZmluZSBCQ1NSMl9EQlJFVk5SX01BU0sgICAgICAgKCh1aW50KTB4MDAwMzAwMDApCi0KLSNkZWZpbmUgQkNTUjNfREJJRF9NQVNLICAgICAgICAgICgodXNob3J0KTB4MzgwMCkKLSNkZWZpbmUgQkNTUjNfQ05UX1JFR19FTl9QUk9URUNUICgodXNob3J0KTB4MDQwMCkKLSNkZWZpbmUgQkNTUjNfQlJFVk5SMCAgICAgICAgICAgICgodXNob3J0KTB4MDA4MCkKLSNkZWZpbmUgQkNTUjNfRkxBU0hfUERfTUFTSyAgICAgICgodXNob3J0KTB4MDA3MCkKLSNkZWZpbmUgQkNTUjNfQlJFVk4xICAgICAgICAgICAgICgodXNob3J0KTB4MDAwOCkKLSNkZWZpbmUgQkNTUjNfQlJFVk4yX01BU0sgICAgICAgICgodXNob3J0KTB4MDAwMykKLQotI2RlZmluZSBCQ1NSNF9FVEhMT09QICAgICAgICAgICAgKCh1aW50KTB4ODAwMDAwMDApCi0jZGVmaW5lIEJDU1I0X1RGUExETCAgICAgICAgICAgICAoKHVpbnQpMHg0MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjRfVFBTUUVMICAgICAgICAgICAgICgodWludCkweDIwMDAwMDAwKQotI2RlZmluZSBCQ1NSNF9TSUdOQUxfTEFNUCAgICAgICAgKCh1aW50KTB4MTAwMDAwMDApCi0jaWZkZWYgQ09ORklHX01QQzgyMwotI2RlZmluZSBCQ1NSNF9VU0JfRU4gICAgICAgICAgICAgKCh1aW50KTB4MDgwMDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzgyMyAqLwotI2lmZGVmIENPTkZJR19NUEM4NjBTQVIKLSNkZWZpbmUgQkNTUjRfVVRPUElBX0VOICAgICAgICAgICgodWludCkweDA4MDAwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4NjBTQVIgKi8KLSNpZmRlZiBDT05GSUdfTVBDODYwVAotI2RlZmluZSBCQ1NSNF9GRVRIX0VOICAgICAgICAgICAgKCh1aW50KTB4MDgwMDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzg2MFQgKi8KLSNpZmRlZiBDT05GSUdfTVBDODIzCi0jZGVmaW5lIEJDU1I0X1VTQl9TUEVFRCAgICAgICAgICAoKHVpbnQpMHgwNDAwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODIzICovCi0jaWZkZWYgQ09ORklHX01QQzg2MFQKLSNkZWZpbmUgQkNTUjRfRkVUSENGRzAgICAgICAgICAgICgodWludCkweDA0MDAwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4NjBUICovCi0jaWZkZWYgQ09ORklHX01QQzgyMwotI2RlZmluZSBCQ1NSNF9WQ0NPICAgICAgICAgICAgICAgKCh1aW50KTB4MDIwMDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzgyMyAqLwotI2lmZGVmIENPTkZJR19NUEM4NjBUCi0jZGVmaW5lIEJDU1I0X0ZFVEhGREUgICAgICAgICAgICAoKHVpbnQpMHgwMjAwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODYwVCAqLwotI2lmZGVmIENPTkZJR19NUEM4MjMKLSNkZWZpbmUgQkNTUjRfVklERU9fT04gICAgICAgICAgICgodWludCkweDAwODAwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4MjMgKi8KLSNpZmRlZiBDT05GSUdfTVBDODIzCi0jZGVmaW5lIEJDU1I0X1ZET19FS1RfQ0xLX0VOICAgICAoKHVpbnQpMHgwMDQwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODIzICovCi0jaWZkZWYgQ09ORklHX01QQzg2MFQKLSNkZWZpbmUgQkNTUjRfRkVUSENGRzEgICAgICAgICAgICgodWludCkweDAwNDAwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4NjBUICovCi0jaWZkZWYgQ09ORklHX01QQzgyMwotI2RlZmluZSBCQ1NSNF9WSURFT19SU1QgICAgICAgICAgKCh1aW50KTB4MDAyMDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzgyMyAqLwotI2lmZGVmIENPTkZJR19NUEM4NjBUCi0jZGVmaW5lIEJDU1I0X0ZFVEhSU1QgICAgICAgICAgICAoKHVpbnQpMHgwMDIwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODYwVCAqLwotI2lmZGVmIENPTkZJR19NUEM4MjMKLSNkZWZpbmUgQkNTUjRfTU9ERU1fRU4gICAgICAgICAgICgodWludCkweDAwMTAwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4MjMgKi8KLSNpZmRlZiBDT05GSUdfTVBDODIzCi0jZGVmaW5lIEJDU1I0X0RBVEFfVk9JQ0UgICAgICAgICAoKHVpbnQpMHgwMDA4MDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODIzICovCi0jaWZkZWYgQ09ORklHX01QQzg1MAotI2RlZmluZSBCQ1NSNF9EQVRBX1ZPSUNFICAgICAgICAgKCh1aW50KTB4MDAwODAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzg1MCAqLwotCi0jZGVmaW5lIENPTkZJR19EUkFNXzUwTUhaCQkxCi0jZGVmaW5lIENPTkZJR19TRFJBTV81ME1IWgotCi0vKiBXZSBkb24ndCB1c2UgdGhlIDgyNTkuCi0qLwotI2RlZmluZSBOUl84MjU5X0lOVFMJMAotCi0vKgotICogTVBDOHh4IENQTSBPcHRpb25zCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NDQ19FTkVUIDEKLSNkZWZpbmUgQ09ORklHX1NDQzJfRU5FVCAxCi0jdW5kZWYgIENPTkZJR19GRUNfRU5FVAotI3VuZGVmICBDT05GSUdfQ1BNX0lJQwotI3VuZGVmICBDT05GSUdfVUNPREVfUEFUQ0gKLQotI2RlZmluZSBDT05GSUdfRElTS19TUElOVVBfVElNRSAxMDAwMDAwCi0KLS8qIFBDTUNJQSBjb25maWd1cmF0aW9uICovCi0KLSNkZWZpbmUgUENNQ0lBX01BWF9TTE9UUyAgICAxCi0KLSNpZmRlZiBDT05GSUdfTVBDODYwCi0jZGVmaW5lIFBDTUNJQV9TTE9UX0EgMQotI2VuZGlmCi0KLSNkZWZpbmUgQ09ORklHX1NZU19EQVVHSFRFUkJPQVJECi0KLSNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvRkFEUzg1MFNBUi5oIGIvaW5jbHVkZS9jb25maWdzL0ZBRFM4NTBTQVIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ4NDYwYi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvRkFEUzg1MFNBUi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDE1ICswLDAgQEAKLSAvKgotICAqIEEgY29sbGVjdGlvbiBvZiBzdHJ1Y3R1cmVzLCBhZGRyZXNzZXMsIGFuZCB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoCi0gICogdGhlIE1vdG9yb2xhIDg2MFQgRkFEUyBib2FyZC4gIENvcGllZCBmcm9tIHRoZSBNQlggc3R1ZmYuCi0gICogTWFnbnVzIERhbW0gYWRkZWQgZGVmaW5lcyBmb3IgOHh4cm9tIGFuZCBleHRlbmRlZCBiZF9pbmZvLgotICAqIEhlbG11dCBCdWNoc2JhdW0gYWRkZWQgYml0dmFsdWVzIGZvciBCQ1NSeAotICAqCi0gICogQ29weXJpZ2h0IChjKSAxOTk4IERhbiBNYWxlayAoZG1hbGVrQGpsYy5uZXQpCi0gICovCi0KLS8qCi0gKiAxOTk5LW5vdi0yNjogVGhlIEZBRFMgaXMgdXNpbmcgdGhlIGZvbGxvd2luZyBwaHlzaWNhbCBtZW1vcnltYXA6Ci0gKgotICogZmYwMjAwMDAgLT4gZmYwMmZmZmYgOiBwY21jaWEKLSAqIGZmMDEwMDAwIC0+IGZmMDFmZmZmIDogQkNTUiAgICAgICBjb25uZWN0ZWQgdG8gQ1MxLCBzZXR1cCBieSA4eHhyb20KLSAqIGZmMDAwMDAwIC0+IGZmMDBmZmZmIDogSU1BUCAgICAgICBpbnRlcm5hbCBpbiB0aGUgY3B1Ci0gKiBmZTAwMDAwMCAtPiBmZm5ubm5ubiA6IGZsYXNoICAgICAgY29ubmVjdGVkIHRvIENTMCwgc2V0dXAgYnkgOHh4cm9tCi0gKiAwMDAwMDAwMCAtPiBubm5ubm5ubiA6IHNkcmFtL2RyYW0gc2V0dXAgYnkgOHh4cm9tCi0gKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogYm9hcmQvY29uZmlnLmggLSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJvYXJkIHNwZWNpZmljCi0gKi8KLQotI2lmbmRlZiBfX0NPTkZJR19ICi0jZGVmaW5lIF9fQ09ORklHX0gKLQotLyoKLSAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCi0gKiAoZWFzeSB0byBjaGFuZ2UpCi0gKi8KLSNkZWZpbmUgQ09ORklHX01QQzg1MAkJMQotI2RlZmluZSBDT05GSUdfTVBDODUwU0FSCTEKLSNkZWZpbmUgQ09ORklHX0ZBRFMJCQkxCi0KLSNkZWZpbmUJQ09ORklHX1NZU19URVhUX0JBU0UJMHhGRTAwMDAwMAotCi0jZGVmaW5lCUNPTkZJR184eHhfQ09OU19TTUMxCTEJLyogQ29uc29sZSBpcyBvbiBTTUMxCQkqLwotI3VuZGVmCUNPTkZJR184eHhfQ09OU19TTUMyCi0jdW5kZWYJQ09ORklHXzh4eF9DT05TX05PTkUKLSNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQk5NjAwCi0KLSNpZiAwCi0jZGVmaW5lIE1QQzhYWF9GQUNUCTEwCQkJCS8qIE11bHRpcGx5IGJ5IDEwCQkqLwotI2RlZmluZSBNUEM4WFhfWElOCTUwMDAwMDAwCQkvKiA1MCBNSHogaW4JKi8KLSNlbHNlCi0jZGVmaW5lIE1QQzhYWF9GQUNUCTEyCQkJCS8qIE11bHRpcGx5IGJ5IDEyICovCi0jZGVmaW5lIE1QQzhYWF9YSU4JNDAwMDAwMAkJCS8qIDQgTUh6IGluICovCi0jZW5kaWYKLSNkZWZpbmUgTVBDOFhYX0haICgoTVBDOFhYX1hJTikgKiAoTVBDOFhYX0ZBQ1QpKQotCi0jZGVmaW5lCUNPTkZJR19DTE9DS1NfSU5fTUhaCTEJLyogY2xvY2tzIHBhc3NzZWQgdG8gTGludXggaW4gTUh6ICovCi0KLSNpZiAxCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJLTEJLyogYXV0b2Jvb3QgZGlzYWJsZWQJCSovCi0jZWxzZQotI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTUJLyogYXV0b2Jvb3QgYWZ0ZXIgNSBzZWNvbmRzCSovCi0jZW5kaWYKLQotI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJImJvb3RtIDAyODgwMDAwIgkvKiBhdXRvYm9vdCBjb21tYW5kICovCi0jZGVmaW5lIENPTkZJR19CT09UQVJHUwkJIiAiCi0KLSN1bmRlZglDT05GSUdfV0FUQ0hET0cJCQkvKiB3YXRjaGRvZyBkaXNhYmxlZAkJKi8KLQotCi0vKgotICogQk9PVFAgb3B0aW9ucwotICovCi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09URklMRVNJWkUKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RQQVRICi0jZGVmaW5lIENPTkZJR19CT09UUF9HQVRFV0FZCi0jZGVmaW5lIENPTkZJR19CT09UUF9IT1NUTkFNRQotCi0KLS8qCi0gKiBDb21tYW5kIGxpbmUgY29uZmlndXJhdGlvbi4KLSAqLwotI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgotCi0KLS8qCi0gKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCi0gKi8KLSN1bmRlZglDT05GSUdfU1lTX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCi0jZGVmaW5lCUNPTkZJR19TWVNfUFJPTVBUCQkiOj4iCQkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0CSovCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lCUNPTkZJR19TWVNfQ0JTSVpFCTEwMjQJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCi0jZWxzZQotI2RlZmluZQlDT05GSUdfU1lTX0NCU0laRQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCi0jZW5kaWYKLSNkZWZpbmUJQ09ORklHX1NZU19QQlNJWkUJKENPTkZJR19TWVNfQ0JTSVpFK3NpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCi0jZGVmaW5lCUNPTkZJR19TWVNfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQlDT05GSUdfU1lTX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplCSovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4MDAwMDQwMDAJLyogbWVtdGVzdCB3b3JrcyBvbgkqLwotI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkweDAwODAwMDAwCS8qIDAgLi4uIDggTUIgaW4gRFJBTQkqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfTE9BRF9BRERSCQkweDAwMTAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCi0KLS8qCi0gKiBMb3cgTGV2ZWwgQ29uZmlndXJhdGlvbiBTZXR0aW5ncwotICogKGFkZHJlc3MgbWFwcGluZ3MsIHJlZ2lzdGVyIGluaXRpYWwgdmFsdWVzLCBldGMuKQotICogWW91IHNob3VsZCBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBpZiB5b3UgbWFrZSBjaGFuZ2VzIGhlcmUuCi0gKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEludGVybmFsIE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lNTVIJCQkweEZGMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfSU1NUl9TSVpFCQkoKHVpbnQpKDY0ICogMTAyNCkpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIERlZmluaXRpb25zIGZvciBpbml0aWFsIHN0YWNrIHBvaW50ZXIgYW5kIGRhdGEgYXJlYSAoaW4gRFBSQU0pCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9BRERSCUNPTkZJR19TWVNfSU1NUgotI2RlZmluZQlDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUJMHgyRjAwCS8qIFNpemUgb2YgdXNlZCBhcmVhIGluIERQUkFNCSovCi0jZGVmaW5lIENPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCShDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUgLSBHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKLSNkZWZpbmUJQ09ORklHX1NZU19JTklUX1NQX09GRlNFVAlDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTdGFydCBhZGRyZXNzZXMgZm9yIHRoZSBmaW5hbCBtZW1vcnkgY29uZmlndXJhdGlvbgotICogKFNldCB1cCBieSB0aGUgc3RhcnR1cCBjb2RlKQotICogUGxlYXNlIG5vdGUgdGhhdCBDT05GSUdfU1lTX1NEUkFNX0JBU0UgX211c3RfIHN0YXJ0IGF0IDAKLSAqIEFsc28gTk9URSB0aGF0IGl0IGRvZXNuJ3QgbWVhbiBTRFJBTSAtIGl0IG1lYW5zIE1FTU9SWS4KLSAqLwotI2RlZmluZQlDT05GSUdfU1lTX1NEUkFNX0JBU0UJCTB4MDAwMDAwMDAKLSNkZWZpbmUJQ09ORklHX1NZU19TRFJBTV9TSVpFCQkoNDw8MjApIC8qIHN0YW5kYXJkIEZBRFMgaGFzIDRNICovCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRQkJMHgwMjgwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1NJWkUJCSgodWludCkoOCAqIDEwMjQgKiAxMDI0KSkJLyogbWF4IDhNYnl0ZSAqLwotI2lmIDAKLSNkZWZpbmUJQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDI1NiA8PCAxMCkJLyogUmVzZXJ2ZSAxMjgga0IgZm9yIE1vbml0b3IJKi8KLSNlbHNlCi0jZGVmaW5lCUNPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSg1MTIgPDwgMTApCS8qIFJlc2VydmUgNTEyIGtCIGZvciBNb25pdG9yCSovCi0jZW5kaWYKLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UJQ09ORklHX1NZU19GTEFTSF9CQVNFCi0jZGVmaW5lCUNPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDI1NiA8PCAxMCkJLyogUmVzZXJ2ZSAxMjgga0IgZm9yIG1hbGxvYygpCSovCi0KLS8qCi0gKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCi0gKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcwotICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotICovCi0jZGVmaW5lCUNPTkZJR19TWVNfQk9PVE1BUFNaCQkoOCA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eAkqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRkxBU0ggb3JnYW5pemF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcwkJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVAk4CS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKQkqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykJKi8KLQotI2RlZmluZQlDT05GSUdfRU5WX0lTX0lOX0ZMQVNICTEKLSNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCTB4MDAwNDAwMDAJLyogT2Zmc2V0IG9mIEVudmlyb25tZW50IFNlY3RvciAqLwotI2RlZmluZQlDT05GSUdfRU5WX1NJWkUJCTB4NDAwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KLSNkZWZpbmUJQ09ORklHX1NZU19VU0VfUFBDRU5WCQkJLyogRW52aXJvbm1lbnQgZW1iZWRkZWQgaW4gc2VjdCAucHBjZW52ICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENhY2hlIENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0NBQ0hFTElORV9TSVpFCTE2CS8qIEZvciBhbGwgTVBDOHh4IENQVXMJCQkqLwotI2lmIGRlZmluZWQoQ09ORklHX0NNRF9LR0RCKQotI2RlZmluZSBDT05GSUdfU1lTX0NBQ0hFTElORV9TSElGVAk0CS8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlCSovCi0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU1lQQ1IgLSBTeXN0ZW0gUHJvdGVjdGlvbiBDb250cm9sCQkJCQkxMS05Ci0gKiBTWVBDUiBjYW4gb25seSBiZSB3cml0dGVuIG9uY2UgYWZ0ZXIgcmVzZXQhCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTb2Z0d2FyZSAmIEJ1cyBNb25pdG9yIFRpbWVyIG1heCwgQnVzIE1vbml0b3IgZW5hYmxlLCBTVyBXYXRjaGRvZyBmcmVlemUKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQotI2RlZmluZSBDT05GSUdfU1lTX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgXAotCQkJIFNZUENSX1NXRSAgfCBTWVBDUl9TV1JJfCBTWVBDUl9TV1ApCi0jZWxzZQotI2RlZmluZSBDT05GSUdfU1lTX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgU1lQQ1JfU1dQKQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNJVU1DUiAtIFNJVSBNb2R1bGUgQ29uZmlndXJhdGlvbgkJCQkJCTExLTYKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBDTUNJQSBjb25maWcuLCBtdWx0aS1mdW5jdGlvbiBwaW4gdHJpLXN0YXRlCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19TSVVNQ1IJKFNJVU1DUl9EQkdDMDAgfCBTSVVNQ1JfREJQQzAwIHwgU0lVTUNSX01MUkMwMSkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogVEJTQ1IgLSBUaW1lIEJhc2UgU3RhdHVzIGFuZCBDb250cm9sCQkJCQkxMS0yNgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgUmVmZXJlbmNlIEludGVycnVwdCBTdGF0dXMsIFRpbWViYXNlIGZyZWV6aW5nIGVuYWJsZWQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1RCU0NSCShUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRSkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sCQkxMS0zMQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cywgSW50ZXJydXB0IFRpbWVyIGZyZWV6aW5nIGVuYWJsZWQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BJU0NSCShQSVNDUl9QUyB8IFBJU0NSX1BJVEYpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBMUFJDUiAtIFBMTCwgTG93LVBvd2VyLCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlcgkxNS0zMAotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUmVzZXQgUExMIGxvY2sgc3RhdHVzIHN0aWNreSBiaXQsIHRpbWVyIGV4cGlyZWQgc3RhdHVzIGJpdCBhbmQgdGltZXIgICoKLSAqIGludGVycnVwdCBzdGF0dXMgYml0IC0gbGVhdmUgUExMIG11bHRpcGxpY2F0aW9uIGZhY3RvciB1bmNoYW5nZWQgIQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfUExQUkNSCSgoKE1QQzhYWF9GQUNULTEpIDw8IDIwKSB8IFwKLQkJCQlQTFBSQ1JfU1BMU1MgfCBQTFBSQ1JfVEVYUFMgfCBQTFBSQ1JfVE1JU1QpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNDQ1IgLSBTeXN0ZW0gQ2xvY2sgYW5kIHJlc2V0IENvbnRyb2wgUmVnaXN0ZXIJCTE1LTI3Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTZXQgY2xvY2sgb3V0cHV0LCB0aW1lYmFzZSBhbmQgUlRDIHNvdXJjZSBhbmQgZGl2aWRlciwKLSAqIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHNvbWUgb3RoZXIgaW50ZXJuYWwgY2xvY2tzCi0gKi8KLSNkZWZpbmUgU0NDUl9NQVNLCVNDQ1JfRUJERjExCi0jZGVmaW5lIENPTkZJR19TWVNfU0NDUiAgICAgICAoU0NDUl9UQlMgICAgIHwgXAotCQkJCVNDQ1JfQ09NMDAgICB8IFNDQ1JfREZTWU5DMDAgfCBTQ0NSX0RGQlJHMDAgIHwgXAotCQkJCVNDQ1JfREZOTDAwMCB8IFNDQ1JfREZOSDAwMCAgfCBTQ0NSX0RGTENEMDAwIHwgXAotCQkJCVNDQ1JfREZBTENEMDApCi0KLSAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0RFUgkJMAotCi0vKiBCZWNhdXNlIG9mIHRoZSB3YXkgdGhlIDg2MCBzdGFydHMgdXAgYW5kIGFzc2lnbnMgQ1MwIHRoZQotKiBlbnRpcmUgYWRkcmVzcyBzcGFjZSwgd2UgaGF2ZSB0byBzZXQgdGhlIG1lbW9yeSBjb250cm9sbGVyCi0qIGRpZmZlcmVudGx5LiAgTm9ybWFsbHksIHlvdSB3cml0ZSB0aGUgb3B0aW9uIHJlZ2lzdGVyCi0qIGZpcnN0LCBhbmQgdGhlbiBlbmFibGUgdGhlIGNoaXAgc2VsZWN0IGJ5IHdyaXRpbmcgdGhlCi0qIGJhc2UgcmVnaXN0ZXIuICBGb3IgQ1MwLCB5b3UgbXVzdCB3cml0ZSB0aGUgYmFzZSByZWdpc3RlcgotKiBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlIG9wdGlvbiByZWdpc3Rlci4KLSovCi0KLS8qCi0gKiBJbml0IE1lbW9yeSBDb250cm9sbGVyOgotICoKLSAqIEJSMC8xIGFuZCBPUjAvMSAoRkxBU0gpCi0gKi8KLS8qIHRoZSBvdGhlciBDUzpzIGFyZSBkZXRlcm1pbmVkIGJ5IGxvb2tpbmcgYXQgcGFyYW1ldGVycyBpbiBCQ1NSeCAqLwotCi0KLSNkZWZpbmUgQkNTUl9BRERSCQkoKHVpbnQpIDB4MDIxMDAwMDApCi0jZGVmaW5lIEJDU1JfU0laRQkJKCh1aW50KSg2NCAqIDEwMjQpKQotCi0jZGVmaW5lIEZMQVNIX0JBU0UwX1BSRUxJTQkweDAyODAwMDAwCS8qIEZMQVNIIGJhbmsgIzAJKi8KLSNkZWZpbmUgRkxBU0hfQkFTRTFfUFJFTElNCTB4MDAwMDAwMDAJLyogRkxBU0ggYmFuayAjMQkqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfUkVNQVBfT1JfQU0JCTB4ODAwMDAwMDAJLyogT1IgYWRkciBtYXNrICovCi0jZGVmaW5lIENPTkZJR19TWVNfUFJFTElNX09SX0FNCTB4RkZFMDAwMDAJLyogT1IgYWRkciBtYXNrICovCi0KLS8qIEZMQVNIIHRpbWluZzogQUNTID0gMTAsIFRSTFggPSAxLCBDU05UID0gMSwgU0NZID0gMywgRUhUUiA9IDAJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19PUl9USU1JTkdfRkxBU0gJKE9SX0NTTlRfU0FNICB8IE9SX0FDU19ESVY0IHwgT1JfQkkgfCBPUl9TQ1lfM19DTEsgfCBPUl9UUkxYKQotCi0jZGVmaW5lIENPTkZJR19TWVNfT1IwX1JFTUFQCShDT05GSUdfU1lTX1JFTUFQX09SX0FNICB8IENPTkZJR19TWVNfT1JfVElNSU5HX0ZMQVNIKQotI2RlZmluZSBDT05GSUdfU1lTX09SMF9QUkVMSU0JKENPTkZJR19TWVNfUFJFTElNX09SX0FNIHwgQ09ORklHX1NZU19PUl9USU1JTkdfRkxBU0gpICAgLyogMSBNYnl0ZSB1bnRpbCBkZXRlY3RlZCBhbmQgb25seSAxIE1ieXRlIGlzIG5lZWRlZCovCi0jZGVmaW5lIENPTkZJR19TWVNfQlIwX1BSRUxJTQkoKEZMQVNIX0JBU0UwX1BSRUxJTSAmIEJSX0JBX01TSykgfCBCUl9WICkKLQotLyogQkNTUnggLSBCb2FyZCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXJzICovCi0jZGVmaW5lIENPTkZJR19TWVNfT1IxX1JFTUFQCUNPTkZJR19TWVNfT1IwX1JFTUFQCi0jZGVmaW5lIENPTkZJR19TWVNfT1IxX1BSRUxJTQkweGZmZmY4MTEwCQkJCQkJCQkJLyogNjRLYnl0ZSBhZGRyZXNzIHNwYWNlICovCi0jZGVmaW5lIENPTkZJR19TWVNfQlIxX1BSRUxJTQkoKEJDU1JfQUREUikgfCBCUl9WICkKLQotCi0vKgotICogTWVtb3J5IFBlcmlvZGljIFRpbWVyIFByZXNjYWxlcgotICovCi0KLS8qIHBlcmlvZGljIHRpbWVyIGZvciByZWZyZXNoICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFNUl9QVEEJCTk3CQkvKiBzdGFydCB3aXRoIGRpdmlkZXIgZm9yIDEwMCBNSHoJKi8KLQotLyogcmVmcmVzaCByYXRlIDE1LjYgdXMgKD0gNjQgbXMgLyA0SyA9IDYyLjQgLyBxdWFkIGJ1cnN0cykgZm9yIDw9IDEyOCBNQml0CSovCi0jZGVmaW5lIENPTkZJR19TWVNfTVBUUFJfMkJLXzRLCU1QVFBSX1BUUF9ESVYxNgkJLyogc2V0dGluZyBmb3IgMiBiYW5rcwkqLwotI2RlZmluZSBDT05GSUdfU1lTX01QVFBSXzFCS180SwlNUFRQUl9QVFBfRElWMzIJCS8qIHNldHRpbmcgZm9yIDEgYmFuawkqLwotCi0vKiByZWZyZXNoIHJhdGUgNy44IHVzICg9IDY0IG1zIC8gOEsgPSAzMS4yIC8gcXVhZCBidXJzdHMpIGZvciAyNTYgTUJpdAkJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NUFRQUl8yQktfOEsJTVBUUFJfUFRQX0RJVjgJCS8qIHNldHRpbmcgZm9yIDIgYmFua3MJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NUFRQUl8xQktfOEsJTVBUUFJfUFRQX0RJVjE2CQkvKiBzZXR0aW5nIGZvciAxIGJhbmsJKi8KLQotLyoKLSAqIE1BTVIgc2V0dGluZ3MgZm9yIFNEUkFNCi0gKi8KLQotLyogOCBjb2x1bW4gU0RSQU0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQU1SXzhDT0wJKChDT05GSUdfU1lTX01BTVJfUFRBIDw8IE1BTVJfUFRBX1NISUZUKSAgfCBNQU1SX1BUQUUJICAgIHwJXAotCQkJIE1BTVJfQU1BX1RZUEVfMCB8IE1BTVJfRFNBXzFfQ1lDTCB8IE1BTVJfRzBDTEFfQTExIHwJXAotCQkJIE1BTVJfUkxGQV8xWAkgfCBNQU1SX1dMRkFfMVgJICAgfCBNQU1SX1RMRkFfNFgpCi0vKiA5IGNvbHVtbiBTRFJBTSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BTVJfOUNPTAkoKENPTkZJR19TWVNfTUFNUl9QVEEgPDwgTUFNUl9QVEFfU0hJRlQpICB8IE1BTVJfUFRBRQkgICAgfAlcCi0JCQkgTUFNUl9BTUFfVFlQRV8xIHwgTUFNUl9EU0FfMV9DWUNMIHwgTUFNUl9HMENMQV9BMTAgfAlcCi0JCQkgTUFNUl9STEZBXzFYCSB8IE1BTVJfV0xGQV8xWAkgICB8IE1BTVJfVExGQV80WCkKLQotI2RlZmluZSBDT05GSUdfU1lTX01BTVIJCTB4MTNhMDExMTQKLQotLyogdmFsdWVzIGFjY29yZGluZyB0byB0aGUgbWFudWFsICovCi0KLQotI2RlZmluZSBQQ01DSUFfTUVNX0FERFIJCSgodWludCkweGZmMDIwMDAwKQotI2RlZmluZSBQQ01DSUFfTUVNX1NJWkUJCSgodWludCkoNjQgKiAxMDI0KSkKLQotI2RlZmluZQlCQ1NSMAkJCSgodWludCkgKEJDU1JfQUREUiArIDAwKSkKLSNkZWZpbmUJQkNTUjEJCQkoKHVpbnQpIChCQ1NSX0FERFIgKyAweDA0KSkKLSNkZWZpbmUJQkNTUjIJCQkoKHVpbnQpIChCQ1NSX0FERFIgKyAweDA4KSkKLSNkZWZpbmUJQkNTUjMJCQkoKHVpbnQpIChCQ1NSX0FERFIgKyAweDBjKSkKLSNkZWZpbmUJQkNTUjQJCQkoKHVpbnQpIChCQ1NSX0FERFIgKyAweDEwKSkKLQotLyogRkFEUyBiaXR2YWx1ZXMgYnkgSGVsbXV0IEJ1Y2hzYmF1bQotICogc2VlIE1QQzh4eEFEUyBVc2VyJ3MgTWFudWFsIGZvciBhIHByb3BlciBkZXNjcmlwdGlvbgotICogb2YgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzCi0gKi8KLQotI2RlZmluZSBCQ1NSMF9FUkIgICAgICAgKCh1aW50KTB4ODAwMDAwMDApCi0jZGVmaW5lIEJDU1IwX0lQICAgICAgICAoKHVpbnQpMHg0MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjBfQkRJUyAgICAgICgodWludCkweDEwMDAwMDAwKQotI2RlZmluZSBCQ1NSMF9CUFNfTUFTSyAgKCh1aW50KTB4MEMwMDAwMDApCi0jZGVmaW5lIEJDU1IwX0lTQl9NQVNLICAoKHVpbnQpMHgwMTgwMDAwMCkKLSNkZWZpbmUgQkNTUjBfREJHQ19NQVNLICgodWludCkweDAwNjAwMDAwKQotI2RlZmluZSBCQ1NSMF9EQlBDX01BU0sgKCh1aW50KTB4MDAxODAwMDApCi0jZGVmaW5lIEJDU1IwX0VCREZfTUFTSyAoKHVpbnQpMHgwMDA2MDAwMCkKLQotI2RlZmluZSBCQ1NSMV9GTEFTSF9FTiAgICAgICAgICAgKCh1aW50KTB4ODAwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0RSQU1fRU4gICAgICAgICAgICAoKHVpbnQpMHg0MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfRVRIRU4gICAgICAgICAgICAgICgodWludCkweDIwMDAwMDAwKQotI2RlZmluZSBCQ1NSMV9JUkRFTiAgICAgICAgICAgICAgKCh1aW50KTB4MTAwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0ZMQVNIX0NGR19FTiAgICAgICAoKHVpbnQpMHgwODAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfQ05UX1JFR19FTl9QUk9URUNUICgodWludCkweDA0MDAwMDAwKQotI2RlZmluZSBCQ1NSMV9CQ1NSX0VOICAgICAgICAgICAgKCh1aW50KTB4MDIwMDAwMDApCi0jZGVmaW5lIEJDU1IxX1JTMjMyRU5fMSAgICAgICAgICAoKHVpbnQpMHgwMTAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfUENDRU4gICAgICAgICAgICAgICgodWludCkweDAwODAwMDAwKQotI2RlZmluZSBCQ1NSMV9QQ0NWQ0MwICAgICAgICAgICAgKCh1aW50KTB4MDA0MDAwMDApCi0jZGVmaW5lIEJDU1IxX1BDQ1ZQUF9NQVNLICAgICAgICAoKHVpbnQpMHgwMDMwMDAwMCkKLSNkZWZpbmUgQkNTUjFfRFJBTV9IQUxGX1dPUkQgICAgICgodWludCkweDAwMDgwMDAwKQotI2RlZmluZSBCQ1NSMV9SUzIzMkVOXzIgICAgICAgICAgKCh1aW50KTB4MDAwNDAwMDApCi0jZGVmaW5lIEJDU1IxX1NEUkFNX0VOICAgICAgICAgICAoKHVpbnQpMHgwMDAyMDAwMCkKLSNkZWZpbmUgQkNTUjFfUENDVkNDMSAgICAgICAgICAgICgodWludCkweDAwMDEwMDAwKQotCi0jZGVmaW5lIEJDU1IyX0ZMQVNIX1BEX01BU0sgICAgICAoKHVpbnQpMHhGMDAwMDAwMCkKLSNkZWZpbmUgQkNTUjJfRkxBU0hfUERfU0hJRlQJIDI4Ci0jZGVmaW5lIEJDU1IyX0RSQU1fUERfTUFTSyAgICAgICAoKHVpbnQpMHgwNzgwMDAwMCkKLSNkZWZpbmUgQkNTUjJfRFJBTV9QRF9TSElGVCAgICAgIDIzCi0jZGVmaW5lIEJDU1IyX0VYVFRPTElfTUFTSyAgICAgICAoKHVpbnQpMHgwMDc4MDAwMCkKLSNkZWZpbmUgQkNTUjJfREJSRVZOUl9NQVNLICAgICAgICgodWludCkweDAwMDMwMDAwKQotCi0jZGVmaW5lIEJDU1IzX0RCSURfTUFTSyAgICAgICAgICAoKHVzaG9ydCkweDM4MDApCi0jZGVmaW5lIEJDU1IzX0NOVF9SRUdfRU5fUFJPVEVDVCAoKHVzaG9ydCkweDA0MDApCi0jZGVmaW5lIEJDU1IzX0JSRVZOUjAgICAgICAgICAgICAoKHVzaG9ydCkweDAwODApCi0jZGVmaW5lIEJDU1IzX0ZMQVNIX1BEX01BU0sgICAgICAoKHVzaG9ydCkweDAwNzApCi0jZGVmaW5lIEJDU1IzX0JSRVZOMSAgICAgICAgICAgICAoKHVzaG9ydCkweDAwMDgpCi0jZGVmaW5lIEJDU1IzX0JSRVZOMl9NQVNLICAgICAgICAoKHVzaG9ydCkweDAwMDMpCi0KLSNkZWZpbmUgQkNTUjRfRVRITE9PUCAgICAgICAgICAgICgodWludCkweDgwMDAwMDAwKQotI2RlZmluZSBCQ1NSNF9URlBMREwgICAgICAgICAgICAgKCh1aW50KTB4NDAwMDAwMDApCi0jZGVmaW5lIEJDU1I0X1RQU1FFTCAgICAgICAgICAgICAoKHVpbnQpMHgyMDAwMDAwMCkKLSNkZWZpbmUgQkNTUjRfU0lHTkFMX0xBTVAgICAgICAgICgodWludCkweDEwMDAwMDAwKQotI2lmZGVmIENPTkZJR19NUEM4MjMKLSNkZWZpbmUgQkNTUjRfVVNCX0VOICAgICAgICAgICAgICgodWludCkweDA4MDAwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4MjMgKi8KLSNpZmRlZiBDT05GSUdfTVBDODYwU0FSCi0jZGVmaW5lIEJDU1I0X1VUT1BJQV9FTiAgICAgICAgICAoKHVpbnQpMHgwODAwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODYwU0FSICovCi0jaWZkZWYgQ09ORklHX01QQzg2MFQKLSNkZWZpbmUgQkNTUjRfRkVUSF9FTiAgICAgICAgICAgICgodWludCkweDA4MDAwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4NjBUICovCi0jaWZkZWYgQ09ORklHX01QQzgyMwotI2RlZmluZSBCQ1NSNF9VU0JfU1BFRUQgICAgICAgICAgKCh1aW50KTB4MDQwMDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzgyMyAqLwotI2lmZGVmIENPTkZJR19NUEM4NjBUCi0jZGVmaW5lIEJDU1I0X0ZFVEhDRkcwICAgICAgICAgICAoKHVpbnQpMHgwNDAwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODYwVCAqLwotI2lmZGVmIENPTkZJR19NUEM4MjMKLSNkZWZpbmUgQkNTUjRfVkNDTyAgICAgICAgICAgICAgICgodWludCkweDAyMDAwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4MjMgKi8KLSNpZmRlZiBDT05GSUdfTVBDODYwVAotI2RlZmluZSBCQ1NSNF9GRVRIRkRFICAgICAgICAgICAgKCh1aW50KTB4MDIwMDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzg2MFQgKi8KLSNpZmRlZiBDT05GSUdfTVBDODIzCi0jZGVmaW5lIEJDU1I0X1ZJREVPX09OICAgICAgICAgICAoKHVpbnQpMHgwMDgwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODIzICovCi0jaWZkZWYgQ09ORklHX01QQzgyMwotI2RlZmluZSBCQ1NSNF9WRE9fRUtUX0NMS19FTiAgICAgKCh1aW50KTB4MDA0MDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzgyMyAqLwotI2lmZGVmIENPTkZJR19NUEM4NjBUCi0jZGVmaW5lIEJDU1I0X0ZFVEhDRkcxICAgICAgICAgICAoKHVpbnQpMHgwMDQwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODYwVCAqLwotI2lmZGVmIENPTkZJR19NUEM4MjMKLSNkZWZpbmUgQkNTUjRfVklERU9fUlNUICAgICAgICAgICgodWludCkweDAwMjAwMDAwKQotI2VuZGlmIC8qIENPTkZJR19NUEM4MjMgKi8KLSNpZmRlZiBDT05GSUdfTVBDODYwVAotI2RlZmluZSBCQ1NSNF9GRVRIUlNUICAgICAgICAgICAgKCh1aW50KTB4MDAyMDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzg2MFQgKi8KLSNkZWZpbmUgQkNTUjRfTU9ERU1fRU4gICAgICAgICAgICgodWludCkweDAwMTAwMDAwKQotI2RlZmluZSBCQ1NSNF9EQVRBX1ZPSUNFICAgICAgICAgKCh1aW50KTB4MDAwODAwMDApCi0KLSNkZWZpbmUgQ09ORklHX0RSQU1fNTBNSFoJCTEKLSNkZWZpbmUgQ09ORklHX1NEUkFNXzUwTUhaCi0KLS8qIFdlIGRvbid0IHVzZSB0aGUgODI1OS4KLSovCi0jZGVmaW5lIE5SXzgyNTlfSU5UUwkwCi0KLSNkZWZpbmUgQ09ORklHX0RJU0tfU1BJTlVQX1RJTUUgMTAwMDAwMAotCi0KLS8qIFBDTUNJQSBjb25maWd1cmF0aW9uICovCi0KLSNkZWZpbmUgUENNQ0lBX01BWF9TTE9UUyAgICAyCi0KLSNpZmRlZiBDT05GSUdfTVBDODYwCi0jZGVmaW5lIFBDTUNJQV9TTE9UX0EgMQotI2VuZGlmCi0KLSNkZWZpbmUgQ09ORklHX1NZU19EQVVHSFRFUkJPQVJECi0KLSNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvRkFEUzg2MFQuaCBiL2luY2x1ZGUvY29uZmlncy9GQURTODYwVC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDc0ODRiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY29uZmlncy9GQURTODYwVC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAgKiBBIGNvbGxlY3Rpb24gb2Ygc3RydWN0dXJlcywgYWRkcmVzc2VzLCBhbmQgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aAotICAqIHRoZSBNb3Rvcm9sYSA4NjBUIEZBRFMgYm9hcmQuICBDb3BpZWQgZnJvbSB0aGUgTUJYIHN0dWZmLgotICAqIE1hZ251cyBEYW1tIGFkZGVkIGRlZmluZXMgZm9yIDh4eHJvbSBhbmQgZXh0ZW5kZWQgYmRfaW5mby4KLSAgKiBIZWxtdXQgQnVjaHNiYXVtIGFkZGVkIGJpdHZhbHVlcyBmb3IgQkNTUngKLSAgKgotICAqIENvcHlyaWdodCAoYykgMTk5OCBEYW4gTWFsZWsgKGRtYWxla0BqbGMubmV0KQotICAqCi0gICogTW9kaWZpZWQgYnksIFl1bGkgQmFyY29oZW4sIEFyYWJlbGxhIFNvZnR3YXJlIEx0ZC4sIHl1bGlAYXJhYmVsbGFzdy5jb20KLSAgKgotICAqIFZhbHVlcyBjb21tb24gdG8gYWxsIEZBRFMgZmFtaWx5IGJvYXJkcyBhcmUgaW4gYm9hcmQvZmFkcy9mYWRzLmgKLSAgKi8KLQotI2lmbmRlZiBfX0NPTkZJR19ICi0jZGVmaW5lIF9fQ09ORklHX0gKLQotLyogYm9hcmQgdHlwZSAqLwotI2RlZmluZSBDT05GSUdfRkFEUwkJMSAgICAgICAvKiBvbGQvbmV3IEZBRFMgKyBuZXcgQURTICovCi0KLS8qIHByb2Nlc3NvciB0eXBlICovCi0jZGVmaW5lIENPTkZJR19NUEM4NjBUCQkxICAgICAgIC8qIDg2MFQgKi8KLQotI2RlZmluZQlDT05GSUdfU1lTX1RFWFRfQkFTRQkweEZFMDAwMDAwCi0KLSNkZWZpbmUJQ09ORklHXzh4eF9DT05TX1NNQzEJMQkvKiBDb25zb2xlIGlzIG9uIFNNQzEJCSovCi0jdW5kZWYJQ09ORklHXzh4eF9DT05TX1NNQzIKLSN1bmRlZglDT05GSUdfOHh4X0NPTlNfTk9ORQotI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTM4NDAwCi0jZGVmaW5lIENPTkZJR19MT0FEU19FQ0hPCTEJLyogZWNobyBvbiBmb3Igc2VyaWFsIGRvd25sb2FkCSovCi0KLSNpZiAwIC8qIG9sZCBGQURTICovCi0jIGRlZmluZSBDT05GSUdfU1lTXzhYWF9GQUNUCQkxMgkvKiA0IE1IeiBvc2NpbGxhdG9yIG9uIEVYVENMSyAqLwotI2Vsc2UgLyogbmV3IEZBRFMgKi8KLSMgZGVmaW5lIENPTkZJR19TWVNfOFhYX0ZBQ1QJCTEwCS8qIDUgTUh6IG9zY2lsbGF0b3Igb24gRVhUQ0xLICovCi0jZW5kaWYKLQotI2RlZmluZSBDT05GSUdfU1lTX1BMUFJDUiAgKCgoQ09ORklHX1NZU184WFhfRkFDVC0xKSA8PCBQTFBSQ1JfTUZfU0hJRlQpIHwJXAotCQlQTFBSQ1JfU1BMU1MgfCBQTFBSQ1JfVEVYUFMgfCBQTFBSQ1JfVE1JU1QpCi0KLSNkZWZpbmUgQ09ORklHX0RSQU1fNTBNSFoJCTEKLSNkZWZpbmUgQ09ORklHX1NEUkFNXzUwTUhaICAgICAgICAgICAgICAxCi0KLSNpbmNsdWRlICIuLi8uLi9ib2FyZC9mYWRzL2ZhZHMuaCIKLQotI2lmZGVmIFVTRV9SRUFMX0ZMQVNIX1ZBTFVFUwotLyoKLSAqIFRoZXNlIHZhbHVlcyBmaXQgb3VyIEZBRFM4NjBUIC4uLgotICogVGhlICJkZWZhdWx0IiBiZWhhdmlvdXIgd2l0aCAxTWJ5dGUgaW5pdGlhbCBkb2Vzbid0IHdvcmsgZm9yIHVzIQotICovCi0jdW5kZWYgQ09ORklHX1NZU19PUjBfUFJFTElNCi0jdW5kZWYgQ09ORklHX1NZU19CUjBfUFJFTElNCi0jZGVmaW5lIENPTkZJR19TWVNfT1IwX1BSRUxJTQkweDBGRkMwMEQzNCAvKiBSZWFsIHZhbHVlcyBmb3IgdGhlIGJvYXJkICovCi0jZGVmaW5lIENPTkZJR19TWVNfQlIwX1BSRUxJTQkweDAyODAwMDAxICAvKiBSZWFsIHZhbHVlcyBmb3IgdGhlIGJvYXJkICovCi0jZW5kaWYKLQotI2RlZmluZSBDT05GSUdfU1lTX0RBVUdIVEVSQk9BUkQgLyogRkFEUyBoYXMgcHJvY2Vzc29yLXNwZWNpZmljIGRhdWdodGVyYm9hcmQgKi8KLQotI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9HRU5JRVRWLmggYi9pbmNsdWRlL2NvbmZpZ3MvR0VOSUVUVi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTM0YjEyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY29uZmlncy9HRU5JRVRWLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNTQgKzAsMCBAQAotIC8qCi0gICogQSBjb2xsZWN0aW9uIG9mIHN0cnVjdHVyZXMsIGFkZHJlc3NlcywgYW5kIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGgKLSAgKiB0aGUgTW90b3JvbGEgODYwVCBGQURTIGJvYXJkLiAgQ29waWVkIGZyb20gdGhlIE1CWCBzdHVmZi4KLSAgKiBNYWdudXMgRGFtbSBhZGRlZCBkZWZpbmVzIGZvciA4eHhyb20gYW5kIGV4dGVuZGVkIGJkX2luZm8uCi0gICogSGVsbXV0IEJ1Y2hzYmF1bSBhZGRlZCBiaXR2YWx1ZXMgZm9yIEJDU1J4Ci0gICoKLSAgKiBDb3B5cmlnaHQgKGMpIDE5OTggRGFuIE1hbGVrIChkbWFsZWtAamxjLm5ldCkKLSAgKi8KLQotLyoKLSAqIFRoZSBHRU5JRVRWIGlzIHVzaW5nIHRoZSBmb2xsb3dpbmcgcGh5c2ljYWwgbWVtb3J5bWFwIChjb3BpZWQgZnJvbQotICogdGhlIEZBRFMgY29uZmlndXJhdGlvbik6Ci0gKgotICogZmYwMjAwMDAgLT4gZmYwMmZmZmYgOiBwY21jaWEKLSAqIGZmMDEwMDAwIC0+IGZmMDFmZmZmIDogQkNTUiAgICAgICBjb25uZWN0ZWQgdG8gQ1MxLCBzZXR1cCBieSA4eHhST00KLSAqIGZmMDAwMDAwIC0+IGZmMDBmZmZmIDogSU1BUCAgICAgICBpbnRlcm5hbCBpbiB0aGUgY3B1Ci0gKiAzMDAwMDAwMCAtPiAzMDBmZmZmZiA6IGZsYXNoICAgICAgY29ubmVjdGVkIHRvIENTMAotICogMDAwMDAwMDAgLT4gbm5ubm5ubm4gOiBzZHJhbSAgICAgIHNldHVwIGJ5IFUtQm9vdAotICoKLSAqIENTIHBpbnMgYXJlIGNvbm5lY3RlZCBhcyBmb2xsb3dzOgotICoKLSAqIENTMCAtNTEyS2IgYm9vdCBmbGFzaAotICogQ1MxIC0gU0RSQU0gIzEKLSAqIENTMiAtIFNEUkFNICMyCi0gKiBDUzMgLSBGbGFzaCAjMQotICogQ1M0IC0gRmxhc2ggIzIKLSAqIENTNSAtIExvbiAoaWYgcHJlc2VudCkKLSAqIENTNiAtIFBDTUNJQSAjMQotICogQ1M3IC0gUENNQ0lBICMyCi0gKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogYm9hcmQvY29uZmlnLmggLSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJvYXJkIHNwZWNpZmljCi0gKi8KLQotI2lmbmRlZiBfX0NPTkZJR19ICi0jZGVmaW5lIF9fQ09ORklHX0gKLQotI2RlZmluZQlDT05GSUdfU1lTX1RFWFRfQkFTRQkweDAwMDAwMDAwCi0KLSNkZWZpbmUJQ09ORklHX0VUSEFERFIJCTA4OjAwOjIyOjUwOjcwOjYzCS8qIEV0aGVybmV0IGFkZHJlc3MgKi8KLSNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQkvKiBPdmVyd3JpdGUgdGhlIGVudmlyb25tZW50ICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19BTExPQ19EUFJBTQkJCS8qIFVzZSBkeW5hbWljIERQUkFNIGFsbG9jYXRpb24gKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0FVVE9MT0FECQkibiIJLyogTm8gYXV0b2xvYWQgKi8KLQotLyojZGVmaW5lIENPTkZJR19WSURFTwkJMQkvICBUbyBlbmFibGUgdGhlIHZpZGVvIGluaXRpYWxpemF0aW9uICovCi0vKiNkZWZpbmUgQ09ORklHX1ZJREVPX0FERFIJMHgwMDIwMDAwMCAqLwotLyojZGVmaW5lIENPTkZJR19IQVJEX0kyQwkxCS8gIEkyQyB3aXRoIGhhcmR3YXJlIHN1cHBvcnQgKi8KLS8qI2RlZmluZSBDT05GSUdfUENNQ0lBCQkxCS8gIFRvIGVuYWJsZSB0aGUgUENNQ0lBIGluaXRpYWxpemF0aW9uICovCi0KLS8qI2RlZmluZSBDT05GSUdfU1lTX1BDTUNJQV9JT19BRERSCTB4ZmYwMjAwMDAgKi8KLS8qI2RlZmluZSBDT05GSUdfU1lTX1BDTUNJQV9JT19TSVpFCTB4MTAwMDAgKi8KLS8qI2RlZmluZSBDT05GSUdfU1lTX1BDTUNJQV9NRU1fQUREUgkweGUwMDAwMDAwICovCi0vKiNkZWZpbmUgQ09ORklHX1NZU19QQ01DSUFfTUVNX1NJWkUJMHgxMDAwMCAqLwotCi0vKiBWaWRlbyByZWxhdGVkICovCi0KLS8qI2RlZmluZSBDT05GSUdfVklERU9fTE9HTwkJCTEJLyAgU2hvdyB0aGUgbG9nbyAqLwotLyojZGVmaW5lIENPTkZJR19WSURFT19FTkNPREVSX0FENzE3NwkJMQkvICBFbmFibGUgdGhpcyBlbmNvZGVyICovCi0vKiNkZWZpbmUgQ09ORklHX1ZJREVPX0VOQ09ERVJfQUQ3MTc3X0FERFIJMHhGNAkvICBBTFNCIHRvIGdyb3VuZCAqLwotCi0vKiBXaXJlbGVzcyA1NktoeiA0UFBNIGtleWJvYXJkIG9uIFNNQ3ggKi8KLQotLyojZGVmaW5lIENPTkZJR19LRVlCT0FSRAkJMCAqLwotLyojZGVmaW5lIENPTkZJR19XTF80UFBNX0tFWUJPQVJEX1NNQwkwCS8gIFNNQyB0byB1c2UgKDAgaW5kZXhlZCkgKi8KLQotLyoKLSAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCi0gKiAoZWFzeSB0byBjaGFuZ2UpCi0gKi8KLSNpbmNsdWRlIDxtcGM4eHhfaXJxLmg+Ci0KLSNkZWZpbmUgQ09ORklHX0dFTklFVFYJCTEKLSNkZWZpbmUgQ09ORklHX01QQzgyMwkJMQotCi0jZGVmaW5lCUNPTkZJR184eHhfQ09OU19TTUMxCTEJLyogQ29uc29sZSBpcyBvbiBTTUMxCQkqLwotI3VuZGVmCUNPTkZJR184eHhfQ09OU19TTUMyCi0jdW5kZWYJQ09ORklHXzh4eF9DT05TX05PTkUKLSNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQk5NjAwCi0KLSNkZWZpbmUgTVBDOFhYX0ZBQ1QJMTIJCQkvKiBNdWx0aXBseSBieSAxMgkqLwotI2RlZmluZSBNUEM4WFhfWElOCTUwMDAwMDAJCQkvKiA0IE1IeiBjbG9jawkJKi8KLQotI2RlZmluZSBNUEM4WFhfSFoJKChNUEM4WFhfWElOKSAqIChNUEM4WFhfRkFDVCkpCi0jZGVmaW5lIENPTkZJR19TWVNfUExQUkNSX01GCSgoTVBDOFhYX0ZBQ1QtMSkgPDwgMjApCi0jZGVmaW5lIENPTkZJR184eHhfR0NMS19GUkVRCU1QQzhYWF9IWgkvKiBGb3JjZSBpdCAtIGRvbnQgbWVhc3VyZSBpdCAqLwotCi0jZGVmaW5lCUNPTkZJR19DTE9DS1NfSU5fTUhaCTEJLyogY2xvY2tzIHBhc3NzZWQgdG8gTGludXggaW4gTUh6ICovCi0KLSNpZiAxCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJMQkvKiBhdXRvYm9vdCBhZnRlciAyIHNlY29uZHMJKi8KLSNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JMAkvKiBEb250IGVjaG9lcyByZWNlaXZlZCBjaGFyYWN0ZXJzICovCi0jZGVmaW5lIENPTkZJR19CT09UQVJHUwkJIiIKLSNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECQkJCQkJCVwKLSJib290cDsgdGZ0cDsgIgkJCQkJCQkJCVwKLSJzZXRlbnYgYm9vdGFyZ3MgY29uc29sZT10dHkwIGNvbnNvbGU9dHR5UzAgIgkJCQkJXAotInJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofSAiCQkJCVwKLSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7c3VibmV0bWFza306JHtob3N0bmFtZX06ZXRoMDpvZmYgOyIJXAotImJvb3RtICIKLSNlbHNlCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJMAkvKiBhdXRvYm9vdCBkaXNhYmxlZAkJKi8KLSNlbmRpZgotCi0jdW5kZWYJQ09ORklHX1dBVENIRE9HCQkJLyogd2F0Y2hkb2cgZGlzYWJsZWQJCSovCi0KLQotLyoKLSAqIEJPT1RQIG9wdGlvbnMKLSAqLwotI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFCi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09UUEFUSAotI2RlZmluZSBDT05GSUdfQk9PVFBfR0FURVdBWQotI2RlZmluZSBDT05GSUdfQk9PVFBfSE9TVE5BTUUKLQotCi0vKgotICogQ29tbWFuZCBsaW5lIGNvbmZpZ3VyYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KLQotCi0vKgotICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwotICovCi0jZGVmaW5lCUNPTkZJR19TWVNfTE9OR0hFTFAJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCi0jZGVmaW5lCUNPTkZJR19TWVNfUFJPTVBUCQkiOj4iCQkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0CSovCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCQkxMDI0CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLwotI2Vsc2UKLSNkZWZpbmUJQ09ORklHX1NZU19DQlNJWkUJCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KLSNlbmRpZgotI2RlZmluZQlDT05GSUdfU1lTX1BCU0laRQkJKENPTkZJR19TWVNfQ0JTSVpFK3NpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCi0jZGVmaW5lCUNPTkZJR19TWVNfTUFYQVJHUwkJOAkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQkJQ09ORklHX1NZU19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkweDAwMDA0MDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHgwMDgwMDAwMAkvKiAwIC4uLiA4IE1CIGluIERSQU0JKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUgkJMHgwMDEwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfQkFVRFJBVEVfVEFCTEUJeyA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQotCi0vKgotICogTG93IExldmVsIENvbmZpZ3VyYXRpb24gU2V0dGluZ3MKLSAqIChhZGRyZXNzIG1hcHBpbmdzLCByZWdpc3RlciBpbml0aWFsIHZhbHVlcywgZXRjLikKLSAqIFlvdSBzaG91bGQga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgaWYgeW91IG1ha2UgY2hhbmdlcyBoZXJlLgotICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBJbnRlcm5hbCBNZW1vcnkgTWFwcGVkIFJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JTU1SCQkweEZGMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfSU1NUl9TSVpFCQkoKHVpbnQpKDY0ICogMTAyNCkpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIERlZmluaXRpb25zIGZvciBpbml0aWFsIHN0YWNrIHBvaW50ZXIgYW5kIGRhdGEgYXJlYSAoaW4gRFBSQU0pCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9BRERSCUNPTkZJR19TWVNfSU1NUgotI2RlZmluZQlDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUJMHgyRjAwCS8qIFNpemUgb2YgdXNlZCBhcmVhIGluIERQUkFNCSovCi0jZGVmaW5lIENPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCShDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUgLSBHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKLSNkZWZpbmUJQ09ORklHX1NZU19JTklUX1NQX09GRlNFVAlDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTdGFydCBhZGRyZXNzZXMgZm9yIHRoZSBmaW5hbCBtZW1vcnkgY29uZmlndXJhdGlvbgotICogKFNldCB1cCBieSB0aGUgc3RhcnR1cCBjb2RlKQotICogUGxlYXNlIG5vdGUgdGhhdCBDT05GSUdfU1lTX1NEUkFNX0JBU0UgX211c3RfIHN0YXJ0IGF0IDAKLSAqIEFsc28gTk9URSB0aGF0IGl0IGRvZXNuJ3QgbWVhbiBTRFJBTSAtIGl0IG1lYW5zIE1FTU9SWS4KLSAqLwotI2RlZmluZQlDT05GSUdfU1lTX1NEUkFNX0JBU0UJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQVNFCQkweDAyODAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfU0laRQkJKCh1aW50KSg4ICogMTAyNCAqIDEwMjQpKQkvKiBtYXggOE1ieXRlICovCi0jaWYgMAotI2RlZmluZQlDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDEyOCBrQiBmb3IgTW9uaXRvcgkqLwotI2Vsc2UKLSNkZWZpbmUJQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDUxMiA8PCAxMCkJLyogUmVzZXJ2ZSA1MTIga0IgZm9yIE1vbml0b3IJKi8KLSNlbmRpZgotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQlDT05GSUdfU1lTX0ZMQVNIX0JBU0UKLSNkZWZpbmUJQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDEyOCBrQiBmb3IgbWFsbG9jKCkJKi8KLQotLyoKLSAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKLSAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCi0gKiB0aGUgbWF4aW11bSBtYXBwZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gKi8KLSNkZWZpbmUJQ09ORklHX1NZU19CT09UTUFQU1oJCSg4IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4CSovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGTEFTSCBvcmdhbml6YXRpb24KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLwotI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUCTgJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpCSovCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKGluIG1zKQkqLwotCi0jZGVmaW5lCUNPTkZJR19FTlZfSVNfSU5fRkxBU0gJMQotI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJMHgxMDAwMAkvKiBPZmZzZXQgb2YgRW52aXJvbm1lbnQgU2VjdG9yCQkqLwotI2RlZmluZQlDT05GSUdfRU5WX1NJWkUJCTB4MTAwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKDY0aykqLwotCi0vKiB2YWx1ZXMgYWNjb3JkaW5nIHRvIHRoZSBtYW51YWwgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2FjaGUgQ29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfQ0FDSEVMSU5FX1NJWkUJMTYJLyogRm9yIGFsbCBNUEM4eHggQ1BVcwkJCSovCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lIENPTkZJR19TWVNfQ0FDSEVMSU5FX1NISUZUCTQJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUJKi8KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTWVBDUiAtIFN5c3RlbSBQcm90ZWN0aW9uIENvbnRyb2wJCQkJCTExLTkKLSAqIFNZUENSIGNhbiBvbmx5IGJlIHdyaXR0ZW4gb25jZSBhZnRlciByZXNldCEKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNvZnR3YXJlICYgQnVzIE1vbml0b3IgVGltZXIgbWF4LCBCdXMgTW9uaXRvciBlbmFibGUsIFNXIFdhdGNoZG9nIGZyZWV6ZQotICovCi0jaWYgZGVmaW5lZChDT05GSUdfV0FUQ0hET0cpCi0jZGVmaW5lIENPTkZJR19TWVNfU1lQQ1IJKFNZUENSX1NXVEMgfCBTWVBDUl9CTVQgfCBTWVBDUl9CTUUgfCBTWVBDUl9TV0YgfCBcCi0JCQkgU1lQQ1JfU1dFICB8IFNZUENSX1NXUkl8IFNZUENSX1NXUCkKLSNlbHNlCi0jZGVmaW5lIENPTkZJR19TWVNfU1lQQ1IJKFNZUENSX1NXVEMgfCBTWVBDUl9CTVQgfCBTWVBDUl9CTUUgfCBTWVBDUl9TV0YgfCBTWVBDUl9TV1ApCi0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU0lVTUNSIC0gU0lVIE1vZHVsZSBDb25maWd1cmF0aW9uCQkJCQkJMTEtNgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUENNQ0lBIGNvbmZpZy4sIG11bHRpLWZ1bmN0aW9uIHBpbiB0cmktc3RhdGUKLSAqCi0jZGVmaW5lIENPTkZJR19TWVNfU0lVTUNSCShTSVVNQ1JfREJHQzAwIHwgU0lVTUNSX0RCUEMwMCB8IFNJVU1DUl9NTFJDMDEpCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19TSVVNQ1IJKFNJVU1DUl9EQkdDMDAgfCBTSVVNQ1JfREJQQzAwIHwgU0lVTUNSX01MUkMxMCkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogVEJTQ1IgLSBUaW1lIEJhc2UgU3RhdHVzIGFuZCBDb250cm9sCQkJCQkxMS0yNgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgUmVmZXJlbmNlIEludGVycnVwdCBTdGF0dXMsIFRpbWViYXNlIGZyZWV6aW5nIGVuYWJsZWQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1RCU0NSCShUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRSkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sCQkxMS0zMQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cywgSW50ZXJydXB0IFRpbWVyIGZyZWV6aW5nIGVuYWJsZWQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BJU0NSCShQSVNDUl9QUyB8IFBJU0NSX1BJVEYpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBMUFJDUiAtIFBMTCwgTG93LVBvd2VyLCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlcgkxNS0zMAotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUmVzZXQgUExMIGxvY2sgc3RhdHVzIHN0aWNreSBiaXQsIHRpbWVyIGV4cGlyZWQgc3RhdHVzIGJpdCBhbmQgdGltZXIgICoKLSAqIGludGVycnVwdCBzdGF0dXMgYml0IC0gbGVhdmUgUExMIG11bHRpcGxpY2F0aW9uIGZhY3RvciB1bmNoYW5nZWQgIQotICoKLSAqICNkZWZpbmUgQ09ORklHX1NZU19QTFBSQ1IJKFBMUFJDUl9TUExTUyB8IFBMUFJDUl9URVhQUyB8IFBMUFJDUl9UTUlTVCkKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BMUFJDUgkoUExQUkNSX1NQTFNTIHwgUExQUkNSX1RFWFBTIHwgUExQUkNSX1RNSVNUIHwgQ09ORklHX1NZU19QTFBSQ1JfTUYpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNDQ1IgLSBTeXN0ZW0gQ2xvY2sgYW5kIHJlc2V0IENvbnRyb2wgUmVnaXN0ZXIJCTE1LTI3Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTZXQgY2xvY2sgb3V0cHV0LCB0aW1lYmFzZSBhbmQgUlRDIHNvdXJjZSBhbmQgZGl2aWRlciwKLSAqIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHNvbWUgb3RoZXIgaW50ZXJuYWwgY2xvY2tzCi0gKi8KLSNkZWZpbmUgU0NDUl9NQVNLCVNDQ1JfRUJERjExCi0jZGVmaW5lIENPTkZJR19TWVNfU0NDUiAgICAgICAoU0NDUl9UQlMgICAgIHwgXAotCQkJCVNDQ1JfQ09NMDAgICB8IFNDQ1JfREZTWU5DMDAgfCBTQ0NSX0RGQlJHMDAgIHwgXAotCQkJCVNDQ1JfREZOTDAwMCB8IFNDQ1JfREZOSDAwMCAgfCBTQ0NSX0RGTENEMDAwIHwgXAotCQkJCVNDQ1JfREZBTENEMDApCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfREVSCQkwCi0KLS8qIEJlY2F1c2Ugb2YgdGhlIHdheSB0aGUgODYwIHN0YXJ0cyB1cCBhbmQgYXNzaWducyBDUzAgdGhlCi0qIGVudGlyZSBhZGRyZXNzIHNwYWNlLCB3ZSBoYXZlIHRvIHNldCB0aGUgbWVtb3J5IGNvbnRyb2xsZXIKLSogZGlmZmVyZW50bHkuICBOb3JtYWxseSwgeW91IHdyaXRlIHRoZSBvcHRpb24gcmVnaXN0ZXIKLSogZmlyc3QsIGFuZCB0aGVuIGVuYWJsZSB0aGUgY2hpcCBzZWxlY3QgYnkgd3JpdGluZyB0aGUKLSogYmFzZSByZWdpc3Rlci4gIEZvciBDUzAsIHlvdSBtdXN0IHdyaXRlIHRoZSBiYXNlIHJlZ2lzdGVyCi0qIGZpcnN0LCBmb2xsb3dlZCBieSB0aGUgb3B0aW9uIHJlZ2lzdGVyLgotKi8KLQotLyoKLSAqIEluaXQgTWVtb3J5IENvbnRyb2xsZXI6Ci0gKgotICogQlIwIGFuZCBPUjAoRkxBU0gpCi0gKi8KLQotI2RlZmluZSBGTEFTSF9CQVNFMF9QUkVMSU0JMHgwMjgwMDAwMAkvKiBGTEFTSCBiYW5rICMwCQkqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfUkVNQVBfT1JfQU0JCTB4ODAwMDAwMDAJLyogT1IgYWRkciBtYXNrCQkqLwotI2RlZmluZSBDT05GSUdfU1lTX1BSRUxJTV9PUl9BTQkweEZGODAwMDAwCS8qIE9SIGFkZHIgbWFzayAoNTEyS2IpICovCi0KLS8qIEZMQVNIIHRpbWluZyAqLwotI2RlZmluZSBDT05GSUdfU1lTX09SX1RJTUlOR19GTEFTSAkoT1JfQ1NOVF9TQU0gIHwgT1JfQUNTX0RJVjIgfCBPUl9CSSB8IFwKLQkJCQlPUl9TQ1lfMTVfQ0xLIHwgT1JfVFJMWCApCi0KLS8qI2RlZmluZSBDT05GSUdfU1lTX09SMF9SRU1BUAkoQ09ORklHX1NZU19SRU1BUF9PUl9BTSAgfCBDT05GSUdfU1lTX09SX1RJTUlOR19GTEFTSCkgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19PUjBfUFJFTElNCShDT05GSUdfU1lTX1BSRUxJTV9PUl9BTSB8IENPTkZJR19TWVNfT1JfVElNSU5HX0ZMQVNIKQkJLyogMHhmZmY4MGZmNCAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JSMF9QUkVMSU0JKChGTEFTSF9CQVNFMF9QUkVMSU0gJiBCUl9CQV9NU0spIHwgQlJfViB8IEJSX1BTXzgpCS8qIDB4MDI4MDA0MDEgKi8KLQotLyoKLSAqIEJSMS8yIGFuZCBPUjEvMiAoU0RSQU0pCi0qLwotCi0jZGVmaW5lIENPTkZJR19TWVNfT1JfVElNSU5HX1NEUkFNCTB4MDAwMDBBMDAKLQotI2RlZmluZSBTRFJBTV9NQVhfU0laRQkJMHgwNDAwMDAwMAkvKiA2NE1iIGJhbmsgKi8KLSNkZWZpbmUgU0RSQU1fQkFTRTFfUFJFTElNCTB4MDAwMDAwMDAJLyogRmlyc3QgYmFuayAqLwotI2RlZmluZSBTRFJBTV9CQVNFMl9QUkVMSU0JMHgxMDAwMDAwMAkvKiBTZWNvbmQgYmFuayAqLwotCi0vKgotICogTWVtb3J5IFBlcmlvZGljIFRpbWVyIFByZXNjYWxlcgotICovCi0KLS8qIHBlcmlvZGljIHRpbWVyIGZvciByZWZyZXNoICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUJNUl9QVEIJCTB4NWQJCS8qIHN0YXJ0IHdpdGggZGl2aWRlciBmb3IgMTAwIE1IegkqLwotCi0vKiByZWZyZXNoIHJhdGUgMTUuNiB1cyAoPSA2NCBtcyAvIDRLID0gNjIuNCAvIHF1YWQgYnVyc3RzKSBmb3IgPD0gMTI4IE1CaXQJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NUFRQUl8yQktfNEsJTVBUUFJfUFRQX0RJVjE2CQkvKiBzZXR0aW5nIGZvciAyIGJhbmtzCSovCi0jZGVmaW5lIENPTkZJR19TWVNfTVBUUFJfMUJLXzRLICAgICAgICBNUFRQUl9QVFBfRElWMzIKLS8qCi0gKiBNQk1SIHNldHRpbmdzIGZvciBTRFJBTQotICovCi0KLS8qIDggY29sdW1uIFNEUkFNICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUJNUl84Q09MCSgoQ09ORklHX1NZU19NQk1SX1BUQiA8PCBNQU1SX1BUQV9TSElGVCkgIHwgTUFNUl9QVEFFIHwgXAotCQkJTUFNUl9HMENMQV9BMTEgfCBNQU1SX1JMRkFfMVggfCBNQU1SX1dMRkFfMVggXAotCQkJfCBNQU1SX1RMRkFfNFgpCS8qIDB4NWQ4MDIxMTQgKi8KLQotLyogdmFsdWVzIGFjY29yZGluZyB0byB0aGUgbWFudWFsICovCi0KLSNkZWZpbmUgQ09ORklHX0RSQU1fNTBNSFoJCTEKLSNkZWZpbmUgQ09ORklHX1NEUkFNXzUwTUhaCi0KLS8qIFdlIGRvbid0IHVzZSB0aGUgODI1OS4KLSovCi0jZGVmaW5lIE5SXzgyNTlfSU5UUwkwCi0KLS8qCi0gKiBNUEM4eHggQ1BNIE9wdGlvbnMKLSAqLwotI2RlZmluZSBDT05GSUdfU0NDX0VORVQgMQotCi0jZGVmaW5lIENPTkZJR19ESVNLX1NQSU5VUF9USU1FIDEwMDAwMDAKLQotLyogUENNQ0lBIGNvbmZpZ3VyYXRpb24gKi8KLQotI2RlZmluZSBQQ01DSUFfTUFYX1NMT1RTICAgIDEKLSNkZWZpbmUgUENNQ0lBX1NMT1RfQiAxCi0KLSNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTUJYLmggYi9pbmNsdWRlL2NvbmZpZ3MvTUJYLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZWRkNDQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jb25maWdzL01CWC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkwICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgotICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgotICoKLSAqIENvbmZpZ3VhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIE1CWDh4eCBib2FyZC4KLSAqCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLS8qCi0gKiBDaGFuZ2VkIDIwMDItMTAtMDEKLSAqIEFkZGVkIFBDTUNJQSBkZWZpbmVzIG1vc3RseSB0YWtlbiBmcm9tIG90aGVyIFUtQm9vdCBib2FyZHMgdGhhdAotICogaGF2ZSBQQ01DSUEgYWxyZWFkeSB3b3JraW5nLiAgSWYgeW91IGZpbmQgYW55IGJ1Z3MsIGluY29ycmVjdCBhc3N1bXB0aW9ucwotICogZmVlbCBmcmVlIHRvIGZpeCB0aGVtIHlvdXJzZWxmIGFuZCBzdWJtaXQgYSBwYXRjaC4KLSAqIFJvZCBCb3ljZSA8cm9kX2JveWNlQHN0cmF0ZXhuZXQuY29tLgotICovCi0vKgotICogYm9hcmQvY29uZmlnLmggLSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJvYXJkIHNwZWNpZmljCi0gKi8KLQotI2lmbmRlZiBfX0NPTkZJR19ICi0jZGVmaW5lIF9fQ09ORklHX0gKLQotLyoKLSAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCi0gKiAoZWFzeSB0byBjaGFuZ2UpCi0gKi8KLQotI2RlZmluZSBDT05GSUdfTVBDODYwCQkxCS8qIFRoaXMgaXMgYSBNUEM4NjAgQ1BVCQkqLwotI2RlZmluZSBDT05GSUdfTUJYCQkxCS8qIC4uLm9uIGFuIE1CWCBtb2R1bGUJCSovCi0KLSNkZWZpbmUJQ09ORklHX1NZU19URVhUX0JBU0UJMHhmZTAwMDAwMAotCi0jZGVmaW5lCUNPTkZJR184eHhfQ09OU19TTUMxCTEJLyogQ29uc29sZSBpcyBvbiBTTUMxCQkqLwotI3VuZGVmCUNPTkZJR184eHhfQ09OU19TTUMyCi0jdW5kZWYJQ09ORklHXzh4eF9DT05TX05PTkUKLSNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQk5NjAwCi0vKiBEZWZpbmUgdGhpcyB0byB1c2UgdGhlIFBDSSBidXMgKi8KLSN1bmRlZiBDT05GSUdfVVNFX1BDSQotCi0jZGVmaW5lCUNPTkZJR19DTE9DS1NfSU5fTUhaCTEJLyogY2xvY2tzIHBhc3NzZWQgdG8gTGludXggaW4gTUh6ICovCi0jZGVmaW5lIENPTkZJR184eHhfR0NMS19GUkVRICAgICg1MDAwMDAwMFVMKQotI2lmIDEKLSNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQktMQkvKiBhdXRvYm9vdCBkaXNhYmxlZAkJKi8KLSNlbHNlCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkvKiBhdXRvYm9vdCBhZnRlciA1IHNlY29uZHMJKi8KLSNlbmRpZgotI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJImJvb3RtIDIwMDAwIiAvKiBhdXRvYm9vdCBjb21tYW5kCSovCi0KLSNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCQkicm9vdD0vZGV2L25mcyBydyAiCQkJXAotCQkJCSJuZnNyb290PTEwLjAuMC4yOi9vcHQvZWxkay9wcGNfOHh4ICIJXAotCQkJCSJuZnNhZGRycz0xMC4wLjAuOTk6MTAuMC4wLjIiCi0KLSNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JMQkvKiBlY2hvIG9uIGZvciBzZXJpYWwgZG93bmxvYWQJKi8KLSN1bmRlZglDT05GSUdfU1lTX0xPQURTX0JBVURfQ0hBTkdFICAgLyogZG9uJ3QgYWxsb3cgYmF1ZHJhdGUgY2hhbmdlCSovCi0KLSN1bmRlZglDT05GSUdfV0FUQ0hET0cJCQkvKiB3YXRjaGRvZyBkaXNhYmxlZAkJKi8KLQotCi0vKgotICogQk9PVFAgb3B0aW9ucwotICovCi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09URklMRVNJWkUKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RQQVRICi0jZGVmaW5lIENPTkZJR19CT09UUF9HQVRFV0FZCi0jZGVmaW5lIENPTkZJR19CT09UUF9IT1NUTkFNRQotCi0KLS8qCi0gKiBDb21tYW5kIGxpbmUgY29uZmlndXJhdGlvbi4KLSAqLwotI2RlZmluZSBDT05GSUdfQ01EX05FVAotI2RlZmluZSBDT05GSUdfQ01EX1NEUkFNCi0jZGVmaW5lIENPTkZJR19DTURfUENNQ0lBCi0jZGVmaW5lIENPTkZJR19DTURfSURFCi0KLQotI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgotCi0vKgotICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KLSN1bmRlZglDT05GSUdfU1lTX0hVU0hfUEFSU0VSCQkJLyogSHVzaCBwYXJzZSBmb3IgVS1Cb290CSovCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCTEwMjQJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCi0jZWxzZQotI2RlZmluZSBDT05GSUdfU1lTX0NCU0laRQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCi0jZW5kaWYKLSNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUgKENPTkZJR19TWVNfQ0JTSVpFK3NpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQlDT05GSUdfU1lTX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplCSovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4MDQwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCi0jZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCTB4MEMwMDAwMAkvKiA0IC4uLiAxMiBNQiBpbiBEUkFNCSovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIJCTB4MTAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCi0KLS8qCi0gKiBMb3cgTGV2ZWwgQ29uZmlndXJhdGlvbiBTZXR0aW5ncwotICogKGFkZHJlc3MgbWFwcGluZ3MsIHJlZ2lzdGVyIGluaXRpYWwgdmFsdWVzLCBldGMuKQotICogWW91IHNob3VsZCBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBpZiB5b3UgbWFrZSBjaGFuZ2VzIGhlcmUuCi0gKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUGh5c2ljYWwgbWVtb3J5IG1hcCBhcyBkZWZpbmVkIGJ5IHRoZSBNQlggUEdNCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JTU1SCQkweEZBMjAwMDAwIC8qIEludGVybmFsIE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXIqLwotI2RlZmluZSBDT05GSUdfU1lTX05WUkFNX0JBU0UJCTB4RkEwMDAwMDAgLyogTlZSQU0JCQkgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfTlZSQU1fT1IJCTB4ZmZlMDAwMDAgLyogdy9vIHNwZWVkIGRlcGVuZGVudCBmbGFncyEhICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfQ1NSX0JBU0UJCTB4RkExMDAwMDAgLyogQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXJzCSAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lNRU1fQkFTRQkJMHg4MDAwMDAwMCAvKiBQQ0kgSS9PIGFuZCBNZW1vcnkgU3BhY2VzCSAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lNRU1fT1IJCTB4QTAwMDAxMDgKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lCUklER0VfQkFTRQkweEZBMjEwMDAwIC8qIFBDSS1CdXMgQnJpZGdlIFJlZ2lzdGVycwkgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfUENJQlJJREdFX09SCTB4RkZGRjAxMDgKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRGVmaW5pdGlvbnMgZm9yIGluaXRpYWwgc3RhY2sgcG9pbnRlciBhbmQgZGF0YSBhcmVhIChpbiBEUFJBTSkKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX0FERFIJQ09ORklHX1NZU19JTU1SCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fU0laRQkweDJmMDAJLyogU2l6ZSBvZiB1c2VkIGFyZWEgaW4gRFBSQU0JKi8KLSNkZWZpbmUgQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQJKENPTkZJR19TWVNfSU5JVF9SQU1fU0laRSAtIEdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQotI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfVlBEX1NJWkUJMjU2IC8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIHZwZCBidWZmZXIgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JTklUX1ZQRF9PRkZTRVQJKENPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUIC0gQ09ORklHX1NZU19JTklUX1ZQRF9TSVpFKQotI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfT0ZGU0VUCShDT05GSUdfU1lTX0lOSVRfVlBEX09GRlNFVC04KQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBPZmZzZXQgaW4gRFBNRU0gd2hlcmUgd2Uga2VlcCB0aGUgVlBEIGRhdGEKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0RQUkFNVlBECQkoQ09ORklHX1NZU19JTklUX1ZQRF9PRkZTRVQgLSAweDIwMDApCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFN0YXJ0IGFkZHJlc3NlcyBmb3IgdGhlIGZpbmFsIG1lbW9yeSBjb25maWd1cmF0aW9uCi0gKiAoU2V0IHVwIGJ5IHRoZSBzdGFydHVwIGNvZGUpCi0gKiBQbGVhc2Ugbm90ZSB0aGF0IENPTkZJR19TWVNfU0RSQU1fQkFTRSBfbXVzdF8gc3RhcnQgYXQgMAotICovCi0jZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UJCTB4ZmUwMDAwMDAKLSNpZmRlZglERUJVRwotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uaXRvcgkqLwotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDI1NiA8PCAxMCkJLyogUmVzZXJ2ZSAyNTYga0IgZm9yIE1vbml0b3IJKi8KLSNlbmRpZgotI3VuZGVmCUNPTkZJR19TWVNfTU9OSVRPUl9CQVNFCS8qIDB4MjAwMDAwCSAgIHRvIHJ1biBVLUJvb3QgZnJvbSBSQU0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UJQ09ORklHX1NZU19GTEFTSF9CQVNFCi0jZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDEyOCA8PCAxMCkJLyogUmVzZXJ2ZSAxMjgga0IgZm9yIG1hbGxvYygpCSovCi0KLS8qCi0gKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCi0gKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcwotICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfQk9PVE1BUFNaCQkoOCA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGTEFTSCBvcmdhbml6YXRpb24KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLwotI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUCTE2CS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKQkqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykJKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTlZSQU0gQ29uZmlndXJhdGlvbgotICoKLSAqIE5vdGU6IHRoZSBNQlggaXMgc3BlY2lhbCBiZWNhdXNlIHRoZXJlIGlzIGFscmVhZHkgYSBmaXJtd2FyZSBvbiB0aGlzCi0gKiBib2FyZDogRVBQQy1CdWcgZnJvbSBNb3Rvcm9sYS4gVG8gYXZvaWQgY29sbGlzaW9ucyBpbiBOVlJBTSBVc2FnZSwgd2UKLSAqIGFjY2VzcyB0aGUgTlZSQU0gYXQgdGhlIG9mZnNldCAweDEwMDAuCi0gKi8KLSNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9OVlJBTQkxCS8qIHR1cm4gb24gTlZSQU0gZW52IGZlYXR1cmUgKi8KLSNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkoQ09ORklHX1NZU19OVlJBTV9CQVNFICsgMHgxMDAwKQotI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCTB4MTAwMAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDYWNoZSBDb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19DQUNIRUxJTkVfU0laRQkxNgkvKiBGb3IgYWxsIE1QQzh4eCBDUFVzCQkJKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKLSNkZWZpbmUgQ09ORklHX1NZU19DQUNIRUxJTkVfU0hJRlQJNAkvKiBsb2cgYmFzZSAyIG9mIHRoZSBhYm92ZSB2YWx1ZQkqLwotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNZUENSIC0gU3lzdGVtIFByb3RlY3Rpb24gQ29udHJvbAkJCQkxMS05Ci0gKiBTWVBDUiBjYW4gb25seSBiZSB3cml0dGVuIG9uY2UgYWZ0ZXIgcmVzZXQhCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTb2Z0d2FyZSAmIEJ1cyBNb25pdG9yIFRpbWVyIG1heCwgQnVzIE1vbml0b3IgZW5hYmxlLCBTVyBXYXRjaGRvZyBmcmVlemUKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQotI2RlZmluZSBDT05GSUdfU1lTX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgXAotCQkJIFNZUENSX1NXRSAgfCBTWVBDUl9TV1JJfCBTWVBDUl9TV1ApCi0jZWxzZQotI2RlZmluZSBDT05GSUdfU1lTX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGKQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNJVU1DUiAtIFNJVSBNb2R1bGUgQ29uZmlndXJhdGlvbgkJCQkxMS02Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQQ01DSUEgY29uZmlnLiwgbXVsdGktZnVuY3Rpb24gcGluIHRyaS1zdGF0ZQotICovCi0vKiAjZGVmaW5lIENPTkZJR19TWVNfU0lVTUNSCShTSVVNQ1JfREJHQzExIHwgU0lVTUNSX0RQQyB8IFNJVU1DUl9NTFJDMTAgfCBTSVVNQ1JfU0VNRSkgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19TSVVNQ1IJKFNJVU1DUl9EQkdDMTEgfCBTSVVNQ1JfRFBDIHwgU0lVTUNSX01MUkMxMSB8IFNJVU1DUl9TRU1FIHwgU0lVTUNSX0JTQyApCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRCU0NSIC0gVGltZSBCYXNlIFN0YXR1cyBhbmQgQ29udHJvbAkJCQkxMS0yNgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgUmVmZXJlbmNlIEludGVycnVwdCBTdGF0dXMsIFRpbWViYXNlIGZyZWV6aW5nIGVuYWJsZWQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1RCU0NSCShUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRikKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sCQkxMS0zMQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cywgSW50ZXJydXB0IFRpbWVyIGZyZWV6aW5nIGVuYWJsZWQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BJU0NSCShQSVNDUl9QUyB8IFBJU0NSX1BJVEYgfCBQSVNDUl9QVEUpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBMUFJDUiAtIFBMTCwgTG93LVBvd2VyLCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlcgkJMTUtMzAKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFJlc2V0IFBMTCBsb2NrIHN0YXR1cyBzdGlja3kgYml0LCB0aW1lciBleHBpcmVkIHN0YXR1cyBiaXQgYW5kIHRpbWVyCi0gKiBpbnRlcnJ1cHQgc3RhdHVzIGJpdCAtIGxlYXZlIFBMTCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgdW5jaGFuZ2VkICEKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BMUFJDUgkoUExQUkNSX1NQTFNTIHwgUExQUkNSX1RFWFBTIHwgUExQUkNSX1RNSVNUKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTQ0NSIC0gU3lzdGVtIENsb2NrIGFuZCByZXNldCBDb250cm9sIFJlZ2lzdGVyCQkxNS0yNwotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU2V0IGNsb2NrIG91dHB1dCwgdGltZWJhc2UgYW5kIFJUQyBzb3VyY2UgYW5kIGRpdmlkZXIsCi0gKiBwb3dlciBtYW5hZ2VtZW50IGFuZCBzb21lIG90aGVyIGludGVybmFsIGNsb2NrcwotICovCi0jZGVmaW5lIFNDQ1JfTUFTSwkoU0NDUl9SVERJViB8IFNDQ1JfUlRTRUwpCi0jZGVmaW5lIENPTkZJR19TWVNfU0NDUglTQ0NSX1RCUwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQQ01DSUEgc3R1ZmYKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QQ01DSUFfTUVNX0FERFIJKDB4RTAwMDAwMDApCi0jZGVmaW5lIENPTkZJR19TWVNfUENNQ0lBX01FTV9TSVpFCSggNjQgPDwgMjAgKQotI2RlZmluZSBDT05GSUdfU1lTX1BDTUNJQV9ETUFfQUREUgkoMHhFNDAwMDAwMCkKLSNkZWZpbmUgQ09ORklHX1NZU19QQ01DSUFfRE1BX1NJWkUJKCA2NCA8PCAyMCApCi0jZGVmaW5lIENPTkZJR19TWVNfUENNQ0lBX0FUVFJCX0FERFIJKDB4RTgwMDAwMDApCi0jZGVmaW5lIENPTkZJR19TWVNfUENNQ0lBX0FUVFJCX1NJWkUJKCA2NCA8PCAyMCApCi0jZGVmaW5lIENPTkZJR19TWVNfUENNQ0lBX0lPX0FERFIJKDB4RUMwMDAwMDApCi0jZGVmaW5lIENPTkZJR19TWVNfUENNQ0lBX0lPX1NJWkUJKCA2NCA8PCAyMCApCi0KLSNkZWZpbmUgQ09ORklHX1NZU19QQ01DSUFfSU5URVJSVVBUCVNJVV9MRVZFTDYKLQotI2RlZmluZSBDT05GSUdfUENNQ0lBX1NMT1RfQQkxCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogSURFL0FUQSBzdHVmZiAoU3VwcG9ydHMgSURFIGhhcmRkaXNrIG9uIFBDTUNJQSBBZGFwdGVyKQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNkZWZpbmUgQ09ORklHX0lERV9QUkVJTklUCTEJLyogVXNlIHByZWluaXQgSURFIGhvb2sgKi8KLSNkZWZpbmUgQ09ORklHX0lERV84eHhfUENDQVJECTEJLyogVXNlIElERSB3aXRoIFBDIENhcmQgQWRhcHRlciAqLwotCi0jdW5kZWYJQ09ORklHX0lERV84eHhfRElSRUNUCQkvKiBEaXJlY3QgSURFCSBub3Qgc3VwcG9ydGVkCSovCi0jdW5kZWYJQ09ORklHX0lERV9MRUQJCQkvKiBMRUQJIGZvciBpZGUgbm90IHN1cHBvcnRlZAkqLwotI3VuZGVmCUNPTkZJR19JREVfUkVTRVQJCS8qIHJlc2V0IGZvciBpZGUgbm90IHN1cHBvcnRlZAkqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfSURFX01BWEJVUwkJMQkvKiBtYXguIDEgSURFIGJ1cwkJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JREVfTUFYREVWSUNFCTEJLyogbWF4LiAxIGRyaXZlIHBlciBJREUgYnVzCSovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19BVEFfSURFMF9PRkZTRVQJMHgwMDAwCi0KLSNkZWZpbmUgQ09ORklHX1NZU19BVEFfQkFTRV9BRERSCUNPTkZJR19TWVNfUENNQ0lBX01FTV9BRERSCi0KLS8qIE9mZnNldCBmb3IgZGF0YSBJL08gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19BVEFfREFUQV9PRkZTRVQJKENPTkZJR19TWVNfUENNQ0lBX01FTV9TSVpFICsgMHgzMjApCi0KLS8qIE9mZnNldCBmb3Igbm9ybWFsIHJlZ2lzdGVyIGFjY2Vzc2VzICovCi0jZGVmaW5lIENPTkZJR19TWVNfQVRBX1JFR19PRkZTRVQJKDIgKiBDT05GSUdfU1lTX1BDTUNJQV9NRU1fU0laRSArIDB4MzIwKQotCi0vKiBPZmZzZXQgZm9yIGFsdGVybmF0ZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19BVEFfQUxUX09GRlNFVAkweDAxMDAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRGVidWcgRW50cnkgTW9kZQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0RFUiAwCi0KLSNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTUJYODYwVC5oIGIvaW5jbHVkZS9jb25maWdzL01CWDg2MFQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRmNDRkZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTUJYODYwVC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzk1ICswLDAgQEAKLSAvKgotICAqIEEgY29sbGVjdGlvbiBvZiBzdHJ1Y3R1cmVzLCBhZGRyZXNzZXMsIGFuZCB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoCi0gICogdGhlIE1vdG9yb2xhIDg2MFQgTUJYIGJvYXJkLgotICAqIENvcGllZCBmcm9tIHRoZSBGQURTIHN0dWZmLCB3aGljaCB3YXMgb3JpZ2luYWxseSBjb3BpZWQgZnJvbSB0aGUgTUJYIHN0dWZmIQotICAqIE1hZ251cyBEYW1tIGFkZGVkIGRlZmluZXMgZm9yIDh4eHJvbSBhbmQgZXh0ZW5kZWQgYmRfaW5mby4KLSAgKiBIZWxtdXQgQnVjaHNiYXVtIGFkZGVkIGJpdHZhbHVlcyBmb3IgQkNTUngKLSAgKiBSb2IgVGF5bG9yIGNvdmVydGVkIGl0IGJhY2sgdG8gTUJYCi0gICoKLSAgKiBDb3B5cmlnaHQgKGMpIDE5OTggRGFuIE1hbGVrIChkbWFsZWtAamxjLm5ldCkKLSAgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogYm9hcmQvY29uZmlnLmggLSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJvYXJkIHNwZWNpZmljCi0gKi8KLQotI2lmbmRlZiBfX0NPTkZJR19ICi0jZGVmaW5lIF9fQ09ORklHX0gKLQotLyoKLSAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCi0gKiAoZWFzeSB0byBjaGFuZ2UpCi0gKi8KLSNpbmNsdWRlIDxtcGM4eHhfaXJxLmg+Ci0KLSNkZWZpbmUgQ09ORklHX01QQzg2MAkJMQotI2RlZmluZSBDT05GSUdfTVBDODYwVAkJMQotI2RlZmluZSBDT05GSUdfTUJYCQkxCi0KLSNkZWZpbmUJQ09ORklHX1NZU19URVhUX0JBU0UJMHhmZTAwMDAwMAotCi0jZGVmaW5lIENPTkZJR184eHhfQ1BVQ0xPQ0sJNDAKLSNkZWZpbmUgQ09ORklHXzh4eF9CVVNDTE9DSwkoQ09ORklHXzh4eF9DUFVDTE9DSykKLSNkZWZpbmUgVEFSR0VUX1NZU1RFTV9GUkVRVUVOQ1kgNDAKLQotI2RlZmluZQlDT05GSUdfOHh4X0NPTlNfU01DMQkxCS8qIENvbnNvbGUgaXMgb24gU01DMQkJKi8KLSN1bmRlZglDT05GSUdfOHh4X0NPTlNfU01DMgotI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTk2MDAKLQotI2RlZmluZSBNUEM4WFhfRkFDVAkxMAkJCQkvKiBNdWx0aXBseSBieSAxMAkJKi8KLSNkZWZpbmUgTVBDOFhYX1hJTgk0MDAwMDAwMAkJLyogNTAgTUh6IGluCSovCi0jZGVmaW5lIE1QQzhYWF9IWiAoKE1QQzhYWF9YSU4pICogKE1QQzhYWF9GQUNUKSkKLQotI2RlZmluZQlDT05GSUdfQ0xPQ0tTX0lOX01IWgkxCS8qIGNsb2NrcyBwYXNzc2VkIHRvIExpbnV4IGluIE1IeiAqLwotCi0jaWYgMQotI2RlZmluZSBDT05GSUdfOHh4X0JPT1RERUxBWQktMQkvKiBhdXRvYm9vdCBkaXNhYmxlZAkJKi8KLSNkZWZpbmUgQ09ORklHXzh4eF9URlRQX01PREUKLSNlbHNlCi0jZGVmaW5lIENPTkZJR184eHhfQk9PVERFTEFZCTUJLyogYXV0b2Jvb3QgYWZ0ZXIgNSBzZWNvbmRzCSovCi0jdW5kZWYJQ09ORklHXzh4eF9URlRQX01PREUKLSNlbmRpZgotCi0jZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgotCi0jZGVmaW5lIENPTkZJR19EUkFNX1NQRUVECShDT05GSUdfOHh4X0JVU0NMT0NLKQkvKiBNSHoJCSovCi0jZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiYm9vdG0gRkUwMjAwMDAiCS8qIGF1dG9ib290IGNvbW1hbmQgKi8KLSNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCQkiICIKLS8qCi0gKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCi0gKi8KLSN1bmRlZglDT05GSUdfU1lTX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCi0jZGVmaW5lCUNPTkZJR19TWVNfUFJPTVBUCQkiOj4iCQkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0CSovCi0jZGVmaW5lCUNPTkZJR19TWVNfQ0JTSVpFCQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCi0jZGVmaW5lCUNPTkZJR19TWVNfUEJTSVpFCQkoQ09ORklHX1NZU19DQlNJWkUrc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUJQ09ORklHX1NZU19NQVhBUkdTCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLwotI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCUNPTkZJR19TWVNfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQJMHgwNDAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHgwODAwMDAwCS8qIDQgLi4uIDggTUIgaW4gRFJBTQkqLwotCi0jZGVmaW5lCUNPTkZJR19TWVNfTE9BRF9BRERSCQkweDEwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcwkqLwotCi0vKgotICogTG93IExldmVsIENvbmZpZ3VyYXRpb24gU2V0dGluZ3MKLSAqIChhZGRyZXNzIG1hcHBpbmdzLCByZWdpc3RlciBpbml0aWFsIHZhbHVlcywgZXRjLikKLSAqIFlvdSBzaG91bGQga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgaWYgeW91IG1ha2UgY2hhbmdlcyBoZXJlLgotICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBJbnRlcm5hbCBNZW1vcnkgTWFwcGVkIFJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JTU1SCQkJMHhGRkEwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0lNTVJfU0laRQkJKCh1aW50KSg2NCAqIDEwMjQpKQotI2RlZmluZSBDT05GSUdfU1lTX05WUkFNX0JBU0UJCTB4RkEwMDAwMDAgLyogTlZSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfTlZSQU1fT1IJCTB4ZmZlMDAwMDAgLyogdy9vIHNwZWVkIGRlcGVuZGVudCBmbGFncyEhICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfQ1NSX0JBU0UJCTB4RkExMDAwMDAgLyogQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXJzICAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfUENJTUVNX0JBU0UJCTB4ODAwMDAwMDAgLyogUENJIEkvTyBhbmQgTWVtb3J5IFNwYWNlcyAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfUENJTUVNX09SCQkweEEwMDAwMTA4Ci0jZGVmaW5lIENPTkZJR19TWVNfUENJQlJJREdFX0JBU0UJMHhGQTIxMDAwMCAvKiBQQ0ktQnVzIEJyaWRnZSBSZWdpc3RlcnMgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lCUklER0VfT1IJMHhGRkZGMDEwOAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIERQUkFNKQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fQUREUglDT05GSUdfU1lTX0lNTVIKLSNkZWZpbmUJQ09ORklHX1NZU19JTklUX1JBTV9TSVpFCTB4MmYwMAkvKiBTaXplIG9mIHVzZWQgYXJlYSBpbiBEUFJBTQkqLwotI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAkoQ09ORklHX1NZU19JTklUX1JBTV9TSVpFIC0gR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCi0jZGVmaW5lCUNPTkZJR19TWVNfSU5JVF9WUERfU0laRQkyNTYgLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgdnBkIGJ1ZmZlciAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfVlBEX09GRlNFVAkoQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQgLSBDT05GSUdfU1lTX0lOSVRfVlBEX1NJWkUpCi0jZGVmaW5lCUNPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJKENPTkZJR19TWVNfSU5JVF9WUERfT0ZGU0VULTgpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIE9mZnNldCBpbiBEUE1FTSB3aGVyZSB3ZSBrZWVwIHRoZSBWUEQgZGF0YQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfRFBSQU1WUEQJCShDT05GSUdfU1lTX0lOSVRfVlBEX09GRlNFVCAtIDB4MjAwMCkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU3RhcnQgYWRkcmVzc2VzIGZvciB0aGUgZmluYWwgbWVtb3J5IGNvbmZpZ3VyYXRpb24KLSAqIChTZXQgdXAgYnkgdGhlIHN0YXJ0dXAgY29kZSkKLSAqIFBsZWFzZSBub3RlIHRoYXQgQ09ORklHX1NZU19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCi0gKi8KLSNkZWZpbmUJQ09ORklHX1NZU19TRFJBTV9CQVNFCQkweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRQkJMHgwMDAwMDAwMAotLyoweEZFMDAwMDAwKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9TSVpFCQkoKHVpbnQpKDggKiAxMDI0ICogMTAyNCkpCS8qIG1heCA4TWJ5dGUgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UJQ09ORklHX1NZU19GTEFTSF9CQVNFCi0jZGVmaW5lCUNPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSgyNTYgPDwgMTApCS8qIFJlc2VydmUgMjU2IGtCIGZvciBNb25pdG9yCSovCi0jZGVmaW5lIENPTkZJR19TWVNfSFdJTkZPX0FERFIJCShDT05GSUdfU1lTX0ZMQVNIX0JBU0UgKyBDT05GSUdfU1lTX01PTklUT1JfTEVOIC0gQ09ORklHX1NZU19IV0lORk9fTEVOKQotI2RlZmluZQlDT05GSUdfU1lTX01BTExPQ19MRU4JCSgyNTYgPDwgMTApCS8qIFJlc2VydmUgMjU2IGtCIGZvciBtYWxsb2MoKQkqLwotCi0vKgotICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQotICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKLSAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLSAqLwotI2RlZmluZQlDT05GSUdfU1lTX0JPT1RNQVBTWgkJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgJKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRkxBU0ggb3JnYW5pemF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MJNAkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcwkJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVAkxNgkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAJKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIE5WUkFNIENvbmZpZ3VyYXRpb24KLSAqCi0gKiBOb3RlOiB0aGUgTUJYIGlzIHNwZWNpYWwgYmVjYXVzZSB0aGVyZSBpcyBhbHJlYWR5IGEgZmlybXdhcmUgb24gdGhpcwotICogYm9hcmQ6IEVQUEMtQnVnIGZyb20gTW90b3JvbGEuIFRvIGF2b2lkIGNvbGxpc2lvbnMgaW4gTlZSQU0gVXNhZ2UsIHdlCi0gKiBhY2Nlc3MgdGhlIE5WUkFNIGF0IHRoZSBvZmZzZXQgMHgxMDAwLgotICovCi0jZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fTlZSQU0JMQkvKiB0dXJuIG9uIE5WUkFNIGVudiBmZWF0dXJlICovCi0jZGVmaW5lIENPTkZJR19FTlZfQUREUgkJKENPTkZJR19TWVNfTlZSQU1fQkFTRSArIDB4MTAwMCkKLSNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkweDEwMDAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2FjaGUgQ29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfQ0FDSEVMSU5FX1NJWkUJMTYJLyogRm9yIGFsbCBNUEM4eHggQ1BVcwkJCSovCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lIENPTkZJR19TWVNfQ0FDSEVMSU5FX1NISUZUCTQJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUJKi8KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTWVBDUiAtIFN5c3RlbSBQcm90ZWN0aW9uIENvbnRyb2wJCQkJMTEtOQotICogU1lQQ1IgY2FuIG9ubHkgYmUgd3JpdHRlbiBvbmNlIGFmdGVyIHJlc2V0IQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU29mdHdhcmUgJiBCdXMgTW9uaXRvciBUaW1lciBtYXgsIEJ1cyBNb25pdG9yIGVuYWJsZSwgU1cgV2F0Y2hkb2cgZnJlZXplCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKLSNkZWZpbmUgQ09ORklHX1NZU19TWVBDUgkoU1lQQ1JfU1dUQyB8IFNZUENSX0JNVCB8IFNZUENSX0JNRSB8IFNZUENSX1NXRiB8IFwKLQkJCSBTWVBDUl9TV0UgIHwgU1lQQ1JfU1dSSXwgU1lQQ1JfU1dQKQotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX1NZU19TWVBDUgkoU1lQQ1JfU1dUQyB8IFNZUENSX0JNVCB8IFNZUENSX0JNRSB8IFNZUENSX1NXRikKLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTSVVNQ1IgLSBTSVUgTW9kdWxlIENvbmZpZ3VyYXRpb24JCQkJMTEtNgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUENNQ0lBIGNvbmZpZy4sIG11bHRpLWZ1bmN0aW9uIHBpbiB0cmktc3RhdGUKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1NJVU1DUgkoU0lVTUNSX0RCR0MxMSB8IFNJVU1DUl9EUEMgfCBTSVVNQ1JfTUxSQzEwIHwgU0lVTUNSX1NFTUUpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRCU0NSIC0gVGltZSBCYXNlIFN0YXR1cyBhbmQgQ29udHJvbAkJCQkxMS0yNgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgUmVmZXJlbmNlIEludGVycnVwdCBTdGF0dXMsIFRpbWViYXNlIGZyZWV6aW5nIGVuYWJsZWQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1RCU0NSCShUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRikKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sCQkxMS0zMQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cywgSW50ZXJydXB0IFRpbWVyIGZyZWV6aW5nIGVuYWJsZWQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BJU0NSCShQSVNDUl9QUyB8IFBJU0NSX1BJVEYgfCBQSVNDUl9QVEUpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBMUFJDUiAtIFBMTCwgTG93LVBvd2VyLCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlcgkJMTUtMzAKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFJlc2V0IFBMTCBsb2NrIHN0YXR1cyBzdGlja3kgYml0LCB0aW1lciBleHBpcmVkIHN0YXR1cyBiaXQgYW5kIHRpbWVyCi0gKiBpbnRlcnJ1cHQgc3RhdHVzIGJpdCAtIGxlYXZlIFBMTCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgdW5jaGFuZ2VkICEKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BMUFJDUgkoUExQUkNSX1NQTFNTIHwgUExQUkNSX1RFWFBTIHwgUExQUkNSX1RNSVNUKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTQ0NSIC0gU3lzdGVtIENsb2NrIGFuZCByZXNldCBDb250cm9sIFJlZ2lzdGVyCQkxNS0yNwotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU2V0IGNsb2NrIG91dHB1dCwgdGltZWJhc2UgYW5kIFJUQyBzb3VyY2UgYW5kIGRpdmlkZXIsCi0gKiBwb3dlciBtYW5hZ2VtZW50IGFuZCBzb21lIG90aGVyIGludGVybmFsIGNsb2NrcwotICovCi0jZGVmaW5lIFNDQ1JfTUFTSwkoU0NDUl9SVERJViB8IFNDQ1JfUlRTRUwpCi0jZGVmaW5lIENPTkZJR19TWVNfU0NDUglTQ0NSX1RCUwotCi0gLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19ERVIJCTAKLQotLyogQmVjYXVzZSBvZiB0aGUgd2F5IHRoZSA4NjAgc3RhcnRzIHVwIGFuZCBhc3NpZ25zIENTMCB0aGUKLSogZW50aXJlIGFkZHJlc3Mgc3BhY2UsIHdlIGhhdmUgdG8gc2V0IHRoZSBtZW1vcnkgY29udHJvbGxlcgotKiBkaWZmZXJlbnRseS4gIE5vcm1hbGx5LCB5b3Ugd3JpdGUgdGhlIG9wdGlvbiByZWdpc3RlcgotKiBmaXJzdCwgYW5kIHRoZW4gZW5hYmxlIHRoZSBjaGlwIHNlbGVjdCBieSB3cml0aW5nIHRoZQotKiBiYXNlIHJlZ2lzdGVyLiAgRm9yIENTMCwgeW91IG11c3Qgd3JpdGUgdGhlIGJhc2UgcmVnaXN0ZXIKLSogZmlyc3QsIGZvbGxvd2VkIGJ5IHRoZSBvcHRpb24gcmVnaXN0ZXIuCi0qLwotCi0vKgotICogSW5pdCBNZW1vcnkgQ29udHJvbGxlcjoKLSAqCi0gKiBCUjAvMSBhbmQgT1IwLzEgKEZMQVNIKQotICovCi0vKiB0aGUgb3RoZXIgQ1M6cyBhcmUgZGV0ZXJtaW5lZCBieSBsb29raW5nIGF0IHBhcmFtZXRlcnMgaW4gQkNTUnggKi8KLQotCi0jZGVmaW5lIEJDU1JfQUREUgkJKCh1aW50KSAweEZGMDEwMDAwKQotI2RlZmluZSBCQ1NSX1NJWkUJCSgodWludCkoNjQgKiAxMDI0KSkKLQotI2RlZmluZSBGTEFTSF9CQVNFMF9QUkVMSU0JMHhGRTAwMDAwMAkvKiBGTEFTSCBiYW5rICMwCSovCi0jZGVmaW5lIEZMQVNIX0JBU0UxX1BSRUxJTQkweEZGMDEwMDAwCS8qIEZMQVNIIGJhbmsgIzAJKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX1JFTUFQX09SX0FNCQkweDgwMDAwMDAwCS8qIE9SIGFkZHIgbWFzayAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BSRUxJTV9PUl9BTQkweEZGRjAwMDAwCS8qIE9SIGFkZHIgbWFzayAqLwotCi0vKiBGTEFTSCB0aW1pbmc6IEFDUyA9IDEwLCBUUkxYID0gMSwgQ1NOVCA9IDEsIFNDWSA9IDMsIEVIVFIgPSAwCSovCi0jZGVmaW5lIENPTkZJR19TWVNfT1JfVElNSU5HX0ZMQVNICShPUl9DU05UX1NBTSAgfCBPUl9BQ1NfRElWNCB8IE9SX0JJIHwgT1JfU0NZXzNfQ0xLIHwgT1JfVFJMWCkKLQotI2RlZmluZSBDT05GSUdfU1lTX09SMF9SRU1BUAkoQ09ORklHX1NZU19SRU1BUF9PUl9BTSAgfCBDT05GSUdfU1lTX09SX1RJTUlOR19GTEFTSCkKLSNkZWZpbmUgQ09ORklHX1NZU19PUjBfUFJFTElNCSgweEZGODAwMDAwIHwgT1JfQ1NOVF9TQU0gfCBPUl9CSSB8IE9SX1NDWV8zX0NMSykgICAvKiAxIE1ieXRlIHVudGlsIGRldGVjdGVkIGFuZCBvbmx5IDEgTWJ5dGUgaXMgbmVlZGVkKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CUjBfUFJFTElNCSgweEZFMDAwMDAwIHwgQlJfViApCi0KLS8qIEJDU1J4IC0gQm9hcmQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVycyAqLwotI2RlZmluZSBDT05GSUdfU1lTX09SMV9SRU1BUAlDT05GSUdfU1lTX09SMF9SRU1BUAotI2RlZmluZSBDT05GSUdfU1lTX09SMV9QUkVMSU0JMHhGRkMwMDAwMCB8IE9SX0FDU19ESVY0Ci0jZGVmaW5lIENPTkZJR19TWVNfQlIxX1BSRUxJTQkoMHgwMDAwMDAwMCB8IEJSX01TX1VQTUEgfCBCUl9WICkKLQotCi0vKgotICogTWVtb3J5IFBlcmlvZGljIFRpbWVyIFByZXNjYWxlcgotICovCi0KLS8qIHBlcmlvZGljIHRpbWVyIGZvciByZWZyZXNoICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFNUl9QVEEJCTk3CQkvKiBzdGFydCB3aXRoIGRpdmlkZXIgZm9yIDEwMCBNSHoJKi8KLQotLyogcmVmcmVzaCByYXRlIDE1LjYgdXMgKD0gNjQgbXMgLyA0SyA9IDYyLjQgLyBxdWFkIGJ1cnN0cykgZm9yIDw9IDEyOCBNQml0CSovCi0jZGVmaW5lIENPTkZJR19TWVNfTVBUUFJfMkJLXzRLCU1QVFBSX1BUUF9ESVYxNgkJLyogc2V0dGluZyBmb3IgMiBiYW5rcwkqLwotI2RlZmluZSBDT05GSUdfU1lTX01QVFBSXzFCS180SwlNUFRQUl9QVFBfRElWMzIJCS8qIHNldHRpbmcgZm9yIDEgYmFuawkqLwotCi0vKiByZWZyZXNoIHJhdGUgNy44IHVzICg9IDY0IG1zIC8gOEsgPSAzMS4yIC8gcXVhZCBidXJzdHMpIGZvciAyNTYgTUJpdAkJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NUFRQUl8yQktfOEsJTVBUUFJfUFRQX0RJVjgJCS8qIHNldHRpbmcgZm9yIDIgYmFua3MJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NUFRQUl8xQktfOEsJTVBUUFJfUFRQX0RJVjE2CQkvKiBzZXR0aW5nIGZvciAxIGJhbmsJKi8KLQotLyoKLSAqIE1BTVIgc2V0dGluZ3MgZm9yIFNEUkFNCi0gKi8KLQotLyogOCBjb2x1bW4gU0RSQU0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQU1SXzhDT0wJKChDT05GSUdfU1lTX01BTVJfUFRBIDw8IE1BTVJfUFRBX1NISUZUKSAgfCBNQU1SX1BUQUUJICAgIHwJXAotCQkJIE1BTVJfQU1BX1RZUEVfMCB8IE1BTVJfRFNBXzFfQ1lDTCB8IE1BTVJfRzBDTEFfQTExIHwJXAotCQkJIE1BTVJfUkxGQV8xWAkgfCBNQU1SX1dMRkFfMVgJICAgfCBNQU1SX1RMRkFfNFgpCi0vKiA5IGNvbHVtbiBTRFJBTSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BTVJfOUNPTAkoKENPTkZJR19TWVNfTUFNUl9QVEEgPDwgTUFNUl9QVEFfU0hJRlQpICB8IE1BTVJfUFRBRQkgICAgfAlcCi0JCQkgTUFNUl9BTUFfVFlQRV8xIHwgTUFNUl9EU0FfMV9DWUNMIHwgTUFNUl9HMENMQV9BMTAgfAlcCi0JCQkgTUFNUl9STEZBXzFYCSB8IE1BTVJfV0xGQV8xWAkgICB8IE1BTVJfVExGQV80WCkKLQotI2RlZmluZSBDT05GSUdfU1lTX01BTVIJCTB4MTM4MjEwMDAKLQotLyogdmFsdWVzIGFjY29yZGluZyB0byB0aGUgbWFudWFsICovCi0KLQotI2RlZmluZSBQQ01DSUFfTUVNX0FERFIJCSgodWludCkweGZmMDIwMDAwKQotI2RlZmluZSBQQ01DSUFfTUVNX1NJWkUJCSgodWludCkoNjQgKiAxMDI0KSkKLQotI2RlZmluZQlCQ1NSMAkJCSgodWludCkgKEJDU1JfQUREUiArIDAwKSkKLSNkZWZpbmUJQkNTUjEJCQkoKHVpbnQpIChCQ1NSX0FERFIgKyAweDA0KSkKLSNkZWZpbmUJQkNTUjIJCQkoKHVpbnQpIChCQ1NSX0FERFIgKyAweDA4KSkKLSNkZWZpbmUJQkNTUjMJCQkoKHVpbnQpIChCQ1NSX0FERFIgKyAweDBjKSkKLSNkZWZpbmUJQkNTUjQJCQkoKHVpbnQpIChCQ1NSX0FERFIgKyAweDEwKSkKLQotLyogRkFEUyBiaXR2YWx1ZXMgYnkgSGVsbXV0IEJ1Y2hzYmF1bQotICogc2VlIE1QQzh4eEFEUyBVc2VyJ3MgTWFudWFsIGZvciBhIHByb3BlciBkZXNjcmlwdGlvbgotICogb2YgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzCi0gKi8KLQotI2RlZmluZSBCQ1NSMF9FUkIgICAgICAgKCh1aW50KTB4ODAwMDAwMDApCi0jZGVmaW5lIEJDU1IwX0lQICAgICAgICAoKHVpbnQpMHg0MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjBfQkRJUyAgICAgICgodWludCkweDEwMDAwMDAwKQotI2RlZmluZSBCQ1NSMF9CUFNfTUFTSyAgKCh1aW50KTB4MEMwMDAwMDApCi0jZGVmaW5lIEJDU1IwX0lTQl9NQVNLICAoKHVpbnQpMHgwMTgwMDAwMCkKLSNkZWZpbmUgQkNTUjBfREJHQ19NQVNLICgodWludCkweDAwNjAwMDAwKQotI2RlZmluZSBCQ1NSMF9EQlBDX01BU0sgKCh1aW50KTB4MDAxODAwMDApCi0jZGVmaW5lIEJDU1IwX0VCREZfTUFTSyAoKHVpbnQpMHgwMDA2MDAwMCkKLQotI2RlZmluZSBCQ1NSMV9GTEFTSF9FTiAgICAgICAgICAgKCh1aW50KTB4ODAwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0RSQU1fRU4gICAgICAgICAgICAoKHVpbnQpMHg0MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfRVRIRU4gICAgICAgICAgICAgICgodWludCkweDIwMDAwMDAwKQotI2RlZmluZSBCQ1NSMV9JUkRFTiAgICAgICAgICAgICAgKCh1aW50KTB4MTAwMDAwMDApCi0jZGVmaW5lIEJDU1IxX0ZMQVNIX0NGR19FTiAgICAgICAoKHVpbnQpMHgwODAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfQ05UX1JFR19FTl9QUk9URUNUICgodWludCkweDA0MDAwMDAwKQotI2RlZmluZSBCQ1NSMV9CQ1NSX0VOICAgICAgICAgICAgKCh1aW50KTB4MDIwMDAwMDApCi0jZGVmaW5lIEJDU1IxX1JTMjMyRU5fMSAgICAgICAgICAoKHVpbnQpMHgwMTAwMDAwMCkKLSNkZWZpbmUgQkNTUjFfUENDRU4gICAgICAgICAgICAgICgodWludCkweDAwODAwMDAwKQotI2RlZmluZSBCQ1NSMV9QQ0NWQ0MwICAgICAgICAgICAgKCh1aW50KTB4MDA0MDAwMDApCi0jZGVmaW5lIEJDU1IxX1BDQ1ZQUF9NQVNLICAgICAgICAoKHVpbnQpMHgwMDMwMDAwMCkKLSNkZWZpbmUgQkNTUjFfRFJBTV9IQUxGX1dPUkQgICAgICgodWludCkweDAwMDgwMDAwKQotI2RlZmluZSBCQ1NSMV9SUzIzMkVOXzIgICAgICAgICAgKCh1aW50KTB4MDAwNDAwMDApCi0jZGVmaW5lIEJDU1IxX1NEUkFNX0VOICAgICAgICAgICAoKHVpbnQpMHgwMDAyMDAwMCkKLSNkZWZpbmUgQkNTUjFfUENDVkNDMSAgICAgICAgICAgICgodWludCkweDAwMDEwMDAwKQotCi0jZGVmaW5lIEJDU1IyX0ZMQVNIX1BEX01BU0sgICAgICAoKHVpbnQpMHhGMDAwMDAwMCkKLSNkZWZpbmUgQkNTUjJfRFJBTV9QRF9NQVNLICAgICAgICgodWludCkweDA3ODAwMDAwKQotI2RlZmluZSBCQ1NSMl9EUkFNX1BEX1NISUZUICAgICAgKDIzKQotI2RlZmluZSBCQ1NSMl9FWFRUT0xJX01BU0sgICAgICAgKCh1aW50KTB4MDA3ODAwMDApCi0jZGVmaW5lIEJDU1IyX0RCUkVWTlJfTUFTSyAgICAgICAoKHVpbnQpMHgwMDAzMDAwMCkKLQotI2RlZmluZSBCQ1NSM19EQklEX01BU0sgICAgICAgICAgKCh1c2hvcnQpMHgzODAwKQotI2RlZmluZSBCQ1NSM19DTlRfUkVHX0VOX1BST1RFQ1QgKCh1c2hvcnQpMHgwNDAwKQotI2RlZmluZSBCQ1NSM19CUkVWTlIwICAgICAgICAgICAgKCh1c2hvcnQpMHgwMDgwKQotI2RlZmluZSBCQ1NSM19GTEFTSF9QRF9NQVNLICAgICAgKCh1c2hvcnQpMHgwMDcwKQotI2RlZmluZSBCQ1NSM19CUkVWTjEgICAgICAgICAgICAgKCh1c2hvcnQpMHgwMDA4KQotI2RlZmluZSBCQ1NSM19CUkVWTjJfTUFTSyAgICAgICAgKCh1c2hvcnQpMHgwMDAzKQotCi0jZGVmaW5lIEJDU1I0X0VUSExPT1AgICAgICAgICAgICAoKHVpbnQpMHg4MDAwMDAwMCkKLSNkZWZpbmUgQkNTUjRfVEZQTERMICAgICAgICAgICAgICgodWludCkweDQwMDAwMDAwKQotI2RlZmluZSBCQ1NSNF9UUFNRRUwgICAgICAgICAgICAgKCh1aW50KTB4MjAwMDAwMDApCi0jZGVmaW5lIEJDU1I0X1NJR05BTF9MQU1QICAgICAgICAoKHVpbnQpMHgxMDAwMDAwMCkKLSNpZmRlZiBDT05GSUdfTVBDODIzCi0jZGVmaW5lIEJDU1I0X1VTQl9FTiAgICAgICAgICAgICAoKHVpbnQpMHgwODAwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODIzICovCi0jaWZkZWYgQ09ORklHX01QQzg2MFNBUgotI2RlZmluZSBCQ1NSNF9VVE9QSUFfRU4gICAgICAgICAgKCh1aW50KTB4MDgwMDAwMDApCi0jZW5kaWYgLyogQ09ORklHX01QQzg2MFNBUiAqLwotI2lmZGVmIENPTkZJR19NUEM4NjBUCi0jZGVmaW5lIEJDU1I0X0ZFVEhfRU4gICAgICAgICAgICAoKHVpbnQpMHgwODAwMDAwMCkKLSNlbmRpZiAvKiBDT05GSUdfTVBDODYwVCAqLwotI2RlZmluZSBCQ1NSNF9VU0JfU1BFRUQgICAgICAgICAgKCh1aW50KTB4MDQwMDAwMDApCi0jZGVmaW5lIEJDU1I0X1ZDQ08gICAgICAgICAgICAgICAoKHVpbnQpMHgwMjAwMDAwMCkKLSNkZWZpbmUgQkNTUjRfVklERU9fT04gICAgICAgICAgICgodWludCkweDAwODAwMDAwKQotI2RlZmluZSBCQ1NSNF9WRE9fRUtUX0NMS19FTiAgICAgKCh1aW50KTB4MDA0MDAwMDApCi0jZGVmaW5lIEJDU1I0X1ZJREVPX1JTVCAgICAgICAgICAoKHVpbnQpMHgwMDIwMDAwMCkKLSNkZWZpbmUgQkNTUjRfTU9ERU1fRU4gICAgICAgICAgICgodWludCkweDAwMTAwMDAwKQotI2RlZmluZSBCQ1NSNF9EQVRBX1ZPSUNFICAgICAgICAgKCh1aW50KTB4MDAwODAwMDApCi0KLSNkZWZpbmUgQ09ORklHX0RSQU1fNDBNSFoJCTEKLQotI2lmZGVmIENPTkZJR19NUEM4NjBUCi0KLS8qIEludGVycnVwdCBsZXZlbCBhc3NpZ25tZW50cy4KLSovCi0jZGVmaW5lIEZFQ19JTlRFUlJVUFQJU0lVX0xFVkVMMQkvKiBGRUMgaW50ZXJydXB0ICovCi0KLSNlbmRpZiAvKiBDT05GSUdfTVBDODYwVCAqLwotCi0vKiBXZSBkb24ndCB1c2UgdGhlIDgyNTkuCi0qLwotI2RlZmluZSBOUl84MjU5X0lOVFMJMAotCi0jZGVmaW5lIENPTkZJR19DTURfTkVUCi0vKgotICogTVBDOHh4IENQTSBPcHRpb25zCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NDQ19FTkVUIDEKLSNkZWZpbmUgQ09ORklHX1NDQzFfRU5FVCAxCi0jZGVmaW5lIENPTkZJR19GRUNfRU5FVCAxCi0jdW5kZWYgIENPTkZJR19DUE1fSUlDCi0jdW5kZWYgIENPTkZJR19VQ09ERV9QQVRDSAotCi0KLSNkZWZpbmUgQ09ORklHX0RJU0tfU1BJTlVQX1RJTUUgMTAwMDAwMAotCi0KLS8qIFBDTUNJQSBjb25maWd1cmF0aW9uICovCi0KLSNkZWZpbmUgUENNQ0lBX01BWF9TTE9UUyAgICAyCi0KLSNpZmRlZiBDT05GSUdfTVBDODYwCi0jZGVmaW5lIFBDTUNJQV9TTE9UX0EgMQotI2VuZGlmCi0KLSNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTU9VU1NFLmggYi9pbmNsdWRlL2NvbmZpZ3MvTU9VU1NFLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NGQxMmYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jb25maWdzL01PVVNTRS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIwICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBKYW1lcyBGLiBEb3VnaGVydHkgKGpmZEBjcy5zdGFuZm9yZC5lZHUpCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotLyoKLSAqCi0gKiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgTU9VU1NFIGJvYXJkLgotICogU2VlIGFsc286IGh0dHA6Ly93d3cudm9vaGEuY29tLwotICoKLSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBib2FyZC9jb25maWcuaCAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYm9hcmQgc3BlY2lmaWMKLSAqLwotCi0jaWZuZGVmIF9fQ09ORklHX0gKLSNkZWZpbmUgX19DT05GSUdfSAotCi0vKgotICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKLSAqIChlYXN5IHRvIGNoYW5nZSkKLSAqLwotCi0jZGVmaW5lIENPTkZJR19NUEM4MjQwICAgICAgMQotI2RlZmluZSBDT05GSUdfTU9VU1NFICAgICAgIDEKLQotI2RlZmluZQlDT05GSUdfU1lTX1RFWFRfQkFTRQkweEZGRjAwMDAwCi0jZGVmaW5lCUNPTkZJR19TWVNfTERTQ1JJUFQJImJvYXJkL21vdXNzZS91LWJvb3QubGRzIgotCi0jZGVmaW5lIENPTkZJR19TWVNfQUREUl9NQVBfQiAgICAgIDEKLQotI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWCAgIDEKLSNkZWZpbmUgQ09ORklHX0JBVURSQVRFICAgICA5NjAwCi0jaWYgMQotI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQgICJ0ZnRwIDEwMDAwMCB2bWxpbnV4LmltZztib290bSIgICAgLyogYXV0b2Jvb3QgY29tbWFuZCAqLwotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5EICAiYm9vdG0gZmZlMTAwMDAiCi0jZW5kaWYKLSNkZWZpbmUgQ09ORklHX0JPT1RBUkdTICAgICAgImNvbnNvbGU9dHR5UzAgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PTIwOS4xMjguOTMuMTMzOi9ib290IG5mc2FkZHJzPTIwOS4xMjguOTMuMTMzOjIwOS4xMjguOTMuMTM4IgotI2RlZmluZSBDT05GSUdfQk9PVERFTEFZICAgICAzCi0KLQotLyoKLSAqIEJPT1RQIG9wdGlvbnMKLSAqLwotI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFCi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09UUEFUSAotI2RlZmluZSBDT05GSUdfQk9PVFBfR0FURVdBWQotI2RlZmluZSBDT05GSUdfQk9PVFBfSE9TVE5BTUUKLQotCi0vKgotICogQ29tbWFuZCBsaW5lIGNvbmZpZ3VyYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KLQotI2RlZmluZSBDT05GSUdfQ01EX0FTS0VOVgotI2RlZmluZSBDT05GSUdfQ01EX0RBVEUKLQotCi0jZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFIDEKLSNkZWZpbmUgQ09ORklHX0VUSF9BRERSICAgICAgIjAwOjEwOjE4OjEwOjAwOjA2IgotCi0jZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OICAxIC8qIE1TRE9TIGJvb3RhYmxlIHBhcnRpdGlpb24gc3VwcG9ydCAqLwotCi0jaW5jbHVkZSAiLi4vYm9hcmQvbW91c3NlL21vdXNzZS5oIgotCi0vKgotICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwotICovCi0jdW5kZWYgQ09ORklHX1NZU19MT05HSEVMUCAgICAgICAgICAgICAgICAvKiB1bmRlZiB0byBzYXZlIG1lbW9yeSAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19DQlNJWkUgICAgICAyNTYgICAgICAgIC8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BCU0laRSAgICAgIChDT05GSUdfU1lTX0NCU0laRSArIHNpemVvZihDT05GSUdfU1lTX1BST01QVCkgKyAxNikKLSNkZWZpbmUgQ09ORklHX1NZU19NQVhBUkdTICAgICA4ICAgICAgICAgICAvKiBNYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAgICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRSAgICBDT05GSUdfU1lTX0NCU0laRSAgLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUiAgIDB4MDAxMDAwMDAgIC8qIERlZmF1bHQgbG9hZCBhZGRyZXNzICAgICAgICAgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU3RhcnQgYWRkcmVzc2VzIGZvciB0aGUgZmluYWwgbWVtb3J5IGNvbmZpZ3VyYXRpb24KLSAqIChTZXQgdXAgYnkgdGhlIHN0YXJ0dXAgY29kZSkKLSAqIFBsZWFzZSBub3RlIHRoYXQgQ09ORklHX1NZU19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9CQVNFICAgICAgMHgwMDAwMDAwMAotCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UgICAgQ09ORklHX1NZU19TRFJBTV9CQVNFCi0jZWxzZQotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRSAgICBDT05GSUdfU1lTX0ZMQVNIX0JBU0UKLSNlbmRpZgotCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTiAgICAgKDQgPDwgMjApCS8qIGxvdHMgb2YgbWVtIC4uLiAqLwotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTiAgICAgKDUxMiA8PCAxMCkJLyogNTEySyBQTENDIGJvb3Ryb20gKi8KLSNlbmRpZgotI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4gICAgICAoMiooNDA5NiA8PCAxMCkpICAgIC8qIDIqNDA5NmtCIGZvciBtYWxsb2MoKSAgKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQgICAweDAwMDA0MDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24gICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5EICAgICAweDAyMDAwMDAwCS8qIDAgLi4uIDMyIE1CIGluIERSQU0gICAqLwotCi0KLSNkZWZpbmUgQ09ORklHX1NZU19FVU1CX0FERFIgICAgICAgMHhGQzAwMDAwMAotCi0jZGVmaW5lIENPTkZJR19TWVNfSVNBX01FTSAgICAgICAgIDB4RkQwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19JU0FfSU8gICAgICAgICAgMHhGRTAwMDAwMAotCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRSAgICAgIDB4RkZGMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9TSVpFICAgICAgKCh1aW50KSg1MTIgKiAxMDI0KSkKLSNkZWZpbmUgQ09ORklHX1NZU19SRVNFVF9BRERSRVNTICAgMHhGRkYwMDEwMAotI2RlZmluZSBGTEFTSF9CQVNFMF9QUkVMSU0gIDB4RkZGMDAwMDAgIC8qIDUxMksgUExDQyBGTEFTSC9BTTI5RjA0MCovCi0jZGVmaW5lIEZMQVNIX0JBU0UwX1NJWkUgICAgMHg4MDAwMCAgICAgLyogNTEySyAqLwotI2RlZmluZSBGTEFTSF9CQVNFMV9QUkVMSU0gIDB4RkZFMTAwMDAgIC8qIEFNRCAyOUxWMTYwREIKLQkJCQkJICAgMU1CIC0gNjRLIEZMQVNIMCBTRUcgPTk2MEsKLQkJCQkJICAgKHNpemU9MHhmMDAwMCkqLwotCi0vKgotICogTlMxNjU1MCBDb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwCi0jZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9TRVJJQUwKLQotI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfUkVHX1NJWkUJMQotCi0jZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9DTEsJCTE4NDMyMDAwCi0KLSNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NPTTEJMHhGRkUwODA4MAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIERQUkFNKQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fQUREUiBDT05GSUdfU1lTX1NEUkFNX0JBU0UgKyBDT05GSUdfU1lTX01PTklUT1JfTEVOCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fU0laRSAgIDB4MkYwMCAgLyogU2l6ZSBvZiB1c2VkIGFyZWEgaW4gRFBSQU0gICovCi0jZGVmaW5lIENPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUICAoQ09ORklHX1NZU19JTklUX1JBTV9TSVpFIC0gR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQgIENPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCi0KLS8qCi0gKiBMb3cgTGV2ZWwgQ29uZmlndXJhdGlvbiBTZXR0aW5ncwotICogKGFkZHJlc3MgbWFwcGluZ3MsIHJlZ2lzdGVyIGluaXRpYWwgdmFsdWVzLCBldGMuKQotICogWW91IHNob3VsZCBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBpZiB5b3UgbWFrZSBjaGFuZ2VzIGhlcmUuCi0gKiBGb3IgdGhlIGRldGFpbCBkZXNjcmlwdGlvbiByZWZlciB0byB0aGUgTVBDODI0MCB1c2VyJ3MgbWFudWFsLgotICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUSAgMzMwMDAwMDAJLyogZXh0ZXJuYWwgZnJlcXVlbmN5IHRvIHBsbCAqLwotI2RlZmluZSBDT05GSUdfUExMX1BDSV9UT19NRU1fTVVMVElQTElFUiAgMgotCi0jZGVmaW5lIENPTkZJR19TWVNfRVRIX0RFVl9GTiAgICAgICAweDAwCi0jZGVmaW5lIENPTkZJR19TWVNfRVRIX0lPQkFTRSAgICAgICAweDAwMTA0MDAwCi0KLQotCS8qIEJpdC1maWVsZCB2YWx1ZXMgZm9yIE1DQ1IxLgotCSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1JPTU5BTCAgICAgICAgICA4Ci0jZGVmaW5lIENPTkZJR19TWVNfUk9NRkFMICAgICAgICAgIDgKLQotCS8qIEJpdC1maWVsZCB2YWx1ZXMgZm9yIE1DQ1IyLgotCSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1JFRklOVCAgICAgICAgICAweGY1ICAgICAvKiBSZWZyZXNoIGludGVydmFsICAgICAgICAgICAgICAgKi8KLQotCS8qIEJ1cnN0IFRvIFByZWNoYXJnZS4gQml0cyBvZiB0aGlzIHZhbHVlIGdvIHRvIE1DQ1IzIGFuZCBNQ0NSNC4KLQkgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CU1RPUFJFICAgICAgICAgMHg3OQotCi0jaWZkZWYgSU5DTFVERV9FQ0MKLSNkZWZpbmUgVVNFX0VDQwkJCQkxCi0jZWxzZSAvKiBJTkNMVURFX0VDQyAqLwotI2RlZmluZSBVU0VfRUNDCQkJCTAKLSNlbmRpZiAvKiBJTkNMVURFX0VDQyAqLwotCi0KLQkvKiBCaXQtZmllbGQgdmFsdWVzIGZvciBNQ0NSMy4KLQkgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19SRUZSRUMgICAgICAgICAgOCAgICAgICAvKiBSZWZyZXNoIHRvIGFjdGl2YXRlIGludGVydmFsICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19SRExBVCAgICAgICAgICAgKDQrVVNFX0VDQykgICAvKiBEYXRhIGxhdGFuY3kgZnJvbSByZWFkIGNvbW1hbmQgKi8KLQotCS8qIEJpdC1maWVsZCB2YWx1ZXMgZm9yIE1DQ1I0LgotCSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BSRVRPQUNUICAgICAgICAzICAgICAgIC8qIFByZWNoYXJnZSB0byBhY3RpdmF0ZSBpbnRlcnZhbCAqLwotI2RlZmluZSBDT05GSUdfU1lTX0FDVFRPUFJFICAgICAgICA1ICAgICAgIC8qIEFjdGl2YXRlIHRvIFByZWNoYXJnZSBpbnRlcnZhbCAqLwotI2RlZmluZSBDT05GSUdfU1lTX1NETU9ERV9DQVNfTEFUICAzICAgICAgIC8qIFNETU9ERSBDQVMgbGF0YW5jeSAgICAgICAgICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX1NETU9ERV9XUkFQICAgICAwICAgICAgIC8qIFNETU9ERSB3cmFwIHR5cGUgICAgICAgICAgICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX1NETU9ERV9CVVJTVExFTiAyICAgICAgIC8qIFNETU9ERSBCdXJzdCBsZW5ndGggICAgICAgICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0FDVE9SVyAgICAgICAgICAyCi0jZGVmaW5lIENPTkZJR19TWVNfUkVHSVNURVJEX1RZUEVfQlVGRkVSICgxLVVTRV9FQ0MpCi0KLS8qIE1lbW9yeSBiYW5rIHNldHRpbmdzLgotICogT25seSBiaXRzIDIwLTI5IGFyZSBhY3R1YWxseSB1c2VkIGZyb20gdGhlc2UgdmFsZXMgdG8gc2V0IHRoZQotICogc3RhcnQvZW5kIGFkZHJlc3Nlcy4gVGhlIHVwcGVyIHR3byBiaXRzIHdpbGwgYWx3YXlzIGJlIDAsIGFuZCB0aGUgbG93ZXIKLSAqIDIwIGJpdHMgd2lsbCBiZSAweDAwMDAwIGZvciBhIHN0YXJ0IGFkZHJlc3MsIG9yIDB4ZmZmZmYgZm9yIGFuIGVuZAotICogYWRkcmVzcy4gUmVmZXIgdG8gdGhlIE1QQzgyNDAgYm9vay4KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1JBTV9TSVpFICAgICAgICAweDA0MDAwMDAwICAvKiA2NE1CICovCi0KLQotI2RlZmluZSBDT05GSUdfU1lTX0JBTkswX1NUQVJUICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfQkFOSzBfRU5EICAgICAgIChDT05GSUdfU1lTX1JBTV9TSVpFIC0gMSkKLSNkZWZpbmUgQ09ORklHX1NZU19CQU5LMF9FTkFCTEUgICAgMQotI2RlZmluZSBDT05GSUdfU1lTX0JBTksxX1NUQVJUICAgICAweDNmZjAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfQkFOSzFfRU5EICAgICAgIDB4M2ZmZmZmZmYKLSNkZWZpbmUgQ09ORklHX1NZU19CQU5LMV9FTkFCTEUgICAgMAotI2RlZmluZSBDT05GSUdfU1lTX0JBTksyX1NUQVJUICAgICAweDNmZjAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfQkFOSzJfRU5EICAgICAgIDB4M2ZmZmZmZmYKLSNkZWZpbmUgQ09ORklHX1NZU19CQU5LMl9FTkFCTEUgICAgMAotI2RlZmluZSBDT05GSUdfU1lTX0JBTkszX1NUQVJUICAgICAweDNmZjAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfQkFOSzNfRU5EICAgICAgIDB4M2ZmZmZmZmYKLSNkZWZpbmUgQ09ORklHX1NZU19CQU5LM19FTkFCTEUgICAgMAotI2RlZmluZSBDT05GSUdfU1lTX0JBTks0X1NUQVJUICAgICAweDNmZjAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfQkFOSzRfRU5EICAgICAgIDB4M2ZmZmZmZmYKLSNkZWZpbmUgQ09ORklHX1NZU19CQU5LNF9FTkFCTEUgICAgMAotI2RlZmluZSBDT05GSUdfU1lTX0JBTks1X1NUQVJUICAgICAweDNmZjAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfQkFOSzVfRU5EICAgICAgIDB4M2ZmZmZmZmYKLSNkZWZpbmUgQ09ORklHX1NZU19CQU5LNV9FTkFCTEUgICAgMAotI2RlZmluZSBDT05GSUdfU1lTX0JBTks2X1NUQVJUICAgICAweDNmZjAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfQkFOSzZfRU5EICAgICAgIDB4M2ZmZmZmZmYKLSNkZWZpbmUgQ09ORklHX1NZU19CQU5LNl9FTkFCTEUgICAgMAotI2RlZmluZSBDT05GSUdfU1lTX0JBTks3X1NUQVJUICAgICAweDNmZjAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfQkFOSzdfRU5EICAgICAgIDB4M2ZmZmZmZmYKLSNkZWZpbmUgQ09ORklHX1NZU19CQU5LN19FTkFCTEUgICAgMAotCi0jZGVmaW5lIENPTkZJR19TWVNfT0RDUiAgICAgICAgICAgIDB4N2YKLQotCi0jZGVmaW5lIENPTkZJR19TWVNfUEdNQVggICAgICAgICAgIDB4MzIgLyogaG93IGxvbmcgdGhlIDgyNDAgcmVhdGlucyB0aGUgY3VycmVudGx5IGFjY2Vzc2VkIHBhZ2UgaW4gbWVtb3J5Ci0JCQkJICAgIHNlZSA4MjQwIGJvb2sgZm9yIGRldGFpbHMqLwotI2RlZmluZSBQQ0lfTUVNX1NQQUNFMV9TVEFSVAkweDgwMDAwMDAwCi0jZGVmaW5lIFBDSV9NRU1fU1BBQ0UyX1NUQVJUCTB4ZmQwMDAwMDAKLQotLyogSUJBVC9EQkFUIENvbmZpZ3VyYXRpb24gKi8KLS8qIFJhbTogNjRNQiwgc3RhcnRzIGF0IGFkZHJlc3MtMCwgci93IGluc3RydWN0aW9uL2RhdGEgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JQkFUMFUgICAgICAoQ09ORklHX1NZU19TRFJBTV9CQVNFIHwgQkFUVV9CTF82NE0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKLSNkZWZpbmUgQ09ORklHX1NZU19JQkFUMEwgICAgICAoQ09ORklHX1NZU19TRFJBTV9CQVNFIHwgQkFUTF9QUF8xMCB8IEJBVExfTUVNQ09IRVJFTkNFKQotI2RlZmluZSBDT05GSUdfU1lTX0RCQVQwVSAgICAgIENPTkZJR19TWVNfSUJBVDBVCi0jZGVmaW5lIENPTkZJR19TWVNfREJBVDBMICAgICAgQ09ORklHX1NZU19JQkFUMEwKLQotLyogTVBMRC9Qb3J0LVggSS9PIFNwYWNlIDogZGF0YSBhbmQgaW5zdHJ1Y3Rpb24gcmVhZC93cml0ZSwgIGNhY2hlLWluaGliaXQgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JQkFUMVUgICAgICAoUE9SVFhfREVWX0JBU0UgfCBCQVRVX0JMXzEyOE0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKLSNpZiAwCi0jZGVmaW5lIENPTkZJR19TWVNfSUJBVDFMICAgICAgKFBPUlRYX0RFVl9CQVNFIHwgQkFUTF9QUF8xMCAgfCBCQVRMX01FTUNPSEVSRU5DRSB8XAotCQkJIEJBVExfV1JJVEVUSFJPVUdIIHwgQkFUTF9DQUNIRUlOSElCSVQpCi0jZWxzZQotI2RlZmluZSBDT05GSUdfU1lTX0lCQVQxTCAgICAgIChQT1JUWF9ERVZfQkFTRSB8IEJBVExfUFBfMTAgfEJBVExfQ0FDSEVJTkhJQklUKQotI2VuZGlmCi0jZGVmaW5lIENPTkZJR19TWVNfREJBVDFVCUNPTkZJR19TWVNfSUJBVDFVCi0jZGVmaW5lIENPTkZJR19TWVNfREJBVDFMCUNPTkZJR19TWVNfSUJBVDFMCi0KLS8qIFBDSSBNZW1vcnkgcmVnaW9uIDE6IDB4OFhYWF9YWFhYIFBDSSBNZW0gc3BhY2U6IEVVTUJBUiwgZXRjIC0gMTZNQiAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lCQVQyVQkoUENJX01FTV9TUEFDRTFfU1RBUlR8QkFUVV9CTF8xNk0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKLSNkZWZpbmUgQ09ORklHX1NZU19JQkFUMkwJKFBDSV9NRU1fU1BBQ0UxX1NUQVJUfEJBVExfUFBfMTAgfCBCQVRMX0dVQVJERURTVE9SQUdFfEJBVExfQ0FDSEVJTkhJQklUKQotI2RlZmluZSBDT05GSUdfU1lTX0RCQVQyVSAgICAgIENPTkZJR19TWVNfSUJBVDJVCi0jZGVmaW5lIENPTkZJR19TWVNfREJBVDJMICAgICAgQ09ORklHX1NZU19JQkFUMkwKLQotLyogUENJIE1lbW9yeSByZWdpb24gMjogUENJIERldmljZXMgaW4gMHhGRCBzcGFjZSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lCQVQzVQkoUENJX01FTV9TUEFDRTJfU1RBUlR8QkFUVV9CTF8xNk0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKLSNkZWZpbmUgQ09ORklHX1NZU19JQkFUM0wJKFBDSV9NRU1fU1BBQ0UyX1NUQVJUfEJBVExfUFBfMTAgfCBCQVRMX0dVQVJERURTVE9SQUdFIHwgQkFUTF9DQUNIRUlOSElCSVQpCi0jZGVmaW5lIENPTkZJR19TWVNfREJBVDNVICAgICAgQ09ORklHX1NZU19JQkFUM1UKLSNkZWZpbmUgQ09ORklHX1NZU19EQkFUM0wgICAgICBDT05GSUdfU1lTX0lCQVQzTAotCi0KLS8qCi0gKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCi0gKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcwotICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfQk9PVE1BUFNaICAgICAgICg4IDw8IDIwKSAgIC8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXggKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRkxBU0ggb3JnYW5pemF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MgICAgIDMgICAgICAgLyogTWF4IG51bWJlciBvZiBmbGFzaCBiYW5rcyAgICAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QgICAgICA2NCAgICAgIC8qIE1heCBudW1iZXIgb2Ygc2VjdG9ycyBpbiBvbmUgYmFuayAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVCAgICAxMjAwMDAgIC8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1dSSVRFX1RPVVQgICAgNTAwICAgICAvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpICAgKi8KLQotI2lmIDAKLSNkZWZpbmUJQ09ORklHX0VOVl9JU19JTl9GTEFTSAkgICAgMQotI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVCAgICAgICAgICAweDgwMDAgIC8qIE9mZnNldCBvZiB0aGUgRW52aXJvbm1lbnQgU2VjdG9yCSovCi0jZGVmaW5lIENPTkZJR19FTlZfU0laRSAgICAgICAgICAgIDB4NDAwMCAgLyogU2l6ZSBvZiB0aGUgRW52aXJvbm1lbnQgU2VjdG9yICAgICovCi0jZWxzZQotI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05WUkFNICAgICAgICAgIDEKLSNkZWZpbmUgQ09ORklHX0VOVl9BRERSICAgICAgICAgICAgTlZfT0ZGX1VfQk9PVF9BRERSIC8qIFBvcnRYIE5WTSBGcmVlIGFkZHIqLwotI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVCAgICAgICAgICBDT05GSUdfRU5WX0FERFIKLSNkZWZpbmUgQ09ORklHX0VOVl9TSVpFICAgICAgICAgICAgTlZfVV9CT09UX0VOVl9TSVpFIC8qIDJLICovCi0jZW5kaWYKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENhY2hlIENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0NBQ0hFTElORV9TSVpFICAxNgotCi0vKiBMb2NhbGl6YXRpb25zICovCi0jaWYgMAotI2RlZmluZSBDT05GSUdfRVRIQUREUiAgICAgICAgICAwOjA6MDowOjE6ZAotI2RlZmluZSBDT05GSUdfSVBBRERSICAgICAgICAgICAxNzIuMTYuNDAuMTEzCi0jZGVmaW5lIENPTkZJR19TRVJWRVJJUCAgICAgICAgIDE3Mi4xNi40MC4xMTEKLSNlbHNlCi0jZGVmaW5lIENPTkZJR19FVEhBRERSICAgICAgICAgIDA6MDowOjA6MTpkCi0jZGVmaW5lIENPTkZJR19JUEFERFIgICAgICAgICAgIDIwOS4xMjguOTMuMTM4Ci0jZGVmaW5lIENPTkZJR19TRVJWRVJJUCAgICAgICAgIDIwOS4xMjguOTMuMTMzCi0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUENJIHN0dWZmCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNkZWZpbmUgQ09ORklHX1BDSQkJCS8qIGluY2x1ZGUgcGNpIHN1cHBvcnQJCQkqLwotI2RlZmluZSBDT05GSUdfUENJX0lORElSRUNUX0JSSURHRQkvKiBpbmRpcmVjdCBQQ0kgYnJpZGdlIHN1cHBvcnQgKi8KLSN1bmRlZiBDT05GSUdfUENJX1BOUAotCi0KLSNkZWZpbmUgQ09ORklHX1RVTElQCi0KLSNlbmRpZiAgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg1MzZEUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1MzZEUy5oCmluZGV4IGZhYTU0OTUuLmYxNWUxNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTM2RFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODUzNkRTLmgKQEAgLTMxLDEzICszMSwxMyBAQAogCiAjaWZkZWYgQ09ORklHX1NEQ0FSRAogI2RlZmluZSBDT05GSUdfUkFNQk9PVF9TRENBUkQJCTEKLSNkZWZpbmUgQ09ORklHX1NZU19URVhUX0JBU0UJMHhmOGY4MDAwMAorI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkweGY4ZjQwMDAwCiAjZGVmaW5lIENPTkZJR19SRVNFVF9WRUNUT1JfQUREUkVTUwkweGY4ZmZmZmZjCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TUElGTEFTSAogI2RlZmluZSBDT05GSUdfUkFNQk9PVF9TUElGTEFTSAkJMQotI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkweGY4ZjgwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCTB4ZjhmNDAwMDAKICNkZWZpbmUgQ09ORklHX1JFU0VUX1ZFQ1RPUl9BRERSRVNTCTB4ZjhmZmZmZmMKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2OU1EUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NjlNRFMuaAppbmRleCA1OGI5YzI2Li41MTY1YTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2OU1EUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTY5TURTLmgKQEAgLTQ5Myw3ICs0OTMsNyBAQAogCiAvKiBRRSBtaWNyb2NvZGUvZmlybXdhcmUgYWRkcmVzcyAqLwogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTk9SCi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCTB4ZmZmMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19RRV9GV19BRERSCTB4ZmZmMDAwMDAKIAogLyoKICAqIEJPT1RQIG9wdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9OWDgyMy5oIGIvaW5jbHVkZS9jb25maWdzL05YODIzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNDY4ZGYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jb25maWdzL05YODIzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNDQgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogS3lsZSBIYXJyaXMsIE5leHVzIFRlY2hub2xvZ2llcywgSW5jLiBraGFycmlzQG5leHVzLXRlY2gubmV0Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLS8qCi0gKiBib2FyZC9jb25maWcuaCAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYm9hcmQgc3BlY2lmaWMKLSAqLwotCi0jaWZuZGVmIF9fQ09ORklHX0gKLSNkZWZpbmUgX19DT05GSUdfSAotCi0vKgotICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKLSAqIChlYXN5IHRvIGNoYW5nZSkKLSAqLwotCi0jZGVmaW5lIENPTkZJR19NUEM4MjMJCTEJLyogVGhpcyBpcyBhIE1QQzgyMyBDUFUJICAgICovCi0jZGVmaW5lIENPTkZJR19OWDgyMwkJMQkvKiAuLi5vbiBhIE5FWFVTIDgyMyAgbW9kdWxlCSovCi0KLSNkZWZpbmUJQ09ORklHX1NZU19URVhUX0JBU0UJMHg0MDAwMDAwMAotCi0vKiNkZWZpbmUgIENPTkZJR19WSURFTwkJMSAqLwotCi0jZGVmaW5lIENPTkZJR184eHhfR0NMS19GUkVRCU1QQzhYWF9TUEVFRAotI2RlZmluZSBDT05GSUdfOHh4X0NPTlNfU01DMQkxCS8qIENvbnNvbGUgaXMgb24gU01DMQkgICAgKi8KLSN1bmRlZglDT05GSUdfOHh4X0NPTlNfU01DMgotI3VuZGVmCUNPTkZJR184eHhfQ09OU19OT05FCi0jZGVmaW5lIENPTkZJR19CQVVEUkFURSA1NzYwMAkvKiBjb25zb2xlIGJhdWRyYXRlID0gMTE1a2JwcwkqLwotI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTIJLyogYXV0b2Jvb3QgYWZ0ZXIgMiBzZWNvbmRzICovCi0jZGVmaW5lIENPTkZJR19CT09UQVJHUwkJInJhbWRpc2tfc2l6ZT04MDAwICJcCi0JCQkJInJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0xMC43Ny43Ny4yNTA6L3BwY3Jvb3QgIlwKLQkJCQkibmZzYWRkcnM9MTAuNzcuNzcuMjA6MTAuNzcuNzcuMjUwIgotI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJImJvb3RtIDQwMGUwMDAwIgotCi0jZGVmaW5lIENPTkZJR19MT0FEU19FQ0hPCTEJLyogZWNobyBvbiBmb3Igc2VyaWFsIGRvd25sb2FkCSovCi0jdW5kZWYJQ09ORklHX1NZU19MT0FEU19CQVVEX0NIQU5HRQkJLyogZG9uJ3QgYWxsb3cgYmF1ZHJhdGUgY2hhbmdlCSovCi0jdW5kZWYJQ09ORklHX1dBVENIRE9HCQkJLyogd2F0Y2hkb2cgZGlzYWJsZWQsIGZvciBub3cJICAgICovCi0jZGVmaW5lIENPTkZJR19TT1VSQ0UKLQotLyoKLSAqIEJPT1RQIG9wdGlvbnMKLSAqLwotI2RlZmluZSBDT05GSUdfQk9PVFBfU1VCTkVUTUFTSwotI2RlZmluZSBDT05GSUdfQk9PVFBfR0FURVdBWQotI2RlZmluZSBDT05GSUdfQk9PVFBfSE9TVE5BTUUKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RQQVRICi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09URklMRVNJWkUKLQotCi0vKgotICogQ29tbWFuZCBsaW5lIGNvbmZpZ3VyYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KLQotI2RlZmluZSBDT05GSUdfQ01EX1NPVVJDRQotCi0KLS8qIGNhbGwgdmFyaW91cyBnZW5lcmljIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IKLQotLyoKLSAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJICAgICovCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCQkxMDI0CS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICAqLwotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX1NZU19DQlNJWkUJCTI1NgkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAgKi8KLSNlbmRpZgotI2RlZmluZSBDT05GSUdfU1lTX1BCU0laRSAoQ09ORklHX1NZU19DQlNJWkUrc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSsxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhBUkdTCQkxNgkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLwotI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCUNPTkZJR19TWVNfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQJMHgwNDAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHgwQzAwMDAwCS8qIDQgLi4uIDEyIE1CIGluIERSQU0JKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUgkJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KLQotLyoKLSAqIExvdyBMZXZlbCBDb25maWd1cmF0aW9uIFNldHRpbmdzCi0gKiAoYWRkcmVzcyBtYXBwaW5ncywgcmVnaXN0ZXIgaW5pdGlhbCB2YWx1ZXMsIGV0Yy4pCi0gKiBZb3Ugc2hvdWxkIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIGlmIHlvdSBtYWtlIGNoYW5nZXMgaGVyZS4KLSAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogSW50ZXJuYWwgTWVtb3J5IE1hcHBlZCBSZWdpc3RlcgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfSU1NUgkJMHhGRkYwMDAwMAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIERQUkFNKQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fQUREUglDT05GSUdfU1lTX0lNTVIKLSNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9TSVpFCTB4MkYwMAkvKiBTaXplIG9mIHVzZWQgYXJlYSBpbiBEUFJBTQkqLwotI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAkoQ09ORklHX1NZU19JTklUX1JBTV9TSVpFIC0gR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU3RhcnQgYWRkcmVzc2VzIGZvciB0aGUgZmluYWwgbWVtb3J5IGNvbmZpZ3VyYXRpb24KLSAqIChTZXQgdXAgYnkgdGhlIHN0YXJ0dXAgY29kZSkKLSAqIFBsZWFzZSBub3RlIHRoYXQgQ09ORklHX1NZU19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9CQVNFCQkweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRQkJMHg0MDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoMTI4IDw8IDEwKQkvKiBSZXNlcnZlIDEyOCBrQiBmb3IgTW9uaXRvcgkqLwotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQlDT05GSUdfU1lTX0ZMQVNIX0JBU0UKLSNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoMTI4IDw8IDEwKQkvKiBSZXNlcnZlIDEyOCBrQiBmb3IgbWFsbG9jKCkJKi8KLQotLyoKLSAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKLSAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCi0gKiB0aGUgbWF4aW11bSBtYXBwZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CT09UTUFQU1oJCSg4IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4ICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZMQVNIIG9yZ2FuaXphdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QJMTI4CS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKSAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpICAqLwotCi0jZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fRkxBU0gJMQotI2RlZmluZSB4RU1CRUQKLSNpZmRlZglFTUJFRAotI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCTB4MjAwCS8qIEZJWE1FIEhvdyBiaWcgd2hlbiBlbWJlZGRlZD8/ICovCi0jZGVmaW5lIENPTkZJR19FTlZfQUREUgkJQ09ORklHX1NZU19NT05JVE9SX0JBU0UKLSNlbHNlCi0jZGVmaW5lIENPTkZJR19FTlZfQUREUgkJMHg0MDAyMDAwMAkvKiBhYnNvbHV0ZSBhZGRyZXNzIGZvciBub3cgICAqLwotI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCTB4MjAwMDAgLyogOEsgb3VjaCwgdGhpcyBtYXkgbGF0ZXIgYmUgKi8KLSNlbmRpZgotCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfU05fQkFTRQkweDQwMDFmZmYwCS8qIHByb2dyYW1tZXIgYXV0b21hZ2ljYWxseSBwdXRzICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfU05fU0VDVE9SCTB4NDAwMDAwMDAJLyogYSBzZXJpYWwgbnVtYmVyIGhlcmUJCSAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1NOX0JZVEVTCTgKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2FjaGUgQ29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfQ0FDSEVMSU5FX1NJWkUJMTYJLyogRm9yIGFsbCBNUEM4eHggQ1BVcwkJKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKLSNkZWZpbmUgQ09ORklHX1NZU19DQUNIRUxJTkVfU0hJRlQJNAkvKiBsb2cgYmFzZSAyIG9mIHRoZSBhYm92ZSB2YWx1ZSAgICAqLwotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNZUENSIC0gU3lzdGVtIFByb3RlY3Rpb24gQ29udHJvbAkJCQkxMS05Ci0gKiBTWVBDUiBjYW4gb25seSBiZSB3cml0dGVuIG9uY2UgYWZ0ZXIgcmVzZXQhCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTb2Z0d2FyZSAmIEJ1cyBNb25pdG9yIFRpbWVyIG1heCwgQnVzIE1vbml0b3IgZW5hYmxlLCBTVyBXYXRjaGRvZyBmcmVlemUKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQotI2RlZmluZSBDT05GSUdfU1lTX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgXAotCQkJIFNZUENSX1NXRSAgfCBTWVBDUl9TV1ApCi0jZWxzZQotI2RlZmluZSBDT05GSUdfU1lTX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgU1lQQ1JfU1dQKQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNJVU1DUiAtIFNJVSBNb2R1bGUgQ29uZmlndXJhdGlvbgkJCQkxMi0zMAotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUENNQ0lBIGNvbmZpZy4sIG11bHRpLWZ1bmN0aW9uIHBpbiB0cmktc3RhdGUKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1NJVU1DUgkoU0lVTUNSX0RCR0MwMCB8IFNJVU1DUl9EQlBDMDApCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRCU0NSIC0gVGltZSBCYXNlIFN0YXR1cyBhbmQgQ29udHJvbAkJCQkxMi0xNgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgUmVmZXJlbmNlIEludGVycnVwdCBTdGF0dXMsIFRpbWViYXNlIGZyZWV6aW5nIGVuYWJsZWQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1RCU0NSCShUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRikKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUlRDU0MgLSBSZWFsLVRpbWUgQ2xvY2sgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyCQkxMi0xOAotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfUlRDU0MJKFJUQ1NDX1NFQyB8IFJUQ1NDX0FMUiB8IFJUQ1NDX1JURnwgUlRDU0NfUlRFKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQSVNDUiAtIFBlcmlvZGljIEludGVycnVwdCBTdGF0dXMgYW5kIENvbnRyb2wJCTEyLTIzCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDbGVhciBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzLCBJbnRlcnJ1cHQgVGltZXIgZnJlZXppbmcgZW5hYmxlZAotICovCi0jZGVmaW5lIENPTkZJR19TWVNfUElTQ1IJKFBJU0NSX1BTIHwgUElTQ1JfUElURikKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUExQUkNSIC0gUExMLCBMb3ctUG93ZXIsIGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyCQk1LTcKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFJlc2V0IFBMTCBsb2NrIHN0YXR1cyBzdGlja3kgYml0LCB0aW1lciBleHBpcmVkIHN0YXR1cyBiaXQgYW5kIHRpbWVyCi0gKiBpbnRlcnJ1cHQgc3RhdHVzIGJpdAotICovCi0jZGVmaW5lIE1QQzhYWF9TUEVFRAk2NjY2NjY2NkwKLSNkZWZpbmUgTVBDOFhYX1hJTgkzMjc2OAkvKiAzMi43Njgga0h6IGNyeXN0YWwgKi8KLSNkZWZpbmUgTVBDOFhYX0ZBQ1QJCShNUEM4WFhfU1BFRUQvTVBDOFhYX1hJTikKLSNkZWZpbmUgQ09ORklHX1NZU19QTFBSQ1JfTUYgICgoTVBDOFhYX0ZBQ1QtMSkgPDwgUExQUkNSX01GX1NISUZUKQotI2RlZmluZSBDT05GSUdfU1lTX1BMUFJDUgkJKENPTkZJR19TWVNfUExQUkNSX01GIHwgUExQUkNSX1RFWFBTIHwgUExQUkNSX1RNSVNUKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTQ0NSIC0gU3lzdGVtIENsb2NrIGFuZCByZXNldCBDb250cm9sIFJlZ2lzdGVyCQk1LTMKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNldCBjbG9jayBvdXRwdXQsIHRpbWViYXNlIGFuZCBSVEMgc291cmNlIGFuZCBkaXZpZGVyLAotICogcG93ZXIgbWFuYWdlbWVudCBhbmQgc29tZSBvdGhlciBpbnRlcm5hbCBjbG9ja3MKLSAqLwotI2RlZmluZSBTQ0NSX01BU0sJU0NDUl9FQkRGMTEKLSNkZWZpbmUgQ09ORklHX1NZU19TQ0NSCShTQ0NSX1RCUyAgICAgfCBcCi0JCQkgU0NDUl9DT00wMCAgIHwgU0NDUl9ERlNZTkMwMCB8IFNDQ1JfREZCUkcwMCAgfCBcCi0JCQkgU0NDUl9ERk5MMDAwIHwgU0NDUl9ERk5IMDAwICB8IFNDQ1JfREZMQ0QwMDAgfCBcCi0JCQkgU0NDUl9ERkFMQ0QwMCkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19ERVIJCTAKLQotLyoKLSAqIEluaXQgTWVtb3J5IENvbnRyb2xsZXI6Ci0gKgotICogQlIwIGFuZCBPUjAgKEZMQVNIKQotICovCi0KLSNkZWZpbmUgRkxBU0hfQkFTRTBfUFJFTElNCTB4NDAwMDAwMDAJLyogRkxBU0ggYmFuayAjMCAgICAqLwotCi0vKiB1c2VkIHRvIHJlLW1hcCBGTEFTSCBib3RoIHdoZW4gc3RhcnRpbmcgZnJvbSBTUkFNIG9yIEZMQVNIOgotICogcmVzdHJpY3QgYWNjZXNzIGVub3VnaCB0byBrZWVwIFNSQU0gd29ya2luZyAoaWYgYW55KQotICogYnV0IG5vdCB0b28gbXVjaCB0byBtZWRkbGUgd2l0aCBGTEFTSCBhY2Nlc3NlcwotICovCi0jZGVmaW5lIENPTkZJR19TWVNfUkVNQVBfT1JfQU0JCTB4ODAwMDAwMDAJLyogT1IgYWRkciBtYXNrICovCi0jZGVmaW5lIENPTkZJR19TWVNfUFJFTElNX09SX0FNCTB4RTAwMDAwMDAJLyogT1IgYWRkciBtYXNrICovCi0KLS8qIEZMQVNIIHRpbWluZzogQUNTID0gMDAsIFRSTFggPSAwLCBDU05UID0gMSwgU0NZID0gOCwgRUhUUiA9IDAJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19PUl9USU1JTkdfRkxBU0gJKE9SX0NTTlRfU0FNICB8IE9SX0FDU19ESVYxIHwgT1JfQkkgfCBcCi0JCQkJIE9SX1NDWV84X0NMSyApCi0KLSNkZWZpbmUgQ09ORklHX1NZU19PUjBfUkVNQVAJKENPTkZJR19TWVNfUkVNQVBfT1JfQU0gIHwgQ09ORklHX1NZU19PUl9USU1JTkdfRkxBU0gpCi0jZGVmaW5lIENPTkZJR19TWVNfT1IwX1BSRUxJTQkoQ09ORklHX1NZU19QUkVMSU1fT1JfQU0gfCBDT05GSUdfU1lTX09SX1RJTUlOR19GTEFTSCkKLSNkZWZpbmUgQ09ORklHX1NZU19CUjBfUFJFTElNCSgoRkxBU0hfQkFTRTBfUFJFTElNICYgQlJfQkFfTVNLKSB8IEJSX1BTXzE2IHwgQlJfViApCi0KLS8qCi0gKiBCUjEvMiBhbmQgT1IxLzIgKFNEUkFNKQotICovCi0jZGVmaW5lIFNEUkFNX0JBU0UxX1BSRUxJTQkweDAwMDAwMDAwCS8qIFNEUkFNIGJhbmsgIzAgICAgKi8KLSNkZWZpbmUgU0RSQU1fQkFTRTJfUFJFTElNCTB4MjAwMDAwMDAJLyogU0RSQU0gYmFuayAjMSAgICAqLwotI2RlZmluZSBTRFJBTV9NQVhfU0laRQkJMHgwNDAwMDAwMAkvKiBtYXggNjQgTUIgcGVyIGJhbmsJKi8KLQotLyogU0RSQU0gdGltaW5nOiBNdWx0aXBsZXhlZCBhZGRyZXNzZXMsIGRyaXZlIEdQTDUgaGlnaCBvbiBmaXJzdCBjeWNsZSAqLwotI2RlZmluZSBDT05GSUdfU1lTX09SX1RJTUlOR19TRFJBTQkoT1JfRzVMUyB8IE9SX0NTTlRfU0FNKQotCi0jZGVmaW5lIENPTkZJR19TWVNfT1IxX1BSRUxJTQkoQ09ORklHX1NZU19QUkVMSU1fT1JfQU0gfCBDT05GSUdfU1lTX09SX1RJTUlOR19TRFJBTSApCi0jZGVmaW5lIENPTkZJR19TWVNfQlIxX1BSRUxJTQkoKFNEUkFNX0JBU0UxX1BSRUxJTSAmIEJSX0JBX01TSykgfCBCUl9NU19VUE1BIHwgQlJfViApCi0jZGVmaW5lIENPTkZJR19TWVNfT1IyX1BSRUxJTQlDT05GSUdfU1lTX09SMV9QUkVMSU0KLSNkZWZpbmUgQ09ORklHX1NZU19CUjJfUFJFTElNCSgoU0RSQU1fQkFTRTJfUFJFTElNICYgQlJfQkFfTVNLKSB8IEJSX01TX1VQTUEgfCBCUl9WICkKLQotLyogSU8gYW5kIG1lbW9yeSBtYXBwZWQgc3R1ZmYgKi8KLSNkZWZpbmUgTlg4MjNfSU9fT1JfQU0JCTB4RkZGRjAwMDAJLyogbWFzayBmb3IgSU8gYWRkcmVzc2VzICovCi0jZGVmaW5lIE5YODIzX0lPX0JBU0UJCTB4RkYwMDAwMDAJLyogc3RhcnQgb2YgSU8JKi8KLSNkZWZpbmUgR1BPVVRfT0ZGU0VUCQkoMzw8MTYpCi0jZGVmaW5lIFFVQVJUX09GRlNFVAkJKDQ8PDE2KQotI2RlZmluZSBWSURBQ19PRkZTRVQJCSg1PDwxNikKLSNkZWZpbmUgQ1BMRF9PRkZTRVQJCSg2PDwxNikKLSNkZWZpbmUgU0VEMTM4Nl9PRkZTRVQJCSg3PDwxNikKLQotLyoKLSAqIEJSMyBhbmQgT1IzIChnZW5lcmFsIHB1cnBvc2Ugb3V0cHV0IGxhdGNoZXMpCi0gKi8KLSNkZWZpbmUgR1BPVVRfQkFTRQkoTlg4MjNfSU9fQkFTRSArIEdQT1VUX09GRlNFVCkKLSNkZWZpbmUgR1BPVVRfVElNSU5HCShPUl9DU05UX1NBTSB8IE9SX1RSTFggfCBPUl9CSSkKLSNkZWZpbmUgQ09ORklHX1NZU19PUjNfUFJFTElNCShOWDgyM19JT19PUl9BTSB8IEdQT1VUX1RJTUlORykKLSNkZWZpbmUgQ09ORklHX1NZU19CUjNfUFJFTElNCShHUE9VVF9CQVNFIHwgQlJfVikKLQotLyoKLSAqIEJSNCBhbmQgT1I0IChRVUFSVCkKLSAqLwotI2RlZmluZSBRVUFSVF9CQVNFCShOWDgyM19JT19CQVNFICsgUVVBUlRfT0ZGU0VUKQotI2RlZmluZSBRVUFSVF9USU1JTkcJKE9SX0FDU19ESVY0IHwgT1JfU0NZXzNfQ0xLIHwgT1JfQ1NOVF9TQU0gfCBPUl9UUkxYKQotI2RlZmluZSBDT05GSUdfU1lTX09SNF9QUkVMSU0JKE5YODIzX0lPX09SX0FNIHwgUVVBUlRfVElNSU5HIHwgT1JfQkkpCi0jZGVmaW5lIENPTkZJR19TWVNfQlI0X1BSRUxJTQkoUVVBUlRfQkFTRSB8IEJSX1BTXzggfCBCUl9WKQotCi0vKgotICogQlI1IGFuZCBPUjUgKFZpZGVvIERBQykKLSAqLwotI2RlZmluZSBWSURBQ19CQVNFCShOWDgyM19JT19CQVNFICsgVklEQUNfT0ZGU0VUKQotI2RlZmluZSBWSURBQ19USU1JTkcJKE9SX0FDU19ESVY0IHwgT1JfU0NZXzNfQ0xLIHwgT1JfQ1NOVF9TQU0gfCBPUl9FSFRSKQotI2RlZmluZSBDT05GSUdfU1lTX09SNV9QUkVMSU0JKE5YODIzX0lPX09SX0FNIHwgVklEQUNfVElNSU5HIHwgT1JfQkkpCi0jZGVmaW5lIENPTkZJR19TWVNfQlI1X1BSRUxJTQkoVklEQUNfQkFTRSB8IEJSX1BTXzggfCBCUl9WKQotCi0vKgotICogQlI2IGFuZCBPUjYgKENQTEQpCi0gKiBGSVhNRSB0aW1pbmcgbm90IHZlcmlmaWVkIGZvciBDUExECi0gKi8KLSNkZWZpbmUgQ1BMRF9CQVNFCShOWDgyM19JT19CQVNFICsgQ1BMRF9PRkZTRVQpCi0jZGVmaW5lIENQTERfVElNSU5HCShPUl9BQ1NfRElWNCB8IE9SX1NDWV8zX0NMSyB8IE9SX0NTTlRfU0FNIHwgT1JfRUhUUikKLSNkZWZpbmUgQ09ORklHX1NZU19PUjZfUFJFTElNCShOWDgyM19JT19PUl9BTSB8IENQTERfVElNSU5HIHwgT1JfQkkpCi0jZGVmaW5lIENPTkZJR19TWVNfQlI2X1BSRUxJTQkoQ1BMRF9CQVNFIHwgQlJfUFNfOCB8IEJSX1YgKQotCi0vKgotICogQlI3IGFuZCBPUjcgKFNFRDEzODYpCi0gKiBGSVhNRSB0aW1pbmcgbm90IHZlcmlmaWVkIGZvciBTRUQgY29udHJvbGxlcgotICovCi0jZGVmaW5lIFNFRDEzODZfQkFTRQkweEY3MDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfT1I3X1BSRUxJTQkoMHhGRjAwMDAwMCB8IE9SX0JJIHwgT1JfU0VUQSkKLSNkZWZpbmUgQ09ORklHX1NZU19CUjdfUFJFTElNCShTRUQxMzg2X0JBU0UgfCBCUl9QU18xNiB8IEJSX1YgKQotCi0vKgotICogTWVtb3J5IFBlcmlvZGljIFRpbWVyIFByZXNjYWxlcgotICovCi0KLS8qIHBlcmlvZGljIHRpbWVyIGZvciByZWZyZXNoICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFNUl9QVEEJOTcJCS8qIHN0YXJ0IHdpdGggZGl2aWRlciBmb3IgMTAwIE1IeiAgICovCi0KLS8qIHJlZnJlc2ggcmF0ZSAxNS42IHVzICg9IDY0IG1zIC8gNEsgPSA2Mi40IC8gcXVhZCBidXJzdHMpIGZvciA8PSAxMjggTUJpdAkqLwotI2RlZmluZSBDT05GSUdfU1lTX01QVFBSXzJCS180SwlNUFRQUl9QVFBfRElWMTYgLyogc2V0dGluZyBmb3IgMiBiYW5rcwkqLwotI2RlZmluZSBDT05GSUdfU1lTX01QVFBSXzFCS180SwlNUFRQUl9QVFBfRElWMzIgLyogc2V0dGluZyBmb3IgMSBiYW5rCSovCi0KLS8qIHJlZnJlc2ggcmF0ZSA3LjggdXMgKD0gNjQgbXMgLyA4SyA9IDMxLjIgLyBxdWFkIGJ1cnN0cykgZm9yIDI1NiBNQml0CQkqLwotI2RlZmluZSBDT05GSUdfU1lTX01QVFBSXzJCS184SwlNUFRQUl9QVFBfRElWOAkvKiBzZXR0aW5nIGZvciAyIGJhbmtzCSovCi0jZGVmaW5lIENPTkZJR19TWVNfTVBUUFJfMUJLXzhLCU1QVFBSX1BUUF9ESVYxNiAvKiBzZXR0aW5nIGZvciAxIGJhbmsJKi8KLQotLyoKLSAqIE1BTVIgc2V0dGluZ3MgZm9yIFNEUkFNCi0gKi8KLQotLyogOCBjb2x1bW4gU0RSQU0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQU1SXzhDT0wJKChDT05GSUdfU1lTX01BTVJfUFRBIDw8IE1BTVJfUFRBX1NISUZUKSAgfCBNQU1SX1BUQUUJICAgIHwJXAotCQkJIE1BTVJfQU1BX1RZUEVfMCB8IE1BTVJfRFNBXzFfQ1lDTCB8IE1BTVJfRzBDTEFfQTExIHwJXAotCQkJIE1BTVJfUkxGQV8xWAkgfCBNQU1SX1dMRkFfMVgJICAgfCBNQU1SX1RMRkFfNFgpCi0vKiA5IGNvbHVtbiBTRFJBTSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BTVJfOUNPTAkoKENPTkZJR19TWVNfTUFNUl9QVEEgPDwgTUFNUl9QVEFfU0hJRlQpICB8IE1BTVJfUFRBRQkgICAgfAlcCi0JCQkgTUFNUl9BTUFfVFlQRV8xIHwgTUFNUl9EU0FfMV9DWUNMIHwgTUFNUl9HMENMQV9BMTAgfAlcCi0JCQkgTUFNUl9STEZBXzFYCSB8IE1BTVJfV0xGQV8xWAkgICB8IE1BTVJfVExGQV80WCkKLQotI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQkvKiBhbGxvdyBjaGFuZ2VzIHRvIGV0aGFkZHIgKGZvciBub3cpCSovCi0jZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDoxMDoyMDozMDo0MDo1MAotI2RlZmluZSBDT05GSUdfSVBBRERSCQkxMC43Ny43Ny4yMAotI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTEwLjc3Ljc3LjI1MAotCi0jZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1AxMDEwUkRCLmggYi9pbmNsdWRlL2NvbmZpZ3MvUDEwMTBSREIuaAppbmRleCBlYWJmYzg1Li5kNjEyYThiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvUDEwMTBSREIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvUDEwMTBSREIuaApAQCAtNTQxLDcgKzU0MSw4IEBACiAJCQkJCUZUSU0yX0dQQ01fVFdQKDB4MWYpKQogI2RlZmluZSBDT05GSUdfU1lTX0NTM19GVElNMwkJMHgwCiAKLSNpZiBkZWZpbmVkKENPTkZJR19SQU1CT09UX1NEQ0FSRCkgfHwgZGVmaW5lZChDT05GSUdfUkFNQk9PVF9TUElGTEFTSCkKKyNpZiBkZWZpbmVkKENPTkZJR19SQU1CT09UX1NEQ0FSRCkgfHwgZGVmaW5lZChDT05GSUdfUkFNQk9PVF9TUElGTEFTSCkgfHwgXAorCWRlZmluZWQoQ09ORklHX1JBTUJPT1RfTkFORCkKICNkZWZpbmUgQ09ORklHX1NZU19SQU1CT09UCiAjZGVmaW5lIENPTkZJR19TWVNfRVhUUkFfRU5WX1JFTE9DCiAjZWxzZQpAQCAtNTQ5LDggKzU1MCw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fSUZDX0EwMDMzOTkKLSNpZiAhZGVmaW5lZChDT05GSUdfU1BMKSAmJiAhZGVmaW5lZChDT05GSUdfU1lTX1JBTUJPT1QpXAotCSYmICFkZWZpbmVkKENPTkZJR19TRUNVUkVfQk9PVCkKKyNpZiAhZGVmaW5lZChDT05GSUdfU1BMKSAmJiAhZGVmaW5lZChDT05GSUdfU1lTX1JBTUJPT1QpCiAjZGVmaW5lIENPTkZJR19BMDAzMzk5X05PUl9XT1JLQVJPVU5ECiAjZW5kaWYKICNlbmRpZgpAQCAtNTY2LDcgKzU2Niw3IEBACiAJCQkJCQktIEdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQogI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfT0ZGU0VUCUNPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCiAKLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDI1NiAqIDEwMjQpIC8qIFJlc2VydmUgMjU2IGtCIGZvciBNb24qLworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoNzY4ICogMTAyNCkKICNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoMTAyNCAqIDEwMjQpCS8qIFJlc2VydmVkIGZvciBtYWxsb2MqLwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1AxMDIyRFMuaCBiL2luY2x1ZGUvY29uZmlncy9QMTAyMkRTLmgKaW5kZXggMTM5ZDRmZS4uOTU5Y2RmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1AxMDIyRFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvUDEwMjJEUy5oCkBAIC0zNTIsNyArMzUyLDcgQEAKIAkoQ09ORklHX1NZU19JTklUX1JBTV9TSVpFIC0gR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCiAjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQKIAotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoNTEyICogMTAyNCkKKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDc2OCAqIDEwMjQpCiAjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDEwICogMTAyNCAqIDEwMjQpCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUDEwMjNSREIuaCBiL2luY2x1ZGUvY29uZmlncy9QMTAyM1JEQi5oCmluZGV4IGI0MWNiNGEuLmJhM2RhMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9QMTAyM1JEQi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9QMTAyM1JEQi5oCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkJCQkJR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCiAjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQKIAotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCSg1MTIgKiAxMDI0KQkgIC8qIFJlc2VydmUgNTEyIGtCIGZvciBNb24gKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkoNzY4ICogMTAyNCkJICAvKiBSZXNlcnZlIDUxMiBrQiBmb3IgTW9uICovCiAjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkoNiAqIDEwMjQgKiAxMDI0KSAvKiBSZXNlcnZlZCBmb3IgbWFsbG9jICovCiAKICNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0JBU0UJCTB4ZmZhMDAwMDAKQEAgLTM2MCw3ICszNjAsNyBAQAogLyogRGVmYXVsdCBhZGRyZXNzIG9mIG1pY3JvY29kZSBmb3IgdGhlIExpbnV4IEZtYW4gZHJpdmVyICovCiAvKiBRRSBtaWNyb2NvZGUvZmlybXdhcmUgYWRkcmVzcyAqLwogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTk9SCi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCTB4RUZGMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19GTUFOX0ZXX0FERFIJMHhFRkYwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfTEVOR1RICTB4MTAwMDAKICNkZWZpbmUgQ09ORklHX1NZU19GRFRfUEFECQkoMHgzMDAwICsgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0xFTkdUSCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1AxMDIzUkRTLmggYi9pbmNsdWRlL2NvbmZpZ3MvUDEwMjNSRFMuaAppbmRleCAyZmZhMzU0Li44NjAxZWVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvUDEwMjNSRFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvUDEwMjNSRFMuaApAQCAtMTk4LDcgKzE5OCw3IEBACiAJKENPTkZJR19TWVNfSU5JVF9SQU1fRU5EIC0gR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCiAjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQKIAotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCSgyNTYgKiAxMDI0KSAvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uICovCisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JKDc2OCAqIDEwMjQpCiAjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkoNiAqIDEwMjQgKiAxMDI0KSAvKiBSZXNlcnZlZCBmb3IgbWFsbG9jICovCiAKICNpZm5kZWYgQ09ORklHX05BTkRfU1BMCkBAIC01MDAsMTAgKzUwMCwxMCBAQAogLyogRGVmYXVsdCBhZGRyZXNzIG9mIG1pY3JvY29kZSBmb3IgdGhlIExpbnV4IEZtYW4gZHJpdmVyICovCiAvKiBRRSBtaWNyb2NvZGUvZmlybXdhcmUgYWRkcmVzcyAqLwogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTk9SCi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCTB4RUZGMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19GTUFOX0ZXX0FERFIJMHhFRkYwMDAwMAogI2Vsc2UKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0lOX05BTkQKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJMHgxZjAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCTB4MWYwMDAwMAogI2VuZGlmCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19MRU5HVEgJMHgxMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0ZEVF9QQUQJCSgweDMwMDAgKyBDT05GSUdfU1lTX1FFX0ZNQU5fRldfTEVOR1RIKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1AxX1AyX1JEQi5oIGIvaW5jbHVkZS9jb25maWdzL1AxX1AyX1JEQi5oCmluZGV4IDJmZmFmNWMuLjBmMDQwNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9QMV9QMl9SREIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvUDFfUDJfUkRCLmgKQEAgLTIzOCw3ICsyMzgsNyBAQAogCQkJCQkJLSBHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKICNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX09GRlNFVAlDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAogCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSgyNTYgKiAxMDI0KSAvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDc2OCAqIDEwMjQpCiAjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDEwMjQgKiAxMDI0KQkvKiBSZXNlcnZlZCBmb3IgbWFsbG9jKi8KIAogI2lmbmRlZiBDT05GSUdfTkFORF9TUEwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9QMjAyMERTLmggYi9pbmNsdWRlL2NvbmZpZ3MvUDIwMjBEUy5oCmluZGV4IDNkMGI1YzIuLjgyMGI2MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9QMjAyMERTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1AyMDIwRFMuaApAQCAtMjg0LDcgKzI4NCw3IEBACiAjZGVmaW5lIENPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCShDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUgLSBHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKICNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX09GRlNFVAlDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAogCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSgyNTYgKiAxMDI0KSAvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uICovCisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSg3NjggKiAxMDI0KQogI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCSgxMDI0ICogMTAyNCkJLyogUmVzZXJ2ZWQgZm9yIG1hbGxvYyAqLwogCiAjZGVmaW5lIENPTkZJR19TWVNfTkFORF9CQVNFCQkweGZmYTAwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUDIwNDFSREIuaCBiL2luY2x1ZGUvY29uZmlncy9QMjA0MVJEQi5oCmluZGV4IGIzODgwZjEuLjU0ZTY0OTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9QMjA0MVJEQi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9QMjA0MVJEQi5oCkBAIC0zMTUsNyArMzE1LDcgQEAKIAkJCQkJR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCiAjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQKIAotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoNTEyICogMTAyNCkKKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDc2OCAqIDEwMjQpCiAjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDEwMjQgKiAxMDI0KQogCiAvKiBTZXJpYWwgUG9ydCAtIGNvbnRyb2xsZWQgb24gYm9hcmQgd2l0aCBqdW1wZXIgSjgKQEAgLTUwNiw3ICs1MDYsNyBAQAogICogZW52LCBzbyB3ZSBnb3QgMHgxMTAwMDAuCiAgKi8KICNkZWZpbmUgQ09ORklHX1NZU19RRV9GV19JTl9TUElGTEFTSAotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUgkweDExMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkweDExMDAwMAogI2VsaWYgZGVmaW5lZChDT05GSUdfU0RDQVJEKQogLyoKICAqIFBCTCBTRCBib290IGltYWdlIHNob3VsZCBzdG9yZWQgYXQgMHgxMDAwKDggYmxvY2tzKSwgdGhlIHNpemUgb2YgdGhlIGltYWdlIGlzCkBAIC01MTQsMTAgKzUxNCwxMCBAQAogICogMHgyMDAwICgxNiBibG9ja3MpLCA4ICsgMTY1MCArIDE2ID0gMTY3NCwgZW5sYXJnZSBpdCB0byAxNjgwLgogICovCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9NTUMKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJKDUxMiAqIDE2ODApCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCSg1MTIgKiAxNjgwKQogI2VsaWYgZGVmaW5lZChDT05GSUdfTkFORCkKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0lOX05BTkQKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJKDggKiBDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRSkKKyNkZWZpbmUgQ09ORklHX1NZU19GTUFOX0ZXX0FERFIJKDggKiBDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRSkKICNlbGlmIGRlZmluZWQoQ09ORklHX1NSSU9fUENJRV9CT09UX1NMQVZFKQogLyoKICAqIFNsYXZlIGhhcyBubyB1Y29kZSBsb2NhbGx5LCBpdCBjYW4gZmV0Y2ggdGhpcyBmcm9tIHJlbW90ZS4gV2hlbiBpbXBsZW1lbnRpbmcKQEAgLTUyNywxMCArNTI3LDEwIEBACiAgKiBtYXN0ZXIgTEFXLT50aGUgdWNvZGUgYWRkcmVzcyBpbiBtYXN0ZXIncyBtZW1vcnkgc3BhY2UuCiAgKi8KICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0lOX1JFTU9URQotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUgkweEZGRTAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCTB4RkZFMDAwMDAKICNlbHNlCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9OT1IKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJMHhFRkYwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkweEVGRjAwMDAwCiAjZW5kaWYKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0xFTkdUSAkweDEwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfRkRUX1BBRAkJKDB4MzAwMCArIENPTkZJR19TWVNfUUVfRk1BTl9GV19MRU5HVEgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUlBYQ2xhc3NpYy5oIGIvaW5jbHVkZS9jb25maWdzL1JQWENsYXNzaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYwN2QwYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvUlBYQ2xhc3NpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDgzICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDIKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCi0gKi8KLQotLyoKLSAqIGJvYXJkL2NvbmZpZy5oIC0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBib2FyZCBzcGVjaWZpYwotICovCi0KLS8qIFlvby4gSm9uZ2hvb24sIElQb25lLCB5b290aEBpcG9uZS5jby5rcgotICogVS1Cb290IHBvcnQgb24gUlBYbGl0ZSBib2FyZAotICovCi0KLSNpZm5kZWYgX19DT05GSUdfSAotI2RlZmluZSBfX0NPTkZJR19ICi0KLSNkZWZpbmUJUlBYQ2xhc3NpY181ME1IegotCi0vKgotICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKLSAqIChlYXN5IHRvIGNoYW5nZSkKLSAqLwotCi0jZGVmaW5lIENPTkZJR19NUEM4NjAgICAgICAgICAgIDEKLSNkZWZpbmUgQ09ORklHX1JQWENMQVNTSUMJCTEKLQotI2RlZmluZQlDT05GSUdfU1lTX1RFWFRfQkFTRQkweGZmMDAwMDAwCi0KLSNkZWZpbmUJQ09ORklHXzh4eF9DT05TX1NNQzEJMQkvKiBDb25zb2xlIGlzIG9uIFNNQzEJCSovCi0jdW5kZWYJQ09ORklHXzh4eF9DT05TX1NNQzIKLSN1bmRlZglDT05GSUdfOHh4X0NPTlNfTk9ORQotI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTk2MDAJLyogY29uc29sZSBiYXVkcmF0ZSA9IDk2MDBicHMJKi8KLQotLyogRGVmaW5lIENPTkZJR19GRUNfRU5FVCB0byB1c2UgRmFzdCBldGhlcm5ldCBpbnN0ZWFkIG9mIGV0aGVybmV0IG9uIFNDQzEgICAqLwotI2RlZmluZSBDT05GSUdfRkVDX0VORVQKLSNpZmRlZiBDT05GSUdfRkVDX0VORVQKLSNkZWZpbmUgQ09ORklHX1NZU19ESVNDT1ZFUl9QSFkgICAgICAgIDEKLSNkZWZpbmUgQ09ORklHX01JSSAgICAgICAgICAgICAgMQotI2VuZGlmIC8qIENPTkZJR19GRUNfRU5FVCAqLwotI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IKLQotLyogVmlkZW8gY29uc29sZSAoZ3JhcGhpYzogRXBzb24gU0VEMTM4MDYgb24gRUNDWCBib2FyZCwgbm8ga2V5Ym9hcmQgICAgICAgICAqLwotI2lmIDEKLSNkZWZpbmUgQ09ORklHX1ZJREVPX1NFRDEzODA2Ci0jZGVmaW5lIENPTkZJR19ORUNfTkw2NDQ4QkMyMAotI2RlZmluZSBDT05GSUdfVklERU9fU0VEMTM4MDZfMTZCUFAKLQotI2RlZmluZSBDT05GSUdfQ0ZCX0NPTlNPTEUKLSNkZWZpbmUgQ09ORklHX1ZJREVPX0xPR08KLSNkZWZpbmUgQ09ORklHX1ZJREVPX0JNUF9MT0dPCi0jZGVmaW5lIENPTkZJR19DT05TT0xFX0VYVFJBX0lORk8KLSNkZWZpbmUgQ09ORklHX1ZHQV9BU19TSU5HTEVfREVWSUNFCi0jZGVmaW5lIENPTkZJR19WSURFT19TV19DVVJTT1IKLSNlbmRpZgotCi0jaWYgMAotI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCS0xCS8qIGF1dG9ib290IGRpc2FibGVkCQkqLwotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQk1CS8qIGF1dG9ib290IGFmdGVyIDUgc2Vjb25kcwkqLwotI2VuZGlmCi0KLSNkZWZpbmUgQ09ORklHX1pFUk9fQk9PVERFTEFZX0NIRUNLIDEKLQotI3VuZGVmCUNPTkZJR19CT09UQVJHUwotI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJCQkJCQkJXAotCSJ0ZnRwYm9vdDsgIgkJCQkJCQkJXAotCSJzZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9ICIJXAotCSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza306JHtob3N0bmFtZX06Om9mZjsgIglcCi0JImJvb3RtIgotCi0jZGVmaW5lIENPTkZJR19MT0FEU19FQ0hPCTEJLyogZWNobyBvbiBmb3Igc2VyaWFsIGRvd25sb2FkCSovCi0jdW5kZWYJQ09ORklHX1NZU19MT0FEU19CQVVEX0NIQU5HRQkJLyogZG9uJ3QgYWxsb3cgYmF1ZHJhdGUgY2hhbmdlCSovCi0KLSN1bmRlZglDT05GSUdfV0FUQ0hET0cJCQkvKiB3YXRjaGRvZyBkaXNhYmxlZAkJKi8KLQotLyoKLSAqIEJPT1RQIG9wdGlvbnMKLSAqLwotI2RlZmluZSBDT05GSUdfQk9PVFBfU1VCTkVUTUFTSwotI2RlZmluZSBDT05GSUdfQk9PVFBfR0FURVdBWQotI2RlZmluZSBDT05GSUdfQk9PVFBfSE9TVE5BTUUKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RQQVRICi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09URklMRVNJWkUKLQotCi0jZGVmaW5lCUNPTkZJR19DTE9DS1NfSU5fTUhaCTEJLyogY2xvY2tzIHBhc3NzZWQgdG8gTGludXggaW4gTUh6ICovCi0KLQotLyoKLSAqIENvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uLgotICovCi0jaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+Ci0KLSNkZWZpbmUgQ09ORklHX0NNRF9FTEYKLQotCi0vKgotICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwotICovCi0jZGVmaW5lIENPTkZJR19TWVNfUkVTRVRfQUREUkVTUwkweDgwMDAwMDAwCi0jZGVmaW5lCUNPTkZJR19TWVNfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKLSNkZWZpbmUJQ09ORklHX1NZU19DQlNJWkUJMTAyNAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KLSNlbHNlCi0jZGVmaW5lCUNPTkZJR19TWVNfQ0JTSVpFCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KLSNlbmRpZgotI2RlZmluZQlDT05GSUdfU1lTX1BCU0laRSAoQ09ORklHX1NZU19DQlNJWkUrc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUJQ09ORklHX1NZU19NQVhBUkdTCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLwotI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCUNPTkZJR19TWVNfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQJMHgwMDQwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHgwMEMwMDAwCS8qIDQgLi4uIDEyIE1CIGluIERSQU0JKi8KLQotI2RlZmluZQlDT05GSUdfU1lTX0xPQURfQUREUgkJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJKi8KLQotLyoKLSAqIExvdyBMZXZlbCBDb25maWd1cmF0aW9uIFNldHRpbmdzCi0gKiAoYWRkcmVzcyBtYXBwaW5ncywgcmVnaXN0ZXIgaW5pdGlhbCB2YWx1ZXMsIGV0Yy4pCi0gKiBZb3Ugc2hvdWxkIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIGlmIHlvdSBtYWtlIGNoYW5nZXMgaGVyZS4KLSAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogSW50ZXJuYWwgTWVtb3J5IE1hcHBlZCBSZWdpc3RlcgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfSU1NUgkJMHhGQTIwMDAwMAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBJMkMgQ29uZmlndXJhdGlvbgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfSTJDX1NQRUVECQk1MDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TTEFWRQkJMHgzNAotCi0KLS8qIGVuYWJsZSBJMkMgYW5kIHNlbGVjdCB0aGUgaGFyZHdhcmUvc29mdHdhcmUgZHJpdmVyICovCi0jZGVmaW5lIENPTkZJR19IQVJEX0kyQwkJMQkvKiBJMkMgd2l0aCBoYXJkd2FyZSBzdXBwb3J0CSovCi0jdW5kZWYgIENPTkZJR19TWVNfSTJDX1NPRlQJCS8qIEkyQyBiaXQtYmFuZ2VkCQkqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1lTX0kyQ19TT0ZUKQotI2RlZmluZSBDT05GSUdfU1lTX0kyQwkJCTEKLS8qCi0gKiBTb2Z0d2FyZSAoYml0LWJhbmcpIEkyQyBkcml2ZXIgY29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIEkyQ19QT1JUCTEJCS8qIFBvcnQgQT0wLCBCPTEsIEM9MiwgRD0zICovCi0jZGVmaW5lIEkyQ19BQ1RJVkUJKGlvcC0+cGRpciB8PSAgMHgwMDAwMDAxMCkKLSNkZWZpbmUgSTJDX1RSSVNUQVRFCShpb3AtPnBkaXIgJj0gfjB4MDAwMDAwMTApCi0jZGVmaW5lIEkyQ19SRUFECSgoaW9wLT5wZGF0ICYgMHgwMDAwMDAxMCkgIT0gMCkKLSNkZWZpbmUgSTJDX1NEQShiaXQpCWlmKGJpdCkgaW9wLT5wZGF0IHw9ICAweDAwMDAwMDEwOyBcCi0JCQllbHNlICAgIGlvcC0+cGRhdCAmPSB+MHgwMDAwMDAxMAotI2RlZmluZSBJMkNfU0NMKGJpdCkJaWYoYml0KSBpb3AtPnBkYXQgfD0gIDB4MDAwMDAwMjA7IFwKLQkJCWVsc2UgICAgaW9wLT5wZGF0ICY9IH4weDAwMDAwMDIwCi0jZGVmaW5lIEkyQ19ERUxBWQl1ZGVsYXkoNSkJLyogMS80IEkyQyBjbG9jayBkdXJhdGlvbiAqLwotCi0KLSNkZWZpbmUgQ09ORklHX1NZU19JMkNfU09GVF9TUEVFRAk1MDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TT0ZUX1NMQVZFCTB4MzQKLSNlbmRpZgotCi0jIGRlZmluZSBDT05GSUdfU1lTX0kyQ19FRVBST01fQUREUgkweDUwCS8qIEVFUFJPTSBYMjRDMTYJCSovCi0jIGRlZmluZSBDT05GSUdfU1lTX0kyQ19FRVBST01fQUREUl9MRU4gMQkvKiBieXRlcyBvZiBhZGRyZXNzCQkqLwotLyogbWFzayBvZiBhZGRyZXNzIGJpdHMgdGhhdCBvdmVyZmxvdyBpbnRvIHRoZSAiRUVQUk9NIGNoaXAgYWRkcmVzcyIgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JMkNfRUVQUk9NX0FERFJfT1ZFUkZMT1cJMHgwNwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIERQUkFNKQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fQUREUglDT05GSUdfU1lTX0lNTVIKLSNkZWZpbmUJQ09ORklHX1NZU19JTklUX1JBTV9TSVpFCTB4MzAwMAkvKiBTaXplIG9mIHVzZWQgYXJlYSBpbiBEUFJBTQkqLwotI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAkoQ09ORklHX1NZU19JTklUX1JBTV9TSVpFIC0gR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCi0jZGVmaW5lCUNPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU3RhcnQgYWRkcmVzc2VzIGZvciB0aGUgZmluYWwgbWVtb3J5IGNvbmZpZ3VyYXRpb24KLSAqIChTZXQgdXAgYnkgdGhlIHN0YXJ0dXAgY29kZSkKLSAqIFBsZWFzZSBub3RlIHRoYXQgQ09ORklHX1NZU19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCi0gKi8KLSNkZWZpbmUJQ09ORklHX1NZU19TRFJBTV9CQVNFCQkweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRQkweEZGMDAwMDAwCi0KLSNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkIChDT05GSUdfVklERU9fU0VEMTM4MDYpIHx8IGRlZmluZWQoQ09ORklHX0NNRF9JREUpCi0jZGVmaW5lCUNPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSgyNTYgPDwgMTApCS8qIFJlc2VydmUgMjU2IGtCIGZvciBNb25pdG9yCSovCi0jZWxzZQotI2RlZmluZQlDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoMTI4IDw8IDEwKQkvKiBSZXNlcnZlIDEyOCBrQiBmb3IgTW9uaXRvcgkqLwotI2VuZGlmCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFCTB4RkYwMDAwMDAKLS8qJSUlICNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UJQ09ORklHX1NZU19GTEFTSF9CQVNFICovCi0jZGVmaW5lCUNPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDEyOCA8PCAxMCkJLyogUmVzZXJ2ZSAxMjgga0IgZm9yIG1hbGxvYygpCSovCi0KLS8qCi0gKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCi0gKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcwotICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotICovCi0jZGVmaW5lCUNPTkZJR19TWVNfQk9PVE1BUFNaCQkoOCA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eAkqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGTEFTSCBvcmdhbml6YXRpb24KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLwotI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUCTcxCS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKQkqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykJKi8KLQotI2lmIDAKLSNkZWZpbmUJQ09ORklHX0VOVl9JU19JTl9GTEFTSAkxCi0jZGVmaW5lCUNPTkZJR19FTlZfT0ZGU0VUCQkweDIwMDAwCS8qICAgT2Zmc2V0ICAgb2YgRW52aXJvbm1lbnQgU2VjdG9yICAqLwotI2RlZmluZSBDT05GSUdfRU5WX1NFQ1RfU0laRSAgICAgICAweDgwMDAKLSNkZWZpbmUJQ09ORklHX0VOVl9TSVpFCQkweDgwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IgICovCi0jZWxzZQotI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05WUkFNICAgICAxCi0jZGVmaW5lIENPTkZJR19FTlZfQUREUiAgICAgICAgICAgIDB4ZmEwMDAxMDAKLSNkZWZpbmUgQ09ORklHX0VOVl9TSVpFICAgICAgICAgICAgMHgxMDAwCi0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2FjaGUgQ29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfQ0FDSEVMSU5FX1NJWkUJMTYJLyogRm9yIGFsbCBNUEM4eHggQ1BVcwkJCSovCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lIENPTkZJR19TWVNfQ0FDSEVMSU5FX1NISUZUCTQJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUJKi8KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTWVBDUiAtIFN5c3RlbSBQcm90ZWN0aW9uIENvbnRyb2wJCQkJMTEtOQotICogU1lQQ1IgY2FuIG9ubHkgYmUgd3JpdHRlbiBvbmNlIGFmdGVyIHJlc2V0IQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU29mdHdhcmUgJiBCdXMgTW9uaXRvciBUaW1lciBtYXgsIEJ1cyBNb25pdG9yIGVuYWJsZSwgU1cgV2F0Y2hkb2cgZnJlZXplCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19TWVBDUgkoU1lQQ1JfU1dUQyB8IFNZUENSX0JNVCB8IFNZUENSX0JNRSB8IFNZUENSX1NXRiB8IFwKLQkJCSBTWVBDUl9TV1ApCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNJVU1DUiAtIFNJVSBNb2R1bGUgQ29uZmlndXJhdGlvbgkJCQkxMS02Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQQ01DSUEgY29uZmlnLiwgbXVsdGktZnVuY3Rpb24gcGluIHRyaS1zdGF0ZQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfU0lVTUNSCShTSVVNQ1JfTUxSQzEwKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBUQlNDUiAtIFRpbWUgQmFzZSBTdGF0dXMgYW5kIENvbnRyb2wJCQkJMTEtMjYKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENsZWFyIFJlZmVyZW5jZSBJbnRlcnJ1cHQgU3RhdHVzLCBUaW1lYmFzZSBmcmVlemluZyBlbmFibGVkCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19UQlNDUgkoVEJTQ1JfUkVGQSB8IFRCU0NSX1JFRkIgfCBUQlNDUl9UQkYgfCBUQlNDUl9UQkUpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFJUQ1NDIC0gUmVhbC1UaW1lIENsb2NrIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcgkJMTEtMjcKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotLyolJSUjZGVmaW5lIENPTkZJR19TWVNfUlRDU0MJKFJUQ1NDX1NFQyB8IFJUQ1NDX0FMUiB8IFJUQ1NDX1JURnwgUlRDU0NfUlRFKSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1JUQ1NDCShSVENTQ19TRUMgfCAgUlRDU0NfQUxSIHwgUlRDU0NfUlRFKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQSVNDUiAtIFBlcmlvZGljIEludGVycnVwdCBTdGF0dXMgYW5kIENvbnRyb2wJCTExLTMxCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDbGVhciBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzLCBJbnRlcnJ1cHQgVGltZXIgZnJlZXppbmcgZW5hYmxlZAotICovCi0jZGVmaW5lIENPTkZJR19TWVNfUElTQ1IgKFBJU0NSX1BTIHwgUElTQ1JfUElURiB8IFBJU0NSX1BURSkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUExQUkNSIC0gUExMLCBMb3ctUG93ZXIsIGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyCQkxNS0zMAotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUmVzZXQgUExMIGxvY2sgc3RhdHVzIHN0aWNreSBiaXQsIHRpbWVyIGV4cGlyZWQgc3RhdHVzIGJpdCBhbmQgdGltZXIKLSAqIGludGVycnVwdCBzdGF0dXMgYml0Ci0gKgotICogSWYgdGhpcyBpcyBhIDgwIE1IeiBDUFUsIHNldCBQTEwgbXVsdGlwbGljYXRpb24gZmFjdG9yIHRvIDUgKDUqMTY9ODApIQotICovCi0vKiB1cCB0byA1MCBNSHogd2UgdXNlIGEgMToxIGNsb2NrICovCi0jZGVmaW5lIENPTkZJR19TWVNfUExQUkNSCSggKDQgPDwgUExQUkNSX01GX1NISUZUKSB8IFBMUFJDUl9URVhQUyB8IFBMUFJDUl9TUExTUyB8IFBMUFJDUl9UTUlTVCkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU0NDUiAtIFN5c3RlbSBDbG9jayBhbmQgcmVzZXQgQ29udHJvbCBSZWdpc3RlcgkJMTUtMjcKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNldCBjbG9jayBvdXRwdXQsIHRpbWViYXNlIGFuZCBSVEMgc291cmNlIGFuZCBkaXZpZGVyLAotICogcG93ZXIgbWFuYWdlbWVudCBhbmQgc29tZSBvdGhlciBpbnRlcm5hbCBjbG9ja3MKLSAqLwotI2RlZmluZSBTQ0NSX01BU0sJU0NDUl9FQkRGMDAKLS8qIHVwIHRvIDUwIE1IeiB3ZSB1c2UgYSAxOjEgY2xvY2sgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19TQ0NSCShTQ0NSX0NPTTAwIHwgU0NDUl9UQlMpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBDTUNJQSBzdHVmZgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BDTUNJQV9NRU1fQUREUgkoMHhFMDAwMDAwMCkKLSNkZWZpbmUgQ09ORklHX1NZU19QQ01DSUFfTUVNX1NJWkUJKCA2NCA8PCAyMCApCi0jZGVmaW5lIENPTkZJR19TWVNfUENNQ0lBX0RNQV9BRERSCSgweEU0MDAwMDAwKQotI2RlZmluZSBDT05GSUdfU1lTX1BDTUNJQV9ETUFfU0laRQkoIDY0IDw8IDIwICkKLSNkZWZpbmUgQ09ORklHX1NZU19QQ01DSUFfQVRUUkJfQUREUgkoMHhFODAwMDAwMCkKLSNkZWZpbmUgQ09ORklHX1NZU19QQ01DSUFfQVRUUkJfU0laRQkoIDY0IDw8IDIwICkKLSNkZWZpbmUgQ09ORklHX1NZU19QQ01DSUFfSU9fQUREUgkoMHhFQzAwMDAwMCkKLSNkZWZpbmUgQ09ORklHX1NZU19QQ01DSUFfSU9fU0laRQkoIDY0IDw8IDIwICkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogSURFL0FUQSBzdHVmZiAoU3VwcG9ydHMgSURFIGhhcmRkaXNrIG9uIFBDTUNJQSBBZGFwdGVyKQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNkZWZpbmUgQ09ORklHX0lERV9QUkVJTklUCTEJLyogVXNlIHByZWluaXQgSURFIGhvb2sgKi8KLSNkZWZpbmUJQ09ORklHX0lERV84eHhfUENDQVJECTEJLyogVXNlIElERSB3aXRoIFBDIENhcmQJQWRhcHRlcgkqLwotCi0jdW5kZWYJQ09ORklHX0lERV84eHhfRElSRUNUCQkvKiBEaXJlY3QgSURFICAgIG5vdCBzdXBwb3J0ZWQJKi8KLSN1bmRlZglDT05GSUdfSURFX0xFRAkJCS8qIExFRCAgIGZvciBpZGUgbm90IHN1cHBvcnRlZAkqLwotI3VuZGVmCUNPTkZJR19JREVfUkVTRVQJCS8qIHJlc2V0IGZvciBpZGUgbm90IHN1cHBvcnRlZAkqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfSURFX01BWEJVUwkJMQkvKiBtYXguIDEgSURFIGJ1cwkJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JREVfTUFYREVWSUNFCTEJLyogbWF4LiAxIGRyaXZlIHBlciBJREUgYnVzCSovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19BVEFfSURFMF9PRkZTRVQJMHgwMDAwCi0KLSNkZWZpbmUgQ09ORklHX1NZU19BVEFfQkFTRV9BRERSCUNPTkZJR19TWVNfUENNQ0lBX01FTV9BRERSCi0KLS8qIE9mZnNldCBmb3IgZGF0YSBJL08JCQkqLwotI2RlZmluZSBDT05GSUdfU1lTX0FUQV9EQVRBX09GRlNFVAkoQ09ORklHX1NZU19QQ01DSUFfTUVNX1NJWkUgKyAweDMyMCkKLQotLyogT2Zmc2V0IGZvciBub3JtYWwgcmVnaXN0ZXIgYWNjZXNzZXMJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19BVEFfUkVHX09GRlNFVAkoMiAqIENPTkZJR19TWVNfUENNQ0lBX01FTV9TSVpFICsgMHgzMjApCi0KLS8qIE9mZnNldCBmb3IgYWx0ZXJuYXRlIHJlZ2lzdGVycwkqLwotI2RlZmluZSBDT05GSUdfU1lTX0FUQV9BTFRfT0ZGU0VUCTB4MDEwMAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqLwotLyogI2RlZmluZQlDT05GSUdfU1lTX0RFUgkweDIwMDIwMDBGICovCi0jZGVmaW5lIENPTkZJR19TWVNfREVSCTAKLQotLyoKLSAqIEluaXQgTWVtb3J5IENvbnRyb2xsZXI6Ci0gKgotICogQlIwIGFuZCBPUjAgKEZMQVNIKQotICovCi0KLSNkZWZpbmUgRkxBU0hfQkFTRV9QUkVMSU0JMHhGRTAwMDAwMAkvKiBGTEFTSCBiYXNlICovCi0jZGVmaW5lIENPTkZJR19TWVNfUFJFTElNX09SX0FNCTB4RkUwMDAwMDAJLyogT1IgYWRkciBtYXNrICovCi0KLS8qIEZMQVNIIHRpbWluZzogQUNTID0gMCwgVFJMWCA9IDAsIENTTlQgPSAwLCBTQ1kgPSA0LCBFVEhSID0gMCwgQklIID0gMSAqLwotI2RlZmluZSBDT05GSUdfU1lTX09SX1RJTUlOR19GTEFTSCAoT1JfU0NZXzRfQ0xLIHwgT1JfQkkpCi0KLSNkZWZpbmUgQ09ORklHX1NZU19PUjBfUFJFTElNCShDT05GSUdfU1lTX1BSRUxJTV9PUl9BTSB8IENPTkZJR19TWVNfT1JfVElNSU5HX0ZMQVNIKQotI2RlZmluZSBDT05GSUdfU1lTX0JSMF9QUkVMSU0JKChGTEFTSF9CQVNFX1BSRUxJTSAmIEJSX0JBX01TSykgfCBCUl9WKQotCi0vKgotICogQlIxIGFuZCBPUjEgKFNEUkFNKQotICoKLSAqLwotI2RlZmluZSBTRFJBTV9CQVNFX1BSRUxJTQkweDAwMDAwMDAwCS8qIFNEUkFNIGJhc2UJKi8KLSNkZWZpbmUJU0RSQU1fTUFYX1NJWkUJCTB4MDEwMDAwMDAJLyogbWF4IDE2IE1CICovCi0KLS8qIFNEUkFNIHRpbWluZzogTXVsdGlwbGV4ZWQgYWRkcmVzc2VzLCBHUEw1IG91dHB1dCB0byBHUEw1X0EgKGRvbid0IGNhcmUpCSovCi0jZGVmaW5lIENPTkZJR19TWVNfT1JfVElNSU5HX1NEUkFNCTB4MDAwMDBFMDAKLQotI2RlZmluZSBDT05GSUdfU1lTX09SMV9QUkVMSU0JKENPTkZJR19TWVNfUFJFTElNX09SX0FNIHwgQ09ORklHX1NZU19PUl9USU1JTkdfU0RSQU0gKQotI2RlZmluZSBDT05GSUdfU1lTX0JSMV9QUkVMSU0JKChTRFJBTV9CQVNFX1BSRUxJTSAmIEJSX0JBX01TSykgfCBCUl9NU19VUE1BIHwgQlJfViApCi0KLS8qIFJQWExJVEUgbWVtIHNldHRpbmcgKi8KLSNkZWZpbmUJQ09ORklHX1NZU19CUjNfUFJFTElNCTB4RkE0MDAwMDEJCS8qIEJDU1IgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19PUjNfUFJFTElNCTB4ZmY3Zjg5NzAKLSNkZWZpbmUJQ09ORklHX1NZU19CUjRfUFJFTElNCTB4RkEwMDA0MDEJCS8qIE5WUkFNJlNSQU0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19PUjRfUFJFTElNCTB4RkZGODA5NzAKLQotLyogRUNDWCBDUyBzZXR0aW5ncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTRUQxMzgwNl9PUiAgICAgICAgICAgICAweEZGQzAwMTA4ICAgICAvKiAtIDQgTW8KLQkJCQkJCSAgIC0gQnVyc3QgaW5oaWJpdAotCQkJCQkJICAgLSBleHRlcm5hbCBUQSAgICAgICAgICAgICAqLwotI2RlZmluZSBTRUQxMzgwNl9SRUdfQUREUiAgICAgICAweGEwMDAwMDAwCi0jZGVmaW5lIFNFRDEzODA2X0FDQ0VTICAgICAgICAgIDB4ODAxICAgICAgICAgICAvKiAxNiBiaXQgYWNjZXNzICAgICAgICAgICAgICovCi0KLQotLyogR2xvYmFsIGRlZmluaXRpb25zIGZvciB0aGUgRUNDWCBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFQ0NYX0NTUl9BRERSICAgICAgICAgICAoMHhmYWMwMDAwMCkKLSNkZWZpbmUgRUNDWF9DU1I4X09GRlNFVCAgICAgICAgKDB4OCkKLSNkZWZpbmUgRUNDWF9DU1IxMV9PRkZTRVQgICAgICAgKDB4QikKLSNkZWZpbmUgRUNDWF9DU1IxMl9PRkZTRVQgICAgICAgKDB4QykKLQotI2RlZmluZSBFQ0NYX0NTUjggICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKEVDQ1hfQ1NSX0FERFIgKyBFQ0NYX0NTUjhfT0ZGU0VUKQotI2RlZmluZSBFQ0NYX0NTUjExICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKEVDQ1hfQ1NSX0FERFIgKyBFQ0NYX0NTUjExX09GRlNFVCkKLSNkZWZpbmUgRUNDWF9DU1IxMiAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShFQ0NYX0NTUl9BRERSICsgRUNDWF9DU1IxMl9PRkZTRVQpCi0KLQotI2RlZmluZSBSRUdfR1BJT19DVFJMIDB4MDA4Ci0KLS8qIERlZmluaXRpb25zIGZvciBDU1I4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRUNDWF9FTkVQU09OICAgICAgICAgICAgMHg4MCAgICAvKiBCaXQgMDoKLQkJCQkJICAgMD0gZGlzYWJsZSBhbmQgcmVzZXQgU0VEMTM4NgotCQkJCQkgICAxPSBlbmFibGUgU0VEMTM4NiAgICAgICAgICAgICAgICAgKi8KLS8qIEJpdCAxOiAgIDA9IFNFRDEzODYgaW4gQmlnIEVuZGlhbiBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgIDE9IFNFRDEzODYgaW4gbGl0dGxlIGVuZGlhbiBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRUNDWF9MRSAgICAgICAgICAgICAgICAgMHg0MAotI2RlZmluZSBFQ0NYX0JFICAgICAgICAgICAgICAgICAweDAwCi0KLS8qIEJpdCAyLDM6IFNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgMDAgPSBEaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgMDEgPSBDUzIgaXMgdXNlZCBmb3IgdGhlIFNFRDEzODYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgMTAgPSBDUzUgaXMgdXNlZCBmb3IgdGhlIFNFRDEzODYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgMTEgPSByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRUNDWF9DUzIgICAgICAgICAgICAgICAgMHgxMAotI2RlZmluZSBFQ0NYX0NTNSAgICAgICAgICAgICAgICAweDIwCi0KLS8qIERlZmluaXRpb25zIGZvciBDU1IxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRUNDWF9JRCAgICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZSBFQ0NYXzg2MCAgICAgICAgICAgICAgICAweDAxCi0KLS8qCi0gKiBNZW1vcnkgUGVyaW9kaWMgVGltZXIgUHJlc2NhbGVyCi0gKi8KLQotLyogcGVyaW9kaWMgdGltZXIgZm9yIHJlZnJlc2ggKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQU1SX1BUQQk1OAotCi0vKgotICogUmVmcmVzaCBjbG9jayBQcmVzY2FsYXIKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01QVFBSCU1QVFBSX1BUUF9ESVY4Ci0KLS8qCi0gKiBNQU1SIHNldHRpbmdzIGZvciBTRFJBTQotICovCi0KLS8qIDEwIGNvbHVtbiBTRFJBTSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BTVJfMTBDT0wJKChDT05GSUdfU1lTX01BTVJfUFRBIDw8IE1BTVJfUFRBX1NISUZUKSAgfCBNQU1SX1BUQUUJICAgIHwJXAotCQkJIE1BTVJfQU1BX1RZUEVfMiB8IE1BTVJfRFNBXzFfQ1lDTCB8IE1BTVJfRzBDTEFfQTEyIHwJXAotCQkJIE1BTVJfR1BMX0E0RElTIHwgTUFNUl9STEZBXzRYIHwgTUFNUl9XTEZBXzNYIHwgTUFNUl9UTEZBXzE2WCkKLQotLyolJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlICovCi0vKiBDb25maWd1cmF0aW9uIHZhcmlhYmxlIGFkZGVkIGJ5IHlvb3RoLiAqLwotLyolJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlICovCi0KLS8qCi0gKiBCQ1NSeAotICoKLSAqIEJvYXJkIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcnMKLSAqCi0gKi8KLQotI2RlZmluZSBCQ1NSMCAweEZBNDAwMDAwCi0jZGVmaW5lIEJDU1IxIDB4RkE0MDAwMDEKLSNkZWZpbmUgQkNTUjIgMHhGQTQwMDAwMgotI2RlZmluZSBCQ1NSMyAweEZBNDAwMDAzCi0KLSNkZWZpbmUgQkNTUjBfRU5NT05YQ1ZSCTB4MDEJLyogTW9uaXRvciBYVkNSIENvbnRyb2wgKi8KLSNkZWZpbmUgQkNTUjBfRU5OVlJBTQkweDAyCS8qIENTNCMgQ29udHJvbCAqLwotI2RlZmluZSBCQ1NSMF9MRUQ1CQkweDA0CS8qIExFRDUgY29udHJvbCAwPSdvbicgMT0nb2ZmJyAqLwotI2RlZmluZSBCQ1NSMF9MRUQ0CQkweDA4CS8qIExFRDQgY29udHJvbCAwPSdvbicgMT0nb2ZmJyAqLwotI2RlZmluZSBCQ1NSMF9GVUxMRFBMWAkweDEwCS8qIEV0aGVybmV0IFhDVlIgQ29udHJvbCAqLwotI2RlZmluZSBCQ1NSMF9DT0xURVNUCTB4MjAKLSNkZWZpbmUgQkNTUjBfRVRITFBCSwkweDQwCi0jZGVmaW5lIEJDU1IwX0VUSEVOCTB4ODAKLQotI2RlZmluZSBCQ1NSMV9QQ1ZDVEw3CTB4MDEJLyogUEMgU2xvdCBCIENvbnRyb2wgKi8KLSNkZWZpbmUgQkNTUjFfUENWQ1RMNgkweDAyCi0jZGVmaW5lIEJDU1IxX1BDVkNUTDUJMHgwNAotI2RlZmluZSBCQ1NSMV9QQ1ZDVEw0CTB4MDgKLSNkZWZpbmUgQkNTUjFfSVBCNVNFTAkweDEwCi0KLSNkZWZpbmUgQkNTUjJfTUlJUlNUICAgIDB4ODAKLSNkZWZpbmUgQkNTUjJfTUlJUFdSRFdOIDB4NDAKLSNkZWZpbmUgQkNTUjJfTUlJQ1RMICAgIDB4MDgKLQotI2RlZmluZSBCQ1NSM19CV1JUQwkJMHgwMQkvKiBSZWFsIFRpbWUgQ2xvY2sgQmF0dGVyeSAqLwotI2RlZmluZSBCQ1NSM19CV05WUgkJMHgwMgkvKiBOVlJBTSBCYXR0ZXJ5ICovCi0jZGVmaW5lIEJDU1IzX1JEWV9CU1kJMHgwNAkvKiBGbGFzaCBPcGVyYXRpb24gKi8KLSNkZWZpbmUgQkNTUjNfUlBYTAkJMHgwOAkvKiBSZXNlcnZlZCAocmVhZHMgYmFjayAnMScpICovCi0jZGVmaW5lIEJDU1IzX0QyNwkJMHgxMAkvKiBEaXAgU3dpdGNoIHNldHRpbmdzICovCi0jZGVmaW5lIEJDU1IzX0QyNgkJMHgyMAotI2RlZmluZSBCQ1NSM19EMjUJCTB4NDAKLSNkZWZpbmUgQkNTUjNfRDI0CQkweDgwCi0KLQotLyoKLSAqIEVudmlyb25tZW50IHNldHRpbmcKLSAqLwotCi0vKiAjZGVmaW5lIENPTkZJR19FVEhBRERSCTAwOjEwOkVDOjAwOjJDOkEyICovCi0vKiAjZGVmaW5lIENPTkZJR19JUEFERFIJMTAuMTAuMTA2LjEgKi8KLS8qICNkZWZpbmUgQ09ORklHX1NFUlZFUklQCTEwLjEwLjEwNC4xMSAqLwotCi0jZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1JQWGxpdGUuaCBiL2luY2x1ZGUvY29uZmlncy9SUFhsaXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODIzMGEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jb25maWdzL1JQWGxpdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5NSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLS8qIFlvby4gSm9uZ2hvb24sIElQb25lLCB5b290aEBpcG9uZS5jby5rcgotICogVS1Cb290IHBvcnQgb24gUlBYbGl0ZSBib2FyZAotICovCi0KLSNpZm5kZWYgX19DT05GSUdfSAotI2RlZmluZSBfX0NPTkZJR19ICi0KLSNkZWZpbmUJUlBYTGl0ZV81ME1IegotCi0vKgotICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKLSAqIChlYXN5IHRvIGNoYW5nZSkKLSAqLwotCi0jdW5kZWYgQ09ORklHX01QQzg2MAotI2RlZmluZSBDT05GSUdfTVBDODUwCQkxCS8qIFRoaXMgaXMgYSBNUEM4NTAgQ1BVCQkqLwotI2RlZmluZSBDT05GSUdfUlBYTElURQkJMQotCi0jZGVmaW5lCUNPTkZJR19TWVNfVEVYVF9CQVNFCTB4ZmZmMDAwMDAKLQotI2RlZmluZQlDT05GSUdfOHh4X0NPTlNfU01DMQkxCS8qIENvbnNvbGUgaXMgb24gU01DMQkJKi8KLSN1bmRlZglDT05GSUdfOHh4X0NPTlNfU01DMgotI3VuZGVmCUNPTkZJR184eHhfQ09OU19OT05FCi0jZGVmaW5lIENPTkZJR19CQVVEUkFURQkJOTYwMAkvKiBjb25zb2xlIGJhdWRyYXRlID0gOTYwMGJwcwkqLwotI2lmIDAKLSNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQktMQkvKiBhdXRvYm9vdCBkaXNhYmxlZAkJKi8KLSNlbHNlCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkvKiBhdXRvYm9vdCBhZnRlciA1IHNlY29uZHMJKi8KLSNlbmRpZgotCi0jdW5kZWYJQ09ORklHX0JPT1RBUkdTCi0jZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkJCQkJCQlcCi0JImJvb3RwOyAiCQkJCQkJCQlcCi0JInNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtyb290cGF0aH0gIglcCi0JImlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfToke2hvc3RuYW1lfTo6b2ZmOyAiCVwKLQkiYm9vdG0iCi0KLSNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JMQkvKiBlY2hvIG9uIGZvciBzZXJpYWwgZG93bmxvYWQJKi8KLSN1bmRlZglDT05GSUdfU1lTX0xPQURTX0JBVURfQ0hBTkdFCQkvKiBkb24ndCBhbGxvdyBiYXVkcmF0ZSBjaGFuZ2UJKi8KLQotI2RlZmluZSBDT05GSUdfQlpJUDIJCS8qIEluY2x1ZGUgc3VwcG9ydCBmb3IgYnppcDIgY29tcHJlc3NlZCBpbWFnZXMgICovCi0KLS8qIGVuYWJsZSBJMkMgYW5kIHNlbGVjdCB0aGUgaGFyZHdhcmUvc29mdHdhcmUgZHJpdmVyICovCi0jZGVmaW5lIENPTkZJR19TWVNfSTJDCi0jZGVmaW5lIENPTkZJR19TWVNfSTJDX1NPRlQJCS8qIEkyQyBiaXQtYmFuZ2VkICovCi0jZGVmaW5lIENPTkZJR19TWVNfSTJDX1NPRlRfU1BFRUQJNDAwMDAJLyogNDAga0h6IGlzIHN1cHBvc2VkIHRvIHdvcmsgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JMkNfU09GVF9TTEFWRQkweEZFCi0vKiBTb2Z0d2FyZSAoYml0LWJhbmcpIEkyQyBkcml2ZXIgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBQQl9TQ0wJCTB4MDAwMDAwMjAJLyogUEIgMjYgKi8KLSNkZWZpbmUgUEJfU0RBCQkweDAwMDAwMDEwCS8qIFBCIDI3ICovCi0KLSNkZWZpbmUgSTJDX0lOSVQJKGltbXItPmltX2NwbS5jcF9wYmRpciB8PSAgUEJfU0NMKQotI2RlZmluZSBJMkNfQUNUSVZFCShpbW1yLT5pbV9jcG0uY3BfcGJkaXIgfD0gIFBCX1NEQSkKLSNkZWZpbmUgSTJDX1RSSVNUQVRFCShpbW1yLT5pbV9jcG0uY3BfcGJkaXIgJj0gflBCX1NEQSkKLSNkZWZpbmUgSTJDX1JFQUQJKChpbW1yLT5pbV9jcG0uY3BfcGJkYXQgJiBQQl9TREEpICE9IDApCi0jZGVmaW5lIEkyQ19TREEoYml0KQlpZiAoYml0KSBcCi0JCQkJaW1tci0+aW1fY3BtLmNwX3BiZGF0IHw9ICBQQl9TREE7IFwKLQkJCWVsc2UgXAotCQkJCWltbXItPmltX2NwbS5jcF9wYmRhdCAmPSB+UEJfU0RBCi0jZGVmaW5lIEkyQ19TQ0woYml0KQlpZiAoYml0KSBcCi0JCQkJaW1tci0+aW1fY3BtLmNwX3BiZGF0IHw9ICBQQl9TQ0w7IFwKLQkJCWVsc2UgXAotCQkJCWltbXItPmltX2NwbS5jcF9wYmRhdCAmPSB+UEJfU0NMCi0jZGVmaW5lIEkyQ19ERUxBWQl1ZGVsYXkoNSkJLyogMS80IEkyQyBjbG9jayBkdXJhdGlvbiAqLwotCi0vKiBNNDFUMTEgU2VyaWFsIEFjY2VzcyBUaW1la2VlcGVyKFIpIFNSQU0gKi8KLSNkZWZpbmUgQ09ORklHX1JUQ19NNDFUMTEgMQotI2RlZmluZSBDT05GSUdfU1lTX0kyQ19SVENfQUREUiAweDY4Ci0vKiBwbGF5IGFsb25nIHdpdGggdGhlIGxpbnV4IGRyaXZlciAqLwotI2RlZmluZSBDT05GSUdfU1lTX000MVQxMV9CQVNFX1lFQVIgMTkwMAotCi0jdW5kZWYJQ09ORklHX1dBVENIRE9HCQkJLyogd2F0Y2hkb2cgZGlzYWJsZWQJCSovCi0KLS8qCi0gKiBCT09UUCBvcHRpb25zCi0gKi8KLSNkZWZpbmUgQ09ORklHX0JPT1RQX1NVQk5FVE1BU0sKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0dBVEVXQVkKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0hPU1ROQU1FCi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09UUEFUSAotI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFCi0KLQotLyoKLSAqIENvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uLgotICovCi0jaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+Ci0KLQotLyoKLSAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKLSAqLwotI2RlZmluZQlDT05GSUdfU1lTX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lCUNPTkZJR19TWVNfQ0JTSVpFCTEwMjQJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCi0jZWxzZQotI2RlZmluZQlDT05GSUdfU1lTX0NCU0laRQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCi0jZW5kaWYKLSNkZWZpbmUJQ09ORklHX1NZU19QQlNJWkUgKENPTkZJR19TWVNfQ0JTSVpFK3NpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCi0jZGVmaW5lCUNPTkZJR19TWVNfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQlDT05GSUdfU1lTX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplCSovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4MDA0MDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbgkqLwotI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkweDAwQzAwMDAwCS8qIDQgLi4uIDEyIE1CIGluIERSQU0JKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX1JFU0VUX0FERFJFU1MJMHgwOTkwMDAwMAotCi0jZGVmaW5lCUNPTkZJR19TWVNfTE9BRF9BRERSCQkweDQwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcwkqLwotCi0vKgotICogTG93IExldmVsIENvbmZpZ3VyYXRpb24gU2V0dGluZ3MKLSAqIChhZGRyZXNzIG1hcHBpbmdzLCByZWdpc3RlciBpbml0aWFsIHZhbHVlcywgZXRjLikKLSAqIFlvdSBzaG91bGQga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgaWYgeW91IG1ha2UgY2hhbmdlcyBoZXJlLgotICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBJbnRlcm5hbCBNZW1vcnkgTWFwcGVkIFJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JTU1SCQkweEZBMjAwMDAwCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIERlZmluaXRpb25zIGZvciBpbml0aWFsIHN0YWNrIHBvaW50ZXIgYW5kIGRhdGEgYXJlYSAoaW4gRFBSQU0pCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9BRERSCUNPTkZJR19TWVNfSU1NUgotI2RlZmluZQlDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUJMHgyRjAwCS8qIFNpemUgb2YgdXNlZCBhcmVhIGluIERQUkFNCSovCi0jZGVmaW5lIENPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCShDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUgLSBHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKLSNkZWZpbmUJQ09ORklHX1NZU19JTklUX1NQX09GRlNFVAlDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTdGFydCBhZGRyZXNzZXMgZm9yIHRoZSBmaW5hbCBtZW1vcnkgY29uZmlndXJhdGlvbgotICogKFNldCB1cCBieSB0aGUgc3RhcnR1cCBjb2RlKQotICogUGxlYXNlIG5vdGUgdGhhdCBDT05GSUdfU1lTX1NEUkFNX0JBU0UgX211c3RfIHN0YXJ0IGF0IDAKLSAqLwotI2RlZmluZQlDT05GSUdfU1lTX1NEUkFNX0JBU0UJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQVNFCQkweEZGQzAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFCUNPTkZJR19TWVNfVEVYVF9CQVNFCi0jZGVmaW5lCUNPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSgyNTYgPDwgMTApCS8qIFJlc2VydmUgMjU2IGtCIGZvciBNb25pdG9yCSovCi0jaWZkZWYgQ09ORklHX0JaSVAyCi0jZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDQwOTYgPDwgMTApCS8qIFJlc2VydmUgfjQgTUIgZm9yIG1hbGxvYygpICAgKi8KLSNlbHNlCi0jZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDEyOCA8PCAxMCkJLyogUmVzZXJ2ZSAxMjggS0IgZm9yIG1hbGxvYygpICAqLwotI2VuZGlmIC8qIENPTkZJR19CWklQMiAqLwotCi0vKgotICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQotICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKLSAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLSAqLwotI2RlZmluZQlDT05GSUdfU1lTX0JPT1RNQVBTWgkJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgJKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRkxBU0ggb3JnYW5pemF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcwkJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVAkxOQkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAJKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCi0KLSNkZWZpbmUJQ09ORklHX1NZU19ESVJFQ1RfRkxBU0hfVEZUUAotCi0jZGVmaW5lCUNPTkZJR19FTlZfSVNfSU5fRkxBU0gJMQotI2RlZmluZSBDT05GSUdfRU5WX1NFQ1RfU0laRQkweDQwMDAwCS8qIFdlIHVzZSBvbmUgY29tcGxldGUgc2VjdG9yCQkqLwotI2RlZmluZSBDT05GSUdfRU5WX0FERFIJCShDT05GSUdfU1lTX01PTklUT1JfQkFTRSArIENPTkZJR19TWVNfTU9OSVRPUl9MRU4pCi0KLSNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2FjaGUgQ29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfQ0FDSEVMSU5FX1NJWkUJMTYJLyogRm9yIGFsbCBNUEM4eHggQ1BVcwkJCSovCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lIENPTkZJR19TWVNfQ0FDSEVMSU5FX1NISUZUCTQJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUJKi8KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTWVBDUiAtIFN5c3RlbSBQcm90ZWN0aW9uIENvbnRyb2wJCQkJMTEtOQotICogU1lQQ1IgY2FuIG9ubHkgYmUgd3JpdHRlbiBvbmNlIGFmdGVyIHJlc2V0IQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU29mdHdhcmUgJiBCdXMgTW9uaXRvciBUaW1lciBtYXgsIEJ1cyBNb25pdG9yIGVuYWJsZSwgU1cgV2F0Y2hkb2cgZnJlZXplCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKLSNkZWZpbmUgQ09ORklHX1NZU19TWVBDUgkoU1lQQ1JfU1dUQyB8IFNZUENSX0JNVCB8IFNZUENSX0JNRSB8IFNZUENSX1NXRiB8IFwKLQkJCSBTWVBDUl9TV0UgIHwgU1lQQ1JfU1dSSXwgU1lQQ1JfU1dQKQotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX1NZU19TWVBDUgkoU1lQQ1JfU1dUQyB8IDB4MDAwMDA2MDAgfCBTWVBDUl9CTUUgfCBTWVBDUl9TV0YgfCBTWVBDUl9TV1ApCi0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU0lVTUNSIC0gU0lVIE1vZHVsZSBDb25maWd1cmF0aW9uCQkJCTExLTYKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBDTUNJQSBjb25maWcuLCBtdWx0aS1mdW5jdGlvbiBwaW4gdHJpLXN0YXRlCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19TSVVNQ1IJKFNJVU1DUl9NTFJDMTApCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRCU0NSIC0gVGltZSBCYXNlIFN0YXR1cyBhbmQgQ29udHJvbAkJCQkxMS0yNgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgUmVmZXJlbmNlIEludGVycnVwdCBTdGF0dXMsIFRpbWViYXNlIGZyZWV6aW5nIGVuYWJsZWQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1RCU0NSCShUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRiB8IFRCU0NSX1RCRSkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUlRDU0MgLSBSZWFsLVRpbWUgQ2xvY2sgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyCQkxMS0yNwotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0vKiUlJSNkZWZpbmUgQ09ORklHX1NZU19SVENTQwkoUlRDU0NfU0VDIHwgUlRDU0NfQUxSIHwgUlRDU0NfUlRGfCBSVENTQ19SVEUpICovCi0jZGVmaW5lIENPTkZJR19TWVNfUlRDU0MJKFJUQ1NDX1NFQyB8IFJUQ1NDX1JURSkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sCQkxMS0zMQotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cywgSW50ZXJydXB0IFRpbWVyIGZyZWV6aW5nIGVuYWJsZWQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BJU0NSIChQSVNDUl9QUyB8IFBJU0NSX1BJVEYpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBMUFJDUiAtIFBMTCwgTG93LVBvd2VyLCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlcgkJMTUtMzAKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFJlc2V0IFBMTCBsb2NrIHN0YXR1cyBzdGlja3kgYml0LCB0aW1lciBleHBpcmVkIHN0YXR1cyBiaXQgYW5kIHRpbWVyCi0gKiBpbnRlcnJ1cHQgc3RhdHVzIGJpdAotICoKLSAqIElmIHRoaXMgaXMgYSA4MCBNSHogQ1BVLCBzZXQgUExMIG11bHRpcGxpY2F0aW9uIGZhY3RvciB0byA1ICg1KjE2PTgwKSEKLSAqLwotLyogdXAgdG8gNTAgTUh6IHdlIHVzZSBhIDE6MSBjbG9jayAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BMUFJDUgkoICg1IDw8IFBMUFJDUl9NRl9TSElGVCkgfCBQTFBSQ1JfVEVYUFMgKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTQ0NSIC0gU3lzdGVtIENsb2NrIGFuZCByZXNldCBDb250cm9sIFJlZ2lzdGVyCQkxNS0yNwotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU2V0IGNsb2NrIG91dHB1dCwgdGltZWJhc2UgYW5kIFJUQyBzb3VyY2UgYW5kIGRpdmlkZXIsCi0gKiBwb3dlciBtYW5hZ2VtZW50IGFuZCBzb21lIG90aGVyIGludGVybmFsIGNsb2NrcwotICovCi0jZGVmaW5lIFNDQ1JfTUFTSwlTQ0NSX0VCREYwMAotLyogdXAgdG8gNTAgTUh6IHdlIHVzZSBhIDE6MSBjbG9jayAqLwotI2RlZmluZSBDT05GSUdfU1lTX1NDQ1IJKFNDQ1JfQ09NMTEgfCBTQ0NSX1RCUykKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUENNQ0lBIHN0dWZmCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfUENNQ0lBX01FTV9BRERSCSgweEUwMDAwMDAwKQotI2RlZmluZSBDT05GSUdfU1lTX1BDTUNJQV9NRU1fU0laRQkoIDY0IDw8IDIwICkKLSNkZWZpbmUgQ09ORklHX1NZU19QQ01DSUFfRE1BX0FERFIJKDB4RTQwMDAwMDApCi0jZGVmaW5lIENPTkZJR19TWVNfUENNQ0lBX0RNQV9TSVpFCSggNjQgPDwgMjAgKQotI2RlZmluZSBDT05GSUdfU1lTX1BDTUNJQV9BVFRSQl9BRERSCSgweEU4MDAwMDAwKQotI2RlZmluZSBDT05GSUdfU1lTX1BDTUNJQV9BVFRSQl9TSVpFCSggNjQgPDwgMjAgKQotI2RlZmluZSBDT05GSUdfU1lTX1BDTUNJQV9JT19BRERSCSgweEVDMDAwMDAwKQotI2RlZmluZSBDT05GSUdfU1lTX1BDTUNJQV9JT19TSVpFCSggNjQgPDwgMjAgKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBJREUvQVRBIHN0dWZmIChTdXBwb3J0cyBJREUgaGFyZGRpc2sgb24gUENNQ0lBIEFkYXB0ZXIpCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotI2RlZmluZSBDT05GSUdfSURFX1BSRUlOSVQJMQkvKiBVc2UgcHJlaW5pdCBJREUgaG9vayAqLwotI2RlZmluZQlDT05GSUdfSURFXzh4eF9QQ0NBUkQJMQkvKiBVc2UgSURFIHdpdGggUEMgQ2FyZAlBZGFwdGVyCSovCi0KLSN1bmRlZglDT05GSUdfSURFXzh4eF9ESVJFQ1QJCS8qIERpcmVjdCBJREUgICAgbm90IHN1cHBvcnRlZAkqLwotI3VuZGVmCUNPTkZJR19JREVfTEVECQkJLyogTEVEICAgZm9yIGlkZSBub3Qgc3VwcG9ydGVkCSovCi0jdW5kZWYJQ09ORklHX0lERV9SRVNFVAkJLyogcmVzZXQgZm9yIGlkZSBub3Qgc3VwcG9ydGVkCSovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19JREVfTUFYQlVTCQkxCS8qIG1heC4gMSBJREUgYnVzCQkqLwotI2RlZmluZSBDT05GSUdfU1lTX0lERV9NQVhERVZJQ0UJMQkvKiBtYXguIDEgZHJpdmUgcGVyIElERSBidXMJKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0FUQV9JREUwX09GRlNFVAkweDAwMDAKLQotI2RlZmluZSBDT05GSUdfU1lTX0FUQV9CQVNFX0FERFIJQ09ORklHX1NZU19QQ01DSUFfTUVNX0FERFIKLQotLyogT2Zmc2V0IGZvciBkYXRhIEkvTwkJCSovCi0jZGVmaW5lIENPTkZJR19TWVNfQVRBX0RBVEFfT0ZGU0VUCShDT05GSUdfU1lTX1BDTUNJQV9NRU1fU0laRSArIDB4MzIwKQotCi0vKiBPZmZzZXQgZm9yIG5vcm1hbCByZWdpc3RlciBhY2Nlc3NlcwkqLwotI2RlZmluZSBDT05GSUdfU1lTX0FUQV9SRUdfT0ZGU0VUCSgyICogQ09ORklHX1NZU19QQ01DSUFfTUVNX1NJWkUgKyAweDMyMCkKLQotLyogT2Zmc2V0IGZvciBhbHRlcm5hdGUgcmVnaXN0ZXJzCSovCi0jZGVmaW5lIENPTkZJR19TWVNfQVRBX0FMVF9PRkZTRVQJMHgwMTAwCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICovCi0vKiNkZWZpbmUJQ09ORklHX1NZU19ERVIJMHgyMDAyMDAwRiovCi0jZGVmaW5lIENPTkZJR19TWVNfREVSCTAKLQotLyoKLSAqIEluaXQgTWVtb3J5IENvbnRyb2xsZXI6Ci0gKgotICogQlIwIGFuZCBPUjAgKEZMQVNIKQotICovCi0KLSNkZWZpbmUgRkxBU0hfQkFTRV9QUkVMSU0JMHhGRTAwMDAwMAkvKiBGTEFTSCBiYXNlICovCi0jZGVmaW5lIENPTkZJR19TWVNfUFJFTElNX09SX0FNCTB4RkUwMDAwMDAJLyogT1IgYWRkciBtYXNrICovCi0KLS8qIEZMQVNIIHRpbWluZzogQUNTID0gMCwgVFJMWCA9IDAsIENTTlQgPSAwLCBTQ1kgPSA0LCBFVEhSID0gMCwgQklIID0gMSAqLwotI2RlZmluZSBDT05GSUdfU1lTX09SX1RJTUlOR19GTEFTSCAoT1JfU0NZXzRfQ0xLIHwgT1JfQkkpCi0KLSNkZWZpbmUgQ09ORklHX1NZU19PUjBfUFJFTElNCShDT05GSUdfU1lTX1BSRUxJTV9PUl9BTSB8IENPTkZJR19TWVNfT1JfVElNSU5HX0ZMQVNIKQotI2RlZmluZSBDT05GSUdfU1lTX0JSMF9QUkVMSU0JKChGTEFTSF9CQVNFX1BSRUxJTSAmIEJSX0JBX01TSykgfCBCUl9WKQotCi0vKgotICogQlIxIGFuZCBPUjEgKFNEUkFNKQotICoKLSAqLwotI2RlZmluZSBTRFJBTV9CQVNFX1BSRUxJTQkweDAwMDAwMDAwCS8qIFNEUkFNIGJhc2UJKi8KLSNkZWZpbmUJU0RSQU1fTUFYX1NJWkUJCTB4MDEwMDAwMDAJLyogbWF4IDE2IE1CICovCi0KLS8qIFNEUkFNIHRpbWluZzogTXVsdGlwbGV4ZWQgYWRkcmVzc2VzLCBHUEw1IG91dHB1dCB0byBHUEw1X0EgKGRvbid0IGNhcmUpCSovCi0jZGVmaW5lIENPTkZJR19TWVNfT1JfVElNSU5HX1NEUkFNCTB4MDAwMDBFMDAKLQotI2RlZmluZSBDT05GSUdfU1lTX09SMV9QUkVMSU0JKENPTkZJR19TWVNfUFJFTElNX09SX0FNIHwgQ09ORklHX1NZU19PUl9USU1JTkdfU0RSQU0gKQotI2RlZmluZSBDT05GSUdfU1lTX0JSMV9QUkVMSU0JKChTRFJBTV9CQVNFX1BSRUxJTSAmIEJSX0JBX01TSykgfCBCUl9NU19VUE1BIHwgQlJfViApCi0KLS8qIFJQWExJVEUgbWVtIHNldHRpbmcgKi8KLSNkZWZpbmUJQ09ORklHX1NZU19CUjNfUFJFTElNCTB4RkE0MDAwMDEJCS8qIEJDU1IgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19PUjNfUFJFTElNCTB4RkZGRjg5MTAKLSNkZWZpbmUJQ09ORklHX1NZU19CUjRfUFJFTElNCTB4RkEwMDA0MDEJCS8qIE5WUkFNJlNSQU0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19PUjRfUFJFTElNCTB4RkZGRTA5NzAKLQotLyoKLSAqIE1lbW9yeSBQZXJpb2RpYyBUaW1lciBQcmVzY2FsZXIKLSAqLwotCi0vKiBwZXJpb2RpYyB0aW1lciBmb3IgcmVmcmVzaCAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BTVJfUFRBCTU4Ci0KLS8qCi0gKiBSZWZyZXNoIGNsb2NrIFByZXNjYWxhcgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTVBUUFIJTVBUUFJfUFRQX0RJVjgKLQotLyoKLSAqIE1BTVIgc2V0dGluZ3MgZm9yIFNEUkFNCi0gKi8KLQotLyogMTAgY29sdW1uIFNEUkFNICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFNUl8xMENPTAkoKENPTkZJR19TWVNfTUFNUl9QVEEgPDwgTUFNUl9QVEFfU0hJRlQpICB8IE1BTVJfUFRBRQkgICAgfAlcCi0JCQkgTUFNUl9BTUFfVFlQRV8yIHwgTUFNUl9EU0FfMV9DWUNMIHwgTUFNUl9HMENMQV9BMTIgfAlcCi0JCQkgTUFNUl9HUExfQTRESVMgfCBNQU1SX1JMRkFfNFggfCBNQU1SX1dMRkFfM1ggfCBNQU1SX1RMRkFfMTZYKQotCi0vKiUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgKi8KLS8qIENvbmZpZ3VyYXRpb24gdmFyaWFibGUgYWRkZWQgYnkgeW9vdGguICovCi0vKiUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgKi8KLQotLyoKLSAqIEJDU1J4Ci0gKgotICogQm9hcmQgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVycwotICoKLSAqLwotCi0jZGVmaW5lIEJDU1IwIDB4RkE0MDAwMDAKLSNkZWZpbmUgQkNTUjEgMHhGQTQwMDAwMQotI2RlZmluZSBCQ1NSMiAweEZBNDAwMDAyCi0jZGVmaW5lIEJDU1IzIDB4RkE0MDAwMDMKLQotI2RlZmluZSBCQ1NSMF9FTk1PTlhDVlIJMHgwMQkvKiBNb25pdG9yIFhWQ1IgQ29udHJvbCAqLwotI2RlZmluZSBCQ1NSMF9FTk5WUkFNCTB4MDIJLyogQ1M0IyBDb250cm9sICovCi0jZGVmaW5lIEJDU1IwX0xFRDUJMHgwNAkvKiBMRUQ1IGNvbnRyb2wgMD0nb24nIDE9J29mZicgKi8KLSNkZWZpbmUgQkNTUjBfTEVENAkweDA4CS8qIExFRDQgY29udHJvbCAwPSdvbicgMT0nb2ZmJyAqLwotI2RlZmluZSBCQ1NSMF9GVUxMRFBMWAkweDEwCS8qIEV0aGVybmV0IFhDVlIgQ29udHJvbCAqLwotI2RlZmluZSBCQ1NSMF9DT0xURVNUCTB4MjAKLSNkZWZpbmUgQkNTUjBfRVRITFBCSwkweDQwCi0jZGVmaW5lIEJDU1IwX0VUSEVOCTB4ODAKLQotI2RlZmluZSBCQ1NSMV9QQ1ZDVEw3CTB4MDEJLyogUEMgU2xvdCBCIENvbnRyb2wgKi8KLSNkZWZpbmUgQkNTUjFfUENWQ1RMNgkweDAyCi0jZGVmaW5lIEJDU1IxX1BDVkNUTDUJMHgwNAotI2RlZmluZSBCQ1NSMV9QQ1ZDVEw0CTB4MDgKLSNkZWZpbmUgQkNTUjFfSVBCNVNFTAkweDEwCi0KLSNkZWZpbmUgQkNTUjJfRU5QQTVIRFIJMHgwOAkvKiBVU0IgQ29udHJvbCAqLwotI2RlZmluZSBCQ1NSMl9FTlVTQkNMSwkweDEwCi0jZGVmaW5lIEJDU1IyX1VTQlBXUkVOCTB4MjAKLSNkZWZpbmUgQkNTUjJfVVNCU1BECTB4NDAKLSNkZWZpbmUgQkNTUjJfVVNCU1VTUAkweDgwCi0KLSNkZWZpbmUgQkNTUjNfQldSVEMJMHgwMQkvKiBSZWFsIFRpbWUgQ2xvY2sgQmF0dGVyeSAqLwotI2RlZmluZSBCQ1NSM19CV05WUgkweDAyCS8qIE5WUkFNIEJhdHRlcnkgKi8KLSNkZWZpbmUgQkNTUjNfUkRZX0JTWQkweDA0CS8qIEZsYXNoIE9wZXJhdGlvbiAqLwotI2RlZmluZSBCQ1NSM19SUFhMCTB4MDgJLyogUmVzZXJ2ZWQgKHJlYWRzIGJhY2sgJzEnKSAqLwotI2RlZmluZSBCQ1NSM19EMjcJMHgxMAkvKiBEaXAgU3dpdGNoIHNldHRpbmdzICovCi0jZGVmaW5lIEJDU1IzX0QyNgkweDIwCi0jZGVmaW5lIEJDU1IzX0QyNQkweDQwCi0jZGVmaW5lIEJDU1IzX0QyNAkweDgwCi0KLSNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUlBYc3VwZXIuaCBiL2luY2x1ZGUvY29uZmlncy9SUFhzdXBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWUwOTY4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY29uZmlncy9SUFhzdXBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAxICswLDAgQEAKLSNpZm5kZWYgX19DT05GSUdfSAotI2RlZmluZSBfX0NPTkZJR19ICi0KLSNkZWZpbmUJQ09ORklHX1NZU19URVhUX0JBU0UJMHg4MEYwMDAwMAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBUaGVzZSBzZXR0aW5ncyBtdXN0IG1hdGNoIHRoZSB3YXkgX3lvdXJfIGJvYXJkIGlzIHNldCB1cAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIGZvciB0aGUgQVktUmV2aXNpb24gd2hpY2ggZG9lcyBub3QgdXNlIHRoZSBIUkNXICovCi0jZGVmaW5lIENPTkZJR19TWVNfREVGQVVMVF9JTU1SCTB4MDAwMTAwMDAKLQotLyogV2hhdCBpcyB0aGUgb3NjaWxsYXRvcidzIChVWDIpIGZyZXF1ZW5jeSBpbiBIej8gKi8KLSNkZWZpbmUgQ09ORklHXzgyNjBfQ0xLSU4gICg2NiAqIDEwMDAgKiAxMDAwKQotCi0vKiBIb3cgaXMgc3dpdGNoIFMyIHNldD8gV2UgcmVhbGx5IG9ubHkgd2FudCB0aGUgTU9EQ0tbMS0zXSBiaXRzLCBzbwotICogb25seSB0aGUgMyBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGFyZSBpbXBvcnRhbnQuCi0qLwotI2RlZmluZSBDT05GSUdfU1lTX1NCQ19TMiAgMHgwNAotCi0vKiBXaGF0IHNob3VsZCBNT0RDS19IIGJlPyBJdCBpcyBkZXBlbmRlbnQgb24gdGhlIG9zY2lsbGF0b3IKLSAqIGZyZXF1ZW5jeSwgTU9EQ0tbMS0zXSwgYW5kIGRlc2lyZWQgQ1BNIGFuZCBjb3JlIGZyZXF1ZW5jaWVzLgotICogU29tZSBleGFtcGxlIHZhbHVlcyAoYWxsIGZyZXF1ZW5jaWVzIGFyZSBpbiBNSHopOgotICoKLSAqIE1PRENLX0ggICBNT0RDS1sxLTNdICBPc2MgICAgQ1BNICAgIENvcmUKLSAqIDB4MiAgICAgICAweDIgICAgICAgICAzMyAgICAgMTMzICAgIDEzMwotICogMHgyICAgICAgIDB4NCAgICAgICAgIDMzICAgICAxMzMgICAgMjAwCi0gKiAweDUgICAgICAgMHg1ICAgICAgICAgNjYgICAgIDEzMyAgICAxMzMKLSAqIDB4NSAgICAgICAweDcgICAgICAgICA2NiAgICAgMTMzICAgIDIwMAotICovCi0jZGVmaW5lIENPTkZJR19TWVNfU0JDX01PRENLX0ggMHgwNgotCi0jZGVmaW5lIENPTkZJR19TWVNfU0JDX0JPT1RfTE9XIDEJLyogb25seSBmb3IgSFJDVyAqLwotI3VuZGVmIENPTkZJR19TWVNfU0JDX0JPT1RfTE9XCi0KLS8qIFdoYXQgc2hvdWxkIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1haW4gRkxBU0ggYmUgYW5kIGhvdyBiaWcgaXMKLSAqIGl0IChpbiBNQnl0ZXMpPyBUaGlzIG11c3QgY29udGFpbiBDT05GSUdfU1lTX1RFWFRfQkFTRS4KLSAqIFRoZSBtYWluIEZMQVNIIGlzIHdoaWNoZXZlciBpcyBjb25uZWN0ZWQgdG8gKkNTMC4gVS1Cb290IGV4cGVjdHMKLSAqIHRoaXMgdG8gYmUgdGhlIFNJTU0uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSDBfQkFTRSAweDgwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0gwX1NJWkUgMTYKLQotLyogV2hhdCBzaG91bGQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgc2Vjb25kYXJ5IEZMQVNIIGJlIGFuZCBob3cgYmlnCi0gKiBpcyBpdCAoaW4gTWJ5dGVzKT8gVGhlIHNlY29uZGFyeSBGTEFTSCBpcyB3aGljaGV2ZXIgaXMgY29ubmVjdGVkCi0gKiB0byAqQ1M2LiBVLUJvb3QgZXhwZWN0cyB0aGlzIHRvIGJlIHRoZSBvbiBib2FyZCBGTEFTSC4gSWYgeW91IGRvbid0Ci0gKiB3YW50IGl0IGVuYWJsZWQsIGRvbid0IGRlZmluZSB0aGVzZSBjb25zdGFudHMuCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSDFfQkFTRSAwCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0gxX1NJWkUgMAotI3VuZGVmIENPTkZJR19TWVNfRkxBU0gxX0JBU0UKLSN1bmRlZiBDT05GSUdfU1lTX0ZMQVNIMV9TSVpFCi0KLS8qIFdoYXQgc2hvdWxkIGJlIHRoZSBiYXNlIGFkZHJlc3Mgb2YgU0RSQU0gRElNTSBhbmQgaG93IGJpZyBpcwotICogaXQgKGluIE1ieXRlcyk/Ci0qLwotI2RlZmluZSBDT05GSUdfU1lTX1NEUkFNMF9CQVNFIDB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19TRFJBTTBfU0laRSA2NAotCi0vKiBXaGF0IHNob3VsZCBiZSB0aGUgYmFzZSBhZGRyZXNzIG9mIFNEUkFNIERJTU0gYW5kIGhvdyBiaWcgaXMKLSAqIGl0IChpbiBNYnl0ZXMpPwotKi8KLSNkZWZpbmUgQ09ORklHX1NZU19TRFJBTTFfQkFTRSAweDA0MDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfU0RSQU0xX1NJWkUgMzIKLQotLyogV2hhdCBzaG91bGQgYmUgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgTEVEcyBhbmQgc3dpdGNoIFMwPwotICogSWYgeW91IGRvbid0IHdhbnQgdGhlbSBlbmFibGVkLCBkb24ndCBkZWZpbmUgdGhpcy4KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0xFRF9CQVNFIDB4MDAwMDAwMDAKLQotLyoKLSAqIHNlbGVjdCBzZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCi0gKgotICogaWYgZWl0aGVyIENPTkZJR19DT05TX09OX1NNQyBvciBDT05GSUdfQ09OU19PTl9TQ0MgaXMgc2VsZWN0ZWQsIHRoZW4KLSAqIENPTkZJR19DT05TX0lOREVYIG11c3QgYmUgc2V0IHRvIHRoZSBjaGFubmVsIG51bWJlciAoMS0yIGZvciBTTUMsIDEtNAotICogZm9yIFNDQykuCi0gKgotICogaWYgQ09ORklHX0NPTlNfTk9ORSBpcyBkZWZpbmVkLCB0aGVuIHRoZSBzZXJpYWwgY29uc29sZSByb3V0aW5lcyBtdXN0Ci0gKiBkZWZpbmVkIGVsc2V3aGVyZS4KLSAqLwotI2RlZmluZSBDT05GSUdfQ09OU19PTl9TTUMgICAgICAgICAgLyogZGVmaW5lIGlmIGNvbnNvbGUgb24gU01DICovCi0jdW5kZWYgIENPTkZJR19DT05TX09OX1NDQyAgICAgICAgICAvKiBkZWZpbmUgaWYgY29uc29sZSBvbiBTQ0MgKi8KLSN1bmRlZiAgQ09ORklHX0NPTlNfTk9ORSAgICAgICAgICAgIC8qIGRlZmluZSBpZiBjb25zb2xlIG9uIG5laXRoZXIgKi8KLSNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVggICAgMSAgICAgIC8qIHdoaWNoIFNNQy9TQ0MgY2hhbm5lbCBmb3IgY29uc29sZSAqLwotCi0vKgotICogc2VsZWN0IGV0aGVybmV0IGNvbmZpZ3VyYXRpb24KLSAqCi0gKiBpZiBlaXRoZXIgQ09ORklHX0VUSEVSX09OX1NDQyBvciBDT05GSUdfRVRIRVJfT05fRkNDIGlzIHNlbGVjdGVkLCB0aGVuCi0gKiBDT05GSUdfRVRIRVJfSU5ERVggbXVzdCBiZSBzZXQgdG8gdGhlIGNoYW5uZWwgbnVtYmVyICgxLTQgZm9yIFNDQywgMS0zCi0gKiBmb3IgRkNDKQotICoKLSAqIGlmIENPTkZJR19FVEhFUl9OT05FIGlzIGRlZmluZWQsIHRoZW4gZWl0aGVyIHRoZSBldGhlcm5ldCByb3V0aW5lcyBtdXN0IGJlCi0gKiBkZWZpbmVkIGVsc2V3aGVyZSAoYXMgZm9yIHRoZSBjb25zb2xlKSwgb3IgQ09ORklHX0NNRF9ORVQgbXVzdCBiZSB1bnNldC4KLSAqLwotI3VuZGVmICBDT05GSUdfRVRIRVJfT05fU0NDICAgICAgICAgICAvKiBkZWZpbmUgaWYgZXRoZXJuZXQgb24gU0NDICAgICovCi0jZGVmaW5lIENPTkZJR19FVEhFUl9PTl9GQ0MgICAgICAgICAgIC8qIGRlZmluZSBpZiBldGhlcm5ldCBvbiBGQ0MgICAgKi8KLSN1bmRlZiAgQ09ORklHX0VUSEVSX05PTkUgICAgICAgICAgICAgLyogZGVmaW5lIGlmIGV0aGVybmV0IG9uIG5laXRoZXIgKi8KLSNkZWZpbmUgQ09ORklHX0VUSEVSX0lOREVYICAgICAgMyAgICAgLyogd2hpY2ggU0NDL0ZDQyBjaGFubmVsIGZvciBldGhlcm5ldCAqLwotCi0jaWYgKCBDT05GSUdfRVRIRVJfSU5ERVggPT0gMyApCi0KLS8qCi0gKiAtIFJ4LUNMSyBpcyBDTEsxNQotICogLSBUeC1DTEsgaXMgQ0xLMTYKLSAqIC0gUkFNIGZvciBCRC9CdWZmZXJzIGlzIG9uIHRoZSA2MHggQnVzIChzZWUgMjgtMTMpCi0gKiAtIEVuYWJsZSBIYWxmIER1cGxleCBpbiBGU01SCi0gKi8KLSMgZGVmaW5lIENPTkZJR19TWVNfQ01YRkNSX01BU0szCShDTVhGQ1JfRkMzfENNWEZDUl9SRjNDU19NU0t8Q01YRkNSX1RGM0NTX01TSykKLSMgZGVmaW5lIENPTkZJR19TWVNfQ01YRkNSX1ZBTFVFMwkoQ01YRkNSX1JGM0NTX0NMSzE1fENNWEZDUl9URjNDU19DTEsxNikKLSMgZGVmaW5lIENPTkZJR19TWVNfQ1BNRkNSX1JBTVRZUEUJMAotLyojZGVmaW5lIENPTkZJR19TWVNfRkNDX1BTTVIJCShGQ0NfUFNNUl9GREV8RkNDX1BTTVJfTFBCKSAqLwotIyBkZWZpbmUgQ09ORklHX1NZU19GQ0NfUFNNUgkJMAotCi0jZWxzZSAvKiBDT05GSUdfRVRIRVJfSU5ERVggKi8KLSMgZXJyb3IgIm9uIFJQWCBTdXBlciBldGhlcm5ldCBtdXN0IGJlIEZDQzMiCi0jZW5kaWYgLyogQ09ORklHX0VUSEVSX0lOREVYICovCi0KLSNkZWZpbmUgQ09ORklHX0hBUkRfSTJDICAgICAgICAgMQkvKiBJMkMgd2l0aCBoYXJkd2FyZSBzdXBwb3J0CSovCi0jZGVmaW5lIENPTkZJR19TWVNfSTJDX1NQRUVECQk0MDAwMDAJLyogSTJDIHNwZWVkIGFuZCBzbGF2ZSBhZGRyZXNzCSovCi0jZGVmaW5lIENPTkZJR19TWVNfSTJDX1NMQVZFCQkweDdGCi0KLQotLyogRGVmaW5lIHRoaXMgdG8gcmVzZXJ2ZSBhbiBlbnRpcmUgRkxBU0ggc2VjdG9yICgyNTYgS0IpIGZvcgotICogZW52aXJvbm1lbnQgdmFyaWFibGVzLiBPdGhlcndpc2UsIHRoZSBlbnZpcm9ubWVudCB3aWxsIGJlCi0gKiBwdXQgaW4gdGhlIHNhbWUgc2VjdG9yIGFzIFUtQm9vdCwgYW5kIGNoYW5naW5nIHZhcmlhYmxlcwotICogd2lsbCBlcmFzZSBVLUJvb3QgdGVtcG9yYXJpbHkKLSAqLwotI2RlZmluZSBDT05GSUdfRU5WX0lOX09XTl9TRUNUCi0KLS8qIERlZmluZSB0byBhbGxvdyB0aGUgdXNlciB0byBvdmVyd3JpdGUgc2VyaWFsIGFuZCBldGhhZGRyICovCi0jZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCi0KLS8qIFdoYXQgc2hvdWxkIHRoZSBjb25zb2xlJ3MgYmF1ZCByYXRlIGJlPyAqLwotI2RlZmluZSBDT05GSUdfQkFVRFJBVEUgICAgICAgICAxMTUyMDAKLQotLyogRXRoZXJuZXQgTUFDIGFkZHJlc3MgKi8KLSNkZWZpbmUgQ09ORklHX0VUSEFERFIgICAgICAgICAgMDg6MDA6MjI6NTA6NzA6NjMKLQotI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjEuOTkKLSNkZWZpbmUgQ09ORklHX1NFUlZFUklQICAgICAgICAgMTkyLjE2OC4xLjMKLQotLyogU2V0IHRvIGEgcG9zaXRpdmUgdmFsdWUgdG8gZGVsYXkgZm9yIHJ1bm5pbmcgQk9PVENPTU1BTkQgKi8KLSNkZWZpbmUgQ09ORklHX0JPT1RERUxBWSAgICAgICAgLTEKLQotLyogdW5kZWYgdGhpcyB0byBzYXZlIG1lbW9yeSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCi0KLS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgICAgICAgKi8KLQotCi0vKgotICogQk9PVFAgb3B0aW9ucwotICovCi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09URklMRVNJWkUKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RQQVRICi0jZGVmaW5lIENPTkZJR19CT09UUF9HQVRFV0FZCi0jZGVmaW5lIENPTkZJR19CT09UUF9IT1NUTkFNRQotCi0KLS8qCi0gKiBDb21tYW5kIGxpbmUgY29uZmlndXJhdGlvbi4KLSAqLwotI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgotCi0jZGVmaW5lIENPTkZJR19DTURfSU1NQVAKLSNkZWZpbmUgQ09ORklHX0NNRF9BU0tFTlYKLSNkZWZpbmUgQ09ORklHX0NNRF9JMkMKLSNkZWZpbmUgQ09ORklHX0NNRF9SRUdJTkZPCi0KLSN1bmRlZiBDT05GSUdfQ01EX0tHREIKLQotCi0vKiBXaGVyZSBkbyB0aGUgaW50ZXJuYWwgcmVnaXN0ZXJzIGxpdmU/ICovCi0jZGVmaW5lIENPTkZJR19TWVNfSU1NUiAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKLQotLyogV2hlcmUgZG8gdGhlIG9uIGJvYXJkIHJlZ2lzdGVycyAoQ1M0KSBsaXZlPyAqLwotI2RlZmluZSBDT05GSUdfU1lTX1JFR1NfQkFTRSAgICAgICAgICAweEZBMDAwMDAwCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFlvdSBzaG91bGQgbm90IGhhdmUgdG8gbW9kaWZ5IGFueSBvZiB0aGUgZm9sbG93aW5nIHNldHRpbmdzCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIENPTkZJR19SUFhTVVBFUiAgICAgICAgIDEgICAgICAgLyogb24gYW4gRW1iZWRkZWQgUGxhbmV0IFJQWCBTdXBlciBCb2FyZCAgKi8KLSNkZWZpbmUgQ09ORklHX0NQTTIJCTEJLyogSGFzIGEgQ1BNMiAqLwotCi0jZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX0YgMQkvKiBDYWxsIGJvYXJkX2Vhcmx5X2luaXRfZgkqLwotI2RlZmluZSBDT05GSUdfUkVTRVRfUEhZX1IJMQkvKiBDYWxsIHJlc2V0X3BoeSgpCQkqLwotCi0vKgotICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwotICovCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jICBkZWZpbmUgQ09ORklHX1NZU19DQlNJWkUgICAgICAgICAgICAgIDEwMjQgICAgICAgLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgICAgICAqLwotI2Vsc2UKLSMgIGRlZmluZSBDT05GSUdfU1lTX0NCU0laRSAgICAgICAgICAgICAgMjU2ICAgICAgICAvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAgICAgICovCi0jZW5kaWYKLQotLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUgICAgICAgIChDT05GSUdfU1lTX0NCU0laRSArIHNpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpCi0KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhBUkdTICAgICAgIDggICAgICAgICAgICAvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAgICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRSAgICAgIENPTkZJR19TWVNfQ0JTSVpFICAgLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAgICAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVCAweDA0MDAwMDAwICAgLyogbWVtdGVzdCB3b3JrcyBvbiAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORCAgIDB4MDYwMDAwMDAgICAvKiA2NC05NiBNQiBpbiBTRFJBTSAqLwotCi0jZGVmaW5lCUNPTkZJR19DTE9DS1NfSU5fTUhaCTEJLyogY2xvY2tzIHBhc3NzZWQgdG8gTGludXggaW4gTUh6ICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIgICAgIDB4MTAwMDAwICAgICAvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLwotCi0vKgotICogTG93IExldmVsIENvbmZpZ3VyYXRpb24gU2V0dGluZ3MKLSAqIChhZGRyZXNzIG1hcHBpbmdzLCByZWdpc3RlciBpbml0aWFsIHZhbHVlcywgZXRjLikKLSAqIFlvdSBzaG91bGQga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgaWYgeW91IG1ha2UgY2hhbmdlcyBoZXJlLgotICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQVNFICAgIENPTkZJR19TWVNfRkxBU0gwX0JBU0UKLSNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9CQVNFICAgIENPTkZJR19TWVNfU0RSQU0wX0JBU0UKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogSGFyZCBSZXNldCBDb25maWd1cmF0aW9uIFdvcmRzCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19TWVNfU0JDX0JPT1RfTE9XKQotIyAgZGVmaW5lICBDT05GSUdfU1lTX1NCQ19IUkNXX0JPT1RfRkxBR1MgIChIUkNXX0NJUCB8IEhSQ1dfQk1TKQotI2Vsc2UKLSMgIGRlZmluZSAgQ09ORklHX1NZU19TQkNfSFJDV19CT09UX0ZMQUdTICAoMCkKLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19TWVNfU0JDX0JPT1RfTE9XKSAqLwotCi0vKiBnZXQgdGhlIEhSQ1cgSVNCIGZpZWxkIGZyb20gQ09ORklHX1NZU19JTU1SICovCi0jZGVmaW5lIENPTkZJR19TWVNfU0JDX0hSQ1dfSU1NUiAoICgoQ09ORklHX1NZU19JTU1SICYgMHgxMDAwMDAwMCkgPj4gMTApIHxcCi0JCQkgICAgKChDT05GSUdfU1lTX0lNTVIgJiAweDAxMDAwMDAwKSA+PiA3KSAgfFwKLQkJCSAgICAoKENPTkZJR19TWVNfSU1NUiAmIDB4MDAxMDAwMDApID4+IDQpICkKLQotI2RlZmluZSBDT05GSUdfU1lTX0hSQ1dfTUFTVEVSIChIUkNXX0JQUzExICAgICAgICAgICAgICAgICAgICAgICAgICAgfFwKLQkJCSBIUkNXX0RQUEMxMSAgICAgICAgICAgICAgICAgICAgICAgICAgfFwKLQkJCSBDT05GSUdfU1lTX1NCQ19IUkNXX0lNTVIgICAgICAgICAgICAgICAgICAgIHxcCi0JCQkgSFJDV19NTVIwMCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcCi0JCQkgSFJDV19MQlBDMTEgICAgICAgICAgICAgICAgICAgICAgICAgIHxcCi0JCQkgSFJDV19BUFBDMTAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcCi0JCQkgSFJDV19DUzEwUEMwMCAgICAgICAgICAgICAgICAgICAgICAgIHxcCi0JCQkgKENPTkZJR19TWVNfU0JDX01PRENLX0ggJiBIUkNXX01PRENLX0gxMTExKSB8XAotCQkJIENPTkZJR19TWVNfU0JDX0hSQ1dfQk9PVF9GTEFHUykKLQotLyogbm8gc2xhdmVzICovCi0jZGVmaW5lIENPTkZJR19TWVNfSFJDV19TTEFWRTEgMAotI2RlZmluZSBDT05GSUdfU1lTX0hSQ1dfU0xBVkUyIDAKLSNkZWZpbmUgQ09ORklHX1NZU19IUkNXX1NMQVZFMyAwCi0jZGVmaW5lIENPTkZJR19TWVNfSFJDV19TTEFWRTQgMAotI2RlZmluZSBDT05GSUdfU1lTX0hSQ1dfU0xBVkU1IDAKLSNkZWZpbmUgQ09ORklHX1NZU19IUkNXX1NMQVZFNiAwCi0jZGVmaW5lIENPTkZJR19TWVNfSFJDV19TTEFWRTcgMAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIERQUkFNKQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fQUREUiAgICAgICBDT05GSUdfU1lTX0lNTVIKLSNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9TSVpFICAgICAgICAweDQwMDAgIC8qIFNpemUgb2YgdXNlZCBhcmVhIGluIERQUkFNICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUICAgIChDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUgLSBHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKLSNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX09GRlNFVCAgICAgIENPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFN0YXJ0IGFkZHJlc3NlcyBmb3IgdGhlIGZpbmFsIG1lbW9yeSBjb25maWd1cmF0aW9uCi0gKiAoU2V0IHVwIGJ5IHRoZSBzdGFydHVwIGNvZGUpCi0gKiBQbGVhc2Ugbm90ZSB0aGF0IENPTkZJR19TWVNfU0RSQU1fQkFTRSBfbXVzdF8gc3RhcnQgYXQgMAotICogTm90ZSBhbHNvIHRoYXQgdGhlIGxvZ2ljIHRoYXQgc2V0cyBDT05GSUdfU1lTX1JBTUJPT1QgaXMgcGxhdGZvcm0gZGVwZW5kZW50LgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFICAgICAgICAoQ09ORklHX1NZU19GTEFTSDBfQkFTRSArIDB4MDBGMDAwMDApCi0KLSNpZiAoQ09ORklHX1NZU19NT05JVE9SX0JBU0UgPCBDT05GSUdfU1lTX0ZMQVNIX0JBU0UpCi0jICBkZWZpbmUgQ09ORklHX1NZU19SQU1CT09UCi0jZW5kaWYKLQotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOICAgICAgKDI1NiA8PCAxMCkgICAgIC8qIFJlc2VydmUgMjU2IGtCIGZvciBNb25pdG9yICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOICAgICAgICgxMjggPDwgMTApICAgICAvKiBSZXNlcnZlIDEyOCBrQiBmb3IgbWFsbG9jKCkgICovCi0KLS8qCi0gKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCi0gKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcwotICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfQk9PVE1BUFNaICAgICAgICAoOCA8PCAyMCkgICAgICAgLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGTEFTSCBhbmQgZW52aXJvbm1lbnQgb3JnYW5pemF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MgICAxICAgICAgIC8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzICAgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVCAgICA3MSAgICAgIC8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAgKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQgIDgwMDAgICAgLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKSAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1dSSVRFX1RPVVQgIDEgICAgICAgLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKGluIG1zKSAgICAqLwotCi0jaWZuZGVmIENPTkZJR19TWVNfUkFNQk9PVAotIyAgZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fRkxBU0ggIDEKLQotIyAgaWZkZWYgQ09ORklHX0VOVl9JTl9PV05fU0VDVAotIyAgICBkZWZpbmUgQ09ORklHX0VOVl9BRERSICAgICAgIChDT05GSUdfU1lTX01PTklUT1JfQkFTRSArIDB4NDAwMDApCi0jICAgIGRlZmluZSBDT05GSUdfRU5WX1NFQ1RfU0laRSAgMHg0MDAwMAotIyAgZWxzZQotIyAgICBkZWZpbmUgQ09ORklHX0VOVl9BRERSIChDT05GSUdfU1lTX0ZMQVNIX0JBU0UgKyBDT05GSUdfU1lTX01PTklUT1JfTEVOIC0gQ09ORklHX0VOVl9TRUNUX1NJWkUpCi0jICAgIGRlZmluZSBDT05GSUdfRU5WX1NJWkUgICAgICAgMHgxMDAwICAvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNlY3RvciAqLwotIyAgICBkZWZpbmUgQ09ORklHX0VOVl9TRUNUX1NJWkUgIDB4MTAwMDAgLyogc2VlIFJFQURNRSAtIGVudiBzZWN0IHJlYWwgc2l6ZSAqLwotIyAgZW5kaWYgLyogQ09ORklHX0VOVl9JTl9PV05fU0VDVCAqLwotI2Vsc2UKLSMgIGRlZmluZSBDT05GSUdfRU5WX0lTX0lOX05WUkFNICAxCi0jICBkZWZpbmUgQ09ORklHX0VOVl9BRERSICAgICAgICAgKENPTkZJR19TWVNfTU9OSVRPUl9CQVNFIC0gMHgxMDAwKQotIyAgZGVmaW5lIENPTkZJR19FTlZfU0laRSAgICAgICAgIDB4MjAwCi0jZW5kaWYgLyogQ09ORklHX1NZU19SQU1CT09UICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENhY2hlIENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0NBQ0hFTElORV9TSVpFICAgICAgMzIgICAgICAvKiBGb3IgTVBDODI2MCBDUFUgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0NNRF9LR0RCKQotIyAgZGVmaW5lIENPTkZJR19TWVNfQ0FDSEVMSU5FX1NISUZUICAgICA1ICAgICAvKiBsb2cgYmFzZSAyIG9mIHRoZSBhYm92ZSB2YWx1ZSAqLwotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEhJRHggLSBIYXJkd2FyZSBJbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgUmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAyLTExCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBISUQwIGFsc28gY29udGFpbnMgY2FjaGUgY29udHJvbCAtIGluaXRpYWxseSBlbmFibGUgYm90aCBjYWNoZXMgYW5kCi0gKiBpbnZhbGlkYXRlIGNvbnRlbnRzLCB0aGVuIHRoZSBmaW5hbCBzdGF0ZSBsZWF2ZXMgb25seSB0aGUgaW5zdHJ1Y3Rpb24KLSAqIGNhY2hlIGVuYWJsZWQuIE5vdGUgdGhhdCBQb3dlci1PbiBhbmQgSGFyZCByZXNldCBpbnZhbGlkYXRlIHRoZSBjYWNoZXMsCi0gKiBidXQgU29mdCByZXNldCBkb2VzIG5vdC4KLSAqCi0gKiBISUQxIGhhcyBvbmx5IHJlYWQtb25seSBpbmZvcm1hdGlvbiAtIG5vdGhpbmcgdG8gc2V0LgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfSElEMF9JTklUICAgKC8qSElEMF9JQ0UgIHwqL1wKLQkJCSAvKkhJRDBfRENFICB8Ki9cCi0JCQkgSElEMF9JQ0ZJIHxcCi0JCQkgSElEMF9EQ0kgIHxcCi0JCQkgSElEMF9JRkVNIHxcCi0JCQkgSElEMF9BQkUpCi0KLSNkZWZpbmUgQ09ORklHX1NZU19ISUQwX0ZJTkFMICAoLypISUQwX0lDRSAgfCovXAotCQkJIEhJRDBfSUZFTSB8XAotCQkJIEhJRDBfQUJFICB8XAotCQkJIEhJRDBfRU1DUCkKLSNkZWZpbmUgQ09ORklHX1NZU19ISUQyICAgICAgICAwCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFJNUiAtIFJlc2V0IE1vZGUgUmVnaXN0ZXIKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1JNUiAgICAgICAgIDAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQkNSIC0gQnVzIENvbmZpZ3VyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LTI1Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CQ1IgICAgICAgICAoQkNSX0VCTSAgIHxcCi0JCQkgQkNSX1BMRFAgIHxcCi0JCQkgQkNSX0VBViAgIHxcCi0JCQkgQkNSX05QUU0wKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTSVVNQ1IgLSBTSVUgTW9kdWxlIENvbmZpZ3VyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQtMzEKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfU0lVTUNSICAgICAgKFNJVU1DUl9MMkNQQzAxIHxcCi0JCQkgU0lVTUNSX0FQUEMxMCAgfFwKLQkJCSBTSVVNQ1JfQ1MxMFBDMDEpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU1lQQ1IgLSBTeXN0ZW0gUHJvdGVjdGlvbiBDb250cm9sICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExLTkKLSAqIFNZUENSIGNhbiBvbmx5IGJlIHdyaXR0ZW4gb25jZSBhZnRlciByZXNldCEKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFdhdGNoZG9nICYgQnVzIE1vbml0b3IgVGltZXIgbWF4LCA2MHggQnVzIE1vbml0b3IgZW5hYmxlCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19TWVBDUiAgICAgICAoU1lQQ1JfU1dUQyB8XAotCQkJIFNZUENSX0JNVCAgfFwKLQkJCSBTWVBDUl9QQk1FIHxcCi0JCQkgU1lQQ1JfTEJNRSB8XAotCQkJIFNZUENSX1NXUkkgfFwKLQkJCSBTWVBDUl9TV1ApCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRNQ05UU0MgLSBUaW1lIENvdW50ZXIgU3RhdHVzIGFuZCBDb250cm9sICAgICAgICAgICAgICAgICAgICAgNC00MAotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xlYXIgb25jZSBwZXIgU2Vjb25kIGFuZCBBbGFybSBJbnRlcnJ1cHQgU3RhdHVzLCBTZXQgMzJLSHogdGltZXJzY2xrLAotICogYW5kIGVuYWJsZSBUaW1lIENvdW50ZXIKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1RNQ05UU0MgICAgIChUTUNOVFNDX1NFQyB8XAotCQkJIFRNQ05UU0NfQUxSIHxcCi0JCQkgVE1DTlRTQ19UQ0YgfFwKLQkJCSBUTUNOVFNDX1RDRSkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sICAgICAgICAgICAgICAgICA0LTQyCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDbGVhciBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzLCBTZXQgMzJLSHogdGltZXJzY2xrLCBhbmQgZW5hYmxlCi0gKiBQZXJpb2RpYyB0aW1lcgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfUElTQ1IgICAgICAgKFBJU0NSX1BTICB8XAotCQkJIFBJU0NSX1BURiB8XAotCQkJIFBJU0NSX1BURSkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU0NDUiAtIFN5c3RlbSBDbG9jayBDb250cm9sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LTgKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1NDQ1IgICAgICAgIChTQ0NSX0RGQlJHMDEpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFJDQ1IgLSBSSVNDIENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAxMy03Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19SQ0NSICAgICAgICAwCi0KLS8qCi0gKiBJbml0IE1lbW9yeSBDb250cm9sbGVyOgotICoKLSAqIEJhbmsgQnVzICAgICBNYWNoaW5lIFBvcnRTeiAgRGV2aWNlCi0gKiAtLS0tIC0tLSAgICAgLS0tLS0tLSAtLS0tLS0gIC0tLS0tLQotICogIDAgICA2MHggICAgIEdQQ00gICAgNjQgYml0ICBGTEFTSCAoQkdBIC0gMTZNQiBBTUQgQU0yOURMMzIzREI5MCkKLSAqICAxICAgNjB4ICAgICBTRFJBTSAgIDY0IGJpdCAgU0RSQU0gKEJHQSAtIDY0TUIgSGl0YWNoaSBITTUyMjUzMjVGQlAtQjYwKQotICogIDIgICBMb2NhbCAgIFNEUkFNICAgMzIgYml0ICBTRFJBTSAoQkdBIC0gMzJNQiBIaXRhY2hpIEhNNTIyNTMyNUZCUC1CNjApCi0gKiAgMyAgIHVudXNlZAotICogIDQgICA2MHggICAgIEdQQ00gICAgIDggYml0ICBCb2FyZCBSZWdzLCBMRURzLCBzd2l0Y2hlcwotICogIDUgICB1bnVzZWQKLSAqICA2ICAgdW51c2VkCi0gKiAgNyAgIHVudXNlZAotICogIDggICBQQ01DSUEKLSAqICA5ICAgdW51c2VkCi0gKiAxMCAgIHVudXNlZAotICogMTEgICB1bnVzZWQKLSovCi0KLS8qIEJhbmsgMCAtIEZMQVNICi0gKgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfQlIwX1BSRUxJTSAgKChDT05GSUdfU1lTX0ZMQVNIMF9CQVNFICYgQlJ4X0JBX01TSykgfFwKLQkJCSBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKLQkJCSBCUnhfREVDQ19OT05FICAgICAgICAgICAgICAgICAgfFwKLQkJCSBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKLQkJCSBCUnhfVikKLQotI2RlZmluZSBDT05GSUdfU1lTX09SMF9QUkVMSU0gIChNRUdfVE9fQU0oQ09ORklHX1NZU19GTEFTSDBfU0laRSkgICAgIHxcCi0JCQkgT1J4R19DU05UICAgICAgICAgICAgICAgICAgICAgIHxcCi0JCQkgT1J4R19BQ1NfRElWMSAgICAgICAgICAgICAgICAgIHxcCi0JCQkgT1J4R19TQ1lfNl9DTEsgICAgICAgICAgICAgICAgIHxcCi0JCQkgT1J4R19FSFRSKQotCi0vKiBCYW5rIDEgLSBTRFJBTQotICoKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JSMV9QUkVMSU0gICgoQ09ORklHX1NZU19TRFJBTTBfQkFTRSAmIEJSeF9CQV9NU0spIHxcCi0JCQkgQlJ4X1BTXzY0ICAgICAgICAgICAgICAgICAgICAgIHxcCi0JCQkgQlJ4X01TX1NEUkFNX1AgICAgICAgICAgICAgICAgIHxcCi0JCQkgQlJ4X1YpCi0KLSNkZWZpbmUgQ09ORklHX1NZU19PUjFfUFJFTElNICAoTUVHX1RPX0FNKENPTkZJR19TWVNfU0RSQU0wX1NJWkUpICAgICB8XAotCQkJIE9SeFNfQlBEXzQgICAgICAgICAgICAgICAgICAgICB8XAotCQkJIE9SeFNfUk9XU1RfUEJJMF9BOCAgICAgICAgICAgICB8XAotCQkJIE9SeFNfTlVNUl8xMiAgICAgICAgICAgICAgICAgICB8XAotCQkJIE9SeFNfSUJJRCkKLQotI2RlZmluZSBDT05GSUdfU1lTX1BTRE1SICAgICAgIDB4MDE0REE0MTIKLSNkZWZpbmUgQ09ORklHX1NZU19QU1JUCTB4NzkKLQotCi0vKiBCYW5rIDIgLSBTRFJBTQotICoKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JSMl9QUkVMSU0gICgoQ09ORklHX1NZU19TRFJBTTFfQkFTRSAmIEJSeF9CQV9NU0spIHxcCi0JCQkgQlJ4X1BTXzMyICAgICAgICAgICAgICAgICAgICAgIHxcCi0JCQkgQlJ4X01TX1NEUkFNX0wgICAgICAgICAgICAgICAgIHxcCi0JCQkgQlJ4X1YpCi0KLSNkZWZpbmUgQ09ORklHX1NZU19PUjJfUFJFTElNICAoTUVHX1RPX0FNKENPTkZJR19TWVNfU0RSQU0xX1NJWkUpICAgICB8XAotCQkJIE9SeFNfQlBEXzQgICAgICAgICAgICAgICAgICAgICB8XAotCQkJIE9SeFNfUk9XU1RfUEJJMF9BOSAgICAgICAgICAgICB8XAotCQkJIE9SeFNfTlVNUl8xMikKLQotI2RlZmluZSBDT05GSUdfU1lTX0xTRE1SICAgICAgIDB4MDE2OUE1MTIKLSNkZWZpbmUgQ09ORklHX1NZU19MU1JUCTB4NzkKLQotI2RlZmluZSBDT05GSUdfU1lTX01QVFBSCSgweDA4MDAgJiBNUFRQUl9QVFBfTVNLKQotCi0vKiBCYW5rIDQgLSBPbiBib2FyZCByZWdpc3RlcnMKLSAqCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CUjRfUFJFTElNICAgKChDT05GSUdfU1lTX1JFR1NfQkFTRSAmIEJSeF9CQV9NU0spICB8XAotCQkJICAgQlJ4X1BTXzggICAgICAgICAgICAgICAgICAgICB8XAotCQkJICAgQlJ4X01TX0dQQ01fUCAgICAgICAgICAgICAgICB8XAotCQkJICAgQlJ4X1YpCi0KLSNkZWZpbmUgQ09ORklHX1NZU19PUjRfUFJFTElNICAgIChPUnhHX0FNX01TSyAgICAgICAgICAgICAgICAgfFwKLQkJCSAgIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICB8XAotCQkJICAgT1J4R19BQ1NfRElWMSAgICAgICAgICAgICAgIHxcCi0JCQkgICBPUnhHX1NDWV81X0NMSyAgICAgICAgICAgICAgfFwKLQkJCSAgIE9SeEdfVFJMWCkKLQotI2VuZGlmICAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVDEwNDBRRFMuaCBiL2luY2x1ZGUvY29uZmlncy9UMTA0MFFEUy5oCmluZGV4IDk5M2Y5YWUuLjUyMjY1M2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9UMTA0MFFEUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UMTA0MFFEUy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDEzIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICAqIHByb2plY3QuCkBAIC00Myw2ICs0MywxMCBAQAogI2RlZmluZSBDT05GSUdfU1lTX0JPT0szRV9IVgkJLyogQ2F0ZWdvcnkgRS5IViBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgQ09ORklHX01QCQkJLyogc3VwcG9ydCBtdWx0aXBsZSBwcm9jZXNzb3JzICovCiAKKy8qIHN1cHBvcnQgZGVlcCBzbGVlcCAqLworI2RlZmluZSBDT05GSUdfREVFUF9TTEVFUAorI2RlZmluZSBDT05GSUdfU0lMRU5UX0NPTlNPTEUKKwogI2lmbmRlZiBDT05GSUdfU1lTX1RFWFRfQkFTRQogI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkweGVmZjQwMDAwCiAjZW5kaWYKQEAgLTE2OSw4ICsxNzMsMTAgQEAKICNkZWZpbmUgQ09ORklHX0NISVBfU0VMRUNUU19QRVJfQ1RSTAkoMiAqIENPTkZJR19ESU1NX1NMT1RTX1BFUl9DVExSKQogCiAjZGVmaW5lIENPTkZJR19ERFJfU1BECisjaWZuZGVmIENPTkZJR19TWVNfRlNMX0REUjQKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfRERSMwogI2RlZmluZSBDT05GSUdfRlNMX0REUl9JTlRFUkFDVElWRQorI2VuZGlmCiAKICNkZWZpbmUgQ09ORklHX1NZU19TUERfQlVTX05VTQkwCiAjZGVmaW5lIFNQRF9FRVBST01fQUREUkVTUwkweDUxCkBAIC0zNzQsNyArMzgwLDcgQEAKIAkJCQkJR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCiAjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQKIAotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoNTEyICogMTAyNCkKKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDc2OCAqIDEwMjQpCiAjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDEwICogMTAyNCAqIDEwMjQpCiAKIC8qIFNlcmlhbCBQb3J0IC0gY29udHJvbGxlZCBvbiBib2FyZCB3aXRoIGp1bXBlciBKOApAQCAtNTk1LDYgKzYwMSw4IEBACiAjZGVmaW5lIENPTkZJR19TWVNfRFBBQV9GTUFOCiAjZGVmaW5lIENPTkZJR19TWVNfRFBBQV9QTUUKIAorI2RlZmluZSBDT05GSUdfUUUKKyNkZWZpbmUgQ09ORklHX1VfUUUKIC8qIERlZmF1bHQgYWRkcmVzcyBvZiBtaWNyb2NvZGUgZm9yIHRoZSBMaW51eCBGbWFuIGRyaXZlciAqLwogI2lmIGRlZmluZWQoQ09ORklHX1NQSUZMQVNIKQogLyoKQEAgLTYwMiw3ICs2MTAsNyBAQAogICogZW52LCBzbyB3ZSBnb3QgMHgxMTAwMDAuCiAgKi8KICNkZWZpbmUgQ09ORklHX1NZU19RRV9GV19JTl9TUElGTEFTSAotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUgkweDExMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkweDExMDAwMAogI2VsaWYgZGVmaW5lZChDT05GSUdfU0RDQVJEKQogLyoKICAqIFBCTCBTRCBib290IGltYWdlIHNob3VsZCBzdG9yZWQgYXQgMHgxMDAwKDggYmxvY2tzKSwgdGhlIHNpemUgb2YgdGhlIGltYWdlIGlzCkBAIC02MTAsMTMgKzYxOCwxNCBAQAogICogMHgyMDAwICgxNiBibG9ja3MpLCA4ICsgMTY1MCArIDE2ID0gMTY3NCwgZW5sYXJnZSBpdCB0byAxNjgwLgogICovCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9NTUMKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJKDUxMiAqIDE2ODApCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCSg1MTIgKiAxNjgwKQogI2VsaWYgZGVmaW5lZChDT05GSUdfTkFORCkKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0lOX05BTkQKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJKDggKiBDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRSkKKyNkZWZpbmUgQ09ORklHX1NZU19GTUFOX0ZXX0FERFIJKDggKiBDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRSkKICNlbHNlCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9OT1IKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJCTB4RUZGMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19GTUFOX0ZXX0FERFIJCTB4RUZGMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19RRV9GV19BRERSCQkweEVGRjEwMDAwCiAjZW5kaWYKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0xFTkdUSAkweDEwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfRkRUX1BBRAkJKDB4MzAwMCArIENPTkZJR19TWVNfUUVfRk1BTl9GV19MRU5HVEgpCkBAIC02NDksNiArNjU4LDIzIEBACiAjZW5kaWYKIAogLyoKKyAqIER5bmFtaWMgTVREIFBhcnRpdGlvbiBzdXBwb3J0IHdpdGggbXRkcGFydHMKKyAqLworI2lmbmRlZiBDT05GSUdfU1lTX05PX0ZMQVNICisjZGVmaW5lIENPTkZJR19NVERfREVWSUNFCisjZGVmaW5lIENPTkZJR19NVERfUEFSVElUSU9OUworI2RlZmluZSBDT05GSUdfQ01EX01URFBBUlRTCisjZGVmaW5lIENPTkZJR19GTEFTSF9DRklfTVRECisjZGVmaW5lIE1URElEU19ERUZBVUxUICJub3IwPWZlODAwMDAwMC5ub3IsbmFuZDA9ZmZmODAwMDAwLmZsYXNoLCIgXAorCQkJInNwaTA9c3BpZmUxMTAwMDAuMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9ZmU4MDAwMDAwLm5vcjoxbSh1Ym9vdCksNW0oa2VybmVsKSwiIFwKKwkJCQkiMTI4ayhkdGIpLDk2bShmcyksLSh1c2VyKTsiXAorCQkJCSJmZmY4MDAwMDAuZmxhc2g6Mm0odWJvb3QpLDltKGtlcm5lbCksIlwKKwkJCQkiMTI4ayhkdGIpLDk2bShmcyksLSh1c2VyKTtzcGlmZTExMDAwMC4wOiIgXAorCQkJCSIybSh1Ym9vdCksOW0oa2VybmVsKSwxMjhrKGR0YiksLSh1c2VyKSIKKyNlbmRpZgorCisvKgogICogRW52aXJvbm1lbnQKICAqLwogI2RlZmluZSBDT05GSUdfTE9BRFNfRUNITwkJLyogZWNobyBvbiBmb3Igc2VyaWFsIGRvd25sb2FkICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVDEwNDBSREIuaCBiL2luY2x1ZGUvY29uZmlncy9UMTA0MFJEQi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTU4NDViLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY29uZmlncy9UMTA0MFJEQi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2lmbmRlZiBfX0NPTkZJR19ICi0jZGVmaW5lIF9fQ09ORklHX0gKLQotLyoKLSAqIFQxMDQwIFJEQiBib2FyZCBjb25maWd1cmF0aW9uIGZpbGUKLSAqLwotI2RlZmluZSBDT05GSUdfVDEwNHhSREIKLSNkZWZpbmUgQ09ORklHX1QxMDQwUkRCCi0jZGVmaW5lIENPTkZJR19QSFlTXzY0QklUCi0KLSNpZmRlZiBDT05GSUdfUkFNQk9PVF9QQkwKLSNkZWZpbmUgQ09ORklHX1JBTUJPT1RfVEVYVF9CQVNFCUNPTkZJR19TWVNfVEVYVF9CQVNFCi0jZGVmaW5lIENPTkZJR19SRVNFVF9WRUNUT1JfQUREUkVTUwkweGZmZmZmZmZjCi0jZW5kaWYKLQotLyogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMgKi8KLSNkZWZpbmUgQ09ORklHX0JPT0tFCi0jZGVmaW5lIENPTkZJR19FNTAwCQkJLyogQk9PS0UgZTUwMCBmYW1pbHkgKi8KLSNkZWZpbmUgQ09ORklHX0U1MDBNQwkJCS8qIEJPT0tFIGU1MDBtYyBmYW1pbHkgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CT09LM0VfSFYJCS8qIENhdGVnb3J5IEUuSFYgc3VwcG9ydGVkICovCi0jZGVmaW5lIENPTkZJR19NUAkJCS8qIHN1cHBvcnQgbXVsdGlwbGUgcHJvY2Vzc29ycyAqLwotCi0jaWZuZGVmIENPTkZJR19TWVNfVEVYVF9CQVNFCi0jZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCTB4ZWZmNDAwMDAKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19SRVNFVF9WRUNUT1JfQUREUkVTUwotI2RlZmluZSBDT05GSUdfUkVTRVRfVkVDVE9SX0FERFJFU1MJMHhlZmZmZmZmYwotI2VuZGlmCi0KLSNkZWZpbmUgQ09ORklHX1NZU19GU0xfQ1BDCQkvKiBDb3JlbmV0IFBsYXRmb3JtIENhY2hlICovCi0jZGVmaW5lIENPTkZJR19TWVNfTlVNX0NQQwkJQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMKLSNkZWZpbmUgQ09ORklHX0ZTTF9JRkMJCQkvKiBFbmFibGUgSUZDIFN1cHBvcnQgKi8KLSNkZWZpbmUgQ09ORklHX1BDSQkJCS8qIEVuYWJsZSBQQ0kvUENJRSAqLwotI2RlZmluZSBDT05GSUdfUENJX0lORElSRUNUX0JSSURHRQotI2RlZmluZSBDT05GSUdfUENJRTEJCQkvKiBQQ0lFIGNvbnRyb2xlciAxICovCi0jZGVmaW5lIENPTkZJR19QQ0lFMgkJCS8qIFBDSUUgY29udHJvbGVyIDIgKi8KLSNkZWZpbmUgQ09ORklHX1BDSUUzCQkJLyogUENJRSBjb250cm9sZXIgMyAqLwotI2RlZmluZSBDT05GSUdfUENJRTQJCQkvKiBQQ0lFIGNvbnRyb2xlciA0ICovCi0KLSNkZWZpbmUgQ09ORklHX0ZTTF9QQ0lfSU5JVAkJLyogVXNlIGNvbW1vbiBGU0wgaW5pdCBjb2RlICovCi0jZGVmaW5lIENPTkZJR19TWVNfUENJXzY0QklUCQkvKiBlbmFibGUgNjQtYml0IFBDSSByZXNvdXJjZXMgKi8KLQotI2RlZmluZSBDT05GSUdfRlNMX0xBVwkJCS8qIFVzZSBjb21tb24gRlNMIGluaXQgY29kZSAqLwotCi0jZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCi0KLSNpZmRlZiBDT05GSUdfU1lTX05PX0ZMQVNICi0jZGVmaW5lIENPTkZJR19FTlZfSVNfTk9XSEVSRQotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX0ZMQVNIX0NGSV9EUklWRVIKLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9DRkkKLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfU1lTX05PX0ZMQVNICi0jaWYgZGVmaW5lZChDT05GSUdfU1BJRkxBU0gpCi0jZGVmaW5lIENPTkZJR19TWVNfRVhUUkFfRU5WX1JFTE9DCi0jZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fU1BJX0ZMQVNICi0jZGVmaW5lIENPTkZJR19FTlZfU0laRSAgICAgICAgICAgICAgICAgMHgyMDAwICAgICAgICAgIC8qIDhLQiAqLwotI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVCAgICAgICAgICAgICAgIDB4MTAwMDAwICAgICAgICAvKiAxTUIgKi8KLSNkZWZpbmUgQ09ORklHX0VOVl9TRUNUX1NJWkUgICAgICAgICAgICAweDEwMDAwCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TRENBUkQpCi0jZGVmaW5lIENPTkZJR19TWVNfRVhUUkFfRU5WX1JFTE9DCi0jZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fTU1DCi0jZGVmaW5lIENPTkZJR19TWVNfTU1DX0VOVl9ERVYgICAgICAgICAgMAotI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCQkweDIwMDAKLSNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCSg1MTIgKiAxNjU4KQotI2VsaWYgZGVmaW5lZChDT05GSUdfTkFORCkKLSNkZWZpbmUgQ09ORklHX1NZU19FWFRSQV9FTlZfUkVMT0MKLSNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9OQU5ECi0jZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCUNPTkZJR19TWVNfTkFORF9CTE9DS19TSVpFCi0jZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCQkoMyAqIENPTkZJR19TWVNfTkFORF9CTE9DS19TSVpFKQotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9GTEFTSAotI2RlZmluZSBDT05GSUdfRU5WX0FERFIJCShDT05GSUdfU1lTX01PTklUT1JfQkFTRSAtIENPTkZJR19FTlZfU0VDVF9TSVpFKQotI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCTB4MjAwMAotI2RlZmluZSBDT05GSUdfRU5WX1NFQ1RfU0laRQkweDIwMDAwIC8qIDEyOEsgKG9uZSBzZWN0b3IpICovCi0jZW5kaWYKLSNlbHNlIC8qIENPTkZJR19TWVNfTk9fRkxBU0ggKi8KLSNkZWZpbmUgQ09ORklHX0VOVl9TSVpFICAgICAgICAgICAgICAgIDB4MjAwMAotI2RlZmluZSBDT05GSUdfRU5WX1NFQ1RfU0laRSAgIDB4MjAwMDAgLyogMTI4SyAob25lIHNlY3RvcikgKi8KLSNlbmRpZgotCi0jZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJMTAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19ERFJfQ0xLX0ZSRVEJNjY2NjY2NjYKLQotLyoKLSAqIFRoZXNlIGNhbiBiZSB0b2dnbGVkIGZvciBwZXJmb3JtYW5jZSBhbmFseXNpcywgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0LgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfQ0FDSEVfU1RBU0hJTkcKLSNkZWZpbmUgQ09ORklHX0JBQ0tTSURFX0wyX0NBQ0hFCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9MMkNTUjAJCUwyQ1NSMF9MMkUKLSNkZWZpbmUgQ09ORklHX0JUQgkJCS8qIHRvZ2dsZSBicmFuY2ggcHJlZGl0aW9uICovCi0jZGVmaW5lIENPTkZJR19ERFJfRUNDCi0jaWZkZWYgQ09ORklHX0REUl9FQ0MKLSNkZWZpbmUgQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSCi0jZGVmaW5lIENPTkZJR19NRU1fSU5JVF9WQUxVRQkJMHhkZWFkYmVlZgotI2VuZGlmCi0KLSNkZWZpbmUgQ09ORklHX0VOQUJMRV8zNkJJVF9QSFlTCi0KLSNkZWZpbmUgQ09ORklHX0FERFJfTUFQCi0jZGVmaW5lIENPTkZJR19TWVNfTlVNX0FERFJfTUFQCQk2NAkvKiBudW1iZXIgb2YgVExCMSBlbnRyaWVzICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4MDAyMDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbiAqLwotI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkweDAwNDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfQUxUX01FTVRFU1QKLSNkZWZpbmUgQ09ORklHX1BBTklDX0hBTkcJLyogZG8gbm90IHJlc2V0IGJvYXJkIG9uIHBhbmljICovCi0KLS8qCi0gKiAgQ29uZmlnIHRoZSBMMyBDYWNoZSBhcyBMMyBTUkFNCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JTklUX0wzX0FERFIJCTB4RkZGQzAwMDAKLQotI2RlZmluZSBDT05GSUdfU1lTX0RDU1JCQVIJCTB4ZjAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19EQ1NSQkFSX1BIWVMJCTB4ZjAwMDAwMDAwdWxsCi0KLS8qCi0gKiBERFIgU2V0dXAKLSAqLwotI2RlZmluZSBDT05GSUdfVkVSWV9CSUdfUkFNCi0jZGVmaW5lIENPTkZJR19TWVNfRERSX1NEUkFNX0JBU0UJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX1NEUkFNX0JBU0UJCUNPTkZJR19TWVNfRERSX1NEUkFNX0JBU0UKLQotLyogQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMgaXMgZGVmaW5lZCBpbiBpbmNsdWRlL2FzbS9jb25maWdfbXBjODV4eC5oICovCi0jZGVmaW5lIENPTkZJR19ESU1NX1NMT1RTX1BFUl9DVExSCTEKLSNkZWZpbmUgQ09ORklHX0NISVBfU0VMRUNUU19QRVJfQ1RSTAkoMiAqIENPTkZJR19ESU1NX1NMT1RTX1BFUl9DVExSKQotCi0jZGVmaW5lIENPTkZJR19ERFJfU1BECi0jZGVmaW5lIENPTkZJR19TWVNfRERSX1JBV19USU1JTkcKLSNkZWZpbmUgQ09ORklHX1NZU19GU0xfRERSMwotCi0jZGVmaW5lIENPTkZJR19TWVNfU1BEX0JVU19OVU0JMAotI2RlZmluZSBTUERfRUVQUk9NX0FERFJFU1MJMHg1MQotCi0jZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fU0laRQk0MDk2CS8qIGZvciBmaXhlZCBwYXJhbWV0ZXIgdXNlICovCi0KLS8qCi0gKiBJRkMgRGVmaW5pdGlvbnMKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UJMHhlODAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBU0VfUEhZUwkoMHhmMDAwMDAwMDB1bGwgfCBDT05GSUdfU1lTX0ZMQVNIX0JBU0UpCi0KLSNkZWZpbmUgQ09ORklHX1NZU19OT1JfQ1NQUl9FWFQJKDB4ZikKLSNkZWZpbmUgQ09ORklHX1NZU19OT1JfQ1NQUgkoQ1NQUl9QSFlTX0FERFIoQ09ORklHX1NZU19GTEFTSF9CQVNFKSB8IFwKLQkJCQlDU1BSX1BPUlRfU0laRV8xNiB8IFwKLQkJCQlDU1BSX01TRUxfTk9SIHwgXAotCQkJCUNTUFJfVikKLSNkZWZpbmUgQ09ORklHX1NZU19OT1JfQU1BU0sJSUZDX0FNQVNLKDEyOCoxMDI0KjEwMjQpCi0vKiBOT1IgRmxhc2ggVGltaW5nIFBhcmFtcyAqLwotI2RlZmluZSBDT05GSUdfU1lTX05PUl9DU09SCUNTT1JfTkFORF9UUkhaXzgwCi0jZGVmaW5lIENPTkZJR19TWVNfTk9SX0ZUSU0wCShGVElNMF9OT1JfVEFDU0UoMHg0KSB8IFwKLQkJCQlGVElNMF9OT1JfVEVBREMoMHg1KSB8IFwKLQkJCQlGVElNMF9OT1JfVEVBSEMoMHg1KSkKLSNkZWZpbmUgQ09ORklHX1NZU19OT1JfRlRJTTEJKEZUSU0xX05PUl9UQUNPKDB4MzUpIHwgXAotCQkJCUZUSU0xX05PUl9UUkFEX05PUigweDFBKSB8XAotCQkJCUZUSU0xX05PUl9UU0VRUkFEX05PUigweDEzKSkKLSNkZWZpbmUgQ09ORklHX1NZU19OT1JfRlRJTTIJKEZUSU0yX05PUl9UQ1MoMHg0KSB8IFwKLQkJCQlGVElNMl9OT1JfVENIKDB4NCkgfCBcCi0JCQkJRlRJTTJfTk9SX1RXUEgoMHgwRSkgfCBcCi0JCQkJRlRJTTJfTk9SX1RXUCgweDFjKSkKLSNkZWZpbmUgQ09ORklHX1NZU19OT1JfRlRJTTMJMHgwCi0KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9RVUlFVF9URVNUCi0jZGVmaW5lIENPTkZJR19GTEFTSF9TSE9XX1BST0dSRVNTCTQ1IC8qIGNvdW50IGRvd24gZnJvbSA0NS81OiA5Li4xICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MJMgkvKiBudW1iZXIgb2YgYmFua3MgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVAkxMDI0CS8qIHNlY3RvcnMgcGVyIGRldmljZSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQJNjAwMDAJLyogRmxhc2ggRXJhc2UgVGltZW91dCAobXMpICovCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogRmxhc2ggV3JpdGUgVGltZW91dCAobXMpICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9FTVBUWV9JTkZPCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFOS1NfTElTVAl7Q09ORklHX1NZU19GTEFTSF9CQVNFX1BIWVN9Ci0KLS8qIENQTEQgb24gSUZDICovCi0jZGVmaW5lIENPTkZJR19TWVNfQ1BMRF9CQVNFCTB4ZmZkZjAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19DUExEX0JBU0VfUEhZUwkoMHhmMDAwMDAwMDB1bGwgfCBDT05GSUdfU1lTX0NQTERfQkFTRSkKLSNkZWZpbmUgQ09ORklHX1NZU19DU1BSMl9FWFQJKDB4ZikKLSNkZWZpbmUgQ09ORklHX1NZU19DU1BSMgkoQ1NQUl9QSFlTX0FERFIoQ09ORklHX1NZU19DUExEX0JBU0VfUEhZUykgXAotCQkJCXwgQ1NQUl9QT1JUX1NJWkVfOCBcCi0JCQkJfCBDU1BSX01TRUxfR1BDTSBcCi0JCQkJfCBDU1BSX1YpCi0jZGVmaW5lIENPTkZJR19TWVNfQU1BU0syCUlGQ19BTUFTSyg2NCoxMDI0KQotI2RlZmluZSBDT05GSUdfU1lTX0NTT1IyCTB4MAotLyogQ1BMRCBUaW1pbmcgcGFyYW1ldGVycyBmb3IgSUZDIENTMiAqLwotI2RlZmluZSBDT05GSUdfU1lTX0NTMl9GVElNMAkJKEZUSU0wX0dQQ01fVEFDU0UoMHgwZSkgfCBcCi0JCQkJCUZUSU0wX0dQQ01fVEVBREMoMHgwZSkgfCBcCi0JCQkJCUZUSU0wX0dQQ01fVEVBSEMoMHgwZSkpCi0jZGVmaW5lIENPTkZJR19TWVNfQ1MyX0ZUSU0xCQkoRlRJTTFfR1BDTV9UQUNPKDB4MGUpIHwgXAotCQkJCQlGVElNMV9HUENNX1RSQUQoMHgxZikpCi0jZGVmaW5lIENPTkZJR19TWVNfQ1MyX0ZUSU0yCQkoRlRJTTJfR1BDTV9UQ1MoMHgwZSkgfCBcCi0JCQkJCUZUSU0yX0dQQ01fVENIKDB4MCkgfCBcCi0JCQkJCUZUSU0yX0dQQ01fVFdQKDB4MWYpKQotI2RlZmluZSBDT05GSUdfU1lTX0NTMl9GVElNMwkJMHgwCi0KLS8qIE5BTkQgRmxhc2ggb24gSUZDICovCi0jZGVmaW5lIENPTkZJR19OQU5EX0ZTTF9JRkMKLSNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0JBU0UJCTB4ZmY4MDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0JBU0VfUEhZUwkoMHhmMDAwMDAwMDB1bGwgfCBDT05GSUdfU1lTX05BTkRfQkFTRSkKLQotI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQ1NQUl9FWFQJKDB4ZikKLSNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0NTUFIJKENTUFJfUEhZU19BRERSKENPTkZJR19TWVNfTkFORF9CQVNFX1BIWVMpIFwKLQkJCQl8IENTUFJfUE9SVF9TSVpFXzggLyogUG9ydCBTaXplID0gOCBiaXQgKi8gXAotCQkJCXwgQ1NQUl9NU0VMX05BTkQJLyogTVNFTCA9IE5BTkQgKi8gXAotCQkJCXwgQ1NQUl9WKQotI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQU1BU0sJSUZDX0FNQVNLKDY0KjEwMjQpCi0KLSNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0NTT1IgICAgKENTT1JfTkFORF9FQ0NfRU5DX0VOICAgLyogRUNDIG9uIGVuY29kZSAqLyBcCi0JCQkJfCBDU09SX05BTkRfRUNDX0RFQ19FTiAgLyogRUNDIG9uIGRlY29kZSAqLyBcCi0JCQkJfCBDU09SX05BTkRfRUNDX01PREVfNCAgLyogNC1iaXQgRUNDICovIFwKLQkJCQl8IENTT1JfTkFORF9SQUxfMwkvKiBSQUwgPSAzQnllcyAqLyBcCi0JCQkJfCBDU09SX05BTkRfUEdTXzRLCS8qIFBhZ2UgU2l6ZSA9IDRLICovIFwKLQkJCQl8IENTT1JfTkFORF9TUFJaXzIyNC8qIFNwYXJlIHNpemUgPSAyMjQgKi8gXAotCQkJCXwgQ1NPUl9OQU5EX1BCKDY0KSkJLypQYWdlcyBQZXIgQmxvY2sgPSA2NCovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19OQU5EX09ORklfREVURUNUSU9OCi0KLS8qIE9ORkkgTkFORCBGbGFzaCBtb2RlMCBUaW1pbmcgUGFyYW1zICovCi0jZGVmaW5lIENPTkZJR19TWVNfTkFORF9GVElNMAkJKEZUSU0wX05BTkRfVENDU1QoMHgwNykgfCBcCi0JCQkJCUZUSU0wX05BTkRfVFdQKDB4MTgpICAgfCBcCi0JCQkJCUZUSU0wX05BTkRfVFdDSFQoMHgwNykgfCBcCi0JCQkJCUZUSU0wX05BTkRfVFdIKDB4MGEpKQotI2RlZmluZSBDT05GSUdfU1lTX05BTkRfRlRJTTEJCShGVElNMV9OQU5EX1RBRExFKDB4MzIpIHwgXAotCQkJCQlGVElNMV9OQU5EX1RXQkUoMHgzOSkgIHwgXAotCQkJCQlGVElNMV9OQU5EX1RSUigweDBlKSAgIHwgXAotCQkJCQlGVElNMV9OQU5EX1RSUCgweDE4KSkKLSNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0ZUSU0yCQkoRlRJTTJfTkFORF9UUkFEKDB4MGYpIHwgXAotCQkJCQlGVElNMl9OQU5EX1RSRUgoMHgwYSkgfCBcCi0JCQkJCUZUSU0yX05BTkRfVFdIUkUoMHgxZSkpCi0jZGVmaW5lIENPTkZJR19TWVNfTkFORF9GVElNMwkJMHgwCi0KLSNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0REUl9MQVcJCTExCi0jZGVmaW5lIENPTkZJR19TWVNfTkFORF9CQVNFX0xJU1QJeyBDT05GSUdfU1lTX05BTkRfQkFTRSB9Ci0jZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFCTEKLSNkZWZpbmUgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURQotI2RlZmluZSBDT05GSUdfQ01EX05BTkQKLQotI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRQkoNTEyICogMTAyNCkKLQotI2lmIGRlZmluZWQoQ09ORklHX05BTkQpCi0jZGVmaW5lIENPTkZJR19TWVNfQ1NQUjBfRVhUCQlDT05GSUdfU1lTX05BTkRfQ1NQUl9FWFQKLSNkZWZpbmUgQ09ORklHX1NZU19DU1BSMAkJQ09ORklHX1NZU19OQU5EX0NTUFIKLSNkZWZpbmUgQ09ORklHX1NZU19BTUFTSzAJCUNPTkZJR19TWVNfTkFORF9BTUFTSwotI2RlZmluZSBDT05GSUdfU1lTX0NTT1IwCQlDT05GSUdfU1lTX05BTkRfQ1NPUgotI2RlZmluZSBDT05GSUdfU1lTX0NTMF9GVElNMAkJQ09ORklHX1NZU19OQU5EX0ZUSU0wCi0jZGVmaW5lIENPTkZJR19TWVNfQ1MwX0ZUSU0xCQlDT05GSUdfU1lTX05BTkRfRlRJTTEKLSNkZWZpbmUgQ09ORklHX1NZU19DUzBfRlRJTTIJCUNPTkZJR19TWVNfTkFORF9GVElNMgotI2RlZmluZSBDT05GSUdfU1lTX0NTMF9GVElNMwkJQ09ORklHX1NZU19OQU5EX0ZUSU0zCi0jZGVmaW5lIENPTkZJR19TWVNfQ1NQUjFfRVhUCQlDT05GSUdfU1lTX05PUl9DU1BSX0VYVAotI2RlZmluZSBDT05GSUdfU1lTX0NTUFIxCQlDT05GSUdfU1lTX05PUl9DU1BSCi0jZGVmaW5lIENPTkZJR19TWVNfQU1BU0sxCQlDT05GSUdfU1lTX05PUl9BTUFTSwotI2RlZmluZSBDT05GSUdfU1lTX0NTT1IxCQlDT05GSUdfU1lTX05PUl9DU09SCi0jZGVmaW5lIENPTkZJR19TWVNfQ1MxX0ZUSU0wCQlDT05GSUdfU1lTX05PUl9GVElNMAotI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMQkJQ09ORklHX1NZU19OT1JfRlRJTTEKLSNkZWZpbmUgQ09ORklHX1NZU19DUzFfRlRJTTIJCUNPTkZJR19TWVNfTk9SX0ZUSU0yCi0jZGVmaW5lIENPTkZJR19TWVNfQ1MxX0ZUSU0zCQlDT05GSUdfU1lTX05PUl9GVElNMwotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX1NZU19DU1BSMF9FWFQJCUNPTkZJR19TWVNfTk9SX0NTUFJfRVhUCi0jZGVmaW5lIENPTkZJR19TWVNfQ1NQUjAJCUNPTkZJR19TWVNfTk9SX0NTUFIKLSNkZWZpbmUgQ09ORklHX1NZU19BTUFTSzAJCUNPTkZJR19TWVNfTk9SX0FNQVNLCi0jZGVmaW5lIENPTkZJR19TWVNfQ1NPUjAJCUNPTkZJR19TWVNfTk9SX0NTT1IKLSNkZWZpbmUgQ09ORklHX1NZU19DUzBfRlRJTTAJCUNPTkZJR19TWVNfTk9SX0ZUSU0wCi0jZGVmaW5lIENPTkZJR19TWVNfQ1MwX0ZUSU0xCQlDT05GSUdfU1lTX05PUl9GVElNMQotI2RlZmluZSBDT05GSUdfU1lTX0NTMF9GVElNMgkJQ09ORklHX1NZU19OT1JfRlRJTTIKLSNkZWZpbmUgQ09ORklHX1NZU19DUzBfRlRJTTMJCUNPTkZJR19TWVNfTk9SX0ZUSU0zCi0jZGVmaW5lIENPTkZJR19TWVNfQ1NQUjFfRVhUCQlDT05GSUdfU1lTX05BTkRfQ1NQUl9FWFQKLSNkZWZpbmUgQ09ORklHX1NZU19DU1BSMQkJQ09ORklHX1NZU19OQU5EX0NTUFIKLSNkZWZpbmUgQ09ORklHX1NZU19BTUFTSzEJCUNPTkZJR19TWVNfTkFORF9BTUFTSwotI2RlZmluZSBDT05GSUdfU1lTX0NTT1IxCQlDT05GSUdfU1lTX05BTkRfQ1NPUgotI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMAkJQ09ORklHX1NZU19OQU5EX0ZUSU0wCi0jZGVmaW5lIENPTkZJR19TWVNfQ1MxX0ZUSU0xCQlDT05GSUdfU1lTX05BTkRfRlRJTTEKLSNkZWZpbmUgQ09ORklHX1NZU19DUzFfRlRJTTIJCUNPTkZJR19TWVNfTkFORF9GVElNMgotI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMwkJQ09ORklHX1NZU19OQU5EX0ZUSU0zCi0jZW5kaWYKLQotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQkJQ09ORklHX1NZU19URVhUX0JBU0UKLQotI2lmIGRlZmluZWQoQ09ORklHX1JBTUJPT1RfUEJMKQotI2RlZmluZSBDT05GSUdfU1lTX1JBTUJPT1QKLSNlbmRpZgotCi0jZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX1IKLSNkZWZpbmUgQ09ORklHX01JU0NfSU5JVF9SCi0KLSNkZWZpbmUgQ09ORklHX0hXQ09ORklHCi0KLS8qIGRlZmluZSB0byB1c2UgTDEgYXMgaW5pdGlhbCBzdGFjayAqLwotI2RlZmluZSBDT05GSUdfTDFfSU5JVF9SQU0KLSNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9MT0NLCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fQUREUgkweGZkZDAwMDAwCS8qIEluaXRpYWwgTDEgYWRkcmVzcyAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX0FERFJfUEhZU19ISUdICTB4ZgotI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX0FERFJfUEhZU19MT1cJMHhmZTBlYzAwMAotLyogVGhlIGFzc2VtYmxlciBkb2Vzbid0IGxpa2UgdHlwZWNhc3QgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9BRERSX1BIWVMgXAotCSgoQ09ORklHX1NZU19JTklUX1JBTV9BRERSX1BIWVNfSElHSCAqIDF1bGwgPDwgMzIpIHwgXAotCSAgQ09ORklHX1NZU19JTklUX1JBTV9BRERSX1BIWVNfTE9XKQotI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUJCTB4MDAwMDQwMDAKLQotI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAkoQ09ORklHX1NZU19JTklUX1JBTV9TSVpFIC0gXAotCQkJCQlHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKLSNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX09GRlNFVAlDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAotCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSg1MTIgKiAxMDI0KQotI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCSg0ICogMTAyNCAqIDEwMjQpCi0KLS8qIFNlcmlhbCBQb3J0IC0gY29udHJvbGxlZCBvbiBib2FyZCB3aXRoIGp1bXBlciBKOAotICogb3BlbiAtIGluZGV4IDIKLSAqIHNob3J0ZWQgLSBpbmRleCAxCi0gKi8KLSNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVgJMQotI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTAKLSNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1NFUklBTAotI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfUkVHX1NJWkUJMQotI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ0xLCQkoZ2V0X2J1c19mcmVxKDApLzIpCi0KLSNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRQlcCi0JezMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDB9Ci0KLSNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NPTTEJKENPTkZJR19TWVNfQ0NTUkJBUisweDExQzUwMCkKLSNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NPTTIJKENPTkZJR19TWVNfQ0NTUkJBUisweDExQzYwMCkKLSNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NPTTMJKENPTkZJR19TWVNfQ0NTUkJBUisweDExRDUwMCkKLSNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NPTTQJKENPTkZJR19TWVNfQ0NTUkJBUisweDExRDYwMCkKLSNkZWZpbmUgQ09ORklHX1NFUklBTF9NVUxUSQkJLyogRW5hYmxlIGJvdGggc2VyaWFsIHBvcnRzICovCi0jZGVmaW5lIENPTkZJR19TWVNfQ09OU09MRV9JU19JTl9FTlYJLyogZGV0ZXJtaW5lIGZyb20gZW52aXJvbm1lbnQgKi8KLQotLyogVXNlIHRoZSBIVVNIIHBhcnNlciAqLwotI2RlZmluZSBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCi0jZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUX0hVU0hfUFMyICI+ICIKLQotLyogcGFzcyBvcGVuIGZpcm13YXJlIGZsYXQgdHJlZSAqLwotI2RlZmluZSBDT05GSUdfT0ZfTElCRkRUCi0jZGVmaW5lIENPTkZJR19PRl9CT0FSRF9TRVRVUAotI2RlZmluZSBDT05GSUdfT0ZfU1RET1VUX1ZJQV9BTElBUwotCi0vKiBuZXcgdUltYWdlIGZvcm1hdCBzdXBwb3J0ICovCi0jZGVmaW5lIENPTkZJR19GSVQKLSNkZWZpbmUgQ09ORklHX0ZJVF9WRVJCT1NFCS8qIGVuYWJsZSBmaXRfZm9ybWF0X3tlcnJvcix3YXJuaW5nfSgpICovCi0KLS8qIEkyQyAqLwotI2RlZmluZSBDT05GSUdfU1lTX0kyQwotI2RlZmluZSBDT05GSUdfU1lTX0kyQ19GU0wJCS8qIFVzZSBGU0wgY29tbW9uIEkyQyBkcml2ZXIgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GU0xfSTJDX1NQRUVECTQwMDAwMAkvKiBJMkMgc3BlZWQgaW4gSHogKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GU0xfSTJDX1NMQVZFCTB4N0YKLSNkZWZpbmUgQ09ORklHX1NZU19GU0xfSTJDMl9TUEVFRAk0MDAwMDAJLyogSTJDIHNwZWVkIGluIEh6ICovCi0jZGVmaW5lIENPTkZJR19TWVNfRlNMX0kyQzJfU0xBVkUJMHg3RgotI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9JMkNfT0ZGU0VUCTB4MTE4MDAwCi0jZGVmaW5lIENPTkZJR19TWVNfRlNMX0kyQzJfT0ZGU0VUCTB4MTE5MDAwCi0KLS8qIEkyQyBidXMgbXVsdGlwbGV4ZXIgKi8KLSNkZWZpbmUgSTJDX01VWF9QQ0FfQUREUiAgICAgICAgICAgICAgICAweDcwCi0jZGVmaW5lIEkyQ19NVVhfQ0hfREVGQVVMVCAgICAgIDB4OAotCi0KLS8qCi0gKiBlU1BJIC0gRW5oYW5jZWQgU1BJCi0gKi8KLSNkZWZpbmUgQ09ORklHX0ZTTF9FU1BJCi0jZGVmaW5lIENPTkZJR19TUElfRkxBU0gKLSNkZWZpbmUgQ09ORklHX1NQSV9GTEFTSF9TVE1JQ1JPCi0jZGVmaW5lIENPTkZJR19DTURfU0YKLSNkZWZpbmUgQ09ORklHX1NGX0RFRkFVTFRfU1BFRUQgICAgICAgICAxMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU0ZfREVGQVVMVF9NT0RFICAgICAgICAgIDAKLSNkZWZpbmUgQ09ORklHX0VOVl9TUElfQlVTICAgICAgICAgICAgICAwCi0jZGVmaW5lIENPTkZJR19FTlZfU1BJX0NTICAgICAgICAgICAgICAgMAotI2RlZmluZSBDT05GSUdfRU5WX1NQSV9NQVhfSFogICAgICAgICAgIDEwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19FTlZfU1BJX01PREUgICAgICAgICAgICAgMAotCi0vKgotICogR2VuZXJhbCBQQ0kKLSAqIE1lbW9yeSBzcGFjZSBpcyBtYXBwZWQgMS0xLCBidXQgSS9PIHNwYWNlIG11c3Qgc3RhcnQgZnJvbSAwLgotICovCi0KLSNpZmRlZiBDT05GSUdfUENJCi0vKiBjb250cm9sbGVyIDEsIGRpcmVjdCB0byB1bGksIHRndGlkIDMsIEJhc2UgYWRkcmVzcyAyMDAwMCAqLwotI2lmZGVmIENPTkZJR19QQ0lFMQotI2RlZmluZQlDT05GSUdfU1lTX1BDSUUxX01FTV9WSVJUCTB4ODAwMDAwMDAKLSNkZWZpbmUJQ09ORklHX1NZU19QQ0lFMV9NRU1fQlVTCTB4ZTAwMDAwMDAKLSNkZWZpbmUJQ09ORklHX1NZU19QQ0lFMV9NRU1fUEhZUwkweGMwMDAwMDAwMHVsbAotI2RlZmluZSBDT05GSUdfU1lTX1BDSUUxX01FTV9TSVpFCTB4MTAwMDAwMDAJLyogMjU2TSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BDSUUxX0lPX1ZJUlQJMHhmODAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX1BDSUUxX0lPX0JVUwkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX1BDSUUxX0lPX1BIWVMJMHhmZjgwMDAwMDB1bGwKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lFMV9JT19TSVpFCTB4MDAwMTAwMDAJLyogNjRrICovCi0jZW5kaWYKLQotLyogY29udHJvbGxlciAyLCBTbG90IDIsIHRndGlkIDIsIEJhc2UgYWRkcmVzcyAyMDEwMDAgKi8KLSNpZmRlZiBDT05GSUdfUENJRTIKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lFMl9NRU1fVklSVAkweDkwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfUENJRTJfTUVNX0JVUwkweGUwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfUENJRTJfTUVNX1BIWVMJMHhjMTAwMDAwMDB1bGwKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lFMl9NRU1fU0laRQkweDEwMDAwMDAwCS8qIDI1Nk0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lFMl9JT19WSVJUCTB4ZjgwMTAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lFMl9JT19CVVMJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lFMl9JT19QSFlTCTB4ZmY4MDEwMDAwdWxsCi0jZGVmaW5lIENPTkZJR19TWVNfUENJRTJfSU9fU0laRQkweDAwMDEwMDAwCS8qIDY0ayAqLwotI2VuZGlmCi0KLS8qIGNvbnRyb2xsZXIgMywgU2xvdCAxLCB0Z3RpZCAxLCBCYXNlIGFkZHJlc3MgMjAyMDAwICovCi0jaWZkZWYgQ09ORklHX1BDSUUzCi0jZGVmaW5lIENPTkZJR19TWVNfUENJRTNfTUVNX1ZJUlQJMHhhMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX1BDSUUzX01FTV9CVVMJMHhlMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX1BDSUUzX01FTV9QSFlTCTB4YzIwMDAwMDAwdWxsCi0jZGVmaW5lIENPTkZJR19TWVNfUENJRTNfTUVNX1NJWkUJMHgxMDAwMDAwMAkvKiAyNTZNICovCi0jZGVmaW5lIENPTkZJR19TWVNfUENJRTNfSU9fVklSVAkweGY4MDIwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfUENJRTNfSU9fQlVTCQkweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfUENJRTNfSU9fUEhZUwkweGZmODAyMDAwMHVsbAotI2RlZmluZSBDT05GSUdfU1lTX1BDSUUzX0lPX1NJWkUJMHgwMDAxMDAwMAkvKiA2NGsgKi8KLSNlbmRpZgotCi0vKiBjb250cm9sbGVyIDQsIEJhc2UgYWRkcmVzcyAyMDMwMDAgKi8KLSNpZmRlZiBDT05GSUdfUENJRTQKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lFNF9NRU1fVklSVAkweGIwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfUENJRTRfTUVNX0JVUwkweGUwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfUENJRTRfTUVNX1BIWVMJMHhjMzAwMDAwMDB1bGwKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lFNF9NRU1fU0laRQkweDEwMDAwMDAwCS8qIDI1Nk0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lFNF9JT19WSVJUCTB4ZjgwMzAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lFNF9JT19CVVMJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19QQ0lFNF9JT19QSFlTCTB4ZmY4MDMwMDAwdWxsCi0jZGVmaW5lIENPTkZJR19TWVNfUENJRTRfSU9fU0laRQkweDAwMDEwMDAwCS8qIDY0ayAqLwotI2VuZGlmCi0KLSNkZWZpbmUgQ09ORklHX1BDSV9QTlAJCQkvKiBkbyBwY2kgcGx1Zy1hbmQtcGxheSAqLwotI2RlZmluZSBDT05GSUdfRTEwMDAKLQotI2RlZmluZSBDT05GSUdfUENJX1NDQU5fU0hPVwkJLyogc2hvdyBwY2kgZGV2aWNlcyBvbiBzdGFydHVwICovCi0jZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCi0jZW5kaWYJLyogQ09ORklHX1BDSSAqLwotCi0vKiBTQVRBICovCi0jZGVmaW5lIENPTkZJR19GU0xfU0FUQV9WMgotI2lmZGVmIENPTkZJR19GU0xfU0FUQV9WMgotI2RlZmluZSBDT05GSUdfTElCQVRBCi0jZGVmaW5lIENPTkZJR19GU0xfU0FUQQotCi0jZGVmaW5lIENPTkZJR19TWVNfU0FUQV9NQVhfREVWSUNFCTEKLSNkZWZpbmUgQ09ORklHX1NBVEExCi0jZGVmaW5lIENPTkZJR19TWVNfU0FUQTEJCUNPTkZJR19TWVNfTVBDODV4eF9TQVRBMV9BRERSCi0jZGVmaW5lIENPTkZJR19TWVNfU0FUQTFfRkxBR1MJCUZMQUdTX0RNQQotCi0jZGVmaW5lIENPTkZJR19MQkE0OAotI2RlZmluZSBDT05GSUdfQ01EX1NBVEEKLSNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KLSNkZWZpbmUgQ09ORklHX0NNRF9FWFQyCi0jZW5kaWYKLQotLyoKLSogVVNCCi0qLwotI2RlZmluZSBDT05GSUdfSEFTX0ZTTF9EUl9VU0IKLQotI2lmZGVmIENPTkZJR19IQVNfRlNMX0RSX1VTQgotI2RlZmluZSBDT05GSUdfVVNCX0VIQ0kKLQotI2lmZGVmIENPTkZJR19VU0JfRUhDSQotI2RlZmluZSBDT05GSUdfQ01EX1VTQgotI2RlZmluZSBDT05GSUdfVVNCX1NUT1JBR0UKLSNkZWZpbmUgQ09ORklHX1VTQl9FSENJX0ZTTAotI2RlZmluZSBDT05GSUdfRUhDSV9IQ0RfSU5JVF9BRlRFUl9SRVNFVAotI2RlZmluZSBDT05GSUdfQ01EX0VYVDIKLSNlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgQ09ORklHX01NQwotCi0jaWZkZWYgQ09ORklHX01NQwotI2RlZmluZSBDT05GSUdfRlNMX0VTREhDCi0jZGVmaW5lIENPTkZJR19TWVNfRlNMX0VTREhDX0FERFIgICAgICAgQ09ORklHX1NZU19NUEM4NXh4X0VTREhDX0FERFIKLSNkZWZpbmUgQ09ORklHX0NNRF9NTUMKLSNkZWZpbmUgQ09ORklHX0dFTkVSSUNfTU1DCi0jZGVmaW5lIENPTkZJR19DTURfRVhUMgotI2RlZmluZSBDT05GSUdfQ01EX0ZBVAotI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgotI2VuZGlmCi0KLS8qIFFtYW4vQm1hbiAqLwotI2lmbmRlZiBDT05GSUdfTk9CUUZNQU4KLSNkZWZpbmUgQ09ORklHX1NZU19EUEFBX1FCTUFOCQkvKiBTdXBwb3J0IFEvQm1hbiAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JNQU5fTlVNX1BPUlRBTFMJMjUKLSNkZWZpbmUgQ09ORklHX1NZU19CTUFOX01FTV9CQVNFCTB4ZjQwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19CTUFOX01FTV9QSFlTCTB4ZmY0MDAwMDAwdWxsCi0jZGVmaW5lIENPTkZJR19TWVNfQk1BTl9NRU1fU0laRQkweDAyMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfUU1BTl9OVU1fUE9SVEFMUwkyNQotI2RlZmluZSBDT05GSUdfU1lTX1FNQU5fTUVNX0JBU0UJMHhmNjAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX1FNQU5fTUVNX1BIWVMJMHhmZjYwMDAwMDB1bGwKLSNkZWZpbmUgQ09ORklHX1NZU19RTUFOX01FTV9TSVpFCTB4MDIwMDAwMDAKLQotI2RlZmluZSBDT05GSUdfU1lTX0RQQUFfRk1BTgotI2RlZmluZSBDT05GSUdfU1lTX0RQQUFfUE1FCi0KLS8qIERlZmF1bHQgYWRkcmVzcyBvZiBtaWNyb2NvZGUgZm9yIHRoZSBMaW51eCBGbWFuIGRyaXZlciAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NQSUZMQVNIKQotLyoKLSAqIGVudiBpcyBzdG9yZWQgYXQgMHgxMDAwMDAsIHNlY3RvciBzaXplIGlzIDB4MTAwMDAsIHVjb2RlIGlzIHN0b3JlZCBhZnRlcgotICogZW52LCBzbyB3ZSBnb3QgMHgxMTAwMDAuCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GV19JTl9TUElGTEFTSAotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUgkweDExMDAwMAotI2VsaWYgZGVmaW5lZChDT05GSUdfU0RDQVJEKQotLyoKLSAqIFBCTCBTRCBib290IGltYWdlIHNob3VsZCBzdG9yZWQgYXQgMHgxMDAwKDggYmxvY2tzKSwgdGhlIHNpemUgb2YgdGhlIGltYWdlIGlzCi0gKiBhYm91dCA4MjVLQiAoMTY1MCBibG9ja3MpLCBFbnYgaXMgc3RvcmVkIGFmdGVyIHRoZSBpbWFnZSwgYW5kIHRoZSBlbnYgc2l6ZSBpcwotICogMHgyMDAwICgxNiBibG9ja3MpLCA4ICsgMTY1MCArIDE2ID0gMTY3NCwgZW5sYXJnZSBpdCB0byAxNjgwLgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9NTUMKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJKDUxMiAqIDE2ODApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19OQU5EKQotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTkFORAotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUgkoNCAqIENPTkZJR19TWVNfTkFORF9CTE9DS19TSVpFKQotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0lOX05PUgotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUgkJMHhFRkYwMDAwMAotI2VuZGlmCi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19MRU5HVEgJMHgxMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0ZEVF9QQUQJCSgweDMwMDAgKyBDT05GSUdfU1lTX1FFX0ZNQU5fRldfTEVOR1RIKQotI2VuZGlmIC8qIENPTkZJR19OT0JRRk1BTiAqLwotCi0jaWZkZWYgQ09ORklHX1NZU19EUEFBX0ZNQU4KLSNkZWZpbmUgQ09ORklHX0ZNQU5fRU5FVAotI2RlZmluZSBDT05GSUdfUEhZX1ZJVEVTU0UKLSNkZWZpbmUgQ09ORklHX1BIWV9SRUFMVEVLCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19GTUFOX0VORVQKLSNkZWZpbmUgQ09ORklHX1NZU19TR01JSTFfUEhZX0FERFIJCTB4MDMKLSNkZWZpbmUgQ09ORklHX1NZU19SR01JSTFfUEhZX0FERFIJCTB4MDEKLSNkZWZpbmUgQ09ORklHX1NZU19SR01JSTJfUEhZX0FERFIJCTB4MDIKLQotI2RlZmluZSBDT05GSUdfTUlJCQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQgKi8KLSNkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkiRk0xQERUU0VDNCIKLSNkZWZpbmUgQ09ORklHX1BIWV9HSUdFCQkvKiBJbmNsdWRlIEdiRSBzcGVlZC9kdXBsZXggZGV0ZWN0aW9uICovCi0jZW5kaWYKLQotLyoKLSAqIEVudmlyb25tZW50Ci0gKi8KLSNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JCS8qIGVjaG8gb24gZm9yIHNlcmlhbCBkb3dubG9hZCAqLwotI2RlZmluZSBDT05GSUdfU1lTX0xPQURTX0JBVURfQ0hBTkdFCS8qIGFsbG93IGJhdWRyYXRlIGNoYW5nZSAqLwotCi0vKgotICogQ29tbWFuZCBsaW5lIGNvbmZpZ3VyYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KLQotI2RlZmluZSBDT05GSUdfQ01EX0RIQ1AKLSNkZWZpbmUgQ09ORklHX0NNRF9FTEYKLSNkZWZpbmUgQ09ORklHX0NNRF9FUlJBVEEKLSNkZWZpbmUgQ09ORklHX0NNRF9HUkVQRU5WCi0jZGVmaW5lIENPTkZJR19DTURfSVJRCi0jZGVmaW5lIENPTkZJR19DTURfSTJDCi0jZGVmaW5lIENPTkZJR19DTURfTUlJCi0jZGVmaW5lIENPTkZJR19DTURfUElORwotI2RlZmluZSBDT05GSUdfQ01EX1JFR0lORk8KLSNkZWZpbmUgQ09ORklHX0NNRF9TRVRFWFBSCi0KLSNpZmRlZiBDT05GSUdfUENJCi0jZGVmaW5lIENPTkZJR19DTURfUENJCi0jZGVmaW5lIENPTkZJR19DTURfTkVUCi0jZW5kaWYKLQotLyoKLSAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJKi8KLSNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkJCS8qIENvbW1hbmQtbGluZSBlZGl0aW5nICovCi0jZGVmaW5lIENPTkZJR19BVVRPX0NPTVBMRVRFCQkJLyogYWRkIGF1dG9jb21wbGV0aW9uIHN1cHBvcnQgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIJMHgyMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCi0jZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUCSI9PiAiCQkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCi0jaWZkZWYgQ09ORklHX0NNRF9LR0RCCi0jZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCTEwMjQJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCi0jZWxzZQotI2RlZmluZSBDT05GSUdfU1lTX0NCU0laRQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCi0jZW5kaWYKLSNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUgKENPTkZJR19TWVNfQ0JTSVpFK3NpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQlDT05GSUdfU1lTX0NCU0laRS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUgKi8KLQotLyoKLSAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKLSAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDY0IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcwotICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfQk9PVE1BUFNaCSg2NCA8PCAyMCkJLyogSW5pdGlhbCBtYXAgZm9yIExpbnV4Ki8KLSNkZWZpbmUgQ09ORklHX1NZU19CT09UTV9MRU4JKDY0IDw8IDIwKQkvKiBJbmNyZWFzZSBtYXggZ3VuemlwIHNpemUgKi8KLQotI2lmZGVmIENPTkZJR19DTURfS0dEQgotI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURQkyMzA0MDAJLyogc3BlZWQgdG8gcnVuIGtnZGIgc2VyaWFsIHBvcnQgKi8KLSNlbmRpZgotCi0vKgotICogRW52aXJvbm1lbnQgQ29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19ST09UUEFUSAkJIi9vcHQvbmZzcm9vdCIKLSNkZWZpbmUgQ09ORklHX0JPT1RGSUxFCQkidUltYWdlIgotI2RlZmluZSBDT05GSUdfVUJPT1RQQVRICSJ1LWJvb3QuYmluIgkvKiBVLUJvb3QgaW1hZ2Ugb24gVEZUUCBzZXJ2ZXIqLwotCi0vKiBkZWZhdWx0IGxvY2F0aW9uIGZvciB0ZnRwIGFuZCBib290bSAqLwotI2RlZmluZSBDT05GSUdfTE9BREFERFIJCTEwMDAwMDAKLQotI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTEwCS8qLTEgZGlzYWJsZXMgYXV0by1ib290Ki8KLQotI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJMTE1MjAwCi0KLSNkZWZpbmUgX19VU0JfUEhZX1RZUEUJdXRtaQotCi0jZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJXAotCSJod2NvbmZpZz1mc2xfZGRyOmJhbmtfaW50bHY9Y3MwX2NzMTsiCQkJXAotCSJ1c2IxOmRyX21vZGU9aG9zdCxwaHlfdHlwZT0iIF9fc3RyaW5naWZ5KF9fVVNCX1BIWV9UWVBFKSAiOyJcCi0JInVzYjI6ZHJfbW9kZT1ob3N0LHBoeV90eXBlPSIgX19zdHJpbmdpZnkoX19VU0JfUEhZX1RZUEUpICJcMCJcCi0JIm5ldGRldj1ldGgwXDAiCQkJCQkJXAotCSJ1Ym9vdD0iIF9fc3RyaW5naWZ5KENPTkZJR19VQk9PVFBBVEgpICJcMCIJCVwKLQkidWJvb3RhZGRyPSIgX19zdHJpbmdpZnkoQ09ORklHX1NZU19URVhUX0JBU0UpICJcMCIJXAotCSJ0ZnRwZmxhc2g9dGZ0cGJvb3QgJGxvYWRhZGRyICR1Ym9vdCAmJiAiCQlcCi0JInByb3RlY3Qgb2ZmICR1Ym9vdGFkZHIgKyRmaWxlc2l6ZSAmJiAiCQkJXAotCSJlcmFzZSAkdWJvb3RhZGRyICskZmlsZXNpemUgJiYgIgkJCVwKLQkiY3AuYiAkbG9hZGFkZHIgJHVib290YWRkciAkZmlsZXNpemUgJiYgIgkJXAotCSJwcm90ZWN0IG9uICR1Ym9vdGFkZHIgKyRmaWxlc2l6ZSAmJiAiCQkJXAotCSJjbXAuYiAkbG9hZGFkZHIgJHVib290YWRkciAkZmlsZXNpemVcMCIJCVwKLQkiY29uc29sZWRldj10dHlTMFwwIgkJCQkJXAotCSJyYW1kaXNrYWRkcj0yMDAwMDAwXDAiCQkJCQlcCi0JInJhbWRpc2tmaWxlPXQxMDQwcmRiL3JhbWRpc2sudWJvb3RcMCIJCQlcCi0JImZkdGFkZHI9YzAwMDAwXDAiCQkJCQlcCi0JImZkdGZpbGU9dDEwNDByZGIvdDEwNDByZGIuZHRiXDAiCQkJXAotCSJiZGV2PXNkYTNcMCIJCQkJCQlcCi0JImM9ZmZlXDAiCi0KLSNkZWZpbmUgQ09ORklHX0xJTlVYICAgICAgICAgICAgICAgICAgICAgICBcCi0JInNldGVudiBib290YXJncyByb290PS9kZXYvcmFtIHJ3ICIgICAgICAgICAgICBcCi0JImNvbnNvbGU9JGNvbnNvbGVkZXYsJGJhdWRyYXRlICRvdGhib290YXJnczsiICBcCi0JInNldGVudiByYW1kaXNrYWRkciAweDAyMDAwMDAwOyIgICAgICAgICAgICAgICBcCi0JInNldGVudiBmZHRhZGRyIDB4MDBjMDAwMDA7IgkJICAgICAgIFwKLQkic2V0ZW52IGxvYWRhZGRyIDB4MTAwMDAwMDsiCQkgICAgICAgXAotCSJib290bSAkbG9hZGFkZHIgJHJhbWRpc2thZGRyICRmZHRhZGRyIgotCi0jZGVmaW5lIENPTkZJR19IREJPT1QJCQkJCVwKLQkic2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi8kYmRldiBydyAiCQlcCi0JImNvbnNvbGU9JGNvbnNvbGVkZXYsJGJhdWRyYXRlICRvdGhib290YXJnczsiCVwKLQkidGZ0cCAkbG9hZGFkZHIgJGJvb3RmaWxlOyIJCQlcCi0JInRmdHAgJGZkdGFkZHIgJGZkdGZpbGU7IgkJCVwKLQkiYm9vdG0gJGxvYWRhZGRyIC0gJGZkdGFkZHIiCi0KLSNkZWZpbmUgQ09ORklHX05GU0JPT1RDT01NQU5ECQkJXAotCSJzZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiCVwKLQkibmZzcm9vdD0kc2VydmVyaXA6JHJvb3RwYXRoICIJCVwKLQkiaXA9JGlwYWRkcjokc2VydmVyaXA6JGdhdGV3YXlpcDokbmV0bWFzazokaG9zdG5hbWU6JG5ldGRldjpvZmYgIiBcCi0JImNvbnNvbGU9JGNvbnNvbGVkZXYsJGJhdWRyYXRlICRvdGhib290YXJnczsiCVwKLQkidGZ0cCAkbG9hZGFkZHIgJGJvb3RmaWxlOyIJCVwKLQkidGZ0cCAkZmR0YWRkciAkZmR0ZmlsZTsiCQlcCi0JImJvb3RtICRsb2FkYWRkciAtICRmZHRhZGRyIgotCi0jZGVmaW5lIENPTkZJR19SQU1CT09UQ09NTUFORAkJCQlcCi0JInNldGVudiBib290YXJncyByb290PS9kZXYvcmFtIHJ3ICIJCVwKLQkiY29uc29sZT0kY29uc29sZWRldiwkYmF1ZHJhdGUgJG90aGJvb3RhcmdzOyIJXAotCSJ0ZnRwICRyYW1kaXNrYWRkciAkcmFtZGlza2ZpbGU7IgkJXAotCSJ0ZnRwICRsb2FkYWRkciAkYm9vdGZpbGU7IgkJCVwKLQkidGZ0cCAkZmR0YWRkciAkZmR0ZmlsZTsiCQkJXAotCSJib290bSAkbG9hZGFkZHIgJHJhbWRpc2thZGRyICRmZHRhZGRyIgotCi0jZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkJQ09ORklHX0xJTlVYCi0KLSNpZmRlZiBDT05GSUdfU0VDVVJFX0JPT1QKLSNpbmNsdWRlIDxhc20vZnNsX3NlY3VyZV9ib290Lmg+Ci0jZW5kaWYKLQotI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9UMTA0MlJEQl9QSS5oIGIvaW5jbHVkZS9jb25maWdzL1QxMDR4UkRCLmgKc2ltaWxhcml0eSBpbmRleCA3OCUKcmVuYW1lIGZyb20gaW5jbHVkZS9jb25maWdzL1QxMDQyUkRCX1BJLmgKcmVuYW1lIHRvIGluY2x1ZGUvY29uZmlncy9UMTA0eFJEQi5oCmluZGV4IDY4NjU2ZTYuLjgxYjRmMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9UMTA0MlJEQl9QSS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UMTA0eFJEQi5oCkBAIC0xLDQwICsxLDk0IEBACiAvKgotICogQ29weXJpZ2h0IDIwMTMgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCisrICogQ29weXJpZ2h0IDIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKysgKgorKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAgICAgR1BMLTIuMCsKKysgKi8KIAogI2lmbmRlZiBfX0NPTkZJR19ICiAjZGVmaW5lIF9fQ09ORklHX0gKIAogLyoKLSAqIFQxMDQyUkRCX1BJIGJvYXJkIGNvbmZpZ3VyYXRpb24gZmlsZQorICogVDEwNHggUkRCIGJvYXJkIGNvbmZpZ3VyYXRpb24gZmlsZQogICovCiAjZGVmaW5lIENPTkZJR19UMTA0eFJEQgotI2RlZmluZSBDT05GSUdfVDEwNDJSREJfUEkKICNkZWZpbmUgQ09ORklHX1BIWVNfNjRCSVQKIAogI2lmZGVmIENPTkZJR19SQU1CT09UX1BCTAotI2RlZmluZSBDT05GSUdfUkFNQk9PVF9URVhUX0JBU0UJQ09ORklHX1NZU19URVhUX0JBU0UKLSNkZWZpbmUgQ09ORklHX1JFU0VUX1ZFQ1RPUl9BRERSRVNTCTB4ZmZmZmZmZmMKKyNkZWZpbmUgQ09ORklHX1NZU19GU0xfUEJMX1BCSSAkKFNSQ1RSRUUpL2JvYXJkL2ZyZWVzY2FsZS90MTA0eHJkYi90MTA0eF9wYmkuY2ZnCisjaWZkZWYgQ09ORklHX1QxMDQwUkRCCisjZGVmaW5lIENPTkZJR19TWVNfRlNMX1BCTF9SQ1cgJChTUkNUUkVFKS9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvdDEwNDBfcmN3LmNmZworI2VuZGlmCisjaWZkZWYgQ09ORklHX1QxMDQyUkRCX1BJCisjZGVmaW5lIENPTkZJR19TWVNfRlNMX1BCTF9SQ1cgJChTUkNUUkVFKS9ib2FyZC9mcmVlc2NhbGUvdDEwNHhyZGIvdDEwNDJfcmN3LmNmZworI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX1NQTAorI2RlZmluZSBDT05GSUdfU1BMX01QQzhYWFhfSU5JVF9ERFJfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0VOVl9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfU0VSSUFMX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9GTFVTSF9JTUFHRQorI2RlZmluZSBDT05GSUdfU1BMX1RBUkdFVAkJInUtYm9vdC13aXRoLXNwbC5iaW4iCisjZGVmaW5lIENPTkZJR19TUExfTElCR0VORVJJQ19TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfTElCQ09NTU9OX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9JMkNfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0RSSVZFUlNfTUlTQ19TVVBQT1JUCisjZGVmaW5lIENPTkZJR19GU0xfTEFXICAgICAgICAgICAgICAgICAvKiBVc2UgY29tbW9uIEZTTCBpbml0IGNvZGUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19URVhUX0JBU0UJCTB4MDAyMDEwMDAKKyNkZWZpbmUgQ09ORklHX1NQTF9URVhUX0JBU0UJCTB4RkZGRDgwMDAKKyNkZWZpbmUgQ09ORklHX1NQTF9QQURfVE8JCTB4NDAwMDAKKyNkZWZpbmUgQ09ORklHX1NQTF9NQVhfU0laRQkJMHgyODAwMAorI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKyNkZWZpbmUgQ09ORklHX1NQTF9TS0lQX1JFTE9DQVRFCisjZGVmaW5lIENPTkZJR19TUExfQ09NTU9OX0lOSVRfRERSCisjZGVmaW5lIENPTkZJR19TWVNfQ0NTUl9ET19OT1RfUkVMT0NBVEUKKyNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAorI2VuZGlmCisjZGVmaW5lIFJFU0VUX1ZFQ1RPUl9PRkZTRVQJCTB4MjdGRkMKKyNkZWZpbmUgQk9PVF9QQUdFX09GRlNFVAkJMHgyNzAwMAorCisjaWZkZWYgQ09ORklHX05BTkQKKyNkZWZpbmUgQ09ORklHX1NQTF9OQU5EX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1VfQk9PVF9TSVpFCSg3NjggPDwgMTApCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9VX0JPT1RfRFNUCTB4MDAyMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1VfQk9PVF9TVEFSVAkweDAwMjAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9VX0JPT1RfT0ZGUwkoMjU2IDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1lTX0xEU0NSSVBUCSJhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzIgorI2RlZmluZSBDT05GSUdfU1BMX05BTkRfQk9PVAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1BJRkxBU0gKKyNkZWZpbmUJQ09ORklHX1JFU0VUX1ZFQ1RPUl9BRERSRVNTCQkweDIwMEZGQworI2RlZmluZSBDT05GSUdfU1BMX1NQSV9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfU1BJX0ZMQVNIX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9TUElfRkxBU0hfTUlOSU1BTAorI2RlZmluZSBDT05GSUdfU1lTX1NQSV9GTEFTSF9VX0JPT1RfU0laRQkoNzY4IDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1lTX1NQSV9GTEFTSF9VX0JPT1RfRFNUCQkoMHgwMDIwMDAwMCkKKyNkZWZpbmUgQ09ORklHX1NZU19TUElfRkxBU0hfVV9CT09UX1NUQVJUCSgweDAwMjAwMDAwKQorI2RlZmluZSBDT05GSUdfU1lTX1NQSV9GTEFTSF9VX0JPT1RfT0ZGUwkoMjU2IDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1lTX0xEU0NSSVBUCSJhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcyIKKyNpZm5kZWYgQ09ORklHX1NQTF9CVUlMRAorI2RlZmluZQlDT05GSUdfU1lTX01QQzg1WFhfTk9fUkVTRVRWRUMKKyNlbmRpZgorI2RlZmluZSBDT05GSUdfU1BMX1NQSV9CT09UCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TRENBUkQKKyNkZWZpbmUJQ09ORklHX1JFU0VUX1ZFQ1RPUl9BRERSRVNTCQkweDIwMEZGQworI2RlZmluZSBDT05GSUdfU1BMX01NQ19TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfTU1DX01JTklNQUwKKyNkZWZpbmUgQ09ORklHX1NZU19NTUNfVV9CT09UX1NJWkUJKDc2OCA8PCAxMCkKKyNkZWZpbmUgQ09ORklHX1NZU19NTUNfVV9CT09UX0RTVAkoMHgwMDIwMDAwMCkKKyNkZWZpbmUgQ09ORklHX1NZU19NTUNfVV9CT09UX1NUQVJUCSgweDAwMjAwMDAwKQorI2RlZmluZSBDT05GSUdfU1lTX01NQ19VX0JPT1RfT0ZGUwkoMjYwIDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1lTX0xEU0NSSVBUCSJhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcyIKKyNpZm5kZWYgQ09ORklHX1NQTF9CVUlMRAorI2RlZmluZQlDT05GSUdfU1lTX01QQzg1WFhfTk9fUkVTRVRWRUMKKyNlbmRpZgorI2RlZmluZSBDT05GSUdfU1BMX01NQ19CT09UCiAjZW5kaWYKIAorI2VuZGlmCisKIC8qIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zICovCiAjZGVmaW5lIENPTkZJR19CT09LRQogI2RlZmluZSBDT05GSUdfRTUwMAkJCS8qIEJPT0tFIGU1MDAgZmFtaWx5ICovCkBAIC00Miw2ICs5NiwxMCBAQAogI2RlZmluZSBDT05GSUdfU1lTX0JPT0szRV9IVgkJLyogQ2F0ZWdvcnkgRS5IViBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgQ09ORklHX01QCQkJLyogc3VwcG9ydCBtdWx0aXBsZSBwcm9jZXNzb3JzICovCiAKKy8qIHN1cHBvcnQgZGVlcCBzbGVlcCAqLworI2RlZmluZSBDT05GSUdfREVFUF9TTEVFUAorI2RlZmluZSBDT05GSUdfU0lMRU5UX0NPTlNPTEUKKwogI2lmbmRlZiBDT05GSUdfU1lTX1RFWFRfQkFTRQogI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkweGVmZjQwMDAwCiAjZW5kaWYKQEAgLTY3LDE1ICsxMjUsMTIgQEAKIAogI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQogCi0jaWZkZWYgQ09ORklHX1NZU19OT19GTEFTSAotI2RlZmluZSBDT05GSUdfRU5WX0lTX05PV0hFUkUKLSNlbHNlCisjaWZuZGVmIENPTkZJR19TWVNfTk9fRkxBU0gKICNkZWZpbmUgQ09ORklHX0ZMQVNIX0NGSV9EUklWRVIKICNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9DRkkKICNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCiAjZW5kaWYKIAotI2lmbmRlZiBDT05GSUdfU1lTX05PX0ZMQVNICiAjaWYgZGVmaW5lZChDT05GSUdfU1BJRkxBU0gpCiAjZGVmaW5lIENPTkZJR19TWVNfRVhUUkFfRU5WX1JFTE9DCiAjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fU1BJX0ZMQVNICkBAIC04NywxMSArMTQyLDExIEBACiAjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fTU1DCiAjZGVmaW5lIENPTkZJR19TWVNfTU1DX0VOVl9ERVYgICAgICAgICAgMAogI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCQkweDIwMDAKLSNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCSg1MTIgKiAxNjU4KQorI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJKDUxMiAqIDB4ODAwKQogI2VsaWYgZGVmaW5lZChDT05GSUdfTkFORCkKICNkZWZpbmUgQ09ORklHX1NZU19FWFRSQV9FTlZfUkVMT0MKICNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9OQU5ECi0jZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCUNPTkZJR19TWVNfTkFORF9CTE9DS19TSVpFCisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCTB4MjAwMAogI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJKDMgKiBDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRSkKICNlbHNlCiAjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fRkxBU0gKQEAgLTk5LDEwICsxNTQsNiBAQAogI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCTB4MjAwMAogI2RlZmluZSBDT05GSUdfRU5WX1NFQ1RfU0laRQkweDIwMDAwIC8qIDEyOEsgKG9uZSBzZWN0b3IpICovCiAjZW5kaWYKLSNlbHNlIC8qIENPTkZJR19TWVNfTk9fRkxBU0ggKi8KLSNkZWZpbmUgQ09ORklHX0VOVl9TSVpFICAgICAgICAgICAgICAgIDB4MjAwMAotI2RlZmluZSBDT05GSUdfRU5WX1NFQ1RfU0laRSAgIDB4MjAwMDAgLyogMTI4SyAob25lIHNlY3RvcikgKi8KLSNlbmRpZgogCiAjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJMTAwMDAwMDAwCiAjZGVmaW5lIENPTkZJR19ERFJfQ0xLX0ZSRVEJNjY2NjY2NjYKQEAgLTEzNCw2ICsxODUsMTUgQEAKICAqICBDb25maWcgdGhlIEwzIENhY2hlIGFzIEwzIFNSQU0KICAqLwogI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfTDNfQUREUgkJMHhGRkZDMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0wzX1NJWkUJCTI1NiA8PCAxMAorI2RlZmluZSBDT05GSUdfU1BMX0dEX0FERFIJCShDT05GSUdfU1lTX0lOSVRfTDNfQUREUiArIDMyICogMTAyNCkKKyNpZmRlZiBDT05GSUdfUkFNQk9PVF9QQkwKKyNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkJKENPTkZJR19TUExfR0RfQUREUiArIDQgKiAxMDI0KQorI2VuZGlmCisjZGVmaW5lIENPTkZJR19TUExfUkVMT0NfTUFMTE9DX0FERFIJKENPTkZJR19TUExfR0RfQUREUiArIDEyICogMTAyNCkKKyNkZWZpbmUgQ09ORklHX1NQTF9SRUxPQ19NQUxMT0NfU0laRQkoMzAgPDwgMTApCisjZGVmaW5lIENPTkZJR19TUExfUkVMT0NfU1RBQ0sJCShDT05GSUdfU1BMX0dEX0FERFIgKyA2NCAqIDEwMjQpCisjZGVmaW5lIENPTkZJR19TUExfUkVMT0NfU1RBQ0tfU0laRQkoMjIgPDwgMTApCiAKICNkZWZpbmUgQ09ORklHX1NZU19EQ1NSQkFSCQkweGYwMDAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfRENTUkJBUl9QSFlTCQkweGYwMDAwMDAwMHVsbApAQCAtMTk2LDYgKzI1NiwxNCBAQAogI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBTktTX0xJU1QJe0NPTkZJR19TWVNfRkxBU0hfQkFTRV9QSFlTfQogCiAvKiBDUExEIG9uIElGQyAqLworI2RlZmluZSBDUExEX0xCTUFQX01BU0sJCQkweDNGCisjZGVmaW5lIENQTERfQkFOS19TRUxfTUFTSwkJMHgwNworI2RlZmluZSBDUExEX0JBTktfT1ZFUlJJREUJCTB4NDAKKyNkZWZpbmUgQ1BMRF9MQk1BUF9BTFRCQU5LCQkweDQ0IC8qIEJBTksgT1IgfCBCQU5LIDQgKi8KKyNkZWZpbmUgQ1BMRF9MQk1BUF9ERkxUQkFOSwkJMHg0MCAvKiBCQU5LIE9SIHwgQkFOSzAgKi8KKyNkZWZpbmUgQ1BMRF9MQk1BUF9SRVNFVAkJMHhGRgorI2RlZmluZSBDUExEX0xCTUFQX1NISUZUCQkweDAzCisKICNkZWZpbmUgQ09ORklHX1NZU19DUExEX0JBU0UJMHhmZmRmMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0NQTERfQkFTRV9QSFlTCSgweGYwMDAwMDAwMHVsbCB8IENPTkZJR19TWVNfQ1BMRF9CQVNFKQogI2RlZmluZSBDT05GSUdfU1lTX0NTUFIyX0VYVAkoMHhmKQpAQCAtMjk2LDcgKzM2NCwxMSBAQAogI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMwkJQ09ORklHX1NZU19OQU5EX0ZUSU0zCiAjZW5kaWYKIAotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQkJQ09ORklHX1NZU19URVhUX0JBU0UKKyNpZmRlZiBDT05GSUdfU1BMX0JVSUxECisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFCUNPTkZJR19TUExfVEVYVF9CQVNFCisjZWxzZQorI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQlDT05GSUdfU1lTX1RFWFRfQkFTRQkvKiBzdGFydCBvZiBtb25pdG9yICovCisjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1JBTUJPT1RfUEJMKQogI2RlZmluZSBDT05GSUdfU1lTX1JBTUJPT1QKQEAgLTMyMyw3ICszOTUsNyBAQAogCQkJCQlHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKICNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX09GRlNFVAlDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAogCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSg1MTIgKiAxMDI0KQorI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoNzY4ICogMTAyNCkKICNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoNCAqIDEwMjQgKiAxMDI0KQogCiAvKiBTZXJpYWwgUG9ydCAtIGNvbnRyb2xsZWQgb24gYm9hcmQgd2l0aCBqdW1wZXIgSjgKQEAgLTM0NCw3ICs0MTYsOSBAQAogI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ09NMwkoQ09ORklHX1NZU19DQ1NSQkFSKzB4MTFENTAwKQogI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ09NNAkoQ09ORklHX1NZU19DQ1NSQkFSKzB4MTFENjAwKQogI2RlZmluZSBDT05GSUdfU0VSSUFMX01VTFRJCQkvKiBFbmFibGUgYm90aCBzZXJpYWwgcG9ydHMgKi8KKyNpZm5kZWYgQ09ORklHX1NQTF9CVUlMRAogI2RlZmluZSBDT05GSUdfU1lTX0NPTlNPTEVfSVNfSU5fRU5WCS8qIGRldGVybWluZSBmcm9tIGVudmlyb25tZW50ICovCisjZW5kaWYKIAogLyogVXNlIHRoZSBIVVNIIHBhcnNlciAqLwogI2RlZmluZSBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCkBAIC0zNzEsNyArNDQ1LDExIEBACiAKIC8qIEkyQyBidXMgbXVsdGlwbGV4ZXIgKi8KICNkZWZpbmUgSTJDX01VWF9QQ0FfQUREUiAgICAgICAgICAgICAgICAweDcwCisjaWZkZWYgQ09ORklHX1QxMDQwUkRCCisjZGVmaW5lIEkyQ19NVVhfQ0hfREVGQVVMVCAgICAgIDB4OAorI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVDEwNDJSREJfUEkKIC8qCiAgKiBSVEMgY29uZmlndXJhdGlvbgogICovCkBAIC0zODEsNiArNDU5LDcgQEAKIAogLypEVkkgZW5jb2RlciovCiAjZGVmaW5lIENPTkZJR19IRE1JX0VOQ09ERVJfSTJDX0FERFIgIDB4NzUKKyNlbmRpZgogCiAvKgogICogZVNQSSAtIEVuaGFuY2VkIFNQSQpAQCAtNTE4LDYgKzU5NywxMSBAQAogI2RlZmluZSBDT05GSUdfU1lTX0RQQUFfRk1BTgogI2RlZmluZSBDT05GSUdfU1lTX0RQQUFfUE1FCiAKKyNpZmRlZiBDT05GSUdfVDEwNDBSREIKKyNkZWZpbmUgQ09ORklHX1FFCisjZGVmaW5lIENPTkZJR19VX1FFCisjZW5kaWYKKwogLyogRGVmYXVsdCBhZGRyZXNzIG9mIG1pY3JvY29kZSBmb3IgdGhlIExpbnV4IEZtYW4gZHJpdmVyICovCiAjaWYgZGVmaW5lZChDT05GSUdfU1BJRkxBU0gpCiAvKgpAQCAtNTI1LDIyICs2MDksMzYgQEAKICAqIGVudiwgc28gd2UgZ290IDB4MTEwMDAwLgogICovCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRldfSU5fU1BJRkxBU0gKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJMHgxMTAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19GTUFOX0ZXX0FERFIJMHgxMTAwMDAKICNlbGlmIGRlZmluZWQoQ09ORklHX1NEQ0FSRCkKIC8qCiAgKiBQQkwgU0QgYm9vdCBpbWFnZSBzaG91bGQgc3RvcmVkIGF0IDB4MTAwMCg4IGJsb2NrcyksIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBpcwotICogYWJvdXQgODI1S0IgKDE2NTAgYmxvY2tzKSwgRW52IGlzIHN0b3JlZCBhZnRlciB0aGUgaW1hZ2UsIGFuZCB0aGUgZW52IHNpemUgaXMKLSAqIDB4MjAwMCAoMTYgYmxvY2tzKSwgOCArIDE2NTAgKyAxNiA9IDE2NzQsIGVubGFyZ2UgaXQgdG8gMTY4MC4KKyAqIGFib3V0IDFNQiAoMjA0OCBibG9ja3MpLCBFbnYgaXMgc3RvcmVkIGFmdGVyIHRoZSBpbWFnZSwgYW5kIHRoZSBlbnYgc2l6ZSBpcworICogMHgyMDAwICgxNiBibG9ja3MpLCA4ICsgMjA0OCArIDE2ID0gMjA3MiwgZW5sYXJnZSBpdCB0byAyMDgwLgogICovCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9NTUMKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJKDUxMiAqIDE2ODApCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCSg1MTIgKiAweDgyMCkKICNlbGlmIGRlZmluZWQoQ09ORklHX05BTkQpCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9OQU5ECi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCSg0ICogQ09ORklHX1NZU19OQU5EX0JMT0NLX1NJWkUpCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCSg1ICogQ09ORklHX1NZU19OQU5EX0JMT0NLX1NJWkUpCiAjZWxzZQogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTk9SCi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCQkweEVGRjAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCQkweEVGRjAwMDAwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19UMTA0MFJEQgorI2lmIGRlZmluZWQoQ09ORklHX1NQSUZMQVNIKQorI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZXX0FERFIJCTB4MTMwMDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19TRENBUkQpCisjZGVmaW5lIENPTkZJR19TWVNfUUVfRldfQUREUgkJKDUxMiAqIDB4OTIwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTkFORCkKKyNkZWZpbmUgQ09ORklHX1NZU19RRV9GV19BRERSCQkoNyAqIENPTkZJR19TWVNfTkFORF9CTE9DS19TSVpFKQorI2Vsc2UKKyNkZWZpbmUgQ09ORklHX1NZU19RRV9GV19BRERSCQkweEVGRjEwMDAwCiAjZW5kaWYKKyNlbmRpZgorCisKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0xFTkdUSAkweDEwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfRkRUX1BBRAkJKDB4MzAwMCArIENPTkZJR19TWVNfUUVfRk1BTl9GV19MRU5HVEgpCiAjZW5kaWYgLyogQ09ORklHX05PQlFGTUFOICovCkBAIC01NTIsNiArNjUwLDkgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0ZNQU5fRU5FVAorI2lmZGVmIENPTkZJR19UMTA0MFJEQgorI2RlZmluZSBDT05GSUdfU1lTX1NHTUlJMV9QSFlfQUREUgkJMHgwMworI2VuZGlmCiAjZGVmaW5lIENPTkZJR19TWVNfUkdNSUkxX1BIWV9BRERSCQkweDAxCiAjZGVmaW5lIENPTkZJR19TWVNfUkdNSUkyX1BIWV9BRERSCQkweDAyCiAKQEAgLTU3MSw3ICs2NzIsOSBAQAogICovCiAjaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+CiAKKyNpZmRlZiBDT05GSUdfVDEwNDJSREJfUEkKICNkZWZpbmUgQ09ORklHX0NNRF9EQVRFCisjZW5kaWYKICNkZWZpbmUgQ09ORklHX0NNRF9ESENQCiAjZGVmaW5lIENPTkZJR19DTURfRUxGCiAjZGVmaW5lIENPTkZJR19DTURfRVJSQVRBCkBAIC02MTgsNiArNzIxLDIzIEBACiAjZW5kaWYKIAogLyoKKyAqIER5bmFtaWMgTVREIFBhcnRpdGlvbiBzdXBwb3J0IHdpdGggbXRkcGFydHMKKyAqLworI2lmbmRlZiBDT05GSUdfU1lTX05PX0ZMQVNICisjZGVmaW5lIENPTkZJR19NVERfREVWSUNFCisjZGVmaW5lIENPTkZJR19NVERfUEFSVElUSU9OUworI2RlZmluZSBDT05GSUdfQ01EX01URFBBUlRTCisjZGVmaW5lIENPTkZJR19GTEFTSF9DRklfTVRECisjZGVmaW5lIE1URElEU19ERUZBVUxUICJub3IwPWZlODAwMDAwMC5ub3IsbmFuZDA9ZmZmODAwMDAwLmZsYXNoLCIgXAorCQkJInNwaTA9c3BpZmUxMTAwMDAuMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9ZmU4MDAwMDAwLm5vcjoxbSh1Ym9vdCksNW0oa2VybmVsKSwiIFwKKwkJCQkiMTI4ayhkdGIpLDk2bShmcyksLSh1c2VyKTsiXAorCQkJCSJmZmY4MDAwMDAuZmxhc2g6Mm0odWJvb3QpLDltKGtlcm5lbCksIlwKKwkJCQkiMTI4ayhkdGIpLDk2bShmcyksLSh1c2VyKTtzcGlmZTExMDAwMC4wOiIgXAorCQkJCSIybSh1Ym9vdCksOW0oa2VybmVsKSwxMjhrKGR0YiksLSh1c2VyKSIKKyNlbmRpZgorCisvKgogICogRW52aXJvbm1lbnQgQ29uZmlndXJhdGlvbgogICovCiAjZGVmaW5lIENPTkZJR19ST09UUEFUSAkJIi9vcHQvbmZzcm9vdCIKQEAgLTYzMyw2ICs3NTMsMTQgQEAKIAogI2RlZmluZSBfX1VTQl9QSFlfVFlQRQl1dG1pCiAKKyNpZmRlZiBDT05GSUdfVDEwNDBSREIKKyNkZWZpbmUgRkRURklMRQkJInQxMDQwcmRiL3QxMDQwcmRiLmR0YiIKKyNkZWZpbmUgUkFNRElTS0ZJTEUJInQxMDQwcmRiL3JhbWRpc2sudWJvb3QiCisjZWxpZiBDT05GSUdfVDEwNDJSREJfUEkKKyNkZWZpbmUgRkRURklMRQkJInQxMDQwcmRiX3BpL3QxMDQwcmRiX3BpLmR0YiIKKyNkZWZpbmUgUkFNRElTS0ZJTEUJInQxMDQwcmRiX3BpL3JhbWRpc2sudWJvb3QiCisjZW5kaWYKKwogI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCVwKIAkiaHdjb25maWc9ZnNsX2RkcjpiYW5rX2ludGx2PWNzMF9jczE7IgkJCVwKIAkidXNiMTpkcl9tb2RlPWhvc3QscGh5X3R5cGU9IiBfX3N0cmluZ2lmeShfX1VTQl9QSFlfVFlQRSkgIjsiXApAQCAtNjQ4LDkgKzc3Niw5IEBACiAJImNtcC5iICRsb2FkYWRkciAkdWJvb3RhZGRyICRmaWxlc2l6ZVwwIgkJXAogCSJjb25zb2xlZGV2PXR0eVMwXDAiCQkJCQlcCiAJInJhbWRpc2thZGRyPTIwMDAwMDBcMCIJCQkJCVwKLQkicmFtZGlza2ZpbGU9dDEwNDByZGJfcGkvcmFtZGlzay51Ym9vdFwwIgkJCVwKKwkicmFtZGlza2ZpbGU9IiBfX3N0cmluZ2lmeShSQU1ESVNLRklMRSkgIlwwIgkJXAogCSJmZHRhZGRyPWMwMDAwMFwwIgkJCQkJXAotCSJmZHRmaWxlPXQxMDQwcmRiX3BpL3QxMDQwcmRiX3BpLmR0YlwwIgkJCQlcCisJImZkdGZpbGU9IiBfX3N0cmluZ2lmeShGRFRGSUxFKSAiXDAiCQkJXAogCSJiZGV2PXNkYTNcMCIJCQkJCQlcCiAJImM9ZmZlXDAiCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9UMjA4eFFEUy5oIGIvaW5jbHVkZS9jb25maWdzL1QyMDh4UURTLmgKaW5kZXggMzk5ZGRiYi4uOGJmMDg0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1QyMDh4UURTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1QyMDh4UURTLmgKQEAgLTQ2LDE1ICs0Niw3OSBAQAogI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQogCiAjaWZkZWYgQ09ORklHX1JBTUJPT1RfUEJMCi0jZGVmaW5lIENPTkZJR19SQU1CT09UX1RFWFRfQkFTRQlDT05GSUdfU1lTX1RFWFRfQkFTRQotI2RlZmluZSBDT05GSUdfUkVTRVRfVkVDVE9SX0FERFJFU1MJMHhmZmZmZmZmYwogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9QQkxfUEJJIGJvYXJkL2ZyZWVzY2FsZS90MjA4eHFkcy90MjA4eF9wYmkuY2ZnCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDX1QyMDgwKQogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9QQkxfUkNXIGJvYXJkL2ZyZWVzY2FsZS90MjA4eHFkcy90MjA4MF9yY3cuY2ZnCiAjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfVDIwODEpCiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX1BCTF9SQ1cgYm9hcmQvZnJlZXNjYWxlL3QyMDh4cWRzL3QyMDgxX3Jjdy5jZmcKICNlbmRpZgorCisjZGVmaW5lIENPTkZJR19TUEwKKyNkZWZpbmUgQ09ORklHX1NQTF9NUEM4WFhYX0lOSVRfRERSX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9FTlZfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX1NFUklBTF9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfRkxVU0hfSU1BR0UKKyNkZWZpbmUgQ09ORklHX1NQTF9UQVJHRVQJCSJ1LWJvb3Qtd2l0aC1zcGwuYmluIgorI2RlZmluZSBDT05GSUdfU1BMX0xJQkdFTkVSSUNfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0xJQkNPTU1PTl9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfSTJDX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9EUklWRVJTX01JU0NfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfRlNMX0xBVwkJCS8qIFVzZSBjb21tb24gRlNMIGluaXQgY29kZSAqLworI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkJMHgwMDIwMTAwMAorI2RlZmluZSBDT05GSUdfU1BMX1RFWFRfQkFTRQkJMHhGRkZEODAwMAorI2RlZmluZSBDT05GSUdfU1BMX1BBRF9UTwkJMHg0MDAwMAorI2RlZmluZSBDT05GSUdfU1BMX01BWF9TSVpFCQkweDI4MDAwCisjZGVmaW5lIFJFU0VUX1ZFQ1RPUl9PRkZTRVQJCTB4MjdGRkMKKyNkZWZpbmUgQk9PVF9QQUdFX09GRlNFVAkJMHgyNzAwMAorI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKyNkZWZpbmUgQ09ORklHX1NQTF9TS0lQX1JFTE9DQVRFCisjZGVmaW5lIENPTkZJR19TUExfQ09NTU9OX0lOSVRfRERSCisjZGVmaW5lIENPTkZJR19TWVNfQ0NTUl9ET19OT1RfUkVMT0NBVEUKKyNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTkFORAorI2RlZmluZSBDT05GSUdfU1BMX05BTkRfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfVV9CT09UX1NJWkUJKDc2OCA8PCAxMCkKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1VfQk9PVF9EU1QJMHgwMDIwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfVV9CT09UX1NUQVJUCTB4MDAyMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1VfQk9PVF9PRkZTCSgyNTYgPDwgMTApCisjZGVmaW5lIENPTkZJR19TWVNfTERTQ1JJUFQJImFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMiCisjZGVmaW5lIENPTkZJR19TUExfTkFORF9CT09UCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TUElGTEFTSAorI2RlZmluZQlDT05GSUdfUkVTRVRfVkVDVE9SX0FERFJFU1MJCTB4MjAwRkZDCisjZGVmaW5lIENPTkZJR19TUExfU1BJX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9TUElfRkxBU0hfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX1NQSV9GTEFTSF9NSU5JTUFMCisjZGVmaW5lIENPTkZJR19TWVNfU1BJX0ZMQVNIX1VfQk9PVF9TSVpFCSg3NjggPDwgMTApCisjZGVmaW5lIENPTkZJR19TWVNfU1BJX0ZMQVNIX1VfQk9PVF9EU1QJCSgweDAwMjAwMDAwKQorI2RlZmluZSBDT05GSUdfU1lTX1NQSV9GTEFTSF9VX0JPT1RfU1RBUlQJKDB4MDAyMDAwMDApCisjZGVmaW5lIENPTkZJR19TWVNfU1BJX0ZMQVNIX1VfQk9PVF9PRkZTCSgyNTYgPDwgMTApCisjZGVmaW5lIENPTkZJR19TWVNfTERTQ1JJUFQJImFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzIgorI2lmbmRlZiBDT05GSUdfU1BMX0JVSUxECisjZGVmaW5lCUNPTkZJR19TWVNfTVBDODVYWF9OT19SRVNFVFZFQwogI2VuZGlmCisjZGVmaW5lIENPTkZJR19TUExfU1BJX0JPT1QKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NEQ0FSRAorI2RlZmluZQlDT05GSUdfUkVTRVRfVkVDVE9SX0FERFJFU1MJCTB4MjAwRkZDCisjZGVmaW5lIENPTkZJR19TUExfTU1DX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9NTUNfTUlOSU1BTAorI2RlZmluZSBDT05GSUdfU1lTX01NQ19VX0JPT1RfU0laRQkoNzY4IDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1lTX01NQ19VX0JPT1RfRFNUCSgweDAwMjAwMDAwKQorI2RlZmluZSBDT05GSUdfU1lTX01NQ19VX0JPT1RfU1RBUlQJKDB4MDAyMDAwMDApCisjZGVmaW5lIENPTkZJR19TWVNfTU1DX1VfQk9PVF9PRkZTCSgyNjAgPDwgMTApCisjZGVmaW5lIENPTkZJR19TWVNfTERTQ1JJUFQJImFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzIgorI2lmbmRlZiBDT05GSUdfU1BMX0JVSUxECisjZGVmaW5lCUNPTkZJR19TWVNfTVBDODVYWF9OT19SRVNFVFZFQworI2VuZGlmCisjZGVmaW5lIENPTkZJR19TUExfTU1DX0JPT1QKKyNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX1JBTUJPT1RfUEJMICovCiAKICNkZWZpbmUgQ09ORklHX1NSSU9fUENJRV9CT09UX01BU1RFUgogI2lmZGVmIENPTkZJR19TUklPX1BDSUVfQk9PVF9TTEFWRQpAQCAtODUsMTEgKzE0OSw3IEBACiAjZGVmaW5lIENPTkZJR19NRU1fSU5JVF9WQUxVRQkJMHhkZWFkYmVlZgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU1lTX05PX0ZMQVNICi0jaWYgIWRlZmluZWQoQ09ORklHX1NSSU9fUENJRV9CT09UX1NMQVZFKSAmJiAhZGVmaW5lZChDT05GSUdfUkFNQk9PVF9QQkwpCi0jZGVmaW5lIENPTkZJR19FTlZfSVNfTk9XSEVSRQotI2VuZGlmCi0jZWxzZQorI2lmbmRlZiBDT05GSUdfU1lTX05PX0ZMQVNICiAjZGVmaW5lIENPTkZJR19GTEFTSF9DRklfRFJJVkVSCiAjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQ0ZJCiAjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfVVNFX0JVRkZFUl9XUklURQpAQCAtMTEwLDEyICsxNzAsMTIgQEAKICNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9NTUMKICNkZWZpbmUgQ09ORklHX1NZU19NTUNfRU5WX0RFVgkwCiAjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJMHgyMDAwCi0jZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCSg1MTIgKiAxNjU4KQorI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkoNTEyICogMHg4MDApCiAjZWxpZiBkZWZpbmVkKENPTkZJR19OQU5EKQogI2RlZmluZSBDT05GSUdfU1lTX0VYVFJBX0VOVl9SRUxPQwogI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05BTkQKLSNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQlDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRQotI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkoNyAqIENPTkZJR19TWVNfTkFORF9CTE9DS19TSVpFKQorI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCTB4MjAwMAorI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkoMTAgKiBDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRSkKICNlbGlmIGRlZmluZWQoQ09ORklHX1NSSU9fUENJRV9CT09UX1NMQVZFKQogI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX1JFTU9URQogI2RlZmluZSBDT05GSUdfRU5WX0FERFIJCTB4ZmZlMjAwMDAKQEAgLTE0MCw3ICsyMDAsMTYgQEAKIC8qCiAgKiBDb25maWcgdGhlIEwzIENhY2hlIGFzIEwzIFNSQU0KICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfTDNfQUREUgkgQ09ORklHX1JBTUJPT1RfVEVYVF9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9MM19BRERSCQkweEZGRkMwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfTDNfU0laRQkJKDUxMiA8PCAxMCkKKyNkZWZpbmUgQ09ORklHX1NQTF9HRF9BRERSCQkoQ09ORklHX1NZU19JTklUX0wzX0FERFIgKyAzMiAqIDEwMjQpCisjaWZkZWYgQ09ORklHX1JBTUJPT1RfUEJMCisjZGVmaW5lIENPTkZJR19FTlZfQUREUgkJCShDT05GSUdfU1BMX0dEX0FERFIgKyA0ICogMTAyNCkKKyNlbmRpZgorI2RlZmluZSBDT05GSUdfU1BMX1JFTE9DX01BTExPQ19BRERSCShDT05GSUdfU1BMX0dEX0FERFIgKyAxMiAqIDEwMjQpCisjZGVmaW5lIENPTkZJR19TUExfUkVMT0NfTUFMTE9DX1NJWkUJKDUwIDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1BMX1JFTE9DX1NUQUNLCQkoQ09ORklHX1NQTF9HRF9BRERSICsgNjQgKiAxMDI0KQorI2RlZmluZSBDT05GSUdfU1BMX1JFTE9DX1NUQUNLX1NJWkUJKDIyIDw8IDEwKQogCiAjZGVmaW5lIENPTkZJR19TWVNfRENTUkJBUgkweGYwMDAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfRENTUkJBUl9QSFlTCTB4ZjAwMDAwMDAwdWxsCkBAIC0yOTgsOCArMzY3LDE2IEBACiAjZGVmaW5lIENPTkZJR19TWVNfQ1MwX0ZUSU0xCQlDT05GSUdfU1lTX05BTkRfRlRJTTEKICNkZWZpbmUgQ09ORklHX1NZU19DUzBfRlRJTTIJCUNPTkZJR19TWVNfTkFORF9GVElNMgogI2RlZmluZSBDT05GSUdfU1lTX0NTMF9GVElNMwkJQ09ORklHX1NZU19OQU5EX0ZUSU0zCi0jZGVmaW5lIENPTkZJR19TWVNfQ1NQUjJfRVhUCQlDT05GSUdfU1lTX05PUjBfQ1NQUl9FWFQKLSNkZWZpbmUgQ09ORklHX1NZU19DU1BSMgkJQ09ORklHX1NZU19OT1IwX0NTUFIKKyNkZWZpbmUgQ09ORklHX1NZU19DU1BSMV9FWFQJCUNPTkZJR19TWVNfTk9SMF9DU1BSX0VYVAorI2RlZmluZSBDT05GSUdfU1lTX0NTUFIxCQlDT05GSUdfU1lTX05PUjBfQ1NQUgorI2RlZmluZSBDT05GSUdfU1lTX0FNQVNLMQkJQ09ORklHX1NZU19OT1JfQU1BU0sKKyNkZWZpbmUgQ09ORklHX1NZU19DU09SMQkJQ09ORklHX1NZU19OT1JfQ1NPUgorI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMAkJQ09ORklHX1NZU19OT1JfRlRJTTAKKyNkZWZpbmUgQ09ORklHX1NZU19DUzFfRlRJTTEJCUNPTkZJR19TWVNfTk9SX0ZUSU0xCisjZGVmaW5lIENPTkZJR19TWVNfQ1MxX0ZUSU0yCQlDT05GSUdfU1lTX05PUl9GVElNMgorI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMwkJQ09ORklHX1NZU19OT1JfRlRJTTMKKyNkZWZpbmUgQ09ORklHX1NZU19DU1BSMl9FWFQJCUNPTkZJR19TWVNfTk9SMV9DU1BSX0VYVAorI2RlZmluZSBDT05GSUdfU1lTX0NTUFIyCQlDT05GSUdfU1lTX05PUjFfQ1NQUgogI2RlZmluZSBDT05GSUdfU1lTX0FNQVNLMgkJQ09ORklHX1NZU19OT1JfQU1BU0sKICNkZWZpbmUgQ09ORklHX1NZU19DU09SMgkJQ09ORklHX1NZU19OT1JfQ1NPUgogI2RlZmluZSBDT05GSUdfU1lTX0NTMl9GVElNMAkJQ09ORklHX1NZU19OT1JfRlRJTTAKQEAgLTMxNSw2ICszOTIsMTQgQEAKICNkZWZpbmUgQ09ORklHX1NZU19DUzBfRlRJTTEJCUNPTkZJR19TWVNfTk9SX0ZUSU0xCiAjZGVmaW5lIENPTkZJR19TWVNfQ1MwX0ZUSU0yCQlDT05GSUdfU1lTX05PUl9GVElNMgogI2RlZmluZSBDT05GSUdfU1lTX0NTMF9GVElNMwkJQ09ORklHX1NZU19OT1JfRlRJTTMKKyNkZWZpbmUgQ09ORklHX1NZU19DU1BSMV9FWFQJCUNPTkZJR19TWVNfTk9SMV9DU1BSX0VYVAorI2RlZmluZSBDT05GSUdfU1lTX0NTUFIxCQlDT05GSUdfU1lTX05PUjFfQ1NQUgorI2RlZmluZSBDT05GSUdfU1lTX0FNQVNLMQkJQ09ORklHX1NZU19OT1JfQU1BU0sKKyNkZWZpbmUgQ09ORklHX1NZU19DU09SMQkJQ09ORklHX1NZU19OT1JfQ1NPUgorI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMAkJQ09ORklHX1NZU19OT1JfRlRJTTAKKyNkZWZpbmUgQ09ORklHX1NZU19DUzFfRlRJTTEJCUNPTkZJR19TWVNfTk9SX0ZUSU0xCisjZGVmaW5lIENPTkZJR19TWVNfQ1MxX0ZUSU0yCQlDT05GSUdfU1lTX05PUl9GVElNMgorI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMwkJQ09ORklHX1NZU19OT1JfRlRJTTMKICNkZWZpbmUgQ09ORklHX1NZU19DU1BSMl9FWFQJCUNPTkZJR19TWVNfTkFORF9DU1BSX0VYVAogI2RlZmluZSBDT05GSUdfU1lTX0NTUFIyCQlDT05GSUdfU1lTX05BTkRfQ1NQUgogI2RlZmluZSBDT05GSUdfU1lTX0FNQVNLMgkJQ09ORklHX1NZU19OQU5EX0FNQVNLCkBAIC0zMjQsMjAgKzQwOSwxNyBAQAogI2RlZmluZSBDT05GSUdfU1lTX0NTMl9GVElNMgkJQ09ORklHX1NZU19OQU5EX0ZUSU0yCiAjZGVmaW5lIENPTkZJR19TWVNfQ1MyX0ZUSU0zCQlDT05GSUdfU1lTX05BTkRfRlRJTTMKICNlbmRpZgotI2RlZmluZSBDT05GSUdfU1lTX0NTUFIxX0VYVAkJQ09ORklHX1NZU19OT1IxX0NTUFJfRVhUCi0jZGVmaW5lIENPTkZJR19TWVNfQ1NQUjEJCUNPTkZJR19TWVNfTk9SMV9DU1BSCi0jZGVmaW5lIENPTkZJR19TWVNfQU1BU0sxCQlDT05GSUdfU1lTX05PUl9BTUFTSwotI2RlZmluZSBDT05GSUdfU1lTX0NTT1IxCQlDT05GSUdfU1lTX05PUl9DU09SCi0jZGVmaW5lIENPTkZJR19TWVNfQ1MxX0ZUSU0wCQlDT05GSUdfU1lTX05PUl9GVElNMAotI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMQkJQ09ORklHX1NZU19OT1JfRlRJTTEKLSNkZWZpbmUgQ09ORklHX1NZU19DUzFfRlRJTTIJCUNPTkZJR19TWVNfTk9SX0ZUSU0yCi0jZGVmaW5lIENPTkZJR19TWVNfQ1MxX0ZUSU0zCQlDT05GSUdfU1lTX05PUl9GVElNMwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkFNQk9PVF9QQkwpCiAjZGVmaW5lIENPTkZJR19TWVNfUkFNQk9PVAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU1BMX0JVSUxECisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFCUNPTkZJR19TUExfVEVYVF9CQVNFCisjZWxzZQorI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQlDT05GSUdfU1lTX1RFWFRfQkFTRQkvKiBzdGFydCBvZiBtb25pdG9yICovCisjZW5kaWYKKwotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQkgQ09ORklHX1NZU19URVhUX0JBU0UKICNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfUgkvKiBjYWxsIGJvYXJkX2Vhcmx5X2luaXRfciBmdW5jdGlvbiAqLwogI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IKICNkZWZpbmUgQ09ORklHX0hXQ09ORklHCkBAIC0zNTYsNyArNDM4LDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQJKENPTkZJR19TWVNfSU5JVF9SQU1fU0laRSAtIFwKIAkJCQkJCUdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQogI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfT0ZGU0VUCUNPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSg1MTIgKiAxMDI0KQorI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoNzY4ICogMTAyNCkKICNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoNCAqIDEwMjQgKiAxMDI0KQogCiAvKgpAQCAtNDUzLDE1ICs1MzUsMTQgQEAKICAqLwogI2lmZGVmIENPTkZJR19TUElfRkxBU0gKICNkZWZpbmUgQ09ORklHX0ZTTF9FU1BJCi0jZGVmaW5lIENPTkZJR19TUElfRkxBU0hfU1NUCiAjZGVmaW5lIENPTkZJR19TUElfRkxBU0hfU1RNSUNSTwotI2lmIGRlZmluZWQoQ09ORklHX1QyMDgwUURTKQotI2RlZmluZSBDT05GSUdfU1BJX0ZMQVNIX1NQQU5TSU9OCi0jZWxpZiBkZWZpbmVkKENPTkZJR19UMjA4MVFEUykKKyNpZiAhZGVmaW5lZChDT05GSUdfU1BMX0JVSUxEKSAmJiBkZWZpbmVkKENPTkZJR19SQU1CT09UX1BCTCkKKyNkZWZpbmUgQ09ORklHX1NQSV9GTEFTSF9TU1QKICNkZWZpbmUgQ09ORklHX1NQSV9GTEFTSF9FT04KICNlbmRpZgogCiAjZGVmaW5lIENPTkZJR19DTURfU0YKKyNkZWZpbmUgQ09ORklHX1NQSV9GTEFTSF9CQVIKICNkZWZpbmUgQ09ORklHX1NGX0RFRkFVTFRfU1BFRUQJIDEwMDAwMDAwCiAjZGVmaW5lIENPTkZJR19TRl9ERUZBVUxUX01PREUJICAwCiAjZW5kaWYKQEAgLTU1MiwxOCArNjMzLDE4IEBACiAgKiBlbnYsIHNvIHdlIGdvdCAweDExMDAwMC4KICAqLwogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZXX0lOX1NQSUZMQVNICi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCTB4MTEwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCTB4MTEwMDAwCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TRENBUkQpCiAvKgogICogUEJMIFNEIGJvb3QgaW1hZ2Ugc2hvdWxkIHN0b3JlZCBhdCAweDEwMDAoOCBibG9ja3MpLCB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgaXMKLSAqIGFib3V0IDgyNUtCICgxNjUwIGJsb2NrcyksIEVudiBpcyBzdG9yZWQgYWZ0ZXIgdGhlIGltYWdlLCBhbmQgdGhlIGVudiBzaXplIGlzCi0gKiAweDIwMDAgKDE2IGJsb2NrcyksIDggKyAxNjUwICsgMTYgPSAxNjc0LCBlbmxhcmdlIGl0IHRvIDE2ODAuCisgKiBhYm91dCAxTUIgKDIwNDggYmxvY2tzKSwgRW52IGlzIHN0b3JlZCBhZnRlciB0aGUgaW1hZ2UsIGFuZCB0aGUgZW52IHNpemUgaXMKKyAqIDB4MjAwMCAoMTYgYmxvY2tzKSwgOCArIDIwNDggKyAxNiA9IDIwNzIsIGVubGFyZ2UgaXQgdG8gMjA4MC4KICAqLwogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTU1DCi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCSg1MTIgKiAxNjgwKQorI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkoNTEyICogMHg4MjApCiAjZWxpZiBkZWZpbmVkKENPTkZJR19OQU5EKQogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTkFORAotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUgkoOCAqIENPTkZJR19TWVNfTkFORF9CTE9DS19TSVpFKQorI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkoMTEgKiBDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRSkKICNlbGlmIGRlZmluZWQoQ09ORklHX1NSSU9fUENJRV9CT09UX1NMQVZFKQogLyoKICAqIFNsYXZlIGhhcyBubyB1Y29kZSBsb2NhbGx5LCBpdCBjYW4gZmV0Y2ggdGhpcyBmcm9tIHJlbW90ZS4gV2hlbiBpbXBsZW1lbnRpbmcKQEAgLTU3MywxMCArNjU0LDEwIEBACiAgKiBtYXN0ZXIgTEFXLT50aGUgdWNvZGUgYWRkcmVzcyBpbiBtYXN0ZXIncyBtZW1vcnkgc3BhY2UuCiAgKi8KICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0lOX1JFTU9URQotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUgkweEZGRTAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCTB4RkZFMDAwMDAKICNlbHNlCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9OT1IKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJMHhFRkYwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkweEVGRjAwMDAwCiAjZW5kaWYKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0xFTkdUSAkweDEwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfRkRUX1BBRAkJKDB4MzAwMCArIENPTkZJR19TWVNfUUVfRk1BTl9GV19MRU5HVEgpCkBAIC02NDksNiArNzMwLDIzIEBACiAjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCiAjZW5kaWYKIAorCisvKgorICogRHluYW1pYyBNVEQgUGFydGl0aW9uIHN1cHBvcnQgd2l0aCBtdGRwYXJ0cworICovCisjaWZuZGVmIENPTkZJR19TWVNfTk9fRkxBU0gKKyNkZWZpbmUgQ09ORklHX01URF9ERVZJQ0UKKyNkZWZpbmUgQ09ORklHX01URF9QQVJUSVRJT05TCisjZGVmaW5lIENPTkZJR19DTURfTVREUEFSVFMKKyNkZWZpbmUgQ09ORklHX0ZMQVNIX0NGSV9NVEQKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQgIm5vcjA9ZmU4MDAwMDAwLm5vcixuYW5kMD1mZmY4MDAwMDAuZmxhc2gsIiBcCisJCQkic3BpMD1zcGlmZTExMDAwMC4wIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUICJtdGRwYXJ0cz1mZTgwMDAwMDAubm9yOjFtKHVib290KSw1bShrZXJuZWwpLCIgXAorCQkJIjEyOGsoZHRiKSw5Nm0oZnMpLC0odXNlcik7ZmZmODAwMDAwLmZsYXNoOjFtKHVib290KSwiIFwKKwkJCSI1bShrZXJuZWwpLDEyOGsoZHRiKSw5Nm0oZnMpLC0odXNlcik7c3BpZmUxMTAwMDAuMDoiIFwKKwkJCSIxbSh1Ym9vdCksNW0oa2VybmVsKSwxMjhrKGR0YiksLSh1c2VyKSIKKyNlbmRpZgorCiAvKgogICogRW52aXJvbm1lbnQKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1QyMDh4UkRCLmggYi9pbmNsdWRlL2NvbmZpZ3MvVDIwOHhSREIuaAppbmRleCA3NDNlZWUzLi43M2Q4MmVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVDIwOHhSREIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvVDIwOHhSREIuaApAQCAtMzksMTEgKzM5LDc1IEBACiAjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCiAKICNpZmRlZiBDT05GSUdfUkFNQk9PVF9QQkwKLSNkZWZpbmUgQ09ORklHX1JBTUJPT1RfVEVYVF9CQVNFCUNPTkZJR19TWVNfVEVYVF9CQVNFCi0jZGVmaW5lIENPTkZJR19SRVNFVF9WRUNUT1JfQUREUkVTUwkweGZmZmZmZmZjCiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX1BCTF9QQkkgYm9hcmQvZnJlZXNjYWxlL3QyMDh4cmRiL3QyMDgwX3BiaS5jZmcKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfUEJMX1JDVyBib2FyZC9mcmVlc2NhbGUvdDIwOHhyZGIvdDIwODBfcmN3LmNmZworCisjZGVmaW5lIENPTkZJR19TUEwKKyNkZWZpbmUgQ09ORklHX1NQTF9NUEM4WFhYX0lOSVRfRERSX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9FTlZfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX1NFUklBTF9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfRkxVU0hfSU1BR0UKKyNkZWZpbmUgQ09ORklHX1NQTF9UQVJHRVQJCSJ1LWJvb3Qtd2l0aC1zcGwuYmluIgorI2RlZmluZSBDT05GSUdfU1BMX0xJQkdFTkVSSUNfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0xJQkNPTU1PTl9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfSTJDX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9EUklWRVJTX01JU0NfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfRlNMX0xBVwkJCS8qIFVzZSBjb21tb24gRlNMIGluaXQgY29kZSAqLworI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkJMHgwMDIwMTAwMAorI2RlZmluZSBDT05GSUdfU1BMX1RFWFRfQkFTRQkJMHhGRkZEODAwMAorI2RlZmluZSBDT05GSUdfU1BMX1BBRF9UTwkJMHg0MDAwMAorI2RlZmluZSBDT05GSUdfU1BMX01BWF9TSVpFCQkweDI4MDAwCisjZGVmaW5lIFJFU0VUX1ZFQ1RPUl9PRkZTRVQJCTB4MjdGRkMKKyNkZWZpbmUgQk9PVF9QQUdFX09GRlNFVAkJMHgyNzAwMAorI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKyNkZWZpbmUgQ09ORklHX1NQTF9TS0lQX1JFTE9DQVRFCisjZGVmaW5lIENPTkZJR19TUExfQ09NTU9OX0lOSVRfRERSCisjZGVmaW5lIENPTkZJR19TWVNfQ0NTUl9ET19OT1RfUkVMT0NBVEUKKyNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTkFORAorI2RlZmluZSBDT05GSUdfU1BMX05BTkRfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfVV9CT09UX1NJWkUJKDc2OCA8PCAxMCkKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1VfQk9PVF9EU1QJMHgwMDIwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfVV9CT09UX1NUQVJUCTB4MDAyMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1VfQk9PVF9PRkZTCSgyNTYgPDwgMTApCisjZGVmaW5lIENPTkZJR19TWVNfTERTQ1JJUFQgICJhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzIgorI2RlZmluZSBDT05GSUdfU1BMX05BTkRfQk9PVAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1BJRkxBU0gKKyNkZWZpbmUgICAgICAgIENPTkZJR19SRVNFVF9WRUNUT1JfQUREUkVTUyAgICAgICAgICAgICAweDIwMEZGQworI2RlZmluZSBDT05GSUdfU1BMX1NQSV9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfU1BJX0ZMQVNIX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9TUElfRkxBU0hfTUlOSU1BTAorI2RlZmluZSBDT05GSUdfU1lTX1NQSV9GTEFTSF9VX0JPT1RfU0laRSAgICAgICAoNzY4IDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1lTX1NQSV9GTEFTSF9VX0JPT1RfRFNUICAgICAgICAgICAgICAgICgweDAwMjAwMDAwKQorI2RlZmluZSBDT05GSUdfU1lTX1NQSV9GTEFTSF9VX0JPT1RfU1RBUlQgICAgICAoMHgwMDIwMDAwMCkKKyNkZWZpbmUgQ09ORklHX1NZU19TUElfRkxBU0hfVV9CT09UX09GRlMgICAgICAgKDI1NiA8PCAxMCkKKyNkZWZpbmUgQ09ORklHX1NZU19MRFNDUklQVCAgICAiYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC5sZHMiCisjaWZuZGVmIENPTkZJR19TUExfQlVJTEQKKyNkZWZpbmUgQ09ORklHX1NZU19NUEM4NVhYX05PX1JFU0VUVkVDCiAjZW5kaWYKKyNkZWZpbmUgQ09ORklHX1NQTF9TUElfQk9PVAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0RDQVJECisjZGVmaW5lICAgICAgICBDT05GSUdfUkVTRVRfVkVDVE9SX0FERFJFU1MgICAgICAgICAgICAgMHgyMDBGRkMKKyNkZWZpbmUgQ09ORklHX1NQTF9NTUNfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX01NQ19NSU5JTUFMCisjZGVmaW5lIENPTkZJR19TWVNfTU1DX1VfQk9PVF9TSVpFICAgICAoNzY4IDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1lTX01NQ19VX0JPT1RfRFNUICAgICAgKDB4MDAyMDAwMDApCisjZGVmaW5lIENPTkZJR19TWVNfTU1DX1VfQk9PVF9TVEFSVCAgICAoMHgwMDIwMDAwMCkKKyNkZWZpbmUgQ09ORklHX1NZU19NTUNfVV9CT09UX09GRlMgICAgICgyNjAgPDwgMTApCisjZGVmaW5lIENPTkZJR19TWVNfTERTQ1JJUFQgICAgImFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzIgorI2lmbmRlZiBDT05GSUdfU1BMX0JVSUxECisjZGVmaW5lIENPTkZJR19TWVNfTVBDODVYWF9OT19SRVNFVFZFQworI2VuZGlmCisjZGVmaW5lIENPTkZJR19TUExfTU1DX0JPT1QKKyNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX1JBTUJPT1RfUEJMICovCiAKICNkZWZpbmUgQ09ORklHX1NSSU9fUENJRV9CT09UX01BU1RFUgogI2lmZGVmIENPTkZJR19TUklPX1BDSUVfQk9PVF9TTEFWRQpAQCAtNzQsMTEgKzEzOCw3IEBACiAjZGVmaW5lIENPTkZJR19NRU1fSU5JVF9WQUxVRQkJMHhkZWFkYmVlZgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU1lTX05PX0ZMQVNICi0jaWYgIWRlZmluZWQoQ09ORklHX1NSSU9fUENJRV9CT09UX1NMQVZFKSAmJiAhZGVmaW5lZChDT05GSUdfUkFNQk9PVF9QQkwpCi0jZGVmaW5lIENPTkZJR19FTlZfSVNfTk9XSEVSRQotI2VuZGlmCi0jZWxzZQorI2lmbmRlZiBDT05GSUdfU1lTX05PX0ZMQVNICiAjZGVmaW5lIENPTkZJR19GTEFTSF9DRklfRFJJVkVSCiAjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQ0ZJCiAjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfVVNFX0JVRkZFUl9XUklURQpAQCAtOTksMTEgKzE1OSwxMSBAQAogI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX01NQwogI2RlZmluZSBDT05GSUdfU1lTX01NQ19FTlZfREVWCTAKICNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkweDIwMDAKLSNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJKDUxMiAqIDE2NTgpCisjZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCSg1MTIgKiAweDgwMCkKICNlbGlmIGRlZmluZWQoQ09ORklHX05BTkQpCiAjZGVmaW5lIENPTkZJR19TWVNfRVhUUkFfRU5WX1JFTE9DCiAjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fTkFORAotI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCUNPTkZJR19TWVNfTkFORF9CTE9DS19TSVpFCisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJMHgyMDAwCiAjZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCSgyICogQ09ORklHX1NZU19OQU5EX0JMT0NLX1NJWkUpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUklPX1BDSUVfQk9PVF9TTEFWRSkKICNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9SRU1PVEUKQEAgLTEyOSw3ICsxODksMTYgQEAKIC8qCiAgKiBDb25maWcgdGhlIEwzIENhY2hlIGFzIEwzIFNSQU0KICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfTDNfQUREUgkgQ09ORklHX1JBTUJPT1RfVEVYVF9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9MM19BRERSCQkweEZGRkMwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfTDNfU0laRQkJKDUxMiA8PCAxMCkKKyNkZWZpbmUgQ09ORklHX1NQTF9HRF9BRERSCQkoQ09ORklHX1NZU19JTklUX0wzX0FERFIgKyAzMiAqIDEwMjQpCisjaWZkZWYgQ09ORklHX1JBTUJPT1RfUEJMCisjZGVmaW5lIENPTkZJR19FTlZfQUREUgkJCShDT05GSUdfU1BMX0dEX0FERFIgKyA0ICogMTAyNCkKKyNlbmRpZgorI2RlZmluZSBDT05GSUdfU1BMX1JFTE9DX01BTExPQ19BRERSCShDT05GSUdfU1BMX0dEX0FERFIgKyAxMiAqIDEwMjQpCisjZGVmaW5lIENPTkZJR19TUExfUkVMT0NfTUFMTE9DX1NJWkUJKDUwIDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1BMX1JFTE9DX1NUQUNLCQkoQ09ORklHX1NQTF9HRF9BRERSICsgNjQgKiAxMDI0KQorI2RlZmluZSBDT05GSUdfU1BMX1JFTE9DX1NUQUNLX1NJWkUJKDIyIDw8IDEwKQogCiAjZGVmaW5lIENPTkZJR19TWVNfRENTUkJBUgkweGYwMDAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfRENTUkJBUl9QSFlTCTB4ZjAwMDAwMDAwdWxsCkBAIC0xMzksNyArMjA4LDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19JMkNfRUVQUk9NX05YSUQKICNkZWZpbmUgQ09ORklHX1NZU19FRVBST01fQlVTX05VTQkwCiAjZGVmaW5lIENPTkZJR19TWVNfSTJDX0VFUFJPTV9BRERSCTB4NTAKLSNkZWZpbmUgQ09ORklHX1NZU19JMkNfRUVQUk9NX0FERFJfTEVOCTEKKyNkZWZpbmUgQ09ORklHX1NZU19JMkNfRUVQUk9NX0FERFJfTEVOCTIKIAogLyoKICAqIEREUiBTZXR1cApAQCAtMzAxLDcgKzM3MCwxMiBAQAogI2RlZmluZSBDT05GSUdfU1lTX1JBTUJPT1QKICNlbmRpZgogCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFCSBDT05GSUdfU1lTX1RFWFRfQkFTRQorI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UgIENPTkZJR19TUExfVEVYVF9CQVNFCisjZWxzZQorI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRSAgQ09ORklHX1NZU19URVhUX0JBU0UgLyogc3RhcnQgb2YgbW9uaXRvciAqLworI2VuZGlmCisKICNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfUgkvKiBjYWxsIGJvYXJkX2Vhcmx5X2luaXRfciBmdW5jdGlvbiAqLwogI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IKICNkZWZpbmUgQ09ORklHX0hXQ09ORklHCkBAIC0zMjAsNyArMzk0LDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQJKENPTkZJR19TWVNfSU5JVF9SQU1fU0laRSAtIFwKIAkJCQkJCUdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQogI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfT0ZGU0VUCUNPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSg1MTIgKiAxMDI0KQorI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoNzY4ICogMTAyNCkKICNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoNCAqIDEwMjQgKiAxMDI0KQogCiAvKgpAQCAtNTEwLDIzICs1ODQsMjYgQEAKICAqIGVudiwgc28gd2UgZ290IDB4MTEwMDAwLgogICovCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRldfSU5fU1BJRkxBU0gKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJMHgxMTAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19DT1JUSU5BX0ZXX0lOX1NQSUZMQVNICisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCQkweDExMDAwMAogI2RlZmluZSBDT05GSUdfQ09SVElOQV9GV19BRERSCQkweDEyMDAwMAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TRENBUkQpCiAvKgogICogUEJMIFNEIGJvb3QgaW1hZ2Ugc2hvdWxkIHN0b3JlZCBhdCAweDEwMDAoOCBibG9ja3MpLCB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgaXMKLSAqIGFib3V0IDgyNUtCICgxNjUwIGJsb2NrcyksIEVudiBpcyBzdG9yZWQgYWZ0ZXIgdGhlIGltYWdlLCBhbmQgdGhlIGVudiBzaXplIGlzCi0gKiAweDIwMDAgKDE2IGJsb2NrcyksIDggKyAxNjUwICsgMTYgPSAxNjc0LCBlbmxhcmdlIGl0IHRvIDE2ODAuCisgKiBhYm91dCAxTUIgKDIwNDggYmxvY2tzKSwgRW52IGlzIHN0b3JlZCBhZnRlciB0aGUgaW1hZ2UsIGFuZCB0aGUgZW52IHNpemUgaXMKKyAqIDB4MjAwMCAoMTYgYmxvY2tzKSwgOCArIDIwNDggKyAxNiA9IDIwNzIsIGVubGFyZ2UgaXQgdG8gMjA4MC4KICAqLwogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTU1DCi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCSg1MTIgKiAxNjgwKQotI2RlZmluZSBDT05GSUdfQ09SVElOQV9GV19BRERSCQkoNTEyICogMTgwOCkKKyNkZWZpbmUgQ09ORklHX1NZU19DT1JUSU5BX0ZXX0lOX01NQworI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkJKDUxMiAqIDB4ODIwKQorI2RlZmluZSBDT05GSUdfQ09SVElOQV9GV19BRERSCQkoNTEyICogMHg4YTApCiAKICNlbGlmIGRlZmluZWQoQ09ORklHX05BTkQpCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9OQU5ECi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCSg2ICogQ09ORklHX1NZU19OQU5EX0JMT0NLX1NJWkUpCi0jZGVmaW5lIENPTkZJR19DT1JUSU5BX0ZXX0FERFIJCSg3ICogQ09ORklHX1NZU19OQU5EX0JMT0NLX1NJWkUpCisjZGVmaW5lIENPTkZJR19TWVNfQ09SVElOQV9GV19JTl9OQU5ECisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCQkoMyAqIENPTkZJR19TWVNfTkFORF9CTE9DS19TSVpFKQorI2RlZmluZSBDT05GSUdfQ09SVElOQV9GV19BRERSCQkoNCAqIENPTkZJR19TWVNfTkFORF9CTE9DS19TSVpFKQogI2VsaWYgZGVmaW5lZChDT05GSUdfU1JJT19QQ0lFX0JPT1RfU0xBVkUpCiAvKgogICogU2xhdmUgaGFzIG5vIHVjb2RlIGxvY2FsbHksIGl0IGNhbiBmZXRjaCB0aGlzIGZyb20gcmVtb3RlLiBXaGVuIGltcGxlbWVudGluZwpAQCAtNTM2LDExICs2MTMsMTMgQEAKICAqIG1hc3RlciBMQVctPnRoZSB1Y29kZSBhZGRyZXNzIGluIG1hc3RlcidzIG1lbW9yeSBzcGFjZS4KICAqLwogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fUkVNT1RFCi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCTB4RkZFMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19DT1JUSU5BX0ZXX0lOX1JFTU9URQorI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkJMHhGRkUwMDAwMAogI2RlZmluZSBDT05GSUdfQ09SVElOQV9GV19BRERSCQkweEZGRTEwMDAwCiAjZWxzZQogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTk9SCi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCTB4RUZGMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19DT1JUSU5BX0ZXX0lOX05PUgorI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkJMHhFRkYwMDAwMAogI2RlZmluZSBDT05GSUdfQ09SVElOQV9GV19BRERSCQkweEVGRTAwMDAwCiAjZW5kaWYKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0xFTkdUSAkweDEwMDAwCkBAIC02MTYsNiArNjk1LDIyIEBACiAjZW5kaWYKIAogLyoKKyAqIER5bmFtaWMgTVREIFBhcnRpdGlvbiBzdXBwb3J0IHdpdGggbXRkcGFydHMKKyAqLworI2lmbmRlZiBDT05GSUdfU1lTX05PX0ZMQVNICisjZGVmaW5lIENPTkZJR19NVERfREVWSUNFCisjZGVmaW5lIENPTkZJR19NVERfUEFSVElUSU9OUworI2RlZmluZSBDT05GSUdfQ01EX01URFBBUlRTCisjZGVmaW5lIENPTkZJR19GTEFTSF9DRklfTVRECisjZGVmaW5lIE1URElEU19ERUZBVUxUICJub3IwPWZlODAwMDAwMC5ub3IsbmFuZDA9ZmZmODAwMDAwLmZsYXNoLCIgXAorCQkJInNwaTA9c3BpZmUxMTAwMDAuMSIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVCAibXRkcGFydHM9ZmU4MDAwMDAwLm5vcjoxbSh1Ym9vdCksNW0oa2VybmVsKSwiIFwKKwkJCSIxMjhrKGR0YiksOTZtKGZzKSwtKHVzZXIpO2ZmZjgwMDAwMC5mbGFzaDoxbSh1Ym9vdCksIiBcCisJCQkiNW0oa2VybmVsKSwxMjhrKGR0YiksOTZtKGZzKSwtKHVzZXIpO3NwaWZlMTEwMDAwLjE6IiBcCisJCQkiMW0odWJvb3QpLDVtKGtlcm5lbCksMTI4ayhkdGIpLC0odXNlcikiCisjZW5kaWYKKworLyoKICAqIEVudmlyb25tZW50CiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1Q0MjQwRU1VLmggYi9pbmNsdWRlL2NvbmZpZ3MvVDQyNDBFTVUuaAppbmRleCBjODFjNDU3Li5hZDVhOWE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVDQyNDBFTVUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvVDQyNDBFTVUuaApAQCAtOTgsNyArOTgsNyBAQAogI2RlZmluZSBDT05GSUdfU1lTX0lOVEVSTEFLRU4KIAogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTk9SCi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCQkweEVGRjAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCQkweEVGRjAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19MRU5HVEgJMHgxMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0ZEVF9QQUQJCSgweDMwMDAgKyBDT05GSUdfU1lTX1FFX0ZNQU5fRldfTEVOR1RIKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVDQyNDBRRFMuaCBiL2luY2x1ZGUvY29uZmlncy9UNDI0MFFEUy5oCmluZGV4IDU2ZTEyOTMuLmU0ZWIzMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9UNDI0MFFEUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UNDI0MFFEUy5oCkBAIC0xOSwxMiArMTksNjUgQEAKICNkZWZpbmUgQ09ORklHX0lDUzMwN19SRUZDTEtfSFoJCTI1MDAwMDAwICAvKiBJQ1MzMDcgcmVmIGNsayBmcmVxICovCiAKICNpZmRlZiBDT05GSUdfUkFNQk9PVF9QQkwKLSNkZWZpbmUgQ09ORklHX1JBTUJPT1RfVEVYVF9CQVNFCUNPTkZJR19TWVNfVEVYVF9CQVNFCi0jZGVmaW5lIENPTkZJR19SRVNFVF9WRUNUT1JfQUREUkVTUwkweGZmZmZmZmZjCiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX1BCTF9QQkkgYm9hcmQvZnJlZXNjYWxlL3Q0cWRzL3Q0X3BiaS5jZmcKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfUEJMX1JDVyBib2FyZC9mcmVlc2NhbGUvdDRxZHMvdDRfcmN3LmNmZworI2lmICFkZWZpbmVkKENPTkZJR19OQU5EKSAmJiAhZGVmaW5lZChDT05GSUdfU0RDQVJEKQorI2RlZmluZSBDT05GSUdfUkFNQk9PVF9URVhUX0JBU0UgICAgICAgIENPTkZJR19TWVNfVEVYVF9CQVNFCisjZGVmaW5lIENPTkZJR19SRVNFVF9WRUNUT1JfQUREUkVTUyAgICAgMHhmZmZmZmZmYworI2Vsc2UKKyNkZWZpbmUgQ09ORklHX1NQTAorI2RlZmluZSBDT05GSUdfU1BMX01QQzhYWFhfSU5JVF9ERFJfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0VOVl9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfU0VSSUFMX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9GTFVTSF9JTUFHRQorI2RlZmluZSBDT05GSUdfU1BMX1RBUkdFVAkJInUtYm9vdC13aXRoLXNwbC5iaW4iCisjZGVmaW5lIENPTkZJR19TUExfTElCR0VORVJJQ19TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfTElCQ09NTU9OX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9JMkNfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0RSSVZFUlNfTUlTQ19TVVBQT1JUCisjZGVmaW5lIENPTkZJR19GU0xfTEFXICAgICAgICAgICAgICAgICAvKiBVc2UgY29tbW9uIEZTTCBpbml0IGNvZGUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19URVhUX0JBU0UJCTB4MDAyMDEwMDAKKyNkZWZpbmUgQ09ORklHX1NQTF9URVhUX0JBU0UJCTB4RkZGRDgwMDAKKyNkZWZpbmUgQ09ORklHX1NQTF9QQURfVE8JCTB4NDAwMDAKKyNkZWZpbmUgQ09ORklHX1NQTF9NQVhfU0laRQkJMHgyODAwMAorI2RlZmluZSBSRVNFVF9WRUNUT1JfT0ZGU0VUCQkweDI3RkZDCisjZGVmaW5lIEJPT1RfUEFHRV9PRkZTRVQJCTB4MjcwMDAKKworI2lmZGVmCUNPTkZJR19OQU5ECisjZGVmaW5lIENPTkZJR19TUExfTkFORF9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9VX0JPT1RfU0laRQkoNzY4IDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfVV9CT09UX0RTVAkweDAwMjAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9VX0JPT1RfU1RBUlQJMHgwMDIwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfVV9CT09UX09GRlMJKDI1NiA8PCAxMCkKKyNkZWZpbmUgQ09ORklHX1NZU19MRFNDUklQVAkiYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kLmxkcyIKKyNkZWZpbmUgQ09ORklHX1NQTF9OQU5EX0JPT1QKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1NEQ0FSRAorI2RlZmluZQlDT05GSUdfUkVTRVRfVkVDVE9SX0FERFJFU1MJMHgyMDBGRkMKKyNkZWZpbmUgQ09ORklHX1NQTF9NTUNfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX01NQ19NSU5JTUFMCisjZGVmaW5lIENPTkZJR19TWVNfTU1DX1VfQk9PVF9TSVpFCSg3NjggPDwgMTApCisjZGVmaW5lIENPTkZJR19TWVNfTU1DX1VfQk9PVF9EU1QJMHgwMDIwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX01NQ19VX0JPT1RfU1RBUlQJMHgwMDIwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX01NQ19VX0JPT1RfT0ZGUwkoMjYwIDw8IDEwKQorI2lmbmRlZiBDT05GSUdfU1BMX0JVSUxECisjZGVmaW5lCUNPTkZJR19TWVNfTVBDODVYWF9OT19SRVNFVFZFQworI2VuZGlmCisjZGVmaW5lIENPTkZJR19TWVNfTERTQ1JJUFQJImFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzIgorI2RlZmluZSBDT05GSUdfU1BMX01NQ19CT09UCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKyNkZWZpbmUgQ09ORklHX1NQTF9TS0lQX1JFTE9DQVRFCisjZGVmaW5lIENPTkZJR19TUExfQ09NTU9OX0lOSVRfRERSCisjZGVmaW5lIENPTkZJR19TWVNfQ0NTUl9ET19OT1RfUkVMT0NBVEUKKyNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAorI2VuZGlmCisKKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19SQU1CT09UX1BCTCAqLworCiAjaWZkZWYgQ09ORklHX1NSSU9fUENJRV9CT09UX1NMQVZFCiAvKiBTZXQgMU0gYm9vdCBzcGFjZSAqLwogI2RlZmluZSBDT05GSUdfU1lTX1NSSU9fUENJRV9CT09UX1NMQVZFX0FERFIgKENPTkZJR19TWVNfVEVYVF9CQVNFICYgMHhmZmYwMDAwMCkKQEAgLTY0LDEyICsxMTcsMTIgQEAKICNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9NTUMKICNkZWZpbmUgQ09ORklHX1NZU19NTUNfRU5WX0RFViAgICAgICAgICAwCiAjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCTB4MjAwMAotI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJKDUxMiAqIDE2NTgpCisjZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCQkoNTEyICogMHg4MDApCiAjZWxpZiBkZWZpbmVkKENPTkZJR19OQU5EKQogI2RlZmluZSBDT05GSUdfU1lTX0VYVFJBX0VOVl9SRUxPQwogI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05BTkQKLSNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkJQ09ORklHX1NZU19OQU5EX0JMT0NLX1NJWkUKLSNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCSg3ICogQ09ORklHX1NZU19OQU5EX0JMT0NLX1NJWkUpCisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCTB4MjAwMAorI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJKDEwICogQ09ORklHX1NZU19OQU5EX0JMT0NLX1NJWkUpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUklPX1BDSUVfQk9PVF9TTEFWRSkKICNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9SRU1PVEUKICNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkweGZmZTIwMDAwCkBAIC0yNDQsOCArMjk3LDE2IEBACiAjZGVmaW5lIENPTkZJR19TWVNfQ1MwX0ZUSU0xCQlDT05GSUdfU1lTX05BTkRfRlRJTTEKICNkZWZpbmUgQ09ORklHX1NZU19DUzBfRlRJTTIJCUNPTkZJR19TWVNfTkFORF9GVElNMgogI2RlZmluZSBDT05GSUdfU1lTX0NTMF9GVElNMwkJQ09ORklHX1NZU19OQU5EX0ZUSU0zCi0jZGVmaW5lIENPTkZJR19TWVNfQ1NQUjJfRVhUCQlDT05GSUdfU1lTX05PUjBfQ1NQUl9FWFQKLSNkZWZpbmUgQ09ORklHX1NZU19DU1BSMgkJQ09ORklHX1NZU19OT1IwX0NTUFIKKyNkZWZpbmUgQ09ORklHX1NZU19DU1BSMV9FWFQJCUNPTkZJR19TWVNfTk9SMF9DU1BSX0VYVAorI2RlZmluZSBDT05GSUdfU1lTX0NTUFIxCQlDT05GSUdfU1lTX05PUjBfQ1NQUgorI2RlZmluZSBDT05GSUdfU1lTX0FNQVNLMQkJQ09ORklHX1NZU19OT1JfQU1BU0sKKyNkZWZpbmUgQ09ORklHX1NZU19DU09SMQkJQ09ORklHX1NZU19OT1JfQ1NPUgorI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMAkJQ09ORklHX1NZU19OT1JfRlRJTTAKKyNkZWZpbmUgQ09ORklHX1NZU19DUzFfRlRJTTEJCUNPTkZJR19TWVNfTk9SX0ZUSU0xCisjZGVmaW5lIENPTkZJR19TWVNfQ1MxX0ZUSU0yCQlDT05GSUdfU1lTX05PUl9GVElNMgorI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMwkJQ09ORklHX1NZU19OT1JfRlRJTTMKKyNkZWZpbmUgQ09ORklHX1NZU19DU1BSMl9FWFQJCUNPTkZJR19TWVNfTk9SMV9DU1BSX0VYVAorI2RlZmluZSBDT05GSUdfU1lTX0NTUFIyCQlDT05GSUdfU1lTX05PUjFfQ1NQUgogI2RlZmluZSBDT05GSUdfU1lTX0FNQVNLMgkJQ09ORklHX1NZU19OT1JfQU1BU0sKICNkZWZpbmUgQ09ORklHX1NZU19DU09SMgkJQ09ORklHX1NZU19OT1JfQ1NPUgogI2RlZmluZSBDT05GSUdfU1lTX0NTMl9GVElNMAkJQ09ORklHX1NZU19OT1JfRlRJTTAKQEAgLTI2MSw2ICszMjIsMTQgQEAKICNkZWZpbmUgQ09ORklHX1NZU19DUzBfRlRJTTEJCUNPTkZJR19TWVNfTk9SX0ZUSU0xCiAjZGVmaW5lIENPTkZJR19TWVNfQ1MwX0ZUSU0yCQlDT05GSUdfU1lTX05PUl9GVElNMgogI2RlZmluZSBDT05GSUdfU1lTX0NTMF9GVElNMwkJQ09ORklHX1NZU19OT1JfRlRJTTMKKyNkZWZpbmUgQ09ORklHX1NZU19DU1BSMV9FWFQJCUNPTkZJR19TWVNfTk9SMV9DU1BSX0VYVAorI2RlZmluZSBDT05GSUdfU1lTX0NTUFIxCQlDT05GSUdfU1lTX05PUjFfQ1NQUgorI2RlZmluZSBDT05GSUdfU1lTX0FNQVNLMQkJQ09ORklHX1NZU19OT1JfQU1BU0sKKyNkZWZpbmUgQ09ORklHX1NZU19DU09SMQkJQ09ORklHX1NZU19OT1JfQ1NPUgorI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMAkJQ09ORklHX1NZU19OT1JfRlRJTTAKKyNkZWZpbmUgQ09ORklHX1NZU19DUzFfRlRJTTEJCUNPTkZJR19TWVNfTk9SX0ZUSU0xCisjZGVmaW5lIENPTkZJR19TWVNfQ1MxX0ZUSU0yCQlDT05GSUdfU1lTX05PUl9GVElNMgorI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMwkJQ09ORklHX1NZU19OT1JfRlRJTTMKICNkZWZpbmUgQ09ORklHX1NZU19DU1BSMl9FWFQJCUNPTkZJR19TWVNfTkFORF9DU1BSX0VYVAogI2RlZmluZSBDT05GSUdfU1lTX0NTUFIyCQlDT05GSUdfU1lTX05BTkRfQ1NQUgogI2RlZmluZSBDT05GSUdfU1lTX0FNQVNLMgkJQ09ORklHX1NZU19OQU5EX0FNQVNLCkBAIC0yNzAsMTQgKzMzOSw2IEBACiAjZGVmaW5lIENPTkZJR19TWVNfQ1MyX0ZUSU0yCQlDT05GSUdfU1lTX05BTkRfRlRJTTIKICNkZWZpbmUgQ09ORklHX1NZU19DUzJfRlRJTTMJCUNPTkZJR19TWVNfTkFORF9GVElNMwogI2VuZGlmCi0jZGVmaW5lIENPTkZJR19TWVNfQ1NQUjFfRVhUCQlDT05GSUdfU1lTX05PUjFfQ1NQUl9FWFQKLSNkZWZpbmUgQ09ORklHX1NZU19DU1BSMQkJQ09ORklHX1NZU19OT1IxX0NTUFIKLSNkZWZpbmUgQ09ORklHX1NZU19BTUFTSzEJCUNPTkZJR19TWVNfTk9SX0FNQVNLCi0jZGVmaW5lIENPTkZJR19TWVNfQ1NPUjEJCUNPTkZJR19TWVNfTk9SX0NTT1IKLSNkZWZpbmUgQ09ORklHX1NZU19DUzFfRlRJTTAJCUNPTkZJR19TWVNfTk9SX0ZUSU0wCi0jZGVmaW5lIENPTkZJR19TWVNfQ1MxX0ZUSU0xCQlDT05GSUdfU1lTX05PUl9GVElNMQotI2RlZmluZSBDT05GSUdfU1lTX0NTMV9GVElNMgkJQ09ORklHX1NZU19OT1JfRlRJTTIKLSNkZWZpbmUgQ09ORklHX1NZU19DUzFfRlRJTTMJCUNPTkZJR19TWVNfTk9SX0ZUSU0zCiAKICNpZiBkZWZpbmVkKENPTkZJR19SQU1CT09UX1BCTCkKICNkZWZpbmUgQ09ORklHX1NZU19SQU1CT09UCkBAIC0zNzUsMTggKzQzNiwxOCBAQAogICogZW52LCBzbyB3ZSBnb3QgMHgxMTAwMDAuCiAgKi8KICNkZWZpbmUgQ09ORklHX1NZU19RRV9GV19JTl9TUElGTEFTSAotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUgkweDExMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkweDExMDAwMAogI2VsaWYgZGVmaW5lZChDT05GSUdfU0RDQVJEKQogLyoKICAqIFBCTCBTRCBib290IGltYWdlIHNob3VsZCBzdG9yZWQgYXQgMHgxMDAwKDggYmxvY2tzKSwgdGhlIHNpemUgb2YgdGhlIGltYWdlIGlzCi0gKiBhYm91dCA4MjVLQiAoMTY1MCBibG9ja3MpLCBFbnYgaXMgc3RvcmVkIGFmdGVyIHRoZSBpbWFnZSwgYW5kIHRoZSBlbnYgc2l6ZSBpcwotICogMHgyMDAwICgxNiBibG9ja3MpLCA4ICsgMTY1MCArIDE2ID0gMTY3NCwgZW5sYXJnZSBpdCB0byAxNjgwLgorICogYWJvdXQgMU1CICgyMDQ4IGJsb2NrcyksIEVudiBpcyBzdG9yZWQgYWZ0ZXIgdGhlIGltYWdlLCBhbmQgdGhlIGVudiBzaXplIGlzCisgKiAweDIwMDAgKDE2IGJsb2NrcyksIDggKyAyMDQ4ICsgMTYgPSAyMDcyLCBlbmxhcmdlIGl0IHRvIDIwODAuCiAgKi8KICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0lOX01NQwotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUgkoNTEyICogMTY4MCkKKyNkZWZpbmUgQ09ORklHX1NZU19GTUFOX0ZXX0FERFIJKDUxMiAqIDB4ODIwKQogI2VsaWYgZGVmaW5lZChDT05GSUdfTkFORCkKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0lOX05BTkQKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJKDggKiBDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRSkKKyNkZWZpbmUgQ09ORklHX1NZU19GTUFOX0ZXX0FERFIJKDExICogQ09ORklHX1NZU19OQU5EX0JMT0NLX1NJWkUpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUklPX1BDSUVfQk9PVF9TTEFWRSkKIC8qCiAgKiBTbGF2ZSBoYXMgbm8gdWNvZGUgbG9jYWxseSwgaXQgY2FuIGZldGNoIHRoaXMgZnJvbSByZW1vdGUuIFdoZW4gaW1wbGVtZW50aW5nCkBAIC0zOTYsMTAgKzQ1NywxMCBAQAogICogbWFzdGVyIExBVy0+dGhlIHVjb2RlIGFkZHJlc3MgaW4gbWFzdGVyJ3MgbWVtb3J5IHNwYWNlLgogICovCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9SRU1PVEUKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJMHhGRkUwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkweEZGRTAwMDAwCiAjZWxzZQogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfSU5fTk9SCi0jZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19BRERSCQkweEVGRjAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCQkweEVGRjAwMDAwCiAjZW5kaWYKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0xFTkdUSAkweDEwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfRkRUX1BBRAkJKDB4MzAwMCArIENPTkZJR19TWVNfUUVfRk1BTl9GV19MRU5HVEgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYW0zMzV4X2V2bS5oIGIvaW5jbHVkZS9jb25maWdzL2FtMzM1eF9ldm0uaAppbmRleCAwMzZjNjA5Li43NjJmNmQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvYW0zMzV4X2V2bS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9hbTMzNXhfZXZtLmgKQEAgLTMwMSw2ICszMDEsNyBAQAogI2VuZGlmCiAKIC8qIFVTQiBEZXZpY2UgRmlybXdhcmUgVXBkYXRlIHN1cHBvcnQgKi8KKyNpZm5kZWYgQ09ORklHX1NQTF9CVUlMRAogI2RlZmluZSBDT05GSUdfREZVX0ZVTkNUSU9OCiAjZGVmaW5lIENPTkZJR19ERlVfTU1DCiAjZGVmaW5lIENPTkZJR19DTURfREZVCkBAIC0zMDksMTAgKzMxMCwxMCBAQAogCSJib290IHBhcnQgMCAxOyIgXAogCSJyb290ZnMgcGFydCAwIDI7IiBcCiAJIk1MTyBmYXQgMCAxOyIgXAotCSJNTE8ucmF3IG1tYyAxMDAgMTAwOyIgXAotCSJ1LWJvb3QuaW1nLnJhdyBtbWMgMzAwIDQwMDsiIFwKLQkic3BsLW9zLWFyZ3MucmF3IG1tYyA4MCA4MDsiIFwKLQkic3BsLW9zLWltYWdlLnJhdyBtbWMgOTAwIDIwMDA7IiBcCisJIk1MTy5yYXcgbW1jIDB4MTAwIDB4MTAwOyIgXAorCSJ1LWJvb3QuaW1nLnJhdyBtbWMgMHgzMDAgMHg0MDA7IiBcCisJInNwbC1vcy1hcmdzLnJhdyBtbWMgMHg4MCAweDgwOyIgXAorCSJzcGwtb3MtaW1hZ2UucmF3IG1tYyAweDkwMCAweDIwMDA7IiBcCiAJInNwbC1vcy1hcmdzIGZhdCAwIDE7IiBcCiAJInNwbC1vcy1pbWFnZSBmYXQgMCAxOyIgXAogCSJ1LWJvb3QuaW1nIGZhdCAwIDE7IiBcCkBAIC0zNDMsNiArMzQ0LDcgQEAKIAlERlVfQUxUX0lORk9fTU1DIFwKIAlERlVfQUxUX0lORk9fUkFNIFwKIAlERlVfQUxUX0lORk9fTkFORAorI2VuZGlmCiAKIC8qCiAgKiBEZWZhdWx0IHRvIHVzaW5nIFNQSSBmb3IgZW52aXJvbm1lbnQsIGV0Yy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9heHMxMDEuaCBiL2luY2x1ZGUvY29uZmlncy9heHMxMDEuaAppbmRleCBmNmI1NjlhLi5jMjJkNmQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvYXhzMTAxLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2F4czEwMS5oCkBAIC0xNiw3ICsxNiw3IEBACiAjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJCTc1MDAwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX1RJTUVSX1JBVEUJCUNPTkZJR19TWVNfQ0xLX0ZSRVEKIAotLyogZHdnbWFjIGRvZXNuJ3Qgd29yayB3aXRoIEQkIGVuYWJsZWQgbm93ICovCisvKiBOQU5EIGNvbnRyb2xsZXIgRE1BIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCBEJCBlbmFibGVkICovCiAjZGVmaW5lIENPTkZJR19TWVNfRENBQ0hFX09GRgogCiAvKgpAQCAtNDAsNyArNDAsNyBAQAogCiAjZGVmaW5lIENPTkZJR19TWVNfRERSX1NEUkFNX0JBU0UJMHg4MDAwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX1NEUkFNX0JBU0UJCUNPTkZJR19TWVNfRERSX1NEUkFNX0JBU0UKLSNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9TSVpFCQkweDEwMDAwMDAwCS8qIDI1NiBNYiAqLworI2RlZmluZSBDT05GSUdfU1lTX1NEUkFNX1NJWkUJCTB4MjAwMDAwMDAJLyogNTEyIE1iICovCiAKICNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX0FERFIJCVwKIAkoQ09ORklHX1NZU19TRFJBTV9CQVNFICsgMHgxMDAwIC0gR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCkBAIC0xMDMsNyArMTAzLDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19JMkNfRUVQUk9NX0FERFJfTEVOCQkxCiAjZGVmaW5lIENPTkZJR19TWVNfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XCTEKICNkZWZpbmUgQ09ORklHX1NZU19FRVBST01fUEFHRV9XUklURV9CSVRTCTMKLSNkZWZpbmUgQ09ORklHX1NZU19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUwkzMgorI2RlZmluZSBDT05GSUdfU1lTX0VFUFJPTV9QQUdFX1dSSVRFX0RFTEFZX01TCTY0CiAKIC8qCiAgKiBTRC9NTUMgY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2NvcmVuZXRfZHMuaCBiL2luY2x1ZGUvY29uZmlncy9jb3JlbmV0X2RzLmgKaW5kZXggMWU0YmZjNC4uZGI2YjliZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2NvcmVuZXRfZHMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvY29yZW5ldF9kcy5oCkBAIC0zMTAsNyArMzEwLDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQJKENPTkZJR19TWVNfSU5JVF9SQU1fU0laRSAtIEdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQogI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfT0ZGU0VUCUNPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCiAKLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDUxMiAqIDEwMjQpCisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSg3NjggKiAxMDI0KQogI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCSgxMDI0ICogMTAyNCkJLyogUmVzZXJ2ZWQgZm9yIG1hbGxvYyAqLwogCiAvKiBTZXJpYWwgUG9ydCAtIGNvbnRyb2xsZWQgb24gYm9hcmQgd2l0aCBqdW1wZXIgSjgKQEAgLTUwOSw3ICs1MDksNyBAQAogICogZW52LCBzbyB3ZSBnb3QgMHgxMTAwMDAuCiAgKi8KICNkZWZpbmUgQ09ORklHX1NZU19RRV9GV19JTl9TUElGTEFTSAotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUgkweDExMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0ZNQU5fRldfQUREUgkweDExMDAwMAogI2VsaWYgZGVmaW5lZChDT05GSUdfU0RDQVJEKQogLyoKICAqIFBCTCBTRCBib290IGltYWdlIHNob3VsZCBzdG9yZWQgYXQgMHgxMDAwKDggYmxvY2tzKSwgdGhlIHNpemUgb2YgdGhlIGltYWdlIGlzCkBAIC01MTcsMTAgKzUxNywxMCBAQAogICogMHgyMDAwICgxNiBibG9ja3MpLCA4ICsgMTY1MCArIDE2ID0gMTY3NCwgZW5sYXJnZSBpdCB0byAxNjgwLgogICovCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9NTUMKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJKDUxMiAqIDE2ODApCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCSg1MTIgKiAxNjgwKQogI2VsaWYgZGVmaW5lZChDT05GSUdfTkFORCkKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0lOX05BTkQKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJKDggKiBDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRSkKKyNkZWZpbmUgQ09ORklHX1NZU19GTUFOX0ZXX0FERFIJKDggKiBDT05GSUdfU1lTX05BTkRfQkxPQ0tfU0laRSkKICNlbGlmIGRlZmluZWQoQ09ORklHX1NSSU9fUENJRV9CT09UX1NMQVZFKQogLyoKICAqIFNsYXZlIGhhcyBubyB1Y29kZSBsb2NhbGx5LCBpdCBjYW4gZmV0Y2ggdGhpcyBmcm9tIHJlbW90ZS4gV2hlbiBpbXBsZW1lbnRpbmcKQEAgLTUzMCwxMCArNTMwLDEwIEBACiAgKiBtYXN0ZXIgTEFXLT50aGUgdWNvZGUgYWRkcmVzcyBpbiBtYXN0ZXIncyBtZW1vcnkgc3BhY2UuCiAgKi8KICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0lOX1JFTU9URQotI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfQUREUgkweEZGRTAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfRk1BTl9GV19BRERSCTB4RkZFMDAwMDAKICNlbHNlCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9OT1IKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJCTB4RUZGMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19GTUFOX0ZXX0FERFIJCTB4RUZGMDAwMDAKICNlbmRpZgogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfTEVOR1RICTB4MTAwMDAKICNkZWZpbmUgQ09ORklHX1NZU19GRFRfUEFECQkoMHgzMDAwICsgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0xFTkdUSCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9leHlub3M0LWR0LmggYi9pbmNsdWRlL2NvbmZpZ3MvZXh5bm9zNC1kdC5oCmluZGV4IDIwNDBiZjcuLmNiZDJkMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9leHlub3M0LWR0LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2V4eW5vczQtZHQuaApAQCAtMTI3LDcgKzEyNyw2IEBACiAjZGVmaW5lIENPTkZJR19VU0JfR0FER0VUX1MzQ19VRENfT1RHCiAjZGVmaW5lIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAogI2RlZmluZSBDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVcJMgotI2RlZmluZSBDT05GSUdfVVNCX0NBQkxFX0NIRUNLCiAKICNkZWZpbmUgQ09ORklHX0NNRF9VU0JfTUFTU19TVE9SQUdFCiAjZGVmaW5lIENPTkZJR19VU0JfR0FER0VUX01BU1NfU1RPUkFHRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2dyX2NwY2lfYXgyMDAwLmggYi9pbmNsdWRlL2NvbmZpZ3MvZ3JfY3BjaV9heDIwMDAuaAppbmRleCAyNDM3YjRiLi44NTQ4MDdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvZ3JfY3BjaV9heDIwMDAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvZ3JfY3BjaV9heDIwMDAuaApAQCAtMTksOCArMTksNiBAQAogICogKGVhc3kgdG8gY2hhbmdlKQogICovCiAKLSNkZWZpbmUgQ09ORklHX0xFT04zCQkvKiBUaGlzIGlzIGFuIExFT04zIENQVSAqLwotI2RlZmluZSBDT05GSUdfTEVPTgkJMQkvKiBUaGlzIGlzIGFuIExFT04gQ1BVICovCiAjZGVmaW5lIENPTkZJR19DUENJX0FYMjAwMAkxCS8qIC4uLiBvbiBHUi1DUENJLUFYMjAwMCBib2FyZCAqLwogCiAjZGVmaW5lIENPTkZJR19MRU9OX1JBTV9TUkFNIDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9ncl9lcDJzNjAuaCBiL2luY2x1ZGUvY29uZmlncy9ncl9lcDJzNjAuaAppbmRleCAyY2Q2ZWFlLi5lZDJkZDJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvZ3JfZXAyczYwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2dyX2VwMnM2MC5oCkBAIC0yMCw4ICsyMCw2IEBACiAgKiAoZWFzeSB0byBjaGFuZ2UpCiAgKi8KIAotI2RlZmluZSBDT05GSUdfTEVPTjMJCS8qIFRoaXMgaXMgYW4gTEVPTjMgQ1BVICovCi0jZGVmaW5lIENPTkZJR19MRU9OCQkxCS8qIFRoaXMgaXMgYW4gTEVPTiBDUFUgKi8KIC8qIEFsdGVyYSBOSU9TIERldmVsb3BtZW50IGJvYXJkLCBTdHJhdGl4IElJIGJvYXJkICovCiAjZGVmaW5lIENPTkZJR19HUl9FUDJTNjAJMQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvZ3JfeGMzc18xNTAwLmggYi9pbmNsdWRlL2NvbmZpZ3MvZ3JfeGMzc18xNTAwLmgKaW5kZXggMzkwMzZjZC4uZTNjYmI2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2dyX3hjM3NfMTUwMC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9ncl94YzNzXzE1MDAuaApAQCAtMTgsOCArMTgsNiBAQAogICogKGVhc3kgdG8gY2hhbmdlKQogICovCiAKLSNkZWZpbmUgQ09ORklHX0xFT04zCQkvKiBUaGlzIGlzIGFuIExFT04zIENQVSAqLwotI2RlZmluZSBDT05GSUdfTEVPTgkJMQkvKiBUaGlzIGlzIGFuIExFT04gQ1BVICovCiAjZGVmaW5lIENPTkZJR19HUlhDM1MxNTAwCTEJLyogLi4uIG9uIEdSLVhDM1MtMTUwMCBib2FyZCAqLwogCiAvKiBDUFUgLyBBTUJBIEJVUyBjb25maWd1cmF0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvZ3JzaW0uaCBiL2luY2x1ZGUvY29uZmlncy9ncnNpbS5oCmluZGV4IDJkOTc3Y2UuLjU1NmM3NDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9ncnNpbS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9ncnNpbS5oCkBAIC0yNCw4ICsyNCw2IEBACiAgKgogICovCiAKLSNkZWZpbmUgQ09ORklHX0xFT04zCQkJLyogVGhpcyBpcyBhbiBMRU9OMyBDUFUgKi8KLSNkZWZpbmUgQ09ORklHX0xFT04JCTEJLyogVGhpcyBpcyBhbiBMRU9OIENQVSAqLwogI2RlZmluZSBDT05GSUdfR1JTSU0JCTAJLyogLi4uIG5vdCBydW5uaW5nIG9uIEdSU0lNICovCiAjZGVmaW5lIENPTkZJR19UU0lNCQkxCS8qIC4uLiBydW5uaW5nIG9uIFRTSU0gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2dyc2ltX2xlb24yLmggYi9pbmNsdWRlL2NvbmZpZ3MvZ3JzaW1fbGVvbjIuaAppbmRleCAzNmViYWY3Li44YmU5ODk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvZ3JzaW1fbGVvbjIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvZ3JzaW1fbGVvbjIuaApAQCAtMjMsOCArMjMsNiBAQAogICoKICAqLwogCi0jZGVmaW5lIENPTkZJR19MRU9OMgkJLyogVGhpcyBpcyBhbiBMRU9OMiBDUFUgKi8KLSNkZWZpbmUgQ09ORklHX0xFT04JCTEJLyogVGhpcyBpcyBhbiBMRU9OIENQVSAqLwogI2RlZmluZSBDT05GSUdfR1JTSU0JCTAJLyogLi4uIG5vdCBydW5uaW5nIG9uIEdSU0lNICovCiAjZGVmaW5lIENPTkZJR19UU0lNCQkxCS8qIC4uLiBydW5uaW5nIG9uIFRTSU0gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2lkczgzMTMuaCBiL2luY2x1ZGUvY29uZmlncy9pZHM4MzEzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzZjdlMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9pZHM4MzEzLmgKQEAgLTAsMCArMSw1ODcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMTMKKyAqIEhlaWtvIFNjaG9jaGVyLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBoc0BkZW54LmRlLgorICoKKyAqIEJhc2VkIG9uOgorICogQ29weXJpZ2h0IChjKSAyMDExIElEUyBHbWJILCBHZXJtYW55CisgKiBTZXJnZWogU3RlcGFub3YgPHN0ZUBpZHMuZGU+CisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX01QQzgzMXgKKyNkZWZpbmUgQ09ORklHX01QQzgzMTMKKyNkZWZpbmUgQ09ORklHX0lEUzgzMTMKKworI2RlZmluZSBDT05GSUdfRlNMX0VMQkMKKworI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IKKworI2RlZmluZSBDT05GSUdfQVVUT0JPT1RfS0VZRUQKKyNkZWZpbmUgQ09ORklHX0FVVE9CT09UX1BST01QVAlcCisJIlxuRW50ZXIgcGFzc3dvcmQgLSBhdXRvYm9vdCBpbiAlZCBzZWNvbmRzLi4uXG4iLCBDT05GSUdfQk9PVERFTEFZCisjZGVmaW5lIENPTkZJR19BVVRPQk9PVF9ERUxBWV9TVFIJImlkcyIKKyNkZWZpbmUgQ09ORklHX0JPT1RfUkVUUllfVElNRQkJOTAwCisjZGVmaW5lIENPTkZJR19CT09UX1JFVFJZX01JTgkJMzAKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkJMQorI2RlZmluZSBDT05GSUdfUkVTRVRfVE9fUkVUUlkKKworI2RlZmluZSBDT05GSUdfODNYWF9DTEtJTgkJNjYwMDAwMDAJLyogaW4gSHogKi8KKyNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQkJQ09ORklHXzgzWFhfQ0xLSU4KKworI2RlZmluZSBDT05GSUdfU1lTX0lNTVIJCTB4RjAwMDAwMDAKKworI2RlZmluZSBDT05GSUdfU1lTX0FDUl9QSVBFX0RFUAkzCS8qIEFyYml0ZXIgcGlwZWxpbmUgZGVwdGggKDAtMykgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19BQ1JfUlBUQ05UCQkzCS8qIEFyYml0ZXIgcmVwZWF0IGNvdW50ICgwLTcpICovCisKKy8qCisgKiBIYXJkd2FyZSBSZXNldCBDb25maWd1cmF0aW9uIFdvcmQKKyAqIGlmIENMS0lOIGlzIDY2LjAwME1IeiwgdGhlbgorICogQ1NCID0gMTMyTUh6LCBDT1JFID0gMjY0TUh6LCBERFJDID0gMjY0TUh6LCBMQkMgPSAxMzJNSHoKKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0hSQ1dfTE9XICgweDIwMDAwMDAwIC8qIHJlc2VydmVkLCBtdXN0IGJlIHNldCAqLyB8XAorCQkJICAgICBIUkNXTF9ERFJfVE9fU0NCX0NMS18yWDEgfFwKKwkJCSAgICAgSFJDV0xfQ1NCX1RPX0NMS0lOXzJYMSB8XAorCQkJICAgICBIUkNXTF9DT1JFX1RPX0NTQl8yWDEpCisKKyNkZWZpbmUgQ09ORklHX1NZU19IUkNXX0hJR0gJKEhSQ1dIX1BDSV9IT1NUIHxcCisJCQkJIEhSQ1dIX0NPUkVfRU5BQkxFIHxcCisJCQkJIEhSQ1dIX0ZST01fMFhGRkYwMDEwMCB8XAorCQkJCSBIUkNXSF9CT09UU0VRX0RJU0FCTEUgfFwKKwkJCQkgSFJDV0hfU1dfV0FUQ0hET0dfRElTQUJMRSB8XAorCQkJCSBIUkNXSF9ST01fTE9DX0xPQ0FMXzhCSVQgfFwKKwkJCQkgSFJDV0hfUkxfRVhUX0xFR0FDWSB8XAorCQkJCSBIUkNXSF9UU0VDMU1fSU5fTUlJIHxcCisJCQkJIEhSQ1dIX1RTRUMyTV9JTl9NSUkgfFwKKwkJCQkgSFJDV0hfQklHX0VORElBTikKKworI2RlZmluZSBDT05GSUdfU1lTX1NJQ1JICTB4MDAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19TSUNSTAkoU0lDUkxfTEJDIHwgU0lDUkxfU1BJX0QpCisKKyNkZWZpbmUgQ09ORklHX0hXQ09ORklHCisKKyNkZWZpbmUgQ09ORklHX1NZU19ISUQwX0lOSVQJMHgwMDAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19ISUQwX0ZJTkFMCShISUQwX0VOQUJMRV9NQUNISU5FX0NIRUNLIHxcCisJCQkJIEhJRDBfRU5BQkxFX0lOU1RSVUNUSU9OX0NBQ0hFIHxcCisJCQkJIEhJRDBfRElTQUJMRV9EWU5BTUlDX1BPV0VSX01BTkFHTUVOVCkKKworI2RlZmluZSBDT05GSUdfU1lTX0hJRDIJKEhJRDJfSEJFIHwgMHgwMDAyMDAwMCkKKworLyoKKyAqIERlZmluaXRpb25zIGZvciBpbml0aWFsIHN0YWNrIHBvaW50ZXIgYW5kIGRhdGEgYXJlYSAoaW4gRENBQ0hFICkKKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX0xPQ0sKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9BRERSCTB4RkQwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9TSVpFCTB4MTAwMCAgLyogRW5kIG9mIHVzZWQgYXJlYSBpbiBEUFJBTSAqLworI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUJMHgxMDAKKyNkZWZpbmUgQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQJKENPTkZJR19TWVNfSU5JVF9SQU1fU0laRSBcCisJCQkJCSAtIENPTkZJR19TWVNfR0JMX0RBVEFfU0laRSkKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX09GRlNFVAlDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAorCisvKgorICogTG9jYWwgQnVzIExDUlIgYW5kIExCQ1IgcmVncworICovCisjZGVmaW5lIENPTkZJR19TWVNfTENSUl9FQURDCQlMQ1JSX0VBRENfMQorI2RlZmluZSBDT05GSUdfU1lTX0xDUlJfQ0xLRElWCQlMQ1JSX0NMS0RJVl8yCisjZGVmaW5lIENPTkZJR19TWVNfTEJDX0xCQ1IJCSgweDAwMDQwMDAwIHxcCisJCQkJCSAoMHhGRiA8PCBMQkNSX0JNVF9TSElGVCkgfFwKKwkJCQkJIDB4RikKKworI2RlZmluZSBDT05GSUdfU1lTX0xCQ19NUlRQUgkJMHgyMDAwMDAwMAorCisvKgorICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKKyAqLworLyoKKyAqIEREUiBTZXR1cAorICovCisjZGVmaW5lIENPTkZJR19TWVNfRERSX0JBU0UJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9CQVNFCQlDT05GSUdfU1lTX0REUl9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfRERSX1NEUkFNX0JBU0UJQ09ORklHX1NZU19ERFJfQkFTRQorCisvKgorICogTWFudWFsbHkgc2V0IHVwIEREUiBwYXJhbWV0ZXJzLAorICogYXMgdGhpcyBib2FyZCBoYXMgbm90IHRoZSBTUEQgY29ubmVjdGVkIHRvIEkyQy4KKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0REUl9TSVpFCQkyNTYJCS8qIE1CICovCisjZGVmaW5lIENPTkZJR19TWVNfRERSX0NPTkZJRwkJKENTQ09ORklHX0VOIHxcCisJCQkJCSAweDAwMDEwMDAwIHxcCisJCQkJCSBDU0NPTkZJR19ST1dfQklUXzEzIHxcCisJCQkJCSBDU0NPTkZJR19DT0xfQklUXzEwKQorCisjZGVmaW5lIENPTkZJR19TWVNfRERSX0NPTkZJR18yNTYJKENPTkZJR19TWVNfRERSX0NPTkZJRyB8IFwKKwkJCQkJIENTQ09ORklHX0JBTktfQklUXzMpCisKKyNkZWZpbmUgQ09ORklHX1NZU19ERFJfVElNSU5HXzMJKDEgPDwgMTYpCS8qIGV4dCByZWZyZWMgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19ERFJfVElNSU5HXzAJKCgzIDw8IFRJTUlOR19DRkcwX1JXVF9TSElGVCkgfFwKKwkJCQkoMyA8PCBUSU1JTkdfQ0ZHMF9XUlRfU0hJRlQpIHxcCisJCQkJKDMgPDwgVElNSU5HX0NGRzBfUlJUX1NISUZUKSB8XAorCQkJCSgzIDw8IFRJTUlOR19DRkcwX1dXVF9TSElGVCkgfFwKKwkJCQkoNiA8PCBUSU1JTkdfQ0ZHMF9BQ1RfUERfRVhJVF9TSElGVCkgfFwKKwkJCQkoMiA8PCBUSU1JTkdfQ0ZHMF9QUkVfUERfRVhJVF9TSElGVCkgfFwKKwkJCQkoOCA8PCBUSU1JTkdfQ0ZHMF9PRFRfUERfRVhJVF9TSElGVCkgfCBcCisJCQkJKDIgPDwgVElNSU5HX0NGRzBfTVJTX0NZQ19TSElGVCkpCisjZGVmaW5lIENPTkZJR19TWVNfRERSX1RJTUlOR18xCSgoNCA8PCBUSU1JTkdfQ0ZHMV9QUkVUT0FDVF9TSElGVCkgfFwKKwkJCQkoMTIgPDwgVElNSU5HX0NGRzFfQUNUVE9QUkVfU0hJRlQpIHxcCisJCQkJKDQgPDwgVElNSU5HX0NGRzFfQUNUVE9SV19TSElGVCkgfFwKKwkJCQkoNyA8PCBUSU1JTkdfQ0ZHMV9DQVNMQVRfU0hJRlQpIHxcCisJCQkJKDQgPDwgVElNSU5HX0NGRzFfUkVGUkVDX1NISUZUKSB8XAorCQkJCSg0IDw8IFRJTUlOR19DRkcxX1dSUkVDX1NISUZUKSB8XAorCQkJCSgyIDw8IFRJTUlOR19DRkcxX0FDVFRPQUNUX1NISUZUKSB8XAorCQkJCSgyIDw8IFRJTUlOR19DRkcxX1dSVE9SRF9TSElGVCkpCisjZGVmaW5lIENPTkZJR19TWVNfRERSX1RJTUlOR18yCSgoMSA8PCBUSU1JTkdfQ0ZHMl9BRERfTEFUX1NISUZUKSB8XAorCQkJCSg1IDw8IFRJTUlOR19DRkcyX0NQT19TSElGVCkgfFwKKwkJCQkoNCA8PCBUSU1JTkdfQ0ZHMl9XUl9MQVRfREVMQVlfU0hJRlQpIHxcCisJCQkJKDIgPDwgVElNSU5HX0NGRzJfUkRfVE9fUFJFX1NISUZUKSB8XAorCQkJCSgwIDw8IFRJTUlOR19DRkcyX1dSX0RBVEFfREVMQVlfU0hJRlQpIHxcCisJCQkJKDEgPDwgVElNSU5HX0NGRzJfQ0tFX1BMU19TSElGVCkgfFwKKwkJCQkoNiA8PCBUSU1JTkdfQ0ZHMl9GT1VSX0FDVF9TSElGVCkpCisKKyNkZWZpbmUgQ09ORklHX1NZU19ERFJfSU5URVJWQUwJKCgweDgwMCA8PCBTRFJBTV9JTlRFUlZBTF9SRUZJTlRfU0hJRlQpIHxcCisJCQkJKDB4ODAwIDw8IFNEUkFNX0lOVEVSVkFMX0JTVE9QUkVfU0hJRlQpKQorCisjZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fQ0ZHCQkoU0RSQU1fQ0ZHX1NSRU4gfFwKKwkJCQkJIFNEUkFNX0NGR18yVF9FTiB8IFNEUkFNX0NGR19IU0UgfFwKKwkJCQkJIFNEUkFNX0NGR19EQldfMzIgfFwKKwkJCQkJIFNEUkFNX0NGR19TRFJBTV9UWVBFX0REUjIpCisKKyNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9DRkcyCQkweDAwNDAxMDAwCisjZGVmaW5lIENPTkZJR19TWVNfRERSX01PREUJCSgoMHgwNDQ4IDw8IFNEUkFNX01PREVfRVNEX1NISUZUKSB8XAorCQkJCQkgKDB4MDI0MiA8PCBTRFJBTV9NT0RFX1NEX1NISUZUKSkKKyNkZWZpbmUgQ09ORklHX1NZU19ERFJfTU9ERV8yCQkweDAwMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfRERSX0NMS19DTlRMCUREUl9TRFJBTV9DTEtfQ05UTF9DTEtfQURKVVNUXzA3NQorI2RlZmluZSBDT05GSUdfU1lTX0REUkNEUl9WQUxVRQkoRERSQ0RSX0VOIHxcCisJCQkJCSBERFJDRFJfUFpfTk9NWiB8XAorCQkJCQkgRERSQ0RSX05aX05PTVogfFwKKwkJCQkJIEREUkNEUl9PRFQgfFwKKwkJCQkJIEREUkNEUl9NX09EUiB8XAorCQkJCQkgRERSQ0RSX1FfRFJOKQorCisvKgorICogb24tYm9hcmQgZGV2aWNlcworICovCisjZGVmaW5lIENPTkZJR19UU0VDMQorI2RlZmluZSBDT05GSUdfVFNFQzIKKyNkZWZpbmUgQ09ORklHX1RTRUNfRU5FVAorI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCisjZGVmaW5lIENPTkZJR19IQVJEX1NQSQorI2RlZmluZSBDT05GSUdfSEFSRF9JMkMKKworLyoKKyAqIE5PUiBGTEFTSCBzZXR1cAorICovCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQ0ZJCisjZGVmaW5lIENPTkZJR19GTEFTSF9DRklfRFJJVkVSCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQ0ZJX1dJRFRICUZMQVNIX0NGSV84QklUCisjZGVmaW5lIENPTkZJR19GTEFTSF9TSE9XX1BST0dSRVNTCTUwCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfVVNFX0JVRkZFUl9XUklURQorCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRQkJMHhGRjgwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1NJWkUJCTgKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9QUk9URUNUSU9OCisKKyNkZWZpbmUgQ09ORklHX1NZU19MQkxBV0JBUjBfUFJFTElNCUNPTkZJR19TWVNfRkxBU0hfQkFTRQorI2RlZmluZSBDT05GSUdfU1lTX0xCTEFXQVIwX1BSRUxJTQkweDgwMDAwMDE2CisKKyNkZWZpbmUgQ09ORklHX1NZU19CUjBfUFJFTElNCQkoQ09ORklHX1NZU19GTEFTSF9CQVNFIHxcCisJCQkJCSBCUl9QU184IHxcCisJCQkJCSBCUl9NU19HUENNIHxcCisJCQkJCSBCUl9WKQorCisjZGVmaW5lIENPTkZJR19TWVNfT1IwX1BSRUxJTQkJKE1FR19UT19BTShDT05GSUdfU1lTX0ZMQVNIX1NJWkUpIHxcCisJCQkJCSBPUl9HUENNX1NDWV8xMCB8XAorCQkJCQkgT1JfR1BDTV9FSFRSIHxcCisJCQkJCSBPUl9HUENNX1RSTFggfFwKKwkJCQkJIE9SX0dQQ01fQ1NOVCB8XAorCQkJCQkgT1JfR1BDTV9FQUQpCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTCTEKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVAkxMjgKKworI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQJNjAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUCTUwMAorCisvKgorICogTkFORCBGTEFTSCBzZXR1cAorICovCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9CQVNFCQkweEUxMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFCTEKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX01BWF9DSElQUwkxCisjZGVmaW5lIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUKKyNkZWZpbmUgQ09ORklHX05BTkRfRlNMX0VMQkMKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1BBR0VfU0laRQkoMjA0OCkKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0JMT0NLX1NJWkUJKDEyOCA8PCAxMCkKKyNkZWZpbmUgTkFORF9DQUNIRV9QQUdFUwkJNjQKKworI2RlZmluZSBDT05GSUdfU1lTX0xCTEFXQkFSMV9QUkVMSU0JQ09ORklHX1NZU19OQU5EX0JBU0UKKyNkZWZpbmUgQ09ORklHX1NZU19MQkxBV0FSMV9QUkVMSU0JMHg4MDAwMDAwRQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfTEJMQVdCQVJfUFJFTElNIENPTkZJR19TWVNfTEJMQVdCQVIxX1BSRUxJTQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfTEJMQVdBUl9QUkVMSU0JQ09ORklHX1NZU19MQkxBV0FSMV9QUkVMSU0KKworI2RlZmluZSBDT05GSUdfU1lTX0JSMV9QUkVMSU0JKChDT05GSUdfU1lTX05BTkRfQkFTRSkgfFwKKwkJCQkgKDI8PEJSX0RFQ0NfU0hJRlQpIHxcCisJCQkJIEJSX1BTXzggfFwKKwkJCQkgQlJfTVNfRkNNIHxcCisJCQkJIEJSX1YpCisKKyNkZWZpbmUgQ09ORklHX1NZU19PUjFfUFJFTElNCSgweEZGRkY4MDAwIHxcCisJCQkJIE9SX0ZDTV9QR1MgfFwKKwkJCQkgT1JfRkNNX0NTQ1QgfFwKKwkJCQkgT1JfRkNNX0NTVCB8XAorCQkJCSBPUl9GQ01fQ0hUIHxcCisJCQkJIE9SX0ZDTV9TQ1lfNCB8XAorCQkJCSBPUl9GQ01fVFJMWCB8XAorCQkJCSBPUl9GQ01fRUhUUiB8XAorCQkJCSBPUl9GQ01fUlNUKQorCisvKgorICogTVJBTSBzZXR1cAorICovCisjZGVmaW5lIENPTkZJR19TWVNfTVJBTV9CQVNFCQkweEUyMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfTVJBTV9TSVpFCQkweDIwMDAwCS8qIDEyOCBLYiAqLworI2RlZmluZSBDT05GSUdfU1lTX0xCTEFXQkFSMl9QUkVMSU0JQ09ORklHX1NZU19NUkFNX0JBU0UKKyNkZWZpbmUgQ09ORklHX1NZU19MQkxBV0FSMl9QUkVMSU0JMHg4MDAwMDAxMAkvKiAxMjggS2IgICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19PUl9USU1JTkdfTVJBTQorCisjZGVmaW5lIENPTkZJR19TWVNfQlIyX1BSRUxJTQkJKENPTkZJR19TWVNfTVJBTV9CQVNFIHxcCisJCQkJCSBCUl9QU184IHxcCisJCQkJCSBCUl9NU19HUENNIHxcCisJCQkJCSBCUl9WKQorCisjZGVmaW5lIENPTkZJR19TWVNfT1IyX1BSRUxJTQkJMHhGRkZFMEM3NAorCisvKgorICogQ1BMRCBzZXR1cAorICovCisjZGVmaW5lIENPTkZJR19TWVNfQ1BMRF9CQVNFCQkweEUzMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfQ1BMRF9TSVpFCQkweDgwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19MQkxBV0JBUjNfUFJFTElNCUNPTkZJR19TWVNfQ1BMRF9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfTEJMQVdBUjNfUFJFTElNCTB4ODAwMDAwMEUKKworI2RlZmluZSBDT05GSUdfU1lTX09SX1RJTUlOR19NUkFNCisKKyNkZWZpbmUgQ09ORklHX1NZU19CUjNfUFJFTElNCQkoQ09ORklHX1NZU19DUExEX0JBU0UgfFwKKwkJCQkJIEJSX1BTXzggfFwKKwkJCQkJIEJSX01TX0dQQ00gfFwKKwkJCQkJIEJSX1YpCisKKyNkZWZpbmUgQ09ORklHX1NZU19PUjNfUFJFTElNCQkweEZGRkY4ODE0CisKKy8qCisgKiBIVy1XYXRjaGRvZworICovCisjZGVmaW5lIENPTkZJR19XQVRDSERPRwkJMQorI2RlZmluZSBDT05GSUdfU1lTX1dBVENIRE9HX1ZBTFVFCTB4RkZGRgorCisvKgorICogSTJDIHNldHVwCisgKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9JMkMKKyNkZWZpbmUgQ09ORklHX1NZU19JMkMKKyNkZWZpbmUgQ09ORklHX1NZU19JMkNfRlNMCisjZGVmaW5lIENPTkZJR19TWVNfRlNMX0kyQ19TUEVFRAk0MDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19GU0xfSTJDX1NMQVZFCTB4N0YKKyNkZWZpbmUgQ09ORklHX1NZU19GU0xfSTJDX09GRlNFVAkweDMxMDAKKyNkZWZpbmUgQ09ORklHX1JUQ19QQ0Y4NTYzCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX1JUQ19BRERSCTB4NTEKKworLyoKKyAqIFNQSSBzZXR1cAorICovCisjaWZkZWYgQ09ORklHX0hBUkRfU1BJCisjZGVmaW5lIENPTkZJR19NUEM4WFhYX1NQSQorI2RlZmluZSBDT05GSUdfQ01EX1NQSQorI2RlZmluZSBDT05GSUdfU1lTX0dQSU8xX1BSRUxJTQorI2RlZmluZSBDT05GSUdfU1lTX0dQSU8xX0RJUgkJMHgwMDAwMDAwMQorI2RlZmluZSBDT05GSUdfU1lTX0dQSU8xX0RBVAkJMHgwMDAwMDAwMQorI2VuZGlmCisKKy8qCisgKiBFdGhlcm5ldCBzZXR1cAorICovCisjaWZkZWYgQ09ORklHX1RTRUMxCisjZGVmaW5lIENPTkZJR19IQVNfRVRIMAorI2RlZmluZSBDT05GSUdfVFNFQzFfTkFNRQkJIlRTRUMwIgorI2RlZmluZSBDT05GSUdfU1lTX1RTRUMxX09GRlNFVAkweDI0MDAwCisjZGVmaW5lIFRTRUMxX1BIWV9BRERSCQkJMHgxCisjZGVmaW5lIFRTRUMxX0ZMQUdTCQkJVFNFQ19HSUdBQklUCisjZGVmaW5lIFRTRUMxX1BIWUlEWAkJCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RTRUMyCisjZGVmaW5lIENPTkZJR19IQVNfRVRIMQorI2RlZmluZSBDT05GSUdfVFNFQzJfTkFNRQkJIlRTRUMxIgorI2RlZmluZSBDT05GSUdfU1lTX1RTRUMyX09GRlNFVAkweDI1MDAwCisjZGVmaW5lIFRTRUMyX1BIWV9BRERSCQkJMHgzCisjZGVmaW5lIFRTRUMyX0ZMQUdTCQkJVFNFQ19HSUdBQklUCisjZGVmaW5lIFRTRUMyX1BIWUlEWAkJCTAKKyNlbmRpZgorI2RlZmluZSBDT05GSUdfRVRIUFJJTUUJCSJUU0VDMSIKKworLyoKKyAqIFNlcmlhbCBQb3J0CisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVgJCTEKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1JFR19TSVpFCTEKKworI2RlZmluZSBDT05GSUdfU1lTX0JBVURSQVRFX1RBQkxFCVwKKwl7MzAwLCA2MDAsIDEyMDAsIDI0MDAsIDQ4MDAsIDk2MDAsIDE5MjAwLCAzODQwMCwgMTE1MjAwfQorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ09NMQkoQ09ORklHX1NZU19JTU1SICsgMHg0NTAwKQorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ09NMgkoQ09ORklHX1NZU19JTU1SICsgMHg0NjAwKQorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ0xLCQkoQ09ORklHXzgzWFhfQ0xLSU4gKiAyKQorCisjZGVmaW5lIENPTkZJR19IQVNfRlNMX0RSX1VTQgorI2RlZmluZSBDT05GSUdfU1lTX1NDQ1JfVVNCRFJDTQkzCisKKy8qCisgKiBCQVQncworICovCisjZGVmaW5lIENPTkZJR19ISUdIX0JBVFMKKworLyogRERSIEAgMHgwMDAwMDAwMCAqLworI2RlZmluZSBDT05GSUdfU1lTX0lCQVQwTAkJKENPTkZJR19TWVNfU0RSQU1fQkFTRSB8XAorCQkJCQkgQkFUTF9QUF8xMCkKKyNkZWZpbmUgQ09ORklHX1NZU19JQkFUMFUJCShDT05GSUdfU1lTX1NEUkFNX0JBU0UgfFwKKwkJCQkJIEJBVFVfQkxfMjU2TSB8XAorCQkJCQkgQkFUVV9WUyB8XAorCQkJCQkgQkFUVV9WUCkKKyNkZWZpbmUgQ09ORklHX1NZU19EQkFUMEwJCUNPTkZJR19TWVNfSUJBVDBMCisjZGVmaW5lIENPTkZJR19TWVNfREJBVDBVCQlDT05GSUdfU1lTX0lCQVQwVQorCisvKiBJbml0aWFsIFJBTSBAIDB4RkQwMDAwMDAgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19JQkFUMUwJCShDT05GSUdfU1lTX0lOSVRfUkFNX0FERFIgfFwKKwkJCQkJIEJBVExfUFBfMTAgfFwKKwkJCQkJIEJBVExfR1VBUkRFRFNUT1JBR0UpCisjZGVmaW5lIENPTkZJR19TWVNfSUJBVDFVCQkoQ09ORklHX1NZU19JTklUX1JBTV9BRERSIHxcCisJCQkJCSBCQVRVX0JMXzI1NksgfFwKKwkJCQkJIEJBVFVfVlMgfFwKKwkJCQkJIEJBVFVfVlApCisjZGVmaW5lIENPTkZJR19TWVNfREJBVDFMCQlDT05GSUdfU1lTX0lCQVQxTAorI2RlZmluZSBDT05GSUdfU1lTX0RCQVQxVQkJQ09ORklHX1NZU19JQkFUMVUKKworLyogRkxBU0ggQCAweEZGODAwMDAwICovCisjZGVmaW5lIENPTkZJR19TWVNfSUJBVDJMCQkoQ09ORklHX1NZU19GTEFTSF9CQVNFIHxcCisJCQkJCSBCQVRMX1BQXzEwIHxcCisJCQkJCSBCQVRMX0dVQVJERURTVE9SQUdFKQorI2RlZmluZSBDT05GSUdfU1lTX0lCQVQyVQkJKENPTkZJR19TWVNfRkxBU0hfQkFTRSB8XAorCQkJCQkgQkFUVV9CTF84TSB8XAorCQkJCQkgQkFUVV9WUyB8XAorCQkJCQkgQkFUVV9WUCkKKyNkZWZpbmUgQ09ORklHX1NZU19EQkFUMkwJCShDT05GSUdfU1lTX0ZMQVNIX0JBU0UgfFwKKwkJCQkJIEJBVExfUFBfMTAgfFwKKwkJCQkJIEJBVExfQ0FDSEVJTkhJQklUIHxcCisJCQkJCSBCQVRMX0dVQVJERURTVE9SQUdFKQorI2RlZmluZSBDT05GSUdfU1lTX0RCQVQyVQkJQ09ORklHX1NZU19JQkFUMlUKKworI2RlZmluZSBDT05GSUdfU1lTX0lCQVQzTAkJKDApCisjZGVmaW5lIENPTkZJR19TWVNfSUJBVDNVCQkoMCkKKyNkZWZpbmUgQ09ORklHX1NZU19EQkFUM0wJCUNPTkZJR19TWVNfSUJBVDNMCisjZGVmaW5lIENPTkZJR19TWVNfREJBVDNVCQlDT05GSUdfU1lTX0lCQVQzVQorCisjZGVmaW5lIENPTkZJR19TWVNfSUJBVDRMCQkoMCkKKyNkZWZpbmUgQ09ORklHX1NZU19JQkFUNFUJCSgwKQorI2RlZmluZSBDT05GSUdfU1lTX0RCQVQ0TAkJQ09ORklHX1NZU19JQkFUNEwKKyNkZWZpbmUgQ09ORklHX1NZU19EQkFUNFUJCUNPTkZJR19TWVNfSUJBVDRVCisKKy8qIElNTVJCQVIgQCAweEYwMDAwMDAwICovCisjZGVmaW5lIENPTkZJR19TWVNfSUJBVDVMCQkoQ09ORklHX1NZU19JTU1SIHxcCisJCQkJCSBCQVRMX1BQXzEwIHxcCisJCQkJCSBCQVRMX0NBQ0hFSU5ISUJJVCB8XAorCQkJCQkgQkFUTF9HVUFSREVEU1RPUkFHRSkKKyNkZWZpbmUgQ09ORklHX1NZU19JQkFUNVUJCShDT05GSUdfU1lTX0lNTVIgfFwKKwkJCQkJIEJBVFVfQkxfMTI4TSB8XAorCQkJCQkgQkFUVV9WUyB8XAorCQkJCQkgQkFUVV9WUCkKKyNkZWZpbmUgQ09ORklHX1NZU19EQkFUNUwJCUNPTkZJR19TWVNfSUJBVDVMCisjZGVmaW5lIENPTkZJR19TWVNfREJBVDVVCQlDT05GSUdfU1lTX0lCQVQ1VQorCisvKiBOQU5ELUZsYXNoIEAgMHhFMTAwMDAwMCwgTVJBTSBAIDB4RTIwMDAwMDAsIENQTEQgQCAweEUzMDAwMDAwICovCisjZGVmaW5lIENPTkZJR19TWVNfSUJBVDZMCQkoMHhFMDAwMDAwMCB8XAorCQkJCQkgQkFUTF9QUF8xMCB8XAorCQkJCQkgQkFUTF9HVUFSREVEU1RPUkFHRSkKKyNkZWZpbmUgQ09ORklHX1NZU19JQkFUNlUJCSgweEUwMDAwMDAwIHxcCisJCQkJCSBCQVRVX0JMXzI1Nk0gfFwKKwkJCQkJIEJBVFVfVlMgfFwKKwkJCQkJIEJBVFVfVlApCisjZGVmaW5lIENPTkZJR19TWVNfREJBVDZMCQlDT05GSUdfU1lTX0lCQVQ2TAorI2RlZmluZSBDT05GSUdfU1lTX0RCQVQ2VQkJQ09ORklHX1NZU19JQkFUNlUKKworI2RlZmluZSBDT05GSUdfU1lTX0lCQVQ3TAkJKDApCisjZGVmaW5lIENPTkZJR19TWVNfSUJBVDdVCQkoMCkKKyNkZWZpbmUgQ09ORklHX1NZU19EQkFUN0wJCUNPTkZJR19TWVNfSUJBVDdMCisjZGVmaW5lIENPTkZJR19TWVNfREJBVDdVCQlDT05GSUdfU1lTX0lCQVQ3VQorCisvKgorICogVS1Cb290IGVudmlyb25tZW50IHNldHVwCisgKi8KKyNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KKworI2RlZmluZSBDT05GSUdfQ01EX0RIQ1AKKyNkZWZpbmUgQ09ORklHX0NNRF9QSU5HCisjZGVmaW5lIENPTkZJR19DTURfTkZTCisjZGVmaW5lIENPTkZJR19DTURfTkFORAorI2RlZmluZSBDT05GSUdfQ01EX0ZMQVNICisjZGVmaW5lIENPTkZJR19DTURfU05UUAorI2RlZmluZSBDT05GSUdfQ01EX01JSQorI2RlZmluZSBDT05GSUdfQ01EX0RBVEUKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORworI2RlZmluZSBDT05GSUdfQ01EX0VESVRFTlYKKyNkZWZpbmUgQ09ORklHX0NNRF9KRkZTMgorI2RlZmluZSBDT05GSUdfQk9PVFBfU1VCTkVUTUFTSworI2RlZmluZSBDT05GSUdfQk9PVFBfR0FURVdBWQorI2RlZmluZSBDT05GSUdfQk9PVFBfSE9TVE5BTUUKKyNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RQQVRICisjZGVmaW5lIENPTkZJR19CT09UUF9CT09URklMRVNJWkUKKy8qIHBhc3Mgb3BlbiBmaXJtd2FyZSBmbGF0IHRyZWUgKi8KKyNkZWZpbmUgQ09ORklHX09GX0xJQkZEVAorI2RlZmluZSBDT05GSUdfT0ZfQk9BUkRfU0VUVVAKKyNkZWZpbmUgQ09ORklHX09GX1NURE9VVF9WSUFfQUxJQVMKKworLyoKKyAqIFRoZSByZXNlcnZlZCBtZW1vcnkKKyAqLworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQlDT05GSUdfU1lTX1RFWFRfQkFTRQorI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoNzY4ICogMTAyNCkKKyNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoOCAqIDEwMjQgKiAxMDI0KQorCisvKgorICogRW52aXJvbm1lbnQgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fRkxBU0gKKyNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkoQ09ORklHX1NZU19NT05JVE9SX0JBU0UgXAorCQkJCSsgQ09ORklHX1NZU19NT05JVE9SX0xFTikKKyNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkweDIwMDAwCisjZGVmaW5lIENPTkZJR19FTlZfQUREUl9SRURVTkQJKENPTkZJR19FTlZfQUREUiArIENPTkZJR19FTlZfU0laRSkKKyNkZWZpbmUgQ09ORklHX0VOVl9TSVpFX1JFRFVORAkoQ09ORklHX0VOVl9TSVpFKQorCisKKyNkZWZpbmUgQ09ORklHX05FVERFVgkJCWV0aDEKKyNkZWZpbmUgQ09ORklHX0hPU1ROQU1FCQlpZHM4MzEzCisjZGVmaW5lIENPTkZJR19ST09UUEFUSAkJIi9vcHQvZWxkay00LjIvcHBjXzZ4eCIKKyNkZWZpbmUgQ09ORklHX0JPT1RGSUxFCQkiaWRzODMxMy91SW1hZ2UiCisjZGVmaW5lIENPTkZJR19VQk9PVFBBVEgJCSJpZHM4MzEzL3UtYm9vdC5iaW4iCisjZGVmaW5lIENPTkZJR19GRFRGSUxFCQkJImlkczgzMTMvaWRzODMxMy5kdGIiCisjZGVmaW5lIENPTkZJR19MT0FEQUREUgkJMHg0MDAwMDAKKyNkZWZpbmUgQ09ORklHX0NNRF9FTlZfRkxBR1MKKyNkZWZpbmUgQ09ORklHX0VOVl9GTEFHU19MSVNUX1NUQVRJQyAiZXRoYWRkcjptbyxldGgxYWRkcjptbyIKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDT05GSUdfU1lTX0haCQkJMTAwMAorCisvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4Ki8KKyNkZWZpbmUgQ09ORklHX1NZU19CT09UTUFQU1oJCSgyNTYgPDwgMjApCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19MT05HSEVMUAorI2RlZmluZSBDT05GSUdfU1lTX1BST01QVAkJIj0+ICIKKyNkZWZpbmUgQ09ORklHX1NZU19DQlNJWkUJCTEwMjQKKyNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUJCShDT05GSUdfU1lTX0NCU0laRSBcCisJCQkJCSArIHNpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpCisjZGVmaW5lIENPTkZJR19TWVNfTUFYQVJHUwkJMTYKKyNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQkJQ09ORklHX1NZU19DQlNJWkUKKyNkZWZpbmUgQ09ORklHX1NZU19IVVNIX1BBUlNFUgkJLyogdXNlICJodXNoIiBjb21tYW5kIHBhcnNlcgkqLworI2RlZmluZSBDT05GSUdfU1lTX1BST01QVF9IVVNIX1BTMgkiPiAiCisKKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4MDAwMDEwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHgwMEMwMDAwMAorCisjZGVmaW5lIENPTkZJR19TWVNfTE9BRF9BRERSCQkweDEwMDAwMAorI2RlZmluZSBDT05GSUdfTUlJCisjZGVmaW5lIENPTkZJR19MT0FEU19FQ0hPCisjZGVmaW5lIENPTkZJR19USU1FU1RBTVAKKyNkZWZpbmUgQ09ORklHX1BSRUJPT1QJCQkiZWNobzsiIFwKKwkJCQkJImVjaG8gVHlwZSBcXFwicnVuIG5mc2Jvb3RcXFwiICIgXAorCQkJCQkidG8gbW91bnQgcm9vdCBmaWxlc3lzdGVtIG92ZXIgTkZTO2VjaG8iCisjdW5kZWYJQ09ORklHX0JPT1RBUkdTCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkJInJ1biBib290X2NyYW1mcyIKKyN1bmRlZglDT05GSUdfU1lTX0xPQURTX0JBVURfQ0hBTkdFCisKKyNkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQKKyNkZWZpbmUgQ09ORklHX0pGRlMyX0RFVgkJIjAiCisKKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19DTURfTVREUEFSVFMKKyNkZWZpbmUgQ09ORklHX0ZMQVNIX0NGSV9NVEQKKyNkZWZpbmUgQ09ORklHX01URF9ERVZJQ0UKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWZmODAwMDAwLmZsYXNoLG5hbmQwPWUxMDAwMDAwLmZsYXNoIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1mZjgwMDAwMC5mbGFzaDo3bShkdW0pLCIgXAorCQkJCQkiNzY4ayhCT09ULUJJTiksIiBcCisJCQkJCSIxMjhrKEJPT1QtRU5WKSwxMjhrKEJPT1QtUkVERU5WKTsiIFwKKwkJCQkJImUxMDAwMDAwLmZsYXNoOi0odWJpKSIKKworI2RlZmluZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTIFwKKwkibmV0ZGV2PSIgX19zdHJpbmdpZnkoQ09ORklHX05FVERFVikgIlwwIgkJCVwKKwkiZXRocHJpbWU9VFNFQzFcMCIJCQkJCQlcCisJInVib290PSIgX19zdHJpbmdpZnkoQ09ORklHX1VCT09UUEFUSCkgIlwwIgkJCVwKKwkidGZ0cGZsYXNoPXRmdHBib290ICR7bG9hZGFkZHJ9ICR7dWJvb3R9OyAiCQkJXAorCQkicHJvdGVjdCBvZmYgIiBfX3N0cmluZ2lmeShDT05GSUdfU1lTX1RFWFRfQkFTRSkJXAorCQkiICske2ZpbGVzaXplfTsgIgkJCQkJXAorCQkiZXJhc2UgIiBfX3N0cmluZ2lmeShDT05GSUdfU1lTX1RFWFRfQkFTRSkJCVwKKwkJIiArJHtmaWxlc2l6ZX07ICIJCQkJCVwKKwkJImNwLmIgJHtsb2FkYWRkcn0gIiBfX3N0cmluZ2lmeShDT05GSUdfU1lTX1RFWFRfQkFTRSkJXAorCQkiICR7ZmlsZXNpemV9OyAiCQkJCQlcCisJCSJwcm90ZWN0IG9uICIgX19zdHJpbmdpZnkoQ09ORklHX1NZU19URVhUX0JBU0UpCQlcCisJCSIgKyR7ZmlsZXNpemV9OyAiCQkJCQlcCisJCSJjbXAuYiAke2xvYWRhZGRyfSAiIF9fc3RyaW5naWZ5KENPTkZJR19TWVNfVEVYVF9CQVNFKQlcCisJCSIgJHtmaWxlc2l6ZX1cMCIJCQkJCVwKKwkiY29uc29sZT10dHlTMFwwIgkJCQkJCVwKKwkiZmR0YWRkcj0weDc4MDAwMFwwIgkJCQkJCVwKKwkia2VybmVsX2FkZHI9ZmY4MDAwMDBcMCIJCQkJCVwKKwkiZmR0ZmlsZT0iIF9fc3RyaW5naWZ5KENPTkZJR19GRFRGSUxFKSAiXDAiCQkJXAorCSJzZXRib290YXJncz1zZXRlbnYgYm9vdGFyZ3MgIgkJCQkJXAorCQkicm9vdD0ke3Jvb3RkZXZ9IHJ3IGNvbnNvbGU9JHtjb25zb2xlfSwiCQlcCisJCQkiJHtiYXVkcmF0ZX0gJHtvdGhib290YXJnc31cMCIJCQlcCisJInNldGlwYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0ke3Jvb3RkZXZ9IHJ3ICIJCQlcCisJCQkibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofSAiCQlcCisJCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToiCVwKKwkJCSIke25ldG1hc2t9OiR7aG9zdG5hbWV9OiR7bmV0ZGV2fTpvZmYgIgkJXAorCQkJImNvbnNvbGU9JHtjb25zb2xlfSwke2JhdWRyYXRlfSAke290aGJvb3RhcmdzfVwwIiBcCisJImFkZG10ZD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gJHttdGRwYXJ0c31cMCIJCVwKKwkibXRkaWRzPSIgTVRESURTX0RFRkFVTFQgIlwwIgkJCQkJXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIgkJCQlcCisJIlwwIgorCisjZGVmaW5lIENPTkZJR19ORlNCT09UQ09NTUFORAkJCQkJCVwKKwkic2V0ZW52IHJvb3RkZXYgL2Rldi9uZnM7IgkJCQkJXAorCSJydW4gc2V0aXBhcmdzO3J1biBhZGRtdGQ7IgkJCQkJXAorCSJ0ZnRwICR7bG9hZGFkZHJ9ICR7Ym9vdGZpbGV9OyIJCQkJXAorCSJ0ZnRwICR7ZmR0YWRkcn0gJHtmZHRmaWxlfTsiCQkJCQlcCisJImZkdCBhZGRyICR7ZmR0YWRkcn07IgkJCQkJCVwKKwkiYm9vdG0gJHtsb2FkYWRkcn0gLSAke2ZkdGFkZHJ9IgorCisvKiBVQkkgU3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfQ01EX05BTkRfVFJJTUZGUworI2RlZmluZSBDT05GSUdfQ01EX1VCSQorI2RlZmluZSBDT05GSUdfQ01EX1VCSUZTCisjZGVmaW5lIENPTkZJR19SQlRSRUUKKyNkZWZpbmUgQ09ORklHX0xaTworI2RlZmluZSBDT05GSUdfTVREX1BBUlRJVElPTlMKKworLyogYm9vdGNvdW50IHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0JPT1RDT1VOVF9MSU1JVAorI2RlZmluZSBDT05GSUdfQk9PVENPVU5UX0kyQworI2RlZmluZSBDT05GSUdfQk9PVENPVU5UX0FMRU4JMQorI2RlZmluZSBDT05GSUdfU1lTX0JPT1RDT1VOVF9BRERSCTB4OQorCisjZGVmaW5lIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFCisKKyNkZWZpbmUgQ09ORklHX0ZJVAorI2RlZmluZSBDT05GSUdfRklUX1NJR05BVFVSRQorI2RlZmluZSBDT05GSUdfQ01EX0ZEVAorI2RlZmluZSBDT05GSUdfQ01EX0hBU0gKKyNkZWZpbmUgQ09ORklHX1JTQQorI2RlZmluZSBDT05GSUdfU0hBMQorI2RlZmluZSBDT05GSUdfU0hBMjU2CisjZGVmaW5lIENPTkZJR19PRl9DT05UUk9MCisKKyNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvaW5jYWlwLmggYi9pbmNsdWRlL2NvbmZpZ3MvaW5jYWlwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMWQxODQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jb25maWdzL2luY2FpcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNQotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKLSAqLwotCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBJTkNBLUlQIGJvYXJkLgotICovCi0KLSNpZm5kZWYgX19DT05GSUdfSAotI2RlZmluZSBfX0NPTkZJR19ICi0KLSNkZWZpbmUgQ09ORklHX0lOQ0FfSVAJCTEJLyogb24gYSBJTkNBLUlQIEJvYXJkCSovCi0KLSNkZWZpbmUgQ09ORklHX1hXQVlfU1dBUF9CWVRFUwotCi0vKgotICogQ2xvY2sgZm9yIHRoZSBNSVBTIGNvcmUgKE1IeikKLSAqIGFsbG93ZWQgdmFsdWVzOiAxMDAwMDAwMDAsIDEzMzAwMDAwMCwgYW5kIDE1MDAwMDAwMCAoZGVmYXVsdCkKLSAqLwotI2lmbmRlZiBDT05GSUdfQ1BVX0NMT0NLX1JBVEUKLSNkZWZpbmUgQ09ORklHX0NQVV9DTE9DS19SQVRFCTE1MDAwMDAwMAotI2VuZGlmCi0KLSNkZWZpbmUgQ09ORklHX1NZU19YV0FZX0VCVV9CT09UQ0ZHCTB4NDBDNAkvKiBDTVVMVCA9IDggKi8KLQotI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTUJLyogYXV0b2Jvb3QgYWZ0ZXIgNSBzZWNvbmRzCSovCi0KLSNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKLQotI2RlZmluZQlDT05GSUdfVElNRVNUQU1QCQkvKiBQcmludCBpbWFnZSBpbmZvIHdpdGggdGltZXN0YW1wICovCi0KLSNkZWZpbmUgQ09ORklHX1BSRUJPT1QJImVjaG87IglcCi0JImVjaG8gVHlwZSBcXFwicnVuIGZsYXNoX25mc1xcXCIgdG8gbW91bnQgcm9vdCBmaWxlc3lzdGVtIG92ZXIgTkZTOyIgXAotCSJlY2hvIgotCi0jdW5kZWYJQ09ORklHX0JPT1RBUkdTCi0KLSNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQkJXAotCSJuZnNhcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3ICIJCQlcCi0JCSJuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9XDAiCQkJXAotCSJyYW1hcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvcmFtIHJ3XDAiCQkJXAotCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCi0JCSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza30iCVwKLQkJIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmXDAiCQkJCVwKLQkiYWRkbWlzYz1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCi0JCSJjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9ICIJCQkJXAotCQkiZXRoYWRkcj0ke2V0aGFkZHJ9ICIJCQkJCVwKLQkJInBhbmljPTFcMCIJCQkJCQlcCi0JImZsYXNoX25mcz1ydW4gbmZzYXJncyBhZGRpcCBhZGRtaXNjOyIJCQkJXAotCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn1cMCIJCQkJXAotCSJmbGFzaF9zZWxmPXJ1biByYW1hcmdzIGFkZGlwIGFkZG1pc2M7IgkJCQlcCi0JCSJib290bSAke2tlcm5lbF9hZGRyfSAke3JhbWRpc2tfYWRkcn1cMCIJCVwKLQkibmV0X25mcz10ZnRwIDgwNTAwMDAwICR7Ym9vdGZpbGV9OyIJCQkJXAotCQkicnVuIG5mc2FyZ3MgYWRkaXAgYWRkbWlzYztib290bVwwIgkJCVwKLQkicm9vdHBhdGg9L29wdC9lbGRrL21pcHNfNEtDXDAiCQkJCQlcCi0JImJvb3RmaWxlPS90ZnRwYm9vdC9JTkNBL3VJbWFnZVwwIgkJCQlcCi0JImtlcm5lbF9hZGRyPUIwMDQwMDAwXDAiCQkJCQlcCi0JInJhbWRpc2tfYWRkcj1CMDEwMDAwMFwwIgkJCQkJXAotCSJ1LWJvb3Q9L3RmdHBib290L0lOQ0EvdS1ib290LmJpblwwIgkJCQlcCi0JImxvYWQ9dGZ0cCA4MDUwMDAwMCAke3UtYm9vdH1cMCIJCQkJXAotCSJ1cGRhdGU9cHJvdGVjdCBvZmYgMTowLTI7ZXJhIDE6MC0yOyIJCQkJXAotCQkiY3AuYiA4MDUwMDAwMCBCMDAwMDAwMCAke2ZpbGVzaXplfVwwIgkJCVwKLQkiIgotI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJInJ1biBmbGFzaF9zZWxmIgotCi0KLS8qCi0gKiBCT09UUCBvcHRpb25zCi0gKi8KLSNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRQotI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVFBBVEgKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0dBVEVXQVkKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0hPU1ROQU1FCi0KLQotLyoKLSAqIENvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uLgotICovCi0jaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+Ci0KLSNkZWZpbmUgQ09ORklHX0NNRF9BU0tFTlYKLSNkZWZpbmUgQ09ORklHX0NNRF9ESENQCi0jZGVmaW5lIENPTkZJR19DTURfRUxGCi0jZGVmaW5lIENPTkZJR19DTURfSkZGUzIKLSNkZWZpbmUgQ09ORklHX0NNRF9ORlMKLSNkZWZpbmUgQ09ORklHX0NNRF9QSU5HCi0jZGVmaW5lIENPTkZJR19DTURfU05UUAotCi0KLS8qCi0gKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCi0gKi8KLSNkZWZpbmUJQ09ORklHX1NZU19MT05HSEVMUAkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeSAgICAgICovCi0jZGVmaW5lCUNPTkZJR19TWVNfUFJPTVBUCQkiSU5DQS1JUCAjICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAgICAqLwotI2RlZmluZQlDT05GSUdfU1lTX0NCU0laRQkJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAgICovCi0jZGVmaW5lCUNPTkZJR19TWVNfUEJTSVpFIChDT05GSUdfU1lTX0NCU0laRStzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpKzE2KSAgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUJQ09ORklHX1NZU19NQVhBUkdTCQkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJMTI4KjEwMjQKLQotI2RlZmluZSBDT05GSUdfU1lTX0JPT1RQQVJBTVNfTEVOCTEyOCoxMDI0Ci0KLSNkZWZpbmUgQ09ORklHX1NZU19NSVBTX1RJTUVSX0ZSRVEJKGluY2FpcF9nZXRfY3B1Y2xrKCkgLyAyKQotCi0jZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fQkFTRQkJMHg4MDAwMDAwMAotCi0jZGVmaW5lCUNPTkZJR19TWVNfTE9BRF9BRERSCQkweDgwMTAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzCSovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4ODAxMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHg4MDgwMDAwMAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGTEFTSCBhbmQgZW52aXJvbm1lbnQgb3JnYW5pemF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MJMgkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUCSgxMjgpCS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLwotCi0jZGVmaW5lIFBIWVNfRkxBU0hfMQkJMHhiMDAwMDAwMCAvKiBGbGFzaCBCYW5rICMxICovCi0jZGVmaW5lIFBIWVNfRkxBU0hfMgkJMHhiMDgwMDAwMCAvKiBGbGFzaCBCYW5rICMyICovCi0KLS8qIFRoZSBmb2xsb3dpbmcgI2RlZmluZXMgYXJlIG5lZWRlZCB0byBnZXQgZmxhc2ggZW52aXJvbm1lbnQgcmlnaHQgKi8KLSNkZWZpbmUJQ09ORklHX1NZU19NT05JVE9SX0JBU0UJQ09ORklHX1NZU19URVhUX0JBU0UKLSNkZWZpbmUJQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDE5MiA8PCAxMCkKLQotI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfT0ZGU0VUCTB4NDAwMDAwCi0KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQVNFCQlQSFlTX0ZMQVNIXzEKLQotLyogdGltZW91dCB2YWx1ZXMgYXJlIGluIHRpY2tzICovCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVAkoMiAqIENPTkZJR19TWVNfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVAkoMiAqIENPTkZJR19TWVNfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCi0KLSNkZWZpbmUJQ09ORklHX0VOVl9JU19JTl9GTEFTSAkxCi0KLS8qIEFkZHJlc3MgYW5kIHNpemUgb2YgUHJpbWFyeSBFbnZpcm9ubWVudCBTZWN0b3IJKi8KLSNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkweEIwMDMwMDAwCi0jZGVmaW5lIENPTkZJR19FTlZfU0laRQkJMHgxMDAwMAotCi0jZGVmaW5lIENPTkZJR19GTEFTSF8xNkJJVAotCi0jZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEKLQotI2RlZmluZSBDT05GSUdfSU5DQV9JUF9TV0lUQ0gKLSNkZWZpbmUgQ09ORklHX0lOQ0FfSVBfU1dJVENIX0FNRElYCi0KLS8qCi0gKiBKRkZTMiBwYXJ0aXRpb25zCi0gKi8KLS8qIE5vIGNvbW1hbmQgbGluZSwgb25lIHN0YXRpYyBwYXJ0aXRpb24sIHVzZSBhbGwgc3BhY2Ugb24gdGhlIGRldmljZSAqLwotI3VuZGVmIENPTkZJR19DTURfTVREUEFSVFMKLSNkZWZpbmUgQ09ORklHX0pGRlMyX0RFVgkJIm5vcjEiCi0jZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUJCTB4RkZGRkZGRkYKLSNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfT0ZGU0VUCTB4MDAwMDAwMDAKLQotLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KLS8qCi0jZGVmaW5lIENPTkZJR19DTURfTVREUEFSVFMKLSNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPUlOQ0EtSVAgQmFuayAwIgotI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1JTkNBLUlQIEJhbmsgMDoxOTJrKHVib290KSwiIFwKLQkJCQkJCQkiNjRrKGVudiksIiBcCi0JCQkJCQkJIjc2OGsobGludXgpLCIgXAotCQkJCQkJCSIxbUAzbShyb290ZnMpLCIgXAotCQkJCQkJCSI3NjhrKGxpbnV4MiksIiBcCi0JCQkJCQkJIjNtQDVtKHJvb3RmczIpIgotKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2FjaGUgQ29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfRENBQ0hFX1NJWkUJCTQwOTYKLSNkZWZpbmUgQ09ORklHX1NZU19JQ0FDSEVfU0laRQkJNDA5NgotI2RlZmluZSBDT05GSUdfU1lTX0NBQ0hFTElORV9TSVpFCTE2Ci0KLSNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mva20va204MzA5LWNvbW1vbi5oIGIvaW5jbHVkZS9jb25maWdzL2ttL2ttODMwOS1jb21tb24uaAppbmRleCAyOWM2ZjYwLi5jOGRmMjNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mva20va204MzA5LWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9rbS9rbTgzMDktY29tbW9uLmgKQEAgLTI3LDcgKzI3LDcgQEAKIC8qIFFFIG1pY3JvY29kZS9maXJtd2FyZSBhZGRyZXNzICovCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9OT1IKIC8qIGF0IGVuZCBvZiB1Ym9vdCBwYXJ0aXRpb24sIGJlZm9yZSBlbnYgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIgICAweEYwMEIwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfUUVfRldfQUREUiAgIDB4RjAwQjAwMDAKIAogLyoKICAqIFN5c3RlbSBJTyBDb25maWcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9rbS9rbXAyMDR4LWNvbW1vbi5oIGIvaW5jbHVkZS9jb25maWdzL2ttL2ttcDIwNHgtY29tbW9uLmgKaW5kZXggNTgyOTc4YS4uNDE4ZTNkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2ttL2ttcDIwNHgtY29tbW9uLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2ttL2ttcDIwNHgtY29tbW9uLmgKQEAgLTM1MCw3ICszNTAsNyBAQAogICogdWNvZGUgaXMgc3RvcmVkIGFmdGVyIGVudiwgc28gd2UgZ290IDB4MTIwMDAwLgogICovCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRldfSU5fU1BJRkxBU0gKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJMHgxMjAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19GTUFOX0ZXX0FERFIJMHgxMjAwMDAKICNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0xFTkdUSAkweDEwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfRkRUX1BBRAkJKDB4MzAwMCArIENPTkZJR19TWVNfUUVfRk1BTl9GV19MRU5HVEgpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9sdWJib2NrLmggYi9pbmNsdWRlL2NvbmZpZ3MvbHViYm9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmZlMTY1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY29uZmlncy9sdWJib2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzYgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogS3lsZSBIYXJyaXMsIE5leHVzIFRlY2hub2xvZ2llcywgSW5jLiBraGFycmlzQG5leHVzLXRlY2gubmV0Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KLSAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KLSAqCi0gKiBDb25maWd1YXRpb24gc2V0dGluZ3MgZm9yIHRoZSBMVUJCT0NLIGJvYXJkLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpZm5kZWYgX19DT05GSUdfSAotI2RlZmluZSBfX0NPTkZJR19ICi0KLS8qCi0gKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwotICogKGVhc3kgdG8gY2hhbmdlKQotICovCi0jZGVmaW5lIENPTkZJR19DUFVfUFhBMjVYCQkxCS8qIFRoaXMgaXMgYW4gUFhBMjUwIENQVSAgICAqLwotI2RlZmluZSBDT05GSUdfTFVCQk9DSwkJMQkvKiBvbiBhbiBMVUJCT0NLIEJvYXJkCSAgICAqLwotI2RlZmluZSBDT05GSUdfTENECQkxCi0jaWZkZWYgQ09ORklHX0xDRAotI2RlZmluZSBDT05GSUdfUFhBX0xDRAotI2RlZmluZSBDT05GSUdfU0hBUlBfTE04VjMxCi0jZW5kaWYKLSNkZWZpbmUgQ09ORklHX01NQwotI2RlZmluZSBDT05GSUdfQk9BUkRfTEFURV9JTklUCi0jZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCi0jZGVmaW5lCUNPTkZJR19TWVNfVEVYVF9CQVNFCTB4MAotCi0vKiB3ZSB3aWxsIG5ldmVyIGVuYWJsZSBkY2FjaGUsIGJlY2F1c2Ugd2UgaGF2ZSB0byBzZXR1cCBNTVUgZmlyc3QgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19EQ0FDSEVfT0ZGCi0KLS8qCi0gKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JICAgIChDT05GSUdfRU5WX1NJWkUgKyAxMjgqMTAyNCkKLQotLyoKLSAqIEhhcmR3YXJlIGRyaXZlcnMKLSAqLwotI2RlZmluZSBDT05GSUdfTEFOOTFDOTYKLSNkZWZpbmUgQ09ORklHX0xBTjkxQzk2X0JBU0UgMHgwQzAwMDAwMAotCi0vKgotICogc2VsZWN0IHNlcmlhbCBjb25zb2xlIGNvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBDT05GSUdfUFhBX1NFUklBTAotI2RlZmluZSBDT05GSUdfRkZVQVJUCSAgICAgICAxICAgICAgIC8qIHdlIHVzZSBGRlVBUlQgb24gTFVCQk9DSyAqLwotI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWAkzCi0KLS8qIGFsbG93IHRvIG92ZXJ3cml0ZSBzZXJpYWwgYW5kIGV0aGFkZHIgKi8KLSNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKLQotI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAotCi0KLS8qCi0gKiBCT09UUCBvcHRpb25zCi0gKi8KLSNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRQotI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVFBBVEgKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0dBVEVXQVkKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0hPU1ROQU1FCi0KLQotLyoKLSAqIENvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uLgotICovCi0jaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+Ci0KLSNkZWZpbmUgQ09ORklHX0NNRF9GQVQKLQotCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJMwotI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDg6MDA6M2U6MjY6MGE6NWIKLSNkZWZpbmUgQ09ORklHX05FVE1BU0sJCTI1NS4yNTUuMC4wCi0jZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4yMQotI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMC4yNTAKLSNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJib290bSA4MDAwMCIKLSNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCQkicm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWNyYW1mcyBjb25zb2xlPXR0eVMwLDExNTIwMCIKLSNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCi0jZGVmaW5lIENPTkZJR19USU1FU1RBTVAKLQotI2lmIGRlZmluZWQoQ09ORklHX0NNRF9LR0RCKQotI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURQkyMzA0MDAJCS8qIHNwZWVkIHRvIHJ1biBrZ2RiIHNlcmlhbCBwb3J0ICovCi0jZW5kaWYKLQotLyoKLSAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCQkxCi0KLSNkZWZpbmUgQ09ORklHX1NZU19MT05HSEVMUAkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KLSNpZmRlZiBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCi0jZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUCQkiJCAiCQkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCi0jZWxzZQotI2VuZGlmCi0jZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCi0jZGVmaW5lIENPTkZJR19TWVNfUEJTSVpFIChDT05GSUdfU1lTX0NCU0laRStzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BWEFSR1MJCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLwotI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCQlDT05GSUdfU1lTX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplCSovCi0jZGVmaW5lIENPTkZJR19TWVNfREVWSUNFX05VTExERVYJMQotCi0jZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkweGEwNDAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHhhMDgwMDAwMAkvKiA0IC4uLiA4IE1CIGluIERSQU0JKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUgkoQ09ORklHX1NZU19EUkFNX0JBU0UgKyAweDgwMDApIC8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19DUFVTUEVFRAkJMHgxNjEJCS8qIHNldCBjb3JlIGNsb2NrIHRvIDQwMC8yMDAvMTAwIE1IeiAqLwotCi0jaWZkZWYgQ09ORklHX01NQwotI2RlZmluZQlDT05GSUdfR0VORVJJQ19NTUMKLSNkZWZpbmUJQ09ORklHX1BYQV9NTUNfR0VORVJJQwotI2RlZmluZSBDT05GSUdfQ01EX01NQwotI2RlZmluZSBDT05GSUdfU1lTX01NQ19CQVNFCQkweEYwMDAwMDAwCi0jZW5kaWYKLQotLyoKLSAqIFBoeXNpY2FsIE1lbW9yeSBNYXAKLSAqLwotI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwk0CSAgIC8qIHdlIGhhdmUgMiBiYW5rcyBvZiBEUkFNICovCi0jZGVmaW5lIFBIWVNfU0RSQU1fMQkJMHhhMDAwMDAwMCAvKiBTRFJBTSBCYW5rICMxICovCi0jZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFCTB4MDQwMDAwMDAgLyogNjQgTUIgKi8KLSNkZWZpbmUgUEhZU19TRFJBTV8yCQkweGE0MDAwMDAwIC8qIFNEUkFNIEJhbmsgIzIgKi8KLSNkZWZpbmUgUEhZU19TRFJBTV8yX1NJWkUJMHgwMDAwMDAwMCAvKiAwIE1CICovCi0jZGVmaW5lIFBIWVNfU0RSQU1fMwkJMHhhODAwMDAwMCAvKiBTRFJBTSBCYW5rICMzICovCi0jZGVmaW5lIFBIWVNfU0RSQU1fM19TSVpFCTB4MDAwMDAwMDAgLyogMCBNQiAqLwotI2RlZmluZSBQSFlTX1NEUkFNXzQJCTB4YWMwMDAwMDAgLyogU0RSQU0gQmFuayAjNCAqLwotI2RlZmluZSBQSFlTX1NEUkFNXzRfU0laRQkweDAwMDAwMDAwIC8qIDAgTUIgKi8KLQotI2RlZmluZSBQSFlTX0ZMQVNIXzEJCTB4MDAwMDAwMDAgLyogRmxhc2ggQmFuayAjMSAqLwotI2RlZmluZSBQSFlTX0ZMQVNIXzIJCTB4MDQwMDAwMDAgLyogRmxhc2ggQmFuayAjMiAqLwotI2RlZmluZSBQSFlTX0ZMQVNIX1NJWkUJCTB4MDIwMDAwMDAgLyogMzIgTUIgKi8KLSNkZWZpbmUgUEhZU19GTEFTSF9CQU5LX1NJWkUJMHgwMjAwMDAwMCAvKiAzMiBNQiBCYW5rcyAqLwotI2RlZmluZSBQSFlTX0ZMQVNIX1NFQ1RfU0laRQkweDAwMDQwMDAwIC8qIDI1NiBLQiBzZWN0b3JzICh4MikgKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0RSQU1fQkFTRQkJMHhhMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0RSQU1fU0laRQkJMHgwNDAwMDAwMAotCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRQkJUEhZU19GTEFTSF8xCi0KLSNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9CQVNFCQlQSFlTX1NEUkFNXzEKLSNkZWZpbmUJQ09ORklHX1NZU19JTklUX1NQX0FERFIJCTB4ZmZmZmY4MDAKLQotI2RlZmluZSBGUEdBX1JFR1NfQkFTRV9QSFlTSUNBTCAweDA4MDAwMDAwCi0KLS8qCi0gKiBHUElPIHNldHRpbmdzCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19HUFNSMF9WQUwJCTB4MDAwMDgwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19HUFNSMV9WQUwJCTB4MDBGQzAzODIKLSNkZWZpbmUgQ09ORklHX1NZU19HUFNSMl9WQUwJCTB4MDAwMUZGRkYKLSNkZWZpbmUgQ09ORklHX1NZU19HUENSMF9WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19HUENSMV9WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19HUENSMl9WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19HUERSMF9WQUwJCTB4MDA2MEE4MDAKLSNkZWZpbmUgQ09ORklHX1NZU19HUERSMV9WQUwJCTB4MDBGRjAzODIKLSNkZWZpbmUgQ09ORklHX1NZU19HUERSMl9WQUwJCTB4MDAwMUMwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMF9MX1ZBTAkJMHg5ODQwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIwX1VfVkFMCQkweDAwMDAyOTUwCi0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjFfTF9WQUwJCTB4MDAwQTk1NTgKLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMV9VX1ZBTAkJMHgwMDA1QUFBQQotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIyX0xfVkFMCQkweEEwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjJfVV9WQUwJCTB4MDAwMDAwMDIKLQotI2RlZmluZSBDT05GSUdfU1lTX1BTU1JfVkFMCQkweDIwCi0KLSNkZWZpbmUJQ09ORklHX1NZU19DQ0NSCQkJQ0NDUl9MMjd8Q0NDUl9NMnxDQ0NSX04xMAotI2RlZmluZQlDT05GSUdfU1lTX0NLRU4JCQkweDAKLQotLyoKLSAqIE1lbW9yeSBzZXR0aW5ncwotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTVNDMF9WQUwJCTB4MjNGMjIzRjIKLSNkZWZpbmUgQ09ORklHX1NZU19NU0MxX1ZBTAkJMHgzRkYxQTQ0MQotI2RlZmluZSBDT05GSUdfU1lTX01TQzJfVkFMCQkweDdGRjk3RkYxCi0jZGVmaW5lIENPTkZJR19TWVNfTURDTkZHX1ZBTAkJMHgwMDAwMUFDOQotI2RlZmluZSBDT05GSUdfU1lTX01EUkVGUl9WQUwJCTB4MDAwMTgwMTgKLSNkZWZpbmUgQ09ORklHX1NZU19NRE1SU19WQUwJCTB4MDAwMDAwMDAKLQotI2RlZmluZQlDT05GSUdfU1lTX0ZMWUNORkdfVkFMCQkweDAwMDAwMDAwCi0jZGVmaW5lCUNPTkZJR19TWVNfU1hDTkZHX1ZBTAkJMHgwMDAwMDAwMAotCi0vKgotICogUENNQ0lBIGFuZCBDRiBJbnRlcmZhY2VzCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRUNSX1ZBTAkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DTUVNMF9WQUwJCTB4MDAwMTA1MDQKLSNkZWZpbmUgQ09ORklHX1NZU19NQ01FTTFfVkFMCQkweDAwMDEwNTA0Ci0jZGVmaW5lIENPTkZJR19TWVNfTUNBVFQwX1ZBTAkJMHgwMDAxMDUwNAotI2RlZmluZSBDT05GSUdfU1lTX01DQVRUMV9WQUwJCTB4MDAwMTA1MDQKLSNkZWZpbmUgQ09ORklHX1NZU19NQ0lPMF9WQUwJCTB4MDAwMDQ3MTUKLSNkZWZpbmUgQ09ORklHX1NZU19NQ0lPMV9WQUwJCTB4MDAwMDQ3MTUKLQotI2RlZmluZSBfTEVECQkJMHgwODAwMDAxMAotI2RlZmluZSBMRURfQkxBTksJCTB4MDgwMDAwNDAKLQotLyoKLSAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUwkyCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLwotI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUCTEyOCAgLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICAgICovCi0KLS8qIHRpbWVvdXQgdmFsdWVzIGFyZSBpbiB0aWNrcyAqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQJKDI1KkNPTkZJR19TWVNfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVAkoMjUqQ09ORklHX1NZU19IWikgLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KLQotLyogTk9URTogbWFueSBkZWZhdWx0IHBhcnRpdGlvbmluZyBzY2hlbWVzIGFzc3VtZSB0aGUga2VybmVsIHN0YXJ0cyBhdCB0aGUKLSAqIHNlY29uZCBzZWN0b3IsIG5vdCBhbiBlbnZpcm9ubWVudC4gIFlvdSBoYXZlIGJlZW4gd2FybmVkIQotICovCi0jZGVmaW5lCUNPTkZJR19TWVNfTU9OSVRPUl9MRU4JCVBIWVNfRkxBU0hfU0VDVF9TSVpFCi0jZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fRkxBU0gJMQotI2RlZmluZSBDT05GSUdfRU5WX0FERFIJCShQSFlTX0ZMQVNIXzEgKyBQSFlTX0ZMQVNIX1NFQ1RfU0laRSkKLSNkZWZpbmUgQ09ORklHX0VOVl9TRUNUX1NJWkUJUEhZU19GTEFTSF9TRUNUX1NJWkUKLSNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkoUEhZU19GTEFTSF9TRUNUX1NJWkUgLyAxNikKLQotCi0vKgotICogRlBHQSBPZmZzZXRzCi0gKi8KLSNkZWZpbmUgV0hPQU1JX09GRlNFVAkJMHgwMAotI2RlZmluZSBIRVhMRURfT0ZGU0VUCQkweDEwCi0jZGVmaW5lIEJMQU5LTEVEX09GRlNFVAkJMHg0MAotI2RlZmluZSBESVNDUkVURUxFRF9PRkZTRVQJMHg0MAotI2RlZmluZSBDTkZHX1NXSVRDSEVTX09GRlNFVAkweDUwCi0jZGVmaW5lIFVTRVJfU1dJVENIRVNfT0ZGU0VUCTB4NjAKLSNkZWZpbmUgTUlTQ19XUl9PRkZTRVQJCTB4ODAKLSNkZWZpbmUgTUlTQ19SRF9PRkZTRVQJCTB4OTAKLSNkZWZpbmUgSU5UX01BU0tfT0ZGU0VUCQkweEMwCi0jZGVmaW5lIElOVF9DTEVBUl9PRkZTRVQJMHhEMAotI2RlZmluZSBHUF9PRkZTRVQJCTB4MTAwCi0KLSNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbWFsdGEuaCBiL2luY2x1ZGUvY29uZmlncy9tYWx0YS5oCmluZGV4IGNjNTc0ZWQuLmEyOWI4NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9tYWx0YS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9tYWx0YS5oCkBAIC0xNCw2ICsxNCw5IEBACiAgKiBTeXN0ZW0gY29uZmlndXJhdGlvbgogICovCiAjZGVmaW5lIENPTkZJR19NQUxUQQorI2RlZmluZSBDT05GSUdfU1lTX0dFTkVSSUNfQk9BUkQKKyNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRgorI2RlZmluZSBDT05GSUdfRElTUExBWV9CT0FSRElORk8KIAogI2RlZmluZSBDT05GSUdfTUVNU0laRV9JTl9CWVRFUwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbWljcm9ibGF6ZS1nZW5lcmljLmggYi9pbmNsdWRlL2NvbmZpZ3MvbWljcm9ibGF6ZS1nZW5lcmljLmgKaW5kZXggNDg2Nzg3ZS4uMDZiN2U5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL21pY3JvYmxhemUtZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9taWNyb2JsYXplLWdlbmVyaWMuaApAQCAtNzEsNyArNzEsNyBAQAogCiAvKiBldGhlcm5ldCAqLwogI3VuZGVmIENPTkZJR19TWVNfRU5FVAotI2lmIGRlZmluZWQoWElMSU5YX0VNQUNMSVRFX0JBU0VBRERSKQorI2lmIGRlZmluZWQoWElMSU5YX0VNQUNMSVRFX0JBU0VBRERSKSB8fCBkZWZpbmVkKENPTkZJR19PRl9DT05UUk9MKQogIyBkZWZpbmUgQ09ORklHX1hJTElOWF9FTUFDTElURQkxCiAjIGRlZmluZSBDT05GSUdfU1lTX0VORVQKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3AxX3AyX3JkYl9wYy5oIGIvaW5jbHVkZS9jb25maWdzL3AxX3AyX3JkYl9wYy5oCmluZGV4IDA3YjYxNzkuLmU3NDU5NDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9wMV9wMl9yZGJfcGMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvcDFfcDJfcmRiX3BjLmgKQEAgLTUwOCw3ICs1MDgsNyBAQAogCQkJCQlHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKICNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX09GRlNFVAlDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAogCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JKDI1NiAqIDEwMjQpLyogUmVzZXJ2ZSAyNTYga0IgZm9yIE1vbiAqLworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCSg3NjggKiAxMDI0KQogI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JKDEwMjQgKiAxMDI0KS8qIFJlc2VydmVkIGZvciBtYWxsb2MgKi8KIAogI2RlZmluZSBDT05GSUdfU1lTX0NQTERfQkFTRQkweGZmYTAwMDAwCkBAIC03NzIsNyArNzcyLDcgQEAKICNpZmRlZiBDT05GSUdfUUUKIC8qIFFFIG1pY3JvY29kZS9maXJtd2FyZSBhZGRyZXNzICovCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9OT1IKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJMHhlZmVjMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZXX0FERFIJMHhlZmVjMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfTEVOR1RICTB4MTAwMDAKICNlbmRpZiAvKiBDT05GSUdfUUUgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3AxX3R3ci5oIGIvaW5jbHVkZS9jb25maWdzL3AxX3R3ci5oCmluZGV4IGMyOTZhMDcuLjkxMTIwM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9wMV90d3IuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvcDFfdHdyLmgKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQkJCQlHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKICNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX09GRlNFVAlDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAogCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JKDUxMiAqIDEwMjQpLyogUmVzZXJ2ZSA1MTIga0IgZm9yIE1vbiAqLworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCSg3NjggKiAxMDI0KQogI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JKDEwMjQgKiAxMDI0KS8qIFJlc2VydmVkIGZvciBtYWxsb2MgKi8KIAogI2RlZmluZSBDT05GSUdfU1lTX0JSMF9QUkVMSU0JQ09ORklHX0ZMQVNIX0JSX1BSRUxJTQkvKiBOT1IgQmFzZSBBZGRyZXNzICovCkBAIC0zNDgsNyArMzQ4LDcgQEAKICNpZmRlZiBDT05GSUdfUUUKIC8qIFFFIG1pY3JvY29kZS9maXJtd2FyZSBhZGRyZXNzICovCiAjZGVmaW5lIENPTkZJR19TWVNfUUVfRk1BTl9GV19JTl9OT1IKLSNkZWZpbmUgQ09ORklHX1NZU19RRV9GTUFOX0ZXX0FERFIJMHhlZmVjMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZXX0FERFIJMHhlZmVjMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX1FFX0ZNQU5fRldfTEVOR1RICTB4MTAwMDAKICNlbmRpZiAvKiBDT05GSUdfUUUgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3FlbXUtcHBjZTUwMC5oIGIvaW5jbHVkZS9jb25maWdzL3FlbXUtcHBjZTUwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTAxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvcWVtdS1wcGNlNTAwLmgKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMS0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCisgKi8KKworLyoKKyAqIENvcmVuZXQgRFMgc3R5bGUgYm9hcmQgY29uZmlndXJhdGlvbiBmaWxlCisgKi8KKyNpZm5kZWYgX19RRU1VX1BQQ0U1MDBfSAorI2RlZmluZSBfX1FFTVVfUFBDRTUwMF9ICisKKyNkZWZpbmUgQ09ORklHX0NNRF9SRUdJTkZPCisKKy8qIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zICovCisjZGVmaW5lIENPTkZJR19CT09LRQorI2RlZmluZSBDT05GSUdfRTUwMAkJCS8qIEJPT0tFIGU1MDAgZmFtaWx5ICovCisjZGVmaW5lIENPTkZJR19RRU1VX0U1MDAKKworI3VuZGVmIENPTkZJR19TWVNfVEVYVF9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCTB4ZjAxMDAwIC8qIDE1IE1CICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19NUEM4NVhYX05PX1JFU0VUVkVDCisKKyNkZWZpbmUgQ09ORklHX1NZU19SQU1CT09UCisKKyNkZWZpbmUgQ09ORklHX1BDSQkJCS8qIEVuYWJsZSBQQ0kvUENJRSAqLworI2RlZmluZSBDT05GSUdfUENJMQkJMQkvKiBQQ0kgY29udHJvbGxlciAxICovCisjZGVmaW5lIENPTkZJR19GU0xfUENJX0lOSVQJCS8qIFVzZSBjb21tb24gRlNMIGluaXQgY29kZSAqLworI2RlZmluZSBDT05GSUdfU1lTX1BDSV82NEJJVAkJLyogZW5hYmxlIDY0LWJpdCBQQ0kgcmVzb3VyY2VzICovCisKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKworI2RlZmluZSBDT05GSUdfRU5BQkxFXzM2QklUX1BIWVMKKworI2RlZmluZSBDT05GSUdfQUREUl9NQVAKKyNkZWZpbmUgQ09ORklHX1NZU19OVU1fQUREUl9NQVAJCTE2CS8qIG51bWJlciBvZiBUTEIxIGVudHJpZXMgKi8KKworI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQJMHgwMDIwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCTB4MDA0MDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19BTFRfTUVNVEVTVAorI2RlZmluZSBDT05GSUdfUEFOSUNfSEFORwkvKiBkbyBub3QgcmVzZXQgYm9hcmQgb24gcGFuaWMgKi8KKworLyogTmVlZGVkIHRvIGZpbGwgdGhlIGNjc3JiYXIgcG9pbnRlciAqLworI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9GCisKKy8qIFZpcnR1YWwgYWRkcmVzcyB0byBDQ1NSQkFSICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0NTUkJBUgkJMHhlMDAwMDAwMAorLyogUGh5c2ljYWwgYWRkcmVzcyBzaG91bGQgYmUgYSBmdW5jdGlvbiBjYWxsICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRfcGh5c19jY3NyYmFyX2FkZHJfZWFybHkodm9pZCk7CisjZW5kaWYKKyNkZWZpbmUgQ09ORklHX1NZU19DQ1NSX0RPX05PVF9SRUxPQ0FURQorCisvKiBWaXJ0dWFsIGFkZHJlc3MgcmFuZ2UgZm9yIFBDSSByZWdpb24gbWFwcyAqLworI2RlZmluZSBDT05GSUdfU1lTX1BDSV9NQVBfU1RBUlQJMHg4MDAwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX1BDSV9NQVBfRU5ECQkweGU4MDAwMDAwCisKKy8qIFZpcnR1YWwgYWRkcmVzcyB0byBhIHRlbXBvcmFyeSBtYXAgaWYgd2UgbmVlZCBpdCAobWF4IDEyOE1CKSAqLworI2RlZmluZSBDT05GSUdfU1lTX1RNUFZJUlQJCTB4ZTgwMDAwMDAKKworLyoKKyAqIEREUiBTZXR1cAorICovCisjZGVmaW5lIENPTkZJR19WRVJZX0JJR19SQU0KKyNkZWZpbmUgQ09ORklHX1NZU19ERFJfU0RSQU1fQkFTRQkweDAwMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fQkFTRQkJQ09ORklHX1NZU19ERFJfU0RSQU1fQkFTRQorCisjZGVmaW5lIENPTkZJR19DSElQX1NFTEVDVFNfUEVSX0NUUkwJMAorCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEgICAgICAgIDMzMDAwMDAwCisKKyNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAorCisjZGVmaW5lIENPTkZJR19TWVNfQk9PVF9CTE9DSwkJMHgwMDAwMDAwMAkvKiBib290IFRMQiAqLworCisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFCQlDT05GSUdfU1lTX1RFWFRfQkFTRQorCisjZGVmaW5lIENPTkZJR19FTlZfSVNfTk9XSEVSRQorCisjZGVmaW5lIENPTkZJR19IV0NPTkZJRworCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fQUREUgkJMHgwMDEwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX0FERFJfUEhZU19ISUdICTB4MAorI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX0FERFJfUEhZU19MT1cJMHgwMDEwMDAwMAorLyogVGhlIGFzc2VtYmxlciBkb2Vzbid0IGxpa2UgdHlwZWNhc3QgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1JBTV9BRERSX1BIWVMgXAorCSgoQ09ORklHX1NZU19JTklUX1JBTV9BRERSX1BIWVNfSElHSCAqIDF1bGwgPDwgMzIpIHwgXAorCSAgQ09ORklHX1NZU19JTklUX1JBTV9BRERSX1BIWVNfTE9XKQorI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUJCTB4MDAwMDQwMDAKKworI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAkoQ09ORklHX1NZU19JTklUX1JBTV9TSVpFIC0gXAorCQkJCQlHRU5FUkFURURfR0JMX0RBVEFfU0laRSkKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX09GRlNFVAlDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAorCisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSg1MTIgKiAxMDI0KQorI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCSg0ICogMTAyNCAqIDEwMjQpCisKKyNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVgJMQorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTAKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1NFUklBTAorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfUkVHX1NJWkUJMQorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ0xLCQkoZ2V0X2J1c19mcmVxKDApKQorCisjZGVmaW5lIENPTkZJR19TWVNfQkFVRFJBVEVfVEFCTEUJXAorCXszMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwfQorCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9DT00xCShDT05GSUdfU1lTX0NDU1JCQVIrMHg0NTAwKQorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ09NMgkoQ09ORklHX1NZU19DQ1NSQkFSKzB4NDYwMCkKKworLyogVXNlIHRoZSBIVVNIIHBhcnNlciAqLworI2RlZmluZSBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUX0hVU0hfUFMyICI+ICIKKworLyogcGFzcyBvcGVuIGZpcm13YXJlIGZsYXQgdHJlZSAqLworI2RlZmluZSBDT05GSUdfT0ZfTElCRkRUCisjZGVmaW5lIENPTkZJR19PRl9CT0FSRF9TRVRVUAorI2RlZmluZSBDT05GSUdfT0ZfU1RET1VUX1ZJQV9BTElBUworCisvKiBuZXcgdUltYWdlIGZvcm1hdCBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19GSVQKKyNkZWZpbmUgQ09ORklHX0ZJVF9WRVJCT1NFCS8qIGVuYWJsZSBmaXRfZm9ybWF0X3tlcnJvcix3YXJuaW5nfSgpICovCisKKy8qCisgKiBHZW5lcmFsIFBDSQorICogTWVtb3J5IHNwYWNlIGlzIG1hcHBlZCAxLTEsIGJ1dCBJL08gc3BhY2UgbXVzdCBzdGFydCBmcm9tIDAuCisgKi8KKworI2lmZGVmIENPTkZJR19QQ0kKKyNkZWZpbmUgQ09ORklHX1BDSV9JTkRJUkVDVF9CUklER0UKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQorI2RlZmluZSBDT05GSUdfUENJX1BOUAkJCS8qIGRvIHBjaSBwbHVnLWFuZC1wbGF5ICovCisjZGVmaW5lIENPTkZJR19FMTAwMAorCisjZGVmaW5lIENPTkZJR19QQ0lfU0NBTl9TSE9XCQkvKiBzaG93IHBjaSBkZXZpY2VzIG9uIHN0YXJ0dXAgKi8KKyNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KKyNlbmRpZgkvKiBDT05GSUdfUENJICovCisKKyNkZWZpbmUgQ09ORklHX0xCQTQ4CisjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCisjZGVmaW5lIENPTkZJR19DTURfRVhUMgorCisvKgorICogRW52aXJvbm1lbnQKKyAqLworI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCTB4MjAwMAorCisjZGVmaW5lIENPTkZJR19MT0FEU19FQ0hPCQkvKiBlY2hvIG9uIGZvciBzZXJpYWwgZG93bmxvYWQgKi8KKworI2RlZmluZSBDT05GSUdfTEFTVF9TVEFHRV9JTklUCisKKy8qCisgKiBDb21tYW5kIGxpbmUgY29uZmlndXJhdGlvbi4KKyAqLworI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgorCisjZGVmaW5lIENPTkZJR19DTURfREhDUAorI2RlZmluZSBDT05GSUdfQ01EX0VMRgorI2RlZmluZSBDT05GSUdfQ01EX0JPT1RaCisjZGVmaW5lIENPTkZJR19DTURfR1JFUEVOVgorI2RlZmluZSBDT05GSUdfQ01EX0lSUQorI2RlZmluZSBDT05GSUdfQ01EX1BJTkcKKyNkZWZpbmUgQ09ORklHX0NNRF9TRVRFWFBSCisKKyNpZmRlZiBDT05GSUdfUENJCisjZGVmaW5lIENPTkZJR19DTURfUENJCisjZGVmaW5lIENPTkZJR19DTURfTkVUCisjZW5kaWYKKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJKi8KKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkJCS8qIENvbW1hbmQtbGluZSBlZGl0aW5nICovCisjZGVmaW5lIENPTkZJR19BVVRPX0NPTVBMRVRFCQkJLyogYWRkIGF1dG9jb21wbGV0aW9uIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIJMHgyMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUgKENPTkZJR19TWVNfQ0JTSVpFK3NpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpCisjZGVmaW5lIENPTkZJR19TWVNfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQlDT05GSUdfU1lTX0NCU0laRS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKKyAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDY0IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCisjZGVmaW5lIENPTkZJR19TWVNfQk9PVE1BUFNaCSg2NCA8PCAyMCkJLyogSW5pdGlhbCBtYXAgZm9yIExpbnV4Ki8KKyNkZWZpbmUgQ09ORklHX1NZU19CT09UTV9MRU4JKDY0IDw8IDIwKQkvKiBJbmNyZWFzZSBtYXggZ3VuemlwIHNpemUgKi8KKworLyoKKyAqIEVudmlyb25tZW50IENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfUk9PVFBBVEgJCSIvb3B0L25mc3Jvb3QiCisjZGVmaW5lIENPTkZJR19CT09URklMRQkJInVJbWFnZSIKKyNkZWZpbmUgQ09ORklHX1VCT09UUEFUSAkidS1ib290LmJpbiIJLyogVS1Cb290IGltYWdlIG9uIFRGVFAgc2VydmVyKi8KKworLyogZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGZ0cCBhbmQgYm9vdG0gKi8KKyNkZWZpbmUgQ09ORklHX0xPQURBRERSCQkxMDAwMDAwCisKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCTExNTIwMAorCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkgICAgICAgIDEKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECQlcCisJInRlc3QgLW4gXCIkcWVtdV9rZXJuZWxfYWRkclwiICYmIGJvb3RtICRxZW11X2tlcm5lbF9hZGRyIC0gJGZkdF9hZGRyX3JcMCIKKworI2VuZGlmCS8qIF9fUUVNVV9QUENFNTAwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9yc2Rwcm90by5oIGIvaW5jbHVkZS9jb25maWdzL3JzZHByb3RvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MjExMzguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jb25maWdzL3JzZHByb3RvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MDAgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogTXVycmF5IEplbnNlbiA8TXVycmF5LkplbnNlbkBjbXN0LmNzaXJvLmF1PgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+Ci0gKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+Ci0gKgotICogQ29uZmlndWF0aW9uIHNldHRpbmdzIGZvciB0aGUgUiZTIFByb3RvY29sIEJvYXJkIGJvYXJkLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpZm5kZWYgX19DT05GSUdfSAotI2RlZmluZSBfX0NPTkZJR19ICi0KLS8qCi0gKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwotICogKGVhc3kgdG8gY2hhbmdlKQotICovCi0KLSNkZWZpbmUgQ09ORklHX1JTRF9QUk9UTwkxCS8qIG9uIGEgUiZTIFByb3RvY29sIEJvYXJkICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX0NQTTIJCTEJLyogSGFzIGEgQ1BNMiAqLwotCi0jZGVmaW5lCUNPTkZJR19TWVNfVEVYVF9CQVNFCTB4ZmYwMDAwMDAKLSNkZWZpbmUJQ09ORklHX1NZU19MRFNDUklQVAkiYm9hcmQvcnNkcHJvdG8vdS1ib290LmxkcyIKLQotI2RlZmluZQlDT05GSUdfTUlTQ19JTklUX0YJMQkvKiBVc2UgbWlzY19pbml0X2YoKQkJKi8KLQotLyoKLSAqIHNlbGVjdCBzZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCi0gKgotICogaWYgZWl0aGVyIENPTkZJR19DT05TX09OX1NNQyBvciBDT05GSUdfQ09OU19PTl9TQ0MgaXMgc2VsZWN0ZWQsIHRoZW4KLSAqIENPTkZJR19DT05TX0lOREVYIG11c3QgYmUgc2V0IHRvIHRoZSBjaGFubmVsIG51bWJlciAoMS0yIGZvciBTTUMsIDEtNAotICogZm9yIFNDQykuCi0gKgotICogaWYgQ09ORklHX0NPTlNfTk9ORSBpcyBkZWZpbmVkLCB0aGVuIHRoZSBzZXJpYWwgY29uc29sZSByb3V0aW5lcyBtdXN0Ci0gKiBkZWZpbmVkIGVsc2V3aGVyZS4KLSAqLwotI3VuZGVmCUNPTkZJR19DT05TX09OX1NNQwkJLyogZGVmaW5lIGlmIGNvbnNvbGUgb24gU01DICovCi0jZGVmaW5lCUNPTkZJR19DT05TX09OX1NDQwkJLyogZGVmaW5lIGlmIGNvbnNvbGUgb24gU0NDICovCi0jdW5kZWYJQ09ORklHX0NPTlNfTk9ORQkJLyogZGVmaW5lIGlmIGNvbnNvbGUgb24gbmVpdGhlciAqLwotI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWAkxCS8qIHdoaWNoIFNNQy9TQ0MgY2hhbm5lbCBmb3IgY29uc29sZSAqLwotCi0vKgotICogc2VsZWN0IGV0aGVybmV0IGNvbmZpZ3VyYXRpb24KLSAqCi0gKiBpZiBlaXRoZXIgQ09ORklHX0VUSEVSX09OX1NDQyBvciBDT05GSUdfRVRIRVJfT05fRkNDIGlzIHNlbGVjdGVkLCB0aGVuCi0gKiBDT05GSUdfRVRIRVJfSU5ERVggbXVzdCBiZSBzZXQgdG8gdGhlIGNoYW5uZWwgbnVtYmVyICgxLTQgZm9yIFNDQywgMS0zCi0gKiBmb3IgRkNDKQotICoKLSAqIGlmIENPTkZJR19FVEhFUl9OT05FIGlzIGRlZmluZWQsIHRoZW4gZWl0aGVyIHRoZSBldGhlcm5ldCByb3V0aW5lcyBtdXN0IGJlCi0gKiBkZWZpbmVkIGVsc2V3aGVyZSAoYXMgZm9yIHRoZSBjb25zb2xlKSwgb3IgQ09ORklHX0NNRF9ORVQgbXVzdCBiZSB1bnNldC4KLSAqLwotI3VuZGVmCUNPTkZJR19FVEhFUl9PTl9TQ0MJCS8qIGRlZmluZSBpZiBldGhlcm5ldCBvbiBTQ0MJKi8KLSNkZWZpbmUJQ09ORklHX0VUSEVSX09OX0ZDQwkJLyogZGVmaW5lIGlmIGV0aGVybmV0IG9uIEZDQwkqLwotI3VuZGVmCUNPTkZJR19FVEhFUl9OT05FCQkvKiBkZWZpbmUgaWYgZXRoZXJuZXQgb24gbmVpdGhlciAqLwotI2RlZmluZSBDT05GSUdfRVRIRVJfSU5ERVgJMgkvKiB3aGljaCBTQ0MvRkNDIGNoYW5uZWwgZm9yIGV0aGVybmV0ICovCi0KLSNpZiAoQ09ORklHX0VUSEVSX0lOREVYID09IDIpCi0KLS8qCi0gKiAtIFJ4LUNMSyBpcyBDTEsxMwotICogLSBUeC1DTEsgaXMgQ0xLMTQKLSAqIC0gU2VsZWN0IGJ1cyBmb3IgYmQvYnVmZmVycyAoc2VlIDI4LTEzKQotICogLSBFbmFibGUgRnVsbCBEdXBsZXggaW4gRlNNUgotICovCi0jIGRlZmluZSBDT05GSUdfU1lTX0NNWEZDUl9NQVNLMgkoQ01YRkNSX0ZDMiB8IENNWEZDUl9SRjJDU19NU0sgfCBDTVhGQ1JfVEYyQ1NfTVNLKQotIyBkZWZpbmUgQ09ORklHX1NZU19DTVhGQ1JfVkFMVUUyCShDTVhGQ1JfUkYyQ1NfQ0xLMTMgfCBDTVhGQ1JfVEYyQ1NfQ0xLMTQpCi0jIGRlZmluZSBDT05GSUdfU1lTX0NQTUZDUl9SQU1UWVBFCSgwKQotIyBkZWZpbmUgQ09ORklHX1NZU19GQ0NfUFNNUgkJKEZDQ19QU01SX0ZERSB8IEZDQ19QU01SX0xQQikKLQotI2VuZGlmIC8qIENPTkZJR19FVEhFUl9JTkRFWCAqLwotCi0KLS8qIGFsbG93IHRvIG92ZXJ3cml0ZSBzZXJpYWwgYW5kIGV0aGFkZHIgKi8KLSNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKLQotLyogZW5hYmxlIEkyQyAqLwotI2RlZmluZSBDT05GSUdfSEFSRF9JMkMJCTEJLyogSTJDIHdpdGggaGFyZHdhcmUgc3VwcG9ydCAqLwotI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TUEVFRAkJNTAwMDAJLyogSTJDIHNwZWVkIGFuZCBzbGF2ZSBhZGRyZXNzICovCi0jZGVmaW5lIENPTkZJR19TWVNfSTJDX1NMQVZFCQkweDMwCi0KLQotLyogc3lzdGVtIGNsb2NrIHJhdGUgKENMS0lOKSAtIGVxdWFsIHRvIHRoZSA2MHggYW5kIGxvY2FsIGJ1cyBzcGVlZCAqLwotI2RlZmluZSBDT05GSUdfODI2MF9DTEtJTgk1MDAwMDAwMAkvKiBpbiBIeiAqLwotCi0jZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCi0KLQotLyoKLSAqIEJPT1RQIG9wdGlvbnMKLSAqLwotI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFCi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09UUEFUSAotI2RlZmluZSBDT05GSUdfQk9PVFBfR0FURVdBWQotI2RlZmluZSBDT05GSUdfQk9PVFBfSE9TVE5BTUUKLQotCi0vKgotICogQ29tbWFuZCBsaW5lIGNvbmZpZ3VyYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KLQotI3VuZGVmIENPTkZJR19DTURfS0dEQgotCi0KLS8qIERlZmluZSB0aGlzIGlmIHlvdSB3YW50IHRvIGJvb3QgZnJvbSAweDAwMDAwMTAwLiBJZiB5b3UgZG9uJ3QgZGVmaW5lCi0gKiB0aGlzLCB5b3Ugd2lsbCBuZWVkIHRvIHByb2dyYW0gdGhlIGJvb3Rsb2FkZXIgdG8gMHhmZmYwMDAwMCwgYW5kCi0gKiBnZXQgdGhlIGhhcmR3YXJlIHJlc2V0IGNvbmZpZyB3b3JkcyBhdCAweGZlMDAwMDAwLiBUaGUgc2ltcGxlc3QKLSAqIHdheSB0byBkbyB0aGF0IGlzIHRvIHByb2dyYW0gdGhlIGJvb3Rsb2FkZXIgYXQgYm90aCBhZGRyZXNzZXMuCi0gKiBJdCBpcyBzdWdnZXN0ZWQgdGhhdCB5b3UganVzdCBsZXQgVS1Cb290IGxpdmUgYXQgMHgwMDAwMDAwMC4KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1JTRF9CT09UX0xPVyAxCi0KLSNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQk1Ci0jZGVmaW5lIENPTkZJR19CT09UQVJHUwkJImRldmZzPW1vdW50IHJvb3Q9cmFtZnMiCi0jZGVmaW5lIENPTkZJR19FVEhBRERSCQkwODowMDozZToyNjowYTo1YQotI2RlZmluZSBDT05GSUdfTkVUTUFTSyAgICAgICAgICAyNTUuMjU1LjAuMAotCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lIENPTkZJR19LR0RCX0JBVURSQVRFCTIzMDQwMAkJLyogc3BlZWQgdG8gcnVuIGtnZGIgc2VyaWFsIHBvcnQgKi8KLSNlbmRpZgotCi0vKgotICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwotICovCi0jZGVmaW5lCUNPTkZJR19TWVNfTE9OR0hFTFAJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lCUNPTkZJR19TWVNfQ0JTSVpFCQkxMDI0CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLwotI2Vsc2UKLSNkZWZpbmUJQ09ORklHX1NZU19DQlNJWkUJCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KLSNlbmRpZgotI2RlZmluZQlDT05GSUdfU1lTX1BCU0laRSAoQ09ORklHX1NZU19DQlNJWkUrc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUJQ09ORklHX1NZU19NQVhBUkdTCQkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQkJQ09ORklHX1NZU19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkweDAwNDAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHgwMWMwMDAwMAkvKiA0IC4uLiAyOCBNQiBpbiBEUkFNCSovCi0KLSNkZWZpbmUJQ09ORklHX1NZU19MT0FEX0FERFIJCTB4MTAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzCSovCi0KLS8qCi0gKiBMb3cgTGV2ZWwgQ29uZmlndXJhdGlvbiBTZXR0aW5ncwotICogKGFkZHJlc3MgbWFwcGluZ3MsIHJlZ2lzdGVyIGluaXRpYWwgdmFsdWVzLCBldGMuKQotICogWW91IHNob3VsZCBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBpZiB5b3UgbWFrZSBjaGFuZ2VzIGhlcmUuCi0gKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUGh5c2ljYWwgTWVtb3J5IE1hcAotICovCi0jZGVmaW5lIFBIWVNfU0RSQU1fNjBYCQkweDAwMDAwMDAwIC8qIFNEUkFNICg2MHggQnVzKSAqLwotI2RlZmluZSBQSFlTX1NEUkFNXzYwWF9TSVpFCTB4MDgwMDAwMDAgLyogMTI4IE1CICovCi0KLSNkZWZpbmUgUEhZU19TRFJBTV9MT0NBTAkweDQwMDAwMDAwIC8qIFNEUkFNIChMb2NhbCBCdXMpICovCi0jZGVmaW5lIFBIWVNfU0RSQU1fTE9DQUxfU0laRQkweDA0MDAwMDAwIC8qIDY0IE1CICovCi0KLSNkZWZpbmUgUEhZU19EUFJBTV9QQ0kJCTB4RTgwMDAwMDAgLyogRFBSQU0gUFBDL1BDSSAqLwotI2RlZmluZSBQSFlTX0RQUkFNX1BDSV9TSVpFCTB4MDAwMjAwMDAgLyogMTI4IEtCICovCi0KLS8qI2RlZmluZSBQSFlTX0RQUkFNX1BDSV9TRU0JMHgwNDAyMDAwMCAvICogRFBSQU0gUFBDL1BDSSBTZW1hcGhvcmUgKi8KLS8qI2RlZmluZSBQSFlTX0RQUkFNX1BDSV9TRU1fU0laRQkweDAwMDAwMDAxIC8gKiAxIEJ5dGUgKi8KLQotI2RlZmluZSBQSFlTX0RQUkFNX1NIQVJDCTB4RTgxMDAwMDAgLyogRFBSQU0gUFBDL1NoYXJjICovCi0jZGVmaW5lIFBIWVNfRFBSQU1fU0hBUkNfU0laRQkweDAwMDQwMDAwIC8qIDI1NiBLQiAqLwotCi0vKiNkZWZpbmUgUEhZU19EUFJBTV9TSEFSQ19TRU0JMHgwNDE0MDAwMCAvICogRFBSQU0gUFBDL1NoYXJjIFNlbWFwaG9yZSAqLwotLyojZGVmaW5lIFBIWVNfRFBSQU1fU0hBUkNfU0VNX1NJWkUgMHgwMDAwMDAwMSAvICogMSBCeXRlICovCi0KLSNkZWZpbmUgUEhZU19WSVJURVhfUkVHSVNURVIgICAgMHhFODMwMDAwMCAvKiBGUEdBIGltcGxlbWVudGVkIHJlZ2lzdGVyICovCi0jZGVmaW5lIFBIWVNfVklSVEVYX1JFR0lTVEVSX1NJWkUgMHgwMDAwMDEwMAotCi0jZGVmaW5lIFBIWVNfVVNCCQkweDA0MjAwMDAwIC8qIFVTQiBDb250cm9sbGVyICg2MHggQnVzKSAqLwotI2RlZmluZSBQSFlTX1VTQl9TSVpFCQkweDAwMDAwMDAyIC8qIDIgQnl0ZXMgKi8KLQotI2RlZmluZSBQSFlTX0lNTVIJCTB4RjAwMDAwMDAgLyogSW50ZXJuYWwgTWVtb3J5IE1hcHBlZCBSZWcuICovCi0KLSNkZWZpbmUgUEhZU19GTEFTSAkJMHhGRjAwMDAwMCAvKiBGbGFzaCAoNjB4IEJ1cykgKi8KLSNkZWZpbmUgUEhZU19GTEFTSF9TSVpFCQkweDAxMDAwMDAwIC8qIDE2IE1CICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19JTU1SCQlQSFlTX0lNTVIKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUmVzZXQgQWRkcmVzcwotICoKLSAqIEluIG9yZGVyIHRvIHJlc2V0IHRoZSBDUFUsIFUtQm9vdCBqdW1wcyB0byBhIHNwZWNpYWwgYWRkcmVzcyB3aGljaAotICogY2F1c2VzIGEgbWFjaGluZSBjaGVjayBleGNlcHRpb24uIFRoZSBkZWZhdWx0IGFkZHJlc3MgZm9yIHRoaXMgaXMKLSAqIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFIC0gc2l6ZW9mICh1bG9uZyksIHdoaWNoIG1pZ2h0IG5vdCBhbHdheXMgd29yaywgZWcuIHdoZW4KLSAqIHRlc3RpbmcgdGhlIG1vbml0b3IgaW4gUkFNIHVzaW5nIGEgSlRBRyBkZWJ1Z2dlci4KLSAqCi0gKiBKdXN0IHNldCBDT05GSUdfU1lTX1JFU0VUX0FERFJFU1MgdG8gYW4gYWRkcmVzcyB0aGF0IHlvdSBrbm93IGlzIHN1cmUgdG8KLSAqIGNhdXNlIGEgYnVzIGVycm9yIG9uIHlvdXIgaGFyZHdhcmUuCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19SRVNFVF9BRERSRVNTCTB4MjAwMDAwMDAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogSGFyZCBSZXNldCBDb25maWd1cmF0aW9uIFdvcmRzCi0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NZU19SU0RfQk9PVF9MT1cpCi0jICBkZWZpbmUgIENPTkZJR19TWVNfUlNEX0hSQ1dfQk9PVF9GTEFHUyAgKEhSQ1dfQ0lQIHwgSFJDV19CTVMpCi0jZWxzZQotIyAgZGVmaW5lICBDT05GSUdfU1lTX1JTRF9IUkNXX0JPT1RfRkxBR1MgICgwKQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1NZU19SU0RfQk9PVF9MT1cpICovCi0KLS8qIGdldCB0aGUgSFJDVyBJU0IgZmllbGQgZnJvbSBDT05GSUdfU1lTX0lNTVIgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19SU0RfSFJDV19JTU1SICggKChDT05GSUdfU1lTX0lNTVIgJiAweDEwMDAwMDAwKSA+PiAxMCkgfFwKLQkJCSAgICAoKENPTkZJR19TWVNfSU1NUiAmIDB4MDEwMDAwMDApID4+IDcpICB8XAotCQkJICAgICgoQ09ORklHX1NZU19JTU1SICYgMHgwMDEwMDAwMCkgPj4gNCkgKQotCi0jZGVmaW5lIENPTkZJR19TWVNfSFJDV19NQVNURVIJKEhSQ1dfTDJDUEMxMCB8IFwKLQkJCSBIUkNXX0RQUEMxMSB8IFwKLQkJCSBDT05GSUdfU1lTX1JTRF9IUkNXX0lNTVIgfFwKLQkJCSBIUkNXX01NUjAwIHwgXAotCQkJIEhSQ1dfQVBQQzEwIHwgXAotCQkJIEhSQ1dfQ1MxMFBDMDAgfCBcCi0JCQkgSFJDV19NT0RDS19IMDAwMCB8XAotCQkJIENPTkZJR19TWVNfUlNEX0hSQ1dfQk9PVF9GTEFHUykKLQotLyogbm8gc2xhdmVzICovCi0jZGVmaW5lIENPTkZJR19TWVNfSFJDV19TTEFWRTEJMAotI2RlZmluZSBDT05GSUdfU1lTX0hSQ1dfU0xBVkUyCTAKLSNkZWZpbmUgQ09ORklHX1NZU19IUkNXX1NMQVZFMwkwCi0jZGVmaW5lIENPTkZJR19TWVNfSFJDV19TTEFWRTQJMAotI2RlZmluZSBDT05GSUdfU1lTX0hSQ1dfU0xBVkU1CTAKLSNkZWZpbmUgQ09ORklHX1NZU19IUkNXX1NMQVZFNgkwCi0jZGVmaW5lIENPTkZJR19TWVNfSFJDV19TTEFWRTcJMAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIERQUkFNKQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fQUREUglDT05GSUdfU1lTX0lNTVIKLSNkZWZpbmUJQ09ORklHX1NZU19JTklUX1JBTV9TSVpFCTB4NDAwMAkvKiBTaXplIG9mIHVzZWQgYXJlYSBpbiBEUFJBTQkqLwotI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAkoQ09ORklHX1NZU19JTklUX1JBTV9TSVpFIC0gR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCi0jZGVmaW5lCUNPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU3RhcnQgYWRkcmVzc2VzIGZvciB0aGUgZmluYWwgbWVtb3J5IGNvbmZpZ3VyYXRpb24KLSAqIChTZXQgdXAgYnkgdGhlIHN0YXJ0dXAgY29kZSkKLSAqIFBsZWFzZSBub3RlIHRoYXQgQ09ORklHX1NZU19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCi0gKiBOb3RlIGFsc28gdGhhdCB0aGUgbG9naWMgdGhhdCBzZXRzIENPTkZJR19TWVNfUkFNQk9PVCBpcyBwbGF0Zm9ybSBkZXBlbmRlbmQuCi0gKi8KLSNkZWZpbmUJQ09ORklHX1NZU19TRFJBTV9CQVNFCQlQSFlTX1NEUkFNXzYwWAotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UJCVBIWVNfRkxBU0gKLS8qI2RlZmluZQlDT05GSUdfU1lTX01PTklUT1JfQkFTRQkweDIwMDAwMCAqLwotI2RlZmluZQlDT05GSUdfU1lTX01PTklUT1JfQkFTRQlDT05GSUdfU1lTX0ZMQVNIX0JBU0UKLSNpZiBDT05GSUdfU1lTX01PTklUT1JfQkFTRSA8IENPTkZJR19TWVNfRkxBU0hfQkFTRQotI2RlZmluZSBDT05GSUdfU1lTX1JBTUJPT1QKLSNlbmRpZgotI2RlZmluZQlDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoMTYwIDw8IDEwKQkvKiBSZXNlcnZlIDE2MCBrQiBmb3IgTW9uaXRvcgkqLwotI2RlZmluZQlDT05GSUdfU1lTX01BTExPQ19MRU4JCSgxMjggPDwgMTApCS8qIFJlc2VydmUgMTI4IGtCIGZvciBtYWxsb2MoKQkqLwotCi0vKgotICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQotICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKLSAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLSAqLwotI2RlZmluZQlDT05GSUdfU1lTX0JPT1RNQVBTWgkJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgJKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTCTIJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QJNjMJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUCTMwMDAJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKGluIG1zKQkqLwotCi0vKiB0dXJuIG9mZiBOVlJBTSBlbnYgZmVhdHVyZSAqLwotI3VuZGVmIENPTkZJR19OVlJBTV9FTlYKLQotI2RlZmluZQlDT05GSUdfRU5WX0lTX0lOX0ZMQVNICTEKLSNkZWZpbmUgQ09ORklHX0VOVl9BRERSCShQSFlTX0ZMQVNIICsgMHgyODAwMCkJLyogQWRkciBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KLSNkZWZpbmUgQ09ORklHX0VOVl9TRUNUX1NJWkUJMHg4MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENhY2hlIENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0NBQ0hFTElORV9TSVpFCTMyCS8qIEZvciBNUEM4MjYwIENQVQkJCSovCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCi0jZGVmaW5lIENPTkZJR19TWVNfQ0FDSEVMSU5FX1NISUZUCTUJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUJKi8KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBISUR4IC0gSGFyZHdhcmUgSW1wbGVtZW50YXRpb24tZGVwZW5kZW50IFJlZ2lzdGVycwkJCSAyLTExCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBISUQwIGFsc28gY29udGFpbnMgY2FjaGUgY29udHJvbCAtIGluaXRpYWxseSBlbmFibGUgYm90aCBjYWNoZXMgYW5kCi0gKiBpbnZhbGlkYXRlIGNvbnRlbnRzLCB0aGVuIHRoZSBmaW5hbCBzdGF0ZSBsZWF2ZXMgb25seSB0aGUgaW5zdHJ1Y3Rpb24KLSAqIGNhY2hlIGVuYWJsZWQuIE5vdGUgdGhhdCBQb3dlci1PbiBhbmQgSGFyZCByZXNldCBpbnZhbGlkYXRlIHRoZSBjYWNoZXMsCi0gKiBidXQgU29mdCByZXNldCBkb2VzIG5vdC4KLSAqCi0gKiBISUQxIGhhcyBvbmx5IHJlYWQtb25seSBpbmZvcm1hdGlvbiAtIG5vdGhpbmcgdG8gc2V0LgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfSElEMF9JTklUCShISUQwX0lDRXxISUQwX0RDRXxISUQwX0lDRkl8SElEMF9EQ0l8SElEMF9JRkVNfEhJRDBfQUJFKQotI2RlZmluZSBDT05GSUdfU1lTX0hJRDBfRklOQUwJKEhJRDBfSUNFfEhJRDBfSUZFTXxISUQwX0FCRXxISUQwX0VNQ1ApCi0jZGVmaW5lIENPTkZJR19TWVNfSElEMgkwCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFJNUiAtIFJlc2V0IE1vZGUgUmVnaXN0ZXIKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1JNUgkJMAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBCQ1IgLSBCdXMgQ29uZmlndXJhdGlvbgkJCQkJIDQtMjUKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JDUgkJMHgxMDBjMDAwMAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTSVVNQ1IgLSBTSVUgTW9kdWxlIENvbmZpZ3VyYXRpb24JCQkJIDQtMzEKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfU0lVTUNSCShTSVVNQ1JfRFBQQzExIHwgU0lVTUNSX0wyQ1BDMTAgfCBTSVVNQ1JfQVBQQzEwIHwgXAotCQkJCQkgU0lVTUNSX0NTMTBQQzAxIHwgU0lVTUNSX0JDVExDMDEpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNZUENSIC0gU3lzdGVtIFByb3RlY3Rpb24gQ29udHJvbAkJCQkxMS05Ci0gKiBTWVBDUiBjYW4gb25seSBiZSB3cml0dGVuIG9uY2UgYWZ0ZXIgcmVzZXQhCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBXYXRjaGRvZyAmIEJ1cyBNb25pdG9yIFRpbWVyIG1heCwgNjB4IEJ1cyBNb25pdG9yIGVuYWJsZQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfU1lQQ1IJKFNZUENSX1NXVEMgfCBTWVBDUl9CTVQgfCBTWVBDUl9QQk1FIHwgU1lQQ1JfTEJNRSB8IFwKLQkJCSBTWVBDUl9TV1JJIHwgU1lQQ1JfU1dQKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBUTUNOVFNDIC0gVGltZSBDb3VudGVyIFN0YXR1cyBhbmQgQ29udHJvbAkJCSA0LTQwCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDbGVhciBvbmNlIHBlciBTZWNvbmQgYW5kIEFsYXJtIEludGVycnVwdCBTdGF0dXMsIFNldCAzMktIeiB0aW1lcnNjbGssCi0gKiBhbmQgZW5hYmxlIFRpbWUgQ291bnRlcgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfVE1DTlRTQwkoVE1DTlRTQ19TRUMgfCBUTUNOVFNDX0FMUiB8IFRNQ05UU0NfVENGIHwgVE1DTlRTQ19UQ0UpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBJU0NSIC0gUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cyBhbmQgQ29udHJvbAkJIDQtNDIKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENsZWFyIFBlcmlvZGljIEludGVycnVwdCBTdGF0dXMsIFNldCAzMktIeiB0aW1lcnNjbGssIGFuZCBlbmFibGUKLSAqIFBlcmlvZGljIHRpbWVyCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19QSVNDUgkoUElTQ1JfUFN8UElTQ1JfUFRGfFBJU0NSX1BURSkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU0NDUiAtIFN5c3RlbSBDbG9jayBDb250cm9sCQkJCQkgOS04Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19TQ0NSCTB4MDAwMDAwMDAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogUkNDUiAtIFJJU0MgQ29udHJvbGxlciBDb25maWd1cmF0aW9uCQkJCTEzLTcKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1JDQ1IJMAotCi0vKgotICogSW5pdCBNZW1vcnkgQ29udHJvbGxlcjoKLSAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfUFNETVIJMHg0OTREMjQ1MgotI2RlZmluZSBDT05GSUdfU1lTX0xTRE1SCTB4NDk0OTI1NTIKLQotLyogRmxhc2ggKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CUjBfUFJFTElNCShQSFlTX0ZMQVNIIHwgQlJ4X1YpCi0jZGVmaW5lIENPTkZJR19TWVNfT1IwX1BSRUxJTQkoUDJTWl9UT19BTShQSFlTX0ZMQVNIX1NJWkUpIHwgXAotCQkJIE9SeEdfQkNUTEQgfCBcCi0JCQkgT1J4R19TQ1lfNV9DTEspCi0KLS8qIERQUkFNIHRvIHRoZSBQQ0kgQlVTIG9uIHRoZSBwcm90b2NvbCBib2FyZCAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JSMV9QUkVMSU0JKFBIWVNfRFBSQU1fUENJIHwgQlJ4X1YpCi0jZGVmaW5lIENPTkZJR19TWVNfT1IxX1BSRUxJTQkoUDJTWl9UT19BTShQSFlTX0RQUkFNX1BDSV9TSVpFKSB8IFwKLQkJCSBPUnhHX0FDU19ESVY0KQotCi0vKiA2MHggQnVzIFNEUkFNICovCi0jZGVmaW5lIENPTkZJR19TWVNfQlIyX1BSRUxJTQkoUEhZU19TRFJBTV82MFggfCBCUnhfTVNfU0RSQU1fUCB8IEJSeF9WKQotI2RlZmluZSBDT05GSUdfU1lTX09SMl9QUkVMSU0JKE9SeFNfU0laRV9UT19BTShQSFlTX1NEUkFNXzYwWF9TSVpFKSB8IFwKLQkJCSBPUnhTX0JQRF80IHwgXAotCQkJIE9SeFNfUk9XU1RfUEJJMV9BMiB8IFwKLQkJCSBPUnhTX05VTVJfMTMgfCBcCi0JCQkgT1J4U19JQklEKQotCi0vKiBWaXJ0ZXgtRlBHQSAtIFJlZ2lzdGVyICovCi0jZGVmaW5lIENPTkZJR19TWVNfQlIzX1BSRUxJTSAgKFBIWVNfVklSVEVYX1JFR0lTVEVSIHwgQlJ4X1YpCi0jZGVmaW5lIENPTkZJR19TWVNfT1IzX1BSRUxJTSAgKE9SeFNfU0laRV9UT19BTShQSFlTX1ZJUlRFWF9SRUdJU1RFUl9TSVpFKSB8IFwKLQkJCSBPUnhHX1NDWV8xX0NMSyB8IFwKLQkJCSBPUnhHX0FDU19ESVYyIHwgXAotCQkJIE9SeEdfQ1NOVCApCi0KLS8qIGxvY2FsIGJ1cyBTRFJBTSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JSNF9QUkVMSU0JKFBIWVNfU0RSQU1fTE9DQUwgfCBCUnhfUFNfMzIgfCBCUnhfTVNfU0RSQU1fTCB8IEJSeF9WKQotI2RlZmluZSBDT05GSUdfU1lTX09SNF9QUkVMSU0JKE9SeFNfU0laRV9UT19BTShQSFlTX1NEUkFNX0xPQ0FMX1NJWkUpIHwgXAotCQkJIE9SeFNfQlBEXzQgfCBcCi0JCQkgT1J4U19ST1dTVF9QQkkxX0E0IHwgXAotCQkJIE9SeFNfTlVNUl8xMykKLQotLyogRFBSQU0gdG8gdGhlIFNoYXJjLUJ1cyBvbiB0aGUgcHJvdG9jb2wgYm9hcmQgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CUjVfUFJFTElNCShQSFlTX0RQUkFNX1NIQVJDIHwgQlJ4X1YpCi0jZGVmaW5lIENPTkZJR19TWVNfT1I1X1BSRUxJTQkoUDJTWl9UT19BTShQSFlTX0RQUkFNX1NIQVJDX1NJWkUpIHwgXAotCQkJIE9SeEdfQUNTX0RJVjQpCi0KLSNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvdDRxZHMuaCBiL2luY2x1ZGUvY29uZmlncy90NHFkcy5oCmluZGV4IGJkMzI0YmEuLjM2YmM1MjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy90NHFkcy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy90NHFkcy5oCkBAIC02OCw3ICs2OCwxNiBAQAogLyoKICAqICBDb25maWcgdGhlIEwzIENhY2hlIGFzIEwzIFNSQU0KICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfTDNfQUREUgkJQ09ORklHX1JBTUJPT1RfVEVYVF9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9MM19BRERSCQkweEZGRkMwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfTDNfU0laRQkJKDUxMiA8PCAxMCkKKyNkZWZpbmUgQ09ORklHX1NQTF9HRF9BRERSCQkoQ09ORklHX1NZU19JTklUX0wzX0FERFIgKyAzMiAqIDEwMjQpCisjaWZkZWYgQ09ORklHX1JBTUJPT1RfUEJMCisjZGVmaW5lIENPTkZJR19FTlZfQUREUgkJCShDT05GSUdfU1BMX0dEX0FERFIgKyA0ICogMTAyNCkKKyNlbmRpZgorI2RlZmluZSBDT05GSUdfU1BMX1JFTE9DX01BTExPQ19BRERSCShDT05GSUdfU1BMX0dEX0FERFIgKyAxMiAqIDEwMjQpCisjZGVmaW5lIENPTkZJR19TUExfUkVMT0NfTUFMTE9DX1NJWkUJKDUwIDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1BMX1JFTE9DX1NUQUNLCQkoQ09ORklHX1NQTF9HRF9BRERSICsgNjQgKiAxMDI0KQorI2RlZmluZSBDT05GSUdfU1BMX1JFTE9DX1NUQUNLX1NJWkUJKDIyIDw8IDEwKQogCiAjZGVmaW5lIENPTkZJR19TWVNfRENTUkJBUgkJMHhmMDAwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0RDU1JCQVJfUEhZUwkJMHhmMDAwMDAwMDB1bGwKQEAgLTk2LDcgKzEwNSwxMSBAQAogI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBU0VfUEhZUwkoMHhmMDAwMDAwMDB1bGwgfCBDT05GSUdfU1lTX0ZMQVNIX0JBU0UpCiAKIAotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQkJQ09ORklHX1NZU19URVhUX0JBU0UKKyNpZmRlZiBDT05GSUdfU1BMX0JVSUxECisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFCUNPTkZJR19TUExfVEVYVF9CQVNFCisjZWxzZQorI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQlDT05GSUdfU1lTX1RFWFRfQkFTRQkvKiBzdGFydCBvZiBtb25pdG9yICovCisjZW5kaWYKIAogI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9SCS8qIGNhbGwgYm9hcmRfZWFybHlfaW5pdF9yIGZ1bmN0aW9uICovCiAjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgpAQCAtMTE5LDcgKzEzMiw3IEBACiAJCQkJCUdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQogI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfT0ZGU0VUCUNPTkZJR19TWVNfR0JMX0RBVEFfT0ZGU0VUCiAKLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJKDUxMiAqIDEwMjQpCisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSg3NjggKiAxMDI0KQogI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCSg0ICogMTAyNCAqIDEwMjQpCiAKIC8qIFNlcmlhbCBQb3J0IC0gY29udHJvbGxlZCBvbiBib2FyZCB3aXRoIGp1bXBlciBKOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3RyYXRzLmggYi9pbmNsdWRlL2NvbmZpZ3MvdHJhdHMuaAppbmRleCA1ZDhiZDYwLi5jNGFmZWNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvdHJhdHMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvdHJhdHMuaApAQCAtMTAxLDcgKzEwMSw3IEBACiAJIm5hbWU9IlBBUlRTX1VNUyIsc2l6ZT0tLHV1aWQ9JHt1dWlkX2dwdF8iUEFSVFNfVU1TIn1cMCIgXAogCiAjZGVmaW5lIENPTkZJR19ERlVfQUxUIFwKLQkidS1ib290IG1tYyA4MCA0MDA7IiBcCisJInUtYm9vdCByYXcgMHg4MCAweDQwMDsiIFwKIAkidUltYWdlIGV4dDQgMCAyOyIgXAogCSJtb2RlbS5iaW4gZXh0NCAwIDI7IiBcCiAJImV4eW5vczQyMTAtdHJhdHMuZHRiIGV4dDQgMCAyOyIgXApAQCAtMTEyLDcgKzExMiw3IEBACiAJIiJQQVJUU19ST09UIiBwYXJ0IDAgNTsiIFwKIAkiIlBBUlRTX0RBVEEiIHBhcnQgMCA2OyIgXAogCSIiUEFSVFNfVU1TIiBwYXJ0IDAgNzsiIFwKLQkicGFyYW1zLmJpbiBtbWMgMHgzOCAweDhcMCIKKwkicGFyYW1zLmJpbiByYXcgMHgzOCAweDhcMCIKIAogI2RlZmluZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTIFwKIAkiYm9vdGs9IiBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvdHJhdHMyLmggYi9pbmNsdWRlL2NvbmZpZ3MvdHJhdHMyLmgKaW5kZXggNTNkNDQ5Yy4uMTRkZWY3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3RyYXRzMi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy90cmF0czIuaApAQCAtOTEsNyArOTEsNyBAQAogCSJuYW1lPSJQQVJUU19VTVMiLHNpemU9LSx1dWlkPSR7dXVpZF9ncHRfIlBBUlRTX1VNUyJ9XDAiIFwKIAogI2RlZmluZSBDT05GSUdfREZVX0FMVCBcCi0JInUtYm9vdCBtbWMgODAgODAwOyIgXAorCSJ1LWJvb3QgcmF3IDB4ODAgMHg4MDA7IiBcCiAJInVJbWFnZSBleHQ0IDAgMjsiIFwKIAkibW9kZW0uYmluIGV4dDQgMCAyOyIgXAogCSJleHlub3M0NDEyLXRyYXRzMi5kdGIgZXh0NCAwIDI7IiBcCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkiIlBBUlRTX1JPT1QiIHBhcnQgMCA1OyIgXAogCSIiUEFSVFNfREFUQSIgcGFydCAwIDY7IiBcCiAJIiJQQVJUU19VTVMiIHBhcnQgMCA3OyIgXAotCSJwYXJhbXMuYmluIG1tYyAweDM4IDB4OFwwIgorCSJwYXJhbXMuYmluIHJhdyAweDM4IDB4OFwwIgogCiAjZGVmaW5lIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MgXAogCSJib290az0iIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZGRyX3NwZC5oIGIvaW5jbHVkZS9kZHJfc3BkLmgKaW5kZXggMTVhM2U4ZC4uY2YyYWFjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kZHJfc3BkLmgKKysrIGIvaW5jbHVkZS9kZHJfc3BkLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjkwLDExICsyOTAsMjIwIEBACiAKIH0gZGRyM19zcGRfZWVwcm9tX3Q7CiAKKy8qIEZyb20gSkVFQyBTdGFuZGFyZCBOby4gMjEtQyByZWxlYXNlIDIzQSAqLworc3RydWN0IGRkcjRfc3BkX2VlcHJvbV9zIHsKKwkvKiBHZW5lcmFsIFNlY3Rpb246IEJ5dGVzIDAtMTI3ICovCisJdWludDhfdCBpbmZvX3NpemVfY3JjOwkJLyogIDAgIyBieXRlcyAqLworCXVpbnQ4X3Qgc3BkX3JldjsJCS8qICAxIFRvdGFsICMgYnl0ZXMgb2YgU1BEICovCisJdWludDhfdCBtZW1fdHlwZTsJCS8qICAyIEtleSBCeXRlIC8gbWVtIHR5cGUgKi8KKwl1aW50OF90IG1vZHVsZV90eXBlOwkJLyogIDMgS2V5IEJ5dGUgLyBNb2R1bGUgVHlwZSAqLworCXVpbnQ4X3QgZGVuc2l0eV9iYW5rczsJCS8qICA0IERlbnNpdHkgYW5kIEJhbmtzCSovCisJdWludDhfdCBhZGRyZXNzaW5nOwkJLyogIDUgQWRkcmVzc2luZyAqLworCXVpbnQ4X3QgcGFja2FnZV90eXBlOwkJLyogIDYgUGFja2FnZSB0eXBlICovCisJdWludDhfdCBvcHRfZmVhdHVyZTsJCS8qICA3IE9wdGlvbmFsIGZlYXR1cmVzICovCisJdWludDhfdCB0aGVybWFsX3JlZjsJCS8qICA4IFRoZXJtYWwgYW5kIHJlZnJlc2ggKi8KKwl1aW50OF90IG90aF9vcHRfZmVhdHVyZXM7CS8qICA5IE90aGVyIG9wdGlvbmFsIGZlYXR1cmVzICovCisJdWludDhfdCByZXNfMTA7CQkJLyogMTAgUmVzZXJ2ZWQgKi8KKwl1aW50OF90IG1vZHVsZV92ZGQ7CQkvKiAxMSBNb2R1bGUgbm9taW5hbCB2b2x0YWdlICovCisJdWludDhfdCBvcmdhbml6YXRpb247CQkvKiAxMiBNb2R1bGUgT3JnYW5pemF0aW9uICovCisJdWludDhfdCBidXNfd2lkdGg7CQkvKiAxMyBNb2R1bGUgTWVtb3J5IEJ1cyBXaWR0aCAqLworCXVpbnQ4X3QgdGhlcm1fc2Vuc29yOwkJLyogMTQgTW9kdWxlIFRoZXJtYWwgU2Vuc29yICovCisJdWludDhfdCBleHRfdHlwZTsJCS8qIDE1IEV4dGVuZGVkIG1vZHVsZSB0eXBlICovCisJdWludDhfdCByZXNfMTY7CisJdWludDhfdCB0aW1lYmFzZXM7CQkvKiAxNyBNVGIgYW5kIEZUQiAqLworCXVpbnQ4X3QgdGNrX21pbjsJCS8qIDE4IHRDS0FWR21pbiAqLworCXVpbnQ4X3QgdGNrX21heDsJCS8qIDE5IFRDS0FWR21heCAqLworCXVpbnQ4X3QgY2FzbGF0X2IxOwkJLyogMjAgQ0FTIGxhdGVuY2llcywgMXN0IGJ5dGUgKi8KKwl1aW50OF90IGNhc2xhdF9iMjsJCS8qIDIxIENBUyBsYXRlbmNpZXMsIDJuZCBieXRlICovCisJdWludDhfdCBjYXNsYXRfYjM7CQkvKiAyMiBDQVMgbGF0ZW5jaWVzLCAzcmQgYnl0ZSAqLworCXVpbnQ4X3QgY2FzbGF0X2I0OwkJLyogMjMgQ0FTIGxhdGVuY2llcywgNHRoIGJ5dGUgKi8KKwl1aW50OF90IHRhYV9taW47CQkvKiAyNCBNaW4gQ0FTIExhdGVuY3kgVGltZSAqLworCXVpbnQ4X3QgdHJjZF9taW47CQkvKiAyNSBNaW4gUkFTIyB0byBDQVMjIERlbGF5IFRpbWUgKi8KKwl1aW50OF90IHRycF9taW47CQkvKiAyNiBNaW4gUm93IFByZWNoYXJnZSBEZWxheSBUaW1lICovCisJdWludDhfdCB0cmFzX3RyY19leHQ7CQkvKiAyNyBVcHBlciBOaWJibGVzIGZvciB0UkFTIGFuZCB0UkMgKi8KKwl1aW50OF90IHRyYXNfbWluX2xzYjsJCS8qIDI4IHRSQVNtaW4sIGxzYiAqLworCXVpbnQ4X3QgdHJjX21pbl9sc2I7CQkvKiAyOSB0UkNtaW4sIGxzYiAqLworCXVpbnQ4X3QgdHJmYzFfbWluX2xzYjsJCS8qIDMwIE1pbiBSZWZyZXNoIFJlY292ZXJ5IERlbGF5IFRpbWUgKi8KKwl1aW50OF90IHRyZmMxX21pbl9tc2I7CQkvKiAzMSBNaW4gUmVmcmVzaCBSZWNvdmVyeSBEZWxheSBUaW1lICovCisJdWludDhfdCB0cmZjMl9taW5fbHNiOwkJLyogMzIgTWluIFJlZnJlc2ggUmVjb3ZlcnkgRGVsYXkgVGltZSAqLworCXVpbnQ4X3QgdHJmYzJfbWluX21zYjsJCS8qIDMzIE1pbiBSZWZyZXNoIFJlY292ZXJ5IERlbGF5IFRpbWUgKi8KKwl1aW50OF90IHRyZmM0X21pbl9sc2I7CQkvKiAzNCBNaW4gUmVmcmVzaCBSZWNvdmVyeSBEZWxheSBUaW1lICovCisJdWludDhfdCB0cmZjNF9taW5fbXNiOwkJLyogMzUgTWluIFJlZnJlc2ggUmVjb3ZlcnkgRGVsYXkgVGltZSAqLworCXVpbnQ4X3QgdGZhd19tc2I7CQkvKiAzNiBVcHBlciBOaWJibGUgZm9yIHRGQVcgKi8KKwl1aW50OF90IHRmYXdfbWluOwkJLyogMzcgdEZBVywgbHNiICovCisJdWludDhfdCB0cnJkc19taW47CQkvKiAzOCB0UlJEX1NtaW4sIE1UQiAqLworCXVpbnQ4X3QgdHJyZGxfbWluOwkJLyogMzkgdFJSRF9MbWluLCBNVEIgKi8KKwl1aW50OF90IHRjY2RsX21pbjsJCS8qIDQwIHRDQ1NfTG1pbiwgTVRCICovCisJdWludDhfdCByZXNfNDFbNjAtNDFdOwkJLyogNDEgUnNlcnZlZCAqLworCXVpbnQ4X3QgbWFwcGluZ1s3OC02MF07CQkvKiA2MH43NyBDb25uZWN0b3IgdG8gU0RSQU0gYml0IG1hcCAqLworCXVpbnQ4X3QgcmVzXzc4WzExNy03OF07CQkvKiA3OH4xMTYsIFJlc2VydmVkICovCisJaW50OF90IGZpbmVfdGNjZGxfbWluOwkJLyogMTE3IEZpbmUgb2Zmc2V0IGZvciB0Q0NEX0xtaW4gKi8KKwlpbnQ4X3QgZmluZV90cnJkbF9taW47CQkvKiAxMTggRmluZSBvZmZzZXQgZm9yIHRSUkRfTG1pbiAqLworCWludDhfdCBmaW5lX3RycmRzX21pbjsJCS8qIDExOSBGaW5lIG9mZnNldCBmb3IgdFJSRF9TbWluICovCisJaW50OF90IGZpbmVfdHJjX21pbjsJCS8qIDEyMCBGaW5lIG9mZnNldCBmb3IgdFJDbWluICovCisJaW50OF90IGZpbmVfdHJwX21pbjsJCS8qIDEyMSBGaW5lIG9mZnNldCBmb3IgdFJQbWluICovCisJaW50OF90IGZpbmVfdHJjZF9taW47CQkvKiAxMjIgRmluZSBvZmZzZXQgZm9yIHRSQ0RtaW4gKi8KKwlpbnQ4X3QgZmluZV90YWFfbWluOwkJLyogMTIzIEZpbmUgb2Zmc2V0IGZvciB0QUFtaW4gKi8KKwlpbnQ4X3QgZmluZV90Y2tfbWF4OwkJLyogMTI0IEZpbmUgb2Zmc2V0IGZvciB0Q0tBVkdtYXggKi8KKwlpbnQ4X3QgZmluZV90Y2tfbWluOwkJLyogMTI1IEZpbmUgb2Zmc2V0IGZvciB0Q0tBVkdtaW4gKi8KKwkvKiBDUkM6IEJ5dGVzIDEyNi0xMjcgKi8KKwl1aW50OF90IGNyY1syXTsJCQkvKiAxMjYtMTI3IFNQRCBDUkMgKi8KKworCS8qIE1vZHVsZS1TcGVjaWZpYyBTZWN0aW9uOiBCeXRlcyAxMjgtMjU1ICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJLyogMTI4IChVbmJ1ZmZlcmVkKSBNb2R1bGUgTm9taW5hbCBIZWlnaHQgKi8KKwkJCXVpbnQ4X3QgbW9kX2hlaWdodDsKKwkJCS8qIDEyOSAoVW5idWZmZXJlZCkgTW9kdWxlIE1heGltdW0gVGhpY2tuZXNzICovCisJCQl1aW50OF90IG1vZF90aGlja25lc3M7CisJCQkvKiAxMzAgKFVuYnVmZmVyZWQpIFJlZmVyZW5jZSBSYXcgQ2FyZCBVc2VkICovCisJCQl1aW50OF90IHJlZl9yYXdfY2FyZDsKKwkJCS8qIDEzMSAoVW5idWZmZXJlZCkgQWRkcmVzcyBNYXBwaW5nIGZyb20KKwkJCSAgICAgIEVkZ2UgQ29ubmVjdG9yIHRvIERSQU0gKi8KKwkJCXVpbnQ4X3QgYWRkcl9tYXBwaW5nOworCQkJLyogMTMyfjI1MyAoVW5idWZmZXJlZCkgUmVzZXJ2ZWQgKi8KKwkJCXVpbnQ4X3QgcmVzXzEzMlsyNTQtMTMyXTsKKwkJCS8qIDI1NH4yNTUgQ1JDICovCisJCQl1aW50OF90IGNyY1syXTsKKwkJfSB1bmJ1ZmZlcmVkOworCQlzdHJ1Y3QgeworCQkJLyogMTI4IChSZWdpc3RlcmVkKSBNb2R1bGUgTm9taW5hbCBIZWlnaHQgKi8KKwkJCXVpbnQ4X3QgbW9kX2hlaWdodDsKKwkJCS8qIDEyOSAoUmVnaXN0ZXJlZCkgTW9kdWxlIE1heGltdW0gVGhpY2tuZXNzICovCisJCQl1aW50OF90IG1vZF90aGlja25lc3M7CisJCQkvKiAxMzAgKFJlZ2lzdGVyZWQpIFJlZmVyZW5jZSBSYXcgQ2FyZCBVc2VkICovCisJCQl1aW50OF90IHJlZl9yYXdfY2FyZDsKKwkJCS8qIDEzMSBESU1NIE1vZHVsZSBBdHRyaWJ1dGVzICovCisJCQl1aW50OF90IG1vZHVfYXR0cjsKKwkJCS8qIDEzMiBSRElNTSBUaGVybWFsIEhlYXQgU3ByZWFkZXIgU29sdXRpb24gKi8KKwkJCXVpbnQ4X3QgdGhlcm1hbDsKKwkJCS8qIDEzMyBSZWdpc3RlciBNYW51ZmFjdHVyZXIgSUQgQ29kZSwgTFNCICovCisJCQl1aW50OF90IHJlZ19pZF9sbzsKKwkJCS8qIDEzNCBSZWdpc3RlciBNYW51ZmFjdHVyZXIgSUQgQ29kZSwgTVNCICovCisJCQl1aW50OF90IHJlZ19pZF9oaTsKKwkJCS8qIDEzNSBSZWdpc3RlciBSZXZpc2lvbiBOdW1iZXIgKi8KKwkJCXVpbnQ4X3QgcmVnX3JldjsKKwkJCS8qIDEzNiBBZGRyZXNzIG1hcHBpbmcgZnJvbSByZWdpc3RlciB0byBEUkFNICovCisJCQl1aW50OF90IHJlZ19tYXA7CisJCQkvKiAxMzd+MjUzIFJlc2VydmVkICovCisJCQl1aW50OF90IHJlc18xMzdbMjU0LTEzN107CisJCQkvKiAyNTR+MjU1IENSQyAqLworCQkJdWludDhfdCBjcmNbMl07CisJCX0gcmVnaXN0ZXJlZDsKKwkJc3RydWN0IHsKKwkJCS8qIDEyOCAoTG9hZHJlZHVjZWQpIE1vZHVsZSBOb21pbmFsIEhlaWdodCAqLworCQkJdWludDhfdCBtb2RfaGVpZ2h0OworCQkJLyogMTI5IChMb2FkcmVkdWNlZCkgTW9kdWxlIE1heGltdW0gVGhpY2tuZXNzICovCisJCQl1aW50OF90IG1vZF90aGlja25lc3M7CisJCQkvKiAxMzAgKExvYWRyZWR1Y2VkKSBSZWZlcmVuY2UgUmF3IENhcmQgVXNlZCAqLworCQkJdWludDhfdCByZWZfcmF3X2NhcmQ7CisJCQkvKiAxMzEgRElNTSBNb2R1bGUgQXR0cmlidXRlcyAqLworCQkJdWludDhfdCBtb2R1X2F0dHI7CisJCQkvKiAxMzIgUkRJTU0gVGhlcm1hbCBIZWF0IFNwcmVhZGVyIFNvbHV0aW9uICovCisJCQl1aW50OF90IHRoZXJtYWw7CisJCQkvKiAxMzMgUmVnaXN0ZXIgTWFudWZhY3R1cmVyIElEIENvZGUsIExTQiAqLworCQkJdWludDhfdCByZWdfaWRfbG87CisJCQkvKiAxMzQgUmVnaXN0ZXIgTWFudWZhY3R1cmVyIElEIENvZGUsIE1TQiAqLworCQkJdWludDhfdCByZWdfaWRfaGk7CisJCQkvKiAxMzUgUmVnaXN0ZXIgUmV2aXNpb24gTnVtYmVyICovCisJCQl1aW50OF90IHJlZ19yZXY7CisJCQkvKiAxMzYgQWRkcmVzcyBtYXBwaW5nIGZyb20gcmVnaXN0ZXIgdG8gRFJBTSAqLworCQkJdWludDhfdCByZWdfbWFwOworCQkJLyogMTM3IFJlZ2lzdGVyIE91dHB1dCBEcml2ZSBTdHJlbmd0aCBmb3IgQ01EL0FkZCovCisJCQl1aW50OF90IHJlZ19kcnY7CisJCQkvKiAxMzggUmVnaXN0ZXIgT3V0cHV0IERyaXZlIFN0cmVuZ3RoIGZvciBDSyAqLworCQkJdWludDhfdCByZWdfZHJ2X2NrOworCQkJLyogMTM5IERhdGEgQnVmZmVyIFJldmlzaW9uIE51bWJlciAqLworCQkJdWludDhfdCBkYXRhX2J1Zl9yZXY7CisJCQkvKiAxNDAgRFJBTSBWcmVmRFEgZm9yIFBhY2thZ2UgUmFuayAwICovCisJCQl1aW50OF90IHZyZWZxZV9yMDsKKwkJCS8qIDE0MSBEUkFNIFZyZWZEUSBmb3IgUGFja2FnZSBSYW5rIDEgKi8KKwkJCXVpbnQ4X3QgdnJlZnFlX3IxOworCQkJLyogMTQyIERSQU0gVnJlZkRRIGZvciBQYWNrYWdlIFJhbmsgMiAqLworCQkJdWludDhfdCB2cmVmcWVfcjI7CisJCQkvKiAxNDMgRFJBTSBWcmVmRFEgZm9yIFBhY2thZ2UgUmFuayAzICovCisJCQl1aW50OF90IHZyZWZxZV9yMzsKKwkJCS8qIDE0NCBEYXRhIEJ1ZmZlciBWcmVmRFEgZm9yIERSQU0gSW50ZXJmYWNlICovCisJCQl1aW50OF90IGRhdGFfaW50ZjsKKwkJCS8qCisJCQkgKiAxNDUgRGF0YSBCdWZmZXIgTURRIERyaXZlIFN0cmVuZ3RoIGFuZCBSVFQKKwkJCSAqIGZvciBkYXRhIHJhdGUgPD0gMTg2NgorCQkJICovCisJCQl1aW50OF90IGRhdGFfZHJ2XzE4NjY7CisJCQkvKgorCQkJICogMTQ2IERhdGEgQnVmZmVyIE1EUSBEcml2ZSBTdHJlbmd0aCBhbmQgUlRUCisJCQkgKiBmb3IgMTg2NiA8IGRhdGEgcmF0ZSA8PSAyNDAwCisJCQkgKi8KKwkJCXVpbnQ4X3QgZGF0YV9kcnZfMjQwMDsKKwkJCS8qCisJCQkgKiAxNDcgRGF0YSBCdWZmZXIgTURRIERyaXZlIFN0cmVuZ3RoIGFuZCBSVFQKKwkJCSAqIGZvciAyNDAwIDwgZGF0YSByYXRlIDw9IDMyMDAKKwkJCSAqLworCQkJdWludDhfdCBkYXRhX2Rydl8zMjAwOworCQkJLyogMTQ4IERSQU0gRHJpdmUgU3RyZW5ndGggKi8KKwkJCXVpbnQ4X3QgZHJhbV9kcnY7CisJCQkvKgorCQkJICogMTQ5IERSQU0gT0RUIChSVFRfV1IsIFJUVF9OT00pCisJCQkgKiBmb3IgZGF0YSByYXRlIDw9IDE4NjYKKwkJCSAqLworCQkJdWludDhfdCBkcmFtX29kdF8xODY2OworCQkJLyoKKwkJCSAqIDE1MCBEUkFNIE9EVCAoUlRUX1dSLCBSVFRfTk9NKQorCQkJICogZm9yIDE4NjYgPCBkYXRhIHJhdGUgPD0gMjQwMAorCQkJICovCisJCQl1aW50OF90IGRyYW1fb2R0XzI0MDA7CisJCQkvKgorCQkJICogMTUxIERSQU0gT0RUIChSVFRfV1IsIFJUVF9OT00pCisJCQkgKiBmb3IgMjQwMCA8IGRhdGEgcmF0ZSA8PSAzMjAwCisJCQkgKi8KKwkJCXVpbnQ4X3QgZHJhbV9vZHRfMzIwMDsKKwkJCS8qCisJCQkgKiAxNTIgRFJBTSBPRFQgKFJUVF9QQVJLKQorCQkJICogZm9yIGRhdGEgcmF0ZSA8PSAxODY2CisJCQkgKi8KKwkJCXVpbnQ4X3QgZHJhbV9vZHRfcGFya18xODY2OworCQkJLyoKKwkJCSAqIDE1MyBEUkFNIE9EVCAoUlRUX1BBUkspCisJCQkgKiBmb3IgMTg2NiA8IGRhdGEgcmF0ZSA8PSAyNDAwCisJCQkgKi8KKwkJCXVpbnQ4X3QgZHJhbV9vZHRfcGFya18yNDAwOworCQkJLyoKKwkJCSAqIDE1NCBEUkFNIE9EVCAoUlRUX1BBUkspCisJCQkgKiBmb3IgMjQwMCA8IGRhdGEgcmF0ZSA8PSAzMjAwCisJCQkgKi8KKwkJCXVpbnQ4X3QgZHJhbV9vZHRfcGFya18zMjAwOworCQkJdWludDhfdCByZXNfMTU1WzI1NC0xNTVdOwkvKiBSZXNlcnZlZCAqLworCQkJLyogMjU0fjI1NSBDUkMgKi8KKwkJCXVpbnQ4X3QgY3JjWzJdOworCQl9IGxvYWRyZWR1Y2VkOworCQl1aW50OF90IHVjWzEyOF07IC8qIDEyOC0yNTUgTW9kdWxlLVNwZWNpZmljIFNlY3Rpb24gKi8KKwl9IG1vZF9zZWN0aW9uOworCisJdWludDhfdCByZXNfMjU2WzMyMC0yNTZdOwkvKiAyNTZ+MzE5IFJlc2VydmVkICovCisKKwkvKiBNb2R1bGUgc3VwcGxpZXIncyBkYXRhOiBCeXRlIDMyMH4zODMgKi8KKwl1aW50OF90IG1taWRfbHNiOwkJLyogMzIwIE1vZHVsZSBNZmdJRCBDb2RlIExTQiAqLworCXVpbnQ4X3QgbW1pZF9tc2I7CQkvKiAzMjEgTW9kdWxlIE1mZ0lEIENvZGUgTVNCICovCisJdWludDhfdCBtbG9jOwkJCS8qIDMyMiBNZmcgTG9jYXRpb24gKi8KKwl1aW50OF90IG1kYXRlWzJdOwkJLyogMzIzfjMyNCBNZmcgRGF0ZSAqLworCXVpbnQ4X3Qgc2VybnVtWzRdOwkJLyogMzI1fjMyOCBNb2R1bGUgU2VyaWFsIE51bWJlciAqLworCXVpbnQ4X3QgbXBhcnRbMjBdOwkJLyogMzI5fjM0OCBNZmcncyBNb2R1bGUgUGFydCBOdW1iZXIgKi8KKwl1aW50OF90IG1yZXY7CQkJLyogMzQ5IE1vZHVsZSBSZXZpc2lvbiBDb2RlICovCisJdWludDhfdCBkbWlkX2xzYjsJCS8qIDM1MCBEUkFNIE1mZ0lEIENvZGUgTFNCICovCisJdWludDhfdCBkbWlkX21zYjsJCS8qIDM1MSBEUkFNIE1mZ0lEIENvZGUgTVNCICovCisJdWludDhfdCBzdGVwcGluZzsJCS8qIDM1MiBEUkFNIHN0ZXBwaW5nICovCisJdWludDhfdCBtc2RbMjldOwkJLyogMzUzfjM4MSBNZmcncyBTcGVjaWZpYyBEYXRhICovCisJdWludDhfdCByZXNfMzgyWzJdOwkJLyogMzgyfjM4MyBSZXNlcnZlZCAqLworCisJdWludDhfdCB1c2VyWzUxMi0zODRdOwkJLyogMzg0fjUxMSBFbmQgVXNlciBQcm9ncmFtbWFibGUgKi8KK307CisKIGV4dGVybiB1bnNpZ25lZCBpbnQgZGRyMV9zcGRfY2hlY2soY29uc3QgZGRyMV9zcGRfZWVwcm9tX3QgKnNwZCk7CiBleHRlcm4gdm9pZCBkZHIxX3NwZF9kdW1wKGNvbnN0IGRkcjFfc3BkX2VlcHJvbV90ICpzcGQpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBkZHIyX3NwZF9jaGVjayhjb25zdCBkZHIyX3NwZF9lZXByb21fdCAqc3BkKTsKIGV4dGVybiB2b2lkIGRkcjJfc3BkX2R1bXAoY29uc3QgZGRyMl9zcGRfZWVwcm9tX3QgKnNwZCk7CiBleHRlcm4gdW5zaWduZWQgaW50IGRkcjNfc3BkX2NoZWNrKGNvbnN0IGRkcjNfc3BkX2VlcHJvbV90ICpzcGQpOwordW5zaWduZWQgaW50IGRkcjRfc3BkX2NoZWNrKGNvbnN0IHN0cnVjdCBkZHI0X3NwZF9lZXByb21fcyAqc3BkKTsKIAogLyoKICAqIEJ5dGUgMiBGdW5kYW1lbnRhbCBNZW1vcnkgVHlwZXMuCkBAIC0zMTAsNiArNTE5LDcgQEAKICNkZWZpbmUgU1BEX01FTVRZUEVfRERSMl9GQkRJTU0JKDB4MDkpCiAjZGVmaW5lIFNQRF9NRU1UWVBFX0REUjJfRkJESU1NX1BST0JFCSgweDBBKQogI2RlZmluZSBTUERfTUVNVFlQRV9ERFIzCSgweDBCKQorI2RlZmluZSBTUERfTUVNVFlQRV9ERFI0CSgweDBDKQogCiAvKiBESU1NIFR5cGUgZm9yIEREUjIgU1BEIChhY2NvcmRpbmcgdG8gdjEuMykgKi8KICNkZWZpbmUgRERSMl9TUERfRElNTVRZUEVfVU5ERUZJTkVECSgweDAwKQpAQCAtMzM4LDQgKzU0OCwxOCBAQAogI2RlZmluZSBERFIzX1NQRF9NT0RVTEVUWVBFXzE2Ql9TT19ESU1NCSgweDBDKQogI2RlZmluZSBERFIzX1NQRF9NT0RVTEVUWVBFXzMyQl9TT19ESU1NCSgweDBEKQogCisvKiBESU1NIFR5cGUgZm9yIEREUjQgU1BEICovCisjZGVmaW5lIEREUjRfU1BEX01PRFVMRVRZUEVfTUFTSwkoMHgwZikKKyNkZWZpbmUgRERSNF9TUERfTU9EVUxFVFlQRV9FWFQJCSgweDAwKQorI2RlZmluZSBERFI0X1NQRF9NT0RVTEVUWVBFX1JESU1NCSgweDAxKQorI2RlZmluZSBERFI0X1NQRF9NT0RVTEVUWVBFX1VESU1NCSgweDAyKQorI2RlZmluZSBERFI0X1NQRF9NT0RVTEVUWVBFX1NPX0RJTU0JKDB4MDMpCisjZGVmaW5lIEREUjRfU1BEX01PRFVMRVRZUEVfTFJESU1NCSgweDA0KQorI2RlZmluZSBERFI0X1NQRF9NT0RVTEVUWVBFX01JTklfUkRJTU0JKDB4MDUpCisjZGVmaW5lIEREUjRfU1BEX01PRFVMRVRZUEVfTUlOSV9VRElNTQkoMHgwNikKKyNkZWZpbmUgRERSNF9TUERfTU9EVUxFVFlQRV83MkJfU09fVURJTU0JKDB4MDgpCisjZGVmaW5lIEREUjRfU1BEX01PRFVMRVRZUEVfNzJCX1NPX1JESU1NCSgweDA5KQorI2RlZmluZSBERFI0X1NQRF9NT0RVTEVUWVBFXzE2Ql9TT19ESU1NCSgweDBDKQorI2RlZmluZSBERFI0X1NQRF9NT0RVTEVUWVBFXzMyQl9TT19ESU1NCSgweDBEKQorCiAjZW5kaWYgLyogX0REUl9TUERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZGZ1LmggYi9pbmNsdWRlL2RmdS5oCmluZGV4IDZjNzFlY2IuLjI0MDkxNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZGZ1LmgKKysrIGIvaW5jbHVkZS9kZnUuaApAQCAtNjQsMTEgKzY0LDYgQEAKIAl1bnNpZ25lZCBpbnQJc2l6ZTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9tbWNfYmxrX3NpemUoaW50IGRldikKLXsKLQlyZXR1cm4gZmluZF9tbWNfZGV2aWNlKGRldiktPnJlYWRfYmxfbGVuOwotfQotCiAjZGVmaW5lIERGVV9OQU1FX1NJWkUJCQkzMgogI2RlZmluZSBERlVfQ01EX0JVRl9TSVpFCQkxMjgKICNpZm5kZWYgQ09ORklHX1NZU19ERlVfREFUQV9CVUZfU0laRQpAQCAtMTczLDEyICsxNjgsNSBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfREZVX0ZVTkNUSU9OCiBpbnQgZGZ1X2FkZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpOwotI2Vsc2UKLWludCBkZnVfYWRkKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgogI2VuZGlmIC8qIF9fREZVX0VOVElUWV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9lNTAwLmggYi9pbmNsdWRlL2U1MDAuaAppbmRleCAwYzI0MzI2Li41ODg0YTIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2U1MDAuaAorKysgYi9pbmNsdWRlL2U1MDAuaApAQCAtMjQsNiArMjQsOSBAQAogI2lmZGVmIENPTkZJR19TWVNfRFBBQV9QTUUKIAl1bnNpZ25lZCBsb25nIGZyZXFfcG1lOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NZU19GU0xfU0lOR0xFX1NPVVJDRV9DTEsKKwl1bnNpZ25lZCBjaGFyIGRpZmZfc3lzY2xrOworI2VuZGlmCiB9IE1QQzg1eHhfU1lTX0lORk87CiAKICNlbmRpZiAgLyogX0FTTUxBTkdVQUdFICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Vudmlyb25tZW50LmggYi9pbmNsdWRlL2Vudmlyb25tZW50LmgKaW5kZXggNDZhMzU1NC4uMDg2NzlhZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZW52aXJvbm1lbnQuaAorKysgYi9pbmNsdWRlL2Vudmlyb25tZW50LmgKQEAgLTE0Niw3ICsxNDYsMTIgQEAKIGV4dGVybiBjaGFyICplbnZfbmFtZV9zcGVjOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfRU5WX0FFUworLyogTWFrZSBzdXJlIHRoZSBwYXlsb2FkIGlzIG11bHRpcGxlIG9mIEFFUyBibG9jayBzaXplICovCisjZGVmaW5lIEVOVl9TSVpFICgoQ09ORklHX0VOVl9TSVpFIC0gRU5WX0hFQURFUl9TSVpFKSAmIH4oMTYgLSAxKSkKKyNlbHNlCiAjZGVmaW5lIEVOVl9TSVpFIChDT05GSUdfRU5WX1NJWkUgLSBFTlZfSEVBREVSX1NJWkUpCisjZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgZW52aXJvbm1lbnRfcyB7CiAJdWludDMyX3QJY3JjOwkJLyogQ1JDMzIgb3ZlciBkYXRhIGJ5dGVzCSovCkBAIC0xNTQsNyArMTU5LDEyIEBACiAJdW5zaWduZWQgY2hhcglmbGFnczsJCS8qIGFjdGl2ZS9vYnNvbGV0ZSBmbGFncwkqLwogI2VuZGlmCiAJdW5zaWduZWQgY2hhcglkYXRhW0VOVl9TSVpFXTsgLyogRW52aXJvbm1lbnQgZGF0YQkJKi8KLX0gZW52X3Q7Cit9IGVudl90CisjaWZkZWYgQ09ORklHX0VOVl9BRVMKKy8qIE1ha2Ugc3VyZSB0aGUgZW52IGlzIGFsaWduZWQgdG8gYmxvY2sgc2l6ZS4gKi8KK19fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSkKKyNlbmRpZgorOwogCiAjaWZkZWYgRU5WX0lTX0VNQkVEREVECiBleHRlcm4gZW52X3QgZW52aXJvbm1lbnQ7CkBAIC0yMDEsNiArMjExLDkgQEAKIC8qIEltcG9ydCBmcm9tIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpbnRvIGhhc2ggdGFibGUgKi8KIGludCBlbnZfaW1wb3J0KGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGNoZWNrKTsKIAorLyogRXhwb3J0IGZyb20gaGFzaCB0YWJsZSBpbnRvIGJpbmFyeSByZXByZXNlbnRhdGlvbiAqLworaW50IGVudl9leHBvcnQoZW52X3QgKmVudl9vdXQpOworCiAjZW5kaWYgLyogRE9fREVQU19PTkxZICovCiAKICNlbmRpZiAvKiBfRU5WSVJPTk1FTlRfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZmRjLmggYi9pbmNsdWRlL2ZkYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDdiMGUyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvZmRjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBTdMOkdWJsaSBGYXZlcmdlcyAtIDx3d3cuc3RhdWJsaS5jb20+Ci0gKiBQaWVycmUgQVVCRVJUICBwLmF1YmVydEBzdGF1YmxpLmNvbQotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwotICovCi0KLSNpZm5kZWYgX0ZEQ19IXwotI2RlZmluZSBfRkRDX0hfCi0KLS8qIEZ1bmN0aW9ucyBwcm90b3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLWludCBmZGNfZmRvc19pbml0IChpbnQgZHJpdmUpOwotaW50IGZkY19mZG9zX3NlZWsgKGludCB3aGVyZSk7Ci1pbnQgZmRjX2Zkb3NfcmVhZCAodm9pZCAqYnVmZmVyLCBpbnQgbGVuKTsKLQotaW50IGRvc19vcGVuKGNoYXIgKm5hbWUpOwotaW50IGRvc19yZWFkICh1bG9uZyBhZGRyKTsKLWludCBkb3NfZGlyICh2b2lkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZkdF9zdXBwb3J0LmggYi9pbmNsdWRlL2ZkdF9zdXBwb3J0LmgKaW5kZXggMTVlYmEwMS4uYWUwMTBiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mZHRfc3VwcG9ydC5oCisrKyBiL2luY2x1ZGUvZmR0X3N1cHBvcnQuaApAQCAtMTIsNiArMTIsOCBAQAogCiAjaW5jbHVkZSA8bGliZmR0Lmg+CiAKK3UzMiBmZHRfZ2V0cHJvcF91MzJfZGVmYXVsdF9ub2RlKGNvbnN0IHZvaWQgKmZkdCwgaW50IG9mZiwgaW50IGNlbGwsCisJCQkJY29uc3QgY2hhciAqcHJvcCwgY29uc3QgdTMyIGRmbHQpOwogdTMyIGZkdF9nZXRwcm9wX3UzMl9kZWZhdWx0KGNvbnN0IHZvaWQgKmZkdCwgY29uc3QgY2hhciAqcGF0aCwKIAkJCQljb25zdCBjaGFyICpwcm9wLCBjb25zdCB1MzIgZGZsdCk7CiBpbnQgZmR0X2Nob3Nlbih2b2lkICpmZHQsIGludCBmb3JjZSk7CkBAIC05Miw2ICs5NCw4IEBACiBpbnQgZmR0X3ZlcmlmeV9hbGlhc19hZGRyZXNzKHZvaWQgKmZkdCwgaW50IGFub2RlLCBjb25zdCBjaGFyICphbGlhcywKIAkJCSAgICAgIHU2NCBhZGRyKTsKIHU2NCBmZHRfZ2V0X2Jhc2VfYWRkcmVzcyh2b2lkICpmZHQsIGludCBub2RlKTsKK2ludCBmZHRfcmVhZF9yYW5nZSh2b2lkICpmZHQsIGludCBub2RlLCBpbnQgbiwgdWludDY0X3QgKmNoaWxkX2FkZHIsCisJCSAgIHVpbnQ2NF90ICphZGRyLCB1aW50NjRfdCAqbGVuKTsKIAogZW51bSBmZHRfc3RhdHVzIHsKIAlGRFRfU1RBVFVTX09LQVksCkBAIC0xMjIsNCArMTI2LDkgQEAKIH0KIAogI2VuZGlmIC8qIGlmZGVmIENPTkZJR19PRl9MSUJGRFQgKi8KKworI2lmZGVmIFVTRV9IT1NUQ0MKK2ludCBmZHRkZWNfZ2V0X2ludChjb25zdCB2b2lkICpibG9iLCBpbnQgbm9kZSwgY29uc3QgY2hhciAqcHJvcF9uYW1lLAorCQlpbnQgZGVmYXVsdF92YWwpOworI2VuZGlmCiAjZW5kaWYgLyogaWZuZGVmIF9fRkRUX1NVUFBPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mc2xfZGRyLmggYi9pbmNsdWRlL2ZzbF9kZHIuaAppbmRleCA3MmMwYjJlLi41YzQ5YjIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZzbF9kZHIuaAorKysgYi9pbmNsdWRlL2ZzbF9kZHIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTksNiArOSw3IEBACiAjaWZuZGVmIEZTTF9ERFJfTUFJTl9ICiAjZGVmaW5lIEZTTF9ERFJfTUFJTl9ICiAKKyNpbmNsdWRlIDxmc2xfZGRyY192ZXJzaW9uLmg+CiAjaW5jbHVkZSA8ZnNsX2Rkcl9zZHJhbS5oPgogI2luY2x1ZGUgPGZzbF9kZHJfZGltbV9wYXJhbXMuaD4KIApAQCAtMjIsNiArMjMsMTAgQEAKICNkZWZpbmUgZGRyX291dDMyKGEsIHYpCW91dF9iZTMyKGEsIHYpCiAjZW5kaWYKIAorI2RlZmluZSBfRERSX0FERFIgQ09ORklHX1NZU19GU0xfRERSX0FERFIKKwordTMyIGZzbF9kZHJfZ2V0X3ZlcnNpb24odm9pZCk7CisKICNpZiBkZWZpbmVkKENPTkZJR19ERFJfU1BEKSB8fCBkZWZpbmVkKENPTkZJR19TUERfRUVQUk9NKQogLyoKICAqIEJpbmQgdGhlIG1haW4gRERSIHNldHVwIGRyaXZlcidzIGdlbmVyaWMgbmFtZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnNsX2Rkcl9kaW1tX3BhcmFtcy5oIGIvaW5jbHVkZS9mc2xfZGRyX2RpbW1fcGFyYW1zLmgKaW5kZXggOTlhNzJiYy4uMDlhNjdhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mc2xfZGRyX2RpbW1fcGFyYW1zLmgKKysrIGIvaW5jbHVkZS9mc2xfZGRyX2RpbW1fcGFyYW1zLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTMsNyArMTMsNyBAQAogI2RlZmluZSBFRENfRUNDCQkyCiAjZGVmaW5lIEVEQ19BQ19QQVJJVFkJNAogCi0vKiBQYXJhbWV0ZXJzIGZvciBhIEREUjIgZGltbSBjb21wdXRlZCBmcm9tIHRoZSBTUEQgKi8KKy8qIFBhcmFtZXRlcnMgZm9yIGEgRERSIGRpbW0gY29tcHV0ZWQgZnJvbSB0aGUgU1BEICovCiB0eXBlZGVmIHN0cnVjdCBkaW1tX3BhcmFtc19zIHsKIAogCS8qIERJTU0gb3JnYW5pemF0aW9uIHBhcmFtZXRlcnMgKi8KQEAgLTMyLDcgKzMyLDEyIEBACiAJdW5zaWduZWQgaW50IG5fcm93X2FkZHI7CiAJdW5zaWduZWQgaW50IG5fY29sX2FkZHI7CiAJdW5zaWduZWQgaW50IGVkY19jb25maWc7CS8qIDAgPSBub25lLCAxID0gcGFyaXR5LCAyID0gRUNDICovCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSNAorCXVuc2lnbmVkIGludCBiYW5rX2FkZHJfYml0czsKKwl1bnNpZ25lZCBpbnQgYmFua19ncm91cF9iaXRzOworI2Vsc2UKIAl1bnNpZ25lZCBpbnQgbl9iYW5rc19wZXJfc2RyYW1fZGV2aWNlOworI2VuZGlmCiAJdW5zaWduZWQgaW50IGJ1cnN0X2xlbmd0aHNfYml0bWFzazsJLyogQkw9NCBiaXQgMiwgQkw9OCA9IGJpdCAzICovCiAJdW5zaWduZWQgaW50IHJvd19kZW5zaXR5OwogCkBAIC00MywxOSArNDgsMTkgQEAKIAogCS8qIERJTU0gdGltaW5nIHBhcmFtZXRlcnMgKi8KIAotCXVuc2lnbmVkIGludCBtdGJfcHM7CS8qIG1lZGl1bSB0aW1lYmFzZSBwcywgb25seSBmb3IgZGRyMyAqLwotCXVuc2lnbmVkIGludCBmdGJfMTB0aF9wczsgLyogZmluZSB0aW1lYmFzZSwgaW4gMS8xMCBwcywgb25seSBmb3IgZGRyMyAqLwotCXVuc2lnbmVkIGludCB0YWFfcHM7CS8qIG1pbmltdW0gQ0FTIGxhdGVuY3kgdGltZSwgb25seSBmb3IgZGRyMyAqLwotCXVuc2lnbmVkIGludCB0ZmF3X3BzOwkvKiBmb3VyIGFjdGl2ZSB3aW5kb3cgZGVsYXksIG9ubHkgZm9yIGRkcjMgKi8KKwlpbnQgbXRiX3BzOwkvKiBtZWRpdW0gdGltZWJhc2UgcHMgKi8KKwlpbnQgZnRiXzEwdGhfcHM7IC8qIGZpbmUgdGltZWJhc2UsIGluIDEvMTAgcHMgKi8KKwlpbnQgdGFhX3BzOwkvKiBtaW5pbXVtIENBUyBsYXRlbmN5IHRpbWUgKi8KKwlpbnQgdGZhd19wczsJLyogZm91ciBhY3RpdmUgd2luZG93IGRlbGF5ICovCiAKIAkvKgogCSAqIFNEUkFNIGNsb2NrIHBlcmlvZHMKIAkgKiBUaGUgcmFuZ2UgZm9yIHRoZXNlIGFyZSAxMDAwLTEwMDAwIHNvIGEgc2hvcnQgc2hvdWxkIGJlIHN1ZmZpY2llbnQKIAkgKi8KLQl1bnNpZ25lZCBpbnQgdGNrbWluX3hfcHM7Ci0JdW5zaWduZWQgaW50IHRja21pbl94X21pbnVzXzFfcHM7Ci0JdW5zaWduZWQgaW50IHRja21pbl94X21pbnVzXzJfcHM7Ci0JdW5zaWduZWQgaW50IHRja21heF9wczsKKwlpbnQgdGNrbWluX3hfcHM7CisJaW50IHRja21pbl94X21pbnVzXzFfcHM7CisJaW50IHRja21pbl94X21pbnVzXzJfcHM7CisJaW50IHRja21heF9wczsKIAogCS8qIFNQRC1kZWZpbmVkIENBUyBsYXRlbmNpZXMgKi8KIAl1bnNpZ25lZCBpbnQgY2FzbGF0X3g7CkBAIC02NSwzMiArNzAsNDYgQEAKIAl1bnNpZ25lZCBpbnQgY2FzbGF0X2xvd2VzdF9kZXJhdGVkOwkvKiBEZXJhdGVkIENBUyBsYXRlbmN5ICovCiAKIAkvKiBiYXNpYyB0aW1pbmcgcGFyYW1ldGVycyAqLwotCXVuc2lnbmVkIGludCB0cmNkX3BzOwotCXVuc2lnbmVkIGludCB0cnBfcHM7Ci0JdW5zaWduZWQgaW50IHRyYXNfcHM7CisJaW50IHRyY2RfcHM7CisJaW50IHRycF9wczsKKwlpbnQgdHJhc19wczsKIAotCXVuc2lnbmVkIGludCB0d3JfcHM7CS8qIG1heGltdW0gPSA2Mzc1MCBwcyAqLwotCXVuc2lnbmVkIGludCB0d3RyX3BzOwkvKiBtYXhpbXVtID0gNjM3NTAgcHMgKi8KLQl1bnNpZ25lZCBpbnQgdHJmY19wczsgICAvKiBtYXggPSAyNTUgbnMgKyAyNTYgbnMgKyAuNzUgbnMKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9ERFI0CisJaW50IHRyZmMxX3BzOworCWludCB0cmZjMl9wczsKKwlpbnQgdHJmYzRfcHM7CisJaW50IHRycmRzX3BzOworCWludCB0cnJkbF9wczsKKwlpbnQgdGNjZGxfcHM7CisjZWxzZQorCWludCB0d3JfcHM7CS8qIG1heGltdW0gPSA2Mzc1MCBwcyAqLworCWludCB0cmZjX3BzOwkvKiBtYXggPSAyNTUgbnMgKyAyNTYgbnMgKyAuNzUgbnMKIAkJCQkgICAgICAgPSA1MTE3NTAgcHMgKi8KKwlpbnQgdHJyZF9wczsJLyogbWF4aW11bSA9IDYzNzUwIHBzICovCisJaW50IHR3dHJfcHM7CS8qIG1heGltdW0gPSA2Mzc1MCBwcyAqLworCWludCB0cnRwX3BzOwkvKiBieXRlIDM4LCBzcGQtPnRydHAgKi8KKyNlbmRpZgogCi0JdW5zaWduZWQgaW50IHRycmRfcHM7CS8qIG1heGltdW0gPSA2Mzc1MCBwcyAqLwotCXVuc2lnbmVkIGludCB0cmNfcHM7CS8qIG1heGltdW0gPSAyNTQgbnMgKyAuNzUgbnMgPSAyNTQ3NTAgcHMgKi8KKwlpbnQgdHJjX3BzOwkvKiBtYXhpbXVtID0gMjU0IG5zICsgLjc1IG5zID0gMjU0NzUwIHBzICovCiAKLQl1bnNpZ25lZCBpbnQgcmVmcmVzaF9yYXRlX3BzOwotCXVuc2lnbmVkIGludCBleHRlbmRlZF9vcF9zcnQ7CisJaW50IHJlZnJlc2hfcmF0ZV9wczsKKwlpbnQgZXh0ZW5kZWRfb3Bfc3J0OwogCi0JLyogRERSMyBkb2Vzbid0IG5lZWQgdGhlc2UgYXMgYmVsb3cgKi8KLQl1bnNpZ25lZCBpbnQgdGlzX3BzOwkvKiBieXRlIDMyLCBzcGQtPmNhX3NldHVwICovCi0JdW5zaWduZWQgaW50IHRpaF9wczsJLyogYnl0ZSAzMywgc3BkLT5jYV9ob2xkICovCi0JdW5zaWduZWQgaW50IHRkc19wczsJLyogYnl0ZSAzNCwgc3BkLT5kYXRhX3NldHVwICovCi0JdW5zaWduZWQgaW50IHRkaF9wczsJLyogYnl0ZSAzNSwgc3BkLT5kYXRhX2hvbGQgKi8KLQl1bnNpZ25lZCBpbnQgdHJ0cF9wczsJLyogYnl0ZSAzOCwgc3BkLT50cnRwICovCi0JdW5zaWduZWQgaW50IHRkcXNxX21heF9wczsJLyogYnl0ZSA0NCwgc3BkLT50ZHFzcSAqLwotCXVuc2lnbmVkIGludCB0cWhzX3BzOwkvKiBieXRlIDQ1LCBzcGQtPnRxaHMgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjEpIHx8IGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSMikKKwlpbnQgdGlzX3BzOwkvKiBieXRlIDMyLCBzcGQtPmNhX3NldHVwICovCisJaW50IHRpaF9wczsJLyogYnl0ZSAzMywgc3BkLT5jYV9ob2xkICovCisJaW50IHRkc19wczsJLyogYnl0ZSAzNCwgc3BkLT5kYXRhX3NldHVwICovCisJaW50IHRkaF9wczsJLyogYnl0ZSAzNSwgc3BkLT5kYXRhX2hvbGQgKi8KKwlpbnQgdGRxc3FfbWF4X3BzOwkvKiBieXRlIDQ0LCBzcGQtPnRkcXNxICovCisJaW50IHRxaHNfcHM7CS8qIGJ5dGUgNDUsIHNwZC0+dHFocyAqLworI2VuZGlmCiAKIAkvKiBERFIzIFJESU1NICovCiAJdW5zaWduZWQgY2hhciByY3dbMTZdOwkvKiBSZWdpc3RlciBDb250cm9sIFdvcmQgMC0xNSAqLworI2lmZGVmIENPTkZJR19TWVNfRlNMX0REUjQKKwl1bnNpZ25lZCBpbnQgZHFfbWFwcGluZ1sxOF07CisJdW5zaWduZWQgaW50IGRxX21hcHBpbmdfb3JzOworI2VuZGlmCiB9IGRpbW1fcGFyYW1zX3Q7CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgZGRyX2NvbXB1dGVfZGltbV9wYXJhbWV0ZXJzKApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mc2xfZGRyX3NkcmFtLmggYi9pbmNsdWRlL2ZzbF9kZHJfc2RyYW0uaAppbmRleCAyYTM2NDMxLi5lOGEyZGI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZzbF9kZHJfc2RyYW0uaAorKysgYi9pbmNsdWRlL2ZzbF9kZHJfc2RyYW0uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTEzLDExICsxMywxMyBAQAogICogUGljayBhIGJhc2ljIEREUiBUZWNobm9sb2d5LgogICovCiAjaW5jbHVkZSA8ZGRyX3NwZC5oPgorI2luY2x1ZGUgPGZzbF9kZHJjX3ZlcnNpb24uaD4KIAotI2RlZmluZSBTRFJBTV9UWVBFX0REUjEgICAgMgotI2RlZmluZSBTRFJBTV9UWVBFX0REUjIgICAgMwotI2RlZmluZSBTRFJBTV9UWVBFX0xQRERSMSAgNgotI2RlZmluZSBTRFJBTV9UWVBFX0REUjMgICAgNworI2RlZmluZSBTRFJBTV9UWVBFX0REUjEJCTIKKyNkZWZpbmUgU0RSQU1fVFlQRV9ERFIyCQkzCisjZGVmaW5lIFNEUkFNX1RZUEVfTFBERFIxCTYKKyNkZWZpbmUgU0RSQU1fVFlQRV9ERFIzCQk3CisjZGVmaW5lIFNEUkFNX1RZUEVfRERSNAkJNQogCiAjZGVmaW5lIEREUl9CTDQJCTQJLyogYnVyc3QgbGVuZ3RoIDQgKi8KICNkZWZpbmUgRERSX0JDNAkJRERSX0JMNAkvKiBidXJzdCBjaG9wIGZvciBkZHIzICovCkBAIC01NCw2ICs1NiwxMiBAQAogI2lmbmRlZiBDT05GSUdfRlNMX1NEUkFNX1RZUEUKICNkZWZpbmUgQ09ORklHX0ZTTF9TRFJBTV9UWVBFCVNEUkFNX1RZUEVfRERSMwogI2VuZGlmCisjZWxpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjQpCisjZGVmaW5lIEZTTF9ERFJfTUlOX1RDS0VfUFVMU0VfV0lEVEhfRERSCSgzKQkvKiBGSVhNRSAqLwordHlwZWRlZiBzdHJ1Y3QgZGRyNF9zcGRfZWVwcm9tX3MgZ2VuZXJpY19zcGRfZWVwcm9tX3Q7CisjaWZuZGVmIENPTkZJR19GU0xfU0RSQU1fVFlQRQorI2RlZmluZSBDT05GSUdfRlNMX1NEUkFNX1RZUEUJU0RSQU1fVFlQRV9ERFI0CisjZW5kaWYKICNlbmRpZgkvKiAjaWYgZGVmaW5lZChDT05GSUdfU1lTX0ZTTF9ERFIxKSAqLwogCiAjZGVmaW5lIEZTTF9ERFJfT0RUX05FVkVSCQkweDAKQEAgLTExNiw3ICsxMjQsOCBAQAogCiAjZGVmaW5lIFRJTUlOR19DRkdfMl9DUE9fTUFTSwkweDBGODAwMDAwCiAKLSNpZiBkZWZpbmVkKENPTkZJR19QNDA4MCkKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUl9WRVIpICYmIFwKKwkoQ09ORklHX1NZU19GU0xfRERSX1ZFUiA+IEZTTF9ERFJfVkVSXzRfNCkKICNkZWZpbmUgUkRfVE9fUFJFX01BU0sJCTB4ZgogI2RlZmluZSBSRF9UT19QUkVfU0hJRlQJCTEzCiAjZGVmaW5lIFdSX0RBVEFfREVMQVlfTUFTSwkweGYKQEAgLTE1NCwxNyArMTYzLDM2IEBACiAjZGVmaW5lIEREUl9DRFIyX09EVF9NQVNLCTB4MQogI2RlZmluZSBERFJfQ0RSMV9PRFQoeCkgKCh4ICYgRERSX0NEUjFfT0RUX01BU0spIDw8IEREUl9DRFIxX09EVF9TSElGVCkKICNkZWZpbmUgRERSX0NEUjJfT0RUKHgpICh4ICYgRERSX0NEUjJfT0RUX01BU0spCisjZGVmaW5lIEREUl9DRFIyX1ZSRUZfT1ZSRCh4KQkoMHgwMDAwODA4MCB8ICgoKCh4KSAtIDM3KSAmIDB4M0YpIDw8IDgpKQogCiAjaWYgKGRlZmluZWQoQ09ORklHX1NZU19GU0xfRERSX1ZFUikgJiYgXAogCShDT05GSUdfU1lTX0ZTTF9ERFJfVkVSID49IEZTTF9ERFJfVkVSXzRfNykpCisjaWZkZWYgQ09ORklHX1NZU19GU0xfRERSM0wKICNkZWZpbmUgRERSX0NEUl9PRFRfT0ZGCQkweDAKICNkZWZpbmUgRERSX0NEUl9PRFRfMTIwb2htCTB4MQorI2RlZmluZSBERFJfQ0RSX09EVF8yMDBvaG0JMHgyCisjZGVmaW5lIEREUl9DRFJfT0RUXzc1b2htCTB4MworI2RlZmluZSBERFJfQ0RSX09EVF82MG9obQkweDUKKyNkZWZpbmUgRERSX0NEUl9PRFRfNDZvaG0JMHg3CisjZWxpZiBkZWZpbmVkKENPTkZJR19TWVNfRlNMX0REUjQpCisjZGVmaW5lIEREUl9DRFJfT0RUX09GRgkJMHgwCisjZGVmaW5lIEREUl9DRFJfT0RUXzEwMG9obQkweDEKKyNkZWZpbmUgRERSX0NEUl9PRFRfMTIwT0hNCTB4MgorI2RlZmluZSBERFJfQ0RSX09EVF84MG9obQkweDMKKyNkZWZpbmUgRERSX0NEUl9PRFRfNjBvaG0JMHg0CisjZGVmaW5lIEREUl9DRFJfT0RUXzQwb2htCTB4NQorI2RlZmluZSBERFJfQ0RSX09EVF81MG9obQkweDYKKyNkZWZpbmUgRERSX0NEUl9PRFRfMzBvaG0JMHg3CisjZWxzZQorI2RlZmluZSBERFJfQ0RSX09EVF9PRkYJCTB4MAorI2RlZmluZSBERFJfQ0RSX09EVF8xMjBvaG0JMHgxCiAjZGVmaW5lIEREUl9DRFJfT0RUXzE4MG9obQkweDIKICNkZWZpbmUgRERSX0NEUl9PRFRfNzVvaG0JMHgzCiAjZGVmaW5lIEREUl9DRFJfT0RUXzExMG9obQkweDQKICNkZWZpbmUgRERSX0NEUl9PRFRfNjBobQkweDUKICNkZWZpbmUgRERSX0NEUl9PRFRfNzBvaG0JMHg2CiAjZGVmaW5lIEREUl9DRFJfT0RUXzQ3b2htCTB4NworI2VuZGlmIC8qIEREUjNMICovCiAjZWxzZQogI2RlZmluZSBERFJfQ0RSX09EVF83NW9obQkweDAKICNkZWZpbmUgRERSX0NEUl9PRFRfNTVvaG0JMHgxCkBAIC0xODgsNiArMjE2LDcgQEAKIAl1bnNpZ25lZCBpbnQgdGltaW5nX2NmZ18yOwogCXVuc2lnbmVkIGludCBkZHJfc2RyYW1fY2ZnOwogCXVuc2lnbmVkIGludCBkZHJfc2RyYW1fY2ZnXzI7CisJdW5zaWduZWQgaW50IGRkcl9zZHJhbV9jZmdfMzsKIAl1bnNpZ25lZCBpbnQgZGRyX3NkcmFtX21vZGU7CiAJdW5zaWduZWQgaW50IGRkcl9zZHJhbV9tb2RlXzI7CiAJdW5zaWduZWQgaW50IGRkcl9zZHJhbV9tb2RlXzM7CkBAIC0xOTYsNiArMjI1LDE0IEBACiAJdW5zaWduZWQgaW50IGRkcl9zZHJhbV9tb2RlXzY7CiAJdW5zaWduZWQgaW50IGRkcl9zZHJhbV9tb2RlXzc7CiAJdW5zaWduZWQgaW50IGRkcl9zZHJhbV9tb2RlXzg7CisJdW5zaWduZWQgaW50IGRkcl9zZHJhbV9tb2RlXzk7CisJdW5zaWduZWQgaW50IGRkcl9zZHJhbV9tb2RlXzEwOworCXVuc2lnbmVkIGludCBkZHJfc2RyYW1fbW9kZV8xMTsKKwl1bnNpZ25lZCBpbnQgZGRyX3NkcmFtX21vZGVfMTI7CisJdW5zaWduZWQgaW50IGRkcl9zZHJhbV9tb2RlXzEzOworCXVuc2lnbmVkIGludCBkZHJfc2RyYW1fbW9kZV8xNDsKKwl1bnNpZ25lZCBpbnQgZGRyX3NkcmFtX21vZGVfMTU7CisJdW5zaWduZWQgaW50IGRkcl9zZHJhbV9tb2RlXzE2OwogCXVuc2lnbmVkIGludCBkZHJfc2RyYW1fbWRfY250bDsKIAl1bnNpZ25lZCBpbnQgZGRyX3NkcmFtX2ludGVydmFsOwogCXVuc2lnbmVkIGludCBkZHJfZGF0YV9pbml0OwpAQCAtMjA0LDYgKzI0MSwxMCBAQAogCXVuc2lnbmVkIGludCBkZHJfaW5pdF9leHRfYWRkcjsKIAl1bnNpZ25lZCBpbnQgdGltaW5nX2NmZ180OwogCXVuc2lnbmVkIGludCB0aW1pbmdfY2ZnXzU7CisJdW5zaWduZWQgaW50IHRpbWluZ19jZmdfNjsKKwl1bnNpZ25lZCBpbnQgdGltaW5nX2NmZ183OworCXVuc2lnbmVkIGludCB0aW1pbmdfY2ZnXzg7CisJdW5zaWduZWQgaW50IHRpbWluZ19jZmdfOTsKIAl1bnNpZ25lZCBpbnQgZGRyX3pxX2NudGw7CiAJdW5zaWduZWQgaW50IGRkcl93cmx2bF9jbnRsOwogCXVuc2lnbmVkIGludCBkZHJfd3JsdmxfY250bF8yOwpAQCAtMjExLDYgKzI1MiwxNCBAQAogCXVuc2lnbmVkIGludCBkZHJfc3JfY250cjsKIAl1bnNpZ25lZCBpbnQgZGRyX3NkcmFtX3Jjd18xOwogCXVuc2lnbmVkIGludCBkZHJfc2RyYW1fcmN3XzI7CisJdW5zaWduZWQgaW50IGRkcl9zZHJhbV9yY3dfMzsKKwl1bnNpZ25lZCBpbnQgZGRyX3NkcmFtX3Jjd180OworCXVuc2lnbmVkIGludCBkZHJfc2RyYW1fcmN3XzU7CisJdW5zaWduZWQgaW50IGRkcl9zZHJhbV9yY3dfNjsKKwl1bnNpZ25lZCBpbnQgZHFfbWFwXzA7CisJdW5zaWduZWQgaW50IGRxX21hcF8xOworCXVuc2lnbmVkIGludCBkcV9tYXBfMjsKKwl1bnNpZ25lZCBpbnQgZHFfbWFwXzM7CiAJdW5zaWduZWQgaW50IGRkcl9lb3I7CiAJdW5zaWduZWQgaW50IGRkcl9jZHIxOwogCXVuc2lnbmVkIGludCBkZHJfY2RyMjsKQEAgLTIyNSw3ICsyNzQsNyBAQAogCXVuc2lnbmVkIGludCBhbGxfZGltbXNfYnVyc3RfbGVuZ3Roc19iaXRtYXNrOwogCXVuc2lnbmVkIGludCBhbGxfZGltbXNfcmVnaXN0ZXJlZDsKIAl1bnNpZ25lZCBpbnQgYWxsX2RpbW1zX3VuYnVmZmVyZWQ7Ci0JLyoJdW5zaWduZWQgaW50IGxvd2VzdF9jb21tb25fU1BEX2Nhc2xhdDsgKi8KKwkvKgl1bnNpZ25lZCBpbnQgbG93ZXN0X2NvbW1vbl9zcGRfY2FzbGF0OyAqLwogCXVuc2lnbmVkIGludCBhbGxfZGltbXNfbWluaW11bV90cmNkX3BzOwogfSBtZW1jdGxfb3B0aW9uc19wYXJ0aWFsX3Q7CiAKQEAgLTM1Nyw2ICs0MDYsMTAgQEAKIGludCBib2FyZF9uZWVkX21lbV9yZXNldCh2b2lkKQogCV9fYXR0cmlidXRlX18oKHdlYWssIGFsaWFzKCJfX2JvYXJkX25lZWRfbWVtX3Jlc2V0IikpKTsKIAordm9pZCBfX3dlYWsgYm9hcmRfbWVtX3NsZWVwX3NldHVwKHZvaWQpCit7Cit9CisKIC8qCiAgKiBUaGUgODV4eCBib2FyZHMgaGF2ZSBhIGNvbW1vbiBwcm90b3R5cGUgZm9yIGZpeGVkX3NkcmFtIHNvIHB1dCB0aGUKICAqIGRlY2xhcmF0aW9uIGhlcmUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZzbF9kZHJjX3ZlcnNpb24uaCBiL2luY2x1ZGUvZnNsX2RkcmNfdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYmE5OGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2ZzbF9kZHJjX3ZlcnNpb24uaApAQCAtMCwwICsxLDE4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKKyAqLworCisjaWZuZGVmIF9fRlNMX0REUkNfVkVSX0gKKyNkZWZpbmUgX19GU0xfRERSQ19WRVJfSAorCisvKgorICogT25seSB0aGUgdmVyc2lvbnMgd2l0aCBkaXN0aW5jdCBmZWF0dXJlcyBvciByZWdpc3RlcnMgYXJlIGxpc3RlZCBoZXJlLgorICovCisjZGVmaW5lIEZTTF9ERFJfVkVSXzRfNCA0NAorI2RlZmluZSBGU0xfRERSX1ZFUl80XzYgNDYKKyNkZWZpbmUgRlNMX0REUl9WRVJfNF83CTQ3CisjZGVmaW5lIEZTTF9ERFJfVkVSXzVfMAk1MAorCisjZW5kaWYgLyogX19GU0xfRERSQ19WRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mc2xfZXNkaGMuaCBiL2luY2x1ZGUvZnNsX2VzZGhjLmgKaW5kZXggYTZlM2E1ZC4uOTgxNDk2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mc2xfZXNkaGMuaAorKysgYi9pbmNsdWRlL2ZzbF9lc2RoYy5oCkBAIC0xODcsNSArMTg3LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmZHRfZml4dXBfZXNkaGModm9pZCAqYmxvYiwgYmRfdCAqYmQpIHt9CiAjZW5kaWYgLyogQ09ORklHX0ZTTF9FU0RIQyAqLwogdm9pZCBfX25vcmV0dXJuIG1tY19ib290KHZvaWQpOwordm9pZCBtbWNfc3BsX2xvYWRfaW1hZ2UodWludDMyX3Qgb2ZmcywgdW5zaWduZWQgaW50IHNpemUsIHZvaWQgKnZkc3QpOwogCiAjZW5kaWYgIC8qIF9fRlNMX0VTREhDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mc2xfaWZjLmggYi9pbmNsdWRlL2ZzbF9pZmMuaAppbmRleCA1OGE2ZWZkLi42MzBlNGI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZzbF9pZmMuaAorKysgYi9pbmNsdWRlL2ZzbF9pZmMuaApAQCAtNzg0LDYgKzc4NCw3IEBACiAKIGV4dGVybiB2b2lkIHByaW50X2lmY19yZWdzKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW5pdF9lYXJseV9tZW1jdGxfcmVncyh2b2lkKTsKK3ZvaWQgaW5pdF9maW5hbF9tZW1jdGxfcmVncyh2b2lkKTsKIAogI2RlZmluZSBJRkNfQkFTRV9BRERSICgoc3RydWN0IGZzbF9pZmMgKilDT05GSUdfU1lTX0lGQ19BRERSKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZzbF9pbW1hcC5oIGIvaW5jbHVkZS9mc2xfaW1tYXAuaAppbmRleCAwMDkwMmNhLi5kNjNjYzE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZzbF9pbW1hcC5oCisrKyBiL2luY2x1ZGUvZnNsX2ltbWFwLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29tbW9uIGludGVybmFsIG1lbW9yeSBtYXAgZm9yIHNvbWUgRnJlZXNjYWxlIFNvQ3MKICAqCi0gKiBDb3B5cmlnaHQgMjAxMyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwogICovCkBAIC01MCw3ICs1MCw4IEBACiAJdTgJcmVzXzE1MFsxNl07CiAJdTMyCXRpbWluZ19jZmdfNDsJCS8qIFNEUkFNIFRpbWluZyBDb25maWd1cmF0aW9uIDQgKi8KIAl1MzIJdGltaW5nX2NmZ181OwkJLyogU0RSQU0gVGltaW5nIENvbmZpZ3VyYXRpb24gNSAqLwotCXU4CXJlZ18xNjhbOF07CisJdTMyCXRpbWluZ19jZmdfNjsJCS8qIFNEUkFNIFRpbWluZyBDb25maWd1cmF0aW9uIDYgKi8KKwl1MzIJdGltaW5nX2NmZ183OwkJLyogU0RSQU0gVGltaW5nIENvbmZpZ3VyYXRpb24gNyAqLwogCXUzMglkZHJfenFfY250bDsJCS8qIFpRIGNhbGlicmF0aW9uIGNvbnRyb2wqLwogCXUzMglkZHJfd3JsdmxfY250bDsJCS8qIHdyaXRlIGxldmVsaW5nIGNvbnRyb2wqLwogCXU4CXJlZ18xNzhbNF07CkBAIC02MCwxNCArNjEsNDAgQEAKIAl1OAlyZWdfMTg4WzhdOwogCXUzMglkZHJfd3JsdmxfY250bF8yOwkvKiB3cml0ZSBsZXZlbGluZyBjb250cm9sIDIgKi8KIAl1MzIJZGRyX3dybHZsX2NudGxfMzsJLyogd3JpdGUgbGV2ZWxpbmcgY29udHJvbCAzICovCi0JdTgJcmVzXzE5OFsxMDRdOworCXU4CXJlc18xOThbMHgxYTAtMHgxOThdOworCXUzMglkZHJfc2RyYW1fcmN3XzM7CisJdTMyCWRkcl9zZHJhbV9yY3dfNDsKKwl1MzIJZGRyX3NkcmFtX3Jjd181OworCXUzMglkZHJfc2RyYW1fcmN3XzY7CisJdTgJcmVzXzFiMFsweDIwMC0weDFiMF07CiAJdTMyCXNkcmFtX21vZGVfMzsJCS8qIFNEUkFNIE1vZGUgQ29uZmlndXJhdGlvbiAzICovCiAJdTMyCXNkcmFtX21vZGVfNDsJCS8qIFNEUkFNIE1vZGUgQ29uZmlndXJhdGlvbiA0ICovCiAJdTMyCXNkcmFtX21vZGVfNTsJCS8qIFNEUkFNIE1vZGUgQ29uZmlndXJhdGlvbiA1ICovCiAJdTMyCXNkcmFtX21vZGVfNjsJCS8qIFNEUkFNIE1vZGUgQ29uZmlndXJhdGlvbiA2ICovCiAJdTMyCXNkcmFtX21vZGVfNzsJCS8qIFNEUkFNIE1vZGUgQ29uZmlndXJhdGlvbiA3ICovCiAJdTMyCXNkcmFtX21vZGVfODsJCS8qIFNEUkFNIE1vZGUgQ29uZmlndXJhdGlvbiA4ICovCi0JdTgJcmVzXzIxOFsweDkwOF07CisJdTgJcmVzXzIxOFsweDIyMC0weDIxOF07CisJdTMyCXNkcmFtX21vZGVfOTsJCS8qIFNEUkFNIE1vZGUgQ29uZmlndXJhdGlvbiA5ICovCisJdTMyCXNkcmFtX21vZGVfMTA7CQkvKiBTRFJBTSBNb2RlIENvbmZpZ3VyYXRpb24gMTAgKi8KKwl1MzIJc2RyYW1fbW9kZV8xMTsJCS8qIFNEUkFNIE1vZGUgQ29uZmlndXJhdGlvbiAxMSAqLworCXUzMglzZHJhbV9tb2RlXzEyOwkJLyogU0RSQU0gTW9kZSBDb25maWd1cmF0aW9uIDEyICovCisJdTMyCXNkcmFtX21vZGVfMTM7CQkvKiBTRFJBTSBNb2RlIENvbmZpZ3VyYXRpb24gMTMgKi8KKwl1MzIJc2RyYW1fbW9kZV8xNDsJCS8qIFNEUkFNIE1vZGUgQ29uZmlndXJhdGlvbiAxNCAqLworCXUzMglzZHJhbV9tb2RlXzE1OwkJLyogU0RSQU0gTW9kZSBDb25maWd1cmF0aW9uIDE1ICovCisJdTMyCXNkcmFtX21vZGVfMTY7CQkvKiBTRFJBTSBNb2RlIENvbmZpZ3VyYXRpb24gMTYgKi8KKwl1OAlyZXNfMjQwWzB4MjUwLTB4MjQwXTsKKwl1MzIJdGltaW5nX2NmZ184OwkJLyogU0RSQU0gVGltaW5nIENvbmZpZ3VyYXRpb24gOCAqLworCXUzMgl0aW1pbmdfY2ZnXzk7CQkvKiBTRFJBTSBUaW1pbmcgQ29uZmlndXJhdGlvbiA5ICovCisJdTgJcmVzXzI1OFsweDI2MC0weDI1OF07CisJdTMyCXNkcmFtX2NmZ18zOworCXU4CXJlc18yNjRbMHgyYTAtMHgyNjRdOworCXUzMglkZXNrZXdfY250bDsKKwl1OAlyZXNfMmE0WzB4NDAwLTB4MmE0XTsKKwl1MzIJZHFfbWFwXzA7CisJdTMyCWRxX21hcF8xOworCXUzMglkcV9tYXBfMjsKKwl1MzIJZHFfbWFwXzM7CisJdTgJcmVzXzQxMFsweGIyMC0weDQxMF07CiAJdTMyCWRkcl9kc3IxOwkJLyogRGVidWcgU3RhdHVzIDEgKi8KIAl1MzIJZGRyX2RzcjI7CQkvKiBEZWJ1ZyBTdGF0dXMgMiAqLwogCXUzMglkZHJfY2RyMTsJCS8qIENvbnRyb2wgRHJpdmVyIDEgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnNsX3VzYi5oIGIvaW5jbHVkZS9mc2xfdXNiLmgKaW5kZXggOGI2M2NkZC4uMWE2YzljMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mc2xfdXNiLmgKKysrIGIvaW5jbHVkZS9mc2xfdXNiLmgKQEAgLTQ4LDYgKzQ4LDExIEBACiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX1VTQl9QTExQUkcyX1BIWTJfQ0xLX0VOICgxIDw8IDApCiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX1VTQl9QTExQUkcyX1BIWTFfQ0xLX0VOICgxIDw8IDEpCiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX1VTQl9QTExQUkcyX0ZSQUNfTFBGX0VOICgxIDw8IDEzKQorI2lmZGVmIENPTkZJR19TWVNfRlNMX1NJTkdMRV9TT1VSQ0VfQ0xLCisjZGVmaW5lIENPTkZJR19TWVNfRlNMX1VTQl9QTExQUkcyX1JFRl9ESVZfSU5URVJOQUxfQ0xLICg1IDw8IDQpCisjZGVmaW5lIENPTkZJR19TWVNfRlNMX1VTQl9QTExQUkcyX01GSV9JTlRFUk5BTF9DTEsgKDYgPDwgMTYpCisjZGVmaW5lIENPTkZJR19TWVNfRlNMX1VTQl9JTlRFUk5BTF9TT0NfQ0xLX0VOICgxIDw8IDIwKQorI2VuZGlmCiAjZGVmaW5lIENPTkZJR19TWVNfRlNMX1VTQl9QTExQUkcyX1JFRl9ESVYgKDEgPDwgNCkKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfVVNCX1BMTFBSRzJfTUZJICg1IDw8IDE2KQogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9VU0JfUExMUFJHMl9QTExfRU4gKDEgPDwgMjEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dfZG5sLmggYi9pbmNsdWRlL2dfZG5sLmgKaW5kZXggOGY4MTNjMi4uMWIxYjM1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9nX2RubC5oCisrKyBiL2luY2x1ZGUvZ19kbmwuaApAQCAtMTAsNyArMTAsMzEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2NvbXBvc2l0ZS5oPgorI2luY2x1ZGUgPGxpbmtlcl9saXN0cy5oPgorCisvKgorICogQHVzYl9mbmFtZTogdW5lc2NhcGVkIFVTQiBmdW5jdGlvbiBuYW1lCisgKiBAY2FsbGJhY2tfcHRyOiBiaW5kIGNhbGxiYWNrLCBvbmUgcGVyIGZ1bmN0aW9uIG5hbWUKKyAqLworI2RlZmluZSBERUNMQVJFX0dBREdFVF9CSU5EX0NBTExCQUNLKHVzYl9mbmFtZSwgY2FsbGJhY2tfcHRyKSBcCisJbGxfZW50cnlfZGVjbGFyZShzdHJ1Y3QgZ19kbmxfYmluZF9jYWxsYmFjaywgXAorCQkJX191c2JfZnVuY3Rpb25fbmFtZV8jI3VzYl9mbmFtZSwgXAorCQkJZ19kbmxfYmluZF9jYWxsYmFja3MpID0geyBcCisJCQkJLnVzYl9mdW5jdGlvbl9uYW1lID0gI3VzYl9mbmFtZSwgXAorCQkJCS5mcHRyID0gY2FsbGJhY2tfcHRyIFwKKwkJCX0KKwordHlwZWRlZiBpbnQgKCpnX2RubF9iaW5kX2NhbGxiYWNrX2YpKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqKTsKKworLyogdXNlZCBpbiBHYWRnZXQgZG93bmxvYWRlciBjYWxsYmFjayBsaW5rZXIgbGlzdCAqLworc3RydWN0IGdfZG5sX2JpbmRfY2FsbGJhY2sgeworCWNvbnN0IGNoYXIgKnVzYl9mdW5jdGlvbl9uYW1lOworCWdfZG5sX2JpbmRfY2FsbGJhY2tfZiBmcHRyOworfTsKKwogaW50IGdfZG5sX2JpbmRfZml4dXAoc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciAqLCBjb25zdCBjaGFyICopOworaW50IGdfZG5sX2JvYXJkX3VzYl9jYWJsZV9jb25uZWN0ZWQodm9pZCk7CiBpbnQgZ19kbmxfcmVnaXN0ZXIoY29uc3QgY2hhciAqcyk7CiB2b2lkIGdfZG5sX3VucmVnaXN0ZXIodm9pZCk7CiB2b2lkIGdfZG5sX3NldF9zZXJpYWxudW1iZXIoY2hhciAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFzaC5oIGIvaW5jbHVkZS9oYXNoLmgKaW5kZXggZTkyZDI3Mi4uZGMyMTY3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXNoLmgKKysrIGIvaW5jbHVkZS9oYXNoLmgKQEAgLTI3LDYgKzI3LDQyIEBACiAJdm9pZCAoKmhhc2hfZnVuY193cykoY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGludCBpbGVuLAogCQl1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHVuc2lnbmVkIGludCBjaHVua19zeik7CiAJaW50IGNodW5rX3NpemU7CQkJCS8qIFdhdGNoZG9nIGNodW5rIHNpemUgKi8KKwkvKgorCSAqIGhhc2hfaW5pdDogQ3JlYXRlIHRoZSBjb250ZXh0IGZvciBwcm9ncmVzc2l2ZSBoYXNoaW5nCisJICoKKwkgKiBAYWxnbzogUG9pbnRlciB0byB0aGUgaGFzaF9hbGdvIHN0cnVjdAorCSAqIEBjdHhwOiBQb2ludGVyIHRvIHRoZSBwb2ludGVyIG9mIHRoZSBjb250ZXh0IGZvciBoYXNoaW5nCisJICogQHJldHVybiAwIGlmIG9rLCAtMSBvbiBlcnJvcgorCSAqLworCWludCAoKmhhc2hfaW5pdCkoc3RydWN0IGhhc2hfYWxnbyAqYWxnbywgdm9pZCAqKmN0eHApOworCS8qCisJICogaGFzaF91cGRhdGU6IFBlcmZvcm0gaGFzaGluZyBvbiB0aGUgZ2l2ZW4gYnVmZmVyCisJICoKKwkgKiBUaGUgY29udGV4dCBpcyBmcmVlZCBieSB0aGlzIGZ1bmN0aW9uIGlmIGFuIGVycm9yIG9jY3Vycy4KKwkgKgorCSAqIEBhbGdvOiBQb2ludGVyIHRvIHRoZSBoYXNoX2FsZ28gc3RydWN0CisJICogQGN0eDogUG9pbnRlciB0byB0aGUgY29udGV4dCBmb3IgaGFzaGluZworCSAqIEBidWY6IFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBiZWluZyBoYXNoZWQKKwkgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgYnVmZmVyIGJlaW5nIGhhc2hlZAorCSAqIEBpc19sYXN0OiAxIGlmIHRoaXMgaXMgdGhlIGxhc3QgdXBkYXRlOyAwIG90aGVyd2lzZQorCSAqIEByZXR1cm4gMCBpZiBvaywgLTEgb24gZXJyb3IKKwkgKi8KKwlpbnQgKCpoYXNoX3VwZGF0ZSkoc3RydWN0IGhhc2hfYWxnbyAqYWxnbywgdm9pZCAqY3R4LCBjb25zdCB2b2lkICpidWYsCisJCQkgICB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IGlzX2xhc3QpOworCS8qCisJICogaGFzaF9maW5pc2g6IFdyaXRlIHRoZSBoYXNoIHJlc3VsdCB0byB0aGUgZ2l2ZW4gYnVmZmVyCisJICoKKwkgKiBUaGUgY29udGV4dCBpcyBmcmVlZCBieSB0aGlzIGZ1bmN0aW9uLgorCSAqCisJICogQGFsZ286IFBvaW50ZXIgdG8gdGhlIGhhc2hfYWxnbyBzdHJ1Y3QKKwkgKiBAY3R4OiBQb2ludGVyIHRvIHRoZSBjb250ZXh0IGZvciBoYXNoaW5nCisJICogQGRlc3RfYnVmOiBQb2ludGVyIHRvIHRoZSBidWZmZXIgZm9yIHRoZSByZXN1bHQKKwkgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgYnVmZmVyIGZvciB0aGUgcmVzdWx0CisJICogQHJldHVybiAwIGlmIG9rLCAtRU5PU1BDIGlmIHNpemUgb2YgdGhlIHJlc3VsdCBidWZmZXIgaXMgdG9vIHNtYWxsCisJICogICBvciAtMSBvbiBvdGhlciBlcnJvcnMKKwkgKi8KKwlpbnQgKCpoYXNoX2ZpbmlzaCkoc3RydWN0IGhhc2hfYWxnbyAqYWxnbywgdm9pZCAqY3R4LCB2b2lkICpkZXN0X2J1ZiwKKwkJCSAgIGludCBzaXplKTsKIH07CiAKIC8qCkBAIC03Nyw0ICsxMTMsMTYgQEAKIGludCBoYXNoX2Jsb2NrKGNvbnN0IGNoYXIgKmFsZ29fbmFtZSwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbiwKIAkgICAgICAgdWludDhfdCAqb3V0cHV0LCBpbnQgKm91dHB1dF9zaXplKTsKIAorLyoqCisgKiBoYXNoX2xvb2t1cF9hbGdvKCkgLSBMb29rIHVwIHRoZSBoYXNoX2FsZ28gc3RydWN0IGZvciBhbiBhbGdvcml0aG0KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgc3RydWN0IG9yIC1FUFJPVE9OT1NVUFBPUlQgaWYgdGhlCisgKiBhbGdvcml0aG0gaXMgbm90IGF2YWlsYWJsZS4KKyAqCisgKiBAYWxnb19uYW1lOiBIYXNoIGFsZ29yaXRobSB0byBsb29rIHVwCisgKiBAYWxnb3A6IFBvaW50ZXIgdG8gdGhlIGhhc2hfYWxnbyBzdHJ1Y3QgaWYgZm91bmQKKyAqCisgKiBAcmV0dXJuIDAgaWYgb2ssIC1FUFJPVE9OT1NVUFBPUlQgZm9yIGFuIHVua25vd24gYWxnb3JpdGhtLgorICovCitpbnQgaGFzaF9sb29rdXBfYWxnbyhjb25zdCBjaGFyICphbGdvX25hbWUsIHN0cnVjdCBoYXNoX2FsZ28gKiphbGdvcCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW1hZ2UuaCBiL2luY2x1ZGUvaW1hZ2UuaAppbmRleCA4MDk1YmM4Li5iMjc4Nzc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ltYWdlLmgKKysrIGIvaW5jbHVkZS9pbWFnZS5oCkBAIC01NywxMyArNTcsMTggQEAKICMgIGlmZGVmIENPTkZJR19TUExfU0hBMV9TVVBQT1JUCiAjICAgZGVmaW5lIElNQUdFX0VOQUJMRV9TSEExCTEKICMgIGVuZGlmCisjICBpZmRlZiBDT05GSUdfU1BMX1NIQTI1Nl9TVVBQT1JUCisjICAgZGVmaW5lIElNQUdFX0VOQUJMRV9TSEEyNTYJMQorIyAgZW5kaWYKICMgZWxzZQogIyAgZGVmaW5lIENPTkZJR19DUkMzMgkJLyogRklUIGltYWdlcyBuZWVkIENSQzMyIHN1cHBvcnQgKi8KICMgIGRlZmluZSBDT05GSUdfTUQ1CQkvKiBhbmQgTUQ1ICovCiAjICBkZWZpbmUgQ09ORklHX1NIQTEJCS8qIGFuZCBTSEExICovCisjICBkZWZpbmUgQ09ORklHX1NIQTI1NgkJLyogYW5kIFNIQTI1NiAqLwogIyAgZGVmaW5lIElNQUdFX0VOQUJMRV9DUkMzMgkxCiAjICBkZWZpbmUgSU1BR0VfRU5BQkxFX01ENQkxCiAjICBkZWZpbmUgSU1BR0VfRU5BQkxFX1NIQTEJMQorIyAgZGVmaW5lIElNQUdFX0VOQUJMRV9TSEEyNTYJMQogIyBlbmRpZgogCiAjaWZuZGVmIElNQUdFX0VOQUJMRV9DUkMzMgpAQCAtNzgsNiArODMsMTAgQEAKICNkZWZpbmUgSU1BR0VfRU5BQkxFX1NIQTEJMAogI2VuZGlmCiAKKyNpZm5kZWYgSU1BR0VfRU5BQkxFX1NIQTI1NgorI2RlZmluZSBJTUFHRV9FTkFCTEVfU0hBMjU2CTAKKyNlbmRpZgorCiAjZW5kaWYgLyogQ09ORklHX0ZJVCAqLwogCiAjaWZkZWYgQ09ORklHX1NZU19CT09UX1JBTURJU0tfSElHSApAQCAtODI0LDcgKzgzMyw4IEBACiAjaWYgZGVmaW5lZChDT05GSUdfRklUX1NJR05BVFVSRSkKICMgaWZkZWYgVVNFX0hPU1RDQwogIyAgZGVmaW5lIElNQUdFX0VOQUJMRV9TSUdOCTEKLSMgIGRlZmluZSBJTUFHRV9FTkFCTEVfVkVSSUZZCTAKKyMgIGRlZmluZSBJTUFHRV9FTkFCTEVfVkVSSUZZCTEKKyMgaW5jbHVkZSAgPG9wZW5zc2wvZXZwLmg+CiAjZWxzZQogIyAgZGVmaW5lIElNQUdFX0VOQUJMRV9TSUdOCTAKICMgIGRlZmluZSBJTUFHRV9FTkFCTEVfVkVSSUZZCTEKQEAgLTgzNSw3ICs4NDUsOSBAQAogI2VuZGlmCiAKICNpZmRlZiBVU0VfSE9TVENDCi0jIGRlZmluZSBnZF9mZHRfYmxvYigpCQlOVUxMCit2b2lkICppbWFnZV9nZXRfaG9zdF9ibG9iKHZvaWQpOwordm9pZCBpbWFnZV9zZXRfaG9zdF9ibG9iKHZvaWQgKmhvc3RfYmxvYik7CisjIGRlZmluZSBnZF9mZHRfYmxvYigpCQlpbWFnZV9nZXRfaG9zdF9ibG9iKCkKICNlbHNlCiAjIGRlZmluZSBnZF9mZHRfYmxvYigpCQkoZ2QtPmZkdF9ibG9iKQogI2VuZGlmCkBAIC04NjQsNiArODc2LDIxIEBACiAJaW50IHNpemU7CiB9OwogCisjaWYgSU1BR0VfRU5BQkxFX1ZFUklGWQorIyBpbmNsdWRlIDxyc2EtY2hlY2tzdW0uaD4KKyNlbmRpZgorc3RydWN0IGNoZWNrc3VtX2FsZ28geworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgaW50IGNoZWNrc3VtX2xlbjsKKwljb25zdCBpbnQgcGFkX2xlbjsKKyNpZiBJTUFHRV9FTkFCTEVfU0lHTgorCWNvbnN0IEVWUF9NRCAqKCpjYWxjdWxhdGVfc2lnbikodm9pZCk7CisjZW5kaWYKKwl2b2lkICgqY2FsY3VsYXRlKShjb25zdCBzdHJ1Y3QgaW1hZ2VfcmVnaW9uIHJlZ2lvbltdLAorCQkJICBpbnQgcmVnaW9uX2NvdW50LCB1aW50OF90ICpjaGVja3N1bSk7CisJY29uc3QgdWludDhfdCAqcnNhX3BhZGRpbmc7Cit9OworCiBzdHJ1Y3QgaW1hZ2Vfc2lnX2FsZ28gewogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBOYW1lIG9mIGFsZ29yaXRobSAqLwogCkBAIC05MTQsNiArOTQxLDkgQEAKIAlpbnQgKCp2ZXJpZnkpKHN0cnVjdCBpbWFnZV9zaWduX2luZm8gKmluZm8sCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpbWFnZV9yZWdpb24gcmVnaW9uW10sIGludCByZWdpb25fY291bnQsCiAJCSAgICAgIHVpbnQ4X3QgKnNpZywgdWludCBzaWdfbGVuKTsKKworCS8qIHBvaW50ZXIgdG8gY2hlY2tzdW0gYWxnb3JpdGhtICovCisJc3RydWN0IGNoZWNrc3VtX2FsZ28gKmNoZWNrc3VtOwogfTsKIAogLyoqCkBAIC05NzksNyArMTAwOSwxMSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBmaXRfaW1hZ2VfY2hlY2tfdGFyZ2V0X2FyY2goY29uc3Qgdm9pZCAqZmR0LCBpbnQgbm9kZSkKIHsKKyNpZm5kZWYgVVNFX0hPU1RDQwogCXJldHVybiBmaXRfaW1hZ2VfY2hlY2tfYXJjaChmZHQsIG5vZGUsIElIX0FSQ0hfREVGQVVMVCk7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCiB9CiAKICNpZmRlZiBDT05GSUdfRklUX1ZFUkJPU0UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlua2VyX2xpc3RzLmggYi9pbmNsdWRlL2xpbmtlcl9saXN0cy5oCmluZGV4IDk5N2QxNDkuLjU1N2U2MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlua2VyX2xpc3RzLmgKKysrIGIvaW5jbHVkZS9saW5rZXJfbGlzdHMuaApAQCAtMjI4LDcgKzIyOCw3IEBACiAgKiBhbmQgaXQncyBuYW1lLgogICoKICAqIEV4YW1wbGU6Ci0gKiBsbF9lbnRyeV9kZWNsYXJlKHN0cnVjdCBteV9zdWJfY21kLCBteV9zdWJfY21kLCBjbWRfc3ViLCBjbWQuc3ViKSA9IHsKKyAqIGxsX2VudHJ5X2RlY2xhcmUoc3RydWN0IG15X3N1Yl9jbWQsIG15X3N1Yl9jbWQsIGNtZF9zdWIpID0gewogICogICAgICAgICAueCA9IDMsCiAgKiAgICAgICAgIC55ID0gNCwKICAqIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9ibGt0cmFucy5oIGIvaW5jbHVkZS9saW51eC9tdGQvYmxrdHJhbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJhY2I2Yy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9ibGt0cmFucy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIChDKSAyMDAzIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KLSAqCi0gKiBJbnRlcmZhY2UgdG8gTGludXggYmxvY2sgbGF5ZXIgZm9yIE1URCAndHJhbnNsYXRpb24gbGF5ZXJzJy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX01URF9UUkFOU19IX18KLSNkZWZpbmUgX19NVERfVFJBTlNfSF9fCi0KLS8qIFhYWCBVLUJPT1QgWFhYICovCi0jaWYgMAotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNlbmRpZgotCi1zdHJ1Y3QgaGRfZ2VvbWV0cnk7Ci1zdHJ1Y3QgbXRkX2luZm87Ci1zdHJ1Y3QgbXRkX2Jsa3RyYW5zX29wczsKLXN0cnVjdCBmaWxlOwotc3RydWN0IGlub2RlOwotCi1zdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiB7Ci0Jc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgKnRyOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKLS8qIFhYWCBVLUJPT1QgWFhYICovCi0jaWYgMAotCXN0cnVjdCBtdXRleCBsb2NrOwotI2VuZGlmCi0JaW50IGRldm51bTsKLQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JaW50IHJlYWRvbmx5OwotCXZvaWQgKmJsa2NvcmVfcHJpdjsgLyogZ2VuZGlzayBpbiAyLjUsIGRldmZzX2hhbmRsZSBpbiAyLjQgKi8KLX07Ci0KLXN0cnVjdCBibGtjb3JlX3ByaXY7IC8qIERpZmZlcnMgZm9yIDIuNCBhbmQgMi41IGtlcm5lbHM7IHByaXZhdGUgKi8KLQotc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgewotCWNoYXIgKm5hbWU7Ci0JaW50IG1ham9yOwotCWludCBwYXJ0X2JpdHM7Ci0JaW50IGJsa3NpemU7Ci0JaW50IGJsa3NoaWZ0OwotCi0JLyogQWNjZXNzIGZ1bmN0aW9ucyAqLwotCWludCAoKnJlYWRzZWN0KShzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2LAotCQkgICAgdW5zaWduZWQgbG9uZyBibG9jaywgY2hhciAqYnVmZmVyKTsKLQlpbnQgKCp3cml0ZXNlY3QpKHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBibG9jaywgY2hhciAqYnVmZmVyKTsKLQotCS8qIEJsb2NrIGxheWVyIGlvY3RscyAqLwotCWludCAoKmdldGdlbykoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pOwotCWludCAoKmZsdXNoKShzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2KTsKLQotCS8qIENhbGxlZCB3aXRoIG10ZF90YWJsZV9tdXRleCBoZWxkOyBubyByYWNlIHdpdGggYWRkL3JlbW92ZSAqLwotCWludCAoKm9wZW4pKHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYpOwotCWludCAoKnJlbGVhc2UpKHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYpOwotCi0JLyogQ2FsbGVkIG9uIHtkZSx9cmVnaXN0cmF0aW9uIGFuZCBvbiBzdWJzZXF1ZW50IGFkZGl0aW9uL3JlbW92YWwKLQkgICBvZiBkZXZpY2VzLCB3aXRoIG10ZF90YWJsZV9tdXRleCBoZWxkLiAqLwotCXZvaWQgKCphZGRfbXRkKShzdHJ1Y3QgbXRkX2Jsa3RyYW5zX29wcyAqdHIsIHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKLQl2b2lkICgqcmVtb3ZlX2Rldikoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldik7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGRldnM7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCi0Jc3RydWN0IG10ZF9ibGtjb3JlX3ByaXYgKmJsa2NvcmVfcHJpdjsKLX07Ci0KLWV4dGVybiBpbnQgcmVnaXN0ZXJfbXRkX2Jsa3RyYW5zKHN0cnVjdCBtdGRfYmxrdHJhbnNfb3BzICp0cik7Ci1leHRlcm4gaW50IGRlcmVnaXN0ZXJfbXRkX2Jsa3RyYW5zKHN0cnVjdCBtdGRfYmxrdHJhbnNfb3BzICp0cik7Ci1leHRlcm4gaW50IGFkZF9tdGRfYmxrdHJhbnNfZGV2KHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYpOwotZXh0ZXJuIGludCBkZWxfbXRkX2Jsa3RyYW5zX2RldihzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2KTsKLQotCi0jZW5kaWYgLyogX19NVERfVFJBTlNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uZnRsLXVzZXIuaCBiL2luY2x1ZGUvbGludXgvbXRkL25mdGwtdXNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmI4YjcwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbXRkL25mdGwtdXNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqICRJZDogbmZ0bC11c2VyLmgsdiAxLjIgMjAwNS8xMS8wNyAxMToxNDo1NiBnbGVpeG5lciBFeHAgJAotICoKLSAqIFBhcnRzIG9mIE5GVEwgaGVhZGVycyBzaGFyZWQgd2l0aCB1c2Vyc3BhY2UKLSAqCi0gKi8KLQotI2lmbmRlZiBfX01URF9ORlRMX1VTRVJfSF9fCi0jZGVmaW5lIF9fTVREX05GVExfVVNFUl9IX18KLQotLyogQmxvY2sgQ29udHJvbCBJbmZvcm1hdGlvbiAqLwotCi1zdHJ1Y3QgbmZ0bF9iY2kgewotCXVuc2lnbmVkIGNoYXIgRUNDU2lnWzZdOwotCXVpbnQ4X3QgU3RhdHVzOwotCXVpbnQ4X3QgU3RhdHVzMTsKLX1fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotLyogVW5pdCBDb250cm9sIEluZm9ybWF0aW9uICovCi0KLXN0cnVjdCBuZnRsX3VjaTAgewotCXVpbnQxNl90IFZpcnRVbml0TnVtOwotCXVpbnQxNl90IFJlcGxVbml0TnVtOwotCXVpbnQxNl90IFNwYXJlVmlydFVuaXROdW07Ci0JdWludDE2X3QgU3BhcmVSZXBsVW5pdE51bTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCBuZnRsX3VjaTEgewotCXVpbnQzMl90IFdlYXJJbmZvOwotCXVpbnQxNl90IEVyYXNlTWFyazsKLQl1aW50MTZfdCBFcmFzZU1hcmsxOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IG5mdGxfdWNpMiB7Ci0JdWludDE2X3QgRm9sZE1hcms7Ci0JdWludDE2X3QgRm9sZE1hcmsxOwotCXVpbnQzMl90IHVudXNlZDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXVuaW9uIG5mdGxfdWNpIHsKLQlzdHJ1Y3QgbmZ0bF91Y2kwIGE7Ci0Jc3RydWN0IG5mdGxfdWNpMSBiOwotCXN0cnVjdCBuZnRsX3VjaTIgYzsKLX07Ci0KLXN0cnVjdCBuZnRsX29vYiB7Ci0Jc3RydWN0IG5mdGxfYmNpIGI7Ci0JdW5pb24gbmZ0bF91Y2kgdTsKLX07Ci0KLS8qIE5GVEwgTWVkaWEgSGVhZGVyICovCi0KLXN0cnVjdCBORlRMTWVkaWFIZWFkZXIgewotCWNoYXIgRGF0YU9yZ0lEWzZdOwotCXVpbnQxNl90IE51bUVyYXNlVW5pdHM7Ci0JdWludDE2X3QgRmlyc3RQaHlzaWNhbEVVTjsKLQl1aW50MzJfdCBGb3JtYXR0ZWRTaXplOwotCXVuc2lnbmVkIGNoYXIgVW5pdFNpemVGYWN0b3I7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi0jZGVmaW5lIE1BWF9FUkFTRV9aT05FUyAoODE5MiAtIDUxMikKLQotI2RlZmluZSBFUkFTRV9NQVJLIDB4M2M2OQotI2RlZmluZSBTRUNUT1JfRlJFRSAweGZmCi0jZGVmaW5lIFNFQ1RPUl9VU0VEIDB4NTUKLSNkZWZpbmUgU0VDVE9SX0lHTk9SRSAweDExCi0jZGVmaW5lIFNFQ1RPUl9ERUxFVEVEIDB4MDAKLQotI2RlZmluZSBGT0xEX01BUktfSU5fUFJPR1JFU1MgMHg1NTU1Ci0KLSNkZWZpbmUgWk9ORV9HT09EIDB4ZmYKLSNkZWZpbmUgWk9ORV9CQURfT1JJR0lOQUwgMAotI2RlZmluZSBaT05FX0JBRF9NQVJLRUQgNwotCi0KLSNlbmRpZiAvKiBfX01URF9ORlRMX1VTRVJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uZnRsLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uZnRsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlMjJlMGQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbmZ0bC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIChDKSAxOTk5LTIwMDMgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgotICovCi0KLSNpZm5kZWYgX19NVERfTkZUTF9IX18KLSNkZWZpbmUgX19NVERfTkZUTF9IX18KLQotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvYmxrdHJhbnMuaD4KLQotI2luY2x1ZGUgPGxpbnV4L210ZC9uZnRsLXVzZXIuaD4KLQotLyogdGhlc2UgaW5mbyBhcmUgdXNlZCBpbiBSZXBsVW5pdFRhYmxlICovCi0jZGVmaW5lIEJMT0NLX05JTAkgICAweGZmZmYgLyogbGFzdCBibG9jayBvZiBhIGNoYWluICovCi0jZGVmaW5lIEJMT0NLX0ZSRUUJICAgMHhmZmZlIC8qIGZyZWUgYmxvY2sgKi8KLSNkZWZpbmUgQkxPQ0tfTk9URVhQTE9SRUQgIDB4ZmZmZCAvKiBub24gZXhwbG9yZWQgYmxvY2ssIG9ubHkgdXNlZCBkdXJpbmcgbW91bnRpbmcgKi8KLSNkZWZpbmUgQkxPQ0tfUkVTRVJWRUQJICAgMHhmZmZjIC8qIGJpb3MgYmxvY2sgb3IgYmFkIGJsb2NrICovCi0KLXN0cnVjdCBORlRMcmVjb3JkIHsKLQlzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiBtYmQ7Ci0JX191MTYgTWVkaWFVbml0LCBTcGFyZU1lZGlhVW5pdDsKLQlfX3UzMiBFcmFzZVNpemU7Ci0Jc3RydWN0IE5GVExNZWRpYUhlYWRlciBNZWRpYUhkcjsKLQlpbnQgdXNlY291bnQ7Ci0JdW5zaWduZWQgY2hhciBoZWFkczsKLQl1bnNpZ25lZCBjaGFyIHNlY3RvcnM7Ci0JdW5zaWduZWQgc2hvcnQgY3lsaW5kZXJzOwotCV9fdTE2IG51bXZ1bml0czsKLQlfX3UxNiBsYXN0RVVOOwkJCS8qIHNob3VsZCBiZSBzdXBwcmVzc2VkICovCi0JX191MTYgbnVtZnJlZUVVTnM7Ci0JX191MTYgTGFzdEZyZWVFVU47CQkvKiBUbyBzcGVlZCB1cCBmaW5kaW5nIGEgZnJlZSBFVU4gKi8KLQlpbnQgaGVhZCxzZWN0LGN5bDsKLQlfX3UxNiAqRVVOdGFibGU7CQkvKiBbbnVtdnVuaXRzXTogRmlyc3QgRVVOIGZvciBlYWNoIHZpcnR1YWwgdW5pdCAgKi8KLQlfX3UxNiAqUmVwbFVuaXRUYWJsZTsJCS8qIFtudW1FVU5zXTogUmVwbFVuaXROdW1iZXIgZm9yIGVhY2ggKi8KLQl1bnNpZ25lZCBpbnQgbmJfYmxvY2tzOwkJLyogbnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrcyAqLwotCXVuc2lnbmVkIGludCBuYl9ib290X2Jsb2NrczsJLyogbnVtYmVyIG9mIGJsb2NrcyB1c2VkIGJ5IHRoZSBiaW9zICovCi0Jc3RydWN0IGVyYXNlX2luZm8gaW5zdHI7Ci0Jc3RydWN0IG5hbmRfZWNjbGF5b3V0IG9vYmluZm87Ci19OwotCi1pbnQgTkZUTF9tb3VudChzdHJ1Y3QgTkZUTHJlY29yZCAqcyk7Ci1pbnQgTkZUTF9mb3JtYXRibG9jayhzdHJ1Y3QgTkZUTHJlY29yZCAqcywgaW50IGJsb2NrKTsKLQotaW50IG5mdGxfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAotCQkgIHNpemVfdCAqcmV0bGVuLCB1aW50OF90ICpidWYpOwotaW50IG5mdGxfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zmcywgc2l6ZV90IGxlbiwKLQkJICAgc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1Zik7Ci0KLSNpZm5kZWYgTkZUTF9NQUpPUgotI2RlZmluZSBORlRMX01BSk9SIDkzCi0jZW5kaWYKLQotI2RlZmluZSBNQVhfTkZUTFMgMTYKLSNkZWZpbmUgTUFYX1NFQ1RPUlNfUEVSX1VOSVQgNjQKLSNkZWZpbmUgTkZUTF9QQVJUTl9CSVRTIDQKLQotI2VuZGlmIC8qIF9fTVREX05GVExfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21tYy5oIGIvaW5jbHVkZS9tbWMuaAppbmRleCA0MmQwMTI1Li5iYzExZjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21tYy5oCisrKyBiL2luY2x1ZGUvbW1jLmgKQEAgLTEyLDYgKzEyLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPHBhcnQuaD4KIAogI2RlZmluZSBTRF9WRVJTSU9OX1NECTB4MjAwMDAKICNkZWZpbmUgU0RfVkVSU0lPTl8zCShTRF9WRVJTSU9OX1NEIHwgMHgzMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldGRldi5oIGIvaW5jbHVkZS9uZXRkZXYuaAppbmRleCAzMmI1MDczLi5lMjExZjE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldGRldi5oCisrKyBiL2luY2x1ZGUvbmV0ZGV2LmgKQEAgLTU0LDcgKzU0LDYgQEAKIGludCBmdG1hYzExMF9pbml0aWFsaXplKGJkX3QgKmJpdHMpOwogaW50IGdyZXRoX2luaXRpYWxpemUoYmRfdCAqYmlzKTsKIHZvaWQgZ3Q2NDI2eF9ldGhfaW5pdGlhbGl6ZShiZF90ICpiaXMpOwotaW50IGluY2Ffc3dpdGNoX2luaXRpYWxpemUoYmRfdCAqYmlzKTsKIGludCBrczg2OTVfZXRoX2luaXRpYWxpemUodm9pZCk7CiBpbnQga3M4ODUxX21sbF9pbml0aWFsaXplKHU4IGRldl9udW0sIGludCBiYXNlX2FkZHIpOwogaW50IGxhbjkxYzk2X2luaXRpYWxpemUodTggZGV2X251bSwgaW50IGJhc2VfYWRkcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3BhcnQuaCBiL2luY2x1ZGUvcGFydC5oCmluZGV4IDRiZWI2ZGIuLjUzNTMyZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGFydC5oCisrKyBiL2luY2x1ZGUvcGFydC5oCkBAIC04LDYgKzgsNyBAQAogI2RlZmluZSBfUEFSVF9ICiAKICNpbmNsdWRlIDxpZGUuaD4KKyNpbmNsdWRlIDxjb21tb24uaD4KIAogdHlwZWRlZiBzdHJ1Y3QgYmxvY2tfZGV2X2Rlc2MgewogCWludAkJaWZfdHlwZTsJLyogdHlwZSBvZiB0aGUgaW50ZXJmYWNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS5oIGIvaW5jbHVkZS9wY21jaWEuaAppbmRleCBjZThjOGVkLi45NTJhNjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS5oCisrKyBiL2luY2x1ZGUvcGNtY2lhLmgKQEAgLTIyLDEwICsyMiw4IEBACiAjaWYgIWRlZmluZWQoQ09ORklHX1BDTUNJQV9TTE9UX0EpICYmICFkZWZpbmVkKENPTkZJR19QQ01DSUFfU0xPVF9CKQogCiAJCQkJCS8qIFRoZSBSUFggc2VyaWVzIHVzZSBTTE9UX0IJKi8KLSNpZiBkZWZpbmVkKENPTkZJR19SUFhDTEFTU0lDKSB8fCBkZWZpbmVkKENPTkZJR19SUFhMSVRFKQorI2lmIGRlZmluZWQoQ09ORklHX1JQWExJVEUpCiAjIGRlZmluZSBDT05GSUdfUENNQ0lBX1NMT1RfQgotI2VsaWYgZGVmaW5lZChDT05GSUdfQURTKQkJLyogVGhlIEFEUyAgYm9hcmQgdXNlcyBTTE9UX0EJKi8KLSMgZGVmaW5lIENPTkZJR19QQ01DSUFfU0xPVF9BCiAjZWxpZiBkZWZpbmVkKENPTkZJR19GQURTKQkJLyogVGhlIEZBRFMgc2VyaWVzIGFyZSBhIG1lc3MJKi8KICMgaWYgZGVmaW5lZChDT05GSUdfTVBDODZ4KSB8fCBkZWZpbmVkKENPTkZJR19NUEM4MjEpCiAjICBkZWZpbmUgQ09ORklHX1BDTUNJQV9TTE9UX0EKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcnNhLWNoZWNrc3VtLmggYi9pbmNsdWRlL3JzYS1jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMmRiODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3JzYS1jaGVja3N1bS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEFuZHJlYXMgT2V0a2VuLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAgICBHUEwtMi4wKworKi8KKworI2lmbmRlZiBfUlNBX0NIRUNLU1VNX0gKKyNkZWZpbmUgX1JTQV9DSEVDS1NVTV9ICisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGltYWdlLmg+CisjaW5jbHVkZSA8c2hhMS5oPgorI2luY2x1ZGUgPHNoYTI1Ni5oPgorCitleHRlcm4gY29uc3QgdWludDhfdCBwYWRkaW5nX3NoYTI1Nl9yc2E0MDk2W107CitleHRlcm4gY29uc3QgdWludDhfdCBwYWRkaW5nX3NoYTI1Nl9yc2EyMDQ4W107CitleHRlcm4gY29uc3QgdWludDhfdCBwYWRkaW5nX3NoYTFfcnNhMjA0OFtdOworCit2b2lkIHNoYTI1Nl9jYWxjdWxhdGUoY29uc3Qgc3RydWN0IGltYWdlX3JlZ2lvbiByZWdpb25bXSwgaW50IHJlZ2lvbl9jb3VudCwKKwkJICAgICAgdWludDhfdCAqY2hlY2tzdW0pOwordm9pZCBzaGExX2NhbGN1bGF0ZShjb25zdCBzdHJ1Y3QgaW1hZ2VfcmVnaW9uIHJlZ2lvbltdLCBpbnQgcmVnaW9uX2NvdW50LAorCQkgICAgdWludDhfdCAqY2hlY2tzdW0pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcnNhLmggYi9pbmNsdWRlL3JzYS5oCmluZGV4IGFkZDRjNzguLmE1NjgwYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcnNhLmgKKysrIGIvaW5jbHVkZS9yc2EuaApAQCAtMTUsNiArMTUsMjAgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGltYWdlLmg+CiAKKy8qKgorICogc3RydWN0IHJzYV9wdWJsaWNfa2V5IC0gaG9sZGVyIGZvciBhIHB1YmxpYyBrZXkKKyAqCisgKiBBbiBSU0EgcHVibGljIGtleSBjb25zaXN0cyBvZiBhIG1vZHVsdXMgKHR5cGljYWxseSBjYWxsZWQgTiksIHRoZSBpbnZlcnNlCisgKiBhbmQgUl4yLCB3aGVyZSBSIGlzIDJeKCMga2V5IGJpdHMpLgorICovCisKK3N0cnVjdCByc2FfcHVibGljX2tleSB7CisJdWludCBsZW47CQkvKiBsZW4gb2YgbW9kdWx1c1tdIGluIG51bWJlciBvZiB1aW50MzJfdCAqLworCXVpbnQzMl90IG4waW52OwkJLyogLTEgLyBtb2R1bHVzWzBdIG1vZCAyXjMyICovCisJdWludDMyX3QgKm1vZHVsdXM7CS8qIG1vZHVsdXMgYXMgbGl0dGxlIGVuZGlhbiBhcnJheSAqLworCXVpbnQzMl90ICpycjsJCS8qIFJeMiBhcyBsaXR0bGUgZW5kaWFuIGFycmF5ICovCit9OworCiAjaWYgSU1BR0VfRU5BQkxFX1NJR04KIC8qKgogICogc2lnbigpIC0gY2FsY3VsYXRlIGFuZCByZXR1cm4gc2lnbmF0dXJlIGZvciBnaXZlbiBpbnB1dCBkYXRhCkBAIC04OSw0ICsxMDMsMTQgQEAKIH0KICNlbmRpZgogCisjZGVmaW5lIFJTQTIwNDhfQllURVMJKDIwNDggLyA4KQorI2RlZmluZSBSU0E0MDk2X0JZVEVTCSg0MDk2IC8gOCkKKworLyogVGhpcyBpcyB0aGUgbWluaW11bS9tYXhpbXVtIGtleSBzaXplIHdlIHN1cHBvcnQsIGluIGJpdHMgKi8KKyNkZWZpbmUgUlNBX01JTl9LRVlfQklUUwkyMDQ4CisjZGVmaW5lIFJTQV9NQVhfS0VZX0JJVFMJNDA5NgorCisvKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHNpZ25hdHVyZSBsZW5ndGggdGhhdCB3ZSBzdXBwb3J0LCBpbiBiaXRzICovCisjZGVmaW5lIFJTQV9NQVhfU0lHX0JJVFMJNDA5NgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3BpX2ZsYXNoLmggYi9pbmNsdWRlL3NwaV9mbGFzaC5oCmluZGV4IDFhMTEyODYuLjJkYjUzYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc3BpX2ZsYXNoLmgKKysrIGIvaW5jbHVkZS9zcGlfZmxhc2guaApAQCAtMTU4LDUgKzE1OCw2IEBACiB9CiAKIHZvaWQgc3BpX2Jvb3Qodm9pZCkgX19ub3JldHVybjsKK3ZvaWQgc3BpX3NwbF9sb2FkX2ltYWdlKHVpbnQzMl90IG9mZnMsIHVuc2lnbmVkIGludCBzaXplLCB2b2lkICp2ZHN0KTsKIAogI2VuZGlmIC8qIF9TUElfRkxBU0hfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdGhvci5oIGIvaW5jbHVkZS90aG9yLmgKaW5kZXggYWZlYWRlNC4uNTA1MWJlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90aG9yLmgKKysrIGIvaW5jbHVkZS90aG9yLmgKQEAgLTE1LDEzICsxNSw1IEBACiAKIGludCB0aG9yX2hhbmRsZSh2b2lkKTsKIGludCB0aG9yX2luaXQodm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfVEhPUl9GVU5DVElPTgogaW50IHRob3JfYWRkKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYyk7Ci0jZWxzZQotaW50IHRob3JfYWRkKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgogI2VuZGlmIC8qIF9fVEhPUl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91c2IuaCBiL2luY2x1ZGUvdXNiLmgKaW5kZXggNzM2NzMwZS4uZDlmZWRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91c2IuaAorKysgYi9pbmNsdWRlL3VzYi5oCkBAIC0xOTcsMTYgKzE5Nyw2IEBACiAgKi8KIGludCBib2FyZF91c2JfY2xlYW51cChpbnQgaW5kZXgsIGVudW0gdXNiX2luaXRfdHlwZSBpbml0KTsKIAotLyoKLSAqIElmIENPTkZJR19VU0JfQ0FCTEVfQ0hFQ0sgaXMgc2V0IHRoZW4gdGhpcyBmdW5jdGlvbgotICogc2hvdWxkIGJlIGRlZmluZWQgaW4gYm9hcmQgZmlsZS4KLSAqCi0gKiBAcmV0dXJuIDEgaWYgY2FibGUgaXMgY29ubmVjdGVkIGFuZCAwIG90aGVyd2lzZS4KLSAqLwotI2lmZGVmIENPTkZJR19VU0JfQ0FCTEVfQ0hFQ0sKLWludCB1c2JfY2FibGVfY29ubmVjdGVkKHZvaWQpOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0UKIAogI2RlZmluZSBVU0JfTUFYX1NUT1JfREVWIDUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXNiL2VoY2ktZnNsLmggYi9pbmNsdWRlL3VzYi9laGNpLWZzbC5oCmluZGV4IDczNDMwNWIuLmM5ZWUxZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdXNiL2VoY2ktZnNsLmgKKysrIGIvaW5jbHVkZS91c2IvZWhjaS1mc2wuaApAQCAtMTY0LDYgKzE2NCwxMyBAQAogI2VuZGlmCiAKIC8qCisgKiBJbmNyZWFzaW5nIFRYIEZJRk8gdGhyZXNob2xkIHZhbHVlIGZyb20gMiB0byA0IGRlY3JlYXNlcworICogZGF0YSBidXJzdCByYXRlIHdpdGggd2hpY2ggZGF0YSBwYWNrZXRzIGFyZSBwb3N0ZWQgZnJvbSB0aGUgVFgKKyAqIGxhdGVuY3kgRklGTyB0byBjb21wZW5zYXRlIGZvciBsYXRlbmNpZXMgaW4gRERSIHBpcGVsaW5lIGR1cmluZyBETUEKKyAqLworI2RlZmluZSBUWEZJRk9USFJFU0gJCTQKKworLyoKICAqIFVTQiBSZWdpc3RlcnMKICAqLwogc3RydWN0IHVzYl9laGNpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXNiX21hc3Nfc3RvcmFnZS5oIGIvaW5jbHVkZS91c2JfbWFzc19zdG9yYWdlLmgKaW5kZXggMDU4ZGNmMS4uZWQ0NjA2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91c2JfbWFzc19zdG9yYWdlLmgKKysrIGIvaW5jbHVkZS91c2JfbWFzc19zdG9yYWdlLmgKQEAgLTQwLDEzICs0MCw1IEBACiB2b2lkIGZzZ19jbGVhbnVwKHZvaWQpOwogc3RydWN0IHVtcyAqdW1zX2luaXQodW5zaWduZWQgaW50KTsKIGludCBmc2dfbWFpbl90aHJlYWQodm9pZCAqKTsKLQotI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01BU1NfU1RPUkFHRQogaW50IGZzZ19hZGQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKTsKLSNlbHNlCi1pbnQgZnNnX2FkZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKICNlbmRpZiAvKiBfX1VTQl9NQVNTX1NUT1JBR0VfSF9fICovCmRpZmYgLS1naXQgYS9saWIvYWVzLmMgYi9saWIvYWVzLmMKaW5kZXggZTk5NmIyNy4uOWQ3YTBhMSAxMDA2NDQKLS0tIGEvbGliL2Flcy5jCisrKyBiL2xpYi9hZXMuYwpAQCAtMjIsNyArMjIsMTEgQEAKICAqIFJFRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUuCiAqLwogCisjaWZuZGVmIFVTRV9IT1NUQ0MKICNpbmNsdWRlIDxjb21tb24uaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKICNpbmNsdWRlICJhZXMuaCIKIAogLyogZm9yd2FyZCBzLWJveCAqLwpAQCAtNTgwLDMgKzU4NCw3NCBAQAogCiAJbWVtY3B5KG91dCwgc3RhdGUsIHNpemVvZihzdGF0ZSkpOwogfQorCitzdGF0aWMgdm9pZCBkZWJ1Z19wcmludF92ZWN0b3IoY2hhciAqbmFtZSwgdTMyIG51bV9ieXRlcywgdTggKmRhdGEpCit7CisjaWZkZWYgREVCVUcKKwlwcmludGYoIiVzIFslZF0gQDB4JTA4eCIsIG5hbWUsIG51bV9ieXRlcywgKHUzMilkYXRhKTsKKwlwcmludF9idWZmZXIoMCwgZGF0YSwgMSwgbnVtX2J5dGVzLCAxNik7CisjZW5kaWYKK30KKwordm9pZCBhZXNfYXBwbHlfY2JjX2NoYWluX2RhdGEodTggKmNiY19jaGFpbl9kYXRhLCB1OCAqc3JjLCB1OCAqZHN0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFFU19LRVlfTEVOR1RIOyBpKyspCisJCSpkc3QrKyA9ICpzcmMrKyBeICpjYmNfY2hhaW5fZGF0YSsrOworfQorCit2b2lkIGFlc19jYmNfZW5jcnlwdF9ibG9ja3ModTggKmtleV9leHAsIHU4ICpzcmMsIHU4ICpkc3QsIHUzMiBudW1fYWVzX2Jsb2NrcykKK3sKKwl1OCB6ZXJvX2tleVtBRVNfS0VZX0xFTkdUSF0gPSB7IDAgfTsKKwl1OCB0bXBfZGF0YVtBRVNfS0VZX0xFTkdUSF07CisJLyogQ29udmVuaWVudCBhcnJheSBvZiAwJ3MgZm9yIElWICovCisJdTggKmNiY19jaGFpbl9kYXRhID0gemVyb19rZXk7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Flc19ibG9ja3M7IGkrKykgeworCQlkZWJ1ZygiZW5jcnlwdF9vYmplY3Q6IGJsb2NrICVkIG9mICVkXG4iLCBpLCBudW1fYWVzX2Jsb2Nrcyk7CisJCWRlYnVnX3ByaW50X3ZlY3RvcigiQUVTIFNyYyIsIEFFU19LRVlfTEVOR1RILCBzcmMpOworCisJCS8qIEFwcGx5IHRoZSBjaGFpbiBkYXRhICovCisJCWFlc19hcHBseV9jYmNfY2hhaW5fZGF0YShjYmNfY2hhaW5fZGF0YSwgc3JjLCB0bXBfZGF0YSk7CisJCWRlYnVnX3ByaW50X3ZlY3RvcigiQUVTIFhvciIsIEFFU19LRVlfTEVOR1RILCB0bXBfZGF0YSk7CisKKwkJLyogRW5jcnlwdCB0aGUgQUVTIGJsb2NrICovCisJCWFlc19lbmNyeXB0KHRtcF9kYXRhLCBrZXlfZXhwLCBkc3QpOworCQlkZWJ1Z19wcmludF92ZWN0b3IoIkFFUyBEc3QiLCBBRVNfS0VZX0xFTkdUSCwgZHN0KTsKKworCQkvKiBVcGRhdGUgcG9pbnRlcnMgZm9yIG5leHQgbG9vcC4gKi8KKwkJY2JjX2NoYWluX2RhdGEgPSBkc3Q7CisJCXNyYyArPSBBRVNfS0VZX0xFTkdUSDsKKwkJZHN0ICs9IEFFU19LRVlfTEVOR1RIOworCX0KK30KKwordm9pZCBhZXNfY2JjX2RlY3J5cHRfYmxvY2tzKHU4ICprZXlfZXhwLCB1OCAqc3JjLCB1OCAqZHN0LCB1MzIgbnVtX2Flc19ibG9ja3MpCit7CisJdTggdG1wX2RhdGFbQUVTX0tFWV9MRU5HVEhdLCB0bXBfYmxvY2tbQUVTX0tFWV9MRU5HVEhdOworCS8qIENvbnZlbmllbnQgYXJyYXkgb2YgMCdzIGZvciBJViAqLworCXU4IGNiY19jaGFpbl9kYXRhW0FFU19LRVlfTEVOR1RIXSA9IHsgMCB9OworCXUzMiBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9hZXNfYmxvY2tzOyBpKyspIHsKKwkJZGVidWcoImVuY3J5cHRfb2JqZWN0OiBibG9jayAlZCBvZiAlZFxuIiwgaSwgbnVtX2Flc19ibG9ja3MpOworCQlkZWJ1Z19wcmludF92ZWN0b3IoIkFFUyBTcmMiLCBBRVNfS0VZX0xFTkdUSCwgc3JjKTsKKworCQltZW1jcHkodG1wX2Jsb2NrLCBzcmMsIEFFU19LRVlfTEVOR1RIKTsKKworCQkvKiBEZWNyeXB0IHRoZSBBRVMgYmxvY2sgKi8KKwkJYWVzX2RlY3J5cHQoc3JjLCBrZXlfZXhwLCB0bXBfZGF0YSk7CisJCWRlYnVnX3ByaW50X3ZlY3RvcigiQUVTIFhvciIsIEFFU19LRVlfTEVOR1RILCB0bXBfZGF0YSk7CisKKwkJLyogQXBwbHkgdGhlIGNoYWluIGRhdGEgKi8KKwkJYWVzX2FwcGx5X2NiY19jaGFpbl9kYXRhKGNiY19jaGFpbl9kYXRhLCB0bXBfZGF0YSwgZHN0KTsKKwkJZGVidWdfcHJpbnRfdmVjdG9yKCJBRVMgRHN0IiwgQUVTX0tFWV9MRU5HVEgsIGRzdCk7CisKKwkJLyogVXBkYXRlIHBvaW50ZXJzIGZvciBuZXh0IGxvb3AuICovCisJCW1lbWNweShjYmNfY2hhaW5fZGF0YSwgdG1wX2Jsb2NrLCBBRVNfS0VZX0xFTkdUSCk7CisJCXNyYyArPSBBRVNfS0VZX0xFTkdUSDsKKwkJZHN0ICs9IEFFU19LRVlfTEVOR1RIOworCX0KK30KZGlmZiAtLWdpdCBhL2xpYi9mZHRkZWMuYyBiL2xpYi9mZHRkZWMuYwppbmRleCAzMzI2NWVjLi44ZWNiODBmIDEwMDY0NAotLS0gYS9saWIvZmR0ZGVjLmMKKysrIGIvbGliL2ZkdGRlYy5jCkBAIC0zLDYgKzMsNyBAQAogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCiAgKi8KIAorI2lmbmRlZiBVU0VfSE9TVENDCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8c2VyaWFsLmg+CiAjaW5jbHVkZSA8bGliZmR0Lmg+CkBAIC02NDUsMyArNjQ2LDIyIEBACiAKIAlyZXR1cm4gMDsKIH0KKyNlbHNlCisjaW5jbHVkZSAibGliZmR0LmgiCisjaW5jbHVkZSAiZmR0X3N1cHBvcnQuaCIKKworaW50IGZkdGRlY19nZXRfaW50KGNvbnN0IHZvaWQgKmJsb2IsIGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wX25hbWUsCisJCWludCBkZWZhdWx0X3ZhbCkKK3sKKwljb25zdCBpbnQgKmNlbGw7CisJaW50IGxlbjsKKworCWNlbGwgPSBmZHRfZ2V0cHJvcF93KCh2b2lkICopYmxvYiwgbm9kZSwgcHJvcF9uYW1lLCAmbGVuKTsKKwlpZiAoY2VsbCAmJiBsZW4gPj0gc2l6ZW9mKGludCkpIHsKKwkJaW50IHZhbCA9IGZkdDMyX3RvX2NwdShjZWxsWzBdKTsKKworCQlyZXR1cm4gdmFsOworCX0KKwlyZXR1cm4gZGVmYXVsdF92YWw7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9yc2EvTWFrZWZpbGUgYi9saWIvcnNhL01ha2VmaWxlCmluZGV4IDE2NGFiMzkuLmE1YTk2Y2I2IDEwMDY0NAotLS0gYS9saWIvcnNhL01ha2VmaWxlCisrKyBiL2xpYi9yc2EvTWFrZWZpbGUKQEAgLTcsNCArNyw0IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKwogIwogCi1vYmotJChDT05GSUdfRklUX1NJR05BVFVSRSkgKz0gcnNhLXZlcmlmeS5vCitvYmotJChDT05GSUdfRklUX1NJR05BVFVSRSkgKz0gcnNhLXZlcmlmeS5vIHJzYS1jaGVja3N1bS5vCmRpZmYgLS1naXQgYS9saWIvcnNhL3JzYS1jaGVja3N1bS5jIGIvbGliL3JzYS9yc2EtY2hlY2tzdW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmQ2NjAyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3JzYS9yc2EtY2hlY2tzdW0uYwpAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMywgQW5kcmVhcyBPZXRrZW4uCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICAgIEdQTC0yLjArCisgKi8KKworI2lmbmRlZiBVU0VfSE9TVENDCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8ZmR0ZGVjLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNlbHNlCisjaW5jbHVkZSAiZmR0X2hvc3QuaCIKKyNlbmRpZgorI2luY2x1ZGUgPHJzYS5oPgorI2luY2x1ZGUgPHNoYTEuaD4KKyNpbmNsdWRlIDxzaGEyNTYuaD4KKworLyogUEtDUyAxLjUgcGFkZGluZ3MgYXMgZGVzY3JpYmVkIGluIHRoZSBSU0EgUEtDUyMxIHYyLjEgc3RhbmRhcmQuICovCisKK2NvbnN0IHVpbnQ4X3QgcGFkZGluZ19zaGEyNTZfcnNhMjA0OFtSU0EyMDQ4X0JZVEVTIC0gU0hBMjU2X1NVTV9MRU5dID0geworMHgwMCwgMHgwMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKzB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKzB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKzB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKzB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKzB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgzMCwgMHgzMSwgMHgzMCwKKzB4MGQsIDB4MDYsIDB4MDksIDB4NjAsIDB4ODYsIDB4NDgsIDB4MDEsIDB4NjUsIDB4MDMsIDB4MDQsIDB4MDIsIDB4MDEsIDB4MDUsCisweDAwLCAweDA0LCAweDIwCit9OworCitjb25zdCB1aW50OF90IHBhZGRpbmdfc2hhMV9yc2EyMDQ4W1JTQTIwNDhfQllURVMgLSBTSEExX1NVTV9MRU5dID0geworCTB4MDAsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MzAsIDB4MjEsIDB4MzAsCisJMHgwOSwgMHgwNiwgMHgwNSwgMHgyYiwgMHgwZSwgMHgwMywgMHgwMiwgMHgxYSwKKwkweDA1LCAweDAwLCAweDA0LCAweDE0Cit9OworCitjb25zdCB1aW50OF90IHBhZGRpbmdfc2hhMjU2X3JzYTQwOTZbUlNBNDA5Nl9CWVRFUyAtIFNIQTI1Nl9TVU1fTEVOXSA9IHsKKwkweDAwLCAweDAxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDMwLCAweDMxLCAweDMwLAorCTB4MGQsIDB4MDYsIDB4MDksIDB4NjAsIDB4ODYsIDB4NDgsIDB4MDEsIDB4NjUsCisJMHgwMywgMHgwNCwgMHgwMiwgMHgwMSwgMHgwNSwgMHgwMCwgMHgwNCwgMHgyMAorfTsKKwordm9pZCBzaGExX2NhbGN1bGF0ZShjb25zdCBzdHJ1Y3QgaW1hZ2VfcmVnaW9uIHJlZ2lvbltdLCBpbnQgcmVnaW9uX2NvdW50LAorCQkgICAgdWludDhfdCAqY2hlY2tzdW0pCit7CisJc2hhMV9jb250ZXh0IGN0eDsKKwl1aW50MzJfdCBpOworCWkgPSAwOworCisJc2hhMV9zdGFydHMoJmN0eCk7CisJZm9yIChpID0gMDsgaSA8IHJlZ2lvbl9jb3VudDsgaSsrKQorCQlzaGExX3VwZGF0ZSgmY3R4LCByZWdpb25baV0uZGF0YSwgcmVnaW9uW2ldLnNpemUpOworCXNoYTFfZmluaXNoKCZjdHgsIGNoZWNrc3VtKTsKK30KKwordm9pZCBzaGEyNTZfY2FsY3VsYXRlKGNvbnN0IHN0cnVjdCBpbWFnZV9yZWdpb24gcmVnaW9uW10sIGludCByZWdpb25fY291bnQsCisJCSAgICAgIHVpbnQ4X3QgKmNoZWNrc3VtKQoreworCXNoYTI1Nl9jb250ZXh0IGN0eDsKKwl1aW50MzJfdCBpOworCWkgPSAwOworCisJc2hhMjU2X3N0YXJ0cygmY3R4KTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVnaW9uX2NvdW50OyBpKyspCisJCXNoYTI1Nl91cGRhdGUoJmN0eCwgcmVnaW9uW2ldLmRhdGEsIHJlZ2lvbltpXS5zaXplKTsKKwlzaGEyNTZfZmluaXNoKCZjdHgsIGNoZWNrc3VtKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9yc2EvcnNhLXNpZ24uYyBiL2xpYi9yc2EvcnNhLXNpZ24uYwppbmRleCA1NDkxMzBlLi5jYThjMTIwIDEwMDY0NAotLS0gYS9saWIvcnNhL3JzYS1zaWduLmMKKysrIGIvbGliL3JzYS9yc2Etc2lnbi5jCkBAIC0xNTksOCArMTU5LDkgQEAKIAlFVlBfY2xlYW51cCgpOwogfQogCi1zdGF0aWMgaW50IHJzYV9zaWduX3dpdGhfa2V5KFJTQSAqcnNhLCBjb25zdCBzdHJ1Y3QgaW1hZ2VfcmVnaW9uIHJlZ2lvbltdLAotCQlpbnQgcmVnaW9uX2NvdW50LCB1aW50OF90ICoqc2lncCwgdWludCAqc2lnX3NpemUpCitzdGF0aWMgaW50IHJzYV9zaWduX3dpdGhfa2V5KFJTQSAqcnNhLCBzdHJ1Y3QgY2hlY2tzdW1fYWxnbyAqY2hlY2tzdW1fYWxnbywKKwkJY29uc3Qgc3RydWN0IGltYWdlX3JlZ2lvbiByZWdpb25bXSwgaW50IHJlZ2lvbl9jb3VudCwKKwkJdWludDhfdCAqKnNpZ3AsIHVpbnQgKnNpZ19zaXplKQogewogCUVWUF9QS0VZICprZXk7CiAJRVZQX01EX0NUWCAqY29udGV4dDsKQEAgLTE5Miw3ICsxOTMsNyBAQAogCQlnb3RvIGVycl9jcmVhdGU7CiAJfQogCUVWUF9NRF9DVFhfaW5pdChjb250ZXh0KTsKLQlpZiAoIUVWUF9TaWduSW5pdChjb250ZXh0LCBFVlBfc2hhMSgpKSkgeworCWlmICghRVZQX1NpZ25Jbml0KGNvbnRleHQsIGNoZWNrc3VtX2FsZ28tPmNhbGN1bGF0ZV9zaWduKCkpKSB7CiAJCXJldCA9IHJzYV9lcnIoIlNpZ25lciBzZXR1cCBmYWlsZWQiKTsKIAkJZ290byBlcnJfc2lnbjsKIAl9CkBAIC0yNDIsNyArMjQzLDggQEAKIAlyZXQgPSByc2FfZ2V0X3ByaXZfa2V5KGluZm8tPmtleWRpciwgaW5mby0+a2V5bmFtZSwgJnJzYSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfcHJpdjsKLQlyZXQgPSByc2Ffc2lnbl93aXRoX2tleShyc2EsIHJlZ2lvbiwgcmVnaW9uX2NvdW50LCBzaWdwLCBzaWdfbGVuKTsKKwlyZXQgPSByc2Ffc2lnbl93aXRoX2tleShyc2EsIGluZm8tPmFsZ28tPmNoZWNrc3VtLCByZWdpb24sCisJCQkJcmVnaW9uX2NvdW50LCBzaWdwLCBzaWdfbGVuKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9zaWduOwogCmRpZmYgLS1naXQgYS9saWIvcnNhL3JzYS12ZXJpZnkuYyBiL2xpYi9yc2EvcnNhLXZlcmlmeS5jCmluZGV4IDAyY2M0ZTMuLjU4N2RhNWIgMTAwNjQ0Ci0tLSBhL2xpYi9yc2EvcnNhLXZlcmlmeS5jCisrKyBiL2xpYi9yc2EvcnNhLXZlcmlmeS5jCkBAIC00LDcwICs0LDI3IEBACiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKICAqLwogCisjaWZuZGVmIFVTRV9IT1NUQ0MKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxmZHRkZWMuaD4KLSNpbmNsdWRlIDxyc2EuaD4KLSNpbmNsdWRlIDxzaGExLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KLQotLyoqCi0gKiBzdHJ1Y3QgcnNhX3B1YmxpY19rZXkgLSBob2xkZXIgZm9yIGEgcHVibGljIGtleQotICoKLSAqIEFuIFJTQSBwdWJsaWMga2V5IGNvbnNpc3RzIG9mIGEgbW9kdWx1cyAodHlwaWNhbGx5IGNhbGxlZCBOKSwgdGhlIGludmVyc2UKLSAqIGFuZCBSXjIsIHdoZXJlIFIgaXMgMl4oIyBrZXkgYml0cykuCi0gKi8KLXN0cnVjdCByc2FfcHVibGljX2tleSB7Ci0JdWludCBsZW47CQkvKiBMZW5ndGggb2YgbW9kdWx1c1tdIGluIG51bWJlciBvZiB1aW50MzJfdCAqLwotCXVpbnQzMl90IG4waW52OwkJLyogLTEgLyBtb2R1bHVzWzBdIG1vZCAyXjMyICovCi0JdWludDMyX3QgKm1vZHVsdXM7CS8qIG1vZHVsdXMgYXMgbGl0dGxlIGVuZGlhbiBhcnJheSAqLwotCXVpbnQzMl90ICpycjsJCS8qIFJeMiBhcyBsaXR0bGUgZW5kaWFuIGFycmF5ICovCi19OworI2Vsc2UKKyNpbmNsdWRlICJmZHRfaG9zdC5oIgorI2luY2x1ZGUgIm1raW1hZ2UuaCIKKyNpbmNsdWRlIDxmZHRfc3VwcG9ydC5oPgorI2VuZGlmCisjaW5jbHVkZSA8cnNhLmg+CisjaW5jbHVkZSA8c2hhMS5oPgorI2luY2x1ZGUgPHNoYTI1Ni5oPgogCiAjZGVmaW5lIFVJTlQ2NF9NVUxUMzIodiwgbXVsdGJ5KSAgKCgodWludDY0X3QpKHYpKSAqICgodWludDMyX3QpKG11bHRieSkpKQogCi0jZGVmaW5lIFJTQTIwNDhfQllURVMJKDIwNDggLyA4KQotCi0vKiBUaGlzIGlzIHRoZSBtaW5pbXVtL21heGltdW0ga2V5IHNpemUgd2Ugc3VwcG9ydCwgaW4gYml0cyAqLwotI2RlZmluZSBSU0FfTUlOX0tFWV9CSVRTCTIwNDgKLSNkZWZpbmUgUlNBX01BWF9LRVlfQklUUwkyMDQ4Ci0KLS8qIFRoaXMgaXMgdGhlIG1heGltdW0gc2lnbmF0dXJlIGxlbmd0aCB0aGF0IHdlIHN1cHBvcnQsIGluIGJpdHMgKi8KLSNkZWZpbmUgUlNBX01BWF9TSUdfQklUUwkyMDQ4Ci0KLXN0YXRpYyBjb25zdCB1aW50OF90IHBhZGRpbmdfc2hhMV9yc2EyMDQ4W1JTQTIwNDhfQllURVMgLSBTSEExX1NVTV9MRU5dID0gewotCTB4MDAsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MzAsIDB4MjEsIDB4MzAsCi0JMHgwOSwgMHgwNiwgMHgwNSwgMHgyYiwgMHgwZSwgMHgwMywgMHgwMiwgMHgxYSwKLQkweDA1LCAweDAwLCAweDA0LCAweDE0Ci19OworI2RlZmluZSBnZXRfdW5hbGlnbmVkX2JlMzIoYSkgZmR0MzJfdG9fY3B1KCoodWludDMyX3QgKilhKQorI2RlZmluZSBwdXRfdW5hbGlnbmVkX2JlMzIoYSwgYikgKCoodWludDMyX3QgKikoYikgPSBjcHVfdG9fZmR0MzIoYSkpCiAKIC8qKgogICogc3VidHJhY3RfbW9kdWx1cygpIC0gc3VidHJhY3QgbW9kdWx1cyBmcm9tIHRoZSBnaXZlbiB2YWx1ZQpAQCAtMjA0LDE4ICsxNjEsMTggQEAKIAkvKiBDb252ZXJ0IHRvIGJpZ2VuZGlhbiBieXRlIGFycmF5ICovCiAJZm9yIChpID0ga2V5LT5sZW4gLSAxLCBwdHIgPSBpbm91dDsgKGludClpID49IDA7IGktLSwgcHRyKyspCiAJCXB1dF91bmFsaWduZWRfYmUzMihyZXN1bHRbaV0sIHB0cik7Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByc2FfdmVyaWZ5X2tleShjb25zdCBzdHJ1Y3QgcnNhX3B1YmxpY19rZXkgKmtleSwgY29uc3QgdWludDhfdCAqc2lnLAotCQljb25zdCB1aW50MzJfdCBzaWdfbGVuLCBjb25zdCB1aW50OF90ICpoYXNoKQorCQkJICBjb25zdCB1aW50MzJfdCBzaWdfbGVuLCBjb25zdCB1aW50OF90ICpoYXNoLAorCQkJICBzdHJ1Y3QgY2hlY2tzdW1fYWxnbyAqYWxnbykKIHsKIAljb25zdCB1aW50OF90ICpwYWRkaW5nOwogCWludCBwYWRfbGVuOwogCWludCByZXQ7CiAKLQlpZiAoIWtleSB8fCAhc2lnIHx8ICFoYXNoKQorCWlmICgha2V5IHx8ICFzaWcgfHwgIWhhc2ggfHwgIWFsZ28pCiAJCXJldHVybiAtRUlPOwogCiAJaWYgKHNpZ19sZW4gIT0gKGtleS0+bGVuICogc2l6ZW9mKHVpbnQzMl90KSkpIHsKQEAgLTIyMyw2ICsxODAsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlkZWJ1ZygiQ2hlY2tzdW0gYWxnb3JpdGhtOiAlcyIsIGFsZ28tPm5hbWUpOworCiAJLyogU2FuaXR5IGNoZWNrIGZvciBzdGFjayBzaXplICovCiAJaWYgKHNpZ19sZW4gPiBSU0FfTUFYX1NJR19CSVRTIC8gOCkgewogCQlkZWJ1ZygiU2lnbmF0dXJlIGxlbmd0aCAldSBleGNlZWRzIG1heGltdW0gJWRcbiIsIHNpZ19sZW4sCkBAIC0yMzgsOSArMTk3LDggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JLyogRGV0ZXJtaW5lIHBhZGRpbmcgdG8gdXNlIGRlcGVuZGluZyBvbiB0aGUgc2lnbmF0dXJlIHR5cGUuICovCi0JcGFkZGluZyA9IHBhZGRpbmdfc2hhMV9yc2EyMDQ4OwotCXBhZF9sZW4gPSBSU0EyMDQ4X0JZVEVTIC0gU0hBMV9TVU1fTEVOOworCXBhZGRpbmcgPSBhbGdvLT5yc2FfcGFkZGluZzsKKwlwYWRfbGVuID0gYWxnby0+cGFkX2xlbiAtIGFsZ28tPmNoZWNrc3VtX2xlbjsKIAogCS8qIENoZWNrIHBrY3MxLjUgcGFkZGluZyBieXRlcy4gKi8KIAlpZiAobWVtY21wKGJ1ZiwgcGFkZGluZywgcGFkX2xlbikpIHsKQEAgLTMwOSw3ICsyNjcsNyBAQAogCX0KIAogCWRlYnVnKCJrZXkgbGVuZ3RoICVkXG4iLCBrZXkubGVuKTsKLQlyZXQgPSByc2FfdmVyaWZ5X2tleSgma2V5LCBzaWcsIHNpZ19sZW4sIGhhc2gpOworCXJldCA9IHJzYV92ZXJpZnlfa2V5KCZrZXksIHNpZywgc2lnX2xlbiwgaGFzaCwgaW5mby0+YWxnby0+Y2hlY2tzdW0pOwogCWlmIChyZXQpIHsKIAkJcHJpbnRmKCIlczogUlNBIGZhaWxlZCB0byB2ZXJpZnk6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAkJcmV0dXJuIHJldDsKQEAgLTMyMywxMiArMjgxLDIzIEBACiAJICAgICAgIHVpbnQ4X3QgKnNpZywgdWludCBzaWdfbGVuKQogewogCWNvbnN0IHZvaWQgKmJsb2IgPSBpbmZvLT5mZHRfYmxvYjsKLQl1aW50OF90IGhhc2hbU0hBMV9TVU1fTEVOXTsKKwkvKiBSZXNlcnZlIG1lbW9yeSBmb3IgbWF4aW11bSBjaGVja3N1bS1sZW5ndGggKi8KKwl1aW50OF90IGhhc2hbaW5mby0+YWxnby0+Y2hlY2tzdW0tPnBhZF9sZW5dOwogCWludCBuZGVwdGgsIG5vZmZzZXQ7CiAJaW50IHNpZ19ub2RlLCBub2RlOwogCWNoYXIgbmFtZVsxMDBdOwotCXNoYTFfY29udGV4dCBjdHg7Ci0JaW50IHJldCwgaTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBWZXJpZnkgdGhhdCB0aGUgY2hlY2tzdW0tbGVuZ3RoIGRvZXMgbm90IGV4Y2VlZCB0aGUKKwkgKiByc2Etc2lnbmF0dXJlLWxlbmd0aAorCSAqLworCWlmIChpbmZvLT5hbGdvLT5jaGVja3N1bS0+Y2hlY2tzdW1fbGVuID4KKwkgICAgaW5mby0+YWxnby0+Y2hlY2tzdW0tPnBhZF9sZW4pIHsKKwkJZGVidWcoIiVzOiBpbnZsYWlkIGNoZWNrc3VtLWFsZ29yaXRobSAlcyBmb3IgJXNcbiIsCisJCSAgICAgIF9fZnVuY19fLCBpbmZvLT5hbGdvLT5jaGVja3N1bS0+bmFtZSwgaW5mby0+YWxnby0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXNpZ19ub2RlID0gZmR0X3N1Ym5vZGVfb2Zmc2V0KGJsb2IsIDAsIEZJVF9TSUdfTk9ERU5BTUUpOwogCWlmIChzaWdfbm9kZSA8IDApIHsKQEAgLTMzNiwxMCArMzA1LDggQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0Jc2hhMV9zdGFydHMoJmN0eCk7Ci0JZm9yIChpID0gMDsgaSA8IHJlZ2lvbl9jb3VudDsgaSsrKQotCQlzaGExX3VwZGF0ZSgmY3R4LCByZWdpb25baV0uZGF0YSwgcmVnaW9uW2ldLnNpemUpOwotCXNoYTFfZmluaXNoKCZjdHgsIGhhc2gpOworCS8qIENhbGN1bGF0ZSBjaGVja3N1bSB3aXRoIGNoZWNrc3VtLWFsZ29yaXRobSAqLworCWluZm8tPmFsZ28tPmNoZWNrc3VtLT5jYWxjdWxhdGUocmVnaW9uLCByZWdpb25fY291bnQsIGhhc2gpOwogCiAJLyogU2VlIGlmIHdlIG11c3QgdXNlIGEgcGFydGljdWxhciBrZXkgKi8KIAlpZiAoaW5mby0+cmVxdWlyZWRfa2V5bm9kZSAhPSAtMSkgewpkaWZmIC0tZ2l0IGEvbGliL3NoYTI1Ni5jIGIvbGliL3NoYTI1Ni5jCmluZGV4IDczNDgxNjIuLjMyMTJiYWIgMTAwNjQ0Ci0tLSBhL2xpYi9zaGEyNTYuYworKysgYi9saWIvc2hhMjU2LmMKQEAgLTI1OCwxNCArMjU4LDE1IEBACiB7CiAJc2hhMjU2X2NvbnRleHQgY3R4OwogI2lmIGRlZmluZWQoQ09ORklHX0hXX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKLQl1bnNpZ25lZCBjaGFyICplbmQsICpjdXJyOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZDsKKwl1bnNpZ25lZCBjaGFyICpjdXJyOwogCWludCBjaHVuazsKICNlbmRpZgogCiAJc2hhMjU2X3N0YXJ0cygmY3R4KTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0hXX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKLQljdXJyID0gaW5wdXQ7CisJY3VyciA9ICh1bnNpZ25lZCBjaGFyICopaW5wdXQ7CiAJZW5kID0gaW5wdXQgKyBpbGVuOwogCXdoaWxlIChjdXJyIDwgZW5kKSB7CiAJCWNodW5rID0gZW5kIC0gY3VycjsKZGlmZiAtLWdpdCBhL25hbmRfc3BsL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTM2ZHMvTWFrZWZpbGUgYi9uYW5kX3NwbC9ib2FyZC9mcmVlc2NhbGUvbXBjODUzNmRzL01ha2VmaWxlCmluZGV4IGM2MzliMTIuLjlmMzM4MDIgMTAwNjQ0Ci0tLSBhL25hbmRfc3BsL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTM2ZHMvTWFrZWZpbGUKKysrIGIvbmFuZF9zcGwvYm9hcmQvZnJlZXNjYWxlL21wYzg1MzZkcy9NYWtlZmlsZQpAQCAtNzgsMTEgKzc4LDcgQEAKIAlAcm0gLWYgJEAKIAlsbiAtcyAkKHNyY3RyZWUpLyQoQ1BVRElSKS9yZXNldHZlYy5TICRACiAKLSQob2JqKS9maXhlZF9pdm9yLlM6Ci0JQHJtIC1mICRACi0JbG4gLXNmICQoc3JjdHJlZSkvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2ZpeGVkX2l2b3IuUyAkQAotCi0kKG9iaikvc3RhcnQuUzogJChvYmopL2ZpeGVkX2l2b3IuUworJChvYmopL3N0YXJ0LlM6CiAJQHJtIC1mICRACiAJbG4gLXNmICQoc3JjdHJlZSkvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3N0YXJ0LlMgJEAKIApkaWZmIC0tZ2l0IGEvbmFuZF9zcGwvYm9hcmQvZnJlZXNjYWxlL21wYzg1NjltZHMvTWFrZWZpbGUgYi9uYW5kX3NwbC9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OW1kcy9NYWtlZmlsZQppbmRleCBjNjM5YjEyLi45ZjMzODAyIDEwMDY0NAotLS0gYS9uYW5kX3NwbC9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OW1kcy9NYWtlZmlsZQorKysgYi9uYW5kX3NwbC9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OW1kcy9NYWtlZmlsZQpAQCAtNzgsMTEgKzc4LDcgQEAKIAlAcm0gLWYgJEAKIAlsbiAtcyAkKHNyY3RyZWUpLyQoQ1BVRElSKS9yZXNldHZlYy5TICRACiAKLSQob2JqKS9maXhlZF9pdm9yLlM6Ci0JQHJtIC1mICRACi0JbG4gLXNmICQoc3JjdHJlZSkvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2ZpeGVkX2l2b3IuUyAkQAotCi0kKG9iaikvc3RhcnQuUzogJChvYmopL2ZpeGVkX2l2b3IuUworJChvYmopL3N0YXJ0LlM6CiAJQHJtIC1mICRACiAJbG4gLXNmICQoc3JjdHJlZSkvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3N0YXJ0LlMgJEAKIApkaWZmIC0tZ2l0IGEvbmFuZF9zcGwvYm9hcmQvZnJlZXNjYWxlL21wYzg1NzJkcy9NYWtlZmlsZSBiL25hbmRfc3BsL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTcyZHMvTWFrZWZpbGUKaW5kZXggYzYzOWIxMi4uOWYzMzgwMiAxMDA2NDQKLS0tIGEvbmFuZF9zcGwvYm9hcmQvZnJlZXNjYWxlL21wYzg1NzJkcy9NYWtlZmlsZQorKysgYi9uYW5kX3NwbC9ib2FyZC9mcmVlc2NhbGUvbXBjODU3MmRzL01ha2VmaWxlCkBAIC03OCwxMSArNzgsNyBAQAogCUBybSAtZiAkQAogCWxuIC1zICQoc3JjdHJlZSkvJChDUFVESVIpL3Jlc2V0dmVjLlMgJEAKIAotJChvYmopL2ZpeGVkX2l2b3IuUzoKLQlAcm0gLWYgJEAKLQlsbiAtc2YgJChzcmN0cmVlKS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvZml4ZWRfaXZvci5TICRACi0KLSQob2JqKS9zdGFydC5TOiAkKG9iaikvZml4ZWRfaXZvci5TCiskKG9iaikvc3RhcnQuUzoKIAlAcm0gLWYgJEAKIAlsbiAtc2YgJChzcmN0cmVlKS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvc3RhcnQuUyAkQAogCmRpZmYgLS1naXQgYS9uYW5kX3NwbC9ib2FyZC9mcmVlc2NhbGUvcDEwMjNyZHMvTWFrZWZpbGUgYi9uYW5kX3NwbC9ib2FyZC9mcmVlc2NhbGUvcDEwMjNyZHMvTWFrZWZpbGUKaW5kZXggMzhmNjcyNi4uZmJhOWY5MyAxMDA2NDQKLS0tIGEvbmFuZF9zcGwvYm9hcmQvZnJlZXNjYWxlL3AxMDIzcmRzL01ha2VmaWxlCisrKyBiL25hbmRfc3BsL2JvYXJkL2ZyZWVzY2FsZS9wMTAyM3Jkcy9NYWtlZmlsZQpAQCAtNzQsMTEgKzc0LDcgQEAKIAlAcm0gLWYgJEAKIAlsbiAtcyAkKHNyY3RyZWUpLyQoQ1BVRElSKS9yZXNldHZlYy5TICRACiAKLSQob2JqKS9maXhlZF9pdm9yLlM6Ci0JQHJtIC1mICRACi0JbG4gLXNmICQoc3JjdHJlZSkvJChDUFVESVIpL2ZpeGVkX2l2b3IuUyAkQAotCi0kKG9iaikvc3RhcnQuUzogJChvYmopL2ZpeGVkX2l2b3IuUworJChvYmopL3N0YXJ0LlM6CiAJQHJtIC1mICRACiAJbG4gLXNmICQoc3JjdHJlZSkvJChDUFVESVIpL3N0YXJ0LlMgJEAKIApkaWZmIC0tZ2l0IGEvbmFuZF9zcGwvYm9hcmQvZnJlZXNjYWxlL3AxX3AyX3JkYi9NYWtlZmlsZSBiL25hbmRfc3BsL2JvYXJkL2ZyZWVzY2FsZS9wMV9wMl9yZGIvTWFrZWZpbGUKaW5kZXggYzYzOWIxMi4uOWYzMzgwMiAxMDA2NDQKLS0tIGEvbmFuZF9zcGwvYm9hcmQvZnJlZXNjYWxlL3AxX3AyX3JkYi9NYWtlZmlsZQorKysgYi9uYW5kX3NwbC9ib2FyZC9mcmVlc2NhbGUvcDFfcDJfcmRiL01ha2VmaWxlCkBAIC03OCwxMSArNzgsNyBAQAogCUBybSAtZiAkQAogCWxuIC1zICQoc3JjdHJlZSkvJChDUFVESVIpL3Jlc2V0dmVjLlMgJEAKIAotJChvYmopL2ZpeGVkX2l2b3IuUzoKLQlAcm0gLWYgJEAKLQlsbiAtc2YgJChzcmN0cmVlKS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvZml4ZWRfaXZvci5TICRACi0KLSQob2JqKS9zdGFydC5TOiAkKG9iaikvZml4ZWRfaXZvci5TCiskKG9iaikvc3RhcnQuUzoKIAlAcm0gLWYgJEAKIAlsbiAtc2YgJChzcmN0cmVlKS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvc3RhcnQuUyAkQAogCmRpZmYgLS1naXQgYS9wb3N0L2NwdS9tcGM4eHgvZXRoZXIuYyBiL3Bvc3QvY3B1L21wYzh4eC9ldGhlci5jCmluZGV4IDkxNTA1NDcuLmQxMjI1MDAgMTAwNjQ0Ci0tLSBhL3Bvc3QvY3B1L21wYzh4eC9ldGhlci5jCisrKyBiL3Bvc3QvY3B1L21wYzh4eC9ldGhlci5jCkBAIC0zNjUsMTkgKzM2NSwxMCBAQAogCWltbXItPmltX2NwbS5jcF9zY2Nbc2NjX2luZGV4XS5zY2NfcHNtciA9IFNDQ19QU01SX0VOQ1JDIHwKIAkJCVNDQ19QU01SX05JQjIyIHwgU0NDX1BTTVJfTFBCOwogCi0jaWZkZWYgQ09ORklHX1JQWENMQVNTSUMKLQkqKCh1Y2hhciAqKSBCQ1NSMCkgJj0gfkJDU1IwX0VUSExQQks7Ci0JKigodWNoYXIgKikgQkNTUjApIHw9IChCQ1NSMF9FVEhFTiB8IEJDU1IwX0NPTFRFU1QgfCBCQ1NSMF9GVUxMRFBMWCk7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19SUFhMSVRFCiAJKigodWNoYXIgKikgQkNTUjApIHw9IEJDU1IwX0VUSEVOOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfTUJYCi0JYm9hcmRfZXRoZXJfaW5pdCAoKTsKLSNlbmRpZgotCiAJLyoKIAkgKiBTZXQgdGhlIEVOVC9FTlIgYml0cyBpbiB0aGUgR1NNUiBMb3cgLS0gRW5hYmxlIFRyYW5zbWl0L1JlY2VpdmUKIAkgKi8KQEAgLTM5MCw4ICszODEsNiBAQAogCSAqLwogI2lmIGRlZmluZWQgKENPTkZJR19GQURTKQogCXVkZWxheSAoMTAwMDApOwkJCQkvKiB3YWl0IDEwIG1zICovCi0jZWxpZiBkZWZpbmVkKENPTkZJR19SUFhDTEFTU0lDKQotCXVkZWxheSAoMTAwMDAwKTsJCQkvKiB3YWl0IDEwMCBtcyAqLwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL3Bvc3QvY3B1L21wYzh4eC91YXJ0LmMgYi9wb3N0L2NwdS9tcGM4eHgvdWFydC5jCmluZGV4IDEwNmE5YjguLjUyMTRjNzEgMTAwNjQ0Ci0tLSBhL3Bvc3QvY3B1L21wYzh4eC91YXJ0LmMKKysrIGIvcG9zdC9jcHUvbXBjOHh4L3VhcnQuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJCQl+KHNtY19pbmRleCA9PSAxID8gQkNTUjFfUlMyMzJFTl8xIDogQkNTUjFfUlMyMzJFTl8yKTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfUlBYTElURSkgfHwgZGVmaW5lZChDT05GSUdfUlBYQ0xBU1NJQykKKyNpZiBkZWZpbmVkKENPTkZJR19SUFhMSVRFKQogCS8qIEVuYWJsZSBNb25pdG9yIFBvcnQgVHJhbnNjZWl2ZXIgKi8KIAkqKCh1Y2hhciAqKSBCQ1NSMCkgfD0gQkNTUjBfRU5NT05YQ1ZSOwogI2VuZGlmCkBAIC0xNDEsMTAgKzE0MSw2IEBACiAJdXAtPnNtY19yZmNyID0gU01DX0VCOwogCXVwLT5zbWNfdGZjciA9IFNNQ19FQjsKIAotI2lmIGRlZmluZWQoQ09ORklHX01CWCkKLQlib2FyZF9zZXJpYWxfaW5pdCAoKTsKLSNlbmRpZgotCiAJLyogU2V0IFVBUlQgbW9kZSwgOCBiaXQsIG5vIHBhcml0eSwgb25lIHN0b3AuCiAJICogRW5hYmxlIHJlY2VpdmUgYW5kIHRyYW5zbWl0LgogCSAqIFNldCBsb2NhbCBsb29wYmFjayBtb2RlLgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZSBiL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKaW5kZXggNjUwNDU3MS4uYzY2NGUzOSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQorKysgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCkBAIC0zLDYgKzMsNyBAQAogCiAjIENvbnZlbmllbnQgdmFyaWFibGVzCiBjb21tYSAgIDo9ICwKK3F1b3RlICAgOj0gIgogc3F1b3RlICA6PSAnCiBlbXB0eSAgIDo9CiBzcGFjZSAgIDo9ICQoZW1wdHkpICQoZW1wdHkpCkBAIC0xNjEsNiArMTYyLDE1IEBACiAjIEltcG9ydGFudDogbm8gc3BhY2VzIGFyb3VuZCBvcHRpb25zCiBhci1vcHRpb24gPSAkKGNhbGwgdHJ5LXJ1biwgJChBUikgcmMkKDEpICIkJFRNUCIsJCgxKSwkKDIpKQogCisjIGxkLXZlcnNpb24KKyMgVXNhZ2U6ICQoY2FsbCBsZC12ZXJzaW9uKQorIyBOb3RlIHRoaXMgaXMgbWFpbmx5IGZvciBISiBMdSdzIDMgbnVtYmVyIGJpbnV0aWwgdmVyc2lvbnMKK2xkLXZlcnNpb24gPSAkKHNoZWxsICQoTEQpIC0tdmVyc2lvbiB8ICQoc3JjdHJlZSkvc2NyaXB0cy9sZC12ZXJzaW9uLnNoKQorCisjIGxkLWlmdmVyc2lvbgorIyBVc2FnZTogICQoY2FsbCBsZC1pZnZlcnNpb24sIC1nZSwgMjIyNTIsIHkpCitsZC1pZnZlcnNpb24gPSAkKHNoZWxsIFsgJChjYWxsIGxkLXZlcnNpb24pICQoMSkgJCgyKSBdICYmIGVjaG8gJCgzKSkKKwogIyMjIyMjCiAKICMjIwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZSBiL3NjcmlwdHMvTWFrZWZpbGUKaW5kZXggMjQyZTNhMC4uNjhjOTk4ZSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZQorKysgYi9zY3JpcHRzL01ha2VmaWxlCkBAIC05LDcgKzksNyBAQAogCiAjIFRoZXNlIHRhcmdldHMgYXJlIHVzZWQgaW50ZXJuYWxseSB0byBhdm9pZCAiaXMgdXAgdG8gZGF0ZSIgbWVzc2FnZXMKIFBIT05ZICs9IGJ1aWxkX2RvY3Byb2MKLWJ1aWxkX2RvY3Byb2M6IHNjcmlwdHMvZG9jcHJvYworYnVpbGRfZG9jcHJvYzogJChvYmopL2RvY3Byb2MKIAlAOgogCiAjIExldCBjbGVhbiBkZXNjZW5kIGludG8gc3ViZGlycwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5idWlsZCBiL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKaW5kZXggMzYzNDZmZC4uNjQxNmMxYSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5idWlsZAorKysgYi9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCkBAIC05MCwxMiArOTAsMjIgQEAKIHdhcm5pbmctMSA6PSAtV2V4dHJhIC1XdW51c2VkIC1Xbm8tdW51c2VkLXBhcmFtZXRlcgogd2FybmluZy0xICs9IC1XbWlzc2luZy1kZWNsYXJhdGlvbnMKIHdhcm5pbmctMSArPSAtV21pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZQotd2FybmluZy0xICs9IC1XbWlzc2luZy1wcm90b3R5cGVzCit3YXJuaW5nLTEgKz0gJChjYWxsIGNjLW9wdGlvbiwgLVdtaXNzaW5nLXByb3RvdHlwZXMpCiB3YXJuaW5nLTEgKz0gLVdvbGQtc3R5bGUtZGVmaW5pdGlvbgogd2FybmluZy0xICs9ICQoY2FsbCBjYy1vcHRpb24sIC1XbWlzc2luZy1pbmNsdWRlLWRpcnMpCiB3YXJuaW5nLTEgKz0gJChjYWxsIGNjLW9wdGlvbiwgLVd1bnVzZWQtYnV0LXNldC12YXJpYWJsZSkKIHdhcm5pbmctMSArPSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCBtaXNzaW5nLWZpZWxkLWluaXRpYWxpemVycykKIAorIyBDbGFuZword2FybmluZy0xICs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIGluaXRpYWxpemVyLW92ZXJyaWRlcykKK3dhcm5pbmctMSArPSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCB1bnVzZWQtdmFsdWUpCit3YXJuaW5nLTEgKz0gJChjYWxsIGNjLWRpc2FibGUtd2FybmluZywgZm9ybWF0KQord2FybmluZy0xICs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIHVua25vd24td2FybmluZy1vcHRpb24pCit3YXJuaW5nLTEgKz0gJChjYWxsIGNjLWRpc2FibGUtd2FybmluZywgc2lnbi1jb21wYXJlKQord2FybmluZy0xICs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIGZvcm1hdC16ZXJvLWxlbmd0aCkKK3dhcm5pbmctMSArPSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCB1bmluaXRpYWxpemVkKQord2FybmluZy0xICs9ICQoY2FsbCBjYy1vcHRpb24sIC1mY2F0Y2gtdW5kZWZpbmVkLWJlaGF2aW9yKQorCiB3YXJuaW5nLTIgOj0gLVdhZ2dyZWdhdGUtcmV0dXJuCiB3YXJuaW5nLTIgKz0gLVdjYXN0LWFsaWduCiB3YXJuaW5nLTIgKz0gLVdkaXNhYmxlZC1vcHRpbWl6YXRpb24KQEAgLTIyNSw3ICsyMzUsNyBAQAogJChtdWx0aS1vYmpzLXk6Lm89LmxzdCkgOiBtb2RuYW1lID0gJChtb2RuYW1lLW11bHRpKQogCiBxdWlldF9jbWRfY2Nfc19jID0gQ0MgJChxdWlldF9tb2R0YWcpICAkQAotY21kX2NjX3NfYyAgICAgICA9ICQoQ0MpICQoY19mbGFncykgLWZ2ZXJib3NlLWFzbSAtUyAtbyAkQCAkPAorY21kX2NjX3NfYyAgICAgICA9ICQoQ0MpICQoY19mbGFncykgJChESVNBQkxFX0xUTykgLWZ2ZXJib3NlLWFzbSAtUyAtbyAkQCAkPAogCiAkKG9iaikvJS5zOiAkKHNyYykvJS5jIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGNjX3NfYykKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubGliIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKaW5kZXggZDU2OGZkZS4uYTA0NDM5ZGMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubGliCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubGliCkBAIC0yNzMsNiArMjczLDE4IEBACiAKIGR0Yy10bXAgPSAkKHN1YnN0ICQoY29tbWEpLF8sJChkb3QtdGFyZ2V0KS5kdHMudG1wKQogCisjIEhlbHBlciB0YXJnZXRzIGZvciBJbnN0YWxsaW5nIERUQnMgaW50byB0aGUgYm9vdCBkaXJlY3RvcnkKK3F1aWV0X2NtZF9kdGJfaW5zdGFsbCA9CUlOU1RBTEwgJDwKKyAgICAgIGNtZF9kdGJfaW5zdGFsbCA9CWNwICQ8ICQoMikKKworX2R0Ymluc3RfcHJlXzoKKwkkKFEpaWYgWyAtZCAkKElOU1RBTExfRFRCU19QQVRIKS5vbGQgXTsgdGhlbiBybSAtcmYgJChJTlNUQUxMX0RUQlNfUEFUSCkub2xkOyBmaQorCSQoUSlpZiBbIC1kICQoSU5TVEFMTF9EVEJTX1BBVEgpIF07IHRoZW4gbXYgJChJTlNUQUxMX0RUQlNfUEFUSCkgJChJTlNUQUxMX0RUQlNfUEFUSCkub2xkOyBmaQorCSQoUSlta2RpciAtcCAkKElOU1RBTExfRFRCU19QQVRIKQorCislLmR0Yl9kdGJpbnN0XzogJChvYmopLyUuZHRiIF9kdGJpbnN0X3ByZV8KKwkkKGNhbGwgY21kLGR0Yl9pbnN0YWxsLCQoSU5TVEFMTF9EVEJTX1BBVEgpKQorCiAjIEJ6aXAyCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0zNjcsNyArMzc5LDMgQEAKIGNtZF94em1pc2MgPSAoY2F0ICQoZmlsdGVyLW91dCBGT1JDRSwkXikgfCBcCiAJeHogLS1jaGVjaz1jcmMzMiAtLWx6bWEyPWRpY3Q9MU1pQikgPiAkQCB8fCBcCiAJKHJtIC1mICRAIDsgZmFsc2UpCi0KLSMgbWlzYyBzdHVmZgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXF1b3RlOj0iCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xkLXZlcnNpb24uc2ggYi9zY3JpcHRzL2xkLXZlcnNpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTk4NTgwZAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGQtdmVyc2lvbi5zaApAQCAtMCwwICsxLDggQEAKKyMhL3Vzci9iaW4vYXdrIC1mCisjIGV4dHJhY3QgbGlua2VyIHZlcnNpb24gbnVtYmVyIGZyb20gc3RkaW4gYW5kIHR1cm4gaW50byBzaW5nbGUgbnVtYmVyCisJeworCWdzdWIoIi4qKSIsICIiKTsKKwlzcGxpdCgkMSxhLCAiLiIpOworCXByaW50IGFbMV0qMTAwMDAwMDAgKyBhWzJdKjEwMDAwMCArIGFbM10qMTAwMDAgKyBhWzRdKjEwMCArIGFbNV07CisJZXhpdAorCX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvb2JqZGlmZiBiL3NjcmlwdHMvb2JqZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iM2U0ZjEwCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9vYmpkaWZmCkBAIC0wLDAgKzEsMTQxIEBACisjIS9iaW4vYmFzaAorCisjIG9iamRpZmYgLSBhIHNtYWxsIHNjcmlwdCBmb3IgdmFsaWRhdGluZyB0aGF0IGEgY29tbWl0IG9yIHNlcmllcyBvZiBjb21taXRzCisjIGRpZG4ndCBjaGFuZ2Ugb2JqZWN0IGNvZGUuCisjCisjIENvcHlyaWdodCAyMDE0LCBKYXNvbiBDb29wZXIgPGphc29uQGxha2VkYWVtb24ubmV0PgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdmVyc2lvbiAyCisKKyMgdXNhZ2UgZXhhbXBsZToKKyMKKyMgJCBnaXQgY2hlY2tvdXQgQ09NTUlUX0EKKyMgJCA8eW91ciBmYW5jeSBidWlsZCBjb21tYW5kIGhlcmU+CisjICQgLi9zY3JpcHRzL29iamRpZmYgcmVjb3JkIHBhdGgvdG8vKi5vCisjCisjICQgZ2l0IGNoZWNrb3V0IENPTU1JVF9CCisjICQgPHlvdXIgZmFuY3kgYnVpbGQgY29tbWFuZCBoZXJlPgorIyAkIC4vc2NyaXB0cy9vYmpkaWZmIHJlY29yZCBwYXRoL3RvLyoubworIworIyAkIC4vc2NyaXB0cy9vYmpkaWZmIGRpZmYgQ09NTUlUX0EgQ09NTUlUX0IKKyMgJAorCisjIEFuZCB0byBjbGVhbiB1cCAoZXZlcnl0aGluZyBpcyBpbiAudG1wX29iamRpZmYvKikKKyMgJCAuL3NjcmlwdHMvb2JqZGlmZiBjbGVhbiBhbGwKKyMKKyMgTm90ZTogJ21ha2UgbXJwcm9wZXInIHdpbGwgYWxzbyByZW1vdmUgLnRtcF9vYmpkaWZmCisKK0dJVF9ESVI9ImBnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcmAiCisKK2lmIFsgLWQgIiRHSVRfRElSIiBdOyB0aGVuCisJVE1QRD0iJHtHSVRfRElSJWdpdH10bXBfb2JqZGlmZiIKKworCVsgLWQgIiRUTVBEIiBdIHx8IG1rZGlyICIkVE1QRCIKK2Vsc2UKKwllY2hvICJFUlJPUjogZ2l0IGRpcmVjdG9yeSBub3QgZm91bmQuIgorCWV4aXQgMQorZmkKKwordXNhZ2UoKSB7CisJZWNobyAiVXNhZ2U6ICQwIDxjb21tYW5kPiA8YXJncz4iCisJZWNobyAiICByZWNvcmQgICAgPGxpc3Qgb2Ygb2JqZWN0IGZpbGVzPiIKKwllY2hvICIgIGRpZmYgICAgICA8Y29tbWl0QT4gPGNvbW1pdEI+IgorCWVjaG8gIiAgY2xlYW4gICAgIGFsbCB8IDxjb21taXQ+IgorCWV4aXQgMQorfQorCitkb3JlY29yZCgpIHsKKwlbICQjIC1lcSAwIF0gJiYgdXNhZ2UKKworCUZJTEVTPSIkKiIKKworCUNNVD0iYGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEYCIKKworCU9CSkRVTVA9IiR7Q1JPU1NfQ09NUElMRX1vYmpkdW1wIgorCU9CSkRJRkZEPSIkVE1QRC8kQ01UIgorCisJWyAhIC1kICIkT0JKRElGRkQiIF0gJiYgbWtkaXIgLXAgIiRPQkpESUZGRCIKKworCWZvciBmIGluICRGSUxFUzsgZG8KKwkJZG49IiR7ZiUvKn0iCisJCWJuPSIke2YjIyovfSIKKworCQlbICEgLWQgIiRPQkpESUZGRC8kZG4iIF0gJiYgbWtkaXIgLXAgIiRPQkpESUZGRC8kZG4iCisKKwkJIyByZW1vdmUgYWRkcmVzc2VzIGZvciBhIG1vcmUgY2xlYXIgZGlmZgorCQkjIGh0dHA6Ly9kdW1tZGlkYS50dW1ibHIuY29tL3Bvc3QvNjA5MjQwNjA0NTEvYmluYXJ5LWRpZmYtYmV0d2Vlbi1saWJjLWZyb20tc2NpZW50aWZpY2xpbnV4LWFuZAorCQkkT0JKRFVNUCAtRCAiJGYiIHwgc2VkICJzL15bWzpzcGFjZTpdXVwrWzAtOWEtZl1cKy8vIiBcCisJCQk+IiRPQkpESUZGRC8kZG4vJGJuIgorCWRvbmUKK30KKworZG9kaWZmKCkgeworCVsgJCMgLW5lIDIgXSAmJiBbICQjIC1uZSAwIF0gJiYgdXNhZ2UKKworCWlmIFsgJCMgLWVxIDAgXTsgdGhlbgorCQlTUkM9ImBnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF5gIgorCQlEU1Q9ImBnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRGAiCisJZWxzZQorCQlTUkM9ImBnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJDFgIgorCQlEU1Q9ImBnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJDJgIgorCWZpCisKKwlESUZGPSJgd2hpY2ggY29sb3JkaWZmYCIKKworCWlmIFsgJHsjRElGRn0gLWVxIDAgXSB8fCBbICEgLXggIiRESUZGIiBdOyB0aGVuCisJCURJRkY9ImB3aGljaCBkaWZmYCIKKwlmaQorCisJU1JDRD0iJFRNUEQvJFNSQyIKKwlEU1REPSIkVE1QRC8kRFNUIgorCisJaWYgWyAhIC1kICIkU1JDRCIgXTsgdGhlbgorCQllY2hvICJFUlJPUjogJFNSQ0QgZG9lc24ndCBleGlzdCIKKwkJZXhpdCAxCisJZmkKKworCWlmIFsgISAtZCAiJERTVEQiIF07IHRoZW4KKwkJZWNobyAiRVJST1I6ICREU1REIGRvZXNuJ3QgZXhpc3QiCisJCWV4aXQgMQorCWZpCisKKwkkRElGRiAtTnVyZCAkU1JDRCAkRFNURAorfQorCitkb2NsZWFuKCkgeworCVsgJCMgLWVxIDAgXSAmJiB1c2FnZQorCVsgJCMgLWd0IDEgXSAmJiB1c2FnZQorCisJaWYgWyAieCQxIiA9ICJ4YWxsIiBdOyB0aGVuCisJCXJtIC1yZiAkVE1QRC8qCisJZWxzZQorCQlDTVQ9ImBnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJDFgIgorCisJCWlmIFsgLWQgIiRUTVBELyRDTVQiIF07IHRoZW4KKwkJCXJtIC1yZiAkVE1QRC8kQ01UCisJCWVsc2UKKwkJCWVjaG8gIiRDTVQgbm90IGZvdW5kIgorCQlmaQorCWZpCit9CisKK1sgJCMgLWVxIDAgXSAmJgl1c2FnZQorCitjYXNlICIkMSIgaW4KKwlyZWNvcmQpCisJCXNoaWZ0CisJCWRvcmVjb3JkICQqCisJCTs7CisJZGlmZikKKwkJc2hpZnQKKwkJZG9kaWZmICQqCisJCTs7CisJY2xlYW4pCisJCXNoaWZ0CisJCWRvY2xlYW4gJCoKKwkJOzsKKwkqKQorCQllY2hvICJVbnJlY29nbml6ZWQgY29tbWFuZCAnJDEnIgorCQlleGl0IDEKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3Rlc3QvdmJvb3Qvc2lnbi1jb25maWdzLml0cyBiL3Rlc3QvdmJvb3Qvc2lnbi1jb25maWdzLXNoYTEuaXRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0L3Zib290L3NpZ24tY29uZmlncy5pdHMKcmVuYW1lIHRvIHRlc3QvdmJvb3Qvc2lnbi1jb25maWdzLXNoYTEuaXRzCmRpZmYgLS1naXQgYS90ZXN0L3Zib290L3NpZ24tY29uZmlncy1zaGEyNTYuaXRzIGIvdGVzdC92Ym9vdC9zaWduLWNvbmZpZ3Mtc2hhMjU2Lml0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjM0MzJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC92Ym9vdC9zaWduLWNvbmZpZ3Mtc2hhMjU2Lml0cwpAQCAtMCwwICsxLDQ1IEBACisvZHRzLXYxLzsKKworLyB7CisJZGVzY3JpcHRpb24gPSAiQ2hyb21lIE9TIGtlcm5lbCBpbWFnZSB3aXRoIG9uZSBvciBtb3JlIEZEVCBibG9icyI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisKKwlpbWFnZXMgeworCQlrZXJuZWxAMSB7CisJCQlkYXRhID0gL2luY2Jpbi8oInRlc3Qta2VybmVsLmJpbiIpOworCQkJdHlwZSA9ICJrZXJuZWxfbm9sb2FkIjsKKwkJCWFyY2ggPSAic2FuZGJveCI7CisJCQlvcyA9ICJsaW51eCI7CisJCQljb21wcmVzc2lvbiA9ICJub25lIjsKKwkJCWxvYWQgPSA8MHg0PjsKKwkJCWVudHJ5ID0gPDB4OD47CisJCQlrZXJuZWwtdmVyc2lvbiA9IDwxPjsKKwkJCWhhc2hAMSB7CisJCQkJYWxnbyA9ICJzaGEyNTYiOworCQkJfTsKKwkJfTsKKwkJZmR0QDEgeworCQkJZGVzY3JpcHRpb24gPSAic25vdyI7CisJCQlkYXRhID0gL2luY2Jpbi8oInNhbmRib3gta2VybmVsLmR0YiIpOworCQkJdHlwZSA9ICJmbGF0X2R0IjsKKwkJCWFyY2ggPSAic2FuZGJveCI7CisJCQljb21wcmVzc2lvbiA9ICJub25lIjsKKwkJCWZkdC12ZXJzaW9uID0gPDE+OworCQkJaGFzaEAxIHsKKwkJCQlhbGdvID0gInNoYTI1NiI7CisJCQl9OworCQl9OworCX07CisJY29uZmlndXJhdGlvbnMgeworCQlkZWZhdWx0ID0gImNvbmZAMSI7CisJCWNvbmZAMSB7CisJCQlrZXJuZWwgPSAia2VybmVsQDEiOworCQkJZmR0ID0gImZkdEAxIjsKKwkJCXNpZ25hdHVyZUAxIHsKKwkJCQlhbGdvID0gInNoYTI1Nixyc2EyMDQ4IjsKKwkJCQlrZXktbmFtZS1oaW50ID0gImRldiI7CisJCQkJc2lnbi1pbWFnZXMgPSAiZmR0IiwgImtlcm5lbCI7CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvdGVzdC92Ym9vdC9zaWduLWltYWdlcy5pdHMgYi90ZXN0L3Zib290L3NpZ24taW1hZ2VzLXNoYTEuaXRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0L3Zib290L3NpZ24taW1hZ2VzLml0cwpyZW5hbWUgdG8gdGVzdC92Ym9vdC9zaWduLWltYWdlcy1zaGExLml0cwpkaWZmIC0tZ2l0IGEvdGVzdC92Ym9vdC9zaWduLWltYWdlcy1zaGEyNTYuaXRzIGIvdGVzdC92Ym9vdC9zaWduLWltYWdlcy1zaGEyNTYuaXRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YWE5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3Zib290L3NpZ24taW1hZ2VzLXNoYTI1Ni5pdHMKQEAgLTAsMCArMSw0MiBAQAorL2R0cy12MS87CisKKy8geworCWRlc2NyaXB0aW9uID0gIkNocm9tZSBPUyBrZXJuZWwgaW1hZ2Ugd2l0aCBvbmUgb3IgbW9yZSBGRFQgYmxvYnMiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCisJaW1hZ2VzIHsKKwkJa2VybmVsQDEgeworCQkJZGF0YSA9IC9pbmNiaW4vKCJ0ZXN0LWtlcm5lbC5iaW4iKTsKKwkJCXR5cGUgPSAia2VybmVsX25vbG9hZCI7CisJCQlhcmNoID0gInNhbmRib3giOworCQkJb3MgPSAibGludXgiOworCQkJY29tcHJlc3Npb24gPSAibm9uZSI7CisJCQlsb2FkID0gPDB4ND47CisJCQllbnRyeSA9IDwweDg+OworCQkJa2VybmVsLXZlcnNpb24gPSA8MT47CisJCQlzaWduYXR1cmVAMSB7CisJCQkJYWxnbyA9ICJzaGEyNTYscnNhMjA0OCI7CisJCQkJa2V5LW5hbWUtaGludCA9ICJkZXYiOworCQkJfTsKKwkJfTsKKwkJZmR0QDEgeworCQkJZGVzY3JpcHRpb24gPSAic25vdyI7CisJCQlkYXRhID0gL2luY2Jpbi8oInNhbmRib3gta2VybmVsLmR0YiIpOworCQkJdHlwZSA9ICJmbGF0X2R0IjsKKwkJCWFyY2ggPSAic2FuZGJveCI7CisJCQljb21wcmVzc2lvbiA9ICJub25lIjsKKwkJCWZkdC12ZXJzaW9uID0gPDE+OworCQkJc2lnbmF0dXJlQDEgeworCQkJCWFsZ28gPSAic2hhMjU2LHJzYTIwNDgiOworCQkJCWtleS1uYW1lLWhpbnQgPSAiZGV2IjsKKwkJCX07CisJCX07CisJfTsKKwljb25maWd1cmF0aW9ucyB7CisJCWRlZmF1bHQgPSAiY29uZkAxIjsKKwkJY29uZkAxIHsKKwkJCWtlcm5lbCA9ICJrZXJuZWxAMSI7CisJCQlmZHQgPSAiZmR0QDEiOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvdGVzdC92Ym9vdC92Ym9vdF90ZXN0LnNoIGIvdGVzdC92Ym9vdC92Ym9vdF90ZXN0LnNoCmluZGV4IGJiMmM2MDUuLjNjNmVmYTcgMTAwNzU1Ci0tLSBhL3Rlc3QvdmJvb3QvdmJvb3RfdGVzdC5zaAorKysgYi90ZXN0L3Zib290L3Zib290X3Rlc3Quc2gKQEAgLTQ3LDYgKzQ3LDcgQEAKIGR0Yz0iLUkgZHRzIC1PIGR0YiAtcCAyMDAwIgogdWJvb3Q9IiR7T30vdS1ib290IgogbWtpbWFnZT0iJHtPfS90b29scy9ta2ltYWdlIgorZml0X2NoZWNrX3NpZ249IiR7T30vdG9vbHMvZml0X2NoZWNrX3NpZ24iCiBrZXlzPSIke2Rpcn0vZGV2LWtleXMiCiBlY2hvICR7bWtpbWFnZX0gLUQgIiR7ZHRjfSIKIApAQCAtNjEsNDcgKzYyLDc2IEBACiAKIHB1c2hkICR7ZGlyfSA+L2Rldi9udWxsCiAKLSMgQ29tcGlsZSBvdXIgZGV2aWNlIHRyZWUgZmlsZXMgZm9yIGtlcm5lbCBhbmQgVS1Cb290IChDT05GSUdfT0ZfQ09OVFJPTCkKLWR0YyAtcCAweDEwMDAgc2FuZGJveC1rZXJuZWwuZHRzIC1PIGR0YiAtbyBzYW5kYm94LWtlcm5lbC5kdGIKLWR0YyAtcCAweDEwMDAgc2FuZGJveC11LWJvb3QuZHRzIC1PIGR0YiAtbyBzYW5kYm94LXUtYm9vdC5kdGIKK2Z1bmN0aW9uIGRvX3Rlc3QgeworCWVjaG8gZG8gJHNoYSB0ZXN0CisJIyBDb21waWxlIG91ciBkZXZpY2UgdHJlZSBmaWxlcyBmb3Iga2VybmVsIGFuZCBVLUJvb3QKKwlkdGMgLXAgMHgxMDAwIHNhbmRib3gta2VybmVsLmR0cyAtTyBkdGIgLW8gc2FuZGJveC1rZXJuZWwuZHRiCisJZHRjIC1wIDB4MTAwMCBzYW5kYm94LXUtYm9vdC5kdHMgLU8gZHRiIC1vIHNhbmRib3gtdS1ib290LmR0YgogCi0jIENyZWF0ZSBhIG51bWJlciBrZXJuZWwgaW1hZ2Ugd2l0aCB6ZXJvZXMKLWhlYWQgLWMgNTAwMCAvZGV2L3plcm8gPnRlc3Qta2VybmVsLmJpbgorCSMgQ3JlYXRlIGEgbnVtYmVyIGtlcm5lbCBpbWFnZSB3aXRoIHplcm9lcworCWhlYWQgLWMgNTAwMCAvZGV2L3plcm8gPnRlc3Qta2VybmVsLmJpbgogCi0jIEJ1aWxkIHRoZSBGSVQsIGJ1dCBkb24ndCBzaWduIGFueXRoaW5nIHlldAotZWNobyBCdWlsZCBGSVQgd2l0aCBzaWduZWQgaW1hZ2VzCi0ke21raW1hZ2V9IC1EICIke2R0Y30iIC1mIHNpZ24taW1hZ2VzLml0cyB0ZXN0LmZpdCA+JHt0bXB9CisJIyBCdWlsZCB0aGUgRklULCBidXQgZG9uJ3Qgc2lnbiBhbnl0aGluZyB5ZXQKKwllY2hvIEJ1aWxkIEZJVCB3aXRoIHNpZ25lZCBpbWFnZXMKKwkke21raW1hZ2V9IC1EICIke2R0Y30iIC1mIHNpZ24taW1hZ2VzLSRzaGEuaXRzIHRlc3QuZml0ID4ke3RtcH0KIAotcnVuX3Vib290ICJ1bnNpZ25lZCBzaWduYXR1cmVzOiIgImRldi0iCisJcnVuX3Vib290ICJ1bnNpZ25lZCBzaWduYXR1cmVzOiIgImRldi0iCiAKLSMgU2lnbiBpbWFnZXMgd2l0aCBvdXIgZGV2IGtleXMKLWVjaG8gU2lnbiBpbWFnZXMKLSR7bWtpbWFnZX0gLUQgIiR7ZHRjfSIgLUYgLWsgZGV2LWtleXMgLUsgc2FuZGJveC11LWJvb3QuZHRiIC1yIHRlc3QuZml0ID4ke3RtcH0KKwkjIFNpZ24gaW1hZ2VzIHdpdGggb3VyIGRldiBrZXlzCisJZWNobyBTaWduIGltYWdlcworCSR7bWtpbWFnZX0gLUQgIiR7ZHRjfSIgLUYgLWsgZGV2LWtleXMgLUsgc2FuZGJveC11LWJvb3QuZHRiIFwKKwkJLXIgdGVzdC5maXQgPiR7dG1wfQogCi1ydW5fdWJvb3QgInNpZ25lZCBpbWFnZXMiICJkZXYrIgorCXJ1bl91Ym9vdCAic2lnbmVkIGltYWdlcyIgImRldisiCiAKIAotIyBDcmVhdGUgYSBmcmVzaCAuZHRiIHdpdGhvdXQgdGhlIHB1YmxpYyBrZXlzCi1kdGMgLXAgMHgxMDAwIHNhbmRib3gtdS1ib290LmR0cyAtTyBkdGIgLW8gc2FuZGJveC11LWJvb3QuZHRiCisJIyBDcmVhdGUgYSBmcmVzaCAuZHRiIHdpdGhvdXQgdGhlIHB1YmxpYyBrZXlzCisJZHRjIC1wIDB4MTAwMCBzYW5kYm94LXUtYm9vdC5kdHMgLU8gZHRiIC1vIHNhbmRib3gtdS1ib290LmR0YgogCi1lY2hvIEJ1aWxkIEZJVCB3aXRoIHNpZ25lZCBjb25maWd1cmF0aW9uCi0ke21raW1hZ2V9IC1EICIke2R0Y30iIC1mIHNpZ24tY29uZmlncy5pdHMgdGVzdC5maXQgPiR7dG1wfQorCWVjaG8gQnVpbGQgRklUIHdpdGggc2lnbmVkIGNvbmZpZ3VyYXRpb24KKwkke21raW1hZ2V9IC1EICIke2R0Y30iIC1mIHNpZ24tY29uZmlncy0kc2hhLml0cyB0ZXN0LmZpdCA+JHt0bXB9CiAKLXJ1bl91Ym9vdCAidW5zaWduZWQgY29uZmlnIiAic2hhMSsgT0siCisJcnVuX3Vib290ICJ1bnNpZ25lZCBjb25maWciICRzaGEiKyBPSyIKIAotIyBTaWduIGltYWdlcyB3aXRoIG91ciBkZXYga2V5cwotZWNobyBTaWduIGltYWdlcwotJHtta2ltYWdlfSAtRCAiJHtkdGN9IiAtRiAtayBkZXYta2V5cyAtSyBzYW5kYm94LXUtYm9vdC5kdGIgLXIgdGVzdC5maXQgPiR7dG1wfQorCSMgU2lnbiBpbWFnZXMgd2l0aCBvdXIgZGV2IGtleXMKKwllY2hvIFNpZ24gaW1hZ2VzCisJJHtta2ltYWdlfSAtRCAiJHtkdGN9IiAtRiAtayBkZXYta2V5cyAtSyBzYW5kYm94LXUtYm9vdC5kdGIgXAorCQktciB0ZXN0LmZpdCA+JHt0bXB9CiAKLXJ1bl91Ym9vdCAic2lnbmVkIGNvbmZpZyIgImRldisiCisJcnVuX3Vib290ICJzaWduZWQgY29uZmlnIiAiZGV2KyIKIAotIyBJbmNyZW1lbnQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHNpZ25hdHVyZSwgd2hpY2ggc2hvdWxkIGNhdXNlIGZhaWx1cmUKLXNpZz0kKGZkdGdldCAtdCBieCB0ZXN0LmZpdCAvY29uZmlndXJhdGlvbnMvY29uZkAxL3NpZ25hdHVyZUAxIHZhbHVlKQotbmV3Ynl0ZT0kKHByaW50ZiAleCAkKCgweCR7c2lnOjA6Mn0gKyAxKSkpCi1zaWc9IiR7bmV3Ynl0ZX0gJHtzaWc6Mn0iCi1mZHRwdXQgLXQgYnggdGVzdC5maXQgL2NvbmZpZ3VyYXRpb25zL2NvbmZAMS9zaWduYXR1cmVAMSB2YWx1ZSAke3NpZ30KKwllY2hvIGNoZWNrIHNpZ25lZCBjb25maWcgb24gdGhlIGhvc3QKKwlpZiAhICR7Zml0X2NoZWNrX3NpZ259IC1mIHRlc3QuZml0IC1rIHNhbmRib3gtdS1ib290LmR0YiA+JHt0bXB9OyB0aGVuCisJCWVjaG8KKwkJZWNobyAiVmVyaWZpZWQgYm9vdCBrZXkgY2hlY2sgb24gaG9zdCBmYWlsZWQsIG91dHB1dCBmb2xsb3dzOiIKKwkJY2F0ICR7dG1wfQorCQlmYWxzZQorCWVsc2UKKwkJaWYgISBncmVwIC1xICJkZXYrIiAke3RtcH07IHRoZW4KKwkJCWVjaG8KKwkJCWVjaG8gIlZlcmlmaWVkIGJvb3Qga2V5IGNoZWNrIGZhaWxlZCwgb3V0cHV0IGZvbGxvd3M6IgorCQkJY2F0ICR7dG1wfQorCQkJZmFsc2UKKwkJZWxzZQorCQkJZWNobyAiT0siCisJCWZpCisJZmkKKworCXJ1bl91Ym9vdCAic2lnbmVkIGNvbmZpZyIgImRldisiCisKKwkjIEluY3JlbWVudCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc2lnbmF0dXJlLCB3aGljaCBzaG91bGQgY2F1c2UgZmFpbHVyZQorCXNpZz0kKGZkdGdldCAtdCBieCB0ZXN0LmZpdCAvY29uZmlndXJhdGlvbnMvY29uZkAxL3NpZ25hdHVyZUAxIHZhbHVlKQorCW5ld2J5dGU9JChwcmludGYgJXggJCgoMHgke3NpZzowOjJ9ICsgMSkpKQorCXNpZz0iJHtuZXdieXRlfSAke3NpZzoyfSIKKwlmZHRwdXQgLXQgYnggdGVzdC5maXQgL2NvbmZpZ3VyYXRpb25zL2NvbmZAMS9zaWduYXR1cmVAMSB2YWx1ZSAke3NpZ30KKworCXJ1bl91Ym9vdCAic2lnbmVkIGNvbmZpZyB3aXRoIGJhZCBoYXNoIiAiQmFkIERhdGEgSGFzaCIKK30KIAotcnVuX3Vib290ICJzaWduZWQgY29uZmlnIHdpdGggYmFkIGhhc2giICJCYWQgRGF0YSBIYXNoIgorc2hhPXNoYTEKK2RvX3Rlc3QKK3NoYT1zaGEyNTYKK2RvX3Rlc3QKIAogcG9wZCA+L2Rldi9udWxsCiAKZGlmZiAtLWdpdCBhL3Rvb2xzLy5naXRpZ25vcmUgYi90b29scy8uZ2l0aWdub3JlCmluZGV4IDJhOTBkZmUuLmIxZTk5N2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzLy5naXRpZ25vcmUKKysrIGIvdG9vbHMvLmdpdGlnbm9yZQpAQCAtMSw1ICsxLDcgQEAKIC9ibXBfbG9nbwogL2VudmNyYworL2ZpdF9jaGVja19zaWduCisvZml0X2luZm8KIC9nZW5fZXRoX2FkZHIKIC9pbWcyc3JlYwogL2t3Ym9vdApkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUgYi90b29scy9NYWtlZmlsZQppbmRleCA5MTFhZDQzLi42ZTQzYTAxIDEwMDY0NAotLS0gYS90b29scy9NYWtlZmlsZQorKysgYi90b29scy9NYWtlZmlsZQpAQCAtNDAsNyArNDAsNiBAQAogCiAjIFRPRE86IENPTkZJR19DTURfTElDRU5TRSBkb2VzIG5vdCB3b3JrCiBob3N0cHJvZ3MtJChDT05GSUdfQ01EX0xJQ0VOU0UpICs9IGJpbjJoZWFkZXIkKFNGWCkKLQogaG9zdHByb2dzLSQoQ09ORklHX0xDRF9MT0dPKSArPSBibXBfbG9nbyQoU0ZYKQogaG9zdHByb2dzLSQoQ09ORklHX1ZJREVPX0xPR08pICs9IGJtcF9sb2dvJChTRlgpCiBIT1NUQ0ZMQUdTX2JtcF9sb2dvJChTRlgpLm8gOj0gLXBlZGFudGljCkBAIC02MSwxNyArNjAsMjAgQEAKIG1rZW52aW1hZ2UkKFNGWCktb2JqcyA6PSBjcmMzMi5vIG1rZW52aW1hZ2UubyBvc19zdXBwb3J0Lm8KIAogaG9zdHByb2dzLXkgKz0gZHVtcGltYWdlJChTRlgpIG1raW1hZ2UkKFNGWCkKK2hvc3Rwcm9ncy0kKENPTkZJR19GSVRfU0lHTkFUVVJFKSArPSBmaXRfaW5mbyQoU0ZYKSBmaXRfY2hlY2tfc2lnbiQoU0ZYKQogCiBGSVRfU0lHX09CSlMtJChDT05GSUdfRklUX1NJR05BVFVSRSkgOj0gaW1hZ2Utc2lnLm8KICMgRmxhdHRlbmVkIGRldmljZSB0cmVlIG9iamVjdHMKIExJQkZEVF9PQkpTIDo9IGZkdC5vIGZkdF9yby5vIGZkdF9ydy5vIGZkdF9zdHJlcnJvci5vIGZkdF93aXAubwotUlNBX09CSlMtJChDT05GSUdfRklUX1NJR05BVFVSRSkgOj0gcnNhLXNpZ24ubworUlNBX09CSlMtJChDT05GSUdfRklUX1NJR05BVFVSRSkgOj0gcnNhLXNpZ24ubyByc2EtdmVyaWZ5Lm8gcnNhLWNoZWNrc3VtLm8KIAogIyBjb21tb24gb2JqcyBmb3IgZHVtcGltYWdlIGFuZCBta2ltYWdlCiBkdW1waW1hZ2UtbWtpbWFnZS1vYmpzIDo9IGFpc2ltYWdlLm8gXAogCQkJJChGSVRfU0lHX09CSlMteSkgXAogCQkJY3JjMzIubyBcCiAJCQlkZWZhdWx0X2ltYWdlLm8gXAorCQkJZmR0ZGVjLm8gXAorCQkJZml0X2NvbW1vbi5vIFwKIAkJCWZpdF9pbWFnZS5vIFwKIAkJCWdwaW1hZ2UubyBcCiAJCQlncGltYWdlLWNvbW1vbi5vIFwKQEAgLTg3LDEyICs4OSwxNSBAQAogCQkJb3Nfc3VwcG9ydC5vIFwKIAkJCXBibGltYWdlLm8gXAogCQkJc2hhMS5vIFwKKwkJCXNoYTI1Ni5vIFwKIAkJCXVibGltYWdlLm8gXAogCQkJJChMSUJGRFRfT0JKUykgXAogCQkJJChSU0FfT0JKUy15KQogCiBkdW1waW1hZ2UkKFNGWCktb2JqcyA6PSAkKGR1bXBpbWFnZS1ta2ltYWdlLW9ianMpIGR1bXBpbWFnZS5vCiBta2ltYWdlJChTRlgpLW9ianMgICA6PSAkKGR1bXBpbWFnZS1ta2ltYWdlLW9ianMpIG1raW1hZ2UubworZml0X2luZm8kKFNGWCktb2JqcyAgIDo9ICQoZHVtcGltYWdlLW1raW1hZ2Utb2JqcykgZml0X2luZm8ubworZml0X2NoZWNrX3NpZ24kKFNGWCktb2JqcyAgIDo9ICQoZHVtcGltYWdlLW1raW1hZ2Utb2JqcykgZml0X2NoZWNrX3NpZ24ubwogCiAjIFRPRE8oc2pnQGNocm9taXVtLm9yZyk6IElzIHRoaXMgY29ycmVjdCBvbiBNYWMgT1M/CiAKQEAgLTEwMCw2ICsxMDUsOCBAQAogaWZuZXEgKCQoQ09ORklHX01YMjMpJChDT05GSUdfTVgyOCksKQogSE9TVExPQURMSUJFU19kdW1waW1hZ2UkKFNGWCkgOj0gLWxzc2wgLWxjcnlwdG8KIEhPU1RMT0FETElCRVNfbWtpbWFnZSQoU0ZYKSA6PSAtbHNzbCAtbGNyeXB0bworSE9TVExPQURMSUJFU19maXRfaW5mbyQoU0ZYKSA6PSAtbHNzbCAtbGNyeXB0bworSE9TVExPQURMSUJFU19maXRfY2hlY2tfc2lnbiQoU0ZYKSA6PSAtbHNzbCAtbGNyeXB0bwogIyBBZGQgQ09ORklHX01YUyBpbnRvIGhvc3QgQ0ZMQUdTLCBzbyB3ZSBjYW4gY2hlY2sgd2hldGhlciBvciBub3QgcmVnaXN0ZXIKICMgdGhlIG14c2ltYWdlIHN1cHBvcnQgd2l0aGluIHRvb2xzL214c2ltYWdlLmMgLgogSE9TVENGTEFHU19teHNpbWFnZS5vICs9IC1EQ09ORklHX01YUwpAQCAtMTA4LDYgKzExNSw4IEBACiBpZmRlZiBDT05GSUdfRklUX1NJR05BVFVSRQogSE9TVExPQURMSUJFU19kdW1waW1hZ2UkKFNGWCkgOj0gLWxzc2wgLWxjcnlwdG8KIEhPU1RMT0FETElCRVNfbWtpbWFnZSQoU0ZYKSA6PSAtbHNzbCAtbGNyeXB0bworSE9TVExPQURMSUJFU19maXRfaW5mbyQoU0ZYKSA6PSAtbHNzbCAtbGNyeXB0bworSE9TVExPQURMSUJFU19maXRfY2hlY2tfc2lnbiQoU0ZYKSA6PSAtbHNzbCAtbGNyeXB0bwogCiAjIFRoaXMgYWZmZWN0cyBpbmNsdWRlL2ltYWdlLmgsIGJ1dCBpbmNsdWRpbmcgdGhlIGJvYXJkIGNvbmZpZyBmaWxlCiAjIGlzIHRyaWNreSwgc28gbWFudWFsbHkgZGVmaW5lIHRoaXMgb3B0aW9ucyBoZXJlLgpAQCAtMTM5LDYgKzE0OCw3IEBACiBIT1NUQ0ZMQUdTX2NyYzMyLm8gOj0gLXBlZGFudGljCiBIT1NUQ0ZMQUdTX21kNS5vIDo9IC1wZWRhbnRpYwogSE9TVENGTEFHU19zaGExLm8gOj0gLXBlZGFudGljCitIT1NUQ0ZMQUdTX3NoYTI1Ni5vIDo9IC1wZWRhbnRpYwogCiAjIERvbid0IGJ1aWxkIGJ5IGRlZmF1bHQKICNob3N0cHJvZ3MtJChDT05GSUdfUFBDKSArPSBtcGM4NnhfY2xrJChTRlgpCmRpZmYgLS1naXQgYS90b29scy9idWlsZG1hbi9idWlsZG1hbi5weSBiL3Rvb2xzL2J1aWxkbWFuL2J1aWxkbWFuLnB5CmluZGV4IDg4MjJlZmUuLjczYTU0ODMgMTAwNzU1Ci0tLSBhL3Rvb2xzL2J1aWxkbWFuL2J1aWxkbWFuLnB5CisrKyBiL3Rvb2xzL2J1aWxkbWFuL2J1aWxkbWFuLnB5CkBAIC0xMDEsNiArMTAxLDkgQEAKICAgICAgICBkZWZhdWx0PU5vbmUsIGhlbHA9J051bWJlciBvZiBidWlsZGVyIHRocmVhZHMgdG8gdXNlJykKIHBhcnNlci5hZGRfb3B0aW9uKCctdScsICctLXNob3dfdW5rbm93bicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0nU2hvdyBib2FyZHMgd2l0aCB1bmtub3duIGJ1aWxkIHJlc3VsdCcpCitwYXJzZXIuYWRkX29wdGlvbignLW8nLCAnLS1vdXRwdXQtZGlyJywgdHlwZT0nc3RyaW5nJywKKyAgICAgICBkZXN0PSdvdXRwdXRfZGlyJywgZGVmYXVsdD0nLi4nLAorICAgICAgIGhlbHA9J0RpcmVjdG9yeSB3aGVyZSBhbGwgYnVpbGRzIGhhcHBlbiBhbmQgYnVpbGRtYW4gaGFzIGl0cyB3b3Jrc3BhY2UgKGRlZmF1bHQgaXMgLi4vKScpCiAKIHBhcnNlci51c2FnZSA9ICIiImJ1aWxkbWFuIC1iIDxicmFuY2g+IFtvcHRpb25zXQogCmRpZmYgLS1naXQgYS90b29scy9idWlsZG1hbi9jb250cm9sLnB5IGIvdG9vbHMvYnVpbGRtYW4vY29udHJvbC5weQppbmRleCA4ZTZhMDhmLi5kMmY0MTAyIDEwMDY0NAotLS0gYS90b29scy9idWlsZG1hbi9jb250cm9sLnB5CisrKyBiL3Rvb2xzL2J1aWxkbWFuL2NvbnRyb2wucHkKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgICAgICBvcHRpb25zLnN0ZXAgPSBsZW4oc2VyaWVzLmNvbW1pdHMpIC0gMQogCiAgICAgIyBDcmVhdGUgYSBuZXcgYnVpbGRlciB3aXRoIHRoZSBzZWxlY3RlZCBvcHRpb25zCi0gICAgb3V0cHV0X2RpciA9IG9zLnBhdGguam9pbignLi4nLCBvcHRpb25zLmJyYW5jaCkKKyAgICBvdXRwdXRfZGlyID0gb3MucGF0aC5qb2luKG9wdGlvbnMub3V0cHV0X2Rpciwgb3B0aW9ucy5icmFuY2gpCiAgICAgYnVpbGRlciA9IEJ1aWxkZXIodG9vbGNoYWlucywgb3V0cHV0X2Rpciwgb3B0aW9ucy5naXRfZGlyLAogICAgICAgICAgICAgb3B0aW9ucy50aHJlYWRzLCBvcHRpb25zLmpvYnMsIGNoZWNrb3V0PVRydWUsCiAgICAgICAgICAgICBzaG93X3Vua25vd249b3B0aW9ucy5zaG93X3Vua25vd24sIHN0ZXA9b3B0aW9ucy5zdGVwKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZW52L01ha2VmaWxlIGIvdG9vbHMvZW52L01ha2VmaWxlCmluZGV4IGZjYjc1MmQuLmY1MzY4YmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Vudi9NYWtlZmlsZQorKysgYi90b29scy9lbnYvTWFrZWZpbGUKQEAgLTI1LDcgKzI1LDcgQEAKIAogZndfcHJpbnRlbnZfdW5zdHJpcHBlZC1vYmpzIDo9IGZ3X2Vudi5vIGZ3X2Vudl9tYWluLm8gXAogCWNyYzMyLm8gY3R5cGUubyBsaW51eF9zdHJpbmcubyBcCi0JZW52X2F0dHIubyBlbnZfZmxhZ3MubworCWVudl9hdHRyLm8gZW52X2ZsYWdzLm8gYWVzLm8KIAogcXVpZXRfY21kX3N0cmlwID0gU1RSSVAgICAkQAogICAgICAgY21kX3N0cmlwID0gJChTVFJJUCkgLW8gJEAgJDwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Vudi9md19lbnYuYyBiL3Rvb2xzL2Vudi9md19lbnYuYwppbmRleCBmNWNkNTIxLi4zMGQ1YjAzIDEwMDY0NAotLS0gYS90b29scy9lbnYvZndfZW52LmMKKysrIGIvdG9vbHMvZW52L2Z3X2Vudi5jCkBAIC0zMSw2ICszMSwxMCBAQAogCiAjaW5jbHVkZSAiZndfZW52LmgiCiAKKyNpbmNsdWRlIDxhZXMuaD4KKworI2RlZmluZSBESVZfUk9VTkRfVVAobiwgZCkJKCgobikgKyAoZCkgLSAxKSAvIChkKSkKKwogI2RlZmluZSBXSElURVNQQUNFKGMpICgoYyA9PSAnXHQnKSB8fCAoYyA9PSAnICcpKQogCiAjZGVmaW5lIG1pbih4LCB5KSAoewkJCQlcCkBAIC05OCw2ICsxMDIsMTEgQEAKIAkuZmxhZ19zY2hlbWUgPSBGTEFHX05PTkUsCiB9OwogCisvKiBJcyBBRVMgZW5jcnlwdGlvbiB1c2VkPyAqLworc3RhdGljIGludCBhZXNfZmxhZzsKK3N0YXRpYyB1aW50OF90IGFlc19rZXlbQUVTX0tFWV9MRU5HVEhdID0geyAwIH07CitzdGF0aWMgaW50IGVudl9hZXNfY2JjX2NyeXB0KGNoYXIgKmRhdGEsIGNvbnN0IGludCBlbmMpOworCiBzdGF0aWMgaW50IEhhdmVSZWR1bmRFbnYgPSAwOwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBhY3RpdmVfZmxhZyA9IDE7CkBAIC0xMjAsNiArMTI5LDEwIEBACiAKIAlpZiAoSGF2ZVJlZHVuZEVudikKIAkJcmMgLT0gc2l6ZW9mIChjaGFyKTsKKworCWlmIChhZXNfZmxhZykKKwkJcmMgJj0gfihBRVNfS0VZX0xFTkdUSCAtIDEpOworCiAJcmV0dXJuIHJjOwogfQogCkBAIC0xOTEsNiArMjA0LDM2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQgcGFyc2VfYWVzX2tleShjaGFyICprZXkpCit7CisJY2hhciB0bXBbNV0gPSB7ICcwJywgJ3gnLCAwLCAwLCAwIH07CisJdW5zaWduZWQgbG9uZyB1bDsKKwlpbnQgaTsKKworCWlmIChzdHJubGVuKGtleSwgNjQpICE9IDMyKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIiMjIEVycm9yOiAnLWEnIG9wdGlvbiByZXF1aXJlcyAxNi1ieXRlIEFFUyBrZXlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJdG1wWzJdID0ga2V5WzBdOworCQl0bXBbM10gPSBrZXlbMV07CisJCWVycm5vID0gMDsKKwkJdWwgPSBzdHJ0b3VsKHRtcCwgTlVMTCwgMTYpOworCQlpZiAoZXJybm8pIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSIjIyBFcnJvcjogJy1hJyBvcHRpb24gcmVxdWlyZXMgdmFsaWQgQUVTIGtleVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYWVzX2tleVtpXSA9IHVsICYgMHhmZjsKKwkJa2V5ICs9IDI7CisJfQorCWFlc19mbGFnID0gMTsKKworCXJldHVybiAwOworfQorCiAvKgogICogUHJpbnQgdGhlIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvbmUsIG9yIG1vcmUsIG9yIGFsbAogICogZW52aXJvbm1lbnQgdmFyaWFibGVzCkBAIC0yMDEsNiArMjQ0LDE5IEBACiAJaW50IGksIG5fZmxhZzsKIAlpbnQgcmMgPSAwOwogCisJaWYgKGFyZ2MgPj0gMiAmJiBzdHJjbXAoYXJndlsxXSwgIi1hIikgPT0gMCkgeworCQlpZiAoYXJnYyA8IDMpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSIjIyBFcnJvcjogJy1hJyBvcHRpb24gcmVxdWlyZXMgQUVTIGtleVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcmMgPSBwYXJzZV9hZXNfa2V5KGFyZ3ZbMl0pOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJCWFyZ3YgKz0gMjsKKwkJYXJnYyAtPSAyOworCX0KKwogCWlmIChmd19lbnZfb3BlbigpKQogCQlyZXR1cm4gLTE7CiAKQEAgLTI2Niw2ICszMjIsMTYgQEAKIAogaW50IGZ3X2Vudl9jbG9zZSh2b2lkKQogeworCWludCByZXQ7CisJaWYgKGFlc19mbGFnKSB7CisJCXJldCA9IGVudl9hZXNfY2JjX2NyeXB0KGVudmlyb25tZW50LmRhdGEsIDEpOworCQlpZiAocmV0KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiRXJyb3I6IGNhbid0IGVuY3J5cHQgZW52IGZvciBmbGFzaFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCiAJLyoKIAkgKiBVcGRhdGUgQ1JDCiAJICovCkBAIC00MTMsNyArNDc5LDcgQEAKICAqLwogaW50IGZ3X3NldGVudihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCWludCBpOworCWludCBpLCByYzsKIAlzaXplX3QgbGVuOwogCWNoYXIgKm5hbWU7CiAJY2hhciAqdmFsdWUgPSBOVUxMOwpAQCAtNDIzLDYgKzQ4OSwyNCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCisJaWYgKHN0cmNtcChhcmd2WzFdLCAiLWEiKSA9PSAwKSB7CisJCWlmIChhcmdjIDwgMykgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIiMjIEVycm9yOiAnLWEnIG9wdGlvbiByZXF1aXJlcyBBRVMga2V5XG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlyYyA9IHBhcnNlX2Flc19rZXkoYXJndlsyXSk7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwkJYXJndiArPSAyOworCQlhcmdjIC09IDI7CisJfQorCisJaWYgKGFyZ2MgPCAyKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCiAJaWYgKGZ3X2Vudl9vcGVuKCkpIHsKIAkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogZW52aXJvbm1lbnQgbm90IGluaXRpYWxpemVkXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtOTAwLDYgKzk4NCwyOCBAQAogCXJldHVybiByYzsKIH0KIAorLyogRW5jcnlwdCBvciBkZWNyeXB0IHRoZSBlbnZpcm9ubWVudCBiZWZvcmUgd3JpdGluZyBvciByZWFkaW5nIGl0LiAqLworc3RhdGljIGludCBlbnZfYWVzX2NiY19jcnlwdChjaGFyICpwYXlsb2FkLCBjb25zdCBpbnQgZW5jKQoreworCXVpbnQ4X3QgKmRhdGEgPSAodWludDhfdCAqKXBheWxvYWQ7CisJY29uc3QgaW50IGxlbiA9IGdldGVudnNpemUoKTsKKwl1aW50OF90IGtleV9leHBbQUVTX0VYUEFORF9LRVlfTEVOR1RIXTsKKwl1aW50MzJfdCBhZXNfYmxvY2tzOworCisJLyogRmlyc3Qgd2UgZXhwYW5kIHRoZSBrZXkuICovCisJYWVzX2V4cGFuZF9rZXkoYWVzX2tleSwga2V5X2V4cCk7CisKKwkvKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBBRVMgYmxvY2tzIHRvIGVuY3J5cHQuICovCisJYWVzX2Jsb2NrcyA9IERJVl9ST1VORF9VUChsZW4sIEFFU19LRVlfTEVOR1RIKTsKKworCWlmIChlbmMpCisJCWFlc19jYmNfZW5jcnlwdF9ibG9ja3Moa2V5X2V4cCwgZGF0YSwgZGF0YSwgYWVzX2Jsb2Nrcyk7CisJZWxzZQorCQlhZXNfY2JjX2RlY3J5cHRfYmxvY2tzKGtleV9leHAsIGRhdGEsIGRhdGEsIGFlc19ibG9ja3MpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZmxhc2hfd3JpdGUgKGludCBmZF9jdXJyZW50LCBpbnQgZmRfdGFyZ2V0LCBpbnQgZGV2X3RhcmdldCkKIHsKIAlpbnQgcmM7CkBAIC05MjMsNiArMTAyOSw3IEBACiAJZnByaW50ZihzdGRlcnIsICJXcml0aW5nIG5ldyBlbnZpcm9ubWVudCBhdCAweCVseCBvbiAlc1xuIiwKIAkJREVWT0ZGU0VUIChkZXZfdGFyZ2V0KSwgREVWTkFNRSAoZGV2X3RhcmdldCkpOwogI2VuZGlmCisKIAlyYyA9IGZsYXNoX3dyaXRlX2J1ZihkZXZfdGFyZ2V0LCBmZF90YXJnZXQsIGVudmlyb25tZW50LmltYWdlLAogCQkJICAgICAgQ1VSX0VOVlNJWkUsIERFVk9GRlNFVChkZXZfdGFyZ2V0KSwKIAkJCSAgICAgIERFVlRZUEUoZGV2X3RhcmdldCkpOwpAQCAtOTgxLDggKzEwODgsMTAgQEAKIAogCXJjID0gZmxhc2hfcmVhZF9idWYoZGV2X2N1cnJlbnQsIGZkLCBlbnZpcm9ubWVudC5pbWFnZSwgQ1VSX0VOVlNJWkUsCiAJCQkgICAgIERFVk9GRlNFVCAoZGV2X2N1cnJlbnQpLCBtdGRpbmZvLnR5cGUpOworCWlmIChyYyAhPSBDVVJfRU5WU0laRSkKKwkJcmV0dXJuIC0xOwogCi0JcmV0dXJuIChyYyAhPSBDVVJfRU5WU0laRSkgPyAtMSA6IDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZmxhc2hfaW8gKGludCBtb2RlKQpAQCAtMTA3NSw2ICsxMTg0LDggQEAKIAl1bnNpZ25lZCBjaGFyIGZsYWcxOwogCXZvaWQgKmFkZHIxOwogCisJaW50IHJldDsKKwogCXN0cnVjdCBlbnZfaW1hZ2Vfc2luZ2xlICpzaW5nbGU7CiAJc3RydWN0IGVudl9pbWFnZV9yZWR1bmRhbnQgKnJlZHVuZGFudDsKIApAQCAtMTEwOSw2ICsxMjIwLDEzIEBACiAJCXJldHVybiAtMTsKIAogCWNyYzAgPSBjcmMzMiAoMCwgKHVpbnQ4X3QgKikgZW52aXJvbm1lbnQuZGF0YSwgRU5WX1NJWkUpOworCisJaWYgKGFlc19mbGFnKSB7CisJCXJldCA9IGVudl9hZXNfY2JjX2NyeXB0KGVudmlyb25tZW50LmRhdGEsIDApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAljcmMwX29rID0gKGNyYzAgPT0gKmVudmlyb25tZW50LmNyYyk7CiAJaWYgKCFIYXZlUmVkdW5kRW52KSB7CiAJCWlmICghY3JjMF9vaykgewpAQCAtMTE1OSw2ICsxMjc3LDEzIEBACiAJCX0KIAogCQljcmMxID0gY3JjMzIgKDAsICh1aW50OF90ICopIHJlZHVuZGFudC0+ZGF0YSwgRU5WX1NJWkUpOworCisJCWlmIChhZXNfZmxhZykgeworCQkJcmV0ID0gZW52X2Flc19jYmNfY3J5cHQocmVkdW5kYW50LT5kYXRhLCAwKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCiAJCWNyYzFfb2sgPSAoY3JjMSA9PSByZWR1bmRhbnQtPmNyYyk7CiAJCWZsYWcxID0gcmVkdW5kYW50LT5mbGFnczsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvZW52L2Z3X2Vudl9tYWluLmMgYi90b29scy9lbnYvZndfZW52X21haW4uYwppbmRleCAyYjg1ZDc4Li5jZTUwZDU4IDEwMDY0NAotLS0gYS90b29scy9lbnYvZndfZW52X21haW4uYworKysgYi90b29scy9lbnYvZndfZW52X21haW4uYwpAQCAtOSwxOCArOSwyMiBAQAogICogQ29tbWFuZCBsaW5lIHVzZXIgaW50ZXJmYWNlIHRvIGZpcm13YXJlICg9VS1Cb290KSBlbnZpcm9ubWVudC4KICAqCiAgKiBJbXBsZW1lbnRzOgotICoJZndfcHJpbnRlbnYgW1sgLW4gbmFtZSBdIHwgWyBuYW1lIC4uLiBdXQorICoJZndfcHJpbnRlbnYgWyAtYSBrZXkgXSBbWyAtbiBuYW1lIF0gfCBbIG5hbWUgLi4uIF1dCiAgKiAgICAgICAgICAgICAgLSBwcmludHMgdGhlIHZhbHVlIG9mIGEgc2luZ2xlIGVudmlyb25tZW50IHZhcmlhYmxlCiAgKiAgICAgICAgICAgICAgICAibmFtZSIsIHRoZSBgYG5hbWU9dmFsdWUnJyBwYWlycyBvZiBvbmUgb3IgbW9yZQogICogICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzICJuYW1lIiwgb3IgdGhlIHdob2xlCiAgKiAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBpZiBubyBuYW1lcyBhcmUgc3BlY2lmaWVkLgotICoJZndfc2V0ZW52IG5hbWUgWyB2YWx1ZSAuLi4gXQorICoJZndfc2V0ZW52IFsgLWEga2V5IF0gbmFtZSBbIHZhbHVlIC4uLiBdCiAgKgkJLSBJZiBhIG5hbWUgd2l0aG91dCBhbnkgdmFsdWVzIGlzIGdpdmVuLCB0aGUgdmFyaWFibGUKICAqCQkgIHdpdGggdGhpcyBuYW1lIGlzIGRlbGV0ZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQ7CiAgKgkJICBvdGhlcndpc2UsIGFsbCAidmFsdWUiIGFyZ3VtZW50cyBhcmUgY29uY2F0ZW5hdGVkLAogICoJCSAgc2VwYXJhdGVkIGJ5IHNpbmdsZSBibGFuayBjaGFyYWN0ZXJzLCBhbmQgdGhlCiAgKgkJICByZXN1bHRpbmcgc3RyaW5nIGlzIGFzc2lnbmVkIHRvIHRoZSBlbnZpcm9ubWVudAogICoJCSAgdmFyaWFibGUgIm5hbWUiCisgKgorICogSWYgJy1hIGtleScgaXMgc3BlY2lmaWVkLCB0aGUgZW52IGJsb2NrIGlzIGVuY3J5cHRlZCB3aXRoIEFFUyAxMjggQ0JDLgorICogVGhlICdrZXknIGFyZ3VtZW50IGlzIGluIHRoZSBmb3JtYXQgb2YgMzIgaGV4YWRlY2ltYWwgbnVtYmVycyAoMTYgYnl0ZXMKKyAqIG9mIEFFUyBrZXkpLCBlZy4gJy1hIGFhYmJjY2RkZWVmZjAwMTEyMjMzNDQ1NTY2Nzc4ODk5Jy4KICAqLwogCiAjaW5jbHVkZSA8ZmNudGwuaD4KQEAgLTQ2LDggKzUwLDggQEAKIAogCWZwcmludGYoc3RkZXJyLCAiZndfcHJpbnRlbnYvZndfc2V0ZW52LCAiCiAJCSJhIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdG8gVS1Cb290IGVudmlyb25tZW50XG5cbiIKLQkJInVzYWdlOlx0ZndfcHJpbnRlbnYgWy1uXSBbdmFyaWFibGUgbmFtZV1cbiIKLQkJIlx0Zndfc2V0ZW52IFt2YXJpYWJsZSBuYW1lXSBbdmFyaWFibGUgdmFsdWVdXG4iCisJCSJ1c2FnZTpcdGZ3X3ByaW50ZW52IFstYSBrZXldIFstbl0gW3ZhcmlhYmxlIG5hbWVdXG4iCisJCSJcdGZ3X3NldGVudiBbLWEga2V5XSBbdmFyaWFibGUgbmFtZV0gW3ZhcmlhYmxlIHZhbHVlXVxuIgogCQkiXHRmd19zZXRlbnYgLXMgWyBmaWxlIF1cbiIKIAkJIlx0Zndfc2V0ZW52IC1zIC0gPCBbIGZpbGUgXVxuXG4iCiAJCSJUaGUgZmlsZSBwYXNzZWQgYXMgYXJndW1lbnQgY29udGFpbnMgb25seSBwYWlycyAiCkBAIC05NCw5ICs5OCwxMiBAQAogCQljbWRuYW1lID0gcCArIDE7CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJuczpoIiwKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImE6bnM6aCIsCiAJCWxvbmdfb3B0aW9ucywgTlVMTCkpICE9IEVPRikgewogCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYSc6CisJCQkvKiBBRVMga2V5LCBoYW5kbGVkIGxhdGVyICovCisJCQlicmVhazsKIAkJY2FzZSAnbic6CiAJCQkvKiBoYW5kbGVkIGluIGZ3X3ByaW50ZW52ICovCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZkdF9ob3N0LmggYi90b29scy9mZHRfaG9zdC5oCmluZGV4IGMyYjIzYzYuLjEzNGQ5NjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ZkdF9ob3N0LmgKKysrIGIvdG9vbHMvZmR0X2hvc3QuaApAQCAtMTEsNCArMTEsNiBAQAogI2luY2x1ZGUgIi4uL2luY2x1ZGUvbGliZmR0LmgiCiAjaW5jbHVkZSAiLi4vaW5jbHVkZS9mZHRfc3VwcG9ydC5oIgogCitpbnQgZml0X2NoZWNrX3NpZ24oY29uc3Qgdm9pZCAqd29ya2luZ19mZHQsIGNvbnN0IHZvaWQgKmtleSk7CisKICNlbmRpZiAvKiBfX0ZEVF9IT1NUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvZmR0ZGVjLmMgYi90b29scy9mZHRkZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWMyMjU2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZmR0ZGVjLmMKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgIi4uL2xpYi9mZHRkZWMuYyIKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpdF9jaGVja19zaWduLmMgYi90b29scy9maXRfY2hlY2tfc2lnbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZDkzNDAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9maXRfY2hlY2tfc2lnbi5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMTQKKyAqIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcKKyAqIEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgorICoKKyAqIEJhc2VkIG9uOgorICogKEMpIENvcHlyaWdodCAyMDA4IFNlbWloYWxmCisgKgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKKyAqIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcKKyAqIFdvbGZnYW5nIERlbmssIHdkQGRlbnguZGUKKyAqCisgKiBVcGRhdGVkLWJ5OiBQcmFmdWxsYSBXYWRhc2thciA8cHJhZnVsbGFAbWFydmVsbC5jb20+CisgKgkJRklUIGltYWdlIHNwZWNpZmljIGNvZGUgYWJzdHJhY3RlZCBmcm9tIG1raW1hZ2UuYworICoJCXNvbWUgZnVuY3Rpb25zIGFkZGVkIHRvIGFkZHJlc3MgYWJzdHJhY3Rpb24KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKworICovCisKKyNpbmNsdWRlICJta2ltYWdlLmgiCisjaW5jbHVkZSAiZml0X2NvbW1vbi5oIgorI2luY2x1ZGUgPGltYWdlLmg+CisjaW5jbHVkZSA8dS1ib290L2NyYy5oPgorCit2b2lkIHVzYWdlKGNoYXIgKmNtZG5hbWUpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgLWYgZml0IGZpbGUgLWsga2V5IGZpbGVcbiIKKwkJCSAiICAgICAgICAgIC1mID09PiBzZXQgZml0IGZpbGUgd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQnXG4iCisJCQkgIiAgICAgICAgICAtayA9PT4gc2V0IGtleSBmaWxlIHdoaWNoIGNvbnRhaW5zIHRoZSBrZXknXG4iLAorCQljbWRuYW1lKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgZmZkID0gLTE7CisJaW50IGtmZCA9IC0xOworCXN0cnVjdCBzdGF0IGZzYnVmOworCXN0cnVjdCBzdGF0IGtzYnVmOworCXZvaWQgKmZpdF9ibG9iOworCWNoYXIgKmZkdGZpbGUgPSBOVUxMOworCWNoYXIgKmtleWZpbGUgPSBOVUxMOworCWNoYXIgY21kbmFtZVs1MF07CisJaW50IHJldDsKKwl2b2lkICprZXlfYmxvYjsKKwlpbnQgYzsKKworCXN0cmNweShjbWRuYW1lLCAqYXJndik7CisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJmOms6IikpICE9IC0xKQorCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnZic6CisJCQlmZHRmaWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ2snOgorCQkJa2V5ZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UoY21kbmFtZSk7CisJCQlicmVhazsKKwl9CisKKwlmZmQgPSBtbWFwX2ZkdChjbWRuYW1lLCBmZHRmaWxlLCAmZml0X2Jsb2IsICZmc2J1ZiwgMCk7CisJaWYgKGZmZCA8IDApCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJa2ZkID0gbW1hcF9mZHQoY21kbmFtZSwga2V5ZmlsZSwgJmtleV9ibG9iLCAma3NidWYsIDApOworCWlmIChmZmQgPCAwKQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJaW1hZ2Vfc2V0X2hvc3RfYmxvYihrZXlfYmxvYik7CisJcmV0ID0gZml0X2NoZWNrX3NpZ24oZml0X2Jsb2IsIGtleV9ibG9iKTsKKworCWlmIChyZXQpCisJCXJldCA9IEVYSVRfU1VDQ0VTUzsKKwllbHNlCisJCXJldCA9IEVYSVRfRkFJTFVSRTsKKworCSh2b2lkKSBtdW5tYXAoKHZvaWQgKilmaXRfYmxvYiwgZnNidWYuc3Rfc2l6ZSk7CisJKHZvaWQpIG11bm1hcCgodm9pZCAqKWtleV9ibG9iLCBrc2J1Zi5zdF9zaXplKTsKKworCWNsb3NlKGZmZCk7CisJY2xvc2Uoa2ZkKTsKKwlleGl0KHJldCk7Cit9CmRpZmYgLS1naXQgYS90b29scy9maXRfY29tbW9uLmMgYi90b29scy9maXRfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUxNzY3YgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2ZpdF9jb21tb24uYwpAQCAtMCwwICsxLDg2IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDE0CisgKiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nCisgKiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDggU2VtaWhhbGYKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorICogREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZworICogV29sZmdhbmcgRGVuaywgd2RAZGVueC5kZQorICoKKyAqIFVwZGF0ZWQtYnk6IFByYWZ1bGxhIFdhZGFza2FyIDxwcmFmdWxsYUBtYXJ2ZWxsLmNvbT4KKyAqCQlGSVQgaW1hZ2Ugc3BlY2lmaWMgY29kZSBhYnN0cmFjdGVkIGZyb20gbWtpbWFnZS5jCisgKgkJc29tZSBmdW5jdGlvbnMgYWRkZWQgdG8gYWRkcmVzcyBhYnN0cmFjdGlvbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCisgKi8KKworI2luY2x1ZGUgImltYWdldG9vbC5oIgorI2luY2x1ZGUgIm1raW1hZ2UuaCIKKyNpbmNsdWRlICJmaXRfY29tbW9uLmgiCisjaW5jbHVkZSA8aW1hZ2UuaD4KKyNpbmNsdWRlIDx1LWJvb3QvY3JjLmg+CisKK2ludCBmaXRfdmVyaWZ5X2hlYWRlcih1bnNpZ25lZCBjaGFyICpwdHIsIGludCBpbWFnZV9zaXplLAorCQkJc3RydWN0IGltYWdlX3Rvb2xfcGFyYW1zICpwYXJhbXMpCit7CisJcmV0dXJuIGZkdF9jaGVja19oZWFkZXIocHRyKTsKK30KKworaW50IGZpdF9jaGVja19pbWFnZV90eXBlcyh1aW50OF90IHR5cGUpCit7CisJaWYgKHR5cGUgPT0gSUhfVFlQRV9GTEFURFQpCisJCXJldHVybiBFWElUX1NVQ0NFU1M7CisJZWxzZQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworfQorCitpbnQgbW1hcF9mZHQoY2hhciAqY21kbmFtZSwgY29uc3QgY2hhciAqZm5hbWUsIHZvaWQgKipibG9icCwKKwkJc3RydWN0IHN0YXQgKnNidWYsIGludCB1c2V1bmxpbmspCit7CisJdm9pZCAqcHRyOworCWludCBmZDsKKworCS8qIExvYWQgRklUIGJsb2IgaW50byBtZW1vcnkgKHdlIG5lZWQgdG8gd3JpdGUgaGFzaGVzL3NpZ25hdHVyZXMpICovCisJZmQgPSBvcGVuKGZuYW1lLCBPX1JEV1IgfCBPX0JJTkFSWSk7CisKKwlpZiAoZmQgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IENhbid0IG9wZW4gJXM6ICVzXG4iLAorCQkJY21kbmFtZSwgZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWlmICh1c2V1bmxpbmspCisJCQl1bmxpbmsoZm5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGZzdGF0KGZkLCBzYnVmKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogQ2FuJ3Qgc3RhdCAlczogJXNcbiIsCisJCQljbWRuYW1lLCBmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJaWYgKHVzZXVubGluaykKKwkJCXVubGluayhmbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwllcnJubyA9IDA7CisJcHRyID0gbW1hcCgwLCBzYnVmLT5zdF9zaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOworCWlmICgocHRyID09IE1BUF9GQUlMRUQpIHx8IChlcnJubyAhPSAwKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBDYW4ndCByZWFkICVzOiAlc1xuIiwKKwkJCWNtZG5hbWUsIGZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlpZiAodXNldW5saW5rKQorCQkJdW5saW5rKGZuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGNoZWNrIGlmIHB0ciBoYXMgYSB2YWxpZCBibG9iICovCisJaWYgKGZkdF9jaGVja19oZWFkZXIocHRyKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBJbnZhbGlkIEZJVCBibG9iXG4iLCBjbWRuYW1lKTsKKwkJaWYgKHVzZXVubGluaykKKwkJCXVubGluayhmbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkqYmxvYnAgPSBwdHI7CisJcmV0dXJuIGZkOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvZml0X2NvbW1vbi5oIGIvdG9vbHMvZml0X2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZjQ0MDQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9maXRfY29tbW9uLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxNAorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKworICovCisKKyNpZm5kZWYgX0ZJVF9DT01NT05fSF8KKyNkZWZpbmUgX0ZJVF9DT01NT05fSF8KKworI2luY2x1ZGUgImltYWdldG9vbC5oIgorI2luY2x1ZGUgIm1raW1hZ2UuaCIKKyNpbmNsdWRlIDxpbWFnZS5oPgorCitpbnQgZml0X3ZlcmlmeV9oZWFkZXIodW5zaWduZWQgY2hhciAqcHRyLCBpbnQgaW1hZ2Vfc2l6ZSwKKwkJCXN0cnVjdCBpbWFnZV90b29sX3BhcmFtcyAqcGFyYW1zKTsKKworaW50IGZpdF9jaGVja19pbWFnZV90eXBlcyh1aW50OF90IHR5cGUpOworCitpbnQgbW1hcF9mZHQoY2hhciAqY21kbmFtZSwgY29uc3QgY2hhciAqZm5hbWUsIHZvaWQgKipibG9icCwKKwkJc3RydWN0IHN0YXQgKnNidWYsIGludCB1c2V1bmxpbmspOworCisjZW5kaWYgLyogX0ZJVF9DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpdF9pbWFnZS5jIGIvdG9vbHMvZml0X2ltYWdlLmMKaW5kZXggMTQ2NjE2NC4uZWVlZTQ4NCAxMDA2NDQKLS0tIGEvdG9vbHMvZml0X2ltYWdlLmMKKysrIGIvdG9vbHMvZml0X2ltYWdlLmMKQEAgLTE1LDY4ICsxNSwxMyBAQAogICovCiAKICNpbmNsdWRlICJpbWFnZXRvb2wuaCIKKyNpbmNsdWRlICJmaXRfY29tbW9uLmgiCiAjaW5jbHVkZSAibWtpbWFnZS5oIgogI2luY2x1ZGUgPGltYWdlLmg+CiAjaW5jbHVkZSA8dS1ib290L2NyYy5oPgogCiBzdGF0aWMgaW1hZ2VfaGVhZGVyX3QgaGVhZGVyOwogCi1zdGF0aWMgaW50IGZpdF92ZXJpZnlfaGVhZGVyICh1bnNpZ25lZCBjaGFyICpwdHIsIGludCBpbWFnZV9zaXplLAotCQkJc3RydWN0IGltYWdlX3Rvb2xfcGFyYW1zICpwYXJhbXMpCi17Ci0JcmV0dXJuIGZkdF9jaGVja19oZWFkZXIocHRyKTsKLX0KLQotc3RhdGljIGludCBmaXRfY2hlY2tfaW1hZ2VfdHlwZXMgKHVpbnQ4X3QgdHlwZSkKLXsKLQlpZiAodHlwZSA9PSBJSF9UWVBFX0ZMQVREVCkKLQkJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKLQllbHNlCi0JCXJldHVybiBFWElUX0ZBSUxVUkU7Ci19Ci0KLWludCBtbWFwX2ZkdChzdHJ1Y3QgaW1hZ2VfdG9vbF9wYXJhbXMgKnBhcmFtcywgY29uc3QgY2hhciAqZm5hbWUsIHZvaWQgKipibG9icCwKLQkJc3RydWN0IHN0YXQgKnNidWYpCi17Ci0Jdm9pZCAqcHRyOwotCWludCBmZDsKLQotCS8qIExvYWQgRklUIGJsb2IgaW50byBtZW1vcnkgKHdlIG5lZWQgdG8gd3JpdGUgaGFzaGVzL3NpZ25hdHVyZXMpICovCi0JZmQgPSBvcGVuKGZuYW1lLCBPX1JEV1IgfCBPX0JJTkFSWSk7Ci0KLQlpZiAoZmQgPCAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXM6IENhbid0IG9wZW4gJXM6ICVzXG4iLAotCQkJcGFyYW1zLT5jbWRuYW1lLCBmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLQkJdW5saW5rKGZuYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChmc3RhdChmZCwgc2J1ZikgPCAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXM6IENhbid0IHN0YXQgJXM6ICVzXG4iLAotCQkJcGFyYW1zLT5jbWRuYW1lLCBmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLQkJdW5saW5rKGZuYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXB0ciA9IG1tYXAoMCwgc2J1Zi0+c3Rfc2l6ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKLQlpZiAocHRyID09IE1BUF9GQUlMRUQpIHsKLQkJZnByaW50ZihzdGRlcnIsICIlczogQ2FuJ3QgcmVhZCAlczogJXNcbiIsCi0JCQlwYXJhbXMtPmNtZG5hbWUsIGZuYW1lLCBzdHJlcnJvcihlcnJubykpOwotCQl1bmxpbmsoZm5hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogY2hlY2sgaWYgcHRyIGhhcyBhIHZhbGlkIGJsb2IgKi8KLQlpZiAoZmR0X2NoZWNrX2hlYWRlcihwdHIpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXM6IEludmFsaWQgRklUIGJsb2JcbiIsIHBhcmFtcy0+Y21kbmFtZSk7Ci0JCXVubGluayhmbmFtZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkqYmxvYnAgPSBwdHI7Ci0JcmV0dXJuIGZkOwotfQotCiAvKioKICAqIGZpdF9oYW5kbGVfZmlsZSAtIG1haW4gRklUIGZpbGUgcHJvY2Vzc2luZyBmdW5jdGlvbgogICoKQEAgLTEyOSwxMyArNzQsMTQgQEAKIAl9CiAKIAlpZiAocGFyYW1zLT5rZXlkZXN0KSB7Ci0JCWRlc3RmZCA9IG1tYXBfZmR0KHBhcmFtcywgcGFyYW1zLT5rZXlkZXN0LCAmZGVzdF9ibG9iLCAmc2J1Zik7CisJCWRlc3RmZCA9IG1tYXBfZmR0KHBhcmFtcy0+Y21kbmFtZSwgcGFyYW1zLT5rZXlkZXN0LAorCQkJCSAgJmRlc3RfYmxvYiwgJnNidWYsIDEpOwogCQlpZiAoZGVzdGZkIDwgMCkKIAkJCWdvdG8gZXJyX2tleWRlc3Q7CiAJCWRlc3RmZF9zaXplID0gc2J1Zi5zdF9zaXplOwogCX0KIAotCXRmZCA9IG1tYXBfZmR0KHBhcmFtcywgdG1wZmlsZSwgJnB0ciwgJnNidWYpOworCXRmZCA9IG1tYXBfZmR0KHBhcmFtcy0+Y21kbmFtZSwgdG1wZmlsZSwgJnB0ciwgJnNidWYsIDEpOwogCWlmICh0ZmQgPCAwKQogCQlnb3RvIGVycl9tbWFwOwogCmRpZmYgLS1naXQgYS90b29scy9maXRfaW5mby5jIGIvdG9vbHMvZml0X2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGYzYzhlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZml0X2luZm8uYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDE0CisgKiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nCisgKiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqCisgKiBmaXRfaW5mbzogcHJpbnQgdGhlIG9mZnNldCBhbmQgdGhlIGxlbiBvZiBhIHByb3BlcnR5IGZyb20KKyAqCSAgICAgbm9kZSBpbiBhIGZpdCBmaWxlLgorICoKKyAqIEJhc2VkIG9uOgorICogKEMpIENvcHlyaWdodCAyMDA4IFNlbWloYWxmCisgKgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKKyAqIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcKKyAqIFdvbGZnYW5nIERlbmssIHdkQGRlbnguZGUKKyAqCisgKiBVcGRhdGVkLWJ5OiBQcmFmdWxsYSBXYWRhc2thciA8cHJhZnVsbGFAbWFydmVsbC5jb20+CisgKgkJRklUIGltYWdlIHNwZWNpZmljIGNvZGUgYWJzdHJhY3RlZCBmcm9tIG1raW1hZ2UuYworICoJCXNvbWUgZnVuY3Rpb25zIGFkZGVkIHRvIGFkZHJlc3MgYWJzdHJhY3Rpb24KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKworICovCisKKyNpbmNsdWRlICJta2ltYWdlLmgiCisjaW5jbHVkZSAiZml0X2NvbW1vbi5oIgorI2luY2x1ZGUgPGltYWdlLmg+CisjaW5jbHVkZSA8dS1ib290L2NyYy5oPgorCit2b2lkIHVzYWdlKGNoYXIgKmNtZG5hbWUpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgLWYgZml0IGZpbGUgLW4gbm9kZSAtcCBwcm9wZXJ0eVxuIgorCQkJICIgICAgICAgICAgLWYgPT0+IHNldCBmaXQgZmlsZSB3aGljaCBpcyB1c2VkJ1xuIgorCQkJICIgICAgICAgICAgLW4gPT0+IHNldCBub2RlIG5hbWUnXG4iCisJCQkgIiAgICAgICAgICAtcCA9PT4gc2V0IHByb3BlcnR5IG5hbWUnXG4iLAorCQljbWRuYW1lKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgZmZkID0gLTE7CisJc3RydWN0IHN0YXQgZnNidWY7CisJdm9pZCAqZml0X2Jsb2I7CisJaW50IGxlbjsKKwlpbnQgIG5vZGVvZmZzZXQ7CS8qIG5vZGUgb2Zmc2V0IGZyb20gbGliZmR0ICovCisJY29uc3Qgdm9pZCAqbm9kZXA7CS8qIHByb3BlcnR5IG5vZGUgcG9pbnRlciAqLworCWNoYXIgKmZkdGZpbGUgPSBOVUxMOworCWNoYXIgKm5vZGVuYW1lID0gTlVMTDsKKwljaGFyICpwcm9wZXJ0eW5hbWUgPSBOVUxMOworCWNoYXIgY21kbmFtZVs1MF07CisJaW50IGM7CisKKwlzdHJjcHkoY21kbmFtZSwgKmFyZ3YpOworCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiZjpuOnA6IikpICE9IC0xKQorCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnZic6CisJCQlmZHRmaWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJbm9kZW5hbWUgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlwcm9wZXJ0eW5hbWUgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKGNtZG5hbWUpOworCQkJYnJlYWs7CisJCX0KKworCWZmZCA9IG1tYXBfZmR0KGNtZG5hbWUsIGZkdGZpbGUsICZmaXRfYmxvYiwgJmZzYnVmLCAwKTsKKworCWlmIChmZmQgPCAwKSB7CisJCXByaW50ZigiQ291bGQgbm90IG9wZW4gJXNcbiIsIGZkdGZpbGUpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJbm9kZW9mZnNldCA9IGZkdF9wYXRoX29mZnNldChmaXRfYmxvYiwgbm9kZW5hbWUpOworCWlmIChub2Rlb2Zmc2V0IDwgMCkgeworCQlwcmludGYoIiVzIG5vdCBmb3VuZC4iLCBub2RlbmFtZSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJbm9kZXAgPSBmZHRfZ2V0cHJvcChmaXRfYmxvYiwgbm9kZW9mZnNldCwgcHJvcGVydHluYW1lLCAmbGVuKTsKKwlpZiAobGVuID09IDApIHsKKwkJcHJpbnRmKCJsZW4gPT0gMCAlc1xuIiwgcHJvcGVydHluYW1lKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCXByaW50ZigiTkFNRTogJXNcbiIsIGZpdF9nZXRfbmFtZShmaXRfYmxvYiwgbm9kZW9mZnNldCwgTlVMTCkpOworCXByaW50ZigiTEVOOiAlZFxuIiwgbGVuKTsKKwlwcmludGYoIk9GRjogJWRcbiIsIChpbnQpKG5vZGVwIC0gZml0X2Jsb2IpKTsKKwkodm9pZCkgbXVubWFwKCh2b2lkICopZml0X2Jsb2IsIGZzYnVmLnN0X3NpemUpOworCisJY2xvc2UoZmZkKTsKKwlleGl0KEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS90b29scy9pbWFnZS1ob3N0LmMgYi90b29scy9pbWFnZS1ob3N0LmMKaW5kZXggMGQ1Yzg4Yy4uNjUxZjFjMiAxMDA2NDQKLS0tIGEvdG9vbHMvaW1hZ2UtaG9zdC5jCisrKyBiL3Rvb2xzL2ltYWdlLWhvc3QuYwpAQCAtNDAzLDcgKzQwMyw3IEBACiAJCWdvdG8gZXJyX21lbTsKIAogCS8qIEdldCBhIGxpc3Qgb2YgaW1hZ2VzIHRoYXQgd2UgaW50ZW5kIHRvIHNpZ24gKi8KLQlwcm9wID0gZml0X2NvbmZpZ19nZXRfaW1hZ2VfbGlzdChmaXQsIGNvbmZfbm9mZnNldCwgJmxlbiwKKwlwcm9wID0gZml0X2NvbmZpZ19nZXRfaW1hZ2VfbGlzdChmaXQsIHNpZ19vZmZzZXQsICZsZW4sCiAJCQkJCSZhbGxvd19taXNzaW5nKTsKIAlpZiAoIXByb3ApCiAJCXJldHVybiAwOwpAQCAtNjk1LDMgKzY5NSwxOCBAQAogCiAJcmV0dXJuIDA7CiB9CisKKyNpZmRlZiBDT05GSUdfRklUX1NJR05BVFVSRQoraW50IGZpdF9jaGVja19zaWduKGNvbnN0IHZvaWQgKndvcmtpbmdfZmR0LCBjb25zdCB2b2lkICprZXkpCit7CisJaW50IGNmZ19ub2Zmc2V0OworCWludCByZXQ7CisKKwljZmdfbm9mZnNldCA9IGZpdF9jb25mX2dldF9ub2RlKHdvcmtpbmdfZmR0LCBOVUxMKTsKKwlpZiAoIWNmZ19ub2Zmc2V0KQorCQlyZXR1cm4gLTE7CisKKwlyZXQgPSBmaXRfY29uZmlnX3ZlcmlmeSh3b3JraW5nX2ZkdCwgY2ZnX25vZmZzZXQpOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3JzYS1jaGVja3N1bS5jIGIvdG9vbHMvcnNhLWNoZWNrc3VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwMzNlNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JzYS1jaGVja3N1bS5jCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlICIuLi9saWIvcnNhL3JzYS1jaGVja3N1bS5jIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcnNhLXZlcmlmeS5jIGIvdG9vbHMvcnNhLXZlcmlmeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjYyYTEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9yc2EtdmVyaWZ5LmMKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgIi4uL2xpYi9yc2EvcnNhLXZlcmlmeS5jIgpkaWZmIC0tZ2l0IGEvdG9vbHMvc2hhMjU2LmMgYi90b29scy9zaGEyNTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2E5MzFmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvc2hhMjU2LmMKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgIi4uL2xpYi9zaGEyNTYuYyIK