ZGlmZiAtLWdpdCBhL2F1dG8vY2MvY2NjIGIvYXV0by9jYy9jY2MKaW5kZXggOTY4MDE1Zi4uMjk4ZjMxZSAxMDA2NDQKLS0tIGEvYXV0by9jYy9jY2MKKysrIGIvYXV0by9jYy9jY2MKQEAgLTEwLDI3ICsxMCwzMCBAQAogCiBDRkxBR1M9IiRDRkxBR1MgLW1zZ19lbmFibGUgbGV2ZWw2IC1tc2dfZmF0YWwgbGV2ZWw2IgogCitDRkxBR1M9IiRDRkxBR1MgLW1zZ19kaXNhYmxlIHVua25vd25tYWNybyIKK0NGTEFHUz0iJENGTEFHUyAtbXNnX2Rpc2FibGUgdW51c2VkaW5jbCIKIENGTEFHUz0iJENGTEFHUyAtbXNnX2Rpc2FibGUgdW5uZWNpbmNsIgogQ0ZMQUdTPSIkQ0ZMQUdTIC1tc2dfZGlzYWJsZSBuZXN0aW5jbCIKLUNGTEFHUz0iJENGTEFHUyAtbXNnX2Rpc2FibGUgdW51c2VkaW5jbCIKLUNGTEFHUz0iJENGTEFHUyAtbXNnX2Rpc2FibGUgdW5rbm93bm1hY3JvIgogQ0ZMQUdTPSIkQ0ZMQUdTIC1tc2dfZGlzYWJsZSBzdHJjdHBhZGRpbmciCiBDRkxBR1M9IiRDRkxBR1MgLW1zZ19kaXNhYmxlIGFuc2lhbGlhc2Nhc3QiCiBDRkxBR1M9IiRDRkxBR1MgLW1zZ19kaXNhYmxlIGlubGluZXN0b2Nsc21vZCIKIENGTEFHUz0iJENGTEFHUyAtbXNnX2Rpc2FibGUgY3h4a2V5d29yZCIKIENGTEFHUz0iJENGTEFHUyAtbXNnX2Rpc2FibGUgbG9uZ2xvbmdzdWZ4IgorQ0ZMQUdTPSIkQ0ZMQUdTIC1tc2dfZGlzYWJsZSB2YWx1ZXByZXMiCiAKICMgU1RVQgogQ0ZMQUdTPSIkQ0ZMQUdTIC1tc2dfZGlzYWJsZSB0cnVuY2ludGNhc3QiCiBDRkxBR1M9IiRDRkxBR1MgLW1zZ19kaXNhYmxlIHRydW5jbG9uZ2Nhc3QiCisKIENGTEFHUz0iJENGTEFHUyAtbXNnX2Rpc2FibGUgdHJ1bmNpbnRhc24iCiBDRkxBR1M9IiRDRkxBR1MgLW1zZ19kaXNhYmxlIHRydW5jbG9uZ2ludCIKIENGTEFHUz0iJENGTEFHUyAtbXNnX2Rpc2FibGUgaW50Y29uY2FzdHNnbiIKIENGTEFHUz0iJENGTEFHUyAtbXNnX2Rpc2FibGUgaW50Y29uc3RzaWduIgotQ0ZMQUdTPSIkQ0ZMQUdTIC1tc2dfZGlzYWJsZSBoZXhvY3R1bnNpZ24iCiBDRkxBR1M9IiRDRkxBR1MgLW1zZ19kaXNhYmxlIHN3aXRjaGxvbmciCi1DRkxBR1M9IiRDRkxBR1MgLW1zZ19kaXNhYmxlIHZhbHVlcHJlcyIKIENGTEFHUz0iJENGTEFHUyAtbXNnX2Rpc2FibGUgc3Vic2NyYm91bmRzMiIKKworQ0ZMQUdTPSIkQ0ZMQUdTIC1tc2dfZGlzYWJsZSBoZXhvY3R1bnNpZ24iCisKIENGTEFHUz0iJENGTEFHUyAtbXNnX2Rpc2FibGUgaWdub3JlY2FsbHZhbCIKIENGTEFHUz0iJENGTEFHUyAtbXNnX2Rpc2FibGUgbm9uc3RhbmRjYXN0IgogQ0ZMQUdTPSIkQ0ZMQUdTIC1tc2dfZGlzYWJsZSBlbWJlZGNvbW1lbnQiCkBAIC0zOCw0ICs0MSw1IEBACiBDRkxBR1M9IiRDRkxBR1MgLW1zZ19kaXNhYmxlIHF1ZXN0Y29tcGFyZTIiCiBDRkxBR1M9IiRDRkxBR1MgLW1zZ19kaXNhYmxlIHVudXNlZHRvcCIKIENGTEFHUz0iJENGTEFHUyAtbXNnX2Rpc2FibGUgdW5yZWZkZWNsIgorCiBDRkxBR1M9IiRDRkxBR1MgLW1zZ19kaXNhYmxlIGJpdG5vdGludCIKZGlmZiAtLWdpdCBhL2F1dG8vY2MvY29uZiBiL2F1dG8vY2MvY29uZgppbmRleCBiMmVhYmViLi40ZDE1MWRhIDEwMDY0NAotLS0gYS9hdXRvL2NjL2NvbmYKKysrIGIvYXV0by9jYy9jb25mCkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAuIGF1dG8vZmVhdHVyZQogCiAKLSAgICBpZiBbICROR1hfQ0NfTkFNRSA9ICdjY2MnIF07IHRoZW4KKyAgICBpZiBbICIkTkdYX0NDX05BTUUiID0gImNjYyIgXTsgdGhlbgogICAgICAgICBlY2hvICJjaGVja2luZyBmb3IgQzk5IHZhcmlhZGljIG1hY3JvcyAuLi4gZGlzYWJsZWQiCiAgICAgZWxzZQogICAgICAgICBuZ3hfZmVhdHVyZT0iQzk5IHZhcmlhZGljIG1hY3JvcyIKZGlmZiAtLWdpdCBhL2F1dG8vY2MvbmFtZSBiL2F1dG8vY2MvbmFtZQppbmRleCBmYjRmNDlhLi5jODljZTc5IDEwMDY0NAotLS0gYS9hdXRvL2NjL25hbWUKKysrIGIvYXV0by9jYy9uYW1lCkBAIC0zNCw3ICszNCw3IEBACiAgICAgZWNobyAiIHVzaW5nIEdOVSBDIGNvbXBpbGVyIgogCiBlbHNlCi1pZiBgJENDIC1WIDI+JjEgfCBncmVwICdeSW50ZWwoUikgQysrIENvbXBpbGVyJyAyPiYxID4vZGV2L251bGxgOyB0aGVuCitpZiBgJENDIC1WIDI+JjEgfCBncmVwICdeSW50ZWwoUikgQycgMj4mMSA+L2Rldi9udWxsYDsgdGhlbgogICAgIE5HWF9DQ19OQU1FPWljYwogICAgIGVjaG8gIiB1c2luZyBJbnRlbCBDKysgY29tcGlsZXIiCiAKQEAgLTQ5LDYgKzQ5LDcgQEAKICAgICBlY2hvICIgdXNpbmcgSFAgYUMrKyBjb21waWxlciIKIAogZWxzZQorICAgIE5HWF9DQ19OQU1FPXVua25vd24KICAgICBlY2hvICIgdW5rbm93biIKIAogZmkgIyBhY2MKZGlmZiAtLWdpdCBhL2F1dG8vb3MvY29uZiBiL2F1dG8vb3MvY29uZgppbmRleCAyMjZmOGRkLi42OTgxM2NlIDEwMDY0NAotLS0gYS9hdXRvL29zL2NvbmYKKysrIGIvYXV0by9vcy9jb25mCkBAIC01Myw4ICs1Myw5IEBACiAgICAgOzsKIAogICAgIE9TRjE6KikKLSAgICAgICAgIyBIUCBUcnU2NAorICAgICAgICAjIFRydTY0IFVOSVgKICAgICAgICAgaGF2ZT1OR1hfVFJVNjQgLiBhdXRvL2hhdmVfaGVhZGVycworICAgICAgICBoYXZlPU5HWF9IQVZFX1NUUkVSUk9SX1IgLiBhdXRvL25vaGF2ZQogICAgICAgICBDT1JFX0lOQ1M9IiRVTklYX0lOQ1MiCiAgICAgICAgIENPUkVfREVQUz0iJFVOSVhfREVQUyAkUE9TSVhfREVQUyIKICAgICAgICAgQ09SRV9TUkNTPSIkVU5JWF9TUkNTIgpkaWZmIC0tZ2l0IGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAppbmRleCBjZTdmNmMzLi5mNjVjNzA1IDEwMDY0NAotLS0gYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorKysgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbApAQCAtOSw2ICs5LDUzIEBACiA8dGl0bGUgbGFuZz0iZW4iPm5naW54IGNoYW5nZWxvZzwvdGl0bGU+CiAKIAorPGNoYW5nZXMgdmVyPSIwLjEuMzMiIGRhdGU9IjIzLjA1LjIwMDUiPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CituZ2lueCDOxSDTz8LJ0sHM09Eg0yDQwdLBzcXU0s/NIC0td2l0aG91dC1wY3JlOworz9vJwsvBINDP0dfJzMHT2CDXIDAuMS4yOS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK25naW54IGNvdWxkIG5vdCBiZSBidWlsdCB3aXRoIHRoZSAtLXdpdGhvdXQtcGNyZSBwYXJhbWV0ZXI7CitidWcgYXBwZWFyZWQgaW4gMC4xLjI5LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KKzMsIDUsIDcgySA4IMTJ0sXL1MnXIHByb3h5X3NldF9oZWFkZXIgzsEgz8TOz80g1dLP187FINfZ2tnXwczJCitidXMgZmF1bHQg0NLJINrB0NXTy8UuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CiszLCA0LCA3LCBhbmQgOCB0aGUgInByb3h5X3NldF9oZWFkZXIiIGRpcmVjdGl2ZXMgaW4gb25lIGxldmVsIGNhdXNlCit0aGUgYnVzIGZhdWx0IG9uIHN0YXJ0IHVwLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9cg0sXEydLFy9TByCDXztXU0skgSFRUUFMg08XS18XSwSDC2cwg1cvB2sHOINDSz9TPy8/MIEhUVFAuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgSFRUUCBwcm90b2NvbCB3YXMgc3BlY2lmaWVkIGluIHRoZSBIVFRQUyByZWRpcmVjdHMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorxdPMySDEydLFy9TJ18EgcmV3cml0ZSDJ09DPzNjaz9fBzMEg19nExczFzsnRINfO1dTSySDEydLFy9TJ19kgaWYsINTPCivXz9rX0sHdwczB09ggz9vJwsvBIDUwMC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK2lmIHRoZSAicmV3cml0ZSIgZGlyZWN0aXZlIHVzZWQgdGhlIGNhcHR1cmVzIGluc2lkZSB0aGUgImlmIiBkaXJlY3RpdmUsIHRoZW4KK3RoZSA1MDAgZXJyb3IgY29kZSB3YXMgcmV0dXJuZWQuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4xLjMyIiBkYXRlPSIxOS4wNS4yMDA1Ij4KIAogPGNoYW5nZSB0eXBlPSJidWdmaXgiPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguYyBiL3NyYy9jb3JlL25naW54LmMKaW5kZXggYmI2ZjA5My4uN2I5OGUxMiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguYworKysgYi9zcmMvY29yZS9uZ2lueC5jCkBAIC00NDAsNyArNDQwLDcgQEAKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KIAotICAgICAgICBuZ3hfY3B5c3RybigodV9jaGFyICopIG5neF9hcmd2W2ldLCAodV9jaGFyICopIGFyZ3ZbaV0sIGxlbik7CisgICAgICAgICh2b2lkKSBuZ3hfY3B5c3RybigodV9jaGFyICopIG5neF9hcmd2W2ldLCAodV9jaGFyICopIGFyZ3ZbaV0sIGxlbik7CiAgICAgfQogCiAgICAgbmd4X2FyZ3ZbaV0gPSBOVUxMOwpAQCAtNDczLDggKzQ3Myw4IEBACiAgICAgY2NmLT5tYXN0ZXIgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBjY2YtPndvcmtlcl9wcm9jZXNzZXMgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBjY2YtPmRlYnVnX3BvaW50cyA9IE5HWF9DT05GX1VOU0VUOwotICAgIGNjZi0+dXNlciA9IChuZ3hfdWlkX3QpIE5HWF9DT05GX1VOU0VUOwotICAgIGNjZi0+Z3JvdXAgPSAobmd4X2dpZF90KSBOR1hfQ09ORl9VTlNFVDsKKyAgICBjY2YtPnVzZXIgPSAobmd4X3VpZF90KSBOR1hfQ09ORl9VTlNFVF9VSU5UOworICAgIGNjZi0+Z3JvdXAgPSAobmd4X2dpZF90KSBOR1hfQ09ORl9VTlNFVF9VSU5UOwogI2lmIChOR1hfVEhSRUFEUykKICAgICBjY2YtPndvcmtlcl90aHJlYWRzID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgY2NmLT50aHJlYWRfc3RhY2tfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CkBAIC01MDcsNyArNTA3LDcgQEAKIAogI2lmICEoTkdYX1dJTjMyKQogCi0gICAgaWYgKGNjZi0+dXNlciA9PSAodWlkX3QpIE5HWF9DT05GX1VOU0VUICYmIGdldGV1aWQoKSA9PSAwKSB7CisgICAgaWYgKGNjZi0+dXNlciA9PSAodWlkX3QpIE5HWF9DT05GX1VOU0VUX1VJTlQgJiYgZ2V0ZXVpZCgpID09IDApIHsKIAogICAgICAgICBwd2QgPSBnZXRwd25hbShOR1hfVVNFUik7CiAgICAgICAgIGlmIChwd2QgPT0gTlVMTCkgewpAQCAtNTczLDcgKzU3Myw3IEBACiAgICAgc3RydWN0IGdyb3VwICAgICAqZ3JwOwogICAgIG5neF9zdHJfdCAgICAgICAgKnZhbHVlOwogCi0gICAgaWYgKGNjZi0+dXNlciAhPSAodWlkX3QpIE5HWF9DT05GX1VOU0VUKSB7CisgICAgaWYgKGNjZi0+dXNlciAhPSAodWlkX3QpIE5HWF9DT05GX1VOU0VUX1VJTlQpIHsKICAgICAgICAgcmV0dXJuICJpcyBkdXBsaWNhdGUiOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggZDFhNTY5My4uZWZjMzViOCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4xLjMyIgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMS4zMyIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfTkVXUElEX0VYVCAgICAgIi5uZXdiaW4iCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMgYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMKaW5kZXggNDIxNDNiZC4uMWE2NmVhOSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jCisrKyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKIAogICAgICAgICAgICAgY2FzZSAnfSc6Ci0gICAgICAgICAgICAgICAgaWYgKGNmLT5hcmdzLT5uZWx0cyA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoY2YtPmFyZ3MtPm5lbHRzICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIFwifVwiIGluICVzOiV1aSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YtPmNvbmZfZmlsZS0+ZmlsZS5uYW1lLmRhdGEsCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZmlnLmggYi9zcmMvY29yZS9uZ3hfY29uZmlnLmgKaW5kZXggNjc1ZDQyNy4uNDA0NWU3YSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZpZy5oCisrKyBiL3NyYy9jb3JlL25neF9jb25maWcuaApAQCAtMTI2LDkgKzEyNiw5IEBACiAKIAogI2lmICgoX19HTlVfXyA9PSAyKSAmJiAoX19HTlVDX01JTk9SX18gPCA4KSkKLSNkZWZpbmUgTkdYX01BWF9VSU5UMzJfVkFMVUUgIDB4ZmZmZmZmZmZMTAorI2RlZmluZSBOR1hfTUFYX1VJTlQzMl9WQUxVRSAgKHVpbnQzMl90KSAweGZmZmZmZmZmTEwKICNlbHNlCi0jZGVmaW5lIE5HWF9NQVhfVUlOVDMyX1ZBTFVFICAweGZmZmZmZmZmCisjZGVmaW5lIE5HWF9NQVhfVUlOVDMyX1ZBTFVFICAodWludDMyX3QpIDB4ZmZmZmZmZmYKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmggYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCmluZGV4IGVlZDk1NWEuLmJiY2EzMmIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKKysrIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaApAQCAtMTcsOCArMTcsOCBAQAogCiAgICAgc3RydWN0IHNvY2thZGRyICAqc29ja2FkZHI7CiAgICAgc29ja2xlbl90ICAgICAgICAgc29ja2xlbjsgICAgLyogc2l6ZSBvZiBzb2NrYWRkciAqLwotICAgIGludCAgICAgICAgICAgICAgIGFkZHI7ICAgICAgIC8qIG9mZnNldCB0byBhZGRyZXNzIGluIHNvY2thZGRyICovCi0gICAgaW50ICAgICAgICAgICAgICAgYWRkcl90ZXh0X21heF9sZW47CisgICAgc2l6ZV90ICAgICAgICAgICAgYWRkcjsgICAgICAgLyogb2Zmc2V0IHRvIGFkZHJlc3MgaW4gc29ja2FkZHIgKi8KKyAgICBzaXplX3QgICAgICAgICAgICBhZGRyX3RleHRfbWF4X2xlbjsKICAgICBuZ3hfc3RyX3QgICAgICAgICBhZGRyX3RleHQ7CiAKICAgICBpbnQgICAgICAgICAgICAgICBmYW1pbHk7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY3ljbGUuYyBiL3NyYy9jb3JlL25neF9jeWNsZS5jCmluZGV4IGVhZWJkYjAuLjNhMWMwMGUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jeWNsZS5jCisrKyBiL3NyYy9jb3JlL25neF9jeWNsZS5jCkBAIC03MTcsNyArNzE3LDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAjZWxzZQotICAgICAgICBpZiAodXNlciAhPSAobmd4X3VpZF90KSAtMSkgeworICAgICAgICBpZiAodXNlciAhPSAobmd4X3VpZF90KSBOR1hfQ09ORl9VTlNFVF9VSU5UKSB7CiAKICAgICAgICAgICAgIGlmIChuZ3hfZmlsZV9pbmZvKChjb25zdCBjaGFyICopIGZpbGVbaV0ubmFtZS5kYXRhLCAmZmkpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfZmlsZS5jIGIvc3JjL2NvcmUvbmd4X2ZpbGUuYwppbmRleCA0NmQyZTBhLi5lZmFiZDM5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfZmlsZS5jCisrKyBiL3NyYy9jb3JlL25neF9maWxlLmMKQEAgLTYxLDggKzYxLDggQEAKICAgICBuID0gbmd4X25leHRfdGVtcF9udW1iZXIoMCk7CiAKICAgICBmb3IgKCA7OyApIHsKLSAgICAgICAgbmd4X3NwcmludGYoZmlsZS0+bmFtZS5kYXRhICsgcGF0aC0+bmFtZS5sZW4gKyAxICsgcGF0aC0+bGVuLAotICAgICAgICAgICAgICAgICAgICAiJTBtdUElWiIsIG4pOworICAgICAgICAodm9pZCkgbmd4X3NwcmludGYoZmlsZS0+bmFtZS5kYXRhICsgcGF0aC0+bmFtZS5sZW4gKyAxICsgcGF0aC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUwbXVBJVoiLCBuKTsKIAogICAgICAgICBuZ3hfY3JlYXRlX2hhc2hlZF9maWxlbmFtZShmaWxlLCBwYXRoKTsKIApAQCAtMTIzLDcgKzEyMyw4IEBACiB2b2lkCiBuZ3hfY3JlYXRlX2hhc2hlZF9maWxlbmFtZShuZ3hfZmlsZV90ICpmaWxlLCBuZ3hfcGF0aF90ICpwYXRoKQogewotICAgIG5neF91aW50X3QgIGksIG5hbWUsIHBvcywgbGV2ZWw7CisgICAgc2l6ZV90ICAgICAgbmFtZSwgcG9zLCBsZXZlbDsKKyAgICBuZ3hfdWludF90ICBpOwogCiAgICAgbmFtZSA9IGZpbGUtPm5hbWUubGVuOwogICAgIHBvcyA9IHBhdGgtPm5hbWUubGVuICsgMTsKQEAgLTE1MSw4ICsxNTIsOSBAQAogbmd4X2ludF90CiBuZ3hfY3JlYXRlX3BhdGgobmd4X2ZpbGVfdCAqZmlsZSwgbmd4X3BhdGhfdCAqcGF0aCkKIHsKLSAgICBpbnQgICAgICAgIGksIHBvczsKLSAgICBuZ3hfZXJyX3QgIGVycjsKKyAgICBzaXplX3QgICAgICBwb3M7CisgICAgbmd4X2Vycl90ICAgZXJyOworICAgIG5neF91aW50X3QgIGk7CiAKICAgICBwb3MgPSBwYXRoLT5uYW1lLmxlbjsKIApAQCAtMzQ0LDcgKzM0Niw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodXNlciA9PSAobmd4X3VpZF90KSAtMSkgeworICAgICAgICBpZiAodXNlciA9PSAobmd4X3VpZF90KSBOR1hfQ09ORl9VTlNFVF9VSU5UKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfZmlsZS5oIGIvc3JjL2NvcmUvbmd4X2ZpbGUuaAppbmRleCAyYmRhODU4Li4xZWZlZTI5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfZmlsZS5oCisrKyBiL3NyYy9jb3JlL25neF9maWxlLmgKQEAgLTMzLDggKzMzLDggQEAKIAogc3RydWN0IG5neF9wYXRoX3MgewogICAgIG5neF9zdHJfdCAgICAgICAgICAgbmFtZTsKLSAgICBuZ3hfdWludF90ICAgICAgICAgIGxlbjsKLSAgICBuZ3hfdWludF90ICAgICAgICAgIGxldmVsWzNdOworICAgIHNpemVfdCAgICAgICAgICAgICAgbGVuOworICAgIHNpemVfdCAgICAgICAgICAgICAgbGV2ZWxbM107CiAgICAgbmd4X2djX2hhbmRsZXJfcHQgICBjbGVhbmVyOwogCiAgICAgdV9jaGFyICAgICAgICAgICAgICpjb25mX2ZpbGU7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfZ2FyYmFnZV9jb2xsZWN0b3IuYyBiL3NyYy9jb3JlL25neF9nYXJiYWdlX2NvbGxlY3Rvci5jCmluZGV4IDA3YTNmN2YuLjRlZWFlYjkgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9nYXJiYWdlX2NvbGxlY3Rvci5jCisrKyBiL3NyYy9jb3JlL25neF9nYXJiYWdlX2NvbGxlY3Rvci5jCkBAIC02LDcgKzYsNiBAQAogCiAjaW5jbHVkZSA8bmd4X2NvbmZpZy5oPgogI2luY2x1ZGUgPG5neF9jb3JlLmg+Ci0jaW5jbHVkZSA8bmd4X2dhcmJhZ2VfY29sbGVjdG9yLmg+CiAKIAogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfaW5ldC5jIGIvc3JjL2NvcmUvbmd4X2luZXQuYwppbmRleCBlN2JkYzQxLi43YjJkOGQ2IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfaW5ldC5jCisrKyBiL3NyYy9jb3JlL25neF9pbmV0LmMKQEAgLTIyNSw4ICsyMjUsOSBAQAogewogICAgIGNoYXIgICAgICAgICAgICAgICAgKmVycjsKICAgICB1X2NoYXIgICAgICAgICAgICAgICpob3N0OworICAgIHNpemVfdCAgICAgICAgICAgICAgIGxlbjsKICAgICBpbl9hZGRyX3QgICAgICAgICAgICBpbl9hZGRyOwotICAgIG5neF91aW50X3QgICAgICAgICAgIGksIGxlbjsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICBpOwogICAgIG5neF9wZWVyc190ICAgICAgICAgKnBlZXJzOwogICAgIHN0cnVjdCBob3N0ZW50ICAgICAgKmg7CiAgICAgc3RydWN0IHNvY2thZGRyX2luICAqc2luOwpAQCAtMjgxLDcgKzI4Miw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIG5neF9jcHlzdHJuKGhvc3QsIHUtPmhvc3QuZGF0YSwgdS0+aG9zdC5sZW4gKyAxKTsKKyAgICAodm9pZCkgbmd4X2NweXN0cm4oaG9zdCwgdS0+aG9zdC5kYXRhLCB1LT5ob3N0LmxlbiArIDEpOwogCiAgICAgLyogQUZfSU5FVCBvbmx5ICovCiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9sb2cuYyBiL3NyYy9jb3JlL25neF9sb2cuYwppbmRleCAyNzgyNTgyLi5lZmM2MmY5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfbG9nLmMKKysrIGIvc3JjL2NvcmUvbmd4X2xvZy5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAogICAgIGVycnN0cltsZW4rK10gPSBMRjsKIAotICAgIHdyaXRlKGxvZy0+ZmlsZS0+ZmQsIGVycnN0ciwgbGVuKTsKKyAgICAodm9pZCkgd3JpdGUobG9nLT5maWxlLT5mZCwgZXJyc3RyLCBsZW4pOwogCiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9vdXRwdXRfY2hhaW4uYyBiL3NyYy9jb3JlL25neF9vdXRwdXRfY2hhaW4uYwppbmRleCBlNGE4NzIzLi4xZTcyMjkxIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMKKysrIGIvc3JjL2NvcmUvbmd4X291dHB1dF9jaGFpbi5jCkBAIC0zODEsMTIgKzM4MSwxMiBAQAogICAgICAgICBuID0gbmd4X3JlYWRfZmlsZShzcmMtPmZpbGUsIGRzdC0+cG9zLCAoc2l6ZV90KSBzaXplLCBzcmMtPmZpbGVfcG9zKTsKIAogICAgICAgICBpZiAobiA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBuOworICAgICAgICAgICAgcmV0dXJuIChuZ3hfaW50X3QpIG47CiAgICAgICAgIH0KIAogI2lmIChOR1hfRklMRV9BSU9fUkVBRCkKICAgICAgICAgaWYgKG4gPT0gTkdYX0FHQUlOKSB7Ci0gICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgICAgIHJldHVybiAobmd4X2ludF90KSBuOwogICAgICAgICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3N0cmluZy5jIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5jCmluZGV4IDhkNjljMWIuLjAzMDdiYjEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9zdHJpbmcuYworKysgYi9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICAgICAgcmV0dXJuIGRzdDsKICAgICB9CiAKLSAgICBmb3IgKC8qIHZvaWQgKi87IC0tbjsgZHN0KyssIHNyYysrKSB7CisgICAgZm9yICggLyogdm9pZCAqLyA7IC0tbjsgZHN0KyssIHNyYysrKSB7CiAgICAgICAgICpkc3QgPSAqc3JjOwogCiAgICAgICAgIGlmICgqZHN0ID09ICdcMCcpIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF90aW1lcy5jIGIvc3JjL2NvcmUvbmd4X3RpbWVzLmMKaW5kZXggMzA5MzhhMS4uZjQzOTg3ZSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3RpbWVzLmMKKysrIGIvc3JjL2NvcmUvbmd4X3RpbWVzLmMKQEAgLTE1NSwxNCArMTU1LDE0IEBACiAKICAgICBwID0gY2FjaGVkX2h0dHBfdGltZVtzbG90XTsKIAotICAgIG5neF9zcHJpbnRmKHAsICIlcywgJTAyZCAlcyAlNGQgJTAyZDolMDJkOiUwMmQgR01UIiwKLSAgICAgICAgICAgICAgICB3ZWVrW25neF9jYWNoZWRfZ210aW1lLm5neF90bV93ZGF5XSwKLSAgICAgICAgICAgICAgICBuZ3hfY2FjaGVkX2dtdGltZS5uZ3hfdG1fbWRheSwKLSAgICAgICAgICAgICAgICBtb250aHNbbmd4X2NhY2hlZF9nbXRpbWUubmd4X3RtX21vbiAtIDFdLAotICAgICAgICAgICAgICAgIG5neF9jYWNoZWRfZ210aW1lLm5neF90bV95ZWFyLAotICAgICAgICAgICAgICAgIG5neF9jYWNoZWRfZ210aW1lLm5neF90bV9ob3VyLAotICAgICAgICAgICAgICAgIG5neF9jYWNoZWRfZ210aW1lLm5neF90bV9taW4sCi0gICAgICAgICAgICAgICAgbmd4X2NhY2hlZF9nbXRpbWUubmd4X3RtX3NlYyk7CisgICAgKHZvaWQpIG5neF9zcHJpbnRmKHAsICIlcywgJTAyZCAlcyAlNGQgJTAyZDolMDJkOiUwMmQgR01UIiwKKyAgICAgICAgICAgICAgICAgICAgICAgd2Vla1tuZ3hfY2FjaGVkX2dtdGltZS5uZ3hfdG1fd2RheV0sCisgICAgICAgICAgICAgICAgICAgICAgIG5neF9jYWNoZWRfZ210aW1lLm5neF90bV9tZGF5LAorICAgICAgICAgICAgICAgICAgICAgICBtb250aHNbbmd4X2NhY2hlZF9nbXRpbWUubmd4X3RtX21vbiAtIDFdLAorICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2FjaGVkX2dtdGltZS5uZ3hfdG1feWVhciwKKyAgICAgICAgICAgICAgICAgICAgICAgbmd4X2NhY2hlZF9nbXRpbWUubmd4X3RtX2hvdXIsCisgICAgICAgICAgICAgICAgICAgICAgIG5neF9jYWNoZWRfZ210aW1lLm5neF90bV9taW4sCisgICAgICAgICAgICAgICAgICAgICAgIG5neF9jYWNoZWRfZ210aW1lLm5neF90bV9zZWMpOwogCiAgICAgbmd4X2NhY2hlZF9odHRwX3RpbWUuZGF0YSA9IHA7CiAKQEAgLTE3NSw3ICsxNzUsNyBAQAogI2VsaWYgKE5HWF9IQVZFX0dNVE9GRikKIAogICAgIG5neF9sb2NhbHRpbWUoJnRtKTsKLSAgICBuZ3hfZ210b2ZmID0gdG0ubmd4X3RtX2dtdG9mZiAvIDYwOworICAgIG5neF9nbXRvZmYgPSAobmd4X2ludF90KSAodG0ubmd4X3RtX2dtdG9mZiAvIDYwKTsKIAogI2Vsc2UKIApAQCAtMTg3LDIyICsxODcsMjIgQEAKIAogICAgIHAgPSBjYWNoZWRfZXJyX2xvZ190aW1lW3Nsb3RdOwogCi0gICAgbmd4X3NwcmludGYocCwgIiU0ZC8lMDJkLyUwMmQgJTAyZDolMDJkOiUwMmQiLAotICAgICAgICAgICAgICAgIHRtLm5neF90bV95ZWFyLCB0bS5uZ3hfdG1fbW9uLAotICAgICAgICAgICAgICAgIHRtLm5neF90bV9tZGF5LCB0bS5uZ3hfdG1faG91ciwKLSAgICAgICAgICAgICAgICB0bS5uZ3hfdG1fbWluLCB0bS5uZ3hfdG1fc2VjKTsKKyAgICAodm9pZCkgbmd4X3NwcmludGYocCwgIiU0ZC8lMDJkLyUwMmQgJTAyZDolMDJkOiUwMmQiLAorICAgICAgICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1feWVhciwgdG0ubmd4X3RtX21vbiwKKyAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX21kYXksIHRtLm5neF90bV9ob3VyLAorICAgICAgICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1fbWluLCB0bS5uZ3hfdG1fc2VjKTsKIAogICAgIG5neF9jYWNoZWRfZXJyX2xvZ190aW1lLmRhdGEgPSBwOwogCiAKICAgICBwID0gY2FjaGVkX2h0dHBfbG9nX3RpbWVbc2xvdF07CiAKLSAgICBuZ3hfc3ByaW50ZihwLCAiJTAyZC8lcy8lZDolMDJkOiUwMmQ6JTAyZCAlYyUwMmQlMDJkIiwKLSAgICAgICAgICAgICAgICB0bS5uZ3hfdG1fbWRheSwgbW9udGhzW3RtLm5neF90bV9tb24gLSAxXSwKLSAgICAgICAgICAgICAgICB0bS5uZ3hfdG1feWVhciwgdG0ubmd4X3RtX2hvdXIsCi0gICAgICAgICAgICAgICAgdG0ubmd4X3RtX21pbiwgdG0ubmd4X3RtX3NlYywKLSAgICAgICAgICAgICAgICBuZ3hfZ210b2ZmIDwgMCA/ICctJyA6ICcrJywKLSAgICAgICAgICAgICAgICBhYnMobmd4X2dtdG9mZiAvIDYwKSwgYWJzKG5neF9nbXRvZmYgJSA2MCkpOworICAgICh2b2lkKSBuZ3hfc3ByaW50ZihwLCAiJTAyZC8lcy8lZDolMDJkOiUwMmQ6JTAyZCAlYyUwMmQlMDJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX21kYXksIG1vbnRoc1t0bS5uZ3hfdG1fbW9uIC0gMV0sCisgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV95ZWFyLCB0bS5uZ3hfdG1faG91ciwKKyAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX21pbiwgdG0ubmd4X3RtX3NlYywKKyAgICAgICAgICAgICAgICAgICAgICAgbmd4X2dtdG9mZiA8IDAgPyAnLScgOiAnKycsCisgICAgICAgICAgICAgICAgICAgICAgIGFicyhuZ3hfZ210b2ZmIC8gNjApLCBhYnMobmd4X2dtdG9mZiAlIDYwKSk7CiAKICAgICBuZ3hfY2FjaGVkX2h0dHBfbG9nX3RpbWUuZGF0YSA9IHA7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF91bml4X2RvbWFpbi5jIGIvc3JjL2NvcmUvbmd4X3VuaXhfZG9tYWluLmMKaW5kZXggYTdmZGQ2My4uMDk3ZDExMSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3VuaXhfZG9tYWluLmMKKysrIGIvc3JjL2NvcmUvbmd4X3VuaXhfZG9tYWluLmMKQEAgLTcyLDcgKzcyLDcgQEAKICAgICBwZWVycy0+bnVtYmVyID0gMTsKIAogICAgIHN1bi0+c3VuX2ZhbWlseSA9IEFGX1VOSVg7Ci0gICAgbmd4X2NweXN0cm4oKHVfY2hhciAqKSBzdW4tPnN1bl9wYXRoLCB1LT51cmwuZGF0YSArIDUsIGxlbiArIDEpOworICAgICh2b2lkKSBuZ3hfY3B5c3RybigodV9jaGFyICopIHN1bi0+c3VuX3BhdGgsIHUtPnVybC5kYXRhICsgNSwgbGVuICsgMSk7CiAKICAgICBwZWVycy0+cGVlclswXS5zb2NrYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgc3VuOwogICAgIHBlZXJzLT5wZWVyWzBdLnNvY2tsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCmluZGV4IGEyNGJlMjQuLjkyZGQ2Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYwpAQCAtMzExLDggKzMxMSw4IEBACiAKIAogc3RhdGljIG5neF90YWJsZV9lbHRfdCAgbmd4X2h0dHBfcHJveHlfaGVhZGVyc1tdID0gewotICAgIHsgMCwgbmd4X3N0cmluZygiSG9zdCIpLCBuZ3hfc3RyaW5nKCIkcHJveHlfaG9zdCIpLCB9LAotICAgIHsgMCwgbmd4X3N0cmluZygiQ29ubmVjdGlvbiIpLCBuZ3hfc3RyaW5nKCJjbG9zZSIpLCB9LAorICAgIHsgMCwgbmd4X3N0cmluZygiSG9zdCIpLCBuZ3hfc3RyaW5nKCIkcHJveHlfaG9zdCIpIH0sCisgICAgeyAwLCBuZ3hfc3RyaW5nKCJDb25uZWN0aW9uIiksIG5neF9zdHJpbmcoImNsb3NlIikgfSwKICAgICB7IDAsIG5neF9udWxsX3N0cmluZywgbmd4X251bGxfc3RyaW5nIH0KIH07CiAKQEAgLTE1NjAsNiArMTU2MCw4IEBACiAKICAgICAgICAgKnMgPSAqaDsKIAorICAgICAgICBzcmMgPSBjb25mLT5oZWFkZXJzX3NvdXJjZS0+ZWx0czsKKwogICAgIG5leHQ6CiAKICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfbW9kdWxlLmMKaW5kZXggNDdmZjhjNS4uZGE0NzE5YiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUuYwpAQCAtNTU2LDggKzU1Niw3IEBACiAgICAgcmVnZXhfZW5kLT5yZWRpcmVjdCA9IHJlZ2V4LT5yZWRpcmVjdDsKIAogICAgIGlmIChsYXN0KSB7Ci0gICAgICAgIGNvZGUgPSBuZ3hfaHR0cF9zY3JpcHRfYWRkX2NvZGUobGNmLT5jb2Rlcywgc2l6ZW9mKHVpbnRwdHJfdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlZ2V4KTsKKyAgICAgICAgY29kZSA9IG5neF9odHRwX3NjcmlwdF9hZGRfY29kZShsY2YtPmNvZGVzLCBzaXplb2YodWludHB0cl90KSwgJnJlZ2V4KTsKICAgICAgICAgaWYgKGNvZGUgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CkBAIC03MTMsNiArNzEyLDExIEBACiAgICAgfQogCiAKKyAgICBpZiAobGNmLT5jYXB0dXJlcyA8IG5sY2YtPmNhcHR1cmVzKSB7CisgICAgICAgIGxjZi0+Y2FwdHVyZXMgPSBubGNmLT5jYXB0dXJlczsKKyAgICB9CisKKwogICAgIGlmIChlbHRzICE9IGxjZi0+Y29kZXMtPmVsdHMpIHsKICAgICAgICAgaWZfY29kZSA9IChuZ3hfaHR0cF9zY3JpcHRfaWZfY29kZV90ICopCiAgICAgICAgICAgICAgICAgICAgKCh1X2NoYXIgKikgaWZfY29kZSArICgodV9jaGFyICopIGxjZi0+Y29kZXMtPmVsdHMgLSBlbHRzKSk7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcl9tb2R1bGUuYwppbmRleCBmM2RlZmEwLi5hNDVmMmU1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXJfbW9kdWxlLmMKQEAgLTI2NCwxMSArMjY0LDI2IEBACiAgICAgewogICAgICAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+aGFzaCA9IDA7CiAKLSAgICAgICAgbGVuICs9IHNpemVvZigiTG9jYXRpb246IGh0dHA6Ly8iKSAtIDEKLSAgICAgICAgICAgICAgICsgci0+c2VydmVyX25hbWUubGVuICsgci0+aGVhZGVyc19vdXQubG9jYXRpb24tPnZhbHVlLmxlbiArIDI7CisjaWYgKE5HWF9IVFRQX1NTTCkKKyAgICAgICAgaWYgKHItPmNvbm5lY3Rpb24tPnNzbCkgeworICAgICAgICAgICAgbGVuICs9IHNpemVvZigiTG9jYXRpb246IGh0dHBzOi8vIikgLSAxCisgICAgICAgICAgICAgICAgICAgKyByLT5zZXJ2ZXJfbmFtZS5sZW4KKyAgICAgICAgICAgICAgICAgICArIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT52YWx1ZS5sZW4gKyAyOwogCi0gICAgICAgIGlmIChyLT5wb3J0ICE9IDgwKSB7Ci0gICAgICAgICAgICBsZW4gKz0gci0+cG9ydF90ZXh0LT5sZW47CisgICAgICAgICAgICBpZiAoci0+cG9ydCAhPSA0NDMpIHsKKyAgICAgICAgICAgICAgICBsZW4gKz0gci0+cG9ydF90ZXh0LT5sZW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgbGVuICs9IHNpemVvZigiTG9jYXRpb246IGh0dHA6Ly8iKSAtIDEKKyAgICAgICAgICAgICAgICAgICArIHItPnNlcnZlcl9uYW1lLmxlbgorICAgICAgICAgICAgICAgICAgICsgci0+aGVhZGVyc19vdXQubG9jYXRpb24tPnZhbHVlLmxlbiArIDI7CisKKyAgICAgICAgICAgIGlmIChyLT5wb3J0ICE9IDgwKSB7CisgICAgICAgICAgICAgICAgbGVuICs9IHItPnBvcnRfdGV4dC0+bGVuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0zOTYsMTMgKzQxMSwzMyBAQAogICAgICAgICAmJiByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+dmFsdWUuZGF0YVswXSA9PSAnLycpCiAgICAgewogICAgICAgICBwID0gYi0+bGFzdCArIHNpemVvZigiTG9jYXRpb246ICIpIC0gMTsKLSAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgIkxvY2F0aW9uOiBodHRwOi8vIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJMb2NhdGlvbjogaHR0cDovLyIpIC0gMSk7CisKKyAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgIkxvY2F0aW9uOiBodHRwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJMb2NhdGlvbjogaHR0cCIpIC0gMSk7CisKKyNpZiAoTkdYX0hUVFBfU1NMKQorICAgICAgICBpZiAoci0+Y29ubmVjdGlvbi0+c3NsKSB7CisgICAgICAgICAgICAqYi0+bGFzdCsrID0ncyc7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgICpiLT5sYXN0KysgPSAnOic7ICpiLT5sYXN0KysgPSAnLyc7ICpiLT5sYXN0KysgPSAnLyc7CiAgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIHItPnNlcnZlcl9uYW1lLmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnNlcnZlcl9uYW1lLmxlbik7Ci0gICAgICAgIGlmIChyLT5wb3J0ICE9IDgwKSB7Ci0gICAgICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCByLT5wb3J0X3RleHQtPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5wb3J0X3RleHQtPmxlbik7CisKKyNpZiAoTkdYX0hUVFBfU1NMKQorICAgICAgICBpZiAoci0+Y29ubmVjdGlvbi0+c3NsKSB7CisgICAgICAgICAgICBpZiAoci0+cG9ydCAhPSA0NDMpIHsKKyAgICAgICAgICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCByLT5wb3J0X3RleHQtPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+cG9ydF90ZXh0LT5sZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoci0+cG9ydCAhPSA4MCkgeworICAgICAgICAgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIHItPnBvcnRfdGV4dC0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5wb3J0X3RleHQtPmxlbik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+dmFsdWUuZGF0YSwKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMKaW5kZXggZWExZTU2Yi4uODkyNTZiMyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMKQEAgLTQ2Myw2ICs0NjMsOSBAQAogfQogCiAKKworI2lmIChOR1hfUENSRSkKKwogdm9pZAogbmd4X2h0dHBfc2NyaXB0X3JlZ2V4X3N0YXJ0X2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKQogewpAQCAtNjkzLDYgKzY5Niw4IEBACiAgICAgZS0+aXAgKz0gc2l6ZW9mKG5neF9odHRwX3NjcmlwdF9yZWdleF9lbmRfY29kZV90KTsKIH0KIAorI2VuZGlmCisKIAogdm9pZAogbmd4X2h0dHBfc2NyaXB0X3JldHVybl9jb2RlKG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCAqZSkKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKaW5kZXggY2Y4MGYyMi4uZWI2ZjE3ZSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKQEAgLTc5LDYgKzc5LDggQEAKIH0gbmd4X2h0dHBfc2NyaXB0X2NvcHlfY2FwdHVyZV9jb2RlX3Q7CiAKIAorI2lmIChOR1hfUENSRSkKKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIG5neF9odHRwX3NjcmlwdF9jb2RlX3B0ICAgICAgICAgIGNvZGU7CiAgICAgbmd4X3JlZ2V4X3QgICAgICAgICAgICAgICAgICAgICAqcmVnZXg7CkBAIC0xMTQsNiArMTE2LDggQEAKICAgICB1aW50cHRyX3QgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDoxOwogfSBuZ3hfaHR0cF9zY3JpcHRfcmVnZXhfZW5kX2NvZGVfdDsKIAorI2VuZGlmCisKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIG5neF9odHRwX3NjcmlwdF9jb2RlX3B0ICAgICAgICAgIGNvZGU7CkBAIC0xNTYsMTAgKzE2MCwxMSBAQAogdm9pZCBuZ3hfaHR0cF9zY3JpcHRfY29weV92YXJfY29kZShuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKmUpOwogc2l6ZV90IG5neF9odHRwX3NjcmlwdF9jb3B5X2NhcHR1cmVfbGVuX2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKTsKIHZvaWQgbmd4X2h0dHBfc2NyaXB0X2NvcHlfY2FwdHVyZV9jb2RlKG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCAqZSk7Cit2b2lkIG5neF9odHRwX3NjcmlwdF9zdGFydF9hcmdzX2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKTsKKyNpZiAoTkdYX1BDUkUpCiB2b2lkIG5neF9odHRwX3NjcmlwdF9yZWdleF9zdGFydF9jb2RlKG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCAqZSk7CiB2b2lkIG5neF9odHRwX3NjcmlwdF9yZWdleF9lbmRfY29kZShuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKmUpOwotdm9pZCBuZ3hfaHR0cF9zY3JpcHRfY29weV9jYXB0dXJlX2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKTsKLXZvaWQgbmd4X2h0dHBfc2NyaXB0X3N0YXJ0X2FyZ3NfY29kZShuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKmUpOworI2VuZGlmCiB2b2lkIG5neF9odHRwX3NjcmlwdF9yZXR1cm5fY29kZShuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKmUpOwogdm9pZCBuZ3hfaHR0cF9zY3JpcHRfaWZfY29kZShuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKmUpOwogdm9pZCBuZ3hfaHR0cF9zY3JpcHRfY29tcGxleF92YWx1ZV9jb2RlKG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCAqZSk7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZXJybm8uaCBiL3NyYy9vcy91bml4L25neF9lcnJuby5oCmluZGV4IDUxZDYwOGIuLjMxMGExZGMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9lcnJuby5oCisrKyBiL3NyYy9vcy91bml4L25neF9lcnJuby5oCkBAIC01Miw3ICs1Miw3IEBACiAKICNlbHNlCiAKLS8qIFNvbGFyaXMgaGFzIHRocmVhZC1zYWZlIHN0cmVycm9yKCkgKi8KKy8qIFNvbGFyaXMgYW5kIFRydTY0IFVOSVggaGF2ZSB0aHJlYWQtc2FmZSBzdHJlcnJvcigpICovCiAKICNkZWZpbmUgbmd4X3N0cmVycm9yX3IoZXJyLCBlcnJzdHIsIHNpemUpICBcCiAgICAgbmd4X2NweXN0cm4oZXJyc3RyLCAodV9jaGFyICopIHN0cmVycm9yKGVyciksIHNpemUpCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfdGltZS5jIGIvc3JjL29zL3VuaXgvbmd4X3RpbWUuYwppbmRleCA3MjEzN2Y5Li4xYjFhNTY2IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfdGltZS5jCisrKyBiL3NyYy9vcy91bml4L25neF90aW1lLmMKQEAgLTE0LDcgKzE0LDcgQEAKICAgICB0aW1lX3QgICAgIG5vdzsKIAogICAgIG5vdyA9IG5neF90aW1lKCk7Ci0gICAgbG9jYWx0aW1lX3IoJm5vdywgdG0pOworICAgICh2b2lkKSBsb2NhbHRpbWVfcigmbm93LCB0bSk7CiAKICNlbHNlCiAgICAgdGltZV90ICAgICBub3c7CkBAIC0zNyw3ICszNyw3IEBACiAgICAgdGltZV90ICAgICAgbm93OwogCiAgICAgbm93ID0gbmd4X3RpbWUoKTsKLSAgICBsb2NhbHRpbWVfcigmbm93LCB0bSk7CisgICAgKHZvaWQpIGxvY2FsdGltZV9yKCZub3csIHRtKTsKIAogI2Vsc2UKICAgICB0aW1lX3QgICAgICBub3c7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgdGltZV90ICAgICAgbm93OwogCiAgICAgbm93ID0gbmd4X3RpbWUoKTsKLSAgICBnbXRpbWVfcigmbm93LCB0bSk7CisgICAgKHZvaWQpIGdtdGltZV9yKCZub3csIHRtKTsKIAogI2Vsc2UKICAgICB0aW1lX3QgICAgICBub3c7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfdGltZS5oIGIvc3JjL29zL3VuaXgvbmd4X3RpbWUuaAppbmRleCA2ZTVhMzhhLi5kM2QxNzZmIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfdGltZS5oCisrKyBiL3NyYy9vcy91bml4L25neF90aW1lLmgKQEAgLTU3LDkgKzU3LDkgQEAKIHZvaWQgbmd4X2xpYmNfbG9jYWx0aW1lKHN0cnVjdCB0bSAqdG0pOwogdm9pZCBuZ3hfbGliY19nbXRpbWUoc3RydWN0IHRtICp0bSk7CiAKLSNkZWZpbmUgbmd4X2dldHRpbWVvZmRheSh0cCkgIGdldHRpbWVvZmRheSh0cCwgTlVMTCk7Ci0jZGVmaW5lIG5neF9tc2xlZXAobXMpICAgICAgICB1c2xlZXAobXMgKiAxMDAwKQotI2RlZmluZSBuZ3hfc2xlZXAocykgICAgICAgICAgc2xlZXAocykKKyNkZWZpbmUgbmd4X2dldHRpbWVvZmRheSh0cCkgICh2b2lkKSBnZXR0aW1lb2ZkYXkodHAsIE5VTEwpOworI2RlZmluZSBuZ3hfbXNsZWVwKG1zKSAgICAgICAgKHZvaWQpIHVzbGVlcChtcyAqIDEwMDApCisjZGVmaW5lIG5neF9zbGVlcChzKSAgICAgICAgICAodm9pZCkgc2xlZXAocykKIAogCiAjZW5kaWYgLyogX05HWF9USU1FX0hfSU5DTFVERURfICovCg==