ZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9jYXJkLmMgYi9zdXB3aXNkb20vc3BfY2FyZC5jCmluZGV4IDVjNjc5NmEuLmM4OGJmYTkgMTAwNjQ0Ci0tLSBhL3N1cHdpc2RvbS9zcF9jYXJkLmMKKysrIGIvc3Vwd2lzZG9tL3NwX2NhcmQuYwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgaWYoIWNhcmRfY3B1X21vZGUoKSkKICAgICAgIHsKICAgICAgICAgRGVsYXlfbXMoMjAwKTsKLQkJaWYoc3Bfc2VsZWN0X3NmaSgiXHgzZlx4MDAiKSA9PSAwKQorICAgICAgICBpZihzcF9zZWxlY3Rfc2ZpKCJceDNmXHgwMCIpID09IDApCiAgICAgICAgIHsKICAgICAgICAgICBzcF9zZWxlY3RfYWRmKCk7CiAgICAgICAgICAgY2FyZHBjZC0+Y2FyZHBoeWlkWzBdID0gc25yWzNdOwpAQCAtNjcsNyArNjcsNyBAQAogICAgIGVsc2UKICAgICB7CiAgICAgICBjYXJkcGNkLT5jYXJkdHlwZSA9IFRBR19UWVBFX1VOS09OV047Ci0JICByZXR1cm4gMTsKKyAgICAgIHJldHVybiAxOwogICAgIH0KICAgfQogICByZXR1cm4gMTsKQEAgLTc4LDExICs3OCw1NyBAQAogICByZXR1cm4gY2FyZF9jcHVfZXhpc3QoKTsKIH0KIAorc3RhdGljIHVpbnQxNiBzcF9zZWxlY3RfYWRmMTUoKQoreworICB1aW50MTYgcmV0ID0gMDsKKyAgdWludDgqIHRlbXBfYnVmZiA9IE5VTEw7CisgIHVpbnQ4IGJ1ZmZfbGVuID0gMDsKKyAgdWludDggY21kX2J1ZmZbXSA9IHsiXHgwMFx4QTRceDAwXHgwMFx4MDJceDNGXHgwMCJ9OworICByZXQgPSBjYXJkX2NwdV9leGNoYW5nZShjbWRfYnVmZiwgc2l6ZW9mKGNtZF9idWZmKS0xLCAwLCAmdGVtcF9idWZmLCAmYnVmZl9sZW4pOworICBpZihyZXQgIT0gUkVUQ09ERV9PSykKKyAgeworICAgIHJldHVybiByZXQ7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1aW50MTYgc3BfcmVhZF9iaW5hcnlfZmlsZSh1aW50OCBvdXRbXSkKK3sKKyAgdWludDE2IHJldCA9IDA7CisgIHVpbnQ4KiB0ZW1wX2J1ZmYgPSBOVUxMOworICB1aW50OCBidWZmX2xlbiA9IDA7CisgIHVpbnQ4IGNtZF9idWZmWzVdID0geyJceDAwXHhCMFx4OTVceDAwXHg0NyJ9OworICByZXQgPSBjYXJkX2NwdV9leGNoYW5nZShjbWRfYnVmZiwgc2l6ZW9mKGNtZF9idWZmKSwgMCwgJnRlbXBfYnVmZiwgJmJ1ZmZfbGVuKTsKKyAgaWYocmV0ICE9IFJFVENPREVfT0spCisgIHsKKyAgICByZXR1cm4gcmV0OworICB9CisgIE1FTUNQWShvdXQsIHRlbXBfYnVmZiwgYnVmZl9sZW4pOworICByZXR1cm4gMDsKK30KIHN0YXRpYyB1aW50MTYgc3BfY3B1X3JlYWQoc3BfY2FyZF90KiBjYXJkKQogewogICB1aW50MTYgcmV0ID0gMDsKKyAgdWludDggYnVmZls3Ml07CisgIHVpbnQ4IG9mZnNldCA9IDA7CisgIE1FTUNMRUFSKGJ1ZmYsIHNpemVvZihidWZmKSk7CisgIHJldCA9IHNwX3NlbGVjdF9hZGYxNSgpOworICBpZihyZXQpCisgIHsKKyAgICByZXR1cm4gcmV0OworCisgIH0KKyAgcmV0ID0gc3BfcmVhZF9iaW5hcnlfZmlsZShidWZmKTsKKyAgaWYocmV0KQorICB7CisgICAgcmV0dXJuIHJldDsKKyAgfQogICBNRU1DTEVBUihjYXJkLT5jaXRpemVuX2NhcmRubywgc2l6ZW9mKGNhcmQtPmNpdGl6ZW5fY2FyZG5vKSk7Ci0gIE1FTUNQWShjYXJkLT5leHBpcmVkYXRlLCAiXHgyMFx4MjJceDA4XHgwMiIsIDQpOworICBvZmZzZXQgKz0gMzE7CisgIE1FTUNQWShjYXJkLT5jaXRpemVuX2NhcmRubywgYnVmZitvZmZzZXQsIHNpemVvZihjYXJkLT5jaXRpemVuX2NhcmRubykpOworICBvZmZzZXQgKz0gMTI7CisgIG9mZnNldCArPSAxODsKKyAgTUVNQ1BZKGNhcmQtPmV4cGlyZWRhdGUsIGJ1ZmYrb2Zmc2V0LCA0KTsKICAgcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMgYi9zdXB3aXNkb20vc3BfY29tbXVuaWNhdGUuYwppbmRleCBiYWYzNzhjLi5hODZmNTAzIDEwMDY0NAotLS0gYS9zdXB3aXNkb20vc3BfY29tbXVuaWNhdGUuYworKysgYi9zdXB3aXNkb20vc3BfY29tbXVuaWNhdGUuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAgIGN3X3BhY2tfbWFwX3NpemUoJnBhY2ssNCk7CiAKICAgc3BfcGFja19wdXRfYmluKCZwYWNrLCBQS19CSU5fQ0FSRFBIWUlELCBjYXJkLT5jYXJkcGh5aWQsIDQpOwotICBzcF9wYWNrX3B1dF9iaW4oJnBhY2ssIFBLX0JJTl9DSVRJWkVOX0NBUkROTywgY2FyZC0+Y2l0aXplbl9jYXJkbm8sIDEyKTsKKyAgc3BfcGFja19wdXRfYmluKCZwYWNrLCBQS19CSU5fQ0lUSVpFTl9DQVJETk8sIGNhcmQtPmNpdGl6ZW5fY2FyZG5vKzgsIDQpOwogICBzcF9wYWNrX3B1dF9iaW4oJnBhY2ssIFBLX0JJTl9ERVZQSFlJRCwgcG9zLT5kZXZwaHlpZCwgNCk7CiAgIHNwX3BhY2tfcHV0X2JpbigmcGFjaywgUEtfQklOX0RFVlRJTUUsIGN0aW1lLCA2KTsKIApkaWZmIC0tZ2l0IGEvc3Vwd2lzZG9tL3NwX2NvbnN1bWUuYyBiL3N1cHdpc2RvbS9zcF9jb25zdW1lLmMKaW5kZXggNTg3ZTJhNC4uNzAzYzAwYyAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbnN1bWUuYworKysgYi9zdXB3aXNkb20vc3BfY29uc3VtZS5jCkBAIC0yNDAsMTIgKzI0MCw2IEBACiAgICAgcmV0ID0gUkNfQ0FSRF9JTlZBTElEOwogICAgIHJldHVybiByZXQ7CiAgIH0KLSAgcmV0ID0gc3BfY2FyZF9hdXRoZW50aWNhdGlvbihwb3MsIGNhcmQpOwotICBpZihyZXQpCi0gIHsKLSAgICByZXQgPSBSQ19DQVJEX0FVVEhFTlRJQ0FUSU9OOwotICAgIHJldHVybiByZXQ7Ci0gIH0KICAgaWYocG9zLT5sb2FkX3BhcmFfc3RhdHVzKQogICB7CiAgICAgcmV0dXJuIHBvcy0+bG9hZF9wYXJhX3N0YXR1czsKQEAgLTI2Niw2ICsyNjAsMTIgQEAKICAgewogICAgIHJldHVybiByZXQ7CiAgIH0KKyAgcmV0ID0gc3BfY2FyZF9hdXRoZW50aWNhdGlvbihwb3MsIGNhcmQpOworICBpZihyZXQpCisgIHsKKyAgICByZXQgPSBSQ19DQVJEX0FVVEhFTlRJQ0FUSU9OOworICAgIHJldHVybiByZXQ7CisgIH0KICAgcmV0ID0gc3BfcHJlcGFyZV9iZWhhbGZfdHJhbnNkdGwocG9zLCBjYXJkLCAmcmVjb3JkKTsKICAgaWYocmV0KQogICB7CkBAIC01OTAsMzAgKzU5MCwzMSBAQAogICB1aW50OCBrZXljb2RlID0gU1BfS0VZX05PTkU7CiAgIGtleWNvZGUgPSBzcF9nZXRfa2V5KCk7CiAgIC8v1Nq/qM/7t9HU3c2jx+m/9s/CsLTIztLivPzOqr3hyvi1scewz/u30de0zKwKLSAgaWYoa2V5Y29kZSA+PSBTUF9LRVlfMCAmJiBrZXljb2RlIDw9IFNQX0tFWV9FTlRFUiAmJiBwb3MtPmNhcmRTdGF0ZS5jdXJfc3RhdGUgPT0gU1RBVEVfTk9ORQorICBpZihrZXljb2RlID49IFNQX0tFWV8wICYmIGtleWNvZGUgPD0gU1BfS0VZX0VOVEVSCisgICAgICAmJiBwb3MtPmNhcmRTdGF0ZS5jdXJfc3RhdGUgPT0gU1RBVEVfTk9ORQogICAgICAgJiYgY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZSA9PSBDQVJEV09SS1NUQVRVU19QQVVTRSAmJiBwb3MtPnBheW1vZGUgPT0gUEFZTU9ERV9DQVJEKQogICB7Ci0gIAljYXJkV29ya1N0YXRlLT5jdXJyZW50X3N0YXRlID0gQ0FSRFdPUktTVEFUVVNfU1RPUFBJTkc7Ci0JcmV0dXJuOworICAgIGNhcmRXb3JrU3RhdGUtPmN1cnJlbnRfc3RhdGUgPSBDQVJEV09SS1NUQVRVU19TVE9QUElORzsKKyAgICByZXR1cm47CiAgIH0KICAgLy/P+7fRxKPKvbP1yry7r9e0zKzPwrC0yLfIz7z80aHU8bb+zqzC68/7t9EKICAgaWYoKGtleWNvZGUgPT0gU1BfS0VZX0VOVEVSKSAmJiAocG9zLT5wYXltb2RlID09IFBBWU1PREVfSU5JVCkpCiAgIHsKICAgICBjYXJkV29ya1N0YXRlLT5jdXJyZW50X3N0YXRlID0gQ0FSRFdPUktTVEFUVVNfTk9ORTsKICAgICBwb3MtPnBheW1vZGUgPSBQQVlNT0RFX1FSQ09ERTsKLQlyZXR1cm47CisgICAgcmV0dXJuOwogICB9CiAgIC8vtv7OrMLrxKPKvc/CsLTIoc/7vPzOqs2j1rm5pNf3CiAgIGlmKChwb3MtPnBheW1vZGUgPT0gUEFZTU9ERV9RUkNPREUpICYmIChrZXljb2RlID09IFNQX0tFWV9DTEVBUikpCiAgIHsKICAgICBjYXJkV29ya1N0YXRlLT5jdXJyZW50X3N0YXRlID0gQ0FSRFdPUktTVEFUVVNfU1RPUFBJTkc7Ci0JcmV0dXJuOworICAgIHJldHVybjsKICAgfQogICAvL7C0MLz8vfjI68nosbiy2df3vefD5gogICBpZihrZXljb2RlID09IFNQX0tFWV8wICYmIChwb3MtPnBheW1vZGUgPT0gUEFZTU9ERV9JTklUKSkKICAgewogICAgIGNhcmRXb3JrU3RhdGUtPmN1cnJlbnRfc3RhdGUgPSBDQVJEV09SS1NUQVRVU19TRVRfREVWOwotCXJldHVybjsKKyAgICByZXR1cm47CiAgIH0KIH0KIAo=