ZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZSBiL3NyYy9NYWtlZmlsZQppbmRleCBlMDgwNDc3Li5mYWRlNDdmIDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUKKysrIGIvc3JjL01ha2VmaWxlCkBAIC0xMDU1LDkgKzEwNTUsOSBAQAogTk9ORV9JTlNUQUxMID0gaW5zdGFsbF9ub3JtYWwKIAogIyMjIEtERSBHVUkgaW50ZXJmYWNlLgotS0RFX1NSQwkJPSBndWkuYyBwdHkuYyBndWlfa2RlLmNjIGd1aV9rZGVfeDExLmNjIGd1aV9rZGVfd2lkZ2V0LmNjIGd1aV9rZGVfd2lkZ2V0X21vYy5jYyBrdmltX2lmYWNlX3NrZWwuY2MKK0tERV9TUkMJCT0gZ3VpLmMgcHR5LmMgZ3VpX2tkZS5jYyBndWlfa2RlX3gxMS5jYyBndWlfa2RlX3dpZC5jYyBndWlfa2RlX3dpZF9tb2MuY2Mga3ZpbV9pZmFjZV9za2VsLmNjCiBLREVfT0JKCQk9IG9iamVjdHMvZ3VpLm8gb2JqZWN0cy9wdHkubyBvYmplY3RzL2d1aV9rZGUubyBvYmplY3RzL2d1aV9rZGVfeDExLm8gXAotCQkJb2JqZWN0cy9ndWlfa2RlX3dpZGdldC5vIG9iamVjdHMvZ3VpX2tkZV93aWRnZXRfbW9jLm8gXAorCQkJb2JqZWN0cy9ndWlfa2RlX3dpZC5vIG9iamVjdHMvZ3VpX2tkZV93aWRfbW9jLm8gXAogCQkJb2JqZWN0cy9rdmltX2lmYWNlX3NrZWwubwogS0RFX0RFRlMJPSAtREZFQVRfR1VJX0tERSAkKE5BUlJPV19QUk9UTykKIEtERV9JUEFUSAk9ICQoR1VJX0lOQ19MT0MpCkBAIC0xMjAxLDcgKzEyMDEsNyBAQAogQ0FSQk9OR1VJX1RFU1RBUkcgPSBWSU1QUk9HPS4uLyQoQ0FSQk9OR1VJX0JVTkRMRSkvQ29udGVudHMvTWFjT1MvJChWSU1UQVJHRVQpCiAKICMgQWxsIEdVSSBmaWxlcwotQUxMX0dVSV9TUkMgID0gZ3VpLmMgZ3VpX2d0ay5jIGd1aV9ndGtfZi5jIGd1aV9tb3RpZi5jIGd1aV9hdGhlbmEuYyBndWlfZ3RrX3gxMS5jIGd1aV94MTEuYyBndWlfYXRfc2IuYyBndWlfYXRfZnMuYyBwdHkuYyBndWlfa2RlLmNjIGd1aV9rZGVfd2lkZ2V0LmNjIGd1aV9rZGVfeDExLmNjIGd1aV9rZGVfd2lkZ2V0X21vYy5jYworQUxMX0dVSV9TUkMgID0gZ3VpLmMgZ3VpX2d0ay5jIGd1aV9ndGtfZi5jIGd1aV9tb3RpZi5jIGd1aV9hdGhlbmEuYyBndWlfZ3RrX3gxMS5jIGd1aV94MTEuYyBndWlfYXRfc2IuYyBndWlfYXRfZnMuYyBwdHkuYyBndWlfa2RlLmNjIGd1aV9rZGVfd2lkLmNjIGd1aV9rZGVfeDExLmNjIGd1aV9rZGVfd2lkX21vYy5jYwogQUxMX0dVSV9QUk8gID0gZ3VpLnBybyBndWlfZ3RrLnBybyBndWlfbW90aWYucHJvIGd1aV9hdGhlbmEucHJvIGd1aV9ndGtfeDExLnBybyBndWlfeDExLnBybyBndWlfdzE2LnBybyBndWlfdzMyLnBybyBndWlfYW1pZ2EucHJvIGd1aV9waG90b24ucHJvIGd1aV9rZGUucHJvIGd1aV9rZGVfeDExLnBybwogCiAjIH19fQpAQCAtMjAzOCw3ICsyMDM4LDcgQEAKIAktcm0gLWYgJChUT09MUykgYXV0by9vc2RlZi5oIGF1dG8vcGF0aGRlZi5jIGF1dG8vaWZfcGVybC5jCiAJLXJtIC1mIGNvbmZ0ZXN0KiAqfiBhdXRvL2xpbmsuc2VkCiAJLXJtIC1yZiAkKEdVSV9CVU5ETEUpCi0JLXJtIC1mIGd1aV9rZGVfd2lkZ2V0X21vYy5jYyBrdmltX2lmYWNlX3NrZWwuY2MgKi5raWRsCisJLXJtIC1mIGd1aV9rZGVfd2lkX21vYy5jYyBrdmltX2lmYWNlX3NrZWwuY2MgKi5raWRsCiAJaWYgdGVzdCAtZCAkKFBPRElSKTsgdGhlbiBcCiAJCWNkICQoUE9ESVIpOyAkKE1BS0UpIHByZWZpeD0kKERFU1RESVIpJChwcmVmaXgpIGNsZWFuOyBcCiAJZmkKQEAgLTIzOTMsMTcgKzIzOTMsMTcgQEAKIG9iamVjdHMvZ3VpX2tkZV94MTEubzogZ3VpX2tkZV94MTEuY2MKIAkkKENDQykgLW8gJEAgZ3VpX2tkZV94MTEuY2MKIAotb2JqZWN0cy9ndWlfa2RlX3dpZGdldC5vOiBndWlfa2RlX3dpZGdldC5jYwotCSQoTU9DKSAtbyBndWlfa2RlX3dpZGdldF9tb2MuY2MgZ3VpX2tkZV93aWRnZXQuaAorb2JqZWN0cy9ndWlfa2RlX3dpZC5vOiBndWlfa2RlX3dpZC5jYworCSQoTU9DKSAtbyBndWlfa2RlX3dpZF9tb2MuY2MgZ3VpX2tkZV93aWQuaAogCSQoS0RFX0RJUikvYmluL2Rjb3BpZGwga3ZpbV9pZmFjZS5oID4ga3ZpbV9pZmFjZS5raWRsIHx8ICggcm0gLWYga3ZpbV9pZmFjZS5raWRsIDsgL2Jpbi9mYWxzZSApCiAJJChLREVfRElSKS9iaW4vZGNvcGlkbDJjcHAgLS1jKystc3VmZml4IGNjIC0tbm8tc3R1YiBrdmltX2lmYWNlLmtpZGwKLQkkKENDQykgLW8gJEAgZ3VpX2tkZV93aWRnZXQuY2MKKwkkKENDQykgLW8gJEAgZ3VpX2tkZV93aWQuY2MKIAotZ3VpX2tkZV93aWRnZXRfbW9jLmNjOiBvYmplY3RzL2d1aV9rZGVfd2lkZ2V0Lm8KLW9iamVjdHMvZ3VpX2tkZV93aWRnZXRfbW9jLm86IGd1aV9rZGVfd2lkZ2V0X21vYy5jYwotCSQoQ0NDKSAtbyAkQCBndWlfa2RlX3dpZGdldF9tb2MuY2MKK2d1aV9rZGVfd2lkX21vYy5jYzogb2JqZWN0cy9ndWlfa2RlX3dpZC5vCitvYmplY3RzL2d1aV9rZGVfd2lkX21vYy5vOiBndWlfa2RlX3dpZF9tb2MuY2MKKwkkKENDQykgLW8gJEAgZ3VpX2tkZV93aWRfbW9jLmNjCiAKLWt2aW1faWZhY2Vfc2tlbC5jYzogb2JqZWN0cy9ndWlfa2RlX3dpZGdldC5vCitrdmltX2lmYWNlX3NrZWwuY2M6IG9iamVjdHMvZ3VpX2tkZV93aWQubwogb2JqZWN0cy9rdmltX2lmYWNlX3NrZWwubzoga3ZpbV9pZmFjZV9za2VsLmNjCiAJJChDQ0MpIC1vICRAIGt2aW1faWZhY2Vfc2tlbC5jYwogCkBAIC0yNzE2LDIxICsyNzE2LDIxIEBACiAgYXNjaWkuaCBrZXltYXAuaCB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIGd1aS5oIGd1aV9iZXZhbC5oIFwKICBwcm90by9ndWlfYmV2YWwucHJvIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIGdsb2JhbHMuaCBmYXJzaS5oIFwKICBhcmFiaWMuaAotb2JqZWN0cy9ndWlfa2RlLm86IGd1aV9rZGUuY2MgZ3VpX2tkZV93aWRnZXQuaCBrdmltX2lmYWNlLmggdmltLmggXAorb2JqZWN0cy9ndWlfa2RlLm86IGd1aV9rZGUuY2MgZ3VpX2tkZV93aWQuaCBrdmltX2lmYWNlLmggdmltLmggXAogIGF1dG8vY29uZmlnLmggZmVhdHVyZS5oIG9zX3VuaXguaCBhdXRvL29zZGVmLmggYXNjaWkuaCBrZXltYXAuaCBcCiAgdGVybS5oIG1hY3Jvcy5oIHN0cnVjdHMuaCByZWdleHAuaCBndWkuaCBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBcCiAgZ2xvYmFscy5oIGZhcnNpLmgKLW9iamVjdHMvZ3VpX2tkZV93aWRnZXQubzogZ3VpX2tkZV93aWRnZXQuY2MgZ3VpX2tkZV93aWRnZXQuaCBrdmltX2lmYWNlLmggXAorb2JqZWN0cy9ndWlfa2RlX3dpZC5vOiBndWlfa2RlX3dpZC5jYyBndWlfa2RlX3dpZC5oIGt2aW1faWZhY2UuaCBcCiAgdmltLmggYXV0by9jb25maWcuaCBmZWF0dXJlLmggb3NfdW5peC5oIGF1dG8vb3NkZWYuaCBhc2NpaS5oIGtleW1hcC5oIFwKICB0ZXJtLmggbWFjcm9zLmggc3RydWN0cy5oIHJlZ2V4cC5oIGd1aS5oIG9wdGlvbi5oIGV4X2NtZHMuaCBwcm90by5oIFwKICBnbG9iYWxzLmggZmFyc2kuaCBwcm90by8uLi8uLi9waXhtYXBzL2FsZXJ0LnhwbSBwcm90by8uLi8uLi9waXhtYXBzL2Vycm9yLnhwbSBcCiAgcHJvdG8vLi4vLi4vcGl4bWFwcy9nZW5lcmljLnhwbSBwcm90by8uLi8uLi9waXhtYXBzL2luZm8ueHBtIFwKICBwcm90by8uLi8uLi9waXhtYXBzL3F1ZXN0LnhwbQotb2JqZWN0cy9ndWlfa2RlX3gxMS5vOiBndWlfa2RlX3gxMS5jYyBndWlfa2RlX3dpZGdldC5oIGt2aW1faWZhY2UuaCB2aW0uaCBcCitvYmplY3RzL2d1aV9rZGVfeDExLm86IGd1aV9rZGVfeDExLmNjIGd1aV9rZGVfd2lkLmgga3ZpbV9pZmFjZS5oIHZpbS5oIFwKICBhdXRvL2NvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggYXV0by9vc2RlZi5oIGFzY2lpLmgga2V5bWFwLmggXAogIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggZ3VpLmggb3B0aW9uLmggZXhfY21kcy5oIHByb3RvLmggXAogIGdsb2JhbHMuaCBmYXJzaS5oIHZlcnNpb24uaCAuLi9ydW50aW1lL3ZpbTMyeDMyLnhwbQotb2JqZWN0cy9ndWlfa2RlX3dpZGdldF9tb2MubzogZ3VpX2tkZV93aWRnZXRfbW9jLmNjIGd1aV9rZGVfd2lkZ2V0LmggXAorb2JqZWN0cy9ndWlfa2RlX3dpZF9tb2MubzogZ3VpX2tkZV93aWRfbW9jLmNjIGd1aV9rZGVfd2lkLmggXAogIGt2aW1faWZhY2UuaCB2aW0uaCBhdXRvL2NvbmZpZy5oIGZlYXR1cmUuaCBvc191bml4LmggYXV0by9vc2RlZi5oIFwKICBhc2NpaS5oIGtleW1hcC5oIHRlcm0uaCBtYWNyb3MuaCBzdHJ1Y3RzLmggcmVnZXhwLmggZ3VpLmggb3B0aW9uLmggXAogIGV4X2NtZHMuaCBwcm90by5oIGdsb2JhbHMuaApkaWZmIC0tZ2l0IGEvc3JjL2J1ZmZlci5jIGIvc3JjL2J1ZmZlci5jCmluZGV4IDRkMDdlYjYuLmMyYmMwOTQgMTAwNjQ0Ci0tLSBhL3NyYy9idWZmZXIuYworKysgYi9zcmMvYnVmZmVyLmMKQEAgLTIxNiw2ICsyMTYsMTIgQEAKICNlbmRpZgogCWN1cmJ1Zi0+Yl9mbGFncyB8PSBCRl9SRUFERVJSOwogCisjaWZkZWYgRkVBVF9GT0xESU5HCisgICAgLyogTmVlZCB0byB1cGRhdGUgYXV0b21hdGljIGZvbGRpbmcuICBEbyB0aGlzIGJlZm9yZSB0aGUgYXV0b2NvbW1hbmRzLAorICAgICAqIHRoZXkgbWF5IHVzZSB0aGUgZm9sZCBpbmZvLiAqLworICAgIGZvbGRVcGRhdGVBbGwoY3Vyd2luKTsKKyNlbmRpZgorCiAjaWZkZWYgRkVBVF9BVVRPQ01ECiAgICAgLyogbmVlZCB0byBzZXQgd190b3BsaW5lLCB1bmxlc3Mgc29tZSBhdXRvY29tbWFuZCBhbHJlYWR5IGRpZCB0aGF0LiAqLwogICAgIGlmICghKGN1cndpbi0+d192YWxpZCAmIFZBTElEX1RPUExJTkUpKQpAQCAtMjYzLDExICsyNjksNiBAQAogI2VuZGlmCiAgICAgfQogCi0jaWZkZWYgRkVBVF9GT0xESU5HCi0gICAgLyogTmVlZCB0byB1cGRhdGUgYXV0b21hdGljIGZvbGRpbmcuICovCi0gICAgZm9sZFVwZGF0ZUFsbChjdXJ3aW4pOwotI2VuZGlmCi0KICAgICByZXR1cm4gcmV0dmFsOwogfQogCkBAIC00MDgsOCArNDA5LDcgQEAKICAgICBpZiAoIWJ1Zl92YWxpZChidWYpKQogCXJldHVybjsKICMgaWZkZWYgRkVBVF9FVkFMCi0gICAgLyogQXV0b2NvbW1hbmRzIG1heSBhYm9ydCBzY3JpcHQgcHJvY2Vzc2luZy4gKi8KLSAgICBpZiAoYWJvcnRpbmcoKSkKKyAgICBpZiAoYWJvcnRpbmcoKSkJICAgIC8qIGF1dG9jbWRzIG1heSBhYm9ydCBzY3JpcHQgcHJvY2Vzc2luZyAqLwogCXJldHVybjsKICMgZW5kaWYKIApAQCAtNTM4LDcgKzUzOCw4IEBACiAJICAgIHJldHVybjsKICAgICB9CiAjIGlmZGVmIEZFQVRfRVZBTAotICAgIGlmIChhYm9ydGluZygpKQkgICAgLyogYXV0b2NtZHMgbWF5IGFib3J0IHNjcmlwdCBwcm9jZXNzaW5nICovCisgICAgLyogYXV0b2NtZHMgbWF5IGFib3J0IHNjcmlwdCBwcm9jZXNzaW5nICovCisgICAgaWYgKGFib3J0aW5nKCkpCiAJcmV0dXJuOwogIyBlbmRpZgogCkBAIC02NjksOCArNjcwLDE2IEBACiAJCSYmIChkZWZpbmVkKEZFQVRfR1VJX0RJQUxPRykgfHwgZGVmaW5lZChGRUFUX0NPTl9ESUFMT0cpKQogICAgIGlmIChzd2FwX2V4aXN0c19hY3Rpb24gPT0gU0VBX1FVSVQgJiYgKmVhcC0+Y21kID09ICdzJykKICAgICB7Ci0JLyogUXVpdHRpbmcgbWVhbnMgY2xvc2luZyB0aGUgc3BsaXQgd2luZG93LCBub3RoaW5nIGVsc2UuICovCisJaW50CW9sZF9nb3RfaW50ID0gZ290X2ludDsKKworCS8qIFF1aXR0aW5nIG1lYW5zIGNsb3NpbmcgdGhlIHNwbGl0IHdpbmRvdywgbm90aGluZyBlbHNlLgorCSAqIFJlc2V0IGdvdF9pbnQgaGVyZSwgYmVjYXVzZSBpdCBjYXVzZXMgYWJvcnRpbmcoKSB0byByZXR1cm4gVFJVRQorCSAqIHdoaWNoIGJyZWFrcyBjbG9zaW5nIGEgd2luZG93LiAqLworCWdvdF9pbnQgPSBGQUxTRTsKKwogCXdpbl9jbG9zZShjdXJ3aW4sIFRSVUUpOworCisJZ290X2ludCB8PSBvbGRfZ290X2ludDsKIAlzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfTk9ORTsKICAgICB9CiAgICAgZWxzZQpAQCAtNjg4LDYgKzY5NywxMiBAQAogaGFuZGxlX3N3YXBfZXhpc3RzKG9sZF9jdXJidWYpCiAgICAgYnVmX1QJKm9sZF9jdXJidWY7CiB7CisgICAgaW50CQlvbGRfZ290X2ludCA9IGdvdF9pbnQ7CisKKyAgICAvKiBSZXNldCBnb3RfaW50IGhlcmUsIGJlY2F1c2UgaXQgY2F1c2VzIGFib3J0aW5nKCkgdG8gcmV0dXJuIFRSVUUgd2hpY2gKKyAgICAgKiBicmVha3MgY2xvc2luZyBhIGJ1ZmZlci4gKi8KKyAgICBnb3RfaW50ID0gRkFMU0U7CisKICAgICBpZiAoc3dhcF9leGlzdHNfYWN0aW9uID09IFNFQV9RVUlUKQogICAgIHsKIAkvKiBVc2VyIHNlbGVjdGVkIFF1aXQgYXQgQVRURU5USU9OIHByb21wdC4gIEdvIGJhY2sgdG8gcHJldmlvdXMKQEAgLTcxMiw2ICs3MjcsNyBAQAogCWRvX21vZGVsaW5lcygpOwogICAgIH0KICAgICBzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfTk9ORTsKKyAgICBnb3RfaW50IHw9IG9sZF9nb3RfaW50OwogfQogI2VuZGlmCiAKQEAgLTQyMjYsMjYgKzQyNDIsMjggQEAKICNlbmRpZgogCSAgICBzZXRfY3VyYnVmKGJ1ZiwgRE9CVUZfR09UTyk7CiAjaWZkZWYgRkVBVF9BVVRPQ01ECi0jIGlmZGVmIEZFQVRfRVZBTAotCSAgICAvKiBBdXRvY29tbWFuZHMgZGVsZXRlZCB0aGUgYnVmZmVyIG9yIGFib3J0ZWQgc2NyaXB0Ci0JICAgICAqIHByb2Nlc3NpbmchISEgKi8KLQkgICAgaWYgKCFidWZfdmFsaWQoYnVmKSB8fCBhYm9ydGluZygpKQotIyBlbHNlCiAJICAgIGlmICghYnVmX3ZhbGlkKGJ1ZikpCS8qIGF1dG9jb21tYW5kcyBkZWxldGVkIHRoZSBidWZmZXIhISEgKi8KLSMgZW5kaWYKIAkgICAgewotI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykKKyMgaWYgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpIHx8IGRlZmluZWQoRkVBVF9DT05fRElBTE9HKQogCQlzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfTk9ORTsKLSNlbmRpZgorIyBlbmRpZgogCQlicmVhazsKIAkgICAgfQogI2VuZGlmCiAjaWYgZGVmaW5lZChGRUFUX0dVSV9ESUFMT0cpIHx8IGRlZmluZWQoRkVBVF9DT05fRElBTE9HKQogCSAgICBpZiAoc3dhcF9leGlzdHNfYWN0aW9uID09IFNFQV9RVUlUKQogCSAgICB7Ci0JCS8qIFVzZXIgc2VsZWN0ZWQgUXVpdCBhdCBBVFRFTlRJT04gcHJvbXB0OyBjbG9zZSB0aGlzIHdpbmRvdy4gKi8KKwkJaW50CW9sZF9nb3RfaW50ID0gZ290X2ludDsKKworCQkvKiBVc2VyIHNlbGVjdGVkIFF1aXQgYXQgQVRURU5USU9OIHByb21wdDsgY2xvc2UgdGhpcyB3aW5kb3cuCisJCSAqIFJlc2V0IGdvdF9pbnQgaGVyZSwgYmVjYXVzZSBpdCBjYXVzZXMgYWJvcnRpbmcoKSB0byByZXR1cm4KKwkJICogVFJVRSB3aGljaCBicmVha3MgY2xvc2luZyBhIHdpbmRvdy4gKi8KKwkJZ290X2ludCA9IEZBTFNFOworCiAJCXdpbl9jbG9zZShjdXJ3aW4sIFRSVUUpOwogCQktLW9wZW5fd2luczsKKworCQlnb3RfaW50IHw9IG9sZF9nb3RfaW50OwogCQlzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfTk9ORTsKIAkgICAgfQogCSAgICBlbHNlCkBAIC00MjU5LDYgKzQyNzcsMTEgQEAKIAkgICAgKHZvaWQpdmdldGMoKTsJLyogb25seSBicmVhayB0aGUgZmlsZSBsb2FkaW5nLCBub3QgdGhlIHJlc3QgKi8KIAkgICAgYnJlYWs7CiAJfQorI2lmZGVmIEZFQVRfRVZBTAorCS8qIEF1dG9jb21tYW5kcyBkZWxldGVkIHRoZSBidWZmZXIgb3IgYWJvcnRlZCBzY3JpcHQgcHJvY2Vzc2luZyEhISAqLworCWlmIChhYm9ydGluZygpKQorCSAgICBicmVhazsKKyNlbmRpZgogICAgIH0KICNpZmRlZiBGRUFUX0FVVE9DTUQKICAgICAtLWF1dG9jbWRfbm9fZW50ZXI7CmRpZmYgLS1naXQgYS9zcmMvZWRpdC5jIGIvc3JjL2VkaXQuYwppbmRleCAwY2E2OThjLi4xZTJhZGVkIDEwMDY0NAotLS0gYS9zcmMvZWRpdC5jCisrKyBiL3NyYy9lZGl0LmMKQEAgLTI2NDEsNyArMjY0MSw3IEBACiAKICNpZmRlZiBGRUFUX0NPTVBMX0ZVTkMKIHN0YXRpYyBjaGFyX3UgKmNhbGxfY29tcGxldGVmdW5jIF9fQVJHUygoY2hhcl91ICpsaW5lLCBjaGFyX3UgKmJhc2UsIGludCBjb2wsIGludCBwcmVwcm9jKSk7Ci1zdGF0aWMgaW50IGV4cGFuZF9ieV9mdW5jdGlvbiBfX0FSR1MoKGludCBsbnVtLCBpbnQgY29sLCBjaGFyX3UgKmJhc2UsIGNoYXJfdSAqKiptYXRjaGVzKSk7CitzdGF0aWMgaW50IGV4cGFuZF9ieV9mdW5jdGlvbiBfX0FSR1MoKGxpbmVucl9UIGxudW0sIGludCBjb2wsIGNoYXJfdSAqYmFzZSwgY2hhcl91ICoqKm1hdGNoZXMpKTsKIAogLyoKICAqIEV4ZWN1dGUgdXNlciBkZWZpbmVkIGNvbXBsZXRlIGZ1bmN0aW9uICdjb21wbGV0ZWZ1bmMnLgpAQCAtMjY2NSw3ICsyNjY1LDcgQEAKICAgICBhcmdzWzBdID0gbGluZTsKICAgICBhcmdzWzFdID0gYmFzZTsKICAgICBhcmdzWzJdID0gY29sYnVmOwotICAgIGFyZ3NbM10gPSBwcmVwcm9jID8gIjEiIDogIjAiOworICAgIGFyZ3NbM10gPSAoY2hhcl91ICopKHByZXByb2MgPyAiMSIgOiAiMCIpOwogICAgIHJldHVybiBjYWxsX3ZpbV9mdW5jdGlvbihjdXJidWYtPmJfcF9jZnUsIDQsIGFyZ3MsIEZBTFNFKTsKIH0KIApAQCAtMjY3Niw3ICsyNjc2LDcgQEAKICAqLwogICAgIHN0YXRpYyBpbnQKIGV4cGFuZF9ieV9mdW5jdGlvbihsbnVtLCBjb2wsIGJhc2UsIG1hdGNoZXMpCi0gICAgaW50CQlsbnVtOworICAgIGxpbmVucl9UCWxudW07CiAgICAgaW50CQljb2w7CiAgICAgY2hhcl91CSpiYXNlOwogICAgIGNoYXJfdQkqKiptYXRjaGVzOwpAQCAtMzUyOCw3ICszNTI4LDcgQEAKIAkgICAgbGVuc3RyID0gY2FsbF9jb21wbGV0ZWZ1bmMobGluZSwgTlVMTCwgY29tcGxldGVfY29sLCAxKTsKIAkgICAgaWYgKGxlbnN0ciA9PSBOVUxMKQogCQlyZXR1cm4gRkFJTDsKLQkgICAga2VlcGxlbiA9IGF0b2kobGVuc3RyKTsKKwkgICAga2VlcGxlbiA9IGF0b2koKGNoYXIgKilsZW5zdHIpOwogCSAgICB2aW1fZnJlZShsZW5zdHIpOwogCSAgICBpZiAoa2VlcGxlbiA8IDApCiAJCXJldHVybiBGQUlMOwpkaWZmIC0tZ2l0IGEvc3JjL2V2YWwuYyBiL3NyYy9ldmFsLmMKaW5kZXggYjI5NTVmZi4uNzg1MTNhMiAxMDA2NDQKLS0tIGEvc3JjL2V2YWwuYworKysgYi9zcmMvZXZhbC5jCkBAIC0yOTUsOCArMjk1LDEwIEBACiBzdGF0aWMgdm9pZCBmX2dldGNtZGxpbmUgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOwogc3RhdGljIHZvaWQgZl9nZXRjbWRwb3MgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOwogc3RhdGljIHZvaWQgZl9nZXRjd2QgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9nZXRmcGVybSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CiBzdGF0aWMgdm9pZCBmX2dldGZzaXplIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKIHN0YXRpYyB2b2lkIGZfZ2V0ZnRpbWUgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOworc3RhdGljIHZvaWQgZl9nZXRmdHlwZSBfX0FSR1MoKFZBUiBhcmd2YXJzLCBWQVIgcmV0dmFyKSk7CiBzdGF0aWMgdm9pZCBmX2dldGxpbmUgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOwogc3RhdGljIHZvaWQgZl9nZXRyZWcgX19BUkdTKChWQVIgYXJndmFycywgVkFSIHJldHZhcikpOwogc3RhdGljIHZvaWQgZl9nZXRyZWd0eXBlIF9fQVJHUygoVkFSIGFyZ3ZhcnMsIFZBUiByZXR2YXIpKTsKQEAgLTc1MSw3ICs3NTMsNyBAQAogCWlmIChhcmd2W2ldID09IE5VTEwgfHwgKmFyZ3ZbaV0gPT0gTlVMKQogCXsKIAkgICAgYXJndmFyc1tpXS52YXJfdHlwZSA9IFZBUl9TVFJJTkc7Ci0JICAgIGFyZ3ZhcnNbaV0udmFyX3ZhbC52YXJfc3RyaW5nID0gIiI7CisJICAgIGFyZ3ZhcnNbaV0udmFyX3ZhbC52YXJfc3RyaW5nID0gKGNoYXJfdSAqKSIiOwogCSAgICBjb250aW51ZTsKIAl9CiAKQEAgLTI4NTMsOCArMjg1NSwxMCBAQAogICAgIHsiZ2V0Y21kbGluZSIsCTAsIDAsIGZfZ2V0Y21kbGluZX0sCiAgICAgeyJnZXRjbWRwb3MiLAkwLCAwLCBmX2dldGNtZHBvc30sCiAgICAgeyJnZXRjd2QiLAkJMCwgMCwgZl9nZXRjd2R9LAorICAgIHsiZ2V0ZnBlcm0iLAkxLCAxLCBmX2dldGZwZXJtfSwKICAgICB7ImdldGZzaXplIiwJMSwgMSwgZl9nZXRmc2l6ZX0sCiAgICAgeyJnZXRmdGltZSIsCTEsIDEsIGZfZ2V0ZnRpbWV9LAorICAgIHsiZ2V0ZnR5cGUiLAkxLCAxLCBmX2dldGZ0eXBlfSwKICAgICB7ImdldGxpbmUiLAkJMSwgMSwgZl9nZXRsaW5lfSwKICAgICB7ImdldHJlZyIsCQkwLCAxLCBmX2dldHJlZ30sCiAgICAgeyJnZXRyZWd0eXBlIiwJMCwgMSwgZl9nZXRyZWd0eXBlfSwKQEAgLTI5NDEsNyArMjk0NSw3IEBACiAgICAgeyJ3aW5jb2wiLAkJMCwgMCwgZl93aW5jb2x9LAogICAgIHsid2luaGVpZ2h0IiwJMSwgMSwgZl93aW5oZWlnaHR9LAogICAgIHsid2lubGluZSIsCQkwLCAwLCBmX3dpbmxpbmV9LAotICAgIHsid2lubnIiLAkJMCwgMCwgZl93aW5ucn0sCisgICAgeyJ3aW5uciIsCQkwLCAxLCBmX3dpbm5yfSwKICAgICB7IndpbnJlc3RjbWQiLAkwLCAwLCBmX3dpbnJlc3RjbWR9LAogICAgIHsid2lud2lkdGgiLAkxLCAxLCBmX3dpbndpZHRofSwKIH07CkBAIC00NTc4LDYgKzQ1ODIsMzggQEAKIH0KIAogLyoKKyAqICJnZXRmcGVybSh7Zm5hbWV9KSIgZnVuY3Rpb24KKyAqLworICAgIHN0YXRpYyB2b2lkCitmX2dldGZwZXJtKGFyZ3ZhcnMsIHJldHZhcikKKyAgICBWQVIJCWFyZ3ZhcnM7CisgICAgVkFSCQlyZXR2YXI7Cit7CisgICAgY2hhcl91CSpmbmFtZTsKKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICBjaGFyX3UJKnBlcm0gPSBOVUxMOworICAgIGNoYXJfdQlmbGFnc1tdID0gInJ3eCI7CisgICAgaW50CQlpOworCisgICAgZm5hbWUgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSk7CisKKyAgICByZXR2YXItPnZhcl90eXBlID0gVkFSX1NUUklORzsKKyAgICBpZiAobWNoX3N0YXQoKGNoYXIgKilmbmFtZSwgJnN0KSA+PSAwKQorICAgIHsKKwlwZXJtID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKSItLS0tLS0tLS0iKTsKKwlpZiAocGVybSAhPSBOVUxMKQorCXsKKwkgICAgZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkgICAgeworCQlpZiAoc3Quc3RfbW9kZSAmICgxIDw8ICg4IC0gaSkpKQorCQkgICAgcGVybVtpXSA9IGZsYWdzW2kgJSAzXTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBwZXJtOworfQorCisvKgogICogImdldGZzaXplKHtmbmFtZX0pIiBmdW5jdGlvbgogICovCiAgICAgc3RhdGljIHZvaWQKQEAgLTQ2MjMsNiArNDY1OSw4NiBAQAogfQogCiAvKgorICogImdldGZ0eXBlKHtmbmFtZX0pIiBmdW5jdGlvbgorICovCisgICAgc3RhdGljIHZvaWQKK2ZfZ2V0ZnR5cGUoYXJndmFycywgcmV0dmFyKQorICAgIFZBUgkJYXJndmFyczsKKyAgICBWQVIJCXJldHZhcjsKK3sKKyAgICBjaGFyX3UJKmZuYW1lOworICAgIHN0cnVjdCBzdGF0IHN0OworICAgIGNoYXJfdQkqdHlwZSA9IE5VTEw7CisgICAgY2hhcgkqdDsKKworICAgIGZuYW1lID0gZ2V0X3Zhcl9zdHJpbmcoJmFyZ3ZhcnNbMF0pOworCisgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CisgICAgaWYgKG1jaF9sc3RhdCgoY2hhciAqKWZuYW1lLCAmc3QpID49IDApCisgICAgeworI2lmZGVmIFNfSVNSRUcKKwlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkgICAgdCA9ICJmaWxlIjsKKwllbHNlIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKQorCSAgICB0ID0gImRpciI7CisjIGlmZGVmIFNfSVNMTksKKwllbHNlIGlmIChTX0lTTE5LKHN0LnN0X21vZGUpKQorCSAgICB0ID0gImxpbmsiOworIyBlbmRpZgorIyBpZmRlZiBTX0lTQkxLCisJZWxzZSBpZiAoU19JU0JMSyhzdC5zdF9tb2RlKSkKKwkgICAgdCA9ICJiZGV2IjsKKyMgZW5kaWYKKyMgaWZkZWYgU19JU0NIUgorCWVsc2UgaWYgKFNfSVNDSFIoc3Quc3RfbW9kZSkpCisJICAgIHQgPSAiY2RldiI7CisjIGVuZGlmCisjIGlmZGVmIFNfSVNGSUZPCisJZWxzZSBpZiAoU19JU0ZJRk8oc3Quc3RfbW9kZSkpCisJICAgIHQgPSAiZmlmbyI7CisjIGVuZGlmCisjIGlmZGVmIFNfSVNTT0NLCisJZWxzZSBpZiAoU19JU1NPQ0soc3Quc3RfbW9kZSkpCisJICAgIHQgPSAiZmlmbyI7CisjIGVuZGlmCisJZWxzZQorCSAgICB0ID0gIm90aGVyIjsKKyNlbHNlCisjIGlmZGVmIFNfSUZNVAorCXN3aXRjaCAoc3Quc3RfbW9kZSAmIFNfSUZNVCkKKwl7CisJICAgIGNhc2UgU19JRlJFRzogdCA9ICJmaWxlIjsgYnJlYWs7CisJICAgIGNhc2UgU19JRkRJUjogdCA9ICJkaXIiOyBicmVhazsKKyMgIGlmZGVmIFNfSUZMTksKKwkgICAgY2FzZSBTX0lGTE5LOiB0ID0gImxpbmsiOyBicmVhazsKKyMgIGVuZGlmCisjICBpZmRlZiBTX0lGQkxLCisJICAgIGNhc2UgU19JRkJMSzogdCA9ICJiZGV2IjsgYnJlYWs7CisjICBlbmRpZgorIyAgaWZkZWYgU19JRkNIUgorCSAgICBjYXNlIFNfSUZDSFI6IHQgPSAiY2RldiI7IGJyZWFrOworIyAgZW5kaWYKKyMgIGlmZGVmIFNfSUZJRk8KKwkgICAgY2FzZSBTX0lGSUZPOiB0ID0gImZpZm8iOyBicmVhazsKKyMgIGVuZGlmCisjICBpZmRlZiBTX0lGU09DSworCSAgICBjYXNlIFNfSUZTT0NLOiB0ID0gInNvY2tldCI7IGJyZWFrOworIyAgZW5kaWYKKwkgICAgZGVmYXVsdDogdCA9ICJvdGhlciI7CisJfQorIyBlbHNlCisJaWYgKG1jaF9pc2RpcihmbmFtZSkpCisJICAgIHQgPSAiZGlyIjsKKwllbHNlCisJICAgIHQgPSAiZmlsZSI7CisjIGVuZGlmCisjZW5kaWYKKwl0eXBlID0gdmltX3N0cnNhdmUoKGNoYXJfdSAqKXQpOworICAgIH0KKyAgICByZXR2YXItPnZhcl92YWwudmFyX3N0cmluZyA9IHR5cGU7Cit9CisKKy8qCiAgKiAiZ2V0cmVnKCkiIGZ1bmN0aW9uCiAgKi8KICAgICBzdGF0aWMgdm9pZApAQCAtNjMwNSw2ICs2NDIxLDEwIEBACiAgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7CiB9CiAKKyNkZWZpbmUgU1BfTk9NT1ZFCTEJLyogZG9uJ3QgbW92ZSBjdXJzb3IgKi8KKyNkZWZpbmUgU1BfUkVQRUFUCTIJLyogcmVwZWF0IHRvIGZpbmQgb3V0ZXIgcGFpciAqLworI2RlZmluZSBTUF9SRVRDT1VOVAk0CS8qIHJldHVybiBtYXRjaGNvdW50ICovCisKIC8qCiAgKiAic2VhcmNoKCkiIGZ1bmN0aW9uCiAgKi8KQEAgLTYzMTUsMTMgKzY0MzUsMjQgQEAKIHsKICAgICBjaGFyX3UJKnBhdDsKICAgICBwb3NfVAlwb3M7CisgICAgcG9zX1QJc2F2ZV9jdXJzb3I7CiAgICAgaW50CQlzYXZlX3Bfd3MgPSBwX3dzOwogICAgIGludAkJZGlyOworICAgIGludAkJZmxhZ3MgPSAwOworCisgICAgcmV0dmFyLT52YXJfdmFsLnZhcl9udW1iZXIgPSAwOwkvKiBkZWZhdWx0OiBGQUlMICovCiAKICAgICBwYXQgPSBnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSk7Ci0gICAgZGlyID0gZ2V0X3NlYXJjaF9hcmcoJmFyZ3ZhcnNbMV0sIE5VTEwpOwkvKiBtYXkgc2V0IHBfd3MgKi8KKyAgICBkaXIgPSBnZXRfc2VhcmNoX2FyZygmYXJndmFyc1sxXSwgJmZsYWdzKTsJLyogbWF5IHNldCBwX3dzICovCisgICAgaWYgKGRpciA9PSAwKQorCWdvdG8gdGhlZW5kOworICAgIGlmICgoZmxhZ3MgJiB+U1BfTk9NT1ZFKSAhPSAwKQorICAgIHsKKwlFTVNHMihfKGVfaW52YXJnMiksIGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzFdKSk7CisJZ290byB0aGVlbmQ7CisgICAgfQogCi0gICAgcG9zID0gY3Vyd2luLT53X2N1cnNvcjsKKyAgICBwb3MgPSBzYXZlX2N1cnNvciA9IGN1cndpbi0+d19jdXJzb3I7CiAgICAgaWYgKHNlYXJjaGl0KGN1cndpbiwgY3VyYnVmLCAmcG9zLCBkaXIsIHBhdCwgMUwsCiAJCQkJCSAgICAgIFNFQVJDSF9LRUVQLCBSRV9TRUFSQ0gpICE9IEZBSUwpCiAgICAgewpAQCAtNjMzMSwxNSArNjQ2MiwxNCBAQAogCSAqIGNvcnJlY3QgdGhhdCBoZXJlICovCiAJY2hlY2tfY3Vyc29yKCk7CiAgICAgfQotICAgIGVsc2UKLQlyZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IDA7CisKKyAgICAvKiBJZiAnbicgZmxhZyBpcyB1c2VkOiByZXN0b3JlIGN1cnNvciBwb3NpdGlvbi4gKi8KKyAgICBpZiAoZmxhZ3MgJiBTUF9OT01PVkUpCisJY3Vyd2luLT53X2N1cnNvciA9IHNhdmVfY3Vyc29yOwordGhlZW5kOgogICAgIHBfd3MgPSBzYXZlX3Bfd3M7CiB9CiAKLSNkZWZpbmUgU1BfTk9NT1ZFCTEJLyogZG9uJ3QgbW92ZSBjdXJzb3IgKi8KLSNkZWZpbmUgU1BfUkVQRUFUCTIJLyogcmVwZWF0IHRvIGZpbmQgb3V0ZXIgcGFpciAqLwotI2RlZmluZSBTUF9SRVRDT1VOVAk0CS8qIHJldHVybiBtYXRjaGNvdW50ICovCi0KIC8qCiAgKiAic2VhcmNocGFpcigpIiBmdW5jdGlvbgogICovCkBAIC02MzkzLDYgKzY1MjMsOCBAQAogCiAgICAgLyogSGFuZGxlIHRoZSBvcHRpb25hbCBmb3VydGggYXJndW1lbnQ6IGZsYWdzICovCiAgICAgZGlyID0gZ2V0X3NlYXJjaF9hcmcoJmFyZ3ZhcnNbM10sICZmbGFncyk7IC8qIG1heSBzZXQgcF93cyAqLworICAgIGlmIChkaXIgPT0gMCkKKwlnb3RvIHRoZWVuZDsKIAogICAgIC8qIE9wdGlvbmFsIGZpZnRoIGFyZ3VtZW50OiBza2lwIGV4cHJlc2lvbiAqLwogICAgIGlmIChhcmd2YXJzWzNdLnZhcl90eXBlID09IFZBUl9VTktOT1dOCkBAIC02NDc0LDYgKzY2MDYsMTEgQEAKICAgICBwX2NwbyA9IHNhdmVfY3BvOwogfQogCisvKgorICogR2V0IGZsYWdzIGZvciBhIHNlYXJjaCBmdW5jdGlvbi4KKyAqIFBvc3NpYmx5IHNldHMgInBfd3MiLgorICogUmV0dXJucyBCQUNLV0FSRCwgRk9SV0FSRCBvciB6ZXJvIChmb3IgYW4gZXJyb3IpLgorICovCiAgICAgc3RhdGljIGludAogZ2V0X3NlYXJjaF9hcmcodmFycCwgZmxhZ3NwKQogICAgIFZBUgkJdmFycDsKQEAgLTY0ODIsMjQgKzY2MTksMzcgQEAKICAgICBpbnQJCWRpciA9IEZPUldBUkQ7CiAgICAgY2hhcl91CSpmbGFnczsKICAgICBjaGFyX3UJbmJ1ZltOVU1CVUZMRU5dOworICAgIGludAkJbWFzazsKIAogICAgIGlmICh2YXJwLT52YXJfdHlwZSAhPSBWQVJfVU5LTk9XTikKICAgICB7CiAJZmxhZ3MgPSBnZXRfdmFyX3N0cmluZ19idWYodmFycCwgbmJ1Zik7Ci0JaWYgKHZpbV9zdHJjaHIoZmxhZ3MsICdiJykgIT0gTlVMTCkKLQkgICAgZGlyID0gQkFDS1dBUkQ7Ci0JaWYgKHZpbV9zdHJjaHIoZmxhZ3MsICd3JykgIT0gTlVMTCkKLQkgICAgcF93cyA9IFRSVUU7Ci0JaWYgKHZpbV9zdHJjaHIoZmxhZ3MsICdXJykgIT0gTlVMTCkKLQkgICAgcF93cyA9IEZBTFNFOwotCWlmIChmbGFnc3AgIT0gTlVMTCkKKwl3aGlsZSAoKmZsYWdzICE9IE5VTCkKIAl7Ci0JICAgIGlmICh2aW1fc3RyY2hyKGZsYWdzLCAnbicpICE9IE5VTEwpCi0JCSpmbGFnc3AgfD0gU1BfTk9NT1ZFOwotCSAgICBpZiAodmltX3N0cmNocihmbGFncywgJ3InKSAhPSBOVUxMKQotCQkqZmxhZ3NwIHw9IFNQX1JFUEVBVDsKLQkgICAgaWYgKHZpbV9zdHJjaHIoZmxhZ3MsICdtJykgIT0gTlVMTCkKLQkJKmZsYWdzcCB8PSBTUF9SRVRDT1VOVDsKKwkgICAgc3dpdGNoICgqZmxhZ3MpCisJICAgIHsKKwkJY2FzZSAnYic6IGRpciA9IEJBQ0tXQVJEOyBicmVhazsKKwkJY2FzZSAndyc6IHBfd3MgPSBUUlVFOyBicmVhazsKKwkJY2FzZSAnVyc6IHBfd3MgPSBGQUxTRTsgYnJlYWs7CisJCWRlZmF1bHQ6ICBtYXNrID0gMDsKKwkJCSAgaWYgKGZsYWdzcCAhPSBOVUxMKQorCQkJICAgICBzd2l0Y2ggKCpmbGFncykKKwkJCSAgICAgeworCQkJCSBjYXNlICduJzogbWFzayA9IFNQX05PTU9WRTsgYnJlYWs7CisJCQkJIGNhc2UgJ3InOiBtYXNrID0gU1BfUkVQRUFUOyBicmVhazsKKwkJCQkgY2FzZSAnbSc6IG1hc2sgPSBTUF9SRVRDT1VOVDsgYnJlYWs7CisJCQkgICAgIH0KKwkJCSAgaWYgKG1hc2sgPT0gMCkKKwkJCSAgeworCQkJICAgICAgRU1TRzIoXyhlX2ludmFyZzIpLCBmbGFncyk7CisJCQkgICAgICBkaXIgPSAwOworCQkJICB9CisJCQkgIGVsc2UKKwkJCSAgICAgICpmbGFnc3AgfD0gbWFzazsKKwkgICAgfQorCSAgICBpZiAoZGlyID09IDApCisJCWJyZWFrOworCSAgICArK2ZsYWdzOwogCX0KICAgICB9CiAgICAgcmV0dXJuIGRpcjsKQEAgLTc2NDgsNyArNzc5OCw5IEBACiAJLyogbm90IG11bHRpLWJ5dGU6IGZyb21zdHIgYW5kIHRvc3RyIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoICovCiAJaWYgKFNUUkxFTihmcm9tc3RyKSAhPSBTVFJMRU4odG9zdHIpKQogCXsKKyNpZmRlZiBGRUFUX01CWVRFCiBlcnJvcjoKKyNlbmRpZgogCSAgICBFTVNHMihfKGVfaW52YXJnMiksIGZyb21zdHIpOwogCSAgICBnYV9jbGVhcigmZ2EpOwogCSAgICByZXR1cm47CkBAIC03ODU5LDkgKzgwMTEsMzAgQEAKICAgICBpbnQJCW5yID0gMTsKICNpZmRlZiBGRUFUX1dJTkRPV1MKICAgICB3aW5fVAkqd3A7CisgICAgd2luX1QJKnR3aW4gPSBjdXJ3aW47CisgICAgY2hhcl91CSphcmc7CiAKLSAgICBmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IGN1cndpbjsgd3AgPSB3cC0+d19uZXh0KQotCSsrbnI7CisgICAgaWYgKGFyZ3ZhcnNbMF0udmFyX3R5cGUgIT0gVkFSX1VOS05PV04pCisgICAgeworCWFyZyA9IGdldF92YXJfc3RyaW5nKCZhcmd2YXJzWzBdKTsKKwlpZiAoU1RSQ01QKGFyZywgIiQiKSA9PSAwKQorCSAgICB0d2luID0gbGFzdHdpbjsKKwllbHNlIGlmIChTVFJDTVAoYXJnLCAiIyIpID09IDApCisJeworCSAgICB0d2luID0gcHJldndpbjsKKwkgICAgaWYgKHByZXZ3aW4gPT0gTlVMTCkKKwkJbnIgPSAwOworCX0KKwllbHNlCisJeworCSAgICBFTVNHMihfKGVfaW52ZXhwcjIpLCBhcmcpOworCSAgICBuciA9IDA7CisJfQorICAgIH0KKworICAgIGlmIChuciA+IDApCisJZm9yICh3cCA9IGZpcnN0d2luOyB3cCAhPSB0d2luOyB3cCA9IHdwLT53X25leHQpCisJICAgICsrbnI7CiAjZW5kaWYKICAgICByZXR2YXItPnZhcl92YWwudmFyX251bWJlciA9IG5yOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2V4X2NtZHMyLmMgYi9zcmMvZXhfY21kczIuYwppbmRleCBkNGNmODZiLi5iNjUxZjM0IDEwMDY0NAotLS0gYS9zcmMvZXhfY21kczIuYworKysgYi9zcmMvZXhfY21kczIuYwpAQCAtMzgwNiw2ICszODA2LDcgQEAKICAgICB7IkNvdXJpZXIiLCAiQ291cmllci1Cb2xkIiwgIkNvdXJpZXItT2JsaXF1ZSIsICJDb3VyaWVyLUJvbGRPYmxpcXVlIn0KIH07CiAKKyNpZmRlZiBGRUFUX01CWVRFCiAvKiBHZW5lcmljIGZvbnQgbWV0cmljcyBmb3IgbXVsdGktYnl0ZSBmb250cyAqLwogc3RhdGljIHN0cnVjdCBwcnRfcHNfZm9udF9TIHBydF9wc19tYl9mb250ID0KIHsKQEAgLTM4MTQsNiArMzgxNSw3IEBACiAgICAgLTI1MCwgODA1LAogICAgIHtOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfQogfTsKKyNlbmRpZgogCiAvKiBQb2ludGVyIHRvIGN1cnJlbnQgZm9udCBzZXQgYmVpbmcgdXNlZCAqLwogc3RhdGljIHN0cnVjdCBwcnRfcHNfZm9udF9TKiBwcnRfcHNfZm9udDsKQEAgLTM4MjIsOCArMzgyNCw4IEBACiAgKiBidWlsZGluZyBDSUQgZm9udCBuYW1lICovCiBzdHJ1Y3QgcHJ0X3BzX2VuY29kaW5nX1MKIHsKLSAgICBjaGFyX3UJKmVuY29kaW5nOwotICAgIGNoYXJfdQkqY21hcF9lbmNvZGluZzsKKyAgICBjaGFyCSplbmNvZGluZzsKKyAgICBjaGFyCSpjbWFwX2VuY29kaW5nOwogICAgIGludAkJbmVlZHNfY2hhcnNldDsKIH07CiAKQEAgLTM4MzQsNiArMzgzNiw4IEBACiAgICAgaW50CQloYXNfY2hhcnNldDsKIH07CiAKKyNpZmRlZiBGRUFUX01CWVRFCisKICNkZWZpbmUgQ1NfSklTX0NfMTk3OCAgICgweDAxKQogI2RlZmluZSBDU19KSVNfWF8xOTgzICAgKDB4MDIpCiAjZGVmaW5lIENTX0pJU19YXzE5OTAgICAoMHgwNCkKQEAgLTQwMTcsNiArNDAyMSw3IEBACiAgICAgICAgICJLU19YXzE5OTIiCiAgICAgfQogfTsKKyNlbmRpZiAvKiBGRUFUX01CWVRFICovCiAKIHN0cnVjdCBwcnRfcHNfcmVzb3VyY2VfUwogewpAQCAtNDA3Niw3ICs0MDgxLDcgQEAKIAogc3RydWN0IHBydF9kc2NfY29tbWVudF9TCiB7Ci0gICAgY2hhcl91CSpzdHJpbmc7CisgICAgY2hhcgkqc3RyaW5nOwogICAgIGludAkJbGVuOwogICAgIGludAkJdHlwZTsKIH07CkBAIC00MDkyLDExICs0MDk3LDExIEBACiAjZGVmaW5lIFNJWkVPRl9DU1RSKHMpICAgICAgKHNpemVvZihzKSAtIDEpCiBzdHJ1Y3QgcHJ0X2RzY19jb21tZW50X1MgcHJ0X2RzY190YWJsZVtdID0KIHsKLSAgICB7UFJUX0RTQ19USVRMRSwgICAgICAgU0laRU9GX0NTVFIoUFJUX0RTQ19USVRMRSksICAgICAgIFBSVF9EU0NfVElUTEVfVFlQRX0sCisgICAge1BSVF9EU0NfVElUTEUsICAgICAgIFNJWkVPRl9DU1RSKFBSVF9EU0NfVElUTEUpLCAgICAgUFJUX0RTQ19USVRMRV9UWVBFfSwKICAgICB7UFJUX0RTQ19WRVJTSU9OLCAgICAgU0laRU9GX0NTVFIoUFJUX0RTQ19WRVJTSU9OKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJUX0RTQ19WRVJTSU9OX1RZUEV9LAorCQkJCQkJCVBSVF9EU0NfVkVSU0lPTl9UWVBFfSwKICAgICB7UFJUX0RTQ19FTkRDT01NRU5UUywgU0laRU9GX0NTVFIoUFJUX0RTQ19FTkRDT01NRU5UUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJUX0RTQ19FTkRDT01NRU5UU19UWVBFfQorCQkJCQkJICAgICBQUlRfRFNDX0VORENPTU1FTlRTX1RZUEV9CiB9OwogCiBzdGF0aWMgdm9pZCBwcnRfd3JpdGVfZmlsZV9yYXdfbGVuIF9fQVJHUygoY2hhcl91ICpidWZmZXIsIGludCBieXRlcykpOwpAQCAtNDEzNSw2ICs0MTQwLDcgQEAKIHN0YXRpYyBpbnQgcHJ0X3Jlc2ZpbGVfc2tpcF93cyBfX0FSR1MoKGludCBvZmZzZXQpKTsKIHN0YXRpYyBpbnQgcHJ0X25leHRfZHNjIF9fQVJHUygoc3RydWN0IHBydF9kc2NfbGluZV9TICpwX2RzY19saW5lKSk7CiAjaWZkZWYgRkVBVF9NQllURQorc3RhdGljIGludCBwcnRfYnVpbGRfY2lkX2ZvbnRuYW1lIF9fQVJHUygoaW50IGZvbnQsIGNoYXJfdSAqbmFtZSwgaW50IG5hbWVfbGVuKSk7CiBzdGF0aWMgdm9pZCBwcnRfZGVmX2NpZGZvbnQgX19BUkdTKChjaGFyICpuZXdfbmFtZSwgaW50IGhlaWdodCwgY2hhciAqY2lkZm9udCkpOwogc3RhdGljIGludCBwcnRfbWF0Y2hfZW5jb2RpbmcgX19BUkdTKChjaGFyICpwX2VuY29kaW5nLCBzdHJ1Y3QgcHJ0X3BzX21iZm9udF9TICpwX2NtYXAsIHN0cnVjdCBwcnRfcHNfZW5jb2RpbmdfUyAqKnBwX21iZW5jKSk7CiBzdGF0aWMgaW50IHBydF9tYXRjaF9jaGFyc2V0IF9fQVJHUygoY2hhciAqcF9jaGFyc2V0LCBzdHJ1Y3QgcHJ0X3BzX21iZm9udF9TICpwX2NtYXAsIHN0cnVjdCBwcnRfcHNfY2hhcnNldF9TICoqcHBfbWJjaGFyKSk7CkBAIC01MDk3LDE1ICs1MTAzLDE2IEBACiAgICAgcmV0dXJuIChpbnQpKChwcnRfcmlnaHRfbWFyZ2luIC0gcHJ0X2xlZnRfbWFyZ2luKSAvIHBydF9jaGFyX3dpZHRoKTsKIH0KIAorI2lmZGVmIEZFQVRfTUJZVEUKICAgICBzdGF0aWMgaW50CiBwcnRfYnVpbGRfY2lkX2ZvbnRuYW1lKGZvbnQsIG5hbWUsIG5hbWVfbGVuKQogICAgIGludCAgICAgZm9udDsKLSAgICBjaGFyICAgICpuYW1lOworICAgIGNoYXJfdSAgKm5hbWU7CiAgICAgaW50ICAgICBuYW1lX2xlbjsKIHsKICAgICBjaGFyICAgICpmb250bmFtZTsKIAotICAgIGZvbnRuYW1lID0gYWxsb2MobmFtZV9sZW4gKyAxKTsKKyAgICBmb250bmFtZSA9IChjaGFyICopYWxsb2MobmFtZV9sZW4gKyAxKTsKICAgICBpZiAoZm9udG5hbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIFNUUk5DUFkoZm9udG5hbWUsIG5hbWUsIG5hbWVfbGVuKTsKQEAgLTUxMTQsNiArNTEyMSw3IEBACiAKICAgICByZXR1cm4gVFJVRTsKIH0KKyNlbmRpZgogCiAvKgogICogR2V0IG51bWJlciBvZiBsaW5lcyBvZiB0ZXh0IHRoYXQgZml0IG9uIGEgcGFnZSAoZXhjbHVkaW5nIHRoZSBoZWFkZXIpLgpAQCAtNTE1MiwxMyArNTE2MCwxMyBAQAogI2lmZGVmIEZFQVRfTUJZVEUKICAgICBzdGF0aWMgaW50CiBwcnRfbWF0Y2hfZW5jb2RpbmcocF9lbmNvZGluZywgcF9jbWFwLCBwcF9tYmVuYykKLSAgICBjaGFyICAgICpwX2VuY29kaW5nOwotICAgIHN0cnVjdCBwcnRfcHNfbWJmb250X1MgKnBfY21hcDsKLSAgICBzdHJ1Y3QgcHJ0X3BzX2VuY29kaW5nX1MgKipwcF9tYmVuYzsKKyAgICBjaGFyCQkJKnBfZW5jb2Rpbmc7CisgICAgc3RydWN0IHBydF9wc19tYmZvbnRfUwkqcF9jbWFwOworICAgIHN0cnVjdCBwcnRfcHNfZW5jb2RpbmdfUwkqKnBwX21iZW5jOwogewotICAgIGludCAgICAgbWJlbmM7Ci0gICAgaW50ICAgICBlbmNfbGVuOwotICAgIHN0cnVjdCBwcnRfcHNfZW5jb2RpbmdfUyAqcF9tYmVuYzsKKyAgICBpbnQJCQkJbWJlbmM7CisgICAgaW50CQkJCWVuY19sZW47CisgICAgc3RydWN0IHBydF9wc19lbmNvZGluZ19TCSpwX21iZW5jOwogCiAgICAgKnBwX21iZW5jID0gTlVMTDsKICAgICAvKiBMb29rIGZvciByZWNvZ25pc2VkIGVuY29kaW5nICovCkBAIC01MTc4LDEyICs1MTg2LDEyIEBACiAKICAgICBzdGF0aWMgaW50CiBwcnRfbWF0Y2hfY2hhcnNldChwX2NoYXJzZXQsIHBfY21hcCwgcHBfbWJjaGFyKQotICAgIGNoYXIgICAgKnBfY2hhcnNldDsKLSAgICBzdHJ1Y3QgcHJ0X3BzX21iZm9udF9TICpwX2NtYXA7CisgICAgY2hhcgkJICAgICpwX2NoYXJzZXQ7CisgICAgc3RydWN0IHBydF9wc19tYmZvbnRfUyAgKnBfY21hcDsKICAgICBzdHJ1Y3QgcHJ0X3BzX2NoYXJzZXRfUyAqKnBwX21iY2hhcjsKIHsKLSAgICBpbnQgICAgIG1iY2hhcjsKLSAgICBpbnQgICAgIGNoYXJfbGVuOworICAgIGludAkJCSAgICBtYmNoYXI7CisgICAgaW50CQkJICAgIGNoYXJfbGVuOwogICAgIHN0cnVjdCBwcnRfcHNfY2hhcnNldF9TICpwX21iY2hhcjsKIAogICAgIC8qIExvb2sgZm9yIHJlY29nbmlzZWQgY2hhcmFjdGVyIHNldCwgdXNpbmcgZGVmYXVsdCBpZiBvbmUgaXMgbm90IGdpdmVuICovCkBAIC01MjI2LDcgKzUyMzQsNyBAQAogICAgIGNoYXJfdQkqcF9lbmNvZGluZzsKICAgICBzdHJ1Y3QgcHJ0X3BzX2VuY29kaW5nX1MgKnBfbWJlbmM7CiAgICAgc3RydWN0IHBydF9wc19lbmNvZGluZ19TICpwX21iZW5jX2ZpcnN0OwotICAgIHN0cnVjdCBwcnRfcHNfY2hhcnNldF9TICpwX21iY2hhcjsKKyAgICBzdHJ1Y3QgcHJ0X3BzX2NoYXJzZXRfUyAgKnBfbWJjaGFyOwogI2VuZGlmCiAKICNpZiAwCkBAIC01MjYyLDExICs1MjcwLDEzIEBACiAgICAgcF9tYmVuY19maXJzdCA9IE5VTEw7CiAgICAgcF9tYmNoYXIgPSBOVUxMOwogICAgIGZvciAoY21hcCA9IDA7IGNtYXAgPCBOVU1fRUxFTUVOVFMocHJ0X3BzX21iZm9udHMpOyBjbWFwKyspCi0gICAgICAgIGlmIChwcnRfbWF0Y2hfZW5jb2RpbmcocF9lbmNvZGluZywgJnBydF9wc19tYmZvbnRzW2NtYXBdLCAmcF9tYmVuYykpCisgICAgICAgIGlmIChwcnRfbWF0Y2hfZW5jb2RpbmcoKGNoYXIgKilwX2VuY29kaW5nLCAmcHJ0X3BzX21iZm9udHNbY21hcF0sCisJCQkJCQkJCSAgICAmcF9tYmVuYykpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChwX21iZW5jX2ZpcnN0ID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcF9tYmVuY19maXJzdCA9IHBfbWJlbmM7Ci0gICAgICAgICAgICBpZiAocHJ0X21hdGNoX2NoYXJzZXQocF9wbWNzLCAmcHJ0X3BzX21iZm9udHNbY21hcF0sICZwX21iY2hhcikpCisgICAgICAgICAgICBpZiAocHJ0X21hdGNoX2NoYXJzZXQoKGNoYXIgKilwX3BtY3MsICZwcnRfcHNfbWJmb250c1tjbWFwXSwKKwkJCQkJCQkJICAgJnBfbWJjaGFyKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC01MzQzLDggKzUzNTMsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgaWYgKG1iZm9udF9vcHRzW09QVF9NQkZPTlRfQk9MRE9CTElRVUVdLnByZXNlbnQpCiAgICAgICAgICAgICBpZiAoIXBydF9idWlsZF9jaWRfZm9udG5hbWUoUFJUX1BTX0ZPTlRfQk9MRE9CTElRVUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJmb250X29wdHNbT1BUX01CRk9OVF9CT0xET0JMSVFVRV0uc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZm9udF9vcHRzW09QVF9NQkZPTlRfQk9MRE9CTElRVUVdLnN0cmxlbikpCisJCQkJICAgbWJmb250X29wdHNbT1BUX01CRk9OVF9CT0xET0JMSVFVRV0uc3RyaW5nLAorCQkJCSAgbWJmb250X29wdHNbT1BUX01CRk9OVF9CT0xET0JMSVFVRV0uc3RybGVuKSkKICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAKICAgICAgICAgLyogQ2hlY2sgaWYgbmVlZCB0byB1c2UgQ291cmllciBmb3IgQVNDSUkgY29kZSByYW5nZSwgYW5kIGlmIHNvIHBpY2sgdXAKQEAgLTU1NTUsOCArNTU2NSw4IEBACiAJRU1TRzIoXygiRTQ1NjogQ2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIiIpLCByZXNvdXJjZS0+ZmlsZW5hbWUpOwogCXJldHVybiBGQUxTRTsKICAgICB9Ci0gICAgcHJ0X2RzY19yZXNvdXJjZXMoIkJlZ2luUmVzb3VyY2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJ0X3Jlc291cmNlX3R5cGVzW3Jlc291cmNlLT50eXBlXSwgcmVzb3VyY2UtPnRpdGxlKTsKKyAgICBwcnRfZHNjX3Jlc291cmNlcygiQmVnaW5SZXNvdXJjZSIsIHBydF9yZXNvdXJjZV90eXBlc1tyZXNvdXJjZS0+dHlwZV0sCisJCQkJCQkgICAgIChjaGFyICopcmVzb3VyY2UtPnRpdGxlKTsKIAogICAgIHBydF9kc2NfdGV4dGxpbmUoIkJlZ2luRG9jdW1lbnQiLCAoY2hhciAqKXJlc291cmNlLT5maWxlbmFtZSk7CiAKQEAgLTU2MDIsNyArNTYxMiw3IEBACiAgICAgZG91YmxlICAgICAgYm90dG9tOwogICAgIHN0cnVjdCBwcnRfcHNfcmVzb3VyY2VfUyByZXNfcHJvbG9nOwogICAgIHN0cnVjdCBwcnRfcHNfcmVzb3VyY2VfUyByZXNfZW5jb2Rpbmc7Ci0gICAgY2hhcl91ICAgICAgYnVmZmVyWzI1Nl07CisgICAgY2hhcglidWZmZXJbMjU2XTsKICAgICBjaGFyX3UgICAgICAqcF9lbmNvZGluZzsKICNpZmRlZiBGRUFUX01CWVRFCiAgICAgc3RydWN0IHBydF9wc19yZXNvdXJjZV9TIHJlc19jaWRmb250OwpAQCAtNTYxNCw3ICs1NjI0LDcgQEAKICAgICAgKi8KICAgICBwcnRfZHNjX3N0YXJ0KCk7CiAgICAgcHJ0X2RzY190ZXh0bGluZSgiVGl0bGUiLCAoY2hhciAqKXBzZXR0aW5ncy0+am9ibmFtZSk7Ci0gICAgaWYgKCFnZXRfdXNlcl9uYW1lKGJ1ZmZlciwgMjU2KSkKKyAgICBpZiAoIWdldF91c2VyX25hbWUoKGNoYXJfdSAqKWJ1ZmZlciwgMjU2KSkKICAgICAgICAgU1RSQ1BZKGJ1ZmZlciwgIlVua25vd24iKTsKICAgICBwcnRfZHNjX3RleHRsaW5lKCJGb3IiLCBidWZmZXIpOwogICAgIHBydF9kc2NfdGV4dGxpbmUoIkNyZWF0b3IiLCBWSU1fVkVSU0lPTl9MT05HKTsKQEAgLTU3NTcsNyArNTc2Nyw3IEBACiAgICAgICAgICAgICBpZiAoIXBydF9maW5kX3Jlc291cmNlKHBydF9hc2NpaV9lbmNvZGluZywgJnJlc19lbmNvZGluZykpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgRU1TRzIoXygiRTQ1NjogQ2FuJ3QgZmluZCBQb3N0U2NyaXB0IHJlc291cmNlIGZpbGUgXCIlcy5wc1wiIiksCi0gICAgICAgICAgICAgICAgICAgICAgcHJ0X2FzY2lpX2VuY29kaW5nKTsKKwkJCQkJCQkgIHBydF9hc2NpaV9lbmNvZGluZyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFwcnRfb3Blbl9yZXNvdXJjZSgmcmVzX2VuY29kaW5nKSkKQEAgLTU3ODYsNyArNTc5Niw3IEBACiAgICAgICAgIGlmICghcHJ0X2ZpbmRfcmVzb3VyY2UocHJ0X2NtYXAsICZyZXNfY21hcCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVNU0cyKF8oIkU0NTY6IENhbid0IGZpbmQgUG9zdFNjcmlwdCByZXNvdXJjZSBmaWxlIFwiJXMucHNcIiIpLAotICAgICAgICAgICAgICAgICAgcHJ0X2NtYXApOworCQkJCQkJCQkgICAgcHJ0X2NtYXApOwogICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAgICAgICAgIGlmICghcHJ0X29wZW5fcmVzb3VyY2UoJnJlc19jbWFwKSkKQEAgLTU5MTEsNyArNTkyMSw3IEBACiAgICAgICAgIC8qIFdoZW4gdXNpbmcgQ291cmllciBmb3IgQVNDSUkgcmFuZ2Ugd2hlbiBwcmludGluZyBtdWx0aS1ieXRlLCBuZWVkIHRvCiAgICAgICAgICAqIHBpY2sgdXAgQVNDSUkgZW5jb2RpbmcgdG8gdXNlIHdpdGggaXQuICovCiAgICAgICAgIGlmIChwcnRfdXNlX2NvdXJpZXIpCi0gICAgICAgICAgICBwX2VuY29kaW5nID0gcHJ0X2FzY2lpX2VuY29kaW5nOworICAgICAgICAgICAgcF9lbmNvZGluZyA9IChjaGFyX3UgKilwcnRfYXNjaWlfZW5jb2Rpbmc7CiAjZW5kaWYKICAgICAgICAgcHJ0X2RzY19yZXNvdXJjZXMoIkluY2x1ZGVSZXNvdXJjZSIsICJmb250IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ0X3BzX2NvdXJpZXJfZm9udC5wc19mb250bmFtZVtQUlRfUFNfRk9OVF9ST01BTl0pOwpAQCAtNjAxNSw3ICs2MDI1LDcgQEAKIAogICAgIC8qIFdyaXRlIENUUkwtRCB0byBjbG9zZSBzZXJpYWwgY29tbXVuaWNhdGlvbiBsaW5rIGlmIHVzZWQuCiAgICAgICogTk9USElORyBNVVNUIEJFIFdSSVRURU4gQUZURVIgVEhJUyEgKi8KLSAgICBwcnRfd3JpdGVfZmlsZShJRl9FQigiXDAwNCIsICJcMDY3IikpOworICAgIHBydF93cml0ZV9maWxlKChjaGFyX3UgKilJRl9FQigiXDAwNCIsICJcMDY3IikpOwogCiAgICAgaWYgKCFwcnRfZmlsZV9lcnJvciAmJiBwc2V0dGluZ3MtPm91dGZpbGUgPT0gTlVMTAogCQkJCQkmJiAhZ290X2ludCAmJiAhcHNldHRpbmdzLT51c2VyX2Fib3J0KQpAQCAtNjI3NCw3ICs2Mjg0LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIGRvCiAgICAgICAgIHsKLSAgICAgICAgICAgY2ggPSBwcnRfaGV4Y2hhclsoKnApID4+IDRdOworICAgICAgICAgICBjaCA9IHBydF9oZXhjaGFyWyh1bnNpZ25lZCkoKnApID4+IDRdOwogICAgICAgICAgICBnYV9hcHBlbmQoJnBydF9wc19idWZmZXIsIGNoKTsKICAgICAgICAgICAgY2ggPSBwcnRfaGV4Y2hhclsoKnApICYgMHhmXTsKICAgICAgICAgICAgZ2FfYXBwZW5kKCZwcnRfcHNfYnVmZmVyLCBjaCk7CmRpZmYgLS1naXQgYS9zcmMvZ3VpX2tkZS5jYyBiL3NyYy9ndWlfa2RlLmNjCmluZGV4IDc3MmU0NTcuLjJiZTE4YjkgMTAwNjQ0Ci0tLSBhL3NyYy9ndWlfa2RlLmNjCisrKyBiL3NyYy9ndWlfa2RlLmNjCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8cW1lc3NhZ2Vib3guaD4KICNpbmNsdWRlIDxxaWNvbnNldC5oPgogI2luY2x1ZGUgPHF0ZXh0Y29kZWMuaD4KLSNpbmNsdWRlICJndWlfa2RlX3dpZGdldC5oIgorI2luY2x1ZGUgImd1aV9rZGVfd2lkLmgiCiAKIGV4dGVybiAiQyIgewogI2luY2x1ZGUgInZpbS5oIgpkaWZmIC0tZ2l0IGEvc3JjL2d1aV9rZGVfd2lkZ2V0LmNjIGIvc3JjL2d1aV9rZGVfd2lkLmNjCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIHNyYy9ndWlfa2RlX3dpZGdldC5jYwpyZW5hbWUgdG8gc3JjL2d1aV9rZGVfd2lkLmNjCmluZGV4IGFlNDhhYmYuLjkxZWExMGIgMTAwNjQ0Ci0tLSBhL3NyYy9ndWlfa2RlX3dpZGdldC5jYworKysgYi9zcmMvZ3VpX2tkZV93aWQuY2MKQEAgLTQzLDEwICs0MywxMSBAQAogI2luY2x1ZGUgPGttZW51YmFyLmg+CiAjaW5jbHVkZSA8a3Rvb2xiYXIuaD4KICNpbmNsdWRlIDxrc3RhbmRhcmRkaXJzLmg+Ci0jaW5jbHVkZSAiZ3VpX2tkZV93aWRnZXQuaCIKKyNpbmNsdWRlICJndWlfa2RlX3dpZC5oIgogI2luY2x1ZGUgPHF4ZW1iZWQuaD4KIAotZXh0ZXJuICJDIiB7CitleHRlcm4gIkMiCit7CiAjaW5jbHVkZSAidmVyc2lvbi5oIgogfQogCkBAIC0xODcsMjUgKzE4OCwxOSBAQAogICAgIEJ1dHRvblN0YXRlIGJ1dHRvbnMgPSBldmVudC0+YnV0dG9uKCk7CiAKICAgICAvL0xvb2sgYXQgYnV0dG9uIHN0YXRlcwotICAgIGlmKGJ1dHRvbnMgJiBRTW91c2VFdmVudDo6TGVmdEJ1dHRvbikgewotCWJ1dHRvbnw9TU9VU0VfTEVGVDsKLSAgICB9Ci0gICAgaWYoYnV0dG9ucyAmIFFNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbikgewotCWJ1dHRvbnw9TU9VU0VfUklHSFQ7Ci0gICAgfQotICAgIGlmKGJ1dHRvbnMgJiBRTW91c2VFdmVudDo6TWlkQnV0dG9uKSB7Ci0JYnV0dG9ufD1NT1VTRV9NSURETEU7Ci0gICAgfQorICAgIGlmIChidXR0b25zICYgUU1vdXNlRXZlbnQ6OkxlZnRCdXR0b24pCisJYnV0dG9uIHw9IE1PVVNFX0xFRlQ7CisgICAgaWYgKGJ1dHRvbnMgJiBRTW91c2VFdmVudDo6UmlnaHRCdXR0b24pCisJYnV0dG9uIHw9IE1PVVNFX1JJR0hUOworICAgIGlmIChidXR0b25zICYgUU1vdXNlRXZlbnQ6Ok1pZEJ1dHRvbikKKwlidXR0b24gfD0gTU9VU0VfTUlERExFOwogICAgIC8vTG9vayBmb3Iga2V5Ym9hcmQgbW9kaWZpZXJzCi0gICAgaWYoc3RhdGUgJiBRTW91c2VFdmVudDo6U2hpZnRCdXR0b24pIHsKLQltb2RpZmllcnN8PU1PVVNFX1NISUZUOwotICAgIH0KLSAgICBpZihzdGF0ZSAmIFFNb3VzZUV2ZW50OjpDb250cm9sQnV0dG9uKXsKLQltb2RpZmllcnN8PU1PVVNFX0NUUkw7Ci0gICAgfQotICAgIGlmKHN0YXRlICYgUU1vdXNlRXZlbnQ6OkFsdEJ1dHRvbil7Ci0JbW9kaWZpZXJzfD1NT1VTRV9BTFQ7Ci0gICAgfQorICAgIGlmIChzdGF0ZSAmIFFNb3VzZUV2ZW50OjpTaGlmdEJ1dHRvbikKKwltb2RpZmllcnMgfD0gTU9VU0VfU0hJRlQ7CisgICAgaWYgKHN0YXRlICYgUU1vdXNlRXZlbnQ6OkNvbnRyb2xCdXR0b24pCisJbW9kaWZpZXJzIHw9IE1PVVNFX0NUUkw7CisgICAgaWYgKHN0YXRlICYgUU1vdXNlRXZlbnQ6OkFsdEJ1dHRvbikKKwltb2RpZmllcnMgfD0gTU9VU0VfQUxUOwogICAgIGd1aV9zZW5kX21vdXNlX2V2ZW50KGJ1dHRvbixldmVudC0+eCgpLGV2ZW50LT55KCksRkFMU0UsbW9kaWZpZXJzKTsKICNpZiBRVF9WRVJTSU9OPj0zMDAKICAgICBRQnl0ZUFycmF5IHBhcmFtczsKQEAgLTI1NCwxMSArMjQ5LDExIEBACiAJYnV0dG9ufD1NT1VTRV80OwogICAgIGVsc2UgYnV0dG9ufD1NT1VTRV81OwogCi0gICAgaWYoc3RhdGUgJiBTaGlmdEJ1dHRvbikKKyAgICBpZiAoc3RhdGUgJiBTaGlmdEJ1dHRvbikKIAltb2RpZmllcnN8PU1PVVNFX1NISUZUOwotICAgIGlmKHN0YXRlICYgQ29udHJvbEJ1dHRvbikKKyAgICBpZiAoc3RhdGUgJiBDb250cm9sQnV0dG9uKQogCW1vZGlmaWVyc3w9TU9VU0VfQ1RSTDsKLSAgICBpZihzdGF0ZSAmIEFsdEJ1dHRvbikKKyAgICBpZiAoc3RhdGUgJiBBbHRCdXR0b24pCiAJbW9kaWZpZXJzfD1NT1VTRV9BTFQ7CiAKICAgICBndWlfc2VuZF9tb3VzZV9ldmVudChidXR0b24sZXZlbnQtPngoKSxldmVudC0+eSgpLEZBTFNFLG1vZGlmaWVycyk7CkBAIC0yNzksMTkgKzI3NCwxOSBAQAogICAgIGludCBidXR0b249MDsKIAogICAgIC8vTG9vayBhdCBidXR0b24gc3RhdGVzCi0gICAgaWYoYnV0dG9ucyAmIExlZnRCdXR0b24pCisgICAgaWYgKGJ1dHRvbnMgJiBMZWZ0QnV0dG9uKQogCWJ1dHRvbnw9TU9VU0VfTEVGVDsKLSAgICBpZihidXR0b25zICYgUmlnaHRCdXR0b24pCisgICAgaWYgKGJ1dHRvbnMgJiBSaWdodEJ1dHRvbikKIAlidXR0b258PU1PVVNFX1JJR0hUOwotICAgIGlmKGJ1dHRvbnMgJiBNaWRCdXR0b24pCisgICAgaWYgKGJ1dHRvbnMgJiBNaWRCdXR0b24pCiAJYnV0dG9ufD1NT1VTRV9NSURETEU7CiAKICAgICAvL0xvb2sgZm9yIGtleWJvYXJkIG1vZGlmaWVycwotICAgIGlmKHN0YXRlICYgU2hpZnRCdXR0b24pCisgICAgaWYgKHN0YXRlICYgU2hpZnRCdXR0b24pCiAJbW9kaWZpZXJzfD1NT1VTRV9TSElGVDsKLSAgICBpZihzdGF0ZSAmIENvbnRyb2xCdXR0b24pCisgICAgaWYgKHN0YXRlICYgQ29udHJvbEJ1dHRvbikKIAltb2RpZmllcnN8PU1PVVNFX0NUUkw7Ci0gICAgaWYoc3RhdGUgJiBBbHRCdXR0b24pCisgICAgaWYgKHN0YXRlICYgQWx0QnV0dG9uKQogCW1vZGlmaWVyc3w9TU9VU0VfQUxUOwogCiAgICAgZ3VpX3NlbmRfbW91c2VfZXZlbnQoYnV0dG9uLGV2ZW50LT54KCksZXZlbnQtPnkoKSxUUlVFLG1vZGlmaWVycyk7CkBAIC0zMTMsMTUgKzMwOCwxNSBAQAogCiAgICAgLy9Mb29rIGF0IGJ1dHRvbiBzdGF0ZXMKICAgICAvL3dhcm5pbmc6IHdlIHVzZSBzdGF0ZSBoZXJlLCB0aGlzIGlzIGltcG9ydGFudCAhCi0gICAgaWYoc3RhdGUgJiBRTW91c2VFdmVudDo6TGVmdEJ1dHRvbiB8fCBzdGF0ZSAmIFFNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbiB8fCBzdGF0ZSAmIFFNb3VzZUV2ZW50OjpNaWRCdXR0b24pCisgICAgaWYgKHN0YXRlICYgUU1vdXNlRXZlbnQ6OkxlZnRCdXR0b24gfHwgc3RhdGUgJiBRTW91c2VFdmVudDo6UmlnaHRCdXR0b24gfHwgc3RhdGUgJiBRTW91c2VFdmVudDo6TWlkQnV0dG9uKQogCWJ1dHRvbnw9TU9VU0VfRFJBRzsKIAogICAgIC8vTG9vayBmb3Iga2V5Ym9hcmQgbW9kaWZpZXJzCi0gICAgaWYoc3RhdGUgJiBTaGlmdEJ1dHRvbikKKyAgICBpZiAoc3RhdGUgJiBTaGlmdEJ1dHRvbikKIAltb2RpZmllcnN8PU1PVVNFX1NISUZUOwotICAgIGlmKHN0YXRlICYgQ29udHJvbEJ1dHRvbikKKyAgICBpZiAoc3RhdGUgJiBDb250cm9sQnV0dG9uKQogCW1vZGlmaWVyc3w9TU9VU0VfQ1RSTDsKLSAgICBpZihzdGF0ZSAmIEFsdEJ1dHRvbikKKyAgICBpZiAoc3RhdGUgJiBBbHRCdXR0b24pCiAJbW9kaWZpZXJzfD1NT1VTRV9BTFQ7CiAgICAgaWYgKGJ1dHRvbiE9TU9VU0VfRFJBRykKIAlndWlfbW91c2VfbW92ZWQoZXZlbnQtPngoKSxldmVudC0+eSgpKTsKQEAgLTMzNSwxMSArMzMwLDExIEBACiAgICAgaW50IG1vZGlmaWVycz0wOwogCiAgICAgLy9Mb29rIGZvciBrZXlib2FyZCBtb2RpZmllcnMKLSAgICBpZihzdGF0ZSAmIFNoaWZ0QnV0dG9uKQorICAgIGlmIChzdGF0ZSAmIFNoaWZ0QnV0dG9uKQogCW1vZGlmaWVyc3w9TU9VU0VfU0hJRlQ7Ci0gICAgaWYoc3RhdGUgJiBDb250cm9sQnV0dG9uKQorICAgIGlmIChzdGF0ZSAmIENvbnRyb2xCdXR0b24pCiAJbW9kaWZpZXJzfD1NT1VTRV9DVFJMOwotICAgIGlmKHN0YXRlICYgQWx0QnV0dG9uKQorICAgIGlmIChzdGF0ZSAmIEFsdEJ1dHRvbikKIAltb2RpZmllcnN8PU1PVVNFX0FMVDsKIAogICAgIGd1aV9zZW5kX21vdXNlX2V2ZW50KE1PVVNFX1JFTEVBU0UsZXZlbnQtPngoKSxldmVudC0+eSgpLEZBTFNFLG1vZGlmaWVycyk7CkBAIC00NTQsMjEgKzQ0OSwyNSBAQAogCiAgICAgLyogQ291bnQgaG93IG1hbnkgaXRlbXMgdGhlcmUgbWF5IGJlIGFuZCBub3JtYWxpemUgZGVsaW1pdGVycy4gKi8KIAotICAgIGlmIChRVXJpRHJhZzo6ZGVjb2RlKGUsIHVybHMpKSB7CisgICAgaWYgKFFVcmlEcmFnOjpkZWNvZGUoZSwgdXJscykpCisgICAgewogCW4gPSB1cmxzLmNvdW50KCk7CiAgICAgICAgIGZuYW1lcyA9IChjaGFyX3UgKiopbGFsbG9jKChuKzEpICogc2l6ZW9mKGNoYXJfdSAqKSwgVFJVRSk7CiAJbmZpbGVzID0gMDsKICNpZiBRVF9WRVJTSU9OPj0zMDAKIAlRUHRyTGlzdEl0ZXJhdG9yPGNoYXI+IGl0KHVybHMpOwotCWZvciggOyBpdC5jdXJyZW50KCk7ICsraXQgKSB7CisJZm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCApCisJewogCSAgICBLVVJMIHUoKml0KTsKICNlbHNlCi0JICAgIGZvciAoaT0wO2k8dXJscy5jb3VudCgpOysraSkgeworCSAgICBmb3IgKGk9MDtpPHVybHMuY291bnQoKTsrK2kpCisJICAgIHsKIAkJS1VSTCB1KHVybHMuYXQoaSkpOwogI2VuZGlmCiAJCWlmICggIXUuaXNMb2NhbEZpbGUoKSApCiAJCSAgICB1cmwgPSBUUlVFOwotCQllbHNlIHsKKwkJZWxzZQorCQl7CiAJCSAgICBmbmFtZXNbbmZpbGVzXSA9IChjaGFyX3UgKilzdHJkdXAoKGNvbnN0IGNoYXIgKil1LnBhdGgoKSk7CiAJCSAgICArK25maWxlczsKIAkJfQpAQCAtNDg4LDcgKzQ4Nyw5IEBACiAJCQkgICAgcmVkb19kaXJzID0gVFJVRTsKIAkJCX0KIAkJICAgIH0KLQkJfSBlbHNlIHsKKwkJfQorCQllbHNlCisJCXsKIAkJICAgIC8qIElnbm9yZSBhbnkgZGlyZWN0b3JpZXMgKi8KIAkJICAgIGZvciAoaSA9IDA7IGkgPCBuZmlsZXM7ICsraSkKIAkJICAgIHsKQEAgLTUwNSw3ICs1MDYsOSBAQAogCQkgICAgLyogU2hpZnQgaGVsZCBkb3duLCBjaGFuZ2UgdG8gZmlyc3QgZmlsZSdzIGRpcmVjdG9yeSAqLwogCQkgICAgaWYgKGZuYW1lc1swXSAhPSBOVUxMICYmIHZpbV9jaGRpcmZpbGUoZm5hbWVzWzBdKSA9PSBPSykKIAkJCXJlZG9fZGlycyA9IFRSVUU7Ci0JCX0gZWxzZSB7CisJCX0KKwkJZWxzZQorCQl7CiAJCSAgICBjaGFyX3UJZGlybmFtZVtNQVhQQVRITF07CiAJCSAgICBjaGFyX3UJKnM7CiAJCSAgICBpZiAobWNoX2Rpcm5hbWUoZGlybmFtZSwgTUFYUEFUSEwpID09IE9LKQpAQCAtNTYxLDcgKzU2NCw4IEBACiAKICAgICAvLyBpZ25vcmUgY2VydGFpbiBrZXlzCiAgICAgaWYgKGtleSA9PSBRdDo6S2V5X1NoaWZ0IHx8IGtleSA9PSBRdDo6S2V5X0FsdCB8fCBrZXkgPT0gUXQ6OktleV9Db250cm9sIHx8IGtleSA9PSBRdDo6S2V5X01ldGEKLQkgICAgfHwga2V5ID09IFF0OjpLZXlfQ2Fwc0xvY2sgfHwga2V5ID09IFF0OjpLZXlfTnVtTG9jayB8fCBrZXkgPT0gUXQ6OktleV9TY3JvbGxMb2NrICkgeworCSAgICB8fCBrZXkgPT0gUXQ6OktleV9DYXBzTG9jayB8fCBrZXkgPT0gUXQ6OktleV9OdW1Mb2NrIHx8IGtleSA9PSBRdDo6S2V5X1Njcm9sbExvY2sgKQorICAgIHsKIAllLT5pZ25vcmUoKTsKIAlyZXR1cm47CiAgICAgfQpAQCAtNTkxLDEzICs1OTUsMTMgQEAKIAogCiAgICAgLy8gY2hhbmdlIHNoaWZ0LXRhYiAoYmFja3RhYikgaW50byBTX1RBQgotICAgIGlmICgga2V5ID09IFF0OjpLZXlfQmFja1RhYiAmJiBzdGF0ZSAmIFF0OjpTaGlmdEJ1dHRvbikgeworICAgIGlmICgga2V5ID09IFF0OjpLZXlfQmFja1RhYiAmJiBzdGF0ZSAmIFF0OjpTaGlmdEJ1dHRvbikKIAlrZXkgPSBRdDo6S2V5X1RhYjsKLSAgICB9CiAKICAgICAvLyBDaGFuZ2UgQy1AIGFuZCBDLTIgaW4gTlVMID8gR3RrIGRvZXMgdGhpcwogICAgIGlmICggKGtleSA9PSBRdDo6S2V5XzIgfHwga2V5ID09IFF0OjpLZXlfQXQpCi0JICAgICYmIHN0YXRlICYgUXQ6OkNvbnRyb2xCdXR0b24gKSB7CisJICAgICYmIHN0YXRlICYgUXQ6OkNvbnRyb2xCdXR0b24gKQorICAgIHsKIAlzdHJpbmdbMF0gPSBOVUw7CiAJbGVuID0gMTsKICAgICB9CkBAIC02MzksNyArNjQzLDggQEAKICAgICBpZiAobGVuID09IDAgfHwga2V5ID09IFF0OjpLZXlfQmFja1NwYWNlIHx8IGtleSA9PSBRdDo6S2V5X0RlbGV0ZSkKICAgICB7CiAJd2hpbGUgKHNwZWNpYWxfa2V5c1tpXS5xdGtleSAhPSAwICYmIHNwZWNpYWxfa2V5c1tpXS5xdGtleSAhPSBrZXkgKSBpKys7Ci0JaWYgKHNwZWNpYWxfa2V5c1tpXS5xdGtleSAhPSAwKSB7CisJaWYgKHNwZWNpYWxfa2V5c1tpXS5xdGtleSAhPSAwKQorCXsKIAkJc3RyaW5nWzBdID0gQ1NJOwogCQlzdHJpbmdbMV0gPSBzcGVjaWFsX2tleXNbaV0uY29kZTA7CiAJCXN0cmluZ1syXSA9IHNwZWNpYWxfa2V5c1tpXS5jb2RlMTsKQEAgLTY0OCw3ICs2NTMsOCBAQAogLyoKIAlmb3IgKGkgPSAwOyBzcGVjaWFsX2tleXNbaV0ucXRrZXkgIT0gMCA7IGkrKykKIAl7Ci0JICAgIGlmIChzcGVjaWFsX2tleXNbaV0ucXRrZXkgPT0ga2V5ICkgeworCSAgICBpZiAoc3BlY2lhbF9rZXlzW2ldLnF0a2V5ID09IGtleSApCisJICAgIHsKIAkJc3RyaW5nWzBdID0gQ1NJOwogCQlzdHJpbmdbMV0gPSBzcGVjaWFsX2tleXNbaV0uY29kZTA7CiAJCXN0cmluZ1syXSA9IHNwZWNpYWxfa2V5c1tpXS5jb2RlMTsKQEAgLTY1OCw3ICs2NjQsOCBAQAogCX0qLwogICAgIH0KIAotICAgIGlmIChsZW4gPT0gMCkgICB7CisgICAgaWYgKGxlbiA9PSAwKQorICAgIHsKIAkvL25vIG5lZWQgdG8gZHVtcCB0aGF0LCB0aGF0J3MgYSBRVCBwcm9ibGVtLCB3ZSBjYW4ndCBkbyBhbnl0aGluZwogCS8vZGJmKCJVbnJlY29nbmlzZWQgS2V5IDogJVggJXMiLCBrZXksIGUtPnRleHQoKS5sYXRpbjEoKSk7CiAJZS0+aWdub3JlKCk7CkBAIC02NjksNyArNjc2LDggQEAKICAgICAvKiBTcGVjaWFsIGtleXMgKGFuZCBhIGZldyBvdGhlcnMpIG1heSBoYXZlIG1vZGlmaWVycyAqLwogICAgIGlmIChsZW4gPT0gLTMgfHwga2V5ID09IFF0OjpLZXlfU3BhY2UgfHwga2V5ID09IFF0OjpLZXlfVGFiIHx8CiAJICAgIGtleSA9PSBRdDo6S2V5X1JldHVybiB8fCBrZXkgPT0gUXQ6OktleV9FbnRlciB8fAotCSAgICBrZXkgPT0gUXQ6OktleV9Fc2NhcGUpIHsKKwkgICAga2V5ID09IFF0OjpLZXlfRXNjYXBlKQorICAgIHsKIAogCW1vZGlmaWVycyA9IDA7CiAJaWYgKHN0YXRlICYgUXQ6OlNoaWZ0QnV0dG9uKSBtb2RpZmllcnMgfD0gTU9EX01BU0tfU0hJRlQ7CkBAIC02ODksMTggKzY5NywyMiBAQAogCWtleSA9IHNpbXBsaWZ5X2tleShrZXksICZtb2RpZmllcnMpOwogCWlmIChrZXkgPT0gQ1NJKSBrZXk9S19DU0k7CiAKLQlpZiAoSVNfU1BFQ0lBTChrZXkpKSB7CisJaWYgKElTX1NQRUNJQUwoa2V5KSkKKwl7CiAJICAgIHN0cmluZ1swXSA9IENTSTsKIAkgICAgc3RyaW5nWzFdID0gS19TRUNPTkQoa2V5KTsKIAkgICAgc3RyaW5nWzJdID0gS19USElSRChrZXkpOwogCSAgICBsZW4gPSAzOwotCX0gZWxzZSB7CisJfQorCWVsc2UKKwl7CiAJICAgIHN0cmluZ1swXSA9IGtleTsKIAkgICAgbGVuID0gMTsKIAl9CiAKIAotCWlmIChtb2RpZmllcnMhPTApIHsKKwlpZiAobW9kaWZpZXJzIT0wKQorCXsKIAkgICAgdWNoYXIgc3RyaW5nMlsxMF07CiAJICAgIHN0cmluZzJbMF0gPSBDU0k7CiAJICAgIHN0cmluZzJbMV0gPSBLU19NT0RJRklFUjsKQEAgLTcxOCw5ICs3MzAsOSBAQAogICAgIH0KIAogICAgIGFkZF90b19pbnB1dF9idWYoc3RyaW5nLCBsZW4pOwotICAgIGlmIChwX21oKSB7CisgICAgaWYgKHBfbWgpCiAJZ3VpX21jaF9tb3VzZWhpZGUoVFJVRSk7Ci0gICAgfQorCiAgICAgLy9EQ09QIEVtYmVkZGluZyBzdHVmZgogICAgIC8vaWYgd2UgYXJlIGhlcmUgdGhlbiB0aGUgdXNlciBoYXMgdHlwZSBzb21ldGhpbmcgaW4gdGhlIHdpbmRvdywgdGh1cyB3ZSBjYW4gZWFzaWx5IGltYWdpbmUgdGhhdCA6CiAgICAgLy8gMSAtIHRleHQgaGFzIGNoYW5nZWQgKGVtaXQgdGV4dENoYW5nZWQoKSkKQEAgLTc0NCwyMSArNzU2LDI0IEBACiAjaWZkZWYgRkVBVF9DTElFTlRTRVJWRVIKIHZvaWQgVmltV2lkZ2V0OjpzZXJ2ZXJBY3RpdmF0ZShXSWQgaWQpIC8ve3t7CiB7Ci0gICAgaWYgKHNlcnZlck5hbWUgPT0gTlVMTCAmJiBzZXJ2ZXJEZWxheWVkU3RhcnROYW1lICE9IE5VTEwpIHsKKyAgICBpZiAoc2VydmVyTmFtZSA9PSBOVUxMICYmIHNlcnZlckRlbGF5ZWRTdGFydE5hbWUgIT0gTlVMTCkKKyAgICB7CiAJY29tbVdpbmRvdyA9IGlkOwogCSh2b2lkKXNlcnZlclJlZ2lzdGVyTmFtZShxdF94ZGlzcGxheSgpLCBzZXJ2ZXJEZWxheWVkU3RhcnROYW1lKTsKLSAgICB9IGVsc2UgewotCXNlcnZlckNoYW5nZVJlZ2lzdGVyZWRXaW5kb3coIHF0X3hkaXNwbGF5KCksIGlkICk7CiAgICAgfQorICAgIGVsc2UKKwlzZXJ2ZXJDaGFuZ2VSZWdpc3RlcmVkV2luZG93KCBxdF94ZGlzcGxheSgpLCBpZCk7CiB9Ly99fX0KICNlbmRpZgogCiAjaWZkZWYgRkVBVF9YSU0KLXZvaWQgVmltV2lkZ2V0OjppbVN0YXJ0RXZlbnQoUUlNRXZlbnQgKmUpIHsKK3ZvaWQgVmltV2lkZ2V0OjppbVN0YXJ0RXZlbnQoUUlNRXZlbnQgKmUpCit7CiAgICAgZS0+YWNjZXB0KCk7CiB9CiAKLXZvaWQgVmltV2lkZ2V0OjppbUVuZEV2ZW50KFFJTUV2ZW50ICplKSB7Cit2b2lkIFZpbVdpZGdldDo6aW1FbmRFdmVudChRSU1FdmVudCAqZSkKK3sKICAgICB1Y2hhciBzdHJpbmdbMjU2XTsKIAogICAgIFFDU3RyaW5nIHVuaXN0cmluZyA9IHZtdy0+Y29kZWMtPmZyb21Vbmljb2RlKGUtPnRleHQoKSk7CkBAIC03NzEsNyArNzg2LDggQEAKICAgICBlLT5hY2NlcHQoKTsKIH0KIAotdm9pZCBWaW1XaWRnZXQ6OmltQ29tcG9zZUV2ZW50KFFJTUV2ZW50ICplKSB7Cit2b2lkIFZpbVdpZGdldDo6aW1Db21wb3NlRXZlbnQoUUlNRXZlbnQgKmUpCit7CiAgICAgLy9pIHNob3VsZCBkbyBzb21ldGhpbmcgaGVyZSwgZGlzcGxheWluZyB0aGUgdGV4dCBzb21ld2hlcmUgLi4uIChzdGF0dXMgYXJlYSA/KQogICAgIGUtPmFjY2VwdCgpOwogfQpAQCAtODUxLDcgKzg2Nyw4IEBACiAgICAgaWYgKGJsaW5rX3RpbWVyLmlzQWN0aXZlKCkpIGJsaW5rX3RpbWVyLnN0b3AoKTsKIAogICAgIC8qIE9ubHkgc3dpdGNoIGJsaW5raW5nIG9uIGlmIG5vbmUgb2YgdGhlIHRpbWVzIGlzIHplcm8gKi8KLSAgICBpZiAoYmxpbmtfd2FpdF90aW1lICYmIGJsaW5rX29uX3RpbWUgJiYgYmxpbmtfb2ZmX3RpbWUgJiYgZ3VpLmluX2ZvY3VzKSB7CisgICAgaWYgKGJsaW5rX3dhaXRfdGltZSAmJiBibGlua19vbl90aW1lICYmIGJsaW5rX29mZl90aW1lICYmIGd1aS5pbl9mb2N1cykKKyAgICB7CiAJYmxpbmtfc3RhdGUgPSBCTElOS19PTjsKIAlndWlfdXBkYXRlX2N1cnNvcihUUlVFLCBGQUxTRSk7CiAJLy8gVGhlIGZpcnN0IGJsaW5rIGFwcGVhcnMgYWZ0ZXIgd2FpdF90aW1lCkBAIC04NjEsMTIgKzg3OCwxNSBAQAogCiB2b2lkIFZpbVdpZGdldDo6YmxpbmtfY3Vyc29yKCkvL3t7ewogewotICAgIGlmIChibGlua19zdGF0ZSA9PSBCTElOS19PTikgeworICAgIGlmIChibGlua19zdGF0ZSA9PSBCTElOS19PTikKKyAgICB7CiAJLy8gc2V0IGN1cnNvciBvZmYKIAlndWlfdW5kcmF3X2N1cnNvcigpOwogCWJsaW5rX3N0YXRlID0gQkxJTktfT0ZGOwogCWJsaW5rX3RpbWVyLnN0YXJ0KCBibGlua19vZmZfdGltZSwgdHJ1ZSk7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAgZWxzZQorICAgIHsKIAkvLyBzZXQgY3Vyc29yIG9uCiAJZ3VpX3VwZGF0ZV9jdXJzb3IoVFJVRSwgRkFMU0UpOwogCWJsaW5rX3N0YXRlID0gQkxJTktfT047CkBAIC05MjYsNyArOTQ2LDggQEAKICNpZmRlZiBGRUFUX0NMSUVOVFNFUlZFUgogICAgIG9sZEZpbHRlciA9IHF0X3NldF94MTFfZXZlbnRfZmlsdGVyKCBrdmltX3gxMV9ldmVudF9maWx0ZXIgKTsKICNlbmRpZgotICAgIGlmIChlY2hvX3dpZF9hcmc9PSAxKSB7CisgICAgaWYgKGVjaG9fd2lkX2FyZz09IDEpCisgICAgewogCWZwcmludGYoc3RkZXJyLCAiV0lEOiAlbGRcbiIsIChsb25nKXdpbklkKCkpOwogCWZmbHVzaChzdGRlcnIpOwogICAgIH0KQEAgLTk4OCwyNiArMTAwOSwyMyBAQAogCiAKIHZvaWQgVmltTWFpbldpbmRvdzo6Y2xpcGJvYXJkX3NlbGVjdGlvbl91cGRhdGUoKXsvL3t7ewotICAgIGlmKGthcHAtPmNsaXBib2FyZCgpLT5vd25zU2VsZWN0aW9uKCkpIHsKKyAgICBpZiAoa2FwcC0+Y2xpcGJvYXJkKCktPm93bnNTZWxlY3Rpb24oKSkKIAljbGlwX293bl9zZWxlY3Rpb24oJmNsaXBfc3Rhcik7Ci0gICAgfSBlbHNlIHsKKyAgICBlbHNlCiAJY2xpcF9sb3NlX3NlbGVjdGlvbigmY2xpcF9zdGFyKTsKLSAgICB9CiB9Ly99fX0KIAogdm9pZCBWaW1NYWluV2luZG93OjpjbGlwYm9hcmRfZGF0YV91cGRhdGUoKXsvL3t7ewogI2lmIFFUX1ZFUlNJT04+PTMwMAotICAgIGlmIChrYXBwLT5jbGlwYm9hcmQoKS0+b3duc0NsaXBib2FyZCgpKSB7CisgICAgaWYgKGthcHAtPmNsaXBib2FyZCgpLT5vd25zQ2xpcGJvYXJkKCkpCiAJY2xpcF9vd25fc2VsZWN0aW9uKCZjbGlwX3BsdXMpOwotICAgIH0gZWxzZSB7CisgICAgZWxzZQogCWNsaXBfbG9zZV9zZWxlY3Rpb24oJmNsaXBfcGx1cyk7Ci0gICAgfQogI2Vsc2UKLSAgICBpZiAoa2FwcC0+Y2xpcGJvYXJkKCktPm93bnNTZWxlY3Rpb24oKSkgeworICAgIGlmIChrYXBwLT5jbGlwYm9hcmQoKS0+b3duc1NlbGVjdGlvbigpKQogCWNsaXBfb3duX3NlbGVjdGlvbigmY2xpcF9zdGFyKTsKLSAgICB9IGVsc2UgeworICAgIGVsc2UKIAljbGlwX2xvc2Vfc2VsZWN0aW9uKCZjbGlwX3N0YXIpOwotICAgIH0KICNlbmRpZgogfS8vfX19CiAKQEAgLTExODIsMTcgKzEyMDAsMjAgQEAKICAgICBhYm91dC0+c2hvdygpOwogfS8vfX19CiAKLXZvaWQgVmltTWFpbldpbmRvdzo6c2hvd1RpcE9mVGhlRGF5KCkgewordm9pZCBWaW1NYWluV2luZG93OjpzaG93VGlwT2ZUaGVEYXkoKQorewogI2lmIFFUX1ZFUlNJT04+PTMwMAogICAgIEtUaXBEaWFsb2c6OnNob3dUaXAgKHZtdyxRU3RyaW5nOjpudWxsLHRydWUpOwogI2VuZGlmCiB9CiAKLXZvaWQgVmltTWFpbldpbmRvdzo6YnVmZmVyc1Rvb2xiYXIoKSB7Cit2b2lkIFZpbU1haW5XaW5kb3c6OmJ1ZmZlcnNUb29sYmFyKCkKK3sKIAogfQogCi12b2lkIFZpbU1haW5XaW5kb3c6OnNob3dCdWdSZXBvcnQoKSB7Cit2b2lkIFZpbU1haW5XaW5kb3c6OnNob3dCdWdSZXBvcnQoKQorewogICAgIEtCdWdSZXBvcnQgKmJ1Zz0gbmV3IEtCdWdSZXBvcnQodGhpcyx0cnVlKTsKICAgICBidWctPnNob3coKTsKIH0KQEAgLTEyMTcsNyArMTIzOCw4IEBACiAgICAgICogQ3JlYXRlIEljb24KICAgICAgKi8KICAgICBjaGFyICoqIGljb25fZGF0YTsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewogCWNhc2UgVklNX0dFTkVSSUM6CiAJICAgIGljb25fZGF0YSA9IGdlbmVyaWNfeHBtOwogCSAgICBicmVhazsKQEAgLTEyNTUsMjUgKzEyNzcsMjkgQEAKICAgICBobHkxLT5hZGRXaWRnZXQoIGljb24gKTsKICAgICBobHkxLT5hZGRXaWRnZXQoIHRleHQgKTsKICAgICBRSEJveExheW91dCAqIGhseTMgPSBuZXcgUUhCb3hMYXlvdXQgKCB2bHkgLCA1KTsKLSAgICBpZiAodGV4dGZpZWxkIT1OVUxMKSB7CisgICAgaWYgKHRleHRmaWVsZCE9TlVMTCkKKyAgICB7CiAJZW50cnkgPSBuZXcgUUxpbmVFZGl0KChjb25zdCBjaGFyICopdGV4dGZpZWxkLHRoaXMpOwogCWVudHJ5LT5zZXRUZXh0KChjb25zdCBjaGFyICopdGV4dGZpZWxkKTsKIAlobHkzLT5hZGRXaWRnZXQoIGVudHJ5ICk7CiAJcmV0PXRleHRmaWVsZDsKLSAgICB9IGVsc2UgZW50cnk9TlVMTDsKKyAgICB9CisgICAgZWxzZQorCWVudHJ5PU5VTEw7CiAKICAgICBRSEJveExheW91dCAqIGhseTIgPSBuZXcgUUhCb3hMYXlvdXQoIHZseSwgMTUpOwogICAgIFFTdHJpbmcgczsKICAgICBRUHVzaEJ1dHRvbiAqIHB1c2hCdXR0b24gPSAwTDsKLSAgICBmb3IoIGludCBpPTA7IGk8YnV0TmI7IGkrKykgeworICAgIGZvciAoaW50IGk9MDsgaTxidXROYjsgaSsrKQorICAgIHsKIAlzID0gYnV0dG9uVGV4dFtpXTsKIAlwdXNoQnV0dG9uID0gbmV3IFFQdXNoQnV0dG9uKHMsIHRoaXMgKTsKLQlpZiAocy5maW5kKCcmJykgIT0gLTEpIHsKLQkgICAgcHVzaEJ1dHRvbi0+c2V0QWNjZWwoIHMuYXQocy5maW5kKCcmJykrMSkubGF0aW4xKCkgKTsKLQl9CisJaWYgKHMuZmluZCgnJicpICE9IC0xKQorCSAgICBwdXNoQnV0dG9uLT5zZXRBY2NlbChzLmF0KHMuZmluZCgnJicpKzEpLmxhdGluMSgpKTsKIAogCWhseTItPmFkZFdpZGdldCggcHVzaEJ1dHRvbiApOwotCWlmIChpID09IGRlZl9idXQtMSkgeworCWlmIChpID09IGRlZl9idXQtMSkKKwl7CiAJICAgIHB1c2hCdXR0b24tPnNldERlZmF1bHQoIHRydWUgKTsKIAkgICAgcHVzaEJ1dHRvbi0+c2V0QXV0b0RlZmF1bHQoIHRydWUgKTsKIAkgICAgc2V0UmVzdWx0KCBpKzEgKTsKQEAgLTEyODgsMTIgKzEzMTQsMTYgQEAKICAgICB2bHktPmFjdGl2YXRlKCk7CiB9Ly99fX0KIAotdm9pZCBWaW1EaWFsb2c6OmRvbmUoaW50IHIpIHsKLSAgICBpZiAoZW50cnkhPU5VTEwpIHsKLSAgICAgICAgaWYgKHIpIHsKK3ZvaWQgVmltRGlhbG9nOjpkb25lKGludCByKQoreworICAgIGlmIChlbnRyeSE9TlVMTCkKKyAgICB7CisgICAgICAgIGlmIChyKQorCXsKIAkgICBRQ1N0cmluZyB1bmlzdHJpbmc9dm13LT5jb2RlYy0+ZnJvbVVuaWNvZGUoZW50cnktPnRleHQoKSk7CiAJICAgU1RSQ1BZKHJldCwoY29uc3QgY2hhciopdW5pc3RyaW5nKTsKLQl9IGVsc2UKKwl9CisJZWxzZQogCSAgICAqcmV0PU5VTDsKICAgICB9CiAgICAgUURpYWxvZzo6ZG9uZShyKTsKQEAgLTEzMTEsNyArMTM0MSw4IEBACiAKIHZvaWQgU0JQb29sOjpjcmVhdGUoR3VpU2Nyb2xsYmFyICogc2IsIGludCBvcmllbnQpLy97e3sKIHsKLSAgICBzd2l0Y2gob3JpZW50KSB7CisgICAgc3dpdGNoKG9yaWVudCkKKyAgICB7CiAJY2FzZSBTQkFSX0hPUklaOgogCSAgICBzYi0+dyA9IG5ldyBRU2Nyb2xsQmFyKFFTY3JvbGxCYXI6Okhvcml6b250YWwsIHZtdyk7CiAJICAgIGJyZWFrOwpAQCAtMTM0OSw5ICsxMzgwLDggQEAKICAgICBpZiAoZS0+eHByb3BlcnR5LnR5cGUgPT0gUHJvcGVydHlOb3RpZnkKIAkgICAgJiYgZS0+eHByb3BlcnR5LmF0b20gPT0gY29tbVByb3BlcnR5CiAJICAgICYmIGUtPnhwcm9wZXJ0eS53aW5kb3cgPT0gY29tbVdpbmRvdwotCSAgICAmJiBlLT54cHJvcGVydHkuc3RhdGUgPT0gUHJvcGVydHlOZXdWYWx1ZSApIHsKKwkgICAgJiYgZS0+eHByb3BlcnR5LnN0YXRlID09IFByb3BlcnR5TmV3VmFsdWUpCiAJc2VydmVyRXZlbnRQcm9jKHF0X3hkaXNwbGF5KCksIGUpOwotICAgIH0KIAogICAgIGlmIChvbGRGaWx0ZXIpIHJldHVybiBvbGRGaWx0ZXIoIGUgKTsKICAgICByZXR1cm4gRkFMU0U7CkBAIC0xMzgxLDI5ICsxNDExLDMxIEBACiAgICBRU3RyaW5nTGlzdCBsKFFTdHJpbmdMaXN0OjpzcGxpdCgnLCcsIGRlc2NyaXApKTsKIAogICAgIGludCBjb3VudCA9IGwuY291bnQoKTsKLSAgICBpZiAoY291bnQgIT0gMTAgJiYgY291bnQgIT0gOSkgeworICAgIGlmIChjb3VudCAhPSAxMCAmJiBjb3VudCAhPSA5KQogICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQogCiAgICAgZi0+c2V0RmFtaWx5KGxbMF0pOwogICAgIGYtPnNldFBvaW50U2l6ZShsWzFdLnRvSW50KCkpOwotICAgIGlmICggY291bnQgPT0gOSApIHsKLSAgICAgICAgZi0+c2V0U3R5bGVIaW50KChRRm9udDo6U3R5bGVIaW50KSBsWzJdLnRvSW50KCkpOwotICAgICAgICBmLT5zZXRXZWlnaHQobFszXS50b0ludCgpKTsKLSAgICAgICAgZi0+c2V0SXRhbGljKGxbNF0udG9JbnQoKSk7Ci0gICAgICAgIGYtPnNldFVuZGVybGluZShsWzVdLnRvSW50KCkpOwotICAgICAgICBmLT5zZXRTdHJpa2VPdXQobFs2XS50b0ludCgpKTsKLSAgICAgICAgZi0+c2V0Rml4ZWRQaXRjaChsWzddLnRvSW50KCkpOwotICAgICAgICBmLT5zZXRSYXdNb2RlKGxbOF0udG9JbnQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZi0+c2V0UGl4ZWxTaXplKGxbMl0udG9JbnQoKSk7Ci0gICAgICAgIGYtPnNldFN0eWxlSGludCgoUUZvbnQ6OlN0eWxlSGludCkgbFszXS50b0ludCgpKTsKLSAgICAgICAgZi0+c2V0V2VpZ2h0KGxbNF0udG9JbnQoKSk7Ci0gICAgICAgIGYtPnNldEl0YWxpYyhsWzVdLnRvSW50KCkpOwotICAgICAgICBmLT5zZXRVbmRlcmxpbmUobFs2XS50b0ludCgpKTsKLSAgICAgICAgZi0+c2V0U3RyaWtlT3V0KGxbN10udG9JbnQoKSk7Ci0gICAgICAgIGYtPnNldEZpeGVkUGl0Y2gobFs4XS50b0ludCgpKTsKLSAgICAgICAgZi0+c2V0UmF3TW9kZShsWzldLnRvSW50KCkpOworICAgIGlmICggY291bnQgPT0gOSApCisgICAgeworCWYtPnNldFN0eWxlSGludCgoUUZvbnQ6OlN0eWxlSGludCkgbFsyXS50b0ludCgpKTsKKwlmLT5zZXRXZWlnaHQobFszXS50b0ludCgpKTsKKwlmLT5zZXRJdGFsaWMobFs0XS50b0ludCgpKTsKKwlmLT5zZXRVbmRlcmxpbmUobFs1XS50b0ludCgpKTsKKwlmLT5zZXRTdHJpa2VPdXQobFs2XS50b0ludCgpKTsKKwlmLT5zZXRGaXhlZFBpdGNoKGxbN10udG9JbnQoKSk7CisJZi0+c2V0UmF3TW9kZShsWzhdLnRvSW50KCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCWYtPnNldFBpeGVsU2l6ZShsWzJdLnRvSW50KCkpOworCWYtPnNldFN0eWxlSGludCgoUUZvbnQ6OlN0eWxlSGludCkgbFszXS50b0ludCgpKTsKKwlmLT5zZXRXZWlnaHQobFs0XS50b0ludCgpKTsKKwlmLT5zZXRJdGFsaWMobFs1XS50b0ludCgpKTsKKwlmLT5zZXRVbmRlcmxpbmUobFs2XS50b0ludCgpKTsKKwlmLT5zZXRTdHJpa2VPdXQobFs3XS50b0ludCgpKTsKKwlmLT5zZXRGaXhlZFBpdGNoKGxbOF0udG9JbnQoKSk7CisJZi0+c2V0UmF3TW9kZShsWzldLnRvSW50KCkpOwogICAgIH0KICAgICByZXR1cm4gVFJVRTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9ndWlfa2RlX3dpZGdldC5oIGIvc3JjL2d1aV9rZGVfd2lkLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gc3JjL2d1aV9rZGVfd2lkZ2V0LmgKcmVuYW1lIHRvIHNyYy9ndWlfa2RlX3dpZC5oCmluZGV4IGQ4NDU0NDYuLjM5MTAyZGEgMTAwNjQ0Ci0tLSBhL3NyYy9ndWlfa2RlX3dpZGdldC5oCisrKyBiL3NyYy9ndWlfa2RlX3dpZC5oCkBAIC05NiwxNCArOTYsMTQgQEAKIAl2b2lkIGRpc2FibGVfbXpzY2hlbWVfdGhyZWFkcygpOwogI2VuZGlmCiAJdm9pZCBmbGFzaCgpOwotCQorCiAJLyoqIERDT1AgKi8KIAl2b2lkIGV4ZWNOb3JtYWwoUVN0cmluZyBjb21tYW5kKTsKIAl2b2lkIGV4ZWNJbnNlcnQoUVN0cmluZyBjb21tYW5kKTsKIAl2b2lkIGV4ZWNSYXcoUVN0cmluZyBjb21tYW5kKTsKIAl2b2lkIGV4ZWNDbWQoUVN0cmluZyBjb21tYW5kKTsKIAlRU3RyaW5nIGV2YWwoUVN0cmluZyBleHByKTsKLQkKKwogCWJvb2wgd2FpdF9kb25lOwogCUJsaW5rU3RhdGUgYmxpbmtfc3RhdGU7CiAJUVBhaW50ZXIgKnBhaW50ZXI7CkBAIC0xMzQsNyArMTM0LDcgQEAKIAogCS8qIHdhaXQgZm9yIGlucHV0ICovCiAJUVRpbWVyCXdhaXRfdGltZXI7Ci0JCisKICNpZmRlZiBGRUFUX01aU0NIRU1FCiAJaW50CW16c2NoZW1lX3RpbWVyX2lkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZ3VpX2tkZV94MTEuY2MgYi9zcmMvZ3VpX2tkZV94MTEuY2MKaW5kZXggYzBhZWM4OS4uNjUxN2NkMiAxMDA2NDQKLS0tIGEvc3JjL2d1aV9rZGVfeDExLmNjCisrKyBiL3NyYy9ndWlfa2RlX3gxMS5jYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgPHFmb250Lmg+CiAKIAotI2luY2x1ZGUgImd1aV9rZGVfd2lkZ2V0LmgiCisjaW5jbHVkZSAiZ3VpX2tkZV93aWQuaCIKIAogCiBleHRlcm4gIkMiIHsKZGlmZiAtLWdpdCBhL3NyYy9pZl9weXRob24uYyBiL3NyYy9pZl9weXRob24uYwppbmRleCAyMWM0MzY1Li44ZjRmZGZkIDEwMDY0NAotLS0gYS9zcmMvaWZfcHl0aG9uLmMKKysrIGIvc3JjL2lmX3B5dGhvbi5jCkBAIC0yNzMxLDYgKzI3MzEsNyBAQAogICAgIGNoYXIgKnNhdmU7CiAgICAgaW50IGxlbjsKICAgICBpbnQgaTsKKyAgICBjaGFyICpwOwogCiAgICAgaWYgKG9iaiA9PSBOVUxMIHx8ICFQeVN0cmluZ19DaGVjayhvYmopKQogICAgIHsKQEAgLTI3NDEsMTQgKzI3NDIsMjIgQEAKICAgICBzdHIgPSBQeVN0cmluZ19Bc1N0cmluZyhvYmopOwogICAgIGxlbiA9IFB5U3RyaW5nX1NpemUob2JqKTsKIAotICAgIC8qIEVycm9yIGNoZWNraW5nOiBTdHJpbmcgbXVzdCBub3QgY29udGFpbiBuZXdsaW5lcywgYXMgd2UKKyAgICAvKgorICAgICAqIEVycm9yIGNoZWNraW5nOiBTdHJpbmcgbXVzdCBub3QgY29udGFpbiBuZXdsaW5lcywgYXMgd2UKICAgICAgKiBhcmUgcmVwbGFjaW5nIGEgc2luZ2xlIGxpbmUsIGFuZCB3ZSBtdXN0IHJlcGxhY2UgaXQgd2l0aAogICAgICAqIGEgc2luZ2xlIGxpbmUuCisgICAgICogQSB0cmFpbGluZyBuZXdsaW5lIGlzIHJlbW92ZWQsIHNvIHRoYXQgYXBwZW5kKGYucmVhZGxpbmVzKCkpIHdvcmtzLgogICAgICAqLwotICAgIGlmIChtZW1jaHIoc3RyLCAnXG4nLCBsZW4pKQorICAgIHAgPSBtZW1jaHIoc3RyLCAnXG4nLCBsZW4pOworICAgIGlmIChwICE9IE5VTEwpCiAgICAgewotCVB5RXJyX1NldFZpbShfKCJzdHJpbmcgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiKSk7Ci0JcmV0dXJuIE5VTEw7CisJaWYgKHAgPT0gc3RyICsgbGVuIC0gMSkKKwkgICAgLS1sZW47CisJZWxzZQorCXsKKwkgICAgUHlFcnJfU2V0VmltKF8oInN0cmluZyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIpKTsKKwkgICAgcmV0dXJuIE5VTEw7CisJfQogICAgIH0KIAogICAgIC8qIENyZWF0ZSBhIGNvcHkgb2YgdGhlIHN0cmluZywgd2l0aCBpbnRlcm5hbCBudWxscyByZXBsYWNlZCBieQpkaWZmIC0tZ2l0IGEvc3JjL21haW4uYWFwIGIvc3JjL21haW4uYWFwCmluZGV4IDhjMjQzY2EuLjNiNzg1NzkgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluLmFhcAorKysgYi9zcmMvbWFpbi5hYXAKQEAgLTEwMCw5ICsxMDAsOSBAQAogCUdVSV9URVNUVEFSR0VUCT0gZ3VpCiAgICAgS0RFCiAgICAgICAgIEdVSV9TUkMJCT0gZ3VpLmMgcHR5LmMgZ3VpX2tkZS5jYyBndWlfa2RlX3gxMS5jYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aV9rZGVfd2lkZ2V0X21vYy5jYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aV9rZGVfd2lkX21vYy5jYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt2aW1faWZhY2Vfc2tlbC5jYwotICAgICAgICBHVUlfT0JKCQk9ICRCRElSL2d1aV9rZGVfd2lkZ2V0Lm8KKyAgICAgICAgR1VJX09CSgkJPSAkQkRJUi9ndWlfa2RlX3dpZC5vCiAgICAgICAgIEdVSV9ERUZTCT0gLURGRUFUX0dVSV9LREUgJE5BUlJPV19QUk9UTwogICAgICAgICBHVUlfSVBBVEgJPSAkR1VJX0lOQ19MT0MKICAgICAgICAgR1VJX0xJQlNfRElSCT0gJEdVSV9MSUJfTE9DCkBAIC0yMTgsNyArMjE4LDcgQEAKIHRlc3RjbGVhbiB7dmlydHVhbH06CiAgICAgOmRlbCB7Zm9yY2V9IHRlc3RkaXIvKi5vdXQgdGVzdGRpci90ZXN0LmxvZwogCi1DTEVBTkZJTEVTICs9IGd1aV9rZGVfd2lkZ2V0X21vYy5jYyBrdmltX2lmYWNlX3NrZWwuY2MgKi5raWRsCitDTEVBTkZJTEVTICs9IGd1aV9rZGVfd2lkX21vYy5jYyBrdmltX2lmYWNlX3NrZWwuY2MgKi5raWRsCiAKICMgV2hlbiBubyBmZXRjaCB0YXJnZXQgZXhpc3RzIHdlIGFyZSBub3QgYSBjaGlsZCBvZiB0aGUgLi4vbWFpbi5hYXAgcmVjaXBlLAogIyBVc2UgLi4vbWFpbi5hYXAgdG8gZG8gdGhlIGZldGNoaW5nLgpAQCAtMzU2LDE4ICszNTYsMTggQEAKIAk6c3lzICRQRVJMICRQRVJMTElCL0V4dFV0aWxzL3hzdWJwcCAtcHJvdG90eXBlcyAtdHlwZW1hcCBcCiAJICAgICRQRVJMTElCL0V4dFV0aWxzL3R5cGVtYXAgaWZfcGVybC54cyA+PiAkdGFyZ2V0CiAKLSRCRElSL2d1aV9rZGVfd2lkZ2V0Lm86IGd1aV9rZGVfd2lkZ2V0LmNjCi0gICAgICAgIDpzeXMgJE1PQyAtbyBndWlfa2RlX3dpZGdldF9tb2MuY2MgZ3VpX2tkZV93aWRnZXQuaAorJEJESVIvZ3VpX2tkZV93aWQubzogZ3VpX2tkZV93aWQuY2MKKyAgICAgICAgOnN5cyAkTU9DIC1vIGd1aV9rZGVfd2lkX21vYy5jYyBndWlfa2RlX3dpZC5oCiAgICAgICAgIEB0cnk6CiAgICAgICAgICAgICA6c3lzICRLREVfUFJFRklYL2Jpbi9kY29waWRsIGt2aW1faWZhY2UuaCA+IGt2aW1faWZhY2Uua2lkbAogICAgICAgICBAZXhjZXB0OgogICAgICAgICAgICAgOmRlbCB7Zn0ga3ZpbV9pZmFjZS5raWRsCiAgICAgICAgIDpzeXMgJEtERV9QUkVGSVgvYmluL2Rjb3BpZGwyY3BwIC0tYysrLXN1ZmZpeCBjYyAtLW5vLXN0dWIga3ZpbV9pZmFjZS5raWRsCi0gICAgICAgIDpkbyBjb21waWxlIGd1aV9rZGVfd2lkZ2V0LmNjCisgICAgICAgIDpkbyBjb21waWxlIGd1aV9rZGVfd2lkLmNjCiAKLWd1aV9rZGVfd2lkZ2V0X21vYy5jYzogJEJESVIvZ3VpX2tkZV93aWRnZXQubworZ3VpX2tkZV93aWRfbW9jLmNjOiAkQkRJUi9ndWlfa2RlX3dpZC5vCiAKLWt2aW1faWZhY2Vfc2tlbC5jYzogJEJESVIvZ3VpX2tkZV93aWRnZXQubwora3ZpbV9pZmFjZV9za2VsLmNjOiAkQkRJUi9ndWlfa2RlX3dpZC5vCiAKIAogYXV0by9vc2RlZi5oOiBhdXRvL2NvbmZpZy5oIG9zZGVmLnNoIG9zZGVmMS5oLmluIG9zZGVmMi5oLmluCmRpZmYgLS1naXQgYS9zcmMvbWVtbGluZS5jIGIvc3JjL21lbWxpbmUuYwppbmRleCAxNzY3MDUzLi42N2QyMzNiIDEwMDY0NAotLS0gYS9zcmMvbWVtbGluZS5jCisrKyBiL3NyYy9tZW1saW5lLmMKQEAgLTQzMzgsOCArNDMzOCwxNyBAQAogCWN1cmxpbmUgPSBidWYtPmJfbWwubWxfbG9ja2VkX2hpZ2ggKyAxOwogICAgIH0KIAotICAgIGlmIChmZmRvcykKLQlzaXplICs9IGxpbmUgLSAxOworICAgIGlmIChsaW5lICE9IDApCisgICAgeworCS8qIENvdW50IGV4dHJhIENSIGNoYXJhY3RlcnMuICovCisJaWYgKGZmZG9zKQorCSAgICBzaXplICs9IGxpbmUgLSAxOworCisJLyogRG9uJ3QgY291bnQgdGhlIGxhc3QgbGluZSBicmVhayBpZiAnYmluJyBhbmQgJ25vZW9sJy4gKi8KKwlpZiAoYnVmLT5iX3BfYmluICYmICFidWYtPmJfcF9lb2wpCisJICAgIHNpemUgLT0gZmZkb3MgKyAxOworICAgIH0KKwogICAgIHJldHVybiBzaXplOwogfQogCmRpZmYgLS1naXQgYS9zcmMvbWlzYzIuYyBiL3NyYy9taXNjMi5jCmluZGV4IGRiYzUxNjYuLjgyYjg4ODcgMTAwNjQ0Ci0tLSBhL3NyYy9taXNjMi5jCisrKyBiL3NyYy9taXNjMi5jCkBAIC0zNjA2LDggKzM2MDYsNyBAQAogICAgIH0KIAogICAgIC8qIFN0b3JlIGluZm9ybWF0aW9uIG9uIHN0YXJ0aW5nIGRpciBub3cgaWYgcGF0aCBpcyByZWxhdGl2ZS4KLSAgICAgKiBJZiBwYXRoIGlzIGFic29sdXRlLCB3ZSBkbyB0aGF0IGxhdGVyLgotICAgICAqLworICAgICAqIElmIHBhdGggaXMgYWJzb2x1dGUsIHdlIGRvIHRoYXQgbGF0ZXIuICAqLwogICAgIGlmIChwYXRoWzBdID09ICcuJwogCSAgICAmJiAodmltX2lzcGF0aHNlcChwYXRoWzFdKSB8fCBwYXRoWzFdID09IE5VTCkKIAkgICAgJiYgKCF0YWdmaWxlIHx8IHZpbV9zdHJjaHIocF9jcG8sIENQT19ET1RUQUcpID09IE5VTEwpCkBAIC0zODg2LDcgKzM4ODUsNyBAQAogICogUmV0dXJuIGEgcG9pbnRlciB0byBhbiBhbGxvY2F0ZWQgZmlsZSBuYW1lIG9yIE5VTEwgaWYgbm90aGluZyBmb3VuZC4KICAqIFRvIGdldCBhbGwgbWF0Y2hpbmcgZmlsZXMgY2FsbCB0aGlzIGZ1bmN0aW9uIHVudGlsIHlvdSBnZXQgTlVMTC4KICAqCi0gKiBJZiB0aGUgcGFzc2VkIHNlYXJjaF9jb250ZXh0IGlzIE5VTEwsIGl0IHRoZSByZXR1cm5zIE5VTEwuCisgKiBJZiB0aGUgcGFzc2VkIHNlYXJjaF9jb250ZXh0IGlzIE5VTEwsIE5VTEwgaXMgcmV0dXJuZWQuCiAgKgogICogVGhlIHNlYXJjaCBhbGdvcml0aG0gaXMgZGVwdGggZmlyc3QuIFRvIGNoYW5nZSB0aGlzIHJlcGxhY2UgdGhlCiAgKiBzdGFjayB3aXRoIGEgbGlzdCAoZG9uJ3QgZm9yZ2V0IHRvIGxlYXZlIHBhcnRseSBzZWFyY2hlZCBkaXJlY3RvcmllcyBvbiB0aGUKZGlmZiAtLWdpdCBhL3NyYy9vcHMuYyBiL3NyYy9vcHMuYwppbmRleCAyZTQyOGFlLi4xMjg5ODRlIDEwMDY0NAotLS0gYS9zcmMvb3BzLmMKKysrIGIvc3JjL29wcy5jCkBAIC0xMTI5LDcgKzExMjksNyBAQAogCW5ld19sYXN0X2NtZGxpbmUgPSBOVUxMOwogCS8qIEVzY2FwZSBhbGwgY29udHJvbCBjaGFyYWN0ZXJzIHdpdGggYSBDVFJMLVYgKi8KIAlwID0gdmltX3N0cnNhdmVfZXNjYXBlZF9leHQobGFzdF9jbWRsaW5lLAotCQkiXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyIsIEN0cmxfViwgRkFMU0UpOworCQkoY2hhcl91ICopIlwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzciLCBDdHJsX1YsIEZBTFNFKTsKIAlpZiAocCAhPSBOVUxMKQogCSAgICByZXR2YWwgPSBwdXRfaW5fdHlwZWJ1ZihwLCBUUlVFKTsKIAl2aW1fZnJlZShwKTsKZGlmZiAtLWdpdCBhL3NyYy9vc19tYWMuaCBiL3NyYy9vc19tYWMuaAppbmRleCA5NDBlMjY3Li41ZWY3MzEwIDEwMDY0NAotLS0gYS9zcmMvb3NfbWFjLmgKKysrIGIvc3JjL29zX21hYy5oCkBAIC0xMTksOCArMTE5LDggQEAKICAqICAgICAgIH4vTGlicmFyeS9WaW0gb3Igfi9MaWJyYXJ5L1ByZWZlcmVuY2VzL29yZy52aW0udmltLyA/IChEYW55KQogICovCiAvKiBXaGVuIGNvbXBpbGVkIHVuZGVyIE1hY09TIFggKGluY2x1ZGluZyBDQVJCT04gdmVyc2lvbikKLSAqIHdlIHVzZSB0aGUgVW5peCBGaWxlIHBhdGggc3R5bGUgKi8KLSNpZiBkZWZpbmVkKFRBUkdFVF9BUElfTUFDX09TWCkgJiYgVEFSR0VUX0FQSV9NQUNfT1NYCisgKiB3ZSB1c2UgdGhlIFVuaXggRmlsZSBwYXRoIHN0eWxlLiAgQWxzbyB3aGVuIFVOSVggaXMgZGVmaW5lZC4gKi8KKyNpZiBkZWZpbmVkKFVOSVgpIHx8IChkZWZpbmVkKFRBUkdFVF9BUElfTUFDX09TWCkgJiYgVEFSR0VUX0FQSV9NQUNfT1NYKQogIyB1bmRlZiBDT0xPTl9BU19QQVRIU0VQCiAjIGRlZmluZSBVU0VfVU5JWEZJTEVOQU1FCiAjZWxzZQpAQCAtMTQwLDE0ICsxNDAsMTYgQEAKICNkZWZpbmUgQ0FTRV9JTlNFTlNJVElWRV9GSUxFTkFNRSAgIC8qIGlnbm9yZSBjYXNlIHdoZW4gY29tcGFyaW5nIGZpbGUgbmFtZXMgKi8KICNkZWZpbmUgU1BBQ0VfSU5fRklMRU5BTUUKICNkZWZpbmUgQlJFQUtDSEVDS19TS0lQCSAgIDMyCSAgICAvKiBjYWxsIG1jaF9icmVha2NoZWNrKCkgZWFjaCB0aW1lLCBpdCdzCi0JCQkJICAgICAgIHF1aXRlIGZhc3QuIERpZCBJIGZvcmdvdCB0byB1cGRhdGUgdGhlIGNvbW1lbnQgKi8KKwkJCQkgICAgICAgcXVpdGUgZmFzdC4gRGlkIEkgZm9yZ290IHRvIHVwZGF0ZSB0aGUKKwkJCQkgICAgICAgY29tbWVudCAqLwogCiAKLSN1bmRlZiAgVVNFX0ZOQU1FX0NBU0UJICAgIC8qIFNvIHRoYXQgOmUgb3NfTWFjLmMsIDp3LCBzYXZlIGJhY2sgdGhlIGZpbGUgYXMgb3NfbWFjLmMgKi8KKyN1bmRlZiAgVVNFX0ZOQU1FX0NBU0UJCS8qIFNvIHRoYXQgOmUgb3NfTWFjLmMsIDp3LCBzYXZlIGJhY2sgdGhlIGZpbGUKKwkJCQkgICBhcyBvc19tYWMuYyAqLwogI2RlZmluZSBCSU5BUllfRklMRV9JTwogI2RlZmluZSBFT0xfREVGQVVMVCBFT0xfTUFDCi0jaWZuZGVmIE1BQ09TX1hfVU5JWAkgICAgLyogSSBob3BlIHRoYXQgc3dpdGNoaW5nIHRoZXNlIHR3byBsaW5lcyAqLwotIyBkZWZpbmUgVVNFX0NSCQkgICAgLyogZG9lcyB3aGF0IEkgd2FudCAtLSBCTkYgKi8KKyNpZm5kZWYgTUFDT1NfWF9VTklYCQkvKiBJIGhvcGUgdGhhdCBzd2l0Y2hpbmcgdGhlc2UgdHdvIGxpbmVzICovCisjIGRlZmluZSBVU0VfQ1IJCQkvKiBkb2VzIHdoYXQgSSB3YW50IC0tIEJORiAqLwogIyBkZWZpbmUgTk9fQ09OU09MRQkJLyogZG9uJ3QgaW5jbHVkZSBjb25zb2xlIG1vZGUgKi8KICNlbmRpZgogI2RlZmluZSBIQVZFX0FWQUlMX01FTQpkaWZmIC0tZ2l0IGEvc3JjL29zX21hY19jb252LmMgYi9zcmMvb3NfbWFjX2NvbnYuYwppbmRleCAzZGZhY2ZlLi4zZjY0ZTNkIDEwMDY0NAotLS0gYS9zcmMvb3NfbWFjX2NvbnYuYworKysgYi9zcmMvb3NfbWFjX2NvbnYuYwpAQCAtMTYsNiArMTYsNyBAQAogI2RlZmluZSBOT19YMTFfSU5DTFVERVMKICNpbmNsdWRlICJ2aW0uaCIKIAorI2lmZGVmIEZFQVRfTUJZVEUKIGV4dGVybiBjaGFyX3UgKm1hY19zdHJpbmdfY29udmVydCBfX0FSR1MoKGNoYXJfdSAqcHRyLCBpbnQgbGVuLCBpbnQgKmxlbnAsIGludCBmYWlsX29uX2Vycm9yLCBpbnQgZnJvbSwgaW50IHRvLCBpbnQgKnVuY29udmxlbnApKTsKIGV4dGVybiBpbnQgbWFjcm9tYW4yZW5jIF9fQVJHUygoY2hhcl91ICpwdHIsIGxvbmcgKnNpemVwLCBsb25nIHJlYWxfc2l6ZSkpOwogZXh0ZXJuIGludCBlbmMybWFjcm9tYW4gX19BUkdTKChjaGFyX3UgKmZyb20sIHNpemVfdCBmcm9tbGVuLCBjaGFyX3UgKnRvLCBpbnQgKnRvbGVucCwgaW50IG1heHRvbGVuLCBjaGFyX3UgKnJlc3QsIGludCAqcmVzdGxlbnApKTsKQEAgLTIyOCwzICsyMjksNSBAQAogICAgICp0b2xlbnAgPSBsOwogICAgIHJldHVybiBPSzsKIH0KKworI2VuZGlmIC8qIEZFQVRfTUJZVEUgKi8KZGlmZiAtLWdpdCBhL3NyYy9wby9ydS5jcDEyNTEucG8gYi9zcmMvcG8vcnUuY3AxMjUxLnBvCmluZGV4IDg1YjFkNjguLjdhZTM0Y2IgMTAwNjQ0Ci0tLSBhL3NyYy9wby9ydS5jcDEyNTEucG8KKysrIGIvc3JjL3BvL3J1LmNwMTI1MS5wbwpAQCAtMTIzOSw3ICsxMjM5LDcgQEAKICM6IGV4X2RvY21kLmM6NDU4NAogIywgYy1mb3JtYXQKIG1zZ2lkICJFMTczOiAlbGQgbW9yZSBmaWxlcyB0byBlZGl0IgotbXNnc3RyICJFMTczOiDF8fL8IO3l7vLw5eTg6vLo8O7i4O3t++Ug9ODp6/sgKCVkKS4iCittc2dzdHIgIkUxNzM6IMXx8vwg7eXu8vDl5ODq8ujw7uLg7e375SD04Onr+yAoJWxkKS4iCiAKICM6IGV4X2RvY21kLmM6NDY3OQogbXNnaWQgIkUxNzQ6IENvbW1hbmQgYWxyZWFkeSBleGlzdHM6IGFkZCAhIHRvIHJlcGxhY2UgaXQiCkBAIC0yNDQ2LDcgKzI0NDYsNyBAQAogIzogaWZfY3Njb3BlLmM6NTg5CiAjLCBjLWZvcm1hdAogbXNnaWQgIkUyNjI6IGVycm9yIHJlYWRpbmcgY3Njb3BlIGNvbm5lY3Rpb24gJWxkIgotbXNnc3RyICJFMjYyOiDu+Ojh6uAg7+7r8/fl7ej/IOjt9O7w7OD26Ogg7vIg8e7l5Ojt5e3o/yBjc2NvcGUgJWQiCittc2dzdHIgIkUyNjI6IO746OHq4CDv7uvz9+Xt6P8g6O307vDs4Pbo6CDu8iDx7uXk6O3l7ej/IGNzY29wZSAlbGQiCiAKICM6IGlmX2NzY29wZS5jOjY5NAogbXNnaWQgIkU1NjE6IHVua25vd24gY3Njb3BlIHNlYXJjaCB0eXBlIgpAQCAtMjUyNCw3ICsyNTI0LDcgQEAKICM6IGlmX2NzY29wZS5jOjE0NTgKICMsIGMtZm9ybWF0CiBtc2dpZCAiY3Njb3BlIGNvbm5lY3Rpb24gJXMgY2xvc2VkIgotbXNnc3RyICLx7uXk6O3l7ejlIPEgY3Njb3BlIOfg6vD78u4iCittc2dzdHIgIvHu5eTo7eXt6OUg8SBjc2NvcGUgJXMg5+Dq8Pvy7iIKIAogIy4gc2hvdWxkIG5vdCByZWFjaCBoZXJlCiAjOiBpZl9jc2NvcGUuYzoxNTk4CmRpZmYgLS1naXQgYS9zcmMvcG8vcnUucG8gYi9zcmMvcG8vcnUucG8KaW5kZXggN2JkOWQ3Mi4uMWQxYzVkNSAxMDA2NDQKLS0tIGEvc3JjL3BvL3J1LnBvCisrKyBiL3NyYy9wby9ydS5wbwpAQCAtMTIzOSw3ICsxMjM5LDcgQEAKICM6IGV4X2RvY21kLmM6NDU4NAogIywgYy1mb3JtYXQKIG1zZ2lkICJFMTczOiAlbGQgbW9yZSBmaWxlcyB0byBlZGl0IgotbXNnc3RyICJFMTczOiDQldGB0YLRjCDQvdC10L7RgtGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC90YvQtSDRhNCw0LnQu9GLICglZCkuIgorbXNnc3RyICJFMTczOiDQldGB0YLRjCDQvdC10L7RgtGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC90YvQtSDRhNCw0LnQu9GLICglbGQpLiIKIAogIzogZXhfZG9jbWQuYzo0Njc5CiBtc2dpZCAiRTE3NDogQ29tbWFuZCBhbHJlYWR5IGV4aXN0czogYWRkICEgdG8gcmVwbGFjZSBpdCIKQEAgLTI0NDYsNyArMjQ0Niw3IEBACiAjOiBpZl9jc2NvcGUuYzo1ODkKICMsIGMtZm9ybWF0CiBtc2dpZCAiRTI2MjogZXJyb3IgcmVhZGluZyBjc2NvcGUgY29ubmVjdGlvbiAlbGQiCi1tc2dzdHIgIkUyNjI6INC+0YjQuNCx0LrQsCDQv9C+0LvRg9GH0LXQvdC40Y8g0LjQvdGE0L7RgNC80LDRhtC40Lgg0L7RgiDRgdC+0LXQtNC40L3QtdC90LjRjyBjc2NvcGUgJWQiCittc2dzdHIgIkUyNjI6INC+0YjQuNCx0LrQsCDQv9C+0LvRg9GH0LXQvdC40Y8g0LjQvdGE0L7RgNC80LDRhtC40Lgg0L7RgiDRgdC+0LXQtNC40L3QtdC90LjRjyBjc2NvcGUgJWxkIgogCiAjOiBpZl9jc2NvcGUuYzo2OTQKIG1zZ2lkICJFNTYxOiB1bmtub3duIGNzY29wZSBzZWFyY2ggdHlwZSIKQEAgLTI1MjQsNyArMjUyNCw3IEBACiAjOiBpZl9jc2NvcGUuYzoxNDU4CiAjLCBjLWZvcm1hdAogbXNnaWQgImNzY29wZSBjb25uZWN0aW9uICVzIGNsb3NlZCIKLW1zZ3N0ciAi0YHQvtC10LTQuNC90LXQvdC40LUg0YEgY3Njb3BlINC30LDQutGA0YvRgtC+IgorbXNnc3RyICLRgdC+0LXQtNC40L3QtdC90LjQtSDRgSBjc2NvcGUgJXMg0LfQsNC60YDRi9GC0L4iCiAKICMuIHNob3VsZCBub3QgcmVhY2ggaGVyZQogIzogaWZfY3Njb3BlLmM6MTU5OApkaWZmIC0tZ2l0IGEvc3JjL3NlYXJjaC5jIGIvc3JjL3NlYXJjaC5jCmluZGV4IDIyN2IyNTQuLjQ1MTNlYTEgMTAwNjQ0Ci0tLSBhL3NyYy9zZWFyY2guYworKysgYi9zcmMvc2VhcmNoLmMKQEAgLTM3NjAsMTAgKzM3NjAsMTEgQEAKICAqIEZpbmQgcXVvdGUgdW5kZXIgdGhlIGN1cnNvciwgY3Vyc29yIGF0IGVuZC4KICAqIFJldHVybnMgVFJVRSBpZiBmb3VuZCwgZWxzZSBGQUxTRS4KICAqLworLypBUkdTVVNFRCovCiAgICAgaW50CiBjdXJyZW50X3F1b3RlKG9hcCwgY291bnQsIGluY2x1ZGUsIHF1b3RlY2hhcikKICAgICBvcGFyZ19UCSpvYXA7Ci0gICAgbG9uZwljb3VudDsKKyAgICBsb25nCWNvdW50OwkJLyogbm90IHVzZWQgKi8KICAgICBpbnQJCWluY2x1ZGU7CS8qIFRSVUUgPT0gaW5jbHVkZSBxdW90ZSBjaGFyICovCiAgICAgaW50CQlxdW90ZWNoYXI7CS8qIFF1b3RlIGNoYXJhY3RlciAqLwogewo=