ZGlmZiAtLWdpdCBhL2NvbmYvbWltZS50eXBlcyBiL2NvbmYvbWltZS50eXBlcwppbmRleCA2ZWYyNzc3Li4wNzk4NzRlIDEwMDY0NAotLS0gYS9jb25mL21pbWUudHlwZXMKKysrIGIvY29uZi9taW1lLnR5cGVzCkBAIC0xLDMxICsxLDUyIEBACiAKIHR5cGVzIHsKLSAgICB0ZXh0L2h0bWwgICAgICAgICAgICAgICAgICAgICAgaHRtbCBodG0gc2h0bWw7Ci0gICAgdGV4dC94bWwgICAgICAgICAgICAgICAgICAgICAgIHhtbCByc3M7Ci0gICAgdGV4dC9jc3MgICAgICAgICAgICAgICAgICAgICAgIGNzczsKLSAgICB0ZXh0L3BsYWluICAgICAgICAgICAgICAgICAgICAgdHh0OwotICAgIHRleHQveC1jb21wb25lbnQgICAgICAgICAgICAgICBodGM7CisgICAgdGV4dC9jc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M7CisgICAgdGV4dC9odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sIGh0bSBzaHRtbDsKKyAgICB0ZXh0L3BsYWluICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4dDsKKyAgICB0ZXh0L3htbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCByc3M7CisgICAgdGV4dC94LWNvbXBvbmVudCAgICAgICAgICAgICAgICAgICAgICBodGM7CisgICAgdGV4dC9tYXRobWwgICAgICAgICAgICAgICAgICAgICAgICAgICBtbWw7CiAKLSAgICBpbWFnZS9naWYgICAgICAgICAgICAgICAgICAgICAgZ2lmOwotICAgIGltYWdlL3BuZyAgICAgICAgICAgICAgICAgICAgICBwbmc7Ci0gICAgaW1hZ2UvanBlZyAgICAgICAgICAgICAgICAgICAgIGpwZWcganBnOwotICAgIGltYWdlL3gtaWNvbiAgICAgICAgICAgICAgICAgICBpY287Ci0gICAgaW1hZ2UveC1qbmcgICAgICAgICAgICAgICAgICAgIGpuZzsKKyAgICBpbWFnZS9naWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpZjsKKyAgICBpbWFnZS9qcGVnICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWcganBnOworICAgIGltYWdlL3BuZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nOworICAgIGltYWdlL3gtaWNvbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvOworICAgIGltYWdlL3gtam5nICAgICAgICAgICAgICAgICAgICAgICAgICAgam5nOwogCi0gICAgYXBwbGljYXRpb24vcGRmICAgICAgICAgICAgICAgIHBkZjsKLSAgICBhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCAgc3dmOwotICAgIGFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCAgICAgICBqczsKLSAgICBhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkICAgcmFyOwotICAgIGFwcGxpY2F0aW9uL3gteHBpbnN0YWxsICAgICAgICB4cGk7Ci0gICAgYXBwbGljYXRpb24veC14NTA5LWNhLWNlcnQgICAgIGRlciBwZW0gY3J0OworICAgIGFwcGxpY2F0aW9uL2phdmEtYXJjaGl2ZSAgICAgICAgICAgICAgamFyIHdhciBlYXI7CisgICAgYXBwbGljYXRpb24vbWFjLWJpbmhleDQwICAgICAgICAgICAgICBocXg7CisgICAgYXBwbGljYXRpb24vcGRmICAgICAgICAgICAgICAgICAgICAgICBwZGY7CisgICAgYXBwbGljYXRpb24veC1jb2NvYSAgICAgICAgICAgICAgICAgICBjY287CisgICAgYXBwbGljYXRpb24veC1qYXZhc2NyaXB0ICAgICAgICAgICAgICBqczsKKyAgICBhcHBsaWNhdGlvbi94LWphdmEtYXJjaGl2ZS1kaWZmICAgICAgIGphcmRpZmY7CisgICAgYXBwbGljYXRpb24veC1qYXZhLWpubHAtZmlsZSAgICAgICAgICBqbmxwOworICAgIGFwcGxpY2F0aW9uL3gtbWFrZXNlbGYgICAgICAgICAgICAgICAgcnVuOworICAgIGFwcGxpY2F0aW9uL3gtcGVybCAgICAgICAgICAgICAgICAgICAgcGwgcG07CisgICAgYXBwbGljYXRpb24veC1waWxvdCAgICAgICAgICAgICAgICAgICBwcmMgcGRiOworICAgIGFwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWQgICAgICAgICAgcmFyOworICAgIGFwcGxpY2F0aW9uL3gtcmVkaGF0LXBhY2thZ2UtbWFuYWdlciAgcnBtOworICAgIGFwcGxpY2F0aW9uL3gtc2VhICAgICAgICAgICAgICAgICAgICAgc2VhOworICAgIGFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoICAgICAgICAgc3dmOworICAgIGFwcGxpY2F0aW9uL3gtc3R1ZmZpdCAgICAgICAgICAgICAgICAgc2l0OworICAgIGFwcGxpY2F0aW9uL3gtdGNsICAgICAgICAgICAgICAgICAgICAgdGNsIHRrOworICAgIGFwcGxpY2F0aW9uL3gteDUwOS1jYS1jZXJ0ICAgICAgICAgICAgZGVyIHBlbSBjcnQ7CisgICAgYXBwbGljYXRpb24veC14cGluc3RhbGwgICAgICAgICAgICAgICB4cGk7CisgICAgYXBwbGljYXRpb24vemlwICAgICAgICAgICAgICAgICAgICAgICB6aXA7CiAKLSAgICBhdWRpby9tcGVnICAgICAgICAgICAgICAgICAgICAgbXAzOwotICAgIGF1ZGlvL3gtcmVhbGF1ZGlvICAgICAgICAgICAgICByYTsKKyAgICBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0gICAgICAgICAgICAgIGRlYjsKKyAgICBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0gICAgICAgICAgICAgIGJpbiBleGUgZGxsOworICAgIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSAgICAgICAgICAgICAgZG1nOworICAgIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSAgICAgICAgICAgICAgZW90OworICAgIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSAgICAgICAgICAgICAgaXNvIGltZzsKKyAgICBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0gICAgICAgICAgICAgIG1zaSBtc3AgbXNtOwogCi0gICAgdmlkZW8vbXBlZyAgICAgICAgICAgICAgICAgICAgIG1wZWcgbXBnOwotICAgIHZpZGVvL3F1aWNrdGltZSAgICAgICAgICAgICAgICBtb3Y7Ci0gICAgdmlkZW8veC1mbHYgICAgICAgICAgICAgICAgICAgIGZsdjsKLSAgICB2aWRlby94LW1zdmlkZW8gICAgICAgICAgICAgICAgYXZpOwotICAgIHZpZGVvL3gtbXMtd212ICAgICAgICAgICAgICAgICB3bXY7Ci0gICAgdmlkZW8veC1tbmcgICAgICAgICAgICAgICAgICAgIG1uZzsKKyAgICBhdWRpby9tcGVnICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wMzsKKyAgICBhdWRpby94LXJlYWxhdWRpbyAgICAgICAgICAgICAgICAgICAgIHJhOworCisgICAgdmlkZW8vbXBlZyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGVnIG1wZzsKKyAgICB2aWRlby9xdWlja3RpbWUgICAgICAgICAgICAgICAgICAgICAgIG1vdjsKKyAgICB2aWRlby94LWZsdiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdjsKKyAgICB2aWRlby94LW1zdmlkZW8gICAgICAgICAgICAgICAgICAgICAgIGF2aTsKKyAgICB2aWRlby94LW1zLXdtdiAgICAgICAgICAgICAgICAgICAgICAgIHdtdjsKKyAgICB2aWRlby94LW1uZyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1uZzsKIH0KZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggOTAyOWY5ZS4uOGYwYWJkNiAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNyArOSw0NyBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKLTxjaGFuZ2VzIHZlcj0iMC4zLjQiIGRhdGU9IjE5LjA5LjIwMDUiPgorPGNoYW5nZXMgdmVyPSIwLjMuNSIgZGF0ZT0iMjEuMTAuMjAwNSI+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8XTzMkgzM/Hyc4gSU1BUC9QT1AzIM3FztHM09Eg08XS18XSz80gwdfUz9LJ2sHDycksINTPIM3PxyDQ0s/J2s/K1MkKK3NlZ21lbnRhdGlvbiBmYXVsdDsKK8/bycLLwSDQz9HXyczB09gg1yAwLjIuMi4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBzZWdtZW50YXRpb24gZmF1bHQgbWF5IG9jY3VycmVkIGlmIHRoZSBJTUFQL1BPUDMgbG9naW4gd2FzIGNoYW5nZWQKK2J5IGF1dGhvcml6YXRpb24gc2VydmVyOworYnVnIGFwcGVhcmVkIGluIDAuMi4yLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK2FjY2VwdCBtdXRleCDOxSDSwcLP1MHMLCDX08Ug08/FxMnOxc7J0SDPwtLBwsHU2dfBzMnT2CDPxM7JzSDSwcLP3snNINDSz8PF09PPzTsKK8/bycLLwSDQz9HXyczB09gg1yAwLjMuMy4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBhY2NlcHQgbXV0ZXggZGlkIG5vdCB3b3JrIGFuZCBhbGwgY29ubmVjdGlvbnMgd2VyZSBoYW5kbGVkIGJ5IG9uZSBwcm9jZXNzOworYnVnIGFwcGVhcmVkIGluIDAuMy4zLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DSySDJ09DPzNjaz9fBzsnJIM3F1M/EwSBydHNpZyDJIMTJ0sXL1MnX2SB0aW1lcl9yZXNvbHV0aW9uCivOxSDSwcLP1MHMySDUwcrNwdXU2S4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSB0aW1lb3V0IGRpZCBub3Qgd29yayBpZiB0aGUgInJ0c2lnIiBtZXRob2QgYW5kIHRoZSAidGltZXJfcmVzb2x1dGlvbiIKK2RpcmVjdGl2ZSB3ZXJlIHVzZWQuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKKzxjaGFuZ2VzIHZlcj0iMC4zLjQiIGRhdGU9IjE5LjEwLjIwMDUiPgogCiA8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+CiA8cGFyYSBsYW5nPSJydSI+CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCBhNTJmNmM4Li44NzljMjVmIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuNCIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuNSIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfT0xEUElEX0VYVCAgICAgIi5vbGRiaW4iCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9kZXZwb2xsX21vZHVsZS5jCmluZGV4IDU0YTU5NTYuLjcyMzhlNWIgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9kZXZwb2xsX21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9kZXZwb2xsX21vZHVsZS5jCkBAIC0zMzIsNyArMzMyLDYgQEAKICAgICBuZ3hfZXJyX3QgICAgICAgICAgIGVycjsKICAgICBuZ3hfaW50X3QgICAgICAgICAgIGk7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICBsZXZlbDsKLSAgICBuZ3hfbXNlY190ICAgICAgICAgIGRlbHRhOwogICAgIG5neF9ldmVudF90ICAgICAgICAqcmV2LCAqd2V2LCAqKnF1ZXVlOwogICAgIG5neF9jb25uZWN0aW9uX3QgICAqYzsKICAgICBzdHJ1Y3QgZHZwb2xsICAgICAgIGR2cDsKQEAgLTM0OSw2ICszNDgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGUoL2Rldi9wb2xsKSBmYWlsZWQiKTsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KKworICAgICAgICBuY2hhbmdlcyA9IDA7CiAgICAgfQogCiAgICAgZHZwLmRwX2ZkcyA9IGV2ZW50X2xpc3Q7CkBAIC0zNjIsMTAgKzM2Myw2IEBACiAgICAgICAgIGVyciA9IDA7CiAgICAgfQogCi0gICAgbmNoYW5nZXMgPSAwOwotCi0gICAgZGVsdGEgPSBuZ3hfY3VycmVudF9tc2VjOwotICAgIAogICAgIGlmIChmbGFncyAmIE5HWF9VUERBVEVfVElNRSkgewogICAgICAgICBuZ3hfdGltZV91cGRhdGUoMCwgMCk7CiAgICAgfQpAQCAtMzg4LDIxICszODUsMTQgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSAgICBpZiAodGltZXIgIT0gTkdYX1RJTUVSX0lORklOSVRFKSB7Ci0gICAgICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfbXNlYyAtIGRlbHRhOwotCi0gICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJkZXZwb2xsIHRpbWVyOiAlTSwgZGVsdGE6ICVNIiwgdGltZXIsIGRlbHRhKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoZXZlbnRzID09IDApIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImlvY3RsKERQX1BPTEwpIHJldHVybmVkIG5vIGV2ZW50cyB3aXRob3V0IHRpbWVvdXQiKTsKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBpZiAoZXZlbnRzID09IDApIHsKLSAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgaWYgKHRpbWVyICE9IE5HWF9USU1FUl9JTkZJTklURSkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAiaW9jdGwoRFBfUE9MTCkgcmV0dXJuZWQgbm8gZXZlbnRzIHdpdGhvdXQgdGltZW91dCIpOworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAogICAgIG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYwppbmRleCAxNDAxM2RjLi43MzY0ZDdkIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZXBvbGxfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Vwb2xsX21vZHVsZS5jCkBAIC0zOTEsNyArMzkxLDYgQEAKICAgICBuZ3hfdWludF90ICAgICAgICAgbGV2ZWw7CiAgICAgbmd4X2Vycl90ICAgICAgICAgIGVycjsKICAgICBuZ3hfbG9nX3QgICAgICAgICAqbG9nOwotICAgIG5neF9tc2VjX3QgICAgICAgICBkZWx0YTsKICAgICBuZ3hfZXZlbnRfdCAgICAgICAqcmV2LCAqd2V2LCAqKnF1ZXVlOwogICAgIG5neF9jb25uZWN0aW9uX3QgICpjOwogCkBAIC00MDgsMjUgKzQwNywxMCBAQAogICAgICAgICBlcnIgPSAwOwogICAgIH0KIAotICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfbXNlYzsKLSAgICAKICAgICBpZiAoZmxhZ3MgJiBOR1hfVVBEQVRFX1RJTUUpIHsKICAgICAgICAgbmd4X3RpbWVfdXBkYXRlKDAsIDApOwogICAgIH0KIAotICAgIGlmICh0aW1lciAhPSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKLSAgICAgICAgZGVsdGEgPSBuZ3hfY3VycmVudF9tc2VjIC0gZGVsdGE7Ci0KLSAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImVwb2xsIHRpbWVyOiAlTSwgZGVsdGE6ICVNIiwgdGltZXIsIGRlbHRhKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoZXZlbnRzID09IDApIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImVwb2xsX3dhaXQoKSByZXR1cm5lZCBubyBldmVudHMgd2l0aG91dCB0aW1lb3V0Iik7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgaWYgKGVycikgewogICAgICAgICBpZiAoZXJyID09IE5HWF9FSU5UUikgewogCkBAIC00NDYsNyArNDMwLDEzIEBACiAgICAgfQogCiAgICAgaWYgKGV2ZW50cyA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgICAgIGlmICh0aW1lciAhPSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgICAgIH0KKworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgImVwb2xsX3dhaXQoKSByZXR1cm5lZCBubyBldmVudHMgd2l0aG91dCB0aW1lb3V0Iik7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCiAgICAgbmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2txdWV1ZV9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9rcXVldWVfbW9kdWxlLmMKaW5kZXggZDQ5MTY3OS4uODM5YWZiNSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2txdWV1ZV9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfa3F1ZXVlX21vZHVsZS5jCkBAIC00NzMsNyArNDczLDYgQEAKICAgICBuZ3hfaW50X3QgICAgICAgICBpLCBpbnN0YW5jZTsKICAgICBuZ3hfdWludF90ICAgICAgICBsZXZlbDsKICAgICBuZ3hfZXJyX3QgICAgICAgICBlcnI7Ci0gICAgbmd4X21zZWNfdCAgICAgICAgZGVsdGE7CiAgICAgbmd4X2V2ZW50X3QgICAgICAqZXYsICoqcXVldWU7CiAgICAgc3RydWN0IHRpbWVzcGVjICAgdHMsICp0cDsKIApAQCAtNTA5LDggKzUwOCw2IEBACiAgICAgICAgIGVyciA9IDA7CiAgICAgfQogCi0gICAgZGVsdGEgPSBuZ3hfY3VycmVudF9tc2VjOwotCiAgICAgaWYgKGZsYWdzICYgTkdYX1VQREFURV9USU1FKSB7CiAgICAgICAgIG5neF90aW1lX3VwZGF0ZSgwLCAwKTsKICAgICB9CkBAIC01MzYsMjIgKzUzMywxNCBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIGlmICh0aW1lciAhPSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKLSAgICAgICAgZGVsdGEgPSBuZ3hfY3VycmVudF9tc2VjIC0gZGVsdGE7Ci0KLSAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImtldmVudCB0aW1lcjogJU0sIGRlbHRhOiAlTSIsIHRpbWVyLCBkZWx0YSk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoZXZlbnRzID09IDApIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImtldmVudCgpIHJldHVybmVkIG5vIGV2ZW50cyB3aXRob3V0IHRpbWVvdXQiKTsKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBpZiAoZXZlbnRzID09IDApIHsKLSAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgaWYgKHRpbWVyICE9IE5HWF9USU1FUl9JTkZJTklURSkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgcmV0dXJuZWQgbm8gZXZlbnRzIHdpdGhvdXQgdGltZW91dCIpOworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAogICAgIG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9wb2xsX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3BvbGxfbW9kdWxlLmMKaW5kZXggNjFkNjE3OS4uZmZkNmFjZSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3BvbGxfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3BvbGxfbW9kdWxlLmMKQEAgLTI0MSw3ICsyNDEsNiBAQAogICAgIG5neF9lcnJfdCAgICAgICAgICAgZXJyOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgaSwgbnJlYWR5OwogICAgIG5neF91aW50X3QgICAgICAgICAgZm91bmQsIGxldmVsOwotICAgIG5neF9tc2VjX3QgICAgICAgICAgZGVsdGE7CiAgICAgbmd4X2V2ZW50X3QgICAgICAgICpldiwgKipxdWV1ZTsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAgKmM7CiAKQEAgLTI2Nyw4ICsyNjYsNiBAQAogICAgICAgICBlcnIgPSAwOwogICAgIH0KIAotICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfbXNlYzsKLQogICAgIGlmIChmbGFncyAmIE5HWF9VUERBVEVfVElNRSkgewogICAgICAgICBuZ3hfdGltZV91cGRhdGUoMCwgMCk7CiAgICAgfQpAQCAtMjk0LDIxICsyOTEsMTQgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSAgICBpZiAodGltZXIgIT0gTkdYX1RJTUVSX0lORklOSVRFKSB7Ci0gICAgICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfbXNlYyAtIGRlbHRhOwotCi0gICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJwb2xsIHRpbWVyOiAlTSwgZGVsdGE6ICVNIiwgdGltZXIsIGRlbHRhKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAocmVhZHkgPT0gMCkgewotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAicG9sbCgpIHJldHVybmVkIG5vIGV2ZW50cyB3aXRob3V0IHRpbWVvdXQiKTsKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBpZiAocmVhZHkgPT0gMCkgewotICAgICAgICByZXR1cm4gTkdYX09LOworICAgICAgICBpZiAodGltZXIgIT0gTkdYX1RJTUVSX0lORklOSVRFKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX09LOworICAgICAgICB9CisKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICJwb2xsKCkgcmV0dXJuZWQgbm8gZXZlbnRzIHdpdGhvdXQgdGltZW91dCIpOworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAogICAgIG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9ydHNpZ19tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9ydHNpZ19tb2R1bGUuYwppbmRleCA0NTA5NDNjLi5lNTdhNWRkIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcnRzaWdfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3J0c2lnX21vZHVsZS5jCkBAIC0yODYsNyArMjg2LDYgQEAKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgIHNpZ25vOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgaW5zdGFuY2U7Ci0gICAgbmd4X21zZWNfdCAgICAgICAgICBkZWx0YTsKICAgICBuZ3hfZXJyX3QgICAgICAgICAgIGVycjsKICAgICBzaWdpbmZvX3QgICAgICAgICAgIHNpOwogICAgIG5neF9ldmVudF90ICAgICAgICAqcmV2LCAqd2V2OwpAQCAtMzE3LDQxICszMTYsMzQgQEAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAicnRzaWcgc2lnbm86JWQiLCBzaWdubyk7CiAKLSAgICAgICAgaWYgKGVyciA9PSBOR1hfRUFHQUlOKSB7Ci0KLSAgICAgICAgICAgIGlmICh0aW1lciA9PSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKLSAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaWd0aW1lZHdhaXQoKSByZXR1cm5lZCBFQUdBSU4gd2l0aG91dCB0aW1lb3V0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgaWYgKGZsYWdzICYgTkdYX1VQREFURV9USU1FKSB7CisgICAgICAgICAgICBuZ3hfdGltZV91cGRhdGUoMCwgMCk7CiAgICAgICAgIH0KIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVyciA9IDA7Ci0gICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJydHNpZyBzaWdubzolZCBmZDolZCBiYW5kOiUwNFhkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgc2lnbm8sIHNpLnNpX2ZkLCBzaS5zaV9iYW5kKTsKLSAgICB9CisgICAgICAgIGlmIChlcnIgPT0gTkdYX0VBR0FJTikgewogCi0gICAgZGVsdGEgPSBuZ3hfY3VycmVudF9tc2VjOwotICAgIAotICAgIGlmIChmbGFncyAmIE5HWF9VUERBVEVfVElNRSkgewotICAgICAgICBuZ3hfdGltZV91cGRhdGUoMCwgMCk7Ci0gICAgfQorICAgICAgICAgICAgLyogdGltZW91dCAqLwogCi0gICAgaWYgKGVycikgeworICAgICAgICAgICAgaWYgKHRpbWVyICE9IE5HWF9USU1FUl9JTkZJTklURSkgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQUdBSU47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInNpZ3RpbWVkd2FpdCgpIHJldHVybmVkIEVBR0FJTiB3aXRob3V0IHRpbWVvdXQiKTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKwogICAgICAgICBuZ3hfbG9nX2Vycm9yKChlcnIgPT0gTkdYX0VJTlRSKSA/IE5HWF9MT0dfSU5GTyA6IE5HWF9MT0dfQUxFUlQsCiAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUtPmxvZywgZXJyLCAic2lndGltZWR3YWl0KCkgZmFpbGVkIik7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgaWYgKHRpbWVyICE9IE5HWF9USU1FUl9JTkZJTklURSkgewotICAgICAgICBkZWx0YSA9IG5neF9jdXJyZW50X21zZWMgLSBkZWx0YTsKKyAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJydHNpZyBzaWdubzolZCBmZDolZCBiYW5kOiUwNFhkIiwKKyAgICAgICAgICAgICAgICAgICBzaWdubywgc2kuc2lfZmQsIHNpLnNpX2JhbmQpOwogCi0gICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJydHNpZyB0aW1lcjogJU0sIGRlbHRhOiAlTSIsIHRpbWVyLCBkZWx0YSk7CisgICAgaWYgKGZsYWdzICYgTkdYX1VQREFURV9USU1FKSB7CisgICAgICAgIG5neF90aW1lX3VwZGF0ZSgwLCAwKTsKICAgICB9CiAKICAgICBydHNjZiA9IG5neF9ldmVudF9nZXRfY29uZihuZ3hfY3ljbGUtPmNvbmZfY3R4LCBuZ3hfcnRzaWdfbW9kdWxlKTsKQEAgLTQwMCw4ICszOTIsMTIgQEAKICAgICAgICAgICAgIHdldi0+aGFuZGxlcih3ZXYpOwogICAgICAgICB9CiAKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKwogICAgIH0gZWxzZSBpZiAoc2lnbm8gPT0gU0lHQUxSTSkgewogCisgICAgICAgIG5neF90aW1lX3VwZGF0ZSgwLCAwKTsKKwogICAgICAgICByZXR1cm4gTkdYX09LOwogCiAgICAgfSBlbHNlIGlmIChzaWdubyA9PSBTSUdJTykgewpAQCAtNDMxLDE4ICs0MjcsMTIgQEAKIAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogCi0gICAgfSBlbHNlIGlmIChzaWdubyAhPSAtMSkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgInNpZ3RpbWVkd2FpdCgpIHJldHVybmVkIHVuZXhwZWN0ZWQgc2lnbmFsOiAlZCIsIHNpZ25vKTsKLQotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIGlmIChzaWdubyAhPSAtMSkgewotICAgICAgICByZXR1cm4gTkdYX09LOwotICAgIH0KKyAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAic2lndGltZWR3YWl0KCkgcmV0dXJuZWQgdW5leHBlY3RlZCBzaWduYWw6ICVkIiwgc2lnbm8pOwogCi0gICAgcmV0dXJuIE5HWF9BR0FJTjsKKyAgICByZXR1cm4gTkdYX0VSUk9SOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9zZWxlY3RfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfc2VsZWN0X21vZHVsZS5jCmluZGV4IGRhNDMwM2QuLjU3ZjZmMDUgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9zZWxlY3RfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3NlbGVjdF9tb2R1bGUuYwpAQCAtMjUwLDcgKzI1MCw2IEBACiAgICAgaW50ICAgICAgICAgICAgICAgICByZWFkeSwgbnJlYWR5OwogICAgIG5neF91aW50X3QgICAgICAgICAgaSwgZm91bmQ7CiAgICAgbmd4X2Vycl90ICAgICAgICAgICBlcnI7Ci0gICAgbmd4X21zZWNfdCAgICAgICAgICBkZWx0YTsKICAgICBuZ3hfZXZlbnRfdCAgICAgICAgKmV2LCAqKnF1ZXVlOwogICAgIG5neF9jb25uZWN0aW9uX3QgICAqYzsKICAgICBzdHJ1Y3QgdGltZXZhbCAgICAgIHR2LCAqdHA7CkBAIC0zMzEsMjYgKzMzMCwxMCBAQAogICAgICAgICBlcnIgPSAwOwogICAgIH0KIAotICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfbXNlYzsKLQogICAgIGlmIChmbGFncyAmIE5HWF9VUERBVEVfVElNRSkgewogICAgICAgICBuZ3hfdGltZV91cGRhdGUoMCwgMCk7CiAgICAgfQogCi0gICAgaWYgKHRpbWVyICE9IE5HWF9USU1FUl9JTkZJTklURSkgewotICAgICAgICBkZWx0YSA9IG5neF9jdXJyZW50X21zZWMgLSBkZWx0YTsKLQotICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAic2VsZWN0IHRpbWVyOiAlTSwgZGVsdGE6ICVNIiwgdGltZXIsIGRlbHRhKTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyZWFkeSA9PSAwKSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzZWxlY3QoKSByZXR1cm5lZCBubyBldmVudHMgd2l0aG91dCB0aW1lb3V0Iik7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAic2VsZWN0IHJlYWR5ICVkIiwgcmVhZHkpOwogCkBAIC0zODMsOCArMzY2LDE0IEBACiAKICNlbmRpZgogCi0gICAgaWYgKG5ldmVudHMgPT0gMCkgewotICAgICAgICByZXR1cm4gTkdYX09LOworICAgIGlmIChyZWFkeSA9PSAwKSB7CisgICAgICAgIGlmICh0aW1lciAhPSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgICAgIH0KKworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCgpIHJldHVybmVkIG5vIGV2ZW50cyB3aXRob3V0IHRpbWVvdXQiKTsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKICAgICBuZ3hfbXV0ZXhfbG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKaW5kZXggNmRjNmUzYy4uNDc3NWU1ZCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuYwpAQCAtMTk5LDcgKzE5OSw3IEBACiBuZ3hfcHJvY2Vzc19ldmVudHNfYW5kX3RpbWVycyhuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CiAgICAgbmd4X3VpbnRfdCAgZmxhZ3M7Ci0gICAgbmd4X21zZWNfdCAgdGltZXI7CisgICAgbmd4X21zZWNfdCAgdGltZXIsIGRlbHRhOwogCiAgICAgaWYgKG5neF90aW1lcl9yZXNvbHV0aW9uKSB7CiAgICAgICAgIHRpbWVyID0gTkdYX1RJTUVSX0lORklOSVRFOwpAQCAtMjQwLDE2ICsyNDAsMjUgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfbXNlYzsKKwogICAgICh2b2lkKSBuZ3hfcHJvY2Vzc19ldmVudHMoY3ljbGUsIHRpbWVyLCBmbGFncyk7CiAKLSAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygpOworICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfbXNlYyAtIGRlbHRhOworCisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAidGltZXIgZGVsdGE6ICVNIiwgZGVsdGEpOworCisgICAgaWYgKGRlbHRhKSB7CisgICAgICAgIG5neF9ldmVudF9leHBpcmVfdGltZXJzKCk7CisgICAgfQogCiAgICAgaWYgKG5neF9wb3N0ZWRfYWNjZXB0X2V2ZW50cykgewogICAgICAgICBuZ3hfZXZlbnRfcHJvY2Vzc19wb3N0ZWQoY3ljbGUsICZuZ3hfcG9zdGVkX2FjY2VwdF9ldmVudHMpOwogICAgIH0KIAogICAgIGlmIChuZ3hfYWNjZXB0X211dGV4X2hlbGQpIHsKLSAgICAgICAgbmd4X2FjY2VwdF9tdXRleCA9IDA7CisgICAgICAgICpuZ3hfYWNjZXB0X211dGV4ID0gMDsKICAgICB9CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCmluZGV4IDkwNzFhZTUuLjU4ZjEzYzQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKQEAgLTE1OSwyMyArMTU5LDE4IEBACiAKICAgICAvKiBTVFVCOiBlcG9sbCBlZGdlICovIGMtPndyaXRlLT5oYW5kbGVyID0gbmd4X2h0dHBfZW1wdHlfaGFuZGxlcjsKIAorI2lmIChOR1hfU1RBVF9TVFVCKQorICAgIG5neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9zdGF0X3JlYWRpbmcsIDEpOworI2VuZGlmCisKICAgICBpZiAocmV2LT5yZWFkeSkgewogICAgICAgICAvKiB0aGUgZGVmZXJyZWQgYWNjZXB0KCksIHJ0c2lnLCBhaW8sIGlvY3AgKi8KIAogICAgICAgICBpZiAobmd4X2FjY2VwdF9tdXRleCkgewotCiAgICAgICAgICAgICBuZ3hfcG9zdF9ldmVudChyZXYsICZuZ3hfcG9zdGVkX2V2ZW50cyk7Ci0KLSNpZiAoTkdYX1NUQVRfU1RVQikKLSAgICAgICAgICAgIG5neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9zdGF0X3JlYWRpbmcsIDEpOwotI2VuZGlmCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotI2lmIChOR1hfU1RBVF9TVFVCKQotICAgICAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF9yZWFkaW5nLCAxKTsKLSNlbmRpZgotCiAgICAgICAgIG5neF9odHRwX2luaXRfcmVxdWVzdChyZXYpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTgzLDE0ICsxNzgsMTIgQEAKICAgICBuZ3hfYWRkX3RpbWVyKHJldiwgYy0+bGlzdGVuaW5nLT5wb3N0X2FjY2VwdF90aW1lb3V0KTsKIAogICAgIGlmIChuZ3hfaGFuZGxlX3JlYWRfZXZlbnQocmV2LCAwKSA9PSBOR1hfRVJST1IpIHsKKyNpZiAoTkdYX1NUQVRfU1RVQikKKyAgICAgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfcmVhZGluZywgLTEpOworI2VuZGlmCiAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSNpZiAoTkdYX1NUQVRfU1RVQikKLSAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF9yZWFkaW5nLCAxKTsKLSNlbmRpZgotCiB9CiAKIApAQCAtMjEzLDM1ICsyMDYsMjQgQEAKICAgICBuZ3hfaHR0cF9zc2xfc3J2X2NvbmZfdCAgICpzc2NmOwogI2VuZGlmCiAKKyNpZiAoTkdYX1NUQVRfU1RVQikKKyAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF9yZWFkaW5nLCAtMSk7CisjZW5kaWYKKwogICAgIGMgPSByZXYtPmRhdGE7CiAKICAgICBpZiAocmV2LT50aW1lZG91dCkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCBOR1hfRVRJTUVET1VULCAiY2xpZW50IHRpbWVkIG91dCIpOwogCi0jaWYgKE5HWF9TVEFUX1NUVUIpCi0gICAgICAgIG5neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9zdGF0X3JlYWRpbmcsIC0xKTsKLSNlbmRpZgotCiAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBoYyA9IGMtPmRhdGE7CiAKLSAgICBpZiAoaGMpIHsKLQotI2lmIChOR1hfU1RBVF9TVFVCKQotICAgICAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF9yZWFkaW5nLCAxKTsKLSNlbmRpZgotCi0gICAgfSBlbHNlIHsKKyAgICBpZiAoaGMgPT0gTlVMTCkgewogICAgICAgICBoYyA9IG5neF9wY2FsbG9jKGMtPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9jb25uZWN0aW9uX3QpKTsKICAgICAgICAgaWYgKGhjID09IE5VTEwpIHsKLQotI2lmIChOR1hfU1RBVF9TVFVCKQotICAgICAgICAgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfcmVhZGluZywgLTEpOwotI2VuZGlmCi0KICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI2MSwxMSArMjQzLDYgQEAKICAgICB9IGVsc2UgewogICAgICAgICByID0gbmd4X3BjYWxsb2MoYy0+cG9vbCwgc2l6ZW9mKG5neF9odHRwX3JlcXVlc3RfdCkpOwogICAgICAgICBpZiAociA9PSBOVUxMKSB7Ci0KLSNpZiAoTkdYX1NUQVRfU1RVQikKLSAgICAgICAgICAgIG5neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9zdGF0X3JlYWRpbmcsIC0xKTsKLSNlbmRpZgotCiAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNzMsMTAgKzI1MCw2IEBACiAgICAgICAgIGhjLT5yZXF1ZXN0ID0gcjsKICAgICB9CiAKLSNpZiAoTkdYX1NUQVRfU1RVQikKLSAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF9yZWFkaW5nLCAtMSk7Ci0jZW5kaWYKLQogICAgIGMtPmRhdGEgPSByOwogICAgIHItPmh0dHBfY29ubmVjdGlvbiA9IGhjOwogCkBAIC0xNjUyLDggKzE2MjUsMTUgQEAKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIE5HWF9FVElNRURPVVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgdGltZWQgb3V0Iik7CiAgICAgICAgICAgICBjLT50aW1lZG91dCA9IDE7Ci0gICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX1JFUVVFU1RfVElNRV9PVVQpOworCisjaWYgMAorICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLT5tYWluLCBOR1hfSFRUUF9SRVFVRVNUX1RJTUVfT1VUKTsKICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CisjZW5kaWYKKworICAgICAgICAgICAgYy0+Y2xvc2VkID0gMTsKKyAgICAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgMCk7CisKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xNjY1LDcgKzE2NDUsNyBAQAogICAgICAgICAgICAgbmd4X2FkZF90aW1lcih3ZXYsIGNsY2YtPnNlbmRfdGltZW91dCk7CiAKICAgICAgICAgICAgIGlmIChuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KHdldiwgY2xjZi0+c2VuZF9sb3dhdCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCAwKTsKKyAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHItPm1haW4sIDApOwogICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oci0+Y29ubmVjdGlvbik7CiAgICAgICAgICAgICB9CiAKQEAgLTE2ODAsNyArMTY2MCw3IEBACiAgICAgICAgICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLT5tYWluLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKICAgICAgICAgICAgIGlmIChuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KHdldiwgY2xjZi0+c2VuZF9sb3dhdCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCAwKTsKKyAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHItPm1haW4sIDApOwogICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oci0+Y29ubmVjdGlvbik7CiAgICAgICAgICAgICB9CiAKQEAgLTE3MTEsNyArMTY5MSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAobmd4X2hhbmRsZV93cml0ZV9ldmVudCh3ZXYsIGNsY2YtPnNlbmRfbG93YXQpID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCAwKTsKKyAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX3JlcXVlc3Qoci0+bWFpbiwgMCk7CiAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKHItPmNvbm5lY3Rpb24pOwogICAgICAgICB9CiAKQEAgLTE5ODgsOCArMTk2OCwxMyBAQAogCiAgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLCAicGlwZWxpbmVkIHJlcXVlc3QiKTsKIAorI2lmIChOR1hfU1RBVF9TVFVCKQorICAgICAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF9yZWFkaW5nLCAxKTsKKyNlbmRpZgorCiAgICAgICAgIGhjLT5waXBlbGluZSA9IDE7CiAgICAgICAgIGMtPmxvZy0+YWN0aW9uID0gInJlYWRpbmcgY2xpZW50IHBpcGVsaW5lZCByZXF1ZXN0IGxpbmUiOworCiAgICAgICAgIG5neF9odHRwX2luaXRfcmVxdWVzdChyZXYpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjIwNiw2ICsyMTkxLDEwIEBACiAKICAgICBiLT5sYXN0ICs9IG47CiAKKyNpZiAoTkdYX1NUQVRfU1RVQikKKyAgICBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfc3RhdF9yZWFkaW5nLCAxKTsKKyNlbmRpZgorCiAgICAgYy0+bG9nLT5oYW5kbGVyID0gbmd4X2h0dHBfbG9nX2Vycm9yOwogICAgIGMtPmxvZy0+YWN0aW9uID0gInJlYWRpbmcgY2xpZW50IHJlcXVlc3QgbGluZSI7CiAKQEAgLTIzODgsNiArMjM3Nyw3IEBACiAgICAgfQogCiAjaWYgKE5HWF9TVEFUX1NUVUIpCisKICAgICBpZiAoci0+c3RhdF9yZWFkaW5nKSB7CiAgICAgICAgIG5neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9zdGF0X3JlYWRpbmcsIC0xKTsKICAgICB9CkBAIC0yMzk1LDYgKzIzODUsNyBAQAogICAgIGlmIChyLT5zdGF0X3dyaXRpbmcpIHsKICAgICAgICAgbmd4X2F0b21pY19mZXRjaF9hZGQobmd4X3N0YXRfd3JpdGluZywgLTEpOwogICAgIH0KKwogI2VuZGlmCiAKICAgICBpZiAoZXJyb3IgJiYgci0+aGVhZGVyc19vdXQuc3RhdHVzID09IDApIHsKZGlmZiAtLWdpdCBhL3NyYy9pbWFwL25neF9pbWFwX2F1dGhfaHR0cF9tb2R1bGUuYyBiL3NyYy9pbWFwL25neF9pbWFwX2F1dGhfaHR0cF9tb2R1bGUuYwppbmRleCBiYzk4ZGM4Li40Yjg1ODRkIDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9hdXRoX2h0dHBfbW9kdWxlLmMKKysrIGIvc3JjL2ltYXAvbmd4X2ltYXBfYXV0aF9odHRwX21vZHVsZS5jCkBAIC00NCw2ICs0NCw3IEBACiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAgICBhZGRyOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICAgcG9ydDsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgIGVycjsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgIGVycm1zZzsKIAogICAgIHRpbWVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXA7CiAKQEAgLTQ1OSw2ICs0NjAsOSBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBjdHgtPmVycm1zZy5sZW4gPSBsZW47CisgICAgICAgICAgICAgICAgY3R4LT5lcnJtc2cuZGF0YSA9IGN0eC0+aGVhZGVyX3N0YXJ0OworCiAgICAgICAgICAgICAgICAgaWYgKHMtPnByb3RvY29sID09IE5HWF9JTUFQX1BPUDNfUFJPVE9DT0wpIHsKICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNpemVvZigiLUVSUiIpIC0gMSArIGxlbiArIHNpemVvZihDUkxGKSAtIDE7CiAKQEAgLTQ4Niw2ICs0OTAsNyBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICpwKysgPSAnICc7CisKICAgICAgICAgICAgICAgICBwID0gbmd4X2NweW1lbShwLCBjdHgtPmhlYWRlcl9zdGFydCwgbGVuKTsKICAgICAgICAgICAgICAgICAqcCsrID0gQ1I7ICpwKysgPSBMRjsKIApAQCAtNTE5LDcgKzUyNCwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIkF1dGgtVXNlciIpIC0gMSkgPT0gMCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzLT5sb2dpbi5sZW4gPSBjdHgtPmhlYWRlcl9lbmQgLSBjdHgtPmhlYWRlcl9zdGFydDsKLSAgICAgICAgICAgICAgICBzLT5sb2dpbi5kYXRhID0gY3R4LT5oZWFkZXJfc3RhcnQ7CisKKyAgICAgICAgICAgICAgICBzLT5sb2dpbi5kYXRhID0gbmd4X3BhbGxvYyhzLT5jb25uZWN0aW9uLT5wb29sLCBzLT5sb2dpbi5sZW4pOworICAgICAgICAgICAgICAgIGlmIChzLT5sb2dpbi5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2Nvbm5lY3Rpb24oY3R4LT5wZWVyLmNvbm5lY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBuZ3hfZGVzdHJveV9wb29sKGN0eC0+cG9vbCk7CisgICAgICAgICAgICAgICAgICAgIG5neF9pbWFwX3Nlc3Npb25faW50ZXJuYWxfc2VydmVyX2Vycm9yKHMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmd4X21lbWNweShzLT5sb2dpbi5kYXRhLCBjdHgtPmhlYWRlcl9zdGFydCwgcy0+bG9naW4ubGVuKTsKIAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtNTUwLDE0ICs1NjQsMTQgQEAKICAgICAgICAgICAgIG5neF9jbG9zZV9jb25uZWN0aW9uKGN0eC0+cGVlci5jb25uZWN0aW9uKTsKIAogICAgICAgICAgICAgaWYgKGN0eC0+ZXJyLmxlbikgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBzLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IGxvZ2luIGZhaWxlZDogXCIlVlwiIiwgJmN0eC0+ZXJybXNnKTsKKwogICAgICAgICAgICAgICAgIHMtPm91dCA9IGN0eC0+ZXJyOwogICAgICAgICAgICAgICAgIHRpbWVyID0gY3R4LT5zbGVlcDsKIAogICAgICAgICAgICAgICAgIG5neF9kZXN0cm95X3Bvb2woY3R4LT5wb29sKTsKIAotICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBzLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IGxvZ2luIGZhaWxlZCIpOwotCiAgICAgICAgICAgICAgICAgaWYgKHRpbWVyID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgcy0+cXVpdCA9IDE7CiAgICAgICAgICAgICAgICAgICAgIG5neF9pbWFwX3NlbmQocy0+Y29ubmVjdGlvbi0+d3JpdGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfaGFuZGxlci5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfaGFuZGxlci5jCmluZGV4IDRmZTEyNDguLmI4YzViZmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwX2hhbmRsZXIuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9oYW5kbGVyLmMKQEAgLTc2Nyw5ICs3NjcsOSBAQAogc3RhdGljIHVfY2hhciAqCiBuZ3hfaW1hcF9sb2dfZXJyb3Iobmd4X2xvZ190ICpsb2csIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewotICAgIHVfY2hhciAgICAgICAgICAgICAgICAgKnA7Ci0gICAgbmd4X2ltYXBfc2Vzc2lvbl90ICAgICAqczsKLSAgICBuZ3hfaW1hcF9sb2dfY3R4X3QgICAgICpjdHg7CisgICAgdV9jaGFyICAgICAgICAgICAgICAqcDsKKyAgICBuZ3hfaW1hcF9zZXNzaW9uX3QgICpzOworICAgIG5neF9pbWFwX2xvZ19jdHhfdCAgKmN0eDsKIAogICAgIGlmIChsb2ctPmFjdGlvbikgewogICAgICAgICBwID0gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLCAiIHdoaWxlICVzIiwgbG9nLT5hY3Rpb24pOwo=