ZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggYjZjOWQzZS4uZjYzMWIyMCAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSw1MSBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4yLjUiIGRhdGU9IjA0LjEwLjIwMDUiPgorCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivE1cLMydLVwN3FxSDazsHexc7JxSDQxdLFzcXOzs/KIM3PxNXM0SBuZ3hfaHR0cF9nZW9fbW9kdWxlINTF0MXS2Aor19nEwaPUINDSxcTV0NLF1sTFzsnFIMkgydrNxc7Ro9Qg09TB0s/FINrOwd7FzsnFLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIGR1cGxpY2F0ZSB2YWx1ZSBvZiB0aGUgbmd4X2h0dHBfZ2VvX21vZHVsZSB2YXJpYWJsZSBub3cgY2F1c2VzCit0aGUgd2FybmluZyBhbmQgY2hhbmdlcyBvbGQgdmFsdWUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK83PxNXM2CBuZ3hfaHR0cF9zc2lfbW9kdWxlINDPxMTF0tbJ18HF1CDLz83BzsTVIHNldC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBuZ3hfaHR0cF9zc2lfbW9kdWxlIHN1cHBvcnRzIHRoZSAic2V0IiBjb21tYW5kLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivNz8TVzNggbmd4X2h0dHBfc3NpX21vZHVsZSDQz8TExdLWydfBxdQg0MHSwc3F1NIgZmlsZSDXIMvPzcHOxMUgaW5jbHVkZS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBuZ3hfaHR0cF9zc2lfbW9kdWxlIHN1cHBvcnRzIHRoZSAiZmlsZSIgcGFyYW1ldGVyIGluIHRoZSAiaW5jbHVkZSIgY29tbWFuZC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorzc/E1czYIG5neF9odHRwX3NzaV9tb2R1bGUg0M/ExMXS1snXwcXUINDPxNPUwc7P18vVINrOwd7FzsnKINDF0sXNxc7O2cgKK9cg19nSwdbFzsnRyCDLz83BzsTZIGlmLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIG5neF9odHRwX3NzaV9tb2R1bGUgc3VwcG9ydHMgdGhlIHZhcmlhYmxlIHZhbHVlIHN1YnN0aXR1dGlvbnMgaW4KK2VweGlyZXNzaW9ucyBvZiB0aGUgImlmIiBjb21tYW5kLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMi40IiBkYXRlPSIwMy4xMC4yMDA1Ij4KIAogPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IDU2N2ExODguLmIzNmU5NDQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMi40IgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMi41IgogCiAjZGVmaW5lIE5HSU5YX1ZBUiAgICAgICAgICAiTkdJTlgiCiAjZGVmaW5lIE5HWF9PTERQSURfRVhUICAgICAiLm9sZGJpbiIKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKaW5kZXggZDVhNmI2OS4uZjU2ODk2NCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKQEAgLTUxNCw3ICs1MTQsNyBAQAogCiAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgdGFpbCwgc2l6ZW9mKHRhaWwpIC0gMSk7CiAKLSAgICBpZiAoci0+bWFpbiA9PSBOVUxMKSB7CisgICAgaWYgKHItPm1haW4gPT0gcikgewogICAgICAgICBiLT5sYXN0X2J1ZiA9IDE7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlcl9tb2R1bGUuYwppbmRleCBiZmEzNjI0Li44NWNhOTM0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2h1bmtlZF9maWx0ZXJfbW9kdWxlLmMKQEAgLTUwLDcgKzUwLDcgQEAKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX2NodW5rZWRfaGVhZGVyX2ZpbHRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7Ci0gICAgaWYgKHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9PSBOR1hfSFRUUF9OT1RfTU9ESUZJRUQgfHwgci0+bWFpbikgeworICAgIGlmIChyLT5oZWFkZXJzX291dC5zdGF0dXMgPT0gTkdYX0hUVFBfTk9UX01PRElGSUVEIHx8IHItPm1haW4gIT0gcikgewogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nZW9fbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2dlb19tb2R1bGUuYwppbmRleCAyMDMxYTRjLi5lZWRjMWY3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2dlb19tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2dlb19tb2R1bGUuYwpAQCAtMTgyLDExICsxODIsMTEgQEAKIG5neF9odHRwX2dlbyhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqZHVtbXksIHZvaWQgKmNvbmYpCiB7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgIHJjLCBuOwotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICBpOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICp2YWx1ZSwgZmlsZTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgaTsKICAgICBuZ3hfaW5ldF9jaWRyX3QgICAgICAgICAgICAgY2lkcmluOwogICAgIG5neF9odHRwX2dlb19jb25mX3QgICAgICAgICpnZW87Ci0gICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAgKnZhciwgKip2OworICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgICp2YXIsICpvbGQsICoqdjsKIAogICAgIGdlbyA9IGNmLT5jdHg7CiAKQEAgLTI3NCwxNyArMjc0LDMzIEBACiAgICAgICAgICp2ID0gdmFyOwogICAgIH0KIAotICAgIHJjID0gbmd4X3JhZGl4MzJ0cmVlX2luc2VydChnZW8tPnRyZWUsIGNpZHJpbi5hZGRyLCBjaWRyaW4ubWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnRwdHJfdCkgdmFyKTsKLSAgICBpZiAocmMgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICBmb3IgKGkgPSAyOyBpOyBpLS0pIHsKKyAgICAgICAgcmMgPSBuZ3hfcmFkaXgzMnRyZWVfaW5zZXJ0KGdlby0+dHJlZSwgY2lkcmluLmFkZHIsIGNpZHJpbi5tYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnRwdHJfdCkgdmFyKTsKKyAgICAgICAgaWYgKHJjID09IE5HWF9PSykgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX09LOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJjID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgLyogcmMgPT0gTkdYX0JVU1kgKi8KKworICAgICAgICBvbGQgID0gKG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKikKKyAgICAgICAgICAgICAgICAgICAgbmd4X3JhZGl4MzJ0cmVlX2ZpbmQoZ2VvLT50cmVlLCBjaWRyaW4uYWRkciAmIGNpZHJpbi5tYXNrKTsKKworICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19XQVJOLCBjZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdXBsaWNhdGUgcGFyYW1ldGVyIFwiJVZcIiwgdmFsdWU6IFwiJVZcIiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9sZCB2YWx1ZTogXCIlVlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZVswXSwgJnZhci0+dGV4dCwgJm9sZC0+dGV4dCk7CisKKyAgICAgICAgcmMgPSBuZ3hfcmFkaXgzMnRyZWVfZGVsZXRlKGdlby0+dHJlZSwgY2lkcmluLmFkZHIsIGNpZHJpbi5tYXNrKTsKKworICAgICAgICBpZiAocmMgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAocmMgPT0gTkdYX0JVU1kpIHsKLSAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLCAiZHVwbGljYXRlIHBhcmFtZXRlciBcIiVWXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlWzBdKTsKLSAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwotICAgIH0KLQotICAgIHJldHVybiBOR1hfQ09ORl9PSzsKKyAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlcl9tb2R1bGUuYwppbmRleCAwMTJlYTQ1Li45MjNkZDE3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXJfbW9kdWxlLmMKQEAgLTI4MCw3ICsyODAsNyBAQAogICAgICAgICAgICAgJiYgci0+aGVhZGVyc19vdXQuc3RhdHVzICE9IE5HWF9IVFRQX0ZPUkJJRERFTgogICAgICAgICAgICAgJiYgci0+aGVhZGVyc19vdXQuc3RhdHVzICE9IE5HWF9IVFRQX05PVF9GT1VORCkKICAgICAgICAgfHwgci0+aGVhZGVyX29ubHkKLSAgICAgICAgfHwgci0+bWFpbgorICAgICAgICB8fCByLT5tYWluICE9IHIKICAgICAgICAgfHwgci0+aHR0cF92ZXJzaW9uIDwgY29uZi0+aHR0cF92ZXJzaW9uCiAgICAgICAgIHx8IHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5sZW4gPT0gMAogICAgICAgICB8fCAoci0+aGVhZGVyc19vdXQuY29udGVudF9lbmNvZGluZwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaGVhZGVyc19maWx0ZXJfbW9kdWxlLmMKaW5kZXggNDNjYjVjOC4uMDg1NTk5MCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2hlYWRlcnNfZmlsdGVyX21vZHVsZS5jCkBAIC04NCw3ICs4NCw3IEBACiAKICAgICBpZiAoKHItPmhlYWRlcnNfb3V0LnN0YXR1cyAhPSBOR1hfSFRUUF9PSwogICAgICAgICAgJiYgci0+aGVhZGVyc19vdXQuc3RhdHVzICE9IE5HWF9IVFRQX05PVF9NT0RJRklFRCkKLSAgICAgICAgfHwgci0+bWFpbikKKyAgICAgICAgfHwgci0+bWFpbiAhPSByKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX25vdF9tb2RpZmllZF9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX25vdF9tb2RpZmllZF9maWx0ZXJfbW9kdWxlLmMKaW5kZXggNjcxMmE5MS4uMWUyZGI2MiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9ub3RfbW9kaWZpZWRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbm90X21vZGlmaWVkX2ZpbHRlcl9tb2R1bGUuYwpAQCAtNTIsNyArNTIsNyBAQAogICAgIHRpbWVfdCAgaW1zOwogCiAgICAgaWYgKHItPmhlYWRlcnNfb3V0LnN0YXR1cyAhPSBOR1hfSFRUUF9PSwotICAgICAgICB8fCByLT5tYWluCisgICAgICAgIHx8IHItPm1haW4gIT0gcgogICAgICAgICB8fCByLT5oZWFkZXJzX2luLmlmX21vZGlmaWVkX3NpbmNlID09IE5VTEwKICAgICAgICAgfHwgci0+aGVhZGVyc19vdXQubGFzdF9tb2RpZmllZF90aW1lID09IC0xKQogICAgIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmFuZ2VfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yYW5nZV9maWx0ZXJfbW9kdWxlLmMKaW5kZXggYzYyNjQ5NS4uYzhiMzBiOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yYW5nZV9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yYW5nZV9maWx0ZXJfbW9kdWxlLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCiAgICAgaWYgKHItPmh0dHBfdmVyc2lvbiA8IE5HWF9IVFRQX1ZFUlNJT05fMTAKICAgICAgICAgfHwgci0+aGVhZGVyc19vdXQuc3RhdHVzICE9IE5HWF9IVFRQX09LCi0gICAgICAgIHx8IHItPm1haW4KKyAgICAgICAgfHwgci0+bWFpbiAhPSByCiAgICAgICAgIHx8IHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24gPT0gLTEKICAgICAgICAgfHwgIXItPmZpbHRlcl9hbGxvd19yYW5nZXMpCiAgICAgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCmluZGV4IDg4NWQyOTguLmFjYmFlMjkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMKQEAgLTgsMTUgKzgsMTggQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogI2luY2x1ZGUgPG5neF9odHRwLmg+CiAKLSNkZWZpbmUgTkdYX0hUVFBfU1NJX01BWF9QQVJBTVMgICAxNgorI2RlZmluZSBOR1hfSFRUUF9TU0lfTUFYX1BBUkFNUyAgICAgMTYKIAotI2RlZmluZSBOR1hfSFRUUF9TU0lfQ09NTUFORF9MRU4gIDMxCi0jZGVmaW5lIE5HWF9IVFRQX1NTSV9QQVJBTV9MRU4gICAgMzEKLSNkZWZpbmUgTkdYX0hUVFBfU1NJX1BBUkFNU19OICAgICA0CisjZGVmaW5lIE5HWF9IVFRQX1NTSV9DT01NQU5EX0xFTiAgICAzMQorI2RlZmluZSBOR1hfSFRUUF9TU0lfUEFSQU1fTEVOICAgICAgMzEKKyNkZWZpbmUgTkdYX0hUVFBfU1NJX1BBUkFNU19OICAgICAgIDQKIAotI2RlZmluZSBOR1hfSFRUUF9TU0lfRVJST1IgICAgICAgIDEKKyNkZWZpbmUgTkdYX0hUVFBfU1NJX0VSUk9SICAgICAgICAgIDEKIAotI2RlZmluZSBOR1hfSFRUUF9TU0lfREFURV9MRU4gICAgIDIwNDgKKyNkZWZpbmUgTkdYX0hUVFBfU1NJX0RBVEVfTEVOICAgICAgIDIwNDgKKworCisjZGVmaW5lIE5HWF9IVFRQX1NTSV9BRERfUFJFRklYICAgICAxCiAKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMzIsNiArMzUsMTIgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCB7CisgICAgbmd4X3N0cl90ICAgICAgICAgIG5hbWU7CisgICAgbmd4X3N0cl90ICAgICAgICAgIHZhbHVlOworfSBuZ3hfaHR0cF9zc2lfdmFyX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgewogICAgIG5neF9idWZfdCAgICAgICAgICpidWY7CiAKICAgICB1X2NoYXIgICAgICAgICAgICAqcG9zOwpAQCAtNTYsNiArNjUsOCBAQAogCiAgICAgc2l6ZV90ICAgICAgICAgICAgIHZhbHVlX2xlbjsKIAorICAgIG5neF9hcnJheV90ICAgICAgICB2YXJpYWJsZXM7CisKICAgICBuZ3hfdWludF90ICAgICAgICAgb3V0cHV0OyAgICAgICAgLyogdW5zaWduZWQgIG91dHB1dDoxOyAqLwogCiAgICAgbmd4X3N0cl90ICAgICAgICAgIHRpbWVmbXQ7CkBAIC0xMTMsMTIgKzEyNCwxOCBAQAogICAgIG5neF9odHRwX3NzaV9jdHhfdCAqY3R4KTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfc3NpX3BhcnNlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfaHR0cF9zc2lfY3R4X3QgKmN0eCk7CitzdGF0aWMgbmd4X3N0cl90ICpuZ3hfaHR0cF9zc2lfZ2V0X3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICBuZ3hfc3RyX3QgKm5hbWUpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9zc2lfZXZhbHVhdGVfc3RyaW5nKG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICBuZ3hfaHR0cF9zc2lfY3R4X3QgKmN0eCwgbmd4X3N0cl90ICp0ZXh0LCBuZ3hfdWludF90IGZsYWdzKTsKIAorc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9zc2lfaW5jbHVkZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X2h0dHBfc3NpX2N0eF90ICpjdHgsIG5neF9zdHJfdCAqKnBhcmFtcyk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3NzaV9lY2hvKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfaHR0cF9zc2lfY3R4X3QgKmN0eCwgbmd4X3N0cl90ICoqcGFyYW1zKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfc3NpX2NvbmZpZyhuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X2h0dHBfc3NpX2N0eF90ICpjdHgsIG5neF9zdHJfdCAqKnBhcmFtcyk7Ci1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3NzaV9pbmNsdWRlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfc3NpX3NldChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X2h0dHBfc3NpX2N0eF90ICpjdHgsIG5neF9zdHJfdCAqKnBhcmFtcyk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3NzaV9pZihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X2h0dHBfc3NpX2N0eF90ICpjdHgsIG5neF9zdHJfdCAqKnBhcmFtcyk7CkBAIC0yMjEsNiArMjM4LDggQEAKIAogc3RhdGljIG5neF9zdHJfdCBuZ3hfaHR0cF9zc2lfbm9uZSA9IG5neF9zdHJpbmcoIihub25lKSIpOwogCisjZGVmaW5lICBOR1hfSFRUUF9TU0lfSU5DTFVERV9WSVJUVUFMICAwCisjZGVmaW5lICBOR1hfSFRUUF9TU0lfSU5DTFVERV9GSUxFICAgICAxCiAKICNkZWZpbmUgIE5HWF9IVFRQX1NTSV9FQ0hPX1ZBUiAgICAgICAgIDAKICNkZWZpbmUgIE5HWF9IVFRQX1NTSV9FQ0hPX0RFRkFVTFQgICAgIDEKQEAgLTIyOCwyNiArMjQ3LDI1IEBACiAjZGVmaW5lICBOR1hfSFRUUF9TU0lfQ09ORklHX0VSUk1TRyAgICAwCiAjZGVmaW5lICBOR1hfSFRUUF9TU0lfQ09ORklHX1RJTUVGTVQgICAxCiAKLSNkZWZpbmUgIE5HWF9IVFRQX1NTSV9JTkNMVURFX1ZJUlRVQUwgIDAKLSNkZWZpbmUgIE5HWF9IVFRQX1NTSV9JTkNMVURFX0ZJTEUgICAgIDEKKyNkZWZpbmUgIE5HWF9IVFRQX1NTSV9TRVRfVkFSICAgICAgICAgIDAKKyNkZWZpbmUgIE5HWF9IVFRQX1NTSV9TRVRfVkFMVUUgICAgICAgIDEKIAogI2RlZmluZSAgTkdYX0hUVFBfU1NJX0lGX0VYUFIgICAgICAgICAgMAogCiAKK3N0YXRpYyBuZ3hfaHR0cF9zc2lfcGFyYW1fdCAgbmd4X2h0dHBfc3NpX2luY2x1ZGVfcGFyYW1zW10gPSB7CisgICAgeyBuZ3hfc3RyaW5nKCJ2aXJ0dWFsIiksIE5HWF9IVFRQX1NTSV9JTkNMVURFX1ZJUlRVQUwsIDAgfSwKKyAgICB7IG5neF9zdHJpbmcoImZpbGUiKSwgTkdYX0hUVFBfU1NJX0lOQ0xVREVfRklMRSwgMCB9LAorICAgIHsgbmd4X251bGxfc3RyaW5nLCAwLCAwIH0KK307CisKKwogc3RhdGljIG5neF9odHRwX3NzaV9wYXJhbV90ICBuZ3hfaHR0cF9zc2lfZWNob19wYXJhbXNbXSA9IHsKICAgICB7IG5neF9zdHJpbmcoInZhciIpLCBOR1hfSFRUUF9TU0lfRUNIT19WQVIsIDEgfSwKICAgICB7IG5neF9zdHJpbmcoImRlZmF1bHQiKSwgTkdYX0hUVFBfU1NJX0VDSE9fREVGQVVMVCwgMCB9LAogICAgIHsgbmd4X251bGxfc3RyaW5nLCAwLCAwIH0KIH07CiAKLXN0YXRpYyBuZ3hfaHR0cF9zc2lfcGFyYW1fdCAgbmd4X2h0dHBfc3NpX2luY2x1ZGVfcGFyYW1zW10gPSB7Ci0gICAgeyBuZ3hfc3RyaW5nKCJ2aXJ0dWFsIiksIE5HWF9IVFRQX1NTSV9JTkNMVURFX1ZJUlRVQUwsIDAgfSwKLSNpZiAwCi0gICAgeyBuZ3hfc3RyaW5nKCJmaWxlIiksIE5HWF9IVFRQX1NTSV9JTkNMVURFX0ZJTEUsIDAgfSwKLSNlbmRpZgotICAgIHsgbmd4X251bGxfc3RyaW5nLCAwLCAwIH0KLX07Ci0KIAogc3RhdGljIG5neF9odHRwX3NzaV9wYXJhbV90ICBuZ3hfaHR0cF9zc2lfY29uZmlnX3BhcmFtc1tdID0gewogICAgIHsgbmd4X3N0cmluZygiZXJybXNnIiksIE5HWF9IVFRQX1NTSV9DT05GSUdfRVJSTVNHLCAwIH0sCkBAIC0yNTYsOCArMjc0LDE1IEBACiB9OwogCiAKK3N0YXRpYyBuZ3hfaHR0cF9zc2lfcGFyYW1fdCAgbmd4X2h0dHBfc3NpX3NldF9wYXJhbXNbXSA9IHsKKyAgICB7IG5neF9zdHJpbmcoInZhciIpLCBOR1hfSFRUUF9TU0lfU0VUX1ZBUiwgMSB9LAorICAgIHsgbmd4X3N0cmluZygidmFsdWUiKSwgTkdYX0hUVFBfU1NJX1NFVF9WQUxVRSwgMSB9LAorICAgIHsgbmd4X251bGxfc3RyaW5nLCAwLCAwIH0KK307CisKKwogc3RhdGljIG5neF9odHRwX3NzaV9wYXJhbV90ICBuZ3hfaHR0cF9zc2lfaWZfcGFyYW1zW10gPSB7Ci0gICAgeyBuZ3hfc3RyaW5nKCJleHByIiksIE5HWF9IVFRQX1NTSV9JRl9FWFBSLCAwIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJleHByIiksIE5HWF9IVFRQX1NTSV9JRl9FWFBSLCAxIH0sCiAgICAgeyBuZ3hfbnVsbF9zdHJpbmcsIDAsIDAgfQogfTsKIApAQCAtMjY4LDExICsyOTMsMTIgQEAKIAogCiBzdGF0aWMgbmd4X2h0dHBfc3NpX2NvbW1hbmRfdCAgbmd4X2h0dHBfc3NpX2NvbW1hbmRzW10gPSB7CisgICAgeyBuZ3hfc3RyaW5nKCJpbmNsdWRlIiksIG5neF9odHRwX3NzaV9pbmNsdWRlLAorICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9zc2lfaW5jbHVkZV9wYXJhbXMsIDAsIDEgfSwKICAgICB7IG5neF9zdHJpbmcoImVjaG8iKSwgbmd4X2h0dHBfc3NpX2VjaG8sIG5neF9odHRwX3NzaV9lY2hvX3BhcmFtcywgMCwgMCB9LAogICAgIHsgbmd4X3N0cmluZygiY29uZmlnIiksIG5neF9odHRwX3NzaV9jb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3NzaV9jb25maWdfcGFyYW1zLCAwLCAwIH0sCi0gICAgeyBuZ3hfc3RyaW5nKCJpbmNsdWRlIiksIG5neF9odHRwX3NzaV9pbmNsdWRlLAotICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9zc2lfaW5jbHVkZV9wYXJhbXMsIDAsIDEgfSwKKyAgICB7IG5neF9zdHJpbmcoInNldCIpLCBuZ3hfaHR0cF9zc2lfc2V0LCBuZ3hfaHR0cF9zc2lfc2V0X3BhcmFtcywgMCwgMCB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJpZiIpLCBuZ3hfaHR0cF9zc2lfaWYsIG5neF9odHRwX3NzaV9pZl9wYXJhbXMsIDAsIDAgfSwKICAgICB7IG5neF9zdHJpbmcoImVsc2UiKSwgbmd4X2h0dHBfc3NpX2Vsc2UsIG5neF9odHRwX3NzaV9ub19wYXJhbXMsIDEsIDAgfSwKQEAgLTM1NSw3ICszODEsNyBAQAogCiAgICAgci0+ZmlsdGVyX25lZWRfaW5fbWVtb3J5ID0gMTsKIAotICAgIGlmIChyLT5tYWluID09IE5VTEwpIHsKKyAgICBpZiAoci0+bWFpbiA9PSByKSB7CiAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24gPSAtMTsKICAgICAgICAgaWYgKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoKSB7CiAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aC0+aGFzaCA9IDA7CkBAIC0xMzAxLDYgKzEzMjcsMjk2IEBACiB9CiAKIAorc3RhdGljIG5neF9zdHJfdCAqCituZ3hfaHR0cF9zc2lfZ2V0X3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X3N0cl90ICpuYW1lKQoreworICAgIG5neF91aW50X3QgICAgICAgICAgIGk7CisgICAgbmd4X2h0dHBfc3NpX3Zhcl90ICAqdmFyOworICAgIG5neF9odHRwX3NzaV9jdHhfdCAgKmN0eDsKKworICAgIGN0eCA9IG5neF9odHRwX2dldF9tb2R1bGVfY3R4KHItPm1haW4sIG5neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlKTsKKworICAgIHZhciA9IGN0eC0+dmFyaWFibGVzLmVsdHM7CisgICAgZm9yIChpID0gMDsgaSA8IGN0eC0+dmFyaWFibGVzLm5lbHRzOyBpKyspIHsKKyAgICAgICAgaWYgKG5hbWUtPmxlbiAhPSB2YXJbaV0ubmFtZS5sZW4pIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5neF9zdHJuY2FzZWNtcChuYW1lLT5kYXRhLCB2YXJbaV0ubmFtZS5kYXRhLCBuYW1lLT5sZW4pID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAmdmFyW2ldLnZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfc3NpX2V2YWx1YXRlX3N0cmluZyhuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9odHRwX3NzaV9jdHhfdCAqY3R4LAorICAgIG5neF9zdHJfdCAqdGV4dCwgbmd4X3VpbnRfdCBmbGFncykKK3sKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgY2gsICpwLCAqKnZhbHVlLCAqZGF0YTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAqc2l6ZSwgbGVuLCBwcmVmaXg7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgIHZhciwgcGFydCwgKnZhbDsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgaSwgaiwgbiwgYnJhY2tldDsKKyAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgbGVuZ3RocywgdmFsdWVzOworICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgICp2djsKKworICAgIG4gPSBuZ3hfaHR0cF9zY3JpcHRfdmFyaWFibGVzX2NvdW50KHRleHQpOworCisgICAgaWYgKG4gPT0gMCkgeworCisgICAgICAgIGlmICghKGZsYWdzICYgTkdYX0hUVFBfU1NJX0FERF9QUkVGSVgpKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX09LOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRleHQtPmRhdGFbMF0gIT0gJy8nKSB7CisgICAgICAgICAgICBmb3IgKHByZWZpeCA9IHItPnVyaS5sZW47IHByZWZpeDsgcHJlZml4LS0pIHsKKyAgICAgICAgICAgICAgICBpZiAoci0+dXJpLmRhdGFbcHJlZml4IC0gMV0gPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHByZWZpeCkgeworICAgICAgICAgICAgICAgIGxlbiA9IHByZWZpeCArIHRleHQtPmxlbjsKKworICAgICAgICAgICAgICAgIGRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIGxlbik7CisgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHAgPSBuZ3hfY3B5bWVtKGRhdGEsIHItPnVyaS5kYXRhLCBwcmVmaXgpOworICAgICAgICAgICAgICAgIG5neF9tZW1jcHkocCwgdGV4dC0+ZGF0YSwgdGV4dC0+bGVuKTsKKworICAgICAgICAgICAgICAgIHRleHQtPmxlbiA9IGxlbjsKKyAgICAgICAgICAgICAgICB0ZXh0LT5kYXRhID0gZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgaWYgKG5neF9hcnJheV9pbml0KCZsZW5ndGhzLCByLT5wb29sLCA4LCBzaXplb2Yoc2l6ZV90ICopKSAhPSBOR1hfT0spIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBpZiAobmd4X2FycmF5X2luaXQoJnZhbHVlcywgci0+cG9vbCwgOCwgc2l6ZW9mKHVfY2hhciAqKSkgIT0gTkdYX09LKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgbGVuID0gMDsKKyAgICBpID0gMDsKKworICAgIHdoaWxlIChpIDwgdGV4dC0+bGVuKSB7CisKKyAgICAgICAgaWYgKHRleHQtPmRhdGFbaV0gPT0gJyQnKSB7CisKKyAgICAgICAgICAgIHZhci5sZW4gPSAwOworCisgICAgICAgICAgICBpZiAoKytpID09IHRleHQtPmxlbikgeworICAgICAgICAgICAgICAgIGdvdG8gaW52YWxpZF92YXJpYWJsZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRleHQtPmRhdGFbaV0gPT0gJ3snKSB7CisgICAgICAgICAgICAgICAgYnJhY2tldCA9IDE7CisKKyAgICAgICAgICAgICAgICBpZiAoKytpID09IHRleHQtPmxlbikgeworICAgICAgICAgICAgICAgICAgICBnb3RvIGludmFsaWRfdmFyaWFibGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyLmRhdGEgPSAmdGV4dC0+ZGF0YVtpXTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmFja2V0ID0gMDsKKyAgICAgICAgICAgICAgICB2YXIuZGF0YSA9ICZ0ZXh0LT5kYXRhW2ldOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKCAvKiB2b2lkICovIDsgaSA8IHRleHQtPmxlbjsgaSsrLCB2YXIubGVuKyspIHsKKyAgICAgICAgICAgICAgICBjaCA9IHRleHQtPmRhdGFbaV07CisKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ30nICYmIGJyYWNrZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICBicmFja2V0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKQorICAgICAgICAgICAgICAgICAgICB8fCAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykKKyAgICAgICAgICAgICAgICAgICAgfHwgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpCisgICAgICAgICAgICAgICAgICAgIHx8IGNoID09ICdfJykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYnJhY2tldCkgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgY2xvc2luZyBicmFja2V0IGluIFwiJVZcIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFyaWFibGUgaXMgbWlzc2luZyIsICZ2YXIpOworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh2YXIubGVuID09IDApIHsgCisgICAgICAgICAgICAgICAgZ290byBpbnZhbGlkX3ZhcmlhYmxlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdmFyLmxlbjsgaisrKSB7CisgICAgICAgICAgICAgICAgdmFyLmRhdGFbal0gPSBuZ3hfdG9sb3dlcih2YXIuZGF0YVtqXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhbCA9IG5neF9odHRwX3NzaV9nZXRfdmFyaWFibGUociwgJnZhcik7CisKKyAgICAgICAgICAgIGlmICh2YWwgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHZ2ID0gbmd4X2h0dHBfZ2V0X3ZhcmlhYmxlKHIsICZ2YXIpOworCisgICAgICAgICAgICAgICAgaWYgKHZ2ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAodnYgPT0gTkdYX0hUVFBfVkFSX05PVF9GT1VORCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwYXJ0ID0gdnYtPnRleHQ7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFydCA9ICp2YWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcnQubGVuID0gMDsKKyAgICAgICAgICAgIHBhcnQuZGF0YSA9ICZ0ZXh0LT5kYXRhW2ldOworCisgICAgICAgICAgICB3aGlsZSAoaSA8IHRleHQtPmxlbiAmJiB0ZXh0LT5kYXRhW2ldICE9ICckJykgeworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICBwYXJ0LmxlbisrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbGVuICs9IHBhcnQubGVuOworCisgICAgICAgIHNpemUgPSBuZ3hfYXJyYXlfcHVzaCgmbGVuZ3Rocyk7CisgICAgICAgIGlmIChzaXplID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICAqc2l6ZSA9IHBhcnQubGVuOworCisgICAgICAgIHZhbHVlID0gbmd4X2FycmF5X3B1c2goJnZhbHVlcyk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgKnZhbHVlID0gcGFydC5kYXRhOworICAgIH0KKworICAgIHByZWZpeCA9IDA7CisKKyAgICBzaXplID0gbGVuZ3Rocy5lbHRzOworICAgIHZhbHVlID0gdmFsdWVzLmVsdHM7CisKKyAgICBpZiAoZmxhZ3MgJiBOR1hfSFRUUF9TU0lfQUREX1BSRUZJWCkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLm5lbHRzOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChzaXplW2ldICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoKnZhbHVlW2ldICE9ICcvJykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHByZWZpeCA9IHItPnVyaS5sZW47IHByZWZpeDsgcHJlZml4LS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLT51cmkuZGF0YVtwcmVmaXggLSAxXSA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gKz0gcHJlZml4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwID0gbmd4X3BhbGxvYyhyLT5wb29sLCBsZW4pOworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICB0ZXh0LT5sZW4gPSBsZW47CisgICAgdGV4dC0+ZGF0YSA9IHA7CisKKyAgICBpZiAocHJlZml4KSB7CisgICAgICAgIHAgPSBuZ3hfY3B5bWVtKHAsIHItPnVyaS5kYXRhLCBwcmVmaXgpOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCB2YWx1ZXMubmVsdHM7IGkrKykgeworICAgICAgICBwID0gbmd4X2NweW1lbShwLCB2YWx1ZVtpXSwgc2l6ZVtpXSk7CisgICAgfQorCisgICAgcmV0dXJuIE5HWF9PSzsKKworaW52YWxpZF92YXJpYWJsZToKKworICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHZhcmlhYmxlIG5hbWUgaW4gXCIlVlwiIiwgdGV4dCk7CisKKyAgICByZXR1cm4gTkdYX0VSUk9SOworfQorCisKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX3NzaV9pbmNsdWRlKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2h0dHBfc3NpX2N0eF90ICpjdHgsCisgICAgbmd4X3N0cl90ICoqcGFyYW1zKQoreworICAgIG5neF9zdHJfdCAgICp1cmksICpmaWxlLCBhcmdzOworICAgIG5neF91aW50X3QgICBpOworCisgICAgdXJpID0gcGFyYW1zW05HWF9IVFRQX1NTSV9JTkNMVURFX1ZJUlRVQUxdOworICAgIGZpbGUgPSBwYXJhbXNbTkdYX0hUVFBfU1NJX0lOQ0xVREVfRklMRV07CisKKyAgICBpZiAodXJpICYmIGZpbGUpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICJpbmxjdXNpb24gbWF5IGJlIGVpdGhlciB2aXJ0dWFsPVwiJVZcIiBvciBmaWxlPVwiJVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgdXJpLCBmaWxlKTsKKyAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1NTSV9FUlJPUjsKKyAgICB9CisKKyAgICBpZiAodXJpID09IE5VTEwgJiYgZmlsZSA9PSBOVUxMKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAibm8gcGFyYW1ldGVyIGluIFwiaW5jbHVkZVwiIFNTSSBjb21tYW5kIik7CisgICAgICAgIHJldHVybiBOR1hfSFRUUF9TU0lfRVJST1I7CisgICAgfQorCisgICAgaWYgKHVyaSA9PSBOVUxMKSB7CisgICAgICAgIHVyaSA9IGZpbGU7CisgICAgfQorCisgICAgaWYgKG5neF9odHRwX3NzaV9ldmFsdWF0ZV9zdHJpbmcociwgY3R4LCB1cmksIE5HWF9IVFRQX1NTSV9BRERfUFJFRklYKQorICAgICAgICAhPSBOR1hfT0spCisgICAgeworICAgICAgICByZXR1cm4gTkdYX0hUVFBfU1NJX0VSUk9SOworICAgIH0KKworICAgIGFyZ3MubGVuID0gMDsKKyAgICBhcmdzLmRhdGEgPSBOVUxMOworCisgICAgaWYgKHBhcmFtc1tOR1hfSFRUUF9TU0lfSU5DTFVERV9WSVJUVUFMXSkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdXJpLT5sZW47IGkrKykgeworICAgICAgICAgICAgaWYgKHVyaS0+ZGF0YVtpXSA9PSAnPycpIHsKKyAgICAgICAgICAgICAgICBhcmdzLmxlbiA9IHVyaS0+bGVuIC0gaSAtIDE7CisgICAgICAgICAgICAgICAgYXJncy5kYXRhID0gJnVyaS0+ZGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAgdXJpLT5sZW4gLT0gYXJncy5sZW4gKyAxOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmd4X2h0dHBfc3VicmVxdWVzdChyLCB1cmksICZhcmdzKSAhPSBOR1hfT0spIHsKKyAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1NTSV9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX3NzaV9lY2hvKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2h0dHBfc3NpX2N0eF90ICpjdHgsCiAgICAgbmd4X3N0cl90ICoqcGFyYW1zKQpAQCAtMTMxMywxNyArMTYyOSwyNSBAQAogCiAgICAgdmFyID0gcGFyYW1zW05HWF9IVFRQX1NTSV9FQ0hPX1ZBUl07CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgdmFyLT5sZW47IGkrKykgewotICAgICAgICB2YXItPmRhdGFbaV0gPSBuZ3hfdG9sb3dlcih2YXItPmRhdGFbaV0pOworICAgIHZhbHVlID0gbmd4X2h0dHBfc3NpX2dldF92YXJpYWJsZShyLCB2YXIpOworCisgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHZhci0+bGVuOyBpKyspIHsKKyAgICAgICAgICAgIHZhci0+ZGF0YVtpXSA9IG5neF90b2xvd2VyKHZhci0+ZGF0YVtpXSk7CisgICAgICAgIH0KKworICAgICAgICB2diA9IG5neF9odHRwX2dldF92YXJpYWJsZShyLCB2YXIpOworCisgICAgICAgIGlmICh2diA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfU1NJX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZ2ICE9IE5HWF9IVFRQX1ZBUl9OT1RfRk9VTkQpIHsKKyAgICAgICAgICAgIHZhbHVlID0gJnZ2LT50ZXh0OworICAgICAgICB9CiAgICAgfQogCi0gICAgdnYgPSBuZ3hfaHR0cF9nZXRfdmFyaWFibGUociwgdmFyKTsKLQotICAgIGlmICh2diA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOR1hfSFRUUF9TU0lfRVJST1I7Ci0gICAgfQotCi0gICAgaWYgKHZ2ID09IE5HWF9IVFRQX1ZBUl9OT1RfRk9VTkQpIHsKKyAgICBpZiAodmFsdWUgPT0gTlVMTCkgewogICAgICAgICB2YWx1ZSA9IHBhcmFtc1tOR1hfSFRUUF9TU0lfRUNIT19ERUZBVUxUXTsKIAogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgewpAQCAtMTMzNCw4ICsxNjU4LDYgQEAKICAgICAgICAgfQogCiAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFsdWUgPSAmdnYtPnRleHQ7Ci0KICAgICAgICAgaWYgKHZhbHVlLT5sZW4gPT0gMCkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgfQpAQCAtMTM4NywyMTUgKzE3MDksNDkgQEAKIAogCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfaHR0cF9zc2lfaW5jbHVkZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9odHRwX3NzaV9jdHhfdCAqY3R4LAorbmd4X2h0dHBfc3NpX3NldChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9odHRwX3NzaV9jdHhfdCAqY3R4LAogICAgIG5neF9zdHJfdCAqKnBhcmFtcykKIHsKLSAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgY2gsICpwLCAqKnZhbHVlLCAqZGF0YTsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAqc2l6ZSwgbGVuLCBwcmVmaXg7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgIGksIGosIG4sIGJyYWNrZXQ7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgIHVyaSwgYXJncywgbmFtZTsKLSAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgbGVuZ3RocywgdmFsdWVzOwotICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgICp2djsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICpuYW1lLCAqdmFsdWUsICp2djsKKyAgICBuZ3hfaHR0cF9zc2lfdmFyX3QgICp2YXI7CisgICAgbmd4X2h0dHBfc3NpX2N0eF90ICAqbWN0eDsKIAotICAgIC8qIFRPRE86IGZpbGUsIHZpcnR1YWwgdnMgZmlsZSAqLworICAgIG1jdHggPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2N0eChyLT5tYWluLCBuZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZSk7CiAKLSAgICB1cmkgPSAqcGFyYW1zW05HWF9IVFRQX1NTSV9JTkNMVURFX1ZJUlRVQUxdOwotICAgIGFyZ3MubGVuID0gMDsKLSAgICBhcmdzLmRhdGEgPSBOVUxMOwotICAgIHByZWZpeCA9IDA7Ci0KLSAgICBuID0gbmd4X2h0dHBfc2NyaXB0X3ZhcmlhYmxlc19jb3VudCgmdXJpKTsKLQotICAgIGlmIChuID4gMCkgewotCi0gICAgICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmbGVuZ3Rocywgci0+cG9vbCwgOCwgc2l6ZW9mKHNpemVfdCAqKSkgIT0gTkdYX09LKSB7CisgICAgaWYgKG1jdHgtPnZhcmlhYmxlcy5lbHRzID09IE5VTEwpIHsKKyAgICAgICAgaWYgKG5neF9hcnJheV9pbml0KCZtY3R4LT52YXJpYWJsZXMsIHItPnBvb2wsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfc3NpX3Zhcl90KSkgIT0gTkdYX09LKQorICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfU1NJX0VSUk9SOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5neF9hcnJheV9pbml0KCZ2YWx1ZXMsIHItPnBvb2wsIDgsIHNpemVvZih1X2NoYXIgKikpICE9IE5HWF9PSykgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1NTSV9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGxlbiA9IDA7Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHVyaS5sZW47IC8qIHZvaWQgKi8gKSB7Ci0KLSAgICAgICAgICAgIG5hbWUubGVuID0gMDsKLQotICAgICAgICAgICAgaWYgKHVyaS5kYXRhW2ldID09ICckJykgewotCi0gICAgICAgICAgICAgICAgaWYgKCsraSA9PSB1cmkubGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gaW52YWxpZF92YXJpYWJsZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodXJpLmRhdGFbaV0gPT0gJ3snKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyYWNrZXQgPSAxOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICgrK2kgPT0gdXJpLmxlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBpbnZhbGlkX3ZhcmlhYmxlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbmFtZS5kYXRhID0gJnVyaS5kYXRhW2ldOwotCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYnJhY2tldCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUuZGF0YSA9ICZ1cmkuZGF0YVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCAvKiB2b2lkICovIDsgaSA8IHVyaS5sZW47IGkrKywgbmFtZS5sZW4rKykgewotICAgICAgICAgICAgICAgICAgICBjaCA9IHVyaS5kYXRhW2ldOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnfScgJiYgYnJhY2tldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2tldCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICgoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBjaCA9PSAnXycpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGJyYWNrZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgY2xvc2luZyBicmFja2V0IGluIFwiJVZcIiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhcmlhYmxlIGlzIG1pc3NpbmciLCAmbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9TU0lfRVJST1I7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG5hbWUubGVuID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZ290byBpbnZhbGlkX3ZhcmlhYmxlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuYW1lLmxlbjsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUuZGF0YVtqXSA9IG5neF90b2xvd2VyKG5hbWUuZGF0YVtqXSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdnYgPSBuZ3hfaHR0cF9nZXRfdmFyaWFibGUociwgJm5hbWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHZ2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1NTSV9FUlJPUjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodnYgPT0gTkdYX0hUVFBfVkFSX05PVF9GT1VORCkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuYW1lID0gdnYtPnRleHQ7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbmFtZS5kYXRhID0gJnVyaS5kYXRhW2ldOwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKGkgPCB1cmkubGVuICYmIHVyaS5kYXRhW2ldICE9ICckJykgewotICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUubGVuKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsZW4gKz0gbmFtZS5sZW47Ci0KLSAgICAgICAgICAgIHNpemUgPSBuZ3hfYXJyYXlfcHVzaCgmbGVuZ3Rocyk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1NTSV9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKnNpemUgPSBuYW1lLmxlbjsKLQotICAgICAgICAgICAgdmFsdWUgPSBuZ3hfYXJyYXlfcHVzaCgmdmFsdWVzKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1NTSV9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKnZhbHVlID0gbmFtZS5kYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZSA9IGxlbmd0aHMuZWx0czsKLSAgICAgICAgdmFsdWUgPSB2YWx1ZXMuZWx0czsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLm5lbHRzOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChzaXplW2ldICE9IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoKnZhbHVlW2ldICE9ICcvJykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHByZWZpeCA9IHItPnVyaS5sZW47IHByZWZpeDsgcHJlZml4LS0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLT51cmkuZGF0YVtwcmVmaXggLSAxXSA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gKz0gcHJlZml4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwID0gbmd4X3BhbGxvYyhyLT5wb29sLCBsZW4pOwotICAgICAgICBpZiAocCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfU1NJX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgdXJpLmxlbiA9IGxlbjsKLSAgICAgICAgdXJpLmRhdGEgPSBwOwotCi0gICAgICAgIGlmIChwcmVmaXgpIHsKLSAgICAgICAgICAgIHAgPSBuZ3hfY3B5bWVtKHAsIHItPnVyaS5kYXRhLCBwcmVmaXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHZhbHVlcy5uZWx0czsgaSsrKSB7Ci0gICAgICAgICAgICBwID0gbmd4X2NweW1lbShwLCB2YWx1ZVtpXSwgc2l6ZVtpXSk7Ci0gICAgICAgIH0KLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh1cmkuZGF0YVswXSAhPSAnLycpIHsKLSAgICAgICAgICAgIGZvciAocHJlZml4ID0gci0+dXJpLmxlbjsgcHJlZml4OyBwcmVmaXgtLSkgewotICAgICAgICAgICAgICAgIGlmIChyLT51cmkuZGF0YVtwcmVmaXggLSAxXSA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocHJlZml4KSB7Ci0gICAgICAgICAgICAgICAgbGVuID0gcHJlZml4ICsgdXJpLmxlbjsKLQotICAgICAgICAgICAgICAgIGRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIGxlbik7Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfU1NJX0VSUk9SOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHAgPSBuZ3hfY3B5bWVtKGRhdGEsIHItPnVyaS5kYXRhLCBwcmVmaXgpOwotICAgICAgICAgICAgICAgIG5neF9tZW1jcHkocCwgdXJpLmRhdGEsIHVyaS5sZW4pOwotCi0gICAgICAgICAgICAgICAgdXJpLmxlbiA9IGxlbjsKLSAgICAgICAgICAgICAgICB1cmkuZGF0YSA9IGRhdGE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgdXJpLmxlbjsgaSsrKSB7Ci0gICAgICAgIGlmICh1cmkuZGF0YVtpXSA9PSAnPycpIHsKLSAgICAgICAgICAgIGFyZ3MubGVuID0gdXJpLmxlbiAtIGkgLSAxOwotICAgICAgICAgICAgYXJncy5kYXRhID0gJnVyaS5kYXRhW2kgKyAxXTsKLSAgICAgICAgICAgIHVyaS5sZW4gLT0gYXJncy5sZW4gKyAxOworICAgIG5hbWUgPSBwYXJhbXNbTkdYX0hUVFBfU1NJX1NFVF9WQVJdOworICAgIHZhbHVlID0gcGFyYW1zW05HWF9IVFRQX1NTSV9TRVRfVkFMVUVdOwogCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChuZ3hfaHR0cF9zdWJyZXF1ZXN0KHIsICZ1cmksICZhcmdzKSAhPSBOR1hfT0spIHsKKyAgICBpZiAobmd4X2h0dHBfc3NpX2V2YWx1YXRlX3N0cmluZyhyLCBjdHgsIHZhbHVlLCAwKSAhPSBOR1hfT0spIHsKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1NTSV9FUlJPUjsKICAgICB9CiAKKyAgICB2diA9IG5neF9odHRwX3NzaV9nZXRfdmFyaWFibGUociwgbmFtZSk7CisKKyAgICBpZiAodnYpIHsKKyAgICAgICAgKnZ2ID0gKnZhbHVlOworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKworICAgIHZhciA9IG5neF9hcnJheV9wdXNoKCZtY3R4LT52YXJpYWJsZXMpOworICAgIGlmICh2YXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0hUVFBfU1NJX0VSUk9SOworICAgIH0KKworICAgIHZhci0+bmFtZSA9ICpuYW1lOworICAgIHZhci0+dmFsdWUgPSAqdmFsdWU7CisKKyAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAic2V0OiBcIiVWXCI9XCIlVlwiIiwgbmFtZSwgdmFsdWUpOworCiAgICAgcmV0dXJuIE5HWF9PSzsKLQotaW52YWxpZF92YXJpYWJsZToKLQotICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHZhcmlhYmxlIG5hbWUgaW4gXCIlVlwiIiwgJnVyaSk7Ci0KLSAgICByZXR1cm4gTkdYX0VSUk9SOwogfQogCiAKQEAgLTE2MDMsNTUgKzE3NTksNTUgQEAKIG5neF9odHRwX3NzaV9pZihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9odHRwX3NzaV9jdHhfdCAqY3R4LAogICAgIG5neF9zdHJfdCAqKnBhcmFtcykKIHsKLSAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAqcCwgKmxhc3Q7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgKmV4cHIsIHZhciwgbGVmdCwgcmlnaHQ7Ci0gICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgIHJjOwotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICBuZWdhdGl2ZSwgbm9yZWdleDsKLSAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICAqdnY7CisgICAgdV9jaGFyICAgICAgICpwLCAqbGFzdDsKKyAgICBuZ3hfc3RyX3QgICAgKmV4cHIsIGxlZnQsIHJpZ2h0OworICAgIG5neF9pbnRfdCAgICAgcmM7CisgICAgbmd4X3VpbnRfdCAgICBuZWdhdGl2ZSwgbm9yZWdleDsKICNpZiAoTkdYX1BDUkUpCi0gICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgIGVycjsKLSAgICBuZ3hfcmVnZXhfdCAgICAgICAgICAgICAgICAqcmVnZXg7Ci0gICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgIGVycnN0cltOR1hfTUFYX0NPTkZfRVJSU1RSXTsKKyAgICBuZ3hfc3RyX3QgICAgIGVycjsKKyAgICBuZ3hfcmVnZXhfdCAgKnJlZ2V4OworICAgIHVfY2hhciAgICAgICAgZXJyc3RyW05HWF9NQVhfQ09ORl9FUlJTVFJdOwogI2VuZGlmCiAKICAgICBleHByID0gcGFyYW1zW05HWF9IVFRQX1NTSV9JRl9FWFBSXTsKIAotICAgIGlmIChleHByLT5kYXRhWzBdICE9ICckJykgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFyaWFibGUgbmFtZSBpbiBcIiVWXCIiLCBleHByKTsKLSAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1NTSV9FUlJPUjsKLSAgICB9Ci0KLSAgICB2YXIuZGF0YSA9IGV4cHItPmRhdGEgKyAxOworICAgIGxlZnQuZGF0YSA9IGV4cHItPmRhdGE7CiAgICAgbGFzdCA9IGV4cHItPmRhdGEgKyBleHByLT5sZW47CiAKLSAgICBmb3IgKHAgPSB2YXIuZGF0YTsgcCA8IGxhc3Q7IHArKykgeworICAgIGZvciAocCA9IGxlZnQuZGF0YTsgcCA8IGxhc3Q7IHArKykgewogICAgICAgICBpZiAoKnAgPj0gJ0EnICYmICpwIDw9ICdaJykgewogICAgICAgICAgICAgKnAgfD0gMHgyMDsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCgqcCA+PSAnYScgJiYgKnAgPD0gJ3onKSB8fCAoKnAgPj0gJzAnICYmICpwIDw9ICc5JykgfHwgKnAgPT0gJ18nKSB7CisgICAgICAgIGlmICgoKnAgPj0gJ2EnICYmICpwIDw9ICd6JykKKyAgICAgICAgICAgICB8fCAoKnAgPj0gJzAnICYmICpwIDw9ICc5JykKKyAgICAgICAgICAgICB8fCAqcCA9PSAnJCcgfHwgKnAgPT0gJ3snIHx8ICpwID09ICd9JyB8fCAqcCA9PSAnXycpCisgICAgICAgIHsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgdmFyLmxlbiA9IHAgLSB2YXIuZGF0YTsKKyAgICBsZWZ0LmxlbiA9IHAgLSBsZWZ0LmRhdGE7CiAKICAgICB3aGlsZSAocCA8IGxhc3QgJiYgKnAgPT0gJyAnKSB7CiAgICAgICAgIHArKzsKICAgICB9CiAKLSAgICB2diA9IG5neF9odHRwX2dldF92YXJpYWJsZShyLCAmdmFyKTsKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAibGVmdDogXCIlVlwiIiwgJmxlZnQpOwogCi0gICAgaWYgKHZ2ID09IE5VTEwpIHsKKyAgICBpZiAobmd4X2h0dHBfc3NpX2V2YWx1YXRlX3N0cmluZyhyLCBjdHgsICZsZWZ0LCAwKSAhPSBOR1hfT0spIHsKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1NTSV9FUlJPUjsKICAgICB9CiAKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAiZXZhbHV0ZWQgbGVmdDogXCIlVlwiIiwgJmxlZnQpOworCiAgICAgaWYgKHAgPT0gbGFzdCkgewotICAgICAgICBpZiAodnYgIT0gTkdYX0hUVFBfVkFSX05PVF9GT1VORCAmJiB2di0+dGV4dC5sZW4gIT0gMCkgeworICAgICAgICBpZiAobGVmdC5sZW4pIHsKICAgICAgICAgICAgIGN0eC0+b3V0cHV0ID0gMTsKIAogICAgICAgICB9IGVsc2UgewpAQCAtMTY5MywxNiArMTg0OSwxNSBAQAogICAgIHJpZ2h0LmxlbiA9IGxhc3QgLSBwOwogICAgIHJpZ2h0LmRhdGEgPSBwOwogCi0gICAgaWYgKHZ2ID09IE5HWF9IVFRQX1ZBUl9OT1RfRk9VTkQpIHsKLSAgICAgICAgbGVmdC5sZW4gPSAwOwotICAgICAgICBsZWZ0LmRhdGEgPSAodV9jaGFyICopICIiOworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJyaWdodDogXCIlVlwiIiwgJnJpZ2h0KTsKIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxlZnQgPSB2di0+dGV4dDsKKyAgICBpZiAobmd4X2h0dHBfc3NpX2V2YWx1YXRlX3N0cmluZyhyLCBjdHgsICZyaWdodCwgMCkgIT0gTkdYX09LKSB7CisgICAgICAgIHJldHVybiBOR1hfSFRUUF9TU0lfRVJST1I7CiAgICAgfQogCi0gICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImxlZnQ6IFwiJVZcIiByaWdodDogXCIlVlwiIiwgJmxlZnQsICZyaWdodCk7CisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgImV2YWx1dGVkIHJpZ2h0OiBcIiVWXCIiLCAmcmlnaHQpOwogCiAgICAgaWYgKG5vcmVnZXgpIHsKICAgICAgICAgaWYgKGxlZnQubGVuICE9IHJpZ2h0LmxlbikgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXRpY19tb2R1bGUuYwppbmRleCBkODg4NGNhLi5hZmRiZjc4IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXRpY19tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXRpY19tb2R1bGUuYwpAQCAtMzM5LDcgKzMzOSw3IEBACiAKICAgICBiLT5pbl9maWxlID0gMTsKIAotICAgIGlmIChyLT5tYWluID09IE5VTEwpIHsKKyAgICBpZiAoci0+bWFpbiA9PSByKSB7CiAgICAgICAgIGItPmxhc3RfYnVmID0gMTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYwppbmRleCAxYWRkODk0Li4yMjFkMzNiIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZS5jCkBAIC0yMDYsNyArMjA2LDcgQEAKICAgICBuZ3hfaHR0cF91c2VyaWRfY3R4X3QgICAqY3R4OwogICAgIG5neF9odHRwX3VzZXJpZF9jb25mX3QgICpjb25mOwogCi0gICAgaWYgKHItPm1haW4pIHsKKyAgICBpZiAoci0+bWFpbiAhPSByKSB7CiAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwppbmRleCBlOWY1OTQyLi5jMDdlMzY3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKQEAgLTQ5OCw3ICs0OTgsNyBAQAogICAgICAgICAgICAgci0+cGhhc2UgPSBOR1hfSFRUUF9GSU5EX0NPTkZJR19QSEFTRTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChyLT5waGFzZSA9PSBOR1hfSFRUUF9BQ0NFU1NfUEhBU0UgJiYgci0+bWFpbikgeworICAgICAgICBpZiAoci0+cGhhc2UgPT0gTkdYX0hUVFBfQUNDRVNTX1BIQVNFICYmIHItPm1haW4gIT0gcikgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMTA5OSw3ICsxMDk5LDcgQEAKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKICAgICB9CiAKLSAgICBzci0+bWFpbiA9IHItPm1haW4gPyByLT5tYWluIDogcjsKKyAgICBzci0+bWFpbiA9IHItPm1haW47CiAgICAgc3ItPnBhcmVudCA9IHI7CiAgICAgc3ItPnJlYWRfZXZlbnRfaGFuZGxlciA9IG5neF9odHRwX3JlcXVlc3RfZW1wdHlfaGFuZGxlcjsKICAgICBzci0+d3JpdGVfZXZlbnRfaGFuZGxlciA9IG5neF9odHRwX3JlcXVlc3RfZW1wdHlfaGFuZGxlcjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyX21vZHVsZS5jCmluZGV4IDVhZjFjZjMuLmRiNDE3OTAgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAqaGVhZGVyOwogICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgKmNsY2Y7CiAKLSAgICBpZiAoci0+bWFpbikgeworICAgIGlmIChyLT5tYWluICE9IHIpIHsKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Bvc3Rwb25lX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL25neF9odHRwX3Bvc3Rwb25lX2ZpbHRlcl9tb2R1bGUuYwppbmRleCA3M2UzMWU2Li5lNzVlNzRmIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX21vZHVsZS5jCkBAIC01MSw3ICs1MSw2IEBACiB7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgIHJjOwogICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgICAgICpvdXQ7Ci0gICAgbmd4X2h0dHBfcmVxdWVzdF90ICAgICAgICAgICAgKm1yOwogICAgIG5neF9odHRwX3Bvc3Rwb25lZF9yZXF1ZXN0X3QgICpwciwgKipwcHI7CiAKICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKQEAgLTExMCwxNiArMTA5LDE0IEBACiAgICAgICAgIG91dCA9IGluOwogICAgIH0KIAotICAgIG1yID0gci0+bWFpbiA/IHItPm1haW4gOiByOwotCi0gICAgaWYgKG91dCA9PSBOVUxMICYmIG1yLT5vdXQgPT0gTlVMTCAmJiAhbXItPmNvbm5lY3Rpb24tPmJ1ZmZlcmVkKSB7CisgICAgaWYgKG91dCA9PSBOVUxMICYmIHItPm1haW4tPm91dCA9PSBOVUxMICYmICFyLT5tYWluLT5jb25uZWN0aW9uLT5idWZmZXJlZCkgewogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJodHRwIHBvc3Rwb25lIGZpbHRlciBvdXQgXCIlVlwiIiwgJnItPnVyaSk7CiAKLSAgICByYyA9IG5neF9odHRwX25leHRfZmlsdGVyKG1yLCBvdXQpOworICAgIHJjID0gbmd4X2h0dHBfbmV4dF9maWx0ZXIoci0+bWFpbiwgb3V0KTsKIAogICAgIGlmIChyYyA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgLyogTkdYX0VSUk9SIG1heSBiZSByZXR1cm5lZCBieSBhbnkgZmlsdGVyICovCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggMGU2NjEzYi4uNzA0ZDM3MyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtNDIzLDYgKzQyMyw4IEBACiAgICAgYy0+c2luZ2xlX2Nvbm5lY3Rpb24gPSAxOwogICAgIHItPmNvbm5lY3Rpb24gPSBjOwogCisgICAgci0+bWFpbiA9IHI7CisKICAgICByLT5zdGFydF90aW1lID0gbmd4X3RpbWUoKTsKIAogICAgIHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGhfbiA9IC0xOwpAQCAtMTY2Niw4ICsxNjY4LDcgQEAKICAgICAgICAgd2V2LT5kZWxheWVkID0gMDsKIAogICAgICAgICBpZiAoIXdldi0+cmVhZHkpIHsKLSAgICAgICAgICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHItPm1haW4gPyByLT5tYWluIDogciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKyAgICAgICAgICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHItPm1haW4sIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKICAgICAgICAgICAgIG5neF9hZGRfdGltZXIod2V2LCBjbGNmLT5zZW5kX3RpbWVvdXQpOwogCiAgICAgICAgICAgICBpZiAobmd4X2hhbmRsZV93cml0ZV9ldmVudCh3ZXYsIGNsY2YtPnNlbmRfbG93YXQpID09IE5HWF9FUlJPUikgewpAQCAtMTY4Myw4ICsxNjg0LDcgQEAKICAgICAgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgd2V2LT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCB3cml0ZXIgZGVsYXllZCIpOwogCi0gICAgICAgICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLT5tYWluID8gci0+bWFpbiA6IHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisgICAgICAgICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLT5tYWluLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKICAgICAgICAgICAgIGlmIChuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KHdldiwgY2xjZi0+c2VuZF9sb3dhdCkgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCAwKTsKQEAgLTE3MTIsOCArMTcxMiw3IEBACiAgICAgICAgICAgICAgICAgICAgImh0dHAgd3JpdGVyIG91dHB1dCBmaWx0ZXI6ICVkLCBcIiVWXCIiLCByYywgJnItPnVyaSk7CiAKICAgICBpZiAocmMgPT0gTkdYX0FHQUlOKSB7Ci0gICAgICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHItPm1haW4gPyByLT5tYWluIDogciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY29yZV9tb2R1bGUpOworICAgICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLT5tYWluLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAgICAgICAgIGlmICghd2V2LT5yZWFkeSAmJiAhd2V2LT5kZWxheWVkKSB7CiAgICAgICAgICAgICBuZ3hfYWRkX3RpbWVyKHdldiwgY2xjZi0+c2VuZF90aW1lb3V0KTsKICAgICAgICAgfQpAQCAtMTgwOSw3ICsxODA4LDcgQEAKICAgICBzc2l6ZV90ICAgICAgIHNpemU7CiAgICAgbmd4X2V2ZW50X3QgICpyZXY7CiAKLSAgICBpZiAoci0+bWFpbikgeworICAgIGlmIChyLT5tYWluICE9IHIpIHsKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMKaW5kZXggMjdjOWNlMC4uYTgyNzJlYyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMKQEAgLTM2MSwxMSArMzYxLDExIEBACiAKICAgICB2YWx1ZSA9IG5neF9odHRwX2dldF9pbmRleGVkX3ZhcmlhYmxlKGUtPnJlcXVlc3QsIGNvZGUtPmluZGV4KTsKIAotICAgIGlmICh2YWx1ZSA9PSBOVUxMIHx8IHZhbHVlID09IE5HWF9IVFRQX1ZBUl9OT1RfRk9VTkQpIHsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9IE5HWF9IVFRQX1ZBUl9OT1RfRk9VTkQpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLT50ZXh0LmxlbjsKICAgICB9CiAKLSAgICByZXR1cm4gdmFsdWUtPnRleHQubGVuOworICAgIHJldHVybiAwOwogfQogCiAKQEAgLTM4MiwxNSArMzgyLDE0IEBACiAgICAgaWYgKCFlLT5za2lwKSB7CiAgICAgICAgIHZhbHVlID0gbmd4X2h0dHBfZ2V0X2luZGV4ZWRfdmFyaWFibGUoZS0+cmVxdWVzdCwgY29kZS0+aW5kZXgpOwogCi0gICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMIHx8IHZhbHVlID09IE5HWF9IVFRQX1ZBUl9OT1RfRk9VTkQpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgIT0gTkdYX0hUVFBfVkFSX05PVF9GT1VORCkgeworICAgICAgICAgICAgZS0+cG9zID0gbmd4X2NweW1lbShlLT5wb3MsIHZhbHVlLT50ZXh0LmRhdGEsIHZhbHVlLT50ZXh0Lmxlbik7CiAKLSAgICAgICAgZS0+cG9zID0gbmd4X2NweW1lbShlLT5wb3MsIHZhbHVlLT50ZXh0LmRhdGEsIHZhbHVlLT50ZXh0Lmxlbik7Ci0KLSAgICAgICAgaWYgKGUtPmxvZykgewotICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBlLT5yZXF1ZXN0LT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJodHRwIHNjcmlwdCB2YXI6IFwiJVZcIiIsICZlLT5idWYpOworICAgICAgICAgICAgaWYgKGUtPmxvZykgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT5yZXF1ZXN0LT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgc2NyaXB0IHZhcjogXCIlVlwiIiwgJmUtPmJ1Zik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC04NzksMTkgKzg3OCwxOCBAQAogCiAgICAgdmFsdWUgPSBuZ3hfaHR0cF9nZXRfaW5kZXhlZF92YXJpYWJsZShlLT5yZXF1ZXN0LCBjb2RlLT5pbmRleCk7CiAKLSAgICBpZiAodmFsdWUgPT0gTlVMTCB8fCB2YWx1ZSA9PSBOR1hfSFRUUF9WQVJfTk9UX0ZPVU5EKSB7Ci0gICAgICAgIGUtPnNwLT52YWx1ZSA9IDA7Ci0gICAgICAgIGUtPnNwLT50ZXh0LmxlbiA9IDA7Ci0gICAgICAgIGUtPnNwLT50ZXh0LmRhdGEgPSAodV9jaGFyICopICIiOworICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPSBOR1hfSFRUUF9WQVJfTk9UX0ZPVU5EKSB7CisgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgZS0+cmVxdWVzdC0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJodHRwIHNjcmlwdCB2YXI6ICV1aSwgXCIlVlwiIiwgdmFsdWUtPnZhbHVlLCAmdmFsdWUtPnRleHQpOworICAgICAgICAqZS0+c3AgPSAqdmFsdWU7CiAgICAgICAgIGUtPnNwKys7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgZS0+cmVxdWVzdC0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIHNjcmlwdCB2YXI6ICV1aSwgXCIlVlwiIiwgdmFsdWUtPnZhbHVlLCAmdmFsdWUtPnRleHQpOwotCi0gICAgKmUtPnNwID0gKnZhbHVlOworICAgIGUtPnNwLT52YWx1ZSA9IDA7CisgICAgZS0+c3AtPnRleHQubGVuID0gMDsKKyAgICBlLT5zcC0+dGV4dC5kYXRhID0gKHVfY2hhciAqKSAiIjsKICAgICBlLT5zcCsrOwogfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKaW5kZXggNGNmODgxMC4uYmUyM2Q2ZCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYwpAQCAtNDIzLDcgKzQyMyw3IEBACiAgICAgICAgIGNsLT5idWYgPSBiOwogICAgIH0KIAotICAgIGlmIChyLT5tYWluID09IE5VTEwpIHsKKyAgICBpZiAoci0+bWFpbiA9PSByKSB7CiAgICAgICAgIGItPmxhc3RfYnVmID0gMTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IDgzNGMzMDIuLjY0N2Q5ZDIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtNDk1LDcgKzQ5NSw3IEBACiAgICAgfQogCiAgICAgaWYgKHItPnJlcXVlc3RfYm9keSkgewotICAgICAgICBpZiAoci0+cmVxdWVzdF9ib2R5LT50ZW1wX2ZpbGUgJiYgci0+bWFpbiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChyLT5yZXF1ZXN0X2JvZHktPnRlbXBfZmlsZSAmJiByLT5tYWluID09IHIpIHsKIAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIHRoZSByLT5yZXF1ZXN0X2JvZHktPmJ1ZiBjYW4gYmUgcmV1c2VkIGZvciBvbmUgcmVxdWVzdCBvbmx5LApAQCAtNTYwLDcgKzU2MCw3IEBACiAgICAgLyogcmVpbml0IHRoZSBzdWJyZXF1ZXN0J3Mgbmd4X291dHB1dF9jaGFpbigpIGNvbnRleHQgKi8KIAogICAgIGlmIChyLT5yZXF1ZXN0X2JvZHkpIHsKLSAgICAgICAgaWYgKHItPnJlcXVlc3RfYm9keS0+dGVtcF9maWxlICYmIHItPm1haW4gJiYgdS0+b3V0cHV0LmJ1ZikgeworICAgICAgICBpZiAoci0+cmVxdWVzdF9ib2R5LT50ZW1wX2ZpbGUgJiYgci0+bWFpbiAhPSByICYmIHUtPm91dHB1dC5idWYpIHsKIAogICAgICAgICAgICAgdS0+b3V0cHV0LmZyZWUgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhyLT5wb29sKTsKICAgICAgICAgICAgIGlmICh1LT5vdXRwdXQuZnJlZSA9PSBOVUxMKSB7CkBAIC0xNDU0LDcgKzE0NTQsNyBAQAogCiAgICAgci0+Y29ubmVjdGlvbi0+bG9nLT5hY3Rpb24gPSAic2VuZGluZyB0byBjbGllbnQiOwogCi0gICAgaWYgKHJjID09IDAgJiYgci0+bWFpbiA9PSBOVUxMKSB7CisgICAgaWYgKHJjID09IDAgJiYgci0+bWFpbiA9PSByKSB7CiAgICAgICAgIHJjID0gbmd4X2h0dHBfc2VuZF9sYXN0KHIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYwppbmRleCAwMjQ3Mjk4Li4yMTQwMTVmIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAKICAgICBjbWNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9tYWluX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwogCi0gICAgaWYgKGNtY2YtPnZhcmlhYmxlcy5lbHRzID09IE5VTEwgfHwgY21jZi0+dmFyaWFibGVzLm5lbHRzIDw9IGluZGV4KSB7CisgICAgaWYgKGNtY2YtPnZhcmlhYmxlcy5uZWx0cyA8PSBpbmRleCkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biB2YXJpYWJsZSBpbmRleDogJWQiLCBpbmRleCk7CiAgICAgICAgIHJldHVybiBOVUxMOwo=