ZGlmZiAtLWdpdCBhL2FsbGJpbnMvengyOTc1MjB2My9wcmpfdmVoaWNsZS9udl9kY19yZWYvcGh5R2dlQW10VXNlcl9udnJ3b18weDAwMDM4NDAwLmJpbiBiL2FsbGJpbnMvengyOTc1MjB2My9wcmpfdmVoaWNsZS9udl9kY19yZWYvcGh5R2dlQW10VXNlcl9udnJ3b18weDAwMDM4NDAwLmJpbgppbmRleCA0OGE0NGUyLi40YzZkZDlmIDEwMDc1NQotLS0gYS9hbGxiaW5zL3p4Mjk3NTIwdjMvcHJqX3ZlaGljbGUvbnZfZGNfcmVmL3BoeUdnZUFtdFVzZXJfbnZyd29fMHgwMDAzODQwMC5iaW4KKysrIGIvYWxsYmlucy96eDI5NzUyMHYzL3Byal92ZWhpY2xlL252X2RjX3JlZi9waHlHZ2VBbXRVc2VyX252cndvXzB4MDAwMzg0MDAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FsbGJpbnMvengyOTc1MjB2My9wcmpfdmVoaWNsZS9udl9kY19yZWYvcGh5THRlYUFtdFVzZXJfbnZyd29fMHgwMDAzQzgwMC5iaW4gYi9hbGxiaW5zL3p4Mjk3NTIwdjMvcHJqX3ZlaGljbGUvbnZfZGNfcmVmL3BoeUx0ZWFBbXRVc2VyX252cndvXzB4MDAwM0M4MDAuYmluCmluZGV4IDFkMjFhOWEuLmFlMTliMjUgMTAwNzU1Ci0tLSBhL2FsbGJpbnMvengyOTc1MjB2My9wcmpfdmVoaWNsZS9udl9kY19yZWYvcGh5THRlYUFtdFVzZXJfbnZyd29fMHgwMDAzQzgwMC5iaW4KKysrIGIvYWxsYmlucy96eDI5NzUyMHYzL3Byal92ZWhpY2xlL252X2RjX3JlZi9waHlMdGVhQW10VXNlcl9udnJ3b18weDAwMDNDODAwLmJpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbGxiaW5zL3p4Mjk3NTIwdjMvcHJqX3ZlaGljbGUvbnZfZGNfcmVmL3BoeVdjZG1hQW10VXNlcl9udnJ3b18weDAwMDNBMDAwLmJpbiBiL2FsbGJpbnMvengyOTc1MjB2My9wcmpfdmVoaWNsZS9udl9kY19yZWYvcGh5V2NkbWFBbXRVc2VyX252cndvXzB4MDAwM0EwMDAuYmluCmluZGV4IDFjNDU4YmYuLjg1NDMxMGMgMTAwNzU1Ci0tLSBhL2FsbGJpbnMvengyOTc1MjB2My9wcmpfdmVoaWNsZS9udl9kY19yZWYvcGh5V2NkbWFBbXRVc2VyX252cndvXzB4MDAwM0EwMDAuYmluCisrKyBiL2FsbGJpbnMvengyOTc1MjB2My9wcmpfdmVoaWNsZS9udl9kY19yZWYvcGh5V2NkbWFBbXRVc2VyX252cndvXzB4MDAwM0EwMDAuYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwL2FwcC96dGVfY29tbS9hdF9jdGwvc3JjL2F0Y29uZmlnL3BzX3Ntcy5jIGIvYXAvYXBwL3p0ZV9jb21tL2F0X2N0bC9zcmMvYXRjb25maWcvcHNfc21zLmMKaW5kZXggNTViZDc2Yi4uZjcxYzI1NCAxMDA3NTUKLS0tIGEvYXAvYXBwL3p0ZV9jb21tL2F0X2N0bC9zcmMvYXRjb25maWcvcHNfc21zLmMKKysrIGIvYXAvYXBwL3p0ZV9jb21tL2F0X2N0bC9zcmMvYXRjb25maWcvcHNfc21zLmMKQEAgLTcwMCwxNCArNzAwLDE5IEBACiB9DQogDQogI2VuZGlmDQotLyrW1bbLsuDWp7PWtszQxcqxssXQ6NKqveLO9qOs1tW2y7Lg1rvWp7PWcGR1uPHKvbbM0MUqLw0KKw0KK2V4dGVybiBpbnQgZ19tb2RlbV9tb2RlbDsvL2piLnFpIGFkZCBmb3IgaXQgd2lsbCBiZSBhd2FrZW5lZCBieSBzbXMgYWZ0ZXIgc2V0dGluZyAgdXAgdGhlIHdoaWx0ZWxpc3Qgb24gMjAyMzEyMTgNCitleHRlcm4gaW50IGdfc3VwcG9ydF9zbXM7Ly9qYi5xaSBhZGQgZm9yIGl0IHdpbGwgYmUgYXdha2VuZWQgYnkgc21zIGFmdGVyIHNldHRpbmcgIHVwIHRoZSB3aGlsdGVsaXN0IG9uIDIwMjMxMjE4DQogaW50IGF0U21zX1JlY3ZQZHUoIGNoYXIgKmF0X3N0ciwgc3RydWN0IGF0X2NvbnRleHQgKmNvbnRleHQpDQogew0KLSAgICBjaGFyIG5lZWRNb2RlbUluaXRbMTBdID0gezB9Ow0KKyAgICAvKmpiLnFpIGFkZCBmb3IgaXQgd2lsbCBiZSBhd2FrZW5lZCBieSBzbXMgYWZ0ZXIgc2V0dGluZyAgdXAgdGhlIHdoaWx0ZWxpc3Qgb24gMjAyMzEyMTggc3RhcnQqLw0KKyAgICAvKmNoYXIgbmVlZE1vZGVtSW5pdFsxMF0gPSB7MH07DQogICAgIGNoYXIgbmVlZFNtc0luaXRbMTBdID0gezB9Ow0KICAgICBzY19jZmdfZ2V0KE5WX05FRURfU1VQUE9SVF9TTVMsbmVlZFNtc0luaXQsc2l6ZW9mKG5lZWRTbXNJbml0KSk7DQogICAgIHNjX2NmZ19nZXQoIm5lZWRfaW5pdF9tb2RlbSIsbmVlZE1vZGVtSW5pdCxzaXplb2YobmVlZE1vZGVtSW5pdCkpOw0KLSAgICBpZigwID09IHN0cmNtcChuZWVkTW9kZW1Jbml0LCAieWVzIikgJiYgMCAhPSBzdHJjbXAobmVlZFNtc0luaXQsICJubyIpKQ0KKyAgICBpZigwID09IHN0cmNtcChuZWVkTW9kZW1Jbml0LCAieWVzIikgJiYgMCAhPSBzdHJjbXAobmVlZFNtc0luaXQsICJubyIpKSovDQorICAgIGlmKChnX21vZGVtX21vZGVsID09IDEpICYmIChnX3N1cHBvcnRfc21zID09IDEpKQ0KKyAgICAvKmpiLnFpIGFkZCBmb3IgaXQgd2lsbCBiZSBhd2FrZW5lZCBieSBzbXMgYWZ0ZXIgc2V0dGluZyAgdXAgdGhlIHdoaWx0ZWxpc3Qgb24gMjAyMzEyMTggZW5kKi8NCiAgICAgeyAgICANCiAgICAgICAgIC8vYXRfcHJpbnQoQVRfREVCVUcsImF0U21zX1JlY3ZQZHUgYXRzdHI6JXMsIGJOZXdDbXQ6JWQsIGJOZXdDZHM6JWQhXG4iLCBhdF9zdHIsIGJOZXdDbXQsIGJOZXdDZHMpOwkJDQogICAgICAgICBpZihjb250ZXh0ICE9IE5VTEwpDQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItYXV0b3N1c3BlbmQtZGVtby9maWxlcy9seW5xLXFzZXItYXV0b3N1c3BlbmQtZGVtby5jcHAgYi9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2x5bnEtcXNlci1hdXRvc3VzcGVuZC1kZW1vL2ZpbGVzL2x5bnEtcXNlci1hdXRvc3VzcGVuZC1kZW1vLmNwcAppbmRleCBmZGViNTQ4Li45ZmEwOWMyIDEwMDc1NQotLS0gYS9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2x5bnEtcXNlci1hdXRvc3VzcGVuZC1kZW1vL2ZpbGVzL2x5bnEtcXNlci1hdXRvc3VzcGVuZC1kZW1vLmNwcAorKysgYi9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2x5bnEtcXNlci1hdXRvc3VzcGVuZC1kZW1vL2ZpbGVzL2x5bnEtcXNlci1hdXRvc3VzcGVuZC1kZW1vLmNwcApAQCAtMTMsNiArMTMsMzEgQEAKIAogI2RlZmluZSBNQVhfTE9DS19OVU0gMTI4CiAKK3N0YXRpYyB2b2lkIHFzZXJfbHBtX2hhbmRsZXIocXNlcl9scG1fZWRnZV90IGVkZ2Vfc3RhdGUpCit7CisgICAgcHJpbnRmKCJ0aGlzIGlzIHFzZXJfbHBtX2hhbmRsZXJcbiIpOworCit9CisKK3N0YXRpYyB2b2lkIHByaW50VXNhZ2Uodm9pZCkKK3sKKyAgICBwcmludGYoIi1pICAgICAgICAgICAgICAgICAgLS1xc2VyX2xwbV9pbml0XG4iKTsKKyAgICBwcmludGYoIi1kICAgICAgICAgICAgICAgICAgLS1xc2VyX2xwbV9kZWluaXRcbiIpOworICAgIHByaW50ZigiLXEgICAgICAgICAgICAgICAgICAtLXF1aXRcbiIpOworICAgIHByaW50ZigiLWUgICAgICAgICAgICAgICAgICAtLXFzZXJfYXV0b3N1c3BlbmRfZW5hYmxlXG4iKTsKKyAgICBwcmludGYoIi1jbCBbd2FrZWxvY2sgbmFtZV0gLS1xc2VyX3dha2Vsb2NrX2NyZWF0ZSBcbiIpOworICAgIHByaW50ZigiLWFsIFt3YWtlbG9jayBudW1dICAtLXFzZXJfd2FrZWxvY2tfbG9jayBcbiIpOworICAgIHByaW50ZigiLXJsIFt3YWtlbG9jayBudW1dICAtLXFzZXJfd2FrZWxvY2tfdW5sb2NrIFxuIik7CisgICAgcHJpbnRmKCItZGwgW3dha2Vsb2NrIG51bV0gIC0tcXNlcl93YWtlbG9ja19kZXN0cm95XG4iKTsKKyAgICBwcmludGYoIi1jY2wgICAgICAgICAgICAgICAgLS1jaGVjayBjcmVhdGVkIGxvY2tzXG4iKTsKKyAgICBwcmludGYoIi1jbGwgICAgICAgICAgICAgICAgLS1jaGVjayBsb2NrdXAgbG9ja3NcbiIpOworICAgIHByaW50ZigiLXdsYSBbaWRdICAgICAgICAgICAtLXFzZXJfd2hpdGVsaXN0X2FkZFxuIik7CisgICAgcHJpbnRmKCItd2xkIFtpZF0gICAgICAgICAgIC0tcXNlcl93aGl0ZWxpc3RfZGVsXG4iKTsKKyAgICBwcmludGYoIi13bGcgICAgICAgICAgICAgICAgLS1xc2VyX3doaXRlbGlzdF9nZXRcbiIpOworICAgIHByaW50ZigiLXdsYyAgICAgICAgICAgICAgICAtLXFzZXJfd2hpdGVsaXN0X2NsZWFyXG4iKTsKKyAgICBwcmludGYoIlBsZWFzZSBpbnB1dCBhbiBjbWQ6Iik7Cit9CisKIAogaW50IGNoZWNrX2xvY2sodm9pZCkKIHsKQEAgLTUwLDIwMCArNzUsMjEyIEBACiAKIH0KIAorCit2b2lkIGRlbGV0ZV9lbnRlcihjaGFyICpkYXRhKQoreworICAgIGNoYXIgKmZpbmQgPSBzdHJjaHIoZGF0YSwgJ1xuJyk7CisgICAgaWYoZmluZCkKKyAgICAgICAgKmZpbmQgPSAnXDAnOworICAgIHJldHVybiA7Cit9CisKIGludCBtYWluKGludCBhcmdjLGNoYXIqKiBhcmd2KQogewogCiAgICAgaW50IG51bTsKICAgICBpbnQgcmV0OwogICAgIGludCBsZW47CisgICAgY2hhciBjbWRbMTZdOworICAgIGNoYXIgKmNtZDI7CisgICAgY2hhciAqY21kMTsKKyAgICBxc2VyX3BtX2NmZ190ICpxc2VyX2xwbV9jZmcgPSBOVUxMOworICAgIHFzZXJfbHBtX2NmZyA9IChxc2VyX3BtX2NmZ190ICopbWFsbG9jKHNpemVvZihxc2VyX3BtX2NmZ190KSk7CisgICAgcXNlcl9scG1fY2ZnLT53YWtldXBpbi53YWtldXBpbl9waW4gPSA1MDsKKyAgICBxc2VyX2xwbV9jZmctPndha2V1cGluLndha2V1cGluX2VkZ2UgPSBFX1FMX0xQTV9GQUxMSU5HOworICAgIHdoaWxlKDEpCisgICAgeworICAgICAgICBwcmludFVzYWdlKCk7CisgICAgICAgIG1lbXNldChjbWQsMCxzaXplb2YoY21kKSk7CisgICAgICAgIGZnZXRzKGNtZCwgc2l6ZW9mKGNtZCksIHN0ZGluKTsKKyAgICAgICAgY21kMSA9IHN0cnRvayhjbWQsICIgIik7CisgICAgICAgIGNtZDIgPSBzdHJ0b2soTlVMTCwgIiAiKTsKKyAgICAgICAgZGVsZXRlX2VudGVyKGNtZDEpOworICAgICAgICBwcmludGYoImNtZDE6JXNcbiIsIGNtZDEpOworICAgICAgICBpZihzdHJjbXAoY21kMSwiLWkiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBxc2VyX2xwbV9pbml0KCBxc2VyX2xwbV9oYW5kbGVyLCBxc2VyX2xwbV9jZmcpOworICAgICAgICAgICAgaWYocmV0ICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJscG0gaW5pdCBmYWlsXG4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImxwbSBpbml0IHN1Y2Nlc3NcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoc3RyY21wKGNtZDEsIi1lIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciBudW09JzEnOworICAgICAgICAgICAgcmV0ID0gcXNlcl9hdXRvc3VzcGVuZF9lbmFibGUobnVtKTsKKyAgICAgICAgICAgIGlmKHJldCAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigicXNlcl9hdXRvc3VzcGVuZF9lbmFibGUgZmFpbFxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJxc2VyX2F1dG9zdXNwZW5kX2VuYWJsZSBzdWNjZXNzXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHN0cmNtcChjbWQxLCItY2wiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZihjbWQyID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJuYW1lIGlzIG51bGxcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVuID0gc3RybGVuKGNtZDIpOworICAgICAgICAgICAgcHJpbnRmKCJsZW4gPSVkXG4iLCBsZW4pOworICAgICAgICAgICAgcmV0ID0gcXNlcl93YWtlbG9ja19jcmVhdGUoY21kMiwgbGVuKTsKKyAgICAgICAgICAgIGlmKHJldCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJ3YWtlbG9jayBjcmVhdGUgZmFpbFxuIik7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJyZXQ9JWRcbiIsIHJldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJ3YWtlbG9jayBjcmVhdGUgc3VjY2Vzc1xuIik7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJmZD0lZFxuIiwgcmV0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoY21kMSwiLWFsIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgIGlmKGNtZDIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImZkIGlzIG51bGxcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbnVtID0gYXRvaShjbWQyKTsKKyAgICAgICAgICAgIHJldCA9IHFzZXJfd2FrZWxvY2tfbG9jayhudW0pOworICAgICAgICAgICAgaWYocmV0ICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJ3YWtlbG9jayBsb2NrIGZhaWxcbiIpOworICAgICAgICAgICAgICAgIHByaW50ZigicmV0PSVkXG4iLCByZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50Zigid2FrZWxvY2sgbG9jayBzdWNjZXNzXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgaWYoYXJnYyA8IDIpCi0gICAgewotICAgICAgICBwcmludGYoIndyb25nIGlucHV0IGZvcm1hdCwgcGxlYXNlIC1oIFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaWYoc3RyY21wKGFyZ3ZbMV0sIi1oIikgPT0gMCkKLSAgICB7Ci0gICAgICAgIHByaW50ZigiICAgICAgICAtaCAgICAgICAgICAgICAgICAgIC0taGVscFxuIik7Ci0gICAgICAgIHByaW50ZigiICAgICAgICAtaSAgICAgICAgICAgICAgICAgIC0tcXNlcV9scG1faW5pdFxuIik7Ci0gICAgICAgIHByaW50ZigiICAgICAgICAtZCAgICAgICAgICAgICAgICAgIC0tcXNlcl9scG1fZGVpbml0XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICAgICAgIC1lICAgICAgICAgICAgICAgICAgLS1xc2VyX2F1dG9zdXNwZW5kX2VuYWJsZVxuIik7Ci0gICAgICAgIHByaW50ZigiICAgICAgICAtY2wgW3dha2Vsb2NrIG5hbWVdIC0tcXNlcl93YWtlbG9ja19jcmVhdGUgXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICAgICAgIC1hbCBbd2FrZWxvY2sgbnVtXSAgLS1xc2VyX3dha2Vsb2NrX2xvY2sgXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICAgICAgIC1ybCBbd2FrZWxvY2sgbnVtXSAgLS1xc2VyX3dha2Vsb2NrX3VubG9jayBcbiIpOwotICAgICAgICBwcmludGYoIiAgICAgICAgLWRsIFt3YWtlbG9jayBudW1dICAtLXFzZXJfd2FrZWxvY2tfZGVzdHJveVxuIik7Ci0gICAgICAgIHByaW50ZigiICAgICAgICAtY2NsICAgICAgICAgICAgICAgIC0tY2hlY2sgY3JlYXRlZCBsb2Nrc1xuIik7Ci0gICAgICAgIHByaW50ZigiICAgICAgICAtY2xsICAgICAgICAgICAgICAgIC0tY2hlY2sgbG9ja3VwIGxvY2tzXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICAgICAgIC13bGEgW2lkXSAgICAgICAgICAgLS1xc2VyX3doaXRlbGlzdF9hZGRcbiIpOwotICAgICAgICBwcmludGYoIiAgICAgICAgLXdsZCBbaWRdICAgICAgICAgICAtLXFzZXJfd2hpdGVsaXN0X2RlbFxuIik7Ci0gICAgICAgIHByaW50ZigiICAgICAgICAtd2xnICAgICAgICAgICAgICAgIC0tcXNlcl93aGl0ZWxpc3RfZ2V0XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICAgICAgIC13bGMgICAgICAgICAgICAgICAgLS1xc2VyX3doaXRlbGlzdF9jbGVhclxuIik7Ci0gICAgfQotICAgIGVsc2UgaWYoc3RyY21wKGFyZ3ZbMV0sIi1kIikgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldCA9IHFzZXJfbHBtX2RlaW5pdCgpOwotICAgICAgICBpZihyZXQgIT0gMCkKKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGNtZDEsIi1ybCIpID09IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ZigibHBtIGRlaW5pdCBmYWlsXG4iKTsKKyAgICAgICAgICAgIGlmKGNtZDIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImZkIGlzIG51bGxcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbnVtID0gYXRvaShjbWQyKTsKKyAgICAgICAgICAgIHJldCA9IHFzZXJfd2FrZWxvY2tfdW5sb2NrKG51bSk7CisgICAgICAgICAgICBpZihyZXQgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIndha2Vsb2NrIHVubG9jayBmYWlsXG4iKTsKKyAgICAgICAgICAgICAgICBwcmludGYoInJldD0lZFxuIiwgcmV0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIndha2Vsb2NrIHVubG9jayBzdWNjZXNzXG4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgaWYoc3RyY21wKGNtZDEsIi1kbCIpID09IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ZigibHBtIGRlaW5pdCBzdWNjZXNzXG4iKTsKKyAgICAgICAgICAgIGlmKGNtZDIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImZkIGlzIG51bGxcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbnVtID0gYXRvaShjbWQyKTsKKyAgICAgICAgICAgIHJldCA9IHFzZXJfd2FrZWxvY2tfZGVzdHJveShudW0pOworICAgICAgICAgICAgaWYocmV0ICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJ3YWtlbG9jayBkZXN0cm95IGZhaWxcbiIpOworICAgICAgICAgICAgICAgIHByaW50ZigicmV0PSVkXG4iLCByZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50Zigid2FrZWxvY2sgZGVzdHJveSBzdWNjZXNzXG4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmKHN0cmNtcChhcmd2WzFdLCItZSIpID09IDApCi0gICAgewotICAgICAgICBjaGFyIG51bT0nMSc7Ci0gICAgICAgIHJldCA9IHFzZXJfYXV0b3N1c3BlbmRfZW5hYmxlKG51bSk7Ci0gICAgICAgIGlmKHJldCAhPSAwKQorICAgICAgICBlbHNlIGlmKHN0cmNtcChjbWQxLCItY2NsIikgPT0gMCkKICAgICAgICAgewotICAgICAgICAgICAgcHJpbnRmKCJxc2VyX2F1dG9zdXNwZW5kX2VuYWJsZSBmYWlsXG4iKTsKKyAgICAgICAgICAgIGludCByZXQ7CisgICAgICAgICAgICByZXQgPSBjaGVja19sb2NrKCk7CisgICAgICAgICAgICBpZihyZXQgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImNoZWNrIGxvY2sgZmFpbFxuIik7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJyZXQ9JWRcbiIsIHJldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJjaGVjayBsb2NrIHN1Y2Nlc3NcbiIpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSBpZihzdHJjbXAoY21kMSwiLWNsbCIpID09IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ZigicXNlcl9hdXRvc3VzcGVuZF9lbmFibGUgc3VjY2Vzc1xuIik7CisgICAgICAgICAgICBpbnQgcmV0OworICAgICAgICAgICAgcmV0ID0gc3lzdGVtKCJjYXQgL3N5cy9wb3dlci93YWtlX2xvY2siKTsKKyAgICAgICAgICAgIGlmKHJldCAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigiY2hlY2sgY3JlYXRlZCBsb2NrIGZhaWxcbiIpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYoc3RyY21wKGFyZ3ZbMV0sIi1jbCIpID09IDApCi0gICAgewotICAgICAgICBpZihhcmd2WzJdID09IE5VTEwpCisgICAgICAgIGVsc2UgaWYoc3RyY21wKGNtZDEsIi13bGEiKSA9PSAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGYoIm5hbWUgaXMgbnVsbFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBudW0gPSBhdG9pKGNtZDIpOworICAgICAgICAgICAgcmV0ID0gcXNlcl93aGl0ZWxpc3RfYWRkKG51bSk7CisgICAgICAgICAgICBpZihyZXQgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIm1uZXRfd2hpdGVsaXN0X2FkZCByZXQgJWQuXG4iLCByZXQpOworICAgICAgICAgICAgfQorCiAgICAgICAgIH0KLSAgICAgICAgbGVuID0gc3RybGVuKGFyZ3ZbMl0pOwotICAgICAgICBwcmludGYoImxlbiA9JWRcbiIsIGxlbik7Ci0gICAgICAgIHJldCA9IHFzZXJfd2FrZWxvY2tfY3JlYXRlKGFyZ3ZbMl0sIGxlbik7Ci0gICAgICAgIGlmKHJldCA8IDApCisgICAgICAgIGVsc2UgaWYoc3RyY21wKGNtZDEsIi13bGQiKSA9PSAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGYoIndha2Vsb2NrIGNyZWF0ZSBmYWlsXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigicmV0PSVkXG4iLCByZXQpOworICAgICAgICAgICAgbnVtID0gYXRvaShjbWQyKTsKKyAgICAgICAgICAgIHJldCA9IHFzZXJfd2hpdGVsaXN0X2RlbChudW0pOworICAgICAgICAgICAgaWYocmV0ICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJtbmV0X3doaXRlbGlzdF9kZWwgcmV0ICVkLlxuIiwgcmV0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgaWYoc3RyY21wKGNtZDEsIi13bGciKSA9PSAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGYoIndha2Vsb2NrIGNyZWF0ZSBzdWNjZXNzXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiZmQ9JWRcbiIsIHJldCk7CisgICAgICAgICAgICBjaGFyKiB3aGl0ZWxpc3Q7CisgICAgICAgICAgICBxc2VyX3doaXRlbGlzdF9nZXQod2hpdGVsaXN0KTsKKyAgICAgICAgICAgIHByaW50ZigibW5ldF93aGl0ZWxpc3RfZ2V0IDolc1xuIix3aGl0ZWxpc3QpOwogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCItYWwiKSA9PSAwKQotICAgIHsKLSAgICAgICAgaWYoYXJndlsyXSA9PSBOVUxMKQorICAgICAgICBlbHNlIGlmKHN0cmNtcChjbWQxLCItd2xjIikgPT0gMCkKICAgICAgICAgewotICAgICAgICAgICAgcHJpbnRmKCJmZCBpcyBudWxsXG4iKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldCA9IHFzZXJfd2hpdGVsaXN0X2NsZWFyKCk7CisgICAgICAgICAgICBpZihyZXQgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIm1uZXRfd2hpdGVsaXN0X2NsZWFyIHJldCAlZC5cbiIsIHJldCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbnVtID0gYXRvaShhcmd2WzJdKTsKLSAgICAgICAgcmV0ID0gcXNlcl93YWtlbG9ja19sb2NrKG51bSk7Ci0gICAgICAgIGlmKHJldCAhPSAwKQorICAgICAgICBlbHNlIGlmKHN0cmNtcChjbWQxLCAiLWQiKSA9PSAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGYoIndha2Vsb2NrIGxvY2sgZmFpbFxuIik7Ci0gICAgICAgICAgICBwcmludGYoInJldD0lZFxuIiwgcmV0KTsKKyAgICAgICAgICAgIHJldCA9IHFzZXJfbHBtX2RlaW5pdCgpOworICAgICAgICAgICAgaWYocmV0ICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJscG0gZGVpbml0IGZhaWxcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigibHBtIGRlaW5pdCBzdWNjZXNzXG4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgaWYoc3RyY21wKGNtZDEsIi1xIikgPT0gMCkKICAgICAgICAgewotICAgICAgICAgICAgcHJpbnRmKCJ3YWtlbG9jayBsb2NrIHN1Y2Nlc3NcbiIpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwiLXJsIikgPT0gMCkKLSAgICB7Ci0gICAgICAgIGlmKGFyZ3ZbMl0gPT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJpbnRmKCJmZCBpcyBudWxsXG4iKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBudW0gPSBhdG9pKGFyZ3ZbMl0pOwotICAgICAgICByZXQgPSBxc2VyX3dha2Vsb2NrX3VubG9jayhudW0pOwotICAgICAgICBpZihyZXQgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJpbnRmKCJ3YWtlbG9jayB1bmxvY2sgZmFpbFxuIik7Ci0gICAgICAgICAgICBwcmludGYoInJldD0lZFxuIiwgcmV0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50Zigid2FrZWxvY2sgdW5sb2NrIHN1Y2Nlc3NcbiIpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYoc3RyY21wKGFyZ3ZbMV0sIi1kbCIpID09IDApCi0gICAgewotICAgICAgICBpZihhcmd2WzJdID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ZigiZmQgaXMgbnVsbFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgbnVtID0gYXRvaShhcmd2WzJdKTsKLSAgICAgICAgcmV0ID0gcXNlcl93YWtlbG9ja19kZXN0cm95KG51bSk7Ci0gICAgICAgIGlmKHJldCAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGYoIndha2Vsb2NrIGRlc3Ryb3kgZmFpbFxuIik7Ci0gICAgICAgICAgICBwcmludGYoInJldD0lZFxuIiwgcmV0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50Zigid2FrZWxvY2sgZGVzdHJveSBzdWNjZXNzXG4iKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmKHN0cmNtcChhcmd2WzFdLCItY2NsIikgPT0gMCkKLSAgICB7Ci0gICAgICAgIGludCByZXQ7Ci0gICAgICAgIHJldCA9IGNoZWNrX2xvY2soKTsKLSAgICAgICAgaWYocmV0ICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ZigiY2hlY2sgbG9jayBmYWlsXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigicmV0PSVkXG4iLCByZXQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcHJpbnRmKCJjaGVjayBsb2NrIHN1Y2Nlc3NcbiIpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYoc3RyY21wKGFyZ3ZbMV0sIi1jbGwiKSA9PSAwKQotICAgIHsKLSAgICAgICAgaW50IHJldDsKLSAgICAgICAgcmV0ID0gc3lzdGVtKCJjYXQgL3N5cy9wb3dlci93YWtlX2xvY2siKTsKLSAgICAgICAgaWYocmV0ICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ZigiY2hlY2sgY3JlYXRlZCBsb2NrIGZhaWxcbiIpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYoc3RyY21wKGFyZ3ZbMV0sIi13bGEiKSA9PSAwKQotICAgIHsKLSAgICAgICAgbnVtID0gYXRvaShhcmd2WzJdKTsKLSAgICAgICAgcmV0ID0gcXNlcl93aGl0ZWxpc3RfYWRkKG51bSk7Ci0gICAgICAgIGlmKHJldCAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGYoIm1uZXRfd2hpdGVsaXN0X2FkZCByZXQgJWQuXG4iLCByZXQpOwotICAgICAgICB9Ci0KLSAgICB9Ci0gICAgZWxzZSBpZihzdHJjbXAoYXJndlsxXSwiLXdsZCIpID09IDApCi0gICAgewotICAgICAgICBudW0gPSBhdG9pKGFyZ3ZbMl0pOwotICAgICAgICByZXQgPSBxc2VyX3doaXRlbGlzdF9kZWwobnVtKTsKLSAgICAgICAgaWYocmV0ICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ZigibW5ldF93aGl0ZWxpc3RfZGVsIHJldCAlZC5cbiIsIHJldCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZihzdHJjbXAoYXJndlsxXSwiLXdsZyIpID09IDApCi0gICAgewotICAgICAgICBjaGFyKiB3aGl0ZWxpc3Q7Ci0gICAgICAgIHFzZXJfd2hpdGVsaXN0X2dldCh3aGl0ZWxpc3QpOwotICAgICAgICBwcmludGYoIm1uZXRfd2hpdGVsaXN0X2dldCA6JXNcbiIsd2hpdGVsaXN0KTsKLSAgICB9Ci0gICAgZWxzZSBpZihzdHJjbXAoYXJndlsxXSwiLXdsYyIpID09IDApCi0gICAgewotICAgICAgICByZXQgPSBxc2VyX3doaXRlbGlzdF9jbGVhcigpOwotICAgICAgICBpZihyZXQgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJpbnRmKCJtbmV0X3doaXRlbGlzdF9jbGVhciByZXQgJWQuXG4iLCByZXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHByaW50Zigid3JvbmcgaW5wdXQgZm9ybWF0LCBwbGVhc2UgLWggXG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KICAgICByZXR1cm4gMDsKIAogfQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9wb3dlcmFsYXJtLWRlbW8vZmlsZXMvcG93ZXJhbGFybS1kZW1vLmNwcCBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvcG93ZXJhbGFybS1kZW1vL2ZpbGVzL3Bvd2VyYWxhcm0tZGVtby5jcHAKaW5kZXggNzVkYTFlMS4uMmUwZjcxZiAxMDA3NTUKLS0tIGEvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9wb3dlcmFsYXJtLWRlbW8vZmlsZXMvcG93ZXJhbGFybS1kZW1vLmNwcAorKysgYi9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL3Bvd2VyYWxhcm0tZGVtby9maWxlcy9wb3dlcmFsYXJtLWRlbW8uY3BwCkBAIC02LDEyICs2LDE2IEBACiAjaW5jbHVkZSA8ZGxmY24uaD4NCiAjaW5jbHVkZSA8c3RkaW50Lmg+DQogDQorDQorI2RlZmluZSBJTklUX1NVQ0NFU1MgICAgMA0KKw0KIHR5cGVkZWYgc3RydWN0DQogew0KICAgICBpbnQgIGNtZElkeDsNCiAgICAgY2hhciAqZnVuY05hbWU7DQogfSBzdF9hcGlfdGVzdF9jYXNlOw0KLSAgICANCisNCisNCiAvL2ZvciBzZXJ2ZXIgdGVzdA0KIHN0X2FwaV90ZXN0X2Nhc2UgYXRfYXBpX3Rlc3RjYXNlc1tdID0gDQogew0KQEAgLTI2LDcgKzMwLDEwIEBACiAgICAgey0xLCAgICBOVUxMfQ0KIH07DQogDQotaW50IHNyY19pZCA9IC0xOw0KKyBpbnQgaW5pdF9mbGFnID0gLTE7DQorIGludCBzcmNfaWQgPSAtMTsNCisgdm9pZCAqZGxIYW5kbGVfcG93ZXJhbGFybSA9IE5VTEw7DQorIA0KIHR5cGVkZWYgaW50ICgqbHlucV93YWtlYWxhcm1fYWRkX2NiKSh1bnNpZ25lZCBpbnQgc3JjX2lkLCBpbnQgcnRjX2lkKTsNCiANCiBpbnQgKCpseW5xX3J0Y19zZXJ2aWNlX2luaXQpKHZvaWQpOw0KQEAgLTM3LDcgKzQ0LDYgQEAKIGludCAoKmx5bnFfc2V0X3Bvd2VyYWxhcm0pKHVuc2lnbmVkIGxvbmcgdGltZV9zZWMsaW50IHNyY19pZCk7DQogaW50ICgqbHlucV9zZXRfd2FrZWFsYXJtKSh1bnNpZ25lZCBsb25nIHRpbWVfc2VjLGludCBzcmNpZCxpbnQgcnRjX2lkLGx5bnFfd2FrZWFsYXJtX2FkZF9jYiB3YWtlYWxhcm1fbm90aWZ5KTsNCiANCi12b2lkICpkbEhhbmRsZV9wb3dlcmFsYXJtID0gTlVMTDsNCiANCiANCiB2b2lkIHByaW50X2hlbHAodm9pZCkNCkBAIC0xMjUsNiArMTMxLDcgQEAKICAgICBwcmludF9oZWxwKCk7DQogICAgIHdoaWxlKDEpDQogICAgIHsNCisgICAgICAgIA0KICAgICAgICAgcHJpbnRmKCJcbnBsZWFzZSBpbnB1dCBjbWQgaW5kZXgoLTEgZXhpdCk6ICIpOw0KICAgICAgICAgc2NhbmYoIiVkIiwgJmNtZElkeCk7DQogICAgICAgICBpZihjbWRJZHggPT0gLTEpDQpAQCAtMTM5LDkyICsxNDYsMTQ1IEBACiAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgIHNyY19pZCA9IGx5bnFfcnRjX3NlcnZpY2VfaW5pdCgpOw0KKyAgICAgICAgICAgICAgICAgICAgaWYoc3JjX2lkIDw9IDApDQorICAgICAgICAgICAgICAgICAgICB7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJSVEMgc2VydmljZSBpbml0IGZhaWxlZCAiKTsNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9mbGFnID0gSU5JVF9TVUNDRVNTOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGNhc2UgMjoNCiAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBjaGFyIHRtcF90aW1lWzMyXSA9IHswfTsNCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiU2V0IHBvd2VyYWxhcm0gdGltZSxlLmc6IDYwIChzZWNvbmRzKVxuIik7DQotICAgICAgICAgICAgICAgICAgICBzY2FuZigiJXMiLHRtcF90aW1lKTsNCi0gICAgICAgICAgICAgICAgICAgIHJldCA9IHBvd2VyYWxhcm0odG1wX3RpbWUsc3JjX2lkKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmKHJldCAhPSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgICBpZihpbml0X2ZsYWcgIT0gSU5JVF9TVUNDRVNTKQ0KICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigic2V0IHBvd2VyYWxhcm0gZmFpbGVkXG4iKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIqKioqKkVSUk9SIG11c3QgaW5pdCBydGMgc2VydmljZSAsUGxlYXNlIHJlc2VsZWN0ICoqKioqKipcbiAiKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gMDsNCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHRtcF90aW1lWzMyXSA9IHswfTsNCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlNldCBwb3dlcmFsYXJtIHRpbWUsZS5nOiA2MCAoc2Vjb25kcylcbiIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlcyIsdG1wX3RpbWUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHBvd2VyYWxhcm0odG1wX3RpbWUsc3JjX2lkKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXQgIT0gMCkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigic2V0IHBvd2VyYWxhcm0gZmFpbGVkXG4iKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBjYXNlIDM6DQogICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgY2hhciB0bXBfdGltZVszMl09ezB9Ow0KLSAgICAgICAgICAgICAgICAgICAgaW50IHJ0Y19pZCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIlNldCB3YWtlYWxhcm0gdGltZSAsZS5nOiA2MCAgMSAoc2Vjb25kcylcbiIpOw0KLSAgICAgICAgICAgICAgICAgICAgc2NhbmYoIiVzJWQiLHRtcF90aW1lLCZydGNfaWQpOw0KLSAgICAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICAgICAgICAgIHJldCA9IHdha2VhbGFybSh0bXBfdGltZSxzcmNfaWQscnRjX2lkLGx5bnFfd2FrZWFsYXJtX2FkZF9jYWxsYmFjayk7DQotICAgICAgICAgICAgICAgICAgICBpZihyZXQgIT0gMCkNCisgICAgICAgICAgICAgICAgICAgIGlmKGluaXRfZmxhZyAhPSBJTklUX1NVQ0NFU1MpDQogICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJzZXQgd2FrZWFsYXJtIGZhaWxlZFxuIik7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiKioqKipFUlJPUiBtdXN0IGluaXQgcnRjIHNlcnZpY2UgLFBsZWFzZSByZXNlbGVjdCAqKioqKioqXG4gIik7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IDA7DQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciB0bXBfdGltZVszMl09ezB9Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBydGNfaWQgPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiU2V0IHdha2VhbGFybSB0aW1lICxlLmc6IDYwICAxIChzZWNvbmRzKVxuIik7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2NhbmYoIiVzJWQiLHRtcF90aW1lLCZydGNfaWQpOw0KKyAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB3YWtlYWxhcm0odG1wX3RpbWUsc3JjX2lkLHJ0Y19pZCxseW5xX3dha2VhbGFybV9hZGRfY2FsbGJhY2spOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJldCAhPSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJzZXQgd2FrZWFsYXJtIGZhaWxlZFxuIik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBjYXNlIDQ6DQogICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgaW50IHJ0Y19pZCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIlBsZWFzZSBpbnB1dCB5b3Ugd2FudCBjYW5jZWwgcnRjIHRpbWVyIHJ0YyBpZFxuIik7DQotICAgICAgICAgICAgICAgICAgICBzY2FuZigiJWQiLCZydGNfaWQpOw0KLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gY2FuY2VsX3dha2VhbGFybShzcmNfaWQscnRjX2lkKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmKHJldCAhPSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgaWYoaW5pdF9mbGFnICE9IElOSVRfU1VDQ0VTUykNCiAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkNhbmNlbF93YWtlYWxhcm0gZmFpbGVkISEhIik7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiKioqKipFUlJPUiBtdXN0IGluaXQgcnRjIHNlcnZpY2UgLFBsZWFzZSByZXNlbGVjdCAqKioqKioqXG4gIik7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IDA7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJ0Y19pZCA9IDA7DQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJQbGVhc2UgaW5wdXQgeW91IHdhbnQgY2FuY2VsIHJ0YyB0aW1lciBydGMgaWRcbiIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlZCIsJnJ0Y19pZCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gY2FuY2VsX3dha2VhbGFybShzcmNfaWQscnRjX2lkKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXQgIT0gMCkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ2FuY2VsX3dha2VhbGFybSBmYWlsZWQhISEiKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGNhc2UgNToNCiAgICAgICAgICAgICAgICAgeyANCi0gICAgICAgICAgICAgICAgICAgaW50IHJldCA9IDA7IA0KLSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVfc2VjID0gMDsNCi0gICAgICAgICAgICAgICAgICAgcHJpbnRmKCJJbnB1dCB0aW1lX3NlYyB5b3Ugd2FudCBwb3dlcmFsYXJtLGUuZzogNjAgKHNlY29uZHMpXG4iKTsNCi0gICAgICAgICAgICAgICAgICAgc2NhbmYoIiVsdSIsJnRpbWVfc2VjKTsNCi0gICAgICAgICAgICAgICAgICAgcmV0ID1seW5xX3NldF9wb3dlcmFsYXJtKHRpbWVfc2VjLHNyY19pZCk7DQotICAgICAgICAgICAgICAgICAgIHByaW50ZigicmV0IGlzICVkXG4iLHJldCk7DQotICAgICAgICAgICAgICAgICAgIGlmKHJldCAhPSAwKQ0KLSAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJseW5xX3NldF9wb3dlcmFsYXJtIGZhaWxlZFxuIik7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBpZihpbml0X2ZsYWcgIT0gSU5JVF9TVUNDRVNTKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiKioqKipFUlJPUiBtdXN0IGluaXQgcnRjIHNlcnZpY2UgLFBsZWFzZSByZXNlbGVjdCAqKioqKioqXG4gIik7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IDA7IA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZV9zZWMgPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiSW5wdXQgdGltZV9zZWMgeW91IHdhbnQgcG93ZXJhbGFybSxlLmc6IDYwIChzZWNvbmRzKVxuIik7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2NhbmYoIiVsdSIsJnRpbWVfc2VjKTsNCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPWx5bnFfc2V0X3Bvd2VyYWxhcm0odGltZV9zZWMsc3JjX2lkKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInJldCBpcyAlZFxuIixyZXQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJldCAhPSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJseW5xX3NldF9wb3dlcmFsYXJtIGZhaWxlZFxuIik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgY2FzZSA2Og0KLSAgICAgICAgICAgICAgICAgeyANCi0gICAgICAgICAgICAgICAgICAgaW50IHJldCA9IDA7IA0KLSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVfc2VjID0gMDsNCi0gICAgICAgICAgICAgICAgICAgaW50IHJ0Y19pZDsNCi0gICAgICAgICAgICAgICAgICAgcHJpbnRmKCJJbnB1dCB0aW1lX3NlYyB5b3Ugd2FudCB3YWtlYWxhcm0sZS5nOjYwICAxKHNlY29uZHMpXG4iKTsNCi0gICAgICAgICAgICAgICAgICAgc2NhbmYoIiVsdSVkIiwmdGltZV9zZWMsJnJ0Y19pZCk7DQotICAgICAgICAgICAgICAgICAgIHJldCA9bHlucV9zZXRfd2FrZWFsYXJtKHRpbWVfc2VjLHNyY19pZCxydGNfaWQsbHlucV93YWtlYWxhcm1fYWRkX2NhbGxiYWNrKTsNCi0gICAgICAgICAgICAgICAgICAgaWYocmV0ICE9IDApDQotICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImx5bnFfc2V0X3dha2VhbGFybSBmYWlsZWRcbiIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgICAgICAgICAgeyANCisgICAgICAgICAgICAgICAgICAgIGlmKGluaXRfZmxhZyAhPSBJTklUX1NVQ0NFU1MpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIqKioqKkVSUk9SIG11c3QgaW5pdCBydGMgc2VydmljZSAsUGxlYXNlIHJlc2VsZWN0ICoqKioqKipcbiAiKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gMDsgDQorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lX3NlYyA9IDA7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJ0Y19pZDsNCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIklucHV0IHRpbWVfc2VjIHlvdSB3YW50IHdha2VhbGFybSxlLmc6NjAgIDEoc2Vjb25kcylcbiIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlbHUlZCIsJnRpbWVfc2VjLCZydGNfaWQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9bHlucV9zZXRfd2FrZWFsYXJtKHRpbWVfc2VjLHNyY19pZCxydGNfaWQsbHlucV93YWtlYWxhcm1fYWRkX2NhbGxiYWNrKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXQgIT0gMCkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigibHlucV9zZXRfd2FrZWFsYXJtIGZhaWxlZFxuIik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgY2FzZSA3Og0KICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ICA9IC0xOw0KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJydGMgc2VydmNlIGRlaW5pdCAhISEhISEhISEhISEiKTsNCi0gICAgICAgICAgICAgICAgICAgIHJldCA9IGx5bnFfcnRjX3NlcnZpY2VfZGVpbml0KCk7DQotICAgICAgICAgICAgICAgICAgICBpZihyZXQgIT0gMCkNCisgICAgICAgICAgICAgICAgICAgIGlmKGluaXRfZmxhZyAhPSBJTklUX1NVQ0NFU1MpDQogICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJseW5xIHJ0YyBzZXJ2aWNlIGRlaW5pdCBmYWlsZWQgXG4iKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotDQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIqKioqKkVSUk9SIG11c3QgaW5pdCBydGMgc2VydmljZSAsUGxlYXNlIHJlc2VsZWN0ICoqKioqKipcbiAiKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ICA9IC0xOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigicnRjIHNlcnZjZSBkZWluaXQgISEhISEhISEhISEhIik7DQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gbHlucV9ydGNfc2VydmljZV9kZWluaXQoKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXQgIT0gMCkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigibHlucSBydGMgc2VydmljZSBkZWluaXQgZmFpbGVkIFxuIik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgfQ0KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLWF0LWZhY3RvcnkvbGlibHlucS1hdC1mYWN0b3J5LmNwcCBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLWF0LWZhY3RvcnkvbGlibHlucS1hdC1mYWN0b3J5LmNwcAppbmRleCA2MTJkOTY4Li5jYzI2ZGI2IDEwMDc1NQotLS0gYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1hdC1mYWN0b3J5L2xpYmx5bnEtYXQtZmFjdG9yeS5jcHAKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtYXQtZmFjdG9yeS9saWJseW5xLWF0LWZhY3RvcnkuY3BwCkBAIC0yMjksNyArMjI5LDcgQEAKICAgICBpbnQgZ3JlZXAgPSBpbnB1dFswXSAtICcwJzsNCiAgICAgQUxPR0QocmVzLCJ0aGUgZ3JlZXA6JWRcbiIsZ3JlZXApOy8vVGhlIGZpcnN0IGRpZ2l0IHJlcHJlc2VudHMgZ3JvdXBpbmcNCiANCi0gICAgZm9yIChpbnQgaSA9IDE7IGlucHV0W2ldICE9ICdcMCc7IGkrKykNCisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBzdHJsZW4oaW5wdXQpOyBpKyspDQogICAgIHsNCiAgICAgICAgIGludCBudW0gPSAwOw0KICAgICAgICAgZm9yICg7IGlucHV0W2ldICE9ICcsJyAmJiBpbnB1dFtpXSAhPSAnXDAnOyBpKyspDQpAQCAtNDIyLDYgKzQyMiw3IEBACiAgICAgaWYoKHZhbGlkX2xlbmd0aCA9IGx5bnFfZ3Bpb19hbmFseXNpcyhpbnB1dCwgbHlucV9ncGlvX2FyciwgbHlucV9ncGlvX3RvdGFsX2FyciwgdG90YWxfbGVuZ3RoKSkgPCAwKQ0KICAgICB7DQogICAgICAgICBseW5xX3Jlc3BvbnNlX2Vycm9yKDEwMCk7DQorICAgICAgICBhbGxfZ3Bpb191bmluaXQodG90YWxfbGVuZ3RoLCBseW5xX2dwaW9fdG90YWxfYXJyKTsNCiAgICAgICAgIHJldHVybjsNCiAgICAgfQ0KICAgICBBTE9HRSgiVGhlIFZhbGlkIGNvdW50OiVkXG4iLHZhbGlkX2xlbmd0aCk7DQpAQCAtNDUxLDYgKzQ1Miw3IEBACiAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgQUxPR0UoImdwaW8gaW5pdCBvciB1bmluaXQgZmFpbFxuIik7DQogICAgICAgICAgICAgICAgICAgICBseW5xX3Jlc3BvbnNlX2Vycm9yKDEwMCk7DQorICAgICAgICAgICAgICAgICAgICBhbGxfZ3Bpb191bmluaXQodG90YWxfbGVuZ3RoLCBseW5xX2dwaW9fdG90YWxfYXJyKTsNCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICBBTE9HRCgiZmluc2ggY29uZmlndXJlIGZ1bmN0aW9uXG4iKTsgIA0KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXFzZXItYXV0b3N1c3BlbmQvbHlucS1xc2VyLWF1dG9zdXNwZW5kLmNwcCBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXFzZXItYXV0b3N1c3BlbmQvbHlucS1xc2VyLWF1dG9zdXNwZW5kLmNwcAppbmRleCBlODJlMmMwLi41YTg4ZWY3IDEwMDc1NQotLS0gYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1xc2VyLWF1dG9zdXNwZW5kL2x5bnEtcXNlci1hdXRvc3VzcGVuZC5jcHAKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtcXNlci1hdXRvc3VzcGVuZC9seW5xLXFzZXItYXV0b3N1c3BlbmQuY3BwCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGU8dW5pc3RkLmg+CisjaW5jbHVkZSA8Y3V0aWxzL3VldmVudC5oPgogCiAjaW5jbHVkZSA8bHlucV9hdXRvc3VzcGVuZC5oPgogI2luY2x1ZGUgImx5bnEtcXNlci1hdXRvc3VzcGVuZC5oIgpAQCAtMjUsNiArMjYsMjAgQEAKIAogI2RlZmluZSBVU0VSX0xPR19UQUcgIkxZTlFfUVNFUl9BVVRPU1VTUEVORCIKICNkZWZpbmUgRklMRV9MT0NLX1RBQkxFICIvdG1wLy5sb2NrX3RhYmxlIgorI2RlZmluZSBVRVZFTlRfTVNHX0xFTiAxMjgKKworCitzdHJ1Y3QgZHRyX3VldmVudCB7CisgICAgY29uc3QgY2hhciAqYWN0aW9uOworICAgIGNvbnN0IGNoYXIgKnBhdGg7CisgICAgY29uc3QgY2hhciAqc3Vic3lzdGVtOworICAgIGNvbnN0IGNoYXIgKnVzYmV2ZW50OworfTsKKworc3RhdGljIHZvaWQgcGFyc2VfZXZlbnQoY29uc3QgY2hhciAqbXNnLCBzdHJ1Y3QgZHRyX3VldmVudCAqZHRyX3VldmVudCk7CisKKworcXNlcl9scG1fSGFuZGxlcl90IGdfbHBtX2hhbmRsZXIgPSBOVUxMOwogCiAKIExPQ0tfVEFCTEUgbG9ja19zdGF0dXM7CkBAIC0zMiw2ICs0Nyw3IEBACiAKIGludCBmaWxlX2ZkOwogaW50IGZpcnN0X3J1biA9IDA7CitwdGhyZWFkX3QgdGhpZDsKIAogCiBpbnQgbG9ja190YWJsZV9pbml0KHZvaWQpCkBAIC0yMTgsMTkgKzIzNCw4NCBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHBhcnNlX2V2ZW50KGNvbnN0IGNoYXIgKm1zZywgc3RydWN0IGR0cl91ZXZlbnQgKmR0cl91ZXZlbnQpCit7CisgICAgZHRyX3VldmVudC0+YWN0aW9uID0gIiI7CisgICAgZHRyX3VldmVudC0+cGF0aCA9ICIiOworICAgIGR0cl91ZXZlbnQtPnN1YnN5c3RlbSA9ICIiOworICAgIGR0cl91ZXZlbnQtPnVzYmV2ZW50ID0gIiI7CisKKyAgICB3aGlsZSAoKm1zZykgeworICAgICAgICBpZiAoIXN0cm5jbXAobXNnLCAiQUNUSU9OPSIsIDcpKQorICAgICAgICB7CisgICAgICAgICAgICBtc2cgKz0gNzsKKyAgICAgICAgICAgIGR0cl91ZXZlbnQtPmFjdGlvbiA9IG1zZzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghc3RybmNtcChtc2csICJERVZQQVRIPSIsIDgpKQorICAgICAgICB7CisgICAgICAgICAgICBtc2cgKz0gODsKKyAgICAgICAgICAgIGR0cl91ZXZlbnQtPnBhdGggPSBtc2c7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIXN0cm5jbXAobXNnLCAiU1VCU1lTVEVNPSIsIDEwKSkKKyAgICAgICAgeworICAgICAgICAgICAgbXNnICs9IDEwOworICAgICAgICAgICAgZHRyX3VldmVudC0+c3Vic3lzdGVtID0gbXNnOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFzdHJuY21wKG1zZywgIlVTQkVWRU5UPSIsIDkpKSB7CisgICAgICAgICAgICBtc2cgKz0gOTsKKyAgICAgICAgICAgIGR0cl91ZXZlbnQtPnVzYmV2ZW50ID0gbXNnOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUoKm1zZysrKTsKKyAgICB9CisKKyAgICBMWUlORkxPRygiZXZlbnQgeyAnJXMnLCAnJXMnLCAnJXMnLCAnJXMnfVxuIiwKKyAgICAgICAgICAgICAgICAgICAgZHRyX3VldmVudC0+YWN0aW9uLCBkdHJfdWV2ZW50LT5wYXRoLCBkdHJfdWV2ZW50LT5zdWJzeXN0ZW0sZHRyX3VldmVudC0+dXNiZXZlbnQpOworfQorCisKKwordm9pZCAqY2hlY2tfZHRyKHZvaWQgKiBhcmcpCit7CisgICAgaW50IGRldmljZV9mZDsKKyAgICBxc2VyX2xwbV9lZGdlX3QgbHBtX2VkZ2U7CisgICAgY2hhciBtc2dbVUVWRU5UX01TR19MRU4rMl07CisgICAgc3RydWN0IGR0cl91ZXZlbnQgZHRyX3VldmVudDsKKyAgICBpbnQgbjsKKyAgICBpbnQgaTsKKyAKKyAgICBkZXZpY2VfZmQgPSB1ZXZlbnRfb3Blbl9zb2NrZXQoNCpVRVZFTlRfTVNHX0xFTiwgdHJ1ZSk7CisgICAgaWYoZGV2aWNlX2ZkIDwgMCkKKyAgICB7CisgICAgICAgIExZRVJSTE9HKCJ1ZXZlbnRfb3Blbl9zb2NrZXQgZmFpbFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgd2hpbGUoMSkgCisgICAgeworICAgICAgICBuID0gdWV2ZW50X2tlcm5lbF9tdWx0aWNhc3RfcmVjdihkZXZpY2VfZmQsIG1zZywgVUVWRU5UX01TR19MRU4pOworICAgICAgICBtc2dbbl0gPSAnXDAnOworICAgICAgICBtc2dbbisxXSA9ICdcMCc7CisgICAgICAgIHBhcnNlX2V2ZW50KG1zZywgJmR0cl91ZXZlbnQpOworICAgICAgICBpZigoIXN0cmNtcChkdHJfdWV2ZW50LnN1YnN5c3RlbSwgInhwMnhwIikpICYmICghc3RyY21wKGR0cl91ZXZlbnQuYWN0aW9uLCAib25saW5lIikpKQorICAgICAgICB7CisgICAgICAgICAgICBnX2xwbV9oYW5kbGVyKGxwbV9lZGdlKTsKKyAgICAgICAgfQorICAgIH0KKyAKKyAgICByZXR1cm4gMDsKK30KKworCiBpbnQgcXNlcl9scG1faW5pdChxc2VyX2xwbV9IYW5kbGVyX3QgcXNlcl9scG1faGFuZGxlciwgcXNlcl9wbV9jZmdfdCAqcXNlcl9scG1fY2ZnKQogewogICAgIGludCByZXQ7Ci0gICAgcmV0ID0gc3lzdGVtKCJ1Y2kgc2V0IGx5bnFfdWNpLmx5bnFfYXV0b3N1c3BlbmQuaW5pdD0nMSciKTsKLSAgICBzeXN0ZW0oInVjaSBjb21taXQiKTsKKyAgICBpbnQgbnVtOworCisgICAgZ19scG1faGFuZGxlciA9IHFzZXJfbHBtX2hhbmRsZXI7CisgICAgcmV0ID0gcHRocmVhZF9jcmVhdGUoJnRoaWQsTlVMTCxjaGVja19kdHIsTlVMTCk7CiAgICAgaWYocmV0ICE9IDApCiAgICAgewotICAgICAgICBMWUlORkxPRygidWNpIHNldCBmYWlsIik7Ci0gICAgfQotICAgIHJldCA9IHN5c3RlbSgiLi9ldGMvaW5pdC5kL2x5bnEtYXV0b3N1c3BlbmQuc2ggcmVzdGFydCIpOwotICAgIGlmKHJldCAhPSAwKQotICAgIHsKLSAgICAgICAgTFlJTkZMT0coInJlc3RhcnQgc2VydmljZSBmYWlsIik7CisgICAgICAgIExZRVJSTE9HKCJyZXN0YXJ0IHNlcnZpY2UgZmFpbCIpOwogICAgIH0KICAgICByZXR1cm4gcmV0OwogfQpAQCAtMjM5LDE4ICszMjAsMTcgQEAKIGludCBxc2VyX2xwbV9kZWluaXQodm9pZCkKIHsKICAgICBpbnQgcmV0OwotICAgIHN5c3RlbSgidWNpIHNldCBseW5xX3VjaS5seW5xX2F1dG9zdXNwZW5kLmluaXQ9JzAnIik7Ci0gICAgc3lzdGVtKCJ1Y2kgY29tbWl0Iik7Ci0gICAgaWYocmV0ICE9IDApCisgICAgcmV0ID0gcHRocmVhZF9jYW5jZWwodGhpZCk7CisgICAgaWYoIXJldCkKICAgICB7Ci0gICAgICAgIExZSU5GTE9HKCJ1Y2kgc2V0IGZhaWwiKTsKKyAgICAgICAgTFlFUlJMT0coInB0aHJlYWQgY2FuY2VsIHN1Y2Nlc3MsIGxwbSBkZWluaXQgc3VjY2Vzc1xuIik7CiAgICAgfQotICAgIHN5c3RlbSgiLi9ldGMvaW5pdC5kL2x5bnEtYXV0b3N1c3BlbmQuc2ggcmVzdGFydHMiKTsKLSAgICBpZihyZXQgIT0gMCkKKyAgICBlbHNlCiAgICAgewotICAgICAgICBMWUlORkxPRygicmVzdGFydCBzZXJ2aWNlIGZhaWwiKTsKKyAgICAgICAgTFlFUlJMT0coInB0aHJlYWQgY2FuY2VsIGZhaWwsIGxwbSBkZWluaXQgZmFpbFxuIik7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiByZXQ7CisKIH0KIAogCmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS11Y2kvbHlucV91Y2kuY29uZmlnIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtdWNpL2x5bnFfdWNpLmNvbmZpZwppbmRleCA2ZDQ2NjYxLi41NjliMjI0IDEwMDc1NQotLS0gYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS11Y2kvbHlucV91Y2kuY29uZmlnCisrKyBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXVjaS9seW5xX3VjaS5jb25maWcKQEAgLTMyLDUgKzMyLDUgQEAKICAgICAgICAgb3B0aW9uIHN0YXR1cyAnMCcNCiAgICAgICAgIA0KIGNvbmZpZyAgbHlucV9sZWRfcncgICdseW5xX2xlZCcNCi0gICAgICAgIG9wdGlvbiBseW5xX3N0YXR1c2xlZF9vbiAnMScNCi0gICAgICAgIG9wdGlvbiBseW5xX25ldGxlZF9vbiAnMScKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisgICAgICAgIG9wdGlvbiBseW5xX3N0YXR1c2xlZF9vbiAnMCcNCisgICAgICAgIG9wdGlvbiBseW5xX25ldGxlZF9vbiAnMCcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My96eGljX2NvZGUvenhpY19zb3VyY2UvbGludXgtNS4xMC9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvengyOV9nbWFjLmMgYi9jYXAvengyOTc1MjB2My96eGljX2NvZGUvenhpY19zb3VyY2UvbGludXgtNS4xMC9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvengyOV9nbWFjLmMKaW5kZXggN2JjM2VkMC4uNjUwYmU5NCAxMDA3NTUKLS0tIGEvY2FwL3p4Mjk3NTIwdjMvenhpY19jb2RlL3p4aWNfc291cmNlL2xpbnV4LTUuMTAvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL3p4MjlfZ21hYy5jCisrKyBiL2NhcC96eDI5NzUyMHYzL3p4aWNfY29kZS96eGljX3NvdXJjZS9saW51eC01LjEwL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS96eDI5X2dtYWMuYwpAQCAtMTQ0Nyw3ICsxNDQ3LDcgQEAKICAgICANCiAgICAgcHJ2LT5ncGlvX3Bvd2VyWzBdID0gb2ZfZ2V0X2dwaW9fZmxhZ3MocGRldi0+ZGV2Lm9mX25vZGUsIDAsICZmbGFncyk7DQogCXJldCA9IGdwaW9fcmVxdWVzdChwcnYtPmdwaW9fcG93ZXJbMF0sICJnbWFjX3Bvd2VyIik7IC8qIGdwaW8gODMvMTI0ICovDQotCWdwaW9fZGlyZWN0aW9uX291dHB1dChwcnYtPmdwaW9fcG93ZXJbMF0sIDEpOw0KKwkvL2dwaW9fZGlyZWN0aW9uX291dHB1dChwcnYtPmdwaW9fcG93ZXJbMF0sIDEpO2piLnFpIGFkZCBmb3IgZ21hYyBwb3dlciBvZmYgZGVmYXVsdGx5DQogCW1kZWxheSgxNSk7DQogI2lmZGVmIF9VU0VfVkVISUNMRV9EQ19SRUYNCiAJcHJ2LT5ncGlvX3Bvd2VyWzFdID0gb2ZfZ2V0X2dwaW9fZmxhZ3MocGRldi0+ZGV2Lm9mX25vZGUsIDEsICZmbGFncyk7DQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvenhpY19jb2RlL3p4aWNfc291cmNlL2xpbnV4LTUuMTAvZHJpdmVycy9zb2Mvc2MvcG93ZXJfNGxpbmUvaGFsX3hwMnhwLmMgYi9jYXAvengyOTc1MjB2My96eGljX2NvZGUvenhpY19zb3VyY2UvbGludXgtNS4xMC9kcml2ZXJzL3NvYy9zYy9wb3dlcl80bGluZS9oYWxfeHAyeHAuYwppbmRleCA1ZTE0YjdkLi43ZDc1ZWZjIDEwMDc1NQotLS0gYS9jYXAvengyOTc1MjB2My96eGljX2NvZGUvenhpY19zb3VyY2UvbGludXgtNS4xMC9kcml2ZXJzL3NvYy9zYy9wb3dlcl80bGluZS9oYWxfeHAyeHAuYworKysgYi9jYXAvengyOTc1MjB2My96eGljX2NvZGUvenhpY19zb3VyY2UvbGludXgtNS4xMC9kcml2ZXJzL3NvYy9zYy9wb3dlcl80bGluZS9oYWxfeHAyeHAuYwpAQCAtMzMzLDYgKzMzMyw4IEBACiAqDQogKiBPdGhlcnM6DQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLypqYi5xaSBhZGQgZm9yIGR0ciB1ZXZlbnQgb24gMjAyMzEyMTggc3RhcnQqLw0KIHN0YXRpYyBpbnQgeHAyeHBfd2tjcF90aHJlYWQodm9pZCAqcHRyKQ0KIHsNCiAJaW50IGNhbGxfc3RhdGUgPSAwOw0KQEAgLTM0MCwxMSArMzQyLDcgQEAKIAlpbnQgcmV0ID0gMDsNCiAJdW5zaWduZWQgbG9uZyBmbGFnczsNCiAJc3RydWN0IGhhbF94cDJ4cF9kZXYgKnhwMnhwX2RldiA9IChzdHJ1Y3QgaGFsX3hwMnhwX2RldiAqKXB0cjsNCi0jaWYgMA0KLQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gc2NoX3BhcmFtID0geyAuc2NoZWRfcHJpb3JpdHkgPSAxIH07DQotCXNjaF9wYXJhbS5zY2hlZF9wcmlvcml0eSA9IDQwOw0KLQlzY2hlZF9zZXRzY2hlZHVsZXIoY3VycmVudCwgU0NIRURfRklGTywgJnNjaF9wYXJhbSk7DQotI2VuZGlmDQorDQogCXdoaWxlKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpew0KIAkJcmV0ID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZ4cDJ4cF9kZXYtPndrX3NlbSk7DQogCQkNCkBAIC0zNTgsNDMgKzM1NiwzMiBAQAogCQkJfQ0KIAkJCQ0KIAkJfQ0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnhwMnhwX2Rldi0+d2tfbG9jaywgZmxhZ3MpOwkNCi0JCQlpZih4cDJ4cF9kZXYtPndha2Vfc3RhdGUpew0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnhwMnhwX2Rldi0+d2tfbG9jaywgZmxhZ3MpOw0KKwkJaWYoeHAyeHBfZGV2LT53YWtlX3N0YXRlKXsNCiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4cDJ4cF9kZXYtPndrX2xvY2ssIGZsYWdzKTsNCi0JCQkJLy9ub3cgd2FrZXVwIA0KIAkJCXhwMnhwX25vdGlmeV91cChXQUtFVVBfTk9USUZZKTsNCi0JCQkNCi0JCQl4cDJ4cF9kZXYtPndha2VfY250Kys7CQ0KLSNpZmRlZiBDT05GSUdfS0VSTkVMX0NPTlRST0xfV0FLRVVQCQkNCi0JCSAJeHAyeHBfd2FrZXVwX25vdGlmaWVyX2NhbGxfY2hhaW4oV0FLRVVQX05PVElGWSwgJmNhbGxfc3RhdGUpOw0KLQkJIAlpZihjYWxsX3N0YXRlID09IDApey8vY2hlY2sgZGV2aWNlIHdha2V1cCByZXN1bHQNCi0JCQkJeHAyeHBfU2V0U2xlZXBTdGF0ZShUUlVFKTsNCi0JCSAJfQ0KLSNlbmRpZgkJCQ0KKwkJCXhwMnhwX2Rldi0+d2FrZV9jbnQrKzsNCisjaWZkZWYgQ09ORklHX0tFUk5FTF9DT05UUk9MX1dBS0VVUA0KKwkJCXhwMnhwX3dha2V1cF9ub3RpZmllcl9jYWxsX2NoYWluKFdBS0VVUF9OT1RJRlksICZjYWxsX3N0YXRlKTsNCisjZW5kaWYNCiAJCX1lbHNlew0KLQkJCS8vbm93IHNsZWVwIA0KIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhwMnhwX2Rldi0+d2tfbG9jaywgZmxhZ3MpOw0KIAkJCXhwMnhwX25vdGlmeV91cChTTEVFUF9OT1RJRlkpOw0KIAkJCXhwMnhwX2Rldi0+c2xlZXBfY250Kys7DQotI2lmZGVmIENPTkZJR19LRVJORUxfQ09OVFJPTF9XQUtFVVAJCQ0KLQkJCXhwMnhwX1NldFNsZWVwU3RhdGUoRkFMU0UpOw0KKyNpZmRlZiBDT05GSUdfS0VSTkVMX0NPTlRST0xfV0FLRVVQDQogCQkgCXhwMnhwX3dha2V1cF9ub3RpZmllcl9jYWxsX2NoYWluKFNMRUVQX05PVElGWSwgJmNhbGxfc3RhdGUpOw0KLQkJIAlpZihjYWxsX3N0YXRlKXsvL2NoZWNrIGRldmljZSBzbGVlcCByZXN1bHQNCi0JCSAJLy90byBkbw0KLQkJIAl9DQotI2VuZGlmCQkNCisjZW5kaWYNCiAJCX0NCi0JCQkNCiANCiAJCWVuYWJsZV9pcnEoeHAyeHBfZGV2LT5laW50X2lycSk7DQogCQl4cDJ4cF9kZXYtPnhwMnhwX2lycV9zdGF0ZSA9IDE7DQotCQkvL3BtX3JlbGF4KHhwMnhwX2Rldi0+ZGV2KTsJCQkJDQotCQkNCisNCiAJfQ0KIAkNCiAJcmV0dXJuIDA7DQogfQ0KLQkNCisvKmpiLnFpIGFkZCBmb3IgZHRyIHVldmVudCBvbiAyMDIzMTIxOCBlbmQqLw0KKw0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBGdW5jdGlvbjoJQXBXYWtlQ3AgaW50DQogKiBEZXNjcmlwdGlvbjoJYXAyY3Agd2FrZSB1cCBpbnQgaXNyDQpAQCAtNDA3LDcgKzM5NCw3IEBACiAqDQogKiBPdGhlcnM6DQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLypqYi5xaSBhZGQgZm9yIGR0ciBvbiAyMDIzMTMwNCBzdGFydCovDQorLypqYi5xaSBhZGQgZm9yIGR0ciB1ZXZlbnQgb24gMjAyMzEyMTggc3RhcnQqLw0KIGlycXJldHVybl90IHhwMnhwX3drY3BfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwcml2KQ0KIHsNCiAJdW5zaWduZWQgbG9uZyBmbGFnczsNCkBAIC00MzYsMTAgKzQyMywxMiBAQAogCWlmKDEgPT0gZ3Bpb192YWx1ZSl7DQogICAgICAgICBpcnFfdHlwZSA9IElSUUZfVFJJR0dFUl9MT1c7DQogICAgICAgICBwcmludGsoImdwaW9fdmFsdWUgaXMgMSAsIHJlbGVhc2Ugd2FrZWxvY2tcbiIpOw0KKyAgICAgICAgeHAyeHBfZGV2LT53YWtlX3N0YXRlID0gMDsNCiAgICAgICAgIHBtX3JlbGF4KGdfeHAyeHAuZGV2KTsNCiAJfWVsc2V7DQogICAgICAgICBpcnFfdHlwZSA9IElSUUZfVFJJR0dFUl9ISUdIOw0KICAgICAgICAgcHJpbnRrKCJncGlvX3ZhbHVlIGlzIDAgLCBsb2NrIHdha2Vsb2NrXG4iKTsNCisgICAgICAgIHhwMnhwX2Rldi0+d2FrZV9zdGF0ZSA9IDE7DQogICAgICAgICBwbV9zdGF5X2F3YWtlKGdfeHAyeHAuZGV2KTsNCiAJfQ0KIA0KQEAgLTQ1MCw3ICs0MzksNyBAQAogCXVwKCZ4cDJ4cF9kZXYtPndrX3NlbSk7DQogCXJldHVybiBJUlFfSEFORExFRDsNCiB9DQotLypqYi5xaSBhZGQgZm9yIGR0ciBvbiAyMDIzMTMwNCBlbmQqLw0KKy8qamIucWkgYWRkIGZvciBkdHIgdWV2ZW50IG9uIDIwMjMxMjE4IGVuZCovDQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIEZ1bmN0aW9uOg0KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3p4aWNfY29kZS96eGljX3NvdXJjZS96eGljX2FwcF9vcGVuL3BsYXRmb3JtL252LXJwYy1kYWVtb24vbWFpbi5jIGIvY2FwL3p4Mjk3NTIwdjMvenhpY19jb2RlL3p4aWNfc291cmNlL3p4aWNfYXBwX29wZW4vcGxhdGZvcm0vbnYtcnBjLWRhZW1vbi9tYWluLmMKaW5kZXggZWQ2MDJhMC4uNDUxYWJmZCAxMDA3NTUKLS0tIGEvY2FwL3p4Mjk3NTIwdjMvenhpY19jb2RlL3p4aWNfc291cmNlL3p4aWNfYXBwX29wZW4vcGxhdGZvcm0vbnYtcnBjLWRhZW1vbi9tYWluLmMKKysrIGIvY2FwL3p4Mjk3NTIwdjMvenhpY19jb2RlL3p4aWNfc291cmNlL3p4aWNfYXBwX29wZW4vcGxhdGZvcm0vbnYtcnBjLWRhZW1vbi9tYWluLmMKQEAgLTY4LDcgKzY4LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGxvbmcgZ19waWQ7CiBzdGF0aWMgbG9uZyBnX2FwX3BpZF9iYWNrdXA7Ci1zdGF0aWMgaW50ICBudl9kZWJ1Z19zd2l0Y2ggPSBmYWxzZTsKK3N0YXRpYyBpbnQgIG52X2RlYnVnX3N3aXRjaCA9IHRydWU7Ly9qYi5xaSBhZGQgZm9yIG52IHdha2V1cCBkZWJ1ZyBvbiAyMDIzMTIyMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIL7Wsr+6r8r9yrXP1iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICBtc2dTbmQubXNnVHlwZSA9IE1TR19UWVBFX05WOwogICAgIG1zZ1NuZC5waWQgICAgID0gZ19waWQ7CiAgICAgLy9wcmludGYoImFwbnZfY2FwIG1zZ3NuZCB0byBudnNlcnZlciBwaWQ6JWRcbiIsIG1zZ1NuZC5waWQpOwotICAgIGlmIChzdHJjbXAobXNnU25kLmtleSwgInpjYXRfbW9kZSIpKQorICAgIC8vaWYgKHN0cmNtcChtc2dTbmQua2V5LCAiemNhdF9tb2RlIikpIGpiLnFpIGFkZCBmb3IgbnYgd2FrZXVwIGRlYnVnIG9uIDIwMjMxMjIwCiAgICAgICAgIHByaW50X252X2luZm8oJm1zZ1NuZCk7CiAKIHJldHJ5MToKZGlmZiAtLWdpdCBhL3VwZGF0ZV92ZXJzaW9uLnNoIGIvdXBkYXRlX3ZlcnNpb24uc2gKaW5kZXggMzdhZWEwNC4uMDg4MmZmMiAxMDA3NTUKLS0tIGEvdXBkYXRlX3ZlcnNpb24uc2gKKysrIGIvdXBkYXRlX3ZlcnNpb24uc2gKQEAgLTEsOCArMSw4IEBACiAjIS9iaW4vYmFzaAogI2V4cG9ydCBMWU5RX1ZFUlNJT049IlQxMDZfbHlucV92ZXJzaW9uX2FwX2J1aWxkX3NoIgotTFlOUV9BUF9WRVJTSU9OPSJUMTA2Q04tWlMwMy5WMi4wMS4wMS4wMlA1MlUwMi5BUC4wOS4wNyIKLUxZTlFfQ0FQX0lOU0lERV9WRVJTSU9OPSJDQVAuMDkuMDciCi1MWU5RX0NBUF9WRVJTSU9OPSJDQVAuMDkuMDciCitMWU5RX0FQX1ZFUlNJT049IlQxMDZDTi1aUzAzLlYyLjAxLjAxLjAyUDUyVTAyLkFQLjA5LjEwIgorTFlOUV9DQVBfSU5TSURFX1ZFUlNJT049IkNBUC4wOS4xMCIKK0xZTlFfQ0FQX1ZFUlNJT049IkNBUC4wOS4xMCIKIENPTU1JVF9JRD0iJChnaXQgcmV2LXBhcnNlIEhFQUQpIgogCiBMWU5RX1NXX0lOU0lERV9WRVJTSU9OPSJMWU5RX0NPTkZJR19WRVJTSU9OID0gXCIke0xZTlFfQVBfVkVSU0lPTn1fJHtMWU5RX0NBUF9JTlNJREVfVkVSU0lPTn1cIiIK