ZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KaW5kZXggN2I4NjIxNC4uNjQ5MTYwZCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuYW0KKysrIGIvTWFrZWZpbGUuYW0KQEAgLTM4LDYgKzM4LDcgQEAKIAktLWVuYWJsZS1mcmVlZHJlbm8ta2dzbFwKIAktLWVuYWJsZS10ZWdyYS1leHBlcmltZW50YWwtYXBpIFwKIAktLWVuYWJsZS1ldG5hdml2LWV4cGVyaW1lbnRhbC1hcGkgXAorCS0tZW5hYmxlLXZpdmFudGUtZXhwZXJpbWVudGFsLWFwaSBcCiAJLS1lbmFibGUtaW5zdGFsbC10ZXN0LXByb2dyYW1zIFwKIAktLWVuYWJsZS1jYWlyby10ZXN0cyBcCiAJLS1lbmFibGUtbWFucGFnZXMgXApAQCAtODksNiArOTAsOSBAQAogaWYgSEFWRV9FVE5BVklWCiBFVE5BVklWX1NVQkRJUiA9IGV0bmF2aXYKIGVuZGlmCitpZiBIQVZFX1ZJVkFOVEUKK1ZJVkFOVEVfU1VCRElSID0gdml2YW50ZQorZW5kaWYKIAogaWYgQlVJTERfTUFOUEFHRVMKIGlmIEhBVkVfTUFOUEFHRVNfU1RZTEVTSEVFVApAQCAtMTA4LDYgKzExMiw3IEBACiAJJChGUkVFRFJFTk9fU1VCRElSKSBcCiAJJChURUdSQV9TVUJESVIpIFwKIAkkKFZDNF9TVUJESVIpIFwKKwkkKFZJVkFOVEVfU1VCRElSKSBcCiAJJChFVE5BVklWX1NVQkRJUikgXAogCWRhdGEgXAogCXRlc3RzIFwKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnNvdXJjZXMgYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDEwYWExZDAuLjg4ZDRmODYgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvTWFrZWZpbGUuc291cmNlcwpAQCAtMzQsNiArMzQsNyBAQAogCWluY2x1ZGUvZHJtL3Npc19kcm0uaCBcCiAJaW5jbHVkZS9kcm0vdGVncmFfZHJtLmggXAogCWluY2x1ZGUvZHJtL3ZjNF9kcm0uaCBcCisJaW5jbHVkZS9kcm0vdml2YW50ZV9kcm0uaCBcCiAJaW5jbHVkZS9kcm0vdmlhX2RybS5oIFwKIAlpbmNsdWRlL2RybS92aXJ0Z3B1X2RybS5oCiAKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBjY2I5MTBhLi4xMjU5YThmIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0xNDcsNiArMTQ3LDExIEBACiAJICAgICAgW0VuYWJsZSBzdXBwb3J0IGZvciBUZWdyYSdzIGV4cGVyaW1lbnRhbCBBUEkgKGRlZmF1bHQ6IGRpc2FibGVkKV0pLAogCSAgICAgIFtURUdSQT0kZW5hYmxldmFsXSwgW1RFR1JBPW5vXSkKIAorQUNfQVJHX0VOQUJMRSh2aXZhbnRlLWV4cGVyaW1lbnRhbC1hcGksCisJICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpdmFudGUtZXhwZXJpbWVudGFsLWFwaV0sCisJICAgICAgW0VuYWJsZSBzdXBwb3J0IGZvciB2aXZhbnRlJ3MgZXhwZXJpbWVudGFsIEFQSSAoZGVmYXVsdDogZGlzYWJsZWQpXSksCisJICAgICAgW1ZJVkFOVEU9JGVuYWJsZXZhbF0sIFtWSVZBTlRFPW5vXSkKKwogQUNfQVJHX0VOQUJMRSh2YzQsCiAJICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS12YzRdLAogCSAgICAgIFtFbmFibGUgc3VwcG9ydCBmb3IgdmM0J3MgQVBJIChkZWZhdWx0OiBhdXRvLCBlbmFibGVkIG9uIGFybSldKSwKQEAgLTQzNiw2ICs0NDEsMTEgQEAKIAlBQ19ERUZJTkUoSEFWRV9URUdSQSwgMSwgW0hhdmUgVGVncmEgc3VwcG9ydF0pCiBmaQogCitBTV9DT05ESVRJT05BTChIQVZFX1ZJVkFOVEUsIFt0ZXN0ICJ4JFZJVkFOVEUiID0geHllc10pCitpZiB0ZXN0ICJ4JFZJVkFOVEUiID0geHllczsgdGhlbgorCUFDX0RFRklORShIQVZFX1ZJVkFOVEUsIDEsIFtIYXZlIHZpdmFudGUgc3VwcG9ydF0pCitmaQorCiBBTV9DT05ESVRJT05BTChIQVZFX1ZDNCwgW3Rlc3QgIngkVkM0IiA9IHh5ZXNdKQogaWYgdGVzdCAieCRWQzQiID0geHllczsgdGhlbgogCUFDX0RFRklORShIQVZFX1ZDNCwgMSwgW0hhdmUgVkM0IHN1cHBvcnRdKQpAQCAtNTQ5LDYgKzU1OSw4IEBACiAJZnJlZWRyZW5vL2xpYmRybV9mcmVlZHJlbm8ucGMKIAl0ZWdyYS9NYWtlZmlsZQogCXRlZ3JhL2xpYmRybV90ZWdyYS5wYworCXZpdmFudGUvTWFrZWZpbGUKKwl2aXZhbnRlL2xpYmRybV92aXZhbnRlLnBjCiAJdmM0L01ha2VmaWxlCiAJdmM0L2xpYmRybV92YzQucGMKIAlldG5hdml2L01ha2VmaWxlCkBAIC01NjQsNiArNTc2LDcgQEAKIAl0ZXN0cy92Ymx0ZXN0L01ha2VmaWxlCiAJdGVzdHMvZXh5bm9zL01ha2VmaWxlCiAJdGVzdHMvdGVncmEvTWFrZWZpbGUKKwl0ZXN0cy92aXZhbnRlL01ha2VmaWxlCiAJdGVzdHMvbm91dmVhdS9NYWtlZmlsZQogCXRlc3RzL2V0bmF2aXYvTWFrZWZpbGUKIAl0ZXN0cy91dGlsL01ha2VmaWxlCkBAIC01ODQsNiArNTk3LDcgQEAKIGVjaG8gIiAgRVhZTk9TIEFQSSAgICAgJEVYWU5PUyIKIGVjaG8gIiAgRnJlZWRyZW5vIEFQSSAgJEZSRUVEUkVOTyAoa2dzbDogJEZSRUVEUkVOT19LR1NMKSIKIGVjaG8gIiAgVGVncmEgQVBJICAgICAgJFRFR1JBIgorZWNobyAiICBWaXZhbnRlIEFQSSAgICAkVklWQU5URSIKIGVjaG8gIiAgVkM0IEFQSSAgICAgICAgJFZDNCIKIGVjaG8gIiAgRXRuYXZpdiBBUEkgICAgJEVUTkFWSVYiCiBlY2hvICIiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZm91cmNjLmggYi9pbmNsdWRlL2RybS9kcm1fZm91cmNjLmgKaW5kZXggM2FkODM4ZC4uOGFlOWZkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9mb3VyY2MuaApAQCAtNDIsMTEgKzQyLDE1IEBACiAjZGVmaW5lIERSTV9GT1JNQVRfUjgJCWZvdXJjY19jb2RlKCdSJywgJzgnLCAnICcsICcgJykgLyogWzc6MF0gUiAqLwogCiAvKiAxNiBicHAgUmVkICovCi0jZGVmaW5lIERSTV9GT1JNQVRfUjE2CQlmb3VyY2NfY29kZSgnUicsICcxJywgJzYnLCAnICcpIC8qIFsxNTowXSBSIGxpdHRsZSBlbmRpYW4gKi8KKyNkZWZpbmUgRFJNX0ZPUk1BVF9SMTYgICAgICAgIGZvdXJjY19jb2RlKCdSJywgJzEnLCAnNicsICcgJykgLyogWzE1OjBdIFIgbGl0dGxlIGVuZGlhbiAqLwogCiAvKiAxNiBicHAgUkcgKi8KLSNkZWZpbmUgRFJNX0ZPUk1BVF9SRzg4CQlmb3VyY2NfY29kZSgnUicsICdHJywgJzgnLCAnOCcpIC8qIFsxNTowXSBSOkcgODo4IGxpdHRsZSBlbmRpYW4gKi8KLSNkZWZpbmUgRFJNX0ZPUk1BVF9HUjg4CQlmb3VyY2NfY29kZSgnRycsICdSJywgJzgnLCAnOCcpIC8qIFsxNTowXSBHOlIgODo4IGxpdHRsZSBlbmRpYW4gKi8KKyNkZWZpbmUgRFJNX0ZPUk1BVF9SRzg4ICAgICAgICBmb3VyY2NfY29kZSgnUicsICdHJywgJzgnLCAnOCcpIC8qIFsxNTowXSBSOkcgODo4IGxpdHRsZSBlbmRpYW4gKi8KKyNkZWZpbmUgRFJNX0ZPUk1BVF9HUjg4ICAgICAgICBmb3VyY2NfY29kZSgnRycsICdSJywgJzgnLCAnOCcpIC8qIFsxNTowXSBHOlIgODo4IGxpdHRsZSBlbmRpYW4gKi8KKworLyogMzIgYnBwIFJHICovCisjZGVmaW5lIERSTV9GT1JNQVRfUkcxNjE2ICAgIGZvdXJjY19jb2RlKCdSJywgJ0cnLCAnMycsICcyJykgLyogWzMxOjBdIFI6RyAxNjoxNiBsaXR0bGUgZW5kaWFuICovCisjZGVmaW5lIERSTV9GT1JNQVRfR1IxNjE2ICAgIGZvdXJjY19jb2RlKCdHJywgJ1InLCAnMycsICcyJykgLyogWzMxOjBdIEc6UiAxNjoxNiBsaXR0bGUgZW5kaWFuICovCiAKIC8qIDMyIGJwcCBSRyAqLwogI2RlZmluZSBEUk1fRk9STUFUX1JHMTYxNglmb3VyY2NfY29kZSgnUicsICdHJywgJzMnLCAnMicpIC8qIFszMTowXSBSOkcgMTY6MTYgbGl0dGxlIGVuZGlhbiAqLwpAQCAtMjk0LDcgKzI5OCw3IEBACiAgKiAtIG11bHRpcGxlIG9mIDEyOCBwaXhlbHMgZm9yIHRoZSB3aWR0aAogICogLSBtdWx0aXBsZSBvZiAgMzIgcGl4ZWxzIGZvciB0aGUgaGVpZ2h0CiAgKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb246IHNlZSBodHRwczovL2xpbnV4dHYub3JnL2Rvd25sb2Fkcy92NGwtZHZiLWFwaXMvcmUzMi5odG1sCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbjogc2VlIGh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvdjRsLWR2Yi1hcGlzL3JlMzIuaHRtbAogICovCiAjZGVmaW5lIERSTV9GT1JNQVRfTU9EX1NBTVNVTkdfNjRfMzJfVElMRQlmb3VyY2NfbW9kX2NvZGUoU0FNU1VORywgMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdml2YW50ZV9kcm0uaCBiL2luY2x1ZGUvZHJtL3ZpdmFudGVfZHJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljN2YyNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL3ZpdmFudGVfZHJtLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCCpIDIwMTcgVklWQU5URSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBfX1ZJVk5BVEVfRFJNX0hfXworI2RlZmluZSBfX1ZJVk5BVEVfRFJNX0hfXworCisjaW5jbHVkZSA8ZHJtLmg+CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworc3RydWN0IGRybV92aXZfZ2VtX2NyZWF0ZSB7CisgICAgX191NjQgc2l6ZTsgICAgICAgICAvKiBpbiAqLworICAgIF9fdTMyIGZsYWdzOyAgICAgICAgLyogaW4gKi8KKyAgICBfX3UzMiBoYW5kbGU7ICAgICAgIC8qIG91dCAqLworfTsKKworc3RydWN0IGRybV92aXZfZ2VtX2xvY2sgeworICAgIF9fdTMyIGhhbmRsZTsKKyAgICBfX3UzMiBjYWNoZWFibGU7CisgICAgX191MzIgZ3B1X3ZhOworICAgIF9fdTY0IGNwdV92YTsKK307CisKK3N0cnVjdCBkcm1fdml2X2dlbV91bmxvY2sgeworICAgIF9fdTMyIGhhbmRsZTsKK307CisKK3N0cnVjdCBkcm1fdml2X2dlbV9jYWNoZSB7CisgICAgX191MzIgaGFuZGxlOworICAgIF9fdTMyIG9wOworICAgIF9fdTY0IGxvZ2ljYWw7CisgICAgX191NjQgYnl0ZXM7Cit9OworCitzdHJ1Y3QgZHJtX3Zpdl9nZW1fZ2V0aW5mbyB7CisgICAgX191MzIgaGFuZGxlOworICAgIF9fdTMyIHBhcmFtOworICAgIF9fdTY0IHZhbHVlOworfTsKKworI2RlZmluZSBEUk1fVklWX0dFTV9DUkVBVEUgICAgICAgICAgMHgwMAorI2RlZmluZSBEUk1fVklWX0dFTV9MT0NLICAgICAgICAgICAgMHgwMQorI2RlZmluZSBEUk1fVklWX0dFTV9VTkxPQ0sgICAgICAgICAgMHgwMgorI2RlZmluZSBEUk1fVklWX0dFTV9DQUNIRSAgICAgICAgICAgMHgwMworI2RlZmluZSBEUk1fVklWX0dFTV9HRVRJTkZPICAgICAgICAgMHgwNAorI2RlZmluZSBEUk1fVklWX05VTV9JT0NUTFMgICAgICAgICAgMHgwNQorCisjZGVmaW5lIERSTV9JT0NUTF9WSVZfR0VNX0NSRUFURSAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZJVl9HRU1fQ1JFQVRFLCAgICAgc3RydWN0IGRybV92aXZfZ2VtX2NyZWF0ZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJVl9HRU1fTE9DSyAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklWX0dFTV9MT0NLLCAgICAgICBzdHJ1Y3QgZHJtX3Zpdl9nZW1fbG9jaykKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJVl9HRU1fVU5MT0NLICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklWX0dFTV9VTkxPQ0ssICAgICBzdHJ1Y3QgZHJtX3Zpdl9nZW1fdW5sb2NrKQorI2RlZmluZSBEUk1fSU9DVExfVklWX0dFTV9DQUNIRSAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSVZfR0VNX0NBQ0hFLCAgICAgIHN0cnVjdCBkcm1fdml2X2dlbV9jYWNoZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZJVl9HRU1fR0VUSU5GTyAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklWX0dFTV9HRVRJTkZPLCAgICBzdHJ1Y3QgZHJtX3Zpdl9nZW1fZ2V0aW5mbykKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fVklWTkFURV9EUk1fSF9fICovCmRpZmYgLS1naXQgYS90ZXN0cy92aXZhbnRlL01ha2VmaWxlLmFtIGIvdGVzdHMvdml2YW50ZS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTBkZWRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdml2YW50ZS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE2IEBACitBTV9DRkxBR1MgPSBcCisJLXB0aHJlYWQgXAorCSQoV0FSTl9DRkxBR1MpIFwKKwktSSQodG9wX3NyY2RpcikvaW5jbHVkZS9kcm0gXAorCS1JJCh0b3Bfc3JjZGlyKS92aXZhbnRlIFwKKwktSSQodG9wX3NyY2RpcikKKworTERBREQgPSBcCisJLi4vLi4vdml2YW50ZS9saWJkcm1fdml2YW50ZS5sYSBcCisJLi4vLi4vbGliZHJtLmxhIFwKKwktbGRsCisKK1RFU1RTID0gdml2X2JvX3Rlc3QKKworYmluX1BST0dSQU1TID0gJChURVNUUykKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvdml2YW50ZS92aXZfYm9fdGVzdC5jIGIvdGVzdHMvdml2YW50ZS92aXZfYm9fdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMjFhZjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy92aXZhbnRlL3Zpdl9ib190ZXN0LmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNSBDYW5vbmljYWwgTHRkLiAoTWFhcnRlbiBMYW5raG9yc3QpCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworI2luY2x1ZGUgInhmODZkcm0uaCIKKyNpbmNsdWRlICJ2aXZhbnRlLmgiCisKK3N0YXRpYyBpbnQgaW1wb3J0X2ZkOworCitzdGF0aWMgdm9pZCAqCitvcGVuY2xvc2Uodm9pZCAqZGV2KQoreworCWludCBmZCA9IChpbnRwdHJfdClkZXY7CisJdWludDMyX3QgYm9faGFuZGxlOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisJCWlmICghZHJtUHJpbWVGRFRvSGFuZGxlKGZkLCBpbXBvcnRfZmQsICZib19oYW5kbGUpKQorCQkJZHJtX3ZpdmFudGVfYm9fZGVzdHJveShmZCwgYm9faGFuZGxlKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZHJtVmVyc2lvblB0ciB2ZXJzaW9uOworCWNvbnN0IGNoYXIgKmRldmljZSA9IE5VTEw7CisJaW50IGVyciwgZmQxLCBmZDI7CisJdWludDMyX3QgYm9faGFuZGxlOworCXB0aHJlYWRfdCB0MSwgdDI7CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJZmQxID0gZHJtT3BlbldpdGhUeXBlKCJ2aXZhbnRlIiwgTlVMTCwgRFJNX05PREVfUkVOREVSKTsKKwkJaWYgKGZkMSA+PSAwKQorCQkJZmQyID0gZHJtT3BlbldpdGhUeXBlKCJ2aXZhbnRlIiwgTlVMTCwgRFJNX05PREVfUkVOREVSKTsKKwl9IGVsc2UgeworCQlkZXZpY2UgPSBhcmd2WzFdOworCisJCWZkMSA9IG9wZW4oZGV2aWNlLCBPX1JEV1IpOworCQlpZiAoZmQxID49IDApCisJCQlmZDIgPSBvcGVuKGRldmljZSwgT19SRFdSKTsKKwkJZWxzZQorCQkJZmQyID0gZmQxID0gLWVycm5vOworCX0KKworCWlmIChmZDEgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiT3BlbmluZyAxc3Qgdml2YW50ZSByZW5kZXIgbm9kZSBmYWlsZWQgd2l0aCAlaVxuIiwgZmQxKTsKKwkJcmV0dXJuIGRldmljZSA/IC1mZDEgOiA3NzsKKwl9CisKKwlpZiAoZmQyIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIk9wZW5pbmcgMm5kIHZpdmFudGUgcmVuZGVyIG5vZGUgZmFpbGVkIHdpdGggJWlcbiIsIC1lcnJubyk7CisJCXJldHVybiBlcnJubzsKKwl9CisKKwl2ZXJzaW9uID0gZHJtR2V0VmVyc2lvbihmZDEpOworCWlmICh2ZXJzaW9uKSB7CisJCXByaW50ZigiVmVyc2lvbjogJWQuJWQuJWRcbiIsIHZlcnNpb24tPnZlcnNpb25fbWFqb3IsCisJCSAgICAgICB2ZXJzaW9uLT52ZXJzaW9uX21pbm9yLCB2ZXJzaW9uLT52ZXJzaW9uX3BhdGNobGV2ZWwpOworCQlwcmludGYoIiAgTmFtZTogJXNcbiIsIHZlcnNpb24tPm5hbWUpOworCQlwcmludGYoIiAgRGF0ZTogJXNcbiIsIHZlcnNpb24tPmRhdGUpOworCQlwcmludGYoIiAgRGVzY3JpcHRpb246ICVzXG4iLCB2ZXJzaW9uLT5kZXNjKTsKKworCQlkcm1GcmVlVmVyc2lvbih2ZXJzaW9uKTsKKwl9CisKKwllcnIgPSBkcm1fdml2YW50ZV9ib19jcmVhdGUoZmQyLCAwLCA0MDk2LCAmYm9faGFuZGxlKTsKKwlpZiAoIWVycikKKyAgICAgICAgZXJyID0gZHJtUHJpbWVIYW5kbGVUb0ZEKGZkMiwgYm9faGFuZGxlLCBEUk1fQ0xPRVhFQywgJmltcG9ydF9mZCk7CisKKwlpZiAoIWVycikgeworCQlwdGhyZWFkX2NyZWF0ZSgmdDEsIE5VTEwsIG9wZW5jbG9zZSwgKHZvaWQqKShpbnRwdHJfdClmZDEpOworCQlwdGhyZWFkX2NyZWF0ZSgmdDIsIE5VTEwsIG9wZW5jbG9zZSwgKHZvaWQqKShpbnRwdHJfdClmZDEpOworCX0KKworCXB0aHJlYWRfam9pbih0MSwgTlVMTCk7CisJcHRocmVhZF9qb2luKHQyLCBOVUxMKTsKKworCWNsb3NlKGltcG9ydF9mZCk7CisJZHJtX3ZpdmFudGVfYm9fZGVzdHJveShmZDIsIGJvX2hhbmRsZSk7CisKKwlpZiAoZGV2aWNlKSB7CisJCWNsb3NlKGZkMik7CisJCWNsb3NlKGZkMSk7CisJfSBlbHNlIHsKKwkJZHJtQ2xvc2UoZmQyKTsKKwkJZHJtQ2xvc2UoZmQxKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3ZpdmFudGUvQW5kcm9pZC5tayBiL3ZpdmFudGUvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQwMjhhCi0tLSAvZGV2L251bGwKKysrIGIvdml2YW50ZS9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMTEgQEAKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9NT0RVTEUgOj0gbGliZHJtX3ZpdmFudGUKKworTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJkcm0KKworTE9DQUxfU1JDX0ZJTEVTIDo9IHZpdmFudGUuYworCitpbmNsdWRlICQoTElCRFJNX0NPTU1PTl9NSykKK2luY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKZGlmZiAtLWdpdCBhL3ZpdmFudGUvTWFrZWZpbGUuYW0gYi92aXZhbnRlL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NjNiZjAKLS0tIC9kZXYvbnVsbAorKysgYi92aXZhbnRlL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjQgQEAKK0FNX0NQUEZMQUdTID0gXAorCS1JJCh0b3Bfc3JjZGlyKSBcCisJLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUvZHJtCisKK0FNX0NGTEFHUyA9IFwKKwlAUFRIUkVBRFNUVUJTX0NGTEFHU0AgXAorCSQoV0FSTl9DRkxBR1MpCisKK2xpYmRybV92aXZhbnRlX2xhZGlyID0gJChsaWJkaXIpCitsaWJkcm1fdml2YW50ZV9sYV9MVExJQlJBUklFUyA9IGxpYmRybV92aXZhbnRlLmxhCitsaWJkcm1fdml2YW50ZV9sYV9MREZMQUdTID0gLXZlcnNpb24tbnVtYmVyIDE6MDowIC1uby11bmRlZmluZWQKK2xpYmRybV92aXZhbnRlX2xhX0xJQkFERCA9IC4uL2xpYmRybS5sYSBAUFRIUkVBRFNUVUJTX0xJQlNACisKK2xpYmRybV92aXZhbnRlX2xhX1NPVVJDRVMgPSBcCisJdml2YW50ZS5jCisKK2xpYmRybV92aXZhbnRlaW5jbHVkZWRpciA9ICR7aW5jbHVkZWRpcn0vbGliZHJtCitsaWJkcm1fdml2YW50ZWluY2x1ZGVfSEVBREVSUyA9IHZpdmFudGUuaAorCitwa2djb25maWdkaXIgPSBAcGtnY29uZmlnZGlyQAorcGtnY29uZmlnX0RBVEEgPSBsaWJkcm1fdml2YW50ZS5wYworCitURVNUUyA9IHZpdmFudGUtc3ltYm9sLWNoZWNrCitFWFRSQV9ESVNUID0gJChURVNUUykKZGlmZiAtLWdpdCBhL3ZpdmFudGUvbGliZHJtX3ZpdmFudGUucGMuaW4gYi92aXZhbnRlL2xpYmRybV92aXZhbnRlLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OThkNmIKLS0tIC9kZXYvbnVsbAorKysgYi92aXZhbnRlL2xpYmRybV92aXZhbnRlLnBjLmluCkBAIC0wLDAgKzEsMTEgQEAKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorCitOYW1lOiBsaWJkcm1fdml2YW50ZQorRGVzY3JpcHRpb246IFVzZXJzcGFjZSBpbnRlcmZhY2UgdG8gVml2YW50ZSBrZXJuZWwgRFJNIHNlcnZpY2VzCitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorTGliczogLUwke2xpYmRpcn0gLWxkcm1fdml2YW50ZQorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gLUkke2luY2x1ZGVkaXJ9L2xpYmRybQorUmVxdWlyZXMucHJpdmF0ZTogbGliZHJtCmRpZmYgLS1naXQgYS92aXZhbnRlL3ZpdmFudGUtc3ltYm9sLWNoZWNrIGIvdml2YW50ZS92aXZhbnRlLXN5bWJvbC1jaGVjawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWMxMmEwCi0tLSAvZGV2L251bGwKKysrIGIvdml2YW50ZS92aXZhbnRlLXN5bWJvbC1jaGVjawpAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vYmFzaAorCisjIFRoZSBmb2xsb3dpbmcgc3ltYm9scyAocGFzdCB0aGUgZmlyc3QgbmluZSkgYXJlIHRha2VuIGZyb20gdml2YW50ZS5oLgorCitGVU5DUz0kKG5tIC1EIC0tZm9ybWF0PWJzZCAtLWRlZmluZWQtb25seSAkezEtLmxpYnMvbGliZHJtX3ZpdmFudGUuc299IHwgYXdrICd7cHJpbnQgJDN9J3wgd2hpbGUgcmVhZCBmdW5jOyBkbworKCBncmVwIC1xICJeJGZ1bmMkIiB8fCBlY2hvICRmdW5jICkgIDw8RU9GCitfX2Jzc19lbmRfXworX19ic3Nfc3RhcnRfXworX19ic3Nfc3RhcnQKK19fZW5kX18KK19ic3NfZW5kX18KK19lZGF0YQorX2VuZAorX2ZpbmkKK19pbml0Citkcm1fdml2YW50ZV9ib19jcmVhdGUKK2RybV92aXZhbnRlX2JvX2Rlc3Ryb3kKK2RybV92aXZhbnRlX2JvX2xvY2sKK2RybV92aXZhbnRlX2JvX3VubG9jaworZHJtX3ZpdmFudGVfYm9fY2FjaGUKK2RybV92aXZhbnRlX2JvX2dldGluZm8KK0VPRgorZG9uZSkKZGlmZiAtLWdpdCBhL3ZpdmFudGUvdml2YW50ZS5jIGIvdml2YW50ZS92aXZhbnRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyMTM4YwotLS0gL2Rldi9udWxsCisrKyBiL3ZpdmFudGUvdml2YW50ZS5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTIsIDIwMTMgVGhpZXJyeSBSZWRpbmcKKyAqIENvcHlyaWdodCDCqSAyMDEzIEVyaWsgRmF5ZS1MdW5kCisgKiBDb3B5cmlnaHQgwqkgMjAxNCBOVklESUEgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNpbmNsdWRlIDx4Zjg2ZHJtLmg+CisKKyNpbmNsdWRlIDx2aXZhbnRlX2RybS5oPgorCisjaW5jbHVkZSAidml2YW50ZS5oIgorCitpbnQgZHJtX3ZpdmFudGVfYm9fY3JlYXRlKGludCBmZCwgdWludDMyX3QgZmxhZ3MsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90ICpoYW5kbGUpCit7CisgICAgc3RydWN0IGRybV92aXZfZ2VtX2NyZWF0ZSBhcmdzOworICAgIGludCBlcnIgPSAwOworCisgICAgaWYgKHNpemUgPT0gMCB8fCAhaGFuZGxlKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIG1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKyAgICBhcmdzLmZsYWdzID0gZmxhZ3M7CisgICAgYXJncy5zaXplID0gc2l6ZTsKKworICAgIGlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1ZJVl9HRU1fQ1JFQVRFLCAmYXJncykpCisgICAgICAgIHJldHVybiAtZXJybm87CisKKyAgICAqaGFuZGxlID0gYXJncy5oYW5kbGU7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGRybV92aXZhbnRlX2JvX2Rlc3Ryb3koaW50IGZkLCB1aW50MzJfdCBoYW5kbGUpCit7CisgICAgc3RydWN0IGRybV9nZW1fY2xvc2UgYXJnczsKKworICAgIGlmICghaGFuZGxlKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGFyZ3MuaGFuZGxlID0gaGFuZGxlOworICAgIGlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0dFTV9DTE9TRSwgJmFyZ3MpKQorICAgICAgICByZXR1cm4gLWVycm5vOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQqIGRybV92aXZhbnRlX2JvX2xvY2soaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90ICpncHVfdmEpCit7CisgICAgc3RydWN0IGRybV92aXZfZ2VtX2xvY2sgYXJnczsKKworICAgIGlmICghaGFuZGxlKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGFyZ3MuaGFuZGxlID0gaGFuZGxlOworICAgIGFyZ3MuY2FjaGVhYmxlID0gMDsKKyAgICBpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9WSVZfR0VNX0xPQ0ssICZhcmdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoZ3B1X3ZhKQorICAgIHsKKyAgICAgICAgKmdwdV92YSA9IGFyZ3MuZ3B1X3ZhOworICAgIH0KKworICAgIHJldHVybiAodm9pZCopKGludHB0cl90KWFyZ3MuY3B1X3ZhOworfQorCitpbnQgZHJtX3ZpdmFudGVfYm9fdW5sb2NrKGludCBmZCwgdWludDMyX3QgaGFuZGxlKQoreworICAgIHN0cnVjdCBkcm1fdml2X2dlbV91bmxvY2sgYXJnczsKKworICAgIGlmICghaGFuZGxlKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGFyZ3MuaGFuZGxlID0gaGFuZGxlOworICAgIGlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1ZJVl9HRU1fVU5MT0NLLCAmYXJncykpCisgICAgICAgIHJldHVybiAtZXJybm87CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGRybV92aXZhbnRlX2JvX2NhY2hlKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCBvcCwgdm9pZCogbG9naWNhbCwgdWludDMyX3QgYnl0ZXMpCit7CisgICAgc3RydWN0IGRybV92aXZfZ2VtX2NhY2hlIGFyZ3M7CisKKyAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBhcmdzLmhhbmRsZSA9IGhhbmRsZTsKKyAgICBhcmdzLm9wID0gaGFuZGxlOworICAgIGFyZ3MubG9naWNhbCA9ICh1aW50cHRyX3QpbG9naWNhbDsKKyAgICBhcmdzLmJ5dGVzID0gYnl0ZXM7CisgICAgaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9DVExfVklWX0dFTV9DQUNIRSwgJmFyZ3MpKQorICAgICAgICByZXR1cm4gLWVycm5vOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBkcm1fdml2YW50ZV9ib19nZXRpbmZvKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCBwYXJhbSwgdWludDY0X3QgKnZhbHVlKQoreworICAgIHN0cnVjdCBkcm1fdml2X2dlbV9nZXRpbmZvIGFyZ3M7CisKKyAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBhcmdzLmhhbmRsZSA9IGhhbmRsZTsKKyAgICBhcmdzLnBhcmFtICA9IHBhcmFtOworICAgIGlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1ZJVl9HRU1fR0VUSU5GTywgJmFyZ3MpKQorICAgICAgICByZXR1cm4gLWVycm5vOworCisgICAgKnZhbHVlID0gYXJncy52YWx1ZTsKKworICAgIHJldHVybiAwOworfQorCisKKwpkaWZmIC0tZ2l0IGEvdml2YW50ZS92aXZhbnRlLmggYi92aXZhbnRlL3ZpdmFudGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDkyZTVhCi0tLSAvZGV2L251bGwKKysrIGIvdml2YW50ZS92aXZhbnRlLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IFZJVkFOVEUgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX19EUk1fVklWQU5URV9IX18KKyNkZWZpbmUgX19EUk1fVklWQU5URV9IX18gMQorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2VudW0gVklWX0NBQ0hFX09QIHsKKyAgICBWSVZfQ0FDSEVfQ0xFQU4gICAgICA9IDB4MDEsCisgICAgVklWX0NBQ0hFX0lOVkFMSURBVEUgPSAweDAyLAorICAgIFZJVl9DQUNIRV9GTFVTSCAgICAgID0gVklWX0NBQ0hFX0NMRUFOICB8IFZJVl9DQUNIRV9JTlZBTElEQVRFLAorICAgIFZJVl9DQUNIRV9CQVJSSUVSICAgID0gMHgwNAorfTsKKworZW51bSBWSVZfR0VNX1BBUkFNIHsKKyAgICBWSVZfR0VNX1BBUkFNX05PREUgPSAwLAorICAgIFZJVl9HRU1fUEFSQU1fUE9PTCwKKyAgICBWSVZfR0VNX1BBUkFNX1NJWkUsCit9OworCitpbnQgZHJtX3ZpdmFudGVfYm9fY3JlYXRlKGludCBmZCwgdWludDMyX3QgZmxhZ3MsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90ICpoYW5kbGUpOworaW50IGRybV92aXZhbnRlX2JvX2Rlc3Ryb3koaW50IGZkLCB1aW50MzJfdCBoYW5kbGUpOwordm9pZCogZHJtX3ZpdmFudGVfYm9fbG9jayhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgKmdwdV92YSk7CitpbnQgZHJtX3ZpdmFudGVfYm9fdW5sb2NrKGludCBmZCwgdWludDMyX3QgaGFuZGxlKTsKK2ludCBkcm1fdml2YW50ZV9ib19jYWNoZShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3Qgb3AsIHZvaWQqIGxvZ2ljYWwsIHVpbnQzMl90IGJ5dGVzKTsKK2ludCBkcm1fdml2YW50ZV9ib19nZXRpbmZvKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCBwYXJhbSwgdWludDY0X3QgKnZhbHVlKTsKKworI2VuZGlmIC8qIF9fRFJNX1ZJVkFOVEVfSF9fICovCg==