ZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggMjBlYzNiMC4uOWRhYTdmOSAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSw1MiBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4zLjU3IiBkYXRlPSIwOS4wOC4yMDA2Ij4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DF0sXNxc7OwdEgJHNzbF9jbGllbnRfc2VyaWFsLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICRzc2xfY2xpZW50X3NlcmlhbCB2YXJpYWJsZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivXIM/QxdLB1M/SxSAiIS1lIiDXIMTJ0sXL1MnXxSBpZi48YnIvPgor89DB08nCzyDhzsTSycHO1SDi1cTBzsPP19UuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpbiB0aGUgIiEtZSIgb3BlcmF0b3Igb2YgdGhlICJpZiIgZGlyZWN0aXZlLjxici8+CitUaGFua3MgdG8gQW5kcmlhbiBCdWRhbnN0b3YuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor0NLJINDSz9fF0svFIMvMycXO1NPLz8fPINPF0tTJxsnLwdTBIG5naW54IM7FINDF0sXEwdfBzCDLzMnFztTVCivJzsbP0s3Bw8nAIM8g1NLFwtXFzdnIINPF0tTJxsnLwdTByC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3doaWxlIGEgY2xpZW50IGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBuZ2lueCBkaWQgbm90IHNlbmQgdG8gYSBjbGllbnQKK3RoZSByZXF1aXJlZCBjZXJ0aWZpY2F0ZXMgaW5mb3JtYXRpb24uCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor0MXSxc3Fzs7B0SAkZG9jdW1lbnRfcm9vdCDOxSDQz8TExdLWydfBzMEg0MXSxc3Fzs7ZxSDXIMTJ0sXL1MnXxSByb290LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICRkb2N1bWVudF9yb290IHZhcmlhYmxlIGRpZCBub3Qgc3VwcG9ydCB0aGUgdmFyaWFibGVzIGluIHRoZSAicm9vdCIKK2RpcmVjdGl2ZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8L2NoYW5nZXM+CisKKwogPGNoYW5nZXMgdmVyPSIwLjMuNTYiIGRhdGU9IjA0LjA4LjIwMDYiPgogCiA8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggYzg1ZTJhNy4uMDUxYmQ2OCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjU2IgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy41NyIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfT0xEUElEX0VYVCAgICAgIi5vbGRiaW4iCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCmluZGV4IDBiMjE3Y2YuLjM1NzNkYzggMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCkBAIC0xNCw2ICsxNCw3IEBACiB9IG5neF9vcGVuc3NsX2NvbmZfdDsKIAogCitzdGF0aWMgaW50IG5neF9odHRwX3NzbF92ZXJpZnlfY2FsbGJhY2soaW50IG9rLCBYNTA5X1NUT1JFX0NUWCAqeDUwOV9zdG9yZSk7CiBzdGF0aWMgdm9pZCBuZ3hfc3NsX2hhbmRzaGFrZV9oYW5kbGVyKG5neF9ldmVudF90ICpldik7CiBzdGF0aWMgbmd4X2ludF90IG5neF9zc2xfaGFuZGxlX3JlY3Yobmd4X2Nvbm5lY3Rpb25fdCAqYywgaW50IG4pOwogc3RhdGljIHZvaWQgbmd4X3NzbF93cml0ZV9oYW5kbGVyKG5neF9ldmVudF90ICp3ZXYpOwpAQCAtODMsNiArODQsOSBAQAogfTsKIAogCitpbnQgIG5neF9jb25uZWN0aW9uX2luZGV4OworCisKIG5neF9pbnRfdAogbmd4X3NzbF9pbml0KG5neF9sb2dfdCAqbG9nKQogewpAQCAtOTMsNiArOTcsMTMgQEAKICAgICBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXMoKTsKICNlbmRpZgogCisgICAgbmd4X2Nvbm5lY3Rpb25faW5kZXggPSBTU0xfZ2V0X2V4X25ld19pbmRleCgwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIGlmIChuZ3hfY29ubmVjdGlvbl9pbmRleCA9PSAtMSkgeworICAgICAgICBuZ3hfc3NsX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgMCwgIlNTTF9nZXRfZXhfbmV3X2luZGV4KCkgZmFpbGVkIik7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KIApAQCAtMTc3LDggKzE4OCwxOSBAQAogCiAKIG5neF9pbnRfdAotbmd4X3NzbF9jbGllbnRfY2VydGlmaWNhdGUobmd4X2NvbmZfdCAqY2YsIG5neF9zc2xfdCAqc3NsLCBuZ3hfc3RyX3QgKmNlcnQpCituZ3hfc3NsX2NsaWVudF9jZXJ0aWZpY2F0ZShuZ3hfY29uZl90ICpjZiwgbmd4X3NzbF90ICpzc2wsIG5neF9zdHJfdCAqY2VydCwKKyAgICBuZ3hfaW50X3QgZGVwdGgpCiB7CisgICAgU1RBQ0tfT0YoWDUwOV9OQU1FKSAgKmxpc3Q7CisKKyAgICBTU0xfQ1RYX3NldF92ZXJpZnkoc3NsLT5jdHgsIFNTTF9WRVJJRllfUEVFUiwgbmd4X2h0dHBfc3NsX3ZlcmlmeV9jYWxsYmFjayk7CisKKyAgICBTU0xfQ1RYX3NldF92ZXJpZnlfZGVwdGgoc3NsLT5jdHgsIGRlcHRoKTsKKworICAgIGlmIChjZXJ0LT5sZW4gPT0gMCkgeworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKwogICAgIGlmIChuZ3hfY29uZl9mdWxsX25hbWUoY2YtPmN5Y2xlLCBjZXJ0KSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CkBAIC0xOTIsMjEgKzIxNCw3NyBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAorICAgIGxpc3QgPSBTU0xfbG9hZF9jbGllbnRfQ0FfZmlsZSgoY2hhciAqKSBjZXJ0LT5kYXRhKTsKKworICAgIGlmIChsaXN0ID09IE5VTEwpIHsKKyAgICAgICAgbmd4X3NzbF9lcnJvcihOR1hfTE9HX0VNRVJHLCBzc2wtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAiU1NMX2xvYWRfY2xpZW50X0NBX2ZpbGUoXCIlc1wiKSBmYWlsZWQiLCBjZXJ0LT5kYXRhKTsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGJlZm9yZSAwLjkuN2ggYW5kIDAuOS44IFNTTF9sb2FkX2NsaWVudF9DQV9maWxlKCkKKyAgICAgKiBhbHdheXMgbGVhdmVkIGFuIGVycm9yIGluIHRoZSBlcnJvciBxdWV1ZQorICAgICAqLworCisgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisKKyAgICBTU0xfQ1RYX3NldF9jbGllbnRfQ0FfbGlzdChzc2wtPmN0eCwgbGlzdCk7CisKICAgICByZXR1cm4gTkdYX09LOwogfQogCiAKK3N0YXRpYyBpbnQKK25neF9odHRwX3NzbF92ZXJpZnlfY2FsbGJhY2soaW50IG9rLCBYNTA5X1NUT1JFX0NUWCAqeDUwOV9zdG9yZSkKK3sKKyAgICBjaGFyICAgICAgICAgICAgICAqc3ViamVjdCwgKmlzc3VlcjsKKyAgICBpbnQgICAgICAgICAgICAgICAgZXJyLCBkZXB0aDsKKyAgICBYNTA5ICAgICAgICAgICAgICAqY2VydDsKKyAgICBYNTA5X05BTUUgICAgICAgICAqbmFtZTsKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAqYzsKKyAgICBuZ3hfc3NsX2Nvbm5fdCAgICAqc3NsX2Nvbm47CisKKyAgICBzc2xfY29ubiA9IFg1MDlfU1RPUkVfQ1RYX2dldF9leF9kYXRhKHg1MDlfc3RvcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfZ2V0X2V4X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4KCkpOworCisgICAgYyA9IG5neF9zc2xfZ2V0X2Nvbm5lY3Rpb24oc3NsX2Nvbm4pOworCisgICAgY2VydCA9IFg1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQoeDUwOV9zdG9yZSk7CisgICAgZXJyID0gWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yKHg1MDlfc3RvcmUpOworICAgIGRlcHRoID0gWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yX2RlcHRoKHg1MDlfc3RvcmUpOworCisgICAgbmFtZSA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZShjZXJ0KTsKKyAgICBzdWJqZWN0ID0gbmFtZSA/IFg1MDlfTkFNRV9vbmVsaW5lKG5hbWUsIE5VTEwsIDApIDogIihub25lKSI7CisKKyAgICBuYW1lID0gWDUwOV9nZXRfaXNzdWVyX25hbWUoY2VydCk7CisgICAgaXNzdWVyID0gbmFtZSA/IFg1MDlfTkFNRV9vbmVsaW5lKG5hbWUsIE5VTEwsIDApIDogIihub25lKSI7CisKKyAgICBuZ3hfbG9nX2RlYnVnNShOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAidmVyaWZ5OiVkLCBlcnJvcjolZCwgZGVwdGg6JWQsICIKKyAgICAgICAgICAgICAgICAgICAic3ViamVjdDpcIiVzXCIsaXNzdWVyOiBcIiVzXCIiLAorICAgICAgICAgICAgICAgICAgIG9rLCBlcnIsIGRlcHRoLCBzdWJqZWN0LCBpc3N1ZXIpOworCisgICAgcmV0dXJuIDE7Cit9CisKKwogbmd4X2ludF90CiBuZ3hfc3NsX2dlbmVyYXRlX3JzYTUxMl9rZXkobmd4X3NzbF90ICpzc2wpCiB7CisgICAgUlNBICAqa2V5OworCiAgICAgaWYgKFNTTF9DVFhfbmVlZF90bXBfUlNBKHNzbC0+Y3R4KSA9PSAwKSB7CiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCi0gICAgc3NsLT5yc2E1MTJfa2V5ID0gUlNBX2dlbmVyYXRlX2tleSg1MTIsIFJTQV9GNCwgTlVMTCwgTlVMTCk7CisgICAga2V5ID0gUlNBX2dlbmVyYXRlX2tleSg1MTIsIFJTQV9GNCwgTlVMTCwgTlVMTCk7CiAKLSAgICBpZiAoc3NsLT5yc2E1MTJfa2V5KSB7Ci0gICAgICAgIFNTTF9DVFhfc2V0X3RtcF9yc2Eoc3NsLT5jdHgsIHNzbC0+cnNhNTEyX2tleSk7CisgICAgaWYgKGtleSkgeworICAgICAgICBTU0xfQ1RYX3NldF90bXBfcnNhKHNzbC0+Y3R4LCBrZXkpOworCisgICAgICAgIFJTQV9mcmVlKGtleSk7CisKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKQEAgLTI1NCw2ICszMzIsMTEgQEAKICAgICAgICAgU1NMX3NldF9hY2NlcHRfc3RhdGUoc2MtPmNvbm5lY3Rpb24pOwogICAgIH0KIAorICAgIGlmIChTU0xfc2V0X2V4X2RhdGEoc2MtPmNvbm5lY3Rpb24sIG5neF9jb25uZWN0aW9uX2luZGV4LCBjKSA9PSAwKSB7CisgICAgICAgIG5neF9zc2xfZXJyb3IoTkdYX0xPR19BTEVSVCwgYy0+bG9nLCAwLCAiU1NMX3NldF9leF9kYXRhKCkgZmFpbGVkIik7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCiAgICAgYy0+c3NsID0gc2M7CiAKICAgICByZXR1cm4gTkdYX09LOwpAQCAtMTAyMiwyNSArMTEwNSwyMyBAQAogewogICAgIG5neF9zc2xfdCAgKnNzbCA9IGRhdGE7CiAKLSAgICBpZiAoc3NsLT5yc2E1MTJfa2V5KSB7Ci0gICAgICAgIFJTQV9mcmVlKHNzbC0+cnNhNTEyX2tleSk7Ci0gICAgfQotCiAgICAgU1NMX0NUWF9mcmVlKHNzbC0+Y3R4KTsKIH0KIAogCi11X2NoYXIgKgotbmd4X3NzbF9nZXRfcHJvdG9jb2wobmd4X2Nvbm5lY3Rpb25fdCAqYykKK25neF9pbnRfdAorbmd4X3NzbF9nZXRfcHJvdG9jb2wobmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X3Bvb2xfdCAqcG9vbCwgbmd4X3N0cl90ICpzKQogewotICAgIHJldHVybiAodV9jaGFyICopIFNTTF9nZXRfdmVyc2lvbihjLT5zc2wtPmNvbm5lY3Rpb24pOworICAgIHMtPmRhdGEgPSAodV9jaGFyICopIFNTTF9nZXRfdmVyc2lvbihjLT5zc2wtPmNvbm5lY3Rpb24pOworICAgIHJldHVybiBOR1hfT0s7CiB9CiAKIAotdV9jaGFyICoKLW5neF9zc2xfZ2V0X2NpcGhlcl9uYW1lKG5neF9jb25uZWN0aW9uX3QgKmMpCituZ3hfaW50X3QKK25neF9zc2xfZ2V0X2NpcGhlcl9uYW1lKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9wb29sX3QgKnBvb2wsIG5neF9zdHJfdCAqcykKIHsKLSAgICByZXR1cm4gKHVfY2hhciAqKSBTU0xfZ2V0X2NpcGhlcl9uYW1lKGMtPnNzbC0+Y29ubmVjdGlvbik7CisgICAgcy0+ZGF0YSA9ICh1X2NoYXIgKikgU1NMX2dldF9jaXBoZXJfbmFtZShjLT5zc2wtPmNvbm5lY3Rpb24pOworICAgIHJldHVybiBOR1hfT0s7CiB9CiAKIApAQCAtMTA1NSwxMyArMTEzNiwxMSBAQAogICAgIHMtPmxlbiA9IDA7CiAKICAgICBjZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKGMtPnNzbC0+Y29ubmVjdGlvbik7Ci0KICAgICBpZiAoY2VydCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCiAgICAgbmFtZSA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZShjZXJ0KTsKLQogICAgIGlmIChuYW1lID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CkBAIC0xMDk2LDEzICsxMTc1LDExIEBACiAgICAgcy0+bGVuID0gMDsKIAogICAgIGNlcnQgPSBTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoYy0+c3NsLT5jb25uZWN0aW9uKTsKLQogICAgIGlmIChjZXJ0ID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKICAgICBuYW1lID0gWDUwOV9nZXRfaXNzdWVyX25hbWUoY2VydCk7Ci0KICAgICBpZiAobmFtZSA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQpAQCAtMTEyNiw2ICsxMjAzLDQyIEBACiB9CiAKIAorbmd4X2ludF90CituZ3hfc3NsX2dldF9zZXJpYWxfbnVtYmVyKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9wb29sX3QgKnBvb2wsIG5neF9zdHJfdCAqcykKK3sKKyAgICBzaXplX3QgICBsZW47CisgICAgWDUwOSAgICAqY2VydDsKKyAgICBCSU8gICAgICpiaW87CisKKyAgICBzLT5sZW4gPSAwOworCisgICAgY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShjLT5zc2wtPmNvbm5lY3Rpb24pOworICAgIGlmIChjZXJ0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICB9CisKKyAgICBiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKyAgICBpZiAoYmlvID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBpMmFfQVNOMV9JTlRFR0VSKGJpbywgWDUwOV9nZXRfc2VyaWFsTnVtYmVyKGNlcnQpKTsKKyAgICBsZW4gPSBCSU9fcGVuZGluZyhiaW8pOworCisgICAgcy0+bGVuID0gbGVuOworICAgIHMtPmRhdGEgPSBuZ3hfcGFsbG9jKHBvb2wsIGxlbik7CisgICAgaWYgKHMtPmRhdGEgPT0gTlVMTCkgeworICAgICAgICBCSU9fZnJlZShiaW8pOworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworICAgIEJJT19yZWFkKGJpbywgcy0+ZGF0YSwgbGVuKTsKKyAgICBCSU9fZnJlZShiaW8pOworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCiBzdGF0aWMgdm9pZCAqCiBuZ3hfb3BlbnNzbF9jcmVhdGVfY29uZihuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuaCBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCmluZGV4IDRhZjQyMTkuLjk3NzdmZTMgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCkBAIC0yMiwxNSArMjIsMTggQEAKICNkZWZpbmUgTkdYX1NTTF9OQU1FICAgICAiT3BlblNTTCIKIAogCisjZGVmaW5lIG5neF9zc2xfc2Vzc2lvbl90ICAgICAgIFNTTF9TRVNTSU9OCisjZGVmaW5lIG5neF9zc2xfY29ubl90ICAgICAgICAgIFNTTAorCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBTU0xfQ1RYICAgICAgICAgICAgICAgICAgICAqY3R4OwotICAgIFJTQSAgICAgICAgICAgICAgICAgICAgICAgICpyc2E1MTJfa2V5OwogICAgIG5neF9sb2dfdCAgICAgICAgICAgICAgICAgICpsb2c7CiB9IG5neF9zc2xfdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgU1NMICAgICAgICAgICAgICAgICAgICAgICAgKmNvbm5lY3Rpb247CisgICAgbmd4X3NzbF9jb25uX3QgICAgICAgICAgICAgKmNvbm5lY3Rpb247CiAKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICAgICAqYnVmOwpAQCAtNDcsOSArNTAsNiBAQAogfSBuZ3hfc3NsX2Nvbm5lY3Rpb25fdDsKIAogCi0jZGVmaW5lIG5neF9zc2xfc2Vzc2lvbl90ICAgICAgIFNTTF9TRVNTSU9OCi0KLQogI2RlZmluZSBOR1hfU1NMX1NTTHYyICAgIDIKICNkZWZpbmUgTkdYX1NTTF9TU0x2MyAgICA0CiAjZGVmaW5lIE5HWF9TU0xfVExTdjEgICAgOApAQCAtNjEsMTUgKzYxLDEyIEBACiAjZGVmaW5lIE5HWF9TU0xfQlVGU0laRSAgMTYzODQKIAogCi0jZGVmaW5lIE5HWF9TU0xfVkVSSUZZICAgU1NMX1ZFUklGWV9QRUVSCi0KLQogbmd4X2ludF90IG5neF9zc2xfaW5pdChuZ3hfbG9nX3QgKmxvZyk7CiBuZ3hfaW50X3Qgbmd4X3NzbF9jcmVhdGUobmd4X3NzbF90ICpzc2wsIG5neF91aW50X3QgcHJvdG9jb2xzKTsKIG5neF9pbnRfdCBuZ3hfc3NsX2NlcnRpZmljYXRlKG5neF9jb25mX3QgKmNmLCBuZ3hfc3NsX3QgKnNzbCwKICAgICBuZ3hfc3RyX3QgKmNlcnQsIG5neF9zdHJfdCAqa2V5KTsKIG5neF9pbnRfdCBuZ3hfc3NsX2NsaWVudF9jZXJ0aWZpY2F0ZShuZ3hfY29uZl90ICpjZiwgbmd4X3NzbF90ICpzc2wsCi0gICAgbmd4X3N0cl90ICpjZXJ0KTsKKyAgICBuZ3hfc3RyX3QgKmNlcnQsIG5neF9pbnRfdCBkZXB0aCk7CiBuZ3hfaW50X3Qgbmd4X3NzbF9nZW5lcmF0ZV9yc2E1MTJfa2V5KG5neF9zc2xfdCAqc3NsKTsKIG5neF9pbnRfdCBuZ3hfc3NsX2NyZWF0ZV9jb25uZWN0aW9uKG5neF9zc2xfdCAqc3NsLCBuZ3hfY29ubmVjdGlvbl90ICpjLAogICAgIG5neF91aW50X3QgZmxhZ3MpOwpAQCAtNzcsMTQgKzc0LDIwIEBACiBuZ3hfaW50X3Qgbmd4X3NzbF9zZXRfc2Vzc2lvbihuZ3hfY29ubmVjdGlvbl90ICpjLCBuZ3hfc3NsX3Nlc3Npb25fdCAqc2Vzc2lvbik7CiAjZGVmaW5lIG5neF9zc2xfZ2V0X3Nlc3Npb24oYykgICAgICBTU0xfZ2V0MV9zZXNzaW9uKGMtPnNzbC0+Y29ubmVjdGlvbikKICNkZWZpbmUgbmd4X3NzbF9mcmVlX3Nlc3Npb24gICAgICAgIFNTTF9TRVNTSU9OX2ZyZWUKKyNkZWZpbmUgbmd4X3NzbF9nZXRfY29ubmVjdGlvbihzYykgIFNTTF9nZXRfZXhfZGF0YShzYywgbmd4X2Nvbm5lY3Rpb25faW5kZXgpCiAKIAotdV9jaGFyICpuZ3hfc3NsX2dldF9wcm90b2NvbChuZ3hfY29ubmVjdGlvbl90ICpjKTsKLXVfY2hhciAqbmd4X3NzbF9nZXRfY2lwaGVyX25hbWUobmd4X2Nvbm5lY3Rpb25fdCAqYyk7CituZ3hfaW50X3Qgbmd4X3NzbF9nZXRfcHJvdG9jb2wobmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X3Bvb2xfdCAqcG9vbCwKKyAgICBuZ3hfc3RyX3QgKnMpOworbmd4X2ludF90IG5neF9zc2xfZ2V0X2NpcGhlcl9uYW1lKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9wb29sX3QgKnBvb2wsCisgICAgbmd4X3N0cl90ICpzKTsKIG5neF9pbnRfdCBuZ3hfc3NsX2dldF9zdWJqZWN0X2RuKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9wb29sX3QgKnBvb2wsCiAgICAgbmd4X3N0cl90ICpzKTsKIG5neF9pbnRfdCBuZ3hfc3NsX2dldF9pc3N1ZXJfZG4obmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X3Bvb2xfdCAqcG9vbCwKICAgICBuZ3hfc3RyX3QgKnMpOworbmd4X2ludF90IG5neF9zc2xfZ2V0X3NlcmlhbF9udW1iZXIobmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X3Bvb2xfdCAqcG9vbCwKKyAgICBuZ3hfc3RyX3QgKnMpOworCiAKIAogCkBAIC0xMDAsNCArMTAzLDcgQEAKIHZvaWQgbmd4X3NzbF9jbGVhbnVwX2N0eCh2b2lkICpkYXRhKTsKIAogCitleHRlcm4gaW50ICBuZ3hfY29ubmVjdGlvbl9pbmRleDsKKworCiAjZW5kaWYgLyogX05HWF9FVkVOVF9PUEVOU1NMX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzbF9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NsX21vZHVsZS5jCmluZGV4IDM0NGY2MTMuLjMwYzJkMTEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NsX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NsX21vZHVsZS5jCkBAIC05LDcgKzksOCBAQAogI2luY2x1ZGUgPG5neF9odHRwLmg+CiAKIAotdHlwZWRlZiB1X2NoYXIgKigqbmd4X3NzbF92YXJpYWJsZV9oYW5kbGVyX3B0KShuZ3hfY29ubmVjdGlvbl90ICopOwordHlwZWRlZiBuZ3hfaW50X3QgKCpuZ3hfc3NsX3ZhcmlhYmxlX2hhbmRsZXJfcHQpKG5neF9jb25uZWN0aW9uX3QgKmMsCisgICAgbmd4X3Bvb2xfdCAqcG9vbCwgbmd4X3N0cl90ICpzKTsKIAogCiAjZGVmaW5lIE5HWF9ERUZMQVVUX0NFUlRJRklDQVRFICAgICAgImNlcnQucGVtIgpAQCAtMTcsMTMgKzE4LDEwIEBACiAjZGVmaW5lIE5HWF9ERUZMQVVUX0NJUEhFUlMgICJBTEw6IUFESDpSQzQrUlNBOitISUdIOitNRURJVU06K0xPVzorU1NMdjI6K0VYUCIKIAogCi1zdGF0aWMgaW50IG5neF9odHRwX3NzbF92ZXJpZnlfY2FsbGJhY2soaW50IG9rLCBYNTA5X1NUT1JFX0NUWCAqeDUwOV9zdG9yZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3NzbF9zdGF0aWNfdmFyaWFibGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfc3NsX3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSk7Ci1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3NzbF9jbGllbnRfc19kbihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCi0gICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpOwotc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9zc2xfY2xpZW50X2lfZG4obmd4X2h0dHBfcmVxdWVzdF90ICpyLAotICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKTsKIAogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9zc2xfYWRkX3ZhcmlhYmxlcyhuZ3hfY29uZl90ICpjZik7CiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfc3NsX2NyZWF0ZV9zcnZfY29uZihuZ3hfY29uZl90ICpjZik7CkBAIC0xNjEsMTcgKzE1OSwyMCBAQAogCiBzdGF0aWMgbmd4X2h0dHBfdmFyaWFibGVfdCAgbmd4X2h0dHBfc3NsX3ZhcnNbXSA9IHsKIAotICAgIHsgbmd4X3N0cmluZygic3NsX3Byb3RvY29sIiksIE5VTEwsIG5neF9odHRwX3NzbF92YXJpYWJsZSwKKyAgICB7IG5neF9zdHJpbmcoInNzbF9wcm90b2NvbCIpLCBOVUxMLCBuZ3hfaHR0cF9zc2xfc3RhdGljX3ZhcmlhYmxlLAogICAgICAgKHVpbnRwdHJfdCkgbmd4X3NzbF9nZXRfcHJvdG9jb2wsIE5HWF9IVFRQX1ZBUl9DSEFOR0FCTEUsIDAgfSwKIAotICAgIHsgbmd4X3N0cmluZygic3NsX2NpcGhlciIpLCBOVUxMLCBuZ3hfaHR0cF9zc2xfdmFyaWFibGUsCisgICAgeyBuZ3hfc3RyaW5nKCJzc2xfY2lwaGVyIiksIE5VTEwsIG5neF9odHRwX3NzbF9zdGF0aWNfdmFyaWFibGUsCiAgICAgICAodWludHB0cl90KSBuZ3hfc3NsX2dldF9jaXBoZXJfbmFtZSwgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRSwgMCB9LAogCi0gICAgeyBuZ3hfc3RyaW5nKCJzc2xfY2xpZW50X3NfZG4iKSwgTlVMTCwgbmd4X2h0dHBfc3NsX2NsaWVudF9zX2RuLAotICAgICAgMCwgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRSwgMCB9LAorICAgIHsgbmd4X3N0cmluZygic3NsX2NsaWVudF9zX2RuIiksIE5VTEwsIG5neF9odHRwX3NzbF92YXJpYWJsZSwKKyAgICAgICh1aW50cHRyX3QpIG5neF9zc2xfZ2V0X3N1YmplY3RfZG4sIE5HWF9IVFRQX1ZBUl9DSEFOR0FCTEUsIDAgfSwKIAotICAgIHsgbmd4X3N0cmluZygic3NsX2NsaWVudF9pX2RuIiksIE5VTEwsIG5neF9odHRwX3NzbF9jbGllbnRfaV9kbiwKLSAgICAgIDAsIE5HWF9IVFRQX1ZBUl9DSEFOR0FCTEUsIDAgfSwKKyAgICB7IG5neF9zdHJpbmcoInNzbF9jbGllbnRfaV9kbiIpLCBOVUxMLCBuZ3hfaHR0cF9zc2xfdmFyaWFibGUsCisgICAgICAodWludHB0cl90KSBuZ3hfc3NsX2dldF9pc3N1ZXJfZG4sIE5HWF9IVFRQX1ZBUl9DSEFOR0FCTEUsIDAgfSwKKworICAgIHsgbmd4X3N0cmluZygic3NsX2NsaWVudF9zZXJpYWwiKSwgTlVMTCwgbmd4X2h0dHBfc3NsX3ZhcmlhYmxlLAorICAgICAgKHVpbnRwdHJfdCkgbmd4X3NzbF9nZXRfc2VyaWFsX251bWJlciwgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRSwgMCB9LAogCiAgICAgeyBuZ3hfbnVsbF9zdHJpbmcsIE5VTEwsIE5VTEwsIDAsIDAsIDAgfQogfTsKQEAgLTE4MSwyNSArMTgyLDIzIEBACiAKIAogc3RhdGljIG5neF9pbnRfdAotbmd4X2h0dHBfc3NsX3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKK25neF9odHRwX3NzbF9zdGF0aWNfdmFyaWFibGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKQogewotICAgIG5neF9zc2xfdmFyaWFibGVfaGFuZGxlcl9wdCBoYW5kbGVyID0gKG5neF9zc2xfdmFyaWFibGVfaGFuZGxlcl9wdCkgZGF0YTsKKyAgICBuZ3hfc3NsX3ZhcmlhYmxlX2hhbmRsZXJfcHQgIGhhbmRsZXIgPSAobmd4X3NzbF92YXJpYWJsZV9oYW5kbGVyX3B0KSBkYXRhOwogCi0gICAgc2l6ZV90ICAgbGVuOwotICAgIHVfY2hhciAgKm5hbWU7CisgICAgc2l6ZV90ICBsZW47CiAKICAgICBpZiAoci0+Y29ubmVjdGlvbi0+c3NsKSB7CiAKLSAgICAgICAgbmFtZSA9IGhhbmRsZXIoci0+Y29ubmVjdGlvbik7CisgICAgICAgICh2b2lkKSBoYW5kbGVyKHItPmNvbm5lY3Rpb24sIE5VTEwsIChuZ3hfc3RyX3QgKikgdik7CiAKLSAgICAgICAgZm9yIChsZW4gPSAwOyBuYW1lW2xlbl07IGxlbisrKSB7IC8qIHZvaWQgKi8gfQorICAgICAgICBmb3IgKGxlbiA9IDA7IHYtPmRhdGFbbGVuXTsgbGVuKyspIHsgLyogdm9pZCAqLyB9CiAKICAgICAgICAgdi0+bGVuID0gbGVuOwogICAgICAgICB2LT52YWxpZCA9IDE7CiAgICAgICAgIHYtPm5vX2NhY2hhYmxlID0gMDsKICAgICAgICAgdi0+bm90X2ZvdW5kID0gMDsKLSAgICAgICAgdi0+ZGF0YSA9IG5hbWU7CiAKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CkBAIC0yMTEsMzkgKzIxMCwxMyBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKLW5neF9odHRwX3NzbF9jbGllbnRfc19kbihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsCituZ3hfaHR0cF9zc2xfdmFyaWFibGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LAogICAgIHVpbnRwdHJfdCBkYXRhKQogeworICAgIG5neF9zc2xfdmFyaWFibGVfaGFuZGxlcl9wdCAgaGFuZGxlciA9IChuZ3hfc3NsX3ZhcmlhYmxlX2hhbmRsZXJfcHQpIGRhdGE7CisKICAgICBpZiAoci0+Y29ubmVjdGlvbi0+c3NsKSB7Ci0gICAgICAgIGlmIChuZ3hfc3NsX2dldF9zdWJqZWN0X2RuKHItPmNvbm5lY3Rpb24sIHItPnBvb2wsIChuZ3hfc3RyX3QgKikgdikKLSAgICAgICAgICAgICE9IE5HWF9PSykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh2LT5sZW4pIHsKLSAgICAgICAgICAgIHYtPnZhbGlkID0gMTsKLSAgICAgICAgICAgIHYtPm5vX2NhY2hhYmxlID0gMDsKLSAgICAgICAgICAgIHYtPm5vdF9mb3VuZCA9IDA7Ci0KLSAgICAgICAgICAgIHJldHVybiBOR1hfT0s7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2LT5ub3RfZm91bmQgPSAxOwotCi0gICAgcmV0dXJuIE5HWF9PSzsKLX0KLQotCi1zdGF0aWMgbmd4X2ludF90Ci1uZ3hfaHR0cF9zc2xfY2xpZW50X2lfZG4obmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LAotICAgIHVpbnRwdHJfdCBkYXRhKQotewotICAgIGlmIChyLT5jb25uZWN0aW9uLT5zc2wpIHsKLSAgICAgICAgaWYgKG5neF9zc2xfZ2V0X2lzc3Vlcl9kbihyLT5jb25uZWN0aW9uLCByLT5wb29sLCAobmd4X3N0cl90ICopIHYpCi0gICAgICAgICAgICAhPSBOR1hfT0spCi0gICAgICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZXIoci0+Y29ubmVjdGlvbiwgci0+cG9vbCwgKG5neF9zdHJfdCAqKSB2KSAhPSBOR1hfT0spIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KIApAQCAtMzg1LDE4ICszNTgsMTEgQEAKICAgICB9CiAKICAgICBpZiAoY29uZi0+dmVyaWZ5KSB7Ci0gICAgICAgIFNTTF9DVFhfc2V0X3ZlcmlmeShjb25mLT5zc2wuY3R4LCBOR1hfU1NMX1ZFUklGWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3NzbF92ZXJpZnlfY2FsbGJhY2spOwotCi0gICAgICAgIFNTTF9DVFhfc2V0X3ZlcmlmeV9kZXB0aChjb25mLT5zc2wuY3R4LCBjb25mLT52ZXJpZnlfZGVwdGgpOwotCi0gICAgICAgIGlmIChjb25mLT5jbGllbnRfY2VydGlmaWNhdGUubGVuKSB7Ci0gICAgICAgICAgICBpZiAobmd4X3NzbF9jbGllbnRfY2VydGlmaWNhdGUoY2YsICZjb25mLT5zc2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbmYtPmNsaWVudF9jZXJ0aWZpY2F0ZSkKLSAgICAgICAgICAgICAgICAhPSBOR1hfT0spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAobmd4X3NzbF9jbGllbnRfY2VydGlmaWNhdGUoY2YsICZjb25mLT5zc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uZi0+Y2xpZW50X2NlcnRpZmljYXRlLCBjb25mLT52ZXJpZnlfZGVwdGgpCisgICAgICAgICAgICAhPSBOR1hfT0spCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDI0LDEzICszOTAsNiBAQAogfQogCiAKLXN0YXRpYyBpbnQKLW5neF9odHRwX3NzbF92ZXJpZnlfY2FsbGJhY2soaW50IG9rLCBYNTA5X1NUT1JFX0NUWCAqeDUwOV9zdG9yZSkKLXsKLSAgICByZXR1cm4gMTsKLX0KLQotCiAjaWYgIWRlZmluZWQgKFNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UpCiAKIHN0YXRpYyBjaGFyICoKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IGViNDkzNGUuLjlkMzNkM2EgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtMTA3Miw3ICsxMDcyLDcgQEAKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChuZ3hfaHR0cF9zY3JpcHRfcnVuKHIsIHBhdGgsIGNsY2YtPnJvb3RfbGVuZ3Rocy0+ZWx0cywgcmVzZXJ2ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xjZi0+cm9vdF92YWx1ZXMtPmVsdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsY2YtPnJvb3RfdmFsdWVzLT5lbHRzKQogICAgICAgICAgICAgPT0gTlVMTCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggNDI5MzNlOC4uNDE3ZjNkZiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMTM0NCw3ICsxMzQ0LDcgQEAKIAogICAgICAgICAgICAgaWYgKHJjICE9IFg1MDlfVl9PSykgewogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgZXJyb3I6ICglbDolcykgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgU1NMIGNlcnRpZmljYXRlIHZlcmlmeSBlcnJvcjogKCVsOiVzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYywgWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcocmMpKTsKICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQU19DRVJUX0VSUk9SKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYwppbmRleCA5NDdiY2U2Li4xOTE4Mzk3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYwpAQCAtOTYwLDEzICs5NjAsMTYgQEAKICAgICAgICAgfQogCiAgICAgICAgIHN3aXRjaCAoY29kZS0+b3ApIHsKKwogICAgICAgICBjYXNlIG5neF9odHRwX3NjcmlwdF9maWxlX3BsYWluOgogICAgICAgICBjYXNlIG5neF9odHRwX3NjcmlwdF9maWxlX2RpcjoKICAgICAgICAgY2FzZSBuZ3hfaHR0cF9zY3JpcHRfZmlsZV9leGlzdHM6CiAgICAgICAgIGNhc2Ugbmd4X2h0dHBfc2NyaXB0X2ZpbGVfZXhlYzoKICAgICAgICAgICAgICBnb3RvIGZhbHNlOworCiAgICAgICAgIGNhc2Ugbmd4X2h0dHBfc2NyaXB0X2ZpbGVfbm90X3BsYWluOgogICAgICAgICBjYXNlIG5neF9odHRwX3NjcmlwdF9maWxlX25vdF9kaXI6CisgICAgICAgIGNhc2Ugbmd4X2h0dHBfc2NyaXB0X2ZpbGVfbm90X2V4aXN0czoKICAgICAgICAgY2FzZSBuZ3hfaHR0cF9zY3JpcHRfZmlsZV9ub3RfZXhlYzoKICAgICAgICAgICAgICBnb3RvIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IDhjYTI0ZTIuLjVlMjJmMmQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtNzY5LDcgKzc2OSw4IEBACiBzdGF0aWMgdm9pZAogbmd4X2h0dHBfdXBzdHJlYW1fc2VuZF9yZXF1ZXN0KG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2h0dHBfdXBzdHJlYW1fdCAqdSkKIHsKLSAgICBpbnQgICAgICAgICAgICAgICAgcmM7CisgICAgaW50ICAgICAgICAgICAgICAgIHJjLCBlcnI7CisgICAgc29ja2xlbl90ICAgICAgICAgIGxlbjsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAqYzsKIAogICAgIGMgPSB1LT5wZWVyLmNvbm5lY3Rpb247CkBAIC03NzcsMTkgKzc3OCw0MiBAQAogICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJodHRwIHVwc3RyZWFtIHNlbmQgcmVxdWVzdCIpOwogCisgICAgaWYgKCF1LT5yZXF1ZXN0X3NlbnQpIHsKKwogI2lmIChOR1hfSEFWRV9LUVVFVUUpCiAKLSAgICBpZiAoKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKQotICAgICAgICAmJiAhdS0+cmVxdWVzdF9zZW50Ci0gICAgICAgICYmIGMtPndyaXRlLT5wZW5kaW5nX2VvZikKLSAgICB7Ci0gICAgICAgICh2b2lkKSBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCBjLT53cml0ZS0+a3FfZXJybm8sCisgICAgICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0tRVUVVRV9FVkVOVCkgIHsKKyAgICAgICAgICAgIGlmIChjLT53cml0ZS0+cGVuZGluZ19lb2YpIHsKKyAgICAgICAgICAgICAgICAodm9pZCkgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgYy0+d3JpdGUtPmtxX2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtldmVudCgpIHJlcG9ydGVkIHRoYXQgY29ubmVjdCgpIGZhaWxlZCIpOwotICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9uZXh0KHIsIHUsIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0VSUk9SKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9uZXh0KHIsIHUsIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0VSUk9SKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKKyAgICAgICAgfSBlbHNlCiAjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgICAgIGxlbiA9IHNpemVvZihpbnQpOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQlNEcyBhbmQgTGludXggcmV0dXJuIDAgYW5kIHNldCBhIHBlbmRpbmcgZXJyb3IgaW4gZXJyCisgICAgICAgICAgICAgKiBTb2xhcmlzIHJldHVybnMgLTEgYW5kIHNldHMgZXJybm8KKyAgICAgICAgICAgICAqLworCisgICAgICAgICAgICBpZiAoZ2V0c29ja29wdChjLT5mZCwgU09MX1NPQ0tFVCwgU09fRVJST1IsICh2b2lkICopICZlcnIsICZsZW4pCisgICAgICAgICAgICAgICAgPT0gLTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyID0gbmd4X2Vycm5vOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAgICAgKHZvaWQpIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIGVyciwgImNvbm5lY3QoKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9uZXh0KHIsIHUsIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0VSUk9SKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAKICAgICBjLT5sb2ctPmFjdGlvbiA9ICJzZW5kaW5nIHJlcXVlc3QgdG8gdXBzdHJlYW0iOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYyBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCmluZGV4IGYxNTFmODcuLmQ1ZmJmYzkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jCkBAIC0xMzcsNyArMTM3LDcgQEAKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3JlcXVlc3RfdCwgcmVxdWVzdF9saW5lKSwgMCwgMCB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJkb2N1bWVudF9yb290IiksIE5VTEwsCi0gICAgICBuZ3hfaHR0cF92YXJpYWJsZV9kb2N1bWVudF9yb290LCAwLCAwLCAwIH0sCisgICAgICBuZ3hfaHR0cF92YXJpYWJsZV9kb2N1bWVudF9yb290LCAwLCBOR1hfSFRUUF9WQVJfTk9DQUNIQUJMRSwgMCB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJxdWVyeV9zdHJpbmciKSwgTlVMTCwgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdCwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3JlcXVlc3RfdCwgYXJncyksCkBAIC03NzUsMTUgKzc3NSwzNiBAQAogbmd4X2h0dHBfdmFyaWFibGVfZG9jdW1lbnRfcm9vdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpCiB7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgcGF0aDsKICAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICpjbGNmOwogCiAgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwogCi0gICAgdi0+bGVuID0gY2xjZi0+cm9vdC5sZW47Ci0gICAgdi0+dmFsaWQgPSAxOwotICAgIHYtPm5vX2NhY2hhYmxlID0gMDsKLSAgICB2LT5ub3RfZm91bmQgPSAwOwotICAgIHYtPmRhdGEgPSBjbGNmLT5yb290LmRhdGE7CisgICAgaWYgKGNsY2YtPnJvb3RfbGVuZ3RocyA9PSBOVUxMKSB7CisgICAgICAgIHYtPmxlbiA9IGNsY2YtPnJvb3QubGVuOworICAgICAgICB2LT52YWxpZCA9IDE7CisgICAgICAgIHYtPm5vX2NhY2hhYmxlID0gMDsKKyAgICAgICAgdi0+bm90X2ZvdW5kID0gMDsKKyAgICAgICAgdi0+ZGF0YSA9IGNsY2YtPnJvb3QuZGF0YTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChuZ3hfaHR0cF9zY3JpcHRfcnVuKHIsICZwYXRoLCBjbGNmLT5yb290X2xlbmd0aHMtPmVsdHMsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsY2YtPnJvb3RfdmFsdWVzLT5lbHRzKQorICAgICAgICAgICAgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZ3hfY29uZl9mdWxsX25hbWUoKG5neF9jeWNsZV90ICopIG5neF9jeWNsZSwgJnBhdGgpID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIHYtPmxlbiA9IHBhdGgubGVuOworICAgICAgICB2LT52YWxpZCA9IDE7CisgICAgICAgIHYtPm5vX2NhY2hhYmxlID0gMDsKKyAgICAgICAgdi0+bm90X2ZvdW5kID0gMDsKKyAgICAgICAgdi0+ZGF0YSA9IHBhdGguZGF0YTsKKyAgICB9CiAKICAgICByZXR1cm4gTkdYX09LOwogfQo=