ZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKaW5kZXggNmI5YzcxNS4uMDYzNmRlZSAxMDA2NDQKLS0tIGEvLmdpdGF0dHJpYnV0ZXMKKysrIGIvLmdpdGF0dHJpYnV0ZXMKQEAgLTEsMiArMSwyIEBACiAqIHdoaXRlc3BhY2U9IWluZGVudCx0cmFpbCxzcGFjZQotKi5bY2hdIHdoaXRlc3BhY2UKKyouW2NoXSB3aGl0ZXNwYWNlPWluZGVudCx0cmFpbCxzcGFjZQpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggZDlhZGNlNS4uNDFjMGIyMCAxMDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0xMSw2ICsxMSw3IEBACiBnaXQtYXJjaGltcG9ydAogZ2l0LWFyY2hpdmUKIGdpdC1iaXNlY3QKK2dpdC1iaXNlY3QtLWhlbHBlcgogZ2l0LWJsYW1lCiBnaXQtYnJhbmNoCiBnaXQtYnVuZGxlCkBAIC0zNSw2ICszNiw4IEBACiBnaXQtZGlmZi1maWxlcwogZ2l0LWRpZmYtaW5kZXgKIGdpdC1kaWZmLXRyZWUKK2dpdC1kaWZmdG9vbAorZ2l0LWRpZmZ0b29sLS1oZWxwZXIKIGdpdC1kZXNjcmliZQogZ2l0LWZhc3QtZXhwb3J0CiBnaXQtZmFzdC1pbXBvcnQKQEAgLTc4LDYgKzgxLDcgQEAKIGdpdC1tZXJnZS1yZXNvbHZlCiBnaXQtbWVyZ2Utc3VidHJlZQogZ2l0LW1lcmdldG9vbAorZ2l0LW1lcmdldG9vbC0tbGliCiBnaXQtbWt0YWcKIGdpdC1ta3RyZWUKIGdpdC1uYW1lLXJldgpAQCAtMTQ0LDYgKzE0OCw3IEBACiBnaXRrLXdpc2gKIGdpdHdlYi9naXR3ZWIuY2dpCiB0ZXN0LWNobXRpbWUKK3Rlc3QtY3R5cGUKIHRlc3QtZGF0ZQogdGVzdC1kZWx0YQogdGVzdC1kdW1wLWNhY2hlLXRyZWUKQEAgLTE1Miw2ICsxNTcsNyBAQAogdGVzdC1wYXJzZS1vcHRpb25zCiB0ZXN0LXBhdGgtdXRpbHMKIHRlc3Qtc2hhMQordGVzdC1zaWdjaGFpbgogY29tbW9uLWNtZHMuaAogKi50YXIuZ3oKICouZHNjCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0NvZGluZ0d1aWRlbGluZXMgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ0d1aWRlbGluZXMKaW5kZXggZjYyOGMxZi4uYjhiZjYxOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzCisrKyBiL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcwpAQCAtMjEsOCArMjEsMTMgQEAKIAogQXMgZm9yIG1vcmUgY29uY3JldGUgZ3VpZGVsaW5lcywganVzdCBpbWl0YXRlIHRoZSBleGlzdGluZyBjb2RlCiAodGhpcyBpcyBhIGdvb2QgZ3VpZGVsaW5lLCBubyBtYXR0ZXIgd2hpY2ggcHJvamVjdCB5b3UgYXJlCi1jb250cmlidXRpbmcgdG8pLiAgQnV0IGlmIHlvdSBtdXN0IGhhdmUgYSBsaXN0IG9mIHJ1bGVzLAotaGVyZSB0aGV5IGFyZS4KK2NvbnRyaWJ1dGluZyB0bykuIEl0IGlzIGFsd2F5cyBwcmVmZXJhYmxlIHRvIG1hdGNoIHRoZSBfbG9jYWxfCitjb252ZW50aW9uLiBOZXcgY29kZSBhZGRlZCB0byBnaXQgc3VpdGUgaXMgZXhwZWN0ZWQgdG8gbWF0Y2gKK3RoZSBvdmVyYWxsIHN0eWxlIG9mIGV4aXN0aW5nIGNvZGUuIE1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcKK2NvZGUgaXMgZXhwZWN0ZWQgdG8gbWF0Y2ggdGhlIHN0eWxlIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFscmVhZHkKK3VzZXMgKGV2ZW4gaWYgaXQgZG9lc24ndCBtYXRjaCB0aGUgb3ZlcmFsbCBzdHlsZSBvZiBleGlzdGluZyBjb2RlKS4KKworQnV0IGlmIHlvdSBtdXN0IGhhdmUgYSBsaXN0IG9mIHJ1bGVzLCBoZXJlIHRoZXkgYXJlLgogCiBGb3Igc2hlbGwgc2NyaXB0cyBzcGVjaWZpY2FsbHkgKG5vdCBleGhhdXN0aXZlKToKIApAQCAtMTI0LDMgKzEyOSw2IEBACiAgICB1c2VkIGluIHRoZSBnaXQgY29yZSBjb21tYW5kIHNldCAodW5sZXNzIHlvdXIgY29tbWFuZCBpcyBjbGVhcmx5CiAgICBzZXBhcmF0ZSBmcm9tIGl0LCBzdWNoIGFzIGFuIGltcG9ydGVyIHRvIGNvbnZlcnQgcmFuZG9tLXNjbS1YCiAgICByZXBvc2l0b3JpZXMgdG8gZ2l0KS4KKworIC0gV2hlbiB3ZSBwYXNzIDxzdHJpbmcsIGxlbmd0aD4gcGFpciB0byBmdW5jdGlvbnMsIHdlIHNob3VsZCB0cnkgdG8KKyAgIHBhc3MgdGhlbSBpbiB0aGF0IG9yZGVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKaW5kZXggYzM0YzFjYS4uMDZiMGM1NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCkBAIC0zMiw2ICszMiw3IEBACiBwcmVmaXg/PSQoSE9NRSkKIGJpbmRpcj89JChwcmVmaXgpL2JpbgogaHRtbGRpcj89JChwcmVmaXgpL3NoYXJlL2RvYy9naXQtZG9jCitwZGZkaXI/PSQocHJlZml4KS9zaGFyZS9kb2MvZ2l0LWRvYwogbWFuZGlyPz0kKHByZWZpeCkvc2hhcmUvbWFuCiBtYW4xZGlyPSQobWFuZGlyKS9tYW4xCiBtYW41ZGlyPSQobWFuZGlyKS9tYW41CkBAIC00MCw3ICs0MSw4IEBACiAKIEFTQ0lJRE9DPWFzY2lpZG9jCiBBU0NJSURPQ19FWFRSQSA9Ci1NQU5QQUdFX1hTTCA9IGNhbGxvdXRzLnhzbAorTUFOUEFHRV9YU0wgPSBtYW5wYWdlLW5vcm1hbC54c2wKK1hNTFRPX0VYVFJBID0KIElOU1RBTEw/PWluc3RhbGwKIFJNID89IHJtIC1mCiBET0NfUkVGID0gb3JpZ2luL21hbgpAQCAtNTAsNiArNTIsNyBAQAogTUFLRUlORk89bWFrZWluZm8KIElOU1RBTExfSU5GTz1pbnN0YWxsLWluZm8KIERPQ0JPT0syWF9URVhJPWRvY2Jvb2syeC10ZXhpCitEQkxBVEVYPWRibGF0ZXgKIGlmbmRlZiBQRVJMX1BBVEgKIAlQRVJMX1BBVEggPSAvdXNyL2Jpbi9wZXJsCiBlbmRpZgpAQCAtNTcsMTMgKzYwLDUyIEBACiAtaW5jbHVkZSAuLi9jb25maWcubWFrLmF1dG9nZW4KIC1pbmNsdWRlIC4uL2NvbmZpZy5tYWsKIAorIworIyBGb3IgYXNjaWlkb2MgLi4uCisjCS03LjEuMiwJbm8gZXh0cmEgc2V0dGluZ3MgYXJlIG5lZWRlZC4KKyMJOC4wLSwJc2V0IEFTQ0lJRE9DOC4KKyMKKworIworIyBGb3IgZG9jYm9vay14c2wgLi4uCisjCS0xLjY4LjEsCXNldCBBU0NJSURPQ19OT19ST0ZGPyAoYmFzZWQgb24gY2hhbmdlbG9nIGZyb20gMS43My4wKQorIwkxLjY5LjAsCQlubyBleHRyYSBzZXR0aW5ncyBhcmUgbmVlZGVkPworIwkxLjY5LjEtMS43MS4wLAlzZXQgRE9DQk9PS19TVVBQUkVTU19TUD8KKyMJMS43MS4xLAkJbm8gZXh0cmEgc2V0dGluZ3MgYXJlIG5lZWRlZD8KKyMJMS43Mi4wLAkJc2V0IERPQ0JPT0tfWFNMXzE3Mi4KKyMJMS43My4wLSwJc2V0IEFTQ0lJRE9DX05PX1JPRkYKKyMKKworIworIyBJZiB5b3UgaGFkIGJlZW4gdXNpbmcgRE9DQk9PS19YU0xfMTcyIGluIGFuIGF0dGVtcHQgdG8gZ2V0IHJpZAorIyBvZiAndGhlICIuZnQgQyIgcHJvYmxlbScgaW4geW91ciBnZW5lcmF0ZWQgbWFucGFnZXMsIGFuZCB5b3UKKyMgaW5zdGVhZCBlbmRlZCB1cCB3aXRoIHdlaXJkIGNoYXJhY3RlcnMgYXJvdW5kIGNhbGxvdXRzLCB0cnkKKyMgdXNpbmcgQVNDSUlET0NfTk9fUk9GRiBpbnN0ZWFkIChpdCB3b3JrcyBmaW5lIHdpdGggQVNDSUlET0M4KS4KKyMKKwogaWZkZWYgQVNDSUlET0M4Ci1BU0NJSURPQ19FWFRSQSArPSAtYSBhc2NpaWRvYzdjb21wYXRpYmxlCitBU0NJSURPQ19FWFRSQSArPSAtYSBhc2NpaWRvYzdjb21wYXRpYmxlIC1hIG5vLWlubGluZS1saXRlcmFsCiBlbmRpZgogaWZkZWYgRE9DQk9PS19YU0xfMTcyCi1BU0NJSURPQ19FWFRSQSArPSAtYSBkb2Nib29rLXhzbC0xNzIKK0FTQ0lJRE9DX0VYVFJBICs9IC1hIGdpdC1hc2NpaWRvYy1uby1yb2ZmCiBNQU5QQUdFX1hTTCA9IG1hbnBhZ2UtMS43Mi54c2wKK2Vsc2UKKwlpZmRlZiBBU0NJSURPQ19OT19ST0ZGCisJIyBkb2Nib29rLXhzbCBhZnRlciAxLjcyIG5lZWRzIHRoZSByZWd1bGFyIFhTTCwgYnV0IHdpbGwgbm90CisJIyBwYXNzLXRocnUgcmF3IHJvZmYgY29kZXMgZnJvbSBhc2NpaWRvYy5jb25mLCBzbyB0dXJuIHRoZW0gb2ZmLgorCUFTQ0lJRE9DX0VYVFJBICs9IC1hIGdpdC1hc2NpaWRvYy1uby1yb2ZmCisJZW5kaWYKIGVuZGlmCitpZmRlZiBNQU5fQk9MRF9MSVRFUkFMCitYTUxUT19FWFRSQSArPSAtbSBtYW5wYWdlLWJvbGQtbGl0ZXJhbC54c2wKK2VuZGlmCitpZmRlZiBET0NCT09LX1NVUFBSRVNTX1NQCitYTUxUT19FWFRSQSArPSAtbSBtYW5wYWdlLXN1cHByZXNzLXNwLnhzbAorZW5kaWYKKworU0hFTExfUEFUSCA/PSAkKFNIRUxMKQorIyBTaGVsbCBxdW90ZTsKK1NIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKQogCiAjCiAjIFBsZWFzZSBub3RlIHRoYXQgdGhlcmUgaXMgYSBtaW5vciBidWcgaW4gYXNjaWlkb2MuCkBAIC03NCw2ICsxMTYsMzIgQEAKICMgeW91cnNlbGYgLSB5ZXMsIGFsbCA2IGNoYXJhY3RlcnMgb2YgaXQhCiAjCiAKK1FVSUVUX1NVQkRJUjAgID0gKyQoTUFLRSkgLUMgIyBzcGFjZSB0byBzZXBhcmF0ZSAtQyBhbmQgc3ViZGlyCitRVUlFVF9TVUJESVIxICA9CisKK2lmbmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHcpLHcpCitQUklOVF9ESVIgPSAtLW5vLXByaW50LWRpcmVjdG9yeQorZWxzZSAjICJtYWtlIC13IgorTk9fU1VCRElSID0gOgorZW5kaWYKKworaWZuZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUykscykscykKK2lmbmRlZiBWCisJUVVJRVRfQVNDSUlET0MJPSBAZWNobyAnICAgJyBBU0NJSURPQyAkQDsKKwlRVUlFVF9YTUxUTwk9IEBlY2hvICcgICAnIFhNTFRPICRAOworCVFVSUVUX0RCMlRFWEkJPSBAZWNobyAnICAgJyBEQjJURVhJICRAOworCVFVSUVUX01BS0VJTkZPCT0gQGVjaG8gJyAgICcgTUFLRUlORk8gJEA7CisJUVVJRVRfREJMQVRFWAk9IEBlY2hvICcgICAnIERCTEFURVggJEA7CisJUVVJRVRfWFNMVFBST0MJPSBAZWNobyAnICAgJyBYU0xUUFJPQyAkQDsKKwlRVUlFVF9HRU4JPSBAZWNobyAnICAgJyBHRU4gJEA7CisJUVVJRVRfU1RERVJSCT0gMj4gL2Rldi9udWxsCisJUVVJRVRfU1VCRElSMAk9ICtAc3ViZGlyPQorCVFVSUVUX1NVQkRJUjEJPSA7JChOT19TVUJESVIpIGVjaG8gJyAgICcgU1VCRElSICQkc3ViZGlyOyBcCisJCQkgICQoTUFLRSkgJChQUklOVF9ESVIpIC1DICQkc3ViZGlyCisJZXhwb3J0IFYKK2VuZGlmCitlbmRpZgorCiBhbGw6IGh0bWwgbWFuCiAKIGh0bWw6ICQoRE9DX0hUTUwpCkBAIC04Nyw2ICsxNTUsOCBAQAogCiBpbmZvOiBnaXQuaW5mbyBnaXRtYW4uaW5mbwogCitwZGY6IHVzZXItbWFudWFsLnBkZgorCiBpbnN0YWxsOiBpbnN0YWxsLW1hbgogCiBpbnN0YWxsLW1hbjogbWFuCkBAIC0xMDcsMTEgKzE3NywxNSBAQAogCSAgZWNobyAiTm8gZGlyZWN0b3J5IGZvdW5kIGluICQoREVTVERJUikkKGluZm9kaXIpIiA+JjIgOyBcCiAJZmkKIAoraW5zdGFsbC1wZGY6IHBkZgorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoREVTVERJUikkKHBkZmRpcikKKwkkKElOU1RBTEwpIC1tIDY0NCB1c2VyLW1hbnVhbC5wZGYgJChERVNURElSKSQocGRmZGlyKQorCiBpbnN0YWxsLWh0bWw6IGh0bWwKLQlzaCAuL2luc3RhbGwtd2ViZG9jLnNoICQoREVTVERJUikkKGh0bWxkaXIpCisJJyQoU0hFTExfUEFUSF9TUSknIC4vaW5zdGFsbC13ZWJkb2Muc2ggJChERVNURElSKSQoaHRtbGRpcikKIAogLi4vR0lULVZFUlNJT04tRklMRTogLkZPUkNFLUdJVC1WRVJTSU9OLUZJTEUKLQkkKE1BS0UpIC1DIC4uLyBHSVQtVkVSU0lPTi1GSUxFCisJJChRVUlFVF9TVUJESVIwKS4uLyAkKFFVSUVUX1NVQkRJUjEpIEdJVC1WRVJTSU9OLUZJTEUKIAogLWluY2x1ZGUgLi4vR0lULVZFUlNJT04tRklMRQogCkBAIC0xMTksOCArMTkzLDggQEAKICMgRGV0ZXJtaW5lICJpbmNsdWRlOjoiIGZpbGUgcmVmZXJlbmNlcyBpbiBhc2NpaWRvYyBmaWxlcy4KICMKIGRvYy5kZXAgOiAkKHdpbGRjYXJkICoudHh0KSBidWlsZC1kb2NkZXAucGVybAotCSQoUk0pICRAKyAkQAotCSQoUEVSTF9QQVRIKSAuL2J1aWxkLWRvY2RlcC5wZXJsID4kQCsKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCsgJEAgJiYgXAorCSQoUEVSTF9QQVRIKSAuL2J1aWxkLWRvY2RlcC5wZXJsID4kQCsgJChRVUlFVF9TVERFUlIpICYmIFwKIAltdiAkQCsgJEAKIAogLWluY2x1ZGUgZG9jLmRlcApAQCAtMTM4LDk2ICsyMTIsMTA1IEBACiAkKGNtZHNfdHh0KTogY21kLWxpc3QubWFkZQogCiBjbWQtbGlzdC5tYWRlOiBjbWQtbGlzdC5wZXJsIC4uL2NvbW1hbmQtbGlzdC50eHQgJChNQU4xX1RYVCkKLQkkKFJNKSAkQAotCSQoUEVSTF9QQVRIKSAuL2NtZC1saXN0LnBlcmwgLi4vY29tbWFuZC1saXN0LnR4dAorCSQoUVVJRVRfR0VOKSQoUk0pICRAICYmIFwKKwkkKFBFUkxfUEFUSCkgLi9jbWQtbGlzdC5wZXJsIC4uL2NvbW1hbmQtbGlzdC50eHQgJChRVUlFVF9TVERFUlIpICYmIFwKIAlkYXRlID4kQAogCiBjbGVhbjoKIAkkKFJNKSAqLnhtbCAqLnhtbCsgKi5odG1sICouaHRtbCsgKi4xICouNSAqLjcKLQkkKFJNKSAqLnRleGkgKi50ZXhpKyBnaXQuaW5mbyBnaXRtYW4uaW5mbworCSQoUk0pICoudGV4aSAqLnRleGkrICoudGV4aSsrIGdpdC5pbmZvIGdpdG1hbi5pbmZvCiAJJChSTSkgaG93dG8taW5kZXgudHh0IGhvd3RvLyouaHRtbCBkb2MuZGVwCiAJJChSTSkgdGVjaG5pY2FsL2FwaS0qLmh0bWwgdGVjaG5pY2FsL2FwaS1pbmRleC50eHQKIAkkKFJNKSAkKGNtZHNfdHh0KSAqLm1hZGUKIAogJChNQU5fSFRNTCk6ICUuaHRtbCA6ICUudHh0Ci0JJChSTSkgJEArICRACisJJChRVUlFVF9BU0NJSURPQykkKFJNKSAkQCsgJEAgJiYgXAogCSQoQVNDSUlET0MpIC1iIHhodG1sMTEgLWQgbWFucGFnZSAtZiBhc2NpaWRvYy5jb25mIFwKLQkJJChBU0NJSURPQ19FWFRSQSkgLWFnaXRfdmVyc2lvbj0kKEdJVF9WRVJTSU9OKSAtbyAkQCsgJDwKKwkJJChBU0NJSURPQ19FWFRSQSkgLWFnaXRfdmVyc2lvbj0kKEdJVF9WRVJTSU9OKSAtbyAkQCsgJDwgJiYgXAogCW12ICRAKyAkQAogCiAlLjEgJS41ICUuNyA6ICUueG1sCi0JJChSTSkgJEAKLQl4bWx0byAtbSAkKE1BTlBBR0VfWFNMKSBtYW4gJDwKKwkkKFFVSUVUX1hNTFRPKSQoUk0pICRAICYmIFwKKwl4bWx0byAtbSAkKE1BTlBBR0VfWFNMKSAkKFhNTFRPX0VYVFJBKSBtYW4gJDwKIAogJS54bWwgOiAlLnR4dAotCSQoUk0pICRAKyAkQAorCSQoUVVJRVRfQVNDSUlET0MpJChSTSkgJEArICRAICYmIFwKIAkkKEFTQ0lJRE9DKSAtYiBkb2Nib29rIC1kIG1hbnBhZ2UgLWYgYXNjaWlkb2MuY29uZiBcCi0JCSQoQVNDSUlET0NfRVhUUkEpIC1hZ2l0X3ZlcnNpb249JChHSVRfVkVSU0lPTikgLW8gJEArICQ8CisJCSQoQVNDSUlET0NfRVhUUkEpIC1hZ2l0X3ZlcnNpb249JChHSVRfVkVSU0lPTikgLW8gJEArICQ8ICYmIFwKIAltdiAkQCsgJEAKIAogdXNlci1tYW51YWwueG1sOiB1c2VyLW1hbnVhbC50eHQgdXNlci1tYW51YWwuY29uZgotCSQoQVNDSUlET0MpIC1iIGRvY2Jvb2sgLWQgYm9vayAkPAorCSQoUVVJRVRfQVNDSUlET0MpJChBU0NJSURPQykgJChBU0NJSURPQ19FWFRSQSkgLWIgZG9jYm9vayAtZCBib29rICQ8CiAKIHRlY2huaWNhbC9hcGktaW5kZXgudHh0OiB0ZWNobmljYWwvYXBpLWluZGV4LXNrZWwudHh0IFwKIAl0ZWNobmljYWwvYXBpLWluZGV4LnNoICQocGF0c3Vic3QgJSwlLnR4dCwkKEFQSV9ET0NTKSkKLQljZCB0ZWNobmljYWwgJiYgc2ggLi9hcGktaW5kZXguc2gKKwkkKFFVSUVUX0dFTiljZCB0ZWNobmljYWwgJiYgJyQoU0hFTExfUEFUSF9TUSknIC4vYXBpLWluZGV4LnNoCiAKICQocGF0c3Vic3QgJSwlLmh0bWwsJChBUElfRE9DUykgdGVjaG5pY2FsL2FwaS1pbmRleCk6ICUuaHRtbCA6ICUudHh0Ci0JJChBU0NJSURPQykgLWIgeGh0bWwxMSAtZiBhc2NpaWRvYy5jb25mIFwKKwkkKFFVSUVUX0FTQ0lJRE9DKSQoQVNDSUlET0MpIC1iIHhodG1sMTEgLWYgYXNjaWlkb2MuY29uZiBcCiAJCSQoQVNDSUlET0NfRVhUUkEpIC1hZ2l0X3ZlcnNpb249JChHSVRfVkVSU0lPTikgJCoudHh0CiAKIFhTTFQgPSBkb2Nib29rLnhzbAogWFNMVE9QVFMgPSAtLXhpbmNsdWRlIC0tc3RyaW5ncGFyYW0gaHRtbC5zdHlsZXNoZWV0IGRvY2Jvb2steHNsLmNzcwogCiB1c2VyLW1hbnVhbC5odG1sOiB1c2VyLW1hbnVhbC54bWwKLQl4c2x0cHJvYyAkKFhTTFRPUFRTKSAtbyAkQCAkKFhTTFQpICQ8CisJJChRVUlFVF9YU0xUUFJPQyl4c2x0cHJvYyAkKFhTTFRPUFRTKSAtbyAkQCAkKFhTTFQpICQ8CiAKIGdpdC5pbmZvOiB1c2VyLW1hbnVhbC50ZXhpCi0JJChNQUtFSU5GTykgLS1uby1zcGxpdCAtbyAkQCB1c2VyLW1hbnVhbC50ZXhpCisJJChRVUlFVF9NQUtFSU5GTykkKE1BS0VJTkZPKSAtLW5vLXNwbGl0IC1vICRAIHVzZXItbWFudWFsLnRleGkKIAogdXNlci1tYW51YWwudGV4aTogdXNlci1tYW51YWwueG1sCi0JJChSTSkgJEArICRACi0JJChET0NCT09LMlhfVEVYSSkgdXNlci1tYW51YWwueG1sIC0tdG8tc3Rkb3V0IHwgJChQRVJMX1BBVEgpIGZpeC10ZXhpLnBlcmwgPiRAKworCSQoUVVJRVRfREIyVEVYSSkkKFJNKSAkQCsgJEAgJiYgXAorCSQoRE9DQk9PSzJYX1RFWEkpIHVzZXItbWFudWFsLnhtbCAtLWVuY29kaW5nPVVURi04IC0tdG8tc3Rkb3V0ID4kQCsrICYmIFwKKwkkKFBFUkxfUEFUSCkgZml4LXRleGkucGVybCA8JEArKyA+JEArICYmIFwKKwlybSAkQCsrICYmIFwKKwltdiAkQCsgJEAKKwordXNlci1tYW51YWwucGRmOiB1c2VyLW1hbnVhbC54bWwKKwkkKFFVSUVUX0RCTEFURVgpJChSTSkgJEArICRAICYmIFwKKwkkKERCTEFURVgpIC1vICRAKyAtcCAvZXRjL2FzY2lpZG9jL2RibGF0ZXgvYXNjaWlkb2MtZGJsYXRleC54c2wgLXMgL2V0Yy9hc2NpaWRvYy9kYmxhdGV4L2FzY2lpZG9jLWRibGF0ZXguc3R5ICQ8ICYmIFwKIAltdiAkQCsgJEAKIAogZ2l0bWFuLnRleGk6ICQoTUFOX1hNTCkgY2F0LXRleGkucGVybAotCSQoUk0pICRAKyAkQAotCSgkKGZvcmVhY2ggeG1sLCQoTUFOX1hNTCksJChET0NCT09LMlhfVEVYSSkgLS10by1zdGRvdXQgJCh4bWwpOykpIHwgXAotCSQoUEVSTF9QQVRIKSBjYXQtdGV4aS5wZXJsICRAID4kQCsKKwkkKFFVSUVUX0RCMlRFWEkpJChSTSkgJEArICRAICYmIFwKKwkoJChmb3JlYWNoIHhtbCwkKE1BTl9YTUwpLCQoRE9DQk9PSzJYX1RFWEkpIC0tZW5jb2Rpbmc9VVRGLTggXAorCQktLXRvLXN0ZG91dCAkKHhtbCkgJiYpIHRydWUpID4gJEArKyAmJiBcCisJJChQRVJMX1BBVEgpIGNhdC10ZXhpLnBlcmwgJEAgPCRAKysgPiRAKyAmJiBcCisJcm0gJEArKyAmJiBcCiAJbXYgJEArICRACiAKIGdpdG1hbi5pbmZvOiBnaXRtYW4udGV4aQotCSQoTUFLRUlORk8pIC0tbm8tc3BsaXQgJCoudGV4aQorCSQoUVVJRVRfTUFLRUlORk8pJChNQUtFSU5GTykgLS1uby1zcGxpdCAtLW5vLXZhbGlkYXRlICQqLnRleGkKIAogJChwYXRzdWJzdCAlLnR4dCwlLnRleGksJChNQU5fVFhUKSk6ICUudGV4aSA6ICUueG1sCi0JJChSTSkgJEArICRACi0JJChET0NCT09LMlhfVEVYSSkgLS10by1zdGRvdXQgJCoueG1sID4kQCsKKwkkKFFVSUVUX0RCMlRFWEkpJChSTSkgJEArICRAICYmIFwKKwkkKERPQ0JPT0syWF9URVhJKSAtLXRvLXN0ZG91dCAkKi54bWwgPiRAKyAmJiBcCiAJbXYgJEArICRACiAKIGhvd3RvLWluZGV4LnR4dDogaG93dG8taW5kZXguc2ggJCh3aWxkY2FyZCBob3d0by8qLnR4dCkKLQkkKFJNKSAkQCsgJEAKLQlzaCAuL2hvd3RvLWluZGV4LnNoICQod2lsZGNhcmQgaG93dG8vKi50eHQpID4kQCsKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCsgJEAgJiYgXAorCSckKFNIRUxMX1BBVEhfU1EpJyAuL2hvd3RvLWluZGV4LnNoICQod2lsZGNhcmQgaG93dG8vKi50eHQpID4kQCsgJiYgXAogCW12ICRAKyAkQAogCiAkKHBhdHN1YnN0ICUsJS5odG1sLCQoQVJUSUNMRVMpKSA6ICUuaHRtbCA6ICUudHh0Ci0JJChBU0NJSURPQykgLWIgeGh0bWwxMSAkKi50eHQKKwkkKFFVSUVUX0FTQ0lJRE9DKSQoQVNDSUlET0MpICQoQVNDSUlET0NfRVhUUkEpIC1iIHhodG1sMTEgJCoudHh0CiAKIFdFQkRPQ19ERVNUID0gL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MKIAogJChwYXRzdWJzdCAlLnR4dCwlLmh0bWwsJCh3aWxkY2FyZCBob3d0by8qLnR4dCkpOiAlLmh0bWwgOiAlLnR4dAotCSQoUk0pICRAKyAkQAotCXNlZCAtZSAnMSwvXiQkL2QnICQ8IHwgJChBU0NJSURPQykgLWIgeGh0bWwxMSAtID4kQCsKKwkkKFFVSUVUX0FTQ0lJRE9DKSQoUk0pICRAKyAkQCAmJiBcCisJc2VkIC1lICcxLC9eJCQvZCcgJDwgfCAkKEFTQ0lJRE9DKSAkKEFTQ0lJRE9DX0VYVFJBKSAtYiB4aHRtbDExIC0gPiRAKyAmJiBcCiAJbXYgJEArICRACiAKIGluc3RhbGwtd2ViZG9jIDogaHRtbAotCXNoIC4vaW5zdGFsbC13ZWJkb2Muc2ggJChXRUJET0NfREVTVCkKKwknJChTSEVMTF9QQVRIX1NRKScgLi9pbnN0YWxsLXdlYmRvYy5zaCAkKFdFQkRPQ19ERVNUKQogCiBxdWljay1pbnN0YWxsOiBxdWljay1pbnN0YWxsLW1hbgogCiBxdWljay1pbnN0YWxsLW1hbjoKLQlzaCAuL2luc3RhbGwtZG9jLXF1aWNrLnNoICQoRE9DX1JFRikgJChERVNURElSKSQobWFuZGlyKQorCSckKFNIRUxMX1BBVEhfU1EpJyAuL2luc3RhbGwtZG9jLXF1aWNrLnNoICQoRE9DX1JFRikgJChERVNURElSKSQobWFuZGlyKQogCiBxdWljay1pbnN0YWxsLWh0bWw6Ci0Jc2ggLi9pbnN0YWxsLWRvYy1xdWljay5zaCAkKEhUTUxfUkVGKSAkKERFU1RESVIpJChodG1sZGlyKQorCSckKFNIRUxMX1BBVEhfU1EpJyAuL2luc3RhbGwtZG9jLXF1aWNrLnNoICQoSFRNTF9SRUYpICQoREVTVERJUikkKGh0bWxkaXIpCiAKIC5QSE9OWTogLkZPUkNFLUdJVC1WRVJTSU9OLUZJTEUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS4yLjIudHh0CmluZGV4IGY2MzkzZjguLjdiZmEzNDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjIuMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjUuMi4yLnR4dApAQCAtNDUsNyArNDUsNyBAQAogICAgIGNvcnJlY3RseSB3aGVuIHRoZSBicmFuY2ggbmFtZSBoYWQgc2xhc2ggaW4gaXQuCiAKICAgLSBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciBzcGVjaWZpZWQgd2l0aCB1c2VyLmVtYWlsCi0gICAgY29uZmlndXJhdGlvbiB3YXMgb3ZlcnJpZGVuIGJ5IEVNQUlMIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgIGNvbmZpZ3VyYXRpb24gd2FzIG92ZXJyaWRkZW4gYnkgRU1BSUwgZW52aXJvbm1lbnQgdmFyaWFibGUuCiAKICAgLSBUaGUgdHJlZSBwYXJzZXIgZGlkIG5vdCB3YXJuIGFib3V0IHRyZWUgZW50cmllcyB3aXRoCiAgICAgbm9uc2Vuc2UgZmlsZSBtb2RlcywgYW5kIGFzc3VtZWQgdGhleSBtdXN0IGJlIGJsb2JzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjAuMi50eHQKaW5kZXggN2E5NjQ2Zi4uNTFiMzJmNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMC4yLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4wLjIudHh0CkBAIC03LDcgKzcsNyBAQAogKiBJbnN0YWxsYXRpb24gb24gcGxhdGZvcm1zIHRoYXQgbmVlZHMgLmV4ZSBzdWZmaXggdG8gZ2l0LSogcHJvZ3JhbXMgd2VyZQogICBicm9rZW4gaW4gMS42LjAuMS4KIAotKiBJbnN0YWxsYXRpb24gb24gZmlsZXN5c3RlbXMgd2l0aG91dCBzeW1ib2xpYyBsaW5rcyBzdXBwb3J0IGRpZCBudG8KKyogSW5zdGFsbGF0aW9uIG9uIGZpbGVzeXN0ZW1zIHdpdGhvdXQgc3ltYm9saWMgbGlua3Mgc3VwcG9ydCBkaWQgbm90CiAgIHdvcmsgd2VsbC4KIAogKiBJbi10cmVlIGRvY3VtZW50YXRpb25zIGFuZCB0ZXN0IHNjcmlwdHMgbm93IHVzZSAiZ2l0IGZvbyIgZm9ybSB0byBzZXQgYQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjEuMS50eHQKaW5kZXggODg0NTRjMS4uOGM1OTRiYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMS4xLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4xLjEudHh0CkBAIC00MSwxMSArNDEsMTEgQEAKICAgd29yayB0cmVlIHVwb24gZGVsZXRlL21vZGlmeSBjb25mbGljdC4KIAogKiAiZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSIgZGlkbid0IGxlYXZlIHRoZSBpbmRleCB1bm1lcmdlZCBmb3IgZW50cmllcyB3aXRoCi0gIHJlbmFtZS9kZWxldGUgY29uZmxpY3RkLgorICByZW5hbWUvZGVsZXRlIGNvbmZsaWN0cy4KIAogKiAiZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSIgY2xvYmJlcmVkIHVudHJhY2tlZCBmaWxlcyBpbiB0aGUgd29yayB0cmVlLgogCi0qICJnaXQgbXYgLWsiIHdpdGggbW9yZSB0aGFuIG9uZSBlcnJvcm5lb3VzIHBhdGhzIG1pc2JlaGF2ZWQuCisqICJnaXQgbXYgLWsiIHdpdGggbW9yZSB0aGFuIG9uZSBlcnJvbmVvdXMgcGF0aHMgbWlzYmVoYXZlZC4KIAogKiAiZ2l0IHJlYWQtdHJlZSAtbSAtdSIgaGVuY2UgYnJhbmNoIHN3aXRjaGluZyBpbmNvcnJlY3RseSBsb3N0IGEKICAgc3ViZGlyZWN0b3J5IGluIHJhcmUgY2FzZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4xLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMS4yLnR4dAppbmRleCAyMzBhYTNkLi5iZTM3Y2JiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4xLjIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjEuMi50eHQKQEAgLTQsOCArNCw4IEBACiBGaXhlcyBzaW5jZSB2MS42LjEuMQogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotKiBUaGUgbG9naWMgZm9yIHJlbmFtZSBkZXRlY3RpbiBpbiBpbnRlcm5hbCBkaWZmIHVzZWQgYnkgY29tbWFuZHMgbGlrZQotICAiZ2l0IGRpZmYiIGFuZCAiZ2l0IGJsYW1lIiBoYXZlIGJlZW4gb3B0aW1pemVkIHRvIGF2b2lkIGxvYWRpbmcgdGhlIHNhbWUKKyogVGhlIGxvZ2ljIGZvciByZW5hbWUgZGV0ZWN0aW9uIGluIGludGVybmFsIGRpZmYgdXNlZCBieSBjb21tYW5kcyBsaWtlCisgICJnaXQgZGlmZiIgYW5kICJnaXQgYmxhbWUiIGhhcyBiZWVuIG9wdGltaXplZCB0byBhdm9pZCBsb2FkaW5nIHRoZSBzYW1lCiAgIGJsb2IgcmVwZWF0ZWRseS4KIAogKiBXZSBkaWQgbm90IGFsbG93IHdyaXRpbmcgb3V0IGEgYmxvYiB0aGF0IGlzIGxhcmdlciB0aGFuIDJHQiBmb3Igbm8gZ29vZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjIuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZhMzY0MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjIuMS50eHQKQEAgLTAsMCArMSwxOSBAQAorR0lUIHYxLjYuMi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogLmdpdGlnbm9yZSBsZWFybmVkIHRvIGhhbmRsZSBiYWNrc2xhc2ggYXMgYSBxdW90aW5nIG1lY2hhbmlzbSBmb3IKKyAgY29tbWVudCBpbnRyb2R1Y3Rpb24gY2hhcmFjdGVyICIjIi4KKworKiB0aW1lc3RhbXAgb3V0cHV0IGluIC0tZGF0ZT1yZWxhdGl2ZSBtb2RlIHVzZWQgdG8gZGlzcGxheSB0aW1lc3RhbXBzIHRoYXQKKyAgYXJlIGxvbmcgdGltZSBhZ28gaW4gdGhlIGRlZmF1bHQgbW9kZTsgaXQgbm93IHVzZXMgIk4geWVhcnMgTSBtb250aHMKKyAgYWdvIiwgYW5kICJOIHllYXJzIGFnbyIuCisKKyogZ2l0LWFkZCAtaS8tcCBub3cgd29ya3Mgd2l0aCBub24tQVNDSUkgcGF0aG5hbWVzLgorCisqICJnaXQgaGFzaC1vYmplY3QgLXciIGRpZCBub3QgcmVhZCBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZnJvbSB0aGUKKyAgY29ycmVjdCAuZ2l0IGRpcmVjdG9yeS4KKworKiBnaXQtc2VuZC1lbWFpbCBsZWFybmVkIHRvIGNvcnJlY3RseSBoYW5kbGUgbXVsdGlwbGUgQ2M6IGFkZHJlc3Nlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4yLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZmE5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4yLjIudHh0CkBAIC0wLDAgKzEsNDUgQEAKK0dJVCB2MS42LjIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjIuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBBIGxvbmdzdGFuZGluZyBjb25mdXNpbmcgZGVzY3JpcHRpb24gb2Ygd2hhdCAtLXBpY2theGUgb3B0aW9uIG9mCisgIGdpdC1kaWZmIGRvZXMgaGFzIGJlZW4gY2xhcmlmaWVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCisqICJnaXQtYmxhbWUgLVMiIGRpZCBub3QgcXVpdGUgd29yayBuZWFyIHRoZSBjb21taXRzIHRoYXQgd2VyZSBnaXZlbgorICBvbiB0aGUgY29tbWFuZCBsaW5lIGNvcnJlY3RseS4KKworKiAiZ2l0IGRpZmYgLS1waWNrYXhlLXJlZ2V4cCIgZGlkIG5vdCBjb3VudCBvdmVybGFwcGluZyBtYXRjaGVzCisgIGNvcnJlY3RseS4KKworKiAiZ2l0IGRpZmYiIGRpZCBub3QgZmVlZCBmaWxlcyBpbiB3b3JrLXRyZWUgcmVwcmVzZW50YXRpb24gdG8gZXh0ZXJuYWwKKyAgZGlmZiBhbmQgdGV4dGNvbnYuCisKKyogImdpdC1mZXRjaCIgaW4gYSByZXBvc2l0b3J5IHRoYXQgd2FzIG5vdCBjbG9uZWQgZnJvbSBhbnl3aGVyZSBzYWlkCisgIGl0IGNhbm5vdCBmaW5kICdvcmlnaW4nLCB3aGljaCB3YXMgaGFyZCB0byB1bmRlcnN0YW5kIGZvciBuZXcgcGVvcGxlLgorCisqICJnaXQtZm9ybWF0LXBhdGNoIC0tbnVtYmVyZWQtZmlsZXMgLS1zdGRvdXQiIGRpZCBub3QgaGF2ZSB0byBkaWUgb2YKKyAgaW5jb21wYXRpYmxlIG9wdGlvbnM7IGl0IG5vdyBzaW1wbHkgaWdub3JlcyAtLW51bWJlcmVkLWZpbGVzIGFzIG5vIGZpbGVzCisgIGFyZSBwcm9kdWNlZCBhbnl3YXkuCisKKyogImdpdC1scy1maWxlcyAtLWRlbGV0ZWQiIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggR0lUX0RJUiZHSVRfV09SS19UUkVFLgorCisqICJnaXQtcmVhZC10cmVlIEEgQiBDLi4uIiB3aXRob3V0IC1tIG9wdGlvbiBoYXMgYmVlbiBicm9rZW4gZm9yIGEgbG9uZworICB0aW1lLgorCisqIGdpdC1zZW5kLWVtYWlsIGlnbm9yZWQgLS1pbi1yZXBseS10byB3aGVuIC0tbm8tdGhyZWFkIHdhcyBnaXZlbi4KKworKiAnZ2l0LXN1Ym1vZHVsZSBhZGQnIGRpZCBub3QgdG9sZXJhdGUgZXh0cmEgc2xhc2hlcyBhbmQgLi8gaW4gdGhlIHBhdGggaXQKKyAgYWNjZXB0ZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lOyBpdCBub3cgaXMgbW9yZSBsZW5pZW50LgorCisqIGdpdC1zdm4gbWlzYmVoYXZlZCB3aGVuIHRoZSBwcm9qZWN0IGNvbnRhaW5lZCBhIHBhdGggdGhhdCBiZWdhbiB3aXRoCisgIHR3byBkYXNoZXMuCisKKyogaW1wb3J0LXppcHMgc2NyaXB0IChpbiBjb250cmliKSBkaWQgbm90IGNvbXB1dGUgdGhlIGNvbW1vbiBkaXJlY3RvcnkKKyAgcHJlZml4IGNvcnJlY3RseS4KKworKiBtaXNjb21waWxhdGlvbiBvZiBuZWdhdGVkIGVudW0gY29uc3RhbnRzIGJ5IG9sZCBnY2MgKDIuOSkgYWZmZWN0ZWQgdGhlCisgIGNvZGVwYXRocyB0byBzcGF3biBzdWJwcm9jZXNzZXMuCisKK01hbnkgc21hbGwgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZCBhcyB3ZWxsLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjIuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzYzFhYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjIuMy50eHQKQEAgLTAsMCArMSwyMiBAQAorR0lUIHYxLjYuMi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMi4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFNldHRpbmcgYW4gb2N0YWwgbW9kZSB2YWx1ZSB0byBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiB0bworICByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHJlcG9zaXRvcnkgdG8gZ3JvdXAgbWVtYmVycyBkaWQgbm90IHdvcmsgYXMKKyAgYWR2ZXJ0aXNlZC4KKworKiBBIGZhaXJseSBsYXJnZSBhbmQgdHJpdmlhbCBtZW1vcnkgbGVhayB3aGlsZSByZXYtbGlzdCBzaG93cyBsaXN0IG9mCisgIHJlYWNoYWJsZSBvYmplY3RzIGhhcyBiZWVuIGlkZW50aWZpZWQgYW5kIHBsdWdnZWQuCisKKyogImdpdC1jb21taXQgLS1pbnRlcmFjdGl2ZSIgZGlkIG5vdCBhYm9ydCB3aGVuIHVuZGVybHlpbmcgImdpdC1hZGQgLWkiCisgIHNpZ25hbGVkIGEgZmFpbHVyZS4KKworKiBnaXQtcmVwYWNrIChpbnZva2VkIGZyb20gZ2l0LWdjKSBkaWQgbm90IHdvcmsgYXMgbmljZWx5IGFzIGl0IHNob3VsZCBpbgorICBhIHJlcG9zaXRvcnkgdGhhdCBib3Jyb3dzIG9iamVjdHMgZnJvbSBuZWlnaGJvdXJzIHZpYSBhbHRlcm5hdGVzCisgIG1lY2hhbmlzbSBlc3BlY2lhbGx5IHdoZW4gc29tZSBwYWNrcyBhcmUgbWFya2VkIHdpdGggdGhlICIua2VlcCIgZmxhZworICB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyByZXBhY2tlZC4KKworTWFueSBzbWFsbCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkIGFzIHdlbGwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4yLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMi40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGJmMWQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMi40LnR4dApAQCAtMCwwICsxLDM5IEBACitHSVQgdjEuNi4yLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4yLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIGNvbmZpZ3VyYXRpb24gcGFyc2VyIGhhZCBhIGJ1ZmZlciBvdmVyZmxvdyB3aGlsZSBwYXJzaW5nIGFuIG92ZXJsb25nCisgIHZhbHVlLgorCisqIHBydW5pbmcgcmVmbG9nIGVudHJpZXMgdGhhdCBhcmUgdW5yZWFjaGFibGUgZnJvbSB0aGUgdGlwIG9mIHRoZSByZWYKKyAgZHVyaW5nICJnaXQgcmVmbG9nIHBydW5lIiAoaGVuY2UgImdpdCBnYyIpIHdhcyB2ZXJ5IGluZWZmaWNpZW50LgorCisqICJnaXQtYWRkIC1wIiBsYWNrZWQgYSB3YXkgdG8gc2F5ICJxInVpdCB0byByZWZ1c2Ugc3RhZ2luZyBhbnkgaHVua3MgZm9yCisgIHRoZSByZW1haW5pbmcgcGF0aHMuICBZb3UgaGFkIHRvIHNheSAiZCIgYW5kIHRoZW4gXkMuCisKKyogImdpdC1jaGVja291dCA8dHJlZS1pc2g+IDxzdWJtb2R1bGU+IiBkaWQgbm90IHVwZGF0ZSB0aGUgaW5kZXggZW50cnkgYXQKKyAgdGhlIG5hbWVkIHBhdGg7IGl0IG5vdyBkb2VzLgorCisqICJnaXQtZmFzdC1leHBvcnQiIGNob2tlZCB3aGVuIHNlZWluZyBhIHRhZyB0aGF0IGRvZXMgbm90IHBvaW50IGF0IGNvbW1pdC4KKworKiAiZ2l0IGluaXQiIHNlZ2ZhdWx0ZWQgd2hlbiBnaXZlbiBhbiBvdmVybG9uZyB0ZW1wbGF0ZSBsb2NhdGlvbiB2aWEKKyAgdGhlIC0tdGVtcGxhdGU9IG9wdGlvbi4KKworKiAiZ2l0LWxzLXRyZWUiIGFuZCAiZ2l0LWRpZmYtdHJlZSIgdXNlZCBhIHBhdGhzcGVjIGNvcnJlY3RseSB3aGVuCisgIGRlY2lkaW5nIHRvIGRlc2NlbmQgaW50byBhIHN1YmRpcmVjdG9yeSBidXQgdGhleSBkaWQgbm90IG1hdGNoIHRoZQorICBpbmRpdmlkdWFsIHBhdGhzIGNvcnJlY3RseS4gIFRoaXMgY2F1c2VkIHBhdGhzcGVjcyAiYWJjL2QgYWIiIHRvIG1hdGNoCisgICJhYmMvMCIgKCJhYmMvZCIgbWFkZSB0aGVtIGRlY2lkZSB0byBkZXNjZW5kIGludG8gdGhlIGRpcmVjdG9yeSAiYWJjLyIsCisgIGFuZCB0aGVuICJhYiIgaW5jb3JyZWN0bHkgbWF0Y2hlZCAiYWJjLzAiIHdoZW4gaXQgc2hvdWxkbid0KS4KKworKiAiZ2l0LW1lcmdlLXJlY3Vyc2l2ZSIgd2FzIGJyb2tlbiB3aGVuIGEgc3VibW9kdWxlIGVudHJ5IHdhcyBpbnZvbHZlZCBpbgorICBhIGNyaXNzLWNyb3NzIG1lcmdlIHNpdHVhdGlvbi4KKworTWFueSBzbWFsbCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkIGFzIHdlbGwuCisKKy0tLQorZXhlYyA+L3Zhci90bXAvMQorZWNobyBPPSQoZ2l0IGRlc2NyaWJlIG1haW50KQorTz12MS42LjIuMy0zOC1nMzE4Yjg0NworZ2l0IHNob3J0bG9nIC0tbm8tbWVyZ2VzICRPLi5tYWludApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjIuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzZjllOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjIuNS50eHQKQEAgLTAsMCArMSwyMSBAQAorR0lUIHYxLjYuMi41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMi40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgYXBwbHkiIG1pc2hhbmRsZWQgaWYgeW91IGZlZCBhIGdpdCBnZW5lcmF0ZWQgcGF0Y2ggdGhhdCByZW5hbWVzCisgIGZpbGUgQSB0byBCIGFuZCBmaWxlIEIgdG8gQSBhdCB0aGUgc2FtZSB0aW1lLgorCisqICJnaXQgZGlmZiAtYyAtcCIgKGFuZCAiZGlmZiAtLWNjIikgZGlkIG5vdCBleHBlY3QgdG8gc2VlIHN1Ym1vZHVsZQorICBkaWZmZXJlbmNlcyBhbmQgaW5zdGVhZCByZWZ1c2VkIHRvIHdvcmsuCisKKyogImdpdCBncmVwIC1lICcoJyIgc2VnZmF1bHRlZCwgaW5zdGVhZCBvZiBkaWFnbm9zaW5nIGEgbWlzbWF0Y2hlZAorICBwYXJlbnRoZXNlcyBlcnJvci4KKworKiAiZ2l0IGZldGNoIiBnZW5lcmF0ZWQgcGFja3Mgd2l0aCBvZmZzZXQtZGVsdGEgZW5jb2Rpbmcgd2hlbiBib3RoIGVuZHMgb2YKKyAgdGhlIGNvbm5lY3Rpb24gYXJlIGNhcGFibGUgb2YgcHJvZHVjaW5nIG9uZTsgdGhpcyBjYW5ub3QgYmUgcmVhZCBieQorICBhbmNpZW50IGdpdCBhbmQgdGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gZGlzYWJsZSB0aGlzIGJ5IHNldHRpbmcKKyAgcmVwYWNrLnVzZWRlbHRhYmFzZW9mZnNldCBjb25maWd1cmF0aW9uIHRvIGZhbHNlLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwNjBmNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjIudHh0CkBAIC0wLDAgKzEsMTY0IEBACitHSVQgdjEuNi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitXaXRoIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UsICJnaXQgcHVzaCIgaW50byBhIGJyYW5jaCB0aGF0IGlzCitjdXJyZW50bHkgY2hlY2tlZCBvdXQgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuICBZb3UgY2FuIGNob29zZQord2hhdCBzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbgordmFyaWFibGUgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKK1RvIGVhc2UgdGhlIHRyYW5zaXRpb24gcGxhbiwgdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5IG9mIHN1Y2ggYQorcHVzaCBydW5uaW5nIHRoaXMgcmVsZWFzZSB3aWxsIGlzc3VlIGEgYmlnIHdhcm5pbmcgd2hlbiB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbWlzc2luZy4gIFBsZWFzZSByZWZlciB0bzoKKworICBodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvR2l0RmFxI25vbi1iYXJlCisgIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC8xMDc3NTgvZm9jdXM9MTA4MDA3CisKK2ZvciBtb3JlIGRldGFpbHMgb24gdGhlIHJlYXNvbiB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFuZCB0aGUKK3RyYW5zaXRpb24gcGxhbi4KKworRm9yIGEgc2ltaWxhciByZWFzb24sICJnaXQgcHVzaCAkdGhlcmUgOiRraWxsZWQiIHRvIGRlbGV0ZSB0aGUgYnJhbmNoCiska2lsbGVkIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkgJHRoZXJlLCBpZiAka2lsbGVkIGJyYW5jaCBpcyB0aGUgY3VycmVudAorYnJhbmNoIHBvaW50ZWQgYXQgYnkgaXRzIEhFQUQsIGdldHMgYSBsYXJnZSB3YXJuaW5nLiAgWW91IGNhbiBjaG9vc2Ugd2hhdAorc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKK3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQgaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5LgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworKiBnaXQtc3ZuIHVwZGF0ZXMuCisKKyogZ2l0d2ViIHVwZGF0ZXMsIGluY2x1ZGluZyBhIG5ldyBwYXRjaCB2aWV3IGFuZCBSU1MvQXRvbSBmZWVkCisgIGltcHJvdmVtZW50cy4KKworKiAoY29udHJpYi9lbWFjcykgZ2l0LmVsIG5vdyBoYXMgY29tbWFuZHMgZm9yIGNoZWNraW5nIG91dCBhIGJyYW5jaCwKKyAgY3JlYXRpbmcgYSBicmFuY2gsIGNoZXJyeS1waWNraW5nIGFuZCByZXZlcnRpbmcgY29tbWl0czsgdmMtZ2l0LmVsCisgIGlzIG5vdCBzaGlwcGVkIHdpdGggZ2l0IGFueW1vcmUgKGl0IGlzIHBhcnQgb2Ygb2ZmaWNpYWwgRW1hY3MpLgorCisocGVyZm9ybWFuY2UpCisKKyogcGFjay1vYmplY3RzIGF1dG9kZXRlY3RzIHRoZSBudW1iZXIgb2YgQ1BVcyBhdmFpbGFibGUgYW5kIHVzZXMgdGhyZWFkZWQKKyAgdmVyc2lvbi4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisqIGF1dG9tYXRpYyB0eXBvIGNvcnJlY3Rpb24gd29ya3Mgb24gYWxpYXNlcyBhcyB3ZWxsCisKKyogQHstMX0gaXMgYSB3YXkgdG8gcmVmZXIgdG8gdGhlIGxhc3QgYnJhbmNoIHlvdSB3ZXJlIG9uLiAgVGhpcyBpcworICBhY2NlcHRlZCBub3Qgb25seSB3aGVyZSBhbiBvYmplY3QgbmFtZSBpcyBleHBlY3RlZCwgYnV0IGFueXdoZXJlCisgIGEgYnJhbmNoIG5hbWUgaXMgZXhwZWN0ZWQgYW5kIGFjdHMgYXMgaWYgeW91IHR5cGVkIHRoZSBicmFuY2ggbmFtZS4KKyAgRS5nLiAiZ2l0IGJyYW5jaCAtLXRyYWNrIG15YnJhbmNoIEB7LTF9IiwgImdpdCBtZXJnZSBAey0xfSIsIGFuZAorICAiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBAey0xfSIgd291bGQgd29yayBhcyBleHBlY3RlZC4KKworKiBXaGVuIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCBwb2ludHMgYXQgYSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIHRoYXQKKyAgaGFzIGJlZW4gcHJ1bmVkIGF3YXksIG1hbnkgZ2l0IG9wZXJhdGlvbnMgaXNzdWVkIHdhcm5pbmcgd2hlbiB0aGV5CisgIGludGVybmFsbHkgZW51bWVyYXRlZCB0aGUgcmVmcy4gIFdlIG5vdyB3YXJuIG9ubHkgd2hlbiB5b3Ugc2F5ICJvcmlnaW4iCisgIHRvIHJlZmVyIHRvIHRoYXQgcHJ1bmVkIGJyYW5jaC4KKworKiBUaGUgbG9jYXRpb24gb2YgLm1haWxtYXAgZmlsZSBjYW4gYmUgY29uZmlndXJlZCwgYW5kIGl0cyBmaWxlIGZvcm1hdCB3YXMKKyAgZW5oYW5jZWQgdG8gYWxsb3cgbWFwcGluZyBhbiBpbmNvcnJlY3QgZS1tYWlsIGZpZWxkIGFzIHdlbGwuCisKKyogImdpdCBhZGQgLXAiIGxlYXJuZWQgJ2cnb3RvIGFjdGlvbiB0byBqdW1wIGRpcmVjdGx5IHRvIGEgaHVuay4KKworKiAiZ2l0IGFkZCAtcCIgbGVhcm5lZCB0byBmaW5kIGEgaHVuayB3aXRoIGdpdmVuIHRleHQgd2l0aCAnLycuCisKKyogImdpdCBhZGQgLXAiIG9wdGlvbmFsbHkgY2FuIGJlIHRvbGQgdG8gd29yayB3aXRoIGp1c3QgdGhlIGNvbW1hbmQgbGV0dGVyCisgIHdpdGhvdXQgRW50ZXIuCisKKyogd2hlbiAiZ2l0IGFtIiBzdG9wcyB1cG9uIGEgcGF0Y2ggdGhhdCBkb2VzIG5vdCBhcHBseSwgaXQgc2hvd3MgdGhlCisgIHRpdGxlIG9mIHRoZSBvZmZlbmRpbmcgcGF0Y2guCisKKyogImdpdCBhbSAtLWRpcmVjdG9yeT08ZGlyPiIgYW5kICJnaXQgYW0gLS1yZWplY3QiIHBhc3NlcyB0aGVzZSBvcHRpb25zCisgIHRvIHVuZGVybHlpbmcgImdpdCBhcHBseSIuCisKKyogImdpdCBhbSIgbGVhcm5lZCAtLWlnbm9yZS1kYXRlIG9wdGlvbi4KKworKiAiZ2l0IGJsYW1lIiBhbGlnbnMgYXV0aG9yIG5hbWVzIGJldHRlciB3aGVuIHRoZXkgYXJlIHNwZWxsZWQgaW4KKyAgbm9uIFVTLUFTQ0lJIGVuY29kaW5nLgorCisqICJnaXQgY2xvbmUiIG5vdyBtYWtlcyBpdHMgYmVzdCBlZmZvcnQgd2hlbiBjbG9uaW5nIGZyb20gYW4gZW1wdHkKKyAgcmVwb3NpdG9yeSB0byBzZXQgdXAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdG8gcmVmZXIgdG8gdGhlIHJlbW90ZQorICByZXBvc2l0b3J5LgorCisqICJnaXQgY2hlY2tvdXQgLSIgaXMgYSBzaG9ydGhhbmQgZm9yICJnaXQgY2hlY2tvdXQgQHstMX0iLgorCisqICJnaXQgY2hlcnJ5IiBkZWZhdWx0cyB0byB3aGF0ZXZlciB0aGUgY3VycmVudCBicmFuY2ggaXMgdHJhY2tpbmcgKGlmCisgIGV4aXN0cykgd2hlbiB0aGUgPHVwc3RyZWFtPiBhcmd1bWVudCBpcyBub3QgZ2l2ZW4uCisKKyogImdpdCBjdnNzZXJ2ZXIiIGNhbiBiZSB0b2xkIG5vdCB0byBhZGQgZXh0cmEgInZpYSBnaXQtQ1ZTIGVtdWxhdG9yIiB0bworICB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGl0IHNlcnZlcyB2aWEgZ2l0Y3ZzLmNvbW1pdG1zZ2Fubm90YXRpb24KKyAgY29uZmlndXJhdGlvbi4KKworKiAiZ2l0IGN2c3NlcnZlciIgbGVhcm5lZCB0byBoYW5kbGUgJ25vb3AnIGNvbW1hbmQgc29tZSBDVlMgY2xpZW50cyBzZWVtCisgIHRvIGV4cGVjdCB0byB3b3JrLgorCisqICJnaXQgZGlmZiIgbGVhcm5lZCBhIG5ldyBvcHRpb24gLS1pbnRlci1odW5rLWNvbnRleHQgdG8gY29hbGVzY2UgY2xvc2UKKyAgaHVua3MgdG9nZXRoZXIgYW5kIHNob3cgY29udGV4dCBiZXR3ZWVuIHRoZW0uCisKKyogVGhlIGRlZmluaXRpb24gb2Ygd2hhdCBjb25zdGl0dXRlcyBhIHdvcmQgZm9yICJnaXQgZGlmZiAtLWNvbG9yLXdvcmRzIgorICBjYW4gYmUgY3VzdG9taXplZCB2aWEgZ2l0YXR0cmlidXRlcywgY29tbWFuZCBsaW5lIG9yIGEgY29uZmlndXJhdGlvbi4KKworKiAiZ2l0IGRpZmYiIGxlYXJuZWQgLS1wYXRpZW5jZSB0byBydW4gInBhdGllbmNlIGRpZmYiIGFsZ29yaXRobS4KKworKiAiZ2l0IGZpbHRlci1icmFuY2giIGxlYXJuZWQgLS1wcnVuZS1lbXB0eSBvcHRpb24gdGhhdCBkaXNjYXJkcyBjb21taXRzCisgIHRoYXQgZG8gbm90IGNoYW5nZSB0aGUgY29udGVudHMuCisKKyogImdpdCBmc2NrIiBub3cgY2hlY2tzIGxvb3NlIG9iamVjdHMgaW4gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIGluc3RlYWQKKyAgb2YgbWlzcmVwb3J0aW5nIHRoZW0gYXMgbWlzc2luZy4KKworKiAiZ2l0IGdjIC0tcHJ1bmUiIHdhcyByZXN1cnJlY3RlZCB0byBhbGxvdyAiZ2l0IGdjIC0tbm8tcHJ1bmUiIGFuZAorICBnaXZpbmcgbm9uLWRlZmF1bHQgZXhwaXJhdGlvbiBwZXJpb2QgZS5nLiAiZ2l0IGdjIC0tcHJ1bmU9bm93Ii4KKworKiAiZ2l0IGdyZXAgLXciIGFuZCAiZ2l0IGdyZXAiIGZvciBmaXhlZCBzdHJpbmdzIGhhdmUgYmVlbiBvcHRpbWl6ZWQuCisKKyogImdpdCBtZXJnZXRvb2wiIGxlYXJuZWQgLXkoLS1uby1wcm9tcHQpIG9wdGlvbiB0byBkaXNhYmxlIHByb21wdGluZy4KKworKiAiZ2l0IHJlYmFzZSAtaSIgY2FuIHRyYW5zcGxhbnQgYSBoaXN0b3J5IGRvd24gdG8gcm9vdCB0byBlbHNld2hlcmUKKyAgd2l0aCAtLXJvb3Qgb3B0aW9uLgorCisqICJnaXQgcmVzZXQgLS1tZXJnZSIgaXMgYSBuZXcgbW9kZSB0aGF0IHdvcmtzIHNpbWlsYXIgdG8gdGhlIHdheQorICAiZ2l0IGNoZWNrb3V0IiBzd2l0Y2hlcyBicmFuY2hlcywgdGFraW5nIHRoZSBsb2NhbCBjaGFuZ2VzIHdoaWxlCisgIHN3aXRjaGluZyB0byBhbm90aGVyIGNvbW1pdC4KKworKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGxlYXJuZWQgLS1uby1mZXRjaCBvcHRpb24uCisKKyogImdpdCB0YWciIGxlYXJuZWQgLS1jb250YWlucyB0aGF0IHdvcmtzIHRoZSBzYW1lIHdheSBhcyB0aGUgc2FtZSBvcHRpb24KKyAgZnJvbSAiZ2l0IGJyYW5jaCIuCisKKworRml4ZXMgc2luY2UgdjEuNi4xCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS42LjEuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKK0hlcmUgYXJlIGZpeGVzIHRoYXQgdGhpcyByZWxlYXNlIGhhcywgYnV0IGhhdmUgbm90IGJlZW4gYmFja3BvcnRlZCB0bwordjEuNi4xLlggc2VyaWVzLgorCisqICJnaXQtYWRkIHN1Yi9maWxlIiB3aGVuIHN1YiBpcyBhIHN1Ym1vZHVsZSBpbmNvcnJlY3RseSBhZGRlZCB0aGUgcGF0aCB0bworICB0aGUgc3VwZXJwcm9qZWN0LgorCisqICJnaXQgYnVuZGxlIiBkaWQgbm90IGV4Y2x1ZGUgYW5ub3RhdGVkIHRhZ3MgZXZlbiB3aGVuIGEgcmFuZ2UgZ2l2ZW4KKyAgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHdhbnRlZCB0by4KKworKiAiZ2l0IGZpbHRlci1icmFuY2giIHVubmVjZXNzYXJpbHkgcmVmdXNlZCB0byB3b3JrIHdoZW4geW91IGhhZAorICBjaGVja2VkIG91dCBhIGRpZmZlcmVudCBjb21taXQgZnJvbSB3aGF0IGlzIHJlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3QKKyAgaW5kZXggaW4gYSBzdWJtb2R1bGUuCisKKyogImdpdCBmaWx0ZXItYnJhbmNoIiBpbmNvcnJlY3RseSB0cmllZCB0byB1cGRhdGUgYSBub25leGlzdGVudCB3b3JrIHRyZWUKKyAgYXQgdGhlIGVuZCB3aGVuIGl0IGlzIHJ1biBpbiBhIGJhcmUgcmVwb3NpdG9yeS4KKworKiAiZ2l0IGdjIiBkaWQgbm90IHdvcmsgaWYgeW91ciByZXBvc2l0b3J5IHdhcyBjcmVhdGVkIHdpdGggYW4gYW5jaWVudCBnaXQKKyAgYW5kIG5ldmVyIGhhZCBhbnkgcGFjayBmaWxlcyBpbiBpdCBiZWZvcmUuCisKKyogImdpdCBtZXJnZXRvb2wiIHVzZWQgdG8gaWdub3JlIGF1dG9jcmxmIGFuZCBvdGhlciBhdHRyaWJ1dGVzCisgIGJhc2VkIGNvbnRlbnQgcmV3cml0aW5nLgorCisqIGJyYW5jaCBzd2l0Y2hpbmcgYW5kIG1lcmdlcyBoYWQgYSBzaWxseSBidWcgdGhhdCBkaWQgbm90IHZhbGlkYXRlCisgIHRoZSBjb3JyZWN0IGRpcmVjdG9yeSB3aGVuIG1ha2luZyBzdXJlIGFuIGV4aXN0aW5nIHN1YmRpcmVjdG9yeSBpcworICBjbGVhbi4KKworKiAiZ2l0IC1wIGNtZCIgd2hlbiBjbWQgaXMgbm90IGEgYnVpbHQtaW4gb25lIGxlZnQgdGhlIGRpc3BsYXkgaW4gZnVubnkgc3RhdGUKKyAgd2hlbiBraWxsZWQgaW4gdGhlIG1pZGRsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjMuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4zLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MDBiNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4zLjEudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0dJVCB2MS42LjMuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgY2hlY2tvdXQgLWIgbmV3LWJyYW5jaCIgd2l0aCBhIHN0YWdlZCBjaGFuZ2UgaW4gdGhlIGluZGV4CisgIGluY29ycmVjdGx5IHByaW1lZCB0aGUgaW4taW5kZXggY2FjaGUtdHJlZSwgcmVzdWx0aW5nIGEgd3JvbmcgdHJlZQorICBvYmplY3QgdG8gYmUgd3JpdHRlbiBvdXQgb2YgdGhlIGluZGV4LiAgVGhpcyBpcyBhIGdyYXZlIHJlZ3Jlc3Npb24KKyAgc2luY2UgdGhlIGxhc3QgMS42LjIuWCBtYWludGVuYW5jZSByZWxlYXNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMy4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjMuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmM2YwMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjMuMi50eHQKQEAgLTAsMCArMSw2MSBAQAorR0lUIHYxLjYuMy4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMy4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIGZldyBjb2RlcGF0aHMgcGlja2VkIHVwIHRoZSBmaXJzdCBmZXcgYnl0ZXMgZnJvbSBhbiBzaGExW10gYnkKKyAgIGNhc3RpbmcgdGhlIChjaGFyICopIHBvaW50ZXIgdG8gKGludCAqKTsgR0NDIDQuNCBkaWQgbm90IGxpa2UgdGhpcywKKyAgIGFuZCBhYm9ydGVkIGNvbXBpbGF0aW9uLgorCisgKiBTb21lIHVubGluaygyKSBmYWlsdXJlcyB3ZW50IHVuZGlhZ25vc2VkLgorCisgKiBUaGUgInJlY3Vyc2l2ZSIgbWVyZ2Ugc3RyYXRlZ3kgbWlzYmVoYXZlZCB3aGVuIGZhY2VkIHJlbmFtZS9kZWxldGUKKyAgIGNvbmZsaWN0cyB3aGlsZSBjb21pbmcgdXAgd2l0aCBhbiBpbnRlcm1lZGlhdGUgbWVyZ2UgYmFzZS4KKworICogVGhlIGxvdy1sZXZlbCBtZXJnZSBhbGdvcml0aG0gZGlkIG5vdCBoYW5kbGUgYSBkZWdlbmVyYXRlIGNhc2Ugb2YKKyAgIG1lcmdpbmcgYSBmaWxlIHdpdGggaXRzZWxmIHVzaW5nIGl0c2VsZiBhcyB0aGUgY29tbW9uIGFuY2VzdG9yCisgICBncmFjZWZ1bGx5LiAgSXQgc2hvdWxkIHByb2R1Y2UgdGhlIGZpbGUgaXRzZWxmLCBidXQgaW5zdGVhZAorICAgcHJvZHVjZWQgYW4gZW1wdHkgcmVzdWx0LgorCisgKiBHSVRfVFJBQ0UgbWVjaGFuaXNtIHNlZ2ZhdWx0ZWQgd2hlbiB0cmFjaW5nIGEgc2hlbGwtcXVvdGVkIGFsaWFzZXMuCisKKyAqIE9wZW5CU0QgYWxzbyB1c2VzIHN0X2N0aW1zcGVjIGluICJzdHJ1Y3Qgc3RhdCIsIGluc3RlYWQgb2YgInN0X2N0aW0iLgorCisgKiBXaXRoIE5PX0NST1NTX0RJUkVDVE9SWV9IQVJETElOS1MsICJtYWtlIGluc3RhbGwiIGNhbiBiZSB0b2xkIG5vdCB0bworICAgY3JlYXRlIGhhcmRsaW5rcyBiZXR3ZWVuICQoZ2l0ZXhlY2RpcikvZ2l0LSRidWlsdGluX2NvbW1hbmRzIGFuZAorICAgJChiaW5kaXIpL2dpdC4KKworICogY29tbWFuZCBjb21wbGV0aW9uIGNvZGUgaW4gYmFzaCBkaWQgbm90IHJlbGlhYmx5IGRldGVjdCB0aGF0IHdlIGFyZQorICAgaW4gYSBiYXJlIHJlcG9zaXRvcnkuCisKKyAqICJnaXQgYWRkIC4iIGluIGFuIGVtcHR5IGRpcmVjdG9yeSBjb21wbGFpbmVkIHRoYXQgcGF0aHNwZWMgIi4iIGRpZCBub3QKKyAgIG1hdGNoIGFueXRoaW5nLCB3aGljaCBtYXkgYmUgdGVjaG5pY2FsbHkgY29ycmVjdCwgYnV0IG5vdCB1c2VmdWwuICBXZQorICAgc2lsZW50bHkgbWFrZSBpdCBhIG5vLW9wIG5vdy4KKworICogImdpdCBhZGQgLXAiIChhbmQgInBhdGNoIiBhY3Rpb24gaW4gImdpdCBhZGQgLWkiKSB3YXMgYnJva2VuIHdoZW4KKyAgIHRoZSBmaXJzdCBodW5rIHRoYXQgYWRkcyBhIGxpbmUgYXQgdGhlIHRvcCB3YXMgc3BsaXQgaW50byB0d28gYW5kCisgICBib3RoIGhhbHZlcyBhcmUgbWFya2VkIHRvIGJlIHVzZWQuCisKKyAqICJnaXQgYmxhbWUgcGF0aCIgbWlzYmVoYXZlZCBhdCB0aGUgY29tbWl0IHdoZXJlIHBhdGggYmVjYW1lIGZpbGUKKyAgIGZyb20gYSBkaXJlY3Rvcnkgd2l0aCBzb21lIGZpbGVzIGluIGl0LgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiIgaGFkIGEgc2VnZmF1bHRpbmcgYnVnIHdoZW4gZGVhbGluZyB3aXRoIGEgdGFnIG9iamVjdAorICAgY3JlYXRlZCBieSBhbiBhbmNpZW50IGdpdC4KKworICogImdpdCBmb3JtYXQtcGF0Y2ggLWsiIHN0aWxsIGFkZGVkIHBhdGNoIG51bWJlcnMgaWYgZm9ybWF0Lm51bWJlcmVkCisgICBjb25maWd1cmF0aW9uIHdhcyBzZXQuCisKKyAqICJnaXQgZ3JlcCAtLWNvbG9yICcnIiBkaWQgbm90IHRlcm1pbmF0ZS4gIFRoZSBjb21tYW5kIGFsc28gaGFkCisgICBzdWJ0bGUgYnVncyB3aXRoIGl0cyAtdyBvcHRpb24uCisKKyAqIGh0dHAtcHVzaCBoYWQgYSBzbWFsbCB1c2UtYWZ0ZXItZnJlZSBidWcuCisKKyAqICJnaXQgcHVzaCIgd2FzIGNvbnZlcnRpbmcgT0ZTX0RFTFRBIHBhY2sgcmVwcmVzZW50YXRpb24gaW50byBsZXNzCisgICBlZmZpY2llbnQgUkVGX0RFTFRBIHJlcHJlc2VudGF0aW9uIHVuY29uZGl0aW9uYWxseSB1cG9uIHRyYW5zZmVyLAorICAgbWFraW5nIHRoZSB0cmFuc2ZlcnJlZCBkYXRhIHVubmVjZXNzYXJpbHkgbGFyZ2VyLgorCisgKiAiZ2l0IHJlbW90ZSBzaG93IG9yaWdpbiIgc2VnZmF1bHRlZCB3aGVuIG9yaWdpbiB3YXMgc3RpbGwgZW1wdHkuCisKK01hbnkgb3RoZXIgZ2VuZXJhbCB1c2FiaWxpdHkgdXBkYXRlcyBhcm91bmQgaGVscCB0ZXh0LCBkaWFnbm9zdGljIG1lc3NhZ2VzCithbmQgZG9jdW1lbnRhdGlvbiBhcmUgaW5jbHVkZWQgYXMgd2VsbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjMuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4zLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMjgzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4zLjMudHh0CkBAIC0wLDAgKzEsMzggQEAKK0dJVCB2MS42LjMuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjMuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhcmNoaXZlIiBydW5uaW5nIG9uIEN5Z3dpbiBjYW4gZ2V0IHN0dWNrIGluIGFuIGluZmluaXRlIGxvb3AuCisKKyAqICJnaXQgZGFlbW9uIiBkaWQgbm90IGNvcnJlY3RseSBwYXJzZSB0aGUgaW5pdGlhbCBsaW5lIHRoYXQgY2FycmllcworICAgdmlydHVhbCBob3N0IHJlcXVlc3QgaW5mb3JtYXRpb24uCisKKyAqICJnaXQgZGlmZiAtLXRleHRjb252IiBsZWFrZWQgbWVtb3J5IGJhZGx5IHdoZW4gdGhlIHRleHRjb252IGZpbHRlcgorICAgZXJyb3JlZCBvdXQuCisKKyAqIFRoZSBidWlsdC1pbiByZWd1bGFyIGV4cHJlc3Npb25zIHRvIHBpY2sgZnVuY3Rpb24gbmFtZXMgdG8gcHV0IG9uCisgICBodW5rIGhlYWRlciBsaW5lcyBmb3IgamF2YSBhbmQgb2JqYyB3ZXJlIHZlcnkgaW5lZmZpY2llbnRseSB3cml0dGVuLgorCisgKiBpbiBjZXJ0YWluIGVycm9yIHNpdHVhdGlvbnMgZ2l0LWZldGNoIChhbmQgZ2l0LWNsb25lKSBvbiBXaW5kb3dzIGRpZG4ndAorICAgZGV0ZWN0IGNvbm5lY3Rpb24gYWJvcnQgYW5kIGVuZGVkIHVwIHdhaXRpbmcgaW5kZWZpbml0ZWx5LgorCisgKiBpbXBvcnQtdGFycyBzY3JpcHQgKGluIGNvbnRyaWIpIGRpZCBub3QgaW1wb3J0IHN5bWJvbGljIGxpbmtzIGNvcnJlY3RseS4KKworICogaHR0cC5jIHVzZWQgQ1VSTE9QVF9TU0xLRVkgZXZlbiBvbiBsaWJjVVJMIHZlcnNpb24gNy45LjIsIGV2ZW4gdGhvdWdoCisgICBpdCB3YXMgb25seSBhdmFpbGFibGUgc3RhcnRpbmcgNy45LjMuCisKKyAqIGxvdy1sZXZlbCBmaWxlbGV2ZWwgbWVyZ2UgZHJpdmVyIHVzZWQgcmV0dXJuIHZhbHVlIGZyb20gc3RyZHVwKCkKKyAgIHdpdGhvdXQgY2hlY2tpbmcgaWYgd2UgcmFuIG91dCBvZiBtZW1vcnkuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWZ0IHN0cmF5IGNsb3NpbmcgcGFyZW50aGVzaXMgaW4gaXRzIHJlZmxvZyBtZXNzYWdlLgorCisgKiAiZ2l0IHJlbW90ZSBzaG93IiBkaWQgbm90IHNob3cgYWxsIHRoZSBVUkxzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmFtZWQKKyAgIHJlbW90ZSwgZXZlbiB0aG91Z2ggImdpdCByZW1vdGUgLXYiIGRpZC4gIE1hZGUgdGhlbSBjb25zaXN0ZW50IGJ5CisgICBtYWtpbmcgdGhlIGZvcm1lciBzaG93IGFsbCBVUkxzLgorCisgKiAid2hpdGVzcGFjZSIgYXR0cmlidXRlIHRoYXQgaXMgc2V0IHdhcyBtZWFudCB0byBkZXRlY3QgYWxsIGVycm9ycyBrbm93bgorICAgdG8gZ2l0LCBidXQgaXQgdG9sZCBnaXQgdG8gaWdub3JlIHRyYWlsaW5nIGNhcnJpYWdlLXJldHVybnMuCisKK0luY2x1ZGVzIG90aGVyIGRvY3VtZW50YXRpb24gZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4zLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMy40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWQ0NjFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuMy40LnR4dApAQCAtMCwwICsxLDM2IEBACitHSVQgdjEuNi4zLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4zLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgYWRkIC0tbm8taWdub3JlLWVycm9ycyIgZGlkIG5vdCBvdmVycmlkZSBjb25maWd1cmVkCisgICBhZGQuaWdub3JlLWVycm9ycyBjb25maWd1cmF0aW9uLgorCisgKiAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXgiIGRpZCBub3QgZml4IHRyYWlsaW5nIHdoaXRlc3BhY2Ugb24gYW4KKyAgIGluY29tcGxldGUgbGluZS4KKworICogImdpdCBicmFuY2giIG9wZW5lZCB0b28gbWFueSBjb21taXQgb2JqZWN0cyB1bm5lY2Vzc2FyaWx5LgorCisgKiAiZ2l0IGNoZWNrb3V0IC1mICRjb21taXQiIHdpdGggYSBwYXRoIHRoYXQgaXMgYSBmaWxlIChvciBhIHN5bWxpbmspIGluCisgICB0aGUgd29yayB0cmVlIHRvIGEgY29tbWl0IHRoYXQgaGFzIGEgZGlyZWN0b3J5IGF0IHRoZSBwYXRoIGlzc3VlZCBhbgorICAgdW5uZWNlc3NhcnkgZXJyb3IgbWVzc2FnZS4KKworICogImdpdCBkaWZmIC1jLy0tY2MiIHdhcyB2ZXJ5IGluZWZmaWNpZW50IGluIGNvYWxlc2NpbmcgdGhlIHJlbW92ZWQgbGluZXMKKyAgIHNoYXJlZCBiZXR3ZWVuIHBhcmVudHMuCisKKyAqICJnaXQgZGlmZiAtYy8tLWNjIiBzaG93ZWQgcmVtb3ZlZCBsaW5lcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmlsZQorICAgaW5jb3JyZWN0bHkuCisKKyAqICJnaXQgcmVtb3RlIHNob3cgbmlja25hbWUiIGRpZCBub3QgaG9ub3IgY29uZmlndXJlZAorICAgcmVtb3RlLm5pY2tuYW1lLnVwbG9hZHBhY2sgd2hlbiBpbnNwZWN0aW5nIHRoZSBicmFuY2hlcyBhdCB0aGUgcmVtb3RlLgorCisgKiAiZ2l0IHJlcXVlc3QtcHVsbCIgd2hlbiB0YWxraW5nIHRvIHRoZSB0ZXJtaW5hbCBmb3IgYSBwcmV2aWV3CisgICBzaG93ZWQgc29tZSBvZiB0aGUgb3V0cHV0IGluIHRoZSBwYWdlci4KKworICogImdpdCByZXF1ZXN0LXB1bGwgc3RhcnQgbmlja25hbWUgW2VuZF0iIGRpZCBub3QgaG9ub3IgY29uZmlndXJlZAorICAgcmVtb3RlLm5pY2tuYW1lLnVwbG9hZHBhY2sgd2hlbiBpdCByYW4gZ2l0LWxzLXJlbW90ZSBhZ2FpbnN0IHRoZSByZW1vdGUKKyAgIHJlcG9zaXRvcnkgdG8gbGVhcm4gdGhlIGN1cnJlbnQgdGlwIG9mIGJyYW5jaGVzLgorCitJbmNsdWRlcyBvdGhlciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIG1pbm9yIGZpeGVzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxOGM2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi4zLnR4dApAQCAtMCwwICsxLDE4MiBAQAorR0lUIHYxLjYuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworV2l0aCB0aGUgbmV4dCBtYWpvciByZWxlYXNlLCAiZ2l0IHB1c2giIGludG8gYSBicmFuY2ggdGhhdCBpcworY3VycmVudGx5IGNoZWNrZWQgb3V0IHdpbGwgYmUgcmVmdXNlZCBieSBkZWZhdWx0LiAgWW91IGNhbiBjaG9vc2UKK3doYXQgc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5LgorCitUbyBlYXNlIHRoZSB0cmFuc2l0aW9uIHBsYW4sIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeSBvZiBzdWNoIGEKK3B1c2ggcnVubmluZyB0aGlzIHJlbGVhc2Ugd2lsbCBpc3N1ZSBhIGJpZyB3YXJuaW5nIHdoZW4gdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG1pc3NpbmcuICBQbGVhc2UgcmVmZXIgdG86CisKKyAgaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0dpdEZhcSNub24tYmFyZQorICBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMTA3NzU4L2ZvY3VzPTEwODAwNworCitmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSByZWFzb24gd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhbmQgdGhlCit0cmFuc2l0aW9uIHBsYW4uCisKK0ZvciBhIHNpbWlsYXIgcmVhc29uLCAiZ2l0IHB1c2ggJHRoZXJlIDoka2lsbGVkIiB0byBkZWxldGUgdGhlIGJyYW5jaAorJGtpbGxlZCBpbiBhIHJlbW90ZSByZXBvc2l0b3J5ICR0aGVyZSwgaWYgJGtpbGxlZCBicmFuY2ggaXMgdGhlIGN1cnJlbnQKK2JyYW5jaCBwb2ludGVkIGF0IGJ5IGl0cyBIRUFELCBnZXRzIGEgbGFyZ2Ugd2FybmluZy4gIFlvdSBjYW4gY2hvb3NlIHdoYXQKK3Nob3VsZCBoYXBwZW4gdXBvbiBzdWNoIGEgcHVzaCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCityZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50IGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeS4KKworV2hlbiB0aGUgdXNlciBkb2VzIG5vdCB0ZWxsICJnaXQgcHVzaCIgd2hhdCB0byBwdXNoLCBpdCBoYXMgYWx3YXlzCitwdXNoZWQgbWF0Y2hpbmcgcmVmcy4gIEZvciBzb21lIHBlb3BsZSBpdCBpcyB1bmV4cGVjdGVkLCBhbmQgYSBuZXcKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgcHVzaC5kZWZhdWx0IGhhcyBiZWVuIGludHJvZHVjZWQgdG8gYWxsb3cKK2NoYW5naW5nIGEgZGlmZmVyZW50IGRlZmF1bHQgYmVoYXZpb3VyLiAgVG8gYWR2ZXJ0aXNlIHRoZSBuZXcgZmVhdHVyZSwKK2EgYmlnIHdhcm5pbmcgaXMgaXNzdWVkIGlmIHRoaXMgaXMgbm90IGNvbmZpZ3VyZWQgYW5kIGEgZ2l0IHB1c2ggd2l0aG91dAorYXJndW1lbnRzIGlzIGF0dGVtcHRlZC4KKworCitVcGRhdGVzIHNpbmNlIHYxLjYuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyogdmFyaW91cyBnaXQtc3ZuIHVwZGF0ZXMuCisKKyogZ2l0LWd1aSB1cGRhdGVzLCBpbmNsdWRpbmcgYW4gdXBkYXRlIHRvIFJ1c3NpYW4gdHJhbnNsYXRpb24sIGFuZCBhCisgIGZpeCB0byBhbiBpbmZpbml0ZSBsb29wIHdoZW4gc2hvd2luZyBhbiBlbXB0eSBkaWZmLgorCisqIGdpdGsgdXBkYXRlcywgaW5jbHVkaW5nIGFuIHVwZGF0ZSB0byBSdXNzaWFuIHRyYW5zbGF0aW9uIGFuZCBpbXByb3ZlZCBXaW5kb3dzCisgIHN1cHBvcnQuCisKKyhwZXJmb3JtYW5jZSkKKworKiBtYW55IHVzZXMgb2YgbHN0YXQoMikgaW4gdGhlIGNvZGVwYXRoIGZvciAiZ2l0IGNoZWNrb3V0IiBoYXZlIGJlZW4KKyAgb3B0aW1pemVkIG91dC4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisqIEJvb2xlYW4gY29uZmlndXJhdGlvbiB2YXJpYWJsZSB5ZXMvbm8gY2FuIGJlIHdyaXR0ZW4gYXMgb24vb2ZmLgorCisqIHJzeW5jOi9wYXRoL3RvL3JlcG8gY2FuIGJlIHVzZWQgdG8gcnVuIGdpdCBvdmVyIHJzeW5jIGZvciBsb2NhbAorICByZXBvc2l0b3JpZXMuICBJdCBtYXkgbm90IGJlIHVzZWZ1bCBpbiBwcmFjdGljZTsgbWVhbnQgcHJpbWFyaWx5IGZvcgorICB0ZXN0aW5nLgorCisqIGh0dHAgdHJhbnNwb3J0IGxlYXJuZWQgdG8gcHJvbXB0IGFuZCB1c2UgcGFzc3dvcmQgd2hlbiBmZXRjaGluZyBmcm9tIG9yCisgIHB1c2hpbmcgdG8gaHR0cDovL3VzZXJAaG9zdC54ei8gVVJMLgorCisqIChtc3lzZ2l0KSBwcm9ncmVzcyBvdXRwdXQgdGhhdCBpcyBzZW50IG92ZXIgdGhlIHNpZGViYW5kIHByb3RvY29sIGNhbgorICBiZSBoYW5kbGVkIGFwcHJvcHJpYXRlbHkgaW4gV2luZG93cyBjb25zb2xlLgorCisqICItLXByZXR0eT08c3R5bGU+IiBvcHRpb24gdG8gdGhlIGxvZyBmYW1pbHkgb2YgY29tbWFuZHMgY2FuIG5vdyBiZQorICBzcGVsbGVkIGFzICItLWZvcm1hdD08c3R5bGU+Ii4gIEluIGFkZGl0aW9uLCAtLWZvcm1hdD0lZm9ybWF0c3RyaW5nCisgIGlzIGEgc2hvcnQtaGFuZCBmb3IgLS1wcmV0dHk9dGZvcm1hdDolZm9ybWF0c3RyaW5nLgorCisqICItLW9uZWxpbmUiIGlzIGEgc3lub255bSBmb3IgIi0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0Ii4KKworKiAiLS1ncmFwaCIgdG8gdGhlICJnaXQgbG9nIiBmYW1pbHkgY2FuIGRyYXcgdGhlIGNvbW1pdCBhbmNlc3RyeSBncmFwaAorICBpbiBjb2xvcnMuCisKKyogSWYgeW91IHJlYWxpemUgdGhhdCB5b3UgYm90Y2hlZCB0aGUgcGF0Y2ggd2hlbiB5b3UgYXJlIGVkaXRpbmcgaHVua3MKKyAgd2l0aCB0aGUgJ2VkaXQnIGFjdGlvbiBpbiBnaXQtYWRkIC1pLy1wLCB5b3UgY2FuIGFib3J0IHRoZSBlZGl0b3IgdG8KKyAgdGVsbCBnaXQgbm90IHRvIGFwcGx5IGl0LgorCisqIEB7LTF9IGlzIGEgbmV3IHdheSB0byByZWZlciB0byB0aGUgbGFzdCBicmFuY2ggeW91IHdlcmUgb24gaW50cm9kdWNlZCBpbgorICAxLjYuMiwgYnV0IHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIGRpZCBub3QgdGVhY2ggdGhpcyB0byBhIGZldworICBjb21tYW5kcy4gIE5vdyB0aGUgc3ludGF4IHdvcmtzIHdpdGggImJyYW5jaCAtbSBAey0xfSBuZXduYW1lIi4KKworKiBnaXQtYXJjaGl2ZSBsZWFybmVkIC0tb3V0cHV0PTxmaWxlPiBvcHRpb24uCisKKyogZ2l0LWFyY2hpdmUgdGFrZXMgYXR0cmlidXRlcyBmcm9tIHRoZSB0cmVlIGJlaW5nIGFyY2hpdmVkOyBzdHJpY3RseQorICBzcGVha2luZywgdGhpcyBpcyBhbiBpbmNvbXBhdGlibGUgYmVoYXZpb3VyIGNoYW5nZSwgYnV0IGlzIGEgZ29vZCBvbmUuCisgIFVzZSAtLXdvcmt0cmVlLWF0dHJpYnV0ZXMgb3B0aW9uIHRvIGFsbG93IGl0IHRvIHJlYWQgYXR0cmlidXRlcyBmcm9tCisgIHRoZSB3b3JrIHRyZWUgYXMgYmVmb3JlIChkZXByZWNhdGVkIGdpdC10YXIgdHJlZSBjb21tYW5kIGFsd2F5cyByZWFkcworICBhdHRyaWJ1dGVzIGZyb20gdGhlIHdvcmsgdHJlZSkuCisKKyogZ2l0LWJpc2VjdCBzaG93cyBub3QganVzdCB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBjb21taXRzIHdob3NlIGdvb2RuZXNzCisgIGlzIHVua25vd24sIGJ1dCBhbHNvIHNob3dzIHRoZSBlc3RpbWF0ZWQgbnVtYmVyIG9mIHJlbWFpbmluZyByb3VuZHMuCisKKyogWW91IGNhbiBnaXZlIC0tZGF0ZT08Zm9ybWF0PiBvcHRpb24gdG8gZ2l0LWJsYW1lLgorCisqICJnaXQtYnJhbmNoIC1yIiBzaG93cyBIRUFEIHN5bXJlZiB0aGF0IHBvaW50cyBhdCBhIHJlbW90ZSBicmFuY2ggaW4KKyAgaW50ZXJlc3Qgb2YgZWFjaCB0cmFja2VkIHJlbW90ZSByZXBvc2l0b3J5LgorCisqICJnaXQtYnJhbmNoIC12IC12IiBpcyBhIG5ldyB3YXkgdG8gZ2V0IGxpc3Qgb2YgbmFtZXMgZm9yIGJyYW5jaGVzIGFuZCB0aGUKKyAgInVwc3RyZWFtIiBicmFuY2ggZm9yIHRoZW0uCisKKyogZ2l0LWNvbmZpZyBsZWFybmVkIC1lIG9wdGlvbiB0byBvcGVuIGFuIGVkaXRvciB0byBlZGl0IHRoZSBjb25maWcgZmlsZQorICBkaXJlY3RseS4KKworKiBnaXQtY2xvbmUgcnVucyBwb3N0LWNoZWNrb3V0IGhvb2sgd2hlbiBydW4gd2l0aG91dCAtLW5vLWNoZWNrb3V0LgorCisqIGdpdC1kaWZmdG9vbCBpcyBub3cgcGFydCBvZiB0aGUgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgY29tbWFuZCwgcHJpbWFyaWx5CisgIG1haW50YWluZWQgYnkgRGF2aWQgQWd1aWxhci4KKworKiBnaXQtZm9yLWVhY2gtcmVmIGxlYXJuZWQgYSBuZXcgInVwc3RyZWFtIiB0b2tlbi4KKworKiBnaXQtZm9ybWF0LXBhdGNoIGNhbiBiZSB0b2xkIHRvIHVzZSBhdHRhY2htZW50IHdpdGggYSBuZXcgY29uZmlndXJhdGlvbiwKKyAgZm9ybWF0LmF0dGFjaC4KKworKiBnaXQtZm9ybWF0LXBhdGNoIGNhbiBiZSB0b2xkIHRvIHByb2R1Y2UgZGVlcCBvciBzaGFsbG93IG1lc3NhZ2UgdGhyZWFkcy4KKworKiBnaXQtZm9ybWF0LXBhdGNoIGNhbiBiZSB0b2xkIHRvIGFsd2F5cyBhZGQgc2lnbi1vZmYgd2l0aCBhIGNvbmZpZ3VyYXRpb24KKyAgdmFyaWFibGUuCisKKyogZ2l0LWZvcm1hdC1wYXRjaCBsZWFybmVkIGZvcm1hdC5oZWFkZXJzIGNvbmZpZ3VyYXRpb24gdG8gYWRkIGV4dHJhCisgIGhlYWRlciBmaWVsZHMgdG8gdGhlIG91dHB1dC4gIFRoaXMgYmVoYXZpb3VyIGlzIHNpbWlsYXIgdG8gdGhlIGV4aXN0aW5nCisgIC0tYWRkLWhlYWRlcj08aGVhZGVyPiBvcHRpb24gb2YgdGhlIGNvbW1hbmQuCisKKyogZ2l0LWZvcm1hdC1wYXRjaCBnaXZlcyBodW1hbiByZWFkYWJsZSBuYW1lcyB0byB0aGUgYXR0YWNoZWQgZmlsZXMsIHdoZW4KKyAgdG9sZCB0byBzZW5kIHBhdGNoZXMgYXMgYXR0YWNobWVudHMuCisKKyogZ2l0LWdyZXAgbGVhcm5lZCB0byBoaWdobGlnaHQgdGhlIGZvdW5kIHN1YnN0cmluZ3MgaW4gY29sb3IuCisKKyogZ2l0LWltYXAtc2VuZCBsZWFybmVkIHRvIHdvcmsgYXJvdW5kIFRodW5kZXJiaXJkJ3MgaW5hYmlsaXR5IHRvIGVhc2lseQorICBkaXNhYmxlIGZvcm1hdD1mbG93ZWQgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLCBpbWFwLnByZWZvcm1hdHRlZEhUTUwuCisKKyogZ2l0LXJlYmFzZSBjYW4gYmUgdG9sZCB0byByZWJhc2UgdGhlIHNlcmllcyBldmVuIGlmIHlvdXIgYnJhbmNoIGlzIGEKKyAgZGVzY2VuZGFudCBvZiB0aGUgY29tbWl0IHlvdSBhcmUgcmViYXNpbmcgb250byB3aXRoIC0tZm9yY2UtcmViYXNlCisgIG9wdGlvbi4KKworKiBnaXQtcmViYXNlIGNhbiBiZSB0b2xkIHRvIHJlcG9ydCBkaWZmc3RhdCB3aXRoIHRoZSAtLXN0YXQgb3B0aW9uLgorCisqIE91dHB1dCBmcm9tIGdpdC1yZW1vdGUgY29tbWFuZCBoYXMgYmVlbiB2YXN0bHkgaW1wcm92ZWQuCisKKyogImdpdCByZW1vdGUgdXBkYXRlIC0tcHJ1bmUgJHJlbW90ZSIgdXBkYXRlcyBmcm9tIHRoZSBuYW1lZCByZW1vdGUgYW5kCisgIHRoZW4gcHJ1bmVzIHN0YWxlIHRyYWNraW5nIGJyYW5jaGVzLgorCisqIGdpdC1zZW5kLWVtYWlsIGxlYXJuZWQgLS1jb25maXJtIG9wdGlvbiB0byByZXZpZXcgdGhlIENjOiBsaXN0IGJlZm9yZQorICBzZW5kaW5nIHRoZSBtZXNzYWdlcyBvdXQuCisKKyhkZXZlbG9wZXJzKQorCisqIFRlc3Qgc2NyaXB0cyBjYW4gYmUgcnVuIHVuZGVyIHZhbGdyaW5kLgorCisqIFRlc3Qgc2NyaXB0cyBjYW4gYmUgcnVuIHdpdGggaW5zdGFsbGVkIGdpdC4KKworKiBNYWtlZmlsZSBsZWFybmVkICdjb3ZlcmFnZScgb3B0aW9uIHRvIHJ1biB0aGUgdGVzdCBzdWl0ZXMgd2l0aAorICBjb3ZlcmFnZSB0cmFja2luZyBlbmFibGVkLgorCisqIEJ1aWxkaW5nIHRoZSBtYW5wYWdlcyB3aXRoIGRvY2Jvb2steHNsIGJldHdlZW4gMS42OS4xIGFuZCAxLjcxLjEgbm93CisgIHJlcXVpcmVzIHNldHRpbmcgRE9DQk9PS19TVVBQUkVTU19TUCB0byB3b3JrIGFyb3VuZCBhIGRvY2Jvb2steHNsIGJ1Zy4KKyAgVGhpcyB3b3JrYXJvdW5kIHVzZWQgdG8gYmUgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgY2F1c2VzIHByb2JsZW1zCisgIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgZG9jYm9vay14c2wuICBJbiBhZGRpdGlvbiwgdGhlcmUgYXJlIGEgZmV3IG1vcmUKKyAga25vYnMgeW91IGNhbiB0d2VhayB0byB3b3JrIGFyb3VuZCBpc3N1ZXMgd2l0aCB2YXJpb3VzIHZlcnNpb25zIG9mIHRoZQorICBkb2Nib29rLXhzbCBwYWNrYWdlLiAgU2VlIGNvbW1lbnRzIGluIERvY3VtZW50YXRpb24vTWFrZWZpbGUgZm9yIGRldGFpbHMuCisKKyogU3VwcG9ydCBmb3IgYnVpbGRpbmcgYW5kIHRlc3RpbmcgYSBzdWJzZXQgb2YgZ2l0IG9uIGEgc3lzdGVtIHdpdGhvdXQgYQorICB3b3JraW5nIHBlcmwgaGFzIGJlZW4gaW1wcm92ZWQuCisKKworRml4ZXMgc2luY2UgdjEuNi4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS42LjIuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKK0hlcmUgYXJlIGZpeGVzIHRoYXQgdGhpcyByZWxlYXNlIGhhcywgYnV0IGhhdmUgbm90IGJlZW4gYmFja3BvcnRlZCB0bwordjEuNi4yLlggc2VyaWVzLgorCisqICJnaXQtYXBwbHkiIHJlamVjdGVkIGEgcGF0Y2ggdGhhdCBzd2FwcyB0d28gZmlsZXMgKGkuZS4gcmVuYW1lcyBBIHRvIEIKKyAgYW5kIEIgdG8gQSBhdCB0aGUgc2FtZSB0aW1lKS4gIE1heSBuZWVkIHRvIGJlIGJhY2twb3J0ZWQgYnkgY2hlcnJ5CisgIHBpY2tpbmcgZDhjODFkZiBhbmQgdGhlbiA3ZmFjMGVlKS4KKworKiBUaGUgaW5pdGlhbCBjaGVja291dCBkaWQgbm90IHJlYWQgdGhlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgLmdpdGF0dHJpYnV0ZQorICBmaWxlIHRoYXQgaXMgYmVpbmcgY2hlY2tlZCBvdXQuCisKKyogZ2l0LWdjIHNwZW50IGV4Y2Vzc2l2ZSBhbW91bnQgb2YgdGltZSB0byBkZWNpZGUgaWYgYW4gb2JqZWN0IGFwcGVhcnMKKyAgaW4gYSBsb2NhbGx5IGV4aXN0aW5nIHBhY2sgKGlmIG5lZWRlZCwgYmFja3BvcnQgYnkgbWVyZ2luZyA2OWUwMjBhKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjYuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5MDQ0MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjQudHh0CkBAIC0wLDAgKzEsMTQ3IEBACitHSVQgdjEuNi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitXaXRoIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UsICJnaXQgcHVzaCIgaW50byBhIGJyYW5jaCB0aGF0IGlzCitjdXJyZW50bHkgY2hlY2tlZCBvdXQgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuICBZb3UgY2FuIGNob29zZQord2hhdCBzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbgordmFyaWFibGUgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKK1RvIGVhc2UgdGhlIHRyYW5zaXRpb24gcGxhbiwgdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5IG9mIHN1Y2ggYQorcHVzaCBydW5uaW5nIHRoaXMgcmVsZWFzZSB3aWxsIGlzc3VlIGEgYmlnIHdhcm5pbmcgd2hlbiB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbWlzc2luZy4gIFBsZWFzZSByZWZlciB0bzoKKworICBodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvR2l0RmFxI25vbi1iYXJlCisgIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC8xMDc3NTgvZm9jdXM9MTA4MDA3CisKK2ZvciBtb3JlIGRldGFpbHMgb24gdGhlIHJlYXNvbiB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFuZCB0aGUKK3RyYW5zaXRpb24gcGxhbi4KKworRm9yIGEgc2ltaWxhciByZWFzb24sICJnaXQgcHVzaCAkdGhlcmUgOiRraWxsZWQiIHRvIGRlbGV0ZSB0aGUgYnJhbmNoCiska2lsbGVkIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkgJHRoZXJlLCBpZiAka2lsbGVkIGJyYW5jaCBpcyB0aGUgY3VycmVudAorYnJhbmNoIHBvaW50ZWQgYXQgYnkgaXRzIEhFQUQsIGdldHMgYSBsYXJnZSB3YXJuaW5nLiAgWW91IGNhbiBjaG9vc2Ugd2hhdAorc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKK3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQgaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5LgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNi4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworICogZ2l0d2ViIFBlcmwgc3R5bGUgY2xlYW4tdXAuCisKKyAqIGdpdC1zdm4gdXBkYXRlcywgaW5jbHVkaW5nIGEgbmV3IC0tYXV0aG9ycy1wcm9nIG9wdGlvbiB0byBtYXAgYXV0aG9yCisgICBuYW1lcyBieSBpbnZva2luZyBhbiBleHRlcm5hbCBwcm9ncmFtLCAnZ2l0IHN2biByZXNldCcgdG8gdW53aW5kCisgICAnZ2l0IHN2biBmZXRjaCcsIHN1cHBvcnQgZm9yIG1vcmUgdGhhbiBvbmUgYnJhbmNoZXMsIGRvY3VtZW50aW5nCisgICBvZiB0aGUgdXNlZnVsIC0tbWluaW1pemUtdXJsIGZlYXR1cmUsIG5ldyAiZ2l0IHN2biBnYyIgY29tbWFuZCwgZXRjLgorCisocG9ydGFiaWxpdHkpCisKKyAqIFdlIGZlZWQgaWNvbnYgd2l0aCAiVVRGLTgiIGluc3RlYWQgb2YgInV0ZjgiOyB0aGUgZm9ybWVyIGlzCisgICB1bmRlcnN0b29kIG1vcmUgd2lkZWx5LiAgU2ltaWxhcmx5IHVwZGF0ZWQgdGVzdCBzY3JpcHRzIHRvIHVzZQorICAgZW5jb2RpbmcgbmFtZXMgbW9yZSB3aWRlbHkgdW5kZXJzdG9vZCAoZS5nLiB1c2UgIklTTzg4NTktMSIgaW5zdGVhZAorICAgb2YgIklTTy04ODU5LTEiKS4KKworICogVmFyaW91cyBwb3J0YWJpbGl0eSBmaXhlcy93b3JrYXJvdW5kcyBmb3IgZGlmZmVyZW50IHZpbnRhZ2VzIG9mCisgICBTdW5PUywgSVJJWCwgYW5kIFdpbmRvd3MuCisKKyAqIEdpdC1vdmVyLXNzaCB0cmFuc3BvcnQgb24gV2luZG93cyBzdXBwb3J0cyBQdVRUWSBwbGluayBhbmQgVG9ydG9pc2VQbGluay4KKworKHBlcmZvcm1hbmNlKQorCisgKiBNYW55IHJlcGVhdGVkIHVzZSBvZiBsc3RhdCgpIGFyZSBvcHRpbWl6ZWQgb3V0IGluICJjaGVja291dCIgY29kZXBhdGguCisKKyAqIGdpdC1zdGF0dXMgKGFuZCB1bmRlcmx5aW5nIGdpdC1kaWZmLWluZGV4IC0tY2FjaGVkKSBhcmUgb3B0aW1pemVkCisgICB0byB0YWtlIGFkdmFudGFnZSBvZiBjYWNoZS10cmVlIGluZm9ybWF0aW9uIGluIHRoZSBpbmRleC4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisgKiAiZ2l0IGFkZCAtLWVkaXQiIGxldHMgdXNlcnMgZWRpdCB0aGUgd2hvbGUgcGF0Y2ggdGV4dCB0byBmaW5lLXR1bmUgd2hhdAorICAgaXMgYWRkZWQgdG8gdGhlIGluZGV4LgorCisgKiAiZ2l0IGFtIiBhY2NlcHRzIFN0R0lUIHNlcmllcyBmaWxlIGFzIGl0cyBpbnB1dC4KKworICogImdpdCBiaXNlY3Qgc2tpcCIgc2tpcHMgdG8gYSBtb3JlIHJhbmRvbWx5IGNob3NlbiBwbGFjZSBpbiB0aGUgaG9wZQorICAgdG8gYXZvaWQgdGVzdGluZyBhIGNvbW1pdCB0aGF0IGlzIHRvbyBjbG9zZSB0byBhIGNvbW1pdCB0aGF0IGlzCisgICBhbHJlYWR5IGtub3duIHRvIGJlIHVudGVzdGFibGUuCisKKyAqICJnaXQgY3ZzZXhwb3J0Y29tbWl0IiBsZWFybmVkIC1rIG9wdGlvbiB0byBzdG9wIENWUyBrZXl3b3JkcyBleHBhbnNpb24KKworICogImdpdCBmYXN0LWV4cG9ydCIgbGVhcm5lZCB0byBoYW5kbGUgaGlzdG9yeSBzaW1wbGlmaWNhdGlvbiBtb3JlCisgICBncmFjZWZ1bGx5LgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBsZWFybmVkIGFuIG9wdGlvbiAtLXRhZy1vZi1maWx0ZXJlZC1vYmplY3QgdG8gaGFuZGxlCisgICBkYW5nbGluZyB0YWdzIHJlc3VsdGluZyBmcm9tIGhpc3Rvcnkgc2ltcGxpZmljYXRpb24gbW9yZSB1c2VmdWxseS4KKworICogImdpdCBncmVwIiBsZWFybmVkIC1wIG9wdGlvbiB0byBzaG93IHRoZSBsb2NhdGlvbiBvZiB0aGUgbWF0Y2ggdXNpbmcgdGhlCisgICBzYW1lIGNvbnRleHQgaHVuayBtYXJrZXIgImdpdCBkaWZmIiB1c2VzLgorCisgKiBodHRwcyB0cmFuc3BvcnQgY2FuIG9wdGlvbmFsbHkgYmUgdG9sZCB0aGF0IHRoZSB1c2VkIGNsaWVudAorICAgY2VydGlmaWNhdGUgaXMgcGFzc3dvcmQgcHJvdGVjdGVkLCBpbiB3aGljaCBjYXNlIGl0IGFza3MgdGhlCisgICBwYXNzd29yZCBvbmx5IG9uY2UuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBpcyBJUHY2IGF3YXJlLgorCisgKiAiZ2l0IGxvZyAtLWdyYXBoIiBkcmF3cyBncmFwaHMgbW9yZSBjb21wYWN0bHkgYnkgdXNpbmcgaG9yaXpvbnRhbCBsaW5lcworICAgd2hlbiBhYmxlLgorCisgKiAiZ2l0IGxvZyAtLWRlY29yYXRlIiBzaG93cyBzaG9ydGVyIHJlZm5hbWVzIGJ5IHN0cmlwcGluZyB3ZWxsLWtub3duCisgICByZWZzLyogcHJlZml4LgorCisgKiAiZ2l0IHB1c2ggJG5hbWUiIGhvbm9ycyByZW1vdGUuJG5hbWUucHVzaHVybCBpZiBwcmVzZW50IGJlZm9yZQorICAgdXNpbmcgcmVtb3RlLiRuYW1lLnVybC4gIEluIG90aGVyIHdvcmRzLCB0aGUgVVJMIHVzZWQgZm9yIGZldGNoaW5nCisgICBhbmQgcHVzaGluZyBjYW4gYmUgZGlmZmVyZW50LgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIHVuZGVyc3RhbmRzIHF1b3RlZCBhbGlhc2VzIGluIC5tYWlscmMgZmlsZXMgKG1pZ2h0CisgICBoYXZlIHRvIGJlIGJhY2twb3J0ZWQgdG8gMS42LjMuWCkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgY2FuIGZldGNoIHRoZSBzZW5kZXIgYWRkcmVzcyBmcm9tIHRoZSBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZSAic2VuZG1haWwuZnJvbSIgKGFuZCAic2VuZG1haWwuPGlkZW50aXR5Pi5mcm9tIikuCisKKyAqICJnaXQgc2hvdy1icmFuY2giIGNhbiBjb2xvciBpdHMgb3V0cHV0LgorCisgKiAiYWRkIiBhbmQgInVwZGF0ZSIgc3ViY29tbWFuZHMgdG8gImdpdCBzdWJtb2R1bGUiIGxlYXJuZWQgLS1yZWZlcmVuY2UKKyAgIG9wdGlvbiB0byB1c2UgbG9jYWwgY2xvbmUgd2l0aCByZWZlcmVuY2VzLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGxlYXJuZWQgLS1yZWJhc2Ugb3B0aW9uIHRvIHVwZGF0ZSBjaGVja2VkCisgICBvdXQgc3VibW9kdWxlcyBieSByZWJhc2luZyB0aGUgbG9jYWwgY2hhbmdlcy4KKworICogImdpdHdlYiIgY2FuIG9wdGlvbmFsbHkgdXNlIGdyYXZhdGFyIHRvIGFkb3JuIGF1dGhvci9jb21taXR0ZXIgbmFtZXMuCisKKyhkZXZlbG9wZXJzKQorCisgKiBBIG1ham9yIHBhcnQgb2YgdGhlICJnaXQgYmlzZWN0IiB3cmFwcGVyIGhhcyBtb3ZlZCB0byBDLgorCisgKiBGb3JtYXR0aW5nIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIEFzY2lpRG9jIDguNC4xIGlzIG5vdyBzdXBwb3J0ZWQuCisKK0ZpeGVzIHNpbmNlIHYxLjYuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNi4zLlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitIZXJlIGFyZSBmaXhlcyB0aGF0IHRoaXMgcmVsZWFzZSBoYXMsIGJ1dCBoYXZlIG5vdCBiZWVuIGJhY2twb3J0ZWQgdG8KK3YxLjYuMy5YIHNlcmllcy4KKworICogImdpdCBkaWZmLXRyZWUgLXIgLXQiIHVzZWQgdG8gb21pdCBuZXcgb3IgcmVtb3ZlZCBkaXJlY3RvcmllcyBmcm9tCisgICB0aGUgb3V0cHV0LiAgZGY1MzNmMyAoZGlmZi10cmVlIC1yIC10OiBpbmNsdWRlIGFkZGVkL3JlbW92ZWQKKyAgIGRpcmVjdG9yaWVzIGluIHRoZSBvdXRwdXQsIDIwMDktMDYtMTMpIG1heSBuZWVkIHRvIGJlIGNoZXJyeS1waWNrZWQKKyAgIHRvIGJhY2twb3J0IHRoaXMgZml4LgorCisgKiBUaGUgd2F5IEdpdC5wbSBzZXRzIHVwIGEgUmVwb3NpdG9yeSBvYmplY3Qgd2FzIG5vdCBmcmllbmRseSB0byBjYWxsZXJzCisgICB0aGF0IGNoZGlyIGFyb3VuZC4gIEl0IG5vdyBpbnRlcm5hbGx5IHJlY29yZHMgdGhlIHJlcG9zaXRvcnkgbG9jYXRpb24KKyAgIGFzIGFuIGFic29sdXRlIHBhdGggd2hlbiBhdXRvZGV0ZWN0ZWQuCisKKyAqIFJlbW92aW5nIGEgc2VjdGlvbiB3aXRoICJnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24iLCB3aGVuIGl0cworICAgc2VjdGlvbiBoZWFkZXIgaGFzIGEgdmFyaWFibGUgZGVmaW5pdGlvbiBvbiB0aGUgc2FtZSBsaW5lLCBsb3N0CisgICB0aGF0IHZhcmlhYmxlIGRlZmluaXRpb24uCisKKyAqICJnaXQgcmViYXNlIC1wIC0tb250byIgdXNlZCB0byBhbHdheXMgbGVhdmUgc2lkZSBicmFuY2hlcyBvZiBhIG1lcmdlCisgICBpbnRhY3QsIGV2ZW4gd2hlbiBib3RoIGJyYW5jaGVzIGFyZSBzdWJqZWN0IHRvIHJld3JpdGluZy4KKworICogImdpdCByZXBhY2siIHVzZWQgdG8gZmFpdGhmdWxseSBmb2xsb3cgZ3JhZnRzIGFuZCBjb25zaWRlcmVkIHRydWUKKyAgIHBhcmVudHMgcmVjb3JkZWQgaW4gdGhlIGNvbW1pdCBvYmplY3QgdW5yZWFjaGFibGUgZnJvbSB0aGUgY29tbWl0LgorICAgQWZ0ZXIgc3VjaCBhIHJlcGFja2luZywgeW91IGNhbm5vdCByZW1vdmUgZ3JhZnRzIHdpdGhvdXQgY29ycnVwdGluZworICAgdGhlIHJlcG9zaXRvcnkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCBkZXRlY3QgZXJyb25lb3VzIGxvb3BzIGluIGFsaWFzIGV4cGFuc2lvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCmluZGV4IGJhMDdjOGMuLjc2ZmM4NGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwpAQCAtNiw5ICs2LDEzIEBACiAJLSBjaGVjayBmb3IgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSB3aXRoICJnaXQgZGlmZiAtLWNoZWNrIgogCSAgYmVmb3JlIGNvbW1pdHRpbmcKIAktIGRvIG5vdCBjaGVjayBpbiBjb21tZW50ZWQgb3V0IGNvZGUgb3IgdW5uZWVkZWQgZmlsZXMKLQktIHByb3ZpZGUgYSBtZWFuaW5nZnVsIGNvbW1pdCBtZXNzYWdlCiAJLSB0aGUgZmlyc3QgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGJlIGEgc2hvcnQKIAkgIGRlc2NyaXB0aW9uIGFuZCBzaG91bGQgc2tpcCB0aGUgZnVsbCBzdG9wCisJLSB0aGUgYm9keSBzaG91bGQgcHJvdmlkZSBhIG1lYW5pbmdmdWwgY29tbWl0IG1lc3NhZ2UsIHdoaWNoOgorCQktIHVzZXMgdGhlIGltcGVyYXRpdmUsIHByZXNlbnQgdGVuc2U6ICJjaGFuZ2UiLAorCQkgIG5vdCAiY2hhbmdlZCIgb3IgImNoYW5nZXMiLgorCQktIGluY2x1ZGVzIG1vdGl2YXRpb24gZm9yIHRoZSBjaGFuZ2UsIGFuZCBjb250cmFzdHMKKwkJICBpdHMgaW1wbGVtZW50YXRpb24gd2l0aCBwcmV2aW91cyBiZWhhdmlvdXIKIAktIGlmIHlvdSB3YW50IHlvdXIgd29yayBpbmNsdWRlZCBpbiBnaXQuZ2l0LCBhZGQgYQogCSAgIlNpZ25lZC1vZmYtYnk6IFlvdXIgTmFtZSA8eW91QGV4YW1wbGUuY29tPiIgbGluZSB0byB0aGUKIAkgIGNvbW1pdCBtZXNzYWdlIChvciBqdXN0IHVzZSB0aGUgb3B0aW9uICItcyIgd2hlbgpAQCAtNjIsNiArNjYsMTQgQEAKIAogSWYgeW91ciBkZXNjcmlwdGlvbiBzdGFydHMgdG8gZ2V0IHRvbyBsb25nLCB0aGF0J3MgYSBzaWduIHRoYXQgeW91CiBwcm9iYWJseSBuZWVkIHRvIHNwbGl0IHVwIHlvdXIgY29tbWl0IHRvIGZpbmVyIGdyYWluZWQgcGllY2VzLgorVGhhdCBiZWluZyBzYWlkLCBwYXRjaGVzIHdoaWNoIHBsYWlubHkgZGVzY3JpYmUgdGhlIHRoaW5ncyB0aGF0CitoZWxwIHJldmlld2VycyBjaGVjayB0aGUgcGF0Y2gsIGFuZCBmdXR1cmUgbWFpbnRhaW5lcnMgdW5kZXJzdGFuZAordGhlIGNvZGUsIGFyZSB0aGUgbW9zdCBiZWF1dGlmdWwgcGF0Y2hlcy4gIERlc2NyaXB0aW9ucyB0aGF0IHN1bW1hcmlzZQordGhlIHBvaW50IGluIHRoZSBzdWJqZWN0IHdlbGwsIGFuZCBkZXNjcmliZSB0aGUgbW90aXZhdGlvbiBmb3IgdGhlCitjaGFuZ2UsIHRoZSBhcHByb2FjaCB0YWtlbiBieSB0aGUgY2hhbmdlLCBhbmQgaWYgcmVsZXZhbnQgaG93IHRoaXMKK2RpZmZlcnMgc3Vic3RhbnRpYWxseSBmcm9tIHRoZSBwcmlvciB2ZXJzaW9uLCBjYW4gYmUgZm91bmQgb24gVXNlbmV0CithcmNoaXZlcyBiYWNrIGludG8gdGhlIGxhdGUgODAncy4gIENvbnNpZGVyIGl0IGxpa2UgZ29vZCBOZXRpcXVldHRlLAorYnV0IGZvciBjb2RlLgogCiBPaCwgYW5vdGhlciB0aGluZy4gIEkgYW0gcGlja3kgYWJvdXQgd2hpdGVzcGFjZXMuICBNYWtlIHN1cmUgeW91cgogY2hhbmdlcyBkbyBub3QgdHJpZ2dlciBlcnJvcnMgd2l0aCB0aGUgc2FtcGxlIHByZS1jb21taXQgaG9vayBzaGlwcGVkCkBAIC0zNzYsOSArMzg4LDM2IEBACiAKIChBIExhcmdlIEFuZ3J5IFNDTSkKIAorQnkgZGVmYXVsdCwgVGh1bmRlcmJpcmQgd2lsbCBib3RoIHdyYXAgZW1haWxzIGFzIHdlbGwgYXMgZmxhZyB0aGVtIGFzCitiZWluZyAnZm9ybWF0PWZsb3dlZCcsIGJvdGggb2Ygd2hpY2ggd2lsbCBtYWtlIHRoZSByZXN1bHRpbmcgZW1haWwgdW51c2FibGUKK2J5IGdpdC4KKwogSGVyZSBhcmUgc29tZSBoaW50cyBvbiBob3cgdG8gc3VjY2Vzc2Z1bGx5IHN1Ym1pdCBwYXRjaGVzIGlubGluZSB1c2luZwogVGh1bmRlcmJpcmQuCiAKK1RoZXJlIGFyZSB0d28gZGlmZmVyZW50IGFwcHJvYWNoZXMuICBPbmUgYXBwcm9hY2ggaXMgdG8gY29uZmlndXJlCitUaHVuZGVyYmlyZCB0byBub3QgbWFuZ2xlIHBhdGNoZXMuICBUaGUgc2Vjb25kIGFwcHJvYWNoIGlzIHRvIHVzZQorYW4gZXh0ZXJuYWwgZWRpdG9yIHRvIGtlZXAgVGh1bmRlcmJpcmQgZnJvbSBtYW5nbGluZyB0aGUgcGF0Y2hlcy4KKworQXBwcm9hY2ggIzEgKGNvbmZpZ3VyYXRpb24pOgorCitUaGlzIHJlY2lwZSBpcyBjdXJyZW50IGFzIG9mIFRodW5kZXJiaXJkIDIuMC4wLjE5LiAgVGhyZWUgc3RlcHM6CisgIDEuICBDb25maWd1cmUgeW91ciBtYWlsIHNlcnZlciBjb21wb3NpdGlvbiBhcyBwbGFpbiB0ZXh0CisgICAgICBFZGl0Li4uQWNjb3VudCBTZXR0aW5ncy4uLkNvbXBvc2l0aW9uICYgQWRkcmVzc2luZywKKyAgICAgICAgdW5jaGVjayAnQ29tcG9zZSBNZXNzYWdlcyBpbiBIVE1MJy4KKyAgMi4gIENvbmZpZ3VyZSB5b3VyIGdlbmVyYWwgY29tcG9zaXRpb24gd2luZG93IHRvIG5vdCB3cmFwCisgICAgICBFZGl0Li5QcmVmZXJlbmNlcy4uQ29tcG9zaXRpb24sIHdyYXAgcGxhaW4gdGV4dCBtZXNzYWdlcyBhdCAwCisgIDMuICBEaXNhYmxlIHRoZSB1c2Ugb2YgZm9ybWF0PWZsb3dlZAorICAgICAgRWRpdC4uUHJlZmVyZW5jZXMuLkFkdmFuY2VkLi5Db25maWcgRWRpdG9yLiAgU2VhcmNoIGZvcjoKKyAgICAgICAgbWFpbG5ld3Muc2VuZF9wbGFpbnRleHRfZmxvd2VkCisgICAgICB0b2dnbGUgaXQgdG8gbWFrZSBzdXJlIGl0IGlzIHNldCB0byAnZmFsc2UnLgorCitBZnRlciB0aGF0IGlzIGRvbmUsIHlvdSBzaG91bGQgYmUgYWJsZSB0byBjb21wb3NlIGVtYWlsIGFzIHlvdQorb3RoZXJ3aXNlIHdvdWxkIChjdXQgKyBwYXN0ZSwgZ2l0LWZvcm1hdC1wYXRjaCB8IGdpdC1pbWFwLXNlbmQsIGV0YyksCithbmQgdGhlIHBhdGNoZXMgc2hvdWxkIG5vdCBiZSBtYW5nbGVkLgorCitBcHByb2FjaCAjMiAoZXh0ZXJuYWwgZWRpdG9yKToKKwogVGhpcyByZWNpcGUgYXBwZWFycyB0byB3b3JrIHdpdGggdGhlIGN1cnJlbnQgWyoxKl0gVGh1bmRlcmJpcmQgZnJvbSBTdXNlLgogCiBUaGUgZm9sbG93aW5nIFRodW5kZXJiaXJkIGV4dGVuc2lvbnMgYXJlIG5lZWRlZDoKQEAgLTQ2NCw2ICs1MDMsMTIgQEAKIEdtYWlsCiAtLS0tLQogCitHTWFpbCBkb2VzIG5vdCBhcHBlYXIgdG8gaGF2ZSBhbnkgd2F5IHRvIHR1cm4gb2ZmIGxpbmUgd3JhcHBpbmcgaW4gdGhlIHdlYgoraW50ZXJmYWNlLCBzbyB0aGlzIHdpbGwgbWFuZ2xlIGFueSBlbWFpbHMgdGhhdCB5b3Ugc2VuZC4gIFlvdSBjYW4gaG93ZXZlcgordXNlIGFueSBJTUFQIGVtYWlsIGNsaWVudCB0byBjb25uZWN0IHRvIHRoZSBnb29nbGUgaW1hcCBzZXJ2ZXIsIGFuZCBmb3J3YXJkCit0aGUgZW1haWxzIHRocm91Z2ggdGhhdC4gIEp1c3QgbWFrZSBzdXJlIHRvIGRpc2FibGUgbGluZSB3cmFwcGluZyBpbiB0aGF0CitlbWFpbCBjbGllbnQuICBBbHRlcm5hdGl2ZWx5LCB1c2UgImdpdCBzZW5kLWVtYWlsIiBpbnN0ZWFkLgorCiBTdWJtaXR0aW5nIHByb3Blcmx5IGZvcm1hdHRlZCBwYXRjaGVzIHZpYSBHbWFpbCBpcyBzaW1wbGUgbm93IHRoYXQKIElNQVAgc3VwcG9ydCBpcyBhdmFpbGFibGUuIEZpcnN0LCBlZGl0IHlvdXIgfi8uZ2l0Y29uZmlnIHRvIHNwZWNpZnkgeW91cgogYWNjb3VudCBzZXR0aW5nczoKQEAgLTQ3Niw2ICs1MjEsOSBAQAogCXBvcnQgPSA5OTMKIAlzc2x2ZXJpZnkgPSBmYWxzZQogCitZb3UgbWlnaHQgbmVlZCB0byBpbnN0ZWFkIHVzZTogZm9sZGVyID0gIltHb29nbGUgTWFpbF0vRHJhZnRzIiBpZiB5b3UgZ2V0IGFuIGVycm9yCit0aGF0IHRoZSAiRm9sZGVyIGRvZXNuJ3QgZXhpc3QiLgorCiBOZXh0LCBlbnN1cmUgdGhhdCB5b3VyIEdtYWlsIHNldHRpbmdzIGFyZSBjb3JyZWN0LiBJbiAiU2V0dGluZ3MiIHRoZQogIlVzZSBVbmljb2RlIChVVEYtOCkgZW5jb2RpbmcgZm9yIG91dGdvaW5nIG1lc3NhZ2VzIiBzaG91bGQgYmUgY2hlY2tlZC4KIApAQCAtNDg2LDMgKzUzNCw0IEBACiAKIEdvIHRvIHlvdXIgR21haWwgYWNjb3VudCwgb3BlbiB0aGUgRHJhZnRzIGZvbGRlciwgZmluZCB0aGUgcGF0Y2ggZW1haWwsIGZpbGwKIGluIHRoZSBUbzogYW5kIENDOiBmaWVsZHMgYW5kIHNlbmQgYXdheSEKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hc2NpaWRvYy5jb25mIGIvRG9jdW1lbnRhdGlvbi9hc2NpaWRvYy5jb25mCmluZGV4IDFlNzM1ZGYuLjg3YTkwZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXNjaWlkb2MuY29uZgorKysgYi9Eb2N1bWVudGF0aW9uL2FzY2lpZG9jLmNvbmYKQEAgLTE3LDYgKzE3LDcgQEAKIHN0YXJ0c2I9JiM5MTsKIGVuZHNiPSYjOTM7CiB0aWxkZT0mIzEyNjsKK2JhY2t0aWNrPSYjOTY7CiAKIGlmZGVmOjpiYWNrZW5kLWRvY2Jvb2tbXQogW2xpbmtnaXQtaW5saW5lbWFjcm9dCkBAIC0yNyw3ICsyOCw3IEBACiBlbmRpZjo6YmFja2VuZC1kb2Nib29rW10KIAogaWZkZWY6OmJhY2tlbmQtZG9jYm9va1tdCi1pZm5kZWY6OmRvY2Jvb2steHNsLTE3MltdCitpZm5kZWY6OmdpdC1hc2NpaWRvYy1uby1yb2ZmW10KICMgInVuYnJlYWsiIGRvY2Jvb2steHNsIHYxLjY4IGZvciBtYW5wYWdlcy4gdjEuNjkgd29ya3Mgd2l0aCBvciB3aXRob3V0IHRoaXMuCiAjIHYxLjcyIGJyZWFrcyB3aXRoIHRoaXMgYmVjYXVzZSBpdCByZXBsYWNlcyBkb3RzIG5vdCBpbiByb2ZmIHJlcXVlc3RzLgogW2xpc3RpbmdibG9ja10KQEAgLTQyLDE2ICs0MywxNiBAQAogZW5kaWY6OmRvY3R5cGUtbWFucGFnZVtdCiA8L2xpdGVyYWxsYXlvdXQ+CiB7dGl0bGUjfTwvZXhhbXBsZT4KLWVuZGlmOjpkb2Nib29rLXhzbC0xNzJbXQorZW5kaWY6OmdpdC1hc2NpaWRvYy1uby1yb2ZmW10KIAotaWZkZWY6OmRvY2Jvb2steHNsLTE3MltdCitpZmRlZjo6Z2l0LWFzY2lpZG9jLW5vLXJvZmZbXQogaWZkZWY6OmRvY3R5cGUtbWFucGFnZVtdCiAjIFRoZSBmb2xsb3dpbmcgdHdvIHNtYWxsIHdvcmthcm91bmRzIGluc2VydCBhIHNpbXBsZSBwYXJhZ3JhcGggYWZ0ZXIgc2NyZWVuCiBbbGlzdGluZ2Jsb2NrXQogPGV4YW1wbGU+PHRpdGxlPnt0aXRsZX08L3RpdGxlPgotPHNjcmVlbj4KKzxsaXRlcmFsbGF5b3V0PgogfAotPC9zY3JlZW4+PHNpbXBhcmE+PC9zaW1wYXJhPgorPC9saXRlcmFsbGF5b3V0PjxzaW1wYXJhPjwvc2ltcGFyYT4KIHt0aXRsZSN9PC9leGFtcGxlPgogCiBbdmVyc2VibG9ja10KQEAgLTU5LDEwICs2MCwxMSBAQAoge3RpdGxlJX08bGl0ZXJhbGxheW91dHtpZD8gaWQ9IntpZH0ifT4KIHt0aXRsZSN9PGxpdGVyYWxsYXlvdXQ+CiB8Ci08L2xpdGVyYWxsYXlvdXQ+PHNpbXBhcmE+PC9zaW1wYXJhPgorPC9saXRlcmFsbGF5b3V0Pgoge3RpdGxlI308L3BhcmE+PC9mb3JtYWxwYXJhPgore3RpdGxlJX08c2ltcGFyYT48L3NpbXBhcmE+CiBlbmRpZjo6ZG9jdHlwZS1tYW5wYWdlW10KLWVuZGlmOjpkb2Nib29rLXhzbC0xNzJbXQorZW5kaWY6OmdpdC1hc2NpaWRvYy1uby1yb2ZmW10KIGVuZGlmOjpiYWNrZW5kLWRvY2Jvb2tbXQogCiBpZmRlZjo6ZG9jdHlwZS1tYW5wYWdlW10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxhbWUtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2JsYW1lLW9wdGlvbnMudHh0CmluZGV4IDdmMjg0MzIuLjE2MjVmZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxhbWUtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ibGFtZS1vcHRpb25zLnR4dApAQCAtMzksNyArMzksNyBAQAogCVNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKS4KIAogLVMgPHJldnMtZmlsZT46OgotCVVzZSByZXZzIGZyb20gcmV2cy1maWxlIGluc3RlYWQgb2YgY2FsbGluZyBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXS4KKwlVc2UgcmV2aXNpb25zIGZyb20gcmV2cy1maWxlIGluc3RlYWQgb2YgY2FsbGluZyBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXS4KIAogLS1yZXZlcnNlOjoKIAlXYWxrIGhpc3RvcnkgZm9yd2FyZCBpbnN0ZWFkIG9mIGJhY2t3YXJkLiBJbnN0ZWFkIG9mIHNob3dpbmcKQEAgLTcwLDExICs3MCwxOSBAQAogCXRyZWUgY29weSBoYXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBuYW1lZCBmaWxlIChzcGVjaWZ5CiAJYC1gIHRvIG1ha2UgdGhlIGNvbW1hbmQgcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCkuCiAKKy0tZGF0ZSA8Zm9ybWF0Pjo6CisJVGhlIHZhbHVlIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlczoKKwl7cmVsYXRpdmUsbG9jYWwsZGVmYXVsdCxpc28scmZjLHNob3J0fS4gSWYgLS1kYXRlIGlzIG5vdAorCXByb3ZpZGVkLCB0aGUgdmFsdWUgb2YgdGhlIGJsYW1lLmRhdGUgY29uZmlnIHZhcmlhYmxlIGlzCisJdXNlZC4gSWYgdGhlIGJsYW1lLmRhdGUgY29uZmlnIHZhcmlhYmxlIGlzIGFsc28gbm90IHNldCwgdGhlCisJaXNvIGZvcm1hdCBpcyB1c2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgU2VlIHRoZSBkaXNjdXNzaW9uCisJb2YgdGhlIC0tZGF0ZSBvcHRpb24gYXQgbGlua2dpdDpnaXQtbG9nWzFdLgorCiAtTXw8bnVtPnw6OgogCURldGVjdCBtb3ZpbmcgbGluZXMgaW4gdGhlIGZpbGUgYXMgd2VsbC4gIFdoZW4gYSBjb21taXQKIAltb3ZlcyBhIGJsb2NrIG9mIGxpbmVzIGluIGEgZmlsZSAoZS5nLiB0aGUgb3JpZ2luYWwgZmlsZQogCWhhcyBBIGFuZCB0aGVuIEIsIGFuZCB0aGUgY29tbWl0IGNoYW5nZXMgaXQgdG8gQiBhbmQKLQl0aGVuIEEpLCB0cmFkaXRpb25hbCAnYmxhbWUnIGFsZ29yaXRobSB0eXBpY2FsbHkgYmxhbWVzCisJdGhlbiBBKSwgdGhlIHRyYWRpdGlvbmFsICdibGFtZScgYWxnb3JpdGhtIHR5cGljYWxseSBibGFtZXMKIAl0aGUgbGluZXMgdGhhdCB3ZXJlIG1vdmVkIHVwIChpLmUuIEIpIHRvIHRoZSBwYXJlbnQgYW5kCiAJYXNzaWducyBibGFtZSB0byB0aGUgbGluZXMgdGhhdCB3ZXJlIG1vdmVkIGRvd24gKGkuZS4gQSkKIAl0byB0aGUgY2hpbGQgY29tbWl0LiAgV2l0aCB0aGlzIG9wdGlvbiwgYm90aCBncm91cHMgb2YgbGluZXMKQEAgLTkwLDggKzk4LDggQEAKIAlmaWxlcyB0aGF0IHdlcmUgbW9kaWZpZWQgaW4gdGhlIHNhbWUgY29tbWl0LiAgVGhpcyBpcwogCXVzZWZ1bCB3aGVuIHlvdSByZW9yZ2FuaXplIHlvdXIgcHJvZ3JhbSBhbmQgbW92ZSBjb2RlCiAJYXJvdW5kIGFjcm9zcyBmaWxlcy4gIFdoZW4gdGhpcyBvcHRpb24gaXMgZ2l2ZW4gdHdpY2UsCi0JdGhlIGNvbW1hbmQgbG9va3MgZm9yIGNvcGllcyBmcm9tIGFsbCBvdGhlciBmaWxlcyBpbiB0aGUKLQlwYXJlbnQgZm9yIHRoZSBjb21taXQgdGhhdCBjcmVhdGVzIHRoZSBmaWxlIGluIGFkZGl0aW9uLgorCXRoZSBjb21tYW5kIGFkZGl0aW9uYWxseSBsb29rcyBmb3IgY29waWVzIGZyb20gYWxsIG90aGVyCisJZmlsZXMgaW4gdGhlIHBhcmVudCBmb3IgdGhlIGNvbW1pdCB0aGF0IGNyZWF0ZXMgdGhlIGZpbGUuCiArCiA8bnVtPiBpcyBvcHRpb25hbCBidXQgaXQgaXMgdGhlIGxvd2VyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YKIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHRoYXQgZ2l0IG11c3QgZGV0ZWN0IGFzIG1vdmluZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jYWxsb3V0cy54c2wgYi9Eb2N1bWVudGF0aW9uL2NhbGxvdXRzLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEzNjFhMi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2NhbGxvdXRzLnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwhLS0gY2FsbG91dC54c2w6IGNvbnZlcnRzIGFzY2lpZG9jIGNhbGxvdXRzIHRvIG1hbiBwYWdlIGZvcm1hdCAtLT4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVyc2lvbj0iMS4wIj4KLTx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvIj4KLQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KCdcZkIoJyxzdWJzdHJpbmctYWZ0ZXIoQGlkLCctJyksJylcZlInKSIvPgotPC94c2w6dGVtcGxhdGU+Ci08eHNsOnRlbXBsYXRlIG1hdGNoPSJjYWxsb3V0bGlzdCI+Ci0JPHhzbDp0ZXh0Pi5zcCYjMTA7PC94c2w6dGV4dD4KLQk8eHNsOmFwcGx5LXRlbXBsYXRlcy8+Ci0JPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KLTwveHNsOnRlbXBsYXRlPgotPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY2FsbG91dCI+Ci0JPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgnXGZCJyxzdWJzdHJpbmctYWZ0ZXIoQGFyZWFyZWZzLCctJyksJy4gXGZSJykiLz4KLQk8eHNsOmFwcGx5LXRlbXBsYXRlcy8+Ci0JPHhzbDp0ZXh0Pi5iciYjMTA7PC94c2w6dGV4dD4KLTwveHNsOnRlbXBsYXRlPgotCi08IS0tIHNvcnJ5LCB0aGlzIGlzIG5vdCBhYm91dCBjYWxsb3V0cywgYnV0IGF0dGVtcHRzIHRvIHdvcmsgYXJvdW5kCi0gc3B1cmlvdXMgLnNwIGF0IHRoZSB0YWlsIG9mIHRoZSBsaW5lIGRvY2Jvb2sgc3R5bGVzaGVldHMgc2VlbSB0byBhZGQgLS0+Ci08eHNsOnRlbXBsYXRlIG1hdGNoPSJzaW1wYXJhIj4KLSAgPHhzbDp2YXJpYWJsZSBuYW1lPSJjb250ZW50Ij4KLSAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+Ci0gIDwveHNsOnZhcmlhYmxlPgotICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9ybWFsaXplLXNwYWNlKCRjb250ZW50KSIvPgotICA8eHNsOmlmIHRlc3Q9Im5vdChhbmNlc3Rvcjo6YXV0aG9yYmx1cmIpIGFuZAotICAgICAgICAgICAgICAgIG5vdChhbmNlc3Rvcjo6cGVyc29uYmx1cmIpIj4KLSAgICA8eHNsOnRleHQ+JiMxMDsmIzEwOzwveHNsOnRleHQ+Ci0gIDwveHNsOmlmPgotPC94c2w6dGVtcGxhdGU+Ci0KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NhdC10ZXhpLnBlcmwgYi9Eb2N1bWVudGF0aW9uL2NhdC10ZXhpLnBlcmwKaW5kZXggZGJjMTMzYy4uODI4ZWM2MiAxMDA3NTUKLS0tIGEvRG9jdW1lbnRhdGlvbi9jYXQtdGV4aS5wZXJsCisrKyBiL0RvY3VtZW50YXRpb24vY2F0LXRleGkucGVybApAQCAtMTgsOCArMTgsMTIgQEAKIAogcHJpbnRmICdcaW5wdXQgdGV4aW5mbwogQHNldGZpbGVuYW1lIGdpdG1hbi5pbmZvCi1AZG9jdW1lbnRlbmNvZGluZyB1cy1hc2NpaQotQG5vZGUgVG9wLCwlcworQGRvY3VtZW50ZW5jb2RpbmcgVVRGLTgKK0BkaXJjYXRlZ29yeSBEZXZlbG9wbWVudAorQGRpcmVudHJ5CisqIEdpdCBNYW4gUGFnZXM6IChnaXRtYW4pLiAgTWFudWFsIHBhZ2VzIGZvciBHaXQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0KK0BlbmQgZGlyZW50cnkKK0Bub2RlIFRvcCwsLCAoZGlyKQogQHRvcCBHaXQgTWFudWFsIFBhZ2VzCiBAZG9jdW1lbnRsYW5ndWFnZSBlbgogQG1lbnUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dAppbmRleCAyZWQ4NjhjLi4yNjMyYzUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0CkBAIC0yLDE1ICsyLDE1IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIGdpdCBjb25maWd1cmF0aW9uIGZpbGUgY29udGFpbnMgYSBudW1iZXIgb2YgdmFyaWFibGVzIHRoYXQgYWZmZWN0Ci10aGUgZ2l0IGNvbW1hbmQncyBiZWhhdmlvci4gYC5naXQvY29uZmlnYCBmaWxlIGZvciBlYWNoIHJlcG9zaXRvcnkKLWlzIHVzZWQgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGZvciB0aGF0IHJlcG9zaXRvcnksIGFuZAotYCRIT01FLy5naXRjb25maWdgIGlzIHVzZWQgdG8gc3RvcmUgcGVyIHVzZXIgaW5mb3JtYXRpb24gdG8gZ2l2ZQotZmFsbGJhY2sgdmFsdWVzIGZvciBgLmdpdC9jb25maWdgIGZpbGUuIFRoZSBmaWxlIGAvZXRjL2dpdGNvbmZpZ2AKLWNhbiBiZSB1c2VkIHRvIHN0b3JlIHN5c3RlbS13aWRlIGRlZmF1bHRzLgordGhlIGdpdCBjb21tYW5kJ3MgYmVoYXZpb3IuIFRoZSBgLmdpdC9jb25maWdgIGZpbGUgaW4gZWFjaCByZXBvc2l0b3J5CitpcyB1c2VkIHRvIHN0b3JlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGF0IHJlcG9zaXRvcnksIGFuZAorYCRIT01FLy5naXRjb25maWdgIGlzIHVzZWQgdG8gc3RvcmUgYSBwZXItdXNlciBjb25maWd1cmF0aW9uIGFzCitmYWxsYmFjayB2YWx1ZXMgZm9yIHRoZSBgLmdpdC9jb25maWdgIGZpbGUuIFRoZSBmaWxlIGAvZXRjL2dpdGNvbmZpZ2AKK2NhbiBiZSB1c2VkIHRvIHN0b3JlIGEgc3lzdGVtLXdpZGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLgogCi1UaGV5IGNhbiBiZSB1c2VkIGJ5IGJvdGggdGhlIGdpdCBwbHVtYmluZwotYW5kIHRoZSBwb3JjZWxhaW5zLiBUaGUgdmFyaWFibGVzIGFyZSBkaXZpZGVkIGludG8gc2VjdGlvbnMsIHdoZXJlCi1pbiB0aGUgZnVsbHkgcXVhbGlmaWVkIHZhcmlhYmxlIG5hbWUgdGhlIHZhcmlhYmxlIGl0c2VsZiBpcyB0aGUgbGFzdAorVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZSB1c2VkIGJ5IGJvdGggdGhlIGdpdCBwbHVtYmluZworYW5kIHRoZSBwb3JjZWxhaW5zLiBUaGUgdmFyaWFibGVzIGFyZSBkaXZpZGVkIGludG8gc2VjdGlvbnMsIHdoZXJlaW4KK3RoZSBmdWxseSBxdWFsaWZpZWQgdmFyaWFibGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgaXRzZWxmIGlzIHRoZSBsYXN0CiBkb3Qtc2VwYXJhdGVkIHNlZ21lbnQgYW5kIHRoZSBzZWN0aW9uIG5hbWUgaXMgZXZlcnl0aGluZyBiZWZvcmUgdGhlIGxhc3QKIGRvdC4gVGhlIHZhcmlhYmxlIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBvbmx5IGFscGhhbnVtZXJpYwogY2hhcmFjdGVycyBhcmUgYWxsb3dlZC4gU29tZSB2YXJpYWJsZXMgbWF5IGFwcGVhciBtdWx0aXBsZSB0aW1lcy4KQEAgLTI1LDM1ICsyNSwzNiBAQAogVGhlIGZpbGUgY29uc2lzdHMgb2Ygc2VjdGlvbnMgYW5kIHZhcmlhYmxlcy4gIEEgc2VjdGlvbiBiZWdpbnMgd2l0aAogdGhlIG5hbWUgb2YgdGhlIHNlY3Rpb24gaW4gc3F1YXJlIGJyYWNrZXRzIGFuZCBjb250aW51ZXMgdW50aWwgdGhlIG5leHQKIHNlY3Rpb24gYmVnaW5zLiAgU2VjdGlvbiBuYW1lcyBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLiAgT25seSBhbHBoYW51bWVyaWMKLWNoYXJhY3RlcnMsICdgLWAnIGFuZCAnYC5gJyBhcmUgYWxsb3dlZCBpbiBzZWN0aW9uIG5hbWVzLiAgRWFjaCB2YXJpYWJsZQotbXVzdCBiZWxvbmcgdG8gc29tZSBzZWN0aW9uLCB3aGljaCBtZWFucyB0aGF0IHRoZXJlIG11c3QgYmUgc2VjdGlvbgotaGVhZGVyIGJlZm9yZSBmaXJzdCBzZXR0aW5nIG9mIGEgdmFyaWFibGUuCitjaGFyYWN0ZXJzLCBgLWAgYW5kIGAuYCBhcmUgYWxsb3dlZCBpbiBzZWN0aW9uIG5hbWVzLiAgRWFjaCB2YXJpYWJsZQorbXVzdCBiZWxvbmcgdG8gc29tZSBzZWN0aW9uLCB3aGljaCBtZWFucyB0aGF0IHRoZXJlIG11c3QgYmUgYSBzZWN0aW9uCitoZWFkZXIgYmVmb3JlIHRoZSBmaXJzdCBzZXR0aW5nIG9mIGEgdmFyaWFibGUuCiAKIFNlY3Rpb25zIGNhbiBiZSBmdXJ0aGVyIGRpdmlkZWQgaW50byBzdWJzZWN0aW9ucy4gIFRvIGJlZ2luIGEgc3Vic2VjdGlvbgogcHV0IGl0cyBuYW1lIGluIGRvdWJsZSBxdW90ZXMsIHNlcGFyYXRlZCBieSBzcGFjZSBmcm9tIHRoZSBzZWN0aW9uIG5hbWUsCi1pbiB0aGUgc2VjdGlvbiBoZWFkZXIsIGxpa2UgaW4gZXhhbXBsZSBiZWxvdzoKK2luIHRoZSBzZWN0aW9uIGhlYWRlciwgbGlrZSBpbiB0aGUgZXhhbXBsZSBiZWxvdzoKIAogLS0tLS0tLS0KIAlbc2VjdGlvbiAic3Vic2VjdGlvbiJdCiAKIC0tLS0tLS0tCiAKLVN1YnNlY3Rpb24gbmFtZXMgY2FuIGNvbnRhaW4gYW55IGNoYXJhY3RlcnMgZXhjZXB0IG5ld2xpbmUgKGRvdWJsZXF1b3RlCi0nYCJgJyBhbmQgYmFja3NsYXNoIGhhdmUgdG8gYmUgZXNjYXBlZCBhcyAnYFwiYCcgYW5kICdgXFxgJywKLXJlc3BlY3RpdmVseSkgYW5kIGFyZSBjYXNlIHNlbnNpdGl2ZS4gIFNlY3Rpb24gaGVhZGVyIGNhbm5vdCBzcGFuIG11bHRpcGxlCitTdWJzZWN0aW9uIG5hbWVzIGFyZSBjYXNlIHNlbnNpdGl2ZSBhbmQgY2FuIGNvbnRhaW4gYW55IGNoYXJhY3RlcnMgZXhjZXB0CituZXdsaW5lIChkb3VibGVxdW90ZSBgImAgYW5kIGJhY2tzbGFzaCBoYXZlIHRvIGJlIGVzY2FwZWQgYXMgYFwiYCBhbmQgYFxcYCwKK3Jlc3BlY3RpdmVseSkuICBTZWN0aW9uIGhlYWRlcnMgY2Fubm90IHNwYW4gbXVsdGlwbGUKIGxpbmVzLiAgVmFyaWFibGVzIG1heSBiZWxvbmcgZGlyZWN0bHkgdG8gYSBzZWN0aW9uIG9yIHRvIGEgZ2l2ZW4gc3Vic2VjdGlvbi4KIFlvdSBjYW4gaGF2ZSBgW3NlY3Rpb25dYCBpZiB5b3UgaGF2ZSBgW3NlY3Rpb24gInN1YnNlY3Rpb24iXWAsIGJ1dCB5b3UKIGRvbid0IG5lZWQgdG8uCiAKLVRoZXJlIGlzIGFsc28gKGNhc2UgaW5zZW5zaXRpdmUpIGFsdGVybmF0aXZlIGBbc2VjdGlvbi5zdWJzZWN0aW9uXWAgc3ludGF4LgotSW4gdGhpcyBzeW50YXggc3Vic2VjdGlvbiBuYW1lcyBmb2xsb3cgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGZvciBzZWN0aW9uCi1uYW1lLgorVGhlcmUgaXMgYWxzbyBhIGNhc2UgaW5zZW5zaXRpdmUgYWx0ZXJuYXRpdmUgYFtzZWN0aW9uLnN1YnNlY3Rpb25dYCBzeW50YXguCitJbiB0aGlzIHN5bnRheCwgc3Vic2VjdGlvbiBuYW1lcyBmb2xsb3cgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGZvciBzZWN0aW9uCituYW1lcy4KIAotQWxsIHRoZSBvdGhlciBsaW5lcyBhcmUgcmVjb2duaXplZCBhcyBzZXR0aW5nIHZhcmlhYmxlcywgaW4gdGhlIGZvcm0KK0FsbCB0aGUgb3RoZXIgbGluZXMgKGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBsaW5lIGFmdGVyIHRoZSBzZWN0aW9uCitoZWFkZXIpIGFyZSByZWNvZ25pemVkIGFzIHNldHRpbmcgdmFyaWFibGVzLCBpbiB0aGUgZm9ybQogJ25hbWUgPSB2YWx1ZScuICBJZiB0aGVyZSBpcyBubyBlcXVhbCBzaWduIG9uIHRoZSBsaW5lLCB0aGUgZW50aXJlIGxpbmUKIGlzIHRha2VuIGFzICduYW1lJyBhbmQgdGhlIHZhcmlhYmxlIGlzIHJlY29nbml6ZWQgYXMgYm9vbGVhbiAidHJ1ZSIuCiBUaGUgdmFyaWFibGUgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIG9ubHkgYWxwaGFudW1lcmljCi1jaGFyYWN0ZXJzIGFuZCAnYC1gJyBhcmUgYWxsb3dlZC4gIFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIHZhbHVlCitjaGFyYWN0ZXJzIGFuZCBgLWAgYXJlIGFsbG93ZWQuICBUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSB2YWx1ZQogZm9yIGEgZ2l2ZW4gdmFyaWFibGU7IHdlIHNheSB0aGVuIHRoYXQgdmFyaWFibGUgaXMgbXVsdGl2YWx1ZWQuCiAKIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gYSB2YXJpYWJsZSB2YWx1ZSBpcyBkaXNjYXJkZWQuCkBAIC02MSwyNiArNjIsMjYgQEAKIAogVGhlIHZhbHVlcyBmb2xsb3dpbmcgdGhlIGVxdWFscyBzaWduIGluIHZhcmlhYmxlIGFzc2lnbiBhcmUgYWxsIGVpdGhlcgogYSBzdHJpbmcsIGFuIGludGVnZXIsIG9yIGEgYm9vbGVhbi4gIEJvb2xlYW4gdmFsdWVzIG1heSBiZSBnaXZlbiBhcyB5ZXMvbm8sCi0wLzEgb3IgdHJ1ZS9mYWxzZS4gIENhc2UgaXMgbm90IHNpZ25pZmljYW50IGluIGJvb2xlYW4gdmFsdWVzLCB3aGVuCiswLzEsIHRydWUvZmFsc2Ugb3Igb24vb2ZmLiAgQ2FzZSBpcyBub3Qgc2lnbmlmaWNhbnQgaW4gYm9vbGVhbiB2YWx1ZXMsIHdoZW4KIGNvbnZlcnRpbmcgdmFsdWUgdG8gdGhlIGNhbm9uaWNhbCBmb3JtIHVzaW5nICctLWJvb2wnIHR5cGUgc3BlY2lmaWVyOwogJ2dpdC1jb25maWcnIHdpbGwgZW5zdXJlIHRoYXQgdGhlIG91dHB1dCBpcyAidHJ1ZSIgb3IgImZhbHNlIi4KIAogU3RyaW5nIHZhbHVlcyBtYXkgYmUgZW50aXJlbHkgb3IgcGFydGlhbGx5IGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMuCi1Zb3UgbmVlZCB0byBlbmNsb3NlIHZhcmlhYmxlIHZhbHVlIGluIGRvdWJsZSBxdW90ZXMgaWYgeW91IHdhbnQgdG8KLXByZXNlcnZlIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSwgb3IgaWYgdmFyaWFibGUgdmFsdWUgY29udGFpbnMKLWJlZ2lubmluZyBvZiBjb21tZW50IGNoYXJhY3RlcnMgKGlmIGl0IGNvbnRhaW5zICcjJyBvciAnOycpLgotRG91YmxlIHF1b3RlICdgImAnIGFuZCBiYWNrc2xhc2ggJ2BcYCcgY2hhcmFjdGVycyBpbiB2YXJpYWJsZSB2YWx1ZSBtdXN0Ci1iZSBlc2NhcGVkOiB1c2UgJ2BcImAnIGZvciAnYCJgJyBhbmQgJ2BcXGAnIGZvciAnYFxgJy4KK1lvdSBuZWVkIHRvIGVuY2xvc2UgdmFyaWFibGUgdmFsdWVzIGluIGRvdWJsZSBxdW90ZXMgaWYgeW91IHdhbnQgdG8KK3ByZXNlcnZlIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSwgb3IgaWYgdGhlIHZhcmlhYmxlIHZhbHVlIGNvbnRhaW5zCitjb21tZW50IGNoYXJhY3RlcnMgKGkuZS4gaXQgY29udGFpbnMgJyMnIG9yICc7JykuCitEb3VibGUgcXVvdGUgYCJgIGFuZCBiYWNrc2xhc2ggYFxgIGNoYXJhY3RlcnMgaW4gdmFyaWFibGUgdmFsdWVzIG11c3QKK2JlIGVzY2FwZWQ6IHVzZSBgXCJgIGZvciBgImAgYW5kIGBcXGAgZm9yIGBcYC4KIAotVGhlIGZvbGxvd2luZyBlc2NhcGUgc2VxdWVuY2VzIChiZXNpZGUgJ2BcImAnIGFuZCAnYFxcYCcpIGFyZSByZWNvZ25pemVkOgotJ2BcbmAnIGZvciBuZXdsaW5lIGNoYXJhY3RlciAoTkwpLCAnYFx0YCcgZm9yIGhvcml6b250YWwgdGFidWxhdGlvbiAoSFQsIFRBQikKLWFuZCAnYFxiYCcgZm9yIGJhY2tzcGFjZSAoQlMpLiAgTm8gb3RoZXIgY2hhciBlc2NhcGUgc2VxdWVuY2UsIG5vciBvY3RhbAorVGhlIGZvbGxvd2luZyBlc2NhcGUgc2VxdWVuY2VzIChiZXNpZGUgYFwiYCBhbmQgYFxcYCkgYXJlIHJlY29nbml6ZWQ6CitgXG5gIGZvciBuZXdsaW5lIGNoYXJhY3RlciAoTkwpLCBgXHRgIGZvciBob3Jpem9udGFsIHRhYnVsYXRpb24gKEhULCBUQUIpCithbmQgYFxiYCBmb3IgYmFja3NwYWNlIChCUykuICBObyBvdGhlciBjaGFyIGVzY2FwZSBzZXF1ZW5jZSwgbm9yIG9jdGFsCiBjaGFyIHNlcXVlbmNlcyBhcmUgdmFsaWQuCiAKLVZhcmlhYmxlIHZhbHVlIGVuZGluZyBpbiBhICdgXGAnIGlzIGNvbnRpbnVlZCBvbiB0aGUgbmV4dCBsaW5lIGluIHRoZQorVmFyaWFibGUgdmFsdWVzIGVuZGluZyBpbiBhIGBcYCBhcmUgY29udGludWVkIG9uIHRoZSBuZXh0IGxpbmUgaW4gdGhlCiBjdXN0b21hcnkgVU5JWCBmYXNoaW9uLgogCi1Tb21lIHZhcmlhYmxlcyBtYXkgcmVxdWlyZSBzcGVjaWFsIHZhbHVlIGZvcm1hdC4KK1NvbWUgdmFyaWFibGVzIG1heSByZXF1aXJlIGEgc3BlY2lhbCB2YWx1ZSBmb3JtYXQuCiAKIEV4YW1wbGUKIH5+fn5+fn4KQEAgLTIyMSw2ICsyMjIsMTEgQEAKIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX1BST1hZX0NPTU1BTkQnIGVudmlyb25tZW50IHZhcmlhYmxlCiAod2hpY2ggYWx3YXlzIGFwcGxpZXMgdW5pdmVyc2FsbHksIHdpdGhvdXQgdGhlIHNwZWNpYWwgImZvciIKIGhhbmRsaW5nKS4KKysKK1RoZSBzcGVjaWFsIHN0cmluZyBgbm9uZWAgY2FuIGJlIHVzZWQgYXMgdGhlIHByb3h5IGNvbW1hbmQgdG8KK3NwZWNpZnkgdGhhdCBubyBwcm94eSBiZSB1c2VkIGZvciBhIGdpdmVuIGRvbWFpbiBwYXR0ZXJuLgorVGhpcyBpcyB1c2VmdWwgZm9yIGV4Y2x1ZGluZyBzZXJ2ZXJzIGluc2lkZSBhIGZpcmV3YWxsIGZyb20KK3Byb3h5IHVzZSwgd2hpbGUgZGVmYXVsdGluZyB0byBhIGNvbW1vbiBwcm94eSBmb3IgZXh0ZXJuYWwgZG9tYWlucy4KIAogY29yZS5pZ25vcmVTdGF0OjoKIAlJZiB0cnVlLCBjb21tYW5kcyB3aGljaCBtb2RpZnkgYm90aCB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgKQEAgLTI5MCw4ICsyOTYsMTAgQEAKIAlncm91cC1zaGFyZWFibGUuIFdoZW4gJ3VtYXNrJyAob3IgJ2ZhbHNlJyksIGdpdCB3aWxsIHVzZSBwZXJtaXNzaW9ucwogCXJlcG9ydGVkIGJ5IHVtYXNrKDIpLiBXaGVuICcweHh4Jywgd2hlcmUgJzB4eHgnIGlzIGFuIG9jdGFsIG51bWJlciwKIAlmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSB3aWxsIGhhdmUgdGhpcyBtb2RlIHZhbHVlLiAnMHh4eCcgd2lsbCBvdmVycmlkZQotCXVzZXIncyB1bWFzayB2YWx1ZSwgYW5kIHRodXMsIHVzZXJzIHdpdGggYSBzYWZlIHVtYXNrICgwMDc3KSBjYW4gdXNlCi0JdGhpcyBvcHRpb24uIEV4YW1wbGVzOiAnMDY2MCcgaXMgZXF1aXZhbGVudCB0byAnZ3JvdXAnLiAnMDY0MCcgaXMgYQorCXVzZXIncyB1bWFzayB2YWx1ZSAod2hlcmVhcyB0aGUgb3RoZXIgb3B0aW9ucyB3aWxsIG9ubHkgb3ZlcnJpZGUKKwlyZXF1ZXN0ZWQgcGFydHMgb2YgdGhlIHVzZXIncyB1bWFzayB2YWx1ZSkuIEV4YW1wbGVzOiAnMDY2MCcgd2lsbCBtYWtlCisJdGhlIHJlcG8gcmVhZC93cml0ZS1hYmxlIGZvciB0aGUgb3duZXIgYW5kIGdyb3VwLCBidXQgaW5hY2Nlc3NpYmxlIHRvCisJb3RoZXJzIChlcXVpdmFsZW50IHRvICdncm91cCcgdW5sZXNzIHVtYXNrIGlzIGUuZy4gJzAwMjInKS4gJzA2NDAnIGlzIGEKIAlyZXBvc2l0b3J5IHRoYXQgaXMgZ3JvdXAtcmVhZGFibGUgYnV0IG5vdCBncm91cC13cml0YWJsZS4KIAlTZWUgbGlua2dpdDpnaXQtaW5pdFsxXS4gRmFsc2UgYnkgZGVmYXVsdC4KIApAQCAtMzgyLDkgKzM5MCw5IEBACiAJdG8gb3ZlcnJpZGUgZ2l0J3MgZGVmYXVsdCBzZXR0aW5ncyB0aGlzIHdheSwgeW91IG5lZWQKIAl0byBiZSBleHBsaWNpdC4gIEZvciBleGFtcGxlLCB0byBkaXNhYmxlIHRoZSBTIG9wdGlvbgogCWluIGEgYmFja3dhcmQgY29tcGF0aWJsZSBtYW5uZXIsIHNldCBgY29yZS5wYWdlcmAKLQl0byAiYGxlc3MgLSskTEVTUyAtRlJYYCIuICBUaGlzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQorCXRvIGBsZXNzIC0rJExFU1MgLUZSWGAuICBUaGlzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQogCXNoZWxsIGJ5IGdpdCwgd2hpY2ggd2lsbCB0cmFuc2xhdGUgdGhlIGZpbmFsIGNvbW1hbmQgdG8KLQkiYExFU1M9RlJTWCBsZXNzIC0rRlJTWCAtRlJYYCIuCisJYExFU1M9RlJTWCBsZXNzIC0rRlJTWCAtRlJYYC4KIAogY29yZS53aGl0ZXNwYWNlOjoKIAlBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGNvbW1vbiB3aGl0ZXNwYWNlIHByb2JsZW1zIHRvCkBAIC00MjIsNiArNDMwLDIwIEBACiBpbmRleCBjb21wYXJpc29uIHRvIHRoZSBmaWxlc3lzdGVtIGRhdGEgaW4gcGFyYWxsZWwsIGFsbG93aW5nCiBvdmVybGFwcGluZyBJTydzLgogCitjb3JlLmNyZWF0ZU9iamVjdDo6CisJWW91IGNhbiBzZXQgdGhpcyB0byAnbGluaycsIGluIHdoaWNoIGNhc2UgYSBoYXJkbGluayBmb2xsb3dlZCBieQorCWEgZGVsZXRlIG9mIHRoZSBzb3VyY2UgYXJlIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgb2JqZWN0IGNyZWF0aW9uCisJd2lsbCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIG9iamVjdHMuCisrCitPbiBzb21lIGZpbGUgc3lzdGVtL29wZXJhdGluZyBzeXN0ZW0gY29tYmluYXRpb25zLCB0aGlzIGlzIHVucmVsaWFibGUuCitTZXQgdGhpcyBjb25maWcgc2V0dGluZyB0byAncmVuYW1lJyB0aGVyZTsgSG93ZXZlciwgVGhpcyB3aWxsIHJlbW92ZSB0aGUKK2NoZWNrIHRoYXQgbWFrZXMgc3VyZSB0aGF0IGV4aXN0aW5nIG9iamVjdCBmaWxlcyB3aWxsIG5vdCBnZXQgb3ZlcndyaXR0ZW4uCisKK2FkZC5pZ25vcmUtZXJyb3JzOjoKKwlUZWxscyAnZ2l0LWFkZCcgdG8gY29udGludWUgYWRkaW5nIGZpbGVzIHdoZW4gc29tZSBmaWxlcyBjYW5ub3QgYmUKKwlhZGRlZCBkdWUgdG8gaW5kZXhpbmcgZXJyb3JzLiBFcXVpdmFsZW50IHRvIHRoZSAnLS1pZ25vcmUtZXJyb3JzJworCW9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1hZGRbMV0uCisKIGFsaWFzLio6OgogCUNvbW1hbmQgYWxpYXNlcyBmb3IgdGhlIGxpbmtnaXQ6Z2l0WzFdIGNvbW1hbmQgd3JhcHBlciAtIGUuZy4KIAlhZnRlciBkZWZpbmluZyAiYWxpYXMubGFzdCA9IGNhdC1maWxlIGNvbW1pdCBIRUFEIiwgdGhlIGludm9jYXRpb24KQEAgLTQzNSw3ICs0NTcsOSBAQAogaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGEgc2hlbGwgY29tbWFuZC4gIEZvciBleGFtcGxlLCBkZWZpbmluZwogImFsaWFzLm5ldyA9ICFnaXRrIC0tYWxsIC0tbm90IE9SSUdfSEVBRCIsIHRoZSBpbnZvY2F0aW9uCiAiZ2l0IG5ldyIgaXMgZXF1aXZhbGVudCB0byBydW5uaW5nIHRoZSBzaGVsbCBjb21tYW5kCi0iZ2l0ayAtLWFsbCAtLW5vdCBPUklHX0hFQUQiLgorImdpdGsgLS1hbGwgLS1ub3QgT1JJR19IRUFEIi4gIE5vdGUgdGhhdCBzaGVsbCBjb21tYW5kcyB3aWxsIGJlCitleGVjdXRlZCBmcm9tIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIGEgcmVwb3NpdG9yeSwgd2hpY2ggbWF5Citub3QgbmVjZXNzYXJpbHkgYmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgogCiBhcHBseS53aGl0ZXNwYWNlOjoKIAlUZWxscyAnZ2l0LWFwcGx5JyBob3cgdG8gaGFuZGxlIHdoaXRlc3BhY2VzLCBpbiB0aGUgc2FtZSB3YXkKQEAgLTQ2OCwxMCArNDkyLDE0IEBACiAJVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gbmV2ZXIuCiAKIGJyYW5jaC48bmFtZT4ucmVtb3RlOjoKLQlXaGVuIGluIGJyYW5jaCA8bmFtZT4sIGl0IHRlbGxzICdnaXQtZmV0Y2gnIHdoaWNoIHJlbW90ZSB0byBmZXRjaC4KLQlJZiB0aGlzIG9wdGlvbiBpcyBub3QgZ2l2ZW4sICdnaXQtZmV0Y2gnIGRlZmF1bHRzIHRvIHJlbW90ZSAib3JpZ2luIi4KKwlXaGVuIGluIGJyYW5jaCA8bmFtZT4sIGl0IHRlbGxzICdnaXQtZmV0Y2gnIGFuZCAnZ2l0LXB1c2gnIHdoaWNoCisJcmVtb3RlIHRvIGZldGNoIGZyb20vcHVzaCB0by4gIEl0IGRlZmF1bHRzIHRvIGBvcmlnaW5gIGlmIG5vIHJlbW90ZSBpcworCWNvbmZpZ3VyZWQuIGBvcmlnaW5gIGlzIGFsc28gdXNlZCBpZiB5b3UgYXJlIG5vdCBvbiBhbnkgYnJhbmNoLgogCiBicmFuY2guPG5hbWU+Lm1lcmdlOjoKKwlEZWZpbmVzLCB0b2dldGhlciB3aXRoIGJyYW5jaC48bmFtZT4ucmVtb3RlLCB0aGUgdXBzdHJlYW0gYnJhbmNoCisJZm9yIHRoZSBnaXZlbiBicmFuY2guIEl0IHRlbGxzICdnaXQtZmV0Y2gnLydnaXQtcHVsbCcgd2hpY2gKKwlicmFuY2ggdG8gbWVyZ2UgYW5kIGNhbiBhbHNvIGFmZmVjdCAnZ2l0LXB1c2gnIChzZWUgcHVzaC5kZWZhdWx0KS4KIAlXaGVuIGluIGJyYW5jaCA8bmFtZT4sIGl0IHRlbGxzICdnaXQtZmV0Y2gnIHRoZSBkZWZhdWx0CiAJcmVmc3BlYyB0byBiZSBtYXJrZWQgZm9yIG1lcmdpbmcgaW4gRkVUQ0hfSEVBRC4gVGhlIHZhbHVlIGlzCiAJaGFuZGxlZCBsaWtlIHRoZSByZW1vdGUgcGFydCBvZiBhIHJlZnNwZWMsIGFuZCBtdXN0IG1hdGNoIGEKQEAgLTU0OCw2ICs1NzYsMjUgQEAKIAl3aGl0ZXNwYWNlIGVycm9ycykuIFRoZSB2YWx1ZXMgb2YgdGhlc2UgdmFyaWFibGVzIG1heSBiZSBzcGVjaWZpZWQgYXMKIAlpbiBjb2xvci5icmFuY2guPHNsb3Q+LgogCitjb2xvci5ncmVwOjoKKwlXaGVuIHNldCB0byBgYWx3YXlzYCwgYWx3YXlzIGhpZ2hsaWdodCBtYXRjaGVzLiAgV2hlbiBgZmFsc2VgIChvcgorCWBuZXZlcmApLCBuZXZlci4gIFdoZW4gc2V0IHRvIGB0cnVlYCBvciBgYXV0b2AsIHVzZSBjb2xvciBvbmx5CisJd2hlbiB0aGUgb3V0cHV0IGlzIHdyaXR0ZW4gdG8gdGhlIHRlcm1pbmFsLiAgRGVmYXVsdHMgdG8gYGZhbHNlYC4KKworY29sb3IuZ3JlcC5leHRlcm5hbDo6CisJVGhlIHN0cmluZyB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIHBhc3NlZCB0byBhbiBleHRlcm5hbCAnZ3JlcCcKKwljb21tYW5kIGFzIGEgY29tbWFuZCBsaW5lIG9wdGlvbiBpZiBtYXRjaCBoaWdobGlnaHRpbmcgaXMgdHVybmVkCisJb24uICBJZiBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCBubyBvcHRpb24gaXMgcGFzc2VkIGF0IGFsbCwKKwl0dXJuaW5nIG9mZiBjb2xvcmluZyBmb3IgZXh0ZXJuYWwgJ2dyZXAnIGNhbGxzOyB0aGlzIGlzIHRoZSBkZWZhdWx0LgorCUZvciBHTlUgZ3JlcCwgc2V0IGl0IHRvIGAtLWNvbG9yPWFsd2F5c2AgdG8gaGlnaGxpZ2h0IG1hdGNoZXMgZXZlbgorCXdoZW4gYSBwYWdlciBpcyB1c2VkLgorCitjb2xvci5ncmVwLm1hdGNoOjoKKwlVc2UgY3VzdG9taXplZCBjb2xvciBmb3IgbWF0Y2hlcy4gIFRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlCisJbWF5IGJlIHNwZWNpZmllZCBhcyBpbiBjb2xvci5icmFuY2guPHNsb3Q+LiAgSXQgaXMgcGFzc2VkIHVzaW5nCisJdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyAnR1JFUF9DT0xPUicgYW5kICdHUkVQX0NPTE9SUycgd2hlbgorCWNhbGxpbmcgYW4gZXh0ZXJuYWwgJ2dyZXAnLgorCiBjb2xvci5pbnRlcmFjdGl2ZTo6CiAJV2hlbiBzZXQgdG8gYGFsd2F5c2AsIGFsd2F5cyB1c2UgY29sb3JzIGZvciBpbnRlcmFjdGl2ZSBwcm9tcHRzCiAJYW5kIGRpc3BsYXlzIChzdWNoIGFzIHRob3NlIHVzZWQgYnkgImdpdC1hZGQgLS1pbnRlcmFjdGl2ZSIpLgpAQCAtNTU2LDE1ICs2MDMsMjEgQEAKIAogY29sb3IuaW50ZXJhY3RpdmUuPHNsb3Q+OjoKIAlVc2UgY3VzdG9taXplZCBjb2xvciBmb3IgJ2dpdC1hZGQgLS1pbnRlcmFjdGl2ZScKLQlvdXRwdXQuIGA8c2xvdD5gIG1heSBiZSBgcHJvbXB0YCwgYGhlYWRlcmAsIG9yIGBoZWxwYCwgZm9yCi0JdGhyZWUgZGlzdGluY3QgdHlwZXMgb2Ygbm9ybWFsIG91dHB1dCBmcm9tIGludGVyYWN0aXZlCi0JcHJvZ3JhbXMuICBUaGUgdmFsdWVzIG9mIHRoZXNlIHZhcmlhYmxlcyBtYXkgYmUgc3BlY2lmaWVkIGFzCisJb3V0cHV0LiBgPHNsb3Q+YCBtYXkgYmUgYHByb21wdGAsIGBoZWFkZXJgLCBgaGVscGAgb3IgYGVycm9yYCwgZm9yCisJZm91ciBkaXN0aW5jdCB0eXBlcyBvZiBub3JtYWwgb3V0cHV0IGZyb20gaW50ZXJhY3RpdmUKKwljb21tYW5kcy4gIFRoZSB2YWx1ZXMgb2YgdGhlc2UgdmFyaWFibGVzIG1heSBiZSBzcGVjaWZpZWQgYXMKIAlpbiBjb2xvci5icmFuY2guPHNsb3Q+LgogCiBjb2xvci5wYWdlcjo6CiAJQSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIGNvbG9yZWQgb3V0cHV0IHdoZW4gdGhlIHBhZ2VyIGlzIGluCiAJdXNlIChkZWZhdWx0IGlzIHRydWUpLgogCitjb2xvci5zaG93YnJhbmNoOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgY29sb3IgaW4gdGhlIG91dHB1dCBvZgorCWxpbmtnaXQ6Z2l0LXNob3ctYnJhbmNoWzFdLiBNYXkgYmUgc2V0IHRvIGBhbHdheXNgLAorCWBmYWxzZWAgKG9yIGBuZXZlcmApIG9yIGBhdXRvYCAob3IgYHRydWVgKSwgaW4gd2hpY2ggY2FzZSBjb2xvcnMgYXJlIHVzZWQKKwlvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyB0byBhIHRlcm1pbmFsLiBEZWZhdWx0cyB0byBmYWxzZS4KKwogY29sb3Iuc3RhdHVzOjoKIAlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgY29sb3IgaW4gdGhlIG91dHB1dCBvZgogCWxpbmtnaXQ6Z2l0LXN0YXR1c1sxXS4gTWF5IGJlIHNldCB0byBgYWx3YXlzYCwKQEAgLTYzOSw2ICs2OTIsMzMgQEAKIAlBIGJvb2xlYW4gdG8gaW5oaWJpdCB0aGUgc3RhbmRhcmQgYmVoYXZpb3Igb2YgcHJpbnRpbmcgYSBzcGFjZQogCWJlZm9yZSBlYWNoIGVtcHR5IG91dHB1dCBsaW5lLiBEZWZhdWx0cyB0byBmYWxzZS4KIAorZGlmZi50b29sOjoKKwlDb250cm9scyB3aGljaCBkaWZmIHRvb2wgaXMgdXNlZC4gIGBkaWZmLnRvb2xgIG92ZXJyaWRlcworCWBtZXJnZS50b29sYCB3aGVuIHVzZWQgYnkgbGlua2dpdDpnaXQtZGlmZnRvb2xbMV0gYW5kIGhhcworCXRoZSBzYW1lIHZhbGlkIHZhbHVlcyBhcyBgbWVyZ2UudG9vbGAgbWludXMgInRvcnRvaXNlbWVyZ2UiCisJYW5kIHBsdXMgImtvbXBhcmUiLgorCitkaWZmdG9vbC48dG9vbD4ucGF0aDo6CisJT3ZlcnJpZGUgdGhlIHBhdGggZm9yIHRoZSBnaXZlbiB0b29sLiAgVGhpcyBpcyB1c2VmdWwgaW4gY2FzZQorCXlvdXIgdG9vbCBpcyBub3QgaW4gdGhlIFBBVEguCisKK2RpZmZ0b29sLjx0b29sPi5jbWQ6OgorCVNwZWNpZnkgdGhlIGNvbW1hbmQgdG8gaW52b2tlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sLgorCVRoZSBzcGVjaWZpZWQgY29tbWFuZCBpcyBldmFsdWF0ZWQgaW4gc2hlbGwgd2l0aCB0aGUgZm9sbG93aW5nCisJdmFyaWFibGVzIGF2YWlsYWJsZTogICdMT0NBTCcgaXMgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkKKwlmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBkaWZmIHByZS1pbWFnZSBhbmQgJ1JFTU9URScKKwlpcyBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzCisJb2YgdGhlIGRpZmYgcG9zdC1pbWFnZS4KKworZGlmZnRvb2wucHJvbXB0OjoKKwlQcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgZGlmZiB0b29sLgorCitkaWZmLndvcmRSZWdleDo6CisJQSBQT1NJWCBFeHRlbmRlZCBSZWd1bGFyIEV4cHJlc3Npb24gdXNlZCB0byBkZXRlcm1pbmUgd2hhdCBpcyBhICJ3b3JkIgorCXdoZW4gcGVyZm9ybWluZyB3b3JkLWJ5LXdvcmQgZGlmZmVyZW5jZSBjYWxjdWxhdGlvbnMuICBDaGFyYWN0ZXIKKwlzZXF1ZW5jZXMgdGhhdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uIGFyZSAid29yZHMiLCBhbGwgb3RoZXIKKwljaGFyYWN0ZXJzIGFyZSAqaWdub3JhYmxlKiB3aGl0ZXNwYWNlLgorCiBmZXRjaC51bnBhY2tMaW1pdDo6CiAJSWYgdGhlIG51bWJlciBvZiBvYmplY3RzIGZldGNoZWQgb3ZlciB0aGUgZ2l0IG5hdGl2ZQogCXRyYW5zZmVyIGlzIGJlbG93IHRoaXMKQEAgLTY1MCw2ICs3MzAsMTMgQEAKIAllc3BlY2lhbGx5IG9uIHNsb3cgZmlsZXN5c3RlbXMuICBJZiBub3Qgc2V0LCB0aGUgdmFsdWUgb2YKIAlgdHJhbnNmZXIudW5wYWNrTGltaXRgIGlzIHVzZWQgaW5zdGVhZC4KIAorZm9ybWF0LmF0dGFjaDo6CisJRW5hYmxlIG11bHRpcGFydC9taXhlZCBhdHRhY2htZW50cyBhcyB0aGUgZGVmYXVsdCBmb3IKKwknZm9ybWF0LXBhdGNoJy4gIFRoZSB2YWx1ZSBjYW4gYWxzbyBiZSBhIGRvdWJsZSBxdW90ZWQgc3RyaW5nCisJd2hpY2ggd2lsbCBlbmFibGUgYXR0YWNobWVudHMgYXMgdGhlIGRlZmF1bHQgYW5kIHNldCB0aGUKKwl2YWx1ZSBhcyB0aGUgYm91bmRhcnkuICBTZWUgdGhlIC0tYXR0YWNoIG9wdGlvbiBpbgorCWxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXS4KKwogZm9ybWF0Lm51bWJlcmVkOjoKIAlBIGJvb2xlYW4gd2hpY2ggY2FuIGVuYWJsZSBvciBkaXNhYmxlIHNlcXVlbmNlIG51bWJlcnMgaW4gcGF0Y2gKIAlzdWJqZWN0cy4gIEl0IGRlZmF1bHRzIHRvICJhdXRvIiB3aGljaCBlbmFibGVzIGl0IG9ubHkgaWYgdGhlcmUKQEAgLTY2MSw2ICs3NDgsMTQgQEAKIAlBZGRpdGlvbmFsIGVtYWlsIGhlYWRlcnMgdG8gaW5jbHVkZSBpbiBhIHBhdGNoIHRvIGJlIHN1Ym1pdHRlZAogCWJ5IG1haWwuICBTZWUgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLgogCitmb3JtYXQuY2M6OgorCUFkZGl0aW9uYWwgIkNjOiIgaGVhZGVycyB0byBpbmNsdWRlIGluIGEgcGF0Y2ggdG8gYmUgc3VibWl0dGVkCisJYnkgbWFpbC4gIFNlZSB0aGUgLS1jYyBvcHRpb24gaW4gbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLgorCitmb3JtYXQuc3ViamVjdHByZWZpeDo6CisJVGhlIGRlZmF1bHQgZm9yIGZvcm1hdC1wYXRjaCBpcyB0byBvdXRwdXQgZmlsZXMgd2l0aCB0aGUgJ1tQQVRDSF0nCisJc3ViamVjdCBwcmVmaXguIFVzZSB0aGlzIHZhcmlhYmxlIHRvIGNoYW5nZSB0aGF0IHByZWZpeC4KKwogZm9ybWF0LnN1ZmZpeDo6CiAJVGhlIGRlZmF1bHQgZm9yIGZvcm1hdC1wYXRjaCBpcyB0byBvdXRwdXQgZmlsZXMgd2l0aCB0aGUgc3VmZml4CiAJYC5wYXRjaGAuIFVzZSB0aGlzIHZhcmlhYmxlIHRvIGNoYW5nZSB0aGF0IHN1ZmZpeCAobWFrZSBzdXJlIHRvCkBAIC02NzEsNiArNzY2LDIzIEBACiAJU2VlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSwgbGlua2dpdDpnaXQtc2hvd1sxXSwKIAlsaW5rZ2l0OmdpdC13aGF0Y2hhbmdlZFsxXS4KIAorZm9ybWF0LnRocmVhZDo6CisJVGhlIGRlZmF1bHQgdGhyZWFkaW5nIHN0eWxlIGZvciAnZ2l0LWZvcm1hdC1wYXRjaCcuICBDYW4gYmUKKwllaXRoZXIgYSBib29sZWFuIHZhbHVlLCBgc2hhbGxvd2Agb3IgYGRlZXBgLiAgYHNoYWxsb3dgCisJdGhyZWFkaW5nIG1ha2VzIGV2ZXJ5IG1haWwgYSByZXBseSB0byB0aGUgaGVhZCBvZiB0aGUgc2VyaWVzLAorCXdoZXJlIHRoZSBoZWFkIGlzIGNob3NlbiBmcm9tIHRoZSBjb3ZlciBsZXR0ZXIsIHRoZQorCWBcLS1pbi1yZXBseS10b2AsIGFuZCB0aGUgZmlyc3QgcGF0Y2ggbWFpbCwgaW4gdGhpcyBvcmRlci4KKwlgZGVlcGAgdGhyZWFkaW5nIG1ha2VzIGV2ZXJ5IG1haWwgYSByZXBseSB0byB0aGUgcHJldmlvdXMgb25lLgorCUEgdHJ1ZSBib29sZWFuIHZhbHVlIGlzIHRoZSBzYW1lIGFzIGBzaGFsbG93YCwgYW5kIGEgZmFsc2UKKwl2YWx1ZSBkaXNhYmxlcyB0aHJlYWRpbmcuCisKK2Zvcm1hdC5zaWdub2ZmOjoKKyAgICBBIGJvb2xlYW4gdmFsdWUgd2hpY2ggbGV0cyB5b3UgZW5hYmxlIHRoZSBgLXMvLS1zaWdub2ZmYCBvcHRpb24gb2YKKyAgICBmb3JtYXQtcGF0Y2ggYnkgZGVmYXVsdC4gKk5vdGU6KiBBZGRpbmcgdGhlIFNpZ25lZC1vZmYtYnk6IGxpbmUgdG8gYQorICAgIHBhdGNoIHNob3VsZCBiZSBhIGNvbnNjaW91cyBhY3QgYW5kIG1lYW5zIHRoYXQgeW91IGNlcnRpZnkgeW91IGhhdmUKKyAgICB0aGUgcmlnaHRzIHRvIHN1Ym1pdCB0aGlzIHdvcmsgdW5kZXIgdGhlIHNhbWUgb3BlbiBzb3VyY2UgbGljZW5zZS4KKyAgICBQbGVhc2Ugc2VlIHRoZSAnU3VibWl0dGluZ1BhdGNoZXMnIGRvY3VtZW50IGZvciBmdXJ0aGVyIGRpc2N1c3Npb24uCisKIGdjLmFnZ3Jlc3NpdmVXaW5kb3c6OgogCVRoZSB3aW5kb3cgc2l6ZSBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgZGVsdGEgY29tcHJlc3Npb24KIAlhbGdvcml0aG0gdXNlZCBieSAnZ2l0LWdjIC0tYWdncmVzc2l2ZScuICBUaGlzIGRlZmF1bHRzCkBAIC03MjUsNiArODM3LDEwIEBACiAJa2VwdCBmb3IgdGhpcyBtYW55IGRheXMgd2hlbiAnZ2l0LXJlcmVyZSBnYycgaXMgcnVuLgogCVRoZSBkZWZhdWx0IGlzIDE1IGRheXMuICBTZWUgbGlua2dpdDpnaXQtcmVyZXJlWzFdLgogCitnaXRjdnMuY29tbWl0bXNnYW5ub3RhdGlvbjo6CisJQXBwZW5kIHRoaXMgc3RyaW5nIHRvIGVhY2ggY29tbWl0IG1lc3NhZ2UuIFNldCB0byBlbXB0eSBzdHJpbmcKKwl0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS4gRGVmYXVsdHMgdG8gInZpYSBnaXQtQ1ZTIGVtdWxhdG9yIi4KKwogZ2l0Y3ZzLmVuYWJsZWQ6OgogCVdoZXRoZXIgdGhlIENWUyBzZXJ2ZXIgaW50ZXJmYWNlIGlzIGVuYWJsZWQgZm9yIHRoaXMgcmVwb3NpdG9yeS4KIAlTZWUgbGlua2dpdDpnaXQtY3Zzc2VydmVyWzFdLgpAQCAtOTMwLDYgKzEwNDYsMTIgQEAKIAlvdmVyIEhUVFBTLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9TU0xfS0VZJyBlbnZpcm9ubWVudAogCXZhcmlhYmxlLgogCitodHRwLnNzbENlcnRQYXNzd29yZFByb3RlY3RlZDo6CisJRW5hYmxlIGdpdCdzIHBhc3N3b3JkIHByb21wdCBmb3IgdGhlIFNTTCBjZXJ0aWZpY2F0ZS4gIE90aGVyd2lzZQorCU9wZW5TU0wgd2lsbCBwcm9tcHQgdGhlIHVzZXIsIHBvc3NpYmx5IG1hbnkgdGltZXMsIGlmIHRoZQorCWNlcnRpZmljYXRlIG9yIHByaXZhdGUga2V5IGlzIGVuY3J5cHRlZC4gIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZQorCSdHSVRfU1NMX0NFUlRfUEFTU1dPUkRfUFJPVEVDVEVEJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKwogaHR0cC5zc2xDQUluZm86OgogCUZpbGUgY29udGFpbmluZyB0aGUgY2VydGlmaWNhdGVzIHRvIHZlcmlmeSB0aGUgcGVlciB3aXRoIHdoZW4KIAlmZXRjaGluZyBvciBwdXNoaW5nIG92ZXIgSFRUUFMuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZQpAQCAtOTkwLDYgKzExMTIsMTMgQEAKIAlUaGUgcG9ydCBudW1iZXIgdG8gYmluZCB0aGUgZ2l0d2ViIGh0dHBkIHRvLiBTZWUKIAlsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXS4KIAoraW50ZXJhY3RpdmUuc2luZ2xla2V5OjoKKwlJbiBpbnRlcmFjdGl2ZSBjb21tYW5kcywgYWxsb3cgdGhlIHVzZXIgdG8gcHJvdmlkZSBvbmUtbGV0dGVyCisJaW5wdXQgd2l0aCBhIHNpbmdsZSBrZXkgKGkuZS4sIHdpdGhvdXQgaGl0dGluZyBlbnRlcikuCisJQ3VycmVudGx5IHRoaXMgaXMgdXNlZCBvbmx5IGJ5IHRoZSBgXC0tcGF0Y2hgIG1vZGUgb2YKKwlsaW5rZ2l0OmdpdC1hZGRbMV0uICBOb3RlIHRoYXQgdGhpcyBzZXR0aW5nIGlzIHNpbGVudGx5CisJaWdub3JlZCBpZiBwb3J0YWJsZSBrZXlzdHJva2UgaW5wdXQgaXMgbm90IGF2YWlsYWJsZS4KKwogbG9nLmRhdGU6OgogCVNldCBkZWZhdWx0IGRhdGUtdGltZSBtb2RlIGZvciB0aGUgbG9nIGNvbW1hbmQuIFNldHRpbmcgbG9nLmRhdGUKIAl2YWx1ZSBpcyBzaW1pbGFyIHRvIHVzaW5nICdnaXQtbG9nJ1wncyAtLWRhdGUgb3B0aW9uLiBUaGUgdmFsdWUgaXMgb25lIG9mIHRoZQpAQCAtMTAwMiw2ICsxMTMxLDE0IEBACiAJVG9vbHMgbGlrZSBsaW5rZ2l0OmdpdC1sb2dbMV0gb3IgbGlua2dpdDpnaXQtd2hhdGNoYW5nZWRbMV0sIHdoaWNoCiAJbm9ybWFsbHkgaGlkZSB0aGUgcm9vdCBjb21taXQgd2lsbCBub3cgc2hvdyBpdC4gVHJ1ZSBieSBkZWZhdWx0LgogCittYWlsbWFwLmZpbGU6OgorCVRoZSBsb2NhdGlvbiBvZiBhbiBhdWdtZW50aW5nIG1haWxtYXAgZmlsZS4gVGhlIGRlZmF1bHQKKwltYWlsbWFwLCBsb2NhdGVkIGluIHRoZSByb290IG9mIHRoZSByZXBvc2l0b3J5LCBpcyBsb2FkZWQKKwlmaXJzdCwgdGhlbiB0aGUgbWFpbG1hcCBmaWxlIHBvaW50ZWQgdG8gYnkgdGhpcyB2YXJpYWJsZS4KKwlUaGUgbG9jYXRpb24gb2YgdGhlIG1haWxtYXAgZmlsZSBtYXkgYmUgaW4gYSByZXBvc2l0b3J5CisJc3ViZGlyZWN0b3J5LCBvciBzb21ld2hlcmUgb3V0c2lkZSBvZiB0aGUgcmVwb3NpdG9yeSBpdHNlbGYuCisJU2VlIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIGFuZCBsaW5rZ2l0OmdpdC1ibGFtZVsxXS4KKwogbWFuLnZpZXdlcjo6CiAJU3BlY2lmeSB0aGUgcHJvZ3JhbXMgdGhhdCBtYXkgYmUgdXNlZCB0byBkaXNwbGF5IGhlbHAgaW4gdGhlCiAJJ21hbicgZm9ybWF0LiBTZWUgbGlua2dpdDpnaXQtaGVscFsxXS4KQEAgLTEwNDYsNiArMTE4MywxNiBAQAogCWlzIHNldCB0byBgZmFsc2VgIHRoZW4gdGhpcyBmaWxlIGlzIG5vdCBwcmVzZXJ2ZWQuICBEZWZhdWx0cyB0bwogCWB0cnVlYCAoaS5lLiBrZWVwIHRoZSBiYWNrdXAgZmlsZXMpLgogCittZXJnZXRvb2wua2VlcFRlbXBvcmFyaWVzOjoKKwlXaGVuIGludm9raW5nIGEgY3VzdG9tIG1lcmdlIHRvb2wsIGdpdCB1c2VzIGEgc2V0IG9mIHRlbXBvcmFyeQorCWZpbGVzIHRvIHBhc3MgdG8gdGhlIHRvb2wuIElmIHRoZSB0b29sIHJldHVybnMgYW4gZXJyb3IgYW5kIHRoaXMKKwl2YXJpYWJsZSBpcyBzZXQgdG8gYHRydWVgLCB0aGVuIHRoZXNlIHRlbXBvcmFyeSBmaWxlcyB3aWxsIGJlCisJcHJlc2VydmVkLCBvdGhlcndpc2UgdGhleSB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgdGhlIHRvb2wgaGFzCisJZXhpdGVkLiBEZWZhdWx0cyB0byBgZmFsc2VgLgorCittZXJnZXRvb2wucHJvbXB0OjoKKwlQcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtLgorCiBwYWNrLndpbmRvdzo6CiAJVGhlIHNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGJ5IGxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXSB3aGVuIG5vCiAJd2luZG93IHNpemUgaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gRGVmYXVsdHMgdG8gMTAuCkBAIC0xMDcxLDEyICsxMjE4LDIwIEBACiAKIHBhY2suZGVsdGFDYWNoZVNpemU6OgogCVRoZSBtYXhpbXVtIG1lbW9yeSBpbiBieXRlcyB1c2VkIGZvciBjYWNoaW5nIGRlbHRhcyBpbgotCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4KLQlBIHZhbHVlIG9mIDAgbWVhbnMgbm8gbGltaXQuIERlZmF1bHRzIHRvIDAuCisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdIGJlZm9yZSB3cml0aW5nIHRoZW0gb3V0IHRvIGEgcGFjay4KKwlUaGlzIGNhY2hlIGlzIHVzZWQgdG8gc3BlZWQgdXAgdGhlIHdyaXRpbmcgb2JqZWN0IHBoYXNlIGJ5IG5vdAorCWhhdmluZyB0byByZWNvbXB1dGUgdGhlIGZpbmFsIGRlbHRhIHJlc3VsdCBvbmNlIHRoZSBiZXN0IG1hdGNoCisJZm9yIGFsbCBvYmplY3RzIGlzIGZvdW5kLiAgUmVwYWNraW5nIGxhcmdlIHJlcG9zaXRvcmllcyBvbiBtYWNoaW5lcworCXdoaWNoIGFyZSB0aWdodCB3aXRoIG1lbW9yeSBtaWdodCBiZSBiYWRseSBpbXBhY3RlZCBieSB0aGlzIHRob3VnaCwKKwllc3BlY2lhbGx5IGlmIHRoaXMgY2FjaGUgcHVzaGVzIHRoZSBzeXN0ZW0gaW50byBzd2FwcGluZy4KKwlBIHZhbHVlIG9mIDAgbWVhbnMgbm8gbGltaXQuIFRoZSBzbWFsbGVzdCBzaXplIG9mIDEgYnl0ZSBtYXkgYmUKKwl1c2VkIHRvIHZpcnR1YWxseSBkaXNhYmxlIHRoaXMgY2FjaGUuIERlZmF1bHRzIHRvIDI1NiBNaUIuCiAKIHBhY2suZGVsdGFDYWNoZUxpbWl0OjoKIAlUaGUgbWF4aW11bSBzaXplIG9mIGEgZGVsdGEsIHRoYXQgaXMgY2FjaGVkIGluCi0JbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLiBEZWZhdWx0cyB0byAxMDAwLgorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4gVGhpcyBjYWNoZSBpcyB1c2VkIHRvIHNwZWVkIHVwIHRoZQorCXdyaXRpbmcgb2JqZWN0IHBoYXNlIGJ5IG5vdCBoYXZpbmcgdG8gcmVjb21wdXRlIHRoZSBmaW5hbCBkZWx0YQorCXJlc3VsdCBvbmNlIHRoZSBiZXN0IG1hdGNoIGZvciBhbGwgb2JqZWN0cyBpcyBmb3VuZC4gRGVmYXVsdHMgdG8gMTAwMC4KIAogcGFjay50aHJlYWRzOjoKIAlTcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHNwYXduIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0CkBAIC0xMTE2LDcgKzEyNzEsNyBAQAogCXBhcnRpY3VsYXIgZ2l0IHN1YmNvbW1hbmQgd2hlbiB3cml0aW5nIHRvIGEgdHR5LiAgSWYKIAlgXC0tcGFnaW5hdGVgIG9yIGBcLS1uby1wYWdlcmAgaXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsCiAJaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoaXMgb3B0aW9uLiAgVG8gZGlzYWJsZSBwYWdpbmF0aW9uIGZvcgotCWFsbCBjb21tYW5kcywgc2V0IGBjb3JlLnBhZ2VyYCBvciAnR0lUX1BBR0VSJyB0byAiYGNhdGAiLgorCWFsbCBjb21tYW5kcywgc2V0IGBjb3JlLnBhZ2VyYCBvciBgR0lUX1BBR0VSYCB0byBgY2F0YC4KIAogcHVsbC5vY3RvcHVzOjoKIAlUaGUgZGVmYXVsdCBtZXJnZSBzdHJhdGVneSB0byB1c2Ugd2hlbiBwdWxsaW5nIG11bHRpcGxlIGJyYW5jaGVzCkBAIC0xMTI1LDYgKzEyODAsMjMgQEAKIHB1bGwudHdvaGVhZDo6CiAJVGhlIGRlZmF1bHQgbWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIHdoZW4gcHVsbGluZyBhIHNpbmdsZSBicmFuY2guCiAKK3B1c2guZGVmYXVsdDo6CisJRGVmaW5lcyB0aGUgYWN0aW9uIGdpdCBwdXNoIHNob3VsZCB0YWtlIGlmIG5vIHJlZnNwZWMgaXMgZ2l2ZW4KKwlvbiB0aGUgY29tbWFuZCBsaW5lLCBubyByZWZzcGVjIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIHJlbW90ZSwgYW5kCisJbm8gcmVmc3BlYyBpcyBpbXBsaWVkIGJ5IGFueSBvZiB0aGUgb3B0aW9ucyBnaXZlbiBvbiB0aGUgY29tbWFuZAorCWxpbmUuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CisrCisqIGBub3RoaW5nYCBkbyBub3QgcHVzaCBhbnl0aGluZy4KKyogYG1hdGNoaW5nYCBwdXNoIGFsbCBtYXRjaGluZyBicmFuY2hlcy4KKyAgQWxsIGJyYW5jaGVzIGhhdmluZyB0aGUgc2FtZSBuYW1lIGluIGJvdGggZW5kcyBhcmUgY29uc2lkZXJlZCB0byBiZQorICBtYXRjaGluZy4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KKyogYHRyYWNraW5nYCBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCB0byBpdHMgdXBzdHJlYW0gYnJhbmNoLgorKiBgY3VycmVudGAgcHVzaCB0aGUgY3VycmVudCBicmFuY2ggdG8gYSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZS4KKworcmViYXNlLnN0YXQ6OgorCVdoZXRoZXIgdG8gc2hvdyBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSBzaW5jZSB0aGUgbGFzdAorCXJlYmFzZS4gRmFsc2UgYnkgZGVmYXVsdC4KKwogcmVjZWl2ZS5mc2NrT2JqZWN0czo6CiAJSWYgaXQgaXMgc2V0IHRvIHRydWUsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBjaGVjayBhbGwgcmVjZWl2ZWQKIAlvYmplY3RzLiBJdCB3aWxsIGFib3J0IGluIHRoZSBjYXNlIG9mIGEgbWFsZm9ybWVkIG9iamVjdCBvciBhCkBAIC0xMTY0LDYgKzEzMzYsOSBAQAogCVRoZSBVUkwgb2YgYSByZW1vdGUgcmVwb3NpdG9yeS4gIFNlZSBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBvcgogCWxpbmtnaXQ6Z2l0LXB1c2hbMV0uCiAKK3JlbW90ZS48bmFtZT4ucHVzaHVybDo6CisJVGhlIHB1c2ggVVJMIG9mIGEgcmVtb3RlIHJlcG9zaXRvcnkuICBTZWUgbGlua2dpdDpnaXQtcHVzaFsxXS4KKwogcmVtb3RlLjxuYW1lPi5wcm94eTo6CiAJRm9yIHJlbW90ZXMgdGhhdCByZXF1aXJlIGN1cmwgKGh0dHAsIGh0dHBzIGFuZCBmdHApLCB0aGUgVVJMIHRvCiAJdGhlIHByb3h5IHRvIHVzZSBmb3IgdGhhdCByZW1vdGUuICBTZXQgdG8gdGhlIGVtcHR5IHN0cmluZyB0bwpAQCAtMTIyMSw2ICsxMzk2LDUwIEBACiAJZGVmYXVsdCBlbmFibGVkIGlmIHlvdSBjcmVhdGUgYHJyLWNhY2hlYCBkaXJlY3RvcnkgdW5kZXIKIAlgJEdJVF9ESVJgLCBidXQgY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgdGhpcyBvcHRpb24gdG8gZmFsc2UuCiAKK3NlbmRlbWFpbC5pZGVudGl0eTo6CisJQSBjb25maWd1cmF0aW9uIGlkZW50aXR5LiBXaGVuIGdpdmVuLCBjYXVzZXMgdmFsdWVzIGluIHRoZQorCSdzZW5kZW1haWwuPGlkZW50aXR5Picgc3Vic2VjdGlvbiB0byB0YWtlIHByZWNlZGVuY2Ugb3ZlcgorCXZhbHVlcyBpbiB0aGUgJ3NlbmRlbWFpbCcgc2VjdGlvbi4gVGhlIGRlZmF1bHQgaWRlbnRpdHkgaXMKKwl0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5pZGVudGl0eScuCisKK3NlbmRlbWFpbC5zbXRwZW5jcnlwdGlvbjo6CisJU2VlIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0gZm9yIGRlc2NyaXB0aW9uLiAgTm90ZSB0aGF0IHRoaXMKKwlzZXR0aW5nIGlzIG5vdCBzdWJqZWN0IHRvIHRoZSAnaWRlbnRpdHknIG1lY2hhbmlzbS4KKworc2VuZGVtYWlsLnNtdHBzc2w6OgorCURlcHJlY2F0ZWQgYWxpYXMgZm9yICdzZW5kZW1haWwuc210cGVuY3J5cHRpb24gPSBzc2wnLgorCitzZW5kZW1haWwuPGlkZW50aXR5Pi4qOjoKKwlJZGVudGl0eS1zcGVjaWZpYyB2ZXJzaW9ucyBvZiB0aGUgJ3NlbmRlbWFpbC4qJyBwYXJhbWV0ZXJzCisJZm91bmQgYmVsb3csIHRha2luZyBwcmVjZWRlbmNlIG92ZXIgdGhvc2Ugd2hlbiB0aGUgdGhpcworCWlkZW50aXR5IGlzIHNlbGVjdGVkLCB0aHJvdWdoIGNvbW1hbmQtbGluZSBvcgorCSdzZW5kZW1haWwuaWRlbnRpdHknLgorCitzZW5kZW1haWwuYWxpYXNlc2ZpbGU6Ogorc2VuZGVtYWlsLmFsaWFzZmlsZXR5cGU6Ogorc2VuZGVtYWlsLmJjYzo6CitzZW5kZW1haWwuY2M6Ogorc2VuZGVtYWlsLmNjY21kOjoKK3NlbmRlbWFpbC5jaGFpbnJlcGx5dG86Ogorc2VuZGVtYWlsLmNvbmZpcm06Ogorc2VuZGVtYWlsLmVudmVsb3Blc2VuZGVyOjoKK3NlbmRlbWFpbC5mcm9tOjoKK3NlbmRlbWFpbC5tdWx0aWVkaXQ6Ogorc2VuZGVtYWlsLnNpZ25lZG9mZmJ5Y2M6Ogorc2VuZGVtYWlsLnNtdHBwYXNzOjoKK3NlbmRlbWFpbC5zdXBwcmVzc2NjOjoKK3NlbmRlbWFpbC5zdXBwcmVzc2Zyb206Ogorc2VuZGVtYWlsLnRvOjoKK3NlbmRlbWFpbC5zbXRwc2VydmVyOjoKK3NlbmRlbWFpbC5zbXRwc2VydmVycG9ydDo6CitzZW5kZW1haWwuc210cHVzZXI6Ogorc2VuZGVtYWlsLnRocmVhZDo6CitzZW5kZW1haWwudmFsaWRhdGU6OgorCVNlZSBsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdIGZvciBkZXNjcmlwdGlvbi4KKworc2VuZGVtYWlsLnNpZ25lZG9mZmNjOjoKKwlEZXByZWNhdGVkIGFsaWFzIGZvciAnc2VuZGVtYWlsLnNpZ25lZG9mZmJ5Y2MnLgorCiBzaG93YnJhbmNoLmRlZmF1bHQ6OgogCVRoZSBkZWZhdWx0IHNldCBvZiBicmFuY2hlcyBmb3IgbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0uCiAJU2VlIGxpbmtnaXQ6Z2l0LXNob3ctYnJhbmNoWzFdLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dAppbmRleCAxZWViMWM3Li5iNzE3MTI0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dApAQCAtMSw0ICsxLDcgQEAKLVRoZSBvdXRwdXQgZm9ybWF0IGZyb20gImdpdC1kaWZmLWluZGV4IiwgImdpdC1kaWZmLXRyZWUiLAorUmF3IG91dHB1dCBmb3JtYXQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByYXcgb3V0cHV0IGZvcm1hdCBmcm9tICJnaXQtZGlmZi1pbmRleCIsICJnaXQtZGlmZi10cmVlIiwKICJnaXQtZGlmZi1maWxlcyIgYW5kICJnaXQgZGlmZiAtLXJhdyIgYXJlIHZlcnkgc2ltaWxhci4KIAogVGhlc2UgY29tbWFuZHMgYWxsIGNvbXBhcmUgdHdvIHNldHMgb2YgdGhpbmdzOyB3aGF0IGlzCkBAIC0xNiw2ICsxOSw5IEBACiBnaXQtZGlmZi1maWxlcyBbPHBhdHRlcm4+Li4uXTo6CiAgICAgICAgIGNvbXBhcmVzIHRoZSBpbmRleCBhbmQgdGhlIGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtLgogCitUaGUgImdpdC1kaWZmLXRyZWUiIGNvbW1hbmQgYmVnaW5zIGl0cyBvdXB1dCBieSBwcmludGluZyB0aGUgaGFzaCBvZgord2hhdCBpcyBiZWluZyBjb21wYXJlZC4gQWZ0ZXIgdGhhdCwgYWxsIHRoZSBjb21tYW5kcyBwcmludCBvbmUgb3V0cHV0CitsaW5lIHBlciBjaGFuZ2VkIGZpbGUuCiAKIEFuIG91dHB1dCBsaW5lIGlzIGZvcm1hdHRlZCB0aGlzIHdheToKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0CmluZGV4IGI0MzJkMjUuLjkyNzZmYWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQKQEAgLTM2LDYgKzM2LDkgQEAKIC0tcGF0Y2gtd2l0aC1yYXc6OgogCVN5bm9ueW0gZm9yICItcCAtLXJhdyIuCiAKKy0tcGF0aWVuY2U6OgorCUdlbmVyYXRlIGEgZGlmZiB1c2luZyB0aGUgInBhdGllbmNlIGRpZmYiIGFsZ29yaXRobS4KKwogLS1zdGF0Wz13aWR0aFssbmFtZS13aWR0aF1dOjoKIAlHZW5lcmF0ZSBhIGRpZmZzdGF0LiAgWW91IGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdAogCW91dHB1dCB3aWR0aCBmb3IgODAtY29sdW1uIHRlcm1pbmFsIGJ5ICItLXN0YXQ9d2lkdGgiLgpAQCAtOTEsOCArOTQsMjIgQEAKIAlUdXJuIG9mZiBjb2xvcmVkIGRpZmYsIGV2ZW4gd2hlbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlCiAJZ2l2ZXMgdGhlIGRlZmF1bHQgdG8gY29sb3Igb3V0cHV0LgogCi0tLWNvbG9yLXdvcmRzOjoKLQlTaG93IGNvbG9yZWQgd29yZCBkaWZmLCBpLmUuIGNvbG9yIHdvcmRzIHdoaWNoIGhhdmUgY2hhbmdlZC4KKy0tY29sb3Itd29yZHNbPTxyZWdleD5dOjoKKwlTaG93IGNvbG9yZWQgd29yZCBkaWZmLCBpLmUuLCBjb2xvciB3b3JkcyB3aGljaCBoYXZlIGNoYW5nZWQuCisJQnkgZGVmYXVsdCwgd29yZHMgYXJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLgorKworV2hlbiBhIDxyZWdleD4gaXMgc3BlY2lmaWVkLCBldmVyeSBub24tb3ZlcmxhcHBpbmcgbWF0Y2ggb2YgdGhlCis8cmVnZXg+IGlzIGNvbnNpZGVyZWQgYSB3b3JkLiAgQW55dGhpbmcgYmV0d2VlbiB0aGVzZSBtYXRjaGVzIGlzCitjb25zaWRlcmVkIHdoaXRlc3BhY2UgYW5kIGlnbm9yZWQoISkgZm9yIHRoZSBwdXJwb3NlcyBvZiBmaW5kaW5nCitkaWZmZXJlbmNlcy4gIFlvdSBtYXkgd2FudCB0byBhcHBlbmQgYHxbXls6c3BhY2U6XV1gIHRvIHlvdXIgcmVndWxhcgorZXhwcmVzc2lvbiB0byBtYWtlIHN1cmUgdGhhdCBpdCBtYXRjaGVzIGFsbCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgorQSBtYXRjaCB0aGF0IGNvbnRhaW5zIGEgbmV3bGluZSBpcyBzaWxlbnRseSB0cnVuY2F0ZWQoISkgYXQgdGhlCituZXdsaW5lLgorKworVGhlIHJlZ2V4IGNhbiBhbHNvIGJlIHNldCB2aWEgYSBkaWZmIGRyaXZlciBvciBjb25maWd1cmF0aW9uIG9wdGlvbiwgc2VlCitsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbMV0gb3IgbGlua2dpdDpnaXQtY29uZmlnWzFdLiAgR2l2aW5nIGl0IGV4cGxpY2l0bHkKK292ZXJyaWRlcyBhbnkgZGlmZiBkcml2ZXIgb3IgY29uZmlndXJhdGlvbiBzZXR0aW5nLiAgRGlmZiBkcml2ZXJzCitvdmVycmlkZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLgogCiAtLW5vLXJlbmFtZXM6OgogCVR1cm4gb2ZmIHJlbmFtZSBkZXRlY3Rpb24sIGV2ZW4gd2hlbiB0aGUgY29uZmlndXJhdGlvbgpAQCAtMTE2LDcgKzEzMyw3IEBACiAtLWFiYnJldls9PG4+XTo6CiAJSW5zdGVhZCBvZiBzaG93aW5nIHRoZSBmdWxsIDQwLWJ5dGUgaGV4YWRlY2ltYWwgb2JqZWN0CiAJbmFtZSBpbiBkaWZmLXJhdyBmb3JtYXQgb3V0cHV0IGFuZCBkaWZmLXRyZWUgaGVhZGVyCi0JbGluZXMsIHNob3cgb25seSBoYW5kZnVsIGhleGRpZ2l0cyBwcmVmaXguICBUaGlzIGlzCisJbGluZXMsIHNob3cgb25seSBhIHBhcnRpYWwgcHJlZml4LiAgVGhpcyBpcwogCWluZGVwZW5kZW50IG9mIC0tZnVsbC1pbmRleCBvcHRpb24gYWJvdmUsIHdoaWNoIGNvbnRyb2xzCiAJdGhlIGRpZmYtcGF0Y2ggb3V0cHV0IGZvcm1hdC4gIE5vbiBkZWZhdWx0IG51bWJlciBvZgogCWRpZ2l0cyBjYW4gYmUgc3BlY2lmaWVkIHdpdGggLS1hYmJyZXY9PG4+LgpAQCAtMTU5LDcgKzE3NiwxMCBAQAogCW51bWJlci4KIAogLVM8c3RyaW5nPjo6Ci0JTG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjb250YWluIHRoZSBjaGFuZ2UgaW4gPHN0cmluZz4uCisJTG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBpbnRyb2R1Y2Ugb3IgcmVtb3ZlIGFuIGluc3RhbmNlIG9mCisJPHN0cmluZz4uIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBzdHJpbmcgc2ltcGx5CisJYXBwZWFyaW5nIGluIGRpZmYgb3V0cHV0OyBzZWUgdGhlICdwaWNrYXhlJyBlbnRyeSBpbgorCWxpbmtnaXQ6Z2l0ZGlmZmNvcmVbN10gZm9yIG1vcmUgZGV0YWlscy4KIAogLS1waWNrYXhlLWFsbDo6CiAJV2hlbiAtUyBmaW5kcyBhIGNoYW5nZSwgc2hvdyBhbGwgdGhlIGNoYW5nZXMgaW4gdGhhdApAQCAtMjA1LDYgKzIyNSwxMCBAQAogCWRpZmZlcmVuY2VzIGV2ZW4gaWYgb25lIGxpbmUgaGFzIHdoaXRlc3BhY2Ugd2hlcmUgdGhlIG90aGVyCiAJbGluZSBoYXMgbm9uZS4KIAorLS1pbnRlci1odW5rLWNvbnRleHQ9PGxpbmVzPjo6CisJU2hvdyB0aGUgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MsIHVwIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyCisJb2YgbGluZXMsIHRoZXJlYnkgZnVzaW5nIGh1bmtzIHRoYXQgYXJlIGNsb3NlIHRvIGVhY2ggb3RoZXIuCisKIC0tZXhpdC1jb2RlOjoKIAlNYWtlIHRoZSBwcm9ncmFtIGV4aXQgd2l0aCBjb2RlcyBzaW1pbGFyIHRvIGRpZmYoMSkuCiAJVGhhdCBpcywgaXQgZXhpdHMgd2l0aCAxIGlmIHRoZXJlIHdlcmUgZGlmZmVyZW5jZXMgYW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RvY2Jvb2steHNsLmNzcyBiL0RvY3VtZW50YXRpb24vZG9jYm9vay14c2wuY3NzCmluZGV4IGI4NzhiMzguLmUxMWM4ZjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZG9jYm9vay14c2wuY3NzCisrKyBiL0RvY3VtZW50YXRpb24vZG9jYm9vay14c2wuY3NzCkBAIC0xNiw2ICsxNiw3IEBACiBodG1sIGJvZHkgewogICBtYXJnaW46IDFlbSA1JSAxZW0gNSU7CiAgIGxpbmUtaGVpZ2h0OiAxLjI7CisgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwogfQogCiBib2R5IGRpdiB7CkBAIC0xMjgsNiArMTI5LDE1IEBACiAKIHR0LmxpdGVyYWwsIGNvZGUubGl0ZXJhbCB7CiAgIGNvbG9yOiBuYXZ5OworICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKK30KKworY29kZS5saXRlcmFsOmJlZm9yZSB7IGNvbnRlbnQ6ICInIjsgfQorY29kZS5saXRlcmFsOmFmdGVyIHsgY29udGVudDogIiciOyB9CisKK2VtIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworICBjb2xvcjogIzA2NDsKIH0KIAogZGl2LmxpdGVyYWxsYXlvdXQgcCB7CkBAIC0xMzcsNyArMTQ3LDYgQEAKIAogZGl2LmxpdGVyYWxsYXlvdXQgewogICBmb250LWZhbWlseTogbW9ub3NwYWNlOwotIyAgbWFyZ2luOiAwLjVlbSAxMCUgMC41ZW0gMWVtOwogICBtYXJnaW46IDBlbTsKICAgY29sb3I6IG5hdnk7CiAgIGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlcjsKQEAgLTE4Nyw3ICsxOTYsOCBAQAogfQogCiBkdCBzcGFuLnRlcm0gewotICBmb250LXN0eWxlOiBpdGFsaWM7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgY29sb3I6IG5hdnk7CiB9CiAKIGRpdi52YXJpYWJsZWxpc3QgZGQgcCB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dAppbmRleCBkMzEzNzk1Li5lYTNiMWJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKQEAgLTEsNyArMSw3IEBACiAtcTo6CiAtLXF1aWV0OjoKIAlQYXNzIC0tcXVpZXQgdG8gZ2l0LWZldGNoLXBhY2sgYW5kIHNpbGVuY2UgYW55IG90aGVyIGludGVybmFsbHkKLQl1c2VkIHByb2dyYW1zLgorCXVzZWQgZ2l0IGNvbW1hbmRzLgogCiAtdjo6CiAtLXZlcmJvc2U6OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQKaW5kZXggZTRjNzExYi4uZTY3YjdlOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hZGQudHh0CkBAIC05LDggKzksOCBAQAogLS0tLS0tLS0KIFt2ZXJzZV0KICdnaXQgYWRkJyBbLW5dIFstdl0gWy0tZm9yY2UgfCAtZl0gWy0taW50ZXJhY3RpdmUgfCAtaV0gWy0tcGF0Y2ggfCAtcF0KLQkgIFstLWFsbCB8IFstLXVwZGF0ZSB8IC11XV0gWy0taW50ZW50LXRvLWFkZCB8IC1OXQotCSAgWy0tcmVmcmVzaF0gWy0taWdub3JlLWVycm9yc10gWy0tXSA8ZmlsZXBhdHRlcm4+Li4uCisJICBbLS1lZGl0IHwgLWVdIFstLWFsbCB8IFstLXVwZGF0ZSB8IC11XV0gWy0taW50ZW50LXRvLWFkZCB8IC1OXQorCSAgWy0tcmVmcmVzaF0gWy0taWdub3JlLWVycm9yc10gWy0tXSBbPGZpbGVwYXR0ZXJuPi4uLl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC03Niw2ICs3NiwxNSBAQAogCWJ5cGFzc2VkIGFuZCB0aGUgJ3BhdGNoJyBzdWJjb21tYW5kIGlzIGludm9rZWQgdXNpbmcgZWFjaCBvZgogCXRoZSBzcGVjaWZpZWQgZmlsZXBhdHRlcm5zIGJlZm9yZSBleGl0aW5nLgogCistZSwgXC0tZWRpdDo6CisJT3BlbiB0aGUgZGlmZiB2cy4gdGhlIGluZGV4IGluIGFuIGVkaXRvciBhbmQgbGV0IHRoZSB1c2VyCisJZWRpdCBpdC4gIEFmdGVyIHRoZSBlZGl0b3Igd2FzIGNsb3NlZCwgYWRqdXN0IHRoZSBodW5rIGhlYWRlcnMKKwlhbmQgYXBwbHkgdGhlIHBhdGNoIHRvIHRoZSBpbmRleC4KKysKKypOT1RFKjogT2J2aW91c2x5LCBpZiB5b3UgY2hhbmdlIGFueXRoaW5nIGVsc2UgdGhhbiB0aGUgZmlyc3QgY2hhcmFjdGVyCitvbiBsaW5lcyBiZWdpbm5pbmcgd2l0aCBhIHNwYWNlIG9yIGEgbWludXMsIHRoZSBwYXRjaCB3aWxsIG5vIGxvbmdlcgorYXBwbHkuCisKIC11OjoKIC0tdXBkYXRlOjoKIAlVcGRhdGUgb25seSBmaWxlcyB0aGF0IGdpdCBhbHJlYWR5IGtub3dzIGFib3V0LCBzdGFnaW5nIG1vZGlmaWVkCkBAIC0yNDUsOCArMjU0LDExIEBACiAKICAgICAgICB5IC0gc3RhZ2UgdGhpcyBodW5rCiAgICAgICAgbiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsKKyAgICAgICBxIC0gcXVpdCwgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBub3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lcwogICAgICAgIGEgLSBzdGFnZSB0aGlzIGFuZCBhbGwgdGhlIHJlbWFpbmluZyBodW5rcyBpbiB0aGUgZmlsZQogICAgICAgIGQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG5vciBhbnkgb2YgdGhlIHJlbWFpbmluZyBodW5rcyBpbiB0aGUgZmlsZQorICAgICAgIGcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvCisgICAgICAgLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleAogICAgICAgIGogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVuawogICAgICAgIEogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rCiAgICAgICAgayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVuawpAQCAtMjYzLDEzICsyNzUsNiBAQAogICBUaGlzIGxldHMgeW91IHJldmlldyB3aGF0IHdpbGwgYmUgY29tbWl0dGVkIChpLmUuIGJldHdlZW4KICAgSEVBRCBhbmQgaW5kZXgpLgogCi1CdWdzCi0tLS0tCi1UaGUgaW50ZXJhY3RpdmUgbW9kZSBkb2VzIG5vdCB3b3JrIHdpdGggZmlsZXMgd2hvc2UgbmFtZXMgY29udGFpbgotY2hhcmFjdGVycyB0aGF0IG5lZWQgQy1xdW90aW5nLiAgYGNvcmUucXVvdGVwYXRoYCBjb25maWd1cmF0aW9uIGNhbiBiZQotdXNlZCB0byB3b3JrIHRoaXMgbGltaXRhdGlvbiBhcm91bmQgdG8gc29tZSBkZWdyZWUsIGJ1dCBiYWNrc2xhc2gsCi1kb3VibGUtcXVvdGUgYW5kIGNvbnRyb2wgY2hhcmFjdGVycyB3aWxsIHN0aWxsIGhhdmUgcHJvYmxlbXMuCi0KIFNFRSBBTFNPCiAtLS0tLS0tLQogbGlua2dpdDpnaXQtc3RhdHVzWzFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKaW5kZXggYjljNmZhYy4uMzJlNjg5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dApAQCAtMTAsOCArMTAsMTAgQEAKIC0tLS0tLS0tCiBbdmVyc2VdCiAnZ2l0IGFtJyBbLS1zaWdub2ZmXSBbLS1rZWVwXSBbLS11dGY4IHwgLS1uby11dGY4XQotCSBbLS0zd2F5XSBbLS1pbnRlcmFjdGl2ZV0KLSAgICAgICAgIFstLXdoaXRlc3BhY2U9PG9wdGlvbj5dIFstQzxuPl0gWy1wPG4+XQorCSBbLS0zd2F5XSBbLS1pbnRlcmFjdGl2ZV0gWy0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGVdCisJIFstLWlnbm9yZS1kYXRlXQorCSBbLS13aGl0ZXNwYWNlPTxvcHRpb24+XSBbLUM8bj5dIFstcDxuPl0gWy0tZGlyZWN0b3J5PTxkaXI+XQorCSBbLS1yZWplY3RdIFstcSB8IC0tcXVpZXRdCiAJIFs8bWJveD4gfCA8TWFpbGRpcj4uLi5dCiAnZ2l0IGFtJyAoLS1za2lwIHwgLS1yZXNvbHZlZCB8IC0tYWJvcnQpCiAKQEAgLTI1LDE4ICsyNywyMiBAQAogLS0tLS0tLQogPG1ib3g+fDxNYWlsZGlyPi4uLjo6CiAJVGhlIGxpc3Qgb2YgbWFpbGJveCBmaWxlcyB0byByZWFkIHBhdGNoZXMgZnJvbS4gSWYgeW91IGRvIG5vdAotCXN1cHBseSB0aGlzIGFyZ3VtZW50LCByZWFkcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4gSWYgeW91IHN1cHBseQotCWRpcmVjdG9yaWVzLCB0aGV5J2xsIGJlIHRyZWF0ZWQgYXMgTWFpbGRpcnMuCisJc3VwcGx5IHRoaXMgYXJndW1lbnQsIHRoZSBjb21tYW5kIHJlYWRzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCUlmIHlvdSBzdXBwbHkgZGlyZWN0b3JpZXMsIHRoZXkgd2lsbCBiZSB0cmVhdGVkIGFzIE1haWxkaXJzLgogCiAtczo6CiAtLXNpZ25vZmY6OgotCUFkZCBgU2lnbmVkLW9mZi1ieTpgIGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlLCB1c2luZworCUFkZCBhIGBTaWduZWQtb2ZmLWJ5OmAgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UsIHVzaW5nCiAJdGhlIGNvbW1pdHRlciBpZGVudGl0eSBvZiB5b3Vyc2VsZi4KIAogLWs6OgogLS1rZWVwOjoKIAlQYXNzIGAta2AgZmxhZyB0byAnZ2l0LW1haWxpbmZvJyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxpbmZvWzFdKS4KIAorLXE6OgorLS1xdWlldDo6CisJQmUgcXVpZXQuIE9ubHkgcHJpbnQgZXJyb3IgbWVzc2FnZXMuCisKIC11OjoKIC0tdXRmODo6CiAJUGFzcyBgLXVgIGZsYWcgdG8gJ2dpdC1tYWlsaW5mbycgKHNlZSBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuCkBAIC00Niw3ICs1Miw3IEBACiAJcHJlZmVycmVkIGVuY29kaW5nIGlmIGl0IGlzIG5vdCBVVEYtOCkuCiArCiBUaGlzIHdhcyBvcHRpb25hbCBpbiBwcmlvciB2ZXJzaW9ucyBvZiBnaXQsIGJ1dCBub3cgaXQgaXMgdGhlCi1kZWZhdWx0LiAgIFlvdSBjb3VsZCB1c2UgYC0tbm8tdXRmOGAgdG8gb3ZlcnJpZGUgdGhpcy4KK2RlZmF1bHQuICAgWW91IGNhbiB1c2UgYC0tbm8tdXRmOGAgdG8gb3ZlcnJpZGUgdGhpcy4KIAogLS1uby11dGY4OjoKIAlQYXNzIGAtbmAgZmxhZyB0byAnZ2l0LW1haWxpbmZvJyAoc2VlCkBAIC01NSwxNyArNjEsMTUgQEAKIC0zOjoKIC0tM3dheTo6CiAJV2hlbiB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgZmFsbCBiYWNrIG9uCi0JMy13YXkgbWVyZ2UsIGlmIHRoZSBwYXRjaCByZWNvcmRzIHRoZSBpZGVudGl0eSBvZiBibG9icwotCWl0IGlzIHN1cHBvc2VkIHRvIGFwcGx5IHRvLCBhbmQgd2UgaGF2ZSB0aG9zZSBibG9icworCTMtd2F5IG1lcmdlIGlmIHRoZSBwYXRjaCByZWNvcmRzIHRoZSBpZGVudGl0eSBvZiBibG9icworCWl0IGlzIHN1cHBvc2VkIHRvIGFwcGx5IHRvIGFuZCB3ZSBoYXZlIHRob3NlIGJsb2JzCiAJYXZhaWxhYmxlIGxvY2FsbHkuCiAKIC0td2hpdGVzcGFjZT08b3B0aW9uPjo6Ci0JVGhpcyBmbGFnIGlzIHBhc3NlZCB0byB0aGUgJ2dpdC1hcHBseScgKHNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXSkKLQlwcm9ncmFtIHRoYXQgYXBwbGllcwotCXRoZSBwYXRjaC4KLQogLUM8bj46OgogLXA8bj46OgorLS1kaXJlY3Rvcnk9PGRpcj46OgorLS1yZWplY3Q6OgogCVRoZXNlIGZsYWdzIGFyZSBwYXNzZWQgdG8gdGhlICdnaXQtYXBwbHknIChzZWUgbGlua2dpdDpnaXQtYXBwbHlbMV0pCiAJcHJvZ3JhbSB0aGF0IGFwcGxpZXMKIAl0aGUgcGF0Y2guCkBAIC03NCw2ICs3OCwyMCBAQAogLS1pbnRlcmFjdGl2ZTo6CiAJUnVuIGludGVyYWN0aXZlbHkuCiAKKy0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGU6OgorCUJ5IGRlZmF1bHQgdGhlIGNvbW1hbmQgcmVjb3JkcyB0aGUgZGF0ZSBmcm9tIHRoZSBlLW1haWwKKwltZXNzYWdlIGFzIHRoZSBjb21taXQgYXV0aG9yIGRhdGUsIGFuZCB1c2VzIHRoZSB0aW1lIG9mCisJY29tbWl0IGNyZWF0aW9uIGFzIHRoZSBjb21taXR0ZXIgZGF0ZS4gVGhpcyBhbGxvd3MgdGhlCisJdXNlciB0byBsaWUgYWJvdXQgdGhlIGNvbW1pdHRlciBkYXRlIGJ5IHVzaW5nIHRoZSBzYW1lCisJdmFsdWUgYXMgdGhlIGF1dGhvciBkYXRlLgorCistLWlnbm9yZS1kYXRlOjoKKwlCeSBkZWZhdWx0IHRoZSBjb21tYW5kIHJlY29yZHMgdGhlIGRhdGUgZnJvbSB0aGUgZS1tYWlsCisJbWVzc2FnZSBhcyB0aGUgY29tbWl0IGF1dGhvciBkYXRlLCBhbmQgdXNlcyB0aGUgdGltZSBvZgorCWNvbW1pdCBjcmVhdGlvbiBhcyB0aGUgY29tbWl0dGVyIGRhdGUuIFRoaXMgYWxsb3dzIHRoZQorCXVzZXIgdG8gbGllIGFib3V0IHRoZSBhdXRob3IgZGF0ZSBieSB1c2luZyB0aGUgc2FtZQorCXZhbHVlIGFzIHRoZSBjb21taXR0ZXIgZGF0ZS4KKwogLS1za2lwOjoKIAlTa2lwIHRoZSBjdXJyZW50IHBhdGNoLiAgVGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwgd2hlbgogCXJlc3RhcnRpbmcgYW4gYWJvcnRlZCBwYXRjaC4KQEAgLTEwMSwyNCArMTE5LDI0IEBACiAtLS0tLS0tLS0tCiAKIFRoZSBjb21taXQgYXV0aG9yIG5hbWUgaXMgdGFrZW4gZnJvbSB0aGUgIkZyb206ICIgbGluZSBvZiB0aGUKLW1lc3NhZ2UsIGFuZCBjb21taXQgYXV0aG9yIHRpbWUgaXMgdGFrZW4gZnJvbSB0aGUgIkRhdGU6ICIgbGluZQorbWVzc2FnZSwgYW5kIGNvbW1pdCBhdXRob3IgZGF0ZSBpcyB0YWtlbiBmcm9tIHRoZSAiRGF0ZTogIiBsaW5lCiBvZiB0aGUgbWVzc2FnZS4gIFRoZSAiU3ViamVjdDogIiBsaW5lIGlzIHVzZWQgYXMgdGhlIHRpdGxlIG9mCiB0aGUgY29tbWl0LCBhZnRlciBzdHJpcHBpbmcgY29tbW9uIHByZWZpeCAiW1BBVENIIDxhbnl0aGluZz5dIi4KLUl0IGlzIHN1cHBvc2VkIHRvIGRlc2NyaWJlIHdoYXQgdGhlIGNvbW1pdCBpcyBhYm91dCBjb25jaXNlbHkgYXMKLWEgb25lIGxpbmUgdGV4dC4KK1RoZSAiU3ViamVjdDogIiBsaW5lIGlzIHN1cHBvc2VkIHRvIGNvbmNpc2VseSBkZXNjcmliZSB3aGF0IHRoZQorY29tbWl0IGlzIGFib3V0IGluIG9uZSBsaW5lIG9mIHRleHQuCiAKLVRoZSBib2R5IG9mIHRoZSBtZXNzYWdlIChpb3csIGFmdGVyIGEgYmxhbmsgbGluZSB0aGF0IHRlcm1pbmF0ZXMKLVJGQzI4MjIgaGVhZGVycykgY2FuIGJlZ2luIHdpdGggIlN1YmplY3Q6ICIgYW5kICJGcm9tOiAiIGxpbmVzCi10aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSB0aG9zZSBvZiB0aGUgbWFpbCBoZWFkZXIsIHRvIG92ZXJyaWRlCi10aGUgdmFsdWVzIG9mIHRoZXNlIGZpZWxkcy4KKyJGcm9tOiAiIGFuZCAiU3ViamVjdDogIiBsaW5lcyBzdGFydGluZyB0aGUgYm9keSAodGhlIHJlc3Qgb2YgdGhlCittZXNzYWdlIGFmdGVyIHRoZSBibGFuayBsaW5lIHRlcm1pbmF0aW5nIHRoZSBSRkMyODIyIGhlYWRlcnMpCitvdmVycmlkZSB0aGUgcmVzcGVjdGl2ZSBjb21taXQgYXV0aG9yIG5hbWUgYW5kIHRpdGxlIHZhbHVlcyB0YWtlbgorZnJvbSB0aGUgaGVhZGVycy4KIAogVGhlIGNvbW1pdCBtZXNzYWdlIGlzIGZvcm1lZCBieSB0aGUgdGl0bGUgdGFrZW4gZnJvbSB0aGUKICJTdWJqZWN0OiAiLCBhIGJsYW5rIGxpbmUgYW5kIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlIHVwIHRvCi13aGVyZSB0aGUgcGF0Y2ggYmVnaW5zLiAgRXhjZXNzIHdoaXRlc3BhY2VzIGF0IHRoZSBlbmQgb2YgdGhlCi1saW5lcyBhcmUgYXV0b21hdGljYWxseSBzdHJpcHBlZC4KK3doZXJlIHRoZSBwYXRjaCBiZWdpbnMuICBFeGNlc3Mgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIGVhY2gKK2xpbmUgaXMgYXV0b21hdGljYWxseSBzdHJpcHBlZC4KIAogVGhlIHBhdGNoIGlzIGV4cGVjdGVkIHRvIGJlIGlubGluZSwgZGlyZWN0bHkgZm9sbG93aW5nIHRoZQotbWVzc2FnZS4gIEFueSBsaW5lIHRoYXQgaXMgb2YgZm9ybToKK21lc3NhZ2UuICBBbnkgbGluZSB0aGF0IGlzIG9mIHRoZSBmb3JtOgogCiAqIHRocmVlLWRhc2hlcyBhbmQgZW5kLW9mLWxpbmUsIG9yCiAqIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoICJkaWZmIC0iLCBvcgpAQCAtMTI3LDE4ICsxNDUsMTggQEAKIGlzIHRha2VuIGFzIHRoZSBiZWdpbm5pbmcgb2YgYSBwYXRjaCwgYW5kIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UKIGlzIHRlcm1pbmF0ZWQgYmVmb3JlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHN1Y2ggYSBsaW5lLgogCi1XaGVuIGluaXRpYWxseSBpbnZva2luZyBpdCwgeW91IGdpdmUgaXQgbmFtZXMgb2YgdGhlIG1haWxib3hlcwotdG8gY3J1bmNoLiAgVXBvbiBzZWVpbmcgdGhlIGZpcnN0IHBhdGNoIHRoYXQgZG9lcyBub3QgYXBwbHksIGl0Ci1hYm9ydHMgaW4gdGhlIG1pZGRsZSwuICBZb3UgY2FuIHJlY292ZXIgZnJvbSB0aGlzIGluIG9uZSBvZiB0d28gd2F5czoKK1doZW4gaW5pdGlhbGx5IGludm9raW5nIGBnaXQgYW1gLCB5b3UgZ2l2ZSBpdCB0aGUgbmFtZXMgb2YgdGhlIG1haWxib3hlcwordG8gcHJvY2Vzcy4gIFVwb24gc2VlaW5nIHRoZSBmaXJzdCBwYXRjaCB0aGF0IGRvZXMgbm90IGFwcGx5LCBpdAorYWJvcnRzIGluIHRoZSBtaWRkbGUuICBZb3UgY2FuIHJlY292ZXIgZnJvbSB0aGlzIGluIG9uZSBvZiB0d28gd2F5czoKIAotLiBza2lwIHRoZSBjdXJyZW50IHBhdGNoIGJ5IHJlLXJ1bm5pbmcgdGhlIGNvbW1hbmQgd2l0aCAnLS1za2lwJworLiBza2lwIHRoZSBjdXJyZW50IHBhdGNoIGJ5IHJlLXJ1bm5pbmcgdGhlIGNvbW1hbmQgd2l0aCB0aGUgJy0tc2tpcCcKICAgb3B0aW9uLgogCiAuIGhhbmQgcmVzb2x2ZSB0aGUgY29uZmxpY3QgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgdXBkYXRlCi0gIHRoZSBpbmRleCBmaWxlIHRvIGJyaW5nIGl0IGluIGEgc3RhdGUgdGhhdCB0aGUgcGF0Y2ggc2hvdWxkCi0gIGhhdmUgcHJvZHVjZWQuICBUaGVuIHJ1biB0aGUgY29tbWFuZCB3aXRoICctLXJlc29sdmVkJyBvcHRpb24uCisgIHRoZSBpbmRleCBmaWxlIHRvIGJyaW5nIGl0IGludG8gYSBzdGF0ZSB0aGF0IHRoZSBwYXRjaCBzaG91bGQKKyAgaGF2ZSBwcm9kdWNlZC4gIFRoZW4gcnVuIHRoZSBjb21tYW5kIHdpdGggdGhlICctLXJlc29sdmVkJyBvcHRpb24uCiAKLVRoZSBjb21tYW5kIHJlZnVzZXMgdG8gcHJvY2VzcyBuZXcgbWFpbGJveGVzIHdoaWxlIGAuZ2l0L3JlYmFzZS1hcHBseWAKK1RoZSBjb21tYW5kIHJlZnVzZXMgdG8gcHJvY2VzcyBuZXcgbWFpbGJveGVzIHdoaWxlIHRoZSBgLmdpdC9yZWJhc2UtYXBwbHlgCiBkaXJlY3RvcnkgZXhpc3RzLCBzbyBpZiB5b3UgZGVjaWRlIHRvIHN0YXJ0IG92ZXIgZnJvbSBzY3JhdGNoLAogcnVuIGBybSAtZiAtciAuZ2l0L3JlYmFzZS1hcHBseWAgYmVmb3JlIHJ1bm5pbmcgdGhlIGNvbW1hbmQgd2l0aCBtYWlsYm94CiBuYW1lcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFubm90YXRlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFubm90YXRlLnR4dAppbmRleCAwYWJhMDIyLi4wNTkwZWVjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1hbm5vdGF0ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYW5ub3RhdGUudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtYW5ub3RhdGUgLSBBbm5vdGF0ZSBmaWxlIGxpbmVzIHdpdGggY29tbWl0IGluZm8KK2dpdC1hbm5vdGF0ZSAtIEFubm90YXRlIGZpbGUgbGluZXMgd2l0aCBjb21taXQgaW5mb3JtYXRpb24KIAogU1lOT1BTSVMKIC0tLS0tLS0tCkBAIC0xMiwxMSArMTIsMTEgQEAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQogQW5ub3RhdGVzIGVhY2ggbGluZSBpbiB0aGUgZ2l2ZW4gZmlsZSB3aXRoIGluZm9ybWF0aW9uIGZyb20gdGhlIGNvbW1pdAotd2hpY2ggaW50cm9kdWNlZCB0aGUgbGluZS4gT3B0aW9uYWxseSBhbm5vdGF0ZSBmcm9tIGEgZ2l2ZW4gcmV2aXNpb24uCit3aGljaCBpbnRyb2R1Y2VkIHRoZSBsaW5lLiBPcHRpb25hbGx5IGFubm90YXRlcyBmcm9tIGEgZ2l2ZW4gcmV2aXNpb24uCiAKIFRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGNvbW1hbmQgYW5kIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdIGlzIHRoYXQKIHRoZXkgdXNlIHNsaWdodGx5IGRpZmZlcmVudCBvdXRwdXQgZm9ybWF0cywgYW5kIHRoaXMgY29tbWFuZCBleGlzdHMgb25seQotZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgdG8gc3VwcG9ydCBleGlzdGluZyBzY3JpcHRzLCBhbmQgcHJvdmlkZSBtb3JlCitmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB0byBzdXBwb3J0IGV4aXN0aW5nIHNjcmlwdHMsIGFuZCBwcm92aWRlIGEgbW9yZQogZmFtaWxpYXIgY29tbWFuZCBuYW1lIGZvciBwZW9wbGUgY29taW5nIGZyb20gb3RoZXIgU0NNIHN5c3RlbXMuCiAKIE9QVElPTlMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dAppbmRleCAzMmYyYjg1Li43MzUzNzRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0CkBAIC0zLDE0ICszLDE0IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1hcHBseSAtIEFwcGx5IGEgcGF0Y2ggb24gYSBnaXQgaW5kZXggZmlsZSBhbmQgYSB3b3JraW5nIHRyZWUKK2dpdC1hcHBseSAtIEFwcGx5IGEgcGF0Y2ggb24gYSBnaXQgaW5kZXggZmlsZSBhbmQvb3IgYSB3b3JraW5nIHRyZWUKIAogCiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KICdnaXQgYXBwbHknIFstLXN0YXRdIFstLW51bXN0YXRdIFstLXN1bW1hcnldIFstLWNoZWNrXSBbLS1pbmRleF0KLQkgIFstLWFwcGx5XSBbLS1uby1hZGRdIFstLWJ1aWxkLWZha2UtYW5jZXN0b3IgPGZpbGU+XSBbLVIgfCAtLXJldmVyc2VdCisJICBbLS1hcHBseV0gWy0tbm8tYWRkXSBbLS1idWlsZC1mYWtlLWFuY2VzdG9yPTxmaWxlPl0gWy1SIHwgLS1yZXZlcnNlXQogCSAgWy0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IHwgLS1iaW5hcnldIFstLXJlamVjdF0gWy16XQogCSAgWy1wTlVNXSBbLUNOVU1dIFstLWluYWNjdXJhdGUtZW9mXSBbLS1yZWNvdW50XSBbLS1jYWNoZWRdCiAJICBbLS13aGl0ZXNwYWNlPTxub3dhcm58d2FybnxmaXh8ZXJyb3J8ZXJyb3ItYWxsPl0KQEAgLTI1LDcgKzI1LDcgQEAKIE9QVElPTlMKIC0tLS0tLS0KIDxwYXRjaD4uLi46OgotCVRoZSBmaWxlcyB0byByZWFkIHBhdGNoIGZyb20uICAnLScgY2FuIGJlIHVzZWQgdG8gcmVhZAorCVRoZSBmaWxlcyB0byByZWFkIHRoZSBwYXRjaCBmcm9tLiAgJy0nIGNhbiBiZSB1c2VkIHRvIHJlYWQKIAlmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KIAogLS1zdGF0OjoKQEAgLTMzLDggKzMzLDggQEAKIAlpbnB1dC4gIFR1cm5zIG9mZiAiYXBwbHkiLgogCiAtLW51bXN0YXQ6OgotCVNpbWlsYXIgdG8gXC0tc3RhdCwgYnV0IHNob3dzIG51bWJlciBvZiBhZGRlZCBhbmQKLQlkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24gYW5kIHBhdGhuYW1lIHdpdGhvdXQKKwlTaW1pbGFyIHRvIFwtLXN0YXQsIGJ1dCBzaG93cyB0aGUgbnVtYmVyIG9mIGFkZGVkIGFuZAorCWRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiBhbmQgdGhlIHBhdGhuYW1lIHdpdGhvdXQKIAlhYmJyZXZpYXRpb24sIHRvIG1ha2UgaXQgbW9yZSBtYWNoaW5lIGZyaWVuZGx5LiAgRm9yCiAJYmluYXJ5IGZpbGVzLCBvdXRwdXRzIHR3byBgLWAgaW5zdGVhZCBvZiBzYXlpbmcKIAlgMCAwYC4gIFR1cm5zIG9mZiAiYXBwbHkiLgpAQCAtNjAsMTUgKzYwLDE1IEBACiAJY2F1c2VzIHRoZSBpbmRleCBmaWxlIHRvIGJlIHVwZGF0ZWQuCiAKIC0tY2FjaGVkOjoKLQlBcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZS4gSW5zdGVhZCwgdGFrZSB0aGUKLQljYWNoZWQgZGF0YSwgYXBwbHkgdGhlIHBhdGNoLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgaW5kZXgsCisJQXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUuIEluc3RlYWQgdGFrZSB0aGUKKwljYWNoZWQgZGF0YSwgYXBwbHkgdGhlIHBhdGNoLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgaW5kZXgKIAl3aXRob3V0IHVzaW5nIHRoZSB3b3JraW5nIHRyZWUuIFRoaXMgaW1wbGllcyAnLS1pbmRleCcuCiAKLS0tYnVpbGQtZmFrZS1hbmNlc3RvciA8ZmlsZT46OgorLS1idWlsZC1mYWtlLWFuY2VzdG9yPTxmaWxlPjo6CiAJTmV3ZXIgJ2dpdC1kaWZmJyBvdXRwdXQgaGFzIGVtYmVkZGVkICdpbmRleCBpbmZvcm1hdGlvbicKIAlmb3IgZWFjaCBibG9iIHRvIGhlbHAgaWRlbnRpZnkgdGhlIG9yaWdpbmFsIHZlcnNpb24gdGhhdAogCXRoZSBwYXRjaCBhcHBsaWVzIHRvLiAgV2hlbiB0aGlzIGZsYWcgaXMgZ2l2ZW4sIGFuZCBpZgotCXRoZSBvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGUgYmxvYnMgaXMgYXZhaWxhYmxlIGxvY2FsbHksCisJdGhlIG9yaWdpbmFsIHZlcnNpb25zIG9mIHRoZSBibG9icyBhcmUgYXZhaWxhYmxlIGxvY2FsbHksCiAJYnVpbGRzIGEgdGVtcG9yYXJ5IGluZGV4IGNvbnRhaW5pbmcgdGhvc2UgYmxvYnMuCiArCiBXaGVuIGEgcHVyZSBtb2RlIGNoYW5nZSBpcyBlbmNvdW50ZXJlZCAod2hpY2ggaGFzIG5vIGluZGV4IGluZm9ybWF0aW9uKSwKQEAgLTEwOSwxMyArMTA5LDEzIEBACiAJYXBwbHlpbmcgYSBkaWZmIGdlbmVyYXRlZCB3aXRoIC0tdW5pZmllZD0wLiBUbyBieXBhc3MgdGhlc2UKIAljaGVja3MgdXNlICctLXVuaWRpZmYtemVybycuCiArCi1Ob3RlLCBmb3IgdGhlIHJlYXNvbnMgc3RhdGVkIGFib3ZlIHVzYWdlIG9mIGNvbnRleHQtZnJlZSBwYXRjaGVzIGFyZQorTm90ZSwgZm9yIHRoZSByZWFzb25zIHN0YXRlZCBhYm92ZSB1c2FnZSBvZiBjb250ZXh0LWZyZWUgcGF0Y2hlcyBpcwogZGlzY291cmFnZWQuCiAKIC0tYXBwbHk6OgogCUlmIHlvdSB1c2UgYW55IG9mIHRoZSBvcHRpb25zIG1hcmtlZCAiVHVybnMgb2ZmCiAJJ2FwcGx5JyIgYWJvdmUsICdnaXQtYXBwbHknIHJlYWRzIGFuZCBvdXRwdXRzIHRoZQotCWluZm9ybWF0aW9uIHlvdSBhc2tlZCB3aXRob3V0IGFjdHVhbGx5IGFwcGx5aW5nIHRoZQorCXJlcXVlc3RlZCBpbmZvcm1hdGlvbiB3aXRob3V0IGFjdHVhbGx5IGFwcGx5aW5nIHRoZQogCXBhdGNoLiAgR2l2ZSB0aGlzIGZsYWcgYWZ0ZXIgdGhvc2UgZmxhZ3MgdG8gYWxzbyBhcHBseQogCXRoZSBwYXRjaC4KIApAQCAtMTI0LDcgKzEyNCw3IEBACiAJcGF0Y2guICBUaGlzIGNhbiBiZSB1c2VkIHRvIGV4dHJhY3QgdGhlIGNvbW1vbiBwYXJ0IGJldHdlZW4KIAl0d28gZmlsZXMgYnkgZmlyc3QgcnVubmluZyAnZGlmZicgb24gdGhlbSBhbmQgYXBwbHlpbmcKIAl0aGUgcmVzdWx0IHdpdGggdGhpcyBvcHRpb24sIHdoaWNoIHdvdWxkIGFwcGx5IHRoZQotCWRlbGV0aW9uIHBhcnQgYnV0IG5vdCBhZGRpdGlvbiBwYXJ0LgorCWRlbGV0aW9uIHBhcnQgYnV0IG5vdCB0aGUgYWRkaXRpb24gcGFydC4KIAogLS1hbGxvdy1iaW5hcnktcmVwbGFjZW1lbnQ6OgogLS1iaW5hcnk6OgpAQCAtMTYyLDcgKzE2Miw3IEBACiBXaGVuIGBnaXQtYXBwbHlgIGlzIHVzZWQgZm9yIHN0YXRpc3RpY3MgYW5kIG5vdCBhcHBseWluZyBhCiBwYXRjaCwgaXQgZGVmYXVsdHMgdG8gYG5vd2FybmAuCiArCi1Zb3UgY2FuIHVzZSBkaWZmZXJlbnQgYDxhY3Rpb24+YCB0byBjb250cm9sIHRoaXMKK1lvdSBjYW4gdXNlIGRpZmZlcmVudCBgPGFjdGlvbj5gIHZhbHVlcyB0byBjb250cm9sIHRoaXMKIGJlaGF2aW9yOgogKwogKiBgbm93YXJuYCB0dXJucyBvZmYgdGhlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2FybmluZy4KQEAgLTE3MCw3ICsxNzAsNyBAQAogICBwYXRjaCBhcy1pcyAoZGVmYXVsdCkuCiAqIGBmaXhgIG91dHB1dHMgd2FybmluZ3MgZm9yIGEgZmV3IHN1Y2ggZXJyb3JzLCBhbmQgYXBwbGllcyB0aGUKICAgcGF0Y2ggYWZ0ZXIgZml4aW5nIHRoZW0gKGBzdHJpcGAgaXMgYSBzeW5vbnltIC0tLSB0aGUgdG9vbAotICB1c2VkIHRvIGNvbnNpZGVyIG9ubHkgdHJhaWxpbmcgd2hpdGVzcGFjZXMgYXMgZXJyb3JzLCBhbmQgdGhlCisgIHVzZWQgdG8gY29uc2lkZXIgb25seSB0cmFpbGluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXMgZXJyb3JzLCBhbmQgdGhlCiAgIGZpeCBpbnZvbHZlZCAnc3RyaXBwaW5nJyB0aGVtLCBidXQgbW9kZXJuIGdpdHMgZG8gbW9yZSkuCiAqIGBlcnJvcmAgb3V0cHV0cyB3YXJuaW5ncyBmb3IgYSBmZXcgc3VjaCBlcnJvcnMsIGFuZCByZWZ1c2VzCiAgIHRvIGFwcGx5IHRoZSBwYXRjaC4KQEAgLTE5NSw3ICsxOTUsNyBAQAogCWFkanVzdGluZyB0aGUgaHVuayBoZWFkZXJzIGFwcHJvcHJpYXRlbHkpLgogCiAtLWRpcmVjdG9yeT08cm9vdD46OgotCVByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMuICBJZiBhICItcCIgYXJndW1lbnQgd2FzIHBhc3NlZCwgdG9vLAorCVByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMuICBJZiBhICItcCIgYXJndW1lbnQgd2FzIGFsc28gcGFzc2VkLAogCWl0IGlzIGFwcGxpZWQgYmVmb3JlIHByZXBlbmRpbmcgdGhlIG5ldyByb290LgogKwogRm9yIGV4YW1wbGUsIGEgcGF0Y2ggdGhhdCB0YWxrcyBhYm91dCB1cGRhdGluZyBgYS9naXQtZ3VpLnNoYCB0byBgYi9naXQtZ3VpLnNoYApAQCAtMjIxLDcgKzIyMSw3IEBACiBhcmUgbm90IHVwZGF0ZWQuCiAKIElmIC0taW5kZXggaXMgbm90IHNwZWNpZmllZCwgdGhlbiB0aGUgc3VibW9kdWxlIGNvbW1pdHMgaW4gdGhlIHBhdGNoCi1hcmUgaWdub3JlZCBhbmQgb25seSB0aGUgYWJzZW5jZSBvZiBwcmVzZW5jZSBvZiB0aGUgY29ycmVzcG9uZGluZworYXJlIGlnbm9yZWQgYW5kIG9ubHkgdGhlIGFic2VuY2Ugb3IgcHJlc2VuY2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcKIHN1YmRpcmVjdG9yeSBpcyBjaGVja2VkIGFuZCAoaWYgcG9zc2libGUpIHVwZGF0ZWQuCiAKIEF1dGhvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGl2ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaXZlLnR4dAppbmRleCA0MWNiZjljLi5iYzEzMmM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaXZlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaXZlLnR4dApAQCAtMTAsNiArMTAsNyBAQAogLS0tLS0tLS0KIFt2ZXJzZV0KICdnaXQgYXJjaGl2ZScgLS1mb3JtYXQ9PGZtdD4gWy0tbGlzdF0gWy0tcHJlZml4PTxwcmVmaXg+L10gWzxleHRyYT5dCisJICAgICAgWy0tb3V0cHV0PTxmaWxlPl0gWy0td29ya3RyZWUtYXR0cmlidXRlc10KIAkgICAgICBbLS1yZW1vdGU9PHJlcG8+IFstLWV4ZWM9PGdpdC11cGxvYWQtYXJjaGl2ZT5dXSA8dHJlZS1pc2g+CiAJICAgICAgW3BhdGguLi5dCiAKQEAgLTIyLDcgKzIzLDcgQEAKIAogJ2dpdC1hcmNoaXZlJyBiZWhhdmVzIGRpZmZlcmVudGx5IHdoZW4gZ2l2ZW4gYSB0cmVlIElEIHZlcnN1cyB3aGVuCiBnaXZlbiBhIGNvbW1pdCBJRCBvciB0YWcgSUQuICBJbiB0aGUgZmlyc3QgY2FzZSB0aGUgY3VycmVudCB0aW1lIGlzCi11c2VkIGFzIG1vZGlmaWNhdGlvbiB0aW1lIG9mIGVhY2ggZmlsZSBpbiB0aGUgYXJjaGl2ZS4gIEluIHRoZSBsYXR0ZXIKK3VzZWQgYXMgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIG9mIGVhY2ggZmlsZSBpbiB0aGUgYXJjaGl2ZS4gIEluIHRoZSBsYXR0ZXIKIGNhc2UgdGhlIGNvbW1pdCB0aW1lIGFzIHJlY29yZGVkIGluIHRoZSByZWZlcmVuY2VkIGNvbW1pdCBvYmplY3QgaXMKIHVzZWQgaW5zdGVhZC4gIEFkZGl0aW9uYWxseSB0aGUgY29tbWl0IElEIGlzIHN0b3JlZCBpbiBhIGdsb2JhbAogZXh0ZW5kZWQgcGF4IGhlYWRlciBpZiB0aGUgdGFyIGZvcm1hdCBpcyB1c2VkOyBpdCBjYW4gYmUgZXh0cmFjdGVkCkBAIC00NywxMiArNDgsMTggQEAKIC0tcHJlZml4PTxwcmVmaXg+Lzo6CiAJUHJlcGVuZCA8cHJlZml4Pi8gdG8gZWFjaCBmaWxlbmFtZSBpbiB0aGUgYXJjaGl2ZS4KIAorLS1vdXRwdXQ9PGZpbGU+OjoKKwlXcml0ZSB0aGUgYXJjaGl2ZSB0byA8ZmlsZT4gaW5zdGVhZCBvZiBzdGRvdXQuCisKKy0td29ya3RyZWUtYXR0cmlidXRlczo6CisJTG9vayBmb3IgYXR0cmlidXRlcyBpbiAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSB0b28uCisKIDxleHRyYT46OgotCVRoaXMgY2FuIGJlIGFueSBvcHRpb25zIHRoYXQgdGhlIGFyY2hpdmVyIGJhY2tlbmQgdW5kZXJzdGFuZC4KKwlUaGlzIGNhbiBiZSBhbnkgb3B0aW9ucyB0aGF0IHRoZSBhcmNoaXZlciBiYWNrZW5kIHVuZGVyc3RhbmRzLgogCVNlZSBuZXh0IHNlY3Rpb24uCiAKIC0tcmVtb3RlPTxyZXBvPjo6Ci0JSW5zdGVhZCBvZiBtYWtpbmcgYSB0YXIgYXJjaGl2ZSBmcm9tIGxvY2FsIHJlcG9zaXRvcnksCisJSW5zdGVhZCBvZiBtYWtpbmcgYSB0YXIgYXJjaGl2ZSBmcm9tIHRoZSBsb2NhbCByZXBvc2l0b3J5LAogCXJldHJpZXZlIGEgdGFyIGFyY2hpdmUgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5LgogCiAtLWV4ZWM9PGdpdC11cGxvYWQtYXJjaGl2ZT46OgpAQCAtODgsMTIgKzk1LDI0IEBACiAJYXJjaGl2aW5nIHVzZXIncyB1bWFzayB3aWxsIGJlIHVzZWQgaW5zdGVhZC4gIFNlZSB1bWFzaygyKSBmb3IKIAlkZXRhaWxzLgogCitBVFRSSUJVVEVTCistLS0tLS0tLS0tCisKK2V4cG9ydC1pZ25vcmU6OgorCUZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIHRoZSBhdHRyaWJ1dGUgZXhwb3J0LWlnbm9yZSB3b24ndCBiZQorCWFkZGVkIHRvIGFyY2hpdmUgZmlsZXMuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCitleHBvcnQtc3Vic3Q6OgorCUlmIHRoZSBhdHRyaWJ1dGUgZXhwb3J0LXN1YnN0IGlzIHNldCBmb3IgYSBmaWxlIHRoZW4gZ2l0IHdpbGwKKwlleHBhbmQgc2V2ZXJhbCBwbGFjZWhvbGRlcnMgd2hlbiBhZGRpbmcgdGhpcyBmaWxlIHRvIGFuIGFyY2hpdmUuCisJU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKwogRVhBTVBMRVMKIC0tLS0tLS0tCiBnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1wcmVmaXg9anVuay8gSEVBRCB8IChjZCAvdmFyL3RtcC8gJiYgdGFyIHhmIC0pOjoKIAogCUNyZWF0ZSBhIHRhciBhcmNoaXZlIHRoYXQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIHRoZQotCWxhdGVzdCBjb21taXQgb24gdGhlIGN1cnJlbnQgYnJhbmNoLCBhbmQgZXh0cmFjdHMgaXQgaW4KKwlsYXRlc3QgY29tbWl0IG9uIHRoZSBjdXJyZW50IGJyYW5jaCwgYW5kIGV4dHJhY3QgaXQgaW4gdGhlCiAJYC92YXIvdG1wL2p1bmtgIGRpcmVjdG9yeS4KIAogZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIC0tcHJlZml4PWdpdC0xLjQuMC8gdjEuNC4wIHwgZ3ppcCA+Z2l0LTEuNC4wLnRhci5nejo6CkBAIC0xMTAsNiArMTI5LDExIEBACiAJUHV0IGV2ZXJ5dGhpbmcgaW4gdGhlIGN1cnJlbnQgaGVhZCdzIERvY3VtZW50YXRpb24vIGRpcmVjdG9yeQogCWludG8gJ2dpdC0xLjQuMC1kb2NzLnppcCcsIHdpdGggdGhlIHByZWZpeCAnZ2l0LWRvY3MvJy4KIAorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XQorCiBBdXRob3IKIC0tLS0tLQogV3JpdHRlbiBieSBGcmFuY2sgQnVpLUh1dSBhbmQgUmVuZSBTY2hhcmZlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQKaW5kZXggMTQ3ZWEzOC4uNjNlN2E0MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtYmlzZWN0IC0gRmluZCB0aGUgY2hhbmdlIHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyBieSBiaW5hcnkgc2VhcmNoCitnaXQtYmlzZWN0IC0gRmluZCBieSBiaW5hcnkgc2VhcmNoIHRoZSBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnCiAKIAogU1lOT1BTSVMKQEAgLTM5LDcgKzM5LDggQEAKIEJhc2ljIGJpc2VjdCBjb21tYW5kczogc3RhcnQsIGJhZCwgZ29vZAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVRoZSB3YXkgeW91IHVzZSBpdCBpczoKK1VzaW5nIHRoZSBMaW51eCBrZXJuZWwgdHJlZSBhcyBhbiBleGFtcGxlLCBiYXNpYyB1c2Ugb2YgdGhlIGJpc2VjdAorY29tbWFuZCBpcyBhcyBmb2xsb3dzOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQgZ2l0IGJpc2VjdCBzdGFydApAQCAtNDgsNjEgKzQ5LDYzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRlc3RlZCB0aGF0IHdhcyBnb29kCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hlbiB5b3UgZ2l2ZSBhdCBsZWFzdCBvbmUgYmFkIGFuZCBvbmUgZ29vZCB2ZXJzaW9ucywgaXQgd2lsbCBiaXNlY3QKLXRoZSByZXZpc2lvbiB0cmVlIGFuZCBzYXkgc29tZXRoaW5nIGxpa2U6CitXaGVuIHlvdSBoYXZlIHNwZWNpZmllZCBhdCBsZWFzdCBvbmUgYmFkIGFuZCBvbmUgZ29vZCB2ZXJzaW9uLCB0aGUKK2NvbW1hbmQgYmlzZWN0cyB0aGUgcmV2aXNpb24gdHJlZSBhbmQgb3V0cHV0cyBzb21ldGhpbmcgc2ltaWxhciB0bwordGhlIGZvbGxvd2luZzoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBCaXNlY3Rpbmc6IDY3NSByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1hbmQgY2hlY2sgb3V0IHRoZSBzdGF0ZSBpbiB0aGUgbWlkZGxlLiBOb3csIGNvbXBpbGUgdGhhdCBrZXJuZWwsIGFuZAotYm9vdCBpdC4gTm93LCBsZXQncyBzYXkgdGhhdCB0aGlzIGJvb3RlZCBrZXJuZWwgd29ya3MgZmluZSwgdGhlbiBqdXN0Ci1kbworVGhlIHN0YXRlIGluIHRoZSBtaWRkbGUgb2YgdGhlIHNldCBvZiByZXZpc2lvbnMgaXMgdGhlbiBjaGVja2VkIG91dC4KK1lvdSB3b3VsZCBub3cgY29tcGlsZSB0aGF0IGtlcm5lbCBhbmQgYm9vdCBpdC4gSWYgdGhlIGJvb3RlZCBrZXJuZWwKK3dvcmtzIGNvcnJlY3RseSwgeW91IHdvdWxkIHRoZW4gaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQgZ2l0IGJpc2VjdCBnb29kCQkJIyB0aGlzIG9uZSBpcyBnb29kCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotd2hpY2ggd2lsbCBub3cgc2F5CitUaGUgb3V0cHV0IG9mIHRoaXMgY29tbWFuZCB3b3VsZCBiZSBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEJpc2VjdGluZzogMzM3IHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWFuZCB5b3UgY29udGludWUgYWxvbmcsIGNvbXBpbGluZyB0aGF0IG9uZSwgdGVzdGluZyBpdCwgYW5kIGRlcGVuZGluZwotb24gd2hldGhlciBpdCBpcyBnb29kIG9yIGJhZCwgeW91IHNheSAiZ2l0IGJpc2VjdCBnb29kIiBvciAiZ2l0IGJpc2VjdAotYmFkIiwgYW5kIGFzayBmb3IgdGhlIG5leHQgYmlzZWN0aW9uLgorWW91IGtlZXAgcmVwZWF0aW5nIHRoaXMgcHJvY2VzcywgY29tcGlsaW5nIHRoZSB0cmVlLCB0ZXN0aW5nIGl0LCBhbmQKK2RlcGVuZGluZyBvbiB3aGV0aGVyIGl0IGlzIGdvb2Qgb3IgYmFkIGlzc3VpbmcgdGhlIGNvbW1hbmQgImdpdCBiaXNlY3QgZ29vZCIKK29yICJnaXQgYmlzZWN0IGJhZCIgdG8gYXNrIGZvciB0aGUgbmV4dCBiaXNlY3Rpb24uCiAKLVVudGlsIHlvdSBoYXZlIG5vIG1vcmUgbGVmdCwgYW5kIHlvdSdsbCBoYXZlIGJlZW4gbGVmdCB3aXRoIHRoZSBmaXJzdAotYmFkIGtlcm5lbCByZXYgaW4gInJlZnMvYmlzZWN0L2JhZCIuCitFdmVudHVhbGx5IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSByZXZpc2lvbnMgbGVmdCB0byBiaXNlY3QsIGFuZCB5b3UKK3dpbGwgaGF2ZSBiZWVuIGxlZnQgd2l0aCB0aGUgZmlyc3QgYmFkIGtlcm5lbCByZXZpc2lvbiBpbiAicmVmcy9iaXNlY3QvYmFkIi4KIAogQmlzZWN0IHJlc2V0CiB+fn5+fn5+fn5+fn4KIAotT2gsIGFuZCB0aGVuIGFmdGVyIHlvdSB3YW50IHRvIHJlc2V0IHRvIHRoZSBvcmlnaW5hbCBoZWFkLCBkbyBhCitUbyByZXR1cm4gdG8gdGhlIG9yaWdpbmFsIGhlYWQgYWZ0ZXIgYSBiaXNlY3Qgc2Vzc2lvbiwgaXNzdWUgdGhlCitmb2xsb3dpbmcgY29tbWFuZDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIGdpdCBiaXNlY3QgcmVzZXQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoLCBpbnN0ZWFkIG9mIGJlaW5nIG9uIHRoZSBiaXNlY3Rpb24KLWNvbW1pdCAoImdpdCBiaXNlY3Qgc3RhcnQiIHdpbGwgZG8gdGhhdCBmb3IgeW91IHRvbywgYWN0dWFsbHk6IGl0IHdpbGwKLXJlc2V0IHRoZSBiaXNlY3Rpb24gc3RhdGUpLgorVGhpcyByZXNldHMgdGhlIHRyZWUgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCBpbnN0ZWFkIG9mIGJlaW5nIG9uIHRoZQorYmlzZWN0aW9uIGNvbW1pdCAoImdpdCBiaXNlY3Qgc3RhcnQiIHdpbGwgYWxzbyBkbyB0aGF0LCBhcyBpdCByZXNldHMKK3RoZSBiaXNlY3Rpb24gc3RhdGUpLgogCiBCaXNlY3QgdmlzdWFsaXplCiB+fn5+fn5+fn5+fn5+fn5+CiAKLUR1cmluZyB0aGUgYmlzZWN0aW9uIHByb2Nlc3MsIHlvdSBjYW4gc2F5CitUbyBzZWUgdGhlIGN1cnJlbnRseSByZW1haW5pbmcgc3VzcGVjdHMgaW4gJ2dpdGsnLCBpc3N1ZSB0aGUgZm9sbG93aW5nCitjb21tYW5kIGR1cmluZyB0aGUgYmlzZWN0aW9uIHByb2Nlc3M6CiAKIC0tLS0tLS0tLS0tLQogJCBnaXQgYmlzZWN0IHZpc3VhbGl6ZQogLS0tLS0tLS0tLS0tCiAKLXRvIHNlZSB0aGUgY3VycmVudGx5IHJlbWFpbmluZyBzdXNwZWN0cyBpbiAnZ2l0aycuICBgdmlzdWFsaXplYCBpcyBhIGJpdAotdG9vIGxvbmcgdG8gdHlwZSBhbmQgYHZpZXdgIGlzIHByb3ZpZGVkIGFzIGEgc3lub255bS4KK2B2aWV3YCBtYXkgYWxzbyBiZSB1c2VkIGFzIGEgc3lub255bSBmb3IgYHZpc3VhbGl6ZWAuCiAKLUlmICdESVNQTEFZJyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LCAnZ2l0IGxvZycgaXMgdXNlZAotaW5zdGVhZC4gIFlvdSBjYW4gZXZlbiBnaXZlIGNvbW1hbmQgbGluZSBvcHRpb25zIHN1Y2ggYXMgYC1wYCBhbmQKK0lmIHRoZSAnRElTUExBWScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCwgJ2dpdCBsb2cnIGlzIHVzZWQKK2luc3RlYWQuICBZb3UgY2FuIGFsc28gZ2l2ZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBzdWNoIGFzIGAtcGAgYW5kCiBgLS1zdGF0YC4KIAogLS0tLS0tLS0tLS0tCkBAIC0xMTIsNTcgKzExNSw1NyBAQAogQmlzZWN0IGxvZyBhbmQgYmlzZWN0IHJlcGxheQogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCi1UaGUgZ29vZC9iYWQgaW5wdXQgaXMgbG9nZ2VkLCBhbmQKK0FmdGVyIGhhdmluZyBtYXJrZWQgcmV2aXNpb25zIGFzIGdvb2Qgb3IgYmFkLCBpc3N1ZSB0aGUgZm9sbG93aW5nCitjb21tYW5kIHRvIHNob3cgd2hhdCBoYXMgYmVlbiBkb25lIHNvIGZhcjoKIAogLS0tLS0tLS0tLS0tCiAkIGdpdCBiaXNlY3QgbG9nCiAtLS0tLS0tLS0tLS0KIAotc2hvd3Mgd2hhdCB5b3UgaGF2ZSBkb25lIHNvIGZhci4gWW91IGNhbiB0cnVuY2F0ZSBpdHMgb3V0cHV0IHNvbWV3aGVyZQotYW5kIHNhdmUgaXQgaW4gYSBmaWxlLCBhbmQgcnVuCitJZiB5b3UgZGlzY292ZXIgdGhhdCB5b3UgbWFkZSBhIG1pc3Rha2UgaW4gc3BlY2lmeWluZyB0aGUgc3RhdHVzIG9mIGEKK3JldmlzaW9uLCB5b3UgY2FuIHNhdmUgdGhlIG91dHB1dCBvZiB0aGlzIGNvbW1hbmQgdG8gYSBmaWxlLCBlZGl0IGl0IHRvCityZW1vdmUgdGhlIGluY29ycmVjdCBlbnRyaWVzLCBhbmQgdGhlbiBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvCityZXR1cm4gdG8gYSBjb3JyZWN0ZWQgc3RhdGU6CiAKIC0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHJlc2V0CiAkIGdpdCBiaXNlY3QgcmVwbGF5IHRoYXQtZmlsZQogLS0tLS0tLS0tLS0tCiAKLWlmIHlvdSBmaW5kIGxhdGVyIHlvdSBtYWRlIGEgbWlzdGFrZSB0ZWxsaW5nIGdvb2QvYmFkIGFib3V0IGEKLXJldmlzaW9uLgotCi1Bdm9pZGluZyB0byB0ZXN0IGEgY29tbWl0CitBdm9pZGluZyB0ZXN0aW5nIGEgY29tbWl0CiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLUlmIGluIGEgbWlkZGxlIG9mIGJpc2VjdCBzZXNzaW9uLCB5b3Uga25vdyB3aGF0IHRoZSBiaXNlY3Qgc3VnZ2VzdGVkCi10byB0cnkgbmV4dCBpcyBub3QgYSBnb29kIG9uZSB0byB0ZXN0IChlLmcuIHRoZSBjaGFuZ2UgdGhlIGNvbW1pdAorSWYsIGluIHRoZSBtaWRkbGUgb2YgYSBiaXNlY3Qgc2Vzc2lvbiwgeW91IGtub3cgdGhhdCB0aGUgbmV4dCBzdWdnZXN0ZWQKK3JldmlzaW9uIGlzIG5vdCBhIGdvb2Qgb25lIHRvIHRlc3QgKGUuZy4gdGhlIGNoYW5nZSB0aGUgY29tbWl0CiBpbnRyb2R1Y2VzIGlzIGtub3duIG5vdCB0byB3b3JrIGluIHlvdXIgZW52aXJvbm1lbnQgYW5kIHlvdSBrbm93IGl0CiBkb2VzIG5vdCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGJ1ZyB5b3UgYXJlIGNoYXNpbmcpLCB5b3UgbWF5Ci13YW50IHRvIGZpbmQgYSBuZWFyLWJ5IGNvbW1pdCBhbmQgdHJ5IHRoYXQgaW5zdGVhZC4KK3dhbnQgdG8gZmluZCBhIG5lYXJieSBjb21taXQgYW5kIHRyeSB0aGF0IGluc3RlYWQuCiAKLUl0IGdvZXMgc29tZXRoaW5nIGxpa2UgdGhpczoKK0ZvciBleGFtcGxlOgogCiAtLS0tLS0tLS0tLS0KLSQgZ2l0IGJpc2VjdCBnb29kL2JhZAkJCSMgcHJldmlvdXMgcm91bmQgd2FzIGdvb2QvYmFkLgorJCBnaXQgYmlzZWN0IGdvb2QvYmFkCQkJIyBwcmV2aW91cyByb3VuZCB3YXMgZ29vZCBvciBiYWQuCiBCaXNlY3Rpbmc6IDMzNyByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMKICQgZ2l0IGJpc2VjdCB2aXN1YWxpemUJCQkjIG9vcHMsIHRoYXQgaXMgdW5pbnRlcmVzdGluZy4KLSQgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjMJCSMgdHJ5IDMgcmV2cyBiZWZvcmUgd2hhdAorJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MwkJIyB0cnkgMyByZXZpc2lvbnMgYmVmb3JlIHdoYXQKIAkJCQkJIyB3YXMgc3VnZ2VzdGVkCiAtLS0tLS0tLS0tLS0KIAotVGhlbiBjb21waWxlIGFuZCB0ZXN0IHRoZSBvbmUgeW91IGNob3NlIHRvIHRyeS4gQWZ0ZXIgdGhhdCwgdGVsbAotYmlzZWN0IHdoYXQgdGhlIHJlc3VsdCB3YXMgYXMgdXN1YWwuCitUaGVuIGNvbXBpbGUgYW5kIHRlc3QgdGhlIGNob3NlbiByZXZpc2lvbiwgYW5kIGFmdGVyd2FyZHMgbWFyawordGhlIHJldmlzaW9uIGFzIGdvb2Qgb3IgYmFkIGluIHRoZSB1c3VhbCBtYW5uZXIuCiAKIEJpc2VjdCBza2lwCiB+fn5+fn5+fn5+fn4KIAotSW5zdGVhZCBvZiBjaG9vc2luZyBieSB5b3Vyc2VsZiBhIG5lYXJieSBjb21taXQsIHlvdSBtYXkganVzdCB3YW50IGdpdAotdG8gZG8gaXQgZm9yIHlvdSB1c2luZzoKK0luc3RlYWQgb2YgY2hvb3NpbmcgYnkgeW91cnNlbGYgYSBuZWFyYnkgY29tbWl0LCB5b3UgY2FuIGFzayBnaXQKK3RvIGRvIGl0IGZvciB5b3UgYnkgaXNzdWluZyB0aGUgY29tbWFuZDoKIAogLS0tLS0tLS0tLS0tCiAkIGdpdCBiaXNlY3Qgc2tpcCAgICAgICAgICAgICAgICAgIyBDdXJyZW50IHZlcnNpb24gY2Fubm90IGJlIHRlc3RlZAogLS0tLS0tLS0tLS0tCiAKLUJ1dCBjb21wdXRpbmcgdGhlIGNvbW1pdCB0byB0ZXN0IG1heSBiZSBzbG93ZXIgYWZ0ZXJ3YXJkcyBhbmQgZ2l0IG1heQotZXZlbnR1YWxseSBub3QgYmUgYWJsZSB0byB0ZWxsIHRoZSBmaXJzdCBiYWQgYW1vbmcgYSBiYWQgYW5kIG9uZSBvcgotbW9yZSAic2tpcCJwZWQgY29tbWl0cy4KK0J1dCBnaXQgbWF5IGV2ZW50dWFsbHkgYmUgdW5hYmxlIHRvIHRlbGwgdGhlIGZpcnN0IGJhZCBjb21taXQgYW1vbmcKK2EgYmFkIGNvbW1pdCBhbmQgb25lIG9yIG1vcmUgc2tpcHBlZCBjb21taXRzLgogCiBZb3UgY2FuIGV2ZW4gc2tpcCBhIHJhbmdlIG9mIGNvbW1pdHMsIGluc3RlYWQgb2YganVzdCBvbmUgY29tbWl0LAogdXNpbmcgdGhlICInPGNvbW1pdDE+Jy4uJzxjb21taXQyPiciIG5vdGF0aW9uLiBGb3IgZXhhbXBsZToKQEAgLTE3MSwzMyArMTc0LDM0IEBACiAkIGdpdCBiaXNlY3Qgc2tpcCB2Mi41Li52Mi42CiAtLS0tLS0tLS0tLS0KIAotd291bGQgbWVhbiB0aGF0IG5vIGNvbW1pdCBiZXR3ZWVuIGB2Mi41YCBleGNsdWRlZCBhbmQgYHYyLjZgIGluY2x1ZGVkCi1jYW4gYmUgdGVzdGVkLgorVGhpcyB0ZWxscyB0aGUgYmlzZWN0IHByb2Nlc3MgdGhhdCBubyBjb21taXQgYWZ0ZXIgYHYyLjVgLCB1cCB0byBhbmQKK2luY2x1ZGluZyBgdjIuNmAsIHNob3VsZCBiZSB0ZXN0ZWQuCiAKLU5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byBhbHNvIHNraXAgdGhlIGZpcnN0IGNvbW1pdCBvZiBhIHJhbmdlIHlvdSBjYW4KLXVzZSBzb21ldGhpbmcgbGlrZToKK05vdGUgdGhhdCBpZiB5b3UgYWxzbyB3YW50IHRvIHNraXAgdGhlIGZpcnN0IGNvbW1pdCBvZiB0aGUgcmFuZ2UgeW91Cit3b3VsZCBpc3N1ZSB0aGUgY29tbWFuZDoKIAogLS0tLS0tLS0tLS0tCiAkIGdpdCBiaXNlY3Qgc2tpcCB2Mi41IHYyLjUuLnYyLjYKIC0tLS0tLS0tLS0tLQogCi1hbmQgdGhlIGNvbW1pdCBwb2ludGVkIHRvIGJ5IGB2Mi41YCB3aWxsIGJlIHNraXBwZWQgdG9vLgorVGhpcyB0ZWxscyB0aGUgYmlzZWN0IHByb2Nlc3MgdGhhdCB0aGUgY29tbWl0cyBiZXR3ZWVuIGB2Mi41YCBpbmNsdWRlZAorYW5kIGB2Mi42YCBpbmNsdWRlZCBzaG91bGQgYmUgc2tpcHBlZC4KKwogCiBDdXR0aW5nIGRvd24gYmlzZWN0aW9uIGJ5IGdpdmluZyBtb3JlIHBhcmFtZXRlcnMgdG8gYmlzZWN0IHN0YXJ0CiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVlvdSBjYW4gZnVydGhlciBjdXQgZG93biB0aGUgbnVtYmVyIG9mIHRyaWFscyBpZiB5b3Uga25vdyB3aGF0IHBhcnQgb2YKLXRoZSB0cmVlIGlzIGludm9sdmVkIGluIHRoZSBwcm9ibGVtIHlvdSBhcmUgdHJhY2tpbmcgZG93biwgYnkgZ2l2aW5nCi1wYXRocyBwYXJhbWV0ZXJzIHdoZW4geW91IHNheSBgYmlzZWN0IHN0YXJ0YCwgbGlrZSB0aGlzOgorWW91IGNhbiBmdXJ0aGVyIGN1dCBkb3duIHRoZSBudW1iZXIgb2YgdHJpYWxzLCBpZiB5b3Uga25vdyB3aGF0IHBhcnQgb2YKK3RoZSB0cmVlIGlzIGludm9sdmVkIGluIHRoZSBwcm9ibGVtIHlvdSBhcmUgdHJhY2tpbmcgZG93biwgYnkgc3BlY2lmeWluZworcGF0aCBwYXJhbWV0ZXJzIHdoZW4gaXNzdWluZyB0aGUgYGJpc2VjdCBzdGFydGAgY29tbWFuZDoKIAogLS0tLS0tLS0tLS0tCiAkIGdpdCBiaXNlY3Qgc3RhcnQgLS0gYXJjaC9pMzg2IGluY2x1ZGUvYXNtLWkzODYKIC0tLS0tLS0tLS0tLQogCi1JZiB5b3Uga25vdyBiZWZvcmVoYW5kIG1vcmUgdGhhbiBvbmUgZ29vZCBjb21taXRzLCB5b3UgY2FuIG5hcnJvdyB0aGUKLWJpc2VjdCBzcGFjZSBkb3duIHdpdGhvdXQgZG9pbmcgdGhlIHdob2xlIHRyZWUgY2hlY2tvdXQgZXZlcnkgdGltZSB5b3UKLWdpdmUgZ29vZCBjb21taXRzLiBZb3UgZ2l2ZSB0aGUgYmFkIHJldmlzaW9uIGltbWVkaWF0ZWx5IGFmdGVyIGBzdGFydGAKLWFuZCB0aGVuIHlvdSBnaXZlIGFsbCB0aGUgZ29vZCByZXZpc2lvbnMgeW91IGhhdmU6CitJZiB5b3Uga25vdyBiZWZvcmVoYW5kIG1vcmUgdGhhbiBvbmUgZ29vZCBjb21taXQsIHlvdSBjYW4gbmFycm93IHRoZQorYmlzZWN0IHNwYWNlIGRvd24gYnkgc3BlY2lmeWluZyBhbGwgb2YgdGhlIGdvb2QgY29tbWl0cyBpbW1lZGlhdGVseSBhZnRlcgordGhlIGJhZCBjb21taXQgd2hlbiBpc3N1aW5nIHRoZSBgYmlzZWN0IHN0YXJ0YCBjb21tYW5kOgogCiAtLS0tLS0tLS0tLS0KICQgZ2l0IGJpc2VjdCBzdGFydCB2Mi42LjIwLXJjNiB2Mi42LjIwLXJjNCB2Mi42LjIwLXJjMSAtLQpAQCAtMjA5LDM4ICsyMTMsMzggQEAKIH5+fn5+fn5+fn4KIAogSWYgeW91IGhhdmUgYSBzY3JpcHQgdGhhdCBjYW4gdGVsbCBpZiB0aGUgY3VycmVudCBzb3VyY2UgY29kZSBpcyBnb29kCi1vciBiYWQsIHlvdSBjYW4gYXV0b21hdGljYWxseSBiaXNlY3QgdXNpbmc6CitvciBiYWQsIHlvdSBjYW4gYmlzZWN0IGJ5IGlzc3VpbmcgdGhlIGNvbW1hbmQ6CiAKIC0tLS0tLS0tLS0tLQotJCBnaXQgYmlzZWN0IHJ1biBteV9zY3JpcHQKKyQgZ2l0IGJpc2VjdCBydW4gbXlfc2NyaXB0IGFyZ3VtZW50cwogLS0tLS0tLS0tLS0tCiAKLU5vdGUgdGhhdCB0aGUgInJ1biIgc2NyaXB0IChgbXlfc2NyaXB0YCBpbiB0aGUgYWJvdmUgZXhhbXBsZSkgc2hvdWxkCi1leGl0IHdpdGggY29kZSAwIGluIGNhc2UgdGhlIGN1cnJlbnQgc291cmNlIGNvZGUgaXMgZ29vZC4gIEV4aXQgd2l0aCBhCitOb3RlIHRoYXQgdGhlIHNjcmlwdCAoYG15X3NjcmlwdGAgaW4gdGhlIGFib3ZlIGV4YW1wbGUpIHNob3VsZAorZXhpdCB3aXRoIGNvZGUgMCBpZiB0aGUgY3VycmVudCBzb3VyY2UgY29kZSBpcyBnb29kLCBhbmQgZXhpdCB3aXRoIGEKIGNvZGUgYmV0d2VlbiAxIGFuZCAxMjcgKGluY2x1c2l2ZSksIGV4Y2VwdCAxMjUsIGlmIHRoZSBjdXJyZW50CiBzb3VyY2UgY29kZSBpcyBiYWQuCiAKLUFueSBvdGhlciBleGl0IGNvZGUgd2lsbCBhYm9ydCB0aGUgYXV0b21hdGljIGJpc2VjdCBwcm9jZXNzLiAoQQotcHJvZ3JhbSB0aGF0IGRvZXMgImV4aXQoLTEpIiBsZWF2ZXMgJD8gPSAyNTUsIHNlZSBleGl0KDMpIG1hbnVhbCBwYWdlLAotdGhlIHZhbHVlIGlzIGNob3BwZWQgd2l0aCAiJiAwMzc3Ii4pCitBbnkgb3RoZXIgZXhpdCBjb2RlIHdpbGwgYWJvcnQgdGhlIGJpc2VjdCBwcm9jZXNzLiBJdCBzaG91bGQgYmUgbm90ZWQKK3RoYXQgYSBwcm9ncmFtIHRoYXQgdGVybWluYXRlcyB2aWEgImV4aXQoLTEpIiBsZWF2ZXMgJD8gPSAyNTUsIChzZWUgdGhlCitleGl0KDMpIG1hbnVhbCBwYWdlKSwgYXMgdGhlIHZhbHVlIGlzIGNob3BwZWQgd2l0aCAiJiAwMzc3Ii4KIAogVGhlIHNwZWNpYWwgZXhpdCBjb2RlIDEyNSBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBjdXJyZW50IHNvdXJjZSBjb2RlCi1jYW5ub3QgYmUgdGVzdGVkLiBJZiB0aGUgInJ1biIgc2NyaXB0IGV4aXRzIHdpdGggdGhpcyBjb2RlLCB0aGUgY3VycmVudAotcmV2aXNpb24gd2lsbCBiZSBza2lwcGVkLCBzZWUgYGdpdCBiaXNlY3Qgc2tpcGAgYWJvdmUuCitjYW5ub3QgYmUgdGVzdGVkLiBJZiB0aGUgc2NyaXB0IGV4aXRzIHdpdGggdGhpcyBjb2RlLCB0aGUgY3VycmVudAorcmV2aXNpb24gd2lsbCBiZSBza2lwcGVkIChzZWUgYGdpdCBiaXNlY3Qgc2tpcGAgYWJvdmUpLgogCi1Zb3UgbWF5IG9mdGVuIGZpbmQgdGhhdCBkdXJpbmcgYmlzZWN0IHlvdSB3YW50IHRvIGhhdmUgbmVhci1jb25zdGFudAotdHdlYWtzIChlLmcuLCBzLyNkZWZpbmUgREVCVUcgMC8jZGVmaW5lIERFQlVHIDEvIGluIGEgaGVhZGVyIGZpbGUsIG9yCi0icmV2aXNpb24gdGhhdCBkb2VzIG5vdCBoYXZlIHRoaXMgY29tbWl0IG5lZWRzIHRoaXMgcGF0Y2ggYXBwbGllZCB0bwotd29yayBhcm91bmQgb3RoZXIgcHJvYmxlbSB0aGlzIGJpc2VjdGlvbiBpcyBub3QgaW50ZXJlc3RlZCBpbiIpCi1hcHBsaWVkIHRvIHRoZSByZXZpc2lvbiBiZWluZyB0ZXN0ZWQuCitZb3UgbWF5IG9mdGVuIGZpbmQgdGhhdCBkdXJpbmcgYSBiaXNlY3Qgc2Vzc2lvbiB5b3Ugd2FudCB0byBoYXZlCit0ZW1wb3JhcnkgbW9kaWZpY2F0aW9ucyAoZS5nLiBzLyNkZWZpbmUgREVCVUcgMC8jZGVmaW5lIERFQlVHIDEvIGluIGEKK2hlYWRlciBmaWxlLCBvciAicmV2aXNpb24gdGhhdCBkb2VzIG5vdCBoYXZlIHRoaXMgY29tbWl0IG5lZWRzIHRoaXMKK3BhdGNoIGFwcGxpZWQgdG8gd29yayBhcm91bmQgYW5vdGhlciBwcm9ibGVtIHRoaXMgYmlzZWN0aW9uIGlzIG5vdAoraW50ZXJlc3RlZCBpbiIpIGFwcGxpZWQgdG8gdGhlIHJldmlzaW9uIGJlaW5nIHRlc3RlZC4KIAogVG8gY29wZSB3aXRoIHN1Y2ggYSBzaXR1YXRpb24sIGFmdGVyIHRoZSBpbm5lciAnZ2l0IGJpc2VjdCcgZmluZHMgdGhlCi1uZXh0IHJldmlzaW9uIHRvIHRlc3QsIHdpdGggdGhlICJydW4iIHNjcmlwdCwgeW91IGNhbiBhcHBseSB0aGF0IHR3ZWFrCi1iZWZvcmUgY29tcGlsaW5nLCBydW4gdGhlIHJlYWwgdGVzdCwgYW5kIGFmdGVyIHRoZSB0ZXN0IGRlY2lkZXMgaWYgdGhlCi1yZXZpc2lvbiAocG9zc2libHkgd2l0aCB0aGUgbmVlZGVkIHR3ZWFrcykgcGFzc2VkIHRoZSB0ZXN0LCByZXdpbmQgdGhlCi10cmVlIHRvIHRoZSBwcmlzdGluZSBzdGF0ZS4gIEZpbmFsbHkgdGhlICJydW4iIHNjcmlwdCBjYW4gZXhpdCB3aXRoCi10aGUgc3RhdHVzIG9mIHRoZSByZWFsIHRlc3QgdG8gbGV0IHRoZSAiZ2l0IGJpc2VjdCBydW4iIGNvbW1hbmQgbG9vcCB0bwotZGV0ZXJtaW5lIHRoZSBvdXRjb21lLgorbmV4dCByZXZpc2lvbiB0byB0ZXN0LCB0aGUgc2NyaXB0IGNhbiBhcHBseSB0aGUgcGF0Y2gKK2JlZm9yZSBjb21waWxpbmcsIHJ1biB0aGUgcmVhbCB0ZXN0LCBhbmQgYWZ0ZXJ3YXJkcyBkZWNpZGUgaWYgdGhlCityZXZpc2lvbiAocG9zc2libHkgd2l0aCB0aGUgbmVlZGVkIHBhdGNoKSBwYXNzZWQgdGhlIHRlc3QgYW5kIHRoZW4KK3Jld2luZCB0aGUgdHJlZSB0byB0aGUgcHJpc3RpbmUgc3RhdGUuICBGaW5hbGx5IHRoZSBzY3JpcHQgc2hvdWxkIGV4aXQKK3dpdGggdGhlIHN0YXR1cyBvZiB0aGUgcmVhbCB0ZXN0IHRvIGxldCB0aGUgImdpdCBiaXNlY3QgcnVuIiBjb21tYW5kIGxvb3AKK2RldGVybWluZSB0aGUgZXZlbnR1YWwgb3V0Y29tZSBvZiB0aGUgYmlzZWN0IHNlc3Npb24uCiAKIEVYQU1QTEVTCiAtLS0tLS0tLQpAQCAtMjUyLDQ0ICsyNTYsNjAgQEAKICQgZ2l0IGJpc2VjdCBydW4gbWFrZSAgICAgICAgICAgICAgICAjICJtYWtlIiBidWlsZHMgdGhlIGFwcAogLS0tLS0tLS0tLS0tCiAKKyogQXV0b21hdGljYWxseSBiaXNlY3QgYSB0ZXN0IGZhaWx1cmUgYmV0d2VlbiBvcmlnaW4gYW5kIEhFQUQ6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBIRUFEIG9yaWdpbiAtLSAgICAjIEhFQUQgaXMgYmFkLCBvcmlnaW4gaXMgZ29vZAorJCBnaXQgYmlzZWN0IHJ1biBtYWtlIHRlc3QgICAgICAgICAgICMgIm1ha2UgdGVzdCIgYnVpbGRzIGFuZCB0ZXN0cworLS0tLS0tLS0tLS0tCisKICogQXV0b21hdGljYWxseSBiaXNlY3QgYSBicm9rZW4gdGVzdCBzdWl0ZToKICsKIC0tLS0tLS0tLS0tLQogJCBjYXQgfi90ZXN0LnNoCiAjIS9iaW4vc2gKLW1ha2UgfHwgZXhpdCAxMjUgICAgICAgICAgICAgICAgICAgIyB0aGlzICJza2lwInMgYnJva2VuIGJ1aWxkcworbWFrZSB8fCBleGl0IDEyNSAgICAgICAgICAgICAgICAgICAjIHRoaXMgc2tpcHMgYnJva2VuIGJ1aWxkcwogbWFrZSB0ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAjICJtYWtlIHRlc3QiIHJ1bnMgdGhlIHRlc3Qgc3VpdGUKICQgZ2l0IGJpc2VjdCBzdGFydCB2MS4zIHYxLjEgLS0gICAgIyB2MS4zIGlzIGJhZCwgdjEuMSBpcyBnb29kCiAkIGdpdCBiaXNlY3QgcnVuIH4vdGVzdC5zaAogLS0tLS0tLS0tLS0tCiArCiBIZXJlIHdlIHVzZSBhICJ0ZXN0LnNoIiBjdXN0b20gc2NyaXB0LiBJbiB0aGlzIHNjcmlwdCwgaWYgIm1ha2UiCi1mYWlscywgd2UgInNraXAiIHRoZSBjdXJyZW50IGNvbW1pdC4KK2ZhaWxzLCB3ZSBza2lwIHRoZSBjdXJyZW50IGNvbW1pdC4KICsKLUl0J3Mgc2FmZXIgdG8gdXNlIGEgY3VzdG9tIHNjcmlwdCBvdXRzaWRlIHRoZSByZXBvIHRvIHByZXZlbnQKK0l0IGlzIHNhZmVyIHRvIHVzZSBhIGN1c3RvbSBzY3JpcHQgb3V0c2lkZSB0aGUgcmVwb3NpdG9yeSB0byBwcmV2ZW50CiBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgYmlzZWN0LCBtYWtlIGFuZCB0ZXN0IHByb2Nlc3NlcyBhbmQgdGhlCiBzY3JpcHQuCiArCi1BbmQgIm1ha2UgdGVzdCIgc2hvdWxkICJleGl0IDAiLCBpZiB0aGUgdGVzdCBzdWl0ZSBwYXNzZXMsIGFuZAotImV4aXQgMSIgKGZvciBleGFtcGxlKSBvdGhlcndpc2UuCisibWFrZSB0ZXN0IiBzaG91bGQgImV4aXQgMCIsIGlmIHRoZSB0ZXN0IHN1aXRlIHBhc3NlcywgYW5kCisiZXhpdCAxIiBvdGhlcndpc2UuCiAKICogQXV0b21hdGljYWxseSBiaXNlY3QgYSBicm9rZW4gdGVzdCBjYXNlOgogKwogLS0tLS0tLS0tLS0tCiAkIGNhdCB+L3Rlc3Quc2gKICMhL2Jpbi9zaAotbWFrZSB8fCBleGl0IDEyNSAgICAgICAgICAgICAgICAgICAgICMgdGhpcyAic2tpcCJzIGJyb2tlbiBidWlsZHMKK21ha2UgfHwgZXhpdCAxMjUgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgc2tpcHMgYnJva2VuIGJ1aWxkcwogfi9jaGVja190ZXN0X2Nhc2Uuc2ggICAgICAgICAgICAgICAgICMgZG9lcyB0aGUgdGVzdCBjYXNlIHBhc3NlcyA/CiAkIGdpdCBiaXNlY3Qgc3RhcnQgSEVBRCBIRUFEfjEwIC0tICAgIyBjdWxwcml0IGlzIGFtb25nIHRoZSBsYXN0IDEwCiAkIGdpdCBiaXNlY3QgcnVuIH4vdGVzdC5zaAogLS0tLS0tLS0tLS0tCiArCi1IZXJlICJjaGVja190ZXN0X2Nhc2Uuc2giIHNob3VsZCAiZXhpdCAwIiwgaWYgdGhlIHRlc3QgY2FzZSBwYXNzZXMsCi1hbmQgImV4aXQgMSIgKGZvciBleGFtcGxlKSBvdGhlcndpc2UuCitIZXJlICJjaGVja190ZXN0X2Nhc2Uuc2giIHNob3VsZCAiZXhpdCAwIiBpZiB0aGUgdGVzdCBjYXNlIHBhc3NlcywKK2FuZCAiZXhpdCAxIiBvdGhlcndpc2UuCiArCi1JdCdzIHNhZmVyIGlmIGJvdGggInRlc3Quc2giIGFuZCAiY2hlY2tfdGVzdF9jYXNlLnNoIiBzY3JpcHRzIGFyZQotb3V0c2lkZSB0aGUgcmVwbyB0byBwcmV2ZW50IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBiaXNlY3QsIG1ha2UgYW5kCi10ZXN0IHByb2Nlc3NlcyBhbmQgdGhlIHNjcmlwdHMuCitJdCBpcyBzYWZlciBpZiBib3RoICJ0ZXN0LnNoIiBhbmQgImNoZWNrX3Rlc3RfY2FzZS5zaCIgc2NyaXB0cyBhcmUKK291dHNpZGUgdGhlIHJlcG9zaXRvcnkgdG8gcHJldmVudCBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgYmlzZWN0LAorbWFrZSBhbmQgdGVzdCBwcm9jZXNzZXMgYW5kIHRoZSBzY3JpcHRzLgorCisqIEF1dG9tYXRpY2FsbHkgYmlzZWN0IGEgYnJva2VuIHRlc3Qgc3VpdGU6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBIRUFEIEhFQUR+MTAgLS0gICAjIGN1bHByaXQgaXMgYW1vbmcgdGhlIGxhc3QgMTAKKyQgZ2l0IGJpc2VjdCBydW4gc2ggLWMgIm1ha2UgfHwgZXhpdCAxMjU7IH4vY2hlY2tfdGVzdF9jYXNlLnNoIgorLS0tLS0tLS0tLS0tCisrCitEb2VzIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBleGFtcGxlLCBidXQgb24gYSBzaW5nbGUgbGluZS4KIAogQXV0aG9yCiAtLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dAppbmRleCBjYzkzNGU1Li44YzdiN2IwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ibGFtZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0CkBAIC0xOCw5ICsxOCw5IEBACiBBbm5vdGF0ZXMgZWFjaCBsaW5lIGluIHRoZSBnaXZlbiBmaWxlIHdpdGggaW5mb3JtYXRpb24gZnJvbSB0aGUgcmV2aXNpb24gd2hpY2gKIGxhc3QgbW9kaWZpZWQgdGhlIGxpbmUuIE9wdGlvbmFsbHksIHN0YXJ0IGFubm90YXRpbmcgZnJvbSB0aGUgZ2l2ZW4gcmV2aXNpb24uCiAKLUFsc28gaXQgY2FuIGxpbWl0IHRoZSByYW5nZSBvZiBsaW5lcyBhbm5vdGF0ZWQuCitUaGUgY29tbWFuZCBjYW4gYWxzbyBsaW1pdCB0aGUgcmFuZ2Ugb2YgbGluZXMgYW5ub3RhdGVkLgogCi1UaGlzIHJlcG9ydCBkb2Vzbid0IHRlbGwgeW91IGFueXRoaW5nIGFib3V0IGxpbmVzIHdoaWNoIGhhdmUgYmVlbiBkZWxldGVkIG9yCitUaGUgcmVwb3J0IGRvZXMgbm90IHRlbGwgeW91IGFueXRoaW5nIGFib3V0IGxpbmVzIHdoaWNoIGhhdmUgYmVlbiBkZWxldGVkIG9yCiByZXBsYWNlZDsgeW91IG5lZWQgdG8gdXNlIGEgdG9vbCBzdWNoIGFzICdnaXQtZGlmZicgb3IgdGhlICJwaWNrYXhlIgogaW50ZXJmYWNlIGJyaWVmbHkgbWVudGlvbmVkIGluIHRoZSBmb2xsb3dpbmcgcGFyYWdyYXBoLgogCkBAIC00OCwyNiArNDgsMjYgQEAKIAlsaW5lcyBiZXR3ZWVuIGZpbGVzIChzZWUgYC1DYCkgYW5kIGxpbmVzIG1vdmVkIHdpdGhpbiBhCiAJZmlsZSAoc2VlIGAtTWApLiAgVGhlIGZpcnN0IG51bWJlciBsaXN0ZWQgaXMgdGhlIHNjb3JlLgogCVRoaXMgaXMgdGhlIG51bWJlciBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBkZXRlY3RlZAotCXRvIGJlIG1vdmVkIGJldHdlZW4gb3Igd2l0aGluIGZpbGVzLiAgVGhpcyBtdXN0IGJlIGFib3ZlCisJYXMgaGF2aW5nIGJlZW4gbW92ZWQgYmV0d2VlbiBvciB3aXRoaW4gZmlsZXMuICBUaGlzIG11c3QgYmUgYWJvdmUKIAlhIGNlcnRhaW4gdGhyZXNob2xkIGZvciAnZ2l0LWJsYW1lJyB0byBjb25zaWRlciB0aG9zZSBsaW5lcwogCW9mIGNvZGUgdG8gaGF2ZSBiZWVuIG1vdmVkLgogCiAtZjo6CiAtLXNob3ctbmFtZTo6Ci0JU2hvdyBmaWxlbmFtZSBpbiB0aGUgb3JpZ2luYWwgY29tbWl0LiAgQnkgZGVmYXVsdAotCWZpbGVuYW1lIGlzIHNob3duIGlmIHRoZXJlIGlzIGFueSBsaW5lIHRoYXQgY2FtZSBmcm9tIGEKLQlmaWxlIHdpdGggZGlmZmVyZW50IG5hbWUsIGR1ZSB0byByZW5hbWUgZGV0ZWN0aW9uLgorCVNob3cgdGhlIGZpbGVuYW1lIGluIHRoZSBvcmlnaW5hbCBjb21taXQuICBCeSBkZWZhdWx0CisJdGhlIGZpbGVuYW1lIGlzIHNob3duIGlmIHRoZXJlIGlzIGFueSBsaW5lIHRoYXQgY2FtZSBmcm9tIGEKKwlmaWxlIHdpdGggYSBkaWZmZXJlbnQgbmFtZSwgZHVlIHRvIHJlbmFtZSBkZXRlY3Rpb24uCiAKIC1uOjoKIC0tc2hvdy1udW1iZXI6OgotCVNob3cgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIGNvbW1pdCAoRGVmYXVsdDogb2ZmKS4KKwlTaG93IHRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgY29tbWl0IChEZWZhdWx0OiBvZmYpLgogCiAtczo6Ci0JU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCBmcm9tIHRoZSBvdXRwdXQuCisJU3VwcHJlc3MgdGhlIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgZnJvbSB0aGUgb3V0cHV0LgogCiAtdzo6Ci0JSWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgcGFyZW50J3MgdmVyc2lvbiBhbmQKLQljaGlsZCdzIHRvIGZpbmQgd2hlcmUgdGhlIGxpbmVzIGNhbWUgZnJvbS4KKwlJZ25vcmUgd2hpdGVzcGFjZSB3aGVuIGNvbXBhcmluZyB0aGUgcGFyZW50J3MgdmVyc2lvbiBhbmQKKwl0aGUgY2hpbGQncyB0byBmaW5kIHdoZXJlIHRoZSBsaW5lcyBjYW1lIGZyb20uCiAKIAogVEhFIFBPUkNFTEFJTiBGT1JNQVQKQEAgLTc5LDE3ICs3OSwxNyBAQAogLSA0MC1ieXRlIFNIQS0xIG9mIHRoZSBjb21taXQgdGhlIGxpbmUgaXMgYXR0cmlidXRlZCB0bzsKIC0gdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBsaW5lIGluIHRoZSBvcmlnaW5hbCBmaWxlOwogLSB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGxpbmUgaW4gdGhlIGZpbmFsIGZpbGU7Ci0tIG9uIGEgbGluZSB0aGF0IHN0YXJ0cyBhIGdyb3VwIG9mIGxpbmUgZnJvbSBhIGRpZmZlcmVudAorLSBvbiBhIGxpbmUgdGhhdCBzdGFydHMgYSBncm91cCBvZiBsaW5lcyBmcm9tIGEgZGlmZmVyZW50CiAgIGNvbW1pdCB0aGFuIHRoZSBwcmV2aW91cyBvbmUsIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhpcwogICBncm91cC4gIE9uIHN1YnNlcXVlbnQgbGluZXMgdGhpcyBmaWVsZCBpcyBhYnNlbnQuCiAKIFRoaXMgaGVhZGVyIGxpbmUgaXMgZm9sbG93ZWQgYnkgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbgogYXQgbGVhc3Qgb25jZSBmb3IgZWFjaCBjb21taXQ6CiAKLS0gYXV0aG9yIG5hbWUgKCJhdXRob3IiKSwgZW1haWwgKCJhdXRob3ItbWFpbCIpLCB0aW1lCistIHRoZSBhdXRob3IgbmFtZSAoImF1dGhvciIpLCBlbWFpbCAoImF1dGhvci1tYWlsIiksIHRpbWUKICAgKCJhdXRob3ItdGltZSIpLCBhbmQgdGltZXpvbmUgKCJhdXRob3ItdHoiKTsgc2ltaWxhcmx5CiAgIGZvciBjb21taXR0ZXIuCi0tIGZpbGVuYW1lIGluIHRoZSBjb21taXQgdGhlIGxpbmUgaXMgYXR0cmlidXRlZCB0by4KKy0gdGhlIGZpbGVuYW1lIGluIHRoZSBjb21taXQgdGhhdCB0aGUgbGluZSBpcyBhdHRyaWJ1dGVkIHRvLgogLSB0aGUgZmlyc3QgbGluZSBvZiB0aGUgY29tbWl0IGxvZyBtZXNzYWdlICgic3VtbWFyeSIpLgogCiBUaGUgY29udGVudHMgb2YgdGhlIGFjdHVhbCBsaW5lIGlzIG91dHB1dCBhZnRlciB0aGUgYWJvdmUKQEAgLTEwMCwyMyArMTAwLDIzIEBACiBTUEVDSUZZSU5HIFJBTkdFUwogLS0tLS0tLS0tLS0tLS0tLS0KIAotVW5saWtlICdnaXQtYmxhbWUnIGFuZCAnZ2l0LWFubm90YXRlJyBpbiBvbGRlciBnaXQsIHRoZSBleHRlbnQKLW9mIGFubm90YXRpb24gY2FuIGJlIGxpbWl0ZWQgdG8gYm90aCBsaW5lIHJhbmdlcyBhbmQgcmV2aXNpb24KK1VubGlrZSAnZ2l0LWJsYW1lJyBhbmQgJ2dpdC1hbm5vdGF0ZScgaW4gb2xkZXIgdmVyc2lvbnMgb2YgZ2l0LCB0aGUgZXh0ZW50CitvZiB0aGUgYW5ub3RhdGlvbiBjYW4gYmUgbGltaXRlZCB0byBib3RoIGxpbmUgcmFuZ2VzIGFuZCByZXZpc2lvbgogcmFuZ2VzLiAgV2hlbiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gZmluZGluZyB0aGUgb3JpZ2luIGZvcgotbGwuIDQwLTYwIGZvciBmaWxlIGBmb29gLCB5b3UgY2FuIHVzZSBgLUxgIG9wdGlvbiBsaWtlIHRoZXNlCitsaW5lcyA0MC02MCBmb3IgZmlsZSBgZm9vYCwgeW91IGNhbiB1c2UgdGhlIGAtTGAgb3B0aW9uIGxpa2Ugc28KICh0aGV5IG1lYW4gdGhlIHNhbWUgdGhpbmcgLS0gYm90aCBhc2sgZm9yIDIxIGxpbmVzIHN0YXJ0aW5nIGF0CiBsaW5lIDQwKToKIAogCWdpdCBibGFtZSAtTCA0MCw2MCBmb28KIAlnaXQgYmxhbWUgLUwgNDAsKzIxIGZvbwogCi1BbHNvIHlvdSBjYW4gdXNlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzcGVjaWZ5IHRoZSBsaW5lIHJhbmdlLgorQWxzbyB5b3UgY2FuIHVzZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzcGVjaWZ5IHRoZSBsaW5lIHJhbmdlOgogCiAJZ2l0IGJsYW1lIC1MICcvXnN1YiBoZWxsbyB7LywvXn0kLycgZm9vCiAKLXdvdWxkIGxpbWl0IHRoZSBhbm5vdGF0aW9uIHRvIHRoZSBib2R5IG9mIGBoZWxsb2Agc3Vicm91dGluZS4KK3doaWNoIGxpbWl0cyB0aGUgYW5ub3RhdGlvbiB0byB0aGUgYm9keSBvZiB0aGUgYGhlbGxvYCBzdWJyb3V0aW5lLgogCi1XaGVuIHlvdSBhcmUgbm90IGludGVyZXN0ZWQgaW4gY2hhbmdlcyBvbGRlciB0aGFuIHRoZSB2ZXJzaW9uCitXaGVuIHlvdSBhcmUgbm90IGludGVyZXN0ZWQgaW4gY2hhbmdlcyBvbGRlciB0aGFuIHZlcnNpb24KIHYyLjYuMTgsIG9yIGNoYW5nZXMgb2xkZXIgdGhhbiAzIHdlZWtzLCB5b3UgY2FuIHVzZSByZXZpc2lvbgogcmFuZ2Ugc3BlY2lmaWVycyAgc2ltaWxhciB0byAnZ2l0LXJldi1saXN0JzoKIApAQCAtMTI5LDcgKzEyOSw3IEBACiB3ZWVrcyBvbGQgaW4gdGhlIGFib3ZlIGV4YW1wbGUpIGFyZSBibGFtZWQgZm9yIHRoYXQgcmFuZ2UKIGJvdW5kYXJ5IGNvbW1pdC4KIAotQSBwYXJ0aWN1bGFybHkgdXNlZnVsIHdheSBpcyB0byBzZWUgaWYgYW4gYWRkZWQgZmlsZSBoYXZlIGxpbmVzCitBIHBhcnRpY3VsYXJseSB1c2VmdWwgd2F5IGlzIHRvIHNlZSBpZiBhbiBhZGRlZCBmaWxlIGhhcyBsaW5lcwogY3JlYXRlZCBieSBjb3B5LWFuZC1wYXN0ZSBmcm9tIGV4aXN0aW5nIGZpbGVzLiAgU29tZXRpbWVzIHRoaXMKIGluZGljYXRlcyB0aGF0IHRoZSBkZXZlbG9wZXIgd2FzIGJlaW5nIHNsb3BweSBhbmQgZGlkIG5vdAogcmVmYWN0b3IgdGhlIGNvZGUgcHJvcGVybHkuICBZb3UgY2FuIGZpcnN0IGZpbmQgdGhlIGNvbW1pdCB0aGF0CkBAIC0xNjIsMjYgKzE2MiwzMiBAQAogKwogTGluZSBudW1iZXJzIGNvdW50IGZyb20gMS4KIAotLiBUaGUgZmlyc3QgdGltZSB0aGF0IGNvbW1pdCBzaG93cyB1cCBpbiB0aGUgc3RyZWFtLCBpdCBoYXMgdmFyaW91cworLiBUaGUgZmlyc3QgdGltZSB0aGF0IGEgY29tbWl0IHNob3dzIHVwIGluIHRoZSBzdHJlYW0sIGl0IGhhcyB2YXJpb3VzCiAgIG90aGVyIGluZm9ybWF0aW9uIGFib3V0IGl0IHByaW50ZWQgb3V0IHdpdGggYSBvbmUtd29yZCB0YWcgYXQgdGhlCi0gIGJlZ2lubmluZyBvZiBlYWNoIGxpbmUgYWJvdXQgdGhhdCAiZXh0ZW5kZWQgY29tbWl0IGluZm8iIChhdXRob3IsCi0gIGVtYWlsLCBjb21taXR0ZXIsIGRhdGVzLCBzdW1tYXJ5IGV0YykuCisgIGJlZ2lubmluZyBvZiBlYWNoIGxpbmUgZGVzY3JpYmluZyB0aGUgZXh0cmEgY29tbWl0IGluZm9ybWF0aW9uIChhdXRob3IsCisgIGVtYWlsLCBjb21taXR0ZXIsIGRhdGVzLCBzdW1tYXJ5LCBldGMuKS4KIAotLiBVbmxpa2UgUG9yY2VsYWluIGZvcm1hdCwgdGhlIGZpbGVuYW1lIGluZm9ybWF0aW9uIGlzIGFsd2F5cworLiBVbmxpa2UgdGhlIFBvcmNlbGFpbiBmb3JtYXQsIHRoZSBmaWxlbmFtZSBpbmZvcm1hdGlvbiBpcyBhbHdheXMKICAgZ2l2ZW4gYW5kIHRlcm1pbmF0ZXMgdGhlIGVudHJ5OgogCiAJImZpbGVuYW1lIiA8d2hpdGVzcGFjZS1xdW90ZWQtZmlsZW5hbWUtZ29lcy1oZXJlPgogKwotYW5kIHRodXMgaXQncyByZWFsbHkgcXVpdGUgZWFzeSB0byBwYXJzZSBmb3Igc29tZSBsaW5lLSBhbmQgd29yZC1vcmllbnRlZAorYW5kIHRodXMgaXQgaXMgcmVhbGx5IHF1aXRlIGVhc3kgdG8gcGFyc2UgZm9yIHNvbWUgbGluZS0gYW5kIHdvcmQtb3JpZW50ZWQKIHBhcnNlciAod2hpY2ggc2hvdWxkIGJlIHF1aXRlIG5hdHVyYWwgZm9yIG1vc3Qgc2NyaXB0aW5nIGxhbmd1YWdlcykuCiArCiBbTk9URV0KIEZvciBwZW9wbGUgd2hvIGRvIHBhcnNpbmc6IHRvIG1ha2UgaXQgbW9yZSByb2J1c3QsIGp1c3QgaWdub3JlIGFueQotbGluZXMgaW4gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIGxhc3Qgb25lICgiPHNoYTE+IiBhbmQgImZpbGVuYW1lIiBsaW5lcykKLXdoZXJlIHlvdSBkb24ndCByZWNvZ25pemUgdGhlIHRhZy13b3JkcyAob3IgY2FyZSBhYm91dCB0aGF0IHBhcnRpY3VsYXIKK2xpbmVzIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBsYXN0IG9uZSAoIjxzaGExPiIgYW5kICJmaWxlbmFtZSIgbGluZXMpCit3aGVyZSB5b3UgZG8gbm90IHJlY29nbml6ZSB0aGUgdGFnIHdvcmRzIChvciBjYXJlIGFib3V0IHRoYXQgcGFydGljdWxhcgogb25lKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSAiZXh0ZW5kZWQgaW5mb3JtYXRpb24iIGxpbmVzLiBUaGF0IHdheSwgaWYKIHRoZXJlIGlzIGV2ZXIgYWRkZWQgaW5mb3JtYXRpb24gKGxpa2UgdGhlIGNvbW1pdCBlbmNvZGluZyBvciBleHRlbmRlZAotY29tbWl0IGNvbW1lbnRhcnkpLCBhIGJsYW1lIHZpZXdlciB3b24ndCBldmVyIGNhcmUuCitjb21taXQgY29tbWVudGFyeSksIGEgYmxhbWUgdmlld2VyIHdpbGwgbm90IGNhcmUuCisKKworTUFQUElORyBBVVRIT1JTCistLS0tLS0tLS0tLS0tLS0KKworaW5jbHVkZTo6bWFpbG1hcC50eHRbXQogCiAKIFNFRSBBTFNPCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYnJhbmNoLnR4dAppbmRleCA2MTAzZDYyLi5hZTIwMWRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1icmFuY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKQEAgLTE4LDE5ICsxOCwxOSBAQAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCiAKLVdpdGggbm8gYXJndW1lbnRzLCBleGlzdGluZyBicmFuY2hlcyBhcmUgbGlzdGVkLCB0aGUgY3VycmVudCBicmFuY2ggd2lsbAorV2l0aCBubyBhcmd1bWVudHMsIGV4aXN0aW5nIGJyYW5jaGVzIGFyZSBsaXN0ZWQgYW5kIHRoZSBjdXJyZW50IGJyYW5jaCB3aWxsCiBiZSBoaWdobGlnaHRlZCB3aXRoIGFuIGFzdGVyaXNrLiAgT3B0aW9uIGAtcmAgY2F1c2VzIHRoZSByZW1vdGUtdHJhY2tpbmcKIGJyYW5jaGVzIHRvIGJlIGxpc3RlZCwgYW5kIG9wdGlvbiBgLWFgIHNob3dzIGJvdGguCiAKLVdpdGggYC0tY29udGFpbnNgLCBzaG93cyBvbmx5IHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW5zIHRoZSBuYW1lZCBjb21taXQKLShpbiBvdGhlciB3b3JkcywgdGhlIGJyYW5jaGVzIHdob3NlIHRpcCBjb21taXRzIGFyZSBkZXNjZW5kYW50IG9mIHRoZQorV2l0aCBgLS1jb250YWluc2AsIHNob3dzIG9ubHkgdGhlIGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgbmFtZWQgY29tbWl0CisoaW4gb3RoZXIgd29yZHMsIHRoZSBicmFuY2hlcyB3aG9zZSB0aXAgY29tbWl0cyBhcmUgZGVzY2VuZGFudHMgb2YgdGhlCiBuYW1lZCBjb21taXQpLiAgV2l0aCBgLS1tZXJnZWRgLCBvbmx5IGJyYW5jaGVzIG1lcmdlZCBpbnRvIHRoZSBuYW1lZAogY29tbWl0IChpLmUuIHRoZSBicmFuY2hlcyB3aG9zZSB0aXAgY29tbWl0cyBhcmUgcmVhY2hhYmxlIGZyb20gdGhlIG5hbWVkCiBjb21taXQpIHdpbGwgYmUgbGlzdGVkLiAgV2l0aCBgLS1uby1tZXJnZWRgIG9ubHkgYnJhbmNoZXMgbm90IG1lcmdlZCBpbnRvCi10aGUgbmFtZWQgY29tbWl0IHdpbGwgYmUgbGlzdGVkLiAgTWlzc2luZyA8Y29tbWl0PiBhcmd1bWVudCBkZWZhdWx0cyB0bwotJ0hFQUQnIChpLmUuIHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoKS4KK3RoZSBuYW1lZCBjb21taXQgd2lsbCBiZSBsaXN0ZWQuICBJZiB0aGUgPGNvbW1pdD4gYXJndW1lbnQgaXMgbWlzc2luZyBpdAorZGVmYXVsdHMgdG8gJ0hFQUQnIChpLmUuIHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoKS4KIAotSW4gaXRzIHNlY29uZCBmb3JtLCBhIG5ldyBicmFuY2ggbmFtZWQgPGJyYW5jaG5hbWU+IHdpbGwgYmUgY3JlYXRlZC4KK0luIHRoZSBjb21tYW5kJ3Mgc2Vjb25kIGZvcm0sIGEgbmV3IGJyYW5jaCBuYW1lZCA8YnJhbmNobmFtZT4gd2lsbCBiZSBjcmVhdGVkLgogSXQgd2lsbCBzdGFydCBvdXQgd2l0aCBhIGhlYWQgZXF1YWwgdG8gdGhlIG9uZSBnaXZlbiBhcyA8c3RhcnQtcG9pbnQ+LgogSWYgbm8gPHN0YXJ0LXBvaW50PiBpcyBnaXZlbiwgdGhlIGJyYW5jaCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBhIGhlYWQKIGVxdWFsIHRvIHRoYXQgb2YgdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBicmFuY2guCkBAIC01Nyw5ICs1Nyw5IEBACiAKIFVzZSAtciB0b2dldGhlciB3aXRoIC1kIHRvIGRlbGV0ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuIE5vdGUsIHRoYXQgaXQKIG9ubHkgbWFrZXMgc2Vuc2UgdG8gZGVsZXRlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBpZiB0aGV5IG5vIGxvbmdlciBleGlzdAotaW4gcmVtb3RlIHJlcG9zaXRvcnkgb3IgaWYgJ2dpdC1mZXRjaCcgd2FzIGNvbmZpZ3VyZWQgbm90IHRvIGZldGNoCi10aGVtIGFnYWluLiBTZWUgYWxzbyAncHJ1bmUnIHN1YmNvbW1hbmQgb2YgbGlua2dpdDpnaXQtcmVtb3RlWzFdIGZvciB3YXkgdG8KLWNsZWFuIHVwIGFsbCBvYnNvbGV0ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCitpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgb3IgaWYgJ2dpdC1mZXRjaCcgd2FzIGNvbmZpZ3VyZWQgbm90IHRvIGZldGNoCit0aGVtIGFnYWluLiBTZWUgYWxzbyB0aGUgJ3BydW5lJyBzdWJjb21tYW5kIG9mIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXSBmb3IgYQord2F5IHRvIGNsZWFuIHVwIGFsbCBvYnNvbGV0ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCiAKIAogT1BUSU9OUwpAQCAtNzYsMTQgKzc2LDE0IEBACiAJYmFzZWQgc2hhMSBleHByZXNzaW9ucyBzdWNoIGFzICI8YnJhbmNobmFtZT5AXHt5ZXN0ZXJkYXl9Ii4KIAogLWY6OgotCUZvcmNlIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBicmFuY2ggZXZlbiBpZiBpdCBtZWFucyBkZWxldGluZwotCWEgYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgd2l0aCB0aGUgc2FtZSBuYW1lLgorCVJlc2V0IDxicmFuY2huYW1lPiB0byA8c3RhcnRwb2ludD4gaWYgPGJyYW5jaG5hbWU+IGV4aXN0cworCWFscmVhZHkuIFdpdGhvdXQgYC1mYCAnZ2l0LWJyYW5jaCcgcmVmdXNlcyB0byBjaGFuZ2UgYW4gZXhpc3RpbmcgYnJhbmNoLgogCiAtbTo6CiAJTW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlZmxvZy4KIAogLU06OgotCU1vdmUvcmVuYW1lIGEgYnJhbmNoIGV2ZW4gaWYgdGhlIG5ldyBicmFuY2huYW1lIGFscmVhZHkgZXhpc3RzLgorCU1vdmUvcmVuYW1lIGEgYnJhbmNoIGV2ZW4gaWYgdGhlIG5ldyBicmFuY2ggbmFtZSBhbHJlYWR5IGV4aXN0cy4KIAogLS1jb2xvcjo6CiAJQ29sb3IgYnJhbmNoZXMgdG8gaGlnaGxpZ2h0IGN1cnJlbnQsIGxvY2FsLCBhbmQgcmVtb3RlIGJyYW5jaGVzLgpAQCAtMTAwLDI5ICsxMDAsMzUgQEAKIAogLXY6OgogLS12ZXJib3NlOjoKLQlTaG93IHNoYTEgYW5kIGNvbW1pdCBzdWJqZWN0IGxpbmUgZm9yIGVhY2ggaGVhZC4KKwlTaG93IHNoYTEgYW5kIGNvbW1pdCBzdWJqZWN0IGxpbmUgZm9yIGVhY2ggaGVhZCwgYWxvbmcgd2l0aAorCXJlbGF0aW9uc2hpcCB0byB1cHN0cmVhbSBicmFuY2ggKGlmIGFueSkuIElmIGdpdmVuIHR3aWNlLCBwcmludAorCXRoZSBuYW1lIG9mIHRoZSB1cHN0cmVhbSBicmFuY2gsIGFzIHdlbGwuCiAKIC0tYWJicmV2PTxsZW5ndGg+OjoKLQlBbHRlciBtaW5pbXVtIGRpc3BsYXkgbGVuZ3RoIGZvciBzaGExIGluIG91dHB1dCBsaXN0aW5nLAotCWRlZmF1bHQgdmFsdWUgaXMgNy4KKwlBbHRlciB0aGUgc2hhMSdzIG1pbmltdW0gZGlzcGxheSBsZW5ndGggaW4gdGhlIG91dHB1dCBsaXN0aW5nLgorCVRoZSBkZWZhdWx0IHZhbHVlIGlzIDcuCiAKIC0tbm8tYWJicmV2OjoKLQlEaXNwbGF5IHRoZSBmdWxsIHNoYTFzIGluIG91dHB1dCBsaXN0aW5nIHJhdGhlciB0aGFuIGFiYnJldmlhdGluZyB0aGVtLgorCURpc3BsYXkgdGhlIGZ1bGwgc2hhMXMgaW4gdGhlIG91dHB1dCBsaXN0aW5nIHJhdGhlciB0aGFuIGFiYnJldmlhdGluZyB0aGVtLgogCistdDo6CiAtLXRyYWNrOjoKLQlXaGVuIGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgc2V0IHVwIGNvbmZpZ3VyYXRpb24gc28gdGhhdCAnZ2l0LXB1bGwnCi0Jd2lsbCBhdXRvbWF0aWNhbGx5IHJldHJpZXZlIGRhdGEgZnJvbSB0aGUgc3RhcnQgcG9pbnQsIHdoaWNoIG11c3QgYmUKLQlhIGJyYW5jaC4gVXNlIHRoaXMgaWYgeW91IGFsd2F5cyBwdWxsIGZyb20gdGhlIHNhbWUgdXBzdHJlYW0gYnJhbmNoCi0JaW50byB0aGUgbmV3IGJyYW5jaCwgYW5kIGlmIHlvdSBkb24ndCB3YW50IHRvIHVzZSAiZ2l0IHB1bGwKLQk8cmVwb3NpdG9yeT4gPHJlZnNwZWM+IiBleHBsaWNpdGx5LiBUaGlzIGJlaGF2aW9yIGlzIHRoZSBkZWZhdWx0Ci0Jd2hlbiB0aGUgc3RhcnQgcG9pbnQgaXMgYSByZW1vdGUgYnJhbmNoLiBTZXQgdGhlCi0JYnJhbmNoLmF1dG9zZXR1cG1lcmdlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gYGZhbHNlYCBpZiB5b3Ugd2FudAotCSdnaXQtY2hlY2tvdXQnIGFuZCAnZ2l0LWJyYW5jaCcgdG8gYWx3YXlzIGJlaGF2ZSBhcyBpZiAnLS1uby10cmFjaycgd2VyZQotCWdpdmVuLiBTZXQgaXQgdG8gYGFsd2F5c2AgaWYgeW91IHdhbnQgdGhpcyBiZWhhdmlvciB3aGVuIHRoZQotCXN0YXJ0LXBvaW50IGlzIGVpdGhlciBhIGxvY2FsIG9yIHJlbW90ZSBicmFuY2guCisJV2hlbiBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHNldCB1cCBjb25maWd1cmF0aW9uIHRvIG1hcmsgdGhlCisJc3RhcnQtcG9pbnQgYnJhbmNoIGFzICJ1cHN0cmVhbSIgZnJvbSB0aGUgbmV3IGJyYW5jaC4gVGhpcworCWNvbmZpZ3VyYXRpb24gd2lsbCB0ZWxsIGdpdCB0byBzaG93IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUKKwl0d28gYnJhbmNoZXMgaW4gYGdpdCBzdGF0dXNgIGFuZCBgZ2l0IGJyYW5jaCAtdmAuIEZ1cnRoZXJtb3JlLAorCWl0IGRpcmVjdHMgYGdpdCBwdWxsYCB3aXRob3V0IGFyZ3VtZW50cyB0byBwdWxsIGZyb20gdGhlCisJdXBzdHJlYW0gd2hlbiB0aGUgbmV3IGJyYW5jaCBpcyBjaGVja2VkIG91dC4KKysKK1RoaXMgYmVoYXZpb3IgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgc3RhcnQgcG9pbnQgaXMgYSByZW1vdGUgYnJhbmNoLgorU2V0IHRoZSBicmFuY2guYXV0b3NldHVwbWVyZ2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBgZmFsc2VgIGlmIHlvdQord2FudCBgZ2l0IGNoZWNrb3V0YCBhbmQgYGdpdCBicmFuY2hgIHRvIGFsd2F5cyBiZWhhdmUgYXMgaWYgJy0tbm8tdHJhY2snCit3ZXJlIGdpdmVuLiBTZXQgaXQgdG8gYGFsd2F5c2AgaWYgeW91IHdhbnQgdGhpcyBiZWhhdmlvciB3aGVuIHRoZQorc3RhcnQtcG9pbnQgaXMgZWl0aGVyIGEgbG9jYWwgb3IgcmVtb3RlIGJyYW5jaC4KIAogLS1uby10cmFjazo6Ci0JSWdub3JlIHRoZSBicmFuY2guYXV0b3NldHVwbWVyZ2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKwlEbyBub3Qgc2V0IHVwICJ1cHN0cmVhbSIgY29uZmlndXJhdGlvbiwgZXZlbiBpZiB0aGUKKwlicmFuY2guYXV0b3NldHVwbWVyZ2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyB0cnVlLgogCiAtLWNvbnRhaW5zIDxjb21taXQ+OjoKIAlPbmx5IGxpc3QgYnJhbmNoZXMgd2hpY2ggY29udGFpbiB0aGUgc3BlY2lmaWVkIGNvbW1pdC4KQEAgLTE0OSwxMyArMTU1LDEzIEBACiAKIDxuZXdicmFuY2g+OjoKIAlUaGUgbmV3IG5hbWUgZm9yIGFuIGV4aXN0aW5nIGJyYW5jaC4gVGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGZvcgotCTxicmFuY2huYW1lPiBhcHBsaWVzLgorCTxicmFuY2huYW1lPiBhcHBseS4KIAogCiBFeGFtcGxlcwogLS0tLS0tLS0KIAotU3RhcnQgZGV2ZWxvcG1lbnQgb2ZmIG9mIGEga25vd24gdGFnOjoKK1N0YXJ0IGRldmVsb3BtZW50IGZyb20gYSBrbm93biB0YWc6OgogKwogLS0tLS0tLS0tLS0tCiAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtLy4uLi9saW51eC0yLjYgbXkyLjYKQEAgLTE2Nyw3ICsxNzMsNyBAQAogPDE+IFRoaXMgc3RlcCBhbmQgdGhlIG5leHQgb25lIGNvdWxkIGJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgc3RlcCB3aXRoCiAiY2hlY2tvdXQgLWIgbXkyLjYuMTQgdjIuNi4xNCIuCiAKLURlbGV0ZSB1bm5lZWRlZCBicmFuY2g6OgorRGVsZXRlIGFuIHVubmVlZGVkIGJyYW5jaDo6CiArCiAtLS0tLS0tLS0tLS0KICQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnLy4uLi9naXQuZ2l0IG15LmdpdApAQCAtMTc2LDIxICsxODIsMjEgQEAKICQgZ2l0IGJyYW5jaCAtRCB0ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDI+CiAtLS0tLS0tLS0tLS0KICsKLTwxPiBEZWxldGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzICJ0b2RvIiwgImh0bWwiLCAibWFuIi4gTmV4dCAnZmV0Y2gnIG9yCi0ncHVsbCcgd2lsbCBjcmVhdGUgdGhlbSBhZ2FpbiB1bmxlc3MgeW91IGNvbmZpZ3VyZSB0aGVtIG5vdCB0by4gU2VlCi1saW5rZ2l0OmdpdC1mZXRjaFsxXS4KLTwyPiBEZWxldGUgInRlc3QiIGJyYW5jaCBldmVuIGlmIHRoZSAibWFzdGVyIiBicmFuY2ggKG9yIHdoaWNoZXZlciBicmFuY2ggaXMKLWN1cnJlbnRseSBjaGVja2VkIG91dCkgZG9lcyBub3QgaGF2ZSBhbGwgY29tbWl0cyBmcm9tIHRlc3QgYnJhbmNoLgorPDE+IERlbGV0ZSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzICJ0b2RvIiwgImh0bWwiIGFuZCAibWFuIi4gVGhlIG5leHQKKydmZXRjaCcgb3IgJ3B1bGwnIHdpbGwgY3JlYXRlIHRoZW0gYWdhaW4gdW5sZXNzIHlvdSBjb25maWd1cmUgdGhlbSBub3QgdG8uCitTZWUgbGlua2dpdDpnaXQtZmV0Y2hbMV0uCis8Mj4gRGVsZXRlIHRoZSAidGVzdCIgYnJhbmNoIGV2ZW4gaWYgdGhlICJtYXN0ZXIiIGJyYW5jaCAob3Igd2hpY2hldmVyIGJyYW5jaAoraXMgY3VycmVudGx5IGNoZWNrZWQgb3V0KSBkb2VzIG5vdCBoYXZlIGFsbCBjb21taXRzIGZyb20gdGhlIHRlc3QgYnJhbmNoLgogCiAKIE5vdGVzCiAtLS0tLQogCi1JZiB5b3UgYXJlIGNyZWF0aW5nIGEgYnJhbmNoIHRoYXQgeW91IHdhbnQgdG8gaW1tZWRpYXRlbHkgY2hlY2tvdXQsIGl0J3MKK0lmIHlvdSBhcmUgY3JlYXRpbmcgYSBicmFuY2ggdGhhdCB5b3Ugd2FudCB0byBjaGVja291dCBpbW1lZGlhdGVseSwgaXQgaXMKIGVhc2llciB0byB1c2UgdGhlIGdpdCBjaGVja291dCBjb21tYW5kIHdpdGggaXRzIGAtYmAgb3B0aW9uIHRvIGNyZWF0ZQogYSBicmFuY2ggYW5kIGNoZWNrIGl0IG91dCB3aXRoIGEgc2luZ2xlIGNvbW1hbmQuCiAKLVRoZSBvcHRpb25zIGAtLWNvbnRhaW5zYCwgYC0tbWVyZ2VkYCBhbmQgYC0tbm8tbWVyZ2VkYCBzZXJ2ZXMgdGhyZWUgcmVsYXRlZAorVGhlIG9wdGlvbnMgYC0tY29udGFpbnNgLCBgLS1tZXJnZWRgIGFuZCBgLS1uby1tZXJnZWRgIHNlcnZlIHRocmVlIHJlbGF0ZWQKIGJ1dCBkaWZmZXJlbnQgcHVycG9zZXM6CiAKIC0gYC0tY29udGFpbnMgPGNvbW1pdD5gIGlzIHVzZWQgdG8gZmluZCBhbGwgYnJhbmNoZXMgd2hpY2ggd2lsbCBuZWVkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1idW5kbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYnVuZGxlLnR4dAppbmRleCAxYjY2YWI3Li5hZWU3ZTRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1idW5kbGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJ1bmRsZS50eHQKQEAgLTE5LDEzICsxOSwxMyBAQAogCiBTb21lIHdvcmtmbG93cyByZXF1aXJlIHRoYXQgb25lIG9yIG1vcmUgYnJhbmNoZXMgb2YgZGV2ZWxvcG1lbnQgb24gb25lCiBtYWNoaW5lIGJlIHJlcGxpY2F0ZWQgb24gYW5vdGhlciBtYWNoaW5lLCBidXQgdGhlIHR3byBtYWNoaW5lcyBjYW5ub3QKLWJlIGRpcmVjdGx5IGNvbm5lY3RlZCBzbyB0aGUgaW50ZXJhY3RpdmUgZ2l0IHByb3RvY29scyAoZ2l0LCBzc2gsCi1yc3luYywgaHR0cCkgY2Fubm90IGJlIHVzZWQuICBUaGlzIGNvbW1hbmQgcHJvdmlkZXMgc3VwcG9ydCBmb3IKK2JlIGRpcmVjdGx5IGNvbm5lY3RlZCwgYW5kIHRoZXJlZm9yZSB0aGUgaW50ZXJhY3RpdmUgZ2l0IHByb3RvY29scyAoZ2l0LAorc3NoLCByc3luYywgaHR0cCkgY2Fubm90IGJlIHVzZWQuICBUaGlzIGNvbW1hbmQgcHJvdmlkZXMgc3VwcG9ydCBmb3IKICdnaXQtZmV0Y2gnIGFuZCAnZ2l0LXB1bGwnIHRvIG9wZXJhdGUgYnkgcGFja2FnaW5nIG9iamVjdHMgYW5kIHJlZmVyZW5jZXMKIGluIGFuIGFyY2hpdmUgYXQgdGhlIG9yaWdpbmF0aW5nIG1hY2hpbmUsIHRoZW4gaW1wb3J0aW5nIHRob3NlIGludG8KIGFub3RoZXIgcmVwb3NpdG9yeSB1c2luZyAnZ2l0LWZldGNoJyBhbmQgJ2dpdC1wdWxsJwogYWZ0ZXIgbW92aW5nIHRoZSBhcmNoaXZlIGJ5IHNvbWUgbWVhbnMgKGkuZS4sIGJ5IHNuZWFrZXJuZXQpLiAgQXMgbm8KLWRpcmVjdCBjb25uZWN0aW9uIGJldHdlZW4gcmVwb3NpdG9yaWVzIGV4aXN0cywgdGhlIHVzZXIgbXVzdCBzcGVjaWZ5IGEKK2RpcmVjdCBjb25uZWN0aW9uIGJldHdlZW4gdGhlIHJlcG9zaXRvcmllcyBleGlzdHMsIHRoZSB1c2VyIG11c3Qgc3BlY2lmeSBhCiBiYXNpcyBmb3IgdGhlIGJ1bmRsZSB0aGF0IGlzIGhlbGQgYnkgdGhlIGRlc3RpbmF0aW9uIHJlcG9zaXRvcnk6IHRoZQogYnVuZGxlIGFzc3VtZXMgdGhhdCBhbGwgb2JqZWN0cyBpbiB0aGUgYmFzaXMgYXJlIGFscmVhZHkgaW4gdGhlCiBkZXN0aW5hdGlvbiByZXBvc2l0b3J5LgpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgIGJ1bmRsZSBmb3JtYXQgaXRzZWxmIGFzIHdlbGwgYXMgY2hlY2tpbmcgdGhhdCB0aGUgcHJlcmVxdWlzaXRlCiAgICAgICAgY29tbWl0cyBleGlzdCBhbmQgYXJlIGZ1bGx5IGxpbmtlZCBpbiB0aGUgY3VycmVudCByZXBvc2l0b3J5LgogICAgICAgICdnaXQtYnVuZGxlJyBwcmludHMgYSBsaXN0IG9mIG1pc3NpbmcgY29tbWl0cywgaWYgYW55LCBhbmQgZXhpdHMKLSAgICAgICB3aXRoIG5vbi16ZXJvIHN0YXR1cy4KKyAgICAgICB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLgogCiBsaXN0LWhlYWRzIDxmaWxlPjo6CiAgICAgICAgTGlzdHMgdGhlIHJlZmVyZW5jZXMgZGVmaW5lZCBpbiB0aGUgYnVuZGxlLiAgSWYgZm9sbG93ZWQgYnkgYQpAQCAtNTMsMTQgKzUzLDE0IEBACiB1bmJ1bmRsZSA8ZmlsZT46OgogICAgICAgIFBhc3NlcyB0aGUgb2JqZWN0cyBpbiB0aGUgYnVuZGxlIHRvICdnaXQtaW5kZXgtcGFjaycKICAgICAgICBmb3Igc3RvcmFnZSBpbiB0aGUgcmVwb3NpdG9yeSwgdGhlbiBwcmludHMgdGhlIG5hbWVzIG9mIGFsbAotICAgICAgIGRlZmluZWQgcmVmZXJlbmNlcy4gSWYgYSByZWZsaXN0IGlzIGdpdmVuLCBvbmx5IHJlZmVyZW5jZXMKLSAgICAgICBtYXRjaGluZyB0aG9zZSBpbiB0aGUgZ2l2ZW4gbGlzdCBhcmUgcHJpbnRlZC4gVGhpcyBjb21tYW5kIGlzCisgICAgICAgZGVmaW5lZCByZWZlcmVuY2VzLiBJZiBhIGxpc3Qgb2YgcmVmZXJlbmNlcyBpcyBnaXZlbiwgb25seQorICAgICAgIHJlZmVyZW5jZXMgbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIGxpc3QgYXJlIHByaW50ZWQuIFRoaXMgY29tbWFuZCBpcwogICAgICAgIHJlYWxseSBwbHVtYmluZywgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIG9ubHkgYnkgJ2dpdC1mZXRjaCcuCiAKIFtnaXQtcmV2LWxpc3QtYXJncy4uLl06OgogICAgICAgIEEgbGlzdCBvZiBhcmd1bWVudHMsIGFjY2VwdGFibGUgdG8gJ2dpdC1yZXYtcGFyc2UnIGFuZAotICAgICAgICdnaXQtcmV2LWxpc3QnLCB0aGF0IHNwZWNpZnkgdGhlIHNwZWNpZmljIG9iamVjdHMgYW5kIHJlZmVyZW5jZXMKLSAgICAgICB0byB0cmFuc3BvcnQuICBGb3IgZXhhbXBsZSwgIm1hc3Rlcn4xMC4ubWFzdGVyIiBjYXVzZXMgdGhlCisgICAgICAgJ2dpdC1yZXYtbGlzdCcsIHRoYXQgc3BlY2lmaWVzIHRoZSBzcGVjaWZpYyBvYmplY3RzIGFuZCByZWZlcmVuY2VzCisgICAgICAgdG8gdHJhbnNwb3J0LiAgRm9yIGV4YW1wbGUsIGBtYXN0ZXJcfjEwLi5tYXN0ZXJgIGNhdXNlcyB0aGUKICAgICAgICBjdXJyZW50IG1hc3RlciByZWZlcmVuY2UgdG8gYmUgcGFja2FnZWQgYWxvbmcgd2l0aCBhbGwgb2JqZWN0cwogICAgICAgIGFkZGVkIHNpbmNlIGl0cyAxMHRoIGFuY2VzdG9yIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGV4cGxpY2l0CiAgICAgICAgbGltaXQgdG8gdGhlIG51bWJlciBvZiByZWZlcmVuY2VzIGFuZCBvYmplY3RzIHRoYXQgbWF5IGJlCkBAIC03MSw5OCArNzEsMTM0IEBACiAgICAgICAgQSBsaXN0IG9mIHJlZmVyZW5jZXMgdXNlZCB0byBsaW1pdCB0aGUgcmVmZXJlbmNlcyByZXBvcnRlZCBhcwogICAgICAgIGF2YWlsYWJsZS4gVGhpcyBpcyBwcmluY2lwYWxseSBvZiB1c2UgdG8gJ2dpdC1mZXRjaCcsIHdoaWNoCiAgICAgICAgZXhwZWN0cyB0byByZWNlaXZlIG9ubHkgdGhvc2UgcmVmZXJlbmNlcyBhc2tlZCBmb3IgYW5kIG5vdAotICAgICAgIG5lY2Vzc2FyaWx5IGV2ZXJ5dGhpbmcgaW4gdGhlIHBhY2sgKGluIHRoaXMgY2FzZSwgJ2dpdC1idW5kbGUnIGlzCi0gICAgICAgYWN0aW5nIGxpa2UgJ2dpdC1mZXRjaC1wYWNrJykuCisgICAgICAgbmVjZXNzYXJpbHkgZXZlcnl0aGluZyBpbiB0aGUgcGFjayAoaW4gdGhpcyBjYXNlLCAnZ2l0LWJ1bmRsZScgYWN0cworICAgICAgIGxpa2UgJ2dpdC1mZXRjaC1wYWNrJykuCiAKIFNQRUNJRllJTkcgUkVGRVJFTkNFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICdnaXQtYnVuZGxlJyB3aWxsIG9ubHkgcGFja2FnZSByZWZlcmVuY2VzIHRoYXQgYXJlIHNob3duIGJ5CiAnZ2l0LXNob3ctcmVmJzogdGhpcyBpbmNsdWRlcyBoZWFkcywgdGFncywgYW5kIHJlbW90ZSBoZWFkcy4gIFJlZmVyZW5jZXMKLXN1Y2ggYXMgbWFzdGVyfjEgY2Fubm90IGJlIHBhY2thZ2VkLCBidXQgYXJlIHBlcmZlY3RseSBzdWl0YWJsZSBmb3IKK3N1Y2ggYXMgYG1hc3Rlclx+MWAgY2Fubm90IGJlIHBhY2thZ2VkLCBidXQgYXJlIHBlcmZlY3RseSBzdWl0YWJsZSBmb3IKIGRlZmluaW5nIHRoZSBiYXNpcy4gIE1vcmUgdGhhbiBvbmUgcmVmZXJlbmNlIG1heSBiZSBwYWNrYWdlZCwgYW5kIG1vcmUKIHRoYW4gb25lIGJhc2lzIGNhbiBiZSBzcGVjaWZpZWQuICBUaGUgb2JqZWN0cyBwYWNrYWdlZCBhcmUgdGhvc2Ugbm90CiBjb250YWluZWQgaW4gdGhlIHVuaW9uIG9mIHRoZSBnaXZlbiBiYXNlcy4gIEVhY2ggYmFzaXMgY2FuIGJlCi1zcGVjaWZpZWQgZXhwbGljaXRseSAoZS5nLiwgXm1hc3Rlcn4xMCksIG9yIGltcGxpY2l0bHkgKGUuZy4sCi1tYXN0ZXJ+MTAuLm1hc3RlciwgbWFzdGVyIC0tc2luY2U9MTAuZGF5cy5hZ28pLgorc3BlY2lmaWVkIGV4cGxpY2l0bHkgKGUuZy4gYF5tYXN0ZXJcfjEwYCksIG9yIGltcGxpY2l0bHkgKGUuZy4KK2BtYXN0ZXJcfjEwLi5tYXN0ZXJgLCBgLS1zaW5jZT0xMC5kYXlzLmFnbyBtYXN0ZXJgKS4KIAogSXQgaXMgdmVyeSBpbXBvcnRhbnQgdGhhdCB0aGUgYmFzaXMgdXNlZCBiZSBoZWxkIGJ5IHRoZSBkZXN0aW5hdGlvbi4KLUl0IGlzIG9rYXkgdG8gZXJyIG9uIHRoZSBzaWRlIG9mIGNvbnNlcnZhdGlzbSwgY2F1c2luZyB0aGUgYnVuZGxlIGZpbGUKLXRvIGNvbnRhaW4gb2JqZWN0cyBhbHJlYWR5IGluIHRoZSBkZXN0aW5hdGlvbiBhcyB0aGVzZSBhcmUgaWdub3JlZAorSXQgaXMgb2theSB0byBlcnIgb24gdGhlIHNpZGUgb2YgY2F1dGlvbiwgY2F1c2luZyB0aGUgYnVuZGxlIGZpbGUKK3RvIGNvbnRhaW4gb2JqZWN0cyBhbHJlYWR5IGluIHRoZSBkZXN0aW5hdGlvbiwgYXMgdGhlc2UgYXJlIGlnbm9yZWQKIHdoZW4gdW5wYWNraW5nIGF0IHRoZSBkZXN0aW5hdGlvbi4KIAogRVhBTVBMRQogLS0tLS0tLQogCi1Bc3N1bWUgdHdvIHJlcG9zaXRvcmllcyBleGlzdCBhcyBSMSBvbiBtYWNoaW5lIEEsIGFuZCBSMiBvbiBtYWNoaW5lIEIuCitBc3N1bWUgeW91IHdhbnQgdG8gdHJhbnNmZXIgdGhlIGhpc3RvcnkgZnJvbSBhIHJlcG9zaXRvcnkgUjEgb24gbWFjaGluZSBBCit0byBhbm90aGVyIHJlcG9zaXRvcnkgUjIgb24gbWFjaGluZSBCLgogRm9yIHdoYXRldmVyIHJlYXNvbiwgZGlyZWN0IGNvbm5lY3Rpb24gYmV0d2VlbiBBIGFuZCBCIGlzIG5vdCBhbGxvd2VkLAotYnV0IHdlIGNhbiBtb3ZlIGRhdGEgZnJvbSBBIHRvIEIgdmlhIHNvbWUgbWVjaGFuaXNtIChDRCwgZW1haWwsIGV0YykuCi1XZSB3YW50IHRvIHVwZGF0ZSBSMiB3aXRoIGRldmVsb3BtZW50cyBtYWRlIG9uIGJyYW5jaCBtYXN0ZXIgaW4gUjEuCitidXQgd2UgY2FuIG1vdmUgZGF0YSBmcm9tIEEgdG8gQiB2aWEgc29tZSBtZWNoYW5pc20gKENELCBlbWFpbCwgZXRjLikuCitXZSB3YW50IHRvIHVwZGF0ZSBSMiB3aXRoIGRldmVsb3BtZW50IG1hZGUgb24gdGhlIGJyYW5jaCBtYXN0ZXIgaW4gUjEuCiAKLVRvIGNyZWF0ZSB0aGUgYnVuZGxlIHlvdSBoYXZlIHRvIHNwZWNpZnkgdGhlIGJhc2lzLiBZb3UgaGF2ZSBzb21lIG9wdGlvbnM6CitUbyBib290c3RyYXAgdGhlIHByb2Nlc3MsIHlvdSBjYW4gZmlyc3QgY3JlYXRlIGEgYnVuZGxlIHRoYXQgZG9lcyBub3QgaGF2ZQorYW55IGJhc2lzLiBZb3UgY2FuIHVzZSBhIHRhZyB0byByZW1lbWJlciB1cCB0byB3aGF0IGNvbW1pdCB5b3UgbGFzdAorcHJvY2Vzc2VkLCBpbiBvcmRlciB0byBtYWtlIGl0IGVhc3kgdG8gbGF0ZXIgdXBkYXRlIHRoZSBvdGhlciByZXBvc2l0b3J5Cit3aXRoIGFuIGluY3JlbWVudGFsIGJ1bmRsZToKIAotLSBXaXRob3V0IGJhc2lzLgotKwotVGhpcyBpcyB1c2VmdWwgd2hlbiBzZW5kaW5nIHRoZSB3aG9sZSBoaXN0b3J5LgorLS0tLS0tLS0tLS0tLS0tLQorbWFjaGluZUEkIGNkIFIxCittYWNoaW5lQSQgZ2l0IGJ1bmRsZSBjcmVhdGUgZmlsZS5idW5kbGUgbWFzdGVyCittYWNoaW5lQSQgZ2l0IHRhZyAtZiBsYXN0UjJidW5kbGUgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tCiAKLS0tLS0tLS0tLS0tLQotJCBnaXQgYnVuZGxlIGNyZWF0ZSBteWJ1bmRsZSBtYXN0ZXIKLS0tLS0tLS0tLS0tLQorVGhlbiB5b3UgdHJhbnNmZXIgZmlsZS5idW5kbGUgdG8gdGhlIHRhcmdldCBtYWNoaW5lIEIuIElmIHlvdSBhcmUgY3JlYXRpbmcKK3RoZSByZXBvc2l0b3J5IG9uIG1hY2hpbmUgQiwgdGhlbiB5b3UgY2FuIGNsb25lIGZyb20gdGhlIGJ1bmRsZSBhcyBpZiBpdAord2VyZSBhIHJlbW90ZSByZXBvc2l0b3J5IGluc3RlYWQgb2YgY3JlYXRpbmcgYW4gZW1wdHkgcmVwb3NpdG9yeSBhbmQgdGhlbgorcHVsbGluZyBvciBmZXRjaGluZyBvYmplY3RzIGZyb20gdGhlIGJ1bmRsZToKIAotLSBVc2luZyB0ZW1wb3JhbGx5IHRhZ3MuCi0rCi1XZSBzZXQgYSB0YWcgaW4gUjEgKGxhc3RSMmJ1bmRsZSkgYWZ0ZXIgdGhlIHByZXZpb3VzIHN1Y2ggdHJhbnNwb3J0LAotYW5kIG1vdmUgaXQgYWZ0ZXJ3YXJkcyB0byBoZWxwIGJ1aWxkIHRoZSBidW5kbGUuCistLS0tLS0tLS0tLS0tLS0tCittYWNoaW5lQiQgZ2l0IGNsb25lIC9ob21lL21lL3RtcC9maWxlLmJ1bmRsZSBSMgorLS0tLS0tLS0tLS0tLS0tLQogCi0tLS0tLS0tLS0tLS0KLSQgZ2l0IGJ1bmRsZSBjcmVhdGUgbXlidW5kbGUgbWFzdGVyIF5sYXN0UjJidW5kbGUKLSQgZ2l0IHRhZyAtZiBsYXN0UjJidW5kbGUgbWFzdGVyCi0tLS0tLS0tLS0tLS0KLQotLSBVc2luZyBhIHRhZyBwcmVzZW50IGluIGJvdGggcmVwb3NpdG9yaWVzCi0KLS0tLS0tLS0tLS0tLQotJCBnaXQgYnVuZGxlIGNyZWF0ZSBteWJ1bmRsZSBtYXN0ZXIgXnYxLjAuMAotLS0tLS0tLS0tLS0tCi0KLS0gQSBiYXNpcyBiYXNlZCBvbiB0aW1lLgotCi0tLS0tLS0tLS0tLS0KLSQgZ2l0IGJ1bmRsZSBjcmVhdGUgbXlidW5kbGUgbWFzdGVyIC0tc2luY2U9MTAuZGF5cy5hZ28KLS0tLS0tLS0tLS0tLQotCi0tIFdpdGggYSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGNvbW1pdHMKLQotLS0tLS0tLS0tLS0tCi0kIGdpdCBidW5kbGUgY3JlYXRlIG15YnVuZGxlIG1hc3RlciAtbiAxMAotLS0tLS0tLS0tLS0tCi0KLVRoZW4geW91IG1vdmUgbXlidW5kbGUgZnJvbSBBIHRvIEIsIGFuZCBpbiBSMiBvbiBCOgotCi0tLS0tLS0tLS0tLS0KLSQgZ2l0IGJ1bmRsZSB2ZXJpZnkgbXlidW5kbGUKLSQgZ2l0IGZldGNoIG15YnVuZGxlIG1hc3Rlcjpsb2NhbFJlZgotLS0tLS0tLS0tLS0tCi0KLVdpdGggc29tZXRoaW5nIGxpa2UgdGhpcyBpbiB0aGUgY29uZmlnIGluIFIyOgorVGhpcyB3aWxsIGRlZmluZSBhIHJlbW90ZSBjYWxsZWQgIm9yaWdpbiIgaW4gdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5IHRoYXQKK2xldHMgeW91IGZldGNoIGFuZCBwdWxsIGZyb20gdGhlIGJ1bmRsZS4gVGhlICRHSVRfRElSL2NvbmZpZyBmaWxlIGluIFIyIHdpbGwKK2hhdmUgYW4gZW50cnkgbGlrZSB0aGlzOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVtyZW1vdGUgImJ1bmRsZSJdCi0gICAgdXJsID0gL2hvbWUvbWUvdG1wL2ZpbGUuYmRsCitbcmVtb3RlICJvcmlnaW4iXQorICAgIHVybCA9IC9ob21lL21lL3RtcC9maWxlLmJ1bmRsZQogICAgIGZldGNoID0gcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVlvdSBjYW4gZmlyc3Qgc25lYWtlcm5ldCB0aGUgYnVuZGxlIGZpbGUgdG8gfi90bXAvZmlsZS5iZGwgYW5kCi10aGVuIHRoZXNlIGNvbW1hbmRzIG9uIG1hY2hpbmUgQjoKK1RvIHVwZGF0ZSB0aGUgcmVzdWx0aW5nIG1pbmUuZ2l0IHJlcG9zaXRvcnksIHlvdSBjYW4gZmV0Y2ggb3IgcHVsbCBhZnRlcgorcmVwbGFjaW5nIHRoZSBidW5kbGUgc3RvcmVkIGF0IC9ob21lL21lL3RtcC9maWxlLmJ1bmRsZSB3aXRoIGluY3JlbWVudGFsCit1cGRhdGVzLgogCi0tLS0tLS0tLS0tLS0KLSQgZ2l0IGxzLXJlbW90ZSBidW5kbGUKLSQgZ2l0IGZldGNoIGJ1bmRsZQotJCBnaXQgcHVsbCBidW5kbGUKLS0tLS0tLS0tLS0tLQorQWZ0ZXIgd29ya2luZyBzb21lIG1vcmUgaW4gdGhlIG9yaWdpbmFsIHJlcG9zaXRvcnksIHlvdSBjYW4gY3JlYXRlIGFuCitpbmNyZW1lbnRhbCBidW5kbGUgdG8gdXBkYXRlIHRoZSBvdGhlciByZXBvc2l0b3J5OgogCi13b3VsZCB0cmVhdCBpdCBhcyBpZiBpdCBpcyB0YWxraW5nIHdpdGggYSByZW1vdGUgc2lkZSBvdmVyIHRoZQotbmV0d29yay4KKy0tLS0tLS0tLS0tLS0tLS0KK21hY2hpbmVBJCBjZCBSMQorbWFjaGluZUEkIGdpdCBidW5kbGUgY3JlYXRlIGZpbGUuYnVuZGxlIGxhc3RSMmJ1bmRsZS4ubWFzdGVyCittYWNoaW5lQSQgZ2l0IHRhZyAtZiBsYXN0UjJidW5kbGUgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tCisKK1lvdSB0aGVuIHRyYW5zZmVyIHRoZSBidW5kbGUgdG8gdGhlIG90aGVyIG1hY2hpbmUgdG8gcmVwbGFjZQorL2hvbWUvbWUvdG1wL2ZpbGUuYnVuZGxlLCBhbmQgcHVsbCBmcm9tIGl0LgorCistLS0tLS0tLS0tLS0tLS0tCittYWNoaW5lQiQgY2QgUjIKK21hY2hpbmVCJCBnaXQgcHVsbAorLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Uga25vdyB1cCB0byB3aGF0IGNvbW1pdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50IHJlcG9zaXRvcnkgc2hvdWxkCitoYXZlIHRoZSBuZWNlc3Nhcnkgb2JqZWN0cywgeW91IGNhbiB1c2UgdGhhdCBrbm93bGVkZ2UgdG8gc3BlY2lmeSB0aGUKK2Jhc2lzLCBnaXZpbmcgYSBjdXQtb2ZmIHBvaW50IHRvIGxpbWl0IHRoZSByZXZpc2lvbnMgYW5kIG9iamVjdHMgdGhhdCBnbworaW4gdGhlIHJlc3VsdGluZyBidW5kbGUuIFRoZSBwcmV2aW91cyBleGFtcGxlIHVzZWQgbGFzdFIyYnVuZGxlIHRhZworZm9yIHRoaXMgcHVycG9zZSwgYnV0IHlvdSBjYW4gdXNlIGFueSBvdGhlciBvcHRpb25zIHRoYXQgeW91IHdvdWxkIGdpdmUgdG8KK3RoZSBsaW5rZ2l0OmdpdC1sb2dbMV0gY29tbWFuZC4gSGVyZSBhcmUgbW9yZSBleGFtcGxlczoKKworWW91IGNhbiB1c2UgYSB0YWcgdGhhdCBpcyBwcmVzZW50IGluIGJvdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJ1bmRsZSBjcmVhdGUgbXlidW5kbGUgdjEuMC4wLi5tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiB1c2UgYSBiYXNpcyBiYXNlZCBvbiB0aW1lOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBidW5kbGUgY3JlYXRlIG15YnVuZGxlIC0tc2luY2U9MTAuZGF5cyBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiB1c2UgdGhlIG51bWJlciBvZiBjb21taXRzOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBidW5kbGUgY3JlYXRlIG15YnVuZGxlIC0xMCBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBydW4gYGdpdC1idW5kbGUgdmVyaWZ5YCB0byBzZWUgaWYgeW91IGNhbiBleHRyYWN0IGZyb20gYSBidW5kbGUKK3RoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIGJhc2lzOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBidW5kbGUgdmVyaWZ5IG15YnVuZGxlCistLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2lsbCBsaXN0IHdoYXQgY29tbWl0cyB5b3UgbXVzdCBoYXZlIGluIG9yZGVyIHRvIGV4dHJhY3QgZnJvbSB0aGUKK2J1bmRsZSBhbmQgd2lsbCBlcnJvciBvdXQgaWYgeW91IGRvIG5vdCBoYXZlIHRoZW0uCisKK0EgYnVuZGxlIGZyb20gYSByZWNpcGllbnQgcmVwb3NpdG9yeSdzIHBvaW50IG9mIHZpZXcgaXMganVzdCBsaWtlIGEKK3JlZ3VsYXIgcmVwb3NpdG9yeSB3aGljaCBpdCBmZXRjaGVzIG9yIHB1bGxzIGZyb20uIFlvdSBjYW4sIGZvciBleGFtcGxlLCBtYXAKK3JlZmVyZW5jZXMgd2hlbiBmZXRjaGluZzoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggbXlidW5kbGUgbWFzdGVyOmxvY2FsUmVmCistLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYWxzbyBzZWUgd2hhdCByZWZlcmVuY2VzIGl0IG9mZmVycy4KKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbHMtcmVtb3RlIG15YnVuZGxlCistLS0tLS0tLS0tLS0tLS0tCiAKIEF1dGhvcgogLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQKaW5kZXggNjY4ZjY5Ny4uNThjOGQ2NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2F0LWZpbGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNhdC1maWxlLnR4dApAQCAtMywzMCArMywzMCBAQAogCiBOQU1FCiAtLS0tCi1naXQtY2F0LWZpbGUgLSBQcm92aWRlIGNvbnRlbnQgb3IgdHlwZS9zaXplIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMKK2dpdC1jYXQtZmlsZSAtIFByb3ZpZGUgY29udGVudCBvciB0eXBlIGFuZCBzaXplIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMKIAogCiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgY2F0LWZpbGUnIFstdCB8IC1zIHwgLWUgfCAtcCB8IDx0eXBlPl0gPG9iamVjdD4KLSdnaXQgY2F0LWZpbGUnIFstLWJhdGNoIHwgLS1iYXRjaC1jaGVja10gPCA8bGlzdC1vZi1vYmplY3RzPgorJ2dpdCBjYXQtZmlsZScgKC10IHwgLXMgfCAtZSB8IC1wIHwgPHR5cGU+KSA8b2JqZWN0PgorJ2dpdCBjYXQtZmlsZScgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSA8IDxsaXN0LW9mLW9iamVjdHM+CiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotSW4gdGhlIGZpcnN0IGZvcm0sIHByb3ZpZGVzIGNvbnRlbnQgb3IgdHlwZSBvZiBvYmplY3RzIGluIHRoZSByZXBvc2l0b3J5LiBUaGUKLXR5cGUgaXMgcmVxdWlyZWQgdW5sZXNzICctdCcgb3IgJy1wJyBpcyB1c2VkIHRvIGZpbmQgdGhlIG9iamVjdCB0eXBlLCBvciAnLXMnCi1pcyB1c2VkIHRvIGZpbmQgdGhlIG9iamVjdCBzaXplLgorSW4gaXRzIGZpcnN0IGZvcm0sIHRoZSBjb21tYW5kIHByb3ZpZGVzIHRoZSBjb250ZW50IG9yIHRoZSB0eXBlIG9mIGFuIG9iamVjdCBpbgordGhlIHJlcG9zaXRvcnkuIFRoZSB0eXBlIGlzIHJlcXVpcmVkIHVubGVzcyAnLXQnIG9yICctcCcgaXMgdXNlZCB0byBmaW5kIHRoZQorb2JqZWN0IHR5cGUsIG9yICctcycgaXMgdXNlZCB0byBmaW5kIHRoZSBvYmplY3Qgc2l6ZS4KIAotSW4gdGhlIHNlY29uZCBmb3JtLCBhIGxpc3Qgb2Ygb2JqZWN0IChzZXBhcmF0ZWQgYnkgTEZzKSBpcyBwcm92aWRlZCBvbiBzdGRpbiwKLWFuZCB0aGUgU0hBMSwgdHlwZSwgYW5kIHNpemUgb2YgZWFjaCBvYmplY3QgaXMgcHJpbnRlZCBvbiBzdGRvdXQuCitJbiB0aGUgc2Vjb25kIGZvcm0sIGEgbGlzdCBvZiBvYmplY3RzIChzZXBhcmF0ZWQgYnkgbGluZWZlZWRzKSBpcyBwcm92aWRlZCBvbgorc3RkaW4sIGFuZCB0aGUgU0hBMSwgdHlwZSwgYW5kIHNpemUgb2YgZWFjaCBvYmplY3QgaXMgcHJpbnRlZCBvbiBzdGRvdXQuCiAKIE9QVElPTlMKIC0tLS0tLS0KIDxvYmplY3Q+OjoKIAlUaGUgbmFtZSBvZiB0aGUgb2JqZWN0IHRvIHNob3cuCiAJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgb2JqZWN0IG5hbWVzLCBzZWUKLQkiU1BFQ0lGWUlORyBSRVZJU0lPTlMiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXQtcmV2LXBhcnNlWzFdLgorCXRoZSAiU1BFQ0lGWUlORyBSRVZJU0lPTlMiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXQtcmV2LXBhcnNlWzFdLgogCiAtdDo6CiAJSW5zdGVhZCBvZiB0aGUgY29udGVudCwgc2hvdyB0aGUgb2JqZWN0IHR5cGUgaWRlbnRpZmllZCBieQpAQCAtNTYsOCArNTYsOCBAQAogCXN0ZGluLiBNYXkgbm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyIG9wdGlvbnMgb3IgYXJndW1lbnRzLgogCiAtLWJhdGNoLWNoZWNrOjoKLQlQcmludCB0aGUgU0hBMSwgdHlwZSwgYW5kIHNpemUgb2YgZWFjaCBvYmplY3QgcHJvdmlkZWQgb24gc3RkaW4uIE1heSBub3QgYmUKLQljb21iaW5lZCB3aXRoIGFueSBvdGhlciBvcHRpb25zIG9yIGFyZ3VtZW50cy4KKwlQcmludCB0aGUgU0hBMSwgdHlwZSwgYW5kIHNpemUgb2YgZWFjaCBvYmplY3QgcHJvdmlkZWQgb24gc3RkaW4uIE1heSBub3QKKwliZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciBvcHRpb25zIG9yIGFyZ3VtZW50cy4KIAogT1VUUFVUCiAtLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWF0dHIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stYXR0ci50eHQKaW5kZXggOGMyYWMxMi4uNTA4MjRlMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stYXR0ci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stYXR0ci50eHQKQEAgLTE0LDcgKzE0LDcgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1Gb3IgZXZlcnkgcGF0aG5hbWUsIHRoaXMgY29tbWFuZCB3aWxsIGxpc3QgaWYgZWFjaCBhdHRyIGlzICd1bnNwZWNpZmllZCcsCitGb3IgZXZlcnkgcGF0aG5hbWUsIHRoaXMgY29tbWFuZCB3aWxsIGxpc3QgaWYgZWFjaCBhdHRyaWJ1dGUgaXMgJ3Vuc3BlY2lmaWVkJywKICdzZXQnLCBvciAndW5zZXQnIGFzIGEgZ2l0YXR0cmlidXRlIG9uIHRoYXQgcGF0aG5hbWUuCiAKIE9QVElPTlMKQEAgLTIzLDExICsyMywxMSBAQAogCVJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIGluc3RlYWQgb2YgZnJvbSB0aGUgY29tbWFuZC1saW5lLgogCiAtejo6Ci0JT25seSBtZWFuaW5nZnVsIHdpdGggYC0tc3RkaW5gOyBwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGgKLQlOVUwgY2hhcmFjdGVyIGluc3RlYWQgb2YgTEYuCisJT25seSBtZWFuaW5nZnVsIHdpdGggYC0tc3RkaW5gOyBwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggYQorCU5VTCBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBhIGxpbmVmZWVkIGNoYXJhY3Rlci4KIAogXC0tOjoKLQlJbnRlcnByZXQgYWxsIHByZWNlZGluZyBhcmd1bWVudHMgYXMgYXR0cmlidXRlcywgYW5kIGFsbCBmb2xsb3dpbmcKKwlJbnRlcnByZXQgYWxsIHByZWNlZGluZyBhcmd1bWVudHMgYXMgYXR0cmlidXRlcyBhbmQgYWxsIGZvbGxvd2luZwogCWFyZ3VtZW50cyBhcyBwYXRoIG5hbWVzLiBJZiBub3Qgc3VwcGxpZWQsIG9ubHkgdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwKIAliZSB0cmVhdGVkIGFzIGFuIGF0dHJpYnV0ZS4KIApAQCAtMzcsMTIgKzM3LDEyIEBACiBUaGUgb3V0cHV0IGlzIG9mIHRoZSBmb3JtOgogPHBhdGg+IENPTE9OIFNQIDxhdHRyaWJ1dGU+IENPTE9OIFNQIDxpbmZvPiBMRgogCi1XaGVyZSA8cGF0aD4gaXMgdGhlIHBhdGggb2YgYSBmaWxlIGJlaW5nIHF1ZXJpZWQsIDxhdHRyaWJ1dGU+IGlzIGFuIGF0dHJpYnV0ZQorPHBhdGg+IGlzIHRoZSBwYXRoIG9mIGEgZmlsZSBiZWluZyBxdWVyaWVkLCA8YXR0cmlidXRlPiBpcyBhbiBhdHRyaWJ1dGUKIGJlaW5nIHF1ZXJpZWQgYW5kIDxpbmZvPiBjYW4gYmUgZWl0aGVyOgogCiAndW5zcGVjaWZpZWQnOzsgd2hlbiB0aGUgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgcGF0aC4KLSd1bnNldCc7Owl3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgZGVmaW5lZCB0byBmYWxzZS4KLSdzZXQnOzsJCXdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIHRvIHRydWUuCisndW5zZXQnOzsJd2hlbiB0aGUgYXR0cmlidXRlIGlzIGRlZmluZWQgYXMgZmFsc2UuCisnc2V0Jzs7CQl3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgZGVmaW5lZCBhcyB0cnVlLgogPHZhbHVlPjs7CXdoZW4gYSB2YWx1ZSBoYXMgYmVlbiBhc3NpZ25lZCB0byB0aGUgYXR0cmlidXRlLgogCiBFWEFNUExFUwpAQCAtNjksNyArNjksNyBAQAogb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhOiBteUF0dHI6IHNldAogLS0tLS0tLS0tLS0tLS0tCiAKLSogTGlzdGluZyBhdHRyaWJ1dGUgZm9yIG11bHRpcGxlIGZpbGVzOgorKiBMaXN0aW5nIGFuIGF0dHJpYnV0ZSBmb3IgbXVsdGlwbGUgZmlsZXM6CiAtLS0tLS0tLS0tLS0tLS0KICQgZ2l0IGNoZWNrLWF0dHIgbXlBdHRyIC0tIG9yZy9leGFtcGxlL015Q2xhc3MuamF2YSBvcmcvZXhhbXBsZS9Ob015QXR0ci5qYXZhCiBvcmcvZXhhbXBsZS9NeUNsYXNzLmphdmE6IG15QXR0cjogc2V0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1yZWYtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CmluZGV4IDAzNDIyM2MuLjBiNzk4MmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CkBAIC0zLDUyICszLDc2IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1jaGVjay1yZWYtZm9ybWF0IC0gTWFrZSBzdXJlIHJlZiBuYW1lIGlzIHdlbGwgZm9ybWVkCitnaXQtY2hlY2stcmVmLWZvcm1hdCAtIEVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBuYW1lIGlzIHdlbGwgZm9ybWVkCiAKIFNZTk9QU0lTCiAtLS0tLS0tLQorW3ZlcnNlXQogJ2dpdCBjaGVjay1yZWYtZm9ybWF0JyA8cmVmbmFtZT4KKydnaXQgY2hlY2stcmVmLWZvcm1hdCcgWy0tYnJhbmNoXSA8YnJhbmNobmFtZS1zaG9ydGhhbmQ+CiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotQ2hlY2tzIGlmIGEgZ2l2ZW4gJ3JlZm5hbWUnIGlzIGFjY2VwdGFibGUsIGFuZCBleGl0cyBub24temVybyBpZgotaXQgaXMgbm90LgorQ2hlY2tzIGlmIGEgZ2l2ZW4gJ3JlZm5hbWUnIGlzIGFjY2VwdGFibGUsIGFuZCBleGl0cyB3aXRoIGEgbm9uLXplcm8KK3N0YXR1cyBpZiBpdCBpcyBub3QuCiAKIEEgcmVmZXJlbmNlIGlzIHVzZWQgaW4gZ2l0IHRvIHNwZWNpZnkgYnJhbmNoZXMgYW5kIHRhZ3MuICBBCi1icmFuY2ggaGVhZCBpcyBzdG9yZWQgdW5kZXIgYCRHSVRfRElSL3JlZnMvaGVhZHNgIGRpcmVjdG9yeSwgYW5kCi1hIHRhZyBpcyBzdG9yZWQgdW5kZXIgYCRHSVRfRElSL3JlZnMvdGFnc2AgZGlyZWN0b3J5LiAgZ2l0Ci1pbXBvc2VzIHRoZSBmb2xsb3dpbmcgcnVsZXMgb24gaG93IHJlZnMgYXJlIG5hbWVkOgorYnJhbmNoIGhlYWQgaXMgc3RvcmVkIHVuZGVyIHRoZSBgJEdJVF9ESVIvcmVmcy9oZWFkc2AgZGlyZWN0b3J5LCBhbmQKK2EgdGFnIGlzIHN0b3JlZCB1bmRlciB0aGUgYCRHSVRfRElSL3JlZnMvdGFnc2AgZGlyZWN0b3J5LiAgZ2l0CitpbXBvc2VzIHRoZSBmb2xsb3dpbmcgcnVsZXMgb24gaG93IHJlZmVyZW5jZXMgYXJlIG5hbWVkOgogCi0uIEl0IGNhbiBpbmNsdWRlIHNsYXNoIGAvYCBmb3IgaGllcmFyY2hpY2FsIChkaXJlY3RvcnkpCisuIFRoZXkgY2FuIGluY2x1ZGUgc2xhc2ggYC9gIGZvciBoaWVyYXJjaGljYWwgKGRpcmVjdG9yeSkKICAgZ3JvdXBpbmcsIGJ1dCBubyBzbGFzaC1zZXBhcmF0ZWQgY29tcG9uZW50IGNhbiBiZWdpbiB3aXRoIGEKLSAgZG90IGAuYDsKKyAgZG90IGAuYC4KIAotLiBJdCBjYW5ub3QgaGF2ZSB0d28gY29uc2VjdXRpdmUgZG90cyBgLi5gIGFueXdoZXJlOworLiBUaGV5IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgYC9gLiBUaGlzIGVuZm9yY2VzIHRoZSBwcmVzZW5jZSBvZiBhCisgIGNhdGVnb3J5IGxpa2UgYGhlYWRzL2AsIGB0YWdzL2AgZXRjLiBidXQgdGhlIGFjdHVhbCBuYW1lcyBhcmUgbm90CisgIHJlc3RyaWN0ZWQuCiAKLS4gSXQgY2Fubm90IGhhdmUgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXIgKGkuZS4gYnl0ZXMgd2hvc2UKKy4gVGhleSBjYW5ub3QgaGF2ZSB0d28gY29uc2VjdXRpdmUgZG90cyBgLi5gIGFueXdoZXJlLgorCisuIFRoZXkgY2Fubm90IGhhdmUgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzIChpLmUuIGJ5dGVzIHdob3NlCiAgIHZhbHVlcyBhcmUgbG93ZXIgdGhhbiBcMDQwLCBvciBcMTc3IGBERUxgKSwgc3BhY2UsIHRpbGRlIGB+YCwKICAgY2FyZXQgYHtjYXJldH1gLCBjb2xvbiBgOmAsIHF1ZXN0aW9uLW1hcmsgYD9gLCBhc3RlcmlzayBgKmAsCi0gIG9yIG9wZW4gYnJhY2tldCBgW2AgYW55d2hlcmU7CisgIG9yIG9wZW4gYnJhY2tldCBgW2AgYW55d2hlcmUuCiAKLS4gSXQgY2Fubm90IGVuZCB3aXRoIGEgc2xhc2ggYC9gLgorLiBUaGV5IGNhbm5vdCBlbmQgd2l0aCBhIHNsYXNoIGAvYCBub3IgYSBkb3QgYC5gLgogCi1UaGVzZSBydWxlcyBtYWtlcyBpdCBlYXN5IGZvciBzaGVsbCBzY3JpcHQgYmFzZWQgdG9vbHMgdG8gcGFyc2UKLXJlZm5hbWVzLCBwYXRobmFtZSBleHBhbnNpb24gYnkgdGhlIHNoZWxsIHdoZW4gYSByZWZuYW1lIGlzIHVzZWQKKy4gVGhleSBjYW5ub3QgZW5kIHdpdGggdGhlIHNlcXVlbmNlIGAubG9ja2AuCisKKy4gVGhleSBjYW5ub3QgY29udGFpbiBhIHNlcXVlbmNlIGBAe2AuCisKKy0gVGhleSBjYW5ub3QgY29udGFpbiBhIGBcXGAuCisKK1RoZXNlIHJ1bGVzIG1ha2UgaXQgZWFzeSBmb3Igc2hlbGwgc2NyaXB0IGJhc2VkIHRvb2xzIHRvIHBhcnNlCityZWZlcmVuY2UgbmFtZXMsIHBhdGhuYW1lIGV4cGFuc2lvbiBieSB0aGUgc2hlbGwgd2hlbiBhIHJlZmVyZW5jZSBuYW1lIGlzIHVzZWQKIHVucXVvdGVkIChieSBtaXN0YWtlKSwgYW5kIGFsc28gYXZvaWRzIGFtYmlndWl0aWVzIGluIGNlcnRhaW4KLXJlZm5hbWUgZXhwcmVzc2lvbnMgKHNlZSBsaW5rZ2l0OmdpdC1yZXYtcGFyc2VbMV0pLiAgTmFtZWx5OgorcmVmZXJlbmNlIG5hbWUgZXhwcmVzc2lvbnMgKHNlZSBsaW5rZ2l0OmdpdC1yZXYtcGFyc2VbMV0pOgogCi0uIGRvdWJsZS1kb3QgYC4uYCBhcmUgb2Z0ZW4gdXNlZCBhcyBpbiBgcmVmMS4ucmVmMmAsIGFuZCBpbiBzb21lCi0gIGNvbnRleHQgdGhpcyBub3RhdGlvbiBtZWFucyBge2NhcmV0fXJlZjEgcmVmMmAgKGkuZS4gbm90IGluCi0gIHJlZjEgYW5kIGluIHJlZjIpLgorLiBBIGRvdWJsZS1kb3QgYC4uYCBpcyBvZnRlbiB1c2VkIGFzIGluIGByZWYxLi5yZWYyYCwgYW5kIGluIHNvbWUKKyAgY29udGV4dHMgdGhpcyBub3RhdGlvbiBtZWFucyBge2NhcmV0fXJlZjEgcmVmMmAgKGkuZS4gbm90IGluCisgIGByZWYxYCBhbmQgaW4gYHJlZjJgKS4KIAotLiB0aWxkZSBgfmAgYW5kIGNhcmV0IGB7Y2FyZXR9YCBhcmUgdXNlZCB0byBpbnRyb2R1Y2UgcG9zdGZpeAorLiBBIHRpbGRlIGB+YCBhbmQgY2FyZXQgYHtjYXJldH1gIGFyZSB1c2VkIHRvIGludHJvZHVjZSB0aGUgcG9zdGZpeAogICAnbnRoIHBhcmVudCcgYW5kICdwZWVsIG9uaW9uJyBvcGVyYXRpb24uCiAKLS4gY29sb24gYDpgIGlzIHVzZWQgYXMgaW4gYHNyY3JlZjpkc3RyZWZgIHRvIG1lYW4gInVzZSBzcmNyZWZcJ3MKKy4gQSBjb2xvbiBgOmAgaXMgdXNlZCBhcyBpbiBgc3JjcmVmOmRzdHJlZmAgdG8gbWVhbiAidXNlIHNyY3JlZlwncwogICB2YWx1ZSBhbmQgc3RvcmUgaXQgaW4gZHN0cmVmIiBpbiBmZXRjaCBhbmQgcHVzaCBvcGVyYXRpb25zLgogICBJdCBtYXkgYWxzbyBiZSB1c2VkIHRvIHNlbGVjdCBhIHNwZWNpZmljIG9iamVjdCBzdWNoIGFzIHdpdGgKICAgJ2dpdC1jYXQtZmlsZSc6ICJnaXQgY2F0LWZpbGUgYmxvYiB2MS4zLjM6cmVmcy5jIi4KIAorLiBhdC1vcGVuLWJyYWNlIGBAe2AgaXMgdXNlZCBhcyBhIG5vdGF0aW9uIHRvIGFjY2VzcyBhIHJlZmxvZyBlbnRyeS4KKworV2l0aCB0aGUgYC0tYnJhbmNoYCBvcHRpb24sIGl0IGV4cGFuZHMgYSBicmFuY2ggbmFtZSBzaG9ydGhhbmQgYW5kCitwcmludHMgdGhlIG5hbWUgb2YgdGhlIGJyYW5jaCB0aGUgc2hvcnRoYW5kIHJlZmVycyB0by4KKworRVhBTVBMRQorLS0tLS0tLQorCitnaXQgY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBAey0xfTo6CisKK1ByaW50IHRoZSBuYW1lIG9mIHRoZSBwcmV2aW91cyBicmFuY2guCisKIAogR0lUCiAtLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dAppbmRleCA1ZWNlNmNjLi5hZDRiMzFlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0CkBAIC04LDI4ICs4LDI4IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgY2hlY2tvdXQnIFstcV0gWy1mXSBbLS10cmFjayB8IC0tbm8tdHJhY2tdIFstYiA8bmV3X2JyYW5jaD4gWy1sXV0gWy1tXSBbPGJyYW5jaD5dCisnZ2l0IGNoZWNrb3V0JyBbLXFdIFstZl0gWy1tXSBbPGJyYW5jaD5dCisnZ2l0IGNoZWNrb3V0JyBbLXFdIFstZl0gWy1tXSBbLWIgPG5ld19icmFuY2g+XSBbPHN0YXJ0X3BvaW50Pl0KICdnaXQgY2hlY2tvdXQnIFstZnwtLW91cnN8LS10aGVpcnN8LW18LS1jb25mbGljdD08c3R5bGU+XSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHM+Li4uCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQogCiBXaGVuIDxwYXRocz4gYXJlIG5vdCBnaXZlbiwgdGhpcyBjb21tYW5kIHN3aXRjaGVzIGJyYW5jaGVzIGJ5Ci11cGRhdGluZyB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSB0byByZWZsZWN0IHRoZSBzcGVjaWZpZWQKLWJyYW5jaCwgPGJyYW5jaD4sIGFuZCB1cGRhdGluZyBIRUFEIHRvIGJlIDxicmFuY2g+IG9yLCBpZgotc3BlY2lmaWVkLCA8bmV3X2JyYW5jaD4uICBVc2luZyAtYiB3aWxsIGNhdXNlIDxuZXdfYnJhbmNoPiB0bwotYmUgY3JlYXRlZDsgaW4gdGhpcyBjYXNlIHlvdSBjYW4gdXNlIHRoZSAtLXRyYWNrIG9yIC0tbm8tdHJhY2sKLW9wdGlvbnMsIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIGBnaXQgYnJhbmNoYC4KK3VwZGF0aW5nIHRoZSBpbmRleCwgd29ya2luZyB0cmVlLCBhbmQgSEVBRCB0byByZWZsZWN0IHRoZSBzcGVjaWZpZWQKK2JyYW5jaC4KIAotQXMgYSBjb252ZW5pZW5jZSwgLS10cmFjayB3aWxsIGRlZmF1bHQgdG8gY3JlYXRlIGEgYnJhbmNoIHdob3NlCi1uYW1lIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIHNwZWNpZmllZCBicmFuY2ggbmFtZSBieSBzdHJpcHBpbmcKLXRoZSBmaXJzdCBuYW1lc3BhY2UgbGV2ZWwuCitJZiBgLWJgIGlzIGdpdmVuLCBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCBhbmQgY2hlY2tlZCBvdXQsIGFzIGlmCitsaW5rZ2l0OmdpdC1icmFuY2hbMV0gd2VyZSBjYWxsZWQ7IGluIHRoaXMgY2FzZSB5b3UgY2FuCit1c2UgdGhlIC0tdHJhY2sgb3IgLS1uby10cmFjayBvcHRpb25zLCB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBgZ2l0CiticmFuY2hgLiAgQXMgYSBjb252ZW5pZW5jZSwgLS10cmFjayB3aXRob3V0IGAtYmAgaW1wbGllcyBicmFuY2gKK2NyZWF0aW9uOyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIC0tdHJhY2sgYmVsb3cuCiAKIFdoZW4gPHBhdGhzPiBhcmUgZ2l2ZW4sIHRoaXMgY29tbWFuZCBkb2VzICpub3QqIHN3aXRjaAogYnJhbmNoZXMuICBJdCB1cGRhdGVzIHRoZSBuYW1lZCBwYXRocyBpbiB0aGUgd29ya2luZyB0cmVlIGZyb20KIHRoZSBpbmRleCBmaWxlLCBvciBmcm9tIGEgbmFtZWQgPHRyZWUtaXNoPiAobW9zdCBvZnRlbiBhIGNvbW1pdCkuICBJbgotdGhpcyBjYXNlLCB0aGUgYC1iYCBvcHRpb25zIGlzIG1lYW5pbmdsZXNzIGFuZCBnaXZpbmcKLWVpdGhlciBvZiB0aGVtIHJlc3VsdHMgaW4gYW4gZXJyb3IuICA8dHJlZS1pc2g+IGFyZ3VtZW50IGNhbiBiZQordGhpcyBjYXNlLCB0aGUgYC1iYCBhbmQgYC0tdHJhY2tgIG9wdGlvbnMgYXJlIG1lYW5pbmdsZXNzIGFuZCBnaXZpbmcKK2VpdGhlciBvZiB0aGVtIHJlc3VsdHMgaW4gYW4gZXJyb3IuIFRoZSA8dHJlZS1pc2g+IGFyZ3VtZW50IGNhbiBiZQogdXNlZCB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgdHJlZS1pc2ggKGkuZS4gY29tbWl0LCB0YWcgb3IgdHJlZSkKIHRvIHVwZGF0ZSB0aGUgaW5kZXggZm9yIHRoZSBnaXZlbiBwYXRocyBiZWZvcmUgdXBkYXRpbmcgdGhlCiB3b3JraW5nIHRyZWUuCkBAIC02MiwyNyArNjIsMTYgQEAKIAogLWI6OgogCUNyZWF0ZSBhIG5ldyBicmFuY2ggbmFtZWQgPG5ld19icmFuY2g+IGFuZCBzdGFydCBpdCBhdAotCTxicmFuY2g+LiAgVGhlIG5ldyBicmFuY2ggbmFtZSBtdXN0IHBhc3MgYWxsIGNoZWNrcyBkZWZpbmVkCi0JYnkgbGlua2dpdDpnaXQtY2hlY2stcmVmLWZvcm1hdFsxXS4gIFNvbWUgb2YgdGhlc2UgY2hlY2tzCi0JbWF5IHJlc3RyaWN0IHRoZSBjaGFyYWN0ZXJzIGFsbG93ZWQgaW4gYSBicmFuY2ggbmFtZS4KKwk8c3RhcnRfcG9pbnQ+OyBzZWUgbGlua2dpdDpnaXQtYnJhbmNoWzFdIGZvciBkZXRhaWxzLgogCiAtdDo6CiAtLXRyYWNrOjoKLQlXaGVuIGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgc2V0IHVwIGNvbmZpZ3VyYXRpb24gc28gdGhhdCAnZ2l0LXB1bGwnCi0Jd2lsbCBhdXRvbWF0aWNhbGx5IHJldHJpZXZlIGRhdGEgZnJvbSB0aGUgc3RhcnQgcG9pbnQsIHdoaWNoIG11c3QgYmUKLQlhIGJyYW5jaC4gVXNlIHRoaXMgaWYgeW91IGFsd2F5cyBwdWxsIGZyb20gdGhlIHNhbWUgdXBzdHJlYW0gYnJhbmNoCi0JaW50byB0aGUgbmV3IGJyYW5jaCwgYW5kIGlmIHlvdSBkb24ndCB3YW50IHRvIHVzZSAiZ2l0IHB1bGwKLQk8cmVwb3NpdG9yeT4gPHJlZnNwZWM+IiBleHBsaWNpdGx5LiBUaGlzIGJlaGF2aW9yIGlzIHRoZSBkZWZhdWx0Ci0Jd2hlbiB0aGUgc3RhcnQgcG9pbnQgaXMgYSByZW1vdGUgYnJhbmNoLiBTZXQgdGhlCi0JYnJhbmNoLmF1dG9zZXR1cG1lcmdlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gYGZhbHNlYCBpZiB5b3Ugd2FudAotCSdnaXQtY2hlY2tvdXQnIGFuZCAnZ2l0LWJyYW5jaCcgdG8gYWx3YXlzIGJlaGF2ZSBhcyBpZiAnLS1uby10cmFjaycgd2VyZQotCWdpdmVuLiBTZXQgaXQgdG8gYGFsd2F5c2AgaWYgeW91IHdhbnQgdGhpcyBiZWhhdmlvciB3aGVuIHRoZQotCXN0YXJ0LXBvaW50IGlzIGVpdGhlciBhIGxvY2FsIG9yIHJlbW90ZSBicmFuY2guCisJV2hlbiBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHNldCB1cCAidXBzdHJlYW0iIGNvbmZpZ3VyYXRpb24uIFNlZQorCSItLXRyYWNrIiBpbiBsaW5rZ2l0OmdpdC1icmFuY2hbMV0gZm9yIGRldGFpbHMuCiArCi1JZiBubyAnLWInIG9wdGlvbiB3YXMgZ2l2ZW4sIHRoZSBuYW1lIG9mIHRoZSBuZXcgYnJhbmNoIHdpbGwgYmUKLWRlcml2ZWQgZnJvbSB0aGUgcmVtb3RlIGJyYW5jaCwgYnkgYXR0ZW1wdGluZyB0byBndWVzcyB0aGUgbmFtZQotb2YgdGhlIGJyYW5jaCBvbiByZW1vdGUgc3lzdGVtLiAgSWYgInJlbW90ZXMvIiBvciAicmVmcy9yZW1vdGVzLyIKLWFyZSBwcmVmaXhlZCwgaXQgaXMgc3RyaXBwZWQgYXdheSwgYW5kIHRoZW4gdGhlIHBhcnQgdXAgdG8gdGhlCitJZiBubyAnLWInIG9wdGlvbiBpcyBnaXZlbiwgdGhlIG5hbWUgb2YgdGhlIG5ldyBicmFuY2ggd2lsbCBiZQorZGVyaXZlZCBmcm9tIHRoZSByZW1vdGUgYnJhbmNoLiAgSWYgInJlbW90ZXMvIiBvciAicmVmcy9yZW1vdGVzLyIKK2lzIHByZWZpeGVkIGl0IGlzIHN0cmlwcGVkIGF3YXksIGFuZCB0aGVuIHRoZSBwYXJ0IHVwIHRvIHRoZQogbmV4dCBzbGFzaCAod2hpY2ggd291bGQgYmUgdGhlIG5pY2tuYW1lIG9mIHRoZSByZW1vdGUpIGlzIHJlbW92ZWQuCiBUaGlzIHdvdWxkIHRlbGwgdXMgdG8gdXNlICJoYWNrIiBhcyB0aGUgbG9jYWwgYnJhbmNoIHdoZW4gYnJhbmNoaW5nCiBvZmYgb2YgIm9yaWdpbi9oYWNrIiAob3IgInJlbW90ZXMvb3JpZ2luL2hhY2siLCBvciBldmVuCkBAIC05MSwxMiArODAsMTIgQEAKIGV4cGxpY2l0bHkgZ2l2ZSBhIG5hbWUgd2l0aCAnLWInIGluIHN1Y2ggYSBjYXNlLgogCiAtLW5vLXRyYWNrOjoKLQlJZ25vcmUgdGhlIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCURvIG5vdCBzZXQgdXAgInVwc3RyZWFtIiBjb25maWd1cmF0aW9uLCBldmVuIGlmIHRoZQorCWJyYW5jaC5hdXRvc2V0dXBtZXJnZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHRydWUuCiAKIC1sOjoKLQlDcmVhdGUgdGhlIG5ldyBicmFuY2gncyByZWZsb2cuICBUaGlzIGFjdGl2YXRlcyByZWNvcmRpbmcgb2YKLQlhbGwgY2hhbmdlcyBtYWRlIHRvIHRoZSBicmFuY2ggcmVmLCBlbmFibGluZyB1c2Ugb2YgZGF0ZQotCWJhc2VkIHNoYTEgZXhwcmVzc2lvbnMgc3VjaCBhcyAiPGJyYW5jaG5hbWU+QFx7eWVzdGVyZGF5fSIuCisJQ3JlYXRlIHRoZSBuZXcgYnJhbmNoJ3MgcmVmbG9nOyBzZWUgbGlua2dpdDpnaXQtYnJhbmNoWzFdIGZvcgorCWRldGFpbHMuCiAKIC1tOjoKIC0tbWVyZ2U6OgpAQCAtMTI0LDE5ICsxMTMsMjggQEAKIAkibWVyZ2UiIChkZWZhdWx0KSBhbmQgImRpZmYzIiAoaW4gYWRkaXRpb24gdG8gd2hhdCBpcyBzaG93biBieQogCSJtZXJnZSIgc3R5bGUsIHNob3dzIHRoZSBvcmlnaW5hbCBjb250ZW50cykuCiAKKzxicmFuY2g+OjoKKwlCcmFuY2ggdG8gY2hlY2tvdXQ7IGlmIGl0IHJlZmVycyB0byBhIGJyYW5jaCAoaS5lLiwgYSBuYW1lIHRoYXQsCisJd2hlbiBwcmVwZW5kZWQgd2l0aCAicmVmcy9oZWFkcy8iLCBpcyBhIHZhbGlkIHJlZiksIHRoZW4gdGhhdAorCWJyYW5jaCBpcyBjaGVja2VkIG91dC4gT3RoZXJ3aXNlLCBpZiBpdCByZWZlcnMgdG8gYSB2YWxpZAorCWNvbW1pdCwgeW91ciBIRUFEIGJlY29tZXMgImRldGFjaGVkIiBhbmQgeW91IGFyZSBubyBsb25nZXIgb24KKwlhbnkgYnJhbmNoIChzZWUgYmVsb3cgZm9yIGRldGFpbHMpLgorKworQXMgYSBzcGVjaWFsIGNhc2UsIHRoZSBgIkBcey1OXH0iYCBzeW50YXggZm9yIHRoZSBOLXRoIGxhc3QgYnJhbmNoCitjaGVja3Mgb3V0IHRoZSBicmFuY2ggKGluc3RlYWQgb2YgZGV0YWNoaW5nKS4gIFlvdSBtYXkgYWxzbyBzcGVjaWZ5CitgLWAgd2hpY2ggaXMgc3lub255bW91cyB3aXRoIGAiQFx7LTFcfSJgLgorCiA8bmV3X2JyYW5jaD46OgogCU5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoLgogCis8c3RhcnRfcG9pbnQ+OjoKKwlUaGUgbmFtZSBvZiBhIGNvbW1pdCBhdCB3aGljaCB0byBzdGFydCB0aGUgbmV3IGJyYW5jaDsgc2VlCisJbGlua2dpdDpnaXQtYnJhbmNoWzFdIGZvciBkZXRhaWxzLiBEZWZhdWx0cyB0byBIRUFELgorCiA8dHJlZS1pc2g+OjoKIAlUcmVlIHRvIGNoZWNrb3V0IGZyb20gKHdoZW4gcGF0aHMgYXJlIGdpdmVuKS4gSWYgbm90IHNwZWNpZmllZCwKIAl0aGUgaW5kZXggd2lsbCBiZSB1c2VkLgogCi08YnJhbmNoPjo6Ci0JQnJhbmNoIHRvIGNoZWNrb3V0ICh3aGVuIG5vIHBhdGhzIGFyZSBnaXZlbik7IG1heSBiZSBhbnkgb2JqZWN0Ci0JSUQgdGhhdCByZXNvbHZlcyB0byBhIGNvbW1pdC4gIERlZmF1bHRzIHRvIEhFQUQuCi0rCi1XaGVuIHRoaXMgcGFyYW1ldGVyIG5hbWVzIGEgbm9uLWJyYW5jaCAoYnV0IHN0aWxsIGEgdmFsaWQgY29tbWl0IG9iamVjdCksCi15b3VyIEhFQUQgYmVjb21lcyAnZGV0YWNoZWQnLgogCiAKIERldGFjaGVkIEhFQUQKQEAgLTE1MiwxMiArMTUwLDEyIEBACiAtLS0tLS0tLS0tLS0KIAogRWFybGllciB2ZXJzaW9ucyBvZiBnaXQgZGlkIG5vdCBhbGxvdyB0aGlzIGFuZCBhc2tlZCB5b3UgdG8KLWNyZWF0ZSBhIHRlbXBvcmFyeSBicmFuY2ggdXNpbmcgYC1iYCBvcHRpb24sIGJ1dCBzdGFydGluZyBmcm9tCitjcmVhdGUgYSB0ZW1wb3JhcnkgYnJhbmNoIHVzaW5nIHRoZSBgLWJgIG9wdGlvbiwgYnV0IHN0YXJ0aW5nIGZyb20KIHZlcnNpb24gMS41LjAsIHRoZSBhYm92ZSBjb21tYW5kICdkZXRhY2hlcycgeW91ciBIRUFEIGZyb20gdGhlCi1jdXJyZW50IGJyYW5jaCBhbmQgZGlyZWN0bHkgcG9pbnQgYXQgdGhlIGNvbW1pdCBuYW1lZCBieSB0aGUgdGFnCi0oYHYyLjYuMThgIGluIHRoZSBhYm92ZSBleGFtcGxlKS4KK2N1cnJlbnQgYnJhbmNoIGFuZCBkaXJlY3RseSBwb2ludHMgYXQgdGhlIGNvbW1pdCBuYW1lZCBieSB0aGUgdGFnCisoYHYyLjYuMThgIGluIHRoZSBleGFtcGxlIGFib3ZlKS4KIAotWW91IGNhbiB1c2UgdXN1YWwgZ2l0IGNvbW1hbmRzIHdoaWxlIGluIHRoaXMgc3RhdGUuICBZb3UgY2FuIHVzZQorWW91IGNhbiB1c2UgYWxsIGdpdCBjb21tYW5kcyB3aGlsZSBpbiB0aGlzIHN0YXRlLiAgWW91IGNhbiB1c2UKIGBnaXQgcmVzZXQgLS1oYXJkICRvdGhlcmNvbW1pdGAgdG8gZnVydGhlciBtb3ZlIGFyb3VuZCwgZm9yCiBleGFtcGxlLiAgWW91IGNhbiBtYWtlIGNoYW5nZXMgYW5kIGNyZWF0ZSBhIG5ldyBjb21taXQgb24gdG9wIG9mCiBhIGRldGFjaGVkIEhFQUQuICBZb3UgY2FuIGV2ZW4gY3JlYXRlIGEgbWVyZ2UgYnkgdXNpbmcgYGdpdApAQCAtMjAyLDcgKzIwMCw3IEBACiAkIGdpdCBjaGVja291dCAtLSBoZWxsby5jCiAtLS0tLS0tLS0tLS0KIAotLiBBZnRlciB3b3JraW5nIGluIGEgd3JvbmcgYnJhbmNoLCBzd2l0Y2hpbmcgdG8gdGhlIGNvcnJlY3QKKy4gQWZ0ZXIgd29ya2luZyBpbiB0aGUgd3JvbmcgYnJhbmNoLCBzd2l0Y2hpbmcgdG8gdGhlIGNvcnJlY3QKIGJyYW5jaCB3b3VsZCBiZSBkb25lIHVzaW5nOgogKwogLS0tLS0tLS0tLS0tCkBAIC0yMTAsNyArMjA4LDcgQEAKIC0tLS0tLS0tLS0tLQogKwogSG93ZXZlciwgeW91ciAid3JvbmciIGJyYW5jaCBhbmQgY29ycmVjdCAibXl0b3BpYyIgYnJhbmNoIG1heQotZGlmZmVyIGluIGZpbGVzIHRoYXQgeW91IGhhdmUgbG9jYWxseSBtb2RpZmllZCwgaW4gd2hpY2ggY2FzZSwKK2RpZmZlciBpbiBmaWxlcyB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIGxvY2FsbHksIGluIHdoaWNoIGNhc2UKIHRoZSBhYm92ZSBjaGVja291dCB3b3VsZCBmYWlsIGxpa2UgdGhpczoKICsKIC0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS50eHQKaW5kZXggNzRkMTRjNC4uN2RlZWZkYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnkudHh0CkBAIC03LDcgKzcsNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQgY2hlcnJ5JyBbLXZdIDx1cHN0cmVhbT4gWzxoZWFkPl0gWzxsaW1pdD5dCisnZ2l0IGNoZXJyeScgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtNTEsNiArNTEsNyBAQAogCiA8dXBzdHJlYW0+OjoKIAlVcHN0cmVhbSBicmFuY2ggdG8gY29tcGFyZSBhZ2FpbnN0LgorCURlZmF1bHRzIHRvIHRoZSBmaXJzdCB0cmFja2VkIHJlbW90ZSBicmFuY2gsIGlmIGF2YWlsYWJsZS4KIAogPGhlYWQ+OjoKIAlXb3JraW5nIGJyYW5jaDsgZGVmYXVsdHMgdG8gSEVBRC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dAppbmRleCA4YTExNDUwLi5iZTg5NGFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2xlYW4udHh0CkBAIC0xMiwxNCArMTIsMTcgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1SZW1vdmVzIGZpbGVzIHVua25vd24gdG8gZ2l0LiAgVGhpcyBhbGxvd3MgdG8gY2xlYW4gdGhlIHdvcmtpbmcgdHJlZQotZnJvbSBmaWxlcyB0aGF0IGFyZSBub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sLiAgSWYgdGhlICcteCcgb3B0aW9uIGlzCi1zcGVjaWZpZWQsIGlnbm9yZWQgZmlsZXMgYXJlIGFsc28gcmVtb3ZlZCwgYWxsb3dpbmcgdG8gcmVtb3ZlIGFsbAotYnVpbGQgcHJvZHVjdHMuCisKK0NsZWFucyB0aGUgd29ya2luZyB0cmVlIGJ5IHJlY3Vyc2l2ZWx5IHJlbW92aW5nIGZpbGVzIHRoYXQgYXJlIG5vdAordW5kZXIgdmVyc2lvbiBjb250cm9sLCBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworTm9ybWFsbHksIG9ubHkgZmlsZXMgdW5rbm93biB0byBnaXQgYXJlIHJlbW92ZWQsIGJ1dCBpZiB0aGUgJy14Jworb3B0aW9uIGlzIHNwZWNpZmllZCwgaWdub3JlZCBmaWxlcyBhcmUgYWxzbyByZW1vdmVkLiBUaGlzIGNhbiwgZm9yCitleGFtcGxlLCBiZSB1c2VmdWwgdG8gcmVtb3ZlIGFsbCBidWlsZCBwcm9kdWN0cy4KKwogSWYgYW55IG9wdGlvbmFsIGA8cGF0aD4uLi5gIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIG9ubHkgdGhvc2UgcGF0aHMKIGFyZSBhZmZlY3RlZC4KIAotCiBPUFRJT05TCiAtLS0tLS0tCiAtZDo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQKaW5kZXggNDA3MmY0MC4uMmM2M2EwZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dApAQCAtNzIsOCArNzIsMTYgQEAKIHdoaWNoIGF1dG9tYXRpY2FsbHkgY2FsbCBgZ2l0IGdjIC0tYXV0b2AuIChTZWUgbGlua2dpdDpnaXQtZ2NbMV0uKQogSWYgdGhlc2Ugb2JqZWN0cyBhcmUgcmVtb3ZlZCBhbmQgd2VyZSByZWZlcmVuY2VkIGJ5IHRoZSBjbG9uZWQgcmVwb3NpdG9yeSwKIHRoZW4gdGhlIGNsb25lZCByZXBvc2l0b3J5IHdpbGwgYmVjb21lIGNvcnJ1cHQuCi0KLQorKworTm90ZSB0aGF0IHJ1bm5pbmcgYGdpdCByZXBhY2tgIHdpdGhvdXQgdGhlIGAtbGAgb3B0aW9uIGluIGEgcmVwb3NpdG9yeQorY2xvbmVkIHdpdGggYC1zYCB3aWxsIGNvcHkgb2JqZWN0cyBmcm9tIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBpbnRvIGEgcGFjaworaW4gdGhlIGNsb25lZCByZXBvc2l0b3J5LCByZW1vdmluZyB0aGUgZGlzayBzcGFjZSBzYXZpbmdzIG9mIGBjbG9uZSAtc2AuCitJdCBpcyBzYWZlLCBob3dldmVyLCB0byBydW4gYGdpdCBnY2AsIHdoaWNoIHVzZXMgdGhlIGAtbGAgb3B0aW9uIGJ5CitkZWZhdWx0LgorKworSWYgeW91IHdhbnQgdG8gYnJlYWsgdGhlIGRlcGVuZGVuY3kgb2YgYSByZXBvc2l0b3J5IGNsb25lZCB3aXRoIGAtc2Agb24KK2l0cyBzb3VyY2UgcmVwb3NpdG9yeSwgeW91IGNhbiBzaW1wbHkgcnVuIGBnaXQgcmVwYWNrIC1hYCB0byBjb3B5IGFsbAorb2JqZWN0cyBmcm9tIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBpbnRvIGEgcGFjayBpbiB0aGUgY2xvbmVkIHJlcG9zaXRvcnkuCiAKIC0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pjo6CiAJSWYgdGhlIHJlZmVyZW5jZSByZXBvc2l0b3J5IGlzIG9uIHRoZSBsb2NhbCBtYWNoaW5lCkBAIC0xNDksNyArMTU3LDcgQEAKIAlwYXJ0IG9mIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBpcyB1c2VkIGlmIG5vIGRpcmVjdG9yeSBpcwogCWV4cGxpY2l0bHkgZ2l2ZW4gKCJyZXBvIiBmb3IgIi9wYXRoL3RvL3JlcG8uZ2l0IiBhbmQgImZvbyIKIAlmb3IgImhvc3QueHo6Zm9vLy5naXQiKS4gIENsb25pbmcgaW50byBhbiBleGlzdGluZyBkaXJlY3RvcnkKLQlpcyBub3QgYWxsb3dlZC4KKwlpcyBvbmx5IGFsbG93ZWQgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eS4KIAogOmdpdC1jbG9uZTogMQogaW5jbHVkZTo6dXJscy50eHRbXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbmZpZy50eHQKaW5kZXggMTlhODkxNy4uZjY4YjE5OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb25maWcudHh0CkBAIC0xMSw3ICsxMSw3IEBACiBbdmVyc2VdCiAnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIFt0eXBlXSBbLXp8LS1udWxsXSBuYW1lIFt2YWx1ZSBbdmFsdWVfcmVnZXhdXQogJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbdHlwZV0gLS1hZGQgbmFtZSB2YWx1ZQotJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbdHlwZV0gLS1yZXBsYWNlLWFsbCBuYW1lIFt2YWx1ZSBbdmFsdWVfcmVnZXhdXQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbdHlwZV0gLS1yZXBsYWNlLWFsbCBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0KICdnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gW3R5cGVdIFstenwtLW51bGxdIC0tZ2V0IG5hbWUgW3ZhbHVlX3JlZ2V4XQogJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbdHlwZV0gWy16fC0tbnVsbF0gLS1nZXQtYWxsIG5hbWUgW3ZhbHVlX3JlZ2V4XQogJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbdHlwZV0gWy16fC0tbnVsbF0gLS1nZXQtcmVnZXhwIG5hbWVfcmVnZXggW3ZhbHVlX3JlZ2V4XQpAQCAtMjIsNiArMjIsNyBAQAogJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbLXp8LS1udWxsXSAtbCB8IC0tbGlzdAogJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSAtLWdldC1jb2xvciBuYW1lIFtkZWZhdWx0XQogJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSAtLWdldC1jb2xvcmJvb2wgbmFtZSBbc3Rkb3V0LWlzLXR0eV0KKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gLWUgfCAtLWVkaXQKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC02OCw3ICs2OSw4IEBACiAKIC0tYWRkOjoKIAlBZGRzIGEgbmV3IGxpbmUgdG8gdGhlIG9wdGlvbiB3aXRob3V0IGFsdGVyaW5nIGFueSBleGlzdGluZwotCXZhbHVlcy4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgcHJvdmlkaW5nICdeJCcgYXMgdGhlIHZhbHVlX3JlZ2V4LgorCXZhbHVlcy4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgcHJvdmlkaW5nICdeJCcgYXMgdGhlIHZhbHVlX3JlZ2V4CisJaW4gYC0tcmVwbGFjZS1hbGxgLgogCiAtLWdldDo6CiAJR2V0IHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiBrZXkgKG9wdGlvbmFsbHkgZmlsdGVyZWQgYnkgYSByZWdleApAQCAtMTMwLDYgKzEzMiwxMCBAQAogCWluIHRoZSBjb25maWcgZmlsZSB3aWxsIGNhdXNlIHRoZSB2YWx1ZSB0byBiZSBtdWx0aXBsaWVkCiAJYnkgMTAyNCwgMTA0ODU3Niwgb3IgMTA3Mzc0MTgyNCBwcmlvciB0byBvdXRwdXQuCiAKKy0tYm9vbC1vci1pbnQ6OgorCSdnaXQtY29uZmlnJyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBvdXRwdXQgbWF0Y2hlcyB0aGUgZm9ybWF0IG9mCisJZWl0aGVyIC0tYm9vbCBvciAtLWludCwgYXMgZGVzY3JpYmVkIGFib3ZlLgorCiAtejo6CiAtLW51bGw6OgogCUZvciBhbGwgb3B0aW9ucyB0aGF0IG91dHB1dCB2YWx1ZXMgYW5kL29yIGtleXMsIGFsd2F5cwpAQCAtMTUwLDEzICsxNTYsMTggQEAKIAlXaGVuIHRoZSBjb2xvciBzZXR0aW5nIGZvciBgbmFtZWAgaXMgdW5kZWZpbmVkLCB0aGUgY29tbWFuZCB1c2VzCiAJYGNvbG9yLnVpYCBhcyBmYWxsYmFjay4KIAotLS1nZXQtY29sb3IgbmFtZSBkZWZhdWx0OjoKKy0tZ2V0LWNvbG9yIG5hbWUgW2RlZmF1bHRdOjoKIAogCUZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQgZm9yIGBuYW1lYCAoZS5nLiBgY29sb3IuZGlmZi5uZXdgKSBhbmQKIAlvdXRwdXQgaXQgYXMgdGhlIEFOU0kgY29sb3IgZXNjYXBlIHNlcXVlbmNlIHRvIHRoZSBzdGFuZGFyZAogCW91dHB1dC4gIFRoZSBvcHRpb25hbCBgZGVmYXVsdGAgcGFyYW1ldGVyIGlzIHVzZWQgaW5zdGVhZCwgaWYKIAl0aGVyZSBpcyBubyBjb2xvciBjb25maWd1cmVkIGZvciBgbmFtZWAuCiAKKy1lOjoKKy0tZWRpdDo6CisJT3BlbnMgYW4gZWRpdG9yIHRvIG1vZGlmeSB0aGUgc3BlY2lmaWVkIGNvbmZpZyBmaWxlOyBlaXRoZXIKKwknLS1zeXN0ZW0nLCAnLS1nbG9iYWwnLCBvciByZXBvc2l0b3J5IChkZWZhdWx0KS4KKwogW1tGSUxFU11dCiBGSUxFUwogLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c2V4cG9ydGNvbW1pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNleHBvcnRjb21taXQudHh0CmluZGV4IDJkYTg1ODguLmFiYWFmMjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c2V4cG9ydGNvbW1pdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzZXhwb3J0Y29tbWl0LnR4dApAQCAtNjMsNiArNjMsMTAgQEAKIC11OjoKIAlVcGRhdGUgYWZmZWN0ZWQgZmlsZXMgZnJvbSBDVlMgcmVwb3NpdG9yeSBiZWZvcmUgYXR0ZW1wdGluZyBleHBvcnQuCiAKKy1rOjoKKwlSZXZlcnNlIENWUyBrZXl3b3JkIGV4cGFuc2lvbiAoZS5nLiAkUmV2aXNpb246IDEuMi4zLjQkCisJYmVjb21lcyAkUmV2aXNpb24kKSBpbiB3b3JraW5nIENWUyBjaGVja291dCBiZWZvcmUgYXBwbHlpbmcgcGF0Y2guCisKIC13OjoKIAlTcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgQ1ZTIGNoZWNrb3V0IHRvIHVzZSBmb3IgdGhlIGV4cG9ydC4gVGhpcwogCW9wdGlvbiBkb2VzIG5vdCByZXF1aXJlIEdJVF9ESVIgdG8gYmUgc2V0IGJlZm9yZSBleGVjdXRpb24gaWYgdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LnR4dAppbmRleCBiN2E4YzEwLi42MTRlNzY5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC50eHQKQEAgLTI0LDYgKzI0LDkgQEAKIFNwbGl0dGluZyB0aGUgQ1ZTIGxvZyBpbnRvIHBhdGNoIHNldHMgaXMgZG9uZSBieSAnY3ZzcHMnLgogQXQgbGVhc3QgdmVyc2lvbiAyLjEgaXMgcmVxdWlyZWQuCiAKKypXQVJOSU5HOiogZm9yIGNlcnRhaW4gc2l0dWF0aW9ucyB0aGUgaW1wb3J0IGxlYWRzIHRvIGluY29ycmVjdCByZXN1bHRzLgorUGxlYXNlIHNlZSB0aGUgc2VjdGlvbiA8PGlzc3VlcyxJU1NVRVM+PiBmb3IgZnVydGhlciByZWZlcmVuY2UuCisKIFlvdSBzaG91bGQgKm5ldmVyKiBkbyBhbnkgd29yayBvZiB5b3VyIG93biBvbiB0aGUgYnJhbmNoZXMgdGhhdCBhcmUKIGNyZWF0ZWQgYnkgJ2dpdC1jdnNpbXBvcnQnLiAgQnkgZGVmYXVsdCBpbml0aWFsIGltcG9ydCB3aWxsIGNyZWF0ZSBhbmQgcG9wdWxhdGUgYQogIm1hc3RlciIgYnJhbmNoIGZyb20gdGhlIENWUyByZXBvc2l0b3J5J3MgbWFpbiBicmFuY2ggd2hpY2ggeW91J3JlIGZyZWUKQEAgLTYyLDcgKzY1LDcgQEAKIC1yIDxyZW1vdGU+OjoKIAlUaGUgZ2l0IHJlbW90ZSB0byBpbXBvcnQgdGhpcyBDVlMgcmVwb3NpdG9yeSBpbnRvLgogCU1vdmVzIGFsbCBDVlMgYnJhbmNoZXMgaW50byByZW1vdGVzLzxyZW1vdGU+LzxicmFuY2g+Ci0JYWtpbiB0byB0aGUgJ2dpdC1jbG9uZScgIi0tdXNlLXNlcGFyYXRlLXJlbW90ZSIgb3B0aW9uLgorCWFraW4gdG8gdGhlIHdheSAnZ2l0LWNsb25lJyB1c2VzICdvcmlnaW4nIGJ5IGRlZmF1bHQuCiAKIC1vIDxicmFuY2gtZm9yLUhFQUQ+OjoKIAlXaGVuIG5vIHJlbW90ZSBpcyBzcGVjaWZpZWQgKHZpYSAtcikgdGhlICdIRUFEJyBicmFuY2gKQEAgLTE2NCw2ICsxNjcsMzkgQEAKIE90aGVyd2lzZSwgc3VjY2VzcyBpcyBpbmRpY2F0ZWQgdGhlIFVuaXggd2F5LCBpLmUuIGJ5IHNpbXBseSBleGl0aW5nIHdpdGgKIGEgemVybyBleGl0IHN0YXR1cy4KIAorW1tpc3N1ZXNdXQorSVNTVUVTCistLS0tLS0KK1Byb2JsZW1zIHJlbGF0ZWQgdG8gdGltZXN0YW1wczoKKworICogSWYgdGltZXN0YW1wcyBvZiBjb21taXRzIGluIHRoZSBjdnMgcmVwb3NpdG9yeSBhcmUgbm90IHN0YWJsZSBlbm91Z2gKKyAgIHRvIGJlIHVzZWQgZm9yIG9yZGVyaW5nIGNvbW1pdHMgY2hhbmdlcyBtYXkgc2hvdyB1cCBpbiB0aGUgd3JvbmcKKyAgIG9yZGVyLgorICogSWYgYW55IGZpbGVzIHdlcmUgZXZlciAiY3ZzIGltcG9ydCJlZCBtb3JlIHRoYW4gb25jZSAoZS5nLiwgaW1wb3J0IG9mCisgICBtb3JlIHRoYW4gb25lIHZlbmRvciByZWxlYXNlKSB0aGUgSEVBRCBjb250YWlucyB0aGUgd3JvbmcgY29udGVudC4KKyAqIElmIHRoZSB0aW1lc3RhbXAgb3JkZXIgb2YgZGlmZmVyZW50IGZpbGVzIGNyb3NzIHRoZSByZXZpc2lvbiBvcmRlcgorICAgd2l0aGluIHRoZSBjb21taXQgbWF0Y2hpbmcgdGltZSB3aW5kb3cgdGhlIG9yZGVyIG9mIGNvbW1pdHMgbWF5IGJlCisgICB3cm9uZy4KKworUHJvYmxlbXMgcmVsYXRlZCB0byBicmFuY2hlczoKKworICogQnJhbmNoZXMgb24gd2hpY2ggbm8gY29tbWl0cyBoYXZlIGJlZW4gbWFkZSBhcmUgbm90IGltcG9ydGVkLgorICogQWxsIGZpbGVzIGZyb20gdGhlIGJyYW5jaGluZyBwb2ludCBhcmUgYWRkZWQgdG8gYSBicmFuY2ggZXZlbiBpZgorICAgbmV2ZXIgYWRkZWQgaW4gY3ZzLgorICogVGhpcyBhcHBsaWVzIHRvIGZpbGVzIGFkZGVkIHRvIHRoZSBzb3VyY2UgYnJhbmNoICphZnRlciogYSBkYXVnaHRlcgorICAgYnJhbmNoIHdhcyBjcmVhdGVkOiBpZiBwcmV2aW91c2x5IG5vIGNvbW1pdCB3YXMgbWFkZSBvbiB0aGUgZGF1Z2h0ZXIKKyAgIGJyYW5jaCB0aGV5IHdpbGwgZXJyb25lb3VzbHkgYmUgYWRkZWQgdG8gdGhlIGRhdWdodGVyIGJyYW5jaCBpbiBnaXQuCisKK1Byb2JsZW1zIHJlbGF0ZWQgdG8gdGFnczoKKworKiBNdWx0aXBsZSB0YWdzIG9uIHRoZSBzYW1lIHJldmlzaW9uIGFyZSBub3QgaW1wb3J0ZWQuCisKK0lmIHlvdSBzdXNwZWN0IHRoYXQgYW55IG9mIHRoZXNlIGlzc3VlcyBtYXkgYXBwbHkgdG8gdGhlIHJlcG9zaXRvcnkgeW91Cit3YW50IHRvIGltcG9ydCBjb25zaWRlciB1c2luZyB0aGVzZSBhbHRlcm5hdGl2ZSB0b29scyB3aGljaCBwcm92ZWQgdG8gYmUKK21vcmUgc3RhYmxlIGluIHByYWN0aWNlOgorCisqIGN2czJnaXQgKHBhcnQgb2YgY3ZzMnN2biksIGBodHRwOi8vY3ZzMnN2bi50aWdyaXMub3JnYAorKiBwYXJzZWN2cywgYGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9+a2VpdGhwL3BhcnNlY3ZzYAogCiBBdXRob3IKIC0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGFlbW9uLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQKaW5kZXggZDU1OTY2Ny4uYTg1MTIxYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGFlbW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kYWVtb24udHh0CkBAIC0xMDAsNyArMTAwLDcgQEAKIAlpdCB0YWtlcyBmb3IgdGhlIHNlcnZlciB0byBwcm9jZXNzIHRoZSBzdWItcmVxdWVzdCBhbmQgdGhlIHRpbWUgc3BlbnQKIAl3YWl0aW5nIGZvciB0aGUgbmV4dCBjbGllbnQncyByZXF1ZXN0LgogCi0tLW1heC1jb25uZWN0aW9uczo6CistLW1heC1jb25uZWN0aW9ucz1uOjoKIAlNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IGNsaWVudHMsIGRlZmF1bHRzIHRvIDMyLiAgU2V0IGl0IHRvCiAJemVybyBmb3Igbm8gbGltaXQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRlc2NyaWJlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRlc2NyaWJlLnR4dAppbmRleCBhMzBjNWFjLi5iMjMxZGJiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kZXNjcmliZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGVzY3JpYmUudHh0CkBAIC04Nyw3ICs4Nyw3IEBACiAJdjEuMC40LTE0LWcyNDE0NzIxCiAKIGkuZS4gdGhlIGN1cnJlbnQgaGVhZCBvZiBteSAicGFyZW50IiBicmFuY2ggaXMgYmFzZWQgb24gdjEuMC40LAotYnV0IHNpbmNlIGl0IGhhcyBhIGhhbmRmdWwgY29tbWl0cyBvbiB0b3Agb2YgdGhhdCwKK2J1dCBzaW5jZSBpdCBoYXMgYSBmZXcgY29tbWl0cyBvbiB0b3Agb2YgdGhhdCwKIGRlc2NyaWJlIGhhcyBhZGRlZCB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgY29tbWl0cyAoIjE0IikgYW5kCiBhbiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSBmb3IgdGhlIGNvbW1pdCBpdHNlbGYgKCIyNDE0NzIxIikKIGF0IHRoZSBlbmQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0CmluZGV4IGM1MjYxNDEuLjRlZjAzNTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0CkBAIC00Myw4ICs0Myw3IEBACiAtcTo6CiAJUmVtYWluIHNpbGVudCBldmVuIG9uIG5vbmV4aXN0ZW50IGZpbGVzCiAKLU91dHB1dCBmb3JtYXQKLS0tLS0tLS0tLS0tLS0KKwogaW5jbHVkZTo6ZGlmZi1mb3JtYXQudHh0W10KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CmluZGV4IDI2OTIwZDQuLjhiOWVkMjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CkBAIC0zNCw4ICszNCw2IEBACiAJJ2dpdC1kaWZmLWluZGV4JyBzYXkgdGhhdCBhbGwgbm9uLWNoZWNrZWQtb3V0IGZpbGVzIGFyZSB1cAogCXRvIGRhdGUuCiAKLU91dHB1dCBmb3JtYXQKLS0tLS0tLS0tLS0tLS0KIGluY2x1ZGU6OmRpZmYtZm9ybWF0LnR4dFtdCiAKIE9wZXJhdGluZyBNb2RlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQKaW5kZXggMjNiN2FiZC4uZjJjZWYxMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi10cmVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0CkBAIC0xNTksOCArMTU5LDcgQEAKIAogaW4gY2FzZSB5b3UgY2FyZSkuCiAKLU91dHB1dCBmb3JtYXQKLS0tLS0tLS0tLS0tLS0KKwogaW5jbHVkZTo6ZGlmZi1mb3JtYXQudHh0W10KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0CmluZGV4IGEyZjE5MmYuLjBhYzcxMTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0CkBAIC04NCw4ICs4NCw3IEBACiAJdGhlIGRpZmYgdG8gdGhlIG5hbWVkIHBhdGhzICh5b3UgY2FuIGdpdmUgZGlyZWN0b3J5CiAJbmFtZXMgYW5kIGdldCBkaWZmIGZvciBhbGwgZmlsZXMgdW5kZXIgdGhlbSkuCiAKLU91dHB1dCBmb3JtYXQKLS0tLS0tLS0tLS0tLS0KKwogaW5jbHVkZTo6ZGlmZi1mb3JtYXQudHh0W10KIAogRVhBTVBMRVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmZ0b29sLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmZ0b29sLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE2YzUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZnRvb2wudHh0CkBAIC0wLDAgKzEsMTA1IEBACitnaXQtZGlmZnRvb2woMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZGlmZnRvb2wgLSBTaG93IGNoYW5nZXMgdXNpbmcgY29tbW9uIGRpZmYgdG9vbHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCisnZ2l0IGRpZmZ0b29sJyBbLS10b29sPTx0b29sPl0gWy15fC0tbm8tcHJvbXB0fC0tcHJvbXB0XSBbPCdnaXQgZGlmZicgb3B0aW9ucz5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorJ2dpdC1kaWZmdG9vbCcgaXMgYSBnaXQgY29tbWFuZCB0aGF0IGFsbG93cyB5b3UgdG8gY29tcGFyZSBhbmQgZWRpdCBmaWxlcworYmV0d2VlbiByZXZpc2lvbnMgdXNpbmcgY29tbW9uIGRpZmYgdG9vbHMuICAnZ2l0IGRpZmZ0b29sJyBpcyBhIGZyb250ZW5kCit0byAnZ2l0LWRpZmYnIGFuZCBhY2NlcHRzIHRoZSBzYW1lIG9wdGlvbnMgYW5kIGFyZ3VtZW50cy4KKworT1BUSU9OUworLS0tLS0tLQorLXk6OgorLS1uby1wcm9tcHQ6OgorCURvIG5vdCBwcm9tcHQgYmVmb3JlIGxhdW5jaGluZyBhIGRpZmYgdG9vbC4KKworLS1wcm9tcHQ6OgorCVByb21wdCBiZWZvcmUgZWFjaCBpbnZvY2F0aW9uIG9mIHRoZSBkaWZmIHRvb2wuCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXI7IHRoZSBvcHRpb24gaXMgcHJvdmlkZWQgdG8KKwlvdmVycmlkZSBhbnkgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KKworLXQgPHRvb2w+OjoKKy0tdG9vbD08dG9vbD46OgorCVVzZSB0aGUgZGlmZiB0b29sIHNwZWNpZmllZCBieSA8dG9vbD4uCisJVmFsaWQgbWVyZ2UgdG9vbHMgYXJlOgorCWtkaWZmMywga29tcGFyZSwgdGtkaWZmLCBtZWxkLCB4eGRpZmYsIGVtZXJnZSwgdmltZGlmZiwgZ3ZpbWRpZmYsCisJZWNtZXJnZSwgZGlmZnVzZSwgb3BlbmRpZmYgYW5kIGFyYXhpcy4KKysKK0lmIGEgZGlmZiB0b29sIGlzIG5vdCBzcGVjaWZpZWQsICdnaXQtZGlmZnRvb2wnCit3aWxsIHVzZSB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgZGlmZi50b29sYC4gIElmIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgZGlmZi50b29sYCBpcyBub3Qgc2V0LCAnZ2l0LWRpZmZ0b29sJword2lsbCBwaWNrIGEgc3VpdGFibGUgZGVmYXVsdC4KKysKK1lvdSBjYW4gZXhwbGljaXRseSBwcm92aWRlIGEgZnVsbCBwYXRoIHRvIHRoZSB0b29sIGJ5IHNldHRpbmcgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBkaWZmdG9vbC48dG9vbD4ucGF0aGAuIEZvciBleGFtcGxlLCB5b3UKK2NhbiBjb25maWd1cmUgdGhlIGFic29sdXRlIHBhdGggdG8ga2RpZmYzIGJ5IHNldHRpbmcKK2BkaWZmdG9vbC5rZGlmZjMucGF0aGAuIE90aGVyd2lzZSwgJ2dpdC1kaWZmdG9vbCcgYXNzdW1lcyB0aGUKK3Rvb2wgaXMgYXZhaWxhYmxlIGluIFBBVEguCisrCitJbnN0ZWFkIG9mIHJ1bm5pbmcgb25lIG9mIHRoZSBrbm93biBkaWZmIHRvb2xzLAorJ2dpdC1kaWZmdG9vbCcgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gcnVuIGFuIGFsdGVybmF0aXZlIHByb2dyYW0KK2J5IHNwZWNpZnlpbmcgdGhlIGNvbW1hbmQgbGluZSB0byBpbnZva2UgaW4gYSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSBgZGlmZnRvb2wuPHRvb2w+LmNtZGAuCisrCitXaGVuICdnaXQtZGlmZnRvb2wnIGlzIGludm9rZWQgd2l0aCB0aGlzIHRvb2wgKGVpdGhlciB0aHJvdWdoIHRoZQorYC10YCBvciBgLS10b29sYCBvcHRpb24gb3IgdGhlIGBkaWZmLnRvb2xgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUpCit0aGUgY29uZmlndXJlZCBjb21tYW5kIGxpbmUgd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIGZvbGxvd2luZwordmFyaWFibGVzIGF2YWlsYWJsZTogYCRMT0NBTGAgaXMgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkKK2ZpbGUgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGRpZmYgcHJlLWltYWdlIGFuZCBgJFJFTU9URWAKK2lzIHNldCB0byB0aGUgbmFtZSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgY29udGFpbmluZyB0aGUgY29udGVudHMKK29mIHRoZSBkaWZmIHBvc3QtaW1hZ2UuICBgJEJBU0VgIGlzIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5Cit3aXRoIGN1c3RvbSBtZXJnZSB0b29sIGNvbW1hbmRzIGFuZCBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgYCRMT0NBTGAuCisKK1NlZSBsaW5rZ2l0OmdpdC1kaWZmWzFdIGZvciB0aGUgZnVsbCBsaXN0IG9mIHN1cHBvcnRlZCBvcHRpb25zLgorCitDT05GSUcgVkFSSUFCTEVTCistLS0tLS0tLS0tLS0tLS0tCisnZ2l0LWRpZmZ0b29sJyBmYWxscyBiYWNrIHRvICdnaXQtbWVyZ2V0b29sJyBjb25maWcgdmFyaWFibGVzIHdoZW4gdGhlCitkaWZmdG9vbCBlcXVpdmFsZW50cyBoYXZlIG5vdCBiZWVuIGRlZmluZWQuCisKK2RpZmYudG9vbDo6CisJVGhlIGRlZmF1bHQgZGlmZiB0b29sIHRvIHVzZS4KKworZGlmZnRvb2wuPHRvb2w+LnBhdGg6OgorCU92ZXJyaWRlIHRoZSBwYXRoIGZvciB0aGUgZ2l2ZW4gdG9vbC4gIFRoaXMgaXMgdXNlZnVsIGluIGNhc2UKKwl5b3VyIHRvb2wgaXMgbm90IGluIHRoZSBQQVRILgorCitkaWZmdG9vbC48dG9vbD4uY21kOjoKKwlTcGVjaWZ5IHRoZSBjb21tYW5kIHRvIGludm9rZSB0aGUgc3BlY2lmaWVkIGRpZmYgdG9vbC4KKysKK1NlZSB0aGUgYC0tdG9vbD08dG9vbD5gIG9wdGlvbiBhYm92ZSBmb3IgbW9yZSBkZXRhaWxzLgorCitkaWZmdG9vbC5wcm9tcHQ6OgorCVByb21wdCBiZWZvcmUgZWFjaCBpbnZvY2F0aW9uIG9mIHRoZSBkaWZmIHRvb2wuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtZGlmZlsxXTo6CisJIFNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMKKworbGlua2dpdDpnaXQtbWVyZ2V0b29sWzFdOjoKKwlSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cworCitsaW5rZ2l0OmdpdC1jb25maWdbMV06OgorCSBHZXQgYW5kIHNldCByZXBvc2l0b3J5IG9yIGdsb2JhbCBvcHRpb25zCisKKworQVVUSE9SCistLS0tLS0KK1dyaXR0ZW4gYnkgRGF2aWQgQWd1aWxhciA8ZGF2dmlkQGdtYWlsLmNvbT4uCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uIGJ5IERhdmlkIEFndWlsYXIgYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0CmluZGV4IDBjOWViNTYuLmFmMjMyOGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWV4cG9ydC50eHQKQEAgLTM2LDYgKzM2LDE3IEBACiB1bnNpZ25lZCwgd2l0aCAndmVyYmF0aW0nLCB0aGV5IHdpbGwgYmUgc2lsZW50bHkgZXhwb3J0ZWQKIGFuZCB3aXRoICd3YXJuJywgdGhleSB3aWxsIGJlIGV4cG9ydGVkLCBidXQgeW91IHdpbGwgc2VlIGEgd2FybmluZy4KIAorLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PShhYm9ydHxkcm9wfHJld3JpdGUpOjoKKwlTcGVjaWZ5IGhvdyB0byBoYW5kbGUgdGFncyB3aG9zZSB0YWdnZWQgb2JqZWN0aXMgZmlsdGVyZWQgb3V0LgorCVNpbmNlIHJldmlzaW9ucyBhbmQgZmlsZXMgdG8gZXhwb3J0IGNhbiBiZSBsaW1pdGVkIGJ5IHBhdGgsCisJdGFnZ2VkIG9iamVjdHMgbWF5IGJlIGZpbHRlcmVkIGNvbXBsZXRlbHkuCisrCitXaGVuIGFza2luZyB0byAnYWJvcnQnICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIHRoaXMgcHJvZ3JhbSB3aWxsIGRpZQord2hlbiBlbmNvdW50ZXJpbmcgc3VjaCBhIHRhZy4gIFdpdGggJ2Ryb3AnIGl0IHdpbGwgb21pdCBzdWNoIHRhZ3MgZnJvbQordGhlIG91dHB1dC4gIFdpdGggJ3Jld3JpdGUnLCBpZiB0aGUgdGFnZ2VkIG9iamVjdCBpcyBhIGNvbW1pdCwgaXQgd2lsbAorcmV3cml0ZSB0aGUgdGFnIHRvIHRhZyBhbiBhbmNlc3RvciBjb21taXQgKHZpYSBwYXJlbnQgcmV3cml0aW5nOyBzZWUKK2xpbmtnaXQ6Z2l0LXJldi1saXN0WzFdKQorCiAtTTo6CiAtQzo6CiAJUGVyZm9ybSBtb3ZlIGFuZC9vciBjb3B5IGRldGVjdGlvbiwgYXMgZGVzY3JpYmVkIGluIHRoZQpAQCAtNzEsNiArODIsMTIgQEAKIAlhbGxvdyB0aGF0LiAgU28gZmFrZSBhIHRhZ2dlciB0byBiZSBhYmxlIHRvIGZhc3QtaW1wb3J0IHRoZQogCW91dHB1dC4KIAorW2dpdC1yZXYtbGlzdC1hcmdzLi4uXTo6CisgICAgICAgQSBsaXN0IG9mIGFyZ3VtZW50cywgYWNjZXB0YWJsZSB0byAnZ2l0LXJldi1wYXJzZScgYW5kCisgICAgICAgJ2dpdC1yZXYtbGlzdCcsIHRoYXQgc3BlY2lmaWVzIHRoZSBzcGVjaWZpYyBvYmplY3RzIGFuZCByZWZlcmVuY2VzCisgICAgICAgdG8gZXhwb3J0LiAgRm9yIGV4YW1wbGUsIGBtYXN0ZXJcfjEwLi5tYXN0ZXJgIGNhdXNlcyB0aGUKKyAgICAgICBjdXJyZW50IG1hc3RlciByZWZlcmVuY2UgdG8gYmUgZXhwb3J0ZWQgYWxvbmcgd2l0aCBhbGwgb2JqZWN0cworICAgICAgIGFkZGVkIHNpbmNlIGl0cyAxMHRoIGFuY2VzdG9yIGNvbW1pdC4KIAogRVhBTVBMRVMKIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1maWx0ZXItYnJhbmNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0CmluZGV4IDY4Zjk3Y2QuLjMyZWE4NTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0CkBAIC05NCw3ICs5NCw5IEBACiAtLWluZGV4LWZpbHRlciA8Y29tbWFuZD46OgogCVRoaXMgaXMgdGhlIGZpbHRlciBmb3IgcmV3cml0aW5nIHRoZSBpbmRleC4gIEl0IGlzIHNpbWlsYXIgdG8gdGhlCiAJdHJlZSBmaWx0ZXIgYnV0IGRvZXMgbm90IGNoZWNrIG91dCB0aGUgdHJlZSwgd2hpY2ggbWFrZXMgaXQgbXVjaAotCWZhc3Rlci4gIEZvciBoYWlyeSBjYXNlcywgc2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXS4KKwlmYXN0ZXIuICBGcmVxdWVudGx5IHVzZWQgd2l0aCBgZ2l0IHJtIFwtLWNhY2hlZAorCVwtLWlnbm9yZS11bm1hdGNoIC4uLmAsIHNlZSBFWEFNUExFUyBiZWxvdy4gIEZvciBoYWlyeQorCWNhc2VzLCBzZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdLgogCiAtLXBhcmVudC1maWx0ZXIgPGNvbW1hbmQ+OjoKIAlUaGlzIGlzIHRoZSBmaWx0ZXIgZm9yIHJld3JpdGluZyB0aGUgY29tbWl0J3MgcGFyZW50IGxpc3QuCkBAIC0xMjUsNiArMTI3LDEwIEBACiBjb252ZW5pZW5jZSBmdW5jdGlvbnMsIHRvby4gIEZvciBleGFtcGxlLCBjYWxsaW5nICdza2lwX2NvbW1pdCAiJEAiJwogd2lsbCBsZWF2ZSBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IChidXQgbm90IGl0cyBjaGFuZ2VzISBJZiB5b3Ugd2FudAogdGhhdCwgdXNlICdnaXQtcmViYXNlJyBpbnN0ZWFkKS4KKysKK1lvdSBjYW4gYWxzbyB1c2UgdGhlICdnaXRfY29tbWl0X25vbl9lbXB0eV90cmVlICIkQCInIGluc3RlYWQgb2YKKydnaXQgY29tbWl0LXRyZWUgIiRAIicgaWYgeW91IGRvbid0IHdpc2ggdG8ga2VlcCBjb21taXRzIHdpdGggYSBzaW5nbGUgcGFyZW50CithbmQgdGhhdCBtYWtlcyBubyBjaGFuZ2UgdG8gdGhlIHRyZWUuCiAKIC0tdGFnLW5hbWUtZmlsdGVyIDxjb21tYW5kPjo6CiAJVGhpcyBpcyB0aGUgZmlsdGVyIGZvciByZXdyaXRpbmcgdGFnIG5hbWVzLiBXaGVuIHBhc3NlZCwKQEAgLTE1NCw2ICsxNjAsMTYgQEAKIAlUaGUgcmVzdWx0IHdpbGwgY29udGFpbiB0aGF0IGRpcmVjdG9yeSAoYW5kIG9ubHkgdGhhdCkgYXMgaXRzCiAJcHJvamVjdCByb290LgogCistLXBydW5lLWVtcHR5OjoKKwlTb21lIGtpbmQgb2YgZmlsdGVycyB3aWxsIGdlbmVyYXRlIGVtcHR5IGNvbW1pdHMsIHRoYXQgbGVmdCB0aGUgdHJlZQorCXVudG91Y2hlZC4gIFRoaXMgc3dpdGNoIGFsbG93IGdpdC1maWx0ZXItYnJhbmNoIHRvIGlnbm9yZSBzdWNoCisJY29tbWl0cy4gIFRob3VnaCwgdGhpcyBzd2l0Y2ggb25seSBhcHBsaWVzIGZvciBjb21taXRzIHRoYXQgaGF2ZSBvbmUKKwlhbmQgb25seSBvbmUgcGFyZW50LCBpdCB3aWxsIGhlbmNlIGtlZXAgbWVyZ2VzIHBvaW50cy4gQWxzbywgdGhpcworCW9wdGlvbiBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSB1c2Ugb2YgJy0tY29tbWl0LWZpbHRlcicuIFRob3VnaCB5b3UKKwlqdXN0IG5lZWQgdG8gdXNlIHRoZSBmdW5jdGlvbiAnZ2l0X2NvbW1pdF9ub25fZW1wdHlfdHJlZSAiJEAiJyBpbnN0ZWFkCisJb2YgdGhlICdnaXQgY29tbWl0LXRyZWUgIiRAIicgaWRpb20gaW4geW91ciBjb21taXQgZmlsdGVyIHRvIG1ha2UgdGhhdAorCWhhcHBlbi4KKwogLS1vcmlnaW5hbCA8bmFtZXNwYWNlPjo6CiAJVXNlIHRoaXMgb3B0aW9uIHRvIHNldCB0aGUgbmFtZXNwYWNlIHdoZXJlIHRoZSBvcmlnaW5hbCBjb21taXRzCiAJd2lsbCBiZSBzdG9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzICdyZWZzL29yaWdpbmFsJy4KQEAgLTE5MywxMCArMjA5LDE0IEBACiBhIHNpbXBsZSBgcm0gZmlsZW5hbWVgIHdpbGwgZmFpbCBmb3IgdGhhdCB0cmVlIGFuZCBjb21taXQuCiBUaHVzIHlvdSBtYXkgaW5zdGVhZCB3YW50IHRvIHVzZSBgcm0gLWYgZmlsZW5hbWVgIGFzIHRoZSBzY3JpcHQuCiAKLUEgc2lnbmlmaWNhbnRseSBmYXN0ZXIgdmVyc2lvbjoKK1VzaW5nIGBcLS1pbmRleC1maWx0ZXJgIHdpdGggJ2dpdC1ybScgeWllbGRzIGEgc2lnbmlmaWNhbnRseSBmYXN0ZXIKK3ZlcnNpb24uICBMaWtlIHdpdGggdXNpbmcgYHJtIGZpbGVuYW1lYCwgYGdpdCBybSAtLWNhY2hlZCBmaWxlbmFtZWAKK3dpbGwgZmFpbCBpZiB0aGUgZmlsZSBpcyBhYnNlbnQgZnJvbSB0aGUgdHJlZSBvZiBhIGNvbW1pdC4gIElmIHlvdQord2FudCB0byAiY29tcGxldGVseSBmb3JnZXQiIGEgZmlsZSwgaXQgZG9lcyBub3QgbWF0dGVyIHdoZW4gaXQgZW50ZXJlZAoraGlzdG9yeSwgc28gd2UgYWxzbyBhZGQgYFwtLWlnbm9yZS11bm1hdGNoYDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWdpdCBmaWx0ZXItYnJhbmNoIC0taW5kZXgtZmlsdGVyICdnaXQgcm0gLS1jYWNoZWQgZmlsZW5hbWUnIEhFQUQKK2dpdCBmaWx0ZXItYnJhbmNoIC0taW5kZXgtZmlsdGVyICdnaXQgcm0gLS1jYWNoZWQgLS1pZ25vcmUtdW5tYXRjaCBmaWxlbmFtZScgSEVBRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogTm93LCB5b3Ugd2lsbCBnZXQgdGhlIHJld3JpdHRlbiBoaXN0b3J5IHNhdmVkIGluIEhFQUQuCkBAIC0yODUsNiArMzA1LDE2IEBACiBwb2ludCB0byB0aGUgdG9wLW1vc3QgcmV2aXNpb24gdGhhdCBhICdnaXQtcmV2LWxpc3QnIG9mIHRoaXMgcmFuZ2UKIHdpbGwgcHJpbnQuCiAKK0lmIHlvdSBuZWVkIHRvIGFkZCAnQWNrZWQtYnknIGxpbmVzIHRvLCBzYXksIHRoZSBsYXN0IDEwIGNvbW1pdHMgKG5vbmUKK29mIHdoaWNoIGlzIGEgbWVyZ2UpLCB1c2UgdGhpcyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS1tc2ctZmlsdGVyICcKKwljYXQgJiYKKwllY2hvICJBY2tlZC1ieTogQnVncyBCdW5ueSA8YnVubnlAYnVnemlsbGEub3JnPiIKKycgSEVBRH4xMC4uSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogKk5PVEUqIHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhlIGNvbW1pdHMsIGFuZCB3aGljaCBhcmUgbm90IHJldmVydGVkCiBieSBzdWJzZXF1ZW50IGNvbW1pdHMsIHdpbGwgc3RpbGwgYmUgaW4gdGhlIHJld3JpdHRlbiBicmFuY2guIElmIHlvdSB3YW50CiB0byB0aHJvdyBvdXQgX2NoYW5nZXNfIHRvZ2V0aGVyIHdpdGggdGhlIGNvbW1pdHMsIHlvdSBzaG91bGQgdXNlIHRoZQpAQCAtMzIzLDYgKzM1Myw0NyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAorCitDaGVja2xpc3QgZm9yIFNocmlua2luZyBhIFJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnaXQtZmlsdGVyLWJyYW5jaCBpcyBvZnRlbiB1c2VkIHRvIGdldCByaWQgb2YgYSBzdWJzZXQgb2YgZmlsZXMsCit1c3VhbGx5IHdpdGggc29tZSBjb21iaW5hdGlvbiBvZiBgXC0taW5kZXgtZmlsdGVyYCBhbmQKK2BcLS1zdWJkaXJlY3RvcnktZmlsdGVyYC4gIFBlb3BsZSBleHBlY3QgdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5IHRvCitiZSBzbWFsbGVyIHRoYW4gdGhlIG9yaWdpbmFsLCBidXQgeW91IG5lZWQgYSBmZXcgbW9yZSBzdGVwcyB0bworYWN0dWFsbHkgbWFrZSBpdCBzbWFsbGVyLCBiZWNhdXNlIGdpdCB0cmllcyBoYXJkIG5vdCB0byBsb3NlIHlvdXIKK29iamVjdHMgdW50aWwgeW91IHRlbGwgaXQgdG8uICBGaXJzdCBtYWtlIHN1cmUgdGhhdDoKKworKiBZb3UgcmVhbGx5IHJlbW92ZWQgYWxsIHZhcmlhbnRzIG9mIGEgZmlsZW5hbWUsIGlmIGEgYmxvYiB3YXMgbW92ZWQKKyAgb3ZlciBpdHMgbGlmZXRpbWUuICBgZ2l0IGxvZyBcLS1uYW1lLW9ubHkgXC0tZm9sbG93IFwtLWFsbCBcLS0KKyAgZmlsZW5hbWVgIGNhbiBoZWxwIHlvdSBmaW5kIHJlbmFtZXMuCisKKyogWW91IHJlYWxseSBmaWx0ZXJlZCBhbGwgcmVmczogdXNlIGBcLS10YWctbmFtZS1maWx0ZXIgY2F0IFwtLQorICBcLS1hbGxgIHdoZW4gY2FsbGluZyBnaXQtZmlsdGVyLWJyYW5jaC4KKworVGhlbiB0aGVyZSBhcmUgdHdvIHdheXMgdG8gZ2V0IGEgc21hbGxlciByZXBvc2l0b3J5LiAgQSBzYWZlciB3YXkgaXMKK3RvIGNsb25lLCB0aGF0IGtlZXBzIHlvdXIgb3JpZ2luYWwgaW50YWN0LgorCisqIENsb25lIGl0IHdpdGggYGdpdCBjbG9uZSArKytmaWxlOi8vL3BhdGgvdG8vcmVwbysrK2AuICBUaGUgY2xvbmUKKyAgd2lsbCBub3QgaGF2ZSB0aGUgcmVtb3ZlZCBvYmplY3RzLiAgU2VlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdLiAgKE5vdGUKKyAgdGhhdCBjbG9uaW5nIHdpdGggYSBwbGFpbiBwYXRoIGp1c3QgaGFyZGxpbmtzIGV2ZXJ5dGhpbmchKQorCitJZiB5b3UgcmVhbGx5IGRvbid0IHdhbnQgdG8gY2xvbmUgaXQsIGZvciB3aGF0ZXZlciByZWFzb25zLCBjaGVjayB0aGUKK2ZvbGxvd2luZyBwb2ludHMgaW5zdGVhZCAoaW4gdGhpcyBvcmRlcikuICBUaGlzIGlzIGEgdmVyeSBkZXN0cnVjdGl2ZQorYXBwcm9hY2gsIHNvICptYWtlIGEgYmFja3VwKiBvciBnbyBiYWNrIHRvIGNsb25pbmcgaXQuICBZb3UgaGF2ZSBiZWVuCit3YXJuZWQuCisKKyogUmVtb3ZlIHRoZSBvcmlnaW5hbCByZWZzIGJhY2tlZCB1cCBieSBnaXQtZmlsdGVyLWJyYW5jaDogc2F5IGBnaXQKKyAgZm9yLWVhY2gtcmVmIFwtLWZvcm1hdD0iJShyZWZuYW1lKSIgcmVmcy9vcmlnaW5hbC8gfCB4YXJncyAtbiAxIGdpdAorICB1cGRhdGUtcmVmIC1kYC4KKworKiBFeHBpcmUgYWxsIHJlZmxvZ3Mgd2l0aCBgZ2l0IHJlZmxvZyBleHBpcmUgXC0tZXhwaXJlPW5vdyBcLS1hbGxgLgorCisqIEdhcmJhZ2UgY29sbGVjdCBhbGwgdW5yZWZlcmVuY2VkIG9iamVjdHMgd2l0aCBgZ2l0IGdjIFwtLXBydW5lPW5vd2AKKyAgKG9yIGlmIHlvdXIgZ2l0LWdjIGlzIG5vdCBuZXcgZW5vdWdoIHRvIHN1cHBvcnQgYXJndW1lbnRzIHRvCisgIGBcLS1wcnVuZWAsIHVzZSBgZ2l0IHJlcGFjayAtYWQ7IGdpdCBwcnVuZWAgaW5zdGVhZCkuCisKKwogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgUGV0ciAiUGFza3kiIEJhdWRpcyA8cGFza3lAc3VzZS5jej4sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3ItZWFjaC1yZWYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZm9yLWVhY2gtcmVmLnR4dAppbmRleCA1MDYxZDNlLi44ZGM4NzNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3ItZWFjaC1yZWYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZvci1lYWNoLXJlZi50eHQKQEAgLTc1LDYgKzc1LDggQEAKIHJlZm5hbWU6OgogCVRoZSBuYW1lIG9mIHRoZSByZWYgKHRoZSBwYXJ0IGFmdGVyICRHSVRfRElSLykuCiAJRm9yIGEgbm9uLWFtYmlndW91cyBzaG9ydCBuYW1lIG9mIHRoZSByZWYgYXBwZW5kIGA6c2hvcnRgLgorCVRoZSBvcHRpb24gY29yZS53YXJuQW1iaWd1b3VzUmVmcyBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgc3RyaWN0CisJYWJicmV2aWF0aW9uIG1vZGUuCiAKIG9iamVjdHR5cGU6OgogCVRoZSB0eXBlIG9mIHRoZSBvYmplY3QgKGBibG9iYCwgYHRyZWVgLCBgY29tbWl0YCwgYHRhZ2ApLgpAQCAtODUsNiArODcsMTEgQEAKIG9iamVjdG5hbWU6OgogCVRoZSBvYmplY3QgbmFtZSAoYWthIFNIQS0xKS4KIAordXBzdHJlYW06OgorCVRoZSBuYW1lIG9mIGEgbG9jYWwgcmVmIHdoaWNoIGNhbiBiZSBjb25zaWRlcmVkIGBgdXBzdHJlYW0nJworCWZyb20gdGhlIGRpc3BsYXllZCByZWYuIFJlc3BlY3RzIGA6c2hvcnRgIGluIHRoZSBzYW1lIHdheSBhcworCWByZWZuYW1lYCBhYm92ZS4KKwogSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlLCBmb3IgY29tbWl0IGFuZCB0YWcgb2JqZWN0cywgdGhlIGhlYWRlcgogZmllbGQgbmFtZXMgKGB0cmVlYCwgYHBhcmVudGAsIGBvYmplY3RgLCBgdHlwZWAsIGFuZCBgdGFnYCkgY2FuCiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHZhbHVlIGluIHRoZSBoZWFkZXIgZmllbGQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dAppbmRleCAxZjU3N2I4Li42ODdlNjY3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKQEAgLTksOSArOSwxMCBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0IGZvcm1hdC1wYXRjaCcgWy1rXSBbLW8gPGRpcj4gfCAtLXN0ZG91dF0gWy0tdGhyZWFkXQotCQkgICBbLS1hdHRhY2hbPTxib3VuZGFyeT5dIHwgLS1pbmxpbmVbPTxib3VuZGFyeT5dXQotCQkgICBbLXMgfCAtLXNpZ25vZmZdIFs8Y29tbW9uIGRpZmYgb3B0aW9ucz5dCisnZ2l0IGZvcm1hdC1wYXRjaCcgWy1rXSBbKC1vfC0tb3V0cHV0LWRpcmVjdG9yeSkgPGRpcj4gfCAtLXN0ZG91dF0KKwkJICAgWy0tbm8tdGhyZWFkIHwgLS10aHJlYWRbPTxzdHlsZT5dXQorCQkgICBbKC0tYXR0YWNofC0taW5saW5lKVs9PGJvdW5kYXJ5Pl0gfCAtLW5vLWF0dGFjaF0KKwkJICAgWy1zIHwgLS1zaWdub2ZmXQogCQkgICBbLW4gfCAtLW51bWJlcmVkIHwgLU4gfCAtLW5vLW51bWJlcmVkXQogCQkgICBbLS1zdGFydC1udW1iZXIgPG4+XSBbLS1udW1iZXJlZC1maWxlc10KIAkJICAgWy0taW4tcmVwbHktdG89TWVzc2FnZS1JZF0gWy0tc3VmZml4PS48c2Z4Pl0KQEAgLTE5LDYgKzIwLDcgQEAKIAkJICAgWy0tc3ViamVjdC1wcmVmaXg9U3ViamVjdC1QcmVmaXhdCiAJCSAgIFstLWNjPTxlbWFpbD5dCiAJCSAgIFstLWNvdmVyLWxldHRlcl0KKwkJICAgWzxjb21tb24gZGlmZiBvcHRpb25zPl0KIAkJICAgWyA8c2luY2U+IHwgPHJldmlzaW9uIHJhbmdlPiBdCiAKIERFU0NSSVBUSU9OCkBAIC05Miw3ICs5NCw2IEBACiAtLW51bWJlcmVkLWZpbGVzOjoKIAlPdXRwdXQgZmlsZSBuYW1lcyB3aWxsIGJlIGEgc2ltcGxlIG51bWJlciBzZXF1ZW5jZQogCXdpdGhvdXQgdGhlIGRlZmF1bHQgZmlyc3QgbGluZSBvZiB0aGUgY29tbWl0IGFwcGVuZGVkLgotCU11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIHRoZSAtLXN0ZG91dCBvcHRpb24uCiAKIC1rOjoKIC0ta2VlcC1zdWJqZWN0OjoKQEAgLTExMywxNSArMTE0LDM1IEBACiAJd2hpY2ggaXMgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCB0aGUgcGF0Y2ggaXRzZWxmIGluIHRoZQogCXNlY29uZCBwYXJ0LCB3aXRoICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50Ii4KIAorLS1uby1hdHRhY2g6OgorCURpc2FibGUgdGhlIGNyZWF0aW9uIG9mIGFuIGF0dGFjaG1lbnQsIG92ZXJyaWRpbmcgdGhlCisJY29uZmlndXJhdGlvbiBzZXR0aW5nLgorCiAtLWlubGluZVs9PGJvdW5kYXJ5Pl06OgogCUNyZWF0ZSBtdWx0aXBhcnQvbWl4ZWQgYXR0YWNobWVudCwgdGhlIGZpcnN0IHBhcnQgb2YKIAl3aGljaCBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHRoZSBwYXRjaCBpdHNlbGYgaW4gdGhlCiAJc2Vjb25kIHBhcnQsIHdpdGggIkNvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZSIuCiAKLS0tdGhyZWFkOjoKLQlBZGQgSW4tUmVwbHktVG8gYW5kIFJlZmVyZW5jZXMgaGVhZGVycyB0byBtYWtlIHRoZSBzZWNvbmQgYW5kCi0Jc3Vic2VxdWVudCBtYWlscyBhcHBlYXIgYXMgcmVwbGllcyB0byB0aGUgZmlyc3QuICBBbHNvIGdlbmVyYXRlcwotCXRoZSBNZXNzYWdlLUlkIGhlYWRlciB0byByZWZlcmVuY2UuCistLXRocmVhZFs9PHN0eWxlPl06OgorLS1uby10aHJlYWQ6OgorCUNvbnRyb2xzIGFkZGl0aW9uIG9mIEluLVJlcGx5LVRvIGFuZCBSZWZlcmVuY2VzIGhlYWRlcnMgdG8KKwltYWtlIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgbWFpbHMgYXBwZWFyIGFzIHJlcGxpZXMgdG8gdGhlCisJZmlyc3QuICBBbHNvIGNvbnRyb2xzIGdlbmVyYXRpb24gb2YgdGhlIE1lc3NhZ2UtSWQgaGVhZGVyIHRvCisJcmVmZXJlbmNlLgorKworVGhlIG9wdGlvbmFsIDxzdHlsZT4gYXJndW1lbnQgY2FuIGJlIGVpdGhlciBgc2hhbGxvd2Agb3IgYGRlZXBgLgorJ3NoYWxsb3cnIHRocmVhZGluZyBtYWtlcyBldmVyeSBtYWlsIGEgcmVwbHkgdG8gdGhlIGhlYWQgb2YgdGhlCitzZXJpZXMsIHdoZXJlIHRoZSBoZWFkIGlzIGNob3NlbiBmcm9tIHRoZSBjb3ZlciBsZXR0ZXIsIHRoZQorYFwtLWluLXJlcGx5LXRvYCwgYW5kIHRoZSBmaXJzdCBwYXRjaCBtYWlsLCBpbiB0aGlzIG9yZGVyLiAgJ2RlZXAnCit0aHJlYWRpbmcgbWFrZXMgZXZlcnkgbWFpbCBhIHJlcGx5IHRvIHRoZSBwcmV2aW91cyBvbmUuCisrCitUaGUgZGVmYXVsdCBpcyAtLW5vLXRocmVhZCwgdW5sZXNzIHRoZSAnZm9ybWF0LnRocmVhZCcgY29uZmlndXJhdGlvbgoraXMgc2V0LiAgSWYgLS10aHJlYWQgaXMgc3BlY2lmaWVkIHdpdGhvdXQgYSBzdHlsZSwgaXQgZGVmYXVsdHMgdG8gdGhlCitzdHlsZSBzcGVjaWZpZWQgYnkgJ2Zvcm1hdC50aHJlYWQnIGlmIGFueSwgb3IgZWxzZSBgc2hhbGxvd2AuCisrCitCZXdhcmUgdGhhdCB0aGUgZGVmYXVsdCBmb3IgJ2dpdCBzZW5kLWVtYWlsJyBpcyB0byB0aHJlYWQgZW1haWxzCitpdHNlbGYuICBJZiB5b3Ugd2FudCAnZ2l0IGZvcm1hdC1wYXRjaCcgdG8gdGFrZSBjYXJlIG9mIGhyZWFkaW5nLCB5b3UKK3dpbGwgd2FudCB0byBlbnN1cmUgdGhhdCB0aHJlYWRpbmcgaXMgZGlzYWJsZWQgZm9yICdnaXQgc2VuZC1lbWFpbCcuCiAKIC0taW4tcmVwbHktdG89TWVzc2FnZS1JZDo6CiAJTWFrZSB0aGUgZmlyc3QgbWFpbCAob3IgYWxsIHRoZSBtYWlscyB3aXRoIC0tbm8tdGhyZWFkKSBhcHBlYXIgYXMgYQpAQCAtMTQ1LDYgKzE2NiwxMSBAQAogCUFkZCBhICJDYzoiIGhlYWRlciB0byB0aGUgZW1haWwgaGVhZGVycy4gVGhpcyBpcyBpbiBhZGRpdGlvbgogCXRvIGFueSBjb25maWd1cmVkIGhlYWRlcnMsIGFuZCBtYXkgYmUgdXNlZCBtdWx0aXBsZSB0aW1lcy4KIAorLS1hZGQtaGVhZGVyPTxoZWFkZXI+OjoKKwlBZGQgYW4gYXJiaXRyYXJ5IGhlYWRlciB0byB0aGUgZW1haWwgaGVhZGVycy4gIFRoaXMgaXMgaW4gYWRkaXRpb24KKwl0byBhbnkgY29uZmlndXJlZCBoZWFkZXJzLCBhbmQgbWF5IGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuCisJRm9yIGV4YW1wbGUsIC0tYWRkLWhlYWRlcj0iT3JnYW5pemF0aW9uOiBnaXQtZm9vIgorCiAtLWNvdmVyLWxldHRlcjo6CiAJSW4gYWRkaXRpb24gdG8gdGhlIHBhdGNoZXMsIGdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIGZpbGUKIAljb250YWluaW5nIHRoZSBzaG9ydGxvZyBhbmQgdGhlIG92ZXJhbGwgZGlmZnN0YXQuICBZb3UgY2FuCkBAIC0xNTMsMTggKzE3OSwxNyBAQAogLS1zdWZmaXg9LjxzZng+OjoKIAlJbnN0ZWFkIG9mIHVzaW5nIGAucGF0Y2hgIGFzIHRoZSBzdWZmaXggZm9yIGdlbmVyYXRlZAogCWZpbGVuYW1lcywgdXNlIHNwZWNpZmllZCBzdWZmaXguICBBIGNvbW1vbiBhbHRlcm5hdGl2ZSBpcwotCWAtLXN1ZmZpeD0udHh0YC4KKwlgLS1zdWZmaXg9LnR4dGAuICBMZWF2aW5nIHRoaXMgZW1wdHkgd2lsbCByZW1vdmUgdGhlIGAucGF0Y2hgCisJc3VmZml4LgogKwotTm90ZSB0aGF0IHlvdSB3b3VsZCBuZWVkIHRvIGluY2x1ZGUgdGhlIGxlYWRpbmcgZG90IGAuYCBpZiB5b3UKLXdhbnQgYSBmaWxlbmFtZSBsaWtlIGAwMDAxLWRlc2NyaXB0aW9uLW9mLW15LWNoYW5nZS5wYXRjaGAsIGFuZAotdGhlIGZpcnN0IGxldHRlciBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgZG90LiAgTGVhdmluZyBpdCBlbXB0eSB3b3VsZAotbm90IGFkZCBhbnkgc3VmZml4LgorTm90ZSB0aGF0IHRoZSBsZWFkaW5nIGNoYXJhY3RlciBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgZG90OyBmb3IgZXhhbXBsZSwKK3lvdSBjYW4gdXNlIGAtLXN1ZmZpeD0tcGF0Y2hgIHRvIGdldCBgMDAwMS1kZXNjcmlwdGlvbi1vZi1teS1jaGFuZ2UtcGF0Y2hgLgogCiAtLW5vLWJpbmFyeTo6Ci0JRG9uJ3Qgb3V0cHV0IGNvbnRlbnRzIG9mIGNoYW5nZXMgaW4gYmluYXJ5IGZpbGVzLCBqdXN0IHRha2Ugbm90ZQotCXRoYXQgdGhleSBkaWZmZXIuICBOb3RlIHRoYXQgdGhpcyBkaXNhYmxlIHRoZSBwYXRjaCB0byBiZSBwcm9wZXJseQotCWFwcGxpZWQuICBCeSBkZWZhdWx0IHRoZSBjb250ZW50cyBvZiBjaGFuZ2VzIGluIHRob3NlIGZpbGVzIGFyZQotCWVuY29kZWQgaW4gdGhlIHBhdGNoLgorCURvIG5vdCBvdXRwdXQgY29udGVudHMgb2YgY2hhbmdlcyBpbiBiaW5hcnkgZmlsZXMsIGluc3RlYWQKKwlkaXNwbGF5IGEgbm90aWNlIHRoYXQgdGhvc2UgZmlsZXMgY2hhbmdlZC4gIFBhdGNoZXMgZ2VuZXJhdGVkCisJdXNpbmcgdGhpcyBvcHRpb24gY2Fubm90IGJlIGFwcGxpZWQgcHJvcGVybHksIGJ1dCB0aGV5IGFyZQorCXN0aWxsIHVzZWZ1bCBmb3IgY29kZSByZXZpZXcuCiAKIC0tcm9vdDo6CiAJVHJlYXQgdGhlIHJldmlzaW9uIGFyZ3VtZW50IGFzIGEgPHJldmlzaW9uIHJhbmdlPiwgZXZlbiBpZiBpdApAQCAtMTc1LDkgKzIwMCwxMCBAQAogCiBDT05GSUdVUkFUSU9OCiAtLS0tLS0tLS0tLS0tCi1Zb3UgY2FuIHNwZWNpZnkgZXh0cmEgbWFpbCBoZWFkZXIgbGluZXMgdG8gYmUgYWRkZWQgdG8gZWFjaCBtZXNzYWdlCi1pbiB0aGUgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uLCBuZXcgZGVmYXVsdHMgZm9yIHRoZSBzdWJqZWN0IHByZWZpeAotYW5kIGZpbGUgc3VmZml4LCBhbmQgbnVtYmVyIHBhdGNoZXMgd2hlbiBvdXRwdXR0aW5nIG1vcmUgdGhhbiBvbmUuCitZb3UgY2FuIHNwZWNpZnkgZXh0cmEgbWFpbCBoZWFkZXIgbGluZXMgdG8gYmUgYWRkZWQgdG8gZWFjaCBtZXNzYWdlLAorZGVmYXVsdHMgZm9yIHRoZSBzdWJqZWN0IHByZWZpeCBhbmQgZmlsZSBzdWZmaXgsIG51bWJlciBwYXRjaGVzIHdoZW4KK291dHB1dHRpbmcgbW9yZSB0aGFuIG9uZSBwYXRjaCwgYWRkICJDYzoiIGhlYWRlcnMsIGNvbmZpZ3VyZSBhdHRhY2htZW50cywKK2FuZCBzaWduIG9mZiBwYXRjaGVzIHdpdGggY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCiAKIC0tLS0tLS0tLS0tLQogW2Zvcm1hdF0KQEAgLTE4Niw2ICsyMTIsOCBAQAogCXN1ZmZpeCA9IC50eHQKIAludW1iZXJlZCA9IGF1dG8KIAljYyA9IDxlbWFpbD4KKwlhdHRhY2ggWyA9IG1pbWUtYm91bmRhcnktc3RyaW5nIF0KKwlzaWdub2ZmID0gdHJ1ZQogLS0tLS0tLS0tLS0tCiAKIApAQCAtMjIzLDggKzI1MSw4IEBACiArCiBBZGRpdGlvbmFsbHksIGl0IGRldGVjdHMgYW5kIGhhbmRsZXMgcmVuYW1lcyBhbmQgY29tcGxldGUgcmV3cml0ZXMKIGludGVsbGlnZW50bHkgdG8gcHJvZHVjZSBhIHJlbmFtaW5nIHBhdGNoLiAgQSByZW5hbWluZyBwYXRjaCByZWR1Y2VzCi10aGUgYW1vdW50IG9mIHRleHQgb3V0cHV0LCBhbmQgZ2VuZXJhbGx5IG1ha2VzIGl0IGVhc2llciB0byByZXZpZXcgaXQuCi1Ob3RlIHRoYXQgdGhlICJwYXRjaCIgcHJvZ3JhbSBkb2VzIG5vdCB1bmRlcnN0YW5kIHJlbmFtaW5nIHBhdGNoZXMsIHNvCit0aGUgYW1vdW50IG9mIHRleHQgb3V0cHV0LCBhbmQgZ2VuZXJhbGx5IG1ha2VzIGl0IGVhc2llciB0byByZXZpZXcuCitOb3RlIHRoYXQgbm9uLWdpdCAicGF0Y2giIHByb2dyYW1zIHdvbid0IHVuZGVyc3RhbmQgcmVuYW1pbmcgcGF0Y2hlcywgc28KIHVzZSBpdCBvbmx5IHdoZW4geW91IGtub3cgdGhlIHJlY2lwaWVudCB1c2VzIGdpdCB0byBhcHBseSB5b3VyIHBhdGNoLgogCiAqIEV4dHJhY3QgdGhyZWUgdG9wbW9zdCBjb21taXRzIGZyb20gdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBmb3JtYXQgdGhlbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZ2MudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZ2MudHh0CmluZGV4IDcwODZlZWEuLmIyOTJlOTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWdjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1nYy50eHQKQEAgLTgsNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdCBnYycgWy0tYWdncmVzc2l2ZV0gWy0tYXV0b10gWy0tcXVpZXRdCisnZ2l0IGdjJyBbLS1hZ2dyZXNzaXZlXSBbLS1hdXRvXSBbLS1xdWlldF0gWy0tcHJ1bmU9PGRhdGU+IHwgLS1uby1wcnVuZV0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC01OSw2ICs1OSwxNCBAQAogJ2dpdC1yZXBhY2snLiBTZXR0aW5nIGBnYy5hdXRvcGFja2xpbWl0YCB0byAwIGRpc2FibGVzCiBhdXRvbWF0aWMgY29uc29saWRhdGlvbiBvZiBwYWNrcy4KIAorLS1wcnVuZT08ZGF0ZT46OgorCVBydW5lIGxvb3NlIG9iamVjdHMgb2xkZXIgdGhhbiBkYXRlIChkZWZhdWx0IGlzIDIgd2Vla3MgYWdvLAorCW92ZXJyaWRlYWJsZSBieSB0aGUgY29uZmlnIHZhcmlhYmxlIGBnYy5wcnVuZUV4cGlyZWApLiAgVGhpcworCW9wdGlvbiBpcyBvbiBieSBkZWZhdWx0LgorCistLW5vLXBydW5lOjoKKwlEbyBub3QgcHJ1bmUgYW55IGxvb3NlIG9iamVjdHMuCisKIC0tcXVpZXQ6OgogCVN1cHByZXNzIGFsbCBwcm9ncmVzcyByZXBvcnRzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CmluZGV4IDU1M2RhNmMuLmI3NTNjOWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CkBAIC0xNyw2ICsxNyw3IEBACiAJICAgWy1sIHwgLS1maWxlcy13aXRoLW1hdGNoZXNdIFstTCB8IC0tZmlsZXMtd2l0aG91dC1tYXRjaF0KIAkgICBbLXogfCAtLW51bGxdCiAJICAgWy1jIHwgLS1jb3VudF0gWy0tYWxsLW1hdGNoXQorCSAgIFstLWNvbG9yIHwgLS1uby1jb2xvcl0KIAkgICBbLUEgPHBvc3QtY29udGV4dD5dIFstQiA8cHJlLWNvbnRleHQ+XSBbLUMgPGNvbnRleHQ+XQogCSAgIFstZiA8ZmlsZT5dIFstZV0gPHBhdHRlcm4+CiAJICAgWy0tYW5kfC0tb3J8LS1ub3R8KHwpfC1lIDxwYXR0ZXJuPi4uLl0gWzx0cmVlPi4uLl0KQEAgLTEwNSw2ICsxMDYsMTMgQEAKIAlJbnN0ZWFkIG9mIHNob3dpbmcgZXZlcnkgbWF0Y2hlZCBsaW5lLCBzaG93IHRoZSBudW1iZXIgb2YKIAlsaW5lcyB0aGF0IG1hdGNoLgogCistLWNvbG9yOjoKKwlTaG93IGNvbG9yZWQgbWF0Y2hlcy4KKworLS1uby1jb2xvcjo6CisJVHVybiBvZmYgbWF0Y2ggaGlnaGxpZ2h0aW5nLCBldmVuIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQorCWdpdmVzIHRoZSBkZWZhdWx0IHRvIGNvbG9yIG91dHB1dC4KKwogLVtBQkNdIDxjb250ZXh0Pjo6CiAJU2hvdyBgY29udGV4dGAgdHJhaWxpbmcgKGBBYCAtLSBhZnRlciksIG9yIGxlYWRpbmcgKGBCYAogCS0tIGJlZm9yZSksIG9yIGJvdGggKGBDYCAtLSBjb250ZXh0KSBsaW5lcywgYW5kIHBsYWNlIGEKQEAgLTExNCw2ICsxMjIsMTQgQEAKIC08bnVtPjo6CiAJQSBzaG9ydGN1dCBmb3Igc3BlY2lmeWluZyAtQzxudW0+LgogCistcDo6CistLXNob3ctZnVuY3Rpb246OgorCVNob3cgdGhlIHByZWNlZGluZyBsaW5lIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIG5hbWUgb2YKKwl0aGUgbWF0Y2gsIHVubGVzcyB0aGUgbWF0Y2hpbmcgbGluZSBpcyBhIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLgorCVRoZSBuYW1lIGlzIGRldGVybWluZWQgaW4gdGhlIHNhbWUgd2F5IGFzICdnaXQgZGlmZicgd29ya3Mgb3V0CisJcGF0Y2ggaHVuayBoZWFkZXJzIChzZWUgJ0RlZmluaW5nIGEgY3VzdG9tIGh1bmstaGVhZGVyJyBpbgorCWxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSkuCisKIC1mIDxmaWxlPjo6CiAJUmVhZCBwYXR0ZXJucyBmcm9tIDxmaWxlPiwgb25lIHBlciBsaW5lLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1pbWFwLXNlbmQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW1hcC1zZW5kLnR4dAppbmRleCBiZDQ5YTBhLi5kMDE2ZGFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1pbWFwLXNlbmQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWltYXAtc2VuZC50eHQKQEAgLTUxLDcgKzUxLDcgQEAKIGltYXAudXNlcjo6CiAJVGhlIHVzZXJuYW1lIHRvIHVzZSB3aGVuIGxvZ2dpbmcgaW4gdG8gdGhlIHNlcnZlci4KIAotaW1hcC5wYXNzd29yZDo6CitpbWFwLnBhc3M6OgogCVRoZSBwYXNzd29yZCB0byB1c2Ugd2hlbiBsb2dnaW5nIGluIHRvIHRoZSBzZXJ2ZXIuCiAKIGltYXAucG9ydDo6CkBAIC02NCw2ICs2NCwxMyBAQAogCXVzZWQgYnkgdGhlIFNTTC9UTFMgY29ubmVjdGlvbi4gRGVmYXVsdCBpcyBgdHJ1ZWAuIElnbm9yZWQgd2hlbgogCWltYXAudHVubmVsIGlzIHNldC4KIAoraW1hcC5wcmVmb3JtYXR0ZWRIVE1MOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgdGhlIHVzZSBvZiBodG1sIGVuY29kaW5nIHdoZW4gc2VuZGluZworCWEgcGF0Y2guICBBbiBodG1sIGVuY29kZWQgcGF0Y2ggd2lsbCBiZSBicmFja2V0ZWQgd2l0aCA8cHJlPgorCWFuZCBoYXZlIGEgY29udGVudCB0eXBlIG9mIHRleHQvaHRtbC4gIElyb25pY2FsbHksIGVuYWJsaW5nIHRoaXMKKwlvcHRpb24gY2F1c2VzIFRodW5kZXJiaXJkIHRvIHNlbmQgdGhlIHBhdGNoIGFzIGEgcGxhaW4vdGV4dCwKKwlmb3JtYXQ9Zml4ZWQgZW1haWwuICBEZWZhdWx0IGlzIGBmYWxzZWAuCisKIEV4YW1wbGVzCiB+fn5+fn5+fgogCkBAIC05OCw2ICsxMDUsMjAgQEAKIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIAorQ0FVVElPTgorLS0tLS0tLQorSXQgaXMgc3RpbGwgeW91ciByZXNwb25zaWJpbGl0eSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZW1haWwgbWVzc2FnZQorc2VudCBieSB5b3VyIGVtYWlsIHByb2dyYW0gbWVldHMgdGhlIHN0YW5kYXJkcyBvZiB5b3VyIHByb2plY3QuCitNYW55IHByb2plY3RzIGRvIG5vdCBsaWtlIHBhdGNoZXMgdG8gYmUgYXR0YWNoZWQuICBTb21lIG1haWwKK2FnZW50cyB3aWxsIHRyYW5zZm9ybSBwYXRjaGVzIChlLmcuIHdyYXAgbGluZXMsIHNlbmQgdGhlbSBhcworZm9ybWF0PWZsb3dlZCkgaW4gd2F5cyB0aGF0IG1ha2UgdGhlbSBmYWlsLiAgWW91IHdpbGwgZ2V0IGFuZ3J5CitmbGFtZXMgcmlkaWN1bGluZyB5b3UgaWYgeW91IGRvbid0IGNoZWNrIHRoaXMuCisKK1RodW5kZXJiaXJkIGluIHBhcnRpY3VsYXIgaXMga25vd24gdG8gYmUgcHJvYmxlbWF0aWMuICBUaHVuZGVyYmlyZAordXNlcnMgbWF5IHdpc2ggdG8gdmlzaXQgdGhpcyB3ZWIgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbjoKKyAgaHR0cDovL2tiLm1vemlsbGF6aW5lLm9yZy9QbGFpbl90ZXh0X2UtbWFpbF8tX1RodW5kZXJiaXJkI0NvbXBsZXRlbHlfcGxhaW5fZW1haWwKKworCiBCVUdTCiAtLS0tCiBEb2Vzbid0IGhhbmRsZSBsaW5lcyBzdGFydGluZyB3aXRoICJGcm9tICIgaW4gdGhlIG1lc3NhZ2UgYm9keS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluaXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC50eHQKaW5kZXggNzE3NDljMC4uNzE1MWQxMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC50eHQKQEAgLTU0LDE1ICs1NCwyMSBAQAogCiAgLSAnZ3JvdXAnIChvciAndHJ1ZScpOiBNYWtlIHRoZSByZXBvc2l0b3J5IGdyb3VwLXdyaXRhYmxlLCAoYW5kIGcrc3gsIHNpbmNlCiAgICB0aGUgZ2l0IGdyb3VwIG1heSBiZSBub3QgdGhlIHByaW1hcnkgZ3JvdXAgb2YgYWxsIHVzZXJzKS4KKyAgIFRoaXMgaXMgdXNlZCB0byBsb29zZW4gdGhlIHBlcm1pc3Npb25zIG9mIGFuIG90aGVyd2lzZSBzYWZlIHVtYXNrKDIpIHZhbHVlLgorICAgTm90ZSB0aGF0IHRoZSB1bWFzayBzdGlsbCBhcHBsaWVzIHRvIHRoZSBvdGhlciBwZXJtaXNzaW9uIGJpdHMgKGUuZy4gaWYKKyAgIHVtYXNrIGlzICcwMDIyJywgdXNpbmcgJ2dyb3VwJyB3aWxsIG5vdCByZW1vdmUgcmVhZCBwcml2aWxlZ2VzIGZyb20gb3RoZXIKKyAgIChub24tZ3JvdXApIHVzZXJzKS4gU2VlICcweHh4JyBmb3IgaG93IHRvIGV4YWN0bHkgc3BlY2lmeSB0aGUgcmVwb3NpdG9yeQorICAgcGVybWlzc2lvbnMuCiAKICAtICdhbGwnIChvciAnd29ybGQnIG9yICdldmVyeWJvZHknKTogU2FtZSBhcyAnZ3JvdXAnLCBidXQgbWFrZSB0aGUgcmVwb3NpdG9yeQogICAgcmVhZGFibGUgYnkgYWxsIHVzZXJzLgogCi0gLSAnMHh4eCc6ICcweHh4JyBpcyBhbiBvY3RhbCBudW1iZXIgYW5kIGVhY2ggZmlsZSB3aWxsIGhhdmUgbW9kZSAnMHh4eCcKLSAgIEFueSBvcHRpb24gZXhjZXB0ICd1bWFzaycgY2FuIGJlIHNldCB1c2luZyB0aGlzIG9wdGlvbi4gJzB4eHgnIHdpbGwKLSAgIG92ZXJyaWRlIHVzZXJzIHVtYXNrKDIpIHZhbHVlLCBhbmQgdGh1cywgdXNlcnMgd2l0aCBhIHNhZmUgdW1hc2sgKDAwNzcpCi0gICBjYW4gdXNlIHRoaXMgb3B0aW9uLiAnMDY0MCcgd2lsbCBjcmVhdGUgYSByZXBvc2l0b3J5IHdoaWNoIGlzIGdyb3VwLXJlYWRhYmxlCi0gICBidXQgbm90IHdyaXRhYmxlLiAnMDY2MCcgaXMgZXF1aXZhbGVudCB0byAnZ3JvdXAnLgorIC0gJzB4eHgnOiAnMHh4eCcgaXMgYW4gb2N0YWwgbnVtYmVyIGFuZCBlYWNoIGZpbGUgd2lsbCBoYXZlIG1vZGUgJzB4eHgnLgorICAgJzB4eHgnIHdpbGwgb3ZlcnJpZGUgdXNlcnMnIHVtYXNrKDIpIHZhbHVlIChhbmQgbm90IG9ubHkgbG9vc2VuIHBlcm1pc3Npb25zCisgICBhcyAnZ3JvdXAnIGFuZCAnYWxsJyBkb2VzKS4gJzA2NDAnIHdpbGwgY3JlYXRlIGEgcmVwb3NpdG9yeSB3aGljaCBpcworICAgZ3JvdXAtcmVhZGFibGUsIGJ1dCBub3QgZ3JvdXAtd3JpdGFibGUgb3IgYWNjZXNzaWJsZSB0byBvdGhlcnMuICcwNjYwJyB3aWxsCisgICBjcmVhdGUgYSByZXBvIHRoYXQgaXMgcmVhZGFibGUgYW5kIHdyaXRhYmxlIHRvIHRoZSBjdXJyZW50IHVzZXIgYW5kIGdyb3VwLAorICAgYnV0IGluYWNjZXNzaWJsZSB0byBvdGhlcnMuCiAKIEJ5IGRlZmF1bHQsIHRoZSBjb25maWd1cmF0aW9uIGZsYWcgcmVjZWl2ZS5kZW55Tm9uRmFzdEZvcndhcmRzIGlzIGVuYWJsZWQKIGluIHNoYXJlZCByZXBvc2l0b3JpZXMsIHNvIHRoYXQgeW91IGNhbm5vdCBmb3JjZSBhIG5vbiBmYXN0LWZvcndhcmRpbmcgcHVzaApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0CmluZGV4IDlmODVkNjAuLjA1N2EwMjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy1maWxlcy50eHQKQEAgLTEyNiw3ICsxMjYsNyBAQAogCiAtLWFiYnJldls9PG4+XTo6CiAJSW5zdGVhZCBvZiBzaG93aW5nIHRoZSBmdWxsIDQwLWJ5dGUgaGV4YWRlY2ltYWwgb2JqZWN0Ci0JbGluZXMsIHNob3cgb25seSBoYW5kZnVsIGhleGRpZ2l0cyBwcmVmaXguCisJbGluZXMsIHNob3cgb25seSBhIHBhcnRpYWwgcHJlZml4LgogCU5vbiBkZWZhdWx0IG51bWJlciBvZiBkaWdpdHMgY2FuIGJlIHNwZWNpZmllZCB3aXRoIC0tYWJicmV2PTxuPi4KIAogXC0tOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKaW5kZXggMjM3MDczMS4uYzNmZGNjYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKQEAgLTYxLDcgKzYxLDcgQEAKIAogLS1hYmJyZXZbPTxuPl06OgogCUluc3RlYWQgb2Ygc2hvd2luZyB0aGUgZnVsbCA0MC1ieXRlIGhleGFkZWNpbWFsIG9iamVjdAotCWxpbmVzLCBzaG93IG9ubHkgaGFuZGZ1bCBoZXhkaWdpdHMgcHJlZml4LgorCWxpbmVzLCBzaG93IG9ubHkgYSBwYXJ0aWFsIHByZWZpeC4KIAlOb24gZGVmYXVsdCBudW1iZXIgb2YgZGlnaXRzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCAtLWFiYnJldj08bj4uCiAKIC0tZnVsbC1uYW1lOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dAppbmRleCBmN2JlNTg0Li5hZjY4ZDY5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UudHh0CkBAIC0xMCw3ICsxMCw3IEBACiAtLS0tLS0tLQogW3ZlcnNlXQogJ2dpdCBtZXJnZScgWy1uXSBbLS1zdGF0XSBbLS1uby1jb21taXRdIFstLXNxdWFzaF0gWy1zIDxzdHJhdGVneT5dLi4uCi0JWy1tIDxtc2c+XSA8cmVtb3RlPiA8cmVtb3RlPi4uLgorCVstbSA8bXNnPl0gPHJlbW90ZT4uLi4KICdnaXQgbWVyZ2UnIDxtc2c+IEhFQUQgPHJlbW90ZT4uLi4KIAogREVTQ1JJUFRJT04KQEAgLTQwLDggKzQwLDggQEAKIGluY2x1ZGU6Om1lcmdlLXN0cmF0ZWdpZXMudHh0W10KIAogCi1JZiB5b3UgdHJpZWQgYSBtZXJnZSB3aGljaCByZXN1bHRlZCBpbiBhIGNvbXBsZXggY29uZmxpY3RzIGFuZAotd291bGQgd2FudCB0byBzdGFydCBvdmVyLCB5b3UgY2FuIHJlY292ZXIgd2l0aCAnZ2l0LXJlc2V0Jy4KK0lmIHlvdSB0cmllZCBhIG1lcmdlIHdoaWNoIHJlc3VsdGVkIGluIGNvbXBsZXggY29uZmxpY3RzIGFuZAord2FudCB0byBzdGFydCBvdmVyLCB5b3UgY2FuIHJlY292ZXIgd2l0aCAnZ2l0LXJlc2V0Jy4KIAogQ09ORklHVVJBVElPTgogLS0tLS0tLS0tLS0tLQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAtLS0tLS0tLS0tLS0KIAogVGhlIGFyZWEgd2hlcmUgYSBwYWlyIG9mIGNvbmZsaWN0aW5nIGNoYW5nZXMgaGFwcGVuZWQgaXMgbWFya2VkIHdpdGggbWFya2VycwotImA8PDw8PDw8YCIsICJgPT09PT09PWAiLCBhbmQgImA+Pj4+Pj4+YCIuICBUaGUgcGFydCBiZWZvcmUgdGhlICJgPT09PT09PWAiCitgPDw8PDw8PGAsIGA9PT09PT09YCwgYW5kIGA+Pj4+Pj4+YC4gIFRoZSBwYXJ0IGJlZm9yZSB0aGUgYD09PT09PT1gCiBpcyB0eXBpY2FsbHkgeW91ciBzaWRlLCBhbmQgdGhlIHBhcnQgYWZ0ZXJ3YXJkcyBpcyB0eXBpY2FsbHkgdGhlaXIgc2lkZS4KIAogVGhlIGRlZmF1bHQgZm9ybWF0IGRvZXMgbm90IHNob3cgd2hhdCB0aGUgb3JpZ2luYWwgc2FpZCBpbiB0aGUgY29uZmxpY3RpbmcKQEAgLTE3Myw4ICsxNzMsOCBAQAogQW5kIGhlcmUgaXMgYW5vdGhlciBsaW5lIHRoYXQgaXMgY2xlYW5seSByZXNvbHZlZCBvciB1bm1vZGlmaWVkLgogLS0tLS0tLS0tLS0tCiAKLUluIGFkZGl0aW9uIHRvIHRoZSAiYDw8PDw8PDxgIiwgImA9PT09PT09YCIsIGFuZCAiYD4+Pj4+Pj5gIiBtYXJrZXJzLCBpdCB1c2VzCi1hbm90aGVyICJgfHx8fHx8fGAiIG1hcmtlciB0aGF0IGlzIGZvbGxvd2VkIGJ5IHRoZSBvcmlnaW5hbCB0ZXh0LiAgWW91IGNhbgorSW4gYWRkaXRpb24gdG8gdGhlIGA8PDw8PDw8YCwgYD09PT09PT1gLCBhbmQgYD4+Pj4+Pj5gIG1hcmtlcnMsIGl0IHVzZXMKK2Fub3RoZXIgYHx8fHx8fHxgIG1hcmtlciB0aGF0IGlzIGZvbGxvd2VkIGJ5IHRoZSBvcmlnaW5hbCB0ZXh0LiAgWW91IGNhbgogdGVsbCB0aGF0IHRoZSBvcmlnaW5hbCBqdXN0IHN0YXRlZCBhIGZhY3QsIGFuZCB5b3VyIHNpZGUgc2ltcGx5IGdhdmUgaW4gdG8KIHRoYXQgc3RhdGVtZW50IGFuZCBnYXZlIHVwLCB3aGlsZSB0aGUgb3RoZXIgc2lkZSB0cmllZCB0byBoYXZlIGEgbW9yZQogcG9zaXRpdmUgYXR0aXR1ZGUuICBZb3UgY2FuIHNvbWV0aW1lcyBjb21lIHVwIHdpdGggYSBiZXR0ZXIgcmVzb2x1dGlvbiBieQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLS1saWIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLS1saWIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZWIwM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZXRvb2wtLWxpYi50eHQKQEAgLTAsMCArMSw1NCBAQAorZ2l0LW1lcmdldG9vbC0tbGliKDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1lcmdldG9vbC0tbGliIC0gQ29tbW9uIGdpdCBtZXJnZSB0b29sIHNoZWxsIHNjcmlwdGxldHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCisnVE9PTF9NT0RFPShkaWZmfG1lcmdlKSAuICIkKGdpdCAtLWV4ZWMtcGF0aCkvZ2l0LW1lcmdldG9vbC0tbGliIicKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgbm90IGEgY29tbWFuZCB0aGUgZW5kIHVzZXIgd291bGQgd2FudCB0byBydW4uICBFdmVyLgorVGhpcyBkb2N1bWVudGF0aW9uIGlzIG1lYW50IGZvciBwZW9wbGUgd2hvIGFyZSBzdHVkeWluZyB0aGUKK1BvcmNlbGFpbi1pc2ggc2NyaXB0cyBhbmQvb3IgYXJlIHdyaXRpbmcgbmV3IG9uZXMuCisKK1RoZSAnZ2l0LW1lcmdldG9vbC0tbGliJyBzY3JpcHRsZXQgaXMgZGVzaWduZWQgdG8gYmUgc291cmNlZCAodXNpbmcKK2AuYCkgYnkgb3RoZXIgc2hlbGwgc2NyaXB0cyB0byBzZXQgdXAgZnVuY3Rpb25zIGZvciB3b3JraW5nCit3aXRoIGdpdCBtZXJnZSB0b29scy4KKworQmVmb3JlIHNvdXJjaW5nICdnaXQtbWVyZ2V0b29sLS1saWInLCB5b3VyIHNjcmlwdCBtdXN0IHNldCBgVE9PTF9NT0RFYAordG8gZGVmaW5lIHRoZSBvcGVyYXRpb24gbW9kZSBmb3IgdGhlIGZ1bmN0aW9ucyBsaXN0ZWQgYmVsb3cuCisnZGlmZicgYW5kICdtZXJnZScgYXJlIHZhbGlkIHZhbHVlcy4KKworRlVOQ1RJT05TCistLS0tLS0tLS0KK2dldF9tZXJnZV90b29sOjoKKwlyZXR1cm5zIGEgbWVyZ2UgdG9vbC4KKworZ2V0X21lcmdlX3Rvb2xfY21kOjoKKwlyZXR1cm5zIHRoZSBjdXN0b20gY29tbWFuZCBmb3IgYSBtZXJnZSB0b29sLgorCitnZXRfbWVyZ2VfdG9vbF9wYXRoOjoKKwlyZXR1cm5zIHRoZSBjdXN0b20gcGF0aCBmb3IgYSBtZXJnZSB0b29sLgorCitydW5fbWVyZ2VfdG9vbDo6CisJbGF1bmNoZXMgYSBtZXJnZSB0b29sIGdpdmVuIHRoZSB0b29sIG5hbWUgYW5kIGEgdHJ1ZS9mYWxzZQorCWZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBhIG1lcmdlIGJhc2UgaXMgcHJlc2VudC4KKwknJE1FUkdFRCcsICckTE9DQUwnLCAnJFJFTU9URScsIGFuZCAnJEJBU0UnIG11c3QgYmUgZGVmaW5lZAorCWZvciB1c2UgYnkgdGhlIG1lcmdlIHRvb2wuCisKK0F1dGhvcgorLS0tLS0tCitXcml0dGVuIGJ5IERhdmlkIEFndWlsYXIgPGRhdnZpZEBnbWFpbC5jb20+CisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uIGJ5IERhdmlkIEFndWlsYXIgYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC50eHQKaW5kZXggNjAyZTdjNi4uNjhlZDZjMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZXRvb2wudHh0CkBAIC03LDcgKzcsNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQgbWVyZ2V0b29sJyBbLS10b29sPTx0b29sPl0gWzxmaWxlPl0uLi4KKydnaXQgbWVyZ2V0b29sJyBbLS10b29sPTx0b29sPl0gWy15fC0tbm8tcHJvbXB0fC0tcHJvbXB0XSBbPGZpbGU+XS4uLgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTIyLDEwICsyMiwxMiBAQAogCiBPUFRJT05TCiAtLS0tLS0tCi0tdCBvciAtLXRvb2w9PHRvb2w+OjoKKy10IDx0b29sPjo6CistLXRvb2w9PHRvb2w+OjoKIAlVc2UgdGhlIG1lcmdlIHJlc29sdXRpb24gcHJvZ3JhbSBzcGVjaWZpZWQgYnkgPHRvb2w+LgogCVZhbGlkIG1lcmdlIHRvb2xzIGFyZToKLQlrZGlmZjMsIHRrZGlmZiwgbWVsZCwgeHhkaWZmLCBlbWVyZ2UsIHZpbWRpZmYsIGd2aW1kaWZmLCBlY21lcmdlLCBhbmQgb3BlbmRpZmYKKwlrZGlmZjMsIHRrZGlmZiwgbWVsZCwgeHhkaWZmLCBlbWVyZ2UsIHZpbWRpZmYsIGd2aW1kaWZmLCBlY21lcmdlLAorCWRpZmZ1c2UsIHRvcnRvaXNlbWVyZ2UsIG9wZW5kaWZmIGFuZCBhcmF4aXMuCiArCiBJZiBhIG1lcmdlIHJlc29sdXRpb24gcHJvZ3JhbSBpcyBub3Qgc3BlY2lmaWVkLCAnZ2l0LW1lcmdldG9vbCcKIHdpbGwgdXNlIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBtZXJnZS50b29sYC4gIElmIHRoZQpAQCAtNjAsNiArNjIsMTYgQEAKIE90aGVyd2lzZSwgJ2dpdC1tZXJnZXRvb2wnIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIGluZGljYXRlIHRoZQogc3VjY2VzcyBvZiB0aGUgcmVzb2x1dGlvbiBhZnRlciB0aGUgY3VzdG9tIHRvb2wgaGFzIGV4aXRlZC4KIAorLXk6OgorLS1uby1wcm9tcHQ6OgorCURvbid0IHByb21wdCBiZWZvcmUgZWFjaCBpbnZvY2F0aW9uIG9mIHRoZSBtZXJnZSByZXNvbHV0aW9uCisJcHJvZ3JhbS4KKworLS1wcm9tcHQ6OgorCVByb21wdCBiZWZvcmUgZWFjaCBpbnZvY2F0aW9uIG9mIHRoZSBtZXJnZSByZXNvbHV0aW9uIHByb2dyYW0uCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXI7IHRoZSBvcHRpb24gaXMgcHJvdmlkZWQgdG8KKwlvdmVycmlkZSBhbnkgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KKwogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgVGhlb2RvcmUgWSBUcydvIDx0eXRzb0BtaXQuZWR1PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWt0cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1rdHJlZS50eHQKaW5kZXggYWYxOWYwNi4uODFlMzMyNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWt0cmVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ta3RyZWUudHh0CkBAIC04LDEyICs4LDEzIEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdCBta3RyZWUnIFstel0KKydnaXQgbWt0cmVlJyBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLVJlYWRzIHN0YW5kYXJkIGlucHV0IGluIG5vbi1yZWN1cnNpdmUgYGxzLXRyZWVgIG91dHB1dCBmb3JtYXQsCi1hbmQgY3JlYXRlcyBhIHRyZWUgb2JqZWN0LiAgVGhlIG9iamVjdCBuYW1lIG9mIHRoZSB0cmVlIG9iamVjdAorUmVhZHMgc3RhbmRhcmQgaW5wdXQgaW4gbm9uLXJlY3Vyc2l2ZSBgbHMtdHJlZWAgb3V0cHV0IGZvcm1hdCwgYW5kIGNyZWF0ZXMKK2EgdHJlZSBvYmplY3QuICBUaGUgb3JkZXIgb2YgdGhlIHRyZWUgZW50cmllcyBpcyBub3JtYWxpc2VkIGJ5IG1rdHJlZSBzbworcHJlLXNvcnRpbmcgdGhlIGlucHV0IGlzIG5vdCByZXF1aXJlZC4gIFRoZSBvYmplY3QgbmFtZSBvZiB0aGUgdHJlZSBvYmplY3QKIGJ1aWx0IGlzIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KIAogT1BUSU9OUwpAQCAtMjEsNiArMjIsMTggQEAKIC16OjoKIAlSZWFkIHRoZSBOVUwtdGVybWluYXRlZCBgbHMtdHJlZSAtemAgb3V0cHV0IGluc3RlYWQuCiAKKy0tbWlzc2luZzo6CisJQWxsb3cgbWlzc2luZyBvYmplY3RzLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyICh3aXRob3V0IHRoaXMgb3B0aW9uKQorCWlzIHRvIHZlcmlmeSB0aGF0IGVhY2ggdHJlZSBlbnRyeSdzIHNoYTEgaWRlbnRpZmllcyBhbiBleGlzdGluZworCW9iamVjdC4gIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHRyZWF0bWVudCBvZiBnaXRsaW5rIGVudHJpZXMKKwkoYWthICJzdWJtb2R1bGVzIikgd2hpY2ggYXJlIGFsd2F5cyBhbGxvd2VkIHRvIGJlIG1pc3NpbmcuCisKKy0tYmF0Y2g6OgorCUFsbG93IGJ1aWxkaW5nIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSBvYmplY3QgYmVmb3JlIGV4aXRpbmcuICBFYWNoCisJdHJlZSBpcyBzZXBhcmF0ZWQgYnkgYXMgc2luZ2xlIGJsYW5rIGxpbmUuIFRoZSBmaW5hbCBuZXctbGluZSBpcworCW9wdGlvbmFsLiAgTm90ZSAtIGlmIHRoZSAnLXonIG9wdGlvbiBpcyB1c2VkLCBsaW5lcyBhcmUgdGVybWluYXRlZAorCXdpdGggTlVMLgorCiBBdXRob3IKIC0tLS0tLQogV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dAppbmRleCA3ZDRjMWE3Li4yZTQ5OTI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stb2JqZWN0cy50eHQKQEAgLTExLDcgKzExLDggQEAKIFt2ZXJzZV0KICdnaXQgcGFjay1vYmplY3RzJyBbLXFdIFstLW5vLXJldXNlLWRlbHRhXSBbLS1kZWx0YS1iYXNlLW9mZnNldF0gWy0tbm9uLWVtcHR5XQogCVstLWxvY2FsXSBbLS1pbmNyZW1lbnRhbF0gWy0td2luZG93PU5dIFstLWRlcHRoPU5dIFstLWFsbC1wcm9ncmVzc10KLQlbLS1yZXZzIFstLXVucGFja2VkIHwgLS1hbGxdKl0gWy0tc3Rkb3V0IHwgYmFzZS1uYW1lXSA8IG9iamVjdC1saXN0CisJWy0tcmV2cyBbLS11bnBhY2tlZCB8IC0tYWxsXSpdIFstLXN0ZG91dCB8IGJhc2UtbmFtZV0KKwlbLS1rZWVwLXRydWUtcGFyZW50c10gPCBvYmplY3QtbGlzdAogCiAKIERFU0NSSVBUSU9OCkBAIC0xOTcsNiArMTk4LDEwIEBACiAJdG8gZm9yY2UgdGhlIHZlcnNpb24gZm9yIHRoZSBnZW5lcmF0ZWQgcGFjayBpbmRleCwgYW5kIHRvIGZvcmNlCiAJNjQtYml0IGluZGV4IGVudHJpZXMgb24gb2JqZWN0cyBsb2NhdGVkIGFib3ZlIHRoZSBnaXZlbiBvZmZzZXQuCiAKKy0ta2VlcC10cnVlLXBhcmVudHM6OgorCVdpdGggdGhpcyBvcHRpb24sIHBhcmVudHMgdGhhdCBhcmUgaGlkZGVuIGJ5IGdyYWZ0cyBhcmUgcGFja2VkCisJbmV2ZXJ0aGVsZXNzLgorCiAKIEF1dGhvcgogLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWZzLnR4dAppbmRleCBhNTI0NGQzLi4xZWU5OWMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVmcy50eHQKQEAgLTI2LDcgKzI2LDcgQEAKIHRyYWRpdGlvbmFsIGAkR0lUX0RJUi9yZWZzYCBoaWVyYXJjaHksIGl0IGlzIGxvb2tlZCB1cCBpbiB0aGlzCiBmaWxlIGFuZCB1c2VkIGlmIGZvdW5kLgogCi1TdWJzZXF1ZW50IHVwZGF0ZXMgdG8gYnJhbmNoZXMgYWx3YXlzIGNyZWF0ZXMgbmV3IGZpbGUgdW5kZXIKK1N1YnNlcXVlbnQgdXBkYXRlcyB0byBicmFuY2hlcyBhbHdheXMgY3JlYXRlIG5ldyBmaWxlcyB1bmRlcgogYCRHSVRfRElSL3JlZnNgIGhpZXJhcmNoeS4KIAogQSByZWNvbW1lbmRlZCBwcmFjdGljZSB0byBkZWFsIHdpdGggYSByZXBvc2l0b3J5IHdpdGggdG9vIG1hbnkKQEAgLTM1LDcgKzM1LDcgQEAKIGRlZmluaXRpb24gc3RhdGlvbmFyeSBhbmQgYXJlIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UuICBCcmFuY2gKIGhlYWRzIHdpbGwgYmUgcGFja2VkIHdpdGggdGhlIGluaXRpYWwgYHBhY2stcmVmcyAtLWFsbGAsIGJ1dAogb25seSB0aGUgY3VycmVudGx5IGFjdGl2ZSBicmFuY2ggaGVhZHMgd2lsbCBiZWNvbWUgdW5wYWNrZWQsCi1hbmQgbmV4dCBgcGFjay1yZWZzYCAod2l0aG91dCBgLS1hbGxgKSB3aWxsIGxlYXZlIHRoZW0KK2FuZCB0aGUgbmV4dCBgcGFjay1yZWZzYCAod2l0aG91dCBgLS1hbGxgKSB3aWxsIGxlYXZlIHRoZW0KIHVucGFja2VkLgogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYXJzZS1yZW1vdGUudHh0CmluZGV4IGNkNDMwNjkuLjM5ZDlkYWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGFyc2UtcmVtb3RlLnR4dApAQCAtMTcsMjYgKzE3LDYgQEAKICRHSVRfRElSL2JyYW5jaGVzLyBhbmQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCBhcmUgcmVsYXRlZAogdG8gZmV0Y2hpbmcsIHB1bGxpbmcgYW5kIHB1c2hpbmcuCiAKLVRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBhcmU6Ci0KLWdldF9yZW1vdGVfcmVmc19mb3JfZmV0Y2g6OgotCUdpdmVuIHRoZSBsaXN0IG9mIHVzZXItc3VwcGxpZWQgYDxyZXBvPiA8cmVmc3BlYz4uLi5gLAotCXJldHVybiB0aGUgbGlzdCBvZiByZWZzIHRvIGZldGNoIGFmdGVyIGNhbm9uaWNhbGl6aW5nCi0JdGhlbSBpbnRvIGAkR0lUX0RJUmAgcmVsYXRpdmUgcGF0aHMKLQkoZS5nLiBgcmVmcy9oZWFkcy9mb29gKS4gIFdoZW4gYDxyZWZzcGVjPi4uLmAgaXMgZW1wdHkKLQl0aGUgcmV0dXJuZWQgbGlzdCBvZiByZWZzIGNvbnNpc3RzIG9mIHRoZSBkZWZhdWx0cwotCWZvciB0aGUgZ2l2ZW4gYDxyZXBvPmAsIGlmIHNwZWNpZmllZCBpbgotCWAkR0lUX0RJUi9yZW1vdGVzL2AsIGAkR0lUX0RJUi9icmFuY2hlcy9gLCBvciBgcmVtb3RlLiouZmV0Y2hgCi0JY29uZmlndXJhdGlvbi4KLQotZ2V0X3JlbW90ZV9yZWZzX2Zvcl9wdXNoOjoKLQlHaXZlbiB0aGUgbGlzdCBvZiB1c2VyLXN1cHBsaWVkIGA8cmVwbz4gPHJlZnNwZWM+Li4uYCwKLQlyZXR1cm4gdGhlIGxpc3Qgb2YgcmVmcyB0byBwdXNoIGluIGEgZm9ybSBzdWl0YWJsZSB0byBiZQotCWZlZCB0byB0aGUgJ2dpdC1zZW5kLXBhY2snIGNvbW1hbmQuICBXaGVuIGA8cmVmc3BlYz4uLi5gCi0JaXMgZW1wdHkgdGhlIHJldHVybmVkIGxpc3Qgb2YgcmVmcyBjb25zaXN0cyBvZiB0aGUKLQlkZWZhdWx0cyBmb3IgdGhlIGdpdmVuIGA8cmVwbz5gLCBpZiBzcGVjaWZpZWQgaW4KLQlgJEdJVF9ESVIvcmVtb3Rlcy9gLgotCiBBdXRob3IKIC0tLS0tLQogV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFuby4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhdGNoLWlkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBhdGNoLWlkLnR4dAppbmRleCA0Nzc3ODVlLi4yNTNmYzBmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wYXRjaC1pZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGF0Y2gtaWQudHh0CkBAIC0yMCw3ICsyMCw3IEBACiAKIFdoZW4gZGVhbGluZyB3aXRoICdnaXQtZGlmZi10cmVlJyBvdXRwdXQsIGl0IHRha2VzIGFkdmFudGFnZSBvZgogdGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggaXMgcHJlZml4ZWQgd2l0aCB0aGUgb2JqZWN0IG5hbWUgb2YgdGhlCi1jb21taXQsIGFuZCBvdXRwdXRzIHR3byA0MC1ieXRlIGhleGFkZWNpbWFsIHN0cmluZy4gIFRoZSBmaXJzdAorY29tbWl0LCBhbmQgb3V0cHV0cyB0d28gNDAtYnl0ZSBoZXhhZGVjaW1hbCBzdHJpbmdzLiAgVGhlIGZpcnN0CiBzdHJpbmcgaXMgdGhlIHBhdGNoIElELCBhbmQgdGhlIHNlY29uZCBzdHJpbmcgaXMgdGhlIGNvbW1pdCBJRC4KIFRoaXMgY2FuIGJlIHVzZWQgdG8gbWFrZSBhIG1hcHBpbmcgZnJvbSBwYXRjaCBJRCB0byBjb21taXQgSUQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQKaW5kZXggYWM2NDIxMS4uNThkMmJkNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQKQEAgLTI0LDggKzI0LDggQEAKIGRvY3VtZW50YXRpb24gZm9yIGxpbmtnaXQ6Z2l0LXJlY2VpdmUtcGFja1sxXS4KIAogCi1PUFRJT05TCi0tLS0tLS0tCitPUFRJT05TW1tPUFRJT05TXV0KKy0tLS0tLS0tLS0tLS0tLS0tLQogPHJlcG9zaXRvcnk+OjoKIAlUaGUgInJlbW90ZSIgcmVwb3NpdG9yeSB0aGF0IGlzIGRlc3RpbmF0aW9uIG9mIGEgcHVzaAogCW9wZXJhdGlvbi4gIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBlaXRoZXIgYSBVUkwKQEAgLTQ4LDE3ICs0OCwxOSBAQAogYmUgbmFtZWQuIElmIGA6YDxkc3Q+IGlzIG9taXR0ZWQsIHRoZSBzYW1lIHJlZiBhcyA8c3JjPiB3aWxsIGJlCiB1cGRhdGVkLgogKwotVGhlIG9iamVjdCByZWZlcmVuY2VkIGJ5IDxzcmM+IGlzIHVzZWQgdG8gZmFzdCBmb3J3YXJkIHRoZSByZWYgPGRzdD4KLW9uIHRoZSByZW1vdGUgc2lkZS4gSWYgdGhlIG9wdGlvbmFsIGxlYWRpbmcgcGx1cyBge3BsdXN9YCBpcyB1c2VkLCB0aGUKLXJlbW90ZSByZWYgaXMgdXBkYXRlZCBldmVuIGlmIGl0IGRvZXMgbm90IHJlc3VsdCBpbiBhIGZhc3QgZm9yd2FyZAotdXBkYXRlLgorVGhlIG9iamVjdCByZWZlcmVuY2VkIGJ5IDxzcmM+IGlzIHVzZWQgdG8gdXBkYXRlIHRoZSA8ZHN0PiByZWZlcmVuY2UKK29uIHRoZSByZW1vdGUgc2lkZSwgYnV0IGJ5IGRlZmF1bHQgdGhpcyBpcyBvbmx5IGFsbG93ZWQgaWYgdGhlCit1cGRhdGUgY2FuIGZhc3QgZm9yd2FyZCA8ZHN0Pi4gIEJ5IGhhdmluZyB0aGUgb3B0aW9uYWwgbGVhZGluZyBge3BsdXN9YCwKK3lvdSBjYW4gdGVsbCBnaXQgdG8gdXBkYXRlIHRoZSA8ZHN0PiByZWYgZXZlbiB3aGVuIHRoZSB1cGRhdGUgaXMgbm90IGEKK2Zhc3QgZm9yd2FyZC4gIFRoaXMgZG9lcyAqbm90KiBhdHRlbXB0IHRvIG1lcmdlIDxzcmM+IGludG8gPGRzdD4uICBTZWUKK0VYQU1QTEVTIGJlbG93IGZvciBkZXRhaWxzLgogKwogYHRhZyA8dGFnPmAgbWVhbnMgdGhlIHNhbWUgYXMgYHJlZnMvdGFncy88dGFnPjpyZWZzL3RhZ3MvPHRhZz5gLgogKwogUHVzaGluZyBhbiBlbXB0eSA8c3JjPiBhbGxvd3MgeW91IHRvIGRlbGV0ZSB0aGUgPGRzdD4gcmVmIGZyb20KIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4KICsKLVRoZSBzcGVjaWFsIHJlZnNwZWMgYDpgIChvciBgKzpgIHRvIGFsbG93IG5vbi1mYXN0IGZvcndhcmQgdXBkYXRlcykKK1RoZSBzcGVjaWFsIHJlZnNwZWMgYDpgIChvciBge3BsdXN9OmAgdG8gYWxsb3cgbm9uLWZhc3QgZm9yd2FyZCB1cGRhdGVzKQogZGlyZWN0cyBnaXQgdG8gcHVzaCAibWF0Y2hpbmciIGJyYW5jaGVzOiBmb3IgZXZlcnkgYnJhbmNoIHRoYXQgZXhpc3RzIG9uCiB0aGUgbG9jYWwgc2lkZSwgdGhlIHJlbW90ZSBzaWRlIGlzIHVwZGF0ZWQgaWYgYSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZQogYWxyZWFkeSBleGlzdHMgb24gdGhlIHJlbW90ZSBzaWRlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBvcGVyYXRpb24gbW9kZQpAQCAtODMsNiArODUsMTEgQEAKIC0tZHJ5LXJ1bjo6CiAJRG8gZXZlcnl0aGluZyBleGNlcHQgYWN0dWFsbHkgc2VuZCB0aGUgdXBkYXRlcy4KIAorLS1wb3JjZWxhaW46OgorCVByb2R1Y2UgbWFjaGluZS1yZWFkYWJsZSBvdXRwdXQuICBUaGUgb3V0cHV0IHN0YXR1cyBsaW5lIGZvciBlYWNoIHJlZgorCXdpbGwgYmUgdGFiLXNlcGFyYXRlZCBhbmQgc2VudCB0byBzdGRvdXQgaW5zdGVhZCBvZiBzdGRlcnIuICBUaGUgZnVsbAorCXN5bWJvbGljIG5hbWVzIG9mIHRoZSByZWZzIHdpbGwgYmUgZ2l2ZW4uCisKIC0tdGFnczo6CiAJQWxsIHJlZnMgdW5kZXIgYCRHSVRfRElSL3JlZnMvdGFnc2AgYXJlIHB1c2hlZCwgaW4KIAlhZGRpdGlvbiB0byByZWZzcGVjcyBleHBsaWNpdGx5IGxpc3RlZCBvbiB0aGUgY29tbWFuZApAQCAtMTQ2LDYgKzE1MywxMiBAQAogIDxmbGFnPiA8c3VtbWFyeT4gPGZyb20+IC0+IDx0bz4gKDxyZWFzb24+KQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitJZiAtLXBvcmNlbGFpbiBpcyB1c2VkLCB0aGVuIGVhY2ggbGluZSBvZiB0aGUgb3V0cHV0IGlzIG9mIHRoZSBmb3JtOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgPGZsYWc+IFx0IDxmcm9tPjo8dG8+IFx0IDxzdW1tYXJ5PiAoPHJlYXNvbj4pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIGZsYWc6OgogCUEgc2luZ2xlIGNoYXJhY3RlciBpbmRpY2F0aW5nIHRoZSBzdGF0dXMgb2YgdGhlIHJlZi4gVGhpcyBpcwogCWJsYW5rIGZvciBhIHN1Y2Nlc3NmdWxseSBwdXNoZWQgcmVmLCBgIWAgZm9yIGEgcmVmIHRoYXQgd2FzCkBAIC0xODIsOSArMTk1LDExNyBAQAogCXJlZnMsIG5vIGV4cGxhbmF0aW9uIGlzIG5lZWRlZC4gRm9yIGEgZmFpbGVkIHJlZiwgdGhlIHJlYXNvbiBmb3IKIAlmYWlsdXJlIGlzIGRlc2NyaWJlZC4KIAorTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBhbiB1cGRhdGUgY2hhbmdlcyBhIGJyYW5jaCAob3IgbW9yZSBpbiBnZW5lcmFsLCBhIHJlZikgdGhhdCB1c2VkIHRvCitwb2ludCBhdCBjb21taXQgQSB0byBwb2ludCBhdCBhbm90aGVyIGNvbW1pdCBCLCBpdCBpcyBjYWxsZWQgYQorZmFzdC1mb3J3YXJkIHVwZGF0ZSBpZiBhbmQgb25seSBpZiBCIGlzIGEgZGVzY2VuZGFudCBvZiBBLgorCitJbiBhIGZhc3QtZm9yd2FyZCB1cGRhdGUgZnJvbSBBIHRvIEIsIHRoZSBzZXQgb2YgY29tbWl0cyB0aGF0IHRoZSBvcmlnaW5hbAorY29tbWl0IEEgYnVpbHQgb24gdG9wIG9mIGlzIGEgc3Vic2V0IG9mIHRoZSBjb21taXRzIHRoZSBuZXcgY29tbWl0IEIKK2J1aWxkcyBvbiB0b3Agb2YuICBIZW5jZSwgaXQgZG9lcyBub3QgbG9zZSBhbnkgaGlzdG9yeS4KKworSW4gY29udHJhc3QsIGEgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGUgd2lsbCBsb3NlIGhpc3RvcnkuICBGb3IgZXhhbXBsZSwKK3N1cHBvc2UgeW91IGFuZCBzb21lYm9keSBlbHNlIHN0YXJ0ZWQgYXQgdGhlIHNhbWUgY29tbWl0IFgsIGFuZCB5b3UgYnVpbHQKK2EgaGlzdG9yeSBsZWFkaW5nIHRvIGNvbW1pdCBCIHdoaWxlIHRoZSBvdGhlciBwZXJzb24gYnVpbHQgYSBoaXN0b3J5CitsZWFkaW5nIHRvIGNvbW1pdCBBLiAgVGhlIGhpc3RvcnkgbG9va3MgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgIEIKKyAgICAgLworIC0tLVgtLS1BCisKKy0tLS0tLS0tLS0tLS0tLS0KKworRnVydGhlciBzdXBwb3NlIHRoYXQgdGhlIG90aGVyIHBlcnNvbiBhbHJlYWR5IHB1c2hlZCBjaGFuZ2VzIGxlYWRpbmcgdG8gQQorYmFjayB0byB0aGUgb3JpZ2luYWwgcmVwb3NpdG9yeSB5b3UgdHdvIG9idGFpbmVkIHRoZSBvcmlnaW5hbCBjb21taXQgWC4KKworVGhlIHB1c2ggZG9uZSBieSB0aGUgb3RoZXIgcGVyc29uIHVwZGF0ZWQgdGhlIGJyYW5jaCB0aGF0IHVzZWQgdG8gcG9pbnQgYXQKK2NvbW1pdCBYIHRvIHBvaW50IGF0IGNvbW1pdCBBLiAgSXQgaXMgYSBmYXN0LWZvcndhcmQuCisKK0J1dCBpZiB5b3UgdHJ5IHRvIHB1c2gsIHlvdSB3aWxsIGF0dGVtcHQgdG8gdXBkYXRlIHRoZSBicmFuY2ggKHRoYXQKK25vdyBwb2ludHMgYXQgQSkgd2l0aCBjb21taXQgQi4gIFRoaXMgZG9lcyBfbm90XyBmYXN0LWZvcndhcmQuICBJZiB5b3UgZGlkCitzbywgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBjb21taXQgQSB3aWxsIGJlIGxvc3QsIGJlY2F1c2UgZXZlcnlib2R5Cit3aWxsIG5vdyBzdGFydCBidWlsZGluZyBvbiB0b3Agb2YgQi4KKworVGhlIGNvbW1hbmQgYnkgZGVmYXVsdCBkb2VzIG5vdCBhbGxvdyBhbiB1cGRhdGUgdGhhdCBpcyBub3QgYSBmYXN0LWZvcndhcmQKK3RvIHByZXZlbnQgc3VjaCBsb3NzIG9mIGhpc3RvcnkuCisKK0lmIHlvdSBkbyBub3Qgd2FudCB0byBsb3NlIHlvdXIgd29yayAoaGlzdG9yeSBmcm9tIFggdG8gQikgbm9yIHRoZSB3b3JrIGJ5Cit0aGUgb3RoZXIgcGVyc29uIChoaXN0b3J5IGZyb20gWCB0byBBKSwgeW91IHdvdWxkIG5lZWQgdG8gZmlyc3QgZmV0Y2ggdGhlCitoaXN0b3J5IGZyb20gdGhlIHJlcG9zaXRvcnksIGNyZWF0ZSBhIGhpc3RvcnkgdGhhdCBjb250YWlucyBjaGFuZ2VzIGRvbmUKK2J5IGJvdGggcGFydGllcywgYW5kIHB1c2ggdGhlIHJlc3VsdCBiYWNrLgorCitZb3UgY2FuIHBlcmZvcm0gImdpdCBwdWxsIiwgcmVzb2x2ZSBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgImdpdCBwdXNoIgordGhlIHJlc3VsdC4gIEEgImdpdCBwdWxsIiB3aWxsIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCBDIGJldHdlZW4gY29tbWl0cyBBCithbmQgQi4KKworLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICBCLS0tQworICAgICAvICAgLworIC0tLVgtLS1BCisKKy0tLS0tLS0tLS0tLS0tLS0KKworVXBkYXRpbmcgQSB3aXRoIHRoZSByZXN1bHRpbmcgbWVyZ2UgY29tbWl0IHdpbGwgZmFzdC1mb3J3YXJkIGFuZCB5b3VyCitwdXNoIHdpbGwgYmUgYWNjZXB0ZWQuCisKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gcmViYXNlIHlvdXIgY2hhbmdlIGJldHdlZW4gWCBhbmQgQiBvbiB0b3Agb2YgQSwKK3dpdGggImdpdCBwdWxsIC0tcmViYXNlIiwgYW5kIHB1c2ggdGhlIHJlc3VsdCBiYWNrLiAgVGhlIHJlYmFzZSB3aWxsCitjcmVhdGUgYSBuZXcgY29tbWl0IEQgdGhhdCBidWlsZHMgdGhlIGNoYW5nZSBiZXR3ZWVuIFggYW5kIEIgb24gdG9wIG9mCitBLgorCistLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgIEIgICBECisgICAgIC8gICAvCisgLS0tWC0tLUEKKworLS0tLS0tLS0tLS0tLS0tLQorCitBZ2FpbiwgdXBkYXRpbmcgQSB3aXRoIHRoaXMgY29tbWl0IHdpbGwgZmFzdC1mb3J3YXJkIGFuZCB5b3VyIHB1c2ggd2lsbCBiZQorYWNjZXB0ZWQuCisKK1RoZXJlIGlzIGFub3RoZXIgY29tbW9uIHNpdHVhdGlvbiB3aGVyZSB5b3UgbWF5IGVuY291bnRlciBub24tZmFzdC1mb3J3YXJkCityZWplY3Rpb24gd2hlbiB5b3UgdHJ5IHRvIHB1c2gsIGFuZCBpdCBpcyBwb3NzaWJsZSBldmVuIHdoZW4geW91IGFyZQorcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSBub2JvZHkgZWxzZSBwdXNoZXMgaW50by4gQWZ0ZXIgeW91IHB1c2ggY29tbWl0CitBIHlvdXJzZWxmIChpbiB0aGUgZmlyc3QgcGljdHVyZSBpbiB0aGlzIHNlY3Rpb24pLCByZXBsYWNlIGl0IHdpdGggImdpdAorY29tbWl0IC0tYW1lbmQiIHRvIHByb2R1Y2UgY29tbWl0IEIsIGFuZCB5b3UgdHJ5IHRvIHB1c2ggaXQgb3V0LCBiZWNhdXNlCitmb3Jnb3QgdGhhdCB5b3UgaGF2ZSBwdXNoZWQgQSBvdXQgYWxyZWFkeS4gSW4gc3VjaCBhIGNhc2UsIGFuZCBvbmx5IGlmCit5b3UgYXJlIGNlcnRhaW4gdGhhdCBub2JvZHkgaW4gdGhlIG1lYW50aW1lIGZldGNoZWQgeW91ciBlYXJsaWVyIGNvbW1pdCBBCisoYW5kIHN0YXJ0ZWQgYnVpbGRpbmcgb24gdG9wIG9mIGl0KSwgeW91IGNhbiBydW4gImdpdCBwdXNoIC0tZm9yY2UiIHRvCitvdmVyd3JpdGUgaXQuIEluIG90aGVyIHdvcmRzLCAiZ2l0IHB1c2ggLS1mb3JjZSIgaXMgYSBtZXRob2QgcmVzZXJ2ZWQgZm9yCithIGNhc2Ugd2hlcmUgeW91IGRvIG1lYW4gdG8gbG9zZSBoaXN0b3J5LgorCisKIEV4YW1wbGVzCiAtLS0tLS0tLQogCitnaXQgcHVzaDo6CisJV29ya3MgbGlrZSBgZ2l0IHB1c2ggPHJlbW90ZT5gLCB3aGVyZSA8cmVtb3RlPiBpcyB0aGUKKwljdXJyZW50IGJyYW5jaCdzIHJlbW90ZSAob3IgYG9yaWdpbmAsIGlmIG5vIHJlbW90ZSBpcworCWNvbmZpZ3VyZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCkuCisKK2dpdCBwdXNoIG9yaWdpbjo6CisJV2l0aG91dCBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24sIHdvcmtzIGxpa2UKKwlgZ2l0IHB1c2ggb3JpZ2luIDpgLgorKworVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhpcyBjb21tYW5kIHdoZW4gbm8gPHJlZnNwZWM+IGlzIGdpdmVuIGNhbiBiZQorY29uZmlndXJlZCBieSBzZXR0aW5nIHRoZSBgcHVzaGAgb3B0aW9uIG9mIHRoZSByZW1vdGUuCisrCitGb3IgZXhhbXBsZSwgdG8gZGVmYXVsdCB0byBwdXNoaW5nIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIGBvcmlnaW5gCit1c2UgYGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5wdXNoIEhFQURgLiAgQW55IHZhbGlkIDxyZWZzcGVjPiAobGlrZQordGhlIG9uZXMgaW4gdGhlIGV4YW1wbGVzIGJlbG93KSBjYW4gYmUgY29uZmlndXJlZCBhcyB0aGUgZGVmYXVsdCBmb3IKK2BnaXQgcHVzaCBvcmlnaW5gLgorCitnaXQgcHVzaCBvcmlnaW4gOjo6CisJUHVzaCAibWF0Y2hpbmciIGJyYW5jaGVzIHRvIGBvcmlnaW5gLiBTZWUKKwk8cmVmc3BlYz4gaW4gdGhlIDw8T1BUSU9OUyxPUFRJT05TPj4gc2VjdGlvbiBhYm92ZSBmb3IgYQorCWRlc2NyaXB0aW9uIG9mICJtYXRjaGluZyIgYnJhbmNoZXMuCisKIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXI6OgogCUZpbmQgYSByZWYgdGhhdCBtYXRjaGVzIGBtYXN0ZXJgIGluIHRoZSBzb3VyY2UgcmVwb3NpdG9yeQogCShtb3N0IGxpa2VseSwgaXQgd291bGQgZmluZCBgcmVmcy9oZWFkcy9tYXN0ZXJgKSwgYW5kIHVwZGF0ZQpAQCAtMjE4LDYgKzMzOSwzMCBAQAogCUZpbmQgYSByZWYgdGhhdCBtYXRjaGVzIGBleHBlcmltZW50YWxgIGluIHRoZSBgb3JpZ2luYCByZXBvc2l0b3J5CiAJKGUuZy4gYHJlZnMvaGVhZHMvZXhwZXJpbWVudGFsYCksIGFuZCBkZWxldGUgaXQuCiAKK2dpdCBwdXNoIG9yaWdpbiB7cGx1c31kZXY6bWFzdGVyOjoKKwlVcGRhdGUgdGhlIG9yaWdpbiByZXBvc2l0b3J5J3MgbWFzdGVyIGJyYW5jaCB3aXRoIHRoZSBkZXYgYnJhbmNoLAorCWFsbG93aW5nIG5vbi1mYXN0IGZvcndhcmQgdXBkYXRlcy4gICpUaGlzIGNhbiBsZWF2ZSB1bnJlZmVyZW5jZWQKKwljb21taXRzIGRhbmdsaW5nIGluIHRoZSBvcmlnaW4gcmVwb3NpdG9yeS4qICBDb25zaWRlciB0aGUKKwlmb2xsb3dpbmcgc2l0dWF0aW9uLCB3aGVyZSBhIGZhc3QgZm9yd2FyZCBpcyBub3QgcG9zc2libGU6CisrCistLS0tCisJICAgIG8tLS1vLS0tby0tLUEtLS1CICBvcmlnaW4vbWFzdGVyCisJCSAgICAgXAorCQkgICAgICBYLS0tWS0tLVogIGRldgorLS0tLQorKworVGhlIGFib3ZlIGNvbW1hbmQgd291bGQgY2hhbmdlIHRoZSBvcmlnaW4gcmVwb3NpdG9yeSB0bworKworLS0tLQorCQkgICAgICBBLS0tQiAgKHVubmFtZWQgYnJhbmNoKQorCQkgICAgIC8KKwkgICAgby0tLW8tLS1vLS0tWC0tLVktLS1aICBtYXN0ZXIKKy0tLS0KKysKK0NvbW1pdHMgQSBhbmQgQiB3b3VsZCBubyBsb25nZXIgYmVsb25nIHRvIGEgYnJhbmNoIHdpdGggYSBzeW1ib2xpYyBuYW1lLAorYW5kIHNvIHdvdWxkIGJlIHVucmVhY2hhYmxlLiAgQXMgc3VjaCwgdGhlc2UgY29tbWl0cyB3b3VsZCBiZSByZW1vdmVkIGJ5CithIGBnaXQgZ2NgIGNvbW1hbmQgb24gdGhlIG9yaWdpbiByZXBvc2l0b3J5LgorCiAKIEF1dGhvcgogLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dAppbmRleCBjOGFkODZhLi5kYjFiNzFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKQEAgLTgsMTAgKzgsMTEgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdCByZWJhc2UnIFstaSB8IC0taW50ZXJhY3RpdmVdIFstdiB8IC0tdmVyYm9zZV0gWy1tIHwgLS1tZXJnZV0KLQlbLXMgPHN0cmF0ZWd5PiB8IC0tc3RyYXRlZ3k9PHN0cmF0ZWd5Pl0gWy0tbm8tdmVyaWZ5XQotCVstQzxuPl0gWyAtLXdoaXRlc3BhY2U9PG9wdGlvbj5dIFstcCB8IC0tcHJlc2VydmUtbWVyZ2VzXQotCVstLW9udG8gPG5ld2Jhc2U+XSA8dXBzdHJlYW0+IFs8YnJhbmNoPl0KKydnaXQgcmViYXNlJyBbLWkgfCAtLWludGVyYWN0aXZlXSBbb3B0aW9uc10gWy0tb250byA8bmV3YmFzZT5dCisJPHVwc3RyZWFtPiBbPGJyYW5jaD5dCisnZ2l0IHJlYmFzZScgWy1pIHwgLS1pbnRlcmFjdGl2ZV0gW29wdGlvbnNdIC0tb250byA8bmV3YmFzZT4KKwktLXJvb3QgWzxicmFuY2g+XQorCiAnZ2l0IHJlYmFzZScgLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQKIAogREVTQ1JJUFRJT04KQEAgLTIyLDcgKzIzLDggQEAKIAogQWxsIGNoYW5nZXMgbWFkZSBieSBjb21taXRzIGluIHRoZSBjdXJyZW50IGJyYW5jaCBidXQgdGhhdCBhcmUgbm90CiBpbiA8dXBzdHJlYW0+IGFyZSBzYXZlZCB0byBhIHRlbXBvcmFyeSBhcmVhLiAgVGhpcyBpcyB0aGUgc2FtZSBzZXQKLW9mIGNvbW1pdHMgdGhhdCB3b3VsZCBiZSBzaG93biBieSBgZ2l0IGxvZyA8dXBzdHJlYW0+Li5IRUFEYC4KK29mIGNvbW1pdHMgdGhhdCB3b3VsZCBiZSBzaG93biBieSBgZ2l0IGxvZyA8dXBzdHJlYW0+Li5IRUFEYCAob3IKK2BnaXQgbG9nIEhFQURgLCBpZiAtLXJvb3QgaXMgc3BlY2lmaWVkKS4KIAogVGhlIGN1cnJlbnQgYnJhbmNoIGlzIHJlc2V0IHRvIDx1cHN0cmVhbT4sIG9yIDxuZXdiYXNlPiBpZiB0aGUKIC0tb250byBvcHRpb24gd2FzIHN1cHBsaWVkLiAgVGhpcyBoYXMgdGhlIGV4YWN0IHNhbWUgZWZmZWN0IGFzCkBAIC0xOTAsNiArMTkyLDEzIEBACiAKICAgICBnaXQgcmViYXNlIC0tYWJvcnQKIAorQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCityZWJhc2Uuc3RhdDo6CisJV2hldGhlciB0byBzaG93IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIHNpbmNlIHRoZSBsYXN0CisJcmViYXNlLiBGYWxzZSBieSBkZWZhdWx0LgorCiBPUFRJT05TCiAtLS0tLS0tCiA8bmV3YmFzZT46OgpAQCAtMjIyLDE1ICsyMzEsMjYgQEAKIAogLXMgPHN0cmF0ZWd5Pjo6CiAtLXN0cmF0ZWd5PTxzdHJhdGVneT46OgotCVVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3k7IGNhbiBiZSBzdXBwbGllZCBtb3JlIHRoYW4KLQlvbmNlIHRvIHNwZWNpZnkgdGhlbSBpbiB0aGUgb3JkZXIgdGhleSBzaG91bGQgYmUgdHJpZWQuCisJVXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneS4KIAlJZiB0aGVyZSBpcyBubyBgLXNgIG9wdGlvbiwgYSBidWlsdC1pbiBsaXN0IG9mIHN0cmF0ZWdpZXMKIAlpcyB1c2VkIGluc3RlYWQgKCdnaXQtbWVyZ2UtcmVjdXJzaXZlJyB3aGVuIG1lcmdpbmcgYSBzaW5nbGUKIAloZWFkLCAnZ2l0LW1lcmdlLW9jdG9wdXMnIG90aGVyd2lzZSkuICBUaGlzIGltcGxpZXMgLS1tZXJnZS4KIAorLXE6OgorLS1xdWlldDo6CisJQmUgcXVpZXQuIEltcGxpZXMgLS1uby1zdGF0LgorCiAtdjo6CiAtLXZlcmJvc2U6OgotCURpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0gc2luY2UgdGhlIGxhc3QgcmViYXNlLgorCUJlIHZlcmJvc2UuIEltcGxpZXMgLS1zdGF0LgorCistLXN0YXQ6OgorCVNob3cgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0gc2luY2UgdGhlIGxhc3QgcmViYXNlLiBUaGUKKwlkaWZmc3RhdCBpcyBhbHNvIGNvbnRyb2xsZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlYmFzZS5zdGF0LgorCistbjo6CistLW5vLXN0YXQ6OgorCURvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXMgcGFydCBvZiB0aGUgcmViYXNlIHByb2Nlc3MuCiAKIC0tbm8tdmVyaWZ5OjoKIAlUaGlzIG9wdGlvbiBieXBhc3NlcyB0aGUgcHJlLXJlYmFzZSBob29rLiAgU2VlIGFsc28gbGlua2dpdDpnaXRob29rc1s1XS4KQEAgLTI0MSw5ICsyNjEsMjIgQEAKIAljb250ZXh0IGV4aXN0IHRoZXkgYWxsIG11c3QgbWF0Y2guICBCeSBkZWZhdWx0IG5vIGNvbnRleHQgaXMKIAlldmVyIGlnbm9yZWQuCiAKLS0td2hpdGVzcGFjZT08bm93YXJufHdhcm58ZXJyb3J8ZXJyb3ItYWxsfHN0cmlwPjo6CistZjo6CistLWZvcmNlLXJlYmFzZTo6CisJRm9yY2UgdGhlIHJlYmFzZSBldmVuIGlmIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBhIGRlc2NlbmRhbnQKKwlvZiB0aGUgY29tbWl0IHlvdSBhcmUgcmViYXNpbmcgb250by4gIE5vcm1hbGx5IHRoZSBjb21tYW5kIHdpbGwKKwlleGl0IHdpdGggdGhlIG1lc3NhZ2UgIkN1cnJlbnQgYnJhbmNoIGlzIHVwIHRvIGRhdGUiIGluIHN1Y2ggYQorCXNpdHVhdGlvbi4KKworLS13aGl0ZXNwYWNlPTxvcHRpb24+OjoKIAlUaGlzIGZsYWcgaXMgcGFzc2VkIHRvIHRoZSAnZ2l0LWFwcGx5JyBwcm9ncmFtCiAJKHNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXSkgdGhhdCBhcHBsaWVzIHRoZSBwYXRjaC4KKwlJbmNvbXBhdGlibGUgd2l0aCB0aGUgLS1pbnRlcmFjdGl2ZSBvcHRpb24uCisKKy0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGU6OgorLS1pZ25vcmUtZGF0ZTo6CisJVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0byAnZ2l0LWFtJyB0byBlYXNpbHkgY2hhbmdlIHRoZSBkYXRlcworCW9mIHRoZSByZWJhc2VkIGNvbW1pdHMgKHNlZSBsaW5rZ2l0OmdpdC1hbVsxXSkuCiAKIC1pOjoKIC0taW50ZXJhY3RpdmU6OgpAQCAtMjU1LDYgKzI4OCwxNSBAQAogLS1wcmVzZXJ2ZS1tZXJnZXM6OgogCUluc3RlYWQgb2YgaWdub3JpbmcgbWVyZ2VzLCB0cnkgdG8gcmVjcmVhdGUgdGhlbS4KIAorLS1yb290OjoKKwlSZWJhc2UgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gPGJyYW5jaD4sIGluc3RlYWQgb2YKKwlsaW1pdGluZyB0aGVtIHdpdGggYW4gPHVwc3RyZWFtPi4gIFRoaXMgYWxsb3dzIHlvdSB0byByZWJhc2UKKwl0aGUgcm9vdCBjb21taXQocykgb24gYSBicmFuY2guICBNdXN0IGJlIHVzZWQgd2l0aCAtLW9udG8sIGFuZAorCXdpbGwgc2tpcCBjaGFuZ2VzIGFscmVhZHkgY29udGFpbmVkIGluIDxuZXdiYXNlPiAoaW5zdGVhZCBvZgorCTx1cHN0cmVhbT4pLiAgV2hlbiB1c2VkIHRvZ2V0aGVyIHdpdGggLS1wcmVzZXJ2ZS1tZXJnZXMsICdhbGwnCisJcm9vdCBjb21taXRzIHdpbGwgYmUgcmV3cml0dGVuIHRvIGhhdmUgPG5ld2Jhc2U+IGFzIHBhcmVudAorCWluc3RlYWQuCisKIGluY2x1ZGU6Om1lcmdlLXN0cmF0ZWdpZXMudHh0W10KIAogTk9URVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0CmluZGV4IGZhZDk4M2UuLjgyYTNkMjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLnR4dApAQCAtMTMsOSArMTMsMTAgQEAKICdnaXQgcmVtb3RlIGFkZCcgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tbWlycm9yXSA8bmFtZT4gPHVybD4KICdnaXQgcmVtb3RlIHJlbmFtZScgPG9sZD4gPG5ldz4KICdnaXQgcmVtb3RlIHJtJyA8bmFtZT4KKydnaXQgcmVtb3RlIHNldC1oZWFkJyA8bmFtZT4gWy1hIHwgLWQgfCA8YnJhbmNoPl0KICdnaXQgcmVtb3RlIHNob3cnIFstbl0gPG5hbWU+CiAnZ2l0IHJlbW90ZSBwcnVuZScgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4KLSdnaXQgcmVtb3RlIHVwZGF0ZScgW2dyb3VwXQorJ2dpdCByZW1vdGUgdXBkYXRlJyBbLXAgfCAtLXBydW5lXSBbZ3JvdXAgfCByZW1vdGVdLi4uCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtNTMsOCArNTQsNyBAQAogbXVsdGlwbGUgYnJhbmNoZXMgd2l0aG91dCBncmFiYmluZyBhbGwgYnJhbmNoZXMuCiArCiBXaXRoIGAtbSA8bWFzdGVyPmAgb3B0aW9uLCBgJEdJVF9ESVIvcmVtb3Rlcy88bmFtZT4vSEVBRGAgaXMgc2V0Ci11cCB0byBwb2ludCBhdCByZW1vdGUncyBgPG1hc3Rlcj5gIGJyYW5jaCBpbnN0ZWFkIG9mIHdoYXRldmVyCi1icmFuY2ggdGhlIGBIRUFEYCBhdCB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgYWN0dWFsbHkgcG9pbnRzIGF0LgordXAgdG8gcG9pbnQgYXQgcmVtb3RlJ3MgYDxtYXN0ZXI+YCBicmFuY2guIFNlZSBhbHNvIHRoZSBzZXQtaGVhZCBjb21tYW5kLgogKwogSW4gbWlycm9yIG1vZGUsIGVuYWJsZWQgd2l0aCBgXC0tbWlycm9yYCwgdGhlIHJlZnMgd2lsbCBub3QgYmUgc3RvcmVkCiBpbiB0aGUgJ3JlZnMvcmVtb3Rlcy8nIG5hbWVzcGFjZSwgYnV0IGluICdyZWZzL2hlYWRzLycuICBUaGlzIG9wdGlvbgpAQCAtNzYsNiArNzYsMzAgQEAKIFJlbW92ZSB0aGUgcmVtb3RlIG5hbWVkIDxuYW1lPi4gQWxsIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcyBhbmQKIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSByZW1vdGUgYXJlIHJlbW92ZWQuCiAKKydzZXQtaGVhZCc6OgorCitTZXRzIG9yIGRlbGV0ZXMgdGhlIGRlZmF1bHQgYnJhbmNoIChgJEdJVF9ESVIvcmVtb3Rlcy88bmFtZT4vSEVBRGApIGZvcgordGhlIG5hbWVkIHJlbW90ZS4gSGF2aW5nIGEgZGVmYXVsdCBicmFuY2ggZm9yIGEgcmVtb3RlIGlzIG5vdCByZXF1aXJlZCwKK2J1dCBhbGxvd3MgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSB0byBiZSBzcGVjaWZpZWQgaW4gbGlldSBvZiBhIHNwZWNpZmljCiticmFuY2guIEZvciBleGFtcGxlLCBpZiB0aGUgZGVmYXVsdCBicmFuY2ggZm9yIGBvcmlnaW5gIGlzIHNldCB0bworYG1hc3RlcmAsIHRoZW4gYG9yaWdpbmAgbWF5IGJlIHNwZWNpZmllZCB3aGVyZXZlciB5b3Ugd291bGQgbm9ybWFsbHkKK3NwZWNpZnkgYG9yaWdpbi9tYXN0ZXJgLgorKworV2l0aCBgLWRgLCBgJEdJVF9ESVIvcmVtb3Rlcy88bmFtZT4vSEVBRGAgaXMgZGVsZXRlZC4KKysKK1dpdGggYC1hYCwgdGhlIHJlbW90ZSBpcyBxdWVyaWVkIHRvIGRldGVybWluZSBpdHMgYEhFQURgLCB0aGVuCitgJEdJVF9ESVIvcmVtb3Rlcy88bmFtZT4vSEVBRGAgaXMgc2V0IHRvIHRoZSBzYW1lIGJyYW5jaC4gZS5nLiwgaWYgdGhlIHJlbW90ZQorYEhFQURgIGlzIHBvaW50ZWQgYXQgYG5leHRgLCAiYGdpdCByZW1vdGUgc2V0LWhlYWQgb3JpZ2luIC1hYCIgd2lsbCBzZXQKK2AkR0lUX0RJUi9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQURgIHRvIGByZWZzL3JlbW90ZXMvb3JpZ2luL25leHRgLiBUaGlzIHdpbGwKK29ubHkgd29yayBpZiBgcmVmcy9yZW1vdGVzL29yaWdpbi9uZXh0YCBhbHJlYWR5IGV4aXN0czsgaWYgbm90IGl0IG11c3QgYmUKK2ZldGNoZWQgZmlyc3QuCisrCitVc2UgYDxicmFuY2g+YCB0byBzZXQgYCRHSVRfRElSL3JlbW90ZXMvPG5hbWU+L0hFQURgIGV4cGxpY2l0bHkuIGUuZy4sICJnaXQKK3JlbW90ZSBzZXQtaGVhZCBvcmlnaW4gbWFzdGVyIiB3aWxsIHNldCBgJEdJVF9ESVIvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEYCB0bworYHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyYC4gVGhpcyB3aWxsIG9ubHkgd29yayBpZgorYHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyYCBhbHJlYWR5IGV4aXN0czsgaWYgbm90IGl0IG11c3QgYmUgZmV0Y2hlZCBmaXJzdC4KKysKKwogJ3Nob3cnOjoKIAogR2l2ZXMgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVtb3RlIDxuYW1lPi4KQEAgLTkwLDE3ICsxMTQsMTkgQEAKIHJlZmVyZW5jZWQgYnkgPG5hbWU+LCBidXQgYXJlIHN0aWxsIGxvY2FsbHkgYXZhaWxhYmxlIGluCiAicmVtb3Rlcy88bmFtZT4iLgogKwotV2l0aCBgLS1kcnktcnVuYCBvcHRpb24sIHJlcG9ydCB3aGF0IGJyYW5jaGVzIHdpbGwgYmUgcHJ1bmVkLCBidXQgZG8gbm8KK1dpdGggYC0tZHJ5LXJ1bmAgb3B0aW9uLCByZXBvcnQgd2hhdCBicmFuY2hlcyB3aWxsIGJlIHBydW5lZCwgYnV0IGRvIG5vdAogYWN0dWFsbHkgcHJ1bmUgdGhlbS4KIAogJ3VwZGF0ZSc6OgogCiBGZXRjaCB1cGRhdGVzIGZvciBhIG5hbWVkIHNldCBvZiByZW1vdGVzIGluIHRoZSByZXBvc2l0b3J5IGFzIGRlZmluZWQgYnkKIHJlbW90ZXMuPGdyb3VwPi4gIElmIGEgbmFtZWQgZ3JvdXAgaXMgbm90IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLAotdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHJlbW90ZXMuZGVmYXVsdCB3aWxsIGdldCB1c2VkOyBpZgordGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHJlbW90ZXMuZGVmYXVsdCB3aWxsIGJlIHVzZWQ7IGlmCiByZW1vdGVzLmRlZmF1bHQgaXMgbm90IGRlZmluZWQsIGFsbCByZW1vdGVzIHdoaWNoIGRvIG5vdCBoYXZlIHRoZQogY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgcmVtb3RlLjxuYW1lPi5za2lwRGVmYXVsdFVwZGF0ZSBzZXQgdG8gdHJ1ZSB3aWxsCiBiZSB1cGRhdGVkLiAgKFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorKworV2l0aCBgLS1wcnVuZWAgb3B0aW9uLCBwcnVuZSBhbGwgdGhlIHJlbW90ZXMgdGhhdCBhcmUgdXBkYXRlZC4KIAogCiBESVNDVVNTSU9OCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dAppbmRleCBhYWE4ODUyLi5jOTI1N2ExIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGFjay50eHQKQEAgLTMxLDExICszMSwxNCBAQAogCUluc3RlYWQgb2YgaW5jcmVtZW50YWxseSBwYWNraW5nIHRoZSB1bnBhY2tlZCBvYmplY3RzLAogCXBhY2sgZXZlcnl0aGluZyByZWZlcmVuY2VkIGludG8gYSBzaW5nbGUgcGFjay4KIAlFc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIHBhY2tpbmcgYSByZXBvc2l0b3J5IHRoYXQgaXMgdXNlZAotCWZvciBwcml2YXRlIGRldmVsb3BtZW50IGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5Ci0JYWJvdXQgcGVvcGxlIGZldGNoaW5nIHZpYSBkdW1iIHByb3RvY29scyBmcm9tIGl0LiAgVXNlCisJZm9yIHByaXZhdGUgZGV2ZWxvcG1lbnQuIFVzZQogCXdpdGggJy1kJy4gIFRoaXMgd2lsbCBjbGVhbiB1cCB0aGUgb2JqZWN0cyB0aGF0IGBnaXQgcHJ1bmVgCiAJbGVhdmVzIGJlaGluZCwgYnV0IGBnaXQgZnNjayAtLWZ1bGxgIHNob3dzIGFzCiAJZGFuZ2xpbmcuCisrCitOb3RlIHRoYXQgdXNlcnMgZmV0Y2hpbmcgb3ZlciBkdW1iIHByb3RvY29scyB3aWxsIGhhdmUgdG8gZmV0Y2ggdGhlCit3aG9sZSBuZXcgcGFjayBpbiBvcmRlciB0byBnZXQgYW55IGNvbnRhaW5lZCBvYmplY3QsIG5vIG1hdHRlciBob3cgbWFueQorb3RoZXIgb2JqZWN0cyBpbiB0aGF0IHBhY2sgdGhleSBhbHJlYWR5IGhhdmUgbG9jYWxseS4KIAogLUE6OgogCVNhbWUgYXMgYC1hYCwgdW5sZXNzICctZCcgaXMgdXNlZC4gIFRoZW4gYW55IHVucmVhY2hhYmxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVyZXJlLnR4dAppbmRleCBhNTNjM2NkLi43ZGQ1MTViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcmVyZS50eHQKQEAgLTIzLDcgKzIzLDcgQEAKIGhhbmQgcmVzb2x1dGlvbnMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBhdXRvbWVyZ2UgcmVzdWx0cy4KIAogW05PVEVdCi1Zb3UgbmVlZCB0byBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgcmVyZXJlLmVuYWJsZWQgdG8KK1lvdSBuZWVkIHRvIHNldCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSByZXJlcmUuZW5hYmxlZCBpbiBvcmRlciB0bwogZW5hYmxlIHRoaXMgY29tbWFuZC4KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQKaW5kZXggMjA0OWYzZC4uYWJiMjVkMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dApAQCAtOCw3ICs4LDcgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdCByZXNldCcgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmRdIFstcV0gWzxjb21taXQ+XQorJ2dpdCByZXNldCcgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlXSBbLXFdIFs8Y29tbWl0Pl0KICdnaXQgcmVzZXQnIFstcV0gWzxjb21taXQ+XSBbLS1dIDxwYXRocz4uLi4KIAogREVTQ1JJUFRJT04KQEAgLTQ1LDYgKzQ1LDExIEBACiAJc3dpdGNoZWQgdG8uIEFueSBjaGFuZ2VzIHRvIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZQogCXNpbmNlIDxjb21taXQ+IGFyZSBsb3N0LgogCistLW1lcmdlOjoKKwlSZXNldHMgdGhlIGluZGV4IHRvIG1hdGNoIHRoZSB0cmVlIHJlY29yZGVkIGJ5IHRoZSBuYW1lZCBjb21taXQsCisJYW5kIHVwZGF0ZXMgdGhlIGZpbGVzIHRoYXQgYXJlIGRpZmZlcmVudCBiZXR3ZWVuIHRoZSBuYW1lZCBjb21taXQKKwlhbmQgdGhlIGN1cnJlbnQgY29tbWl0IGluIHRoZSB3b3JraW5nIHRyZWUuCisKIC1xOjoKIAlCZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzLgogCkBAIC0xNTIsNiArMTU3LDI4IEBACiBicmluZ3MgeW91ciBpbmRleCBmaWxlIGFuZCB0aGUgd29ya2luZyB0cmVlIGJhY2sgdG8gdGhhdCBzdGF0ZSwKIGFuZCByZXNldHMgdGhlIHRpcCBvZiB0aGUgYnJhbmNoIHRvIHRoYXQgY29tbWl0LgogCitVbmRvIGEgbWVyZ2Ugb3IgcHVsbCBpbnNpZGUgYSBkaXJ0eSB3b3JrIHRyZWU6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsICAgICAgICAgICAgICAgICAgICAgICAgIDwxPgorQXV0by1tZXJnaW5nIG5pdGZvbAorTWVyZ2UgbWFkZSBieSByZWN1cnNpdmUuCisgbml0Zm9sICAgICAgICAgICAgICAgIHwgICAyMCArKysrKy0tLS0KKyAuLi4KKyQgZ2l0IHJlc2V0IC0tbWVyZ2UgT1JJR19IRUFEICAgICAgPDI+CistLS0tLS0tLS0tLS0KKysKKzwxPiBFdmVuIGlmIHlvdSBtYXkgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zIGluIHlvdXIKK3dvcmtpbmcgdHJlZSwgeW91IGNhbiBzYWZlbHkgc2F5ICJnaXQgcHVsbCIgd2hlbiB5b3Uga25vdwordGhhdCB0aGUgY2hhbmdlIGluIHRoZSBvdGhlciBicmFuY2ggZG9lcyBub3Qgb3ZlcmxhcCB3aXRoCit0aGVtLgorPDI+IEFmdGVyIGluc3BlY3RpbmcgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UsIHlvdSBtYXkgZmluZAordGhhdCB0aGUgY2hhbmdlIGluIHRoZSBvdGhlciBicmFuY2ggaXMgdW5zYXRpc2ZhY3RvcnkuICBSdW5uaW5nCisiZ2l0IHJlc2V0IC0taGFyZCBPUklHX0hFQUQiIHdpbGwgbGV0IHlvdSBnbyBiYWNrIHRvIHdoZXJlIHlvdQord2VyZSwgYnV0IGl0IHdpbGwgZGlzY2FyZCB5b3VyIGxvY2FsIGNoYW5nZXMsIHdoaWNoIHlvdSBkbyBub3QKK3dhbnQuICAiZ2l0IHJlc2V0IC0tbWVyZ2UiIGtlZXBzIHlvdXIgbG9jYWwgY2hhbmdlcy4KKworCiBJbnRlcnJ1cHRlZCB3b3JrZmxvdzo6CiArCiBTdXBwb3NlIHlvdSBhcmUgaW50ZXJydXB0ZWQgYnkgYW4gdXJnZW50IGZpeCByZXF1ZXN0IHdoaWxlIHlvdQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0CmluZGV4IDFjOWNjMjguLjk3NGQ5ZjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQKQEAgLTE0LDYgKzE0LDcgQEAKIAkgICAgIFsgXC0tbWF4LWFnZT10aW1lc3RhbXAgXQogCSAgICAgWyBcLS1taW4tYWdlPXRpbWVzdGFtcCBdCiAJICAgICBbIFwtLXNwYXJzZSBdCisJICAgICBbIFwtLW1lcmdlcyBdCiAJICAgICBbIFwtLW5vLW1lcmdlcyBdCiAJICAgICBbIFwtLWZpcnN0LXBhcmVudCBdCiAJICAgICBbIFwtLXJlbW92ZS1lbXB0eSBdCkBAIC04Myw3ICs4NCw3IEBACiAJJCBnaXQgcmV2LWxpc3QgQS4uLkIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSdnaXQtcmV2LWxpc3QnIGlzIGEgdmVyeSBlc3NlbnRpYWwgZ2l0IHByb2dyYW0sIHNpbmNlIGl0CisncmV2LWxpc3QnIGlzIGEgdmVyeSBlc3NlbnRpYWwgZ2l0IGNvbW1hbmQsIHNpbmNlIGl0CiBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBidWlsZCBhbmQgdHJhdmVyc2UgY29tbWl0IGFuY2VzdHJ5IGdyYXBocy4gRm9yCiB0aGlzIHJlYXNvbiwgaXQgaGFzIGEgbG90IG9mIGRpZmZlcmVudCBvcHRpb25zIHRoYXQgZW5hYmxlcyBpdCB0byBiZQogdXNlZCBieSBjb21tYW5kcyBhcyBkaWZmZXJlbnQgYXMgJ2dpdC1iaXNlY3QnIGFuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQKaW5kZXggMjkyMWRhMy4uODIwNDVhMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0CkBAIC0yNiwxMCArMjYsMjAgQEAKIC0tcGFyc2VvcHQ6OgogCVVzZSAnZ2l0LXJldi1wYXJzZScgaW4gb3B0aW9uIHBhcnNpbmcgbW9kZSAoc2VlIFBBUlNFT1BUIHNlY3Rpb24gYmVsb3cpLgogCi0tLWtlZXAtZGFzaC1kYXNoOjoKKy0ta2VlcC1kYXNoZGFzaDo6CiAJT25seSBtZWFuaW5nZnVsIGluIGAtLXBhcnNlb3B0YCBtb2RlLiBUZWxscyB0aGUgb3B0aW9uIHBhcnNlciB0byBlY2hvCiAJb3V0IHRoZSBmaXJzdCBgLS1gIG1ldCBpbnN0ZWFkIG9mIHNraXBwaW5nIGl0LgogCistLXN0b3AtYXQtbm9uLW9wdGlvbjo6CisJT25seSBtZWFuaW5nZnVsIGluIGAtLXBhcnNlb3B0YCBtb2RlLiAgTGV0cyB0aGUgb3B0aW9uIHBhcnNlciBzdG9wIGF0CisJdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHBhcnNlIHN1Yi1jb21tYW5kcworCXRoYXQgdGFrZSBvcHRpb25zIHRoZW1zZWxmLgorCistLXNxLXF1b3RlOjoKKwlVc2UgJ2dpdC1yZXYtcGFyc2UnIGluIHNoZWxsIHF1b3RpbmcgbW9kZSAoc2VlIFNRLVFVT1RFCisJc2VjdGlvbiBiZWxvdykuIEluIGNvbnRyYXN0IHRvIHRoZSBgLS1zcWAgb3B0aW9uIGJlbG93LCB0aGlzCisJbW9kZSBkb2VzIG9ubHkgcXVvdGluZy4gTm90aGluZyBlbHNlIGlzIGRvbmUgdG8gY29tbWFuZCBpbnB1dC4KKwogLS1yZXZzLW9ubHk6OgogCURvIG5vdCBvdXRwdXQgZmxhZ3MgYW5kIHBhcmFtZXRlcnMgbm90IG1lYW50IGZvcgogCSdnaXQtcmV2LWxpc3QnIGNvbW1hbmQuCkBAIC02NCw3ICs3NCw4IEBACiAJcHJvcGVybHkgcXVvdGVkIGZvciBjb25zdW1wdGlvbiBieSBzaGVsbC4gIFVzZWZ1bCB3aGVuCiAJeW91IGV4cGVjdCB5b3VyIHBhcmFtZXRlciB0byBjb250YWluIHdoaXRlc3BhY2VzIGFuZAogCW5ld2xpbmVzIChlLmcuIHdoZW4gdXNpbmcgcGlja2F4ZSBgLVNgIHdpdGgKLQknZ2l0LWRpZmYtXConKS4KKwknZ2l0LWRpZmYtXConKS4gSW4gY29udHJhc3QgdG8gdGhlIGAtLXNxLXF1b3RlYCBvcHRpb24sCisJdGhlIGNvbW1hbmQgaW5wdXQgaXMgc3RpbGwgaW50ZXJwcmV0ZWQgYXMgdXN1YWwuCiAKIC0tbm90OjoKIAlXaGVuIHNob3dpbmcgb2JqZWN0IG5hbWVzLCBwcmVmaXggdGhlbSB3aXRoICd7Y2FyZXR9JyBhbmQKQEAgLTg0LDYgKzk1LDExIEBACiAJdW5mb3J0dW5hdGVseSBuYW1lZCB0YWcgIm1hc3RlciIpLCBhbmQgc2hvdyB0aGVtIGFzIGZ1bGwKIAlyZWZuYW1lcyAoZS5nLiAicmVmcy9oZWFkcy9tYXN0ZXIiKS4KIAorLS1hYmJyZXYtcmVmWz17c3RyaWN0fGxvb3NlfV06OgorCUEgbm9uLWFtYmlndW91cyBzaG9ydCBuYW1lIG9mIHRoZSBvYmplY3RzIG5hbWUuCisJVGhlIG9wdGlvbiBjb3JlLndhcm5BbWJpZ3VvdXNSZWZzIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBzdHJpY3QKKwlhYmJyZXZpYXRpb24gbW9kZS4KKwogLS1hbGw6OgogCVNob3cgYWxsIHJlZnMgZm91bmQgaW4gYCRHSVRfRElSL3JlZnNgLgogCkBAIC0yMTIsNiArMjI4LDkgQEAKICAgcmVmbG9nIG9mIHRoZSBjdXJyZW50IGJyYW5jaC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgb24gdGhlCiAgIGJyYW5jaCAnYmxhYmxhJywgdGhlbiAnQFx7MVx9JyBtZWFucyB0aGUgc2FtZSBhcyAnYmxhYmxhQFx7MVx9Jy4KIAorKiBUaGUgc3BlY2lhbCBjb25zdHJ1Y3QgJ0Bcey08bj5cfScgbWVhbnMgdGhlIDxuPnRoIGJyYW5jaCBjaGVja2VkIG91dAorICBiZWZvcmUgdGhlIGN1cnJlbnQgb25lLgorCiAqIEEgc3VmZml4ICd7Y2FyZXR9JyB0byBhIHJldmlzaW9uIHBhcmFtZXRlciBtZWFucyB0aGUgZmlyc3QgcGFyZW50IG9mCiAgIHRoYXQgY29tbWl0IG9iamVjdC4gICd7Y2FyZXR9PG4+JyBtZWFucyB0aGUgPG4+dGggcGFyZW50IChpLmUuCiAgICdyZXZ7Y2FyZXR9JwpAQCAtMjk2LDE4ICszMTUsMTggQEAKIGNvbW1pdCwgZm9sbG93aW5nIHRoZSBjb21taXQgYW5jZXN0cnkgY2hhaW4uCiAKIFRvIGV4Y2x1ZGUgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhIGNvbW1pdCwgYSBwcmVmaXggYHtjYXJldH1gCi1ub3RhdGlvbiBpcyB1c2VkLiAgRS5nLiAiYHtjYXJldH1yMSByMmAiIG1lYW5zIGNvbW1pdHMgcmVhY2hhYmxlCitub3RhdGlvbiBpcyB1c2VkLiAgRS5nLiBge2NhcmV0fXIxIHIyYCBtZWFucyBjb21taXRzIHJlYWNoYWJsZQogZnJvbSBgcjJgIGJ1dCBleGNsdWRlIHRoZSBvbmVzIHJlYWNoYWJsZSBmcm9tIGByMWAuCiAKIFRoaXMgc2V0IG9wZXJhdGlvbiBhcHBlYXJzIHNvIG9mdGVuIHRoYXQgdGhlcmUgaXMgYSBzaG9ydGhhbmQKIGZvciBpdC4gIFdoZW4geW91IGhhdmUgdHdvIGNvbW1pdHMgYHIxYCBhbmQgYHIyYCAobmFtZWQgYWNjb3JkaW5nCiB0byB0aGUgc3ludGF4IGV4cGxhaW5lZCBpbiBTUEVDSUZZSU5HIFJFVklTSU9OUyBhYm92ZSksIHlvdSBjYW4gYXNrCiBmb3IgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSByMiBleGNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgcmVhY2hhYmxlCi1mcm9tIHIxIGJ5ICJge2NhcmV0fXIxIHIyYCIgYW5kIGl0IGNhbiBiZSB3cml0dGVuIGFzICJgcjEuLnIyYCIuCitmcm9tIHIxIGJ5IGB7Y2FyZXR9cjEgcjJgIGFuZCBpdCBjYW4gYmUgd3JpdHRlbiBhcyBgcjEuLnIyYC4KIAotQSBzaW1pbGFyIG5vdGF0aW9uICJgcjFcLi4ucjJgIiBpcyBjYWxsZWQgc3ltbWV0cmljIGRpZmZlcmVuY2UKK0Egc2ltaWxhciBub3RhdGlvbiBgcjFcLi4ucjJgIGlzIGNhbGxlZCBzeW1tZXRyaWMgZGlmZmVyZW5jZQogb2YgYHIxYCBhbmQgYHIyYCBhbmQgaXMgZGVmaW5lZCBhcwotImByMSByMiAtLW5vdCAkKGdpdCBtZXJnZS1iYXNlIC0tYWxsIHIxIHIyKWAiLgorYHIxIHIyIC0tbm90ICQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgcjEgcjIpYC4KIEl0IGlzIHRoZSBzZXQgb2YgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBlaXRoZXIgb25lIG9mCiBgcjFgIG9yIGByMmAgYnV0IG5vdCBmcm9tIGJvdGguCiAKQEAgLTM5OCw2ICs0MTcsMzMgQEAKIGV2YWwgYGVjaG8gIiRPUFRTX1NQRUMiIHwgZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tICIkQCIgfHwgZWNobyBleGl0ICQ/YAogLS0tLS0tLS0tLS0tCiAKK1NRLVFVT1RFCistLS0tLS0tLQorCitJbiBgLS1zcS1xdW90ZWAgbW9kZSwgJ2dpdC1yZXYtcGFyc2UnIGVjaG9lcyBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0IGEKK3NpbmdsZSBsaW5lIHN1aXRhYmxlIGZvciBgc2goMSlgIGBldmFsYC4gVGhpcyBsaW5lIGlzIG1hZGUgYnkKK25vcm1hbGl6aW5nIHRoZSBhcmd1bWVudHMgZm9sbG93aW5nIGAtLXNxLXF1b3RlYC4gTm90aGluZyBvdGhlciB0aGFuCitxdW90aW5nIHRoZSBhcmd1bWVudHMgaXMgZG9uZS4KKworSWYgeW91IHdhbnQgY29tbWFuZCBpbnB1dCB0byBzdGlsbCBiZSBpbnRlcnByZXRlZCBhcyB1c3VhbCBieQorJ2dpdC1yZXYtcGFyc2UnIGJlZm9yZSB0aGUgb3V0cHV0IGlzIHNoZWxsIHF1b3RlZCwgc2VlIHRoZSBgLS1zcWAKK29wdGlvbi4KKworRXhhbXBsZQorfn5+fn5+fgorCistLS0tLS0tLS0tLS0KKyQgY2F0ID55b3VyLWdpdC1zY3JpcHQuc2ggPDxcRU9GCisjIS9iaW4vc2gKK2FyZ3M9JChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRAIikgICAjIHF1b3RlIHVzZXItc3VwcGxpZWQgYXJndW1lbnRzCitjb21tYW5kPSJnaXQgZnJvdHogLW4yNCAkYXJncyIgICAgICAgICAgIyBhbmQgdXNlIGl0IGluc2lkZSBhIGhhbmRjcmFmdGVkCisJCQkJCSMgY29tbWFuZCBsaW5lCitldmFsICIkY29tbWFuZCIKK0VPRgorCiskIHNoIHlvdXItZ2l0LXNjcmlwdC5zaCAiYSBiJ2MiCistLS0tLS0tLS0tLS0KKwogRVhBTVBMRVMKIC0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtZW1haWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKaW5kZXggNjZiZjNiMi4uZDZiMTkyYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKQEAgLTE0LDYgKzE0LDEwIEBACiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KIFRha2VzIHRoZSBwYXRjaGVzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgYW5kIGVtYWlscyB0aGVtIG91dC4KK1BhdGNoZXMgY2FuIGJlIHNwZWNpZmllZCBhcyBmaWxlcywgZGlyZWN0b3JpZXMgKHdoaWNoIHdpbGwgc2VuZCBhbGwKK2ZpbGVzIGluIHRoZSBkaXJlY3RvcnkpLCBvciBkaXJlY3RseSBhcyBhIHJldmlzaW9uIGxpc3QuICBJbiB0aGUKK2xhc3QgY2FzZSwgYW55IGZvcm1hdCBhY2NlcHRlZCBieSBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gY2FuCitiZSBwYXNzZWQgdG8gZ2l0IHNlbmQtZW1haWwuCiAKIFRoZSBoZWFkZXIgb2YgdGhlIGVtYWlsIGlzIGNvbmZpZ3VyYWJsZSBieSBjb21tYW5kIGxpbmUgb3B0aW9ucy4gIElmIG5vdAogc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZSB1c2VyIHdpbGwgYmUgcHJvbXB0ZWQgd2l0aCBhIFJlYWRMaW5lCkBAIC0zOSw1NCArNDMsNTcgQEAKIENvbXBvc2luZwogfn5+fn5+fn5+CiAKLS0tYmNjOjoKKy0tYW5ub3RhdGU6OgorCVJldmlldyBhbmQgZWRpdCBlYWNoIHBhdGNoIHlvdSdyZSBhYm91dCB0byBzZW5kLiBTZWUgdGhlCisJQ09ORklHVVJBVElPTiBzZWN0aW9uIGZvciAnc2VuZGVtYWlsLm11bHRpZWRpdCcuCisKKy0tYmNjPTxhZGRyZXNzPjo6CiAJU3BlY2lmeSBhICJCY2M6IiB2YWx1ZSBmb3IgZWFjaCBlbWFpbC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YKIAknc2VuZGVtYWlsLmJjYycuCiArCiBUaGUgLS1iY2Mgb3B0aW9uIG11c3QgYmUgcmVwZWF0ZWQgZm9yIGVhY2ggdXNlciB5b3Ugd2FudCBvbiB0aGUgYmNjIGxpc3QuCiAKLS0tY2M6OgorLS1jYz08YWRkcmVzcz46OgogCVNwZWNpZnkgYSBzdGFydGluZyAiQ2M6IiB2YWx1ZSBmb3IgZWFjaCBlbWFpbC4KIAlEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLmNjJy4KICsKIFRoZSAtLWNjIG9wdGlvbiBtdXN0IGJlIHJlcGVhdGVkIGZvciBlYWNoIHVzZXIgeW91IHdhbnQgb24gdGhlIGNjIGxpc3QuCiAKLS0tYW5ub3RhdGU6OgotCVJldmlldyBlYWNoIHBhdGNoIHlvdSdyZSBhYm91dCB0byBzZW5kIGluIGFuIGVkaXRvci4gVGhlIHNldHRpbmcKLQknc2VuZGVtYWlsLm11bHRpZWRpdCcgZGVmaW5lcyBpZiB0aGlzIHdpbGwgc3Bhd24gb25lIGVkaXRvciBwZXIgcGF0Y2gKLQlvciBvbmUgZm9yIGFsbCBvZiB0aGVtIGF0IG9uY2UuCi0KIC0tY29tcG9zZTo6CiAJVXNlICRHSVRfRURJVE9SLCBjb3JlLmVkaXRvciwgJFZJU1VBTCwgb3IgJEVESVRPUiB0byBlZGl0IGFuCiAJaW50cm9kdWN0b3J5IG1lc3NhZ2UgZm9yIHRoZSBwYXRjaCBzZXJpZXMuCiArCi1XaGVuICctLWNvbXBvc2UnIGlzIHVzZWQsIGdpdCBzZW5kLWVtYWlsIGdldHMgbGVzcyBpbnRlcmFjdGl2ZSB3aWxsIHVzZSB0aGUKLXZhbHVlcyBvZiB0aGUgaGVhZGVycyB5b3Ugc2V0IHRoZXJlLiBJZiB0aGUgYm9keSBvZiB0aGUgZW1haWwgKHdoYXQgeW91IHR5cGUKLWFmdGVyIHRoZSBoZWFkZXJzIGFuZCBhIGJsYW5rIGxpbmUpIG9ubHkgY29udGFpbnMgYmxhbmsgKG9yIEdJVDogcHJlZml4ZWQpCi1saW5lcywgdGhlIHN1bW1hcnkgd29uJ3QgYmUgc2VudCwgYnV0IGdpdC1zZW5kLWVtYWlsIHdpbGwgc3RpbGwgdXNlIHRoZQotSGVhZGVycyB2YWx1ZXMgaWYgeW91IGRvbid0IHJlbW92ZWQgdGhlbS4KK1doZW4gJy0tY29tcG9zZScgaXMgdXNlZCwgZ2l0IHNlbmQtZW1haWwgd2lsbCB1c2UgdGhlIEZyb20sIFN1YmplY3QsIGFuZAorSW4tUmVwbHktVG8gaGVhZGVycyBzcGVjaWZpZWQgaW4gdGhlIG1lc3NhZ2UuIElmIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlCisod2hhdCB5b3UgdHlwZSBhZnRlciB0aGUgaGVhZGVycyBhbmQgYSBibGFuayBsaW5lKSBvbmx5IGNvbnRhaW5zIGJsYW5rCisob3IgR0lUOiBwcmVmaXhlZCkgbGluZXMgdGhlIHN1bW1hcnkgd29uJ3QgYmUgc2VudCwgYnV0IEZyb20sIFN1YmplY3QsCithbmQgSW4tUmVwbHktVG8gaGVhZGVycyB3aWxsIGJlIHVzZWQgdW5sZXNzIHRoZXkgYXJlIHJlbW92ZWQuCiArCi1JZiBpdCB3YXNuJ3QgYWJsZSB0byBzZWUgYSBoZWFkZXIgaW4gdGhlIHN1bW1hcnkgaXQgd2lsbCBhc2sgeW91IGFib3V0IGl0Ci1pbnRlcmFjdGl2ZWx5IGFmdGVyIHF1aXR0aW5nIHlvdXIgZWRpdG9yLgorTWlzc2luZyBGcm9tIG9yIEluLVJlcGx5LVRvIGhlYWRlcnMgd2lsbCBiZSBwcm9tcHRlZCBmb3IuCisrCitTZWUgdGhlIENPTkZJR1VSQVRJT04gc2VjdGlvbiBmb3IgJ3NlbmRlbWFpbC5tdWx0aWVkaXQnLgogCi0tLWZyb206OgotCVNwZWNpZnkgdGhlIHNlbmRlciBvZiB0aGUgZW1haWxzLiAgVGhpcyB3aWxsIGRlZmF1bHQgdG8KLQl0aGUgdmFsdWUgR0lUX0NPTU1JVFRFUl9JREVOVCwgYXMgcmV0dXJuZWQgYnkgImdpdCB2YXIgLWwiLgotCVRoZSB1c2VyIHdpbGwgc3RpbGwgYmUgcHJvbXB0ZWQgdG8gY29uZmlybSB0aGlzIGVudHJ5LgorLS1mcm9tPTxhZGRyZXNzPjo6CisJU3BlY2lmeSB0aGUgc2VuZGVyIG9mIHRoZSBlbWFpbHMuICBJZiBub3Qgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsCisJdGhlIHZhbHVlIG9mIHRoZSAnc2VuZGVtYWlsLmZyb20nIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHVzZWQuICBJZgorCW5laXRoZXIgdGhlIGNvbW1hbmQgbGluZSBvcHRpb24gbm9yICdzZW5kZW1haWwuZnJvbScgYXJlIHNldCwgdGhlbiB0aGUKKwl1c2VyIHdpbGwgYmUgcHJvbXB0ZWQgZm9yIHRoZSB2YWx1ZS4gIFRoZSBkZWZhdWx0IGZvciB0aGUgcHJvbXB0IHdpbGwgYmUKKwl0aGUgdmFsdWUgb2YgR0lUX0FVVEhPUl9JREVOVCwgb3IgR0lUX0NPTU1JVFRFUl9JREVOVCBpZiB0aGF0IGlzIG5vdAorCXNldCwgYXMgcmV0dXJuZWQgYnkgImdpdCB2YXIgLWwiLgogCi0tLWluLXJlcGx5LXRvOjoKKy0taW4tcmVwbHktdG89PGlkZW50aWZpZXI+OjoKIAlTcGVjaWZ5IHRoZSBjb250ZW50cyBvZiB0aGUgZmlyc3QgSW4tUmVwbHktVG8gaGVhZGVyLgogCVN1YnNlcXVlbnQgZW1haWxzIHdpbGwgcmVmZXIgdG8gdGhlIHByZXZpb3VzIGVtYWlsCiAJaW5zdGVhZCBvZiB0aGlzIGlmIC0tY2hhaW4tcmVwbHktdG8gaXMgc2V0ICh0aGUgZGVmYXVsdCkKIAlPbmx5IG5lY2Vzc2FyeSBpZiAtLWNvbXBvc2UgaXMgYWxzbyBzZXQuICBJZiAtLWNvbXBvc2UKIAlpcyBub3Qgc2V0LCB0aGlzIHdpbGwgYmUgcHJvbXB0ZWQgZm9yLgogCi0tLXN1YmplY3Q6OgorLS1zdWJqZWN0PTxzdHJpbmc+OjoKIAlTcGVjaWZ5IHRoZSBpbml0aWFsIHN1YmplY3Qgb2YgdGhlIGVtYWlsIHRocmVhZC4KIAlPbmx5IG5lY2Vzc2FyeSBpZiAtLWNvbXBvc2UgaXMgYWxzbyBzZXQuICBJZiAtLWNvbXBvc2UKIAlpcyBub3Qgc2V0LCB0aGlzIHdpbGwgYmUgcHJvbXB0ZWQgZm9yLgogCi0tLXRvOjoKKy0tdG89PGFkZHJlc3M+OjoKIAlTcGVjaWZ5IHRoZSBwcmltYXJ5IHJlY2lwaWVudCBvZiB0aGUgZW1haWxzIGdlbmVyYXRlZC4gR2VuZXJhbGx5LCB0aGlzCiAJd2lsbCBiZSB0aGUgdXBzdHJlYW0gbWFpbnRhaW5lciBvZiB0aGUgcHJvamVjdCBpbnZvbHZlZC4gRGVmYXVsdCBpcyB0aGUKIAl2YWx1ZSBvZiB0aGUgJ3NlbmRlbWFpbC50bycgY29uZmlndXJhdGlvbiB2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwKQEAgLTk4LDcgKzEwNSw3IEBACiBTZW5kaW5nCiB+fn5+fn5+CiAKLS0tZW52ZWxvcGUtc2VuZGVyOjoKKy0tZW52ZWxvcGUtc2VuZGVyPTxhZGRyZXNzPjo6CiAJU3BlY2lmeSB0aGUgZW52ZWxvcGUgc2VuZGVyIHVzZWQgdG8gc2VuZCB0aGUgZW1haWxzLgogCVRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgZGVmYXVsdCBhZGRyZXNzIGlzIG5vdCB0aGUgYWRkcmVzcyB0aGF0IGlzCiAJc3Vic2NyaWJlZCB0byBhIGxpc3QuIElmIHlvdSB1c2UgdGhlIHNlbmRtYWlsIGJpbmFyeSwgeW91IG11c3QgaGF2ZQpAQCAtMTA2LDEyICsxMTMsMTIgQEAKIAl0aGUgJ3NlbmRlbWFpbC5lbnZlbG9wZXNlbmRlcicgY29uZmlndXJhdGlvbiB2YXJpYWJsZTsgaWYgdGhhdCBpcwogCXVuc3BlY2lmaWVkLCBjaG9vc2luZyB0aGUgZW52ZWxvcGUgc2VuZGVyIGlzIGxlZnQgdG8geW91ciBNVEEuCiAKLS0tc210cC1lbmNyeXB0aW9uOjoKKy0tc210cC1lbmNyeXB0aW9uPTxlbmNyeXB0aW9uPjo6CiAJU3BlY2lmeSB0aGUgZW5jcnlwdGlvbiB0byB1c2UsIGVpdGhlciAnc3NsJyBvciAndGxzJy4gIEFueSBvdGhlcgogCXZhbHVlIHJldmVydHMgdG8gcGxhaW4gU01UUC4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mCiAJJ3NlbmRlbWFpbC5zbXRwZW5jcnlwdGlvbicuCiAKLS0tc210cC1wYXNzOjoKKy0tc210cC1wYXNzWz08cGFzc3dvcmQ+XTo6CiAJUGFzc3dvcmQgZm9yIFNNVFAtQVVUSC4gVGhlIGFyZ3VtZW50IGlzIG9wdGlvbmFsOiBJZiBubwogCWFyZ3VtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgZW1wdHkgc3RyaW5nIGlzIHVzZWQgYXMKIAl0aGUgcGFzc3dvcmQuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuc210cHBhc3MnLApAQCAtMTIzLDcgKzEzMCw3IEBACiBzcGVjaWZpZWQgKHdpdGggJy0tc210cC1wYXNzJyBvciAnc2VuZGVtYWlsLnNtdHBwYXNzJyksIHRoZW4gdGhlCiB1c2VyIGlzIHByb21wdGVkIGZvciBhIHBhc3N3b3JkIHdoaWxlIHRoZSBpbnB1dCBpcyBtYXNrZWQgZm9yIHByaXZhY3kuCiAKLS0tc210cC1zZXJ2ZXI6OgorLS1zbXRwLXNlcnZlcj08aG9zdD46OgogCUlmIHNldCwgc3BlY2lmaWVzIHRoZSBvdXRnb2luZyBTTVRQIHNlcnZlciB0byB1c2UgKGUuZy4KIAlgc210cC5leGFtcGxlLmNvbWAgb3IgYSByYXcgSVAgYWRkcmVzcykuICBBbHRlcm5hdGl2ZWx5IGl0IGNhbgogCXNwZWNpZnkgYSBmdWxsIHBhdGhuYW1lIG9mIGEgc2VuZG1haWwtbGlrZSBwcm9ncmFtIGluc3RlYWQ7CkBAIC0xMzMsMTUgKzE0MCwxNyBAQAogCWAvdXNyL2xpYi9zZW5kbWFpbGAgaWYgc3VjaCBwcm9ncmFtIGlzIGF2YWlsYWJsZSwgb3IKIAlgbG9jYWxob3N0YCBvdGhlcndpc2UuCiAKLS0tc210cC1zZXJ2ZXItcG9ydDo6CistLXNtdHAtc2VydmVyLXBvcnQ9PHBvcnQ+OjoKIAlTcGVjaWZpZXMgYSBwb3J0IGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0IHBvcnQgKFNNVFAKIAlzZXJ2ZXJzIHR5cGljYWxseSBsaXN0ZW4gdG8gc210cCBwb3J0IDI1IGFuZCBzc210cCBwb3J0Ci0JNDY1KS4gVGhpcyBjYW4gYmUgc2V0IHdpdGggJ3NlbmRlbWFpbC5zbXRwc2VydmVycG9ydCcuCisJNDY1KTsgc3ltYm9saWMgcG9ydCBuYW1lcyAoZS5nLiAic3VibWlzc2lvbiIgaW5zdGVhZCBvZiA0NjUpCisJYXJlIGFsc28gYWNjZXB0ZWQuIFRoZSBwb3J0IGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZQorCSdzZW5kZW1haWwuc210cHNlcnZlcnBvcnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCiAKIC0tc210cC1zc2w6OgogCUxlZ2FjeSBhbGlhcyBmb3IgJy0tc210cC1lbmNyeXB0aW9uIHNzbCcuCiAKLS0tc210cC11c2VyOjoKKy0tc210cC11c2VyPTx1c2VyPjo6CiAJVXNlcm5hbWUgZm9yIFNNVFAtQVVUSC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5zbXRwdXNlcic7CiAJaWYgYSB1c2VybmFtZSBpcyBub3Qgc3BlY2lmaWVkICh3aXRoICctLXNtdHAtdXNlcicgb3IgJ3NlbmRlbWFpbC5zbXRwdXNlcicpLAogCXRoZW4gYXV0aGVudGljYXRpb24gaXMgbm90IGF0dGVtcHRlZC4KQEAgLTE1MCw3ICsxNTksNyBAQAogQXV0b21hdGluZwogfn5+fn5+fn5+fgogCi0tLWNjLWNtZDo6CistLWNjLWNtZD08Y29tbWFuZD46OgogCVNwZWNpZnkgYSBjb21tYW5kIHRvIGV4ZWN1dGUgb25jZSBwZXIgcGF0Y2ggZmlsZSB3aGljaAogCXNob3VsZCBnZW5lcmF0ZSBwYXRjaCBmaWxlIHNwZWNpZmljICJDYzoiIGVudHJpZXMuCiAJT3V0cHV0IG9mIHRoaXMgY29tbWFuZCBtdXN0IGJlIHNpbmdsZSBlbWFpbCBhZGRyZXNzIHBlciBsaW5lLgpAQCAtMTY0LDcgKzE3Myw3IEBACiAJZW50aXJlIHBhdGNoIHNlcmllcy4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgdGhlICdzZW5kZW1haWwuY2hhaW5yZXBseXRvJwogCWNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsIGRlZmF1bHQgdG8gLS1jaGFpbi1yZXBseS10by4KIAotLS1pZGVudGl0eTo6CistLWlkZW50aXR5PTxpZGVudGl0eT46OgogCUEgY29uZmlndXJhdGlvbiBpZGVudGl0eS4gV2hlbiBnaXZlbiwgY2F1c2VzIHZhbHVlcyBpbiB0aGUKIAknc2VuZGVtYWlsLjxpZGVudGl0eT4nIHN1YnNlY3Rpb24gdG8gdGFrZSBwcmVjZWRlbmNlIG92ZXIKIAl2YWx1ZXMgaW4gdGhlICdzZW5kZW1haWwnIHNlY3Rpb24uIFRoZSBkZWZhdWx0IGlkZW50aXR5IGlzCkBAIC0xNzUsMTYgKzE4NCwyNyBAQAogCWNjIGxpc3QuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuc2lnbmVkb2ZmYnljYycgY29uZmlndXJhdGlvbgogCXZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvIC0tc2lnbmVkLW9mZi1ieS1jYy4KIAotLS1zdXBwcmVzcy1jYzo6CistLXN1cHByZXNzLWNjPTxjYXRlZ29yeT46OgogCVNwZWNpZnkgYW4gYWRkaXRpb25hbCBjYXRlZ29yeSBvZiByZWNpcGllbnRzIHRvIHN1cHByZXNzIHRoZQotCWF1dG8tY2Mgb2YuICAnc2VsZicgd2lsbCBhdm9pZCBpbmNsdWRpbmcgdGhlIHNlbmRlciwgJ2F1dGhvcicgd2lsbAotCWF2b2lkIGluY2x1ZGluZyB0aGUgcGF0Y2ggYXV0aG9yLCAnY2MnIHdpbGwgYXZvaWQgaW5jbHVkaW5nIGFueW9uZQotCW1lbnRpb25lZCBpbiBDYyBsaW5lcyBpbiB0aGUgcGF0Y2gsICdzb2InIHdpbGwgYXZvaWQgaW5jbHVkaW5nCi0JYW55b25lIG1lbnRpb25lZCBpbiBTaWduZWQtb2ZmLWJ5IGxpbmVzLCBhbmQgJ2NjY21kJyB3aWxsIGF2b2lkCi0JcnVubmluZyB0aGUgLS1jYy1jbWQuICAnYWxsJyB3aWxsIHN1cHByZXNzIGFsbCBhdXRvIGNjIHZhbHVlcy4KLQlEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLnN1cHByZXNzY2MnIGNvbmZpZ3VyYXRpb24gdmFsdWU7Ci0JaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byAnc2VsZicgaWYgLS1zdXBwcmVzcy1mcm9tIGlzCi0Jc3BlY2lmaWVkLCBhcyB3ZWxsIGFzICdzb2InIGlmIC0tbm8tc2lnbmVkLW9mZi1jYyBpcyBzcGVjaWZpZWQuCisJYXV0by1jYyBvZjoKKysKKy0tCistICdhdXRob3InIHdpbGwgYXZvaWQgaW5jbHVkaW5nIHRoZSBwYXRjaCBhdXRob3IKKy0gJ3NlbGYnIHdpbGwgYXZvaWQgaW5jbHVkaW5nIHRoZSBzZW5kZXIKKy0gJ2NjJyB3aWxsIGF2b2lkIGluY2x1ZGluZyBhbnlvbmUgbWVudGlvbmVkIGluIENjIGxpbmVzIGluIHRoZSBwYXRjaCBoZWFkZXIKKyAgZXhjZXB0IGZvciBzZWxmICh1c2UgJ3NlbGYnIGZvciB0aGF0KS4KKy0gJ2JvZHljYycgd2lsbCBhdm9pZCBpbmNsdWRpbmcgYW55b25lIG1lbnRpb25lZCBpbiBDYyBsaW5lcyBpbiB0aGUKKyAgcGF0Y2ggYm9keSAoY29tbWl0IG1lc3NhZ2UpIGV4Y2VwdCBmb3Igc2VsZiAodXNlICdzZWxmJyBmb3IgdGhhdCkuCistICdzb2InIHdpbGwgYXZvaWQgaW5jbHVkaW5nIGFueW9uZSBtZW50aW9uZWQgaW4gU2lnbmVkLW9mZi1ieSBsaW5lcyBleGNlcHQKKyAgIGZvciBzZWxmICh1c2UgJ3NlbGYnIGZvciB0aGF0KS4KKy0gJ2NjY21kJyB3aWxsIGF2b2lkIHJ1bm5pbmcgdGhlIC0tY2MtY21kLgorLSAnYm9keScgaXMgZXF1aXZhbGVudCB0byAnc29iJyArICdib2R5Y2MnCistICdhbGwnIHdpbGwgc3VwcHJlc3MgYWxsIGF1dG8gY2MgdmFsdWVzLgorLS0KKysKK0RlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuc3VwcHJlc3NjYycgY29uZmlndXJhdGlvbiB2YWx1ZTsgaWYKK3RoYXQgaXMgdW5zcGVjaWZpZWQsIGRlZmF1bHQgdG8gJ3NlbGYnIGlmIC0tc3VwcHJlc3MtZnJvbSBpcworc3BlY2lmaWVkLCBhcyB3ZWxsIGFzICdib2R5JyBpZiAtLW5vLXNpZ25lZC1vZmYtY2MgaXMgc3BlY2lmaWVkLgogCiAtLVtuby1dc3VwcHJlc3MtZnJvbTo6CiAJSWYgdGhpcyBpcyBzZXQsIGRvIG5vdCBhZGQgdGhlIEZyb206IGFkZHJlc3MgdG8gdGhlIGNjOiBsaXN0LgpAQCAtMTkyLDE4ICsyMTIsNTIgQEAKIAl2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byAtLW5vLXN1cHByZXNzLWZyb20uCiAKIC0tW25vLV10aHJlYWQ6OgotCUlmIHRoaXMgaXMgc2V0LCB0aGUgSW4tUmVwbHktVG8gaGVhZGVyIHdpbGwgYmUgc2V0IG9uIGVhY2ggZW1haWwgc2VudC4KLQlJZiBkaXNhYmxlZCB3aXRoICItLW5vLXRocmVhZCIsIG5vIGVtYWlscyB3aWxsIGhhdmUgdGhlIEluLVJlcGx5LVRvCi0JaGVhZGVyIHNldC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgdGhlICdzZW5kZW1haWwudGhyZWFkJyBjb25maWd1cmF0aW9uCi0JdmFsdWU7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsIGRlZmF1bHQgdG8gLS10aHJlYWQuCisJSWYgdGhpcyBpcyBzZXQsIHRoZSBJbi1SZXBseS1UbyBhbmQgUmVmZXJlbmNlcyBoZWFkZXJzIHdpbGwgYmUKKwlhZGRlZCB0byBlYWNoIGVtYWlsIHNlbnQuICBXaGV0aGVyIGVhY2ggbWFpbCByZWZlcnMgdG8gdGhlCisJcHJldmlvdXMgZW1haWwgKGBkZWVwYCB0aHJlYWRpbmcgcGVyICdnaXQgZm9ybWF0LXBhdGNoJworCXdvcmRpbmcpIG9yIHRvIHRoZSBmaXJzdCBlbWFpbCAoYHNoYWxsb3dgIHRocmVhZGluZykgaXMKKwlnb3Zlcm5lZCBieSAiLS1bbm8tXWNoYWluLXJlcGx5LXRvIi4KKysKK0lmIGRpc2FibGVkIHdpdGggIi0tbm8tdGhyZWFkIiwgdGhvc2UgaGVhZGVycyB3aWxsIG5vdCBiZSBhZGRlZAorKHVubGVzcyBzcGVjaWZpZWQgd2l0aCAtLWluLXJlcGx5LXRvKS4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZQorJ3NlbmRlbWFpbC50aHJlYWQnIGNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsCitkZWZhdWx0IHRvIC0tdGhyZWFkLgorKworSXQgaXMgdXAgdG8gdGhlIHVzZXIgdG8gZW5zdXJlIHRoYXQgbm8gSW4tUmVwbHktVG8gaGVhZGVyIGFscmVhZHkKK2V4aXN0cyB3aGVuICdnaXQgc2VuZC1lbWFpbCcgaXMgYXNrZWQgdG8gYWRkIGl0IChlc3BlY2lhbGx5IG5vdGUgdGhhdAorJ2dpdCBmb3JtYXQtcGF0Y2gnIGNhbiBiZSBjb25maWd1cmVkIHRvIGRvIHRoZSB0aHJlYWRpbmcgaXRzZWxmKS4KK0ZhaWx1cmUgdG8gZG8gc28gbWF5IG5vdCBwcm9kdWNlIHRoZSBleHBlY3RlZCByZXN1bHQgaW4gdGhlCityZWNpcGllbnQncyBNVUEuCiAKIAogQWRtaW5pc3RlcmluZwogfn5+fn5+fn5+fn5+fgogCistLWNvbmZpcm09PG1vZGU+OjoKKwlDb25maXJtIGp1c3QgYmVmb3JlIHNlbmRpbmc6CisrCistLQorLSAnYWx3YXlzJyB3aWxsIGFsd2F5cyBjb25maXJtIGJlZm9yZSBzZW5kaW5nCistICduZXZlcicgd2lsbCBuZXZlciBjb25maXJtIGJlZm9yZSBzZW5kaW5nCistICdjYycgd2lsbCBjb25maXJtIGJlZm9yZSBzZW5kaW5nIHdoZW4gc2VuZC1lbWFpbCBoYXMgYXV0b21hdGljYWxseQorICBhZGRlZCBhZGRyZXNzZXMgZnJvbSB0aGUgcGF0Y2ggdG8gdGhlIENjIGxpc3QKKy0gJ2NvbXBvc2UnIHdpbGwgY29uZmlybSBiZWZvcmUgc2VuZGluZyB0aGUgZmlyc3QgbWVzc2FnZSB3aGVuIHVzaW5nIC0tY29tcG9zZS4KKy0gJ2F1dG8nIGlzIGVxdWl2YWxlbnQgdG8gJ2NjJyArICdjb21wb3NlJworLS0KKysKK0RlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuY29uZmlybScgY29uZmlndXJhdGlvbiB2YWx1ZTsgaWYgdGhhdAoraXMgdW5zcGVjaWZpZWQsIGRlZmF1bHQgdG8gJ2F1dG8nIHVubGVzcyBhbnkgb2YgdGhlIHN1cHByZXNzIG9wdGlvbnMKK2hhdmUgYmVlbiBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgZGVmYXVsdCB0byAnY29tcG9zZScuCisKIC0tZHJ5LXJ1bjo6CiAJRG8gZXZlcnl0aGluZyBleGNlcHQgYWN0dWFsbHkgc2VuZCB0aGUgZW1haWxzLgogCistLVtuby1dZm9ybWF0LXBhdGNoOjoKKwlXaGVuIGFuIGFyZ3VtZW50IG1heSBiZSB1bmRlcnN0b29kIGVpdGhlciBhcyBhIHJlZmVyZW5jZSBvciBhcyBhIGZpbGUgbmFtZSwKKwljaG9vc2UgdG8gdW5kZXJzdGFuZCBpdCBhcyBhIGZvcm1hdC1wYXRjaCBhcmd1bWVudCAoJy0tZm9ybWF0LXBhdGNoJykKKwlvciBhcyBhIGZpbGUgbmFtZSAoJy0tbm8tZm9ybWF0LXBhdGNoJykuIEJ5IGRlZmF1bHQsIHdoZW4gc3VjaCBhIGNvbmZsaWN0CisJb2NjdXJzLCBnaXQgc2VuZC1lbWFpbCB3aWxsIGZhaWwuCisKIC0tcXVpZXQ6OgogCU1ha2UgZ2l0LXNlbmQtZW1haWwgbGVzcyB2ZXJib3NlLiAgT25lIGxpbmUgcGVyIGVtYWlsIHNob3VsZCBiZQogCWFsbCB0aGF0IGlzIG91dHB1dC4KQEAgLTIyMCwxMiArMjc0LDYgQEAKIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwudmFsaWRhdGUnOyBpZiB0aGlzIGlzIG5vdCBzZXQsCiBkZWZhdWx0IHRvICctLXZhbGlkYXRlJy4KIAotLS1bbm8tXWZvcm1hdC1wYXRjaDo6Ci0JV2hlbiBhbiBhcmd1bWVudCBtYXkgYmUgdW5kZXJzdG9vZCBlaXRoZXIgYXMgYSByZWZlcmVuY2Ugb3IgYXMgYSBmaWxlIG5hbWUsCi0JY2hvb3NlIHRvIHVuZGVyc3RhbmQgaXQgYXMgYSBmb3JtYXQtcGF0Y2ggYXJndW1lbnQgKCctLWZvcm1hdC1wYXRjaCcpCi0Jb3IgYXMgYSBmaWxlIG5hbWUgKCctLW5vLWZvcm1hdC1wYXRjaCcpLiBCeSBkZWZhdWx0LCB3aGVuIHN1Y2ggYSBjb25mbGljdAotCW9jY3VycywgZ2l0IHNlbmQtZW1haWwgd2lsbCBmYWlsLgotCiAKIENPTkZJR1VSQVRJT04KIC0tLS0tLS0tLS0tLS0KQEAgLTIzNiw3ICsyODQsNyBAQAogCiBzZW5kZW1haWwuYWxpYXNmaWxldHlwZTo6CiAJRm9ybWF0IG9mIHRoZSBmaWxlKHMpIHNwZWNpZmllZCBpbiBzZW5kZW1haWwuYWxpYXNlc2ZpbGUuIE11c3QgYmUKLQlvbmUgb2YgJ211dHQnLCAnbWFpbHJjJywgJ3BpbmUnLCBvciAnZ251cycuCisJb25lIG9mICdtdXR0JywgJ21haWxyYycsICdwaW5lJywgJ2VsbScsIG9yICdnbnVzJy4KIAogc2VuZGVtYWlsLm11bHRpZWRpdDo6CiAJSWYgdHJ1ZSAoZGVmYXVsdCksIGEgc2luZ2xlIGVkaXRvciBpbnN0YW5jZSB3aWxsIGJlIHNwYXduZWQgdG8gZWRpdApAQCAtMjQ0LDYgKzI5MiwxMSBAQAogCXN1bW1hcnkgd2hlbiAnLS1jb21wb3NlJyBpcyB1c2VkKS4gSWYgZmFsc2UsIGZpbGVzIHdpbGwgYmUgZWRpdGVkIG9uZQogCWFmdGVyIHRoZSBvdGhlciwgc3Bhd25pbmcgYSBuZXcgZWRpdG9yIGVhY2ggdGltZS4KIAorc2VuZGVtYWlsLmNvbmZpcm06OgorCVNldHMgdGhlIGRlZmF1bHQgZm9yIHdoZXRoZXIgdG8gY29uZmlybSBiZWZvcmUgc2VuZGluZy4gTXVzdCBiZQorCW9uZSBvZiAnYWx3YXlzJywgJ25ldmVyJywgJ2NjJywgJ2NvbXBvc2UnLCBvciAnYXV0bycuIFNlZSAnLS1jb25maXJtJworCWluIHRoZSBwcmV2aW91cyBzZWN0aW9uIGZvciB0aGUgbWVhbmluZyBvZiB0aGVzZSB2YWx1ZXMuCisKIAogQXV0aG9yCiAtLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNoZWxsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNoZWxsLnR4dAppbmRleCAzZjhkOTczLi4wZjNhZDgxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaGVsbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hlbGwudHh0CkBAIC0xOCw5ICsxOCw5IEBACiBUaGUgY29tbWFuZHMgY2FuIGJlIGV4ZWN1dGVkIG9ubHkgYnkgdGhlICctYycgb3B0aW9uOyB0aGUgc2hlbGwgaXMgbm90CiBpbnRlcmFjdGl2ZS4KIAotQ3VycmVudGx5LCBvbmx5IHRocmVlIGNvbW1hbmRzIGFyZSBwZXJtaXR0ZWQgdG8gYmUgY2FsbGVkLCAnZ2l0LXJlY2VpdmUtcGFjaycKLSdnaXQtdXBsb2FkLXBhY2snIHdpdGggYSBzaW5nbGUgcmVxdWlyZWQgYXJndW1lbnQgb3IgJ2N2cyBzZXJ2ZXInICh0byBpbnZva2UKLSdnaXQtY3Zzc2VydmVyJykuCitDdXJyZW50bHksIG9ubHkgZm91ciBjb21tYW5kcyBhcmUgcGVybWl0dGVkIHRvIGJlIGNhbGxlZCwgJ2dpdC1yZWNlaXZlLXBhY2snCisnZ2l0LXVwbG9hZC1wYWNrJyBhbmQgJ2dpdC11cGxvYWQtYXJjaGl2ZScgd2l0aCBhIHNpbmdsZSByZXF1aXJlZCBhcmd1bWVudCwgb3IKKydjdnMgc2VydmVyJyAodG8gaW52b2tlICdnaXQtY3Zzc2VydmVyJykuCiAKIEF1dGhvcgogLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQKaW5kZXggOGY3YzBlMi4uNDI0NjNhOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dApAQCAtNDUsNDUgKzQ1LDE2IEBACiAJYW5kIHN1YnNlcXVlbnQgbGluZXMgYXJlIGluZGVudGVkIGJ5IGBpbmRlbnQyYCBzcGFjZXMuIGB3aWR0aGAsCiAJYGluZGVudDFgLCBhbmQgYGluZGVudDJgIGRlZmF1bHQgdG8gNzYsIDYgYW5kIDkgcmVzcGVjdGl2ZWx5LgogCi1GSUxFUwotLS0tLS0KIAotSWYgYSBmaWxlIGAubWFpbG1hcGAgZXhpc3RzIGF0IHRoZSB0b3BsZXZlbCBvZiB0aGUgcmVwb3NpdG9yeSwKLWl0IGlzIHVzZWQgdG8gbWFwIGFuIGF1dGhvciBlbWFpbCBhZGRyZXNzIHRvIGEgY2Fub25pY2FsIHJlYWwgbmFtZS4gVGhpcwotY2FuIGJlIHVzZWQgdG8gY29hbGVzY2UgdG9nZXRoZXIgY29tbWl0cyBieSB0aGUgc2FtZSBwZXJzb24gd2hlcmUgdGhlaXIKLW5hbWUgd2FzIHNwZWxsZWQgZGlmZmVyZW50bHkgKHdoZXRoZXIgd2l0aCB0aGUgc2FtZSBlbWFpbCBhZGRyZXNzIG9yCi1ub3QpLgorTUFQUElORyBBVVRIT1JTCistLS0tLS0tLS0tLS0tLS0KIAotRWFjaCBsaW5lIGluIHRoZSBmaWxlIGNvbnNpc3RzLCBpbiB0aGlzIG9yZGVyLCBvZiB0aGUgY2Fub25pY2FsIHJlYWwgbmFtZQotb2YgYW4gYXV0aG9yLCB3aGl0ZXNwYWNlLCBhbmQgYW4gZW1haWwgYWRkcmVzcyAoZW5jbG9zZWQgYnkgJzwnIGFuZCAnPicpCi10byBtYXAgdG8gdGhlIG5hbWUuIFVzZSBoYXNoICcjJyBmb3IgY29tbWVudHMsIGVpdGhlciBvbiB0aGVpciBvd24gbGluZSwKLW9yIGFmdGVyIHRoZSBlbWFpbCBhZGRyZXNzLgorVGhlIGAubWFpbG1hcGAgZmVhdHVyZSBpcyB1c2VkIHRvIGNvYWxlc2NlIHRvZ2V0aGVyIGNvbW1pdHMgYnkgdGhlIHNhbWUKK3BlcnNvbiBpbiB0aGUgc2hvcnRsb2csIHdoZXJlIHRoZWlyIG5hbWUgYW5kL29yIGVtYWlsIGFkZHJlc3Mgd2FzCitzcGVsbGVkIGRpZmZlcmVudGx5LgogCi1BIGNhbm9uaWNhbCBuYW1lIG1heSBhcHBlYXIgaW4gbW9yZSB0aGFuIG9uZSBsaW5lLCBhc3NvY2lhdGVkIHdpdGgKLWRpZmZlcmVudCBlbWFpbCBhZGRyZXNzZXMsIGJ1dCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIGEgZ2l2ZW4gYWRkcmVzcwotdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlIChpZiB0aGF0IGhhcHBlbnMsIGEgbGF0ZXIgbGluZSBvdmVycmlkZXMgdGhlCi1lYXJsaWVyIG9uZXMpLgoraW5jbHVkZTo6bWFpbG1hcC50eHRbXQogCi1TbywgZm9yIGV4YW1wbGUsIGlmIHlvdXIgaGlzdG9yeSBjb250YWlucyBjb21taXRzIGJ5IHR3byBhdXRob3JzLCBKYW5lCi1hbmQgSm9lLCB3aG9zZSBuYW1lcyBhcHBlYXIgaW4gdGhlIHJlcG9zaXRvcnkgdW5kZXIgc2V2ZXJhbCBmb3JtczoKLQotLS0tLS0tLS0tLS0tCi1Kb2UgRGV2ZWxvcGVyIDxqb2VAZXhhbXBsZS5jb20+Ci1Kb2UgUi4gRGV2ZWxvcGVyIDxqb2VAZXhhbXBsZS5jb20+Ci1KYW5lIERvZSA8amFuZUBleGFtcGxlLmNvbT4KLUphbmUgRG9lIDxqYW5lQGxhcHRvcC4obm9uZSk+Ci1KYW5lIEQuIDxqYW5lQGRlc2t0b3AuKG5vbmUpPgotLS0tLS0tLS0tLS0tCi0KLVRoZW4sIHN1cHBvc2luZyBKb2Ugd2FudHMgaGlzIG1pZGRsZSBuYW1lIGluaXRpYWwgdXNlZCwgYW5kIEphbmUgcHJlZmVycwotaGVyIGZhbWlseSBuYW1lIGZ1bGx5IHNwZWxsZWQgb3V0LCBhIHByb3BlciBgLm1haWxtYXBgIGZpbGUgd291bGQgbG9vayBsaWtlOgotCi0tLS0tLS0tLS0tLS0KLSMgTm90ZSBob3cgd2UgZG9uJ3QgbmVlZCBhbiBlbnRyeSBmb3IgPGphbmVAbGFwdG9wLihub25lKT4sIGJlY2F1c2UgdGhlCi0jIHJlYWwgbmFtZSBvZiB0aGF0IGF1dGhvciBpcyBjb3JyZWN0IGFscmVhZHksIGFuZCBjb2FsZXNjZWQgZGlyZWN0bHkuCi1KYW5lIERvZSA8amFuZUBkZXNrdG9wLihub25lKT4KLUpvZSBSLiBEZXZlbG9wZXIgPGpvZUByYW5kb20uY29tPgotLS0tLS0tLS0tLS0tCiAKIEF1dGhvcgogLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQKaW5kZXggODI3NzU3Ny4uODllYzUzNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctYnJhbmNoLnR4dApAQCAtOCw5ICs4LDExIEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgc2hvdy1icmFuY2gnIFstLWFsbF0gWy0tcmVtb3Rlc10gWy0tdG9wby1vcmRlcl0gWy0tY3VycmVudF0KKydnaXQgc2hvdy1icmFuY2gnIFstLWFsbF0gWy0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl0KKwkJWy0tY3VycmVudF0gWy0tY29sb3IgfCAtLW5vLWNvbG9yXQogCQlbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdCi0JCVstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbPHJldj4gfCA8Z2xvYj5dLi4uCisJCVstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXQorCQlbPHJldj4gfCA8Z2xvYj5dLi4uCiAnZ2l0IHNob3ctYnJhbmNoJyAoLWd8LS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0KIAogREVTQ1JJUFRJT04KQEAgLTU3LDYgKzU5LDExIEBACiAgICAgICAgIGFwcGVhciBpbiB0b3BvbG9naWNhbCBvcmRlciAoaS5lLiwgZGVzY2VuZGFudCBjb21taXRzCiAgICAgICAgIGFyZSBzaG93biBiZWZvcmUgdGhlaXIgcGFyZW50cykuCiAKKy0tZGF0ZS1vcmRlcjo6CisJVGhpcyBvcHRpb24gaXMgc2ltaWxhciB0byAnLS10b3BvLW9yZGVyJyBpbiB0aGUgc2Vuc2UgdGhhdCBubworCXBhcmVudCBjb21lcyBiZWZvcmUgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYnV0IG90aGVyd2lzZSBjb21taXRzCisJYXJlIG9yZGVyZWQgYWNjb3JkaW5nIHRvIHRoZWlyIGNvbW1pdCBkYXRlLgorCiAtLXNwYXJzZTo6CiAJQnkgZGVmYXVsdCwgdGhlIG91dHB1dCBvbWl0cyBtZXJnZXMgdGhhdCBhcmUgcmVhY2hhYmxlCiAJZnJvbSBvbmx5IG9uZSB0aXAgYmVpbmcgc2hvd24uICBUaGlzIG9wdGlvbiBtYWtlcyB0aGVtCkBAIC05OSwxNCArMTA2LDIyIEBACiAJd2lsbCBzaG93IHRoZSByZXZpc2lvbnMgZ2l2ZW4gYnkgImdpdCByZXYtbGlzdCB7Y2FyZXR9bWFzdGVyCiAJdG9waWMxIHRvcGljMiIKIAorLWc6OgogLS1yZWZsb2dbPTxuPlssPGJhc2U+XV0gWzxyZWY+XTo6CiAJU2hvd3MgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBmb3IgdGhlIGdpdmVuCiAJcmVmLiAgSWYgPGJhc2U+IGlzIGdpdmVuLCA8bj4gZW50cmllcyBnb2luZyBiYWNrIGZyb20KIAl0aGF0IGVudHJ5LiAgPGJhc2U+IGNhbiBiZSBzcGVjaWZpZWQgYXMgY291bnQgb3IgZGF0ZS4KLQlgLWdgIGNhbiBiZSB1c2VkIGFzIGEgc2hvcnQtaGFuZCBmb3IgdGhpcyBvcHRpb24uICBXaGVuCi0Jbm8gZXhwbGljaXQgPHJlZj4gcGFyYW1ldGVyIGlzIGdpdmVuLCBpdCBkZWZhdWx0cyB0byB0aGUKKwlXaGVuIG5vIGV4cGxpY2l0IDxyZWY+IHBhcmFtZXRlciBpcyBnaXZlbiwgaXQgZGVmYXVsdHMgdG8gdGhlCiAJY3VycmVudCBicmFuY2ggKG9yIGBIRUFEYCBpZiBpdCBpcyBkZXRhY2hlZCkuCiAKKy0tY29sb3I6OgorCUNvbG9yIHRoZSBzdGF0dXMgc2lnbiAob25lIG9mIHRoZXNlOiBgKmAgYCFgIGArYCBgLWApIG9mIGVhY2ggY29tbWl0CisJY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIGl0J3MgaW4uCisKKy0tbm8tY29sb3I6OgorCVR1cm4gb2ZmIGNvbG9yZWQgb3V0cHV0LCBldmVuIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBnaXZlcyB0aGUKKwlkZWZhdWx0IHRvIGNvbG9yIG91dHB1dC4KKwogTm90ZSB0aGF0IC0tbW9yZSwgLS1saXN0LCAtLWluZGVwZW5kZW50IGFuZCAtLW1lcmdlLWJhc2Ugb3B0aW9ucwogYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KIApAQCAtMTQ4LDkgKzE2MywxMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZXNlIHRocmVlIGJyYW5jaGVzIGFsbCBmb3JrZWQgZnJvbSBhIGNvbW1vbiBjb21taXQsIFttYXN0ZXJdLAotd2hvc2UgY29tbWl0IG1lc3NhZ2UgaXMgIkFkZCAnZ2l0IHNob3ctYnJhbmNoJy4gICJmaXhlcyIgYnJhbmNoCi1hZGRzIG9uZSBjb21taXQgJ0ludHJvZHVjZSAicmVzZXQgdHlwZSInLiAgIm1oZiIgYnJhbmNoIGhhcyBtYW55Ci1vdGhlciBjb21taXRzLiAgVGhlIGN1cnJlbnQgYnJhbmNoIGlzICJtYXN0ZXIiLgord2hvc2UgY29tbWl0IG1lc3NhZ2UgaXMgIkFkZCBcJ2dpdCBzaG93LWJyYW5jaFwnIi4gVGhlICJmaXhlcyIKK2JyYW5jaCBhZGRzIG9uZSBjb21taXQgIkludHJvZHVjZSAicmVzZXQgdHlwZSIgZmxhZyB0byAiZ2l0IHJlc2V0IiIuCitUaGUgIm1oZiIgYnJhbmNoIGFkZHMgbWFueSBvdGhlciBjb21taXRzLiBUaGUgY3VycmVudCBicmFuY2gKK2lzICJtYXN0ZXIiLgogCiAKIEVYQU1QTEUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dAppbmRleCA5OGUyOTRhLi5mNDQyOWJkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LXJlZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1yZWYudHh0CkBAIC05LDggKzksOSBAQAogLS0tLS0tLS0KIFt2ZXJzZV0KICdnaXQgc2hvdy1yZWYnIFstcXwtLXF1aWV0XSBbLS12ZXJpZnldIFstaHwtLWhlYWRdIFstZHwtLWRlcmVmZXJlbmNlXQotCSAgICAgWy1zfC0taGFzaF0gWy0tYWJicmV2XSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSA8cGF0dGVybj4uLi4KLSdnaXQgc2hvdy1yZWYnIC0tZXhjbHVkZS1leGlzdGluZ1s9cGF0dGVybl0KKwkgICAgIFstc3wtLWhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10KKwkgICAgIFstLWhlYWRzXSBbLS1dIDxwYXR0ZXJuPi4uLgorJ2dpdCBzaG93LXJlZicgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIDwgcmVmLWxpc3QKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC00OCw3ICs0OSw3IEBACiAJYXBwZW5kZWQuCiAKIC1zOjoKLS0taGFzaDo6CistLWhhc2hbPTxuPl06OgogCiAJT25seSBzaG93IHRoZSBTSEExIGhhc2gsIG5vdCB0aGUgcmVmZXJlbmNlIG5hbWUuIFdoZW4gY29tYmluZWQgd2l0aAogCS0tZGVyZWZlcmVuY2UgdGhlIGRlcmVmZXJlbmNlZCB0YWcgd2lsbCBzdGlsbCBiZSBzaG93biBhZnRlciB0aGUgU0hBMS4KQEAgLTU5LDExICs2MCwxMCBAQAogCUFzaWRlIGZyb20gcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgb2YgMSwgaXQgd2lsbCBhbHNvIHByaW50IGFuIGVycm9yCiAJbWVzc2FnZSBpZiAnLS1xdWlldCcgd2FzIG5vdCBzcGVjaWZpZWQuCiAKLS0tYWJicmV2OjoKLS0tYWJicmV2PWxlbjo6CistLWFiYnJldls9PG4+XTo6CiAKIAlBYmJyZXZpYXRlIHRoZSBvYmplY3QgbmFtZS4gIFdoZW4gdXNpbmcgYC0taGFzaGAsIHlvdSBkbwotCW5vdCBoYXZlIHRvIHNheSBgLS1oYXNoIC0tYWJicmV2YDsgYC0taGFzaD1sZW5gIHdvdWxkIGRvLgorCW5vdCBoYXZlIHRvIHNheSBgLS1oYXNoIC0tYWJicmV2YDsgYC0taGFzaD1uYCB3b3VsZCBkby4KIAogLXE6OgogLS1xdWlldDo6CkBAIC03MSw4ICs3MSw3IEBACiAJRG8gbm90IHByaW50IGFueSByZXN1bHRzIHRvIHN0ZG91dC4gV2hlbiBjb21iaW5lZCB3aXRoICctLXZlcmlmeScgdGhpcwogCWNhbiBiZSB1c2VkIHRvIHNpbGVudGx5IGNoZWNrIGlmIGEgcmVmZXJlbmNlIGV4aXN0cy4KIAotLS1leGNsdWRlLWV4aXN0aW5nOjoKLS0tZXhjbHVkZS1leGlzdGluZz1wYXR0ZXJuOjoKKy0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XTo6CiAKIAlNYWtlICdnaXQtc2hvdy1yZWYnIGFjdCBhcyBhIGZpbHRlciB0aGF0IHJlYWRzIHJlZnMgZnJvbSBzdGRpbiBvZiB0aGUKIAlmb3JtICJeKD86PGFueXRoaW5nPlxzKT88cmVmbmFtZT4oPzpcXlx7XH0pPyQiIGFuZCBwZXJmb3JtcyB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dAppbmRleCAwNTFmOTRkLi4xYzY0YTAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zdGFzaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0CkBAIC05LDEwICs5LDExIEBACiAtLS0tLS0tLQogW3ZlcnNlXQogJ2dpdCBzdGFzaCcgbGlzdCBbPG9wdGlvbnM+XQotJ2dpdCBzdGFzaCcgKHNob3cgfCBkcm9wIHwgcG9wICkgWzxzdGFzaD5dCi0nZ2l0IHN0YXNoJyBhcHBseSBbLS1pbmRleF0gWzxzdGFzaD5dCisnZ2l0IHN0YXNoJyBzaG93IFs8c3Rhc2g+XQorJ2dpdCBzdGFzaCcgZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dCisnZ2l0IHN0YXNoJyAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0KICdnaXQgc3Rhc2gnIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dCi0nZ2l0IHN0YXNoJyBbc2F2ZSBbLS1rZWVwLWluZGV4XSBbPG1lc3NhZ2U+XV0KKydnaXQgc3Rhc2gnIFtzYXZlIFstLWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XSBbPG1lc3NhZ2U+XV0KICdnaXQgc3Rhc2gnIGNsZWFyCiAnZ2l0IHN0YXNoJyBjcmVhdGUKIApAQCAtNDEsNyArNDIsNyBAQAogT1BUSU9OUwogLS0tLS0tLQogCi1zYXZlIFstLWtlZXAtaW5kZXhdIFs8bWVzc2FnZT5dOjoKK3NhdmUgWy0ta2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdIFs8bWVzc2FnZT5dOjoKIAogCVNhdmUgeW91ciBsb2NhbCBtb2RpZmljYXRpb25zIHRvIGEgbmV3ICdzdGFzaCcsIGFuZCBydW4gYGdpdCByZXNldAogCS0taGFyZGAgdG8gcmV2ZXJ0IHRoZW0uICBUaGlzIGlzIHRoZSBkZWZhdWx0IGFjdGlvbiB3aGVuIG5vCkBAIC03NSwxOSArNzYsMjcgQEAKIAlpdCB3aWxsIGFjY2VwdCBhbnkgZm9ybWF0IGtub3duIHRvICdnaXQtZGlmZicgKGUuZy4sIGBnaXQgc3Rhc2ggc2hvdwogCS1wIHN0YXNoQFx7MX1gIHRvIHZpZXcgdGhlIHNlY29uZCBtb3N0IHJlY2VudCBzdGFzaCBpbiBwYXRjaCBmb3JtKS4KIAotYXBwbHkgWy0taW5kZXhdIFs8c3Rhc2g+XTo6Citwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl06OgogCi0JUmVzdG9yZSB0aGUgY2hhbmdlcyByZWNvcmRlZCBpbiB0aGUgc3Rhc2ggb24gdG9wIG9mIHRoZSBjdXJyZW50Ci0Jd29ya2luZyB0cmVlIHN0YXRlLiAgV2hlbiBubyBgPHN0YXNoPmAgaXMgZ2l2ZW4sIGFwcGxpZXMgdGhlIGxhdGVzdAotCW9uZS4gIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBtdXN0IG1hdGNoIHRoZSBpbmRleC4KKwlSZW1vdmUgYSBzaW5nbGUgc3Rhc2hlZCBzdGF0ZSBmcm9tIHRoZSBzdGFzaCBsaXN0IGFuZCBhcHBseSBpdAorCW9uIHRvcCBvZiB0aGUgY3VycmVudCB3b3JraW5nIHRyZWUgc3RhdGUsIGkuZS4sIGRvIHRoZSBpbnZlcnNlCisJb3BlcmF0aW9uIG9mIGBnaXQgc3Rhc2ggc2F2ZWAuIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBtdXN0CisJbWF0Y2ggdGhlIGluZGV4LgogKwotVGhpcyBvcGVyYXRpb24gY2FuIGZhaWwgd2l0aCBjb25mbGljdHM7IHlvdSBuZWVkIHRvIHJlc29sdmUgdGhlbQotYnkgaGFuZCBpbiB0aGUgd29ya2luZyB0cmVlLgorQXBwbHlpbmcgdGhlIHN0YXRlIGNhbiBmYWlsIHdpdGggY29uZmxpY3RzOyBpbiB0aGlzIGNhc2UsIGl0IGlzIG5vdAorcmVtb3ZlZCBmcm9tIHRoZSBzdGFzaCBsaXN0LiBZb3UgbmVlZCB0byByZXNvbHZlIHRoZSBjb25mbGljdHMgYnkgaGFuZAorYW5kIGNhbGwgYGdpdCBzdGFzaCBkcm9wYCBtYW51YWxseSBhZnRlcndhcmRzLgogKwogSWYgdGhlIGAtLWluZGV4YCBvcHRpb24gaXMgdXNlZCwgdGhlbiB0cmllcyB0byByZWluc3RhdGUgbm90IG9ubHkgdGhlIHdvcmtpbmcKIHRyZWUncyBjaGFuZ2VzLCBidXQgYWxzbyB0aGUgaW5kZXgncyBvbmVzLiBIb3dldmVyLCB0aGlzIGNhbiBmYWlsLCB3aGVuIHlvdQogaGF2ZSBjb25mbGljdHMgKHdoaWNoIGFyZSBzdG9yZWQgaW4gdGhlIGluZGV4LCB3aGVyZSB5b3UgdGhlcmVmb3JlIGNhbiBubwogbG9uZ2VyIGFwcGx5IHRoZSBjaGFuZ2VzIGFzIHRoZXkgd2VyZSBvcmlnaW5hbGx5KS4KKysKK1doZW4gbm8gYDxzdGFzaD5gIGlzIGdpdmVuLCBgc3Rhc2hAXHswfWAgaXMgYXNzdW1lZC4KKworYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl06OgorCisJTGlrZSBgcG9wYCwgYnV0IGRvIG5vdCByZW1vdmUgdGhlIHN0YXRlIGZyb20gdGhlIHN0YXNoIGxpc3QuCiAKIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dOjoKIApAQCAtMTA3LDE3ICsxMTYsMTEgQEAKIAlSZW1vdmUgYWxsIHRoZSBzdGFzaGVkIHN0YXRlcy4gTm90ZSB0aGF0IHRob3NlIHN0YXRlcyB3aWxsIHRoZW4KIAliZSBzdWJqZWN0IHRvIHBydW5pbmcsIGFuZCBtYXkgYmUgZGlmZmljdWx0IG9yIGltcG9zc2libGUgdG8gcmVjb3Zlci4KIAotZHJvcCBbPHN0YXNoPl06OgorZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dOjoKIAogCVJlbW92ZSBhIHNpbmdsZSBzdGFzaGVkIHN0YXRlIGZyb20gdGhlIHN0YXNoIGxpc3QuIFdoZW4gbm8gYDxzdGFzaD5gCiAJaXMgZ2l2ZW4sIGl0IHJlbW92ZXMgdGhlIGxhdGVzdCBvbmUuIGkuZS4gYHN0YXNoQFx7MH1gCiAKLXBvcCBbPHN0YXNoPl06OgotCi0JUmVtb3ZlIGEgc2luZ2xlIHN0YXNoZWQgc3RhdGUgZnJvbSB0aGUgc3Rhc2ggbGlzdCBhbmQgYXBwbHkgb24gdG9wCi0Jb2YgdGhlIGN1cnJlbnQgd29ya2luZyB0cmVlIHN0YXRlLiBXaGVuIG5vIGA8c3Rhc2g+YCBpcyBnaXZlbiwKLQlgc3Rhc2hAXHswfWAgaXMgYXNzdW1lZC4gU2VlIGFsc28gYGFwcGx5YC4KLQogY3JlYXRlOjoKIAogCUNyZWF0ZSBhIHN0YXNoICh3aGljaCBpcyBhIHJlZ3VsYXIgY29tbWl0IG9iamVjdCkgYW5kIHJldHVybiBpdHMKQEAgLTE2Myw3ICsxNjYsNyBAQAogZmlsZSBmb29iYXIgbm90IHVwIHRvIGRhdGUsIGNhbm5vdCBtZXJnZS4KICQgZ2l0IHN0YXNoCiAkIGdpdCBwdWxsCi0kIGdpdCBzdGFzaCBhcHBseQorJCBnaXQgc3Rhc2ggcG9wCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEludGVycnVwdGVkIHdvcmtmbG93OjoKQEAgLTE5Miw3ICsxOTUsNyBAQAogJCBnaXQgc3Rhc2gKICQgZWRpdCBlbWVyZ2VuY3kgZml4CiAkIGdpdCBjb21taXQgLWEgLW0gIkZpeCBpbiBhIGh1cnJ5IgotJCBnaXQgc3Rhc2ggYXBwbHkKKyQgZ2l0IHN0YXNoIHBvcAogIyAuLi4gY29udGludWUgaGFja2luZyAuLi4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN1Ym1vZHVsZS50eHQKaW5kZXggMmYyMDdmYi4uN2RkNzNhZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0CkBAIC05LDExICs5LDEzIEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gYWRkIFstYiBicmFuY2hdIFstLV0gPHJlcG9zaXRvcnk+IDxwYXRoPgorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBhZGQgWy1iIGJyYW5jaF0KKwkgICAgICBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1dIDxyZXBvc2l0b3J5PiA8cGF0aD4KICdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3RhdHVzIFstLWNhY2hlZF0gWy0tXSBbPHBhdGg+Li4uXQogJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBpbml0IFstLV0gWzxwYXRoPi4uLl0KLSdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gdXBkYXRlIFstLWluaXRdIFstLV0gWzxwYXRoPi4uLl0KLSdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3VtbWFyeSBbLS1zdW1tYXJ5LWxpbWl0IDxuPl0gW2NvbW1pdF0gWy0tXSBbPHBhdGg+Li4uXQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSB1cGRhdGUgWy0taW5pdF0gWy1OfC0tbm8tZmV0Y2hdIFstLXJlYmFzZV0KKwkgICAgICBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1tZXJnZV0gWy0tXSBbPHBhdGg+Li4uXQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBzdW1tYXJ5IFstLWNhY2hlZF0gWy0tc3VtbWFyeS1saW1pdCA8bj5dIFtjb21taXRdIFstLV0gWzxwYXRoPi4uLl0KICdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gZm9yZWFjaCA8Y29tbWFuZD4KICdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3luYyBbLS1dIFs8cGF0aD4uLi5dCiAKQEAgLTExMyw3ICsxMTUsOSBAQAogdXBkYXRlOjoKIAlVcGRhdGUgdGhlIHJlZ2lzdGVyZWQgc3VibW9kdWxlcywgaS5lLiBjbG9uZSBtaXNzaW5nIHN1Ym1vZHVsZXMgYW5kCiAJY2hlY2tvdXQgdGhlIGNvbW1pdCBzcGVjaWZpZWQgaW4gdGhlIGluZGV4IG9mIHRoZSBjb250YWluaW5nIHJlcG9zaXRvcnkuCi0JVGhpcyB3aWxsIG1ha2UgdGhlIHN1Ym1vZHVsZXMgSEVBRCBiZSBkZXRhY2hlZC4KKwlUaGlzIHdpbGwgbWFrZSB0aGUgc3VibW9kdWxlcyBIRUFEIGJlIGRldGFjaGVkIHVubGVzcyAnLS1yZWJhc2UnIG9yCisJJy0tbWVyZ2UnIGlzIHNwZWNpZmllZCBvciB0aGUga2V5IGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYCBpcyBzZXQgdG8KKwlgcmViYXNlYCBvciBgbWVyZ2VgLgogKwogSWYgdGhlIHN1Ym1vZHVsZSBpcyBub3QgeWV0IGluaXRpYWxpemVkLCBhbmQgeW91IGp1c3Qgd2FudCB0byB1c2UgdGhlCiBzZXR0aW5nIGFzIHN0b3JlZCBpbiAuZ2l0bW9kdWxlcywgeW91IGNhbiBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemUgdGhlCkBAIC0xMzcsOCArMTQxLDkgQEAKIAl0aGUgcHJvY2Vzc2luZyB0byB0ZXJtaW5hdGUuIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYWRkaW5nICd8fCA6JwogCXRvIHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQuCiArCi1BcyBhbiBleGFtcGxlLCAiZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoICdlY2hvICRwYXRoIGBnaXQgcmV2LXBhcnNlIEhFQURgJyB3aWxsCi1zaG93IHRoZSBwYXRoIGFuZCBjdXJyZW50bHkgY2hlY2tlZCBvdXQgY29tbWl0IGZvciBlYWNoIHN1Ym1vZHVsZS4KK0FzIGFuIGV4YW1wbGUsICtnaXQgc3VibW9kdWxlIGZvcmVhY2ggXCdlY2hvICRwYXRoIHtiYWNrdGlja31naXQKK3Jldi1wYXJzZSBIRUFEe2JhY2t0aWNrfScrIHdpbGwgc2hvdyB0aGUgcGF0aCBhbmQgY3VycmVudGx5IGNoZWNrZWQgb3V0Citjb21taXQgZm9yIGVhY2ggc3VibW9kdWxlLgogCiBzeW5jOjoKIAlTeW5jaHJvbml6ZXMgc3VibW9kdWxlcycgcmVtb3RlIFVSTCBjb25maWd1cmF0aW9uIHNldHRpbmcKQEAgLTE3Miw2ICsxNzcsMzggQEAKIAkodGhlIGRlZmF1bHQpLiBUaGlzIGxpbWl0IG9ubHkgYXBwbGllcyB0byBtb2RpZmllZCBzdWJtb2R1bGVzLiBUaGUKIAlzaXplIGlzIGFsd2F5cyBsaW1pdGVkIHRvIDEgZm9yIGFkZGVkL2RlbGV0ZWQvdHlwZWNoYW5nZWQgc3VibW9kdWxlcy4KIAorLU46OgorLS1uby1mZXRjaDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHVwZGF0ZSBjb21tYW5kLgorCURvbid0IGZldGNoIG5ldyBvYmplY3RzIGZyb20gdGhlIHJlbW90ZSBzaXRlLgorCistLW1lcmdlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgdXBkYXRlIGNvbW1hbmQuCisJTWVyZ2UgdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IGludG8gdGhlIGN1cnJlbnQgYnJhbmNoCisJb2YgdGhlIHN1Ym1vZHVsZS4gSWYgdGhpcyBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBzdWJtb2R1bGUncyBIRUFEIHdpbGwKKwlub3QgYmUgZGV0YWNoZWQuIElmIGEgbWVyZ2UgZmFpbHVyZSBwcmV2ZW50cyB0aGlzIHByb2Nlc3MsIHlvdSB3aWxsCisJaGF2ZSB0byByZXNvbHZlIHRoZSByZXN1bHRpbmcgY29uZmxpY3RzIHdpdGhpbiB0aGUgc3VibW9kdWxlIHdpdGggdGhlCisJdXN1YWwgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scy4KKwlJZiB0aGUga2V5IGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYCBpcyBzZXQgdG8gYG1lcmdlYCwgdGhpcyBvcHRpb24gaXMKKwlpbXBsaWNpdC4KKworLS1yZWJhc2U6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4KKwlSZWJhc2UgdGhlIGN1cnJlbnQgYnJhbmNoIG9udG8gdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUKKwlzdXBlcnByb2plY3QuIElmIHRoaXMgb3B0aW9uIGlzIGdpdmVuLCB0aGUgc3VibW9kdWxlJ3MgSEVBRCB3aWxsIG5vdAorCWJlIGRldGFjaGVkLiBJZiBhIGEgbWVyZ2UgZmFpbHVyZSBwcmV2ZW50cyB0aGlzIHByb2Nlc3MsIHlvdSB3aWxsIGhhdmUKKwl0byByZXNvbHZlIHRoZXNlIGZhaWx1cmVzIHdpdGggbGlua2dpdDpnaXQtcmViYXNlWzFdLgorCUlmIHRoZSBrZXkgYHN1Ym1vZHVsZS4kbmFtZS51cGRhdGVgIGlzIHNldCB0byBgcmViYXNlYCwgdGhpcyBvcHRpb24gaXMKKwlpbXBsaWNpdC4KKworLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBhZGQgYW5kIHVwZGF0ZSBjb21tYW5kcy4gIFRoZXNlCisJY29tbWFuZHMgc29tZXRpbWVzIG5lZWQgdG8gY2xvbmUgYSByZW1vdGUgcmVwb3NpdG9yeS4gSW4gdGhpcyBjYXNlLAorCXRoaXMgb3B0aW9uIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXSBjb21tYW5kLgorKworKk5PVEUqOiBEbyAqbm90KiB1c2UgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBoYXZlIHJlYWQgdGhlIG5vdGUKK2ZvciBsaW5rZ2l0OmdpdC1jbG9uZVsxXSdzIC0tcmVmZXJlbmNlIGFuZCAtLXNoYXJlZCBvcHRpb25zIGNhcmVmdWxseS4KKwogPHBhdGg+Li4uOjoKIAlQYXRocyB0byBzdWJtb2R1bGUocykuIFdoZW4gc3BlY2lmaWVkIHRoaXMgd2lsbCByZXN0cmljdCB0aGUgY29tbWFuZAogCXRvIG9ubHkgb3BlcmF0ZSBvbiB0aGUgc3VibW9kdWxlcyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIHBhdGhzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQKaW5kZXggMjE2YzQ1Ni4uMjJhMDM4OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdm4udHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtc3ZuIC0gQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIHNpbmdsZSBTdWJ2ZXJzaW9uIGJyYW5jaCBhbmQgZ2l0CitnaXQtc3ZuIC0gQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgZ2l0CiAKIFNZTk9QU0lTCiAtLS0tLS0tLQpAQCAtMTEsMjcgKzExLDI1IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotJ2dpdC1zdm4nIGlzIGEgc2ltcGxlIGNvbmR1aXQgZm9yIGNoYW5nZXNldHMgYmV0d2VlbiBTdWJ2ZXJzaW9uIGFuZCBnaXQuCisnZ2l0IHN2bicgaXMgYSBzaW1wbGUgY29uZHVpdCBmb3IgY2hhbmdlc2V0cyBiZXR3ZWVuIFN1YnZlcnNpb24gYW5kIGdpdC4KIEl0IHByb3ZpZGVzIGEgYmlkaXJlY3Rpb25hbCBmbG93IG9mIGNoYW5nZXMgYmV0d2VlbiBhIFN1YnZlcnNpb24gYW5kIGEgZ2l0CiByZXBvc2l0b3J5LgogCi0nZ2l0LXN2bicgY2FuIHRyYWNrIGEgc2luZ2xlIFN1YnZlcnNpb24gYnJhbmNoIHNpbXBseSBieSB1c2luZyBhCi1VUkwgdG8gdGhlIGJyYW5jaCwgZm9sbG93IGJyYW5jaGVzIGxhaWQgb3V0IGluIHRoZSBTdWJ2ZXJzaW9uIHJlY29tbWVuZGVkCi1tZXRob2QgKHRydW5rLCBicmFuY2hlcywgdGFncyBkaXJlY3Rvcmllcykgd2l0aCB0aGUgLS1zdGRsYXlvdXQgb3B0aW9uLCBvcgotZm9sbG93IGJyYW5jaGVzIGluIGFueSBsYXlvdXQgd2l0aCB0aGUgLVQvLXQvLWIgb3B0aW9ucyAoc2VlIG9wdGlvbnMgdG8KLSdpbml0JyBiZWxvdywgYW5kIGFsc28gdGhlICdjbG9uZScgY29tbWFuZCkuCisnZ2l0IHN2bicgY2FuIHRyYWNrIGEgc3RhbmRhcmQgU3VidmVyc2lvbiByZXBvc2l0b3J5LAorZm9sbG93aW5nIHRoZSBjb21tb24gInRydW5rL2JyYW5jaGVzL3RhZ3MiIGxheW91dCwgd2l0aCB0aGUgLS1zdGRsYXlvdXQgb3B0aW9uLgorSXQgY2FuIGFsc28gZm9sbG93IGJyYW5jaGVzIGFuZCB0YWdzIGluIGFueSBsYXlvdXQgd2l0aCB0aGUgLVQvLXQvLWIgb3B0aW9ucworKHNlZSBvcHRpb25zIHRvICdpbml0JyBiZWxvdywgYW5kIGFsc28gdGhlICdjbG9uZScgY29tbWFuZCkuCiAKLU9uY2UgdHJhY2tpbmcgYSBTdWJ2ZXJzaW9uIGJyYW5jaCAod2l0aCBhbnkgb2YgdGhlIGFib3ZlIG1ldGhvZHMpLCB0aGUgZ2l0CitPbmNlIHRyYWNraW5nIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5ICh3aXRoIGFueSBvZiB0aGUgYWJvdmUgbWV0aG9kcyksIHRoZSBnaXQKIHJlcG9zaXRvcnkgY2FuIGJlIHVwZGF0ZWQgZnJvbSBTdWJ2ZXJzaW9uIGJ5IHRoZSAnZmV0Y2gnIGNvbW1hbmQgYW5kCiBTdWJ2ZXJzaW9uIHVwZGF0ZWQgZnJvbSBnaXQgYnkgdGhlICdkY29tbWl0JyBjb21tYW5kLgogCiBDT01NQU5EUwogLS0tLS0tLS0KLS0tCiAKICdpbml0Jzo6CiAJSW5pdGlhbGl6ZXMgYW4gZW1wdHkgZ2l0IHJlcG9zaXRvcnkgd2l0aCBhZGRpdGlvbmFsCi0JbWV0YWRhdGEgZGlyZWN0b3JpZXMgZm9yICdnaXQtc3ZuJy4gIFRoZSBTdWJ2ZXJzaW9uIFVSTAorCW1ldGFkYXRhIGRpcmVjdG9yaWVzIGZvciAnZ2l0IHN2bicuICBUaGUgU3VidmVyc2lvbiBVUkwKIAltYXkgYmUgc3BlY2lmaWVkIGFzIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50LCBvciBhcyBmdWxsCiAJVVJMIGFyZ3VtZW50cyB0byAtVC8tdC8tYi4gIE9wdGlvbmFsbHksIHRoZSB0YXJnZXQKIAlkaXJlY3RvcnkgdG8gb3BlcmF0ZSBvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgc2Vjb25kCkBAIC00OCw4ICs0NiwxMSBAQAogLS1zdGRsYXlvdXQ7OwogCVRoZXNlIGFyZSBvcHRpb25hbCBjb21tYW5kLWxpbmUgb3B0aW9ucyBmb3IgaW5pdC4gIEVhY2ggb2YKIAl0aGVzZSBmbGFncyBjYW4gcG9pbnQgdG8gYSByZWxhdGl2ZSByZXBvc2l0b3J5IHBhdGgKLQkoLS10YWdzPXByb2plY3QvdGFncycpIG9yIGEgZnVsbCB1cmwKLQkoLS10YWdzPWh0dHBzOi8vZm9vLm9yZy9wcm9qZWN0L3RhZ3MpLiBUaGUgb3B0aW9uIC0tc3RkbGF5b3V0IGlzCisJKC0tdGFncz1wcm9qZWN0L3RhZ3MpIG9yIGEgZnVsbCB1cmwKKwkoLS10YWdzPWh0dHBzOi8vZm9vLm9yZy9wcm9qZWN0L3RhZ3MpLgorCVlvdSBjYW4gc3BlY2lmeSBtb3JlIHRoYW4gb25lIC0tdGFncyBhbmQvb3IgLS1icmFuY2hlcyBvcHRpb25zLCBpbiBjYXNlCisJeW91ciBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgcGxhY2VzIHRhZ3Mgb3IgYnJhbmNoZXMgdW5kZXIgbXVsdGlwbGUgcGF0aHMuCisJVGhlIG9wdGlvbiAtLXN0ZGxheW91dCBpcwogCWEgc2hvcnRoYW5kIHdheSBvZiBzZXR0aW5nIHRydW5rLHRhZ3MsYnJhbmNoZXMgYXMgdGhlIHJlbGF0aXZlIHBhdGhzLAogCXdoaWNoIGlzIHRoZSBTdWJ2ZXJzaW9uIGRlZmF1bHQuIElmIGFueSBvZiB0aGUgb3RoZXIgb3B0aW9ucyBhcmUgZ2l2ZW4KIAlhcyB3ZWxsLCB0aGV5IHRha2UgcHJlY2VkZW5jZS4KQEAgLTYxLDE2ICs2Miw2IEBACiAJU2V0IHRoZSAndXNlU3Zuc3luY1Byb3BzJyBvcHRpb24gaW4gdGhlIFtzdm4tcmVtb3RlXSBjb25maWcuCiAtLXJld3JpdGUtcm9vdD08VVJMPjs7CiAJU2V0IHRoZSAncmV3cml0ZVJvb3QnIG9wdGlvbiBpbiB0aGUgW3N2bi1yZW1vdGVdIGNvbmZpZy4KLS0tdXNlLWxvZy1hdXRob3I7OwotCVdoZW4gcmV0cmlldmluZyBzdm4gY29tbWl0cyBpbnRvIGdpdCAoYXMgcGFydCBvZiBmZXRjaCwgcmViYXNlLCBvcgotCWRjb21taXQgb3BlcmF0aW9ucyksIGxvb2sgZm9yIHRoZSBmaXJzdCBGcm9tOiBvciBTaWduZWQtb2ZmLWJ5OiBsaW5lCi0JaW4gdGhlIGxvZyBtZXNzYWdlIGFuZCB1c2UgdGhhdCBhcyB0aGUgYXV0aG9yIHN0cmluZy4KLS0tYWRkLWF1dGhvci1mcm9tOzsKLQlXaGVuIGNvbW1pdHRpbmcgdG8gc3ZuIGZyb20gZ2l0IChhcyBwYXJ0IG9mIGNvbW1pdCBvciBkY29tbWl0Ci0Jb3BlcmF0aW9ucyksIGlmIHRoZSBleGlzdGluZyBsb2cgbWVzc2FnZSBkb2Vzbid0IGFscmVhZHkgaGF2ZSBhCi0JRnJvbTogb3IgU2lnbmVkLW9mZi1ieTogbGluZSwgYXBwZW5kIGEgRnJvbTogbGluZSBiYXNlZCBvbiB0aGUKLQlnaXQgY29tbWl0J3MgYXV0aG9yIHN0cmluZy4gIElmIHlvdSB1c2UgdGhpcywgdGhlbiAtLXVzZS1sb2ctYXV0aG9yCi0Jd2lsbCByZXRyaWV2ZSBhIHZhbGlkIGF1dGhvciBzdHJpbmcgZm9yIGFsbCBjb21taXRzLgogLS11c2VybmFtZT08VVNFUj47OwogCUZvciB0cmFuc3BvcnRzIHRoYXQgU1ZOIGhhbmRsZXMgYXV0aGVudGljYXRpb24gZm9yIChodHRwLAogCWh0dHBzLCBhbmQgcGxhaW4gc3ZuKSwgc3BlY2lmeSB0aGUgdXNlcm5hbWUuICBGb3Igb3RoZXIKQEAgLTg1LDYgKzc2LDIxIEBACiAJc3BlY2lmaWVkLCB0aGUgcHJlZml4IG11c3QgaW5jbHVkZSBhIHRyYWlsaW5nIHNsYXNoLgogCVNldHRpbmcgYSBwcmVmaXggaXMgdXNlZnVsIGlmIHlvdSB3aXNoIHRvIHRyYWNrIG11bHRpcGxlCiAJcHJvamVjdHMgdGhhdCBzaGFyZSBhIGNvbW1vbiByZXBvc2l0b3J5LgorLS1pZ25vcmUtcGF0aHM9PHJlZ2V4Pjs7CisJV2hlbiBwYXNzZWQgdG8gJ2luaXQnIG9yICdjbG9uZScgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24gd2lsbAorCWJlIHByZXNlcnZlZCBhcyBhIGNvbmZpZyBrZXkuICBTZWUgJ2ZldGNoJyBmb3IgYSBkZXNjcmlwdGlvbgorCW9mICctLWlnbm9yZS1wYXRocycuCistLW5vLW1pbmltaXplLXVybDs7CisJV2hlbiB0cmFja2luZyBtdWx0aXBsZSBkaXJlY3RvcmllcyAodXNpbmcgLS1zdGRsYXlvdXQsCisJLS1icmFuY2hlcywgb3IgLS10YWdzIG9wdGlvbnMpLCBnaXQgc3ZuIHdpbGwgYXR0ZW1wdCB0byBjb25uZWN0CisJdG8gdGhlIHJvb3QgKG9yIGhpZ2hlc3QgYWxsb3dlZCBsZXZlbCkgb2YgdGhlIFN1YnZlcnNpb24KKwlyZXBvc2l0b3J5LiAgVGhpcyBkZWZhdWx0IGFsbG93cyBiZXR0ZXIgdHJhY2tpbmcgb2YgaGlzdG9yeSBpZgorCWVudGlyZSBwcm9qZWN0cyBhcmUgbW92ZWQgd2l0aGluIGEgcmVwb3NpdG9yeSwgYnV0IG1heSBjYXVzZQorCWlzc3VlcyBvbiByZXBvc2l0b3JpZXMgd2hlcmUgcmVhZCBhY2Nlc3MgcmVzdHJpY3Rpb25zIGFyZSBpbgorCXBsYWNlLiAgUGFzc2luZyAnLS1uby1taW5pbWl6ZS11cmwnIHdpbGwgYWxsb3cgZ2l0IHN2biB0bworCWFjY2VwdCBVUkxzIGFzLWlzIHdpdGhvdXQgYXR0ZW1wdGluZyB0byBjb25uZWN0IHRvIGEgaGlnaGVyCisJbGV2ZWwgZGlyZWN0b3J5LiAgVGhpcyBvcHRpb24gaXMgb2ZmIGJ5IGRlZmF1bHQgd2hlbiBvbmx5CisJb25lIFVSTC9icmFuY2ggaXMgdHJhY2tlZCAoaXQgd291bGQgZG8gbGl0dGxlIGdvb2QpLgogCiAnZmV0Y2gnOjoKIAlGZXRjaCB1bmZldGNoZWQgcmV2aXNpb25zIGZyb20gdGhlIFN1YnZlcnNpb24gcmVtb3RlIHdlIGFyZQpAQCAtOTIsMzUgKzk4LDg5IEBACiAJLmdpdC9jb25maWcgZmlsZSBtYXkgYmUgc3BlY2lmaWVkIGFzIGFuIG9wdGlvbmFsIGNvbW1hbmQtbGluZQogCWFyZ3VtZW50LgogCistLWxvY2FsdGltZTs7CisJU3RvcmUgR2l0IGNvbW1pdCB0aW1lcyBpbiB0aGUgbG9jYWwgdGltZXpvbmUgaW5zdGVhZCBvZiBVVEMuICBUaGlzCisJbWFrZXMgJ2dpdCBsb2cnIChldmVuIHdpdGhvdXQgLS1kYXRlPWxvY2FsKSBzaG93IHRoZSBzYW1lIHRpbWVzCisJdGhhdCBgc3ZuIGxvZ2Agd291bGQgaW4gdGhlIGxvY2FsIHRpbWV6b25lLgorCistLXBhcmVudDs7CisJRmV0Y2ggb25seSBmcm9tIHRoZSBTVk4gcGFyZW50IG9mIHRoZSBjdXJyZW50IEhFQUQuCisrCitUaGlzIGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggaW50ZXJvcGVyYXRpbmcgd2l0aCB0aGUgU3VidmVyc2lvbgorcmVwb3NpdG9yeSB5b3UgY2xvbmVkIGZyb20sIGJ1dCBpZiB5b3Ugd2lzaCBmb3IgeW91ciBsb2NhbCBHaXQKK3JlcG9zaXRvcnkgdG8gYmUgYWJsZSB0byBpbnRlcm9wZXJhdGUgd2l0aCBzb21lb25lIGVsc2UncyBsb2NhbCBHaXQKK3JlcG9zaXRvcnksIGVpdGhlciBkb24ndCB1c2UgdGhpcyBvcHRpb24gb3IgeW91IHNob3VsZCBib3RoIHVzZSBpdCBpbgordGhlIHNhbWUgbG9jYWwgdGltZXpvbmUuCisKKy0taWdub3JlLXBhdGhzPTxyZWdleD47OworCVRoaXMgYWxsb3dzIG9uZSB0byBzcGVjaWZ5IGEgUGVybCByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB3aWxsCisJY2F1c2Ugc2tpcHBpbmcgb2YgYWxsIG1hdGNoaW5nIHBhdGhzIGZyb20gY2hlY2tvdXQgZnJvbSBTVk4uCisJVGhlICctLWlnbm9yZS1wYXRocycgb3B0aW9uIHNob3VsZCBtYXRjaCBmb3IgZXZlcnkgJ2ZldGNoJworCShpbmNsdWRpbmcgYXV0b21hdGljIGZldGNoZXMgZHVlIHRvICdjbG9uZScsICdkY29tbWl0JywKKwkncmViYXNlJywgZXRjKSBvbiBhIGdpdmVuIHJlcG9zaXRvcnkuCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4tcmVtb3RlLjxuYW1lPi5pZ25vcmUtcGF0aHMKKysKK0lmIHRoZSBpZ25vcmUtcGF0aHMgY29uZmlnIGtleSBpcyBzZXQgYW5kIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIGlzCithbHNvIGdpdmVuLCBib3RoIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2lsbCBiZSB1c2VkLgorKworRXhhbXBsZXM6CisrCistLQorU2tpcCAiZG9jKiIgZGlyZWN0b3J5IGZvciBldmVyeSBmZXRjaDs7CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0taWdub3JlLXBhdGhzPSJeZG9jIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NraXAgImJyYW5jaGVzIiBhbmQgInRhZ3MiIG9mIGZpcnN0IGxldmVsIGRpcmVjdG9yaWVzOzsKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS1pZ25vcmUtcGF0aHM9Il5bXi9dKy8oPzpicmFuY2hlc3x0YWdzKSIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0KKworLS11c2UtbG9nLWF1dGhvcjs7CisJV2hlbiByZXRyaWV2aW5nIHN2biBjb21taXRzIGludG8gZ2l0IChhcyBwYXJ0IG9mIGZldGNoLCByZWJhc2UsIG9yCisJZGNvbW1pdCBvcGVyYXRpb25zKSwgbG9vayBmb3IgdGhlIGZpcnN0IEZyb206IG9yIFNpZ25lZC1vZmYtYnk6IGxpbmUKKwlpbiB0aGUgbG9nIG1lc3NhZ2UgYW5kIHVzZSB0aGF0IGFzIHRoZSBhdXRob3Igc3RyaW5nLgorLS1hZGQtYXV0aG9yLWZyb207OworCVdoZW4gY29tbWl0dGluZyB0byBzdm4gZnJvbSBnaXQgKGFzIHBhcnQgb2YgY29tbWl0IG9yIGRjb21taXQKKwlvcGVyYXRpb25zKSwgaWYgdGhlIGV4aXN0aW5nIGxvZyBtZXNzYWdlIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIGEKKwlGcm9tOiBvciBTaWduZWQtb2ZmLWJ5OiBsaW5lLCBhcHBlbmQgYSBGcm9tOiBsaW5lIGJhc2VkIG9uIHRoZQorCWdpdCBjb21taXQncyBhdXRob3Igc3RyaW5nLiAgSWYgeW91IHVzZSB0aGlzLCB0aGVuIC0tdXNlLWxvZy1hdXRob3IKKwl3aWxsIHJldHJpZXZlIGEgdmFsaWQgYXV0aG9yIHN0cmluZyBmb3IgYWxsIGNvbW1pdHMuCisKICdjbG9uZSc6OgogCVJ1bnMgJ2luaXQnIGFuZCAnZmV0Y2gnLiAgSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhCiAJZGlyZWN0b3J5IGJhc2VkIG9uIHRoZSBiYXNlbmFtZSBvZiB0aGUgVVJMIHBhc3NlZCB0byBpdDsKIAlvciBpZiBhIHNlY29uZCBhcmd1bWVudCBpcyBwYXNzZWQ7IGl0IHdpbGwgY3JlYXRlIGEgZGlyZWN0b3J5CiAJYW5kIHdvcmsgd2l0aGluIHRoYXQuICBJdCBhY2NlcHRzIGFsbCBhcmd1bWVudHMgdGhhdCB0aGUKIAknaW5pdCcgYW5kICdmZXRjaCcgY29tbWFuZHMgYWNjZXB0OyB3aXRoIHRoZSBleGNlcHRpb24gb2YKLQknLS1mZXRjaC1hbGwnLiAgIEFmdGVyIGEgcmVwb3NpdG9yeSBpcyBjbG9uZWQsIHRoZSAnZmV0Y2gnCi0JY29tbWFuZCB3aWxsIGJlIGFibGUgdG8gdXBkYXRlIHJldmlzaW9ucyB3aXRob3V0IGFmZmVjdGluZwotCXRoZSB3b3JraW5nIHRyZWU7IGFuZCB0aGUgJ3JlYmFzZScgY29tbWFuZCB3aWxsIGJlIGFibGUKLQl0byB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSB3aXRoIHRoZSBsYXRlc3QgY2hhbmdlcy4KKwknLS1mZXRjaC1hbGwnIGFuZCAnLS1wYXJlbnQnLiAgQWZ0ZXIgYSByZXBvc2l0b3J5IGlzIGNsb25lZCwKKwl0aGUgJ2ZldGNoJyBjb21tYW5kIHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgcmV2aXNpb25zIHdpdGhvdXQKKwlhZmZlY3RpbmcgdGhlIHdvcmtpbmcgdHJlZTsgYW5kIHRoZSAncmViYXNlJyBjb21tYW5kIHdpbGwgYmUKKwlhYmxlIHRvIHVwZGF0ZSB0aGUgd29ya2luZyB0cmVlIHdpdGggdGhlIGxhdGVzdCBjaGFuZ2VzLgogCiAncmViYXNlJzo6CiAJVGhpcyBmZXRjaGVzIHJldmlzaW9ucyBmcm9tIHRoZSBTVk4gcGFyZW50IG9mIHRoZSBjdXJyZW50IEhFQUQKIAlhbmQgcmViYXNlcyB0aGUgY3VycmVudCAodW5jb21taXR0ZWQgdG8gU1ZOKSB3b3JrIGFnYWluc3QgaXQuCi0KLVRoaXMgd29ya3Mgc2ltaWxhcmx5IHRvIGBzdm4gdXBkYXRlYCBvciAnZ2l0LXB1bGwnIGV4Y2VwdCB0aGF0Ci1pdCBwcmVzZXJ2ZXMgbGluZWFyIGhpc3Rvcnkgd2l0aCAnZ2l0LXJlYmFzZScgaW5zdGVhZCBvZgotJ2dpdC1tZXJnZScgZm9yIGVhc2Ugb2YgZGNvbW1pdHRpbmcgd2l0aCAnZ2l0LXN2bicuCi0KLVRoaXMgYWNjZXB0cyBhbGwgb3B0aW9ucyB0aGF0ICdnaXQtc3ZuIGZldGNoJyBhbmQgJ2dpdC1yZWJhc2UnCisrCitUaGlzIHdvcmtzIHNpbWlsYXJseSB0byBgc3ZuIHVwZGF0ZWAgb3IgJ2dpdCBwdWxsJyBleGNlcHQgdGhhdAoraXQgcHJlc2VydmVzIGxpbmVhciBoaXN0b3J5IHdpdGggJ2dpdCByZWJhc2UnIGluc3RlYWQgb2YKKydnaXQgbWVyZ2UnIGZvciBlYXNlIG9mIGRjb21taXR0aW5nIHdpdGggJ2dpdCBzdm4nLgorKworVGhpcyBhY2NlcHRzIGFsbCBvcHRpb25zIHRoYXQgJ2dpdCBzdm4gZmV0Y2gnIGFuZCAnZ2l0IHJlYmFzZScKIGFjY2VwdC4gIEhvd2V2ZXIsICctLWZldGNoLWFsbCcgb25seSBmZXRjaGVzIGZyb20gdGhlIGN1cnJlbnQKIFtzdm4tcmVtb3RlXSwgYW5kIG5vdCBhbGwgW3N2bi1yZW1vdGVdIGRlZmluaXRpb25zLgotCi1MaWtlICdnaXQtcmViYXNlJzsgdGhpcyByZXF1aXJlcyB0aGF0IHRoZSB3b3JraW5nIHRyZWUgYmUgY2xlYW4KKysKK0xpa2UgJ2dpdCByZWJhc2UnOyB0aGlzIHJlcXVpcmVzIHRoYXQgdGhlIHdvcmtpbmcgdHJlZSBiZSBjbGVhbgogYW5kIGhhdmUgbm8gdW5jb21taXR0ZWQgY2hhbmdlcy4KIAogLWw7OwogLS1sb2NhbDs7Ci0JRG8gbm90IGZldGNoIHJlbW90ZWx5OyBvbmx5IHJ1biAnZ2l0LXJlYmFzZScgYWdhaW5zdCB0aGUKKwlEbyBub3QgZmV0Y2ggcmVtb3RlbHk7IG9ubHkgcnVuICdnaXQgcmViYXNlJyBhZ2FpbnN0IHRoZQogCWxhc3QgZmV0Y2hlZCBjb21taXQgZnJvbSB0aGUgdXBzdHJlYW0gU1ZOLgogCiAnZGNvbW1pdCc6OgpAQCAtMTI4LDExICsxODgsMTIgQEAKIAlyZXBvc2l0b3J5LCBhbmQgdGhlbiByZWJhc2Ugb3IgcmVzZXQgKGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yCiAJbm90IHRoZXJlIGlzIGEgZGlmZiBiZXR3ZWVuIFNWTiBhbmQgaGVhZCkuICBUaGlzIHdpbGwgY3JlYXRlCiAJYSByZXZpc2lvbiBpbiBTVk4gZm9yIGVhY2ggY29tbWl0IGluIGdpdC4KLQlJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBydW4gJ2dpdC1zdm4nIGZldGNoIGFuZCByZWJhc2UgKG5vdAorCUl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHJ1biAnZ2l0IHN2bicgZmV0Y2ggYW5kIHJlYmFzZSAobm90CiAJcHVsbCBvciBtZXJnZSkgeW91ciBjb21taXRzIGFnYWluc3QgdGhlIGxhdGVzdCBjaGFuZ2VzIGluIHRoZQogCVNWTiByZXBvc2l0b3J5LgotCUFuIG9wdGlvbmFsIGNvbW1hbmQtbGluZSBhcmd1bWVudCBtYXkgYmUgc3BlY2lmaWVkIGFzIGFuCi0JYWx0ZXJuYXRpdmUgdG8gSEVBRC4KKwlBbiBvcHRpb25hbCByZXZpc2lvbiBvciBicmFuY2ggYXJndW1lbnQgbWF5IGJlIHNwZWNpZmllZCwgYW5kCisJY2F1c2VzICdnaXQgc3ZuJyB0byBkbyBhbGwgd29yayBvbiB0aGF0IHJldmlzaW9uL2JyYW5jaAorCWluc3RlYWQgb2YgSEVBRC4KIAlUaGlzIGlzIGFkdmFudGFnZW91cyBvdmVyICdzZXQtdHJlZScgKGJlbG93KSBiZWNhdXNlIGl0IHByb2R1Y2VzCiAJY2xlYW5lciwgbW9yZSBsaW5lYXIgaGlzdG9yeS4KICsKQEAgLTE0MCwxNCArMjAxLDE3IEBACiAJQWZ0ZXIgY29tbWl0dGluZywgZG8gbm90IHJlYmFzZSBvciByZXNldC4KIC0tY29tbWl0LXVybCA8VVJMPjs7CiAJQ29tbWl0IHRvIHRoaXMgU1ZOIFVSTCAodGhlIGZ1bGwgcGF0aCkuICBUaGlzIGlzIGludGVuZGVkIHRvCi0JYWxsb3cgZXhpc3RpbmcgZ2l0LXN2biByZXBvc2l0b3JpZXMgY3JlYXRlZCB3aXRoIG9uZSB0cmFuc3BvcnQKKwlhbGxvdyBleGlzdGluZyAnZ2l0IHN2bicgcmVwb3NpdG9yaWVzIGNyZWF0ZWQgd2l0aCBvbmUgdHJhbnNwb3J0CiAJbWV0aG9kIChlLmcuIGBzdm46Ly9gIG9yIGBodHRwOi8vYCBmb3IgYW5vbnltb3VzIHJlYWQpIHRvIGJlCiAJcmV1c2VkIGlmIGEgdXNlciBpcyBsYXRlciBnaXZlbiBhY2Nlc3MgdG8gYW4gYWx0ZXJuYXRlIHRyYW5zcG9ydAogCW1ldGhvZCAoZS5nLiBgc3ZuK3NzaDovL2Agb3IgYGh0dHBzOi8vYCkgZm9yIGNvbW1pdC4KLQotCVVzaW5nIHRoaXMgb3B0aW9uIGZvciBhbnkgb3RoZXIgcHVycG9zZSAoZG9uJ3QgYXNrKQotCWlzIHZlcnkgc3Ryb25nbHkgZGlzY291cmFnZWQuCi0tLQorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLXJlbW90ZS48bmFtZT4uY29tbWl0dXJsCitjb25maWcga2V5OiBzdm4uY29tbWl0dXJsIChvdmVyd3JpdGVzIGFsbCBzdm4tcmVtb3RlLjxuYW1lPi5jb21taXR1cmwgb3B0aW9ucykKKysKK1VzaW5nIHRoaXMgb3B0aW9uIGZvciBhbnkgb3RoZXIgcHVycG9zZSAoZG9uJ3QgYXNrKSBpcyB2ZXJ5IHN0cm9uZ2x5CitkaXNjb3VyYWdlZC4KIAogJ2JyYW5jaCc6OgogCUNyZWF0ZSBhIGJyYW5jaCBpbiB0aGUgU1ZOIHJlcG9zaXRvcnkuCkBAIC0xNjEsNiArMjI1LDIwIEBACiAJQ3JlYXRlIGEgdGFnIGJ5IHVzaW5nIHRoZSB0YWdzX3N1YmRpciBpbnN0ZWFkIG9mIHRoZSBicmFuY2hlc19zdWJkaXIKIAlzcGVjaWZpZWQgZHVyaW5nIGdpdCBzdm4gaW5pdC4KIAorLWQ7OworLS1kZXN0aW5hdGlvbjs7CisJSWYgbW9yZSB0aGFuIG9uZSAtLWJyYW5jaGVzIChvciAtLXRhZ3MpIG9wdGlvbiB3YXMgZ2l2ZW4gdG8gdGhlICdpbml0JworCW9yICdjbG9uZScgY29tbWFuZCwgeW91IG11c3QgcHJvdmlkZSB0aGUgbG9jYXRpb24gb2YgdGhlIGJyYW5jaCAob3IKKwl0YWcpIHlvdSB3aXNoIHRvIGNyZWF0ZSBpbiB0aGUgU1ZOIHJlcG9zaXRvcnkuICBUaGUgdmFsdWUgb2YgdGhpcworCW9wdGlvbiBtdXN0IG1hdGNoIG9uZSBvZiB0aGUgcGF0aHMgc3BlY2lmaWVkIGJ5IGEgLS1icmFuY2hlcyAob3IKKwktLXRhZ3MpIG9wdGlvbi4gIFlvdSBjYW4gc2VlIHRoZXNlIHBhdGhzIHdpdGggdGhlIGNvbW1hbmRzCisrCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc3ZuLXJlbW90ZS48bmFtZT4uYnJhbmNoZXMKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCBzdm4tcmVtb3RlLjxuYW1lPi50YWdzCisrCit3aGVyZSA8bmFtZT4gaXMgdGhlIG5hbWUgb2YgdGhlIFNWTiByZXBvc2l0b3J5IGFzIHNwZWNpZmllZCBieSB0aGUgLVIgb3B0aW9uIHRvCisnaW5pdCcgKG9yICJzdm4iIGJ5IGRlZmF1bHQpLgorCiAndGFnJzo6CiAJQ3JlYXRlIGEgdGFnIGluIHRoZSBTVk4gcmVwb3NpdG9yeS4gVGhpcyBpcyBhIHNob3J0aGFuZCBmb3IKIAknYnJhbmNoIC10Jy4KQEAgLTE3MiwxMCArMjUwLDEyIEBACiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGZyb20gYHN2biBsb2cnIGFyZSBzdXBwb3J0ZWQ6CiArCiAtLQorLXIgPG4+Wzo8bj5dOzsKIC0tcmV2aXNpb249PG4+Wzo8bj5dOzsKIAlpcyBzdXBwb3J0ZWQsIG5vbi1udW1lcmljIGFyZ3MgYXJlIG5vdDoKIAlIRUFELCBORVhULCBCQVNFLCBQUkVWLCBldGMgLi4uCi0tdi8tLXZlcmJvc2U7OworLXY7OworLS12ZXJib3NlOzsKIAlpdCdzIG5vdCBjb21wbGV0ZWx5IGNvbXBhdGlibGUgd2l0aCB0aGUgLS12ZXJib3NlCiAJb3V0cHV0IGluIHN2biBsb2csIGJ1dCByZWFzb25hYmx5IGNsb3NlLgogLS1saW1pdD08bj47OwpAQCAtMTk4LDcgKzI3OCw3IEBACiBjbGllbnQgY29udmVydHMgdGhlIFVUQyB0aW1lIHRvIHRoZSBsb2NhbCB0aW1lIChvciBiYXNlZCBvbiB0aGUgVFo9CiBlbnZpcm9ubWVudCkuIFRoaXMgY29tbWFuZCBoYXMgdGhlIHNhbWUgYmVoYXZpb3VyLgogKwotQW55IG90aGVyIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQtbG9nJworQW55IG90aGVyIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgbG9nJwogCiAnYmxhbWUnOjoKICAgICAgICBTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUuIFRoZQpAQCAtMjA2LDE1ICsyODYsMTQgQEAKICAgICAgICBgc3ZuIGJsYW1lJyBieSBkZWZhdWx0LiBMaWtlIHRoZSBTVk4gYmxhbWUgY29tbWFuZCwKICAgICAgICBsb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIGNvcHkgYXJlIGlnbm9yZWQ7CiAgICAgICAgdGhlIHZlcnNpb24gb2YgdGhlIGZpbGUgaW4gdGhlIEhFQUQgcmV2aXNpb24gaXMgYW5ub3RhdGVkLiBVbmtub3duCi0gICAgICAgYXJndW1lbnRzIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdC1ibGFtZScuCisgICAgICAgYXJndW1lbnRzIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdCBibGFtZScuCiArCiAtLWdpdC1mb3JtYXQ7OwotCVByb2R1Y2Ugb3V0cHV0IGluIHRoZSBzYW1lIGZvcm1hdCBhcyAnZ2l0LWJsYW1lJywgYnV0IHdpdGgKKwlQcm9kdWNlIG91dHB1dCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgJ2dpdCBibGFtZScsIGJ1dCB3aXRoCiAJU1ZOIHJldmlzaW9uIG51bWJlcnMgaW5zdGVhZCBvZiBnaXQgY29tbWl0IGhhc2hlcy4gSW4gdGhpcyBtb2RlLAogCWNoYW5nZXMgdGhhdCBoYXZlbid0IGJlZW4gY29tbWl0dGVkIHRvIFNWTiAoaW5jbHVkaW5nIGxvY2FsCiAJd29ya2luZy1jb3B5IGVkaXRzKSBhcmUgc2hvd24gYXMgcmV2aXNpb24gMC4KIAotLS0KICdmaW5kLXJldic6OgogCVdoZW4gZ2l2ZW4gYW4gU1ZOIHJldmlzaW9uIG51bWJlciBvZiB0aGUgZm9ybSAnck4nLCByZXR1cm5zIHRoZQogCWNvcnJlc3BvbmRpbmcgZ2l0IGNvbW1pdCBoYXNoICh0aGlzIGNhbiBvcHRpb25hbGx5IGJlIGZvbGxvd2VkIGJ5IGEKQEAgLTIyOCw3ICszMDcsNyBAQAogCWFic29sdXRlbHkgbm8gYXR0ZW1wdHMgdG8gZG8gcGF0Y2hpbmcgd2hlbiBjb21taXR0aW5nIHRvIFNWTiwgaXQKIAlzaW1wbHkgb3ZlcndyaXRlcyBmaWxlcyB3aXRoIHRob3NlIHNwZWNpZmllZCBpbiB0aGUgdHJlZSBvcgogCWNvbW1pdC4gIEFsbCBtZXJnaW5nIGlzIGFzc3VtZWQgdG8gaGF2ZSB0YWtlbiBwbGFjZQotCWluZGVwZW5kZW50bHkgb2YgJ2dpdC1zdm4nIGZ1bmN0aW9ucy4KKwlpbmRlcGVuZGVudGx5IG9mICdnaXQgc3ZuJyBmdW5jdGlvbnMuCiAKICdjcmVhdGUtaWdub3JlJzo6CiAJUmVjdXJzaXZlbHkgZmluZHMgdGhlIHN2bjppZ25vcmUgcHJvcGVydHkgb24gZGlyZWN0b3JpZXMgYW5kCkBAIC0yNDMsMTIgKzMyMiwxMiBAQAogCiAnY29tbWl0LWRpZmYnOjoKIAlDb21taXRzIHRoZSBkaWZmIG9mIHR3byB0cmVlLWlzaCBhcmd1bWVudHMgZnJvbSB0aGUKLQljb21tYW5kLWxpbmUuICBUaGlzIGNvbW1hbmQgZG9lcyBub3QgcmVseSBvbiBiZWluZyBpbnNpZGUgYW4gYGdpdC1zdm4KKwljb21tYW5kLWxpbmUuICBUaGlzIGNvbW1hbmQgZG9lcyBub3QgcmVseSBvbiBiZWluZyBpbnNpZGUgYW4gYGdpdCBzdm4KIAlpbml0YC1lZCByZXBvc2l0b3J5LiAgVGhpcyBjb21tYW5kIHRha2VzIHRocmVlIGFyZ3VtZW50cywgKGEpIHRoZQogCW9yaWdpbmFsIHRyZWUgdG8gZGlmZiBhZ2FpbnN0LCAoYikgdGhlIG5ldyB0cmVlIHJlc3VsdCwgKGMpIHRoZQogCVVSTCBvZiB0aGUgdGFyZ2V0IFN1YnZlcnNpb24gcmVwb3NpdG9yeS4gIFRoZSBmaW5hbCBhcmd1bWVudAotCShVUkwpIG1heSBiZSBvbWl0dGVkIGlmIHlvdSBhcmUgd29ya2luZyBmcm9tIGEgJ2dpdC1zdm4nLWF3YXJlCi0JcmVwb3NpdG9yeSAodGhhdCBoYXMgYmVlbiBgaW5pdGAtZWQgd2l0aCAnZ2l0LXN2bicpLgorCShVUkwpIG1heSBiZSBvbWl0dGVkIGlmIHlvdSBhcmUgd29ya2luZyBmcm9tIGEgJ2dpdCBzdm4nLWF3YXJlCisJcmVwb3NpdG9yeSAodGhhdCBoYXMgYmVlbiBgaW5pdGAtZWQgd2l0aCAnZ2l0IHN2bicpLgogCVRoZSAtcjxyZXZpc2lvbj4gb3B0aW9uIGlzIHJlcXVpcmVkIGZvciB0aGlzLgogCiAnaW5mbyc6OgpAQCAtMjcwLDEwNyArMzQ5LDE3MCBAQAogCVNob3dzIHRoZSBTdWJ2ZXJzaW9uIGV4dGVybmFscy4gIFVzZSAtci8tLXJldmlzaW9uIHRvIHNwZWNpZnkgYQogCXNwZWNpZmljIHJldmlzaW9uLgogCi0tLQorJ2djJzo6CisJQ29tcHJlc3MgJEdJVF9ESVIvc3ZuLzxyZWZuYW1lPi91bmhhbmRsZWQubG9nIGZpbGVzIGluIC5naXQvc3ZuCisJYW5kIHJlbW92ZSAkR0lUX0RJUi9zdm4vPHJlZm5hbWU+aW5kZXggZmlsZXMgaW4gLmdpdC9zdm4uCisKKydyZXNldCc6OgorCVVuZG9lcyB0aGUgZWZmZWN0cyBvZiAnZmV0Y2gnIGJhY2sgdG8gdGhlIHNwZWNpZmllZCByZXZpc2lvbi4KKwlUaGlzIGFsbG93cyB5b3UgdG8gcmUtJ2ZldGNoJyBhbiBTVk4gcmV2aXNpb24uICBOb3JtYWxseSB0aGUKKwljb250ZW50cyBvZiBhbiBTVk4gcmV2aXNpb24gc2hvdWxkIG5ldmVyIGNoYW5nZSBhbmQgJ3Jlc2V0JworCXNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LiAgSG93ZXZlciwgaWYgU1ZOIHBlcm1pc3Npb25zIGNoYW5nZSwKKwlvciBpZiB5b3UgYWx0ZXIgeW91ciAtLWlnbm9yZS1wYXRocyBvcHRpb24sIGEgJ2ZldGNoJyBtYXkgZmFpbAorCXdpdGggIm5vdCBmb3VuZCBpbiBjb21taXQiIChmaWxlIG5vdCBwcmV2aW91c2x5IHZpc2libGUpIG9yCisJImNoZWNrc3VtIG1pc21hdGNoIiAobWlzc2VkIGEgbW9kaWZpY2F0aW9uKS4gIElmIHRoZSBwcm9ibGVtCisJZmlsZSBjYW5ub3QgYmUgaWdub3JlZCBmb3JldmVyICh3aXRoIC0taWdub3JlLXBhdGhzKSB0aGUgb25seQorCXdheSB0byByZXBhaXIgdGhlIHJlcG8gaXMgdG8gdXNlICdyZXNldCcuCisrCitPbmx5IHRoZSByZXZfbWFwIGFuZCByZWZzL3JlbW90ZXMvZ2l0LXN2biBhcmUgY2hhbmdlZC4gIEZvbGxvdyAncmVzZXQnCit3aXRoIGEgJ2ZldGNoJyBhbmQgdGhlbiAnZ2l0IHJlc2V0JyBvciAnZ2l0IHJlYmFzZScgdG8gbW92ZSBsb2NhbAorYnJhbmNoZXMgb250byB0aGUgbmV3IHRyZWUuCisKKy1yIDxuPjs7CistLXJldmlzaW9uPTxuPjs7CisJU3BlY2lmeSB0aGUgbW9zdCByZWNlbnQgcmV2aXNpb24gdG8ga2VlcC4gIEFsbCBsYXRlciByZXZpc2lvbnMKKwlhcmUgZGlzY2FyZGVkLgorLXA7OworLS1wYXJlbnQ7OworCURpc2NhcmQgdGhlIHNwZWNpZmllZCByZXZpc2lvbiBhcyB3ZWxsLCBrZWVwaW5nIHRoZSBuZWFyZXN0CisJcGFyZW50IGluc3RlYWQuCitFeGFtcGxlOjs7CitBc3N1bWUgeW91IGhhdmUgbG9jYWwgY2hhbmdlcyBpbiAibWFzdGVyIiwgYnV0IHlvdSBuZWVkIHRvIHJlZmV0Y2ggInIyIi4KKysKKy0tLS0tLS0tLS0tLQorICAgIHIxLS0tcjItLS1yMyByZW1vdGVzL2dpdC1zdm4KKyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIEEtLS1CIG1hc3RlcgorLS0tLS0tLS0tLS0tCisrCitGaXggdGhlIGlnbm9yZS1wYXRocyBvciBTVk4gcGVybWlzc2lvbnMgcHJvYmxlbSB0aGF0IGNhdXNlZCAicjIiIHRvCitiZSBpbmNvbXBsZXRlIGluIHRoZSBmaXJzdCBwbGFjZS4gIFRoZW46CisrCitbdmVyc2VdCitnaXQgc3ZuIHJlc2V0IC1yMiAtcAorZ2l0IHN2biBmZXRjaAorKworLS0tLS0tLS0tLS0tCisgICAgcjEtLS1yMictLXIzJyByZW1vdGVzL2dpdC1zdm4KKyAgICAgIFwKKyAgICAgICByMi0tLXIzLS0tQS0tLUIgbWFzdGVyCistLS0tLS0tLS0tLS0KKysKK1RoZW4gZml4dXAgIm1hc3RlciIgd2l0aCAnZ2l0IHJlYmFzZScuCitEbyBOT1QgdXNlICdnaXQgbWVyZ2UnIG9yIHlvdXIgaGlzdG9yeSB3aWxsIG5vdCBiZSBjb21wYXRpYmxlIHdpdGggYQorZnV0dXJlICdkY29tbWl0JyEKKysKK1t2ZXJzZV0KK2dpdCByZWJhc2UgLS1vbnRvIHJlbW90ZXMvZ2l0LXN2biBBXiBtYXN0ZXIKKysKKy0tLS0tLS0tLS0tLQorICAgIHIxLS0tcjInLS1yMycgcmVtb3Rlcy9naXQtc3ZuCisgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICBBJy0tQicgbWFzdGVyCistLS0tLS0tLS0tLS0KIAogT1BUSU9OUwogLS0tLS0tLQotLS0KIAogLS1zaGFyZWRbPXtmYWxzZXx0cnVlfHVtYXNrfGdyb3VwfGFsbHx3b3JsZHxldmVyeWJvZHl9XTo6CiAtLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+OjoKIAlPbmx5IHVzZWQgd2l0aCB0aGUgJ2luaXQnIGNvbW1hbmQuCi0JVGhlc2UgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0LWluaXQnLgorCVRoZXNlIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdCBpbml0Jy4KIAogLXIgPEFSRz46OgogLS1yZXZpc2lvbiA8QVJHPjo6Ci0KLVVzZWQgd2l0aCB0aGUgJ2ZldGNoJyBjb21tYW5kLgotCisJICAgVXNlZCB3aXRoIHRoZSAnZmV0Y2gnIGNvbW1hbmQuCisrCiBUaGlzIGFsbG93cyByZXZpc2lvbiByYW5nZXMgZm9yIHBhcnRpYWwvY2F1dGVyaXplZCBoaXN0b3J5CiB0byBiZSBzdXBwb3J0ZWQuICAkTlVNQkVSLCAkTlVNQkVSMTokTlVNQkVSMiAobnVtZXJpYyByYW5nZXMpLAogJE5VTUJFUjpIRUFELCBhbmQgQkFTRTokTlVNQkVSIGFyZSBhbGwgc3VwcG9ydGVkLgotCisrCiBUaGlzIGNhbiBhbGxvdyB5b3UgdG8gbWFrZSBwYXJ0aWFsIG1pcnJvcnMgd2hlbiBydW5uaW5nIGZldGNoOwogYnV0IGlzIGdlbmVyYWxseSBub3QgcmVjb21tZW5kZWQgYmVjYXVzZSBoaXN0b3J5IHdpbGwgYmUgc2tpcHBlZAogYW5kIGxvc3QuCiAKIC06OgogLS1zdGRpbjo6Ci0KLU9ubHkgdXNlZCB3aXRoIHRoZSAnc2V0LXRyZWUnIGNvbW1hbmQuCi0KKwlPbmx5IHVzZWQgd2l0aCB0aGUgJ3NldC10cmVlJyBjb21tYW5kLgorKwogUmVhZCBhIGxpc3Qgb2YgY29tbWl0cyBmcm9tIHN0ZGluIGFuZCBjb21taXQgdGhlbSBpbiByZXZlcnNlCiBvcmRlci4gIE9ubHkgdGhlIGxlYWRpbmcgc2hhMSBpcyByZWFkIGZyb20gZWFjaCBsaW5lLCBzbwotJ2dpdC1yZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lJyBvdXRwdXQgY2FuIGJlIHVzZWQuCisnZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUnIG91dHB1dCBjYW4gYmUgdXNlZC4KIAogLS1ybWRpcjo6Ci0KLU9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdzZXQtdHJlZScgYW5kICdjb21taXQtZGlmZicgY29tbWFuZHMuCi0KKwlPbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnLCAnc2V0LXRyZWUnIGFuZCAnY29tbWl0LWRpZmYnIGNvbW1hbmRzLgorKwogUmVtb3ZlIGRpcmVjdG9yaWVzIGZyb20gdGhlIFNWTiB0cmVlIGlmIHRoZXJlIGFyZSBubyBmaWxlcyBsZWZ0CiBiZWhpbmQuICBTVk4gY2FuIHZlcnNpb24gZW1wdHkgZGlyZWN0b3JpZXMsIGFuZCB0aGV5IGFyZSBub3QKIHJlbW92ZWQgYnkgZGVmYXVsdCBpZiB0aGVyZSBhcmUgbm8gZmlsZXMgbGVmdCBpbiB0aGVtLiAgZ2l0CiBjYW5ub3QgdmVyc2lvbiBlbXB0eSBkaXJlY3Rvcmllcy4gIEVuYWJsaW5nIHRoaXMgZmxhZyB3aWxsIG1ha2UKIHRoZSBjb21taXQgdG8gU1ZOIGFjdCBsaWtlIGdpdC4KLQorKworW3ZlcnNlXQogY29uZmlnIGtleTogc3ZuLnJtZGlyCiAKIC1lOjoKIC0tZWRpdDo6Ci0KLU9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdzZXQtdHJlZScgYW5kICdjb21taXQtZGlmZicgY29tbWFuZHMuCi0KKwlPbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnLCAnc2V0LXRyZWUnIGFuZCAnY29tbWl0LWRpZmYnIGNvbW1hbmRzLgorKwogRWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmcgdG8gU1ZOLiAgVGhpcyBpcyBvZmYgYnkKIGRlZmF1bHQgZm9yIG9iamVjdHMgdGhhdCBhcmUgY29tbWl0cywgYW5kIGZvcmNlZCBvbiB3aGVuIGNvbW1pdHRpbmcKIHRyZWUgb2JqZWN0cy4KLQorKworW3ZlcnNlXQogY29uZmlnIGtleTogc3ZuLmVkaXQKIAogLWw8bnVtPjo6CiAtLWZpbmQtY29waWVzLWhhcmRlcjo6Ci0KLU9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdzZXQtdHJlZScgYW5kICdjb21taXQtZGlmZicgY29tbWFuZHMuCi0KLVRoZXkgYXJlIGJvdGggcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQtZGlmZi10cmVlJzsgc2VlCisJT25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JywgJ3NldC10cmVlJyBhbmQgJ2NvbW1pdC1kaWZmJyBjb21tYW5kcy4KKysKK1RoZXkgYXJlIGJvdGggcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgZGlmZi10cmVlJzsgc2VlCiBsaW5rZ2l0OmdpdC1kaWZmLXRyZWVbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KKysKIFt2ZXJzZV0KIGNvbmZpZyBrZXk6IHN2bi5sCiBjb25maWcga2V5OiBzdm4uZmluZGNvcGllc2hhcmRlcgogCiAtQTxmaWxlbmFtZT46OgogLS1hdXRob3JzLWZpbGU9PGZpbGVuYW1lPjo6Ci0KLVN5bnRheCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGZpbGUgdXNlZCBieSAnZ2l0LWN2c2ltcG9ydCc6Ci0KKwlTeW50YXggaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBmaWxlIHVzZWQgYnkgJ2dpdCBjdnNpbXBvcnQnOgorKwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJbG9naW5uYW1lID0gSm9lIFVzZXIgPHVzZXJAZXhhbXBsZS5jb20+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkIGFuZCAnZ2l0LXN2bicgZW5jb3VudGVycyBhbiBTVk4KLWNvbW1pdHRlciBuYW1lIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGF1dGhvcnMtZmlsZSwgJ2dpdC1zdm4nCisrCitJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgYW5kICdnaXQgc3ZuJyBlbmNvdW50ZXJzIGFuIFNWTgorY29tbWl0dGVyIG5hbWUgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgYXV0aG9ycy1maWxlLCAnZ2l0IHN2bicKIHdpbGwgYWJvcnQgb3BlcmF0aW9uLiBUaGUgdXNlciB3aWxsIHRoZW4gaGF2ZSB0byBhZGQgdGhlCi1hcHByb3ByaWF0ZSBlbnRyeS4gIFJlLXJ1bm5pbmcgdGhlIHByZXZpb3VzICdnaXQtc3ZuJyBjb21tYW5kCithcHByb3ByaWF0ZSBlbnRyeS4gIFJlLXJ1bm5pbmcgdGhlIHByZXZpb3VzICdnaXQgc3ZuJyBjb21tYW5kCiBhZnRlciB0aGUgYXV0aG9ycy1maWxlIGlzIG1vZGlmaWVkIHNob3VsZCBjb250aW51ZSBvcGVyYXRpb24uCi0KKysKK1t2ZXJzZV0KIGNvbmZpZyBrZXk6IHN2bi5hdXRob3JzZmlsZQogCistLWF1dGhvcnMtcHJvZz08ZmlsZW5hbWU+OjoKKwlJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGZvciBlYWNoIFNWTiBjb21taXR0ZXIgbmFtZSB0aGF0CisJZG9lcyBub3QgZXhpc3QgaW4gdGhlIGF1dGhvcnMgZmlsZSwgdGhlIGdpdmVuIGZpbGUgaXMgZXhlY3V0ZWQKKwl3aXRoIHRoZSBjb21taXR0ZXIgbmFtZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQuICBUaGUgcHJvZ3JhbSBpcworCWV4cGVjdGVkIHRvIHJldHVybiBhIHNpbmdsZSBsaW5lIG9mIHRoZSBmb3JtICJOYW1lIDxlbWFpbD4iLAorCXdoaWNoIHdpbGwgYmUgdHJlYXRlZCBhcyBpZiBpbmNsdWRlZCBpbiB0aGUgYXV0aG9ycyBmaWxlLgorCiAtcTo6CiAtLXF1aWV0OjoKLQlNYWtlICdnaXQtc3ZuJyBsZXNzIHZlcmJvc2UuCisJTWFrZSAnZ2l0IHN2bicgbGVzcyB2ZXJib3NlLiBTcGVjaWZ5IGEgc2Vjb25kIHRpbWUgdG8gbWFrZSBpdAorCWV2ZW4gbGVzcyB2ZXJib3NlLgogCiAtLXJlcGFja1s9PG4+XTo6CiAtLXJlcGFjay1mbGFncz08ZmxhZ3M+OjoKLQotVGhlc2Ugc2hvdWxkIGhlbHAga2VlcCBkaXNrIHVzYWdlIHNhbmUgZm9yIGxhcmdlIGZldGNoZXMKLXdpdGggbWFueSByZXZpc2lvbnMuCi0KKwlUaGVzZSBzaG91bGQgaGVscCBrZWVwIGRpc2sgdXNhZ2Ugc2FuZSBmb3IgbGFyZ2UgZmV0Y2hlcyB3aXRoCisJbWFueSByZXZpc2lvbnMuCisrCiAtLXJlcGFjayB0YWtlcyBhbiBvcHRpb25hbCBhcmd1bWVudCBmb3IgdGhlIG51bWJlciBvZiByZXZpc2lvbnMKIHRvIGZldGNoIGJlZm9yZSByZXBhY2tpbmcuICBUaGlzIGRlZmF1bHRzIHRvIHJlcGFja2luZyBldmVyeQogMTAwMCBjb21taXRzIGZldGNoZWQgaWYgbm8gYXJndW1lbnQgaXMgc3BlY2lmaWVkLgotCi0tLXJlcGFjay1mbGFncyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQtcmVwYWNrJy4KLQorKworLS1yZXBhY2stZmxhZ3MgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IHJlcGFjaycuCisrCiBbdmVyc2VdCiBjb25maWcga2V5OiBzdm4ucmVwYWNrCiBjb25maWcga2V5OiBzdm4ucmVwYWNrZmxhZ3MKQEAgLTM3OSw0MSArNTIxLDM2IEBACiAtLW1lcmdlOjoKIC1zPHN0cmF0ZWd5Pjo6CiAtLXN0cmF0ZWd5PTxzdHJhdGVneT46OgotCi1UaGVzZSBhcmUgb25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JyBhbmQgJ3JlYmFzZScgY29tbWFuZHMuCi0KLVBhc3NlZCBkaXJlY3RseSB0byAnZ2l0LXJlYmFzZScgd2hlbiB1c2luZyAnZGNvbW1pdCcgaWYgYQotJ2dpdC1yZXNldCcgY2Fubm90IGJlIHVzZWQgKHNlZSAnZGNvbW1pdCcpLgorCVRoZXNlIGFyZSBvbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnIGFuZCAncmViYXNlJyBjb21tYW5kcy4KKysKK1Bhc3NlZCBkaXJlY3RseSB0byAnZ2l0IHJlYmFzZScgd2hlbiB1c2luZyAnZGNvbW1pdCcgaWYgYQorJ2dpdCByZXNldCcgY2Fubm90IGJlIHVzZWQgKHNlZSAnZGNvbW1pdCcpLgogCiAtbjo6CiAtLWRyeS1ydW46OgotCi1UaGlzIGNhbiBiZSB1c2VkIHdpdGggdGhlICdkY29tbWl0JywgJ3JlYmFzZScsICdicmFuY2gnIGFuZCAndGFnJwotY29tbWFuZHMuCi0KKwlUaGlzIGNhbiBiZSB1c2VkIHdpdGggdGhlICdkY29tbWl0JywgJ3JlYmFzZScsICdicmFuY2gnIGFuZAorCSd0YWcnIGNvbW1hbmRzLgorKwogRm9yICdkY29tbWl0JywgcHJpbnQgb3V0IHRoZSBzZXJpZXMgb2YgZ2l0IGFyZ3VtZW50cyB0aGF0IHdvdWxkIHNob3cKIHdoaWNoIGRpZmZzIHdvdWxkIGJlIGNvbW1pdHRlZCB0byBTVk4uCi0KKysKIEZvciAncmViYXNlJywgZGlzcGxheSB0aGUgbG9jYWwgYnJhbmNoIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXBzdHJlYW0gc3ZuCiByZXBvc2l0b3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHRoZSBVUkwgb2Ygc3ZuCiByZXBvc2l0b3J5IHRoYXQgd2lsbCBiZSBmZXRjaGVkIGZyb20uCi0KKysKIEZvciAnYnJhbmNoJyBhbmQgJ3RhZycsIGRpc3BsYXkgdGhlIHVybHMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGNvcHlpbmcgd2hlbgogY3JlYXRpbmcgdGhlIGJyYW5jaCBvciB0YWcuCiAKLS0tCiAKIEFEVkFOQ0VEIE9QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0KLS0tCiAKIC1pPEdJVF9TVk5fSUQ+OjoKIC0taWQgPEdJVF9TVk5fSUQ+OjoKLQotVGhpcyBzZXRzIEdJVF9TVk5fSUQgKGluc3RlYWQgb2YgdXNpbmcgdGhlIGVudmlyb25tZW50KS4gIFRoaXMKLWFsbG93cyB0aGUgdXNlciB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCByZWZuYW1lIHRvIGZldGNoIGZyb20KLXdoZW4gdHJhY2tpbmcgYSBzaW5nbGUgVVJMLiAgVGhlICdsb2cnIGFuZCAnZGNvbW1pdCcgY29tbWFuZHMKLW5vIGxvbmdlciByZXF1aXJlIHRoaXMgc3dpdGNoIGFzIGFuIGFyZ3VtZW50LgorCVRoaXMgc2V0cyBHSVRfU1ZOX0lEIChpbnN0ZWFkIG9mIHVzaW5nIHRoZSBlbnZpcm9ubWVudCkuICBUaGlzCisJYWxsb3dzIHRoZSB1c2VyIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHJlZm5hbWUgdG8gZmV0Y2ggZnJvbQorCXdoZW4gdHJhY2tpbmcgYSBzaW5nbGUgVVJMLiAgVGhlICdsb2cnIGFuZCAnZGNvbW1pdCcgY29tbWFuZHMKKwlubyBsb25nZXIgcmVxdWlyZSB0aGlzIHN3aXRjaCBhcyBhbiBhcmd1bWVudC4KIAogLVI8cmVtb3RlIG5hbWU+OjoKIC0tc3ZuLXJlbW90ZSA8cmVtb3RlIG5hbWU+OjoKQEAgLTQyNywzMyArNTY0LDMwIEBACiAJc3RhcnRlZCB0cmFja2luZyBhIGJyYW5jaCBhbmQgbmV2ZXIgdHJhY2tlZCB0aGUgdHJ1bmsgaXQgd2FzCiAJZGVzY2VuZGVkIGZyb20uIFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHVzZQogCS0tbm8tZm9sbG93LXBhcmVudCB0byBkaXNhYmxlIGl0LgotCisrCitbdmVyc2VdCiBjb25maWcga2V5OiBzdm4uZm9sbG93cGFyZW50CiAKLS0tCiBDT05GSUcgRklMRS1PTkxZIE9QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0KIAogc3ZuLm5vTWV0YWRhdGE6Ogogc3ZuLXJlbW90ZS48bmFtZT4ubm9NZXRhZGF0YTo6Ci0KLVRoaXMgZ2V0cyByaWQgb2YgdGhlICdnaXQtc3ZuLWlkOicgbGluZXMgYXQgdGhlIGVuZCBvZiBldmVyeSBjb21taXQuCi0KLUlmIHlvdSBsb3NlIHlvdXIgLmdpdC9zdm4vZ2l0LXN2bi8ucmV2X2RiIGZpbGUsICdnaXQtc3ZuJyB3aWxsIG5vdAorCVRoaXMgZ2V0cyByaWQgb2YgdGhlICdnaXQtc3ZuLWlkOicgbGluZXMgYXQgdGhlIGVuZCBvZiBldmVyeSBjb21taXQuCisrCitJZiB5b3UgbG9zZSB5b3VyIC5naXQvc3ZuL2dpdC1zdm4vLnJldl9kYiBmaWxlLCAnZ2l0IHN2bicgd2lsbCBub3QKIGJlIGFibGUgdG8gcmVidWlsZCBpdCBhbmQgeW91IHdvbid0IGJlIGFibGUgdG8gZmV0Y2ggYWdhaW4sCiBlaXRoZXIuICBUaGlzIGlzIGZpbmUgZm9yIG9uZS1zaG90IGltcG9ydHMuCi0KLVRoZSAnZ2l0LXN2biBsb2cnIGNvbW1hbmQgd2lsbCBub3Qgd29yayBvbiByZXBvc2l0b3JpZXMgdXNpbmcKKysKK1RoZSAnZ2l0IHN2biBsb2cnIGNvbW1hbmQgd2lsbCBub3Qgd29yayBvbiByZXBvc2l0b3JpZXMgdXNpbmcKIHRoaXMsIGVpdGhlci4gIFVzaW5nIHRoaXMgY29uZmxpY3RzIHdpdGggdGhlICd1c2VTdm1Qcm9wcycKIG9wdGlvbiBmb3IgKGhvcGVmdWxseSkgb2J2aW91cyByZWFzb25zLgogCiBzdm4udXNlU3ZtUHJvcHM6Ogogc3ZuLXJlbW90ZS48bmFtZT4udXNlU3ZtUHJvcHM6OgotCi1UaGlzIGFsbG93cyAnZ2l0LXN2bicgdG8gcmUtbWFwIHJlcG9zaXRvcnkgVVJMcyBhbmQgVVVJRHMgZnJvbQotbWlycm9ycyBjcmVhdGVkIHVzaW5nIFNWTjo6TWlycm9yIChvciBzdmspIGZvciBtZXRhZGF0YS4KLQorCVRoaXMgYWxsb3dzICdnaXQgc3ZuJyB0byByZS1tYXAgcmVwb3NpdG9yeSBVUkxzIGFuZCBVVUlEcyBmcm9tCisJbWlycm9ycyBjcmVhdGVkIHVzaW5nIFNWTjo6TWlycm9yIChvciBzdmspIGZvciBtZXRhZGF0YS4KKysKIElmIGFuIFNWTiByZXZpc2lvbiBoYXMgYSBwcm9wZXJ0eSwgInN2bTpoZWFkcmV2IiwgaXQgaXMgbGlrZWx5CiB0aGF0IHRoZSByZXZpc2lvbiB3YXMgY3JlYXRlZCBieSBTVk46Ok1pcnJvciAoYWxzbyB1c2VkIGJ5IFNWSykuCiBUaGUgcHJvcGVydHkgY29udGFpbnMgYSByZXBvc2l0b3J5IFVVSUQgYW5kIGEgcmV2aXNpb24uICBXZSB3YW50CkBAIC00NzAsMTUgKzYwNCwyMiBAQAogCiBzdm4tcmVtb3RlLjxuYW1lPi5yZXdyaXRlUm9vdDo6CiAJVGhpcyBhbGxvd3MgdXNlcnMgdG8gY3JlYXRlIHJlcG9zaXRvcmllcyBmcm9tIGFsdGVybmF0ZQotCVVSTHMuICBGb3IgZXhhbXBsZSwgYW4gYWRtaW5pc3RyYXRvciBjb3VsZCBydW4gJ2dpdC1zdm4nIG9uIHRoZQorCVVSTHMuICBGb3IgZXhhbXBsZSwgYW4gYWRtaW5pc3RyYXRvciBjb3VsZCBydW4gJ2dpdCBzdm4nIG9uIHRoZQogCXNlcnZlciBsb2NhbGx5IChhY2Nlc3NpbmcgdmlhIGZpbGU6Ly8pIGJ1dCB3aXNoIHRvIGRpc3RyaWJ1dGUKIAl0aGUgcmVwb3NpdG9yeSB3aXRoIGEgcHVibGljIGh0dHA6Ly8gb3Igc3ZuOi8vIFVSTCBpbiB0aGUKIAltZXRhZGF0YSBzbyB1c2VycyBvZiBpdCB3aWxsIHNlZSB0aGUgcHVibGljIFVSTC4KIAotLS0KK3N2bi5icm9rZW5TeW1saW5rV29ya2Fyb3VuZDo6CisJVGhpcyBkaXNhYmxlcyBwb3RlbnRpYWxseSBleHBlbnNpdmUgY2hlY2tzIHRvIHdvcmthcm91bmQKKwlicm9rZW4gc3ltbGlua3MgY2hlY2tlZCBpbnRvIFNWTiBieSBicm9rZW4gY2xpZW50cy4gIFNldCB0aGlzCisJb3B0aW9uIHRvICJmYWxzZSIgaWYgeW91IHRyYWNrIGEgU1ZOIHJlcG9zaXRvcnkgd2l0aCBtYW55CisJZW1wdHkgYmxvYnMgdGhhdCBhcmUgbm90IHN5bWxpbmtzLiAgVGhpcyBvcHRpb24gbWF5IGJlIGNoYW5nZWQKKwl3aGlsZSAnZ2l0IHN2bicgaXMgcnVubmluZyBhbmQgdGFrZSBlZmZlY3Qgb24gdGhlIG5leHQKKwlyZXZpc2lvbiBmZXRjaGVkLiAgSWYgdW5zZXQsICdnaXQgc3ZuJyBhc3N1bWVzIHRoaXMgb3B0aW9uIHRvCisJYmUgInRydWUiLgogCiBTaW5jZSB0aGUgbm9NZXRhZGF0YSwgcmV3cml0ZVJvb3QsIHVzZVN2bnN5bmNQcm9wcyBhbmQgdXNlU3ZtUHJvcHMKLW9wdGlvbnMgYWxsIGFmZmVjdCB0aGUgbWV0YWRhdGEgZ2VuZXJhdGVkIGFuZCB1c2VkIGJ5ICdnaXQtc3ZuJzsgdGhleQorb3B0aW9ucyBhbGwgYWZmZWN0IHRoZSBtZXRhZGF0YSBnZW5lcmF0ZWQgYW5kIHVzZWQgYnkgJ2dpdCBzdm4nOyB0aGV5CiAqbXVzdCogYmUgc2V0IGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYmVmb3JlIGFueSBoaXN0b3J5IGlzIGltcG9ydGVkCiBhbmQgdGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIG5ldmVyIGJlIGNoYW5nZWQgb25jZSB0aGV5IGFyZSBzZXQuCiAKQEAgLTQ5Niw3ICs2MzcsNyBAQAogCWdpdCBzdm4gY2xvbmUgaHR0cDovL3N2bi5leGFtcGxlLmNvbS9wcm9qZWN0L3RydW5rCiAjIEVudGVyIHRoZSBuZXdseSBjbG9uZWQgZGlyZWN0b3J5OgogCWNkIHRydW5rCi0jIFlvdSBzaG91bGQgYmUgb24gbWFzdGVyIGJyYW5jaCwgZG91YmxlLWNoZWNrIHdpdGggZ2l0LWJyYW5jaAorIyBZb3Ugc2hvdWxkIGJlIG9uIG1hc3RlciBicmFuY2gsIGRvdWJsZS1jaGVjayB3aXRoICdnaXQgYnJhbmNoJwogCWdpdCBicmFuY2gKICMgRG8gc29tZSB3b3JrIGFuZCBjb21taXQgbG9jYWxseSB0byBnaXQ6CiAJZ2l0IGNvbW1pdCAuLi4KQEAgLTUyNywxMiArNjY4LDEyIEBACiAjIG9mIGRjb21taXQvcmViYXNlL3Nob3ctaWdub3JlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBhYm92ZS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgaW5pdGlhbCAnZ2l0LXN2biBjbG9uZScgY2FuIGJlIHF1aXRlIHRpbWUtY29uc3VtaW5nCitUaGUgaW5pdGlhbCAnZ2l0IHN2biBjbG9uZScgY2FuIGJlIHF1aXRlIHRpbWUtY29uc3VtaW5nCiAoZXNwZWNpYWxseSBmb3IgbGFyZ2UgU3VidmVyc2lvbiByZXBvc2l0b3JpZXMpLiBJZiBtdWx0aXBsZQogcGVvcGxlIChvciBvbmUgcGVyc29uIHdpdGggbXVsdGlwbGUgbWFjaGluZXMpIHdhbnQgdG8gdXNlCi0nZ2l0LXN2bicgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgc2FtZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnksIHlvdSBjYW4KLWRvIHRoZSBpbml0aWFsICdnaXQtc3ZuIGNsb25lJyB0byBhIHJlcG9zaXRvcnkgb24gYSBzZXJ2ZXIgYW5kCi1oYXZlIGVhY2ggcGVyc29uIGNsb25lIHRoYXQgcmVwb3NpdG9yeSB3aXRoICdnaXQtY2xvbmUnOgorJ2dpdCBzdm4nIHRvIGludGVyYWN0IHdpdGggdGhlIHNhbWUgU3VidmVyc2lvbiByZXBvc2l0b3J5LCB5b3UgY2FuCitkbyB0aGUgaW5pdGlhbCAnZ2l0IHN2biBjbG9uZScgdG8gYSByZXBvc2l0b3J5IG9uIGEgc2VydmVyIGFuZAoraGF2ZSBlYWNoIHBlcnNvbiBjbG9uZSB0aGF0IHJlcG9zaXRvcnkgd2l0aCAnZ2l0IGNsb25lJzoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIERvIHRoZSBpbml0aWFsIGltcG9ydCBvbiBhIHNlcnZlcgpAQCAtNTQ2LDcgKzY4Nyw3IEBACiAJZ2l0IGZldGNoCiAjIENyZWF0ZSBhIGxvY2FsIGJyYW5jaCBmcm9tIG9uZSBvZiB0aGUgYnJhbmNoZXMganVzdCBmZXRjaGVkCiAJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciBGRVRDSF9IRUFECi0jIEluaXRpYWxpemUgZ2l0LXN2biBsb2NhbGx5IChiZSBzdXJlIHRvIHVzZSB0aGUgc2FtZSBVUkwgYW5kIC1ULy1iLy10IG9wdGlvbnMgYXMgd2VyZSB1c2VkIG9uIHNlcnZlcikKKyMgSW5pdGlhbGl6ZSAnZ2l0IHN2bicgbG9jYWxseSAoYmUgc3VyZSB0byB1c2UgdGhlIHNhbWUgVVJMIGFuZCAtVC8tYi8tdCBvcHRpb25zIGFzIHdlcmUgdXNlZCBvbiBzZXJ2ZXIpCiAJZ2l0IHN2biBpbml0IGh0dHA6Ly9zdm4uZXhhbXBsZS5jb20vcHJvamVjdAogIyBQdWxsIHRoZSBsYXRlc3QgY2hhbmdlcyBmcm9tIFN1YnZlcnNpb24KIAlnaXQgc3ZuIHJlYmFzZQpAQCAtNTU1LDcgKzY5Niw3IEBACiBSRUJBU0UgVlMuIFBVTEwvTUVSR0UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1PcmlnaW5hbGx5LCAnZ2l0LXN2bicgcmVjb21tZW5kZWQgdGhhdCB0aGUgJ3JlbW90ZXMvZ2l0LXN2bicgYnJhbmNoIGJlCitPcmlnaW5hbGx5LCAnZ2l0IHN2bicgcmVjb21tZW5kZWQgdGhhdCB0aGUgJ3JlbW90ZXMvZ2l0LXN2bicgYnJhbmNoIGJlCiBwdWxsZWQgb3IgbWVyZ2VkIGZyb20uICBUaGlzIGlzIGJlY2F1c2UgdGhlIGF1dGhvciBmYXZvcmVkCiBgZ2l0IHN2biBzZXQtdHJlZSBCYCB0byBjb21taXQgYSBzaW5nbGUgaGVhZCByYXRoZXIgdGhhbiB0aGUKIGBnaXQgc3ZuIHNldC10cmVlIEEuLkJgIG5vdGF0aW9uIHRvIGNvbW1pdCBtdWx0aXBsZSBjb21taXRzLgpAQCAtNTcwLDcgKzcxMSw3IEBACiBERVNJR04gUEhJTE9TT1BIWQogLS0tLS0tLS0tLS0tLS0tLS0KIE1lcmdlIHRyYWNraW5nIGluIFN1YnZlcnNpb24gaXMgbGFja2luZyBhbmQgZG9pbmcgYnJhbmNoZWQgZGV2ZWxvcG1lbnQKLXdpdGggU3VidmVyc2lvbiBjYW4gYmUgY3VtYmVyc29tZSBhcyBhIHJlc3VsdC4gIFdoaWxlICdnaXQtc3ZuJyBjYW4gdHJhY2sKK3dpdGggU3VidmVyc2lvbiBjYW4gYmUgY3VtYmVyc29tZSBhcyBhIHJlc3VsdC4gIFdoaWxlICdnaXQgc3ZuJyBjYW4gdHJhY2sKIGNvcHkgaGlzdG9yeSAoaW5jbHVkaW5nIGJyYW5jaGVzIGFuZCB0YWdzKSBmb3IgcmVwb3NpdG9yaWVzIGFkb3B0aW5nIGEKIHN0YW5kYXJkIGxheW91dCwgaXQgY2Fubm90IHlldCByZXByZXNlbnQgbWVyZ2UgaGlzdG9yeSB0aGF0IGhhcHBlbmVkCiBpbnNpZGUgZ2l0IGJhY2sgdXBzdHJlYW0gdG8gU1ZOIHVzZXJzLiAgVGhlcmVmb3JlIGl0IGlzIGFkdmlzZWQgdGhhdApAQCAtNTgxLDI1ICs3MjIsMjUgQEAKIC0tLS0tLS0KIAogRm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHkgYW5kIGludGVyb3BlcmF0aW5nIHdpdGggYSBsZXNzLWNhcGFibGUgc3lzdGVtCi0oU1ZOKSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgJ2dpdC1zdm4nIHVzZXJzIGNsb25lLCBmZXRjaCBhbmQgZGNvbW1pdAotZGlyZWN0bHkgZnJvbSB0aGUgU1ZOIHNlcnZlciwgYW5kIGF2b2lkIGFsbCAnZ2l0LWNsb25lJy8ncHVsbCcvJ21lcmdlJy8ncHVzaCcKKyhTVk4pLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFsbCAnZ2l0IHN2bicgdXNlcnMgY2xvbmUsIGZldGNoIGFuZCBkY29tbWl0CitkaXJlY3RseSBmcm9tIHRoZSBTVk4gc2VydmVyLCBhbmQgYXZvaWQgYWxsICdnaXQgY2xvbmUnLydwdWxsJy8nbWVyZ2UnLydwdXNoJwogb3BlcmF0aW9ucyBiZXR3ZWVuIGdpdCByZXBvc2l0b3JpZXMgYW5kIGJyYW5jaGVzLiAgVGhlIHJlY29tbWVuZGVkCiBtZXRob2Qgb2YgZXhjaGFuZ2luZyBjb2RlIGJldHdlZW4gZ2l0IGJyYW5jaGVzIGFuZCB1c2VycyBpcwotJ2dpdC1mb3JtYXQtcGF0Y2gnIGFuZCAnZ2l0LWFtJywgb3IganVzdCAnZGNvbW1pdCdpbmcgdG8gdGhlIFNWTiByZXBvc2l0b3J5LgorJ2dpdCBmb3JtYXQtcGF0Y2gnIGFuZCAnZ2l0IGFtJywgb3IganVzdCAnZGNvbW1pdCdpbmcgdG8gdGhlIFNWTiByZXBvc2l0b3J5LgogCi1SdW5uaW5nICdnaXQtbWVyZ2UnIG9yICdnaXQtcHVsbCcgaXMgTk9UIHJlY29tbWVuZGVkIG9uIGEgYnJhbmNoIHlvdQorUnVubmluZyAnZ2l0IG1lcmdlJyBvciAnZ2l0IHB1bGwnIGlzIE5PVCByZWNvbW1lbmRlZCBvbiBhIGJyYW5jaCB5b3UKIHBsYW4gdG8gJ2Rjb21taXQnIGZyb20uICBTdWJ2ZXJzaW9uIGRvZXMgbm90IHJlcHJlc2VudCBtZXJnZXMgaW4gYW55CiByZWFzb25hYmxlIG9yIHVzZWZ1bCBmYXNoaW9uOyBzbyB1c2VycyB1c2luZyBTdWJ2ZXJzaW9uIGNhbm5vdCBzZWUgYW55CiBtZXJnZXMgeW91J3ZlIG1hZGUuICBGdXJ0aGVybW9yZSwgaWYgeW91IG1lcmdlIG9yIHB1bGwgZnJvbSBhIGdpdCBicmFuY2gKIHRoYXQgaXMgYSBtaXJyb3Igb2YgYW4gU1ZOIGJyYW5jaCwgJ2Rjb21taXQnIG1heSBjb21taXQgdG8gdGhlIHdyb25nCiBicmFuY2guCiAKLSdnaXQtY2xvbmUnIGRvZXMgbm90IGNsb25lIGJyYW5jaGVzIHVuZGVyIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSBvcgotYW55ICdnaXQtc3ZuJyBtZXRhZGF0YSwgb3IgY29uZmlnLiAgU28gcmVwb3NpdG9yaWVzIGNyZWF0ZWQgYW5kIG1hbmFnZWQgd2l0aAotdXNpbmcgJ2dpdC1zdm4nIHNob3VsZCB1c2UgJ3JzeW5jJyBmb3IgY2xvbmluZywgaWYgY2xvbmluZyBpcyB0byBiZSBkb25lCisnZ2l0IGNsb25lJyBkb2VzIG5vdCBjbG9uZSBicmFuY2hlcyB1bmRlciB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgb3IKK2FueSAnZ2l0IHN2bicgbWV0YWRhdGEsIG9yIGNvbmZpZy4gIFNvIHJlcG9zaXRvcmllcyBjcmVhdGVkIGFuZCBtYW5hZ2VkIHdpdGgKK3VzaW5nICdnaXQgc3ZuJyBzaG91bGQgdXNlICdyc3luYycgZm9yIGNsb25pbmcsIGlmIGNsb25pbmcgaXMgdG8gYmUgZG9uZQogYXQgYWxsLgogCi1TaW5jZSAnZGNvbW1pdCcgdXNlcyByZWJhc2UgaW50ZXJuYWxseSwgYW55IGdpdCBicmFuY2hlcyB5b3UgJ2dpdC1wdXNoJyB0bworU2luY2UgJ2Rjb21taXQnIHVzZXMgcmViYXNlIGludGVybmFsbHksIGFueSBnaXQgYnJhbmNoZXMgeW91ICdnaXQgcHVzaCcgdG8KIGJlZm9yZSAnZGNvbW1pdCcgb24gd2lsbCByZXF1aXJlIGZvcmNpbmcgYW4gb3ZlcndyaXRlIG9mIHRoZSBleGlzdGluZyByZWYKIG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4gIFRoaXMgaXMgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgYmFkIHByYWN0aWNlLAogc2VlIHRoZSBsaW5rZ2l0OmdpdC1wdXNoWzFdIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCkBAIC02MDksNiArNzUwLDE2IEBACiB5b3UndmUgYWxyZWFkeSBwdXNoZWQgdG8gYSByZW1vdGUgcmVwb3NpdG9yeSBmb3Igb3RoZXIgdXNlcnMsIGFuZAogZGNvbW1pdCB3aXRoIFNWTiBpcyBhbmFsb2dvdXMgdG8gdGhhdC4KIAorV2hlbiB1c2luZyBtdWx0aXBsZSAtLWJyYW5jaGVzIG9yIC0tdGFncywgJ2dpdCBzdm4nIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkKK2hhbmRsZSBuYW1lIGNvbGxpc2lvbnMgKGZvciBleGFtcGxlLCBpZiB0d28gYnJhbmNoZXMgZnJvbSBkaWZmZXJlbnQgcGF0aHMgaGF2ZQordGhlIHNhbWUgbmFtZSwgb3IgaWYgYSBicmFuY2ggYW5kIGEgdGFnIGhhdmUgdGhlIHNhbWUgbmFtZSkuICBJbiB0aGVzZSBjYXNlcywKK3VzZSAnaW5pdCcgdG8gc2V0IHVwIHlvdXIgZ2l0IHJlcG9zaXRvcnkgdGhlbiwgYmVmb3JlIHlvdXIgZmlyc3QgJ2ZldGNoJywgZWRpdAordGhlIC5naXQvY29uZmlnIGZpbGUgc28gdGhhdCB0aGUgYnJhbmNoZXMgYW5kIHRhZ3MgYXJlIGFzc29jaWF0ZWQgd2l0aAorZGlmZmVyZW50IG5hbWUgc3BhY2VzLiAgRm9yIGV4YW1wbGU6CisKKwlicmFuY2hlcyA9IHN0YWJsZS8qOnJlZnMvcmVtb3Rlcy9zdm4vc3RhYmxlLyoKKwlicmFuY2hlcyA9IGRlYnVnLyo6cmVmcy9yZW1vdGVzL3N2bi9kZWJ1Zy8qCisKIEJVR1MKIC0tLS0KIApAQCAtNjI1LDcgKzc3Niw3IEBACiBDT05GSUdVUkFUSU9OCiAtLS0tLS0tLS0tLS0tCiAKLSdnaXQtc3ZuJyBzdG9yZXMgW3N2bi1yZW1vdGVdIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaW4gdGhlCisnZ2l0IHN2bicgc3RvcmVzIFtzdm4tcmVtb3RlXSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGluIHRoZQogcmVwb3NpdG9yeSAuZ2l0L2NvbmZpZyBmaWxlLiAgSXQgaXMgc2ltaWxhciB0aGUgY29yZSBnaXQKIFtyZW1vdGVdIHNlY3Rpb25zIGV4Y2VwdCAnZmV0Y2gnIGtleXMgZG8gbm90IGFjY2VwdCBnbG9iCiBhcmd1bWVudHM7IGJ1dCB0aGV5IGFyZSBpbnN0ZWFkIGhhbmRsZWQgYnkgdGhlICdicmFuY2hlcycKQEAgLTYzNiwxNyArNzg3LDE3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFtzdm4tcmVtb3RlICJwcm9qZWN0LWEiXQogCXVybCA9IGh0dHA6Ly9zZXJ2ZXIub3JnL3N2bgorCWZldGNoID0gdHJ1bmsvcHJvamVjdC1hOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvdHJ1bmsKIAlicmFuY2hlcyA9IGJyYW5jaGVzLyovcHJvamVjdC1hOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvYnJhbmNoZXMvKgogCXRhZ3MgPSB0YWdzLyovcHJvamVjdC1hOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvdGFncy8qCi0JdHJ1bmsgPSB0cnVuay9wcm9qZWN0LWE6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS90cnVuawogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUtlZXAgaW4gbWluZCB0aGF0IHRoZSAnKicgKGFzdGVyaXNrKSB3aWxkY2FyZCBvZiB0aGUgbG9jYWwgcmVmCitLZWVwIGluIG1pbmQgdGhhdCB0aGUgJ1wqJyAoYXN0ZXJpc2spIHdpbGRjYXJkIG9mIHRoZSBsb2NhbCByZWYKIChyaWdodCBvZiB0aGUgJzonKSAqbXVzdCogYmUgdGhlIGZhcnRoZXN0IHJpZ2h0IHBhdGggY29tcG9uZW50OwotaG93ZXZlciB0aGUgcmVtb3RlIHdpbGRjYXJkIG1heSBiZSBhbnl3aGVyZSBhcyBsb25nIGFzIGl0J3Mgb3duCitob3dldmVyIHRoZSByZW1vdGUgd2lsZGNhcmQgbWF5IGJlIGFueXdoZXJlIGFzIGxvbmcgYXMgaXQncyBhbgogaW5kZXBlbmRlbnQgcGF0aCBjb21wb25lbnQgKHN1cnJvdW5kZWQgYnkgJy8nIG9yIEVPTCkuICAgVGhpcwogdHlwZSBvZiBjb25maWd1cmF0aW9uIGlzIG5vdCBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgJ2luaXQnIGFuZAotc2hvdWxkIGJlIG1hbnVhbGx5IGVudGVyZWQgd2l0aCBhIHRleHQtZWRpdG9yIG9yIHVzaW5nICdnaXQtY29uZmlnJy4KK3Nob3VsZCBiZSBtYW51YWxseSBlbnRlcmVkIHdpdGggYSB0ZXh0LWVkaXRvciBvciB1c2luZyAnZ2l0IGNvbmZpZycuCiAKIFNFRSBBTFNPCiAtLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3ltYm9saWMtcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN5bWJvbGljLXJlZi50eHQKaW5kZXggMjEwZmRlMC4uNjM5MjUzOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc3ltYm9saWMtcmVmLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zeW1ib2xpYy1yZWYudHh0CkBAIC0xNCw5ICsxNCw5IEBACiBHaXZlbiBvbmUgYXJndW1lbnQsIHJlYWRzIHdoaWNoIGJyYW5jaCBoZWFkIHRoZSBnaXZlbiBzeW1ib2xpYwogcmVmIHJlZmVycyB0byBhbmQgb3V0cHV0cyBpdHMgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIGAuZ2l0L2AKIGRpcmVjdG9yeS4gIFR5cGljYWxseSB5b3Ugd291bGQgZ2l2ZSBgSEVBRGAgYXMgdGhlIDxuYW1lPgotYXJndW1lbnQgdG8gc2VlIG9uIHdoaWNoIGJyYW5jaCB5b3VyIHdvcmtpbmcgdHJlZSBpcyBvbi4KK2FyZ3VtZW50IHRvIHNlZSB3aGljaCBicmFuY2ggeW91ciB3b3JraW5nIHRyZWUgaXMgb24uCiAKLUdpdmUgdHdvIGFyZ3VtZW50cywgY3JlYXRlIG9yIHVwZGF0ZSBhIHN5bWJvbGljIHJlZiA8bmFtZT4gdG8KK0dpdmVuIHR3byBhcmd1bWVudHMsIGNyZWF0ZXMgb3IgdXBkYXRlcyBhIHN5bWJvbGljIHJlZiA8bmFtZT4gdG8KIHBvaW50IGF0IHRoZSBnaXZlbiBicmFuY2ggPHJlZj4uCiAKIEEgc3ltYm9saWMgcmVmIGlzIGEgcmVndWxhciBmaWxlIHRoYXQgc3RvcmVzIGEgc3RyaW5nIHRoYXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0CmluZGV4IDM1NDZhY2YuLmZhNzMzMjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dApAQCAtMTIsNyArMTIsNyBAQAogJ2dpdCB0YWcnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XQogCTxuYW1lPiBbPGNvbW1pdD4gfCA8b2JqZWN0Pl0KICdnaXQgdGFnJyAtZCA8bmFtZT4uLi4KLSdnaXQgdGFnJyBbLW5bPG51bT5dXSAtbCBbPHBhdHRlcm4+XQorJ2dpdCB0YWcnIFstbls8bnVtPl1dIC1sIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbPHBhdHRlcm4+XQogJ2dpdCB0YWcnIC12IDxuYW1lPi4uLgogCiBERVNDUklQVElPTgpAQCAtNjksNiArNjksOSBAQAogCUxpc3QgdGFncyB3aXRoIG5hbWVzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHBhdHRlcm4gKG9yIGFsbCBpZiBubyBwYXR0ZXJuIGlzIGdpdmVuKS4KIAlUeXBpbmcgImdpdCB0YWciIHdpdGhvdXQgYXJndW1lbnRzLCBhbHNvIGxpc3RzIGFsbCB0YWdzLgogCistLWNvbnRhaW5zIDxjb21taXQ+OjoKKwlPbmx5IGxpc3QgdGFncyB3aGljaCBjb250YWluIHRoZSBzcGVjaWZpZWQgY29tbWl0LgorCiAtbSA8bXNnPjo6CiAJVXNlIHRoZSBnaXZlbiB0YWcgbWVzc2FnZSAoaW5zdGVhZCBvZiBwcm9tcHRpbmcpLgogCUlmIG11bHRpcGxlIGAtbWAgb3B0aW9ucyBhcmUgZ2l2ZW4sIHRoZWlyIHZhbHVlcyBhcmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mby50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtc2VydmVyLWluZm8udHh0CmluZGV4IDM1ZDI3YjAuLjAzNWNjMzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXNlcnZlci1pbmZvLnR4dApAQCAtMzksMTIgKzM5LDYgQEAKICogaW5mby9yZWZzCiAKIAotQlVHUwotLS0tLQotV2hlbiB5b3UgcmVtb3ZlIGFuIGV4aXN0aW5nIHJlZiwgdGhlIGNvbW1hbmQgZmFpbHMgdG8gdXBkYXRlCi1pbmZvL3JlZnMgZmlsZSB1bmxlc3MgYC0tZm9yY2VgIGZsYWcgaXMgZ2l2ZW4uCi0KLQogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CmluZGV4IDE3ZGM4YjIuLjU4MzJjNzUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKQEAgLTksNyArOSw3IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQnIFstLXZlcnNpb25dIFstLWV4ZWMtcGF0aFs9R0lUX0VYRUNfUEFUSF1dCisnZ2l0JyBbLS12ZXJzaW9uXSBbLS1leGVjLXBhdGhbPUdJVF9FWEVDX1BBVEhdXSBbLS1odG1sLXBhdGhdCiAgICAgWy1wfC0tcGFnaW5hdGV8LS1uby1wYWdlcl0KICAgICBbLS1iYXJlXSBbLS1naXQtZGlyPUdJVF9ESVJdIFstLXdvcmstdHJlZT1HSVRfV09SS19UUkVFXQogICAgIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCkBAIC00Myw5ICs0MywzNCBAQAogYnJhbmNoIG9mIHRoZSBgZ2l0LmdpdGAgcmVwb3NpdG9yeS4KIERvY3VtZW50YXRpb24gZm9yIG9sZGVyIHJlbGVhc2VzIGFyZSBhdmFpbGFibGUgaGVyZToKIAotKiBsaW5rOnYxLjYuMS9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNi4xXQorKiBsaW5rOnYxLjYuNC9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNi40XQogCiAqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMtMS42LjQudHh0WzEuNi40XS4KKworKiBsaW5rOnYxLjYuMy40L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS42LjMuNF0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLTEuNi4zLjQudHh0WzEuNi4zLjRdLAorICBsaW5rOlJlbE5vdGVzLTEuNi4zLjMudHh0WzEuNi4zLjNdLAorICBsaW5rOlJlbE5vdGVzLTEuNi4zLjIudHh0WzEuNi4zLjJdLAorICBsaW5rOlJlbE5vdGVzLTEuNi4zLjEudHh0WzEuNi4zLjFdLAorICBsaW5rOlJlbE5vdGVzLTEuNi4zLnR4dFsxLjYuM10uCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy0xLjYuMi41LnR4dFsxLjYuMi41XSwKKyAgbGluazpSZWxOb3Rlcy0xLjYuMi40LnR4dFsxLjYuMi40XSwKKyAgbGluazpSZWxOb3Rlcy0xLjYuMi4zLnR4dFsxLjYuMi4zXSwKKyAgbGluazpSZWxOb3Rlcy0xLjYuMi4yLnR4dFsxLjYuMi4yXSwKKyAgbGluazpSZWxOb3Rlcy0xLjYuMi4xLnR4dFsxLjYuMi4xXSwKKyAgbGluazpSZWxOb3Rlcy0xLjYuMi50eHRbMS42LjJdLgorCisqIGxpbms6djEuNi4xLjMvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjYuMS4zXQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMtMS42LjEuMy50eHRbMS42LjEuM10sCisgIGxpbms6UmVsTm90ZXMtMS42LjEuMi50eHRbMS42LjEuMl0sCisgIGxpbms6UmVsTm90ZXMtMS42LjEuMS50eHRbMS42LjEuMV0sCiAgIGxpbms6UmVsTm90ZXMtMS42LjEudHh0WzEuNi4xXS4KIAogKiBsaW5rOnYxLjYuMC42L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS42LjAuNl0KQEAgLTE2OSw2ICsxOTQsMTAgQEAKIAllbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgbm8gcGF0aCBpcyBnaXZlbiwgJ2dpdCcgd2lsbCBwcmludAogCXRoZSBjdXJyZW50IHNldHRpbmcgYW5kIHRoZW4gZXhpdC4KIAorLS1odG1sLXBhdGg6OgorCVByaW50IHRoZSBwYXRoIHRvIHdoZXJldmVyIHlvdXIgZ2l0IEhUTUwgZG9jdW1lbnRhdGlvbiBpcyBpbnN0YWxsZWQKKwlhbmQgZXhpdC4KKwogLXA6OgogLS1wYWdpbmF0ZTo6CiAJUGlwZSBhbGwgb3V0cHV0IGludG8gJ2xlc3MnIChvciBpZiBzZXQsICRQQUdFUikuCkBAIC0yMTAsNiArMjM5LDggQEAKIHVzZXItbWFudWFsXSBhbmQgbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddIGJvdGggcHJvdmlkZQogaW50cm9kdWN0aW9ucyB0byB0aGUgdW5kZXJseWluZyBnaXQgYXJjaGl0ZWN0dXJlLgogCitTZWUgbGlua2dpdDpnaXR3b3JrZmxvd3NbN10gZm9yIGFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cy4KKwogU2VlIGFsc28gdGhlIGxpbms6aG93dG8taW5kZXguaHRtbFtob3d0b10gZG9jdW1lbnRzIGZvciBzb21lIHVzZWZ1bAogZXhhbXBsZXMuCiAKQEAgLTI5Niw3ICszMjcsNyBAQAogCiBpbmNsdWRlOjpjbWRzLXN5bmNoaW5ncmVwb3NpdG9yaWVzLnR4dFtdCiAKLVRoZSBmb2xsb3dpbmcgYXJlIGhlbHBlciBwcm9ncmFtcyB1c2VkIGJ5IHRoZSBhYm92ZTsgZW5kIHVzZXJzCitUaGUgZm9sbG93aW5nIGFyZSBoZWxwZXIgY29tbWFuZHMgdXNlZCBieSB0aGUgYWJvdmU7IGVuZCB1c2VycwogdHlwaWNhbGx5IGRvIG5vdCB1c2UgdGhlbSBkaXJlY3RseS4KIAogaW5jbHVkZTo6Y21kcy1zeW5jaGVscGVycy50eHRbXQpAQCAtNjI3LDcgKzY1OCw4IEBACiBsaW5rZ2l0OmdpdHR1dG9yaWFsWzddLCBsaW5rZ2l0OmdpdHR1dG9yaWFsLTJbN10sCiBsaW5rOmV2ZXJ5ZGF5Lmh0bWxbRXZlcnlkYXkgR2l0XSwgbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAogbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwgbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLAotbGlua2dpdDpnaXRjbGlbN10sIGxpbms6dXNlci1tYW51YWwuaHRtbFtUaGUgR2l0IFVzZXIncyBNYW51YWxdCitsaW5rZ2l0OmdpdGNsaVs3XSwgbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0sCitsaW5rZ2l0OmdpdHdvcmtmbG93c1s3XQogCiBHSVQKIC0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQKaW5kZXggODJjMTBmYS4uMTE5NWU4MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0CkBAIC0xOCwxMCArMTgsMTAgQEAKIAogRWFjaCBsaW5lIGluIGBnaXRhdHRyaWJ1dGVzYCBmaWxlIGlzIG9mIGZvcm06CiAKLQlnbG9iCWF0dHIxIGF0dHIyIC4uLgorCXBhdHRlcm4JYXR0cjEgYXR0cjIgLi4uCiAKLVRoYXQgaXMsIGEgZ2xvYiBwYXR0ZXJuIGZvbGxvd2VkIGJ5IGFuIGF0dHJpYnV0ZXMgbGlzdCwKLXNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlcy4gIFdoZW4gdGhlIGdsb2IgcGF0dGVybiBtYXRjaGVzIHRoZQorVGhhdCBpcywgYSBwYXR0ZXJuIGZvbGxvd2VkIGJ5IGFuIGF0dHJpYnV0ZXMgbGlzdCwKK3NlcGFyYXRlZCBieSB3aGl0ZXNwYWNlcy4gIFdoZW4gdGhlIHBhdHRlcm4gbWF0Y2hlcyB0aGUKIHBhdGggaW4gcXVlc3Rpb24sIHRoZSBhdHRyaWJ1dGVzIGxpc3RlZCBvbiB0aGUgbGluZSBhcmUgZ2l2ZW4gdG8KIHRoZSBwYXRoLgogCkBAIC00OCwxMyArNDgsMTQgQEAKIAogVW5zcGVjaWZpZWQ6OgogCi0JTm8gZ2xvYiBwYXR0ZXJuIG1hdGNoZXMgdGhlIHBhdGgsIGFuZCBub3RoaW5nIHNheXMgaWYKKwlObyBwYXR0ZXJuIG1hdGNoZXMgdGhlIHBhdGgsIGFuZCBub3RoaW5nIHNheXMgaWYKIAl0aGUgcGF0aCBoYXMgb3IgZG9lcyBub3QgaGF2ZSB0aGUgYXR0cmlidXRlLCB0aGUKIAlhdHRyaWJ1dGUgZm9yIHRoZSBwYXRoIGlzIHNhaWQgdG8gYmUgVW5zcGVjaWZpZWQuCiAKLVdoZW4gbW9yZSB0aGFuIG9uZSBnbG9iIHBhdHRlcm4gbWF0Y2hlcyB0aGUgcGF0aCwgYSBsYXRlciBsaW5lCitXaGVuIG1vcmUgdGhhbiBvbmUgcGF0dGVybiBtYXRjaGVzIHRoZSBwYXRoLCBhIGxhdGVyIGxpbmUKIG92ZXJyaWRlcyBhbiBlYXJsaWVyIGxpbmUuICBUaGlzIG92ZXJyaWRpbmcgaXMgZG9uZSBwZXIKLWF0dHJpYnV0ZS4KK2F0dHJpYnV0ZS4gIFRoZSBydWxlcyBob3cgdGhlIHBhdHRlcm4gbWF0Y2hlcyBwYXRocyBhcmUgdGhlCitzYW1lIGFzIGluIGAuZ2l0aWdub3JlYCBmaWxlczsgc2VlIGxpbmtnaXQ6Z2l0aWdub3JlWzVdLgogCiBXaGVuIGRlY2lkaW5nIHdoYXQgYXR0cmlidXRlcyBhcmUgYXNzaWduZWQgdG8gYSBwYXRoLCBnaXQKIGNvbnN1bHRzIGAkR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXNgIGZpbGUgKHdoaWNoIGhhcyB0aGUgaGlnaGVzdApAQCAtMjk2LDcgKzI5Nyw4IEBACiAKIFRoZW4sIHlvdSB3b3VsZCBkZWZpbmUgYSAiZGlmZi50ZXgueGZ1bmNuYW1lIiBjb25maWd1cmF0aW9uIHRvCiBzcGVjaWZ5IGEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBhIGxpbmUgdGhhdCB5b3Ugd291bGQKLXdhbnQgdG8gYXBwZWFyIGFzIHRoZSBodW5rIGhlYWRlciAiVEVYVCIsIGxpa2UgdGhpczoKK3dhbnQgdG8gYXBwZWFyIGFzIHRoZSBodW5rIGhlYWRlciAiVEVYVCIuIEFkZCBhIHNlY3Rpb24gdG8geW91cgorYCRHSVRfRElSL2NvbmZpZ2AgZmlsZSAob3IgYCRIT01FLy5naXRjb25maWdgIGZpbGUpIGxpa2UgdGhpczoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBbZGlmZiAidGV4Il0KQEAgLTMxNyw2ICszMTksOCBAQAogCiAtIGBiaWJ0ZXhgIHN1aXRhYmxlIGZvciBmaWxlcyB3aXRoIEJpYlRlWCBjb2RlZCByZWZlcmVuY2VzLgogCistIGBjcHBgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgQyBhbmQgQysrIGxhbmd1YWdlcy4KKwogLSBgaHRtbGAgc3VpdGFibGUgZm9yIEhUTUwvWEhUTUwgZG9jdW1lbnRzLgogCiAtIGBqYXZhYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEphdmEgbGFuZ3VhZ2UuCkBAIC0zMzQsNiArMzM4LDI2IEBACiAtIGB0ZXhgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBmb3IgTGFUZVggZG9jdW1lbnRzLgogCiAKK0N1c3RvbWl6aW5nIHdvcmQgZGlmZgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1lvdSBjYW4gY3VzdG9taXplIHRoZSBydWxlcyB0aGF0IGBnaXQgZGlmZiAtLWNvbG9yLXdvcmRzYCB1c2VzIHRvCitzcGxpdCB3b3JkcyBpbiBhIGxpbmUsIGJ5IHNwZWNpZnlpbmcgYW4gYXBwcm9wcmlhdGUgcmVndWxhciBleHByZXNzaW9uCitpbiB0aGUgImRpZmYuKi53b3JkUmVnZXgiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBGb3IgZXhhbXBsZSwgaW4gVGVYCithIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBhIHNlcXVlbmNlIG9mIGxldHRlcnMgZm9ybXMgYSBjb21tYW5kLCBidXQKK3NldmVyYWwgc3VjaCBjb21tYW5kcyBjYW4gYmUgcnVuIHRvZ2V0aGVyIHdpdGhvdXQgaW50ZXJ2ZW5pbmcKK3doaXRlc3BhY2UuICBUbyBzZXBhcmF0ZSB0aGVtLCB1c2UgYSByZWd1bGFyIGV4cHJlc3Npb24gaW4geW91cgorYCRHSVRfRElSL2NvbmZpZ2AgZmlsZSAob3IgYCRIT01FLy5naXRjb25maWdgIGZpbGUpIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZGlmZiAidGV4Il0KKwl3b3JkUmVnZXggPSAiXFxcXFthLXpBLVpdK3xbe31dfFxcXFwufFteXFx7fVs6c3BhY2U6XV0rIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgYnVpbHQtaW4gcGF0dGVybiBpcyBwcm92aWRlZCBmb3IgYWxsIGxhbmd1YWdlcyBsaXN0ZWQgaW4gdGhlCitwcmV2aW91cyBzZWN0aW9uLgorCisKIFBlcmZvcm1pbmcgdGV4dCBkaWZmcyBvZiBiaW5hcnkgZmlsZXMKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMzUxLDcgKzM3NSw4IEBACiAKIEZvciBleGFtcGxlLCB0byBzaG93IHRoZSBkaWZmIG9mIHRoZSBleGlmIGluZm9ybWF0aW9uIG9mIGEKIGZpbGUgaW5zdGVhZCBvZiB0aGUgYmluYXJ5IGluZm9ybWF0aW9uIChhc3N1bWluZyB5b3UgaGF2ZSB0aGUKLWV4aWYgdG9vbCBpbnN0YWxsZWQpOgorZXhpZiB0b29sIGluc3RhbGxlZCksIGFkZCB0aGUgZm9sbG93aW5nIHNlY3Rpb24gdG8geW91cgorYCRHSVRfRElSL2NvbmZpZ2AgZmlsZSAob3IgYCRIT01FLy5naXRjb25maWdgIGZpbGUpOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFtkaWZmICJqcGciXQpAQCAtMzc5LDcgKzQwNCw3IEBACiAKIFRoZSBhdHRyaWJ1dGUgYG1lcmdlYCBhZmZlY3RzIGhvdyB0aHJlZSB2ZXJzaW9ucyBvZiBhIGZpbGUgaXMKIG1lcmdlZCB3aGVuIGEgZmlsZS1sZXZlbCBtZXJnZSBpcyBuZWNlc3NhcnkgZHVyaW5nIGBnaXQgbWVyZ2VgLAotYW5kIG90aGVyIHByb2dyYW1zIHN1Y2ggYXMgYGdpdCByZXZlcnRgIGFuZCBgZ2l0IGNoZXJyeS1waWNrYC4KK2FuZCBvdGhlciBjb21tYW5kcyBzdWNoIGFzIGBnaXQgcmV2ZXJ0YCBhbmQgYGdpdCBjaGVycnktcGlja2AuCiAKIFNldDo6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dAppbmRleCAyOWU1OTI5Li5iZTM5ZWQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGNsaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRjbGkudHh0CkBAIC00NiwyMCArNDYsMjAgQEAKIHNjcmlwdGluZyBnaXQ6CiAKICAqIGl0J3MgcHJlZmVycmVkIHRvIHVzZSB0aGUgbm9uIGRhc2hlZCBmb3JtIG9mIGdpdCBjb21tYW5kcywgd2hpY2ggbWVhbnMgdGhhdAotICAgeW91IHNob3VsZCBwcmVmZXIgYCJnaXQgZm9vImAgdG8gYCJnaXQtZm9vImAuCisgICB5b3Ugc2hvdWxkIHByZWZlciBgZ2l0IGZvb2AgdG8gYGdpdC1mb29gLgogCi0gKiBzcGxpdHRpbmcgc2hvcnQgb3B0aW9ucyB0byBzZXBhcmF0ZSB3b3JkcyAocHJlZmVyIGAiZ2l0IGZvbyAtYSAtYiJgCi0gICB0byBgImdpdCBmb28gLWFiImAsIHRoZSBsYXR0ZXIgbWF5IG5vdCBldmVuIHdvcmspLgorICogc3BsaXR0aW5nIHNob3J0IG9wdGlvbnMgdG8gc2VwYXJhdGUgd29yZHMgKHByZWZlciBgZ2l0IGZvbyAtYSAtYmAKKyAgIHRvIGBnaXQgZm9vIC1hYmAsIHRoZSBsYXR0ZXIgbWF5IG5vdCBldmVuIHdvcmspLgogCiAgKiB3aGVuIGEgY29tbWFuZCBsaW5lIG9wdGlvbiB0YWtlcyBhbiBhcmd1bWVudCwgdXNlIHRoZSAnc3RpY2tlZCcgZm9ybS4gIEluCi0gICBvdGhlciB3b3Jkcywgd3JpdGUgYCJnaXQgZm9vIC1vQXJnImAgaW5zdGVhZCBvZiBgImdpdCBmb28gLW8gQXJnImAgZm9yIHNob3J0Ci0gICBvcHRpb25zLCBhbmQgYCJnaXQgZm9vIC0tbG9uZy1vcHQ9QXJnImAgaW5zdGVhZCBvZiBgImdpdCBmb28gLS1sb25nLW9wdCBBcmciYAorICAgb3RoZXIgd29yZHMsIHdyaXRlIGBnaXQgZm9vIC1vQXJnYCBpbnN0ZWFkIG9mIGBnaXQgZm9vIC1vIEFyZ2AgZm9yIHNob3J0CisgICBvcHRpb25zLCBhbmQgYGdpdCBmb28gLS1sb25nLW9wdD1BcmdgIGluc3RlYWQgb2YgYGdpdCBmb28gLS1sb25nLW9wdCBBcmdgCiAgICBmb3IgbG9uZyBvcHRpb25zLiAgQW4gb3B0aW9uIHRoYXQgdGFrZXMgb3B0aW9uYWwgb3B0aW9uLWFyZ3VtZW50IG11c3QgYmUKICAgIHdyaXR0ZW4gaW4gdGhlICdzdGlja2VkJyBmb3JtLgogCiAgKiB3aGVuIHlvdSBnaXZlIGEgcmV2aXNpb24gcGFyYW1ldGVyIHRvIGEgY29tbWFuZCwgbWFrZSBzdXJlIHRoZSBwYXJhbWV0ZXIgaXMKICAgIG5vdCBhbWJpZ3VvdXMgd2l0aCBhIG5hbWUgb2YgYSBmaWxlIGluIHRoZSB3b3JrIHRyZWUuICBFLmcuIGRvIG5vdCB3cml0ZQotICAgYCJnaXQgbG9nIC0xIEhFQUQiYCBidXQgd3JpdGUgYCJnaXQgbG9nIC0xIEhFQUQgLS0iYDsgdGhlIGZvcm1lciB3aWxsIG5vdCB3b3JrCisgICBgZ2l0IGxvZyAtMSBIRUFEYCBidXQgd3JpdGUgYGdpdCBsb2cgLTEgSEVBRCAtLWA7IHRoZSBmb3JtZXIgd2lsbCBub3Qgd29yawogICAgaWYgeW91IGhhcHBlbiB0byBoYXZlIGEgZmlsZSBjYWxsZWQgYEhFQURgIGluIHRoZSB3b3JrIHRyZWUuCiAKIApAQCAtOTksMTcgKzk5LDE3IEBACiAKIE5lZ2F0aW5nIG9wdGlvbnMKIH5+fn5+fn5+fn5+fn5+fn4KLU9wdGlvbnMgd2l0aCBsb25nIG9wdGlvbiBuYW1lcyBjYW4gYmUgbmVnYXRlZCBieSBwcmVmaXhpbmcgYCItLW5vLSJgLiBGb3IKLWV4YW1wbGUsIGAiZ2l0IGJyYW5jaCJgIGhhcyB0aGUgb3B0aW9uIGAiLS10cmFjayJgIHdoaWNoIGlzICdvbicgYnkgZGVmYXVsdC4gWW91Ci1jYW4gdXNlIGAiLS1uby10cmFjayJgIHRvIG92ZXJyaWRlIHRoYXQgYmVoYXZpb3VyLiBUaGUgc2FtZSBnb2VzIGZvciBgIi0tY29sb3IiYAotYW5kIGAiLS1uby1jb2xvciJgLgorT3B0aW9ucyB3aXRoIGxvbmcgb3B0aW9uIG5hbWVzIGNhbiBiZSBuZWdhdGVkIGJ5IHByZWZpeGluZyBgLS1uby1gLiBGb3IKK2V4YW1wbGUsIGBnaXQgYnJhbmNoYCBoYXMgdGhlIG9wdGlvbiBgLS10cmFja2Agd2hpY2ggaXMgJ29uJyBieSBkZWZhdWx0LiBZb3UKK2NhbiB1c2UgYC0tbm8tdHJhY2tgIHRvIG92ZXJyaWRlIHRoYXQgYmVoYXZpb3VyLiBUaGUgc2FtZSBnb2VzIGZvciBgLS1jb2xvcmAKK2FuZCBgLS1uby1jb2xvcmAuCiAKIAogQWdncmVnYXRpbmcgc2hvcnQgb3B0aW9ucwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogQ29tbWFuZHMgdGhhdCBzdXBwb3J0IHRoZSBlbmhhbmNlZCBvcHRpb24gcGFyc2VyIGFsbG93IHlvdSB0byBhZ2dyZWdhdGUgc2hvcnQKLW9wdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIGZvciBleGFtcGxlIHVzZSBgImdpdCBybSAtcmYiYCBvcgotYCJnaXQgY2xlYW4gLWZkeCJgLgorb3B0aW9ucy4gVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gZm9yIGV4YW1wbGUgdXNlIGBnaXQgcm0gLXJmYCBvcgorYGdpdCBjbGVhbiAtZmR4YC4KIAogCiBTZXBhcmF0aW5nIGFyZ3VtZW50IGZyb20gdGhlIG9wdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRjb3JlLXR1dG9yaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y29yZS10dXRvcmlhbC50eHQKaW5kZXggZTRkZDU1MS4uYjM2NDBjNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRjb3JlLXR1dG9yaWFsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGNvcmUtdHV0b3JpYWwudHh0CkBAIC0xMiw3ICsxMiw3IEBACiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KIAotVGhpcyB0dXRvcmlhbCBleHBsYWlucyBob3cgdG8gdXNlIHRoZSAiY29yZSIgZ2l0IHByb2dyYW1zIHRvIHNldCB1cCBhbmQKK1RoaXMgdHV0b3JpYWwgZXhwbGFpbnMgaG93IHRvIHVzZSB0aGUgImNvcmUiIGdpdCBjb21tYW5kcyB0byBzZXQgdXAgYW5kCiB3b3JrIHdpdGggYSBnaXQgcmVwb3NpdG9yeS4KIAogSWYgeW91IGp1c3QgbmVlZCB0byB1c2UgZ2l0IGFzIGEgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0geW91IG1heSBwcmVmZXIKQEAgLTEyNDMsMTAgKzEyNDMsMTAgQEAKIC0tLS0tLS0tLS0tLQogCiBJbiBvdXIgZXhhbXBsZSBvZiBvbmx5IHR3byBmaWxlcywgd2UgZGlkIG5vdCBoYXZlIHVuY2hhbmdlZAotZmlsZXMgc28gb25seSAnZXhhbXBsZScgcmVzdWx0ZWQgaW4gY29sbGFwc2luZywgYnV0IGluIHJlYWwtbGlmZQotbGFyZ2UgcHJvamVjdHMsIG9ubHkgc21hbGwgbnVtYmVyIG9mIGZpbGVzIGNoYW5nZSBpbiBvbmUgY29tbWl0LAotYW5kIHRoaXMgJ2NvbGxhcHNpbmcnIHRlbmRzIHRvIHRyaXZpYWxseSBtZXJnZSBtb3N0IG9mIHRoZSBwYXRocwotZmFpcmx5IHF1aWNrbHksIGxlYXZpbmcgb25seSBhIGhhbmRmdWwgdGhlIHJlYWwgY2hhbmdlcyBpbiBub24temVybworZmlsZXMgc28gb25seSAnZXhhbXBsZScgcmVzdWx0ZWQgaW4gY29sbGFwc2luZy4gIEJ1dCBpbiByZWFsLWxpZmUKK2xhcmdlIHByb2plY3RzLCB3aGVuIG9ubHkgYSBzbWFsbCBudW1iZXIgb2YgZmlsZXMgY2hhbmdlIGluIG9uZSBjb21taXQsCit0aGlzICdjb2xsYXBzaW5nJyB0ZW5kcyB0byB0cml2aWFsbHkgbWVyZ2UgbW9zdCBvZiB0aGUgcGF0aHMKK2ZhaXJseSBxdWlja2x5LCBsZWF2aW5nIG9ubHkgYSBoYW5kZnVsIG9mIHJlYWwgY2hhbmdlcyBpbiBub24temVybwogc3RhZ2VzLgogCiBUbyBsb29rIGF0IG9ubHkgbm9uLXplcm8gc3RhZ2VzLCB1c2UgYFwtLXVubWVyZ2VkYCBmbGFnOgpAQCAtMTMyOCw3ICsxMzI4LDcgQEAKIGRvbmUgb25seSBvbmNlLgogCiBbTk9URV0KLSdnaXQtcHVzaCcgdXNlcyBhIHBhaXIgb2YgcHJvZ3JhbXMsCisnZ2l0LXB1c2gnIHVzZXMgYSBwYWlyIG9mIGNvbW1hbmRzLAogJ2dpdC1zZW5kLXBhY2snIG9uIHlvdXIgbG9jYWwgbWFjaGluZSwgYW5kICdnaXQtcmVjZWl2ZS1wYWNrJwogb24gdGhlIHJlbW90ZSBtYWNoaW5lLiBUaGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSB0d28gb3ZlcgogdGhlIG5ldHdvcmsgaW50ZXJuYWxseSB1c2VzIGFuIFNTSCBjb25uZWN0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRjdnMtbWlncmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y3ZzLW1pZ3JhdGlvbi50eHQKaW5kZXggYWFhN2VmNy4uMGU0OWMxYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRjdnMtbWlncmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGN2cy1taWdyYXRpb24udHh0CkBAIC0xMTgsNyArMTE4LDcgQEAKIEZpcnN0LCBpbnN0YWxsIHZlcnNpb24gMi4xIG9yIGhpZ2hlciBvZiBjdnNwcyBmcm9tCiBsaW5rOmh0dHA6Ly93d3cuY29iaXRlLmNvbS9jdnNwcy9baHR0cDovL3d3dy5jb2JpdGUuY29tL2N2c3BzL10gYW5kIG1ha2UKIHN1cmUgaXQgaXMgaW4geW91ciBwYXRoLiAgVGhlbiBjZCB0byBhIGNoZWNrZWQgb3V0IENWUyB3b3JraW5nIGRpcmVjdG9yeQotb2YgdGhlIHByb2plY3QgeW91IGFyZSBpbnRlcmVzdGVkIGluIGFuZCBydW4gJ2dpdC1jdnNpbXBvcnQnOgorb2YgdGhlIHByb2plY3QgeW91IGFyZSBpbnRlcmVzdGVkIGluIGFuZCBydW4gbGlua2dpdDpnaXQtY3ZzaW1wb3J0WzFdOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIGdpdCBjdnNpbXBvcnQgLUMgPGRlc3RpbmF0aW9uPiA8bW9kdWxlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRob29rcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dAppbmRleCAyOGE4YWJjLi4xYzczNjczIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dApAQCAtMTUsNyArMTUsNyBAQAogCiBIb29rcyBhcmUgbGl0dGxlIHNjcmlwdHMgeW91IGNhbiBwbGFjZSBpbiBgJEdJVF9ESVIvaG9va3NgCiBkaXJlY3RvcnkgdG8gdHJpZ2dlciBhY3Rpb24gYXQgY2VydGFpbiBwb2ludHMuICBXaGVuCi0nZ2l0LWluaXQnIGlzIHJ1biwgYSBoYW5kZnVsIGV4YW1wbGUgaG9va3MgYXJlIGNvcGllZCBpbiB0aGUKKydnaXQtaW5pdCcgaXMgcnVuLCBhIGhhbmRmdWwgb2YgZXhhbXBsZSBob29rcyBhcmUgY29waWVkIGludG8gdGhlCiBgaG9va3NgIGRpcmVjdG9yeSBvZiB0aGUgbmV3IHJlcG9zaXRvcnksIGJ1dCBieSBkZWZhdWx0IHRoZXkgYXJlCiBhbGwgZGlzYWJsZWQuICBUbyBlbmFibGUgYSBob29rLCByZW5hbWUgaXQgYnkgcmVtb3ZpbmcgaXRzIGAuc2FtcGxlYAogc3VmZml4LgpAQCAtMTUxLDYgKzE1MSwxMCBAQAogZmxhZz0xKSBvciBhIGZpbGUgY2hlY2tvdXQgKHJldHJpZXZpbmcgYSBmaWxlIGZyb20gdGhlIGluZGV4LCBmbGFnPTApLgogVGhpcyBob29rIGNhbm5vdCBhZmZlY3QgdGhlIG91dGNvbWUgb2YgJ2dpdC1jaGVja291dCcuCiAKK0l0IGlzIGFsc28gcnVuIGFmdGVyICdnaXQtY2xvbmUnLCB1bmxlc3MgdGhlIC0tbm8tY2hlY2tvdXQgKC1uKSBvcHRpb24gaXMKK3VzZWQuIFRoZSBmaXJzdCBwYXJhbWV0ZXIgZ2l2ZW4gdG8gdGhlIGhvb2sgaXMgdGhlIG51bGwtcmVmLCB0aGUgc2Vjb25kIHRoZQorcmVmIG9mIHRoZSBuZXcgSEVBRCBhbmQgdGhlIGZsYWcgaXMgYWx3YXlzIDEuCisKIFRoaXMgaG9vayBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIHJlcG9zaXRvcnkgdmFsaWRpdHkgY2hlY2tzLCBhdXRvLWRpc3BsYXkKIGRpZmZlcmVuY2VzIGZyb20gdGhlIHByZXZpb3VzIEhFQUQgaWYgZGlmZmVyZW50LCBvciBzZXQgd29ya2luZyBkaXIgbWV0YWRhdGEKIHByb3BlcnRpZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGsudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRrLnR4dAppbmRleCA0NjczYTc1Li5jZjQ2NWNiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGsudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0ay50eHQKQEAgLTQ3LDcgKzQ3LDggQEAKIAogCUFmdGVyIGFuIGF0dGVtcHQgdG8gbWVyZ2Ugc3RvcHMgd2l0aCBjb25mbGljdHMsIHNob3cgdGhlIGNvbW1pdHMgb24KIAl0aGUgaGlzdG9yeSBiZXR3ZWVuIHR3byBicmFuY2hlcyAoaS5lLiB0aGUgSEVBRCBhbmQgdGhlIE1FUkdFX0hFQUQpCi0JdGhhdCBtb2RpZnkgdGhlIGNvbmZsaWN0ZWQgZmlsZXMuCisJdGhhdCBtb2RpZnkgdGhlIGNvbmZsaWN0ZWQgZmlsZXMgYW5kIGRvIG5vdCBleGlzdCBvbiBhbGwgdGhlIGhlYWRzCisJYmVpbmcgbWVyZ2VkLgogCiAtLWFyZ3NjbWQ9PGNvbW1hbmQ+OjoKIAlDb21tYW5kIHRvIGJlIHJ1biBlYWNoIHRpbWUgZ2l0ayBoYXMgdG8gZGV0ZXJtaW5lIHRoZSBsaXN0IG9mCkBAIC03Myw3ICs3NCw3IEBACiA8cGF0aD4uLi46OgogCiAJTGltaXQgY29tbWl0cyB0byB0aGUgb25lcyB0b3VjaGluZyBmaWxlcyBpbiB0aGUgZ2l2ZW4gcGF0aHMuIE5vdGUsIHRvCi0JYXZvaWQgYW1iaWd1aXR5IHdydC4gcmV2aXNpb24gbmFtZXMgdXNlICItLSIgdG8gc2VwYXJhdGUgdGhlIHBhdGhzCisJYXZvaWQgYW1iaWd1aXR5IHdpdGggcmVzcGVjdCB0byByZXZpc2lvbiBuYW1lcyB1c2UgIi0tIiB0byBzZXBhcmF0ZSB0aGUgcGF0aHMKIAlmcm9tIGFueSBwcmVjZWRpbmcgb3B0aW9ucy4KIAogRXhhbXBsZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0bW9kdWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdG1vZHVsZXMudHh0CmluZGV4IGQxYTE3ZTIuLjVkYWY3NTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0bW9kdWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dApAQCAtMzAsNiArMzAsMTcgQEAKIHN1Ym1vZHVsZS48bmFtZT4udXJsOjoKIAlEZWZpbmVzIGFuIHVybCBmcm9tIHdoZXJlIHRoZSBzdWJtb2R1bGUgcmVwb3NpdG9yeSBjYW4gYmUgY2xvbmVkLgogCitzdWJtb2R1bGUuPG5hbWU+LnVwZGF0ZTo6CisJRGVmaW5lcyB3aGF0IHRvIGRvIHdoZW4gdGhlIHN1Ym1vZHVsZSBpcyB1cGRhdGVkIGJ5IHRoZSBzdXBlcnByb2plY3QuCisJSWYgJ2NoZWNrb3V0JyAodGhlIGRlZmF1bHQpLCB0aGUgbmV3IGNvbW1pdCBzcGVjaWZpZWQgaW4gdGhlCisJc3VwZXJwcm9qZWN0IHdpbGwgYmUgY2hlY2tlZCBvdXQgaW4gdGhlIHN1Ym1vZHVsZSBvbiBhIGRldGFjaGVkIEhFQUQuCisJSWYgJ3JlYmFzZScsIHRoZSBjdXJyZW50IGJyYW5jaCBvZiB0aGUgc3VibW9kdWxlIHdpbGwgYmUgcmViYXNlZCBvbnRvCisJdGhlIGNvbW1pdCBzcGVjaWZpZWQgaW4gdGhlIHN1cGVycHJvamVjdC4gSWYgJ21lcmdlJywgdGhlIGNvbW1pdAorCXNwZWNpZmllZCBpbiB0aGUgc3VwZXJwcm9qZWN0IHdpbGwgYmUgbWVyZ2VkIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoCisJaW4gdGhlIHN1Ym1vZHVsZS4KKwlUaGlzIGNvbmZpZyBvcHRpb24gaXMgb3ZlcnJpZGRlbiBpZiAnZ2l0IHN1Ym1vZHVsZSB1cGRhdGUnIGlzIGdpdmVuCisJdGhlICctLW1lcmdlJyBvciAnLS1yZWJhc2UnIG9wdGlvbnMuCisKIAogRVhBTVBMRVMKIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLTIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC0yLnR4dAppbmRleCBhMDU3YjUwLi5kYzhmYzNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLTIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwtMi50eHQKQEAgLTMyLDEyICszMiwxMiBAQAogJCBlY2hvICdoZWxsbyB3b3JsZCcgPiBmaWxlLnR4dAogJCBnaXQgYWRkIC4KICQgZ2l0IGNvbW1pdCAtYSAtbSAiaW5pdGlhbCBjb21taXQiCi1bbWFzdGVyIChyb290LWNvbW1pdCldIGNyZWF0ZWQgNTQxOTZjYzogImluaXRpYWwgY29tbWl0IgorW21hc3RlciAocm9vdC1jb21taXQpIDU0MTk2Y2NdIGluaXRpYWwgY29tbWl0CiAgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUudHh0CiAkIGVjaG8gJ2hlbGxvIHdvcmxkIScgPmZpbGUudHh0CiAkIGdpdCBjb21taXQgLWEgLW0gImFkZCBlbXBoYXNpcyIKLVttYXN0ZXJdIGNyZWF0ZWQgYzRkNTlmMzogImFkZCBlbXBoYXNpcyIKK1ttYXN0ZXIgYzRkNTlmM10gYWRkIGVtcGhhc2lzCiAgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLnR4dAppbmRleCA0NThmYWZkLi5jZjA2ODljIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLnR4dApAQCAtMzA4LDkgKzMwOCw3IEBACiAKIFRoaXMgbWVyZ2VzIHRoZSBjaGFuZ2VzIGZyb20gQm9iJ3MgIm1hc3RlciIgYnJhbmNoIGludG8gQWxpY2UncwogY3VycmVudCBicmFuY2guICBJZiBBbGljZSBoYXMgbWFkZSBoZXIgb3duIGNoYW5nZXMgaW4gdGhlIG1lYW50aW1lLAotdGhlbiBzaGUgbWF5IG5lZWQgdG8gbWFudWFsbHkgZml4IGFueSBjb25mbGljdHMuICAoTm90ZSB0aGF0IHRoZQotIm1hc3RlciIgYXJndW1lbnQgaW4gdGhlIGFib3ZlIGNvbW1hbmQgaXMgYWN0dWFsbHkgdW5uZWNlc3NhcnksIGFzIGl0Ci1pcyB0aGUgZGVmYXVsdC4pCit0aGVuIHNoZSBtYXkgbmVlZCB0byBtYW51YWxseSBmaXggYW55IGNvbmZsaWN0cy4KIAogVGhlICJwdWxsIiBjb21tYW5kIHRodXMgcGVyZm9ybXMgdHdvIG9wZXJhdGlvbnM6IGl0IGZldGNoZXMgY2hhbmdlcwogZnJvbSBhIHJlbW90ZSBicmFuY2gsIHRoZW4gbWVyZ2VzIHRoZW0gaW50byB0aGUgY3VycmVudCBicmFuY2guCkBAIC0zMzQsMTEgKzMzMiwxMSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgb3BlcmF0aW9uIGlzIHNhZmUgZXZlbiBpZiBBbGljZSBoYXMgdW5jb21taXR0ZWQgbG9jYWwgY2hhbmdlcy4KLVRoZSByYW5nZSBub3RhdGlvbiBIRUFELi5GRVRDSF9IRUFEIiBtZWFucyAic2hvdyBldmVyeXRoaW5nIHRoYXQgaXMgcmVhY2hhYmxlCi1mcm9tIHRoZSBGRVRDSF9IRUFEIGJ1dCBleGNsdWRlIGFueXRoaW5nIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gSEVBRC4KK1RoZSByYW5nZSBub3RhdGlvbiAiSEVBRC4uRkVUQ0hfSEVBRCIgbWVhbnMgInNob3cgZXZlcnl0aGluZyB0aGF0IGlzIHJlYWNoYWJsZQorZnJvbSB0aGUgRkVUQ0hfSEVBRCBidXQgZXhjbHVkZSBhbnl0aGluZyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIEhFQUQiLgogQWxpY2UgYWxyZWFkeSBrbm93cyBldmVyeXRoaW5nIHRoYXQgbGVhZHMgdG8gaGVyIGN1cnJlbnQgc3RhdGUgKEhFQUQpLAotYW5kIHJldmlld2luZyB3aGF0IEJvYiBoYXMgaW4gaGlzIHN0YXRlIChGRVRDSF9IRUFEKSB0aGF0IHNoZSBoYXMgbm90Ci1zZWVuIHdpdGggdGhpcyBjb21tYW5kCithbmQgcmV2aWV3cyB3aGF0IEJvYiBoYXMgaW4gaGlzIHN0YXRlIChGRVRDSF9IRUFEKSB0aGF0IHNoZSBoYXMgbm90CitzZWVuIHdpdGggdGhpcyBjb21tYW5kLgogCiBJZiBBbGljZSB3YW50cyB0byB2aXN1YWxpemUgd2hhdCBCb2IgZGlkIHNpbmNlIHRoZWlyIGhpc3RvcmllcyBmb3JrZWQKIHNoZSBjYW4gaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kOgpAQCAtMzc3LDkgKzM3NSw5IEBACiBhbGljZSQgZ2l0IHJlbW90ZSBhZGQgYm9iIC9ob21lL2JvYi9teXJlcG8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaXRoIHRoaXMsIEFsaWNlIGNhbiBwZXJmb3JtIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSAicHVsbCIgb3BlcmF0aW9uIGFsb25lIHVzaW5nIHRoZQotJ2dpdC1mZXRjaCcgY29tbWFuZCB3aXRob3V0IG1lcmdpbmcgdGhlbSB3aXRoIGhlciBvd24gYnJhbmNoLAotdXNpbmc6CitXaXRoIHRoaXMsIEFsaWNlIGNhbiBwZXJmb3JtIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSAicHVsbCIgb3BlcmF0aW9uCithbG9uZSB1c2luZyB0aGUgJ2dpdC1mZXRjaCcgY29tbWFuZCB3aXRob3V0IG1lcmdpbmcgdGhlbSB3aXRoIGhlciBvd24KK2JyYW5jaCwgdXNpbmc6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGFsaWNlJCBnaXQgZmV0Y2ggYm9iCkBAIC01NjgsMjIgKzU2NiwyMiBAQAogCiBZb3UgY2FuIGFsc28gZ2l2ZSAnZ2l0LWxvZycgYSAicmFuZ2UiIG9mIGNvbW1pdHMgd2hlcmUgdGhlIGZpcnN0IGlzIG5vdAogbmVjZXNzYXJpbHkgYW4gYW5jZXN0b3Igb2YgdGhlIHNlY29uZDsgZm9yIGV4YW1wbGUsIGlmIHRoZSB0aXBzIG9mCi10aGUgYnJhbmNoZXMgInN0YWJsZS1yZWxlYXNlIiBhbmQgIm1hc3RlciIgZGl2ZXJnZWQgZnJvbSBhIGNvbW1vbgordGhlIGJyYW5jaGVzICJzdGFibGUiIGFuZCAibWFzdGVyIiBkaXZlcmdlZCBmcm9tIGEgY29tbW9uCiBjb21taXQgc29tZSB0aW1lIGFnbywgdGhlbgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdCBsb2cgc3RhYmxlLi5leHBlcmltZW50YWwKKyQgZ2l0IGxvZyBzdGFibGUuLm1hc3RlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi13aWxsIGxpc3QgY29tbWl0cyBtYWRlIGluIHRoZSBleHBlcmltZW50YWwgYnJhbmNoIGJ1dCBub3QgaW4gdGhlCit3aWxsIGxpc3QgY29tbWl0cyBtYWRlIGluIHRoZSBtYXN0ZXIgYnJhbmNoIGJ1dCBub3QgaW4gdGhlCiBzdGFibGUgYnJhbmNoLCB3aGlsZQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdCBsb2cgZXhwZXJpbWVudGFsLi5zdGFibGUKKyQgZ2l0IGxvZyBtYXN0ZXIuLnN0YWJsZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB3aWxsIHNob3cgdGhlIGxpc3Qgb2YgY29tbWl0cyBtYWRlIG9uIHRoZSBzdGFibGUgYnJhbmNoIGJ1dCBub3QKLXRoZSBleHBlcmltZW50YWwgYnJhbmNoLgordGhlIG1hc3RlciBicmFuY2guCiAKIFRoZSAnZ2l0LWxvZycgY29tbWFuZCBoYXMgYSB3ZWFrbmVzczogaXQgbXVzdCBwcmVzZW50IGNvbW1pdHMgaW4gYQogbGlzdC4gIFdoZW4gdGhlIGhpc3RvcnkgaGFzIGxpbmVzIG9mIGRldmVsb3BtZW50IHRoYXQgZGl2ZXJnZWQgYW5kCkBAIC02NTIsNiArNjUwLDkgQEAKICAgICBzbWFydCBlbm91Z2ggdG8gcGVyZm9ybSBhIGNsb3NlLXRvLW9wdGltYWwgc2VhcmNoIGV2ZW4gaW4gdGhlCiAgICAgY2FzZSBvZiBjb21wbGV4IG5vbi1saW5lYXIgaGlzdG9yeSB3aXRoIGxvdHMgb2YgbWVyZ2VkIGJyYW5jaGVzLgogCisgICogbGlua2dpdDpnaXR3b3JrZmxvd3NbN106IEdpdmVzIGFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkCisgICAgd29ya2Zsb3dzLgorCiAgICogbGluazpldmVyeWRheS5odG1sW0V2ZXJ5ZGF5IEdJVCB3aXRoIDIwIENvbW1hbmRzIE9yIFNvXQogCiAgICogbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddOiBHaXQgZm9yIENWUyB1c2Vycy4KQEAgLTY2Myw2ICs2NjQsNyBAQAogbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLAogbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwKIGxpbmtnaXQ6Z2l0LWhlbHBbMV0sCitsaW5rZ2l0OmdpdHdvcmtmbG93c1s3XSwKIGxpbms6ZXZlcnlkYXkuaHRtbFtFdmVyeWRheSBnaXRdLAogbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9nbG9zc2FyeS1jb250ZW50LnR4dCBiL0RvY3VtZW50YXRpb24vZ2xvc3NhcnktY29udGVudC50eHQKaW5kZXggOWFmY2E3NS4uNTcyMzc0ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9nbG9zc2FyeS1jb250ZW50LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dsb3NzYXJ5LWNvbnRlbnQudHh0CkBAIC0yNjIsNyArMjYyLDcgQEAKIAknb3JpZ2luJyBpcyB1c2VkIGZvciB0aGF0IHB1cnBvc2UuIE5ldyB1cHN0cmVhbSB1cGRhdGVzCiAJd2lsbCBiZSBmZXRjaGVkIGludG8gcmVtb3RlIDw8ZGVmX3RyYWNraW5nX2JyYW5jaCx0cmFja2luZyBicmFuY2hlcz4+IG5hbWVkCiAJb3JpZ2luL25hbWUtb2YtdXBzdHJlYW0tYnJhbmNoLCB3aGljaCB5b3UgY2FuIHNlZSB1c2luZwotCSJgZ2l0IGJyYW5jaCAtcmAiLgorCWBnaXQgYnJhbmNoIC1yYC4KIAogW1tkZWZfcGFja11dcGFjazo6CiAJQSBzZXQgb2Ygb2JqZWN0cyB3aGljaCBoYXZlIGJlZW4gY29tcHJlc3NlZCBpbnRvIG9uZSBmaWxlICh0byBzYXZlIHNwYWNlCkBAIC00NDksNiArNDQ5LDEyIEBACiAJQW4gPDxkZWZfb2JqZWN0LG9iamVjdD4+IHdoaWNoIGlzIG5vdCA8PGRlZl9yZWFjaGFibGUscmVhY2hhYmxlPj4gZnJvbSBhCiAJPDxkZWZfYnJhbmNoLGJyYW5jaD4+LCA8PGRlZl90YWcsdGFnPj4sIG9yIGFueSBvdGhlciByZWZlcmVuY2UuCiAKK1tbZGVmX3Vwc3RyZWFtX2JyYW5jaF1ddXBzdHJlYW0gYnJhbmNoOjoKKwlUaGUgZGVmYXVsdCA8PGRlZl9icmFuY2gsYnJhbmNoPj4gdGhhdCBpcyBtZXJnZWQgaW50byB0aGUgYnJhbmNoIGluCisJcXVlc3Rpb24gKG9yIHRoZSBicmFuY2ggaW4gcXVlc3Rpb24gaXMgcmViYXNlZCBvbnRvKS4gSXQgaXMgY29uZmlndXJlZAorCXZpYSBicmFuY2guPG5hbWU+LnJlbW90ZSBhbmQgYnJhbmNoLjxuYW1lPi5tZXJnZS4gSWYgdGhlIHVwc3RyZWFtIGJyYW5jaAorCW9mICdBJyBpcyAnb3JpZ2luL0InIHNvbWV0aW1lcyB3ZSBzYXkgIidBJyBpcyB0cmFja2luZyAnb3JpZ2luL0InIi4KKwogW1tkZWZfd29ya2luZ190cmVlXV13b3JraW5nIHRyZWU6OgogCVRoZSB0cmVlIG9mIGFjdHVhbCBjaGVja2VkIG91dCBmaWxlcy4gIFRoZSB3b3JraW5nIHRyZWUgaXMKIAlub3JtYWxseSBlcXVhbCB0byB0aGUgPDxkZWZfSEVBRCxIRUFEPj4gcGx1cyBhbnkgbG9jYWwgY2hhbmdlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJhc2UtZnJvbS1pbnRlcm5hbC1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJhc2UtZnJvbS1pbnRlcm5hbC1icmFuY2gudHh0CmluZGV4IGQyMTRkNGIuLjc0YTFjMGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaG93dG8vcmViYXNlLWZyb20taW50ZXJuYWwtYnJhbmNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlYmFzZS1mcm9tLWludGVybmFsLWJyYW5jaC50eHQKQEAgLTI3LDcgKzI3LDcgQEAKIEkganVzdCBoYXZlIGRvbmUgYSBzaW1wbGVyIG9uZSwgdGhpcyB0aW1lIHVzaW5nIG9ubHkgdGhlIGNvcmUKIEdJVCB0b29scy4KIAotSSBoYWQgYSBoYW5kZnVsIGNvbW1pdHMgdGhhdCB3ZXJlIGFoZWFkIG9mIG1hc3RlciBpbiBwdSwgYW5kIEkKK0kgaGFkIGEgaGFuZGZ1bCBvZiBjb21taXRzIHRoYXQgd2VyZSBhaGVhZCBvZiBtYXN0ZXIgaW4gcHUsIGFuZCBJCiB3YW50ZWQgdG8gYWRkIHNvbWUgZG9jdW1lbnRhdGlvbiBieXBhc3NpbmcgbXkgdXN1YWwgaGFiaXQgb2YKIHBsYWNpbmcgbmV3IHRoaW5ncyBpbiBwdSBmaXJzdC4gIEF0IHRoZSBiZWdpbm5pbmcsIHRoZSBjb21taXQKIGFuY2VzdHJ5IGdyYXBoIGxvb2tlZCBsaWtlIHRoaXM6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS50eHQKaW5kZXggMzliMWRhNC4uM2I0YTM5MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZXZlcnQtYS1mYXVsdHktbWVyZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWEtZmF1bHR5LW1lcmdlLnR4dApAQCAtMzksNyArMzksNyBAQAogCiAgICAgJCBnaXQgcmV2ZXJ0IC1tIDEgTQogCi1BZnRlciB0aGUgZGV2ZWxwZXJzIG9mIHRoZSBzaWRlIGJyYW5jaCBmaXhlcyB0aGVpciBtaXN0YWtlcywgdGhlIGhpc3RvcnkKK0FmdGVyIHRoZSBkZXZlbG9wZXJzIG9mIHRoZSBzaWRlIGJyYW5jaCBmaXggdGhlaXIgbWlzdGFrZXMsIHRoZSBoaXN0b3J5CiBtYXkgbG9vayBsaWtlIHRoaXM6CiAKICAtLS1vLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teApAQCAtMTE2LDcgKzExNiw3IEBACiAJICAgICAgIC8gICAgICAgICAgICAgICAgIFwgICAgICAgICAvCiAgICAgICAgLS0tQS0tLUIgICAgICAgICAgICAgICAgICAgQSctLUInLS1DJwogCi13aGVyZSBZIGlzIHRoZSByZXZlcnQgb2YgVywgQScgYW5kIEInYXJlIHJlcm9sbGVkIEEgYW5kIEIsIGFuZCB0aGVyZSBtYXkKK3doZXJlIFkgaXMgdGhlIHJldmVydCBvZiBXLCBBJyBhbmQgQicgYXJlIHJlcm9sbGVkIEEgYW5kIEIsIGFuZCB0aGVyZSBtYXkKIGFsc28gYmUgYSBmdXJ0aGVyIGZpeC11cCBDJyBvbiB0aGUgc2lkZSBicmFuY2guICAiZGlmZiBZXi4uWSIgaXMgc2ltaWxhcgogdG8gImRpZmYgLVIgV14uLlciICh3aGljaCBpbiB0dXJuIG1lYW5zIGl0IGlzIHNpbWlsYXIgdG8gImRpZmYgTV4uLk0iKSwKIGFuZCAiZGlmZiBBJ14uLkMnIiBieSBkZWZpbml0aW9uIHdvdWxkIGJlIHNpbWlsYXIgYnV0IGRpZmZlcmVudCBmcm9tIHRoYXQsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vc2V0dXAtZ2l0LXNlcnZlci1vdmVyLWh0dHAudHh0CmluZGV4IDQwMzI3NDguLjYyMmVlNWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaG93dG8vc2V0dXAtZ2l0LXNlcnZlci1vdmVyLWh0dHAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vc2V0dXAtZ2l0LXNlcnZlci1vdmVyLWh0dHAudHh0CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAgICBSZXF1aXJlIHZhbGlkLXVzZXIKICAgICA8L0xvY2F0aW9uPgogCi0gICAgRGViaWFuIGF1dG9tYXRpY2FsbHkgcmVhZHMgYWxsIGZpbGVzIHVuZGVyIC9ldGMvYXBhY2gyL2NvbmYuZC4KKyAgICBEZWJpYW4gYXV0b21hdGljYWxseSByZWFkcyBhbGwgZmlsZXMgdW5kZXIgL2V0Yy9hcGFjaGUyL2NvbmYuZC4KIAogVGhlIHBhc3N3b3JkIGZpbGUgY2FuIGJlIHNvbWV3aGVyZSBlbHNlLCBidXQgaXQgaGFzIHRvIGJlIHJlYWRhYmxlIGJ5CiBBcGFjaGUgYW5kIHByZWZlcmFibHkgbm90IHJlYWRhYmxlIGJ5IHRoZSB3b3JsZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWFpbG1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL21haWxtYXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OGYwNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21haWxtYXAudHh0CkBAIC0wLDAgKzEsNzQgQEAKK0lmIHRoZSBmaWxlIGAubWFpbG1hcGAgZXhpc3RzIGF0IHRoZSB0b3BsZXZlbCBvZiB0aGUgcmVwb3NpdG9yeSwgb3IgYXQKK3RoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IHRoZSBtYWlsbWFwLmZpbGUgY29uZmlndXJhdGlvbiBvcHRpb24sIGl0CitpcyB1c2VkIHRvIG1hcCBhdXRob3IgYW5kIGNvbW1pdHRlciBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIHRvCitjYW5vbmljYWwgcmVhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzLgorCitJbiB0aGUgc2ltcGxlIGZvcm0sIGVhY2ggbGluZSBpbiB0aGUgZmlsZSBjb25zaXN0cyBvZiB0aGUgY2Fub25pY2FsCityZWFsIG5hbWUgb2YgYW4gYXV0aG9yLCB3aGl0ZXNwYWNlLCBhbmQgYW4gZW1haWwgYWRkcmVzcyB1c2VkIGluIHRoZQorY29tbWl0IChlbmNsb3NlZCBieSAnPCcgYW5kICc+JykgdG8gbWFwIHRvIHRoZSBuYW1lLiBGb3IgZXhhbXBsZToKKy0tCisJUHJvcGVyIE5hbWUgPGNvbW1pdEBlbWFpbC54eD4KKy0tCisKK1RoZSBtb3JlIGNvbXBsZXggZm9ybXMgYXJlOgorLS0KKwk8cHJvcGVyQGVtYWlsLnh4PiA8Y29tbWl0QGVtYWlsLnh4PgorLS0KK3doaWNoIGFsbG93cyBtYWlsbWFwIHRvIHJlcGxhY2Ugb25seSB0aGUgZW1haWwgcGFydCBvZiBhIGNvbW1pdCwgYW5kOgorLS0KKwlQcm9wZXIgTmFtZSA8cHJvcGVyQGVtYWlsLnh4PiA8Y29tbWl0QGVtYWlsLnh4PgorLS0KK3doaWNoIGFsbG93cyBtYWlsbWFwIHRvIHJlcGxhY2UgYm90aCB0aGUgbmFtZSBhbmQgdGhlIGVtYWlsIG9mIGEKK2NvbW1pdCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIGNvbW1pdCBlbWFpbCBhZGRyZXNzLCBhbmQ6CistLQorCVByb3BlciBOYW1lIDxwcm9wZXJAZW1haWwueHg+IENvbW1pdCBOYW1lIDxjb21taXRAZW1haWwueHg+CistLQord2hpY2ggYWxsb3dzIG1haWxtYXAgdG8gcmVwbGFjZSBib3RoIHRoZSBuYW1lIGFuZCB0aGUgZW1haWwgb2YgYQorY29tbWl0IG1hdGNoaW5nIGJvdGggdGhlIHNwZWNpZmllZCBjb21taXQgbmFtZSBhbmQgZW1haWwgYWRkcmVzcy4KKworRXhhbXBsZSAxOiBZb3VyIGhpc3RvcnkgY29udGFpbnMgY29tbWl0cyBieSB0d28gYXV0aG9ycywgSmFuZQorYW5kIEpvZSwgd2hvc2UgbmFtZXMgYXBwZWFyIGluIHRoZSByZXBvc2l0b3J5IHVuZGVyIHNldmVyYWwgZm9ybXM6CisKKy0tLS0tLS0tLS0tLQorSm9lIERldmVsb3BlciA8am9lQGV4YW1wbGUuY29tPgorSm9lIFIuIERldmVsb3BlciA8am9lQGV4YW1wbGUuY29tPgorSmFuZSBEb2UgPGphbmVAZXhhbXBsZS5jb20+CitKYW5lIERvZSA8amFuZUBsYXB0b3AuKG5vbmUpPgorSmFuZSBELiA8amFuZUBkZXNrdG9wLihub25lKT4KKy0tLS0tLS0tLS0tLQorCitOb3cgc3VwcG9zZSB0aGF0IEpvZSB3YW50cyBoaXMgbWlkZGxlIG5hbWUgaW5pdGlhbCB1c2VkLCBhbmQgSmFuZQorcHJlZmVycyBoZXIgZmFtaWx5IG5hbWUgZnVsbHkgc3BlbGxlZCBvdXQuIEEgcHJvcGVyIGAubWFpbG1hcGAgZmlsZQord291bGQgbG9vayBsaWtlOgorCistLS0tLS0tLS0tLS0KK0phbmUgRG9lICAgICAgICAgPGphbmVAZGVza3RvcC4obm9uZSk+CitKb2UgUi4gRGV2ZWxvcGVyIDxqb2VAZXhhbXBsZS5jb20+CistLS0tLS0tLS0tLS0KKworTm90ZSBob3cgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW4gZW50cnkgZm9yIDxqYW5lQGxhcHRvcC4obm9uZSk+LCBiZWNhdXNlIHRoZQorcmVhbCBuYW1lIG9mIHRoYXQgYXV0aG9yIGlzIGFscmVhZHkgY29ycmVjdC4KKworRXhhbXBsZSAyOiBZb3VyIHJlcG9zaXRvcnkgY29udGFpbnMgY29tbWl0cyBmcm9tIHRoZSBmb2xsb3dpbmcKK2F1dGhvcnM6CisKKy0tLS0tLS0tLS0tLQorbmljazEgPGJ1Z3NAY29tcGFueS54eD4KK25pY2syIDxidWdzQGNvbXBhbnkueHg+CituaWNrMiA8bmljazJAY29tcGFueS54eD4KK3NhbnRhIDxtZUBjb21wYW55Lnh4PgorY2xhdXMgPG1lQGNvbXBhbnkueHg+CitDVE8gPGN0b0Bjb29tcGFueS54eD4KKy0tLS0tLS0tLS0tLQorCitUaGVuIHlvdSBtaWdodCB3YW50IGEgYC5tYWlsbWFwYCBmaWxlIHRoYXQgbG9va3MgbGlrZToKKy0tLS0tLS0tLS0tLQorPGN0b0Bjb21wYW55Lnh4PiAgICAgICAgICAgICAgICAgICAgICAgPGN0b0Bjb29tcGFueS54eD4KK1NvbWUgRHVkZSA8c29tZUBkdWRlLnh4PiAgICAgICAgIG5pY2sxIDxidWdzQGNvbXBhbnkueHg+CitPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4gICBuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PgorT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+ICAgICAgICAgPG5pY2syQGNvbXBhbnkueHg+CitTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PiA8bWVAY29tcGFueS54eD4KKy0tLS0tLS0tLS0tLQorCitVc2UgaGFzaCAnIycgZm9yIGNvbW1lbnRzIHRoYXQgYXJlIGVpdGhlciBvbiB0aGVpciBvd24gbGluZSwgb3IgYWZ0ZXIKK3RoZSBlbWFpbCBhZGRyZXNzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLTEuNzIueHNsIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLTEuNzIueHNsCmluZGV4IDQwNjVhM2EuLmI0ZDMxNWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWFucGFnZS0xLjcyLnhzbAorKysgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtMS43Mi54c2wKQEAgLTEsMjEgKzEsMTQgQEAKLTwhLS0gQmFzZWQgb24gY2FsbG91dHMueHNsLiBGaXhlcyBtYW4gcGFnZSBjYWxsb3V0cyBmb3IgRG9jQm9vayAxLjcyIFhTTCAtLT4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVyc2lvbj0iMS4wIj4KKzwhLS0gbWFucGFnZS0xLjcyLnhzbDoKKyAgICAgc3BlY2lhbCBzZXR0aW5ncyBmb3IgbWFucGFnZXMgcmVuZGVyZWQgZnJvbSBhc2NpaWRvYytkb2Nib29rCisgICAgIGhhbmRsZXMgcGVjdWxpYXJpdGllcyBpbiBkb2Nib29rLXhzbCAxLjcyLjAgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CiAKLTx4c2w6cGFyYW0gbmFtZT0ibWFuLm91dHB1dC5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KLTx4c2w6cGFyYW0gbmFtZT0icmVmZW50cnkubWV0YS5nZXQucXVpZXRseSIgc2VsZWN0PSIxIi8+Cis8eHNsOmltcG9ydCBocmVmPSJtYW5wYWdlLWJhc2UueHNsIi8+CiAKLTx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvIj4KLQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KCcmI3gyNTkzO2ZCKCcsc3Vic3RyaW5nLWFmdGVyKEBpZCwnLScpLCcpJiN4MjU5MztmUicpIi8+Ci08L3hzbDp0ZW1wbGF0ZT4KLTx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNhbGxvdXRsaXN0Ij4KLQk8eHNsOnRleHQ+JiN4MjMwMjtzcCYjMTA7PC94c2w6dGV4dD4KLQk8eHNsOmFwcGx5LXRlbXBsYXRlcy8+Ci0JPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KLTwveHNsOnRlbXBsYXRlPgotPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY2FsbG91dCI+Ci0JPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgnJiN4MjU5MztmQicsc3Vic3RyaW5nLWFmdGVyKEBhcmVhcmVmcywnLScpLCcuICYjeDI1OTM7ZlInKSIvPgotCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4KLQk8eHNsOnRleHQ+JiN4MjMwMjticiYjMTA7PC94c2w6dGV4dD4KLTwveHNsOnRlbXBsYXRlPgorPCEtLSB0aGVzZSBhcmUgdGhlIHNwZWNpYWwgdmFsdWVzIGZvciB0aGUgcm9mZiBjb250cm9sIGNoYXJhY3RlcnMKKyAgICAgbmVlZGVkIGZvciBkb2Nib29rLXhzbCAxLjcyLjAgLS0+Cis8eHNsOnBhcmFtIG5hbWU9ImdpdC5kb2Nib29rLmJhY2tzbGFzaCI+JiN4MjU5Mzs8L3hzbDpwYXJhbT4KKzx4c2w6cGFyYW0gbmFtZT0iZ2l0LmRvY2Jvb2suZG90IiAgICAgID4mI3gyMzAyOzwveHNsOnBhcmFtPgogCiA8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLWJhc2UueHNsIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLWJhc2UueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjRmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYmFzZS54c2wKQEAgLTAsMCArMSwzNSBAQAorPCEtLSBtYW5wYWdlLWJhc2UueHNsOgorICAgICBzcGVjaWFsIGZvcm1hdHRpbmcgZm9yIG1hbnBhZ2VzIHJlbmRlcmVkIGZyb20gYXNjaWlkb2MrZG9jYm9vayAtLT4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwkJdmVyc2lvbj0iMS4wIj4KKworPCEtLSB0aGVzZSBwYXJhbXMgc2lsZW5jZSBzb21lIG91dHB1dCBmcm9tIHhtbHRvIC0tPgorPHhzbDpwYXJhbSBuYW1lPSJtYW4ub3V0cHV0LnF1aWV0bHkiIHNlbGVjdD0iMSIvPgorPHhzbDpwYXJhbSBuYW1lPSJyZWZlbnRyeS5tZXRhLmdldC5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKworPCEtLSBjb252ZXJ0IGFzY2lpZG9jIGNhbGxvdXRzIHRvIG1hbiBwYWdlIGZvcm1hdDsKKyAgICAgZ2l0LmRvY2Jvb2suYmFja3NsYXNoIGFuZCBnaXQuZG9jYm9vay5kb3QgcGFyYW1zCisgICAgIG11c3QgYmUgc3VwcGxpZWQgYnkgYW5vdGhlciBYU0wgZmlsZSBvciBvdGhlciBtZWFucyAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvIj4KKwk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KAorCQkJICAgICAgJGdpdC5kb2Nib29rLmJhY2tzbGFzaCwnZkIoJywKKwkJCSAgICAgIHN1YnN0cmluZy1hZnRlcihAaWQsJy0nKSwnKScsCisJCQkgICAgICAkZ2l0LmRvY2Jvb2suYmFja3NsYXNoLCdmUicpIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNhbGxvdXRsaXN0Ij4KKwk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGdpdC5kb2Nib29rLmRvdCIvPgorCTx4c2w6dGV4dD5zcCYjMTA7PC94c2w6dGV4dD4KKwk8eHNsOmFwcGx5LXRlbXBsYXRlcy8+CisJPHhzbDp0ZXh0PiYjMTA7PC94c2w6dGV4dD4KKzwveHNsOnRlbXBsYXRlPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY2FsbG91dCI+CisJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgKKwkJCSAgICAgICRnaXQuZG9jYm9vay5iYWNrc2xhc2gsJ2ZCJywKKwkJCSAgICAgIHN1YnN0cmluZy1hZnRlcihAYXJlYXJlZnMsJy0nKSwKKwkJCSAgICAgICcuICcsJGdpdC5kb2Nib29rLmJhY2tzbGFzaCwnZlInKSIvPgorCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKwk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGdpdC5kb2Nib29rLmRvdCIvPgorCTx4c2w6dGV4dD5iciYjMTA7PC94c2w6dGV4dD4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLWJvbGQtbGl0ZXJhbC54c2wgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDhlYjVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLWJvbGQtbGl0ZXJhbC54c2wKQEAgLTAsMCArMSwxNyBAQAorPCEtLSBtYW5wYWdlLWJvbGQtbGl0ZXJhbC54c2w6CisgICAgIHNwZWNpYWwgZm9ybWF0dGluZyBmb3IgbWFucGFnZXMgcmVuZGVyZWQgZnJvbSBhc2NpaWRvYytkb2Nib29rIC0tPgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCQl2ZXJzaW9uPSIxLjAiPgorCis8IS0tIHJlbmRlciBsaXRlcmFsIHRleHQgYXMgYm9sZCAoaW5zdGVhZCBvZiBwbGFpbiBvciBtb25vc3BhY2UpOworICAgICB0aGlzIG1ha2VzIGxpdGVyYWwgdGV4dCBlYXNpZXIgdG8gZGlzdGluZ3Vpc2ggaW4gbWFucGFnZXMKKyAgICAgdmlld2VkIG9uIGEgdHR5IC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGl0ZXJhbCI+CisJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRnaXQuZG9jYm9vay5iYWNrc2xhc2giLz4KKwk8eHNsOnRleHQ+ZkI8L3hzbDp0ZXh0PgorCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKwk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGdpdC5kb2Nib29rLmJhY2tzbGFzaCIvPgorCTx4c2w6dGV4dD5mUjwveHNsOnRleHQ+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWFucGFnZS1ub3JtYWwueHNsIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLW5vcm1hbC54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4ZjViMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1ub3JtYWwueHNsCkBAIC0wLDAgKzEsMTMgQEAKKzwhLS0gbWFucGFnZS1ub3JtYWwueHNsOgorICAgICBzcGVjaWFsIHNldHRpbmdzIGZvciBtYW5wYWdlcyByZW5kZXJlZCBmcm9tIGFzY2lpZG9jK2RvY2Jvb2sKKyAgICAgaGFuZGxlcyBhbnl0aGluZyB3ZSB3YW50IHRvIGtlZXAgYXdheSBmcm9tIGRvY2Jvb2steHNsIDEuNzIuMCAtLT4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwkJdmVyc2lvbj0iMS4wIj4KKworPHhzbDppbXBvcnQgaHJlZj0ibWFucGFnZS1iYXNlLnhzbCIvPgorCis8IS0tIHRoZXNlIGFyZSB0aGUgbm9ybWFsIHZhbHVlcyBmb3IgdGhlIHJvZmYgY29udHJvbCBjaGFyYWN0ZXJzIC0tPgorPHhzbDpwYXJhbSBuYW1lPSJnaXQuZG9jYm9vay5iYWNrc2xhc2giPlw8L3hzbDpwYXJhbT4KKzx4c2w6cGFyYW0gbmFtZT0iZ2l0LmRvY2Jvb2suZG90Igk+LjwveHNsOnBhcmFtPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLXN1cHByZXNzLXNwLnhzbCBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1zdXBwcmVzcy1zcC54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYzYzc2MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1zdXBwcmVzcy1zcC54c2wKQEAgLTAsMCArMSwyMSBAQAorPCEtLSBtYW5wYWdlLXN1cHByZXNzLXNwLnhzbDoKKyAgICAgc3BlY2lhbCBzZXR0aW5ncyBmb3IgbWFucGFnZXMgcmVuZGVyZWQgZnJvbSBhc2NpaWRvYytkb2Nib29rCisgICAgIGhhbmRsZXMgZXJyb25lb3VzLCBpbmxpbmUgLnNwIGluIG1hbnBhZ2Ugb3V0cHV0IG9mIHNvbWUKKyAgICAgdmVyc2lvbnMgb2YgZG9jYm9vay14c2wgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzwhLS0gYXR0ZW1wdCB0byB3b3JrIGFyb3VuZCBzcHVyaW91cyAuc3AgYXQgdGhlIHRhaWwgb2YgdGhlIGxpbmUKKyAgICAgdGhhdCBzb21lIHZlcnNpb25zIG9mIGRvY2Jvb2sgc3R5bGVzaGVldHMgc2VlbSB0byBhZGQgLS0+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzaW1wYXJhIj4KKyAgPHhzbDp2YXJpYWJsZSBuYW1lPSJjb250ZW50Ij4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+CisgIDwveHNsOnZhcmlhYmxlPgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9ybWFsaXplLXNwYWNlKCRjb250ZW50KSIvPgorICA8eHNsOmlmIHRlc3Q9Im5vdChhbmNlc3Rvcjo6YXV0aG9yYmx1cmIpIGFuZAorICAgICAgICAgICAgICAgIG5vdChhbmNlc3Rvcjo6cGVyc29uYmx1cmIpIj4KKyAgICA8eHNsOnRleHQ+JiMxMDsmIzEwOzwveHNsOnRleHQ+CisgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lcmdlLWNvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL21lcmdlLWNvbmZpZy50eHQKaW5kZXggMWZmMDhmZi4uYzBmOTZlNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1jb25maWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWVyZ2UtY29uZmlnLnR4dApAQCAtMjIsNyArMjIsOCBAQAogbWVyZ2UudG9vbDo6CiAJQ29udHJvbHMgd2hpY2ggbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtIGlzIHVzZWQgYnkKIAlsaW5rZ2l0OmdpdC1tZXJnZXRvb2xbMV0uICBWYWxpZCBidWlsdC1pbiB2YWx1ZXMgYXJlOiAia2RpZmYzIiwKLQkidGtkaWZmIiwgIm1lbGQiLCAieHhkaWZmIiwgImVtZXJnZSIsICJ2aW1kaWZmIiwgImd2aW1kaWZmIiwgYW5kCisJInRrZGlmZiIsICJtZWxkIiwgInh4ZGlmZiIsICJlbWVyZ2UiLCAidmltZGlmZiIsICJndmltZGlmZiIsCisJImRpZmZ1c2UiLCAiZWNtZXJnZSIsICJ0b3J0b2lzZW1lcmdlIiwgImFyYXhpcyIsIGFuZAogCSJvcGVuZGlmZiIuICBBbnkgb3RoZXIgdmFsdWUgaXMgdHJlYXRlZCBpcyBjdXN0b20gbWVyZ2UgdG9vbAogCWFuZCB0aGVyZSBtdXN0IGJlIGEgY29ycmVzcG9uZGluZyBtZXJnZXRvb2wuPHRvb2w+LmNtZCBvcHRpb24uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL21lcmdlLW9wdGlvbnMudHh0CmluZGV4IDYzN2I1M2YuLmFkYWRmOGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dApAQCAtMzksNyArMzksOCBAQAogCiAtLXNxdWFzaDo6CiAJUHJvZHVjZSB0aGUgd29ya2luZyB0cmVlIGFuZCBpbmRleCBzdGF0ZSBhcyBpZiBhIHJlYWwKLQltZXJnZSBoYXBwZW5lZCwgYnV0IGRvIG5vdCBhY3R1YWxseSBtYWtlIGEgY29tbWl0IG9yCisJbWVyZ2UgaGFwcGVuZWQgKGV4Y2VwdCBmb3IgdGhlIG1lcmdlIGluZm9ybWF0aW9uKSwKKwlidXQgZG8gbm90IGFjdHVhbGx5IG1ha2UgYSBjb21taXQgb3IKIAltb3ZlIHRoZSBgSEVBRGAsIG5vciByZWNvcmQgYCRHSVRfRElSL01FUkdFX0hFQURgIHRvCiAJY2F1c2UgdGhlIG5leHQgYGdpdCBjb21taXRgIGNvbW1hbmQgdG8gY3JlYXRlIGEgbWVyZ2UKIAljb21taXQuICBUaGlzIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1zdHJhdGVnaWVzLnR4dCBiL0RvY3VtZW50YXRpb24vbWVyZ2Utc3RyYXRlZ2llcy50eHQKaW5kZXggMTI3NmY4NS4uNDM2NWI3ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1zdHJhdGVnaWVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lcmdlLXN0cmF0ZWdpZXMudHh0CkBAIC0zLDE1ICszLDE1IEBACiAKIHJlc29sdmU6OgogCVRoaXMgY2FuIG9ubHkgcmVzb2x2ZSB0d28gaGVhZHMgKGkuZS4gdGhlIGN1cnJlbnQgYnJhbmNoCi0JYW5kIGFub3RoZXIgYnJhbmNoIHlvdSBwdWxsZWQgZnJvbSkgdXNpbmcgMy13YXkgbWVyZ2UKKwlhbmQgYW5vdGhlciBicmFuY2ggeW91IHB1bGxlZCBmcm9tKSB1c2luZyBhIDMtd2F5IG1lcmdlCiAJYWxnb3JpdGhtLiAgSXQgdHJpZXMgdG8gY2FyZWZ1bGx5IGRldGVjdCBjcmlzcy1jcm9zcwogCW1lcmdlIGFtYmlndWl0aWVzIGFuZCBpcyBjb25zaWRlcmVkIGdlbmVyYWxseSBzYWZlIGFuZAogCWZhc3QuCiAKIHJlY3Vyc2l2ZTo6Ci0JVGhpcyBjYW4gb25seSByZXNvbHZlIHR3byBoZWFkcyB1c2luZyAzLXdheSBtZXJnZQotCWFsZ29yaXRobS4gIFdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgY29tbW9uCi0JYW5jZXN0b3JzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIDMtd2F5IG1lcmdlLCBpdCBjcmVhdGVzIGEKKwlUaGlzIGNhbiBvbmx5IHJlc29sdmUgdHdvIGhlYWRzIHVzaW5nIGEgMy13YXkgbWVyZ2UKKwlhbGdvcml0aG0uICBXaGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgY29tbW9uCisJYW5jZXN0b3IgdGhhdCBjYW4gYmUgdXNlZCBmb3IgMy13YXkgbWVyZ2UsIGl0IGNyZWF0ZXMgYQogCW1lcmdlZCB0cmVlIG9mIHRoZSBjb21tb24gYW5jZXN0b3JzIGFuZCB1c2VzIHRoYXQgYXMKIAl0aGUgcmVmZXJlbmNlIHRyZWUgZm9yIHRoZSAzLXdheSBtZXJnZS4gIFRoaXMgaGFzIGJlZW4KIAlyZXBvcnRlZCB0byByZXN1bHQgaW4gZmV3ZXIgbWVyZ2UgY29uZmxpY3RzIHdpdGhvdXQKQEAgLTIyLDExICsyMiwxMSBAQAogCXB1bGxpbmcgb3IgbWVyZ2luZyBvbmUgYnJhbmNoLgogCiBvY3RvcHVzOjoKLQlUaGlzIHJlc29sdmVzIG1vcmUgdGhhbiB0d28taGVhZCBjYXNlLCBidXQgcmVmdXNlcyB0byBkbwotCWNvbXBsZXggbWVyZ2UgdGhhdCBuZWVkcyBtYW51YWwgcmVzb2x1dGlvbi4gIEl0IGlzCisJVGhpcyByZXNvbHZlcyBjYXNlcyB3aXRoIG1vcmUgdGhhbiB0d28gaGVhZHMsIGJ1dCByZWZ1c2VzIHRvIGRvCisJYSBjb21wbGV4IG1lcmdlIHRoYXQgbmVlZHMgbWFudWFsIHJlc29sdXRpb24uICBJdCBpcwogCXByaW1hcmlseSBtZWFudCB0byBiZSB1c2VkIGZvciBidW5kbGluZyB0b3BpYyBicmFuY2gKIAloZWFkcyB0b2dldGhlci4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgbWVyZ2Ugc3RyYXRlZ3kgd2hlbgotCXB1bGxpbmcgb3IgbWVyZ2luZyBtb3JlIHRoYW4gb25lIGJyYW5jaGVzLgorCXB1bGxpbmcgb3IgbWVyZ2luZyBtb3JlIHRoYW4gb25lIGJyYW5jaC4KIAogb3Vyczo6CiAJVGhpcyByZXNvbHZlcyBhbnkgbnVtYmVyIG9mIGhlYWRzLCBidXQgdGhlIHJlc3VsdCBvZiB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJldHR5LWZvcm1hdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKaW5kZXggMGE4YTk0OC4uMmE4NDViMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKQEAgLTEwMSwxNiArMTAxLDE4IEBACiAtICclUCc6IHBhcmVudCBoYXNoZXMKIC0gJyVwJzogYWJicmV2aWF0ZWQgcGFyZW50IGhhc2hlcwogLSAnJWFuJzogYXV0aG9yIG5hbWUKLS0gJyVhTic6IGF1dGhvciBuYW1lIChyZXNwZWN0aW5nIC5tYWlsbWFwKQorLSAnJWFOJzogYXV0aG9yIG5hbWUgKHJlc3BlY3RpbmcgLm1haWxtYXAsIHNlZSBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKIC0gJyVhZSc6IGF1dGhvciBlbWFpbAorLSAnJWFFJzogYXV0aG9yIGVtYWlsIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUgbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0gb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCiAtICclYWQnOiBhdXRob3IgZGF0ZSAoZm9ybWF0IHJlc3BlY3RzIC0tZGF0ZT0gb3B0aW9uKQogLSAnJWFEJzogYXV0aG9yIGRhdGUsIFJGQzI4MjIgc3R5bGUKIC0gJyVhcic6IGF1dGhvciBkYXRlLCByZWxhdGl2ZQogLSAnJWF0JzogYXV0aG9yIGRhdGUsIFVOSVggdGltZXN0YW1wCiAtICclYWknOiBhdXRob3IgZGF0ZSwgSVNPIDg2MDEgZm9ybWF0CiAtICclY24nOiBjb21taXR0ZXIgbmFtZQotLSAnJWNOJzogY29tbWl0dGVyIG5hbWUgKHJlc3BlY3RpbmcgLm1haWxtYXApCistICclY04nOiBjb21taXR0ZXIgbmFtZSAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIG9yIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdKQogLSAnJWNlJzogY29tbWl0dGVyIGVtYWlsCistICclY0UnOiBjb21taXR0ZXIgZW1haWwgKHJlc3BlY3RpbmcgLm1haWxtYXAsIHNlZSBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKIC0gJyVjZCc6IGNvbW1pdHRlciBkYXRlCiAtICclY0QnOiBjb21taXR0ZXIgZGF0ZSwgUkZDMjgyMiBzdHlsZQogLSAnJWNyJzogY29tbWl0dGVyIGRhdGUsIHJlbGF0aXZlCkBAIC0xMTksMTEgKzEyMSwxMyBAQAogLSAnJWQnOiByZWYgbmFtZXMsIGxpa2UgdGhlIC0tZGVjb3JhdGUgb3B0aW9uIG9mIGxpbmtnaXQ6Z2l0LWxvZ1sxXQogLSAnJWUnOiBlbmNvZGluZwogLSAnJXMnOiBzdWJqZWN0CistICclZic6IHNhbml0aXplZCBzdWJqZWN0IGxpbmUsIHN1aXRhYmxlIGZvciBhIGZpbGVuYW1lCiAtICclYic6IGJvZHkKIC0gJyVDcmVkJzogc3dpdGNoIGNvbG9yIHRvIHJlZAogLSAnJUNncmVlbic6IHN3aXRjaCBjb2xvciB0byBncmVlbgogLSAnJUNibHVlJzogc3dpdGNoIGNvbG9yIHRvIGJsdWUKIC0gJyVDcmVzZXQnOiByZXNldCBjb2xvcgorLSAnJUMoLi4uKSc6IGNvbG9yIHNwZWNpZmljYXRpb24sIGFzIGRlc2NyaWJlZCBpbiBjb2xvci5icmFuY2guKiBjb25maWcgb3B0aW9uCiAtICclbSc6IGxlZnQsIHJpZ2h0IG9yIGJvdW5kYXJ5IG1hcmsKIC0gJyVuJzogbmV3bGluZQogLSAnJXgwMCc6IHByaW50IGEgYnl0ZSBmcm9tIGEgaGV4IGNvZGUKQEAgLTE0OSwzICsxNTMsMTIgQEAKIDRkYTQ1YmUKIDcxMzQ5NzMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSW4gYWRkaXRpb24sIGFueSB1bnJlY29nbml6ZWQgc3RyaW5nIHRoYXQgaGFzIGEgYCVgIGluIGl0IGlzIGludGVycHJldGVkCithcyBpZiBpdCBoYXMgYHRmb3JtYXQ6YCBpbiBmcm9udCBvZiBpdC4gIEZvciBleGFtcGxlLCB0aGVzZSB0d28gYXJlCitlcXVpdmFsZW50OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLTIgLS1wcmV0dHk9dGZvcm1hdDolaCA0ZGE0NWJlZgorJCBnaXQgbG9nIC0yIC0tcHJldHR5PSVoIDRkYTQ1YmVmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJldHR5LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKaW5kZXggNmQ2NmM3NC4uYmZmOTQ5OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKQEAgLTEsNCArMSw1IEBACiAtLXByZXR0eVs9Jzxmb3JtYXQ+J106OgorLS1mb3JtYXRbPSc8Zm9ybWF0PiddOjoKIAogCVByZXR0eS1wcmludCB0aGUgY29udGVudHMgb2YgdGhlIGNvbW1pdCBsb2dzIGluIGEgZ2l2ZW4gZm9ybWF0LAogCXdoZXJlICc8Zm9ybWF0PicgY2FuIGJlIG9uZSBvZiAnb25lbGluZScsICdzaG9ydCcsICdtZWRpdW0nLApAQCAtMTAsMTMgKzExLDE3IEBACiAKIC0tYWJicmV2LWNvbW1pdDo6CiAJSW5zdGVhZCBvZiBzaG93aW5nIHRoZSBmdWxsIDQwLWJ5dGUgaGV4YWRlY2ltYWwgY29tbWl0IG9iamVjdAotCW5hbWUsIHNob3cgb25seSBoYW5kZnVsIGhleGRpZ2l0cyBwcmVmaXguICBOb24gZGVmYXVsdCBudW1iZXIgb2YKKwluYW1lLCBzaG93IG9ubHkgYSBwYXJ0aWFsIHByZWZpeC4gIE5vbiBkZWZhdWx0IG51bWJlciBvZgogCWRpZ2l0cyBjYW4gYmUgc3BlY2lmaWVkIHdpdGggIi0tYWJicmV2PTxuPiIgKHdoaWNoIGFsc28gbW9kaWZpZXMKIAlkaWZmIG91dHB1dCwgaWYgaXQgaXMgZGlzcGxheWVkKS4KICsKIFRoaXMgc2hvdWxkIG1ha2UgIi0tcHJldHR5PW9uZWxpbmUiIGEgd2hvbGUgbG90IG1vcmUgcmVhZGFibGUgZm9yCiBwZW9wbGUgdXNpbmcgODAtY29sdW1uIHRlcm1pbmFscy4KIAorLS1vbmVsaW5lOjoKKwlUaGlzIGlzIGEgc2hvcnRoYW5kIGZvciAiLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQiCisJdXNlZCB0b2dldGhlci4KKwogLS1lbmNvZGluZ1s9PGVuY29kaW5nPl06OgogCVRoZSBjb21taXQgb2JqZWN0cyByZWNvcmQgdGhlIGVuY29kaW5nIHVzZWQgZm9yIHRoZSBsb2cgbWVzc2FnZQogCWluIHRoZWlyIGVuY29kaW5nIGhlYWRlcjsgdGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gdGVsbCB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0CmluZGV4IGI5ZjZlNGQuLmJmNjYxMTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dApAQCAtMTMsNyArMTMsNyBAQAogCiAJU3lub255bSBmb3IgYC0tZGF0ZT1yZWxhdGl2ZWAuCiAKLS0tZGF0ZT17cmVsYXRpdmUsbG9jYWwsZGVmYXVsdCxpc28scmZjLHNob3J0fTo6CistLWRhdGU9e3JlbGF0aXZlLGxvY2FsLGRlZmF1bHQsaXNvLHJmYyxzaG9ydCxyYXd9OjoKIAogCU9ubHkgdGFrZXMgZWZmZWN0IGZvciBkYXRlcyBzaG93biBpbiBodW1hbi1yZWFkYWJsZSBmb3JtYXQsIHN1Y2gKIAlhcyB3aGVuIHVzaW5nICItLXByZXR0eSIuIGBsb2cuZGF0ZWAgY29uZmlnIHZhcmlhYmxlIHNldHMgYSBkZWZhdWx0CkBAIC0zMSw2ICszMSw4IEBACiArCiBgLS1kYXRlPXNob3J0YCBzaG93cyBvbmx5IGRhdGUgYnV0IG5vdCB0aW1lLCBpbiBgWVlZWS1NTS1ERGAgZm9ybWF0LgogKworYC0tZGF0ZT1yYXdgIHNob3dzIHRoZSBkYXRlIGluIHRoZSBpbnRlcm5hbCByYXcgZ2l0IGZvcm1hdCBgJXMgJXpgIGZvcm1hdC4KKysKIGAtLWRhdGU9ZGVmYXVsdGAgc2hvd3MgdGltZXN0YW1wcyBpbiB0aGUgb3JpZ2luYWwgdGltZXpvbmUKIChlaXRoZXIgY29tbWl0dGVyJ3Mgb3IgYXV0aG9yJ3MpLgogCkBAIC0xMzgsMzggKzE0MCwzOCBAQAogLS0KIAogLW4gJ251bWJlcic6OgotLS1tYXgtY291bnQ9J251bWJlcic6OgorLS1tYXgtY291bnQ9PG51bWJlcj46OgogCiAJTGltaXQgdGhlIG51bWJlciBvZiBjb21taXRzIG91dHB1dC4KIAotLS1za2lwPSdudW1iZXInOjoKKy0tc2tpcD08bnVtYmVyPjo6CiAKIAlTa2lwICdudW1iZXInIGNvbW1pdHMgYmVmb3JlIHN0YXJ0aW5nIHRvIHNob3cgdGhlIGNvbW1pdCBvdXRwdXQuCiAKLS0tc2luY2U9J2RhdGUnOjoKLS0tYWZ0ZXI9J2RhdGUnOjoKKy0tc2luY2U9PGRhdGU+OjoKKy0tYWZ0ZXI9PGRhdGU+OjoKIAogCVNob3cgY29tbWl0cyBtb3JlIHJlY2VudCB0aGFuIGEgc3BlY2lmaWMgZGF0ZS4KIAotLS11bnRpbD0nZGF0ZSc6OgotLS1iZWZvcmU9J2RhdGUnOjoKKy0tdW50aWw9PGRhdGU+OjoKKy0tYmVmb3JlPTxkYXRlPjo6CiAKIAlTaG93IGNvbW1pdHMgb2xkZXIgdGhhbiBhIHNwZWNpZmljIGRhdGUuCiAKIGlmZGVmOjpnaXQtcmV2LWxpc3RbXQotLS1tYXgtYWdlPSd0aW1lc3RhbXAnOjoKLS0tbWluLWFnZT0ndGltZXN0YW1wJzo6CistLW1heC1hZ2U9PHRpbWVzdGFtcD46OgorLS1taW4tYWdlPTx0aW1lc3RhbXA+OjoKIAogCUxpbWl0IHRoZSBjb21taXRzIG91dHB1dCB0byBzcGVjaWZpZWQgdGltZSByYW5nZS4KIGVuZGlmOjpnaXQtcmV2LWxpc3RbXQogCi0tLWF1dGhvcj0ncGF0dGVybic6OgotLS1jb21taXR0ZXI9J3BhdHRlcm4nOjoKKy0tYXV0aG9yPTxwYXR0ZXJuPjo6CistLWNvbW1pdHRlcj08cGF0dGVybj46OgogCiAJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIG9uZXMgd2l0aCBhdXRob3IvY29tbWl0dGVyCiAJaGVhZGVyIGxpbmVzIHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBwYXR0ZXJuIChyZWd1bGFyIGV4cHJlc3Npb24pLgogCi0tLWdyZXA9J3BhdHRlcm4nOjoKKy0tZ3JlcD08cGF0dGVybj46OgogCiAJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIG9uZXMgd2l0aCBsb2cgbWVzc2FnZSB0aGF0CiAJbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHBhdHRlcm4gKHJlZ3VsYXIgZXhwcmVzc2lvbikuCkBAIC0xOTksNiArMjAxLDEwIEBACiAKIAlTdG9wIHdoZW4gYSBnaXZlbiBwYXRoIGRpc2FwcGVhcnMgZnJvbSB0aGUgdHJlZS4KIAorLS1tZXJnZXM6OgorCisJUHJpbnQgb25seSBtZXJnZSBjb21taXRzLgorCiAtLW5vLW1lcmdlczo6CiAKIAlEbyBub3QgcHJpbnQgY29tbWl0cyB3aXRoIG1vcmUgdGhhbiBvbmUgcGFyZW50LgpAQCAtNTY2LDExICs1NzIsMTEgQEAKIGNvbW1pdHMsIG9yZGVyZWQgYnkgdGhlaXIgZGlzdGFuY2UgdG8gdGhlIGluY2x1ZGVkIGFuZCBleGNsdWRlZAogY29tbWl0cy4gVGhlIGZhcnRoZXN0IGZyb20gdGhlbSBpcyBkaXNwbGF5ZWQgZmlyc3QuIChUaGlzIGlzIHRoZSBvbmx5CiBvbmUgZGlzcGxheWVkIGJ5IGAtLWJpc2VjdGAuKQotCisrCiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGl0IG1ha2VzIGl0IGVhc3kgdG8gY2hvb3NlIGEgZ29vZCBjb21taXQgdG8KIHRlc3Qgd2hlbiB5b3Ugd2FudCB0byBhdm9pZCB0byB0ZXN0IHNvbWUgb2YgdGhlbSBmb3Igc29tZSByZWFzb24gKHRoZXkKIG1heSBub3QgY29tcGlsZSBmb3IgZXhhbXBsZSkuCi0KKysKIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIGFsb25nIHdpdGggYC0tYmlzZWN0LXZhcnNgLCBpbiB0aGlzIGNhc2UsCiBhZnRlciBhbGwgdGhlIHNvcnRlZCBjb21taXQgb2JqZWN0cywgdGhlcmUgd2lsbCBiZSB0aGUgc2FtZSB0ZXh0IGFzIGlmCiBgLS1iaXNlY3QtdmFyc2AgaGFkIGJlZW4gdXNlZCBhbG9uZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1wYXJzZS1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1wYXJzZS1vcHRpb25zLnR4dAppbmRleCA1Mzk4NjNiLi41MGY5ZTlhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGFyc2Utb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0CkBAIC02MCwxMiArNjAsMTggQEAKIC4gaW4gYGNtZF9mb28oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpYAogICBjYWxsCiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX2Zvb19vcHRpb25zLCBidWlsdGluX2Zvb191c2FnZSwgZmxhZ3MpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9mb29fb3B0aW9ucywgYnVpbHRpbl9mb29fdXNhZ2UsIGZsYWdzKTsKICsKIGBwYXJzZV9vcHRpb25zKClgIHdpbGwgZmlsdGVyIG91dCB0aGUgcHJvY2Vzc2VkIG9wdGlvbnMgb2YgYGFyZ3ZbXWAgYW5kIGxlYXZlIHRoZQogbm9uLW9wdGlvbiBhcmd1bWVudHMgaW4gYGFyZ3ZbXWAuCiBgYXJnY2AgaXMgdXBkYXRlZCBhcHByb3ByaWF0ZWx5IGJlY2F1c2Ugb2YgdGhlIGFzc2lnbm1lbnQuCiArCitZb3UgY2FuIGFsc28gcGFzcyBOVUxMIGluc3RlYWQgb2YgYSB1c2FnZSBhcnJheSBhcyB0aGUgZmlmdGggcGFyYW1ldGVyIG9mCitwYXJzZV9vcHRpb25zKCksIHRvIGF2b2lkIGRpc3BsYXlpbmcgYSBoZWxwIHNjcmVlbiB3aXRoIHVzYWdlIGluZm8gYW5kCitvcHRpb24gbGlzdC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgZG9uZSBpZiBuZWNlc3NhcnksIGUuZy4gdG8gaW1wbGVtZW50CithIGxpbWl0ZWQgcGFyc2VyIGZvciBvbmx5IGEgc3Vic2V0IG9mIHRoZSBvcHRpb25zIHRoYXQgbmVlZHMgdG8gYmUgcnVuCitiZWZvcmUgdGhlIGZ1bGwgcGFyc2VyLCB3aGljaCBpbiB0dXJuIHNob3dzIHRoZSBmdWxsIGhlbHAgbWVzc2FnZS4KKysKIEZsYWdzIGFyZSB0aGUgYml0d2lzZS1vciBvZjoKIAogYFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIYDo6CkBAIC03Nyw2ICs4MywyOCBAQAogCVVzaW5nIHRoaXMgZmxhZywgcHJvY2Vzc2luZyBpcyBzdG9wcGVkIGF0IHRoZSBmaXJzdCBub24tb3B0aW9uCiAJYXJndW1lbnQuCiAKK2BQQVJTRV9PUFRfS0VFUF9BUkdWMGA6OgorCUtlZXAgdGhlIGZpcnN0IGFyZ3VtZW50LCB3aGljaCBjb250YWlucyB0aGUgcHJvZ3JhbSBuYW1lLiAgSXQncworCXJlbW92ZWQgZnJvbSBhcmd2W10gYnkgZGVmYXVsdC4KKworYFBBUlNFX09QVF9LRUVQX1VOS05PV05gOjoKKwlLZWVwIHVua25vd24gYXJndW1lbnRzIGluc3RlYWQgb2YgZXJyb3Jpbmcgb3V0LiAgVGhpcyBkb2Vzbid0CisJd29yayBmb3IgYWxsIGNvbWJpbmF0aW9ucyBvZiBhcmd1bWVudHMgYXMgdXNlcnMgbWlnaHQgZXhwZWN0CisJaXQgdG8gZG8uICBFLmcuIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpbiBgLS11bmtub3duIC0ta25vd25gCisJdGFrZXMgYSB2YWx1ZSAod2hpY2ggd2UgY2FuJ3Qga25vdyksIHRoZSBzZWNvbmQgb25lIGlzCisJbWlzdGFrZW5seSBpbnRlcnByZXRlZCBhcyBhIGtub3duIG9wdGlvbi4gIFNpbWlsYXJseSwgaWYKKwlgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTmAgaXMgc2V0LCB0aGUgc2Vjb25kIGFyZ3VtZW50IGluCisJYC0tdW5rbm93biB2YWx1ZWAgd2lsbCBiZSBtaXN0YWtlbmx5IGludGVycHJldGVkIGFzIGEKKwlub24tb3B0aW9uLCBub3QgYXMgYSB2YWx1ZSBiZWxvbmdpbmcgdG8gdGhlIHVua25vd24gb3B0aW9uLAorCXRoZSBwYXJzZXIgZWFybHkuICBUaGF0J3Mgd2h5IHBhcnNlX29wdGlvbnMoKSBlcnJvcnMgb3V0IGlmCisJYm90aCBvcHRpb25zIGFyZSBzZXQuCisKK2BQQVJTRV9PUFRfTk9fSU5URVJOQUxfSEVMUGA6OgorCUJ5IGRlZmF1bHQsIHBhcnNlX29wdGlvbnMoKSBoYW5kbGVzIGAtaGAsIGAtLWhlbHBgIGFuZAorCWAtLWhlbHAtYWxsYCBpbnRlcm5hbGx5LCBieSBzaG93aW5nIGEgaGVscCBzY3JlZW4uICBUaGlzIG9wdGlvbgorCXR1cm5zIGl0IG9mZiBhbmQgYWxsb3dzIG9uZSB0byBhZGQgY3VzdG9tIGhhbmRsZXJzIGZvciB0aGVzZQorCW9wdGlvbnMsIG9yIHRvIGp1c3QgbGVhdmUgdGhlbSB1bmtub3duLgorCiBEYXRhIFN0cnVjdHVyZQogLS0tLS0tLS0tLS0tLS0KIApAQCAtMTA5LDYgKzEzNywxMCBAQAogCUludHJvZHVjZSBhIGJvb2xlYW4gb3B0aW9uLgogCUlmIHVzZWQsIGBpbnRfdmFyYCBpcyBiaXR3aXNlLW9yZWQgd2l0aCBgbWFza2AuCiAKK2BPUFRfTkVHQklUKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24sIG1hc2spYDo6CisJSW50cm9kdWNlIGEgYm9vbGVhbiBvcHRpb24uCisJSWYgdXNlZCwgYGludF92YXJgIGlzIGJpdHdpc2UtYW5kZWQgd2l0aCB0aGUgaW52ZXJ0ZWQgYG1hc2tgLgorCiBgT1BUX1NFVF9JTlQoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbiwgaW50ZWdlcilgOjoKIAlJbnRyb2R1Y2UgYSBib29sZWFuIG9wdGlvbi4KIAlJZiB1c2VkLCBzZXQgYGludF92YXJgIHRvIGBpbnRlZ2VyYC4KQEAgLTEzNSw5ICsxNjcsMjIgQEAKIAlhbmQgdGhlIHJlc3VsdCB3aWxsIGJlIHB1dCBpbnRvIGB2YXJgLgogCVNlZSAnT3B0aW9uIENhbGxiYWNrcycgYmVsb3cgZm9yIGEgbW9yZSBlbGFib3JhdGUgZGVzY3JpcHRpb24uCiAKK2BPUFRfRklMRU5BTUUoc2hvcnQsIGxvbmcsICZ2YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhbiBvcHRpb24gd2l0aCBhIGZpbGVuYW1lIGFyZ3VtZW50LgorCVRoZSBmaWxlbmFtZSB3aWxsIGJlIHByZWZpeGVkIGJ5IHBhc3NpbmcgdGhlIGZpbGVuYW1lIGFsb25nIHdpdGgKKwl0aGUgcHJlZml4IGFyZ3VtZW50IG9mIGBwYXJzZV9vcHRpb25zKClgIHRvIGBwcmVmaXhfZmlsZW5hbWUoKWAuCisKIGBPUFRfQVJHVU1FTlQobG9uZywgZGVzY3JpcHRpb24pYDo6CiAJSW50cm9kdWNlIGEgbG9uZy1vcHRpb24gYXJndW1lbnQgdGhhdCB3aWxsIGJlIGtlcHQgaW4gYGFyZ3ZbXWAuCiAKK2BPUFRfTlVNQkVSX0NBTExCQUNLKCZ2YXIsIGRlc2NyaXB0aW9uLCBmdW5jX3B0cilgOjoKKwlSZWNvZ25pemUgbnVtZXJpY2FsIG9wdGlvbnMgbGlrZSAtMTIzIGFuZCBmZWVkIHRoZSBpbnRlZ2VyIGFzCisJaWYgaXQgd2FzIGFuIGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbiBnaXZlbiBieSBgZnVuY19wdHJgLgorCVRoZSByZXN1bHQgd2lsbCBiZSBwdXQgaW50byBgdmFyYC4gIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBzdWNoCisJb3B0aW9uIGRlZmluaXRpb24uICBJdCBjYW5ub3QgYmUgbmVnYXRlZCBhbmQgaXQgdGFrZXMgbm8KKwlhcmd1bWVudHMuICBTaG9ydCBvcHRpb25zIHRoYXQgaGFwcGVuIHRvIGJlIGRpZ2l0cyB0YWtlCisJcHJlY2VkZW5jZSBvdmVyIGl0LgorCiAKIFRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IG11c3QgYmUgYE9QVF9FTkQoKWAuCiAKQEAgLTE3MCw3ICsyMTUsNyBAQAogCiBUaGUgY2FsbGJhY2sgbWVjaGFuaXNtIGlzIGFzIGZvbGxvd3M6CiAKLSogSW5zaWRlIGBmdW5jdGAsIHRoZSBvbmx5IGludGVyZXN0aW5nIG1lbWJlciBvZiB0aGUgc3RydWN0dXJlCisqIEluc2lkZSBgZnVuY2AsIHRoZSBvbmx5IGludGVyZXN0aW5nIG1lbWJlciBvZiB0aGUgc3RydWN0dXJlCiAgIGdpdmVuIGJ5IGBvcHRgIGlzIHRoZSB2b2lkIHBvaW50ZXIgYG9wdC0+dmFsdWVgLgogICBgXCpvcHQtPnZhbHVlYCB3aWxsIGJlIHRoZSB2YWx1ZSB0aGF0IGlzIHNhdmVkIGludG8gYHZhcmAsIGlmIHlvdQogICB1c2UgYE9QVF9DQUxMQkFDSygpYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZW1vdGUudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJlbW90ZS50eHQKaW5kZXggMDczYjIyYi4uYzU0YjE3ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJlbW90ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJlbW90ZS50eHQKQEAgLTE4LDYgKzE4LDEwIEBACiAKIAlBbiBhcnJheSBvZiBhbGwgb2YgdGhlIHVybF9uciBVUkxzIGNvbmZpZ3VyZWQgZm9yIHRoZSByZW1vdGUKIAorYHB1c2h1cmxgOjoKKworCUFuIGFycmF5IG9mIGFsbCBvZiB0aGUgcHVzaHVybF9uciBwdXNoIFVSTHMgY29uZmlndXJlZCBmb3IgdGhlIHJlbW90ZQorCiBgcHVzaGA6OgogCiAJIEFuIGFycmF5IG9mIHJlZnNwZWNzIGNvbmZpZ3VyZWQgZm9yIHB1c2hpbmcsIHdpdGgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ydW4tY29tbWFuZC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcnVuLWNvbW1hbmQudHh0CmluZGV4IDgyZTllODMuLjJlZmU3YTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ydW4tY29tbWFuZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJ1bi1jb21tYW5kLnR4dApAQCAtNTIsNiArNTIsMjEgQEAKIAlXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCB3YXMKIAlzdGFydGVkIHdpdGggc3RhcnRfYXN5bmMoKS4KIAorYHJ1bl9ob29rYDo6CisKKwlSdW4gYSBob29rLgorCVRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIHBhdGhuYW1lIHRvIGFuIGluZGV4IGZpbGUsIG9yIE5VTEwKKwlpZiB0aGUgaG9vayB1c2VzIHRoZSBkZWZhdWx0IGluZGV4IGZpbGUgb3Igbm8gaW5kZXggaXMgbmVlZGVkLgorCVRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIGhvb2suCisJVGhlIGZ1cnRoZXIgYXJndW1lbnRzIGNvcnJlc3BvbmQgdG8gdGhlIGhvb2sgYXJndW1lbnRzLgorCVRoZSBsYXN0IGFyZ3VtZW50IGhhcyB0byBiZSBOVUxMIHRvIHRlcm1pbmF0ZSB0aGUgYXJndW1lbnRzIGxpc3QuCisJSWYgdGhlIGhvb2sgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGV4ZWN1dGFibGUsIHRoZSByZXR1cm4KKwl2YWx1ZSB3aWxsIGJlIHplcm8uCisJSWYgaXQgaXMgZXhlY3V0YWJsZSwgdGhlIGhvb2sgd2lsbCBiZSBleGVjdXRlZCBhbmQgdGhlIGV4aXQKKwlzdGF0dXMgb2YgdGhlIGhvb2sgaXMgcmV0dXJuZWQuCisJT24gZXhlY3V0aW9uLCAuc3Rkb3V0X3RvX3N0ZGVyciBhbmQgLm5vX3N0ZGluIHdpbGwgYmUgc2V0LgorCShTZWUgYmVsb3cuKQorCiAKIERhdGEgc3RydWN0dXJlcwogLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc3RyYnVmLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdHJidWYudHh0CmluZGV4IDk4NTgwMGUuLjc0MzgxNDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdHJidWYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdHJidWYudHh0CkBAIC0xMzMsOCArMTMzLDEwIEBACiAKICogQWRkaW5nIGRhdGEgdG8gdGhlIGJ1ZmZlcgogCi1OT1RFOiBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGluIHRoaXMgc2VjdGlvbiB3aWxsIGdyb3cgdGhlIGJ1ZmZlciBhcwotICAgICAgbmVjZXNzYXJ5LgorTk9URTogQWxsIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBzZWN0aW9uIHdpbGwgZ3JvdyB0aGUgYnVmZmVyIGFzIG5lY2Vzc2FyeS4KK0lmIHRoZXkgZmFpbCBmb3Igc29tZSByZWFzb24gb3RoZXIgdGhhbiBtZW1vcnkgc2hvcnRhZ2UgYW5kIHRoZSBidWZmZXIgaGFkbid0CitiZWVuIGFsbG9jYXRlZCBiZWZvcmUgKGkuZS4gdGhlIGBzdHJ1Y3Qgc3RyYnVmYCB3YXMgc2V0IHRvIGBTVFJCVUZfSU5JVGApLAordGhlbiB0aGV5IHdpbGwgZnJlZSgpIGl0LgogCiBgc3RyYnVmX2FkZGNoYDo6CiAKQEAgLTIyMCw3ICsyMjIsNyBAQAogCiAJUmVhZCBhIGdpdmVuIHNpemUgb2YgZGF0YSBmcm9tIGEgRklMRSogcG9pbnRlciB0byB0aGUgYnVmZmVyLgogKwotTk9URTogVGhlIGJ1ZmZlciBpcyByZXdpbmRlZCBpZiB0aGUgcmVhZCBmYWlscy4gSWYgLTEgaXMgcmV0dXJuZWQsCitOT1RFOiBUaGUgYnVmZmVyIGlzIHJld291bmQgaWYgdGhlIHJlYWQgZmFpbHMuIElmIC0xIGlzIHJldHVybmVkLAogYGVycm5vYCBtdXN0IGJlIGNvbnN1bHRlZCwgbGlrZSB5b3Ugd291bGQgZG8gZm9yIGByZWFkKDMpYC4KIGBzdHJidWZfcmVhZCgpYCwgYHN0cmJ1Zl9yZWFkX2ZpbGUoKWAgYW5kIGBzdHJidWZfZ2V0bGluZSgpYCBoYXMgdGhlCiBzYW1lIGJlaGF2aW91ciBhcyB3ZWxsLgpAQCAtMjM1LDYgKzIzNywxMSBAQAogCVJlYWQgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSwgc3BlY2lmaWVkIGJ5IGl0cyBwYXRoLiBUaGUgdGhpcmQgYXJndW1lbnQKIAljYW4gYmUgdXNlZCB0byBnaXZlIGEgaGludCBhYm91dCB0aGUgZmlsZSBzaXplLCB0byBhdm9pZCByZWFsbG9jcy4KIAorYHN0cmJ1Zl9yZWFkbGlua2A6OgorCisJUmVhZCB0aGUgdGFyZ2V0IG9mIGEgc3ltYm9saWMgbGluaywgc3BlY2lmaWVkIGJ5IGl0cyBwYXRoLiAgVGhlIHRoaXJkCisJYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gZ2l2ZSBhIGhpbnQgYWJvdXQgdGhlIHNpemUsIHRvIGF2b2lkIHJlYWxsb2NzLgorCiBgc3RyYnVmX2dldGxpbmVgOjoKIAogCVJlYWQgYSBsaW5lIGZyb20gYSBGSUxFKiBwb2ludGVyLiBUaGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbGluZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91cmxzLXJlbW90ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi91cmxzLXJlbW90ZXMudHh0CmluZGV4IDQxZWM3NzcuLjJhMGU3YjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXJscy1yZW1vdGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VybHMtcmVtb3Rlcy50eHQKQEAgLTI3LDEwICsyNywxMyBAQAogLS0tLS0tLS0tLS0tCiAJW3JlbW90ZSAiPG5hbWU+Il0KIAkJdXJsID0gPHVybD4KKwkJcHVzaHVybCA9IDxwdXNodXJsPgogCQlwdXNoID0gPHJlZnNwZWM+CiAJCWZldGNoID0gPHJlZnNwZWM+CiAtLS0tLS0tLS0tLS0KIAorVGhlIGA8cHVzaHVybD5gIGlzIHVzZWQgZm9yIHB1c2hlcyBvbmx5LiBJdCBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMKK3RvIGA8dXJsPmAuCiAKIE5hbWVkIGZpbGUgaW4gYCRHSVRfRElSL3JlbW90ZXNgCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0IGIvRG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC50eHQKaW5kZXggOTZhZjg5NzcuLjY3ZWJmZmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CkBAIC0xODgsNyArMTg4LDcgQEAKIGRpZCwgYW5kIHdoeS4KIAogRXZlcnkgY29tbWl0IGhhcyBhIDQwLWhleGRpZ2l0IGlkLCBzb21ldGltZXMgY2FsbGVkIHRoZSAib2JqZWN0IG5hbWUiIG9yIHRoZQotIlNIQTEgaWQiLCBzaG93biBvbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgImdpdC1zaG93IiBvdXRwdXQuICBZb3UgY2FuIHVzdWFsbHkKKyJTSEEtMSBpZCIsIHNob3duIG9uIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSAiZ2l0IHNob3ciIG91dHB1dC4gIFlvdSBjYW4gdXN1YWxseQogcmVmZXIgdG8gYSBjb21taXQgYnkgYSBzaG9ydGVyIG5hbWUsIHN1Y2ggYXMgYSB0YWcgb3IgYSBicmFuY2ggbmFtZSwgYnV0IHRoaXMKIGxvbmdlciBuYW1lIGNhbiBhbHNvIGJlIHVzZWZ1bC4gIE1vc3QgaW1wb3J0YW50bHksIGl0IGlzIGEgZ2xvYmFsbHkgdW5pcXVlCiBuYW1lIGZvciB0aGlzIGNvbW1pdDogc28gaWYgeW91IHRlbGwgc29tZWJvZHkgZWxzZSB0aGUgb2JqZWN0IG5hbWUgKGZvcgpAQCAtMzA3LDcgKzMwNyw3IEBACiBFeGFtaW5pbmcgYW4gb2xkIHZlcnNpb24gd2l0aG91dCBjcmVhdGluZyBhIG5ldyBicmFuY2gKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgZ2l0LWNoZWNrb3V0IGNvbW1hbmQgbm9ybWFsbHkgZXhwZWN0cyBhIGJyYW5jaCBoZWFkLCBidXQgd2lsbCBhbHNvCitUaGUgYGdpdCBjaGVja291dGAgY29tbWFuZCBub3JtYWxseSBleHBlY3RzIGEgYnJhbmNoIGhlYWQsIGJ1dCB3aWxsIGFsc28KIGFjY2VwdCBhbiBhcmJpdHJhcnkgY29tbWl0OyBmb3IgZXhhbXBsZSwgeW91IGNhbiBjaGVjayBvdXQgdGhlIGNvbW1pdAogcmVmZXJlbmNlZCBieSBhIHRhZzoKIApAQCAtMzIwLDcgKzMyMCw3IEBACiBIRUFEIGlzIG5vdyBhdCA0MjdhYmZhLi4uIExpbnV4IHYyLjYuMTcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgSEVBRCB0aGVuIHJlZmVycyB0byB0aGUgU0hBMSBvZiB0aGUgY29tbWl0IGluc3RlYWQgb2YgdG8gYSBicmFuY2gsCitUaGUgSEVBRCB0aGVuIHJlZmVycyB0byB0aGUgU0hBLTEgb2YgdGhlIGNvbW1pdCBpbnN0ZWFkIG9mIHRvIGEgYnJhbmNoLAogYW5kIGdpdCBicmFuY2ggc2hvd3MgdGhhdCB5b3UgYXJlIG5vIGxvbmdlciBvbiBhIGJyYW5jaDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MDAsNyArNDAwLDcgQEAKIFJFVklTSU9OUyIgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1yZXYtcGFyc2VbMV0uCiAKIFtbVXBkYXRpbmctYS1yZXBvc2l0b3J5LVdpdGgtZ2l0LWZldGNoXV0KLVVwZGF0aW5nIGEgcmVwb3NpdG9yeSB3aXRoIGdpdC1mZXRjaAorVXBkYXRpbmcgYSByZXBvc2l0b3J5IHdpdGggZ2l0IGZldGNoCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogRXZlbnR1YWxseSB0aGUgZGV2ZWxvcGVyIGNsb25lZCBmcm9tIHdpbGwgZG8gYWRkaXRpb25hbCB3b3JrIGluIGhlcgpAQCAtNDI3LDcgKzQyNyw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIE5ldyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgd2lsbCBiZSBzdG9yZWQgdW5kZXIgdGhlIHNob3J0aGFuZCBuYW1lCi10aGF0IHlvdSBnYXZlICJnaXQtcmVtb3RlIGFkZCIsIGluIHRoaXMgY2FzZSBsaW51eC1uZnM6Cit0aGF0IHlvdSBnYXZlICJnaXQgcmVtb3RlIGFkZCIsIGluIHRoaXMgY2FzZSBsaW51eC1uZnM6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQgZ2l0IGJyYW5jaCAtcgpAQCAtNTE2LDcgKzUxNiw3IEBACiAKIHRvIHJldHVybiB5b3UgdG8gdGhlIGJyYW5jaCB5b3Ugd2VyZSBvbiBiZWZvcmUuCiAKLU5vdGUgdGhhdCB0aGUgdmVyc2lvbiB3aGljaCBnaXQtYmlzZWN0IGNoZWNrcyBvdXQgZm9yIHlvdSBhdCBlYWNoCitOb3RlIHRoYXQgdGhlIHZlcnNpb24gd2hpY2ggYGdpdCBiaXNlY3RgIGNoZWNrcyBvdXQgZm9yIHlvdSBhdCBlYWNoCiBwb2ludCBpcyBqdXN0IGEgc3VnZ2VzdGlvbiwgYW5kIHlvdSdyZSBmcmVlIHRvIHRyeSBhIGRpZmZlcmVudAogdmVyc2lvbiBpZiB5b3UgdGhpbmsgaXQgd291bGQgYmUgYSBnb29kIGlkZWEuICBGb3IgZXhhbXBsZSwKIG9jY2FzaW9uYWxseSB5b3UgbWF5IGxhbmQgb24gYSBjb21taXQgdGhhdCBicm9rZSBzb21ldGhpbmcgdW5yZWxhdGVkOwpAQCAtNTkyLDExICs1OTIsMTEgQEAKIGNvbW1pdHM6CiAKIE1lcmdlcyAodG8gYmUgZGlzY3Vzc2VkIGxhdGVyKSwgYXMgd2VsbCBhcyBvcGVyYXRpb25zIHN1Y2ggYXMKLWdpdC1yZXNldCwgd2hpY2ggY2hhbmdlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgY29tbWl0LCBnZW5lcmFsbHkKK2BnaXQgcmVzZXRgLCB3aGljaCBjaGFuZ2UgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBjb21taXQsIGdlbmVyYWxseQogc2V0IE9SSUdfSEVBRCB0byB0aGUgdmFsdWUgSEVBRCBoYWQgYmVmb3JlIHRoZSBjdXJyZW50IG9wZXJhdGlvbi4KIAotVGhlIGdpdC1mZXRjaCBvcGVyYXRpb24gYWx3YXlzIHN0b3JlcyB0aGUgaGVhZCBvZiB0aGUgbGFzdCBmZXRjaGVkCi1icmFuY2ggaW4gRkVUQ0hfSEVBRC4gIEZvciBleGFtcGxlLCBpZiB5b3UgcnVuIGdpdCBmZXRjaCB3aXRob3V0CitUaGUgYGdpdCBmZXRjaGAgb3BlcmF0aW9uIGFsd2F5cyBzdG9yZXMgdGhlIGhlYWQgb2YgdGhlIGxhc3QgZmV0Y2hlZAorYnJhbmNoIGluIEZFVENIX0hFQUQuICBGb3IgZXhhbXBsZSwgaWYgeW91IHJ1biBgZ2l0IGZldGNoYCB3aXRob3V0CiBzcGVjaWZ5aW5nIGEgbG9jYWwgYnJhbmNoIGFzIHRoZSB0YXJnZXQgb2YgdGhlIG9wZXJhdGlvbgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03MzksNyArNzM5LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQWx0ZXJuYXRpdmVseSwgeW91IG1heSBvZnRlbiBzZWUgdGhpcyBzb3J0IG9mIHRoaW5nIGRvbmUgd2l0aCB0aGUKLWxvd2VyLWxldmVsIGNvbW1hbmQgbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0sIHdoaWNoIGp1c3QgbGlzdHMgdGhlIFNIQTEncworbG93ZXItbGV2ZWwgY29tbWFuZCBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSwgd2hpY2gganVzdCBsaXN0cyB0aGUgU0hBLTEncwogb2YgYWxsIHRoZSBnaXZlbiBjb21taXRzOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDczLDkgKzEwNzMsOSBAQAogCiBzaG93cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBmaWxlLgogCi1Ob3RlIHRoYXQgImdpdC1hZGQiIGFsd2F5cyBhZGRzIGp1c3QgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgYSBmaWxlCitOb3RlIHRoYXQgImdpdCBhZGQiIGFsd2F5cyBhZGRzIGp1c3QgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgYSBmaWxlCiB0byB0aGUgaW5kZXg7IGZ1cnRoZXIgY2hhbmdlcyB0byB0aGUgc2FtZSBmaWxlIHdpbGwgYmUgaWdub3JlZCB1bmxlc3MKLXlvdSBydW4gZ2l0LWFkZCBvbiB0aGUgZmlsZSBhZ2Fpbi4KK3lvdSBydW4gYGdpdCBhZGRgIG9uIHRoZSBmaWxlIGFnYWluLgogCiBXaGVuIHlvdSdyZSByZWFkeSwganVzdCBydW4KIApAQCAtMTEzNiwxMCArMTEzNiwxMCBAQAogQSBwcm9qZWN0IHdpbGwgb2Z0ZW4gZ2VuZXJhdGUgZmlsZXMgdGhhdCB5b3UgZG8gJ25vdCcgd2FudCB0byB0cmFjayB3aXRoIGdpdC4KIFRoaXMgdHlwaWNhbGx5IGluY2x1ZGVzIGZpbGVzIGdlbmVyYXRlZCBieSBhIGJ1aWxkIHByb2Nlc3Mgb3IgdGVtcG9yYXJ5CiBiYWNrdXAgZmlsZXMgbWFkZSBieSB5b3VyIGVkaXRvci4gT2YgY291cnNlLCAnbm90JyB0cmFja2luZyBmaWxlcyB3aXRoIGdpdAotaXMganVzdCBhIG1hdHRlciBvZiAnbm90JyBjYWxsaW5nICJgZ2l0LWFkZGAiIG9uIHRoZW0uIEJ1dCBpdCBxdWlja2x5IGJlY29tZXMKK2lzIGp1c3QgYSBtYXR0ZXIgb2YgJ25vdCcgY2FsbGluZyBgZ2l0IGFkZGAgb24gdGhlbS4gQnV0IGl0IHF1aWNrbHkgYmVjb21lcwogYW5ub3lpbmcgdG8gaGF2ZSB0aGVzZSB1bnRyYWNrZWQgZmlsZXMgbHlpbmcgYXJvdW5kOyBlLmcuIHRoZXkgbWFrZQotImBnaXQgYWRkIC5gIiBwcmFjdGljYWxseSB1c2VsZXNzLCBhbmQgdGhleSBrZWVwIHNob3dpbmcgdXAgaW4gdGhlIG91dHB1dCBvZgotImBnaXQgc3RhdHVzYCIuCitgZ2l0IGFkZCAuYCBwcmFjdGljYWxseSB1c2VsZXNzLCBhbmQgdGhleSBrZWVwIHNob3dpbmcgdXAgaW4gdGhlIG91dHB1dCBvZgorYGdpdCBzdGF0dXNgLgogCiBZb3UgY2FuIHRlbGwgZ2l0IHRvIGlnbm9yZSBjZXJ0YWluIGZpbGVzIGJ5IGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgLmdpdGlnbm9yZQogaW4gdGhlIHRvcCBsZXZlbCBvZiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LCB3aXRoIGNvbnRlbnRzIHN1Y2ggYXM6CkBAIC0xMzQ5LDcgKzEzNDksNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB0aGUgZGlmZmVyZW50IHN0YWdlcyBvZiB0aGF0IGZpbGUgd2lsbCBiZSAiY29sbGFwc2VkIiwgYWZ0ZXIgd2hpY2gKLWdpdC1kaWZmIHdpbGwgKGJ5IGRlZmF1bHQpIG5vIGxvbmdlciBzaG93IGRpZmZzIGZvciB0aGF0IGZpbGUuCitgZ2l0IGRpZmZgIHdpbGwgKGJ5IGRlZmF1bHQpIG5vIGxvbmdlciBzaG93IGRpZmZzIGZvciB0aGF0IGZpbGUuCiAKIFtbdW5kb2luZy1hLW1lcmdlXV0KIFVuZG9pbmcgYSBtZXJnZQpAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAKIAogSWYgdGhlIHByb2JsZW1hdGljIGNvbW1pdCBpcyB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBhbmQgeW91IGhhdmUgbm90CiB5ZXQgbWFkZSB0aGF0IGNvbW1pdCBwdWJsaWMsIHRoZW4geW91IG1heSBqdXN0Ci08PHVuZG9pbmctYS1tZXJnZSxkZXN0cm95IGl0IHVzaW5nIGdpdC1yZXNldD4+LgorPDx1bmRvaW5nLWEtbWVyZ2UsZGVzdHJveSBpdCB1c2luZyBgZ2l0IHJlc2V0YD4+LgogCiBBbHRlcm5hdGl2ZWx5LCB5b3UKIGNhbiBlZGl0IHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgdXBkYXRlIHRoZSBpbmRleCB0byBmaXggeW91cgpAQCAtMTQ3NCw3ICsxNDc0LDcgQEAKIAogSW4gdGhlIHByb2Nlc3Mgb2YgdW5kb2luZyBhIHByZXZpb3VzIGJhZCBjaGFuZ2UsIHlvdSBtYXkgZmluZCBpdAogdXNlZnVsIHRvIGNoZWNrIG91dCBhbiBvbGRlciB2ZXJzaW9uIG9mIGEgcGFydGljdWxhciBmaWxlIHVzaW5nCi1saW5rZ2l0OmdpdC1jaGVja291dFsxXS4gIFdlJ3ZlIHVzZWQgZ2l0LWNoZWNrb3V0IGJlZm9yZSB0byBzd2l0Y2gKK2xpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdLiAgV2UndmUgdXNlZCBgZ2l0IGNoZWNrb3V0YCBiZWZvcmUgdG8gc3dpdGNoCiBicmFuY2hlcywgYnV0IGl0IGhhcyBxdWl0ZSBkaWZmZXJlbnQgYmVoYXZpb3IgaWYgaXQgaXMgZ2l2ZW4gYSBwYXRoCiBuYW1lOiB0aGUgY29tbWFuZAogCkBAIC0xNTIwLDEwICsxNTIwLDEwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQWZ0ZXIgdGhhdCwgeW91IGNhbiBnbyBiYWNrIHRvIHdoYXQgeW91IHdlcmUgd29ya2luZyBvbiB3aXRoCi1gZ2l0IHN0YXNoIGFwcGx5YDoKK2BnaXQgc3Rhc2ggcG9wYDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdCBzdGFzaCBhcHBseQorJCBnaXQgc3Rhc2ggcG9wCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCkBAIC0xNTQyLDcgKzE1NDIsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB0byByZWNvbXByZXNzIHRoZSBhcmNoaXZlLiAgVGhpcyBjYW4gYmUgdmVyeSB0aW1lLWNvbnN1bWluZywgc28KLXlvdSBtYXkgcHJlZmVyIHRvIHJ1biBnaXQtZ2Mgd2hlbiB5b3UgYXJlIG5vdCBkb2luZyBvdGhlciB3b3JrLgoreW91IG1heSBwcmVmZXIgdG8gcnVuIGBnaXQgZ2NgIHdoZW4geW91IGFyZSBub3QgZG9pbmcgb3RoZXIgd29yay4KIAogCiBbW2Vuc3VyaW5nLXJlbGlhYmlsaXR5XV0KQEAgLTE2MzQsNyArMTYzNCw3IEBACiBzdXBwb3NlIHlvdSBkZWxldGUgYSBicmFuY2gsIHRoZW4gcmVhbGl6ZSB5b3UgbmVlZCB0aGUgaGlzdG9yeSBpdAogY29udGFpbmVkLiAgVGhlIHJlZmxvZyBpcyBhbHNvIGRlbGV0ZWQ7IGhvd2V2ZXIsIGlmIHlvdSBoYXZlIG5vdCB5ZXQKIHBydW5lZCB0aGUgcmVwb3NpdG9yeSwgdGhlbiB5b3UgbWF5IHN0aWxsIGJlIGFibGUgdG8gZmluZCB0aGUgbG9zdAotY29tbWl0cyBpbiB0aGUgZGFuZ2xpbmcgb2JqZWN0cyB0aGF0IGdpdC1mc2NrIHJlcG9ydHMuICBTZWUKK2NvbW1pdHMgaW4gdGhlIGRhbmdsaW5nIG9iamVjdHMgdGhhdCBgZ2l0IGZzY2tgIHJlcG9ydHMuICBTZWUKIDw8ZGFuZ2xpbmctb2JqZWN0cz4+IGZvciB0aGUgZGV0YWlscy4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTY3Niw3ICsxNjc2LDcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogW1tnZXR0aW5nLXVwZGF0ZXMtV2l0aC1naXQtcHVsbF1dCi1HZXR0aW5nIHVwZGF0ZXMgd2l0aCBnaXQtcHVsbAorR2V0dGluZyB1cGRhdGVzIHdpdGggZ2l0IHB1bGwKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEFmdGVyIHlvdSBjbG9uZSBhIHJlcG9zaXRvcnkgYW5kIG1ha2UgYSBmZXcgY2hhbmdlcyBvZiB5b3VyIG93biwgeW91CkBAIC0xNzIyLDcgKzE3MjIsNyBAQAogPDxmYXN0LWZvcndhcmRzLGZhc3QgZm9yd2FyZD4+OyBpbnN0ZWFkLCB5b3VyIGJyYW5jaCB3aWxsIGp1c3QgYmUKIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGxhdGVzdCBjb21taXQgZnJvbSB0aGUgdXBzdHJlYW0gYnJhbmNoLikKIAotVGhlIGdpdC1wdWxsIGNvbW1hbmQgY2FuIGFsc28gYmUgZ2l2ZW4gIi4iIGFzIHRoZSAicmVtb3RlIiByZXBvc2l0b3J5LAorVGhlIGBnaXQgcHVsbGAgY29tbWFuZCBjYW4gYWxzbyBiZSBnaXZlbiAiLiIgYXMgdGhlICJyZW1vdGUiIHJlcG9zaXRvcnksCiBpbiB3aGljaCBjYXNlIGl0IGp1c3QgbWVyZ2VzIGluIGEgYnJhbmNoIGZyb20gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeTsgc28KIHRoZSBjb21tYW5kcwogCkBAIC0xNzk1LDcgKzE3OTUsNyBAQAogQW5vdGhlciB3YXkgdG8gc3VibWl0IGNoYW5nZXMgdG8gYSBwcm9qZWN0IGlzIHRvIHRlbGwgdGhlIG1haW50YWluZXIKIG9mIHRoYXQgcHJvamVjdCB0byBwdWxsIHRoZSBjaGFuZ2VzIGZyb20geW91ciByZXBvc2l0b3J5IHVzaW5nCiBsaW5rZ2l0OmdpdC1wdWxsWzFdLiAgSW4gdGhlIHNlY3Rpb24gIjw8Z2V0dGluZy11cGRhdGVzLVdpdGgtZ2l0LXB1bGwsCi1HZXR0aW5nIHVwZGF0ZXMgd2l0aCBnaXQtcHVsbD4+IiB3ZSBkZXNjcmliZWQgdGhpcyBhcyBhIHdheSB0byBnZXQKK0dldHRpbmcgdXBkYXRlcyB3aXRoIGBnaXQgcHVsbGA+PiIgd2UgZGVzY3JpYmVkIHRoaXMgYXMgYSB3YXkgdG8gZ2V0CiB1cGRhdGVzIGZyb20gdGhlICJtYWluIiByZXBvc2l0b3J5LCBidXQgaXQgd29ya3MganVzdCBhcyB3ZWxsIGluIHRoZQogb3RoZXIgZGlyZWN0aW9uLgogCkBAIC0xODQ3LDcgKzE4NDcsNyBAQAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKIEFzc3VtZSB5b3VyIHBlcnNvbmFsIHJlcG9zaXRvcnkgaXMgaW4gdGhlIGRpcmVjdG9yeSB+L3Byb2ouICBXZQotZmlyc3QgY3JlYXRlIGEgbmV3IGNsb25lIG9mIHRoZSByZXBvc2l0b3J5IGFuZCB0ZWxsIGdpdC1kYWVtb24gdGhhdCBpdAorZmlyc3QgY3JlYXRlIGEgbmV3IGNsb25lIG9mIHRoZSByZXBvc2l0b3J5IGFuZCB0ZWxsIGBnaXQgZGFlbW9uYCB0aGF0IGl0CiBpcyBtZWFudCB0byBiZSBwdWJsaWM6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE4NzgsMTAgKzE4NzgsMTAgQEAKIE90aGVyd2lzZSwgYWxsIHlvdSBuZWVkIHRvIGRvIGlzIHN0YXJ0IGxpbmtnaXQ6Z2l0LWRhZW1vblsxXTsgaXQgd2lsbAogbGlzdGVuIG9uIHBvcnQgOTQxOC4gIEJ5IGRlZmF1bHQsIGl0IHdpbGwgYWxsb3cgYWNjZXNzIHRvIGFueSBkaXJlY3RvcnkKIHRoYXQgbG9va3MgbGlrZSBhIGdpdCBkaXJlY3RvcnkgYW5kIGNvbnRhaW5zIHRoZSBtYWdpYyBmaWxlCi1naXQtZGFlbW9uLWV4cG9ydC1vay4gIFBhc3Npbmcgc29tZSBkaXJlY3RvcnkgcGF0aHMgYXMgZ2l0LWRhZW1vbgorZ2l0LWRhZW1vbi1leHBvcnQtb2suICBQYXNzaW5nIHNvbWUgZGlyZWN0b3J5IHBhdGhzIGFzIGBnaXQgZGFlbW9uYAogYXJndW1lbnRzIHdpbGwgZnVydGhlciByZXN0cmljdCB0aGUgZXhwb3J0cyB0byB0aG9zZSBwYXRocy4KIAotWW91IGNhbiBhbHNvIHJ1biBnaXQtZGFlbW9uIGFzIGFuIGluZXRkIHNlcnZpY2U7IHNlZSB0aGUKK1lvdSBjYW4gYWxzbyBydW4gYGdpdCBkYWVtb25gIGFzIGFuIGluZXRkIHNlcnZpY2U7IHNlZSB0aGUKIGxpbmtnaXQ6Z2l0LWRhZW1vblsxXSBtYW4gcGFnZSBmb3IgZGV0YWlscy4gIChTZWUgZXNwZWNpYWxseSB0aGUKIGV4YW1wbGVzIHNlY3Rpb24uKQogCkBAIC0xOTQyLDcgKzE5NDIsNyBAQAogJCBnaXQgcHVzaCBzc2g6Ly95b3Vyc2VydmVyLmNvbS9+eW91L3Byb2ouZ2l0IG1hc3RlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1BcyB3aXRoIGdpdC1mZXRjaCwgZ2l0LXB1c2ggd2lsbCBjb21wbGFpbiBpZiB0aGlzIGRvZXMgbm90IHJlc3VsdCBpbiBhCitBcyB3aXRoIGBnaXQgZmV0Y2hgLCBgZ2l0IHB1c2hgIHdpbGwgY29tcGxhaW4gaWYgdGhpcyBkb2VzIG5vdCByZXN1bHQgaW4gYQogPDxmYXN0LWZvcndhcmRzLGZhc3QgZm9yd2FyZD4+OyBzZWUgdGhlIGZvbGxvd2luZyBzZWN0aW9uIGZvciBkZXRhaWxzIG9uCiBoYW5kbGluZyB0aGlzIGNhc2UuCiAKQEAgLTE5NTIsNyArMTk1Miw3IEBACiB3aWxsIG5vdCBiZSB1cGRhdGVkIGJ5IHRoZSBwdXNoLiAgVGhpcyBtYXkgbGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMgaWYKIHRoZSBicmFuY2ggeW91IHB1c2ggdG8gaXMgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2ghCiAKLUFzIHdpdGggZ2l0LWZldGNoLCB5b3UgbWF5IGFsc28gc2V0IHVwIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0bworQXMgd2l0aCBgZ2l0IGZldGNoYCwgeW91IG1heSBhbHNvIHNldCB1cCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8KIHNhdmUgdHlwaW5nOyBzbywgZm9yIGV4YW1wbGUsIGFmdGVyCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5ODgsMTMgKzE5ODgsMTMgQEAKIAogVGhpcyBjYW4gaGFwcGVuLCBmb3IgZXhhbXBsZSwgaWYgeW91OgogCi0JLSB1c2UgYGdpdC1yZXNldCAtLWhhcmRgIHRvIHJlbW92ZSBhbHJlYWR5LXB1Ymxpc2hlZCBjb21taXRzLCBvcgotCS0gdXNlIGBnaXQtY29tbWl0IC0tYW1lbmRgIHRvIHJlcGxhY2UgYWxyZWFkeS1wdWJsaXNoZWQgY29tbWl0cworCS0gdXNlIGBnaXQgcmVzZXQgLS1oYXJkYCB0byByZW1vdmUgYWxyZWFkeS1wdWJsaXNoZWQgY29tbWl0cywgb3IKKwktIHVzZSBgZ2l0IGNvbW1pdCAtLWFtZW5kYCB0byByZXBsYWNlIGFscmVhZHktcHVibGlzaGVkIGNvbW1pdHMKIAkgIChhcyBpbiA8PGZpeGluZy1hLW1pc3Rha2UtYnktcmV3cml0aW5nLWhpc3Rvcnk+PiksIG9yCi0JLSB1c2UgYGdpdC1yZWJhc2VgIHRvIHJlYmFzZSBhbnkgYWxyZWFkeS1wdWJsaXNoZWQgY29tbWl0cyAoYXMKKwktIHVzZSBgZ2l0IHJlYmFzZWAgdG8gcmViYXNlIGFueSBhbHJlYWR5LXB1Ymxpc2hlZCBjb21taXRzIChhcwogCSAgaW4gPDx1c2luZy1naXQtcmViYXNlPj4pLgogCi1Zb3UgbWF5IGZvcmNlIGdpdC1wdXNoIHRvIHBlcmZvcm0gdGhlIHVwZGF0ZSBhbnl3YXkgYnkgcHJlY2VkaW5nIHRoZQorWW91IG1heSBmb3JjZSBgZ2l0IHB1c2hgIHRvIHBlcmZvcm0gdGhlIHVwZGF0ZSBhbnl3YXkgYnkgcHJlY2VkaW5nIHRoZQogYnJhbmNoIG5hbWUgd2l0aCBhIHBsdXMgc2lnbjoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjAzNiw3ICsyMDM2LDcgQEAKIAogCS0gR2l0J3MgYWJpbGl0eSB0byBxdWlja2x5IGltcG9ydCBhbmQgbWVyZ2UgcGF0Y2hlcyBhbGxvd3MgYQogCSAgc2luZ2xlIG1haW50YWluZXIgdG8gcHJvY2VzcyBpbmNvbWluZyBjaGFuZ2VzIGV2ZW4gYXQgdmVyeQotCSAgaGlnaCByYXRlcy4gIEFuZCB3aGVuIHRoYXQgYmVjb21lcyB0b28gbXVjaCwgZ2l0LXB1bGwgcHJvdmlkZXMKKwkgIGhpZ2ggcmF0ZXMuICBBbmQgd2hlbiB0aGF0IGJlY29tZXMgdG9vIG11Y2gsIGBnaXQgcHVsbGAgcHJvdmlkZXMKIAkgIGFuIGVhc3kgd2F5IGZvciB0aGF0IG1haW50YWluZXIgdG8gZGVsZWdhdGUgdGhpcyBqb2IgdG8gb3RoZXIKIAkgIG1haW50YWluZXJzIHdoaWxlIHN0aWxsIGFsbG93aW5nIG9wdGlvbmFsIHJldmlldyBvZiBpbmNvbWluZwogCSAgY2hhbmdlcy4KQEAgLTI0MDQsNyArMjQwNCw3IEBACiB5b3UgYXJlIHJld3JpdGluZyBoaXN0b3J5LgogCiBbW3VzaW5nLWdpdC1yZWJhc2VdXQotS2VlcGluZyBhIHBhdGNoIHNlcmllcyB1cCB0byBkYXRlIHVzaW5nIGdpdC1yZWJhc2UKK0tlZXBpbmcgYSBwYXRjaCBzZXJpZXMgdXAgdG8gZGF0ZSB1c2luZyBnaXQgcmViYXNlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBTdXBwb3NlIHRoYXQgeW91IGNyZWF0ZSBhIGJyYW5jaCAibXl3b3JrIiBvbiBhIHJlbW90ZS10cmFja2luZyBicmFuY2gKQEAgLTI0NjgsOSArMjQ2OCw5IEBACiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAogSW4gdGhlIHByb2Nlc3MsIGl0IG1heSBkaXNjb3ZlciBjb25mbGljdHMuICBJbiB0aGF0IGNhc2UgaXQgd2lsbCBzdG9wCi1hbmQgYWxsb3cgeW91IHRvIGZpeCB0aGUgY29uZmxpY3RzOyBhZnRlciBmaXhpbmcgY29uZmxpY3RzLCB1c2UgImdpdC1hZGQiCithbmQgYWxsb3cgeW91IHRvIGZpeCB0aGUgY29uZmxpY3RzOyBhZnRlciBmaXhpbmcgY29uZmxpY3RzLCB1c2UgYGdpdCBhZGRgCiB0byB1cGRhdGUgdGhlIGluZGV4IHdpdGggdGhvc2UgY29udGVudHMsIGFuZCB0aGVuLCBpbnN0ZWFkIG9mCi1ydW5uaW5nIGdpdC1jb21taXQsIGp1c3QgcnVuCitydW5uaW5nIGBnaXQgY29tbWl0YCwganVzdCBydW4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogJCBnaXQgcmViYXNlIC0tY29udGludWUKQEAgLTI1MDgsNyArMjUwOCw3IEBACiAkIGdpdCB0YWcgYmFkIG15d29ya341CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLShFaXRoZXIgZ2l0ayBvciBnaXQtbG9nIG1heSBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgdGhlIGNvbW1pdC4pCisoRWl0aGVyIGdpdGsgb3IgYGdpdCBsb2dgIG1heSBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgdGhlIGNvbW1pdC4pCiAKIFRoZW4gY2hlY2sgb3V0IHRoYXQgY29tbWl0LCBlZGl0IGl0LCBhbmQgcmViYXNlIHRoZSByZXN0IG9mIHRoZSBzZXJpZXMKIG9uIHRvcCBvZiBpdCAobm90ZSB0aGF0IHdlIGNvdWxkIGNoZWNrIG91dCB0aGUgY29tbWl0IG9uIGEgdGVtcG9yYXJ5CkBAIC0yNTQ5LDEyICsyNTQ5LDEyIEBACiAKIGFuZCBicm93c2UgdGhyb3VnaCB0aGUgbGlzdCBvZiBwYXRjaGVzIGluIHRoZSBteXdvcmsgYnJhbmNoIHVzaW5nIGdpdGssCiBhcHBseWluZyB0aGVtIChwb3NzaWJseSBpbiBhIGRpZmZlcmVudCBvcmRlcikgdG8gbXl3b3JrLW5ldyB1c2luZwotY2hlcnJ5LXBpY2ssIGFuZCBwb3NzaWJseSBtb2RpZnlpbmcgdGhlbSBhcyB5b3UgZ28gdXNpbmcgYGNvbW1pdCAtLWFtZW5kYC4KK2NoZXJyeS1waWNrLCBhbmQgcG9zc2libHkgbW9kaWZ5aW5nIHRoZW0gYXMgeW91IGdvIHVzaW5nIGBnaXQgY29tbWl0IC0tYW1lbmRgLgogVGhlIGxpbmtnaXQ6Z2l0LWd1aVsxXSBjb21tYW5kIG1heSBhbHNvIGhlbHAgYXMgaXQgYWxsb3dzIHlvdSB0bwogaW5kaXZpZHVhbGx5IHNlbGVjdCBkaWZmIGh1bmtzIGZvciBpbmNsdXNpb24gaW4gdGhlIGluZGV4IChieQogcmlnaHQtY2xpY2tpbmcgb24gdGhlIGRpZmYgaHVuayBhbmQgY2hvb3NpbmcgIlN0YWdlIEh1bmsgZm9yIENvbW1pdCIpLgogCi1Bbm90aGVyIHRlY2huaXF1ZSBpcyB0byB1c2UgZ2l0LWZvcm1hdC1wYXRjaCB0byBjcmVhdGUgYSBzZXJpZXMgb2YKK0Fub3RoZXIgdGVjaG5pcXVlIGlzIHRvIHVzZSBgZ2l0IGZvcm1hdC1wYXRjaGAgdG8gY3JlYXRlIGEgc2VyaWVzIG9mCiBwYXRjaGVzLCB0aGVuIHJlc2V0IHRoZSBzdGF0ZSB0byBiZWZvcmUgdGhlIHBhdGNoZXM6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI2NjIsNyArMjY2Miw3IEBACiBsaW5rZ2l0OmdpdC1iaXNlY3RbMV0gaWRlbnRpZmllcyBDIGFzIHRoZSBjdWxwcml0LCBob3cgd2lsbCB5b3UKIGZpZ3VyZSBvdXQgdGhhdCB0aGUgcHJvYmxlbSBpcyBkdWUgdG8gdGhpcyBjaGFuZ2UgaW4gc2VtYW50aWNzPwogCi1XaGVuIHRoZSByZXN1bHQgb2YgYSBnaXQtYmlzZWN0IGlzIGEgbm9uLW1lcmdlIGNvbW1pdCwgeW91IHNob3VsZAorV2hlbiB0aGUgcmVzdWx0IG9mIGEgYGdpdCBiaXNlY3RgIGlzIGEgbm9uLW1lcmdlIGNvbW1pdCwgeW91IHNob3VsZAogbm9ybWFsbHkgYmUgYWJsZSB0byBkaXNjb3ZlciB0aGUgcHJvYmxlbSBieSBleGFtaW5pbmcganVzdCB0aGF0IGNvbW1pdC4KIERldmVsb3BlcnMgY2FuIG1ha2UgdGhpcyBlYXN5IGJ5IGJyZWFraW5nIHRoZWlyIGNoYW5nZXMgaW50byBzbWFsbAogc2VsZi1jb250YWluZWQgY29tbWl0cy4gIFRoYXQgd29uJ3QgaGVscCBpbiB0aGUgY2FzZSBhYm92ZSwgaG93ZXZlciwKQEAgLTI3MjUsNyArMjcyNSw3IEBACiBnaXQgZmV0Y2ggYW5kIGZhc3QtZm9yd2FyZHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2hlbiB1cGRhdGluZyBhbiBleGlzdGluZyBicmFuY2gsICJnaXQtZmV0Y2giCitJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2hlbiB1cGRhdGluZyBhbiBleGlzdGluZyBicmFuY2gsICJnaXQgZmV0Y2giCiBjaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBvbiB0aGUgcmVtb3RlCiBicmFuY2ggaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBtb3N0IHJlY2VudCBjb21taXQgb24geW91ciBjb3B5IG9mIHRoZQogYnJhbmNoIGJlZm9yZSB1cGRhdGluZyB5b3VyIGNvcHkgb2YgdGhlIGJyYW5jaCB0byBwb2ludCBhdCB0aGUgbmV3CkBAIC0yNzUxLDcgKzI3NTEsNyBAQAogICAgICAgICAgICAgby0tby0tbyA8LS0gbmV3IGhlYWQgb2YgdGhlIGJyYW5jaAogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUluIHRoaXMgY2FzZSwgImdpdC1mZXRjaCIgd2lsbCBmYWlsLCBhbmQgcHJpbnQgb3V0IGEgd2FybmluZy4KK0luIHRoaXMgY2FzZSwgImdpdCBmZXRjaCIgd2lsbCBmYWlsLCBhbmQgcHJpbnQgb3V0IGEgd2FybmluZy4KIAogSW4gdGhhdCBjYXNlLCB5b3UgY2FuIHN0aWxsIGZvcmNlIGdpdCB0byB1cGRhdGUgdG8gdGhlIG5ldyBoZWFkLCBhcwogZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi4gIEhvd2V2ZXIsIG5vdGUgdGhhdCBpbiB0aGUKQEAgLTI3NjAsNyArMjc2MCw3IEBACiB0aGVtLgogCiBbW2ZvcmNpbmctZmV0Y2hdXQotRm9yY2luZyBnaXQtZmV0Y2ggdG8gZG8gbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzCitGb3JjaW5nIGdpdCBmZXRjaCB0byBkbyBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJZiBnaXQgZmV0Y2ggZmFpbHMgYmVjYXVzZSB0aGUgbmV3IGhlYWQgb2YgYSBicmFuY2ggaXMgbm90IGEKQEAgLTI4NjUsOCArMjg2NSw4IEBACiBXZSBhbHJlYWR5IHNhdyBpbiA8PHVuZGVyc3RhbmRpbmctY29tbWl0cz4+IHRoYXQgYWxsIGNvbW1pdHMgYXJlIHN0b3JlZAogdW5kZXIgYSA0MC1kaWdpdCAib2JqZWN0IG5hbWUiLiAgSW4gZmFjdCwgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8KIHJlcHJlc2VudCB0aGUgaGlzdG9yeSBvZiBhIHByb2plY3QgaXMgc3RvcmVkIGluIG9iamVjdHMgd2l0aCBzdWNoIG5hbWVzLgotSW4gZWFjaCBjYXNlIHRoZSBuYW1lIGlzIGNhbGN1bGF0ZWQgYnkgdGFraW5nIHRoZSBTSEExIGhhc2ggb2YgdGhlCi1jb250ZW50cyBvZiB0aGUgb2JqZWN0LiAgVGhlIFNIQTEgaGFzaCBpcyBhIGNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbi4KK0luIGVhY2ggY2FzZSB0aGUgbmFtZSBpcyBjYWxjdWxhdGVkIGJ5IHRha2luZyB0aGUgU0hBLTEgaGFzaCBvZiB0aGUKK2NvbnRlbnRzIG9mIHRoZSBvYmplY3QuICBUaGUgU0hBLTEgaGFzaCBpcyBhIGNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbi4KIFdoYXQgdGhhdCBtZWFucyB0byB1cyBpcyB0aGF0IGl0IGlzIGltcG9zc2libGUgdG8gZmluZCB0d28gZGlmZmVyZW50CiBvYmplY3RzIHdpdGggdGhlIHNhbWUgbmFtZS4gIFRoaXMgaGFzIGEgbnVtYmVyIG9mIGFkdmFudGFnZXM7IGFtb25nCiBvdGhlcnM6CkBAIC0yODc3LDEwICsyODc3LDEwIEBACiAgIHNhbWUgY29udGVudCBzdG9yZWQgaW4gdHdvIHJlcG9zaXRvcmllcyB3aWxsIGFsd2F5cyBiZSBzdG9yZWQgdW5kZXIKICAgdGhlIHNhbWUgbmFtZS4KIC0gR2l0IGNhbiBkZXRlY3QgZXJyb3JzIHdoZW4gaXQgcmVhZHMgYW4gb2JqZWN0LCBieSBjaGVja2luZyB0aGF0IHRoZQotICBvYmplY3QncyBuYW1lIGlzIHN0aWxsIHRoZSBTSEExIGhhc2ggb2YgaXRzIGNvbnRlbnRzLgorICBvYmplY3QncyBuYW1lIGlzIHN0aWxsIHRoZSBTSEEtMSBoYXNoIG9mIGl0cyBjb250ZW50cy4KIAogKFNlZSA8PG9iamVjdC1kZXRhaWxzPj4gZm9yIHRoZSBkZXRhaWxzIG9mIHRoZSBvYmplY3QgZm9ybWF0dGluZyBhbmQKLVNIQTEgY2FsY3VsYXRpb24uKQorU0hBLTEgY2FsY3VsYXRpb24uKQogCiBUaGVyZSBhcmUgZm91ciBkaWZmZXJlbnQgdHlwZXMgb2Ygb2JqZWN0czogImJsb2IiLCAidHJlZSIsICJjb21taXQiLCBhbmQKICJ0YWciLgpAQCAtMjkyNiw5ICsyOTI2LDkgQEAKIAogQXMgeW91IGNhbiBzZWUsIGEgY29tbWl0IGlzIGRlZmluZWQgYnk6CiAKLS0gYSB0cmVlOiBUaGUgU0hBMSBuYW1lIG9mIGEgdHJlZSBvYmplY3QgKGFzIGRlZmluZWQgYmVsb3cpLCByZXByZXNlbnRpbmcKKy0gYSB0cmVlOiBUaGUgU0hBLTEgbmFtZSBvZiBhIHRyZWUgb2JqZWN0IChhcyBkZWZpbmVkIGJlbG93KSwgcmVwcmVzZW50aW5nCiAgIHRoZSBjb250ZW50cyBvZiBhIGRpcmVjdG9yeSBhdCBhIGNlcnRhaW4gcG9pbnQgaW4gdGltZS4KLS0gcGFyZW50KHMpOiBUaGUgU0hBMSBuYW1lIG9mIHNvbWUgbnVtYmVyIG9mIGNvbW1pdHMgd2hpY2ggcmVwcmVzZW50IHRoZQorLSBwYXJlbnQocyk6IFRoZSBTSEEtMSBuYW1lIG9mIHNvbWUgbnVtYmVyIG9mIGNvbW1pdHMgd2hpY2ggcmVwcmVzZW50IHRoZQogICBpbW1lZGlhdGVseSBwcmV2aW91cyBzdGVwKHMpIGluIHRoZSBoaXN0b3J5IG9mIHRoZSBwcm9qZWN0LiAgVGhlCiAgIGV4YW1wbGUgYWJvdmUgaGFzIG9uZSBwYXJlbnQ7IG1lcmdlIGNvbW1pdHMgbWF5IGhhdmUgbW9yZSB0aGFuCiAgIG9uZS4gIEEgY29tbWl0IHdpdGggbm8gcGFyZW50cyBpcyBjYWxsZWQgYSAicm9vdCIgY29tbWl0LCBhbmQKQEAgLTI5NzcsMTMgKzI5NzcsMTMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBBcyB5b3UgY2FuIHNlZSwgYSB0cmVlIG9iamVjdCBjb250YWlucyBhIGxpc3Qgb2YgZW50cmllcywgZWFjaCB3aXRoIGEKLW1vZGUsIG9iamVjdCB0eXBlLCBTSEExIG5hbWUsIGFuZCBuYW1lLCBzb3J0ZWQgYnkgbmFtZS4gIEl0IHJlcHJlc2VudHMKK21vZGUsIG9iamVjdCB0eXBlLCBTSEEtMSBuYW1lLCBhbmQgbmFtZSwgc29ydGVkIGJ5IG5hbWUuICBJdCByZXByZXNlbnRzCiB0aGUgY29udGVudHMgb2YgYSBzaW5nbGUgZGlyZWN0b3J5IHRyZWUuCiAKIFRoZSBvYmplY3QgdHlwZSBtYXkgYmUgYSBibG9iLCByZXByZXNlbnRpbmcgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSwgb3IKIGFub3RoZXIgdHJlZSwgcmVwcmVzZW50aW5nIHRoZSBjb250ZW50cyBvZiBhIHN1YmRpcmVjdG9yeS4gIFNpbmNlIHRyZWVzCi1hbmQgYmxvYnMsIGxpa2UgYWxsIG90aGVyIG9iamVjdHMsIGFyZSBuYW1lZCBieSB0aGUgU0hBMSBoYXNoIG9mIHRoZWlyCi1jb250ZW50cywgdHdvIHRyZWVzIGhhdmUgdGhlIHNhbWUgU0hBMSBuYW1lIGlmIGFuZCBvbmx5IGlmIHRoZWlyCithbmQgYmxvYnMsIGxpa2UgYWxsIG90aGVyIG9iamVjdHMsIGFyZSBuYW1lZCBieSB0aGUgU0hBLTEgaGFzaCBvZiB0aGVpcgorY29udGVudHMsIHR3byB0cmVlcyBoYXZlIHRoZSBzYW1lIFNIQS0xIG5hbWUgaWYgYW5kIG9ubHkgaWYgdGhlaXIKIGNvbnRlbnRzIChpbmNsdWRpbmcsIHJlY3Vyc2l2ZWx5LCB0aGUgY29udGVudHMgb2YgYWxsIHN1YmRpcmVjdG9yaWVzKQogYXJlIGlkZW50aWNhbC4gIFRoaXMgYWxsb3dzIGdpdCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgZGlmZmVyZW5jZXMKIGJldHdlZW4gdHdvIHJlbGF0ZWQgdHJlZSBvYmplY3RzLCBzaW5jZSBpdCBjYW4gaWdub3JlIGFueSBlbnRyaWVzIHdpdGgKQEAgLTMwMjksMTUgKzMwMjksMTUgQEAKIFRydXN0CiB+fn5+fgogCi1JZiB5b3UgcmVjZWl2ZSB0aGUgU0hBMSBuYW1lIG9mIGEgYmxvYiBmcm9tIG9uZSBzb3VyY2UsIGFuZCBpdHMgY29udGVudHMKK0lmIHlvdSByZWNlaXZlIHRoZSBTSEEtMSBuYW1lIG9mIGEgYmxvYiBmcm9tIG9uZSBzb3VyY2UsIGFuZCBpdHMgY29udGVudHMKIGZyb20gYW5vdGhlciAocG9zc2libHkgdW50cnVzdGVkKSBzb3VyY2UsIHlvdSBjYW4gc3RpbGwgdHJ1c3QgdGhhdCB0aG9zZQotY29udGVudHMgYXJlIGNvcnJlY3QgYXMgbG9uZyBhcyB0aGUgU0hBMSBuYW1lIGFncmVlcy4gIFRoaXMgaXMgYmVjYXVzZQotdGhlIFNIQTEgaXMgZGVzaWduZWQgc28gdGhhdCBpdCBpcyBpbmZlYXNpYmxlIHRvIGZpbmQgZGlmZmVyZW50IGNvbnRlbnRzCitjb250ZW50cyBhcmUgY29ycmVjdCBhcyBsb25nIGFzIHRoZSBTSEEtMSBuYW1lIGFncmVlcy4gIFRoaXMgaXMgYmVjYXVzZQordGhlIFNIQS0xIGlzIGRlc2lnbmVkIHNvIHRoYXQgaXQgaXMgaW5mZWFzaWJsZSB0byBmaW5kIGRpZmZlcmVudCBjb250ZW50cwogdGhhdCBwcm9kdWNlIHRoZSBzYW1lIGhhc2guCiAKLVNpbWlsYXJseSwgeW91IG5lZWQgb25seSB0cnVzdCB0aGUgU0hBMSBuYW1lIG9mIGEgdG9wLWxldmVsIHRyZWUgb2JqZWN0CitTaW1pbGFybHksIHlvdSBuZWVkIG9ubHkgdHJ1c3QgdGhlIFNIQS0xIG5hbWUgb2YgYSB0b3AtbGV2ZWwgdHJlZSBvYmplY3QKIHRvIHRydXN0IHRoZSBjb250ZW50cyBvZiB0aGUgZW50aXJlIGRpcmVjdG9yeSB0aGF0IGl0IHJlZmVycyB0bywgYW5kIGlmCi15b3UgcmVjZWl2ZSB0aGUgU0hBMSBuYW1lIG9mIGEgY29tbWl0IGZyb20gYSB0cnVzdGVkIHNvdXJjZSwgdGhlbiB5b3UKK3lvdSByZWNlaXZlIHRoZSBTSEEtMSBuYW1lIG9mIGEgY29tbWl0IGZyb20gYSB0cnVzdGVkIHNvdXJjZSwgdGhlbiB5b3UKIGNhbiBlYXNpbHkgdmVyaWZ5IHRoZSBlbnRpcmUgaGlzdG9yeSBvZiBjb21taXRzIHJlYWNoYWJsZSB0aHJvdWdoCiBwYXJlbnRzIG9mIHRoYXQgY29tbWl0LCBhbmQgYWxsIG9mIHRob3NlIGNvbnRlbnRzIG9mIHRoZSB0cmVlcyByZWZlcnJlZAogdG8gYnkgdGhvc2UgY29tbWl0cy4KQEAgLTMwNDksNyArMzA0OSw3IEBACiBjb21taXRzIHRlbGxzIG90aGVycyB0aGF0IHRoZXkgY2FuIHRydXN0IHRoZSB3aG9sZSBoaXN0b3J5LgogCiBJbiBvdGhlciB3b3JkcywgeW91IGNhbiBlYXNpbHkgdmFsaWRhdGUgYSB3aG9sZSBhcmNoaXZlIGJ5IGp1c3QKLXNlbmRpbmcgb3V0IGEgc2luZ2xlIGVtYWlsIHRoYXQgdGVsbHMgdGhlIHBlb3BsZSB0aGUgbmFtZSAoU0hBMSBoYXNoKQorc2VuZGluZyBvdXQgYSBzaW5nbGUgZW1haWwgdGhhdCB0ZWxscyB0aGUgcGVvcGxlIHRoZSBuYW1lIChTSEEtMSBoYXNoKQogb2YgdGhlIHRvcCBjb21taXQsIGFuZCBkaWdpdGFsbHkgc2lnbiB0aGF0IGVtYWlsIHVzaW5nIHNvbWV0aGluZwogbGlrZSBHUEcvUEdQLgogCkBAIC0zMDkwLDcgKzMwOTAsNyBAQAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCiBOZXdseSBjcmVhdGVkIG9iamVjdHMgYXJlIGluaXRpYWxseSBjcmVhdGVkIGluIGEgZmlsZSBuYW1lZCBhZnRlciB0aGUKLW9iamVjdCdzIFNIQTEgaGFzaCAoc3RvcmVkIGluIC5naXQvb2JqZWN0cykuCitvYmplY3QncyBTSEEtMSBoYXNoIChzdG9yZWQgaW4gLmdpdC9vYmplY3RzKS4KIAogVW5mb3J0dW5hdGVseSB0aGlzIHN5c3RlbSBiZWNvbWVzIGluZWZmaWNpZW50IG9uY2UgYSBwcm9qZWN0IGhhcyBhCiBsb3Qgb2Ygb2JqZWN0cy4gIFRyeSB0aGlzIG9uIGFuIG9sZCBwcm9qZWN0OgpAQCAtMzEzMSw3ICszMTMxLDcgQEAKIAogdG8gcmVtb3ZlIGFueSBvZiB0aGUgImxvb3NlIiBvYmplY3RzIHRoYXQgYXJlIG5vdyBjb250YWluZWQgaW4gdGhlCiBwYWNrLiAgVGhpcyB3aWxsIGFsc28gcmVtb3ZlIGFueSB1bnJlZmVyZW5jZWQgb2JqZWN0cyAod2hpY2ggbWF5IGJlCi1jcmVhdGVkIHdoZW4sIGZvciBleGFtcGxlLCB5b3UgdXNlICJnaXQtcmVzZXQiIHRvIHJlbW92ZSBhIGNvbW1pdCkuCitjcmVhdGVkIHdoZW4sIGZvciBleGFtcGxlLCB5b3UgdXNlICJnaXQgcmVzZXQiIHRvIHJlbW92ZSBhIGNvbW1pdCkuCiBZb3UgY2FuIHZlcmlmeSB0aGF0IHRoZSBsb29zZSBvYmplY3RzIGFyZSBnb25lIGJ5IGxvb2tpbmcgYXQgdGhlCiAuZ2l0L29iamVjdHMgZGlyZWN0b3J5IG9yIGJ5IHJ1bm5pbmcKIApAQCAtMzE2MCw3ICszMTYwLDcgQEAKIHBvaW50ZXIgaXRzZWxmIGp1c3QgZG9lc24ndCwgc2luY2UgeW91IHJlcGxhY2VkIGl0IHdpdGggYW5vdGhlciBvbmUuCiAKIFRoZXJlIGFyZSBhbHNvIG90aGVyIHNpdHVhdGlvbnMgdGhhdCBjYXVzZSBkYW5nbGluZyBvYmplY3RzLiBGb3IKLWV4YW1wbGUsIGEgImRhbmdsaW5nIGJsb2IiIG1heSBhcmlzZSBiZWNhdXNlIHlvdSBkaWQgYSAiZ2l0LWFkZCIgb2YgYQorZXhhbXBsZSwgYSAiZGFuZ2xpbmcgYmxvYiIgbWF5IGFyaXNlIGJlY2F1c2UgeW91IGRpZCBhICJnaXQgYWRkIiBvZiBhCiBmaWxlLCBidXQgdGhlbiwgYmVmb3JlIHlvdSBhY3R1YWxseSBjb21taXR0ZWQgaXQgYW5kIG1hZGUgaXQgcGFydCBvZiB0aGUKIGJpZ2dlciBwaWN0dXJlLCB5b3UgY2hhbmdlZCBzb21ldGhpbmcgZWxzZSBpbiB0aGF0IGZpbGUgYW5kIGNvbW1pdHRlZAogdGhhdCAqdXBkYXRlZCogdGhpbmctLXRoZSBvbGQgc3RhdGUgdGhhdCB5b3UgYWRkZWQgb3JpZ2luYWxseSBlbmRzIHVwCkBAIC0zMjEwLDcgKzMyMTAsNyBAQAogYWxtb3N0IGFsd2F5cyB0aGUgcmVzdWx0IG9mIGVpdGhlciBiZWluZyBhIGhhbGYtd2F5IG1lcmdlYmFzZSAodGhlIGJsb2IKIHdpbGwgb2Z0ZW4gZXZlbiBoYXZlIHRoZSBjb25mbGljdCBtYXJrZXJzIGZyb20gYSBtZXJnZSBpbiBpdCwgaWYgeW91CiBoYXZlIGhhZCBjb25mbGljdGluZyBtZXJnZXMgdGhhdCB5b3UgZml4ZWQgdXAgYnkgaGFuZCksIG9yIHNpbXBseQotYmVjYXVzZSB5b3UgaW50ZXJydXB0ZWQgYSAiZ2l0LWZldGNoIiB3aXRoIF5DIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQsCitiZWNhdXNlIHlvdSBpbnRlcnJ1cHRlZCBhICJnaXQgZmV0Y2giIHdpdGggXkMgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCwKIGxlYXZpbmcgX3NvbWVfIG9mIHRoZSBuZXcgb2JqZWN0cyBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLCBidXQganVzdAogZGFuZ2xpbmcgYW5kIHVzZWxlc3MuCiAKQEAgLTMyMjUsOSArMzIyNSw5IEBACiByZXBvc2l0b3J5LS1pdCdzIGtpbmQgb2YgbGlrZSBkb2luZyBhIGZpbGVzeXN0ZW0gZnNjayByZWNvdmVyeTogeW91CiBkb24ndCB3YW50IHRvIGRvIHRoYXQgd2hpbGUgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4KIAotKFRoZSBzYW1lIGlzIHRydWUgb2YgImdpdC1mc2NrIiBpdHNlbGYsIGJ0dywgYnV0IHNpbmNlCi1naXQtZnNjayBuZXZlciBhY3R1YWxseSAqY2hhbmdlcyogdGhlIHJlcG9zaXRvcnksIGl0IGp1c3QgcmVwb3J0cwotb24gd2hhdCBpdCBmb3VuZCwgZ2l0LWZzY2sgaXRzZWxmIGlzIG5ldmVyICJkYW5nZXJvdXMiIHRvIHJ1bi4KKyhUaGUgc2FtZSBpcyB0cnVlIG9mICJnaXQgZnNjayIgaXRzZWxmLCBidHcsIGJ1dCBzaW5jZQorYGdpdCBmc2NrYCBuZXZlciBhY3R1YWxseSAqY2hhbmdlcyogdGhlIHJlcG9zaXRvcnksIGl0IGp1c3QgcmVwb3J0cworb24gd2hhdCBpdCBmb3VuZCwgYGdpdCBmc2NrYCBpdHNlbGYgaXMgbmV2ZXIgJ2Rhbmdlcm91cycgdG8gcnVuLgogUnVubmluZyBpdCB3aGlsZSBzb21lYm9keSBpcyBhY3R1YWxseSBjaGFuZ2luZyB0aGUgcmVwb3NpdG9yeSBjYW4gY2F1c2UKIGNvbmZ1c2luZyBhbmQgc2NhcnkgbWVzc2FnZXMsIGJ1dCBpdCB3b24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyBiYWQuIEluCiBjb250cmFzdCwgcnVubmluZyAiZ2l0IHBydW5lIiB3aGlsZSBzb21lYm9keSBpcyBhY3RpdmVseSBjaGFuZ2luZyB0aGUKQEAgLTMyOTcsNyArMzI5Nyw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogd2hpY2ggd2lsbCBjcmVhdGUgYW5kIHN0b3JlIGEgYmxvYiBvYmplY3Qgd2l0aCB0aGUgY29udGVudHMgb2YKLXNvbWVkaXJlY3RvcnkvbXlmaWxlLCBhbmQgb3V0cHV0IHRoZSBzaGExIG9mIHRoYXQgb2JqZWN0LiAgaWYgeW91J3JlCitzb21lZGlyZWN0b3J5L215ZmlsZSwgYW5kIG91dHB1dCB0aGUgU0hBLTEgb2YgdGhhdCBvYmplY3QuICBpZiB5b3UncmUKIGV4dHJlbWVseSBsdWNreSBpdCBtaWdodCBiZSA0Yjk0NThiMzc4NjIyODM2OWM2MzkzNmRiNjU4MjdkZTNjYzA2MjAwLCBpbgogd2hpY2ggY2FzZSB5b3UndmUgZ3Vlc3NlZCByaWdodCwgYW5kIHRoZSBjb3JydXB0aW9uIGlzIGZpeGVkIQogCkBAIC0zMzU5LDcgKzMzNTksNyBAQAogLS0tLS0tLS0tLS0KIAogVGhlIGluZGV4IGlzIGEgYmluYXJ5IGZpbGUgKGdlbmVyYWxseSBrZXB0IGluIC5naXQvaW5kZXgpIGNvbnRhaW5pbmcgYQotc29ydGVkIGxpc3Qgb2YgcGF0aCBuYW1lcywgZWFjaCB3aXRoIHBlcm1pc3Npb25zIGFuZCB0aGUgU0hBMSBvZiBhIGJsb2IKK3NvcnRlZCBsaXN0IG9mIHBhdGggbmFtZXMsIGVhY2ggd2l0aCBwZXJtaXNzaW9ucyBhbmQgdGhlIFNIQS0xIG9mIGEgYmxvYgogb2JqZWN0OyBsaW5rZ2l0OmdpdC1scy1maWxlc1sxXSBjYW4gc2hvdyB5b3UgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbmRleDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzQ4OSwxNCArMzQ4OSwxNCBAQAogCiBOT1RFOiBEbyBub3QgdXNlIGxvY2FsIFVSTHMgaGVyZSBpZiB5b3UgcGxhbiB0byBwdWJsaXNoIHlvdXIgc3VwZXJwcm9qZWN0IQogCi1TZWUgd2hhdCBmaWxlcyBgZ2l0LXN1Ym1vZHVsZWAgY3JlYXRlZDoKK1NlZSB3aGF0IGZpbGVzIGBnaXQgc3VibW9kdWxlYCBjcmVhdGVkOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIGxzIC1hCiAuICAuLiAgLmdpdCAgLmdpdG1vZHVsZXMgIGEgIGIgIGMgIGQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhlIGBnaXQtc3VibW9kdWxlIGFkZCA8cmVwbz4gPHBhdGg+YCBjb21tYW5kIGRvZXMgYSBjb3VwbGUgb2YgdGhpbmdzOgorVGhlIGBnaXQgc3VibW9kdWxlIGFkZCA8cmVwbz4gPHBhdGg+YCBjb21tYW5kIGRvZXMgYSBjb3VwbGUgb2YgdGhpbmdzOgogCiAtIEl0IGNsb25lcyB0aGUgc3VibW9kdWxlIGZyb20gPHJlcG8+IHRvIHRoZSBnaXZlbiA8cGF0aD4gdW5kZXIgdGhlCiAgIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBieSBkZWZhdWx0IGNoZWNrcyBvdXQgdGhlIG1hc3RlciBicmFuY2guCkBAIC0zNTQyLDcgKzM1NDIsNyBAQAogJCBnaXQgc3VibW9kdWxlIGluaXQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm93IHVzZSBgZ2l0LXN1Ym1vZHVsZSB1cGRhdGVgIHRvIGNsb25lIHRoZSByZXBvc2l0b3JpZXMgYW5kIGNoZWNrIG91dCB0aGUKK05vdyB1c2UgYGdpdCBzdWJtb2R1bGUgdXBkYXRlYCB0byBjbG9uZSB0aGUgcmVwb3NpdG9yaWVzIGFuZCBjaGVjayBvdXQgdGhlCiBjb21taXRzIHNwZWNpZmllZCBpbiB0aGUgc3VwZXJwcm9qZWN0OgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNTUyLDggKzM1NTIsOCBAQAogLiAgLi4gIC5naXQgIGEudHh0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU9uZSBtYWpvciBkaWZmZXJlbmNlIGJldHdlZW4gYGdpdC1zdWJtb2R1bGUgdXBkYXRlYCBhbmQgYGdpdC1zdWJtb2R1bGUgYWRkYCBpcwotdGhhdCBgZ2l0LXN1Ym1vZHVsZSB1cGRhdGVgIGNoZWNrcyBvdXQgYSBzcGVjaWZpYyBjb21taXQsIHJhdGhlciB0aGFuIHRoZSB0aXAKK09uZSBtYWpvciBkaWZmZXJlbmNlIGJldHdlZW4gYGdpdCBzdWJtb2R1bGUgdXBkYXRlYCBhbmQgYGdpdCBzdWJtb2R1bGUgYWRkYCBpcwordGhhdCBgZ2l0IHN1Ym1vZHVsZSB1cGRhdGVgIGNoZWNrcyBvdXQgYSBzcGVjaWZpYyBjb21taXQsIHJhdGhlciB0aGFuIHRoZSB0aXAKIG9mIGEgYnJhbmNoLiBJdCdzIGxpa2UgY2hlY2tpbmcgb3V0IGEgdGFnOiB0aGUgaGVhZCBpcyBkZXRhY2hlZCwgc28geW91J3JlIG5vdAogd29ya2luZyBvbiBhIGJyYW5jaC4KIApAQCAtMzc1NCw3ICszNzU0LDcgQEAKIGluZGV4LiAgTm9ybWFsIG9wZXJhdGlvbiBpcyBqdXN0CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQgZ2l0IHJlYWQtdHJlZSA8c2hhMSBvZiB0cmVlPgorJCBnaXQgcmVhZC10cmVlIDxTSEEtMSBvZiB0cmVlPgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBhbmQgeW91ciBpbmRleCBmaWxlIHdpbGwgbm93IGJlIGVxdWl2YWxlbnQgdG8gdGhlIHRyZWUgdGhhdCB5b3Ugc2F2ZWQKQEAgLTM3NjksNyArMzc2OSw3IEBACiBmaWxlcy4gVGhpcyBpcyBub3QgYSB2ZXJ5IGNvbW1vbiBvcGVyYXRpb24sIHNpbmNlIG5vcm1hbGx5IHlvdSdkIGp1c3QKIGtlZXAgeW91ciBmaWxlcyB1cGRhdGVkLCBhbmQgcmF0aGVyIHRoYW4gd3JpdGUgdG8geW91ciB3b3JraW5nCiBkaXJlY3RvcnksIHlvdSdkIHRlbGwgdGhlIGluZGV4IGZpbGVzIGFib3V0IHRoZSBjaGFuZ2VzIGluIHlvdXIKLXdvcmtpbmcgZGlyZWN0b3J5IChpLmUuIGBnaXQtdXBkYXRlLWluZGV4YCkuCit3b3JraW5nIGRpcmVjdG9yeSAoaS5lLiBgZ2l0IHVwZGF0ZS1pbmRleGApLgogCiBIb3dldmVyLCBpZiB5b3UgZGVjaWRlIHRvIGp1bXAgdG8gYSBuZXcgdmVyc2lvbiwgb3IgY2hlY2sgb3V0IHNvbWVib2R5CiBlbHNlJ3MgdmVyc2lvbiwgb3IganVzdCByZXN0b3JlIGEgcHJldmlvdXMgdHJlZSwgeW91J2QgcG9wdWxhdGUgeW91cgpAQCAtMzc4Miw3ICszNzgyLDcgQEAKIAogb3IsIGlmIHlvdSB3YW50IHRvIGNoZWNrIG91dCBhbGwgb2YgdGhlIGluZGV4LCB1c2UgYC1hYC4KIAotTk9URSEgZ2l0LWNoZWNrb3V0LWluZGV4IG5vcm1hbGx5IHJlZnVzZXMgdG8gb3ZlcndyaXRlIG9sZCBmaWxlcywgc28KK05PVEUhIGBnaXQgY2hlY2tvdXQtaW5kZXhgIG5vcm1hbGx5IHJlZnVzZXMgdG8gb3ZlcndyaXRlIG9sZCBmaWxlcywgc28KIGlmIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIG9mIHRoZSB0cmVlIGFscmVhZHkgY2hlY2tlZCBvdXQsIHlvdSB3aWxsCiBuZWVkIHRvIHVzZSB0aGUgIi1mIiBmbGFnICgnYmVmb3JlJyB0aGUgIi1hIiBmbGFnIG9yIHRoZSBmaWxlbmFtZSkgdG8KICdmb3JjZScgdGhlIGNoZWNrb3V0LgpAQCAtMzgyMCw3ICszODIwLDcgQEAKIGFuZCB0aGVuIGdpdmluZyB0aGUgcmVhc29uIGZvciB0aGUgY29tbWl0IG9uIHN0ZGluIChlaXRoZXIgdGhyb3VnaAogcmVkaXJlY3Rpb24gZnJvbSBhIHBpcGUgb3IgZmlsZSwgb3IgYnkganVzdCB0eXBpbmcgaXQgYXQgdGhlIHR0eSkuCiAKLWdpdC1jb21taXQtdHJlZSB3aWxsIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgb2JqZWN0IHRoYXQgcmVwcmVzZW50cworYGdpdCBjb21taXQtdHJlZWAgd2lsbCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIG9iamVjdCB0aGF0IHJlcHJlc2VudHMKIHRoYXQgY29tbWl0LCBhbmQgeW91IHNob3VsZCBzYXZlIGl0IGF3YXkgZm9yIGxhdGVyIHVzZS4gTm9ybWFsbHksCiB5b3UnZCBjb21taXQgYSBuZXcgYEhFQURgIHN0YXRlLCBhbmQgd2hpbGUgZ2l0IGRvZXNuJ3QgY2FyZSB3aGVyZSB5b3UKIHNhdmUgdGhlIG5vdGUgYWJvdXQgdGhhdCBzdGF0ZSwgaW4gcHJhY3RpY2Ugd2UgdGVuZCB0byBqdXN0IHdyaXRlIHRoZQpAQCAtMzg4OSw3ICszODg5LDcgQEAKIAogdG8gc2hvdyBpdHMgY29udGVudHMuIE5PVEUhIFRyZWVzIGhhdmUgYmluYXJ5IGNvbnRlbnQsIGFuZCBhcyBhIHJlc3VsdAogdGhlcmUgaXMgYSBzcGVjaWFsIGhlbHBlciBmb3Igc2hvd2luZyB0aGF0IGNvbnRlbnQsIGNhbGxlZAotYGdpdC1scy10cmVlYCwgd2hpY2ggdHVybnMgdGhlIGJpbmFyeSBjb250ZW50IGludG8gYSBtb3JlIGVhc2lseQorYGdpdCBscy10cmVlYCwgd2hpY2ggdHVybnMgdGhlIGJpbmFyeSBjb250ZW50IGludG8gYSBtb3JlIGVhc2lseQogcmVhZGFibGUgZm9ybS4KIAogSXQncyBlc3BlY2lhbGx5IGluc3RydWN0aXZlIHRvIGxvb2sgYXQgImNvbW1pdCIgb2JqZWN0cywgc2luY2UgdGhvc2UKQEAgLTM5NzgsMTMgKzM5NzgsMTMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBFYWNoIGxpbmUgb2YgdGhlIGBnaXQgbHMtZmlsZXMgLS11bm1lcmdlZGAgb3V0cHV0IGJlZ2lucyB3aXRoCi10aGUgYmxvYiBtb2RlIGJpdHMsIGJsb2IgU0hBMSwgJ3N0YWdlIG51bWJlcicsIGFuZCB0aGUKK3RoZSBibG9iIG1vZGUgYml0cywgYmxvYiBTSEEtMSwgJ3N0YWdlIG51bWJlcicsIGFuZCB0aGUKIGZpbGVuYW1lLiAgVGhlICdzdGFnZSBudW1iZXInIGlzIGdpdCdzIHdheSB0byBzYXkgd2hpY2ggdHJlZSBpdAogY2FtZSBmcm9tOiBzdGFnZSAxIGNvcnJlc3BvbmRzIHRvIGAkb3JpZ2AgdHJlZSwgc3RhZ2UgMiBgSEVBRGAKIHRyZWUsIGFuZCBzdGFnZTMgYCR0YXJnZXRgIHRyZWUuCiAKIEVhcmxpZXIgd2Ugc2FpZCB0aGF0IHRyaXZpYWwgbWVyZ2VzIGFyZSBkb25lIGluc2lkZQotYGdpdC1yZWFkLXRyZWUgLW1gLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBmaWxlIGRpZCBub3QgY2hhbmdlCitgZ2l0IHJlYWQtdHJlZSAtbWAuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGZpbGUgZGlkIG5vdCBjaGFuZ2UKIGZyb20gYCRvcmlnYCB0byBgSEVBRGAgbm9yIGAkdGFyZ2V0YCwgb3IgaWYgdGhlIGZpbGUgY2hhbmdlZAogZnJvbSBgJG9yaWdgIHRvIGBIRUFEYCBhbmQgYCRvcmlnYCB0byBgJHRhcmdldGAgdGhlIHNhbWUgd2F5LAogb2J2aW91c2x5IHRoZSBmaW5hbCBvdXRjb21lIGlzIHdoYXQgaXMgaW4gYEhFQURgLiAgV2hhdCB0aGUKQEAgLTQwMTEsMjAgKzQwMTEsMjAgQEAKICQgZ2l0IHVwZGF0ZS1pbmRleCBoZWxsby5jCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoZW4gYSBwYXRoIGlzIGluIHRoZSAidW5tZXJnZWQiIHN0YXRlLCBydW5uaW5nIGBnaXQtdXBkYXRlLWluZGV4YCBmb3IKK1doZW4gYSBwYXRoIGlzIGluIHRoZSAidW5tZXJnZWQiIHN0YXRlLCBydW5uaW5nIGBnaXQgdXBkYXRlLWluZGV4YCBmb3IKIHRoYXQgcGF0aCB0ZWxscyBnaXQgdG8gbWFyayB0aGUgcGF0aCByZXNvbHZlZC4KIAogVGhlIGFib3ZlIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGdpdCBtZXJnZSBhdCB0aGUgbG93ZXN0IGxldmVsLAogdG8gaGVscCB5b3UgdW5kZXJzdGFuZCB3aGF0IGNvbmNlcHR1YWxseSBoYXBwZW5zIHVuZGVyIHRoZSBob29kLgotSW4gcHJhY3RpY2UsIG5vYm9keSwgbm90IGV2ZW4gZ2l0IGl0c2VsZiwgcnVucyBgZ2l0LWNhdC1maWxlYCB0aHJlZSB0aW1lcwotZm9yIHRoaXMuICBUaGVyZSBpcyBhIGBnaXQtbWVyZ2UtaW5kZXhgIHByb2dyYW0gdGhhdCBleHRyYWN0cyB0aGUKK0luIHByYWN0aWNlLCBub2JvZHksIG5vdCBldmVuIGdpdCBpdHNlbGYsIHJ1bnMgYGdpdCBjYXQtZmlsZWAgdGhyZWUgdGltZXMKK2ZvciB0aGlzLiAgVGhlcmUgaXMgYSBgZ2l0IG1lcmdlLWluZGV4YCBwcm9ncmFtIHRoYXQgZXh0cmFjdHMgdGhlCiBzdGFnZXMgdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCBjYWxscyBhICJtZXJnZSIgc2NyaXB0IG9uIGl0OgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIGdpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgaGVsbG8uYwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1hbmQgdGhhdCBpcyB3aGF0IGhpZ2hlciBsZXZlbCBgZ2l0LW1lcmdlIC1zIHJlc29sdmVgIGlzIGltcGxlbWVudGVkIHdpdGguCithbmQgdGhhdCBpcyB3aGF0IGhpZ2hlciBsZXZlbCBgZ2l0IG1lcmdlIC1zIHJlc29sdmVgIGlzIGltcGxlbWVudGVkIHdpdGguCiAKIFtbaGFja2luZy1naXRdXQogSGFja2luZyBnaXQKQEAgLTQwNDUsMTIgKzQwNDUsMTIgQEAKIFJlZ2FyZGxlc3Mgb2Ygb2JqZWN0IHR5cGUsIGFsbCBvYmplY3RzIHNoYXJlIHRoZSBmb2xsb3dpbmcKIGNoYXJhY3RlcmlzdGljczogdGhleSBhcmUgYWxsIGRlZmxhdGVkIHdpdGggemxpYiwgYW5kIGhhdmUgYSBoZWFkZXIKIHRoYXQgbm90IG9ubHkgc3BlY2lmaWVzIHRoZWlyIHR5cGUsIGJ1dCBhbHNvIHByb3ZpZGVzIHNpemUgaW5mb3JtYXRpb24KLWFib3V0IHRoZSBkYXRhIGluIHRoZSBvYmplY3QuICBJdCdzIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBTSEExIGhhc2gKK2Fib3V0IHRoZSBkYXRhIGluIHRoZSBvYmplY3QuICBJdCdzIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBTSEEtMSBoYXNoCiB0aGF0IGlzIHVzZWQgdG8gbmFtZSB0aGUgb2JqZWN0IGlzIHRoZSBoYXNoIG9mIHRoZSBvcmlnaW5hbCBkYXRhCiBwbHVzIHRoaXMgaGVhZGVyLCBzbyBgc2hhMXN1bWAgJ2ZpbGUnIGRvZXMgbm90IG1hdGNoIHRoZSBvYmplY3QgbmFtZQogZm9yICdmaWxlJy4KIChIaXN0b3JpY2FsIG5vdGU6IGluIHRoZSBkYXduIG9mIHRoZSBhZ2Ugb2YgZ2l0IHRoZSBoYXNoCi13YXMgdGhlIHNoYTEgb2YgdGhlICdjb21wcmVzc2VkJyBvYmplY3QuKQord2FzIHRoZSBTSEEtMSBvZiB0aGUgJ2NvbXByZXNzZWQnIG9iamVjdC4pCiAKIEFzIGEgcmVzdWx0LCB0aGUgZ2VuZXJhbCBjb25zaXN0ZW5jeSBvZiBhbiBvYmplY3QgY2FuIGFsd2F5cyBiZSB0ZXN0ZWQKIGluZGVwZW5kZW50bHkgb2YgdGhlIGNvbnRlbnRzIG9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3Q6IGFsbCBvYmplY3RzIGNhbgpAQCAtNDA2MSw3ICs0MDYxLDcgQEAKIAogVGhlIHN0cnVjdHVyZWQgb2JqZWN0cyBjYW4gZnVydGhlciBoYXZlIHRoZWlyIHN0cnVjdHVyZSBhbmQKIGNvbm5lY3Rpdml0eSB0byBvdGhlciBvYmplY3RzIHZlcmlmaWVkLiBUaGlzIGlzIGdlbmVyYWxseSBkb25lIHdpdGgKLXRoZSBgZ2l0LWZzY2tgIHByb2dyYW0sIHdoaWNoIGdlbmVyYXRlcyBhIGZ1bGwgZGVwZW5kZW5jeSBncmFwaAordGhlIGBnaXQgZnNja2AgcHJvZ3JhbSwgd2hpY2ggZ2VuZXJhdGVzIGEgZnVsbCBkZXBlbmRlbmN5IGdyYXBoCiBvZiBhbGwgb2JqZWN0cywgYW5kIHZlcmlmaWVzIHRoZWlyIGludGVybmFsIGNvbnNpc3RlbmN5IChpbiBhZGRpdGlvbgogdG8ganVzdCB2ZXJpZnlpbmcgdGhlaXIgc3VwZXJmaWNpYWwgY29uc2lzdGVuY3kgdGhyb3VnaCB0aGUgaGFzaCkuCiAKQEAgLTQxMjAsNyArNDEyMCw3IEBACiBUaGlzIGlzIGp1c3QgdG8gZ2V0IHlvdSBpbnRvIHRoZSBncm9vdmUgZm9yIHRoZSBtb3N0IGxpYmlmaWVkIHBhcnQgb2YgR2l0OgogdGhlIHJldmlzaW9uIHdhbGtlci4KIAotQmFzaWNhbGx5LCB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mIGBnaXQtbG9nYCB3YXMgYSBzaGVsbCBzY3JpcHQ6CitCYXNpY2FsbHksIHRoZSBpbml0aWFsIHZlcnNpb24gb2YgYGdpdCBsb2dgIHdhcyBhIHNoZWxsIHNjcmlwdDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogJCBnaXQtcmV2LWxpc3QgLS1wcmV0dHkgJChnaXQtcmV2LXBhcnNlIC0tZGVmYXVsdCBIRUFEICIkQCIpIHwgXApAQCAtNDEyOSwyMCArNDEyOSwyMCBAQAogCiBXaGF0IGRvZXMgdGhpcyBtZWFuPwogCi1gZ2l0LXJldi1saXN0YCBpcyB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgcmV2aXNpb24gd2Fsa2VyLCB3aGljaAorYGdpdCByZXYtbGlzdGAgaXMgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIHJldmlzaW9uIHdhbGtlciwgd2hpY2gKIF9hbHdheXNfIHByaW50ZWQgYSBsaXN0IG9mIHJldmlzaW9ucyB0byBzdGRvdXQuICBJdCBpcyBzdGlsbCBmdW5jdGlvbmFsLAotYW5kIG5lZWRzIHRvLCBzaW5jZSBtb3N0IG5ldyBHaXQgcHJvZ3JhbXMgc3RhcnQgb3V0IGFzIHNjcmlwdHMgdXNpbmcKLWBnaXQtcmV2LWxpc3RgLgorYW5kIG5lZWRzIHRvLCBzaW5jZSBtb3N0IG5ldyBHaXQgY29tbWFuZHMgc3RhcnQgb3V0IGFzIHNjcmlwdHMgdXNpbmcKK2BnaXQgcmV2LWxpc3RgLgogCi1gZ2l0LXJldi1wYXJzZWAgaXMgbm90IGFzIGltcG9ydGFudCBhbnkgbW9yZTsgaXQgd2FzIG9ubHkgdXNlZCB0byBmaWx0ZXIgb3V0CitgZ2l0IHJldi1wYXJzZWAgaXMgbm90IGFzIGltcG9ydGFudCBhbnkgbW9yZTsgaXQgd2FzIG9ubHkgdXNlZCB0byBmaWx0ZXIgb3V0CiBvcHRpb25zIHRoYXQgd2VyZSByZWxldmFudCBmb3IgdGhlIGRpZmZlcmVudCBwbHVtYmluZyBjb21tYW5kcyB0aGF0IHdlcmUKIGNhbGxlZCBieSB0aGUgc2NyaXB0LgogCi1Nb3N0IG9mIHdoYXQgYGdpdC1yZXYtbGlzdGAgZGlkIGlzIGNvbnRhaW5lZCBpbiBgcmV2aXNpb24uY2AgYW5kCitNb3N0IG9mIHdoYXQgYGdpdCByZXYtbGlzdGAgZGlkIGlzIGNvbnRhaW5lZCBpbiBgcmV2aXNpb24uY2AgYW5kCiBgcmV2aXNpb24uaGAuICBJdCB3cmFwcyB0aGUgb3B0aW9ucyBpbiBhIHN0cnVjdCBuYW1lZCBgcmV2X2luZm9gLCB3aGljaAogY29udHJvbHMgaG93IGFuZCB3aGF0IHJldmlzaW9ucyBhcmUgd2Fsa2VkLCBhbmQgbW9yZS4KIAotVGhlIG9yaWdpbmFsIGpvYiBvZiBgZ2l0LXJldi1wYXJzZWAgaXMgbm93IHRha2VuIGJ5IHRoZSBmdW5jdGlvbgorVGhlIG9yaWdpbmFsIGpvYiBvZiBgZ2l0IHJldi1wYXJzZWAgaXMgbm93IHRha2VuIGJ5IHRoZSBmdW5jdGlvbgogYHNldHVwX3JldmlzaW9ucygpYCwgd2hpY2ggcGFyc2VzIHRoZSByZXZpc2lvbnMgYW5kIHRoZSBjb21tb24gY29tbWFuZCBsaW5lCiBvcHRpb25zIGZvciB0aGUgcmV2aXNpb24gd2Fsa2VyLiBUaGlzIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiB0aGUgc3RydWN0CiBgcmV2X2luZm9gIGZvciBsYXRlciBjb25zdW1wdGlvbi4gWW91IGNhbiBkbyB5b3VyIG93biBjb21tYW5kIGxpbmUgb3B0aW9uCkBAIC00MTU1LDcgKzQxNTUsNyBAQAogYGdpdCBzaG93IHYxLjMuMHt0aWxkZX0xNTVeMnt0aWxkZX00YCBhbmQgc2Nyb2xsIGRvd24gdG8gdGhhdCBmdW5jdGlvbiAobm90ZSB0aGF0IHlvdQogbm8gbG9uZ2VyIG5lZWQgdG8gY2FsbCBgc2V0dXBfcGFnZXIoKWAgZGlyZWN0bHkpLgogCi1Ob3dhZGF5cywgYGdpdC1sb2dgIGlzIGEgYnVpbHRpbiwgd2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBfY29udGFpbmVkXyBpbiB0aGUKK05vd2FkYXlzLCBgZ2l0IGxvZ2AgaXMgYSBidWlsdGluLCB3aGljaCBtZWFucyB0aGF0IGl0IGlzIF9jb250YWluZWRfIGluIHRoZQogY29tbWFuZCBgZ2l0YC4gIFRoZSBzb3VyY2Ugc2lkZSBvZiBhIGJ1aWx0aW4gaXMKIAogLSBhIGZ1bmN0aW9uIGNhbGxlZCBgY21kXzxibGE+YCwgdHlwaWNhbGx5IGRlZmluZWQgaW4gYGJ1aWx0aW4tPGJsYT4uY2AsCkBAIC00MTcxLDcgKzQxNzEsNyBAQAogX25vdF8gbmFtZWQgbGlrZSB0aGUgYC5jYCBmaWxlIGluIHdoaWNoIHRoZXkgbGl2ZSBoYXZlIHRvIGJlIGxpc3RlZCBpbgogYEJVSUxUX0lOU2AgaW4gdGhlIGBNYWtlZmlsZWAuCiAKLWBnaXQtbG9nYCBsb29rcyBtb3JlIGNvbXBsaWNhdGVkIGluIEMgdGhhbiBpdCBkb2VzIGluIHRoZSBvcmlnaW5hbCBzY3JpcHQsCitgZ2l0IGxvZ2AgbG9va3MgbW9yZSBjb21wbGljYXRlZCBpbiBDIHRoYW4gaXQgZG9lcyBpbiB0aGUgb3JpZ2luYWwgc2NyaXB0LAogYnV0IHRoYXQgYWxsb3dzIGZvciBhIG11Y2ggZ3JlYXRlciBmbGV4aWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuCiAKIEhlcmUgYWdhaW4gaXQgaXMgYSBnb29kIHBvaW50IHRvIHRha2UgYSBwYXVzZS4KQEAgLTQxODIsOSArNDE4Miw5IEBACiBTbywgdGhpbmsgYWJvdXQgc29tZXRoaW5nIHdoaWNoIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiwgc2F5LCAiaG93IGNhbiBJCiBhY2Nlc3MgYSBibG9iIGp1c3Qga25vd2luZyB0aGUgb2JqZWN0IG5hbWUgb2YgaXQ/Ii4gIFRoZSBmaXJzdCBzdGVwIGlzIHRvCiBmaW5kIGEgR2l0IGNvbW1hbmQgd2l0aCB3aGljaCB5b3UgY2FuIGRvIGl0LiAgSW4gdGhpcyBleGFtcGxlLCBpdCBpcyBlaXRoZXIKLWBnaXQtc2hvd2Agb3IgYGdpdC1jYXQtZmlsZWAuCitgZ2l0IHNob3dgIG9yIGBnaXQgY2F0LWZpbGVgLgogCi1Gb3IgdGhlIHNha2Ugb2YgY2xhcml0eSwgbGV0J3Mgc3RheSB3aXRoIGBnaXQtY2F0LWZpbGVgLCBiZWNhdXNlIGl0CitGb3IgdGhlIHNha2Ugb2YgY2xhcml0eSwgbGV0J3Mgc3RheSB3aXRoIGBnaXQgY2F0LWZpbGVgLCBiZWNhdXNlIGl0CiAKIC0gaXMgcGx1bWJpbmcsIGFuZAogCkBAIC00MTk4LDcgKzQxOTgsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIGdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKICAgICAgICAgaWYgKGFyZ2MgIT0gMykKLSAgICAgICAgICAgICAgICB1c2FnZSgiZ2l0LWNhdC1maWxlIFstdHwtc3wtZXwtcHw8dHlwZT5dIDxzaGExPiIpOworCQl1c2FnZSgiZ2l0IGNhdC1maWxlIFstdHwtc3wtZXwtcHw8dHlwZT5dIDxzaGExPiIpOwogICAgICAgICBpZiAoZ2V0X3NoYTEoYXJndlsyXSwgc2hhMSkpCiAgICAgICAgICAgICAgICAgZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZ3ZbMl0pOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MjQzLDEwICs0MjQzLDEwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBTb21ldGltZXMsIHlvdSBkbyBub3Qga25vdyB3aGVyZSB0byBsb29rIGZvciBhIGZlYXR1cmUuICBJbiBtYW55IHN1Y2ggY2FzZXMsCi1pdCBoZWxwcyB0byBzZWFyY2ggdGhyb3VnaCB0aGUgb3V0cHV0IG9mIGBnaXQgbG9nYCwgYW5kIHRoZW4gYGdpdC1zaG93YCB0aGUKK2l0IGhlbHBzIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBvdXRwdXQgb2YgYGdpdCBsb2dgLCBhbmQgdGhlbiBgZ2l0IHNob3dgIHRoZQogY29ycmVzcG9uZGluZyBjb21taXQuCiAKLUV4YW1wbGU6IElmIHlvdSBrbm93IHRoYXQgdGhlcmUgd2FzIHNvbWUgdGVzdCBjYXNlIGZvciBgZ2l0LWJ1bmRsZWAsIGJ1dAorRXhhbXBsZTogSWYgeW91IGtub3cgdGhhdCB0aGVyZSB3YXMgc29tZSB0ZXN0IGNhc2UgZm9yIGBnaXQgYnVuZGxlYCwgYnV0CiBkbyBub3QgcmVtZW1iZXIgd2hlcmUgaXQgd2FzICh5ZXMsIHlvdSBfY291bGRfIGBnaXQgZ3JlcCBidW5kbGUgdC9gLCBidXQgdGhhdAogZG9lcyBub3QgaWxsdXN0cmF0ZSB0aGUgcG9pbnQhKToKIApAQCAtNDUzMCw3ICs0NTMwLDcgQEAKIC0gV2hlbmV2ZXIgcG9zc2libGUsIHNlY3Rpb24gaGVhZGluZ3Mgc2hvdWxkIGNsZWFybHkgZGVzY3JpYmUgdGhlIHRhc2sKICAgdGhleSBleHBsYWluIGhvdyB0byBkbywgaW4gbGFuZ3VhZ2UgdGhhdCByZXF1aXJlcyBubyBtb3JlIGtub3dsZWRnZQogICB0aGFuIG5lY2Vzc2FyeTogZm9yIGV4YW1wbGUsICJpbXBvcnRpbmcgcGF0Y2hlcyBpbnRvIGEgcHJvamVjdCIgcmF0aGVyCi0gIHRoYW4gInRoZSBnaXQtYW0gY29tbWFuZCIKKyAgdGhhbiAidGhlIGBnaXQgYW1gIGNvbW1hbmQiCiAKIFRoaW5rIGFib3V0IGhvdyB0byBjcmVhdGUgYSBjbGVhciBjaGFwdGVyIGRlcGVuZGVuY3kgZ3JhcGggdGhhdCB3aWxsCiBhbGxvdyBwZW9wbGUgdG8gZ2V0IHRvIGltcG9ydGFudCB0b3BpY3Mgd2l0aG91dCBuZWNlc3NhcmlseSByZWFkaW5nCmRpZmYgLS1naXQgYS9HSVQtVkVSU0lPTi1HRU4gYi9HSVQtVkVSU0lPTi1HRU4KaW5kZXggZTVlNjJlZi4uZDhhZTMxNSAxMDA3NTUKLS0tIGEvR0lULVZFUlNJT04tR0VOCisrKyBiL0dJVC1WRVJTSU9OLUdFTgpAQCAtMSw3ICsxLDcgQEAKICMhL2Jpbi9zaAogCiBHVkY9R0lULVZFUlNJT04tRklMRQotREVGX1ZFUj12MS42LjEuNAorREVGX1ZFUj12MS42LjQKIAogTEY9JwogJwpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKaW5kZXggZDFkZWIwYi4uYWU3Zjc1MCAxMDA2NDQKLS0tIGEvSU5TVEFMTAorKysgYi9JTlNUQUxMCkBAIC0xMDEsNiArMTAxLDkgQEAKICAgIEJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIHRoZSBpbmZvIGZpbGUgYWRkaXRpb25hbGx5IHJlcXVpcmVzCiAgICBtYWtlaW5mbyBhbmQgZG9jYm9vazJYLiAgVmVyc2lvbiAwLjguMyBpcyBrbm93biB0byB3b3JrLgogCisgICBCdWlsZGluZyBhbmQgaW5zdGFsbGluZyB0aGUgcGRmIGZpbGUgYWRkaXRpb25hbGx5IHJlcXVpcmVzCisgICBkYmxhdGV4LiAgVmVyc2lvbiAwLjIuNyB3aXRoIGFzY2lpZG9jID49IDguMi43IGlzIGtub3duIHRvIHdvcmsuCisKICAgIFRoZSBkb2N1bWVudGF0aW9uIGlzIHdyaXR0ZW4gZm9yIEFzY2lpRG9jIDcsIGJ1dCAibWFrZQogICAgQVNDSUlET0M4PVllc1BsZWFzZSBkb2MiIHdpbGwgbGV0IHlvdSBmb3JtYXQgd2l0aCBBc2NpaURvYyA4LgogCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDAxMjQyODguLmRhZjQyOTYgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0zLDYgKzMsMTEgQEAKIAogIyBEZWZpbmUgVj0xIHRvIGhhdmUgYSBtb3JlIHZlcmJvc2UgY29tcGlsZS4KICMKKyMgRGVmaW5lIFNIRUxMX1BBVEggdG8gYSBQT1NJWCBzaGVsbCBpZiB5b3VyIC9iaW4vc2ggaXMgYnJva2VuLgorIworIyBEZWZpbmUgU0FORV9UT09MX1BBVEggdG8gYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRocyB0byBwcmVwZW5kCisjIHRvIFBBVEggaWYgeW91ciB0b29scyBpbiAvdXNyL2JpbiBhcmUgYnJva2VuLgorIwogIyBEZWZpbmUgU05QUklOVEZfUkVUVVJOU19CT0dVUyBpZiB5b3VyIGFyZSBvbiBhIHN5c3RlbSB3aGljaCBzbnByaW50ZigpCiAjIG9yIHZzbnByaW50ZigpIHJldHVybiAtMSBpbnN0ZWFkIG9mIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkCiAjIGhhdmUgYmVlbiB3cml0dGVuIHRvIHRoZSBmaW5hbCBzdHJpbmcgaWYgZW5vdWdoIHNwYWNlIGhhZCBiZWVuIGF2YWlsYWJsZS4KQEAgLTIzLDYgKzI4LDkgQEAKICMgRGVmaW5lIE5PX0VYUEFUIGlmIHlvdSBkbyBub3QgaGF2ZSBleHBhdCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdXNoIGlzCiAjIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgcHVzaCB1c2luZyBodHRwOi8vIGFuZCBodHRwczovLyB0cmFuc3BvcnRzLgogIworIyBEZWZpbmUgRVhQQVRESVI9L2Zvby9iYXIgaWYgeW91ciBleHBhdCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlIGluCisjIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4KKyMKICMgRGVmaW5lIE5PX0RfSU5PX0lOX0RJUkVOVCBpZiB5b3UgZG9uJ3QgaGF2ZSBkX2lubyBpbiB5b3VyIHN0cnVjdCBkaXJlbnQuCiAjCiAjIERlZmluZSBOT19EX1RZUEVfSU5fRElSRU5UIGlmIHlvdXIgcGxhdGZvcm0gZGVmaW5lcyBEVF9VTktOT1dOIGJ1dCBsYWNrcwpAQCAtNDksNiArNTcsMTIgQEAKICMKICMgRGVmaW5lIE5PX01LRFRFTVAgaWYgeW91IGRvbid0IGhhdmUgbWtkdGVtcCBpbiB0aGUgQyBsaWJyYXJ5LgogIworIyBEZWZpbmUgTk9fTUtTVEVNUFMgaWYgeW91IGRvbid0IGhhdmUgbWtzdGVtcHMgaW4gdGhlIEMgbGlicmFyeS4KKyMKKyMgRGVmaW5lIE5PX0xJQkdFTl9IIGlmIHlvdSBkb24ndCBoYXZlIGxpYmdlbi5oLgorIworIyBEZWZpbmUgTkVFRFNfTElCR0VOIGlmIHlvdXIgbGliZ2VuIG5lZWRzIC1sZ2VuIHdoZW4gbGlua2luZworIwogIyBEZWZpbmUgTk9fU1lTX1NFTEVDVF9IIGlmIHlvdSBkb24ndCBoYXZlIHN5cy9zZWxlY3QuaC4KICMKICMgRGVmaW5lIE5PX1NZTUxJTktfSEVBRCBpZiB5b3UgbmV2ZXIgd2FudCAuZ2l0L0hFQUQgdG8gYmUgYSBzeW1ib2xpYyBsaW5rLgpAQCAtODgsNiArMTAyLDEwIEBACiAjIERlZmluZSBORUVEU19TT0NLRVQgaWYgbGlua2luZyB3aXRoIGxpYmMgaXMgbm90IGVub3VnaCAoU3VuT1MsCiAjIFBhdHJpY2sgTWF1cml0eikuCiAjCisjIERlZmluZSBORUVEU19SRVNPTFYgaWYgbGlua2luZyB3aXRoIC1sbnNsIGFuZC9vciAtbHNvY2tldCBpcyBub3QgZW5vdWdoLgorIyBOb3RhYmx5IG9uIFNvbGFyaXMgaHN0cmVycm9yIHJlc2lkZXMgaW4gbGlicmVzb2x2IGFuZCBvbiBTb2xhcmlzIDcKKyMgaW5ldF9udG9wIGFuZCBpbmV0X3B0b24gYWRkaXRpb25hbGx5IHJlc2lkZSB0aGVyZS4KKyMKICMgRGVmaW5lIE5PX01NQVAgaWYgeW91IHdhbnQgdG8gYXZvaWQgbW1hcC4KICMKICMgRGVmaW5lIE5PX1BUSFJFQURTIGlmIHlvdSBkbyBub3QgaGF2ZSBvciBkbyBub3Qgd2FudCB0byB1c2UgUHRocmVhZHMuCkBAIC0xMjMsNiArMTQxLDEyIEBACiAjIHJhbmRvbWx5IGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kCiAjIHRpbWVzIChteSBleHQzIGRvZXNuJ3QpLgogIworIyBEZWZpbmUgVVNFX1NUX1RJTUVTUEVDIGlmIHlvdXIgInN0cnVjdCBzdGF0IiB1c2VzICJzdF9jdGltZXNwZWMiIGluc3RlYWQgb2YKKyMgInN0X2N0aW0iCisjCisjIERlZmluZSBOT19OU0VDIGlmIHlvdXIgInN0cnVjdCBzdGF0IiBkb2VzIG5vdCBoYXZlICJzdF9jdGltLnR2X25zZWMiCisjIGF2YWlsYWJsZS4gIFRoaXMgYXV0b21hdGljYWxseSB0dXJucyBVU0VfTlNFQyBvZmYuCisjCiAjIERlZmluZSBVU0VfU1RERVYgYmVsb3cgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGV2aWNlCiAjIGNoYW5nZSBiZWluZyBjb25zaWRlcmVkIGFuIGlub2RlIGNoYW5nZSBmcm9tIHRoZSB1cGRhdGUtaW5kZXggcGVyc3BlY3RpdmUuCiAjCkBAIC0xMzYsNiArMTYwLDggQEAKICMgRGVmaW5lIE5PX1BFUkxfTUFLRU1BS0VSIGlmIHlvdSBjYW5ub3QgdXNlIE1ha2VmaWxlcyBnZW5lcmF0ZWQgYnkgcGVybCdzCiAjIE1ha2VNYWtlciAoZS5nLiB1c2luZyBBY3RpdmVTdGF0ZSB1bmRlciBDeWd3aW4pLgogIworIyBEZWZpbmUgTk9fUEVSTCBpZiB5b3UgZG8gbm90IHdhbnQgUGVybCBzY3JpcHRzIG9yIGxpYnJhcmllcyBhdCBhbGwuCisjCiAjIERlZmluZSBOT19UQ0xUSyBpZiB5b3UgZG8gbm90IHdhbnQgVGNsL1RrIEdVSS4KICMKICMgVGhlIFRDTF9QQVRIIHZhcmlhYmxlIGdvdmVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBUY2wgaW50ZXJwcmV0ZXIKQEAgLTE1Niw2ICsxODIsMjIgQEAKICMgRGVmaW5lIE5PX0VYVEVSTkFMX0dSRVAgaWYgeW91IGRvbid0IHdhbnQgImdpdCBncmVwIiB0byBldmVyIGNhbGwKICMgeW91ciBleHRlcm5hbCBncmVwIChlLmcuLCBpZiB5b3VyIHN5c3RlbSBsYWNrcyBncmVwLCBpZiBpdHMgZ3JlcCBpcwogIyBicm9rZW4sIG9yIHNwYXduaW5nIGV4dGVybmFsIHByb2Nlc3MgaXMgc2xvd2VyIHRoYW4gYnVpbHQtaW4gZ3JlcCBnaXQgaGFzKS4KKyMKKyMgRGVmaW5lIFVOUkVMSUFCTEVfRlNUQVQgaWYgeW91ciBzeXN0ZW0ncyBmc3RhdCBkb2VzIG5vdCByZXR1cm4gdGhlIHNhbWUKKyMgaW5mb3JtYXRpb24gb24gYSBub3QgeWV0IGNsb3NlZCBmaWxlIHRoYXQgbHN0YXQgd291bGQgcmV0dXJuIGZvciB0aGUgc2FtZQorIyBmaWxlIGFmdGVyIGl0IHdhcyBjbG9zZWQuCisjCisjIERlZmluZSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTIGlmIHlvdXIgb3BlcmF0aW5nIHN5c3RlbXMgaGFzIHByb2JsZW1zCisjIHdoZW4gaGFyZGxpbmtpbmcgYSBmaWxlIHRvIGFub3RoZXIgbmFtZSBhbmQgdW5saW5raW5nIHRoZSBvcmlnaW5hbCBmaWxlIHJpZ2h0CisjIGF3YXkgKHNvbWUgTlRGUyBkcml2ZXJzIHNlZW0gdG8gemVybyB0aGUgY29udGVudHMgaW4gdGhhdCBzY2VuYXJpbykuCisjCisjIERlZmluZSBOT19DUk9TU19ESVJFQ1RPUllfSEFSRExJTktTIGlmIHlvdSBwbGFuIHRvIGRpc3RyaWJ1dGUgdGhlIGluc3RhbGxlZAorIyBwcm9ncmFtcyBhcyBhIHRhciwgd2hlcmUgYmluLyBhbmQgbGliZXhlYy8gbWlnaHQgYmUgb24gZGlmZmVyZW50IGZpbGUgc3lzdGVtcy4KKyMKKyMgRGVmaW5lIFVTRV9ORURfQUxMT0NBVE9SIGlmIHlvdSB3YW50IHRvIHJlcGxhY2UgdGhlIHBsYXRmb3JtcyBkZWZhdWx0CisjIG1lbW9yeSBhbGxvY2F0b3JzIHdpdGggdGhlIG5lZG1hbGxvYyBhbGxvY2F0b3Igd3JpdHRlbiBieSBOaWFsbCBEb3VnbGFzLgorIworIyBEZWZpbmUgTk9fUkVHRVggaWYgeW91IGhhdmUgbm8gb3IgaW5mZXJpb3IgcmVnZXggc3VwcG9ydCBpbiB5b3VyIEMgbGlicmFyeS4KIAogR0lULVZFUlNJT04tRklMRTogLkZPUkNFLUdJVC1WRVJTSU9OLUZJTEUKIAlAJChTSEVMTF9QQVRIKSAuL0dJVC1WRVJTSU9OLUdFTgpAQCAtMTc5LDI5ICsyMjEsMzQgQEAKICMgQW1vbmcgdGhlIHZhcmlhYmxlcyBiZWxvdywgdGhlc2U6CiAjICAgZ2l0ZXhlY2RpcgogIyAgIHRlbXBsYXRlX2RpcgorIyAgIG1hbmRpcgorIyAgIGluZm9kaXIKICMgICBodG1sZGlyCiAjICAgRVRDX0dJVENPTkZJRyAoYnV0IG5vdCBzeXNjb25mZGlyKQotIyBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgcmVsYXRpdmUgcGF0aCAuLi9zb21lL3doZXJlL2Vsc2UgKHdoaWNoIG11c3QgYmVnaW4KLSMgd2l0aCAuLi8pOyB0aGlzIGlzIGludGVycHJldGVkIGFzIHJlbGF0aXZlIHRvICQoYmluZGlyKSBhbmQgImdpdCIgYXQKKyMgY2FuIGJlIHNwZWNpZmllZCBhcyBhIHJlbGF0aXZlIHBhdGggc29tZS93aGVyZS9lbHNlOworIyB0aGlzIGlzIGludGVycHJldGVkIGFzIHJlbGF0aXZlIHRvICQocHJlZml4KSBhbmQgImdpdCIgYXQKICMgcnVudGltZSBmaWd1cmVzIG91dCB3aGVyZSB0aGV5IGFyZSBiYXNlZCBvbiB0aGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS4KICMgVGhpcyBjYW4gaGVscCBpbnN0YWxsaW5nIHRoZSBzdWl0ZSBpbiBhIHJlbG9jYXRhYmxlIHdheS4KIAogcHJlZml4ID0gJChIT01FKQotYmluZGlyID0gJChwcmVmaXgpL2JpbgotbWFuZGlyID0gJChwcmVmaXgpL3NoYXJlL21hbgotaW5mb2RpciA9ICQocHJlZml4KS9zaGFyZS9pbmZvCi1naXRleGVjZGlyID0gJChwcmVmaXgpL2xpYmV4ZWMvZ2l0LWNvcmUKK2JpbmRpcl9yZWxhdGl2ZSA9IGJpbgorYmluZGlyID0gJChwcmVmaXgpLyQoYmluZGlyX3JlbGF0aXZlKQorbWFuZGlyID0gc2hhcmUvbWFuCitpbmZvZGlyID0gc2hhcmUvaW5mbworZ2l0ZXhlY2RpciA9IGxpYmV4ZWMvZ2l0LWNvcmUKIHNoYXJlZGlyID0gJChwcmVmaXgpL3NoYXJlCi10ZW1wbGF0ZV9kaXIgPSAkKHNoYXJlZGlyKS9naXQtY29yZS90ZW1wbGF0ZXMKLWh0bWxkaXI9JChzaGFyZWRpcikvZG9jL2dpdC1kb2MKK3RlbXBsYXRlX2RpciA9IHNoYXJlL2dpdC1jb3JlL3RlbXBsYXRlcworaHRtbGRpciA9IHNoYXJlL2RvYy9naXQtZG9jCiBpZmVxICgkKHByZWZpeCksL3VzcikKIHN5c2NvbmZkaXIgPSAvZXRjCitFVENfR0lUQ09ORklHID0gJChzeXNjb25mZGlyKS9naXRjb25maWcKIGVsc2UKIHN5c2NvbmZkaXIgPSAkKHByZWZpeCkvZXRjCitFVENfR0lUQ09ORklHID0gZXRjL2dpdGNvbmZpZwogZW5kaWYKIGxpYiA9IGxpYgotRVRDX0dJVENPTkZJRyA9ICQoc3lzY29uZmRpcikvZ2l0Y29uZmlnCiAjIERFU1RESVI9CitwYXRoc2VwID0gOgogCiAjIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZ2l0d2ViCiBHSVRXRUJfQ09ORklHID0gZ2l0d2ViX2NvbmZpZy5wZXJsCkBAIC0yMjEsNyArMjY4LDcgQEAKIEdJVFdFQl9TSVRFX0hFQURFUiA9CiBHSVRXRUJfU0lURV9GT09URVIgPQogCi1leHBvcnQgcHJlZml4IGJpbmRpciBzaGFyZWRpciBodG1sZGlyIHN5c2NvbmZkaXIKK2V4cG9ydCBwcmVmaXggYmluZGlyIHNoYXJlZGlyIHN5c2NvbmZkaXIKIAogQ0MgPSBnY2MKIEFSID0gYXIKQEAgLTI1MCwxNCArMjk3LDI4IEBACiBCQVNJQ19DRkxBR1MgPQogQkFTSUNfTERGTEFHUyA9CiAKKyMgR3VhcmQgYWdhaW5zdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKK0JVSUxUSU5fT0JKUyA9CitCVUlMVF9JTlMgPQorQ09NUEFUX0NGTEFHUyA9CitDT01QQVRfT0JKUyA9CitMSUJfSCA9CitMSUJfT0JKUyA9CitQUk9HUkFNUyA9CitTQ1JJUFRfUEVSTCA9CitTQ1JJUFRfU0ggPQorVEVTVF9QUk9HUkFNUyA9CisKIFNDUklQVF9TSCArPSBnaXQtYW0uc2gKIFNDUklQVF9TSCArPSBnaXQtYmlzZWN0LnNoCitTQ1JJUFRfU0ggKz0gZ2l0LWRpZmZ0b29sLS1oZWxwZXIuc2gKIFNDUklQVF9TSCArPSBnaXQtZmlsdGVyLWJyYW5jaC5zaAogU0NSSVBUX1NIICs9IGdpdC1sb3N0LWZvdW5kLnNoCiBTQ1JJUFRfU0ggKz0gZ2l0LW1lcmdlLW9jdG9wdXMuc2gKIFNDUklQVF9TSCArPSBnaXQtbWVyZ2Utb25lLWZpbGUuc2gKIFNDUklQVF9TSCArPSBnaXQtbWVyZ2UtcmVzb2x2ZS5zaAogU0NSSVBUX1NIICs9IGdpdC1tZXJnZXRvb2wuc2gKK1NDUklQVF9TSCArPSBnaXQtbWVyZ2V0b29sLS1saWIuc2gKIFNDUklQVF9TSCArPSBnaXQtcGFyc2UtcmVtb3RlLnNoCiBTQ1JJUFRfU0ggKz0gZ2l0LXB1bGwuc2gKIFNDUklQVF9TSCArPSBnaXQtcXVpbHRpbXBvcnQuc2gKQEAgLTI3MSw2ICszMzIsNyBAQAogU0NSSVBUX1NIICs9IGdpdC13ZWItLWJyb3dzZS5zaAogCiBTQ1JJUFRfUEVSTCArPSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsCitTQ1JJUFRfUEVSTCArPSBnaXQtZGlmZnRvb2wucGVybAogU0NSSVBUX1BFUkwgKz0gZ2l0LWFyY2hpbXBvcnQucGVybAogU0NSSVBUX1BFUkwgKz0gZ2l0LWN2c2V4cG9ydGNvbW1pdC5wZXJsCiBTQ1JJUFRfUEVSTCArPSBnaXQtY3ZzaW1wb3J0LnBlcmwKQEAgLTI4OSwxNiArMzUxLDEzIEBACiAjIC4uLiBhbmQgYWxsIHRoZSByZXN0IHRoYXQgY291bGQgYmUgbW92ZWQgb3V0IG9mIGJpbmRpciB0byBnaXRleGVjZGlyCiBQUk9HUkFNUyArPSAkKEVYVFJBX1BST0dSQU1TKQogUFJPR1JBTVMgKz0gZ2l0LWZhc3QtaW1wb3J0JFgKLVBST0dSQU1TICs9IGdpdC1mZXRjaC1wYWNrJFgKIFBST0dSQU1TICs9IGdpdC1oYXNoLW9iamVjdCRYCiBQUk9HUkFNUyArPSBnaXQtaW5kZXgtcGFjayRYCiBQUk9HUkFNUyArPSBnaXQtbWVyZ2UtaW5kZXgkWAogUFJPR1JBTVMgKz0gZ2l0LW1lcmdlLXRyZWUkWAogUFJPR1JBTVMgKz0gZ2l0LW1rdGFnJFgKLVBST0dSQU1TICs9IGdpdC1ta3RyZWUkWAogUFJPR1JBTVMgKz0gZ2l0LXBhY2stcmVkdW5kYW50JFgKIFBST0dSQU1TICs9IGdpdC1wYXRjaC1pZCRYCi1QUk9HUkFNUyArPSBnaXQtc2VuZC1wYWNrJFgKIFBST0dSQU1TICs9IGdpdC1zaGVsbCRYCiBQUk9HUkFNUyArPSBnaXQtc2hvdy1pbmRleCRYCiBQUk9HUkFNUyArPSBnaXQtdW5wYWNrLWZpbGUkWApAQCAtMzEwLDggKzM2OSw4IEBACiAjIGJ1aWx0aW4tJEMubyBidXQgaXMgbGlua2VkIGluIGFzIHBhcnQgb2Ygc29tZSBvdGhlciBjb21tYW5kLgogQlVJTFRfSU5TICs9ICQocGF0c3Vic3QgYnVpbHRpbi0lLm8sZ2l0LSUkWCwkKEJVSUxUSU5fT0JKUykpCiAKLUJVSUxUX0lOUyArPSBnaXQtY2hlcnJ5LXBpY2skWAogQlVJTFRfSU5TICs9IGdpdC1jaGVycnkkWAorQlVJTFRfSU5TICs9IGdpdC1jaGVycnktcGljayRYCiBCVUlMVF9JTlMgKz0gZ2l0LWZvcm1hdC1wYXRjaCRYCiBCVUlMVF9JTlMgKz0gZ2l0LWZzY2stb2JqZWN0cyRYCiBCVUlMVF9JTlMgKz0gZ2l0LWdldC10YXItY29tbWl0LWlkJFgKQEAgLTMyOCw3ICszODcsNyBAQAogQUxMX1BST0dSQU1TID0gJChQUk9HUkFNUykgJChTQ1JJUFRTKQogCiAjIHdoYXQgJ2FsbCcgd2lsbCBidWlsZCBidXQgbm90IGluc3RhbGwgaW4gZ2l0ZXhlY2RpcgotT1RIRVJfUFJPR1JBTVMgPSBnaXQkWCBnaXR3ZWIvZ2l0d2ViLmNnaQorT1RIRVJfUFJPR1JBTVMgPSBnaXQkWAogCiAjIFNldCBwYXRocyB0byB0b29scyBlYXJseSBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgZm9yIHZlcnNpb24gdGVzdHMuCiBpZm5kZWYgU0hFTExfUEFUSApAQCAtMzUwLDggKzQwOSw4IEBACiBMSUJfSCArPSBjYWNoZS5oCiBMSUJfSCArPSBjYWNoZS10cmVlLmgKIExJQl9IICs9IGNvbW1pdC5oCi1MSUJfSCArPSBjb21wYXQvbWluZ3cuaAogTElCX0ggKz0gY29tcGF0L2N5Z3dpbi5oCitMSUJfSCArPSBjb21wYXQvbWluZ3cuaAogTElCX0ggKz0gY3N1bS1maWxlLmgKIExJQl9IICs9IGRlY29yYXRlLmgKIExJQl9IICs9IGRlbHRhLmgKQEAgLTM3Niw3ICs0MzUsNiBAQAogTElCX0ggKz0gcGFjay1yZXZpbmRleC5oCiBMSUJfSCArPSBwYXJzZS1vcHRpb25zLmgKIExJQl9IICs9IHBhdGNoLWlkcy5oCi1MSUJfSCArPSBzdHJpbmctbGlzdC5oCiBMSUJfSCArPSBwa3QtbGluZS5oCiBMSUJfSCArPSBwcm9ncmVzcy5oCiBMSUJfSCArPSBxdW90ZS5oCkBAIC0zODgsNyArNDQ2LDkgQEAKIExJQl9IICs9IHJ1bi1jb21tYW5kLmgKIExJQl9IICs9IHNoYTEtbG9va3VwLmgKIExJQl9IICs9IHNpZGViYW5kLmgKK0xJQl9IICs9IHNpZ2NoYWluLmgKIExJQl9IICs9IHN0cmJ1Zi5oCitMSUJfSCArPSBzdHJpbmctbGlzdC5oCiBMSUJfSCArPSB0YWcuaAogTElCX0ggKz0gdHJhbnNwb3J0LmgKIExJQl9IICs9IHRyZWUuaApAQCAtNDA2LDYgKzQ2Niw3IEBACiBMSUJfT0JKUyArPSBhcmNoaXZlLXppcC5vCiBMSUJfT0JKUyArPSBhdHRyLm8KIExJQl9PQkpTICs9IGJhc2U4NS5vCitMSUJfT0JKUyArPSBiaXNlY3QubwogTElCX09CSlMgKz0gYmxvYi5vCiBMSUJfT0JKUyArPSBicmFuY2gubwogTElCX09CSlMgKz0gYnVuZGxlLm8KQEAgLTQyNyw4ICs0ODgsOCBAQAogTElCX09CSlMgKz0gZGlmZmNvcmUtcGlja2F4ZS5vCiBMSUJfT0JKUyArPSBkaWZmY29yZS1yZW5hbWUubwogTElCX09CSlMgKz0gZGlmZi1kZWx0YS5vCi1MSUJfT0JKUyArPSBkaWZmLW5vLWluZGV4Lm8KIExJQl9PQkpTICs9IGRpZmYtbGliLm8KK0xJQl9PQkpTICs9IGRpZmYtbm8taW5kZXgubwogTElCX09CSlMgKz0gZGlmZi5vCiBMSUJfT0JKUyArPSBkaXIubwogTElCX09CSlMgKz0gZWRpdG9yLm8KQEAgLTQ2MCw5ICs1MjEsOSBAQAogTElCX09CSlMgKz0gcGFyc2Utb3B0aW9ucy5vCiBMSUJfT0JKUyArPSBwYXRjaC1kZWx0YS5vCiBMSUJfT0JKUyArPSBwYXRjaC1pZHMubwotTElCX09CSlMgKz0gc3RyaW5nLWxpc3QubwogTElCX09CSlMgKz0gcGF0aC5vCiBMSUJfT0JKUyArPSBwa3QtbGluZS5vCitMSUJfT0JKUyArPSBwcmVsb2FkLWluZGV4Lm8KIExJQl9PQkpTICs9IHByZXR0eS5vCiBMSUJfT0JKUyArPSBwcm9ncmVzcy5vCiBMSUJfT0JKUyArPSBxdW90ZS5vCkBAIC00NzYsMTIgKzUzNywxNCBAQAogTElCX09CSlMgKz0gcnVuLWNvbW1hbmQubwogTElCX09CSlMgKz0gc2VydmVyLWluZm8ubwogTElCX09CSlMgKz0gc2V0dXAubwotTElCX09CSlMgKz0gc2hhMV9maWxlLm8KIExJQl9PQkpTICs9IHNoYTEtbG9va3VwLm8KK0xJQl9PQkpTICs9IHNoYTFfZmlsZS5vCiBMSUJfT0JKUyArPSBzaGExX25hbWUubwogTElCX09CSlMgKz0gc2hhbGxvdy5vCiBMSUJfT0JKUyArPSBzaWRlYmFuZC5vCitMSUJfT0JKUyArPSBzaWdjaGFpbi5vCiBMSUJfT0JKUyArPSBzdHJidWYubworTElCX09CSlMgKz0gc3RyaW5nLWxpc3QubwogTElCX09CSlMgKz0gc3ltbGlua3MubwogTElCX09CSlMgKz0gdGFnLm8KIExJQl9PQkpTICs9IHRyYWNlLm8KQEAgLTQ5MCw4ICs1NTMsOCBAQAogTElCX09CSlMgKz0gdHJlZS5vCiBMSUJfT0JKUyArPSB0cmVlLXdhbGsubwogTElCX09CSlMgKz0gdW5wYWNrLXRyZWVzLm8KLUxJQl9PQkpTICs9IHVzZXJkaWZmLm8KIExJQl9PQkpTICs9IHVzYWdlLm8KK0xJQl9PQkpTICs9IHVzZXJkaWZmLm8KIExJQl9PQkpTICs9IHV0ZjgubwogTElCX09CSlMgKz0gd2Fsa2VyLm8KIExJQl9PQkpTICs9IHdyYXBwZXIubwpAQCAtNDk5LDEyICs1NjIsMTIgQEAKIExJQl9PQkpTICs9IHdzLm8KIExJQl9PQkpTICs9IHd0LXN0YXR1cy5vCiBMSUJfT0JKUyArPSB4ZGlmZi1pbnRlcmZhY2UubwotTElCX09CSlMgKz0gcHJlbG9hZC1pbmRleC5vCiAKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWFkZC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1hbm5vdGF0ZS5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1hcHBseS5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1hcmNoaXZlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluLWJpc2VjdC0taGVscGVyLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWJsYW1lLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWJyYW5jaC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1idW5kbGUubwpAQCAtNTQ2LDYgKzYwOSw3IEBACiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1tZXJnZS1maWxlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLW1lcmdlLW91cnMubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tbWVyZ2UtcmVjdXJzaXZlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluLW1rdHJlZS5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1tdi5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1uYW1lLXJldi5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1wYWNrLW9iamVjdHMubwpAQCAtNTkyLDEwICs2NTYsMTIgQEAKIAogaWZlcSAoJCh1bmFtZV9TKSxMaW51eCkKIAlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKIAlUSFJFQURFRF9ERUxUQV9TRUFSQ0ggPSBZZXNQbGVhc2UKIGVuZGlmCiBpZmVxICgkKHVuYW1lX1MpLEdOVS9rRnJlZUJTRCkKIAlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKIAlUSFJFQURFRF9ERUxUQV9TRUFSQ0ggPSBZZXNQbGVhc2UKIGVuZGlmCiBpZmVxICgkKHVuYW1lX1MpLFVuaXhXYXJlKQpAQCAtNjA3LDYgKzY3Myw3IEBACiAJU0hFTExfUEFUSCA9IC91c3IvbG9jYWwvYmluL2Jhc2gKIAlOT19JUFY2ID0gWWVzUGxlYXNlCiAJTk9fSFNUUkVSUk9SID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKIAlCQVNJQ19DRkxBR1MgKz0gLUt0aHJlYWQKIAlCQVNJQ19DRkxBR1MgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUKIAlCQVNJQ19MREZMQUdTICs9IC1ML3Vzci9sb2NhbC9saWIKQEAgLTYzMCw2ICs2OTcsNyBAQAogCVNIRUxMX1BBVEggPSAvdXNyL2Jpbi9iYXNoCiAJTk9fSVBWNiA9IFllc1BsZWFzZQogCU5PX0hTVFJFUlJPUiA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCiAJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCiAJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCiAJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQpAQCAtNjQwLDIyICs3MDgsMzcgQEAKIGlmZXEgKCQodW5hbWVfUyksRGFyd2luKQogCU5FRURTX1NTTF9XSVRIX0NSWVBUTyA9IFllc1BsZWFzZQogCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCi0JaWZuZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9SKSIgOiAnOVwuJyksMikKKwlpZmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfUikiIDogJ1sxNTY3OF1cLicpLDIpCiAJCU9MRF9JQ09OViA9IFVuZm9ydHVuYXRlbHlZZXMKIAllbmRpZgotCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKKwlpZmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfUikiIDogJ1sxNV1cLicpLDIpCisJCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKKwllbmRpZgogCU5PX01FTU1FTSA9IFllc1BsZWFzZQogCVRIUkVBREVEX0RFTFRBX1NFQVJDSCA9IFllc1BsZWFzZQorCVVTRV9TVF9USU1FU1BFQyA9IFllc1BsZWFzZQogZW5kaWYKIGlmZXEgKCQodW5hbWVfUyksU3VuT1MpCiAJTkVFRFNfU09DS0VUID0gWWVzUGxlYXNlCiAJTkVFRFNfTlNMID0gWWVzUGxlYXNlCiAJU0hFTExfUEFUSCA9IC9iaW4vYmFzaAorCVNBTkVfVE9PTF9QQVRIID0gL3Vzci94cGc2L2JpbjovdXNyL3hwZzQvYmluCiAJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQogCU5PX01FTU1FTSA9IFllc1BsZWFzZQotCU5PX0hTVFJFUlJPUiA9IFllc1BsZWFzZQogCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKLQlPTERfSUNPTlYgPSBVbmZvcnR1bmF0ZWx5WWVzCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKKwlOT19SRUdFWCA9IFllc1BsZWFzZQorCU5PX0VYVEVSTkFMX0dSRVAgPSBZZXNQbGVhc2UKKwlpZmVxICgkKHVuYW1lX1IpLDUuNykKKwkJTkVFRFNfUkVTT0xWID0gWWVzUGxlYXNlCisJCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwkJTk9fU09DS0FERFJfU1RPUkFHRSA9IFllc1BsZWFzZQorCQlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCQlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwkJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCQlOT19DOTlfRk9STUFUID0gWWVzUGxlYXNlCisJCU5PX1NUUlRPVU1BWCA9IFllc1BsZWFzZQorCWVuZGlmCiAJaWZlcSAoJCh1bmFtZV9SKSw1LjgpCiAJCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCiAJCU5PX1NFVEVOViA9IFllc1BsZWFzZQpAQCAtNjY4LDE1ICs3NTEsMTkgQEAKIAkJTk9fQzk5X0ZPUk1BVCA9IFllc1BsZWFzZQogCQlOT19TVFJUT1VNQVggPSBZZXNQbGVhc2UKIAllbmRpZgotCUlOU1RBTEwgPSBnaW5zdGFsbAorCWlmZGVmIE5PX0lQVjYKKwkJTkVFRFNfUkVTT0xWID0gWWVzUGxlYXNlCisJZW5kaWYKKwlJTlNUQUxMID0gL3Vzci91Y2IvaW5zdGFsbAogCVRBUiA9IGd0YXIKLQlCQVNJQ19DRkxBR1MgKz0gLURfX0VYVEVOU0lPTlNfXworCUJBU0lDX0NGTEFHUyArPSAtRF9fRVhURU5TSU9OU19fIC1EX19zdW5fXyAtREhBVkVfQUxMT0NBX0gKIGVuZGlmCiBpZmVxICgkKHVuYW1lX08pLEN5Z3dpbikKIAlOT19EX1RZUEVfSU5fRElSRU5UID0gWWVzUGxlYXNlCiAJTk9fRF9JTk9fSU5fRElSRU5UID0gWWVzUGxlYXNlCiAJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQogCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCiAJTk9fU1lNTElOS19IRUFEID0gWWVzUGxlYXNlCiAJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKIAlOT19GQVNUX1dPUktJTkdfRElSRUNUT1JZID0gVW5mb3J0dW5hdGVseVllcwpAQCAtNjk1LDYgKzc4Miw3IEBACiAJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCiAJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCiAJRElSX0hBU19CU0RfR1JPVVBfU0VNQU5USUNTID0gWWVzUGxlYXNlCisJVVNFX1NUX1RJTUVTUEVDID0gWWVzUGxlYXNlCiAJVEhSRUFERURfREVMVEFfU0VBUkNIID0gWWVzUGxlYXNlCiAJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1IpIiA6ICc0XC4nKSwyKQogCQlQVEhSRUFEX0xJQlMgPSAtcHRocmVhZApAQCAtNzA1LDYgKzc5Myw3IEBACiBpZmVxICgkKHVuYW1lX1MpLE9wZW5CU0QpCiAJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQogCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCVVTRV9TVF9USU1FU1BFQyA9IFllc1BsZWFzZQogCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCiAJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCiAJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCkBAIC03MTcsMTIgKzgwNiwxNiBAQAogCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvcGtnL2luY2x1ZGUKIAlCQVNJQ19MREZMQUdTICs9IC1ML3Vzci9wa2cvbGliICQoQ0NfTERfRFlOUEFUSCkvdXNyL3BrZy9saWIKIAlUSFJFQURFRF9ERUxUQV9TRUFSQ0ggPSBZZXNQbGVhc2UKKwlVU0VfU1RfVElNRVNQRUMgPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQogZW5kaWYKIGlmZXEgKCQodW5hbWVfUyksQUlYKQogCU5PX1NUUkNBU0VTVFI9WWVzUGxlYXNlCiAJTk9fTUVNTUVNID0gWWVzUGxlYXNlCiAJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCiAJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKIAlGUkVBRF9SRUFEU19ESVJFQ1RPUklFUyA9IFVuZm9ydHVuYXRlbHlZZXMKIAlJTlRFUk5BTF9RU09SVCA9IFVuZm9ydHVuYXRlbHlZZXMKIAlORUVEU19MSUJJQ09OVj1ZZXNQbGVhc2UKQEAgLTczNiwyNCArODI5LDQwIEBACiBpZmVxICgkKHVuYW1lX1MpLEdOVSkKIAkjIEdOVS9IdXJkCiAJTk9fU1RSTENQWT1ZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksSVJJWCkKKwlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwlOT19NTUFQID0gWWVzUGxlYXNlCisJTk9fRVhURVJOQUxfR1JFUCA9IFVuZm9ydHVuYXRlbHlZZXMKKwlTTlBSSU5URl9SRVRVUk5TX0JPR1VTID0gWWVzUGxlYXNlCisJU0hFTExfUEFUSCA9IC91c3IvZ251L2Jpbi9iYXNoCisJTkVFRFNfTElCR0VOID0gWWVzUGxlYXNlCiBlbmRpZgogaWZlcSAoJCh1bmFtZV9TKSxJUklYNjQpCi0JTk9fSVBWNj1ZZXNQbGVhc2UKIAlOT19TRVRFTlY9WWVzUGxlYXNlCisJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKIAlOT19TVFJDQVNFU1RSPVllc1BsZWFzZQogCU5PX01FTU1FTSA9IFllc1BsZWFzZQotCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKLQlOT19TT0NLQUREUl9TVE9SQUdFPVllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX01NQVAgPSBZZXNQbGVhc2UKKwlOT19FWFRFUk5BTF9HUkVQID0gVW5mb3J0dW5hdGVseVllcworCVNOUFJJTlRGX1JFVFVSTlNfQk9HVVMgPSBZZXNQbGVhc2UKIAlTSEVMTF9QQVRIPS91c3IvZ251L2Jpbi9iYXNoCi0JQkFTSUNfQ0ZMQUdTICs9IC1EUEFUSF9NQVg9MTAyNAotCSMgZm9yIG5vdywgYnVpbGQgMzItYml0IHZlcnNpb24KLQlCQVNJQ19MREZMQUdTICs9IC1ML3Vzci9saWIzMgorCU5FRURTX0xJQkdFTiA9IFllc1BsZWFzZQogZW5kaWYKIGlmZXEgKCQodW5hbWVfUyksSFAtVVgpCiAJTk9fSVBWNj1ZZXNQbGVhc2UKIAlOT19TRVRFTlY9WWVzUGxlYXNlCiAJTk9fU1RSQ0FTRVNUUj1ZZXNQbGVhc2UKIAlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQogCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKIAlOT19NS0RURU1QID0gWWVzUGxlYXNlCiAJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKQEAgLTc2MywxMiArODcyLDEzIEBACiBlbmRpZgogaWZuZXEgKCwkKGZpbmRzdHJpbmcgQ1lHV0lOLCQodW5hbWVfUykpKQogCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9jeWd3aW4ubworCVVOUkVMSUFCTEVfRlNUQVQgPSBVbmZvcnR1bmF0ZWx5WWVzCiBlbmRpZgogaWZuZXEgKCwkKGZpbmRzdHJpbmcgTUlOR1csJCh1bmFtZV9TKSkpCi0JTk9fTU1BUCA9IFllc1BsZWFzZQorCXBhdGhzZXAgPSA7CiAJTk9fUFJFQUQgPSBZZXNQbGVhc2UKIAlOT19PUEVOU1NMID0gWWVzUGxlYXNlCi0JTk9fQ1VSTCA9IFllc1BsZWFzZQorCU5PX0xJQkdFTl9IID0gWWVzUGxlYXNlCiAJTk9fU1lNTElOS19IRUFEID0gWWVzUGxlYXNlCiAJTk9fSVBWNiA9IFllc1BsZWFzZQogCU5PX1NFVEVOViA9IFllc1BsZWFzZQpAQCAtNzc2LDM0ICs4ODYsNTggQEAKIAlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCiAJTk9fU1RSTENQWSA9IFllc1BsZWFzZQogCU5PX01FTU1FTSA9IFllc1BsZWFzZQotCU5PX1BUSFJFQURTID0gWWVzUGxlYXNlCiAJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKIAlPTERfSUNPTlYgPSBZZXNQbGVhc2UKIAlOT19DOTlfRk9STUFUID0gWWVzUGxlYXNlCiAJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCiAJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCiAJU05QUklOVEZfUkVUVVJOU19CT0dVUyA9IFllc1BsZWFzZQogCU5PX1NWTl9URVNUUyA9IFllc1BsZWFzZQogCU5PX1BFUkxfTUFLRU1BS0VSID0gWWVzUGxlYXNlCisJUlVOVElNRV9QUkVGSVggPSBZZXNQbGVhc2UKIAlOT19QT1NJWF9PTkxZX1BST0dSQU1TID0gWWVzUGxlYXNlCiAJTk9fU1RfQkxPQ0tTX0lOX1NUUlVDVF9TVEFUID0gWWVzUGxlYXNlCi0JQ09NUEFUX0NGTEFHUyArPSAtRF9fVVNFX01JTkdXX0FDQ0VTUyAtRE5PR0RJIC1JY29tcGF0IC1JY29tcGF0L3JlZ2V4IC1JY29tcGF0L2ZubWF0Y2gKLQlDT01QQVRfQ0ZMQUdTICs9IC1EU05QUklOVEZfU0laRV9DT1JSPTEKKwlOT19OU0VDID0gWWVzUGxlYXNlCisJVVNFX1dJTjMyX01NQVAgPSBZZXNQbGVhc2UKKwlVU0VfTkVEX0FMTE9DQVRPUiA9IFllc1BsZWFzZQorCVVOUkVMSUFCTEVfRlNUQVQgPSBVbmZvcnR1bmF0ZWx5WWVzCisJT0JKRUNUX0NSRUFUSU9OX1VTRVNfUkVOQU1FUyA9IFVuZm9ydHVuYXRlbHlOZWVkc1RvCisJTk9fUkVHRVggPSBZZXNQbGVhc2UKKwlDT01QQVRfQ0ZMQUdTICs9IC1EX19VU0VfTUlOR1dfQUNDRVNTIC1ETk9HREkgLUljb21wYXQgLUljb21wYXQvZm5tYXRjaAogCUNPTVBBVF9DRkxBR1MgKz0gLURTVFJJUF9FWFRFTlNJT049XCIuZXhlXCIKLQlDT01QQVRfT0JKUyArPSBjb21wYXQvbWluZ3cubyBjb21wYXQvZm5tYXRjaC9mbm1hdGNoLm8gY29tcGF0L3JlZ2V4L3JlZ2V4Lm8gY29tcGF0L3dpbmFuc2kubworCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9taW5ndy5vIGNvbXBhdC9mbm1hdGNoL2ZubWF0Y2gubyBjb21wYXQvd2luYW5zaS5vCiAJRVhUTElCUyArPSAtbHdzMl8zMgogCVggPSAuZXhlCi0JZ2l0ZXhlY2RpciA9IC4uL2xpYmV4ZWMvZ2l0LWNvcmUKLQl0ZW1wbGF0ZV9kaXIgPSAuLi9zaGFyZS9naXQtY29yZS90ZW1wbGF0ZXMvCi0JRVRDX0dJVENPTkZJRyA9IC4uL2V0Yy9naXRjb25maWcKK2lmbmVxICgsJCh3aWxkY2FyZCAuLi9USElTX0lTX01TWVNHSVQpKQorCWh0bWxkaXI9ZG9jL2dpdC9odG1sLworCXByZWZpeCA9CisJSU5TVEFMTCA9IC9iaW4vaW5zdGFsbAorCUVYVExJQlMgKz0gL21pbmd3L2xpYi9saWJ6LmEKKwlOT19SX1RPX0dDQ19MSU5LRVIgPSBZZXNQbGVhc2UKKwlJTlRFUk5BTF9RU09SVCA9IFllc1BsZWFzZQorCVRIUkVBREVEX0RFTFRBX1NFQVJDSCA9IFllc1BsZWFzZQorZWxzZQorCU5PX0NVUkwgPSBZZXNQbGVhc2UKKwlOT19QVEhSRUFEUyA9IFllc1BsZWFzZQorZW5kaWYKIGVuZGlmCiBpZm5lcSAoLCQoZmluZHN0cmluZyBhcm0sJCh1bmFtZV9NKSkpCiAJQVJNX1NIQTEgPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQogZW5kaWYKIAogLWluY2x1ZGUgY29uZmlnLm1hay5hdXRvZ2VuCiAtaW5jbHVkZSBjb25maWcubWFrCiAKK2lmZGVmIFNBTkVfVE9PTF9QQVRICitTQU5FX1RPT0xfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0FORV9UT09MX1BBVEgpKQorQlJPS0VOX1BBVEhfRklYID0gJ3N8XlwjIEBAQlJPS0VOX1BBVEhfRklYQEAkJHxnaXRfYnJva2VuX3BhdGhfZml4ICQoU0FORV9UT09MX1BBVEhfU1EpfCcKK1BBVEggOj0gJChTQU5FX1RPT0xfUEFUSCk6JHtQQVRIfQorZWxzZQorQlJPS0VOX1BBVEhfRklYID0gJy9eXCMgQEBCUk9LRU5fUEFUSF9GSVhAQCQkL2QnCitlbmRpZgorCiBpZmVxICgkKHVuYW1lX1MpLERhcndpbikKIAlpZm5kZWYgTk9fRklOSwogCQlpZmVxICgkKHNoZWxsIHRlc3QgLWQgL3N3L2xpYiAmJiBlY2hvIHkpLHkpCkBAIC04MTcsNiArOTUxLDcgQEAKIAkJCUJBU0lDX0xERkxBR1MgKz0gLUwvb3B0L2xvY2FsL2xpYgogCQllbmRpZgogCWVuZGlmCisJUFRIUkVBRF9MSUJTID0KIGVuZGlmCiAKIGlmbmRlZiBDQ19MRF9EWU5QQVRICkBAIC04MjksNiArOTY0LDExIEBACiAJZW5kaWYKIGVuZGlmCiAKK2lmZGVmIE5PX0xJQkdFTl9ICisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX0xJQkdFTl9ICisJQ09NUEFUX09CSlMgKz0gY29tcGF0L2Jhc2VuYW1lLm8KK2VuZGlmCisKIGlmZGVmIE5PX0NVUkwKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19DVVJMCiBlbHNlCkBAIC04NDksNyArOTg5LDEyIEBACiAJCWVuZGlmCiAJZW5kaWYKIAlpZm5kZWYgTk9fRVhQQVQKLQkJRVhQQVRfTElCRVhQQVQgPSAtbGV4cGF0CisJCWlmZGVmIEVYUEFURElSCisJCQlCQVNJQ19DRkxBR1MgKz0gLUkkKEVYUEFURElSKS9pbmNsdWRlCisJCQlFWFBBVF9MSUJFWFBBVCA9IC1MJChFWFBBVERJUikvJChsaWIpICQoQ0NfTERfRFlOUEFUSCkkKEVYUEFURElSKS8kKGxpYikgLWxleHBhdAorCQllbHNlCisJCQlFWFBBVF9MSUJFWFBBVCA9IC1sZXhwYXQKKwkJZW5kaWYKIAllbmRpZgogZW5kaWYKIApAQCAtODkwLDEyICsxMDM1LDE4IEBACiAJZW5kaWYKIAlFWFRMSUJTICs9ICQoSUNPTlZfTElOSykgLWxpY29udgogZW5kaWYKK2lmZGVmIE5FRURTX0xJQkdFTgorCUVYVExJQlMgKz0gLWxnZW4KK2VuZGlmCiBpZmRlZiBORUVEU19TT0NLRVQKIAlFWFRMSUJTICs9IC1sc29ja2V0CiBlbmRpZgogaWZkZWYgTkVFRFNfTlNMCiAJRVhUTElCUyArPSAtbG5zbAogZW5kaWYKK2lmZGVmIE5FRURTX1JFU09MVgorCUVYVExJQlMgKz0gLWxyZXNvbHYKK2VuZGlmCiBpZmRlZiBOT19EX1RZUEVfSU5fRElSRU5UCiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fRF9UWVBFX0lOX0RJUkVOVAogZW5kaWYKQEAgLTkwNSw2ICsxMDU2LDE1IEBACiBpZmRlZiBOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQKIGVuZGlmCitpZmRlZiBVU0VfTlNFQworCUJBU0lDX0NGTEFHUyArPSAtRFVTRV9OU0VDCitlbmRpZgoraWZkZWYgVVNFX1NUX1RJTUVTUEVDCisJQkFTSUNfQ0ZMQUdTICs9IC1EVVNFX1NUX1RJTUVTUEVDCitlbmRpZgoraWZkZWYgTk9fTlNFQworCUJBU0lDX0NGTEFHUyArPSAtRE5PX05TRUMKK2VuZGlmCiBpZmRlZiBOT19DOTlfRk9STUFUCiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fQzk5X0ZPUk1BVAogZW5kaWYKQEAgLTk0Miw2ICsxMTAyLDEwIEBACiAJQ09NUEFUX0NGTEFHUyArPSAtRE5PX01LRFRFTVAKIAlDT01QQVRfT0JKUyArPSBjb21wYXQvbWtkdGVtcC5vCiBlbmRpZgoraWZkZWYgTk9fTUtTVEVNUFMKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fTUtTVEVNUFMKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvbWtzdGVtcHMubworZW5kaWYKIGlmZGVmIE5PX1VOU0VURU5WCiAJQ09NUEFUX0NGTEFHUyArPSAtRE5PX1VOU0VURU5WCiAJQ09NUEFUX09CSlMgKz0gY29tcGF0L3Vuc2V0ZW52Lm8KQEAgLTk1Miw2ICsxMTE2LDE0IEBACiBpZmRlZiBOT19NTUFQCiAJQ09NUEFUX0NGTEFHUyArPSAtRE5PX01NQVAKIAlDT01QQVRfT0JKUyArPSBjb21wYXQvbW1hcC5vCitlbHNlCisJaWZkZWYgVVNFX1dJTjMyX01NQVAKKwkJQ09NUEFUX0NGTEFHUyArPSAtRFVTRV9XSU4zMl9NTUFQCisJCUNPTVBBVF9PQkpTICs9IGNvbXBhdC93aW4zMm1tYXAubworCWVuZGlmCitlbmRpZgoraWZkZWYgT0JKRUNUX0NSRUFUSU9OX1VTRVNfUkVOQU1FUworCUNPTVBBVF9DRkxBR1MgKz0gLURPQkpFQ1RfQ1JFQVRJT05fTU9ERT0xCiBlbmRpZgogaWZkZWYgTk9fUFJFQUQKIAlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fUFJFQUQKQEAgLTEwMjcsNiArMTE5OSw5IEBACiAJQ09NUEFUX0NGTEFHUyArPSAtRElOVEVSTkFMX1FTT1JUCiAJQ09NUEFUX09CSlMgKz0gY29tcGF0L3Fzb3J0Lm8KIGVuZGlmCitpZmRlZiBSVU5USU1FX1BSRUZJWAorCUNPTVBBVF9DRkxBR1MgKz0gLURSVU5USU1FX1BSRUZJWAorZW5kaWYKIAogaWZkZWYgTk9fUFRIUkVBRFMKIAlUSFJFQURFRF9ERUxUQV9TRUFSQ0ggPQpAQCAtMTA0NSwxMSArMTIyMCwyNyBAQAogaWZkZWYgTk9fRVhURVJOQUxfR1JFUAogCUJBU0lDX0NGTEFHUyArPSAtRE5PX0VYVEVSTkFMX0dSRVAKIGVuZGlmCitpZmRlZiBVTlJFTElBQkxFX0ZTVEFUCisJQkFTSUNfQ0ZMQUdTICs9IC1EVU5SRUxJQUJMRV9GU1RBVAorZW5kaWYKK2lmZGVmIE5PX1JFR0VYCisJQ09NUEFUX0NGTEFHUyArPSAtSWNvbXBhdC9yZWdleAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9yZWdleC9yZWdleC5vCitlbmRpZgorCitpZmRlZiBVU0VfTkVEX0FMTE9DQVRPUgorICAgICAgIENPTVBBVF9DRkxBR1MgKz0gLURVU0VfTkVEX0FMTE9DQVRPUiAtRE9WRVJSSURFX1NUUkRVUCAtRE5ERUJVRyAtRFJFUExBQ0VfU1lTVEVNX0FMTE9DQVRPUiAtSWNvbXBhdC9uZWRtYWxsb2MKKyAgICAgICBDT01QQVRfT0JKUyArPSBjb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5vCitlbmRpZgogCiBpZmVxICgkKFRDTFRLX1BBVEgpLCkKIE5PX1RDTFRLPU5vVGhhbmtzCiBlbmRpZgogCitpZmVxICgkKFBFUkxfUEFUSCksKQorTk9fUEVSTD1Ob1RoYW5rcworZW5kaWYKKwogUVVJRVRfU1VCRElSMCAgPSArJChNQUtFKSAtQyAjIHNwYWNlIHRvIHNlcGFyYXRlIC1DIGFuZCBzdWJkaXIKIFFVSUVUX1NVQkRJUjEgID0KIApAQCAtMTA4Niw2ICsxMjc3LDcgQEAKIAogREVTVERJUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVTVERJUikpCiBiaW5kaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGJpbmRpcikpCitiaW5kaXJfcmVsYXRpdmVfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGJpbmRpcl9yZWxhdGl2ZSkpCiBtYW5kaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKG1hbmRpcikpCiBpbmZvZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChpbmZvZGlyKSkKIGdpdGV4ZWNkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGdpdGV4ZWNkaXIpKQpAQCAtMTExNSw3ICsxMzA3LDcgQEAKIAogYWxsOjogc2hlbGxfY29tcGF0aWJpbGl0eV90ZXN0ICQoQUxMX1BST0dSQU1TKSAkKEJVSUxUX0lOUykgJChPVEhFUl9QUk9HUkFNUykgR0lULUJVSUxELU9QVElPTlMKIGlmbmVxICgsJFgpCi0JJChmb3JlYWNoIHAsJChwYXRzdWJzdCAlJFgsJSwkKGZpbHRlciAlJFgsJChBTExfUFJPR1JBTVMpICQoQlVJTFRfSU5TKSBnaXQkWCkpLCB0ZXN0ICckcCcgLWVmICckcCRYJyB8fCAkKFJNKSAnJHAnOykKKwkkKFFVSUVUX0JVSUxUX0lOKSQoZm9yZWFjaCBwLCQocGF0c3Vic3QgJSRYLCUsJChmaWx0ZXIgJSRYLCQoQUxMX1BST0dSQU1TKSAkKEJVSUxUX0lOUykgZ2l0JFgpKSwgdGVzdCAnJHAnIC1lZiAnJHAkWCcgfHwgJChSTSkgJyRwJzspCiBlbmRpZgogCiBhbGw6OgpAQCAtMTEyMyw3ICsxMzE1LDkgQEAKIAkkKFFVSUVUX1NVQkRJUjApZ2l0LWd1aSAkKFFVSUVUX1NVQkRJUjEpIGdpdGV4ZWNkaXI9JyQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScgYWxsCiAJJChRVUlFVF9TVUJESVIwKWdpdGstZ2l0ICQoUVVJRVRfU1VCRElSMSkgYWxsCiBlbmRpZgoraWZuZGVmIE5PX1BFUkwKIAkkKFFVSUVUX1NVQkRJUjApcGVybCAkKFFVSUVUX1NVQkRJUjEpIFBFUkxfUEFUSD0nJChQRVJMX1BBVEhfU1EpJyBwcmVmaXg9JyQocHJlZml4X1NRKScgYWxsCitlbmRpZgogCSQoUVVJRVRfU1VCRElSMCl0ZW1wbGF0ZXMgJChRVUlFVF9TVUJESVIxKQogCiBwbGVhc2Vfc2V0X1NIRUxMX1BBVEhfdG9fYV9tb3JlX21vZGVybl9zaGVsbDoKQEAgLTExMzYsNiArMTMzMCw3IEBACiAKIGdpdC5vOiBnaXQuYyBjb21tb24tY21kcy5oIEdJVC1DRkxBR1MKIAkkKFFVSUVUX0NDKSQoQ0MpIC1ER0lUX1ZFUlNJT049JyIkKEdJVF9WRVJTSU9OKSInIFwKKwkJJy1ER0lUX0hUTUxfUEFUSD0iJChodG1sZGlyX1NRKSInIFwKIAkJJChBTExfQ0ZMQUdTKSAtYyAkKGZpbHRlciAlLmMsJF4pCiAKIGdpdCRYOiBnaXQubyAkKEJVSUxUSU5fT0JKUykgJChHSVRMSUJTKQpAQCAtMTE2MywxMyArMTM1OCwxNCBAQAogCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCiAJc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnIFwKIAkgICAgLWUgJ3N8QFNIRUxMX1BBVEhAfCQoU0hFTExfUEFUSF9TUSl8JyBcCi0JICAgIC1lICdzfEBAUEVSTEBAfCQoUEVSTF9QQVRIX1NRKXxnJyBcCiAJICAgIC1lICdzL0BAR0lUX1ZFUlNJT05AQC8kKEdJVF9WRVJTSU9OKS9nJyBcCiAJICAgIC1lICdzL0BATk9fQ1VSTEBALyQoTk9fQ1VSTCkvZycgXAorCSAgICAtZSAkKEJST0tFTl9QQVRIX0ZJWCkgXAogCSAgICAkQC5zaCA+JEArICYmIFwKIAljaG1vZCAreCAkQCsgJiYgXAogCW12ICRAKyAkQAogCitpZm5kZWYgTk9fUEVSTAogJChwYXRzdWJzdCAlLnBlcmwsJSwkKFNDUklQVF9QRVJMKSk6IHBlcmwvcGVybC5tYWsKIAogcGVybC9wZXJsLm1hazogR0lULUNGTEFHUyBwZXJsL01ha2VmaWxlIHBlcmwvTWFrZWZpbGUuUEwKQEAgLTExODEsNyArMTM3Nyw3IEBACiAJc2VkIC1lICcxeycgXAogCSAgICAtZSAnCXN8IyEuKnBlcmx8IyEkKFBFUkxfUEFUSF9TUSl8JyBcCiAJICAgIC1lICcJaCcgXAotCSAgICAtZSAnCXM9Lio9dXNlIGxpYiAoc3BsaXQoLzovLCAkJEVOVntHSVRQRVJMTElCfSB8fCAiQEBJTlNUTElCRElSQEAiKSk7PScgXAorCSAgICAtZSAnCXM9Lio9dXNlIGxpYiAoc3BsaXQoLyQocGF0aHNlcCkvLCAkJEVOVntHSVRQRVJMTElCfSB8fCAiQEBJTlNUTElCRElSQEAiKSk7PScgXAogCSAgICAtZSAnCUgnIFwKIAkgICAgLWUgJwl4JyBcCiAJICAgIC1lICd9JyBcCkBAIC0xMTkxLDYgKzEzODcsNyBAQAogCWNobW9kICt4ICRAKyAmJiBcCiAJbXYgJEArICRACiAKK09USEVSX1BST0dSQU1TICs9IGdpdHdlYi9naXR3ZWIuY2dpCiBnaXR3ZWIvZ2l0d2ViLmNnaTogZ2l0d2ViL2dpdHdlYi5wZXJsCiAJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKIAlzZWQgLWUgJzFzfCMhLipwZXJsfCMhJChQRVJMX1BBVEhfU1EpfCcgXApAQCAtMTIyOSw2ICsxNDI2LDE1IEBACiAJICAgICRALnNoID4gJEArICYmIFwKIAljaG1vZCAreCAkQCsgJiYgXAogCW12ICRAKyAkQAorZWxzZSAjIE5PX1BFUkwKKyQocGF0c3Vic3QgJS5wZXJsLCUsJChTQ1JJUFRfUEVSTCkpIGdpdC1pbnN0YXdlYjogJSA6IHVuaW1wbGVtZW50ZWQuc2gKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCAkQCsgJiYgXAorCXNlZCAtZSAnMXN8IyEuKi9zaHwjISQoU0hFTExfUEFUSF9TUSl8JyBcCisJICAgIC1lICdzfEBAUkVBU09OQEB8Tk9fUEVSTD0kKE5PX1BFUkwpfGcnIFwKKwkgICAgdW5pbXBsZW1lbnRlZC5zaCA+JEArICYmIFwKKwljaG1vZCAreCAkQCsgJiYgXAorCW12ICRAKyAkQAorZW5kaWYgIyBOT19QRVJMCiAKIGNvbmZpZ3VyZTogY29uZmlndXJlLmFjCiAJJChRVUlFVF9HRU4pJChSTSkgJEAgJDwrICYmIFwKQEAgLTEyNTEsNyArMTQ1NywxMiBAQAogCSQoUVVJRVRfQ0MpJChDQykgLW8gJCoubyAtYyAkKEFMTF9DRkxBR1MpICQ8CiAKIGV4ZWNfY21kLm86IGV4ZWNfY21kLmMgR0lULUNGTEFHUwotCSQoUVVJRVRfQ0MpJChDQykgLW8gJCoubyAtYyAkKEFMTF9DRkxBR1MpICctREdJVF9FWEVDX1BBVEg9IiQoZ2l0ZXhlY2Rpcl9TUSkiJyAkPAorCSQoUVVJRVRfQ0MpJChDQykgLW8gJCoubyAtYyAkKEFMTF9DRkxBR1MpIFwKKwkJJy1ER0lUX0VYRUNfUEFUSD0iJChnaXRleGVjZGlyX1NRKSInIFwKKwkJJy1EQklORElSPSIkKGJpbmRpcl9yZWxhdGl2ZV9TUSkiJyBcCisJCSctRFBSRUZJWD0iJChwcmVmaXhfU1EpIicgXAorCQkkPAorCiBidWlsdGluLWluaXQtZGIubzogYnVpbHRpbi1pbml0LWRiLmMgR0lULUNGTEFHUwogCSQoUVVJRVRfQ0MpJChDQykgLW8gJCoubyAtYyAkKEFMTF9DRkxBR1MpIC1EREVGQVVMVF9HSVRfVEVNUExBVEVfRElSPSciJCh0ZW1wbGF0ZV9kaXJfU1EpIicgJDwKIApAQCAtMTI4MCwxNCArMTQ5MSwxNCBAQAogCQkkKExJQlMpICQoQ1VSTF9MSUJDVVJMKSAkKEVYUEFUX0xJQkVYUEFUKQogCiAkKExJQl9PQkpTKSAkKEJVSUxUSU5fT0JKUyk6ICQoTElCX0gpCi0kKHBhdHN1YnN0IGdpdC0lJFgsJS5vLCQoUFJPR1JBTVMpKTogJChMSUJfSCkgJCh3aWxkY2FyZCAqLyouaCkKKyQocGF0c3Vic3QgZ2l0LSUkWCwlLm8sJChQUk9HUkFNUykpIGdpdC5vOiAkKExJQl9IKSAkKHdpbGRjYXJkICovKi5oKQogYnVpbHRpbi1yZXZlcnQubyB3dC1zdGF0dXMubzogd3Qtc3RhdHVzLmgKIAogJChMSUJfRklMRSk6ICQoTElCX09CSlMpCiAJJChRVUlFVF9BUikkKFJNKSAkQCAmJiAkKEFSKSByY3MgJEAgJChMSUJfT0JKUykKIAogWERJRkZfT0JKUz14ZGlmZi94ZGlmZmkubyB4ZGlmZi94cHJlcGFyZS5vIHhkaWZmL3h1dGlscy5vIHhkaWZmL3hlbWl0Lm8gXAotCXhkaWZmL3htZXJnZS5vCisJeGRpZmYveG1lcmdlLm8geGRpZmYveHBhdGllbmNlLm8KICQoWERJRkZfT0JKUyk6IHhkaWZmL3hpbmNsdWRlLmggeGRpZmYveG1hY3Jvcy5oIHhkaWZmL3hkaWZmLmggeGRpZmYveHR5cGVzLmggXAogCXhkaWZmL3h1dGlscy5oIHhkaWZmL3hwcmVwYXJlLmggeGRpZmYveGRpZmZpLmggeGRpZmYveGVtaXQuaAogCkBAIC0xMzA3LDYgKzE1MTgsOSBAQAogaW5mbzoKIAkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gaW5mbwogCitwZGY6CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIHBkZgorCiBUQUdTOgogCSQoUk0pIFRBR1MKIAkkKEZJTkQpIC4gLW5hbWUgJyouW2hjU10nIC1wcmludCB8IHhhcmdzIGV0YWdzIC1hCkBAIC0xMzM2LDYgKzE1NTAsOCBAQAogR0lULUJVSUxELU9QVElPTlM6IC5GT1JDRS1HSVQtQlVJTEQtT1BUSU9OUwogCUBlY2hvIFNIRUxMX1BBVEg9XCcnJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIX1NRKSknXCcgPiRACiAJQGVjaG8gVEFSPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoVEFSKSkpJ1wnID4+JEAKKwlAZWNobyBOT19DVVJMPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoTk9fQ1VSTCkpKSdcJyA+PiRACisJQGVjaG8gTk9fUEVSTD1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKE5PX1BFUkwpKSknXCcgPj4kQAogCiAjIyMgRGV0ZWN0IFRjay9UayBpbnRlcnByZXRlciBwYXRoIGNoYW5nZXMKIGlmbmRlZiBOT19UQ0xUSwpAQCAtMTM1Myw3ICsxNTY5LDE3IEBACiAKICMjIyBUZXN0aW5nIHJ1bGVzCiAKLVRFU1RfUFJPR1JBTVMgPSB0ZXN0LWNobXRpbWUkWCB0ZXN0LWR1bXAtY2FjaGUtdHJlZSRYIHRlc3QtZ2VucmFuZG9tJFggdGVzdC1kYXRlJFggdGVzdC1kZWx0YSRYIHRlc3Qtc2hhMSRYIHRlc3QtbWF0Y2gtdHJlZXMkWCB0ZXN0LXBhcnNlLW9wdGlvbnMkWCB0ZXN0LXBhdGgtdXRpbHMkWAorVEVTVF9QUk9HUkFNUyArPSB0ZXN0LWNobXRpbWUkWAorVEVTVF9QUk9HUkFNUyArPSB0ZXN0LWN0eXBlJFgKK1RFU1RfUFJPR1JBTVMgKz0gdGVzdC1kYXRlJFgKK1RFU1RfUFJPR1JBTVMgKz0gdGVzdC1kZWx0YSRYCitURVNUX1BST0dSQU1TICs9IHRlc3QtZHVtcC1jYWNoZS10cmVlJFgKK1RFU1RfUFJPR1JBTVMgKz0gdGVzdC1nZW5yYW5kb20kWAorVEVTVF9QUk9HUkFNUyArPSB0ZXN0LW1hdGNoLXRyZWVzJFgKK1RFU1RfUFJPR1JBTVMgKz0gdGVzdC1wYXJzZS1vcHRpb25zJFgKK1RFU1RfUFJPR1JBTVMgKz0gdGVzdC1wYXRoLXV0aWxzJFgKK1RFU1RfUFJPR1JBTVMgKz0gdGVzdC1zaGExJFgKK1RFU1RfUFJPR1JBTVMgKz0gdGVzdC1zaWdjaGFpbiRYCiAKIGFsbDo6ICQoVEVTVF9QUk9HUkFNUykKIApAQCAtMTM2NiwxMiArMTU5MiwxNiBAQAogdGVzdDogYWxsCiAJJChNQUtFKSAtQyB0LyBhbGwKIAordGVzdC1jdHlwZSRYOiBjdHlwZS5vCisKIHRlc3QtZGF0ZSRYOiBkYXRlLm8gY3R5cGUubwogCiB0ZXN0LWRlbHRhJFg6IGRpZmYtZGVsdGEubyBwYXRjaC1kZWx0YS5vCiAKIHRlc3QtcGFyc2Utb3B0aW9ucyRYOiBwYXJzZS1vcHRpb25zLm8KIAordGVzdC1wYXJzZS1vcHRpb25zLm86IHBhcnNlLW9wdGlvbnMuaAorCiAuUFJFQ0lPVVM6ICQocGF0c3Vic3QgdGVzdC0lJFgsdGVzdC0lLm8sJChURVNUX1BST0dSQU1TKSkKIAogdGVzdC0lJFg6IHRlc3QtJS5vICQoR0lUTElCUykKQEAgLTEzOTcsMTcgKzE2MjcsMTcgQEAKIAogIyMjIEluc3RhbGxhdGlvbiBydWxlcwogCi1pZmVxICgkKGZpcnN0d29yZCAkKHN1YnN0IC8sICwkKHRlbXBsYXRlX2RpcikpKSwuLikKLXRlbXBsYXRlX2luc3RkaXIgPSAkKGJpbmRpcikvJCh0ZW1wbGF0ZV9kaXIpCi1lbHNlCitpZm5lcSAoJChmaWx0ZXIgLyUsJChmaXJzdHdvcmQgJCh0ZW1wbGF0ZV9kaXIpKSksKQogdGVtcGxhdGVfaW5zdGRpciA9ICQodGVtcGxhdGVfZGlyKQorZWxzZQordGVtcGxhdGVfaW5zdGRpciA9ICQocHJlZml4KS8kKHRlbXBsYXRlX2RpcikKIGVuZGlmCiBleHBvcnQgdGVtcGxhdGVfaW5zdGRpcgogCi1pZmVxICgkKGZpcnN0d29yZCAkKHN1YnN0IC8sICwkKGdpdGV4ZWNkaXIpKSksLi4pCi1naXRleGVjX2luc3RkaXIgPSAkKGJpbmRpcikvJChnaXRleGVjZGlyKQotZWxzZQoraWZuZXEgKCQoZmlsdGVyIC8lLCQoZmlyc3R3b3JkICQoZ2l0ZXhlY2RpcikpKSwpCiBnaXRleGVjX2luc3RkaXIgPSAkKGdpdGV4ZWNkaXIpCitlbHNlCitnaXRleGVjX2luc3RkaXIgPSAkKHByZWZpeCkvJChnaXRleGVjZGlyKQogZW5kaWYKIGdpdGV4ZWNfaW5zdGRpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoZ2l0ZXhlY19pbnN0ZGlyKSkKIGV4cG9ydCBnaXRleGVjX2luc3RkaXIKQEAgLTE0MTgsMjMgKzE2NDgsMjkgQEAKIAkkKElOU1RBTEwpICQoQUxMX1BST0dSQU1TKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKIAkkKElOU1RBTEwpIGdpdCRYIGdpdC11cGxvYWQtcGFjayRYIGdpdC1yZWNlaXZlLXBhY2skWCBnaXQtdXBsb2FkLWFyY2hpdmUkWCBnaXQtc2hlbGwkWCBnaXQtY3Zzc2VydmVyICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJwogCSQoTUFLRSkgLUMgdGVtcGxhdGVzIERFU1RESVI9JyQoREVTVERJUl9TUSknIGluc3RhbGwKK2lmbmRlZiBOT19QRVJMCiAJJChNQUtFKSAtQyBwZXJsIHByZWZpeD0nJChwcmVmaXhfU1EpJyBERVNURElSPSckKERFU1RESVJfU1EpJyBpbnN0YWxsCitlbmRpZgogaWZuZGVmIE5PX1RDTFRLCiAJJChNQUtFKSAtQyBnaXRrLWdpdCBpbnN0YWxsCiAJJChNQUtFKSAtQyBnaXQtZ3VpIGdpdGV4ZWNkaXI9JyQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScgaW5zdGFsbAogZW5kaWYKIGlmbmVxICgsJFgpCi0JJChmb3JlYWNoIHAsJChwYXRzdWJzdCAlJFgsJSwkKGZpbHRlciAlJFgsJChBTExfUFJPR1JBTVMpICQoQlVJTFRfSU5TKSBnaXQkWCkpLCAkKFJNKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKS8kcCc7KQorCSQoZm9yZWFjaCBwLCQocGF0c3Vic3QgJSRYLCUsJChmaWx0ZXIgJSRYLCQoQUxMX1BST0dSQU1TKSAkKEJVSUxUX0lOUykgZ2l0JFgpKSwgdGVzdCAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKS8kcCcgLWVmICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpLyRwJFgnIHx8ICQoUk0pICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpLyRwJzspCiBlbmRpZgogCWJpbmRpcj0kJChjZCAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScgJiYgcHdkKSAmJiBcCiAJZXhlY2Rpcj0kJChjZCAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScgJiYgcHdkKSAmJiBcCi0JeyAkKFJNKSAiJCRleGVjZGlyL2dpdC1hZGQkWCIgJiYgXAotCQlsbiBnaXQtYWRkJFggIiQkZXhlY2Rpci9naXQtYWRkJFgiIDI+L2Rldi9udWxsIHx8IFwKLQkJY3AgZ2l0LWFkZCRYICIkJGV4ZWNkaXIvZ2l0LWFkZCRYIjsgfSAmJiBcCi0JeyAkKGZvcmVhY2ggcCwkKGZpbHRlci1vdXQgZ2l0LWFkZCRYLCQoQlVJTFRfSU5TKSksICQoUk0pICIkJGV4ZWNkaXIvJHAiICYmIFwKLQkJbG4gIiQkZXhlY2Rpci9naXQtYWRkJFgiICIkJGV4ZWNkaXIvJHAiIDI+L2Rldi9udWxsIHx8IFwKLQkJbG4gLXMgImdpdC1hZGQkWCIgIiQkZXhlY2Rpci8kcCIgMj4vZGV2L251bGwgfHwgXAotCQljcCAiJCRleGVjZGlyL2dpdC1hZGQkWCIgIiQkZXhlY2Rpci8kcCIgfHwgZXhpdDspIH0gJiYgXAorCXsgdGVzdCAiJCRiaW5kaXIvIiA9ICIkJGV4ZWNkaXIvIiB8fCBcCisJCXsgJChSTSkgIiQkZXhlY2Rpci9naXQkWCIgJiYgXAorCQl0ZXN0IC16ICIkKE5PX0NST1NTX0RJUkVDVE9SWV9IQVJETElOS1MpIiAmJiBcCisJCWxuICIkJGJpbmRpci9naXQkWCIgIiQkZXhlY2Rpci9naXQkWCIgMj4vZGV2L251bGwgfHwgXAorCQljcCAiJCRiaW5kaXIvZ2l0JFgiICIkJGV4ZWNkaXIvZ2l0JFgiOyB9IDsgfSAmJiBcCisJeyBmb3IgcCBpbiAkKEJVSUxUX0lOUyk7IGRvIFwKKwkJJChSTSkgIiQkZXhlY2Rpci8kJHAiICYmIFwKKwkJbG4gIiQkZXhlY2Rpci9naXQkWCIgIiQkZXhlY2Rpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJbG4gLXMgImdpdCRYIiAiJCRleGVjZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAorCQljcCAiJCRleGVjZGlyL2dpdCRYIiAiJCRleGVjZGlyLyQkcCIgfHwgZXhpdDsgXAorCSAgZG9uZTsgfSAmJiBcCiAJLi9jaGVja19iaW5kaXIgInokJGJpbmRpciIgInokJGV4ZWNkaXIiICIkJGJpbmRpci9naXQtYWRkJFgiCiAKIGluc3RhbGwtZG9jOgpAQCAtMTQ0OSw2ICsxNjg1LDkgQEAKIGluc3RhbGwtaW5mbzoKIAkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gaW5zdGFsbC1pbmZvCiAKK2luc3RhbGwtcGRmOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBpbnN0YWxsLXBkZgorCiBxdWljay1pbnN0YWxsLWRvYzoKIAkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gcXVpY2staW5zdGFsbAogCkBAIC0xNTExLDcgKzE3NTAsNyBAQAogCSQoUk0pIGNvbmZpZ3VyZQogCiBjbGVhbjoKLQkkKFJNKSAqLm8gbW96aWxsYS1zaGExLyoubyBhcm0vKi5vIHBwYy8qLm8gY29tcGF0LyoubyB4ZGlmZi8qLm8gXAorCSQoUk0pICoubyBtb3ppbGxhLXNoYTEvKi5vIGFybS8qLm8gcHBjLyoubyBjb21wYXQvKi5vIGNvbXBhdC8qLyoubyB4ZGlmZi8qLm8gXAogCQkkKExJQl9GSUxFKSAkKFhESUZGX0xJQikKIAkkKFJNKSAkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpIGdpdCRYCiAJJChSTSkgJChURVNUX1BST0dSQU1TKQpAQCAtMTUyMSw5ICsxNzYwLDExIEBACiAJJChSTSkgLXIgJChHSVRfVEFSTkFNRSkgLmRvYy10bXAtZGlyCiAJJChSTSkgJChHSVRfVEFSTkFNRSkudGFyLmd6IGdpdC1jb3JlXyQoR0lUX1ZFUlNJT04pLSoudGFyLmd6CiAJJChSTSkgJChodG1sZG9jcykudGFyLmd6ICQobWFucGFnZXMpLnRhci5negotCSQoUk0pIGdpdHdlYi9naXR3ZWIuY2dpCiAJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uLyBjbGVhbgoraWZuZGVmIE5PX1BFUkwKKwkkKFJNKSBnaXR3ZWIvZ2l0d2ViLmNnaQogCSQoTUFLRSkgLUMgcGVybCBjbGVhbgorZW5kaWYKIAkkKE1BS0UpIC1DIHRlbXBsYXRlcy8gY2xlYW4KIAkkKE1BS0UpIC1DIHQvIGNsZWFuCiBpZm5kZWYgTk9fVENMVEsKQEAgLTE1OTYsMyArMTgzNywyNyBAQAogY2hlY2stYnVpbHRpbnM6OgogCS4vY2hlY2stYnVpbHRpbnMuc2gKIAorIyMjIFRlc3Qgc3VpdGUgY292ZXJhZ2UgdGVzdGluZworIworLlBIT05ZOiBjb3ZlcmFnZSBjb3ZlcmFnZS1jbGVhbiBjb3ZlcmFnZS1idWlsZCBjb3ZlcmFnZS1yZXBvcnQKKworY292ZXJhZ2U6CisJJChNQUtFKSBjb3ZlcmFnZS1idWlsZAorCSQoTUFLRSkgY292ZXJhZ2UtcmVwb3J0CisKK2NvdmVyYWdlLWNsZWFuOgorCXJtIC1mICouZ2NkYSAqLmdjbm8KKworQ09WRVJBR0VfQ0ZMQUdTID0gJChDRkxBR1MpIC1PMCAtZnRlc3QtY292ZXJhZ2UgLWZwcm9maWxlLWFyY3MKK0NPVkVSQUdFX0xERkxBR1MgPSAkKENGTEFHUykgIC1PMCAtbGdjb3YKKworY292ZXJhZ2UtYnVpbGQ6IGNvdmVyYWdlLWNsZWFuCisJJChNQUtFKSBDRkxBR1M9IiQoQ09WRVJBR0VfQ0ZMQUdTKSIgTERGTEFHUz0iJChDT1ZFUkFHRV9MREZMQUdTKSIgYWxsCisJJChNQUtFKSBDRkxBR1M9IiQoQ09WRVJBR0VfQ0ZMQUdTKSIgTERGTEFHUz0iJChDT1ZFUkFHRV9MREZMQUdTKSIgXAorCQktajEgdGVzdAorCitjb3ZlcmFnZS1yZXBvcnQ6CisJZ2NvdiAtYiAqLmMKKwlncmVwICdeZnVuY3Rpb24uKmNhbGxlZCAwICcgKi5jLmdjb3YgXAorCQl8IHNlZCAtZSAncy9cKFteOl0qXClcLmdjb3Y6ICpmdW5jdGlvbiBcKFteIF0qXCkgY2FsbGVkLiovXDE6IFwyLycgXAorCQl8IHRlZSBjb3ZlcmFnZS11bnRlc3RlZC1mdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCA1ZmE0MWI3Li5jOTMyYWIzIDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0yNCwxMCArMjQsMTggQEAKIGhhY2tlcnMgYXJvdW5kIHRoZSBuZXQuIEl0IGlzIGN1cnJlbnRseSBtYWludGFpbmVkIGJ5IEp1bmlvIEMgSGFtYW5vLgogCiBQbGVhc2UgcmVhZCB0aGUgZmlsZSBJTlNUQUxMIGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgorCiBTZWUgRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC50eHQgdG8gZ2V0IHN0YXJ0ZWQsIHRoZW4gc2VlCi1Eb2N1bWVudGF0aW9uL2V2ZXJ5ZGF5LnR4dCBmb3IgYSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMsCi1hbmQgIm1hbiBnaXQtY29tbWFuZG5hbWUiIGZvciBkb2N1bWVudGF0aW9uIG9mIGVhY2ggY29tbWFuZC4KLUNWUyB1c2VycyBtYXkgYWxzbyB3YW50IHRvIHJlYWQgRG9jdW1lbnRhdGlvbi9jdnMtbWlncmF0aW9uLnR4dC4KK0RvY3VtZW50YXRpb24vZXZlcnlkYXkudHh0IGZvciBhIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcywgYW5kCitEb2N1bWVudGF0aW9uL2dpdC1jb21tYW5kbmFtZS50eHQgZm9yIGRvY3VtZW50YXRpb24gb2YgZWFjaCBjb21tYW5kLgorSWYgZ2l0IGhhcyBiZWVuIGNvcnJlY3RseSBpbnN0YWxsZWQsIHRoZW4gdGhlIHR1dG9yaWFsIGNhbiBhbHNvIGJlCityZWFkIHdpdGggIm1hbiBnaXR0dXRvcmlhbCIgb3IgImdpdCBoZWxwIHR1dG9yaWFsIiwgYW5kIHRoZQorZG9jdW1lbnRhdGlvbiBvZiBlYWNoIGNvbW1hbmQgd2l0aCAibWFuIGdpdC1jb21tYW5kbmFtZSIgb3IgImdpdCBoZWxwCitjb21tYW5kbmFtZSIuCisKK0NWUyB1c2VycyBtYXkgYWxzbyB3YW50IHRvIHJlYWQgRG9jdW1lbnRhdGlvbi9naXRjdnMtbWlncmF0aW9uLnR4dAorKCJtYW4gZ2l0Y3ZzLW1pZ3JhdGlvbiIgb3IgImdpdCBoZWxwIGN2cy1taWdyYXRpb24iIGlmIGdpdCBpcworaW5zdGFsbGVkKS4KIAogTWFueSBHaXQgb25saW5lIHJlc291cmNlcyBhcmUgYWNjZXNzaWJsZSBmcm9tIGh0dHA6Ly9naXQub3IuY3ovCiBpbmNsdWRpbmcgZnVsbCBkb2N1bWVudGF0aW9uIGFuZCBHaXQgcmVsYXRlZCB0b29scy4KZGlmZiAtLWdpdCBhL1JlbE5vdGVzIGIvUmVsTm90ZXMKaW5kZXggNTY5MzZhZC4uZjhlNDlhNSAxMjAwMDAKLS0tIGEvUmVsTm90ZXMKKysrIGIvUmVsTm90ZXMKQEAgLTEgKzEgQEAKLURvY3VtZW50YXRpb24vUmVsTm90ZXMtMS42LjEuNC50eHQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitEb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNi40LnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Fic3BhdGguYyBiL2Fic3BhdGguYwppbmRleCA2NDlmMzRmLi40YmVlMGJhIDEwMDY0NAotLS0gYS9hYnNwYXRoLmMKKysrIGIvYWJzcGF0aC5jCkBAIC00MSwxMyArNDEsMTMgQEAKIAogCQlpZiAoKmJ1ZikgewogCQkJaWYgKCEqY3dkICYmICFnZXRjd2QoY3dkLCBzaXplb2YoY3dkKSkpCi0JCQkJZGllICgiQ291bGQgbm90IGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CisJCQkJZGllX2Vycm5vICgiQ291bGQgbm90IGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CiAKIAkJCWlmIChjaGRpcihidWYpKQotCQkJCWRpZSAoIkNvdWxkIG5vdCBzd2l0Y2ggdG8gJyVzJyIsIGJ1Zik7CisJCQkJZGllX2Vycm5vICgiQ291bGQgbm90IHN3aXRjaCB0byAnJXMnIiwgYnVmKTsKIAkJfQogCQlpZiAoIWdldGN3ZChidWYsIFBBVEhfTUFYKSkKLQkJCWRpZSAoIkNvdWxkIG5vdCBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOworCQkJZGllX2Vycm5vICgiQ291bGQgbm90IGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CiAKIAkJaWYgKGxhc3RfZWxlbSkgewogCQkJaW50IGxlbiA9IHN0cmxlbihidWYpOwpAQCAtNjMsNyArNjMsNyBAQAogCQlpZiAoIWxzdGF0KGJ1ZiwgJnN0KSAmJiBTX0lTTE5LKHN0LnN0X21vZGUpKSB7CiAJCQlsZW4gPSByZWFkbGluayhidWYsIG5leHRfYnVmLCBQQVRIX01BWCk7CiAJCQlpZiAobGVuIDwgMCkKLQkJCQlkaWUgKCJJbnZhbGlkIHN5bWxpbms6ICVzIiwgYnVmKTsKKwkJCQlkaWVfZXJybm8gKCJJbnZhbGlkIHN5bWxpbmsgJyVzJyIsIGJ1Zik7CiAJCQlpZiAoUEFUSF9NQVggPD0gbGVuKQogCQkJCWRpZSgic3ltYm9saWMgbGluayB0b28gbG9uZzogJXMiLCBidWYpOwogCQkJbmV4dF9idWZbbGVuXSA9ICdcMCc7CkBAIC03NSw3ICs3NSw3IEBACiAJfQogCiAJaWYgKCpjd2QgJiYgY2hkaXIoY3dkKSkKLQkJZGllICgiQ291bGQgbm90IGNoYW5nZSBiYWNrIHRvICclcyciLCBjd2QpOworCQlkaWVfZXJybm8gKCJDb3VsZCBub3QgY2hhbmdlIGJhY2sgdG8gJyVzJyIsIGN3ZCk7CiAKIAlyZXR1cm4gYnVmOwogfQpAQCAtMTA5LDcgKzEwOSw3IEBACiAJfSBlbHNlIHsKIAkJY29uc3QgY2hhciAqY3dkID0gZ2V0X3B3ZF9jd2QoKTsKIAkJaWYgKCFjd2QpCi0JCQlkaWUoIkNhbm5vdCBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKKwkJCWRpZV9lcnJubygiQ2Fubm90IGRldGVybWluZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOwogCQlpZiAoc25wcmludGYoYnVmLCBQQVRIX01BWCwgIiVzLyVzIiwgY3dkLCBwYXRoKSA+PSBQQVRIX01BWCkKIAkJCWRpZSgiVG9vIGxvbmcgcGF0aDogJS4qcyIsIDYwLCBwYXRoKTsKIAl9CmRpZmYgLS1naXQgYS9hbGlhcy5jIGIvYWxpYXMuYwppbmRleCBjY2IxMTA4Li4zNzJiN2Q4IDEwMDY0NAotLS0gYS9hbGlhcy5jCisrKyBiL2FsaWFzLmMKQEAgLTI3LDcgKzI3LDcgQEAKIAlpbnQgc3JjLCBkc3QsIGNvdW50ID0gMCwgc2l6ZSA9IDE2OwogCWNoYXIgcXVvdGVkID0gMDsKIAotCSphcmd2ID0geG1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSk7CisJKmFyZ3YgPSB4bWFsbG9jKHNpemVvZihjaGFyICopICogc2l6ZSk7CiAKIAkvKiBzcGxpdCBhbGlhc19zdHJpbmcgKi8KIAkoKmFyZ3YpW2NvdW50KytdID0gY21kbGluZTsKQEAgLTM4LDEwICszOCw3IEBACiAJCQl3aGlsZSAoY21kbGluZVsrK3NyY10KIAkJCQkJJiYgaXNzcGFjZShjbWRsaW5lW3NyY10pKQogCQkJCTsgLyogc2tpcCAqLwotCQkJaWYgKGNvdW50ID49IHNpemUpIHsKLQkJCQlzaXplICs9IDE2OwotCQkJCSphcmd2ID0geHJlYWxsb2MoKmFyZ3YsIHNpemVvZihjaGFyKikgKiBzaXplKTsKLQkJCX0KKwkJCUFMTE9DX0dST1coKmFyZ3YsIGNvdW50KzEsIHNpemUpOwogCQkJKCphcmd2KVtjb3VudCsrXSA9IGNtZGxpbmUgKyBkc3Q7CiAJCX0gZWxzZSBpZiAoIXF1b3RlZCAmJiAoYyA9PSAnXCcnIHx8IGMgPT0gJyInKSkgewogCQkJcXVvdGVkID0gYzsKQEAgLTcyLDYgKzY5LDkgQEAKIAkJcmV0dXJuIGVycm9yKCJ1bmNsb3NlZCBxdW90ZSIpOwogCX0KIAorCUFMTE9DX0dST1coKmFyZ3YsIGNvdW50KzEsIHNpemUpOworCSgqYXJndilbY291bnRdID0gTlVMTDsKKwogCXJldHVybiBjb3VudDsKIH0KIApkaWZmIC0tZ2l0IGEvYWxsb2MuYyBiL2FsbG9jLmMKaW5kZXggMjE2YzIzYS4uNmVmNjc1MyAxMDA2NDQKLS0tIGEvYWxsb2MuYworKysgYi9hbGxvYy5jCkBAIC01Nyw3ICs1Nyw3IEBACiAjZGVmaW5lIFNaX0ZNVCAiJXp1IgogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHJlcG9ydChjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBpbnQgY291bnQsIHNpemVfdCBzaXplKQorc3RhdGljIHZvaWQgcmVwb3J0KGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBjb3VudCwgc2l6ZV90IHNpemUpCiB7CiAgICAgZnByaW50ZihzdGRlcnIsICIlMTBzOiAlOHUgKCIgU1pfRk1UICIga0IpXG4iLCBuYW1lLCBjb3VudCwgc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoaXZlLXRhci5jIGIvYXJjaGl2ZS10YXIuYwppbmRleCBiYTg5MGViLi5jZWUwNmNlIDEwMDY0NAotLS0gYS9hcmNoaXZlLXRhci5jCisrKyBiL2FyY2hpdmUtdGFyLmMKQEAgLTE4MCw3ICsxODAsNyBAQAogCiAJc3ByaW50ZihoZWFkZXIubW9kZSwgIiUwN28iLCBtb2RlICYgMDc3NzcpOwogCXNwcmludGYoaGVhZGVyLnNpemUsICIlMDExbG8iLCBTX0lTUkVHKG1vZGUpID8gc2l6ZSA6IDApOwotCXNwcmludGYoaGVhZGVyLm10aW1lLCAiJTAxMWxvIiwgYXJncy0+dGltZSk7CisJc3ByaW50ZihoZWFkZXIubXRpbWUsICIlMDExbG8iLCAodW5zaWduZWQgbG9uZykgYXJncy0+dGltZSk7CiAKIAlzcHJpbnRmKGhlYWRlci51aWQsICIlMDdvIiwgMCk7CiAJc3ByaW50ZihoZWFkZXIuZ2lkLCAiJTA3byIsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaGl2ZS5jIGIvYXJjaGl2ZS5jCmluZGV4IDlhYzQ1NWQuLjBiY2E5Y2EgMTAwNjQ0Ci0tLSBhL2FyY2hpdmUuYworKysgYi9hcmNoaXZlLmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSAiYXR0ci5oIgogI2luY2x1ZGUgImFyY2hpdmUuaCIKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCiAKIHN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgYXJjaGl2ZV91c2FnZVtdID0gewogCSJnaXQgYXJjaGl2ZSBbb3B0aW9uc10gPHRyZWUtaXNoPiBbcGF0aC4uLl0iLApAQCAtMTMyLDcgKzEzMyw3IEBACiAJCWVyciA9IHdyaXRlX2VudHJ5KGFyZ3MsIHNoYTEsIHBhdGguYnVmLCBwYXRoLmxlbiwgbW9kZSwgTlVMTCwgMCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQlyZXR1cm4gUkVBRF9UUkVFX1JFQ1VSU0lWRTsKKwkJcmV0dXJuIChTX0lTRElSKG1vZGUpID8gUkVBRF9UUkVFX1JFQ1VSU0lWRSA6IDApOwogCX0KIAogCWJ1ZmZlciA9IHNoYTFfZmlsZV90b19hcmNoaXZlKHBhdGhfd2l0aG91dF9wcmVmaXgsIHNoYTEsIG1vZGUsCkBAIC0xNTAsNiArMTUxLDggQEAKIAkJd3JpdGVfYXJjaGl2ZV9lbnRyeV9mbl90IHdyaXRlX2VudHJ5KQogewogCXN0cnVjdCBhcmNoaXZlcl9jb250ZXh0IGNvbnRleHQ7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJc3RydWN0IHRyZWVfZGVzYyB0OwogCWludCBlcnI7CiAKIAlpZiAoYXJncy0+YmFzZWxlbiA+IDAgJiYgYXJncy0+YmFzZVthcmdzLT5iYXNlbGVuIC0gMV0gPT0gJy8nKSB7CkBAIC0xNjgsNiArMTcxLDIyIEBACiAJY29udGV4dC5hcmdzID0gYXJnczsKIAljb250ZXh0LndyaXRlX2VudHJ5ID0gd3JpdGVfZW50cnk7CiAKKwkvKgorCSAqIFNldHVwIGluZGV4IGFuZCBpbnN0cnVjdCBhdHRyIHRvIHJlYWQgaW5kZXggb25seQorCSAqLworCWlmICghYXJncy0+d29ya3RyZWVfYXR0cmlidXRlcykgeworCQltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJCW9wdHMuaW5kZXhfb25seSA9IDE7CisJCW9wdHMuaGVhZF9pZHggPSAtMTsKKwkJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCQlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisJCW9wdHMuZm4gPSBvbmV3YXlfbWVyZ2U7CisJCWluaXRfdHJlZV9kZXNjKCZ0LCBhcmdzLT50cmVlLT5idWZmZXIsIGFyZ3MtPnRyZWUtPnNpemUpOworCQlpZiAodW5wYWNrX3RyZWVzKDEsICZ0LCAmb3B0cykpCisJCQlyZXR1cm4gLTE7CisJCWdpdF9hdHRyX3NldF9kaXJlY3Rpb24oR0lUX0FUVFJfSU5ERVgsICZ0aGVfaW5kZXgpOworCX0KKwogCWVyciA9ICByZWFkX3RyZWVfcmVjdXJzaXZlKGFyZ3MtPnRyZWUsIGFyZ3MtPmJhc2UsIGFyZ3MtPmJhc2VsZW4sIDAsCiAJCQlhcmdzLT5wYXRoc3BlYywgd3JpdGVfYXJjaGl2ZV9lbnRyeSwgJmNvbnRleHQpOwogCWlmIChlcnIgPT0gUkVBRF9UUkVFX1JFQ1VSU0lWRSkKQEAgLTI1MywxNSArMjcyLDIxIEBACiAJY29uc3QgY2hhciAqYmFzZSA9IE5VTEw7CiAJY29uc3QgY2hhciAqcmVtb3RlID0gTlVMTDsKIAljb25zdCBjaGFyICpleGVjID0gTlVMTDsKKwljb25zdCBjaGFyICpvdXRwdXQgPSBOVUxMOwogCWludCBjb21wcmVzc2lvbl9sZXZlbCA9IC0xOwogCWludCB2ZXJib3NlID0gMDsKIAlpbnQgaTsKIAlpbnQgbGlzdCA9IDA7CisJaW50IHdvcmt0cmVlX2F0dHJpYnV0ZXMgPSAwOwogCXN0cnVjdCBvcHRpb24gb3B0c1tdID0gewogCQlPUFRfR1JPVVAoIiIpLAogCQlPUFRfU1RSSU5HKDAsICJmb3JtYXQiLCAmZm9ybWF0LCAiZm10IiwgImFyY2hpdmUgZm9ybWF0IiksCiAJCU9QVF9TVFJJTkcoMCwgInByZWZpeCIsICZiYXNlLCAicHJlZml4IiwKIAkJCSJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIiksCisJCU9QVF9TVFJJTkcoMCwgIm91dHB1dCIsICZvdXRwdXQsICJmaWxlIiwKKwkJCSJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiKSwKKwkJT1BUX0JPT0xFQU4oMCwgIndvcmt0cmVlLWF0dHJpYnV0ZXMiLCAmd29ya3RyZWVfYXR0cmlidXRlcywKKwkJCSJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IiksCiAJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSksCiAJCU9QVF9fQ09NUFIoJzAnLCAmY29tcHJlc3Npb25fbGV2ZWwsICJzdG9yZSBvbmx5IiwgMCksCiAJCU9QVF9fQ09NUFIoJzEnLCAmY29tcHJlc3Npb25fbGV2ZWwsICJjb21wcmVzcyBmYXN0ZXIiLCAxKSwKQEAgLTI4NCwxMiArMzA5LDE0IEBACiAJCU9QVF9FTkQoKQogCX07CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRzLCBhcmNoaXZlX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRzLCBhcmNoaXZlX3VzYWdlLCAwKTsKIAogCWlmIChyZW1vdGUpCiAJCWRpZSgiVW5leHBlY3RlZCBvcHRpb24gLS1yZW1vdGUiKTsKIAlpZiAoZXhlYykKIAkJZGllKCJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIpOworCWlmIChvdXRwdXQpCisJCWRpZSgiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiKTsKIAogCWlmICghYmFzZSkKIAkJYmFzZSA9ICIiOwpAQCAtMzE5LDYgKzM0Niw3IEBACiAJYXJncy0+dmVyYm9zZSA9IHZlcmJvc2U7CiAJYXJncy0+YmFzZSA9IGJhc2U7CiAJYXJncy0+YmFzZWxlbiA9IHN0cmxlbihiYXNlKTsKKwlhcmdzLT53b3JrdHJlZV9hdHRyaWJ1dGVzID0gd29ya3RyZWVfYXR0cmlidXRlczsKIAogCXJldHVybiBhcmdjOwogfQpkaWZmIC0tZ2l0IGEvYXJjaGl2ZS5oIGIvYXJjaGl2ZS5oCmluZGV4IDBiMTViMzUuLjAzOGFjMzUgMTAwNjQ0Ci0tLSBhL2FyY2hpdmUuaAorKysgYi9hcmNoaXZlLmgKQEAgLTEwLDYgKzEwLDcgQEAKIAl0aW1lX3QgdGltZTsKIAljb25zdCBjaGFyICoqcGF0aHNwZWM7CiAJdW5zaWduZWQgaW50IHZlcmJvc2UgOiAxOworCXVuc2lnbmVkIGludCB3b3JrdHJlZV9hdHRyaWJ1dGVzIDogMTsKIAlpbnQgY29tcHJlc3Npb25fbGV2ZWw7CiB9OwogCmRpZmYgLS1naXQgYS9hdHRyLmMgYi9hdHRyLmMKaW5kZXggMTdmNmE0ZC4uNTViZGI3YyAxMDA2NDQKLS0tIGEvYXR0ci5jCisrKyBiL2F0dHIuYwpAQCAtMSwzICsxLDQgQEAKKyNkZWZpbmUgTk9fVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJhdHRyLmgiCiAKQEAgLTM0LDggKzM1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGhhc2hfbmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbikKIHsKLQl1bnNpZ25lZCB2YWwgPSAwOwotCXVuc2lnbmVkIGNoYXIgYzsKKwl1bnNpZ25lZCB2YWwgPSAwLCBjOwogCiAJd2hpbGUgKG5hbWVsZW4tLSkgewogCQljID0gKm5hbWUrKzsKQEAgLTIyMyw3ICsyMjMsNyBAQAogCQlpZiAoaXNfbWFjcm8pCiAJCQlyZXMtPnUuYXR0ciA9IGdpdF9hdHRyKG5hbWUsIG5hbWVsZW4pOwogCQllbHNlIHsKLQkJCXJlcy0+dS5wYXR0ZXJuID0gKGNoYXIqKSYocmVzLT5zdGF0ZVtudW1fYXR0cl0pOworCQkJcmVzLT51LnBhdHRlcm4gPSAoY2hhciAqKSYocmVzLT5zdGF0ZVtudW1fYXR0cl0pOwogCQkJbWVtY3B5KHJlcy0+dS5wYXR0ZXJuLCBuYW1lLCBuYW1lbGVuKTsKIAkJCXJlcy0+dS5wYXR0ZXJuW25hbWVsZW5dID0gMDsKIAkJfQpAQCAtMjc0LDcgKzI3NCw3IEBACiAJCQkgICAgc2V0dG8gPT0gQVRUUl9fVU5LTk9XTikKIAkJCQk7CiAJCQllbHNlCi0JCQkJZnJlZSgoY2hhciopIHNldHRvKTsKKwkJCQlmcmVlKChjaGFyICopIHNldHRvKTsKIAkJfQogCQlmcmVlKGEpOwogCX0KQEAgLTMxOCw2ICszMTgsOSBAQAogCXJldHVybiByZXM7CiB9CiAKK3N0YXRpYyBlbnVtIGdpdF9hdHRyX2RpcmVjdGlvbiBkaXJlY3Rpb247CitzdGF0aWMgc3RydWN0IGluZGV4X3N0YXRlICp1c2VfaW5kZXg7CisKIHN0YXRpYyBzdHJ1Y3QgYXR0cl9zdGFjayAqcmVhZF9hdHRyX2Zyb21fZmlsZShjb25zdCBjaGFyICpwYXRoLCBpbnQgbWFjcm9fb2spCiB7CiAJRklMRSAqZnAgPSBmb3BlbihwYXRoLCAiciIpOwpAQCAtMzQwLDkgKzM0MywxMCBAQAogCXVuc2lnbmVkIGxvbmcgc3o7CiAJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCXZvaWQgKmRhdGE7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUgPSB1c2VfaW5kZXggPyB1c2VfaW5kZXggOiAmdGhlX2luZGV4OwogCiAJbGVuID0gc3RybGVuKHBhdGgpOwotCXBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIGxlbik7CisJcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBwYXRoLCBsZW4pOwogCWlmIChwb3MgPCAwKSB7CiAJCS8qCiAJCSAqIFdlIG1pZ2h0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSwgaW4gd2hpY2gKQEAgLTM1MCwxNSArMzU0LDE1IEBACiAJCSAqLwogCQlpbnQgaTsKIAkJZm9yIChpID0gLXBvcyAtIDE7Ci0JCSAgICAgKHBvcyA8IDAgJiYgaSA8IGFjdGl2ZV9uciAmJgotCQkgICAgICAhc3RyY21wKGFjdGl2ZV9jYWNoZVtpXS0+bmFtZSwgcGF0aCkpOworCQkgICAgIChwb3MgPCAwICYmIGkgPCBpc3RhdGUtPmNhY2hlX25yICYmCisJCSAgICAgICFzdHJjbXAoaXN0YXRlLT5jYWNoZVtpXS0+bmFtZSwgcGF0aCkpOwogCQkgICAgIGkrKykKLQkJCWlmIChjZV9zdGFnZShhY3RpdmVfY2FjaGVbaV0pID09IDIpCisJCQlpZiAoY2Vfc3RhZ2UoaXN0YXRlLT5jYWNoZVtpXSkgPT0gMikKIAkJCQlwb3MgPSBpOwogCX0KIAlpZiAocG9zIDwgMCkKIAkJcmV0dXJuIE5VTEw7Ci0JZGF0YSA9IHJlYWRfc2hhMV9maWxlKGFjdGl2ZV9jYWNoZVtwb3NdLT5zaGExLCAmdHlwZSwgJnN6KTsKKwlkYXRhID0gcmVhZF9zaGExX2ZpbGUoaXN0YXRlLT5jYWNoZVtwb3NdLT5zaGExLCAmdHlwZSwgJnN6KTsKIAlpZiAoIWRhdGEgfHwgdHlwZSAhPSBPQkpfQkxPQikgewogCQlmcmVlKGRhdGEpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTM2NiwyNyArMzcwLDE3IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cl9zdGFjayAqcmVhZF9hdHRyKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtYWNyb19vaykKK3N0YXRpYyBzdHJ1Y3QgYXR0cl9zdGFjayAqcmVhZF9hdHRyX2Zyb21faW5kZXgoY29uc3QgY2hhciAqcGF0aCwgaW50IG1hY3JvX29rKQogewogCXN0cnVjdCBhdHRyX3N0YWNrICpyZXM7CiAJY2hhciAqYnVmLCAqc3A7CiAJaW50IGxpbmVubyA9IDA7CiAKLQlyZXMgPSByZWFkX2F0dHJfZnJvbV9maWxlKHBhdGgsIG1hY3JvX29rKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JcmVzID0geGNhbGxvYygxLCBzaXplb2YoKnJlcykpOwotCi0JLyoKLQkgKiBUaGVyZSBpcyBubyBjaGVja2VkIG91dCAuZ2l0YXR0cmlidXRlcyBmaWxlIHRoZXJlLCBidXQKLQkgKiB3ZSBtaWdodCBoYXZlIGl0IGluIHRoZSBpbmRleC4gIFdlIGFsbG93IG9wZXJhdGlvbiBpbiBhCi0JICogc3BhcnNlbHkgY2hlY2tlZCBvdXQgd29yayB0cmVlLCBzbyByZWFkIGZyb20gaXQuCi0JICovCiAJYnVmID0gcmVhZF9pbmRleF9kYXRhKHBhdGgpOwogCWlmICghYnVmKQotCQlyZXR1cm4gcmVzOworCQlyZXR1cm4gTlVMTDsKIAorCXJlcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXMpKTsKIAlmb3IgKHNwID0gYnVmOyAqc3A7ICkgewogCQljaGFyICplcDsKIAkJaW50IG1vcmU7CkBAIC00MDEsNiArMzk1LDMyIEBACiAJcmV0dXJuIHJlczsKIH0KIAorc3RhdGljIHN0cnVjdCBhdHRyX3N0YWNrICpyZWFkX2F0dHIoY29uc3QgY2hhciAqcGF0aCwgaW50IG1hY3JvX29rKQoreworCXN0cnVjdCBhdHRyX3N0YWNrICpyZXM7CisKKwlpZiAoZGlyZWN0aW9uID09IEdJVF9BVFRSX0NIRUNLT1VUKSB7CisJCXJlcyA9IHJlYWRfYXR0cl9mcm9tX2luZGV4KHBhdGgsIG1hY3JvX29rKTsKKwkJaWYgKCFyZXMpCisJCQlyZXMgPSByZWFkX2F0dHJfZnJvbV9maWxlKHBhdGgsIG1hY3JvX29rKTsKKwl9CisJZWxzZSBpZiAoZGlyZWN0aW9uID09IEdJVF9BVFRSX0NIRUNLSU4pIHsKKwkJcmVzID0gcmVhZF9hdHRyX2Zyb21fZmlsZShwYXRoLCBtYWNyb19vayk7CisJCWlmICghcmVzKQorCQkJLyoKKwkJCSAqIFRoZXJlIGlzIG5vIGNoZWNrZWQgb3V0IC5naXRhdHRyaWJ1dGVzIGZpbGUgdGhlcmUsIGJ1dAorCQkJICogd2UgbWlnaHQgaGF2ZSBpdCBpbiB0aGUgaW5kZXguICBXZSBhbGxvdyBvcGVyYXRpb24gaW4gYQorCQkJICogc3BhcnNlbHkgY2hlY2tlZCBvdXQgd29yayB0cmVlLCBzbyByZWFkIGZyb20gaXQuCisJCQkgKi8KKwkJCXJlcyA9IHJlYWRfYXR0cl9mcm9tX2luZGV4KHBhdGgsIG1hY3JvX29rKTsKKwl9CisJZWxzZQorCQlyZXMgPSByZWFkX2F0dHJfZnJvbV9pbmRleChwYXRoLCBtYWNyb19vayk7CisJaWYgKCFyZXMpCisJCXJlcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXMpKTsKKwlyZXR1cm4gcmVzOworfQorCiAjaWYgREVCVUdfQVRUUgogc3RhdGljIHZvaWQgZGVidWdfaW5mbyhjb25zdCBjaGFyICp3aGF0LCBzdHJ1Y3QgYXR0cl9zdGFjayAqZWxlbSkKIHsKQEAgLTQyOCw2ICs0NDgsMTUgQEAKICNkZWZpbmUgZGVidWdfc2V0KGEsYixjLGQpIGRvIHsgOyB9IHdoaWxlICgwKQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIGRyb3BfYXR0cl9zdGFjayh2b2lkKQoreworCXdoaWxlIChhdHRyX3N0YWNrKSB7CisJCXN0cnVjdCBhdHRyX3N0YWNrICplbGVtID0gYXR0cl9zdGFjazsKKwkJYXR0cl9zdGFjayA9IGVsZW0tPnByZXY7CisJCWZyZWVfYXR0cl9lbGVtKGVsZW0pOworCX0KK30KKwogc3RhdGljIHZvaWQgYm9vdHN0cmFwX2F0dHJfc3RhY2sodm9pZCkKIHsKIAlpZiAoIWF0dHJfc3RhY2spIHsKQEAgLTQzOCw3ICs0NjcsNyBAQAogCQllbGVtLT5wcmV2ID0gYXR0cl9zdGFjazsKIAkJYXR0cl9zdGFjayA9IGVsZW07CiAKLQkJaWYgKCFpc19iYXJlX3JlcG9zaXRvcnkoKSkgeworCQlpZiAoIWlzX2JhcmVfcmVwb3NpdG9yeSgpIHx8IGRpcmVjdGlvbiA9PSBHSVRfQVRUUl9JTkRFWCkgewogCQkJZWxlbSA9IHJlYWRfYXR0cihHSVRBVFRSSUJVVEVTX0ZJTEUsIDEpOwogCQkJZWxlbS0+b3JpZ2luID0gc3RyZHVwKCIiKTsKIAkJCWVsZW0tPnByZXYgPSBhdHRyX3N0YWNrOwpAQCAtNTA1LDcgKzUzNCw3IEBACiAJLyoKIAkgKiBSZWFkIGZyb20gcGFyZW50IGRpcmVjdG9yaWVzIGFuZCBwdXNoIHRoZW0gZG93bgogCSAqLwotCWlmICghaXNfYmFyZV9yZXBvc2l0b3J5KCkpIHsKKwlpZiAoIWlzX2JhcmVfcmVwb3NpdG9yeSgpIHx8IGRpcmVjdGlvbiA9PSBHSVRfQVRUUl9JTkRFWCkgewogCQl3aGlsZSAoMSkgewogCQkJY2hhciAqY3A7CiAKQEAgLTUyNiw2ICs1NTUsOCBAQAogCQl9CiAJfQogCisJc3RyYnVmX3JlbGVhc2UoJnBhdGhidWYpOworCiAJLyoKIAkgKiBGaW5hbGx5IHB1c2ggdGhlICJpbmZvIiBvbmUgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suCiAJICovCkBAIC02NDIsMyArNjczLDE2IEBACiAKIAlyZXR1cm4gMDsKIH0KKwordm9pZCBnaXRfYXR0cl9zZXRfZGlyZWN0aW9uKGVudW0gZ2l0X2F0dHJfZGlyZWN0aW9uIG5ldywgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJZW51bSBnaXRfYXR0cl9kaXJlY3Rpb24gb2xkID0gZGlyZWN0aW9uOworCisJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeSgpICYmIG5ldyAhPSBHSVRfQVRUUl9JTkRFWCkKKwkJZGllKCJCVUc6IG5vbi1JTkRFWCBhdHRyIGRpcmVjdGlvbiBpbiBhIGJhcmUgcmVwbyIpOworCisJZGlyZWN0aW9uID0gbmV3OworCWlmIChuZXcgIT0gb2xkKQorCQlkcm9wX2F0dHJfc3RhY2soKTsKKwl1c2VfaW5kZXggPSBpc3RhdGU7Cit9CmRpZmYgLS1naXQgYS9hdHRyLmggYi9hdHRyLmgKaW5kZXggZjFjMjAzOC4uNjliNTc2NyAxMDA2NDQKLS0tIGEvYXR0ci5oCisrKyBiL2F0dHIuaApAQCAtMzEsNCArMzEsMTEgQEAKIAogaW50IGdpdF9jaGVja2F0dHIoY29uc3QgY2hhciAqcGF0aCwgaW50LCBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKik7CiAKK2VudW0gZ2l0X2F0dHJfZGlyZWN0aW9uIHsKKwlHSVRfQVRUUl9DSEVDS0lOLAorCUdJVF9BVFRSX0NIRUNLT1VULAorCUdJVF9BVFRSX0lOREVYLAorfTsKK3ZvaWQgZ2l0X2F0dHJfc2V0X2RpcmVjdGlvbihlbnVtIGdpdF9hdHRyX2RpcmVjdGlvbiwgc3RydWN0IGluZGV4X3N0YXRlICopOworCiAjZW5kaWYgLyogQVRUUl9IICovCmRpZmYgLS1naXQgYS9iYXNlODUuYyBiL2Jhc2U4NS5jCmluZGV4IGI4ODI3MGYuLmI0MTdhMTUgMTAwNjQ0Ci0tLSBhL2Jhc2U4NS5jCisrKyBiL2Jhc2U4NS5jCkBAIC05MSw3ICs5MSw3IEBACiAJCXVuc2lnbmVkIGFjYyA9IDA7CiAJCWludCBjbnQ7CiAJCWZvciAoY250ID0gMjQ7IGNudCA+PSAwOyBjbnQgLT0gOCkgewotCQkJaW50IGNoID0gKmRhdGErKzsKKwkJCXVuc2lnbmVkIGNoID0gKmRhdGErKzsKIAkJCWFjYyB8PSBjaCA8PCBjbnQ7CiAJCQlpZiAoLS1ieXRlcyA9PSAwKQogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYmlzZWN0LmMgYi9iaXNlY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjIwYWNiCi0tLSAvZGV2L251bGwKKysrIGIvYmlzZWN0LmMKQEAgLTAsMCArMSwxMDA2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJiaXNlY3QuaCIKKworc3RydWN0IHNoYTFfYXJyYXkgeworCXVuc2lnbmVkIGNoYXIgKCpzaGExKVsyMF07CisJaW50IHNoYTFfbnI7CisJaW50IHNoYTFfYWxsb2M7CisJaW50IHNvcnRlZDsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hhMV9hcnJheSBnb29kX3JldnM7CitzdGF0aWMgc3RydWN0IHNoYTFfYXJyYXkgc2tpcHBlZF9yZXZzOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY3VycmVudF9iYWRfc2hhMTsKKworc3RydWN0IGFyZ3ZfYXJyYXkgeworCWNvbnN0IGNoYXIgKiphcmd2OworCWludCBhcmd2X25yOworCWludCBhcmd2X2FsbG9jOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3ZfY2hlY2tvdXRbXSA9IHsiY2hlY2tvdXQiLCAiLXEiLCBOVUxMLCAiLS0iLCBOVUxMfTsKK3N0YXRpYyBjb25zdCBjaGFyICphcmd2X3Nob3dfYnJhbmNoW10gPSB7InNob3ctYnJhbmNoIiwgTlVMTCwgTlVMTH07CisKKy8qIGJpdHMgIzAtMTUgaW4gcmV2aXNpb24uaCAqLworCisjZGVmaW5lIENPVU5URUQJCSgxdTw8MTYpCisKKy8qCisgKiBUaGlzIGlzIGEgdHJ1bHkgc3R1cGlkIGFsZ29yaXRobSwgYnV0IGl0J3Mgb25seQorICogdXNlZCBmb3IgYmlzZWN0aW9uLCBhbmQgd2UganVzdCBkb24ndCBjYXJlIGVub3VnaC4KKyAqCisgKiBXZSBjYXJlIGp1c3QgYmFyZWx5IGVub3VnaCB0byBhdm9pZCByZWN1cnNpbmcgZm9yCisgKiBub24tbWVyZ2UgZW50cmllcy4KKyAqLworc3RhdGljIGludCBjb3VudF9kaXN0YW5jZShzdHJ1Y3QgY29tbWl0X2xpc3QgKmVudHJ5KQoreworCWludCBuciA9IDA7CisKKwl3aGlsZSAoZW50cnkpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gZW50cnktPml0ZW07CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiAoVU5JTlRFUkVTVElORyB8IENPVU5URUQpKQorCQkJYnJlYWs7CisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUUpKQorCQkJbnIrKzsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gQ09VTlRFRDsKKwkJcCA9IGNvbW1pdC0+cGFyZW50czsKKwkJZW50cnkgPSBwOworCQlpZiAocCkgeworCQkJcCA9IHAtPm5leHQ7CisJCQl3aGlsZSAocCkgeworCQkJCW5yICs9IGNvdW50X2Rpc3RhbmNlKHApOworCQkJCXAgPSBwLT5uZXh0OworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIG5yOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9kaXN0YW5jZShzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgJj0gfkNPVU5URUQ7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KK30KKworI2RlZmluZSBERUJVR19CSVNFQ1QgMAorCitzdGF0aWMgaW5saW5lIGludCB3ZWlnaHQoc3RydWN0IGNvbW1pdF9saXN0ICplbGVtKQoreworCXJldHVybiAqKChpbnQqKShlbGVtLT5pdGVtLT51dGlsKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3ZWlnaHRfc2V0KHN0cnVjdCBjb21taXRfbGlzdCAqZWxlbSwgaW50IHdlaWdodCkKK3sKKwkqKChpbnQqKShlbGVtLT5pdGVtLT51dGlsKSkgPSB3ZWlnaHQ7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfaW50ZXJlc3RpbmdfcGFyZW50cyhzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCWludCBjb3VudDsKKworCWZvciAoY291bnQgPSAwLCBwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWNvbnRpbnVlOworCQljb3VudCsrOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGhhbGZ3YXkoc3RydWN0IGNvbW1pdF9saXN0ICpwLCBpbnQgbnIpCit7CisJLyoKKwkgKiBEb24ndCBzaG9ydC1jdXQgc29tZXRoaW5nIHdlIGFyZSBub3QgZ29pbmcgdG8gcmV0dXJuIQorCSAqLworCWlmIChwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkKKwkJcmV0dXJuIDA7CisJaWYgKERFQlVHX0JJU0VDVCkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiAyIGFuZCAzIGFyZSBoYWxmd2F5IG9mIDUuCisJICogMyBpcyBoYWxmd2F5IG9mIDYgYnV0IDIgYW5kIDQgYXJlIG5vdC4KKwkgKi8KKwlzd2l0Y2ggKDIgKiB3ZWlnaHQocCkgLSBucikgeworCWNhc2UgLTE6IGNhc2UgMDogY2FzZSAxOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKKyNpZiAhREVCVUdfQklTRUNUCisjZGVmaW5lIHNob3dfbGlzdChhLGIsYyxkKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNlbHNlCitzdGF0aWMgdm9pZCBzaG93X2xpc3QoY29uc3QgY2hhciAqZGVidWcsIGludCBjb3VudGVkLCBpbnQgbnIsCisJCSAgICAgIHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisKKwlmcHJpbnRmKHN0ZGVyciwgIiVzICglZC8lZClcbiIsIGRlYnVnLCBjb3VudGVkLCBucik7CisKKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBwOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwLT5pdGVtOworCQl1bnNpZ25lZCBmbGFncyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzOworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJY2hhciAqYnVmID0gcmVhZF9zaGExX2ZpbGUoY29tbWl0LT5vYmplY3Quc2hhMSwgJnR5cGUsICZzaXplKTsKKwkJY2hhciAqZXAsICpzcDsKKworCQlmcHJpbnRmKHN0ZGVyciwgIiVjJWMlYyAiLAorCQkJKGZsYWdzICYgVFJFRVNBTUUpID8gJyAnIDogJ1QnLAorCQkJKGZsYWdzICYgVU5JTlRFUkVTVElORykgPyAnVScgOiAnICcsCisJCQkoZmxhZ3MgJiBDT1VOVEVEKSA/ICdDJyA6ICcgJyk7CisJCWlmIChjb21taXQtPnV0aWwpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiUzZCIsIHdlaWdodChwKSk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCAiLS0tIik7CisJCWZwcmludGYoc3RkZXJyLCAiICUuKnMiLCA4LCBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJCWZvciAocHAgPSBjb21taXQtPnBhcmVudHM7IHBwOyBwcCA9IHBwLT5uZXh0KQorCQkJZnByaW50ZihzdGRlcnIsICIgJS4qcyIsIDgsCisJCQkJc2hhMV90b19oZXgocHAtPml0ZW0tPm9iamVjdC5zaGExKSk7CisKKwkJc3AgPSBzdHJzdHIoYnVmLCAiXG5cbiIpOworCQlpZiAoc3ApIHsKKwkJCXNwICs9IDI7CisJCQlmb3IgKGVwID0gc3A7ICplcCAmJiAqZXAgIT0gJ1xuJzsgZXArKykKKwkJCQk7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiAlLipzIiwgKGludCkoZXAgLSBzcCksIHNwKTsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJfQorfQorI2VuZGlmIC8qIERFQlVHX0JJU0VDVCAqLworCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpiZXN0X2Jpc2VjdGlvbihzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIGludCBucikKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnAsICpiZXN0OworCWludCBiZXN0X2Rpc3RhbmNlID0gLTE7CisKKwliZXN0ID0gbGlzdDsKKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpbnQgZGlzdGFuY2U7CisJCXVuc2lnbmVkIGZsYWdzID0gcC0+aXRlbS0+b2JqZWN0LmZsYWdzOworCisJCWlmIChmbGFncyAmIFRSRUVTQU1FKQorCQkJY29udGludWU7CisJCWRpc3RhbmNlID0gd2VpZ2h0KHApOworCQlpZiAobnIgLSBkaXN0YW5jZSA8IGRpc3RhbmNlKQorCQkJZGlzdGFuY2UgPSBuciAtIGRpc3RhbmNlOworCQlpZiAoZGlzdGFuY2UgPiBiZXN0X2Rpc3RhbmNlKSB7CisJCQliZXN0ID0gcDsKKwkJCWJlc3RfZGlzdGFuY2UgPSBkaXN0YW5jZTsKKwkJfQorCX0KKworCXJldHVybiBiZXN0OworfQorCitzdHJ1Y3QgY29tbWl0X2Rpc3QgeworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlpbnQgZGlzdGFuY2U7Cit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfY29tbWl0X2Rpc3QoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCBjb21taXRfZGlzdCAqYSwgKmI7CisKKwlhID0gKHN0cnVjdCBjb21taXRfZGlzdCAqKWFfOworCWIgPSAoc3RydWN0IGNvbW1pdF9kaXN0ICopYl87CisJaWYgKGEtPmRpc3RhbmNlICE9IGItPmRpc3RhbmNlKQorCQlyZXR1cm4gYi0+ZGlzdGFuY2UgLSBhLT5kaXN0YW5jZTsgLyogZGVzYyBzb3J0ICovCisJcmV0dXJuIGhhc2hjbXAoYS0+Y29tbWl0LT5vYmplY3Quc2hhMSwgYi0+Y29tbWl0LT5vYmplY3Quc2hhMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmJlc3RfYmlzZWN0aW9uX3NvcnRlZChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIGludCBucikKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJc3RydWN0IGNvbW1pdF9kaXN0ICphcnJheSA9IHhjYWxsb2MobnIsIHNpemVvZigqYXJyYXkpKTsKKwlpbnQgY250LCBpOworCisJZm9yIChwID0gbGlzdCwgY250ID0gMDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaW50IGRpc3RhbmNlOworCQl1bnNpZ25lZCBmbGFncyA9IHAtPml0ZW0tPm9iamVjdC5mbGFnczsKKworCQlpZiAoZmxhZ3MgJiBUUkVFU0FNRSkKKwkJCWNvbnRpbnVlOworCQlkaXN0YW5jZSA9IHdlaWdodChwKTsKKwkJaWYgKG5yIC0gZGlzdGFuY2UgPCBkaXN0YW5jZSkKKwkJCWRpc3RhbmNlID0gbnIgLSBkaXN0YW5jZTsKKwkJYXJyYXlbY250XS5jb21taXQgPSBwLT5pdGVtOworCQlhcnJheVtjbnRdLmRpc3RhbmNlID0gZGlzdGFuY2U7CisJCWNudCsrOworCX0KKwlxc29ydChhcnJheSwgY250LCBzaXplb2YoKmFycmF5KSwgY29tcGFyZV9jb21taXRfZGlzdCk7CisJZm9yIChwID0gbGlzdCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlzdHJ1Y3QgbmFtZV9kZWNvcmF0aW9uICpyID0geG1hbGxvYyhzaXplb2YoKnIpICsgMTAwKTsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gJihhcnJheVtpXS5jb21taXQtPm9iamVjdCk7CisKKwkJc3ByaW50ZihyLT5uYW1lLCAiZGlzdD0lZCIsIGFycmF5W2ldLmRpc3RhbmNlKTsKKwkJci0+bmV4dCA9IGFkZF9kZWNvcmF0aW9uKCZuYW1lX2RlY29yYXRpb24sIG9iaiwgcik7CisJCXAtPml0ZW0gPSBhcnJheVtpXS5jb21taXQ7CisJCXAgPSBwLT5uZXh0OworCX0KKwlpZiAocCkKKwkJcC0+bmV4dCA9IE5VTEw7CisJZnJlZShhcnJheSk7CisJcmV0dXJuIGxpc3Q7Cit9CisKKy8qCisgKiB6ZXJvIG9yIHBvc2l0aXZlIHdlaWdodCBpcyB0aGUgbnVtYmVyIG9mIGludGVyZXN0aW5nIGNvbW1pdHMgaXQgY2FuCisgKiByZWFjaCwgaW5jbHVkaW5nIGl0c2VsZi4gIEVzcGVjaWFsbHksIHdlaWdodCA9IDAgbWVhbnMgaXQgZG9lcyBub3QKKyAqIHJlYWNoIGFueSB0cmVlLWNoYW5naW5nIGNvbW1pdHMgKGUuZy4ganVzdCBhYm92ZSB1bmludGVyZXN0aW5nIG9uZQorICogYnV0IHRyYXZlcnNhbCBpcyB3aXRoIHBhdGhzcGVjKS4KKyAqCisgKiB3ZWlnaHQgPSAtMSBtZWFucyBpdCBoYXMgb25lIHBhcmVudCBhbmQgaXRzIGRpc3RhbmNlIGlzIHlldCB0bworICogYmUgY29tcHV0ZWQuCisgKgorICogd2VpZ2h0ID0gLTIgbWVhbnMgaXQgaGFzIG1vcmUgdGhhbiBvbmUgcGFyZW50IGFuZCBpdHMgZGlzdGFuY2UgaXMKKyAqIHVua25vd24uICBBZnRlciBydW5uaW5nIGNvdW50X2Rpc3RhbmNlKCkgZmlyc3QsIHRoZXkgd2lsbCBnZXQgemVybworICogb3IgcG9zaXRpdmUgZGlzdGFuY2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmRvX2ZpbmRfYmlzZWN0aW9uKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKKwkJCQkJICAgICBpbnQgbnIsIGludCAqd2VpZ2h0cywKKwkJCQkJICAgICBpbnQgZmluZF9hbGwpCit7CisJaW50IG4sIGNvdW50ZWQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCisJY291bnRlZCA9IDA7CisKKwlmb3IgKG4gPSAwLCBwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcC0+aXRlbTsKKwkJdW5zaWduZWQgZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFnczsKKworCQlwLT5pdGVtLT51dGlsID0gJndlaWdodHNbbisrXTsKKwkJc3dpdGNoIChjb3VudF9pbnRlcmVzdGluZ19wYXJlbnRzKGNvbW1pdCkpIHsKKwkJY2FzZSAwOgorCQkJaWYgKCEoZmxhZ3MgJiBUUkVFU0FNRSkpIHsKKwkJCQl3ZWlnaHRfc2V0KHAsIDEpOworCQkJCWNvdW50ZWQrKzsKKwkJCQlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGNvdW50IG9uZSIsCisJCQkJCSAgY291bnRlZCwgbnIsIGxpc3QpOworCQkJfQorCQkJLyoKKwkJCSAqIG90aGVyd2lzZSwgaXQgaXMga25vd24gbm90IHRvIHJlYWNoIGFueQorCQkJICogdHJlZS1jaGFuZ2luZyBjb21taXQgYW5kIGdldHMgd2VpZ2h0IDAuCisJCQkgKi8KKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl3ZWlnaHRfc2V0KHAsIC0xKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJd2VpZ2h0X3NldChwLCAtMik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNob3dfbGlzdCgiYmlzZWN0aW9uIDIgaW5pdGlhbGl6ZSIsIGNvdW50ZWQsIG5yLCBsaXN0KTsKKworCS8qCisJICogSWYgeW91IGhhdmUgb25seSBvbmUgcGFyZW50IGluIHRoZSByZXN1bHRpbmcgc2V0CisJICogdGhlbiB5b3UgY2FuIHJlYWNoIG9uZSBjb21taXQgbW9yZSB0aGFuIHRoYXQgcGFyZW50CisJICogY2FuIHJlYWNoLiAgU28gd2UgZG8gbm90IGhhdmUgdG8gcnVuIHRoZSBleHBlbnNpdmUKKwkgKiBjb3VudF9kaXN0YW5jZSgpIGZvciBzaW5nbGUgc3RyYW5kIG9mIHBlYXJscy4KKwkgKgorCSAqIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgcGFyZW50cywgeW91IGNhbm5vdAorCSAqIGp1c3QgYWRkIHRoZWlyIGRpc3RhbmNlIGFuZCBvbmUgZm9yIHlvdXJzZWxmLCBzaW5jZQorCSAqIHRoZXkgdXN1YWxseSByZWFjaCB0aGUgc2FtZSBhbmNlc3RvciBhbmQgeW91IHdvdWxkCisJICogZW5kIHVwIGNvdW50aW5nIHRoZW0gdHdpY2UgdGhhdCB3YXkuCisJICoKKwkgKiBTbyB3ZSB3aWxsIGZpcnN0IGNvdW50IGRpc3RhbmNlIG9mIG1lcmdlcyB0aGUgdXN1YWwKKwkgKiB3YXksIGFuZCB0aGVuIGZpbGwgdGhlIGJsYW5rcyB1c2luZyBjaGVhcGVyIGFsZ29yaXRobS4KKwkgKi8KKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWNvbnRpbnVlOworCQlpZiAod2VpZ2h0KHApICE9IC0yKQorCQkJY29udGludWU7CisJCXdlaWdodF9zZXQocCwgY291bnRfZGlzdGFuY2UocCkpOworCQljbGVhcl9kaXN0YW5jZShsaXN0KTsKKworCQkvKiBEb2VzIGl0IGhhcHBlbiB0byBiZSBhdCBleGFjdGx5IGhhbGYtd2F5PyAqLworCQlpZiAoIWZpbmRfYWxsICYmIGhhbGZ3YXkocCwgbnIpKQorCQkJcmV0dXJuIHA7CisJCWNvdW50ZWQrKzsKKwl9CisKKwlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGNvdW50X2Rpc3RhbmNlIiwgY291bnRlZCwgbnIsIGxpc3QpOworCisJd2hpbGUgKGNvdW50ZWQgPCBucikgeworCQlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpxOworCQkJdW5zaWduZWQgZmxhZ3MgPSBwLT5pdGVtLT5vYmplY3QuZmxhZ3M7CisKKwkJCWlmICgwIDw9IHdlaWdodChwKSkKKwkJCQljb250aW51ZTsKKwkJCWZvciAocSA9IHAtPml0ZW0tPnBhcmVudHM7IHE7IHEgPSBxLT5uZXh0KSB7CisJCQkJaWYgKHEtPml0ZW0tPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmICgwIDw9IHdlaWdodChxKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIXEpCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiB3ZWlnaHQgZm9yIHAgaXMgdW5rbm93biBidXQgcSBpcyBrbm93bi4KKwkJCSAqIGFkZCBvbmUgZm9yIHAgaXRzZWxmIGlmIHAgaXMgdG8gYmUgY291bnRlZCwKKwkJCSAqIG90aGVyd2lzZSBpbmhlcml0IGl0IGZyb20gcSBkaXJlY3RseS4KKwkJCSAqLworCQkJaWYgKCEoZmxhZ3MgJiBUUkVFU0FNRSkpIHsKKwkJCQl3ZWlnaHRfc2V0KHAsIHdlaWdodChxKSsxKTsKKwkJCQljb3VudGVkKys7CisJCQkJc2hvd19saXN0KCJiaXNlY3Rpb24gMiBjb3VudCBvbmUiLAorCQkJCQkgIGNvdW50ZWQsIG5yLCBsaXN0KTsKKwkJCX0KKwkJCWVsc2UKKwkJCQl3ZWlnaHRfc2V0KHAsIHdlaWdodChxKSk7CisKKwkJCS8qIERvZXMgaXQgaGFwcGVuIHRvIGJlIGF0IGV4YWN0bHkgaGFsZi13YXk/ICovCisJCQlpZiAoIWZpbmRfYWxsICYmIGhhbGZ3YXkocCwgbnIpKQorCQkJCXJldHVybiBwOworCQl9CisJfQorCisJc2hvd19saXN0KCJiaXNlY3Rpb24gMiBjb3VudGVkIGFsbCIsIGNvdW50ZWQsIG5yLCBsaXN0KTsKKworCWlmICghZmluZF9hbGwpCisJCXJldHVybiBiZXN0X2Jpc2VjdGlvbihsaXN0LCBucik7CisJZWxzZQorCQlyZXR1cm4gYmVzdF9iaXNlY3Rpb25fc29ydGVkKGxpc3QsIG5yKTsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpmaW5kX2Jpc2VjdGlvbihzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCisJCQkJCSAgaW50ICpyZWFjaGVzLCBpbnQgKmFsbCwKKwkJCQkJICBpbnQgZmluZF9hbGwpCit7CisJaW50IG5yLCBvbl9saXN0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcCwgKmJlc3QsICpuZXh0LCAqbGFzdDsKKwlpbnQgKndlaWdodHM7CisKKwlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGVudHJ5IiwgMCwgMCwgbGlzdCk7CisKKwkvKgorCSAqIENvdW50IHRoZSBudW1iZXIgb2YgdG90YWwgYW5kIHRyZWUtY2hhbmdpbmcgaXRlbXMgb24gdGhlCisJICogbGlzdCwgd2hpbGUgcmV2ZXJzaW5nIHRoZSBsaXN0LgorCSAqLworCWZvciAobnIgPSBvbl9saXN0ID0gMCwgbGFzdCA9IE5VTEwsIHAgPSBsaXN0OworCSAgICAgcDsKKwkgICAgIHAgPSBuZXh0KSB7CisJCXVuc2lnbmVkIGZsYWdzID0gcC0+aXRlbS0+b2JqZWN0LmZsYWdzOworCisJCW5leHQgPSBwLT5uZXh0OworCQlpZiAoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCXAtPm5leHQgPSBsYXN0OworCQlsYXN0ID0gcDsKKwkJaWYgKCEoZmxhZ3MgJiBUUkVFU0FNRSkpCisJCQlucisrOworCQlvbl9saXN0Kys7CisJfQorCWxpc3QgPSBsYXN0OworCXNob3dfbGlzdCgiYmlzZWN0aW9uIDIgc29ydGVkIiwgMCwgbnIsIGxpc3QpOworCisJKmFsbCA9IG5yOworCXdlaWdodHMgPSB4Y2FsbG9jKG9uX2xpc3QsIHNpemVvZigqd2VpZ2h0cykpOworCisJLyogRG8gdGhlIHJlYWwgd29yayBvZiBmaW5kaW5nIGJpc2VjdGlvbiBjb21taXQuICovCisJYmVzdCA9IGRvX2ZpbmRfYmlzZWN0aW9uKGxpc3QsIG5yLCB3ZWlnaHRzLCBmaW5kX2FsbCk7CisJaWYgKGJlc3QpIHsKKwkJaWYgKCFmaW5kX2FsbCkKKwkJCWJlc3QtPm5leHQgPSBOVUxMOworCQkqcmVhY2hlcyA9IHdlaWdodChiZXN0KTsKKwl9CisJZnJlZSh3ZWlnaHRzKTsKKwlyZXR1cm4gYmVzdDsKK30KKworc3RhdGljIHZvaWQgYXJndl9hcnJheV9wdXNoKHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSwgY29uc3QgY2hhciAqc3RyaW5nKQoreworCUFMTE9DX0dST1coYXJyYXktPmFyZ3YsIGFycmF5LT5hcmd2X25yICsgMSwgYXJyYXktPmFyZ3ZfYWxsb2MpOworCWFycmF5LT5hcmd2W2FycmF5LT5hcmd2X25yKytdID0gc3RyaW5nOworfQorCitzdGF0aWMgdm9pZCBhcmd2X2FycmF5X3B1c2hfc2hhMShzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXksCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJIGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZidWYsIGZvcm1hdCwgc2hhMV90b19oZXgoc2hhMSkpOworCWFyZ3ZfYXJyYXlfcHVzaChhcnJheSwgc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTFfYXJyYXlfcHVzaChzdHJ1Y3Qgc2hhMV9hcnJheSAqYXJyYXksCisJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlBTExPQ19HUk9XKGFycmF5LT5zaGExLCBhcnJheS0+c2hhMV9uciArIDEsIGFycmF5LT5zaGExX2FsbG9jKTsKKwloYXNoY3B5KGFycmF5LT5zaGExW2FycmF5LT5zaGExX25yKytdLCBzaGExKTsKK30KKworc3RhdGljIGludCByZWdpc3Rlcl9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCWludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlpZiAoIXN0cmNtcChyZWZuYW1lLCAiYmFkIikpIHsKKwkJY3VycmVudF9iYWRfc2hhMSA9IHNoYTE7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKHJlZm5hbWUsICJnb29kLSIpKSB7CisJCXNoYTFfYXJyYXlfcHVzaCgmZ29vZF9yZXZzLCBzaGExKTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAocmVmbmFtZSwgInNraXAtIikpIHsKKwkJc2hhMV9hcnJheV9wdXNoKCZza2lwcGVkX3JldnMsIHNoYTEpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfYmlzZWN0X3JlZnModm9pZCkKK3sKKwlyZXR1cm4gZm9yX2VhY2hfcmVmX2luKCJyZWZzL2Jpc2VjdC8iLCByZWdpc3Rlcl9yZWYsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2Jpc2VjdF9wYXRocyhzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXkpCit7CisJc3RydWN0IHN0cmJ1ZiBzdHIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoKCJCSVNFQ1RfTkFNRVMiKTsKKwlGSUxFICpmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworCisJaWYgKCFmcCkKKwkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiBmaWxlICclcyciLCBmaWxlbmFtZSk7CisKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJnN0ciwgZnAsICdcbicpICE9IEVPRikgeworCQljaGFyICpxdW90ZWQ7CisJCWludCByZXM7CisKKwkJc3RyYnVmX3RyaW0oJnN0cik7CisJCXF1b3RlZCA9IHN0cmJ1Zl9kZXRhY2goJnN0ciwgTlVMTCk7CisJCXJlcyA9IHNxX2RlcXVvdGVfdG9fYXJndihxdW90ZWQsICZhcnJheS0+YXJndiwKKwkJCQkJICZhcnJheS0+YXJndl9uciwgJmFycmF5LT5hcmd2X2FsbG9jKTsKKwkJaWYgKHJlcykKKwkJCWRpZSgiQmFkbHkgcXVvdGVkIGNvbnRlbnQgaW4gZmlsZSAnJXMnOiAlcyIsCisJCQkgICAgZmlsZW5hbWUsIHF1b3RlZCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnN0cik7CisJZmNsb3NlKGZwKTsKK30KKworc3RhdGljIGludCBhcnJheV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwlyZXR1cm4gaGFzaGNtcChhLCBiKTsKK30KKworc3RhdGljIHZvaWQgc29ydF9zaGExX2FycmF5KHN0cnVjdCBzaGExX2FycmF5ICphcnJheSkKK3sKKwlxc29ydChhcnJheS0+c2hhMSwgYXJyYXktPnNoYTFfbnIsIHNpemVvZigqYXJyYXktPnNoYTEpLCBhcnJheV9jbXApOworCisJYXJyYXktPnNvcnRlZCA9IDE7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExX2FjY2VzcyhzaXplX3QgaW5kZXgsIHZvaWQgKnRhYmxlKQoreworCXVuc2lnbmVkIGNoYXIgKCphcnJheSlbMjBdID0gdGFibGU7CisJcmV0dXJuIGFycmF5W2luZGV4XTsKK30KKworc3RhdGljIGludCBsb29rdXBfc2hhMV9hcnJheShzdHJ1Y3Qgc2hhMV9hcnJheSAqYXJyYXksCisJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaWYgKCFhcnJheS0+c29ydGVkKQorCQlzb3J0X3NoYTFfYXJyYXkoYXJyYXkpOworCisJcmV0dXJuIHNoYTFfcG9zKHNoYTEsIGFycmF5LT5zaGExLCBhcnJheS0+c2hhMV9uciwgc2hhMV9hY2Nlc3MpOworfQorCitzdGF0aWMgY2hhciAqam9pbl9zaGExX2FycmF5X2hleChzdHJ1Y3Qgc2hhMV9hcnJheSAqYXJyYXksIGNoYXIgZGVsaW0pCit7CisJc3RydWN0IHN0cmJ1ZiBqb2luZWRfaGV4cyA9IFNUUkJVRl9JTklUOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFycmF5LT5zaGExX25yOyBpKyspIHsKKwkJc3RyYnVmX2FkZHN0cigmam9pbmVkX2hleHMsIHNoYTFfdG9faGV4KGFycmF5LT5zaGExW2ldKSk7CisJCWlmIChpICsgMSA8IGFycmF5LT5zaGExX25yKQorCQkJc3RyYnVmX2FkZGNoKCZqb2luZWRfaGV4cywgZGVsaW0pOworCX0KKworCXJldHVybiBzdHJidWZfZGV0YWNoKCZqb2luZWRfaGV4cywgTlVMTCk7Cit9CisKKy8qCisgKiBJbiB0aGlzIGZ1bmN0aW9uLCBwYXNzaW5nIGEgbm90IE5VTEwgc2tpcHBlZF9maXJzdCBpcyB2ZXJ5IHNwZWNpYWwuCisgKiBJdCBtZWFucyB0aGF0IHdlIHdhbnQgdG8ga25vdyBpZiB0aGUgZmlyc3QgY29tbWl0IGluIHRoZSBsaXN0IGlzCisgKiBza2lwcGVkIGJlY2F1c2Ugd2Ugd2lsbCB3YW50IHRvIHRlc3QgYSBjb21taXQgYXdheSBmcm9tIGl0IGlmIGl0IGlzCisgKiBpbmRlZWQgc2tpcHBlZC4KKyAqIFNvIGlmIHRoZSBmaXJzdCBjb21taXQgaXMgc2tpcHBlZCwgd2UgY2Fubm90IHRha2UgdGhlIHNob3J0Y3V0IHRvCisgKiBqdXN0ICJyZXR1cm4gbGlzdCIgd2hlbiB3ZSBmaW5kIHRoZSBmaXJzdCBub24gc2tpcHBlZCBjb21taXQsIHdlCisgKiBoYXZlIHRvIHJldHVybiBhIGZ1bGx5IGZpbHRlcmVkIGxpc3QuCisgKgorICogV2UgdXNlICgqc2tpcHBlZF9maXJzdCA9PSAtMSkgdG8gbWVhbiAiaXQgaGFzIGJlZW4gZm91bmQgdGhhdCB0aGUKKyAqIGZpcnN0IGNvbW1pdCBpcyBub3Qgc2tpcHBlZCIuIEluIHRoaXMgY2FzZSAqc2tpcHBlZF9maXJzdCBpcyBzZXQgYmFjaworICogdG8gMCBqdXN0IGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucy4KKyAqLworc3RydWN0IGNvbW1pdF9saXN0ICpmaWx0ZXJfc2tpcHBlZChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCisJCQkJICAgc3RydWN0IGNvbW1pdF9saXN0ICoqdHJpZWQsCisJCQkJICAgaW50IHNob3dfYWxsLAorCQkJCSAgIGludCAqY291bnQsCisJCQkJICAgaW50ICpza2lwcGVkX2ZpcnN0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqZmlsdGVyZWQgPSBOVUxMLCAqKmYgPSAmZmlsdGVyZWQ7CisKKwkqdHJpZWQgPSBOVUxMOworCisJaWYgKHNraXBwZWRfZmlyc3QpCisJCSpza2lwcGVkX2ZpcnN0ID0gMDsKKwlpZiAoY291bnQpCisJCSpjb3VudCA9IDA7CisKKwlpZiAoIXNraXBwZWRfcmV2cy5zaGExX25yKQorCQlyZXR1cm4gbGlzdDsKKworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbmV4dCA9IGxpc3QtPm5leHQ7CisJCWxpc3QtPm5leHQgPSBOVUxMOworCQlpZiAoMCA8PSBsb29rdXBfc2hhMV9hcnJheSgmc2tpcHBlZF9yZXZzLAorCQkJCQkgICBsaXN0LT5pdGVtLT5vYmplY3Quc2hhMSkpIHsKKwkJCWlmIChza2lwcGVkX2ZpcnN0ICYmICEqc2tpcHBlZF9maXJzdCkKKwkJCQkqc2tpcHBlZF9maXJzdCA9IDE7CisJCQkvKiBNb3ZlIGN1cnJlbnQgdG8gdHJpZWQgbGlzdCAqLworCQkJKnRyaWVkID0gbGlzdDsKKwkJCXRyaWVkID0gJmxpc3QtPm5leHQ7CisJCX0gZWxzZSB7CisJCQlpZiAoIXNob3dfYWxsKSB7CisJCQkJaWYgKCFza2lwcGVkX2ZpcnN0IHx8ICEqc2tpcHBlZF9maXJzdCkKKwkJCQkJcmV0dXJuIGxpc3Q7CisJCQl9IGVsc2UgaWYgKHNraXBwZWRfZmlyc3QgJiYgISpza2lwcGVkX2ZpcnN0KSB7CisJCQkJLyogVGhpcyBtZWFucyB3ZSBrbm93IGl0J3Mgbm90IHNraXBwZWQgKi8KKwkJCQkqc2tpcHBlZF9maXJzdCA9IC0xOworCQkJfQorCQkJLyogTW92ZSBjdXJyZW50IHRvIGZpbHRlcmVkIGxpc3QgKi8KKwkJCSpmID0gbGlzdDsKKwkJCWYgPSAmbGlzdC0+bmV4dDsKKwkJCWlmIChjb3VudCkKKwkJCQkoKmNvdW50KSsrOworCQl9CisJCWxpc3QgPSBuZXh0OworCX0KKworCWlmIChza2lwcGVkX2ZpcnN0ICYmICpza2lwcGVkX2ZpcnN0ID09IC0xKQorCQkqc2tpcHBlZF9maXJzdCA9IDA7CisKKwlyZXR1cm4gZmlsdGVyZWQ7Cit9CisKKyNkZWZpbmUgUFJOX01PRFVMTyAzMjc2OAorCisvKgorICogVGhpcyBpcyBhIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBiYXNlZCBvbiAibWFuIDMgcmFuZCIuCisgKiBJdCBpcyBub3QgdXNlZCBwcm9wZXJseSBiZWNhdXNlIHRoZSBzZWVkIGlzIHRoZSBhcmd1bWVudCBhbmQgaXQKKyAqIGlzIGluY3JlYXNlZCBieSBvbmUgYmV0d2VlbiBlYWNoIGNhbGwsIGJ1dCB0aGF0IHNob3VsZCBub3QgbWF0dGVyCisgKiBmb3IgdGhpcyBhcHBsaWNhdGlvbi4KKyAqLworaW50IGdldF9wcm4oaW50IGNvdW50KSB7CisJY291bnQgPSBjb3VudCAqIDExMDM1MTUyNDUgKyAxMjM0NTsKKwlyZXR1cm4gKCh1bnNpZ25lZCkoY291bnQvNjU1MzYpICUgUFJOX01PRFVMTyk7Cit9CisKKy8qCisgKiBDdXN0b20gaW50ZWdlciBzcXVhcmUgcm9vdCBmcm9tCisgKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ludGVnZXJfc3F1YXJlX3Jvb3QKKyAqLworc3RhdGljIGludCBzcXJ0aShpbnQgdmFsKQoreworCWZsb2F0IGQsIHggPSB2YWw7CisKKwlpZiAodmFsID09IDApCisJCXJldHVybiAwOworCisJZG8geworCQlmbG9hdCB5ID0gKHggKyAoZmxvYXQpdmFsIC8geCkgLyAyOworCQlkID0gKHkgPiB4KSA/IHkgLSB4IDogeCAtIHk7CisJCXggPSB5OworCX0gd2hpbGUgKGQgPj0gMC41KTsKKworCXJldHVybiAoaW50KXg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKnNraXBfYXdheShzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmN1ciwgKnByZXZpb3VzOworCWludCBwcm4sIGluZGV4LCBpOworCisJcHJuID0gZ2V0X3Bybihjb3VudCk7CisJaW5kZXggPSAoY291bnQgKiBwcm4gLyBQUk5fTU9EVUxPKSAqIHNxcnRpKHBybikgLyBzcXJ0aShQUk5fTU9EVUxPKTsKKworCWN1ciA9IGxpc3Q7CisJcHJldmlvdXMgPSBOVUxMOworCisJZm9yIChpID0gMDsgY3VyOyBjdXIgPSBjdXItPm5leHQsIGkrKykgeworCQlpZiAoaSA9PSBpbmRleCkgeworCQkJaWYgKGhhc2hjbXAoY3VyLT5pdGVtLT5vYmplY3Quc2hhMSwgY3VycmVudF9iYWRfc2hhMSkpCisJCQkJcmV0dXJuIGN1cjsKKwkJCWlmIChwcmV2aW91cykKKwkJCQlyZXR1cm4gcHJldmlvdXM7CisJCQlyZXR1cm4gbGlzdDsKKwkJfQorCQlwcmV2aW91cyA9IGN1cjsKKwl9CisKKwlyZXR1cm4gbGlzdDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqbWFuYWdlZF9za2lwcGVkKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKKwkJCQkJICAgc3RydWN0IGNvbW1pdF9saXN0ICoqdHJpZWQpCit7CisJaW50IGNvdW50LCBza2lwcGVkX2ZpcnN0OworCisJKnRyaWVkID0gTlVMTDsKKworCWlmICghc2tpcHBlZF9yZXZzLnNoYTFfbnIpCisJCXJldHVybiBsaXN0OworCisJbGlzdCA9IGZpbHRlcl9za2lwcGVkKGxpc3QsIHRyaWVkLCAwLCAmY291bnQsICZza2lwcGVkX2ZpcnN0KTsKKworCWlmICghc2tpcHBlZF9maXJzdCkKKwkJcmV0dXJuIGxpc3Q7CisKKwlyZXR1cm4gc2tpcF9hd2F5KGxpc3QsIGNvdW50KTsKK30KKworc3RhdGljIHZvaWQgYmlzZWN0X3Jldl9zZXR1cChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgY29uc3QgY2hhciAqYmFkX2Zvcm1hdCwgY29uc3QgY2hhciAqZ29vZF9mb3JtYXQsCisJCQkgICAgIGludCByZWFkX3BhdGhzKQoreworCXN0cnVjdCBhcmd2X2FycmF5IHJldl9hcmd2ID0geyBOVUxMLCAwLCAwIH07CisJaW50IGk7CisKKwlpbml0X3JldmlzaW9ucyhyZXZzLCBwcmVmaXgpOworCXJldnMtPmFiYnJldiA9IDA7CisJcmV2cy0+Y29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX1VOU1BFQ0lGSUVEOworCisJLyogcmV2X2FyZ3YuYXJndlswXSB3aWxsIGJlIGlnbm9yZWQgYnkgc2V0dXBfcmV2aXNpb25zICovCisJYXJndl9hcnJheV9wdXNoKCZyZXZfYXJndiwgeHN0cmR1cCgiYmlzZWN0X3Jldl9zZXR1cCIpKTsKKwlhcmd2X2FycmF5X3B1c2hfc2hhMSgmcmV2X2FyZ3YsIGN1cnJlbnRfYmFkX3NoYTEsIGJhZF9mb3JtYXQpOworCWZvciAoaSA9IDA7IGkgPCBnb29kX3JldnMuc2hhMV9ucjsgaSsrKQorCQlhcmd2X2FycmF5X3B1c2hfc2hhMSgmcmV2X2FyZ3YsIGdvb2RfcmV2cy5zaGExW2ldLAorCQkJCSAgICAgZ29vZF9mb3JtYXQpOworCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2X2FyZ3YsIHhzdHJkdXAoIi0tIikpOworCWlmIChyZWFkX3BhdGhzKQorCQlyZWFkX2Jpc2VjdF9wYXRocygmcmV2X2FyZ3YpOworCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2X2FyZ3YsIE5VTEwpOworCisJc2V0dXBfcmV2aXNpb25zKHJldl9hcmd2LmFyZ3ZfbnIsIHJldl9hcmd2LmFyZ3YsIHJldnMsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBiaXNlY3RfY29tbW9uKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldnMpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisJaWYgKHJldnMtPnRyZWVfb2JqZWN0cykKKwkJbWFya19lZGdlc191bmludGVyZXN0aW5nKHJldnMtPmNvbW1pdHMsIHJldnMsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBleGl0X2lmX3NraXBwZWRfY29tbWl0cyhzdHJ1Y3QgY29tbWl0X2xpc3QgKnRyaWVkLAorCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpiYWQpCit7CisJaWYgKCF0cmllZCkKKwkJcmV0dXJuOworCisJcHJpbnRmKCJUaGVyZSBhcmUgb25seSAnc2tpcCdwZWQgY29tbWl0cyBsZWZ0IHRvIHRlc3QuXG4iCisJICAgICAgICJUaGUgZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2Y6XG4iKTsKKwlwcmludF9jb21taXRfbGlzdCh0cmllZCwgIiVzXG4iLCAiJXNcbiIpOworCWlmIChiYWQpCisJCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KGJhZCkpOworCXByaW50ZigiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIik7CisJZXhpdCgyKTsKK30KKworc3RhdGljIGludCBpc19leHBlY3RlZF9yZXYoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoKCJCSVNFQ1RfRVhQRUNURURfUkVWIik7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IHN0cmJ1ZiBzdHIgPSBTVFJCVUZfSU5JVDsKKwlGSUxFICpmcDsKKwlpbnQgcmVzID0gMDsKKworCWlmIChzdGF0KGZpbGVuYW1lLCAmc3QpIHx8ICFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gMDsKKworCWZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyYnVmX2dldGxpbmUoJnN0ciwgZnAsICdcbicpICE9IEVPRikKKwkJcmVzID0gIXN0cmNtcChzdHIuYnVmLCBzaGExX3RvX2hleChzaGExKSk7CisKKwlzdHJidWZfcmVsZWFzZSgmc3RyKTsKKwlmY2xvc2UoZnApOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgbWFya19leHBlY3RlZF9yZXYoY2hhciAqYmlzZWN0X3Jldl9oZXgpCit7CisJaW50IGxlbiA9IHN0cmxlbihiaXNlY3RfcmV2X2hleCk7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aCgiQklTRUNUX0VYUEVDVEVEX1JFViIpOworCWludCBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19XUk9OTFksIDA2MDApOworCisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIsIGZpbGVuYW1lKTsKKworCWJpc2VjdF9yZXZfaGV4W2xlbl0gPSAnXG4nOworCXdyaXRlX29yX2RpZShmZCwgYmlzZWN0X3Jldl9oZXgsIGxlbiArIDEpOworCWJpc2VjdF9yZXZfaGV4W2xlbl0gPSAnXDAnOworCisJaWYgKGNsb3NlKGZkKSA8IDApCisJCWRpZSgiY2xvc2luZyBmaWxlICVzOiAlcyIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworfQorCitzdGF0aWMgaW50IGJpc2VjdF9jaGVja291dChjaGFyICpiaXNlY3RfcmV2X2hleCkKK3sKKwlpbnQgcmVzOworCisJbWFya19leHBlY3RlZF9yZXYoYmlzZWN0X3Jldl9oZXgpOworCisJYXJndl9jaGVja291dFsyXSA9IGJpc2VjdF9yZXZfaGV4OworCXJlcyA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3ZfY2hlY2tvdXQsIFJVTl9HSVRfQ01EKTsKKwlpZiAocmVzKQorCQlleGl0KHJlcyk7CisKKwlhcmd2X3Nob3dfYnJhbmNoWzFdID0gYmlzZWN0X3Jldl9oZXg7CisJcmV0dXJuIHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3Zfc2hvd19icmFuY2gsIFJVTl9HSVRfQ01EKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9jb21taXRfcmVmZXJlbmNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGNvbW1pdCAqciA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCWlmICghcikKKwkJZGllKCJOb3QgYSB2YWxpZCBjb21taXQgbmFtZSAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKipnZXRfYmFkX2FuZF9nb29kX2NvbW1pdHMoaW50ICpyZXZfbnIpCit7CisJaW50IGxlbiA9IDEgKyBnb29kX3JldnMuc2hhMV9ucjsKKwlzdHJ1Y3QgY29tbWl0ICoqcmV2ID0geG1hbGxvYyhsZW4gKiBzaXplb2YoKnJldikpOworCWludCBpLCBuID0gMDsKKworCXJldltuKytdID0gZ2V0X2NvbW1pdF9yZWZlcmVuY2UoY3VycmVudF9iYWRfc2hhMSk7CisJZm9yIChpID0gMDsgaSA8IGdvb2RfcmV2cy5zaGExX25yOyBpKyspCisJCXJldltuKytdID0gZ2V0X2NvbW1pdF9yZWZlcmVuY2UoZ29vZF9yZXZzLnNoYTFbaV0pOworCSpyZXZfbnIgPSBuOworCisJcmV0dXJuIHJldjsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2JhZF9tZXJnZV9iYXNlKHZvaWQpCit7CisJaWYgKGlzX2V4cGVjdGVkX3JldihjdXJyZW50X2JhZF9zaGExKSkgeworCQljaGFyICpiYWRfaGV4ID0gc2hhMV90b19oZXgoY3VycmVudF9iYWRfc2hhMSk7CisJCWNoYXIgKmdvb2RfaGV4ID0gam9pbl9zaGExX2FycmF5X2hleCgmZ29vZF9yZXZzLCAnICcpOworCisJCWZwcmludGYoc3RkZXJyLCAiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorCQkJIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCAiCisJCQkiYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIsCisJCQliYWRfaGV4LCBiYWRfaGV4LCBnb29kX2hleCk7CisKKwkJZXhpdCgzKTsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgIlNvbWUgZ29vZCByZXZzIGFyZSBub3QgYW5jZXN0b3Igb2YgdGhlIGJhZCByZXYuXG4iCisJCSJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKwkJIk1heWJlIHlvdSBtaXN0YWtlIGdvb2QgYW5kIGJhZCByZXZzP1xuIik7CisJZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3NraXBwZWRfbWVyZ2VfYmFzZShjb25zdCB1bnNpZ25lZCBjaGFyICptYikKK3sKKwljaGFyICptYl9oZXggPSBzaGExX3RvX2hleChtYik7CisJY2hhciAqYmFkX2hleCA9IHNoYTFfdG9faGV4KGN1cnJlbnRfYmFkX3NoYTEpOworCWNoYXIgKmdvb2RfaGV4ID0gam9pbl9zaGExX2FycmF5X2hleCgmZ29vZF9yZXZzLCAnICcpOworCisJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiB0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdICIKKwkJIm11c3QgYmUgc2tpcHBlZC5cbiIKKwkJIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCBiYWQgY29tbWl0IGlzICIKKwkJImJldHdlZW4gJXMgYW5kICVzLlxuIgorCQkiV2UgY29udGludWUgYW55d2F5LlxuIiwKKwkJYmFkX2hleCwgZ29vZF9oZXgsIG1iX2hleCwgYmFkX2hleCk7CisJZnJlZShnb29kX2hleCk7Cit9CisKKy8qCisgKiAiY2hlY2tfbWVyZ2VfYmFzZXMiIGNoZWNrcyB0aGF0IG1lcmdlIGJhc2VzIGFyZSBub3QgImJhZCIuCisgKgorICogLSBJZiBvbmUgaXMgImJhZCIsIGl0IG1lYW5zIHRoZSB1c2VyIGFzc3VtZWQgc29tZXRoaW5nIHdyb25nCisgKiBhbmQgd2UgbXVzdCBleGl0IHdpdGggYSBub24gMCBlcnJvciBjb2RlLgorICogLSBJZiBvbmUgaXMgImdvb2QiLCB0aGF0J3MgZ29vZCwgd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICogLSBJZiBvbmUgaXMgInNraXBwZWQiLCB3ZSBjYW4ndCBrbm93IGJ1dCB3ZSBzaG91bGQgd2Fybi4KKyAqIC0gSWYgd2UgZG9uJ3Qga25vdywgd2Ugc2hvdWxkIGNoZWNrIGl0IG91dCBhbmQgYXNrIHRoZSB1c2VyIHRvIHRlc3QuCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX21lcmdlX2Jhc2VzKHZvaWQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQ7CisJaW50IHJldl9ucjsKKwlzdHJ1Y3QgY29tbWl0ICoqcmV2ID0gZ2V0X2JhZF9hbmRfZ29vZF9jb21taXRzKCZyZXZfbnIpOworCisJcmVzdWx0ID0gZ2V0X21lcmdlX2Jhc2VzX21hbnkocmV2WzBdLCByZXZfbnIgLSAxLCByZXYgKyAxLCAwKTsKKworCWZvciAoOyByZXN1bHQ7IHJlc3VsdCA9IHJlc3VsdC0+bmV4dCkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICptYiA9IHJlc3VsdC0+aXRlbS0+b2JqZWN0LnNoYTE7CisJCWlmICghaGFzaGNtcChtYiwgY3VycmVudF9iYWRfc2hhMSkpIHsKKwkJCWhhbmRsZV9iYWRfbWVyZ2VfYmFzZSgpOworCQl9IGVsc2UgaWYgKDAgPD0gbG9va3VwX3NoYTFfYXJyYXkoJmdvb2RfcmV2cywgbWIpKSB7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICgwIDw9IGxvb2t1cF9zaGExX2FycmF5KCZza2lwcGVkX3JldnMsIG1iKSkgeworCQkJaGFuZGxlX3NraXBwZWRfbWVyZ2VfYmFzZShtYik7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIkJpc2VjdGluZzogYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkXG4iKTsKKwkJCWV4aXQoYmlzZWN0X2NoZWNrb3V0KHNoYTFfdG9faGV4KG1iKSkpOworCQl9CisJfQorCisJZnJlZShyZXYpOworCWZyZWVfY29tbWl0X2xpc3QocmVzdWx0KTsKK30KKworc3RhdGljIGludCBjaGVja19hbmNlc3RvcnMoY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCBvYmplY3RfYXJyYXkgcGVuZGluZ19jb3B5OworCWludCBpLCByZXM7CisKKwliaXNlY3RfcmV2X3NldHVwKCZyZXZzLCBwcmVmaXgsICJeJXMiLCAiJXMiLCAwKTsKKworCS8qIFNhdmUgcGVuZGluZyBvYmplY3RzLCBzbyB0aGV5IGNhbiBiZSBjbGVhbmVkIHVwIGxhdGVyLiAqLworCW1lbXNldCgmcGVuZGluZ19jb3B5LCAwLCBzaXplb2YocGVuZGluZ19jb3B5KSk7CisJZm9yIChpID0gMDsgaSA8IHJldnMucGVuZGluZy5ucjsgaSsrKQorCQlhZGRfb2JqZWN0X2FycmF5KHJldnMucGVuZGluZy5vYmplY3RzW2ldLml0ZW0sCisJCQkJIHJldnMucGVuZGluZy5vYmplY3RzW2ldLm5hbWUsCisJCQkJICZwZW5kaW5nX2NvcHkpOworCisJYmlzZWN0X2NvbW1vbigmcmV2cyk7CisJcmVzID0gKHJldnMuY29tbWl0cyAhPSBOVUxMKTsKKworCS8qIENsZWFuIHVwIG9iamVjdHMgdXNlZCwgYXMgdGhleSB3aWxsIGJlIHJldXNlZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ19jb3B5Lm5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9IHBlbmRpbmdfY29weS5vYmplY3RzW2ldLml0ZW07CisJCWNsZWFyX2NvbW1pdF9tYXJrcygoc3RydWN0IGNvbW1pdCAqKW8sIEFMTF9SRVZfRkxBR1MpOworCX0KKworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiAiY2hlY2tfZ29vZF9hcmVfYW5jZXN0b3JzX29mX2JhZCIgY2hlY2tzIHRoYXQgYWxsICJnb29kIiByZXZzIGFyZQorICogYW5jZXN0b3Igb2YgdGhlICJiYWQiIHJldi4KKyAqCisgKiBJZiB0aGF0J3Mgbm90IHRoZSBjYXNlLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBtZXJnZSBiYXNlcy4KKyAqIElmIGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCBieSB0aGUgdXNlciwgaXRzIHNvdXJjZSBjb2RlIHdpbGwgYmUKKyAqIGNoZWNrZWQgb3V0IHRvIGJlIHRlc3RlZCBieSB0aGUgdXNlciBhbmQgd2Ugd2lsbCBleGl0LgorICovCitzdGF0aWMgdm9pZCBjaGVja19nb29kX2FyZV9hbmNlc3RvcnNfb2ZfYmFkKGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoKCJCSVNFQ1RfQU5DRVNUT1JTX09LIik7CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IGZkOworCisJaWYgKCFjdXJyZW50X2JhZF9zaGExKQorCQlkaWUoImEgYmFkIHJldmlzaW9uIGlzIG5lZWRlZCIpOworCisJLyogQ2hlY2sgaWYgZmlsZSBCSVNFQ1RfQU5DRVNUT1JTX09LIGV4aXN0cy4gKi8KKwlpZiAoIXN0YXQoZmlsZW5hbWUsICZzdCkgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJcmV0dXJuOworCisJLyogQmlzZWN0aW5nIHdpdGggbm8gZ29vZCByZXYgaXMgb2suICovCisJaWYgKGdvb2RfcmV2cy5zaGExX25yID09IDApCisJCXJldHVybjsKKworCS8qIENoZWNrIGlmIGFsbCBnb29kIHJldnMgYXJlIGFuY2VzdG9yIG9mIHRoZSBiYWQgcmV2LiAqLworCWlmIChjaGVja19hbmNlc3RvcnMocHJlZml4KSkKKwkJY2hlY2tfbWVyZ2VfYmFzZXMoKTsKKworCS8qIENyZWF0ZSBmaWxlIEJJU0VDVF9BTkNFU1RPUlNfT0suICovCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX0NSRUFUIHwgT19UUlVOQyB8IE9fV1JPTkxZLCAwNjAwKTsKKwlpZiAoZmQgPCAwKQorCQl3YXJuaW5nKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJzogJXMiLAorCQkJZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJZWxzZQorCQljbG9zZShmZCk7Cit9CisKKy8qCisgKiBUaGlzIGRvZXMgImdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgQ09NTUlUIiB3aXRob3V0IG9uZSBmb3JrK2V4ZWMuCisgKi8KK3N0YXRpYyB2b2lkIHNob3dfZGlmZl90cmVlKGNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCByZXZfaW5mbyBvcHQ7CisKKwkvKiBkaWZmLXRyZWUgaW5pdCAqLworCWluaXRfcmV2aXNpb25zKCZvcHQsIHByZWZpeCk7CisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLworCW9wdC5hYmJyZXYgPSAwOworCW9wdC5kaWZmID0gMTsKKworCS8qIFRoaXMgaXMgd2hhdCAiLS1wcmV0dHkiIGRvZXMgKi8KKwlvcHQudmVyYm9zZV9oZWFkZXIgPSAxOworCW9wdC51c2VfdGVybWluYXRvciA9IDA7CisJb3B0LmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9ERUZBVUxUOworCisJLyogZGlmZi10cmVlIGluaXQgKi8KKwlpZiAoIW9wdC5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpCisJCW9wdC5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9SQVc7CisKKwlsb2dfdHJlZV9jb21taXQoJm9wdCwgY29tbWl0KTsKK30KKworLyoKKyAqIFdlIHVzZSB0aGUgY29udmVudGlvbiB0aGF0IGV4aXRpbmcgd2l0aCBhbiBleGl0IGNvZGUgMTAgbWVhbnMgdGhhdAorICogdGhlIGJpc2VjdGlvbiBwcm9jZXNzIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEluIHRoaXMgY2FzZSB0aGUgY2FsbGluZyBzaGVsbCBzY3JpcHQgc2hvdWxkIGV4aXQgMC4KKyAqLworaW50IGJpc2VjdF9uZXh0X2FsbChjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0IGNvbW1pdF9saXN0ICp0cmllZDsKKwlpbnQgcmVhY2hlcyA9IDAsIGFsbCA9IDAsIG5yOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJpc2VjdF9yZXY7CisJY2hhciBiaXNlY3RfcmV2X2hleFs0MV07CisKKwlpZiAocmVhZF9iaXNlY3RfcmVmcygpKQorCQlkaWUoInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIik7CisKKwljaGVja19nb29kX2FyZV9hbmNlc3RvcnNfb2ZfYmFkKHByZWZpeCk7CisKKwliaXNlY3RfcmV2X3NldHVwKCZyZXZzLCBwcmVmaXgsICIlcyIsICJeJXMiLCAxKTsKKwlyZXZzLmxpbWl0ZWQgPSAxOworCisJYmlzZWN0X2NvbW1vbigmcmV2cyk7CisKKwlyZXZzLmNvbW1pdHMgPSBmaW5kX2Jpc2VjdGlvbihyZXZzLmNvbW1pdHMsICZyZWFjaGVzLCAmYWxsLAorCQkJCSAgICAgICAhIXNraXBwZWRfcmV2cy5zaGExX25yKTsKKwlyZXZzLmNvbW1pdHMgPSBtYW5hZ2VkX3NraXBwZWQocmV2cy5jb21taXRzLCAmdHJpZWQpOworCisJaWYgKCFyZXZzLmNvbW1pdHMpIHsKKwkJLyoKKwkJICogV2Ugc2hvdWxkIGV4aXQgaGVyZSBvbmx5IGlmIHRoZSAiYmFkIgorCQkgKiBjb21taXQgaXMgYWxzbyBhICJza2lwIiBjb21taXQuCisJCSAqLworCQlleGl0X2lmX3NraXBwZWRfY29tbWl0cyh0cmllZCwgTlVMTCk7CisKKwkJcHJpbnRmKCIlcyB3YXMgYm90aCBnb29kIGFuZCBiYWRcbiIsCisJCSAgICAgICBzaGExX3RvX2hleChjdXJyZW50X2JhZF9zaGExKSk7CisJCWV4aXQoMSk7CisJfQorCisJYmlzZWN0X3JldiA9IHJldnMuY29tbWl0cy0+aXRlbS0+b2JqZWN0LnNoYTE7CisJbWVtY3B5KGJpc2VjdF9yZXZfaGV4LCBzaGExX3RvX2hleChiaXNlY3RfcmV2KSwgNDEpOworCisJaWYgKCFoYXNoY21wKGJpc2VjdF9yZXYsIGN1cnJlbnRfYmFkX3NoYTEpKSB7CisJCWV4aXRfaWZfc2tpcHBlZF9jb21taXRzKHRyaWVkLCBjdXJyZW50X2JhZF9zaGExKTsKKwkJcHJpbnRmKCIlcyBpcyBmaXJzdCBiYWQgY29tbWl0XG4iLCBiaXNlY3RfcmV2X2hleCk7CisJCXNob3dfZGlmZl90cmVlKHByZWZpeCwgcmV2cy5jb21taXRzLT5pdGVtKTsKKwkJLyogVGhpcyBtZWFucyB0aGUgYmlzZWN0aW9uIHByb2Nlc3Mgc3VjY2VlZGVkLiAqLworCQlleGl0KDEwKTsKKwl9CisKKwluciA9IGFsbCAtIHJlYWNoZXMgLSAxOworCXByaW50ZigiQmlzZWN0aW5nOiAlZCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgIgorCSAgICAgICAiKHJvdWdobHkgJWQgc3RlcHMpXG4iLCBuciwgZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGFsbCkpOworCisJcmV0dXJuIGJpc2VjdF9jaGVja291dChiaXNlY3RfcmV2X2hleCk7Cit9CisKZGlmZiAtLWdpdCBhL2Jpc2VjdC5oIGIvYmlzZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJmOGZjMQotLS0gL2Rldi9udWxsCisrKyBiL2Jpc2VjdC5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgQklTRUNUX0gKKyNkZWZpbmUgQklTRUNUX0gKKworZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZmluZF9iaXNlY3Rpb24oc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJCQkgIGludCAqcmVhY2hlcywgaW50ICphbGwsCisJCQkJCSAgaW50IGZpbmRfYWxsKTsKKworZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZmlsdGVyX3NraXBwZWQoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJCQkgIHN0cnVjdCBjb21taXRfbGlzdCAqKnRyaWVkLAorCQkJCQkgIGludCBzaG93X2FsbCwKKwkJCQkJICBpbnQgKmNvdW50LAorCQkJCQkgIGludCAqc2tpcHBlZF9maXJzdCk7CisKK2V4dGVybiB2b2lkIHByaW50X2NvbW1pdF9saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdF9jdXIsCisJCQkgICAgICBjb25zdCBjaGFyICpmb3JtYXRfbGFzdCk7CisKKy8qIGJpc2VjdF9zaG93X2ZsYWdzIGZsYWdzIGluIHN0cnVjdCByZXZfbGlzdF9pbmZvICovCisjZGVmaW5lIEJJU0VDVF9TSE9XX0FMTAkJKDE8PDApCisjZGVmaW5lIEJJU0VDVF9TSE9XX1RSSUVECSgxPDwxKQorCitzdHJ1Y3QgcmV2X2xpc3RfaW5mbyB7CisJc3RydWN0IHJldl9pbmZvICpyZXZzOworCWludCBiaXNlY3Rfc2hvd19mbGFnczsKKwlpbnQgc2hvd190aW1lc3RhbXA7CisJaW50IGhkcl90ZXJtaW5hdGlvbjsKKwljb25zdCBjaGFyICpoZWFkZXJfcHJlZml4OworfTsKKworZXh0ZXJuIGludCBzaG93X2Jpc2VjdF92YXJzKHN0cnVjdCByZXZfbGlzdF9pbmZvICppbmZvLCBpbnQgcmVhY2hlcywgaW50IGFsbCk7CisKK2V4dGVybiBpbnQgYmlzZWN0X25leHRfYWxsKGNvbnN0IGNoYXIgKnByZWZpeCk7CisKK2V4dGVybiBpbnQgZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGludCBhbGwpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2JyYW5jaC5jIGIvYnJhbmNoLmMKaW5kZXggYjFhYzgzNy4uMDVlZjNmNSAxMDA2NDQKLS0tIGEvYnJhbmNoLmMKKysrIGIvYnJhbmNoLmMKQEAgLTMyLDIxICszMiw1OSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNob3VsZF9zZXR1cF9yZWJhc2UoY29uc3Qgc3RydWN0IHRyYWNraW5nICp0cmFja2luZykKK3N0YXRpYyBpbnQgc2hvdWxkX3NldHVwX3JlYmFzZShjb25zdCBjaGFyICpvcmlnaW4pCiB7CiAJc3dpdGNoIChhdXRvcmViYXNlKSB7CiAJY2FzZSBBVVRPUkVCQVNFX05FVkVSOgogCQlyZXR1cm4gMDsKIAljYXNlIEFVVE9SRUJBU0VfTE9DQUw6Ci0JCXJldHVybiB0cmFja2luZy0+cmVtb3RlID09IE5VTEw7CisJCXJldHVybiBvcmlnaW4gPT0gTlVMTDsKIAljYXNlIEFVVE9SRUJBU0VfUkVNT1RFOgotCQlyZXR1cm4gdHJhY2tpbmctPnJlbW90ZSAhPSBOVUxMOworCQlyZXR1cm4gb3JpZ2luICE9IE5VTEw7CiAJY2FzZSBBVVRPUkVCQVNFX0FMV0FZUzoKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwogfQogCit2b2lkIGluc3RhbGxfYnJhbmNoX2NvbmZpZyhpbnQgZmxhZywgY29uc3QgY2hhciAqbG9jYWwsIGNvbnN0IGNoYXIgKm9yaWdpbiwgY29uc3QgY2hhciAqcmVtb3RlKQoreworCXN0cnVjdCBzdHJidWYga2V5ID0gU1RSQlVGX0lOSVQ7CisJaW50IHJlYmFzaW5nID0gc2hvdWxkX3NldHVwX3JlYmFzZShvcmlnaW4pOworCisJc3RyYnVmX2FkZGYoJmtleSwgImJyYW5jaC4lcy5yZW1vdGUiLCBsb2NhbCk7CisJZ2l0X2NvbmZpZ19zZXQoa2V5LmJ1Ziwgb3JpZ2luID8gb3JpZ2luIDogIi4iKTsKKworCXN0cmJ1Zl9yZXNldCgma2V5KTsKKwlzdHJidWZfYWRkZigma2V5LCAiYnJhbmNoLiVzLm1lcmdlIiwgbG9jYWwpOworCWdpdF9jb25maWdfc2V0KGtleS5idWYsIHJlbW90ZSk7CisKKwlpZiAocmViYXNpbmcpIHsKKwkJc3RyYnVmX3Jlc2V0KCZrZXkpOworCQlzdHJidWZfYWRkZigma2V5LCAiYnJhbmNoLiVzLnJlYmFzZSIsIGxvY2FsKTsKKwkJZ2l0X2NvbmZpZ19zZXQoa2V5LmJ1ZiwgInRydWUiKTsKKwl9CisKKwlpZiAoZmxhZyAmIEJSQU5DSF9DT05GSUdfVkVSQk9TRSkgeworCQlzdHJidWZfcmVzZXQoJmtleSk7CisKKwkJc3RyYnVmX2FkZHN0cigma2V5LCBvcmlnaW4gPyAicmVtb3RlIiA6ICJsb2NhbCIpOworCisJCS8qIEFyZSB3ZSB0cmFja2luZyBhIHByb3BlciAiYnJhbmNoIj8gKi8KKwkJaWYgKCFwcmVmaXhjbXAocmVtb3RlLCAicmVmcy9oZWFkcy8iKSkgeworCQkJc3RyYnVmX2FkZGYoJmtleSwgIiBicmFuY2ggJXMiLCByZW1vdGUgKyAxMSk7CisJCQlpZiAob3JpZ2luKQorCQkJCXN0cmJ1Zl9hZGRmKCZrZXksICIgZnJvbSAlcyIsIG9yaWdpbik7CisJCX0KKwkJZWxzZQorCQkJc3RyYnVmX2FkZGYoJmtleSwgIiByZWYgJXMiLCByZW1vdGUpOworCQlwcmludGYoIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgJXMlcy5cbiIsCisJCSAgICAgICBsb2NhbCwga2V5LmJ1ZiwKKwkJICAgICAgIHJlYmFzaW5nID8gIiBieSByZWJhc2luZyIgOiAiIik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworfQorCiAvKgogICogVGhpcyBpcyBjYWxsZWQgd2hlbiBuZXdfcmVmIGlzIGJyYW5jaGVkIG9mZiBvZiBvcmlnX3JlZiwgYW5kIHRyaWVzCiAgKiB0byBpbmZlciB0aGUgc2V0dGluZ3MgZm9yIGJyYW5jaC48bmV3X3JlZj4ue3JlbW90ZSxtZXJnZX0gZnJvbSB0aGUKQEAgLTU1LDcgKzkzLDYgQEAKIHN0YXRpYyBpbnQgc2V0dXBfdHJhY2tpbmcoY29uc3QgY2hhciAqbmV3X3JlZiwgY29uc3QgY2hhciAqb3JpZ19yZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gYnJhbmNoX3RyYWNrIHRyYWNrKQogewotCWNoYXIga2V5WzEwMjRdOwogCXN0cnVjdCB0cmFja2luZyB0cmFja2luZzsKIAogCWlmIChzdHJsZW4obmV3X3JlZikgPiAxMDI0IC0gNyAtIDcgLSAxKQpAQCAtODAsMTkgKzExNywxMCBAQAogCQlyZXR1cm4gZXJyb3IoIk5vdCB0cmFja2luZzogYW1iaWd1b3VzIGluZm9ybWF0aW9uIGZvciByZWYgJXMiLAogCQkJCW9yaWdfcmVmKTsKIAotCXNwcmludGYoa2V5LCAiYnJhbmNoLiVzLnJlbW90ZSIsIG5ld19yZWYpOwotCWdpdF9jb25maWdfc2V0KGtleSwgdHJhY2tpbmcucmVtb3RlID8gIHRyYWNraW5nLnJlbW90ZSA6ICIuIik7Ci0Jc3ByaW50ZihrZXksICJicmFuY2guJXMubWVyZ2UiLCBuZXdfcmVmKTsKLQlnaXRfY29uZmlnX3NldChrZXksIHRyYWNraW5nLnNyYyA/IHRyYWNraW5nLnNyYyA6IG9yaWdfcmVmKTsKLQlwcmludGYoIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgJXMgYnJhbmNoICVzLlxuIiwgbmV3X3JlZiwKLQkJdHJhY2tpbmcucmVtb3RlID8gInJlbW90ZSIgOiAibG9jYWwiLCBvcmlnX3JlZik7Ci0JaWYgKHNob3VsZF9zZXR1cF9yZWJhc2UoJnRyYWNraW5nKSkgewotCQlzcHJpbnRmKGtleSwgImJyYW5jaC4lcy5yZWJhc2UiLCBuZXdfcmVmKTsKLQkJZ2l0X2NvbmZpZ19zZXQoa2V5LCAidHJ1ZSIpOwotCQlwcmludGYoIlRoaXMgYnJhbmNoIHdpbGwgcmViYXNlIG9uIHB1bGwuXG4iKTsKLQl9Ci0JZnJlZSh0cmFja2luZy5zcmMpOworCWluc3RhbGxfYnJhbmNoX2NvbmZpZyhCUkFOQ0hfQ09ORklHX1ZFUkJPU0UsIG5ld19yZWYsIHRyYWNraW5nLnJlbW90ZSwKKwkJCSAgICAgIHRyYWNraW5nLnNyYyA/IHRyYWNraW5nLnNyYyA6IG9yaWdfcmVmKTsKIAorCWZyZWUodHJhY2tpbmcuc3JjKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAzLDE0ICsxMzEsMTQgQEAKIAlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2s7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JY2hhciAqcmVhbF9yZWYsIHJlZltQQVRIX01BWF0sIG1zZ1tQQVRIX01BWCArIDIwXTsKKwljaGFyICpyZWFsX3JlZiwgbXNnW1BBVEhfTUFYICsgMjBdOworCXN0cnVjdCBzdHJidWYgcmVmID0gU1RSQlVGX0lOSVQ7CiAJaW50IGZvcmNpbmcgPSAwOwogCi0Jc25wcmludGYocmVmLCBzaXplb2YgcmVmLCAicmVmcy9oZWFkcy8lcyIsIG5hbWUpOwotCWlmIChjaGVja19yZWZfZm9ybWF0KHJlZikpCisJaWYgKHN0cmJ1Zl9jaGVja19icmFuY2hfcmVmKCZyZWYsIG5hbWUpKQogCQlkaWUoIiclcycgaXMgbm90IGEgdmFsaWQgYnJhbmNoIG5hbWUuIiwgbmFtZSk7CiAKLQlpZiAocmVzb2x2ZV9yZWYocmVmLCBzaGExLCAxLCBOVUxMKSkgeworCWlmIChyZXNvbHZlX3JlZihyZWYuYnVmLCBzaGExLCAxLCBOVUxMKSkgewogCQlpZiAoIWZvcmNlKQogCQkJZGllKCJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIsIG5hbWUpOwogCQllbHNlIGlmICghaXNfYmFyZV9yZXBvc2l0b3J5KCkgJiYgIXN0cmNtcChoZWFkLCBuYW1lKSkKQEAgLTE0Miw5ICsxNzAsOSBAQAogCQlkaWUoIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iLCBzdGFydF9uYW1lKTsKIAloYXNoY3B5KHNoYTEsIGNvbW1pdC0+b2JqZWN0LnNoYTEpOwogCi0JbG9jayA9IGxvY2tfYW55X3JlZl9mb3JfdXBkYXRlKHJlZiwgTlVMTCwgMCk7CisJbG9jayA9IGxvY2tfYW55X3JlZl9mb3JfdXBkYXRlKHJlZi5idWYsIE5VTEwsIDApOwogCWlmICghbG9jaykKLQkJZGllKCJGYWlsZWQgdG8gbG9jayByZWYgZm9yIHVwZGF0ZTogJXMuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJGYWlsZWQgdG8gbG9jayByZWYgZm9yIHVwZGF0ZSIpOwogCiAJaWYgKHJlZmxvZykKIAkJbG9nX2FsbF9yZWZfdXBkYXRlcyA9IDE7CkBAIC0xNjAsOCArMTg4LDkgQEAKIAkJc2V0dXBfdHJhY2tpbmcobmFtZSwgcmVhbF9yZWYsIHRyYWNrKTsKIAogCWlmICh3cml0ZV9yZWZfc2hhMShsb2NrLCBzaGExLCBtc2cpIDwgMCkKLQkJZGllKCJGYWlsZWQgdG8gd3JpdGUgcmVmOiAlcy4iLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIkZhaWxlZCB0byB3cml0ZSByZWYiKTsKIAorCXN0cmJ1Zl9yZWxlYXNlKCZyZWYpOwogCWZyZWUocmVhbF9yZWYpOwogfQogCmRpZmYgLS1naXQgYS9icmFuY2guaCBiL2JyYW5jaC5oCmluZGV4IDlmMGMyYTIuLmVlZDgxN2EgMTAwNjQ0Ci0tLSBhL2JyYW5jaC5oCisrKyBiL2JyYW5jaC5oCkBAIC0yMSw0ICsyMSwxMSBAQAogICovCiB2b2lkIHJlbW92ZV9icmFuY2hfc3RhdGUodm9pZCk7CiAKKy8qCisgKiBDb25maWd1cmUgbG9jYWwgYnJhbmNoICJsb2NhbCIgdG8gbWVyZ2UgcmVtb3RlIGJyYW5jaCAicmVtb3RlIgorICogdGFrZW4gZnJvbSBvcmlnaW4gIm9yaWdpbiIuCisgKi8KKyNkZWZpbmUgQlJBTkNIX0NPTkZJR19WRVJCT1NFIDAxCitleHRlcm4gdm9pZCBpbnN0YWxsX2JyYW5jaF9jb25maWcoaW50IGZsYWcsIGNvbnN0IGNoYXIgKmxvY2FsLCBjb25zdCBjaGFyICpvcmlnaW4sIGNvbnN0IGNoYXIgKnJlbW90ZSk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1hZGQuYyBiL2J1aWx0aW4tYWRkLmMKaW5kZXggYWM5OGM4My4uNTgxYTJhMSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1hZGQuYworKysgYi9idWlsdGluLWFkZC5jCkBAIC0xMCwxMiArMTAsMTQgQEAKICNpbmNsdWRlICJjYWNoZS10cmVlLmgiCiAjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9hZGRfdXNhZ2VbXSA9IHsKIAkiZ2l0IGFkZCBbb3B0aW9uc10gWy0tXSA8ZmlsZXBhdHRlcm4+Li4uIiwKIAlOVUxMCiB9Owotc3RhdGljIGludCBwYXRjaF9pbnRlcmFjdGl2ZSA9IDAsIGFkZF9pbnRlcmFjdGl2ZSA9IDA7CitzdGF0aWMgaW50IHBhdGNoX2ludGVyYWN0aXZlLCBhZGRfaW50ZXJhY3RpdmUsIGVkaXRfaW50ZXJhY3RpdmU7CiBzdGF0aWMgaW50IHRha2Vfd29ya3RyZWVfY2hhbmdlczsKIAogc3RhdGljIHZvaWQgZmlsbF9wYXRoc3BlY19tYXRjaGVzKGNvbnN0IGNoYXIgKipwYXRoc3BlYywgY2hhciAqc2VlbiwgaW50IHNwZWNzKQpAQCAtNjEsNyArNjMsNyBAQAogCWZpbGxfcGF0aHNwZWNfbWF0Y2hlcyhwYXRoc3BlYywgc2Vlbiwgc3BlY3MpOwogCiAJZm9yIChpID0gMDsgaSA8IHNwZWNzOyBpKyspIHsKLQkJaWYgKCFzZWVuW2ldICYmICFmaWxlX2V4aXN0cyhwYXRoc3BlY1tpXSkpCisJCWlmICghc2VlbltpXSAmJiBwYXRoc3BlY1tpXVswXSAmJiAhZmlsZV9leGlzdHMocGF0aHNwZWNbaV0pKQogCQkJZGllKCJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIiwKIAkJCQkJcGF0aHNwZWNbaV0pOwogCX0KQEAgLTk1LDM1ICs5Nyw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBmaWxsX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICoqcGF0aHNwZWMsCi0JCWludCBpZ25vcmVkX3RvbykKLXsKLQljb25zdCBjaGFyICpwYXRoLCAqYmFzZTsKLQlpbnQgYmFzZWxlbjsKLQotCS8qIFNldCB1cCB0aGUgZGVmYXVsdCBnaXQgcG9yY2VsYWluIGV4Y2x1ZGVzICovCi0JbWVtc2V0KGRpciwgMCwgc2l6ZW9mKCpkaXIpKTsKLQlpZiAoIWlnbm9yZWRfdG9vKSB7Ci0JCWRpci0+Y29sbGVjdF9pZ25vcmVkID0gMTsKLQkJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoZGlyKTsKLQl9Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSBjb21tb24gcHJlZml4IGZvciB0aGUgcGF0aHNwZWMsIGFuZAotCSAqIHVzZSB0aGF0IHRvIG9wdGltaXplIHRoZSBkaXJlY3Rvcnkgd2FsawotCSAqLwotCWJhc2VsZW4gPSBjb21tb25fcHJlZml4KHBhdGhzcGVjKTsKLQlwYXRoID0gIi4iOwotCWJhc2UgPSAiIjsKLQlpZiAoYmFzZWxlbikKLQkJcGF0aCA9IGJhc2UgPSB4bWVtZHVweigqcGF0aHNwZWMsIGJhc2VsZW4pOwotCi0JLyogUmVhZCB0aGUgZGlyZWN0b3J5IGFuZCBwcnVuZSBpdCAqLwotCXJlYWRfZGlyZWN0b3J5KGRpciwgcGF0aCwgYmFzZSwgYmFzZWxlbiwgcGF0aHNwZWMpOwotCWlmIChwYXRoc3BlYykKLQkJcHJ1bmVfZGlyZWN0b3J5KGRpciwgcGF0aHNwZWMsIGJhc2VsZW4pOwotfQotCiBzdGF0aWMgdm9pZCByZWZyZXNoKGludCB2ZXJib3NlLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpCiB7CiAJY2hhciAqc2VlbjsKQEAgLTE0OCw3ICsxMjEsNyBAQAogCWlmIChwYXRoc3BlYykgewogCQljb25zdCBjaGFyICoqcDsKIAkJZm9yIChwID0gcGF0aHNwZWM7ICpwOyBwKyspIHsKLQkJCWlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoc3RybGVuKCpwKSwgKnApKSB7CisJCQlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKCpwLCBzdHJsZW4oKnApKSkgewogCQkJCWludCBsZW4gPSBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDA7CiAJCQkJZGllKCInJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiLCAqcCArIGxlbik7CiAJCQl9CkBAIC0xODcsNiArMTYwLDUxIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGljIGludCBlZGl0X3BhdGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNoYXIgKmZpbGUgPSB4c3RyZHVwKGdpdF9wYXRoKCJBRERfRURJVC5wYXRjaCIpKTsKKwljb25zdCBjaGFyICphcHBseV9hcmd2W10gPSB7ICJhcHBseSIsICItLXJlY291bnQiLCAiLS1jYWNoZWQiLAorCQlmaWxlLCBOVUxMIH07CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGQ7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlpbnQgb3V0OworCXN0cnVjdCBzdGF0IHN0OworCisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZSAoIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIpOworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKwlyZXYuZGlmZm9wdC5jb250ZXh0ID0gNzsKKworCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldiwgTlVMTCk7CisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOworCW91dCA9IG9wZW4oZmlsZSwgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjQ0KTsKKwlpZiAob3V0IDwgMCkKKwkJZGllICgiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iLCBmaWxlKTsKKwlyZXYuZGlmZm9wdC5maWxlID0gZmRvcGVuKG91dCwgInciKTsKKwlyZXYuZGlmZm9wdC5jbG9zZV9maWxlID0gMTsKKwlpZiAocnVuX2RpZmZfZmlsZXMoJnJldiwgMCkpCisJCWRpZSAoIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIpOworCisJbGF1bmNoX2VkaXRvcihmaWxlLCBOVUxMLCBOVUxMKTsKKworCWlmIChzdGF0KGZpbGUsICZzdCkpCisJCWRpZV9lcnJubygiQ291bGQgbm90IHN0YXQgJyVzJyIsIGZpbGUpOworCWlmICghc3Quc3Rfc2l6ZSkKKwkJZGllKCJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iKTsKKworCW1lbXNldCgmY2hpbGQsIDAsIHNpemVvZihjaGlsZCkpOworCWNoaWxkLmdpdF9jbWQgPSAxOworCWNoaWxkLmFyZ3YgPSBhcHBseV9hcmd2OworCWlmIChydW5fY29tbWFuZCgmY2hpbGQpKQorCQlkaWUgKCJDb3VsZCBub3QgYXBwbHkgJyVzJyIsIGZpbGUpOworCisJdW5saW5rKGZpbGUpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGU7CiAKIHN0YXRpYyBjb25zdCBjaGFyIGlnbm9yZV9lcnJvcltdID0KQEAgLTIwMSw2ICsyMTksNyBAQAogCU9QVF9HUk9VUCgiIiksCiAJT1BUX0JPT0xFQU4oJ2knLCAiaW50ZXJhY3RpdmUiLCAmYWRkX2ludGVyYWN0aXZlLCAiaW50ZXJhY3RpdmUgcGlja2luZyIpLAogCU9QVF9CT09MRUFOKCdwJywgInBhdGNoIiwgJnBhdGNoX2ludGVyYWN0aXZlLCAiaW50ZXJhY3RpdmUgcGF0Y2hpbmciKSwKKwlPUFRfQk9PTEVBTignZScsICJlZGl0IiwgJmVkaXRfaW50ZXJhY3RpdmUsICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiKSwKIAlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZpZ25vcmVkX3RvbywgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIpLAogCU9QVF9CT09MRUFOKCd1JywgInVwZGF0ZSIsICZ0YWtlX3dvcmt0cmVlX2NoYW5nZXMsICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIpLAogCU9QVF9CT09MRUFOKCdOJywgImludGVudC10by1hZGQiLCAmaW50ZW50X3RvX2FkZCwgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIpLApAQCAtMjUwLDE0ICsyNjksMTkgQEAKIAlpbnQgYWRkX25ld19maWxlczsKIAlpbnQgcmVxdWlyZV9wYXRoc3BlYzsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fYWRkX29wdGlvbnMsCi0JCQkgIGJ1aWx0aW5fYWRkX3VzYWdlLCAwKTsKKwlnaXRfY29uZmlnKGFkZF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2FkZF9vcHRpb25zLAorCQkJICBidWlsdGluX2FkZF91c2FnZSwgUEFSU0VfT1BUX0tFRVBfQVJHVjApOwogCWlmIChwYXRjaF9pbnRlcmFjdGl2ZSkKIAkJYWRkX2ludGVyYWN0aXZlID0gMTsKIAlpZiAoYWRkX2ludGVyYWN0aXZlKQotCQlleGl0KGludGVyYWN0aXZlX2FkZChhcmdjLCBhcmd2LCBwcmVmaXgpKTsKKwkJZXhpdChpbnRlcmFjdGl2ZV9hZGQoYXJnYyAtIDEsIGFyZ3YgKyAxLCBwcmVmaXgpKTsKIAotCWdpdF9jb25maWcoYWRkX2NvbmZpZywgTlVMTCk7CisJaWYgKGVkaXRfaW50ZXJhY3RpdmUpCisJCXJldHVybihlZGl0X3BhdGNoKGFyZ2MsIGFyZ3YsIHByZWZpeCkpOworCWFyZ2MtLTsKKwlhcmd2Kys7CiAKIAlpZiAoYWRkcmVtb3ZlICYmIHRha2Vfd29ya3RyZWVfY2hhbmdlcykKIAkJZGllKCItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIpOwpAQCAtMjkwLDkgKzMxNCwyMSBAQAogCQlkaWUoImluZGV4IGZpbGUgY29ycnVwdCIpOwogCXRyZWF0X2dpdGxpbmtzKHBhdGhzcGVjKTsKIAotCWlmIChhZGRfbmV3X2ZpbGVzKQorCWlmIChhZGRfbmV3X2ZpbGVzKSB7CisJCWludCBiYXNlbGVuOworCisJCS8qIFNldCB1cCB0aGUgZGVmYXVsdCBnaXQgcG9yY2VsYWluIGV4Y2x1ZGVzICovCisJCW1lbXNldCgmZGlyLCAwLCBzaXplb2YoZGlyKSk7CisJCWlmICghaWdub3JlZF90b28pIHsKKwkJCWRpci5mbGFncyB8PSBESVJfQ09MTEVDVF9JR05PUkVEOworCQkJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoJmRpcik7CisJCX0KKwogCQkvKiBUaGlzIHBpY2tzIHVwIHRoZSBwYXRocyB0aGF0IGFyZSBub3QgdHJhY2tlZCAqLwotCQlmaWxsX2RpcmVjdG9yeSgmZGlyLCBwYXRoc3BlYywgaWdub3JlZF90b28pOworCQliYXNlbGVuID0gZmlsbF9kaXJlY3RvcnkoJmRpciwgcGF0aHNwZWMpOworCQlpZiAocGF0aHNwZWMpCisJCQlwcnVuZV9kaXJlY3RvcnkoJmRpciwgcGF0aHNwZWMsIGJhc2VsZW4pOworCX0KIAogCWlmIChyZWZyZXNoX29ubHkpIHsKIAkJcmVmcmVzaCh2ZXJib3NlLCBwYXRoc3BlYyk7CmRpZmYgLS1naXQgYS9idWlsdGluLWFwcGx5LmMgYi9idWlsdGluLWFwcGx5LmMKaW5kZXggNThkOTk4NS4uZGMwZmY1ZSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1hcHBseS5jCisrKyBiL2J1aWx0aW4tYXBwbHkuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgImJ1aWx0aW4uaCIKICNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgogI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAogLyoKICAqICAtLWNoZWNrIHR1cm5zIG9uIGNoZWNraW5nIHRoYXQgdGhlIHdvcmtpbmcgdHJlZSBtYXRjaGVzIHRoZQpAQCAtNDUsOSArNDYsMTEgQEAKIHN0YXRpYyBpbnQgbm9fYWRkOwogc3RhdGljIGNvbnN0IGNoYXIgKmZha2VfYW5jZXN0b3I7CiBzdGF0aWMgaW50IGxpbmVfdGVybWluYXRpb24gPSAnXG4nOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcF9jb250ZXh0ID0gVUxPTkdfTUFYOwotc3RhdGljIGNvbnN0IGNoYXIgYXBwbHlfdXNhZ2VbXSA9Ci0iZ2l0IGFwcGx5IFstLXN0YXRdIFstLW51bXN0YXRdIFstLXN1bW1hcnldIFstLWNoZWNrXSBbLS1pbmRleF0gWy0tY2FjaGVkXSBbLS1hcHBseV0gWy0tbm8tYWRkXSBbLS1pbmRleC1pbmZvXSBbLS1hbGxvdy1iaW5hcnktcmVwbGFjZW1lbnRdIFstLXJldmVyc2VdIFstLXJlamVjdF0gWy0tdmVyYm9zZV0gWy16XSBbLXBOVU1dIFstQ05VTV0gWy0td2hpdGVzcGFjZT08bm93YXJufHdhcm58Zml4fGVycm9yfGVycm9yLWFsbD5dIDxwYXRjaD4uLi4iOworc3RhdGljIHVuc2lnbmVkIGludCBwX2NvbnRleHQgPSBVSU5UX01BWDsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXBwbHlfdXNhZ2VbXSA9IHsKKwkiZ2l0IGFwcGx5IFtvcHRpb25zXSBbPHBhdGNoPi4uLl0iLAorCU5VTEwKK307CiAKIHN0YXRpYyBlbnVtIHdzX2Vycm9yX2FjdGlvbiB7CiAJbm93YXJuX3dzX2Vycm9yLApAQCAtNjEsNiArNjQsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKnBhdGNoX2lucHV0X2ZpbGU7CiBzdGF0aWMgY29uc3QgY2hhciAqcm9vdDsKIHN0YXRpYyBpbnQgcm9vdF9sZW47CitzdGF0aWMgaW50IHJlYWRfc3RkaW4gPSAxOworc3RhdGljIGludCBvcHRpb25zOwogCiBzdGF0aWMgdm9pZCBwYXJzZV93aGl0ZXNwYWNlX29wdGlvbihjb25zdCBjaGFyICpvcHRpb24pCiB7CkBAIC0yNzUsNyArMjgwLDcgQEAKIHN0YXRpYyB2b2lkIHJlYWRfcGF0Y2hfZmlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IGZkKQogewogCWlmIChzdHJidWZfcmVhZChzYiwgZmQsIDApIDwgMCkKLQkJZGllKCJnaXQgYXBwbHk6IHJlYWQgcmV0dXJuZWQgJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImdpdCBhcHBseTogZmFpbGVkIHRvIHJlYWQiKTsKIAogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBzb21lIHNsb3AgaW4gdGhlIGJ1ZmZlcgpAQCAtMzE1LDYgKzMyMCwyMCBAQAogCXJldHVybiAxOwogfQogCisvKiByZW1vdmUgZG91YmxlIHNsYXNoZXMgdG8gbWFrZSAtLWluZGV4IHdvcmsgd2l0aCBzdWNoIGZpbGVuYW1lcyAqLworc3RhdGljIGNoYXIgKnNxdWFzaF9zbGFzaChjaGFyICpuYW1lKQoreworCWludCBpID0gMCwgaiA9IDA7CisKKwl3aGlsZSAobmFtZVtpXSkgeworCQlpZiAoKG5hbWVbaisrXSA9IG5hbWVbaSsrXSkgPT0gJy8nKQorCQkJd2hpbGUgKG5hbWVbaV0gPT0gJy8nKQorCQkJCWkrKzsKKwl9CisJbmFtZVtqXSA9ICdcMCc7CisJcmV0dXJuIG5hbWU7Cit9CisKIHN0YXRpYyBjaGFyICpmaW5kX25hbWUoY29uc3QgY2hhciAqbGluZSwgY2hhciAqZGVmLCBpbnQgcF92YWx1ZSwgaW50IHRlcm1pbmF0ZSkKIHsKIAlpbnQgbGVuOwpAQCAtMzQ0LDcgKzM2Myw3IEBACiAJCQkJZnJlZShkZWYpOwogCQkJCWlmIChyb290KQogCQkJCQlzdHJidWZfaW5zZXJ0KCZuYW1lLCAwLCByb290LCByb290X2xlbik7Ci0JCQkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJm5hbWUsIE5VTEwpOworCQkJCXJldHVybiBzcXVhc2hfc2xhc2goc3RyYnVmX2RldGFjaCgmbmFtZSwgTlVMTCkpOwogCQkJfQogCQl9CiAJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKQEAgLTM2NCwxMCArMzgzLDEwIEBACiAJCQlzdGFydCA9IGxpbmU7CiAJfQogCWlmICghc3RhcnQpCi0JCXJldHVybiBkZWY7CisJCXJldHVybiBzcXVhc2hfc2xhc2goZGVmKTsKIAlsZW4gPSBsaW5lIC0gc3RhcnQ7CiAJaWYgKCFsZW4pCi0JCXJldHVybiBkZWY7CisJCXJldHVybiBzcXVhc2hfc2xhc2goZGVmKTsKIAogCS8qCiAJICogR2VuZXJhbGx5IHdlIHByZWZlciB0aGUgc2hvcnRlciBuYW1lLCBlc3BlY2lhbGx5CkBAIC0zNzgsNyArMzk3LDcgQEAKIAlpZiAoZGVmKSB7CiAJCWludCBkZWZsZW4gPSBzdHJsZW4oZGVmKTsKIAkJaWYgKGRlZmxlbiA8IGxlbiAmJiAhc3RybmNtcChzdGFydCwgZGVmLCBkZWZsZW4pKQotCQkJcmV0dXJuIGRlZjsKKwkJCXJldHVybiBzcXVhc2hfc2xhc2goZGVmKTsKIAkJZnJlZShkZWYpOwogCX0KIApAQCAtMzg3LDEwICs0MDYsMTAgQEAKIAkJc3RyY3B5KHJldCwgcm9vdCk7CiAJCW1lbWNweShyZXQgKyByb290X2xlbiwgc3RhcnQsIGxlbik7CiAJCXJldFtyb290X2xlbiArIGxlbl0gPSAnXDAnOwotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gc3F1YXNoX3NsYXNoKHJldCk7CiAJfQogCi0JcmV0dXJuIHhtZW1kdXB6KHN0YXJ0LCBsZW4pOworCXJldHVybiBzcXVhc2hfc2xhc2goeG1lbWR1cHooc3RhcnQsIGxlbikpOwogfQogCiBzdGF0aWMgaW50IGNvdW50X3NsYXNoZXMoY29uc3QgY2hhciAqY3ApCkBAIC0yMjY2LDYgKzIyODUsMjUgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIGl0ZW0tPnV0aWwgaW4gdGhlIGZpbGVuYW1lIHRhYmxlIHJlY29yZHMgdGhlIHN0YXR1cyBvZiB0aGUgcGF0aC4KKyAqIFVzdWFsbHkgaXQgcG9pbnRzIGF0IGEgcGF0Y2ggKHdob3NlIHJlc3VsdCByZWNvcmRzIHRoZSBjb250ZW50cworICogb2YgaXQgYWZ0ZXIgYXBwbHlpbmcgaXQpLCBidXQgaXQgY291bGQgYmUgUEFUSF9XQVNfREVMRVRFRCBmb3IgYQorICogcGF0aCB0aGF0IGEgcHJldmlvdXNseSBhcHBsaWVkIHBhdGNoIGhhcyBhbHJlYWR5IHJlbW92ZWQuCisgKi8KKyAjZGVmaW5lIFBBVEhfVE9fQkVfREVMRVRFRCAoKHN0cnVjdCBwYXRjaCAqKSAtMikKKyNkZWZpbmUgUEFUSF9XQVNfREVMRVRFRCAoKHN0cnVjdCBwYXRjaCAqKSAtMSkKKworc3RhdGljIGludCB0b19iZV9kZWxldGVkKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcmV0dXJuIHBhdGNoID09IFBBVEhfVE9fQkVfREVMRVRFRDsKK30KKworc3RhdGljIGludCB3YXNfZGVsZXRlZChzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXJldHVybiBwYXRjaCA9PSBQQVRIX1dBU19ERUxFVEVEOworfQorCiBzdGF0aWMgdm9pZCBhZGRfdG9fZm5fdGFibGUoc3RydWN0IHBhdGNoICpwYXRjaCkKIHsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKQEAgLTIyODYsNyArMjMyNCwyMiBAQAogCSAqLwogCWlmICgocGF0Y2gtPm5ld19uYW1lID09IE5VTEwpIHx8IChwYXRjaC0+aXNfcmVuYW1lKSkgewogCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KHBhdGNoLT5vbGRfbmFtZSwgJmZuX3RhYmxlKTsKLQkJaXRlbS0+dXRpbCA9IChzdHJ1Y3QgcGF0Y2ggKikgLTE7CisJCWl0ZW0tPnV0aWwgPSBQQVRIX1dBU19ERUxFVEVEOworCX0KK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9mbl90YWJsZShzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCS8qCisJICogc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgaW5jb21pbmcgZmlsZSBkZWxldGlvbgorCSAqLworCXdoaWxlIChwYXRjaCkgeworCQlpZiAoKHBhdGNoLT5uZXdfbmFtZSA9PSBOVUxMKSB8fCAocGF0Y2gtPmlzX3JlbmFtZSkpIHsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChwYXRjaC0+b2xkX25hbWUsICZmbl90YWJsZSk7CisJCQlpdGVtLT51dGlsID0gUEFUSF9UT19CRV9ERUxFVEVEOworCQl9CisJCXBhdGNoID0gcGF0Y2gtPm5leHQ7CiAJfQogfQogCkBAIC0yMjk5LDggKzIzNTIsOCBAQAogCXN0cnVjdCBwYXRjaCAqdHBhdGNoOwogCiAJaWYgKCEocGF0Y2gtPmlzX2NvcHkgfHwgcGF0Y2gtPmlzX3JlbmFtZSkgJiYKLQkgICAgKCh0cGF0Y2ggPSBpbl9mbl90YWJsZShwYXRjaC0+b2xkX25hbWUpKSAhPSBOVUxMKSkgewotCQlpZiAodHBhdGNoID09IChzdHJ1Y3QgcGF0Y2ggKikgLTEpIHsKKwkgICAgKHRwYXRjaCA9IGluX2ZuX3RhYmxlKHBhdGNoLT5vbGRfbmFtZSkpICE9IE5VTEwgJiYgIXRvX2JlX2RlbGV0ZWQodHBhdGNoKSkgeworCQlpZiAod2FzX2RlbGV0ZWQodHBhdGNoKSkgewogCQkJcmV0dXJuIGVycm9yKCJwYXRjaCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiLAogCQkJCXBhdGNoLT5vbGRfbmFtZSk7CiAJCX0KQEAgLTIzNTUsNyArMjQwOCw3IEBACiAJCSAqIEluIHN1Y2ggYSBjYXNlLCBwYXRoICJuZXdfbmFtZSIgZG9lcyBub3QgZXhpc3QgYXMKIAkJICogZmFyIGFzIGdpdCBpcyBjb25jZXJuZWQuCiAJCSAqLwotCQlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHN0cmxlbihuZXdfbmFtZSksIG5ld19uYW1lKSkKKwkJaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChuZXdfbmFtZSwgc3RybGVuKG5ld19uYW1lKSkpCiAJCQlyZXR1cm4gMDsKIAogCQlyZXR1cm4gZXJyb3IoIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIsIG5ld19uYW1lKTsKQEAgLTIzOTQsMTAgKzI0NDcsOSBAQAogCWFzc2VydChwYXRjaC0+aXNfbmV3IDw9IDApOwogCiAJaWYgKCEocGF0Y2gtPmlzX2NvcHkgfHwgcGF0Y2gtPmlzX3JlbmFtZSkgJiYKLQkgICAgKHRwYXRjaCA9IGluX2ZuX3RhYmxlKG9sZF9uYW1lKSkgIT0gTlVMTCkgewotCQlpZiAodHBhdGNoID09IChzdHJ1Y3QgcGF0Y2ggKikgLTEpIHsKKwkgICAgKHRwYXRjaCA9IGluX2ZuX3RhYmxlKG9sZF9uYW1lKSkgIT0gTlVMTCAmJiAhdG9fYmVfZGVsZXRlZCh0cGF0Y2gpKSB7CisJCWlmICh3YXNfZGVsZXRlZCh0cGF0Y2gpKQogCQkJcmV0dXJuIGVycm9yKCIlczogaGFzIGJlZW4gZGVsZXRlZC9yZW5hbWVkIiwgb2xkX25hbWUpOwotCQl9CiAJCXN0X21vZGUgPSB0cGF0Y2gtPm5ld19tb2RlOwogCX0gZWxzZSBpZiAoIWNhY2hlZCkgewogCQlzdGF0X3JldCA9IGxzdGF0KG9sZF9uYW1lLCBzdCk7CkBAIC0yNDA1LDYgKzI0NTcsOSBAQAogCQkJcmV0dXJuIGVycm9yKCIlczogJXMiLCBvbGRfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIAl9CiAKKwlpZiAodG9fYmVfZGVsZXRlZCh0cGF0Y2gpKQorCQl0cGF0Y2ggPSBOVUxMOworCiAJaWYgKGNoZWNrX2luZGV4ICYmICF0cGF0Y2gpIHsKIAkJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKG9sZF9uYW1lLCBzdHJsZW4ob2xkX25hbWUpKTsKIAkJaWYgKHBvcyA8IDApIHsKQEAgLTI0NDYsNyArMjUwMSw3IEBACiAJaWYgKChzdF9tb2RlIF4gcGF0Y2gtPm9sZF9tb2RlKSAmIFNfSUZNVCkKIAkJcmV0dXJuIGVycm9yKCIlczogd3JvbmcgdHlwZSIsIG9sZF9uYW1lKTsKIAlpZiAoc3RfbW9kZSAhPSBwYXRjaC0+b2xkX21vZGUpCi0JCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvXG4iLAorCQl3YXJuaW5nKCIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iLAogCQkJb2xkX25hbWUsIHN0X21vZGUsIHBhdGNoLT5vbGRfbW9kZSk7CiAJaWYgKCFwYXRjaC0+bmV3X21vZGUgJiYgIXBhdGNoLT5pc19kZWxldGUpCiAJCXBhdGNoLT5uZXdfbW9kZSA9IHN0X21vZGU7CkBAIC0yNDY2LDYgKzI1MjEsNyBAQAogCWNvbnN0IGNoYXIgKm5ld19uYW1lID0gcGF0Y2gtPm5ld19uYW1lOwogCWNvbnN0IGNoYXIgKm5hbWUgPSBvbGRfbmFtZSA/IG9sZF9uYW1lIDogbmV3X25hbWU7CiAJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IE5VTEw7CisJc3RydWN0IHBhdGNoICp0cGF0Y2g7CiAJaW50IG9rX2lmX2V4aXN0czsKIAlpbnQgc3RhdHVzOwogCkBAIC0yNDc2LDcgKzI1MzIsOCBAQAogCQlyZXR1cm4gc3RhdHVzOwogCW9sZF9uYW1lID0gcGF0Y2gtPm9sZF9uYW1lOwogCi0JaWYgKGluX2ZuX3RhYmxlKG5ld19uYW1lKSA9PSAoc3RydWN0IHBhdGNoICopIC0xKQorCWlmICgodHBhdGNoID0gaW5fZm5fdGFibGUobmV3X25hbWUpKSAmJgorCQkJKHdhc19kZWxldGVkKHRwYXRjaCkgfHwgdG9fYmVfZGVsZXRlZCh0cGF0Y2gpKSkKIAkJLyoKIAkJICogQSB0eXBlLWNoYW5nZSBkaWZmIGlzIGFsd2F5cyBzcGxpdCBpbnRvIGEgcGF0Y2ggdG8KIAkJICogZGVsZXRlIG9sZCwgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBwYXRjaCB0bwpAQCAtMjUyOCw2ICsyNTg1LDcgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAorCXByZXBhcmVfZm5fdGFibGUocGF0Y2gpOwogCXdoaWxlIChwYXRjaCkgewogCQlpZiAoYXBwbHlfdmVyYm9zZWx5KQogCQkJc2F5X3BhdGNoX25hbWUoc3RkZXJyLApAQCAtMjU1Niw3ICsyNjE0LDcgQEAKIHN0YXRpYyB2b2lkIGJ1aWxkX2Zha2VfYW5jZXN0b3Ioc3RydWN0IHBhdGNoICpsaXN0LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKIAlzdHJ1Y3QgcGF0Y2ggKnBhdGNoOwotCXN0cnVjdCBpbmRleF9zdGF0ZSByZXN1bHQgPSB7IDAgfTsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgcmVzdWx0ID0geyBOVUxMIH07CiAJaW50IGZkOwogCiAJLyogT25jZSB3ZSBzdGFydCBzdXBwb3J0aW5nIHRoZSByZXZlcnNlIHBhdGNoLCBpdCBtYXkgYmUKQEAgLTI3MzcsNyArMjc5NSw3IEBACiAJCQlpZiAocm1kaXIocGF0Y2gtPm9sZF9uYW1lKSkKIAkJCQl3YXJuaW5nKCJ1bmFibGUgdG8gcmVtb3ZlIHN1Ym1vZHVsZSAlcyIsCiAJCQkJCXBhdGNoLT5vbGRfbmFtZSk7Ci0JCX0gZWxzZSBpZiAoIXVubGluayhwYXRjaC0+b2xkX25hbWUpICYmIHJtZGlyX2VtcHR5KSB7CisJCX0gZWxzZSBpZiAoIXVubGlua19vcl93YXJuKHBhdGNoLT5vbGRfbmFtZSkgJiYgcm1kaXJfZW1wdHkpIHsKIAkJCXJlbW92ZV9wYXRoKHBhdGNoLT5vbGRfbmFtZSk7CiAJCX0KIAl9CkBAIC0yNzY1LDggKzI4MjMsOCBAQAogCX0gZWxzZSB7CiAJCWlmICghY2FjaGVkKSB7CiAJCQlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApCi0JCQkJZGllKCJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJXMiLAotCQkJCSAgICBwYXRoKTsKKwkJCQlkaWVfZXJybm8oInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIiwKKwkJCQkJICBwYXRoKTsKIAkJCWZpbGxfc3RhdF9jYWNoZV9pbmZvKGNlLCAmc3QpOwogCQl9CiAJCWlmICh3cml0ZV9zaGExX2ZpbGUoYnVmLCBzaXplLCBibG9iX3R5cGUsIGNlLT5zaGExKSA8IDApCkBAIC0yODA2LDcgKzI4NjQsNyBAQAogCXN0cmJ1Zl9yZWxlYXNlKCZuYnVmKTsKIAogCWlmIChjbG9zZShmZCkgPCAwKQotCQlkaWUoImNsb3NpbmcgZmlsZSAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNsb3NpbmcgZmlsZSAnJXMnIiwgcGF0aCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NDcsNyArMjkwNSw3IEBACiAJCQlpZiAoIXRyeV9jcmVhdGVfZmlsZShuZXdwYXRoLCBtb2RlLCBidWYsIHNpemUpKSB7CiAJCQkJaWYgKCFyZW5hbWUobmV3cGF0aCwgcGF0aCkpCiAJCQkJCXJldHVybjsKLQkJCQl1bmxpbmsobmV3cGF0aCk7CisJCQkJdW5saW5rX29yX3dhcm4obmV3cGF0aCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoZXJybm8gIT0gRUVYSVNUKQpAQCAtMjg1NSw3ICsyOTEzLDcgQEAKIAkJCSsrbnI7CiAJCX0KIAl9Ci0JZGllKCJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyBtb2RlICVvIiwgcGF0aCwgbW9kZSk7CisJZGllX2Vycm5vKCJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iLCBwYXRoLCBtb2RlKTsKIH0KIAogc3RhdGljIHZvaWQgY3JlYXRlX2ZpbGUoc3RydWN0IHBhdGNoICpwYXRjaCkKQEAgLTI5MjcsOCArMjk4NSw3IEBACiAJY250ID0gc3RybGVuKHBhdGNoLT5uZXdfbmFtZSk7CiAJaWYgKEFSUkFZX1NJWkUobmFtZWJ1ZikgPD0gY250ICsgNSkgewogCQljbnQgPSBBUlJBWV9TSVpFKG5hbWVidWYpIC0gNTsKLQkJZnByaW50ZihzdGRlcnIsCi0JCQkid2FybmluZzogdHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIiwKKwkJd2FybmluZygidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIiwKIAkJCWNudCAtIDEsIHBhdGNoLT5uZXdfbmFtZSk7CiAJfQogCW1lbWNweShuYW1lYnVmLCBwYXRjaC0+bmV3X25hbWUsIGNudCk7CkBAIC0zMTM4LDE1NiArMzE5NSwxNjggQEAKIAlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KIAorc3RhdGljIGludCBvcHRpb25fcGFyc2VfZXhjbHVkZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJYWRkX25hbWVfbGltaXQoYXJnLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfaW5jbHVkZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJYWRkX25hbWVfbGltaXQoYXJnLCAwKTsKKwloYXNfaW5jbHVkZSA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3AoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlwX3ZhbHVlID0gYXRvaShhcmcpOworCXBfdmFsdWVfa25vd24gPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV96KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KQorCQlsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwllbHNlCisJCWxpbmVfdGVybWluYXRpb24gPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV93aGl0ZXNwYWNlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwljb25zdCBjaGFyICoqd2hpdGVzcGFjZV9vcHRpb24gPSBvcHQtPnZhbHVlOworCisJKndoaXRlc3BhY2Vfb3B0aW9uID0gYXJnOworCXBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX2RpcmVjdG9yeShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlyb290X2xlbiA9IHN0cmxlbihhcmcpOworCWlmIChyb290X2xlbiAmJiBhcmdbcm9vdF9sZW4gLSAxXSAhPSAnLycpIHsKKwkJY2hhciAqbmV3X3Jvb3Q7CisJCXJvb3QgPSBuZXdfcm9vdCA9IHhtYWxsb2Mocm9vdF9sZW4gKyAyKTsKKwkJc3RyY3B5KG5ld19yb290LCBhcmcpOworCQlzdHJjcHkobmV3X3Jvb3QgKyByb290X2xlbisrLCAiLyIpOworCX0gZWxzZQorCQlyb290ID0gYXJnOworCXJldHVybiAwOworfQogCiBpbnQgY21kX2FwcGx5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqdW51c2VkX3ByZWZpeCkKIHsKIAlpbnQgaTsKLQlpbnQgcmVhZF9zdGRpbiA9IDE7Ci0JaW50IG9wdGlvbnMgPSAwOwogCWludCBlcnJzID0gMDsKIAlpbnQgaXNfbm90X2dpdGRpcjsKKwlpbnQgYmluYXJ5OworCWludCBmb3JjZV9hcHBseSA9IDA7CiAKIAljb25zdCBjaGFyICp3aGl0ZXNwYWNlX29wdGlvbiA9IE5VTEw7CiAKKwlzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fYXBwbHlfb3B0aW9uc1tdID0geworCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImV4Y2x1ZGUiLCBOVUxMLCAicGF0aCIsCisJCQkiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIsCisJCQkwLCBvcHRpb25fcGFyc2VfZXhjbHVkZSB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImluY2x1ZGUiLCBOVUxMLCAicGF0aCIsCisJCQkiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIsCisJCQkwLCBvcHRpb25fcGFyc2VfaW5jbHVkZSB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ3AnLCBOVUxMLCBOVUxMLCAibnVtIiwKKwkJCSJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIsCisJCQkwLCBvcHRpb25fcGFyc2VfcCB9LAorCQlPUFRfQk9PTEVBTigwLCAibm8tYWRkIiwgJm5vX2FkZCwKKwkJCSJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIiksCisJCU9QVF9CT09MRUFOKDAsICJzdGF0IiwgJmRpZmZzdGF0LAorCQkJImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIpLAorCQl7IE9QVElPTl9CT09MRUFOLCAwLCAiYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IiwgJmJpbmFyeSwKKwkJICBOVUxMLCAib2xkIG9wdGlvbiwgbm93IG5vLW9wIiwKKwkJICBQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX05PQVJHIH0sCisJCXsgT1BUSU9OX0JPT0xFQU4sIDAsICJiaW5hcnkiLCAmYmluYXJ5LAorCQkgIE5VTEwsICJvbGQgb3B0aW9uLCBub3cgbm8tb3AiLAorCQkgIFBBUlNFX09QVF9ISURERU4gfCBQQVJTRV9PUFRfTk9BUkcgfSwKKwkJT1BUX0JPT0xFQU4oMCwgIm51bXN0YXQiLCAmbnVtc3RhdCwKKwkJCSJzaG93cyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIpLAorCQlPUFRfQk9PTEVBTigwLCAic3VtbWFyeSIsICZzdW1tYXJ5LAorCQkJImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiKSwKKwkJT1BUX0JPT0xFQU4oMCwgImNoZWNrIiwgJmNoZWNrLAorCQkJImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiKSwKKwkJT1BUX0JPT0xFQU4oMCwgImluZGV4IiwgJmNoZWNrX2luZGV4LAorCQkJIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIpLAorCQlPUFRfQk9PTEVBTigwLCAiY2FjaGVkIiwgJmNhY2hlZCwKKwkJCSJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIpLAorCQlPUFRfQk9PTEVBTigwLCAiYXBwbHkiLCAmZm9yY2VfYXBwbHksCisJCQkiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiKSwKKwkJT1BUX0ZJTEVOQU1FKDAsICJidWlsZC1mYWtlLWFuY2VzdG9yIiwgJmZha2VfYW5jZXN0b3IsCisJCQkiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICd6JywgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIsCisJCQlQQVJTRV9PUFRfTk9BUkcsIG9wdGlvbl9wYXJzZV96IH0sCisJCU9QVF9JTlRFR0VSKCdDJywgTlVMTCwgJnBfY29udGV4dCwKKwkJCQkiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIiksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAid2hpdGVzcGFjZSIsICZ3aGl0ZXNwYWNlX29wdGlvbiwgImFjdGlvbiIsCisJCQkiZGV0ZWN0IG5ldyBvciBtb2RpZmllZCBsaW5lcyB0aGF0IGhhdmUgd2hpdGVzcGFjZSBlcnJvcnMiLAorCQkJMCwgb3B0aW9uX3BhcnNlX3doaXRlc3BhY2UgfSwKKwkJT1BUX0JPT0xFQU4oJ1InLCAicmV2ZXJzZSIsICZhcHBseV9pbl9yZXZlcnNlLAorCQkJImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIiksCisJCU9QVF9CT09MRUFOKDAsICJ1bmlkaWZmLXplcm8iLCAmdW5pZGlmZl96ZXJvLAorCQkJImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IiksCisJCU9QVF9CT09MRUFOKDAsICJyZWplY3QiLCAmYXBwbHlfd2l0aF9yZWplY3QsCisJCQkibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiKSwKKwkJT1BUX19WRVJCT1NFKCZhcHBseV92ZXJib3NlbHkpLAorCQlPUFRfQklUKDAsICJpbmFjY3VyYXRlLWVvZiIsICZvcHRpb25zLAorCQkJInRvbGVyYXRlIGluY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgbmV3LWxpbmUgYXQgdGhlIGVuZCBvZiBmaWxlIiwKKwkJCUlOQUNDVVJBVEVfRU9GKSwKKwkJT1BUX0JJVCgwLCAicmVjb3VudCIsICZvcHRpb25zLAorCQkJImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIsCisJCQlSRUNPVU5UKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJkaXJlY3RvcnkiLCBOVUxMLCAicm9vdCIsCisJCQkicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIsCisJCQkwLCBvcHRpb25fcGFyc2VfZGlyZWN0b3J5IH0sCisJCU9QVF9FTkQoKQorCX07CisKIAlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmaXNfbm90X2dpdGRpcik7CiAJcHJlZml4X2xlbmd0aCA9IHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMDsKIAlnaXRfY29uZmlnKGdpdF9hcHBseV9jb25maWcsIE5VTEwpOwogCWlmIChhcHBseV9kZWZhdWx0X3doaXRlc3BhY2UpCiAJCXBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKGFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSk7CiAKLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2FwcGx5X29wdGlvbnMsCisJCQlhcHBseV91c2FnZSwgMCk7CisKKwlpZiAoYXBwbHlfd2l0aF9yZWplY3QpCisJCWFwcGx5ID0gYXBwbHlfdmVyYm9zZWx5ID0gMTsKKwlpZiAoIWZvcmNlX2FwcGx5ICYmIChkaWZmc3RhdCB8fCBudW1zdGF0IHx8IHN1bW1hcnkgfHwgY2hlY2sgfHwgZmFrZV9hbmNlc3RvcikpCisJCWFwcGx5ID0gMDsKKwlpZiAoY2hlY2tfaW5kZXggJiYgaXNfbm90X2dpdGRpcikKKwkJZGllKCItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5Iik7CisJaWYgKGNhY2hlZCkgeworCQlpZiAoaXNfbm90X2dpdGRpcikKKwkJCWRpZSgiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiKTsKKwkJY2hlY2tfaW5kZXggPSAxOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CiAJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07Ci0JCWNoYXIgKmVuZDsKIAkJaW50IGZkOwogCiAJCWlmICghc3RyY21wKGFyZywgIi0iKSkgewogCQkJZXJycyB8PSBhcHBseV9wYXRjaCgwLCAiPHN0ZGluPiIsIG9wdGlvbnMpOwogCQkJcmVhZF9zdGRpbiA9IDA7CiAJCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWV4Y2x1ZGU9IikpIHsKLQkJCWFkZF9uYW1lX2xpbWl0KGFyZyArIDEwLCAxKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghcHJlZml4Y21wKGFyZywgIi0taW5jbHVkZT0iKSkgewotCQkJYWRkX25hbWVfbGltaXQoYXJnICsgMTAsIDApOwotCQkJaGFzX2luY2x1ZGUgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLXAiKSkgewotCQkJcF92YWx1ZSA9IGF0b2koYXJnICsgMik7Ci0JCQlwX3ZhbHVlX2tub3duID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tbm8tYWRkIikpIHsKLQkJCW5vX2FkZCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLXN0YXQiKSkgewotCQkJYXBwbHkgPSAwOwotCQkJZGlmZnN0YXQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1hbGxvdy1iaW5hcnktcmVwbGFjZW1lbnQiKSB8fAotCQkgICAgIXN0cmNtcChhcmcsICItLWJpbmFyeSIpKSB7Ci0JCQljb250aW51ZTsgLyogbm93IG5vLW9wICovCi0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1udW1zdGF0IikpIHsKLQkJCWFwcGx5ID0gMDsKLQkJCW51bXN0YXQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdW1tYXJ5IikpIHsKLQkJCWFwcGx5ID0gMDsKLQkJCXN1bW1hcnkgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1jaGVjayIpKSB7Ci0JCQlhcHBseSA9IDA7Ci0JCQljaGVjayA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLWluZGV4IikpIHsKLQkJCWlmIChpc19ub3RfZ2l0ZGlyKQotCQkJCWRpZSgiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIpOwotCQkJY2hlY2tfaW5kZXggPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1jYWNoZWQiKSkgewotCQkJaWYgKGlzX25vdF9naXRkaXIpCi0JCQkJZGllKCItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIpOwotCQkJY2hlY2tfaW5kZXggPSAxOwotCQkJY2FjaGVkID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tYXBwbHkiKSkgewotCQkJYXBwbHkgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1idWlsZC1mYWtlLWFuY2VzdG9yIikpIHsKLQkJCWFwcGx5ID0gMDsKLQkJCWlmICgrK2kgPj0gYXJnYykKLQkJCQlkaWUgKCJuZWVkIGEgZmlsZW5hbWUiKTsKLQkJCWZha2VfYW5jZXN0b3IgPSBhcmd2W2ldOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLXoiKSkgewotCQkJbGluZV90ZXJtaW5hdGlvbiA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXByZWZpeGNtcChhcmcsICItQyIpKSB7Ci0JCQlwX2NvbnRleHQgPSBzdHJ0b3VsKGFyZyArIDIsICZlbmQsIDApOwotCQkJaWYgKCplbmQgIT0gJ1wwJykKLQkJCQlkaWUoInVucmVjb2duaXplZCBjb250ZXh0IGNvdW50ICclcyciLCBhcmcgKyAyKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghcHJlZml4Y21wKGFyZywgIi0td2hpdGVzcGFjZT0iKSkgewotCQkJd2hpdGVzcGFjZV9vcHRpb24gPSBhcmcgKyAxMzsKLQkJCXBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKGFyZyArIDEzKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi1SIikgfHwgIXN0cmNtcChhcmcsICItLXJldmVyc2UiKSkgewotCQkJYXBwbHlfaW5fcmV2ZXJzZSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLXVuaWRpZmYtemVybyIpKSB7Ci0JCQl1bmlkaWZmX3plcm8gPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1yZWplY3QiKSkgewotCQkJYXBwbHkgPSBhcHBseV93aXRoX3JlamVjdCA9IGFwcGx5X3ZlcmJvc2VseSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItdiIpIHx8ICFzdHJjbXAoYXJnLCAiLS12ZXJib3NlIikpIHsKLQkJCWFwcGx5X3ZlcmJvc2VseSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLWluYWNjdXJhdGUtZW9mIikpIHsKLQkJCW9wdGlvbnMgfD0gSU5BQ0NVUkFURV9FT0Y7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLXJlY291bnQiKSkgewotCQkJb3B0aW9ucyB8PSBSRUNPVU5UOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1kaXJlY3Rvcnk9IikpIHsKLQkJCWFyZyArPSBzdHJsZW4oIi0tZGlyZWN0b3J5PSIpOwotCQkJcm9vdF9sZW4gPSBzdHJsZW4oYXJnKTsKLQkJCWlmIChyb290X2xlbiAmJiBhcmdbcm9vdF9sZW4gLSAxXSAhPSAnLycpIHsKLQkJCQljaGFyICpuZXdfcm9vdDsKLQkJCQlyb290ID0gbmV3X3Jvb3QgPSB4bWFsbG9jKHJvb3RfbGVuICsgMik7Ci0JCQkJc3RyY3B5KG5ld19yb290LCBhcmcpOwotCQkJCXN0cmNweShuZXdfcm9vdCArIHJvb3RfbGVuKyssICIvIik7Ci0JCQl9IGVsc2UKLQkJCQlyb290ID0gYXJnOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKDAgPCBwcmVmaXhfbGVuZ3RoKQorCQl9IGVsc2UgaWYgKDAgPCBwcmVmaXhfbGVuZ3RoKQogCQkJYXJnID0gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYXJnKTsKIAogCQlmZCA9IG9wZW4oYXJnLCBPX1JET05MWSk7CiAJCWlmIChmZCA8IDApCi0JCQlkaWUoImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiLCBhcmcsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImNhbid0IG9wZW4gcGF0Y2ggJyVzJyIsIGFyZyk7CiAJCXJlYWRfc3RkaW4gPSAwOwogCQlzZXRfZGVmYXVsdF93aGl0ZXNwYWNlX21vZGUod2hpdGVzcGFjZV9vcHRpb24pOwogCQllcnJzIHw9IGFwcGx5X3BhdGNoKGZkLCBhcmcsIG9wdGlvbnMpOwpAQCAtMzMwMSw4ICszMzcwLDggQEAKIAkJICAgIHNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnMgPCB3aGl0ZXNwYWNlX2Vycm9yKSB7CiAJCQlpbnQgc3F1ZWxjaGVkID0KIAkJCQl3aGl0ZXNwYWNlX2Vycm9yIC0gc3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9yczsKLQkJCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogc3F1ZWxjaGVkICVkICIKLQkJCQkid2hpdGVzcGFjZSBlcnJvciVzXG4iLAorCQkJd2FybmluZygic3F1ZWxjaGVkICVkICIKKwkJCQkid2hpdGVzcGFjZSBlcnJvciVzIiwKIAkJCQlzcXVlbGNoZWQsCiAJCQkJc3F1ZWxjaGVkID09IDEgPyAiIiA6ICJzIik7CiAJCX0KQEAgLTMzMTIsMTIgKzMzODEsMTIgQEAKIAkJCSAgICB3aGl0ZXNwYWNlX2Vycm9yID09IDEgPyAiIiA6ICJzIiwKIAkJCSAgICB3aGl0ZXNwYWNlX2Vycm9yID09IDEgPyAicyIgOiAiIik7CiAJCWlmIChhcHBsaWVkX2FmdGVyX2ZpeGluZ193cyAmJiBhcHBseSkKLQkJCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogJWQgbGluZSVzIGFwcGxpZWQgYWZ0ZXIiCi0JCQkJIiBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuXG4iLAorCQkJd2FybmluZygiJWQgbGluZSVzIGFwcGxpZWQgYWZ0ZXIiCisJCQkJIiBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIiwKIAkJCQlhcHBsaWVkX2FmdGVyX2ZpeGluZ193cywKIAkJCQlhcHBsaWVkX2FmdGVyX2ZpeGluZ193cyA9PSAxID8gIiIgOiAicyIpOwogCQllbHNlIGlmICh3aGl0ZXNwYWNlX2Vycm9yKQotCQkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiAlZCBsaW5lJXMgYWRkJXMgd2hpdGVzcGFjZSBlcnJvcnMuXG4iLAorCQkJd2FybmluZygiJWQgbGluZSVzIGFkZCVzIHdoaXRlc3BhY2UgZXJyb3JzLiIsCiAJCQkJd2hpdGVzcGFjZV9lcnJvciwKIAkJCQl3aGl0ZXNwYWNlX2Vycm9yID09IDEgPyAiIiA6ICJzIiwKIAkJCQl3aGl0ZXNwYWNlX2Vycm9yID09IDEgPyAicyIgOiAiIik7CmRpZmYgLS1naXQgYS9idWlsdGluLWFyY2hpdmUuYyBiL2J1aWx0aW4tYXJjaGl2ZS5jCmluZGV4IDVjZWVjNDMuLmY5YTRiZWEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tYXJjaGl2ZS5jCisrKyBiL2J1aWx0aW4tYXJjaGl2ZS5jCkBAIC01LDQ0ICs1LDM1IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJidWlsdGluLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJwa3QtbGluZS5oIgogI2luY2x1ZGUgInNpZGViYW5kLmgiCiAKLXN0YXRpYyBpbnQgcnVuX3JlbW90ZV9hcmNoaXZlcihjb25zdCBjaGFyICpyZW1vdGUsIGludCBhcmdjLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKiphcmd2KQorc3RhdGljIHZvaWQgY3JlYXRlX291dHB1dF9maWxlKGNvbnN0IGNoYXIgKm91dHB1dF9maWxlKQoreworCWludCBvdXRwdXRfZmQgPSBvcGVuKG91dHB1dF9maWxlLCBPX0NSRUFUIHwgT19XUk9OTFkgfCBPX1RSVU5DLCAwNjY2KTsKKwlpZiAob3V0cHV0X2ZkIDwgMCkKKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIiwgb3V0cHV0X2ZpbGUpOworCWlmIChvdXRwdXRfZmQgIT0gMSkgeworCQlpZiAoZHVwMihvdXRwdXRfZmQsIDEpIDwgMCkKKwkJCWRpZV9lcnJubygiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIpOworCQllbHNlCisJCQljbG9zZShvdXRwdXRfZmQpOworCX0KK30KKworc3RhdGljIGludCBydW5fcmVtb3RlX2FyY2hpdmVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCSAgICAgICBjb25zdCBjaGFyICpyZW1vdGUsIGNvbnN0IGNoYXIgKmV4ZWMpCiB7CiAJY2hhciAqdXJsLCBidWZbTEFSR0VfUEFDS0VUX01BWF07CiAJaW50IGZkWzJdLCBpLCBsZW4sIHJ2OwogCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uOwotCWNvbnN0IGNoYXIgKmV4ZWMgPSAiZ2l0LXVwbG9hZC1hcmNoaXZlIjsKLQlpbnQgZXhlY19hdCA9IDAsIGV4ZWNfdmFsdWVfYXQgPSAwOwotCi0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewotCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOwotCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWV4ZWM9IikpIHsKLQkJCWlmIChleGVjX2F0KQotCQkJCWRpZSgibXVsdGlwbGUgLS1leGVjIHNwZWNpZmllZCIpOwotCQkJZXhlYyA9IGFyZyArIDc7Ci0JCQlleGVjX2F0ID0gaTsKLQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZXhlYyIpKSB7Ci0JCQlpZiAoZXhlY19hdCkKLQkJCQlkaWUoIm11bHRpcGxlIC0tZXhlYyBzcGVjaWZpZWQiKTsKLQkJCWlmIChpICsgMSA+PSBhcmdjKQotCQkJCWRpZSgib3B0aW9uIC0tZXhlYyByZXF1aXJlcyBhIHZhbHVlIik7Ci0JCQlleGVjID0gYXJndltpICsgMV07Ci0JCQlleGVjX2F0ID0gaTsKLQkJCWV4ZWNfdmFsdWVfYXQgPSArK2k7Ci0JCX0KLQl9CiAKIAl1cmwgPSB4c3RyZHVwKHJlbW90ZSk7CiAJY29ubiA9IGdpdF9jb25uZWN0KGZkLCB1cmwsIGV4ZWMsIDApOwogCi0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewotCQlpZiAoaSA9PSBleGVjX2F0IHx8IGkgPT0gZXhlY192YWx1ZV9hdCkKLQkJCWNvbnRpbnVlOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCiAJCXBhY2tldF93cml0ZShmZFsxXSwgImFyZ3VtZW50ICVzXG4iLCBhcmd2W2ldKTsKLQl9CiAJcGFja2V0X2ZsdXNoKGZkWzFdKTsKIAogCWxlbiA9IHBhY2tldF9yZWFkX2xpbmUoZmRbMF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwpAQCAtNjEsNyArNTIsNyBAQAogCQlkaWUoImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIik7CiAKIAkvKiBOb3csIHN0YXJ0IHJlYWRpbmcgZnJvbSBmZFswXSBhbmQgc3BpdCBpdCBvdXQgdG8gc3Rkb3V0ICovCi0JcnYgPSByZWN2X3NpZGViYW5kKCJhcmNoaXZlIiwgZmRbMF0sIDEsIDIpOworCXJ2ID0gcmVjdl9zaWRlYmFuZCgiYXJjaGl2ZSIsIGZkWzBdLCAxKTsKIAljbG9zZShmZFswXSk7CiAJY2xvc2UoZmRbMV0pOwogCXJ2IHw9IGZpbmlzaF9jb25uZWN0KGNvbm4pOwpAQCAtNjksNTEgKzYwLDM0IEBACiAJcmV0dXJuICEhcnY7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICpleHRyYWN0X3JlbW90ZV9hcmcoaW50ICphYywgY29uc3QgY2hhciAqKmF2KQotewotCWludCBpeCwgaXksIGNudCA9ICphYzsKLQlpbnQgbm9fbW9yZV9vcHRpb25zID0gMDsKLQljb25zdCBjaGFyICpyZW1vdGUgPSBOVUxMOwotCi0JZm9yIChpeCA9IGl5ID0gMTsgaXggPCBjbnQ7IGl4KyspIHsKLQkJY29uc3QgY2hhciAqYXJnID0gYXZbaXhdOwotCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKQotCQkJbm9fbW9yZV9vcHRpb25zID0gMTsKLQkJaWYgKCFub19tb3JlX29wdGlvbnMpIHsKLQkJCWlmICghcHJlZml4Y21wKGFyZywgIi0tcmVtb3RlPSIpKSB7Ci0JCQkJaWYgKHJlbW90ZSkKLQkJCQkJZGllKCJNdWx0aXBsZSAtLXJlbW90ZSBzcGVjaWZpZWQiKTsKLQkJCQlyZW1vdGUgPSBhcmcgKyA5OwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmVtb3RlIikpIHsKLQkJCQlpZiAocmVtb3RlKQotCQkJCQlkaWUoIk11bHRpcGxlIC0tcmVtb3RlIHNwZWNpZmllZCIpOwotCQkJCWlmICgrK2l4ID49IGNudCkKLQkJCQkJZGllKCJvcHRpb24gLS1yZW1vdGUgcmVxdWlyZXMgYSB2YWx1ZSIpOwotCQkJCXJlbW90ZSA9IGF2W2l4XTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChhcmdbMF0gIT0gJy0nKQotCQkJCW5vX21vcmVfb3B0aW9ucyA9IDE7Ci0JCX0KLQkJaWYgKGl4ICE9IGl5KQotCQkJYXZbaXldID0gYXJnOwotCQlpeSsrOwotCX0KLQlpZiAocmVtb3RlKSB7Ci0JCWF2Wy0tY250XSA9IE5VTEw7Ci0JCSphYyA9IGNudDsKLQl9Ci0JcmV0dXJuIHJlbW90ZTsKLX0KKyNkZWZpbmUgUEFSU0VfT1BUX0tFRVBfQUxMICggUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfCAJXAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCB8IAlcCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX1VOS05PV04gfAlcCisJCQkgICAgIFBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQCSkKIAogaW50IGNtZF9hcmNoaXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogeworCWNvbnN0IGNoYXIgKmV4ZWMgPSAiZ2l0LXVwbG9hZC1hcmNoaXZlIjsKKwljb25zdCBjaGFyICpvdXRwdXQgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnJlbW90ZSA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBsb2NhbF9vcHRzW10gPSB7CisJCU9QVF9TVFJJTkcoMCwgIm91dHB1dCIsICZvdXRwdXQsICJmaWxlIiwKKwkJCSJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiKSwKKwkJT1BUX1NUUklORygwLCAicmVtb3RlIiwgJnJlbW90ZSwgInJlcG8iLAorCQkJInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IiksCisJCU9QVF9TVFJJTkcoMCwgImV4ZWMiLCAmZXhlYywgImNtZCIsCisJCQkicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIiksCisJCU9QVF9FTkQoKQorCX07CiAKLQlyZW1vdGUgPSBleHRyYWN0X3JlbW90ZV9hcmcoJmFyZ2MsIGFyZ3YpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgbG9jYWxfb3B0cywgTlVMTCwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQUxMKTsKKworCWlmIChvdXRwdXQpCisJCWNyZWF0ZV9vdXRwdXRfZmlsZShvdXRwdXQpOworCiAJaWYgKHJlbW90ZSkKLQkJcmV0dXJuIHJ1bl9yZW1vdGVfYXJjaGl2ZXIocmVtb3RlLCBhcmdjLCBhcmd2KTsKKwkJcmV0dXJuIHJ1bl9yZW1vdGVfYXJjaGl2ZXIoYXJnYywgYXJndiwgcmVtb3RlLCBleGVjKTsKIAogCXNldHZidWYoc3RkZXJyLCBOVUxMLCBfSU9MQkYsIEJVRlNJWik7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tYmlzZWN0LS1oZWxwZXIuYyBiL2J1aWx0aW4tYmlzZWN0LS1oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjIyNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi1iaXNlY3QtLWhlbHBlci5jCkBAIC0wLDAgKzEsMjggQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiYmlzZWN0LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X2Jpc2VjdF9oZWxwZXJfdXNhZ2VbXSA9IHsKKwkiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwiLAorCU5VTEwKK307CisKK2ludCBjbWRfYmlzZWN0X19oZWxwZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG5leHRfYWxsID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0xFQU4oMCwgIm5leHQtYWxsIiwgJm5leHRfYWxsLAorCQkJICAgICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIiksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9iaXNlY3RfaGVscGVyX3VzYWdlLCAwKTsKKworCWlmICghbmV4dF9hbGwpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfYmlzZWN0X2hlbHBlcl91c2FnZSwgb3B0aW9ucyk7CisKKwkvKiBuZXh0LWFsbCAqLworCXJldHVybiBiaXNlY3RfbmV4dF9hbGwocHJlZml4KTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4tYmxhbWUuYyBiL2J1aWx0aW4tYmxhbWUuYwppbmRleCBlNDYyYTZlLi5mZDZjYTUxIDEwMDY0NAotLS0gYS9idWlsdGluLWJsYW1lLmMKKysrIGIvYnVpbHRpbi1ibGFtZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIFBpY2theGUKKyAqIEJsYW1lCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA2LCBKdW5pbyBDIEhhbWFubwogICovCkBAIC00MCw2ICs0MCwxMCBAQAogc3RhdGljIGludCBibGFua19ib3VuZGFyeTsKIHN0YXRpYyBpbnQgaW5jcmVtZW50YWw7CiBzdGF0aWMgaW50IHhkbF9vcHRzID0gWERGX05FRURfTUlOSU1BTDsKKworc3RhdGljIGVudW0gZGF0ZV9tb2RlIGJsYW1lX2RhdGVfbW9kZSA9IERBVEVfSVNPODYwMTsKK3N0YXRpYyBzaXplX3QgYmxhbWVfZGF0ZV93aWR0aDsKKwogc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBtYWlsbWFwOwogCiAjaWZuZGVmIERFQlVHCkBAIC03NCw2ICs3OCw3IEBACiAgKi8KIHN0cnVjdCBvcmlnaW4gewogCWludCByZWZjbnQ7CisJc3RydWN0IG9yaWdpbiAqcHJldmlvdXM7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCW1tZmlsZV90IGZpbGU7CiAJdW5zaWduZWQgY2hhciBibG9iX3NoYTFbMjBdOwpAQCAtMTE1LDYgKzEyMCw4IEBACiBzdGF0aWMgdm9pZCBvcmlnaW5fZGVjcmVmKHN0cnVjdCBvcmlnaW4gKm8pCiB7CiAJaWYgKG8gJiYgLS1vLT5yZWZjbnQgPD0gMCkgeworCQlpZiAoby0+cHJldmlvdXMpCisJCQlvcmlnaW5fZGVjcmVmKG8tPnByZXZpb3VzKTsKIAkJZnJlZShvLT5maWxlLnB0cik7CiAJCWZyZWUobyk7CiAJfQpAQCAtMzU1LDE4ICszNjIsMjggQEAKIAkJCSAgICAgICAiIiwgJmRpZmZfb3B0cyk7CiAJZGlmZmNvcmVfc3RkKCZkaWZmX29wdHMpOwogCi0JLyogSXQgaXMgZWl0aGVyIG9uZSBlbnRyeSB0aGF0IHNheXMgIm1vZGlmaWVkIiwgb3IgImNyZWF0ZWQiLAotCSAqIG9yIG5vdGhpbmcuCi0JICovCiAJaWYgKCFkaWZmX3F1ZXVlZF9kaWZmLm5yKSB7CiAJCS8qIFRoZSBwYXRoIGlzIHRoZSBzYW1lIGFzIHBhcmVudCAqLwogCQlwb3JpZ2luID0gZ2V0X29yaWdpbihzYiwgcGFyZW50LCBvcmlnaW4tPnBhdGgpOwogCQloYXNoY3B5KHBvcmlnaW4tPmJsb2Jfc2hhMSwgb3JpZ2luLT5ibG9iX3NoYTEpOwotCX0KLQllbHNlIGlmIChkaWZmX3F1ZXVlZF9kaWZmLm5yICE9IDEpCi0JCWRpZSgiaW50ZXJuYWwgZXJyb3IgaW4gYmxhbWU6OmZpbmRfb3JpZ2luIik7Ci0JZWxzZSB7Ci0JCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVswXTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBTaW5jZSBvcmlnaW4tPnBhdGggaXMgYSBwYXRoc3BlYywgaWYgdGhlIHBhcmVudAorCQkgKiBjb21taXQgaGFkIGl0IGFzIGEgZGlyZWN0b3J5LCB3ZSB3aWxsIHNlZSBhIHdob2xlCisJCSAqIGJ1bmNoIG9mIGRlbGV0aW9uIG9mIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgdGhhdCB3ZQorCQkgKiBkbyBub3QgY2FyZSBhYm91dC4KKwkJICovCisJCWludCBpOworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IE5VTEw7CisJCWZvciAoaSA9IDA7IGkgPCBkaWZmX3F1ZXVlZF9kaWZmLm5yOyBpKyspIHsKKwkJCWNvbnN0IGNoYXIgKm5hbWU7CisJCQlwID0gZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXTsKKwkJCW5hbWUgPSBwLT5vbmUtPnBhdGggPyBwLT5vbmUtPnBhdGggOiBwLT50d28tPnBhdGg7CisJCQlpZiAoIXN0cmNtcChuYW1lLCBvcmlnaW4tPnBhdGgpKQorCQkJCWJyZWFrOworCQl9CisJCWlmICghcCkKKwkJCWRpZSgiaW50ZXJuYWwgZXJyb3IgaW4gYmxhbWU6OmZpbmRfb3JpZ2luIik7CiAJCXN3aXRjaCAocC0+c3RhdHVzKSB7CiAJCWRlZmF1bHQ6CiAJCQlkaWUoImludGVybmFsIGVycm9yIGluIGJsYW1lOjpmaW5kX29yaWdpbiAoJWMpIiwKQEAgLTg2Niw3ICs4ODMsNyBAQAogCSAqIFByZXBhcmUgbW1maWxlIHRoYXQgY29udGFpbnMgb25seSB0aGUgbGluZXMgaW4gZW50LgogCSAqLwogCWNwID0gbnRoX2xpbmUoc2IsIGVudC0+bG5vKTsKLQlmaWxlX28ucHRyID0gKGNoYXIqKSBjcDsKKwlmaWxlX28ucHRyID0gKGNoYXIgKikgY3A7CiAJY250ID0gZW50LT5udW1fbGluZXM7CiAKIAl3aGlsZSAoY250ICYmIGNwIDwgc2ItPmZpbmFsX2J1ZiArIHNiLT5maW5hbF9idWZfc2l6ZSkgewpAQCAtMTE5OCw2ICsxMjE1LDEwIEBACiAJCXN0cnVjdCBvcmlnaW4gKnBvcmlnaW4gPSBzZ19vcmlnaW5baV07CiAJCWlmICghcG9yaWdpbikKIAkJCWNvbnRpbnVlOworCQlpZiAoIW9yaWdpbi0+cHJldmlvdXMpIHsKKwkJCW9yaWdpbl9pbmNyZWYocG9yaWdpbik7CisJCQlvcmlnaW4tPnByZXZpb3VzID0gcG9yaWdpbjsKKwkJfQogCQlpZiAocGFzc19ibGFtZV90b19wYXJlbnQoc2IsIG9yaWdpbiwgcG9yaWdpbikpCiAJCQlnb3RvIGZpbmlzaDsKIAl9CkBAIC0xMjY0LDExICsxMjg1LDEyIEBACiAgKiBQYXJzZSBhdXRob3IvY29tbWl0dGVyIGxpbmUgaW4gdGhlIGNvbW1pdCBvYmplY3QgYnVmZmVyCiAgKi8KIHN0YXRpYyB2b2lkIGdldF9hY19saW5lKGNvbnN0IGNoYXIgKmluYnVmLCBjb25zdCBjaGFyICp3aGF0LAotCQkJaW50IGJ1ZnN6LCBjaGFyICpwZXJzb24sIGNvbnN0IGNoYXIgKiptYWlsLAorCQkJaW50IHBlcnNvbl9sZW4sIGNoYXIgKnBlcnNvbiwKKwkJCWludCBtYWlsX2xlbiwgY2hhciAqbWFpbCwKIAkJCXVuc2lnbmVkIGxvbmcgKnRpbWUsIGNvbnN0IGNoYXIgKip0eikKIHsKIAlpbnQgbGVuLCB0emxlbiwgbWFpbGxlbjsKLQljaGFyICp0bXAsICplbmRwLCAqdGltZXBvczsKKwljaGFyICp0bXAsICplbmRwLCAqdGltZXBvcywgKm1haWxwb3M7CiAKIAl0bXAgPSBzdHJzdHIoaW5idWYsIHdoYXQpOwogCWlmICghdG1wKQpAQCAtMTI3OSwxMCArMTMwMSwxMSBAQAogCQlsZW4gPSBzdHJsZW4odG1wKTsKIAllbHNlCiAJCWxlbiA9IGVuZHAgLSB0bXA7Ci0JaWYgKGJ1ZnN6IDw9IGxlbikgeworCWlmIChwZXJzb25fbGVuIDw9IGxlbikgewogCWVycm9yX291dDoKIAkJLyogVWdoICovCi0JCSptYWlsID0gKnR6ID0gIih1bmtub3duKSI7CisJCSp0eiA9ICIodW5rbm93bikiOworCQlzdHJjcHkobWFpbCwgKnR6KTsKIAkJKnRpbWUgPSAwOwogCQlyZXR1cm47CiAJfQpAQCAtMTMwNSw5ICsxMzI4LDEwIEBACiAJKnRtcCA9IDA7CiAJd2hpbGUgKCp0bXAgIT0gJyAnKQogCQl0bXAtLTsKLQkqbWFpbCA9IHRtcCArIDE7CisJbWFpbHBvcyA9IHRtcCArIDE7CiAJKnRtcCA9IDA7CiAJbWFpbGxlbiA9IHRpbWVwb3MgLSB0bXA7CisJbWVtY3B5KG1haWwsIG1haWxwb3MsIG1haWxsZW4pOwogCiAJaWYgKCFtYWlsbWFwLm5yKQogCQlyZXR1cm47CkBAIC0xMzE2LDIwICsxMzQwLDIzIEBACiAJICogbWFpbG1hcCBleHBhbnNpb24gbWF5IG1ha2UgdGhlIG5hbWUgbG9uZ2VyLgogCSAqIG1ha2Ugcm9vbSBieSBwdXNoaW5nIHN0dWZmIGRvd24uCiAJICovCi0JdG1wID0gcGVyc29uICsgYnVmc3ogLSAodHpsZW4gKyAxKTsKKwl0bXAgPSBwZXJzb24gKyBwZXJzb25fbGVuIC0gKHR6bGVuICsgMSk7CiAJbWVtbW92ZSh0bXAsICp0eiwgdHpsZW4pOwogCXRtcFt0emxlbl0gPSAwOwogCSp0eiA9IHRtcDsKIAotCXRtcCA9IHRtcCAtIChtYWlsbGVuICsgMSk7Ci0JbWVtbW92ZSh0bXAsICptYWlsLCBtYWlsbGVuKTsKLQl0bXBbbWFpbGxlbl0gPSAwOwotCSptYWlsID0gdG1wOwotCiAJLyoKLQkgKiBOb3csIGNvbnZlcnQgZS1tYWlsIHVzaW5nIG1haWxtYXAKKwkgKiBOb3csIGNvbnZlcnQgYm90aCBuYW1lIGFuZCBlLW1haWwgdXNpbmcgbWFpbG1hcAogCSAqLwotCW1hcF9lbWFpbCgmbWFpbG1hcCwgdG1wICsgMSwgcGVyc29uLCB0bXAtcGVyc29uLTEpOworCWlmKG1hcF91c2VyKCZtYWlsbWFwLCBtYWlsKzEsIG1haWxfbGVuLTEsIHBlcnNvbiwgdG1wLXBlcnNvbi0xKSkgeworCQkvKiBBZGQgYSB0cmFpbGluZyAnPicgdG8gZW1haWwsIHNpbmNlIG1hcF91c2VyIHJldHVybnMgcGxhaW4gZW1haWxzCisJCSAgIE5vdGU6IEl0IGFscmVhZHkgaGFzICc8Jywgc2luY2Ugd2UgcmVwbGFjZSBmcm9tIG1haWwrMSAqLworCQltYWlscG9zID0gbWVtY2hyKG1haWwsICdcMCcsIG1haWxfbGVuKTsKKwkJaWYgKG1haWxwb3MgJiYgbWFpbHBvcy1tYWlsIDwgbWFpbF9sZW4gLSAxKSB7CisJCQkqbWFpbHBvcyA9ICc+JzsKKwkJCSoobWFpbHBvcysxKSA9ICdcMCc7CisJCX0KKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGdldF9jb21taXRfaW5mbyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsCkBAIC0xMzM4LDggKzEzNjUsMTAgQEAKIHsKIAlpbnQgbGVuOwogCWNoYXIgKnRtcCwgKmVuZHAsICpyZWVuY29kZWQsICptZXNzYWdlOwotCXN0YXRpYyBjaGFyIGF1dGhvcl9idWZbMTAyNF07Ci0Jc3RhdGljIGNoYXIgY29tbWl0dGVyX2J1ZlsxMDI0XTsKKwlzdGF0aWMgY2hhciBhdXRob3JfbmFtZVsxMDI0XTsKKwlzdGF0aWMgY2hhciBhdXRob3JfbWFpbFsxMDI0XTsKKwlzdGF0aWMgY2hhciBjb21taXR0ZXJfbmFtZVsxMDI0XTsKKwlzdGF0aWMgY2hhciBjb21taXR0ZXJfbWFpbFsxMDI0XTsKIAlzdGF0aWMgY2hhciBzdW1tYXJ5X2J1ZlsxMDI0XTsKIAogCS8qCkBAIC0xMzU3LDkgKzEzODYsMTEgQEAKIAl9CiAJcmVlbmNvZGVkID0gcmVlbmNvZGVfY29tbWl0X21lc3NhZ2UoY29tbWl0LCBOVUxMKTsKIAltZXNzYWdlICAgPSByZWVuY29kZWQgPyByZWVuY29kZWQgOiBjb21taXQtPmJ1ZmZlcjsKLQlyZXQtPmF1dGhvciA9IGF1dGhvcl9idWY7CisJcmV0LT5hdXRob3IgPSBhdXRob3JfbmFtZTsKKwlyZXQtPmF1dGhvcl9tYWlsID0gYXV0aG9yX21haWw7CiAJZ2V0X2FjX2xpbmUobWVzc2FnZSwgIlxuYXV0aG9yICIsCi0JCSAgICBzaXplb2YoYXV0aG9yX2J1ZiksIGF1dGhvcl9idWYsICZyZXQtPmF1dGhvcl9tYWlsLAorCQkgICAgc2l6ZW9mKGF1dGhvcl9uYW1lKSwgYXV0aG9yX25hbWUsCisJCSAgICBzaXplb2YoYXV0aG9yX21haWwpLCBhdXRob3JfbWFpbCwKIAkJICAgICZyZXQtPmF1dGhvcl90aW1lLCAmcmV0LT5hdXRob3JfdHopOwogCiAJaWYgKCFkZXRhaWxlZCkgewpAQCAtMTM2Nyw5ICsxMzk4LDExIEBACiAJCXJldHVybjsKIAl9CiAKLQlyZXQtPmNvbW1pdHRlciA9IGNvbW1pdHRlcl9idWY7CisJcmV0LT5jb21taXR0ZXIgPSBjb21taXR0ZXJfbmFtZTsKKwlyZXQtPmNvbW1pdHRlcl9tYWlsID0gY29tbWl0dGVyX21haWw7CiAJZ2V0X2FjX2xpbmUobWVzc2FnZSwgIlxuY29tbWl0dGVyICIsCi0JCSAgICBzaXplb2YoY29tbWl0dGVyX2J1ZiksIGNvbW1pdHRlcl9idWYsICZyZXQtPmNvbW1pdHRlcl9tYWlsLAorCQkgICAgc2l6ZW9mKGNvbW1pdHRlcl9uYW1lKSwgY29tbWl0dGVyX25hbWUsCisJCSAgICBzaXplb2YoY29tbWl0dGVyX21haWwpLCBjb21taXR0ZXJfbWFpbCwKIAkJICAgICZyZXQtPmNvbW1pdHRlcl90aW1lLCAmcmV0LT5jb21taXR0ZXJfdHopOwogCiAJcmV0LT5zdW1tYXJ5ID0gc3VtbWFyeV9idWY7CkBAIC0xNDAzLDYgKzE0MzYsMzkgQEAKIH0KIAogLyoKKyAqIFBvcmNlbGFpbi9JbmNyZW1lbnRhbCBmb3JtYXQgd2FudHMgdG8gc2hvdyBhIGxvdCBvZiBkZXRhaWxzIHBlcgorICogY29tbWl0LiAgSW5zdGVhZCBvZiByZXBlYXRpbmcgdGhpcyBldmVyeSBsaW5lLCBlbWl0IGl0IG9ubHkgb25jZSwKKyAqIHRoZSBmaXJzdCB0aW1lIGVhY2ggY29tbWl0IGFwcGVhcnMgaW4gdGhlIG91dHB1dC4KKyAqLworc3RhdGljIGludCBlbWl0X29uZV9zdXNwZWN0X2RldGFpbChzdHJ1Y3Qgb3JpZ2luICpzdXNwZWN0KQoreworCXN0cnVjdCBjb21taXRfaW5mbyBjaTsKKworCWlmIChzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyAmIE1FVEFJTkZPX1NIT1dOKQorCQlyZXR1cm4gMDsKKworCXN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IE1FVEFJTkZPX1NIT1dOOworCWdldF9jb21taXRfaW5mbyhzdXNwZWN0LT5jb21taXQsICZjaSwgMSk7CisJcHJpbnRmKCJhdXRob3IgJXNcbiIsIGNpLmF1dGhvcik7CisJcHJpbnRmKCJhdXRob3ItbWFpbCAlc1xuIiwgY2kuYXV0aG9yX21haWwpOworCXByaW50ZigiYXV0aG9yLXRpbWUgJWx1XG4iLCBjaS5hdXRob3JfdGltZSk7CisJcHJpbnRmKCJhdXRob3ItdHogJXNcbiIsIGNpLmF1dGhvcl90eik7CisJcHJpbnRmKCJjb21taXR0ZXIgJXNcbiIsIGNpLmNvbW1pdHRlcik7CisJcHJpbnRmKCJjb21taXR0ZXItbWFpbCAlc1xuIiwgY2kuY29tbWl0dGVyX21haWwpOworCXByaW50ZigiY29tbWl0dGVyLXRpbWUgJWx1XG4iLCBjaS5jb21taXR0ZXJfdGltZSk7CisJcHJpbnRmKCJjb21taXR0ZXItdHogJXNcbiIsIGNpLmNvbW1pdHRlcl90eik7CisJcHJpbnRmKCJzdW1tYXJ5ICVzXG4iLCBjaS5zdW1tYXJ5KTsKKwlpZiAoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQlwcmludGYoImJvdW5kYXJ5XG4iKTsKKwlpZiAoc3VzcGVjdC0+cHJldmlvdXMpIHsKKwkJc3RydWN0IG9yaWdpbiAqcHJldiA9IHN1c3BlY3QtPnByZXZpb3VzOworCQlwcmludGYoInByZXZpb3VzICVzICIsIHNoYTFfdG9faGV4KHByZXYtPmNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwkJd3JpdGVfbmFtZV9xdW90ZWQocHJldi0+cGF0aCwgc3Rkb3V0LCAnXG4nKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCiAgKiBUaGUgYmxhbWVfZW50cnkgaXMgZm91bmQgdG8gYmUgZ3VpbHR5IGZvciB0aGUgcmFuZ2UuICBNYXJrIGl0CiAgKiBhcyBzdWNoLCBhbmQgc2hvdyBpdCBpbiBpbmNyZW1lbnRhbCBvdXRwdXQuCiAgKi8KQEAgLTE0MTcsMjIgKzE0ODMsNyBAQAogCQlwcmludGYoIiVzICVkICVkICVkXG4iLAogCQkgICAgICAgc2hhMV90b19oZXgoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3Quc2hhMSksCiAJCSAgICAgICBlbnQtPnNfbG5vICsgMSwgZW50LT5sbm8gKyAxLCBlbnQtPm51bV9saW5lcyk7Ci0JCWlmICghKHN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LmZsYWdzICYgTUVUQUlORk9fU0hPV04pKSB7Ci0JCQlzdHJ1Y3QgY29tbWl0X2luZm8gY2k7Ci0JCQlzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyB8PSBNRVRBSU5GT19TSE9XTjsKLQkJCWdldF9jb21taXRfaW5mbyhzdXNwZWN0LT5jb21taXQsICZjaSwgMSk7Ci0JCQlwcmludGYoImF1dGhvciAlc1xuIiwgY2kuYXV0aG9yKTsKLQkJCXByaW50ZigiYXV0aG9yLW1haWwgJXNcbiIsIGNpLmF1dGhvcl9tYWlsKTsKLQkJCXByaW50ZigiYXV0aG9yLXRpbWUgJWx1XG4iLCBjaS5hdXRob3JfdGltZSk7Ci0JCQlwcmludGYoImF1dGhvci10eiAlc1xuIiwgY2kuYXV0aG9yX3R6KTsKLQkJCXByaW50ZigiY29tbWl0dGVyICVzXG4iLCBjaS5jb21taXR0ZXIpOwotCQkJcHJpbnRmKCJjb21taXR0ZXItbWFpbCAlc1xuIiwgY2kuY29tbWl0dGVyX21haWwpOwotCQkJcHJpbnRmKCJjb21taXR0ZXItdGltZSAlbHVcbiIsIGNpLmNvbW1pdHRlcl90aW1lKTsKLQkJCXByaW50ZigiY29tbWl0dGVyLXR6ICVzXG4iLCBjaS5jb21taXR0ZXJfdHopOwotCQkJcHJpbnRmKCJzdW1tYXJ5ICVzXG4iLCBjaS5zdW1tYXJ5KTsKLQkJCWlmIChzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCi0JCQkJcHJpbnRmKCJib3VuZGFyeVxuIik7Ci0JCX0KKwkJZW1pdF9vbmVfc3VzcGVjdF9kZXRhaWwoc3VzcGVjdCk7CiAJCXdyaXRlX2ZpbGVuYW1lX2luZm8oc3VzcGVjdC0+cGF0aCk7CiAJCW1heWJlX2ZsdXNoX29yX2RpZShzdGRvdXQsICJzdGRvdXQiKTsKIAl9CkBAIC0xNDk1LDI0ICsxNTQ2LDIwIEBACiAJCQkgICAgICAgaW50IHNob3dfcmF3X3RpbWUpCiB7CiAJc3RhdGljIGNoYXIgdGltZV9idWZbMTI4XTsKLQl0aW1lX3QgdCA9IHRpbWU7Ci0JaW50IG1pbnV0ZXMsIHR6OwotCXN0cnVjdCB0bSAqdG07CisJY29uc3QgY2hhciAqdGltZV9zdHI7CisJaW50IHRpbWVfbGVuOworCWludCB0ejsKIAogCWlmIChzaG93X3Jhd190aW1lKSB7CiAJCXNwcmludGYodGltZV9idWYsICIlbHUgJXMiLCB0aW1lLCB0el9zdHIpOwotCQlyZXR1cm4gdGltZV9idWY7CiAJfQotCi0JdHogPSBhdG9pKHR6X3N0cik7Ci0JbWludXRlcyA9IHR6IDwgMCA/IC10eiA6IHR6OwotCW1pbnV0ZXMgPSAobWludXRlcyAvIDEwMCkqNjAgKyAobWludXRlcyAlIDEwMCk7Ci0JbWludXRlcyA9IHR6IDwgMCA/IC1taW51dGVzIDogbWludXRlczsKLQl0ID0gdGltZSArIG1pbnV0ZXMgKiA2MDsKLQl0bSA9IGdtdGltZSgmdCk7Ci0KLQlzdHJmdGltZSh0aW1lX2J1Ziwgc2l6ZW9mKHRpbWVfYnVmKSwgIiVZLSVtLSVkICVIOiVNOiVTICIsIHRtKTsKLQlzdHJjYXQodGltZV9idWYsIHR6X3N0cik7CisJZWxzZSB7CisJCXR6ID0gYXRvaSh0el9zdHIpOworCQl0aW1lX3N0ciA9IHNob3dfZGF0ZSh0aW1lLCB0eiwgYmxhbWVfZGF0ZV9tb2RlKTsKKwkJdGltZV9sZW4gPSBzdHJsZW4odGltZV9zdHIpOworCQltZW1jcHkodGltZV9idWYsIHRpbWVfc3RyLCB0aW1lX2xlbik7CisJCW1lbXNldCh0aW1lX2J1ZiArIHRpbWVfbGVuLCAnICcsIGJsYW1lX2RhdGVfd2lkdGggLSB0aW1lX2xlbik7CisJfQogCXJldHVybiB0aW1lX2J1ZjsKIH0KIApAQCAtMTUzOSwyNCArMTU4Niw4IEBACiAJICAgICAgIGVudC0+c19sbm8gKyAxLAogCSAgICAgICBlbnQtPmxubyArIDEsCiAJICAgICAgIGVudC0+bnVtX2xpbmVzKTsKLQlpZiAoIShzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyAmIE1FVEFJTkZPX1NIT1dOKSkgewotCQlzdHJ1Y3QgY29tbWl0X2luZm8gY2k7Ci0JCXN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IE1FVEFJTkZPX1NIT1dOOwotCQlnZXRfY29tbWl0X2luZm8oc3VzcGVjdC0+Y29tbWl0LCAmY2ksIDEpOwotCQlwcmludGYoImF1dGhvciAlc1xuIiwgY2kuYXV0aG9yKTsKLQkJcHJpbnRmKCJhdXRob3ItbWFpbCAlc1xuIiwgY2kuYXV0aG9yX21haWwpOwotCQlwcmludGYoImF1dGhvci10aW1lICVsdVxuIiwgY2kuYXV0aG9yX3RpbWUpOwotCQlwcmludGYoImF1dGhvci10eiAlc1xuIiwgY2kuYXV0aG9yX3R6KTsKLQkJcHJpbnRmKCJjb21taXR0ZXIgJXNcbiIsIGNpLmNvbW1pdHRlcik7Ci0JCXByaW50ZigiY29tbWl0dGVyLW1haWwgJXNcbiIsIGNpLmNvbW1pdHRlcl9tYWlsKTsKLQkJcHJpbnRmKCJjb21taXR0ZXItdGltZSAlbHVcbiIsIGNpLmNvbW1pdHRlcl90aW1lKTsKLQkJcHJpbnRmKCJjb21taXR0ZXItdHogJXNcbiIsIGNpLmNvbW1pdHRlcl90eik7Ci0JCXdyaXRlX2ZpbGVuYW1lX2luZm8oc3VzcGVjdC0+cGF0aCk7Ci0JCXByaW50Zigic3VtbWFyeSAlc1xuIiwgY2kuc3VtbWFyeSk7Ci0JCWlmIChzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCi0JCQlwcmludGYoImJvdW5kYXJ5XG4iKTsKLQl9Ci0JZWxzZSBpZiAoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBNT1JFX1RIQU5fT05FX1BBVEgpCisJaWYgKGVtaXRfb25lX3N1c3BlY3RfZGV0YWlsKHN1c3BlY3QpIHx8CisJICAgIChzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyAmIE1PUkVfVEhBTl9PTkVfUEFUSCkpCiAJCXdyaXRlX2ZpbGVuYW1lX2luZm8oc3VzcGVjdC0+cGF0aCk7CiAKIAljcCA9IG50aF9saW5lKHNiLCBlbnQtPmxubyk7CkBAIC0xNjgzLDcgKzE3MTQsNyBAQAogCXdoaWxlIChsZW4tLSkgewogCQlpZiAoYm9sKSB7CiAJCQlzYi0+bGluZW5vID0geHJlYWxsb2Moc2ItPmxpbmVubywKLQkJCQkJICAgICAgc2l6ZW9mKGludCogKSAqIChudW0gKyAxKSk7CisJCQkJCSAgICAgIHNpemVvZihpbnQgKikgKiAobnVtICsgMSkpOwogCQkJc2ItPmxpbmVub1tudW1dID0gYnVmIC0gc2ItPmZpbmFsX2J1ZjsKIAkJCWJvbCA9IDA7CiAJCX0KQEAgLTE2OTMsNyArMTcyNCw3IEBACiAJCX0KIAl9CiAJc2ItPmxpbmVubyA9IHhyZWFsbG9jKHNiLT5saW5lbm8sCi0JCQkgICAgICBzaXplb2YoaW50KiApICogKG51bSArIGluY29tcGxldGUgKyAxKSk7CisJCQkgICAgICBzaXplb2YoaW50ICopICogKG51bSArIGluY29tcGxldGUgKyAxKSk7CiAJc2ItPmxpbmVub1tudW0gKyBpbmNvbXBsZXRlXSA9IGJ1ZiAtIHNiLT5maW5hbF9idWY7CiAJc2ItPm51bV9saW5lcyA9IG51bSArIGluY29tcGxldGU7CiAJcmV0dXJuIHNiLT5udW1fbGluZXM7CkBAIC0xNzk0LDM2ICsxODI1LDYgQEAKIAkJCWJhYSA9IDE7CiAJCX0KIAl9Ci0JZm9yIChlbnQgPSBzYi0+ZW50OyBlbnQ7IGVudCA9IGVudC0+bmV4dCkgewotCQkvKiBNYXJrIHRoZSBvbmVzIHRoYXQgaGF2ZW4ndCBiZWVuIGNoZWNrZWQgKi8KLQkJaWYgKDAgPCBlbnQtPnN1c3BlY3QtPnJlZmNudCkKLQkJCWVudC0+c3VzcGVjdC0+cmVmY250ID0gLWVudC0+c3VzcGVjdC0+cmVmY250OwotCX0KLQlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudDsgZW50ID0gZW50LT5uZXh0KSB7Ci0JCS8qCi0JCSAqIC4uLiB0aGVuIHBpY2sgZWFjaCBhbmQgc2VlIGlmIHRoZXkgaGF2ZSB0aGUgdGhlCi0JCSAqIGNvcnJlY3QgcmVmY250LgotCQkgKi8KLQkJaW50IGZvdW5kOwotCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKmU7Ci0JCXN0cnVjdCBvcmlnaW4gKnN1c3BlY3QgPSBlbnQtPnN1c3BlY3Q7Ci0KLQkJaWYgKDAgPCBzdXNwZWN0LT5yZWZjbnQpCi0JCQljb250aW51ZTsKLQkJc3VzcGVjdC0+cmVmY250ID0gLXN1c3BlY3QtPnJlZmNudDsgLyogVW5tYXJrICovCi0JCWZvciAoZm91bmQgPSAwLCBlID0gc2ItPmVudDsgZTsgZSA9IGUtPm5leHQpIHsKLQkJCWlmIChlLT5zdXNwZWN0ICE9IHN1c3BlY3QpCi0JCQkJY29udGludWU7Ci0JCQlmb3VuZCsrOwotCQl9Ci0JCWlmIChzdXNwZWN0LT5yZWZjbnQgIT0gZm91bmQpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiJXMgaW4gJXMgaGFzIHJlZmNudCAlZCwgbm90ICVkXG4iLAotCQkJCWVudC0+c3VzcGVjdC0+cGF0aCwKLQkJCQlzaGExX3RvX2hleChlbnQtPnN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LnNoYTEpLAotCQkJCWVudC0+c3VzcGVjdC0+cmVmY250LCBmb3VuZCk7Ci0JCQliYWEgPSAyOwotCQl9Ci0JfQogCWlmIChiYWEpIHsKIAkJaW50IG9wdCA9IDAxNjA7CiAJCWZpbmRfYWxpZ25tZW50KHNiLCAmb3B0KTsKQEAgLTE4OTgsNyArMTg5OSw3IEBACiAJCXJldHVybiBzcGVjOwogCiAJLyogaXQgY291bGQgYmUgYSByZWdleHAgb2YgZm9ybSAvLi4uLyAqLwotCWZvciAodGVybSA9IChjaGFyKikgc3BlYyArIDE7ICp0ZXJtICYmICp0ZXJtICE9ICcvJzsgdGVybSsrKSB7CisJZm9yICh0ZXJtID0gKGNoYXIgKikgc3BlYyArIDE7ICp0ZXJtICYmICp0ZXJtICE9ICcvJzsgdGVybSsrKSB7CiAJCWlmICgqdGVybSA9PSAnXFwnKQogCQkJdGVybSsrOwogCX0KQEAgLTE5NjMsNiArMTk2NCwxMiBAQAogCQlibGFua19ib3VuZGFyeSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQorCWlmICghc3RyY21wKHZhciwgImJsYW1lLmRhdGUiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWJsYW1lX2RhdGVfbW9kZSA9IHBhcnNlX2RhdGVfZm9ybWF0KHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQogCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCkBAIC0yMDAxLDIzICsyMDA4LDIzIEBACiAKIAkJaWYgKGNvbnRlbnRzX2Zyb20pIHsKIAkJCWlmIChzdGF0KGNvbnRlbnRzX2Zyb20sICZzdCkgPCAwKQotCQkJCWRpZSgiQ2Fubm90IHN0YXQgJXMiLCBjb250ZW50c19mcm9tKTsKKwkJCQlkaWVfZXJybm8oIkNhbm5vdCBzdGF0ICclcyciLCBjb250ZW50c19mcm9tKTsKIAkJCXJlYWRfZnJvbSA9IGNvbnRlbnRzX2Zyb207CiAJCX0KIAkJZWxzZSB7CiAJCQlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApCi0JCQkJZGllKCJDYW5ub3QgbHN0YXQgJXMiLCBwYXRoKTsKKwkJCQlkaWVfZXJybm8oIkNhbm5vdCBsc3RhdCAnJXMnIiwgcGF0aCk7CiAJCQlyZWFkX2Zyb20gPSBwYXRoOwogCQl9CiAJCW1vZGUgPSBjYW5vbl9tb2RlKHN0LnN0X21vZGUpOwogCQlzd2l0Y2ggKHN0LnN0X21vZGUgJiBTX0lGTVQpIHsKIAkJY2FzZSBTX0lGUkVHOgogCQkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmJ1ZiwgcmVhZF9mcm9tLCBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXplKQotCQkJCWRpZSgiY2Fubm90IG9wZW4gb3IgcmVhZCAlcyIsIHJlYWRfZnJvbSk7CisJCQkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiBvciByZWFkICclcyciLCByZWFkX2Zyb20pOwogCQkJYnJlYWs7CiAJCWNhc2UgU19JRkxOSzoKIAkJCWlmIChzdHJidWZfcmVhZGxpbmsoJmJ1ZiwgcmVhZF9mcm9tLCBzdC5zdF9zaXplKSA8IDApCi0JCQkJZGllKCJjYW5ub3QgcmVhZGxpbmsgJXMiLCByZWFkX2Zyb20pOworCQkJCWRpZV9lcnJubygiY2Fubm90IHJlYWRsaW5rICclcyciLCByZWFkX2Zyb20pOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlkaWUoInVuc3VwcG9ydGVkIGZpbGUgdHlwZSAlcyIsIHJlYWRfZnJvbSk7CkBAIC0yMDI4LDcgKzIwMzUsNyBAQAogCQljb250ZW50c19mcm9tID0gInN0YW5kYXJkIGlucHV0IjsKIAkJbW9kZSA9IDA7CiAJCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCAwKSA8IDApCi0JCQlkaWUoInJlYWQgZXJyb3IgJXMgZnJvbSBzdGRpbiIsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImZhaWxlZCB0byByZWFkIGZyb20gc3RkaW4iKTsKIAl9CiAJY29udmVydF90b19naXQocGF0aCwgYnVmLmJ1ZiwgYnVmLmxlbiwgJmJ1ZiwgMCk7CiAJb3JpZ2luLT5maWxlLnB0ciA9IGJ1Zi5idWY7CkBAIC0yMjI3LDEwICsyMjM0LDEyIEBACiAKIAlnaXRfY29uZmlnKGdpdF9ibGFtZV9jb25maWcsIE5VTEwpOwogCWluaXRfcmV2aXNpb25zKCZyZXZzLCBOVUxMKTsKKwlyZXZzLmRhdGVfbW9kZSA9IGJsYW1lX2RhdGVfbW9kZTsKKwogCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CiAJZGFzaGRhc2hfcG9zID0gMDsKIAotCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfAorCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgcHJlZml4LCBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCB8CiAJCQkgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjApOwogCWZvciAoOzspIHsKIAkJc3dpdGNoIChwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywgYmxhbWVfb3B0X3VzYWdlKSkgewpAQCAtMjI1MiwxMSArMjI2MSwzNyBAQAogCWFyZ2MgPSBwYXJzZV9vcHRpb25zX2VuZCgmY3R4KTsKIAogCWlmIChyZXZzX2ZpbGUgJiYgcmVhZF9hbmNlc3RyeShyZXZzX2ZpbGUpKQotCQlkaWUoInJlYWRpbmcgZ3JhZnQgZmlsZSAlcyBmYWlsZWQ6ICVzIiwKLQkJICAgIHJldnNfZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJyZWFkaW5nIGdyYWZ0IGZpbGUgJyVzJyBmYWlsZWQiLCByZXZzX2ZpbGUpOwogCi0JaWYgKGNtZF9pc19hbm5vdGF0ZSkKKwlpZiAoY21kX2lzX2Fubm90YXRlKSB7CiAJCW91dHB1dF9vcHRpb24gfD0gT1VUUFVUX0FOTk9UQVRFX0NPTVBBVDsKKwkJYmxhbWVfZGF0ZV9tb2RlID0gREFURV9JU084NjAxOworCX0gZWxzZSB7CisJCWJsYW1lX2RhdGVfbW9kZSA9IHJldnMuZGF0ZV9tb2RlOworCX0KKworCS8qIFRoZSBtYXhpbXVtIHdpZHRoIHVzZWQgdG8gc2hvdyB0aGUgZGF0ZXMgKi8KKwlzd2l0Y2ggKGJsYW1lX2RhdGVfbW9kZSkgeworCWNhc2UgREFURV9SRkMyODIyOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCJUaHUsIDE5IE9jdCAyMDA2IDE2OjAwOjA0IC0wNzAwIik7CisJCWJyZWFrOworCWNhc2UgREFURV9JU084NjAxOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCIyMDA2LTEwLTE5IDE2OjAwOjA0IC0wNzAwIik7CisJCWJyZWFrOworCWNhc2UgREFURV9SQVc6CisJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIjExNjEyOTg4MDQgLTA3MDAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQVRFX1NIT1JUOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCIyMDA2LTEwLTE5Iik7CisJCWJyZWFrOworCWNhc2UgREFURV9SRUxBVElWRToKKwkJLyogIm5vcm1hbCIgaXMgdXNlZCBhcyB0aGUgZmFsbGJhY2sgZm9yICJyZWxhdGl2ZSIgKi8KKwljYXNlIERBVEVfTE9DQUw6CisJY2FzZSBEQVRFX05PUk1BTDoKKwkJYmxhbWVfZGF0ZV93aWR0aCA9IHNpemVvZigiVGh1IE9jdCAxOSAxNjowMDowNCAyMDA2IC0wNzAwIik7CisJCWJyZWFrOworCX0KKwlibGFtZV9kYXRlX3dpZHRoIC09IDE7IC8qIHN0cmlwIHRoZSBudWxsICovCiAKIAlpZiAoRElGRl9PUFRfVFNUKCZyZXZzLmRpZmZvcHQsIEZJTkRfQ09QSUVTX0hBUkRFUikpCiAJCW9wdCB8PSAoUElDS0FYRV9CTEFNRV9DT1BZIHwgUElDS0FYRV9CTEFNRV9NT1ZFIHwKQEAgLTIzMTQsNyArMjM0OSw3IEBACiAKIAkJc2V0dXBfd29ya190cmVlKCk7CiAJCWlmICghaGFzX3N0cmluZ19pbl93b3JrX3RyZWUocGF0aCkpCi0JCQlkaWUoImNhbm5vdCBzdGF0IHBhdGggJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IHN0YXQgcGF0aCAnJXMnIiwgcGF0aCk7CiAJfQogCiAJc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXZzLCBOVUxMKTsKQEAgLTIzOTYsNyArMjQzMSw3IEBACiAJc2IuZW50ID0gZW50OwogCXNiLnBhdGggPSBwYXRoOwogCi0JcmVhZF9tYWlsbWFwKCZtYWlsbWFwLCAiLm1haWxtYXAiLCBOVUxMKTsKKwlyZWFkX21haWxtYXAoJm1haWxtYXAsIE5VTEwpOwogCiAJaWYgKCFpbmNyZW1lbnRhbCkKIAkJc2V0dXBfcGFnZXIoKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tYnJhbmNoLmMgYi9idWlsdGluLWJyYW5jaC5jCmluZGV4IDIzYjY5NDkuLjFhMDNkNWYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tYnJhbmNoLmMKKysrIGIvYnVpbHRpbi1icmFuY2guYwpAQCAtMzIsMTggKzMyLDE4IEBACiAKIHN0YXRpYyBpbnQgYnJhbmNoX3VzZV9jb2xvciA9IC0xOwogc3RhdGljIGNoYXIgYnJhbmNoX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7Ci0JIlwwMzNbbSIsCS8qIHJlc2V0ICovCi0JIiIsCQkvKiBQTEFJTiAobm9ybWFsKSAqLwotCSJcMDMzWzMxbSIsCS8qIFJFTU9URSAocmVkKSAqLwotCSIiLAkJLyogTE9DQUwgKG5vcm1hbCkgKi8KLQkiXDAzM1szMm0iLAkvKiBDVVJSRU5UIChncmVlbikgKi8KKwlHSVRfQ09MT1JfUkVTRVQsCisJR0lUX0NPTE9SX05PUk1BTCwJLyogUExBSU4gKi8KKwlHSVRfQ09MT1JfUkVELAkJLyogUkVNT1RFICovCisJR0lUX0NPTE9SX05PUk1BTCwJLyogTE9DQUwgKi8KKwlHSVRfQ09MT1JfR1JFRU4sCS8qIENVUlJFTlQgKi8KIH07CiBlbnVtIGNvbG9yX2JyYW5jaCB7Ci0JQ09MT1JfQlJBTkNIX1JFU0VUID0gMCwKLQlDT0xPUl9CUkFOQ0hfUExBSU4gPSAxLAotCUNPTE9SX0JSQU5DSF9SRU1PVEUgPSAyLAotCUNPTE9SX0JSQU5DSF9MT0NBTCA9IDMsCi0JQ09MT1JfQlJBTkNIX0NVUlJFTlQgPSA0LAorCUJSQU5DSF9DT0xPUl9SRVNFVCA9IDAsCisJQlJBTkNIX0NPTE9SX1BMQUlOID0gMSwKKwlCUkFOQ0hfQ09MT1JfUkVNT1RFID0gMiwKKwlCUkFOQ0hfQ09MT1JfTE9DQUwgPSAzLAorCUJSQU5DSF9DT0xPUl9DVVJSRU5UID0gNCwKIH07CiAKIHN0YXRpYyBlbnVtIG1lcmdlX2ZpbHRlciB7CkBAIC01NiwxNSArNTYsMTUgQEAKIHN0YXRpYyBpbnQgcGFyc2VfYnJhbmNoX2NvbG9yX3Nsb3QoY29uc3QgY2hhciAqdmFyLCBpbnQgb2ZzKQogewogCWlmICghc3RyY2FzZWNtcCh2YXIrb2ZzLCAicGxhaW4iKSkKLQkJcmV0dXJuIENPTE9SX0JSQU5DSF9QTEFJTjsKKwkJcmV0dXJuIEJSQU5DSF9DT0xPUl9QTEFJTjsKIAlpZiAoIXN0cmNhc2VjbXAodmFyK29mcywgInJlc2V0IikpCi0JCXJldHVybiBDT0xPUl9CUkFOQ0hfUkVTRVQ7CisJCXJldHVybiBCUkFOQ0hfQ09MT1JfUkVTRVQ7CiAJaWYgKCFzdHJjYXNlY21wKHZhcitvZnMsICJyZW1vdGUiKSkKLQkJcmV0dXJuIENPTE9SX0JSQU5DSF9SRU1PVEU7CisJCXJldHVybiBCUkFOQ0hfQ09MT1JfUkVNT1RFOwogCWlmICghc3RyY2FzZWNtcCh2YXIrb2ZzLCAibG9jYWwiKSkKLQkJcmV0dXJuIENPTE9SX0JSQU5DSF9MT0NBTDsKKwkJcmV0dXJuIEJSQU5DSF9DT0xPUl9MT0NBTDsKIAlpZiAoIXN0cmNhc2VjbXAodmFyK29mcywgImN1cnJlbnQiKSkKLQkJcmV0dXJuIENPTE9SX0JSQU5DSF9DVVJSRU5UOworCQlyZXR1cm4gQlJBTkNIX0NPTE9SX0NVUlJFTlQ7CiAJZGllKCJiYWQgY29uZmlnIHZhcmlhYmxlICclcyciLCB2YXIpOwogfQogCkBAIC05OSw2ICs5OSw3IEBACiAJY29uc3QgY2hhciAqZm10LCAqcmVtb3RlOwogCWludCBpOwogCWludCByZXQgPSAwOworCXN0cnVjdCBzdHJidWYgYm5hbWUgPSBTVFJCVUZfSU5JVDsKIAogCXN3aXRjaCAoa2luZHMpIHsKIAljYXNlIFJFRl9SRU1PVEVfQlJBTkNIOgpAQCAtMTE5LDIwICsxMjAsMjEgQEAKIAkJaWYgKCFoZWFkX3JldikKIAkJCWRpZSgiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIik7CiAJfQotCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLQkJaWYgKGtpbmRzID09IFJFRl9MT0NBTF9CUkFOQ0ggJiYgIXN0cmNtcChoZWFkLCBhcmd2W2ldKSkgeworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyssIHN0cmJ1Zl9yZWxlYXNlKCZibmFtZSkpIHsKKwkJc3RyYnVmX2JyYW5jaG5hbWUoJmJuYW1lLCBhcmd2W2ldKTsKKwkJaWYgKGtpbmRzID09IFJFRl9MT0NBTF9CUkFOQ0ggJiYgIXN0cmNtcChoZWFkLCBibmFtZS5idWYpKSB7CiAJCQllcnJvcigiQ2Fubm90IGRlbGV0ZSB0aGUgYnJhbmNoICclcycgIgotCQkJCSJ3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBvbi4iLCBhcmd2W2ldKTsKKwkJCSAgICAgICJ3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBvbi4iLCBibmFtZS5idWYpOwogCQkJcmV0ID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJZnJlZShuYW1lKTsKIAotCQluYW1lID0geHN0cmR1cChta3BhdGgoZm10LCBhcmd2W2ldKSk7CisJCW5hbWUgPSB4c3RyZHVwKG1rcGF0aChmbXQsIGJuYW1lLmJ1ZikpOwogCQlpZiAoIXJlc29sdmVfcmVmKG5hbWUsIHNoYTEsIDEsIE5VTEwpKSB7CiAJCQllcnJvcigiJXNicmFuY2ggJyVzJyBub3QgZm91bmQuIiwKLQkJCQkJcmVtb3RlLCBhcmd2W2ldKTsKKwkJCQkJcmVtb3RlLCBibmFtZS5idWYpOwogCQkJcmV0ID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xNTIsMjIgKzE1NCwyMyBAQAogCQlpZiAoIWZvcmNlICYmCiAJCSAgICAhaW5fbWVyZ2VfYmFzZXMocmV2LCAmaGVhZF9yZXYsIDEpKSB7CiAJCQllcnJvcigiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBhbiBhbmNlc3RvciBvZiAiCi0JCQkJInlvdXIgY3VycmVudCBIRUFELlxuIgotCQkJCSJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCAiCi0JCQkJInJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIiwgYXJndltpXSwgYXJndltpXSk7CisJCQkgICAgICAieW91ciBjdXJyZW50IEhFQUQuXG4iCisJCQkgICAgICAiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgIgorCQkJICAgICAgInJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIiwgYm5hbWUuYnVmLCBibmFtZS5idWYpOwogCQkJcmV0ID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKGRlbGV0ZV9yZWYobmFtZSwgc2hhMSwgMCkpIHsKIAkJCWVycm9yKCJFcnJvciBkZWxldGluZyAlc2JyYW5jaCAnJXMnIiwgcmVtb3RlLAotCQkJICAgICAgIGFyZ3ZbaV0pOworCQkJICAgICAgYm5hbWUuYnVmKTsKIAkJCXJldCA9IDE7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwotCQkJcHJpbnRmKCJEZWxldGVkICVzYnJhbmNoICVzICh3YXMgJXMpLlxuIiwgcmVtb3RlLCBhcmd2W2ldLAotCQkJCWZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBERUZBVUxUX0FCQlJFVikpOwotCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgImJyYW5jaC4lcyIsIGFyZ3ZbaV0pOworCQkJcHJpbnRmKCJEZWxldGVkICVzYnJhbmNoICVzICh3YXMgJXMpLlxuIiwgcmVtb3RlLAorCQkJICAgICAgIGJuYW1lLmJ1ZiwKKwkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICJicmFuY2guJXMiLCBibmFtZS5idWYpOwogCQkJaWYgKGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24oYnVmLmJ1ZiwgTlVMTCkgPCAwKQogCQkJCXdhcm5pbmcoIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiKTsKIAkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwpAQCAtMTgxLDMxICsxODQsMzEgQEAKIAogc3RydWN0IHJlZl9pdGVtIHsKIAljaGFyICpuYW1lOwotCXVuc2lnbmVkIGludCBraW5kOworCWNoYXIgKmRlc3Q7CisJdW5zaWduZWQgaW50IGtpbmQsIGxlbjsKIAlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CiB9OwogCiBzdHJ1Y3QgcmVmX2xpc3QgewogCXN0cnVjdCByZXZfaW5mbyByZXZzOwotCWludCBpbmRleCwgYWxsb2MsIG1heHdpZHRoOworCWludCBpbmRleCwgYWxsb2MsIG1heHdpZHRoLCB2ZXJib3NlLCBhYmJyZXY7CiAJc3RydWN0IHJlZl9pdGVtICpsaXN0OwogCXN0cnVjdCBjb21taXRfbGlzdCAqd2l0aF9jb21taXQ7CiAJaW50IGtpbmRzOwogfTsKIAotc3RhdGljIGludCBoYXNfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdF9saXN0ICp3aXRoX2NvbW1pdCkKK3N0YXRpYyBjaGFyICpyZXNvbHZlX3N5bXJlZihjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKLQlpZiAoIXdpdGhfY29tbWl0KQotCQlyZXR1cm4gMTsKLQl3aGlsZSAod2l0aF9jb21taXQpIHsKLQkJc3RydWN0IGNvbW1pdCAqb3RoZXI7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgZmxhZzsKKwljb25zdCBjaGFyICpkc3QsICpjcDsKIAotCQlvdGhlciA9IHdpdGhfY29tbWl0LT5pdGVtOwotCQl3aXRoX2NvbW1pdCA9IHdpdGhfY29tbWl0LT5uZXh0OwotCQlpZiAoaW5fbWVyZ2VfYmFzZXMob3RoZXIsICZjb21taXQsIDEpKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOworCWRzdCA9IHJlc29sdmVfcmVmKHNyYywgc2hhMSwgMCwgJmZsYWcpOworCWlmICghKGRzdCAmJiAoZmxhZyAmIFJFRl9JU1NZTVJFRikpKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAocHJlZml4ICYmIChjcCA9IHNraXBfcHJlZml4KGRzdCwgcHJlZml4KSkpCisJCWRzdCA9IGNwOworCXJldHVybiB4c3RyZHVwKGRzdCk7CiB9CiAKIHN0YXRpYyBpbnQgYXBwZW5kX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCkBAIC0yMTMsMzQgKzIxNiw0OCBAQAogCXN0cnVjdCByZWZfbGlzdCAqcmVmX2xpc3QgPSAoc3RydWN0IHJlZl9saXN0KikoY2JfZGF0YSk7CiAJc3RydWN0IHJlZl9pdGVtICpuZXdpdGVtOwogCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKLQlpbnQga2luZDsKLQlpbnQgbGVuOworCWludCBraW5kLCBpOworCWNvbnN0IGNoYXIgKnByZWZpeCwgKm9yaWdfcmVmbmFtZSA9IHJlZm5hbWU7CisKKwlzdGF0aWMgc3RydWN0IHsKKwkJaW50IGtpbmQ7CisJCWNvbnN0IGNoYXIgKnByZWZpeDsKKwkJaW50IHBmeGxlbjsKKwl9IHJlZl9raW5kW10gPSB7CisJCXsgUkVGX0xPQ0FMX0JSQU5DSCwgInJlZnMvaGVhZHMvIiwgMTEgfSwKKwkJeyBSRUZfUkVNT1RFX0JSQU5DSCwgInJlZnMvcmVtb3Rlcy8iLCAxMyB9LAorCX07CiAKIAkvKiBEZXRlY3Qga2luZCAqLwotCWlmICghcHJlZml4Y21wKHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpKSB7Ci0JCWtpbmQgPSBSRUZfTE9DQUxfQlJBTkNIOwotCQlyZWZuYW1lICs9IDExOwotCX0gZWxzZSBpZiAoIXByZWZpeGNtcChyZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIpKSB7Ci0JCWtpbmQgPSBSRUZfUkVNT1RFX0JSQU5DSDsKLQkJcmVmbmFtZSArPSAxMzsKLQl9IGVsc2UKLQkJcmV0dXJuIDA7Ci0KLQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSk7Ci0JaWYgKCFjb21taXQpCi0JCXJldHVybiBlcnJvcigiYnJhbmNoICclcycgZG9lcyBub3QgcG9pbnQgYXQgYSBjb21taXQiLCByZWZuYW1lKTsKLQotCS8qIEZpbHRlciB3aXRoIHdpdGhfY29tbWl0IGlmIHNwZWNpZmllZCAqLwotCWlmICghaGFzX2NvbW1pdChjb21taXQsIHJlZl9saXN0LT53aXRoX2NvbW1pdCkpCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVmX2tpbmQpOyBpKyspIHsKKwkJcHJlZml4ID0gcmVmX2tpbmRbaV0ucHJlZml4OworCQlpZiAoc3RybmNtcChyZWZuYW1lLCBwcmVmaXgsIHJlZl9raW5kW2ldLnBmeGxlbikpCisJCQljb250aW51ZTsKKwkJa2luZCA9IHJlZl9raW5kW2ldLmtpbmQ7CisJCXJlZm5hbWUgKz0gcmVmX2tpbmRbaV0ucGZ4bGVuOworCQlicmVhazsKKwl9CisJaWYgKEFSUkFZX1NJWkUocmVmX2tpbmQpIDw9IGkpCiAJCXJldHVybiAwOwogCiAJLyogRG9uJ3QgYWRkIHR5cGVzIHRoZSBjYWxsZXIgZG9lc24ndCB3YW50ICovCiAJaWYgKChraW5kICYgcmVmX2xpc3QtPmtpbmRzKSA9PSAwKQogCQlyZXR1cm4gMDsKIAotCWlmIChtZXJnZV9maWx0ZXIgIT0gTk9fRklMVEVSKQotCQlhZGRfcGVuZGluZ19vYmplY3QoJnJlZl9saXN0LT5yZXZzLAotCQkJCSAgIChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0LCByZWZuYW1lKTsKKwljb21taXQgPSBOVUxMOworCWlmIChyZWZfbGlzdC0+dmVyYm9zZSB8fCByZWZfbGlzdC0+d2l0aF9jb21taXQgfHwgbWVyZ2VfZmlsdGVyICE9IE5PX0ZJTFRFUikgeworCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSk7CisJCWlmICghY29tbWl0KQorCQkJcmV0dXJuIGVycm9yKCJicmFuY2ggJyVzJyBkb2VzIG5vdCBwb2ludCBhdCBhIGNvbW1pdCIsIHJlZm5hbWUpOworCisJCS8qIEZpbHRlciB3aXRoIHdpdGhfY29tbWl0IGlmIHNwZWNpZmllZCAqLworCQlpZiAoIWlzX2Rlc2NlbmRhbnRfb2YoY29tbWl0LCByZWZfbGlzdC0+d2l0aF9jb21taXQpKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKG1lcmdlX2ZpbHRlciAhPSBOT19GSUxURVIpCisJCQlhZGRfcGVuZGluZ19vYmplY3QoJnJlZl9saXN0LT5yZXZzLAorCQkJCQkgICAoc3RydWN0IG9iamVjdCAqKWNvbW1pdCwgcmVmbmFtZSk7CisJfQogCiAJLyogUmVzaXplIGJ1ZmZlciAqLwogCWlmIChyZWZfbGlzdC0+aW5kZXggPj0gcmVmX2xpc3QtPmFsbG9jKSB7CkBAIC0yNTQsOSArMjcxLDE0IEBACiAJbmV3aXRlbS0+bmFtZSA9IHhzdHJkdXAocmVmbmFtZSk7CiAJbmV3aXRlbS0+a2luZCA9IGtpbmQ7CiAJbmV3aXRlbS0+Y29tbWl0ID0gY29tbWl0OwotCWxlbiA9IHN0cmxlbihuZXdpdGVtLT5uYW1lKTsKLQlpZiAobGVuID4gcmVmX2xpc3QtPm1heHdpZHRoKQotCQlyZWZfbGlzdC0+bWF4d2lkdGggPSBsZW47CisJbmV3aXRlbS0+bGVuID0gc3RybGVuKHJlZm5hbWUpOworCW5ld2l0ZW0tPmRlc3QgPSByZXNvbHZlX3N5bXJlZihvcmlnX3JlZm5hbWUsIHByZWZpeCk7CisJLyogYWRqdXN0IGZvciAicmVtb3Rlcy8iICovCisJaWYgKG5ld2l0ZW0tPmtpbmQgPT0gUkVGX1JFTU9URV9CUkFOQ0ggJiYKKwkgICAgcmVmX2xpc3QtPmtpbmRzICE9IFJFRl9SRU1PVEVfQlJBTkNIKQorCQluZXdpdGVtLT5sZW4gKz0gODsKKwlpZiAobmV3aXRlbS0+bGVuID4gcmVmX2xpc3QtPm1heHdpZHRoKQorCQlyZWZfbGlzdC0+bWF4d2lkdGggPSBuZXdpdGVtLT5sZW47CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI2NSw4ICsyODcsMTAgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCByZWZfbGlzdC0+aW5kZXg7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgcmVmX2xpc3QtPmluZGV4OyBpKyspIHsKIAkJZnJlZShyZWZfbGlzdC0+bGlzdFtpXS5uYW1lKTsKKwkJZnJlZShyZWZfbGlzdC0+bGlzdFtpXS5kZXN0KTsKKwl9CiAJZnJlZShyZWZfbGlzdC0+bGlzdCk7CiB9CiAKQEAgLTI4MCwxOSArMzA0LDMwIEBACiAJcmV0dXJuIHN0cmNtcChjMS0+bmFtZSwgYzItPm5hbWUpOwogfQogCi1zdGF0aWMgdm9pZCBmaWxsX3RyYWNraW5nX2luZm8oc3RydWN0IHN0cmJ1ZiAqc3RhdCwgY29uc3QgY2hhciAqYnJhbmNoX25hbWUpCitzdGF0aWMgdm9pZCBmaWxsX3RyYWNraW5nX2luZm8oc3RydWN0IHN0cmJ1ZiAqc3RhdCwgY29uc3QgY2hhciAqYnJhbmNoX25hbWUsCisJCWludCBzaG93X3Vwc3RyZWFtX3JlZikKIHsKIAlpbnQgb3VycywgdGhlaXJzOwogCXN0cnVjdCBicmFuY2ggKmJyYW5jaCA9IGJyYW5jaF9nZXQoYnJhbmNoX25hbWUpOwogCi0JaWYgKCFzdGF0X3RyYWNraW5nX2luZm8oYnJhbmNoLCAmb3VycywgJnRoZWlycykgfHwgKCFvdXJzICYmICF0aGVpcnMpKQorCWlmICghc3RhdF90cmFja2luZ19pbmZvKGJyYW5jaCwgJm91cnMsICZ0aGVpcnMpKSB7CisJCWlmIChicmFuY2ggJiYgYnJhbmNoLT5tZXJnZSAmJiBicmFuY2gtPm1lcmdlWzBdLT5kc3QgJiYKKwkJICAgIHNob3dfdXBzdHJlYW1fcmVmKQorCQkJc3RyYnVmX2FkZGYoc3RhdCwgIlslc10gIiwKKwkJCSAgICBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihicmFuY2gtPm1lcmdlWzBdLT5kc3QsIDApKTsKIAkJcmV0dXJuOworCX0KKworCXN0cmJ1Zl9hZGRjaChzdGF0LCAnWycpOworCWlmIChzaG93X3Vwc3RyZWFtX3JlZikKKwkJc3RyYnVmX2FkZGYoc3RhdCwgIiVzOiAiLAorCQkJc2hvcnRlbl91bmFtYmlndW91c19yZWYoYnJhbmNoLT5tZXJnZVswXS0+ZHN0LCAwKSk7CiAJaWYgKCFvdXJzKQotCQlzdHJidWZfYWRkZihzdGF0LCAiW2JlaGluZCAlZF0gIiwgdGhlaXJzKTsKKwkJc3RyYnVmX2FkZGYoc3RhdCwgImJlaGluZCAlZF0gIiwgdGhlaXJzKTsKIAllbHNlIGlmICghdGhlaXJzKQotCQlzdHJidWZfYWRkZihzdGF0LCAiW2FoZWFkICVkXSAiLCBvdXJzKTsKKwkJc3RyYnVmX2FkZGYoc3RhdCwgImFoZWFkICVkXSAiLCBvdXJzKTsKIAllbHNlCi0JCXN0cmJ1Zl9hZGRmKHN0YXQsICJbYWhlYWQgJWQsIGJlaGluZCAlZF0gIiwgb3VycywgdGhlaXJzKTsKKwkJc3RyYnVmX2FkZGYoc3RhdCwgImFoZWFkICVkLCBiZWhpbmQgJWRdICIsIG91cnMsIHRoZWlycyk7CiB9CiAKIHN0YXRpYyBpbnQgbWF0Y2hlc19tZXJnZV9maWx0ZXIoc3RydWN0IGNvbW1pdCAqY29tbWl0KQpAQCAtMzA3LDM0ICszNDIsNDYgQEAKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfcmVmX2l0ZW0oc3RydWN0IHJlZl9pdGVtICppdGVtLCBpbnQgbWF4d2lkdGgsIGludCB2ZXJib3NlLAotCQkJICAgaW50IGFiYnJldiwgaW50IGN1cnJlbnQpCisJCQkgICBpbnQgYWJicmV2LCBpbnQgY3VycmVudCwgY2hhciAqcHJlZml4KQogewogCWNoYXIgYzsKIAlpbnQgY29sb3I7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gaXRlbS0+Y29tbWl0OworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQsIG5hbWUgPSBTVFJCVUZfSU5JVDsKIAogCWlmICghbWF0Y2hlc19tZXJnZV9maWx0ZXIoY29tbWl0KSkKIAkJcmV0dXJuOwogCiAJc3dpdGNoIChpdGVtLT5raW5kKSB7CiAJY2FzZSBSRUZfTE9DQUxfQlJBTkNIOgotCQljb2xvciA9IENPTE9SX0JSQU5DSF9MT0NBTDsKKwkJY29sb3IgPSBCUkFOQ0hfQ09MT1JfTE9DQUw7CiAJCWJyZWFrOwogCWNhc2UgUkVGX1JFTU9URV9CUkFOQ0g6Ci0JCWNvbG9yID0gQ09MT1JfQlJBTkNIX1JFTU9URTsKKwkJY29sb3IgPSBCUkFOQ0hfQ09MT1JfUkVNT1RFOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQljb2xvciA9IENPTE9SX0JSQU5DSF9QTEFJTjsKKwkJY29sb3IgPSBCUkFOQ0hfQ09MT1JfUExBSU47CiAJCWJyZWFrOwogCX0KIAogCWMgPSAnICc7CiAJaWYgKGN1cnJlbnQpIHsKIAkJYyA9ICcqJzsKLQkJY29sb3IgPSBDT0xPUl9CUkFOQ0hfQ1VSUkVOVDsKKwkJY29sb3IgPSBCUkFOQ0hfQ09MT1JfQ1VSUkVOVDsKIAl9CiAKLQlpZiAodmVyYm9zZSkgeworCXN0cmJ1Zl9hZGRmKCZuYW1lLCAiJXMlcyIsIHByZWZpeCwgaXRlbS0+bmFtZSk7CisJaWYgKHZlcmJvc2UpCisJCXN0cmJ1Zl9hZGRmKCZvdXQsICIlYyAlcyUtKnMlcyIsIGMsIGJyYW5jaF9nZXRfY29sb3IoY29sb3IpLAorCQkJICAgIG1heHdpZHRoLCBuYW1lLmJ1ZiwKKwkJCSAgICBicmFuY2hfZ2V0X2NvbG9yKEJSQU5DSF9DT0xPUl9SRVNFVCkpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoJm91dCwgIiVjICVzJXMlcyIsIGMsIGJyYW5jaF9nZXRfY29sb3IoY29sb3IpLAorCQkJICAgIG5hbWUuYnVmLCBicmFuY2hfZ2V0X2NvbG9yKEJSQU5DSF9DT0xPUl9SRVNFVCkpOworCisJaWYgKGl0ZW0tPmRlc3QpCisJCXN0cmJ1Zl9hZGRmKCZvdXQsICIgLT4gJXMiLCBpdGVtLT5kZXN0KTsKKwllbHNlIGlmICh2ZXJib3NlKSB7CiAJCXN0cnVjdCBzdHJidWYgc3ViamVjdCA9IFNUUkJVRl9JTklULCBzdGF0ID0gU1RSQlVGX0lOSVQ7CiAJCWNvbnN0IGNoYXIgKnN1YiA9ICIgKioqKiBpbnZhbGlkIHJlZiAqKioqIjsKIApAQCAtMzQ2LDQ2ICszOTMsNjMgQEAKIAkJfQogCiAJCWlmIChpdGVtLT5raW5kID09IFJFRl9MT0NBTF9CUkFOQ0gpCi0JCQlmaWxsX3RyYWNraW5nX2luZm8oJnN0YXQsIGl0ZW0tPm5hbWUpOworCQkJZmlsbF90cmFja2luZ19pbmZvKCZzdGF0LCBpdGVtLT5uYW1lLCB2ZXJib3NlID4gMSk7CiAKLQkJcHJpbnRmKCIlYyAlcyUtKnMlcyAlcyAlcyVzXG4iLCBjLCBicmFuY2hfZ2V0X2NvbG9yKGNvbG9yKSwKLQkJICAgICAgIG1heHdpZHRoLCBpdGVtLT5uYW1lLAotCQkgICAgICAgYnJhbmNoX2dldF9jb2xvcihDT0xPUl9CUkFOQ0hfUkVTRVQpLAotCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KGl0ZW0tPmNvbW1pdC0+b2JqZWN0LnNoYTEsIGFiYnJldiksCi0JCSAgICAgICBzdGF0LmJ1Ziwgc3ViKTsKKwkJc3RyYnVmX2FkZGYoJm91dCwgIiAlcyAlcyVzIiwKKwkJCWZpbmRfdW5pcXVlX2FiYnJldihpdGVtLT5jb21taXQtPm9iamVjdC5zaGExLCBhYmJyZXYpLAorCQkJc3RhdC5idWYsIHN1Yik7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZzdGF0KTsKIAkJc3RyYnVmX3JlbGVhc2UoJnN1YmplY3QpOwotCX0gZWxzZSB7Ci0JCXByaW50ZigiJWMgJXMlcyVzXG4iLCBjLCBicmFuY2hfZ2V0X2NvbG9yKGNvbG9yKSwgaXRlbS0+bmFtZSwKLQkJICAgICAgIGJyYW5jaF9nZXRfY29sb3IoQ09MT1JfQlJBTkNIX1JFU0VUKSk7CiAJfQorCXByaW50ZigiJXNcbiIsIG91dC5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmb3V0KTsKIH0KIAogc3RhdGljIGludCBjYWxjX21heHdpZHRoKHN0cnVjdCByZWZfbGlzdCAqcmVmcykKIHsKLQlpbnQgaSwgbCwgdyA9IDA7CisJaW50IGksIHcgPSAwOwogCWZvciAoaSA9IDA7IGkgPCByZWZzLT5pbmRleDsgaSsrKSB7CiAJCWlmICghbWF0Y2hlc19tZXJnZV9maWx0ZXIocmVmcy0+bGlzdFtpXS5jb21taXQpKQogCQkJY29udGludWU7Ci0JCWwgPSBzdHJsZW4ocmVmcy0+bGlzdFtpXS5uYW1lKTsKLQkJaWYgKGwgPiB3KQotCQkJdyA9IGw7CisJCWlmIChyZWZzLT5saXN0W2ldLmxlbiA+IHcpCisJCQl3ID0gcmVmcy0+bGlzdFtpXS5sZW47CiAJfQogCXJldHVybiB3OwogfQogCisKK3N0YXRpYyB2b2lkIHNob3dfZGV0YWNoZWQoc3RydWN0IHJlZl9saXN0ICpyZWZfbGlzdCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShoZWFkX3NoYTEsIDEpOworCisJaWYgKGhlYWRfY29tbWl0ICYmIGlzX2Rlc2NlbmRhbnRfb2YoaGVhZF9jb21taXQsIHJlZl9saXN0LT53aXRoX2NvbW1pdCkpIHsKKwkJc3RydWN0IHJlZl9pdGVtIGl0ZW07CisJCWl0ZW0ubmFtZSA9IHhzdHJkdXAoIihubyBicmFuY2gpIik7CisJCWl0ZW0ubGVuID0gc3RybGVuKGl0ZW0ubmFtZSk7CisJCWl0ZW0ua2luZCA9IFJFRl9MT0NBTF9CUkFOQ0g7CisJCWl0ZW0uZGVzdCA9IE5VTEw7CisJCWl0ZW0uY29tbWl0ID0gaGVhZF9jb21taXQ7CisJCWlmIChpdGVtLmxlbiA+IHJlZl9saXN0LT5tYXh3aWR0aCkKKwkJCXJlZl9saXN0LT5tYXh3aWR0aCA9IGl0ZW0ubGVuOworCQlwcmludF9yZWZfaXRlbSgmaXRlbSwgcmVmX2xpc3QtPm1heHdpZHRoLCByZWZfbGlzdC0+dmVyYm9zZSwgcmVmX2xpc3QtPmFiYnJldiwgMSwgIiIpOworCQlmcmVlKGl0ZW0ubmFtZSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBwcmludF9yZWZfbGlzdChpbnQga2luZHMsIGludCBkZXRhY2hlZCwgaW50IHZlcmJvc2UsIGludCBhYmJyZXYsIHN0cnVjdCBjb21taXRfbGlzdCAqd2l0aF9jb21taXQpCiB7CiAJaW50IGk7CiAJc3RydWN0IHJlZl9saXN0IHJlZl9saXN0OwotCXN0cnVjdCBjb21taXQgKmhlYWRfY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KGhlYWRfc2hhMSwgMSk7CiAKIAltZW1zZXQoJnJlZl9saXN0LCAwLCBzaXplb2YocmVmX2xpc3QpKTsKIAlyZWZfbGlzdC5raW5kcyA9IGtpbmRzOworCXJlZl9saXN0LnZlcmJvc2UgPSB2ZXJib3NlOworCXJlZl9saXN0LmFiYnJldiA9IGFiYnJldjsKIAlyZWZfbGlzdC53aXRoX2NvbW1pdCA9IHdpdGhfY29tbWl0OwogCWlmIChtZXJnZV9maWx0ZXIgIT0gTk9fRklMVEVSKQogCQlpbml0X3JldmlzaW9ucygmcmVmX2xpc3QucmV2cywgTlVMTCk7Ci0JZm9yX2VhY2hfcmVmKGFwcGVuZF9yZWYsICZyZWZfbGlzdCk7CisJZm9yX2VhY2hfcmF3cmVmKGFwcGVuZF9yZWYsICZyZWZfbGlzdCk7CiAJaWYgKG1lcmdlX2ZpbHRlciAhPSBOT19GSUxURVIpIHsKIAkJc3RydWN0IGNvbW1pdCAqZmlsdGVyOwogCQlmaWx0ZXIgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkobWVyZ2VfZmlsdGVyX3JlZiwgMCk7CkBAIC00MDEsMjMgKzQ2NSwxOCBAQAogCXFzb3J0KHJlZl9saXN0Lmxpc3QsIHJlZl9saXN0LmluZGV4LCBzaXplb2Yoc3RydWN0IHJlZl9pdGVtKSwgcmVmX2NtcCk7CiAKIAlkZXRhY2hlZCA9IChkZXRhY2hlZCAmJiAoa2luZHMgJiBSRUZfTE9DQUxfQlJBTkNIKSk7Ci0JaWYgKGRldGFjaGVkICYmIGhlYWRfY29tbWl0ICYmIGhhc19jb21taXQoaGVhZF9jb21taXQsIHdpdGhfY29tbWl0KSkgewotCQlzdHJ1Y3QgcmVmX2l0ZW0gaXRlbTsKLQkJaXRlbS5uYW1lID0geHN0cmR1cCgiKG5vIGJyYW5jaCkiKTsKLQkJaXRlbS5raW5kID0gUkVGX0xPQ0FMX0JSQU5DSDsKLQkJaXRlbS5jb21taXQgPSBoZWFkX2NvbW1pdDsKLQkJaWYgKHN0cmxlbihpdGVtLm5hbWUpID4gcmVmX2xpc3QubWF4d2lkdGgpCi0JCQlyZWZfbGlzdC5tYXh3aWR0aCA9IHN0cmxlbihpdGVtLm5hbWUpOwotCQlwcmludF9yZWZfaXRlbSgmaXRlbSwgcmVmX2xpc3QubWF4d2lkdGgsIHZlcmJvc2UsIGFiYnJldiwgMSk7Ci0JCWZyZWUoaXRlbS5uYW1lKTsKLQl9CisJaWYgKGRldGFjaGVkKQorCQlzaG93X2RldGFjaGVkKCZyZWZfbGlzdCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcmVmX2xpc3QuaW5kZXg7IGkrKykgewogCQlpbnQgY3VycmVudCA9ICFkZXRhY2hlZCAmJgogCQkJKHJlZl9saXN0Lmxpc3RbaV0ua2luZCA9PSBSRUZfTE9DQUxfQlJBTkNIKSAmJgogCQkJIXN0cmNtcChyZWZfbGlzdC5saXN0W2ldLm5hbWUsIGhlYWQpOworCQljaGFyICpwcmVmaXggPSAoa2luZHMgIT0gUkVGX1JFTU9URV9CUkFOQ0ggJiYKKwkJCQlyZWZfbGlzdC5saXN0W2ldLmtpbmQgPT0gUkVGX1JFTU9URV9CUkFOQ0gpCisJCQkJPyAicmVtb3Rlcy8iIDogIiI7CiAJCXByaW50X3JlZl9pdGVtKCZyZWZfbGlzdC5saXN0W2ldLCByZWZfbGlzdC5tYXh3aWR0aCwgdmVyYm9zZSwKLQkJCSAgICAgICBhYmJyZXYsIGN1cnJlbnQpOworCQkJICAgICAgIGFiYnJldiwgY3VycmVudCwgcHJlZml4KTsKIAl9CiAKIAlmcmVlX3JlZl9saXN0KCZyZWZfbGlzdCk7CkBAIC00MjgsMjIgKzQ4NywyNyBAQAogCXN0cnVjdCBzdHJidWYgb2xkcmVmID0gU1RSQlVGX0lOSVQsIG5ld3JlZiA9IFNUUkJVRl9JTklULCBsb2dtc2cgPSBTVFJCVUZfSU5JVDsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCXN0cnVjdCBzdHJidWYgb2xkc2VjdGlvbiA9IFNUUkJVRl9JTklULCBuZXdzZWN0aW9uID0gU1RSQlVGX0lOSVQ7CisJaW50IHJlY292ZXJ5ID0gMDsKIAogCWlmICghb2xkbmFtZSkKIAkJZGllKCJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIpOwogCi0Jc3RyYnVmX2FkZGYoJm9sZHJlZiwgInJlZnMvaGVhZHMvJXMiLCBvbGRuYW1lKTsKKwlpZiAoc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoJm9sZHJlZiwgb2xkbmFtZSkpIHsKKwkJLyoKKwkJICogQmFkIG5hbWUgLS0tIHRoaXMgY291bGQgYmUgYW4gYXR0ZW1wdCB0byByZW5hbWUgYQorCQkgKiByZWYgdGhhdCB3ZSB1c2VkIHRvIGFsbG93IHRvIGJlIGNyZWF0ZWQgYnkgYWNjaWRlbnQuCisJCSAqLworCQlpZiAocmVzb2x2ZV9yZWYob2xkcmVmLmJ1Ziwgc2hhMSwgMSwgTlVMTCkpCisJCQlyZWNvdmVyeSA9IDE7CisJCWVsc2UKKwkJCWRpZSgiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIsIG9sZG5hbWUpOworCX0KIAotCWlmIChjaGVja19yZWZfZm9ybWF0KG9sZHJlZi5idWYpKQotCQlkaWUoIkludmFsaWQgYnJhbmNoIG5hbWU6ICVzIiwgb2xkcmVmLmJ1Zik7Ci0KLQlzdHJidWZfYWRkZigmbmV3cmVmLCAicmVmcy9oZWFkcy8lcyIsIG5ld25hbWUpOwotCi0JaWYgKGNoZWNrX3JlZl9mb3JtYXQobmV3cmVmLmJ1ZikpCi0JCWRpZSgiSW52YWxpZCBicmFuY2ggbmFtZTogJXMiLCBuZXdyZWYuYnVmKTsKKwlpZiAoc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoJm5ld3JlZiwgbmV3bmFtZSkpCisJCWRpZSgiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIsIG5ld25hbWUpOwogCiAJaWYgKHJlc29sdmVfcmVmKG5ld3JlZi5idWYsIHNoYTEsIDEsIE5VTEwpICYmICFmb3JjZSkKLQkJZGllKCJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIsIG5ld25hbWUpOworCQlkaWUoIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIiwgbmV3cmVmLmJ1ZiArIDExKTsKIAogCXN0cmJ1Zl9hZGRmKCZsb2dtc2csICJCcmFuY2g6IHJlbmFtZWQgJXMgdG8gJXMiLAogCQkgb2xkcmVmLmJ1ZiwgbmV3cmVmLmJ1Zik7CkBAIC00NTIsNiArNTE2LDkgQEAKIAkJZGllKCJCcmFuY2ggcmVuYW1lIGZhaWxlZCIpOwogCXN0cmJ1Zl9yZWxlYXNlKCZsb2dtc2cpOwogCisJaWYgKHJlY292ZXJ5KQorCQl3YXJuaW5nKCJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIsIG9sZHJlZi5idWYgKyAxMSk7CisKIAkvKiBubyBuZWVkIHRvIHBhc3MgbG9nbXNnIGhlcmUgYXMgSEVBRCBkaWRuJ3QgcmVhbGx5IG1vdmUgKi8KIAlpZiAoIXN0cmNtcChvbGRuYW1lLCBoZWFkKSAmJiBjcmVhdGVfc3ltcmVmKCJIRUFEIiwgbmV3cmVmLmJ1ZiwgTlVMTCkpCiAJCWRpZSgiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIsIG5ld25hbWUpOwpAQCAtNDY2LDIyICs1MzMsNiBAQAogCXN0cmJ1Zl9yZWxlYXNlKCZuZXdzZWN0aW9uKTsKIH0KIAotc3RhdGljIGludCBvcHRfcGFyc2Vfd2l0aF9jb21taXQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKLXsKLQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKLQotCWlmICghYXJnKQotCQlyZXR1cm4gLTE7Ci0JaWYgKGdldF9zaGExKGFyZywgc2hhMSkpCi0JCWRpZSgibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIiwgYXJnKTsKLQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKLQlpZiAoIWNvbW1pdCkKLQkJZGllKCJubyBzdWNoIGNvbW1pdCAlcyIsIGFyZyk7Ci0JY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgb3B0LT52YWx1ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgb3B0X3BhcnNlX21lcmdlX2ZpbHRlcihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQogewogCW1lcmdlX2ZpbHRlciA9ICgob3B0LT5sb25nX25hbWVbMF0gPT0gJ24nKQpAQCAtNTA4LDcgKzU1OSw3IEBACiAJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAJCU9QVF9HUk9VUCgiR2VuZXJpYyBvcHRpb25zIiksCiAJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSksCi0JCU9QVF9TRVRfSU5UKCAwICwgInRyYWNrIiwgICZ0cmFjaywgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIiwKKwkJT1BUX1NFVF9JTlQoJ3QnLCAidHJhY2siLCAgJnRyYWNrLCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiLAogCQkJQlJBTkNIX1RSQUNLX0VYUExJQ0lUKSwKIAkJT1BUX0JPT0xFQU4oIDAgLCAiY29sb3IiLCAgJmJyYW5jaF91c2VfY29sb3IsICJ1c2UgY29sb3JlZCBvdXRwdXQiKSwKIAkJT1BUX1NFVF9JTlQoJ3InLCBOVUxMLCAgICAgJmtpbmRzLCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIsCkBAIC01MTcsMTMgKzU2OCwxMyBAQAogCQkJT1BUSU9OX0NBTExCQUNLLCAwLCAiY29udGFpbnMiLCAmd2l0aF9jb21taXQsICJjb21taXQiLAogCQkJInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiLAogCQkJUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCwKLQkJCW9wdF9wYXJzZV93aXRoX2NvbW1pdCwgKGludHB0cl90KSJIRUFEIiwKKwkJCXBhcnNlX29wdF93aXRoX2NvbW1pdCwgKGludHB0cl90KSJIRUFEIiwKIAkJfSwKIAkJewogCQkJT1BUSU9OX0NBTExCQUNLLCAwLCAid2l0aCIsICZ3aXRoX2NvbW1pdCwgImNvbW1pdCIsCiAJCQkicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIsCiAJCQlQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCwKLQkJCW9wdF9wYXJzZV93aXRoX2NvbW1pdCwgKGludHB0cl90KSAiSEVBRCIsCisJCQlwYXJzZV9vcHRfd2l0aF9jb21taXQsIChpbnRwdHJfdCkgIkhFQUQiLAogCQl9LAogCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKIApAQCAtNTcxLDcgKzYyMiw4IEBACiAJfQogCWhhc2hjcHkobWVyZ2VfZmlsdGVyX3JlZiwgaGVhZF9zaGExKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGJ1aWx0aW5fYnJhbmNoX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGJ1aWx0aW5fYnJhbmNoX3VzYWdlLAorCQkJICAgICAwKTsKIAlpZiAoISFkZWxldGUgKyAhIXJlbmFtZSArICEhZm9yY2VfY3JlYXRlID4gMSkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fYnJhbmNoX3VzYWdlLCBvcHRpb25zKTsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi1jYXQtZmlsZS5jIGIvYnVpbHRpbi1jYXQtZmlsZS5jCmluZGV4IDMwZDAwYTYuLjU5MDY4NDIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY2F0LWZpbGUuYworKysgYi9idWlsdGluLWNhdC1maWxlLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWRpZSgiZ2l0IGNhdC1maWxlOiB1bmtub3duIG9wdGlvbjogJXNcbiIsIGV4cF90eXBlKTsKKwkJZGllKCJnaXQgY2F0LWZpbGU6IHVua25vd24gb3B0aW9uOiAlcyIsIGV4cF90eXBlKTsKIAl9CiAKIAlpZiAoIWJ1ZikKQEAgLTIwMSw4ICsyMDEsOCBAQAogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNhdF9maWxlX3VzYWdlW10gPSB7Ci0JImdpdCBjYXQtZmlsZSBbLXR8LXN8LWV8LXB8PHR5cGU+XSA8c2hhMT4iLAotCSJnaXQgY2F0LWZpbGUgWy0tYmF0Y2h8LS1iYXRjaC1jaGVja10gPCA8bGlzdF9vZl9zaGExcz4iLAorCSJnaXQgY2F0LWZpbGUgKC10fC1zfC1lfC1wfDx0eXBlPikgPG9iamVjdD4iLAorCSJnaXQgY2F0LWZpbGUgKC0tYmF0Y2h8LS1iYXRjaC1jaGVjaykgPCA8bGlzdF9vZl9vYmplY3RzPiIsCiAJTlVMTAogfTsKIApAQCAtMjMxLDcgKzIzMSw3IEBACiAJaWYgKGFyZ2MgIT0gMyAmJiBhcmdjICE9IDIpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhjYXRfZmlsZV91c2FnZSwgb3B0aW9ucyk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBjYXRfZmlsZV91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBjYXRfZmlsZV91c2FnZSwgMCk7CiAKIAlpZiAob3B0KSB7CiAJCWlmIChhcmdjID09IDEpCmRpZmYgLS1naXQgYS9idWlsdGluLWNoZWNrLWF0dHIuYyBiL2J1aWx0aW4tY2hlY2stYXR0ci5jCmluZGV4IDE1YTA0YjcuLjhiZDA0MzAgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY2hlY2stYXR0ci5jCisrKyBiL2J1aWx0aW4tY2hlY2stYXR0ci5jCkBAIC02OSw4ICs2OSw4IEBACiAJaW50IGNudCwgaSwgZG91YmxlZGFzaDsKIAljb25zdCBjaGFyICplcnJzdHIgPSBOVUxMOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgY2hlY2tfYXR0cl9vcHRpb25zLCBjaGVja19hdHRyX3VzYWdlLAotCQlQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBjaGVja19hdHRyX29wdGlvbnMsCisJCQkgICAgIGNoZWNrX2F0dHJfdXNhZ2UsIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKIAlpZiAoIWFyZ2MpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhjaGVja19hdHRyX3VzYWdlLCBjaGVja19hdHRyX29wdGlvbnMpOwogCmRpZmYgLS1naXQgYS9idWlsdGluLWNoZWNrLXJlZi1mb3JtYXQuYyBiL2J1aWx0aW4tY2hlY2stcmVmLWZvcm1hdC5jCmluZGV4IDcwMWRlNDMuLmY5MzgxZTAgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY2hlY2stcmVmLWZvcm1hdC5jCisrKyBiL2J1aWx0aW4tY2hlY2stcmVmLWZvcm1hdC5jCkBAIC01LDkgKzUsMTggQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgInJlZnMuaCIKICNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCiAKIGludCBjbWRfY2hlY2tfcmVmX2Zvcm1hdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKKwlpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgIi0tYnJhbmNoIikpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCWlmIChzdHJidWZfY2hlY2tfYnJhbmNoX3JlZigmc2IsIGFyZ3ZbMl0pKQorCQkJZGllKCInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lIiwgYXJndlsyXSk7CisJCXByaW50ZigiJXNcbiIsIHNiLmJ1ZiArIDExKTsKKwkJZXhpdCgwKTsKKwl9CiAJaWYgKGFyZ2MgIT0gMikKIAkJdXNhZ2UoImdpdCBjaGVjay1yZWYtZm9ybWF0IHJlZm5hbWUiKTsKIAlyZXR1cm4gISFjaGVja19yZWZfZm9ybWF0KGFyZ3ZbMV0pOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1jaGVja291dC1pbmRleC5jIGIvYnVpbHRpbi1jaGVja291dC1pbmRleC5jCmluZGV4IDBkNTM0YmMuLmE3YTVlZTEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY2hlY2tvdXQtaW5kZXguYworKysgYi9idWlsdGluLWNoZWNrb3V0LWluZGV4LmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogc3RhdGljIHZvaWQgY2hlY2tvdXRfYWxsKGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHByZWZpeF9sZW5ndGgpCiB7CiAJaW50IGksIGVycnMgPSAwOwotCXN0cnVjdCBjYWNoZV9lbnRyeSogbGFzdF9jZSA9IE5VTEw7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpsYXN0X2NlID0gTlVMTDsKIAogCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnIgOyBpKyspIHsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKQEAgLTI0OSw3ICsyNDksNyBAQAogCQlkaWUoImludmFsaWQgY2FjaGUiKTsKIAl9CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX2NoZWNrb3V0X2luZGV4X29wdGlvbnMsCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2NoZWNrb3V0X2luZGV4X29wdGlvbnMsCiAJCQlidWlsdGluX2NoZWNrb3V0X2luZGV4X3VzYWdlLCAwKTsKIAlzdGF0ZS5mb3JjZSA9IGZvcmNlOwogCXN0YXRlLnF1aWV0ID0gcXVpZXQ7CkBAIC0yNzgsNyArMjc4LDcgQEAKIAkJcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYXJnKTsKIAkJY2hlY2tvdXRfZmlsZShwLCBwcmVmaXhfbGVuZ3RoKTsKIAkJaWYgKHAgPCBhcmcgfHwgcCA+IGFyZyArIHN0cmxlbihhcmcpKQotCQkJZnJlZSgoY2hhciopcCk7CisJCQlmcmVlKChjaGFyICopcCk7CiAJfQogCiAJaWYgKHJlYWRfZnJvbV9zdGRpbikgewpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1jaGVja291dC5jIGIvYnVpbHRpbi1jaGVja291dC5jCmluZGV4IGI1ZGQ5YzAuLjhhOWE0NzQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY2hlY2tvdXQuYworKysgYi9idWlsdGluLWNoZWNrb3V0LmMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSAiY29tbWl0LmgiCiAjaW5jbHVkZSAidHJlZS5oIgogI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKICNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKICNpbmNsdWRlICJkaXIuaCIKICNpbmNsdWRlICJydW4tY29tbWFuZC5oIgpAQCAtMzgsMjMgKzM5LDEzIEBACiBzdGF0aWMgaW50IHBvc3RfY2hlY2tvdXRfaG9vayhzdHJ1Y3QgY29tbWl0ICpvbGQsIHN0cnVjdCBjb21taXQgKm5ldywKIAkJCSAgICAgIGludCBjaGFuZ2VkKQogewotCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHByb2M7Ci0JY29uc3QgY2hhciAqbmFtZSA9IGdpdF9wYXRoKCJob29rcy9wb3N0LWNoZWNrb3V0Iik7Ci0JY29uc3QgY2hhciAqYXJndls1XTsKKwlyZXR1cm4gcnVuX2hvb2soTlVMTCwgInBvc3QtY2hlY2tvdXQiLAorCQkJc2hhMV90b19oZXgob2xkID8gb2xkLT5vYmplY3Quc2hhMSA6IG51bGxfc2hhMSksCisJCQlzaGExX3RvX2hleChuZXcgPyBuZXctPm9iamVjdC5zaGExIDogbnVsbF9zaGExKSwKKwkJCWNoYW5nZWQgPyAiMSIgOiAiMCIsIE5VTEwpOworCS8qICJuZXciIGNhbiBiZSBOVUxMIHdoZW4gY2hlY2tpbmcgb3V0IGZyb20gdGhlIGluZGV4IGJlZm9yZQorCSAgIGEgY29tbWl0IGV4aXN0cy4gKi8KIAotCWlmIChhY2Nlc3MobmFtZSwgWF9PSykgPCAwKQotCQlyZXR1cm4gMDsKLQotCW1lbXNldCgmcHJvYywgMCwgc2l6ZW9mKHByb2MpKTsKLQlhcmd2WzBdID0gbmFtZTsKLQlhcmd2WzFdID0geHN0cmR1cChzaGExX3RvX2hleChvbGQgPyBvbGQtPm9iamVjdC5zaGExIDogbnVsbF9zaGExKSk7Ci0JYXJndlsyXSA9IHhzdHJkdXAoc2hhMV90b19oZXgobmV3LT5vYmplY3Quc2hhMSkpOwotCWFyZ3ZbM10gPSBjaGFuZ2VkID8gIjEiIDogIjAiOwotCWFyZ3ZbNF0gPSBOVUxMOwotCXByb2MuYXJndiA9IGFyZ3Y7Ci0JcHJvYy5ub19zdGRpbiA9IDE7Ci0JcHJvYy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKLQlyZXR1cm4gcnVuX2NvbW1hbmQoJnByb2MpOwogfQogCiBzdGF0aWMgaW50IHVwZGF0ZV9zb21lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLApAQCAtNjMsOSArNTQsNiBAQAogCWludCBsZW47CiAJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKIAotCWlmIChTX0lTR0lUTElOSyhtb2RlKSkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoU19JU0RJUihtb2RlKSkKIAkJcmV0dXJuIFJFQURfVFJFRV9SRUNVUlNJVkU7CiAKQEAgLTE5MSw3ICsxNzksNyBAQAogCS8qCiAJICogTkVFRFNXT1JLOgogCSAqIFRoZXJlIGlzIGFic29sdXRlbHkgbm8gcmVhc29uIHRvIHdyaXRlIHRoaXMgYXMgYSBibG9iIG9iamVjdAotCSAqIGFuZCBjcmVhdGUgYSBwaG9uZXkgY2FjaGUgZW50cnkganVzdCB0byBsZWFrLiAgVGhpcyBoYWNrIGlzCisJICogYW5kIGNyZWF0ZSBhIHBob255IGNhY2hlIGVudHJ5IGp1c3QgdG8gbGVhay4gIFRoaXMgaGFjayBpcwogCSAqIHByaW1hcmlseSB0byBnZXQgdG8gdGhlIHdyaXRlX2VudHJ5KCkgbWFjaGluZXJ5IHRoYXQgbWFzc2FnZXMKIAkgKiB0aGUgY29udGVudHMgdG8gd29yay10cmVlIGZvcm1hdCBhbmQgd3JpdGVzIG91dCB3aGljaCBvbmx5CiAJICogYWxsb3dzIGl0IGZvciBhIGNhY2hlIGVudHJ5LiAgVGhlIGNvZGUgaW4gd3JpdGVfZW50cnkoKSBuZWVkcwpAQCAtMjI4LDcgKzIxNiw3IEBACiAJc3RydWN0IGxvY2tfZmlsZSAqbG9ja19maWxlID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOwogCiAJbmV3ZmQgPSBob2xkX2xvY2tlZF9pbmRleChsb2NrX2ZpbGUsIDEpOwotCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQocGF0aHNwZWMpIDwgMCkKIAkJcmV0dXJuIGVycm9yKCJjb3JydXB0IGluZGV4IGZpbGUiKTsKIAogCWlmIChzb3VyY2VfdHJlZSkKQEAgLTI0MCw3ICsyMjgsNyBAQAogCiAJZm9yIChwb3MgPSAwOyBwb3MgPCBhY3RpdmVfbnI7IHBvcysrKSB7CiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKLQkJcGF0aHNwZWNfbWF0Y2gocGF0aHNwZWMsIHBzX21hdGNoZWQsIGNlLT5uYW1lLCAwKTsKKwkJbWF0Y2hfcGF0aHNwZWMocGF0aHNwZWMsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwgMCwgcHNfbWF0Y2hlZCk7CiAJfQogCiAJaWYgKHJlcG9ydF9wYXRoX2Vycm9yKHBzX21hdGNoZWQsIHBhdGhzcGVjLCAwKSkKQEAgLTI0OSw3ICsyMzcsNyBAQAogCS8qIEFueSB1bm1lcmdlZCBwYXRocz8gKi8KIAlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspIHsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOwotCQlpZiAocGF0aHNwZWNfbWF0Y2gocGF0aHNwZWMsIE5VTEwsIGNlLT5uYW1lLCAwKSkgeworCQlpZiAobWF0Y2hfcGF0aHNwZWMocGF0aHNwZWMsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwgMCwgTlVMTCkpIHsKIAkJCWlmICghY2Vfc3RhZ2UoY2UpKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKG9wdHMtPmZvcmNlKSB7CkBAIC0yNzQsNyArMjYyLDcgQEAKIAlzdGF0ZS5yZWZyZXNoX2NhY2hlID0gMTsKIAlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspIHsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOwotCQlpZiAocGF0aHNwZWNfbWF0Y2gocGF0aHNwZWMsIE5VTEwsIGNlLT5uYW1lLCAwKSkgeworCQlpZiAobWF0Y2hfcGF0aHNwZWMocGF0aHNwZWMsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwgMCwgTlVMTCkpIHsKIAkJCWlmICghY2Vfc3RhZ2UoY2UpKSB7CiAJCQkJZXJycyB8PSBjaGVja291dF9lbnRyeShjZSwgJnN0YXRlLCBOVUxMKTsKIAkJCQljb250aW51ZTsKQEAgLTMwNSw2ICsyOTMsOCBAQAogCWluaXRfcmV2aXNpb25zKCZyZXYsIE5VTEwpOwogCXJldi5hYmJyZXYgPSAwOwogCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfTkFNRV9TVEFUVVM7CisJaWYgKGRpZmZfc2V0dXBfZG9uZSgmcmV2LmRpZmZvcHQpIDwgMCkKKwkJZGllKCJkaWZmX3NldHVwX2RvbmUgZmFpbGVkIik7CiAJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXYsIGhlYWQsIE5VTEwpOwogCXJ1bl9kaWZmX2luZGV4KCZyZXYsIDApOwogfQpAQCAtMzYxLDggKzM1MSwxMSBAQAogc3RhdGljIHZvaWQgc2V0dXBfYnJhbmNoX3BhdGgoc3RydWN0IGJyYW5jaF9pbmZvICpicmFuY2gpCiB7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKLQlzdHJidWZfYWRkc3RyKCZidWYsICJyZWZzL2hlYWRzLyIpOwotCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgYnJhbmNoLT5uYW1lKTsKKworCXN0cmJ1Zl9icmFuY2huYW1lKCZidWYsIGJyYW5jaC0+bmFtZSk7CisJaWYgKHN0cmNtcChidWYuYnVmLCBicmFuY2gtPm5hbWUpKQorCQlicmFuY2gtPm5hbWUgPSB4c3RyZHVwKGJ1Zi5idWYpOworCXN0cmJ1Zl9zcGxpY2UoJmJ1ZiwgMCwgMCwgInJlZnMvaGVhZHMvIiwgMTEpOwogCWJyYW5jaC0+cGF0aCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CiB9CiAKQEAgLTM3Myw3ICszNjYsNyBAQAogCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKIAlpbnQgbmV3ZmQgPSBob2xkX2xvY2tlZF9pbmRleChsb2NrX2ZpbGUsIDEpOwogCi0JaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZChOVUxMKSA8IDApCiAJCXJldHVybiBlcnJvcigiY29ycnVwdCBpbmRleCBmaWxlIik7CiAKIAlpZiAob3B0cy0+Zm9yY2UpIHsKQEAgLTQwNyw3ICs0MDAsNyBAQAogCQl0b3B0cy52ZXJib3NlX3VwZGF0ZSA9ICFvcHRzLT5xdWlldDsKIAkJdG9wdHMuZm4gPSB0d293YXlfbWVyZ2U7CiAJCXRvcHRzLmRpciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp0b3B0cy5kaXIpKTsKLQkJdG9wdHMuZGlyLT5zaG93X2lnbm9yZWQgPSAxOworCQl0b3B0cy5kaXItPmZsYWdzIHw9IERJUl9TSE9XX0lHTk9SRUQ7CiAJCXRvcHRzLmRpci0+ZXhjbHVkZV9wZXJfZGlyID0gIi5naXRpZ25vcmUiOwogCQl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChvbGQtPmNvbW1pdC0+b2JqZWN0LnNoYTEpOwogCQlpbml0X3RyZWVfZGVzYygmdHJlZXNbMF0sIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CkBAIC01MDMsMTAgKzQ5NiwxMCBAQAogCQljcmVhdGVfc3ltcmVmKCJIRUFEIiwgbmV3LT5wYXRoLCBtc2cuYnVmKTsKIAkJaWYgKCFvcHRzLT5xdWlldCkgewogCQkJaWYgKG9sZC0+cGF0aCAmJiAhc3RyY21wKG5ldy0+cGF0aCwgb2xkLT5wYXRoKSkKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIkFscmVhZHkgb24gXCIlc1wiXG4iLAorCQkJCWZwcmludGYoc3RkZXJyLCAiQWxyZWFkeSBvbiAnJXMnXG4iLAogCQkJCQluZXctPm5hbWUpOwogCQkJZWxzZQotCQkJCWZwcmludGYoc3RkZXJyLCAiU3dpdGNoZWQgdG8lcyBicmFuY2ggXCIlc1wiXG4iLAorCQkJCWZwcmludGYoc3RkZXJyLCAiU3dpdGNoZWQgdG8lcyBicmFuY2ggJyVzJ1xuIiwKIAkJCQkJb3B0cy0+bmV3X2JyYW5jaCA/ICIgYSBuZXciIDogIiIsCiAJCQkJCW5ldy0+bmFtZSk7CiAJCX0KQEAgLTUxNSw3ICs1MDgsNyBAQAogCQkJICAgUkVGX05PREVSRUYsIERJRV9PTl9FUlIpOwogCQlpZiAoIW9wdHMtPnF1aWV0KSB7CiAJCQlpZiAob2xkLT5wYXRoKQotCQkJCWZwcmludGYoc3RkZXJyLCAiTm90ZTogbW92aW5nIHRvIFwiJXNcIiB3aGljaCBpc24ndCBhIGxvY2FsIGJyYW5jaFxuSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBmcm9tIHRoaXMgY2hlY2tvdXQsIHlvdSBtYXkgZG8gc29cbihub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1iIHdpdGggdGhlIGNoZWNrb3V0IGNvbW1hbmQgYWdhaW4uIEV4YW1wbGU6XG4gIGdpdCBjaGVja291dCAtYiA8bmV3X2JyYW5jaF9uYW1lPlxuIiwgbmV3LT5uYW1lKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIk5vdGU6IG1vdmluZyB0byAnJXMnIHdoaWNoIGlzbid0IGEgbG9jYWwgYnJhbmNoXG5JZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGZyb20gdGhpcyBjaGVja291dCwgeW91IG1heSBkbyBzb1xuKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWIgd2l0aCB0aGUgY2hlY2tvdXQgY29tbWFuZCBhZ2Fpbi4gRXhhbXBsZTpcbiAgZ2l0IGNoZWNrb3V0IC1iIDxuZXdfYnJhbmNoX25hbWU+XG4iLCBuZXctPm5hbWUpOwogCQkJZGVzY3JpYmVfZGV0YWNoZWRfaGVhZCgiSEVBRCBpcyBub3cgYXQiLCBuZXctPmNvbW1pdCk7CiAJCX0KIAl9CkBAIC01NDgsMTggKzU0MSwxMCBAQAogCQlwYXJzZV9jb21taXQobmV3LT5jb21taXQpOwogCX0KIAotCS8qCi0JICogSWYgd2Ugd2VyZSBvbiBhIGRldGFjaGVkIEhFQUQsIGJ1dCB3ZSBhcmUgbm93IG1vdmluZyB0bwotCSAqIGEgbmV3IGNvbW1pdCwgd2Ugd2FudCB0byBtZW50aW9uIHRoZSBvbGQgY29tbWl0IG9uY2UgbW9yZQotCSAqIHRvIHJlbWluZCB0aGUgdXNlciB0aGF0IGl0IG1pZ2h0IGJlIGxvc3QuCi0JICovCi0JaWYgKCFvcHRzLT5xdWlldCAmJiAhb2xkLnBhdGggJiYgb2xkLmNvbW1pdCAmJiBuZXctPmNvbW1pdCAhPSBvbGQuY29tbWl0KQotCQlkZXNjcmliZV9kZXRhY2hlZF9oZWFkKCJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIsIG9sZC5jb21taXQpOwotCiAJaWYgKCFvbGQuY29tbWl0ICYmICFvcHRzLT5mb3JjZSkgewogCQlpZiAoIW9wdHMtPnF1aWV0KSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IFlvdSBhcHBlYXIgdG8gYmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4uXG4iKTsKLQkJCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogRm9yY2luZyBjaGVja291dCBvZiAlcy5cbiIsIG5ldy0+bmFtZSk7CisJCQl3YXJuaW5nKCJZb3UgYXBwZWFyIHRvIGJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuLiIpOworCQkJd2FybmluZygiRm9yY2luZyBjaGVja291dCBvZiAlcy4iLCBuZXctPm5hbWUpOwogCQl9CiAJCW9wdHMtPmZvcmNlID0gMTsKIAl9CkBAIC01NjgsNiArNTUzLDE0IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCS8qCisJICogSWYgd2Ugd2VyZSBvbiBhIGRldGFjaGVkIEhFQUQsIGJ1dCBoYXZlIG5vdyBtb3ZlZCB0bworCSAqIGEgbmV3IGNvbW1pdCwgd2Ugd2FudCB0byBtZW50aW9uIHRoZSBvbGQgY29tbWl0IG9uY2UgbW9yZQorCSAqIHRvIHJlbWluZCB0aGUgdXNlciB0aGF0IGl0IG1pZ2h0IGJlIGxvc3QuCisJICovCisJaWYgKCFvcHRzLT5xdWlldCAmJiAhb2xkLnBhdGggJiYgb2xkLmNvbW1pdCAmJiBuZXctPmNvbW1pdCAhPSBvbGQuY29tbWl0KQorCQlkZXNjcmliZV9kZXRhY2hlZF9oZWFkKCJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIsIG9sZC5jb21taXQpOworCiAJdXBkYXRlX3JlZnNfZm9yX3N3aXRjaChvcHRzLCAmb2xkLCBuZXcpOwogCiAJcmV0ID0gcG9zdF9jaGVja291dF9ob29rKG9sZC5jb21taXQsIG5ldy0+Y29tbWl0LCAxKTsKQEAgLTYxMiw3ICs2MDUsNyBAQAogCiAJb3B0cy50cmFjayA9IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRDsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGNoZWNrb3V0X3VzYWdlLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgY2hlY2tvdXRfdXNhZ2UsCiAJCQkgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKIAogCS8qIC0tdHJhY2sgd2l0aG91dCAtYiBzaG91bGQgRFdJTSAqLwpAQCAtNjcxLDYgKzY2NCw5IEBACiAJCWFyZyA9IGFyZ3ZbMF07CiAJCWhhc19kYXNoX2Rhc2ggPSAoYXJnYyA+IDEpICYmICFzdHJjbXAoYXJndlsxXSwgIi0tIik7CiAKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLSIpKQorCQkJYXJnID0gIkB7LTF9IjsKKwogCQlpZiAoZ2V0X3NoYTEoYXJnLCByZXYpKSB7CiAJCQlpZiAoaGFzX2Rhc2hfZGFzaCkgICAgICAgICAgLyogY2FzZSAoMSkgKi8KIAkJCQlkaWUoImludmFsaWQgcmVmZXJlbmNlOiAlcyIsIGFyZyk7CkBAIC03MzUsMTIgKzczMSwxMSBAQAogCiAJaWYgKG9wdHMubmV3X2JyYW5jaCkgewogCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwotCQlzdHJidWZfYWRkc3RyKCZidWYsICJyZWZzL2hlYWRzLyIpOwotCQlzdHJidWZfYWRkc3RyKCZidWYsIG9wdHMubmV3X2JyYW5jaCk7CisJCWlmIChzdHJidWZfY2hlY2tfYnJhbmNoX3JlZigmYnVmLCBvcHRzLm5ld19icmFuY2gpKQorCQkJZGllKCJnaXQgY2hlY2tvdXQ6IHdlIGRvIG5vdCBsaWtlICclcycgYXMgYSBicmFuY2ggbmFtZS4iLAorCQkJICAgIG9wdHMubmV3X2JyYW5jaCk7CiAJCWlmICghZ2V0X3NoYTEoYnVmLmJ1ZiwgcmV2KSkKIAkJCWRpZSgiZ2l0IGNoZWNrb3V0OiBicmFuY2ggJXMgYWxyZWFkeSBleGlzdHMiLCBvcHRzLm5ld19icmFuY2gpOwotCQlpZiAoY2hlY2tfcmVmX2Zvcm1hdChidWYuYnVmKSkKLQkJCWRpZSgiZ2l0IGNoZWNrb3V0OiB3ZSBkbyBub3QgbGlrZSAnJXMnIGFzIGEgYnJhbmNoIG5hbWUuIiwgb3B0cy5uZXdfYnJhbmNoKTsKIAkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiAJfQogCmRpZmYgLS1naXQgYS9idWlsdGluLWNsZWFuLmMgYi9idWlsdGluLWNsZWFuLmMKaW5kZXggZjc4YzJmYi4uMmQ4YzczNSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jbGVhbi5jCisrKyBiL2J1aWx0aW4tY2xlYW4uYwpAQCAtMzMsNyArMzMsNiBAQAogCWludCBpZ25vcmVkX29ubHkgPSAwLCBiYXNlbGVuID0gMCwgY29uZmlnX3NldCA9IDAsIGVycm9ycyA9IDA7CiAJc3RydWN0IHN0cmJ1ZiBkaXJlY3RvcnkgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7Ci0JY29uc3QgY2hhciAqcGF0aCwgKmJhc2U7CiAJc3RhdGljIGNvbnN0IGNoYXIgKipwYXRoc3BlYzsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCWNvbnN0IGNoYXIgKnFuYW1lOwpAQCAtNTYsMTEgKzU1LDEyIEBACiAJZWxzZQogCQljb25maWdfc2V0ID0gMTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGJ1aWx0aW5fY2xlYW5fdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgYnVpbHRpbl9jbGVhbl91c2FnZSwKKwkJCSAgICAgMCk7CiAKIAltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOwogCWlmIChpZ25vcmVkX29ubHkpCi0JCWRpci5zaG93X2lnbm9yZWQgPSAxOworCQlkaXIuZmxhZ3MgfD0gRElSX1NIT1dfSUdOT1JFRDsKIAogCWlmIChpZ25vcmVkICYmIGlnbm9yZWRfb25seSkKIAkJZGllKCIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTsKQEAgLTY5LDcgKzY5LDcgQEAKIAkJZGllKCJjbGVhbi5yZXF1aXJlRm9yY2UlcyBzZXQgYW5kIC1uIG9yIC1mIG5vdCBnaXZlbjsgIgogCQkgICAgInJlZnVzaW5nIHRvIGNsZWFuIiwgY29uZmlnX3NldCA/ICIiIDogIiBub3QiKTsKIAotCWRpci5zaG93X290aGVyX2RpcmVjdG9yaWVzID0gMTsKKwlkaXIuZmxhZ3MgfD0gRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVM7CiAKIAlpZiAoIWlnbm9yZWQpCiAJCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCZkaXIpOwpAQCAtNzcsMTYgKzc3LDcgQEAKIAlwYXRoc3BlYyA9IGdldF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YpOwogCXJlYWRfY2FjaGUoKTsKIAotCS8qCi0JICogQ2FsY3VsYXRlIGNvbW1vbiBwcmVmaXggZm9yIHRoZSBwYXRoc3BlYywgYW5kCi0JICogdXNlIHRoYXQgdG8gb3B0aW1pemUgdGhlIGRpcmVjdG9yeSB3YWxrCi0JICovCi0JYmFzZWxlbiA9IGNvbW1vbl9wcmVmaXgocGF0aHNwZWMpOwotCXBhdGggPSAiLiI7Ci0JYmFzZSA9ICIiOwotCWlmIChiYXNlbGVuKQotCQlwYXRoID0gYmFzZSA9IHhtZW1kdXB6KCpwYXRoc3BlYywgYmFzZWxlbik7Ci0JcmVhZF9kaXJlY3RvcnkoJmRpciwgcGF0aCwgYmFzZSwgYmFzZWxlbiwgcGF0aHNwZWMpOworCWZpbGxfZGlyZWN0b3J5KCZkaXIsIHBhdGhzcGVjKTsKIAogCWlmIChwYXRoc3BlYykKIAkJc2VlbiA9IHhtYWxsb2MoYXJnYyA+IDAgPyBhcmdjIDogMSk7CmRpZmYgLS1naXQgYS9idWlsdGluLWNsb25lLmMgYi9idWlsdGluLWNsb25lLmMKaW5kZXggMmZlYWM5Yy4uMzJkZWE3NCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jbG9uZS5jCisrKyBiL2J1aWx0aW4tY2xvbmUuYwpAQCAtMTksNiArMTksMTAgQEAKICNpbmNsdWRlICJzdHJidWYuaCIKICNpbmNsdWRlICJkaXIuaCIKICNpbmNsdWRlICJwYWNrLXJlZnMuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAKIC8qCiAgKiBPdmVyYWxsIEZJWE1FczoKQEAgLTEwMCwxMSArMTA0LDEyIEBACiBzdGF0aWMgY2hhciAqZ3Vlc3NfZGlyX25hbWUoY29uc3QgY2hhciAqcmVwbywgaW50IGlzX2J1bmRsZSwgaW50IGlzX2JhcmUpCiB7CiAJY29uc3QgY2hhciAqZW5kID0gcmVwbyArIHN0cmxlbihyZXBvKSwgKnN0YXJ0OworCWNoYXIgKmRpcjsKIAogCS8qCi0JICogU3RyaXAgdHJhaWxpbmcgc2xhc2hlcyBhbmQgLy5naXQKKwkgKiBTdHJpcCB0cmFpbGluZyBzcGFjZXMsIHNsYXNoZXMgYW5kIC8uZ2l0CiAJICovCi0Jd2hpbGUgKHJlcG8gPCBlbmQgJiYgaXNfZGlyX3NlcChlbmRbLTFdKSkKKwl3aGlsZSAocmVwbyA8IGVuZCAmJiAoaXNfZGlyX3NlcChlbmRbLTFdKSB8fCBpc3NwYWNlKGVuZFstMV0pKSkKIAkJZW5kLS07CiAJaWYgKGVuZCAtIHJlcG8gPiA1ICYmIGlzX2Rpcl9zZXAoZW5kWy01XSkgJiYKIAkgICAgIXN0cm5jbXAoZW5kIC0gNCwgIi5naXQiLCA0KSkgewpAQCAtMTM2LDEwICsxNDEsMzMgQEAKIAlpZiAoaXNfYmFyZSkgewogCQlzdHJ1Y3Qgc3RyYnVmIHJlc3VsdCA9IFNUUkJVRl9JTklUOwogCQlzdHJidWZfYWRkZigmcmVzdWx0LCAiJS4qcy5naXQiLCAoaW50KShlbmQgLSBzdGFydCksIHN0YXJ0KTsKLQkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnJlc3VsdCwgMCk7CisJCWRpciA9IHN0cmJ1Zl9kZXRhY2goJnJlc3VsdCwgTlVMTCk7CisJfSBlbHNlCisJCWRpciA9IHhzdHJuZHVwKHN0YXJ0LCBlbmQgLSBzdGFydCk7CisJLyoKKwkgKiBSZXBsYWNlIHNlcXVlbmNlcyBvZiAnY29udHJvbCcgY2hhcmFjdGVycyBhbmQgd2hpdGVzcGFjZQorCSAqIHdpdGggb25lIGFzY2lpIHNwYWNlLCByZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzLgorCSAqLworCWlmICgqZGlyKSB7CisJCWNoYXIgKm91dCA9IGRpcjsKKwkJaW50IHByZXZfc3BhY2UgPSAxIC8qIHN0cmlwIGxlYWRpbmcgd2hpdGVzcGFjZSAqLzsKKwkJZm9yIChlbmQgPSBkaXI7ICplbmQ7ICsrZW5kKSB7CisJCQljaGFyIGNoID0gKmVuZDsKKwkJCWlmICgodW5zaWduZWQgY2hhciljaCA8ICdceDIwJykKKwkJCQljaCA9ICdceDIwJzsKKwkJCWlmIChpc3NwYWNlKGNoKSkgeworCQkJCWlmIChwcmV2X3NwYWNlKQorCQkJCQljb250aW51ZTsKKwkJCQlwcmV2X3NwYWNlID0gMTsKKwkJCX0gZWxzZQorCQkJCXByZXZfc3BhY2UgPSAwOworCQkJKm91dCsrID0gY2g7CisJCX0KKwkJKm91dCA9ICdcMCc7CisJCWlmIChvdXQgPiBkaXIgJiYgcHJldl9zcGFjZSkKKwkJCW91dFstMV0gPSAnXDAnOwogCX0KLQotCXJldHVybiB4c3RybmR1cChzdGFydCwgZW5kIC0gc3RhcnQpOworCXJldHVybiBkaXI7CiB9CiAKIHN0YXRpYyB2b2lkIHN0cmlwX3RyYWlsaW5nX3NsYXNoZXMoY2hhciAqZGlyKQpAQCAtMTkyLDE1ICsyMjAsMTUgQEAKIAogCWRpciA9IG9wZW5kaXIoc3JjLT5idWYpOwogCWlmICghZGlyKQotCQlkaWUoImZhaWxlZCB0byBvcGVuICVzXG4iLCBzcmMtPmJ1Zik7CisJCWRpZV9lcnJubygiZmFpbGVkIHRvIG9wZW4gJyVzJyIsIHNyYy0+YnVmKTsKIAogCWlmIChta2RpcihkZXN0LT5idWYsIDA3NzcpKSB7CiAJCWlmIChlcnJubyAhPSBFRVhJU1QpCi0JCQlkaWUoImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzXG4iLCBkZXN0LT5idWYpOworCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIiwgZGVzdC0+YnVmKTsKIAkJZWxzZSBpZiAoc3RhdChkZXN0LT5idWYsICZidWYpKQotCQkJZGllKCJmYWlsZWQgdG8gc3RhdCAlc1xuIiwgZGVzdC0+YnVmKTsKKwkJCWRpZV9lcnJubygiZmFpbGVkIHRvIHN0YXQgJyVzJyIsIGRlc3QtPmJ1Zik7CiAJCWVsc2UgaWYgKCFTX0lTRElSKGJ1Zi5zdF9tb2RlKSkKLQkJCWRpZSgiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnlcbiIsIGRlc3QtPmJ1Zik7CisJCQlkaWUoIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IiwgZGVzdC0+YnVmKTsKIAl9CiAKIAlzdHJidWZfYWRkY2goc3JjLCAnLycpOwpAQCAtMjI0LDE2ICsyNTIsMTYgQEAKIAkJfQogCiAJCWlmICh1bmxpbmsoZGVzdC0+YnVmKSAmJiBlcnJubyAhPSBFTk9FTlQpCi0JCQlkaWUoImZhaWxlZCB0byB1bmxpbmsgJXNcbiIsIGRlc3QtPmJ1Zik7CisJCQlkaWVfZXJybm8oImZhaWxlZCB0byB1bmxpbmsgJyVzJyIsIGRlc3QtPmJ1Zik7CiAJCWlmICghb3B0aW9uX25vX2hhcmRsaW5rcykgewogCQkJaWYgKCFsaW5rKHNyYy0+YnVmLCBkZXN0LT5idWYpKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKG9wdGlvbl9sb2NhbCkKLQkJCQlkaWUoImZhaWxlZCB0byBjcmVhdGUgbGluayAlc1xuIiwgZGVzdC0+YnVmKTsKKwkJCQlkaWVfZXJybm8oImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIiwgZGVzdC0+YnVmKTsKIAkJCW9wdGlvbl9ub19oYXJkbGlua3MgPSAxOwogCQl9CiAJCWlmIChjb3B5X2ZpbGUoZGVzdC0+YnVmLCBzcmMtPmJ1ZiwgMDY2NikpCi0JCQlkaWUoImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJXNcbiIsIGRlc3QtPmJ1Zik7CisJCQlkaWVfZXJybm8oImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIsIGRlc3QtPmJ1Zik7CiAJfQogCWNsb3NlZGlyKGRpcik7CiB9CkBAIC0yNjYsNyArMjk0LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmp1bmtfd29ya190cmVlOwogc3RhdGljIGNvbnN0IGNoYXIgKmp1bmtfZ2l0X2RpcjsKLXBpZF90IGp1bmtfcGlkOworc3RhdGljIHBpZF90IGp1bmtfcGlkOwogCiBzdGF0aWMgdm9pZCByZW1vdmVfanVuayh2b2lkKQogewpAQCAtMjg4LDQ3ICszMTYsMTAgQEAKIHN0YXRpYyB2b2lkIHJlbW92ZV9qdW5rX29uX3NpZ25hbChpbnQgc2lnbm8pCiB7CiAJcmVtb3ZlX2p1bmsoKTsKLQlzaWduYWwoU0lHSU5ULCBTSUdfREZMKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOwogCXJhaXNlKHNpZ25vKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCByZWYgKmxvY2F0ZV9oZWFkKGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgcmVmICptYXBwZWRfcmVmcywKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCByZWYgKipyZW1vdGVfaGVhZF9wKQotewotCWNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9oZWFkID0gTlVMTDsKLQljb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfbWFzdGVyID0gTlVMTDsKLQljb25zdCBzdHJ1Y3QgcmVmICpyOwotCWZvciAociA9IHJlZnM7IHI7IHIgPSByLT5uZXh0KQotCQlpZiAoIXN0cmNtcChyLT5uYW1lLCAiSEVBRCIpKQotCQkJcmVtb3RlX2hlYWQgPSByOwotCi0JZm9yIChyID0gbWFwcGVkX3JlZnM7IHI7IHIgPSByLT5uZXh0KQotCQlpZiAoIXN0cmNtcChyLT5uYW1lLCAicmVmcy9oZWFkcy9tYXN0ZXIiKSkKLQkJCXJlbW90ZV9tYXN0ZXIgPSByOwotCi0JaWYgKHJlbW90ZV9oZWFkX3ApCi0JCSpyZW1vdGVfaGVhZF9wID0gcmVtb3RlX2hlYWQ7Ci0KLQkvKiBJZiB0aGVyZSdzIG5vIEhFQUQgdmFsdWUgYXQgYWxsLCBuZXZlciBtaW5kLiAqLwotCWlmICghcmVtb3RlX2hlYWQpCi0JCXJldHVybiBOVUxMOwotCi0JLyogSWYgcmVmcy9oZWFkcy9tYXN0ZXIgY291bGQgYmUgcmlnaHQsIGl0IGlzLiAqLwotCWlmIChyZW1vdGVfbWFzdGVyICYmICFoYXNoY21wKHJlbW90ZV9tYXN0ZXItPm9sZF9zaGExLAotCQkJCSAgICAgIHJlbW90ZV9oZWFkLT5vbGRfc2hhMSkpCi0JCXJldHVybiByZW1vdGVfbWFzdGVyOwotCi0JLyogTG9vayBmb3IgYW5vdGhlciByZWYgdGhhdCBwb2ludHMgdGhlcmUgKi8KLQlmb3IgKHIgPSBtYXBwZWRfcmVmczsgcjsgciA9IHItPm5leHQpCi0JCWlmIChyICE9IHJlbW90ZV9oZWFkICYmCi0JCSAgICAhaGFzaGNtcChyLT5vbGRfc2hhMSwgcmVtb3RlX2hlYWQtPm9sZF9zaGExKSkKLQkJCXJldHVybiByOwotCi0JLyogTm90aGluZyBpcyB0aGUgc2FtZSAqLwotCXJldHVybiBOVUxMOwotfQotCiBzdGF0aWMgc3RydWN0IHJlZiAqd3JpdGVfcmVtb3RlX3JlZnMoY29uc3Qgc3RydWN0IHJlZiAqcmVmcywKIAkJc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMsIGNvbnN0IGNoYXIgKnJlZmxvZykKIHsKQEAgLTM1MSwzMSArMzQyLDI5IEBACiAKIGludCBjbWRfY2xvbmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7Ci0JaW50IHVzZV9sb2NhbF9oYXJkbGlua3MgPSAxOwotCWludCB1c2Vfc2VwYXJhdGVfcmVtb3RlID0gMTsKIAlpbnQgaXNfYnVuZGxlID0gMDsKIAlzdHJ1Y3Qgc3RhdCBidWY7CiAJY29uc3QgY2hhciAqcmVwb19uYW1lLCAqcmVwbywgKndvcmtfdHJlZSwgKmdpdF9kaXI7CiAJY2hhciAqcGF0aCwgKmRpcjsKKwlpbnQgZGVzdF9leGlzdHM7CiAJY29uc3Qgc3RydWN0IHJlZiAqcmVmcywgKmhlYWRfcG9pbnRzX2F0LCAqcmVtb3RlX2hlYWQsICptYXBwZWRfcmVmczsKIAlzdHJ1Y3Qgc3RyYnVmIGtleSA9IFNUUkJVRl9JTklULCB2YWx1ZSA9IFNUUkJVRl9JTklUOwogCXN0cnVjdCBzdHJidWYgYnJhbmNoX3RvcCA9IFNUUkJVRl9JTklULCByZWZsb2dfbXNnID0gU1RSQlVGX0lOSVQ7CiAJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0ID0gTlVMTDsKIAljaGFyICpzcmNfcmVmX3ByZWZpeCA9ICJyZWZzL2hlYWRzLyI7CisJaW50IGVyciA9IDA7CiAKLQlzdHJ1Y3QgcmVmc3BlYyByZWZzcGVjOworCXN0cnVjdCByZWZzcGVjICpyZWZzcGVjOworCWNvbnN0IGNoYXIgKmZldGNoX3BhdHRlcm47CiAKIAlqdW5rX3BpZCA9IGdldHBpZCgpOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9jbG9uZV9vcHRpb25zLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9jbG9uZV9vcHRpb25zLAogCQkJICAgICBidWlsdGluX2Nsb25lX3VzYWdlLCAwKTsKIAogCWlmIChhcmdjID09IDApCiAJCWRpZSgiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIik7CiAKLQlpZiAob3B0aW9uX25vX2hhcmRsaW5rcykKLQkJdXNlX2xvY2FsX2hhcmRsaW5rcyA9IDA7Ci0KIAlpZiAob3B0aW9uX21pcnJvcikKIAkJb3B0aW9uX2JhcmUgPSAxOwogCkBAIC0zODQsNyArMzczLDYgQEAKIAkJCWRpZSgiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIiwKIAkJCSAgICBvcHRpb25fb3JpZ2luKTsKIAkJb3B0aW9uX25vX2NoZWNrb3V0ID0gMTsKLQkJdXNlX3NlcGFyYXRlX3JlbW90ZSA9IDA7CiAJfQogCiAJaWYgKCFvcHRpb25fb3JpZ2luKQpAQCAtNDA2LDggKzM5NCwxMCBAQAogCQlkaXIgPSBndWVzc19kaXJfbmFtZShyZXBvX25hbWUsIGlzX2J1bmRsZSwgb3B0aW9uX2JhcmUpOwogCXN0cmlwX3RyYWlsaW5nX3NsYXNoZXMoZGlyKTsKIAotCWlmICghc3RhdChkaXIsICZidWYpKQotCQlkaWUoImRlc3RpbmF0aW9uIGRpcmVjdG9yeSAnJXMnIGFscmVhZHkgZXhpc3RzLiIsIGRpcik7CisJZGVzdF9leGlzdHMgPSAhc3RhdChkaXIsICZidWYpOworCWlmIChkZXN0X2V4aXN0cyAmJiAhaXNfZW1wdHlfZGlyKGRpcikpCisJCWRpZSgiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgIgorCQkJImFuIGVtcHR5IGRpcmVjdG9yeS4iLCBkaXIpOwogCiAJc3RyYnVmX2FkZGYoJnJlZmxvZ19tc2csICJjbG9uZTogZnJvbSAlcyIsIHJlcG8pOwogCkBAIC00MjksMTggKzQxOSwxOCBAQAogCWlmICghb3B0aW9uX2JhcmUpIHsKIAkJanVua193b3JrX3RyZWUgPSB3b3JrX3RyZWU7CiAJCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHdvcmtfdHJlZSkgPCAwKQotCQkJZGllKCJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJzogJXMiLAotCQkJCQl3b3JrX3RyZWUsIHN0cmVycm9yKGVycm5vKSk7Ci0JCWlmIChta2Rpcih3b3JrX3RyZWUsIDA3NTUpKQotCQkJZGllKCJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJzogJXMuIiwKLQkJCQkJd29ya190cmVlLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIsCisJCQkJICB3b3JrX3RyZWUpOworCQlpZiAoIWRlc3RfZXhpc3RzICYmIG1rZGlyKHdvcmtfdHJlZSwgMDc1NSkpCisJCQlkaWVfZXJybm8oImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnLiIsCisJCQkJICB3b3JrX3RyZWUpOwogCQlzZXRfZ2l0X3dvcmtfdHJlZSh3b3JrX3RyZWUpOwogCX0KIAlqdW5rX2dpdF9kaXIgPSBnaXRfZGlyOwogCWF0ZXhpdChyZW1vdmVfanVuayk7Ci0Jc2lnbmFsKFNJR0lOVCwgcmVtb3ZlX2p1bmtfb25fc2lnbmFsKTsKKwlzaWdjaGFpbl9wdXNoX2NvbW1vbihyZW1vdmVfanVua19vbl9zaWduYWwpOwogCi0Jc2V0ZW52KENPTkZJR19FTlZJUk9OTUVOVCwgeHN0cmR1cChta3BhdGgoIiVzL2NvbmZpZyIsIGdpdF9kaXIpKSwgMSk7CisJc2V0ZW52KENPTkZJR19FTlZJUk9OTUVOVCwgbWtwYXRoKCIlcy9jb25maWciLCBnaXRfZGlyKSwgMSk7CiAKIAlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChnaXRfZGlyKSA8IDApCiAJCWRpZSgiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciLCBnaXRfZGlyKTsKQEAgLTQ3MCw4ICs0NjAsMTQgQEAKIAkJc3RyYnVmX2FkZGYoJmJyYW5jaF90b3AsICJyZWZzL3JlbW90ZXMvJXMvIiwgb3B0aW9uX29yaWdpbik7CiAJfQogCisJc3RyYnVmX2FkZGYoJnZhbHVlLCAiKyVzKjolcyoiLCBzcmNfcmVmX3ByZWZpeCwgYnJhbmNoX3RvcC5idWYpOworCiAJaWYgKG9wdGlvbl9taXJyb3IgfHwgIW9wdGlvbl9iYXJlKSB7CiAJCS8qIENvbmZpZ3VyZSB0aGUgcmVtb3RlICovCisJCXN0cmJ1Zl9hZGRmKCZrZXksICJyZW1vdGUuJXMuZmV0Y2giLCBvcHRpb25fb3JpZ2luKTsKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoa2V5LmJ1ZiwgdmFsdWUuYnVmLCAiXiQiLCAwKTsKKwkJc3RyYnVmX3Jlc2V0KCZrZXkpOworCiAJCWlmIChvcHRpb25fbWlycm9yKSB7CiAJCQlzdHJidWZfYWRkZigma2V5LCAicmVtb3RlLiVzLm1pcnJvciIsIG9wdGlvbl9vcmlnaW4pOwogCQkJZ2l0X2NvbmZpZ19zZXQoa2V5LmJ1ZiwgInRydWUiKTsKQEAgLTQ4MCwxOSArNDc2LDEzIEBACiAKIAkJc3RyYnVmX2FkZGYoJmtleSwgInJlbW90ZS4lcy51cmwiLCBvcHRpb25fb3JpZ2luKTsKIAkJZ2l0X2NvbmZpZ19zZXQoa2V5LmJ1ZiwgcmVwbyk7Ci0JCQlzdHJidWZfcmVzZXQoJmtleSk7Ci0KLQkJc3RyYnVmX2FkZGYoJmtleSwgInJlbW90ZS4lcy5mZXRjaCIsIG9wdGlvbl9vcmlnaW4pOwotCQlzdHJidWZfYWRkZigmdmFsdWUsICIrJXMqOiVzKiIsIHNyY19yZWZfcHJlZml4LCBicmFuY2hfdG9wLmJ1Zik7Ci0JCWdpdF9jb25maWdfc2V0X211bHRpdmFyKGtleS5idWYsIHZhbHVlLmJ1ZiwgIl4kIiwgMCk7CiAJCXN0cmJ1Zl9yZXNldCgma2V5KTsKLQkJc3RyYnVmX3Jlc2V0KCZ2YWx1ZSk7CiAJfQogCi0JcmVmc3BlYy5mb3JjZSA9IDA7Ci0JcmVmc3BlYy5wYXR0ZXJuID0gMTsKLQlyZWZzcGVjLnNyYyA9IHNyY19yZWZfcHJlZml4OwotCXJlZnNwZWMuZHN0ID0gYnJhbmNoX3RvcC5idWY7CisJZmV0Y2hfcGF0dGVybiA9IHZhbHVlLmJ1ZjsKKwlyZWZzcGVjID0gcGFyc2VfZmV0Y2hfcmVmc3BlYygxLCAmZmV0Y2hfcGF0dGVybik7CisKKwlzdHJidWZfcmVzZXQoJnZhbHVlKTsKIAogCWlmIChwYXRoICYmICFpc19idW5kbGUpCiAJCXJlZnMgPSBjbG9uZV9sb2NhbChwYXRoLCBnaXRfZGlyKTsKQEAgLTUxOSwxNCArNTA5LDI3IEBACiAJCQkJCSAgICAgb3B0aW9uX3VwbG9hZF9wYWNrKTsKIAogCQlyZWZzID0gdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyh0cmFuc3BvcnQpOwotCQl0cmFuc3BvcnRfZmV0Y2hfcmVmcyh0cmFuc3BvcnQsIHJlZnMpOworCQlpZihyZWZzKQorCQkJdHJhbnNwb3J0X2ZldGNoX3JlZnModHJhbnNwb3J0LCByZWZzKTsKIAl9CiAKLQljbGVhcl9leHRyYV9yZWZzKCk7CisJaWYgKHJlZnMpIHsKKwkJY2xlYXJfZXh0cmFfcmVmcygpOwogCi0JbWFwcGVkX3JlZnMgPSB3cml0ZV9yZW1vdGVfcmVmcyhyZWZzLCAmcmVmc3BlYywgcmVmbG9nX21zZy5idWYpOworCQltYXBwZWRfcmVmcyA9IHdyaXRlX3JlbW90ZV9yZWZzKHJlZnMsIHJlZnNwZWMsIHJlZmxvZ19tc2cuYnVmKTsKIAotCWhlYWRfcG9pbnRzX2F0ID0gbG9jYXRlX2hlYWQocmVmcywgbWFwcGVkX3JlZnMsICZyZW1vdGVfaGVhZCk7CisJCXJlbW90ZV9oZWFkID0gZmluZF9yZWZfYnlfbmFtZShyZWZzLCAiSEVBRCIpOworCQloZWFkX3BvaW50c19hdCA9IGd1ZXNzX3JlbW90ZV9oZWFkKHJlbW90ZV9oZWFkLCBtYXBwZWRfcmVmcywgMCk7CisJfQorCWVsc2UgeworCQl3YXJuaW5nKCJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIik7CisJCWhlYWRfcG9pbnRzX2F0ID0gTlVMTDsKKwkJcmVtb3RlX2hlYWQgPSBOVUxMOworCQlvcHRpb25fbm9fY2hlY2tvdXQgPSAxOworCQlpZiAoIW9wdGlvbl9iYXJlKQorCQkJaW5zdGFsbF9icmFuY2hfY29uZmlnKDAsICJtYXN0ZXIiLCBvcHRpb25fb3JpZ2luLAorCQkJCQkgICAgICAicmVmcy9oZWFkcy9tYXN0ZXIiKTsKKwl9CiAKIAlpZiAoaGVhZF9wb2ludHNfYXQpIHsKIAkJLyogTG9jYWwgZGVmYXVsdCBicmFuY2ggbGluayAqLwpAQCAtNTU0LDExICs1NTcsOCBAQAogCQkJCSAgICAgIGhlYWRfcG9pbnRzX2F0LT5wZWVyX3JlZi0+bmFtZSwKIAkJCQkgICAgICByZWZsb2dfbXNnLmJ1Zik7CiAKLQkJCXN0cmJ1Zl9hZGRmKCZrZXksICJicmFuY2guJXMucmVtb3RlIiwgaGVhZCk7Ci0JCQlnaXRfY29uZmlnX3NldChrZXkuYnVmLCBvcHRpb25fb3JpZ2luKTsKLQkJCXN0cmJ1Zl9yZXNldCgma2V5KTsKLQkJCXN0cmJ1Zl9hZGRmKCZrZXksICJicmFuY2guJXMubWVyZ2UiLCBoZWFkKTsKLQkJCWdpdF9jb25maWdfc2V0KGtleS5idWYsIGhlYWRfcG9pbnRzX2F0LT5uYW1lKTsKKwkJCWluc3RhbGxfYnJhbmNoX2NvbmZpZygwLCBoZWFkLCBvcHRpb25fb3JpZ2luLAorCQkJCQkgICAgICBoZWFkX3BvaW50c19hdC0+bmFtZSk7CiAJCX0KIAl9IGVsc2UgaWYgKHJlbW90ZV9oZWFkKSB7CiAJCS8qIFNvdXJjZSBoYWQgZGV0YWNoZWQgSEVBRCBwb2ludGluZyBzb21ld2hlcmUuICovCkBAIC02MDUsNiArNjA1LDkgQEAKIAkJaWYgKHdyaXRlX2NhY2hlKGZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKIAkJICAgIGNvbW1pdF9sb2NrZWRfaW5kZXgobG9ja19maWxlKSkKIAkJCWRpZSgidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIik7CisKKwkJZXJyIHw9IHJ1bl9ob29rKE5VTEwsICJwb3N0LWNoZWNrb3V0Iiwgc2hhMV90b19oZXgobnVsbF9zaGExKSwKKwkJCQlzaGExX3RvX2hleChyZW1vdGVfaGVhZC0+b2xkX3NoYTEpLCAiMSIsIE5VTEwpOwogCX0KIAogCXN0cmJ1Zl9yZWxlYXNlKCZyZWZsb2dfbXNnKTsKQEAgLTYxMiw1ICs2MTUsNSBAQAogCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOwogCXN0cmJ1Zl9yZWxlYXNlKCZ2YWx1ZSk7CiAJanVua19waWQgPSAwOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluLWNvbW1pdC10cmVlLmMgYi9idWlsdGluLWNvbW1pdC10cmVlLmMKaW5kZXggMDQ1MzQyNS4uNjQ2NzA3NyAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jb21taXQtdHJlZS5jCisrKyBiL2J1aWx0aW4tY29tbWl0LXRyZWUuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAJfQogCiAJaWYgKHN0cmJ1Zl9yZWFkKCZidWZmZXIsIDAsIDApIDwgMCkKLQkJZGllKCJnaXQgY29tbWl0LXRyZWU6IHJlYWQgcmV0dXJuZWQgJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQiKTsKIAogCWlmICghY29tbWl0X3RyZWUoYnVmZmVyLmJ1ZiwgdHJlZV9zaGExLCBwYXJlbnRzLCBjb21taXRfc2hhMSwgTlVMTCkpIHsKIAkJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgoY29tbWl0X3NoYTEpKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tY29tbWl0LmMgYi9idWlsdGluLWNvbW1pdC5jCmluZGV4IDcyZGQwYjkuLjRiY2NlMDYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY29tbWl0LmMKKysrIGIvYnVpbHRpbi1jb21taXQuYwpAQCAtODgsMTMgKzg4LDEzIEBACiAJT1BUX19WRVJCT1NFKCZ2ZXJib3NlKSwKIAlPUFRfR1JPVVAoIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiKSwKIAotCU9QVF9TVFJJTkcoJ0YnLCAiZmlsZSIsICZsb2dmaWxlLCAiRklMRSIsICJyZWFkIGxvZyBmcm9tIGZpbGUiKSwKKwlPUFRfRklMRU5BTUUoJ0YnLCAiZmlsZSIsICZsb2dmaWxlLCAicmVhZCBsb2cgZnJvbSBmaWxlIiksCiAJT1BUX1NUUklORygwLCAiYXV0aG9yIiwgJmZvcmNlX2F1dGhvciwgIkFVVEhPUiIsICJvdmVycmlkZSBhdXRob3IgZm9yIGNvbW1pdCIpLAogCU9QVF9DQUxMQkFDSygnbScsICJtZXNzYWdlIiwgJm1lc3NhZ2UsICJNRVNTQUdFIiwgInNwZWNpZnkgY29tbWl0IG1lc3NhZ2UiLCBvcHRfcGFyc2VfbSksCiAJT1BUX1NUUklORygnYycsICJyZWVkaXQtbWVzc2FnZSIsICZlZGl0X21lc3NhZ2UsICJDT01NSVQiLCAicmV1c2UgYW5kIGVkaXQgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQgIiksCiAJT1BUX1NUUklORygnQycsICJyZXVzZS1tZXNzYWdlIiwgJnVzZV9tZXNzYWdlLCAiQ09NTUlUIiwgInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IiksCiAJT1BUX0JPT0xFQU4oJ3MnLCAic2lnbm9mZiIsICZzaWdub2ZmLCAiYWRkIFNpZ25lZC1vZmYtYnk6IiksCi0JT1BUX1NUUklORygndCcsICJ0ZW1wbGF0ZSIsICZ0ZW1wbGF0ZV9maWxlLCAiRklMRSIsICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiKSwKKwlPUFRfRklMRU5BTUUoJ3QnLCAidGVtcGxhdGUiLCAmdGVtcGxhdGVfZmlsZSwgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIpLAogCU9QVF9CT09MRUFOKCdlJywgImVkaXQiLCAmZWRpdF9mbGFnLCAiZm9yY2UgZWRpdCBvZiBjb21taXQiKSwKIAogCU9QVF9HUk9VUCgiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiKSwKQEAgLTE2Niw3ICsxNjYsNyBAQAogCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOwogCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFKQogCQkJY29udGludWU7Ci0JCWlmICghcGF0aHNwZWNfbWF0Y2gocGF0dGVybiwgbSwgY2UtPm5hbWUsIDApKQorCQlpZiAoIW1hdGNoX3BhdGhzcGVjKHBhdHRlcm4sIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwgMCwgbSkpCiAJCQljb250aW51ZTsKIAkJc3RyaW5nX2xpc3RfaW5zZXJ0KGNlLT5uYW1lLCBsaXN0KTsKIAl9CkBAIC0zNjIsNDAgKzM2Miw2IEBACiAJcmV0dXJuIHMuY29tbWl0YWJsZTsKIH0KIAotc3RhdGljIGludCBydW5faG9vayhjb25zdCBjaGFyICppbmRleF9maWxlLCBjb25zdCBjaGFyICpuYW1lLCAuLi4pCi17Ci0Jc3RydWN0IGNoaWxkX3Byb2Nlc3MgaG9vazsKLQljb25zdCBjaGFyICphcmd2WzEwXSwgKmVudlsyXTsKLQljaGFyIGluZGV4W1BBVEhfTUFYXTsKLQl2YV9saXN0IGFyZ3M7Ci0JaW50IGk7Ci0KLQl2YV9zdGFydChhcmdzLCBuYW1lKTsKLQlhcmd2WzBdID0gZ2l0X3BhdGgoImhvb2tzLyVzIiwgbmFtZSk7Ci0JaSA9IDA7Ci0JZG8gewotCQlpZiAoKytpID49IEFSUkFZX1NJWkUoYXJndikpCi0JCQlkaWUgKCJydW5faG9vaygpOiB0b28gbWFueSBhcmd1bWVudHMiKTsKLQkJYXJndltpXSA9IHZhX2FyZyhhcmdzLCBjb25zdCBjaGFyICopOwotCX0gd2hpbGUgKGFyZ3ZbaV0pOwotCXZhX2VuZChhcmdzKTsKLQotCXNucHJpbnRmKGluZGV4LCBzaXplb2YoaW5kZXgpLCAiR0lUX0lOREVYX0ZJTEU9JXMiLCBpbmRleF9maWxlKTsKLQllbnZbMF0gPSBpbmRleDsKLQllbnZbMV0gPSBOVUxMOwotCi0JaWYgKGFjY2Vzcyhhcmd2WzBdLCBYX09LKSA8IDApCi0JCXJldHVybiAwOwotCi0JbWVtc2V0KCZob29rLCAwLCBzaXplb2YoaG9vaykpOwotCWhvb2suYXJndiA9IGFyZ3Y7Ci0JaG9vay5ub19zdGRpbiA9IDE7Ci0JaG9vay5zdGRvdXRfdG9fc3RkZXJyID0gMTsKLQlob29rLmVudiA9IGVudjsKLQotCXJldHVybiBydW5fY29tbWFuZCgmaG9vayk7Ci19Ci0KIHN0YXRpYyBpbnQgaXNfYV9tZXJnZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQogewogCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvb2t1cF9jb21taXQoc2hhMSk7CkBAIC00NjgsMTIgKzQzNCwxMiBAQAogCQlpZiAoaXNhdHR5KDApKQogCQkJZnByaW50ZihzdGRlcnIsICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIik7CiAJCWlmIChzdHJidWZfcmVhZCgmc2IsIDAsIDApIDwgMCkKLQkJCWRpZSgiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiKTsKKwkJCWRpZV9lcnJubygiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiKTsKIAkJaG9va19hcmcxID0gIm1lc3NhZ2UiOwogCX0gZWxzZSBpZiAobG9nZmlsZSkgewogCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIGxvZ2ZpbGUsIDApIDwgMCkKLQkJCWRpZSgiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJzogJXMiLAotCQkJICAgIGxvZ2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkIGxvZyBmaWxlICclcyciLAorCQkJCSAgbG9nZmlsZSk7CiAJCWhvb2tfYXJnMSA9ICJtZXNzYWdlIjsKIAl9IGVsc2UgaWYgKHVzZV9tZXNzYWdlKSB7CiAJCWJ1ZmZlciA9IHN0cnN0cih1c2VfbWVzc2FnZV9idWZmZXIsICJcblxuIik7CkBAIC00ODQsMTYgKzQ1MCwxNSBAQAogCQlob29rX2FyZzIgPSB1c2VfbWVzc2FnZTsKIAl9IGVsc2UgaWYgKCFzdGF0KGdpdF9wYXRoKCJNRVJHRV9NU0ciKSwgJnN0YXRidWYpKSB7CiAJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGgoIk1FUkdFX01TRyIpLCAwKSA8IDApCi0JCQlkaWUoImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRzogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciKTsKIAkJaG9va19hcmcxID0gIm1lcmdlIjsKIAl9IGVsc2UgaWYgKCFzdGF0KGdpdF9wYXRoKCJTUVVBU0hfTVNHIiksICZzdGF0YnVmKSkgewogCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIGdpdF9wYXRoKCJTUVVBU0hfTVNHIiksIDApIDwgMCkKLQkJCWRpZSgiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRzogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIik7CiAJCWhvb2tfYXJnMSA9ICJzcXVhc2giOwogCX0gZWxzZSBpZiAodGVtcGxhdGVfZmlsZSAmJiAhc3RhdCh0ZW1wbGF0ZV9maWxlLCAmc3RhdGJ1ZikpIHsKIAkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCB0ZW1wbGF0ZV9maWxlLCAwKSA8IDApCi0JCQlkaWUoImNvdWxkIG5vdCByZWFkICVzOiAlcyIsCi0JCQkgICAgdGVtcGxhdGVfZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY291bGQgbm90IHJlYWQgJyVzJyIsIHRlbXBsYXRlX2ZpbGUpOwogCQlob29rX2FyZzEgPSAidGVtcGxhdGUiOwogCX0KIApAQCAtNTA2LDggKzQ3MSw3IEBACiAKIAlmcCA9IGZvcGVuKGdpdF9wYXRoKGNvbW1pdF9lZGl0bXNnKSwgInciKTsKIAlpZiAoZnAgPT0gTlVMTCkKLQkJZGllKCJjb3VsZCBub3Qgb3BlbiAlczogJXMiLAotCQkgICAgZ2l0X3BhdGgoY29tbWl0X2VkaXRtc2cpLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNvdWxkIG5vdCBvcGVuICclcyciLCBnaXRfcGF0aChjb21taXRfZWRpdG1zZykpOwogCiAJaWYgKGNsZWFudXBfbW9kZSAhPSBDTEVBTlVQX05PTkUpCiAJCXN0cmlwc3BhY2UoJnNiLCAwKTsKQEAgLTUzMSw3ICs0OTUsNyBAQAogCX0KIAogCWlmIChmd3JpdGUoc2IuYnVmLCAxLCBzYi5sZW4sIGZwKSA8IHNiLmxlbikKLQkJZGllKCJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIpOwogCiAJc3RyYnVmX3JlbGVhc2UoJnNiKTsKIApAQCAtNTk2LDcgKzU2MCw2IEBACiAJCWNvbW1pdGFibGUgPSBydW5fc3RhdHVzKGZwLCBpbmRleF9maWxlLCBwcmVmaXgsIDEpOwogCQl3dF9zdGF0dXNfdXNlX2NvbG9yID0gc2F2ZWRfY29sb3Jfc2V0dGluZzsKIAl9IGVsc2UgewotCQlzdHJ1Y3QgcmV2X2luZm8gcmV2OwogCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCQljb25zdCBjaGFyICpwYXJlbnQgPSAiSEVBRCI7CiAKQEAgLTYwOCwxNiArNTcxLDggQEAKIAogCQlpZiAoZ2V0X3NoYTEocGFyZW50LCBzaGExKSkKIAkJCWNvbW1pdGFibGUgPSAhIWFjdGl2ZV9ucjsKLQkJZWxzZSB7Ci0JCQlpbml0X3JldmlzaW9ucygmcmV2LCAiIik7Ci0JCQlyZXYuYWJicmV2ID0gMDsKLQkJCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCBwYXJlbnQpOwotCQkJRElGRl9PUFRfU0VUKCZyZXYuZGlmZm9wdCwgUVVJRVQpOwotCQkJRElGRl9PUFRfU0VUKCZyZXYuZGlmZm9wdCwgRVhJVF9XSVRIX1NUQVRVUyk7Ci0JCQlydW5fZGlmZl9pbmRleCgmcmV2LCAxIC8qIGNhY2hlZCAqLyk7Ci0KLQkJCWNvbW1pdGFibGUgPSAhIURJRkZfT1BUX1RTVCgmcmV2LmRpZmZvcHQsIEhBU19DSEFOR0VTKTsKLQkJfQorCQllbHNlCisJCQljb21taXRhYmxlID0gaW5kZXhfZGlmZmVyc19mcm9tKHBhcmVudCwgMCk7CiAJfQogCiAJZmNsb3NlKGZwKTsKQEAgLTc0MCw5ICs2OTUsOCBAQAogewogCWludCBmID0gMDsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fY29tbWl0X29wdGlvbnMsIHVzYWdlLCAwKTsKLQlsb2dmaWxlID0gcGFyc2Vfb3B0aW9uc19maXhfZmlsZW5hbWUocHJlZml4LCBsb2dmaWxlKTsKLQl0ZW1wbGF0ZV9maWxlID0gcGFyc2Vfb3B0aW9uc19maXhfZmlsZW5hbWUocHJlZml4LCB0ZW1wbGF0ZV9maWxlKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fY29tbWl0X29wdGlvbnMsIHVzYWdlLAorCQkJICAgICAwKTsKIAogCWlmIChmb3JjZV9hdXRob3IgJiYgIXN0cmNocihmb3JjZV9hdXRob3IsICc+JykpCiAJCWZvcmNlX2F1dGhvciA9IGZpbmRfYXV0aG9yX2J5X25pY2tuYW1lKGZvcmNlX2F1dGhvcik7CkBAIC04ODQsNyArODM4LDcgQEAKIHsKIAlzdHJ1Y3QgcmV2X2luZm8gcmV2OwogCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKLQlzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0ID0gImZvcm1hdDolaDogXCIlc1wiIjsKKwlzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0ID0gImZvcm1hdDolaF0gJXMiOwogCXVuc2lnbmVkIGNoYXIganVua19zaGExWzIwXTsKIAljb25zdCBjaGFyICpoZWFkID0gcmVzb2x2ZV9yZWYoIkhFQUQiLCBqdW5rX3NoYTEsIDAsIE5VTEwpOwogCkBAIC05MTEsNyArODY1LDcgQEAKIAlyZXYuZGlmZm9wdC5icmVha19vcHQgPSAwOwogCWRpZmZfc2V0dXBfZG9uZSgmcmV2LmRpZmZvcHQpOwogCi0JcHJpbnRmKCJbJXMlc106IGNyZWF0ZWQgIiwKKwlwcmludGYoIlslcyVzICIsCiAJCSFwcmVmaXhjbXAoaGVhZCwgInJlZnMvaGVhZHMvIikgPwogCQkJaGVhZCArIDExIDoKIAkJCSFzdHJjbXAoaGVhZCwgIkhFQUQiKSA/CkBAIC05ODQsOCArOTM4LDggQEAKIAkJcHB0ciA9ICZjb21taXRfbGlzdF9pbnNlcnQobG9va3VwX2NvbW1pdChoZWFkX3NoYTEpLCBwcHRyKS0+bmV4dDsKIAkJZnAgPSBmb3BlbihnaXRfcGF0aCgiTUVSR0VfSEVBRCIpLCAiciIpOwogCQlpZiAoZnAgPT0gTlVMTCkKLQkJCWRpZSgiY291bGQgbm90IG9wZW4gJXMgZm9yIHJlYWRpbmc6ICVzIiwKLQkJCSAgICBnaXRfcGF0aCgiTUVSR0VfSEVBRCIpLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIiwKKwkJCQkgIGdpdF9wYXRoKCJNRVJHRV9IRUFEIikpOwogCQl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJm0sIGZwLCAnXG4nKSAhPSBFT0YpIHsKIAkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJCQlpZiAoZ2V0X3NoYTFfaGV4KG0uYnVmLCBzaGExKSA8IDApCkBAIC05OTYsOCArOTUwLDcgQEAKIAkJc3RyYnVmX3JlbGVhc2UoJm0pOwogCQlpZiAoIXN0YXQoZ2l0X3BhdGgoIk1FUkdFX01PREUiKSwgJnN0YXRidWYpKSB7CiAJCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIGdpdF9wYXRoKCJNRVJHRV9NT0RFIiksIDApIDwgMCkKLQkJCQlkaWUoImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREU6ICVzIiwKLQkJCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIik7CiAJCQlpZiAoIXN0cmNtcChzYi5idWYsICJuby1mZiIpKQogCQkJCWFsbG93X2Zhc3RfZm9yd2FyZCA9IDA7CiAJCX0KQEAgLTEwMTEsOCArOTY0LDkgQEAKIAkvKiBGaW5hbGx5LCBnZXQgdGhlIGNvbW1pdCBtZXNzYWdlICovCiAJc3RyYnVmX3Jlc2V0KCZzYik7CiAJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBnaXRfcGF0aChjb21taXRfZWRpdG1zZyksIDApIDwgMCkgeworCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKIAkJcm9sbGJhY2tfaW5kZXhfZmlsZXMoKTsKLQkJZGllKCJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZSIpOworCQlkaWUoImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CiAJfQogCiAJLyogVHJ1bmNhdGUgdGhlIG1lc3NhZ2UganVzdCBiZWZvcmUgdGhlIGRpZmYsIGlmIGFueS4gKi8KZGlmZiAtLWdpdCBhL2J1aWx0aW4tY29uZmlnLmMgYi9idWlsdGluLWNvbmZpZy5jCmluZGV4IGY3MTAxNjIuLmEyZDY1NmUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY29uZmlnLmMKKysrIGIvYnVpbHRpbi1jb25maWcuYwpAQCAtMSw5ICsxLDEyIEBACiAjaW5jbHVkZSAiYnVpbHRpbi5oIgogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAKLXN0YXRpYyBjb25zdCBjaGFyIGdpdF9jb25maWdfc2V0X3VzYWdlW10gPQotImdpdCBjb25maWcgWyAtLWdsb2JhbCB8IC0tc3lzdGVtIHwgWyAtZiB8IC0tZmlsZSBdIGNvbmZpZy1maWxlIF0gWyAtLWJvb2wgfCAtLWludCB8IC0tYm9vbC1vci1pbnQgXSBbIC16IHwgLS1udWxsIF0gWy0tZ2V0IHwgLS1nZXQtYWxsIHwgLS1nZXQtcmVnZXhwIHwgLS1yZXBsYWNlLWFsbCB8IC0tYWRkIHwgLS11bnNldCB8IC0tdW5zZXQtYWxsXSBuYW1lIFt2YWx1ZSBbdmFsdWVfcmVnZXhdXSB8IC0tcmVuYW1lLXNlY3Rpb24gb2xkX25hbWUgbmV3X25hbWUgfCAtLXJlbW92ZS1zZWN0aW9uIG5hbWUgfCAtLWxpc3QgfCAtLWdldC1jb2xvciB2YXIgW2RlZmF1bHRdIHwgLS1nZXQtY29sb3Jib29sIG5hbWUgW3N0ZG91dC1pcy10dHldIjsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBidWlsdGluX2NvbmZpZ191c2FnZVtdID0geworCSJnaXQgY29uZmlnIFtvcHRpb25zXSIsCisJTlVMTAorfTsKIAogc3RhdGljIGNoYXIgKmtleTsKIHN0YXRpYyByZWdleF90ICprZXlfcmVnZXhwOwpAQCAtMTYsNyArMTksNjcgQEAKIHN0YXRpYyBjaGFyIGRlbGltID0gJz0nOwogc3RhdGljIGNoYXIga2V5X2RlbGltID0gJyAnOwogc3RhdGljIGNoYXIgdGVybSA9ICdcbic7Ci1zdGF0aWMgZW51bSB7IFRfUkFXLCBUX0lOVCwgVF9CT09MLCBUX0JPT0xfT1JfSU5UIH0gdHlwZSA9IFRfUkFXOworCitzdGF0aWMgaW50IHVzZV9nbG9iYWxfY29uZmlnLCB1c2Vfc3lzdGVtX2NvbmZpZzsKK3N0YXRpYyBjb25zdCBjaGFyICpnaXZlbl9jb25maWdfZmlsZTsKK3N0YXRpYyBpbnQgYWN0aW9ucywgdHlwZXM7CitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2NvbG9yX3Nsb3QsICpnZXRfY29sb3Jib29sX3Nsb3Q7CitzdGF0aWMgaW50IGVuZF9udWxsOworCisjZGVmaW5lIEFDVElPTl9HRVQgKDE8PDApCisjZGVmaW5lIEFDVElPTl9HRVRfQUxMICgxPDwxKQorI2RlZmluZSBBQ1RJT05fR0VUX1JFR0VYUCAoMTw8MikKKyNkZWZpbmUgQUNUSU9OX1JFUExBQ0VfQUxMICgxPDwzKQorI2RlZmluZSBBQ1RJT05fQUREICgxPDw0KQorI2RlZmluZSBBQ1RJT05fVU5TRVQgKDE8PDUpCisjZGVmaW5lIEFDVElPTl9VTlNFVF9BTEwgKDE8PDYpCisjZGVmaW5lIEFDVElPTl9SRU5BTUVfU0VDVElPTiAoMTw8NykKKyNkZWZpbmUgQUNUSU9OX1JFTU9WRV9TRUNUSU9OICgxPDw4KQorI2RlZmluZSBBQ1RJT05fTElTVCAoMTw8OSkKKyNkZWZpbmUgQUNUSU9OX0VESVQgKDE8PDEwKQorI2RlZmluZSBBQ1RJT05fU0VUICgxPDwxMSkKKyNkZWZpbmUgQUNUSU9OX1NFVF9BTEwgKDE8PDEyKQorI2RlZmluZSBBQ1RJT05fR0VUX0NPTE9SICgxPDwxMykKKyNkZWZpbmUgQUNUSU9OX0dFVF9DT0xPUkJPT0wgKDE8PDE0KQorCisjZGVmaW5lIFRZUEVfQk9PTCAoMTw8MCkKKyNkZWZpbmUgVFlQRV9JTlQgKDE8PDEpCisjZGVmaW5lIFRZUEVfQk9PTF9PUl9JTlQgKDE8PDIpCisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fY29uZmlnX29wdGlvbnNbXSA9IHsKKwlPUFRfR1JPVVAoIkNvbmZpZyBmaWxlIGxvY2F0aW9uIiksCisJT1BUX0JPT0xFQU4oMCwgImdsb2JhbCIsICZ1c2VfZ2xvYmFsX2NvbmZpZywgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiKSwKKwlPUFRfQk9PTEVBTigwLCAic3lzdGVtIiwgJnVzZV9zeXN0ZW1fY29uZmlnLCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIpLAorCU9QVF9TVFJJTkcoJ2YnLCAiZmlsZSIsICZnaXZlbl9jb25maWdfZmlsZSwgIkZJTEUiLCAidXNlIGdpdmVuIGNvbmZpZyBmaWxlIiksCisJT1BUX0dST1VQKCJBY3Rpb24iKSwKKwlPUFRfQklUKDAsICJnZXQiLCAmYWN0aW9ucywgImdldCB2YWx1ZTogbmFtZSBbdmFsdWUtcmVnZXhdIiwgQUNUSU9OX0dFVCksCisJT1BUX0JJVCgwLCAiZ2V0LWFsbCIsICZhY3Rpb25zLCAiZ2V0IGFsbCB2YWx1ZXM6IGtleSBbdmFsdWUtcmVnZXhdIiwgQUNUSU9OX0dFVF9BTEwpLAorCU9QVF9CSVQoMCwgImdldC1yZWdleHAiLCAmYWN0aW9ucywgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIiwgQUNUSU9OX0dFVF9SRUdFWFApLAorCU9QVF9CSVQoMCwgInJlcGxhY2UtYWxsIiwgJmFjdGlvbnMsICJyZXBsYWNlIGFsbCBtYXRjaGluZyB2YXJpYWJsZXM6IG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIsIEFDVElPTl9SRVBMQUNFX0FMTCksCisJT1BUX0JJVCgwLCAiYWRkIiwgJmFjdGlvbnMsICJhZGRzIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIiwgQUNUSU9OX0FERCksCisJT1BUX0JJVCgwLCAidW5zZXQiLCAmYWN0aW9ucywgInJlbW92ZXMgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIiwgQUNUSU9OX1VOU0VUKSwKKwlPUFRfQklUKDAsICJ1bnNldC1hbGwiLCAmYWN0aW9ucywgInJlbW92ZXMgYWxsIG1hdGNoZXM6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIsIEFDVElPTl9VTlNFVF9BTEwpLAorCU9QVF9CSVQoMCwgInJlbmFtZS1zZWN0aW9uIiwgJmFjdGlvbnMsICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiLCBBQ1RJT05fUkVOQU1FX1NFQ1RJT04pLAorCU9QVF9CSVQoMCwgInJlbW92ZS1zZWN0aW9uIiwgJmFjdGlvbnMsICJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIiwgQUNUSU9OX1JFTU9WRV9TRUNUSU9OKSwKKwlPUFRfQklUKCdsJywgImxpc3QiLCAmYWN0aW9ucywgImxpc3QgYWxsIiwgQUNUSU9OX0xJU1QpLAorCU9QVF9CSVQoJ2UnLCAiZWRpdCIsICZhY3Rpb25zLCAib3BlbnMgYW4gZWRpdG9yIiwgQUNUSU9OX0VESVQpLAorCU9QVF9TVFJJTkcoMCwgImdldC1jb2xvciIsICZnZXRfY29sb3Jfc2xvdCwgInNsb3QiLCAiZmluZCB0aGUgY29sb3IgY29uZmlndXJlZDogW2RlZmF1bHRdIiksCisJT1BUX1NUUklORygwLCAiZ2V0LWNvbG9yYm9vbCIsICZnZXRfY29sb3Jib29sX3Nsb3QsICJzbG90IiwgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IFtzdGRvdXQtaXMtdHR5XSIpLAorCU9QVF9HUk9VUCgiVHlwZSIpLAorCU9QVF9CSVQoMCwgImJvb2wiLCAmdHlwZXMsICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiLCBUWVBFX0JPT0wpLAorCU9QVF9CSVQoMCwgImludCIsICZ0eXBlcywgInZhbHVlIGlzIGRlY2ltYWwgbnVtYmVyIiwgVFlQRV9JTlQpLAorCU9QVF9CSVQoMCwgImJvb2wtb3ItaW50IiwgJnR5cGVzLCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IiwgVFlQRV9CT09MX09SX0lOVCksCisJT1BUX0dST1VQKCJPdGhlciIpLAorCU9QVF9CT09MRUFOKCd6JywgIm51bGwiLCAmZW5kX251bGwsICJ0ZXJtaW5hdGUgdmFsdWVzIHdpdGggTlVMIGJ5dGUiKSwKKwlPUFRfRU5EKCksCit9OworCitzdGF0aWMgdm9pZCBjaGVja19hcmdjKGludCBhcmdjLCBpbnQgbWluLCBpbnQgbWF4KSB7CisJaWYgKGFyZ2MgPj0gbWluICYmIGFyZ2MgPD0gbWF4KQorCQlyZXR1cm47CisJZXJyb3IoIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMiKTsKKwl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9jb25maWdfdXNhZ2UsIGJ1aWx0aW5fY29uZmlnX29wdGlvbnMpOworfQogCiBzdGF0aWMgaW50IHNob3dfYWxsX2NvbmZpZyhjb25zdCBjaGFyICprZXlfLCBjb25zdCBjaGFyICp2YWx1ZV8sIHZvaWQgKmNiKQogewpAQCAtMjcsNyArOTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNob3dfY29uZmlnKGNvbnN0IGNoYXIqIGtleV8sIGNvbnN0IGNoYXIqIHZhbHVlXywgdm9pZCAqY2IpCitzdGF0aWMgaW50IHNob3dfY29uZmlnKGNvbnN0IGNoYXIgKmtleV8sIGNvbnN0IGNoYXIgKnZhbHVlXywgdm9pZCAqY2IpCiB7CiAJY2hhciB2YWx1ZVsyNTZdOwogCWNvbnN0IGNoYXIgKnZwdHIgPSB2YWx1ZTsKQEAgLTQ5LDExICsxMTIsMTEgQEAKIAl9CiAJaWYgKHNlZW4gJiYgIWRvX2FsbCkKIAkJZHVwX2Vycm9yID0gMTsKLQlpZiAodHlwZSA9PSBUX0lOVCkKKwlpZiAodHlwZXMgPT0gVFlQRV9JTlQpCiAJCXNwcmludGYodmFsdWUsICIlZCIsIGdpdF9jb25maWdfaW50KGtleV8sIHZhbHVlXz92YWx1ZV86IiIpKTsKLQllbHNlIGlmICh0eXBlID09IFRfQk9PTCkKKwllbHNlIGlmICh0eXBlcyA9PSBUWVBFX0JPT0wpCiAJCXZwdHIgPSBnaXRfY29uZmlnX2Jvb2woa2V5XywgdmFsdWVfKSA/ICJ0cnVlIiA6ICJmYWxzZSI7Ci0JZWxzZSBpZiAodHlwZSA9PSBUX0JPT0xfT1JfSU5UKSB7CisJZWxzZSBpZiAodHlwZXMgPT0gVFlQRV9CT09MX09SX0lOVCkgewogCQlpbnQgaXNfYm9vbCwgdjsKIAkJdiA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5XywgdmFsdWVfLCAmaXNfYm9vbCk7CiAJCWlmIChpc19ib29sKQpAQCAtNzQsNyArMTM3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfdmFsdWUoY29uc3QgY2hhcioga2V5XywgY29uc3QgY2hhciogcmVnZXhfKQorc3RhdGljIGludCBnZXRfdmFsdWUoY29uc3QgY2hhciAqa2V5XywgY29uc3QgY2hhciAqcmVnZXhfKQogewogCWludCByZXQgPSAtMTsKIAljaGFyICp0bDsKQEAgLTE1MiwxOCArMjE1LDE4IEBACiAJaWYgKCF2YWx1ZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAodHlwZSA9PSBUX1JBVykKKwlpZiAodHlwZXMgPT0gMCkKIAkJbm9ybWFsaXplZCA9IHhzdHJkdXAodmFsdWUpOwogCWVsc2UgewogCQlub3JtYWxpemVkID0geG1hbGxvYyg2NCk7Ci0JCWlmICh0eXBlID09IFRfSU5UKSB7CisJCWlmICh0eXBlcyA9PSBUWVBFX0lOVCkgewogCQkJaW50IHYgPSBnaXRfY29uZmlnX2ludChrZXksIHZhbHVlKTsKIAkJCXNwcmludGYobm9ybWFsaXplZCwgIiVkIiwgdik7CiAJCX0KLQkJZWxzZSBpZiAodHlwZSA9PSBUX0JPT0wpCisJCWVsc2UgaWYgKHR5cGVzID09IFRZUEVfQk9PTCkKIAkJCXNwcmludGYobm9ybWFsaXplZCwgIiVzIiwKIAkJCQlnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWx1ZSkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLQkJZWxzZSBpZiAodHlwZSA9PSBUX0JPT0xfT1JfSU5UKSB7CisJCWVsc2UgaWYgKHR5cGVzID09IFRZUEVfQk9PTF9PUl9JTlQpIHsKIAkJCWludCBpc19ib29sLCB2OwogCQkJdiA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmlzX2Jvb2wpOwogCQkJaWYgKCFpc19ib29sKQpAQCAtMTc4LDYgKzI0MSw3IEBACiAKIHN0YXRpYyBpbnQgZ2V0X2NvbG9yX2ZvdW5kOwogc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9zbG90Oworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcmJvb2xfc2xvdDsKIHN0YXRpYyBjaGFyIHBhcnNlZF9jb2xvcltDT0xPUl9NQVhMRU5dOwogCiBzdGF0aWMgaW50IGdpdF9nZXRfY29sb3JfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQpAQCAtMTkxLDI5ICsyNTUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdldF9jb2xvcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitzdGF0aWMgdm9pZCBnZXRfY29sb3IoY29uc3QgY2hhciAqZGVmX2NvbG9yKQogewotCS8qCi0JICogZ3JhYiB0aGUgY29sb3Igc2V0dGluZyBmb3IgdGhlIGdpdmVuIHNsb3QgZnJvbSB0aGUgY29uZmlndXJhdGlvbiwKLQkgKiBvciBwYXJzZSB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBtaXNzaW5nLCBhbmQgcmV0dXJuIEFOU0kgY29sb3IKLQkgKiBlc2NhcGUgc2VxdWVuY2UuCi0JICoKLQkgKiBlLmcuCi0JICogZ2l0IGNvbmZpZyAtLWdldC1jb2xvciBjb2xvci5kaWZmLndoaXRlc3BhY2UgImJsdWUgcmV2ZXJzZSIKLQkgKi8KLQljb25zdCBjaGFyICpkZWZfY29sb3IgPSBOVUxMOwotCi0Jc3dpdGNoIChhcmdjKSB7Ci0JZGVmYXVsdDoKLQkJdXNhZ2UoZ2l0X2NvbmZpZ19zZXRfdXNhZ2UpOwotCWNhc2UgMjoKLQkJZGVmX2NvbG9yID0gYXJndlsxXTsKLQkJLyogZmFsbHRocnUgKi8KLQljYXNlIDE6Ci0JCWdldF9jb2xvcl9zbG90ID0gYXJndlswXTsKLQkJYnJlYWs7Ci0JfQotCiAJZ2V0X2NvbG9yX2ZvdW5kID0gMDsKIAlwYXJzZWRfY29sb3JbMF0gPSAnXDAnOwogCWdpdF9jb25maWcoZ2l0X2dldF9jb2xvcl9jb25maWcsIE5VTEwpOwpAQCAtMjIyLDcgKzI2NSw2IEBACiAJCWNvbG9yX3BhcnNlKGRlZl9jb2xvciwgImNvbW1hbmQgbGluZSIsIHBhcnNlZF9jb2xvcik7CiAKIAlmcHV0cyhwYXJzZWRfY29sb3IsIHN0ZG91dCk7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc3Rkb3V0X2lzX3R0eTsKQEAgLTIzMSw3ICsyNzMsNyBAQAogc3RhdGljIGludCBnaXRfZ2V0X2NvbG9yYm9vbF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwKIAkJdm9pZCAqY2IpCiB7Ci0JaWYgKCFzdHJjbXAodmFyLCBnZXRfY29sb3Jfc2xvdCkpIHsKKwlpZiAoIXN0cmNtcCh2YXIsIGdldF9jb2xvcmJvb2xfc2xvdCkpIHsKIAkJZ2V0X2NvbG9yYm9vbF9mb3VuZCA9CiAJCQlnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlLCBzdGRvdXRfaXNfdHR5KTsKIAl9CkBAIC0yNDYsMTgzICsyODgsMTkxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X2NvbG9yYm9vbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitzdGF0aWMgaW50IGdldF9jb2xvcmJvb2woaW50IHByaW50KQogewotCS8qCi0JICogZ2l0IGNvbmZpZyAtLWdldC1jb2xvcmJvb2wgPHNsb3Q+IFs8c3Rkb3V0LWlzLXR0eT5dCi0JICoKLQkgKiByZXR1cm5zICJ0cnVlIiBvciAiZmFsc2UiIGRlcGVuZGluZyBvbiBob3cgPHNsb3Q+Ci0JICogaXMgY29uZmlndXJlZC4KLQkgKi8KLQotCWlmIChhcmdjID09IDIpCi0JCXN0ZG91dF9pc190dHkgPSBnaXRfY29uZmlnX2Jvb2woImNvbW1hbmQgbGluZSIsIGFyZ3ZbMV0pOwotCWVsc2UgaWYgKGFyZ2MgPT0gMSkKLQkJc3Rkb3V0X2lzX3R0eSA9IGlzYXR0eSgxKTsKLQllbHNlCi0JCXVzYWdlKGdpdF9jb25maWdfc2V0X3VzYWdlKTsKIAlnZXRfY29sb3Jib29sX2ZvdW5kID0gLTE7CiAJZ2V0X2RpZmZfY29sb3JfZm91bmQgPSAtMTsKLQlnZXRfY29sb3Jfc2xvdCA9IGFyZ3ZbMF07CiAJZ2l0X2NvbmZpZyhnaXRfZ2V0X2NvbG9yYm9vbF9jb25maWcsIE5VTEwpOwogCiAJaWYgKGdldF9jb2xvcmJvb2xfZm91bmQgPCAwKSB7Ci0JCWlmICghc3RyY21wKGdldF9jb2xvcl9zbG90LCAiY29sb3IuZGlmZiIpKQorCQlpZiAoIXN0cmNtcChnZXRfY29sb3Jib29sX3Nsb3QsICJjb2xvci5kaWZmIikpCiAJCQlnZXRfY29sb3Jib29sX2ZvdW5kID0gZ2V0X2RpZmZfY29sb3JfZm91bmQ7CiAJCWlmIChnZXRfY29sb3Jib29sX2ZvdW5kIDwgMCkKIAkJCWdldF9jb2xvcmJvb2xfZm91bmQgPSBnaXRfdXNlX2NvbG9yX2RlZmF1bHQ7CiAJfQogCi0JaWYgKGFyZ2MgPT0gMSkgewotCQlyZXR1cm4gZ2V0X2NvbG9yYm9vbF9mb3VuZCA/IDAgOiAxOwotCX0gZWxzZSB7CisJaWYgKHByaW50KSB7CiAJCXByaW50ZigiJXNcbiIsIGdldF9jb2xvcmJvb2xfZm91bmQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKIAkJcmV0dXJuIDA7Ci0JfQorCX0gZWxzZQorCQlyZXR1cm4gZ2V0X2NvbG9yYm9vbF9mb3VuZCA/IDAgOiAxOwogfQogCi1pbnQgY21kX2NvbmZpZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK2ludCBjbWRfY29uZmlnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqdW51c2VkX3ByZWZpeCkKIHsKIAlpbnQgbm9uZ2l0OwotCWNoYXIqIHZhbHVlOwotCWNvbnN0IGNoYXIgKmZpbGUgPSBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKKwljaGFyICp2YWx1ZTsKKwljb25zdCBjaGFyICpwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKIAogCWNvbmZpZ19leGNsdXNpdmVfZmlsZW5hbWUgPSBnZXRlbnYoQ09ORklHX0VOVklST05NRU5UKTsKIAotCXdoaWxlICgxIDwgYXJnYykgewotCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1pbnQiKSkKLQkJCXR5cGUgPSBUX0lOVDsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1ib29sIikpCi0JCQl0eXBlID0gVF9CT09MOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLWJvb2wtb3ItaW50IikpCi0JCQl0eXBlID0gVF9CT09MX09SX0lOVDsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1saXN0IikgfHwgIXN0cmNtcChhcmd2WzFdLCAiLWwiKSkgewotCQkJaWYgKGFyZ2MgIT0gMikKLQkJCQl1c2FnZShnaXRfY29uZmlnX3NldF91c2FnZSk7Ci0JCQlpZiAoZ2l0X2NvbmZpZyhzaG93X2FsbF9jb25maWcsIE5VTEwpIDwgMCAmJgotCQkJCQlmaWxlICYmIGVycm5vKQotCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJXM6ICVzIiwgZmlsZSwKLQkJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tZ2xvYmFsIikpIHsKLQkJCWNoYXIgKmhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKLQkJCWlmIChob21lKSB7Ci0JCQkJY2hhciAqdXNlcl9jb25maWcgPSB4c3RyZHVwKG1rcGF0aCgiJXMvLmdpdGNvbmZpZyIsIGhvbWUpKTsKLQkJCQljb25maWdfZXhjbHVzaXZlX2ZpbGVuYW1lID0gdXNlcl9jb25maWc7Ci0JCQl9IGVsc2UgewotCQkJCWRpZSgiJEhPTUUgbm90IHNldCIpOwotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tc3lzdGVtIikpCi0JCQljb25maWdfZXhjbHVzaXZlX2ZpbGVuYW1lID0gZ2l0X2V0Y19naXRjb25maWcoKTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1maWxlIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiLWYiKSkgewotCQkJaWYgKGFyZ2MgPCAzKQotCQkJCXVzYWdlKGdpdF9jb25maWdfc2V0X3VzYWdlKTsKLQkJCWlmICghaXNfYWJzb2x1dGVfcGF0aChhcmd2WzJdKSAmJiBmaWxlKQotCQkJCWZpbGUgPSBwcmVmaXhfZmlsZW5hbWUoZmlsZSwgc3RybGVuKGZpbGUpLAotCQkJCQkJICAgICAgIGFyZ3ZbMl0pOwotCQkJZWxzZQotCQkJCWZpbGUgPSBhcmd2WzJdOwotCQkJY29uZmlnX2V4Y2x1c2l2ZV9maWxlbmFtZSA9IGZpbGU7Ci0JCQlhcmdjLS07Ci0JCQlhcmd2Kys7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1udWxsIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiLXoiKSkgewotCQkJdGVybSA9ICdcMCc7Ci0JCQlkZWxpbSA9ICdcbic7Ci0JCQlrZXlfZGVsaW0gPSAnXG4nOwotCQl9Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tcmVuYW1lLXNlY3Rpb24iKSkgewotCQkJaW50IHJldDsKLQkJCWlmIChhcmdjICE9IDQpCi0JCQkJdXNhZ2UoZ2l0X2NvbmZpZ19zZXRfdXNhZ2UpOwotCQkJcmV0ID0gZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbihhcmd2WzJdLCBhcmd2WzNdKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7Ci0JCQlpZiAocmV0ID09IDApIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIk5vIHN1Y2ggc2VjdGlvbiFcbiIpOwotCQkJCXJldHVybiAxOwotCQkJfQotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1yZW1vdmUtc2VjdGlvbiIpKSB7Ci0JCQlpbnQgcmV0OwotCQkJaWYgKGFyZ2MgIT0gMykKLQkJCQl1c2FnZShnaXRfY29uZmlnX3NldF91c2FnZSk7Ci0JCQlyZXQgPSBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uKGFyZ3ZbMl0sIE5VTEwpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJldDsKLQkJCWlmIChyZXQgPT0gMCkgewotCQkJCWZwcmludGYoc3RkZXJyLCAiTm8gc3VjaCBzZWN0aW9uIVxuIik7Ci0JCQkJcmV0dXJuIDE7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLWdldC1jb2xvciIpKSB7Ci0JCQlyZXR1cm4gZ2V0X2NvbG9yKGFyZ2MtMiwgYXJndisyKTsKLQkJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLWdldC1jb2xvcmJvb2wiKSkgewotCQkJcmV0dXJuIGdldF9jb2xvcmJvb2woYXJnYy0yLCBhcmd2KzIpOwotCQl9IGVsc2UKLQkJCWJyZWFrOwotCQlhcmdjLS07Ci0JCWFyZ3YrKzsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fY29uZmlnX29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fY29uZmlnX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKworCWlmICh1c2VfZ2xvYmFsX2NvbmZpZyArIHVzZV9zeXN0ZW1fY29uZmlnICsgISFnaXZlbl9jb25maWdfZmlsZSA+IDEpIHsKKwkJZXJyb3IoIm9ubHkgb25lIGNvbmZpZyBmaWxlIGF0IGEgdGltZS4iKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY29uZmlnX3VzYWdlLCBidWlsdGluX2NvbmZpZ19vcHRpb25zKTsKIAl9CiAKLQlzd2l0Y2ggKGFyZ2MpIHsKLQljYXNlIDI6Ci0JCXJldHVybiBnZXRfdmFsdWUoYXJndlsxXSwgTlVMTCk7Ci0JY2FzZSAzOgotCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS11bnNldCIpKQotCQkJcmV0dXJuIGdpdF9jb25maWdfc2V0KGFyZ3ZbMl0sIE5VTEwpOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLXVuc2V0LWFsbCIpKQotCQkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyKGFyZ3ZbMl0sIE5VTEwsIE5VTEwsIDEpOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLWdldCIpKQotCQkJcmV0dXJuIGdldF92YWx1ZShhcmd2WzJdLCBOVUxMKTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1nZXQtYWxsIikpIHsKLQkJCWRvX2FsbCA9IDE7Ci0JCQlyZXR1cm4gZ2V0X3ZhbHVlKGFyZ3ZbMl0sIE5VTEwpOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tZ2V0LXJlZ2V4cCIpKSB7Ci0JCQlzaG93X2tleXMgPSAxOwotCQkJdXNlX2tleV9yZWdleHAgPSAxOwotCQkJZG9fYWxsID0gMTsKLQkJCXJldHVybiBnZXRfdmFsdWUoYXJndlsyXSwgTlVMTCk7CisJaWYgKHVzZV9nbG9iYWxfY29uZmlnKSB7CisJCWNoYXIgKmhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKKwkJaWYgKGhvbWUpIHsKKwkJCWNoYXIgKnVzZXJfY29uZmlnID0geHN0cmR1cChta3BhdGgoIiVzLy5naXRjb25maWciLCBob21lKSk7CisJCQljb25maWdfZXhjbHVzaXZlX2ZpbGVuYW1lID0gdXNlcl9jb25maWc7CiAJCX0gZWxzZSB7Ci0JCQl2YWx1ZSA9IG5vcm1hbGl6ZV92YWx1ZShhcmd2WzFdLCBhcmd2WzJdKTsKLQkJCXJldHVybiBnaXRfY29uZmlnX3NldChhcmd2WzFdLCB2YWx1ZSk7CisJCQlkaWUoIiRIT01FIG5vdCBzZXQiKTsKIAkJfQotCWNhc2UgNDoKLQkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tdW5zZXQiKSkKLQkJCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihhcmd2WzJdLCBOVUxMLCBhcmd2WzNdLCAwKTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS11bnNldC1hbGwiKSkKLQkJCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihhcmd2WzJdLCBOVUxMLCBhcmd2WzNdLCAxKTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1nZXQiKSkKLQkJCXJldHVybiBnZXRfdmFsdWUoYXJndlsyXSwgYXJndlszXSk7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tZ2V0LWFsbCIpKSB7Ci0JCQlkb19hbGwgPSAxOwotCQkJcmV0dXJuIGdldF92YWx1ZShhcmd2WzJdLCBhcmd2WzNdKTsKLQkJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLWdldC1yZWdleHAiKSkgewotCQkJc2hvd19rZXlzID0gMTsKLQkJCXVzZV9rZXlfcmVnZXhwID0gMTsKLQkJCWRvX2FsbCA9IDE7Ci0JCQlyZXR1cm4gZ2V0X3ZhbHVlKGFyZ3ZbMl0sIGFyZ3ZbM10pOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tYWRkIikpIHsKLQkJCXZhbHVlID0gbm9ybWFsaXplX3ZhbHVlKGFyZ3ZbMl0sIGFyZ3ZbM10pOwotCQkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyKGFyZ3ZbMl0sIHZhbHVlLCAiXiQiLCAwKTsKLQkJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLXJlcGxhY2UtYWxsIikpIHsKLQkJCXZhbHVlID0gbm9ybWFsaXplX3ZhbHVlKGFyZ3ZbMl0sIGFyZ3ZbM10pOwotCQkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyKGFyZ3ZbMl0sIHZhbHVlLCBOVUxMLCAxKTsKLQkJfSBlbHNlIHsKLQkJCXZhbHVlID0gbm9ybWFsaXplX3ZhbHVlKGFyZ3ZbMV0sIGFyZ3ZbMl0pOwotCQkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyKGFyZ3ZbMV0sIHZhbHVlLCBhcmd2WzNdLCAwKTsKLQkJfQotCWNhc2UgNToKLQkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tcmVwbGFjZS1hbGwiKSkgewotCQkJdmFsdWUgPSBub3JtYWxpemVfdmFsdWUoYXJndlsyXSwgYXJndlszXSk7Ci0JCQlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYXJndlsyXSwgdmFsdWUsIGFyZ3ZbNF0sIDEpOwotCQl9Ci0JY2FzZSAxOgotCWRlZmF1bHQ6Ci0JCXVzYWdlKGdpdF9jb25maWdfc2V0X3VzYWdlKTsKIAl9CisJZWxzZSBpZiAodXNlX3N5c3RlbV9jb25maWcpCisJCWNvbmZpZ19leGNsdXNpdmVfZmlsZW5hbWUgPSBnaXRfZXRjX2dpdGNvbmZpZygpOworCWVsc2UgaWYgKGdpdmVuX2NvbmZpZ19maWxlKSB7CisJCWlmICghaXNfYWJzb2x1dGVfcGF0aChnaXZlbl9jb25maWdfZmlsZSkgJiYgcHJlZml4KQorCQkJY29uZmlnX2V4Y2x1c2l2ZV9maWxlbmFtZSA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsCisJCQkJCQkJCSAgICBzdHJsZW4ocHJlZml4KSwKKwkJCQkJCQkJICAgIGFyZ3ZbMl0pOworCQllbHNlCisJCQljb25maWdfZXhjbHVzaXZlX2ZpbGVuYW1lID0gZ2l2ZW5fY29uZmlnX2ZpbGU7CisJfQorCisJaWYgKGVuZF9udWxsKSB7CisJCXRlcm0gPSAnXDAnOworCQlkZWxpbSA9ICdcbic7CisJCWtleV9kZWxpbSA9ICdcbic7CisJfQorCisJaWYgKEhBU19NVUxUSV9CSVRTKHR5cGVzKSkgeworCQllcnJvcigib25seSBvbmUgdHlwZSBhdCBhIHRpbWUuIik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbmZpZ191c2FnZSwgYnVpbHRpbl9jb25maWdfb3B0aW9ucyk7CisJfQorCisJaWYgKGdldF9jb2xvcl9zbG90KQorCSAgICBhY3Rpb25zIHw9IEFDVElPTl9HRVRfQ09MT1I7CisJaWYgKGdldF9jb2xvcmJvb2xfc2xvdCkKKwkgICAgYWN0aW9ucyB8PSBBQ1RJT05fR0VUX0NPTE9SQk9PTDsKKworCWlmICgoZ2V0X2NvbG9yX3Nsb3QgfHwgZ2V0X2NvbG9yYm9vbF9zbG90KSAmJiB0eXBlcykgeworCQllcnJvcigiLS1nZXQtY29sb3IgYW5kIHZhcmlhYmxlIHR5cGUgYXJlIGluY29oZXJlbnQiKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY29uZmlnX3VzYWdlLCBidWlsdGluX2NvbmZpZ19vcHRpb25zKTsKKwl9CisKKwlpZiAoSEFTX01VTFRJX0JJVFMoYWN0aW9ucykpIHsKKwkJZXJyb3IoIm9ubHkgb25lIGFjdGlvbiBhdCBhIHRpbWUuIik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbmZpZ191c2FnZSwgYnVpbHRpbl9jb25maWdfb3B0aW9ucyk7CisJfQorCWlmIChhY3Rpb25zID09IDApCisJCXN3aXRjaCAoYXJnYykgeworCQljYXNlIDE6IGFjdGlvbnMgPSBBQ1RJT05fR0VUOyBicmVhazsKKwkJY2FzZSAyOiBhY3Rpb25zID0gQUNUSU9OX1NFVDsgYnJlYWs7CisJCWNhc2UgMzogYWN0aW9ucyA9IEFDVElPTl9TRVRfQUxMOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbmZpZ191c2FnZSwgYnVpbHRpbl9jb25maWdfb3B0aW9ucyk7CisJCX0KKworCWlmIChhY3Rpb25zID09IEFDVElPTl9MSVNUKSB7CisJCWNoZWNrX2FyZ2MoYXJnYywgMCwgMCk7CisJCWlmIChnaXRfY29uZmlnKHNob3dfYWxsX2NvbmZpZywgTlVMTCkgPCAwKSB7CisJCQlpZiAoY29uZmlnX2V4Y2x1c2l2ZV9maWxlbmFtZSkKKwkJCQlkaWVfZXJybm8oInVuYWJsZSB0byByZWFkIGNvbmZpZyBmaWxlICclcyciLAorCQkJCQkgIGNvbmZpZ19leGNsdXNpdmVfZmlsZW5hbWUpOworCQkJZWxzZQorCQkJCWRpZSgiZXJyb3IgcHJvY2Vzc2luZyBjb25maWcgZmlsZShzKSIpOworCQl9CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0VESVQpIHsKKwkJY2hlY2tfYXJnYyhhcmdjLCAwLCAwKTsKKwkJaWYgKCFjb25maWdfZXhjbHVzaXZlX2ZpbGVuYW1lICYmIG5vbmdpdCkKKwkJCWRpZSgibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIpOworCQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJCWxhdW5jaF9lZGl0b3IoY29uZmlnX2V4Y2x1c2l2ZV9maWxlbmFtZSA/CisJCQkgICAgICBjb25maWdfZXhjbHVzaXZlX2ZpbGVuYW1lIDogZ2l0X3BhdGgoImNvbmZpZyIpLAorCQkJICAgICAgTlVMTCwgTlVMTCk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1NFVCkgeworCQljaGVja19hcmdjKGFyZ2MsIDIsIDIpOworCQl2YWx1ZSA9IG5vcm1hbGl6ZV92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwkJcmV0dXJuIGdpdF9jb25maWdfc2V0KGFyZ3ZbMF0sIHZhbHVlKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fU0VUX0FMTCkgeworCQljaGVja19hcmdjKGFyZ2MsIDIsIDMpOworCQl2YWx1ZSA9IG5vcm1hbGl6ZV92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyKGFyZ3ZbMF0sIHZhbHVlLCBhcmd2WzJdLCAwKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fQUREKSB7CisJCWNoZWNrX2FyZ2MoYXJnYywgMiwgMik7CisJCXZhbHVlID0gbm9ybWFsaXplX3ZhbHVlKGFyZ3ZbMF0sIGFyZ3ZbMV0pOworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYXJndlswXSwgdmFsdWUsICJeJCIsIDApOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9SRVBMQUNFX0FMTCkgeworCQljaGVja19hcmdjKGFyZ2MsIDIsIDMpOworCQl2YWx1ZSA9IG5vcm1hbGl6ZV92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyKGFyZ3ZbMF0sIHZhbHVlLCBhcmd2WzJdLCAxKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fR0VUKSB7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCXJldHVybiBnZXRfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9BTEwpIHsKKwkJZG9fYWxsID0gMTsKKwkJY2hlY2tfYXJnYyhhcmdjLCAxLCAyKTsKKwkJcmV0dXJuIGdldF92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fR0VUX1JFR0VYUCkgeworCQlzaG93X2tleXMgPSAxOworCQl1c2Vfa2V5X3JlZ2V4cCA9IDE7CisJCWRvX2FsbCA9IDE7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCXJldHVybiBnZXRfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1VOU0VUKSB7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCWlmIChhcmdjID09IDIpCisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYXJndlswXSwgTlVMTCwgYXJndlsxXSwgMCk7CisJCWVsc2UKKwkJCXJldHVybiBnaXRfY29uZmlnX3NldChhcmd2WzBdLCBOVUxMKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fVU5TRVRfQUxMKSB7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihhcmd2WzBdLCBOVUxMLCBhcmd2WzFdLCAxKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fUkVOQU1FX1NFQ1RJT04pIHsKKwkJaW50IHJldDsKKwkJY2hlY2tfYXJnYyhhcmdjLCAyLCAyKTsKKwkJcmV0ID0gZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbihhcmd2WzBdLCBhcmd2WzFdKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlpZiAocmV0ID09IDApCisJCQlkaWUoIk5vIHN1Y2ggc2VjdGlvbiEiKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fUkVNT1ZFX1NFQ1RJT04pIHsKKwkJaW50IHJldDsKKwkJY2hlY2tfYXJnYyhhcmdjLCAxLCAxKTsKKwkJcmV0ID0gZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbihhcmd2WzBdLCBOVUxMKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlpZiAocmV0ID09IDApCisJCQlkaWUoIk5vIHN1Y2ggc2VjdGlvbiEiKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fR0VUX0NPTE9SKSB7CisJCWdldF9jb2xvcihhcmd2WzBdKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fR0VUX0NPTE9SQk9PTCkgeworCQlpZiAoYXJnYyA9PSAxKQorCQkJc3Rkb3V0X2lzX3R0eSA9IGdpdF9jb25maWdfYm9vbCgiY29tbWFuZCBsaW5lIiwgYXJndlswXSk7CisJCWVsc2UgaWYgKGFyZ2MgPT0gMCkKKwkJCXN0ZG91dF9pc190dHkgPSBpc2F0dHkoMSk7CisJCXJldHVybiBnZXRfY29sb3Jib29sKGFyZ2MgIT0gMCk7CisJfQorCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluLWNvdW50LW9iamVjdHMuYyBiL2J1aWx0aW4tY291bnQtb2JqZWN0cy5jCmluZGV4IDM4YjAzM2YuLjFiMGI2YzggMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY291bnQtb2JqZWN0cy5jCisrKyBiL2J1aWx0aW4tY291bnQtb2JqZWN0cy5jCkBAIC01LDYgKzUsNyBAQAogICovCiAKICNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgogI2luY2x1ZGUgImJ1aWx0aW4uaCIKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAKQEAgLTIxLDkgKzIyLDcgQEAKIAkJY29uc3QgY2hhciAqY3A7CiAJCWludCBiYWQgPSAwOwogCi0JCWlmICgoZW50LT5kX25hbWVbMF0gPT0gJy4nKSAmJgotCQkgICAgKGVudC0+ZF9uYW1lWzFdID09IDAgfHwKLQkJICAgICAoKGVudC0+ZF9uYW1lWzFdID09ICcuJykgJiYgKGVudC0+ZF9uYW1lWzJdID09IDApKSkpCisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGVudC0+ZF9uYW1lKSkKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGNwID0gZW50LT5kX25hbWU7ICpjcDsgY3ArKykgewogCQkJaW50IGNoID0gKmNwOwpAQCAtODQsNyArODMsNyBAQAogCQlPUFRfRU5EKCksCiAJfTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdHMsIGNvdW50X29iamVjdHNfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgY291bnRfb2JqZWN0c191c2FnZSwgMCk7CiAJLyogd2UgZG8gbm90IHRha2UgYXJndW1lbnRzIG90aGVyIHRoYW4gZmxhZ3MgZm9yIG5vdyAqLwogCWlmIChhcmdjKQogCQl1c2FnZV93aXRoX29wdGlvbnMoY291bnRfb2JqZWN0c191c2FnZSwgb3B0cyk7CmRpZmYgLS1naXQgYS9idWlsdGluLWRlc2NyaWJlLmMgYi9idWlsdGluLWRlc2NyaWJlLmMKaW5kZXggM2EwMDdlZC4uN2E2NjI5OCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1kZXNjcmliZS5jCisrKyBiL2J1aWx0aW4tZGVzY3JpYmUuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJCU9QVF9FTkQoKSwKIAl9OwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgZGVzY3JpYmVfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZGVzY3JpYmVfdXNhZ2UsIDApOwogCWlmIChtYXhfY2FuZGlkYXRlcyA8IDApCiAJCW1heF9jYW5kaWRhdGVzID0gMDsKIAllbHNlIGlmIChtYXhfY2FuZGlkYXRlcyA+IE1BWF9UQUdTKQpAQCAtMzM0LDcgKzMzNCw3IEBACiAJCWRpZSgiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiKTsKIAogCWlmIChjb250YWlucykgewotCQljb25zdCBjaGFyICoqYXJncyA9IHhtYWxsb2MoKDcgKyBhcmdjKSAqIHNpemVvZihjaGFyKikpOworCQljb25zdCBjaGFyICoqYXJncyA9IHhtYWxsb2MoKDcgKyBhcmdjKSAqIHNpemVvZihjaGFyICopKTsKIAkJaW50IGkgPSAwOwogCQlhcmdzW2krK10gPSAibmFtZS1yZXYiOwogCQlhcmdzW2krK10gPSAiLS1uYW1lLW9ubHkiOwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAJCQkJYXJnc1tpKytdID0gczsKIAkJCX0KIAkJfQotCQltZW1jcHkoYXJncyArIGksIGFyZ3YsIGFyZ2MgKiBzaXplb2YoY2hhciopKTsKKwkJbWVtY3B5KGFyZ3MgKyBpLCBhcmd2LCBhcmdjICogc2l6ZW9mKGNoYXIgKikpOwogCQlhcmdzW2kgKyBhcmdjXSA9IE5VTEw7CiAJCXJldHVybiBjbWRfbmFtZV9yZXYoaSArIGFyZ2MsIGFyZ3MsIHByZWZpeCk7CiAJfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1kaWZmLXRyZWUuYyBiL2J1aWx0aW4tZGlmZi10cmVlLmMKaW5kZXggOGVjZWZkNC4uNzljZWRiNyAxMDA2NDQKLS0tIGEvYnVpbHRpbi1kaWZmLXRyZWUuYworKysgYi9idWlsdGluLWRpZmYtdHJlZS5jCkBAIC0xMDIsNyArMTAyLDYgQEAKIAogCWluaXRfcmV2aXNpb25zKG9wdCwgcHJlZml4KTsKIAlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZywgTlVMTCk7IC8qIG5vICJkaWZmIiBVSSBvcHRpb25zICovCi0JbnJfc2hhMSA9IDA7CiAJb3B0LT5hYmJyZXYgPSAwOwogCW9wdC0+ZGlmZiA9IDE7CiAJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCBvcHQsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1kaWZmLmMgYi9idWlsdGluLWRpZmYuYwppbmRleCBkNzVkNjliLi4yZTUxZjQwIDEwMDY0NAotLS0gYS9idWlsdGluLWRpZmYuYworKysgYi9idWlsdGluLWRpZmYuYwpAQCAtNzAsNyArNzAsNyBAQAogCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOwogCiAJaWYgKGxzdGF0KHBhdGgsICZzdCkpCi0JCWRpZSgiJyVzJzogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImZhaWxlZCB0byBzdGF0ICclcyciLCBwYXRoKTsKIAlpZiAoIShTX0lTUkVHKHN0LnN0X21vZGUpIHx8IFNfSVNMTksoc3Quc3RfbW9kZSkpKQogCQlkaWUoIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIiwgcGF0aCk7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZmFzdC1leHBvcnQuYyBiL2J1aWx0aW4tZmFzdC1leHBvcnQuYwppbmRleCBmZGY0YWU5Li5jNDhjMThkIDEwMDY0NAotLS0gYS9idWlsdGluLWZhc3QtZXhwb3J0LmMKKysrIGIvYnVpbHRpbi1mYXN0LWV4cG9ydC5jCkBAIC0yMyw3ICsyMyw4IEBACiB9OwogCiBzdGF0aWMgaW50IHByb2dyZXNzOwotc3RhdGljIGVudW0geyBWRVJCQVRJTSwgV0FSTiwgU1RSSVAsIEFCT1JUIH0gc2lnbmVkX3RhZ19tb2RlID0gQUJPUlQ7CitzdGF0aWMgZW51bSB7IEFCT1JULCBWRVJCQVRJTSwgV0FSTiwgU1RSSVAgfSBzaWduZWRfdGFnX21vZGUgPSBBQk9SVDsKK3N0YXRpYyBlbnVtIHsgRVJST1IsIERST1AsIFJFV1JJVEUgfSB0YWdfb2ZfZmlsdGVyZWRfbW9kZSA9IEFCT1JUOwogc3RhdGljIGludCBmYWtlX21pc3NpbmdfdGFnZ2VyOwogCiBzdGF0aWMgaW50IHBhcnNlX29wdF9zaWduZWRfdGFnX21vZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LApAQCAtNDIsNiArNDMsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwYXJzZV9vcHRfdGFnX29mX2ZpbHRlcmVkX21vZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCB8fCAhc3RyY21wKGFyZywgImFib3J0IikpCisJCXRhZ19vZl9maWx0ZXJlZF9tb2RlID0gQUJPUlQ7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkcm9wIikpCisJCXRhZ19vZl9maWx0ZXJlZF9tb2RlID0gRFJPUDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInJld3JpdGUiKSkKKwkJdGFnX29mX2ZpbHRlcmVkX21vZGUgPSBSRVdSSVRFOworCWVsc2UKKwkJcmV0dXJuIGVycm9yKCJVbmtub3duIHRhZy1vZi1maWx0ZXJlZCBtb2RlOiAlcyIsIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZGVjb3JhdGlvbiBpZG51bXM7CiBzdGF0aWMgdWludDMyX3QgbGFzdF9pZG51bTsKIApAQCAtMTE5LDcgKzEzNCw3IEBACiAKIAlwcmludGYoImJsb2Jcbm1hcmsgOiUiUFJJdTMyIlxuZGF0YSAlbHVcbiIsIGxhc3RfaWRudW0sIHNpemUpOwogCWlmIChzaXplICYmIGZ3cml0ZShidWYsIHNpemUsIDEsIHN0ZG91dCkgIT0gMSkKLQkJZGllICgiQ291bGQgbm90IHdyaXRlIGJsb2IgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCB3cml0ZSBibG9iICclcyciLCBzaGExX3RvX2hleChzaGExKSk7CiAJcHJpbnRmKCJcbiIpOwogCiAJc2hvd19wcm9ncmVzcygpOwpAQCAtMjIxLDcgKzIzNiw4IEBACiAJaWYgKG1lc3NhZ2UpCiAJCW1lc3NhZ2UgKz0gMjsKIAotCWlmIChjb21taXQtPnBhcmVudHMpIHsKKwlpZiAoY29tbWl0LT5wYXJlbnRzICYmCisJICAgIGdldF9vYmplY3RfbWFyaygmY29tbWl0LT5wYXJlbnRzLT5pdGVtLT5vYmplY3QpICE9IDApIHsKIAkJcGFyc2VfY29tbWl0KGNvbW1pdC0+cGFyZW50cy0+aXRlbSk7CiAJCWRpZmZfdHJlZV9zaGExKGNvbW1pdC0+cGFyZW50cy0+aXRlbS0+dHJlZS0+b2JqZWN0LnNoYTEsCiAJCQkgICAgICAgY29tbWl0LT50cmVlLT5vYmplY3Quc2hhMSwgIiIsICZyZXYtPmRpZmZvcHQpOwpAQCAtMjg4LDYgKzMwNCwyMyBAQAogCWNoYXIgKmJ1ZjsKIAljb25zdCBjaGFyICp0YWdnZXIsICp0YWdnZXJfZW5kLCAqbWVzc2FnZTsKIAlzaXplX3QgbWVzc2FnZV9zaXplID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0ICp0YWdnZWQ7CisJaW50IHRhZ2dlZF9tYXJrOworCXN0cnVjdCBjb21taXQgKnA7CisKKwkvKiBUcmVlcyBoYXZlIG5vIGlkZW50aWZlciBpbiBmYXN0LWV4cG9ydCBvdXRwdXQsIHRodXMgd2UgaGF2ZSBubyB3YXkKKwkgKiB0byBvdXRwdXQgdGFncyBvZiB0cmVlcywgdGFncyBvZiB0YWdzIG9mIHRyZWVzLCBldGMuICBTaW1wbHkgb21pdAorCSAqIHN1Y2ggdGFncy4KKwkgKi8KKwl0YWdnZWQgPSB0YWctPnRhZ2dlZDsKKwl3aGlsZSAodGFnZ2VkLT50eXBlID09IE9CSl9UQUcpIHsKKwkJdGFnZ2VkID0gKChzdHJ1Y3QgdGFnICopdGFnZ2VkKS0+dGFnZ2VkOworCX0KKwlpZiAodGFnZ2VkLT50eXBlID09IE9CSl9UUkVFKSB7CisJCXdhcm5pbmcoIk9taXR0aW5nIHRhZyAlcyxcbnNpbmNlIHRhZ3Mgb2YgdHJlZXMgKG9yIHRhZ3Mgb2YgdGFncyBvZiB0cmVlcywgZXRjLikgYXJlIG5vdCBzdXBwb3J0ZWQuIiwKKwkJCXNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpKTsKKwkJcmV0dXJuOworCX0KIAogCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHRhZy0+b2JqZWN0LnNoYTEsICZ0eXBlLCAmc2l6ZSk7CiAJaWYgKCFidWYpCkBAIC0zMzIsMTAgKzM2NSw0NSBAQAogCQkJfQogCX0KIAorCS8qIGhhbmRsZSB0YWctPnRhZ2dlZCBoYXZpbmcgYmVlbiBmaWx0ZXJlZCBvdXQgZHVlIHRvIHBhdGhzIHNwZWNpZmllZCAqLworCXRhZ2dlZCA9IHRhZy0+dGFnZ2VkOworCXRhZ2dlZF9tYXJrID0gZ2V0X29iamVjdF9tYXJrKHRhZ2dlZCk7CisJaWYgKCF0YWdnZWRfbWFyaykgeworCQlzd2l0Y2godGFnX29mX2ZpbHRlcmVkX21vZGUpIHsKKwkJY2FzZSBBQk9SVDoKKwkJCWRpZSAoIlRhZyAlcyB0YWdzIHVuZXhwb3J0ZWQgb2JqZWN0OyB1c2UgIgorCQkJICAgICAiLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PTxtb2RlPiB0byBoYW5kbGUgaXQuIiwKKwkJCSAgICAgc2hhMV90b19oZXgodGFnLT5vYmplY3Quc2hhMSkpOworCQljYXNlIERST1A6CisJCQkvKiBJZ25vcmUgdGhpcyB0YWcgYWx0b2dldGhlciAqLworCQkJcmV0dXJuOworCQljYXNlIFJFV1JJVEU6CisJCQlpZiAodGFnZ2VkLT50eXBlICE9IE9CSl9DT01NSVQpIHsKKwkJCQlkaWUgKCJUYWcgJXMgdGFncyB1bmV4cG9ydGVkICVzISIsCisJCQkJICAgICBzaGExX3RvX2hleCh0YWctPm9iamVjdC5zaGExKSwKKwkJCQkgICAgIHR5cGVuYW1lKHRhZ2dlZC0+dHlwZSkpOworCQkJfQorCQkJcCA9IChzdHJ1Y3QgY29tbWl0ICopdGFnZ2VkOworCQkJZm9yICg7OykgeworCQkJCWlmIChwLT5wYXJlbnRzICYmIHAtPnBhcmVudHMtPm5leHQpCisJCQkJCWJyZWFrOworCQkJCWlmIChwLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJCQlicmVhazsKKwkJCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkpCisJCQkJCWJyZWFrOworCQkJCWlmICghcC0+cGFyZW50cykKKwkJCQkJZGllICgiQ2FuJ3QgZmluZCByZXBsYWNlbWVudCBjb21taXQgZm9yIHRhZyAlc1xuIiwKKwkJCQkJICAgICBzaGExX3RvX2hleCh0YWctPm9iamVjdC5zaGExKSk7CisJCQkJcCA9IHAtPnBhcmVudHMtPml0ZW07CisJCQl9CisJCQl0YWdnZWRfbWFyayA9IGdldF9vYmplY3RfbWFyaygmcC0+b2JqZWN0KTsKKwkJfQorCX0KKwogCWlmICghcHJlZml4Y21wKG5hbWUsICJyZWZzL3RhZ3MvIikpCiAJCW5hbWUgKz0gMTA7CiAJcHJpbnRmKCJ0YWcgJXNcbmZyb20gOiVkXG4lLipzJXNkYXRhICVkXG4lLipzXG4iLAotCSAgICAgICBuYW1lLCBnZXRfb2JqZWN0X21hcmsodGFnLT50YWdnZWQpLAorCSAgICAgICBuYW1lLCB0YWdnZWRfbWFyaywKIAkgICAgICAgKGludCkodGFnZ2VyX2VuZCAtIHRhZ2dlciksIHRhZ2dlciwKIAkgICAgICAgdGFnZ2VyID09IHRhZ2dlcl9lbmQgPyAiIiA6ICJcbiIsCiAJICAgICAgIChpbnQpbWVzc2FnZV9zaXplLCAoaW50KW1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSA/IG1lc3NhZ2UgOiAiIik7CkBAIC0zNjIsNyArNDMwLDEwIEBACiAJCQlicmVhazsKIAkJY2FzZSBPQkpfVEFHOgogCQkJdGFnID0gKHN0cnVjdCB0YWcgKillLT5pdGVtOworCisJCQkvKiBoYW5kbGUgbmVzdGVkIHRhZ3MgKi8KIAkJCXdoaWxlICh0YWcgJiYgdGFnLT5vYmplY3QudHlwZSA9PSBPQkpfVEFHKSB7CisJCQkJcGFyc2Vfb2JqZWN0KHRhZy0+b2JqZWN0LnNoYTEpOwogCQkJCXN0cmluZ19saXN0X2FwcGVuZChmdWxsX25hbWUsIGV4dHJhX3JlZnMpLT51dGlsID0gdGFnOwogCQkJCXRhZyA9IChzdHJ1Y3QgdGFnICopdGFnLT50YWdnZWQ7CiAJCQl9CkBAIC0zNzUsMTEgKzQ0NiwxNyBAQAogCQkJY2FzZSBPQkpfQkxPQjoKIAkJCQloYW5kbGVfb2JqZWN0KHRhZy0+b2JqZWN0LnNoYTEpOwogCQkJCWNvbnRpbnVlOworCQkJZGVmYXVsdDogLyogT0JKX1RBRyAobmVzdGVkIHRhZ3MpIGlzIGFscmVhZHkgaGFuZGxlZCAqLworCQkJCXdhcm5pbmcoIlRhZyBwb2ludHMgdG8gb2JqZWN0IG9mIHVuZXhwZWN0ZWQgdHlwZSAlcywgc2tpcHBpbmcuIiwKKwkJCQkJdHlwZW5hbWUodGFnLT5vYmplY3QudHlwZSkpOworCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlkaWUgKCJVbmV4cGVjdGVkIG9iamVjdCBvZiB0eXBlICVzIiwKLQkJCSAgICAgdHlwZW5hbWUoZS0+aXRlbS0+dHlwZSkpOworCQkJd2FybmluZygiJXM6IFVuZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgJXMsIHNraXBwaW5nLiIsCisJCQkJZS0+bmFtZSwKKwkJCQl0eXBlbmFtZShlLT5pdGVtLT50eXBlKSk7CisJCQljb250aW51ZTsKIAkJfQogCQlpZiAoY29tbWl0LT51dGlsKQogCQkJLyogbW9yZSB0aGFuIG9uZSBuYW1lIGZvciB0aGUgc2FtZSBvYmplY3QgKi8KQEAgLTQxOCwyMSArNDk1LDI3IEBACiAJdWludDMyX3QgbWFyazsKIAlzdHJ1Y3Qgb2JqZWN0X2RlY29yYXRpb24gKmRlY28gPSBpZG51bXMuaGFzaDsKIAlGSUxFICpmOworCWludCBlID0gMDsKIAogCWYgPSBmb3BlbihmaWxlLCAidyIpOwogCWlmICghZikKLQkJZXJyb3IoIlVuYWJsZSB0byBvcGVuIG1hcmtzIGZpbGUgJXMgZm9yIHdyaXRpbmciLCBmaWxlKTsKKwkJZXJyb3IoIlVuYWJsZSB0byBvcGVuIG1hcmtzIGZpbGUgJXMgZm9yIHdyaXRpbmcuIiwgZmlsZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaWRudW1zLnNpemU7IGkrKykgewogCQlpZiAoZGVjby0+YmFzZSAmJiBkZWNvLT5iYXNlLT50eXBlID09IDEpIHsKIAkJCW1hcmsgPSBwdHJfdG9fbWFyayhkZWNvLT5kZWNvcmF0aW9uKTsKLQkJCWZwcmludGYoZiwgIjolIlBSSXUzMiIgJXNcbiIsIG1hcmssCi0JCQkJc2hhMV90b19oZXgoZGVjby0+YmFzZS0+c2hhMSkpOworCQkJaWYgKGZwcmludGYoZiwgIjolIlBSSXUzMiIgJXNcbiIsIG1hcmssCisJCQkJc2hhMV90b19oZXgoZGVjby0+YmFzZS0+c2hhMSkpIDwgMCkgeworCQkJICAgIGUgPSAxOworCQkJICAgIGJyZWFrOworCQkJfQogCQl9CiAJCWRlY28rKzsKIAl9CiAKLQlpZiAoZmVycm9yKGYpIHx8IGZjbG9zZShmKSkKKwllIHw9IGZlcnJvcihmKTsKKwllIHw9IGZjbG9zZShmKTsKKwlpZiAoZSkKIAkJZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBtYXJrcyBmaWxlICVzLiIsIGZpbGUpOwogfQogCkBAIC00NDEsNyArNTI0LDcgQEAKIAljaGFyIGxpbmVbNTEyXTsKIAlGSUxFICpmID0gZm9wZW4oaW5wdXRfZmlsZSwgInIiKTsKIAlpZiAoIWYpCi0JCWRpZSgiY2Fubm90IHJlYWQgJXM6ICVzIiwgaW5wdXRfZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJjYW5ub3QgcmVhZCAnJXMnIiwgaW5wdXRfZmlsZSk7CiAKIAl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkgewogCQl1aW50MzJfdCBtYXJrOwpAQCAtNDg4LDYgKzU3MSw5IEBACiAJCU9QVF9DQUxMQkFDSygwLCAic2lnbmVkLXRhZ3MiLCAmc2lnbmVkX3RhZ19tb2RlLCAibW9kZSIsCiAJCQkgICAgICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiLAogCQkJICAgICBwYXJzZV9vcHRfc2lnbmVkX3RhZ19tb2RlKSwKKwkJT1BUX0NBTExCQUNLKDAsICJ0YWctb2YtZmlsdGVyZWQtb2JqZWN0IiwgJnRhZ19vZl9maWx0ZXJlZF9tb2RlLCAibW9kZSIsCisJCQkgICAgICJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIiwKKwkJCSAgICAgcGFyc2Vfb3B0X3RhZ19vZl9maWx0ZXJlZF9tb2RlKSwKIAkJT1BUX1NUUklORygwLCAiZXhwb3J0LW1hcmtzIiwgJmV4cG9ydF9maWxlbmFtZSwgIkZJTEUiLAogCQkJICAgICAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiKSwKIAkJT1BUX1NUUklORygwLCAiaW1wb3J0LW1hcmtzIiwgJmltcG9ydF9maWxlbmFtZSwgIkZJTEUiLApAQCAtNTA0LDggKzU5MCwxMSBAQAogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCWluaXRfcmV2aXNpb25zKCZyZXZzLCBwcmVmaXgpOworCXJldnMudG9wb19vcmRlciA9IDE7CisJcmV2cy5zaG93X3NvdXJjZSA9IDE7CisJcmV2cy5yZXdyaXRlX3BhcmVudHMgPSAxOwogCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldnMsIE5VTEwpOwotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGZhc3RfZXhwb3J0X3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGZhc3RfZXhwb3J0X3VzYWdlLCAwKTsKIAlpZiAoYXJnYyA+IDEpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyAoZmFzdF9leHBvcnRfdXNhZ2UsIG9wdGlvbnMpOwogCkBAIC01MTQsMTggKzYwMywxMyBAQAogCiAJZ2V0X3RhZ3NfYW5kX2R1cGxpY2F0ZXMoJnJldnMucGVuZGluZywgJmV4dHJhX3JlZnMpOwogCi0JcmV2cy50b3BvX29yZGVyID0gMTsKIAlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKIAkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOwogCXJldnMuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSBzaG93X2ZpbGVtb2RpZnk7CiAJRElGRl9PUFRfU0VUKCZyZXZzLmRpZmZvcHQsIFJFQ1VSU0lWRSk7CiAJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24oJnJldnMpKSkgewogCQlpZiAoaGFzX3Vuc2hvd25fcGFyZW50KGNvbW1pdCkpIHsKLQkJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOwogCQkJYWRkX29iamVjdF9hcnJheSgmY29tbWl0LT5vYmplY3QsIE5VTEwsICZjb21taXRzKTsKLQkJCWZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkKLQkJCQlpZiAoIXBhcmVudC0+aXRlbS0+dXRpbCkKLQkJCQkJcGFyZW50LT5pdGVtLT51dGlsID0gY29tbWl0LT51dGlsOwogCQl9CiAJCWVsc2UgewogCQkJaGFuZGxlX2NvbW1pdChjb21taXQsICZyZXZzKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZmV0Y2gtLXRvb2wuYyBiL2J1aWx0aW4tZmV0Y2gtLXRvb2wuYwppbmRleCA0NjliMDdlLi4zZGJkZjdhIDEwMDY0NAotLS0gYS9idWlsdGluLWZldGNoLS10b29sLmMKKysrIGIvYnVpbHRpbi1mZXRjaC0tdG9vbC5jCkBAIC0yLDEyICsyLDEzIEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJyZWZzLmgiCiAjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKIAogc3RhdGljIGNoYXIgKmdldF9zdGRpbih2b2lkKQogewogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDEwMjQpIDwgMCkgewotCQlkaWUoImVycm9yIHJlYWRpbmcgc3RhbmRhcmQgaW5wdXQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJlcnJvciByZWFkaW5nIHN0YW5kYXJkIGlucHV0Iik7CiAJfQogCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwogfQpAQCAtMTg2LDcgKzE4Nyw3IEBACiBzdGF0aWMgdm9pZCByZW1vdmVfa2VlcF9vbl9zaWduYWwoaW50IHNpZ25vKQogewogCXJlbW92ZV9rZWVwKCk7Ci0Jc2lnbmFsKFNJR0lOVCwgU0lHX0RGTCk7CisJc2lnY2hhaW5fcG9wKHNpZ25vKTsKIAlyYWlzZShzaWdubyk7CiB9CiAKQEAgLTI0NSw3ICsyNDYsNyBAQAogCWNoYXIgYnVmZmVyWzEwMjRdOwogCWludCBlcnIgPSAwOwogCi0Jc2lnbmFsKFNJR0lOVCwgcmVtb3ZlX2tlZXBfb25fc2lnbmFsKTsKKwlzaWdjaGFpbl9wdXNoX2NvbW1vbihyZW1vdmVfa2VlcF9vbl9zaWduYWwpOwogCWF0ZXhpdChyZW1vdmVfa2VlcCk7CiAKIAl3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4pKSB7CmRpZmYgLS1naXQgYS9idWlsdGluLWZldGNoLXBhY2suYyBiL2J1aWx0aW4tZmV0Y2gtcGFjay5jCmluZGV4IDY3ZmI4MGUuLjYyOTczNWYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZmV0Y2gtcGFjay5jCisrKyBiL2J1aWx0aW4tZmV0Y2gtcGFjay5jCkBAIC0xMyw2ICsxMyw3IEBACiBzdGF0aWMgaW50IHRyYW5zZmVyX3VucGFja19saW1pdCA9IC0xOwogc3RhdGljIGludCBmZXRjaF91bnBhY2tfbGltaXQgPSAtMTsKIHN0YXRpYyBpbnQgdW5wYWNrX2xpbWl0ID0gMTAwOworc3RhdGljIGludCBwcmVmZXJfb2ZzX2RlbHRhID0gMTsKIHN0YXRpYyBzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzIGFyZ3MgPSB7CiAJLyogLnVwbG9hZHBhY2sgPSAqLyAiZ2l0LXVwbG9hZC1wYWNrIiwKIH07CkBAIC0xMTEsNyArMTEyLDcgQEAKICAgR2V0IHRoZSBuZXh0IHJldiB0byBzZW5kLCBpZ25vcmluZyB0aGUgY29tbW9uLgogKi8KIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGdldF9yZXYodm9pZCkKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpnZXRfcmV2KHZvaWQpCiB7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gTlVMTDsKIApAQCAtMjAwLDcgKzIwMSw3IEBACiAJCQkJICAgICAoYXJncy51c2VfdGhpbl9wYWNrID8gIiB0aGluLXBhY2siIDogIiIpLAogCQkJCSAgICAgKGFyZ3Mubm9fcHJvZ3Jlc3MgPyAiIG5vLXByb2dyZXNzIiA6ICIiKSwKIAkJCQkgICAgIChhcmdzLmluY2x1ZGVfdGFnID8gIiBpbmNsdWRlLXRhZyIgOiAiIiksCi0JCQkJICAgICAiIG9mcy1kZWx0YSIpOworCQkJCSAgICAgKHByZWZlcl9vZnNfZGVsdGEgPyAiIG9mcy1kZWx0YSIgOiAiIikpOwogCQllbHNlCiAJCQlwYWNrZXRfd3JpdGUoZmRbMV0sICJ3YW50ICVzXG4iLCBzaGExX3RvX2hleChyZW1vdGUpKTsKIAkJZmV0Y2hpbmcrKzsKQEAgLTIxNiw5ICsyMTcsOCBAQAogCWlmIChhcmdzLmRlcHRoID4gMCkgewogCQljaGFyIGxpbmVbMTAyNF07CiAJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JCWludCBsZW47CiAKLQkJd2hpbGUgKChsZW4gPSBwYWNrZXRfcmVhZF9saW5lKGZkWzBdLCBsaW5lLCBzaXplb2YobGluZSkpKSkgeworCQl3aGlsZSAocGFja2V0X3JlYWRfbGluZShmZFswXSwgbGluZSwgc2l6ZW9mKGxpbmUpKSkgewogCQkJaWYgKCFwcmVmaXhjbXAobGluZSwgInNoYWxsb3cgIikpIHsKIAkJCQlpZiAoZ2V0X3NoYTFfaGV4KGxpbmUgKyA4LCBzaGExKSkKIAkJCQkJZGllKCJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiLCBsaW5lKTsKQEAgLTQ4Myw3ICs0ODMsOSBAQAogewogCWludCAqeGQgPSBkYXRhOwogCi0JcmV0dXJuIHJlY3Zfc2lkZWJhbmQoImZldGNoLXBhY2siLCB4ZFswXSwgZmQsIDIpOworCWludCByZXQgPSByZWN2X3NpZGViYW5kKCJmZXRjaC1wYWNrIiwgeGRbMF0sIGZkKTsKKwljbG9zZShmZCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBnZXRfcGFjayhpbnQgeGRbMl0sIGNoYXIgKipwYWNrX2xvY2tmaWxlKQpAQCAtNTk3LDYgKzU5OSwxMSBAQAogCQkJZnByaW50ZihzdGRlcnIsICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kXG4iKTsKIAkJdXNlX3NpZGViYW5kID0gMTsKIAl9CisJaWYgKHNlcnZlcl9zdXBwb3J0cygib2ZzLWRlbHRhIikpIHsKKwkJaWYgKGFyZ3MudmVyYm9zZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiU2VydmVyIHN1cHBvcnRzIG9mcy1kZWx0YVxuIik7CisJfSBlbHNlCisJCXByZWZlcl9vZnNfZGVsdGEgPSAwOwogCWlmIChldmVyeXRoaW5nX2xvY2FsKCZyZWYsIG5yX21hdGNoLCBtYXRjaCkpIHsKIAkJcGFja2V0X2ZsdXNoKGZkWzFdKTsKIAkJZ290byBhbGxfZG9uZTsKQEAgLTYwNiw3ICs2MTMsNyBAQAogCQkJLyogV2hlbiBjbG9uaW5nLCBpdCBpcyBub3QgdW51c3VhbCB0byBoYXZlCiAJCQkgKiBubyBjb21tb24gY29tbWl0LgogCQkJICovCi0JCQlmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IG5vIGNvbW1vbiBjb21taXRzXG4iKTsKKwkJCXdhcm5pbmcoIm5vIGNvbW1vbiBjb21taXRzIik7CiAKIAlpZiAoZ2V0X3BhY2soZmQsIHBhY2tfbG9ja2ZpbGUpKQogCQlkaWUoImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIik7CkBAIC02NDksNiArNjU2LDExIEBACiAJCXJldHVybiAwOwogCX0KIAorCWlmIChzdHJjbXAodmFyLCAicmVwYWNrLnVzZWRlbHRhYmFzZW9mZnNldCIpID09IDApIHsKKwkJcHJlZmVyX29mc19kZWx0YSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKQEAgLTgwMSwxNSArODEzLDEzIEBACiAJCWludCBmZDsKIAogCQltdGltZS5zZWMgPSBzdC5zdF9tdGltZTsKLSNpZmRlZiBVU0VfTlNFQwotCQltdGltZS51c2VjID0gc3Quc3RfbXRpbS51c2VjOwotI2VuZGlmCisJCW10aW1lLm5zZWMgPSBTVF9NVElNRV9OU0VDKHN0KTsKIAkJaWYgKHN0YXQoc2hhbGxvdywgJnN0KSkgewogCQkJaWYgKG10aW1lLnNlYykKIAkJCQlkaWUoInNoYWxsb3cgZmlsZSB3YXMgcmVtb3ZlZCBkdXJpbmcgZmV0Y2giKTsKIAkJfSBlbHNlIGlmIChzdC5zdF9tdGltZSAhPSBtdGltZS5zZWMKICNpZmRlZiBVU0VfTlNFQwotCQkJCXx8IHN0LnN0X210aW0udXNlYyAhPSBtdGltZS51c2VjCisJCQkJfHwgU1RfTVRJTUVfTlNFQyhzdCkgIT0gbXRpbWUubnNlYwogI2VuZGlmCiAJCQkgICkKIAkJCWRpZSgic2hhbGxvdyBmaWxlIHdhcyBjaGFuZ2VkIGR1cmluZyBmZXRjaCIpOwpAQCAtODE3LDcgKzgyNyw3IEBACiAJCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbG9jaywgc2hhbGxvdywKIAkJCQkJICAgICAgIExPQ0tfRElFX09OX0VSUk9SKTsKIAkJaWYgKCF3cml0ZV9zaGFsbG93X2NvbW1pdHMoZmQsIDApKSB7Ci0JCQl1bmxpbmsoc2hhbGxvdyk7CisJCQl1bmxpbmtfb3Jfd2FybihzaGFsbG93KTsKIAkJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CiAJCX0gZWxzZSB7CiAJCQljb21taXRfbG9ja19maWxlKCZsb2NrKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZmV0Y2guYyBiL2J1aWx0aW4tZmV0Y2guYwppbmRleCA3NTY4MTYzLi44MTdkZDZiIDEwMDY0NAotLS0gYS9idWlsdGluLWZldGNoLmMKKysrIGIvYnVpbHRpbi1mZXRjaC5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2ZldGNoX3VzYWdlW10gPSB7CiAJImdpdCBmZXRjaCBbb3B0aW9uc10gWzxyZXBvc2l0b3J5PiA8cmVmc3BlYz4uLi5dIiwKQEAgLTU4LDcgKzU5LDcgQEAKIHN0YXRpYyB2b2lkIHVubG9ja19wYWNrX29uX3NpZ25hbChpbnQgc2lnbm8pCiB7CiAJdW5sb2NrX3BhY2soKTsKLQlzaWduYWwoU0lHSU5ULCBTSUdfREZMKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOwogCXJhaXNlKHNpZ25vKTsKIH0KIApAQCAtMTY2LDYgKzE2Nyw5IEBACiAJcmV0dXJuIHJlZl9tYXA7CiB9CiAKKyNkZWZpbmUgU1RPUkVfUkVGX0VSUk9SX09USEVSIDEKKyNkZWZpbmUgU1RPUkVfUkVGX0VSUk9SX0RGX0NPTkZMSUNUIDIKKwogc3RhdGljIGludCBzX3VwZGF0ZV9yZWYoY29uc3QgY2hhciAqYWN0aW9uLAogCQkJc3RydWN0IHJlZiAqcmVmLAogCQkJaW50IGNoZWNrX29sZCkKQEAgLTE4MCw5ICsxODQsMTEgQEAKIAlsb2NrID0gbG9ja19hbnlfcmVmX2Zvcl91cGRhdGUocmVmLT5uYW1lLAogCQkJCSAgICAgICBjaGVja19vbGQgPyByZWYtPm9sZF9zaGExIDogTlVMTCwgMCk7CiAJaWYgKCFsb2NrKQotCQlyZXR1cm4gMjsKKwkJcmV0dXJuIGVycm5vID09IEVOT1RESVIgPyBTVE9SRV9SRUZfRVJST1JfREZfQ09ORkxJQ1QgOgorCQkJCQkgIFNUT1JFX1JFRl9FUlJPUl9PVEhFUjsKIAlpZiAod3JpdGVfcmVmX3NoYTEobG9jaywgcmVmLT5uZXdfc2hhMSwgbXNnKSA8IDApCi0JCXJldHVybiAyOworCQlyZXR1cm4gZXJybm8gPT0gRU5PVERJUiA/IFNUT1JFX1JFRl9FUlJPUl9ERl9DT05GTElDVCA6CisJCQkJCSAgU1RPUkVfUkVGX0VSUk9SX09USEVSOwogCXJldHVybiAwOwogfQogCkBAIC0xOTYsMTEgKzIwMiw3IEBACiAJc3RydWN0IGNvbW1pdCAqY3VycmVudCA9IE5VTEwsICp1cGRhdGVkOwogCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKIAlzdHJ1Y3QgYnJhbmNoICpjdXJyZW50X2JyYW5jaCA9IGJyYW5jaF9nZXQoTlVMTCk7Ci0JY29uc3QgY2hhciAqcHJldHR5X3JlZiA9IHJlZi0+bmFtZSArICgKLQkJIXByZWZpeGNtcChyZWYtPm5hbWUsICJyZWZzL2hlYWRzLyIpID8gMTEgOgotCQkhcHJlZml4Y21wKHJlZi0+bmFtZSwgInJlZnMvdGFncy8iKSA/IDEwIDoKLQkJIXByZWZpeGNtcChyZWYtPm5hbWUsICJyZWZzL3JlbW90ZXMvIikgPyAxMyA6Ci0JCTApOworCWNvbnN0IGNoYXIgKnByZXR0eV9yZWYgPSBwcmV0dGlmeV9yZWZuYW1lKHJlZi0+bmFtZSk7CiAKIAkqZGlzcGxheSA9IDA7CiAJdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8ocmVmLT5uZXdfc2hhMSwgTlVMTCk7CkBAIC0yOTIsNyArMjk0LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc3RvcmVfdXBkYXRlZF9yZWZzKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqcmVtb3RlX25hbWUsCitzdGF0aWMgaW50IHN0b3JlX3VwZGF0ZWRfcmVmcyhjb25zdCBjaGFyICpyYXdfdXJsLCBjb25zdCBjaGFyICpyZW1vdGVfbmFtZSwKIAkJc3RydWN0IHJlZiAqcmVmX21hcCkKIHsKIAlGSUxFICpmcDsKQEAgLTMwMSwxMSArMzAzLDEzIEBACiAJY2hhciBub3RlWzEwMjRdOwogCWNvbnN0IGNoYXIgKndoYXQsICpraW5kOwogCXN0cnVjdCByZWYgKnJtOwotCWNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGgoIkZFVENIX0hFQUQiKTsKKwljaGFyICp1cmwsICpmaWxlbmFtZSA9IGdpdF9wYXRoKCJGRVRDSF9IRUFEIik7CiAKIAlmcCA9IGZvcGVuKGZpbGVuYW1lLCAiYSIpOwogCWlmICghZnApCiAJCXJldHVybiBlcnJvcigiY2Fubm90IG9wZW4gJXM6ICVzXG4iLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKworCXVybCA9IHRyYW5zcG9ydF9hbm9ueW1pemVfdXJsKHJhd191cmwpOwogCWZvciAocm0gPSByZWZfbWFwOyBybTsgcm0gPSBybS0+bmV4dCkgewogCQlzdHJ1Y3QgcmVmICpyZWYgPSBOVUxMOwogCkBAIC0zNTYsMTIgKzM2MCwxOCBAQAogCQkJCQkJICAgIGtpbmQpOwogCQkJbm90ZV9sZW4gKz0gc3ByaW50Zihub3RlICsgbm90ZV9sZW4sICInJXMnIG9mICIsIHdoYXQpOwogCQl9Ci0JCW5vdGVfbGVuICs9IHNwcmludGYobm90ZSArIG5vdGVfbGVuLCAiJS4qcyIsIHVybF9sZW4sIHVybCk7Ci0JCWZwcmludGYoZnAsICIlc1x0JXNcdCVzXG4iLAorCQlub3RlW25vdGVfbGVuXSA9ICdcMCc7CisJCWZwcmludGYoZnAsICIlc1x0JXNcdCVzIiwKIAkJCXNoYTFfdG9faGV4KGNvbW1pdCA/IGNvbW1pdC0+b2JqZWN0LnNoYTEgOgogCQkJCSAgICBybS0+b2xkX3NoYTEpLAogCQkJcm0tPm1lcmdlID8gIiIgOiAibm90LWZvci1tZXJnZSIsCiAJCQlub3RlKTsKKwkJZm9yIChpID0gMDsgaSA8IHVybF9sZW47ICsraSkKKwkJCWlmICgnXG4nID09IHVybFtpXSkKKwkJCQlmcHV0cygiXFxuIiwgZnApOworCQkJZWxzZQorCQkJCWZwdXRjKHVybFtpXSwgZnApOworCQlmcHV0YygnXG4nLCBmcCk7CiAKIAkJaWYgKHJlZikKIAkJCXJjIHw9IHVwZGF0ZV9sb2NhbF9yZWYocmVmLCB3aGF0LCBub3RlKTsKQEAgLTM3OSw4ICszODksOSBAQAogCQkJCWZwcmludGYoc3RkZXJyLCAiICVzXG4iLCBub3RlKTsKIAkJfQogCX0KKwlmcmVlKHVybCk7CiAJZmNsb3NlKGZwKTsKLQlpZiAocmMgJiAyKQorCWlmIChyYyAmIFNUT1JFX1JFRl9FUlJPUl9ERl9DT05GTElDVCkKIAkJZXJyb3IoInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKIAkJICAgICAgIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nICIKIAkJICAgICAgImJyYW5jaGVzIiwgcmVtb3RlX25hbWUpOwpAQCAtMzg5LDE0ICs0MDAsMTQgQEAKIAogLyoKICAqIFdlIHdvdWxkIHdhbnQgdG8gYnlwYXNzIHRoZSBvYmplY3QgdHJhbnNmZXIgYWx0b2dldGhlciBpZgotICogZXZlcnl0aGluZyB3ZSBhcmUgZ29pbmcgdG8gZmV0Y2ggYWxyZWFkeSBleGlzdHMgYW5kIGNvbm5lY3RlZAorICogZXZlcnl0aGluZyB3ZSBhcmUgZ29pbmcgdG8gZmV0Y2ggYWxyZWFkeSBleGlzdHMgYW5kIGlzIGNvbm5lY3RlZAogICogbG9jYWxseS4KICAqCi0gKiBUaGUgcmVmcyB3ZSBhcmUgZ29pbmcgdG8gZmV0Y2ggYXJlIGluIHRvX2ZldGNoIChucl9oZWFkcyBpbgotICogdG90YWwpLiAgSWYgcnVubmluZworICogVGhlIHJlZnMgd2UgYXJlIGdvaW5nIHRvIGZldGNoIGFyZSBpbiByZWZfbWFwLiAgSWYgcnVubmluZwogICoKLSAqICAkIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgdG9fZmV0Y2hbMF0gdG9fZmV0Y2hbMV0gLi4uIC0tbm90IC0tYWxsCisgKiAgJCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tc3RkaW4gLS1ub3QgLS1hbGwKICAqCisgKiAoZmVlZGluZyBhbGwgdGhlIHJlZnMgaW4gcmVmX21hcCBvbiBpdHMgc3RhbmRhcmQgaW5wdXQpCiAgKiBkb2VzIG5vdCBlcnJvciBvdXQsIHRoYXQgbWVhbnMgZXZlcnl0aGluZyByZWFjaGFibGUgZnJvbSB0aGUKICAqIHJlZnMgd2UgYXJlIGdvaW5nIHRvIGZldGNoIGV4aXN0cyBhbmQgaXMgY29ubmVjdGVkIHRvIHNvbWUgb2YKICAqIG91ciBleGlzdGluZyByZWZzLgpAQCAtNDA1LDggKzQxNiw5IEBACiB7CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcmV2bGlzdDsKIAlzdHJ1Y3QgcmVmICpyZWY7Ci0JY2hhciAqKmFyZ3Y7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsicmV2LWxpc3QiLAorCQkiLS1xdWlldCIsICItLW9iamVjdHMiLCAiLS1zdGRpbiIsICItLW5vdCIsICItLWFsbCIsIE5VTEx9OwogCiAJLyoKIAkgKiBJZiB3ZSBhcmUgZGVlcGVuaW5nIGEgc2hhbGxvdyBjbG9uZSB3ZSBhbHJlYWR5IGhhdmUgdGhlc2UKQEAgLTQxOCwzNCArNDMwLDQ2IEBACiAJaWYgKGRlcHRoKQogCQlyZXR1cm4gLTE7CiAKLQlmb3IgKGkgPSAwLCByZWYgPSByZWZfbWFwOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKLQkJaSsrOwotCWlmICghaSkKKwlpZiAoIXJlZl9tYXApCiAJCXJldHVybiAwOwogCi0JYXJndiA9IHhtYWxsb2Moc2l6ZW9mKCphcmd2KSAqIChpICsgNikpOwotCWkgPSAwOwotCWFyZ3ZbaSsrXSA9IHhzdHJkdXAoInJldi1saXN0Iik7Ci0JYXJndltpKytdID0geHN0cmR1cCgiLS1xdWlldCIpOwotCWFyZ3ZbaSsrXSA9IHhzdHJkdXAoIi0tb2JqZWN0cyIpOwotCWZvciAocmVmID0gcmVmX21hcDsgcmVmOyByZWYgPSByZWYtPm5leHQpCi0JCWFyZ3ZbaSsrXSA9IHhzdHJkdXAoc2hhMV90b19oZXgocmVmLT5vbGRfc2hhMSkpOwotCWFyZ3ZbaSsrXSA9IHhzdHJkdXAoIi0tbm90Iik7Ci0JYXJndltpKytdID0geHN0cmR1cCgiLS1hbGwiKTsKLQlhcmd2W2krK10gPSBOVUxMOwotCiAJbWVtc2V0KCZyZXZsaXN0LCAwLCBzaXplb2YocmV2bGlzdCkpOwotCXJldmxpc3QuYXJndiA9IChjb25zdCBjaGFyKiopYXJndjsKKwlyZXZsaXN0LmFyZ3YgPSBhcmd2OwogCXJldmxpc3QuZ2l0X2NtZCA9IDE7Ci0JcmV2bGlzdC5ub19zdGRpbiA9IDE7CiAJcmV2bGlzdC5ub19zdGRvdXQgPSAxOwogCXJldmxpc3Qubm9fc3RkZXJyID0gMTsKLQllcnIgPSBydW5fY29tbWFuZCgmcmV2bGlzdCk7CisJcmV2bGlzdC5pbiA9IC0xOwogCi0JZm9yIChpID0gMDsgYXJndltpXTsgaSsrKQotCQlmcmVlKGFyZ3ZbaV0pOwotCWZyZWUoYXJndik7Ci0JcmV0dXJuIGVycjsKKwllcnIgPSBzdGFydF9jb21tYW5kKCZyZXZsaXN0KTsKKwlpZiAoZXJyKSB7CisJCWVycm9yKCJjb3VsZCBub3QgcnVuIHJldi1saXN0Iik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyoKKwkgKiBJZiByZXYtbGlzdCAtLXN0ZGluIGVuY291bnRlcnMgYW4gdW5rbm93biBjb21taXQsIGl0IHRlcm1pbmF0ZXMsCisJICogd2hpY2ggd2lsbCBjYXVzZSBTSUdQSVBFIGluIHRoZSB3cml0ZSBsb29wIGJlbG93LgorCSAqLworCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgU0lHX0lHTik7CisKKwlmb3IgKHJlZiA9IHJlZl9tYXA7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmICh3cml0ZV9pbl9mdWxsKHJldmxpc3QuaW4sIHNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTEpLCA0MCkgPCAwIHx8CisJCSAgICB3cml0ZV9pbl9mdWxsKHJldmxpc3QuaW4sICJcbiIsIDEpIDwgMCkgeworCQkJaWYgKGVycm5vICE9IEVQSVBFICYmIGVycm5vICE9IEVJTlZBTCkKKwkJCQllcnJvcigiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQllcnIgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGNsb3NlKHJldmxpc3QuaW4pKSB7CisJCWVycm9yKCJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbjogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQllcnIgPSAtMTsKKwl9CisKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisKKwlyZXR1cm4gZmluaXNoX2NvbW1hbmQoJnJldmxpc3QpIHx8IGVycjsKIH0KIAogc3RhdGljIGludCBmZXRjaF9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmX21hcCkKQEAgLTU0Myw3ICs1NjcsOCBAQAogCWZvciAoOyByZWZfbWFwOyByZWZfbWFwID0gcmVmX21hcC0+bmV4dCkKIAkJaWYgKHJlZl9tYXAtPnBlZXJfcmVmICYmICFzdHJjbXAoY3VycmVudF9icmFuY2gtPnJlZm5hbWUsCiAJCQkJCXJlZl9tYXAtPnBlZXJfcmVmLT5uYW1lKSkKLQkJCWRpZSgiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCIpOworCQkJZGllKCJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzICIKKwkJCSAgICAib2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIsIGN1cnJlbnRfYnJhbmNoLT5yZWZuYW1lKTsKIH0KIAogc3RhdGljIGludCBkb19mZXRjaChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCkBAIC02MDcsNyArNjMyLDcgQEAKIHsKIAlpbnQgciA9IHRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgbmFtZSwgdmFsdWUpOwogCWlmIChyIDwgMCkKLQkJZGllKCJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzXG4iLAorCQlkaWUoIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiLAogCQkJbmFtZSwgdmFsdWUsIHRyYW5zcG9ydC0+dXJsKTsKIAlpZiAociA+IDApCiAJCXdhcm5pbmcoIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIsCkBAIC02MjcsNyArNjUyLDcgQEAKIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQogCQlzdHJidWZfYWRkZigmZGVmYXVsdF9ybGEsICIgJXMiLCBhcmd2W2ldKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LAogCQkJICAgICBidWlsdGluX2ZldGNoX29wdGlvbnMsIGJ1aWx0aW5fZmV0Y2hfdXNhZ2UsIDApOwogCiAJaWYgKGFyZ2MgPT0gMCkKQEAgLTYzNSw2ICs2NjAsOSBAQAogCWVsc2UKIAkJcmVtb3RlID0gcmVtb3RlX2dldChhcmd2WzBdKTsKIAorCWlmICghcmVtb3RlKQorCQlkaWUoIldoZXJlIGRvIHlvdSB3YW50IHRvIGZldGNoIGZyb20gdG9kYXk/Iik7CisKIAl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgcmVtb3RlLT51cmxbMF0pOwogCWlmICh2ZXJib3NpdHkgPj0gMikKIAkJdHJhbnNwb3J0LT52ZXJib3NlID0gMTsKQEAgLTY0Nyw5ICs2NzUsNiBAQAogCWlmIChkZXB0aCkKIAkJc2V0X29wdGlvbihUUkFOU19PUFRfREVQVEgsIGRlcHRoKTsKIAotCWlmICghdHJhbnNwb3J0LT51cmwpCi0JCWRpZSgiV2hlcmUgZG8geW91IHdhbnQgdG8gZmV0Y2ggZnJvbSB0b2RheT8iKTsKLQogCWlmIChhcmdjID4gMSkgewogCQlpbnQgaiA9IDA7CiAJCXJlZnMgPSB4Y2FsbG9jKGFyZ2MgKyAxLCBzaXplb2YoY29uc3QgY2hhciAqKSk7CkBAIC02NzIsNyArNjk3LDcgQEAKIAkJcmVmX25yID0gajsKIAl9CiAKLQlzaWduYWwoU0lHSU5ULCB1bmxvY2tfcGFja19vbl9zaWduYWwpOworCXNpZ2NoYWluX3B1c2hfY29tbW9uKHVubG9ja19wYWNrX29uX3NpZ25hbCk7CiAJYXRleGl0KHVubG9ja19wYWNrKTsKIAlleGl0X2NvZGUgPSBkb19mZXRjaCh0cmFuc3BvcnQsCiAJCQlwYXJzZV9mZXRjaF9yZWZzcGVjKHJlZl9uciwgcmVmcyksIHJlZl9ucik7CmRpZmYgLS1naXQgYS9idWlsdGluLWZtdC1tZXJnZS1tc2cuYyBiL2J1aWx0aW4tZm10LW1lcmdlLW1zZy5jCmluZGV4IGRmMThmNDAuLjlkNTI0MDAgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZm10LW1lcmdlLW1zZy5jCisrKyBiL2J1aWx0aW4tZm10LW1lcmdlLW1zZy5jCkBAIC0yNTYsOCArMjU2LDcgQEAKIAogaW50IGZtdF9tZXJnZV9tc2coaW50IG1lcmdlX3N1bW1hcnksIHN0cnVjdCBzdHJidWYgKmluLCBzdHJ1Y3Qgc3RyYnVmICpvdXQpIHsKIAlpbnQgbGltaXQgPSAyMCwgaSA9IDAsIHBvcyA9IDA7Ci0JY2hhciBsaW5lWzEwMjRdOwotCWNoYXIgKnAgPSBsaW5lLCAqc2VwID0gIiI7CisJY2hhciAqc2VwID0gIiI7CiAJdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOwogCWNvbnN0IGNoYXIgKmN1cnJlbnRfYnJhbmNoOwogCkBAIC0yNzEsOSArMjcwLDggQEAKIAkvKiBnZXQgYSBsaW5lICovCiAJd2hpbGUgKHBvcyA8IGluLT5sZW4pIHsKIAkJaW50IGxlbjsKLQkJY2hhciAqbmV3bGluZTsKKwkJY2hhciAqbmV3bGluZSwgKnAgPSBpbi0+YnVmICsgcG9zOwogCi0JCXAgPSBpbi0+YnVmICsgcG9zOwogCQluZXdsaW5lID0gc3RyY2hyKHAsICdcbicpOwogCQlsZW4gPSBuZXdsaW5lID8gbmV3bGluZSAtIHAgOiBzdHJsZW4ocCk7CiAJCXBvcyArPSBsZW4gKyAhIW5ld2xpbmU7CkBAIC0zNTMsNyArMzUxLDcgQEAKIAlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKIAkJT1BUX0JPT0xFQU4oMCwgImxvZyIsICAgICAmbWVyZ2Vfc3VtbWFyeSwgInBvcHVsYXRlIGxvZyB3aXRoIHRoZSBzaG9ydGxvZyIpLAogCQlPUFRfQk9PTEVBTigwLCAic3VtbWFyeSIsICZtZXJnZV9zdW1tYXJ5LCAiYWxpYXMgZm9yIC0tbG9nIiksCi0JCU9QVF9TVFJJTkcoJ0YnLCAiZmlsZSIsICAgJmlucGF0aCwgImZpbGUiLCAiZmlsZSB0byByZWFkIGZyb20iKSwKKwkJT1BUX0ZJTEVOQU1FKCdGJywgImZpbGUiLCAmaW5wYXRoLCAiZmlsZSB0byByZWFkIGZyb20iKSwKIAkJT1BUX0VORCgpCiAJfTsKIApAQCAtMzYyLDE5ICszNjAsMTkgQEAKIAlpbnQgcmV0OwogCiAJZ2l0X2NvbmZpZyhmbXRfbWVyZ2VfbXNnX2NvbmZpZywgTlVMTCk7Ci0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgZm10X21lcmdlX21zZ191c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBmbXRfbWVyZ2VfbXNnX3VzYWdlLAorCQkJICAgICAwKTsKIAlpZiAoYXJnYyA+IDApCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhmbXRfbWVyZ2VfbXNnX3VzYWdlLCBvcHRpb25zKTsKIAogCWlmIChpbnBhdGggJiYgc3RyY21wKGlucGF0aCwgIi0iKSkgewogCQlpbiA9IGZvcGVuKGlucGF0aCwgInIiKTsKIAkJaWYgKCFpbikKLQkJCWRpZSgiY2Fubm90IG9wZW4gJXMiLCBpbnBhdGgpOworCQkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiAnJXMnIiwgaW5wYXRoKTsKIAl9CiAKIAlpZiAoc3RyYnVmX3JlYWQoJmlucHV0LCBmaWxlbm8oaW4pLCAwKSA8IDApCi0JCWRpZSgiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0KKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlIik7CiAJcmV0ID0gZm10X21lcmdlX21zZyhtZXJnZV9zdW1tYXJ5LCAmaW5wdXQsICZvdXRwdXQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9idWlsdGluLWZvci1lYWNoLXJlZi5jIGIvYnVpbHRpbi1mb3ItZWFjaC1yZWYuYwppbmRleCBlNDZiN2FkLi5kN2NjOGNhIDEwMDY0NAotLS0gYS9idWlsdGluLWZvci1lYWNoLXJlZi5jCisrKyBiL2J1aWx0aW4tZm9yLWVhY2gtcmVmLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSAiYmxvYi5oIgogI2luY2x1ZGUgInF1b3RlLmgiCiAjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgogCiAvKiBRdW90aW5nIHN0eWxlcyAqLwogI2RlZmluZSBRVU9URV9OT05FIDAKQEAgLTY2LDYgKzY3LDcgQEAKIAl7ICJzdWJqZWN0IiB9LAogCXsgImJvZHkiIH0sCiAJeyAiY29udGVudHMiIH0sCisJeyAidXBzdHJlYW0iIH0sCiB9OwogCiAvKgpAQCAtMzM3LDggKzMzOSwxMSBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmNvcHlfZW1haWwoY29uc3QgY2hhciAqYnVmKQogewogCWNvbnN0IGNoYXIgKmVtYWlsID0gc3RyY2hyKGJ1ZiwgJzwnKTsKLQljb25zdCBjaGFyICplb2VtYWlsID0gc3RyY2hyKGVtYWlsLCAnPicpOwotCWlmICghZW1haWwgfHwgIWVvZW1haWwpCisJY29uc3QgY2hhciAqZW9lbWFpbDsKKwlpZiAoIWVtYWlsKQorCQlyZXR1cm4gIiI7CisJZW9lbWFpbCA9IHN0cmNocihlbWFpbCwgJz4nKTsKKwlpZiAoIWVvZW1haWwpCiAJCXJldHVybiAiIjsKIAlyZXR1cm4geG1lbWR1cHooZW1haWwsIGVvZW1haWwgKyAxIC0gZW1haWwpOwogfQpAQCAtNTQ0LDEwOSArNTQ5LDYgQEAKIH0KIAogLyoKLSAqIGdlbmVyYXRlIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBzY2FuZiBmcm9tIGEgcmVmX3Jldl9wYXJzZV9ydWxlcwotICogcnVsZSwgdGhhdCBpcyByZXBsYWNlIHRoZSAiJS4qcyIgc3BlYyB3aXRoIGEgIiVzIiBzcGVjCi0gKi8KLXN0YXRpYyB2b2lkIGdlbl9zY2FuZl9mbXQoY2hhciAqc2NhbmZfZm10LCBjb25zdCBjaGFyICpydWxlKQotewotCWNoYXIgKnNwZWM7Ci0KLQlzcGVjID0gc3Ryc3RyKHJ1bGUsICIlLipzIik7Ci0JaWYgKCFzcGVjIHx8IHN0cnN0cihzcGVjICsgNCwgIiUuKnMiKSkKLQkJZGllKCJpbnZhbGlkIHJ1bGUgaW4gcmVmX3Jldl9wYXJzZV9ydWxlczogJXMiLCBydWxlKTsKLQotCS8qIGNvcHkgYWxsIHVudGlsIHNwZWMgKi8KLQlzdHJuY3B5KHNjYW5mX2ZtdCwgcnVsZSwgc3BlYyAtIHJ1bGUpOwotCXNjYW5mX2ZtdFtzcGVjIC0gcnVsZV0gPSAnXDAnOwotCS8qIGNvcHkgbmV3IHNwZWMgKi8KLQlzdHJjYXQoc2NhbmZfZm10LCAiJXMiKTsKLQkvKiBjb3B5IHJlbWFpbmluZyBydWxlICovCi0Jc3RyY2F0KHNjYW5mX2ZtdCwgc3BlYyArIDQpOwotCi0JcmV0dXJuOwotfQotCi0vKgotICogU2hvcnRlbiB0aGUgcmVmbmFtZSB0byBhbiBub24tYW1iaWd1b3VzIGZvcm0KLSAqLwotc3RhdGljIGNoYXIgKmdldF9zaG9ydF9yZWYoc3RydWN0IHJlZmluZm8gKnJlZikKLXsKLQlpbnQgaTsKLQlzdGF0aWMgY2hhciAqKnNjYW5mX2ZtdHM7Ci0Jc3RhdGljIGludCBucl9ydWxlczsKLQljaGFyICpzaG9ydF9uYW1lOwotCi0JLyogcHJlIGdlbmVyYXRlIHNjYW5mIGZvcm1hdHMgZnJvbSByZWZfcmV2X3BhcnNlX3J1bGVzW10gKi8KLQlpZiAoIW5yX3J1bGVzKSB7Ci0JCXNpemVfdCB0b3RhbF9sZW4gPSAwOwotCi0JCS8qIHRoZSBydWxlIGxpc3QgaXMgTlVMTCB0ZXJtaW5hdGVkLCBjb3VudCB0aGVtIGZpcnN0ICovCi0JCWZvciAoOyByZWZfcmV2X3BhcnNlX3J1bGVzW25yX3J1bGVzXTsgbnJfcnVsZXMrKykKLQkJCS8qIG5vICsxIGJlY2F1c2Ugc3RybGVuKCIlcyIpIDwgc3RybGVuKCIlLipzIikgKi8KLQkJCXRvdGFsX2xlbiArPSBzdHJsZW4ocmVmX3Jldl9wYXJzZV9ydWxlc1tucl9ydWxlc10pOwotCi0JCXNjYW5mX2ZtdHMgPSB4bWFsbG9jKG5yX3J1bGVzICogc2l6ZW9mKGNoYXIgKikgKyB0b3RhbF9sZW4pOwotCi0JCXRvdGFsX2xlbiA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBucl9ydWxlczsgaSsrKSB7Ci0JCQlzY2FuZl9mbXRzW2ldID0gKGNoYXIgKikmc2NhbmZfZm10c1tucl9ydWxlc10KLQkJCQkJKyB0b3RhbF9sZW47Ci0JCQlnZW5fc2NhbmZfZm10KHNjYW5mX2ZtdHNbaV0sIHJlZl9yZXZfcGFyc2VfcnVsZXNbaV0pOwotCQkJdG90YWxfbGVuICs9IHN0cmxlbihyZWZfcmV2X3BhcnNlX3J1bGVzW2ldKTsKLQkJfQotCX0KLQotCS8qIGJhaWwgb3V0IGlmIHRoZXJlIGFyZSBubyBydWxlcyAqLwotCWlmICghbnJfcnVsZXMpCi0JCXJldHVybiByZWYtPnJlZm5hbWU7Ci0KLQkvKiBidWZmZXIgZm9yIHNjYW5mIHJlc3VsdCwgYXQgbW9zdCByZWYtPnJlZm5hbWUgbXVzdCBmaXQgKi8KLQlzaG9ydF9uYW1lID0geHN0cmR1cChyZWYtPnJlZm5hbWUpOwotCi0JLyogc2tpcCBmaXJzdCBydWxlLCBpdCB3aWxsIGFsd2F5cyBtYXRjaCAqLwotCWZvciAoaSA9IG5yX3J1bGVzIC0gMTsgaSA+IDAgOyAtLWkpIHsKLQkJaW50IGo7Ci0JCWludCBzaG9ydF9uYW1lX2xlbjsKLQotCQlpZiAoMSAhPSBzc2NhbmYocmVmLT5yZWZuYW1lLCBzY2FuZl9mbXRzW2ldLCBzaG9ydF9uYW1lKSkKLQkJCWNvbnRpbnVlOwotCi0JCXNob3J0X25hbWVfbGVuID0gc3RybGVuKHNob3J0X25hbWUpOwotCi0JCS8qCi0JCSAqIGNoZWNrIGlmIHRoZSBzaG9ydCBuYW1lIHJlc29sdmVzIHRvIGEgdmFsaWQgcmVmLAotCQkgKiBidXQgdXNlIG9ubHkgcnVsZXMgcHJpb3IgdG8gdGhlIG1hdGNoZWQgb25lCi0JCSAqLwotCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0JCQljb25zdCBjaGFyICpydWxlID0gcmVmX3Jldl9wYXJzZV9ydWxlc1tqXTsKLQkJCXVuc2lnbmVkIGNoYXIgc2hvcnRfb2JqZWN0bmFtZVsyMF07Ci0JCQljaGFyIHJlZm5hbWVbUEFUSF9NQVhdOwotCi0JCQkvKgotCQkJICogdGhlIHNob3J0IG5hbWUgaXMgYW1iaWd1b3VzLCBpZiBpdCByZXNvbHZlcwotCQkJICogKHdpdGggdGhpcyBwcmV2aW91cyBydWxlKSB0byBhIHZhbGlkIHJlZgotCQkJICogcmVhZF9yZWYoKSByZXR1cm5zIDAgb24gc3VjY2VzcwotCQkJICovCi0JCQlta3NucGF0aChyZWZuYW1lLCBzaXplb2YocmVmbmFtZSksCi0JCQkJIHJ1bGUsIHNob3J0X25hbWVfbGVuLCBzaG9ydF9uYW1lKTsKLQkJCWlmICghcmVhZF9yZWYocmVmbmFtZSwgc2hvcnRfb2JqZWN0bmFtZSkpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQkvKgotCQkgKiBzaG9ydCBuYW1lIGlzIG5vbi1hbWJpZ3VvdXMgaWYgYWxsIHByZXZpb3VzIHJ1bGVzCi0JCSAqIGhhdmVuJ3QgcmVzb2x2ZWQgdG8gYSB2YWxpZCByZWYKLQkJICovCi0JCWlmIChqID09IGkpCi0JCQlyZXR1cm4gc2hvcnRfbmFtZTsKLQl9Ci0KLQlmcmVlKHNob3J0X25hbWUpOwotCXJldHVybiByZWYtPnJlZm5hbWU7Ci19Ci0KLQotLyoKICAqIFBhcnNlIHRoZSBvYmplY3QgcmVmZXJyZWQgYnkgcmVmLCBhbmQgZ3JhYiBuZWVkZWQgdmFsdWUuCiAgKi8KIHN0YXRpYyB2b2lkIHBvcHVsYXRlX3ZhbHVlKHN0cnVjdCByZWZpbmZvICpyZWYpCkBAIC02NTksNiArNTYxLDY2IEBACiAKIAlyZWYtPnZhbHVlID0geGNhbGxvYyhzaXplb2Yoc3RydWN0IGF0b21fdmFsdWUpLCB1c2VkX2F0b21fY250KTsKIAorCS8qIEZpbGwgaW4gc3BlY2lhbHMgZmlyc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdXNlZF9hdG9tX2NudDsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSB1c2VkX2F0b21baV07CisJCXN0cnVjdCBhdG9tX3ZhbHVlICp2ID0gJnJlZi0+dmFsdWVbaV07CisJCWludCBkZXJlZiA9IDA7CisJCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisJCWNvbnN0IGNoYXIgKmZvcm1hdHA7CisKKwkJaWYgKCpuYW1lID09ICcqJykgeworCQkJZGVyZWYgPSAxOworCQkJbmFtZSsrOworCQl9CisKKwkJaWYgKCFwcmVmaXhjbXAobmFtZSwgInJlZm5hbWUiKSkKKwkJCXJlZm5hbWUgPSByZWYtPnJlZm5hbWU7CisJCWVsc2UgaWYoIXByZWZpeGNtcChuYW1lLCAidXBzdHJlYW0iKSkgeworCQkJc3RydWN0IGJyYW5jaCAqYnJhbmNoOworCQkJLyogb25seSBsb2NhbCBicmFuY2hlcyBtYXkgaGF2ZSBhbiB1cHN0cmVhbSAqLworCQkJaWYgKHByZWZpeGNtcChyZWYtPnJlZm5hbWUsICJyZWZzL2hlYWRzLyIpKQorCQkJCWNvbnRpbnVlOworCQkJYnJhbmNoID0gYnJhbmNoX2dldChyZWYtPnJlZm5hbWUgKyAxMSk7CisKKwkJCWlmICghYnJhbmNoIHx8ICFicmFuY2gtPm1lcmdlIHx8ICFicmFuY2gtPm1lcmdlWzBdIHx8CisJCQkgICAgIWJyYW5jaC0+bWVyZ2VbMF0tPmRzdCkKKwkJCQljb250aW51ZTsKKwkJCXJlZm5hbWUgPSBicmFuY2gtPm1lcmdlWzBdLT5kc3Q7CisJCX0KKwkJZWxzZQorCQkJY29udGludWU7CisKKwkJZm9ybWF0cCA9IHN0cmNocihuYW1lLCAnOicpOworCQkvKiBsb29rIGZvciAic2hvcnQiIHJlZm5hbWUgZm9ybWF0ICovCisJCWlmIChmb3JtYXRwKSB7CisJCQlmb3JtYXRwKys7CisJCQlpZiAoIXN0cmNtcChmb3JtYXRwLCAic2hvcnQiKSkKKwkJCQlyZWZuYW1lID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYocmVmbmFtZSwKKwkJCQkJCSAgICAgIHdhcm5fYW1iaWd1b3VzX3JlZnMpOworCQkJZWxzZQorCQkJCWRpZSgidW5rbm93biAlLipzIGZvcm1hdCAlcyIsCisJCQkJICAgIChpbnQpKGZvcm1hdHAgLSBuYW1lKSwgbmFtZSwgZm9ybWF0cCk7CisJCX0KKworCQlpZiAoIWRlcmVmKQorCQkJdi0+cyA9IHJlZm5hbWU7CisJCWVsc2UgeworCQkJaW50IGxlbiA9IHN0cmxlbihyZWZuYW1lKTsKKwkJCWNoYXIgKnMgPSB4bWFsbG9jKGxlbiArIDQpOworCQkJc3ByaW50ZihzLCAiJXNee30iLCByZWZuYW1lKTsKKwkJCXYtPnMgPSBzOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IHVzZWRfYXRvbV9jbnQ7IGkrKykgeworCQlzdHJ1Y3QgYXRvbV92YWx1ZSAqdiA9ICZyZWYtPnZhbHVlW2ldOworCQlpZiAodi0+cyA9PSBOVUxMKQorCQkJZ290byBuZWVkX29iajsKKwl9CisJcmV0dXJuOworCisgbmVlZF9vYmo6CiAJYnVmID0gZ2V0X29iaihyZWYtPm9iamVjdG5hbWUsICZvYmosICZzaXplLCAmZWF0ZW4pOwogCWlmICghYnVmKQogCQlkaWUoIm1pc3Npbmcgb2JqZWN0ICVzIGZvciAlcyIsCkBAIC02NjcsNDAgKzYyOSw2IEBACiAJCWRpZSgicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIiwKIAkJICAgIHNoYTFfdG9faGV4KHJlZi0+b2JqZWN0bmFtZSksIHJlZi0+cmVmbmFtZSk7CiAKLQkvKiBGaWxsIGluIHNwZWNpYWxzIGZpcnN0ICovCi0JZm9yIChpID0gMDsgaSA8IHVzZWRfYXRvbV9jbnQ7IGkrKykgewotCQljb25zdCBjaGFyICpuYW1lID0gdXNlZF9hdG9tW2ldOwotCQlzdHJ1Y3QgYXRvbV92YWx1ZSAqdiA9ICZyZWYtPnZhbHVlW2ldOwotCQlpbnQgZGVyZWYgPSAwOwotCQlpZiAoKm5hbWUgPT0gJyonKSB7Ci0JCQlkZXJlZiA9IDE7Ci0JCQluYW1lKys7Ci0JCX0KLQkJaWYgKCFwcmVmaXhjbXAobmFtZSwgInJlZm5hbWUiKSkgewotCQkJY29uc3QgY2hhciAqZm9ybWF0cCA9IHN0cmNocihuYW1lLCAnOicpOwotCQkJY29uc3QgY2hhciAqcmVmbmFtZSA9IHJlZi0+cmVmbmFtZTsKLQotCQkJLyogbG9vayBmb3IgInNob3J0IiByZWZuYW1lIGZvcm1hdCAqLwotCQkJaWYgKGZvcm1hdHApIHsKLQkJCQlmb3JtYXRwKys7Ci0JCQkJaWYgKCFzdHJjbXAoZm9ybWF0cCwgInNob3J0IikpCi0JCQkJCXJlZm5hbWUgPSBnZXRfc2hvcnRfcmVmKHJlZik7Ci0JCQkJZWxzZQotCQkJCQlkaWUoInVua25vd24gcmVmbmFtZSBmb3JtYXQgJXMiLAotCQkJCQkgICAgZm9ybWF0cCk7Ci0JCQl9Ci0KLQkJCWlmICghZGVyZWYpCi0JCQkJdi0+cyA9IHJlZm5hbWU7Ci0JCQllbHNlIHsKLQkJCQlpbnQgbGVuID0gc3RybGVuKHJlZm5hbWUpOwotCQkJCWNoYXIgKnMgPSB4bWFsbG9jKGxlbiArIDQpOwotCQkJCXNwcmludGYocywgIiVzXnt9IiwgcmVmbmFtZSk7Ci0JCQkJdi0+cyA9IHM7Ci0JCQl9Ci0JCX0KLQl9Ci0KIAlncmFiX3ZhbHVlcyhyZWYtPnZhbHVlLCAwLCBvYmosIGJ1Ziwgc2l6ZSk7CiAJaWYgKCFlYXRlbikKIAkJZnJlZShidWYpOwpAQCAtOTQzLDcgKzg3MSw2IEBACiAJCXJldHVybiAtMTsKIAogCSpzb3J0X3RhaWwgPSBzID0geGNhbGxvYygxLCBzaXplb2YoKnMpKTsKLQlzb3J0X3RhaWwgPSAmcy0+bmV4dDsKIAogCWlmICgqYXJnID09ICctJykgewogCQlzLT5yZXZlcnNlID0gMTsKQEAgLTk4Niw3ICs5MTMsNyBAQAogCQlPUFRfRU5EKCksCiAJfTsKIAotCXBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0cywgZm9yX2VhY2hfcmVmX3VzYWdlLCAwKTsKKwlwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgZm9yX2VhY2hfcmVmX3VzYWdlLCAwKTsKIAlpZiAobWF4Y291bnQgPCAwKSB7CiAJCWVycm9yKCJpbnZhbGlkIC0tY291bnQgYXJndW1lbnQ6IGAlZCciLCBtYXhjb3VudCk7CiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhmb3JfZWFjaF9yZWZfdXNhZ2UsIG9wdHMpOwpAQCAtMTAwMiw5ICs5MjksMTIgQEAKIAkJc29ydCA9IGRlZmF1bHRfc29ydCgpOwogCXNvcnRfYXRvbV9saW1pdCA9IHVzZWRfYXRvbV9jbnQ7CiAKKwkvKiBmb3Igd2Fybl9hbWJpZ3VvdXNfcmVmcyAqLworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwogCW1lbXNldCgmY2JkYXRhLCAwLCBzaXplb2YoY2JkYXRhKSk7CiAJY2JkYXRhLmdyYWJfcGF0dGVybiA9IGFyZ3Y7Ci0JZm9yX2VhY2hfcmVmKGdyYWJfc2luZ2xlX3JlZiwgJmNiZGF0YSk7CisJZm9yX2VhY2hfcmF3cmVmKGdyYWJfc2luZ2xlX3JlZiwgJmNiZGF0YSk7CiAJcmVmcyA9IGNiZGF0YS5ncmFiX2FycmF5OwogCW51bV9yZWZzID0gY2JkYXRhLmdyYWJfY250OwogCmRpZmYgLS1naXQgYS9idWlsdGluLWZzY2suYyBiL2J1aWx0aW4tZnNjay5jCmluZGV4IGE2MGQxOTkuLmIzZDM4ZmEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZnNjay5jCisrKyBiL2J1aWx0aW4tZnNjay5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAidHJlZS13YWxrLmgiCiAjaW5jbHVkZSAiZnNjay5oIgogI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaXIuaCIKIAogI2RlZmluZSBSRUFDSEFCTEUgMHgwMDAxCiAjZGVmaW5lIFNFRU4gICAgICAweDAwMDIKQEAgLTIyLDYgKzIzLDcgQEAKIHN0YXRpYyBpbnQgY2hlY2tfc3RyaWN0Owogc3RhdGljIGludCBrZWVwX2NhY2hlX29iamVjdHM7CiBzdGF0aWMgdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOworc3RhdGljIGNvbnN0IGNoYXIgKmhlYWRfcG9pbnRzX2F0Owogc3RhdGljIGludCBlcnJvcnNfZm91bmQ7CiBzdGF0aWMgaW50IHdyaXRlX2xvc3RfYW5kX2ZvdW5kOwogc3RhdGljIGludCB2ZXJib3NlOwpAQCAtMTAyLDcgKzEwNCw3IEBACiAKIHN0YXRpYyB2b2lkIG1hcmtfb2JqZWN0X3JlYWNoYWJsZShzdHJ1Y3Qgb2JqZWN0ICpvYmopCiB7Ci0JbWFya19vYmplY3Qob2JqLCBPQkpfQU5ZLCAwKTsKKwltYXJrX29iamVjdChvYmosIE9CSl9BTlksIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IHRyYXZlcnNlX29uZV9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBzdHJ1Y3Qgb2JqZWN0ICpwYXJlbnQpCkBAIC0yMTUsNyArMjE3LDcgQEAKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlpZiAoIShmID0gZm9wZW4oZmlsZW5hbWUsICJ3IikpKQotCQkJCWRpZSgiQ291bGQgbm90IG9wZW4gJXMiLCBmaWxlbmFtZSk7CisJCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiAnJXMnIiwgZmlsZW5hbWUpOwogCQkJaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikgewogCQkJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKIAkJCQl1bnNpZ25lZCBsb25nIHNpemU7CkBAIC0yMjMsMTUgKzIyNSwxNSBAQAogCQkJCQkJJnR5cGUsICZzaXplKTsKIAkJCQlpZiAoYnVmKSB7CiAJCQkJCWlmIChmd3JpdGUoYnVmLCBzaXplLCAxLCBmKSAhPSAxKQotCQkJCQkJZGllKCJDb3VsZCBub3Qgd3JpdGUgJXM6ICVzIiwKLQkJCQkJCSAgICBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQkJCWRpZV9lcnJubygiQ291bGQgbm90IHdyaXRlICclcyciLAorCQkJCQkJCSAgZmlsZW5hbWUpOwogCQkJCQlmcmVlKGJ1Zik7CiAJCQkJfQogCQkJfSBlbHNlCiAJCQkJZnByaW50ZihmLCAiJXNcbiIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOwogCQkJaWYgKGZjbG9zZShmKSkKLQkJCQlkaWUoIkNvdWxkIG5vdCBmaW5pc2ggJXM6ICVzIiwKLQkJCQkgICAgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJDb3VsZCBub3QgZmluaXNoICclcyciLAorCQkJCQkgIGZpbGVuYW1lKTsKIAkJfQogCQlyZXR1cm47CiAJfQpAQCAtMjkwLDcgKzI5Miw3IEBACiAJCWZwcmludGYoc3RkZXJyLCAiQ2hlY2tpbmcgJXMgJXNcbiIsCiAJCQl0eXBlbmFtZShvYmotPnR5cGUpLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKIAotCWlmIChmc2NrX3dhbGsob2JqLCBtYXJrX3VzZWQsIDApKQorCWlmIChmc2NrX3dhbGsob2JqLCBtYXJrX3VzZWQsIE5VTEwpKQogCQlvYmplcnJvcihvYmosICJicm9rZW4gbGlua3MiKTsKIAlpZiAoZnNja19vYmplY3Qob2JqLCBjaGVja19zdHJpY3QsIGZzY2tfZXJyb3JfZnVuYykpCiAJCXJldHVybiAtMTsKQEAgLTM5NSwxOSArMzk3LDEyIEBACiAJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgewogCQljaGFyIG5hbWVbMTAwXTsKIAkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKLQkJaW50IGxlbiA9IHN0cmxlbihkZS0+ZF9uYW1lKTsKIAotCQlzd2l0Y2ggKGxlbikgewotCQljYXNlIDI6Ci0JCQlpZiAoZGUtPmRfbmFtZVsxXSAhPSAnLicpCi0JCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWlmIChkZS0+ZF9uYW1lWzBdICE9ICcuJykKLQkJCQlicmVhazsKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZGUtPmRfbmFtZSkpCiAJCQljb250aW51ZTsKLQkJY2FzZSAzODoKKwkJaWYgKHN0cmxlbihkZS0+ZF9uYW1lKSA9PSAzOCkgewogCQkJc3ByaW50ZihuYW1lLCAiJTAyeCIsIGkpOwotCQkJbWVtY3B5KG5hbWUrMiwgZGUtPmRfbmFtZSwgbGVuKzEpOworCQkJbWVtY3B5KG5hbWUrMiwgZGUtPmRfbmFtZSwgMzkpOwogCQkJaWYgKGdldF9zaGExX2hleChuYW1lLCBzaGExKSA8IDApCiAJCQkJYnJlYWs7CiAJCQlhZGRfc2hhMV9saXN0KHNoYTEsIERJUkVOVF9TT1JUX0hJTlQoZGUpKTsKQEAgLTQ3OSw2ICs0NzQsOCBAQAogCiBzdGF0aWMgdm9pZCBnZXRfZGVmYXVsdF9oZWFkcyh2b2lkKQogeworCWlmIChoZWFkX3BvaW50c19hdCAmJiAhaXNfbnVsbF9zaGExKGhlYWRfc2hhMSkpCisJCWZzY2tfaGFuZGxlX3JlZigiSEVBRCIsIGhlYWRfc2hhMSwgMCwgTlVMTCk7CiAJZm9yX2VhY2hfcmVmKGZzY2tfaGFuZGxlX3JlZiwgTlVMTCk7CiAJaWYgKGluY2x1ZGVfcmVmbG9ncykKIAkJZm9yX2VhY2hfcmVmbG9nKGZzY2tfaGFuZGxlX3JlZmxvZywgTlVMTCk7CkBAIC01MTgsMTQgKzUxNSwxMyBAQAogCiBzdGF0aWMgaW50IGZzY2tfaGVhZF9saW5rKHZvaWQpCiB7Ci0JdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAlpbnQgZmxhZzsKIAlpbnQgbnVsbF9pc19lcnJvciA9IDA7Ci0JY29uc3QgY2hhciAqaGVhZF9wb2ludHNfYXQgPSByZXNvbHZlX3JlZigiSEVBRCIsIHNoYTEsIDAsICZmbGFnKTsKIAogCWlmICh2ZXJib3NlKQogCQlmcHJpbnRmKHN0ZGVyciwgIkNoZWNraW5nIEhFQUQgbGlua1xuIik7CiAKKwloZWFkX3BvaW50c19hdCA9IHJlc29sdmVfcmVmKCJIRUFEIiwgaGVhZF9zaGExLCAwLCAmZmxhZyk7CiAJaWYgKCFoZWFkX3BvaW50c19hdCkKIAkJcmV0dXJuIGVycm9yKCJJbnZhbGlkIEhFQUQiKTsKIAlpZiAoIXN0cmNtcChoZWFkX3BvaW50c19hdCwgIkhFQUQiKSkKQEAgLTUzNCw3ICs1MzAsNyBAQAogCWVsc2UgaWYgKHByZWZpeGNtcChoZWFkX3BvaW50c19hdCwgInJlZnMvaGVhZHMvIikpCiAJCXJldHVybiBlcnJvcigiSEVBRCBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIsCiAJCQkgICAgIGhlYWRfcG9pbnRzX2F0KTsKLQlpZiAoaXNfbnVsbF9zaGExKHNoYTEpKSB7CisJaWYgKGlzX251bGxfc2hhMShoZWFkX3NoYTEpKSB7CiAJCWlmIChudWxsX2lzX2Vycm9yKQogCQkJcmV0dXJuIGVycm9yKCJIRUFEOiBkZXRhY2hlZCBIRUFEIHBvaW50cyBhdCBub3RoaW5nIik7CiAJCWZwcmludGYoc3RkZXJyLCAibm90aWNlOiBIRUFEIHBvaW50cyB0byBhbiB1bmJvcm4gYnJhbmNoICglcylcbiIsCkBAIC01OTAsMTAgKzU4NiwxMSBAQAogaW50IGNtZF9mc2NrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCWludCBpLCBoZWFkczsKKwlzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqYWx0OwogCiAJZXJyb3JzX2ZvdW5kID0gMDsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGZzY2tfb3B0cywgZnNja191c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBmc2NrX29wdHMsIGZzY2tfdXNhZ2UsIDApOwogCWlmICh3cml0ZV9sb3N0X2FuZF9mb3VuZCkgewogCQljaGVja19mdWxsID0gMTsKIAkJaW5jbHVkZV9yZWZsb2dzID0gMDsKQEAgLTYwMSwxNyArNTk4LDE5IEBACiAKIAlmc2NrX2hlYWRfbGluaygpOwogCWZzY2tfb2JqZWN0X2RpcihnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKworCXByZXBhcmVfYWx0X29kYigpOworCWZvciAoYWx0ID0gYWx0X29kYl9saXN0OyBhbHQ7IGFsdCA9IGFsdC0+bmV4dCkgeworCQljaGFyIG5hbWVidWZbUEFUSF9NQVhdOworCQlpbnQgbmFtZWxlbiA9IGFsdC0+bmFtZSAtIGFsdC0+YmFzZTsKKwkJbWVtY3B5KG5hbWVidWYsIGFsdC0+YmFzZSwgbmFtZWxlbik7CisJCW5hbWVidWZbbmFtZWxlbiAtIDFdID0gMDsKKwkJZnNja19vYmplY3RfZGlyKG5hbWVidWYpOworCX0KKwogCWlmIChjaGVja19mdWxsKSB7Ci0JCXN0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlICphbHQ7CiAJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOwotCQlwcmVwYXJlX2FsdF9vZGIoKTsKLQkJZm9yIChhbHQgPSBhbHRfb2RiX2xpc3Q7IGFsdDsgYWx0ID0gYWx0LT5uZXh0KSB7Ci0JCQljaGFyIG5hbWVidWZbUEFUSF9NQVhdOwotCQkJaW50IG5hbWVsZW4gPSBhbHQtPm5hbWUgLSBhbHQtPmJhc2U7Ci0JCQltZW1jcHkobmFtZWJ1ZiwgYWx0LT5iYXNlLCBuYW1lbGVuKTsKLQkJCW5hbWVidWZbbmFtZWxlbiAtIDFdID0gMDsKLQkJCWZzY2tfb2JqZWN0X2RpcihuYW1lYnVmKTsKLQkJfQorCiAJCXByZXBhcmVfcGFja2VkX2dpdCgpOwogCQlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkKIAkJCS8qIHZlcmlmeSBnaXZlcyBlcnJvciBtZXNzYWdlcyBpdHNlbGYgKi8KQEAgLTYzMCw4ICs2MjksOSBAQAogCWhlYWRzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CiAJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07Ci0JCWlmICghZ2V0X3NoYTEoYXJnLCBoZWFkX3NoYTEpKSB7Ci0JCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KGhlYWRfc2hhMSk7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCWlmICghZ2V0X3NoYTEoYXJnLCBzaGExKSkgeworCQkJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChzaGExKTsKIAogCQkJLyogRXJyb3IgaXMgcHJpbnRlZCBieSBsb29rdXBfb2JqZWN0KCkuICovCiAJCQlpZiAoIW9iaikKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZ2MuYyBiL2J1aWx0aW4tZ2MuYwppbmRleCBmOGVhZTRhLi43ZDNlOWNjIDEwMDY0NAotLS0gYS9idWlsdGluLWdjLmMKKysrIGIvYnVpbHRpbi1nYy5jCkBAIC0yMyw3ICsyMyw3IEBACiB9OwogCiBzdGF0aWMgaW50IHBhY2tfcmVmcyA9IDE7Ci1zdGF0aWMgaW50IGFnZ3Jlc3NpdmVfd2luZG93ID0gLTE7CitzdGF0aWMgaW50IGFnZ3Jlc3NpdmVfd2luZG93ID0gMjUwOwogc3RhdGljIGludCBnY19hdXRvX3RocmVzaG9sZCA9IDY3MDA7CiBzdGF0aWMgaW50IGdjX2F1dG9fcGFja19saW1pdCA9IDUwOwogc3RhdGljIGNvbnN0IGNoYXIgKnBydW5lX2V4cGlyZSA9ICIyLndlZWtzLmFnbyI7CkBAIC0xNDQsMzQgKzE0NCw2IEBACiAJcmV0dXJuIGdjX2F1dG9fcGFja19saW1pdCA8PSBjbnQ7CiB9CiAKLXN0YXRpYyBpbnQgcnVuX2hvb2sodm9pZCkKLXsKLQljb25zdCBjaGFyICphcmd2WzJdOwotCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGhvb2s7Ci0JaW50IHJldDsKLQotCWFyZ3ZbMF0gPSBnaXRfcGF0aCgiaG9va3MvcHJlLWF1dG8tZ2MiKTsKLQlhcmd2WzFdID0gTlVMTDsKLQotCWlmIChhY2Nlc3MoYXJndlswXSwgWF9PSykgPCAwKQotCQlyZXR1cm4gMDsKLQotCW1lbXNldCgmaG9vaywgMCwgc2l6ZW9mKGhvb2spKTsKLQlob29rLmFyZ3YgPSBhcmd2OwotCWhvb2subm9fc3RkaW4gPSAxOwotCWhvb2suc3Rkb3V0X3RvX3N0ZGVyciA9IDE7Ci0KLQlyZXQgPSBzdGFydF9jb21tYW5kKCZob29rKTsKLQlpZiAocmV0KSB7Ci0JCXdhcm5pbmcoIkNvdWxkIG5vdCBzcGF3biAlcyIsIGFyZ3ZbMF0pOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXQgPSBmaW5pc2hfY29tbWFuZCgmaG9vayk7Ci0JaWYgKHJldCA9PSAtRVJSX1JVTl9DT01NQU5EX1dBSVRQSURfU0lHTkFMKQotCQl3YXJuaW5nKCIlcyBleGl0ZWQgZHVlIHRvIHVuY2F1Z2h0IHNpZ25hbCIsIGFyZ3ZbMF0pOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgbmVlZF90b19nYyh2b2lkKQogewogCS8qCkBAIC0xODksMjYgKzE2MSwyOCBAQAogCSAqLwogCWlmICh0b29fbWFueV9wYWNrcygpKQogCQlhcHBlbmRfb3B0aW9uKGFyZ3ZfcmVwYWNrLAotCQkJICAgICAgIXN0cmNtcChwcnVuZV9leHBpcmUsICJub3ciKSA/ICItYSIgOiAiLUEiLAorCQkJICAgICAgcHJ1bmVfZXhwaXJlICYmICFzdHJjbXAocHJ1bmVfZXhwaXJlLCAibm93IikgPworCQkJICAgICAgIi1hIiA6ICItQSIsCiAJCQkgICAgICBNQVhfQUREKTsKIAllbHNlIGlmICghdG9vX21hbnlfbG9vc2Vfb2JqZWN0cygpKQogCQlyZXR1cm4gMDsKIAotCWlmIChydW5faG9vaygpKQorCWlmIChydW5faG9vayhOVUxMLCAicHJlLWF1dG8tZ2MiLCBOVUxMKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CiB9CiAKIGludCBjbWRfZ2MoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7Ci0JaW50IHBydW5lID0gMDsKIAlpbnQgYWdncmVzc2l2ZSA9IDA7CiAJaW50IGF1dG9fZ2MgPSAwOwogCWludCBxdWlldCA9IDA7CiAJY2hhciBidWZbODBdOwogCiAJc3RydWN0IG9wdGlvbiBidWlsdGluX2djX29wdGlvbnNbXSA9IHsKLQkJT1BUX0JPT0xFQU4oMCwgInBydW5lIiwgJnBydW5lLCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMgKGRlcHJlY2F0ZWQpIiksCisJCXsgT1BUSU9OX1NUUklORywgMCwgInBydW5lIiwgJnBydW5lX2V4cGlyZSwgImRhdGUiLAorCQkJInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIiwKKwkJCVBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdClwcnVuZV9leHBpcmUgfSwKIAkJT1BUX0JPT0xFQU4oMCwgImFnZ3Jlc3NpdmUiLCAmYWdncmVzc2l2ZSwgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIpLAogCQlPUFRfQk9PTEVBTigwLCAiYXV0byIsICZhdXRvX2djLCAiZW5hYmxlIGF1dG8tZ2MgbW9kZSIpLAogCQlPUFRfQk9PTEVBTigncScsICJxdWlldCIsICZxdWlldCwgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydHMiKSwKQEAgLTIyMCwxMiArMTk0LDE0IEBACiAJaWYgKHBhY2tfcmVmcyA8IDApCiAJCXBhY2tfcmVmcyA9ICFpc19iYXJlX3JlcG9zaXRvcnkoKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fZ2Nfb3B0aW9ucywgYnVpbHRpbl9nY191c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2djX29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fZ2NfdXNhZ2UsIDApOwogCWlmIChhcmdjID4gMCkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fZ2NfdXNhZ2UsIGJ1aWx0aW5fZ2Nfb3B0aW9ucyk7CiAKIAlpZiAoYWdncmVzc2l2ZSkgewogCQlhcHBlbmRfb3B0aW9uKGFyZ3ZfcmVwYWNrLCAiLWYiLCBNQVhfQUREKTsKKwkJYXBwZW5kX29wdGlvbihhcmd2X3JlcGFjaywgIi0tZGVwdGg9MjUwIiwgTUFYX0FERCk7CiAJCWlmIChhZ2dyZXNzaXZlX3dpbmRvdyA+IDApIHsKIAkJCXNwcmludGYoYnVmLCAiLS13aW5kb3c9JWQiLCBhZ2dyZXNzaXZlX3dpbmRvdyk7CiAJCQlhcHBlbmRfb3B0aW9uKGFyZ3ZfcmVwYWNrLCBidWYsIE1BWF9BREQpOwpAQCAtMjQ2LDcgKzIyMiw4IEBACiAJCQkiXCJnaXQgaGVscCBnY1wiIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIik7CiAJfSBlbHNlCiAJCWFwcGVuZF9vcHRpb24oYXJndl9yZXBhY2ssCi0JCQkgICAgICAhc3RyY21wKHBydW5lX2V4cGlyZSwgIm5vdyIpID8gIi1hIiA6ICItQSIsCisJCQkgICAgICBwcnVuZV9leHBpcmUgJiYgIXN0cmNtcChwcnVuZV9leHBpcmUsICJub3ciKQorCQkJICAgICAgPyAiLWEiIDogIi1BIiwKIAkJCSAgICAgIE1BWF9BREQpOwogCiAJaWYgKHBhY2tfcmVmcyAmJiBydW5fY29tbWFuZF92X29wdChhcmd2X3BhY2tfcmVmcywgUlVOX0dJVF9DTUQpKQpAQCAtMjU4LDkgKzIzNSwxMSBAQAogCWlmIChydW5fY29tbWFuZF92X29wdChhcmd2X3JlcGFjaywgUlVOX0dJVF9DTUQpKQogCQlyZXR1cm4gZXJyb3IoRkFJTEVEX1JVTiwgYXJndl9yZXBhY2tbMF0pOwogCi0JYXJndl9wcnVuZVsyXSA9IHBydW5lX2V4cGlyZTsKLQlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJndl9wcnVuZSwgUlVOX0dJVF9DTUQpKQotCQlyZXR1cm4gZXJyb3IoRkFJTEVEX1JVTiwgYXJndl9wcnVuZVswXSk7CisJaWYgKHBydW5lX2V4cGlyZSkgeworCQlhcmd2X3BydW5lWzJdID0gcHJ1bmVfZXhwaXJlOworCQlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJndl9wcnVuZSwgUlVOX0dJVF9DTUQpKQorCQkJcmV0dXJuIGVycm9yKEZBSUxFRF9SVU4sIGFyZ3ZfcHJ1bmVbMF0pOworCX0KIAogCWlmIChydW5fY29tbWFuZF92X29wdChhcmd2X3JlcmVyZSwgUlVOX0dJVF9DTUQpKQogCQlyZXR1cm4gZXJyb3IoRkFJTEVEX1JVTiwgYXJndl9yZXJlcmVbMF0pOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1ncmVwLmMgYi9idWlsdGluLWdyZXAuYwppbmRleCAzZjEyYmEzLi5mNDc3NjU5IDEwMDY0NAotLS0gYS9idWlsdGluLWdyZXAuYworKysgYi9idWlsdGluLWdyZXAuYwpAQCAtMTAsNiArMTAsOCBAQAogI2luY2x1ZGUgInRhZy5oIgogI2luY2x1ZGUgInRyZWUtd2Fsay5oIgogI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKICNpbmNsdWRlICJncmVwLmgiCiAKICNpZm5kZWYgTk9fRVhURVJOQUxfR1JFUApAQCAtMjAsNyArMjIsMzUgQEAKICNlbmRpZgogI2VuZGlmCiAKLXN0YXRpYyBpbnQgYnVpbHRpbl9ncmVwOworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBncmVwX3VzYWdlW10gPSB7CisJImdpdCBncmVwIFtvcHRpb25zXSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIHBhdGguLi5dIiwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGdyZXBfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXN0cnVjdCBncmVwX29wdCAqb3B0ID0gY2I7CisKKwlzd2l0Y2ggKHVzZXJkaWZmX2NvbmZpZyh2YXIsIHZhbHVlKSkgeworCWNhc2UgMDogYnJlYWs7CisJY2FzZSAtMTogcmV0dXJuIC0xOworCWRlZmF1bHQ6IHJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvbG9yLmdyZXAiKSkgeworCQlvcHQtPmNvbG9yID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSwgLTEpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuZ3JlcC5leHRlcm5hbCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJihvcHQtPmNvbG9yX2V4dGVybmFsKSwgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuZ3JlcC5tYXRjaCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJY29sb3JfcGFyc2UodmFsdWUsIHZhciwgb3B0LT5jb2xvcl9tYXRjaCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZ2l0X2NvbG9yX2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KIAogLyoKICAqIGdpdCBncmVwIHBhdGhzcGVjcyBhcmUgc29tZXdoYXQgZGlmZmVyZW50IGZyb20gZGlmZi10cmVlIHBhdGhzcGVjczsKQEAgLTI1NSw2ICsyODUsMTcgQEAKIAkJYXJnYyAtPSAyOwogCX0KIAorCWlmIChvcHQtPnByZV9jb250ZXh0IHx8IG9wdC0+cG9zdF9jb250ZXh0KSB7CisJCS8qCisJCSAqIGdyZXAgaGFuZGxlcyBodW5rIG1hcmtzIGJldHdlZW4gZmlsZXMsIGJ1dCB3ZSBuZWVkIHRvCisJCSAqIGRvIHRoYXQgb3Vyc2VsdmVzIGJldHdlZW4gbXVsdGlwbGUgY2FsbHMuCisJCSAqLworCQlpZiAob3B0LT5zaG93X2h1bmtfbWFyaykKKwkJCXdyaXRlX29yX2RpZSgxLCAiLS1cbiIsIDMpOworCQllbHNlCisJCQlvcHQtPnNob3dfaHVua19tYXJrID0gMTsKKwl9CisKIAlzdGF0dXMgPSBleGVjX2dyZXAoYXJnYywgYXJndik7CiAKIAlpZiAoa2VwdF8wKSB7CkBAIC0yNjksNiArMzEwLDIxIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGljIHZvaWQgZ3JlcF9hZGRfY29sb3Ioc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmVzY2FwZV9zZXEpCit7CisJc2l6ZV90IG9yaWdfbGVuID0gc2ItPmxlbjsKKworCXdoaWxlICgqZXNjYXBlX3NlcSkgeworCQlpZiAoKmVzY2FwZV9zZXEgPT0gJ20nKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnOycpOworCQllbHNlIGlmICgqZXNjYXBlX3NlcSAhPSAnXDAzMycgJiYgKmVzY2FwZV9zZXEgICE9ICdbJykKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgKmVzY2FwZV9zZXEpOworCQllc2NhcGVfc2VxKys7CisJfQorCWlmIChzYi0+bGVuID4gb3JpZ19sZW4gJiYgc2ItPmJ1ZltzYi0+bGVuIC0gMV0gPT0gJzsnKQorCQlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuIC0gMSk7Cit9CisKIHN0YXRpYyBpbnQgZXh0ZXJuYWxfZ3JlcChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqKnBhdGhzLCBpbnQgY2FjaGVkKQogewogCWludCBpLCBuciwgYXJnYywgaGl0LCBsZW4sIHN0YXR1czsKQEAgLTMzOSw2ICszOTUsMjMgQEAKIAkJcHVzaF9hcmcoIi1lIik7CiAJCXB1c2hfYXJnKHAtPnBhdHRlcm4pOwogCX0KKwlpZiAob3B0LT5jb2xvcikgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJZ3JlcF9hZGRfY29sb3IoJnNiLCBvcHQtPmNvbG9yX21hdGNoKTsKKwkJc2V0ZW52KCJHUkVQX0NPTE9SIiwgc2IuYnVmLCAxKTsKKworCQlzdHJidWZfcmVzZXQoJnNiKTsKKwkJc3RyYnVmX2FkZHN0cigmc2IsICJtdD0iKTsKKwkJZ3JlcF9hZGRfY29sb3IoJnNiLCBvcHQtPmNvbG9yX21hdGNoKTsKKwkJc3RyYnVmX2FkZHN0cigmc2IsICI6c2w9OmN4PTpmbj06bG49OmJuPTpzZT0iKTsKKwkJc2V0ZW52KCJHUkVQX0NPTE9SUyIsIHNiLmJ1ZiwgMSk7CisKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCQlpZiAob3B0LT5jb2xvcl9leHRlcm5hbCAmJiBzdHJsZW4ob3B0LT5jb2xvcl9leHRlcm5hbCkgPiAwKQorCQkJcHVzaF9hcmcob3B0LT5jb2xvcl9leHRlcm5hbCk7CisJfQogCiAJaGl0ID0gMDsKIAlhcmdjID0gbnI7CkBAIC0zODEsNyArNDU0LDggQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGdyZXBfY2FjaGUoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKipwYXRocywgaW50IGNhY2hlZCkKK3N0YXRpYyBpbnQgZ3JlcF9jYWNoZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqKnBhdGhzLCBpbnQgY2FjaGVkLAorCQkgICAgICBpbnQgZXh0ZXJuYWxfZ3JlcF9hbGxvd2VkKQogewogCWludCBoaXQgPSAwOwogCWludCBucjsKQEAgLTM5Myw3ICs0NjcsNyBAQAogCSAqIHdlIGdyZXAgdGhyb3VnaCB0aGUgY2hlY2tlZC1vdXQgZmlsZXMuIEl0IHRlbmRzIHRvCiAJICogYmUgYSBsb3QgbW9yZSBvcHRpbWl6ZWQKIAkgKi8KLQlpZiAoIWNhY2hlZCAmJiAhYnVpbHRpbl9ncmVwKSB7CisJaWYgKCFjYWNoZWQgJiYgZXh0ZXJuYWxfZ3JlcF9hbGxvd2VkKSB7CiAJCWhpdCA9IGV4dGVybmFsX2dyZXAob3B0LCBwYXRocywgY2FjaGVkKTsKIAkJaWYgKGhpdCA+PSAwKQogCQkJcmV0dXJuIGhpdDsKQEAgLTUwOSwyNSArNTgzLDE4NCBAQAogCWRpZSgidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIsIHR5cGVuYW1lKG9iai0+dHlwZSkpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBidWlsdGluX2dyZXBfdXNhZ2VbXSA9Ci0iZ2l0IGdyZXAgPG9wdGlvbj4qIFstZV0gPHBhdHRlcm4+IDxyZXY+KiBbWy0tXSA8cGF0aD4uLi5dIjsKK3N0YXRpYyBpbnQgY29udGV4dF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJaW50IHZhbHVlOworCWNvbnN0IGNoYXIgKmVuZHA7CiAKLXN0YXRpYyBjb25zdCBjaGFyIGVtc2dfaW52YWxpZF9jb250ZXh0X2xlbltdID0KLSIlczogaW52YWxpZCBjb250ZXh0IGxlbmd0aCBhcmd1bWVudCI7Ci1zdGF0aWMgY29uc3QgY2hhciBlbXNnX21pc3NpbmdfY29udGV4dF9sZW5bXSA9Ci0ibWlzc2luZyBjb250ZXh0IGxlbmd0aCBhcmd1bWVudCI7Ci1zdGF0aWMgY29uc3QgY2hhciBlbXNnX21pc3NpbmdfYXJndW1lbnRbXSA9Ci0ib3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0lcyI7CisJaWYgKHVuc2V0KSB7CisJCWdyZXBfb3B0LT5wcmVfY29udGV4dCA9IGdyZXBfb3B0LT5wb3N0X2NvbnRleHQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJdmFsdWUgPSBzdHJ0b2woYXJnLCAoY2hhciAqKikmZW5kcCwgMTApOworCWlmICgqZW5kcCkgeworCQlyZXR1cm4gZXJyb3IoInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiLAorCQkJICAgICBvcHQtPnNob3J0X25hbWUpOworCX0KKwlncmVwX29wdC0+cHJlX2NvbnRleHQgPSBncmVwX29wdC0+cG9zdF9jb250ZXh0ID0gdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmlsZV9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCUZJTEUgKnBhdHRlcm5zOworCWludCBsbm8gPSAwOworCXN0cnVjdCBzdHJidWYgc2I7CisKKwlwYXR0ZXJucyA9IGZvcGVuKGFyZywgInIiKTsKKwlpZiAoIXBhdHRlcm5zKQorCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuICclcyciLCBhcmcpOworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmc2IsIHBhdHRlcm5zLCAnXG4nKSA9PSAwKSB7CisJCS8qIGlnbm9yZSBlbXB0eSBsaW5lIGxpa2UgZ3JlcCBkb2VzICovCisJCWlmIChzYi5sZW4gPT0gMCkKKwkJCWNvbnRpbnVlOworCQlhcHBlbmRfZ3JlcF9wYXR0ZXJuKGdyZXBfb3B0LCBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCksIGFyZywKKwkJCQkgICAgKytsbm8sIEdSRVBfUEFUVEVSTik7CisJfQorCWZjbG9zZShwYXR0ZXJucyk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBub3RfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKGdyZXBfb3B0LCAiLS1ub3QiLCAiY29tbWFuZCBsaW5lIiwgMCwgR1JFUF9OT1QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFuZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCWFwcGVuZF9ncmVwX3BhdHRlcm4oZ3JlcF9vcHQsICItLWFuZCIsICJjb21tYW5kIGxpbmUiLCAwLCBHUkVQX0FORCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCWFwcGVuZF9ncmVwX3BhdHRlcm4oZ3JlcF9vcHQsICIoIiwgImNvbW1hbmQgbGluZSIsIDAsIEdSRVBfT1BFTl9QQVJFTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xvc2VfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKGdyZXBfb3B0LCAiKSIsICJjb21tYW5kIGxpbmUiLCAwLCBHUkVQX0NMT1NFX1BBUkVOKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXR0ZXJuX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKGdyZXBfb3B0LCBhcmcsICItZSBvcHRpb24iLCAwLCBHUkVQX1BBVFRFUk4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhlbHBfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlyZXR1cm4gLTE7Cit9CiAKIGludCBjbWRfZ3JlcChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlpbnQgaGl0ID0gMDsKIAlpbnQgY2FjaGVkID0gMDsKKwlpbnQgZXh0ZXJuYWxfZ3JlcF9hbGxvd2VkID0gMTsKIAlpbnQgc2Vlbl9kYXNoZGFzaCA9IDA7CiAJc3RydWN0IGdyZXBfb3B0IG9wdDsKIAlzdHJ1Y3Qgb2JqZWN0X2FycmF5IGxpc3QgPSB7IDAsIDAsIE5VTEwgfTsKIAljb25zdCBjaGFyICoqcGF0aHMgPSBOVUxMOwogCWludCBpOworCWludCBkdW1teTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0xFQU4oMCwgImNhY2hlZCIsICZjYWNoZWQsCisJCQkic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQk9PTEVBTigndicsICJpbnZlcnQtbWF0Y2giLCAmb3B0LmludmVydCwKKwkJCSJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIpLAorCQlPUFRfQklUKCdpJywgImlnbm9yZS1jYXNlIiwgJm9wdC5yZWdmbGFncywKKwkJCSJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIiwgUkVHX0lDQVNFKSwKKwkJT1BUX0JPT0xFQU4oJ3cnLCAid29yZC1yZWdleHAiLCAmb3B0LndvcmRfcmVnZXhwLAorCQkJIm1hdGNoIHBhdHRlcm5zIG9ubHkgYXQgd29yZCBib3VuZGFyaWVzIiksCisJCU9QVF9TRVRfSU5UKCdhJywgInRleHQiLCAmb3B0LmJpbmFyeSwKKwkJCSJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IiwgR1JFUF9CSU5BUllfVEVYVCksCisJCU9QVF9TRVRfSU5UKCdJJywgTlVMTCwgJm9wdC5iaW5hcnksCisJCQkiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIiwKKwkJCUdSRVBfQklOQVJZX05PTUFUQ0gpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQklUKCdFJywgImV4dGVuZGVkLXJlZ2V4cCIsICZvcHQucmVnZmxhZ3MsCisJCQkidXNlIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMiLCBSRUdfRVhURU5ERUQpLAorCQlPUFRfTkVHQklUKCdHJywgImJhc2ljLXJlZ2V4cCIsICZvcHQucmVnZmxhZ3MsCisJCQkidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIiwKKwkJCVJFR19FWFRFTkRFRCksCisJCU9QVF9CT09MRUFOKCdGJywgImZpeGVkLXN0cmluZ3MiLCAmb3B0LmZpeGVkLAorCQkJImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIiksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9CT09MRUFOKCduJywgTlVMTCwgJm9wdC5saW5lbnVtLCAic2hvdyBsaW5lIG51bWJlcnMiKSwKKwkJT1BUX05FR0JJVCgnaCcsIE5VTEwsICZvcHQucGF0aG5hbWUsICJkb24ndCBzaG93IGZpbGVuYW1lcyIsIDEpLAorCQlPUFRfQklUKCdIJywgTlVMTCwgJm9wdC5wYXRobmFtZSwgInNob3cgZmlsZW5hbWVzIiwgMSksCisJCU9QVF9ORUdCSVQoMCwgImZ1bGwtbmFtZSIsICZvcHQucmVsYXRpdmUsCisJCQkic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIsIDEpLAorCQlPUFRfQk9PTEVBTignbCcsICJmaWxlcy13aXRoLW1hdGNoZXMiLCAmb3B0Lm5hbWVfb25seSwKKwkJCSJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiKSwKKwkJT1BUX0JPT0xFQU4oMCwgIm5hbWUtb25seSIsICZvcHQubmFtZV9vbmx5LAorCQkJInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIiksCisJCU9QVF9CT09MRUFOKCdMJywgImZpbGVzLXdpdGhvdXQtbWF0Y2giLAorCQkJJm9wdC51bm1hdGNoX25hbWVfb25seSwKKwkJCSJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giKSwKKwkJT1BUX0JPT0xFQU4oJ3onLCAibnVsbCIsICZvcHQubnVsbF9mb2xsb3dpbmdfbmFtZSwKKwkJCSJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIiksCisJCU9QVF9CT09MRUFOKCdjJywgImNvdW50IiwgJm9wdC5jb3VudCwKKwkJCSJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIiksCisJCU9QVF9TRVRfSU5UKDAsICJjb2xvciIsICZvcHQuY29sb3IsICJoaWdobGlnaHQgbWF0Y2hlcyIsIDEpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQ0FMTEJBQ0soJ0MnLCBOVUxMLCAmb3B0LCAibiIsCisJCQkic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiLAorCQkJY29udGV4dF9jYWxsYmFjayksCisJCU9QVF9JTlRFR0VSKCdCJywgTlVMTCwgJm9wdC5wcmVfY29udGV4dCwKKwkJCSJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIiksCisJCU9QVF9JTlRFR0VSKCdBJywgTlVMTCwgJm9wdC5wb3N0X2NvbnRleHQsCisJCQkic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIiksCisJCU9QVF9OVU1CRVJfQ0FMTEJBQ0soJm9wdCwgInNob3J0Y3V0IGZvciAtQyBOVU0iLAorCQkJY29udGV4dF9jYWxsYmFjayksCisJCU9QVF9CT09MRUFOKCdwJywgInNob3ctZnVuY3Rpb24iLCAmb3B0LmZ1bmNuYW1lLAorCQkJInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0NBTExCQUNLKCdmJywgTlVMTCwgJm9wdCwgImZpbGUiLAorCQkJInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIiwgZmlsZV9jYWxsYmFjayksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnZScsIE5VTEwsICZvcHQsICJwYXR0ZXJuIiwKKwkJCSJtYXRjaCA8cGF0dGVybj4iLCBQQVJTRV9PUFRfTk9ORUcsIHBhdHRlcm5fY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJhbmQiLCAmb3B0LCBOVUxMLAorCQkgICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIiwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIGFuZF9jYWxsYmFjayB9LAorCQlPUFRfQk9PTEVBTigwLCAib3IiLCAmZHVtbXksICIiKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJub3QiLCAmb3B0LCBOVUxMLCAiIiwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIG5vdF9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJygnLCBOVUxMLCAmb3B0LCBOVUxMLCAiIiwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9EQVNILAorCQkgIG9wZW5fY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICcpJywgTlVMTCwgJm9wdCwgTlVMTCwgIiIsCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PREFTSCwKKwkJICBjbG9zZV9jYWxsYmFjayB9LAorCQlPUFRfQk9PTEVBTigwLCAiYWxsLW1hdGNoIiwgJm9wdC5hbGxfbWF0Y2gsCisJCQkic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIpLAorCQlPUFRfR1JPVVAoIiIpLAorI2lmIE5PX0VYVEVSTkFMX0dSRVAKKwkJT1BUX0JPT0xFQU4oMCwgImV4dC1ncmVwIiwgJmV4dGVybmFsX2dyZXBfYWxsb3dlZCwKKwkJCSJhbGxvdyBjYWxsaW5nIG9mIGdyZXAoMSkgKGlnbm9yZWQgYnkgdGhpcyBidWlsZCkiKSwKKyNlbHNlCisJCU9QVF9CT09MRUFOKDAsICJleHQtZ3JlcCIsICZleHRlcm5hbF9ncmVwX2FsbG93ZWQsCisJCQkiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChkZWZhdWx0KSIpLAorI2VuZGlmCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiaGVscC1hbGwiLCAmb3B0aW9ucywgTlVMTCwgInNob3cgdXNhZ2UiLAorCQkgIFBBUlNFX09QVF9ISURERU4gfCBQQVJTRV9PUFRfTk9BUkcsIGhlbHBfY2FsbGJhY2sgfSwKKwkJT1BUX0VORCgpCisJfTsKIAogCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CiAJb3B0LnByZWZpeF9sZW5ndGggPSAocHJlZml4ICYmICpwcmVmaXgpID8gc3RybGVuKHByZWZpeCkgOiAwOwpAQCAtNTM2LDYgKzc2OSwxMiBAQAogCW9wdC5wYXR0ZXJuX3RhaWwgPSAmb3B0LnBhdHRlcm5fbGlzdDsKIAlvcHQucmVnZmxhZ3MgPSBSRUdfTkVXTElORTsKIAorCXN0cmNweShvcHQuY29sb3JfbWF0Y2gsIEdJVF9DT0xPUl9SRUQgR0lUX0NPTE9SX0JPTEQpOworCW9wdC5jb2xvciA9IC0xOworCWdpdF9jb25maWcoZ3JlcF9jb25maWcsICZvcHQpOworCWlmIChvcHQuY29sb3IgPT0gLTEpCisJCW9wdC5jb2xvciA9IGdpdF91c2VfY29sb3JfZGVmYXVsdDsKKwogCS8qCiAJICogSWYgdGhlcmUgaXMgbm8gLS0gdGhlbiB0aGUgcGF0aHMgbXVzdCBleGlzdCBpbiB0aGUgd29ya2luZwogCSAqIHRyZWUuICBJZiB0aGVyZSBpcyBubyBleHBsaWNpdCBwYXR0ZXJuIHNwZWNpZmllZCB3aXRoIC1lIG9yCkBAIC01NDYsMjE3ICs3ODUsMjEgQEAKIAkgKiB1bnJlY29nbml6ZWQgbm9uIG9wdGlvbiBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZWZzIGxpc3QKIAkgKiB0aGF0IGNvbnRpbnVlcyB1cCB0byB0aGUgLS0gKGlmIGV4aXN0cyksIGFuZCB0aGVuIHBhdGhzLgogCSAqLworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ3JlcF91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfAorCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OIHwKKwkJCSAgICAgUEFSU0VfT1BUX05PX0lOVEVSTkFMX0hFTFApOwogCi0Jd2hpbGUgKDEgPCBhcmdjKSB7Ci0JCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbMV07Ci0JCWFyZ2MtLTsgYXJndisrOwotCQlpZiAoIXN0cmNtcCgiLS1jYWNoZWQiLCBhcmcpKSB7Ci0JCQljYWNoZWQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi0tbm8tZXh0LWdyZXAiLCBhcmcpKSB7Ci0JCQlidWlsdGluX2dyZXAgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1hIiwgYXJnKSB8fAotCQkgICAgIXN0cmNtcCgiLS10ZXh0IiwgYXJnKSkgewotCQkJb3B0LmJpbmFyeSA9IEdSRVBfQklOQVJZX1RFWFQ7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLWkiLCBhcmcpIHx8Ci0JCSAgICAhc3RyY21wKCItLWlnbm9yZS1jYXNlIiwgYXJnKSkgewotCQkJb3B0LnJlZ2ZsYWdzIHw9IFJFR19JQ0FTRTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItSSIsIGFyZykpIHsKLQkJCW9wdC5iaW5hcnkgPSBHUkVQX0JJTkFSWV9OT01BVENIOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi12IiwgYXJnKSB8fAotCQkgICAgIXN0cmNtcCgiLS1pbnZlcnQtbWF0Y2giLCBhcmcpKSB7Ci0JCQlvcHQuaW52ZXJ0ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItRSIsIGFyZykgfHwKLQkJICAgICFzdHJjbXAoIi0tZXh0ZW5kZWQtcmVnZXhwIiwgYXJnKSkgewotCQkJb3B0LnJlZ2ZsYWdzIHw9IFJFR19FWFRFTkRFRDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItRiIsIGFyZykgfHwKLQkJICAgICFzdHJjbXAoIi0tZml4ZWQtc3RyaW5ncyIsIGFyZykpIHsKLQkJCW9wdC5maXhlZCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLUciLCBhcmcpIHx8Ci0JCSAgICAhc3RyY21wKCItLWJhc2ljLXJlZ2V4cCIsIGFyZykpIHsKLQkJCW9wdC5yZWdmbGFncyAmPSB+UkVHX0VYVEVOREVEOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1uIiwgYXJnKSkgewotCQkJb3B0LmxpbmVudW0gPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1oIiwgYXJnKSkgewotCQkJb3B0LnBhdGhuYW1lID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItSCIsIGFyZykpIHsKLQkJCW9wdC5wYXRobmFtZSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLWwiLCBhcmcpIHx8Ci0JCSAgICAhc3RyY21wKCItLW5hbWUtb25seSIsIGFyZykgfHwKLQkJICAgICFzdHJjbXAoIi0tZmlsZXMtd2l0aC1tYXRjaGVzIiwgYXJnKSkgewotCQkJb3B0Lm5hbWVfb25seSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLUwiLCBhcmcpIHx8Ci0JCSAgICAhc3RyY21wKCItLWZpbGVzLXdpdGhvdXQtbWF0Y2giLCBhcmcpKSB7Ci0JCQlvcHQudW5tYXRjaF9uYW1lX29ubHkgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi16IiwgYXJnKSB8fAotCQkgICAgIXN0cmNtcCgiLS1udWxsIiwgYXJnKSkgewotCQkJb3B0Lm51bGxfZm9sbG93aW5nX25hbWUgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1jIiwgYXJnKSB8fAotCQkgICAgIXN0cmNtcCgiLS1jb3VudCIsIGFyZykpIHsKLQkJCW9wdC5jb3VudCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLXciLCBhcmcpIHx8Ci0JCSAgICAhc3RyY21wKCItLXdvcmQtcmVnZXhwIiwgYXJnKSkgewotCQkJb3B0LndvcmRfcmVnZXhwID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghcHJlZml4Y21wKGFyZywgIi1BIikgfHwKLQkJICAgICFwcmVmaXhjbXAoYXJnLCAiLUIiKSB8fAotCQkgICAgIXByZWZpeGNtcChhcmcsICItQyIpIHx8Ci0JCSAgICAoYXJnWzBdID09ICctJyAmJiAnMScgPD0gYXJnWzFdICYmIGFyZ1sxXSA8PSAnOScpKSB7Ci0JCQl1bnNpZ25lZCBudW07Ci0JCQljb25zdCBjaGFyICpzY2FuOwotCQkJc3dpdGNoIChhcmdbMV0pIHsKLQkJCWNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6Ci0JCQkJaWYgKCFhcmdbMl0pIHsKLQkJCQkJaWYgKGFyZ2MgPD0gMSkKLQkJCQkJCWRpZShlbXNnX21pc3NpbmdfY29udGV4dF9sZW4pOwotCQkJCQlzY2FuID0gKisrYXJndjsKLQkJCQkJYXJnYy0tOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCXNjYW4gPSBhcmcgKyAyOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlzY2FuID0gYXJnICsgMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChzdHJ0b3VsX3VpKHNjYW4sIDEwLCAmbnVtKSkKLQkJCQlkaWUoZW1zZ19pbnZhbGlkX2NvbnRleHRfbGVuLCBzY2FuKTsKLQkJCXN3aXRjaCAoYXJnWzFdKSB7Ci0JCQljYXNlICdBJzoKLQkJCQlvcHQucG9zdF9jb250ZXh0ID0gbnVtOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCWNhc2UgJ0MnOgotCQkJCW9wdC5wb3N0X2NvbnRleHQgPSBudW07Ci0JCQljYXNlICdCJzoKLQkJCQlvcHQucHJlX2NvbnRleHQgPSBudW07Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLWYiLCBhcmcpKSB7Ci0JCQlGSUxFICpwYXR0ZXJuczsKLQkJCWludCBsbm8gPSAwOwotCQkJY2hhciBidWZbMTAyNF07Ci0JCQlpZiAoYXJnYyA8PSAxKQotCQkJCWRpZShlbXNnX21pc3NpbmdfYXJndW1lbnQsIGFyZyk7Ci0JCQlwYXR0ZXJucyA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7Ci0JCQlpZiAoIXBhdHRlcm5zKQotCQkJCWRpZSgiJyVzJzogJXMiLCBhcmd2WzFdLCBzdHJlcnJvcihlcnJubykpOwotCQkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHBhdHRlcm5zKSkgewotCQkJCWludCBsZW4gPSBzdHJsZW4oYnVmKTsKLQkJCQlpZiAobGVuICYmIGJ1ZltsZW4tMV0gPT0gJ1xuJykKLQkJCQkJYnVmW2xlbi0xXSA9IDA7Ci0JCQkJLyogaWdub3JlIGVtcHR5IGxpbmUgbGlrZSBncmVwIGRvZXMgKi8KLQkJCQlpZiAoIWJ1ZlswXSkKLQkJCQkJY29udGludWU7Ci0JCQkJYXBwZW5kX2dyZXBfcGF0dGVybigmb3B0LCB4c3RyZHVwKGJ1ZiksCi0JCQkJCQkgICAgYXJndlsxXSwgKytsbm8sCi0JCQkJCQkgICAgR1JFUF9QQVRURVJOKTsKLQkJCX0KLQkJCWZjbG9zZShwYXR0ZXJucyk7Ci0JCQlhcmd2Kys7Ci0JCQlhcmdjLS07Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLS1ub3QiLCBhcmcpKSB7Ci0JCQlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZvcHQsIGFyZywgImNvbW1hbmQgbGluZSIsIDAsCi0JCQkJCSAgICBHUkVQX05PVCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLS1hbmQiLCBhcmcpKSB7Ci0JCQlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZvcHQsIGFyZywgImNvbW1hbmQgbGluZSIsIDAsCi0JCQkJCSAgICBHUkVQX0FORCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcCgiLS1vciIsIGFyZykpCi0JCQljb250aW51ZTsgLyogbm8tb3AgKi8KLQkJaWYgKCFzdHJjbXAoIigiLCBhcmcpKSB7Ci0JCQlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZvcHQsIGFyZywgImNvbW1hbmQgbGluZSIsIDAsCi0JCQkJCSAgICBHUkVQX09QRU5fUEFSRU4pOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIikiLCBhcmcpKSB7Ci0JCQlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZvcHQsIGFyZywgImNvbW1hbmQgbGluZSIsIDAsCi0JCQkJCSAgICBHUkVQX0NMT1NFX1BBUkVOKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItLWFsbC1tYXRjaCIsIGFyZykpIHsKLQkJCW9wdC5hbGxfbWF0Y2ggPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi1lIiwgYXJnKSkgewotCQkJaWYgKDEgPCBhcmdjKSB7Ci0JCQkJYXBwZW5kX2dyZXBfcGF0dGVybigmb3B0LCBhcmd2WzFdLAotCQkJCQkJICAgICItZSBvcHRpb24iLCAwLAotCQkJCQkJICAgIEdSRVBfUEFUVEVSTik7Ci0JCQkJYXJndisrOwotCQkJCWFyZ2MtLTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWRpZShlbXNnX21pc3NpbmdfYXJndW1lbnQsIGFyZyk7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoIi0tZnVsbC1uYW1lIiwgYXJnKSkgewotCQkJb3B0LnJlbGF0aXZlID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKCItLSIsIGFyZykpIHsKLQkJCS8qIGxhdGVyIHByb2Nlc3Npbmcgd2FudHMgdG8gaGF2ZSB0aGlzIGF0IGFyZ3ZbMV0gKi8KLQkJCWFyZ3YtLTsKLQkJCWFyZ2MrKzsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgqYXJnID09ICctJykKLQkJCXVzYWdlKGJ1aWx0aW5fZ3JlcF91c2FnZSk7Ci0KLQkJLyogRmlyc3QgdW5yZWNvZ25pemVkIG5vbi1vcHRpb24gdG9rZW4gKi8KLQkJaWYgKCFvcHQucGF0dGVybl9saXN0KSB7Ci0JCQlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZvcHQsIGFyZywgImNvbW1hbmQgbGluZSIsIDAsCi0JCQkJCSAgICBHUkVQX1BBVFRFUk4pOwotCQkJYnJlYWs7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBXZSBhcmUgbG9va2luZyBhdCB0aGUgZmlyc3QgcGF0aCBvciByZXY7Ci0JCQkgKiBpdCBpcyBmb3VuZCBhdCBhcmd2WzFdIGFmdGVyIGxlYXZpbmcgdGhlCi0JCQkgKiBsb29wLgotCQkJICovCi0JCQlhcmdjKys7IGFyZ3YtLTsKLQkJCWJyZWFrOwotCQl9CisJLyogRmlyc3QgdW5yZWNvZ25pemVkIG5vbi1vcHRpb24gdG9rZW4gKi8KKwlpZiAoYXJnYyA+IDAgJiYgIW9wdC5wYXR0ZXJuX2xpc3QpIHsKKwkJYXBwZW5kX2dyZXBfcGF0dGVybigmb3B0LCBhcmd2WzBdLCAiY29tbWFuZCBsaW5lIiwgMCwKKwkJCQkgICAgR1JFUF9QQVRURVJOKTsKKwkJYXJndisrOworCQlhcmdjLS07CiAJfQogCisJaWYgKChvcHQuY29sb3IgJiYgIW9wdC5jb2xvcl9leHRlcm5hbCkgfHwgb3B0LmZ1bmNuYW1lKQorCQlleHRlcm5hbF9ncmVwX2FsbG93ZWQgPSAwOwogCWlmICghb3B0LnBhdHRlcm5fbGlzdCkKIAkJZGllKCJubyBwYXR0ZXJuIGdpdmVuLiIpOwogCWlmICgob3B0LnJlZ2ZsYWdzICE9IFJFR19ORVdMSU5FKSAmJiBvcHQuZml4ZWQpCkBAIC03NjQsNyArODA3LDcgQEAKIAljb21waWxlX2dyZXBfcGF0dGVybnMoJm9wdCk7CiAKIAkvKiBDaGVjayByZXZzIGFuZCB0aGVuIHBhdGhzICovCi0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKIAkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAkJLyogSXMgaXQgYSByZXY/ICovCkBAIC04MDcsNyArODUwLDcgQEAKIAlpZiAoIWxpc3QubnIpIHsKIAkJaWYgKCFjYWNoZWQpCiAJCQlzZXR1cF93b3JrX3RyZWUoKTsKLQkJcmV0dXJuICFncmVwX2NhY2hlKCZvcHQsIHBhdGhzLCBjYWNoZWQpOworCQlyZXR1cm4gIWdyZXBfY2FjaGUoJm9wdCwgcGF0aHMsIGNhY2hlZCwgZXh0ZXJuYWxfZ3JlcF9hbGxvd2VkKTsKIAl9CiAKIAlpZiAoY2FjaGVkKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1oZWxwLmMgYi9idWlsdGluLWhlbHAuYwppbmRleCBmMDc2ZWZhLi5lMWViYTc3IDEwMDY0NAotLS0gYS9idWlsdGluLWhlbHAuYworKysgYi9idWlsdGluLWhlbHAuYwpAQCAtODAsMTAgKzgwLDkgQEAKIAllY19wcm9jZXNzLmFyZ3YgPSBhcmd2X2VjOwogCWVjX3Byb2Nlc3MuZXJyID0gLTE7CiAJZWNfcHJvY2Vzcy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKLQlpZiAoc3RhcnRfY29tbWFuZCgmZWNfcHJvY2VzcykpIHsKLQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KKwlpZiAoc3RhcnRfY29tbWFuZCgmZWNfcHJvY2VzcykpCisJCXJldHVybiBlcnJvcigiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIpOworCiAJc3RyYnVmX3JlYWQoJmJ1ZmZlciwgZWNfcHJvY2Vzcy5lcnIsIDIwKTsKIAljbG9zZShlY19wcm9jZXNzLmVycik7CiAKQEAgLTk0LDI3ICs5MywyNCBAQAogCWZpbmlzaF9jb21tYW5kKCZlY19wcm9jZXNzKTsKIAogCWlmIChwcmVmaXhjbXAoYnVmZmVyLmJ1ZiwgImVtYWNzY2xpZW50IikpIHsKLQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi5cbiIpOwogCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gZXJyb3IoIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIpOwogCX0KIAogCXN0cmJ1Zl9yZW1vdmUoJmJ1ZmZlciwgMCwgc3RybGVuKCJlbWFjc2NsaWVudCIpKTsKIAl2ZXJzaW9uID0gYXRvaShidWZmZXIuYnVmKTsKIAogCWlmICh2ZXJzaW9uIDwgMjIpIHsKLQkJZnByaW50ZihzdGRlcnIsCi0JCQkiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLlxuIiwKLQkJCXZlcnNpb24pOwogCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gZXJyb3IoImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iLAorCQkJdmVyc2lvbik7CiAJfQogCiAJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGV4ZWNfd29tYW5fZW1hY3MoY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3N0YXRpYyB2b2lkIGV4ZWNfd29tYW5fZW1hY3MoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKIHsKIAlpZiAoIWNoZWNrX2VtYWNzY2xpZW50X3ZlcnNpb24oKSkgewogCQkvKiBUaGlzIHdvcmtzIG9ubHkgd2l0aCBlbWFjc2NsaWVudCB2ZXJzaW9uID49IDIyLiAqLwpAQCAtMTI4LDcgKzEyNCw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBleGVjX21hbl9rb25xdWVyb3IoY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX2tvbnF1ZXJvcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwYWdlKQogewogCWNvbnN0IGNoYXIgKmRpc3BsYXkgPSBnZXRlbnYoIkRJU1BMQVkiKTsKIAlpZiAoZGlzcGxheSAmJiAqZGlzcGxheSkgewpAQCAtMTU2LDcgKzE1Miw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBleGVjX21hbl9tYW4oY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX21hbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwYWdlKQogewogCWlmICghcGF0aCkKIAkJcGF0aCA9ICJtYW4iOwpAQCAtMjM2LDcgKzIzMiw3IEBACiAJY29uc3QgY2hhciAqc3Via2V5ID0gc3RycmNocihuYW1lLCAnLicpOwogCiAJaWYgKCFzdWJrZXkpCi0JCXJldHVybiBlcnJvcigiQ29uZmlnIHdpdGggbm8ga2V5IGZvciBtYW4gdmlld2VyOiAlcyIsIG5hbWUpOworCQlyZXR1cm4gMDsKIAogCWlmICghc3RyY21wKHN1YmtleSwgIi5wYXRoIikpIHsKIAkJaWYgKCF2YWx1ZSkKQEAgLTI0OSw3ICsyNDUsNiBAQAogCQlyZXR1cm4gYWRkX21hbl92aWV3ZXJfY21kKG5hbWUsIHN1YmtleSAtIG5hbWUsIHZhbHVlKTsKIAl9CiAKLQl3YXJuaW5nKCInJXMnOiB1bnN1cHBvcnRlZCBtYW4gdmlld2VyIHN1YiBrZXkuIiwgc3Via2V5KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzI5LDcgKzMyNCw3IEBACiAJICogb2xkX3BhdGgsIHRoZSAnOicgYXQgdGhlIGVuZCB3aWxsIGxldCAnbWFuJyB0byB0cnkKIAkgKiBzeXN0ZW0td2lkZSBwYXRocyBhZnRlciBvdXJzIHRvIGZpbmQgdGhlIG1hbnVhbCBwYWdlLiBJZgogCSAqIHRoZXJlIGlzIG9sZF9wYXRoLCB3ZSBuZWVkICc6JyBhcyBkZWxpbWl0ZXIuICovCi0Jc3RyYnVmX2FkZHN0cigmbmV3X3BhdGgsIEdJVF9NQU5fUEFUSCk7CisJc3RyYnVmX2FkZHN0cigmbmV3X3BhdGgsIHN5c3RlbV9wYXRoKEdJVF9NQU5fUEFUSCkpOwogCXN0cmJ1Zl9hZGRjaCgmbmV3X3BhdGgsICc6Jyk7CiAJaWYgKG9sZF9wYXRoKQogCQlzdHJidWZfYWRkc3RyKCZuZXdfcGF0aCwgb2xkX3BhdGgpOwpAQCAtMzc1LDcgKzM3MCw3IEBACiBzdGF0aWMgdm9pZCBzaG93X2luZm9fcGFnZShjb25zdCBjaGFyICpnaXRfY21kKQogewogCWNvbnN0IGNoYXIgKnBhZ2UgPSBjbWRfdG9fcGFnZShnaXRfY21kKTsKLQlzZXRlbnYoIklORk9QQVRIIiwgR0lUX0lORk9fUEFUSCwgMSk7CisJc2V0ZW52KCJJTkZPUEFUSCIsIHN5c3RlbV9wYXRoKEdJVF9JTkZPX1BBVEgpLCAxKTsKIAlleGVjbHAoImluZm8iLCAiaW5mbyIsICJnaXRtYW4iLCBwYWdlLCBOVUxMKTsKIH0KIApAQCAtMzk5LDcgKzM5NCw3IEBACiAgKiBIVE1MLgogICovCiAjaWZuZGVmIG9wZW5faHRtbAotdm9pZCBvcGVuX2h0bWwoY29uc3QgY2hhciAqcGF0aCkKK3N0YXRpYyB2b2lkIG9wZW5faHRtbChjb25zdCBjaGFyICpwYXRoKQogewogCWV4ZWNsX2dpdF9jbWQoIndlYi0tYnJvd3NlIiwgIi1jIiwgImhlbHAuYnJvd3NlciIsIHBhdGgsIE5VTEwpOwogfQpAQCAtNDI0LDcgKzQxOSw3IEBACiAJc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdCk7CiAJZ2l0X2NvbmZpZyhnaXRfaGVscF9jb25maWcsIE5VTEwpOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9oZWxwX29wdGlvbnMsCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2hlbHBfb3B0aW9ucywKIAkJCWJ1aWx0aW5faGVscF91c2FnZSwgMCk7CiAKIAlpZiAoc2hvd19hbGwpIHsKZGlmZiAtLWdpdCBhL2J1aWx0aW4taW5pdC1kYi5jIGIvYnVpbHRpbi1pbml0LWRiLmMKaW5kZXggNmNjOTQ1ZC4uNGE1NjAwNiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1pbml0LWRiLmMKKysrIGIvYnVpbHRpbi1pbml0LWRiLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAkJfQogCX0KIAllbHNlIGlmIChzaGFyZSAmJiBhZGp1c3Rfc2hhcmVkX3Blcm0oZGlyKSkKLQkJZGllKCJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cFxuIiwgZGlyKTsKKwkJZGllKCJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIsIGRpcik7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcHlfdGVtcGxhdGVzXzEoY2hhciAqcGF0aCwgaW50IGJhc2VsZW4sCkBAIC02MSwyMCArNjEsMjAgQEAKIAkJbWVtY3B5KHRlbXBsYXRlICsgdGVtcGxhdGVfYmFzZWxlbiwgZGUtPmRfbmFtZSwgbmFtZWxlbisxKTsKIAkJaWYgKGxzdGF0KHBhdGgsICZzdF9naXQpKSB7CiAJCQlpZiAoZXJybm8gIT0gRU5PRU5UKQotCQkJCWRpZSgiY2Fubm90IHN0YXQgJXMiLCBwYXRoKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCBzdGF0ICclcyciLCBwYXRoKTsKIAkJfQogCQllbHNlCiAJCQlleGlzdHMgPSAxOwogCiAJCWlmIChsc3RhdCh0ZW1wbGF0ZSwgJnN0X3RlbXBsYXRlKSkKLQkJCWRpZSgiY2Fubm90IHN0YXQgdGVtcGxhdGUgJXMiLCB0ZW1wbGF0ZSk7CisJCQlkaWVfZXJybm8oImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciLCB0ZW1wbGF0ZSk7CiAKIAkJaWYgKFNfSVNESVIoc3RfdGVtcGxhdGUuc3RfbW9kZSkpIHsKIAkJCURJUiAqc3ViZGlyID0gb3BlbmRpcih0ZW1wbGF0ZSk7CiAJCQlpbnQgYmFzZWxlbl9zdWIgPSBiYXNlbGVuICsgbmFtZWxlbjsKIAkJCWludCB0ZW1wbGF0ZV9iYXNlbGVuX3N1YiA9IHRlbXBsYXRlX2Jhc2VsZW4gKyBuYW1lbGVuOwogCQkJaWYgKCFzdWJkaXIpCi0JCQkJZGllKCJjYW5ub3Qgb3BlbmRpciAlcyIsIHRlbXBsYXRlKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuZGlyICclcyciLCB0ZW1wbGF0ZSk7CiAJCQlwYXRoW2Jhc2VsZW5fc3ViKytdID0KIAkJCQl0ZW1wbGF0ZVt0ZW1wbGF0ZV9iYXNlbGVuX3N1YisrXSA9ICcvJzsKIAkJCXBhdGhbYmFzZWxlbl9zdWJdID0KQEAgLTkxLDE2ICs5MSwxNyBAQAogCQkJaW50IGxlbjsKIAkJCWxlbiA9IHJlYWRsaW5rKHRlbXBsYXRlLCBsbmssIHNpemVvZihsbmspKTsKIAkJCWlmIChsZW4gPCAwKQotCQkJCWRpZSgiY2Fubm90IHJlYWRsaW5rICVzIiwgdGVtcGxhdGUpOworCQkJCWRpZV9lcnJubygiY2Fubm90IHJlYWRsaW5rICclcyciLCB0ZW1wbGF0ZSk7CiAJCQlpZiAoc2l6ZW9mKGxuaykgPD0gbGVuKQogCQkJCWRpZSgiaW5zYW5lbHkgbG9uZyBzeW1saW5rICVzIiwgdGVtcGxhdGUpOwogCQkJbG5rW2xlbl0gPSAwOwogCQkJaWYgKHN5bWxpbmsobG5rLCBwYXRoKSkKLQkJCQlkaWUoImNhbm5vdCBzeW1saW5rICVzICVzIiwgbG5rLCBwYXRoKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIsIGxuaywgcGF0aCk7CiAJCX0KIAkJZWxzZSBpZiAoU19JU1JFRyhzdF90ZW1wbGF0ZS5zdF9tb2RlKSkgewogCQkJaWYgKGNvcHlfZmlsZShwYXRoLCB0ZW1wbGF0ZSwgc3RfdGVtcGxhdGUuc3RfbW9kZSkpCi0JCQkJZGllKCJjYW5ub3QgY29weSAlcyB0byAlcyIsIHRlbXBsYXRlLCBwYXRoKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIsIHRlbXBsYXRlLAorCQkJCQkgIHBhdGgpOwogCQl9CiAJCWVsc2UKIAkJCWVycm9yKCJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIsIHRlbXBsYXRlKTsKQEAgLTEzMiw4ICsxMzMsNyBAQAogCX0KIAlkaXIgPSBvcGVuZGlyKHRlbXBsYXRlX3BhdGgpOwogCWlmICghZGlyKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogdGVtcGxhdGVzIG5vdCBmb3VuZCAlc1xuIiwKLQkJCXRlbXBsYXRlX2Rpcik7CisJCXdhcm5pbmcoInRlbXBsYXRlcyBub3QgZm91bmQgJXMiLCB0ZW1wbGF0ZV9kaXIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNDYsOCArMTQ2LDggQEAKIAogCWlmIChyZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uICYmCiAJICAgIHJlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb24gIT0gR0lUX1JFUE9fVkVSU0lPTikgewotCQlmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IG5vdCBjb3B5aW5nIHRlbXBsYXRlcyBvZiAiCi0JCQkiYSB3cm9uZyBmb3JtYXQgdmVyc2lvbiAlZCBmcm9tICclcydcbiIsCisJCXdhcm5pbmcoIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBvZiAiCisJCQkiYSB3cm9uZyBmb3JtYXQgdmVyc2lvbiAlZCBmcm9tICclcyciLAogCQkJcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbiwKIAkJCXRlbXBsYXRlX2Rpcik7CiAJCWNsb3NlZGlyKGRpcik7CkBAIC0xOTcsNiArMTk3LDggQEAKIAogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAlpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID0gaW5pdF9pc19iYXJlX3JlcG9zaXRvcnk7CisKKwkvKiByZWFkaW5nIGV4aXN0aW5nIGNvbmZpZyBtYXkgaGF2ZSBvdmVyd3JvdGUgaXQgKi8KIAlpZiAoaW5pdF9zaGFyZWRfcmVwb3NpdG9yeSAhPSAtMSkKIAkJc2hhcmVkX3JlcG9zaXRvcnkgPSBpbml0X3NoYXJlZF9yZXBvc2l0b3J5OwogCkBAIC0zMTUsMTIgKzMxNywxNSBAQAogCQkgKiBhbmQgY29tcGF0aWJpbGl0eSB2YWx1ZXMgZm9yIFBFUk1fR1JPVVAgYW5kCiAJCSAqIFBFUk1fRVZFUllCT0RZLgogCQkgKi8KLQkJaWYgKHNoYXJlZF9yZXBvc2l0b3J5ID09IFBFUk1fR1JPVVApCisJCWlmIChzaGFyZWRfcmVwb3NpdG9yeSA8IDApCisJCQkvKiBmb3JjZSB0byB0aGUgbW9kZSB2YWx1ZSAqLworCQkJc3ByaW50ZihidWYsICIwJW8iLCAtc2hhcmVkX3JlcG9zaXRvcnkpOworCQllbHNlIGlmIChzaGFyZWRfcmVwb3NpdG9yeSA9PSBQRVJNX0dST1VQKQogCQkJc3ByaW50ZihidWYsICIlZCIsIE9MRF9QRVJNX0dST1VQKTsKIAkJZWxzZSBpZiAoc2hhcmVkX3JlcG9zaXRvcnkgPT0gUEVSTV9FVkVSWUJPRFkpCiAJCQlzcHJpbnRmKGJ1ZiwgIiVkIiwgT0xEX1BFUk1fRVZFUllCT0RZKTsKIAkJZWxzZQotCQkJc3ByaW50ZihidWYsICIwJW8iLCBzaGFyZWRfcmVwb3NpdG9yeSk7CisJCQlkaWUoIm9vcHMiKTsKIAkJZ2l0X2NvbmZpZ19zZXQoImNvcmUuc2hhcmVkcmVwb3NpdG9yeSIsIGJ1Zik7CiAJCWdpdF9jb25maWdfc2V0KCJyZWNlaXZlLmRlbnlOb25GYXN0Zm9yd2FyZHMiLCAidHJ1ZSIpOwogCX0KQEAgLTM0Niw3ICszNTEsNyBAQAogCWlmICghc3RyY21wKCIuIiwgZ2l0X2RpcikpCiAJCXJldHVybiAxOwogCWlmICghZ2V0Y3dkKGN3ZCwgc2l6ZW9mKGN3ZCkpKQotCQlkaWUoImNhbm5vdCB0ZWxsIGN3ZCIpOworCQlkaWVfZXJybm8oImNhbm5vdCB0ZWxsIGN3ZCIpOwogCWlmICghc3RyY21wKGdpdF9kaXIsIGN3ZCkpCiAJCXJldHVybiAxOwogCS8qCkBAIC00MDAsNiArNDA1LDkgQEAKIAkJCXVzYWdlKGluaXRfZGJfdXNhZ2UpOwogCX0KIAorCWlmIChpbml0X3NoYXJlZF9yZXBvc2l0b3J5ICE9IC0xKQorCQlzaGFyZWRfcmVwb3NpdG9yeSA9IGluaXRfc2hhcmVkX3JlcG9zaXRvcnk7CisKIAkvKgogCSAqIEdJVF9XT1JLX1RSRUUgbWFrZXMgc2Vuc2Ugb25seSBpbiBjb25qdW5jdGlvbiB3aXRoIEdJVF9ESVIKIAkgKiB3aXRob3V0IC0tYmFyZS4gIENhdGNoIHRoZSBlcnJvciBlYXJseS4KQEAgLTQzMywxMSArNDQxLDExIEBACiAJCWlmICghZ2l0X3dvcmtfdHJlZV9jZmcpIHsKIAkJCWdpdF93b3JrX3RyZWVfY2ZnID0geGNhbGxvYyhQQVRIX01BWCwgMSk7CiAJCQlpZiAoIWdldGN3ZChnaXRfd29ya190cmVlX2NmZywgUEFUSF9NQVgpKQotCQkJCWRpZSAoIkNhbm5vdCBhY2Nlc3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4iKTsKKwkJCQlkaWVfZXJybm8gKCJDYW5ub3QgYWNjZXNzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKIAkJfQogCQlpZiAoYWNjZXNzKGdldF9naXRfd29ya190cmVlKCksIFhfT0spKQotCQkJZGllICgiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIsCi0JCQkgICAgIGdldF9naXRfd29ya190cmVlKCkpOworCQkJZGllX2Vycm5vICgiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIsCisJCQkJICAgZ2V0X2dpdF93b3JrX3RyZWUoKSk7CiAJfQogCiAJc2V0X2dpdF9kaXIobWFrZV9hYnNvbHV0ZV9wYXRoKGdpdF9kaXIpKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tbG9nLmMgYi9idWlsdGluLWxvZy5jCmluZGV4IDYwZjhkZDguLjMwMzU4MTYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbG9nLmMKKysrIGIvYnVpbHRpbi1sb2cuYwpAQCAtMTYsNiArMTYsOSBAQAogI2luY2x1ZGUgInBhdGNoLWlkcy5oIgogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAjaW5jbHVkZSAic2hvcnRsb2cuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAogLyogU2V0IGEgZGVmYXVsdCBkYXRlLXRpbWUgZm9ybWF0IGZvciBnaXQgbG9nICgibG9nLmRhdGUiIGNvbmZpZyB2YXJpYWJsZSkgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X2RhdGVfbW9kZSA9IE5VTEw7CkBAIC05MSw3ICs5NCw3IEBACiAJcHJpbnRmKCJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iLCBuciwgc3RhZ2UpOwogfQogCi1zdHJ1Y3QgaXRpbWVydmFsIGVhcmx5X291dHB1dF90aW1lcjsKK3N0YXRpYyBzdHJ1Y3QgaXRpbWVydmFsIGVhcmx5X291dHB1dF90aW1lcjsKIAogc3RhdGljIHZvaWQgbG9nX3Nob3dfZWFybHkoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCiB7CkBAIC0yNDksMjIgKzI1MiwxMyBAQAogCiBzdGF0aWMgdm9pZCBzaG93X3RhZ2dlcihjaGFyICpidWYsIGludCBsZW4sIHN0cnVjdCByZXZfaW5mbyAqcmV2KQogewotCWNoYXIgKmVtYWlsX2VuZCwgKnA7Ci0JdW5zaWduZWQgbG9uZyBkYXRlOwotCWludCB0ejsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOwogCi0JZW1haWxfZW5kID0gbWVtY2hyKGJ1ZiwgJz4nLCBsZW4pOwotCWlmICghZW1haWxfZW5kKQotCQlyZXR1cm47Ci0JcCA9ICsrZW1haWxfZW5kOwotCXdoaWxlIChpc3NwYWNlKCpwKSkKLQkJcCsrOwotCWRhdGUgPSBzdHJ0b3VsKHAsICZwLCAxMCk7Ci0Jd2hpbGUgKGlzc3BhY2UoKnApKQotCQlwKys7Ci0JdHogPSAoaW50KXN0cnRvbChwLCBOVUxMLCAxMCk7Ci0JcHJpbnRmKCJUYWdnZXI6ICUuKnNcbkRhdGU6ICAgJXNcbiIsIChpbnQpKGVtYWlsX2VuZCAtIGJ1ZiksIGJ1ZiwKLQkgICAgICAgc2hvd19kYXRlKGRhdGUsIHR6LCByZXYtPmRhdGVfbW9kZSkpOworCXBwX3VzZXJfaW5mbygiVGFnZ2VyIiwgcmV2LT5jb21taXRfZm9ybWF0LCAmb3V0LCBidWYsIHJldi0+ZGF0ZV9tb2RlLAorCQlnaXRfbG9nX291dHB1dF9lbmNvZGluZyA/CisJCWdpdF9sb2dfb3V0cHV0X2VuY29kaW5nOiBnaXRfY29tbWl0X2VuY29kaW5nKTsKKwlwcmludGYoIiVzIiwgb3V0LmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJm91dCk7CiB9CiAKIHN0YXRpYyBpbnQgc2hvd19vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IHNob3dfdGFnX29iamVjdCwKQEAgLTMzNSwxMSArMzI5LDE0IEBACiAJCWNhc2UgT0JKX1RBRzogewogCQkJc3RydWN0IHRhZyAqdCA9IChzdHJ1Y3QgdGFnICopbzsKIAorCQkJaWYgKHJldi5zaG93bl9vbmUpCisJCQkJcHV0Y2hhcignXG4nKTsKIAkJCXByaW50ZigiJXN0YWcgJXMlc1xuIiwKIAkJCQkJZGlmZl9nZXRfY29sb3Jfb3B0KCZyZXYuZGlmZm9wdCwgRElGRl9DT01NSVQpLAogCQkJCQl0LT50YWcsCiAJCQkJCWRpZmZfZ2V0X2NvbG9yX29wdCgmcmV2LmRpZmZvcHQsIERJRkZfUkVTRVQpKTsKIAkJCXJldCA9IHNob3dfb2JqZWN0KG8tPnNoYTEsIDEsICZyZXYpOworCQkJcmV2LnNob3duX29uZSA9IDE7CiAJCQlpZiAocmV0KQogCQkJCWJyZWFrOwogCQkJbyA9IHBhcnNlX29iamVjdCh0LT50YWdnZWQtPnNoYTEpOwpAQCAtMzUxLDEyICszNDgsMTUgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgT0JKX1RSRUU6CisJCQlpZiAocmV2LnNob3duX29uZSkKKwkJCQlwdXRjaGFyKCdcbicpOwogCQkJcHJpbnRmKCIlc3RyZWUgJXMlc1xuXG4iLAogCQkJCQlkaWZmX2dldF9jb2xvcl9vcHQoJnJldi5kaWZmb3B0LCBESUZGX0NPTU1JVCksCiAJCQkJCW5hbWUsCiAJCQkJCWRpZmZfZ2V0X2NvbG9yX29wdCgmcmV2LmRpZmZvcHQsIERJRkZfUkVTRVQpKTsKIAkJCXJlYWRfdHJlZV9yZWN1cnNpdmUoKHN0cnVjdCB0cmVlICopbywgIiIsIDAsIDAsIE5VTEwsCiAJCQkJCXNob3dfdHJlZV9vYmplY3QsIE5VTEwpOworCQkJcmV2LnNob3duX29uZSA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBPQkpfQ09NTUlUOgogCQkJcmV2LnBlbmRpbmcubnIgPSByZXYucGVuZGluZy5hbGxvYyA9IDA7CkBAIC00MjQsMTggKzQyNCwxMyBAQAogfQogCiAvKiBmb3JtYXQtcGF0Y2ggKi8KLSNkZWZpbmUgRk9STUFUX1BBVENIX05BTUVfTUFYIDY0Ci0KLXN0YXRpYyBpbnQgaXN0aXRsZWNoYXIoY2hhciBjKQotewotCXJldHVybiAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8IChjID49ICdBJyAmJiBjIDw9ICdaJykgfHwKLQkJKGMgPj0gJzAnICYmIGMgPD0gJzknKSB8fCBjID09ICcuJyB8fCBjID09ICdfJzsKLX0KIAogc3RhdGljIGNvbnN0IGNoYXIgKmZtdF9wYXRjaF9zdWZmaXggPSAiLnBhdGNoIjsKIHN0YXRpYyBpbnQgbnVtYmVyZWQgPSAwOwogc3RhdGljIGludCBhdXRvX251bWJlciA9IDE7CiAKK3N0YXRpYyBjaGFyICpkZWZhdWx0X2F0dGFjaCA9IE5VTEw7CisKIHN0YXRpYyBjaGFyICoqZXh0cmFfaGRyOwogc3RhdGljIGludCBleHRyYV9oZHJfbnI7CiBzdGF0aWMgaW50IGV4dHJhX2hkcl9hbGxvYzsKQEAgLTQ2Nyw2ICs0NjIsMTEgQEAKIAlleHRyYV9oZHJbZXh0cmFfaGRyX25yKytdID0geHN0cm5kdXAodmFsdWUsIGxlbik7CiB9CiAKKyNkZWZpbmUgVEhSRUFEX1NIQUxMT1cgMQorI2RlZmluZSBUSFJFQURfREVFUCAyCitzdGF0aWMgaW50IHRocmVhZCA9IDA7CitzdGF0aWMgaW50IGRvX3NpZ25vZmYgPSAwOworCiBzdGF0aWMgaW50IGdpdF9mb3JtYXRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5oZWFkZXJzIikpIHsKQEAgLTQ5Niw5NCArNDk2LDYwIEBACiAJCWF1dG9fbnVtYmVyID0gYXV0b19udW1iZXIgJiYgbnVtYmVyZWQ7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuYXR0YWNoIikpIHsKKwkJaWYgKHZhbHVlICYmICp2YWx1ZSkKKwkJCWRlZmF1bHRfYXR0YWNoID0geHN0cmR1cCh2YWx1ZSk7CisJCWVsc2UKKwkJCWRlZmF1bHRfYXR0YWNoID0geHN0cmR1cChnaXRfdmVyc2lvbl9zdHJpbmcpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnRocmVhZCIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImRlZXAiKSkgeworCQkJdGhyZWFkID0gVEhSRUFEX0RFRVA7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJzaGFsbG93IikpIHsKKwkJCXRocmVhZCA9IFRIUkVBRF9TSEFMTE9XOworCQkJcmV0dXJuIDA7CisJCX0KKwkJdGhyZWFkID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpICYmIFRIUkVBRF9TSEFMTE9XOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnNpZ25vZmYiKSkgeworCQlkb19zaWdub2ZmID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CiAKIAlyZXR1cm4gZ2l0X2xvZ19jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCi0KLXN0YXRpYyBjb25zdCBjaGFyICpnZXRfb25lbGluZV9mb3JfZmlsZW5hbWUoc3RydWN0IGNvbW1pdCAqY29tbWl0LAotCQkJCQkgICAgaW50IGtlZXBfc3ViamVjdCkKLXsKLQlzdGF0aWMgY2hhciBmaWxlbmFtZVtQQVRIX01BWF07Ci0JY2hhciAqc29sOwotCWludCBsZW4gPSAwOwotCWludCBzdWZmaXhfbGVuID0gc3RybGVuKGZtdF9wYXRjaF9zdWZmaXgpICsgMTsKLQotCXNvbCA9IHN0cnN0cihjb21taXQtPmJ1ZmZlciwgIlxuXG4iKTsKLQlpZiAoIXNvbCkKLQkJZmlsZW5hbWVbMF0gPSAnXDAnOwotCWVsc2UgewotCQlpbnQgaiwgc3BhY2UgPSAwOwotCi0JCXNvbCArPSAyOwotCQkvKiBzdHJpcCBbUEFUQ0hdIG9yIFtQQVRDSCBibGFibGFdICovCi0JCWlmICgha2VlcF9zdWJqZWN0ICYmICFwcmVmaXhjbXAoc29sLCAiW1BBVENIIikpIHsKLQkJCWNoYXIgKmVvcyA9IHN0cmNocihzb2wgKyA2LCAnXScpOwotCQkJaWYgKGVvcykgewotCQkJCXdoaWxlIChpc3NwYWNlKCplb3MpKQotCQkJCQllb3MrKzsKLQkJCQlzb2wgPSBlb3M7Ci0JCQl9Ci0JCX0KLQotCQlmb3IgKGogPSAwOwotCQkgICAgIGogPCBGT1JNQVRfUEFUQ0hfTkFNRV9NQVggLSBzdWZmaXhfbGVuIC0gNSAmJgotCQkJICAgICBsZW4gPCBzaXplb2YoZmlsZW5hbWUpIC0gc3VmZml4X2xlbiAmJgotCQkJICAgICBzb2xbal0gJiYgc29sW2pdICE9ICdcbic7Ci0JCSAgICAgaisrKSB7Ci0JCQlpZiAoaXN0aXRsZWNoYXIoc29sW2pdKSkgewotCQkJCWlmIChzcGFjZSkgewotCQkJCQlmaWxlbmFtZVtsZW4rK10gPSAnLSc7Ci0JCQkJCXNwYWNlID0gMDsKLQkJCQl9Ci0JCQkJZmlsZW5hbWVbbGVuKytdID0gc29sW2pdOwotCQkJCWlmIChzb2xbal0gPT0gJy4nKQotCQkJCQl3aGlsZSAoc29sW2ogKyAxXSA9PSAnLicpCi0JCQkJCQlqKys7Ci0JCQl9IGVsc2UKLQkJCQlzcGFjZSA9IDE7Ci0JCX0KLQkJd2hpbGUgKGZpbGVuYW1lW2xlbiAtIDFdID09ICcuJwotCQkgICAgICAgfHwgZmlsZW5hbWVbbGVuIC0gMV0gPT0gJy0nKQotCQkJbGVuLS07Ci0JCWZpbGVuYW1lW2xlbl0gPSAnXDAnOwotCX0KLQlyZXR1cm4gZmlsZW5hbWU7Ci19Ci0KIHN0YXRpYyBGSUxFICpyZWFsc3Rkb3V0ID0gTlVMTDsKIHN0YXRpYyBjb25zdCBjaGFyICpvdXRwdXRfZGlyZWN0b3J5ID0gTlVMTDsKIHN0YXRpYyBpbnQgb3V0ZGlyX29mZnNldDsKIAotc3RhdGljIGludCByZW9wZW5fc3Rkb3V0KGNvbnN0IGNoYXIgKm9uZWxpbmUsIGludCBuciwgaW50IHRvdGFsKQorc3RhdGljIGludCByZW9wZW5fc3Rkb3V0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IHJldl9pbmZvICpyZXYpCiB7Ci0JY2hhciBmaWxlbmFtZVtQQVRIX01BWF07Ci0JaW50IGxlbiA9IDA7CisJc3RydWN0IHN0cmJ1ZiBmaWxlbmFtZSA9IFNUUkJVRl9JTklUOwogCWludCBzdWZmaXhfbGVuID0gc3RybGVuKGZtdF9wYXRjaF9zdWZmaXgpICsgMTsKIAogCWlmIChvdXRwdXRfZGlyZWN0b3J5KSB7Ci0JCWxlbiA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMiLAotCQkJCW91dHB1dF9kaXJlY3RvcnkpOwotCQlpZiAobGVuID49Ci0JCSAgICBzaXplb2YoZmlsZW5hbWUpIC0gRk9STUFUX1BBVENIX05BTUVfTUFYIC0gc3VmZml4X2xlbikKKwkJc3RyYnVmX2FkZHN0cigmZmlsZW5hbWUsIG91dHB1dF9kaXJlY3RvcnkpOworCQlpZiAoZmlsZW5hbWUubGVuID49CisJCSAgICBQQVRIX01BWCAtIEZPUk1BVF9QQVRDSF9OQU1FX01BWCAtIHN1ZmZpeF9sZW4pCiAJCQlyZXR1cm4gZXJyb3IoIm5hbWUgb2Ygb3V0cHV0IGRpcmVjdG9yeSBpcyB0b28gbG9uZyIpOwotCQlpZiAoZmlsZW5hbWVbbGVuIC0gMV0gIT0gJy8nKQotCQkJZmlsZW5hbWVbbGVuKytdID0gJy8nOworCQlpZiAoZmlsZW5hbWUuYnVmW2ZpbGVuYW1lLmxlbiAtIDFdICE9ICcvJykKKwkJCXN0cmJ1Zl9hZGRjaCgmZmlsZW5hbWUsICcvJyk7CiAJfQogCi0JaWYgKCFvbmVsaW5lKQotCQlsZW4gKz0gc3ByaW50ZihmaWxlbmFtZSArIGxlbiwgIiVkIiwgbnIpOwotCWVsc2UgewotCQlsZW4gKz0gc3ByaW50ZihmaWxlbmFtZSArIGxlbiwgIiUwNGQtIiwgbnIpOwotCQlsZW4gKz0gc25wcmludGYoZmlsZW5hbWUgKyBsZW4sIHNpemVvZihmaWxlbmFtZSkgLSBsZW4gLSAxCi0JCQkJLSBzdWZmaXhfbGVuLCAiJXMiLCBvbmVsaW5lKTsKLQkJc3RyY3B5KGZpbGVuYW1lICsgbGVuLCBmbXRfcGF0Y2hfc3VmZml4KTsKLQl9CisJZ2V0X3BhdGNoX2ZpbGVuYW1lKGNvbW1pdCwgcmV2LT5uciwgZm10X3BhdGNoX3N1ZmZpeCwgJmZpbGVuYW1lKTsKIAotCWZwcmludGYocmVhbHN0ZG91dCwgIiVzXG4iLCBmaWxlbmFtZSArIG91dGRpcl9vZmZzZXQpOwotCWlmIChmcmVvcGVuKGZpbGVuYW1lLCAidyIsIHN0ZG91dCkgPT0gTlVMTCkKLQkJcmV0dXJuIGVycm9yKCJDYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIixmaWxlbmFtZSk7CisJaWYgKCFESUZGX09QVF9UU1QoJnJldi0+ZGlmZm9wdCwgUVVJRVQpKQorCQlmcHJpbnRmKHJlYWxzdGRvdXQsICIlc1xuIiwgZmlsZW5hbWUuYnVmICsgb3V0ZGlyX29mZnNldCk7CiAKKwlpZiAoZnJlb3BlbihmaWxlbmFtZS5idWYsICJ3Iiwgc3Rkb3V0KSA9PSBOVUxMKQorCQlyZXR1cm4gZXJyb3IoIkNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiLCBmaWxlbmFtZS5idWYpOworCisJc3RyYnVmX3JlbGVhc2UoJmZpbGVuYW1lKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjUzLDcgKzYxOSw2IEBACiAJCQkgICAgICBpbnQgbnIsIHN0cnVjdCBjb21taXQgKipsaXN0LCBzdHJ1Y3QgY29tbWl0ICpoZWFkKQogewogCWNvbnN0IGNoYXIgKmNvbW1pdHRlcjsKLQljaGFyICpoZWFkX3NoYTE7CiAJY29uc3QgY2hhciAqc3ViamVjdF9zdGFydCA9IE5VTEw7CiAJY29uc3QgY2hhciAqYm9keSA9ICIqKiogU1VCSkVDVCBIRVJFICoqKlxuXG4qKiogQkxVUkIgSEVSRSAqKipcbiI7CiAJY29uc3QgY2hhciAqbXNnOwpAQCAtNjYxLDI0ICs2MjYsNDQgQEAKIAlzdHJ1Y3Qgc2hvcnRsb2cgbG9nOwogCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKIAlpbnQgaTsKLQljb25zdCBjaGFyICplbmNvZGluZyA9ICJ1dGYtOCI7CisJY29uc3QgY2hhciAqZW5jb2RpbmcgPSAiVVRGLTgiOwogCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0czsKIAlpbnQgbmVlZF84Yml0X2N0ZSA9IDA7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gTlVMTDsKIAogCWlmIChyZXYtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfRU1BSUwpCiAJCWRpZSgiQ292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIpOwogCi0JaWYgKCF1c2Vfc3Rkb3V0ICYmIHJlb3Blbl9zdGRvdXQobnVtYmVyZWRfZmlsZXMgPwotCQkJCU5VTEwgOiAiY292ZXItbGV0dGVyIiwgMCwgcmV2LT50b3RhbCkpCisJY29tbWl0dGVyID0gZ2l0X2NvbW1pdHRlcl9pbmZvKDApOworCisJaWYgKCFudW1iZXJlZF9maWxlcykgeworCQkvKgorCQkgKiBXZSBmYWtlIGEgY29tbWl0IGZvciB0aGUgY292ZXIgbGV0dGVyIHNvIHdlIGdldCB0aGUgZmlsZW5hbWUKKwkJICogZGVzaXJlZC4KKwkJICovCisJCWNvbW1pdCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpjb21taXQpKTsKKwkJY29tbWl0LT5idWZmZXIgPSB4bWFsbG9jKDQwMCk7CisJCXNucHJpbnRmKGNvbW1pdC0+YnVmZmVyLCA0MDAsCisJCQkidHJlZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXG4iCisJCQkicGFyZW50ICVzXG4iCisJCQkiYXV0aG9yICVzXG4iCisJCQkiY29tbWl0dGVyICVzXG5cbiIKKwkJCSJjb3ZlciBsZXR0ZXJcbiIsCisJCQlzaGExX3RvX2hleChoZWFkLT5vYmplY3Quc2hhMSksIGNvbW1pdHRlciwgY29tbWl0dGVyKTsKKwl9CisKKwlpZiAoIXVzZV9zdGRvdXQgJiYgcmVvcGVuX3N0ZG91dChjb21taXQsIHJldikpCiAJCXJldHVybjsKIAotCWhlYWRfc2hhMSA9IHNoYTFfdG9faGV4KGhlYWQtPm9iamVjdC5zaGExKTsKKwlpZiAoY29tbWl0KSB7CiAKLQlsb2dfd3JpdGVfZW1haWxfaGVhZGVycyhyZXYsIGhlYWRfc2hhMSwgJnN1YmplY3Rfc3RhcnQsICZleHRyYV9oZWFkZXJzLAorCQlmcmVlKGNvbW1pdC0+YnVmZmVyKTsKKwkJZnJlZShjb21taXQpOworCX0KKworCWxvZ193cml0ZV9lbWFpbF9oZWFkZXJzKHJldiwgaGVhZCwgJnN1YmplY3Rfc3RhcnQsICZleHRyYV9oZWFkZXJzLAogCQkJCSZuZWVkXzhiaXRfY3RlKTsKIAotCWNvbW1pdHRlciA9IGdpdF9jb21taXR0ZXJfaW5mbygwKTsKLQogCW1zZyA9IGJvZHk7CiAJcHBfdXNlcl9pbmZvKE5VTEwsIENNSVRfRk1UX0VNQUlMLCAmc2IsIGNvbW1pdHRlciwgREFURV9SRkMyODIyLAogCQkgICAgIGVuY29kaW5nKTsKQEAgLTc2MiwxOSArNzQ3LDEyMCBAQAogCQkJCSAgICAgICBvdXRwdXRfZGlyZWN0b3J5KSk7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9mb3JtYXRfcGF0Y2hfdXNhZ2VbXSA9IHsKKwkiZ2l0IGZvcm1hdC1wYXRjaCBbb3B0aW9uc10gWzxzaW5jZT4gfCA8cmV2aXNpb24gcmFuZ2U+XSIsCisJTlVMTAorfTsKKworc3RhdGljIGludCBrZWVwX3N1YmplY3QgPSAwOworCitzdGF0aWMgaW50IGtlZXBfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwkoKHN0cnVjdCByZXZfaW5mbyAqKW9wdC0+dmFsdWUpLT50b3RhbCA9IC0xOworCWtlZXBfc3ViamVjdCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3ViamVjdF9wcmVmaXggPSAwOworCitzdGF0aWMgaW50IHN1YmplY3RfcHJlZml4X2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgIGludCB1bnNldCkKK3sKKwlzdWJqZWN0X3ByZWZpeCA9IDE7CisJKChzdHJ1Y3QgcmV2X2luZm8gKilvcHQtPnZhbHVlKS0+c3ViamVjdF9wcmVmaXggPSBhcmc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnVtYmVyZWRfY21kbGluZV9vcHQgPSAwOworCitzdGF0aWMgaW50IG51bWJlcmVkX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgICBpbnQgdW5zZXQpCit7CisJKihpbnQgKilvcHQtPnZhbHVlID0gbnVtYmVyZWRfY21kbGluZV9vcHQgPSB1bnNldCA/IDAgOiAxOworCWlmICh1bnNldCkKKwkJYXV0b19udW1iZXIgPSAgMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBub19udW1iZXJlZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCQlpbnQgdW5zZXQpCit7CisJcmV0dXJuIG51bWJlcmVkX2NhbGxiYWNrKG9wdCwgYXJnLCAxKTsKK30KKworc3RhdGljIGludCBvdXRwdXRfZGlyZWN0b3J5X2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgICAgaW50IHVuc2V0KQoreworCWNvbnN0IGNoYXIgKipkaXIgPSAoY29uc3QgY2hhciAqKilvcHQtPnZhbHVlOworCWlmICgqZGlyKQorCQlkaWUoIlR3byBvdXRwdXQgZGlyZWN0b3JpZXM/Iik7CisJKmRpciA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aHJlYWRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgKnRocmVhZCA9IChpbnQgKilvcHQtPnZhbHVlOworCWlmICh1bnNldCkKKwkJKnRocmVhZCA9IDA7CisJZWxzZSBpZiAoIWFyZyB8fCAhc3RyY21wKGFyZywgInNoYWxsb3ciKSkKKwkJKnRocmVhZCA9IFRIUkVBRF9TSEFMTE9XOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZGVlcCIpKQorCQkqdGhyZWFkID0gVEhSRUFEX0RFRVA7CisJZWxzZQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdHRhY2hfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldiA9IChzdHJ1Y3QgcmV2X2luZm8gKilvcHQtPnZhbHVlOworCWlmICh1bnNldCkKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gTlVMTDsKKwllbHNlIGlmIChhcmcpCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IGFyZzsKKwllbHNlCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IGdpdF92ZXJzaW9uX3N0cmluZzsKKwlyZXYtPm5vX2lubGluZSA9IHVuc2V0ID8gMCA6IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5saW5lX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHJldl9pbmZvICpyZXYgPSAoc3RydWN0IHJldl9pbmZvICopb3B0LT52YWx1ZTsKKwlpZiAodW5zZXQpCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IE5VTEw7CisJZWxzZSBpZiAoYXJnKQorCQlyZXYtPm1pbWVfYm91bmRhcnkgPSBhcmc7CisJZWxzZQorCQlyZXYtPm1pbWVfYm91bmRhcnkgPSBnaXRfdmVyc2lvbl9zdHJpbmc7CisJcmV2LT5ub19pbmxpbmUgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhlYWRlcl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWFkZF9oZWFkZXIoYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjY19jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCUFMTE9DX0dST1coZXh0cmFfY2MsIGV4dHJhX2NjX25yICsgMSwgZXh0cmFfY2NfYWxsb2MpOworCWV4dHJhX2NjW2V4dHJhX2NjX25yKytdID0geHN0cmR1cChhcmcpOworCXJldHVybiAwOworfQorCiBpbnQgY21kX2Zvcm1hdF9wYXRjaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CiAJc3RydWN0IGNvbW1pdCAqKmxpc3QgPSBOVUxMOwogCXN0cnVjdCByZXZfaW5mbyByZXY7Ci0JaW50IG5yID0gMCwgdG90YWwsIGksIGo7CisJaW50IG5yID0gMCwgdG90YWwsIGk7CiAJaW50IHVzZV9zdGRvdXQgPSAwOwogCWludCBzdGFydF9udW1iZXIgPSAtMTsKLQlpbnQga2VlcF9zdWJqZWN0ID0gMDsKIAlpbnQgbnVtYmVyZWRfZmlsZXMgPSAwOwkJLyogX2p1c3RfIG51bWJlcnMgKi8KLQlpbnQgc3ViamVjdF9wcmVmaXggPSAwOwogCWludCBpZ25vcmVfaWZfaW5fdXBzdHJlYW0gPSAwOwotCWludCB0aHJlYWQgPSAwOwogCWludCBjb3Zlcl9sZXR0ZXIgPSAwOwogCWludCBib3VuZGFyeV9jb3VudCA9IDA7CiAJaW50IG5vX2JpbmFyeV9kaWZmID0gMDsKQEAgLTc4Myw2ICs4NjksNTcgQEAKIAlzdHJ1Y3QgcGF0Y2hfaWRzIGlkczsKIAljaGFyICphZGRfc2lnbm9mZiA9IE5VTEw7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fZm9ybWF0X3BhdGNoX29wdGlvbnNbXSA9IHsKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICduJywgIm51bWJlcmVkIiwgJm51bWJlcmVkLCBOVUxMLAorCQkJICAgICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIiwKKwkJCSAgICBQQVJTRV9PUFRfTk9BUkcsIG51bWJlcmVkX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnTicsICJuby1udW1iZXJlZCIsICZudW1iZXJlZCwgTlVMTCwKKwkJCSAgICAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiLAorCQkJICAgIFBBUlNFX09QVF9OT0FSRywgbm9fbnVtYmVyZWRfY2FsbGJhY2sgfSwKKwkJT1BUX0JPT0xFQU4oJ3MnLCAic2lnbm9mZiIsICZkb19zaWdub2ZmLCAiYWRkIFNpZ25lZC1vZmYtYnk6IiksCisJCU9QVF9CT09MRUFOKDAsICJzdGRvdXQiLCAmdXNlX3N0ZG91dCwKKwkJCSAgICAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiKSwKKwkJT1BUX0JPT0xFQU4oMCwgImNvdmVyLWxldHRlciIsICZjb3Zlcl9sZXR0ZXIsCisJCQkgICAgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIiksCisJCU9QVF9CT09MRUFOKDAsICJudW1iZXJlZC1maWxlcyIsICZudW1iZXJlZF9maWxlcywKKwkJCSAgICAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIiksCisJCU9QVF9TVFJJTkcoMCwgInN1ZmZpeCIsICZmbXRfcGF0Y2hfc3VmZml4LCAic2Z4IiwKKwkJCSAgICAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciKSwKKwkJT1BUX0lOVEVHRVIoMCwgInN0YXJ0LW51bWJlciIsICZzdGFydF9udW1iZXIsCisJCQkgICAgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJzdWJqZWN0LXByZWZpeCIsICZyZXYsICJwcmVmaXgiLAorCQkJICAgICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iLAorCQkJICAgIFBBUlNFX09QVF9OT05FRywgc3ViamVjdF9wcmVmaXhfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdvJywgIm91dHB1dC1kaXJlY3RvcnkiLCAmb3V0cHV0X2RpcmVjdG9yeSwKKwkJCSAgICAiZGlyIiwgInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIsCisJCQkgICAgUEFSU0VfT1BUX05PTkVHLCBvdXRwdXRfZGlyZWN0b3J5X2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnaycsICJrZWVwLXN1YmplY3QiLCAmcmV2LCBOVUxMLAorCQkJICAgICJkb24ndCBzdHJpcC9hZGQgW1BBVENIXSIsCisJCQkgICAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBrZWVwX2NhbGxiYWNrIH0sCisJCU9QVF9CT09MRUFOKDAsICJuby1iaW5hcnkiLCAmbm9fYmluYXJ5X2RpZmYsCisJCQkgICAgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiKSwKKwkJT1BUX0JPT0xFQU4oMCwgImlnbm9yZS1pZi1pbi11cHN0cmVhbSIsICZpZ25vcmVfaWZfaW5fdXBzdHJlYW0sCisJCQkgICAgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIpLAorCQlPUFRfR1JPVVAoIk1lc3NhZ2luZyIpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImFkZC1oZWFkZXIiLCBOVUxMLCAiaGVhZGVyIiwKKwkJCSAgICAiYWRkIGVtYWlsIGhlYWRlciIsIFBBUlNFX09QVF9OT05FRywKKwkJCSAgICBoZWFkZXJfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJjYyIsIE5VTEwsICJlbWFpbCIsICJhZGQgQ2M6IGhlYWRlciIsCisJCQkgICAgUEFSU0VfT1BUX05PTkVHLCBjY19jYWxsYmFjayB9LAorCQlPUFRfU1RSSU5HKDAsICJpbi1yZXBseS10byIsICZpbl9yZXBseV90bywgIm1lc3NhZ2UtaWQiLAorCQkJICAgICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJhdHRhY2giLCAmcmV2LCAiYm91bmRhcnkiLAorCQkJICAgICJhdHRhY2ggdGhlIHBhdGNoIiwgUEFSU0VfT1BUX09QVEFSRywKKwkJCSAgICBhdHRhY2hfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJpbmxpbmUiLCAmcmV2LCAiYm91bmRhcnkiLAorCQkJICAgICJpbmxpbmUgdGhlIHBhdGNoIiwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJICAgIGlubGluZV9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInRocmVhZCIsICZ0aHJlYWQsICJzdHlsZSIsCisJCQkgICAgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIiwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHLCB0aHJlYWRfY2FsbGJhY2sgfSwKKwkJT1BUX0VORCgpCisJfTsKIAogCWdpdF9jb25maWcoZ2l0X2Zvcm1hdF9jb25maWcsIE5VTEwpOwogCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7CkBAIC03OTUsMTAwICs5MzIsMjkgQEAKIAogCXJldi5zdWJqZWN0X3ByZWZpeCA9IGZtdF9wYXRjaF9zdWJqZWN0X3ByZWZpeDsKIAorCWlmIChkZWZhdWx0X2F0dGFjaCkgeworCQlyZXYubWltZV9ib3VuZGFyeSA9IGRlZmF1bHRfYXR0YWNoOworCQlyZXYubm9faW5saW5lID0gMTsKKwl9CisKIAkvKgogCSAqIFBhcnNlIHRoZSBhcmd1bWVudHMgYmVmb3JlIHNldHVwX3JldmlzaW9ucygpLCBvciBzb21ldGhpbmcKIAkgKiBsaWtlICJnaXQgZm9ybWF0LXBhdGNoIC1vIGExMjMgSEVBRF4uLiIgbWF5IGZhaWw7IGExMjMgaXMKIAkgKiBwb3NzaWJseSBhIHZhbGlkIFNIQTEuCiAJICovCi0JZm9yIChpID0gMSwgaiA9IDE7IGkgPCBhcmdjOyBpKyspIHsKLQkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tc3Rkb3V0IikpCi0JCQl1c2Vfc3Rkb3V0ID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLW4iKSB8fAotCQkJCSFzdHJjbXAoYXJndltpXSwgIi0tbnVtYmVyZWQiKSkKLQkJCW51bWJlcmVkID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLU4iKSB8fAotCQkJCSFzdHJjbXAoYXJndltpXSwgIi0tbm8tbnVtYmVyZWQiKSkgewotCQkJbnVtYmVyZWQgPSAwOwotCQkJYXV0b19udW1iZXIgPSAwOwotCQl9Ci0JCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJndltpXSwgIi0tc3RhcnQtbnVtYmVyPSIpKQotCQkJc3RhcnRfbnVtYmVyID0gc3RydG9sKGFyZ3ZbaV0gKyAxNSwgTlVMTCwgMTApOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLW51bWJlcmVkLWZpbGVzIikpCi0JCQludW1iZXJlZF9maWxlcyA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tc3RhcnQtbnVtYmVyIikpIHsKLQkJCWkrKzsKLQkJCWlmIChpID09IGFyZ2MpCi0JCQkJZGllKCJOZWVkIGEgbnVtYmVyIGZvciAtLXN0YXJ0LW51bWJlciIpOwotCQkJc3RhcnRfbnVtYmVyID0gc3RydG9sKGFyZ3ZbaV0sIE5VTEwsIDEwKTsKLQkJfQotCQllbHNlIGlmICghcHJlZml4Y21wKGFyZ3ZbaV0sICItLWNjPSIpKSB7Ci0JCQlBTExPQ19HUk9XKGV4dHJhX2NjLCBleHRyYV9jY19uciArIDEsIGV4dHJhX2NjX2FsbG9jKTsKLQkJCWV4dHJhX2NjW2V4dHJhX2NjX25yKytdID0geHN0cmR1cChhcmd2W2ldICsgNSk7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLWsiKSB8fAotCQkJCSFzdHJjbXAoYXJndltpXSwgIi0ta2VlcC1zdWJqZWN0IikpIHsKLQkJCWtlZXBfc3ViamVjdCA9IDE7Ci0JCQlyZXYudG90YWwgPSAtMTsKLQkJfQotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLW91dHB1dC1kaXJlY3RvcnkiKSB8fAotCQkJICFzdHJjbXAoYXJndltpXSwgIi1vIikpIHsKLQkJCWkrKzsKLQkJCWlmIChhcmdjIDw9IGkpCi0JCQkJZGllKCJXaGljaCBkaXJlY3Rvcnk/Iik7Ci0JCQlpZiAob3V0cHV0X2RpcmVjdG9yeSkKLQkJCQlkaWUoIlR3byBvdXRwdXQgZGlyZWN0b3JpZXM/Iik7Ci0JCQlvdXRwdXRfZGlyZWN0b3J5ID0gYXJndltpXTsKLQkJfQotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLXNpZ25vZmYiKSB8fAotCQkJICFzdHJjbXAoYXJndltpXSwgIi1zIikpIHsKLQkJCWNvbnN0IGNoYXIgKmNvbW1pdHRlcjsKLQkJCWNvbnN0IGNoYXIgKmVuZHBvczsKLQkJCWNvbW1pdHRlciA9IGdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9FUlJPUl9PTl9OT19OQU1FKTsKLQkJCWVuZHBvcyA9IHN0cmNocihjb21taXR0ZXIsICc+Jyk7Ci0JCQlpZiAoIWVuZHBvcykKLQkJCQlkaWUoImJvZ3VzIGNvbW1pdHRlciBpbmZvICVzXG4iLCBjb21taXR0ZXIpOwotCQkJYWRkX3NpZ25vZmYgPSB4bWVtZHVweihjb21taXR0ZXIsIGVuZHBvcyAtIGNvbW1pdHRlciArIDEpOwotCQl9Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tYXR0YWNoIikpIHsKLQkJCXJldi5taW1lX2JvdW5kYXJ5ID0gZ2l0X3ZlcnNpb25fc3RyaW5nOwotCQkJcmV2Lm5vX2lubGluZSA9IDE7Ci0JCX0KLQkJZWxzZSBpZiAoIXByZWZpeGNtcChhcmd2W2ldLCAiLS1hdHRhY2g9IikpIHsKLQkJCXJldi5taW1lX2JvdW5kYXJ5ID0gYXJndltpXSArIDk7Ci0JCQlyZXYubm9faW5saW5lID0gMTsKLQkJfQotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLWlubGluZSIpKSB7Ci0JCQlyZXYubWltZV9ib3VuZGFyeSA9IGdpdF92ZXJzaW9uX3N0cmluZzsKLQkJCXJldi5ub19pbmxpbmUgPSAwOwotCQl9Ci0JCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJndltpXSwgIi0taW5saW5lPSIpKSB7Ci0JCQlyZXYubWltZV9ib3VuZGFyeSA9IGFyZ3ZbaV0gKyA5OwotCQkJcmV2Lm5vX2lubGluZSA9IDA7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0iKSkKLQkJCWlnbm9yZV9pZl9pbl91cHN0cmVhbSA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tdGhyZWFkIikpCi0JCQl0aHJlYWQgPSAxOwotCQllbHNlIGlmICghcHJlZml4Y21wKGFyZ3ZbaV0sICItLWluLXJlcGx5LXRvPSIpKQotCQkJaW5fcmVwbHlfdG8gPSBhcmd2W2ldICsgMTQ7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0taW4tcmVwbHktdG8iKSkgewotCQkJaSsrOwotCQkJaWYgKGkgPT0gYXJnYykKLQkJCQlkaWUoIk5lZWQgYSBNZXNzYWdlLUlkIGZvciAtLWluLXJlcGx5LXRvIik7Ci0JCQlpbl9yZXBseV90byA9IGFyZ3ZbaV07Ci0JCX0gZWxzZSBpZiAoIXByZWZpeGNtcChhcmd2W2ldLCAiLS1zdWJqZWN0LXByZWZpeD0iKSkgewotCQkJc3ViamVjdF9wcmVmaXggPSAxOwotCQkJcmV2LnN1YmplY3RfcHJlZml4ID0gYXJndltpXSArIDE3OwotCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJndltpXSwgIi0tc3VmZml4PSIpKQotCQkJZm10X3BhdGNoX3N1ZmZpeCA9IGFyZ3ZbaV0gKyA5OwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLWNvdmVyLWxldHRlciIpKQotCQkJY292ZXJfbGV0dGVyID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1uby1iaW5hcnkiKSkKLQkJCW5vX2JpbmFyeV9kaWZmID0gMTsKLQkJZWxzZQotCQkJYXJndltqKytdID0gYXJndltpXTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fZm9ybWF0X3BhdGNoX29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fZm9ybWF0X3BhdGNoX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCB8IFBBUlNFX09QVF9LRUVQX1VOS05PV04pOworCisJaWYgKGRvX3NpZ25vZmYpIHsKKwkJY29uc3QgY2hhciAqY29tbWl0dGVyOworCQljb25zdCBjaGFyICplbmRwb3M7CisJCWNvbW1pdHRlciA9IGdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9FUlJPUl9PTl9OT19OQU1FKTsKKwkJZW5kcG9zID0gc3RyY2hyKGNvbW1pdHRlciwgJz4nKTsKKwkJaWYgKCFlbmRwb3MpCisJCQlkaWUoImJvZ3VzIGNvbW1pdHRlciBpbmZvICVzIiwgY29tbWl0dGVyKTsKKwkJYWRkX3NpZ25vZmYgPSB4bWVtZHVweihjb21taXR0ZXIsIGVuZHBvcyAtIGNvbW1pdHRlciArIDEpOwogCX0KLQlhcmdjID0gajsKIAogCWZvciAoaSA9IDA7IGkgPCBleHRyYV9oZHJfbnI7IGkrKykgewogCQlzdHJidWZfYWRkc3RyKCZidWYsIGV4dHJhX2hkcltpXSk7CkBAIC05MTcsMTYgKzk4MywyMyBAQAogCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CiAJfQogCi0JcmV2LmV4dHJhX2hlYWRlcnMgPSBzdHJidWZfZGV0YWNoKCZidWYsIDApOworCXJldi5leHRyYV9oZWFkZXJzID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKIAogCWlmIChzdGFydF9udW1iZXIgPCAwKQogCQlzdGFydF9udW1iZXIgPSAxOworCisJLyoKKwkgKiBJZiBudW1iZXJlZCBpcyBzZXQgc29sZWx5IGR1ZSB0byBmb3JtYXQubnVtYmVyZWQgaW4gY29uZmlnLAorCSAqIGFuZCBpdCB3b3VsZCBjb25mbGljdCB3aXRoIC0ta2VlcC1zdWJqZWN0ICgtaykgZnJvbSB0aGUKKwkgKiBjb21tYW5kIGxpbmUsIHJlc2V0ICJudW1iZXJlZCIuCisJICovCisJaWYgKG51bWJlcmVkICYmIGtlZXBfc3ViamVjdCAmJiAhbnVtYmVyZWRfY21kbGluZV9vcHQpCisJCW51bWJlcmVkID0gMDsKKwogCWlmIChudW1iZXJlZCAmJiBrZWVwX3N1YmplY3QpCiAJCWRpZSAoIi1uIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIpOwogCWlmIChrZWVwX3N1YmplY3QgJiYgc3ViamVjdF9wcmVmaXgpCiAJCWRpZSAoIi0tc3ViamVjdC1wcmVmaXggYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIik7Ci0JaWYgKG51bWJlcmVkX2ZpbGVzICYmIHVzZV9zdGRvdXQpCi0JCWRpZSAoIi0tbnVtYmVyZWQtZmlsZXMgYW5kIC0tc3Rkb3V0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIik7CiAKIAlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsICJIRUFEIik7CiAJaWYgKGFyZ2MgPiAxKQpAQCAtOTQ2LDggKzEwMTksOCBAQAogCQlpZiAodXNlX3N0ZG91dCkKIAkJCWRpZSgic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iKTsKIAkJaWYgKG1rZGlyKG91dHB1dF9kaXJlY3RvcnksIDA3NzcpIDwgMCAmJiBlcnJubyAhPSBFRVhJU1QpCi0JCQlkaWUoIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICVzIiwKLQkJCSAgICBvdXRwdXRfZGlyZWN0b3J5KTsKKwkJCWRpZV9lcnJubygiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIsCisJCQkJICBvdXRwdXRfZGlyZWN0b3J5KTsKIAl9CiAKIAlpZiAocmV2LnBlbmRpbmcubnIgPT0gMSkgewpAQCAtMTAxOSw4ICsxMDkyLDE0IEBACiAJCW51bWJlcmVkID0gMTsKIAlpZiAobnVtYmVyZWQpCiAJCXJldi50b3RhbCA9IHRvdGFsICsgc3RhcnRfbnVtYmVyIC0gMTsKLQlpZiAoaW5fcmVwbHlfdG8pCi0JCXJldi5yZWZfbWVzc2FnZV9pZCA9IGNsZWFuX21lc3NhZ2VfaWQoaW5fcmVwbHlfdG8pOworCWlmIChpbl9yZXBseV90byB8fCB0aHJlYWQgfHwgY292ZXJfbGV0dGVyKQorCQlyZXYucmVmX21lc3NhZ2VfaWRzID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0KSk7CisJaWYgKGluX3JlcGx5X3RvKSB7CisJCWNvbnN0IGNoYXIgKm1zZ2lkID0gY2xlYW5fbWVzc2FnZV9pZChpbl9yZXBseV90byk7CisJCXN0cmluZ19saXN0X2FwcGVuZChtc2dpZCwgcmV2LnJlZl9tZXNzYWdlX2lkcyk7CisJfQorCXJldi5udW1iZXJlZF9maWxlcyA9IG51bWJlcmVkX2ZpbGVzOworCXJldi5wYXRjaF9zdWZmaXggPSBmbXRfcGF0Y2hfc3VmZml4OwogCWlmIChjb3Zlcl9sZXR0ZXIpIHsKIAkJaWYgKHRocmVhZCkKIAkJCWdlbl9tZXNzYWdlX2lkKCZyZXYsICJjb3ZlciIpOwpAQCAtMTAzOSwyMSArMTExOCwzOSBAQAogCQkJLyogSGF2ZSB3ZSBhbHJlYWR5IGhhZCBhIG1lc3NhZ2UgSUQ/ICovCiAJCQlpZiAocmV2Lm1lc3NhZ2VfaWQpIHsKIAkJCQkvKgotCQkJCSAqIElmIHdlJ3ZlIGdvdCB0aGUgSUQgdG8gYmUgYSByZXBseQotCQkJCSAqIHRvLCBkaXNjYXJkIHRoZSBjdXJyZW50IElEOwotCQkJCSAqIG90aGVyd2lzZSwgbWFrZSBldmVyeXRoaW5nIGEgcmVwbHkKLQkJCQkgKiB0byB0aGF0LgorCQkJCSAqIEZvciBkZWVwIHRocmVhZGluZzogbWFrZSBldmVyeSBtYWlsCisJCQkJICogYSByZXBseSB0byB0aGUgcHJldmlvdXMgb25lLCBubworCQkJCSAqIG1hdHRlciB3aGF0IG90aGVyIG9wdGlvbnMgYXJlIHNldC4KKwkJCQkgKgorCQkJCSAqIEZvciBzaGFsbG93IHRocmVhZGluZzoKKwkJCQkgKgorCQkJCSAqIFdpdGhvdXQgLS1jb3Zlci1sZXR0ZXIgYW5kCisJCQkJICogLS1pbi1yZXBseS10bywgbWFrZSBldmVyeSBtYWlsIGEKKwkJCQkgKiByZXBseSB0byB0aGUgb25lIGJlZm9yZS4KKwkJCQkgKgorCQkJCSAqIFdpdGggLS1pbi1yZXBseS10byBidXQgbm8KKwkJCQkgKiAtLWNvdmVyLWxldHRlciwgbWFrZSBldmVyeSBtYWlsIGEKKwkJCQkgKiByZXBseSB0byB0aGUgPHJlcGx5LXRvPi4KKwkJCQkgKgorCQkJCSAqIFdpdGggLS1jb3Zlci1sZXR0ZXIsIG1ha2UgZXZlcnkKKwkJCQkgKiBtYWlsIGJ1dCB0aGUgY292ZXIgbGV0dGVyIGEgcmVwbHkKKwkJCQkgKiB0byB0aGUgY292ZXIgbGV0dGVyLiAgVGhlIGNvdmVyCisJCQkJICogbGV0dGVyIGlzIGEgcmVwbHkgdG8gdGhlCisJCQkJICogLS1pbi1yZXBseS10bywgaWYgc3BlY2lmaWVkLgogCQkJCSAqLwotCQkJCWlmIChyZXYucmVmX21lc3NhZ2VfaWQpCisJCQkJaWYgKHRocmVhZCA9PSBUSFJFQURfU0hBTExPVworCQkJCSAgICAmJiByZXYucmVmX21lc3NhZ2VfaWRzLT5uciA+IDAKKwkJCQkgICAgJiYgKCFjb3Zlcl9sZXR0ZXIgfHwgcmV2Lm5yID4gMSkpCiAJCQkJCWZyZWUocmV2Lm1lc3NhZ2VfaWQpOwogCQkJCWVsc2UKLQkJCQkJcmV2LnJlZl9tZXNzYWdlX2lkID0gcmV2Lm1lc3NhZ2VfaWQ7CisJCQkJCXN0cmluZ19saXN0X2FwcGVuZChyZXYubWVzc2FnZV9pZCwKKwkJCQkJCQkgICByZXYucmVmX21lc3NhZ2VfaWRzKTsKIAkJCX0KIAkJCWdlbl9tZXNzYWdlX2lkKCZyZXYsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKIAkJfQotCQlpZiAoIXVzZV9zdGRvdXQgJiYgcmVvcGVuX3N0ZG91dChudW1iZXJlZF9maWxlcyA/IE5VTEwgOgotCQkJCWdldF9vbmVsaW5lX2Zvcl9maWxlbmFtZShjb21taXQsIGtlZXBfc3ViamVjdCksCi0JCQkJcmV2Lm5yLCByZXYudG90YWwpKQorCisJCWlmICghdXNlX3N0ZG91dCAmJiByZW9wZW5fc3Rkb3V0KG51bWJlcmVkX2ZpbGVzID8gTlVMTCA6IGNvbW1pdCwKKwkJCQkJCSAmcmV2KSkKIAkJCWRpZSgiRmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiKTsKIAkJc2hvd24gPSBsb2dfdHJlZV9jb21taXQoJnJldiwgY29tbWl0KTsKIAkJZnJlZShjb21taXQtPmJ1ZmZlcik7CkBAIC0xMDk5LDEzICsxMTk2LDE0IEBACiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyIGNoZXJyeV91c2FnZVtdID0KLSJnaXQgY2hlcnJ5IFstdl0gPHVwc3RyZWFtPiBbPGhlYWQ+XSBbPGxpbWl0Pl0iOworImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIjsKIGludCBjbWRfY2hlcnJ5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCXN0cnVjdCByZXZfaW5mbyByZXZzOwogCXN0cnVjdCBwYXRjaF9pZHMgaWRzOwogCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMOworCXN0cnVjdCBicmFuY2ggKmN1cnJlbnRfYnJhbmNoOwogCWNvbnN0IGNoYXIgKnVwc3RyZWFtOwogCWNvbnN0IGNoYXIgKmhlYWQgPSAiSEVBRCI7CiAJY29uc3QgY2hhciAqbGltaXQgPSBOVUxMOwpAQCAtMTEyOCw3ICsxMjI2LDE3IEBACiAJCXVwc3RyZWFtID0gYXJndlsxXTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdXNhZ2UoY2hlcnJ5X3VzYWdlKTsKKwkJY3VycmVudF9icmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOworCQlpZiAoIWN1cnJlbnRfYnJhbmNoIHx8ICFjdXJyZW50X2JyYW5jaC0+bWVyZ2UKKwkJCQkJfHwgIWN1cnJlbnRfYnJhbmNoLT5tZXJnZVswXQorCQkJCQl8fCAhY3VycmVudF9icmFuY2gtPm1lcmdlWzBdLT5kc3QpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIgorCQkJCQkiIHJlbW90ZSBicmFuY2gsIHBsZWFzZSIKKwkJCQkJIiBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iKTsKKwkJCXVzYWdlKGNoZXJyeV91c2FnZSk7CisJCX0KKworCQl1cHN0cmVhbSA9IGN1cnJlbnRfYnJhbmNoLT5tZXJnZVswXS0+ZHN0OwogCX0KIAogCWluaXRfcmV2aXNpb25zKCZyZXZzLCBwcmVmaXgpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1scy1maWxlcy5jIGIvYnVpbHRpbi1scy1maWxlcy5jCmluZGV4IGY3MmViODUuLmY0NzMyMjAgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbHMtZmlsZXMuYworKysgYi9idWlsdGluLWxzLWZpbGVzLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJkaXIuaCIKICNpbmNsdWRlICJidWlsdGluLmgiCiAjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAogc3RhdGljIGludCBhYmJyZXY7CiBzdGF0aWMgaW50IHNob3dfZGVsZXRlZDsKQEAgLTI4LDYgKzI5LDcgQEAKIHN0YXRpYyBpbnQgZXJyb3JfdW5tYXRjaDsKIHN0YXRpYyBjaGFyICpwc19tYXRjaGVkOwogc3RhdGljIGNvbnN0IGNoYXIgKndpdGhfdHJlZTsKK3N0YXRpYyBpbnQgZXhjX2dpdmVuOwogCiBzdGF0aWMgY29uc3QgY2hhciAqdGFnX2NhY2hlZCA9ICIiOwogc3RhdGljIGNvbnN0IGNoYXIgKnRhZ191bm1lcmdlZCA9ICIiOwpAQCAtMzYsNDIgKzM4LDYgQEAKIHN0YXRpYyBjb25zdCBjaGFyICp0YWdfa2lsbGVkID0gIiI7CiBzdGF0aWMgY29uc3QgY2hhciAqdGFnX21vZGlmaWVkID0gIiI7CiAKLQotLyoKLSAqIE1hdGNoIGEgcGF0aHNwZWMgYWdhaW5zdCBhIGZpbGVuYW1lLiBUaGUgZmlyc3QgInNraXBsZW4iIGNoYXJhY3RlcnMKLSAqIGFyZSB0aGUgY29tbW9uIHByZWZpeAotICovCi1pbnQgcGF0aHNwZWNfbWF0Y2goY29uc3QgY2hhciAqKnNwZWMsIGNoYXIgKnBzX21hdGNoZWQsCi0JCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc2tpcGxlbikKLXsKLQljb25zdCBjaGFyICptOwotCi0Jd2hpbGUgKChtID0gKnNwZWMrKykgIT0gTlVMTCkgewotCQlpbnQgbWF0Y2hsZW4gPSBzdHJsZW4obSArIHNraXBsZW4pOwotCi0JCWlmICghbWF0Y2hsZW4pCi0JCQlnb3RvIG1hdGNoZWQ7Ci0JCWlmICghc3RybmNtcChtICsgc2tpcGxlbiwgZmlsZW5hbWUgKyBza2lwbGVuLCBtYXRjaGxlbikpIHsKLQkJCWlmIChtW3NraXBsZW4gKyBtYXRjaGxlbiAtIDFdID09ICcvJykKLQkJCQlnb3RvIG1hdGNoZWQ7Ci0JCQlzd2l0Y2ggKGZpbGVuYW1lW3NraXBsZW4gKyBtYXRjaGxlbl0pIHsKLQkJCWNhc2UgJy8nOiBjYXNlICdcMCc6Ci0JCQkJZ290byBtYXRjaGVkOwotCQkJfQotCQl9Ci0JCWlmICghZm5tYXRjaChtICsgc2tpcGxlbiwgZmlsZW5hbWUgKyBza2lwbGVuLCAwKSkKLQkJCWdvdG8gbWF0Y2hlZDsKLQkJaWYgKHBzX21hdGNoZWQpCi0JCQlwc19tYXRjaGVkKys7Ci0JCWNvbnRpbnVlOwotCW1hdGNoZWQ6Ci0JCWlmIChwc19tYXRjaGVkKQotCQkJKnBzX21hdGNoZWQgPSAxOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHNob3dfZGlyX2VudHJ5KGNvbnN0IGNoYXIgKnRhZywgc3RydWN0IGRpcl9lbnRyeSAqZW50KQogewogCWludCBsZW4gPSBwcmVmaXhfbGVuOwpAQCAtODAsNyArNDYsNyBAQAogCWlmIChsZW4gPj0gZW50LT5sZW4pCiAJCWRpZSgiZ2l0IGxzLWZpbGVzOiBpbnRlcm5hbCBlcnJvciAtIGRpcmVjdG9yeSBlbnRyeSBub3Qgc3VwZXJzZXQgb2YgcHJlZml4Iik7CiAKLQlpZiAocGF0aHNwZWMgJiYgIXBhdGhzcGVjX21hdGNoKHBhdGhzcGVjLCBwc19tYXRjaGVkLCBlbnQtPm5hbWUsIGxlbikpCisJaWYgKCFtYXRjaF9wYXRoc3BlYyhwYXRoc3BlYywgZW50LT5uYW1lLCBlbnQtPmxlbiwgbGVuLCBwc19tYXRjaGVkKSkKIAkJcmV0dXJuOwogCiAJZnB1dHModGFnLCBzdGRvdXQpOwpAQCAtMTU2LDcgKzEyMiw3IEBACiAJaWYgKGxlbiA+PSBjZV9uYW1lbGVuKGNlKSkKIAkJZGllKCJnaXQgbHMtZmlsZXM6IGludGVybmFsIGVycm9yIC0gY2FjaGUgZW50cnkgbm90IHN1cGVyc2V0IG9mIHByZWZpeCIpOwogCi0JaWYgKHBhdGhzcGVjICYmICFwYXRoc3BlY19tYXRjaChwYXRoc3BlYywgcHNfbWF0Y2hlZCwgY2UtPm5hbWUsIGxlbikpCisJaWYgKCFtYXRjaF9wYXRoc3BlYyhwYXRoc3BlYywgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCBsZW4sIHBzX21hdGNoZWQpKQogCQlyZXR1cm47CiAKIAlpZiAodGFnICYmICp0YWcgJiYgc2hvd192YWxpZF9iaXQgJiYKQEAgLTE5NSwxMiArMTYxLDcgQEAKIAogCS8qIEZvciBjYWNoZWQvZGVsZXRlZCBmaWxlcyB3ZSBkb24ndCBuZWVkIHRvIGV2ZW4gZG8gdGhlIHJlYWRkaXIgKi8KIAlpZiAoc2hvd19vdGhlcnMgfHwgc2hvd19raWxsZWQpIHsKLQkJY29uc3QgY2hhciAqcGF0aCA9ICIuIiwgKmJhc2UgPSAiIjsKLQkJaW50IGJhc2VsZW4gPSBwcmVmaXhfbGVuOwotCi0JCWlmIChiYXNlbGVuKQotCQkJcGF0aCA9IGJhc2UgPSBwcmVmaXg7Ci0JCXJlYWRfZGlyZWN0b3J5KGRpciwgcGF0aCwgYmFzZSwgYmFzZWxlbiwgcGF0aHNwZWMpOworCQlmaWxsX2RpcmVjdG9yeShkaXIsIHBhdGhzcGVjKTsKIAkJaWYgKHNob3dfb3RoZXJzKQogCQkJc2hvd19vdGhlcl9maWxlcyhkaXIpOwogCQlpZiAoc2hvd19raWxsZWQpCkBAIC0yMTAsNyArMTcxLDggQEAKIAkJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CiAJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOwogCQkJaW50IGR0eXBlID0gY2VfdG9fZHR5cGUoY2UpOwotCQkJaWYgKGV4Y2x1ZGVkKGRpciwgY2UtPm5hbWUsICZkdHlwZSkgIT0gZGlyLT5zaG93X2lnbm9yZWQpCisJCQlpZiAoZXhjbHVkZWQoZGlyLCBjZS0+bmFtZSwgJmR0eXBlKSAhPQorCQkJCQkhIShkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkpCiAJCQkJY29udGludWU7CiAJCQlpZiAoc2hvd191bm1lcmdlZCAmJiAhY2Vfc3RhZ2UoY2UpKQogCQkJCWNvbnRpbnVlOwpAQCAtMjI1LDcgKzE4Nyw4IEBACiAJCQlzdHJ1Y3Qgc3RhdCBzdDsKIAkJCWludCBlcnI7CiAJCQlpbnQgZHR5cGUgPSBjZV90b19kdHlwZShjZSk7Ci0JCQlpZiAoZXhjbHVkZWQoZGlyLCBjZS0+bmFtZSwgJmR0eXBlKSAhPSBkaXItPnNob3dfaWdub3JlZCkKKwkJCWlmIChleGNsdWRlZChkaXIsIGNlLT5uYW1lLCAmZHR5cGUpICE9CisJCQkJCSEhKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKSkKIAkJCQljb250aW51ZTsKIAkJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpCiAJCQkJY29udGludWU7CkBAIC0yOTgsNiArMjYxLDIxIEBACiAJcmV0dXJuIG1heCA/IHhtZW1kdXB6KHByZXYsIG1heCkgOiBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBzdHJpcF90cmFpbGluZ19zbGFzaF9mcm9tX3N1Ym1vZHVsZXModm9pZCkKK3sKKwljb25zdCBjaGFyICoqcDsKKworCWZvciAocCA9IHBhdGhzcGVjOyAqcCAhPSBOVUxMOyBwKyspIHsKKwkJaW50IGxlbiA9IHN0cmxlbigqcCksIHBvczsKKworCQlpZiAobGVuIDwgMSB8fCAoKnApW2xlbiAtIDFdICE9ICcvJykKKwkJCWNvbnRpbnVlOworCQlwb3MgPSBjYWNoZV9uYW1lX3BvcygqcCwgbGVuIC0gMSk7CisJCWlmIChwb3MgPj0gMCAmJiBTX0lTR0lUTElOSyhhY3RpdmVfY2FjaGVbcG9zXS0+Y2VfbW9kZSkpCisJCQkqcCA9IHhzdHJuZHVwKCpwLCBsZW4gLSAxKTsKKwl9Cit9CisKIC8qCiAgKiBSZWFkIHRoZSB0cmVlIHNwZWNpZmllZCB3aXRoIC0td2l0aC10cmVlIG9wdGlvbgogICogKHR5cGljYWxseSwgSEVBRCkgaW50byBzdGFnZSAjMSBhbmQgdGhlbgpAQCAtMzk1LDE1NiArMzczLDE0NCBAQAogCXJldHVybiBlcnJvcnM7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyIGxzX2ZpbGVzX3VzYWdlW10gPQotCSJnaXQgbHMtZmlsZXMgWy16XSBbLXRdIFstdl0gKC0tW2NhY2hlZHxkZWxldGVkfG90aGVyc3xzdGFnZXx1bm1lcmdlZHxraWxsZWR8bW9kaWZpZWRdKSogIgotCSJbIC0taWdub3JlZCBdIFstLWV4Y2x1ZGU9PHBhdHRlcm4+XSBbLS1leGNsdWRlLWZyb209PGZpbGU+XSAiCi0JIlsgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGZpbGVuYW1lPiBdIFstLWV4Y2x1ZGUtc3RhbmRhcmRdICIKLQkiWy0tZnVsbC1uYW1lXSBbLS1hYmJyZXZdIFstLV0gWzxmaWxlPl0qIjsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbHNfZmlsZXNfdXNhZ2VbXSA9IHsKKwkiZ2l0IGxzLWZpbGVzIFtvcHRpb25zXSBbPGZpbGU+XSoiLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3ooY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlsaW5lX3Rlcm1pbmF0b3IgPSB1bnNldCA/ICdcbicgOiAnXDAnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX2V4Y2x1ZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBleGNsdWRlX2xpc3QgKmxpc3QgPSBvcHQtPnZhbHVlOworCisJZXhjX2dpdmVuID0gMTsKKwlhZGRfZXhjbHVkZShhcmcsICIiLCAwLCBsaXN0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9leGNsdWRlX2Zyb20oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciA9IG9wdC0+dmFsdWU7CisKKwlleGNfZ2l2ZW4gPSAxOworCWFkZF9leGNsdWRlc19mcm9tX2ZpbGUoZGlyLCBhcmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX2V4Y2x1ZGVfc3RhbmRhcmQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciA9IG9wdC0+dmFsdWU7CisKKwlleGNfZ2l2ZW4gPSAxOworCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKGRpcik7CisKKwlyZXR1cm4gMDsKK30KIAogaW50IGNtZF9sc19maWxlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKLQlpbnQgaTsKLQlpbnQgZXhjX2dpdmVuID0gMCwgcmVxdWlyZV93b3JrX3RyZWUgPSAwOworCWludCByZXF1aXJlX3dvcmtfdHJlZSA9IDAsIHNob3dfdGFnID0gMDsKIAlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CisJc3RydWN0IG9wdGlvbiBidWlsdGluX2xzX2ZpbGVzX29wdGlvbnNbXSA9IHsKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICd6JywgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIsCisJCQlQQVJTRV9PUFRfTk9BUkcsIG9wdGlvbl9wYXJzZV96IH0sCisJCU9QVF9CT09MRUFOKCd0JywgTlVMTCwgJnNob3dfdGFnLAorCQkJImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiKSwKKwkJT1BUX0JPT0xFQU4oJ3YnLCBOVUxMLCAmc2hvd192YWxpZF9iaXQsCisJCQkidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiKSwKKwkJT1BUX0JPT0xFQU4oJ2MnLCAiY2FjaGVkIiwgJnNob3dfY2FjaGVkLAorCQkJInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIiksCisJCU9QVF9CT09MRUFOKCdkJywgImRlbGV0ZWQiLCAmc2hvd19kZWxldGVkLAorCQkJInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IiksCisJCU9QVF9CT09MRUFOKCdtJywgIm1vZGlmaWVkIiwgJnNob3dfbW9kaWZpZWQsCisJCQkic2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IiksCisJCU9QVF9CT09MRUFOKCdvJywgIm90aGVycyIsICZzaG93X290aGVycywKKwkJCSJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiKSwKKwkJT1BUX0JJVCgnaScsICJpZ25vcmVkIiwgJmRpci5mbGFncywKKwkJCSJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIsCisJCQlESVJfU0hPV19JR05PUkVEKSwKKwkJT1BUX0JPT0xFQU4oJ3MnLCAic3RhZ2UiLCAmc2hvd19zdGFnZSwKKwkJCSJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIpLAorCQlPUFRfQk9PTEVBTignaycsICJraWxsZWQiLCAmc2hvd19raWxsZWQsCisJCQkic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIpLAorCQlPUFRfQklUKDAsICJkaXJlY3RvcnkiLCAmZGlyLmZsYWdzLAorCQkJInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZSBvbmx5IiwKKwkJCURJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTKSwKKwkJT1BUX05FR0JJVCgwLCAiZW1wdHktZGlyZWN0b3J5IiwgJmRpci5mbGFncywKKwkJCSJkb24ndCBzaG93IGVtcHR5IGRpcmVjdG9yaWVzIiwKKwkJCURJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTKSwKKwkJT1BUX0JPT0xFQU4oJ3UnLCAidW5tZXJnZWQiLCAmc2hvd191bm1lcmdlZCwKKwkJCSJzaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQiKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICd4JywgImV4Y2x1ZGUiLCAmZGlyLmV4Y2x1ZGVfbGlzdFtFWENfQ01ETF0sICJwYXR0ZXJuIiwKKwkJCSJza2lwIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4iLAorCQkJMCwgb3B0aW9uX3BhcnNlX2V4Y2x1ZGUgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdYJywgImV4Y2x1ZGUtZnJvbSIsICZkaXIsICJmaWxlIiwKKwkJCSJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IiwKKwkJCTAsIG9wdGlvbl9wYXJzZV9leGNsdWRlX2Zyb20gfSwKKwkJT1BUX1NUUklORygwLCAiZXhjbHVkZS1wZXItZGlyZWN0b3J5IiwgJmRpci5leGNsdWRlX3Blcl9kaXIsICJmaWxlIiwKKwkJCSJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImV4Y2x1ZGUtc3RhbmRhcmQiLCAmZGlyLCBOVUxMLAorCQkJImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiLAorCQkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2VfZXhjbHVkZV9zdGFuZGFyZCB9LAorCQl7IE9QVElPTl9TRVRfSU5ULCAwLCAiZnVsbC1uYW1lIiwgJnByZWZpeF9vZmZzZXQsIE5VTEwsCisJCQkibWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHRvcCBkaXJlY3RvcnkiLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBOVUxMIH0sCisJCU9QVF9CT09MRUFOKDAsICJlcnJvci11bm1hdGNoIiwgJmVycm9yX3VubWF0Y2gsCisJCQkiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIiksCisJCU9QVF9TVFJJTkcoMCwgIndpdGgtdHJlZSIsICZ3aXRoX3RyZWUsICJ0cmVlLWlzaCIsCisJCQkicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIpLAorCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwkJT1BUX0VORCgpCisJfTsKIAogCW1lbXNldCgmZGlyLCAwLCBzaXplb2YoZGlyKSk7CiAJaWYgKHByZWZpeCkKIAkJcHJlZml4X29mZnNldCA9IHN0cmxlbihwcmVmaXgpOwogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAotCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKLQkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKLQotCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7Ci0JCQlpKys7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICIteiIpKSB7Ci0JCQlsaW5lX3Rlcm1pbmF0b3IgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLXQiKSB8fCAhc3RyY21wKGFyZywgIi12IikpIHsKLQkJCXRhZ19jYWNoZWQgPSAiSCAiOwotCQkJdGFnX3VubWVyZ2VkID0gIk0gIjsKLQkJCXRhZ19yZW1vdmVkID0gIlIgIjsKLQkJCXRhZ19tb2RpZmllZCA9ICJDICI7Ci0JCQl0YWdfb3RoZXIgPSAiPyAiOwotCQkJdGFnX2tpbGxlZCA9ICJLICI7Ci0JCQlpZiAoYXJnWzFdID09ICd2JykKLQkJCQlzaG93X3ZhbGlkX2JpdCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItYyIpIHx8ICFzdHJjbXAoYXJnLCAiLS1jYWNoZWQiKSkgewotCQkJc2hvd19jYWNoZWQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLWQiKSB8fCAhc3RyY21wKGFyZywgIi0tZGVsZXRlZCIpKSB7Ci0JCQlzaG93X2RlbGV0ZWQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLW0iKSB8fCAhc3RyY21wKGFyZywgIi0tbW9kaWZpZWQiKSkgewotCQkJc2hvd19tb2RpZmllZCA9IDE7Ci0JCQlyZXF1aXJlX3dvcmtfdHJlZSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItbyIpIHx8ICFzdHJjbXAoYXJnLCAiLS1vdGhlcnMiKSkgewotCQkJc2hvd19vdGhlcnMgPSAxOwotCQkJcmVxdWlyZV93b3JrX3RyZWUgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLWkiKSB8fCAhc3RyY21wKGFyZywgIi0taWdub3JlZCIpKSB7Ci0JCQlkaXIuc2hvd19pZ25vcmVkID0gMTsKLQkJCXJlcXVpcmVfd29ya190cmVlID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi1zIikgfHwgIXN0cmNtcChhcmcsICItLXN0YWdlIikpIHsKLQkJCXNob3dfc3RhZ2UgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLWsiKSB8fCAhc3RyY21wKGFyZywgIi0ta2lsbGVkIikpIHsKLQkJCXNob3dfa2lsbGVkID0gMTsKLQkJCXJlcXVpcmVfd29ya190cmVlID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tZGlyZWN0b3J5IikpIHsKLQkJCWRpci5zaG93X290aGVyX2RpcmVjdG9yaWVzID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tbm8tZW1wdHktZGlyZWN0b3J5IikpIHsKLQkJCWRpci5oaWRlX2VtcHR5X2RpcmVjdG9yaWVzID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi11IikgfHwgIXN0cmNtcChhcmcsICItLXVubWVyZ2VkIikpIHsKLQkJCS8qIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gc2hvd2luZyB1bm1lcmdlZCB1bmxlc3MKLQkJCSAqIHlvdSBhbHNvIHNob3cgdGhlIHN0YWdlIGluZm9ybWF0aW9uLgotCQkJICovCi0JCQlzaG93X3N0YWdlID0gMTsKLQkJCXNob3dfdW5tZXJnZWQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLXgiKSAmJiBpKzEgPCBhcmdjKSB7Ci0JCQlleGNfZ2l2ZW4gPSAxOwotCQkJYWRkX2V4Y2x1ZGUoYXJndlsrK2ldLCAiIiwgMCwgJmRpci5leGNsdWRlX2xpc3RbRVhDX0NNRExdKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghcHJlZml4Y21wKGFyZywgIi0tZXhjbHVkZT0iKSkgewotCQkJZXhjX2dpdmVuID0gMTsKLQkJCWFkZF9leGNsdWRlKGFyZysxMCwgIiIsIDAsICZkaXIuZXhjbHVkZV9saXN0W0VYQ19DTURMXSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItWCIpICYmIGkrMSA8IGFyZ2MpIHsKLQkJCWV4Y19naXZlbiA9IDE7Ci0JCQlhZGRfZXhjbHVkZXNfZnJvbV9maWxlKCZkaXIsIGFyZ3ZbKytpXSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWV4Y2x1ZGUtZnJvbT0iKSkgewotCQkJZXhjX2dpdmVuID0gMTsKLQkJCWFkZF9leGNsdWRlc19mcm9tX2ZpbGUoJmRpciwgYXJnKzE1KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghcHJlZml4Y21wKGFyZywgIi0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PSIpKSB7Ci0JCQlleGNfZ2l2ZW4gPSAxOwotCQkJZGlyLmV4Y2x1ZGVfcGVyX2RpciA9IGFyZyArIDI0OwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1leGNsdWRlLXN0YW5kYXJkIikpIHsKLQkJCWV4Y19naXZlbiA9IDE7Ci0JCQlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tZnVsbC1uYW1lIikpIHsKLQkJCXByZWZpeF9vZmZzZXQgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1lcnJvci11bm1hdGNoIikpIHsKLQkJCWVycm9yX3VubWF0Y2ggPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS13aXRoLXRyZWU9IikpIHsKLQkJCXdpdGhfdHJlZSA9IGFyZyArIDEyOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1hYmJyZXY9IikpIHsKLQkJCWFiYnJldiA9IHN0cnRvdWwoYXJnKzksIE5VTEwsIDEwKTsKLQkJCWlmIChhYmJyZXYgJiYgYWJicmV2IDwgTUlOSU1VTV9BQkJSRVYpCi0JCQkJYWJicmV2ID0gTUlOSU1VTV9BQkJSRVY7Ci0JCQllbHNlIGlmIChhYmJyZXYgPiA0MCkKLQkJCQlhYmJyZXYgPSA0MDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tYWJicmV2IikpIHsKLQkJCWFiYnJldiA9IERFRkFVTFRfQUJCUkVWOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCphcmcgPT0gJy0nKQotCQkJdXNhZ2UobHNfZmlsZXNfdXNhZ2UpOwotCQlicmVhazsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fbHNfZmlsZXNfb3B0aW9ucywKKwkJCWxzX2ZpbGVzX3VzYWdlLCAwKTsKKwlpZiAoc2hvd190YWcgfHwgc2hvd192YWxpZF9iaXQpIHsKKwkJdGFnX2NhY2hlZCA9ICJIICI7CisJCXRhZ191bm1lcmdlZCA9ICJNICI7CisJCXRhZ19yZW1vdmVkID0gIlIgIjsKKwkJdGFnX21vZGlmaWVkID0gIkMgIjsKKwkJdGFnX290aGVyID0gIj8gIjsKKwkJdGFnX2tpbGxlZCA9ICJLICI7CiAJfQorCWlmIChzaG93X21vZGlmaWVkIHx8IHNob3dfb3RoZXJzIHx8IHNob3dfZGVsZXRlZCB8fCAoZGlyLmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkgfHwgc2hvd19raWxsZWQpCisJCXJlcXVpcmVfd29ya190cmVlID0gMTsKKwlpZiAoc2hvd191bm1lcmdlZCkKKwkJLyoKKwkJICogVGhlcmUncyBubyBwb2ludCBpbiBzaG93aW5nIHVubWVyZ2VkIHVubGVzcworCQkgKiB5b3UgYWxzbyBzaG93IHRoZSBzdGFnZSBpbmZvcm1hdGlvbi4KKwkJICovCisJCXNob3dfc3RhZ2UgPSAxOworCWlmIChkaXIuZXhjbHVkZV9wZXJfZGlyKQorCQlleGNfZ2l2ZW4gPSAxOwogCiAJaWYgKHJlcXVpcmVfd29ya190cmVlICYmICFpc19pbnNpZGVfd29ya190cmVlKCkpCiAJCXNldHVwX3dvcmtfdHJlZSgpOwogCi0JcGF0aHNwZWMgPSBnZXRfcGF0aHNwZWMocHJlZml4LCBhcmd2ICsgaSk7CisJcGF0aHNwZWMgPSBnZXRfcGF0aHNwZWMocHJlZml4LCBhcmd2KTsKKworCS8qIGJlIG5pY2Ugd2l0aCBzdWJtb2R1bGUgcGF0aHMgZW5kaW5nIGluIGEgc2xhc2ggKi8KKwlyZWFkX2NhY2hlKCk7CisJaWYgKHBhdGhzcGVjKQorCQlzdHJpcF90cmFpbGluZ19zbGFzaF9mcm9tX3N1Ym1vZHVsZXMoKTsKIAogCS8qIFZlcmlmeSB0aGF0IHRoZSBwYXRoc3BlYyBtYXRjaGVzIHRoZSBwcmVmaXggKi8KIAlpZiAocGF0aHNwZWMpCkBAIC01NTgsNyArNTI0LDcgQEAKIAkJcHNfbWF0Y2hlZCA9IHhjYWxsb2MoMSwgbnVtKTsKIAl9CiAKLQlpZiAoZGlyLnNob3dfaWdub3JlZCAmJiAhZXhjX2dpdmVuKSB7CisJaWYgKChkaXIuZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKSAmJiAhZXhjX2dpdmVuKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiJXM6IC0taWdub3JlZCBuZWVkcyBzb21lIGV4Y2x1ZGUgcGF0dGVyblxuIiwKIAkJCWFyZ3ZbMF0pOwogCQlleGl0KDEpOwpAQCAtNTY5LDcgKzUzNSw2IEBACiAJICAgICAgc2hvd19raWxsZWQgfCBzaG93X21vZGlmaWVkKSkKIAkJc2hvd19jYWNoZWQgPSAxOwogCi0JcmVhZF9jYWNoZSgpOwogCWlmIChwcmVmaXgpCiAJCXBydW5lX2NhY2hlKHByZWZpeCk7CiAJaWYgKHdpdGhfdHJlZSkgewpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1scy10cmVlLmMgYi9idWlsdGluLWxzLXRyZWUuYwppbmRleCA1YjYzZTZlLi4yMjAwOGRmIDEwMDY0NAotLS0gYS9idWlsdGluLWxzLXRyZWUuYworKysgYi9idWlsdGluLWxzLXRyZWUuYwpAQCAtNjAsNyArNjAsNiBAQAogewogCWludCByZXR2YWwgPSAwOwogCWNvbnN0IGNoYXIgKnR5cGUgPSBibG9iX3R5cGU7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwogCiAJaWYgKFNfSVNHSVRMSU5LKG1vZGUpKSB7CiAJCS8qCkBAIC02OCwxMyArNjcsOCBAQAogCQkgKgogCQkgKiBTb21ldGhpbmcgc2ltaWxhciB0byB0aGlzIGluY29tcGxldGUgZXhhbXBsZToKIAkJICoKLQkJaWYgKHNob3dfc3VicHJvamVjdHMoYmFzZSwgYmFzZWxlbiwgcGF0aG5hbWUpKSB7Ci0JCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBsc190cmVlOwotCi0JCQlsc190cmVlLmRpciA9IGJhc2U7Ci0JCQlsc190cmVlLmFyZ3YgPSBscy10cmVlOwotCQkJc3RhcnRfY29tbWFuZCgmbHNfdHJlZSk7Ci0JCX0KKwkJaWYgKHNob3dfc3VicHJvamVjdHMoYmFzZSwgYmFzZWxlbiwgcGF0aG5hbWUpKQorCQkJcmV0dmFsID0gUkVBRF9UUkVFX1JFQ1VSU0lWRTsKIAkJICoKIAkJICovCiAJCXR5cGUgPSBjb21taXRfdHlwZTsKQEAgLTk1LDE3ICs4OSwyMCBAQAogCiAJaWYgKCEobHNfb3B0aW9ucyAmIExTX05BTUVfT05MWSkpIHsKIAkJaWYgKGxzX29wdGlvbnMgJiBMU19TSE9XX1NJWkUpIHsKKwkJCWNoYXIgc2l6ZV90ZXh0WzI0XTsKIAkJCWlmICghc3RyY21wKHR5cGUsIGJsb2JfdHlwZSkpIHsKLQkJCQlzaGExX29iamVjdF9pbmZvKHNoYTEsICZzaXplKTsKLQkJCQlwcmludGYoIiUwNm8gJXMgJXMgJTdsdVx0IiwgbW9kZSwgdHlwZSwKLQkJCQkgICAgICAgYWJicmV2ID8gZmluZF91bmlxdWVfYWJicmV2KHNoYTEsIGFiYnJldikKLQkJCQkgICAgICAgICAgICAgIDogc2hhMV90b19oZXgoc2hhMSksCi0JCQkJICAgICAgIHNpemUpOworCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJCQlpZiAoc2hhMV9vYmplY3RfaW5mbyhzaGExLCAmc2l6ZSkgPT0gT0JKX0JBRCkKKwkJCQkJc3RyY3B5KHNpemVfdGV4dCwgIkJBRCIpOworCQkJCWVsc2UKKwkJCQkJc25wcmludGYoc2l6ZV90ZXh0LCBzaXplb2Yoc2l6ZV90ZXh0KSwKKwkJCQkJCSAiJWx1Iiwgc2l6ZSk7CiAJCQl9IGVsc2UKLQkJCQlwcmludGYoIiUwNm8gJXMgJXMgJTdjXHQiLCBtb2RlLCB0eXBlLAotCQkJCSAgICAgICBhYmJyZXYgPyBmaW5kX3VuaXF1ZV9hYmJyZXYoc2hhMSwgYWJicmV2KQotCQkJCSAgICAgICAgICAgICAgOiBzaGExX3RvX2hleChzaGExKSwKLQkJCQkgICAgICAgJy0nKTsKKwkJCQlzdHJjcHkoc2l6ZV90ZXh0LCAiLSIpOworCQkJcHJpbnRmKCIlMDZvICVzICVzICU3c1x0IiwgbW9kZSwgdHlwZSwKKwkJCSAgICAgICBhYmJyZXYgPyBmaW5kX3VuaXF1ZV9hYmJyZXYoc2hhMSwgYWJicmV2KQorCQkJCSAgICAgIDogc2hhMV90b19oZXgoc2hhMSksCisJCQkgICAgICAgc2l6ZV90ZXh0KTsKIAkJfSBlbHNlCiAJCQlwcmludGYoIiUwNm8gJXMgJXNcdCIsIG1vZGUsIHR5cGUsCiAJCQkgICAgICAgYWJicmV2ID8gZmluZF91bmlxdWVfYWJicmV2KHNoYTEsIGFiYnJldikKZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbGluZm8uYyBiL2J1aWx0aW4tbWFpbGluZm8uYwppbmRleCBkYWNjOGFjLi45MjYzN2FjIDEwMDY0NAotLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrIGIvYnVpbHRpbi1tYWlsaW5mby5jCkBAIC0yOSw2ICsyOSw5IEBACiAjZGVmaW5lIE1BWF9IRFJfUEFSU0VEIDEwCiAjZGVmaW5lIE1BWF9CT1VOREFSSUVTIDUKIAorc3RhdGljIHZvaWQgY2xlYW51cF9zcGFjZShzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKwogc3RhdGljIHZvaWQgZ2V0X3NhbmVfbmFtZShzdHJ1Y3Qgc3RyYnVmICpvdXQsIHN0cnVjdCBzdHJidWYgKm5hbWUsIHN0cnVjdCBzdHJidWYgKmVtYWlsKQogewogCXN0cnVjdCBzdHJidWYgKnNyYyA9IG5hbWU7CkBAIC0xMDksMTEgKzExMiwxOSBAQAogCXN0cmJ1Zl9hZGQoJmVtYWlsLCBhdCwgZWwpOwogCXN0cmJ1Zl9yZW1vdmUoJmYsIGF0IC0gZi5idWYsIGVsICsgKGF0W2VsXSA/IDEgOiAwKSk7CiAKLQkvKiBUaGUgcmVtYWluZGVyIGlzIG5hbWUuICBJdCBjb3VsZCBiZSAiSm9obiBEb2UgPGpvaG4uZG9lQHh6PiIKLQkgKiBvciAiam9obi5kb2VAeHogKEpvaG4gRG9lKSIsIGJ1dCB3ZSBoYXZlIHJlbW92ZWQgdGhlCi0JICogZW1haWwgcGFydCwgc28gdHJpbSBmcm9tIGJvdGggZW5kcywgcG9zc2libHkgcmVtb3ZpbmcKLQkgKiB0aGUgKCkgcGFpciBhdCB0aGUgZW5kLgorCS8qIFRoZSByZW1haW5kZXIgaXMgbmFtZS4gIEl0IGNvdWxkIGJlCisJICoKKwkgKiAtICJKb2huIERvZSA8am9obi5kb2VAeHo+IgkJCShhKSwgb3IKKwkgKiAtICJqb2huLmRvZUB4eiAoSm9obiBEb2UpIgkJCShiKSwgb3IKKwkgKiAtICJKb2huICh6enopIERvZSA8am9obi5kb2VAeHo+IChDb21tZW50KSIJKGMpCisJICoKKwkgKiBidXQgd2UgaGF2ZSByZW1vdmVkIHRoZSBlbWFpbCBwYXJ0LCBzbworCSAqCisJICogLSByZW1vdmUgZXh0cmEgc3BhY2VzIHdoaWNoIGNvdWxkIHN0YXkgYWZ0ZXIgZW1haWwgKGNhc2UgJ2MnKSwgYW5kCisJICogLSB0cmltIGZyb20gYm90aCBlbmRzLCBwb3NzaWJseSByZW1vdmluZyB0aGUgKCkgcGFpciBhdCB0aGUgZW5kCisJICogICAoY2FzZXMgJ2EnIGFuZCAnYicpLgogCSAqLworCWNsZWFudXBfc3BhY2UoJmYpOwogCXN0cmJ1Zl90cmltKCZmKTsKIAlpZiAoZi5idWZbMF0gPT0gJygnICYmIGYubGVuICYmIGYuYnVmW2YubGVuIC0gMV0gPT0gJyknKSB7CiAJCXN0cmJ1Zl9yZW1vdmUoJmYsIDAsIDEpOwpAQCAtMTgyLDggKzE5Myw3IEBACiAJCSpjb250ZW50X3RvcCA9IGJvdW5kYXJ5OwogCQlib3VuZGFyeSA9IE5VTEw7CiAJfQotCWlmIChzbHVycF9hdHRyKGxpbmUtPmJ1ZiwgImNoYXJzZXQ9IiwgJmNoYXJzZXQpKQotCQlzdHJidWZfdG9sb3dlcigmY2hhcnNldCk7CisJc2x1cnBfYXR0cihsaW5lLT5idWYsICJjaGFyc2V0PSIsICZjaGFyc2V0KTsKIAogCWlmIChib3VuZGFyeSkgewogCQlzdHJidWZfcmVsZWFzZShib3VuZGFyeSk7CkBAIC00NzAsNyArNDgwLDcgQEAKIAkJaWYgKGlzX3V0ZjgobGluZS0+YnVmKSkKIAkJCXJldHVybiBOVUxMOwogCX0KLQlyZXR1cm4gImxhdGluMSI7CisJcmV0dXJuICJJU084ODU5LTEiOwogfQogCiBzdGF0aWMgdm9pZCBjb252ZXJ0X3RvX3V0Zjgoc3RydWN0IHN0cmJ1ZiAqbGluZSwgY29uc3QgY2hhciAqY2hhcnNldCkKQEAgLTQ4MywxMSArNDkzLDExIEBACiAJCQlyZXR1cm47CiAJfQogCi0JaWYgKCFzdHJjbXAobWV0YWluZm9fY2hhcnNldCwgY2hhcnNldCkpCisJaWYgKCFzdHJjYXNlY21wKG1ldGFpbmZvX2NoYXJzZXQsIGNoYXJzZXQpKQogCQlyZXR1cm47CiAJb3V0ID0gcmVlbmNvZGVfc3RyaW5nKGxpbmUtPmJ1ZiwgbWV0YWluZm9fY2hhcnNldCwgY2hhcnNldCk7CiAJaWYgKCFvdXQpCi0JCWRpZSgiY2Fubm90IGNvbnZlcnQgZnJvbSAlcyB0byAlc1xuIiwKKwkJZGllKCJjYW5ub3QgY29udmVydCBmcm9tICVzIHRvICVzIiwKIAkJICAgIGNoYXJzZXQsIG1ldGFpbmZvX2NoYXJzZXQpOwogCXN0cmJ1Zl9hdHRhY2gobGluZSwgb3V0LCBzdHJsZW4ob3V0KSwgc3RybGVuKG91dCkpOwogfQpAQCAtNTI2LDcgKzUzNiw2IEBACiAJCQkJICovCiAJCQkJc3RyYnVmX2FkZCgmb3V0YnVmLCBpbiwgZXAgLSBpbik7CiAJCQl9Ci0JCQlpbiA9IGVwOwogCQl9CiAJCS8qIEUuZy4KIAkJICogZXAgOiAiPT9pc28tMjAyMi1qcD9CP0d5Ui4uLj89IGZvbyIKQEAgLTU0MCw3ICs1NDksNiBAQAogCQlpZiAoY3AgKyAzIC0gaXQtPmJ1ZiA+IGl0LT5sZW4pCiAJCQlnb3RvIGRlY29kZV9oZWFkZXJfYnFfb3V0OwogCQlzdHJidWZfYWRkKCZjaGFyc2V0X3EsIGVwLCBjcCAtIGVwKTsKLQkJc3RyYnVmX3RvbG93ZXIoJmNoYXJzZXRfcSk7CiAKIAkJZW5jb2RpbmcgPSBjcFsxXTsKIAkJaWYgKCFlbmNvZGluZyB8fCBjcFsyXSAhPSAnPycpCkBAIC05MzQsNyArOTQyLDcgQEAKIAkgKi8KIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKLQlkZWZfY2hhcnNldCA9IChnaXRfY29tbWl0X2VuY29kaW5nID8gZ2l0X2NvbW1pdF9lbmNvZGluZyA6ICJ1dGYtOCIpOworCWRlZl9jaGFyc2V0ID0gKGdpdF9jb21taXRfZW5jb2RpbmcgPyBnaXRfY29tbWl0X2VuY29kaW5nIDogIlVURi04Iik7CiAJbWV0YWluZm9fY2hhcnNldCA9IGRlZl9jaGFyc2V0OwogCiAJd2hpbGUgKDEgPCBhcmdjICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7CmRpZmYgLS1naXQgYS9idWlsdGluLW1haWxzcGxpdC5jIGIvYnVpbHRpbi1tYWlsc3BsaXQuYwppbmRleCA3MWYzYjNiLi5hZDVmNmI1IDEwMDY0NAotLS0gYS9idWlsdGluLW1haWxzcGxpdC5jCisrKyBiL2J1aWx0aW4tbWFpbHNwbGl0LmMKQEAgLTgxLDcgKzgxLDcgQEAKIAogCWZkID0gb3BlbihuYW1lLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOwogCWlmIChmZCA8IDApCi0JCWRpZSgiY2Fubm90IG9wZW4gb3V0cHV0IGZpbGUgJXMiLCBuYW1lKTsKKwkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiBvdXRwdXQgZmlsZSAnJXMnIiwgbmFtZSk7CiAJb3V0cHV0ID0gZmRvcGVuKGZkLCAidyIpOwogCiAJLyogQ29weSBpdCBvdXQsIHdoaWxlIHNlYXJjaGluZyBmb3IgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGgKQEAgLTkxLDcgKzkxLDcgQEAKIAkJaW50IGlzX3BhcnRpYWwgPSBsZW4gJiYgYnVmW2xlbi0xXSAhPSAnXG4nOwogCiAJCWlmIChmd3JpdGUoYnVmLCAxLCBsZW4sIG91dHB1dCkgIT0gbGVuKQotCQkJZGllKCJjYW5ub3Qgd3JpdGUgb3V0cHV0Iik7CisJCQlkaWVfZXJybm8oImNhbm5vdCB3cml0ZSBvdXRwdXQiKTsKIAogCQlsZW4gPSByZWFkX2xpbmVfd2l0aF9udWwoYnVmLCBzaXplb2YoYnVmKSwgbWJveCk7CiAJCWlmIChsZW4gPT0gMCkgewpAQCAtOTksNyArOTksNyBAQAogCQkJCXN0YXR1cyA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlkaWUoImNhbm5vdCByZWFkIG1ib3giKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IHJlYWQgbWJveCIpOwogCQl9CiAJCWlmICghaXNfcGFydGlhbCAmJiAhaXNfYmFyZSAmJiBpc19mcm9tX2xpbmUoYnVmLCBsZW4pKQogCQkJYnJlYWs7IC8qIGRvbmUgd2l0aCBvbmUgbWVzc2FnZSAqLwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tZXJnZS1iYXNlLmMgYi9idWlsdGluLW1lcmdlLWJhc2UuYwppbmRleCAwM2ZjMWMyLi5hNmVjMmY3IDEwMDY0NAotLS0gYS9idWlsdGluLW1lcmdlLWJhc2UuYworKysgYi9idWlsdGluLW1lcmdlLWJhc2UuYwpAQCAtNTMsNyArNTMsNyBAQAogCX07CiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7Ci0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgbWVyZ2VfYmFzZV91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBtZXJnZV9iYXNlX3VzYWdlLCAwKTsKIAlpZiAoYXJnYyA8IDIpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhtZXJnZV9iYXNlX3VzYWdlLCBvcHRpb25zKTsKIAlyZXYgPSB4bWFsbG9jKGFyZ2MgKiBzaXplb2YoKnJldikpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tZXJnZS1maWxlLmMgYi9idWlsdGluLW1lcmdlLWZpbGUuYwppbmRleCA5NmVkYjk3Li5hZmQyZWE3IDEwMDY0NAotLS0gYS9idWlsdGluLW1lcmdlLWZpbGUuYworKysgYi9idWlsdGluLW1lcmdlLWZpbGUuYwpAQCAtNDgsNyArNDgsNyBAQAogCQkJbWVyZ2Vfc3R5bGUgPSBnaXRfeG1lcmdlX3N0eWxlOwogCX0KIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIG1lcmdlX2ZpbGVfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgbWVyZ2VfZmlsZV91c2FnZSwgMCk7CiAJaWYgKGFyZ2MgIT0gMykKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKG1lcmdlX2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOwogCWlmIChxdWlldCkgewpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tZXJnZS1yZWN1cnNpdmUuYyBiL2J1aWx0aW4tbWVyZ2UtcmVjdXJzaXZlLmMKaW5kZXggNmI1MzRjMS4uZDI2YTk2ZSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1tZXJnZS1yZWN1cnNpdmUuYworKysgYi9idWlsdGluLW1lcmdlLXJlY3Vyc2l2ZS5jCkBAIC0zMyw3ICszMyw3IEBACiAJfQogCiAJaWYgKGFyZ2MgPCA0KQotCQlkaWUoIlVzYWdlOiAlcyA8YmFzZT4uLi4gLS0gPGhlYWQ+IDxyZW1vdGU+IC4uLlxuIiwgYXJndlswXSk7CisJCWRpZSgiVXNhZ2U6ICVzIDxiYXNlPi4uLiAtLSA8aGVhZD4gPHJlbW90ZT4gLi4uIiwgYXJndlswXSk7CiAKIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7CiAJCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLSIpKQpAQCAtNDUsOCArNDUsOSBAQAogCQkJYmFzZXNbYmFzZXNfY291bnQrK10gPSBzaGE7CiAJCX0KIAkJZWxzZQotCQkJd2FybmluZygiQ2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJXp1IGJhc2VzLiAiCi0JCQkJIklnbm9yaW5nICVzLiIsIEFSUkFZX1NJWkUoYmFzZXMpLTEsIGFyZ3ZbaV0pOworCQkJd2FybmluZygiQ2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZXMuICIKKwkJCQkiSWdub3JpbmcgJXMuIiwKKwkJCQkoaW50KUFSUkFZX1NJWkUoYmFzZXMpLTEsIGFyZ3ZbaV0pOwogCX0KIAlpZiAoYXJnYyAtIGkgIT0gMykgLyogIi0tIiAiPGhlYWQ+IiAiPHJlbW90ZT4iICovCiAJCWRpZSgiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tZXJnZS5jIGIvYnVpbHRpbi1tZXJnZS5jCmluZGV4IDIxNzllMDYuLjgyYjU0NjYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbWVyZ2UuYworKysgYi9idWlsdGluLW1lcmdlLmMKQEAgLTM2LDggKzM2LDggQEAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9tZXJnZV91c2FnZVtdID0gewotCSJnaXQtbWVyZ2UgW29wdGlvbnNdIDxyZW1vdGU+Li4uIiwKLQkiZ2l0LW1lcmdlIFtvcHRpb25zXSA8bXNnPiBIRUFEIDxyZW1vdGU+IiwKKwkiZ2l0IG1lcmdlIFtvcHRpb25zXSA8cmVtb3RlPi4uLiIsCisJImdpdCBtZXJnZSBbb3B0aW9uc10gPG1zZz4gSEVBRCA8cmVtb3RlPiIsCiAJTlVMTAogfTsKIApAQCAtMjY4LDcgKzI2OCw3IEBACiAJcHJpbnRmKCJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iKTsKIAlmZCA9IG9wZW4oZ2l0X3BhdGgoIlNRVUFTSF9NU0ciKSwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjY2KTsKIAlpZiAoZmQgPCAwKQotCQlkaWUoIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIsIGdpdF9wYXRoKCJTUVVBU0hfTVNHIikpOworCQlkaWVfZXJybm8oIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiwgZ2l0X3BhdGgoIlNRVUFTSF9NU0ciKSk7CiAKIAlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKIAlyZXYuaWdub3JlX21lcmdlcyA9IDE7CkBAIC0yOTQsNDEgKzI5NCwxMiBAQAogCQkJTlVMTCwgTlVMTCwgcmV2LmRhdGVfbW9kZSwgMCk7CiAJfQogCWlmICh3cml0ZShmZCwgb3V0LmJ1Ziwgb3V0LmxlbikgPCAwKQotCQlkaWUoIldyaXRpbmcgU1FVQVNIX01TRzogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIldyaXRpbmcgU1FVQVNIX01TRyIpOwogCWlmIChjbG9zZShmZCkpCi0JCWRpZSgiRmluaXNoaW5nIFNRVUFTSF9NU0c6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJGaW5pc2hpbmcgU1FVQVNIX01TRyIpOwogCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOwogfQogCi1zdGF0aWMgaW50IHJ1bl9ob29rKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGNoaWxkX3Byb2Nlc3MgaG9vazsKLQljb25zdCBjaGFyICphcmd2WzNdLCAqZW52WzJdOwotCWNoYXIgaW5kZXhbUEFUSF9NQVhdOwotCi0JYXJndlswXSA9IGdpdF9wYXRoKCJob29rcy8lcyIsIG5hbWUpOwotCWlmIChhY2Nlc3MoYXJndlswXSwgWF9PSykgPCAwKQotCQlyZXR1cm4gMDsKLQotCXNucHJpbnRmKGluZGV4LCBzaXplb2YoaW5kZXgpLCAiR0lUX0lOREVYX0ZJTEU9JXMiLCBnZXRfaW5kZXhfZmlsZSgpKTsKLQllbnZbMF0gPSBpbmRleDsKLQllbnZbMV0gPSBOVUxMOwotCi0JaWYgKHNxdWFzaCkKLQkJYXJndlsxXSA9ICIxIjsKLQllbHNlCi0JCWFyZ3ZbMV0gPSAiMCI7Ci0JYXJndlsyXSA9IE5VTEw7Ci0KLQltZW1zZXQoJmhvb2ssIDAsIHNpemVvZihob29rKSk7Ci0JaG9vay5hcmd2ID0gYXJndjsKLQlob29rLm5vX3N0ZGluID0gMTsKLQlob29rLnN0ZG91dF90b19zdGRlcnIgPSAxOwotCWhvb2suZW52ID0gZW52OwotCi0JcmV0dXJuIHJ1bl9jb21tYW5kKCZob29rKTsKLX0KLQogc3RhdGljIHZvaWQgZmluaXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19oZWFkLCBjb25zdCBjaGFyICptc2cpCiB7CiAJc3RydWN0IHN0cmJ1ZiByZWZsb2dfbWVzc2FnZSA9IFNUUkJVRl9JTklUOwpAQCAtMzc0LDcgKzM0NSw3IEBACiAJfQogCiAJLyogUnVuIGEgcG9zdC1tZXJnZSBob29rICovCi0JcnVuX2hvb2soInBvc3QtbWVyZ2UiKTsKKwlydW5faG9vayhOVUxMLCAicG9zdC1tZXJnZSIsIHNxdWFzaCA/ICIxIiA6ICIwIiwgTlVMTCk7CiAKIAlzdHJidWZfcmVsZWFzZSgmcmVmbG9nX21lc3NhZ2UpOwogfQpAQCAtMzg1LDkgKzM1NiwxMyBAQAogCXN0cnVjdCBvYmplY3QgKnJlbW90ZV9oZWFkOwogCXVuc2lnbmVkIGNoYXIgYnJhbmNoX2hlYWRbMjBdLCBidWZfc2hhWzIwXTsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYm5hbWUgPSBTVFJCVUZfSU5JVDsKIAljb25zdCBjaGFyICpwdHI7CiAJaW50IGxlbiwgZWFybHk7CiAKKwlzdHJidWZfYnJhbmNobmFtZSgmYm5hbWUsIHJlbW90ZSk7CisJcmVtb3RlID0gYm5hbWUuYnVmOworCiAJbWVtc2V0KGJyYW5jaF9oZWFkLCAwLCBzaXplb2YoYnJhbmNoX2hlYWQpKTsKIAlyZW1vdGVfaGVhZCA9IHBlZWxfdG9fdHlwZShyZW1vdGUsIDAsIE5VTEwsIE9CSl9DT01NSVQpOwogCWlmICghcmVtb3RlX2hlYWQpCkBAIC0zOTUsMTIgKzM3MCwxMiBAQAogCiAJc3RyYnVmX2FkZHN0cigmYnVmLCAicmVmcy9oZWFkcy8iKTsKIAlzdHJidWZfYWRkc3RyKCZidWYsIHJlbW90ZSk7Ci0JcmVzb2x2ZV9yZWYoYnVmLmJ1ZiwgYnJhbmNoX2hlYWQsIDAsIDApOworCXJlc29sdmVfcmVmKGJ1Zi5idWYsIGJyYW5jaF9oZWFkLCAwLCBOVUxMKTsKIAogCWlmICghaGFzaGNtcChyZW1vdGVfaGVhZC0+c2hhMSwgYnJhbmNoX2hlYWQpKSB7CiAJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXHRcdGJyYW5jaCAnJXMnIG9mIC5cbiIsCiAJCQlzaGExX3RvX2hleChicmFuY2hfaGVhZCksIHJlbW90ZSk7Ci0JCXJldHVybjsKKwkJZ290byBjbGVhbnVwOwogCX0KIAogCS8qIFNlZSBpZiByZW1vdGUgbWF0Y2hlcyA8bmFtZT5eXl4uLiBvciA8bmFtZT5+PG51bWJlcj4gKi8KQEAgLTQzNCwxMyArNDA5LDE0IEBACiAJCXN0cmJ1Zl9hZGRzdHIoJnRydW5hbWUsICJyZWZzL2hlYWRzLyIpOwogCQlzdHJidWZfYWRkc3RyKCZ0cnVuYW1lLCByZW1vdGUpOwogCQlzdHJidWZfc2V0bGVuKCZ0cnVuYW1lLCB0cnVuYW1lLmxlbiAtIGxlbik7Ci0JCWlmIChyZXNvbHZlX3JlZih0cnVuYW1lLmJ1ZiwgYnVmX3NoYSwgMCwgMCkpIHsKKwkJaWYgKHJlc29sdmVfcmVmKHRydW5hbWUuYnVmLCBidWZfc2hhLCAwLCBOVUxMKSkgewogCQkJc3RyYnVmX2FkZGYobXNnLAogCQkJCSAgICAiJXNcdFx0YnJhbmNoICclcyclcyBvZiAuXG4iLAogCQkJCSAgICBzaGExX3RvX2hleChyZW1vdGVfaGVhZC0+c2hhMSksCiAJCQkJICAgIHRydW5hbWUuYnVmICsgMTEsCiAJCQkJICAgIChlYXJseSA/ICIgKGVhcmx5IHBhcnQpIiA6ICIiKSk7Ci0JCQlyZXR1cm47CisJCQlzdHJidWZfcmVsZWFzZSgmdHJ1bmFtZSk7CisJCQlnb3RvIGNsZWFudXA7CiAJCX0KIAl9CiAKQEAgLTQ1Miw4ICs0MjgsOCBAQAogCiAJCWZwID0gZm9wZW4oZ2l0X3BhdGgoIkZFVENIX0hFQUQiKSwgInIiKTsKIAkJaWYgKCFmcCkKLQkJCWRpZSgiY291bGQgbm90IG9wZW4gJXMgZm9yIHJlYWRpbmc6ICVzIiwKLQkJCQlnaXRfcGF0aCgiRkVUQ0hfSEVBRCIpLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIiwKKwkJCQkgIGdpdF9wYXRoKCJGRVRDSF9IRUFEIikpOwogCQlzdHJidWZfZ2V0bGluZSgmbGluZSwgZnAsICdcbicpOwogCQlmY2xvc2UoZnApOwogCQlwdHIgPSBzdHJzdHIobGluZS5idWYsICJcdG5vdC1mb3ItbWVyZ2VcdCIpOwpAQCAtNDYxLDEwICs0MzcsMTMgQEAKIAkJCXN0cmJ1Zl9yZW1vdmUoJmxpbmUsIHB0ci1saW5lLmJ1ZisxLCAxMyk7CiAJCXN0cmJ1Zl9hZGRidWYobXNnLCAmbGluZSk7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKLQkJcmV0dXJuOworCQlnb3RvIGNsZWFudXA7CiAJfQogCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXHRcdGNvbW1pdCAnJXMnXG4iLAogCQlzaGExX3RvX2hleChyZW1vdGVfaGVhZC0+c2hhMSksIHJlbW90ZSk7CitjbGVhbnVwOgorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZibmFtZSk7CiB9CiAKIHN0YXRpYyBpbnQgZ2l0X21lcmdlX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKQEAgLTQ4Myw3ICs0NjIsNyBAQAogCQlhcmd2ID0geHJlYWxsb2MoYXJndiwgc2l6ZW9mKCphcmd2KSAqIChhcmdjICsgMikpOwogCQltZW1tb3ZlKGFyZ3YgKyAxLCBhcmd2LCBzaXplb2YoKmFyZ3YpICogKGFyZ2MgKyAxKSk7CiAJCWFyZ2MrKzsKLQkJcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX21lcmdlX29wdGlvbnMsCisJCXBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgYnVpbHRpbl9tZXJnZV9vcHRpb25zLAogCQkJICAgICAgYnVpbHRpbl9tZXJnZV91c2FnZSwgMCk7CiAJCWZyZWUoYnVmKTsKIAl9CkBAIC02NTYsNyArNjM1LDcgQEAKIAltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CiAJbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOwogCW1lbXNldCgmZGlyLCAwLCBzaXplb2YoZGlyKSk7Ci0JZGlyLnNob3dfaWdub3JlZCA9IDE7CisJZGlyLmZsYWdzIHw9IERJUl9TSE9XX0lHTk9SRUQ7CiAJZGlyLmV4Y2x1ZGVfcGVyX2RpciA9ICIuZ2l0aWdub3JlIjsKIAlvcHRzLmRpciA9ICZkaXI7CiAKQEAgLTc4NSw3ICs3NjQsOCBAQAogCiAJZnAgPSBmb3BlbihnaXRfcGF0aCgiTUVSR0VfTVNHIiksICJhIik7CiAJaWYgKCFmcCkKLQkJZGllKCJDb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIsIGdpdF9wYXRoKCJNRVJHRV9NU0ciKSk7CisJCWRpZV9lcnJubygiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIsCisJCQkgIGdpdF9wYXRoKCJNRVJHRV9NU0ciKSk7CiAJZnByaW50ZihmcCwgIlxuQ29uZmxpY3RzOlxuIik7CiAJZm9yIChwb3MgPSAwOyBwb3MgPCBhY3RpdmVfbnI7IHBvcysrKSB7CiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKQEAgLTg1Nyw4ICs4MzcsMTEgQEAKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKipyZW1vdGVzID0gJnJlbW90ZWhlYWRzOwogCiAJc2V0dXBfd29ya190cmVlKCk7CisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoKCJNRVJHRV9IRUFEIikpKQorCQlkaWUoIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZS4gKE1FUkdFX0hFQUQgZXhpc3RzKSIpOwogCWlmIChyZWFkX2NhY2hlX3VubWVyZ2VkKCkpCi0JCWRpZSgiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS4iKTsKKwkJZGllKCJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25mbGljdGVkIG1lcmdlLiIKKwkJCQkiIChpbmRleCB1bm1lcmdlZCkiKTsKIAogCS8qCiAJICogQ2hlY2sgaWYgd2UgYXJlIF9ub3RfIG9uIGEgZGV0YWNoZWQgSEVBRCwgaS5lLiBpZiB0aGVyZSBpcyBhCkBAIC04NzYsNyArODU5LDcgQEAKIAlpZiAoZGlmZl91c2VfY29sb3JfZGVmYXVsdCA9PSAtMSkKIAkJZGlmZl91c2VfY29sb3JfZGVmYXVsdCA9IGdpdF91c2VfY29sb3JfZGVmYXVsdDsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fbWVyZ2Vfb3B0aW9ucywKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fbWVyZ2Vfb3B0aW9ucywKIAkJCWJ1aWx0aW5fbWVyZ2VfdXNhZ2UsIDApOwogCWlmICh2ZXJib3NpdHkgPCAwKQogCQlzaG93X2RpZmZzdGF0ID0gMDsKQEAgLTEyMDcsMjcgKzExOTAsMjkgQEAKIAkJCQlzaGExX3RvX2hleChqLT5pdGVtLT5vYmplY3Quc2hhMSkpOwogCQlmZCA9IG9wZW4oZ2l0X3BhdGgoIk1FUkdFX0hFQUQiKSwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjY2KTsKIAkJaWYgKGZkIDwgMCkKLQkJCWRpZSgiQ291bGQgb3BlbiAlcyBmb3Igd3JpdGluZyIsCi0JCQkJZ2l0X3BhdGgoIk1FUkdFX0hFQUQiKSk7CisJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciLAorCQkJCSAgZ2l0X3BhdGgoIk1FUkdFX0hFQUQiKSk7CiAJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYuYnVmLCBidWYubGVuKSAhPSBidWYubGVuKQotCQkJZGllKCJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiLCBnaXRfcGF0aCgiTUVSR0VfSEVBRCIpKTsKKwkJCWRpZV9lcnJubygiQ291bGQgbm90IHdyaXRlIHRvICclcyciLCBnaXRfcGF0aCgiTUVSR0VfSEVBRCIpKTsKIAkJY2xvc2UoZmQpOwogCQlzdHJidWZfYWRkY2goJm1lcmdlX21zZywgJ1xuJyk7CiAJCWZkID0gb3BlbihnaXRfcGF0aCgiTUVSR0VfTVNHIiksIE9fV1JPTkxZIHwgT19DUkVBVCwgMDY2Nik7CiAJCWlmIChmZCA8IDApCi0JCQlkaWUoIkNvdWxkIG9wZW4gJXMgZm9yIHdyaXRpbmciLCBnaXRfcGF0aCgiTUVSR0VfTVNHIikpOworCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiwKKwkJCQkgIGdpdF9wYXRoKCJNRVJHRV9NU0ciKSk7CiAJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBtZXJnZV9tc2cuYnVmLCBtZXJnZV9tc2cubGVuKSAhPQogCQkJbWVyZ2VfbXNnLmxlbikKLQkJCWRpZSgiQ291bGQgbm90IHdyaXRlIHRvICVzIiwgZ2l0X3BhdGgoIk1FUkdFX01TRyIpKTsKKwkJCWRpZV9lcnJubygiQ291bGQgbm90IHdyaXRlIHRvICclcyciLCBnaXRfcGF0aCgiTUVSR0VfTVNHIikpOwogCQljbG9zZShmZCk7CiAJCWZkID0gb3BlbihnaXRfcGF0aCgiTUVSR0VfTU9ERSIpLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjY2KTsKIAkJaWYgKGZkIDwgMCkKLQkJCWRpZSgiQ291bGQgb3BlbiAlcyBmb3Igd3JpdGluZyIsIGdpdF9wYXRoKCJNRVJHRV9NT0RFIikpOworCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiwKKwkJCQkgIGdpdF9wYXRoKCJNRVJHRV9NT0RFIikpOwogCQlzdHJidWZfcmVzZXQoJmJ1Zik7CiAJCWlmICghYWxsb3dfZmFzdF9mb3J3YXJkKQogCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIm5vLWZmIik7CiAJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYuYnVmLCBidWYubGVuKSAhPSBidWYubGVuKQotCQkJZGllKCJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiLCBnaXRfcGF0aCgiTUVSR0VfTU9ERSIpKTsKKwkJCWRpZV9lcnJubygiQ291bGQgbm90IHdyaXRlIHRvICclcyciLCBnaXRfcGF0aCgiTUVSR0VfTU9ERSIpKTsKIAkJY2xvc2UoZmQpOwogCX0KIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi1ta3RyZWUuYyBiL2J1aWx0aW4tbWt0cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4Mzk1ZgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4tbWt0cmVlLmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBHSVQgLSB0aGUgc3R1cGlkIGNvbnRlbnQgdHJhY2tlcgorICoKKyAqIENvcHlyaWdodCAoYykgSnVuaW8gQyBIYW1hbm8sIDIwMDYsIDIwMDkKKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdHJlZWVudCB7CisJdW5zaWduZWQgbW9kZTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBsZW47CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfSAqKmVudHJpZXM7CitzdGF0aWMgaW50IGFsbG9jLCB1c2VkOworCitzdGF0aWMgdm9pZCBhcHBlbmRfdG9fdHJlZSh1bnNpZ25lZCBtb2RlLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICpwYXRoKQoreworCXN0cnVjdCB0cmVlZW50ICplbnQ7CisJaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAoc3RyY2hyKHBhdGgsICcvJykpCisJCWRpZSgicGF0aCAlcyBjb250YWlucyBzbGFzaCIsIHBhdGgpOworCisJaWYgKGFsbG9jIDw9IHVzZWQpIHsKKwkJYWxsb2MgPSBhbGxvY19ucih1c2VkKTsKKwkJZW50cmllcyA9IHhyZWFsbG9jKGVudHJpZXMsIHNpemVvZigqZW50cmllcykgKiBhbGxvYyk7CisJfQorCWVudCA9IGVudHJpZXNbdXNlZCsrXSA9IHhtYWxsb2Moc2l6ZW9mKCoqZW50cmllcykgKyBsZW4gKyAxKTsKKwllbnQtPm1vZGUgPSBtb2RlOworCWVudC0+bGVuID0gbGVuOworCWhhc2hjcHkoZW50LT5zaGExLCBzaGExKTsKKwltZW1jcHkoZW50LT5uYW1lLCBwYXRoLCBsZW4rMSk7Cit9CisKK3N0YXRpYyBpbnQgZW50X2NvbXBhcmUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCB0cmVlZW50ICphID0gKihzdHJ1Y3QgdHJlZWVudCAqKilhXzsKKwlzdHJ1Y3QgdHJlZWVudCAqYiA9ICooc3RydWN0IHRyZWVlbnQgKiopYl87CisJcmV0dXJuIGJhc2VfbmFtZV9jb21wYXJlKGEtPm5hbWUsIGEtPmxlbiwgYS0+bW9kZSwKKwkJCQkgYi0+bmFtZSwgYi0+bGVuLCBiLT5tb2RlKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBzdHJidWYgYnVmOworCXNpemVfdCBzaXplOworCWludCBpOworCisJcXNvcnQoZW50cmllcywgdXNlZCwgc2l6ZW9mKCplbnRyaWVzKSwgZW50X2NvbXBhcmUpOworCWZvciAoc2l6ZSA9IGkgPSAwOyBpIDwgdXNlZDsgaSsrKQorCQlzaXplICs9IDMyICsgZW50cmllc1tpXS0+bGVuOworCisJc3RyYnVmX2luaXQoJmJ1Ziwgc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IHVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgdHJlZWVudCAqZW50ID0gZW50cmllc1tpXTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVvICVzJWMiLCBlbnQtPm1vZGUsIGVudC0+bmFtZSwgJ1wwJyk7CisJCXN0cmJ1Zl9hZGQoJmJ1ZiwgZW50LT5zaGExLCAyMCk7CisJfQorCisJd3JpdGVfc2hhMV9maWxlKGJ1Zi5idWYsIGJ1Zi5sZW4sIHRyZWVfdHlwZSwgc2hhMSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpta3RyZWVfdXNhZ2VbXSA9IHsKKwkiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIsCisJTlVMTAorfTsKKworc3RhdGljIHZvaWQgbWt0cmVlX2xpbmUoY2hhciAqYnVmLCBzaXplX3QgbGVuLCBpbnQgbGluZV90ZXJtaW5hdGlvbiwgaW50IGFsbG93X21pc3NpbmcpCit7CisJY2hhciAqcHRyLCAqbnRyOworCXVuc2lnbmVkIG1vZGU7CisJZW51bSBvYmplY3RfdHlwZSBtb2RlX3R5cGU7IC8qIG9iamVjdCB0eXBlIGRlcml2ZWQgZnJvbSBtb2RlICovCisJZW51bSBvYmplY3RfdHlwZSBvYmpfdHlwZTsgLyogb2JqZWN0IHR5cGUgZGVyaXZlZCBmcm9tIHNoYSAqLworCWNoYXIgKnBhdGg7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCXB0ciA9IGJ1ZjsKKwkvKgorCSAqIFJlYWQgbm9uLXJlY3Vyc2l2ZSBscy10cmVlIG91dHB1dCBmb3JtYXQ6CisJICogICAgIG1vZGUgU1AgdHlwZSBTUCBzaGExIFRBQiBuYW1lCisJICovCisJbW9kZSA9IHN0cnRvdWwocHRyLCAmbnRyLCA4KTsKKwlpZiAocHRyID09IG50ciB8fCAhbnRyIHx8ICpudHIgIT0gJyAnKQorCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogJXMiLCBidWYpOworCXB0ciA9IG50ciArIDE7IC8qIHR5cGUgKi8KKwludHIgPSBzdHJjaHIocHRyLCAnICcpOworCWlmICghbnRyIHx8IGJ1ZiArIGxlbiA8PSBudHIgKyA0MCB8fAorCSAgICBudHJbNDFdICE9ICdcdCcgfHwKKwkgICAgZ2V0X3NoYTFfaGV4KG50ciArIDEsIHNoYTEpKQorCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogJXMiLCBidWYpOworCisJLyogSXQgaXMgcGVyZmVjdGx5IG5vcm1hbCBpZiB3ZSBkbyBub3QgaGF2ZSBhIGNvbW1pdCBmcm9tIGEgc3VibW9kdWxlICovCisJaWYgKFNfSVNHSVRMSU5LKG1vZGUpKQorCQlhbGxvd19taXNzaW5nID0gMTsKKworCisJKm50cisrID0gMDsgLyogbm93IGF0IHRoZSBiZWdpbm5pbmcgb2YgU0hBMSAqLworCisJcGF0aCA9IG50ciArIDQxOyAgLyogYXQgdGhlIGJlZ2lubmluZyBvZiBuYW1lICovCisJaWYgKGxpbmVfdGVybWluYXRpb24gJiYgcGF0aFswXSA9PSAnIicpIHsKKwkJc3RydWN0IHN0cmJ1ZiBwX3VxID0gU1RSQlVGX0lOSVQ7CisJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnBfdXEsIHBhdGgsIE5VTEwpKQorCQkJZGllKCJpbnZhbGlkIHF1b3RpbmciKTsKKwkJcGF0aCA9IHN0cmJ1Zl9kZXRhY2goJnBfdXEsIE5VTEwpOworCX0KKworCS8qCisJICogT2JqZWN0IHR5cGUgaXMgcmVkdW5kYW50bHkgZGVyaXZhYmxlIHRocmVlIHdheXMuCisJICogVGhlc2Ugc2hvdWxkIGFsbCBhZ3JlZS4KKwkgKi8KKwltb2RlX3R5cGUgPSBvYmplY3RfdHlwZShtb2RlKTsKKwlpZiAobW9kZV90eXBlICE9IHR5cGVfZnJvbV9zdHJpbmcocHRyKSkgeworCQlkaWUoImVudHJ5ICclcycgb2JqZWN0IHR5cGUgKCVzKSBkb2Vzbid0IG1hdGNoIG1vZGUgdHlwZSAoJXMpIiwKKwkJCXBhdGgsIHB0ciwgdHlwZW5hbWUobW9kZV90eXBlKSk7CisJfQorCisJLyogQ2hlY2sgdGhlIHR5cGUgb2Ygb2JqZWN0IGlkZW50aWZpZWQgYnkgc2hhMSAqLworCW9ial90eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwlpZiAob2JqX3R5cGUgPCAwKSB7CisJCWlmIChhbGxvd19taXNzaW5nKSB7CisJCQk7IC8qIG5vIHByb2JsZW0gLSBtaXNzaW5nIG9iamVjdHMgYXJlIHByZXN1bWVkIHRvIGJlIG9mIHRoZSByaWdodCB0eXBlICovCisJCX0gZWxzZSB7CisJCQlkaWUoImVudHJ5ICclcycgb2JqZWN0ICVzIGlzIHVuYXZhaWxhYmxlIiwgcGF0aCwgc2hhMV90b19oZXgoc2hhMSkpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG9ial90eXBlICE9IG1vZGVfdHlwZSkgeworCQkJLyoKKwkJCSAqIFRoZSBvYmplY3QgZXhpc3RzIGJ1dCBpcyBvZiB0aGUgd3JvbmcgdHlwZS4KKwkJCSAqIFRoaXMgaXMgYSBwcm9ibGVtIHJlZ2FyZGxlc3Mgb2YgYWxsb3dfbWlzc2luZworCQkJICogYmVjYXVzZSB0aGUgbmV3IHRyZWUgZW50cnkgd2lsbCBuZXZlciBiZSBjb3JyZWN0LgorCQkJICovCisJCQlkaWUoImVudHJ5ICclcycgb2JqZWN0ICVzIGlzIGEgJXMgYnV0IHNwZWNpZmllZCB0eXBlIHdhcyAoJXMpIiwKKwkJCQlwYXRoLCBzaGExX3RvX2hleChzaGExKSwgdHlwZW5hbWUob2JqX3R5cGUpLCB0eXBlbmFtZShtb2RlX3R5cGUpKTsKKwkJfQorCX0KKworCWFwcGVuZF90b190cmVlKG1vZGUsIHNoYTEsIHBhdGgpOworfQorCitpbnQgY21kX21rdHJlZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwlpbnQgYWxsb3dfbWlzc2luZyA9IDA7CisJaW50IGlzX2JhdGNoX21vZGUgPSAwOworCWludCBnb3RfZW9mID0gMDsKKworCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uW10gPSB7CisJCU9QVF9TRVRfSU5UKCd6JywgTlVMTCwgJmxpbmVfdGVybWluYXRpb24sICJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIsICdcMCcpLAorCQlPUFRfU0VUX0lOVCggMCAsICJtaXNzaW5nIiwgJmFsbG93X21pc3NpbmcsICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiLCAxKSwKKwkJT1BUX1NFVF9JTlQoIDAgLCAiYmF0Y2giLCAmaXNfYmF0Y2hfbW9kZSwgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIsIDEpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYWMgPSBwYXJzZV9vcHRpb25zKGFjLCBhdiwgcHJlZml4LCBvcHRpb24sIG1rdHJlZV91c2FnZSwgMCk7CisKKwl3aGlsZSAoIWdvdF9lb2YpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCWlmIChzdHJidWZfZ2V0bGluZSgmc2IsIHN0ZGluLCBsaW5lX3Rlcm1pbmF0aW9uKSA9PSBFT0YpIHsKKwkJCQlnb3RfZW9mID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzYi5idWZbMF0gPT0gJ1wwJykgeworCQkJCS8qIGVtcHR5IGxpbmVzIGRlbm90ZSB0cmVlIGJvdW5kYXJpZXMgaW4gYmF0Y2ggbW9kZSAqLworCQkJCWlmIChpc19iYXRjaF9tb2RlKQorCQkJCQlicmVhazsKKwkJCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogKGJsYW5rIGxpbmUgb25seSB2YWxpZCBpbiBiYXRjaCBtb2RlKSIpOworCQkJfQorCQkJbWt0cmVlX2xpbmUoc2IuYnVmLCBzYi5sZW4sIGxpbmVfdGVybWluYXRpb24sIGFsbG93X21pc3NpbmcpOworCQl9CisJCWlmIChpc19iYXRjaF9tb2RlICYmIGdvdF9lb2YgJiYgdXNlZCA8IDEpIHsKKwkJCS8qCisJCQkgKiBFeGVjdXRpb24gZ2V0cyBoZXJlIGlmIHRoZSBsYXN0IHRyZWUgZW50cnkgaXMgdGVybWluYXRlZCB3aXRoIGEKKwkJCSAqIG5ldy1saW5lLiAgVGhlIGZpbmFsIG5ldy1saW5lIGhhcyBiZWVuIG1hZGUgb3B0aW9uYWwgdG8gYmUKKwkJCSAqIGNvbnNpc3RlbnQgd2l0aCB0aGUgb3JpZ2luYWwgbm9uLWJhdGNoIGJlaGF2aW91ciBvZiBta3RyZWUuCisJCQkgKi8KKwkJCTsgLyogc2tpcCBjcmVhdGluZyBhbiBlbXB0eSB0cmVlICovCisJCX0gZWxzZSB7CisJCQl3cml0ZV90cmVlKHNoYTEpOworCQkJcHV0cyhzaGExX3RvX2hleChzaGExKSk7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfQorCQl1c2VkPTA7IC8qIHJlc2V0IHRyZWUgZW50cnkgYnVmZmVyIGZvciByZS11c2UgaW4gYmF0Y2ggbW9kZSAqLworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluLW12LmMgYi9idWlsdGluLW12LmMKaW5kZXggMDEyNzBmZS4uYjU5MmMzNiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1tdi5jCisrKyBiL2J1aWx0aW4tbXYuYwpAQCAtMjQsMTQgKzI0LDEwIEBACiAJcmVzdWx0W2NvdW50XSA9IE5VTEw7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaW50IGxlbmd0aCA9IHN0cmxlbihyZXN1bHRbaV0pOwotCQlpZiAobGVuZ3RoID4gMCAmJiByZXN1bHRbaV1bbGVuZ3RoIC0gMV0gPT0gJy8nKSB7CisJCWlmIChsZW5ndGggPiAwICYmIGlzX2Rpcl9zZXAocmVzdWx0W2ldW2xlbmd0aCAtIDFdKSkKIAkJCXJlc3VsdFtpXSA9IHhtZW1kdXB6KHJlc3VsdFtpXSwgbGVuZ3RoIC0gMSk7Ci0JCX0KLQkJaWYgKGJhc2VfbmFtZSkgewotCQkJY29uc3QgY2hhciAqbGFzdF9zbGFzaCA9IHN0cnJjaHIocmVzdWx0W2ldLCAnLycpOwotCQkJaWYgKGxhc3Rfc2xhc2gpCi0JCQkJcmVzdWx0W2ldID0gbGFzdF9zbGFzaCArIDE7Ci0JCX0KKwkJaWYgKGJhc2VfbmFtZSkKKwkJCXJlc3VsdFtpXSA9IGJhc2VuYW1lKChjaGFyICopcmVzdWx0W2ldKTsKIAl9CiAJcmV0dXJuIGdldF9wYXRoc3BlYyhwcmVmaXgsIHJlc3VsdCk7CiB9CkBAIC03Miw3ICs2OCw4IEBACiAJaWYgKHJlYWRfY2FjaGUoKSA8IDApCiAJCWRpZSgiaW5kZXggZmlsZSBjb3JydXB0Iik7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX212X29wdGlvbnMsIGJ1aWx0aW5fbXZfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9tdl9vcHRpb25zLAorCQkJICAgICBidWlsdGluX212X3VzYWdlLCAwKTsKIAlpZiAoLS1hcmdjIDwgMSkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fbXZfdXNhZ2UsIGJ1aWx0aW5fbXZfb3B0aW9ucyk7CiAKQEAgLTIwOCw3ICsyMDUsNyBAQAogCQkJcHJpbnRmKCJSZW5hbWluZyAlcyB0byAlc1xuIiwgc3JjLCBkc3QpOwogCQlpZiAoIXNob3dfb25seSAmJiBtb2RlICE9IElOREVYICYmCiAJCQkJcmVuYW1lKHNyYywgZHN0KSA8IDAgJiYgIWlnbm9yZV9lcnJvcnMpCi0JCQlkaWUgKCJyZW5hbWluZyAlcyBmYWlsZWQ6ICVzIiwgc3JjLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vICgicmVuYW1pbmcgJyVzJyBmYWlsZWQiLCBzcmMpOwogCiAJCWlmIChtb2RlID09IFdPUktJTkdfRElSRUNUT1JZKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9idWlsdGluLW5hbWUtcmV2LmMgYi9idWlsdGluLW5hbWUtcmV2LmMKaW5kZXggMDhjOGFhYi4uMDZhMzhhYyAxMDA2NDQKLS0tIGEvYnVpbHRpbi1uYW1lLXJldi5jCisrKyBiL2J1aWx0aW4tbmFtZS1yZXYuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiAJfTsKIAogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRzLCBuYW1lX3Jldl91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCBuYW1lX3Jldl91c2FnZSwgMCk7CiAJaWYgKCEhYWxsICsgISF0cmFuc2Zvcm1fc3RkaW4gKyAhIWFyZ2MgPiAxKSB7CiAJCWVycm9yKCJTcGVjaWZ5IGVpdGhlciBhIGxpc3QsIG9yIC0tYWxsLCBub3QgYm90aCEiKTsKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKG5hbWVfcmV2X3VzYWdlLCBvcHRzKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcGFjay1vYmplY3RzLmMgYi9idWlsdGluLXBhY2stb2JqZWN0cy5jCmluZGV4IGQxNTUzNDUuLjljYzhhODQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcGFjay1vYmplY3RzLmMKKysrIGIvYnVpbHRpbi1wYWNrLW9iamVjdHMuYwpAQCAtNzgsNyArNzgsNyBAQAogc3RhdGljIGludCB3aW5kb3cgPSAxMDsKIHN0YXRpYyB1aW50MzJfdCBwYWNrX3NpemVfbGltaXQsIHBhY2tfc2l6ZV9saW1pdF9jZmc7CiBzdGF0aWMgaW50IGRlcHRoID0gNTA7Ci1zdGF0aWMgaW50IGRlbHRhX3NlYXJjaF90aHJlYWRzID0gMTsKK3N0YXRpYyBpbnQgZGVsdGFfc2VhcmNoX3RocmVhZHM7CiBzdGF0aWMgaW50IHBhY2tfdG9fc3Rkb3V0Owogc3RhdGljIGludCBudW1fcHJlZmVycmVkX2Jhc2U7CiBzdGF0aWMgc3RydWN0IHByb2dyZXNzICpwcm9ncmVzc19zdGF0ZTsKQEAgLTg2LDcgKzg2LDcgQEAKIHN0YXRpYyBpbnQgcGFja19jb21wcmVzc2lvbl9zZWVuOwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWx0YV9jYWNoZV9zaXplID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9kZWx0YV9jYWNoZV9zaXplID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9kZWx0YV9jYWNoZV9zaXplID0gMjU2ICogMTAyNCAqIDEwMjQ7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWNoZV9tYXhfc21hbGxfZGVsdGFfc2l6ZSA9IDEwMDA7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHdpbmRvd19tZW1vcnlfbGltaXQgPSAwOwpAQCAtMjkzLDcgKzI5Myw3IEBACiAJCQkJZGllKCJ1bmFibGUgdG8gcmVhZCAlcyIsIHNoYTFfdG9faGV4KGVudHJ5LT5pZHguc2hhMSkpOwogCQkJLyoKIAkJCSAqIG1ha2Ugc3VyZSBubyBjYWNoZWQgZGVsdGEgZGF0YSByZW1haW5zIGZyb20gYQotCQkJICogcHJldmlvdXMgYXR0ZW1wdCBiZWZvcmUgYSBwYWNrIHNwbGl0IG9jY3VyZWQuCisJCQkgKiBwcmV2aW91cyBhdHRlbXB0IGJlZm9yZSBhIHBhY2sgc3BsaXQgb2NjdXJyZWQuCiAJCQkgKi8KIAkJCWZyZWUoZW50cnktPmRlbHRhX2RhdGEpOwogCQkJZW50cnktPmRlbHRhX2RhdGEgPSBOVUxMOwpAQCAtNTM2LDExICs1MzYsOSBAQAogCQkJCSBiYXNlX25hbWUsIHNoYTFfdG9faGV4KHNoYTEpKTsKIAkJCWZyZWVfcGFja19ieV9uYW1lKHRtcG5hbWUpOwogCQkJaWYgKGFkanVzdF9wZXJtKHBhY2tfdG1wX25hbWUsIG1vZGUpKQotCQkJCWRpZSgidW5hYmxlIHRvIG1ha2UgdGVtcG9yYXJ5IHBhY2sgZmlsZSByZWFkYWJsZTogJXMiLAotCQkJCSAgICBzdHJlcnJvcihlcnJubykpOworCQkJCWRpZV9lcnJubygidW5hYmxlIHRvIG1ha2UgdGVtcG9yYXJ5IHBhY2sgZmlsZSByZWFkYWJsZSIpOwogCQkJaWYgKHJlbmFtZShwYWNrX3RtcF9uYW1lLCB0bXBuYW1lKSkKLQkJCQlkaWUoInVuYWJsZSB0byByZW5hbWUgdGVtcG9yYXJ5IHBhY2sgZmlsZTogJXMiLAotCQkJCSAgICBzdHJlcnJvcihlcnJubykpOworCQkJCWRpZV9lcnJubygidW5hYmxlIHRvIHJlbmFtZSB0ZW1wb3JhcnkgcGFjayBmaWxlIik7CiAKIAkJCS8qCiAJCQkgKiBQYWNrcyBhcmUgcnVudGltZSBhY2Nlc3NlZCBpbiB0aGVpciBtdGltZQpAQCAtNTY2LDExICs1NjQsOSBAQAogCQkJc25wcmludGYodG1wbmFtZSwgc2l6ZW9mKHRtcG5hbWUpLCAiJXMtJXMuaWR4IiwKIAkJCQkgYmFzZV9uYW1lLCBzaGExX3RvX2hleChzaGExKSk7CiAJCQlpZiAoYWRqdXN0X3Blcm0oaWR4X3RtcF9uYW1lLCBtb2RlKSkKLQkJCQlkaWUoInVuYWJsZSB0byBtYWtlIHRlbXBvcmFyeSBpbmRleCBmaWxlIHJlYWRhYmxlOiAlcyIsCi0JCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gbWFrZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSByZWFkYWJsZSIpOwogCQkJaWYgKHJlbmFtZShpZHhfdG1wX25hbWUsIHRtcG5hbWUpKQotCQkJCWRpZSgidW5hYmxlIHRvIHJlbmFtZSB0ZW1wb3JhcnkgaW5kZXggZmlsZTogJXMiLAotCQkJCSAgICBzdHJlcnJvcihlcnJubykpOworCQkJCWRpZV9lcnJubygidW5hYmxlIHRvIHJlbmFtZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIpOwogCiAJCQlmcmVlKGlkeF90bXBfbmFtZSk7CiAJCQlmcmVlKHBhY2tfdG1wX25hbWUpOwpAQCAtNjUzLDggKzY0OSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBuYW1lX2hhc2goY29uc3QgY2hhciAqbmFtZSkKIHsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0JdW5zaWduZWQgaGFzaCA9IDA7CisJdW5zaWduZWQgYywgaGFzaCA9IDA7CiAKIAlpZiAoIW5hbWUpCiAJCXJldHVybiAwOwpAQCAtMTYxMSwxMSArMTYwNiwxOCBAQAogCQlmaW5kX2RlbHRhcyhsaXN0LCAmbGlzdF9zaXplLCB3aW5kb3csIGRlcHRoLCBwcm9jZXNzZWQpOwogCQlyZXR1cm47CiAJfQorCWlmIChwcm9ncmVzcyA+IHBhY2tfdG9fc3Rkb3V0KQorCQlmcHJpbnRmKHN0ZGVyciwgIkRlbHRhIGNvbXByZXNzaW9uIHVzaW5nIHVwIHRvICVkIHRocmVhZHMuXG4iLAorCQkJCWRlbHRhX3NlYXJjaF90aHJlYWRzKTsKIAogCS8qIFBhcnRpdGlvbiB0aGUgd29yayBhbW9uZ3N0IHdvcmsgdGhyZWFkcy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGVsdGFfc2VhcmNoX3RocmVhZHM7IGkrKykgewogCQl1bnNpZ25lZCBzdWJfc2l6ZSA9IGxpc3Rfc2l6ZSAvIChkZWx0YV9zZWFyY2hfdGhyZWFkcyAtIGkpOwogCisJCS8qIGRvbid0IHVzZSB0b28gc21hbGwgc2VnbWVudHMgb3Igbm8gZGVsdGFzIHdpbGwgYmUgZm91bmQgKi8KKwkJaWYgKHN1Yl9zaXplIDwgMip3aW5kb3cgJiYgaSsxIDwgZGVsdGFfc2VhcmNoX3RocmVhZHMpCisJCQlzdWJfc2l6ZSA9IDA7CisKIAkJcFtpXS53aW5kb3cgPSB3aW5kb3c7CiAJCXBbaV0uZGVwdGggPSBkZXB0aDsKIAkJcFtpXS5wcm9jZXNzZWQgPSBwcm9jZXNzZWQ7CkBAIC0xODczLDcgKzE4NzUsNyBAQAogCQkJaWYgKCFmZXJyb3Ioc3RkaW4pKQogCQkJCWRpZSgiZmdldHMgcmV0dXJuZWQgTlVMTCwgbm90IEVPRiwgbm90IGVycm9yISIpOwogCQkJaWYgKGVycm5vICE9IEVJTlRSKQotCQkJCWRpZSgiZmdldHM6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oImZnZXRzIik7CiAJCQljbGVhcmVycihzdGRpbik7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTg5NCwxOSArMTg5NiwyNSBAQAogCiAjZGVmaW5lIE9CSkVDVF9BRERFRCAoMXU8PDIwKQogCi1zdGF0aWMgdm9pZCBzaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQpCitzdGF0aWMgdm9pZCBzaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCiB7CiAJYWRkX29iamVjdF9lbnRyeShjb21taXQtPm9iamVjdC5zaGExLCBPQkpfQ09NTUlULCBOVUxMLCAwKTsKIAljb21taXQtPm9iamVjdC5mbGFncyB8PSBPQkpFQ1RfQURERUQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfb2JqZWN0KHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKnApCitzdGF0aWMgdm9pZCBzaG93X29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsIGNvbnN0IGNoYXIgKmxhc3QpCiB7Ci0JYWRkX3ByZWZlcnJlZF9iYXNlX29iamVjdChwLT5uYW1lKTsKLQlhZGRfb2JqZWN0X2VudHJ5KHAtPml0ZW0tPnNoYTEsIHAtPml0ZW0tPnR5cGUsIHAtPm5hbWUsIDApOwotCXAtPml0ZW0tPmZsYWdzIHw9IE9CSkVDVF9BRERFRDsKLQlmcmVlKChjaGFyICopcC0+bmFtZSk7Ci0JcC0+bmFtZSA9IE5VTEw7CisJY2hhciAqbmFtZSA9IHBhdGhfbmFtZShwYXRoLCBsYXN0KTsKKworCWFkZF9wcmVmZXJyZWRfYmFzZV9vYmplY3QobmFtZSk7CisJYWRkX29iamVjdF9lbnRyeShvYmotPnNoYTEsIG9iai0+dHlwZSwgbmFtZSwgMCk7CisJb2JqLT5mbGFncyB8PSBPQkpFQ1RfQURERUQ7CisKKwkvKgorCSAqIFdlIHdpbGwgaGF2ZSBnZW5lcmF0ZWQgdGhlIGhhc2ggZnJvbSB0aGUgbmFtZSwKKwkgKiBidXQgbm90IHNhdmVkIGEgcG9pbnRlciB0byBpdCAtIHdlIGNhbiBmcmVlIGl0CisJICovCisJZnJlZSgoY2hhciAqKW5hbWUpOwogfQogCiBzdGF0aWMgdm9pZCBzaG93X2VkZ2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0KQpAQCAtMjA2Niw3ICsyMDc0LDcgQEAKIAlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKIAkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOwogCW1hcmtfZWRnZXNfdW5pbnRlcmVzdGluZyhyZXZzLmNvbW1pdHMsICZyZXZzLCBzaG93X2VkZ2UpOwotCXRyYXZlcnNlX2NvbW1pdF9saXN0KCZyZXZzLCBzaG93X2NvbW1pdCwgc2hvd19vYmplY3QpOworCXRyYXZlcnNlX2NvbW1pdF9saXN0KCZyZXZzLCBzaG93X2NvbW1pdCwgc2hvd19vYmplY3QsIE5VTEwpOwogCiAJaWYgKGtlZXBfdW5yZWFjaGFibGUpCiAJCWFkZF9vYmplY3RzX2luX3VucGFja2VkX3BhY2tzKCZyZXZzKTsKQEAgLTIyNDcsNiArMjI1NSwxMCBAQAogCQkJCWRpZSgiYmFkICVzIiwgYXJnKTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0ta2VlcC10cnVlLXBhcmVudHMiKSkgeworCQkJZ3JhZnRzX3JlcGxhY2VfcGFyZW50cyA9IDA7CisJCQljb250aW51ZTsKKwkJfQogCQl1c2FnZShwYWNrX3VzYWdlKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcGFjay1yZWZzLmMgYi9idWlsdGluLXBhY2stcmVmcy5jCmluZGV4IDM0MjQ2ZGYuLjA5MTg2MGIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcGFjay1yZWZzLmMKKysrIGIvYnVpbHRpbi1wYWNrLXJlZnMuYwpAQCAtMTUsNyArMTUsNyBAQAogCQlPUFRfQklUKDAsICJwcnVuZSIsICZmbGFncywgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIiwgUEFDS19SRUZTX1BSVU5FKSwKIAkJT1BUX0VORCgpLAogCX07Ci0JaWYgKHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0cywgcGFja19yZWZzX3VzYWdlLCAwKSkKKwlpZiAocGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdHMsIHBhY2tfcmVmc191c2FnZSwgMCkpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhwYWNrX3JlZnNfdXNhZ2UsIG9wdHMpOwogCXJldHVybiBwYWNrX3JlZnMoZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1wcnVuZS1wYWNrZWQuYyBiL2J1aWx0aW4tcHJ1bmUtcGFja2VkLmMKaW5kZXggMmQ1YjJjZC4uMDA1OTBiMSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1wcnVuZS1wYWNrZWQuYworKysgYi9idWlsdGluLXBydW5lLXBhY2tlZC5jCkBAIC0yOCw4ICsyOCw4IEBACiAJCW1lbWNweShwYXRobmFtZSArIGxlbiwgZGUtPmRfbmFtZSwgMzgpOwogCQlpZiAob3B0cyAmIERSWV9SVU4pCiAJCQlwcmludGYoInJtIC1mICVzXG4iLCBwYXRobmFtZSk7Ci0JCWVsc2UgaWYgKHVubGluayhwYXRobmFtZSkgPCAwKQotCQkJZXJyb3IoInVuYWJsZSB0byB1bmxpbmsgJXMiLCBwYXRobmFtZSk7CisJCWVsc2UKKwkJCXVubGlua19vcl93YXJuKHBhdGhuYW1lKTsKIAkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgaSArIDEpOwogCX0KIAlwYXRobmFtZVtsZW5dID0gMDsKQEAgLTU1LDYgKzU1LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKIAkJRElSICpkOwogCisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKIAkJc3ByaW50ZihwYXRobmFtZSArIGxlbiwgIiUwMngvIiwgaSk7CiAJCWQgPSBvcGVuZGlyKHBhdGhuYW1lKTsKIAkJaWYgKCFkKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1wcnVuZS5jIGIvYnVpbHRpbi1wcnVuZS5jCmluZGV4IDdiNGVjODAuLjBlZDljY2UgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcHJ1bmUuYworKysgYi9idWlsdGluLXBydW5lLmMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSAiYnVpbHRpbi5oIgogI2luY2x1ZGUgInJlYWNoYWJsZS5oIgogI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaXIuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcnVuZV91c2FnZVtdID0gewogCSJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iLApAQCAtMjYsNyArMjcsNyBAQAogCX0KIAlwcmludGYoIlJlbW92aW5nIHN0YWxlIHRlbXBvcmFyeSBmaWxlICVzXG4iLCBmdWxscGF0aCk7CiAJaWYgKCFzaG93X29ubHkpCi0JCXVubGluayhmdWxscGF0aCk7CisJCXVubGlua19vcl93YXJuKGZ1bGxwYXRoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDYsNyArNDcsNyBAQAogCQkgICAgICAgKHR5cGUgPiAwKSA/IHR5cGVuYW1lKHR5cGUpIDogInVua25vd24iKTsKIAl9CiAJaWYgKCFzaG93X29ubHkpCi0JCXVubGluayhmdWxscGF0aCk7CisJCXVubGlua19vcl93YXJuKGZ1bGxwYXRoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjEsMTkgKzYyLDEyIEBACiAJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgewogCQljaGFyIG5hbWVbMTAwXTsKIAkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKLQkJaW50IGxlbiA9IHN0cmxlbihkZS0+ZF9uYW1lKTsKIAotCQlzd2l0Y2ggKGxlbikgewotCQljYXNlIDI6Ci0JCQlpZiAoZGUtPmRfbmFtZVsxXSAhPSAnLicpCi0JCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWlmIChkZS0+ZF9uYW1lWzBdICE9ICcuJykKLQkJCQlicmVhazsKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZGUtPmRfbmFtZSkpCiAJCQljb250aW51ZTsKLQkJY2FzZSAzODoKKwkJaWYgKHN0cmxlbihkZS0+ZF9uYW1lKSA9PSAzOCkgewogCQkJc3ByaW50ZihuYW1lLCAiJTAyeCIsIGkpOwotCQkJbWVtY3B5KG5hbWUrMiwgZGUtPmRfbmFtZSwgbGVuKzEpOworCQkJbWVtY3B5KG5hbWUrMiwgZGUtPmRfbmFtZSwgMzkpOwogCQkJaWYgKGdldF9zaGExX2hleChuYW1lLCBzaGExKSA8IDApCiAJCQkJYnJlYWs7CiAKQEAgLTE0OCw3ICsxNDIsNyBAQAogCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CiAJaW5pdF9yZXZpc2lvbnMoJnJldnMsIHByZWZpeCk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBwcnVuZV91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBwcnVuZV91c2FnZSwgMCk7CiAJd2hpbGUgKGFyZ2MtLSkgewogCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCQljb25zdCBjaGFyICpuYW1lID0gKmFyZ3YrKzsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcHVzaC5jIGIvYnVpbHRpbi1wdXNoLmMKaW5kZXggMTIyZmRjZi4uNTAzMjhmNCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1wdXNoLmMKKysrIGIvYnVpbHRpbi1wdXNoLmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHVzaF91c2FnZVtdID0gewotCSJnaXQgcHVzaCBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tdGFnc10gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPl0gWy0tcmVwbz08cmVwb3NpdG9yeT5dIFstZiB8IC0tZm9yY2VdIFstdl0gWzxyZXBvc2l0b3J5PiA8cmVmc3BlYz4uLi5dIiwKKwkiZ2l0IHB1c2ggWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLXBvcmNlbGFpbl0gWy0tdGFnc10gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPl0gWy0tcmVwbz08cmVwb3NpdG9yeT5dIFstZiB8IC0tZm9yY2VdIFstdl0gWzxyZXBvc2l0b3J5PiA8cmVmc3BlYz4uLi5dIiwKIAlOVUxMLAogfTsKIApAQCAtNDgsMTMgKzQ4LDU4IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzZXR1cF9wdXNoX3RyYWNraW5nKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiByZWZzcGVjID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwlpZiAoIWJyYW5jaCkKKwkJZGllKCJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIik7CisJaWYgKCFicmFuY2gtPm1lcmdlX25yKQorCQlkaWUoIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBpcyBub3QgdHJhY2tpbmcgYW55dGhpbmcuIiwKKwkJICAgIGJyYW5jaC0+bmFtZSk7CisJaWYgKGJyYW5jaC0+bWVyZ2VfbnIgIT0gMSkKKwkJZGllKCJUaGUgY3VycmVudCBicmFuY2ggJXMgaXMgdHJhY2tpbmcgbXVsdGlwbGUgYnJhbmNoZXMsICIKKwkJICAgICJyZWZ1c2luZyB0byBwdXNoLiIsIGJyYW5jaC0+bmFtZSk7CisJc3RyYnVmX2FkZGYoJnJlZnNwZWMsICIlczolcyIsIGJyYW5jaC0+bmFtZSwgYnJhbmNoLT5tZXJnZVswXS0+c3JjKTsKKwlhZGRfcmVmc3BlYyhyZWZzcGVjLmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2RlZmF1bHRfcHVzaF9yZWZzcGVjcyh2b2lkKQoreworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlzd2l0Y2ggKHB1c2hfZGVmYXVsdCkgeworCWRlZmF1bHQ6CisJY2FzZSBQVVNIX0RFRkFVTFRfTUFUQ0hJTkc6CisJCWFkZF9yZWZzcGVjKCI6Iik7CisJCWJyZWFrOworCisJY2FzZSBQVVNIX0RFRkFVTFRfVFJBQ0tJTkc6CisJCXNldHVwX3B1c2hfdHJhY2tpbmcoKTsKKwkJYnJlYWs7CisKKwljYXNlIFBVU0hfREVGQVVMVF9DVVJSRU5UOgorCQlhZGRfcmVmc3BlYygiSEVBRCIpOworCQlicmVhazsKKworCWNhc2UgUFVTSF9ERUZBVUxUX05PVEhJTkc6CisJCWRpZSgiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgIgorCQkgICAgInB1c2guZGVmYXVsdCBpcyBcIm5vdGhpbmdcIi4iKTsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgaW50IGRvX3B1c2goY29uc3QgY2hhciAqcmVwbywgaW50IGZsYWdzKQogewogCWludCBpLCBlcnJzOwogCXN0cnVjdCByZW1vdGUgKnJlbW90ZSA9IHJlbW90ZV9nZXQocmVwbyk7CisJY29uc3QgY2hhciAqKnVybDsKKwlpbnQgdXJsX25yOwogCi0JaWYgKCFyZW1vdGUpCi0JCWRpZSgiYmFkIHJlcG9zaXRvcnkgJyVzJyIsIHJlcG8pOworCWlmICghcmVtb3RlKSB7CisJCWlmIChyZXBvKQorCQkJZGllKCJiYWQgcmVwb3NpdG9yeSAnJXMnIiwgcmVwbyk7CisJCWRpZSgiTm8gZGVzdGluYXRpb24gY29uZmlndXJlZCB0byBwdXNoIHRvLiIpOworCX0KIAogCWlmIChyZW1vdGUtPm1pcnJvcikKIAkJZmxhZ3MgfD0gKFRSQU5TUE9SVF9QVVNIX01JUlJPUnxUUkFOU1BPUlRfUFVTSF9GT1JDRSk7CkBAIC03NiwxNyArMTIxLDI2IEBACiAJCXJldHVybiBlcnJvcigiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiKTsKIAl9CiAKLQlpZiAoIXJlZnNwZWMKLQkJJiYgIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FMTCkKLQkJJiYgcmVtb3RlLT5wdXNoX3JlZnNwZWNfbnIpIHsKLQkJcmVmc3BlYyA9IHJlbW90ZS0+cHVzaF9yZWZzcGVjOwotCQlyZWZzcGVjX25yID0gcmVtb3RlLT5wdXNoX3JlZnNwZWNfbnI7CisJaWYgKCFyZWZzcGVjICYmICEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BTEwpKSB7CisJCWlmIChyZW1vdGUtPnB1c2hfcmVmc3BlY19ucikgeworCQkJcmVmc3BlYyA9IHJlbW90ZS0+cHVzaF9yZWZzcGVjOworCQkJcmVmc3BlY19uciA9IHJlbW90ZS0+cHVzaF9yZWZzcGVjX25yOworCQl9IGVsc2UgaWYgKCEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9NSVJST1IpKQorCQkJc2V0dXBfZGVmYXVsdF9wdXNoX3JlZnNwZWNzKCk7CiAJfQogCWVycnMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCByZW1vdGUtPnVybF9ucjsgaSsrKSB7CisJaWYgKHJlbW90ZS0+cHVzaHVybF9ucikgeworCQl1cmwgPSByZW1vdGUtPnB1c2h1cmw7CisJCXVybF9uciA9IHJlbW90ZS0+cHVzaHVybF9ucjsKKwl9IGVsc2UgeworCQl1cmwgPSByZW1vdGUtPnVybDsKKwkJdXJsX25yID0gcmVtb3RlLT51cmxfbnI7CisJfQorCWZvciAoaSA9IDA7IGkgPCB1cmxfbnI7IGkrKykgewogCQlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQgPQotCQkJdHJhbnNwb3J0X2dldChyZW1vdGUsIHJlbW90ZS0+dXJsW2ldKTsKKwkJCXRyYW5zcG9ydF9nZXQocmVtb3RlLCB1cmxbaV0pOwogCQlpbnQgZXJyOworCQlpbnQgbm9uZmFzdGZvcndhcmQ7CiAJCWlmIChyZWNlaXZlcGFjaykKIAkJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwKIAkJCQkJICAgICBUUkFOU19PUFRfUkVDRUlWRVBBQ0ssIHJlY2VpdmVwYWNrKTsKQEAgLTk0LDE0ICsxNDgsMjAgQEAKIAkJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX1RISU4sICJ5ZXMiKTsKIAogCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9WRVJCT1NFKQotCQkJZnByaW50ZihzdGRlcnIsICJQdXNoaW5nIHRvICVzXG4iLCByZW1vdGUtPnVybFtpXSk7Ci0JCWVyciA9IHRyYW5zcG9ydF9wdXNoKHRyYW5zcG9ydCwgcmVmc3BlY19uciwgcmVmc3BlYywgZmxhZ3MpOworCQkJZnByaW50ZihzdGRlcnIsICJQdXNoaW5nIHRvICVzXG4iLCB1cmxbaV0pOworCQllcnIgPSB0cmFuc3BvcnRfcHVzaCh0cmFuc3BvcnQsIHJlZnNwZWNfbnIsIHJlZnNwZWMsIGZsYWdzLAorCQkJCSAgICAgJm5vbmZhc3Rmb3J3YXJkKTsKIAkJZXJyIHw9IHRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCk7CiAKIAkJaWYgKCFlcnIpCiAJCQljb250aW51ZTsKIAotCQllcnJvcigiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciLCByZW1vdGUtPnVybFtpXSk7CisJCWVycm9yKCJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIsIHVybFtpXSk7CisJCWlmIChub25mYXN0Zm9yd2FyZCkgeworCQkJcHJpbnRmKCJUbyBwcmV2ZW50IHlvdSBmcm9tIGxvc2luZyBoaXN0b3J5LCBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMgd2VyZSByZWplY3RlZC5cbiIKKwkJCSAgICAgICAiTWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorCQkJICAgICAgICJTZWUgJ25vbi1mYXN0IGZvcndhcmQnIHNlY3Rpb24gb2YgJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuXG4iKTsKKwkJfQogCQllcnJzKys7CiAJfQogCXJldHVybiAhIWVycnM7CkBAIC0xMjIsNiArMTgyLDcgQEAKIAkJCSAgICAoVFJBTlNQT1JUX1BVU0hfTUlSUk9SfFRSQU5TUE9SVF9QVVNIX0ZPUkNFKSksCiAJCU9QVF9CT09MRUFOKCAwICwgInRhZ3MiLCAmdGFncywgInB1c2ggdGFncyIpLAogCQlPUFRfQklUKCAwICwgImRyeS1ydW4iLCAmZmxhZ3MsICJkcnkgcnVuIiwgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTiksCisJCU9QVF9CSVQoIDAsICAicG9yY2VsYWluIiwgJmZsYWdzLCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiLCBUUkFOU1BPUlRfUFVTSF9QT1JDRUxBSU4pLAogCQlPUFRfQklUKCdmJywgImZvcmNlIiwgJmZsYWdzLCAiZm9yY2UgdXBkYXRlcyIsIFRSQU5TUE9SVF9QVVNIX0ZPUkNFKSwKIAkJT1BUX0JPT0xFQU4oIDAgLCAidGhpbiIsICZ0aGluLCAidXNlIHRoaW4gcGFjayIpLAogCQlPUFRfU1RSSU5HKCAwICwgInJlY2VpdmUtcGFjayIsICZyZWNlaXZlcGFjaywgInJlY2VpdmUtcGFjayIsICJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIpLApAQCAtMTI5LDcgKzE5MCw3IEBACiAJCU9QVF9FTkQoKQogCX07CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBwdXNoX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHB1c2hfdXNhZ2UsIDApOwogCiAJaWYgKHRhZ3MpCiAJCWFkZF9yZWZzcGVjKCJyZWZzL3RhZ3MvKiIpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZWFkLXRyZWUuYyBiL2J1aWx0aW4tcmVhZC10cmVlLmMKaW5kZXggMzhmZWYzNC4uODJlMjVlYSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1yZWFkLXRyZWUuYworKysgYi9idWlsdGluLXJlYWQtdHJlZS5jCkBAIC0yOSw0MSArMjksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwcmltZV9jYWNoZV90cmVlX3JlYyhzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsIHN0cnVjdCB0cmVlICp0cmVlKQotewotCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKLQlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKLQlpbnQgY250OwotCi0JaGFzaGNweShpdC0+c2hhMSwgdHJlZS0+b2JqZWN0LnNoYTEpOwotCWluaXRfdHJlZV9kZXNjKCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOwotCWNudCA9IDA7Ci0Jd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKLQkJaWYgKCFTX0lTRElSKGVudHJ5Lm1vZGUpKQotCQkJY250Kys7Ci0JCWVsc2UgewotCQkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpzdWI7Ci0JCQlzdHJ1Y3QgdHJlZSAqc3VidHJlZSA9IGxvb2t1cF90cmVlKGVudHJ5LnNoYTEpOwotCQkJaWYgKCFzdWJ0cmVlLT5vYmplY3QucGFyc2VkKQotCQkJCXBhcnNlX3RyZWUoc3VidHJlZSk7Ci0JCQlzdWIgPSBjYWNoZV90cmVlX3N1YihpdCwgZW50cnkucGF0aCk7Ci0JCQlzdWItPmNhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7Ci0JCQlwcmltZV9jYWNoZV90cmVlX3JlYyhzdWItPmNhY2hlX3RyZWUsIHN1YnRyZWUpOwotCQkJY250ICs9IHN1Yi0+Y2FjaGVfdHJlZS0+ZW50cnlfY291bnQ7Ci0JCX0KLQl9Ci0JaXQtPmVudHJ5X2NvdW50ID0gY250OwotfQotCi1zdGF0aWMgdm9pZCBwcmltZV9jYWNoZV90cmVlKHZvaWQpCi17Ci0JaWYgKCFucl90cmVlcykKLQkJcmV0dXJuOwotCWFjdGl2ZV9jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOwotCXByaW1lX2NhY2hlX3RyZWVfcmVjKGFjdGl2ZV9jYWNoZV90cmVlLCB0cmVlc1swXSk7Ci0KLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgcmVhZF90cmVlX3VzYWdlW10gPSAiZ2l0IHJlYWQtdHJlZSAoPHNoYT4gfCBbWy1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+XSBbLXUgfCAtaV1dIFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gWy0taW5kZXgtb3V0cHV0PTxmaWxlPl0gPHNoYTE+IFs8c2hhMj4gWzxzaGEzPl1dKSI7CiAKIHN0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZTsKQEAgLTE3MCw3ICsxMzUsNyBAQAogCQkJCWRpZSgibW9yZSB0aGFuIG9uZSAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeSBhcmUgZ2l2ZW4uIik7CiAKIAkJCWRpciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpvcHRzLmRpcikpOwotCQkJZGlyLT5zaG93X2lnbm9yZWQgPSAxOworCQkJZGlyLT5mbGFncyB8PSBESVJfU0hPV19JR05PUkVEOwogCQkJZGlyLT5leGNsdWRlX3Blcl9kaXIgPSBhcmcgKyAyNDsKIAkJCW9wdHMuZGlyID0gZGlyOwogCQkJLyogV2UgZG8gbm90IG5lZWQgdG8gbm9yIHdhbnQgdG8gZG8gcmVhZC1kaXJlY3RvcnkKQEAgLTIxMSw3ICsxNzYsNiBAQAogCQljYXNlIDM6CiAJCWRlZmF1bHQ6CiAJCQlvcHRzLmZuID0gdGhyZWV3YXlfbWVyZ2U7Ci0JCQljYWNoZV90cmVlX2ZyZWUoJmFjdGl2ZV9jYWNoZV90cmVlKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTIyMSw2ICsxODUsNyBAQAogCQkJb3B0cy5oZWFkX2lkeCA9IDE7CiAJfQogCisJY2FjaGVfdHJlZV9mcmVlKCZhY3RpdmVfY2FjaGVfdHJlZSk7CiAJZm9yIChpID0gMDsgaSA8IG5yX3RyZWVzOyBpKyspIHsKIAkJc3RydWN0IHRyZWUgKnRyZWUgPSB0cmVlc1tpXTsKIAkJcGFyc2VfdHJlZSh0cmVlKTsKQEAgLTIzNCwxMSArMTk5LDE0IEBACiAJICogIi1tIGVudCIgb3IgIi0tcmVzZXQgZW50IiBmb3JtKSwgd2UgY2FuIG9idGFpbiBhIGZ1bGx5CiAJICogdmFsaWQgY2FjaGUtdHJlZSBiZWNhdXNlIHRoZSBpbmRleCBtdXN0IG1hdGNoIGV4YWN0bHkKIAkgKiB3aGF0IGNhbWUgZnJvbSB0aGUgdHJlZS4KKwkgKgorCSAqIFRoZSBzYW1lIGhvbGRzIHRydWUgaWYgd2UgYXJlIHN3aXRjaGluZyBiZXR3ZWVuIHR3byB0cmVlcworCSAqIHVzaW5nIHJlYWQtdHJlZSAtbSBBIEIuICBUaGUgaW5kZXggbXVzdCBtYXRjaCBCIGFmdGVyIHRoYXQuCiAJICovCi0JaWYgKG5yX3RyZWVzICYmICFvcHRzLnByZWZpeCAmJiAoIW9wdHMubWVyZ2UgfHwgKHN0YWdlID09IDIpKSkgewotCQljYWNoZV90cmVlX2ZyZWUoJmFjdGl2ZV9jYWNoZV90cmVlKTsKLQkJcHJpbWVfY2FjaGVfdHJlZSgpOwotCX0KKwlpZiAobnJfdHJlZXMgPT0gMSAmJiAhb3B0cy5wcmVmaXgpCisJCXByaW1lX2NhY2hlX3RyZWUoJmFjdGl2ZV9jYWNoZV90cmVlLCB0cmVlc1swXSk7CisJZWxzZSBpZiAobnJfdHJlZXMgPT0gMiAmJiBvcHRzLm1lcmdlKQorCQlwcmltZV9jYWNoZV90cmVlKCZhY3RpdmVfY2FjaGVfdHJlZSwgdHJlZXNbMV0pOwogCiAJaWYgKHdyaXRlX2NhY2hlKG5ld2ZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKIAkgICAgY29tbWl0X2xvY2tlZF9pbmRleCgmbG9ja19maWxlKSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmVjZWl2ZS1wYWNrLmMgYi9idWlsdGluLXJlY2VpdmUtcGFjay5jCmluZGV4IGRiNjdjMzEuLjZlYzFkMDUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcmVjZWl2ZS1wYWNrLmMKKysrIGIvYnVpbHRpbi1yZWNlaXZlLXBhY2suYwpAQCAtOSwyNSArOSwyNyBAQAogI2luY2x1ZGUgInJlbW90ZS5oIgogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogCi1zdGF0aWMgY29uc3QgY2hhciByZWNlaXZlX3BhY2tfdXNhZ2VbXSA9ICJnaXQtcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiI7CitzdGF0aWMgY29uc3QgY2hhciByZWNlaXZlX3BhY2tfdXNhZ2VbXSA9ICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiI7CiAKIGVudW0gZGVueV9hY3Rpb24geworCURFTllfVU5DT05GSUdVUkVELAogCURFTllfSUdOT1JFLAogCURFTllfV0FSTiwKIAlERU5ZX1JFRlVTRSwKIH07CiAKLXN0YXRpYyBpbnQgZGVueV9kZWxldGVzID0gMDsKLXN0YXRpYyBpbnQgZGVueV9ub25fZmFzdF9mb3J3YXJkcyA9IDA7Ci1zdGF0aWMgZW51bSBkZW55X2FjdGlvbiBkZW55X2N1cnJlbnRfYnJhbmNoID0gREVOWV9XQVJOOworc3RhdGljIGludCBkZW55X2RlbGV0ZXM7CitzdGF0aWMgaW50IGRlbnlfbm9uX2Zhc3RfZm9yd2FyZHM7CitzdGF0aWMgZW51bSBkZW55X2FjdGlvbiBkZW55X2N1cnJlbnRfYnJhbmNoID0gREVOWV9VTkNPTkZJR1VSRUQ7CitzdGF0aWMgZW51bSBkZW55X2FjdGlvbiBkZW55X2RlbGV0ZV9jdXJyZW50ID0gREVOWV9VTkNPTkZJR1VSRUQ7CiBzdGF0aWMgaW50IHJlY2VpdmVfZnNja19vYmplY3RzOwogc3RhdGljIGludCByZWNlaXZlX3VucGFja19saW1pdCA9IC0xOwogc3RhdGljIGludCB0cmFuc2Zlcl91bnBhY2tfbGltaXQgPSAtMTsKIHN0YXRpYyBpbnQgdW5wYWNrX2xpbWl0ID0gMTAwOwogc3RhdGljIGludCByZXBvcnRfc3RhdHVzOwotCi1zdGF0aWMgY2hhciBjYXBhYmlsaXRpZXNbXSA9ICIgcmVwb3J0LXN0YXR1cyBkZWxldGUtcmVmcyAiOwotc3RhdGljIGludCBjYXBhYmlsaXRpZXNfc2VudDsKK3N0YXRpYyBpbnQgcHJlZmVyX29mc19kZWx0YSA9IDE7CitzdGF0aWMgY29uc3QgY2hhciAqaGVhZF9uYW1lOworc3RhdGljIGNoYXIgKmNhcGFiaWxpdGllc190b19zZW5kOwogCiBzdGF0aWMgZW51bSBkZW55X2FjdGlvbiBwYXJzZV9kZW55X2FjdGlvbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQogewpAQCAtNzYsMjQgKzc4LDM0IEBACiAJCXJldHVybiAwOwogCX0KIAorCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5kZW55ZGVsZXRlY3VycmVudCIpID09IDApIHsKKwkJZGVueV9kZWxldGVfY3VycmVudCA9IHBhcnNlX2RlbnlfYWN0aW9uKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlcGFjay51c2VkZWx0YWJhc2VvZmZzZXQiKSA9PSAwKSB7CisJCXByZWZlcl9vZnNfZGVsdGEgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwogCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiBzdGF0aWMgaW50IHNob3dfcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQogewotCWlmIChjYXBhYmlsaXRpZXNfc2VudCkKKwlpZiAoIWNhcGFiaWxpdGllc190b19zZW5kKQogCQlwYWNrZXRfd3JpdGUoMSwgIiVzICVzXG4iLCBzaGExX3RvX2hleChzaGExKSwgcGF0aCk7CiAJZWxzZQogCQlwYWNrZXRfd3JpdGUoMSwgIiVzICVzJWMlc1xuIiwKLQkJCSAgICAgc2hhMV90b19oZXgoc2hhMSksIHBhdGgsIDAsIGNhcGFiaWxpdGllcyk7Ci0JY2FwYWJpbGl0aWVzX3NlbnQgPSAxOworCQkJICAgICBzaGExX3RvX2hleChzaGExKSwgcGF0aCwgMCwgY2FwYWJpbGl0aWVzX3RvX3NlbmQpOworCWNhcGFiaWxpdGllc190b19zZW5kID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgd3JpdGVfaGVhZF9pbmZvKHZvaWQpCiB7CiAJZm9yX2VhY2hfcmVmKHNob3dfcmVmLCBOVUxMKTsKLQlpZiAoIWNhcGFiaWxpdGllc19zZW50KQorCWlmIChjYXBhYmlsaXRpZXNfdG9fc2VuZCkKIAkJc2hvd19yZWYoImNhcGFiaWxpdGllc157fSIsIG51bGxfc2hhMSwgMCwgTlVMTCk7CiAKIH0KQEAgLTExMSwzMiArMTIzLDMyIEBACiBzdGF0aWMgY29uc3QgY2hhciBwcmVfcmVjZWl2ZV9ob29rW10gPSAiaG9va3MvcHJlLXJlY2VpdmUiOwogc3RhdGljIGNvbnN0IGNoYXIgcG9zdF9yZWNlaXZlX2hvb2tbXSA9ICJob29rcy9wb3N0LXJlY2VpdmUiOwogCi1zdGF0aWMgaW50IGhvb2tfc3RhdHVzKGludCBjb2RlLCBjb25zdCBjaGFyICpob29rX25hbWUpCitzdGF0aWMgaW50IHJ1bl9zdGF0dXMoaW50IGNvZGUsIGNvbnN0IGNoYXIgKmNtZF9uYW1lKQogewogCXN3aXRjaCAoY29kZSkgewogCWNhc2UgMDoKIAkJcmV0dXJuIDA7CiAJY2FzZSAtRVJSX1JVTl9DT01NQU5EX0ZPUks6Ci0JCXJldHVybiBlcnJvcigiaG9vayBmb3JrIGZhaWxlZCIpOworCQlyZXR1cm4gZXJyb3IoImZvcmsgb2YgJXMgZmFpbGVkIiwgY21kX25hbWUpOwogCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9FWEVDOgotCQlyZXR1cm4gZXJyb3IoImhvb2sgZXhlY3V0ZSBmYWlsZWQiKTsKKwkJcmV0dXJuIGVycm9yKCJleGVjdXRlIG9mICVzIGZhaWxlZCIsIGNtZF9uYW1lKTsKIAljYXNlIC1FUlJfUlVOX0NPTU1BTkRfUElQRToKLQkJcmV0dXJuIGVycm9yKCJob29rIHBpcGUgZmFpbGVkIik7CisJCXJldHVybiBlcnJvcigicGlwZSBmYWlsZWQiKTsKIAljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRDoKIAkJcmV0dXJuIGVycm9yKCJ3YWl0cGlkIGZhaWxlZCIpOwogCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX1dST05HX1BJRDoKIAkJcmV0dXJuIGVycm9yKCJ3YWl0cGlkIGlzIGNvbmZ1c2VkIik7CiAJY2FzZSAtRVJSX1JVTl9DT01NQU5EX1dBSVRQSURfU0lHTkFMOgotCQlyZXR1cm4gZXJyb3IoIiVzIGRpZWQgb2Ygc2lnbmFsIiwgaG9va19uYW1lKTsKKwkJcmV0dXJuIGVycm9yKCIlcyBkaWVkIG9mIHNpZ25hbCIsIGNtZF9uYW1lKTsKIAljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRF9OT0VYSVQ6Ci0JCXJldHVybiBlcnJvcigiJXMgZGllZCBzdHJhbmdlbHkiLCBob29rX25hbWUpOworCQlyZXR1cm4gZXJyb3IoIiVzIGRpZWQgc3RyYW5nZWx5IiwgY21kX25hbWUpOwogCWRlZmF1bHQ6Ci0JCWVycm9yKCIlcyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICVkIiwgaG9va19uYW1lLCAtY29kZSk7CisJCWVycm9yKCIlcyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICVkIiwgY21kX25hbWUsIC1jb2RlKTsKIAkJcmV0dXJuIC1jb2RlOwogCX0KIH0KIAotc3RhdGljIGludCBydW5faG9vayhjb25zdCBjaGFyICpob29rX25hbWUpCitzdGF0aWMgaW50IHJ1bl9yZWNlaXZlX2hvb2soY29uc3QgY2hhciAqaG9va19uYW1lKQogewogCXN0YXRpYyBjaGFyIGJ1ZltzaXplb2YoY29tbWFuZHMtPm9sZF9zaGExKSAqIDIgKyBQQVRIX01BWCArIDRdOwogCXN0cnVjdCBjb21tYW5kICpjbWQ7CkBAIC0xNjIsNyArMTc0LDcgQEAKIAogCWNvZGUgPSBzdGFydF9jb21tYW5kKCZwcm9jKTsKIAlpZiAoY29kZSkKLQkJcmV0dXJuIGhvb2tfc3RhdHVzKGNvZGUsIGhvb2tfbmFtZSk7CisJCXJldHVybiBydW5fc3RhdHVzKGNvZGUsIGhvb2tfbmFtZSk7CiAJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKIAkJaWYgKCFjbWQtPmVycm9yX3N0cmluZykgewogCQkJc2l6ZV90IG4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMgJXMgJXNcbiIsCkBAIC0xNzQsMTMgKzE4NiwxMiBAQAogCQl9CiAJfQogCWNsb3NlKHByb2MuaW4pOwotCXJldHVybiBob29rX3N0YXR1cyhmaW5pc2hfY29tbWFuZCgmcHJvYyksIGhvb2tfbmFtZSk7CisJcmV0dXJuIHJ1bl9zdGF0dXMoZmluaXNoX2NvbW1hbmQoJnByb2MpLCBob29rX25hbWUpOwogfQogCiBzdGF0aWMgaW50IHJ1bl91cGRhdGVfaG9vayhzdHJ1Y3QgY29tbWFuZCAqY21kKQogewogCXN0YXRpYyBjb25zdCBjaGFyIHVwZGF0ZV9ob29rW10gPSAiaG9va3MvdXBkYXRlIjsKLQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jOwogCWNvbnN0IGNoYXIgKmFyZ3ZbNV07CiAKIAlpZiAoYWNjZXNzKHVwZGF0ZV9ob29rLCBYX09LKSA8IDApCkBAIC0xOTIsMjYgKzIwMyw3NCBAQAogCWFyZ3ZbM10gPSBzaGExX3RvX2hleChjbWQtPm5ld19zaGExKTsKIAlhcmd2WzRdID0gTlVMTDsKIAotCW1lbXNldCgmcHJvYywgMCwgc2l6ZW9mKHByb2MpKTsKLQlwcm9jLmFyZ3YgPSBhcmd2OwotCXByb2Mubm9fc3RkaW4gPSAxOwotCXByb2Muc3Rkb3V0X3RvX3N0ZGVyciA9IDE7Ci0KLQlyZXR1cm4gaG9va19zdGF0dXMocnVuX2NvbW1hbmQoJnByb2MpLCB1cGRhdGVfaG9vayk7CisJcmV0dXJuIHJ1bl9zdGF0dXMocnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX0NPTU1BTkRfTk9fU1RESU4gfAorCQkJCQlSVU5fQ09NTUFORF9TVERPVVRfVE9fU1RERVJSKSwKKwkJCXVwZGF0ZV9ob29rKTsKIH0KIAogc3RhdGljIGludCBpc19yZWZfY2hlY2tlZF9vdXQoY29uc3QgY2hhciAqcmVmKQogewotCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JY29uc3QgY2hhciAqaGVhZDsKLQogCWlmIChpc19iYXJlX3JlcG9zaXRvcnkoKSkKIAkJcmV0dXJuIDA7CiAKLQloZWFkID0gcmVzb2x2ZV9yZWYoIkhFQUQiLCBzaGExLCAwLCBOVUxMKTsKLQlpZiAoIWhlYWQpCisJaWYgKCFoZWFkX25hbWUpCiAJCXJldHVybiAwOwotCXJldHVybiAhc3RyY21wKGhlYWQsIHJlZik7CisJcmV0dXJuICFzdHJjbXAoaGVhZF9uYW1lLCByZWYpOworfQorCitzdGF0aWMgY2hhciAqd2Fybl91bmNvbmZpZ3VyZWRfZGVueV9tc2dbXSA9IHsKKwkiVXBkYXRpbmcgdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBicmFuY2ggbWF5IGNhdXNlIGNvbmZ1c2lvbiwiLAorCSJhcyB0aGUgaW5kZXggYW5kIHdvcmsgdHJlZSBkbyBub3QgcmVmbGVjdCBjaGFuZ2VzIHRoYXQgYXJlIGluIEhFQUQuIiwKKwkiQXMgYSByZXN1bHQsIHlvdSBtYXkgc2VlIHRoZSBjaGFuZ2VzIHlvdSBqdXN0IHB1c2hlZCBpbnRvIGl0IiwKKwkicmV2ZXJ0ZWQgd2hlbiB5b3UgcnVuICdnaXQgZGlmZicgb3ZlciB0aGVyZSwgYW5kIHlvdSBtYXkgd2FudCIsCisJInRvIHJ1biAnZ2l0IHJlc2V0IC0taGFyZCcgYmVmb3JlIHN0YXJ0aW5nIHRvIHdvcmsgdG8gcmVjb3Zlci4iLAorCSIiLAorCSJZb3UgY2FuIHNldCAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byIsCisJIidyZWZ1c2UnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBmb3JiaWQgcHVzaGluZyBpbnRvIGl0cyIsCisJImN1cnJlbnQgYnJhbmNoLiIKKwkiIiwKKwkiVG8gYWxsb3cgcHVzaGluZyBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgeW91IGNhbiBzZXQgaXQgdG8gJ2lnbm9yZSc7IiwKKwkiYnV0IHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIHVubGVzcyB5b3UgYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIiwKKwkidHJlZSB0byBtYXRjaCB3aGF0IHlvdSBwdXNoZWQgaW4gc29tZSBvdGhlciB3YXkuIiwKKwkiIiwKKwkiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICd3YXJuJy4iLAorCSIiLAorCSJOb3RlIHRoYXQgdGhlIGRlZmF1bHQgd2lsbCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBnaXQiLAorCSJ0byByZWZ1c2UgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIHVubGVzcyB5b3UgaGF2ZSB0aGUiLAorCSJjb25maWd1cmF0aW9uIHZhcmlhYmxlIHNldCB0byBlaXRoZXIgJ2lnbm9yZScgb3IgJ3dhcm4nLiIKK307CisKK3N0YXRpYyB2b2lkIHdhcm5fdW5jb25maWd1cmVkX2Rlbnkodm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3YXJuX3VuY29uZmlndXJlZF9kZW55X21zZyk7IGkrKykKKwkJd2FybmluZygiJXMiLCB3YXJuX3VuY29uZmlndXJlZF9kZW55X21zZ1tpXSk7Cit9CisKK3N0YXRpYyBjaGFyICp3YXJuX3VuY29uZmlndXJlZF9kZW55X2RlbGV0ZV9jdXJyZW50X21zZ1tdID0geworCSJEZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggY2FuIGNhdXNlIGNvbmZ1c2lvbiBieSBtYWtpbmcgdGhlIG5leHQiLAorCSInZ2l0IGNsb25lJyBub3QgY2hlY2sgb3V0IGFueSBmaWxlLiIsCisJIiIsCisJIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIiwKKwkiJ3JlZnVzZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGRpc2FsbG93IGRlbGV0aW5nIHRoZSBjdXJyZW50IiwKKwkiYnJhbmNoLiIsCisJIiIsCisJIllvdSBjYW4gc2V0IGl0IHRvICdpZ25vcmUnIHRvIGFsbG93IHN1Y2ggYSBkZWxldGUgd2l0aG91dCBhIHdhcm5pbmcuIiwKKwkiIiwKKwkiVG8gbWFrZSB0aGlzIHdhcm5pbmcgbWVzc2FnZSBsZXNzIGxvdWQsIHlvdSBjYW4gc2V0IGl0IHRvICd3YXJuJy4iLAorCSIiLAorCSJOb3RlIHRoYXQgdGhlIGRlZmF1bHQgd2lsbCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBnaXQiLAorCSJ0byByZWZ1c2UgZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIHVubGVzcyB5b3UgaGF2ZSB0aGUiLAorCSJjb25maWd1cmF0aW9uIHZhcmlhYmxlIHNldCB0byBlaXRoZXIgJ2lnbm9yZScgb3IgJ3dhcm4nLiIKK307CisKK3N0YXRpYyB2b2lkIHdhcm5fdW5jb25maWd1cmVkX2RlbnlfZGVsZXRlX2N1cnJlbnQodm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOworCSAgICAgaSA8IEFSUkFZX1NJWkUod2Fybl91bmNvbmZpZ3VyZWRfZGVueV9kZWxldGVfY3VycmVudF9tc2cpOworCSAgICAgaSsrKQorCQl3YXJuaW5nKCIlcyIsIHdhcm5fdW5jb25maWd1cmVkX2RlbnlfZGVsZXRlX2N1cnJlbnRfbXNnW2ldKTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKnVwZGF0ZShzdHJ1Y3QgY29tbWFuZCAqY21kKQpAQCAtMjI3LDIyICsyODYsMjAgQEAKIAkJcmV0dXJuICJmdW5ueSByZWZuYW1lIjsKIAl9CiAKLQlzd2l0Y2ggKGRlbnlfY3VycmVudF9icmFuY2gpIHsKLQljYXNlIERFTllfSUdOT1JFOgotCQlicmVhazsKLQljYXNlIERFTllfV0FSTjoKLQkJaWYgKCFpc19yZWZfY2hlY2tlZF9vdXQobmFtZSkpCisJaWYgKGlzX3JlZl9jaGVja2VkX291dChuYW1lKSkgeworCQlzd2l0Y2ggKGRlbnlfY3VycmVudF9icmFuY2gpIHsKKwkJY2FzZSBERU5ZX0lHTk9SRToKIAkJCWJyZWFrOwotCQl3YXJuaW5nKCJ1cGRhdGluZyB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaDsgdGhpcyBtYXkiCi0JCQkiIGNhdXNlIGNvbmZ1c2lvbixcbiIKLQkJCSJhcyB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSBkbyBub3QgcmVmbGVjdCBjaGFuZ2VzIgotCQkJIiB0aGF0IGFyZSBub3cgaW4gSEVBRC4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBERU5ZX1JFRlVTRToKLQkJaWYgKCFpc19yZWZfY2hlY2tlZF9vdXQobmFtZSkpCisJCWNhc2UgREVOWV9VTkNPTkZJR1VSRUQ6CisJCWNhc2UgREVOWV9XQVJOOgorCQkJd2FybmluZygidXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIik7CisJCQlpZiAoZGVueV9jdXJyZW50X2JyYW5jaCA9PSBERU5ZX1VOQ09ORklHVVJFRCkKKwkJCQl3YXJuX3VuY29uZmlndXJlZF9kZW55KCk7CiAJCQlicmVhazsKLQkJZXJyb3IoInJlZnVzaW5nIHRvIHVwZGF0ZSBjaGVja2VkIG91dCBicmFuY2g6ICVzIiwgbmFtZSk7Ci0JCXJldHVybiAiYnJhbmNoIGlzIGN1cnJlbnRseSBjaGVja2VkIG91dCI7CisJCWNhc2UgREVOWV9SRUZVU0U6CisJCQllcnJvcigicmVmdXNpbmcgdG8gdXBkYXRlIGNoZWNrZWQgb3V0IGJyYW5jaDogJXMiLCBuYW1lKTsKKwkJCXJldHVybiAiYnJhbmNoIGlzIGN1cnJlbnRseSBjaGVja2VkIG91dCI7CisJCX0KIAl9CiAKIAlpZiAoIWlzX251bGxfc2hhMShuZXdfc2hhMSkgJiYgIWhhc19zaGExX2ZpbGUobmV3X3NoYTEpKSB7CkBAIC0yNTAsMTIgKzMwNywzMCBAQAogCQkgICAgICAiYnV0IEkgY2FuJ3QgZmluZCBpdCEiLCBzaGExX3RvX2hleChuZXdfc2hhMSkpOwogCQlyZXR1cm4gImJhZCBwYWNrIjsKIAl9Ci0JaWYgKGRlbnlfZGVsZXRlcyAmJiBpc19udWxsX3NoYTEobmV3X3NoYTEpICYmCi0JICAgICFpc19udWxsX3NoYTEob2xkX3NoYTEpICYmCi0JICAgICFwcmVmaXhjbXAobmFtZSwgInJlZnMvaGVhZHMvIikpIHsKLQkJZXJyb3IoImRlbnlpbmcgcmVmIGRlbGV0aW9uIGZvciAlcyIsIG5hbWUpOwotCQlyZXR1cm4gImRlbGV0aW9uIHByb2hpYml0ZWQiOworCisJaWYgKCFpc19udWxsX3NoYTEob2xkX3NoYTEpICYmIGlzX251bGxfc2hhMShuZXdfc2hhMSkpIHsKKwkJaWYgKGRlbnlfZGVsZXRlcyAmJiAhcHJlZml4Y21wKG5hbWUsICJyZWZzL2hlYWRzLyIpKSB7CisJCQllcnJvcigiZGVueWluZyByZWYgZGVsZXRpb24gZm9yICVzIiwgbmFtZSk7CisJCQlyZXR1cm4gImRlbGV0aW9uIHByb2hpYml0ZWQiOworCQl9CisKKwkJaWYgKCFzdHJjbXAobmFtZSwgaGVhZF9uYW1lKSkgeworCQkJc3dpdGNoIChkZW55X2RlbGV0ZV9jdXJyZW50KSB7CisJCQljYXNlIERFTllfSUdOT1JFOgorCQkJCWJyZWFrOworCQkJY2FzZSBERU5ZX1dBUk46CisJCQljYXNlIERFTllfVU5DT05GSUdVUkVEOgorCQkJCWlmIChkZW55X2RlbGV0ZV9jdXJyZW50ID09IERFTllfVU5DT05GSUdVUkVEKQorCQkJCQl3YXJuX3VuY29uZmlndXJlZF9kZW55X2RlbGV0ZV9jdXJyZW50KCk7CisJCQkJd2FybmluZygiZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIik7CisJCQkJYnJlYWs7CisJCQljYXNlIERFTllfUkVGVVNFOgorCQkJCWVycm9yKCJyZWZ1c2luZyB0byBkZWxldGUgdGhlIGN1cnJlbnQgYnJhbmNoOiAlcyIsIG5hbWUpOworCQkJCXJldHVybiAiZGVsZXRpb24gb2YgdGhlIGN1cnJlbnQgYnJhbmNoIHByb2hpYml0ZWQiOworCQkJfQorCQl9CiAJfQorCiAJaWYgKGRlbnlfbm9uX2Zhc3RfZm9yd2FyZHMgJiYgIWlzX251bGxfc2hhMShuZXdfc2hhMSkgJiYKIAkgICAgIWlzX251bGxfc2hhMShvbGRfc2hhMSkgJiYKIAkgICAgIXByZWZpeGNtcChuYW1lLCAicmVmcy9oZWFkcy8iKSkgewpAQCAtMzE5LDcgKzM5NCw3IEBACiBzdGF0aWMgdm9pZCBydW5fdXBkYXRlX3Bvc3RfaG9vayhzdHJ1Y3QgY29tbWFuZCAqY21kKQogewogCXN0cnVjdCBjb21tYW5kICpjbWRfcDsKLQlpbnQgYXJnYzsKKwlpbnQgYXJnYywgc3RhdHVzOwogCWNvbnN0IGNoYXIgKiphcmd2OwogCiAJZm9yIChhcmdjID0gMCwgY21kX3AgPSBjbWQ7IGNtZF9wOyBjbWRfcCA9IGNtZF9wLT5uZXh0KSB7CkBAIC0zNDIsMTMgKzQxNywxNSBAQAogCQlhcmdjKys7CiAJfQogCWFyZ3ZbYXJnY10gPSBOVUxMOwotCXJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9DT01NQU5EX05PX1NURElOCi0JCXwgUlVOX0NPTU1BTkRfU1RET1VUX1RPX1NUREVSUik7CisJc3RhdHVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX0NPTU1BTkRfTk9fU1RESU4KKwkJCXwgUlVOX0NPTU1BTkRfU1RET1VUX1RPX1NUREVSUik7CisJcnVuX3N0YXR1cyhzdGF0dXMsIHVwZGF0ZV9wb3N0X2hvb2spOwogfQogCiBzdGF0aWMgdm9pZCBleGVjdXRlX2NvbW1hbmRzKGNvbnN0IGNoYXIgKnVucGFja2VyX2Vycm9yKQogewogCXN0cnVjdCBjb21tYW5kICpjbWQgPSBjb21tYW5kczsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCiAJaWYgKHVucGFja2VyX2Vycm9yKSB7CiAJCXdoaWxlIChjbWQpIHsKQEAgLTM1OCw3ICs0MzUsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHJ1bl9ob29rKHByZV9yZWNlaXZlX2hvb2spKSB7CisJaWYgKHJ1bl9yZWNlaXZlX2hvb2socHJlX3JlY2VpdmVfaG9vaykpIHsKIAkJd2hpbGUgKGNtZCkgewogCQkJY21kLT5lcnJvcl9zdHJpbmcgPSAicHJlLXJlY2VpdmUgaG9vayBkZWNsaW5lZCI7CiAJCQljbWQgPSBjbWQtPm5leHQ7CkBAIC0zNjYsNiArNDQzLDggQEAKIAkJcmV0dXJuOwogCX0KIAorCWhlYWRfbmFtZSA9IHJlc29sdmVfcmVmKCJIRUFEIiwgc2hhMSwgMCwgTlVMTCk7CisKIAl3aGlsZSAoY21kKSB7CiAJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gdXBkYXRlKGNtZCk7CiAJCWNtZCA9IGNtZC0+bmV4dDsKQEAgLTQ1NiwyNCArNTM1LDEwIEBACiAJCXVucGFja2VyW2krK10gPSBoZHJfYXJnOwogCQl1bnBhY2tlcltpKytdID0gTlVMTDsKIAkJY29kZSA9IHJ1bl9jb21tYW5kX3Zfb3B0KHVucGFja2VyLCBSVU5fR0lUX0NNRCk7Ci0JCXN3aXRjaCAoY29kZSkgewotCQljYXNlIDA6CisJCWlmICghY29kZSkKIAkJCXJldHVybiBOVUxMOwotCQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfRk9SSzoKLQkJCXJldHVybiAidW5wYWNrIGZvcmsgZmFpbGVkIjsKLQkJY2FzZSAtRVJSX1JVTl9DT01NQU5EX0VYRUM6Ci0JCQlyZXR1cm4gInVucGFjayBleGVjdXRlIGZhaWxlZCI7Ci0JCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEOgotCQkJcmV0dXJuICJ3YWl0cGlkIGZhaWxlZCI7Ci0JCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX1dST05HX1BJRDoKLQkJCXJldHVybiAid2FpdHBpZCBpcyBjb25mdXNlZCI7Ci0JCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX1NJR05BTDoKLQkJCXJldHVybiAidW5wYWNrZXIgZGllZCBvZiBzaWduYWwiOwotCQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRF9OT0VYSVQ6Ci0JCQlyZXR1cm4gInVucGFja2VyIGRpZWQgc3RyYW5nZWx5IjsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAidW5wYWNrZXIgZXhpdGVkIHdpdGggZXJyb3IgY29kZSI7Ci0JCX0KKwkJcnVuX3N0YXR1cyhjb2RlLCB1bnBhY2tlclswXSk7CisJCXJldHVybiAidW5wYWNrLW9iamVjdHMgYWJub3JtYWwgZXhpdCI7CiAJfSBlbHNlIHsKIAkJY29uc3QgY2hhciAqa2VlcGVyWzddOwogCQlpbnQgcywgc3RhdHVzLCBpID0gMDsKQEAgLTQ5Niw4ICs1NjEsMTEgQEAKIAkJaXAuYXJndiA9IGtlZXBlcjsKIAkJaXAub3V0ID0gLTE7CiAJCWlwLmdpdF9jbWQgPSAxOwotCQlpZiAoc3RhcnRfY29tbWFuZCgmaXApKQorCQlzdGF0dXMgPSBzdGFydF9jb21tYW5kKCZpcCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCXJ1bl9zdGF0dXMoc3RhdHVzLCBrZWVwZXJbMF0pOwogCQkJcmV0dXJuICJpbmRleC1wYWNrIGZvcmsgZmFpbGVkIjsKKwkJfQogCQlwYWNrX2xvY2tmaWxlID0gaW5kZXhfcGFja19sb2NrZmlsZShpcC5vdXQpOwogCQljbG9zZShpcC5vdXQpOwogCQlzdGF0dXMgPSBmaW5pc2hfY29tbWFuZCgmaXApOwpAQCAtNTA1LDYgKzU3Myw3IEBACiAJCQlyZXByZXBhcmVfcGFja2VkX2dpdCgpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KKwkJcnVuX3N0YXR1cyhzdGF0dXMsIGtlZXBlclswXSk7CiAJCXJldHVybiAiaW5kZXgtcGFjayBhYm5vcm1hbCBleGl0IjsKIAl9CiB9CkBAIC01OTcsNyArNjY2LDcgQEAKIAlzZXR1cF9wYXRoKCk7CiAKIAlpZiAoIWVudGVyX3JlcG8oZGlyLCAwKSkKLQkJZGllKCInJXMnOiB1bmFibGUgdG8gY2hkaXIgb3Igbm90IGEgZ2l0IGFyY2hpdmUiLCBkaXIpOworCQlkaWUoIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgZ2l0IHJlcG9zaXRvcnkiLCBkaXIpOwogCiAJaWYgKGlzX3JlcG9zaXRvcnlfc2hhbGxvdygpKQogCQlkaWUoImF0dGVtcHQgdG8gcHVzaCBpbnRvIGEgc2hhbGxvdyByZXBvc2l0b3J5Iik7CkBAIC02MDksNiArNjc4LDEwIEBACiAJZWxzZSBpZiAoMCA8PSByZWNlaXZlX3VucGFja19saW1pdCkKIAkJdW5wYWNrX2xpbWl0ID0gcmVjZWl2ZV91bnBhY2tfbGltaXQ7CiAKKwljYXBhYmlsaXRpZXNfdG9fc2VuZCA9IChwcmVmZXJfb2ZzX2RlbHRhKSA/CisJCSIgcmVwb3J0LXN0YXR1cyBkZWxldGUtcmVmcyBvZnMtZGVsdGEgIiA6CisJCSIgcmVwb3J0LXN0YXR1cyBkZWxldGUtcmVmcyAiOworCiAJYWRkX2FsdGVybmF0ZV9yZWZzKCk7CiAJd3JpdGVfaGVhZF9pbmZvKCk7CiAJY2xlYXJfZXh0cmFfcmVmcygpOwpAQCAtNjI0LDEwICs2OTcsMTAgQEAKIAkJCXVucGFja19zdGF0dXMgPSB1bnBhY2soKTsKIAkJZXhlY3V0ZV9jb21tYW5kcyh1bnBhY2tfc3RhdHVzKTsKIAkJaWYgKHBhY2tfbG9ja2ZpbGUpCi0JCQl1bmxpbmsocGFja19sb2NrZmlsZSk7CisJCQl1bmxpbmtfb3Jfd2FybihwYWNrX2xvY2tmaWxlKTsKIAkJaWYgKHJlcG9ydF9zdGF0dXMpCiAJCQlyZXBvcnQodW5wYWNrX3N0YXR1cyk7Ci0JCXJ1bl9ob29rKHBvc3RfcmVjZWl2ZV9ob29rKTsKKwkJcnVuX3JlY2VpdmVfaG9vayhwb3N0X3JlY2VpdmVfaG9vayk7CiAJCXJ1bl91cGRhdGVfcG9zdF9ob29rKGNvbW1hbmRzKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9idWlsdGluLXJlZmxvZy5jIGIvYnVpbHRpbi1yZWZsb2cuYwppbmRleCBkOTVmNTE1Li45NTE5OGM1IDEwMDY0NAotLS0gYS9idWlsdGluLXJlZmxvZy5jCisrKyBiL2J1aWx0aW4tcmVmbG9nLmMKQEAgLTUyLDYgKzUyLDcgQEAKIAogI2RlZmluZSBJTkNPTVBMRVRFCSgxdTw8MTApCiAjZGVmaW5lIFNUVURZSU5HCSgxdTw8MTEpCisjZGVmaW5lIFJFQUNIQUJMRQkoMXU8PDEyKQogCiBzdGF0aWMgaW50IHRyZWVfaXNfY29tcGxldGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKQEAgLTIwOSw2ICsyMTAsNzAgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCB1bnJlYWNoYWJsZShzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19jYiAqY2IsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwkvKgorCSAqIFdlIG1heSBvciBtYXkgbm90IGhhdmUgdGhlIGNvbW1pdCB5ZXQgLSBpZiBub3QsIGxvb2sgaXQKKwkgKiB1cCB1c2luZyB0aGUgc3VwcGxpZWQgc2hhMS4KKwkgKi8KKwlpZiAoIWNvbW1pdCkgeworCQlpZiAoaXNfbnVsbF9zaGExKHNoYTEpKQorCQkJcmV0dXJuIDA7CisKKwkJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHNoYTEsIDEpOworCisJCS8qIE5vdCBhIGNvbW1pdCAtLSBrZWVwIGl0ICovCisJCWlmICghY29tbWl0KQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogUmVhY2hhYmxlIGZyb20gdGhlIGN1cnJlbnQgcmVmPyAgRG9uJ3QgcHJ1bmUuICovCisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgUkVBQ0hBQkxFKQorCQlyZXR1cm4gMDsKKwlpZiAoaW5fbWVyZ2VfYmFzZXMoY29tbWl0LCAmY2ItPnJlZl9jb21taXQsIDEpKQorCQlyZXR1cm4gMDsKKworCS8qIFdlIGNhbid0IHJlYWNoIGl0IC0gcHJ1bmUgaXQuICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfcmVhY2hhYmxlKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdW5zaWduZWQgbG9uZyBleHBpcmVfbGltaXQpCit7CisJLyoKKwkgKiBXZSBuZWVkIHRvIGNvbXB1dGUgd2hldGhlciB0aGUgY29tbWl0IG9uIGVpdGhlciBzaWRlIG9mIGEgcmVmbG9nCisJICogZW50cnkgaXMgcmVhY2hhYmxlIGZyb20gdGhlIHRpcCBvZiB0aGUgcmVmIGZvciBhbGwgZW50cmllcy4KKwkgKiBNYXJrIGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdGhlIHRpcCBkb3duIHRvIHRoZQorCSAqIHRpbWUgdGhyZXNob2xkIGZpcnN0OyB3ZSBrbm93IGEgY29tbWl0IG1hcmtlZCB0aHVzbHkgaXMKKwkgKiByZWFjaGFibGUgZnJvbSB0aGUgdGlwIHdpdGhvdXQgcnVubmluZyBpbl9tZXJnZV9iYXNlcygpCisJICogYXQgYWxsLgorCSAqLworCXN0cnVjdCBjb21taXRfbGlzdCAqcGVuZGluZyA9IE5VTEw7CisKKwljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmcGVuZGluZyk7CisJd2hpbGUgKHBlbmRpbmcpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICplbnRyeSA9IHBlbmRpbmc7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCQlwZW5kaW5nID0gZW50cnktPm5leHQ7CisJCWNvbW1pdCA9IGVudHJ5LT5pdGVtOworCQlmcmVlKGVudHJ5KTsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgUkVBQ0hBQkxFKQorCQkJY29udGludWU7CisJCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJCWNvbnRpbnVlOworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBSRUFDSEFCTEU7CisJCWlmIChjb21taXQtPmRhdGUgPCBleHBpcmVfbGltaXQpCisJCQljb250aW51ZTsKKwkJcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOworCQl3aGlsZSAocGFyZW50KSB7CisJCQljb21taXQgPSBwYXJlbnQtPml0ZW07CisJCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisJCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBSRUFDSEFCTEUpCisJCQkJY29udGludWU7CisJCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmcGVuZGluZyk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBpbnQgZXhwaXJlX3JlZmxvZ19lbnQodW5zaWduZWQgY2hhciAqb3NoYTEsIHVuc2lnbmVkIGNoYXIgKm5zaGExLAogCQljb25zdCBjaGFyICplbWFpbCwgdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAsIGludCB0eiwKIAkJY29uc3QgY2hhciAqbWVzc2FnZSwgdm9pZCAqY2JfZGF0YSkKQEAgLTIzMCwxMiArMjk1LDcgQEAKIAlpZiAodGltZXN0YW1wIDwgY2ItPmNtZC0+ZXhwaXJlX3VucmVhY2hhYmxlKSB7CiAJCWlmICghY2ItPnJlZl9jb21taXQpCiAJCQlnb3RvIHBydW5lOwotCQlpZiAoIW9sZCAmJiAhaXNfbnVsbF9zaGExKG9zaGExKSkKLQkJCW9sZCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShvc2hhMSwgMSk7Ci0JCWlmICghbmV3ICYmICFpc19udWxsX3NoYTEobnNoYTEpKQotCQkJbmV3ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KG5zaGExLCAxKTsKLQkJaWYgKChvbGQgJiYgIWluX21lcmdlX2Jhc2VzKG9sZCwgJmNiLT5yZWZfY29tbWl0LCAxKSkgfHwKLQkJICAgIChuZXcgJiYgIWluX21lcmdlX2Jhc2VzKG5ldywgJmNiLT5yZWZfY29tbWl0LCAxKSkpCisJCWlmICh1bnJlYWNoYWJsZShjYiwgb2xkLCBvc2hhMSkgfHwgdW5yZWFjaGFibGUoY2IsIG5ldywgbnNoYTEpKQogCQkJZ290byBwcnVuZTsKIAl9CiAKQEAgLTI4OCw3ICszNDgsMTEgQEAKIAljYi5yZWZfY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHNoYTEsIDEpOwogCWNiLnJlZiA9IHJlZjsKIAljYi5jbWQgPSBjbWQ7CisJaWYgKGNiLnJlZl9jb21taXQpCisJCW1hcmtfcmVhY2hhYmxlKGNiLnJlZl9jb21taXQsIGNtZC0+ZXhwaXJlX3RvdGFsKTsKIAlmb3JfZWFjaF9yZWZsb2dfZW50KHJlZiwgZXhwaXJlX3JlZmxvZ19lbnQsICZjYik7CisJaWYgKGNiLnJlZl9jb21taXQpCisJCWNsZWFyX2NvbW1pdF9tYXJrcyhjYi5yZWZfY29tbWl0LCBSRUFDSEFCTEUpOwogIGZpbmlzaDoKIAlpZiAoY2IubmV3bG9nKSB7CiAJCWlmIChmY2xvc2UoY2IubmV3bG9nKSkgewpAQCAtNjMwLDcgKzY5NCw3IEBACiAgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgcmVmbG9nX3VzYWdlW10gPQotImdpdCByZWZsb2cgKGV4cGlyZSB8IC4uLikiOworImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIF0iOwogCiBpbnQgY21kX3JlZmxvZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmVtb3RlLmMgYi9idWlsdGluLXJlbW90ZS5jCmluZGV4IGRiMThiY2YuLjAwOGFiZmUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcmVtb3RlLmMKKysrIGIvYnVpbHRpbi1yZW1vdGUuYwpAQCAtMTIsMTUgKzEyLDIxIEBACiAJImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLW1pcnJvcl0gPG5hbWU+IDx1cmw+IiwKIAkiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iLAogCSJnaXQgcmVtb3RlIHJtIDxuYW1lPiIsCisJImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+IFstYSB8IC1kIHwgPGJyYW5jaD5dIiwKIAkiZ2l0IHJlbW90ZSBzaG93IFstbl0gPG5hbWU+IiwKIAkiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIsCi0JImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgW2dyb3VwXSIsCisJImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gW2dyb3VwXSIsCiAJTlVMTAogfTsKIAorI2RlZmluZSBHRVRfUkVGX1NUQVRFUyAoMTw8MCkKKyNkZWZpbmUgR0VUX0hFQURfTkFNRVMgKDE8PDEpCisjZGVmaW5lIEdFVF9QVVNIX1JFRl9TVEFURVMgKDE8PDIpCisKIHN0YXRpYyBpbnQgdmVyYm9zZTsKIAogc3RhdGljIGludCBzaG93X2FsbCh2b2lkKTsKK3N0YXRpYyBpbnQgcHJ1bmVfcmVtb3RlKGNvbnN0IGNoYXIgKnJlbW90ZSwgaW50IGRyeV9ydW4pOwogCiBzdGF0aWMgaW5saW5lIGludCBwb3N0Zml4Y21wKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqcG9zdGZpeCkKIHsKQEAgLTczLDcgKzc5LDggQEAKIAkJT1BUX0VORCgpCiAJfTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwKKwkJCSAgICAgMCk7CiAKIAlpZiAoYXJnYyA8IDIpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV91c2FnZSwgb3B0aW9ucyk7CkBAIC0xNDMsOCArMTUwLDkgQEAKIH0KIAogc3RydWN0IGJyYW5jaF9pbmZvIHsKLQljaGFyICpyZW1vdGU7CisJY2hhciAqcmVtb3RlX25hbWU7CiAJc3RydWN0IHN0cmluZ19saXN0IG1lcmdlOworCWludCByZWJhc2U7CiB9OwogCiBzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGJyYW5jaF9saXN0OwpAQCAtMTYxLDEwICsxNjksMTEgQEAKIHN0YXRpYyBpbnQgY29uZmlnX3JlYWRfYnJhbmNoZXMoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CiAJaWYgKCFwcmVmaXhjbXAoa2V5LCAiYnJhbmNoLiIpKSB7CisJCWNvbnN0IGNoYXIgKm9yaWdfa2V5ID0ga2V5OwogCQljaGFyICpuYW1lOwogCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKIAkJc3RydWN0IGJyYW5jaF9pbmZvICppbmZvOwotCQllbnVtIHsgUkVNT1RFLCBNRVJHRSB9IHR5cGU7CisJCWVudW0geyBSRU1PVEUsIE1FUkdFLCBSRUJBU0UgfSB0eXBlOwogCiAJCWtleSArPSA3OwogCQlpZiAoIXBvc3RmaXhjbXAoa2V5LCAiLnJlbW90ZSIpKSB7CkBAIC0xNzMsNiArMTgyLDkgQEAKIAkJfSBlbHNlIGlmICghcG9zdGZpeGNtcChrZXksICIubWVyZ2UiKSkgewogCQkJbmFtZSA9IHhzdHJuZHVwKGtleSwgc3RybGVuKGtleSkgLSA2KTsKIAkJCXR5cGUgPSBNRVJHRTsKKwkJfSBlbHNlIGlmICghcG9zdGZpeGNtcChrZXksICIucmViYXNlIikpIHsKKwkJCW5hbWUgPSB4c3RybmR1cChrZXksIHN0cmxlbihrZXkpIC0gNyk7CisJCQl0eXBlID0gUkVCQVNFOwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC0xODIsMTAgKzE5NCwxMCBAQAogCQkJaXRlbS0+dXRpbCA9IHhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBicmFuY2hfaW5mbyksIDEpOwogCQlpbmZvID0gaXRlbS0+dXRpbDsKIAkJaWYgKHR5cGUgPT0gUkVNT1RFKSB7Ci0JCQlpZiAoaW5mby0+cmVtb3RlKQotCQkJCXdhcm5pbmcoIm1vcmUgdGhhbiBvbmUgYnJhbmNoLiVzIiwga2V5KTsKLQkJCWluZm8tPnJlbW90ZSA9IHhzdHJkdXAodmFsdWUpOwotCQl9IGVsc2UgeworCQkJaWYgKGluZm8tPnJlbW90ZV9uYW1lKQorCQkJCXdhcm5pbmcoIm1vcmUgdGhhbiBvbmUgJXMiLCBvcmlnX2tleSk7CisJCQlpbmZvLT5yZW1vdGVfbmFtZSA9IHhzdHJkdXAodmFsdWUpOworCQl9IGVsc2UgaWYgKHR5cGUgPT0gTUVSR0UpIHsKIAkJCWNoYXIgKnNwYWNlID0gc3RyY2hyKHZhbHVlLCAnICcpOwogCQkJdmFsdWUgPSBhYmJyZXZfYnJhbmNoKHZhbHVlKTsKIAkJCXdoaWxlIChzcGFjZSkgewpAQCAtMTk2LDcgKzIwOCw4IEBACiAJCQkJc3BhY2UgPSBzdHJjaHIodmFsdWUsICcgJyk7CiAJCQl9CiAJCQlzdHJpbmdfbGlzdF9hcHBlbmQoeHN0cmR1cCh2YWx1ZSksICZpbmZvLT5tZXJnZSk7Ci0JCX0KKwkJfSBlbHNlCisJCQlpbmZvLT5yZWJhc2UgPSBnaXRfY29uZmlnX2Jvb2wob3JpZ19rZXksIHZhbHVlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDYsMTIgKzIxOSwxMiBAQAogCWlmIChicmFuY2hfbGlzdC5ucikKIAkJcmV0dXJuOwogCWdpdF9jb25maWcoY29uZmlnX3JlYWRfYnJhbmNoZXMsIE5VTEwpOwotCXNvcnRfc3RyaW5nX2xpc3QoJmJyYW5jaF9saXN0KTsKIH0KIAogc3RydWN0IHJlZl9zdGF0ZXMgewogCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKLQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbmV3LCBzdGFsZSwgdHJhY2tlZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbmV3LCBzdGFsZSwgdHJhY2tlZCwgaGVhZHMsIHB1c2g7CisJaW50IHF1ZXJpZWQ7CiB9OwogCiBzdGF0aWMgaW50IGhhbmRsZV9vbmVfYnJhbmNoKGNvbnN0IGNoYXIgKnJlZm5hbWUsCkBAIC0yMjcsMTAgKzI0MCw4IEBACiAJCWNvbnN0IGNoYXIgKm5hbWUgPSBhYmJyZXZfYnJhbmNoKHJlZnNwZWMuc3JjKTsKIAkJLyogc3ltYm9saWMgcmVmcyBwb2ludGluZyBub3doZXJlIHdlcmUgaGFuZGxlZCBhbHJlYWR5ICovCiAJCWlmICgoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpIHx8Ci0JCQkJdW5zb3J0ZWRfc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmc3RhdGVzLT50cmFja2VkLAotCQkJCQluYW1lKSB8fAotCQkJCXVuc29ydGVkX3N0cmluZ19saXN0X2hhc19zdHJpbmcoJnN0YXRlcy0+bmV3LAotCQkJCQluYW1lKSkKKwkJICAgIHN0cmluZ19saXN0X2hhc19zdHJpbmcoJnN0YXRlcy0+dHJhY2tlZCwgbmFtZSkgfHwKKwkJICAgIHN0cmluZ19saXN0X2hhc19zdHJpbmcoJnN0YXRlcy0+bmV3LCBuYW1lKSkKIAkJCXJldHVybiAwOwogCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKG5hbWUsICZzdGF0ZXMtPnN0YWxlKTsKIAkJaXRlbS0+dXRpbCA9IHhzdHJkdXAocmVmbmFtZSk7CkBAIC0yMzgsMzkgKzI0OSwxNTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfcmVmX3N0YXRlcyhjb25zdCBzdHJ1Y3QgcmVmICpyZWYsIHN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMpCitzdGF0aWMgaW50IGdldF9yZWZfc3RhdGVzKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzKQogewogCXN0cnVjdCByZWYgKmZldGNoX21hcCA9IE5VTEwsICoqdGFpbCA9ICZmZXRjaF9tYXA7CisJc3RydWN0IHJlZiAqcmVmOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHN0YXRlcy0+cmVtb3RlLT5mZXRjaF9yZWZzcGVjX25yOyBpKyspCi0JCWlmIChnZXRfZmV0Y2hfbWFwKHJlZiwgc3RhdGVzLT5yZW1vdGUtPmZldGNoICsgaSwgJnRhaWwsIDEpKQorCQlpZiAoZ2V0X2ZldGNoX21hcChyZW1vdGVfcmVmcywgc3RhdGVzLT5yZW1vdGUtPmZldGNoICsgaSwgJnRhaWwsIDEpKQogCQkJZGllKCJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIsCiAJCQkJc3RhdGVzLT5yZW1vdGUtPmZldGNoX3JlZnNwZWNbaV0pOwogCiAJc3RhdGVzLT5uZXcuc3RyZHVwX3N0cmluZ3MgPSBzdGF0ZXMtPnRyYWNrZWQuc3RyZHVwX3N0cmluZ3MgPSAxOwogCWZvciAocmVmID0gZmV0Y2hfbWFwOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgewotCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnRhcmdldCA9ICZzdGF0ZXMtPnRyYWNrZWQ7CiAJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JCXZvaWQgKnV0aWwgPSBOVUxMOwotCiAJCWlmICghcmVmLT5wZWVyX3JlZiB8fCByZWFkX3JlZihyZWYtPnBlZXJfcmVmLT5uYW1lLCBzaGExKSkKLQkJCXRhcmdldCA9ICZzdGF0ZXMtPm5ldzsKLQkJZWxzZSB7Ci0JCQl0YXJnZXQgPSAmc3RhdGVzLT50cmFja2VkOwotCQkJaWYgKGhhc2hjbXAoc2hhMSwgcmVmLT5uZXdfc2hhMSkpCi0JCQkJdXRpbCA9ICZzdGF0ZXM7Ci0JCX0KLQkJc3RyaW5nX2xpc3RfYXBwZW5kKGFiYnJldl9icmFuY2gocmVmLT5uYW1lKSwgdGFyZ2V0KS0+dXRpbCA9IHV0aWw7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoYWJicmV2X2JyYW5jaChyZWYtPm5hbWUpLCAmc3RhdGVzLT5uZXcpOworCQllbHNlCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoYWJicmV2X2JyYW5jaChyZWYtPm5hbWUpLCAmc3RhdGVzLT50cmFja2VkKTsKIAl9CiAJZnJlZV9yZWZzKGZldGNoX21hcCk7CiAKKwlzb3J0X3N0cmluZ19saXN0KCZzdGF0ZXMtPm5ldyk7CisJc29ydF9zdHJpbmdfbGlzdCgmc3RhdGVzLT50cmFja2VkKTsKIAlmb3JfZWFjaF9yZWYoaGFuZGxlX29uZV9icmFuY2gsIHN0YXRlcyk7CiAJc29ydF9zdHJpbmdfbGlzdCgmc3RhdGVzLT5zdGFsZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RydWN0IHB1c2hfaW5mbyB7CisJY2hhciAqZGVzdDsKKwlpbnQgZm9yY2VkOworCWVudW0geworCQlQVVNIX1NUQVRVU19DUkVBVEUgPSAwLAorCQlQVVNIX1NUQVRVU19ERUxFVEUsCisJCVBVU0hfU1RBVFVTX1VQVE9EQVRFLAorCQlQVVNIX1NUQVRVU19GQVNURk9SV0FSRCwKKwkJUFVTSF9TVEFUVVNfT1VUT0ZEQVRFLAorCQlQVVNIX1NUQVRVU19OT1RRVUVSSUVELAorCX0gc3RhdHVzOworfTsKKworc3RhdGljIGludCBnZXRfcHVzaF9yZWZfc3RhdGVzKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLAorCXN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMpCit7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlID0gc3RhdGVzLT5yZW1vdGU7CisJc3RydWN0IHJlZiAqcmVmLCAqbG9jYWxfcmVmcywgKnB1c2hfbWFwOworCWlmIChyZW1vdGUtPm1pcnJvcikKKwkJcmV0dXJuIDA7CisKKwlsb2NhbF9yZWZzID0gZ2V0X2xvY2FsX2hlYWRzKCk7CisJcHVzaF9tYXAgPSBjb3B5X3JlZl9saXN0KHJlbW90ZV9yZWZzKTsKKworCW1hdGNoX3JlZnMobG9jYWxfcmVmcywgJnB1c2hfbWFwLCByZW1vdGUtPnB1c2hfcmVmc3BlY19uciwKKwkJICAgcmVtb3RlLT5wdXNoX3JlZnNwZWMsIE1BVENIX1JFRlNfTk9ORSk7CisKKwlzdGF0ZXMtPnB1c2guc3RyZHVwX3N0cmluZ3MgPSAxOworCWZvciAocmVmID0gcHVzaF9tYXA7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlzdHJ1Y3QgcHVzaF9pbmZvICppbmZvOworCisJCWlmICghcmVmLT5wZWVyX3JlZikKKwkJCWNvbnRpbnVlOworCQloYXNoY3B5KHJlZi0+bmV3X3NoYTEsIHJlZi0+cGVlcl9yZWYtPm5ld19zaGExKTsKKworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKGFiYnJldl9icmFuY2gocmVmLT5wZWVyX3JlZi0+bmFtZSksCisJCQkJCSAgJnN0YXRlcy0+cHVzaCk7CisJCWl0ZW0tPnV0aWwgPSB4Y2FsbG9jKHNpemVvZihzdHJ1Y3QgcHVzaF9pbmZvKSwgMSk7CisJCWluZm8gPSBpdGVtLT51dGlsOworCQlpbmZvLT5mb3JjZWQgPSByZWYtPmZvcmNlOworCQlpbmZvLT5kZXN0ID0geHN0cmR1cChhYmJyZXZfYnJhbmNoKHJlZi0+bmFtZSkpOworCisJCWlmIChpc19udWxsX3NoYTEocmVmLT5uZXdfc2hhMSkpIHsKKwkJCWluZm8tPnN0YXR1cyA9IFBVU0hfU1RBVFVTX0RFTEVURTsKKwkJfSBlbHNlIGlmICghaGFzaGNtcChyZWYtPm9sZF9zaGExLCByZWYtPm5ld19zaGExKSkKKwkJCWluZm8tPnN0YXR1cyA9IFBVU0hfU1RBVFVTX1VQVE9EQVRFOworCQllbHNlIGlmIChpc19udWxsX3NoYTEocmVmLT5vbGRfc2hhMSkpCisJCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19DUkVBVEU7CisJCWVsc2UgaWYgKGhhc19zaGExX2ZpbGUocmVmLT5vbGRfc2hhMSkgJiYKKwkJCSByZWZfbmV3ZXIocmVmLT5uZXdfc2hhMSwgcmVmLT5vbGRfc2hhMSkpCisJCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19GQVNURk9SV0FSRDsKKwkJZWxzZQorCQkJaW5mby0+c3RhdHVzID0gUFVTSF9TVEFUVVNfT1VUT0ZEQVRFOworCX0KKwlmcmVlX3JlZnMobG9jYWxfcmVmcyk7CisJZnJlZV9yZWZzKHB1c2hfbWFwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfcHVzaF9yZWZfc3RhdGVzX25vcXVlcnkoc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGUgPSBzdGF0ZXMtPnJlbW90ZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgcHVzaF9pbmZvICppbmZvOworCisJaWYgKHJlbW90ZS0+bWlycm9yKQorCQlyZXR1cm4gMDsKKworCXN0YXRlcy0+cHVzaC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJaWYgKCFyZW1vdGUtPnB1c2hfcmVmc3BlY19ucikgeworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCIobWF0Y2hpbmcpIiwgJnN0YXRlcy0+cHVzaCk7CisJCWluZm8gPSBpdGVtLT51dGlsID0geGNhbGxvYyhzaXplb2Yoc3RydWN0IHB1c2hfaW5mbyksIDEpOworCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19OT1RRVUVSSUVEOworCQlpbmZvLT5kZXN0ID0geHN0cmR1cChpdGVtLT5zdHJpbmcpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3RlLT5wdXNoX3JlZnNwZWNfbnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmc3BlYyAqc3BlYyA9IHJlbW90ZS0+cHVzaCArIGk7CisJCWlmIChzcGVjLT5tYXRjaGluZykKKwkJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoIihtYXRjaGluZykiLCAmc3RhdGVzLT5wdXNoKTsKKwkJZWxzZSBpZiAoc3RybGVuKHNwZWMtPnNyYykpCisJCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKHNwZWMtPnNyYywgJnN0YXRlcy0+cHVzaCk7CisJCWVsc2UKKwkJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoIihkZWxldGUpIiwgJnN0YXRlcy0+cHVzaCk7CisKKwkJaW5mbyA9IGl0ZW0tPnV0aWwgPSB4Y2FsbG9jKHNpemVvZihzdHJ1Y3QgcHVzaF9pbmZvKSwgMSk7CisJCWluZm8tPmZvcmNlZCA9IHNwZWMtPmZvcmNlOworCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19OT1RRVUVSSUVEOworCQlpbmZvLT5kZXN0ID0geHN0cmR1cChzcGVjLT5kc3QgPyBzcGVjLT5kc3QgOiBpdGVtLT5zdHJpbmcpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfaGVhZF9uYW1lcyhjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcykKK3sKKwlzdHJ1Y3QgcmVmICpyZWYsICptYXRjaGVzOworCXN0cnVjdCByZWYgKmZldGNoX21hcCA9IE5VTEwsICoqZmV0Y2hfbWFwX3RhaWwgPSAmZmV0Y2hfbWFwOworCXN0cnVjdCByZWZzcGVjIHJlZnNwZWM7CisKKwlyZWZzcGVjLmZvcmNlID0gMDsKKwlyZWZzcGVjLnBhdHRlcm4gPSAxOworCXJlZnNwZWMuc3JjID0gcmVmc3BlYy5kc3QgPSAicmVmcy9oZWFkcy8qIjsKKwlzdGF0ZXMtPmhlYWRzLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9yZWZzLCAmcmVmc3BlYywgJmZldGNoX21hcF90YWlsLCAwKTsKKwltYXRjaGVzID0gZ3Vlc3NfcmVtb3RlX2hlYWQoZmluZF9yZWZfYnlfbmFtZShyZW1vdGVfcmVmcywgIkhFQUQiKSwKKwkJCQkgICAgZmV0Y2hfbWFwLCAxKTsKKwlmb3IocmVmID0gbWF0Y2hlczsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCXN0cmluZ19saXN0X2FwcGVuZChhYmJyZXZfYnJhbmNoKHJlZi0+bmFtZSksICZzdGF0ZXMtPmhlYWRzKTsKKworCWZyZWVfcmVmcyhmZXRjaF9tYXApOworCWZyZWVfcmVmcyhtYXRjaGVzKTsKKworCXJldHVybiAwOworfQorCiBzdHJ1Y3Qga25vd25fcmVtb3RlIHsKIAlzdHJ1Y3Qga25vd25fcmVtb3RlICpuZXh0OwogCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKQEAgLTQwMCw4ICs1MjMsOCBAQAogCQlwYXRoID0gZ2l0X3BhdGgoInJlbW90ZXMvJXMiLCByZW1vdGUtPm5hbWUpOwogCWVsc2UgaWYgKHJlbW90ZS0+b3JpZ2luID09IFJFTU9URV9CUkFOQ0hFUykKIAkJcGF0aCA9IGdpdF9wYXRoKCJicmFuY2hlcy8lcyIsIHJlbW90ZS0+bmFtZSk7Ci0JaWYgKHBhdGggJiYgdW5saW5rKHBhdGgpKQotCQl3YXJuaW5nKCJmYWlsZWQgdG8gcmVtb3ZlICclcyciLCBwYXRoKTsKKwlpZiAocGF0aCkKKwkJdW5saW5rX29yX3dhcm4ocGF0aCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2Niw3ICs1ODksNyBAQAogCWZvciAoaSA9IDA7IGkgPCBicmFuY2hfbGlzdC5ucjsgaSsrKSB7CiAJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gYnJhbmNoX2xpc3QuaXRlbXMgKyBpOwogCQlzdHJ1Y3QgYnJhbmNoX2luZm8gKmluZm8gPSBpdGVtLT51dGlsOwotCQlpZiAoaW5mby0+cmVtb3RlICYmICFzdHJjbXAoaW5mby0+cmVtb3RlLCByZW5hbWUub2xkKSkgeworCQlpZiAoaW5mby0+cmVtb3RlX25hbWUgJiYgIXN0cmNtcChpbmZvLT5yZW1vdGVfbmFtZSwgcmVuYW1lLm9sZCkpIHsKIAkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKIAkJCXN0cmJ1Zl9hZGRmKCZidWYsICJicmFuY2guJXMucmVtb3RlIiwgaXRlbS0+c3RyaW5nKTsKIAkJCWlmIChnaXRfY29uZmlnX3NldChidWYuYnVmLCByZW5hbWUubmV3KSkgewpAQCAtNDg0LDkgKzYwNyw4IEBACiAJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gcmVtb3RlX2JyYW5jaGVzLml0ZW1zICsgaTsKIAkJaW50IGZsYWcgPSAwOwogCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCQljb25zdCBjaGFyICpzeW1yZWY7CiAKLQkJc3ltcmVmID0gcmVzb2x2ZV9yZWYoaXRlbS0+c3RyaW5nLCBzaGExLCAxLCAmZmxhZyk7CisJCXJlc29sdmVfcmVmKGl0ZW0tPnN0cmluZywgc2hhMSwgMSwgJmZsYWcpOwogCQlpZiAoIShmbGFnICYgUkVGX0lTU1lNUkVGKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoZGVsZXRlX3JlZihpdGVtLT5zdHJpbmcsIE5VTEwsIFJFRl9OT0RFUkVGKSkKQEAgLTU3Niw3ICs2OTgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBicmFuY2hfbGlzdC5ucjsgaSsrKSB7CiAJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gYnJhbmNoX2xpc3QuaXRlbXMgKyBpOwogCQlzdHJ1Y3QgYnJhbmNoX2luZm8gKmluZm8gPSBpdGVtLT51dGlsOwotCQlpZiAoaW5mby0+cmVtb3RlICYmICFzdHJjbXAoaW5mby0+cmVtb3RlLCByZW1vdGUtPm5hbWUpKSB7CisJCWlmIChpbmZvLT5yZW1vdGVfbmFtZSAmJiAhc3RyY21wKGluZm8tPnJlbW90ZV9uYW1lLCByZW1vdGUtPm5hbWUpKSB7CiAJCQljb25zdCBjaGFyICprZXlzW10gPSB7ICJyZW1vdGUiLCAibWVyZ2UiLCBOVUxMIH0sICoqazsKIAkJCWZvciAoayA9IGtleXM7ICprOyBrKyspIHsKIAkJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CkBAIC02MTgsNDMgKzc0MCwyMCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfbGlzdChjb25zdCBjaGFyICp0aXRsZSwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAotCQkgICAgICBjb25zdCBjaGFyICpleHRyYV9hcmcpCitzdGF0aWMgdm9pZCBjbGVhcl9wdXNoX2luZm8odm9pZCAqdXRpbCwgY29uc3QgY2hhciAqc3RyaW5nKQogewotCWludCBpOwotCi0JaWYgKCFsaXN0LT5ucikKLQkJcmV0dXJuOwotCi0JcHJpbnRmKHRpdGxlLCBsaXN0LT5uciA+IDEgPyAiZXMiIDogIiIsIGV4dHJhX2FyZyk7Ci0JcHJpbnRmKCJcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQotCQlwcmludGYoIiAgICAlc1xuIiwgbGlzdC0+aXRlbXNbaV0uc3RyaW5nKTsKKwlzdHJ1Y3QgcHVzaF9pbmZvICppbmZvID0gdXRpbDsKKwlmcmVlKGluZm8tPmRlc3QpOworCWZyZWUoaW5mbyk7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3JlbW90ZV9yZWZfc3RhdGVzKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJIHN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMsCi0JCQkJIGludCBxdWVyeSkKK3N0YXRpYyB2b2lkIGZyZWVfcmVtb3RlX3JlZl9zdGF0ZXMoc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcykKIHsKLQlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7Ci0JY29uc3Qgc3RydWN0IHJlZiAqcmVmOwotCi0Jc3RhdGVzLT5yZW1vdGUgPSByZW1vdGVfZ2V0KG5hbWUpOwotCWlmICghc3RhdGVzLT5yZW1vdGUpCi0JCXJldHVybiBlcnJvcigiTm8gc3VjaCByZW1vdGU6ICVzIiwgbmFtZSk7Ci0KLQlyZWFkX2JyYW5jaGVzKCk7Ci0KLQlpZiAocXVlcnkpIHsKLQkJdHJhbnNwb3J0ID0gdHJhbnNwb3J0X2dldChOVUxMLCBzdGF0ZXMtPnJlbW90ZS0+dXJsX25yID4gMCA/Ci0JCQlzdGF0ZXMtPnJlbW90ZS0+dXJsWzBdIDogTlVMTCk7Ci0JCXJlZiA9IHRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnModHJhbnNwb3J0KTsKLQkJdHJhbnNwb3J0X2Rpc2Nvbm5lY3QodHJhbnNwb3J0KTsKLQotCQlnZXRfcmVmX3N0YXRlcyhyZWYsIHN0YXRlcyk7Ci0JfQotCi0JcmV0dXJuIDA7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlcy0+bmV3LCAwKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGVzLT5zdGFsZSwgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlcy0+dHJhY2tlZCwgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlcy0+aGVhZHMsIDApOworCXN0cmluZ19saXN0X2NsZWFyX2Z1bmMoJnN0YXRlcy0+cHVzaCwgY2xlYXJfcHVzaF9pbmZvKTsKIH0KIAogc3RhdGljIGludCBhcHBlbmRfcmVmX3RvX3RyYWNrZWRfbGlzdChjb25zdCBjaGFyICpyZWZuYW1lLApAQCAtNjYzLDYgKzc2Miw5IEBACiAJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcyA9IGNiX2RhdGE7CiAJc3RydWN0IHJlZnNwZWMgcmVmc3BlYzsKIAorCWlmIChmbGFncyAmIFJFRl9JU1NZTVJFRikKKwkJcmV0dXJuIDA7CisKIAltZW1zZXQoJnJlZnNwZWMsIDAsIHNpemVvZihyZWZzcGVjKSk7CiAJcmVmc3BlYy5kc3QgPSAoY2hhciAqKXJlZm5hbWU7CiAJaWYgKCFyZW1vdGVfZmluZF90cmFja2luZyhzdGF0ZXMtPnJlbW90ZSwgJnJlZnNwZWMpKQpAQCAtNjcxLDgyICs3NzMsMzY3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZ2V0X3JlbW90ZV9yZWZfc3RhdGVzKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMsCisJCQkJIGludCBxdWVyeSkKK3sKKwlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnM7CisKKwlzdGF0ZXMtPnJlbW90ZSA9IHJlbW90ZV9nZXQobmFtZSk7CisJaWYgKCFzdGF0ZXMtPnJlbW90ZSkKKwkJcmV0dXJuIGVycm9yKCJObyBzdWNoIHJlbW90ZTogJXMiLCBuYW1lKTsKKworCXJlYWRfYnJhbmNoZXMoKTsKKworCWlmIChxdWVyeSkgeworCQl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KHN0YXRlcy0+cmVtb3RlLCBzdGF0ZXMtPnJlbW90ZS0+dXJsX25yID4gMCA/CisJCQlzdGF0ZXMtPnJlbW90ZS0+dXJsWzBdIDogTlVMTCk7CisJCXJlbW90ZV9yZWZzID0gdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyh0cmFuc3BvcnQpOworCQl0cmFuc3BvcnRfZGlzY29ubmVjdCh0cmFuc3BvcnQpOworCisJCXN0YXRlcy0+cXVlcmllZCA9IDE7CisJCWlmIChxdWVyeSAmIEdFVF9SRUZfU1RBVEVTKQorCQkJZ2V0X3JlZl9zdGF0ZXMocmVtb3RlX3JlZnMsIHN0YXRlcyk7CisJCWlmIChxdWVyeSAmIEdFVF9IRUFEX05BTUVTKQorCQkJZ2V0X2hlYWRfbmFtZXMocmVtb3RlX3JlZnMsIHN0YXRlcyk7CisJCWlmIChxdWVyeSAmIEdFVF9QVVNIX1JFRl9TVEFURVMpCisJCQlnZXRfcHVzaF9yZWZfc3RhdGVzKHJlbW90ZV9yZWZzLCBzdGF0ZXMpOworCX0gZWxzZSB7CisJCWZvcl9lYWNoX3JlZihhcHBlbmRfcmVmX3RvX3RyYWNrZWRfbGlzdCwgc3RhdGVzKTsKKwkJc29ydF9zdHJpbmdfbGlzdCgmc3RhdGVzLT50cmFja2VkKTsKKwkJZ2V0X3B1c2hfcmVmX3N0YXRlc19ub3F1ZXJ5KHN0YXRlcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzaG93X2luZm8geworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdDsKKwlzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzOworCWludCB3aWR0aCwgd2lkdGgyOworCWludCBhbnlfcmViYXNlOworfTsKKworc3RhdGljIGludCBhZGRfcmVtb3RlX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hvd19pbmZvICppbmZvID0gY2JfZGF0YTsKKwlpbnQgbiA9IHN0cmxlbihpdGVtLT5zdHJpbmcpOworCWlmIChuID4gaW5mby0+d2lkdGgpCisJCWluZm8tPndpZHRoID0gbjsKKwlzdHJpbmdfbGlzdF9pbnNlcnQoaXRlbS0+c3RyaW5nLCBpbmZvLT5saXN0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X3JlbW90ZV9pbmZvX2l0ZW0oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHNob3dfaW5mbyAqaW5mbyA9IGNiX2RhdGE7CisJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcyA9IGluZm8tPnN0YXRlczsKKwljb25zdCBjaGFyICpuYW1lID0gaXRlbS0+c3RyaW5nOworCisJaWYgKHN0YXRlcy0+cXVlcmllZCkgeworCQljb25zdCBjaGFyICpmbXQgPSAiJXMiOworCQljb25zdCBjaGFyICphcmcgPSAiIjsKKwkJaWYgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoJnN0YXRlcy0+bmV3LCBuYW1lKSkgeworCQkJZm10ID0gIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSI7CisJCQlhcmcgPSBzdGF0ZXMtPnJlbW90ZS0+bmFtZTsKKwkJfSBlbHNlIGlmIChzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZzdGF0ZXMtPnRyYWNrZWQsIG5hbWUpKQorCQkJYXJnID0gIiB0cmFja2VkIjsKKwkJZWxzZSBpZiAoc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmc3RhdGVzLT5zdGFsZSwgbmFtZSkpCisJCQlhcmcgPSAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiOworCQllbHNlCisJCQlhcmcgPSAiID8/PyI7CisJCXByaW50ZigiICAgICUtKnMiLCBpbmZvLT53aWR0aCwgbmFtZSk7CisJCXByaW50ZihmbXQsIGFyZyk7CisJCXByaW50ZigiXG4iKTsKKwl9IGVsc2UKKwkJcHJpbnRmKCIgICAgJXNcbiIsIG5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2xvY2FsX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqYnJhbmNoX2l0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHNob3dfaW5mbyAqc2hvd19pbmZvID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzID0gc2hvd19pbmZvLT5zdGF0ZXM7CisJc3RydWN0IGJyYW5jaF9pbmZvICpicmFuY2hfaW5mbyA9IGJyYW5jaF9pdGVtLT51dGlsOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWludCBuOworCisJaWYgKCFicmFuY2hfaW5mby0+bWVyZ2UubnIgfHwgIWJyYW5jaF9pbmZvLT5yZW1vdGVfbmFtZSB8fAorCSAgICBzdHJjbXAoc3RhdGVzLT5yZW1vdGUtPm5hbWUsIGJyYW5jaF9pbmZvLT5yZW1vdGVfbmFtZSkpCisJCXJldHVybiAwOworCWlmICgobiA9IHN0cmxlbihicmFuY2hfaXRlbS0+c3RyaW5nKSkgPiBzaG93X2luZm8tPndpZHRoKQorCQlzaG93X2luZm8tPndpZHRoID0gbjsKKwlpZiAoYnJhbmNoX2luZm8tPnJlYmFzZSkKKwkJc2hvd19pbmZvLT5hbnlfcmViYXNlID0gMTsKKworCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoYnJhbmNoX2l0ZW0tPnN0cmluZywgc2hvd19pbmZvLT5saXN0KTsKKwlpdGVtLT51dGlsID0gYnJhbmNoX2luZm87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X2xvY2FsX2luZm9faXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hvd19pbmZvICpzaG93X2luZm8gPSBjYl9kYXRhOworCXN0cnVjdCBicmFuY2hfaW5mbyAqYnJhbmNoX2luZm8gPSBpdGVtLT51dGlsOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbWVyZ2UgPSAmYnJhbmNoX2luZm8tPm1lcmdlOworCWNvbnN0IGNoYXIgKmFsc287CisJaW50IGk7CisKKwlpZiAoYnJhbmNoX2luZm8tPnJlYmFzZSAmJiBicmFuY2hfaW5mby0+bWVyZ2UubnIgPiAxKSB7CisJCWVycm9yKCJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giLAorCQkJaXRlbS0+c3RyaW5nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJpbnRmKCIgICAgJS0qcyAiLCBzaG93X2luZm8tPndpZHRoLCBpdGVtLT5zdHJpbmcpOworCWlmIChicmFuY2hfaW5mby0+cmViYXNlKSB7CisJCXByaW50ZigicmViYXNlcyBvbnRvIHJlbW90ZSAlc1xuIiwgbWVyZ2UtPml0ZW1zWzBdLnN0cmluZyk7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc2hvd19pbmZvLT5hbnlfcmViYXNlKSB7CisJCXByaW50ZigiIG1lcmdlcyB3aXRoIHJlbW90ZSAlc1xuIiwgbWVyZ2UtPml0ZW1zWzBdLnN0cmluZyk7CisJCWFsc28gPSAiICAgIGFuZCB3aXRoIHJlbW90ZSI7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJtZXJnZXMgd2l0aCByZW1vdGUgJXNcbiIsIG1lcmdlLT5pdGVtc1swXS5zdHJpbmcpOworCQlhbHNvID0gIiAgIGFuZCB3aXRoIHJlbW90ZSI7CisJfQorCWZvciAoaSA9IDE7IGkgPCBtZXJnZS0+bnI7IGkrKykKKwkJcHJpbnRmKCIgICAgJS0qcyAlcyAlc1xuIiwgc2hvd19pbmZvLT53aWR0aCwgIiIsIGFsc28sCisJCSAgICAgICBtZXJnZS0+aXRlbXNbaV0uc3RyaW5nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9wdXNoX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcHVzaF9pdGVtLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzaG93X2luZm8gKnNob3dfaW5mbyA9IGNiX2RhdGE7CisJc3RydWN0IHB1c2hfaW5mbyAqcHVzaF9pbmZvID0gcHVzaF9pdGVtLT51dGlsOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWludCBuOworCWlmICgobiA9IHN0cmxlbihwdXNoX2l0ZW0tPnN0cmluZykpID4gc2hvd19pbmZvLT53aWR0aCkKKwkJc2hvd19pbmZvLT53aWR0aCA9IG47CisJaWYgKChuID0gc3RybGVuKHB1c2hfaW5mby0+ZGVzdCkpID4gc2hvd19pbmZvLT53aWR0aDIpCisJCXNob3dfaW5mby0+d2lkdGgyID0gbjsKKwlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKHB1c2hfaXRlbS0+c3RyaW5nLCBzaG93X2luZm8tPmxpc3QpOworCWl0ZW0tPnV0aWwgPSBwdXNoX2l0ZW0tPnV0aWw7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTb3J0aW5nIGNvbXBhcmlzb24gZm9yIGEgc3RyaW5nIGxpc3QgdGhhdCBoYXMgcHVzaF9pbmZvCisgKiBzdHJ1Y3RzIGluIGl0cyB1dGlsIGZpZWxkCisgKi8KK3N0YXRpYyBpbnQgY21wX3N0cmluZ193aXRoX3B1c2goY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQoreworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICphID0gdmE7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmIgPSB2YjsKKwljb25zdCBzdHJ1Y3QgcHVzaF9pbmZvICphX3B1c2ggPSBhLT51dGlsOworCWNvbnN0IHN0cnVjdCBwdXNoX2luZm8gKmJfcHVzaCA9IGItPnV0aWw7CisJaW50IGNtcCA9IHN0cmNtcChhLT5zdHJpbmcsIGItPnN0cmluZyk7CisJcmV0dXJuIGNtcCA/IGNtcCA6IHN0cmNtcChhX3B1c2gtPmRlc3QsIGJfcHVzaC0+ZGVzdCk7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19wdXNoX2luZm9faXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hvd19pbmZvICpzaG93X2luZm8gPSBjYl9kYXRhOworCXN0cnVjdCBwdXNoX2luZm8gKnB1c2hfaW5mbyA9IGl0ZW0tPnV0aWw7CisJY2hhciAqc3JjID0gaXRlbS0+c3RyaW5nLCAqc3RhdHVzID0gTlVMTDsKKworCXN3aXRjaCAocHVzaF9pbmZvLT5zdGF0dXMpIHsKKwljYXNlIFBVU0hfU1RBVFVTX0NSRUFURToKKwkJc3RhdHVzID0gImNyZWF0ZSI7CisJCWJyZWFrOworCWNhc2UgUFVTSF9TVEFUVVNfREVMRVRFOgorCQlzdGF0dXMgPSAiZGVsZXRlIjsKKwkJc3JjID0gIihub25lKSI7CisJCWJyZWFrOworCWNhc2UgUFVTSF9TVEFUVVNfVVBUT0RBVEU6CisJCXN0YXR1cyA9ICJ1cCB0byBkYXRlIjsKKwkJYnJlYWs7CisJY2FzZSBQVVNIX1NUQVRVU19GQVNURk9SV0FSRDoKKwkJc3RhdHVzID0gImZhc3QgZm9yd2FyZGFibGUiOworCQlicmVhazsKKwljYXNlIFBVU0hfU1RBVFVTX09VVE9GREFURToKKwkJc3RhdHVzID0gImxvY2FsIG91dCBvZiBkYXRlIjsKKwkJYnJlYWs7CisJY2FzZSBQVVNIX1NUQVRVU19OT1RRVUVSSUVEOgorCQlicmVhazsKKwl9CisJaWYgKHN0YXR1cykKKwkJcHJpbnRmKCIgICAgJS0qcyAlcyB0byAlLSpzICglcylcbiIsIHNob3dfaW5mby0+d2lkdGgsIHNyYywKKwkJCXB1c2hfaW5mby0+Zm9yY2VkID8gImZvcmNlcyIgOiAicHVzaGVzIiwKKwkJCXNob3dfaW5mby0+d2lkdGgyLCBwdXNoX2luZm8tPmRlc3QsIHN0YXR1cyk7CisJZWxzZQorCQlwcmludGYoIiAgICAlLSpzICVzIHRvICVzXG4iLCBzaG93X2luZm8tPndpZHRoLCBzcmMsCisJCQlwdXNoX2luZm8tPmZvcmNlZCA/ICJmb3JjZXMiIDogInB1c2hlcyIsCisJCQlwdXNoX2luZm8tPmRlc3QpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNob3coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewotCWludCBub19xdWVyeSA9IDAsIHJlc3VsdCA9IDA7CisJaW50IG5vX3F1ZXJ5ID0gMCwgcmVzdWx0ID0gMCwgcXVlcnlfZmxhZyA9IDA7CiAJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAJCU9QVF9HUk9VUCgic2hvdyBzcGVjaWZpYyBvcHRpb25zIiksCiAJCU9QVF9CT09MRUFOKCduJywgTlVMTCwgJm5vX3F1ZXJ5LCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiKSwKIAkJT1BUX0VORCgpCiAJfTsKIAlzdHJ1Y3QgcmVmX3N0YXRlcyBzdGF0ZXM7CisJc3RydWN0IHN0cmluZ19saXN0IGluZm9fbGlzdCA9IHsgTlVMTCwgMCwgMCwgMCB9OworCXN0cnVjdCBzaG93X2luZm8gaW5mbzsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwKKwkJCSAgICAgMCk7CiAKIAlpZiAoYXJnYyA8IDEpCiAJCXJldHVybiBzaG93X2FsbCgpOwogCisJaWYgKCFub19xdWVyeSkKKwkJcXVlcnlfZmxhZyA9IChHRVRfUkVGX1NUQVRFUyB8IEdFVF9IRUFEX05BTUVTIHwgR0VUX1BVU0hfUkVGX1NUQVRFUyk7CisKIAltZW1zZXQoJnN0YXRlcywgMCwgc2l6ZW9mKHN0YXRlcykpOworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKwlpbmZvLnN0YXRlcyA9ICZzdGF0ZXM7CisJaW5mby5saXN0ID0gJmluZm9fbGlzdDsKIAlmb3IgKDsgYXJnYzsgYXJnYy0tLCBhcmd2KyspIHsKIAkJaW50IGk7CisJCWNvbnN0IGNoYXIgKip1cmw7CisJCWludCB1cmxfbnI7CiAKLQkJZ2V0X3JlbW90ZV9yZWZfc3RhdGVzKCphcmd2LCAmc3RhdGVzLCAhbm9fcXVlcnkpOworCQlnZXRfcmVtb3RlX3JlZl9zdGF0ZXMoKmFyZ3YsICZzdGF0ZXMsIHF1ZXJ5X2ZsYWcpOwogCi0JCXByaW50ZigiKiByZW1vdGUgJXNcbiAgVVJMOiAlc1xuIiwgKmFyZ3YsCi0JCQlzdGF0ZXMucmVtb3RlLT51cmxfbnIgPiAwID8KLQkJCQlzdGF0ZXMucmVtb3RlLT51cmxbMF0gOiAiKG5vIFVSTCkiKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgYnJhbmNoX2xpc3QubnI7IGkrKykgewotCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmJyYW5jaCA9IGJyYW5jaF9saXN0Lml0ZW1zICsgaTsKLQkJCXN0cnVjdCBicmFuY2hfaW5mbyAqaW5mbyA9IGJyYW5jaC0+dXRpbDsKLQkJCWludCBqOwotCi0JCQlpZiAoIWluZm8tPm1lcmdlLm5yIHx8IHN0cmNtcCgqYXJndiwgaW5mby0+cmVtb3RlKSkKLQkJCQljb250aW51ZTsKLQkJCXByaW50ZigiICBSZW1vdGUgYnJhbmNoJXMgbWVyZ2VkIHdpdGggJ2dpdCBwdWxsJyAiCi0JCQkJIndoaWxlIG9uIGJyYW5jaCAlc1xuICAgIiwKLQkJCQlpbmZvLT5tZXJnZS5uciA+IDEgPyAiZXMiIDogIiIsCi0JCQkJYnJhbmNoLT5zdHJpbmcpOwotCQkJZm9yIChqID0gMDsgaiA8IGluZm8tPm1lcmdlLm5yOyBqKyspCi0JCQkJcHJpbnRmKCIgJXMiLCBpbmZvLT5tZXJnZS5pdGVtc1tqXS5zdHJpbmcpOwotCQkJcHJpbnRmKCJcbiIpOworCQlwcmludGYoIiogcmVtb3RlICVzXG4iLCAqYXJndik7CisJCXByaW50ZigiICBGZXRjaCBVUkw6ICVzXG4iLCBzdGF0ZXMucmVtb3RlLT51cmxfbnIgPiAwID8KKwkJCXN0YXRlcy5yZW1vdGUtPnVybFswXSA6ICIobm8gVVJMKSIpOworCQlpZiAoc3RhdGVzLnJlbW90ZS0+cHVzaHVybF9ucikgeworCQkJdXJsID0gc3RhdGVzLnJlbW90ZS0+cHVzaHVybDsKKwkJCXVybF9uciA9IHN0YXRlcy5yZW1vdGUtPnB1c2h1cmxfbnI7CisJCX0gZWxzZSB7CisJCQl1cmwgPSBzdGF0ZXMucmVtb3RlLT51cmw7CisJCQl1cmxfbnIgPSBzdGF0ZXMucmVtb3RlLT51cmxfbnI7CiAJCX0KLQotCQlpZiAoIW5vX3F1ZXJ5KSB7Ci0JCQlzaG93X2xpc3QoIiAgTmV3IHJlbW90ZSBicmFuY2glcyAobmV4dCBmZXRjaCAiCi0JCQkJIndpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiLAotCQkJCSZzdGF0ZXMubmV3LCBzdGF0ZXMucmVtb3RlLT5uYW1lKTsKLQkJCXNob3dfbGlzdCgiICBTdGFsZSB0cmFja2luZyBicmFuY2glcyAodXNlICdnaXQgcmVtb3RlICIKLQkJCQkicHJ1bmUnKSIsICZzdGF0ZXMuc3RhbGUsICIiKTsKLQkJfQotCisJCWZvciAoaT0wOyBpIDwgdXJsX25yOyBpKyspCisJCQlwcmludGYoIiAgUHVzaCAgVVJMOiAlc1xuIiwgdXJsW2ldKTsKKwkJaWYgKCFpKQorCQkJcHJpbnRmKCIgIFB1c2ggIFVSTDogJXNcbiIsICIobm8gVVJMKSIpOwogCQlpZiAobm9fcXVlcnkpCi0JCQlmb3JfZWFjaF9yZWYoYXBwZW5kX3JlZl90b190cmFja2VkX2xpc3QsICZzdGF0ZXMpOwotCQlzaG93X2xpc3QoIiAgVHJhY2tlZCByZW1vdGUgYnJhbmNoJXMiLCAmc3RhdGVzLnRyYWNrZWQsICIiKTsKLQotCQlpZiAoc3RhdGVzLnJlbW90ZS0+cHVzaF9yZWZzcGVjX25yKSB7Ci0JCQlwcmludGYoIiAgTG9jYWwgYnJhbmNoJXMgcHVzaGVkIHdpdGggJ2dpdCBwdXNoJ1xuIiwKLQkJCQlzdGF0ZXMucmVtb3RlLT5wdXNoX3JlZnNwZWNfbnIgPiAxID8KLQkJCQkJImVzIiA6ICIiKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBzdGF0ZXMucmVtb3RlLT5wdXNoX3JlZnNwZWNfbnI7IGkrKykgewotCQkJCXN0cnVjdCByZWZzcGVjICpzcGVjID0gc3RhdGVzLnJlbW90ZS0+cHVzaCArIGk7Ci0JCQkJcHJpbnRmKCIgICAgJXMlcyVzJXNcbiIsCi0JCQkJICAgICAgIHNwZWMtPmZvcmNlID8gIisiIDogIiIsCi0JCQkJICAgICAgIGFiYnJldl9icmFuY2goc3BlYy0+c3JjKSwKLQkJCQkgICAgICAgc3BlYy0+ZHN0ID8gIjoiIDogIiIsCi0JCQkJICAgICAgIHNwZWMtPmRzdCA/IGFiYnJldl9icmFuY2goc3BlYy0+ZHN0KSA6ICIiKTsKLQkJCX0KKwkJCXByaW50ZigiICBIRUFEIGJyYW5jaDogKG5vdCBxdWVyaWVkKVxuIik7CisJCWVsc2UgaWYgKCFzdGF0ZXMuaGVhZHMubnIpCisJCQlwcmludGYoIiAgSEVBRCBicmFuY2g6ICh1bmtub3duKVxuIik7CisJCWVsc2UgaWYgKHN0YXRlcy5oZWFkcy5uciA9PSAxKQorCQkJcHJpbnRmKCIgIEhFQUQgYnJhbmNoOiAlc1xuIiwgc3RhdGVzLmhlYWRzLml0ZW1zWzBdLnN0cmluZyk7CisJCWVsc2UgeworCQkJcHJpbnRmKCIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIgorCQkJICAgICAgICIgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIpOworCQkJZm9yIChpID0gMDsgaSA8IHN0YXRlcy5oZWFkcy5ucjsgaSsrKQorCQkJCXByaW50ZigiICAgICVzXG4iLCBzdGF0ZXMuaGVhZHMuaXRlbXNbaV0uc3RyaW5nKTsKIAkJfQogCi0JCS8qIE5FRURTV09SSzogZnJlZSByZW1vdGUgKi8KLQkJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlcy5uZXcsIDApOwotCQlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGVzLnN0YWxlLCAwKTsKLQkJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlcy50cmFja2VkLCAwKTsKKwkJLyogcmVtb3RlIGJyYW5jaCBpbmZvICovCisJCWluZm8ud2lkdGggPSAwOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdChhZGRfcmVtb3RlX3RvX3Nob3dfaW5mbywgJnN0YXRlcy5uZXcsICZpbmZvKTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3QoYWRkX3JlbW90ZV90b19zaG93X2luZm8sICZzdGF0ZXMudHJhY2tlZCwgJmluZm8pOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdChhZGRfcmVtb3RlX3RvX3Nob3dfaW5mbywgJnN0YXRlcy5zdGFsZSwgJmluZm8pOworCQlpZiAoaW5mby5saXN0LT5ucikKKwkJCXByaW50ZigiICBSZW1vdGUgYnJhbmNoJXM6JXNcbiIsCisJCQkgICAgICAgaW5mby5saXN0LT5uciA+IDEgPyAiZXMiIDogIiIsCisJCQkJbm9fcXVlcnkgPyAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIiA6ICIiKTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3Qoc2hvd19yZW1vdGVfaW5mb19pdGVtLCBpbmZvLmxpc3QsICZpbmZvKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoaW5mby5saXN0LCAwKTsKKworCQkvKiBnaXQgcHVsbCBpbmZvICovCisJCWluZm8ud2lkdGggPSAwOworCQlpbmZvLmFueV9yZWJhc2UgPSAwOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdChhZGRfbG9jYWxfdG9fc2hvd19pbmZvLCAmYnJhbmNoX2xpc3QsICZpbmZvKTsKKwkJaWYgKGluZm8ubGlzdC0+bnIpCisJCQlwcmludGYoIiAgTG9jYWwgYnJhbmNoJXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzpcbiIsCisJCQkgICAgICAgaW5mby5saXN0LT5uciA+IDEgPyAiZXMiIDogIiIpOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdChzaG93X2xvY2FsX2luZm9faXRlbSwgaW5mby5saXN0LCAmaW5mbyk7CisJCXN0cmluZ19saXN0X2NsZWFyKGluZm8ubGlzdCwgMCk7CisKKwkJLyogZ2l0IHB1c2ggaW5mbyAqLworCQlpZiAoc3RhdGVzLnJlbW90ZS0+bWlycm9yKQorCQkJcHJpbnRmKCIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnXG4iKTsKKworCQlpbmZvLndpZHRoID0gaW5mby53aWR0aDIgPSAwOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdChhZGRfcHVzaF90b19zaG93X2luZm8sICZzdGF0ZXMucHVzaCwgJmluZm8pOworCQlxc29ydChpbmZvLmxpc3QtPml0ZW1zLCBpbmZvLmxpc3QtPm5yLAorCQkJc2l6ZW9mKCppbmZvLmxpc3QtPml0ZW1zKSwgY21wX3N0cmluZ193aXRoX3B1c2gpOworCQlpZiAoaW5mby5saXN0LT5ucikKKwkJCXByaW50ZigiICBMb2NhbCByZWYlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6XG4iLAorCQkJCWluZm8ubGlzdC0+bnIgPiAxID8gInMiIDogIiIsCisJCQkJbm9fcXVlcnkgPyAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIiA6ICIiKTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3Qoc2hvd19wdXNoX2luZm9faXRlbSwgaW5mby5saXN0LCAmaW5mbyk7CisJCXN0cmluZ19saXN0X2NsZWFyKGluZm8ubGlzdCwgMCk7CisKKwkJZnJlZV9yZW1vdGVfcmVmX3N0YXRlcygmc3RhdGVzKTsKIAl9CiAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50IHNldF9oZWFkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSwgb3B0X2EgPSAwLCBvcHRfZCA9IDAsIHJlc3VsdCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgYnVmMiA9IFNUUkJVRl9JTklUOworCWNoYXIgKmhlYWRfbmFtZSA9IE5VTEw7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0dST1VQKCJzZXQtaGVhZCBzcGVjaWZpYyBvcHRpb25zIiksCisJCU9QVF9CT09MRUFOKCdhJywgImF1dG8iLCAmb3B0X2EsCisJCQkgICAgInNldCByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQgYWNjb3JkaW5nIHRvIHJlbW90ZSIpLAorCQlPUFRfQk9PTEVBTignZCcsICJkZWxldGUiLCAmb3B0X2QsCisJCQkgICAgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiKSwKKwkJT1BUX0VORCgpCisJfTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwKKwkJCSAgICAgMCk7CisJaWYgKGFyZ2MpCisJCXN0cmJ1Zl9hZGRmKCZidWYsICJyZWZzL3JlbW90ZXMvJXMvSEVBRCIsIGFyZ3ZbMF0pOworCisJaWYgKCFvcHRfYSAmJiAhb3B0X2QgJiYgYXJnYyA9PSAyKSB7CisJCWhlYWRfbmFtZSA9IHhzdHJkdXAoYXJndlsxXSk7CisJfSBlbHNlIGlmIChvcHRfYSAmJiAhb3B0X2QgJiYgYXJnYyA9PSAxKSB7CisJCXN0cnVjdCByZWZfc3RhdGVzIHN0YXRlczsKKwkJbWVtc2V0KCZzdGF0ZXMsIDAsIHNpemVvZihzdGF0ZXMpKTsKKwkJZ2V0X3JlbW90ZV9yZWZfc3RhdGVzKGFyZ3ZbMF0sICZzdGF0ZXMsIEdFVF9IRUFEX05BTUVTKTsKKwkJaWYgKCFzdGF0ZXMuaGVhZHMubnIpCisJCQlyZXN1bHQgfD0gZXJyb3IoIkNhbm5vdCBkZXRlcm1pbmUgcmVtb3RlIEhFQUQiKTsKKwkJZWxzZSBpZiAoc3RhdGVzLmhlYWRzLm5yID4gMSkgeworCQkJcmVzdWx0IHw9IGVycm9yKCJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gIgorCQkJCQkiUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIpOworCQkJZm9yIChpID0gMDsgaSA8IHN0YXRlcy5oZWFkcy5ucjsgaSsrKQorCQkJCWZwcmludGYoc3RkZXJyLCAiICBnaXQgcmVtb3RlIHNldC1oZWFkICVzICVzXG4iLAorCQkJCQlhcmd2WzBdLCBzdGF0ZXMuaGVhZHMuaXRlbXNbaV0uc3RyaW5nKTsKKwkJfSBlbHNlCisJCQloZWFkX25hbWUgPSB4c3RyZHVwKHN0YXRlcy5oZWFkcy5pdGVtc1swXS5zdHJpbmcpOworCQlmcmVlX3JlbW90ZV9yZWZfc3RhdGVzKCZzdGF0ZXMpOworCX0gZWxzZSBpZiAob3B0X2QgJiYgIW9wdF9hICYmIGFyZ2MgPT0gMSkgeworCQlpZiAoZGVsZXRlX3JlZihidWYuYnVmLCBOVUxMLCBSRUZfTk9ERVJFRikpCisJCQlyZXN1bHQgfD0gZXJyb3IoIkNvdWxkIG5vdCBkZWxldGUgJXMiLCBidWYuYnVmKTsKKwl9IGVsc2UKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX3VzYWdlLCBvcHRpb25zKTsKKworCWlmIChoZWFkX25hbWUpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZjIsICJyZWZzL3JlbW90ZXMvJXMvJXMiLCBhcmd2WzBdLCBoZWFkX25hbWUpOworCQkvKiBtYWtlIHN1cmUgaXQncyB2YWxpZCAqLworCQlpZiAoIXJlc29sdmVfcmVmKGJ1ZjIuYnVmLCBzaGExLCAxLCBOVUxMKSkKKwkJCXJlc3VsdCB8PSBlcnJvcigiTm90IGEgdmFsaWQgcmVmOiAlcyIsIGJ1ZjIuYnVmKTsKKwkJZWxzZSBpZiAoY3JlYXRlX3N5bXJlZihidWYuYnVmLCBidWYyLmJ1ZiwgInJlbW90ZSBzZXQtaGVhZCIpKQorCQkJcmVzdWx0IHw9IGVycm9yKCJDb3VsZCBub3Qgc2V0dXAgJXMiLCBidWYuYnVmKTsKKwkJaWYgKG9wdF9hKQorCQkJcHJpbnRmKCIlcy9IRUFEIHNldCB0byAlc1xuIiwgYXJndlswXSwgaGVhZF9uYW1lKTsKKwkJZnJlZShoZWFkX25hbWUpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgaW50IHBydW5lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlpbnQgZHJ5X3J1biA9IDAsIHJlc3VsdCA9IDA7CkBAIC03NTUsNDMgKzExNDIsNTAgQEAKIAkJT1BUX19EUllfUlVOKCZkcnlfcnVuKSwKIAkJT1BUX0VORCgpCiAJfTsKLQlzdHJ1Y3QgcmVmX3N0YXRlcyBzdGF0ZXM7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwgMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfdXNhZ2UsCisJCQkgICAgIDApOwogCiAJaWYgKGFyZ2MgPCAxKQogCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfdXNhZ2UsIG9wdGlvbnMpOwogCisJZm9yICg7IGFyZ2M7IGFyZ2MtLSwgYXJndisrKQorCQlyZXN1bHQgfD0gcHJ1bmVfcmVtb3RlKCphcmd2LCBkcnlfcnVuKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgcHJ1bmVfcmVtb3RlKGNvbnN0IGNoYXIgKnJlbW90ZSwgaW50IGRyeV9ydW4pCit7CisJaW50IHJlc3VsdCA9IDAsIGk7CisJc3RydWN0IHJlZl9zdGF0ZXMgc3RhdGVzOworCWNvbnN0IGNoYXIgKmRhbmdsaW5nX21zZyA9IGRyeV9ydW4KKwkJPyAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nIVxuIgorCQk6ICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyFcbiI7CisKIAltZW1zZXQoJnN0YXRlcywgMCwgc2l6ZW9mKHN0YXRlcykpOwotCWZvciAoOyBhcmdjOyBhcmdjLS0sIGFyZ3YrKykgewotCQlpbnQgaTsKKwlnZXRfcmVtb3RlX3JlZl9zdGF0ZXMocmVtb3RlLCAmc3RhdGVzLCBHRVRfUkVGX1NUQVRFUyk7CiAKLQkJZ2V0X3JlbW90ZV9yZWZfc3RhdGVzKCphcmd2LCAmc3RhdGVzLCAxKTsKLQotCQlpZiAoc3RhdGVzLnN0YWxlLm5yKSB7Ci0JCQlwcmludGYoIlBydW5pbmcgJXNcbiIsICphcmd2KTsKLQkJCXByaW50ZigiVVJMOiAlc1xuIiwKLQkJCSAgICAgICBzdGF0ZXMucmVtb3RlLT51cmxfbnIKLQkJCSAgICAgICA/IHN0YXRlcy5yZW1vdGUtPnVybFswXQotCQkJICAgICAgIDogIihubyBVUkwpIik7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgc3RhdGVzLnN0YWxlLm5yOyBpKyspIHsKLQkJCWNvbnN0IGNoYXIgKnJlZm5hbWUgPSBzdGF0ZXMuc3RhbGUuaXRlbXNbaV0udXRpbDsKLQotCQkJaWYgKCFkcnlfcnVuKQotCQkJCXJlc3VsdCB8PSBkZWxldGVfcmVmKHJlZm5hbWUsIE5VTEwsIDApOwotCi0JCQlwcmludGYoIiAqIFslc10gJXNcbiIsIGRyeV9ydW4gPyAid291bGQgcHJ1bmUiIDogInBydW5lZCIsCi0JCQkgICAgICAgYWJicmV2X3JlZihyZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIpKTsKLQkJfQotCi0JCS8qIE5FRURTV09SSzogZnJlZSByZW1vdGUgKi8KLQkJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlcy5uZXcsIDApOwotCQlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGVzLnN0YWxlLCAwKTsKLQkJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlcy50cmFja2VkLCAwKTsKKwlpZiAoc3RhdGVzLnN0YWxlLm5yKSB7CisJCXByaW50ZigiUHJ1bmluZyAlc1xuIiwgcmVtb3RlKTsKKwkJcHJpbnRmKCJVUkw6ICVzXG4iLAorCQkgICAgICAgc3RhdGVzLnJlbW90ZS0+dXJsX25yCisJCSAgICAgICA/IHN0YXRlcy5yZW1vdGUtPnVybFswXQorCQkgICAgICAgOiAiKG5vIFVSTCkiKTsKIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgc3RhdGVzLnN0YWxlLm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcmVmbmFtZSA9IHN0YXRlcy5zdGFsZS5pdGVtc1tpXS51dGlsOworCisJCWlmICghZHJ5X3J1bikKKwkJCXJlc3VsdCB8PSBkZWxldGVfcmVmKHJlZm5hbWUsIE5VTEwsIDApOworCisJCXByaW50ZigiICogWyVzXSAlc1xuIiwgZHJ5X3J1biA/ICJ3b3VsZCBwcnVuZSIgOiAicHJ1bmVkIiwKKwkJICAgICAgIGFiYnJldl9yZWYocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSk7CisJCXdhcm5fZGFuZ2xpbmdfc3ltcmVmKGRhbmdsaW5nX21zZywgcmVmbmFtZSk7CisJfQorCisJZnJlZV9yZW1vdGVfcmVmX3N0YXRlcygmc3RhdGVzKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC04MDMsMjEgKzExOTcsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHJlbW90ZV9ncm91cCB7CitzdGF0aWMgc3RydWN0IHJlbW90ZV9ncm91cCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3Q7CiB9IHJlbW90ZV9ncm91cDsKIAotc3RhdGljIGludCBnZXRfcmVtb3RlX2dyb3VwKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQorc3RhdGljIGludCBnZXRfcmVtb3RlX2dyb3VwKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKm51bV9oaXRzKQogewogCWlmICghcHJlZml4Y21wKGtleSwgInJlbW90ZXMuIikgJiYKIAkJCSFzdHJjbXAoa2V5ICsgOCwgcmVtb3RlX2dyb3VwLm5hbWUpKSB7CiAJCS8qIHNwbGl0IGxpc3QgYnkgd2hpdGUgc3BhY2UgKi8KIAkJaW50IHNwYWNlID0gc3RyY3Nwbih2YWx1ZSwgIiBcdFxuIik7CiAJCXdoaWxlICgqdmFsdWUpIHsKLQkJCWlmIChzcGFjZSA+IDEpCisJCQlpZiAoc3BhY2UgPiAxKSB7CiAJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKHhzdHJuZHVwKHZhbHVlLCBzcGFjZSksCiAJCQkJCQlyZW1vdGVfZ3JvdXAubGlzdCk7CisJCQkJKysqKChpbnQgKiludW1faGl0cyk7CisJCQl9CiAJCQl2YWx1ZSArPSBzcGFjZSArICh2YWx1ZVtzcGFjZV0gIT0gJ1wwJyk7CiAJCQlzcGFjZSA9IHN0cmNzcG4odmFsdWUsICIgXHRcbiIpOwogCQl9CkBAIC04MjgsMTAgKzEyMjQsMTggQEAKIAogc3RhdGljIGludCB1cGRhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewotCWludCBpLCByZXN1bHQgPSAwOworCWludCBpLCByZXN1bHQgPSAwLCBwcnVuZSA9IDA7CiAJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSB7IE5VTEwsIDAsIDAsIDAgfTsKIAlzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9hcmd2W10gPSB7IE5VTEwsICJkZWZhdWx0IiwgTlVMTCB9OworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfR1JPVVAoInVwZGF0ZSBzcGVjaWZpYyBvcHRpb25zIiksCisJCU9QVF9CT09MRUFOKCdwJywgInBydW5lIiwgJnBydW5lLAorCQkJICAgICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIiksCisJCU9QVF9FTkQoKQorCX07CiAKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjApOwogCWlmIChhcmdjIDwgMikgewogCQlhcmdjID0gMjsKIAkJYXJndiA9IGRlZmF1bHRfYXJndjsKQEAgLTgzOSwxNSArMTI0MywyOCBAQAogCiAJcmVtb3RlX2dyb3VwLmxpc3QgPSAmbGlzdDsKIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWludCBncm91cHNfZm91bmQgPSAwOwogCQlyZW1vdGVfZ3JvdXAubmFtZSA9IGFyZ3ZbaV07Ci0JCXJlc3VsdCA9IGdpdF9jb25maWcoZ2V0X3JlbW90ZV9ncm91cCwgTlVMTCk7CisJCXJlc3VsdCA9IGdpdF9jb25maWcoZ2V0X3JlbW90ZV9ncm91cCwgJmdyb3Vwc19mb3VuZCk7CisJCWlmICghZ3JvdXBzX2ZvdW5kICYmIChpICE9IDEgfHwgc3RyY21wKGFyZ3ZbMV0sICJkZWZhdWx0IikpKSB7CisJCQlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJCQlpZiAoIXJlbW90ZV9pc19jb25maWd1cmVkKGFyZ3ZbaV0pKQorCQkJCWRpZSgiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIsCisJCQkJICAgIGFyZ3ZbaV0pOworCQkJcmVtb3RlID0gcmVtb3RlX2dldChhcmd2W2ldKTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZChyZW1vdGUtPm5hbWUsIHJlbW90ZV9ncm91cC5saXN0KTsKKwkJfQogCX0KIAogCWlmICghcmVzdWx0ICYmICFsaXN0Lm5yICAmJiBhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiZGVmYXVsdCIpKQogCQlyZXN1bHQgPSBmb3JfZWFjaF9yZW1vdGUoZ2V0X29uZV9yZW1vdGVfZm9yX3VwZGF0ZSwgJmxpc3QpOwogCi0JZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykKLQkJcmVzdWx0IHw9IGZldGNoX3JlbW90ZShsaXN0Lml0ZW1zW2ldLnN0cmluZyk7CisJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykgeworCQlpbnQgZXJyID0gZmV0Y2hfcmVtb3RlKGxpc3QuaXRlbXNbaV0uc3RyaW5nKTsKKwkJcmVzdWx0IHw9IGVycjsKKwkJaWYgKCFlcnIgJiYgcHJ1bmUpCisJCQlyZXN1bHQgfD0gcHJ1bmVfcmVtb3RlKGxpc3QuaXRlbXNbaV0uc3RyaW5nLCAwKTsKKwl9CiAKIAkvKiBhbGwgbmFtZXMgd2VyZSBzdHJkdXAoKWVkIG9yIHN0cm5kdXAoKWVkICovCiAJbGlzdC5zdHJkdXBfc3RyaW5ncyA9IDE7CkBAIC04NTksMTQgKzEyNzYsMjkgQEAKIHN0YXRpYyBpbnQgZ2V0X29uZV9lbnRyeShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IHN0cmluZ19saXN0ICpsaXN0ID0gcHJpdjsKKwlzdHJ1Y3Qgc3RyYnVmIHVybF9idWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICoqdXJsOworCWludCBpLCB1cmxfbnI7CiAKIAlpZiAocmVtb3RlLT51cmxfbnIgPiAwKSB7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCByZW1vdGUtPnVybF9ucjsgaSsrKQotCQkJc3RyaW5nX2xpc3RfYXBwZW5kKHJlbW90ZS0+bmFtZSwgbGlzdCktPnV0aWwgPSAodm9pZCAqKXJlbW90ZS0+dXJsW2ldOworCQlzdHJidWZfYWRkZigmdXJsX2J1ZiwgIiVzIChmZXRjaCkiLCByZW1vdGUtPnVybFswXSk7CisJCXN0cmluZ19saXN0X2FwcGVuZChyZW1vdGUtPm5hbWUsIGxpc3QpLT51dGlsID0KKwkJCQlzdHJidWZfZGV0YWNoKCZ1cmxfYnVmLCBOVUxMKTsKIAl9IGVsc2UKIAkJc3RyaW5nX2xpc3RfYXBwZW5kKHJlbW90ZS0+bmFtZSwgbGlzdCktPnV0aWwgPSBOVUxMOworCWlmIChyZW1vdGUtPnB1c2h1cmxfbnIpIHsKKwkJdXJsID0gcmVtb3RlLT5wdXNodXJsOworCQl1cmxfbnIgPSByZW1vdGUtPnB1c2h1cmxfbnI7CisJfSBlbHNlIHsKKwkJdXJsID0gcmVtb3RlLT51cmw7CisJCXVybF9uciA9IHJlbW90ZS0+dXJsX25yOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgdXJsX25yOyBpKyspCisJeworCQlzdHJidWZfYWRkZigmdXJsX2J1ZiwgIiVzIChwdXNoKSIsIHVybFtpXSk7CisJCXN0cmluZ19saXN0X2FwcGVuZChyZW1vdGUtPm5hbWUsIGxpc3QpLT51dGlsID0KKwkJCQlzdHJidWZfZGV0YWNoKCZ1cmxfYnVmLCBOVUxMKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg3NCw3ICsxMzA2LDEwIEBACiBzdGF0aWMgaW50IHNob3dfYWxsKHZvaWQpCiB7CiAJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSB7IE5VTEwsIDAsIDAgfTsKLQlpbnQgcmVzdWx0ID0gZm9yX2VhY2hfcmVtb3RlKGdldF9vbmVfZW50cnksICZsaXN0KTsKKwlpbnQgcmVzdWx0OworCisJbGlzdC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJcmVzdWx0ID0gZm9yX2VhY2hfcmVtb3RlKGdldF9vbmVfZW50cnksICZsaXN0KTsKIAogCWlmICghcmVzdWx0KSB7CiAJCWludCBpOwpAQCAtODkyLDYgKzEzMjcsNyBAQAogCQkJfQogCQl9CiAJfQorCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAxKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC05MDMsNyArMTMzOSw3IEBACiAJfTsKIAlpbnQgcmVzdWx0OwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfdXNhZ2UsCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwKIAkJUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CiAKIAlpZiAoYXJnYyA8IDEpCkBAIC05MTQsNiArMTM1MCw4IEBACiAJCXJlc3VsdCA9IG12KGFyZ2MsIGFyZ3YpOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInJtIikpCiAJCXJlc3VsdCA9IHJtKGFyZ2MsIGFyZ3YpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInNldC1oZWFkIikpCisJCXJlc3VsdCA9IHNldF9oZWFkKGFyZ2MsIGFyZ3YpOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInNob3ciKSkKIAkJcmVzdWx0ID0gc2hvdyhhcmdjLCBhcmd2KTsKIAllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJwcnVuZSIpKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZXJlcmUuYyBiL2J1aWx0aW4tcmVyZXJlLmMKaW5kZXggZDRkZWM2Yi4uYWRmYjdiNSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1yZXJlcmUuYworKysgYi9idWlsdGluLXJlcmVyZS5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgImJ1aWx0aW4uaCIKICNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgogI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCiAjaW5jbHVkZSAicmVyZXJlLmgiCiAjaW5jbHVkZSAieGRpZmYveGRpZmYuaCIKQEAgLTEyLDI4ICsxMywxNyBAQAogc3RhdGljIGludCBjdXRvZmZfbm9yZXNvbHZlID0gMTU7CiBzdGF0aWMgaW50IGN1dG9mZl9yZXNvbHZlID0gNjA7CiAKLXN0YXRpYyBjb25zdCBjaGFyICpycl9wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZpbGUpCi17Ci0JcmV0dXJuIGdpdF9wYXRoKCJyci1jYWNoZS8lcy8lcyIsIG5hbWUsIGZpbGUpOwotfQotCiBzdGF0aWMgdGltZV90IHJlcmVyZV9jcmVhdGVkX2F0KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHN0YXQgc3Q7Ci0JcmV0dXJuIHN0YXQocnJfcGF0aChuYW1lLCAicHJlaW1hZ2UiKSwgJnN0KSA/ICh0aW1lX3QpIDAgOiBzdC5zdF9tdGltZTsKLX0KLQotc3RhdGljIGludCBoYXNfcmVzb2x1dGlvbihjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBzdGF0IHN0OwotCXJldHVybiAhc3RhdChycl9wYXRoKG5hbWUsICJwb3N0aW1hZ2UiKSwgJnN0KTsKKwlyZXR1cm4gc3RhdChyZXJlcmVfcGF0aChuYW1lLCAicHJlaW1hZ2UiKSwgJnN0KSA/ICh0aW1lX3QpIDAgOiBzdC5zdF9tdGltZTsKIH0KIAogc3RhdGljIHZvaWQgdW5saW5rX3JyX2l0ZW0oY29uc3QgY2hhciAqbmFtZSkKIHsKLQl1bmxpbmsocnJfcGF0aChuYW1lLCAidGhpc2ltYWdlIikpOwotCXVubGluayhycl9wYXRoKG5hbWUsICJwcmVpbWFnZSIpKTsKLQl1bmxpbmsocnJfcGF0aChuYW1lLCAicG9zdGltYWdlIikpOworCXVubGluayhyZXJlcmVfcGF0aChuYW1lLCAidGhpc2ltYWdlIikpOworCXVubGluayhyZXJlcmVfcGF0aChuYW1lLCAicHJlaW1hZ2UiKSk7CisJdW5saW5rKHJlcmVyZV9wYXRoKG5hbWUsICJwb3N0aW1hZ2UiKSk7CiAJcm1kaXIoZ2l0X3BhdGgoInJyLWNhY2hlLyVzIiwgbmFtZSkpOwogfQogCkBAIC01OSwxNyArNDksMTUgQEAKIAlnaXRfY29uZmlnKGdpdF9yZXJlcmVfZ2NfY29uZmlnLCBOVUxMKTsKIAlkaXIgPSBvcGVuZGlyKGdpdF9wYXRoKCJyci1jYWNoZSIpKTsKIAl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpKSB7Ci0JCWNvbnN0IGNoYXIgKm5hbWUgPSBlLT5kX25hbWU7Ci0JCWlmIChuYW1lWzBdID09ICcuJyAmJgotCQkgICAgKG5hbWVbMV0gPT0gJ1wwJyB8fCAobmFtZVsxXSA9PSAnLicgJiYgbmFtZVsyXSA9PSAnXDAnKSkpCisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGUtPmRfbmFtZSkpCiAJCQljb250aW51ZTsKLQkJdGhlbiA9IHJlcmVyZV9jcmVhdGVkX2F0KG5hbWUpOworCQl0aGVuID0gcmVyZXJlX2NyZWF0ZWRfYXQoZS0+ZF9uYW1lKTsKIAkJaWYgKCF0aGVuKQogCQkJY29udGludWU7Ci0JCWN1dG9mZiA9IChoYXNfcmVzb2x1dGlvbihuYW1lKQorCQljdXRvZmYgPSAoaGFzX3JlcmVyZV9yZXNvbHV0aW9uKGUtPmRfbmFtZSkKIAkJCSAgPyBjdXRvZmZfcmVzb2x2ZSA6IGN1dG9mZl9ub3Jlc29sdmUpOwogCQlpZiAodGhlbiA8IG5vdyAtIGN1dG9mZiAqIDg2NDAwKQotCQkJc3RyaW5nX2xpc3RfYXBwZW5kKG5hbWUsICZ0b19yZW1vdmUpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKGUtPmRfbmFtZSwgJnRvX3JlbW92ZSk7CiAJfQogCWZvciAoaSA9IDA7IGkgPCB0b19yZW1vdmUubnI7IGkrKykKIAkJdW5saW5rX3JyX2l0ZW0odG9fcmVtb3ZlLml0ZW1zW2ldLnN0cmluZyk7CkBAIC0xMjUsMTAgKzExMywxMCBAQAogCWlmICghc3RyY21wKGFyZ3ZbMV0sICJjbGVhciIpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBtZXJnZV9yci5ucjsgaSsrKSB7CiAJCQljb25zdCBjaGFyICpuYW1lID0gKGNvbnN0IGNoYXIgKiltZXJnZV9yci5pdGVtc1tpXS51dGlsOwotCQkJaWYgKCFoYXNfcmVzb2x1dGlvbihuYW1lKSkKKwkJCWlmICghaGFzX3JlcmVyZV9yZXNvbHV0aW9uKG5hbWUpKQogCQkJCXVubGlua19ycl9pdGVtKG5hbWUpOwogCQl9Ci0JCXVubGluayhnaXRfcGF0aCgicnItY2FjaGUvTUVSR0VfUlIiKSk7CisJCXVubGlua19vcl93YXJuKGdpdF9wYXRoKCJyci1jYWNoZS9NRVJHRV9SUiIpKTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImdjIikpCiAJCWdhcmJhZ2VfY29sbGVjdCgmbWVyZ2VfcnIpOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInN0YXR1cyIpKQpAQCAtMTM4LDcgKzEyNiw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBtZXJnZV9yci5ucjsgaSsrKSB7CiAJCQljb25zdCBjaGFyICpwYXRoID0gbWVyZ2VfcnIuaXRlbXNbaV0uc3RyaW5nOwogCQkJY29uc3QgY2hhciAqbmFtZSA9IChjb25zdCBjaGFyICopbWVyZ2VfcnIuaXRlbXNbaV0udXRpbDsKLQkJCWRpZmZfdHdvKHJyX3BhdGgobmFtZSwgInByZWltYWdlIiksIHBhdGgsIHBhdGgsIHBhdGgpOworCQkJZGlmZl90d28ocmVyZXJlX3BhdGgobmFtZSwgInByZWltYWdlIiksIHBhdGgsIHBhdGgsIHBhdGgpOwogCQl9CiAJZWxzZQogCQl1c2FnZShnaXRfcmVyZXJlX3VzYWdlKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmVzZXQuYyBiL2J1aWx0aW4tcmVzZXQuYwppbmRleCA5NTE0Yjc3Li41ZmExNzg5IDEwMDY0NAotLS0gYS9idWlsdGluLXJlc2V0LmMKKysrIGIvYnVpbHRpbi1yZXNldC5jCkBAIC0yMCwxMSArMjAsMTQgQEAKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3Jlc2V0X3VzYWdlW10gPSB7Ci0JImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZF0gWy1xXSBbPGNvbW1pdD5dIiwKKwkiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZV0gWy1xXSBbPGNvbW1pdD5dIiwKIAkiZ2l0IHJlc2V0IFstLW1peGVkXSA8Y29tbWl0PiBbLS1dIDxwYXRocz4uLi4iLAogCU5VTEwKIH07CiAKK2VudW0gcmVzZXRfdHlwZSB7IE1JWEVELCBTT0ZULCBIQVJELCBNRVJHRSwgTk9ORSB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnJlc2V0X3R5cGVfbmFtZXNbXSA9IHsgIm1peGVkIiwgInNvZnQiLCAiaGFyZCIsICJtZXJnZSIsIE5VTEwgfTsKKwogc3RhdGljIGNoYXIgKmFyZ3NfdG9fc3RyKGNvbnN0IGNoYXIgKiphcmd2KQogewogCWNoYXIgKmJ1ZiA9IE5VTEw7CkBAIC00OSw3ICs1Miw3IEBACiAJcmV0dXJuICFhY2Nlc3MoZ2l0X3BhdGgoIk1FUkdFX0hFQUQiKSwgRl9PSyk7CiB9CiAKLXN0YXRpYyBpbnQgcmVzZXRfaW5kZXhfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgaXNfaGFyZF9yZXNldCwgaW50IHF1aWV0KQorc3RhdGljIGludCByZXNldF9pbmRleF9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCByZXNldF90eXBlLCBpbnQgcXVpZXQpCiB7CiAJaW50IGkgPSAwOwogCWNvbnN0IGNoYXIgKmFyZ3NbNl07CkBAIC01Nyw5ICs2MCwxNyBAQAogCWFyZ3NbaSsrXSA9ICJyZWFkLXRyZWUiOwogCWlmICghcXVpZXQpCiAJCWFyZ3NbaSsrXSA9ICItdiI7Ci0JYXJnc1tpKytdID0gIi0tcmVzZXQiOwotCWlmIChpc19oYXJkX3Jlc2V0KQorCXN3aXRjaCAocmVzZXRfdHlwZSkgeworCWNhc2UgTUVSR0U6CiAJCWFyZ3NbaSsrXSA9ICItdSI7CisJCWFyZ3NbaSsrXSA9ICItbSI7CisJCWJyZWFrOworCWNhc2UgSEFSRDoKKwkJYXJnc1tpKytdID0gIi11IjsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlhcmdzW2krK10gPSAiLS1yZXNldCI7CisJfQogCWFyZ3NbaSsrXSA9IHNoYTFfdG9faGV4KHNoYTEpOwogCWFyZ3NbaV0gPSBOVUxMOwogCkBAIC0xNjksOSArMTgwLDYgQEAKIAkJd2FybmluZygiUmVmbG9nIGFjdGlvbiBtZXNzYWdlIHRvbyBsb25nOiAlLipzLi4uIiwgNTAsIGJ1Zik7CiB9CiAKLWVudW0gcmVzZXRfdHlwZSB7IE1JWEVELCBTT0ZULCBIQVJELCBOT05FIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqcmVzZXRfdHlwZV9uYW1lc1tdID0geyAibWl4ZWQiLCAic29mdCIsICJoYXJkIiwgTlVMTCB9OwotCiBpbnQgY21kX3Jlc2V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCWludCBpID0gMCwgcmVzZXRfdHlwZSA9IE5PTkUsIHVwZGF0ZV9yZWZfc3RhdHVzID0gMCwgcXVpZXQgPSAwOwpAQCAtMTg2LDYgKzE5NCw4IEBACiAJCU9QVF9TRVRfSU5UKDAsICJzb2Z0IiwgJnJlc2V0X3R5cGUsICJyZXNldCBvbmx5IEhFQUQiLCBTT0ZUKSwKIAkJT1BUX1NFVF9JTlQoMCwgImhhcmQiLCAmcmVzZXRfdHlwZSwKIAkJCQkicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIsIEhBUkQpLAorCQlPUFRfU0VUX0lOVCgwLCAibWVyZ2UiLCAmcmVzZXRfdHlwZSwKKwkJCQkicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIsIE1FUkdFKSwKIAkJT1BUX0JPT0xFQU4oJ3EnLCBOVUxMLCAmcXVpZXQsCiAJCQkJImRpc2FibGUgc2hvd2luZyBuZXcgSEVBRCBpbiBoYXJkIHJlc2V0IGFuZCBwcm9ncmVzcyBtZXNzYWdlIiksCiAJCU9QVF9FTkQoKQpAQCAtMTkzLDcgKzIwMyw3IEBACiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBnaXRfcmVzZXRfdXNhZ2UsCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBnaXRfcmVzZXRfdXNhZ2UsCiAJCQkJCQlQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CiAJcmVmbG9nX2FjdGlvbiA9IGFyZ3NfdG9fc3RyKGFyZ3YpOwogCXNldGVudigiR0lUX1JFRkxPR19BQ1RJT04iLCByZWZsb2dfYWN0aW9uLCAwKTsKQEAgLTIxOCw3ICsyMjgsNyBAQAogCQl9CiAJCS8qCiAJCSAqIE90aGVyd2lzZSwgYXJndltpXSBjb3VsZCBiZSBlaXRoZXIgPHJldj4gb3IgPHBhdGhzPiBhbmQKLQkJICogaGFzIHRvIGJlIHVuYW1iaWdvdXMuCisJCSAqIGhhcyB0byBiZSB1bmFtYmlndW91cy4KIAkJICovCiAJCWVsc2UgaWYgKCFnZXRfc2hhMShhcmd2W2ldLCBzaGExKSkgewogCQkJLyoKQEAgLTI2Niw3ICsyNzYsNyBAQAogCQlpZiAoaXNfbWVyZ2UoKSB8fCByZWFkX2NhY2hlKCkgPCAwIHx8IHVubWVyZ2VkX2NhY2hlKCkpCiAJCQlkaWUoIkNhbm5vdCBkbyBhIHNvZnQgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIpOwogCX0KLQllbHNlIGlmIChyZXNldF9pbmRleF9maWxlKHNoYTEsIChyZXNldF90eXBlID09IEhBUkQpLCBxdWlldCkpCisJZWxzZSBpZiAocmVzZXRfaW5kZXhfZmlsZShzaGExLCByZXNldF90eXBlLCBxdWlldCkpCiAJCWRpZSgiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iLCByZXYpOwogCiAJLyogQW55IHJlc2V0cyB1cGRhdGUgSEVBRCB0byB0aGUgaGVhZCBiZWluZyBzd2l0Y2hlZCB0bywKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmV2LWxpc3QuYyBiL2J1aWx0aW4tcmV2LWxpc3QuYwppbmRleCA0MzZhZmE0Li40YmExYzEyIDEwMDY0NAotLS0gYS9idWlsdGluLXJldi1saXN0LmMKKysrIGIvYnVpbHRpbi1yZXYtbGlzdC5jCkBAIC0xLDIwICsxLDEyIEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKLSNpbmNsdWRlICJyZWZzLmgiCi0jaW5jbHVkZSAidGFnLmgiCiAjaW5jbHVkZSAiY29tbWl0LmgiCi0jaW5jbHVkZSAidHJlZS5oIgotI2luY2x1ZGUgImJsb2IuaCIKLSNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKICNpbmNsdWRlICJkaWZmLmgiCiAjaW5jbHVkZSAicmV2aXNpb24uaCIKICNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKICNpbmNsdWRlICJidWlsdGluLmgiCiAjaW5jbHVkZSAibG9nLXRyZWUuaCIKICNpbmNsdWRlICJncmFwaC5oIgotCi0vKiBiaXRzICMwLTE1IGluIHJldmlzaW9uLmggKi8KLQotI2RlZmluZSBDT1VOVEVECQkoMXU8PDE2KQorI2luY2x1ZGUgImJpc2VjdC5oIgogCiBzdGF0aWMgY29uc3QgY2hhciByZXZfbGlzdF91c2FnZVtdID0KICJnaXQgcmV2LWxpc3QgW09QVElPTl0gPGNvbW1pdC1pZD4uLi4gWyAtLSBwYXRocy4uLiBdXG4iCkBAIC01MCw3MyArNDIsNjkgQEAKICIgICAgLS1iaXNlY3QtYWxsIgogOwogCi1zdGF0aWMgc3RydWN0IHJldl9pbmZvIHJldnM7Ci0KLXN0YXRpYyBpbnQgYmlzZWN0X2xpc3Q7Ci1zdGF0aWMgaW50IHNob3dfdGltZXN0YW1wOwotc3RhdGljIGludCBoZHJfdGVybWluYXRpb247Ci1zdGF0aWMgY29uc3QgY2hhciAqaGVhZGVyX3ByZWZpeDsKLQotc3RhdGljIHZvaWQgZmluaXNoX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwotc3RhdGljIHZvaWQgc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQorc3RhdGljIHZvaWQgZmluaXNoX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpOworc3RhdGljIHZvaWQgc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhKQogewotCWdyYXBoX3Nob3dfY29tbWl0KHJldnMuZ3JhcGgpOworCXN0cnVjdCByZXZfbGlzdF9pbmZvICppbmZvID0gZGF0YTsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSBpbmZvLT5yZXZzOwogCi0JaWYgKHNob3dfdGltZXN0YW1wKQorCWdyYXBoX3Nob3dfY29tbWl0KHJldnMtPmdyYXBoKTsKKworCWlmIChpbmZvLT5zaG93X3RpbWVzdGFtcCkKIAkJcHJpbnRmKCIlbHUgIiwgY29tbWl0LT5kYXRlKTsKLQlpZiAoaGVhZGVyX3ByZWZpeCkKLQkJZnB1dHMoaGVhZGVyX3ByZWZpeCwgc3Rkb3V0KTsKKwlpZiAoaW5mby0+aGVhZGVyX3ByZWZpeCkKKwkJZnB1dHMoaW5mby0+aGVhZGVyX3ByZWZpeCwgc3Rkb3V0KTsKIAotCWlmICghcmV2cy5ncmFwaCkgeworCWlmICghcmV2cy0+Z3JhcGgpIHsKIAkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQk9VTkRBUlkpCiAJCQlwdXRjaGFyKCctJyk7CiAJCWVsc2UgaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKIAkJCXB1dGNoYXIoJ14nKTsKLQkJZWxzZSBpZiAocmV2cy5sZWZ0X3JpZ2h0KSB7CisJCWVsc2UgaWYgKHJldnMtPmxlZnRfcmlnaHQpIHsKIAkJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKQogCQkJCXB1dGNoYXIoJzwnKTsKIAkJCWVsc2UKIAkJCQlwdXRjaGFyKCc+Jyk7CiAJCX0KIAl9Ci0JaWYgKHJldnMuYWJicmV2X2NvbW1pdCAmJiByZXZzLmFiYnJldikKLQkJZnB1dHMoZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIHJldnMuYWJicmV2KSwKKwlpZiAocmV2cy0+YWJicmV2X2NvbW1pdCAmJiByZXZzLT5hYmJyZXYpCisJCWZwdXRzKGZpbmRfdW5pcXVlX2FiYnJldihjb21taXQtPm9iamVjdC5zaGExLCByZXZzLT5hYmJyZXYpLAogCQkgICAgICBzdGRvdXQpOwogCWVsc2UKIAkJZnB1dHMoc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSksIHN0ZG91dCk7Ci0JaWYgKHJldnMucHJpbnRfcGFyZW50cykgeworCWlmIChyZXZzLT5wcmludF9wYXJlbnRzKSB7CiAJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKIAkJd2hpbGUgKHBhcmVudHMpIHsKIAkJCXByaW50ZigiICVzIiwgc2hhMV90b19oZXgocGFyZW50cy0+aXRlbS0+b2JqZWN0LnNoYTEpKTsKIAkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OwogCQl9CiAJfQotCWlmIChyZXZzLmNoaWxkcmVuLm5hbWUpIHsKKwlpZiAocmV2cy0+Y2hpbGRyZW4ubmFtZSkgewogCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNoaWxkcmVuOwogCi0JCWNoaWxkcmVuID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMuY2hpbGRyZW4sICZjb21taXQtPm9iamVjdCk7CisJCWNoaWxkcmVuID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPmNoaWxkcmVuLCAmY29tbWl0LT5vYmplY3QpOwogCQl3aGlsZSAoY2hpbGRyZW4pIHsKIAkJCXByaW50ZigiICVzIiwgc2hhMV90b19oZXgoY2hpbGRyZW4tPml0ZW0tPm9iamVjdC5zaGExKSk7CiAJCQljaGlsZHJlbiA9IGNoaWxkcmVuLT5uZXh0OwogCQl9CiAJfQotCXNob3dfZGVjb3JhdGlvbnMoJnJldnMsIGNvbW1pdCk7Ci0JaWYgKHJldnMuY29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKQorCXNob3dfZGVjb3JhdGlvbnMocmV2cywgY29tbWl0KTsKKwlpZiAocmV2cy0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKQogCQlwdXRjaGFyKCcgJyk7CiAJZWxzZQogCQlwdXRjaGFyKCdcbicpOwogCi0JaWYgKHJldnMudmVyYm9zZV9oZWFkZXIgJiYgY29tbWl0LT5idWZmZXIpIHsKKwlpZiAocmV2cy0+dmVyYm9zZV9oZWFkZXIgJiYgY29tbWl0LT5idWZmZXIpIHsKIAkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKLQkJcHJldHR5X3ByaW50X2NvbW1pdChyZXZzLmNvbW1pdF9mb3JtYXQsIGNvbW1pdCwKLQkJCQkgICAgJmJ1ZiwgcmV2cy5hYmJyZXYsIE5VTEwsIE5VTEwsCi0JCQkJICAgIHJldnMuZGF0ZV9tb2RlLCAwKTsKLQkJaWYgKHJldnMuZ3JhcGgpIHsKKwkJcHJldHR5X3ByaW50X2NvbW1pdChyZXZzLT5jb21taXRfZm9ybWF0LCBjb21taXQsCisJCQkJICAgICZidWYsIHJldnMtPmFiYnJldiwgTlVMTCwgTlVMTCwKKwkJCQkgICAgcmV2cy0+ZGF0ZV9tb2RlLCAwKTsKKwkJaWYgKHJldnMtPmdyYXBoKSB7CiAJCQlpZiAoYnVmLmxlbikgewotCQkJCWlmIChyZXZzLmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfT05FTElORSkKLQkJCQkJZ3JhcGhfc2hvd19vbmVsaW5lKHJldnMuZ3JhcGgpOworCQkJCWlmIChyZXZzLT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX09ORUxJTkUpCisJCQkJCWdyYXBoX3Nob3dfb25lbGluZShyZXZzLT5ncmFwaCk7CiAKLQkJCQlncmFwaF9zaG93X2NvbW1pdF9tc2cocmV2cy5ncmFwaCwgJmJ1Zik7CisJCQkJZ3JhcGhfc2hvd19jb21taXRfbXNnKHJldnMtPmdyYXBoLCAmYnVmKTsKIAogCQkJCS8qCiAJCQkJICogQWRkIGEgbmV3bGluZSBhZnRlciB0aGUgY29tbWl0IG1lc3NhZ2UuCkBAIC0xMzQsNyArMTIyLDcgQEAKIAkJCQkgKiBmb3JtYXQgZG9lc24ndCBleHBsaWNpdGx5IGVuZCBpbiBhIG5ld2xpbmUuKQogCQkJCSAqLwogCQkJCWlmIChidWYubGVuICYmIGJ1Zi5idWZbYnVmLmxlbiAtIDFdID09ICdcbicpCi0JCQkJCWdyYXBoX3Nob3dfcGFkZGluZyhyZXZzLmdyYXBoKTsKKwkJCQkJZ3JhcGhfc2hvd19wYWRkaW5nKHJldnMtPmdyYXBoKTsKIAkJCQlwdXRjaGFyKCdcbicpOwogCQkJfSBlbHNlIHsKIAkJCQkvKgpAQCAtMTQyLDIzICsxMzAsMjMgQEAKIAkJCQkgKiB0aGUgcmVzdCBvZiB0aGUgZ3JhcGggb3V0cHV0IGZvciB0aGlzCiAJCQkJICogY29tbWl0LgogCQkJCSAqLwotCQkJCWlmIChncmFwaF9zaG93X3JlbWFpbmRlcihyZXZzLmdyYXBoKSkKKwkJCQlpZiAoZ3JhcGhfc2hvd19yZW1haW5kZXIocmV2cy0+Z3JhcGgpKQogCQkJCQlwdXRjaGFyKCdcbicpOwogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKGJ1Zi5sZW4pCi0JCQkJcHJpbnRmKCIlcyVjIiwgYnVmLmJ1ZiwgaGRyX3Rlcm1pbmF0aW9uKTsKKwkJCQlwcmludGYoIiVzJWMiLCBidWYuYnVmLCBpbmZvLT5oZHJfdGVybWluYXRpb24pOwogCQl9CiAJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwogCX0gZWxzZSB7Ci0JCWlmIChncmFwaF9zaG93X3JlbWFpbmRlcihyZXZzLmdyYXBoKSkKKwkJaWYgKGdyYXBoX3Nob3dfcmVtYWluZGVyKHJldnMtPmdyYXBoKSkKIAkJCXB1dGNoYXIoJ1xuJyk7CiAJfQogCW1heWJlX2ZsdXNoX29yX2RpZShzdGRvdXQsICJzdGRvdXQiKTsKLQlmaW5pc2hfY29tbWl0KGNvbW1pdCk7CisJZmluaXNoX2NvbW1pdChjb21taXQsIGRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBmaW5pc2hfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3N0YXRpYyB2b2lkIGZpbmlzaF9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhKQogewogCWlmIChjb21taXQtPnBhcmVudHMpIHsKIAkJZnJlZV9jb21taXRfbGlzdChjb21taXQtPnBhcmVudHMpOwpAQCAtMTY4LDI3ICsxNTYsMjkgQEAKIAljb21taXQtPmJ1ZmZlciA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbmlzaF9vYmplY3Qoc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqcCkKK3N0YXRpYyB2b2lkIGZpbmlzaF9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLCBjb25zdCBjaGFyICpuYW1lKQogewotCWlmIChwLT5pdGVtLT50eXBlID09IE9CSl9CTE9CICYmICFoYXNfc2hhMV9maWxlKHAtPml0ZW0tPnNoYTEpKQotCQlkaWUoIm1pc3NpbmcgYmxvYiBvYmplY3QgJyVzJyIsIHNoYTFfdG9faGV4KHAtPml0ZW0tPnNoYTEpKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9CTE9CICYmICFoYXNfc2hhMV9maWxlKG9iai0+c2hhMSkpCisJCWRpZSgibWlzc2luZyBibG9iIG9iamVjdCAnJXMnIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfb2JqZWN0KHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKnApCitzdGF0aWMgdm9pZCBzaG93X29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsIGNvbnN0IGNoYXIgKmNvbXBvbmVudCkKIHsKKwljaGFyICpuYW1lID0gcGF0aF9uYW1lKHBhdGgsIGNvbXBvbmVudCk7CiAJLyogQW4gb2JqZWN0IHdpdGggbmFtZSAiZm9vXG4wMDAwMDAwLi4uIiBjYW4gYmUgdXNlZCB0bwogCSAqIGNvbmZ1c2UgZG93bnN0cmVhbSAiZ2l0IHBhY2stb2JqZWN0cyIgdmVyeSBiYWRseS4KIAkgKi8KLQljb25zdCBjaGFyICplcCA9IHN0cmNocihwLT5uYW1lLCAnXG4nKTsKKwljb25zdCBjaGFyICplcCA9IHN0cmNocihuYW1lLCAnXG4nKTsKIAotCWZpbmlzaF9vYmplY3QocCk7CisJZmluaXNoX29iamVjdChvYmosIHBhdGgsIG5hbWUpOwogCWlmIChlcCkgewotCQlwcmludGYoIiVzICUuKnNcbiIsIHNoYTFfdG9faGV4KHAtPml0ZW0tPnNoYTEpLAotCQkgICAgICAgKGludCkgKGVwIC0gcC0+bmFtZSksCi0JCSAgICAgICBwLT5uYW1lKTsKKwkJcHJpbnRmKCIlcyAlLipzXG4iLCBzaGExX3RvX2hleChvYmotPnNoYTEpLAorCQkgICAgICAgKGludCkgKGVwIC0gbmFtZSksCisJCSAgICAgICBuYW1lKTsKIAl9CiAJZWxzZQotCQlwcmludGYoIiVzICVzXG4iLCBzaGExX3RvX2hleChwLT5pdGVtLT5zaGExKSwgcC0+bmFtZSk7CisJCXByaW50ZigiJXMgJXNcbiIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSksIG5hbWUpOworCWZyZWUobmFtZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNob3dfZWRnZShzdHJ1Y3QgY29tbWl0ICpjb21taXQpCkBAIC0xOTYsMzg5ICsxODYsMTI3IEBACiAJcHJpbnRmKCItJXNcbiIsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbG9nMmkoaW50IG4pCit7CisJaW50IGxvZzIgPSAwOworCisJZm9yICg7IG4gPiAxOyBuID4+PSAxKQorCQlsb2cyKys7CisKKwlyZXR1cm4gbG9nMjsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXhwMmkoaW50IG4pCit7CisJcmV0dXJuIDEgPDwgbjsKK30KKwogLyoKLSAqIFRoaXMgaXMgYSB0cnVseSBzdHVwaWQgYWxnb3JpdGhtLCBidXQgaXQncyBvbmx5Ci0gKiB1c2VkIGZvciBiaXNlY3Rpb24sIGFuZCB3ZSBqdXN0IGRvbid0IGNhcmUgZW5vdWdoLgorICogRXN0aW1hdGUgdGhlIG51bWJlciBvZiBiaXNlY3Qgc3RlcHMgbGVmdCAoYWZ0ZXIgdGhlIGN1cnJlbnQgc3RlcCkKICAqCi0gKiBXZSBjYXJlIGp1c3QgYmFyZWx5IGVub3VnaCB0byBhdm9pZCByZWN1cnNpbmcgZm9yCi0gKiBub24tbWVyZ2UgZW50cmllcy4KKyAqIEZvciBhbnkgeCBiZXR3ZWVuIDAgaW5jbHVkZWQgYW5kIDJebiBleGNsdWRlZCwgdGhlIHByb2JhYmlsaXR5IGZvcgorICogbiAtIDEgc3RlcHMgbGVmdCBsb29rcyBsaWtlOgorICoKKyAqIFAoMl5uICsgeCkgPT0gKDJebiAtIHgpIC8gKDJebiArIHgpCisgKgorICogYW5kIFAoMl5uICsgeCkgPCAwLjUgbWVhbnMgMl5uIDwgM3gKICAqLwotc3RhdGljIGludCBjb3VudF9kaXN0YW5jZShzdHJ1Y3QgY29tbWl0X2xpc3QgKmVudHJ5KQoraW50IGVzdGltYXRlX2Jpc2VjdF9zdGVwcyhpbnQgYWxsKQogewotCWludCBuciA9IDA7CisJaW50IG4sIHgsIGU7CiAKLQl3aGlsZSAoZW50cnkpIHsKLQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gZW50cnktPml0ZW07Ci0JCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKLQotCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiAoVU5JTlRFUkVTVElORyB8IENPVU5URUQpKQotCQkJYnJlYWs7Ci0JCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUUpKQotCQkJbnIrKzsKLQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gQ09VTlRFRDsKLQkJcCA9IGNvbW1pdC0+cGFyZW50czsKLQkJZW50cnkgPSBwOwotCQlpZiAocCkgewotCQkJcCA9IHAtPm5leHQ7Ci0JCQl3aGlsZSAocCkgewotCQkJCW5yICs9IGNvdW50X2Rpc3RhbmNlKHApOwotCQkJCXAgPSBwLT5uZXh0OwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIG5yOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhcl9kaXN0YW5jZShzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCi17Ci0Jd2hpbGUgKGxpc3QpIHsKLQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbGlzdC0+aXRlbTsKLQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgJj0gfkNPVU5URUQ7Ci0JCWxpc3QgPSBsaXN0LT5uZXh0OwotCX0KLX0KLQotI2RlZmluZSBERUJVR19CSVNFQ1QgMAotCi1zdGF0aWMgaW5saW5lIGludCB3ZWlnaHQoc3RydWN0IGNvbW1pdF9saXN0ICplbGVtKQotewotCXJldHVybiAqKChpbnQqKShlbGVtLT5pdGVtLT51dGlsKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3ZWlnaHRfc2V0KHN0cnVjdCBjb21taXRfbGlzdCAqZWxlbSwgaW50IHdlaWdodCkKLXsKLQkqKChpbnQqKShlbGVtLT5pdGVtLT51dGlsKSkgPSB3ZWlnaHQ7Ci19Ci0KLXN0YXRpYyBpbnQgY291bnRfaW50ZXJlc3RpbmdfcGFyZW50cyhzdHJ1Y3QgY29tbWl0ICpjb21taXQpCi17Ci0Jc3RydWN0IGNvbW1pdF9saXN0ICpwOwotCWludCBjb3VudDsKLQotCWZvciAoY291bnQgPSAwLCBwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgewotCQlpZiAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKLQkJCWNvbnRpbnVlOwotCQljb3VudCsrOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGhhbGZ3YXkoc3RydWN0IGNvbW1pdF9saXN0ICpwLCBpbnQgbnIpCi17Ci0JLyoKLQkgKiBEb24ndCBzaG9ydC1jdXQgc29tZXRoaW5nIHdlIGFyZSBub3QgZ29pbmcgdG8gcmV0dXJuIQotCSAqLwotCWlmIChwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkKKwlpZiAoYWxsIDwgMykKIAkJcmV0dXJuIDA7Ci0JaWYgKERFQlVHX0JJU0VDVCkKLQkJcmV0dXJuIDA7Ci0JLyoKLQkgKiAyIGFuZCAzIGFyZSBoYWxmd2F5IG9mIDUuCi0JICogMyBpcyBoYWxmd2F5IG9mIDYgYnV0IDIgYW5kIDQgYXJlIG5vdC4KLQkgKi8KLQlzd2l0Y2ggKDIgKiB3ZWlnaHQocCkgLSBucikgewotCWNhc2UgLTE6IGNhc2UgMDogY2FzZSAxOgorCisJbiA9IGxvZzJpKGFsbCk7CisJZSA9IGV4cDJpKG4pOworCXggPSBhbGwgLSBlOworCisJcmV0dXJuIChlIDwgMyAqIHgpID8gbiA6IG4gLSAxOworfQorCit2b2lkIHByaW50X2NvbW1pdF9saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdF9jdXIsCisJCSAgICAgICBjb25zdCBjaGFyICpmb3JtYXRfbGFzdCkKK3sKKwlmb3IgKCA7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisJCWNvbnN0IGNoYXIgKmZvcm1hdCA9IGxpc3QtPm5leHQgPyBmb3JtYXRfY3VyIDogZm9ybWF0X2xhc3Q7CisJCXByaW50Zihmb3JtYXQsIHNoYTFfdG9faGV4KGxpc3QtPml0ZW0tPm9iamVjdC5zaGExKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X3RyaWVkX3JldnMoc3RydWN0IGNvbW1pdF9saXN0ICp0cmllZCkKK3sKKwlwcmludGYoImJpc2VjdF90cmllZD0nIik7CisJcHJpbnRfY29tbWl0X2xpc3QodHJpZWQsICIlc3wiLCAiJXMiKTsKKwlwcmludGYoIidcbiIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF92YXJfc3RyKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsKQoreworCXByaW50ZigiJXM9JyVzJ1xuIiwgdmFyLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBwcmludF92YXJfaW50KGNvbnN0IGNoYXIgKnZhciwgaW50IHZhbCkKK3sKKwlwcmludGYoIiVzPSVkXG4iLCB2YXIsIHZhbCk7Cit9CisKK2ludCBzaG93X2Jpc2VjdF92YXJzKHN0cnVjdCByZXZfbGlzdF9pbmZvICppbmZvLCBpbnQgcmVhY2hlcywgaW50IGFsbCkKK3sKKwlpbnQgY250LCBmbGFncyA9IGluZm8tPmJpc2VjdF9zaG93X2ZsYWdzOworCWNoYXIgaGV4WzQxXSA9ICIiOworCXN0cnVjdCBjb21taXRfbGlzdCAqdHJpZWQ7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gaW5mby0+cmV2czsKKworCWlmICghcmV2cy0+Y29tbWl0cyAmJiAhKGZsYWdzICYgQklTRUNUX1NIT1dfVFJJRUQpKQogCQlyZXR1cm4gMTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19CiAKLSNpZiAhREVCVUdfQklTRUNUCi0jZGVmaW5lIHNob3dfbGlzdChhLGIsYyxkKSBkbyB7IDsgfSB3aGlsZSAoMCkKLSNlbHNlCi1zdGF0aWMgdm9pZCBzaG93X2xpc3QoY29uc3QgY2hhciAqZGVidWcsIGludCBjb3VudGVkLCBpbnQgbnIsCi0JCSAgICAgIHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKLXsKLQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiVzICglZC8lZClcbiIsIGRlYnVnLCBjb3VudGVkLCBucik7Ci0KLQlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBwOwotCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwLT5pdGVtOwotCQl1bnNpZ25lZCBmbGFncyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzOwotCQllbnVtIG9iamVjdF90eXBlIHR5cGU7Ci0JCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQkJY2hhciAqYnVmID0gcmVhZF9zaGExX2ZpbGUoY29tbWl0LT5vYmplY3Quc2hhMSwgJnR5cGUsICZzaXplKTsKLQkJY2hhciAqZXAsICpzcDsKLQotCQlmcHJpbnRmKHN0ZGVyciwgIiVjJWMlYyAiLAotCQkJKGZsYWdzICYgVFJFRVNBTUUpID8gJyAnIDogJ1QnLAotCQkJKGZsYWdzICYgVU5JTlRFUkVTVElORykgPyAnVScgOiAnICcsCi0JCQkoZmxhZ3MgJiBDT1VOVEVEKSA/ICdDJyA6ICcgJyk7Ci0JCWlmIChjb21taXQtPnV0aWwpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIiUzZCIsIHdlaWdodChwKSk7Ci0JCWVsc2UKLQkJCWZwcmludGYoc3RkZXJyLCAiLS0tIik7Ci0JCWZwcmludGYoc3RkZXJyLCAiICUuKnMiLCA4LCBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7Ci0JCWZvciAocHAgPSBjb21taXQtPnBhcmVudHM7IHBwOyBwcCA9IHBwLT5uZXh0KQotCQkJZnByaW50ZihzdGRlcnIsICIgJS4qcyIsIDgsCi0JCQkJc2hhMV90b19oZXgocHAtPml0ZW0tPm9iamVjdC5zaGExKSk7Ci0KLQkJc3AgPSBzdHJzdHIoYnVmLCAiXG5cbiIpOwotCQlpZiAoc3ApIHsKLQkJCXNwICs9IDI7Ci0JCQlmb3IgKGVwID0gc3A7ICplcCAmJiAqZXAgIT0gJ1xuJzsgZXArKykKLQkJCQk7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIiAlLipzIiwgKGludCkoZXAgLSBzcCksIHNwKTsKLQkJfQotCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0JfQotfQotI2VuZGlmIC8qIERFQlVHX0JJU0VDVCAqLwotCi1zdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpiZXN0X2Jpc2VjdGlvbihzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIGludCBucikKLXsKLQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnAsICpiZXN0OwotCWludCBiZXN0X2Rpc3RhbmNlID0gLTE7Ci0KLQliZXN0ID0gbGlzdDsKLQlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQlpbnQgZGlzdGFuY2U7Ci0JCXVuc2lnbmVkIGZsYWdzID0gcC0+aXRlbS0+b2JqZWN0LmZsYWdzOwotCi0JCWlmIChmbGFncyAmIFRSRUVTQU1FKQotCQkJY29udGludWU7Ci0JCWRpc3RhbmNlID0gd2VpZ2h0KHApOwotCQlpZiAobnIgLSBkaXN0YW5jZSA8IGRpc3RhbmNlKQotCQkJZGlzdGFuY2UgPSBuciAtIGRpc3RhbmNlOwotCQlpZiAoZGlzdGFuY2UgPiBiZXN0X2Rpc3RhbmNlKSB7Ci0JCQliZXN0ID0gcDsKLQkJCWJlc3RfZGlzdGFuY2UgPSBkaXN0YW5jZTsKLQkJfQotCX0KLQotCXJldHVybiBiZXN0OwotfQotCi1zdHJ1Y3QgY29tbWl0X2Rpc3QgewotCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKLQlpbnQgZGlzdGFuY2U7Ci19OwotCi1zdGF0aWMgaW50IGNvbXBhcmVfY29tbWl0X2Rpc3QoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQotewotCXN0cnVjdCBjb21taXRfZGlzdCAqYSwgKmI7Ci0KLQlhID0gKHN0cnVjdCBjb21taXRfZGlzdCAqKWFfOwotCWIgPSAoc3RydWN0IGNvbW1pdF9kaXN0ICopYl87Ci0JaWYgKGEtPmRpc3RhbmNlICE9IGItPmRpc3RhbmNlKQotCQlyZXR1cm4gYi0+ZGlzdGFuY2UgLSBhLT5kaXN0YW5jZTsgLyogZGVzYyBzb3J0ICovCi0JcmV0dXJuIGhhc2hjbXAoYS0+Y29tbWl0LT5vYmplY3Quc2hhMSwgYi0+Y29tbWl0LT5vYmplY3Quc2hhMSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmJlc3RfYmlzZWN0aW9uX3NvcnRlZChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIGludCBucikKLXsKLQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7Ci0Jc3RydWN0IGNvbW1pdF9kaXN0ICphcnJheSA9IHhjYWxsb2MobnIsIHNpemVvZigqYXJyYXkpKTsKLQlpbnQgY250LCBpOwotCi0JZm9yIChwID0gbGlzdCwgY250ID0gMDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJaW50IGRpc3RhbmNlOwotCQl1bnNpZ25lZCBmbGFncyA9IHAtPml0ZW0tPm9iamVjdC5mbGFnczsKLQotCQlpZiAoZmxhZ3MgJiBUUkVFU0FNRSkKLQkJCWNvbnRpbnVlOwotCQlkaXN0YW5jZSA9IHdlaWdodChwKTsKLQkJaWYgKG5yIC0gZGlzdGFuY2UgPCBkaXN0YW5jZSkKLQkJCWRpc3RhbmNlID0gbnIgLSBkaXN0YW5jZTsKLQkJYXJyYXlbY250XS5jb21taXQgPSBwLT5pdGVtOwotCQlhcnJheVtjbnRdLmRpc3RhbmNlID0gZGlzdGFuY2U7Ci0JCWNudCsrOwotCX0KLQlxc29ydChhcnJheSwgY250LCBzaXplb2YoKmFycmF5KSwgY29tcGFyZV9jb21taXRfZGlzdCk7Ci0JZm9yIChwID0gbGlzdCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgewotCQlzdHJ1Y3QgbmFtZV9kZWNvcmF0aW9uICpyID0geG1hbGxvYyhzaXplb2YoKnIpICsgMTAwKTsKLQkJc3RydWN0IG9iamVjdCAqb2JqID0gJihhcnJheVtpXS5jb21taXQtPm9iamVjdCk7Ci0KLQkJc3ByaW50ZihyLT5uYW1lLCAiZGlzdD0lZCIsIGFycmF5W2ldLmRpc3RhbmNlKTsKLQkJci0+bmV4dCA9IGFkZF9kZWNvcmF0aW9uKCZuYW1lX2RlY29yYXRpb24sIG9iaiwgcik7Ci0JCXAtPml0ZW0gPSBhcnJheVtpXS5jb21taXQ7Ci0JCXAgPSBwLT5uZXh0OwotCX0KLQlpZiAocCkKLQkJcC0+bmV4dCA9IE5VTEw7Ci0JZnJlZShhcnJheSk7Ci0JcmV0dXJuIGxpc3Q7Ci19Ci0KLS8qCi0gKiB6ZXJvIG9yIHBvc2l0aXZlIHdlaWdodCBpcyB0aGUgbnVtYmVyIG9mIGludGVyZXN0aW5nIGNvbW1pdHMgaXQgY2FuCi0gKiByZWFjaCwgaW5jbHVkaW5nIGl0c2VsZi4gIEVzcGVjaWFsbHksIHdlaWdodCA9IDAgbWVhbnMgaXQgZG9lcyBub3QKLSAqIHJlYWNoIGFueSB0cmVlLWNoYW5naW5nIGNvbW1pdHMgKGUuZy4ganVzdCBhYm92ZSB1bmludGVyZXN0aW5nIG9uZQotICogYnV0IHRyYXZlcnNhbCBpcyB3aXRoIHBhdGhzcGVjKS4KLSAqCi0gKiB3ZWlnaHQgPSAtMSBtZWFucyBpdCBoYXMgb25lIHBhcmVudCBhbmQgaXRzIGRpc3RhbmNlIGlzIHlldCB0bwotICogYmUgY29tcHV0ZWQuCi0gKgotICogd2VpZ2h0ID0gLTIgbWVhbnMgaXQgaGFzIG1vcmUgdGhhbiBvbmUgcGFyZW50IGFuZCBpdHMgZGlzdGFuY2UgaXMKLSAqIHVua25vd24uICBBZnRlciBydW5uaW5nIGNvdW50X2Rpc3RhbmNlKCkgZmlyc3QsIHRoZXkgd2lsbCBnZXQgemVybwotICogb3IgcG9zaXRpdmUgZGlzdGFuY2UuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmRvX2ZpbmRfYmlzZWN0aW9uKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKLQkJCQkJICAgICBpbnQgbnIsIGludCAqd2VpZ2h0cywKLQkJCQkJICAgICBpbnQgZmluZF9hbGwpCi17Ci0JaW50IG4sIGNvdW50ZWQ7Ci0Jc3RydWN0IGNvbW1pdF9saXN0ICpwOwotCi0JY291bnRlZCA9IDA7Ci0KLQlmb3IgKG4gPSAwLCBwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcC0+aXRlbTsKLQkJdW5zaWduZWQgZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFnczsKLQotCQlwLT5pdGVtLT51dGlsID0gJndlaWdodHNbbisrXTsKLQkJc3dpdGNoIChjb3VudF9pbnRlcmVzdGluZ19wYXJlbnRzKGNvbW1pdCkpIHsKLQkJY2FzZSAwOgotCQkJaWYgKCEoZmxhZ3MgJiBUUkVFU0FNRSkpIHsKLQkJCQl3ZWlnaHRfc2V0KHAsIDEpOwotCQkJCWNvdW50ZWQrKzsKLQkJCQlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGNvdW50IG9uZSIsCi0JCQkJCSAgY291bnRlZCwgbnIsIGxpc3QpOwotCQkJfQotCQkJLyoKLQkJCSAqIG90aGVyd2lzZSwgaXQgaXMga25vd24gbm90IHRvIHJlYWNoIGFueQotCQkJICogdHJlZS1jaGFuZ2luZyBjb21taXQgYW5kIGdldHMgd2VpZ2h0IDAuCi0JCQkgKi8KLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQl3ZWlnaHRfc2V0KHAsIC0xKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJd2VpZ2h0X3NldChwLCAtMik7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXNob3dfbGlzdCgiYmlzZWN0aW9uIDIgaW5pdGlhbGl6ZSIsIGNvdW50ZWQsIG5yLCBsaXN0KTsKKwlyZXZzLT5jb21taXRzID0gZmlsdGVyX3NraXBwZWQocmV2cy0+Y29tbWl0cywgJnRyaWVkLAorCQkJCSAgICAgICBmbGFncyAmIEJJU0VDVF9TSE9XX0FMTCwKKwkJCQkgICAgICAgTlVMTCwgTlVMTCk7CiAKIAkvKgotCSAqIElmIHlvdSBoYXZlIG9ubHkgb25lIHBhcmVudCBpbiB0aGUgcmVzdWx0aW5nIHNldAotCSAqIHRoZW4geW91IGNhbiByZWFjaCBvbmUgY29tbWl0IG1vcmUgdGhhbiB0aGF0IHBhcmVudAotCSAqIGNhbiByZWFjaC4gIFNvIHdlIGRvIG5vdCBoYXZlIHRvIHJ1biB0aGUgZXhwZW5zaXZlCi0JICogY291bnRfZGlzdGFuY2UoKSBmb3Igc2luZ2xlIHN0cmFuZCBvZiBwZWFybHMuCi0JICoKLQkgKiBIb3dldmVyLCBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIHBhcmVudHMsIHlvdSBjYW5ub3QKLQkgKiBqdXN0IGFkZCB0aGVpciBkaXN0YW5jZSBhbmQgb25lIGZvciB5b3Vyc2VsZiwgc2luY2UKLQkgKiB0aGV5IHVzdWFsbHkgcmVhY2ggdGhlIHNhbWUgYW5jZXN0b3IgYW5kIHlvdSB3b3VsZAotCSAqIGVuZCB1cCBjb3VudGluZyB0aGVtIHR3aWNlIHRoYXQgd2F5LgotCSAqCi0JICogU28gd2Ugd2lsbCBmaXJzdCBjb3VudCBkaXN0YW5jZSBvZiBtZXJnZXMgdGhlIHVzdWFsCi0JICogd2F5LCBhbmQgdGhlbiBmaWxsIHRoZSBibGFua3MgdXNpbmcgY2hlYXBlciBhbGdvcml0aG0uCisJICogcmV2cy0+Y29tbWl0cyBjYW4gcmVhY2ggInJlYWNoZXMiIGNvbW1pdHMgYW1vbmcKKwkgKiAiYWxsIiBjb21taXRzLiAgSWYgaXQgaXMgZ29vZCwgdGhlbiB0aGVyZSBhcmUKKwkgKiAoYWxsLXJlYWNoZXMpIGNvbW1pdHMgbGVmdCB0byBiZSBiaXNlY3RlZC4KKwkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgaXQgaXMgYmFkLCB0aGVuIHRoZSBzZXQKKwkgKiB0byBiaXNlY3QgaXMgInJlYWNoZXMiLgorCSAqIEEgYmlzZWN0IHNldCBvZiBzaXplIE4gaGFzIChOLTEpIGNvbW1pdHMgZnVydGhlcgorCSAqIHRvIHRlc3QsIGFzIHdlIGFscmVhZHkga25vdyBvbmUgYmFkIG9uZS4KIAkgKi8KLQlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQlpZiAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKLQkJCWNvbnRpbnVlOwotCQlpZiAod2VpZ2h0KHApICE9IC0yKQotCQkJY29udGludWU7Ci0JCXdlaWdodF9zZXQocCwgY291bnRfZGlzdGFuY2UocCkpOwotCQljbGVhcl9kaXN0YW5jZShsaXN0KTsKKwljbnQgPSBhbGwgLSByZWFjaGVzOworCWlmIChjbnQgPCByZWFjaGVzKQorCQljbnQgPSByZWFjaGVzOwogCi0JCS8qIERvZXMgaXQgaGFwcGVuIHRvIGJlIGF0IGV4YWN0bHkgaGFsZi13YXk/ICovCi0JCWlmICghZmluZF9hbGwgJiYgaGFsZndheShwLCBucikpCi0JCQlyZXR1cm4gcDsKLQkJY291bnRlZCsrOworCWlmIChyZXZzLT5jb21taXRzKQorCQlzdHJjcHkoaGV4LCBzaGExX3RvX2hleChyZXZzLT5jb21taXRzLT5pdGVtLT5vYmplY3Quc2hhMSkpOworCisJaWYgKGZsYWdzICYgQklTRUNUX1NIT1dfQUxMKSB7CisJCXRyYXZlcnNlX2NvbW1pdF9saXN0KHJldnMsIHNob3dfY29tbWl0LCBzaG93X29iamVjdCwgaW5mbyk7CisJCXByaW50ZigiLS0tLS0tXG4iKTsKIAl9CiAKLQlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGNvdW50X2Rpc3RhbmNlIiwgY291bnRlZCwgbnIsIGxpc3QpOworCWlmIChmbGFncyAmIEJJU0VDVF9TSE9XX1RSSUVEKQorCQlzaG93X3RyaWVkX3JldnModHJpZWQpOwogCi0Jd2hpbGUgKGNvdW50ZWQgPCBucikgewotCQlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQkJc3RydWN0IGNvbW1pdF9saXN0ICpxOwotCQkJdW5zaWduZWQgZmxhZ3MgPSBwLT5pdGVtLT5vYmplY3QuZmxhZ3M7CisJcHJpbnRfdmFyX3N0cigiYmlzZWN0X3JldiIsIGhleCk7CisJcHJpbnRfdmFyX2ludCgiYmlzZWN0X25yIiwgY250IC0gMSk7CisJcHJpbnRfdmFyX2ludCgiYmlzZWN0X2dvb2QiLCBhbGwgLSByZWFjaGVzIC0gMSk7CisJcHJpbnRfdmFyX2ludCgiYmlzZWN0X2JhZCIsIHJlYWNoZXMgLSAxKTsKKwlwcmludF92YXJfaW50KCJiaXNlY3RfYWxsIiwgYWxsKTsKKwlwcmludF92YXJfaW50KCJiaXNlY3Rfc3RlcHMiLCBlc3RpbWF0ZV9iaXNlY3Rfc3RlcHMoYWxsKSk7CiAKLQkJCWlmICgwIDw9IHdlaWdodChwKSkKLQkJCQljb250aW51ZTsKLQkJCWZvciAocSA9IHAtPml0ZW0tPnBhcmVudHM7IHE7IHEgPSBxLT5uZXh0KSB7Ci0JCQkJaWYgKHEtPml0ZW0tPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmICgwIDw9IHdlaWdodChxKSkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoIXEpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qCi0JCQkgKiB3ZWlnaHQgZm9yIHAgaXMgdW5rbm93biBidXQgcSBpcyBrbm93bi4KLQkJCSAqIGFkZCBvbmUgZm9yIHAgaXRzZWxmIGlmIHAgaXMgdG8gYmUgY291bnRlZCwKLQkJCSAqIG90aGVyd2lzZSBpbmhlcml0IGl0IGZyb20gcSBkaXJlY3RseS4KLQkJCSAqLwotCQkJaWYgKCEoZmxhZ3MgJiBUUkVFU0FNRSkpIHsKLQkJCQl3ZWlnaHRfc2V0KHAsIHdlaWdodChxKSsxKTsKLQkJCQljb3VudGVkKys7Ci0JCQkJc2hvd19saXN0KCJiaXNlY3Rpb24gMiBjb3VudCBvbmUiLAotCQkJCQkgIGNvdW50ZWQsIG5yLCBsaXN0KTsKLQkJCX0KLQkJCWVsc2UKLQkJCQl3ZWlnaHRfc2V0KHAsIHdlaWdodChxKSk7Ci0KLQkJCS8qIERvZXMgaXQgaGFwcGVuIHRvIGJlIGF0IGV4YWN0bHkgaGFsZi13YXk/ICovCi0JCQlpZiAoIWZpbmRfYWxsICYmIGhhbGZ3YXkocCwgbnIpKQotCQkJCXJldHVybiBwOwotCQl9Ci0JfQotCi0Jc2hvd19saXN0KCJiaXNlY3Rpb24gMiBjb3VudGVkIGFsbCIsIGNvdW50ZWQsIG5yLCBsaXN0KTsKLQotCWlmICghZmluZF9hbGwpCi0JCXJldHVybiBiZXN0X2Jpc2VjdGlvbihsaXN0LCBucik7Ci0JZWxzZQotCQlyZXR1cm4gYmVzdF9iaXNlY3Rpb25fc29ydGVkKGxpc3QsIG5yKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqZmluZF9iaXNlY3Rpb24oc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAotCQkJCQkgIGludCAqcmVhY2hlcywgaW50ICphbGwsCi0JCQkJCSAgaW50IGZpbmRfYWxsKQotewotCWludCBuciwgb25fbGlzdDsKLQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnAsICpiZXN0LCAqbmV4dCwgKmxhc3Q7Ci0JaW50ICp3ZWlnaHRzOwotCi0Jc2hvd19saXN0KCJiaXNlY3Rpb24gMiBlbnRyeSIsIDAsIDAsIGxpc3QpOwotCi0JLyoKLQkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIHRvdGFsIGFuZCB0cmVlLWNoYW5naW5nIGl0ZW1zIG9uIHRoZQotCSAqIGxpc3QsIHdoaWxlIHJldmVyc2luZyB0aGUgbGlzdC4KLQkgKi8KLQlmb3IgKG5yID0gb25fbGlzdCA9IDAsIGxhc3QgPSBOVUxMLCBwID0gbGlzdDsKLQkgICAgIHA7Ci0JICAgICBwID0gbmV4dCkgewotCQl1bnNpZ25lZCBmbGFncyA9IHAtPml0ZW0tPm9iamVjdC5mbGFnczsKLQotCQluZXh0ID0gcC0+bmV4dDsKLQkJaWYgKGZsYWdzICYgVU5JTlRFUkVTVElORykKLQkJCWNvbnRpbnVlOwotCQlwLT5uZXh0ID0gbGFzdDsKLQkJbGFzdCA9IHA7Ci0JCWlmICghKGZsYWdzICYgVFJFRVNBTUUpKQotCQkJbnIrKzsKLQkJb25fbGlzdCsrOwotCX0KLQlsaXN0ID0gbGFzdDsKLQlzaG93X2xpc3QoImJpc2VjdGlvbiAyIHNvcnRlZCIsIDAsIG5yLCBsaXN0KTsKLQotCSphbGwgPSBucjsKLQl3ZWlnaHRzID0geGNhbGxvYyhvbl9saXN0LCBzaXplb2YoKndlaWdodHMpKTsKLQotCS8qIERvIHRoZSByZWFsIHdvcmsgb2YgZmluZGluZyBiaXNlY3Rpb24gY29tbWl0LiAqLwotCWJlc3QgPSBkb19maW5kX2Jpc2VjdGlvbihsaXN0LCBuciwgd2VpZ2h0cywgZmluZF9hbGwpOwotCWlmIChiZXN0KSB7Ci0JCWlmICghZmluZF9hbGwpCi0JCQliZXN0LT5uZXh0ID0gTlVMTDsKLQkJKnJlYWNoZXMgPSB3ZWlnaHQoYmVzdCk7Ci0JfQotCWZyZWUod2VpZ2h0cyk7Ci0JcmV0dXJuIGJlc3Q7CisJcmV0dXJuIDA7CiB9CiAKIGludCBjbWRfcmV2X2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7Ci0Jc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0OworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCByZXZfbGlzdF9pbmZvIGluZm87CiAJaW50IGk7CiAJaW50IHJlYWRfZnJvbV9zdGRpbiA9IDA7CisJaW50IGJpc2VjdF9saXN0ID0gMDsKIAlpbnQgYmlzZWN0X3Nob3dfdmFycyA9IDA7CiAJaW50IGJpc2VjdF9maW5kX2FsbCA9IDA7CiAJaW50IHF1aWV0ID0gMDsKQEAgLTU4OSw2ICszMTcsOSBAQAogCXJldnMuY29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX1VOU1BFQ0lGSUVEOwogCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldnMsIE5VTEwpOwogCisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworCWluZm8ucmV2cyA9ICZyZXZzOworCiAJcXVpZXQgPSBESUZGX09QVF9UU1QoJnJldnMuZGlmZm9wdCwgUVVJRVQpOwogCWZvciAoaSA9IDEgOyBpIDwgYXJnYzsgaSsrKSB7CiAJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CkBAIC01OTgsNyArMzI5LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICghc3RyY21wKGFyZywgIi0tdGltZXN0YW1wIikpIHsKLQkJCXNob3dfdGltZXN0YW1wID0gMTsKKwkJCWluZm8uc2hvd190aW1lc3RhbXAgPSAxOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKCFzdHJjbXAoYXJnLCAiLS1iaXNlY3QiKSkgewpAQCAtNjA4LDYgKzMzOSw3IEBACiAJCWlmICghc3RyY21wKGFyZywgIi0tYmlzZWN0LWFsbCIpKSB7CiAJCQliaXNlY3RfbGlzdCA9IDE7CiAJCQliaXNlY3RfZmluZF9hbGwgPSAxOworCQkJaW5mby5iaXNlY3Rfc2hvd19mbGFncyA9IEJJU0VDVF9TSE9XX0FMTDsKIAkJCXJldnMuc2hvd19kZWNvcmF0aW9ucyA9IDE7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNjI3LDE5ICszNTksMTcgQEAKIAl9CiAJaWYgKHJldnMuY29tbWl0X2Zvcm1hdCAhPSBDTUlUX0ZNVF9VTlNQRUNJRklFRCkgewogCQkvKiBUaGUgY29tbWFuZCBsaW5lIGhhcyBhIC0tcHJldHR5ICAqLwotCQloZHJfdGVybWluYXRpb24gPSAnXG4nOworCQlpbmZvLmhkcl90ZXJtaW5hdGlvbiA9ICdcbic7CiAJCWlmIChyZXZzLmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfT05FTElORSkKLQkJCWhlYWRlcl9wcmVmaXggPSAiIjsKKwkJCWluZm8uaGVhZGVyX3ByZWZpeCA9ICIiOwogCQllbHNlCi0JCQloZWFkZXJfcHJlZml4ID0gImNvbW1pdCAiOworCQkJaW5mby5oZWFkZXJfcHJlZml4ID0gImNvbW1pdCAiOwogCX0KIAllbHNlIGlmIChyZXZzLnZlcmJvc2VfaGVhZGVyKQogCQkvKiBPbmx5IC0taGVhZGVyIHdhcyBzcGVjaWZpZWQgKi8KIAkJcmV2cy5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfUkFXOwogCi0JbGlzdCA9IHJldnMuY29tbWl0czsKLQotCWlmICgoIWxpc3QgJiYKKwlpZiAoKCFyZXZzLmNvbW1pdHMgJiYKIAkgICAgICghKHJldnMudGFnX29iamVjdHN8fHJldnMudHJlZV9vYmplY3RzfHxyZXZzLmJsb2Jfb2JqZWN0cykgJiYKIAkgICAgICAhcmV2cy5wZW5kaW5nLm5yKSkgfHwKIAkgICAgcmV2cy5kaWZmKQpAQCAtNjYwLDQ3ICszOTAsMTUgQEAKIAogCQlyZXZzLmNvbW1pdHMgPSBmaW5kX2Jpc2VjdGlvbihyZXZzLmNvbW1pdHMsICZyZWFjaGVzLCAmYWxsLAogCQkJCQkgICAgICBiaXNlY3RfZmluZF9hbGwpOwotCQlpZiAoYmlzZWN0X3Nob3dfdmFycykgewotCQkJaW50IGNudDsKLQkJCWNoYXIgaGV4WzQxXTsKLQkJCWlmICghcmV2cy5jb21taXRzKQotCQkJCXJldHVybiAxOwotCQkJLyoKLQkJCSAqIHJldnMuY29tbWl0cyBjYW4gcmVhY2ggInJlYWNoZXMiIGNvbW1pdHMgYW1vbmcKLQkJCSAqICJhbGwiIGNvbW1pdHMuICBJZiBpdCBpcyBnb29kLCB0aGVuIHRoZXJlIGFyZQotCQkJICogKGFsbC1yZWFjaGVzKSBjb21taXRzIGxlZnQgdG8gYmUgYmlzZWN0ZWQuCi0JCQkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgaXQgaXMgYmFkLCB0aGVuIHRoZSBzZXQKLQkJCSAqIHRvIGJpc2VjdCBpcyAicmVhY2hlcyIuCi0JCQkgKiBBIGJpc2VjdCBzZXQgb2Ygc2l6ZSBOIGhhcyAoTi0xKSBjb21taXRzIGZ1cnRoZXIKLQkJCSAqIHRvIHRlc3QsIGFzIHdlIGFscmVhZHkga25vdyBvbmUgYmFkIG9uZS4KLQkJCSAqLwotCQkJY250ID0gYWxsIC0gcmVhY2hlczsKLQkJCWlmIChjbnQgPCByZWFjaGVzKQotCQkJCWNudCA9IHJlYWNoZXM7Ci0JCQlzdHJjcHkoaGV4LCBzaGExX3RvX2hleChyZXZzLmNvbW1pdHMtPml0ZW0tPm9iamVjdC5zaGExKSk7CiAKLQkJCWlmIChiaXNlY3RfZmluZF9hbGwpIHsKLQkJCQl0cmF2ZXJzZV9jb21taXRfbGlzdCgmcmV2cywgc2hvd19jb21taXQsIHNob3dfb2JqZWN0KTsKLQkJCQlwcmludGYoIi0tLS0tLVxuIik7Ci0JCQl9Ci0KLQkJCXByaW50ZigiYmlzZWN0X3Jldj0lc1xuIgotCQkJICAgICAgICJiaXNlY3RfbnI9JWRcbiIKLQkJCSAgICAgICAiYmlzZWN0X2dvb2Q9JWRcbiIKLQkJCSAgICAgICAiYmlzZWN0X2JhZD0lZFxuIgotCQkJICAgICAgICJiaXNlY3RfYWxsPSVkXG4iLAotCQkJICAgICAgIGhleCwKLQkJCSAgICAgICBjbnQgLSAxLAotCQkJICAgICAgIGFsbCAtIHJlYWNoZXMgLSAxLAotCQkJICAgICAgIHJlYWNoZXMgLSAxLAotCQkJICAgICAgIGFsbCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlpZiAoYmlzZWN0X3Nob3dfdmFycykKKwkJCXJldHVybiBzaG93X2Jpc2VjdF92YXJzKCZpbmZvLCByZWFjaGVzLCBhbGwpOwogCX0KIAogCXRyYXZlcnNlX2NvbW1pdF9saXN0KCZyZXZzLAotCQlxdWlldCA/IGZpbmlzaF9jb21taXQgOiBzaG93X2NvbW1pdCwKLQkJcXVpZXQgPyBmaW5pc2hfb2JqZWN0IDogc2hvd19vYmplY3QpOworCQkJICAgICBxdWlldCA/IGZpbmlzaF9jb21taXQgOiBzaG93X2NvbW1pdCwKKwkJCSAgICAgcXVpZXQgPyBmaW5pc2hfb2JqZWN0IDogc2hvd19vYmplY3QsCisJCQkgICAgICZpbmZvKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZXYtcGFyc2UuYyBiL2J1aWx0aW4tcmV2LXBhcnNlLmMKaW5kZXggODFkNWE2Zi4uNDViZWFkNiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1yZXYtcGFyc2UuYworKysgYi9idWlsdGluLXJldi1wYXJzZS5jCkBAIC0yNiw2ICsyNiw4IEBACiAjZGVmaW5lIFNIT1dfU1lNQk9MSUNfRlVMTCAyCiBzdGF0aWMgaW50IHN5bWJvbGljOwogc3RhdGljIGludCBhYmJyZXY7CitzdGF0aWMgaW50IGFiYnJldl9yZWY7CitzdGF0aWMgaW50IGFiYnJldl9yZWZfc3RyaWN0Owogc3RhdGljIGludCBvdXRwdXRfc3E7CiAKIC8qCkBAIC0xMDksOCArMTExLDggQEAKIAkJcmV0dXJuOwogCWRlZiA9IE5VTEw7CiAKLQlpZiAoc3ltYm9saWMgJiYgbmFtZSkgewotCQlpZiAoc3ltYm9saWMgPT0gU0hPV19TWU1CT0xJQ19GVUxMKSB7CisJaWYgKChzeW1ib2xpYyB8fCBhYmJyZXZfcmVmKSAmJiBuYW1lKSB7CisJCWlmIChzeW1ib2xpYyA9PSBTSE9XX1NZTUJPTElDX0ZVTEwgfHwgYWJicmV2X3JlZikgewogCQkJdW5zaWduZWQgY2hhciBkaXNjYXJkWzIwXTsKIAkJCWNoYXIgKmZ1bGw7CiAKQEAgLTEyNSw2ICsxMjcsOSBAQAogCQkJCSAqLwogCQkJCWJyZWFrOwogCQkJY2FzZSAxOiAvKiBoYXBweSAqLworCQkJCWlmIChhYmJyZXZfcmVmKQorCQkJCQlmdWxsID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYoZnVsbCwKKwkJCQkJCWFiYnJldl9yZWZfc3RyaWN0KTsKIAkJCQlzaG93X3dpdGhfdHlwZSh0eXBlLCBmdWxsKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6IC8qIGFtYmlndW91cyAqLwpAQCAtMjk2LDcgKzMwMSw3IEBACiAKIHN0YXRpYyBpbnQgY21kX3BhcnNlb3B0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewotCXN0YXRpYyBpbnQga2VlcF9kYXNoZGFzaCA9IDA7CisJc3RhdGljIGludCBrZWVwX2Rhc2hkYXNoID0gMCwgc3RvcF9hdF9ub25fb3B0aW9uID0gMDsKIAlzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IHBhcnNlb3B0X3VzYWdlW10gPSB7CiAJCSJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgW29wdGlvbnNdIC0tIFs8YXJncz4uLi5dIiwKIAkJTlVMTApAQCAtMzA0LDYgKzMwOSw5IEBACiAJc3RhdGljIHN0cnVjdCBvcHRpb24gcGFyc2VvcHRfb3B0c1tdID0gewogCQlPUFRfQk9PTEVBTigwLCAia2VlcC1kYXNoZGFzaCIsICZrZWVwX2Rhc2hkYXNoLAogCQkJCQkia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIiksCisJCU9QVF9CT09MRUFOKDAsICJzdG9wLWF0LW5vbi1vcHRpb24iLCAmc3RvcF9hdF9ub25fb3B0aW9uLAorCQkJCQkic3RvcCBwYXJzaW5nIGFmdGVyIHRoZSAiCisJCQkJCSJmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IiksCiAJCU9QVF9FTkQoKSwKIAl9OwogCkBAIC0zMTMsNyArMzIxLDcgQEAKIAlpbnQgb25iID0gMCwgb3N6ID0gMCwgdW5iID0gMCwgdXN6ID0gMDsKIAogCXN0cmJ1Zl9hZGRzdHIoJnBhcnNlZCwgInNldCAtLSIpOwotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHBhcnNlb3B0X29wdHMsIHBhcnNlb3B0X3VzYWdlLAorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgcGFyc2VvcHRfb3B0cywgcGFyc2VvcHRfdXNhZ2UsCiAJICAgICAgICAgICAgICAgICAgICAgUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOwogCWlmIChhcmdjIDwgMSB8fCBzdHJjbXAoYXJndlswXSwgIi0tIikpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhwYXJzZW9wdF91c2FnZSwgcGFyc2VvcHRfb3B0cyk7CkBAIC0zODgsOCArMzk2LDkgQEAKIAkvKiBwdXQgYW4gT1BUX0VORCgpICovCiAJQUxMT0NfR1JPVyhvcHRzLCBvbmIgKyAxLCBvc3opOwogCW1lbXNldChvcHRzICsgb25iLCAwLCBzaXplb2Yob3B0c1tvbmJdKSk7Ci0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0cywgdXNhZ2UsCi0JICAgICAgICAgICAgICAgICAgICAga2VlcF9kYXNoZGFzaCA/IFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIDogMCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCB1c2FnZSwKKwkJCWtlZXBfZGFzaGRhc2ggPyBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCA6IDAgfAorCQkJc3RvcF9hdF9ub25fb3B0aW9uID8gUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTiA6IDApOwogCiAJc3RyYnVmX2FkZGYoJnBhcnNlZCwgIiAtLSIpOwogCXNxX3F1b3RlX2FyZ3YoJnBhcnNlZCwgYXJndiwgMCk7CkBAIC0zOTcsNiArNDA2LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY21kX3NxX3F1b3RlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKGFyZ2MpCisJCXNxX3F1b3RlX2FyZ3YoJmJ1ZiwgYXJndiwgMCk7CisJcHJpbnRmKCIlc1xuIiwgYnVmLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgZGllX25vX3NpbmdsZV9yZXYoaW50IHF1aWV0KQogewogCWlmIChxdWlldCkKQEAgLTQxNCw2ICs0MzUsOSBAQAogCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKCItLXBhcnNlb3B0IiwgYXJndlsxXSkpCiAJCXJldHVybiBjbWRfcGFyc2VvcHQoYXJnYyAtIDEsIGFyZ3YgKyAxLCBwcmVmaXgpOwogCisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoIi0tc3EtcXVvdGUiLCBhcmd2WzFdKSkKKwkJcmV0dXJuIGNtZF9zcV9xdW90ZShhcmdjIC0gMiwgYXJndiArIDIpOworCiAJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CkBAIC01MDYsNiArNTMwLDIwIEBACiAJCQkJc3ltYm9saWMgPSBTSE9XX1NZTUJPTElDX0ZVTEw7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWFiYnJldi1yZWYiKSAmJgorCQkJICAgICghYXJnWzEyXSB8fCBhcmdbMTJdID09ICc9JykpIHsKKwkJCQlhYmJyZXZfcmVmID0gMTsKKwkJCQlhYmJyZXZfcmVmX3N0cmljdCA9IHdhcm5fYW1iaWd1b3VzX3JlZnM7CisJCQkJaWYgKGFyZ1sxMl0gPT0gJz0nKSB7CisJCQkJCWlmICghc3RyY21wKGFyZyArIDEzLCAic3RyaWN0IikpCisJCQkJCQlhYmJyZXZfcmVmX3N0cmljdCA9IDE7CisJCQkJCWVsc2UgaWYgKCFzdHJjbXAoYXJnICsgMTMsICJsb29zZSIpKQorCQkJCQkJYWJicmV2X3JlZl9zdHJpY3QgPSAwOworCQkJCQllbHNlCisJCQkJCQlkaWUoInVua25vd24gbW9kZSBmb3IgJXMiLCBhcmcpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmICghc3RyY21wKGFyZywgIi0tYWxsIikpIHsKIAkJCQlmb3JfZWFjaF9yZWYoc2hvd19yZWZlcmVuY2UsIE5VTEwpOwogCQkJCWNvbnRpbnVlOwpAQCAtNTU4LDcgKzU5Niw3IEBACiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCQlpZiAoIWdldGN3ZChjd2QsIFBBVEhfTUFYKSkKLQkJCQkJZGllKCJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKKwkJCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKIAkJCQlwcmludGYoIiVzLy5naXRcbiIsIGN3ZCk7CiAJCQkJY29udGludWU7CiAJCQl9CmRpZmYgLS1naXQgYS9idWlsdGluLXJldmVydC5jIGIvYnVpbHRpbi1yZXZlcnQuYwppbmRleCAwOWQwOGZhLi4xNTFhYTZhIDEwMDY0NAotLS0gYS9idWlsdGluLXJldmVydC5jCisrKyBiL2J1aWx0aW4tcmV2ZXJ0LmMKQEAgLTYwLDcgKzYwLDcgQEAKIAkJT1BUX0VORCgpLAogCX07CiAKLQlpZiAocGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCB1c2FnZV9zdHIsIDApICE9IDEpCisJaWYgKHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgdXNhZ2Vfc3RyLCAwKSAhPSAxKQogCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2Vfc3RyLCBvcHRpb25zKTsKIAlhcmcgPSBhcmd2WzBdOwogCkBAIC0xMzUsNyArMTM1LDcgQEAKIHsKIAlpbnQgbGVuID0gc3RybGVuKHN0cmluZyk7CiAJaWYgKHdyaXRlX2luX2Z1bGwobXNnX2ZkLCBzdHJpbmcsIGxlbikgPCAwKQotCQlkaWUgKCJDb3VsZCBub3Qgd3JpdGUgdG8gTUVSR0VfTVNHIik7CisJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCB3cml0ZSB0byBNRVJHRV9NU0ciKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkX21lc3NhZ2VfdG9fbXNnKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCkBAIC0yMjMsMTcgKzIyMyw2IEBACiAJcmV0dXJuIGhlbHBidWY7CiB9CiAKLXN0YXRpYyBpbnQgaW5kZXhfaXNfZGlydHkodm9pZCkKLXsKLQlzdHJ1Y3QgcmV2X2luZm8gcmV2OwotCWluaXRfcmV2aXNpb25zKCZyZXYsIE5VTEwpOwotCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCAiSEVBRCIpOwotCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIFFVSUVUKTsKLQlESUZGX09QVF9TRVQoJnJldi5kaWZmb3B0LCBFWElUX1dJVEhfU1RBVFVTKTsKLQlydW5fZGlmZl9pbmRleCgmcmV2LCAxKTsKLQlyZXR1cm4gISFESUZGX09QVF9UU1QoJnJldi5kaWZmb3B0LCBIQVNfQ0hBTkdFUyk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgdHJlZSAqZW1wdHlfdHJlZSh2b2lkKQogewogCXN0cnVjdCB0cmVlICp0cmVlID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRyZWUpKTsKQEAgLTI3OSw3ICsyNjgsNyBAQAogCX0gZWxzZSB7CiAJCWlmIChnZXRfc2hhMSgiSEVBRCIsIGhlYWQpKQogCQkJZGllICgiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRCIpOwotCQlpZiAoaW5kZXhfaXNfZGlydHkoKSkKKwkJaWYgKGluZGV4X2RpZmZlcnNfZnJvbSgiSEVBRCIsIDApKQogCQkJZGllICgiRGlydHkgaW5kZXg6IGNhbm5vdCAlcyIsIG1lKTsKIAl9CiAJZGlzY2FyZF9jYWNoZSgpOwpAQCAtMzM0LDkgKzMyMyw5IEBACiAKIAllbmNvZGluZyA9IGdldF9lbmNvZGluZyhtZXNzYWdlKTsKIAlpZiAoIWVuY29kaW5nKQotCQllbmNvZGluZyA9ICJ1dGYtOCI7CisJCWVuY29kaW5nID0gIlVURi04IjsKIAlpZiAoIWdpdF9jb21taXRfZW5jb2RpbmcpCi0JCWdpdF9jb21taXRfZW5jb2RpbmcgPSAidXRmLTgiOworCQlnaXRfY29tbWl0X2VuY29kaW5nID0gIlVURi04IjsKIAlpZiAoKHJlZW5jb2RlZF9tZXNzYWdlID0gcmVlbmNvZGVfc3RyaW5nKG1lc3NhZ2UsCiAJCQkJCWdpdF9jb21taXRfZW5jb2RpbmcsIGVuY29kaW5nKSkpCiAJCW1lc3NhZ2UgPSByZWVuY29kZWRfbWVzc2FnZTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcm0uYyBiL2J1aWx0aW4tcm0uYwppbmRleCBjMTFmNDU1Li41Nzk3NWRiIDEwMDY0NAotLS0gYS9idWlsdGluLXJtLmMKKysrIGIvYnVpbHRpbi1ybS5jCkBAIC01OSw4ICs1OSw3IEBACiAKIAkJaWYgKGxzdGF0KGNlLT5uYW1lLCAmc3QpIDwgMCkgewogCQkJaWYgKGVycm5vICE9IEVOT0VOVCkKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6ICclcyc6ICVzIiwKLQkJCQkJY2UtPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJd2FybmluZygiJyVzJzogJXMiLCBjZS0+bmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIAkJCS8qIEl0IGFscmVhZHkgdmFuaXNoZWQgZnJvbSB0aGUgd29ya2luZyB0cmVlICovCiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTU4LDcgKzE1Nyw4IEBACiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX3JtX29wdGlvbnMsIGJ1aWx0aW5fcm1fdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9ybV9vcHRpb25zLAorCQkJICAgICBidWlsdGluX3JtX3VzYWdlLCAwKTsKIAlpZiAoIWFyZ2MpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JtX3VzYWdlLCBidWlsdGluX3JtX29wdGlvbnMpOwogCkBAIC0yNTcsNyArMjU3LDcgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICghcmVtb3ZlZCkKLQkJCQlkaWUoImdpdCBybTogJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oImdpdCBybTogJyVzJyIsIHBhdGgpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9idWlsdGluLXNlbmQtcGFjay5jIGIvYnVpbHRpbi1zZW5kLXBhY2suYwppbmRleCBkNjVkMDE5Li40N2ZiOWY3IDEwMDY0NAotLS0gYS9idWlsdGluLXNlbmQtcGFjay5jCisrKyBiL2J1aWx0aW4tc2VuZC1wYWNrLmMKQEAgLTEsNiArMSw1IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJjb21taXQuaCIKLSNpbmNsdWRlICJ0YWcuaCIKICNpbmNsdWRlICJyZWZzLmgiCiAjaW5jbHVkZSAicGt0LWxpbmUuaCIKICNpbmNsdWRlICJydW4tY29tbWFuZC5oIgpAQCAtMTEsOSArMTAsNyBAQAogImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiBbPHJlZj4uLi5dXG4iCiAiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiI7CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgYXJncyA9IHsKLQkvKiAucmVjZWl2ZXBhY2sgPSAqLyAiZ2l0LXJlY2VpdmUtcGFjayIsCi19Oworc3RhdGljIHN0cnVjdCBzZW5kX3BhY2tfYXJncyBhcmdzOwogCiBzdGF0aWMgaW50IGZlZWRfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmZCwgaW50IG5lZ2F0aXZlKQogewpAQCAtMzIsNyArMjksNyBAQAogLyoKICAqIE1ha2UgYSBwYWNrIHN0cmVhbSBhbmQgc3BpdCBpdCBvdXQgaW50byBmaWxlIGRlc2NyaXB0b3IgZmQKICAqLwotc3RhdGljIGludCBwYWNrX29iamVjdHMoaW50IGZkLCBzdHJ1Y3QgcmVmICpyZWZzLCBzdHJ1Y3QgZXh0cmFfaGF2ZV9vYmplY3RzICpleHRyYSkKK3N0YXRpYyBpbnQgcGFja19vYmplY3RzKGludCBmZCwgc3RydWN0IHJlZiAqcmVmcywgc3RydWN0IGV4dHJhX2hhdmVfb2JqZWN0cyAqZXh0cmEsIHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqYXJncykKIHsKIAkvKgogCSAqIFRoZSBjaGlsZCBiZWNvbWVzIHBhY2stb2JqZWN0cyAtLXJldnM7IHdlIGZlZWQKQEAgLTQ2LDE5ICs0MywyMyBAQAogCQkiLS1zdGRvdXQiLAogCQlOVUxMLAogCQlOVUxMLAorCQlOVUxMLAogCX07CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcG87CiAJaW50IGk7CiAKLQlpZiAoYXJncy51c2VfdGhpbl9wYWNrKQotCQlhcmd2WzRdID0gIi0tdGhpbiI7CisJaSA9IDQ7CisJaWYgKGFyZ3MtPnVzZV90aGluX3BhY2spCisJCWFyZ3ZbaSsrXSA9ICItLXRoaW4iOworCWlmIChhcmdzLT51c2Vfb2ZzX2RlbHRhKQorCQlhcmd2W2krK10gPSAiLS1kZWx0YS1iYXNlLW9mZnNldCI7CiAJbWVtc2V0KCZwbywgMCwgc2l6ZW9mKHBvKSk7CiAJcG8uYXJndiA9IGFyZ3Y7CiAJcG8uaW4gPSAtMTsKIAlwby5vdXQgPSBmZDsKIAlwby5naXRfY21kID0gMTsKIAlpZiAoc3RhcnRfY29tbWFuZCgmcG8pKQotCQlkaWUoImdpdCBwYWNrLW9iamVjdHMgZmFpbGVkICglcykiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImdpdCBwYWNrLW9iamVjdHMgZmFpbGVkIik7CiAKIAkvKgogCSAqIFdlIGZlZWQgdGhlIHBhY2stb2JqZWN0cyB3ZSBqdXN0IHNwYXduZWQgd2l0aCByZXZpc2lvbgpAQCAtODQsODIgKzg1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdW5tYXJrX2FuZF9mcmVlKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwgdW5zaWduZWQgaW50IG1hcmspCi17Ci0Jd2hpbGUgKGxpc3QpIHsKLQkJc3RydWN0IGNvbW1pdF9saXN0ICp0ZW1wID0gbGlzdDsKLQkJdGVtcC0+aXRlbS0+b2JqZWN0LmZsYWdzICY9IH5tYXJrOwotCQlsaXN0ID0gdGVtcC0+bmV4dDsKLQkJZnJlZSh0ZW1wKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcmVmX25ld2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAotCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExKQotewotCXN0cnVjdCBvYmplY3QgKm87Ci0Jc3RydWN0IGNvbW1pdCAqb2xkLCAqbmV3OwotCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwgKnVzZWQ7Ci0JaW50IGZvdW5kID0gMDsKLQotCS8qIEJvdGggbmV3IGFuZCBvbGQgbXVzdCBiZSBjb21taXQtaXNoIGFuZCBuZXcgaXMgZGVzY2VuZGFudCBvZgotCSAqIG9sZC4gIE90aGVyd2lzZSB3ZSByZXF1aXJlIC0tZm9yY2UuCi0JICovCi0JbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3Qob2xkX3NoYTEpLCBOVUxMLCAwKTsKLQlpZiAoIW8gfHwgby0+dHlwZSAhPSBPQkpfQ09NTUlUKQotCQlyZXR1cm4gMDsKLQlvbGQgPSAoc3RydWN0IGNvbW1pdCAqKSBvOwotCi0JbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3QobmV3X3NoYTEpLCBOVUxMLCAwKTsKLQlpZiAoIW8gfHwgby0+dHlwZSAhPSBPQkpfQ09NTUlUKQotCQlyZXR1cm4gMDsKLQluZXcgPSAoc3RydWN0IGNvbW1pdCAqKSBvOwotCi0JaWYgKHBhcnNlX2NvbW1pdChuZXcpIDwgMCkKLQkJcmV0dXJuIDA7Ci0KLQl1c2VkID0gbGlzdCA9IE5VTEw7Ci0JY29tbWl0X2xpc3RfaW5zZXJ0KG5ldywgJmxpc3QpOwotCXdoaWxlIChsaXN0KSB7Ci0JCW5ldyA9IHBvcF9tb3N0X3JlY2VudF9jb21taXQoJmxpc3QsIDEpOwotCQljb21taXRfbGlzdF9pbnNlcnQobmV3LCAmdXNlZCk7Ci0JCWlmIChuZXcgPT0gb2xkKSB7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQl1bm1hcmtfYW5kX2ZyZWUobGlzdCwgMSk7Ci0JdW5tYXJrX2FuZF9mcmVlKHVzZWQsIDEpOwotCXJldHVybiBmb3VuZDsKLX0KLQotc3RhdGljIHN0cnVjdCByZWYgKmxvY2FsX3JlZnMsICoqbG9jYWxfdGFpbDsKLXN0YXRpYyBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgKipyZW1vdGVfdGFpbDsKLQotc3RhdGljIGludCBvbmVfbG9jYWxfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQotewotCXN0cnVjdCByZWYgKnJlZjsKLQlpbnQgbGVuOwotCi0JLyogd2UgYWxyZWFkeSBrbm93IGl0IHN0YXJ0cyB3aXRoIHJlZnMvIHRvIGdldCBoZXJlICovCi0JaWYgKGNoZWNrX3JlZl9mb3JtYXQocmVmbmFtZSArIDUpKQotCQlyZXR1cm4gMDsKLQotCWxlbiA9IHN0cmxlbihyZWZuYW1lKSArIDE7Ci0JcmVmID0geGNhbGxvYygxLCBzaXplb2YoKnJlZikgKyBsZW4pOwotCWhhc2hjcHkocmVmLT5uZXdfc2hhMSwgc2hhMSk7Ci0JbWVtY3B5KHJlZi0+bmFtZSwgcmVmbmFtZSwgbGVuKTsKLQkqbG9jYWxfdGFpbCA9IHJlZjsKLQlsb2NhbF90YWlsID0gJnJlZi0+bmV4dDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZ2V0X2xvY2FsX2hlYWRzKHZvaWQpCi17Ci0JbG9jYWxfdGFpbCA9ICZsb2NhbF9yZWZzOwotCWZvcl9lYWNoX3JlZihvbmVfbG9jYWxfcmVmLCBOVUxMKTsKLX0KLQogc3RhdGljIGludCByZWNlaXZlX3N0YXR1cyhpbnQgaW4sIHN0cnVjdCByZWYgKnJlZnMpCiB7CiAJc3RydWN0IHJlZiAqaGludDsKQEAgLTI0NywyNSArMTcyLDE1IEBACiAJfQogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqcHJldHRpZnlfcmVmKGNvbnN0IHN0cnVjdCByZWYgKnJlZikKLXsKLQljb25zdCBjaGFyICpuYW1lID0gcmVmLT5uYW1lOwotCXJldHVybiBuYW1lICsgKAotCQkhcHJlZml4Y21wKG5hbWUsICJyZWZzL2hlYWRzLyIpID8gMTEgOgotCQkhcHJlZml4Y21wKG5hbWUsICJyZWZzL3RhZ3MvIikgPyAxMCA6Ci0JCSFwcmVmaXhjbXAobmFtZSwgInJlZnMvcmVtb3Rlcy8iKSA/IDEzIDoKLQkJMCk7Ci19Ci0KICNkZWZpbmUgU1VNTUFSWV9XSURUSCAoMiAqIERFRkFVTFRfQUJCUkVWICsgMykKIAogc3RhdGljIHZvaWQgcHJpbnRfcmVmX3N0YXR1cyhjaGFyIGZsYWcsIGNvbnN0IGNoYXIgKnN1bW1hcnksIHN0cnVjdCByZWYgKnRvLCBzdHJ1Y3QgcmVmICpmcm9tLCBjb25zdCBjaGFyICptc2cpCiB7CiAJZnByaW50ZihzdGRlcnIsICIgJWMgJS0qcyAiLCBmbGFnLCBTVU1NQVJZX1dJRFRILCBzdW1tYXJ5KTsKIAlpZiAoZnJvbSkKLQkJZnByaW50ZihzdGRlcnIsICIlcyAtPiAlcyIsIHByZXR0aWZ5X3JlZihmcm9tKSwgcHJldHRpZnlfcmVmKHRvKSk7CisJCWZwcmludGYoc3RkZXJyLCAiJXMgLT4gJXMiLCBwcmV0dGlmeV9yZWZuYW1lKGZyb20tPm5hbWUpLCBwcmV0dGlmeV9yZWZuYW1lKHRvLT5uYW1lKSk7CiAJZWxzZQotCQlmcHV0cyhwcmV0dGlmeV9yZWYodG8pLCBzdGRlcnIpOworCQlmcHV0cyhwcmV0dGlmeV9yZWZuYW1lKHRvLT5uYW1lKSwgc3RkZXJyKTsKIAlpZiAobXNnKSB7CiAJCWZwdXRzKCIgKCIsIHN0ZGVycik7CiAJCWZwdXRzKG1zZywgc3RkZXJyKTsKQEAgLTM4NSw0NyArMzAwLDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZG9fc2VuZF9wYWNrKGludCBpbiwgaW50IG91dCwgc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICpkZXN0LCBpbnQgbnJfcmVmc3BlYywgY29uc3QgY2hhciAqKnJlZnNwZWMpCitpbnQgc2VuZF9wYWNrKHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqYXJncywKKwkgICAgICBpbnQgZmRbXSwgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4sCisJICAgICAgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsCisJICAgICAgc3RydWN0IGV4dHJhX2hhdmVfb2JqZWN0cyAqZXh0cmFfaGF2ZSkKIHsKKwlpbnQgaW4gPSBmZFswXTsKKwlpbnQgb3V0ID0gZmRbMV07CiAJc3RydWN0IHJlZiAqcmVmOwogCWludCBuZXdfcmVmczsKIAlpbnQgYXNrX2Zvcl9zdGF0dXNfcmVwb3J0ID0gMDsKIAlpbnQgYWxsb3dfZGVsZXRpbmdfcmVmcyA9IDA7CiAJaW50IGV4cGVjdF9zdGF0dXNfcmVwb3J0ID0gMDsKLQlpbnQgZmxhZ3MgPSBNQVRDSF9SRUZTX05PTkU7CiAJaW50IHJldDsKLQlzdHJ1Y3QgZXh0cmFfaGF2ZV9vYmplY3RzIGV4dHJhX2hhdmU7Ci0KLQltZW1zZXQoJmV4dHJhX2hhdmUsIDAsIHNpemVvZihleHRyYV9oYXZlKSk7Ci0JaWYgKGFyZ3Muc2VuZF9hbGwpCi0JCWZsYWdzIHw9IE1BVENIX1JFRlNfQUxMOwotCWlmIChhcmdzLnNlbmRfbWlycm9yKQotCQlmbGFncyB8PSBNQVRDSF9SRUZTX01JUlJPUjsKLQotCS8qIE5vIGZ1bm55IGJ1c2luZXNzIHdpdGggdGhlIG1hdGNoZXIgKi8KLQlyZW1vdGVfdGFpbCA9IGdldF9yZW1vdGVfaGVhZHMoaW4sICZyZW1vdGVfcmVmcywgMCwgTlVMTCwgUkVGX05PUk1BTCwKLQkJCQkgICAgICAgJmV4dHJhX2hhdmUpOwotCWdldF9sb2NhbF9oZWFkcygpOwogCiAJLyogRG9lcyB0aGUgb3RoZXIgZW5kIHN1cHBvcnQgdGhlIHJlcG9ydGluZz8gKi8KIAlpZiAoc2VydmVyX3N1cHBvcnRzKCJyZXBvcnQtc3RhdHVzIikpCiAJCWFza19mb3Jfc3RhdHVzX3JlcG9ydCA9IDE7CiAJaWYgKHNlcnZlcl9zdXBwb3J0cygiZGVsZXRlLXJlZnMiKSkKIAkJYWxsb3dfZGVsZXRpbmdfcmVmcyA9IDE7Ci0KLQkvKiBtYXRjaCB0aGVtIHVwICovCi0JaWYgKCFyZW1vdGVfdGFpbCkKLQkJcmVtb3RlX3RhaWwgPSAmcmVtb3RlX3JlZnM7Ci0JaWYgKG1hdGNoX3JlZnMobG9jYWxfcmVmcywgcmVtb3RlX3JlZnMsICZyZW1vdGVfdGFpbCwKLQkJICAgICAgIG5yX3JlZnNwZWMsIHJlZnNwZWMsIGZsYWdzKSkgewotCQljbG9zZShvdXQpOwotCQlyZXR1cm4gLTE7Ci0JfQorCWlmIChzZXJ2ZXJfc3VwcG9ydHMoIm9mcy1kZWx0YSIpKQorCQlhcmdzLT51c2Vfb2ZzX2RlbHRhID0gMTsKIAogCWlmICghcmVtb3RlX3JlZnMpIHsKIAkJZnByaW50ZihzdGRlcnIsICJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iCiAJCQkiUGVyaGFwcyB5b3Ugc2hvdWxkIHNwZWNpZnkgYSBicmFuY2ggc3VjaCBhcyAnbWFzdGVyJy5cbiIpOwotCQljbG9zZShvdXQpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTQzNyw3ICszMzYsNyBAQAogCiAJCWlmIChyZWYtPnBlZXJfcmVmKQogCQkJaGFzaGNweShyZWYtPm5ld19zaGExLCByZWYtPnBlZXJfcmVmLT5uZXdfc2hhMSk7Ci0JCWVsc2UgaWYgKCFhcmdzLnNlbmRfbWlycm9yKQorCQllbHNlIGlmICghYXJncy0+c2VuZF9taXJyb3IpCiAJCQljb250aW51ZTsKIAogCQlyZWYtPmRlbGV0aW9uID0gaXNfbnVsbF9zaGExKHJlZi0+bmV3X3NoYTEpOwpAQCAtNDc2LDcgKzM3NSw3IEBACiAJCSAgICAoIWhhc19zaGExX2ZpbGUocmVmLT5vbGRfc2hhMSkKIAkJICAgICAgfHwgIXJlZl9uZXdlcihyZWYtPm5ld19zaGExLCByZWYtPm9sZF9zaGExKSk7CiAKLQkJaWYgKHJlZi0+bm9uZmFzdGZvcndhcmQgJiYgIXJlZi0+Zm9yY2UgJiYgIWFyZ3MuZm9yY2VfdXBkYXRlKSB7CisJCWlmIChyZWYtPm5vbmZhc3Rmb3J3YXJkICYmICFyZWYtPmZvcmNlICYmICFhcmdzLT5mb3JjZV91cGRhdGUpIHsKIAkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQ7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNDg0LDcgKzM4Myw3IEBACiAJCWlmICghcmVmLT5kZWxldGlvbikKIAkJCW5ld19yZWZzKys7CiAKLQkJaWYgKCFhcmdzLmRyeV9ydW4pIHsKKwkJaWYgKCFhcmdzLT5kcnlfcnVuKSB7CiAJCQljaGFyICpvbGRfaGV4ID0gc2hhMV90b19oZXgocmVmLT5vbGRfc2hhMSk7CiAJCQljaGFyICpuZXdfaGV4ID0gc2hhMV90b19oZXgocmVmLT5uZXdfc2hhMSk7CiAKQEAgLTUwNSwyNyArNDA0LDE5IEBACiAJfQogCiAJcGFja2V0X2ZsdXNoKG91dCk7Ci0JaWYgKG5ld19yZWZzICYmICFhcmdzLmRyeV9ydW4pIHsKLQkJaWYgKHBhY2tfb2JqZWN0cyhvdXQsIHJlbW90ZV9yZWZzLCAmZXh0cmFfaGF2ZSkgPCAwKQorCWlmIChuZXdfcmVmcyAmJiAhYXJncy0+ZHJ5X3J1bikgeworCQlpZiAocGFja19vYmplY3RzKG91dCwgcmVtb3RlX3JlZnMsIGV4dHJhX2hhdmUsIGFyZ3MpIDwgMCkgeworCQkJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCQkJcmVmLT5zdGF0dXMgPSBSRUZfU1RBVFVTX05PTkU7CiAJCQlyZXR1cm4gLTE7CisJCX0KIAl9Ci0JZWxzZQotCQljbG9zZShvdXQpOwogCiAJaWYgKGV4cGVjdF9zdGF0dXNfcmVwb3J0KQogCQlyZXQgPSByZWNlaXZlX3N0YXR1cyhpbiwgcmVtb3RlX3JlZnMpOwogCWVsc2UKIAkJcmV0ID0gMDsKIAotCXByaW50X3B1c2hfc3RhdHVzKGRlc3QsIHJlbW90ZV9yZWZzKTsKLQotCWlmICghYXJncy5kcnlfcnVuICYmIHJlbW90ZSkgewotCQlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKLQkJCXVwZGF0ZV90cmFja2luZ19yZWYocmVtb3RlLCByZWYpOwotCX0KLQotCWlmICghcmVmc19wdXNoZWQocmVtb3RlX3JlZnMpKQotCQlmcHJpbnRmKHN0ZGVyciwgIkV2ZXJ5dGhpbmcgdXAtdG8tZGF0ZVxuIik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKQEAgLTU3NCwxMSArNDY1LDE5IEBACiAKIGludCBjbWRfc2VuZF9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewotCWludCBpLCBucl9oZWFkcyA9IDA7Ci0JY29uc3QgY2hhciAqKmhlYWRzID0gTlVMTDsKKwlpbnQgaSwgbnJfcmVmc3BlY3MgPSAwOworCWNvbnN0IGNoYXIgKipyZWZzcGVjcyA9IE5VTEw7CiAJY29uc3QgY2hhciAqcmVtb3RlX25hbWUgPSBOVUxMOwogCXN0cnVjdCByZW1vdGUgKnJlbW90ZSA9IE5VTEw7CiAJY29uc3QgY2hhciAqZGVzdCA9IE5VTEw7CisJaW50IGZkWzJdOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uOworCXN0cnVjdCBleHRyYV9oYXZlX29iamVjdHMgZXh0cmFfaGF2ZTsKKwlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgKmxvY2FsX3JlZnM7CisJaW50IHJldDsKKwlpbnQgc2VuZF9hbGwgPSAwOworCWNvbnN0IGNoYXIgKnJlY2VpdmVwYWNrID0gImdpdC1yZWNlaXZlLXBhY2siOworCWludCBmbGFnczsKIAogCWFyZ3YrKzsKIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrLCBhcmd2KyspIHsKQEAgLTU4NiwxMSArNDg1LDExIEBACiAKIAkJaWYgKCphcmcgPT0gJy0nKSB7CiAJCQlpZiAoIXByZWZpeGNtcChhcmcsICItLXJlY2VpdmUtcGFjaz0iKSkgewotCQkJCWFyZ3MucmVjZWl2ZXBhY2sgPSBhcmcgKyAxNTsKKwkJCQlyZWNlaXZlcGFjayA9IGFyZyArIDE1OwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1leGVjPSIpKSB7Ci0JCQkJYXJncy5yZWNlaXZlcGFjayA9IGFyZyArIDc7CisJCQkJcmVjZWl2ZXBhY2sgPSBhcmcgKyA3OwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1yZW1vdGU9IikpIHsKQEAgLTU5OCw3ICs0OTcsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1hbGwiKSkgewotCQkJCWFyZ3Muc2VuZF9hbGwgPSAxOworCQkJCXNlbmRfYWxsID0gMTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICghc3RyY21wKGFyZywgIi0tZHJ5LXJ1biIpKSB7CkBAIC02MjcsOCArNTI2LDggQEAKIAkJCWRlc3QgPSBhcmc7CiAJCQljb250aW51ZTsKIAkJfQotCQloZWFkcyA9IChjb25zdCBjaGFyICoqKSBhcmd2OwotCQlucl9oZWFkcyA9IGFyZ2MgLSBpOworCQlyZWZzcGVjcyA9IChjb25zdCBjaGFyICoqKSBhcmd2OworCQlucl9yZWZzcGVjcyA9IGFyZ2MgLSBpOwogCQlicmVhazsKIAl9CiAJaWYgKCFkZXN0KQpAQCAtNjM3LDggKzUzNiw4IEBACiAJICogLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGU7IG5laXRoZXIgbWFrZXMgc2Vuc2UKIAkgKiB3aXRoIGFueSByZWZzcGVjcy4KIAkgKi8KLQlpZiAoKGhlYWRzICYmIChhcmdzLnNlbmRfYWxsIHx8IGFyZ3Muc2VuZF9taXJyb3IpKSB8fAotCQkJCQkoYXJncy5zZW5kX2FsbCAmJiBhcmdzLnNlbmRfbWlycm9yKSkKKwlpZiAoKHJlZnNwZWNzICYmIChzZW5kX2FsbCB8fCBhcmdzLnNlbmRfbWlycm9yKSkgfHwKKwkgICAgKHNlbmRfYWxsICYmIGFyZ3Muc2VuZF9taXJyb3IpKQogCQl1c2FnZShzZW5kX3BhY2tfdXNhZ2UpOwogCiAJaWYgKHJlbW90ZV9uYW1lKSB7CkBAIC02NDksMjQgKzU0OCw0NSBAQAogCQl9CiAJfQogCi0JcmV0dXJuIHNlbmRfcGFjaygmYXJncywgZGVzdCwgcmVtb3RlLCBucl9oZWFkcywgaGVhZHMpOwotfQorCWNvbm4gPSBnaXRfY29ubmVjdChmZCwgZGVzdCwgcmVjZWl2ZXBhY2ssIGFyZ3MudmVyYm9zZSA/IENPTk5FQ1RfVkVSQk9TRSA6IDApOwogCi1pbnQgc2VuZF9wYWNrKHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqbXlfYXJncywKLQkgICAgICBjb25zdCBjaGFyICpkZXN0LCBzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsCi0JICAgICAgaW50IG5yX2hlYWRzLCBjb25zdCBjaGFyICoqaGVhZHMpCi17Ci0JaW50IGZkWzJdLCByZXQ7Ci0Jc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm47CisJbWVtc2V0KCZleHRyYV9oYXZlLCAwLCBzaXplb2YoZXh0cmFfaGF2ZSkpOwogCi0JbWVtY3B5KCZhcmdzLCBteV9hcmdzLCBzaXplb2YoYXJncykpOworCWdldF9yZW1vdGVfaGVhZHMoZmRbMF0sICZyZW1vdGVfcmVmcywgMCwgTlVMTCwgUkVGX05PUk1BTCwKKwkJCSAmZXh0cmFfaGF2ZSk7CiAKLQl2ZXJpZnlfcmVtb3RlX25hbWVzKG5yX2hlYWRzLCBoZWFkcyk7CisJdmVyaWZ5X3JlbW90ZV9uYW1lcyhucl9yZWZzcGVjcywgcmVmc3BlY3MpOwogCi0JY29ubiA9IGdpdF9jb25uZWN0KGZkLCBkZXN0LCBhcmdzLnJlY2VpdmVwYWNrLCBhcmdzLnZlcmJvc2UgPyBDT05ORUNUX1ZFUkJPU0UgOiAwKTsKLQlyZXQgPSBkb19zZW5kX3BhY2soZmRbMF0sIGZkWzFdLCByZW1vdGUsIGRlc3QsIG5yX2hlYWRzLCBoZWFkcyk7CisJbG9jYWxfcmVmcyA9IGdldF9sb2NhbF9oZWFkcygpOworCisJZmxhZ3MgPSBNQVRDSF9SRUZTX05PTkU7CisKKwlpZiAoc2VuZF9hbGwpCisJCWZsYWdzIHw9IE1BVENIX1JFRlNfQUxMOworCWlmIChhcmdzLnNlbmRfbWlycm9yKQorCQlmbGFncyB8PSBNQVRDSF9SRUZTX01JUlJPUjsKKworCS8qIG1hdGNoIHRoZW0gdXAgKi8KKwlpZiAobWF0Y2hfcmVmcyhsb2NhbF9yZWZzLCAmcmVtb3RlX3JlZnMsIG5yX3JlZnNwZWNzLCByZWZzcGVjcywgZmxhZ3MpKQorCQlyZXR1cm4gLTE7CisKKwlyZXQgPSBzZW5kX3BhY2soJmFyZ3MsIGZkLCBjb25uLCByZW1vdGVfcmVmcywgJmV4dHJhX2hhdmUpOworCisJY2xvc2UoZmRbMV0pOwogCWNsb3NlKGZkWzBdKTsKLQkvKiBkb19zZW5kX3BhY2sgYWx3YXlzIGNsb3NlcyBmZFsxXSAqLworCiAJcmV0IHw9IGZpbmlzaF9jb25uZWN0KGNvbm4pOwotCXJldHVybiAhIXJldDsKKworCXByaW50X3B1c2hfc3RhdHVzKGRlc3QsIHJlbW90ZV9yZWZzKTsKKworCWlmICghYXJncy5kcnlfcnVuICYmIHJlbW90ZSkgeworCQlzdHJ1Y3QgcmVmICpyZWY7CisJCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQkJdXBkYXRlX3RyYWNraW5nX3JlZihyZW1vdGUsIHJlZik7CisJfQorCisJaWYgKCFyZXQgJiYgIXJlZnNfcHVzaGVkKHJlbW90ZV9yZWZzKSkKKwkJZnByaW50ZihzdGRlcnIsICJFdmVyeXRoaW5nIHVwLXRvLWRhdGVcbiIpOworCisJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tc2hvcnRsb2cuYyBiL2J1aWx0aW4tc2hvcnRsb2cuYwppbmRleCBlNDkyOTA2Li42YTM4MTJlIDEwMDY0NAotLS0gYS9idWlsdGluLXNob3J0bG9nLmMKKysrIGIvYnVpbHRpbi1zaG9ydGxvZy5jCkBAIC0zOSw4ICszOSw4IEBACiAJY29uc3QgY2hhciAqZG90MyA9IGxvZy0+Y29tbW9uX3JlcG9fcHJlZml4OwogCWNoYXIgKmJ1ZmZlciwgKnA7CiAJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07Ci0Jc3RydWN0IHN0cmluZ19saXN0ICpvbmVsaW5lczsKIAljaGFyIG5hbWVidWZbMTAyNF07CisJY2hhciBlbWFpbGJ1ZlsxMDI0XTsKIAlzaXplX3QgbGVuOwogCWNvbnN0IGNoYXIgKmVvbDsKIAljb25zdCBjaGFyICpib2VtYWlsLCAqZW9lbWFpbDsKQEAgLTUyLDcgKzUyLDE5IEBACiAJZW9lbWFpbCA9IHN0cmNocihib2VtYWlsLCAnPicpOwogCWlmICghZW9lbWFpbCkKIAkJcmV0dXJuOwotCWlmICghbWFwX2VtYWlsKCZsb2ctPm1haWxtYXAsIGJvZW1haWwrMSwgbmFtZWJ1Ziwgc2l6ZW9mKG5hbWVidWYpKSkgeworCisJLyogY29weSBhdXRob3IgbmFtZSB0byBuYW1lYnVmLCB0byBzdXBwb3J0IG1hdGNoaW5nIG9uIGJvdGggbmFtZSBhbmQgZW1haWwgKi8KKwltZW1jcHkobmFtZWJ1ZiwgYXV0aG9yLCBib2VtYWlsIC0gYXV0aG9yKTsKKwlsZW4gPSBib2VtYWlsIC0gYXV0aG9yOworCXdoaWxlKGxlbiA+IDAgJiYgaXNzcGFjZShuYW1lYnVmW2xlbi0xXSkpCisJCWxlbi0tOworCW5hbWVidWZbbGVuXSA9IDA7CisKKwkvKiBjb3B5IGVtYWlsIG5hbWUgdG8gZW1haWxidWYsIHRvIGFsbG93IGVtYWlsIHJlcGxhY2VtZW50IGFzIHdlbGwgKi8KKwltZW1jcHkoZW1haWxidWYsIGJvZW1haWwrMSwgZW9lbWFpbCAtIGJvZW1haWwpOworCWVtYWlsYnVmW2VvZW1haWwgLSBib2VtYWlsIC0gMV0gPSAwOworCisJaWYgKCFtYXBfdXNlcigmbG9nLT5tYWlsbWFwLCBlbWFpbGJ1Ziwgc2l6ZW9mKGVtYWlsYnVmKSwgbmFtZWJ1Ziwgc2l6ZW9mKG5hbWVidWYpKSkgewogCQl3aGlsZSAoYXV0aG9yIDwgYm9lbWFpbCAmJiBpc3NwYWNlKCphdXRob3IpKQogCQkJYXV0aG9yKys7CiAJCWZvciAobGVuID0gMDsKQEAgLTY4LDE2ICs4MCwxMyBAQAogCiAJaWYgKGxvZy0+ZW1haWwpIHsKIAkJc2l6ZV90IHJvb20gPSBzaXplb2YobmFtZWJ1ZikgLSBsZW4gLSAxOwotCQlpbnQgbWFpbGxlbiA9IGVvZW1haWwgLSBib2VtYWlsICsgMTsKLQkJc25wcmludGYobmFtZWJ1ZiArIGxlbiwgcm9vbSwgIiAlLipzIiwgbWFpbGxlbiwgYm9lbWFpbCk7CisJCWludCBtYWlsbGVuID0gc3RybGVuKGVtYWlsYnVmKTsKKwkJc25wcmludGYobmFtZWJ1ZiArIGxlbiwgcm9vbSwgIiA8JS4qcz4iLCBtYWlsbGVuLCBlbWFpbGJ1Zik7CiAJfQogCi0JYnVmZmVyID0geHN0cmR1cChuYW1lYnVmKTsKLQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KGJ1ZmZlciwgJmxvZy0+bGlzdCk7CisJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChuYW1lYnVmLCAmbG9nLT5saXN0KTsKIAlpZiAoaXRlbS0+dXRpbCA9PSBOVUxMKQogCQlpdGVtLT51dGlsID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0KSk7Ci0JZWxzZQotCQlmcmVlKGJ1ZmZlcik7CiAKIAkvKiBTa2lwIGFueSBsZWFkaW5nIHdoaXRlc3BhY2UsIGluY2x1ZGluZyBhbnkgYmxhbmsgbGluZXMuICovCiAJd2hpbGUgKCpvbmVsaW5lICYmIGlzc3BhY2UoKm9uZWxpbmUpKQpAQCAtOTIsNyArMTAxLDYgQEAKIAl9CiAJd2hpbGUgKCpvbmVsaW5lICYmIGlzc3BhY2UoKm9uZWxpbmUpICYmICpvbmVsaW5lICE9ICdcbicpCiAJCW9uZWxpbmUrKzsKLQlsZW4gPSBlb2wgLSBvbmVsaW5lOwogCWZvcm1hdF9zdWJqZWN0KCZzdWJqZWN0LCBvbmVsaW5lLCAiICIpOwogCWJ1ZmZlciA9IHN0cmJ1Zl9kZXRhY2goJnN1YmplY3QsIE5VTEwpOwogCkBAIC0xMDcsMTYgKzExNSw3IEBACiAJCX0KIAl9CiAKLQlvbmVsaW5lcyA9IGl0ZW0tPnV0aWw7Ci0JaWYgKG9uZWxpbmVzLT5uciA+PSBvbmVsaW5lcy0+YWxsb2MpIHsKLQkJb25lbGluZXMtPmFsbG9jID0gYWxsb2NfbnIob25lbGluZXMtPm5yKTsKLQkJb25lbGluZXMtPml0ZW1zID0geHJlYWxsb2Mob25lbGluZXMtPml0ZW1zLAotCQkJCW9uZWxpbmVzLT5hbGxvYwotCQkJCSogc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtKSk7Ci0JfQotCi0Jb25lbGluZXMtPml0ZW1zW29uZWxpbmVzLT5ucl0udXRpbCA9IE5VTEw7Ci0Jb25lbGluZXMtPml0ZW1zW29uZWxpbmVzLT5ucisrXS5zdHJpbmcgPSBidWZmZXI7CisJc3RyaW5nX2xpc3RfYXBwZW5kKGJ1ZmZlciwgaXRlbS0+dXRpbCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlYWRfZnJvbV9zdGRpbihzdHJ1Y3Qgc2hvcnRsb2cgKmxvZykKQEAgLTIzMiw3ICsyMzEsNyBAQAogewogCW1lbXNldChsb2csIDAsIHNpemVvZigqbG9nKSk7CiAKLQlyZWFkX21haWxtYXAoJmxvZy0+bWFpbG1hcCwgIi5tYWlsbWFwIiwgJmxvZy0+Y29tbW9uX3JlcG9fcHJlZml4KTsKKwlyZWFkX21haWxtYXAoJmxvZy0+bWFpbG1hcCwgJmxvZy0+Y29tbW9uX3JlcG9fcHJlZml4KTsKIAogCWxvZy0+bGlzdC5zdHJkdXBfc3RyaW5ncyA9IDE7CiAJbG9nLT53cmFwID0gREVGQVVMVF9XUkFQTEVOOwpAQCAtMjYxLDkgKzI2MCwxMCBAQAogCXN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgY3R4OwogCiAJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdCk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCXNob3J0bG9nX2luaXQoJmxvZyk7CiAJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKLQlwYXJzZV9vcHRpb25zX3N0YXJ0KCZjdHgsIGFyZ2MsIGFyZ3YsIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwKKwlwYXJzZV9vcHRpb25zX3N0YXJ0KCZjdHgsIGFyZ2MsIGFyZ3YsIHByZWZpeCwgUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfAogCQkJICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKIAogCWZvciAoOzspIHsKQEAgLTMyNiwxMyArMzI2LDEyIEBACiAJCX0KIAogCQlvbmVsaW5lcy0+c3RyZHVwX3N0cmluZ3MgPSAxOwotCQlzdHJpbmdfbGlzdF9jbGVhcihvbmVsaW5lcywgMSk7CisJCXN0cmluZ19saXN0X2NsZWFyKG9uZWxpbmVzLCAwKTsKIAkJZnJlZShvbmVsaW5lcyk7CiAJCWxvZy0+bGlzdC5pdGVtc1tpXS51dGlsID0gTlVMTDsKIAl9CiAKIAlsb2ctPmxpc3Quc3RyZHVwX3N0cmluZ3MgPSAxOwogCXN0cmluZ19saXN0X2NsZWFyKCZsb2ctPmxpc3QsIDEpOwotCWxvZy0+bWFpbG1hcC5zdHJkdXBfc3RyaW5ncyA9IDE7Ci0Jc3RyaW5nX2xpc3RfY2xlYXIoJmxvZy0+bWFpbG1hcCwgMSk7CisJY2xlYXJfbWFpbG1hcCgmbG9nLT5tYWlsbWFwKTsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tc2hvdy1icmFuY2guYyBiL2J1aWx0aW4tc2hvdy1icmFuY2guYwppbmRleCAzMDZiODUwLi4wMWJlYTNiIDEwMDY0NAotLS0gYS9idWlsdGluLXNob3ctYnJhbmNoLmMKKysrIGIvYnVpbHRpbi1zaG93LWJyYW5jaC5jCkBAIC0yLDExICsyLDI2IEBACiAjaW5jbHVkZSAiY29tbWl0LmgiCiAjaW5jbHVkZSAicmVmcy5oIgogI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAotc3RhdGljIGNvbnN0IGNoYXIgc2hvd19icmFuY2hfdXNhZ2VbXSA9Ci0iZ2l0IHNob3ctYnJhbmNoIFstLXNwYXJzZV0gWy0tY3VycmVudF0gWy0tYWxsXSBbLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyXSBbLS1tb3JlPWNvdW50IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZSBdIFstLXRvcGljc10gWzxyZWZzPi4uLl0gfCAtLXJlZmxvZ1s9blssYl1dIDxicmFuY2g+IjsKLXN0YXRpYyBjb25zdCBjaGFyIHNob3dfYnJhbmNoX3VzYWdlX3JlZmxvZ1tdID0KLSItLXJlZmxvZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtYmFzZSI7CitzdGF0aWMgY29uc3QgY2hhciogc2hvd19icmFuY2hfdXNhZ2VbXSA9IHsKKyAgICAiZ2l0IHNob3ctYnJhbmNoIFstLXNwYXJzZV0gWy0tY3VycmVudF0gWy0tYWxsXSBbLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyXSBbLS1tb3JlPWNvdW50IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV0gWy0tdG9waWNzXSBbLS1jb2xvcl0gWzxyZWZzPi4uLl0iLAorICAgICItLXJlZmxvZ1s9blssYl1dIFstLWxpc3RdIFstLWNvbG9yXSA8YnJhbmNoPiIsCisgICAgTlVMTAorfTsKKworc3RhdGljIGludCBzaG93YnJhbmNoX3VzZV9jb2xvciA9IC0xOworc3RhdGljIGNoYXIgY29sdW1uX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CisJR0lUX0NPTE9SX1JFRCwKKwlHSVRfQ09MT1JfR1JFRU4sCisJR0lUX0NPTE9SX1lFTExPVywKKwlHSVRfQ09MT1JfQkxVRSwKKwlHSVRfQ09MT1JfTUFHRU5UQSwKKwlHSVRfQ09MT1JfQ1lBTiwKK307CisKKyNkZWZpbmUgQ09MVU1OX0NPTE9SU19NQVggKEFSUkFZX1NJWkUoY29sdW1uX2NvbG9ycykpCiAKIHN0YXRpYyBpbnQgZGVmYXVsdF9udW07CiBzdGF0aWMgaW50IGRlZmF1bHRfYWxsb2M7CkBAIC0xOSw2ICszNCwyMCBAQAogCiAjZGVmaW5lIERFRkFVTFRfUkVGTE9HCTQKIAorc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9jb2RlKGludCBpZHgpCit7CisJaWYgKHNob3dicmFuY2hfdXNlX2NvbG9yKQorCQlyZXR1cm4gY29sdW1uX2NvbG9yc1tpZHhdOworCXJldHVybiAiIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9yZXNldF9jb2RlKHZvaWQpCit7CisJaWYgKHNob3dicmFuY2hfdXNlX2NvbG9yKQorCQlyZXR1cm4gR0lUX0NPTE9SX1JFU0VUOworCXJldHVybiAiIjsKK30KKwogc3RhdGljIHN0cnVjdCBjb21taXQgKmludGVyZXN0aW5nKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKIHsKIAl3aGlsZSAobGlzdCkgewpAQCAtMzY1LDggKzM5NCw3IEBACiAJCQkJcmV0dXJuIDA7CiAJfQogCWlmIChNQVhfUkVWUyA8PSByZWZfbmFtZV9jbnQpIHsKLQkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBpZ25vcmluZyAlczsgIgotCQkJImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZnNcbiIsCisJCXdhcm5pbmcoImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWZzIiwKIAkJCXJlZm5hbWUsIE1BWF9SRVZTKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNTQ2LDcgKzU3NCwxMiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5zaG93YnJhbmNoIikpIHsKKwkJc2hvd2JyYW5jaF91c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlLCAtMSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiBzdGF0aWMgaW50IG9taXRfaW5fZGVuc2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0ICoqcmV2LCBpbnQgbikKQEAgLTU3MCwxOCArNjAzLDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnNlX3JlZmxvZ19wYXJhbShjb25zdCBjaGFyICphcmcsIGludCAqY250LCBjb25zdCBjaGFyICoqYmFzZSkKK3N0YXRpYyBpbnQgcmVmbG9nID0gMDsKKworc3RhdGljIGludCBwYXJzZV9yZWZsb2dfcGFyYW0oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgICBpbnQgdW5zZXQpCiB7CiAJY2hhciAqZXA7Ci0JKmNudCA9IHN0cnRvdWwoYXJnLCAmZXAsIDEwKTsKKwljb25zdCBjaGFyICoqYmFzZSA9IChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWU7CisJaWYgKCFhcmcpCisJCWFyZyA9ICIiOworCXJlZmxvZyA9IHN0cnRvdWwoYXJnLCAmZXAsIDEwKTsKIAlpZiAoKmVwID09ICcsJykKIAkJKmJhc2UgPSBlcCArIDE7CiAJZWxzZSBpZiAoKmVwKQotCQlkaWUoInVucmVjb2duaXplZCByZWZsb2cgcGFyYW0gJyVzJyIsIGFyZyArIDkpOworCQlyZXR1cm4gZXJyb3IoInVucmVjb2duaXplZCByZWZsb2cgcGFyYW0gJyVzJyIsIGFyZyk7CiAJZWxzZQogCQkqYmFzZSA9IE5VTEw7Ci0JaWYgKCpjbnQgPD0gMCkKLQkJKmNudCA9IERFRkFVTFRfUkVGTE9HOworCWlmIChyZWZsb2cgPD0gMCkKKwkJcmVmbG9nID0gREVGQVVMVF9SRUZMT0c7CisJcmV0dXJuIDA7CiB9CiAKIGludCBjbWRfc2hvd19icmFuY2goaW50IGFjLCBjb25zdCBjaGFyICoqYXYsIGNvbnN0IGNoYXIgKnByZWZpeCkKQEAgLTYwNyw3MCArNjQ3LDY3IEBACiAJaW50IGhlYWRfYXQgPSAtMTsKIAlpbnQgdG9waWNzID0gMDsKIAlpbnQgZGVuc2UgPSAxOwotCWludCByZWZsb2cgPSAwOwogCWNvbnN0IGNoYXIgKnJlZmxvZ19iYXNlID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fc2hvd19icmFuY2hfb3B0aW9uc1tdID0geworCQlPUFRfQk9PTEVBTignYScsICJhbGwiLCAmYWxsX2hlYWRzLAorCQkJICAgICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiKSwKKwkJT1BUX0JPT0xFQU4oJ3InLCAicmVtb3RlcyIsICZhbGxfcmVtb3RlcywKKwkJCSAgICAic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiKSwKKwkJT1BUX0JPT0xFQU4oMCwgImNvbG9yIiwgJnNob3dicmFuY2hfdXNlX2NvbG9yLAorCQkJICAgICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIiksCisJCXsgT1BUSU9OX0lOVEVHRVIsIDAsICJtb3JlIiwgJmV4dHJhLCAibiIsCisJCQkgICAgInNob3cgPG4+IG1vcmUgY29tbWl0cyBhZnRlciB0aGUgY29tbW9uIGFuY2VzdG9yIiwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpMSB9LAorCQlPUFRfU0VUX0lOVCgwLCAibGlzdCIsICZleHRyYSwgInN5bm9ueW0gdG8gbW9yZT0tMSIsIC0xKSwKKwkJT1BUX0JPT0xFQU4oMCwgIm5vLW5hbWUiLCAmbm9fbmFtZSwgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIiksCisJCU9QVF9CT09MRUFOKDAsICJjdXJyZW50IiwgJndpdGhfY3VycmVudF9icmFuY2gsCisJCQkgICAgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIiksCisJCU9QVF9CT09MRUFOKDAsICJzaGExLW5hbWUiLCAmc2hhMV9uYW1lLAorCQkJICAgICJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiKSwKKwkJT1BUX0JPT0xFQU4oMCwgIm1lcmdlLWJhc2UiLCAmbWVyZ2VfYmFzZSwKKwkJCSAgICAiYWN0IGxpa2UgZ2l0IG1lcmdlLWJhc2UgLWEiKSwKKwkJT1BUX0JPT0xFQU4oMCwgImluZGVwZW5kZW50IiwgJmluZGVwZW5kZW50LAorCQkJICAgICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIiksCisJCU9QVF9CT09MRUFOKDAsICJ0b3BvLW9yZGVyIiwgJmxpZm8sCisJCQkgICAgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIpLAorCQlPUFRfQk9PTEVBTigwLCAidG9waWNzIiwgJnRvcGljcywKKwkJCSAgICAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giKSwKKwkJT1BUX1NFVF9JTlQoMCwgInNwYXJzZSIsICZkZW5zZSwKKwkJCSAgICAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIiwgMCksCisJCU9QVF9TRVRfSU5UKDAsICJkYXRlLW9yZGVyIiwgJmxpZm8sCisJCQkgICAgInNob3cgY29tbWl0cyB3aGVyZSBubyBwYXJlbnQgY29tZXMgYmVmb3JlIGl0cyAiCisJCQkgICAgImNoaWxkcmVuIiwgMCksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnZycsICJyZWZsb2ciLCAmcmVmbG9nX2Jhc2UsICI8bj5bLDxiYXNlPl0iLAorCQkJICAgICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgIgorCQkJICAgICJiYXNlIiwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX0xJVEVSQUxfQVJHSEVMUCwKKwkJCSAgICBwYXJzZV9yZWZsb2dfcGFyYW0gfSwKKwkJT1BUX0VORCgpCisJfTsKIAogCWdpdF9jb25maWcoZ2l0X3Nob3dfYnJhbmNoX2NvbmZpZywgTlVMTCk7CiAKKwlpZiAoc2hvd2JyYW5jaF91c2VfY29sb3IgPT0gLTEpCisJCXNob3dicmFuY2hfdXNlX2NvbG9yID0gZ2l0X3VzZV9jb2xvcl9kZWZhdWx0OworCiAJLyogSWYgbm90aGluZyBpcyBzcGVjaWZpZWQsIHRyeSB0aGUgZGVmYXVsdCBmaXJzdCAqLwogCWlmIChhYyA9PSAxICYmIGRlZmF1bHRfbnVtKSB7CiAJCWFjID0gZGVmYXVsdF9udW0gKyAxOwogCQlhdiA9IGRlZmF1bHRfYXJnIC0gMTsgLyogaWNrOyB3ZSB3b3VsZCBub3QgYWRkcmVzcyBhdlswXSAqLwogCX0KIAotCXdoaWxlICgxIDwgYWMgJiYgYXZbMV1bMF0gPT0gJy0nKSB7Ci0JCWNvbnN0IGNoYXIgKmFyZyA9IGF2WzFdOwotCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7Ci0JCQlhYy0tOyBhdisrOwotCQkJYnJlYWs7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpIHx8ICFzdHJjbXAoYXJnLCAiLWEiKSkKLQkJCWFsbF9oZWFkcyA9IGFsbF9yZW1vdGVzID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlbW90ZXMiKSB8fCAhc3RyY21wKGFyZywgIi1yIikpCi0JCQlhbGxfcmVtb3RlcyA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1tb3JlIikpCi0JCQlleHRyYSA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1saXN0IikpCi0JCQlleHRyYSA9IC0xOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tbmFtZSIpKQotCQkJbm9fbmFtZSA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jdXJyZW50IikpCi0JCQl3aXRoX2N1cnJlbnRfYnJhbmNoID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXNoYTEtbmFtZSIpKQotCQkJc2hhMV9uYW1lID0gMTsKLQkJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLW1vcmU9IikpCi0JCQlleHRyYSA9IGF0b2koYXJnICsgNyk7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1tZXJnZS1iYXNlIikpCi0JCQltZXJnZV9iYXNlID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWluZGVwZW5kZW50IikpCi0JCQlpbmRlcGVuZGVudCA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS10b3BvLW9yZGVyIikpCi0JCQlsaWZvID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXRvcGljcyIpKQotCQkJdG9waWNzID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXNwYXJzZSIpKQotCQkJZGVuc2UgPSAwOwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tZGF0ZS1vcmRlciIpKQotCQkJbGlmbyA9IDA7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yZWZsb2ciKSB8fCAhc3RyY21wKGFyZywgIi1nIikpIHsKLQkJCXJlZmxvZyA9IERFRkFVTFRfUkVGTE9HOwotCQl9Ci0JCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1yZWZsb2c9IikpCi0JCQlwYXJzZV9yZWZsb2dfcGFyYW0oYXJnICsgOSwgJnJlZmxvZywgJnJlZmxvZ19iYXNlKTsKLQkJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItZz0iKSkKLQkJCXBhcnNlX3JlZmxvZ19wYXJhbShhcmcgKyAzLCAmcmVmbG9nLCAmcmVmbG9nX2Jhc2UpOwotCQllbHNlCi0JCQl1c2FnZShzaG93X2JyYW5jaF91c2FnZSk7Ci0JCWFjLS07IGF2Kys7Ci0JfQotCWFjLS07IGF2Kys7CisJYWMgPSBwYXJzZV9vcHRpb25zKGFjLCBhdiwgcHJlZml4LCBidWlsdGluX3Nob3dfYnJhbmNoX29wdGlvbnMsCisJCQkgICBzaG93X2JyYW5jaF91c2FnZSwgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisJaWYgKGFsbF9oZWFkcykKKwkJYWxsX3JlbW90ZXMgPSAxOwogCiAJaWYgKGV4dHJhIHx8IHJlZmxvZykgewogCQkvKiAibGlzdGluZyIgbW9kZSBpcyBpbmNvbXBhdGlibGUgd2l0aAogCQkgKiBpbmRlcGVuZGVudCBub3IgbWVyZ2UtYmFzZSBtb2Rlcy4KIAkJICovCiAJCWlmIChpbmRlcGVuZGVudCB8fCBtZXJnZV9iYXNlKQotCQkJdXNhZ2Uoc2hvd19icmFuY2hfdXNhZ2UpOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHNob3dfYnJhbmNoX3VzYWdlLAorCQkJCQkgICBidWlsdGluX3Nob3dfYnJhbmNoX29wdGlvbnMpOwogCQlpZiAocmVmbG9nICYmICgoMCA8IGV4dHJhKSB8fCBhbGxfaGVhZHMgfHwgYWxsX3JlbW90ZXMpKQogCQkJLyoKIAkJCSAqIEFza2luZyBmb3IgLS1tb3JlIGluIHJlZmxvZyBtb2RlIGRvZXMgbm90CkBAIC02NzgsNyArNzE1LDggQEAKIAkJCSAqCiAJCQkgKiBBbHNvIC0tYWxsIGFuZCAtLXJlbW90ZXMgZG8gbm90IG1ha2Ugc2Vuc2UgZWl0aGVyLgogCQkJICovCi0JCQl1c2FnZShzaG93X2JyYW5jaF91c2FnZV9yZWZsb2cpOworCQkJZGllKCItLXJlZmxvZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1yZW1vdGVzLCAiCisJCQkgICAgIi0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS1iYXNlIik7CiAJfQogCiAJLyogSWYgbm90aGluZyBpcyBzcGVjaWZpZWQsIHNob3cgYWxsIGJyYW5jaGVzIGJ5IGRlZmF1bHQgKi8KQEAgLTg0NCw4ICs4ODIsMTAgQEAKIAkJCWVsc2UgewogCQkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCiAJCQkJCXB1dGNoYXIoJyAnKTsKLQkJCQlwcmludGYoIiVjIFslc10gIiwKLQkJCQkgICAgICAgaXNfaGVhZCA/ICcqJyA6ICchJywgcmVmX25hbWVbaV0pOworCQkJCXByaW50ZigiJXMlYyVzIFslc10gIiwKKwkJCQkgICAgICAgZ2V0X2NvbG9yX2NvZGUoaSAlIENPTFVNTl9DT0xPUlNfTUFYKSwKKwkJCQkgICAgICAgaXNfaGVhZCA/ICcqJyA6ICchJywKKwkJCQkgICAgICAgZ2V0X2NvbG9yX3Jlc2V0X2NvZGUoKSwgcmVmX25hbWVbaV0pOwogCQkJfQogCiAJCQlpZiAoIXJlZmxvZykgewpAQCAtOTA0LDcgKzk0NCw5IEBACiAJCQkJCW1hcmsgPSAnKic7CiAJCQkJZWxzZQogCQkJCQltYXJrID0gJysnOwotCQkJCXB1dGNoYXIobWFyayk7CisJCQkJcHJpbnRmKCIlcyVjJXMiLAorCQkJCSAgICAgICBnZXRfY29sb3JfY29kZShpICUgQ09MVU1OX0NPTE9SU19NQVgpLAorCQkJCSAgICAgICBtYXJrLCBnZXRfY29sb3JfcmVzZXRfY29kZSgpKTsKIAkJCX0KIAkJCXB1dGNoYXIoJyAnKTsKIAkJfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1zaG93LXJlZi5jIGIvYnVpbHRpbi1zaG93LXJlZi5jCmluZGV4IDU3MmIxMTQuLmM0NjU1MGMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tc2hvdy1yZWYuYworKysgYi9idWlsdGluLXNob3ctcmVmLmMKQEAgLTQsMTIgKzQsMTggQEAKICNpbmNsdWRlICJvYmplY3QuaCIKICNpbmNsdWRlICJ0YWcuaCIKICNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAotc3RhdGljIGNvbnN0IGNoYXIgc2hvd19yZWZfdXNhZ2VbXSA9ICJnaXQgc2hvdy1yZWYgWy1xfC0tcXVpZXRdIFstLXZlcmlmeV0gWy1ofC0taGVhZF0gWy1kfC0tZGVyZWZlcmVuY2VdIFstc3wtLWhhc2hbPTxsZW5ndGg+XV0gWy0tYWJicmV2Wz08bGVuZ3RoPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFtwYXR0ZXJuKl0gPCByZWYtbGlzdCI7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNob3dfcmVmX3VzYWdlW10gPSB7CisJImdpdCBzaG93LXJlZiBbLXF8LS1xdWlldF0gWy0tdmVyaWZ5XSBbLWh8LS1oZWFkXSBbLWR8LS1kZXJlZmVyZW5jZV0gWy1zfC0taGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbcGF0dGVybipdICIsCisJImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPXBhdHRlcm5dIDwgcmVmLWxpc3QiLAorCU5VTEwKK307CiAKLXN0YXRpYyBpbnQgZGVyZWZfdGFncyA9IDAsIHNob3dfaGVhZCA9IDAsIHRhZ3Nfb25seSA9IDAsIGhlYWRzX29ubHkgPSAwLAotCWZvdW5kX21hdGNoID0gMCwgdmVyaWZ5ID0gMCwgcXVpZXQgPSAwLCBoYXNoX29ubHkgPSAwLCBhYmJyZXYgPSAwOworc3RhdGljIGludCBkZXJlZl90YWdzLCBzaG93X2hlYWQsIHRhZ3Nfb25seSwgaGVhZHNfb25seSwgZm91bmRfbWF0Y2gsIHZlcmlmeSwKKwkgICBxdWlldCwgaGFzaF9vbmx5LCBhYmJyZXYsIGV4Y2x1ZGVfYXJnOwogc3RhdGljIGNvbnN0IGNoYXIgKipwYXR0ZXJuOworc3RhdGljIGNvbnN0IGNoYXIgKmV4Y2x1ZGVfZXhpc3RpbmdfYXJnOwogCiBzdGF0aWMgdm9pZCBzaG93X29uZShjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQogewpAQCAtMTQwLDcgKzE0Niw3IEBACiAJCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGNoZWNrX3JlZl9mb3JtYXQocmVmKSkgewotCQkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiByZWYgJyVzJyBpZ25vcmVkXG4iLCByZWYpOworCQkJd2FybmluZygicmVmICclcycgaWdub3JlZCIsIHJlZik7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoIXN0cmluZ19saXN0X2hhc19zdHJpbmcoJmV4aXN0aW5nX3JlZnMsIHJlZikpIHsKQEAgLTE1MCw3OSArMTU2LDYwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaGFzaF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWhhc2hfb25seSA9IDE7CisJLyogVXNlIGZ1bGwgbGVuZ3RoIFNIQTEgaWYgbm8gYXJndW1lbnQgKi8KKwlpZiAoIWFyZykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBhcnNlX29wdF9hYmJyZXZfY2Iob3B0LCBhcmcsIHVuc2V0KTsKK30KKworc3RhdGljIGludCBleGNsdWRlX2V4aXN0aW5nX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCSAgICAgaW50IHVuc2V0KQoreworCWV4Y2x1ZGVfYXJnID0gMTsKKwkqKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZWxwX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBzaG93X3JlZl9vcHRpb25zW10gPSB7CisJT1BUX0JPT0xFQU4oMCwgInRhZ3MiLCAmdGFnc19vbmx5LCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIpLAorCU9QVF9CT09MRUFOKDAsICJoZWFkcyIsICZoZWFkc19vbmx5LCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIpLAorCU9QVF9CT09MRUFOKDAsICJ2ZXJpZnkiLCAmdmVyaWZ5LCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCAiCisJCSAgICAicmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiKSwKKwlPUFRfQk9PTEVBTignaCcsICJoZWFkIiwgJnNob3dfaGVhZCwgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlIiksCisJT1BUX0JPT0xFQU4oJ2QnLCAiZGVyZWZlcmVuY2UiLCAmZGVyZWZfdGFncywKKwkJICAgICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIpLAorCXsgT1BUSU9OX0NBTExCQUNLLCAncycsICJoYXNoIiwgJmFiYnJldiwgIm4iLAorCSAgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIsCisJICBQQVJTRV9PUFRfT1BUQVJHLCAmaGFzaF9jYWxsYmFjayB9LAorCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAorCU9QVF9fUVVJRVQoJnF1aWV0KSwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgImV4Y2x1ZGUtZXhpc3RpbmciLCAmZXhjbHVkZV9leGlzdGluZ19hcmcsCisJICAicGF0dGVybiIsICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IiwKKwkgIFBBUlNFX09QVF9PUFRBUkcgfCBQQVJTRV9PUFRfTk9ORUcsIGV4Y2x1ZGVfZXhpc3RpbmdfY2FsbGJhY2sgfSwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgImhlbHAtYWxsIiwgTlVMTCwgTlVMTCwgInNob3cgdXNhZ2UiLAorCSAgUEFSU0VfT1BUX0hJRERFTiB8IFBBUlNFX09QVF9OT0FSRywgaGVscF9jYWxsYmFjayB9LAorCU9QVF9FTkQoKQorfTsKKwogaW50IGNtZF9zaG93X3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKLQlpbnQgaTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIHNob3dfcmVmX29wdGlvbnMsCisJCQkgICAgIHNob3dfcmVmX3VzYWdlLCBQQVJTRV9PUFRfTk9fSU5URVJOQUxfSEVMUCk7CiAKLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7Ci0JCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07Ci0JCWlmICgqYXJnICE9ICctJykgewotCQkJcGF0dGVybiA9IGFyZ3YgKyBpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgewotCQkJcGF0dGVybiA9IGFyZ3YgKyBpICsgMTsKLQkJCWlmICghKnBhdHRlcm4pCi0JCQkJcGF0dGVybiA9IE5VTEw7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItcSIpIHx8ICFzdHJjbXAoYXJnLCAiLS1xdWlldCIpKSB7Ci0JCQlxdWlldCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItaCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1oZWFkIikpIHsKLQkJCXNob3dfaGVhZCA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItZCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1kZXJlZmVyZW5jZSIpKSB7Ci0JCQlkZXJlZl90YWdzID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi1zIikgfHwgIXN0cmNtcChhcmcsICItLWhhc2giKSkgewotCQkJaGFzaF9vbmx5ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghcHJlZml4Y21wKGFyZywgIi0taGFzaD0iKSB8fAotCQkgICAgKCFwcmVmaXhjbXAoYXJnLCAiLS1hYmJyZXYiKSAmJgotCQkgICAgIChhcmdbOF0gPT0gJz0nIHx8IGFyZ1s4XSA9PSAnXDAnKSkpIHsKLQkJCWlmIChhcmdbMl0gIT0gJ2gnICYmICFhcmdbOF0pCi0JCQkJLyogLS1hYmJyZXYgb25seSAqLwotCQkJCWFiYnJldiA9IERFRkFVTFRfQUJCUkVWOwotCQkJZWxzZSB7Ci0JCQkJLyogLS1oYXNoPSBvciAtLWFiYnJldj0gKi8KLQkJCQljaGFyICplbmQ7Ci0JCQkJaWYgKGFyZ1syXSA9PSAnaCcpIHsKLQkJCQkJaGFzaF9vbmx5ID0gMTsKLQkJCQkJYXJnICs9IDc7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQkJYXJnICs9IDk7Ci0JCQkJYWJicmV2ID0gc3RydG91bChhcmcsICZlbmQsIDEwKTsKLQkJCQlpZiAoKmVuZCB8fCBhYmJyZXYgPiA0MCkKLQkJCQkJdXNhZ2Uoc2hvd19yZWZfdXNhZ2UpOwotCQkJCWlmIChhYmJyZXYgPCBNSU5JTVVNX0FCQlJFVikKLQkJCQkJYWJicmV2ID0gTUlOSU1VTV9BQkJSRVY7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLXZlcmlmeSIpKSB7Ci0JCQl2ZXJpZnkgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS10YWdzIikpIHsKLQkJCXRhZ3Nfb25seSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLWhlYWRzIikpIHsKLQkJCWhlYWRzX29ubHkgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1leGNsdWRlLWV4aXN0aW5nIikpCi0JCQlyZXR1cm4gZXhjbHVkZV9leGlzdGluZyhOVUxMKTsKLQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1leGNsdWRlLWV4aXN0aW5nPSIpKQotCQkJcmV0dXJuIGV4Y2x1ZGVfZXhpc3RpbmcoYXJnICsgMTkpOwotCQl1c2FnZShzaG93X3JlZl91c2FnZSk7Ci0JfQorCWlmIChleGNsdWRlX2FyZykKKwkJcmV0dXJuIGV4Y2x1ZGVfZXhpc3RpbmcoZXhjbHVkZV9leGlzdGluZ19hcmcpOworCisJcGF0dGVybiA9IGFyZ3Y7CisJaWYgKCEqcGF0dGVybikKKwkJcGF0dGVybiA9IE5VTEw7CiAKIAlpZiAodmVyaWZ5KSB7CiAJCWlmICghcGF0dGVybikKZGlmZiAtLWdpdCBhL2J1aWx0aW4tc3RyaXBzcGFjZS5jIGIvYnVpbHRpbi1zdHJpcHNwYWNlLmMKaW5kZXggZDZlMzg5Ni4uMWZkMjIwNSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1zdHJpcHNwYWNlLmMKKysrIGIvYnVpbHRpbi1zdHJpcHNwYWNlLmMKQEAgLTc4LDcgKzc4LDcgQEAKIAkJc3RyaXBfY29tbWVudHMgPSAxOwogCiAJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDEwMjQpIDwgMCkKLQkJZGllKCJjb3VsZCBub3QgcmVhZCB0aGUgaW5wdXQiKTsKKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCB0aGUgaW5wdXQiKTsKIAogCXN0cmlwc3BhY2UoJmJ1Ziwgc3RyaXBfY29tbWVudHMpOwogCmRpZmYgLS1naXQgYS9idWlsdGluLXN5bWJvbGljLXJlZi5jIGIvYnVpbHRpbi1zeW1ib2xpYy1yZWYuYwppbmRleCBiZmM3OGJiLi5jYTg1NWE1IDEwMDY0NAotLS0gYS9idWlsdGluLXN5bWJvbGljLXJlZi5jCisrKyBiL2J1aWx0aW4tc3ltYm9saWMtcmVmLmMKQEAgLTM2LDcgKzM2LDggQEAKIAl9OwogCiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF9zeW1ib2xpY19yZWZfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N5bWJvbGljX3JlZl91c2FnZSwgMCk7CiAJaWYgKG1zZyAmJiEqbXNnKQogCQlkaWUoIlJlZnVzaW5nIHRvIHBlcmZvcm0gdXBkYXRlIHdpdGggZW1wdHkgbWVzc2FnZSIpOwogCXN3aXRjaCAoYXJnYykgewpAQCAtNDQsNiArNDUsOSBAQAogCQljaGVja19zeW1yZWYoYXJndlswXSwgcXVpZXQpOwogCQlicmVhazsKIAljYXNlIDI6CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJIRUFEIikgJiYKKwkJICAgIHByZWZpeGNtcChhcmd2WzFdLCAicmVmcy8iKSkKKwkJCWRpZSgiUmVmdXNpbmcgdG8gcG9pbnQgSEVBRCBvdXRzaWRlIG9mIHJlZnMvIik7CiAJCWNyZWF0ZV9zeW1yZWYoYXJndlswXSwgYXJndlsxXSwgbXNnKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdGFnLmMgYi9idWlsdGluLXRhZy5jCmluZGV4IGEzOTg0OTkuLmE1MWE2ZDEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tdGFnLmMKKysrIGIvYnVpbHRpbi10YWcuYwpAQCAtMjYsNiArMjYsNyBAQAogc3RydWN0IHRhZ19maWx0ZXIgewogCWNvbnN0IGNoYXIgKnBhdHRlcm47CiAJaW50IGxpbmVzOworCXN0cnVjdCBjb21taXRfbGlzdCAqd2l0aF9jb21taXQ7CiB9OwogCiAjZGVmaW5lIFBHUF9TSUdOQVRVUkUgIi0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tIgpAQCAtNDIsNiArNDMsMTYgQEAKIAkJY2hhciAqYnVmLCAqc3AsICplb2w7CiAJCXNpemVfdCBsZW47CiAKKwkJaWYgKGZpbHRlci0+d2l0aF9jb21taXQpIHsKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCQkJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHNoYTEsIDEpOworCQkJaWYgKCFjb21taXQpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoIWlzX2Rlc2NlbmRhbnRfb2YoY29tbWl0LCBmaWx0ZXItPndpdGhfY29tbWl0KSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCiAJCWlmICghZmlsdGVyLT5saW5lcykgewogCQkJcHJpbnRmKCIlc1xuIiwgcmVmbmFtZSk7CiAJCQlyZXR1cm4gMDsKQEAgLTc5LDcgKzkwLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsaXN0X3RhZ3MoY29uc3QgY2hhciAqcGF0dGVybiwgaW50IGxpbmVzKQorc3RhdGljIGludCBsaXN0X3RhZ3MoY29uc3QgY2hhciAqcGF0dGVybiwgaW50IGxpbmVzLAorCQkJc3RydWN0IGNvbW1pdF9saXN0ICp3aXRoX2NvbW1pdCkKIHsKIAlzdHJ1Y3QgdGFnX2ZpbHRlciBmaWx0ZXI7CiAKQEAgLTg4LDYgKzEwMCw3IEBACiAKIAlmaWx0ZXIucGF0dGVybiA9IHBhdHRlcm47CiAJZmlsdGVyLmxpbmVzID0gbGluZXM7CisJZmlsdGVyLndpdGhfY29tbWl0ID0gd2l0aF9jb21taXQ7CiAKIAlmb3JfZWFjaF90YWdfcmVmKHNob3dfcmVmZXJlbmNlLCAodm9pZCAqKSAmZmlsdGVyKTsKIApAQCAtMjk1LDggKzMwOCw3IEBACiAJCXBhdGggPSBnaXRfcGF0aGR1cCgiVEFHX0VESVRNU0ciKTsKIAkJZmQgPSBvcGVuKHBhdGgsIE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19XUk9OTFksIDA2MDApOwogCQlpZiAoZmQgPCAwKQotCQkJZGllKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJzogJXMiLAotCQkJCQkJcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciLCBwYXRoKTsKIAogCQlpZiAoIWlzX251bGxfc2hhMShwcmV2KSkKIAkJCXdyaXRlX3RhZ19ib2R5KGZkLCBwcmV2KTsKQEAgLTMyNSw3ICszMzcsNyBAQAogCQlleGl0KDEyOCk7CiAJfQogCWlmIChwYXRoKSB7Ci0JCXVubGluayhwYXRoKTsKKwkJdW5saW5rX29yX3dhcm4ocGF0aCk7CiAJCWZyZWUocGF0aCk7CiAJfQogfQpAQCAtMzYwLDEwICszNzIsMTEgQEAKIAkJbGlzdCA9IDAsIGRlbGV0ZSA9IDAsIHZlcmlmeSA9IDA7CiAJY29uc3QgY2hhciAqbXNnZmlsZSA9IE5VTEwsICprZXlpZCA9IE5VTEw7CiAJc3RydWN0IG1zZ19hcmcgbXNnID0geyAwLCBTVFJCVUZfSU5JVCB9OworCXN0cnVjdCBjb21taXRfbGlzdCAqd2l0aF9jb21taXQgPSBOVUxMOwogCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogCQlPUFRfQk9PTEVBTignbCcsIE5VTEwsICZsaXN0LCAibGlzdCB0YWcgbmFtZXMiKSwKLQkJeyBPUFRJT05fSU5URUdFUiwgJ24nLCBOVUxMLCAmbGluZXMsIE5VTEwsCi0JCQkJInByaW50IG4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIsCisJCXsgT1BUSU9OX0lOVEVHRVIsICduJywgTlVMTCwgJmxpbmVzLCAibiIsCisJCQkJInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIiwKIAkJCQlQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAxIH0sCiAJCU9QVF9CT09MRUFOKCdkJywgTlVMTCwgJmRlbGV0ZSwgImRlbGV0ZSB0YWdzIiksCiAJCU9QVF9CT09MRUFOKCd2JywgTlVMTCwgJnZlcmlmeSwgInZlcmlmeSB0YWdzIiksCkBAIC0zNzMsMTggKzM4NiwyNSBAQAogCQkJCQkiYW5ub3RhdGVkIHRhZywgbmVlZHMgYSBtZXNzYWdlIiksCiAJCU9QVF9DQUxMQkFDSygnbScsIE5VTEwsICZtc2csICJtc2ciLAogCQkJICAgICAibWVzc2FnZSBmb3IgdGhlIHRhZyIsIHBhcnNlX21zZ19hcmcpLAotCQlPUFRfU1RSSU5HKCdGJywgTlVMTCwgJm1zZ2ZpbGUsICJmaWxlIiwgIm1lc3NhZ2UgaW4gYSBmaWxlIiksCisJCU9QVF9GSUxFTkFNRSgnRicsIE5VTEwsICZtc2dmaWxlLCAibWVzc2FnZSBpbiBhIGZpbGUiKSwKIAkJT1BUX0JPT0xFQU4oJ3MnLCBOVUxMLCAmc2lnbiwgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciKSwKIAkJT1BUX1NUUklORygndScsIE5VTEwsICZrZXlpZCwgImtleS1pZCIsCiAJCQkJCSJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIiksCiAJCU9QVF9CT09MRUFOKCdmJywgTlVMTCwgJmZvcmNlLCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIpLAorCisJCU9QVF9HUk9VUCgiVGFnIGxpc3Rpbmcgb3B0aW9ucyIpLAorCQl7CisJCQlPUFRJT05fQ0FMTEJBQ0ssIDAsICJjb250YWlucyIsICZ3aXRoX2NvbW1pdCwgImNvbW1pdCIsCisJCQkicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IiwKKwkJCVBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQsCisJCQlwYXJzZV9vcHRfd2l0aF9jb21taXQsIChpbnRwdHJfdCkiSEVBRCIsCisJCX0sCiAJCU9QVF9FTkQoKQogCX07CiAKIAlnaXRfY29uZmlnKGdpdF90YWdfY29uZmlnLCBOVUxMKTsKIAotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF90YWdfdXNhZ2UsIDApOwotCW1zZ2ZpbGUgPSBwYXJzZV9vcHRpb25zX2ZpeF9maWxlbmFtZShwcmVmaXgsIG1zZ2ZpbGUpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X3RhZ191c2FnZSwgMCk7CiAKIAlpZiAoa2V5aWQpIHsKIAkJc2lnbiA9IDE7CkBAIC00MDIsOSArNDIyLDEyIEBACiAJaWYgKGxpc3QgKyBkZWxldGUgKyB2ZXJpZnkgPiAxKQogCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X3RhZ191c2FnZSwgb3B0aW9ucyk7CiAJaWYgKGxpc3QpCi0JCXJldHVybiBsaXN0X3RhZ3MoYXJndlswXSwgbGluZXMgPT0gLTEgPyAwIDogbGluZXMpOworCQlyZXR1cm4gbGlzdF90YWdzKGFyZ3ZbMF0sIGxpbmVzID09IC0xID8gMCA6IGxpbmVzLAorCQkJCSB3aXRoX2NvbW1pdCk7CiAJaWYgKGxpbmVzICE9IC0xKQogCQlkaWUoIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iKTsKKwlpZiAod2l0aF9jb21taXQpCisJCWRpZSgiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIik7CiAJaWYgKGRlbGV0ZSkKIAkJcmV0dXJuIGZvcl9lYWNoX3RhZ19uYW1lKGFyZ3YsIGRlbGV0ZV90YWcpOwogCWlmICh2ZXJpZnkpCkBAIC00MTksMTEgKzQ0MiwxMSBAQAogCQllbHNlIHsKIAkJCWlmICghc3RyY21wKG1zZ2ZpbGUsICItIikpIHsKIAkJCQlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgMTAyNCkgPCAwKQotCQkJCQlkaWUoImNhbm5vdCByZWFkICVzIiwgbXNnZmlsZSk7CisJCQkJCWRpZV9lcnJubygiY2Fubm90IHJlYWQgJyVzJyIsIG1zZ2ZpbGUpOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCBtc2dmaWxlLCAxMDI0KSA8IDApCi0JCQkJCWRpZSgiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnOiAlcyIsCi0JCQkJCQltc2dmaWxlLCBzdHJlcnJvcihlcnJubykpOworCQkJCQlkaWVfZXJybm8oImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIsCisJCQkJCQltc2dmaWxlKTsKIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tdGFyLXRyZWUuYyBiL2J1aWx0aW4tdGFyLXRyZWUuYwppbmRleCAwNzEzYmNhLi44YjNhMzVlIDEwMDY0NAotLS0gYS9idWlsdGluLXRhci10cmVlLmMKKysrIGIvYnVpbHRpbi10YXItdHJlZS5jCkBAIC0yNCw3ICsyNCw3IEBACiAJICogCWdpdCBhcmNoaXZlIC0tZm9ybWF0LXRhciAtLXByZWZpeD1iYXNlZGlyIHRyZWUtaXNoCiAJICovCiAJaW50IGk7Ci0JY29uc3QgY2hhciAqKm5hcmd2ID0geGNhbGxvYyhzaXplb2YoKm5hcmd2KSwgYXJnYyArIDIpOworCWNvbnN0IGNoYXIgKipuYXJndiA9IHhjYWxsb2Moc2l6ZW9mKCpuYXJndiksIGFyZ2MgKyAzKTsKIAljaGFyICpiYXNlZGlyX2FyZzsKIAlpbnQgbmFyZ2MgPSAwOwogCkBAIC0zNiw2ICszNiwxMyBAQAogCQlhcmd2Kys7CiAJCWFyZ2MtLTsKIAl9CisKKwkvKgorCSAqIEJlY2F1c2UgaXQncyBqdXN0IGEgY29tcGF0aWJpbGl0eSB3cmFwcGVyLCB0YXItdHJlZSBzdXBwb3J0cyBvbmx5CisJICogdGhlIG9sZCBiZWhhdmlvdXIgb2YgcmVhZGluZyBhdHRyaWJ1dGVzIGZyb20gdGhlIHdvcmsgdHJlZS4KKwkgKi8KKwluYXJndltuYXJnYysrXSA9ICItLXdvcmt0cmVlLWF0dHJpYnV0ZXMiOworCiAJc3dpdGNoIChhcmdjKSB7CiAJZGVmYXVsdDoKIAkJdXNhZ2UodGFyX3RyZWVfdXNhZ2UpOwpAQCAtODQsNyArOTEsNyBAQAogCiAJbiA9IHdyaXRlX2luX2Z1bGwoMSwgY29udGVudCArIDExLCA0MSk7CiAJaWYgKG4gPCA0MSkKLQkJZGllKCJnaXQgZ2V0LXRhci1jb21taXQtaWQ6IHdyaXRlIGVycm9yIik7CisJCWRpZV9lcnJubygiZ2l0IGdldC10YXItY29tbWl0LWlkOiB3cml0ZSBlcnJvciIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluLXVucGFjay1vYmplY3RzLmMgYi9idWlsdGluLXVucGFjay1vYmplY3RzLmMKaW5kZXggOWE3NzMyMy4uNTU3MTQ4YSAxMDA2NDQKLS0tIGEvYnVpbHRpbi11bnBhY2stb2JqZWN0cy5jCisrKyBiL2J1aWx0aW4tdW5wYWNrLW9iamVjdHMuYwpAQCAtNjgsNyArNjgsNyBAQAogCQlpZiAocmV0IDw9IDApIHsKIAkJCWlmICghcmV0KQogCQkJCWRpZSgiZWFybHkgRU9GIik7Ci0JCQlkaWUoInJlYWQgZXJyb3Igb24gaW5wdXQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygicmVhZCBlcnJvciBvbiBpbnB1dCIpOwogCQl9CiAJCWxlbiArPSByZXQ7CiAJfSB3aGlsZSAobGVuIDwgbWluKTsKQEAgLTE1OCw3ICsxNTgsNyBAQAogI2RlZmluZSBGTEFHX1dSSVRURU4gKDF1PDwyMSkKIAogc3RhdGljIHN0cnVjdCBvYmpfaW5mbyAqb2JqX2xpc3Q7Ci11bnNpZ25lZCBucl9vYmplY3RzOworc3RhdGljIHVuc2lnbmVkIG5yX29iamVjdHM7CiAKIC8qCiAgKiBDYWxsZWQgb25seSBmcm9tIGNoZWNrX29iamVjdCgpIGFmdGVyIGl0IHZlcmlmaWVkIHRoaXMgb2JqZWN0CkBAIC0yMDAsNyArMjAwLDcgQEAKIAogCWlmIChmc2NrX29iamVjdChvYmosIDEsIGZzY2tfZXJyb3JfZnVuY3Rpb24pKQogCQlkaWUoIkVycm9yIGluIG9iamVjdCIpOwotCWlmICghZnNja193YWxrKG9iaiwgY2hlY2tfb2JqZWN0LCAwKSkKKwlpZiAoIWZzY2tfd2FsayhvYmosIGNoZWNrX29iamVjdCwgTlVMTCkpCiAJCWRpZSgiRXJyb3Igb24gcmVhY2hhYmxlIG9iamVjdHMgb2YgJXMiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKIAl3cml0ZV9jYWNoZWRfb2JqZWN0KG9iaik7CiAJcmV0dXJuIDE7CkBAIC0yMTAsNyArMjEwLDcgQEAKIHsKIAl1bnNpZ25lZCBpOwogCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspCi0JCWNoZWNrX29iamVjdChvYmpfbGlzdFtpXS5vYmosIE9CSl9BTlksIDApOworCQljaGVja19vYmplY3Qob2JqX2xpc3RbaV0ub2JqLCBPQkpfQU5ZLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkZWRfb2JqZWN0KHVuc2lnbmVkIG5yLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCkBAIC00MjIsOCArNDIyLDggQEAKIHN0YXRpYyB2b2lkIHVucGFja19vbmUodW5zaWduZWQgbnIpCiB7CiAJdW5zaWduZWQgc2hpZnQ7Ci0JdW5zaWduZWQgY2hhciAqcGFjaywgYzsKLQl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgY2hhciAqcGFjazsKKwl1bnNpZ25lZCBsb25nIHNpemUsIGM7CiAJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCiAJb2JqX2xpc3RbbnJdLm9mZnNldCA9IGNvbnN1bWVkX2J5dGVzOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi11cGRhdGUtaW5kZXguYyBiL2J1aWx0aW4tdXBkYXRlLWluZGV4LmMKaW5kZXggZGFjYTBmNy4uOTJiZWFhZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi11cGRhdGUtaW5kZXguYworKysgYi9idWlsdGluLXVwZGF0ZS1pbmRleC5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAogCWxlbiA9IHN0cmxlbihwYXRoKTsKLQlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGxlbiwgcGF0aCkpCisJaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChwYXRoLCBsZW4pKQogCQlyZXR1cm4gZXJyb3IoIiclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIsIHBhdGgpOwogCiAJLyoKQEAgLTI5Miw3ICsyOTIsNyBAQAogCXJlcG9ydCgiYWRkICclcyciLCBwYXRoKTsKICBmcmVlX3JldHVybjoKIAlpZiAocCA8IHBhdGggfHwgcCA+IHBhdGggKyBzdHJsZW4ocGF0aCkpCi0JCWZyZWUoKGNoYXIqKXApOworCQlmcmVlKChjaGFyICopcCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlYWRfaW5kZXhfaW5mbyhpbnQgbGluZV90ZXJtaW5hdGlvbikKQEAgLTQ4Niw3ICs0ODYsNyBAQAogc3RhdGljIHZvaWQgcmVhZF9oZWFkX3BvaW50ZXJzKHZvaWQpCiB7CiAJaWYgKHJlYWRfcmVmKCJIRUFEIiwgaGVhZF9zaGExKSkKLQkJZGllKCJObyBIRUFEIC0tIG5vIGluaXRpYWwgY29tbWl0IHlldD9cbiIpOworCQlkaWUoIk5vIEhFQUQgLS0gbm8gaW5pdGlhbCBjb21taXQgeWV0PyIpOwogCWlmIChyZWFkX3JlZigiTUVSR0VfSEVBRCIsIG1lcmdlX2hlYWRfc2hhMSkpIHsKIAkJZnByaW50ZihzdGRlcnIsICJOb3QgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLlxuIik7CiAJCWV4aXQoMCk7CkBAIC01MDksNyArNTA5LDcgQEAKIAkJY29uc3QgY2hhciAqcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYXJnKTsKIAkJZXJyIHw9IHVucmVzb2x2ZV9vbmUocCk7CiAJCWlmIChwIDwgYXJnIHx8IHAgPiBhcmcgKyBzdHJsZW4oYXJnKSkKLQkJCWZyZWUoKGNoYXIqKXApOworCQkJZnJlZSgoY2hhciAqKXApOwogCX0KIAlyZXR1cm4gZXJyOwogfQpAQCAtNzEyLDcgKzcxMiw3IEBACiAJCWlmIChzZXRfZXhlY3V0YWJsZV9iaXQpCiAJCQljaG1vZF9wYXRoKHNldF9leGVjdXRhYmxlX2JpdCwgcCk7CiAJCWlmIChwIDwgcGF0aCB8fCBwID4gcGF0aCArIHN0cmxlbihwYXRoKSkKLQkJCWZyZWUoKGNoYXIqKXApOworCQkJZnJlZSgoY2hhciAqKXApOwogCX0KIAlpZiAocmVhZF9mcm9tX3N0ZGluKSB7CiAJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIG5idWYgPSBTVFJCVUZfSU5JVDsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdXBkYXRlLXJlZi5jIGIvYnVpbHRpbi11cGRhdGUtcmVmLmMKaW5kZXggMzc4ZGMxYi4uNzZiYTFkNSAxMDA2NDQKLS0tIGEvYnVpbHRpbi11cGRhdGUtcmVmLmMKKysrIGIvYnVpbHRpbi11cGRhdGUtcmVmLmMKQEAgLTIzLDcgKzIzLDggQEAKIAl9OwogCiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF91cGRhdGVfcmVmX3VzYWdlLCAwKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF91cGRhdGVfcmVmX3VzYWdlLAorCQkJICAgICAwKTsKIAlpZiAobXNnICYmICEqbXNnKQogCQlkaWUoIlJlZnVzaW5nIHRvIHBlcmZvcm0gdXBkYXRlIHdpdGggZW1wdHkgbWVzc2FnZS4iKTsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi11cGxvYWQtYXJjaGl2ZS5jIGIvYnVpbHRpbi11cGxvYWQtYXJjaGl2ZS5jCmluZGV4IGE5YjAyZmEuLmM0Y2QxZTEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tdXBsb2FkLWFyY2hpdmUuYworKysgYi9idWlsdGluLXVwbG9hZC1hcmNoaXZlLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAlzdHJjcHkoYnVmLCBhcmd2WzFdKTsgLyogZW50ZXItcmVwbyBzbXVkZ2VzIGl0cyBhcmd1bWVudCAqLwogCiAJaWYgKCFlbnRlcl9yZXBvKGJ1ZiwgMCkpCi0JCWRpZSgibm90IGEgZ2l0IGFyY2hpdmUiKTsKKwkJZGllKCInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIGdpdCByZXBvc2l0b3J5IiwgYnVmKTsKIAogCS8qIHB1dCByZWNlaXZlZCBvcHRpb25zIGluIHNlbnRfYXJndltdICovCiAJc2VudF9hcmdjID0gMTsKQEAgLTgwLDE2ICs4MCwxNyBAQAogCWRpZSgic2VudCBlcnJvciB0byB0aGUgY2xpZW50OiAlcyIsIGJ1Zik7CiB9CiAKLXN0YXRpYyB2b2lkIHByb2Nlc3NfaW5wdXQoaW50IGNoaWxkX2ZkLCBpbnQgYmFuZCkKK3N0YXRpYyBzc2l6ZV90IHByb2Nlc3NfaW5wdXQoaW50IGNoaWxkX2ZkLCBpbnQgYmFuZCkKIHsKIAljaGFyIGJ1ZlsxNjM4NF07CiAJc3NpemVfdCBzeiA9IHJlYWQoY2hpbGRfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCWlmIChzeiA8IDApIHsKIAkJaWYgKGVycm5vICE9IEVBR0FJTiAmJiBlcnJubyAhPSBFSU5UUikKIAkJCWVycm9yX2NsbnQoInJlYWQgZXJyb3I6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotCQlyZXR1cm47CisJCXJldHVybiBzejsKIAl9CiAJc2VuZF9zaWRlYmFuZCgxLCBiYW5kLCBidWYsIHN6LCBMQVJHRV9QQUNLRVRfTUFYKTsKKwlyZXR1cm4gc3o7CiB9CiAKIGludCBjbWRfdXBsb2FkX2FyY2hpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCkBAIC0xMzEsNiArMTMyLDcgQEAKIAogCXdoaWxlICgxKSB7CiAJCXN0cnVjdCBwb2xsZmQgcGZkWzJdOworCQlzc2l6ZV90IHByb2Nlc3NlZFsyXSA9IHsgMCwgMCB9OwogCQlpbnQgc3RhdHVzOwogCiAJCXBmZFswXS5mZCA9IGZkMVswXTsKQEAgLTE0NywxMiArMTQ5LDEyIEBACiAJCX0KIAkJaWYgKHBmZFswXS5yZXZlbnRzICYgUE9MTElOKQogCQkJLyogRGF0YSBzdHJlYW0gcmVhZHkgKi8KLQkJCXByb2Nlc3NfaW5wdXQocGZkWzBdLmZkLCAxKTsKKwkJCXByb2Nlc3NlZFswXSA9IHByb2Nlc3NfaW5wdXQocGZkWzBdLmZkLCAxKTsKIAkJaWYgKHBmZFsxXS5yZXZlbnRzICYgUE9MTElOKQogCQkJLyogU3RhdHVzIHN0cmVhbSByZWFkeSAqLwotCQkJcHJvY2Vzc19pbnB1dChwZmRbMV0uZmQsIDIpOworCQkJcHJvY2Vzc2VkWzFdID0gcHJvY2Vzc19pbnB1dChwZmRbMV0uZmQsIDIpOwogCQkvKiBBbHdheXMgZmluaXNoIHRvIHJlYWQgZGF0YSB3aGVuIGF2YWlsYWJsZSAqLwotCQlpZiAoKHBmZFswXS5yZXZlbnRzIHwgcGZkWzFdLnJldmVudHMpICYgUE9MTElOKQorCQlpZiAocHJvY2Vzc2VkWzBdIHx8IHByb2Nlc3NlZFsxXSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICh3YWl0cGlkKHdyaXRlciwgJnN0YXR1cywgMCkgPCAwKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi12ZXJpZnktcGFjay5jIGIvYnVpbHRpbi12ZXJpZnktcGFjay5jCmluZGV4IDI1YTI5ZjEuLmExOGRmMDQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tdmVyaWZ5LXBhY2suYworKysgYi9idWlsdGluLXZlcmlmeS1wYWNrLmMKQEAgLTcsMTAgKzcsMTMgQEAKIAogc3RhdGljIHZvaWQgc2hvd19wYWNrX2luZm8oc3RydWN0IHBhY2tlZF9naXQgKnApCiB7Ci0JdWludDMyX3QgbnJfb2JqZWN0cywgaSwgY2hhaW5faGlzdG9ncmFtW01BWF9DSEFJTisxXTsKKwl1aW50MzJfdCBucl9vYmplY3RzLCBpOworCWludCBjbnQ7CisJdW5zaWduZWQgbG9uZyBjaGFpbl9oaXN0b2dyYW1bTUFYX0NIQUlOKzFdLCBiYXNlb2JqZWN0czsKIAogCW5yX29iamVjdHMgPSBwLT5udW1fb2JqZWN0czsKIAltZW1zZXQoY2hhaW5faGlzdG9ncmFtLCAwLCBzaXplb2YoY2hhaW5faGlzdG9ncmFtKSk7CisJYmFzZW9iamVjdHMgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgewogCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOwpAQCAtMjksOSArMzIsMTEgQEAKIAkJCQkJCSAmZGVsdGFfY2hhaW5fbGVuZ3RoLAogCQkJCQkJIGJhc2Vfc2hhMSk7CiAJCXByaW50ZigiJXMgIiwgc2hhMV90b19oZXgoc2hhMSkpOwotCQlpZiAoIWRlbHRhX2NoYWluX2xlbmd0aCkKKwkJaWYgKCFkZWx0YV9jaGFpbl9sZW5ndGgpIHsKIAkJCXByaW50ZigiJS02cyAlbHUgJWx1ICUiUFJJdU1BWCJcbiIsCiAJCQkgICAgICAgdHlwZSwgc2l6ZSwgc3RvcmVfc2l6ZSwgKHVpbnRtYXhfdClvZmZzZXQpOworCQkJYmFzZW9iamVjdHMrKzsKKwkJfQogCQllbHNlIHsKIAkJCXByaW50ZigiJS02cyAlbHUgJWx1ICUiUFJJdU1BWCIgJXUgJXNcbiIsCiAJCQkgICAgICAgdHlwZSwgc2l6ZSwgc3RvcmVfc2l6ZSwgKHVpbnRtYXhfdClvZmZzZXQsCkBAIC00MywxNSArNDgsMjEgQEAKIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPD0gTUFYX0NIQUlOOyBpKyspIHsKLQkJaWYgKCFjaGFpbl9oaXN0b2dyYW1baV0pCisJaWYgKGJhc2VvYmplY3RzKQorCQlwcmludGYoIm5vbiBkZWx0YTogJWx1IG9iamVjdCVzXG4iLAorCQkgICAgICAgYmFzZW9iamVjdHMsIGJhc2VvYmplY3RzID4gMSA/ICJzIiA6ICIiKTsKKworCWZvciAoY250ID0gMTsgY250IDw9IE1BWF9DSEFJTjsgY250KyspIHsKKwkJaWYgKCFjaGFpbl9oaXN0b2dyYW1bY250XSkKIAkJCWNvbnRpbnVlOwotCQlwcmludGYoImNoYWluIGxlbmd0aCA9ICUiUFJJdTMyIjogJSJQUkl1MzIiIG9iamVjdCVzXG4iLCBpLAotCQkgICAgICAgY2hhaW5faGlzdG9ncmFtW2ldLCBjaGFpbl9oaXN0b2dyYW1baV0gPiAxID8gInMiIDogIiIpOworCQlwcmludGYoImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0JXNcbiIsIGNudCwKKwkJICAgICAgIGNoYWluX2hpc3RvZ3JhbVtjbnRdLAorCQkgICAgICAgY2hhaW5faGlzdG9ncmFtW2NudF0gPiAxID8gInMiIDogIiIpOwogCX0KIAlpZiAoY2hhaW5faGlzdG9ncmFtWzBdKQotCQlwcmludGYoImNoYWluIGxlbmd0aCA+ICVkOiAlIlBSSXUzMiIgb2JqZWN0JXNcbiIsIE1BWF9DSEFJTiwKLQkJICAgICAgIGNoYWluX2hpc3RvZ3JhbVswXSwgY2hhaW5faGlzdG9ncmFtWzBdID4gMSA/ICJzIiA6ICIiKTsKKwkJcHJpbnRmKCJjaGFpbiBsZW5ndGggPiAlZDogJWx1IG9iamVjdCVzXG4iLCBNQVhfQ0hBSU4sCisJCSAgICAgICBjaGFpbl9oaXN0b2dyYW1bMF0sCisJCSAgICAgICBjaGFpbl9oaXN0b2dyYW1bMF0gPiAxID8gInMiIDogIiIpOwogfQogCiBzdGF0aWMgaW50IHZlcmlmeV9vbmVfcGFjayhjb25zdCBjaGFyICpwYXRoLCBpbnQgdmVyYm9zZSkKQEAgLTEwNyw3ICsxMTgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyIHZlcmlmeV9wYWNrX3VzYWdlW10gPSAiZ2l0LXZlcmlmeS1wYWNrIFstdl0gPHBhY2s+Li4uIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcmlmeV9wYWNrX3VzYWdlW10gPSAiZ2l0IHZlcmlmeS1wYWNrIFstdl0gPHBhY2s+Li4uIjsKIAogaW50IGNtZF92ZXJpZnlfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdmVyaWZ5LXRhZy5jIGIvYnVpbHRpbi12ZXJpZnktdGFnLmMKaW5kZXggNzI5YTE1OS4uN2Y3ZmRhNCAxMDA2NDQKLS0tIGEvYnVpbHRpbi12ZXJpZnktdGFnLmMKKysrIGIvYnVpbHRpbi12ZXJpZnktdGFnLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAljbG9zZShncGcuaW4pOwogCXJldCA9IGZpbmlzaF9jb21tYW5kKCZncGcpOwogCi0JdW5saW5rKHBhdGgpOworCXVubGlua19vcl93YXJuKHBhdGgpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4td3JpdGUtdHJlZS5jIGIvYnVpbHRpbi13cml0ZS10cmVlLmMKaW5kZXggOWQ2NDA1MC4uM2EyNGNlOCAxMDA2NDQKLS0tIGEvYnVpbHRpbi13cml0ZS10cmVlLmMKKysrIGIvYnVpbHRpbi13cml0ZS10cmVlLmMKQEAgLTEzLDcgKzEzLDcgQEAKIAogaW50IGNtZF93cml0ZV90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqdW51c2VkX3ByZWZpeCkKIHsKLQlpbnQgbWlzc2luZ19vayA9IDAsIHJldDsKKwlpbnQgZmxhZ3MgPSAwLCByZXQ7CiAJY29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCWNvbnN0IGNoYXIgKm1lID0gImdpdC13cml0ZS10cmVlIjsKQEAgLTIyLDkgKzIyLDE1IEBACiAJd2hpbGUgKDEgPCBhcmdjKSB7CiAJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbMV07CiAJCWlmICghc3RyY21wKGFyZywgIi0tbWlzc2luZy1vayIpKQotCQkJbWlzc2luZ19vayA9IDE7CisJCQlmbGFncyB8PSBXUklURV9UUkVFX01JU1NJTkdfT0s7CiAJCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1wcmVmaXg9IikpCiAJCQlwcmVmaXggPSBhcmcgKyA5OworCQllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0taWdub3JlLWNhY2hlLXRyZWUiKSkKKwkJCS8qCisJCQkgKiBUaGlzIGlzIG9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcsIHNvIEkKKwkJCSAqIGRvIG5vdCBib3RoZXIgZG9jdW1lbnRpbmcgaXQuCisJCQkgKi8KKwkJCWZsYWdzIHw9IFdSSVRFX1RSRUVfSUdOT1JFX0NBQ0hFX1RSRUU7CiAJCWVsc2UKIAkJCXVzYWdlKHdyaXRlX3RyZWVfdXNhZ2UpOwogCQlhcmdjLS07IGFyZ3YrKzsKQEAgLTMzLDcgKzM5LDcgQEAKIAlpZiAoYXJnYyA+IDIpCiAJCWRpZSgidG9vIG1hbnkgb3B0aW9ucyIpOwogCi0JcmV0ID0gd3JpdGVfY2FjaGVfYXNfdHJlZShzaGExLCBtaXNzaW5nX29rLCBwcmVmaXgpOworCXJldCA9IHdyaXRlX2NhY2hlX2FzX3RyZWUoc2hhMSwgZmxhZ3MsIHByZWZpeCk7CiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIDA6CiAJCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4uaCBiL2J1aWx0aW4uaAppbmRleCAxNDk1Y2Y2Li4yMDQyN2QyIDEwMDY0NAotLS0gYS9idWlsdGluLmgKKysrIGIvYnVpbHRpbi5oCkBAIC0yNSw2ICsyNSw3IEBACiBleHRlcm4gaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9hcHBseShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9hcmNoaXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2Jpc2VjdF9faGVscGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2JsYW1lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2JyYW5jaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9idW5kbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwpAQCAtNzEsNiArNzIsNyBAQAogZXh0ZXJuIGludCBjbWRfbWVyZ2Vfb3VycyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9tZXJnZV9maWxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX21lcmdlX3JlY3Vyc2l2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9ta3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfbXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfbmFtZV9yZXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfcGFja19vYmplY3RzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKZGlmZiAtLWdpdCBhL2J1bmRsZS5jIGIvYnVuZGxlLmMKaW5kZXggYjIwZjIxMC4uZTRiMmFhOSAxMDA2NDQKLS0tIGEvYnVuZGxlLmMKKysrIGIvYnVuZGxlLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAkgKi8KIAlzdHJ1Y3QgcmVmX2xpc3QgKnAgPSAmaGVhZGVyLT5wcmVyZXF1aXNpdGVzOwogCXN0cnVjdCByZXZfaW5mbyByZXZzOwotCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHtOVUxMLCAiLS1hbGwifTsKKwljb25zdCBjaGFyICphcmd2W10gPSB7TlVMTCwgIi0tYWxsIiwgTlVMTH07CiAJc3RydWN0IG9iamVjdF9hcnJheSByZWZzOwogCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKIAlpbnQgaSwgcmV0ID0gMCwgcmVxX25yOwpAQCAtMTY3LDYgKzE2NywzMiBAQAogCXJldHVybiBsaXN0X3JlZnMoJmhlYWRlci0+cmVmZXJlbmNlcywgYXJnYywgYXJndik7CiB9CiAKK3N0YXRpYyBpbnQgaXNfdGFnX2luX2RhdGVfcmFuZ2Uoc3RydWN0IG9iamVjdCAqdGFnLCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyICpidWYsICpsaW5lLCAqbGluZWVuZDsKKwl1bnNpZ25lZCBsb25nIGRhdGU7CisKKwlpZiAocmV2cy0+bWF4X2FnZSA9PSAtMSAmJiByZXZzLT5taW5fYWdlID09IC0xKQorCQlyZXR1cm4gMTsKKworCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHRhZy0+c2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDE7CisJbGluZSA9IG1lbW1lbShidWYsIHNpemUsICJcbnRhZ2dlciAiLCA4KTsKKwlpZiAoIWxpbmUrKykKKwkJcmV0dXJuIDE7CisJbGluZWVuZCA9IG1lbWNocihsaW5lLCBidWYgKyBzaXplIC0gbGluZSwgJ1xuJyk7CisJbGluZSA9IG1lbWNocihsaW5lLCBsaW5lZW5kID8gbGluZWVuZCAtIGxpbmUgOiBidWYgKyBzaXplIC0gbGluZSwgJz4nKTsKKwlpZiAoIWxpbmUrKykKKwkJcmV0dXJuIDE7CisJZGF0ZSA9IHN0cnRvdWwobGluZSwgTlVMTCwgMTApOworCWZyZWUoYnVmKTsKKwlyZXR1cm4gKHJldnMtPm1heF9hZ2UgPT0gLTEgfHwgcmV2cy0+bWF4X2FnZSA8IGRhdGUpICYmCisJCShyZXZzLT5taW5fYWdlID09IC0xIHx8IHJldnMtPm1pbl9hZ2UgPiBkYXRlKTsKK30KKwogaW50IGNyZWF0ZV9idW5kbGUoc3RydWN0IGJ1bmRsZV9oZWFkZXIgKmhlYWRlciwgY29uc3QgY2hhciAqcGF0aCwKIAkJaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewpAQCAtMjU3LDYgKzI4MywxMiBAQAogCQkJZmxhZyA9IDA7CiAJCWRpc3BsYXlfcmVmID0gKGZsYWcgJiBSRUZfSVNTWU1SRUYpID8gZS0+bmFtZSA6IHJlZjsKIAorCQlpZiAoZS0+aXRlbS0+dHlwZSA9PSBPQkpfVEFHICYmCisJCQkJIWlzX3RhZ19pbl9kYXRlX3JhbmdlKGUtPml0ZW0sICZyZXZzKSkgeworCQkJZS0+aXRlbS0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoZSByZWZzIHdlIHdyb3RlIG91dCBpcyBjb3JyZWN0OyAtLW1heC1jb3VudCBhbmQKIAkJICogb3RoZXIgbGltaXRpbmcgb3B0aW9ucyBjb3VsZCBoYXZlIHByZXZlbnRlZCBhbGwgdGhlIHRpcHMKZGlmZiAtLWdpdCBhL2NhY2hlLXRyZWUuYyBiL2NhY2hlLXRyZWUuYwppbmRleCAzZDhmMjE4Li5kOTE3NDM3IDEwMDY0NAotLS0gYS9jYWNoZS10cmVlLmMKKysrIGIvY2FjaGUtdHJlZS5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgogI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKIAogI2lmbmRlZiBERUJVRwpAQCAtMzI4LDcgKzMyOSw4IEBACiAJCQllbnRsZW4gPSBwYXRobGVuIC0gYmFzZWxlbjsKIAkJfQogCQlpZiAobW9kZSAhPSBTX0lGR0lUTElOSyAmJiAhbWlzc2luZ19vayAmJiAhaGFzX3NoYTFfZmlsZShzaGExKSkKLQkJCXJldHVybiBlcnJvcigiaW52YWxpZCBvYmplY3QgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisJCQlyZXR1cm4gZXJyb3IoImludmFsaWQgb2JqZWN0ICUwNm8gJXMgZm9yICclLipzJyIsCisJCQkJbW9kZSwgc2hhMV90b19oZXgoc2hhMSksIGVudGxlbitiYXNlbGVuLCBwYXRoKTsKIAogCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKQogCQkJY29udGludWU7IC8qIGVudHJ5IGJlaW5nIHJlbW92ZWQgKi8KQEAgLTUxMyw2ICs1MTUsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNhY2hlX3RyZWUgKmNhY2hlX3RyZWVfZmluZChzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CisJaWYgKCFpdCkKKwkJcmV0dXJuIE5VTEw7CiAJd2hpbGUgKCpwYXRoKSB7CiAJCWNvbnN0IGNoYXIgKnNsYXNoOwogCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKnN1YjsKQEAgLTUzNywyOCArNTQxLDMyIEBACiAJcmV0dXJuIGl0OwogfQogCi1pbnQgd3JpdGVfY2FjaGVfYXNfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgbWlzc2luZ19vaywgY29uc3QgY2hhciAqcHJlZml4KQoraW50IHdyaXRlX2NhY2hlX2FzX3RyZWUodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWdzLCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJaW50IGVudHJpZXMsIHdhc192YWxpZCwgbmV3ZmQ7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9ja19maWxlOwogCiAJLyoKIAkgKiBXZSBjYW4ndCBmcmVlIHRoaXMgbWVtb3J5LCBpdCBiZWNvbWVzIHBhcnQgb2YgYSBsaW5rZWQgbGlzdAogCSAqIHBhcnNlZCBhdGV4aXQoKQogCSAqLwotCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKKwlsb2NrX2ZpbGUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CiAKIAluZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KGxvY2tfZmlsZSwgMSk7CiAKIAllbnRyaWVzID0gcmVhZF9jYWNoZSgpOwogCWlmIChlbnRyaWVzIDwgMCkKIAkJcmV0dXJuIFdSSVRFX1RSRUVfVU5SRUFEQUJMRV9JTkRFWDsKKwlpZiAoZmxhZ3MgJiBXUklURV9UUkVFX0lHTk9SRV9DQUNIRV9UUkVFKQorCQljYWNoZV90cmVlX2ZyZWUoJihhY3RpdmVfY2FjaGVfdHJlZSkpOwogCiAJaWYgKCFhY3RpdmVfY2FjaGVfdHJlZSkKIAkJYWN0aXZlX2NhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7CiAKIAl3YXNfdmFsaWQgPSBjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKGFjdGl2ZV9jYWNoZV90cmVlKTsKLQogCWlmICghd2FzX3ZhbGlkKSB7CisJCWludCBtaXNzaW5nX29rID0gZmxhZ3MgJiBXUklURV9UUkVFX01JU1NJTkdfT0s7CisKIAkJaWYgKGNhY2hlX3RyZWVfdXBkYXRlKGFjdGl2ZV9jYWNoZV90cmVlLAogCQkJCSAgICAgIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yLAogCQkJCSAgICAgIG1pc3Npbmdfb2ssIDApIDwgMCkKQEAgLTU5MSwzICs1OTksNjggQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgdm9pZCBwcmltZV9jYWNoZV90cmVlX3JlYyhzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsIHN0cnVjdCB0cmVlICp0cmVlKQoreworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwlpbnQgY250OworCisJaGFzaGNweShpdC0+c2hhMSwgdHJlZS0+b2JqZWN0LnNoYTEpOworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCWNudCA9IDA7CisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKKwkJaWYgKCFTX0lTRElSKGVudHJ5Lm1vZGUpKQorCQkJY250Kys7CisJCWVsc2UgeworCQkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpzdWI7CisJCQlzdHJ1Y3QgdHJlZSAqc3VidHJlZSA9IGxvb2t1cF90cmVlKGVudHJ5LnNoYTEpOworCQkJaWYgKCFzdWJ0cmVlLT5vYmplY3QucGFyc2VkKQorCQkJCXBhcnNlX3RyZWUoc3VidHJlZSk7CisJCQlzdWIgPSBjYWNoZV90cmVlX3N1YihpdCwgZW50cnkucGF0aCk7CisJCQlzdWItPmNhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7CisJCQlwcmltZV9jYWNoZV90cmVlX3JlYyhzdWItPmNhY2hlX3RyZWUsIHN1YnRyZWUpOworCQkJY250ICs9IHN1Yi0+Y2FjaGVfdHJlZS0+ZW50cnlfY291bnQ7CisJCX0KKwl9CisJaXQtPmVudHJ5X2NvdW50ID0gY250OworfQorCit2b2lkIHByaW1lX2NhY2hlX3RyZWUoc3RydWN0IGNhY2hlX3RyZWUgKippdCwgc3RydWN0IHRyZWUgKnRyZWUpCit7CisJY2FjaGVfdHJlZV9mcmVlKGl0KTsKKwkqaXQgPSBjYWNoZV90cmVlKCk7CisJcHJpbWVfY2FjaGVfdHJlZV9yZWMoKml0LCB0cmVlKTsKK30KKworLyoKKyAqIGZpbmQgdGhlIGNhY2hlX3RyZWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBsZXZlbCB3aXRob3V0CisgKiBleHBsb2RpbmcgdGhlIGZ1bGwgcGF0aCBpbnRvIHRleHR1YWwgZm9ybS4gIFRoZSByb290IG9mIHRoZQorICogY2FjaGUgdHJlZSBpcyBnaXZlbiBhcyAicm9vdCIsIGFuZCBvdXIgY3VycmVudCBsZXZlbCBpcyAiaW5mbyIuCisgKiAoMSkgV2hlbiBhdCByb290IGxldmVsLCBpbmZvLT5wcmV2IGlzIE5VTEwsIHNvIGl0IGlzICJyb290IiBpdHNlbGYuCisgKiAoMikgT3RoZXJ3aXNlLCBmaW5kIHRoZSBjYWNoZV90cmVlIHRoYXQgY29ycmVzcG9uZHMgdG8gb25lIGxldmVsCisgKiAgICAgYWJvdmUgdXMsIGFuZCBmaW5kIG91cnNlbHZlcyBpbiB0aGVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBjYWNoZV90cmVlICpmaW5kX2NhY2hlX3RyZWVfZnJvbV90cmF2ZXJzYWwoc3RydWN0IGNhY2hlX3RyZWUgKnJvb3QsCisJCQkJCQkJIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQoreworCXN0cnVjdCBjYWNoZV90cmVlICpvdXJfcGFyZW50OworCisJaWYgKCFpbmZvLT5wcmV2KQorCQlyZXR1cm4gcm9vdDsKKwlvdXJfcGFyZW50ID0gZmluZF9jYWNoZV90cmVlX2Zyb21fdHJhdmVyc2FsKHJvb3QsIGluZm8tPnByZXYpOworCXJldHVybiBjYWNoZV90cmVlX2ZpbmQob3VyX3BhcmVudCwgaW5mby0+bmFtZS5wYXRoKTsKK30KKworaW50IGNhY2hlX3RyZWVfbWF0Y2hlc190cmF2ZXJzYWwoc3RydWN0IGNhY2hlX3RyZWUgKnJvb3QsCisJCQkJIHN0cnVjdCBuYW1lX2VudHJ5ICplbnQsCisJCQkJIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQoreworCXN0cnVjdCBjYWNoZV90cmVlICppdDsKKworCWl0ID0gZmluZF9jYWNoZV90cmVlX2Zyb21fdHJhdmVyc2FsKHJvb3QsIGluZm8pOworCWl0ID0gY2FjaGVfdHJlZV9maW5kKGl0LCBlbnQtPnBhdGgpOworCWlmIChpdCAmJiBpdC0+ZW50cnlfY291bnQgPiAwICYmICFoYXNoY21wKGVudC0+c2hhMSwgaXQtPnNoYTEpKQorCQlyZXR1cm4gaXQtPmVudHJ5X2NvdW50OworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY2FjaGUtdHJlZS5oIGIvY2FjaGUtdHJlZS5oCmluZGV4IGNmOGI3OTAuLjNkZjY0MWYgMTAwNjQ0Ci0tLSBhL2NhY2hlLXRyZWUuaAorKysgYi9jYWNoZS10cmVlLmgKQEAgLTEsNiArMSw5IEBACiAjaWZuZGVmIENBQ0hFX1RSRUVfSAogI2RlZmluZSBDQUNIRV9UUkVFX0gKIAorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKwogc3RydWN0IGNhY2hlX3RyZWU7CiBzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgewogCXN0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlOwpAQCAtMjgsOSArMzEsMTggQEAKIGludCBjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKHN0cnVjdCBjYWNoZV90cmVlICopOwogaW50IGNhY2hlX3RyZWVfdXBkYXRlKHN0cnVjdCBjYWNoZV90cmVlICosIHN0cnVjdCBjYWNoZV9lbnRyeSAqKiwgaW50LCBpbnQsIGludCk7CiAKKy8qIGJpdG1hc2tzIHRvIHdyaXRlX2NhY2hlX2FzX3RyZWUgZmxhZ3MgKi8KKyNkZWZpbmUgV1JJVEVfVFJFRV9NSVNTSU5HX09LIDEKKyNkZWZpbmUgV1JJVEVfVFJFRV9JR05PUkVfQ0FDSEVfVFJFRSAyCisKKy8qIGVycm9yIHJldHVybiBjb2RlcyAqLwogI2RlZmluZSBXUklURV9UUkVFX1VOUkVBREFCTEVfSU5ERVggKC0xKQogI2RlZmluZSBXUklURV9UUkVFX1VOTUVSR0VEX0lOREVYICgtMikKICNkZWZpbmUgV1JJVEVfVFJFRV9QUkVGSVhfRVJST1IgKC0zKQogCi1pbnQgd3JpdGVfY2FjaGVfYXNfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgbWlzc2luZ19vaywgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCB3cml0ZV9jYWNoZV9hc190cmVlKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFncywgY29uc3QgY2hhciAqcHJlZml4KTsKK3ZvaWQgcHJpbWVfY2FjaGVfdHJlZShzdHJ1Y3QgY2FjaGVfdHJlZSAqKiwgc3RydWN0IHRyZWUgKik7CisKK2V4dGVybiBpbnQgY2FjaGVfdHJlZV9tYXRjaGVzX3RyYXZlcnNhbChzdHJ1Y3QgY2FjaGVfdHJlZSAqLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50LCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbyk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY2FjaGUuaCBiL2NhY2hlLmgKaW5kZXggOGJjNmJmMy4uZTZjN2YzMyAxMDA2NDQKLS0tIGEvY2FjaGUuaAorKysgYi9jYWNoZS5oCkBAIC0xNDAsOCArMTQwLDggQEAKIH07CiAKIHN0cnVjdCBjYWNoZV9lbnRyeSB7Ci0JdW5zaWduZWQgaW50IGNlX2N0aW1lOwotCXVuc2lnbmVkIGludCBjZV9tdGltZTsKKwlzdHJ1Y3QgY2FjaGVfdGltZSBjZV9jdGltZTsKKwlzdHJ1Y3QgY2FjaGVfdGltZSBjZV9tdGltZTsKIAl1bnNpZ25lZCBpbnQgY2VfZGV2OwogCXVuc2lnbmVkIGludCBjZV9pbm87CiAJdW5zaWduZWQgaW50IGNlX21vZGU7CkBAIC0yODIsNyArMjgyLDcgQEAKIAlzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZTsKIAl1bnNpZ25lZCBpbnQgY2FjaGVfbnIsIGNhY2hlX2FsbG9jLCBjYWNoZV9jaGFuZ2VkOwogCXN0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlOwotCXRpbWVfdCB0aW1lc3RhbXA7CisJc3RydWN0IGNhY2hlX3RpbWUgdGltZXN0YW1wOwogCXZvaWQgKmFsbG9jOwogCXVuc2lnbmVkIG5hbWVfaGFzaF9pbml0aWFsaXplZCA6IDEsCiAJCSBpbml0aWFsaXplZCA6IDE7CkBAIC00MjgsNyArNDI4LDcgQEAKIGV4dGVybiBpbnQgcmVhZF9pbmRleF9mcm9tKHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICpwYXRoKTsKIGV4dGVybiBpbnQgaXNfaW5kZXhfdW5ib3JuKHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKIGV4dGVybiBpbnQgcmVhZF9pbmRleF91bm1lcmdlZChzdHJ1Y3QgaW5kZXhfc3RhdGUgKik7Ci1leHRlcm4gaW50IHdyaXRlX2luZGV4KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBpbnQgbmV3ZmQpOworZXh0ZXJuIGludCB3cml0ZV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgaW50IG5ld2ZkKTsKIGV4dGVybiBpbnQgZGlzY2FyZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKik7CiBleHRlcm4gaW50IHVubWVyZ2VkX2luZGV4KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKIGV4dGVybiBpbnQgdmVyaWZ5X3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CkBAIC00NDMsNiArNDQzLDcgQEAKIGV4dGVybiBzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlZnJlc2hfY2FjaGVfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHJlYWxseSk7CiBleHRlcm4gdm9pZCByZW5hbWVfaW5kZXhfZW50cnlfYXQoc3RydWN0IGluZGV4X3N0YXRlICosIGludCBwb3MsIGNvbnN0IGNoYXIgKm5ld19uYW1lKTsKIGV4dGVybiBpbnQgcmVtb3ZlX2luZGV4X2VudHJ5X2F0KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBpbnQgcG9zKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9tYXJrZWRfY2FjaGVfZW50cmllcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CiBleHRlcm4gaW50IHJlbW92ZV9maWxlX2Zyb21faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKnBhdGgpOwogI2RlZmluZSBBRERfQ0FDSEVfVkVSQk9TRSAxCiAjZGVmaW5lIEFERF9DQUNIRV9QUkVURU5EIDIKQEAgLTU0MSw4ICs1NDIsMjUgQEAKIAlBVVRPUkVCQVNFX0FMV0FZUywKIH07CiAKK2VudW0gcHVzaF9kZWZhdWx0X3R5cGUgeworCVBVU0hfREVGQVVMVF9OT1RISU5HID0gMCwKKwlQVVNIX0RFRkFVTFRfTUFUQ0hJTkcsCisJUFVTSF9ERUZBVUxUX1RSQUNLSU5HLAorCVBVU0hfREVGQVVMVF9DVVJSRU5ULAorfTsKKwogZXh0ZXJuIGVudW0gYnJhbmNoX3RyYWNrIGdpdF9icmFuY2hfdHJhY2s7CiBleHRlcm4gZW51bSByZWJhc2Vfc2V0dXBfdHlwZSBhdXRvcmViYXNlOworZXh0ZXJuIGVudW0gcHVzaF9kZWZhdWx0X3R5cGUgcHVzaF9kZWZhdWx0OworCitlbnVtIG9iamVjdF9jcmVhdGlvbl9tb2RlIHsKKwlPQkpFQ1RfQ1JFQVRJT05fVVNFU19IQVJETElOS1MgPSAwLAorCU9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMgPSAxLAorfTsKKworZXh0ZXJuIGVudW0gb2JqZWN0X2NyZWF0aW9uX21vZGUgb2JqZWN0X2NyZWF0aW9uX21vZGU7CisKK2V4dGVybiBpbnQgZ3JhZnRzX3JlcGxhY2VfcGFyZW50czsKIAogI2RlZmluZSBHSVRfUkVQT19WRVJTSU9OIDAKIGV4dGVybiBpbnQgcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbjsKQEAgLTU5Nyw2ICs2MTUsOCBAQAogCiBpbnQgZ2l0X21rc3RlbXAoY2hhciAqcGF0aCwgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKnRlbXBsYXRlKTsKIAoraW50IGdpdF9ta3N0ZW1wcyhjaGFyICpwYXRoLCBzaXplX3QgbiwgY29uc3QgY2hhciAqdGVtcGxhdGUsIGludCBzdWZmaXhfbGVuKTsKKwogLyoKICAqIE5PVEUgTk9URSBOT1RFISEKICAqCkBAIC02MTMsNyArNjMzLDggQEAKIAlQRVJNX0VWRVJZQk9EWSAgICAgID0gMDY2NCwKIH07CiBpbnQgZ2l0X2NvbmZpZ19wZXJtKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpOwotaW50IGFkanVzdF9zaGFyZWRfcGVybShjb25zdCBjaGFyICpwYXRoKTsKK2ludCBzZXRfc2hhcmVkX3Blcm0oY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpOworI2RlZmluZSBhZGp1c3Rfc2hhcmVkX3Blcm0ocGF0aCkgc2V0X3NoYXJlZF9wZXJtKChwYXRoKSwgMCkKIGludCBzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGNoYXIgKnBhdGgpOwogaW50IHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoY29uc3QgY2hhciAqcGF0aCk7CiBjaGFyICplbnRlcl9yZXBvKGNoYXIgKnBhdGgsIGludCBzdHJpY3QpOwpAQCAtNjI3LDYgKzY0OCw3IEBACiBjb25zdCBjaGFyICptYWtlX3JlbGF0aXZlX3BhdGgoY29uc3QgY2hhciAqYWJzLCBjb25zdCBjaGFyICpiYXNlKTsKIGludCBub3JtYWxpemVfcGF0aF9jb3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKTsKIGludCBsb25nZXN0X2FuY2VzdG9yX2xlbmd0aChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcmVmaXhfbGlzdCk7CitjaGFyICpzdHJpcF9wYXRoX3N1ZmZpeChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzdWZmaXgpOwogCiAvKiBSZWFkIGFuZCB1bnBhY2sgYSBzaGExIGZpbGUgaW50byBtZW1vcnksIHdyaXRlIG1lbW9yeSB0byBhIHNoYTEgZmlsZSAqLwogZXh0ZXJuIGludCBzaGExX29iamVjdF9pbmZvKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKQEAgLTYzNiw5ICs2NTgsNiBAQAogZXh0ZXJuIGludCBwcmV0ZW5kX3NoYTFfZmlsZSh2b2lkICosIHVuc2lnbmVkIGxvbmcsIGVudW0gb2JqZWN0X3R5cGUsIHVuc2lnbmVkIGNoYXIgKik7CiBleHRlcm4gaW50IGZvcmNlX29iamVjdF9sb29zZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB0aW1lX3QgbXRpbWUpOwogCi0vKiBqdXN0IGxpa2UgcmVhZF9zaGExX2ZpbGUoKSwgYnV0IG5vbiBmYXRhbCBpbiBwcmVzZW5jZSBvZiBiYWQgb2JqZWN0cyAqLwotZXh0ZXJuIHZvaWQgKnJlYWRfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgKnNpemUpOwotCiAvKiBnbG9iYWwgZmxhZyB0byBlbmFibGUgZXh0cmEgY2hlY2tzIHdoZW4gYWNjZXNzaW5nIHBhY2tlZCBvYmplY3RzICovCiBleHRlcm4gaW50IGRvX2NoZWNrX3BhY2tlZF9vYmplY3RfY3JjOwogCkBAIC02NzEsNiArNjkwLDcgQEAKIGV4dGVybiBjb25zdCBjaGFyICpyZXNvbHZlX3JlZihjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQsIGludCAqKTsKIGV4dGVybiBpbnQgZHdpbV9yZWYoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICoqcmVmKTsKIGV4dGVybiBpbnQgZHdpbV9sb2coY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICoqcmVmKTsKK2V4dGVybiBpbnQgaW50ZXJwcmV0X2JyYW5jaF9uYW1lKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHN0cmJ1ZiAqKTsKIAogZXh0ZXJuIGludCByZWZuYW1lX21hdGNoKGNvbnN0IGNoYXIgKmFiYnJldl9uYW1lLCBjb25zdCBjaGFyICpmdWxsX25hbWUsIGNvbnN0IGNoYXIgKipydWxlcyk7CiBleHRlcm4gY29uc3QgY2hhciAqcmVmX3Jldl9wYXJzZV9ydWxlc1tdOwpAQCAtNjk3LDcgKzcxNyw4IEBACiAJREFURV9TSE9SVCwKIAlEQVRFX0xPQ0FMLAogCURBVEVfSVNPODYwMSwKLQlEQVRFX1JGQzI4MjIKKwlEQVRFX1JGQzI4MjIsCisJREFURV9SQVcKIH07CiAKIGNvbnN0IGNoYXIgKnNob3dfZGF0ZSh1bnNpZ25lZCBsb25nIHRpbWUsIGludCB0aW1lem9uZSwgZW51bSBkYXRlX21vZGUgbW9kZSk7CkBAIC03MjQsNyArNzQ1LDIzIEBACiB9OwogCiBleHRlcm4gaW50IGNoZWNrb3V0X2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IHN0cnVjdCBjaGVja291dCAqc3RhdGUsIGNoYXIgKnRvcGF0aCk7Ci1leHRlcm4gaW50IGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChpbnQgbGVuLCBjb25zdCBjaGFyICpuYW1lKTsKKworc3RydWN0IGNhY2hlX2RlZiB7CisJY2hhciBwYXRoW1BBVEhfTUFYICsgMV07CisJaW50IGxlbjsKKwlpbnQgZmxhZ3M7CisJaW50IHRyYWNrX2ZsYWdzOworCWludCBwcmVmaXhfbGVuX3N0YXRfZnVuYzsKK307CisKK2V4dGVybiBpbnQgaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pOworZXh0ZXJuIGludCB0aHJlYWRlZF9oYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoc3RydWN0IGNhY2hlX2RlZiAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IGhhc19zeW1saW5rX29yX25vZW50X2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgaGFzX2RpcnNfb25seV9wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIGludCBwcmVmaXhfbGVuKTsKK2V4dGVybiB2b2lkIGludmFsaWRhdGVfbHN0YXRfY2FjaGUoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7CitleHRlcm4gdm9pZCBjbGVhcl9sc3RhdF9jYWNoZSh2b2lkKTsKK2V4dGVybiB2b2lkIHNjaGVkdWxlX2Rpcl9mb3JfcmVtb3ZhbChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9zY2hlZHVsZWRfZGlycyh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlIHsKIAlzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqbmV4dDsKQEAgLTc5Nyw3ICs4MzQsNyBAQAogI2RlZmluZSBSRUZfSEVBRFMJKDF1IDw8IDEpCiAjZGVmaW5lIFJFRl9UQUdTCSgxdSA8PCAyKQogCi1leHRlcm4gc3RydWN0IHJlZiAqZmluZF9yZWZfYnlfbmFtZShzdHJ1Y3QgcmVmICpsaXN0LCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBzdHJ1Y3QgcmVmICpmaW5kX3JlZl9ieV9uYW1lKGNvbnN0IHN0cnVjdCByZWYgKmxpc3QsIGNvbnN0IGNoYXIgKm5hbWUpOwogCiAjZGVmaW5lIENPTk5FQ1RfVkVSQk9TRSAgICAgICAoMXUgPDwgMCkKIGV4dGVybiBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZ2l0X2Nvbm5lY3QoaW50IGZkWzJdLCBjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKnByb2csIGludCBmbGFncyk7CkBAIC04MjIsNyArODU5LDcgQEAKIAogZXh0ZXJuIHZvaWQgcGFja19yZXBvcnQodm9pZCk7CiBleHRlcm4gaW50IG9wZW5fcGFja19pbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqKTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyKiB1c2VfcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqLCBzdHJ1Y3QgcGFja193aW5kb3cgKiosIG9mZl90LCB1bnNpZ25lZCBpbnQgKik7CitleHRlcm4gdW5zaWduZWQgY2hhciAqdXNlX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKiwgc3RydWN0IHBhY2tfd2luZG93ICoqLCBvZmZfdCwgdW5zaWduZWQgaW50ICopOwogZXh0ZXJuIHZvaWQgY2xvc2VfcGFja193aW5kb3dzKHN0cnVjdCBwYWNrZWRfZ2l0ICopOwogZXh0ZXJuIHZvaWQgdW51c2VfcGFjayhzdHJ1Y3QgcGFja193aW5kb3cgKiopOwogZXh0ZXJuIHZvaWQgZnJlZV9wYWNrX2J5X25hbWUoY29uc3QgY2hhciAqKTsKQEAgLTg2Niw2ICs5MDMsNyBAQAogCiBleHRlcm4gY29uc3QgY2hhciAqZ2l0X2NvbW1pdF9lbmNvZGluZzsKIGV4dGVybiBjb25zdCBjaGFyICpnaXRfbG9nX291dHB1dF9lbmNvZGluZzsKK2V4dGVybiBjb25zdCBjaGFyICpnaXRfbWFpbG1hcF9maWxlOwogCiAvKiBJTyBoZWxwZXIgZnVuY3Rpb25zICovCiBleHRlcm4gdm9pZCBtYXliZV9mbHVzaF9vcl9kaWUoRklMRSAqLCBjb25zdCBjaGFyICopOwpAQCAtOTQxLDcgKzk3OSw2IEBACiBleHRlcm4gaW50IHdzX2JsYW5rX2xpbmUoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSk7CiAKIC8qIGxzLWZpbGVzICovCi1pbnQgcGF0aHNwZWNfbWF0Y2goY29uc3QgY2hhciAqKnNwZWMsIGNoYXIgKm1hdGNoZWQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc2tpcGxlbik7CiBpbnQgcmVwb3J0X3BhdGhfZXJyb3IoY29uc3QgY2hhciAqcHNfbWF0Y2hlZCwgY29uc3QgY2hhciAqKnBhdGhzcGVjLCBpbnQgcHJlZml4X29mZnNldCk7CiB2b2lkIG92ZXJsYXlfdHJlZV9vbl9jYWNoZShjb25zdCBjaGFyICp0cmVlX25hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiAKZGlmZiAtLWdpdCBhL2NvbG9yLmMgYi9jb2xvci5jCmluZGV4IGZjMGI3MmEuLjYyOTc3ZjQgMTAwNjQ0Ci0tLSBhL2NvbG9yLmMKKysrIGIvY29sb3IuYwpAQCAtMSw4ICsxLDYgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImNvbG9yLmgiCiAKLSNkZWZpbmUgQ09MT1JfUkVTRVQgIlwwMzNbbSIKLQogaW50IGdpdF91c2VfY29sb3JfZGVmYXVsdCA9IDA7CiAKIHN0YXRpYyBpbnQgcGFyc2VfY29sb3IoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKQEAgLTQxLDI5ICszOSw0MCBAQAogCiB2b2lkIGNvbG9yX3BhcnNlKGNvbnN0IGNoYXIgKnZhbHVlLCBjb25zdCBjaGFyICp2YXIsIGNoYXIgKmRzdCkKIHsKKwljb2xvcl9wYXJzZV9tZW0odmFsdWUsIHN0cmxlbih2YWx1ZSksIHZhciwgZHN0KTsKK30KKwordm9pZCBjb2xvcl9wYXJzZV9tZW0oY29uc3QgY2hhciAqdmFsdWUsIGludCB2YWx1ZV9sZW4sIGNvbnN0IGNoYXIgKnZhciwKKwkJY2hhciAqZHN0KQorewogCWNvbnN0IGNoYXIgKnB0ciA9IHZhbHVlOworCWludCBsZW4gPSB2YWx1ZV9sZW47CiAJaW50IGF0dHIgPSAtMTsKIAlpbnQgZmcgPSAtMjsKIAlpbnQgYmcgPSAtMjsKIAotCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgInJlc2V0IikpIHsKLQkJc3RyY3B5KGRzdCwgIlwwMzNbbSIpOworCWlmICghc3RybmNhc2VjbXAodmFsdWUsICJyZXNldCIsIGxlbikpIHsKKwkJc3RyY3B5KGRzdCwgR0lUX0NPTE9SX1JFU0VUKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIFtmZyBbYmddXSBbYXR0cl0gKi8KLQl3aGlsZSAoKnB0cikgeworCXdoaWxlIChsZW4gPiAwKSB7CiAJCWNvbnN0IGNoYXIgKndvcmQgPSBwdHI7Ci0JCWludCB2YWwsIGxlbiA9IDA7CisJCWludCB2YWwsIHdvcmRsZW4gPSAwOwogCi0JCXdoaWxlICh3b3JkW2xlbl0gJiYgIWlzc3BhY2Uod29yZFtsZW5dKSkKLQkJCWxlbisrOworCQl3aGlsZSAobGVuID4gMCAmJiAhaXNzcGFjZSh3b3JkW3dvcmRsZW5dKSkgeworCQkJd29yZGxlbisrOworCQkJbGVuLS07CisJCX0KIAotCQlwdHIgPSB3b3JkICsgbGVuOwotCQl3aGlsZSAoKnB0ciAmJiBpc3NwYWNlKCpwdHIpKQorCQlwdHIgPSB3b3JkICsgd29yZGxlbjsKKwkJd2hpbGUgKGxlbiA+IDAgJiYgaXNzcGFjZSgqcHRyKSkgewogCQkJcHRyKys7CisJCQlsZW4tLTsKKwkJfQogCi0JCXZhbCA9IHBhcnNlX2NvbG9yKHdvcmQsIGxlbik7CisJCXZhbCA9IHBhcnNlX2NvbG9yKHdvcmQsIHdvcmRsZW4pOwogCQlpZiAodmFsID49IC0xKSB7CiAJCQlpZiAoZmcgPT0gLTIpIHsKIAkJCQlmZyA9IHZhbDsKQEAgLTc1LDcgKzg0LDcgQEAKIAkJCX0KIAkJCWdvdG8gYmFkOwogCQl9Ci0JCXZhbCA9IHBhcnNlX2F0dHIod29yZCwgbGVuKTsKKwkJdmFsID0gcGFyc2VfYXR0cih3b3JkLCB3b3JkbGVuKTsKIAkJaWYgKHZhbCA8IDAgfHwgYXR0ciAhPSAtMSkKIAkJCWdvdG8gYmFkOwogCQlhdHRyID0gdmFsOwpAQCAtMTE1LDcgKzEyNCw3IEBACiAJKmRzdCA9IDA7CiAJcmV0dXJuOwogYmFkOgotCWRpZSgiYmFkIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciB2YXJpYWJsZSAnJXMnIiwgdmFsdWUsIHZhcik7CisJZGllKCJiYWQgY29sb3IgdmFsdWUgJyUuKnMnIGZvciB2YXJpYWJsZSAnJXMnIiwgdmFsdWVfbGVuLCB2YWx1ZSwgdmFyKTsKIH0KIAogaW50IGdpdF9jb25maWdfY29sb3Jib29sKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIGludCBzdGRvdXRfaXNfdHR5KQpAQCAtMTY0LDcgKzE3Myw3IEBACiAJCXIgKz0gZnByaW50ZihmcCwgIiVzIiwgY29sb3IpOwogCXIgKz0gdmZwcmludGYoZnAsIGZtdCwgYXJncyk7CiAJaWYgKCpjb2xvcikKLQkJciArPSBmcHJpbnRmKGZwLCAiJXMiLCBDT0xPUl9SRVNFVCk7CisJCXIgKz0gZnByaW50ZihmcCwgIiVzIiwgR0lUX0NPTE9SX1JFU0VUKTsKIAlpZiAodHJhaWwpCiAJCXIgKz0gZnByaW50ZihmcCwgIiVzIiwgdHJhaWwpOwogCXJldHVybiByOwpAQCAtMTkxLDMgKzIwMCwzMSBAQAogCXZhX2VuZChhcmdzKTsKIAlyZXR1cm4gcjsKIH0KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc3BsaXRzIHRoZSBidWZmZXIgYnkgbmV3bGluZXMgYW5kIGNvbG9ycyB0aGUgbGluZXMgaW5kaXZpZHVhbGx5LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCitpbnQgY29sb3JfZndyaXRlX2xpbmVzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwKKwkJc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICpidWYpCit7CisJaWYgKCEqY29sb3IpCisJCXJldHVybiBmd3JpdGUoYnVmLCBjb3VudCwgMSwgZnApICE9IDE7CisJd2hpbGUgKGNvdW50KSB7CisJCWNoYXIgKnAgPSBtZW1jaHIoYnVmLCAnXG4nLCBjb3VudCk7CisJCWlmIChwICE9IGJ1ZiAmJiAoZnB1dHMoY29sb3IsIGZwKSA8IDAgfHwKKwkJCQlmd3JpdGUoYnVmLCBwID8gcCAtIGJ1ZiA6IGNvdW50LCAxLCBmcCkgIT0gMSB8fAorCQkJCWZwdXRzKEdJVF9DT0xPUl9SRVNFVCwgZnApIDwgMCkpCisJCQlyZXR1cm4gLTE7CisJCWlmICghcCkKKwkJCXJldHVybiAwOworCQlpZiAoZnB1dGMoJ1xuJywgZnApIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJY291bnQgLT0gcCArIDEgLSBidWY7CisJCWJ1ZiA9IHAgKyAxOworCX0KKwlyZXR1cm4gMDsKK30KKworCmRpZmYgLS1naXQgYS9jb2xvci5oIGIvY29sb3IuaAppbmRleCA2Y2Y1Yzg4Li4xOGFiZWI3IDEwMDY0NAotLS0gYS9jb2xvci5oCisrKyBiL2NvbG9yLmgKQEAgLTQsNiArNCwxNyBAQAogLyogIlwwMzNbMTszODs1OzJ4eDs0ODs1OzJ4eG1cMCIgaXMgMjMgYnl0ZXMgKi8KICNkZWZpbmUgQ09MT1JfTUFYTEVOIDI0CiAKKyNkZWZpbmUgR0lUX0NPTE9SX05PUk1BTAkiIgorI2RlZmluZSBHSVRfQ09MT1JfUkVTRVQJCSJcMDMzW20iCisjZGVmaW5lIEdJVF9DT0xPUl9CT0xECQkiXDAzM1sxbSIKKyNkZWZpbmUgR0lUX0NPTE9SX1JFRAkJIlwwMzNbMzFtIgorI2RlZmluZSBHSVRfQ09MT1JfR1JFRU4JCSJcMDMzWzMybSIKKyNkZWZpbmUgR0lUX0NPTE9SX1lFTExPVwkiXDAzM1szM20iCisjZGVmaW5lIEdJVF9DT0xPUl9CTFVFCQkiXDAzM1szNG0iCisjZGVmaW5lIEdJVF9DT0xPUl9NQUdFTlRBCSJcMDMzWzM1bSIKKyNkZWZpbmUgR0lUX0NPTE9SX0NZQU4JCSJcMDMzWzM2bSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JHX1JFRAkiXDAzM1s0MW0iCisKIC8qCiAgKiBUaGlzIHZhcmlhYmxlIHN0b3JlcyB0aGUgdmFsdWUgb2YgY29sb3IudWkKICAqLwpAQCAtMTYsOCArMjcsMTAgQEAKIGludCBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOwogCiBpbnQgZ2l0X2NvbmZpZ19jb2xvcmJvb2woY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHN0ZG91dF9pc190dHkpOwotdm9pZCBjb2xvcl9wYXJzZShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCBjaGFyICpkc3QpOwordm9pZCBjb2xvcl9wYXJzZShjb25zdCBjaGFyICp2YWx1ZSwgY29uc3QgY2hhciAqdmFyLCBjaGFyICpkc3QpOwordm9pZCBjb2xvcl9wYXJzZV9tZW0oY29uc3QgY2hhciAqdmFsdWUsIGludCBsZW4sIGNvbnN0IGNoYXIgKnZhciwgY2hhciAqZHN0KTsKIGludCBjb2xvcl9mcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LCAuLi4pOwogaW50IGNvbG9yX2ZwcmludGZfbG4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitpbnQgY29sb3JfZndyaXRlX2xpbmVzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICpidWYpOwogCiAjZW5kaWYgLyogQ09MT1JfSCAqLwpkaWZmIC0tZ2l0IGEvY29tYmluZS1kaWZmLmMgYi9jb21iaW5lLWRpZmYuYwppbmRleCAwYjA3MWI2Li41YjYzYWYxIDEwMDY0NAotLS0gYS9jb21iaW5lLWRpZmYuYworKysgYi9jb21iaW5lLWRpZmYuYwpAQCAtMjQsNyArMjQsNyBAQAogCQkJcGF0aCA9IHEtPnF1ZXVlW2ldLT50d28tPnBhdGg7CiAJCQlsZW4gPSBzdHJsZW4ocGF0aCk7CiAJCQlwID0geG1hbGxvYyhjb21iaW5lX2RpZmZfcGF0aF9zaXplKG51bV9wYXJlbnQsIGxlbikpOwotCQkJcC0+cGF0aCA9IChjaGFyKikgJihwLT5wYXJlbnRbbnVtX3BhcmVudF0pOworCQkJcC0+cGF0aCA9IChjaGFyICopICYocC0+cGFyZW50W251bV9wYXJlbnRdKTsKIAkJCW1lbWNweShwLT5wYXRoLCBwYXRoLCBsZW4pOwogCQkJcC0+cGF0aFtsZW5dID0gMDsKIAkJCXAtPmxlbiA9IGxlbjsKQEAgLTgwLDYgKzgwLDcgQEAKIC8qIExpbmVzIHN1cnZpdmluZyBpbiB0aGUgbWVyZ2UgcmVzdWx0ICovCiBzdHJ1Y3Qgc2xpbmUgewogCXN0cnVjdCBsbGluZSAqbG9zdF9oZWFkLCAqKmxvc3RfdGFpbDsKKwlzdHJ1Y3QgbGxpbmUgKm5leHRfbG9zdDsKIAljaGFyICpib2w7CiAJaW50IGxlbjsKIAkvKiBiaXQgMCB1cCB0byAoTi0xKSBhcmUgb24gaWYgdGhlIHBhcmVudCBoYXMgdGhpcyBsaW5lIChpLmUuCkBAIC0xMjEsMTggKzEyMiwxMiBAQAogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBzcXVhc2ggdGhpbmdzICovCiAJaWYgKHNsaW5lLT5sb3N0X2hlYWQpIHsKLQkJc3RydWN0IGxsaW5lICpsYXN0X29uZSA9IE5VTEw7Ci0JCS8qIFdlIGNhbm5vdCBzcXVhc2ggaXQgd2l0aCBlYXJsaWVyIG9uZSAqLwotCQlmb3IgKGxsaW5lID0gc2xpbmUtPmxvc3RfaGVhZDsKLQkJICAgICBsbGluZTsKLQkJICAgICBsbGluZSA9IGxsaW5lLT5uZXh0KQotCQkJaWYgKGxsaW5lLT5wYXJlbnRfbWFwICYgdGhpc19tYXNrKQotCQkJCWxhc3Rfb25lID0gbGxpbmU7Ci0JCWxsaW5lID0gbGFzdF9vbmUgPyBsYXN0X29uZS0+bmV4dCA6IHNsaW5lLT5sb3N0X2hlYWQ7CisJCWxsaW5lID0gc2xpbmUtPm5leHRfbG9zdDsKIAkJd2hpbGUgKGxsaW5lKSB7CiAJCQlpZiAobGxpbmUtPmxlbiA9PSBsZW4gJiYKIAkJCSAgICAhbWVtY21wKGxsaW5lLT5saW5lLCBsaW5lLCBsZW4pKSB7CiAJCQkJbGxpbmUtPnBhcmVudF9tYXAgfD0gdGhpc19tYXNrOworCQkJCXNsaW5lLT5uZXh0X2xvc3QgPSBsbGluZS0+bmV4dDsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlsbGluZSA9IGxsaW5lLT5uZXh0OwpAQCAtMTQ3LDYgKzE0Miw3IEBACiAJbGxpbmUtPmxpbmVbbGVuXSA9IDA7CiAJKnNsaW5lLT5sb3N0X3RhaWwgPSBsbGluZTsKIAlzbGluZS0+bG9zdF90YWlsID0gJmxsaW5lLT5uZXh0OworCXNsaW5lLT5uZXh0X2xvc3QgPSBOVUxMOwogfQogCiBzdHJ1Y3QgY29tYmluZV9kaWZmX3N0YXRlIHsKQEAgLTE2OCwyNSArMTY0LDI4IEBACiAJCQkJICAgICAgJnN0YXRlLT5uYiwgJnN0YXRlLT5ubikpCiAJCQlyZXR1cm47CiAJCXN0YXRlLT5sbm8gPSBzdGF0ZS0+bmI7Ci0JCWlmICghc3RhdGUtPm5iKQotCQkJLyogQEAgLTEsMiArMCwwIEBAIHRvIHJlbW92ZSB0aGUKLQkJCSAqIGZpcnN0IHR3byBsaW5lcy4uLgotCQkJICovCi0JCQlzdGF0ZS0+bmIgPSAxOwotCQlpZiAoc3RhdGUtPm5uID09IDApCisJCWlmIChzdGF0ZS0+bm4gPT0gMCkgewogCQkJLyogQEAgLVgsWSArTiwwIEBAIHJlbW92ZWQgWSBsaW5lcwogCQkJICogdGhhdCB3b3VsZCBoYXZlIGNvbWUgKmFmdGVyKiBsaW5lIE4KIAkJCSAqIGluIHRoZSByZXN1bHQuICBPdXIgbG9zdCBidWNrZXRzIGhhbmcKIAkJCSAqIHRvIHRoZSBsaW5lIGFmdGVyIHRoZSByZW1vdmVkIGxpbmVzLAorCQkJICoKKwkJCSAqIE5vdGUgdGhhdCB0aGlzIGlzIGNvcnJlY3QgZXZlbiB3aGVuIE4gPT0gMCwKKwkJCSAqIGluIHdoaWNoIGNhc2UgdGhlIGh1bmsgcmVtb3ZlcyB0aGUgZmlyc3QKKwkJCSAqIGxpbmUgaW4gdGhlIGZpbGUuCiAJCQkgKi8KIAkJCXN0YXRlLT5sb3N0X2J1Y2tldCA9ICZzdGF0ZS0+c2xpbmVbc3RhdGUtPm5iXTsKLQkJZWxzZQorCQkJaWYgKCFzdGF0ZS0+bmIpCisJCQkJc3RhdGUtPm5iID0gMTsKKwkJfSBlbHNlIHsKIAkJCXN0YXRlLT5sb3N0X2J1Y2tldCA9ICZzdGF0ZS0+c2xpbmVbc3RhdGUtPm5iLTFdOworCQl9CiAJCWlmICghc3RhdGUtPnNsaW5lW3N0YXRlLT5uYi0xXS5wX2xubykKIAkJCXN0YXRlLT5zbGluZVtzdGF0ZS0+bmItMV0ucF9sbm8gPQogCQkJCXhjYWxsb2Moc3RhdGUtPm51bV9wYXJlbnQsCiAJCQkJCXNpemVvZih1bnNpZ25lZCBsb25nKSk7CiAJCXN0YXRlLT5zbGluZVtzdGF0ZS0+bmItMV0ucF9sbm9bc3RhdGUtPm5dID0gc3RhdGUtPm9iOworCQlzdGF0ZS0+bG9zdF9idWNrZXQtPm5leHRfbG9zdCA9IHN0YXRlLT5sb3N0X2J1Y2tldC0+bG9zdF9oZWFkOwogCQlyZXR1cm47CiAJfQogCWlmICghc3RhdGUtPmxvc3RfYnVja2V0KQpAQCAtNTM0LDcgKzUzMyw2IEBACiAJCXJldHVybjsgLyogcmVzdWx0IGRlbGV0ZWQgKi8KIAogCXdoaWxlICgxKSB7Ci0JCXN0cnVjdCBzbGluZSAqc2wgPSAmc2xpbmVbbG5vXTsKIAkJdW5zaWduZWQgbG9uZyBodW5rX2VuZDsKIAkJdW5zaWduZWQgbG9uZyBybGluZXM7CiAJCWNvbnN0IGNoYXIgKmh1bmtfY29tbWVudCA9IE5VTEw7CkBAIC02MDAsNyArNTk4LDcgQEAKIAkJCXN0cnVjdCBsbGluZSAqbGw7CiAJCQlpbnQgajsKIAkJCXVuc2lnbmVkIGxvbmcgcF9tYXNrOwotCQkJc2wgPSAmc2xpbmVbbG5vKytdOworCQkJc3RydWN0IHNsaW5lICpzbCA9ICZzbGluZVtsbm8rK107CiAJCQlsbCA9IChzbC0+ZmxhZyAmIG5vX3ByZV9kZWxldGUpID8gTlVMTCA6IHNsLT5sb3N0X2hlYWQ7CiAJCQl3aGlsZSAobGwpIHsKIAkJCQlmcHV0cyhjX29sZCwgc3Rkb3V0KTsKQEAgLTc0Nyw3ICs3NDUsNyBAQAogCiAJCQlkb25lID0gcmVhZF9pbl9mdWxsKGZkLCByZXN1bHQsIGxlbik7CiAJCQlpZiAoZG9uZSA8IDApCi0JCQkJZGllKCJyZWFkIGVycm9yICclcyciLCBlbGVtLT5wYXRoKTsKKwkJCQlkaWVfZXJybm8oInJlYWQgZXJyb3IgJyVzJyIsIGVsZW0tPnBhdGgpOwogCQkJZWxzZSBpZiAoZG9uZSA8IGxlbikKIAkJCQlkaWUoImVhcmx5IEVPRiAnJXMnIiwgZWxlbS0+cGF0aCk7CiAKQEAgLTEwNjQsNyArMTA2Miw3IEBACiAJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzLCBudW1fcGFyZW50ID0gMDsKIAkgICAgIHBhcmVudHM7CiAJICAgICBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCwgbnVtX3BhcmVudCsrKQotCQloYXNoY3B5KCh1bnNpZ25lZCBjaGFyKikocGFyZW50ICsgbnVtX3BhcmVudCksCisJCWhhc2hjcHkoKHVuc2lnbmVkIGNoYXIgKikocGFyZW50ICsgbnVtX3BhcmVudCksCiAJCQlwYXJlbnRzLT5pdGVtLT5vYmplY3Quc2hhMSk7CiAJZGlmZl90cmVlX2NvbWJpbmVkKHNoYTEsIHBhcmVudCwgbnVtX3BhcmVudCwgZGVuc2UsIHJldik7CiB9CmRpZmYgLS1naXQgYS9jb21tYW5kLWxpc3QudHh0IGIvY29tbWFuZC1saXN0LnR4dAppbmRleCAzNTgzYTMzLi5mYjAzYTJlIDEwMDY0NAotLS0gYS9jb21tYW5kLWxpc3QudHh0CisrKyBiL2NvbW1hbmQtbGlzdC50eHQKQEAgLTMzLDYgKzMzLDcgQEAKIGdpdC1kaWZmLWZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKIGdpdC1kaWZmLWluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKIGdpdC1kaWZmLXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1kaWZmdG9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCiBnaXQtZmFzdC1leHBvcnQJCQkJYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCiBnaXQtZmFzdC1pbXBvcnQJCQkJYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCiBnaXQtZmV0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiBjb21tb24KZGlmZiAtLWdpdCBhL2NvbW1pdC5jIGIvY29tbWl0LmMKaW5kZXggYzk5ZGIxNi4uZTJiY2JlOCAxMDA2NDQKLS0tIGEvY29tbWl0LmMKKysrIGIvY29tbWl0LmMKQEAgLTUwLDcgKzUwLDYgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFyc2VfY29tbWl0X2RhdGUoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICp0YWlsKQogewotCXVuc2lnbmVkIGxvbmcgZGF0ZTsKIAljb25zdCBjaGFyICpkYXRlcHRyOwogCiAJaWYgKGJ1ZiArIDYgPj0gdGFpbCkKQEAgLTczLDEwICs3Miw3IEBACiAJaWYgKGJ1ZiA+PSB0YWlsKQogCQlyZXR1cm4gMDsKIAkvKiBkYXRlcHRyIDwgYnVmICYmIGJ1ZlstMV0gPT0gJ1xuJywgc28gc3RydG91bCB3aWxsIHN0b3AgYXQgYnVmLTEgKi8KLQlkYXRlID0gc3RydG91bChkYXRlcHRyLCBOVUxMLCAxMCk7Ci0JaWYgKGRhdGUgPT0gVUxPTkdfTUFYKQotCQlkYXRlID0gMDsKLQlyZXR1cm4gZGF0ZTsKKwlyZXR1cm4gc3RydG91bChkYXRlcHRyLCBOVUxMLCAxMCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29tbWl0X2dyYWZ0ICoqY29tbWl0X2dyYWZ0OwpAQCAtMjY2LDcgKzI2MiwxMSBAQAogCQkgICAgYnVmcHRyWzQ3XSAhPSAnXG4nKQogCQkJcmV0dXJuIGVycm9yKCJiYWQgcGFyZW50cyBpbiBjb21taXQgJXMiLCBzaGExX3RvX2hleChpdGVtLT5vYmplY3Quc2hhMSkpOwogCQlidWZwdHIgKz0gNDg7Ci0JCWlmIChncmFmdCkKKwkJLyoKKwkJICogVGhlIGNsb25lIGlzIHNoYWxsb3cgaWYgbnJfcGFyZW50IDwgMCwgYW5kIHdlIG11c3QKKwkJICogbm90IHRyYXZlcnNlIGl0cyByZWFsIHBhcmVudHMgZXZlbiB3aGVuIHdlIHVuaGlkZSB0aGVtLgorCQkgKi8KKwkJaWYgKGdyYWZ0ICYmIChncmFmdC0+bnJfcGFyZW50IDwgMCB8fCBncmFmdHNfcmVwbGFjZV9wYXJlbnRzKSkKIAkJCWNvbnRpbnVlOwogCQluZXdfcGFyZW50ID0gbG9va3VwX2NvbW1pdChwYXJlbnQpOwogCQlpZiAobmV3X3BhcmVudCkKQEAgLTcwNSw2ICs3MDUsMjEgQEAKIAlyZXR1cm4gZ2V0X21lcmdlX2Jhc2VzX21hbnkob25lLCAxLCAmdHdvLCBjbGVhbnVwKTsKIH0KIAoraW50IGlzX2Rlc2NlbmRhbnRfb2Yoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKndpdGhfY29tbWl0KQoreworCWlmICghd2l0aF9jb21taXQpCisJCXJldHVybiAxOworCXdoaWxlICh3aXRoX2NvbW1pdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpvdGhlcjsKKworCQlvdGhlciA9IHdpdGhfY29tbWl0LT5pdGVtOworCQl3aXRoX2NvbW1pdCA9IHdpdGhfY29tbWl0LT5uZXh0OworCQlpZiAoaW5fbWVyZ2VfYmFzZXMob3RoZXIsICZjb21taXQsIDEpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiBpbnQgaW5fbWVyZ2VfYmFzZXMoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0ICoqcmVmZXJlbmNlLCBpbnQgbnVtKQogewogCXN0cnVjdCBjb21taXRfbGlzdCAqYmFzZXMsICpiOwpkaWZmIC0tZ2l0IGEvY29tbWl0LmggYi9jb21taXQuaAppbmRleCAzYTdiMDZhLi5iYTlmNjM4IDEwMDY0NAotLS0gYS9jb21taXQuaAorKysgYi9jb21taXQuaApAQCAtMTMzLDYgKzEzMyw3IEBACiBleHRlcm4gc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfc2hhbGxvd19jb21taXRzKHN0cnVjdCBvYmplY3RfYXJyYXkgKmhlYWRzLAogCQlpbnQgZGVwdGgsIGludCBzaGFsbG93X2ZsYWcsIGludCBub3Rfc2hhbGxvd19mbGFnKTsKIAoraW50IGlzX2Rlc2NlbmRhbnRfb2Yoc3RydWN0IGNvbW1pdCAqLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKik7CiBpbnQgaW5fbWVyZ2VfYmFzZXMoc3RydWN0IGNvbW1pdCAqLCBzdHJ1Y3QgY29tbWl0ICoqLCBpbnQpOwogCiBleHRlcm4gaW50IGludGVyYWN0aXZlX2FkZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CmRpZmYgLS1naXQgYS9jb21wYXQvYmFzZW5hbWUuYyBiL2NvbXBhdC9iYXNlbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZjhhM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvYmFzZW5hbWUuYwpAQCAtMCwwICsxLDE1IEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKKy8qIEFkYXB0ZWQgZnJvbSBsaWJpYmVydHkncyBiYXNlbmFtZS5jLiAgKi8KK2NoYXIgKmdpdGJhc2VuYW1lIChjaGFyICpwYXRoKQoreworCWNvbnN0IGNoYXIgKmJhc2U7CisJLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLworCWlmIChoYXNfZG9zX2RyaXZlX3ByZWZpeChwYXRoKSkKKwkJcGF0aCArPSAyOworCWZvciAoYmFzZSA9IHBhdGg7ICpwYXRoOyBwYXRoKyspIHsKKwkJaWYgKGlzX2Rpcl9zZXAoKnBhdGgpKQorCQkJYmFzZSA9IHBhdGggKyAxOworCX0KKwlyZXR1cm4gKGNoYXIgKiliYXNlOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L2N5Z3dpbi5jIGIvY29tcGF0L2N5Z3dpbi5jCmluZGV4IGViYWMxNDguLmI0YTUxYjkgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9jeWd3aW4uYworKysgYi9jb21wYXQvY3lnd2luLmMKQEAgLTg5LDEwICs4OSwxMCBAQAogLyoKICAqIEF0IHN0YXJ0IHVwLCB3ZSBhcmUgdHJ5aW5nIHRvIGRldGVybWluZSB3aGV0aGVyIFdpbjMyIEFQSSBvciBjeWd3aW4gc3RhdAogICogZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkLiBUaGUgY2hvaWNlIGlzIGRldGVybWluZWQgYnkgY29yZS5pZ25vcmVjeWd3aW5mc3RyaWNrcy4KLSAqIFJlYWRpbmcgdGhpcyBvcHRpb24gaXMgbm90IGFsd2F5cyBwb3NzaWJsZSBpbW1lZGlhdGVseSBhcyBnaXRfZGlyIG1heSBiZQorICogUmVhZGluZyB0aGlzIG9wdGlvbiBpcyBub3QgYWx3YXlzIHBvc3NpYmxlIGltbWVkaWF0ZWx5IGFzIGdpdF9kaXIgbWF5CiAgKiBub3QgYmUgc2V0IHlldC4gU28gdW50aWwgaXQgaXMgc2V0LCB1c2UgY3lnd2luIGxzdGF0L3N0YXQgZnVuY3Rpb25zLgogICogSG93ZXZlciwgaWYgY29yZS5maWxlbW9kZSBpcyBzZXQsIHdlIG11c3QgdXNlIHRoZSBDeWd3aW4gcG9zaXgKLSAqIHN0YXQvbHN0YXQgYXMgdGhlIFdpbmRvd3Mgc3RhdCBmdWN0aW9ucyBkbyBub3QgZGV0ZXJtaW5lIHBvc2l4IGZpbGVtb2RlLgorICogc3RhdC9sc3RhdCBhcyB0aGUgV2luZG93cyBzdGF0IGZ1bmN0aW9ucyBkbyBub3QgZGV0ZXJtaW5lIHBvc2l4IGZpbGVtb2RlLgogICoKICAqIE5vdGUgdGhhdCBnaXRfY3lnd2luX2NvbmZpZygpIGRvZXMgTk9UIGNhbGwgZ2l0X2RlZmF1bHRfY29uZmlnKCkgYW5kIHRoaXMKICAqIGlzIGRlbGliZXJhdGUuICBNYW55IGNvbW1hbmRzIHJlYWQgZnJvbSBjb25maWcgdG8gZXN0YWJsaXNoIGluaXRpYWwKZGlmZiAtLWdpdCBhL2NvbXBhdC9mbm1hdGNoL2ZubWF0Y2guYyBiL2NvbXBhdC9mbm1hdGNoL2ZubWF0Y2guYwppbmRleCAxZjRlYWQ1Li4xNGZlYWM3IDEwMDY0NAotLS0gYS9jb21wYXQvZm5tYXRjaC9mbm1hdGNoLmMKKysrIGIvY29tcGF0L2ZubWF0Y2gvZm5tYXRjaC5jCkBAIC0zOSw3ICszOSw3IEBACiAjIGluY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAKLS8qIEZvciBwbGF0Zm9ybSB3aGljaCBzdXBwb3J0IHRoZSBJU08gQyBhbWVuZGVtZW50IDEgZnVuY3Rpb25hbGl0eSB3ZQorLyogRm9yIHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IHRoZSBJU08gQyBhbWVuZG1lbnQgMSBmdW5jdGlvbmFsaXR5IHdlCiAgICBzdXBwb3J0IHVzZXIgZGVmaW5lZCBjaGFyYWN0ZXIgY2xhc3Nlcy4gICovCiAjaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IKQogLyogU29sYXJpcyAyLjUgaGFzIGEgYnVnOiA8d2NoYXIuaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgPHdjdHlwZS5oPi4gICovCkBAIC05MCw3ICs5MCw3IEBACiAKICMgaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IKQogLyogVGhlIEdOVSBDIGxpYnJhcnkgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdXNlci1kZWZpbmVkIGNoYXJhY3RlciBjbGFzc2VzCi0gICBhbmQgdGhlIGZ1bmN0aW9ucyBmcm9tIElTTyBDIGFtZW5kZW1lbnQgMS4gICovCisgICBhbmQgdGhlIGZ1bmN0aW9ucyBmcm9tIElTTyBDIGFtZW5kbWVudCAxLiAgKi8KICMgIGlmZGVmIENIQVJDTEFTU19OQU1FX01BWAogIyAgIGRlZmluZSBDSEFSX0NMQVNTX01BWF9MRU5HVEggQ0hBUkNMQVNTX05BTUVfTUFYCiAjICBlbHNlCmRpZmYgLS1naXQgYS9jb21wYXQvbWVtbWVtLmMgYi9jb21wYXQvbWVtbWVtLmMKaW5kZXggY2QwZDg3Ny4uNTZiY2I0MiAxMDA2NDQKLS0tIGEvY29tcGF0L21lbW1lbS5jCisrKyBiL2NvbXBhdC9tZW1tZW0uYwpAQCAtNSw2ICs1LDggQEAKIHsKIAljb25zdCBjaGFyICpiZWdpbiA9IGhheXN0YWNrOwogCWNvbnN0IGNoYXIgKmxhc3RfcG9zc2libGUgPSBiZWdpbiArIGhheXN0YWNrX2xlbiAtIG5lZWRsZV9sZW47CisJY29uc3QgY2hhciAqdGFpbCA9IG5lZWRsZTsKKwljaGFyIHBvaW50OwogCiAJLyoKIAkgKiBUaGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZW1wdHkgc3RyaW5nIGlzIGRlZW1lZCB0byBvY2N1ciBhdApAQCAtMjAsOCArMjIsOSBAQAogCWlmIChoYXlzdGFja19sZW4gPCBuZWVkbGVfbGVuKQogCQlyZXR1cm4gTlVMTDsKIAorCXBvaW50ID0gKnRhaWwrKzsKIAlmb3IgKDsgYmVnaW4gPD0gbGFzdF9wb3NzaWJsZTsgYmVnaW4rKykgewotCQlpZiAoIW1lbWNtcChiZWdpbiwgbmVlZGxlLCBuZWVkbGVfbGVuKSkKKwkJaWYgKCpiZWdpbiA9PSBwb2ludCAmJiAhbWVtY21wKGJlZ2luICsgMSwgdGFpbCwgbmVlZGxlX2xlbiAtIDEpKQogCQkJcmV0dXJuICh2b2lkICopYmVnaW47CiAJfQogCmRpZmYgLS1naXQgYS9jb21wYXQvbWluZ3cuYyBiL2NvbXBhdC9taW5ndy5jCmluZGV4IDNkYmU2YTcuLmJlZDQxNzggMTAwNjQ0Ci0tLSBhL2NvbXBhdC9taW5ndy5jCisrKyBiL2NvbXBhdC9taW5ndy5jCkBAIC0xLDkgKzEsMTIzIEBACiAjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCiAjaW5jbHVkZSAid2luMzIuaCIKKyNpbmNsdWRlIDxjb25pby5oPgogI2luY2x1ZGUgIi4uL3N0cmJ1Zi5oIgogCiB1bnNpZ25lZCBpbnQgX0NSVF9mbW9kZSA9IF9PX0JJTkFSWTsKIAorc3RhdGljIGludCBlcnJfd2luX3RvX3Bvc2l4KERXT1JEIHdpbmVycikKK3sKKwlpbnQgZXJyb3IgPSBFTk9TWVM7CisJc3dpdGNoKHdpbmVycikgeworCWNhc2UgRVJST1JfQUNDRVNTX0RFTklFRDogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfQUNDT1VOVF9ESVNBQkxFRDogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfQUNDT1VOVF9SRVNUUklDVElPTjogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfQUxSRUFEWV9BU1NJR05FRDogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9BTFJFQURZX0VYSVNUUzogZXJyb3IgPSBFRVhJU1Q7IGJyZWFrOworCWNhc2UgRVJST1JfQVJJVEhNRVRJQ19PVkVSRkxPVzogZXJyb3IgPSBFUkFOR0U7IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX0NPTU1BTkQ6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9ERVZJQ0U6IGVycm9yID0gRU5PREVWOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9EUklWRVJfTEVWRUw6IGVycm9yID0gRU5YSU87IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX0VYRV9GT1JNQVQ6IGVycm9yID0gRU5PRVhFQzsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfRk9STUFUOiBlcnJvciA9IEVOT0VYRUM7IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX0xFTkdUSDogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX1BBVEhOQU1FOiBlcnJvciA9IEVOT0VOVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfUElQRTogZXJyb3IgPSBFUElQRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfVU5JVDogZXJyb3IgPSBFTk9ERVY7IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX1VTRVJOQU1FOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9CUk9LRU5fUElQRTogZXJyb3IgPSBFUElQRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9CVUZGRVJfT1ZFUkZMT1c6IGVycm9yID0gRU5BTUVUT09MT05HOyBicmVhazsKKwljYXNlIEVSUk9SX0JVU1k6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfQlVTWV9EUklWRTogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRDogZXJyb3IgPSBFTk9TWVM7IGJyZWFrOworCWNhc2UgRVJST1JfQ0FOTk9UX01BS0U6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0NBTlRPUEVOOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9DQU5UUkVBRDogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfQ0FOVFdSSVRFOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9DUkM6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX0NVUlJFTlRfRElSRUNUT1JZOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9ERVZJQ0VfSU5fVVNFOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX0RFVl9OT1RfRVhJU1Q6IGVycm9yID0gRU5PREVWOyBicmVhazsKKwljYXNlIEVSUk9SX0RJUkVDVE9SWTogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfRElSX05PVF9FTVBUWTogZXJyb3IgPSBFTk9URU1QVFk7IGJyZWFrOworCWNhc2UgRVJST1JfRElTS19DSEFOR0U6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX0RJU0tfRlVMTDogZXJyb3IgPSBFTk9TUEM7IGJyZWFrOworCWNhc2UgRVJST1JfRFJJVkVfTE9DS0VEOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX0VOVlZBUl9OT1RfRk9VTkQ6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0VYRV9NQVJLRURfSU5WQUxJRDogZXJyb3IgPSBFTk9FWEVDOyBicmVhazsKKwljYXNlIEVSUk9SX0ZJTEVOQU1FX0VYQ0VEX1JBTkdFOiBlcnJvciA9IEVOQU1FVE9PTE9ORzsgYnJlYWs7CisJY2FzZSBFUlJPUl9GSUxFX0VYSVNUUzogZXJyb3IgPSBFRVhJU1Q7IGJyZWFrOworCWNhc2UgRVJST1JfRklMRV9JTlZBTElEOiBlcnJvciA9IEVOT0RFVjsgYnJlYWs7CisJY2FzZSBFUlJPUl9GSUxFX05PVF9GT1VORDogZXJyb3IgPSBFTk9FTlQ7IGJyZWFrOworCWNhc2UgRVJST1JfR0VOX0ZBSUxVUkU6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX0hBTkRMRV9ESVNLX0ZVTEw6IGVycm9yID0gRU5PU1BDOyBicmVhazsKKwljYXNlIEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVI6IGVycm9yID0gRU5PTUVNOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfQUNDRVNTOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0FERFJFU1M6IGVycm9yID0gRUZBVUxUOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfQkxPQ0s6IGVycm9yID0gRUZBVUxUOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfREFUQTogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9EUklWRTogZXJyb3IgPSBFTk9ERVY7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9FWEVfU0lHTkFUVVJFOiBlcnJvciA9IEVOT0VYRUM7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9GTEFHUzogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9GVU5DVElPTjogZXJyb3IgPSBFTk9TWVM7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9IQU5ETEU6IGVycm9yID0gRUJBREY7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9MT0dPTl9IT1VSUzogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9OQU1FOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX09XTkVSOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUjogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9QQVNTV09SRDogZXJyb3IgPSBFUEVSTTsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX1BSSU1BUllfR1JPVVA6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfU0lHTkFMX05VTUJFUjogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9UQVJHRVRfSEFORExFOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX1dPUktTVEFUSU9OOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9JT19ERVZJQ0U6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX0lPX0lOQ09NUExFVEU6IGVycm9yID0gRUlOVFI7IGJyZWFrOworCWNhc2UgRVJST1JfTE9DS0VEOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX0xPQ0tfVklPTEFUSU9OOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9MT0dPTl9GQUlMVVJFOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9NQVBQRURfQUxJR05NRU5UOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9NRVRBX0VYUEFOU0lPTl9UT09fTE9ORzogZXJyb3IgPSBFMkJJRzsgYnJlYWs7CisJY2FzZSBFUlJPUl9NT1JFX0RBVEE6IGVycm9yID0gRVBJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfTkVHQVRJVkVfU0VFSzogZXJyb3IgPSBFU1BJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfTk9BQ0NFU1M6IGVycm9yID0gRUZBVUxUOyBicmVhazsKKwljYXNlIEVSUk9SX05PTkVfTUFQUEVEOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9OT1RfRU5PVUdIX01FTU9SWTogZXJyb3IgPSBFTk9NRU07IGJyZWFrOworCWNhc2UgRVJST1JfTk9UX1JFQURZOiBlcnJvciA9IEVBR0FJTjsgYnJlYWs7CisJY2FzZSBFUlJPUl9OT1RfU0FNRV9ERVZJQ0U6IGVycm9yID0gRVhERVY7IGJyZWFrOworCWNhc2UgRVJST1JfTk9fREFUQTogZXJyb3IgPSBFUElQRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9OT19NT1JFX1NFQVJDSF9IQU5ETEVTOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9OT19QUk9DX1NMT1RTOiBlcnJvciA9IEVBR0FJTjsgYnJlYWs7CisJY2FzZSBFUlJPUl9OT19TVUNIX1BSSVZJTEVHRTogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfT1BFTl9GQUlMRUQ6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX09QRU5fRklMRVM6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfT1BFUkFUSU9OX0FCT1JURUQ6IGVycm9yID0gRUlOVFI7IGJyZWFrOworCWNhc2UgRVJST1JfT1VUT0ZNRU1PUlk6IGVycm9yID0gRU5PTUVNOyBicmVhazsKKwljYXNlIEVSUk9SX1BBU1NXT1JEX0VYUElSRUQ6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX1BBVEhfQlVTWTogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9QQVRIX05PVF9GT1VORDogZXJyb3IgPSBFTk9FTlQ7IGJyZWFrOworCWNhc2UgRVJST1JfUElQRV9CVVNZOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX1BJUEVfQ09OTkVDVEVEOiBlcnJvciA9IEVQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX1BJUEVfTElTVEVOSU5HOiBlcnJvciA9IEVQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX1BJUEVfTk9UX0NPTk5FQ1RFRDogZXJyb3IgPSBFUElQRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9QUklWSUxFR0VfTk9UX0hFTEQ6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX1JFQURfRkFVTFQ6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX1NFRUs6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX1NFRUtfT05fREVWSUNFOiBlcnJvciA9IEVTUElQRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9TSEFSSU5HX0JVRkZFUl9FWENFRURFRDogZXJyb3IgPSBFTkZJTEU7IGJyZWFrOworCWNhc2UgRVJST1JfU0hBUklOR19WSU9MQVRJT046IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX1NUQUNLX09WRVJGTE9XOiBlcnJvciA9IEVOT01FTTsgYnJlYWs7CisJY2FzZSBFUlJPUl9TV0FQRVJST1I6IGVycm9yID0gRU5PRU5UOyBicmVhazsKKwljYXNlIEVSUk9SX1RPT19NQU5ZX01PRFVMRVM6IGVycm9yID0gRU1GSUxFOyBicmVhazsKKwljYXNlIEVSUk9SX1RPT19NQU5ZX09QRU5fRklMRVM6IGVycm9yID0gRU1GSUxFOyBicmVhazsKKwljYXNlIEVSUk9SX1VOUkVDT0dOSVpFRF9NRURJQTogZXJyb3IgPSBFTlhJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9VTlJFQ09HTklaRURfVk9MVU1FOiBlcnJvciA9IEVOT0RFVjsgYnJlYWs7CisJY2FzZSBFUlJPUl9XQUlUX05PX0NISUxEUkVOOiBlcnJvciA9IEVDSElMRDsgYnJlYWs7CisJY2FzZSBFUlJPUl9XUklURV9GQVVMVDogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfV1JJVEVfUFJPVEVDVDogZXJyb3IgPSBFUk9GUzsgYnJlYWs7CisJfQorCXJldHVybiBlcnJvcjsKK30KKwogI3VuZGVmIG9wZW4KIGludCBtaW5nd19vcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG9mbGFncywgLi4uKQogewpAQCAtNDYsNyArMTYwLDggQEAKIAkJYnVmLT5zdF91aWQgPSAwOwogCQlidWYtPnN0X25saW5rID0gMTsKIAkJYnVmLT5zdF9tb2RlID0gZmlsZV9hdHRyX3RvX3N0X21vZGUoZmRhdGEuZHdGaWxlQXR0cmlidXRlcyk7Ci0JCWJ1Zi0+c3Rfc2l6ZSA9IGZkYXRhLm5GaWxlU2l6ZUxvdzsgLyogQ2FuJ3QgdXNlIG5GaWxlU2l6ZUhpZ2gsIHNpbmNlIGl0J3Mgbm90IGEgc3RhdDY0ICovCisJCWJ1Zi0+c3Rfc2l6ZSA9IGZkYXRhLm5GaWxlU2l6ZUxvdyB8CisJCQkoKChvZmZfdClmZGF0YS5uRmlsZVNpemVIaWdoKTw8MzIpOwogCQlidWYtPnN0X2RldiA9IGJ1Zi0+c3RfcmRldiA9IDA7IC8qIG5vdCB1c2VkIGJ5IEdpdCAqLwogCQlidWYtPnN0X2F0aW1lID0gZmlsZXRpbWVfdG9fdGltZV90KCYoZmRhdGEuZnRMYXN0QWNjZXNzVGltZSkpOwogCQlidWYtPnN0X210aW1lID0gZmlsZXRpbWVfdG9fdGltZV90KCYoZmRhdGEuZnRMYXN0V3JpdGVUaW1lKSk7CkBAIC0xMDEsNyArMjE2LDcgQEAKIAl9CiAJLyogZGlyZWN0IG5vbi1maWxlIGhhbmRsZXMgdG8gTVMncyBmc3RhdCgpICovCiAJaWYgKEdldEZpbGVUeXBlKGZoKSAhPSBGSUxFX1RZUEVfRElTSykKLQkJcmV0dXJuIGZzdGF0KGZkLCBidWYpOworCQlyZXR1cm4gX2ZzdGF0aTY0KGZkLCBidWYpOwogCiAJaWYgKEdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlKGZoLCAmZmRhdGEpKSB7CiAJCWJ1Zi0+c3RfaW5vID0gMDsKQEAgLTEwOSw3ICsyMjQsOCBAQAogCQlidWYtPnN0X3VpZCA9IDA7CiAJCWJ1Zi0+c3RfbmxpbmsgPSAxOwogCQlidWYtPnN0X21vZGUgPSBmaWxlX2F0dHJfdG9fc3RfbW9kZShmZGF0YS5kd0ZpbGVBdHRyaWJ1dGVzKTsKLQkJYnVmLT5zdF9zaXplID0gZmRhdGEubkZpbGVTaXplTG93OyAvKiBDYW4ndCB1c2UgbkZpbGVTaXplSGlnaCwgc2luY2UgaXQncyBub3QgYSBzdGF0NjQgKi8KKwkJYnVmLT5zdF9zaXplID0gZmRhdGEubkZpbGVTaXplTG93IHwKKwkJCSgoKG9mZl90KWZkYXRhLm5GaWxlU2l6ZUhpZ2gpPDwzMik7CiAJCWJ1Zi0+c3RfZGV2ID0gYnVmLT5zdF9yZGV2ID0gMDsgLyogbm90IHVzZWQgYnkgR2l0ICovCiAJCWJ1Zi0+c3RfYXRpbWUgPSBmaWxldGltZV90b190aW1lX3QoJihmZGF0YS5mdExhc3RBY2Nlc3NUaW1lKSk7CiAJCWJ1Zi0+c3RfbXRpbWUgPSBmaWxldGltZV90b190aW1lX3QoJihmZGF0YS5mdExhc3RXcml0ZVRpbWUpKTsKQEAgLTI4MSw3ICszOTcsNyBAQAogCQkgKiBpdHMgb3duIGlucHV0IGRhdGEgdG8gYmVjb21lIGF2YWlsYWJsZS4gQnV0IHNpbmNlCiAJCSAqIHRoZSBwcm9jZXNzIChwYWNrLW9iamVjdHMpIGlzIGl0c2VsZiBDUFUgaW50ZW5zaXZlLAogCQkgKiBpdCB3aWxsIGhhcHBpbHkgcGljayB1cCB0aGUgdGltZSBzbGljZSB0aGF0IHdlIGFyZQotCQkgKiByZWxpbmd1aXNoaW5nIGhlcmUuCisJCSAqIHJlbGlucXVpc2hpbmcgaGVyZS4KIAkJICovCiAJCVNsZWVwKDApOwogCQlnb3RvIHJlcGVhdDsKQEAgLTM0Miw3ICs0NTgsNyBAQAogCWNvbnN0IGNoYXIgKnAgPSBhcmc7CiAJaWYgKCEqcCkgZm9yY2VfcXVvdGVzID0gMTsKIAl3aGlsZSAoKnApIHsKLQkJaWYgKGlzc3BhY2UoKnApIHx8ICpwID09ICcqJyB8fCAqcCA9PSAnPycgfHwgKnAgPT0gJ3snKQorCQlpZiAoaXNzcGFjZSgqcCkgfHwgKnAgPT0gJyonIHx8ICpwID09ICc/JyB8fCAqcCA9PSAneycgfHwgKnAgPT0gJ1wnJykKIAkJCWZvcmNlX3F1b3RlcyA9IDE7CiAJCWVsc2UgaWYgKCpwID09ICciJykKIAkJCW4rKzsKQEAgLTQxMCw4ICs1MjYsOCBAQAogCWlmIChidWZbMF0gIT0gJyMnIHx8IGJ1ZlsxXSAhPSAnIScpCiAJCXJldHVybiBOVUxMOwogCWJ1ZltuXSA9ICdcMCc7Ci0JcCA9IHN0cmNocihidWYsICdcbicpOwotCWlmICghcCkKKwlwID0gYnVmICsgc3RyY3NwbihidWYsICJcclxuIik7CisJaWYgKCEqcCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkqcCA9ICdcMCc7CkBAIC00NDcsNyArNTYzLDcgQEAKIAlpZiAoIW4pCiAJCXJldHVybiBOVUxMOwogCi0JcGF0aCA9IHhtYWxsb2MoKG4rMSkqc2l6ZW9mKGNoYXIqKSk7CisJcGF0aCA9IHhtYWxsb2MoKG4rMSkqc2l6ZW9mKGNoYXIgKikpOwogCXAgPSBlbnZwYXRoOwogCWkgPSAwOwogCWRvIHsKQEAgLTgxOSw3ICs5MzUsOSBAQAogI3VuZGVmIHJlbmFtZQogaW50IG1pbmd3X3JlbmFtZShjb25zdCBjaGFyICpwb2xkLCBjb25zdCBjaGFyICpwbmV3KQogewotCURXT1JEIGF0dHJzOworCURXT1JEIGF0dHJzLCBnbGU7CisJaW50IHRyaWVzID0gMDsKKwlzdGF0aWMgY29uc3QgaW50IGRlbGF5W10gPSB7IDAsIDEsIDEwLCAyMCwgNDAgfTsKIAogCS8qCiAJICogVHJ5IG5hdGl2ZSByZW5hbWUoKSBmaXJzdCB0byBnZXQgZXJybm8gcmlnaHQuCkBAIC04MjksMTAgKzk0NywxMiBAQAogCQlyZXR1cm4gMDsKIAlpZiAoZXJybm8gIT0gRUVYSVNUKQogCQlyZXR1cm4gLTE7CityZXBlYXQ6CiAJaWYgKE1vdmVGaWxlRXgocG9sZCwgcG5ldywgTU9WRUZJTEVfUkVQTEFDRV9FWElTVElORykpCiAJCXJldHVybiAwOwogCS8qIFRPRE86IHRyYW5zbGF0ZSBtb3JlIGVycm9ycyAqLwotCWlmIChHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9BQ0NFU1NfREVOSUVEICYmCisJZ2xlID0gR2V0TGFzdEVycm9yKCk7CisJaWYgKGdsZSA9PSBFUlJPUl9BQ0NFU1NfREVOSUVEICYmCiAJICAgIChhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzKHBuZXcpKSAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgewogCQlpZiAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpIHsKIAkJCWVycm5vID0gRUlTRElSOwpAQCAtODQyLDEwICs5NjIsMjMgQEAKIAkJICAgIFNldEZpbGVBdHRyaWJ1dGVzKHBuZXcsIGF0dHJzICYgfkZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSkgewogCQkJaWYgKE1vdmVGaWxlRXgocG9sZCwgcG5ldywgTU9WRUZJTEVfUkVQTEFDRV9FWElTVElORykpCiAJCQkJcmV0dXJuIDA7CisJCQlnbGUgPSBHZXRMYXN0RXJyb3IoKTsKIAkJCS8qIHJldmVydCBmaWxlIGF0dHJpYnV0ZXMgb24gZmFpbHVyZSAqLwogCQkJU2V0RmlsZUF0dHJpYnV0ZXMocG5ldywgYXR0cnMpOwogCQl9CiAJfQorCWlmICh0cmllcyA8IEFSUkFZX1NJWkUoZGVsYXkpICYmIGdsZSA9PSBFUlJPUl9BQ0NFU1NfREVOSUVEKSB7CisJCS8qCisJCSAqIFdlIGFzc3VtZSB0aGF0IHNvbWUgb3RoZXIgcHJvY2VzcyBoYWQgdGhlIHNvdXJjZSBvcgorCQkgKiBkZXN0aW5hdGlvbiBmaWxlIG9wZW4gYXQgdGhlIHdyb25nIG1vbWVudCBhbmQgcmV0cnkuCisJCSAqIEluIG9yZGVyIHRvIGdpdmUgdGhlIG90aGVyIHByb2Nlc3MgYSBoaWdoZXIgY2hhbmNlIHRvCisJCSAqIGNvbXBsZXRlIGl0cyBvcGVyYXRpb24sIHdlIGdpdmUgdXAgb3VyIHRpbWUgc2xpY2Ugbm93LgorCQkgKiBJZiB3ZSBoYXZlIHRvIHJldHJ5IGFnYWluLCB3ZSBkbyBzbGVlcCBhIGJpdC4KKwkJICovCisJCVNsZWVwKGRlbGF5W3RyaWVzXSk7CisJCXRyaWVzKys7CisJCWdvdG8gcmVwZWF0OworCX0KIAllcnJubyA9IEVBQ0NFUzsKIAlyZXR1cm4gLTE7CiB9CkBAIC0xMDAzLDMgKzExMzYsOTggQEAKIAlwcmludGYoIkxhdW5jaGluZyBkZWZhdWx0IGJyb3dzZXIgdG8gZGlzcGxheSBIVE1MIC4uLlxuIik7CiAJU2hlbGxFeGVjdXRlKE5VTEwsICJvcGVuIiwgaHRtbHBhdGgsIE5VTEwsICJcXCIsIDApOwogfQorCitpbnQgbGluayhjb25zdCBjaGFyICpvbGRwYXRoLCBjb25zdCBjaGFyICpuZXdwYXRoKQoreworCXR5cGVkZWYgQk9PTCBXSU5BUEkgKCpUKShjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIExQU0VDVVJJVFlfQVRUUklCVVRFUyk7CisJc3RhdGljIFQgY3JlYXRlX2hhcmRfbGluayA9IE5VTEw7CisJaWYgKCFjcmVhdGVfaGFyZF9saW5rKSB7CisJCWNyZWF0ZV9oYXJkX2xpbmsgPSAoVCkgR2V0UHJvY0FkZHJlc3MoCisJCQlHZXRNb2R1bGVIYW5kbGUoImtlcm5lbDMyLmRsbCIpLCAiQ3JlYXRlSGFyZExpbmtBIik7CisJCWlmICghY3JlYXRlX2hhcmRfbGluaykKKwkJCWNyZWF0ZV9oYXJkX2xpbmsgPSAoVCktMTsKKwl9CisJaWYgKGNyZWF0ZV9oYXJkX2xpbmsgPT0gKFQpLTEpIHsKKwkJZXJybm8gPSBFTk9TWVM7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCFjcmVhdGVfaGFyZF9saW5rKG5ld3BhdGgsIG9sZHBhdGgsIE5VTEwpKSB7CisJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2NoYXIgKmdldHBhc3MoY29uc3QgY2hhciAqcHJvbXB0KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlmcHV0cyhwcm9tcHQsIHN0ZGVycik7CisJZm9yICg7OykgeworCQljaGFyIGMgPSBfZ2V0Y2goKTsKKwkJaWYgKGMgPT0gJ1xyJyB8fCBjID09ICdcbicpCisJCQlicmVhazsKKwkJc3RyYnVmX2FkZGNoKCZidWYsIGMpOworCX0KKwlmcHV0cygiXG4iLCBzdGRlcnIpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworfQorCisjaWZuZGVmIE5PX01JTkdXX1JFUExBQ0VfUkVBRERJUgorLyogTWluR1cgcmVhZGRpciBpbXBsZW1lbnRhdGlvbiB0byBhdm9pZCBleHRyYSBsc3RhdHMgZm9yIEdpdCAqLworc3RydWN0IG1pbmd3X0RJUgoreworCXN0cnVjdCBfZmluZGRhdGFfdAlkZF9kdGE7CQkvKiBkaXNrIHRyYW5zZmVyIGFyZWEgZm9yIHRoaXMgZGlyICovCisJc3RydWN0IG1pbmd3X2RpcmVudAlkZF9kaXI7CQkvKiBPdXIgb3duIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZF90eXBlICovCisJbG9uZwkJCWRkX2hhbmRsZTsJLyogX2ZpbmRuZXh0IGhhbmRsZSAqLworCWludAkJCWRkX3N0YXQ7IAkvKiAwID0gbmV4dCBlbnRyeSB0byByZWFkIGlzIGZpcnN0IGVudHJ5LCAtMSA9IG9mZiB0aGUgZW5kLCBwb3NpdGl2ZSA9IDAgYmFzZWQgaW5kZXggb2YgbmV4dCBlbnRyeSAqLworCWNoYXIJCQlkZF9uYW1lWzFdOyAJLyogZ2l2ZW4gcGF0aCBmb3IgZGlyIHdpdGggc2VhcmNoIHBhdHRlcm4gKHN0cnVjdCBpcyBleHRlbmRlZCkgKi8KK307CisKK3N0cnVjdCBkaXJlbnQgKm1pbmd3X3JlYWRkaXIoRElSICpkaXIpCit7CisJV0lOMzJfRklORF9EQVRBQSBidWY7CisJSEFORExFIGhhbmRsZTsKKwlzdHJ1Y3QgbWluZ3dfRElSICptZGlyID0gKHN0cnVjdCBtaW5nd19ESVIqKWRpcjsKKworCWlmICghZGlyLT5kZF9oYW5kbGUpIHsKKwkJZXJybm8gPSBFQkFERjsgLyogTm8gc2V0X2Vycm5vIGZvciBtaW5ndyAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoZGlyLT5kZF9oYW5kbGUgPT0gKGxvbmcpSU5WQUxJRF9IQU5ETEVfVkFMVUUgJiYgZGlyLT5kZF9zdGF0ID09IDApCisJeworCQloYW5kbGUgPSBGaW5kRmlyc3RGaWxlQShkaXItPmRkX25hbWUsICZidWYpOworCQlEV09SRCBsYXN0ZXJyID0gR2V0TGFzdEVycm9yKCk7CisJCWRpci0+ZGRfaGFuZGxlID0gKGxvbmcpaGFuZGxlOworCQlpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFICYmIChsYXN0ZXJyICE9IEVSUk9SX05PX01PUkVfRklMRVMpKSB7CisJCQllcnJubyA9IGVycl93aW5fdG9fcG9zaXgobGFzdGVycik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZSBpZiAoZGlyLT5kZF9oYW5kbGUgPT0gKGxvbmcpSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIGlmICghRmluZE5leHRGaWxlQSgoSEFORExFKWRpci0+ZGRfaGFuZGxlLCAmYnVmKSkgeworCQlEV09SRCBsYXN0ZXJyID0gR2V0TGFzdEVycm9yKCk7CisJCUZpbmRDbG9zZSgoSEFORExFKWRpci0+ZGRfaGFuZGxlKTsKKwkJZGlyLT5kZF9oYW5kbGUgPSAobG9uZylJTlZBTElEX0hBTkRMRV9WQUxVRTsKKwkJLyogUE9TSVggc2F5cyB5b3Ugc2hvdWxkbid0IHNldCBlcnJubyB3aGVuIHJlYWRkaXIgY2FuJ3QKKwkJICAgZmluZCBhbnkgbW9yZSBmaWxlczsgc28sIGlmIGFub3RoZXIgZXJyb3Igd2UgbGVhdmUgaXQgc2V0LiAqLworCQlpZiAobGFzdGVyciAhPSBFUlJPUl9OT19NT1JFX0ZJTEVTKQorCQkJZXJybm8gPSBlcnJfd2luX3RvX3Bvc2l4KGxhc3RlcnIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBXZSBnZXQgaGVyZSBpZiBgYnVmJyBjb250YWlucyB2YWxpZCBkYXRhLiAgKi8KKwlzdHJjcHkoZGlyLT5kZF9kaXIuZF9uYW1lLCBidWYuY0ZpbGVOYW1lKTsKKwkrK2Rpci0+ZGRfc3RhdDsKKworCS8qIFNldCBmaWxlIHR5cGUsIGJhc2VkIG9uIFdJTjMyX0ZJTkRfREFUQSAqLworCW1kaXItPmRkX2Rpci5kX3R5cGUgPSAwOworCWlmIChidWYuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKwkJbWRpci0+ZGRfZGlyLmRfdHlwZSB8PSBEVF9ESVI7CisJZWxzZQorCQltZGlyLT5kZF9kaXIuZF90eXBlIHw9IERUX1JFRzsKKworCXJldHVybiAoc3RydWN0IGRpcmVudCopJmRpci0+ZGRfZGlyOworfQorI2VuZGlmIC8vICFOT19NSU5HV19SRVBMQUNFX1JFQURESVIKZGlmZiAtLWdpdCBhL2NvbXBhdC9taW5ndy5oIGIvY29tcGF0L21pbmd3LmgKaW5kZXggNGYyNzVjYi4uYzE4NTljNSAxMDA2NDQKLS0tIGEvY29tcGF0L21pbmd3LmgKKysrIGIvY29tcGF0L21pbmd3LmgKQEAgLTIxLDEyICsyMSwxMiBAQAogI2RlZmluZSBXRVhJVFNUQVRVUyh4KSAoKHgpICYgMHhmZikKICNkZWZpbmUgV0lGU0lHTkFMRUQoeCkgKCh1bnNpZ25lZCkoeCkgPiAyNTkpCiAKLSNkZWZpbmUgU0lHS0lMTCAwCi0jZGVmaW5lIFNJR0NITEQgMAotI2RlZmluZSBTSUdQSVBFIDAKLSNkZWZpbmUgU0lHSFVQIDAKLSNkZWZpbmUgU0lHUVVJVCAwCi0jZGVmaW5lIFNJR0FMUk0gMTAwCisjZGVmaW5lIFNJR0hVUCAxCisjZGVmaW5lIFNJR1FVSVQgMworI2RlZmluZSBTSUdLSUxMIDkKKyNkZWZpbmUgU0lHUElQRSAxMworI2RlZmluZSBTSUdBTFJNIDE0CisjZGVmaW5lIFNJR0NITEQgMTcKIAogI2RlZmluZSBGX0dFVEZEIDEKICNkZWZpbmUgRl9TRVRGRCAyCkBAIC0zOCw2ICszOCw4IEBACiAJY2hhciAqcHdfZGlyOwogfTsKIAorZXh0ZXJuIGNoYXIgKmdldHBhc3MoY29uc3QgY2hhciAqcHJvbXB0KTsKKwogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOyAgICAgICAgICAgLyogZmlsZSBkZXNjcmlwdG9yICovCiAJc2hvcnQgZXZlbnRzOyAgICAgLyogcmVxdWVzdGVkIGV2ZW50cyAqLwpAQCAtNjcsOCArNjksNiBAQAogeyBlcnJubyA9IEVOT1NZUzsgcmV0dXJuIC0xOyB9CiBzdGF0aWMgaW5saW5lIGludCBzeW1saW5rKGNvbnN0IGNoYXIgKm9sZHBhdGgsIGNvbnN0IGNoYXIgKm5ld3BhdGgpCiB7IGVycm5vID0gRU5PU1lTOyByZXR1cm4gLTE7IH0KLXN0YXRpYyBpbmxpbmUgaW50IGxpbmsoY29uc3QgY2hhciAqb2xkcGF0aCwgY29uc3QgY2hhciAqbmV3cGF0aCkKLXsgZXJybm8gPSBFTk9TWVM7IHJldHVybiAtMTsgfQogc3RhdGljIGlubGluZSBpbnQgZmNobW9kKGludCBmaWxkZXMsIG1vZGVfdCBtb2RlKQogeyBlcnJubyA9IEVOT1NZUzsgcmV0dXJuIC0xOyB9CiBzdGF0aWMgaW5saW5lIGludCBmb3JrKHZvaWQpCkBAIC05Miw2ICs5Miw4IEBACiAJZXJybm8gPSBFSU5WQUw7CiAJcmV0dXJuIC0xOwogfQorLyogYmFzaCBjYW5ub3QgcmVsaWFibHkgZGV0ZWN0IG5lZ2F0aXZlIHJldHVybiBjb2RlcyBhcyBmYWlsdXJlICovCisjZGVmaW5lIGV4aXQoY29kZSkgZXhpdCgoY29kZSkgJiAweGZmKQogCiAvKgogICogc2ltcGxlIGFkYXB0b3JzCkBAIC0xMTEsNyArMTEzLDcgQEAKIH0KICNkZWZpbmUgdW5saW5rIG1pbmd3X3VubGluawogCi1zdGF0aWMgaW5saW5lIGludCB3YWl0cGlkKHBpZF90IHBpZCwgdW5zaWduZWQgKnN0YXR1cywgdW5zaWduZWQgb3B0aW9ucykKK3N0YXRpYyBpbmxpbmUgaW50IHdhaXRwaWQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgdW5zaWduZWQgb3B0aW9ucykKIHsKIAlpZiAob3B0aW9ucyA9PSAwKQogCQlyZXR1cm4gX2N3YWl0KHN0YXR1cywgcGlkLCAwKTsKQEAgLTEzNCw2ICsxMzYsNyBAQAogc3RydWN0IHBhc3N3ZCAqZ2V0cHd1aWQoaW50IHVpZCk7CiBpbnQgc2V0aXRpbWVyKGludCB0eXBlLCBzdHJ1Y3QgaXRpbWVydmFsICppbiwgc3RydWN0IGl0aW1lcnZhbCAqb3V0KTsKIGludCBzaWdhY3Rpb24oaW50IHNpZywgc3RydWN0IHNpZ2FjdGlvbiAqaW4sIHN0cnVjdCBzaWdhY3Rpb24gKm91dCk7CitpbnQgbGluayhjb25zdCBjaGFyICpvbGRwYXRoLCBjb25zdCBjaGFyICpuZXdwYXRoKTsKIAogLyoKICAqIHJlcGxhY2VtZW50cyBvZiBleGlzdGluZyBmdW5jdGlvbnMKQEAgLTE2MCwxNCArMTYzLDIyIEBACiBpbnQgbWluZ3dfcmVuYW1lKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAjZGVmaW5lIHJlbmFtZSBtaW5nd19yZW5hbWUKIAorI2lmZGVmIFVTRV9XSU4zMl9NTUFQCitpbnQgbWluZ3dfZ2V0cGFnZXNpemUodm9pZCk7CisjZGVmaW5lIGdldHBhZ2VzaXplIG1pbmd3X2dldHBhZ2VzaXplCisjZW5kaWYKKwogLyogVXNlIG1pbmd3X2xzdGF0KCkgaW5zdGVhZCBvZiBsc3RhdCgpL3N0YXQoKSBhbmQKICAqIG1pbmd3X2ZzdGF0KCkgaW5zdGVhZCBvZiBmc3RhdCgpIG9uIFdpbmRvd3MuCiAgKi8KKyNkZWZpbmUgb2ZmX3Qgb2ZmNjRfdAorI2RlZmluZSBzdGF0IF9zdGF0aTY0CisjZGVmaW5lIGxzZWVrIF9sc2Vla2k2NAogaW50IG1pbmd3X2xzdGF0KGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgc3RydWN0IHN0YXQgKmJ1Zik7CiBpbnQgbWluZ3dfZnN0YXQoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqYnVmKTsKICNkZWZpbmUgZnN0YXQgbWluZ3dfZnN0YXQKICNkZWZpbmUgbHN0YXQgbWluZ3dfbHN0YXQKLSNkZWZpbmUgc3RhdCh4LHkpIG1pbmd3X2xzdGF0KHgseSkKKyNkZWZpbmUgX3N0YXRpNjQoeCx5KSBtaW5nd19sc3RhdCh4LHkpCiAKIGludCBtaW5nd191dGltZShjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IHN0cnVjdCB1dGltYnVmICp0aW1lcyk7CiAjZGVmaW5lIHV0aW1lIG1pbmd3X3V0aW1lCkBAIC0yMjYsMyArMjM3LDMyIEBACiAJcmV0dXJuIG1pbmd3X21haW4oYXJnYywgYXJndik7IFwKIH0gXAogc3RhdGljIGludCBtaW5nd19tYWluKGMsdikKKworI2lmbmRlZiBOT19NSU5HV19SRVBMQUNFX1JFQURESVIKKy8qCisgKiBBIHJlcGxhY2VtZW50IG9mIHJlYWRkaXIsIHRvIGVuc3VyZSB0aGF0IGl0IHJlYWRzIHRoZSBmaWxlIHR5cGUgYXQKKyAqIHRoZSBzYW1lIHRpbWUuIFRoaXMgYXZvaWQgZXh0cmEgdW5uZWVkZWQgbHN0YXRzIGluIGdpdCBvbiBNaW5HVworICovCisjdW5kZWYgRFRfVU5LTk9XTgorI3VuZGVmIERUX0RJUgorI3VuZGVmIERUX1JFRworI3VuZGVmIERUX0xOSworI2RlZmluZSBEVF9VTktOT1dOCTAKKyNkZWZpbmUgRFRfRElSCQkxCisjZGVmaW5lIERUX1JFRwkJMgorI2RlZmluZSBEVF9MTksJCTMKKworc3RydWN0IG1pbmd3X2RpcmVudAoreworCWxvbmcJCWRfaW5vOwkJCS8qIEFsd2F5cyB6ZXJvLiAqLworCXVuaW9uIHsKKwkJdW5zaWduZWQgc2hvcnQJZF9yZWNsZW47CS8qIEFsd2F5cyB6ZXJvLiAqLworCQl1bnNpZ25lZCBjaGFyICAgZF90eXBlOwkJLyogUmVpbXBsZW1lbnRhdGlvbiBhZGRzIHRoaXMgKi8KKwl9OworCXVuc2lnbmVkIHNob3J0CWRfbmFtbGVuOwkJLyogTGVuZ3RoIG9mIG5hbWUgaW4gZF9uYW1lLiAqLworCWNoYXIJCWRfbmFtZVtGSUxFTkFNRV9NQVhdOwkvKiBGaWxlIG5hbWUuICovCit9OworI2RlZmluZSBkaXJlbnQgbWluZ3dfZGlyZW50CisjZGVmaW5lIHJlYWRkaXIoeCkgbWluZ3dfcmVhZGRpcih4KQorc3RydWN0IGRpcmVudCAqbWluZ3dfcmVhZGRpcihESVIgKmRpcik7CisjZW5kaWYgLy8gIU5PX01JTkdXX1JFUExBQ0VfUkVBRERJUgpkaWZmIC0tZ2l0IGEvY29tcGF0L21rc3RlbXBzLmMgYi9jb21wYXQvbWtzdGVtcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDE3OWM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21rc3RlbXBzLmMKQEAgLTAsMCArMSw3MCBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCisvKiBBZGFwdGVkIGZyb20gbGliaWJlcnR5J3MgbWtzdGVtcC5jLiAqLworCisjdW5kZWYgVE1QX01BWAorI2RlZmluZSBUTVBfTUFYIDE2Mzg0CisKK2ludCBnaXRta3N0ZW1wcyhjaGFyICpwYXR0ZXJuLCBpbnQgc3VmZml4X2xlbikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBsZXR0ZXJzW10gPQorCQkiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCisJCSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKwkJIjAxMjM0NTY3ODkiOworCXN0YXRpYyBjb25zdCBpbnQgbnVtX2xldHRlcnMgPSA2MjsKKwl1aW50NjRfdCB2YWx1ZTsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwljaGFyICp0ZW1wbGF0ZTsKKwlzaXplX3QgbGVuOworCWludCBmZCwgY291bnQ7CisKKwlsZW4gPSBzdHJsZW4ocGF0dGVybik7CisKKwlpZiAobGVuIDwgNiArIHN1ZmZpeF9sZW4pIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc3RybmNtcCgmcGF0dGVybltsZW4gLSA2IC0gc3VmZml4X2xlbl0sICJYWFhYWFgiLCA2KSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogUmVwbGFjZSBwYXR0ZXJuJ3MgWFhYWFhYIGNoYXJhY3RlcnMgd2l0aCByYW5kb21uZXNzLgorCSAqIFRyeSBUTVBfTUFYIGRpZmZlcmVudCBmaWxlbmFtZXMuCisJICovCisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisJdmFsdWUgPSAoKHNpemVfdCkodHYudHZfdXNlYyA8PCAxNikpIF4gdHYudHZfc2VjIF4gZ2V0cGlkKCk7CisJdGVtcGxhdGUgPSAmcGF0dGVybltsZW4gLSA2IC0gc3VmZml4X2xlbl07CisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgVE1QX01BWDsgKytjb3VudCkgeworCQl1aW50NjRfdCB2ID0gdmFsdWU7CisJCS8qIEZpbGwgaW4gdGhlIHJhbmRvbSBiaXRzLiAqLworCQl0ZW1wbGF0ZVswXSA9IGxldHRlcnNbdiAlIG51bV9sZXR0ZXJzXTsgdiAvPSBudW1fbGV0dGVyczsKKwkJdGVtcGxhdGVbMV0gPSBsZXR0ZXJzW3YgJSBudW1fbGV0dGVyc107IHYgLz0gbnVtX2xldHRlcnM7CisJCXRlbXBsYXRlWzJdID0gbGV0dGVyc1t2ICUgbnVtX2xldHRlcnNdOyB2IC89IG51bV9sZXR0ZXJzOworCQl0ZW1wbGF0ZVszXSA9IGxldHRlcnNbdiAlIG51bV9sZXR0ZXJzXTsgdiAvPSBudW1fbGV0dGVyczsKKwkJdGVtcGxhdGVbNF0gPSBsZXR0ZXJzW3YgJSBudW1fbGV0dGVyc107IHYgLz0gbnVtX2xldHRlcnM7CisJCXRlbXBsYXRlWzVdID0gbGV0dGVyc1t2ICUgbnVtX2xldHRlcnNdOyB2IC89IG51bV9sZXR0ZXJzOworCisJCWZkID0gb3BlbihwYXR0ZXJuLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSLCAwNjAwKTsKKwkJaWYgKGZkID4gMCkKKwkJCXJldHVybiBmZDsKKwkJLyoKKwkJICogRmF0YWwgZXJyb3IgKEVQRVJNLCBFTk9TUEMgZXRjKS4KKwkJICogSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGxvb3AuCisJCSAqLworCQlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJYnJlYWs7CisJCS8qCisJCSAqIFRoaXMgaXMgYSByYW5kb20gdmFsdWUuICBJdCBpcyBvbmx5IG5lY2Vzc2FyeSB0aGF0CisJCSAqIHRoZSBuZXh0IFRNUF9NQVggdmFsdWVzIGdlbmVyYXRlZCBieSBhZGRpbmcgNzc3NyB0bworCQkgKiBWQUxVRSBhcmUgZGlmZmVyZW50IHdpdGggKG1vZHVsZSAyXjMyKS4KKwkJICovCisJCXZhbHVlICs9IDc3Nzc7CisJfQorCS8qIFdlIHJldHVybiB0aGUgbnVsbCBzdHJpbmcgaWYgd2UgY2FuJ3QgZmluZCBhIHVuaXF1ZSBmaWxlIG5hbWUuICAqLworCXBhdHRlcm5bMF0gPSAnXDAnOworCWVycm5vID0gRUlOVkFMOworCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvTGljZW5zZS50eHQgYi9jb21wYXQvbmVkbWFsbG9jL0xpY2Vuc2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YjdjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbmVkbWFsbG9jL0xpY2Vuc2UudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0Jvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKK3RoaXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKK1NvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCitkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKKworVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcKK3RoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCittdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKK2FsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUKK3dvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQorYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUgQkUgTElBQkxFCitGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKK0FSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvY29tcGF0L25lZG1hbGxvYy9SZWFkbWUudHh0IGIvY29tcGF0L25lZG1hbGxvYy9SZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NjM2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbmVkbWFsbG9jL1JlYWRtZS50eHQKQEAgLTAsMCArMSwxMzYgQEAKK25lZGFsbG9jIHYxLjA1IDE1dGggSnVuZSAyMDA4OgorLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09CisKK2J5IE5pYWxsIERvdWdsYXMgKGh0dHA6Ly93d3cubmVkcHJvZC5jb20vcHJvZ3JhbXMvcG9ydGFibGUvbmVkbWFsbG9jLykKKworRW5jbG9zZWQgaXMgbmVkYWxsb2MsIGFuIGFsdGVybmF0aXZlIG1hbGxvYyBpbXBsZW1lbnRhdGlvbiBmb3IgbXVsdGlwbGUKK3RocmVhZHMgd2l0aG91dCBsb2NrIGNvbnRlbnRpb24gYmFzZWQgb24gZGxtYWxsb2MgdjIuOC40LiBJdCBpcyBtb3JlCitvciBsZXNzIGEgbmV3ZXIgaW1wbGVtZW50YXRpb24gb2YgcHRtYWxsb2MyLCB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGluCitMaW51eCAod2hpY2ggaXMgYmFzZWQgb24gZGxtYWxsb2MgdjIuNy4wKSBidXQgYWxzbyBjb250YWlucyBhIHBlci10aHJlYWQKK2NhY2hlIGZvciBtYXhpbXVtIENQVSBzY2FsYWJpbGl0eS4KKworSXQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Ugd2hpY2ggYmFzaWNhbGx5IG1lYW5zCit5b3UgY2FuIGRvIGFueXRoaW5nIHlvdSBsaWtlIHdpdGggaXQuIFRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIG1hbGxvYy5jLmgKK2ZpbGUgd2hpY2ggcmVtYWlucyBjb3B5cmlnaHQgdG8gb3RoZXJzLgorCitJdCBoYXMgYmVlbiB0ZXN0ZWQgb24gd2luMzIgKHg4NiksIHdpbjY0ICh4NjQpLCBMaW51eCAoeDY0KSwgRnJlZUJTRCAoeDY0KQorYW5kIEFwcGxlIE1hY09TIFggKHg4NikuIEl0IHdvcmtzIHZlcnkgd2VsbCBvbiBhbGwgb2YgdGhlc2UgYW5kIGlzIHZlcnkKK3NpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4gdGhlIHN5c3RlbSBhbGxvY2F0b3Igb24gYWxsIG9mIHRoZXNlIHBsYXRmb3Jtcy4KKworQnkgbGl0ZXJhbGx5IGRyb3BwaW5nIGluIHRoaXMgYWxsb2NhdG9yIGFzIGEgcmVwbGFjZW1lbnQgZm9yIHlvdXIgc3lzdGVtCithbGxvY2F0b3IsIHlvdSBjYW4gc2VlIHJlYWwgd29ybGQgaW1wcm92ZW1lbnRzIG9mIHVwIHRvIHRocmVlIHRpbWVzIGluIG5vcm1hbAorY29kZSEKKworVG8gdXNlOgorLT0tPS09LQorRHJvcCBpbiBuZWRtYWxsb2MuaCwgbmVkbWFsbG9jLmMgYW5kIG1hbGxvYy5jLmggaW50byB5b3VyIHByb2plY3QuCitDb25maWd1cmUgdXNpbmcgdGhlIGluc3RydWN0aW9ucyBpbiBuZWRtYWxsb2MuaC4gUnVuIGFuZCBlbmpveS4KKworVG8gdGVzdCwgY29tcGlsZSB0ZXN0LmMuIEl0IHdpbGwgcnVuIGEgY29tcGFyaXNvbiBiZXR3ZWVuIHlvdXIgc3lzdGVtCithbGxvY2F0b3IgYW5kIG5lZGFsbG9jIGFuZCB0ZWxsIHlvdSBob3cgbXVjaCBmYXN0ZXIgbmVkYWxsb2MgaXMuIEl0IGFsc28KK3NlcnZlcyBhcyBhbiBleGFtcGxlIG9mIHVzYWdlLgorCitOb3RlczoKKy09LT0tPQorSWYgeW91IHdhbnQgdGhlIHZlcnkgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBhbGxvY2F0b3IsIGdldCBpdCBmcm9tIHRoZQorVG5GT1ggU1ZOIHJlcG9zaXRvcnkgYXQgc3ZuOi8vc3ZuLmJlcmxpb3MuZGUvdmlld2N2cy90bmZveC90cnVuay9zcmMvbmVkbWFsbG9jCisKK0JlY2F1c2Ugb2YgaG93IG5lZGFsbG9jIGFsbG9jYXRlcyBhbiBtc3BhY2UgcGVyIHRocmVhZCwgaXQgY2FuIGNhdXNlCitzZXZlcmUgYmxvYXRpbmcgb2YgbWVtb3J5IHVzYWdlIHVuZGVyIGNlcnRhaW4gYWxsb2NhdGlvbiBwYXR0ZXJucy4KK1lvdSBjYW4gc3Vic3RhbnRpYWxseSByZWR1Y2UgdGhpcyB3YXN0YWdlIGJ5IHNldHRpbmcgTUFYVEhSRUFEU0lOUE9PTAorb3IgdGhlIHRocmVhZHMgcGFyYW1ldGVyIHRvIG5lZGNyZWF0ZXBvb2woKSB0byBhIGZyYWN0aW9uIG9mIHRoZSBudW1iZXIgb2YKK3RocmVhZHMgd2hpY2ggd291bGQgbm9ybWFsbHkgYmUgaW4gYSBwb29sIGF0IG9uY2UuIFRoaXMgd2lsbCByZWR1Y2UKK2Jsb2F0aW5nIGF0IHRoZSBjb3N0IG9mIGFuIGluY3JlYXNlIGluIGxvY2sgY29udGVudGlvbi4gSWYgYWxsb2NhdGVkIHNpemUKK2lzIGxlc3MgdGhhbiBUSFJFQURDQUNIRU1BWCwgbG9ja2luZyBpcyBhdm9pZGVkIDkwLTk5JSBvZiB0aGUgdGltZSBhbmQKK2lmIG1vc3Qgb2YgeW91ciBhbGxvY2F0aW9ucyBhcmUgYmVsb3cgdGhpcyB2YWx1ZSwgeW91IGNhbiBzYWZlbHkgc2V0CitNQVhUSFJFQURTSU5QT09MIHRvIG9uZS4KKworWW91IHdpbGwgc3VmZmVyIG1lbW9yeSBsZWFrYWdlIHVubGVzcyB5b3UgY2FsbCBuZWRkaXNhYmxldGhyZWFkY2FjaGUoKQorcGVyIHBvb2wgZm9yIGV2ZXJ5IHRocmVhZCB3aGljaCBleGl0cy4gVGhpcyBpcyBiZWNhdXNlIG5lZGFsbG9jIGNhbm5vdAorcG9ydGFibHkga25vdyB3aGVuIGEgdGhyZWFkIGV4aXRzIGFuZCB0aHVzIHdoZW4gaXRzIHRocmVhZCBjYWNoZSBjYW4KK2JlIHJldHVybmVkIGZvciB1c2UgYnkgb3RoZXIgY29kZS4gRG9uJ3QgZm9yZ2V0IHBvb2wgemVybywgdGhlIHN5c3RlbSBwb29sLgorCitGb3IgQysrIHR5cGUgYWxsb2NhdGlvbiBwYXR0ZXJucyAod2hlcmUgdGhlIHNhbWUgc2l6ZXMgb2YgbWVtb3J5IGFyZQorcmVndWxhcmx5IGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQgYXMgb2JqZWN0cyBhcmUgY3JlYXRlZCBhbmQgZGVzdHJveWVkKSwKK3RoZSB0aHJlYWRjYWNoZSBhbHdheXMgYmVuZWZpdHMgcGVyZm9ybWFuY2UuIElmIGhvd2V2ZXIgeW91ciBhbGxvY2F0aW9uCitwYXR0ZXJucyBhcmUgZGlmZmVyZW50LCBzZWFyY2hpbmcgdGhlIHRocmVhZGNhY2hlIG1heSBzaWduaWZpY2FudGx5IHNsb3cKK2Rvd24geW91ciBjb2RlIC0gYXMgYSBydWxlIG9mIHRodW1iLCBpZiBjYWNoZSB1dGlsaXNhdGlvbiBpcyBiZWxvdyA4MCUKKyhzZWUgdGhlIHNvdXJjZSBmb3IgbmVkZGlzYWJsZXRocmVhZGNhY2hlKCkgZm9yIGhvdyB0byBlbmFibGUgZGVidWcKK3ByaW50aW5nIGluIHJlbGVhc2UgbW9kZSkgdGhlbiB5b3Ugc2hvdWxkIGRpc2FibGUgdGhlIHRocmVhZCBjYWNoZSBmb3IKK3RoYXQgdGhyZWFkLiBZb3UgY2FuIGNvbXBpbGUgb3V0IHRoZSB0aHJlYWRjYWNoZSBjb2RlIGJ5IHNldHRpbmcKK1RIUkVBRENBQ0hFTUFYIHRvIHplcm8uCisKK1NwZWVkIGNvbXBhcmlzb25zOgorLT0tPS09LT0tPS09LT0tPS09CitTZWUgQmVuY2htYXJrcy54bHMgZm9yIGRldGFpbHMuCisKK1RoZSBlbmNsb3NlZCB0ZXN0LmMgY2FuIGRvIHR3byB0aGluZ3M6IGl0IGNhbiBiZSBhIHRvcnR1cmUgdGVzdCBvciBhIHNwZWVkCit0ZXN0LiBUaGUgc3BlZWQgdGVzdCBpcyBkZXNpZ25lZCB0byBiZSBhIHJlcHJlc2VudGF0aXZlIHN5bnRoZXRpYworbWVtb3J5IGFsbG9jYXRvciB0ZXN0LiBJdCB3b3JrcyBieSByYW5kb21seSBtaXhpbmcgYWxsb2NhdGlvbnMgd2l0aCBmcmVlcword2l0aCBoYWxmIG9mIHRoZSBhbGxvY2F0aW9uIHNpemVzIGJlaW5nIGEgdHdvIHBvd2VyIG11bHRpcGxlIGxlc3MgdGhhbgorNTEyIGJ5dGVzICh0byBtaW1pYyBDKysgc3RhY2sgaW5zdGFudGlhdGVkIG9iamVjdHMpIGFuZCB0aGUgb3RoZXIgaGFsZgorYmVpbmcgYSBzaW1wbGUgcmFuZG9tIHZhbHVlIGxlc3MgdGhhbiAxNktiLgorCitUaGUgcmVhbCB3b3JsZCBjb2RlIHJlc3VsdHMgYXJlIGZyb20gVG4ncyBUZXN0SU8gYmVuY2htYXJrLiBUaGlzIGlzIGEKK2hlYXZpbHkgbXVsdGl0aHJlYWRlZCBhbmQgbWVtb3J5IGludGVuc2l2ZSBiZW5jaG1hcmsgd2l0aCBhIGxvdCBvZiBicmFuY2hpbmcKK2FuZCBvdGhlciBzdHVmZiBtb2Rlcm4gcHJvY2Vzc29ycyBkb24ndCBsaWtlIHNvIG11Y2guIEFzIHlvdSdsbCBub3RlLCB0aGUKK3Rlc3QgZG9lc24ndCBzaG93IHRoZSBiZW5lZml0cyBvZiB0aGUgdGhyZWFkY2FjaGUgbW9zdGx5IGR1ZSB0byB0aGUgc2F0dXJhdGlvbgorb2YgdGhlIG1lbW9yeSBidXMgYmVpbmcgdGhlIGxpbWl0aW5nIGZhY3Rvci4KKworQ2hhbmdlTG9nOgorLT0tPS09LT0tPQordjEuMDUgMTV0aCBKdW5lIDIwMDg6CisgKiB7IDEwNDIgfSBBZGRlZCBlcnJvciBjaGVjayBmb3IgVExTU0VUKCkgYW5kIFRMU0ZSRUUoKSBtYWNyb3MuIFRoYW5rcyB0bworTWFya3VzIEVsZnJpbmcgZm9yIHJlcG9ydGluZyB0aGlzLgorICogeyAxMDQzIH0gRml4ZWQgYSBzZWdmYXVsdCB3aGVuIGZyZWVpbmcgbWVtb3J5IGFsbG9jYXRlZCB1c2luZworbmVkaW5kZXBlbmRlbnRfY29tYWxsb2MoKS4gVGhhbmtzIHRvIFBhdmVsIFZvemVuaWxlayBmb3IgcmVwb3J0aW5nIHRoaXMuCisKK3YxLjA0IDE0dGggSnVseSAyMDA3OgorICogRml4ZWQgYSBidWcgd2l0aCB0aGUgbmV3IG9wdGltaXNlZCBpbXBsZW1lbnRhdGlvbiB0aGF0IGZhaWxlZCB0byBsb2NrCitvbiBhIHJlYWxsb2MgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgorICogRml4ZWQgbGFjayBvZiB0aHJlYWQgc3luY2hyb25pc2F0aW9uIGluIEluaXRQb29sKCkgY2F1c2luZyBwb29sIGNvcnJ1cHRpb24KKyAqIEZpeGVkIGEgbWVtb3J5IGxlYWsgb2YgdGhyZWFkIGNhY2hlIGNvbnRlbnRzIG9uIGRpc2FibGluZy4gVGhhbmtzIHRvIEVhcmwKK0NoZXcgZm9yIHJlcG9ydGluZyB0aGlzLgorICogQWRkZWQgYSBzYW5pdHkgY2hlY2sgZm9yIGZyZWVkIGJsb2NrcyBiZWluZyB2YWxpZC4KKyAqIFJld29ya2VkIHRlc3QuYyBpbnRvIGJlaW5nIGEgdG9ydHVyZSB0ZXN0LgorICogRml4ZWQgR0NDIGFzc2VtYmxlciBvcHRpbWlzYXRpb24gbWlzc3BlY2lmaWNhdGlvbgorCit2MS4wNGFscGhhX3N2bjkxNSA3dGggT2N0b2JlciAyMDA2OgorICogRml4ZWQgZmFpbHVyZSB0byB1bmxvY2sgdGhyZWFkIGNhY2hlIGxpc3QgaWYgYWxsb2NhdGluZyBhIG5ldyBsaXN0IGZhaWxlZC4KK1RoYW5rcyB0byBEbWl0cnkgQ2hpY2hrb3YgZm9yIHJlcG9ydGluZyB0aGlzLiBGdXRoZXIgdGhhbmtzIHRvIEFsZWtzZXkgU2FuaW4uCisgKiBGaXhlZCByZWFsbG9jKDAsIDxzaXplPikgc2VnZmF1bHRpbmcuIFRoYW5rcyB0byBEbWl0cnkgQ2hpY2hrb3YgZm9yCityZXBvcnRpbmcgdGhpcy4KKyAqIE1hZGUgY29uZmlnIGRlZmluZXMgI2lmbmRlZiBzbyB0aGV5IGNhbiBiZSBvdmVycmlkZW4gYnkgdGhlIGJ1aWxkIHN5c3RlbS4KK1RoYW5rcyB0byBBbGVrc2V5IFNhbmluIGZvciBzdWdnZXN0aW5nIHRoaXMuCisgKiBGaXhlZCBkZWFkbG9jayBpbiBuZWRwcmVhbGxvYygpIGR1ZSB0byB1bm5lY2Vzc2FyeSBsb2NraW5nIG9mIHByZWZlcnJlZAordGhyZWFkIG1zcGFjZSB3aGVuIG1zcGFjZV9yZWFsbG9jKCkgYWx3YXlzIHVzZXMgdGhlIG9yaWdpbmFsIGJsb2NrJ3MgbXNwYWNlCithbnl3YXkuIFRoYW5rcyB0byBBbGVrc2V5IFNhbmluIGZvciByZXBvcnRpbmcgdGhpcy4KKyAqIE1hZGUgc29tZSBzcGVlZCBpbXByb3ZlbWVudHMgYnkgaGFja2luZyBtc3BhY2VfbWFsbG9jKCkgdG8gbm8gbG9uZ2VyIGxvY2sKK2l0cyBtc3BhY2UsIHRodXMgYWxsb3dpbmcgdGhlIHJlY3Vyc2l2ZSBtdXRleCBpbXBsZW1lbnRhdGlvbiB0byBiZSByZW1vdmVkCit3aXRoIGFuIGFzc29jaWF0ZWQgc3BlZWQgaW5jcmVhc2UuIFRoYW5rcyB0byBBbGVrc2V5IFNhbmluIGZvciBzdWdnZXN0aW5nIHRoaXMuCisgKiBGaXhlZCBhIGJ1ZyB3aGVyZSBhbGxvY2F0aW5nIG1zcGFjZXMgb3ZlcnJhbiBpdHMgbWF4IGxpbWl0LiBUaGFua3MgdG8KK0FsZWtzZXkgU2FuaW4gZm9yIHJlcG9ydGluZyB0aGlzLgorCit2MS4wMyAxMHRoIEp1bHkgMjAwNjoKKyAqIEZpeGVkIG1lbW9yeSBjb3JydXB0aW9uIGJ1ZyBpbiB0aHJlYWRjYWNoZSBjb2RlIHdoaWNoIG9ubHkgYXBwZWFyZWQgd2l0aCA+NAordGhyZWFkcyBhbmQgaW4gaGVhdnkgdXNlIG9mIHRoZSB0aHJlYWRjYWNoZS4KKwordjEuMDIgMTV0aCBNYXkgMjAwNjoKKyAqIEludGVncmF0ZWQgZGxtYWxsb2MgdjIuOC40LCBmaXhpbmcgdGhlIHdpbjMyIG1lbW9yeSByZWxlYXNlIHByb2JsZW0gYW5kCitpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugc3RpbGwgZnVydGhlci4gU3BlZWQgaXMgbm93IHVwIHRvIHR3aWNlIHRoZSBzcGVlZCBvZiB2MS4wMQorKGF2ZXJhZ2UgaXMgNjclIGZhc3RlcikuCisgKiBGaXhlZCB3aW4zMiBjcml0aWNhbCBzZWN0aW9uIGltcGxlbWVudGF0aW9uLiBUaGFua3MgdG8gUGF2ZWwgS3V6bmV0c292Citmb3IgcmVwb3J0aW5nIHRoaXMuCisgKiBXYXNuJ3QgbG9ja2luZyBtc3BhY2UgaWYgYWxsIG1zcGFjZXMgd2VyZSBsb2NrZWQuIFRoYW5rcyB0byBQYXZlbCBLdXpuZXRzb3YKK2ZvciByZXBvcnRpbmcgdGhpcy4KKyAqIEFkZGVkIEFwcGxlIE1hYyBPUyBYIHN1cHBvcnQuCisKK3YxLjAxIDI0dGggRmVicnVhcnkgMjAwNjoKKyAqIEZpeGVkIG11bHRpcHJvY2Vzc29yIHNjYWxpbmcgcHJvYmxlbXMgYnkgcmVtb3Zpbmcgc291cmNlcyBvZiBjYWNoZSBzbG9zaGluZworICogRWFybCBDaGV3IDxlYXJsX2NoZXcgPGF0PiBhZ2lsZW50IDxkb3Q+IGNvbT4gc2VudCBwYXRjaGVzIGZvciB0aGUgZm9sbG93aW5nOgorICAgMS4gc2l6ZTJiaW5pZHgoKSB3YXNuJ3Qgd29ya2luZyBmb3IgZGVmYXVsdCBjb2RlIHBhdGggKG5vbiB4ODYpCisgICAyLiBGaXhlZCBmYWlsdXJlIHRvIHJlbGVhc2UgbXNwYWNlIGxvY2sgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzIHdoaWNoCisgICAgICBjYXVzZWQgYSBkZWFkbG9jaworCit2MS4wMCAxc3QgSmFudWFyeSAyMDA2OgorICogRmlyc3QgcmVsZWFzZQpkaWZmIC0tZ2l0IGEvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oIGIvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YzQyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbmVkbWFsbG9jL21hbGxvYy5jLmgKQEAgLTAsMCArMSw1NzUyIEBACisvKgorICBUaGlzIGlzIGEgdmVyc2lvbiAoYWthIGRsbWFsbG9jKSBvZiBtYWxsb2MvZnJlZS9yZWFsbG9jIHdyaXR0ZW4gYnkKKyAgRG91ZyBMZWEgYW5kIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluLCBhcyBleHBsYWluZWQgYXQKKyAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvcHVibGljZG9tYWluLiAgU2VuZCBxdWVzdGlvbnMsCisgIGNvbW1lbnRzLCBjb21wbGFpbnRzLCBwZXJmb3JtYW5jZSBkYXRhLCBldGMgdG8gZGxAY3Mub3N3ZWdvLmVkdQorCisqIFZlcnNpb24gcHJlLTIuOC40IE1vbiBOb3YgMjcgMTE6MjI6MzcgMjAwNiAgICAoZGwgYXQgZ2VlKQorCisgICBOb3RlOiBUaGVyZSBtYXkgYmUgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoaXMgbWFsbG9jIG9idGFpbmFibGUgYXQKKwkgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MuYworCSBDaGVjayBiZWZvcmUgaW5zdGFsbGluZyEKKworKiBRdWlja3N0YXJ0CisKKyAgVGhpcyBsaWJyYXJ5IGlzIGFsbCBpbiBvbmUgZmlsZSB0byBzaW1wbGlmeSB0aGUgbW9zdCBjb21tb24gdXNhZ2U6CisgIGZ0cCBpdCwgY29tcGlsZSBpdCAoLU8zKSwgYW5kIGxpbmsgaXQgaW50byBhbm90aGVyIHByb2dyYW0uIEFsbCBvZgorICB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMgZGVmYXVsdCB0byByZWFzb25hYmxlIHZhbHVlcyBmb3IgdXNlIG9uCisgIG1vc3QgcGxhdGZvcm1zLiAgWW91IG1pZ2h0IGxhdGVyIHdhbnQgdG8gc3RlcCB0aHJvdWdoIHZhcmlvdXMKKyAgY29tcGlsZS10aW1lIGFuZCBkeW5hbWljIHR1bmluZyBvcHRpb25zLgorCisgIEZvciBjb252ZW5pZW5jZSwgYW4gaW5jbHVkZSBmaWxlIGZvciBjb2RlIHVzaW5nIHRoaXMgbWFsbG9jIGlzIGF0OgorICAgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MtMi44LjQuaAorICBZb3UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyAuaCBmaWxlIHVubGVzcyB5b3UgY2FsbCBmdW5jdGlvbnMgbm90CisgIGRlZmluZWQgaW4geW91ciBzeXN0ZW0gaW5jbHVkZSBmaWxlcy4gIFRoZSAuaCBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlCisgIGV4Y2VycHRzIGZyb20gdGhpcyBmaWxlIG5lZWRlZCBmb3IgdXNpbmcgdGhpcyBtYWxsb2Mgb24gQU5TSSBDL0MrKworICBzeXN0ZW1zLCBzbyBsb25nIGFzIHlvdSBoYXZlbid0IGNoYW5nZWQgY29tcGlsZS10aW1lIG9wdGlvbnMgYWJvdXQKKyAgbmFtaW5nIGFuZCB0dW5pbmcgcGFyYW1ldGVycy4gIElmIHlvdSBkbywgdGhlbiB5b3UgY2FuIGNyZWF0ZSB5b3VyCisgIG93biBtYWxsb2MuaCB0aGF0IGRvZXMgaW5jbHVkZSBhbGwgc2V0dGluZ3MgYnkgY3V0dGluZyBhdCB0aGUgcG9pbnQKKyAgaW5kaWNhdGVkIGJlbG93LiBOb3RlIHRoYXQgeW91IG1heSBhbHJlYWR5IGJ5IGRlZmF1bHQgYmUgdXNpbmcgYSBDCisgIGxpYnJhcnkgY29udGFpbmluZyBhIG1hbGxvYyB0aGF0IGlzIGJhc2VkIG9uIHNvbWUgdmVyc2lvbiBvZiB0aGlzCisgIG1hbGxvYyAoZm9yIGV4YW1wbGUgaW4gbGludXgpLiBZb3UgbWlnaHQgc3RpbGwgd2FudCB0byB1c2UgdGhlIG9uZQorICBpbiB0aGlzIGZpbGUgdG8gY3VzdG9taXplIHNldHRpbmdzIG9yIHRvIGF2b2lkIG92ZXJoZWFkcyBhc3NvY2lhdGVkCisgIHdpdGggbGlicmFyeSB2ZXJzaW9ucy4KKworKiBWaXRhbCBzdGF0aXN0aWNzOgorCisgIFN1cHBvcnRlZCBwb2ludGVyL3NpemVfdCByZXByZXNlbnRhdGlvbjogICAgICAgNCBvciA4IGJ5dGVzCisgICAgICAgc2l6ZV90IE1VU1QgYmUgYW4gdW5zaWduZWQgdHlwZSBvZiB0aGUgc2FtZSB3aWR0aCBhcworICAgICAgIHBvaW50ZXJzLiAoSWYgeW91IGFyZSB1c2luZyBhbiBhbmNpZW50IHN5c3RlbSB0aGF0IGRlY2xhcmVzCisgICAgICAgc2l6ZV90IGFzIGEgc2lnbmVkIHR5cGUsIG9yIG5lZWQgaXQgdG8gYmUgYSBkaWZmZXJlbnQgd2lkdGgKKyAgICAgICB0aGFuIHBvaW50ZXJzLCB5b3UgY2FuIHVzZSBhIHByZXZpb3VzIHJlbGVhc2Ugb2YgdGhpcyBtYWxsb2MKKyAgICAgICAoZS5nLiAyLjcuMikgc3VwcG9ydGluZyB0aGVzZS4pCisKKyAgQWxpZ25tZW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IGJ5dGVzIChkZWZhdWx0KQorICAgICAgIFRoaXMgc3VmZmljZXMgZm9yIG5lYXJseSBhbGwgY3VycmVudCBtYWNoaW5lcyBhbmQgQyBjb21waWxlcnMuCisgICAgICAgSG93ZXZlciwgeW91IGNhbiBkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCB0byBiZSB3aWRlciB0aGFuIHRoaXMKKyAgICAgICBpZiBuZWNlc3NhcnkgKHVwIHRvIDEyOGJ5dGVzKSwgYXQgdGhlIGV4cGVuc2Ugb2YgdXNpbmcgbW9yZSBzcGFjZS4KKworICBNaW5pbXVtIG92ZXJoZWFkIHBlciBhbGxvY2F0ZWQgY2h1bms6ICAgNCBvciAgOCBieXRlcyAoaWYgNGJ5dGUgc2l6ZXMpCisJCQkJCSAgOCBvciAxNiBieXRlcyAoaWYgOGJ5dGUgc2l6ZXMpCisgICAgICAgRWFjaCBtYWxsb2NlZCBjaHVuayBoYXMgYSBoaWRkZW4gd29yZCBvZiBvdmVyaGVhZCBob2xkaW5nIHNpemUKKyAgICAgICBhbmQgc3RhdHVzIGluZm9ybWF0aW9uLCBhbmQgYWRkaXRpb25hbCBjcm9zcy1jaGVjayB3b3JkCisgICAgICAgaWYgRk9PVEVSUyBpcyBkZWZpbmVkLgorCisgIE1pbmltdW0gYWxsb2NhdGVkIHNpemU6IDQtYnl0ZSBwdHJzOiAgMTYgYnl0ZXMgICAgKGluY2x1ZGluZyBvdmVyaGVhZCkKKwkJCSAgOC1ieXRlIHB0cnM6ICAzMiBieXRlcyAgICAoaW5jbHVkaW5nIG92ZXJoZWFkKQorCisgICAgICAgRXZlbiBhIHJlcXVlc3QgZm9yIHplcm8gYnl0ZXMgKGkuZS4sIG1hbGxvYygwKSkgcmV0dXJucyBhCisgICAgICAgcG9pbnRlciB0byBzb21ldGhpbmcgb2YgdGhlIG1pbmltdW0gYWxsb2NhdGFibGUgc2l6ZS4KKyAgICAgICBUaGUgbWF4aW11bSBvdmVyaGVhZCB3YXN0YWdlIChpLmUuLCBudW1iZXIgb2YgZXh0cmEgYnl0ZXMKKyAgICAgICBhbGxvY2F0ZWQgdGhhbiB3ZXJlIHJlcXVlc3RlZCBpbiBtYWxsb2MpIGlzIGxlc3MgdGhhbiBvciBlcXVhbAorICAgICAgIHRvIHRoZSBtaW5pbXVtIHNpemUsIGV4Y2VwdCBmb3IgcmVxdWVzdHMgPj0gbW1hcF90aHJlc2hvbGQgdGhhdAorICAgICAgIGFyZSBzZXJ2aWNlZCB2aWEgbW1hcCgpLCB3aGVyZSB0aGUgd29yc3QgY2FzZSB3YXN0YWdlIGlzIGFib3V0CisgICAgICAgMzIgYnl0ZXMgcGx1cyB0aGUgcmVtYWluZGVyIGZyb20gYSBzeXN0ZW0gcGFnZSAodGhlIG1pbmltYWwKKyAgICAgICBtbWFwIHVuaXQpOyB0eXBpY2FsbHkgNDA5NiBvciA4MTkyIGJ5dGVzLgorCisgIFNlY3VyaXR5OiBzdGF0aWMtc2FmZTsgb3B0aW9uYWxseSBtb3JlIG9yIGxlc3MKKyAgICAgICBUaGUgInNlY3VyaXR5IiBvZiBtYWxsb2MgcmVmZXJzIHRvIHRoZSBhYmlsaXR5IG9mIG1hbGljaW91cworICAgICAgIGNvZGUgdG8gYWNjZW50dWF0ZSB0aGUgZWZmZWN0cyBvZiBlcnJvcnMgKGZvciBleGFtcGxlLCBmcmVlaW5nCisgICAgICAgc3BhY2UgdGhhdCBpcyBub3QgY3VycmVudGx5IG1hbGxvYydlZCBvciBvdmVyd3JpdGluZyBwYXN0IHRoZQorICAgICAgIGVuZHMgb2YgY2h1bmtzKSBpbiBjb2RlIHRoYXQgY2FsbHMgbWFsbG9jLiAgVGhpcyBtYWxsb2MKKyAgICAgICBndWFyYW50ZWVzIG5vdCB0byBtb2RpZnkgYW55IG1lbW9yeSBsb2NhdGlvbnMgYmVsb3cgdGhlIGJhc2Ugb2YKKyAgICAgICBoZWFwLCBpLmUuLCBzdGF0aWMgdmFyaWFibGVzLCBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiB1c2FnZQorICAgICAgIGVycm9ycy4gIFRoZSByb3V0aW5lcyBhZGRpdGlvbmFsbHkgZGV0ZWN0IG1vc3QgaW1wcm9wZXIgZnJlZXMKKyAgICAgICBhbmQgcmVhbGxvY3MuICBBbGwgdGhpcyBob2xkcyBhcyBsb25nIGFzIHRoZSBzdGF0aWMgYm9va2tlZXBpbmcKKyAgICAgICBmb3IgbWFsbG9jIGl0c2VsZiBpcyBub3QgY29ycnVwdGVkIGJ5IHNvbWUgb3RoZXIgbWVhbnMuICBUaGlzCisgICAgICAgaXMgb25seSBvbmUgYXNwZWN0IG9mIHNlY3VyaXR5IC0tIHRoZXNlIGNoZWNrcyBkbyBub3QsIGFuZAorICAgICAgIGNhbm5vdCwgZGV0ZWN0IGFsbCBwb3NzaWJsZSBwcm9ncmFtbWluZyBlcnJvcnMuCisKKyAgICAgICBJZiBGT09URVJTIGlzIGRlZmluZWQgbm9uemVybywgdGhlbiBlYWNoIGFsbG9jYXRlZCBjaHVuaworICAgICAgIGNhcnJpZXMgYW4gYWRkaXRpb25hbCBjaGVjayB3b3JkIHRvIHZlcmlmeSB0aGF0IGl0IHdhcyBtYWxsb2NlZAorICAgICAgIGZyb20gaXRzIHNwYWNlLiAgVGhlc2UgY2hlY2sgd29yZHMgYXJlIHRoZSBzYW1lIHdpdGhpbiBlYWNoCisgICAgICAgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbSB1c2luZyBtYWxsb2MsIGJ1dCBkaWZmZXIgYWNyb3NzCisgICAgICAgZXhlY3V0aW9ucywgc28gZXh0ZXJuYWxseSBjcmFmdGVkIGZha2UgY2h1bmtzIGNhbm5vdCBiZQorICAgICAgIGZyZWVkLiBUaGlzIGltcHJvdmVzIHNlY3VyaXR5IGJ5IHJlamVjdGluZyBmcmVlcy9yZWFsbG9jcyB0aGF0CisgICAgICAgY291bGQgY29ycnVwdCBoZWFwIG1lbW9yeSwgaW4gYWRkaXRpb24gdG8gdGhlIGNoZWNrcyBwcmV2ZW50aW5nCisgICAgICAgd3JpdGVzIHRvIHN0YXRpY3MgdGhhdCBhcmUgYWx3YXlzIG9uLiAgVGhpcyBtYXkgZnVydGhlciBpbXByb3ZlCisgICAgICAgc2VjdXJpdHkgYXQgdGhlIGV4cGVuc2Ugb2YgdGltZSBhbmQgc3BhY2Ugb3ZlcmhlYWQuICAoTm90ZSB0aGF0CisgICAgICAgRk9PVEVSUyBtYXkgYWxzbyBiZSB3b3J0aCB1c2luZyB3aXRoIE1TUEFDRVMuKQorCisgICAgICAgQnkgZGVmYXVsdCBkZXRlY3RlZCBlcnJvcnMgY2F1c2UgdGhlIHByb2dyYW0gdG8gYWJvcnQgKGNhbGxpbmcKKyAgICAgICAiYWJvcnQoKSIpLiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgdG8gaW5zdGVhZCBwcm9jZWVkIHBhc3QKKyAgICAgICBlcnJvcnMgYnkgZGVmaW5pbmcgUFJPQ0VFRF9PTl9FUlJPUi4gIEluIHRoaXMgY2FzZSwgYSBiYWQgZnJlZQorICAgICAgIGhhcyBubyBlZmZlY3QsIGFuZCBhIG1hbGxvYyB0aGF0IGVuY291bnRlcnMgYSBiYWQgYWRkcmVzcworICAgICAgIGNhdXNlZCBieSB1c2VyIG92ZXJ3cml0ZXMgd2lsbCBpZ25vcmUgdGhlIGJhZCBhZGRyZXNzIGJ5CisgICAgICAgZHJvcHBpbmcgcG9pbnRlcnMgYW5kIGluZGljZXMgdG8gYWxsIGtub3duIG1lbW9yeS4gVGhpcyBtYXkKKyAgICAgICBiZSBhcHByb3ByaWF0ZSBmb3IgcHJvZ3JhbXMgdGhhdCBzaG91bGQgY29udGludWUgaWYgYXQgYWxsCisgICAgICAgcG9zc2libGUgaW4gdGhlIGZhY2Ugb2YgcHJvZ3JhbW1pbmcgZXJyb3JzLCBhbHRob3VnaCB0aGV5IG1heQorICAgICAgIHJ1biBvdXQgb2YgbWVtb3J5IGJlY2F1c2UgZHJvcHBlZCBtZW1vcnkgaXMgbmV2ZXIgcmVjbGFpbWVkLgorCisgICAgICAgSWYgeW91IGRvbid0IGxpa2UgZWl0aGVyIG9mIHRoZXNlIG9wdGlvbnMsIHlvdSBjYW4gZGVmaW5lCisgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gYW5kIFVTQUdFX0VSUk9SX0FDVElPTiB0byBkbyBhbnl0aGluZworICAgICAgIGVsc2UuIEFuZCBpZiBpZiB5b3UgYXJlIHN1cmUgdGhhdCB5b3VyIHByb2dyYW0gdXNpbmcgbWFsbG9jIGhhcworICAgICAgIG5vIGVycm9ycyBvciB2dWxuZXJhYmlsaXRpZXMsIHlvdSBjYW4gZGVmaW5lIElOU0VDVVJFIHRvIDEsCisgICAgICAgd2hpY2ggbWlnaHQgKG9yIG1pZ2h0IG5vdCkgcHJvdmlkZSBhIHNtYWxsIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LgorCisgIFRocmVhZC1zYWZldHk6IE5PVCB0aHJlYWQtc2FmZSB1bmxlc3MgVVNFX0xPQ0tTIGRlZmluZWQKKyAgICAgICBXaGVuIFVTRV9MT0NLUyBpcyBkZWZpbmVkLCBlYWNoIHB1YmxpYyBjYWxsIHRvIG1hbGxvYywgZnJlZSwKKyAgICAgICBldGMgaXMgc3Vycm91bmRlZCB3aXRoIGVpdGhlciBhIHB0aHJlYWQgbXV0ZXggb3IgYSB3aW4zMgorICAgICAgIHNwaW5sb2NrIChkZXBlbmRpbmcgb24gV0lOMzIpLiBUaGlzIGlzIG5vdCBlc3BlY2lhbGx5IGZhc3QsIGFuZAorICAgICAgIGNhbiBiZSBhIG1ham9yIGJvdHRsZW5lY2suICBJdCBpcyBkZXNpZ25lZCBvbmx5IHRvIHByb3ZpZGUKKyAgICAgICBtaW5pbWFsIHByb3RlY3Rpb24gaW4gY29uY3VycmVudCBlbnZpcm9ubWVudHMsIGFuZCB0byBwcm92aWRlIGEKKyAgICAgICBiYXNpcyBmb3IgZXh0ZW5zaW9ucy4gIElmIHlvdSBhcmUgdXNpbmcgbWFsbG9jIGluIGEgY29uY3VycmVudAorICAgICAgIHByb2dyYW0sIGNvbnNpZGVyIGluc3RlYWQgdXNpbmcgbmVkbWFsbG9jCisgICAgICAgKGh0dHA6Ly93d3cubmVkcHJvZC5jb20vcHJvZ3JhbXMvcG9ydGFibGUvbmVkbWFsbG9jLykgb3IKKyAgICAgICBwdG1hbGxvYyAoU2VlIGh0dHA6Ly93d3cubWFsbG9jLmRlKSwgd2hpY2ggYXJlIGRlcml2ZWQKKyAgICAgICBmcm9tIHZlcnNpb25zIG9mIHRoaXMgbWFsbG9jLgorCisgIFN5c3RlbSByZXF1aXJlbWVudHM6IEFueSBjb21iaW5hdGlvbiBvZiBNT1JFQ09SRSBhbmQvb3IgTU1BUC9NVU5NQVAKKyAgICAgICBUaGlzIG1hbGxvYyBjYW4gdXNlIHVuaXggc2JyayBvciBhbnkgZW11bGF0aW9uIChpbnZva2VkIHVzaW5nCisgICAgICAgdGhlIENBTExfTU9SRUNPUkUgbWFjcm8pIGFuZC9vciBtbWFwL211bm1hcCBvciBhbnkgZW11bGF0aW9uCisgICAgICAgKGludm9rZWQgdXNpbmcgQ0FMTF9NTUFQL0NBTExfTVVOTUFQKSB0byBnZXQgYW5kIHJlbGVhc2Ugc3lzdGVtCisgICAgICAgbWVtb3J5LiAgT24gbW9zdCB1bml4IHN5c3RlbXMsIGl0IHRlbmRzIHRvIHdvcmsgYmVzdCBpZiBib3RoCisgICAgICAgTU9SRUNPUkUgYW5kIE1NQVAgYXJlIGVuYWJsZWQuICBPbiBXaW4zMiwgaXQgdXNlcyBlbXVsYXRpb25zCisgICAgICAgYmFzZWQgb24gVmlydHVhbEFsbG9jLiBJdCBhbHNvIHVzZXMgY29tbW9uIEMgbGlicmFyeSBmdW5jdGlvbnMKKyAgICAgICBsaWtlIG1lbXNldC4KKworICBDb21wbGlhbmNlOiBJIGJlbGlldmUgaXQgaXMgY29tcGxpYW50IHdpdGggdGhlIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24KKyAgICAgICAoU2VlIGh0dHA6Ly93d3cudW5peC5vcmcpLiBBbHNvIFNWSUQvWFBHLCBBTlNJIEMsIGFuZCBwcm9iYWJseQorICAgICAgIG90aGVycyBhcyB3ZWxsLgorCisqIE92ZXJ2aWV3IG9mIGFsZ29yaXRobXMKKworICBUaGlzIGlzIG5vdCB0aGUgZmFzdGVzdCwgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBtb3N0IHBvcnRhYmxlLCBvcgorICBtb3N0IHR1bmFibGUgbWFsbG9jIGV2ZXIgd3JpdHRlbi4gSG93ZXZlciBpdCBpcyBhbW9uZyB0aGUgZmFzdGVzdAorICB3aGlsZSBhbHNvIGJlaW5nIGFtb25nIHRoZSBtb3N0IHNwYWNlLWNvbnNlcnZpbmcsIHBvcnRhYmxlIGFuZAorICB0dW5hYmxlLiAgQ29uc2lzdGVudCBiYWxhbmNlIGFjcm9zcyB0aGVzZSBmYWN0b3JzIHJlc3VsdHMgaW4gYSBnb29kCisgIGdlbmVyYWwtcHVycG9zZSBhbGxvY2F0b3IgZm9yIG1hbGxvYy1pbnRlbnNpdmUgcHJvZ3JhbXMuCisKKyAgSW4gbW9zdCB3YXlzLCB0aGlzIG1hbGxvYyBpcyBhIGJlc3QtZml0IGFsbG9jYXRvci4gR2VuZXJhbGx5LCBpdAorICBjaG9vc2VzIHRoZSBiZXN0LWZpdHRpbmcgZXhpc3RpbmcgY2h1bmsgZm9yIGEgcmVxdWVzdCwgd2l0aCB0aWVzCisgIGJyb2tlbiBpbiBhcHByb3hpbWF0ZWx5IGxlYXN0LXJlY2VudGx5LXVzZWQgb3JkZXIuIChUaGlzIHN0cmF0ZWd5CisgIG5vcm1hbGx5IG1haW50YWlucyBsb3cgZnJhZ21lbnRhdGlvbi4pIEhvd2V2ZXIsIGZvciByZXF1ZXN0cyBsZXNzCisgIHRoYW4gMjU2Ynl0ZXMsIGl0IGRldmlhdGVzIGZyb20gYmVzdC1maXQgd2hlbiB0aGVyZSBpcyBub3QgYW4KKyAgZXhhY3RseSBmaXR0aW5nIGF2YWlsYWJsZSBjaHVuayBieSBwcmVmZXJyaW5nIHRvIHVzZSBzcGFjZSBhZGphY2VudAorICB0byB0aGF0IHVzZWQgZm9yIHRoZSBwcmV2aW91cyBzbWFsbCByZXF1ZXN0LCBhcyB3ZWxsIGFzIGJ5IGJyZWFraW5nCisgIHRpZXMgaW4gYXBwcm94aW1hdGVseSBtb3N0LXJlY2VudGx5LXVzZWQgb3JkZXIuIChUaGVzZSBlbmhhbmNlCisgIGxvY2FsaXR5IG9mIHNlcmllcyBvZiBzbWFsbCBhbGxvY2F0aW9ucy4pICBBbmQgZm9yIHZlcnkgbGFyZ2UgcmVxdWVzdHMKKyAgKD49IDI1NktiIGJ5IGRlZmF1bHQpLCBpdCByZWxpZXMgb24gc3lzdGVtIG1lbW9yeSBtYXBwaW5nCisgIGZhY2lsaXRpZXMsIGlmIHN1cHBvcnRlZC4gIChUaGlzIGhlbHBzIGF2b2lkIGNhcnJ5aW5nIGFyb3VuZCBhbmQKKyAgcG9zc2libHkgZnJhZ21lbnRpbmcgbWVtb3J5IHVzZWQgb25seSBmb3IgbGFyZ2UgY2h1bmtzLikKKworICBBbGwgb3BlcmF0aW9ucyAoZXhjZXB0IG1hbGxvY19zdGF0cyBhbmQgbWFsbGluZm8pIGhhdmUgZXhlY3V0aW9uCisgIHRpbWVzIHRoYXQgYXJlIGJvdW5kZWQgYnkgYSBjb25zdGFudCBmYWN0b3Igb2YgdGhlIG51bWJlciBvZiBiaXRzIGluCisgIGEgc2l6ZV90LCBub3QgY291bnRpbmcgYW55IGNsZWFyaW5nIGluIGNhbGxvYyBvciBjb3B5aW5nIGluIHJlYWxsb2MsCisgIG9yIGFjdGlvbnMgc3Vycm91bmRpbmcgTU9SRUNPUkUgYW5kIE1NQVAgdGhhdCBoYXZlIHRpbWVzCisgIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIG5vbi1jb250aWd1b3VzIHJlZ2lvbnMgcmV0dXJuZWQgYnkKKyAgc3lzdGVtIGFsbG9jYXRpb24gcm91dGluZXMsIHdoaWNoIGlzIG9mdGVuIGp1c3QgMS4gSW4gcmVhbC10aW1lCisgIGFwcGxpY2F0aW9ucywgeW91IGNhbiBvcHRpb25hbGx5IHN1cHByZXNzIHNlZ21lbnQgdHJhdmVyc2FscyB1c2luZworICBOT19TRUdNRU5UX1RSQVZFUlNBTCwgd2hpY2ggYXNzdXJlcyBib3VuZGVkIGV4ZWN1dGlvbiBldmVuIHdoZW4KKyAgc3lzdGVtIGFsbG9jYXRvcnMgcmV0dXJuIG5vbi1jb250aWd1b3VzIHNwYWNlcywgYXQgdGhlIHR5cGljYWwKKyAgZXhwZW5zZSBvZiBjYXJyeWluZyBhcm91bmQgbW9yZSBtZW1vcnkgYW5kIGluY3JlYXNlZCBmcmFnbWVudGF0aW9uLgorCisgIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdmVyeSBtb2R1bGFyIGFuZCBzZXJpb3VzbHkgb3ZlcnVzZXMKKyAgbWFjcm9zLiBQZXJoYXBzIHNvbWVkYXkgYWxsIEMgY29tcGlsZXJzIHdpbGwgZG8gYXMgZ29vZCBhIGpvYgorICBpbmxpbmluZyBtb2R1bGFyIGNvZGUgYXMgY2FuIG5vdyBiZSBkb25lIGJ5IGJydXRlLWZvcmNlIGV4cGFuc2lvbiwKKyAgYnV0IG5vdywgZW5vdWdoIG9mIHRoZW0gc2VlbSBub3QgdG8uCisKKyAgU29tZSBjb21waWxlcnMgaXNzdWUgYSBsb3Qgb2Ygd2FybmluZ3MgYWJvdXQgY29kZSB0aGF0IGlzCisgIGRlYWQvdW5yZWFjaGFibGUgb25seSBvbiBzb21lIHBsYXRmb3JtcywgYW5kIGFsc28gYWJvdXQgaW50ZW50aW9uYWwKKyAgdXNlcyBvZiBuZWdhdGlvbiBvbiB1bnNpZ25lZCB0eXBlcy4gQWxsIGtub3duIGNhc2VzIG9mIGVhY2ggY2FuIGJlCisgIGlnbm9yZWQuCisKKyAgRm9yIGEgbG9uZ2VyIGJ1dCBvdXQgb2YgZGF0ZSBoaWdoLWxldmVsIGRlc2NyaXB0aW9uLCBzZWUKKyAgICAgaHR0cDovL2dlZS5jcy5vc3dlZ28uZWR1L2RsL2h0bWwvbWFsbG9jLmh0bWwKKworKiBNU1BBQ0VTCisgIElmIE1TUEFDRVMgaXMgZGVmaW5lZCwgdGhlbiBpbiBhZGRpdGlvbiB0byBtYWxsb2MsIGZyZWUsIGV0Yy4sCisgIHRoaXMgZmlsZSBhbHNvIGRlZmluZXMgbXNwYWNlX21hbGxvYywgbXNwYWNlX2ZyZWUsIGV0Yy4gVGhlc2UKKyAgYXJlIHZlcnNpb25zIG9mIG1hbGxvYyByb3V0aW5lcyB0aGF0IHRha2UgYW4gIm1zcGFjZSIgYXJndW1lbnQKKyAgb2J0YWluZWQgdXNpbmcgY3JlYXRlX21zcGFjZSwgdG8gY29udHJvbCBhbGwgaW50ZXJuYWwgYm9va2tlZXBpbmcuCisgIElmIE9OTFlfTVNQQUNFUyBpcyBkZWZpbmVkLCBvbmx5IHRoZXNlIHZlcnNpb25zIGFyZSBjb21waWxlZC4KKyAgU28gaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIHRoaXMgYWxsb2NhdG9yIGZvciBvbmx5IHNvbWUgYWxsb2NhdGlvbnMsCisgIGFuZCB5b3VyIHN5c3RlbSBtYWxsb2MgZm9yIG90aGVycywgeW91IGNhbiBjb21waWxlIHdpdGgKKyAgT05MWV9NU1BBQ0VTIGFuZCB0aGVuIGRvIHNvbWV0aGluZyBsaWtlLi4uCisgICAgc3RhdGljIG1zcGFjZSBteW1zcGFjZSA9IGNyZWF0ZV9tc3BhY2UoMCwwKTsgLy8gZm9yIGV4YW1wbGUKKyAgICAjZGVmaW5lIG15bWFsbG9jKGJ5dGVzKSAgbXNwYWNlX21hbGxvYyhteW1zcGFjZSwgYnl0ZXMpCisKKyAgKE5vdGU6IElmIHlvdSBvbmx5IG5lZWQgb25lIGluc3RhbmNlIG9mIGFuIG1zcGFjZSwgeW91IGNhbiBpbnN0ZWFkCisgIHVzZSAiVVNFX0RMX1BSRUZJWCIgdG8gcmVsYWJlbCB0aGUgZ2xvYmFsIG1hbGxvYy4pCisKKyAgWW91IGNhbiBzaW1pbGFybHkgY3JlYXRlIHRocmVhZC1sb2NhbCBhbGxvY2F0b3JzIGJ5IHN0b3JpbmcKKyAgbXNwYWNlcyBhcyB0aHJlYWQtbG9jYWxzLiBGb3IgZXhhbXBsZToKKyAgICBzdGF0aWMgX190aHJlYWQgbXNwYWNlIHRsbXMgPSAwOworICAgIHZvaWQqICB0bG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgICAgIGlmICh0bG1zID09IDApIHRsbXMgPSBjcmVhdGVfbXNwYWNlKDAsIDApOworICAgICAgcmV0dXJuIG1zcGFjZV9tYWxsb2ModGxtcywgYnl0ZXMpOworICAgIH0KKyAgICB2b2lkICB0bGZyZWUodm9pZCogbWVtKSB7IG1zcGFjZV9mcmVlKHRsbXMsIG1lbSk7IH0KKworICBVbmxlc3MgRk9PVEVSUyBpcyBkZWZpbmVkLCBlYWNoIG1zcGFjZSBpcyBjb21wbGV0ZWx5IGluZGVwZW5kZW50LgorICBZb3UgY2Fubm90IGFsbG9jYXRlIGZyb20gb25lIGFuZCBmcmVlIHRvIGFub3RoZXIgKGFsdGhvdWdoCisgIGNvbmZvcm1hbmNlIGlzIG9ubHkgd2Vha2x5IGNoZWNrZWQsIHNvIHVzYWdlIGVycm9ycyBhcmUgbm90IGFsd2F5cworICBjYXVnaHQpLiBJZiBGT09URVJTIGlzIGRlZmluZWQsIHRoZW4gZWFjaCBjaHVuayBjYXJyaWVzIGFyb3VuZCBhIHRhZworICBpbmRpY2F0aW5nIGl0cyBvcmlnaW5hdGluZyBtc3BhY2UsIGFuZCBmcmVlcyBhcmUgZGlyZWN0ZWQgdG8gdGhlaXIKKyAgb3JpZ2luYXRpbmcgc3BhY2VzLgorCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ29tcGlsZS10aW1lIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JlIGNhcmVmdWwgaW4gc2V0dGluZyAjZGVmaW5lIHZhbHVlcyBmb3IgbnVtZXJpY2FsIGNvbnN0YW50cyBvZiB0eXBlCitzaXplX3QuIE9uIHNvbWUgc3lzdGVtcywgbGl0ZXJhbCB2YWx1ZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkCit0byBzaXplX3QgcHJlY2lzaW9uIHVubGVzcyB0aGV5IGFyZSBleHBsaWNpdGx5IGNhc3RlZC4gWW91IGNhbiBhbHNvCit1c2UgdGhlIHN5bWJvbGljIHZhbHVlcyBNQVhfU0laRV9ULCBTSVpFX1RfT05FLCBldGMgYmVsb3cuCisKK1dJTjMyICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGlmIF9XSU4zMiBkZWZpbmVkCisgIERlZmluaW5nIFdJTjMyIHNldHMgdXAgZGVmYXVsdHMgZm9yIE1TIGVudmlyb25tZW50IGFuZCBjb21waWxlcnMuCisgIE90aGVyd2lzZSBkZWZhdWx0cyBhcmUgZm9yIHVuaXguIEJld2FyZSB0aGF0IHRoZXJlIHNlZW0gdG8gYmUgc29tZQorICBjYXNlcyB3aGVyZSB0aGlzIG1hbGxvYyBtaWdodCBub3QgYmUgYSBwdXJlIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yCisgIFdpbjMyIG1hbGxvYzogUmFuZG9tLWxvb2tpbmcgZmFpbHVyZXMgZnJvbSBXaW4zMiBHREkgQVBJJ3MgKGVnOworICBTZXRESUJpdHMoKSkgbWF5IGJlIGR1ZSB0byBidWdzIGluIHNvbWUgdmlkZW8gZHJpdmVyIGltcGxlbWVudGF0aW9ucworICB3aGVuIHBpeGVsIGJ1ZmZlcnMgYXJlIG1hbGxvYygpZWQsIGFuZCB0aGUgcmVnaW9uIHNwYW5zIG1vcmUgdGhhbgorICBvbmUgVmlydHVhbEFsbG9jKCllZCByZWdpb24uIEJlY2F1c2UgZGxtYWxsb2MgdXNlcyBhIHNtYWxsICg2NEtiKQorICBkZWZhdWx0IGdyYW51bGFyaXR5LCBwaXhlbCBidWZmZXJzIG1heSBzdHJhZGRsZSB2aXJ0dWFsIGFsbG9jYXRpb24KKyAgcmVnaW9ucyBtb3JlIG9mdGVuIHRoYW4gd2hlbiB1c2luZyB0aGUgTWljcm9zb2Z0IGFsbG9jYXRvci4gIFlvdSBjYW4KKyAgYXZvaWQgdGhpcyBieSB1c2luZyBWaXJ0dWFsQWxsb2MoKSBhbmQgVmlydHVhbEZyZWUoKSBmb3IgYWxsIHBpeGVsCisgIGJ1ZmZlcnMgcmF0aGVyIHRoYW4gdXNpbmcgbWFsbG9jKCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwKKyAgcmVjb21waWxlIHRoaXMgbWFsbG9jIHdpdGggYSBsYXJnZXIgREVGQVVMVF9HUkFOVUxBUklUWS4KKworTUFMTE9DX0FMSUdOTUVOVCAgICAgICAgIGRlZmF1bHQ6IChzaXplX3QpOAorICBDb250cm9scyB0aGUgbWluaW11bSBhbGlnbm1lbnQgZm9yIG1hbGxvYydlZCBjaHVua3MuICBJdCBtdXN0IGJlIGEKKyAgcG93ZXIgb2YgdHdvIGFuZCBhdCBsZWFzdCA4LCBldmVuIG9uIG1hY2hpbmVzIGZvciB3aGljaCBzbWFsbGVyCisgIGFsaWdubWVudHMgd291bGQgc3VmZmljZS4gSXQgbWF5IGJlIGRlZmluZWQgYXMgbGFyZ2VyIHRoYW4gdGhpcworICB0aG91Z2guIE5vdGUgaG93ZXZlciB0aGF0IGNvZGUgYW5kIGRhdGEgc3RydWN0dXJlcyBhcmUgb3B0aW1pemVkIGZvcgorICB0aGUgY2FzZSBvZiA4LWJ5dGUgYWxpZ25tZW50LgorCitNU1BBQ0VTICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIElmIHRydWUsIGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgaW5kZXBlbmRlbnQgYWxsb2NhdGlvbiBzcGFjZXMuCisgIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgaWYgSEFWRV9NTUFQIGlzIHRydWUuCisKK09OTFlfTVNQQUNFUyAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgSWYgdHJ1ZSwgb25seSBjb21waWxlIGluIG1zcGFjZSB2ZXJzaW9ucywgbm90IHJlZ3VsYXIgdmVyc2lvbnMuCisKK1VTRV9MT0NLUyAgICAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgQ2F1c2VzIGVhY2ggY2FsbCB0byBlYWNoIHB1YmxpYyByb3V0aW5lIHRvIGJlIHN1cnJvdW5kZWQgd2l0aAorICBwdGhyZWFkIG9yIFdJTjMyIG11dGV4IGxvY2svdW5sb2NrLiAoSWYgc2V0IHRydWUsIHRoaXMgY2FuIGJlCisgIG92ZXJyaWRkZW4gb24gYSBwZXItbXNwYWNlIGJhc2lzIGZvciBtc3BhY2UgdmVyc2lvbnMuKSBJZiBzZXQgdG8gYQorICBub24temVybyB2YWx1ZSBvdGhlciB0aGFuIDEsIGxvY2tzIGFyZSB1c2VkLCBidXQgdGhlaXIKKyAgaW1wbGVtZW50YXRpb24gaXMgbGVmdCBvdXQsIHNvIGxvY2sgZnVuY3Rpb25zIG11c3QgYmUgc3VwcGxpZWQgbWFudWFsbHkuCisKK1VTRV9TUElOX0xPQ0tTICAgICAgICAgICBkZWZhdWx0OiAxIGlmZiBVU0VfTE9DS1MgYW5kIG9uIHg4NiB1c2luZyBnY2Mgb3IgTVNDCisgIElmIHRydWUsIHVzZXMgY3VzdG9tIHNwaW4gbG9ja3MgZm9yIGxvY2tpbmcuIFRoaXMgaXMgY3VycmVudGx5CisgIHN1cHBvcnRlZCBvbmx5IGZvciB4ODYgcGxhdGZvcm1zIHVzaW5nIGdjYyBvciByZWNlbnQgTVMgY29tcGlsZXJzLgorICBPdGhlcndpc2UsIHBvc2l4IGxvY2tzIG9yIHdpbjMyIGNyaXRpY2FsIHNlY3Rpb25zIGFyZSB1c2VkLgorCitGT09URVJTICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMAorICBJZiB0cnVlLCBwcm92aWRlIGV4dHJhIGNoZWNraW5nIGFuZCBkaXNwYXRjaGluZyBieSBwbGFjaW5nCisgIGluZm9ybWF0aW9uIGluIHRoZSBmb290ZXJzIG9mIGFsbG9jYXRlZCBjaHVua3MuIFRoaXMgYWRkcworICBzcGFjZSBhbmQgdGltZSBvdmVyaGVhZC4KKworSU5TRUNVUkUgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgdHJ1ZSwgb21pdCBjaGVja3MgZm9yIHVzYWdlIGVycm9ycyBhbmQgaGVhcCBzcGFjZSBvdmVyd3JpdGVzLgorCitVU0VfRExfUFJFRklYICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKKyAgQ2F1c2VzIGNvbXBpbGVyIHRvIHByZWZpeCBhbGwgcHVibGljIHJvdXRpbmVzIHdpdGggdGhlIHN0cmluZyAnZGwnLgorICBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB5b3Ugb25seSB3YW50IHRvIHVzZSB0aGlzIG1hbGxvYyBpbiBvbmUgcGFydAorICBvZiBhIHByb2dyYW0sIHVzaW5nIHlvdXIgcmVndWxhciBzeXN0ZW0gbWFsbG9jIGVsc2V3aGVyZS4KKworQUJPUlQgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgYWJvcnQoKQorICBEZWZpbmVzIGhvdyB0byBhYm9ydCBvbiBmYWlsZWQgY2hlY2tzLiAgT24gbW9zdCBzeXN0ZW1zLCBhIGZhaWxlZAorICBjaGVjayBjYW5ub3QgZGllIHdpdGggYW4gImFzc2VydCIgb3IgZXZlbiBwcmludCBhbiBpbmZvcm1hdGl2ZQorICBtZXNzYWdlLCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIHByaW50IHJvdXRpbmVzIGluIHR1cm4gY2FsbCBtYWxsb2MsCisgIHdoaWNoIHdpbGwgZmFpbCBhZ2Fpbi4gIEdlbmVyYWxseSwgdGhlIGJlc3QgcG9saWN5IGlzIHRvIHNpbXBseSBjYWxsCisgIGFib3J0KCkuIEl0J3Mgbm90IHZlcnkgdXNlZnVsIHRvIGRvIG1vcmUgdGhhbiB0aGlzIGJlY2F1c2UgbWFueQorICBlcnJvcnMgZHVlIHRvIG92ZXJ3cml0aW5nIHdpbGwgc2hvdyB1cCBhcyBhZGRyZXNzIGZhdWx0cyAobnVsbCwgb2RkCisgIGFkZHJlc3NlcyBldGMpIHJhdGhlciB0aGFuIG1hbGxvYy10cmlnZ2VyZWQgY2hlY2tzLCBzbyB3aWxsIGFsc28KKyAgYWJvcnQuICBBbHNvLCBtb3N0IGNvbXBpbGVycyBrbm93IHRoYXQgYWJvcnQoKSBkb2VzIG5vdCByZXR1cm4sIHNvCisgIGNhbiBiZXR0ZXIgb3B0aW1pemUgY29kZSBjb25kaXRpb25hbGx5IGNhbGxpbmcgaXQuCisKK1BST0NFRURfT05fRVJST1IgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgMCAoZmFsc2UpCisgIENvbnRyb2xzIHdoZXRoZXIgZGV0ZWN0ZWQgYmFkIGFkZHJlc3NlcyBjYXVzZSB0aGVtIHRvIGJ5cGFzc2VkCisgIHJhdGhlciB0aGFuIGFib3J0aW5nLiBJZiBzZXQsIGRldGVjdGVkIGJhZCBhcmd1bWVudHMgdG8gZnJlZSBhbmQKKyAgcmVhbGxvYyBhcmUgaWdub3JlZC4gQW5kIGFsbCBib29ra2VlcGluZyBpbmZvcm1hdGlvbiBpcyB6ZXJvZWQgb3V0CisgIHVwb24gYSBkZXRlY3RlZCBvdmVyd3JpdGUgb2YgZnJlZWQgaGVhcCBzcGFjZSwgdGh1cyBsb3NpbmcgdGhlCisgIGFiaWxpdHkgdG8gZXZlciByZXR1cm4gaXQgZnJvbSBtYWxsb2MgYWdhaW4sIGJ1dCBlbmFibGluZyB0aGUKKyAgYXBwbGljYXRpb24gdG8gcHJvY2VlZC4gSWYgUFJPQ0VFRF9PTl9FUlJPUiBpcyBkZWZpbmVkLCB0aGUKKyAgc3RhdGljIHZhcmlhYmxlIG1hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50IGlzIGNvbXBpbGVkIGluCisgIGFuZCBjYW4gYmUgZXhhbWluZWQgdG8gc2VlIGlmIGVycm9ycyBoYXZlIG9jY3VycmVkLiBUaGlzIG9wdGlvbgorICBnZW5lcmF0ZXMgc2xvd2VyIGNvZGUgdGhhbiB0aGUgZGVmYXVsdCBhYm9ydCBwb2xpY3kuCisKK0RFQlVHICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBUaGUgREVCVUcgc2V0dGluZyBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIHBlb3BsZSB0cnlpbmcgdG8gbW9kaWZ5CisgIHRoaXMgY29kZSBvciBkaWFnbm9zZSBwcm9ibGVtcyB3aGVuIHBvcnRpbmcgdG8gbmV3IHBsYXRmb3Jtcy4KKyAgSG93ZXZlciwgaXQgbWF5IGFsc28gYmUgYWJsZSB0byBiZXR0ZXIgaXNvbGF0ZSB1c2VyIGVycm9ycyB0aGFuIGp1c3QKKyAgdXNpbmcgcnVudGltZSBjaGVja3MuICBUaGUgYXNzZXJ0aW9ucyBpbiB0aGUgY2hlY2sgcm91dGluZXMgc3BlbGwKKyAgb3V0IGluIG1vcmUgZGV0YWlsIHRoZSBhc3N1bXB0aW9ucyBhbmQgaW52YXJpYW50cyB1bmRlcmx5aW5nIHRoZQorICBhbGdvcml0aG1zLiAgVGhlIGNoZWNraW5nIGlzIGZhaXJseSBleHRlbnNpdmUsIGFuZCB3aWxsIHNsb3cgZG93bgorICBleGVjdXRpb24gbm90aWNlYWJseS4gQ2FsbGluZyBtYWxsb2Nfc3RhdHMgb3IgbWFsbGluZm8gd2l0aCBERUJVRworICBzZXQgd2lsbCBhdHRlbXB0IHRvIGNoZWNrIGV2ZXJ5IG5vbi1tbWFwcGVkIGFsbG9jYXRlZCBhbmQgZnJlZSBjaHVuaworICBpbiB0aGUgY291cnNlIG9mIGNvbXB1dGluZyB0aGUgc3VtbWFyaWVzLgorCitBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgMSAodHJ1ZSkKKyAgRGVidWdnaW5nIGFzc2VydGlvbiBmYWlsdXJlcyBjYW4gYmUgbmVhcmx5IGltcG9zc2libGUgaWYgeW91cgorICB2ZXJzaW9uIG9mIHRoZSBhc3NlcnQgbWFjcm8gY2F1c2VzIG1hbGxvYyB0byBiZSBjYWxsZWQsIHdoaWNoIHdpbGwKKyAgbGVhZCB0byBhIGNhc2NhZGUgb2YgZnVydGhlciBmYWlsdXJlcywgYmxvd2luZyB0aGUgcnVudGltZSBzdGFjay4KKyAgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgY2F1c2UgYXNzZXJ0aW9ucyBmYWlsdXJlcyB0byBjYWxsIGFib3J0KCksCisgIHdoaWNoIHdpbGwgdXN1YWxseSBtYWtlIGRlYnVnZ2luZyBlYXNpZXIuCisKK01BTExPQ19GQUlMVVJFX0FDVElPTiAgICAgZGVmYXVsdDogc2V0cyBlcnJubyB0byBFTk9NRU0sIG9yIG5vLW9wIG9uIHdpbjMyCisgIFRoZSBhY3Rpb24gdG8gdGFrZSBiZWZvcmUgInJldHVybiAwIiB3aGVuIG1hbGxvYyBmYWlscyB0byBiZSBhYmxlIHRvCisgIHJldHVybiBtZW1vcnkgYmVjYXVzZSB0aGVyZSBpcyBub25lIGF2YWlsYWJsZS4KKworSEFWRV9NT1JFQ09SRSAgICAgICAgICAgICBkZWZhdWx0OiAxICh0cnVlKSB1bmxlc3Mgd2luMzIgb3IgT05MWV9NU1BBQ0VTCisgIFRydWUgaWYgdGhpcyBzeXN0ZW0gc3VwcG9ydHMgc2JyayBvciBhbiBlbXVsYXRpb24gb2YgaXQuCisKK01PUkVDT1JFICAgICAgICAgICAgICAgICAgZGVmYXVsdDogc2JyaworICBUaGUgbmFtZSBvZiB0aGUgc2Jyay1zdHlsZSBzeXN0ZW0gcm91dGluZSB0byBjYWxsIHRvIG9idGFpbiBtb3JlCisgIG1lbW9yeS4gIFNlZSBiZWxvdyBmb3IgZ3VpZGFuY2Ugb24gd3JpdGluZyBjdXN0b20gTU9SRUNPUkUKKyAgZnVuY3Rpb25zLiBUaGUgdHlwZSBvZiB0aGUgYXJndW1lbnQgdG8gc2Jyay9NT1JFQ09SRSB2YXJpZXMgYWNyb3NzCisgIHN5c3RlbXMuICBJdCBjYW5ub3QgYmUgc2l6ZV90LCBiZWNhdXNlIGl0IHN1cHBvcnRzIG5lZ2F0aXZlCisgIGFyZ3VtZW50cywgc28gaXQgaXMgbm9ybWFsbHkgdGhlIHNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHdpZHRoIGFzCisgIHNpemVfdCAoc29tZXRpbWVzIGRlY2xhcmVkIGFzICJpbnRwdHJfdCIpLiAgSXQgZG9lc24ndCBtdWNoIG1hdHRlcgorICB0aG91Z2guIEludGVybmFsbHksIHdlIG9ubHkgY2FsbCBpdCB3aXRoIGFyZ3VtZW50cyBsZXNzIHRoYW4gaGFsZgorICB0aGUgbWF4IHZhbHVlIG9mIGEgc2l6ZV90LCB3aGljaCBzaG91bGQgd29yayBhY3Jvc3MgYWxsIHJlYXNvbmFibGUKKyAgcG9zc2liaWxpdGllcywgYWx0aG91Z2ggc29tZXRpbWVzIGdlbmVyYXRpbmcgY29tcGlsZXIgd2FybmluZ3MuCisKK01PUkVDT1JFX0NPTlRJR1VPVVMgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkgaWYgSEFWRV9NT1JFQ09SRQorICBJZiB0cnVlLCB0YWtlIGFkdmFudGFnZSBvZiBmYWN0IHRoYXQgY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUKKyAgd2l0aCBwb3NpdGl2ZSBhcmd1bWVudHMgYWx3YXlzIHJldHVybiBjb250aWd1b3VzIGluY3JlYXNpbmcKKyAgYWRkcmVzc2VzLiAgVGhpcyBpcyB0cnVlIG9mIHVuaXggc2Jyay4gSXQgZG9lcyBub3QgaHVydCB0b28gbXVjaCB0bworICBzZXQgaXQgdHJ1ZSBhbnl3YXksIHNpbmNlIG1hbGxvYyBjb3BlcyB3aXRoIG5vbi1jb250aWd1aXRpZXMuCisgIFNldHRpbmcgaXQgZmFsc2Ugd2hlbiBkZWZpbml0ZWx5IG5vbi1jb250aWd1b3VzIHNhdmVzIHRpbWUKKyAgYW5kIHBvc3NpYmx5IHdhc3RlZCBzcGFjZSBpdCB3b3VsZCB0YWtlIHRvIGRpc2NvdmVyIHRoaXMgdGhvdWdoLgorCitNT1JFQ09SRV9DQU5OT1RfVFJJTSAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCisgIFRydWUgaWYgTU9SRUNPUkUgY2Fubm90IHJlbGVhc2Ugc3BhY2UgYmFjayB0byB0aGUgc3lzdGVtIHdoZW4gZ2l2ZW4KKyAgbmVnYXRpdmUgYXJndW1lbnRzLiBUaGlzIGlzIGdlbmVyYWxseSBuZWNlc3Nhcnkgb25seSBpZiB5b3UgYXJlCisgIHVzaW5nIGEgaGFuZC1jcmFmdGVkIE1PUkVDT1JFIGZ1bmN0aW9uIHRoYXQgY2Fubm90IGhhbmRsZSBuZWdhdGl2ZQorICBhcmd1bWVudHMuCisKK05PX1NFR01FTlRfVFJBVkVSU0FMICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgbm9uLXplcm8sIHN1cHByZXNzZXMgdHJhdmVyc2FscyBvZiBtZW1vcnkgc2VnbWVudHMKKyAgcmV0dXJuZWQgYnkgZWl0aGVyIE1PUkVDT1JFIG9yIENBTExfTU1BUC4gVGhpcyBkaXNhYmxlcworICBtZXJnaW5nIG9mIHNlZ21lbnRzIHRoYXQgYXJlIGNvbnRpZ3VvdXMsIGFuZCBzZWxlY3RpdmVseQorICByZWxlYXNpbmcgdGhlbSB0byB0aGUgT1MgaWYgdW51c2VkLCBidXQgYm91bmRzIGV4ZWN1dGlvbiB0aW1lcy4KKworSEFWRV9NTUFQICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxICh0cnVlKQorICBUcnVlIGlmIHRoaXMgc3lzdGVtIHN1cHBvcnRzIG1tYXAgb3IgYW4gZW11bGF0aW9uIG9mIGl0LiAgSWYgc28sIGFuZAorICBIQVZFX01PUkVDT1JFIGlzIG5vdCB0cnVlLCBNTUFQIGlzIHVzZWQgZm9yIGFsbCBzeXN0ZW0KKyAgYWxsb2NhdGlvbi4gSWYgc2V0IGFuZCBIQVZFX01PUkVDT1JFIGlzIHRydWUgYXMgd2VsbCwgTU1BUCBpcworICBwcmltYXJpbHkgdXNlZCB0byBkaXJlY3RseSBhbGxvY2F0ZSB2ZXJ5IGxhcmdlIGJsb2Nrcy4gSXQgaXMgYWxzbworICB1c2VkIGFzIGEgYmFja3VwIHN0cmF0ZWd5IGluIGNhc2VzIHdoZXJlIE1PUkVDT1JFIGZhaWxzIHRvIHByb3ZpZGUKKyAgc3BhY2UgZnJvbSBzeXN0ZW0uIE5vdGU6IEEgc2luZ2xlIGNhbGwgdG8gTVVOTUFQIGlzIGFzc3VtZWQgdG8gYmUKKyAgYWJsZSB0byB1bm1hcCBtZW1vcnkgdGhhdCBtYXkgaGF2ZSBiZSBhbGxvY2F0ZWQgdXNpbmcgbXVsdGlwbGUgY2FsbHMKKyAgdG8gTU1BUCwgc28gbG9uZyBhcyB0aGV5IGFyZSBhZGphY2VudC4KKworSEFWRV9NUkVNQVAgICAgICAgICAgICAgICBkZWZhdWx0OiAxIG9uIGxpbnV4LCBlbHNlIDAKKyAgSWYgdHJ1ZSByZWFsbG9jKCkgdXNlcyBtcmVtYXAoKSB0byByZS1hbGxvY2F0ZSBsYXJnZSBibG9ja3MgYW5kCisgIGV4dGVuZCBvciBzaHJpbmsgYWxsb2NhdGlvbiBzcGFjZXMuCisKK01NQVBfQ0xFQVJTICAgICAgICAgICAgICAgZGVmYXVsdDogMSBleGNlcHQgb24gV0lOQ0UuCisgIFRydWUgaWYgbW1hcCBjbGVhcnMgbWVtb3J5IHNvIGNhbGxvYyBkb2Vzbid0IG5lZWQgdG8uIFRoaXMgaXMgdHJ1ZQorICBmb3Igc3RhbmRhcmQgdW5peCBtbWFwIHVzaW5nIC9kZXYvemVybyBhbmQgb24gV0lOMzIgZXhjZXB0IGZvciBXSU5DRS4KKworVVNFX0JVSUxUSU5fRkZTICAgICAgICAgICAgZGVmYXVsdDogMCAoaS5lLiwgbm90IHVzZWQpCisgIENhdXNlcyBtYWxsb2MgdG8gdXNlIHRoZSBidWlsdGluIGZmcygpIGZ1bmN0aW9uIHRvIGNvbXB1dGUgaW5kaWNlcy4KKyAgU29tZSBjb21waWxlcnMgbWF5IHJlY29nbml6ZSBhbmQgaW50cmluc2lmeSBmZnMgdG8gYmUgZmFzdGVyIHRoYW4gdGhlCisgIHN1cHBsaWVkIEMgdmVyc2lvbi4gQWxzbywgdGhlIGNhc2Ugb2YgeDg2IHVzaW5nIGdjYyBpcyBzcGVjaWFsLWNhc2VkCisgIHRvIGFuIGFzbSBpbnN0cnVjdGlvbiwgc28gaXMgYWxyZWFkeSBhcyBmYXN0IGFzIGl0IGNhbiBiZSwgYW5kIHNvCisgIHRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0LiBTaW1pbGFybHkgZm9yIFdpbjMyIHVuZGVyIHJlY2VudCBNUyBjb21waWxlcnMuCisgIChPbiBtb3N0IHg4NnMsIHRoZSBhc20gdmVyc2lvbiBpcyBvbmx5IHNsaWdodGx5IGZhc3RlciB0aGFuIHRoZSBDIHZlcnNpb24uKQorCittYWxsb2NfZ2V0cGFnZXNpemUgICAgICAgICBkZWZhdWx0OiBkZXJpdmUgZnJvbSBzeXN0ZW0gaW5jbHVkZXMsIG9yIDQwOTYuCisgIFRoZSBzeXN0ZW0gcGFnZSBzaXplLiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGlzIG1hbGxvYyBtYW5hZ2VzCisgIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0gaW4gcGFnZS1zaXplIHVuaXRzLiAgVGhpcyBtYXkgYmUgKGFuZAorICB1c3VhbGx5IGlzKSBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGEgY29uc3RhbnQuIFRoaXMgaXMgaWdub3JlZAorICBpZiBXSU4zMiwgd2hlcmUgcGFnZSBzaXplIGlzIGRldGVybWluZWQgdXNpbmcgZ2V0U3lzdGVtSW5mbyBkdXJpbmcKKyAgaW5pdGlhbGl6YXRpb24uCisKK1VTRV9ERVZfUkFORE9NICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGkuZS4sIG5vdCB1c2VkKQorICBDYXVzZXMgbWFsbG9jIHRvIHVzZSAvZGV2L3JhbmRvbSB0byBpbml0aWFsaXplIHNlY3VyZSBtYWdpYyBzZWVkIGZvcgorICBzdGFtcGluZyBmb290ZXJzLiBPdGhlcndpc2UsIHRoZSBjdXJyZW50IHRpbWUgaXMgdXNlZC4KKworTk9fTUFMTElORk8gICAgICAgICAgICAgICAgZGVmYXVsdDogMAorICBJZiBkZWZpbmVkLCBkb24ndCBjb21waWxlICJtYWxsaW5mbyIuIFRoaXMgY2FuIGJlIGEgc2ltcGxlIHdheQorICBvZiBkZWFsaW5nIHdpdGggbWlzbWF0Y2hlcyBiZXR3ZWVuIHN5c3RlbSBkZWNsYXJhdGlvbnMgYW5kCisgIHRob3NlIGluIHRoaXMgZmlsZS4KKworTUFMTElORk9fRklFTERfVFlQRSAgICAgICAgZGVmYXVsdDogc2l6ZV90CisgIFRoZSB0eXBlIG9mIHRoZSBmaWVsZHMgaW4gdGhlIG1hbGxpbmZvIHN0cnVjdC4gVGhpcyB3YXMgb3JpZ2luYWxseQorICBkZWZpbmVkIGFzICJpbnQiIGluIFNWSUQgZXRjLCBidXQgaXMgbW9yZSB1c2VmdWxseSBkZWZpbmVkIGFzCisgIHNpemVfdC4gVGhlIHZhbHVlIGlzIHVzZWQgb25seSBpZiAgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCBpcyBub3Qgc2V0CisKK1JFQUxMT0NfWkVST19CWVRFU19GUkVFUyAgICBkZWZhdWx0OiBub3QgZGVmaW5lZAorICBUaGlzIHNob3VsZCBiZSBzZXQgaWYgYSBjYWxsIHRvIHJlYWxsb2Mgd2l0aCB6ZXJvIGJ5dGVzIHNob3VsZAorICBiZSB0aGUgc2FtZSBhcyBhIGNhbGwgdG8gZnJlZS4gU29tZSBwZW9wbGUgdGhpbmsgaXQgc2hvdWxkLiBPdGhlcndpc2UsCisgIHNpbmNlIHRoaXMgbWFsbG9jIHJldHVybnMgYSB1bmlxdWUgcG9pbnRlciBmb3IgbWFsbG9jKDApLCBzbyBkb2VzCisgIHJlYWxsb2MocCwgMCkuCisKK0xBQ0tTX1VOSVNURF9ILCBMQUNLU19GQ05UTF9ILCBMQUNLU19TWVNfUEFSQU1fSCwgTEFDS1NfU1lTX01NQU5fSAorTEFDS1NfU1RSSU5HU19ILCBMQUNLU19TVFJJTkdfSCwgTEFDS1NfU1lTX1RZUEVTX0gsICBMQUNLU19FUlJOT19ICitMQUNLU19TVERMSUJfSCAgICAgICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZCB1bmxlc3Mgb24gV0lOMzIKKyAgRGVmaW5lIHRoZXNlIGlmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGhhdmUgdGhlc2UgaGVhZGVyIGZpbGVzLgorICBZb3UgbWlnaHQgbmVlZCB0byBtYW51YWxseSBpbnNlcnQgc29tZSBvZiB0aGUgZGVjbGFyYXRpb25zIHRoZXkgcHJvdmlkZS4KKworREVGQVVMVF9HUkFOVUxBUklUWSAgICAgICAgZGVmYXVsdDogcGFnZSBzaXplIGlmIE1PUkVDT1JFX0NPTlRJR1VPVVMsCisJCQkJc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHkgaW4gV0lOMzIsCisJCQkJb3RoZXJ3aXNlIDY0Sy4KKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX0dSQU5VTEFSSVRZLCB4KQorICBUaGUgdW5pdCBmb3IgYWxsb2NhdGluZyBhbmQgZGVhbGxvY2F0aW5nIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uICBPbgorICBtb3N0IHN5c3RlbXMgd2l0aCBjb250aWd1b3VzIE1PUkVDT1JFLCB0aGVyZSBpcyBubyByZWFzb24gdG8KKyAgbWFrZSB0aGlzIG1vcmUgdGhhbiBhIHBhZ2UuIEhvd2V2ZXIsIHN5c3RlbXMgd2l0aCBNTUFQIHRlbmQgdG8KKyAgZWl0aGVyIHJlcXVpcmUgb3IgZW5jb3VyYWdlIGxhcmdlciBncmFudWxhcml0aWVzLiAgWW91IGNhbiBpbmNyZWFzZQorICB0aGlzIHZhbHVlIHRvIHByZXZlbnQgc3lzdGVtIGFsbG9jYXRpb24gZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBzbworICBvZnRlbiwgZXNwZWNpYWxseSBpZiB0aGV5IGFyZSBzbG93LiAgVGhlIHZhbHVlIG11c3QgYmUgYXQgbGVhc3Qgb25lCisgIHBhZ2UgYW5kIG11c3QgYmUgYSBwb3dlciBvZiB0d28uICBTZXR0aW5nIHRvIDAgY2F1c2VzIGluaXRpYWxpemF0aW9uCisgIHRvIGVpdGhlciBwYWdlIHNpemUgb3Igd2luMzIgcmVnaW9uIHNpemUuICAoTm90ZTogSW4gcHJldmlvdXMKKyAgdmVyc2lvbnMgb2YgbWFsbG9jLCB0aGUgZXF1aXZhbGVudCBvZiB0aGlzIG9wdGlvbiB3YXMgY2FsbGVkCisgICJUT1BfUEFEIikKKworREVGQVVMVF9UUklNX1RIUkVTSE9MRCAgICBkZWZhdWx0OiAyTUIKKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX1RSSU1fVEhSRVNIT0xELCB4KQorICBUaGUgbWF4aW11bSBhbW91bnQgb2YgdW51c2VkIHRvcC1tb3N0IG1lbW9yeSB0byBrZWVwIGJlZm9yZQorICByZWxlYXNpbmcgdmlhIG1hbGxvY190cmltIGluIGZyZWUoKS4gIEF1dG9tYXRpYyB0cmltbWluZyBpcyBtYWlubHkKKyAgdXNlZnVsIGluIGxvbmctbGl2ZWQgcHJvZ3JhbXMgdXNpbmcgY29udGlndW91cyBNT1JFQ09SRS4gIEJlY2F1c2UKKyAgdHJpbW1pbmcgdmlhIHNicmsgY2FuIGJlIHNsb3cgb24gc29tZSBzeXN0ZW1zLCBhbmQgY2FuIHNvbWV0aW1lcyBiZQorICB3YXN0ZWZ1bCAoaW4gY2FzZXMgd2hlcmUgcHJvZ3JhbXMgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkIGFsbG9jYXRlCisgIG1vcmUgbGFyZ2UgY2h1bmtzKSB0aGUgdmFsdWUgc2hvdWxkIGJlIGhpZ2ggZW5vdWdoIHNvIHRoYXQgeW91cgorICBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3b3VsZCBpbXByb3ZlIGJ5IHJlbGVhc2luZyB0aGlzIG11Y2gKKyAgbWVtb3J5LiAgQXMgYSByb3VnaCBndWlkZSwgeW91IG1pZ2h0IHNldCB0byBhIHZhbHVlIGNsb3NlIHRvIHRoZQorICBhdmVyYWdlIHNpemUgb2YgYSBwcm9jZXNzIChwcm9ncmFtKSBydW5uaW5nIG9uIHlvdXIgc3lzdGVtLgorICBSZWxlYXNpbmcgdGhpcyBtdWNoIG1lbW9yeSB3b3VsZCBhbGxvdyBzdWNoIGEgcHJvY2VzcyB0byBydW4gaW4KKyAgbWVtb3J5LiAgR2VuZXJhbGx5LCBpdCBpcyB3b3J0aCB0dW5pbmcgdHJpbSB0aHJlc2hvbGRzIHdoZW4gYQorICBwcm9ncmFtIHVuZGVyZ29lcyBwaGFzZXMgd2hlcmUgc2V2ZXJhbCBsYXJnZSBjaHVua3MgYXJlIGFsbG9jYXRlZAorICBhbmQgcmVsZWFzZWQgaW4gd2F5cyB0aGF0IGNhbiByZXVzZSBlYWNoIG90aGVyJ3Mgc3RvcmFnZSwgcGVyaGFwcworICBtaXhlZCB3aXRoIHBoYXNlcyB3aGVyZSB0aGVyZSBhcmUgbm8gc3VjaCBjaHVua3MgYXQgYWxsLiBUaGUgdHJpbQorICB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBwYWdlIHNpemUgdG8gaGF2ZSBhbnkgdXNlZnVsIGVmZmVjdC4gIFRvCisgIGRpc2FibGUgdHJpbW1pbmcgY29tcGxldGVseSwgeW91IGNhbiBzZXQgdG8gTUFYX1NJWkVfVC4gTm90ZSB0aGF0IHRoZSB0cmljaworICBzb21lIHBlb3BsZSB1c2Ugb2YgbWFsbG9jaW5nIGEgaHVnZSBzcGFjZSBhbmQgdGhlbiBmcmVlaW5nIGl0IGF0CisgIHByb2dyYW0gc3RhcnR1cCwgaW4gYW4gYXR0ZW1wdCB0byByZXNlcnZlIHN5c3RlbSBtZW1vcnksIGRvZXNuJ3QKKyAgaGF2ZSB0aGUgaW50ZW5kZWQgZWZmZWN0IHVuZGVyIGF1dG9tYXRpYyB0cmltbWluZywgc2luY2UgdGhhdCBtZW1vcnkKKyAgd2lsbCBpbW1lZGlhdGVseSBiZSByZXR1cm5lZCB0byB0aGUgc3lzdGVtLgorCitERUZBVUxUX01NQVBfVEhSRVNIT0xEICAgICAgIGRlZmF1bHQ6IDI1NksKKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX01NQVBfVEhSRVNIT0xELCB4KQorICBUaGUgcmVxdWVzdCBzaXplIHRocmVzaG9sZCBmb3IgdXNpbmcgTU1BUCB0byBkaXJlY3RseSBzZXJ2aWNlIGEKKyAgcmVxdWVzdC4gUmVxdWVzdHMgb2YgYXQgbGVhc3QgdGhpcyBzaXplIHRoYXQgY2Fubm90IGJlIGFsbG9jYXRlZAorICB1c2luZyBhbHJlYWR5LWV4aXN0aW5nIHNwYWNlIHdpbGwgYmUgc2VydmljZWQgdmlhIG1tYXAuICAoSWYgZW5vdWdoCisgIG5vcm1hbCBmcmVlZCBzcGFjZSBhbHJlYWR5IGV4aXN0cyBpdCBpcyB1c2VkIGluc3RlYWQuKSAgVXNpbmcgbW1hcAorICBzZWdyZWdhdGVzIHJlbGF0aXZlbHkgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSBzbyB0aGF0IHRoZXkgY2FuIGJlCisgIGluZGl2aWR1YWxseSBvYnRhaW5lZCBhbmQgcmVsZWFzZWQgZnJvbSB0aGUgaG9zdCBzeXN0ZW0uIEEgcmVxdWVzdAorICBzZXJ2aWNlZCB0aHJvdWdoIG1tYXAgaXMgbmV2ZXIgcmV1c2VkIGJ5IGFueSBvdGhlciByZXF1ZXN0IChhdCBsZWFzdAorICBub3QgZGlyZWN0bHk7IHRoZSBzeXN0ZW0gbWF5IGp1c3Qgc28gaGFwcGVuIHRvIHJlbWFwIHN1Y2Nlc3NpdmUKKyAgcmVxdWVzdHMgdG8gdGhlIHNhbWUgbG9jYXRpb25zKS4gIFNlZ3JlZ2F0aW5nIHNwYWNlIGluIHRoaXMgd2F5IGhhcworICB0aGUgYmVuZWZpdHMgdGhhdDogTW1hcHBlZCBzcGFjZSBjYW4gYWx3YXlzIGJlIGluZGl2aWR1YWxseSByZWxlYXNlZAorICBiYWNrIHRvIHRoZSBzeXN0ZW0sIHdoaWNoIGhlbHBzIGtlZXAgdGhlIHN5c3RlbSBsZXZlbCBtZW1vcnkgZGVtYW5kcworICBvZiBhIGxvbmctbGl2ZWQgcHJvZ3JhbSBsb3cuICBBbHNvLCBtYXBwZWQgbWVtb3J5IGRvZXNuJ3QgYmVjb21lCisgIGBsb2NrZWQnIGJldHdlZW4gb3RoZXIgY2h1bmtzLCBhcyBjYW4gaGFwcGVuIHdpdGggbm9ybWFsbHkgYWxsb2NhdGVkCisgIGNodW5rcywgd2hpY2ggbWVhbnMgdGhhdCBldmVuIHRyaW1taW5nIHZpYSBtYWxsb2NfdHJpbSB3b3VsZCBub3QKKyAgcmVsZWFzZSB0aGVtLiAgSG93ZXZlciwgaXQgaGFzIHRoZSBkaXNhZHZhbnRhZ2UgdGhhdCB0aGUgc3BhY2UKKyAgY2Fubm90IGJlIHJlY2xhaW1lZCwgY29uc29saWRhdGVkLCBhbmQgdGhlbiB1c2VkIHRvIHNlcnZpY2UgbGF0ZXIKKyAgcmVxdWVzdHMsIGFzIGhhcHBlbnMgd2l0aCBub3JtYWwgY2h1bmtzLiAgVGhlIGFkdmFudGFnZXMgb2YgbW1hcAorICBuZWFybHkgYWx3YXlzIG91dHdlaWdoIGRpc2FkdmFudGFnZXMgZm9yICJsYXJnZSIgY2h1bmtzLCBidXQgdGhlCisgIHZhbHVlIG9mICJsYXJnZSIgbWF5IHZhcnkgYWNyb3NzIHN5c3RlbXMuICBUaGUgZGVmYXVsdCBpcyBhbgorICBlbXBpcmljYWxseSBkZXJpdmVkIHZhbHVlIHRoYXQgd29ya3Mgd2VsbCBpbiBtb3N0IHN5c3RlbXMuIFlvdSBjYW4KKyAgZGlzYWJsZSBtbWFwIGJ5IHNldHRpbmcgdG8gTUFYX1NJWkVfVC4KKworTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSAgIGRlZmF1bHQ6IDQwOTUgdW5sZXNzIG5vdCBIQVZFX01NQVAKKyAgVGhlIG51bWJlciBvZiBjb25zb2xpZGF0ZWQgZnJlZXMgYmV0d2VlbiBjaGVja3MgdG8gcmVsZWFzZQorICB1bnVzZWQgc2VnbWVudHMgd2hlbiBmcmVlaW5nLiBXaGVuIHVzaW5nIG5vbi1jb250aWd1b3VzIHNlZ21lbnRzLAorICBlc3BlY2lhbGx5IHdpdGggbXVsdGlwbGUgbXNwYWNlcywgY2hlY2tpbmcgb25seSBmb3IgdG9wbW9zdCBzcGFjZQorICBkb2Vzbid0IGFsd2F5cyBzdWZmaWNlIHRvIHRyaWdnZXIgdHJpbW1pbmcuIFRvIGNvbXBlbnNhdGUgZm9yIHRoaXMsCisgIGZyZWUoKSB3aWxsLCB3aXRoIGEgcGVyaW9kIG9mIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgKG9yIHRoZQorICBjdXJyZW50IG51bWJlciBvZiBzZWdtZW50cywgaWYgZ3JlYXRlcikgdHJ5IHRvIHJlbGVhc2UgdW51c2VkCisgIHNlZ21lbnRzIHRvIHRoZSBPUyB3aGVuIGZyZWVpbmcgY2h1bmtzIHRoYXQgcmVzdWx0IGluCisgIGNvbnNvbGlkYXRpb24uIFRoZSBiZXN0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyBhIGNvbXByb21pc2UKKyAgYmV0d2VlbiBzbG93aW5nIGRvd24gZnJlZXMgd2l0aCByZWxhdGl2ZWx5IGNvc3RseSBjaGVja3MgdGhhdAorICByYXJlbHkgdHJpZ2dlciB2ZXJzdXMgaG9sZGluZyBvbiB0byB1bnVzZWQgbWVtb3J5LiBUbyBlZmZlY3RpdmVseQorICBkaXNhYmxlLCBzZXQgdG8gTUFYX1NJWkVfVC4gVGhpcyBtYXkgbGVhZCB0byBhIHZlcnkgc2xpZ2h0IHNwZWVkCisgIGltcHJvdmVtZW50IGF0IHRoZSBleHBlbnNlIG9mIGNhcnJ5aW5nIGFyb3VuZCBtb3JlIG1lbW9yeS4KKyovCisKKy8qIFZlcnNpb24gaWRlbnRpZmllciB0byBhbGxvdyBwZW9wbGUgdG8gc3VwcG9ydCBtdWx0aXBsZSB2ZXJzaW9ucyAqLworI2lmbmRlZiBETE1BTExPQ19WRVJTSU9OCisjZGVmaW5lIERMTUFMTE9DX1ZFUlNJT04gMjA4MDQKKyNlbmRpZiAvKiBETE1BTExPQ19WRVJTSU9OICovCisKKyNpZm5kZWYgV0lOMzIKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgV0lOMzIgMQorI2VuZGlmICAvKiBfV0lOMzIgKi8KKyNpZmRlZiBfV0lOMzJfV0NFCisjZGVmaW5lIExBQ0tTX0ZDTlRMX0gKKyNkZWZpbmUgV0lOMzIgMQorI2VuZGlmIC8qIF9XSU4zMl9XQ0UgKi8KKyNlbmRpZiAgLyogV0lOMzIgKi8KKyNpZmRlZiBXSU4zMgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDQwMworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNkZWZpbmUgSEFWRV9NTUFQIDEKKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwCisjZGVmaW5lIExBQ0tTX1VOSVNURF9ICisjZGVmaW5lIExBQ0tTX1NZU19QQVJBTV9ICisjZGVmaW5lIExBQ0tTX1NZU19NTUFOX0gKKyNkZWZpbmUgTEFDS1NfU1RSSU5HX0gKKyNkZWZpbmUgTEFDS1NfU1RSSU5HU19ICisjZGVmaW5lIExBQ0tTX1NZU19UWVBFU19ICisjZGVmaW5lIExBQ0tTX0VSUk5PX0gKKyNpZm5kZWYgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCisjZGVmaW5lIE1BTExPQ19GQUlMVVJFX0FDVElPTgorI2VuZGlmIC8qIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLworI2lmZGVmIF9XSU4zMl9XQ0UgLyogV0lOQ0UgcmVwb3J0ZWRseSBkb2VzIG5vdCBjbGVhciAqLworI2RlZmluZSBNTUFQX0NMRUFSUyAwCisjZWxzZQorI2RlZmluZSBNTUFQX0NMRUFSUyAxCisjZW5kaWYgLyogX1dJTjMyX1dDRSAqLworI2VuZGlmICAvKiBXSU4zMiAqLworCisjaWYgZGVmaW5lZChEQVJXSU4pIHx8IGRlZmluZWQoX0RBUldJTikKKy8qIE1hYyBPU1ggZG9jcyBhZHZpc2Ugbm90IHRvIHVzZSBzYnJrOyBpdCBzZWVtcyBiZXR0ZXIgdG8gdXNlIG1tYXAgKi8KKyNpZm5kZWYgSEFWRV9NT1JFQ09SRQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNkZWZpbmUgSEFWRV9NTUFQIDEKKy8qIE9TWCBhbGxvY2F0b3JzIHByb3ZpZGUgMTYgYnl0ZSBhbGlnbm1lbnQgKi8KKyNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVAorI2RlZmluZSBNQUxMT0NfQUxJR05NRU5UICgoc2l6ZV90KTE2VSkKKyNlbmRpZgorI2VuZGlmICAvKiBIQVZFX01PUkVDT1JFICovCisjZW5kaWYgIC8qIERBUldJTiAqLworCisjaWZuZGVmIExBQ0tTX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAvKiBGb3Igc2l6ZV90ICovCisjZW5kaWYgIC8qIExBQ0tTX1NZU19UWVBFU19IICovCisKKy8qIFRoZSBtYXhpbXVtIHBvc3NpYmxlIHNpemVfdCB2YWx1ZSBoYXMgYWxsIGJpdHMgc2V0ICovCisjZGVmaW5lIE1BWF9TSVpFX1QgICAgICAgICAgICh+KHNpemVfdCkwKQorCisjaWZuZGVmIE9OTFlfTVNQQUNFUworI2RlZmluZSBPTkxZX01TUEFDRVMgMCAgICAgLyogZGVmaW5lIHRvIGEgdmFsdWUgKi8KKyNlbHNlCisjZGVmaW5lIE9OTFlfTVNQQUNFUyAxCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2lmbmRlZiBNU1BBQ0VTCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIE1TUEFDRVMgMQorI2Vsc2UgICAvKiBPTkxZX01TUEFDRVMgKi8KKyNkZWZpbmUgTVNQQUNFUyAwCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2VuZGlmICAvKiBNU1BBQ0VTICovCisjaWZuZGVmIE1BTExPQ19BTElHTk1FTlQKKyNkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCAoKHNpemVfdCk4VSkKKyNlbmRpZiAgLyogTUFMTE9DX0FMSUdOTUVOVCAqLworI2lmbmRlZiBGT09URVJTCisjZGVmaW5lIEZPT1RFUlMgMAorI2VuZGlmICAvKiBGT09URVJTICovCisjaWZuZGVmIEFCT1JUCisjZGVmaW5lIEFCT1JUICBhYm9ydCgpCisjZW5kaWYgIC8qIEFCT1JUICovCisjaWZuZGVmIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFCisjZGVmaW5lIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFIDEKKyNlbmRpZiAgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KKyNpZm5kZWYgUFJPQ0VFRF9PTl9FUlJPUgorI2RlZmluZSBQUk9DRUVEX09OX0VSUk9SIDAKKyNlbmRpZiAgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworI2lmbmRlZiBVU0VfTE9DS1MKKyNkZWZpbmUgVVNFX0xPQ0tTIDAKKyNlbmRpZiAgLyogVVNFX0xPQ0tTICovCisjaWZuZGVmIFVTRV9TUElOX0xPQ0tTCisjaWYgVVNFX0xPQ0tTICYmIChkZWZpbmVkKF9fR05VQ19fKSAmJiAoKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpKSkgfHwgKGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzEwKQorI2RlZmluZSBVU0VfU1BJTl9MT0NLUyAxCisjZWxzZQorI2RlZmluZSBVU0VfU1BJTl9MT0NLUyAwCisjZW5kaWYgLyogVVNFX0xPQ0tTICYmIC4uLiAqLworI2VuZGlmIC8qIFVTRV9TUElOX0xPQ0tTICovCisjaWZuZGVmIElOU0VDVVJFCisjZGVmaW5lIElOU0VDVVJFIDAKKyNlbmRpZiAgLyogSU5TRUNVUkUgKi8KKyNpZm5kZWYgSEFWRV9NTUFQCisjZGVmaW5lIEhBVkVfTU1BUCAxCisjZW5kaWYgIC8qIEhBVkVfTU1BUCAqLworI2lmbmRlZiBNTUFQX0NMRUFSUworI2RlZmluZSBNTUFQX0NMRUFSUyAxCisjZW5kaWYgIC8qIE1NQVBfQ0xFQVJTICovCisjaWZuZGVmIEhBVkVfTVJFTUFQCisjaWZkZWYgbGludXgKKyNkZWZpbmUgSEFWRV9NUkVNQVAgMQorI2Vsc2UgICAvKiBsaW51eCAqLworI2RlZmluZSBIQVZFX01SRU1BUCAwCisjZW5kaWYgIC8qIGxpbnV4ICovCisjZW5kaWYgIC8qIEhBVkVfTVJFTUFQICovCisjaWZuZGVmIE1BTExPQ19GQUlMVVJFX0FDVElPTgorI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gIGVycm5vID0gRU5PTUVNOworI2VuZGlmICAvKiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gKi8KKyNpZm5kZWYgSEFWRV9NT1JFQ09SRQorI2lmIE9OTFlfTVNQQUNFUworI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNlbHNlICAgLyogT05MWV9NU1BBQ0VTICovCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMQorI2VuZGlmICAvKiBPTkxZX01TUEFDRVMgKi8KKyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLworI2lmICFIQVZFX01PUkVDT1JFCisjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMAorI2Vsc2UgICAvKiAhSEFWRV9NT1JFQ09SRSAqLworI2RlZmluZSBNT1JFQ09SRV9ERUZBVUxUIHNicmsKKyNpZm5kZWYgTU9SRUNPUkVfQ09OVElHVU9VUworI2RlZmluZSBNT1JFQ09SRV9DT05USUdVT1VTIDEKKyNlbmRpZiAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworI2VuZGlmICAvKiBIQVZFX01PUkVDT1JFICovCisjaWZuZGVmIERFRkFVTFRfR1JBTlVMQVJJVFkKKyNpZiAoTU9SRUNPUkVfQ09OVElHVU9VUyB8fCBkZWZpbmVkKFdJTjMyKSkKKyNkZWZpbmUgREVGQVVMVF9HUkFOVUxBUklUWSAoMCkgIC8qIDAgbWVhbnMgdG8gY29tcHV0ZSBpbiBpbml0X21wYXJhbXMgKi8KKyNlbHNlICAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgoc2l6ZV90KTY0VSAqIChzaXplX3QpMTAyNFUpCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyNlbmRpZiAgLyogREVGQVVMVF9HUkFOVUxBUklUWSAqLworI2lmbmRlZiBERUZBVUxUX1RSSU1fVEhSRVNIT0xECisjaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNCisjZGVmaW5lIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgKChzaXplX3QpMlUgKiAoc2l6ZV90KTEwMjRVICogKHNpemVfdCkxMDI0VSkKKyNlbHNlICAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCBNQVhfU0laRV9UCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisjZW5kaWYgIC8qIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgKi8KKyNpZm5kZWYgREVGQVVMVF9NTUFQX1RIUkVTSE9MRAorI2lmIEhBVkVfTU1BUAorI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEICgoc2l6ZV90KTI1NlUgKiAoc2l6ZV90KTEwMjRVKQorI2Vsc2UgICAvKiBIQVZFX01NQVAgKi8KKyNkZWZpbmUgREVGQVVMVF9NTUFQX1RIUkVTSE9MRCBNQVhfU0laRV9UCisjZW5kaWYgIC8qIEhBVkVfTU1BUCAqLworI2VuZGlmICAvKiBERUZBVUxUX01NQVBfVEhSRVNIT0xEICovCisjaWZuZGVmIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUKKyNpZiBIQVZFX01NQVAKKyNkZWZpbmUgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSA0MDk1CisjZWxzZQorI2RlZmluZSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFIE1BWF9TSVpFX1QKKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKyNlbmRpZiAvKiBNQVhfUkVMRUFTRV9DSEVDS19SQVRFICovCisjaWZuZGVmIFVTRV9CVUlMVElOX0ZGUworI2RlZmluZSBVU0VfQlVJTFRJTl9GRlMgMAorI2VuZGlmICAvKiBVU0VfQlVJTFRJTl9GRlMgKi8KKyNpZm5kZWYgVVNFX0RFVl9SQU5ET00KKyNkZWZpbmUgVVNFX0RFVl9SQU5ET00gMAorI2VuZGlmICAvKiBVU0VfREVWX1JBTkRPTSAqLworI2lmbmRlZiBOT19NQUxMSU5GTworI2RlZmluZSBOT19NQUxMSU5GTyAwCisjZW5kaWYgIC8qIE5PX01BTExJTkZPICovCisjaWZuZGVmIE1BTExJTkZPX0ZJRUxEX1RZUEUKKyNkZWZpbmUgTUFMTElORk9fRklFTERfVFlQRSBzaXplX3QKKyNlbmRpZiAgLyogTUFMTElORk9fRklFTERfVFlQRSAqLworI2lmbmRlZiBOT19TRUdNRU5UX1RSQVZFUlNBTAorI2RlZmluZSBOT19TRUdNRU5UX1RSQVZFUlNBTCAwCisjZW5kaWYgLyogTk9fU0VHTUVOVF9UUkFWRVJTQUwgKi8KKworLyoKKyAgbWFsbG9wdCB0dW5pbmcgb3B0aW9ucy4gIFNWSUQvWFBHIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbWV0ZXIKKyAgbnVtYmVycyBmb3IgbWFsbG9wdCwgbm9ybWFsbHkgZGVmaW5lZCBpbiBtYWxsb2MuaC4gIE5vbmUgb2YgdGhlc2UKKyAgYXJlIHVzZWQgaW4gdGhpcyBtYWxsb2MsIHNvIHNldHRpbmcgdGhlbSBoYXMgbm8gZWZmZWN0LiBCdXQgdGhpcworICBtYWxsb2MgZG9lcyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgb3B0aW9ucy4KKyovCisKKyNkZWZpbmUgTV9UUklNX1RIUkVTSE9MRCAgICAgKC0xKQorI2RlZmluZSBNX0dSQU5VTEFSSVRZICAgICAgICAoLTIpCisjZGVmaW5lIE1fTU1BUF9USFJFU0hPTEQgICAgICgtMykKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1hbGxpbmZvIGRlY2xhcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgVGhpcyB2ZXJzaW9uIG9mIG1hbGxvYyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgU1ZJRC9YUEcgbWFsbGluZm8KKyAgcm91dGluZSB0aGF0IHJldHVybnMgYSBzdHJ1Y3QgY29udGFpbmluZyB1c2FnZSBwcm9wZXJ0aWVzIGFuZAorICBzdGF0aXN0aWNzLiBJdCBzaG91bGQgd29yayBvbiBhbnkgc3lzdGVtIHRoYXQgaGFzIGEKKyAgL3Vzci9pbmNsdWRlL21hbGxvYy5oIGRlZmluaW5nIHN0cnVjdCBtYWxsaW5mby4gIFRoZSBtYWluCisgIGRlY2xhcmF0aW9uIG5lZWRlZCBpcyB0aGUgbWFsbGluZm8gc3RydWN0IHRoYXQgaXMgcmV0dXJuZWQgKGJ5LWNvcHkpCisgIGJ5IG1hbGxpbmZvKCkuICBUaGUgbWFsbG9pbmZvIHN0cnVjdCBjb250YWlucyBhIGJ1bmNoIG9mIGZpZWxkcyB0aGF0CisgIGFyZSBub3QgZXZlbiBtZWFuaW5nZnVsIGluIHRoaXMgdmVyc2lvbiBvZiBtYWxsb2MuICBUaGVzZSBmaWVsZHMgYXJlCisgIGFyZSBpbnN0ZWFkIGZpbGxlZCBieSBtYWxsaW5mbygpIHdpdGggb3RoZXIgbnVtYmVycyB0aGF0IG1pZ2h0IGJlIG9mCisgIGludGVyZXN0LgorCisgIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggc2hvdWxkIGJlIHNldCBpZiB5b3UgaGF2ZSBhCisgIC91c3IvaW5jbHVkZS9tYWxsb2MuaCBmaWxlIHRoYXQgaW5jbHVkZXMgYSBkZWNsYXJhdGlvbiBvZiBzdHJ1Y3QKKyAgbWFsbGluZm8uICBJZiBzbywgaXQgaXMgaW5jbHVkZWQ7IGVsc2UgYSBjb21wbGlhbnQgdmVyc2lvbiBpcworICBkZWNsYXJlZCBiZWxvdy4gIFRoZXNlIG11c3QgYmUgcHJlY2lzZWx5IHRoZSBzYW1lIGZvciBtYWxsaW5mbygpIHRvCisgIHdvcmsuICBUaGUgb3JpZ2luYWwgU1ZJRCB2ZXJzaW9uIG9mIHRoaXMgc3RydWN0LCBkZWZpbmVkIG9uIG1vc3QKKyAgc3lzdGVtcyB3aXRoIG1hbGxpbmZvLCBkZWNsYXJlcyBhbGwgZmllbGRzIGFzIGludHMuIEJ1dCBzb21lIG90aGVycworICBkZWZpbmUgYXMgdW5zaWduZWQgbG9uZy4gSWYgeW91ciBzeXN0ZW0gZGVmaW5lcyB0aGUgZmllbGRzIHVzaW5nIGEKKyAgdHlwZSBvZiBkaWZmZXJlbnQgd2lkdGggdGhhbiBsaXN0ZWQgaGVyZSwgeW91IE1VU1QgI2luY2x1ZGUgeW91cgorICBzeXN0ZW0gdmVyc2lvbiBhbmQgI2RlZmluZSBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ILgorKi8KKworLyogI2RlZmluZSBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisKKyNpZmRlZiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ICisjaW5jbHVkZSAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIgorI2Vsc2UgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworI2lmbmRlZiBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQKKyNkZWZpbmUgU1RSVUNUX01BTExJTkZPX0RFQ0xBUkVEIDEKK3N0cnVjdCBtYWxsaW5mbyB7CisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgYXJlbmE7ICAgIC8qIG5vbi1tbWFwcGVkIHNwYWNlIGFsbG9jYXRlZCBmcm9tIHN5c3RlbSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIG9yZGJsa3M7ICAvKiBudW1iZXIgb2YgZnJlZSBjaHVua3MgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBzbWJsa3M7ICAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBoYmxrczsgICAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBoYmxraGQ7ICAgLyogc3BhY2UgaW4gbW1hcHBlZCByZWdpb25zICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgdXNtYmxrczsgIC8qIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgZnNtYmxrczsgIC8qIGFsd2F5cyAwICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgdW9yZGJsa3M7IC8qIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGZvcmRibGtzOyAvKiB0b3RhbCBmcmVlIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUga2VlcGNvc3Q7IC8qIHJlbGVhc2FibGUgKHZpYSBtYWxsb2NfdHJpbSkgc3BhY2UgKi8KK307CisjZW5kaWYgLyogU1RSVUNUX01BTExJTkZPX0RFQ0xBUkVEICovCisjZW5kaWYgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKKy8qCisgIFRyeSB0byBwZXJzdWFkZSBjb21waWxlcnMgdG8gaW5saW5lLiBUaGUgbW9zdCBjcml0aWNhbCBmdW5jdGlvbnMgZm9yCisgIGlubGluaW5nIGFyZSBkZWZpbmVkIGFzIG1hY3Jvcywgc28gdGhlc2UgYXJlbid0IHVzZWQgZm9yIHRoZW0uCisqLworCisjaWZuZGVmIEZPUkNFSU5MSU5FCisgICNpZiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBGT1JDRUlOTElORSBfX2lubGluZSBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpCisgICNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisgICAgI2RlZmluZSBGT1JDRUlOTElORSBfX2ZvcmNlaW5saW5lCisgICNlbmRpZgorI2VuZGlmCisjaWZuZGVmIE5PSU5MSU5FCisgICNpZiBkZWZpbmVkKF9fR05VQ19fKQorICAgICNkZWZpbmUgTk9JTkxJTkUgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKyAgI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIE5PSU5MSU5FIF9fZGVjbHNwZWMobm9pbmxpbmUpCisgICNlbHNlCisgICAgI2RlZmluZSBOT0lOTElORQorICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2lmbmRlZiBGT1JDRUlOTElORQorICNkZWZpbmUgRk9SQ0VJTkxJTkUgaW5saW5lCisjZW5kaWYKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworI2lmbmRlZiBGT1JDRUlOTElORQorICNkZWZpbmUgRk9SQ0VJTkxJTkUKKyNlbmRpZgorCisjaWYgIU9OTFlfTVNQQUNFUworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIERlY2xhcmF0aW9ucyBvZiBwdWJsaWMgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIFVTRV9ETF9QUkVGSVgKKyNkZWZpbmUgZGxjYWxsb2MgICAgICAgICAgICAgICBjYWxsb2MKKyNkZWZpbmUgZGxmcmVlICAgICAgICAgICAgICAgICBmcmVlCisjZGVmaW5lIGRsbWFsbG9jICAgICAgICAgICAgICAgbWFsbG9jCisjZGVmaW5lIGRsbWVtYWxpZ24gICAgICAgICAgICAgbWVtYWxpZ24KKyNkZWZpbmUgZGxyZWFsbG9jICAgICAgICAgICAgICByZWFsbG9jCisjZGVmaW5lIGRsdmFsbG9jICAgICAgICAgICAgICAgdmFsbG9jCisjZGVmaW5lIGRscHZhbGxvYyAgICAgICAgICAgICAgcHZhbGxvYworI2RlZmluZSBkbG1hbGxpbmZvICAgICAgICAgICAgIG1hbGxpbmZvCisjZGVmaW5lIGRsbWFsbG9wdCAgICAgICAgICAgICAgbWFsbG9wdAorI2RlZmluZSBkbG1hbGxvY190cmltICAgICAgICAgIG1hbGxvY190cmltCisjZGVmaW5lIGRsbWFsbG9jX3N0YXRzICAgICAgICAgbWFsbG9jX3N0YXRzCisjZGVmaW5lIGRsbWFsbG9jX3VzYWJsZV9zaXplICAgbWFsbG9jX3VzYWJsZV9zaXplCisjZGVmaW5lIGRsbWFsbG9jX2Zvb3RwcmludCAgICAgbWFsbG9jX2Zvb3RwcmludAorI2RlZmluZSBkbG1hbGxvY19tYXhfZm9vdHByaW50IG1hbGxvY19tYXhfZm9vdHByaW50CisjZGVmaW5lIGRsaW5kZXBlbmRlbnRfY2FsbG9jICAgaW5kZXBlbmRlbnRfY2FsbG9jCisjZGVmaW5lIGRsaW5kZXBlbmRlbnRfY29tYWxsb2MgaW5kZXBlbmRlbnRfY29tYWxsb2MKKyNlbmRpZiAvKiBVU0VfRExfUFJFRklYICovCisKKworLyoKKyAgbWFsbG9jKHNpemVfdCBuKQorICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBhdCBsZWFzdCBuIGJ5dGVzLCBvcgorICBudWxsIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZSBlcnJubyBpcyBzZXQgdG8gRU5PTUVNCisgIG9uIEFOU0kgQyBzeXN0ZW1zLgorCisgIElmIG4gaXMgemVybywgbWFsbG9jIHJldHVybnMgYSBtaW5pbXVtLXNpemVkIGNodW5rLiAoVGhlIG1pbmltdW0KKyAgc2l6ZSBpcyAxNiBieXRlcyBvbiBtb3N0IDMyYml0IHN5c3RlbXMsIGFuZCAzMiBieXRlcyBvbiA2NGJpdAorICBzeXN0ZW1zLikgIE5vdGUgdGhhdCBzaXplX3QgaXMgYW4gdW5zaWduZWQgdHlwZSwgc28gY2FsbHMgd2l0aAorICBhcmd1bWVudHMgdGhhdCB3b3VsZCBiZSBuZWdhdGl2ZSBpZiBzaWduZWQgYXJlIGludGVycHJldGVkIGFzCisgIHJlcXVlc3RzIGZvciBodWdlIGFtb3VudHMgb2Ygc3BhY2UsIHdoaWNoIHdpbGwgb2Z0ZW4gZmFpbC4gVGhlCisgIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIG9mIG4gZGlmZmVycyBhY3Jvc3Mgc3lzdGVtcywgYnV0IGlzIGluIGFsbAorICBjYXNlcyBsZXNzIHRoYW4gdGhlIG1heGltdW0gcmVwcmVzZW50YWJsZSB2YWx1ZSBvZiBhIHNpemVfdC4KKyovCit2b2lkKiBkbG1hbGxvYyhzaXplX3QpOworCisvKgorICBmcmVlKHZvaWQqIHApCisgIFJlbGVhc2VzIHRoZSBjaHVuayBvZiBtZW1vcnkgcG9pbnRlZCB0byBieSBwLCB0aGF0IGhhZCBiZWVuIHByZXZpb3VzbHkKKyAgYWxsb2NhdGVkIHVzaW5nIG1hbGxvYyBvciBhIHJlbGF0ZWQgcm91dGluZSBzdWNoIGFzIHJlYWxsb2MuCisgIEl0IGhhcyBubyBlZmZlY3QgaWYgcCBpcyBudWxsLiBJZiBwIHdhcyBub3QgbWFsbG9jZWQgb3IgYWxyZWFkeQorICBmcmVlZCwgZnJlZShwKSB3aWxsIGJ5IGRlZmF1bHQgY2F1c2UgdGhlIGN1cnJlbnQgcHJvZ3JhbSB0byBhYm9ydC4KKyovCit2b2lkICBkbGZyZWUodm9pZCopOworCisvKgorICBjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUpOworICBSZXR1cm5zIGEgcG9pbnRlciB0byBuX2VsZW1lbnRzICogZWxlbWVudF9zaXplIGJ5dGVzLCB3aXRoIGFsbCBsb2NhdGlvbnMKKyAgc2V0IHRvIHplcm8uCisqLwordm9pZCogZGxjYWxsb2Moc2l6ZV90LCBzaXplX3QpOworCisvKgorICByZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBuKQorICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIGNodW5rIG9mIHNpemUgbiB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGRhdGEKKyAgYXMgZG9lcyBjaHVuayBwIHVwIHRvIHRoZSBtaW5pbXVtIG9mIChuLCBwJ3Mgc2l6ZSkgYnl0ZXMsIG9yIG51bGwKKyAgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLgorCisgIFRoZSByZXR1cm5lZCBwb2ludGVyIG1heSBvciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHAuIFRoZSBhbGdvcml0aG0KKyAgcHJlZmVycyBleHRlbmRpbmcgcCBpbiBtb3N0IGNhc2VzIHdoZW4gcG9zc2libGUsIG90aGVyd2lzZSBpdAorICBlbXBsb3lzIHRoZSBlcXVpdmFsZW50IG9mIGEgbWFsbG9jLWNvcHktZnJlZSBzZXF1ZW5jZS4KKworICBJZiBwIGlzIG51bGwsIHJlYWxsb2MgaXMgZXF1aXZhbGVudCB0byBtYWxsb2MuCisKKyAgSWYgc3BhY2UgaXMgbm90IGF2YWlsYWJsZSwgcmVhbGxvYyByZXR1cm5zIG51bGwsIGVycm5vIGlzIHNldCAoaWYgb24KKyAgQU5TSSkgYW5kIHAgaXMgTk9UIGZyZWVkLgorCisgIGlmIG4gaXMgZm9yIGZld2VyIGJ5dGVzIHRoYW4gYWxyZWFkeSBoZWxkIGJ5IHAsIHRoZSBuZXdseSB1bnVzZWQKKyAgc3BhY2UgaXMgbG9wcGVkIG9mZiBhbmQgZnJlZWQgaWYgcG9zc2libGUuICByZWFsbG9jIHdpdGggYSBzaXplCisgIGFyZ3VtZW50IG9mIHplcm8gKHJlKWFsbG9jYXRlcyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuCisKKyAgVGhlIG9sZCB1bml4IHJlYWxsb2MgY29udmVudGlvbiBvZiBhbGxvd2luZyB0aGUgbGFzdC1mcmVlJ2QgY2h1bmsKKyAgdG8gYmUgdXNlZCBhcyBhbiBhcmd1bWVudCB0byByZWFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQuCisqLworCit2b2lkKiBkbHJlYWxsb2Modm9pZCosIHNpemVfdCk7CisKKy8qCisgIG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBuKTsKKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgY2h1bmsgb2YgbiBieXRlcywgYWxpZ25lZAorICBpbiBhY2NvcmQgd2l0aCB0aGUgYWxpZ25tZW50IGFyZ3VtZW50LgorCisgIFRoZSBhbGlnbm1lbnQgYXJndW1lbnQgc2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLiBJZiB0aGUgYXJndW1lbnQgaXMKKyAgbm90IGEgcG93ZXIgb2YgdHdvLCB0aGUgbmVhcmVzdCBncmVhdGVyIHBvd2VyIGlzIHVzZWQuCisgIDgtYnl0ZSBhbGlnbm1lbnQgaXMgZ3VhcmFudGVlZCBieSBub3JtYWwgbWFsbG9jIGNhbGxzLCBzbyBkb24ndAorICBib3RoZXIgY2FsbGluZyBtZW1hbGlnbiB3aXRoIGFuIGFyZ3VtZW50IG9mIDggb3IgbGVzcy4KKworICBPdmVycmVsaWFuY2Ugb24gbWVtYWxpZ24gaXMgYSBzdXJlIHdheSB0byBmcmFnbWVudCBzcGFjZS4KKyovCit2b2lkKiBkbG1lbWFsaWduKHNpemVfdCwgc2l6ZV90KTsKKworLyoKKyAgdmFsbG9jKHNpemVfdCBuKTsKKyAgRXF1aXZhbGVudCB0byBtZW1hbGlnbihwYWdlc2l6ZSwgbiksIHdoZXJlIHBhZ2VzaXplIGlzIHRoZSBwYWdlCisgIHNpemUgb2YgdGhlIHN5c3RlbS4gSWYgdGhlIHBhZ2VzaXplIGlzIHVua25vd24sIDQwOTYgaXMgdXNlZC4KKyovCit2b2lkKiBkbHZhbGxvYyhzaXplX3QpOworCisvKgorICBtYWxsb3B0KGludCBwYXJhbWV0ZXJfbnVtYmVyLCBpbnQgcGFyYW1ldGVyX3ZhbHVlKQorICBTZXRzIHR1bmFibGUgcGFyYW1ldGVycyBUaGUgZm9ybWF0IGlzIHRvIHByb3ZpZGUgYQorICAocGFyYW1ldGVyLW51bWJlciwgcGFyYW1ldGVyLXZhbHVlKSBwYWlyLiAgbWFsbG9wdCB0aGVuIHNldHMgdGhlCisgIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHRvIHRoZSBhcmd1bWVudCB2YWx1ZSBpZiBpdCBjYW4gKGkuZS4sIHNvCisgIGxvbmcgYXMgdGhlIHZhbHVlIGlzIG1lYW5pbmdmdWwpLCBhbmQgcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgZWxzZQorICAwLiAgVG8gd29ya2Fyb3VuZCB0aGUgZmFjdCB0aGF0IG1hbGxvcHQgaXMgc3BlY2lmaWVkIHRvIHVzZSBpbnQsCisgIG5vdCBzaXplX3QgcGFyYW1ldGVycywgdGhlIHZhbHVlIC0xIGlzIHNwZWNpYWxseSB0cmVhdGVkIGFzIHRoZQorICBtYXhpbXVtIHVuc2lnbmVkIHNpemVfdCB2YWx1ZS4KKworICBTVklEL1hQRy9BTlNJIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbSBudW1iZXJzIGZvciBtYWxsb3B0LAorICBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZSBhcmUgdXNlIGluIHRoaXMgbWFsbG9jLAorICBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMgbWFsbG9jIGFsc28gc3VwcG9ydHMgb3RoZXIKKyAgb3B0aW9ucyBpbiBtYWxsb3B0LiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuICBCcmllZmx5LCBzdXBwb3J0ZWQKKyAgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93cyAobGlzdGVkIGRlZmF1bHRzIGFyZSBmb3IgInR5cGljYWwiCisgIGNvbmZpZ3VyYXRpb25zKS4KKworICBTeW1ib2wgICAgICAgICAgICBwYXJhbSAjICBkZWZhdWx0ICAgIGFsbG93ZWQgcGFyYW0gdmFsdWVzCisgIE1fVFJJTV9USFJFU0hPTEQgICAgIC0xICAgMioxMDI0KjEwMjQgICBhbnkgICAoLTEgZGlzYWJsZXMpCisgIE1fR1JBTlVMQVJJVFkgICAgICAgIC0yICAgICBwYWdlIHNpemUgICBhbnkgcG93ZXIgb2YgMiA+PSBwYWdlIHNpemUKKyAgTV9NTUFQX1RIUkVTSE9MRCAgICAgLTMgICAgICAyNTYqMTAyNCAgIGFueSAgIChvciAwIGlmIG5vIE1NQVAgc3VwcG9ydCkKKyovCitpbnQgZGxtYWxsb3B0KGludCwgaW50KTsKKworLyoKKyAgbWFsbG9jX2Zvb3RwcmludCgpOworICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLiAgVGhlIHRvdGFsCisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgYnkgbWFsbG9jLCByZWFsbG9jIGV0Yy4sIGlzIGxlc3MgdGhhbiB0aGlzCisgIHZhbHVlLiBVbmxpa2UgbWFsbGluZm8sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvbmx5IGEgcHJlY29tcHV0ZWQKKyAgcmVzdWx0LCBzbyBjYW4gYmUgY2FsbGVkIGZyZXF1ZW50bHkgdG8gbW9uaXRvciBtZW1vcnkgY29uc3VtcHRpb24uCisgIEV2ZW4gaWYgbG9ja3MgYXJlIG90aGVyd2lzZSBkZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSB0aGVtLAorICBzbyByZXN1bHRzIG1pZ2h0IG5vdCBiZSB1cCB0byBkYXRlLgorKi8KK3NpemVfdCBkbG1hbGxvY19mb290cHJpbnQodm9pZCk7CisKKy8qCisgIG1hbGxvY19tYXhfZm9vdHByaW50KCk7CisgIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4gVGhpcworICB2YWx1ZSB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBjdXJyZW50IGZvb3RwcmludCBpZiBkZWFsbG9jYXRlZCBzcGFjZQorICBoYXMgYmVlbiByZWNsYWltZWQgYnkgdGhlIHN5c3RlbS4gVGhlIHBlYWsgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZAorICBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywKKyAgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZCByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQKKyAgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4gIEV2ZW4gaWYgbG9ja3MgYXJlCisgIG90aGVyd2lzZSBkZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSB0aGVtLCBzbyByZXN1bHRzIG1pZ2h0CisgIG5vdCBiZSB1cCB0byBkYXRlLgorKi8KK3NpemVfdCBkbG1hbGxvY19tYXhfZm9vdHByaW50KHZvaWQpOworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBtYWxsaW5mbygpCisgIFJldHVybnMgKGJ5IGNvcHkpIGEgc3RydWN0IGNvbnRhaW5pbmcgdmFyaW91cyBzdW1tYXJ5IHN0YXRpc3RpY3M6CisKKyAgYXJlbmE6ICAgICBjdXJyZW50IHRvdGFsIG5vbi1tbWFwcGVkIGJ5dGVzIGFsbG9jYXRlZCBmcm9tIHN5c3RlbQorICBvcmRibGtzOiAgIHRoZSBudW1iZXIgb2YgZnJlZSBjaHVua3MKKyAgc21ibGtzOiAgICBhbHdheXMgemVyby4KKyAgaGJsa3M6ICAgICBjdXJyZW50IG51bWJlciBvZiBtbWFwcGVkIHJlZ2lvbnMKKyAgaGJsa2hkOiAgICB0b3RhbCBieXRlcyBoZWxkIGluIG1tYXBwZWQgcmVnaW9ucworICB1c21ibGtzOiAgIHRoZSBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZS4gVGhpcyB3aWxsIGJlIGdyZWF0ZXIKKwkJdGhhbiBjdXJyZW50IHRvdGFsIGlmIHRyaW1taW5nIGhhcyBvY2N1cnJlZC4KKyAgZnNtYmxrczogICBhbHdheXMgemVybworICB1b3JkYmxrczogIGN1cnJlbnQgdG90YWwgYWxsb2NhdGVkIHNwYWNlIChub3JtYWwgb3IgbW1hcHBlZCkKKyAgZm9yZGJsa3M6ICB0b3RhbCBmcmVlIHNwYWNlCisgIGtlZXBjb3N0OiAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgaWRlYWxseSBiZSByZWxlYXNlZAorCSAgICAgICBiYWNrIHRvIHN5c3RlbSB2aWEgbWFsbG9jX3RyaW0uICgiaWRlYWxseSIgbWVhbnMgdGhhdAorCSAgICAgICBpdCBpZ25vcmVzIHBhZ2UgcmVzdHJpY3Rpb25zIGV0Yy4pCisKKyAgQmVjYXVzZSB0aGVzZSBmaWVsZHMgYXJlIGludHMsIGJ1dCBpbnRlcm5hbCBib29ra2VlcGluZyBtYXkKKyAgYmUga2VwdCBhcyBsb25ncywgdGhlIHJlcG9ydGVkIHZhbHVlcyBtYXkgd3JhcCBhcm91bmQgemVybyBhbmQKKyAgdGh1cyBiZSBpbmFjY3VyYXRlLgorKi8KK3N0cnVjdCBtYWxsaW5mbyBkbG1hbGxpbmZvKHZvaWQpOworI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKKy8qCisgIGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSwgdm9pZCogY2h1bmtzW10pOworCisgIGluZGVwZW5kZW50X2NhbGxvYyBpcyBzaW1pbGFyIHRvIGNhbGxvYywgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEKKyAgc2luZ2xlIGNsZWFyZWQgc3BhY2UsIGl0IHJldHVybnMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gbl9lbGVtZW50cworICBpbmRlcGVuZGVudCBlbGVtZW50cyB0aGF0IGNhbiBob2xkIGNvbnRlbnRzIG9mIHNpemUgZWxlbV9zaXplLCBlYWNoCisgIG9mIHdoaWNoIHN0YXJ0cyBvdXQgY2xlYXJlZCwgYW5kIGNhbiBiZSBpbmRlcGVuZGVudGx5IGZyZWVkLAorICByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFkamFjZW50bHkKKyAgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGggbXVsdGlwbGUgY2FsbG9jcyBvcgorICBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eSBpbiBzb21lCisgIGFwcGxpY2F0aW9ucy4KKworICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsLCB3aGljaCBpcworICBwcm9iYWJseSB0aGUgbW9zdCB0eXBpY2FsIHVzYWdlKS4gSWYgaXQgaXMgbnVsbCwgdGhlIHJldHVybmVkIGFycmF5CisgIGlzIGl0c2VsZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBhbHNvIGJlIGZyZWVkIHdoZW4gaXQgaXMKKyAgbm8gbG9uZ2VyIG5lZWRlZC4gT3RoZXJ3aXNlLCB0aGUgY2h1bmtzIGFycmF5IG11c3QgYmUgb2YgYXQgbGVhc3QKKyAgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZSBwb2ludGVycyB0byB0aGUKKyAgY2h1bmtzLgorCisgIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jYWxsb2MgcmV0dXJucyB0aGlzIHBvaW50ZXIgYXJyYXksIG9yCisgIG51bGwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiAgSWYgbl9lbGVtZW50cyBpcyB6ZXJvIGFuZCAiY2h1bmtzIgorICBpcyBudWxsLCBpdCByZXR1cm5zIGEgY2h1bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVtZW50cworICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgorCisgIEVhY2ggZWxlbWVudCBtdXN0IGJlIGluZGl2aWR1YWxseSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlcgorICBuZWVkZWQuIElmIHlvdSdkIGxpa2UgdG8gaW5zdGVhZCBiZSBhYmxlIHRvIGZyZWUgYWxsIGF0IG9uY2UsIHlvdQorICBzaG91bGQgaW5zdGVhZCB1c2UgcmVndWxhciBjYWxsb2MgYW5kIGFzc2lnbiBwb2ludGVycyBpbnRvIHRoaXMKKyAgc3BhY2UgdG8gcmVwcmVzZW50IGVsZW1lbnRzLiAgKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdSBjYW5ub3QKKyAgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKKworICBpbmRlcGVuZGVudF9jYWxsb2Mgc2ltcGxpZmllcyBhbmQgc3BlZWRzIHVwIGltcGxlbWVudGF0aW9ucyBvZiBtYW55CisgIGtpbmRzIG9mIHBvb2xzLiAgSXQgbWF5IGFsc28gYmUgdXNlZnVsIHdoZW4gY29uc3RydWN0aW5nIGxhcmdlIGRhdGEKKyAgc3RydWN0dXJlcyB0aGF0IGluaXRpYWxseSBoYXZlIGEgZml4ZWQgbnVtYmVyIG9mIGZpeGVkLXNpemVkIG5vZGVzLAorICBidXQgdGhlIG51bWJlciBpcyBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLCBhbmQgc29tZSBvZiB0aGUgbm9kZXMKKyAgbWF5IGxhdGVyIG5lZWQgdG8gYmUgZnJlZWQuIEZvciBleGFtcGxlOgorCisgIHN0cnVjdCBOb2RlIHsgaW50IGl0ZW07IHN0cnVjdCBOb2RlKiBuZXh0OyB9OworCisgIHN0cnVjdCBOb2RlKiBidWlsZF9saXN0KCkgeworICAgIHN0cnVjdCBOb2RlKiogcG9vbDsKKyAgICBpbnQgbiA9IHJlYWRfbnVtYmVyX29mX25vZGVzX25lZWRlZCgpOworICAgIGlmIChuIDw9IDApIHJldHVybiAwOworICAgIHBvb2wgPSAoc3RydWN0IE5vZGUqKikoaW5kZXBlbmRlbnRfY2FsbG9jKG4sIHNpemVvZihzdHJ1Y3QgTm9kZSksIDApOworICAgIGlmIChwb29sID09IDApIGRpZSgpOworICAgIC8vIG9yZ2FuaXplIGludG8gYSBsaW5rZWQgbGlzdC4uLgorICAgIHN0cnVjdCBOb2RlKiBmaXJzdCA9IHBvb2xbMF07CisgICAgZm9yIChpID0gMDsgaSA8IG4tMTsgKytpKQorICAgICAgcG9vbFtpXS0+bmV4dCA9IHBvb2xbaSsxXTsKKyAgICBmcmVlKHBvb2wpOyAgICAgLy8gQ2FuIG5vdyBmcmVlIHRoZSBhcnJheSAob3Igbm90LCBpZiBpdCBpcyBuZWVkZWQgbGF0ZXIpCisgICAgcmV0dXJuIGZpcnN0OworICB9CisqLwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCwgc2l6ZV90LCB2b2lkKiopOworCisvKgorICBpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sIHZvaWQqIGNodW5rc1tdKTsKKworICBpbmRlcGVuZGVudF9jb21hbGxvYyBhbGxvY2F0ZXMsIGFsbCBhdCBvbmNlLCBhIHNldCBvZiBuX2VsZW1lbnRzCisgIGNodW5rcyB3aXRoIHNpemVzIGluZGljYXRlZCBpbiB0aGUgInNpemVzIiBhcnJheS4gICAgSXQgcmV0dXJucworICBhbiBhcnJheSBvZiBwb2ludGVycyB0byB0aGVzZSBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBjYW4gYmUKKyAgaW5kZXBlbmRlbnRseSBmcmVlZCwgcmVhbGxvYydlZCBldGMuIFRoZSBlbGVtZW50cyBhcmUgZ3VhcmFudGVlZCB0bworICBiZSBhZGphY2VudGx5IGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBvY2N1ciB3aXRoCisgIG11bHRpcGxlIGNhbGxvY3Mgb3IgbWFsbG9jcyksIHdoaWNoIG1heSBhbHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkKKyAgaW4gc29tZSBhcHBsaWNhdGlvbnMuCisKKyAgVGhlICJjaHVua3MiIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCkuIElmIGl0IGlzIG51bGwKKyAgdGhlIHJldHVybmVkIGFycmF5IGlzIGl0c2VsZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBhbHNvCisgIGJlIGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gT3RoZXJ3aXNlLCB0aGUgY2h1bmtzIGFycmF5CisgIG11c3QgYmUgb2YgYXQgbGVhc3Qgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZQorICBwb2ludGVycyB0byB0aGUgY2h1bmtzLgorCisgIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jb21hbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKKyAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kIGNodW5rcyBpcworICBudWxsLCBpdCByZXR1cm5zIGEgY2h1bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVtZW50cworICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgorCisgIEVhY2ggZWxlbWVudCBtdXN0IGJlIGluZGl2aWR1YWxseSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlcgorICBuZWVkZWQuIElmIHlvdSdkIGxpa2UgdG8gaW5zdGVhZCBiZSBhYmxlIHRvIGZyZWUgYWxsIGF0IG9uY2UsIHlvdQorICBzaG91bGQgaW5zdGVhZCB1c2UgYSBzaW5nbGUgcmVndWxhciBtYWxsb2MsIGFuZCBhc3NpZ24gcG9pbnRlcnMgYXQKKyAgcGFydGljdWxhciBvZmZzZXRzIGluIHRoZSBhZ2dyZWdhdGUgc3BhY2UuIChJbiB0aGlzIGNhc2UgdGhvdWdoLCB5b3UKKyAgY2Fubm90IGluZGVwZW5kZW50bHkgZnJlZSBlbGVtZW50cy4pCisKKyAgaW5kZXBlbmRlbnRfY29tYWxsYWMgZGlmZmVycyBmcm9tIGluZGVwZW5kZW50X2NhbGxvYyBpbiB0aGF0IGVhY2gKKyAgZWxlbWVudCBtYXkgaGF2ZSBhIGRpZmZlcmVudCBzaXplLCBhbmQgYWxzbyB0aGF0IGl0IGRvZXMgbm90CisgIGF1dG9tYXRpY2FsbHkgY2xlYXIgZWxlbWVudHMuCisKKyAgaW5kZXBlbmRlbnRfY29tYWxsb2MgY2FuIGJlIHVzZWQgdG8gc3BlZWQgdXAgYWxsb2NhdGlvbiBpbiBjYXNlcworICB3aGVyZSBzZXZlcmFsIHN0cnVjdHMgb3Igb2JqZWN0cyBtdXN0IGFsd2F5cyBiZSBhbGxvY2F0ZWQgYXQgdGhlCisgIHNhbWUgdGltZS4gIEZvciBleGFtcGxlOgorCisgIHN0cnVjdCBIZWFkIHsgLi4uIH0KKyAgc3RydWN0IEZvb3QgeyAuLi4gfQorCisgIHZvaWQgc2VuZF9tZXNzYWdlKGNoYXIqIG1zZykgeworICAgIGludCBtc2dsZW4gPSBzdHJsZW4obXNnKTsKKyAgICBzaXplX3Qgc2l6ZXNbM10gPSB7IHNpemVvZihzdHJ1Y3QgSGVhZCksIG1zZ2xlbiwgc2l6ZW9mKHN0cnVjdCBGb290KSB9OworICAgIHZvaWQqIGNodW5rc1szXTsKKyAgICBpZiAoaW5kZXBlbmRlbnRfY29tYWxsb2MoMywgc2l6ZXMsIGNodW5rcykgPT0gMCkKKyAgICAgIGRpZSgpOworICAgIHN0cnVjdCBIZWFkKiBoZWFkID0gKHN0cnVjdCBIZWFkKikoY2h1bmtzWzBdKTsKKyAgICBjaGFyKiAgICAgICAgYm9keSA9IChjaGFyKikoY2h1bmtzWzFdKTsKKyAgICBzdHJ1Y3QgRm9vdCogZm9vdCA9IChzdHJ1Y3QgRm9vdCopKGNodW5rc1syXSk7CisgICAgLy8gLi4uCisgIH0KKworICBJbiBnZW5lcmFsIHRob3VnaCwgaW5kZXBlbmRlbnRfY29tYWxsb2MgaXMgd29ydGggdXNpbmcgb25seSBmb3IKKyAgbGFyZ2VyIHZhbHVlcyBvZiBuX2VsZW1lbnRzLiBGb3Igc21hbGwgdmFsdWVzLCB5b3UgcHJvYmFibHkgd29uJ3QKKyAgZGV0ZWN0IGVub3VnaCBkaWZmZXJlbmNlIGZyb20gc2VyaWVzIG9mIG1hbGxvYyBjYWxscyB0byBib3RoZXIuCisKKyAgT3ZlcnVzZSBvZiBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gaW5jcmVhc2Ugb3ZlcmFsbCBtZW1vcnkgdXNhZ2UsCisgIHNpbmNlIGl0IGNhbm5vdCByZXVzZSBleGlzdGluZyBub25jb250aWd1b3VzIHNtYWxsIGNodW5rcyB0aGF0CisgIG1pZ2h0IGJlIGF2YWlsYWJsZSBmb3Igc29tZSBvZiB0aGUgZWxlbWVudHMuCisqLwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90LCBzaXplX3QqLCB2b2lkKiopOworCisKKy8qCisgIHB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIHZhbGxvYyhtaW5pbXVtLXBhZ2UtdGhhdC1ob2xkcyhuKSksIHRoYXQgaXMsCisgIHJvdW5kIHVwIG4gdG8gbmVhcmVzdCBwYWdlc2l6ZS4KKyAqLwordm9pZCogIGRscHZhbGxvYyhzaXplX3QpOworCisvKgorICBtYWxsb2NfdHJpbShzaXplX3QgcGFkKTsKKworICBJZiBwb3NzaWJsZSwgZ2l2ZXMgbWVtb3J5IGJhY2sgdG8gdGhlIHN5c3RlbSAodmlhIG5lZ2F0aXZlIGFyZ3VtZW50cworICB0byBzYnJrKSBpZiB0aGVyZSBpcyB1bnVzZWQgbWVtb3J5IGF0IHRoZSBgaGlnaCcgZW5kIG9mIHRoZSBtYWxsb2MKKyAgcG9vbCBvciBpbiB1bnVzZWQgTU1BUCBzZWdtZW50cy4gWW91IGNhbiBjYWxsIHRoaXMgYWZ0ZXIgZnJlZWluZworICBsYXJnZSBibG9ja3Mgb2YgbWVtb3J5IHRvIHBvdGVudGlhbGx5IHJlZHVjZSB0aGUgc3lzdGVtLWxldmVsIG1lbW9yeQorICByZXF1aXJlbWVudHMgb2YgYSBwcm9ncmFtLiBIb3dldmVyLCBpdCBjYW5ub3QgZ3VhcmFudGVlIHRvIHJlZHVjZQorICBtZW1vcnkuIFVuZGVyIHNvbWUgYWxsb2NhdGlvbiBwYXR0ZXJucywgc29tZSBsYXJnZSBmcmVlIGJsb2NrcyBvZgorICBtZW1vcnkgd2lsbCBiZSBsb2NrZWQgYmV0d2VlbiB0d28gdXNlZCBjaHVua3MsIHNvIHRoZXkgY2Fubm90IGJlCisgIGdpdmVuIGJhY2sgdG8gdGhlIHN5c3RlbS4KKworICBUaGUgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9jX3RyaW0gcmVwcmVzZW50cyB0aGUgYW1vdW50IG9mIGZyZWUKKyAgdHJhaWxpbmcgc3BhY2UgdG8gbGVhdmUgdW50cmltbWVkLiBJZiB0aGlzIGFyZ3VtZW50IGlzIHplcm8sIG9ubHkKKyAgdGhlIG1pbmltdW0gYW1vdW50IG9mIG1lbW9yeSB0byBtYWludGFpbiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMKKyAgd2lsbCBiZSBsZWZ0LiBOb24temVybyBhcmd1bWVudHMgY2FuIGJlIHN1cHBsaWVkIHRvIG1haW50YWluIGVub3VnaAorICB0cmFpbGluZyBzcGFjZSB0byBzZXJ2aWNlIGZ1dHVyZSBleHBlY3RlZCBhbGxvY2F0aW9ucyB3aXRob3V0IGhhdmluZworICB0byByZS1vYnRhaW4gbWVtb3J5IGZyb20gdGhlIHN5c3RlbS4KKworICBNYWxsb2NfdHJpbSByZXR1cm5zIDEgaWYgaXQgYWN0dWFsbHkgcmVsZWFzZWQgYW55IG1lbW9yeSwgZWxzZSAwLgorKi8KK2ludCAgZGxtYWxsb2NfdHJpbShzaXplX3QpOworCisvKgorICBtYWxsb2Nfc3RhdHMoKTsKKyAgUHJpbnRzIG9uIHN0ZGVyciB0aGUgYW1vdW50IG9mIHNwYWNlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbSAoYm90aAorICB2aWEgc2JyayBhbmQgbW1hcCksIHRoZSBtYXhpbXVtIGFtb3VudCAod2hpY2ggbWF5IGJlIG1vcmUgdGhhbgorICBjdXJyZW50IGlmIG1hbGxvY190cmltIGFuZC9vciBtdW5tYXAgZ290IGNhbGxlZCksIGFuZCB0aGUgY3VycmVudAorICBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIHZpYSBtYWxsb2MgKG9yIHJlYWxsb2MsIGV0YykgYnV0IG5vdCB5ZXQKKyAgZnJlZWQuIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkLCBub3QgdGhlCisgIG51bWJlciByZXF1ZXN0ZWQuIEl0IHdpbGwgYmUgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQKKyAgYmVjYXVzZSBvZiBhbGlnbm1lbnQgYW5kIGJvb2trZWVwaW5nIG92ZXJoZWFkLiBCZWNhdXNlIGl0IGluY2x1ZGVzCisgIGFsaWdubWVudCB3YXN0YWdlIGFzIGJlaW5nIGluIHVzZSwgdGhpcyBmaWd1cmUgbWF5IGJlIGdyZWF0ZXIgdGhhbgorICB6ZXJvIGV2ZW4gd2hlbiBubyB1c2VyLWxldmVsIGNodW5rcyBhcmUgYWxsb2NhdGVkLgorCisgIFRoZSByZXBvcnRlZCBjdXJyZW50IGFuZCBtYXhpbXVtIHN5c3RlbSBtZW1vcnkgY2FuIGJlIGluYWNjdXJhdGUgaWYKKyAgYSBwcm9ncmFtIG1ha2VzIG90aGVyIGNhbGxzIHRvIHN5c3RlbSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMKKyAgKG5vcm1hbGx5IHNicmspIG91dHNpZGUgb2YgbWFsbG9jLgorCisgIG1hbGxvY19zdGF0cyBwcmludHMgb25seSB0aGUgbW9zdCBjb21tb25seSBpbnRlcmVzdGluZyBzdGF0aXN0aWNzLgorICBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIG1hbGxpbmZvLgorKi8KK3ZvaWQgIGRsbWFsbG9jX3N0YXRzKHZvaWQpOworCisjZW5kaWYgLyogT05MWV9NU1BBQ0VTICovCisKKy8qCisgIG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKiBwKTsKKworICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgeW91IGNhbiBhY3R1YWxseSB1c2UgaW4KKyAgYW4gYWxsb2NhdGVkIGNodW5rLCB3aGljaCBtYXkgYmUgbW9yZSB0aGFuIHlvdSByZXF1ZXN0ZWQgKGFsdGhvdWdoCisgIG9mdGVuIG5vdCkgZHVlIHRvIGFsaWdubWVudCBhbmQgbWluaW11bSBzaXplIGNvbnN0cmFpbnRzLgorICBZb3UgY2FuIHVzZSB0aGlzIG1hbnkgYnl0ZXMgd2l0aG91dCB3b3JyeWluZyBhYm91dAorICBvdmVyd3JpdGluZyBvdGhlciBhbGxvY2F0ZWQgb2JqZWN0cy4gVGhpcyBpcyBub3QgYSBwYXJ0aWN1bGFybHkgZ3JlYXQKKyAgcHJvZ3JhbW1pbmcgcHJhY3RpY2UuIG1hbGxvY191c2FibGVfc2l6ZSBjYW4gYmUgbW9yZSB1c2VmdWwgaW4KKyAgZGVidWdnaW5nIGFuZCBhc3NlcnRpb25zLCBmb3IgZXhhbXBsZToKKworICBwID0gbWFsbG9jKG4pOworICBhc3NlcnQobWFsbG9jX3VzYWJsZV9zaXplKHApID49IDI1Nik7CisqLworc2l6ZV90IGRsbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqKTsKKworCisjaWYgTVNQQUNFUworCisvKgorICBtc3BhY2UgaXMgYW4gb3BhcXVlIHR5cGUgcmVwcmVzZW50aW5nIGFuIGluZGVwZW5kZW50CisgIHJlZ2lvbiBvZiBzcGFjZSB0aGF0IHN1cHBvcnRzIG1zcGFjZV9tYWxsb2MsIGV0Yy4KKyovCit0eXBlZGVmIHZvaWQqIG1zcGFjZTsKKworLyoKKyAgY3JlYXRlX21zcGFjZSBjcmVhdGVzIGFuZCByZXR1cm5zIGEgbmV3IGluZGVwZW5kZW50IHNwYWNlIHdpdGggdGhlCisgIGdpdmVuIGluaXRpYWwgY2FwYWNpdHksIG9yLCBpZiAwLCB0aGUgZGVmYXVsdCBncmFudWxhcml0eSBzaXplLiAgSXQKKyAgcmV0dXJucyBudWxsIGlmIHRoZXJlIGlzIG5vIHN5c3RlbSBtZW1vcnkgYXZhaWxhYmxlIHRvIGNyZWF0ZSB0aGUKKyAgc3BhY2UuICBJZiBhcmd1bWVudCBsb2NrZWQgaXMgbm9uLXplcm8sIHRoZSBzcGFjZSB1c2VzIGEgc2VwYXJhdGUKKyAgbG9jayB0byBjb250cm9sIGFjY2Vzcy4gVGhlIGNhcGFjaXR5IG9mIHRoZSBzcGFjZSB3aWxsIGdyb3cKKyAgZHluYW1pY2FsbHkgYXMgbmVlZGVkIHRvIHNlcnZpY2UgbXNwYWNlX21hbGxvYyByZXF1ZXN0cy4gIFlvdSBjYW4KKyAgY29udHJvbCB0aGUgc2l6ZXMgb2YgaW5jcmVtZW50YWwgaW5jcmVhc2VzIG9mIHRoaXMgc3BhY2UgYnkKKyAgY29tcGlsaW5nIHdpdGggYSBkaWZmZXJlbnQgREVGQVVMVF9HUkFOVUxBUklUWSBvciBkeW5hbWljYWxseQorICBzZXR0aW5nIHdpdGggbWFsbG9wdChNX0dSQU5VTEFSSVRZLCB2YWx1ZSkuCisqLworbXNwYWNlIGNyZWF0ZV9tc3BhY2Uoc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKTsKKworLyoKKyAgZGVzdHJveV9tc3BhY2UgZGVzdHJveXMgdGhlIGdpdmVuIHNwYWNlLCBhbmQgYXR0ZW1wdHMgdG8gcmV0dXJuIGFsbAorICBvZiBpdHMgbWVtb3J5IGJhY2sgdG8gdGhlIHN5c3RlbSwgcmV0dXJuaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YKKyAgYnl0ZXMgZnJlZWQuIEFmdGVyIGRlc3RydWN0aW9uLCB0aGUgcmVzdWx0cyBvZiBhY2Nlc3MgdG8gYWxsIG1lbW9yeQorICB1c2VkIGJ5IHRoZSBzcGFjZSBiZWNvbWUgdW5kZWZpbmVkLgorKi8KK3NpemVfdCBkZXN0cm95X21zcGFjZShtc3BhY2UgbXNwKTsKKworLyoKKyAgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UgdXNlcyB0aGUgbWVtb3J5IHN1cHBsaWVkIGFzIHRoZSBpbml0aWFsIGJhc2UKKyAgb2YgYSBuZXcgbXNwYWNlLiBQYXJ0IChsZXNzIHRoYW4gMTI4KnNpemVvZihzaXplX3QpIGJ5dGVzKSBvZiB0aGlzCisgIHNwYWNlIGlzIHVzZWQgZm9yIGJvb2trZWVwaW5nLCBzbyB0aGUgY2FwYWNpdHkgbXVzdCBiZSBhdCBsZWFzdCB0aGlzCisgIGxhcmdlLiAoT3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQuKSBXaGVuIHRoaXMgaW5pdGlhbCBzcGFjZSBpcworICBleGhhdXN0ZWQsIGFkZGl0aW9uYWwgbWVtb3J5IHdpbGwgYmUgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLgorICBEZXN0cm95aW5nIHRoaXMgc3BhY2Ugd2lsbCBkZWFsbG9jYXRlIGFsbCBhZGRpdGlvbmFsbHkgYWxsb2NhdGVkCisgIHNwYWNlIChpZiBwb3NzaWJsZSkgYnV0IG5vdCB0aGUgaW5pdGlhbCBiYXNlLgorKi8KK21zcGFjZSBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpOworCisvKgorICBtc3BhY2VfbW1hcF9sYXJnZV9jaHVua3MgY29udHJvbHMgd2hldGhlciByZXF1ZXN0cyBmb3IgbGFyZ2UgY2h1bmtzCisgIGFyZSBhbGxvY2F0ZWQgaW4gdGhlaXIgb3duIG1tYXBwZWQgcmVnaW9ucywgc2VwYXJhdGUgZnJvbSBvdGhlcnMgaW4KKyAgdGhpcyBtc3BhY2UuIEJ5IGRlZmF1bHQgdGhpcyBpcyBlbmFibGVkLCB3aGljaCByZWR1Y2VzCisgIGZyYWdtZW50YXRpb24uIEhvd2V2ZXIsIHN1Y2ggY2h1bmtzIGFyZSBub3QgbmVjZXNzYXJpbHkgcmVsZWFzZWQgdG8KKyAgdGhlIHN5c3RlbSB1cG9uIGRlc3Ryb3lfbXNwYWNlLiAgRGlzYWJsaW5nIGJ5IHNldHRpbmcgdG8gZmFsc2UgbWF5CisgIGluY3JlYXNlIGZyYWdtZW50YXRpb24sIGJ1dCBhdm9pZHMgbGVha2FnZSB3aGVuIHJlbHlpbmcgb24KKyAgZGVzdHJveV9tc3BhY2UgdG8gcmVsZWFzZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCB1c2luZyB0aGlzIHNwYWNlLgorKi8KK2ludCBtc3BhY2VfbW1hcF9sYXJnZV9jaHVua3MobXNwYWNlIG1zcCwgaW50IGVuYWJsZSk7CisKKworLyoKKyAgbXNwYWNlX21hbGxvYyBiZWhhdmVzIGFzIG1hbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfZnJlZSBiZWhhdmVzIGFzIGZyZWUsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX2ZyZWUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZC4KKyAgZnJlZSBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX2ZyZWUgYmVjYXVzZSBmcmVlZCBjaHVua3MgZnJvbQorICBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcgc3BhY2VzLgorKi8KK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKTsKKworLyoKKyAgbXNwYWNlX3JlYWxsb2MgYmVoYXZlcyBhcyByZWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKworICBJZiBjb21waWxlZCB3aXRoIEZPT1RFUlM9PTEsIG1zcGFjZV9yZWFsbG9jIGlzIG5vdCBhY3R1YWxseQorICBuZWVkZWQuICByZWFsbG9jIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfcmVhbGxvYyBiZWNhdXNlCisgIHJlYWxsb2NlZCBjaHVua3MgZnJvbSBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcKKyAgc3BhY2VzLgorKi8KK3ZvaWQqIG1zcGFjZV9yZWFsbG9jKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSwgc2l6ZV90IG5ld3NpemUpOworCisvKgorICBtc3BhY2VfY2FsbG9jIGJlaGF2ZXMgYXMgY2FsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKTsKKworLyoKKyAgbXNwYWNlX21lbWFsaWduIGJlaGF2ZXMgYXMgbWVtYWxpZ24sIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9tZW1hbGlnbihtc3BhY2UgbXNwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY2FsbG9jLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKwkJCQkgc2l6ZV90IGVsZW1fc2l6ZSwgdm9pZCogY2h1bmtzW10pOworCisvKgorICBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MgYmVoYXZlcyBhcyBpbmRlcGVuZGVudF9jb21hbGxvYywgYnV0CisgIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKwkJCQkgICBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOworCisvKgorICBtc3BhY2VfZm9vdHByaW50KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlCisgIHN5c3RlbSBmb3IgdGhpcyBzcGFjZS4KKyovCitzaXplX3QgbXNwYWNlX2Zvb3RwcmludChtc3BhY2UgbXNwKTsKKworLyoKKyAgbXNwYWNlX21heF9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBwZWFrIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZQorICBzeXN0ZW0gZm9yIHRoaXMgc3BhY2UuCisqLworc2l6ZV90IG1zcGFjZV9tYXhfZm9vdHByaW50KG1zcGFjZSBtc3ApOworCisKKyNpZiAhTk9fTUFMTElORk8KKy8qCisgIG1zcGFjZV9tYWxsaW5mbyBiZWhhdmVzIGFzIG1hbGxpbmZvLCBidXQgcmVwb3J0cyBwcm9wZXJ0aWVzIG9mCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCitzdHJ1Y3QgbWFsbGluZm8gbXNwYWNlX21hbGxpbmZvKG1zcGFjZSBtc3ApOworI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKKy8qCisgIG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKiBwKSBiZWhhdmVzIHRoZSBzYW1lIGFzIG1hbGxvY191c2FibGVfc2l6ZTsKKyovCisgIHNpemVfdCBtc3BhY2VfdXNhYmxlX3NpemUodm9pZCogbWVtKTsKKworLyoKKyAgbXNwYWNlX21hbGxvY19zdGF0cyBiZWhhdmVzIGFzIG1hbGxvY19zdGF0cywgYnV0IHJlcG9ydHMKKyAgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfdHJpbSBiZWhhdmVzIGFzIG1hbGxvY190cmltLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCitpbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCk7CisKKy8qCisgIEFuIGFsaWFzIGZvciBtYWxsb3B0LgorKi8KK2ludCBtc3BhY2VfbWFsbG9wdChpbnQsIGludCk7CisKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsgIC8qIGVuZCBvZiBleHRlcm4gIkMiICovCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyoKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFRvIG1ha2UgYSBmdWxseSBjdXN0b21pemFibGUgbWFsbG9jLmggaGVhZGVyIGZpbGUsIGN1dCBldmVyeXRoaW5nCisgIGFib3ZlIHRoaXMgbGluZSwgcHV0IGludG8gZmlsZSBtYWxsb2MuaCwgZWRpdCB0byBzdWl0LCBhbmQgI2luY2x1ZGUgaXQKKyAgb24gdGhlIG5leHQgbGluZSwgYXMgd2VsbCBhcyBpbiBwcm9ncmFtcyB0aGF0IHVzZSB0aGlzIG1hbGxvYy4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCisvKiAjaW5jbHVkZSAibWFsbG9jLmgiICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGludGVybmFsICNpbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBXSU4zMgorI2lmbmRlZiBfX0dOVUNfXworI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDE0NiApIC8qIG5vICJ1bnNpZ25lZCIgd2FybmluZ3MgKi8KKyNlbmRpZgorI2VuZGlmIC8qIFdJTjMyICovCisKKyNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAvKiBmb3IgcHJpbnRpbmcgaW4gbWFsbG9jX3N0YXRzICovCisKKyNpZm5kZWYgTEFDS1NfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+ICAgICAgIC8qIGZvciBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gKi8KKyNlbmRpZiAvKiBMQUNLU19FUlJOT19IICovCisjaWYgRk9PVEVSUworI2luY2x1ZGUgPHRpbWUuaD4gICAgICAgIC8qIGZvciBtYWdpYyBpbml0aWFsaXphdGlvbiAqLworI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyNpZm5kZWYgTEFDS1NfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4gICAgICAvKiBmb3IgYWJvcnQoKSAqLworI2VuZGlmIC8qIExBQ0tTX1NURExJQl9IICovCisjaWZkZWYgREVCVUcKKyNpZiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRQorI2RlZmluZSBhc3NlcnQoeCkgaWYoISh4KSkgQUJPUlQKKyNlbHNlIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KKyNlbHNlICAvKiBERUJVRyAqLworI2lmbmRlZiBhc3NlcnQKKyNkZWZpbmUgYXNzZXJ0KHgpCisjZW5kaWYKKyNkZWZpbmUgREVCVUcgMAorI2VuZGlmIC8qIERFQlVHICovCisjaWZuZGVmIExBQ0tTX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgLyogZm9yIG1lbXNldCBldGMgKi8KKyNlbmRpZiAgLyogTEFDS1NfU1RSSU5HX0ggKi8KKyNpZiBVU0VfQlVJTFRJTl9GRlMKKyNpZm5kZWYgTEFDS1NfU1RSSU5HU19ICisjaW5jbHVkZSA8c3RyaW5ncy5oPiAgICAgLyogZm9yIGZmcyAqLworI2VuZGlmIC8qIExBQ0tTX1NUUklOR1NfSCAqLworI2VuZGlmIC8qIFVTRV9CVUlMVElOX0ZGUyAqLworI2lmIEhBVkVfTU1BUAorI2lmbmRlZiBMQUNLU19TWVNfTU1BTl9ICisjaW5jbHVkZSA8c3lzL21tYW4uaD4gICAgLyogZm9yIG1tYXAgKi8KKyNlbmRpZiAvKiBMQUNLU19TWVNfTU1BTl9IICovCisjaWZuZGVmIExBQ0tTX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmIC8qIExBQ0tTX0ZDTlRMX0ggKi8KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKyNpZm5kZWYgTEFDS1NfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4gICAgIC8qIGZvciBzYnJrLCBzeXNjb25mICovCisjZWxzZSAvKiBMQUNLU19VTklTVERfSCAqLworI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX09wZW5CU0RfXykgJiYgIWRlZmluZWQoX19OZXRCU0RfXykKK2V4dGVybiB2b2lkKiAgICAgc2JyayhwdHJkaWZmX3QpOworI2VuZGlmIC8qIEZyZWVCU0QgZXRjICovCisjZW5kaWYgLyogTEFDS1NfVU5JU1REX0ggKi8KKworLyogRGVjbGFyYXRpb25zIGZvciBsb2NraW5nICovCisjaWYgVVNFX0xPQ0tTCisjaWZuZGVmIFdJTjMyCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2lmIGRlZmluZWQgKF9fU1ZSNCkgJiYgZGVmaW5lZCAoX19zdW4pICAvKiBzb2xhcmlzICovCisjaW5jbHVkZSA8dGhyZWFkLmg+CisjZW5kaWYgLyogc29sYXJpcyAqLworI2Vsc2UKKyNpZm5kZWYgX01fQU1ENjQKKy8qIFRoZXNlIGFyZSBhbHJlYWR5IGRlZmluZWQgb24gQU1ENjQgYnVpbGRzICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjaWZuZGVmIF9fTUlOR1czMl9fCitMT05HIF9fY2RlY2wgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKExPTkcgdm9sYXRpbGUgKkRlc3QsIExPTkcgRXhjaGFuZ2UsIExPTkcgQ29tcCk7CitMT05HIF9fY2RlY2wgX0ludGVybG9ja2VkRXhjaGFuZ2UoTE9ORyB2b2xhdGlsZSAqVGFyZ2V0LCBMT05HIFZhbHVlKTsKKyNlbmRpZgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKyNlbmRpZiAvKiBfTV9BTUQ2NCAqLworI2lmbmRlZiBfX01JTkdXMzJfXworI3ByYWdtYSBpbnRyaW5zaWMgKF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSkKKyNwcmFnbWEgaW50cmluc2ljIChfSW50ZXJsb2NrZWRFeGNoYW5nZSkKKyNlbHNlCisgIC8qIC0tWyBzdGFydCBHQ0MgY29tcGF0aWJpbGl0eSBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiBDb21wYXRpYmlsaXR5IDxpbnRyaW5feDg2Lmg+IGhlYWRlciBmb3IgR0NDIC0tIEdDQyBlcXVpdmFsZW50cyBvZiBpbnRyaW5zaWMKKyAgICogTWljcm9zb2Z0IFZpc3VhbCBDKysgZnVuY3Rpb25zLiBPcmlnaW5hbGx5IGRldmVsb3BlZCBmb3IgdGhlIFJlYWN0T1MKKyAgICogKDxodHRwOi8vd3d3LnJlYWN0b3Mub3JnLz4pIGFuZCBUaW55S3JubCAoPGh0dHA6Ly93d3cudGlueWtybmwub3JnLz4pCisgICAqIHByb2plY3RzLgorICAgKgorICAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgS0pLOjpIeXBlcmlvbiA8aGFja2J1bm55QHJlYWN0b3MuY29tPgorICAgKgorICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICAgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgICAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICAgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAgICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAgICoKKyAgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAgICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgICAqCisgICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgICAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICAgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAgICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICAgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICAgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgICovCisKKyAgLyoqKiBBdG9taWMgb3BlcmF0aW9ucyAqKiovCisgICNpZiAoX19HTlVDX18gKiAxMDAwMCArIF9fR05VQ19NSU5PUl9fICogMTAwICsgX19HTlVDX1BBVENITEVWRUxfXykgPiA0MDEwMAorICAgICNkZWZpbmUgX1JlYWRXcml0ZUJhcnJpZXIoKSBfX3N5bmNfc3luY2hyb25pemUoKQorICAjZWxzZQorICAgIHN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBsb25nIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCh2b2xhdGlsZSBsb25nICogY29uc3QgVGFyZ2V0LCBjb25zdCBsb25nIFZhbHVlKQorICAgIHsKKyAgICAgIGxvbmcgcmVzOworICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGclejAgJTIsICUwIiA6ICI9ZyIgKCooVGFyZ2V0KSksICI9ciIgKHJlcykgOiAiMSIgKFZhbHVlKSk7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfTWVtb3J5QmFycmllcih2b2lkKQorICAgIHsKKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIiIDogOiA6ICJtZW1vcnkiKTsKKyAgICB9CisgICAgI2RlZmluZSBfUmVhZFdyaXRlQmFycmllcigpIF9NZW1vcnlCYXJyaWVyKCkKKyAgI2VuZGlmCisgIC8qIEJVR0JVRzogR0NDIG9ubHkgc3VwcG9ydHMgZnVsbCBiYXJyaWVycyAqLworICBzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgbG9uZyBfSW50ZXJsb2NrZWRFeGNoYW5nZSh2b2xhdGlsZSBsb25nICogY29uc3QgVGFyZ2V0LCBjb25zdCBsb25nIFZhbHVlKQorICB7CisgICAgLyogTk9URTogX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0IHdvdWxkIGJlIGFuIGFjcXVpcmUgYmFycmllciwgc28gd2UgZm9yY2UgYSBmdWxsIGJhcnJpZXIgKi8KKyAgICBfUmVhZFdyaXRlQmFycmllcigpOworICAgIHJldHVybiBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXQoVGFyZ2V0LCBWYWx1ZSk7CisgIH0KKyAgLyogLS1bIGVuZCBHQ0MgY29tcGF0aWJpbGl0eSBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2VuZGlmCisjZGVmaW5lIGludGVybG9ja2VkY29tcGFyZWV4Y2hhbmdlIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZQorI2RlZmluZSBpbnRlcmxvY2tlZGV4Y2hhbmdlIF9JbnRlcmxvY2tlZEV4Y2hhbmdlCisjZW5kaWYgLyogV2luMzIgKi8KKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKworLyogRGVjbGFyYXRpb25zIGZvciBiaXQgc2Nhbm5pbmcgb24gd2luMzIgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMAorI2lmbmRlZiBCaXRTY2FuRm9yd2FyZAkvKiBUcnkgdG8gYXZvaWQgcHVsbGluZyBpbiBXaW5OVC5oICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCit1bnNpZ25lZCBjaGFyIF9CaXRTY2FuRm9yd2FyZCh1bnNpZ25lZCBsb25nICppbmRleCwgdW5zaWduZWQgbG9uZyBtYXNrKTsKK3Vuc2lnbmVkIGNoYXIgX0JpdFNjYW5SZXZlcnNlKHVuc2lnbmVkIGxvbmcgKmluZGV4LCB1bnNpZ25lZCBsb25nIG1hc2spOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBCaXRTY2FuRm9yd2FyZCBfQml0U2NhbkZvcndhcmQKKyNkZWZpbmUgQml0U2NhblJldmVyc2UgX0JpdFNjYW5SZXZlcnNlCisjcHJhZ21hIGludHJpbnNpYyhfQml0U2NhbkZvcndhcmQpCisjcHJhZ21hIGludHJpbnNpYyhfQml0U2NhblJldmVyc2UpCisjZW5kaWYgLyogQml0U2NhbkZvcndhcmQgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMCAqLworCisjaWZuZGVmIFdJTjMyCisjaWZuZGVmIG1hbGxvY19nZXRwYWdlc2l6ZQorIyAgaWZkZWYgX1NDX1BBR0VTSVpFICAgICAgICAgLyogc29tZSBTVlI0IHN5c3RlbXMgb21pdCBhbiB1bmRlcnNjb3JlICovCisjICAgIGlmbmRlZiBfU0NfUEFHRV9TSVpFCisjICAgICAgZGVmaW5lIF9TQ19QQUdFX1NJWkUgX1NDX1BBR0VTSVpFCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZkZWYgX1NDX1BBR0VfU0laRQorIyAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIHN5c2NvbmYoX1NDX1BBR0VfU0laRSkKKyMgIGVsc2UKKyMgICAgaWYgZGVmaW5lZChCU0QpIHx8IGRlZmluZWQoREdVWCkgfHwgZGVmaW5lZChIQVZFX0dFVFBBR0VTSVpFKQorICAgICAgIGV4dGVybiBzaXplX3QgZ2V0cGFnZXNpemUoKTsKKyMgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFdJTjMyIC8qIHVzZSBzdXBwbGllZCBlbXVsYXRpb24gb2YgZ2V0cGFnZXNpemUgKi8KKyMgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUoKQorIyAgICAgIGVsc2UKKyMgICAgICAgIGlmbmRlZiBMQUNLU19TWVNfUEFSQU1fSAorIyAgICAgICAgICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgICAgICAgIGVuZGlmCisjICAgICAgICBpZmRlZiBFWEVDX1BBR0VTSVpFCisjICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgRVhFQ19QQUdFU0laRQorIyAgICAgICAgZWxzZQorIyAgICAgICAgICBpZmRlZiBOQlBHCisjICAgICAgICAgICAgaWZuZGVmIENMU0laRQorIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBOQlBHCisjICAgICAgICAgICAgZWxzZQorIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoTkJQRyAqIENMU0laRSkKKyMgICAgICAgICAgICBlbmRpZgorIyAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgaWZkZWYgTkJQQworIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBOQlBDCisjICAgICAgICAgICAgZWxzZQorIyAgICAgICAgICAgICAgaWZkZWYgUEFHRVNJWkUKKyMgICAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBQQUdFU0laRQorIyAgICAgICAgICAgICAgZWxzZSAvKiBqdXN0IGd1ZXNzICovCisjICAgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKChzaXplX3QpNDA5NlUpCisjICAgICAgICAgICAgICBlbmRpZgorIyAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgIGVuZGlmCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gc2l6ZV90IGFuZCBhbGlnbm1lbnQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUaGUgYnl0ZSBhbmQgYml0IHNpemUgb2YgYSBzaXplX3QgKi8KKyNkZWZpbmUgU0laRV9UX1NJWkUgICAgICAgICAoc2l6ZW9mKHNpemVfdCkpCisjZGVmaW5lIFNJWkVfVF9CSVRTSVpFICAgICAgKHNpemVvZihzaXplX3QpIDw8IDMpCisKKy8qIFNvbWUgY29uc3RhbnRzIGNvZXJjZWQgdG8gc2l6ZV90ICovCisvKiBBbm5veWluZyBidXQgbmVjZXNzYXJ5IHRvIGF2b2lkIGVycm9ycyBvbiBzb21lIHBsYXRmb3JtcyAqLworI2RlZmluZSBTSVpFX1RfWkVSTyAgICAgICAgICgoc2l6ZV90KTApCisjZGVmaW5lIFNJWkVfVF9PTkUgICAgICAgICAgKChzaXplX3QpMSkKKyNkZWZpbmUgU0laRV9UX1RXTyAgICAgICAgICAoKHNpemVfdCkyKQorI2RlZmluZSBTSVpFX1RfRk9VUiAgICAgICAgICgoc2l6ZV90KTQpCisjZGVmaW5lIFRXT19TSVpFX1RfU0laRVMgICAgKFNJWkVfVF9TSVpFPDwxKQorI2RlZmluZSBGT1VSX1NJWkVfVF9TSVpFUyAgIChTSVpFX1RfU0laRTw8MikKKyNkZWZpbmUgU0lYX1NJWkVfVF9TSVpFUyAgICAoRk9VUl9TSVpFX1RfU0laRVMrVFdPX1NJWkVfVF9TSVpFUykKKyNkZWZpbmUgSEFMRl9NQVhfU0laRV9UICAgICAoTUFYX1NJWkVfVCAvIDJVKQorCisvKiBUaGUgYml0IG1hc2sgdmFsdWUgY29ycmVzcG9uZGluZyB0byBNQUxMT0NfQUxJR05NRU5UICovCisjZGVmaW5lIENIVU5LX0FMSUdOX01BU0sgICAgKE1BTExPQ19BTElHTk1FTlQgLSBTSVpFX1RfT05FKQorCisvKiBUcnVlIGlmIGFkZHJlc3MgYSBoYXMgYWNjZXB0YWJsZSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgaXNfYWxpZ25lZChBKSAgICAgICAoKChzaXplX3QpKChBKSkgJiAoQ0hVTktfQUxJR05fTUFTSykpID09IDApCisKKy8qIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gb2Zmc2V0IGFuIGFkZHJlc3MgdG8gYWxpZ24gaXQgKi8KKyNkZWZpbmUgYWxpZ25fb2Zmc2V0KEEpXAorICgoKChzaXplX3QpKEEpICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk/IDAgOlwKKyAgKChNQUxMT0NfQUxJR05NRU5UIC0gKChzaXplX3QpKEEpICYgQ0hVTktfQUxJR05fTUFTSykpICYgQ0hVTktfQUxJR05fTUFTSykpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1NQVAgcHJlbGltaW5hcmllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgICBJZiBIQVZFX01PUkVDT1JFIG9yIEhBVkVfTU1BUCBhcmUgZmFsc2UsIHdlIGp1c3QgZGVmaW5lIGNhbGxzIGFuZAorICAgY2hlY2tzIHRvIGZhaWwgc28gY29tcGlsZXIgb3B0aW1pemVyIGNhbiBkZWxldGUgY29kZSByYXRoZXIgdGhhbgorICAgdXNpbmcgc28gbWFueSAiI2lmInMuCisqLworCisKKy8qIE1PUkVDT1JFIGFuZCBNTUFQIG11c3QgcmV0dXJuIE1GQUlMIG9uIGZhaWx1cmUgKi8KKyNkZWZpbmUgTUZBSUwgICAgICAgICAgICAgICAgKCh2b2lkKikoTUFYX1NJWkVfVCkpCisjZGVmaW5lIENNRkFJTCAgICAgICAgICAgICAgICgoY2hhciopKE1GQUlMKSkgLyogZGVmaW5lZCBmb3IgY29udmVuaWVuY2UgKi8KKworI2lmIEhBVkVfTU1BUAorCisjaWZuZGVmIFdJTjMyCisjZGVmaW5lIE1VTk1BUF9ERUZBVUxUKGEsIHMpICBtdW5tYXAoKGEpLCAocykpCisjZGVmaW5lIE1NQVBfUFJPVCAgICAgICAgICAgIChQUk9UX1JFQUR8UFJPVF9XUklURSkKKyNpZiAhZGVmaW5lZChNQVBfQU5PTllNT1VTKSAmJiBkZWZpbmVkKE1BUF9BTk9OKQorI2RlZmluZSBNQVBfQU5PTllNT1VTICAgICAgICBNQVBfQU5PTgorI2VuZGlmIC8qIE1BUF9BTk9OICovCisjaWZkZWYgTUFQX0FOT05ZTU9VUworI2RlZmluZSBNTUFQX0ZMQUdTICAgICAgICAgICAoTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUykKKyNkZWZpbmUgTU1BUF9ERUZBVUxUKHMpICAgICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIC0xLCAwKQorI2Vsc2UgLyogTUFQX0FOT05ZTU9VUyAqLworLyoKKyAgIE5lYXJseSBhbGwgdmVyc2lvbnMgb2YgbW1hcCBzdXBwb3J0IE1BUF9BTk9OWU1PVVMsIHNvIHRoZSBmb2xsb3dpbmcKKyAgIGlzIHVubGlrZWx5IHRvIGJlIG5lZWRlZCwgYnV0IGlzIHN1cHBsaWVkIGp1c3QgaW4gY2FzZS4KKyovCisjZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURSkKK3N0YXRpYyBpbnQgZGV2X3plcm9fZmQgPSAtMTsgLyogQ2FjaGVkIGZpbGUgZGVzY3JpcHRvciBmb3IgL2Rldi96ZXJvLiAqLworI2RlZmluZSBNTUFQX0RFRkFVTFQocykgKChkZXZfemVyb19mZCA8IDApID8gXAorCSAgIChkZXZfemVyb19mZCA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRXUiksIFwKKwkgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgZGV2X3plcm9fZmQsIDApKSA6IFwKKwkgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgZGV2X3plcm9fZmQsIDApKQorI2VuZGlmIC8qIE1BUF9BTk9OWU1PVVMgKi8KKworI2RlZmluZSBESVJFQ1RfTU1BUF9ERUZBVUxUKHMpIE1NQVBfREVGQVVMVChzKQorCisjZWxzZSAvKiBXSU4zMiAqLworCisvKiBXaW4zMiBNTUFQIHZpYSBWaXJ0dWFsQWxsb2MgKi8KK3N0YXRpYyBGT1JDRUlOTElORSB2b2lkKiB3aW4zMm1tYXAoc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFfE1FTV9DT01NSVQsIFBBR0VfUkVBRFdSSVRFKTsKKyAgcmV0dXJuIChwdHIgIT0gMCk/IHB0cjogTUZBSUw7Cit9CisKKy8qIEZvciBkaXJlY3QgTU1BUCwgdXNlIE1FTV9UT1BfRE9XTiB0byBtaW5pbWl6ZSBpbnRlcmZlcmVuY2UgKi8KK3N0YXRpYyBGT1JDRUlOTElORSB2b2lkKiB3aW4zMmRpcmVjdF9tbWFwKHNpemVfdCBzaXplKSB7CisgIHZvaWQqIHB0ciA9IFZpcnR1YWxBbGxvYygwLCBzaXplLCBNRU1fUkVTRVJWRXxNRU1fQ09NTUlUfE1FTV9UT1BfRE9XTiwKKwkJCSAgIFBBR0VfUkVBRFdSSVRFKTsKKyAgcmV0dXJuIChwdHIgIT0gMCk/IHB0cjogTUZBSUw7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgcmVsZWFzaW5nIGNvYWxlc2VkIHNlZ21lbnRzICovCitzdGF0aWMgRk9SQ0VJTkxJTkUgaW50IHdpbjMybXVubWFwKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpIHsKKyAgTUVNT1JZX0JBU0lDX0lORk9STUFUSU9OIG1pbmZvOworICBjaGFyKiBjcHRyID0gKGNoYXIqKXB0cjsKKyAgd2hpbGUgKHNpemUpIHsKKyAgICBpZiAoVmlydHVhbFF1ZXJ5KGNwdHIsICZtaW5mbywgc2l6ZW9mKG1pbmZvKSkgPT0gMCkKKyAgICAgIHJldHVybiAtMTsKKyAgICBpZiAobWluZm8uQmFzZUFkZHJlc3MgIT0gY3B0ciB8fCBtaW5mby5BbGxvY2F0aW9uQmFzZSAhPSBjcHRyIHx8CisJbWluZm8uU3RhdGUgIT0gTUVNX0NPTU1JVCB8fCBtaW5mby5SZWdpb25TaXplID4gc2l6ZSkKKyAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoVmlydHVhbEZyZWUoY3B0ciwgMCwgTUVNX1JFTEVBU0UpID09IDApCisgICAgICByZXR1cm4gLTE7CisgICAgY3B0ciArPSBtaW5mby5SZWdpb25TaXplOworICAgIHNpemUgLT0gbWluZm8uUmVnaW9uU2l6ZTsKKyAgfQorICByZXR1cm4gMDsKK30KKworI2RlZmluZSBNTUFQX0RFRkFVTFQocykgICAgICAgICAgICAgd2luMzJtbWFwKHMpCisjZGVmaW5lIE1VTk1BUF9ERUZBVUxUKGEsIHMpICAgICAgICB3aW4zMm11bm1hcCgoYSksIChzKSkKKyNkZWZpbmUgRElSRUNUX01NQVBfREVGQVVMVChzKSAgICAgIHdpbjMyZGlyZWN0X21tYXAocykKKyNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworCisjaWYgSEFWRV9NUkVNQVAKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgTVJFTUFQX0RFRkFVTFQoYWRkciwgb3N6LCBuc3osIG12KSBtcmVtYXAoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpCisjZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiBIQVZFX01SRU1BUCAqLworCisKKy8qKgorICogRGVmaW5lIENBTExfTU9SRUNPUkUKKyAqLworI2lmIEhBVkVfTU9SRUNPUkUKKyAgICAjaWZkZWYgTU9SRUNPUkUKKwkjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgTU9SRUNPUkUoUykKKyAgICAjZWxzZSAgLyogTU9SRUNPUkUgKi8KKwkjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgTU9SRUNPUkVfREVGQVVMVChTKQorICAgICNlbmRpZiAvKiBNT1JFQ09SRSAqLworI2Vsc2UgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyAgICAjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgICAgIE1GQUlMCisjZW5kaWYgLyogSEFWRV9NT1JFQ09SRSAqLworCisvKioKKyAqIERlZmluZSBDQUxMX01NQVAvQ0FMTF9NVU5NQVAvQ0FMTF9ESVJFQ1RfTU1BUAorICovCisjaWYgSEFWRV9NTUFQCisgICAgI2RlZmluZSBJU19NTUFQUEVEX0JJVCAgICAgICAgICAoU0laRV9UX09ORSkKKyAgICAjZGVmaW5lIFVTRV9NTUFQX0JJVCAgICAgICAgICAgIChTSVpFX1RfT05FKQorCisgICAgI2lmZGVmIE1NQVAKKwkjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgTU1BUChzKQorICAgICNlbHNlIC8qIE1NQVAgKi8KKwkjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgTU1BUF9ERUZBVUxUKHMpCisgICAgI2VuZGlmIC8qIE1NQVAgKi8KKyAgICAjaWZkZWYgTVVOTUFQCisJI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgIE1VTk1BUCgoYSksIChzKSkKKyAgICAjZWxzZSAvKiBNVU5NQVAgKi8KKwkjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgTVVOTUFQX0RFRkFVTFQoKGEpLCAocykpCisgICAgI2VuZGlmIC8qIE1VTk1BUCAqLworICAgICNpZmRlZiBESVJFQ1RfTU1BUAorCSNkZWZpbmUgQ0FMTF9ESVJFQ1RfTU1BUChzKSBESVJFQ1RfTU1BUChzKQorICAgICNlbHNlIC8qIERJUkVDVF9NTUFQICovCisJI2RlZmluZSBDQUxMX0RJUkVDVF9NTUFQKHMpIERJUkVDVF9NTUFQX0RFRkFVTFQocykKKyAgICAjZW5kaWYgLyogRElSRUNUX01NQVAgKi8KKyNlbHNlICAvKiBIQVZFX01NQVAgKi8KKyAgICAjZGVmaW5lIElTX01NQVBQRURfQklUICAgICAgICAgIChTSVpFX1RfWkVSTykKKyAgICAjZGVmaW5lIFVTRV9NTUFQX0JJVCAgICAgICAgICAgIChTSVpFX1RfWkVSTykKKworICAgICNkZWZpbmUgTU1BUChzKSAgICAgICAgICAgICAgICAgTUZBSUwKKyAgICAjZGVmaW5lIE1VTk1BUChhLCBzKSAgICAgICAgICAgICgtMSkKKyAgICAjZGVmaW5lIERJUkVDVF9NTUFQKHMpICAgICAgICAgIE1GQUlMCisgICAgI2RlZmluZSBDQUxMX0RJUkVDVF9NTUFQKHMpICAgICBESVJFQ1RfTU1BUChzKQorICAgICNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICAgICAgTU1BUChzKQorICAgICNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICAgICAgTVVOTUFQKChhKSwgKHMpKQorI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworCisvKioKKyAqIERlZmluZSBDQUxMX01SRU1BUAorICovCisjaWYgSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQCisgICAgI2lmZGVmIE1SRU1BUAorCSNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSBNUkVNQVAoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpCisgICAgI2Vsc2UgLyogTVJFTUFQICovCisJI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpIE1SRU1BUF9ERUZBVUxUKChhZGRyKSwgKG9zeiksIChuc3opLCAobXYpKQorICAgICNlbmRpZiAvKiBNUkVNQVAgKi8KKyNlbHNlICAvKiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAgKi8KKyAgICAjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgICAgIE1GQUlMCisjZW5kaWYgLyogSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQICovCisKKy8qIG1zdGF0ZSBiaXQgc2V0IGlmIGNvbnRpbmd1b3VzIG1vcmVjb3JlIGRpc2FibGVkIG9yIGZhaWxlZCAqLworI2RlZmluZSBVU0VfTk9OQ09OVElHVU9VU19CSVQgKDRVKQorCisvKiBzZWdtZW50IGJpdCBzZXQgaW4gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UgKi8KKyNkZWZpbmUgRVhURVJOX0JJVCAgICAgICAgICAgICg4VSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9jayBwcmVsaW1pbmFyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBXaGVuIGxvY2tzIGFyZSBkZWZpbmVkLCB0aGVyZSBpcyBvbmUgZ2xvYmFsIGxvY2ssIHBsdXMKKyAgb25lIHBlci1tc3BhY2UgbG9jay4KKworICBUaGUgZ2xvYmFsIGxvY2tfZW5zdXJlcyB0aGF0IG1wYXJhbXMubWFnaWMgYW5kIG90aGVyIHVuaXF1ZQorICBtcGFyYW1zIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlLiBJdCBhbHNvIHByb3RlY3RzCisgIHNlcXVlbmNlcyBvZiBjYWxscyB0byBNT1JFQ09SRS4gIEluIG1hbnkgY2FzZXMgc3lzX2FsbG9jIHJlcXVpcmVzCisgIHR3byBjYWxscywgdGhhdCBzaG91bGQgbm90IGJlIGludGVybGVhdmVkIHdpdGggY2FsbHMgYnkgb3RoZXIKKyAgdGhyZWFkcy4gIFRoaXMgZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IGRpcmVjdCBjYWxscyB0byBNT1JFQ09SRQorICBieSBvdGhlciB0aHJlYWRzIG5vdCB1c2luZyB0aGlzIGxvY2ssIHNvIHRoZXJlIGlzIHN0aWxsIGNvZGUgdG8KKyAgY29wZSB0aGUgYmVzdCB3ZSBjYW4gb24gaW50ZXJmZXJlbmNlLgorCisgIFBlci1tc3BhY2UgbG9ja3Mgc3Vycm91bmQgY2FsbHMgdG8gbWFsbG9jLCBmcmVlLCBldGMuICBUbyBlbmFibGUgdXNlCisgIGluIGxheWVyZWQgZXh0ZW5zaW9ucywgcGVyLW1zcGFjZSBsb2NrcyBhcmUgcmVlbnRyYW50LgorCisgIEJlY2F1c2UgbG9jay1wcm90ZWN0ZWQgcmVnaW9ucyBnZW5lcmFsbHkgaGF2ZSBib3VuZGVkIHRpbWVzLCBpdCBpcworICBPSyB0byB1c2UgdGhlIHN1cHBsaWVkIHNpbXBsZSBzcGlubG9ja3MgaW4gdGhlIGN1c3RvbSB2ZXJzaW9ucyBmb3IKKyAgeDg2LgorCisgIElmIFVTRV9MT0NLUyBpcyA+IDEsIHRoZSBkZWZpbml0aW9ucyBvZiBsb2NrIHJvdXRpbmVzIGhlcmUgYXJlCisgIGJ5cGFzc2VkLCBpbiB3aGljaCBjYXNlIHlvdSB3aWxsIG5lZWQgdG8gZGVmaW5lIGF0IGxlYXN0CisgIElOSVRJQUxfTE9DSywgQUNRVUlSRV9MT0NLLCBSRUxFQVNFX0xPQ0sgYW5kIHBvc3NpYmx5IFRSWV9MT0NLCisgICh3aGljaCBpcyBub3QgdXNlZCBpbiB0aGlzIG1hbGxvYywgYnV0IGNvbW1vbmx5IG5lZWRlZCBpbgorICBleHRlbnNpb25zLikKKyovCisKKyNpZiBVU0VfTE9DS1MgPT0gMQorCisjaWYgVVNFX1NQSU5fTE9DS1MKKyNpZm5kZWYgV0lOMzIKKworLyogQ3VzdG9tIHB0aHJlYWQtc3R5bGUgc3BpbiBsb2NrcyBvbiB4ODYgYW5kIHg2NCBmb3IgZ2NjICovCitzdHJ1Y3QgcHRocmVhZF9tbG9ja190IHsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGw7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjOworICB2b2xhdGlsZSBwdGhyZWFkX3QgdGhyZWFkaWQ7Cit9OworI2RlZmluZSBNTE9DS19UIHN0cnVjdCAgICAgICAgcHRocmVhZF9tbG9ja190CisjZGVmaW5lIENVUlJFTlRfVEhSRUFEICAgICAgICBwdGhyZWFkX3NlbGYoKQorI2RlZmluZSBJTklUSUFMX0xPQ0soc2wpICAgICAgKG1lbXNldChzbCwgMCwgc2l6ZW9mKE1MT0NLX1QpKSwgMCkKKyNkZWZpbmUgQUNRVUlSRV9MT0NLKHNsKSAgICAgIHB0aHJlYWRfYWNxdWlyZV9sb2NrKHNsKQorI2RlZmluZSBSRUxFQVNFX0xPQ0soc2wpICAgICAgcHRocmVhZF9yZWxlYXNlX2xvY2soc2wpCisjZGVmaW5lIFRSWV9MT0NLKHNsKSAgICAgICAgICBwdGhyZWFkX3RyeV9sb2NrKHNsKQorI2RlZmluZSBTUElOU19QRVJfWUlFTEQgICAgICAgNjMKKworc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IHsgMCwgMCwgMH07CisKK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgcHRocmVhZF9hY3F1aXJlX2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGludCBzcGlucyA9IDA7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCogbHAgPSAmc2wtPmw7CisgIGZvciAoOzspIHsKKyAgICBpZiAoKmxwICE9IDApIHsKKyAgICAgIGlmIChzbC0+dGhyZWFkaWQgPT0gQ1VSUkVOVF9USFJFQUQpIHsKKwkrK3NsLT5jOworCXJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIHBsYWNlIGFyZ3MgdG8gY21weGNoZ2wgaW4gbG9jYWxzIHRvIGV2YWRlIG9kZGl0aWVzIGluIHNvbWUgZ2NjcyAqLworICAgICAgaW50IGNtcCA9IDA7CisgICAgICBpbnQgdmFsID0gMTsKKyAgICAgIGludCByZXQ7CisgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAgKCJsb2NrOyBjbXB4Y2hnbCAlMSwgJTIiCisJCQkgICAgIDogIj1hIiAocmV0KQorCQkJICAgICA6ICJyIiAodmFsKSwgIm0iICgqKGxwKSksICIwIihjbXApCisJCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOworICAgICAgaWYgKCFyZXQpIHsKKwlhc3NlcnQoIXNsLT50aHJlYWRpZCk7CisJc2wtPmMgPSAxOworCXNsLT50aHJlYWRpZCA9IENVUlJFTlRfVEhSRUFEOworCXJldHVybiAwOworICAgICAgfQorICAgICAgaWYgKCgrK3NwaW5zICYgU1BJTlNfUEVSX1lJRUxEKSA9PSAwKSB7CisjaWYgZGVmaW5lZCAoX19TVlI0KSAmJiBkZWZpbmVkIChfX3N1bikgLyogc29sYXJpcyAqLworCXRocl95aWVsZCgpOworI2Vsc2UKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCisJc2NoZWRfeWllbGQoKTsKKyNlbHNlICAvKiBuby1vcCB5aWVsZCBvbiB1bmtub3duIHN5c3RlbXMgKi8KKwk7CisjZW5kaWYgLyogX19saW51eF9fIHx8IF9fRnJlZUJTRF9fIHx8IF9fQVBQTEVfXyAqLworI2VuZGlmIC8qIHNvbGFyaXMgKi8KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQgcHRocmVhZF9yZWxlYXNlX2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGFzc2VydChzbC0+bCAhPSAwKTsKKyAgYXNzZXJ0KHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCk7CisgIGlmICgtLXNsLT5jID09IDApIHsKKyAgICBzbC0+dGhyZWFkaWQgPSAwOworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCogbHAgPSAmc2wtPmw7CisgICAgaW50IHByZXYgPSAwOworICAgIGludCByZXQ7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyB4Y2hnbCAlMCwgJTEiCisJCQkgIDogIj1yIiAocmV0KQorCQkJICA6ICJtIiAoKihscCkpLCAiMCIocHJldikKKwkJCSAgOiAibWVtb3J5Iik7CisgIH0KK30KKworc3RhdGljIEZPUkNFSU5MSU5FIGludCBwdGhyZWFkX3RyeV9sb2NrIChNTE9DS19UICpzbCkgeworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQqIGxwID0gJnNsLT5sOworICBpZiAoKmxwICE9IDApIHsKKyAgICAgIGlmIChzbC0+dGhyZWFkaWQgPT0gQ1VSUkVOVF9USFJFQUQpIHsKKwkrK3NsLT5jOworCXJldHVybiAxOworICAgICAgfQorICB9CisgIGVsc2UgeworICAgIGludCBjbXAgPSAwOworICAgIGludCB2YWwgPSAxOworICAgIGludCByZXQ7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gICgibG9jazsgY21weGNoZ2wgJTEsICUyIgorCQkJICAgOiAiPWEiIChyZXQpCisJCQkgICA6ICJyIiAodmFsKSwgIm0iICgqKGxwKSksICIwIihjbXApCisJCQkgICA6ICJtZW1vcnkiLCAiY2MiKTsKKyAgICBpZiAoIXJldCkgeworICAgICAgYXNzZXJ0KCFzbC0+dGhyZWFkaWQpOworICAgICAgc2wtPmMgPSAxOworICAgICAgc2wtPnRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKworI2Vsc2UgLyogV0lOMzIgKi8KKy8qIEN1c3RvbSB3aW4zMi1zdHlsZSBzcGluIGxvY2tzIG9uIHg4NiBhbmQgeDY0IGZvciBNU0MgKi8KK3N0cnVjdCB3aW4zMl9tbG9ja190Cit7CisgIHZvbGF0aWxlIGxvbmcgbDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGM7CisgIHZvbGF0aWxlIGxvbmcgdGhyZWFkaWQ7Cit9OworCisjZGVmaW5lIE1MT0NLX1QgICAgICAgICAgICAgICBzdHJ1Y3Qgd2luMzJfbWxvY2tfdAorI2RlZmluZSBDVVJSRU5UX1RIUkVBRCAgICAgICAgd2luMzJfZ2V0Y3VycmVudHRocmVhZGlkKCkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKHNsKSAgICAgIChtZW1zZXQoc2wsIDAsIHNpemVvZihNTE9DS19UKSksIDApCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhzbCkgICAgICB3aW4zMl9hY3F1aXJlX2xvY2soc2wpCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhzbCkgICAgICB3aW4zMl9yZWxlYXNlX2xvY2soc2wpCisjZGVmaW5lIFRSWV9MT0NLKHNsKSAgICAgICAgICB3aW4zMl90cnlfbG9jayhzbCkKKyNkZWZpbmUgU1BJTlNfUEVSX1lJRUxEICAgICAgIDYzCisKK3N0YXRpYyBNTE9DS19UIG1hbGxvY19nbG9iYWxfbXV0ZXggPSB7IDAsIDAsIDB9OworCitzdGF0aWMgRk9SQ0VJTkxJTkUgbG9uZyB3aW4zMl9nZXRjdXJyZW50dGhyZWFkaWQoKSB7CisjaWZkZWYgX01TQ19WRVIKKyNpZiBkZWZpbmVkKF9NX0lYODYpCisgIGxvbmcgKnRocmVhZHN0cnVjdD0obG9uZyAqKV9fcmVhZGZzZHdvcmQoMHgxOCk7CisgIGxvbmcgdGhyZWFkaWQ9dGhyZWFkc3RydWN0WzB4MjQvc2l6ZW9mKGxvbmcpXTsKKyAgcmV0dXJuIHRocmVhZGlkOworI2VsaWYgZGVmaW5lZChfTV9YNjQpCisgIC8qIHRvZG8gKi8KKyAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOworI2Vsc2UKKyAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOworI2VuZGlmCisjZWxzZQorICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7CisjZW5kaWYKK30KKworc3RhdGljIEZPUkNFSU5MSU5FIGludCB3aW4zMl9hY3F1aXJlX2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGludCBzcGlucyA9IDA7CisgIGZvciAoOzspIHsKKyAgICBpZiAoc2wtPmwgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYgKCFpbnRlcmxvY2tlZGV4Y2hhbmdlKCZzbC0+bCwgMSkpIHsKKwlhc3NlcnQoIXNsLT50aHJlYWRpZCk7CisJCXNsLT5jPUNVUlJFTlRfVEhSRUFEOworCXNsLT50aHJlYWRpZCA9IENVUlJFTlRfVEhSRUFEOworCXNsLT5jID0gMTsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKCgrK3NwaW5zICYgU1BJTlNfUEVSX1lJRUxEKSA9PSAwKQorICAgICAgU2xlZXBFeCgwLCBGQUxTRSk7CisgIH0KK30KKworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQgd2luMzJfcmVsZWFzZV9sb2NrIChNTE9DS19UICpzbCkgeworICBhc3NlcnQoc2wtPnRocmVhZGlkID09IENVUlJFTlRfVEhSRUFEKTsKKyAgYXNzZXJ0KHNsLT5sICE9IDApOworICBpZiAoLS1zbC0+YyA9PSAwKSB7CisgICAgc2wtPnRocmVhZGlkID0gMDsKKyAgICBpbnRlcmxvY2tlZGV4Y2hhbmdlICgmc2wtPmwsIDApOworICB9Cit9CisKK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgd2luMzJfdHJ5X2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGlmKHNsLT5sICE9IDApIHsKKyAgICAgIGlmIChzbC0+dGhyZWFkaWQgPT0gQ1VSUkVOVF9USFJFQUQpIHsKKwkrK3NsLT5jOworCXJldHVybiAxOworICAgICAgfQorICB9CisgIGVsc2UgeworICAgIGlmICghaW50ZXJsb2NrZWRleGNoYW5nZSgmc2wtPmwsIDEpKXsKKyAgICAgIGFzc2VydCghc2wtPnRocmVhZGlkKTsKKyAgICAgIHNsLT50aHJlYWRpZCA9IENVUlJFTlRfVEhSRUFEOworICAgICAgc2wtPmMgPSAxOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisjZW5kaWYgLyogV0lOMzIgKi8KKyNlbHNlIC8qIFVTRV9TUElOX0xPQ0tTICovCisKKyNpZm5kZWYgV0lOMzIKKy8qIHB0aHJlYWRzLWJhc2VkIGxvY2tzICovCisKKyNkZWZpbmUgTUxPQ0tfVCAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdAorI2RlZmluZSBDVVJSRU5UX1RIUkVBRCAgICAgICAgcHRocmVhZF9zZWxmKCkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKHNsKSAgICAgIHB0aHJlYWRfaW5pdF9sb2NrKHNsKQorI2RlZmluZSBBQ1FVSVJFX0xPQ0soc2wpICAgICAgcHRocmVhZF9tdXRleF9sb2NrKHNsKQorI2RlZmluZSBSRUxFQVNFX0xPQ0soc2wpICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soc2wpCisjZGVmaW5lIFRSWV9MT0NLKHNsKSAgICAgICAgICAoIXB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhzbCkpCisKK3N0YXRpYyBNTE9DS19UIG1hbGxvY19nbG9iYWxfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCisvKiBDb3BlIHdpdGggb2xkLXN0eWxlIGxpbnV4IHJlY3Vyc2l2ZSBsb2NrIGluaXRpYWxpemF0aW9uIGJ5IGFkZGluZyAqLworLyogc2tpcHBlZCBpbnRlcm5hbCBkZWNsYXJhdGlvbiBmcm9tIHB0aHJlYWQuaCAqLworI2lmZGVmIGxpbnV4CisjaWZuZGVmIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFCitleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldGtpbmRfbnAgX19QICgocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLAorCQkJCQkgICBpbnQgX19raW5kKSk7CisjZGVmaW5lIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoeCx5KSBwdGhyZWFkX211dGV4YXR0cl9zZXRraW5kX25wKHgseSkKKyNlbmRpZgorI2VuZGlmCisKK3N0YXRpYyBpbnQgcHRocmVhZF9pbml0X2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgYXR0cjsKKyAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmF0dHIpKSByZXR1cm4gMTsKKyAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKSkgcmV0dXJuIDE7CisgIGlmIChwdGhyZWFkX211dGV4X2luaXQoc2wsICZhdHRyKSkgcmV0dXJuIDE7CisgIGlmIChwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZhdHRyKSkgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCisjZWxzZSAvKiBXSU4zMiAqLworLyogV2luMzIgY3JpdGljYWwgc2VjdGlvbnMgKi8KKyNkZWZpbmUgTUxPQ0tfVCAgICAgICAgICAgICAgIENSSVRJQ0FMX1NFQ1RJT04KKyNkZWZpbmUgQ1VSUkVOVF9USFJFQUQgICAgICAgIEdldEN1cnJlbnRUaHJlYWRJZCgpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhzKSAgICAgICAoIUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb25BbmRTcGluQ291bnQoKHMpLCAweDgwMDAwMDAwfDQwMDApKQorI2RlZmluZSBBQ1FVSVJFX0xPQ0socykgICAgICAgKEVudGVyQ3JpdGljYWxTZWN0aW9uKHMpLCAwKQorI2RlZmluZSBSRUxFQVNFX0xPQ0socykgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24ocykKKyNkZWZpbmUgVFJZX0xPQ0socykgICAgICAgICAgIFRyeUVudGVyQ3JpdGljYWxTZWN0aW9uKHMpCisjZGVmaW5lIE5FRURfR0xPQkFMX0xPQ0tfSU5JVAorCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4Oworc3RhdGljIHZvbGF0aWxlIGxvbmcgbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXM7CisKKy8qIFVzZSBzcGluIGxvb3AgdG8gaW5pdGlhbGl6ZSBnbG9iYWwgbG9jayAqLworc3RhdGljIHZvaWQgaW5pdF9tYWxsb2NfZ2xvYmFsX211dGV4KCkgeworICBmb3IgKDs7KSB7CisgICAgbG9uZyBzdGF0ID0gbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXM7CisgICAgaWYgKHN0YXQgPiAwKQorICAgICAgcmV0dXJuOworICAgIC8qIHRyYW5zaXRpb24gdG8gPCAwIHdoaWxlIGluaXRpYWxpemluZywgdGhlbiB0byA+IDApICovCisgICAgaWYgKHN0YXQgPT0gMCAmJgorCWludGVybG9ja2VkY29tcGFyZWV4Y2hhbmdlKCZtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1cywgLTEsIDApID09IDApIHsKKyAgICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJm1hbGxvY19nbG9iYWxfbXV0ZXgpOworICAgICAgaW50ZXJsb2NrZWRleGNoYW5nZSgmbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXMsMSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIFNsZWVwRXgoMCwgRkFMU0UpOworICB9Cit9CisKKyNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIFVTRV9TUElOX0xPQ0tTICovCisjZW5kaWYgLyogVVNFX0xPQ0tTID09IDEgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVzZXItZGVmaW5lZCBsb2NrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIFVTRV9MT0NLUyA+IDEKKy8qIERlZmluZSB5b3VyIG93biBsb2NrIGltcGxlbWVudGF0aW9uIGhlcmUgKi8KKy8qICNkZWZpbmUgSU5JVElBTF9MT0NLKHNsKSAgLi4uICovCisvKiAjZGVmaW5lIEFDUVVJUkVfTE9DSyhzbCkgIC4uLiAqLworLyogI2RlZmluZSBSRUxFQVNFX0xPQ0soc2wpICAuLi4gKi8KKy8qICNkZWZpbmUgVFJZX0xPQ0soc2wpIC4uLiAqLworLyogc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IC4uLiAqLworI2VuZGlmIC8qIFVTRV9MT0NLUyA+IDEgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIExvY2stYmFzZWQgc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBVU0VfTE9DS1MKKyNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAgICAgICAgKDJVKQorI2Vsc2UgIC8qIFVTRV9MT0NLUyAqLworI2RlZmluZSBVU0VfTE9DS19CSVQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhsKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisjaWYgVVNFX0xPQ0tTCisjZGVmaW5lIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCkgIEFDUVVJUkVfTE9DSygmbWFsbG9jX2dsb2JhbF9tdXRleCk7CisjZGVmaW5lIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCkgIFJFTEVBU0VfTE9DSygmbWFsbG9jX2dsb2JhbF9tdXRleCk7CisjZWxzZSAgLyogVVNFX0xPQ0tTICovCisjZGVmaW5lIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCkKKyNkZWZpbmUgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDaHVuayByZXByZXNlbnRhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIChUaGUgZm9sbG93aW5nIGluY2x1ZGVzIGxpZ2h0bHkgZWRpdGVkIGV4cGxhbmF0aW9ucyBieSBDb2xpbiBQbHVtYi4pCisKKyAgVGhlIG1hbGxvY19jaHVuayBkZWNsYXJhdGlvbiBiZWxvdyBpcyBtaXNsZWFkaW5nIChidXQgYWNjdXJhdGUgYW5kCisgIG5lY2Vzc2FyeSkuICBJdCBkZWNsYXJlcyBhICJ2aWV3IiBpbnRvIG1lbW9yeSBhbGxvd2luZyBhY2Nlc3MgdG8KKyAgbmVjZXNzYXJ5IGZpZWxkcyBhdCBrbm93biBvZmZzZXRzIGZyb20gYSBnaXZlbiBiYXNlLgorCisgIENodW5rcyBvZiBtZW1vcnkgYXJlIG1haW50YWluZWQgdXNpbmcgYSBgYm91bmRhcnkgdGFnJyBtZXRob2QgYXMKKyAgb3JpZ2luYWxseSBkZXNjcmliZWQgYnkgS251dGguICAoU2VlIHRoZSBwYXBlciBieSBQYXVsIFdpbHNvbgorICBmdHA6Ly9mdHAuY3MudXRleGFzLmVkdS9wdWIvZ2FyYmFnZS9hbGxvY3Nydi5wcyBmb3IgYSBzdXJ2ZXkgb2Ygc3VjaAorICB0ZWNobmlxdWVzLikgIFNpemVzIG9mIGZyZWUgY2h1bmtzIGFyZSBzdG9yZWQgYm90aCBpbiB0aGUgZnJvbnQgb2YKKyAgZWFjaCBjaHVuayBhbmQgYXQgdGhlIGVuZC4gIFRoaXMgbWFrZXMgY29uc29saWRhdGluZyBmcmFnbWVudGVkCisgIGNodW5rcyBpbnRvIGJpZ2dlciBjaHVua3MgZmFzdC4gIFRoZSBoZWFkIGZpZWxkcyBhbHNvIGhvbGQgYml0cworICByZXByZXNlbnRpbmcgd2hldGhlciBjaHVua3MgYXJlIGZyZWUgb3IgaW4gdXNlLgorCisgIEhlcmUgYXJlIHNvbWUgcGljdHVyZXMgdG8gbWFrZSBpdCBjbGVhcmVyLiAgVGhleSBhcmUgImV4cGxvZGVkIiB0bworICBzaG93IHRoYXQgdGhlIHN0YXRlIG9mIGEgY2h1bmsgY2FuIGJlIHRob3VnaHQgb2YgYXMgZXh0ZW5kaW5nIGZyb20KKyAgdGhlIGhpZ2ggMzEgYml0cyBvZiB0aGUgaGVhZCBmaWVsZCBvZiBpdHMgaGVhZGVyIHRocm91Z2ggdGhlCisgIHByZXZfZm9vdCBhbmQgUElOVVNFX0JJVCBiaXQgb2YgdGhlIGZvbGxvd2luZyBjaHVuayBoZWFkZXIuCisKKyAgQSBjaHVuayB0aGF0J3MgaW4gdXNlIGxvb2tzIGxpa2U6CisKKyAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICB8IFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIFAgPSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8UHwKKwkgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDF8ICstKworICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKwkgKy0gICAgICBzaXplIC0gc2l6ZW9mKHNpemVfdCkgYXZhaWxhYmxlIHBheWxvYWQgYnl0ZXMgICAgICAgICAgLSsKKwkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyBjaHVuay0+ICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisJIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwxfAorICAgICAgIHwgU2l6ZSBvZiBuZXh0IGNodW5rIChtYXkgb3IgbWF5IG5vdCBiZSBpbiB1c2UpICAgICAgICAgICAgICAgfCArLSsKKyBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgICAgQW5kIGlmIGl0J3MgZnJlZSwgaXQgbG9va3MgbGlrZSB0aGlzOgorCisgICBjaHVuay0+ICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisJICAgfCBVc2VyIHBheWxvYWQgKG11c3QgYmUgaW4gdXNlLCBvciB3ZSB3b3VsZCBoYXZlIG1lcmdlZCEpICAgICAgIHwKKwkgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfFB8CisJIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwfCArLSsKKyAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJIHwgTmV4dCBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJIHwgUHJldiBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisJICstICAgICAgc2l6ZSAtIHNpemVvZihzdHJ1Y3QgY2h1bmspIHVudXNlZCBieXRlcyAgICAgICAgICAgICAgIC0rCisJIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSB8IFNpemUgb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8MHwKKyAgICAgICB8IFNpemUgb2YgbmV4dCBjaHVuayAobXVzdCBiZSBpbiB1c2UsIG9yIHdlIHdvdWxkIGhhdmUgbWVyZ2VkKXwgKy0rCisgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICstIFVzZXIgcGF5bG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCQkJCQkJCQkgICAgIHwwfAorCQkJCQkJCQkgICAgICstKworICBOb3RlIHRoYXQgc2luY2Ugd2UgYWx3YXlzIG1lcmdlIGFkamFjZW50IGZyZWUgY2h1bmtzLCB0aGUgY2h1bmtzCisgIGFkamFjZW50IHRvIGEgZnJlZSBjaHVuayBtdXN0IGJlIGluIHVzZS4KKworICBHaXZlbiBhIHBvaW50ZXIgdG8gYSBjaHVuayAod2hpY2ggY2FuIGJlIGRlcml2ZWQgdHJpdmlhbGx5IGZyb20gdGhlCisgIHBheWxvYWQgcG9pbnRlcikgd2UgY2FuLCBpbiBPKDEpIHRpbWUsIGZpbmQgb3V0IHdoZXRoZXIgdGhlIGFkamFjZW50CisgIGNodW5rcyBhcmUgZnJlZSwgYW5kIGlmIHNvLCB1bmxpbmsgdGhlbSBmcm9tIHRoZSBsaXN0cyB0aGF0IHRoZXkKKyAgYXJlIG9uIGFuZCBtZXJnZSB0aGVtIHdpdGggdGhlIGN1cnJlbnQgY2h1bmsuCisKKyAgQ2h1bmtzIGFsd2F5cyBiZWdpbiBvbiBldmVuIHdvcmQgYm91bmRhcmllcywgc28gdGhlIG1lbSBwb3J0aW9uCisgICh3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgdXNlcikgaXMgYWxzbyBvbiBhbiBldmVuIHdvcmQgYm91bmRhcnksIGFuZAorICB0aHVzIGF0IGxlYXN0IGRvdWJsZS13b3JkIGFsaWduZWQuCisKKyAgVGhlIFAgKFBJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgbG93LW9yZGVyIGJpdCBvZiB0aGUKKyAgY2h1bmsgc2l6ZSAod2hpY2ggaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgdHdvIHdvcmRzKSwgaXMgYW4gaW4tdXNlCisgIGJpdCBmb3IgdGhlICpwcmV2aW91cyogY2h1bmsuICBJZiB0aGF0IGJpdCBpcyAqY2xlYXIqLCB0aGVuIHRoZQorICB3b3JkIGJlZm9yZSB0aGUgY3VycmVudCBjaHVuayBzaXplIGNvbnRhaW5zIHRoZSBwcmV2aW91cyBjaHVuaworICBzaXplLCBhbmQgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgZnJvbnQgb2YgdGhlIHByZXZpb3VzIGNodW5rLgorICBUaGUgdmVyeSBmaXJzdCBjaHVuayBhbGxvY2F0ZWQgYWx3YXlzIGhhcyB0aGlzIGJpdCBzZXQsIHByZXZlbnRpbmcKKyAgYWNjZXNzIHRvIG5vbi1leGlzdGVudCAob3Igbm9uLW93bmVkKSBtZW1vcnkuIElmIHBpbnVzZSBpcyBzZXQgZm9yCisgIGFueSBnaXZlbiBjaHVuaywgdGhlbiB5b3UgQ0FOTk9UIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUKKyAgcHJldmlvdXMgY2h1bmssIGFuZCBtaWdodCBldmVuIGdldCBhIG1lbW9yeSBhZGRyZXNzaW5nIGZhdWx0IHdoZW4KKyAgdHJ5aW5nIHRvIGRvIHNvLgorCisgIFRoZSBDIChDSU5VU0VfQklUKSBiaXQsIHN0b3JlZCBpbiB0aGUgdW51c2VkIHNlY29uZC1sb3dlc3QgYml0IG9mCisgIHRoZSBjaHVuayBzaXplIHJlZHVuZGFudGx5IHJlY29yZHMgd2hldGhlciB0aGUgY3VycmVudCBjaHVuayBpcworICBpbnVzZS4gVGhpcyByZWR1bmRhbmN5IGVuYWJsZXMgdXNhZ2UgY2hlY2tzIHdpdGhpbiBmcmVlIGFuZCByZWFsbG9jLAorICBhbmQgcmVkdWNlcyBpbmRpcmVjdGlvbiB3aGVuIGZyZWVpbmcgYW5kIGNvbnNvbGlkYXRpbmcgY2h1bmtzLgorCisgIEVhY2ggZnJlc2hseSBhbGxvY2F0ZWQgY2h1bmsgbXVzdCBoYXZlIGJvdGggY2ludXNlIGFuZCBwaW51c2Ugc2V0LgorICBUaGF0IGlzLCBlYWNoIGFsbG9jYXRlZCBjaHVuayBib3JkZXJzIGVpdGhlciBhIHByZXZpb3VzbHkgYWxsb2NhdGVkCisgIGFuZCBzdGlsbCBpbi11c2UgY2h1bmssIG9yIHRoZSBiYXNlIG9mIGl0cyBtZW1vcnkgYXJlbmEuIFRoaXMgaXMKKyAgZW5zdXJlZCBieSBtYWtpbmcgYWxsIGFsbG9jYXRpb25zIGZyb20gdGhlIHRoZSBgbG93ZXN0JyBwYXJ0IG9mIGFueQorICBmb3VuZCBjaHVuay4gIEZ1cnRoZXIsIG5vIGZyZWUgY2h1bmsgcGh5c2ljYWxseSBib3JkZXJzIGFub3RoZXIgb25lLAorICBzbyBlYWNoIGZyZWUgY2h1bmsgaXMga25vd24gdG8gYmUgcHJlY2VkZWQgYW5kIGZvbGxvd2VkIGJ5IGVpdGhlcgorICBpbnVzZSBjaHVua3Mgb3IgdGhlIGVuZHMgb2YgbWVtb3J5LgorCisgIE5vdGUgdGhhdCB0aGUgYGZvb3QnIG9mIHRoZSBjdXJyZW50IGNodW5rIGlzIGFjdHVhbGx5IHJlcHJlc2VudGVkCisgIGFzIHRoZSBwcmV2X2Zvb3Qgb2YgdGhlIE5FWFQgY2h1bmsuIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvCisgIGRlYWwgd2l0aCBhbGlnbm1lbnRzIGV0YyBidXQgY2FuIGJlIHZlcnkgY29uZnVzaW5nIHdoZW4gdHJ5aW5nCisgIHRvIGV4dGVuZCBvciBhZGFwdCB0aGlzIGNvZGUuCisKKyAgVGhlIGV4Y2VwdGlvbnMgdG8gYWxsIHRoaXMgYXJlCisKKyAgICAgMS4gVGhlIHNwZWNpYWwgY2h1bmsgYHRvcCcgaXMgdGhlIHRvcC1tb3N0IGF2YWlsYWJsZSBjaHVuayAoaS5lLiwKKwl0aGUgb25lIGJvcmRlcmluZyB0aGUgZW5kIG9mIGF2YWlsYWJsZSBtZW1vcnkpLiBJdCBpcyB0cmVhdGVkCisJc3BlY2lhbGx5LiAgVG9wIGlzIG5ldmVyIGluY2x1ZGVkIGluIGFueSBiaW4sIGlzIHVzZWQgb25seSBpZgorCW5vIG90aGVyIGNodW5rIGlzIGF2YWlsYWJsZSwgYW5kIGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlCisJc3lzdGVtIGlmIGl0IGlzIHZlcnkgbGFyZ2UgKHNlZSBNX1RSSU1fVEhSRVNIT0xEKS4gIEluIGVmZmVjdCwKKwl0aGUgdG9wIGNodW5rIGlzIHRyZWF0ZWQgYXMgbGFyZ2VyIChhbmQgdGh1cyBsZXNzIHdlbGwKKwlmaXR0aW5nKSB0aGFuIGFueSBvdGhlciBhdmFpbGFibGUgY2h1bmsuICBUaGUgdG9wIGNodW5rCisJZG9lc24ndCB1cGRhdGUgaXRzIHRyYWlsaW5nIHNpemUgZmllbGQgc2luY2UgdGhlcmUgaXMgbm8gbmV4dAorCWNvbnRpZ3VvdXMgY2h1bmsgdGhhdCB3b3VsZCBoYXZlIHRvIGluZGV4IG9mZiBpdC4gSG93ZXZlciwKKwlzcGFjZSBpcyBzdGlsbCBhbGxvY2F0ZWQgZm9yIGl0IChUT1BfRk9PVF9TSVpFKSB0byBlbmFibGUKKwlzZXBhcmF0aW9uIG9yIG1lcmdpbmcgd2hlbiBzcGFjZSBpcyBleHRlbmRlZC4KKworICAgICAzLiBDaHVua3MgYWxsb2NhdGVkIHZpYSBtbWFwLCB3aGljaCBoYXZlIHRoZSBsb3dlc3Qtb3JkZXIgYml0CisJKElTX01NQVBQRURfQklUKSBzZXQgaW4gdGhlaXIgcHJldl9mb290IGZpZWxkcywgYW5kIGRvIG5vdCBzZXQKKwlQSU5VU0VfQklUIGluIHRoZWlyIGhlYWQgZmllbGRzLiAgQmVjYXVzZSB0aGV5IGFyZSBhbGxvY2F0ZWQKKwlvbmUtYnktb25lLCBlYWNoIG11c3QgY2FycnkgaXRzIG93biBwcmV2X2Zvb3QgZmllbGQsIHdoaWNoIGlzCisJYWxzbyB1c2VkIHRvIGhvbGQgdGhlIG9mZnNldCB0aGlzIGNodW5rIGhhcyB3aXRoaW4gaXRzIG1tYXBwZWQKKwlyZWdpb24sIHdoaWNoIGlzIG5lZWRlZCB0byBwcmVzZXJ2ZSBhbGlnbm1lbnQuIEVhY2ggbW1hcHBlZAorCWNodW5rIGlzIHRyYWlsZWQgYnkgdGhlIGZpcnN0IHR3byBmaWVsZHMgb2YgYSBmYWtlIG5leHQtY2h1bmsKKwlmb3Igc2FrZSBvZiB1c2FnZSBjaGVja3MuCisKKyovCisKK3N0cnVjdCBtYWxsb2NfY2h1bmsgeworICBzaXplX3QgICAgICAgICAgICAgICBwcmV2X2Zvb3Q7ICAvKiBTaXplIG9mIHByZXZpb3VzIGNodW5rIChpZiBmcmVlKS4gICovCisgIHNpemVfdCAgICAgICAgICAgICAgIGhlYWQ7ICAgICAgIC8qIFNpemUgYW5kIGludXNlIGJpdHMuICovCisgIHN0cnVjdCBtYWxsb2NfY2h1bmsqIGZkOyAgICAgICAgIC8qIGRvdWJsZSBsaW5rcyAtLSB1c2VkIG9ubHkgaWYgZnJlZS4gKi8KKyAgc3RydWN0IG1hbGxvY19jaHVuayogYms7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsgIG1jaHVuazsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayogbWNodW5rcHRyOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBzYmlucHRyOyAgLyogVGhlIHR5cGUgb2YgYmlucyBvZiBjaHVua3MgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGJpbmRleF90OyAgICAgICAgIC8qIERlc2NyaWJlZCBiZWxvdyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgYmlubWFwX3Q7ICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGFnX3Q7ICAgICAgICAgICAvKiBUaGUgdHlwZSBvZiB2YXJpb3VzIGJpdCBmbGFnIHNldHMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBDaHVua3Mgc2l6ZXMgYW5kIGFsaWdubWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBNQ0hVTktfU0laRSAgICAgICAgIChzaXplb2YobWNodW5rKSkKKworI2lmIEZPT1RFUlMKKyNkZWZpbmUgQ0hVTktfT1ZFUkhFQUQgICAgICAoVFdPX1NJWkVfVF9TSVpFUykKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyNkZWZpbmUgQ0hVTktfT1ZFUkhFQUQgICAgICAoU0laRV9UX1NJWkUpCisjZW5kaWYgLyogRk9PVEVSUyAqLworCisvKiBNTWFwcGVkIGNodW5rcyBuZWVkIGEgc2Vjb25kIHdvcmQgb2Ygb3ZlcmhlYWQgLi4uICovCisjZGVmaW5lIE1NQVBfQ0hVTktfT1ZFUkhFQUQgKFRXT19TSVpFX1RfU0laRVMpCisvKiAuLi4gYW5kIGFkZGl0aW9uYWwgcGFkZGluZyBmb3IgZmFrZSBuZXh0LWNodW5rIGF0IGZvb3QgKi8KKyNkZWZpbmUgTU1BUF9GT09UX1BBRCAgICAgICAoRk9VUl9TSVpFX1RfU0laRVMpCisKKy8qIFRoZSBzbWFsbGVzdCBzaXplIHdlIGNhbiBtYWxsb2MgaXMgYW4gYWxpZ25lZCBtaW5pbWFsIGNodW5rICovCisjZGVmaW5lIE1JTl9DSFVOS19TSVpFXAorICAoKE1DSFVOS19TSVpFICsgQ0hVTktfQUxJR05fTUFTSykgJiB+Q0hVTktfQUxJR05fTUFTSykKKworLyogY29udmVyc2lvbiBmcm9tIG1hbGxvYyBoZWFkZXJzIHRvIHVzZXIgcG9pbnRlcnMsIGFuZCBiYWNrICovCisjZGVmaW5lIGNodW5rMm1lbShwKSAgICAgICAgKCh2b2lkKikoKGNoYXIqKShwKSAgICAgICArIFRXT19TSVpFX1RfU0laRVMpKQorI2RlZmluZSBtZW0yY2h1bmsobWVtKSAgICAgICgobWNodW5rcHRyKSgoY2hhciopKG1lbSkgLSBUV09fU0laRV9UX1NJWkVTKSkKKy8qIGNodW5rIGFzc29jaWF0ZWQgd2l0aCBhbGlnbmVkIGFkZHJlc3MgQSAqLworI2RlZmluZSBhbGlnbl9hc19jaHVuayhBKSAgIChtY2h1bmtwdHIpKChBKSArIGFsaWduX29mZnNldChjaHVuazJtZW0oQSkpKQorCisvKiBCb3VuZHMgb24gcmVxdWVzdCAobm90IGNodW5rKSBzaXplcy4gKi8KKyNkZWZpbmUgTUFYX1JFUVVFU1QgICAgICAgICAoKC1NSU5fQ0hVTktfU0laRSkgPDwgMikKKyNkZWZpbmUgTUlOX1JFUVVFU1QgICAgICAgICAoTUlOX0NIVU5LX1NJWkUgLSBDSFVOS19PVkVSSEVBRCAtIFNJWkVfVF9PTkUpCisKKy8qIHBhZCByZXF1ZXN0IGJ5dGVzIGludG8gYSB1c2FibGUgc2l6ZSAqLworI2RlZmluZSBwYWRfcmVxdWVzdChyZXEpIFwKKyAgICgoKHJlcSkgKyBDSFVOS19PVkVSSEVBRCArIENIVU5LX0FMSUdOX01BU0spICYgfkNIVU5LX0FMSUdOX01BU0spCisKKy8qIHBhZCByZXF1ZXN0LCBjaGVja2luZyBmb3IgbWluaW11bSAoYnV0IG5vdCBtYXhpbXVtKSAqLworI2RlZmluZSByZXF1ZXN0MnNpemUocmVxKSBcCisgICgoKHJlcSkgPCBNSU5fUkVRVUVTVCk/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QocmVxKSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBoZWFkIGFuZCBmb290IGZpZWxkcyAtLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBUaGUgaGVhZCBmaWVsZCBvZiBhIGNodW5rIGlzIG9yJ2VkIHdpdGggUElOVVNFX0JJVCB3aGVuIHByZXZpb3VzCisgIGFkamFjZW50IGNodW5rIGluIHVzZSwgYW5kIG9yJ2VkIHdpdGggQ0lOVVNFX0JJVCBpZiB0aGlzIGNodW5rIGlzIGluCisgIHVzZS4gSWYgdGhlIGNodW5rIHdhcyBvYnRhaW5lZCB3aXRoIG1tYXAsIHRoZSBwcmV2X2Zvb3QgZmllbGQgaGFzCisgIElTX01NQVBQRURfQklUIHNldCwgb3RoZXJ3aXNlIGhvbGRpbmcgdGhlIG9mZnNldCBvZiB0aGUgYmFzZSBvZiB0aGUKKyAgbW1hcHBlZCByZWdpb24gdG8gdGhlIGJhc2Ugb2YgdGhlIGNodW5rLgorCisgIEZMQUc0X0JJVCBpcyBub3QgdXNlZCBieSB0aGlzIG1hbGxvYywgYnV0IG1pZ2h0IGJlIHVzZWZ1bCBpbiBleHRlbnNpb25zLgorKi8KKworI2RlZmluZSBQSU5VU0VfQklUICAgICAgICAgIChTSVpFX1RfT05FKQorI2RlZmluZSBDSU5VU0VfQklUICAgICAgICAgIChTSVpFX1RfVFdPKQorI2RlZmluZSBGTEFHNF9CSVQgICAgICAgICAgIChTSVpFX1RfRk9VUikKKyNkZWZpbmUgSU5VU0VfQklUUyAgICAgICAgICAoUElOVVNFX0JJVHxDSU5VU0VfQklUKQorI2RlZmluZSBGTEFHX0JJVFMgICAgICAgICAgIChQSU5VU0VfQklUfENJTlVTRV9CSVR8RkxBRzRfQklUKQorCisvKiBIZWFkIHZhbHVlIGZvciBmZW5jZXBvc3RzICovCisjZGVmaW5lIEZFTkNFUE9TVF9IRUFEICAgICAgKElOVVNFX0JJVFN8U0laRV9UX1NJWkUpCisKKy8qIGV4dHJhY3Rpb24gb2YgZmllbGRzIGZyb20gaGVhZCB3b3JkcyAqLworI2RlZmluZSBjaW51c2UocCkgICAgICAgICAgICgocCktPmhlYWQgJiBDSU5VU0VfQklUKQorI2RlZmluZSBwaW51c2UocCkgICAgICAgICAgICgocCktPmhlYWQgJiBQSU5VU0VfQklUKQorI2RlZmluZSBjaHVua3NpemUocCkgICAgICAgICgocCktPmhlYWQgJiB+KEZMQUdfQklUUykpCisKKyNkZWZpbmUgY2xlYXJfcGludXNlKHApICAgICAoKHApLT5oZWFkICY9IH5QSU5VU0VfQklUKQorI2RlZmluZSBjbGVhcl9jaW51c2UocCkgICAgICgocCktPmhlYWQgJj0gfkNJTlVTRV9CSVQpCisKKy8qIFRyZWF0IHNwYWNlIGF0IHB0ciArLy0gb2Zmc2V0IGFzIGEgY2h1bmsgKi8KKyNkZWZpbmUgY2h1bmtfcGx1c19vZmZzZXQocCwgcykgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKQorI2RlZmluZSBjaHVua19taW51c19vZmZzZXQocCwgcykgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSAtIChzKSkpCisKKy8qIFB0ciB0byBuZXh0IG9yIHByZXZpb3VzIHBoeXNpY2FsIG1hbGxvY19jaHVuay4gKi8KKyNkZWZpbmUgbmV4dF9jaHVuayhwKSAoKG1jaHVua3B0cikoICgoY2hhciopKHApKSArICgocCktPmhlYWQgJiB+RkxBR19CSVRTKSkpCisjZGVmaW5lIHByZXZfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKGNoYXIqKShwKSkgLSAoKHApLT5wcmV2X2Zvb3QpICkpCisKKy8qIGV4dHJhY3QgbmV4dCBjaHVuaydzIHBpbnVzZSBiaXQgKi8KKyNkZWZpbmUgbmV4dF9waW51c2UocCkgICgobmV4dF9jaHVuayhwKS0+aGVhZCkgJiBQSU5VU0VfQklUKQorCisvKiBHZXQvc2V0IHNpemUgYXQgZm9vdGVyICovCisjZGVmaW5lIGdldF9mb290KHAsIHMpICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290KQorI2RlZmluZSBzZXRfZm9vdChwLCBzKSAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCA9IChzKSkKKworLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGFuZCBmb290ICovCisjZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVQpLCBzZXRfZm9vdChwLCBzKSkKKworLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGZvb3QsIGFuZCBjbGVhciBuZXh0IHBpbnVzZSAqLworI2RlZmluZSBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBzLCBuKVwKKyAgKGNsZWFyX3BpbnVzZShuKSwgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHMpKQorCisjZGVmaW5lIGlzX21tYXBwZWQocClcCisgICghKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpICYmICgocCktPnByZXZfZm9vdCAmIElTX01NQVBQRURfQklUKSkKKworLyogR2V0IHRoZSBpbnRlcm5hbCBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggY2h1bmsgcCAqLworI2RlZmluZSBvdmVyaGVhZF9mb3IocClcCisgKGlzX21tYXBwZWQocCk/IE1NQVBfQ0hVTktfT1ZFUkhFQUQgOiBDSFVOS19PVkVSSEVBRCkKKworLyogUmV0dXJuIHRydWUgaWYgbWFsbG9jZWQgc3BhY2UgaXMgbm90IG5lY2Vzc2FyaWx5IGNsZWFyZWQgKi8KKyNpZiBNTUFQX0NMRUFSUworI2RlZmluZSBjYWxsb2NfbXVzdF9jbGVhcihwKSAoIWlzX21tYXBwZWQocCkpCisjZWxzZSAvKiBNTUFQX0NMRUFSUyAqLworI2RlZmluZSBjYWxsb2NfbXVzdF9jbGVhcihwKSAoMSkKKyNlbmRpZiAvKiBNTUFQX0NMRUFSUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE92ZXJsYWlkIGRhdGEgc3RydWN0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBXaGVuIGNodW5rcyBhcmUgbm90IGluIHVzZSwgdGhleSBhcmUgdHJlYXRlZCBhcyBub2RlcyBvZiBlaXRoZXIKKyAgbGlzdHMgb3IgdHJlZXMuCisKKyAgIlNtYWxsIiAgY2h1bmtzIGFyZSBzdG9yZWQgaW4gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0cywgYW5kIGxvb2sKKyAgbGlrZSB0aGlzOgorCisgICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBoZWFkOicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICB8UHwKKyAgICAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgQmFjayBwb2ludGVyIHRvIHByZXZpb3VzIGNodW5rIGluIGxpc3QgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgVW51c2VkIHNwYWNlIChtYXkgYmUgMCBieXRlcyBsb25nKSAgICAgICAgICAgICAgICAuCisJICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCisJICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CituZXh0Y2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworICBMYXJnZXIgY2h1bmtzIGFyZSBrZXB0IGluIGEgZm9ybSBvZiBiaXR3aXNlIGRpZ2l0YWwgdHJlZXMgKGFrYQorICB0cmllcykga2V5ZWQgb24gY2h1bmtzaXplcy4gIEJlY2F1c2UgbWFsbG9jX3RyZWVfY2h1bmtzIGFyZSBvbmx5IGZvcgorICBmcmVlIGNodW5rcyBncmVhdGVyIHRoYW4gMjU2IGJ5dGVzLCB0aGVpciBzaXplIGRvZXNuJ3QgaW1wb3NlIGFueQorICBjb25zdHJhaW50cyBvbiB1c2VyIGNodW5rIHNpemVzLiAgRWFjaCBub2RlIGxvb2tzIGxpa2U6CisKKyAgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAorICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBGb3J3YXJkIHBvaW50ZXIgdG8gbmV4dCBjaHVuayBvZiBzYW1lIHNpemUgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgb2Ygc2FtZSBzaXplICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBQb2ludGVyIHRvIGxlZnQgY2hpbGQgKGNoaWxkWzBdKSAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBQb2ludGVyIHRvIHJpZ2h0IGNoaWxkIChjaGlsZFsxXSkgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBQb2ludGVyIHRvIHBhcmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBiaW4gaW5kZXggb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBVbnVzZWQgc3BhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKwkgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK25leHRjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGZvb3Q6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgIEVhY2ggdHJlZSBob2xkaW5nIHRyZWVub2RlcyBpcyBhIHRyZWUgb2YgdW5pcXVlIGNodW5rIHNpemVzLiAgQ2h1bmtzCisgIG9mIHRoZSBzYW1lIHNpemUgYXJlIGFycmFuZ2VkIGluIGEgY2lyY3VsYXJseS1saW5rZWQgbGlzdCwgd2l0aCBvbmx5CisgIHRoZSBvbGRlc3QgY2h1bmsgKHRoZSBuZXh0IHRvIGJlIHVzZWQsIGluIG91ciBGSUZPIG9yZGVyaW5nKQorICBhY3R1YWxseSBpbiB0aGUgdHJlZS4gIChUcmVlIG1lbWJlcnMgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgYSBub24tbnVsbAorICBwYXJlbnQgcG9pbnRlci4pICBJZiBhIGNodW5rIHdpdGggdGhlIHNhbWUgc2l6ZSBhbiBhbiBleGlzdGluZyBub2RlCisgIGlzIGluc2VydGVkLCBpdCBpcyBsaW5rZWQgb2ZmIHRoZSBleGlzdGluZyBub2RlIHVzaW5nIHBvaW50ZXJzIHRoYXQKKyAgd29yayBpbiB0aGUgc2FtZSB3YXkgYXMgZmQvYmsgcG9pbnRlcnMgb2Ygc21hbGwgY2h1bmtzLgorCisgIEVhY2ggdHJlZSBjb250YWlucyBhIHBvd2VyIG9mIDIgc2l6ZWQgcmFuZ2Ugb2YgY2h1bmsgc2l6ZXMgKHRoZQorICBzbWFsbGVzdCBpcyAweDEwMCA8PSB4IDwgMHgxODApLCB3aGljaCBpcyBpcyBkaXZpZGVkIGluIGhhbGYgYXQgZWFjaAorICB0cmVlIGxldmVsLCB3aXRoIHRoZSBjaHVua3MgaW4gdGhlIHNtYWxsZXIgaGFsZiBvZiB0aGUgcmFuZ2UgKDB4MTAwCisgIDw9IHggPCAweDE0MCBmb3IgdGhlIHRvcCBub3NlKSBpbiB0aGUgbGVmdCBzdWJ0cmVlIGFuZCB0aGUgbGFyZ2VyCisgIGhhbGYgKDB4MTQwIDw9IHggPCAweDE4MCkgaW4gdGhlIHJpZ2h0IHN1YnRyZWUuICBUaGlzIGlzLCBvZiBjb3Vyc2UsCisgIGRvbmUgYnkgaW5zcGVjdGluZyBpbmRpdmlkdWFsIGJpdHMuCisKKyAgVXNpbmcgdGhlc2UgcnVsZXMsIGVhY2ggbm9kZSdzIGxlZnQgc3VidHJlZSBjb250YWlucyBhbGwgc21hbGxlcgorICBzaXplcyB0aGFuIGl0cyByaWdodCBzdWJ0cmVlLiAgSG93ZXZlciwgdGhlIG5vZGUgYXQgdGhlIHJvb3Qgb2YgZWFjaAorICBzdWJ0cmVlIGhhcyBubyBwYXJ0aWN1bGFyIG9yZGVyaW5nIHJlbGF0aW9uc2hpcCB0byBlaXRoZXIuICAoVGhlCisgIGRpdmlkaW5nIGxpbmUgYmV0d2VlbiB0aGUgc3VidHJlZSBzaXplcyBpcyBiYXNlZCBvbiB0cmllIHJlbGF0aW9uLikKKyAgSWYgd2UgcmVtb3ZlIHRoZSBsYXN0IGNodW5rIG9mIGEgZ2l2ZW4gc2l6ZSBmcm9tIHRoZSBpbnRlcmlvciBvZiB0aGUKKyAgdHJlZSwgd2UgbmVlZCB0byByZXBsYWNlIGl0IHdpdGggYSBsZWFmIG5vZGUuICBUaGUgdHJlZSBvcmRlcmluZworICBydWxlcyBwZXJtaXQgYSBub2RlIHRvIGJlIHJlcGxhY2VkIGJ5IGFueSBsZWFmIGJlbG93IGl0LgorCisgIFRoZSBzbWFsbGVzdCBjaHVuayBpbiBhIHRyZWUgKGEgY29tbW9uIG9wZXJhdGlvbiBpbiBhIGJlc3QtZml0CisgIGFsbG9jYXRvcikgY2FuIGJlIGZvdW5kIGJ5IHdhbGtpbmcgYSBwYXRoIHRvIHRoZSBsZWZ0bW9zdCBsZWFmIGluCisgIHRoZSB0cmVlLiAgVW5saWtlIGEgdXN1YWwgYmluYXJ5IHRyZWUsIHdoZXJlIHdlIGZvbGxvdyBsZWZ0IGNoaWxkCisgIHBvaW50ZXJzIHVudGlsIHdlIHJlYWNoIGEgbnVsbCwgaGVyZSB3ZSBmb2xsb3cgdGhlIHJpZ2h0IGNoaWxkCisgIHBvaW50ZXIgYW55IHRpbWUgdGhlIGxlZnQgb25lIGlzIG51bGwsIHVudGlsIHdlIHJlYWNoIGEgbGVhZiB3aXRoCisgIGJvdGggY2hpbGQgcG9pbnRlcnMgbnVsbC4gVGhlIHNtYWxsZXN0IGNodW5rIGluIHRoZSB0cmVlIHdpbGwgYmUKKyAgc29tZXdoZXJlIGFsb25nIHRoYXQgcGF0aC4KKworICBUaGUgd29yc3QgY2FzZSBudW1iZXIgb2Ygc3RlcHMgdG8gYWRkLCBmaW5kLCBvciByZW1vdmUgYSBub2RlIGlzCisgIGJvdW5kZWQgYnkgdGhlIG51bWJlciBvZiBiaXRzIGRpZmZlcmVudGlhdGluZyBjaHVua3Mgd2l0aGluCisgIGJpbnMuIFVuZGVyIGN1cnJlbnQgYmluIGNhbGN1bGF0aW9ucywgdGhpcyByYW5nZXMgZnJvbSA2IHVwIHRvIDIxCisgIChmb3IgMzIgYml0IHNpemVzKSBvciB1cCB0byA1MyAoZm9yIDY0IGJpdCBzaXplcykuIFRoZSB0eXBpY2FsIGNhc2UKKyAgaXMgb2YgY291cnNlIG11Y2ggYmV0dGVyLgorKi8KKworc3RydWN0IG1hbGxvY190cmVlX2NodW5rIHsKKyAgLyogVGhlIGZpcnN0IGZvdXIgZmllbGRzIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIG1hbGxvY19jaHVuayAqLworICBzaXplX3QgICAgICAgICAgICAgICAgICAgIHByZXZfZm9vdDsKKyAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICBoZWFkOworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGZkOworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGJrOworCisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogY2hpbGRbMl07CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogcGFyZW50OworICBiaW5kZXhfdCAgICAgICAgICAgICAgICAgIGluZGV4OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgIHRjaHVuazsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiB0Y2h1bmtwdHI7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogdGJpbnB0cjsgLyogVGhlIHR5cGUgb2YgYmlucyBvZiB0cmVlcyAqLworCisvKiBBIGxpdHRsZSBoZWxwZXIgbWFjcm8gZm9yIHRyZWVzICovCisjZGVmaW5lIGxlZnRtb3N0X2NoaWxkKHQpICgodCktPmNoaWxkWzBdICE9IDA/ICh0KS0+Y2hpbGRbMF0gOiAodCktPmNoaWxkWzFdKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTZWdtZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBFYWNoIG1hbGxvYyBzcGFjZSBtYXkgaW5jbHVkZSBub24tY29udGlndW91cyBzZWdtZW50cywgaGVsZCBpbiBhCisgIGxpc3QgaGVhZGVkIGJ5IGFuIGVtYmVkZGVkIG1hbGxvY19zZWdtZW50IHJlY29yZCByZXByZXNlbnRpbmcgdGhlCisgIHRvcC1tb3N0IHNwYWNlLiBTZWdtZW50cyBhbHNvIGluY2x1ZGUgZmxhZ3MgaG9sZGluZyBwcm9wZXJ0aWVzIG9mCisgIHRoZSBzcGFjZS4gTGFyZ2UgY2h1bmtzIHRoYXQgYXJlIGRpcmVjdGx5IGFsbG9jYXRlZCBieSBtbWFwIGFyZSBub3QKKyAgaW5jbHVkZWQgaW4gdGhpcyBsaXN0LiBUaGV5IGFyZSBpbnN0ZWFkIGluZGVwZW5kZW50bHkgY3JlYXRlZCBhbmQKKyAgZGVzdHJveWVkIHdpdGhvdXQgb3RoZXJ3aXNlIGtlZXBpbmcgdHJhY2sgb2YgdGhlbS4KKworICBTZWdtZW50IG1hbmFnZW1lbnQgbWFpbmx5IGNvbWVzIGludG8gcGxheSBmb3Igc3BhY2VzIGFsbG9jYXRlZCBieQorICBNTUFQLiAgQW55IGNhbGwgdG8gTU1BUCBtaWdodCBvciBtaWdodCBub3QgcmV0dXJuIG1lbW9yeSB0aGF0IGlzCisgIGFkamFjZW50IHRvIGFuIGV4aXN0aW5nIHNlZ21lbnQuICBNT1JFQ09SRSBub3JtYWxseSBjb250aWd1b3VzbHkKKyAgZXh0ZW5kcyB0aGUgY3VycmVudCBzcGFjZSwgc28gdGhpcyBzcGFjZSBpcyBhbG1vc3QgYWx3YXlzIGFkamFjZW50LAorICB3aGljaCBpcyBzaW1wbGVyIGFuZCBmYXN0ZXIgdG8gZGVhbCB3aXRoLiAoVGhpcyBpcyB3aHkgTU9SRUNPUkUgaXMKKyAgdXNlZCBwcmVmZXJlbnRpYWxseSB0byBNTUFQIHdoZW4gYm90aCBhcmUgYXZhaWxhYmxlIC0tIHNlZQorICBzeXNfYWxsb2MuKSAgV2hlbiBhbGxvY2F0aW5nIHVzaW5nIE1NQVAsIHdlIGRvbid0IHVzZSBhbnkgb2YgdGhlCisgIGhpbnRpbmcgbWVjaGFuaXNtcyAoaW5jb25zaXN0ZW50bHkpIHN1cHBvcnRlZCBpbiB2YXJpb3VzCisgIGltcGxlbWVudGF0aW9ucyBvZiB1bml4IG1tYXAsIG9yIGRpc3Rpbmd1aXNoIHJlc2VydmluZyBmcm9tCisgIGNvbW1pdHRpbmcgbWVtb3J5LiBJbnN0ZWFkLCB3ZSBqdXN0IGFzayBmb3Igc3BhY2UsIGFuZCBleHBsb2l0CisgIGNvbnRpZ3VpdHkgd2hlbiB3ZSBnZXQgaXQuICBJdCBpcyBwcm9iYWJseSBwb3NzaWJsZSB0byBkbworICBiZXR0ZXIgdGhhbiB0aGlzIG9uIHNvbWUgc3lzdGVtcywgYnV0IG5vIGdlbmVyYWwgc2NoZW1lIHNlZW1zCisgIHRvIGJlIHNpZ25pZmljYW50bHkgYmV0dGVyLgorCisgIE1hbmFnZW1lbnQgZW50YWlscyBhIHNpbXBsZXIgdmFyaWFudCBvZiB0aGUgY29uc29saWRhdGlvbiBzY2hlbWUKKyAgdXNlZCBmb3IgY2h1bmtzIHRvIHJlZHVjZSBmcmFnbWVudGF0aW9uIC0tIG5ldyBhZGphY2VudCBtZW1vcnkgaXMKKyAgbm9ybWFsbHkgcHJlcGVuZGVkIG9yIGFwcGVuZGVkIHRvIGFuIGV4aXN0aW5nIHNlZ21lbnQuIEhvd2V2ZXIsCisgIHRoZXJlIGFyZSBsaW1pdGF0aW9ucyBjb21wYXJlZCB0byBjaHVuayBjb25zb2xpZGF0aW9uIHRoYXQgbW9zdGx5CisgIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCBzZWdtZW50IHByb2Nlc3NpbmcgaXMgcmVsYXRpdmVseSBpbmZyZXF1ZW50CisgIChvY2N1cnJpbmcgb25seSB3aGVuIGdldHRpbmcgbWVtb3J5IGZyb20gc3lzdGVtKSBhbmQgdGhhdCB3ZQorICBkb24ndCBleHBlY3QgdG8gaGF2ZSBodWdlIG51bWJlcnMgb2Ygc2VnbWVudHM6CisKKyAgKiBTZWdtZW50cyBhcmUgbm90IGluZGV4ZWQsIHNvIHRyYXZlcnNhbCByZXF1aXJlcyBsaW5lYXIgc2NhbnMuICAoSXQKKyAgICB3b3VsZCBiZSBwb3NzaWJsZSB0byBpbmRleCB0aGVzZSwgYnV0IGlzIG5vdCB3b3J0aCB0aGUgZXh0cmEKKyAgICBvdmVyaGVhZCBhbmQgY29tcGxleGl0eSBmb3IgbW9zdCBwcm9ncmFtcyBvbiBtb3N0IHBsYXRmb3Jtcy4pCisgICogTmV3IHNlZ21lbnRzIGFyZSBvbmx5IGFwcGVuZGVkIHRvIG9sZCBvbmVzIHdoZW4gaG9sZGluZyB0b3AtbW9zdAorICAgIG1lbW9yeTsgaWYgdGhleSBjYW5ub3QgYmUgcHJlcGVuZGVkIHRvIG90aGVycywgdGhleSBhcmUgaGVsZCBpbgorICAgIGRpZmZlcmVudCBzZWdtZW50cy4KKworICBFeGNlcHQgZm9yIHRoZSB0b3AtbW9zdCBzZWdtZW50IG9mIGFuIG1zdGF0ZSwgZWFjaCBzZWdtZW50IHJlY29yZAorICBpcyBrZXB0IGF0IHRoZSB0YWlsIG9mIGl0cyBzZWdtZW50LiBTZWdtZW50cyBhcmUgYWRkZWQgYnkgcHVzaGluZworICBzZWdtZW50IHJlY29yZHMgb250byB0aGUgbGlzdCBoZWFkZWQgYnkgJm1zdGF0ZS5zZWcgZm9yIHRoZQorICBjb250YWluaW5nIG1zdGF0ZS4KKworICBTZWdtZW50IGZsYWdzIGNvbnRyb2wgYWxsb2NhdGlvbi9tZXJnZS9kZWFsbG9jYXRpb24gcG9saWNpZXM6CisgICogSWYgRVhURVJOX0JJVCBzZXQsIHRoZW4gd2UgZGlkIG5vdCBhbGxvY2F0ZSB0aGlzIHNlZ21lbnQsCisgICAgYW5kIHNvIHNob3VsZCBub3QgdHJ5IHRvIGRlYWxsb2NhdGUgb3IgbWVyZ2Ugd2l0aCBvdGhlcnMuCisgICAgKFRoaXMgY3VycmVudGx5IGhvbGRzIG9ubHkgZm9yIHRoZSBpbml0aWFsIHNlZ21lbnQgcGFzc2VkCisgICAgaW50byBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZS4pCisgICogSWYgSVNfTU1BUFBFRF9CSVQgc2V0LCB0aGUgc2VnbWVudCBtYXkgYmUgbWVyZ2VkIHdpdGgKKyAgICBvdGhlciBzdXJyb3VuZGluZyBtbWFwcGVkIHNlZ21lbnRzIGFuZCB0cmltbWVkL2RlLWFsbG9jYXRlZAorICAgIHVzaW5nIG11bm1hcC4KKyAgKiBJZiBuZWl0aGVyIGJpdCBpcyBzZXQsIHRoZW4gdGhlIHNlZ21lbnQgd2FzIG9idGFpbmVkIHVzaW5nCisgICAgTU9SRUNPUkUgc28gY2FuIGJlIG1lcmdlZCB3aXRoIHN1cnJvdW5kaW5nIE1PUkVDT1JFJ2Qgc2VnbWVudHMKKyAgICBhbmQgZGVhbGxvY2F0ZWQvdHJpbW1lZCB1c2luZyBNT1JFQ09SRSB3aXRoIG5lZ2F0aXZlIGFyZ3VtZW50cy4KKyovCisKK3N0cnVjdCBtYWxsb2Nfc2VnbWVudCB7CisgIGNoYXIqICAgICAgICBiYXNlOyAgICAgICAgICAgICAvKiBiYXNlIGFkZHJlc3MgKi8KKyAgc2l6ZV90ICAgICAgIHNpemU7ICAgICAgICAgICAgIC8qIGFsbG9jYXRlZCBzaXplICovCisgIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCogbmV4dDsgICAvKiBwdHIgdG8gbmV4dCBzZWdtZW50ICovCisgIGZsYWdfdCAgICAgICBzZmxhZ3M7ICAgICAgICAgICAvKiBtbWFwIGFuZCBleHRlcm4gZmxhZyAqLworfTsKKworI2RlZmluZSBpc19tbWFwcGVkX3NlZ21lbnQoUykgICgoUyktPnNmbGFncyAmIElTX01NQVBQRURfQklUKQorI2RlZmluZSBpc19leHRlcm5fc2VnbWVudChTKSAgICgoUyktPnNmbGFncyAmIEVYVEVSTl9CSVQpCisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zZWdtZW50ICBtc2VnbWVudDsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zZWdtZW50KiBtc2VnbWVudHB0cjsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxsb2Nfc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgIEEgbWFsbG9jX3N0YXRlIGhvbGRzIGFsbCBvZiB0aGUgYm9va2tlZXBpbmcgZm9yIGEgc3BhY2UuCisgICBUaGUgbWFpbiBmaWVsZHMgYXJlOgorCisgIFRvcAorICAgIFRoZSB0b3Btb3N0IGNodW5rIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNlZ21lbnQuIEl0cyBzaXplIGlzCisgICAgY2FjaGVkIGluIHRvcHNpemUuICBUaGUgYWN0dWFsIHNpemUgb2YgdG9wbW9zdCBzcGFjZSBpcworICAgIHRvcHNpemUrVE9QX0ZPT1RfU0laRSwgd2hpY2ggaW5jbHVkZXMgc3BhY2UgcmVzZXJ2ZWQgZm9yIGFkZGluZworICAgIGZlbmNlcG9zdHMgYW5kIHNlZ21lbnQgcmVjb3JkcyBpZiBuZWNlc3Nhcnkgd2hlbiBnZXR0aW5nIG1vcmUKKyAgICBzcGFjZSBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgc2l6ZSBhdCB3aGljaCB0byBhdXRvdHJpbSB0b3AgaXMKKyAgICBjYWNoZWQgZnJvbSBtcGFyYW1zIGluIHRyaW1fY2hlY2ssIGV4Y2VwdCB0aGF0IGl0IGlzIGRpc2FibGVkIGlmCisgICAgYW4gYXV0b3RyaW0gZmFpbHMuCisKKyAgRGVzaWduYXRlZCB2aWN0aW0gKGR2KQorICAgIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBjaHVuayBmb3Igc2VydmljaW5nIHNtYWxsIHJlcXVlc3RzIHRoYXQKKyAgICBkb24ndCBoYXZlIGV4YWN0IGZpdHMuICBJdCBpcyBub3JtYWxseSB0aGUgY2h1bmsgc3BsaXQgb2ZmIG1vc3QKKyAgICByZWNlbnRseSB0byBzZXJ2aWNlIGFub3RoZXIgc21hbGwgcmVxdWVzdC4gIEl0cyBzaXplIGlzIGNhY2hlZCBpbgorICAgIGR2c2l6ZS4gVGhlIGxpbmsgZmllbGRzIG9mIHRoaXMgY2h1bmsgYXJlIG5vdCBtYWludGFpbmVkIHNpbmNlIGl0CisgICAgaXMgbm90IGtlcHQgaW4gYSBiaW4uCisKKyAgU21hbGxCaW5zCisgICAgQW4gYXJyYXkgb2YgYmluIGhlYWRlcnMgZm9yIGZyZWUgY2h1bmtzLiAgVGhlc2UgYmlucyBob2xkIGNodW5rcworICAgIHdpdGggc2l6ZXMgbGVzcyB0aGFuIE1JTl9MQVJHRV9TSVpFIGJ5dGVzLiBFYWNoIGJpbiBjb250YWlucworICAgIGNodW5rcyBvZiBhbGwgdGhlIHNhbWUgc2l6ZSwgc3BhY2VkIDggYnl0ZXMgYXBhcnQuICBUbyBzaW1wbGlmeQorICAgIHVzZSBpbiBkb3VibGUtbGlua2VkIGxpc3RzLCBlYWNoIGJpbiBoZWFkZXIgYWN0cyBhcyBhIG1hbGxvY19jaHVuaworICAgIHBvaW50aW5nIHRvIHRoZSByZWFsIGZpcnN0IG5vZGUsIGlmIGl0IGV4aXN0cyAoZWxzZSBwb2ludGluZyB0bworICAgIGl0c2VsZikuICBUaGlzIGF2b2lkcyBzcGVjaWFsLWNhc2luZyBmb3IgaGVhZGVycy4gIEJ1dCB0byBhdm9pZAorICAgIHdhc3RlLCB3ZSBhbGxvY2F0ZSBvbmx5IHRoZSBmZC9iayBwb2ludGVycyBvZiBiaW5zLCBhbmQgdGhlbiB1c2UKKyAgICByZXBvc2l0aW9uaW5nIHRyaWNrcyB0byB0cmVhdCB0aGVzZSBhcyB0aGUgZmllbGRzIG9mIGEgY2h1bmsuCisKKyAgVHJlZUJpbnMKKyAgICBUcmVlYmlucyBhcmUgcG9pbnRlcnMgdG8gdGhlIHJvb3RzIG9mIHRyZWVzIGhvbGRpbmcgYSByYW5nZSBvZgorICAgIHNpemVzLiBUaGVyZSBhcmUgMiBlcXVhbGx5IHNwYWNlZCB0cmVlYmlucyBmb3IgZWFjaCBwb3dlciBvZiB0d28KKyAgICBmcm9tIFRSRUVfU0hJRlQgdG8gVFJFRV9TSElGVCsxNi4gVGhlIGxhc3QgYmluIGhvbGRzIGFueXRoaW5nCisgICAgbGFyZ2VyLgorCisgIEJpbiBtYXBzCisgICAgVGhlcmUgaXMgb25lIGJpdCBtYXAgZm9yIHNtYWxsIGJpbnMgKCJzbWFsbG1hcCIpIGFuZCBvbmUgZm9yCisgICAgdHJlZWJpbnMgKCJ0cmVlbWFwKS4gIEVhY2ggYmluIHNldHMgaXRzIGJpdCB3aGVuIG5vbi1lbXB0eSwgYW5kCisgICAgY2xlYXJzIHRoZSBiaXQgd2hlbiBlbXB0eS4gIEJpdCBvcGVyYXRpb25zIGFyZSB0aGVuIHVzZWQgdG8gYXZvaWQKKyAgICBiaW4tYnktYmluIHNlYXJjaGluZyAtLSBuZWFybHkgYWxsICJzZWFyY2giIGlzIGRvbmUgd2l0aG91dCBldmVyCisgICAgbG9va2luZyBhdCBiaW5zIHRoYXQgd29uJ3QgYmUgc2VsZWN0ZWQuICBUaGUgYml0IG1hcHMKKyAgICBjb25zZXJ2YXRpdmVseSB1c2UgMzIgYml0cyBwZXIgbWFwIHdvcmQsIGV2ZW4gaWYgb24gNjRiaXQgc3lzdGVtLgorICAgIEZvciBhIGdvb2QgZGVzY3JpcHRpb24gb2Ygc29tZSBvZiB0aGUgYml0LWJhc2VkIHRlY2huaXF1ZXMgdXNlZAorICAgIGhlcmUsIHNlZSBIZW5yeSBTLiBXYXJyZW4gSnIncyBib29rICJIYWNrZXIncyBEZWxpZ2h0IiAoYW5kCisgICAgc3VwcGxlbWVudCBhdCBodHRwOi8vaGFja2Vyc2RlbGlnaHQub3JnLykuIE1hbnkgb2YgdGhlc2UgYXJlCisgICAgaW50ZW5kZWQgdG8gcmVkdWNlIHRoZSBicmFuY2hpbmVzcyBvZiBwYXRocyB0aHJvdWdoIG1hbGxvYyBldGMsIGFzCisgICAgd2VsbCBhcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBtZW1vcnkgbG9jYXRpb25zIHJlYWQgb3Igd3JpdHRlbi4KKworICBTZWdtZW50cworICAgIEEgbGlzdCBvZiBzZWdtZW50cyBoZWFkZWQgYnkgYW4gZW1iZWRkZWQgbWFsbG9jX3NlZ21lbnQgcmVjb3JkCisgICAgcmVwcmVzZW50aW5nIHRoZSBpbml0aWFsIHNwYWNlLgorCisgIEFkZHJlc3MgY2hlY2sgc3VwcG9ydAorICAgIFRoZSBsZWFzdF9hZGRyIGZpZWxkIGlzIHRoZSBsZWFzdCBhZGRyZXNzIGV2ZXIgb2J0YWluZWQgZnJvbQorICAgIE1PUkVDT1JFIG9yIE1NQVAuIEF0dGVtcHRlZCBmcmVlcyBhbmQgcmVhbGxvY3Mgb2YgYW55IGFkZHJlc3MgbGVzcworICAgIHRoYW4gdGhpcyBhcmUgdHJhcHBlZCAodW5sZXNzIElOU0VDVVJFIGlzIGRlZmluZWQpLgorCisgIE1hZ2ljIHRhZworICAgIEEgY3Jvc3MtY2hlY2sgZmllbGQgdGhhdCBzaG91bGQgYWx3YXlzIGhvbGQgc2FtZSB2YWx1ZSBhcyBtcGFyYW1zLm1hZ2ljLgorCisgIEZsYWdzCisgICAgQml0cyByZWNvcmRpbmcgd2hldGhlciB0byB1c2UgTU1BUCwgbG9ja3MsIG9yIGNvbnRpZ3VvdXMgTU9SRUNPUkUKKworICBTdGF0aXN0aWNzCisgICAgRWFjaCBzcGFjZSBrZWVwcyB0cmFjayBvZiBjdXJyZW50IGFuZCBtYXhpbXVtIHN5c3RlbSBtZW1vcnkKKyAgICBvYnRhaW5lZCB2aWEgTU9SRUNPUkUgb3IgTU1BUC4KKworICBUcmltIHN1cHBvcnQKKyAgICBGaWVsZHMgaG9sZGluZyB0aGUgYW1vdW50IG9mIHVudXNlZCB0b3Btb3N0IG1lbW9yeSB0aGF0IHNob3VsZCB0cmlnZ2VyCisgICAgdGltbWluZywgYW5kIGEgY291bnRlciB0byBmb3JjZSBwZXJpb2RpYyBzY2FubmluZyB0byByZWxlYXNlIHVudXNlZAorICAgIG5vbi10b3Btb3N0IHNlZ21lbnRzLgorCisgIExvY2tpbmcKKyAgICBJZiBVU0VfTE9DS1MgaXMgZGVmaW5lZCwgdGhlICJtdXRleCIgbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVsZWFzZWQKKyAgICBhcm91bmQgZXZlcnkgcHVibGljIGNhbGwgdXNpbmcgdGhpcyBtc3BhY2UuCisKKyAgRXh0ZW5zaW9uIHN1cHBvcnQKKyAgICBBIHZvaWQqIHBvaW50ZXIgYW5kIGEgc2l6ZV90IGZpZWxkIHRoYXQgY2FuIGJlIHVzZWQgdG8gaGVscCBpbXBsZW1lbnQKKyAgICBleHRlbnNpb25zIHRvIHRoaXMgbWFsbG9jLgorKi8KKworLyogQmluIHR5cGVzLCB3aWR0aHMgYW5kIHNpemVzICovCisjZGVmaW5lIE5TTUFMTEJJTlMgICAgICAgICgzMlUpCisjZGVmaW5lIE5UUkVFQklOUyAgICAgICAgICgzMlUpCisjZGVmaW5lIFNNQUxMQklOX1NISUZUICAgICgzVSkKKyNkZWZpbmUgU01BTExCSU5fV0lEVEggICAgKFNJWkVfVF9PTkUgPDwgU01BTExCSU5fU0hJRlQpCisjZGVmaW5lIFRSRUVCSU5fU0hJRlQgICAgICg4VSkKKyNkZWZpbmUgTUlOX0xBUkdFX1NJWkUgICAgKFNJWkVfVF9PTkUgPDwgVFJFRUJJTl9TSElGVCkKKyNkZWZpbmUgTUFYX1NNQUxMX1NJWkUgICAgKE1JTl9MQVJHRV9TSVpFIC0gU0laRV9UX09ORSkKKyNkZWZpbmUgTUFYX1NNQUxMX1JFUVVFU1QgKE1BWF9TTUFMTF9TSVpFIC0gQ0hVTktfQUxJR05fTUFTSyAtIENIVU5LX09WRVJIRUFEKQorCitzdHJ1Y3QgbWFsbG9jX3N0YXRlIHsKKyAgYmlubWFwX3QgICBzbWFsbG1hcDsKKyAgYmlubWFwX3QgICB0cmVlbWFwOworICBzaXplX3QgICAgIGR2c2l6ZTsKKyAgc2l6ZV90ICAgICB0b3BzaXplOworICBjaGFyKiAgICAgIGxlYXN0X2FkZHI7CisgIG1jaHVua3B0ciAgZHY7CisgIG1jaHVua3B0ciAgdG9wOworICBzaXplX3QgICAgIHRyaW1fY2hlY2s7CisgIHNpemVfdCAgICAgcmVsZWFzZV9jaGVja3M7CisgIHNpemVfdCAgICAgbWFnaWM7CisgIG1jaHVua3B0ciAgc21hbGxiaW5zWyhOU01BTExCSU5TKzEpKjJdOworICB0YmlucHRyICAgIHRyZWViaW5zW05UUkVFQklOU107CisgIHNpemVfdCAgICAgZm9vdHByaW50OworICBzaXplX3QgICAgIG1heF9mb290cHJpbnQ7CisgIGZsYWdfdCAgICAgbWZsYWdzOworI2lmIFVTRV9MT0NLUworICBNTE9DS19UICAgIG11dGV4OyAgICAgLyogbG9jYXRlIGxvY2sgYW1vbmcgZmllbGRzIHRoYXQgcmFyZWx5IGNoYW5nZSAqLworI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworICBtc2VnbWVudCAgIHNlZzsKKyAgdm9pZCogICAgICBleHRwOyAgICAgIC8qIFVudXNlZCBidXQgYXZhaWxhYmxlIGZvciBleHRlbnNpb25zICovCisgIHNpemVfdCAgICAgZXh0czsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zdGF0ZSogICAgbXN0YXRlOworCisvKiAtLS0tLS0tLS0tLS0tIEdsb2JhbCBtYWxsb2Nfc3RhdGUgYW5kIG1hbGxvY19wYXJhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBtYWxsb2NfcGFyYW1zIGhvbGRzIGdsb2JhbCBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgdGhvc2UgdGhhdCBjYW4gYmUKKyAgZHluYW1pY2FsbHkgc2V0IHVzaW5nIG1hbGxvcHQuIFRoZXJlIGlzIGEgc2luZ2xlIGluc3RhbmNlLCBtcGFyYW1zLAorICBpbml0aWFsaXplZCBpbiBpbml0X21wYXJhbXMuIE5vdGUgdGhhdCB0aGUgbm9uLXplcm9uZXNzIG9mICJtYWdpYyIKKyAgYWxzbyBzZXJ2ZXMgYXMgYW4gaW5pdGlhbGl6YXRpb24gZmxhZy4KKyovCisKK3N0cnVjdCBtYWxsb2NfcGFyYW1zIHsKKyAgdm9sYXRpbGUgc2l6ZV90IG1hZ2ljOworICBzaXplX3QgcGFnZV9zaXplOworICBzaXplX3QgZ3JhbnVsYXJpdHk7CisgIHNpemVfdCBtbWFwX3RocmVzaG9sZDsKKyAgc2l6ZV90IHRyaW1fdGhyZXNob2xkOworICBmbGFnX3QgZGVmYXVsdF9tZmxhZ3M7Cit9OworCitzdGF0aWMgc3RydWN0IG1hbGxvY19wYXJhbXMgbXBhcmFtczsKKworLyogRW5zdXJlIG1wYXJhbXMgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgZW5zdXJlX2luaXRpYWxpemF0aW9uKCkgKCh2b2lkKShtcGFyYW1zLm1hZ2ljICE9IDAgfHwgaW5pdF9tcGFyYW1zKCkpKQorCisjaWYgIU9OTFlfTVNQQUNFUworCisvKiBUaGUgZ2xvYmFsIG1hbGxvY19zdGF0ZSB1c2VkIGZvciBhbGwgbm9uLSJtc3BhY2UiIGNhbGxzICovCitzdGF0aWMgc3RydWN0IG1hbGxvY19zdGF0ZSBfZ21fOworI2RlZmluZSBnbSAgICAgICAgICAgICAgICAgKCZfZ21fKQorI2RlZmluZSBpc19nbG9iYWwoTSkgICAgICAgKChNKSA9PSAmX2dtXykKKworI2VuZGlmIC8qICFPTkxZX01TUEFDRVMgKi8KKworI2RlZmluZSBpc19pbml0aWFsaXplZChNKSAgKChNKS0+dG9wICE9IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN5c3RlbSBhbGxvYyBzZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE9wZXJhdGlvbnMgb24gbWZsYWdzICovCisKKyNkZWZpbmUgdXNlX2xvY2soTSkgICAgICAgICAgICgoTSktPm1mbGFncyAmICAgVVNFX0xPQ0tfQklUKQorI2RlZmluZSBlbmFibGVfbG9jayhNKSAgICAgICAgKChNKS0+bWZsYWdzIHw9ICBVU0VfTE9DS19CSVQpCisjZGVmaW5lIGRpc2FibGVfbG9jayhNKSAgICAgICAoKE0pLT5tZmxhZ3MgJj0gflVTRV9MT0NLX0JJVCkKKworI2RlZmluZSB1c2VfbW1hcChNKSAgICAgICAgICAgKChNKS0+bWZsYWdzICYgICBVU0VfTU1BUF9CSVQpCisjZGVmaW5lIGVuYWJsZV9tbWFwKE0pICAgICAgICAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9NTUFQX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9tbWFwKE0pICAgICAgICgoTSktPm1mbGFncyAmPSB+VVNFX01NQVBfQklUKQorCisjZGVmaW5lIHVzZV9ub25jb250aWd1b3VzKE0pICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9OT05DT05USUdVT1VTX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9jb250aWd1b3VzKE0pICgoTSktPm1mbGFncyB8PSAgVVNFX05PTkNPTlRJR1VPVVNfQklUKQorCisjZGVmaW5lIHNldF9sb2NrKE0sTClcCisgKChNKS0+bWZsYWdzID0gKEwpP1wKKyAgKChNKS0+bWZsYWdzIHwgVVNFX0xPQ0tfQklUKSA6XAorICAoKE0pLT5tZmxhZ3MgJiB+VVNFX0xPQ0tfQklUKSkKKworLyogcGFnZS1hbGlnbiBhIHNpemUgKi8KKyNkZWZpbmUgcGFnZV9hbGlnbihTKVwKKyAoKChTKSArIChtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKSAmIH4obXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkKKworLyogZ3JhbnVsYXJpdHktYWxpZ24gYSBzaXplICovCisjZGVmaW5lIGdyYW51bGFyaXR5X2FsaWduKFMpXAorICAoKChTKSArIChtcGFyYW1zLmdyYW51bGFyaXR5IC0gU0laRV9UX09ORSkpXAorICAgJiB+KG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSkKKworCisvKiBGb3IgbW1hcCwgdXNlIGdyYW51bGFyaXR5IGFsaWdubWVudCBvbiB3aW5kb3dzLCBlbHNlIHBhZ2UtYWxpZ24gKi8KKyNpZmRlZiBXSU4zMgorI2RlZmluZSBtbWFwX2FsaWduKFMpIGdyYW51bGFyaXR5X2FsaWduKFMpCisjZWxzZQorI2RlZmluZSBtbWFwX2FsaWduKFMpIHBhZ2VfYWxpZ24oUykKKyNlbmRpZgorCisvKiBGb3Igc3lzX2FsbG9jLCBlbm91Z2ggcGFkZGluZyB0byBlbnN1cmUgY2FuIG1hbGxvYyByZXF1ZXN0IG9uIHN1Y2Nlc3MgKi8KKyNkZWZpbmUgU1lTX0FMTE9DX1BBRERJTkcgKFRPUF9GT09UX1NJWkUgKyBNQUxMT0NfQUxJR05NRU5UKQorCisjZGVmaW5lIGlzX3BhZ2VfYWxpZ25lZChTKVwKKyAgICgoKHNpemVfdCkoUykgJiAobXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkgPT0gMCkKKyNkZWZpbmUgaXNfZ3JhbnVsYXJpdHlfYWxpZ25lZChTKVwKKyAgICgoKHNpemVfdCkoUykgJiAobXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKSA9PSAwKQorCisvKiAgVHJ1ZSBpZiBzZWdtZW50IFMgaG9sZHMgYWRkcmVzcyBBICovCisjZGVmaW5lIHNlZ21lbnRfaG9sZHMoUywgQSlcCisgICgoY2hhciopKEEpID49IFMtPmJhc2UgJiYgKGNoYXIqKShBKSA8IFMtPmJhc2UgKyBTLT5zaXplKQorCisvKiBSZXR1cm4gc2VnbWVudCBob2xkaW5nIGdpdmVuIGFkZHJlc3MgKi8KK3N0YXRpYyBtc2VnbWVudHB0ciBzZWdtZW50X2hvbGRpbmcobXN0YXRlIG0sIGNoYXIqIGFkZHIpIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICBmb3IgKDs7KSB7CisgICAgaWYgKGFkZHIgPj0gc3AtPmJhc2UgJiYgYWRkciA8IHNwLT5iYXNlICsgc3AtPnNpemUpCisgICAgICByZXR1cm4gc3A7CisgICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQorICAgICAgcmV0dXJuIDA7CisgIH0KK30KKworLyogUmV0dXJuIHRydWUgaWYgc2VnbWVudCBjb250YWlucyBhIHNlZ21lbnQgbGluayAqLworc3RhdGljIGludCBoYXNfc2VnbWVudF9saW5rKG1zdGF0ZSBtLCBtc2VnbWVudHB0ciBzcykgeworICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgIGZvciAoOzspIHsKKyAgICBpZiAoKGNoYXIqKXNwID49IHNzLT5iYXNlICYmIChjaGFyKilzcCA8IHNzLT5iYXNlICsgc3MtPnNpemUpCisgICAgICByZXR1cm4gMTsKKyAgICBpZiAoKHNwID0gc3AtPm5leHQpID09IDApCisgICAgICByZXR1cm4gMDsKKyAgfQorfQorCisjaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNCisjZGVmaW5lIHNob3VsZF90cmltKE0scykgICgocykgPiAoTSktPnRyaW1fY2hlY2spCisjZWxzZSAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNkZWZpbmUgc2hvdWxkX3RyaW0oTSxzKSAgKDApCisjZW5kaWYgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKworLyoKKyAgVE9QX0ZPT1RfU0laRSBpcyBwYWRkaW5nIGF0IHRoZSBlbmQgb2YgYSBzZWdtZW50LCBpbmNsdWRpbmcgc3BhY2UKKyAgdGhhdCBtYXkgYmUgbmVlZGVkIHRvIHBsYWNlIHNlZ21lbnQgcmVjb3JkcyBhbmQgZmVuY2Vwb3N0cyB3aGVuIG5ldworICBub25jb250aWd1b3VzIHNlZ21lbnRzIGFyZSBhZGRlZC4KKyovCisjZGVmaW5lIFRPUF9GT09UX1NJWkVcCisgIChhbGlnbl9vZmZzZXQoY2h1bmsybWVtKDApKStwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zZWdtZW50KSkrTUlOX0NIVU5LX1NJWkUpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSG9va3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgUFJFQUNUSU9OIHNob3VsZCBiZSBkZWZpbmVkIHRvIHJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuZCBub256ZXJvIG9uCisgIGZhaWx1cmUuIElmIHlvdSBhcmUgbm90IHVzaW5nIGxvY2tpbmcsIHlvdSBjYW4gcmVkZWZpbmUgdGhlc2UgdG8gZG8KKyAgYW55dGhpbmcgeW91IGxpa2UuCisqLworCisjaWYgVVNFX0xPQ0tTCisKKyNkZWZpbmUgUFJFQUNUSU9OKE0pICAoKHVzZV9sb2NrKE0pKT8gQUNRVUlSRV9MT0NLKCYoTSktPm11dGV4KSA6IDApCisjZGVmaW5lIFBPU1RBQ1RJT04oTSkgeyBpZiAodXNlX2xvY2soTSkpIFJFTEVBU0VfTE9DSygmKE0pLT5tdXRleCk7IH0KKyNlbHNlIC8qIFVTRV9MT0NLUyAqLworCisjaWZuZGVmIFBSRUFDVElPTgorI2RlZmluZSBQUkVBQ1RJT04oTSkgKDApCisjZW5kaWYgIC8qIFBSRUFDVElPTiAqLworCisjaWZuZGVmIFBPU1RBQ1RJT04KKyNkZWZpbmUgUE9TVEFDVElPTihNKQorI2VuZGlmICAvKiBQT1NUQUNUSU9OICovCisKKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKworLyoKKyAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gaXMgdHJpZ2dlcmVkIHVwb24gZGV0ZWN0ZWQgYmFkIGFkZHJlc3Nlcy4KKyAgVVNBR0VfRVJST1JfQUNUSU9OIGlzIHRyaWdnZXJlZCBvbiBkZXRlY3RlZCBiYWQgZnJlZXMgYW5kCisgIHJlYWxsb2NzLiBUaGUgYXJndW1lbnQgcCBpcyBhbiBhZGRyZXNzIHRoYXQgbWlnaHQgaGF2ZSB0cmlnZ2VyZWQgdGhlCisgIGZhdWx0LiBJdCBpcyBpZ25vcmVkIGJ5IHRoZSB0d28gcHJlZGVmaW5lZCBhY3Rpb25zLCBidXQgbWlnaHQgYmUKKyAgdXNlZnVsIGluIGN1c3RvbSBhY3Rpb25zIHRoYXQgdHJ5IHRvIGhlbHAgZGlhZ25vc2UgZXJyb3JzLgorKi8KKworI2lmIFBST0NFRURfT05fRVJST1IKKworLyogQSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGNvcnJ1cHRpb24gZXJyb3JzIGNhdXNpbmcgcmVzZXRzICovCitpbnQgbWFsbG9jX2NvcnJ1cHRpb25fZXJyb3JfY291bnQ7CisKKy8qIGRlZmF1bHQgY29ycnVwdGlvbiBhY3Rpb24gKi8KK3N0YXRpYyB2b2lkIHJlc2V0X29uX2Vycm9yKG1zdGF0ZSBtKTsKKworI2RlZmluZSBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKSAgcmVzZXRfb25fZXJyb3IobSkKKyNkZWZpbmUgVVNBR0VfRVJST1JfQUNUSU9OKG0sIHApCisKKyNlbHNlIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworI2lmbmRlZiBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTgorI2RlZmluZSBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKSBBQk9SVAorI2VuZGlmIC8qIENPUlJVUFRJT05fRVJST1JfQUNUSU9OICovCisKKyNpZm5kZWYgVVNBR0VfRVJST1JfQUNUSU9OCisjZGVmaW5lIFVTQUdFX0VSUk9SX0FDVElPTihtLHApIEFCT1JUCisjZW5kaWYgLyogVVNBR0VfRVJST1JfQUNUSU9OICovCisKKyNlbmRpZiAvKiBQUk9DRUVEX09OX0VSUk9SICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlYnVnZ2luZyBzZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhIERFQlVHCisKKyNkZWZpbmUgY2hlY2tfZnJlZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jZWRfY2h1bmsoTSxQLE4pCisjZGVmaW5lIGNoZWNrX21tYXBwZWRfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2Nfc3RhdGUoTSkKKyNkZWZpbmUgY2hlY2tfdG9wX2NodW5rKE0sUCkKKworI2Vsc2UgLyogREVCVUcgKi8KKyNkZWZpbmUgY2hlY2tfZnJlZV9jaHVuayhNLFApICAgICAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19pbnVzZV9jaHVuayhNLFApICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja190b3BfY2h1bmsoTSxQKSAgICAgICAgZG9fY2hlY2tfdG9wX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jZWRfY2h1bmsoTSxQLE4pIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKQorI2RlZmluZSBjaGVja19tbWFwcGVkX2NodW5rKE0sUCkgICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY19zdGF0ZShNKSAgICAgICBkb19jaGVja19tYWxsb2Nfc3RhdGUoTSkKKworc3RhdGljIHZvaWQgICBkb19jaGVja19hbnlfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdG9wX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfZnJlZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19tYWxsb2NlZF9jaHVuayhtc3RhdGUgbSwgdm9pZCogbWVtLCBzaXplX3Qgcyk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RyZWUobXN0YXRlIG0sIHRjaHVua3B0ciB0KTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdHJlZWJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3NtYWxsYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKG1zdGF0ZSBtKTsKK3N0YXRpYyBpbnQgICAgYmluX2ZpbmQobXN0YXRlIG0sIG1jaHVua3B0ciB4KTsKK3N0YXRpYyBzaXplX3QgdHJhdmVyc2VfYW5kX2NoZWNrKG1zdGF0ZSBtKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEluZGV4aW5nIEJpbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGlzX3NtYWxsKHMpICAgICAgICAgKCgocykgPj4gU01BTExCSU5fU0hJRlQpIDwgTlNNQUxMQklOUykKKyNkZWZpbmUgc21hbGxfaW5kZXgocykgICAgICAoKHMpICA+PiBTTUFMTEJJTl9TSElGVCkKKyNkZWZpbmUgc21hbGxfaW5kZXgyc2l6ZShpKSAoKGkpICA8PCBTTUFMTEJJTl9TSElGVCkKKyNkZWZpbmUgTUlOX1NNQUxMX0lOREVYICAgICAoc21hbGxfaW5kZXgoTUlOX0NIVU5LX1NJWkUpKQorCisvKiBhZGRyZXNzaW5nIGJ5IGluZGV4LiBTZWUgYWJvdmUgYWJvdXQgc21hbGxiaW4gcmVwb3NpdGlvbmluZyAqLworI2RlZmluZSBzbWFsbGJpbl9hdChNLCBpKSAgICgoc2JpbnB0cikoKGNoYXIqKSYoKE0pLT5zbWFsbGJpbnNbKGkpPDwxXSkpKQorI2RlZmluZSB0cmVlYmluX2F0KE0saSkgICAgICgmKChNKS0+dHJlZWJpbnNbaV0pKQorCisvKiBhc3NpZ24gdHJlZSBpbmRleCBmb3Igc2l6ZSBTIHRvIHZhcmlhYmxlIEkuIFVzZSB4ODYgYXNtIGlmIHBvc3NpYmxlICAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQorI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBLO1wKKyAgICBfX2FzbV9fKCJic3JsXHQlMSwgJTBcblx0IiA6ICI9ciIgKEspIDogInJtIiAgKFgpKTtcCisgICAgSSA9ICAoYmluZGV4X3QpKChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpKTtcCisgIH1cCit9CisKKyNlbGlmIGRlZmluZWQgKF9fSU5URUxfQ09NUElMRVIpCisjZGVmaW5lIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKVwKK3tcCisgIHNpemVfdCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wKKyAgaWYgKFggPT0gMClcCisgICAgSSA9IDA7XAorICBlbHNlIGlmIChYID4gMHhGRkZGKVwKKyAgICBJID0gTlRSRUVCSU5TLTE7XAorICBlbHNlIHtcCisgICAgdW5zaWduZWQgaW50IEsgPSBfYml0X3NjYW5fcmV2ZXJzZSAoWCk7IFwKKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wKKyAgfVwKK30KKworI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTEzMDAKKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgSztcCisgICAgX0JpdFNjYW5SZXZlcnNlKChEV09SRCAqKSAmSywgWCk7XAorICAgIEkgPSAgKGJpbmRleF90KSgoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKSk7XAorICB9XAorfQorCisjZWxzZSAvKiBHTlVDICovCisjZGVmaW5lIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKVwKK3tcCisgIHNpemVfdCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wKKyAgaWYgKFggPT0gMClcCisgICAgSSA9IDA7XAorICBlbHNlIGlmIChYID4gMHhGRkZGKVwKKyAgICBJID0gTlRSRUVCSU5TLTE7XAorICBlbHNlIHtcCisgICAgdW5zaWduZWQgaW50IFkgPSAodW5zaWduZWQgaW50KVg7XAorICAgIHVuc2lnbmVkIGludCBOID0gKChZIC0gMHgxMDApID4+IDE2KSAmIDg7XAorICAgIHVuc2lnbmVkIGludCBLID0gKCgoWSA8PD0gTikgLSAweDEwMDApID4+IDE2KSAmIDQ7XAorICAgIE4gKz0gSztcCisgICAgTiArPSBLID0gKCgoWSA8PD0gSykgLSAweDQwMDApID4+IDE2KSAmIDI7XAorICAgIEsgPSAxNCAtIE4gKyAoKFkgPDw9IEspID4+IDE1KTtcCisgICAgSSA9IChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpO1wKKyAgfVwKK30KKyNlbmRpZiAvKiBHTlVDICovCisKKy8qIEJpdCByZXByZXNlbnRpbmcgbWF4aW11bSByZXNvbHZlZCBzaXplIGluIGEgdHJlZWJpbiBhdCBpICovCisjZGVmaW5lIGJpdF9mb3JfdHJlZV9pbmRleChpKSBcCisgICAoaSA9PSBOVFJFRUJJTlMtMSk/IChTSVpFX1RfQklUU0laRS0xKSA6ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCAtIDIpCisKKy8qIFNoaWZ0IHBsYWNpbmcgbWF4aW11bSByZXNvbHZlZCBiaXQgaW4gYSB0cmVlYmluIGF0IGkgYXMgc2lnbiBiaXQgKi8KKyNkZWZpbmUgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KGkpIFwKKyAgICgoaSA9PSBOVFJFRUJJTlMtMSk/IDAgOiBcCisgICAgKChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSAtICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCAtIDIpKSkKKworLyogVGhlIHNpemUgb2YgdGhlIHNtYWxsZXN0IGNodW5rIGhlbGQgaW4gYmluIHdpdGggaW5kZXggaSAqLworI2RlZmluZSBtaW5zaXplX2Zvcl90cmVlX2luZGV4KGkpIFwKKyAgICgoU0laRV9UX09ORSA8PCAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQpKSB8ICBcCisgICAoKChzaXplX3QpKChpKSAmIFNJWkVfVF9PTkUpKSA8PCAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAxKSkpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gYmluIG1hcHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogYml0IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gaW5kZXggKi8KKyNkZWZpbmUgaWR4MmJpdChpKSAgICAgICAgICAgICAgKChiaW5tYXBfdCkoMSkgPDwgKGkpKQorCisvKiBNYXJrL0NsZWFyIGJpdHMgd2l0aCBnaXZlbiBpbmRleCAqLworI2RlZmluZSBtYXJrX3NtYWxsbWFwKE0saSkgICAgICAoKE0pLT5zbWFsbG1hcCB8PSAgaWR4MmJpdChpKSkKKyNkZWZpbmUgY2xlYXJfc21hbGxtYXAoTSxpKSAgICAgKChNKS0+c21hbGxtYXAgJj0gfmlkeDJiaXQoaSkpCisjZGVmaW5lIHNtYWxsbWFwX2lzX21hcmtlZChNLGkpICgoTSktPnNtYWxsbWFwICYgICBpZHgyYml0KGkpKQorCisjZGVmaW5lIG1hcmtfdHJlZW1hcChNLGkpICAgICAgICgoTSktPnRyZWVtYXAgIHw9ICBpZHgyYml0KGkpKQorI2RlZmluZSBjbGVhcl90cmVlbWFwKE0saSkgICAgICAoKE0pLT50cmVlbWFwICAmPSB+aWR4MmJpdChpKSkKKyNkZWZpbmUgdHJlZW1hcF9pc19tYXJrZWQoTSxpKSAgKChNKS0+dHJlZW1hcCAgJiAgIGlkeDJiaXQoaSkpCisKKy8qIGlzb2xhdGUgdGhlIGxlYXN0IHNldCBiaXQgb2YgYSBiaXRtYXAgKi8KKyNkZWZpbmUgbGVhc3RfYml0KHgpICAgICAgICAgKCh4KSAmIC0oeCkpCisKKy8qIG1hc2sgd2l0aCBhbGwgYml0cyB0byBsZWZ0IG9mIGxlYXN0IGJpdCBvZiB4IG9uICovCisjZGVmaW5lIGxlZnRfYml0cyh4KSAgICAgICAgICgoeDw8MSkgfCAtKHg8PDEpKQorCisvKiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVmdCBvZiBvciBlcXVhbCB0byBsZWFzdCBiaXQgb2YgeCBvbiAqLworI2RlZmluZSBzYW1lX29yX2xlZnRfYml0cyh4KSAoKHgpIHwgLSh4KSkKKworLyogaW5kZXggY29ycmVzcG9uZGluZyB0byBnaXZlbiBiaXQuIFVzZSB4ODYgYXNtIGlmIHBvc3NpYmxlICovCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IEo7XAorICBfX2FzbV9fKCJic2ZsXHQlMSwgJTBcblx0IiA6ICI9ciIgKEopIDogInJtIiAoWCkpO1wKKyAgSSA9IChiaW5kZXhfdClKO1wKK30KKworI2VsaWYgZGVmaW5lZCAoX19JTlRFTF9DT01QSUxFUikKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IEo7XAorICBKID0gX2JpdF9zY2FuX2ZvcndhcmQgKFgpOyBcCisgIEkgPSAoYmluZGV4X3QpSjtcCit9CisKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBKO1wKKyAgX0JpdFNjYW5Gb3J3YXJkKChEV09SRCAqKSAmSiwgWCk7XAorICBJID0gKGJpbmRleF90KUo7XAorfQorCisjZWxpZiBVU0VfQlVJTFRJTl9GRlMKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpIEkgPSBmZnMoWCktMQorCisjZWxzZQorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgWSA9IFggLSAxO1wKKyAgdW5zaWduZWQgaW50IEsgPSBZID4+ICgxNi00KSAmIDE2O1wKKyAgdW5zaWduZWQgaW50IE4gPSBLOyAgICAgICAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDgtMykgJiAgODsgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICg0LTIpICYgIDQ7ICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoMi0xKSAmICAyOyAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDEtMCkgJiAgMTsgIFkgPj49IEs7XAorICBJID0gKGJpbmRleF90KShOICsgWSk7XAorfQorI2VuZGlmIC8qIEdOVUMgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSdW50aW1lIENoZWNrIFN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBGb3Igc2VjdXJpdHksIHRoZSBtYWluIGludmFyaWFudCBpcyB0aGF0IG1hbGxvYy9mcmVlL2V0YyBuZXZlcgorICB3cml0ZXMgdG8gYSBzdGF0aWMgYWRkcmVzcyBvdGhlciB0aGFuIG1hbGxvY19zdGF0ZSwgdW5sZXNzIHN0YXRpYworICBtYWxsb2Nfc3RhdGUgaXRzZWxmIGhhcyBiZWVuIGNvcnJ1cHRlZCwgd2hpY2ggY2Fubm90IG9jY3VyIHZpYQorICBtYWxsb2MgKGJlY2F1c2Ugb2YgdGhlc2UgY2hlY2tzKS4gSW4gZXNzZW5jZSB0aGlzIG1lYW5zIHRoYXQgd2UKKyAgYmVsaWV2ZSBhbGwgcG9pbnRlcnMsIHNpemVzLCBtYXBzIGV0YyBoZWxkIGluIG1hbGxvY19zdGF0ZSwgYnV0CisgIGNoZWNrIGFsbCBvZiB0aG9zZSBsaW5rZWQgb3Igb2Zmc2V0dGVkIGZyb20gb3RoZXIgZW1iZWRkZWQgZGF0YQorICBzdHJ1Y3R1cmVzLiAgVGhlc2UgY2hlY2tzIGFyZSBpbnRlcnNwZXJzZWQgd2l0aCBtYWluIGNvZGUgaW4gYSB3YXkKKyAgdGhhdCB0ZW5kcyB0byBtaW5pbWl6ZSB0aGVpciBydW4tdGltZSBjb3N0LgorCisgIFdoZW4gRk9PVEVSUyBpcyBkZWZpbmVkLCBpbiBhZGRpdGlvbiB0byByYW5nZSBjaGVja2luZywgd2UgYWxzbworICB2ZXJpZnkgZm9vdGVyIGZpZWxkcyBvZiBpbnVzZSBjaHVua3MsIHdoaWNoIGNhbiBiZSB1c2VkIGd1YXJhbnRlZQorICB0aGF0IHRoZSBtc3RhdGUgY29udHJvbGxpbmcgbWFsbG9jL2ZyZWUgaXMgaW50YWN0LiAgVGhpcyBpcyBhCisgIHN0cmVhbWxpbmVkIHZlcnNpb24gb2YgdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBieSBXaWxsaWFtIFJvYmVydHNvbgorICBldCBhbCBpbiAiUnVuLXRpbWUgRGV0ZWN0aW9uIG9mIEhlYXAtYmFzZWQgT3ZlcmZsb3dzIiBMSVNBJzAzCisgIGh0dHA6Ly93d3cudXNlbml4Lm9yZy9ldmVudHMvbGlzYTAzL3RlY2gvcm9iZXJ0c29uLmh0bWwgVGhlIGZvb3RlcgorICBvZiBhbiBpbnVzZSBjaHVuayBob2xkcyB0aGUgeG9yIG9mIGl0cyBtc3RhdGUgYW5kIGEgcmFuZG9tIHNlZWQsCisgIHRoYXQgaXMgY2hlY2tlZCB1cG9uIGNhbGxzIHRvIGZyZWUoKSBhbmQgcmVhbGxvYygpLiAgVGhpcyBpcworICAocHJvYmFibGlzdGljYWxseSkgdW5ndWVzc2FibGUgZnJvbSBvdXRzaWRlIHRoZSBwcm9ncmFtLCBidXQgY2FuIGJlCisgIGNvbXB1dGVkIGJ5IGFueSBjb2RlIHN1Y2Nlc3NmdWxseSBtYWxsb2MnaW5nIGFueSBjaHVuaywgc28gZG9lcyBub3QKKyAgaXRzZWxmIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGNvZGUgdGhhdCBoYXMgYWxyZWFkeSBicm9rZW4KKyAgc2VjdXJpdHkgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLiAgVW5saWtlIFJvYmVydHNvbiBldCBhbCwgd2UKKyAgYWx3YXlzIGR5bmFtaWNhbGx5IGNoZWNrIGFkZHJlc3NlcyBvZiBhbGwgb2Zmc2V0IGNodW5rcyAocHJldmlvdXMsCisgIG5leHQsIGV0YykuIFRoaXMgdHVybnMgb3V0IHRvIGJlIGNoZWFwZXIgdGhhbiByZWx5aW5nIG9uIGhhc2hlcy4KKyovCisKKyNpZiAhSU5TRUNVUkUKKy8qIENoZWNrIGlmIGFkZHJlc3MgYSBpcyBhdCBsZWFzdCBhcyBoaWdoIGFzIGFueSBmcm9tIE1PUkVDT1JFIG9yIE1NQVAgKi8KKyNkZWZpbmUgb2tfYWRkcmVzcyhNLCBhKSAoKGNoYXIqKShhKSA+PSAoTSktPmxlYXN0X2FkZHIpCisvKiBDaGVjayBpZiBhZGRyZXNzIG9mIG5leHQgY2h1bmsgbiBpcyBoaWdoZXIgdGhhbiBiYXNlIGNodW5rIHAgKi8KKyNkZWZpbmUgb2tfbmV4dChwLCBuKSAgICAoKGNoYXIqKShwKSA8IChjaGFyKikobikpCisvKiBDaGVjayBpZiBwIGhhcyBpdHMgY2ludXNlIGJpdCBvbiAqLworI2RlZmluZSBva19jaW51c2UocCkgICAgIGNpbnVzZShwKQorLyogQ2hlY2sgaWYgcCBoYXMgaXRzIHBpbnVzZSBiaXQgb24gKi8KKyNkZWZpbmUgb2tfcGludXNlKHApICAgICBwaW51c2UocCkKKworI2Vsc2UgLyogIUlOU0VDVVJFICovCisjZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKDEpCisjZGVmaW5lIG9rX25leHQoYiwgbikgICAgKDEpCisjZGVmaW5lIG9rX2NpbnVzZShwKSAgICAgKDEpCisjZGVmaW5lIG9rX3BpbnVzZShwKSAgICAgKDEpCisjZW5kaWYgLyogIUlOU0VDVVJFICovCisKKyNpZiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpCisvKiBDaGVjayBpZiAoYWxsZWdlZCkgbXN0YXRlIG0gaGFzIGV4cGVjdGVkIG1hZ2ljIGZpZWxkICovCisjZGVmaW5lIG9rX21hZ2ljKE0pICAgICAgKChNKS0+bWFnaWMgPT0gbXBhcmFtcy5tYWdpYykKKyNlbHNlICAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisjZGVmaW5lIG9rX21hZ2ljKE0pICAgICAgKDEpCisjZW5kaWYgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworCisKKy8qIEluIGdjYywgdXNlIF9fYnVpbHRpbl9leHBlY3QgdG8gbWluaW1pemUgaW1wYWN0IG9mIGNoZWNrcyAqLworI2lmICFJTlNFQ1VSRQorI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDMKKyNkZWZpbmUgUlRDSEVDSyhlKSAgX19idWlsdGluX2V4cGVjdChlLCAxKQorI2Vsc2UgLyogR05VQyAqLworI2RlZmluZSBSVENIRUNLKGUpICAoZSkKKyNlbmRpZiAvKiBHTlVDICovCisjZWxzZSAvKiAhSU5TRUNVUkUgKi8KKyNkZWZpbmUgUlRDSEVDSyhlKSAgKDEpCisjZW5kaWYgLyogIUlOU0VDVVJFICovCisKKy8qIG1hY3JvcyB0byBzZXQgdXAgaW51c2UgY2h1bmtzIHdpdGggb3Igd2l0aG91dCBmb290ZXJzICovCisKKyNpZiAhRk9PVEVSUworCisjZGVmaW5lIG1hcmtfaW51c2VfZm9vdChNLHAscykKKworLyogU2V0IGNpbnVzZSBiaXQgYW5kIHBpbnVzZSBiaXQgb2YgbmV4dCBjaHVuayAqLworI2RlZmluZSBzZXRfaW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKCgocCktPmhlYWQgJiBQSU5VU0VfQklUKXxzfENJTlVTRV9CSVQpLFwKKyAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpCisKKy8qIFNldCBjaW51c2UgYW5kIHBpbnVzZSBvZiB0aGlzIGNodW5rIGFuZCBwaW51c2Ugb2YgbmV4dCBjaHVuayAqLworI2RlZmluZSBzZXRfaW51c2VfYW5kX3BpbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwKKyAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpCisKKy8qIFNldCBzaXplLCBjaW51c2UgYW5kIHBpbnVzZSBiaXQgb2YgdGhpcyBjaHVuayAqLworI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKE0sIHAsIHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSkKKworI2Vsc2UgLyogRk9PVEVSUyAqLworCisvKiBTZXQgZm9vdCBvZiBpbnVzZSBjaHVuayB0byBiZSB4b3Igb2YgbXN0YXRlIGFuZCBzZWVkICovCisjZGVmaW5lIG1hcmtfaW51c2VfZm9vdChNLHAscylcCisgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QgPSAoKHNpemVfdCkoTSkgXiBtcGFyYW1zLm1hZ2ljKSkKKworI2RlZmluZSBnZXRfbXN0YXRlX2ZvcihwKVwKKyAgKChtc3RhdGUpKCgobWNodW5rcHRyKSgoY2hhciopKHApICtcCisgICAgKGNodW5rc2l6ZShwKSkpKS0+cHJldl9mb290IF4gbXBhcmFtcy5tYWdpYykpCisKKyNkZWZpbmUgc2V0X2ludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSxcCisgICgoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCksIFwKKyAgbWFya19pbnVzZV9mb290KE0scCxzKSkKKworI2RlZmluZSBzZXRfaW51c2VfYW5kX3BpbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwKKyAgKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKSxcCisgbWFya19pbnVzZV9mb290KE0scCxzKSkKKworI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKE0sIHAsIHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgIG1hcmtfaW51c2VfZm9vdChNLCBwLCBzKSkKKworI2VuZGlmIC8qICFGT09URVJTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2V0dGluZyBtcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEluaXRpYWxpemUgbXBhcmFtcyAqLworc3RhdGljIGludCBpbml0X21wYXJhbXModm9pZCkgeworI2lmZGVmIE5FRURfR0xPQkFMX0xPQ0tfSU5JVAorICBpZiAobWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXMgPD0gMCkKKyAgICBpbml0X21hbGxvY19nbG9iYWxfbXV0ZXgoKTsKKyNlbmRpZgorCisgIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisgIGlmIChtcGFyYW1zLm1hZ2ljID09IDApIHsKKyAgICBzaXplX3QgbWFnaWM7CisgICAgc2l6ZV90IHBzaXplOworICAgIHNpemVfdCBnc2l6ZTsKKworI2lmbmRlZiBXSU4zMgorICAgIHBzaXplID0gbWFsbG9jX2dldHBhZ2VzaXplOworICAgIGdzaXplID0gKChERUZBVUxUX0dSQU5VTEFSSVRZICE9IDApPyBERUZBVUxUX0dSQU5VTEFSSVRZIDogcHNpemUpOworI2Vsc2UgLyogV0lOMzIgKi8KKyAgICB7CisgICAgICBTWVNURU1fSU5GTyBzeXN0ZW1faW5mbzsKKyAgICAgIEdldFN5c3RlbUluZm8oJnN5c3RlbV9pbmZvKTsKKyAgICAgIHBzaXplID0gc3lzdGVtX2luZm8uZHdQYWdlU2l6ZTsKKyAgICAgIGdzaXplID0gKChERUZBVUxUX0dSQU5VTEFSSVRZICE9IDApPworCSAgICAgICBERUZBVUxUX0dSQU5VTEFSSVRZIDogc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHkpOworICAgIH0KKyNlbmRpZiAvKiBXSU4zMiAqLworCisgICAgLyogU2FuaXR5LWNoZWNrIGNvbmZpZ3VyYXRpb246CisgICAgICAgc2l6ZV90IG11c3QgYmUgdW5zaWduZWQgYW5kIGFzIHdpZGUgYXMgcG9pbnRlciB0eXBlLgorICAgICAgIGludHMgbXVzdCBiZSBhdCBsZWFzdCA0IGJ5dGVzLgorICAgICAgIGFsaWdubWVudCBtdXN0IGJlIGF0IGxlYXN0IDguCisgICAgICAgQWxpZ25tZW50LCBtaW4gY2h1bmsgc2l6ZSwgYW5kIHBhZ2Ugc2l6ZSBtdXN0IGFsbCBiZSBwb3dlcnMgb2YgMi4KKyAgICAqLworICAgIGlmICgoc2l6ZW9mKHNpemVfdCkgIT0gc2l6ZW9mKGNoYXIqKSkgfHwKKwkoTUFYX1NJWkVfVCA8IE1JTl9DSFVOS19TSVpFKSAgfHwKKwkoc2l6ZW9mKGludCkgPCA0KSAgfHwKKwkoTUFMTE9DX0FMSUdOTUVOVCA8IChzaXplX3QpOFUpIHx8CisJKChNQUxMT0NfQUxJR05NRU5UICYgKE1BTExPQ19BTElHTk1FTlQtU0laRV9UX09ORSkpICE9IDApIHx8CisJKChNQ0hVTktfU0laRSAgICAgICYgKE1DSFVOS19TSVpFLVNJWkVfVF9PTkUpKSAgICAgICE9IDApIHx8CisJKChnc2l6ZSAgICAgICAgICAgICYgKGdzaXplLVNJWkVfVF9PTkUpKSAgICAgICAgICAgICE9IDApIHx8CisJKChwc2l6ZSAgICAgICAgICAgICYgKHBzaXplLVNJWkVfVF9PTkUpKSAgICAgICAgICAgICE9IDApKQorICAgICAgQUJPUlQ7CisKKyAgICBtcGFyYW1zLmdyYW51bGFyaXR5ID0gZ3NpemU7CisgICAgbXBhcmFtcy5wYWdlX3NpemUgPSBwc2l6ZTsKKyAgICBtcGFyYW1zLm1tYXBfdGhyZXNob2xkID0gREVGQVVMVF9NTUFQX1RIUkVTSE9MRDsKKyAgICBtcGFyYW1zLnRyaW1fdGhyZXNob2xkID0gREVGQVVMVF9UUklNX1RIUkVTSE9MRDsKKyNpZiBNT1JFQ09SRV9DT05USUdVT1VTCisgICAgbXBhcmFtcy5kZWZhdWx0X21mbGFncyA9IFVTRV9MT0NLX0JJVHxVU0VfTU1BUF9CSVQ7CisjZWxzZSAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworICAgIG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3MgPSBVU0VfTE9DS19CSVR8VVNFX01NQVBfQklUfFVTRV9OT05DT05USUdVT1VTX0JJVDsKKyNlbmRpZiAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisKKyNpZiAhT05MWV9NU1BBQ0VTCisgICAgLyogU2V0IHVwIGxvY2sgZm9yIG1haW4gbWFsbG9jIGFyZWEgKi8KKyAgICBnbS0+bWZsYWdzID0gbXBhcmFtcy5kZWZhdWx0X21mbGFnczsKKyAgICBJTklUSUFMX0xPQ0soJmdtLT5tdXRleCk7CisjZW5kaWYKKworI2lmIChGT09URVJTICYmICFJTlNFQ1VSRSkKKyAgICB7CisjaWYgVVNFX0RFVl9SQU5ET00KKyAgICAgIGludCBmZDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYnVmW3NpemVvZihzaXplX3QpXTsKKyAgICAgIC8qIFRyeSB0byB1c2UgL2Rldi91cmFuZG9tLCBlbHNlIGZhbGwgYmFjayBvbiB1c2luZyB0aW1lICovCisgICAgICBpZiAoKGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpKSA+PSAwICYmCisJICByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSA9PSBzaXplb2YoYnVmKSkgeworCW1hZ2ljID0gKigoc2l6ZV90ICopIGJ1Zik7CisJY2xvc2UoZmQpOworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmIC8qIFVTRV9ERVZfUkFORE9NICovCisjaWZkZWYgV0lOMzIKKwltYWdpYyA9IChzaXplX3QpKEdldFRpY2tDb3VudCgpIF4gKHNpemVfdCkweDU1NTU1NTU1VSk7CisjZWxzZQorICAgICAgbWFnaWMgPSAoc2l6ZV90KSh0aW1lKDApIF4gKHNpemVfdCkweDU1NTU1NTU1VSk7CisjZW5kaWYKKyAgICAgIG1hZ2ljIHw9IChzaXplX3QpOFU7ICAgIC8qIGVuc3VyZSBub256ZXJvICovCisgICAgICBtYWdpYyAmPSB+KHNpemVfdCk3VTsgICAvKiBpbXByb3ZlIGNoYW5jZXMgb2YgZmF1bHQgZm9yIGJhZCB2YWx1ZXMgKi8KKyAgICB9CisjZWxzZSAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisgICAgbWFnaWMgPSAoc2l6ZV90KTB4NTg1ODU4NThVOworI2VuZGlmIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKworICAgIG1wYXJhbXMubWFnaWMgPSBtYWdpYzsKKyAgfQorCisgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisgIHJldHVybiAxOworfQorCisvKiBzdXBwb3J0IGZvciBtYWxsb3B0ICovCitzdGF0aWMgaW50IGNoYW5nZV9tcGFyYW0oaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHNpemVfdCB2YWwgPSAodmFsdWUgPT0gLTEpPyBNQVhfU0laRV9UIDogKHNpemVfdCl2YWx1ZTsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIHN3aXRjaChwYXJhbV9udW1iZXIpIHsKKyAgY2FzZSBNX1RSSU1fVEhSRVNIT0xEOgorICAgIG1wYXJhbXMudHJpbV90aHJlc2hvbGQgPSB2YWw7CisgICAgcmV0dXJuIDE7CisgIGNhc2UgTV9HUkFOVUxBUklUWToKKyAgICBpZiAodmFsID49IG1wYXJhbXMucGFnZV9zaXplICYmICgodmFsICYgKHZhbC0xKSkgPT0gMCkpIHsKKyAgICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSB2YWw7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgcmV0dXJuIDA7CisgIGNhc2UgTV9NTUFQX1RIUkVTSE9MRDoKKyAgICBtcGFyYW1zLm1tYXBfdGhyZXNob2xkID0gdmFsOworICAgIHJldHVybiAxOworICBkZWZhdWx0OgorICAgIHJldHVybiAwOworICB9Cit9CisKKyNpZiBERUJVRworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dpbmcgU3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBhbnkgY2h1bmssIHdoZXRoZXIgZnJlZSwgaW51c2UsIG1tYXBwZWQgZXRjICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfYW55X2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBhc3NlcnQoKGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSkgfHwgKHAtPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpKTsKKyAgYXNzZXJ0KG9rX2FkZHJlc3MobSwgcCkpOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIHRvcCBjaHVuayAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfdG9wX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBtc2VnbWVudHB0ciBzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopcCk7CisgIHNpemVfdCAgc3ogPSBwLT5oZWFkICYgfklOVVNFX0JJVFM7IC8qIHRoaXJkLWxvd2VzdCBiaXQgY2FuIGJlIHNldCEgKi8KKyAgYXNzZXJ0KHNwICE9IDApOworICBhc3NlcnQoKGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSkgfHwgKHAtPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpKTsKKyAgYXNzZXJ0KG9rX2FkZHJlc3MobSwgcCkpOworICBhc3NlcnQoc3ogPT0gbS0+dG9wc2l6ZSk7CisgIGFzc2VydChzeiA+IDApOworICBhc3NlcnQoc3ogPT0gKChzcC0+YmFzZSArIHNwLT5zaXplKSAtIChjaGFyKilwKSAtIFRPUF9GT09UX1NJWkUpOworICBhc3NlcnQocGludXNlKHApKTsKKyAgYXNzZXJ0KCFwaW51c2UoY2h1bmtfcGx1c19vZmZzZXQocCwgc3opKSk7Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgKGludXNlKSBtbWFwcGVkIGNodW5rcyAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgc2l6ZV90ICBzeiA9IGNodW5rc2l6ZShwKTsKKyAgc2l6ZV90IGxlbiA9IChzeiArIChwLT5wcmV2X2Zvb3QgJiB+SVNfTU1BUFBFRF9CSVQpICsgTU1BUF9GT09UX1BBRCk7CisgIGFzc2VydChpc19tbWFwcGVkKHApKTsKKyAgYXNzZXJ0KHVzZV9tbWFwKG0pKTsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKKyAgYXNzZXJ0KCFpc19zbWFsbChzeikpOworICBhc3NlcnQoKGxlbiAmIChtcGFyYW1zLnBhZ2Vfc2l6ZS1TSVpFX1RfT05FKSkgPT0gMCk7CisgIGFzc2VydChjaHVua19wbHVzX29mZnNldChwLCBzeiktPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpOworICBhc3NlcnQoY2h1bmtfcGx1c19vZmZzZXQocCwgc3orU0laRV9UX1NJWkUpLT5oZWFkID09IDApOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGludXNlIGNodW5rcyAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfaW51c2VfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBwKTsKKyAgYXNzZXJ0KGNpbnVzZShwKSk7CisgIGFzc2VydChuZXh0X3BpbnVzZShwKSk7CisgIC8qIElmIG5vdCBwaW51c2UgYW5kIG5vdCBtbWFwcGVkLCBwcmV2aW91cyBjaHVuayBoYXMgT0sgb2Zmc2V0ICovCisgIGFzc2VydChpc19tbWFwcGVkKHApIHx8IHBpbnVzZShwKSB8fCBuZXh0X2NodW5rKHByZXZfY2h1bmsocCkpID09IHApOworICBpZiAoaXNfbW1hcHBlZChwKSkKKyAgICBkb19jaGVja19tbWFwcGVkX2NodW5rKG0sIHApOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGZyZWUgY2h1bmtzICovCitzdGF0aWMgdm9pZCBkb19jaGVja19mcmVlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBzaXplX3Qgc3ogPSBjaHVua3NpemUocCk7CisgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgc3opOworICBkb19jaGVja19hbnlfY2h1bmsobSwgcCk7CisgIGFzc2VydCghY2ludXNlKHApKTsKKyAgYXNzZXJ0KCFuZXh0X3BpbnVzZShwKSk7CisgIGFzc2VydCAoIWlzX21tYXBwZWQocCkpOworICBpZiAocCAhPSBtLT5kdiAmJiBwICE9IG0tPnRvcCkgeworICAgIGlmIChzeiA+PSBNSU5fQ0hVTktfU0laRSkgeworICAgICAgYXNzZXJ0KChzeiAmIENIVU5LX0FMSUdOX01BU0spID09IDApOworICAgICAgYXNzZXJ0KGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSk7CisgICAgICBhc3NlcnQobmV4dC0+cHJldl9mb290ID09IHN6KTsKKyAgICAgIGFzc2VydChwaW51c2UocCkpOworICAgICAgYXNzZXJ0IChuZXh0ID09IG0tPnRvcCB8fCBjaW51c2UobmV4dCkpOworICAgICAgYXNzZXJ0KHAtPmZkLT5iayA9PSBwKTsKKyAgICAgIGFzc2VydChwLT5iay0+ZmQgPT0gcCk7CisgICAgfQorICAgIGVsc2UgIC8qIG1hcmtlcnMgYXJlIGFsd2F5cyBvZiBzaXplIFNJWkVfVF9TSVpFICovCisgICAgICBhc3NlcnQoc3ogPT0gU0laRV9UX1NJWkUpOworICB9Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgbWFsbG9jZWQgY2h1bmtzIGF0IHRoZSBwb2ludCB0aGV5IGFyZSBtYWxsb2NlZCAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsobXN0YXRlIG0sIHZvaWQqIG1lbSwgc2l6ZV90IHMpIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgICBzaXplX3Qgc3ogPSBwLT5oZWFkICYgfihQSU5VU0VfQklUfENJTlVTRV9CSVQpOworICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHApOworICAgIGFzc2VydCgoc3ogJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKTsKKyAgICBhc3NlcnQoc3ogPj0gTUlOX0NIVU5LX1NJWkUpOworICAgIGFzc2VydChzeiA+PSBzKTsKKyAgICAvKiB1bmxlc3MgbW1hcHBlZCwgc2l6ZSBpcyBsZXNzIHRoYW4gTUlOX0NIVU5LX1NJWkUgbW9yZSB0aGFuIHJlcXVlc3QgKi8KKyAgICBhc3NlcnQoaXNfbW1hcHBlZChwKSB8fCBzeiA8IChzICsgTUlOX0NIVU5LX1NJWkUpKTsKKyAgfQorfQorCisvKiBDaGVjayBhIHRyZWUgYW5kIGl0cyBzdWJ0cmVlcy4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja190cmVlKG1zdGF0ZSBtLCB0Y2h1bmtwdHIgdCkgeworICB0Y2h1bmtwdHIgaGVhZCA9IDA7CisgIHRjaHVua3B0ciB1ID0gdDsKKyAgYmluZGV4X3QgdGluZGV4ID0gdC0+aW5kZXg7CisgIHNpemVfdCB0c2l6ZSA9IGNodW5rc2l6ZSh0KTsKKyAgYmluZGV4X3QgaWR4OworICBjb21wdXRlX3RyZWVfaW5kZXgodHNpemUsIGlkeCk7CisgIGFzc2VydCh0aW5kZXggPT0gaWR4KTsKKyAgYXNzZXJ0KHRzaXplID49IE1JTl9MQVJHRV9TSVpFKTsKKyAgYXNzZXJ0KHRzaXplID49IG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoaWR4KSk7CisgIGFzc2VydCgoaWR4ID09IE5UUkVFQklOUy0xKSB8fCAodHNpemUgPCBtaW5zaXplX2Zvcl90cmVlX2luZGV4KChpZHgrMSkpKSk7CisKKyAgZG8geyAvKiB0cmF2ZXJzZSB0aHJvdWdoIGNoYWluIG9mIHNhbWUtc2l6ZWQgbm9kZXMgKi8KKyAgICBkb19jaGVja19hbnlfY2h1bmsobSwgKChtY2h1bmtwdHIpdSkpOworICAgIGFzc2VydCh1LT5pbmRleCA9PSB0aW5kZXgpOworICAgIGFzc2VydChjaHVua3NpemUodSkgPT0gdHNpemUpOworICAgIGFzc2VydCghY2ludXNlKHUpKTsKKyAgICBhc3NlcnQoIW5leHRfcGludXNlKHUpKTsKKyAgICBhc3NlcnQodS0+ZmQtPmJrID09IHUpOworICAgIGFzc2VydCh1LT5iay0+ZmQgPT0gdSk7CisgICAgaWYgKHUtPnBhcmVudCA9PSAwKSB7CisgICAgICBhc3NlcnQodS0+Y2hpbGRbMF0gPT0gMCk7CisgICAgICBhc3NlcnQodS0+Y2hpbGRbMV0gPT0gMCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgYXNzZXJ0KGhlYWQgPT0gMCk7IC8qIG9ubHkgb25lIG5vZGUgb24gY2hhaW4gaGFzIHBhcmVudCAqLworICAgICAgaGVhZCA9IHU7CisgICAgICBhc3NlcnQodS0+cGFyZW50ICE9IHUpOworICAgICAgYXNzZXJ0ICh1LT5wYXJlbnQtPmNoaWxkWzBdID09IHUgfHwKKwkgICAgICB1LT5wYXJlbnQtPmNoaWxkWzFdID09IHUgfHwKKwkgICAgICAqKCh0YmlucHRyKikodS0+cGFyZW50KSkgPT0gdSk7CisgICAgICBpZiAodS0+Y2hpbGRbMF0gIT0gMCkgeworCWFzc2VydCh1LT5jaGlsZFswXS0+cGFyZW50ID09IHUpOworCWFzc2VydCh1LT5jaGlsZFswXSAhPSB1KTsKKwlkb19jaGVja190cmVlKG0sIHUtPmNoaWxkWzBdKTsKKyAgICAgIH0KKyAgICAgIGlmICh1LT5jaGlsZFsxXSAhPSAwKSB7CisJYXNzZXJ0KHUtPmNoaWxkWzFdLT5wYXJlbnQgPT0gdSk7CisJYXNzZXJ0KHUtPmNoaWxkWzFdICE9IHUpOworCWRvX2NoZWNrX3RyZWUobSwgdS0+Y2hpbGRbMV0pOworICAgICAgfQorICAgICAgaWYgKHUtPmNoaWxkWzBdICE9IDAgJiYgdS0+Y2hpbGRbMV0gIT0gMCkgeworCWFzc2VydChjaHVua3NpemUodS0+Y2hpbGRbMF0pIDwgY2h1bmtzaXplKHUtPmNoaWxkWzFdKSk7CisgICAgICB9CisgICAgfQorICAgIHUgPSB1LT5mZDsKKyAgfSB3aGlsZSAodSAhPSB0KTsKKyAgYXNzZXJ0KGhlYWQgIT0gMCk7Cit9CisKKy8qICBDaGVjayBhbGwgdGhlIGNodW5rcyBpbiBhIHRyZWViaW4uICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfdHJlZWJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSkgeworICB0YmlucHRyKiB0YiA9IHRyZWViaW5fYXQobSwgaSk7CisgIHRjaHVua3B0ciB0ID0gKnRiOworICBpbnQgZW1wdHkgPSAobS0+dHJlZW1hcCAmICgxVSA8PCBpKSkgPT0gMDsKKyAgaWYgKHQgPT0gMCkKKyAgICBhc3NlcnQoZW1wdHkpOworICBpZiAoIWVtcHR5KQorICAgIGRvX2NoZWNrX3RyZWUobSwgdCk7Cit9CisKKy8qICBDaGVjayBhbGwgdGhlIGNodW5rcyBpbiBhIHNtYWxsYmluLiAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3NtYWxsYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKSB7CisgIHNiaW5wdHIgYiA9IHNtYWxsYmluX2F0KG0sIGkpOworICBtY2h1bmtwdHIgcCA9IGItPmJrOworICB1bnNpZ25lZCBpbnQgZW1wdHkgPSAobS0+c21hbGxtYXAgJiAoMVUgPDwgaSkpID09IDA7CisgIGlmIChwID09IGIpCisgICAgYXNzZXJ0KGVtcHR5KTsKKyAgaWYgKCFlbXB0eSkgeworICAgIGZvciAoOyBwICE9IGI7IHAgPSBwLT5iaykgeworICAgICAgc2l6ZV90IHNpemUgPSBjaHVua3NpemUocCk7CisgICAgICBtY2h1bmtwdHIgcTsKKyAgICAgIC8qIGVhY2ggY2h1bmsgY2xhaW1zIHRvIGJlIGZyZWUgKi8KKyAgICAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobSwgcCk7CisgICAgICAvKiBjaHVuayBiZWxvbmdzIGluIGJpbiAqLworICAgICAgYXNzZXJ0KHNtYWxsX2luZGV4KHNpemUpID09IGkpOworICAgICAgYXNzZXJ0KHAtPmJrID09IGIgfHwgY2h1bmtzaXplKHAtPmJrKSA9PSBjaHVua3NpemUocCkpOworICAgICAgLyogY2h1bmsgaXMgZm9sbG93ZWQgYnkgYW4gaW51c2UgY2h1bmsgKi8KKyAgICAgIHEgPSBuZXh0X2NodW5rKHApOworICAgICAgaWYgKHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpCisJZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcSk7CisgICAgfQorICB9Cit9CisKKy8qIEZpbmQgeCBpbiBhIGJpbi4gVXNlZCBpbiBvdGhlciBjaGVjayBmdW5jdGlvbnMuICovCitzdGF0aWMgaW50IGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCkgeworICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZSh4KTsKKyAgaWYgKGlzX3NtYWxsKHNpemUpKSB7CisgICAgYmluZGV4X3Qgc2lkeCA9IHNtYWxsX2luZGV4KHNpemUpOworICAgIHNiaW5wdHIgYiA9IHNtYWxsYmluX2F0KG0sIHNpZHgpOworICAgIGlmIChzbWFsbG1hcF9pc19tYXJrZWQobSwgc2lkeCkpIHsKKyAgICAgIG1jaHVua3B0ciBwID0gYjsKKyAgICAgIGRvIHsKKwlpZiAocCA9PSB4KQorCSAgcmV0dXJuIDE7CisgICAgICB9IHdoaWxlICgocCA9IHAtPmZkKSAhPSBiKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgYmluZGV4X3QgdGlkeDsKKyAgICBjb21wdXRlX3RyZWVfaW5kZXgoc2l6ZSwgdGlkeCk7CisgICAgaWYgKHRyZWVtYXBfaXNfbWFya2VkKG0sIHRpZHgpKSB7CisgICAgICB0Y2h1bmtwdHIgdCA9ICp0cmVlYmluX2F0KG0sIHRpZHgpOworICAgICAgc2l6ZV90IHNpemViaXRzID0gc2l6ZSA8PCBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgodGlkeCk7CisgICAgICB3aGlsZSAodCAhPSAwICYmIGNodW5rc2l6ZSh0KSAhPSBzaXplKSB7CisJdCA9IHQtPmNoaWxkWyhzaXplYml0cyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV07CisJc2l6ZWJpdHMgPDw9IDE7CisgICAgICB9CisgICAgICBpZiAodCAhPSAwKSB7CisJdGNodW5rcHRyIHUgPSB0OworCWRvIHsKKwkgIGlmICh1ID09ICh0Y2h1bmtwdHIpeCkKKwkgICAgcmV0dXJuIDE7CisJfSB3aGlsZSAoKHUgPSB1LT5mZCkgIT0gdCk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiBUcmF2ZXJzZSBlYWNoIGNodW5rIGFuZCBjaGVjayBpdDsgcmV0dXJuIHRvdGFsICovCitzdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSkgeworICBzaXplX3Qgc3VtID0gMDsKKyAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgc3VtICs9IG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFOworICAgIHdoaWxlIChzICE9IDApIHsKKyAgICAgIG1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisgICAgICBtY2h1bmtwdHIgbGFzdHEgPSAwOworICAgICAgYXNzZXJ0KHBpbnVzZShxKSk7CisgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorCSAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworCXN1bSArPSBjaHVua3NpemUocSk7CisJaWYgKGNpbnVzZShxKSkgeworCSAgYXNzZXJ0KCFiaW5fZmluZChtLCBxKSk7CisJICBkb19jaGVja19pbnVzZV9jaHVuayhtLCBxKTsKKwl9CisJZWxzZSB7CisJICBhc3NlcnQocSA9PSBtLT5kdiB8fCBiaW5fZmluZChtLCBxKSk7CisJICBhc3NlcnQobGFzdHEgPT0gMCB8fCBjaW51c2UobGFzdHEpKTsgLyogTm90IDIgY29uc2VjdXRpdmUgZnJlZSAqLworCSAgZG9fY2hlY2tfZnJlZV9jaHVuayhtLCBxKTsKKwl9CisJbGFzdHEgPSBxOworCXEgPSBuZXh0X2NodW5rKHEpOworICAgICAgfQorICAgICAgcyA9IHMtPm5leHQ7CisgICAgfQorICB9CisgIHJldHVybiBzdW07Cit9CisKKy8qIENoZWNrIGFsbCBwcm9wZXJ0aWVzIG9mIG1hbGxvY19zdGF0ZS4gKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY19zdGF0ZShtc3RhdGUgbSkgeworICBiaW5kZXhfdCBpOworICBzaXplX3QgdG90YWw7CisgIC8qIGNoZWNrIGJpbnMgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5TTUFMTEJJTlM7ICsraSkKKyAgICBkb19jaGVja19zbWFsbGJpbihtLCBpKTsKKyAgZm9yIChpID0gMDsgaSA8IE5UUkVFQklOUzsgKytpKQorICAgIGRvX2NoZWNrX3RyZWViaW4obSwgaSk7CisKKyAgaWYgKG0tPmR2c2l6ZSAhPSAwKSB7IC8qIGNoZWNrIGR2IGNodW5rICovCisgICAgZG9fY2hlY2tfYW55X2NodW5rKG0sIG0tPmR2KTsKKyAgICBhc3NlcnQobS0+ZHZzaXplID09IGNodW5rc2l6ZShtLT5kdikpOworICAgIGFzc2VydChtLT5kdnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpOworICAgIGFzc2VydChiaW5fZmluZChtLCBtLT5kdikgPT0gMCk7CisgIH0KKworICBpZiAobS0+dG9wICE9IDApIHsgICAvKiBjaGVjayB0b3AgY2h1bmsgKi8KKyAgICBkb19jaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgICAvKmFzc2VydChtLT50b3BzaXplID09IGNodW5rc2l6ZShtLT50b3ApKTsgcmVkdW5kYW50ICovCisgICAgYXNzZXJ0KG0tPnRvcHNpemUgPiAwKTsKKyAgICBhc3NlcnQoYmluX2ZpbmQobSwgbS0+dG9wKSA9PSAwKTsKKyAgfQorCisgIHRvdGFsID0gdHJhdmVyc2VfYW5kX2NoZWNrKG0pOworICBhc3NlcnQodG90YWwgPD0gbS0+Zm9vdHByaW50KTsKKyAgYXNzZXJ0KG0tPmZvb3RwcmludCA8PSBtLT5tYXhfZm9vdHByaW50KTsKK30KKyNlbmRpZiAvKiBERUJVRyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdGF0aXN0aWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU5PX01BTExJTkZPCitzdGF0aWMgc3RydWN0IG1hbGxpbmZvIGludGVybmFsX21hbGxpbmZvKG1zdGF0ZSBtKSB7CisgIHN0cnVjdCBtYWxsaW5mbyBubSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICBjaGVja19tYWxsb2Nfc3RhdGUobSk7CisgICAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgICBzaXplX3QgbmZyZWUgPSBTSVpFX1RfT05FOyAvKiB0b3AgYWx3YXlzIGZyZWUgKi8KKyAgICAgIHNpemVfdCBtZnJlZSA9IG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFOworICAgICAgc2l6ZV90IHN1bSA9IG1mcmVlOworICAgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgICB3aGlsZSAocyAhPSAwKSB7CisJbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsKKwl3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorCSAgICAgICBxICE9IG0tPnRvcCAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisJICBzaXplX3Qgc3ogPSBjaHVua3NpemUocSk7CisJICBzdW0gKz0gc3o7CisJICBpZiAoIWNpbnVzZShxKSkgeworCSAgICBtZnJlZSArPSBzejsKKwkgICAgKytuZnJlZTsKKwkgIH0KKwkgIHEgPSBuZXh0X2NodW5rKHEpOworCX0KKwlzID0gcy0+bmV4dDsKKyAgICAgIH0KKworICAgICAgbm0uYXJlbmEgICAgPSBzdW07CisgICAgICBubS5vcmRibGtzICA9IG5mcmVlOworICAgICAgbm0uaGJsa2hkICAgPSBtLT5mb290cHJpbnQgLSBzdW07CisgICAgICBubS51c21ibGtzICA9IG0tPm1heF9mb290cHJpbnQ7CisgICAgICBubS51b3JkYmxrcyA9IG0tPmZvb3RwcmludCAtIG1mcmVlOworICAgICAgbm0uZm9yZGJsa3MgPSBtZnJlZTsKKyAgICAgIG5tLmtlZXBjb3N0ID0gbS0+dG9wc2l6ZTsKKyAgICB9CisKKyAgICBQT1NUQUNUSU9OKG0pOworICB9CisgIHJldHVybiBubTsKK30KKyNlbmRpZiAvKiAhTk9fTUFMTElORk8gKi8KKworc3RhdGljIHZvaWQgaW50ZXJuYWxfbWFsbG9jX3N0YXRzKG1zdGF0ZSBtKSB7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIHNpemVfdCBtYXhmcCA9IDA7CisgICAgc2l6ZV90IGZwID0gMDsKKyAgICBzaXplX3QgdXNlZCA9IDA7CisgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgICBtYXhmcCA9IG0tPm1heF9mb290cHJpbnQ7CisgICAgICBmcCA9IG0tPmZvb3RwcmludDsKKyAgICAgIHVzZWQgPSBmcCAtIChtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRSk7CisKKyAgICAgIHdoaWxlIChzICE9IDApIHsKKwltY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworCXdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmCisJICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKwkgIGlmICghY2ludXNlKHEpKQorCSAgICB1c2VkIC09IGNodW5rc2l6ZShxKTsKKwkgIHEgPSBuZXh0X2NodW5rKHEpOworCX0KKwlzID0gcy0+bmV4dDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIm1heCBzeXN0ZW0gYnl0ZXMgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKG1heGZwKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJzeXN0ZW0gYnl0ZXMgICAgID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKShmcCkpOworICAgIGZwcmludGYoc3RkZXJyLCAiaW4gdXNlIGJ5dGVzICAgICA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykodXNlZCkpOworCisgICAgUE9TVEFDVElPTihtKTsKKyAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIHNtYWxsYmlucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBWYXJpb3VzIGZvcm1zIG9mIGxpbmtpbmcgYW5kIHVubGlua2luZyBhcmUgZGVmaW5lZCBhcyBtYWNyb3MuICBFdmVuCisgIHRoZSBvbmVzIGZvciB0cmVlcywgd2hpY2ggYXJlIHZlcnkgbG9uZyBidXQgaGF2ZSB2ZXJ5IHNob3J0IHR5cGljYWwKKyAgcGF0aHMuICBUaGlzIGlzIHVnbHkgYnV0IHJlZHVjZXMgcmVsaWFuY2Ugb24gaW5saW5pbmcgc3VwcG9ydCBvZgorICBjb21waWxlcnMuCisqLworCisvKiBMaW5rIGEgZnJlZSBjaHVuayBpbnRvIGEgc21hbGxiaW4gICovCisjZGVmaW5lIGluc2VydF9zbWFsbF9jaHVuayhNLCBQLCBTKSB7XAorICBiaW5kZXhfdCBJICA9IHNtYWxsX2luZGV4KFMpO1wKKyAgbWNodW5rcHRyIEIgPSBzbWFsbGJpbl9hdChNLCBJKTtcCisgIG1jaHVua3B0ciBGID0gQjtcCisgIGFzc2VydChTID49IE1JTl9DSFVOS19TSVpFKTtcCisgIGlmICghc21hbGxtYXBfaXNfbWFya2VkKE0sIEkpKVwKKyAgICBtYXJrX3NtYWxsbWFwKE0sIEkpO1wKKyAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEItPmZkKSkpXAorICAgIEYgPSBCLT5mZDtcCisgIGVsc2Uge1wKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIH1cCisgIEItPmZkID0gUDtcCisgIEYtPmJrID0gUDtcCisgIFAtPmZkID0gRjtcCisgIFAtPmJrID0gQjtcCit9CisKKy8qIFVubGluayBhIGNodW5rIGZyb20gYSBzbWFsbGJpbiAgKi8KKyNkZWZpbmUgdW5saW5rX3NtYWxsX2NodW5rKE0sIFAsIFMpIHtcCisgIG1jaHVua3B0ciBGID0gUC0+ZmQ7XAorICBtY2h1bmtwdHIgQiA9IFAtPmJrO1wKKyAgYmluZGV4X3QgSSA9IHNtYWxsX2luZGV4KFMpO1wKKyAgYXNzZXJ0KFAgIT0gQik7XAorICBhc3NlcnQoUCAhPSBGKTtcCisgIGFzc2VydChjaHVua3NpemUoUCkgPT0gc21hbGxfaW5kZXgyc2l6ZShJKSk7XAorICBpZiAoRiA9PSBCKVwKKyAgICBjbGVhcl9zbWFsbG1hcChNLCBJKTtcCisgIGVsc2UgaWYgKFJUQ0hFQ0soKEYgPT0gc21hbGxiaW5fYXQoTSxJKSB8fCBva19hZGRyZXNzKE0sIEYpKSAmJlwKKwkJICAgKEIgPT0gc21hbGxiaW5fYXQoTSxJKSB8fCBva19hZGRyZXNzKE0sIEIpKSkpIHtcCisgICAgRi0+YmsgPSBCO1wKKyAgICBCLT5mZCA9IEY7XAorICB9XAorICBlbHNlIHtcCisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICB9XAorfQorCisvKiBVbmxpbmsgdGhlIGZpcnN0IGNodW5rIGZyb20gYSBzbWFsbGJpbiAqLworI2RlZmluZSB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoTSwgQiwgUCwgSSkge1wKKyAgbWNodW5rcHRyIEYgPSBQLT5mZDtcCisgIGFzc2VydChQICE9IEIpO1wKKyAgYXNzZXJ0KFAgIT0gRik7XAorICBhc3NlcnQoY2h1bmtzaXplKFApID09IHNtYWxsX2luZGV4MnNpemUoSSkpO1wKKyAgaWYgKEIgPT0gRilcCisgICAgY2xlYXJfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgRikpKSB7XAorICAgIEItPmZkID0gRjtcCisgICAgRi0+YmsgPSBCO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKK30KKworCisKKy8qIFJlcGxhY2UgZHYgbm9kZSwgYmlubmluZyB0aGUgb2xkIG9uZSAqLworLyogVXNlZCBvbmx5IHdoZW4gZHZzaXplIGtub3duIHRvIGJlIHNtYWxsICovCisjZGVmaW5lIHJlcGxhY2VfZHYoTSwgUCwgUykge1wKKyAgc2l6ZV90IERWUyA9IE0tPmR2c2l6ZTtcCisgIGlmIChEVlMgIT0gMCkge1wKKyAgICBtY2h1bmtwdHIgRFYgPSBNLT5kdjtcCisgICAgYXNzZXJ0KGlzX3NtYWxsKERWUykpO1wKKyAgICBpbnNlcnRfc21hbGxfY2h1bmsoTSwgRFYsIERWUyk7XAorICB9XAorICBNLT5kdnNpemUgPSBTO1wKKyAgTS0+ZHYgPSBQO1wKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIHRyZWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSW5zZXJ0IGNodW5rIGludG8gdHJlZSAqLworI2RlZmluZSBpbnNlcnRfbGFyZ2VfY2h1bmsoTSwgWCwgUykge1wKKyAgdGJpbnB0ciogSDtcCisgIGJpbmRleF90IEk7XAorICBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSk7XAorICBIID0gdHJlZWJpbl9hdChNLCBJKTtcCisgIFgtPmluZGV4ID0gSTtcCisgIFgtPmNoaWxkWzBdID0gWC0+Y2hpbGRbMV0gPSAwO1wKKyAgaWYgKCF0cmVlbWFwX2lzX21hcmtlZChNLCBJKSkge1wKKyAgICBtYXJrX3RyZWVtYXAoTSwgSSk7XAorICAgICpIID0gWDtcCisgICAgWC0+cGFyZW50ID0gKHRjaHVua3B0cilIO1wKKyAgICBYLT5mZCA9IFgtPmJrID0gWDtcCisgIH1cCisgIGVsc2Uge1wKKyAgICB0Y2h1bmtwdHIgVCA9ICpIO1wKKyAgICBzaXplX3QgSyA9IFMgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KEkpO1wKKyAgICBmb3IgKDs7KSB7XAorICAgICAgaWYgKGNodW5rc2l6ZShUKSAhPSBTKSB7XAorCXRjaHVua3B0ciogQyA9ICYoVC0+Y2hpbGRbKEsgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdKTtcCisJSyA8PD0gMTtcCisJaWYgKCpDICE9IDApXAorCSAgVCA9ICpDO1wKKwllbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQykpKSB7XAorCSAgKkMgPSBYO1wKKwkgIFgtPnBhcmVudCA9IFQ7XAorCSAgWC0+ZmQgPSBYLT5iayA9IFg7XAorCSAgYnJlYWs7XAorCX1cCisJZWxzZSB7XAorCSAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorCSAgYnJlYWs7XAorCX1cCisgICAgICB9XAorICAgICAgZWxzZSB7XAorCXRjaHVua3B0ciBGID0gVC0+ZmQ7XAorCWlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgVCkgJiYgb2tfYWRkcmVzcyhNLCBGKSkpIHtcCisJICBULT5mZCA9IEYtPmJrID0gWDtcCisJICBYLT5mZCA9IEY7XAorCSAgWC0+YmsgPSBUO1wKKwkgIFgtPnBhcmVudCA9IDA7XAorCSAgYnJlYWs7XAorCX1cCisJZWxzZSB7XAorCSAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorCSAgYnJlYWs7XAorCX1cCisgICAgICB9XAorICAgIH1cCisgIH1cCit9CisKKy8qCisgIFVubGluayBzdGVwczoKKworICAxLiBJZiB4IGlzIGEgY2hhaW5lZCBub2RlLCB1bmxpbmsgaXQgZnJvbSBpdHMgc2FtZS1zaXplZCBmZC9iayBsaW5rcworICAgICBhbmQgY2hvb3NlIGl0cyBiayBub2RlIGFzIGl0cyByZXBsYWNlbWVudC4KKyAgMi4gSWYgeCB3YXMgdGhlIGxhc3Qgbm9kZSBvZiBpdHMgc2l6ZSwgYnV0IG5vdCBhIGxlYWYgbm9kZSwgaXQgbXVzdAorICAgICBiZSByZXBsYWNlZCB3aXRoIGEgbGVhZiBub2RlIChub3QgbWVyZWx5IG9uZSB3aXRoIGFuIG9wZW4gbGVmdCBvcgorICAgICByaWdodCksIHRvIG1ha2Ugc3VyZSB0aGF0IGxlZnRzIGFuZCByaWdodHMgb2YgZGVzY2VuZGVudHMKKyAgICAgY29ycmVzcG9uZCBwcm9wZXJseSB0byBiaXQgbWFza3MuICBXZSB1c2UgdGhlIHJpZ2h0bW9zdCBkZXNjZW5kZW50CisgICAgIG9mIHguICBXZSBjb3VsZCB1c2UgYW55IG90aGVyIGxlYWYsIGJ1dCB0aGlzIGlzIGVhc3kgdG8gbG9jYXRlIGFuZAorICAgICB0ZW5kcyB0byBjb3VudGVyYWN0IHJlbW92YWwgb2YgbGVmdG1vc3RzIGVsc2V3aGVyZSwgYW5kIHNvIGtlZXBzCisgICAgIHBhdGhzIHNob3J0ZXIgdGhhbiBtaW5pbWFsbHkgZ3VhcmFudGVlZC4gIFRoaXMgZG9lc24ndCBsb29wIG11Y2gKKyAgICAgYmVjYXVzZSBvbiBhdmVyYWdlIGEgbm9kZSBpbiBhIHRyZWUgaXMgbmVhciB0aGUgYm90dG9tLgorICAzLiBJZiB4IGlzIHRoZSBiYXNlIG9mIGEgY2hhaW4gKGkuZS4sIGhhcyBwYXJlbnQgbGlua3MpIHJlbGluaworICAgICB4J3MgcGFyZW50IGFuZCBjaGlsZHJlbiB0byB4J3MgcmVwbGFjZW1lbnQgKG9yIG51bGwgaWYgbm9uZSkuCisqLworCisjZGVmaW5lIHVubGlua19sYXJnZV9jaHVuayhNLCBYKSB7XAorICB0Y2h1bmtwdHIgWFAgPSBYLT5wYXJlbnQ7XAorICB0Y2h1bmtwdHIgUjtcCisgIGlmIChYLT5iayAhPSBYKSB7XAorICAgIHRjaHVua3B0ciBGID0gWC0+ZmQ7XAorICAgIFIgPSBYLT5iaztcCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBGKSkpIHtcCisgICAgICBGLT5iayA9IFI7XAorICAgICAgUi0+ZmQgPSBGO1wKKyAgICB9XAorICAgIGVsc2Uge1wKKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICB9XAorICB9XAorICBlbHNlIHtcCisgICAgdGNodW5rcHRyKiBSUDtcCisgICAgaWYgKCgoUiA9ICooUlAgPSAmKFgtPmNoaWxkWzFdKSkpICE9IDApIHx8XAorCSgoUiA9ICooUlAgPSAmKFgtPmNoaWxkWzBdKSkpICE9IDApKSB7XAorICAgICAgdGNodW5rcHRyKiBDUDtcCisgICAgICB3aGlsZSAoKCooQ1AgPSAmKFItPmNoaWxkWzFdKSkgIT0gMCkgfHxcCisJICAgICAoKihDUCA9ICYoUi0+Y2hpbGRbMF0pKSAhPSAwKSkge1wKKwlSID0gKihSUCA9IENQKTtcCisgICAgICB9XAorICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSUCkpKVwKKwkqUlAgPSAwO1wKKyAgICAgIGVsc2Uge1wKKwlDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICB9XAorICAgIH1cCisgIH1cCisgIGlmIChYUCAhPSAwKSB7XAorICAgIHRiaW5wdHIqIEggPSB0cmVlYmluX2F0KE0sIFgtPmluZGV4KTtcCisgICAgaWYgKFggPT0gKkgpIHtcCisgICAgICBpZiAoKCpIID0gUikgPT0gMCkgXAorCWNsZWFyX3RyZWVtYXAoTSwgWC0+aW5kZXgpO1wKKyAgICB9XAorICAgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBYUCkpKSB7XAorICAgICAgaWYgKFhQLT5jaGlsZFswXSA9PSBYKSBcCisJWFAtPmNoaWxkWzBdID0gUjtcCisgICAgICBlbHNlIFwKKwlYUC0+Y2hpbGRbMV0gPSBSO1wKKyAgICB9XAorICAgIGVsc2VcCisgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgaWYgKFIgIT0gMCkge1wKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgUikpKSB7XAorCXRjaHVua3B0ciBDMCwgQzE7XAorCVItPnBhcmVudCA9IFhQO1wKKwlpZiAoKEMwID0gWC0+Y2hpbGRbMF0pICE9IDApIHtcCisJICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMwKSkpIHtcCisJICAgIFItPmNoaWxkWzBdID0gQzA7XAorCSAgICBDMC0+cGFyZW50ID0gUjtcCisJICB9XAorCSAgZWxzZVwKKwkgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorCX1cCisJaWYgKChDMSA9IFgtPmNoaWxkWzFdKSAhPSAwKSB7XAorCSAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDMSkpKSB7XAorCSAgICBSLT5jaGlsZFsxXSA9IEMxO1wKKwkgICAgQzEtPnBhcmVudCA9IFI7XAorCSAgfVwKKwkgIGVsc2VcCisJICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKwl9XAorICAgICAgfVwKKyAgICAgIGVsc2VcCisJQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIH1cCisgIH1cCit9CisKKy8qIFJlbGF5cyB0byBsYXJnZSB2cyBzbWFsbCBiaW4gb3BlcmF0aW9ucyAqLworCisjZGVmaW5lIGluc2VydF9jaHVuayhNLCBQLCBTKVwKKyAgaWYgKGlzX3NtYWxsKFMpKSBpbnNlcnRfc21hbGxfY2h1bmsoTSwgUCwgUylcCisgIGVsc2UgeyB0Y2h1bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgaW5zZXJ0X2xhcmdlX2NodW5rKE0sIFRQLCBTKTsgfQorCisjZGVmaW5lIHVubGlua19jaHVuayhNLCBQLCBTKVwKKyAgaWYgKGlzX3NtYWxsKFMpKSB1bmxpbmtfc21hbGxfY2h1bmsoTSwgUCwgUylcCisgIGVsc2UgeyB0Y2h1bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgdW5saW5rX2xhcmdlX2NodW5rKE0sIFRQKTsgfQorCisKKy8qIFJlbGF5cyB0byBpbnRlcm5hbCBjYWxscyB0byBtYWxsb2MvZnJlZSBmcm9tIHJlYWxsb2MsIG1lbWFsaWduIGV0YyAqLworCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKSBtc3BhY2VfbWFsbG9jKG0sIGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKSBtc3BhY2VfZnJlZShtLG1lbSk7CisjZWxzZSAvKiBPTkxZX01TUEFDRVMgKi8KKyNpZiBNU1BBQ0VTCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKVwKKyAgIChtID09IGdtKT8gZGxtYWxsb2MoYikgOiBtc3BhY2VfbWFsbG9jKG0sIGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKVwKKyAgIGlmIChtID09IGdtKSBkbGZyZWUobWVtKTsgZWxzZSBtc3BhY2VfZnJlZShtLG1lbSk7CisjZWxzZSAvKiBNU1BBQ0VTICovCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKSBkbG1hbGxvYyhiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSkgZGxmcmVlKG1lbSkKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisjZW5kaWYgLyogT05MWV9NU1BBQ0VTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEaXJlY3QtbW1hcHBpbmcgY2h1bmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIERpcmVjdGx5IG1tYXBwZWQgY2h1bmtzIGFyZSBzZXQgdXAgd2l0aCBhbiBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mCisgIHRoZSBtbWFwcGVkIHJlZ2lvbiBzdG9yZWQgaW4gdGhlIHByZXZfZm9vdCBmaWVsZCBvZiB0aGUgY2h1bmsuIFRoaXMKKyAgYWxsb3dzIHJlY29uc3RydWN0aW9uIG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudCB0byBNVU5NQVAgd2hlbiBmcmVlZCwKKyAgYW5kIGFsc28gYWxsb3dzIGFkanVzdG1lbnQgb2YgdGhlIHJldHVybmVkIGNodW5rIHRvIG1lZXQgYWxpZ25tZW50CisgIHJlcXVpcmVtZW50cyAoZXNwZWNpYWxseSBpbiBtZW1hbGlnbikuICBUaGVyZSBpcyBhbHNvIGVub3VnaCBzcGFjZQorICBhbGxvY2F0ZWQgdG8gaG9sZCBhIGZha2UgbmV4dCBjaHVuayBvZiBzaXplIFNJWkVfVF9TSVpFIHRvIG1haW50YWluCisgIHRoZSBQSU5VU0UgYml0IHNvIGZyZWVzIGNhbiBiZSBjaGVja2VkLgorKi8KKworLyogTWFsbG9jIHVzaW5nIG1tYXAgKi8KK3N0YXRpYyB2b2lkKiBtbWFwX2FsbG9jKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgc2l6ZV90IG1tc2l6ZSA9IG1tYXBfYWxpZ24obmIgKyBTSVhfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7CisgIGlmIChtbXNpemUgPiBuYikgeyAgICAgLyogQ2hlY2sgZm9yIHdyYXAgYXJvdW5kIDAgKi8KKyAgICBjaGFyKiBtbSA9IChjaGFyKikoQ0FMTF9ESVJFQ1RfTU1BUChtbXNpemUpKTsKKyAgICBpZiAobW0gIT0gQ01GQUlMKSB7CisgICAgICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShtbSkpOworICAgICAgc2l6ZV90IHBzaXplID0gbW1zaXplIC0gb2Zmc2V0IC0gTU1BUF9GT09UX1BBRDsKKyAgICAgIG1jaHVua3B0ciBwID0gKG1jaHVua3B0cikobW0gKyBvZmZzZXQpOworICAgICAgcC0+cHJldl9mb290ID0gb2Zmc2V0IHwgSVNfTU1BUFBFRF9CSVQ7CisgICAgICAocCktPmhlYWQgPSAocHNpemV8Q0lOVVNFX0JJVCk7CisgICAgICBtYXJrX2ludXNlX2Zvb3QobSwgcCwgcHNpemUpOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAgICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZStTSVpFX1RfU0laRSktPmhlYWQgPSAwOworCisgICAgICBpZiAobW0gPCBtLT5sZWFzdF9hZGRyKQorCW0tPmxlYXN0X2FkZHIgPSBtbTsKKyAgICAgIGlmICgobS0+Zm9vdHByaW50ICs9IG1tc2l6ZSkgPiBtLT5tYXhfZm9vdHByaW50KQorCW0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisgICAgICBhc3NlcnQoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKTsKKyAgICAgIGNoZWNrX21tYXBwZWRfY2h1bmsobSwgcCk7CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogUmVhbGxvYyB1c2luZyBtbWFwICovCitzdGF0aWMgbWNodW5rcHRyIG1tYXBfcmVzaXplKG1zdGF0ZSBtLCBtY2h1bmtwdHIgb2xkcCwgc2l6ZV90IG5iKSB7CisgIHNpemVfdCBvbGRzaXplID0gY2h1bmtzaXplKG9sZHApOworICBpZiAoaXNfc21hbGwobmIpKSAvKiBDYW4ndCBzaHJpbmsgbW1hcCByZWdpb25zIGJlbG93IHNtYWxsIHNpemUgKi8KKyAgICByZXR1cm4gMDsKKyAgLyogS2VlcCBvbGQgY2h1bmsgaWYgYmlnIGVub3VnaCBidXQgbm90IHRvbyBiaWcgKi8KKyAgaWYgKG9sZHNpemUgPj0gbmIgKyBTSVpFX1RfU0laRSAmJgorICAgICAgKG9sZHNpemUgLSBuYikgPD0gKG1wYXJhbXMuZ3JhbnVsYXJpdHkgPDwgMSkpCisgICAgcmV0dXJuIG9sZHA7CisgIGVsc2UgeworICAgIHNpemVfdCBvZmZzZXQgPSBvbGRwLT5wcmV2X2Zvb3QgJiB+SVNfTU1BUFBFRF9CSVQ7CisgICAgc2l6ZV90IG9sZG1tc2l6ZSA9IG9sZHNpemUgKyBvZmZzZXQgKyBNTUFQX0ZPT1RfUEFEOworICAgIHNpemVfdCBuZXdtbXNpemUgPSBtbWFwX2FsaWduKG5iICsgU0lYX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOworICAgIGNoYXIqIGNwID0gKGNoYXIqKUNBTExfTVJFTUFQKChjaGFyKilvbGRwIC0gb2Zmc2V0LAorCQkJCSAgb2xkbW1zaXplLCBuZXdtbXNpemUsIDEpOworICAgIGlmIChjcCAhPSBDTUZBSUwpIHsKKyAgICAgIG1jaHVua3B0ciBuZXdwID0gKG1jaHVua3B0cikoY3AgKyBvZmZzZXQpOworICAgICAgc2l6ZV90IHBzaXplID0gbmV3bW1zaXplIC0gb2Zmc2V0IC0gTU1BUF9GT09UX1BBRDsKKyAgICAgIG5ld3AtPmhlYWQgPSAocHNpemV8Q0lOVVNFX0JJVCk7CisgICAgICBtYXJrX2ludXNlX2Zvb3QobSwgbmV3cCwgcHNpemUpOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUpLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAgICBjaHVua19wbHVzX29mZnNldChuZXdwLCBwc2l6ZStTSVpFX1RfU0laRSktPmhlYWQgPSAwOworCisgICAgICBpZiAoY3AgPCBtLT5sZWFzdF9hZGRyKQorCW0tPmxlYXN0X2FkZHIgPSBjcDsKKyAgICAgIGlmICgobS0+Zm9vdHByaW50ICs9IG5ld21tc2l6ZSAtIG9sZG1tc2l6ZSkgPiBtLT5tYXhfZm9vdHByaW50KQorCW0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisgICAgICBjaGVja19tbWFwcGVkX2NodW5rKG0sIG5ld3ApOworICAgICAgcmV0dXJuIG5ld3A7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtc3BhY2UgbWFuYWdlbWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbml0aWFsaXplIHRvcCBjaHVuayBhbmQgaXRzIHNpemUgKi8KK3N0YXRpYyB2b2lkIGluaXRfdG9wKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCwgc2l6ZV90IHBzaXplKSB7CisgIC8qIEVuc3VyZSBhbGlnbm1lbnQgKi8KKyAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocCkpOworICBwID0gKG1jaHVua3B0cikoKGNoYXIqKXAgKyBvZmZzZXQpOworICBwc2l6ZSAtPSBvZmZzZXQ7CisKKyAgbS0+dG9wID0gcDsKKyAgbS0+dG9wc2l6ZSA9IHBzaXplOworICBwLT5oZWFkID0gcHNpemUgfCBQSU5VU0VfQklUOworICAvKiBzZXQgc2l6ZSBvZiBmYWtlIHRyYWlsaW5nIGNodW5rIGhvbGRpbmcgb3ZlcmhlYWQgc3BhY2Ugb25seSBvbmNlICovCisgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKS0+aGVhZCA9IFRPUF9GT09UX1NJWkU7CisgIG0tPnRyaW1fY2hlY2sgPSBtcGFyYW1zLnRyaW1fdGhyZXNob2xkOyAvKiByZXNldCBvbiBlYWNoIHVwZGF0ZSAqLworfQorCisvKiBJbml0aWFsaXplIGJpbnMgZm9yIGEgbmV3IG1zdGF0ZSB0aGF0IGlzIG90aGVyd2lzZSB6ZXJvZWQgb3V0ICovCitzdGF0aWMgdm9pZCBpbml0X2JpbnMobXN0YXRlIG0pIHsKKyAgLyogRXN0YWJsaXNoIGNpcmN1bGFyIGxpbmtzIGZvciBzbWFsbGJpbnMgKi8KKyAgYmluZGV4X3QgaTsKKyAgZm9yIChpID0gMDsgaSA8IE5TTUFMTEJJTlM7ICsraSkgeworICAgIHNiaW5wdHIgYmluID0gc21hbGxiaW5fYXQobSxpKTsKKyAgICBiaW4tPmZkID0gYmluLT5iayA9IGJpbjsKKyAgfQorfQorCisjaWYgUFJPQ0VFRF9PTl9FUlJPUgorCisvKiBkZWZhdWx0IGNvcnJ1cHRpb24gYWN0aW9uICovCitzdGF0aWMgdm9pZCByZXNldF9vbl9lcnJvcihtc3RhdGUgbSkgeworICBpbnQgaTsKKyAgKyttYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsKKyAgLyogUmVpbml0aWFsaXplIGZpZWxkcyB0byBmb3JnZXQgYWJvdXQgYWxsIG1lbW9yeSAqLworICBtLT5zbWFsbGJpbnMgPSBtLT50cmVlYmlucyA9IDA7CisgIG0tPmR2c2l6ZSA9IG0tPnRvcHNpemUgPSAwOworICBtLT5zZWcuYmFzZSA9IDA7CisgIG0tPnNlZy5zaXplID0gMDsKKyAgbS0+c2VnLm5leHQgPSAwOworICBtLT50b3AgPSBtLT5kdiA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCBOVFJFRUJJTlM7ICsraSkKKyAgICAqdHJlZWJpbl9hdChtLCBpKSA9IDA7CisgIGluaXRfYmlucyhtKTsKK30KKyNlbmRpZiAvKiBQUk9DRUVEX09OX0VSUk9SICovCisKKy8qIEFsbG9jYXRlIGNodW5rIGFuZCBwcmVwZW5kIHJlbWFpbmRlciB3aXRoIGNodW5rIGluIHN1Y2Nlc3NvciBiYXNlLiAqLworc3RhdGljIHZvaWQqIHByZXBlbmRfYWxsb2MobXN0YXRlIG0sIGNoYXIqIG5ld2Jhc2UsIGNoYXIqIG9sZGJhc2UsCisJCQkgICBzaXplX3QgbmIpIHsKKyAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhuZXdiYXNlKTsKKyAgbWNodW5rcHRyIG9sZGZpcnN0ID0gYWxpZ25fYXNfY2h1bmsob2xkYmFzZSk7CisgIHNpemVfdCBwc2l6ZSA9IChjaGFyKilvbGRmaXJzdCAtIChjaGFyKilwOworICBtY2h1bmtwdHIgcSA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgc2l6ZV90IHFzaXplID0gcHNpemUgLSBuYjsKKyAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBuYik7CisKKyAgYXNzZXJ0KChjaGFyKilvbGRmaXJzdCA+IChjaGFyKilxKTsKKyAgYXNzZXJ0KHBpbnVzZShvbGRmaXJzdCkpOworICBhc3NlcnQocXNpemUgPj0gTUlOX0NIVU5LX1NJWkUpOworCisgIC8qIGNvbnNvbGlkYXRlIHJlbWFpbmRlciB3aXRoIGZpcnN0IGNodW5rIG9mIG9sZCBiYXNlICovCisgIGlmIChvbGRmaXJzdCA9PSBtLT50b3ApIHsKKyAgICBzaXplX3QgdHNpemUgPSBtLT50b3BzaXplICs9IHFzaXplOworICAgIG0tPnRvcCA9IHE7CisgICAgcS0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKyAgICBjaGVja190b3BfY2h1bmsobSwgcSk7CisgIH0KKyAgZWxzZSBpZiAob2xkZmlyc3QgPT0gbS0+ZHYpIHsKKyAgICBzaXplX3QgZHNpemUgPSBtLT5kdnNpemUgKz0gcXNpemU7CisgICAgbS0+ZHYgPSBxOworICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhxLCBkc2l6ZSk7CisgIH0KKyAgZWxzZSB7CisgICAgaWYgKCFjaW51c2Uob2xkZmlyc3QpKSB7CisgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUob2xkZmlyc3QpOworICAgICAgdW5saW5rX2NodW5rKG0sIG9sZGZpcnN0LCBuc2l6ZSk7CisgICAgICBvbGRmaXJzdCA9IGNodW5rX3BsdXNfb2Zmc2V0KG9sZGZpcnN0LCBuc2l6ZSk7CisgICAgICBxc2l6ZSArPSBuc2l6ZTsKKyAgICB9CisgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocSwgcXNpemUsIG9sZGZpcnN0KTsKKyAgICBpbnNlcnRfY2h1bmsobSwgcSwgcXNpemUpOworICAgIGNoZWNrX2ZyZWVfY2h1bmsobSwgcSk7CisgIH0KKworICBjaGVja19tYWxsb2NlZF9jaHVuayhtLCBjaHVuazJtZW0ocCksIG5iKTsKKyAgcmV0dXJuIGNodW5rMm1lbShwKTsKK30KKworLyogQWRkIGEgc2VnbWVudCB0byBob2xkIGEgbmV3IG5vbmNvbnRpZ3VvdXMgcmVnaW9uICovCitzdGF0aWMgdm9pZCBhZGRfc2VnbWVudChtc3RhdGUgbSwgY2hhciogdGJhc2UsIHNpemVfdCB0c2l6ZSwgZmxhZ190IG1tYXBwZWQpIHsKKyAgLyogRGV0ZXJtaW5lIGxvY2F0aW9ucyBhbmQgc2l6ZXMgb2Ygc2VnbWVudCwgZmVuY2Vwb3N0cywgb2xkIHRvcCAqLworICBjaGFyKiBvbGRfdG9wID0gKGNoYXIqKW0tPnRvcDsKKyAgbXNlZ21lbnRwdHIgb2xkc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgb2xkX3RvcCk7CisgIGNoYXIqIG9sZF9lbmQgPSBvbGRzcC0+YmFzZSArIG9sZHNwLT5zaXplOworICBzaXplX3Qgc3NpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zZWdtZW50KSk7CisgIGNoYXIqIHJhd3NwID0gb2xkX2VuZCAtIChzc2l6ZSArIEZPVVJfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7CisgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKHJhd3NwKSk7CisgIGNoYXIqIGFzcCA9IHJhd3NwICsgb2Zmc2V0OworICBjaGFyKiBjc3AgPSAoYXNwIDwgKG9sZF90b3AgKyBNSU5fQ0hVTktfU0laRSkpPyBvbGRfdG9wIDogYXNwOworICBtY2h1bmtwdHIgc3AgPSAobWNodW5rcHRyKWNzcDsKKyAgbXNlZ21lbnRwdHIgc3MgPSAobXNlZ21lbnRwdHIpKGNodW5rMm1lbShzcCkpOworICBtY2h1bmtwdHIgdG5leHQgPSBjaHVua19wbHVzX29mZnNldChzcCwgc3NpemUpOworICBtY2h1bmtwdHIgcCA9IHRuZXh0OworICBpbnQgbmZlbmNlcyA9IDA7CisKKyAgLyogcmVzZXQgdG9wIHRvIG5ldyBzcGFjZSAqLworICBpbml0X3RvcChtLCAobWNodW5rcHRyKXRiYXNlLCB0c2l6ZSAtIFRPUF9GT09UX1NJWkUpOworCisgIC8qIFNldCB1cCBzZWdtZW50IHJlY29yZCAqLworICBhc3NlcnQoaXNfYWxpZ25lZChzcykpOworICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHNwLCBzc2l6ZSk7CisgICpzcyA9IG0tPnNlZzsgLyogUHVzaCBjdXJyZW50IHJlY29yZCAqLworICBtLT5zZWcuYmFzZSA9IHRiYXNlOworICBtLT5zZWcuc2l6ZSA9IHRzaXplOworICBtLT5zZWcuc2ZsYWdzID0gbW1hcHBlZDsKKyAgbS0+c2VnLm5leHQgPSBzczsKKworICAvKiBJbnNlcnQgdHJhaWxpbmcgZmVuY2Vwb3N0cyAqLworICBmb3IgKDs7KSB7CisgICAgbWNodW5rcHRyIG5leHRwID0gY2h1bmtfcGx1c19vZmZzZXQocCwgU0laRV9UX1NJWkUpOworICAgIHAtPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsKKyAgICArK25mZW5jZXM7CisgICAgaWYgKChjaGFyKikoJihuZXh0cC0+aGVhZCkpIDwgb2xkX2VuZCkKKyAgICAgIHAgPSBuZXh0cDsKKyAgICBlbHNlCisgICAgICBicmVhazsKKyAgfQorICBhc3NlcnQobmZlbmNlcyA+PSAyKTsKKworICAvKiBJbnNlcnQgdGhlIHJlc3Qgb2Ygb2xkIHRvcCBpbnRvIGEgYmluIGFzIGFuIG9yZGluYXJ5IGZyZWUgY2h1bmsgKi8KKyAgaWYgKGNzcCAhPSBvbGRfdG9wKSB7CisgICAgbWNodW5rcHRyIHEgPSAobWNodW5rcHRyKW9sZF90b3A7CisgICAgc2l6ZV90IHBzaXplID0gY3NwIC0gb2xkX3RvcDsKKyAgICBtY2h1bmtwdHIgdG4gPSBjaHVua19wbHVzX29mZnNldChxLCBwc2l6ZSk7CisgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocSwgcHNpemUsIHRuKTsKKyAgICBpbnNlcnRfY2h1bmsobSwgcSwgcHNpemUpOworICB9CisKKyAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN5c3RlbSBhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gdXNpbmcgTU9SRUNPUkUgb3IgTU1BUCAqLworc3RhdGljIHZvaWQqIHN5c19hbGxvYyhtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIGNoYXIqIHRiYXNlID0gQ01GQUlMOworICBzaXplX3QgdHNpemUgPSAwOworICBmbGFnX3QgbW1hcF9mbGFnID0gMDsKKworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKworICAvKiBEaXJlY3RseSBtYXAgbGFyZ2UgY2h1bmtzICovCisgIGlmICh1c2VfbW1hcChtKSAmJiBuYiA+PSBtcGFyYW1zLm1tYXBfdGhyZXNob2xkKSB7CisgICAgdm9pZCogbWVtID0gbW1hcF9hbGxvYyhtLCBuYik7CisgICAgaWYgKG1lbSAhPSAwKQorICAgICAgcmV0dXJuIG1lbTsKKyAgfQorCisgIC8qCisgICAgVHJ5IGdldHRpbmcgbWVtb3J5IGluIGFueSBvZiB0aHJlZSB3YXlzIChpbiBtb3N0LXByZWZlcnJlZCB0bworICAgIGxlYXN0LXByZWZlcnJlZCBvcmRlcik6CisgICAgMS4gQSBjYWxsIHRvIE1PUkVDT1JFIHRoYXQgY2FuIG5vcm1hbGx5IGNvbnRpZ3VvdXNseSBleHRlbmQgbWVtb3J5LgorICAgICAgIChkaXNhYmxlZCBpZiBub3QgTU9SRUNPUkVfQ09OVElHVU9VUyBvciBub3QgSEFWRV9NT1JFQ09SRSBvcgorICAgICAgIG9yIG1haW4gc3BhY2UgaXMgbW1hcHBlZCBvciBhIHByZXZpb3VzIGNvbnRpZ3VvdXMgY2FsbCBmYWlsZWQpCisgICAgMi4gQSBjYWxsIHRvIE1NQVAgbmV3IHNwYWNlIChkaXNhYmxlZCBpZiBub3QgSEFWRV9NTUFQKS4KKyAgICAgICBOb3RlIHRoYXQgdW5kZXIgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGlmIE1PUkVDT1JFIGlzIHVuYWJsZSB0bworICAgICAgIGZ1bGZpbGwgYSByZXF1ZXN0LCBhbmQgSEFWRV9NTUFQIGlzIHRydWUsIHRoZW4gbW1hcCBpcworICAgICAgIHVzZWQgYXMgYSBub25jb250aWd1b3VzIHN5c3RlbSBhbGxvY2F0b3IuIFRoaXMgaXMgYSB1c2VmdWwgYmFja3VwCisgICAgICAgc3RyYXRlZ3kgZm9yIHN5c3RlbXMgd2l0aCBob2xlcyBpbiBhZGRyZXNzIHNwYWNlcyAtLSBpbiB0aGlzIGNhc2UKKyAgICAgICBzYnJrIGNhbm5vdCBjb250aWd1b3VzbHkgZXhwYW5kIHRoZSBoZWFwLCBidXQgbW1hcCBtYXkgYmUgYWJsZSB0bworICAgICAgIGZpbmQgc3BhY2UuCisgICAgMy4gQSBjYWxsIHRvIE1PUkVDT1JFIHRoYXQgY2Fubm90IHVzdWFsbHkgY29udGlndW91c2x5IGV4dGVuZCBtZW1vcnkuCisgICAgICAgKGRpc2FibGVkIGlmIG5vdCBIQVZFX01PUkVDT1JFKQorCisgICBJbiBhbGwgY2FzZXMsIHdlIG5lZWQgdG8gcmVxdWVzdCBlbm91Z2ggYnl0ZXMgZnJvbSBzeXN0ZW0gdG8gZW5zdXJlCisgICB3ZSBjYW4gbWFsbG9jIG5iIGJ5dGVzIHVwb24gc3VjY2Vzcywgc28gcGFkIHdpdGggZW5vdWdoIHNwYWNlIGZvcgorICAgdG9wX2Zvb3QsIHBsdXMgYWxpZ25tZW50LXBhZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgbG9zZSBieXRlcyBpZgorICAgbm90IG9uIGJvdW5kYXJ5LCBhbmQgcm91bmQgdGhpcyB1cCB0byBhIGdyYW51bGFyaXR5IHVuaXQuCisgICovCisKKyAgaWYgKE1PUkVDT1JFX0NPTlRJR1VPVVMgJiYgIXVzZV9ub25jb250aWd1b3VzKG0pKSB7CisgICAgY2hhciogYnIgPSBDTUZBSUw7CisgICAgbXNlZ21lbnRwdHIgc3MgPSAobS0+dG9wID09IDApPyAwIDogc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKiltLT50b3ApOworICAgIHNpemVfdCBhc2l6ZSA9IDA7CisgICAgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKworICAgIGlmIChzcyA9PSAwKSB7ICAvKiBGaXJzdCB0aW1lIHRocm91Z2ggb3IgcmVjb3ZlcnkgKi8KKyAgICAgIGNoYXIqIGJhc2UgPSAoY2hhciopQ0FMTF9NT1JFQ09SRSgwKTsKKyAgICAgIGlmIChiYXNlICE9IENNRkFJTCkgeworCWFzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBTWVNfQUxMT0NfUEFERElORyk7CisJLyogQWRqdXN0IHRvIGVuZCBvbiBhIHBhZ2UgYm91bmRhcnkgKi8KKwlpZiAoIWlzX3BhZ2VfYWxpZ25lZChiYXNlKSkKKwkgIGFzaXplICs9IChwYWdlX2FsaWduKChzaXplX3QpYmFzZSkgLSAoc2l6ZV90KWJhc2UpOworCS8qIENhbid0IGNhbGwgTU9SRUNPUkUgaWYgc2l6ZSBpcyBuZWdhdGl2ZSB3aGVuIHRyZWF0ZWQgYXMgc2lnbmVkICovCisJaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmCisJICAgIChiciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkpKSA9PSBiYXNlKSB7CisJICB0YmFzZSA9IGJhc2U7CisJICB0c2l6ZSA9IGFzaXplOworCX0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBTdWJ0cmFjdCBvdXQgZXhpc3RpbmcgYXZhaWxhYmxlIHRvcCBzcGFjZSBmcm9tIE1PUkVDT1JFIHJlcXVlc3QuICovCisgICAgICBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iIC0gbS0+dG9wc2l6ZSArIFNZU19BTExPQ19QQURESU5HKTsKKyAgICAgIC8qIFVzZSBtZW0gaGVyZSBvbmx5IGlmIGl0IGRpZCBjb250aW51b3VzbHkgZXh0ZW5kIG9sZCBzcGFjZSAqLworICAgICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmCisJICAoYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKSkgPT0gc3MtPmJhc2Urc3MtPnNpemUpIHsKKwl0YmFzZSA9IGJyOworCXRzaXplID0gYXNpemU7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHRiYXNlID09IENNRkFJTCkgeyAgICAvKiBDb3BlIHdpdGggcGFydGlhbCBmYWlsdXJlICovCisgICAgICBpZiAoYnIgIT0gQ01GQUlMKSB7ICAgIC8qIFRyeSB0byB1c2UvZXh0ZW5kIHRoZSBzcGFjZSB3ZSBkaWQgZ2V0ICovCisJaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmCisJICAgIGFzaXplIDwgbmIgKyBTWVNfQUxMT0NfUEFERElORykgeworCSAgc2l6ZV90IGVzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBTWVNfQUxMT0NfUEFERElORyAtIGFzaXplKTsKKwkgIGlmIChlc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCkgeworCSAgICBjaGFyKiBlbmQgPSAoY2hhciopQ0FMTF9NT1JFQ09SRShlc2l6ZSk7CisJICAgIGlmIChlbmQgIT0gQ01GQUlMKQorCSAgICAgIGFzaXplICs9IGVzaXplOworCSAgICBlbHNlIHsgICAgICAgICAgICAvKiBDYW4ndCB1c2U7IHRyeSB0byByZWxlYXNlICovCisJICAgICAgKHZvaWQpIENBTExfTU9SRUNPUkUoLWFzaXplKTsKKwkgICAgICBiciA9IENNRkFJTDsKKwkgICAgfQorCSAgfQorCX0KKyAgICAgIH0KKyAgICAgIGlmIChiciAhPSBDTUZBSUwpIHsgICAgLyogVXNlIHRoZSBzcGFjZSB3ZSBkaWQgZ2V0ICovCisJdGJhc2UgPSBicjsKKwl0c2l6ZSA9IGFzaXplOworICAgICAgfQorICAgICAgZWxzZQorCWRpc2FibGVfY29udGlndW91cyhtKTsgLyogRG9uJ3QgdHJ5IGNvbnRpZ3VvdXMgcGF0aCBpbiB0aGUgZnV0dXJlICovCisgICAgfQorCisgICAgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgfQorCisgIGlmIChIQVZFX01NQVAgJiYgdGJhc2UgPT0gQ01GQUlMKSB7ICAvKiBUcnkgTU1BUCAqLworICAgIHNpemVfdCByc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcpOworICAgIGlmIChyc2l6ZSA+IG5iKSB7IC8qIEZhaWwgaWYgd3JhcHMgYXJvdW5kIHplcm8gKi8KKyAgICAgIGNoYXIqIG1wID0gKGNoYXIqKShDQUxMX01NQVAocnNpemUpKTsKKyAgICAgIGlmIChtcCAhPSBDTUZBSUwpIHsKKwl0YmFzZSA9IG1wOworCXRzaXplID0gcnNpemU7CisJbW1hcF9mbGFnID0gSVNfTU1BUFBFRF9CSVQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKEhBVkVfTU9SRUNPUkUgJiYgdGJhc2UgPT0gQ01GQUlMKSB7IC8qIFRyeSBub25jb250aWd1b3VzIE1PUkVDT1JFICovCisgICAgc2l6ZV90IGFzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBTWVNfQUxMT0NfUEFERElORyk7CisgICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UKSB7CisgICAgICBjaGFyKiBiciA9IENNRkFJTDsKKyAgICAgIGNoYXIqIGVuZCA9IENNRkFJTDsKKyAgICAgIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisgICAgICBiciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkpOworICAgICAgZW5kID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKDApKTsKKyAgICAgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisgICAgICBpZiAoYnIgIT0gQ01GQUlMICYmIGVuZCAhPSBDTUZBSUwgJiYgYnIgPCBlbmQpIHsKKwlzaXplX3Qgc3NpemUgPSBlbmQgLSBicjsKKwlpZiAoc3NpemUgPiBuYiArIFRPUF9GT09UX1NJWkUpIHsKKwkgIHRiYXNlID0gYnI7CisJICB0c2l6ZSA9IHNzaXplOworCX0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAodGJhc2UgIT0gQ01GQUlMKSB7CisKKyAgICBpZiAoKG0tPmZvb3RwcmludCArPSB0c2l6ZSkgPiBtLT5tYXhfZm9vdHByaW50KQorICAgICAgbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsKKworICAgIGlmICghaXNfaW5pdGlhbGl6ZWQobSkpIHsgLyogZmlyc3QtdGltZSBpbml0aWFsaXphdGlvbiAqLworICAgICAgbS0+c2VnLmJhc2UgPSBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgICAgICBtLT5zZWcuc2l6ZSA9IHRzaXplOworICAgICAgbS0+c2VnLnNmbGFncyA9IG1tYXBfZmxhZzsKKyAgICAgIG0tPm1hZ2ljID0gbXBhcmFtcy5tYWdpYzsKKyAgICAgIG0tPnJlbGVhc2VfY2hlY2tzID0gTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURTsKKyAgICAgIGluaXRfYmlucyhtKTsKKyNpZiAhT05MWV9NU1BBQ0VTCisgICAgICBpZiAoaXNfZ2xvYmFsKG0pKQorCWluaXRfdG9wKG0sIChtY2h1bmtwdHIpdGJhc2UsIHRzaXplIC0gVE9QX0ZPT1RfU0laRSk7CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgIHsKKwkvKiBPZmZzZXQgdG9wIGJ5IGVtYmVkZGVkIG1hbGxvY19zdGF0ZSAqLworCW1jaHVua3B0ciBtbiA9IG5leHRfY2h1bmsobWVtMmNodW5rKG0pKTsKKwlpbml0X3RvcChtLCBtbiwgKHNpemVfdCkoKHRiYXNlICsgdHNpemUpIC0gKGNoYXIqKW1uKSAtVE9QX0ZPT1RfU0laRSk7CisgICAgICB9CisgICAgfQorCisgICAgZWxzZSB7CisgICAgICAvKiBUcnkgdG8gbWVyZ2Ugd2l0aCBhbiBleGlzdGluZyBzZWdtZW50ICovCisgICAgICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgICAgICAvKiBPbmx5IGNvbnNpZGVyIG1vc3QgcmVjZW50IHNlZ21lbnQgaWYgdHJhdmVyc2FsIHN1cHByZXNzZWQgKi8KKyAgICAgIHdoaWxlIChzcCAhPSAwICYmIHRiYXNlICE9IHNwLT5iYXNlICsgc3AtPnNpemUpCisJc3AgPSAoTk9fU0VHTUVOVF9UUkFWRVJTQUwpID8gMCA6IHNwLT5uZXh0OworICAgICAgaWYgKHNwICE9IDAgJiYKKwkgICFpc19leHRlcm5fc2VnbWVudChzcCkgJiYKKwkgIChzcC0+c2ZsYWdzICYgSVNfTU1BUFBFRF9CSVQpID09IG1tYXBfZmxhZyAmJgorCSAgc2VnbWVudF9ob2xkcyhzcCwgbS0+dG9wKSkgeyAvKiBhcHBlbmQgKi8KKwlzcC0+c2l6ZSArPSB0c2l6ZTsKKwlpbml0X3RvcChtLCBtLT50b3AsIG0tPnRvcHNpemUgKyB0c2l6ZSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlpZiAodGJhc2UgPCBtLT5sZWFzdF9hZGRyKQorCSAgbS0+bGVhc3RfYWRkciA9IHRiYXNlOworCXNwID0gJm0tPnNlZzsKKwl3aGlsZSAoc3AgIT0gMCAmJiBzcC0+YmFzZSAhPSB0YmFzZSArIHRzaXplKQorCSAgc3AgPSAoTk9fU0VHTUVOVF9UUkFWRVJTQUwpID8gMCA6IHNwLT5uZXh0OworCWlmIChzcCAhPSAwICYmCisJICAgICFpc19leHRlcm5fc2VnbWVudChzcCkgJiYKKwkgICAgKHNwLT5zZmxhZ3MgJiBJU19NTUFQUEVEX0JJVCkgPT0gbW1hcF9mbGFnKSB7CisJICBjaGFyKiBvbGRiYXNlID0gc3AtPmJhc2U7CisJICBzcC0+YmFzZSA9IHRiYXNlOworCSAgc3AtPnNpemUgKz0gdHNpemU7CisJICByZXR1cm4gcHJlcGVuZF9hbGxvYyhtLCB0YmFzZSwgb2xkYmFzZSwgbmIpOworCX0KKwllbHNlCisJICBhZGRfc2VnbWVudChtLCB0YmFzZSwgdHNpemUsIG1tYXBfZmxhZyk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDwgbS0+dG9wc2l6ZSkgeyAvKiBBbGxvY2F0ZSBmcm9tIG5ldyBvciBleHRlbmRlZCB0b3Agc3BhY2UgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IG0tPnRvcHNpemUgLT0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IG0tPnRvcDsKKyAgICAgIG1jaHVua3B0ciByID0gbS0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgbmIpOworICAgICAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtLCBjaHVuazJtZW0ocCksIG5iKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisKKyAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIHN5c3RlbSBkZWFsbG9jYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVW5tYXAgYW5kIHVubGluayBhbnkgbW1hcHBlZCBzZWdtZW50cyB0aGF0IGRvbid0IGNvbnRhaW4gdXNlZCBjaHVua3MgKi8KK3N0YXRpYyBzaXplX3QgcmVsZWFzZV91bnVzZWRfc2VnbWVudHMobXN0YXRlIG0pIHsKKyAgc2l6ZV90IHJlbGVhc2VkID0gMDsKKyAgaW50IG5zZWdzID0gMDsKKyAgbXNlZ21lbnRwdHIgcHJlZCA9ICZtLT5zZWc7CisgIG1zZWdtZW50cHRyIHNwID0gcHJlZC0+bmV4dDsKKyAgd2hpbGUgKHNwICE9IDApIHsKKyAgICBjaGFyKiBiYXNlID0gc3AtPmJhc2U7CisgICAgc2l6ZV90IHNpemUgPSBzcC0+c2l6ZTsKKyAgICBtc2VnbWVudHB0ciBuZXh0ID0gc3AtPm5leHQ7CisgICAgKytuc2VnczsKKyAgICBpZiAoaXNfbW1hcHBlZF9zZWdtZW50KHNwKSAmJiAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApKSB7CisgICAgICBtY2h1bmtwdHIgcCA9IGFsaWduX2FzX2NodW5rKGJhc2UpOworICAgICAgc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgLyogQ2FuIHVubWFwIGlmIGZpcnN0IGNodW5rIGhvbGRzIGVudGlyZSBzZWdtZW50IGFuZCBub3QgcGlubmVkICovCisgICAgICBpZiAoIWNpbnVzZShwKSAmJiAoY2hhciopcCArIHBzaXplID49IGJhc2UgKyBzaXplIC0gVE9QX0ZPT1RfU0laRSkgeworCXRjaHVua3B0ciB0cCA9ICh0Y2h1bmtwdHIpcDsKKwlhc3NlcnQoc2VnbWVudF9ob2xkcyhzcCwgKGNoYXIqKXNwKSk7CisJaWYgKHAgPT0gbS0+ZHYpIHsKKwkgIG0tPmR2ID0gMDsKKwkgIG0tPmR2c2l6ZSA9IDA7CisJfQorCWVsc2UgeworCSAgdW5saW5rX2xhcmdlX2NodW5rKG0sIHRwKTsKKwl9CisJaWYgKENBTExfTVVOTUFQKGJhc2UsIHNpemUpID09IDApIHsKKwkgIHJlbGVhc2VkICs9IHNpemU7CisJICBtLT5mb290cHJpbnQgLT0gc2l6ZTsKKwkgIC8qIHVubGluayBvYnNvbGV0ZWQgcmVjb3JkICovCisJICBzcCA9IHByZWQ7CisJICBzcC0+bmV4dCA9IG5leHQ7CisJfQorCWVsc2UgeyAvKiBiYWNrIG91dCBpZiBjYW5ub3QgdW5tYXAgKi8KKwkgIGluc2VydF9sYXJnZV9jaHVuayhtLCB0cCwgcHNpemUpOworCX0KKyAgICAgIH0KKyAgICB9CisgICAgaWYgKE5PX1NFR01FTlRfVFJBVkVSU0FMKSAvKiBzY2FuIG9ubHkgZmlyc3Qgc2VnbWVudCAqLworICAgICAgYnJlYWs7CisgICAgcHJlZCA9IHNwOworICAgIHNwID0gbmV4dDsKKyAgfQorICAvKiBSZXNldCBjaGVjayBjb3VudGVyICovCisgIG0tPnJlbGVhc2VfY2hlY2tzID0gKChuc2VncyA+IE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUpPworCQkgICAgICAgbnNlZ3MgOiBNQVhfUkVMRUFTRV9DSEVDS19SQVRFKTsKKyAgcmV0dXJuIHJlbGVhc2VkOworfQorCitzdGF0aWMgaW50IHN5c190cmltKG1zdGF0ZSBtLCBzaXplX3QgcGFkKSB7CisgIHNpemVfdCByZWxlYXNlZCA9IDA7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBpZiAocGFkIDwgTUFYX1JFUVVFU1QgJiYgaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICBwYWQgKz0gVE9QX0ZPT1RfU0laRTsgLyogZW5zdXJlIGVub3VnaCByb29tIGZvciBzZWdtZW50IG92ZXJoZWFkICovCisKKyAgICBpZiAobS0+dG9wc2l6ZSA+IHBhZCkgeworICAgICAgLyogU2hyaW5rIHRvcCBzcGFjZSBpbiBncmFudWxhcml0eS1zaXplIHVuaXRzLCBrZWVwaW5nIGF0IGxlYXN0IG9uZSAqLworICAgICAgc2l6ZV90IHVuaXQgPSBtcGFyYW1zLmdyYW51bGFyaXR5OworICAgICAgc2l6ZV90IGV4dHJhID0gKChtLT50b3BzaXplIC0gcGFkICsgKHVuaXQgLSBTSVpFX1RfT05FKSkgLyB1bml0IC0KKwkJICAgICAgU0laRV9UX09ORSkgKiB1bml0OworICAgICAgbXNlZ21lbnRwdHIgc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIqKW0tPnRvcCk7CisKKyAgICAgIGlmICghaXNfZXh0ZXJuX3NlZ21lbnQoc3ApKSB7CisJaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkpIHsKKwkgIGlmIChIQVZFX01NQVAgJiYKKwkgICAgICBzcC0+c2l6ZSA+PSBleHRyYSAmJgorCSAgICAgICFoYXNfc2VnbWVudF9saW5rKG0sIHNwKSkgeyAvKiBjYW4ndCBzaHJpbmsgaWYgcGlubmVkICovCisJICAgIHNpemVfdCBuZXdzaXplID0gc3AtPnNpemUgLSBleHRyYTsKKwkgICAgLyogUHJlZmVyIG1yZW1hcCwgZmFsbCBiYWNrIHRvIG11bm1hcCAqLworCSAgICBpZiAoKENBTExfTVJFTUFQKHNwLT5iYXNlLCBzcC0+c2l6ZSwgbmV3c2l6ZSwgMCkgIT0gTUZBSUwpIHx8CisJCShDQUxMX01VTk1BUChzcC0+YmFzZSArIG5ld3NpemUsIGV4dHJhKSA9PSAwKSkgeworCSAgICAgIHJlbGVhc2VkID0gZXh0cmE7CisJICAgIH0KKwkgIH0KKwl9CisJZWxzZSBpZiAoSEFWRV9NT1JFQ09SRSkgeworCSAgaWYgKGV4dHJhID49IEhBTEZfTUFYX1NJWkVfVCkgLyogQXZvaWQgd3JhcHBpbmcgbmVnYXRpdmUgKi8KKwkgICAgZXh0cmEgPSAoSEFMRl9NQVhfU0laRV9UKSArIFNJWkVfVF9PTkUgLSB1bml0OworCSAgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKwkgIHsKKwkgICAgLyogTWFrZSBzdXJlIGVuZCBvZiBtZW1vcnkgaXMgd2hlcmUgd2UgbGFzdCBzZXQgaXQuICovCisJICAgIGNoYXIqIG9sZF9iciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7CisJICAgIGlmIChvbGRfYnIgPT0gc3AtPmJhc2UgKyBzcC0+c2l6ZSkgeworCSAgICAgIGNoYXIqIHJlbF9iciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgtZXh0cmEpKTsKKwkgICAgICBjaGFyKiBuZXdfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworCSAgICAgIGlmIChyZWxfYnIgIT0gQ01GQUlMICYmIG5ld19iciA8IG9sZF9icikKKwkJcmVsZWFzZWQgPSBvbGRfYnIgLSBuZXdfYnI7CisJICAgIH0KKwkgIH0KKwkgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisJfQorICAgICAgfQorCisgICAgICBpZiAocmVsZWFzZWQgIT0gMCkgeworCXNwLT5zaXplIC09IHJlbGVhc2VkOworCW0tPmZvb3RwcmludCAtPSByZWxlYXNlZDsKKwlpbml0X3RvcChtLCBtLT50b3AsIG0tPnRvcHNpemUgLSByZWxlYXNlZCk7CisJY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgICB9CisgICAgfQorCisgICAgLyogVW5tYXAgYW55IHVudXNlZCBtbWFwcGVkIHNlZ21lbnRzICovCisgICAgaWYgKEhBVkVfTU1BUCkKKyAgICAgIHJlbGVhc2VkICs9IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG0pOworCisgICAgLyogT24gZmFpbHVyZSwgZGlzYWJsZSBhdXRvdHJpbSB0byBhdm9pZCByZXBlYXRlZCBmYWlsZWQgZnV0dXJlIGNhbGxzICovCisgICAgaWYgKHJlbGVhc2VkID09IDAgJiYgbS0+dG9wc2l6ZSA+IG0tPnRyaW1fY2hlY2spCisgICAgICBtLT50cmltX2NoZWNrID0gTUFYX1NJWkVfVDsKKyAgfQorCisgIHJldHVybiAocmVsZWFzZWQgIT0gMCk/IDEgOiAwOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9jIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGFsbG9jYXRlIGEgbGFyZ2UgcmVxdWVzdCBmcm9tIHRoZSBiZXN0IGZpdHRpbmcgY2h1bmsgaW4gYSB0cmVlYmluICovCitzdGF0aWMgdm9pZCogdG1hbGxvY19sYXJnZShtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIHRjaHVua3B0ciB2ID0gMDsKKyAgc2l6ZV90IHJzaXplID0gLW5iOyAvKiBVbnNpZ25lZCBuZWdhdGlvbiAqLworICB0Y2h1bmtwdHIgdDsKKyAgYmluZGV4X3QgaWR4OworICBjb21wdXRlX3RyZWVfaW5kZXgobmIsIGlkeCk7CisgIGlmICgodCA9ICp0cmVlYmluX2F0KG0sIGlkeCkpICE9IDApIHsKKyAgICAvKiBUcmF2ZXJzZSB0cmVlIGZvciB0aGlzIGJpbiBsb29raW5nIGZvciBub2RlIHdpdGggc2l6ZSA9PSBuYiAqLworICAgIHNpemVfdCBzaXplYml0cyA9IG5iIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpZHgpOworICAgIHRjaHVua3B0ciByc3QgPSAwOyAgLyogVGhlIGRlZXBlc3QgdW50YWtlbiByaWdodCBzdWJ0cmVlICovCisgICAgZm9yICg7OykgeworICAgICAgdGNodW5rcHRyIHJ0OworICAgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsKKyAgICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKwl2ID0gdDsKKwlpZiAoKHJzaXplID0gdHJlbSkgPT0gMCkKKwkgIGJyZWFrOworICAgICAgfQorICAgICAgcnQgPSB0LT5jaGlsZFsxXTsKKyAgICAgIHQgPSB0LT5jaGlsZFsoc2l6ZWJpdHMgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdOworICAgICAgaWYgKHJ0ICE9IDAgJiYgcnQgIT0gdCkKKwlyc3QgPSBydDsKKyAgICAgIGlmICh0ID09IDApIHsKKwl0ID0gcnN0OyAvKiBzZXQgdCB0byBsZWFzdCBzdWJ0cmVlIGhvbGRpbmcgc2l6ZXMgPiBuYiAqLworCWJyZWFrOworICAgICAgfQorICAgICAgc2l6ZWJpdHMgPDw9IDE7CisgICAgfQorICB9CisgIGlmICh0ID09IDAgJiYgdiA9PSAwKSB7IC8qIHNldCB0IHRvIHJvb3Qgb2YgbmV4dCBub24tZW1wdHkgdHJlZWJpbiAqLworICAgIGJpbm1hcF90IGxlZnRiaXRzID0gbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSkgJiBtLT50cmVlbWFwOworICAgIGlmIChsZWZ0Yml0cyAhPSAwKSB7CisgICAgICBiaW5kZXhfdCBpOworICAgICAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOworICAgICAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKKyAgICAgIHQgPSAqdHJlZWJpbl9hdChtLCBpKTsKKyAgICB9CisgIH0KKworICB3aGlsZSAodCAhPSAwKSB7IC8qIGZpbmQgc21hbGxlc3Qgb2YgdHJlZSBvciBzdWJ0cmVlICovCisgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsKKyAgICBpZiAodHJlbSA8IHJzaXplKSB7CisgICAgICByc2l6ZSA9IHRyZW07CisgICAgICB2ID0gdDsKKyAgICB9CisgICAgdCA9IGxlZnRtb3N0X2NoaWxkKHQpOworICB9CisKKyAgLyogIElmIGR2IGlzIGEgYmV0dGVyIGZpdCwgcmV0dXJuIDAgc28gbWFsbG9jIHdpbGwgdXNlIGl0ICovCisgIGlmICh2ICE9IDAgJiYgcnNpemUgPCAoc2l6ZV90KShtLT5kdnNpemUgLSBuYikpIHsKKyAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIHYpKSkgeyAvKiBzcGxpdCAqLworICAgICAgbWNodW5rcHRyIHIgPSBjaHVua19wbHVzX29mZnNldCh2LCBuYik7CisgICAgICBhc3NlcnQoY2h1bmtzaXplKHYpID09IHJzaXplICsgbmIpOworICAgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dCh2LCByKSkpIHsKKwl1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7CisJaWYgKHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisJICBzZXRfaW51c2VfYW5kX3BpbnVzZShtLCB2LCAocnNpemUgKyBuYikpOworCWVsc2UgeworCSAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCB2LCBuYik7CisJICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCSAgaW5zZXJ0X2NodW5rKG0sIHIsIHJzaXplKTsKKwl9CisJcmV0dXJuIGNodW5rMm1lbSh2KTsKKyAgICAgIH0KKyAgICB9CisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIGFsbG9jYXRlIGEgc21hbGwgcmVxdWVzdCBmcm9tIHRoZSBiZXN0IGZpdHRpbmcgY2h1bmsgaW4gYSB0cmVlYmluICovCitzdGF0aWMgdm9pZCogdG1hbGxvY19zbWFsbChtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIHRjaHVua3B0ciB0LCB2OworICBzaXplX3QgcnNpemU7CisgIGJpbmRleF90IGk7CisgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KG0tPnRyZWVtYXApOworICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICB2ID0gdCA9ICp0cmVlYmluX2F0KG0sIGkpOworICByc2l6ZSA9IGNodW5rc2l6ZSh0KSAtIG5iOworCisgIHdoaWxlICgodCA9IGxlZnRtb3N0X2NoaWxkKHQpKSAhPSAwKSB7CisgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsKKyAgICBpZiAodHJlbSA8IHJzaXplKSB7CisgICAgICByc2l6ZSA9IHRyZW07CisgICAgICB2ID0gdDsKKyAgICB9CisgIH0KKworICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIHYpKSkgeworICAgIG1jaHVua3B0ciByID0gY2h1bmtfcGx1c19vZmZzZXQodiwgbmIpOworICAgIGFzc2VydChjaHVua3NpemUodikgPT0gcnNpemUgKyBuYik7CisgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dCh2LCByKSkpIHsKKyAgICAgIHVubGlua19sYXJnZV9jaHVuayhtLCB2KTsKKyAgICAgIGlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorCXNldF9pbnVzZV9hbmRfcGludXNlKG0sIHYsIChyc2l6ZSArIG5iKSk7CisgICAgICBlbHNlIHsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHYsIG5iKTsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCXJlcGxhY2VfZHYobSwgciwgcnNpemUpOworICAgICAgfQorICAgICAgcmV0dXJuIGNodW5rMm1lbSh2KTsKKyAgICB9CisgIH0KKworICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByZWFsbG9jIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkKiBpbnRlcm5hbF9yZWFsbG9jKG1zdGF0ZSBtLCB2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgeworICBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpIHsKKyAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICBtY2h1bmtwdHIgb2xkcCA9IG1lbTJjaHVuayhvbGRtZW0pOworICAgIHNpemVfdCBvbGRzaXplID0gY2h1bmtzaXplKG9sZHApOworICAgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQob2xkcCwgb2xkc2l6ZSk7CisgICAgbWNodW5rcHRyIG5ld3AgPSAwOworICAgIHZvaWQqIGV4dHJhID0gMDsKKworICAgIC8qIFRyeSB0byBlaXRoZXIgc2hyaW5rIG9yIGV4dGVuZCBpbnRvIHRvcC4gRWxzZSBtYWxsb2MtY29weS1mcmVlICovCisKKyAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIG9sZHApICYmIG9rX2NpbnVzZShvbGRwKSAmJgorCQlva19uZXh0KG9sZHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKKyAgICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7CisgICAgICBpZiAoaXNfbW1hcHBlZChvbGRwKSkKKwluZXdwID0gbW1hcF9yZXNpemUobSwgb2xkcCwgbmIpOworICAgICAgZWxzZSBpZiAob2xkc2l6ZSA+PSBuYikgeyAvKiBhbHJlYWR5IGJpZyBlbm91Z2ggKi8KKwlzaXplX3QgcnNpemUgPSBvbGRzaXplIC0gbmI7CisJbmV3cCA9IG9sZHA7CisJaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7CisJICBtY2h1bmtwdHIgcmVtYWluZGVyID0gY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgbmIpOworCSAgc2V0X2ludXNlKG0sIG5ld3AsIG5iKTsKKwkgIHNldF9pbnVzZShtLCByZW1haW5kZXIsIHJzaXplKTsKKwkgIGV4dHJhID0gY2h1bmsybWVtKHJlbWFpbmRlcik7CisJfQorICAgICAgfQorICAgICAgZWxzZSBpZiAobmV4dCA9PSBtLT50b3AgJiYgb2xkc2l6ZSArIG0tPnRvcHNpemUgPiBuYikgeworCS8qIEV4cGFuZCBpbnRvIHRvcCAqLworCXNpemVfdCBuZXdzaXplID0gb2xkc2l6ZSArIG0tPnRvcHNpemU7CisJc2l6ZV90IG5ld3RvcHNpemUgPSBuZXdzaXplIC0gbmI7CisJbWNodW5rcHRyIG5ld3RvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KG9sZHAsIG5iKTsKKwlzZXRfaW51c2UobSwgb2xkcCwgbmIpOworCW5ld3RvcC0+aGVhZCA9IG5ld3RvcHNpemUgfFBJTlVTRV9CSVQ7CisJbS0+dG9wID0gbmV3dG9wOworCW0tPnRvcHNpemUgPSBuZXd0b3BzaXplOworCW5ld3AgPSBvbGRwOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtLCBvbGRtZW0pOworICAgICAgUE9TVEFDVElPTihtKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFBPU1RBQ1RJT04obSk7CisKKyAgICBpZiAobmV3cCAhPSAwKSB7CisgICAgICBpZiAoZXh0cmEgIT0gMCkgeworCWludGVybmFsX2ZyZWUobSwgZXh0cmEpOworICAgICAgfQorICAgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbmV3cCk7CisgICAgICByZXR1cm4gY2h1bmsybWVtKG5ld3ApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHZvaWQqIG5ld21lbSA9IGludGVybmFsX21hbGxvYyhtLCBieXRlcyk7CisgICAgICBpZiAobmV3bWVtICE9IDApIHsKKwlzaXplX3Qgb2MgPSBvbGRzaXplIC0gb3ZlcmhlYWRfZm9yKG9sZHApOworCW1lbWNweShuZXdtZW0sIG9sZG1lbSwgKG9jIDwgYnl0ZXMpPyBvYyA6IGJ5dGVzKTsKKwlpbnRlcm5hbF9mcmVlKG0sIG9sZG1lbSk7CisgICAgICB9CisgICAgICByZXR1cm4gbmV3bWVtOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1lbWFsaWduIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqIGludGVybmFsX21lbWFsaWduKG1zdGF0ZSBtLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKGFsaWdubWVudCA8PSBNQUxMT0NfQUxJR05NRU5UKSAgICAvKiBDYW4ganVzdCB1c2UgbWFsbG9jICovCisgICAgcmV0dXJuIGludGVybmFsX21hbGxvYyhtLCBieXRlcyk7CisgIGlmIChhbGlnbm1lbnQgPCAgTUlOX0NIVU5LX1NJWkUpIC8qIG11c3QgYmUgYXQgbGVhc3QgYSBtaW5pbXVtIGNodW5rIHNpemUgKi8KKyAgICBhbGlnbm1lbnQgPSBNSU5fQ0hVTktfU0laRTsKKyAgaWYgKChhbGlnbm1lbnQgJiAoYWxpZ25tZW50LVNJWkVfVF9PTkUpKSAhPSAwKSB7LyogRW5zdXJlIGEgcG93ZXIgb2YgMiAqLworICAgIHNpemVfdCBhID0gTUFMTE9DX0FMSUdOTUVOVCA8PCAxOworICAgIHdoaWxlIChhIDwgYWxpZ25tZW50KSBhIDw8PSAxOworICAgIGFsaWdubWVudCA9IGE7CisgIH0KKworICBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QgLSBhbGlnbm1lbnQpIHsKKyAgICBpZiAobSAhPSAwKSAgeyAvKiBUZXN0IGlzbid0IG5lZWRlZCBidXQgYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgKi8KKyAgICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgc2l6ZV90IG5iID0gcmVxdWVzdDJzaXplKGJ5dGVzKTsKKyAgICBzaXplX3QgcmVxID0gbmIgKyBhbGlnbm1lbnQgKyBNSU5fQ0hVTktfU0laRSAtIENIVU5LX09WRVJIRUFEOworICAgIGNoYXIqIG1lbSA9IChjaGFyKilpbnRlcm5hbF9tYWxsb2MobSwgcmVxKTsKKyAgICBpZiAobWVtICE9IDApIHsKKyAgICAgIHZvaWQqIGxlYWRlciA9IDA7CisgICAgICB2b2lkKiB0cmFpbGVyID0gMDsKKyAgICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisKKyAgICAgIGlmIChQUkVBQ1RJT04obSkpIHJldHVybiAwOworICAgICAgaWYgKCgoKHNpemVfdCkobWVtKSkgJSBhbGlnbm1lbnQpICE9IDApIHsgLyogbWlzYWxpZ25lZCAqLworCS8qCisJICBGaW5kIGFuIGFsaWduZWQgc3BvdCBpbnNpZGUgY2h1bmsuICBTaW5jZSB3ZSBuZWVkIHRvIGdpdmUKKwkgIGJhY2sgbGVhZGluZyBzcGFjZSBpbiBhIGNodW5rIG9mIGF0IGxlYXN0IE1JTl9DSFVOS19TSVpFLCBpZgorCSAgdGhlIGZpcnN0IGNhbGN1bGF0aW9uIHBsYWNlcyB1cyBhdCBhIHNwb3Qgd2l0aCBsZXNzIHRoYW4KKwkgIE1JTl9DSFVOS19TSVpFIGxlYWRlciwgd2UgY2FuIG1vdmUgdG8gdGhlIG5leHQgYWxpZ25lZCBzcG90LgorCSAgV2UndmUgYWxsb2NhdGVkIGVub3VnaCB0b3RhbCByb29tIHNvIHRoYXQgdGhpcyBpcyBhbHdheXMKKwkgIHBvc3NpYmxlLgorCSovCisJY2hhciogYnIgPSAoY2hhciopbWVtMmNodW5rKChzaXplX3QpKCgoc2l6ZV90KShtZW0gKworCQkJCQkJICAgICAgIGFsaWdubWVudCAtCisJCQkJCQkgICAgICAgU0laRV9UX09ORSkpICYKKwkJCQkJICAgICAtYWxpZ25tZW50KSk7CisJY2hhciogcG9zID0gKChzaXplX3QpKGJyIC0gKGNoYXIqKShwKSkgPj0gTUlOX0NIVU5LX1NJWkUpPworCSAgYnIgOiBicithbGlnbm1lbnQ7CisJbWNodW5rcHRyIG5ld3AgPSAobWNodW5rcHRyKXBvczsKKwlzaXplX3QgbGVhZHNpemUgPSBwb3MgLSAoY2hhciopKHApOworCXNpemVfdCBuZXdzaXplID0gY2h1bmtzaXplKHApIC0gbGVhZHNpemU7CisKKwlpZiAoaXNfbW1hcHBlZChwKSkgeyAvKiBGb3IgbW1hcHBlZCBjaHVua3MsIGp1c3QgYWRqdXN0IG9mZnNldCAqLworCSAgbmV3cC0+cHJldl9mb290ID0gcC0+cHJldl9mb290ICsgbGVhZHNpemU7CisJICBuZXdwLT5oZWFkID0gKG5ld3NpemV8Q0lOVVNFX0JJVCk7CisJfQorCWVsc2UgeyAvKiBPdGhlcndpc2UsIGdpdmUgYmFjayBsZWFkZXIsIHVzZSB0aGUgcmVzdCAqLworCSAgc2V0X2ludXNlKG0sIG5ld3AsIG5ld3NpemUpOworCSAgc2V0X2ludXNlKG0sIHAsIGxlYWRzaXplKTsKKwkgIGxlYWRlciA9IGNodW5rMm1lbShwKTsKKwl9CisJcCA9IG5ld3A7CisgICAgICB9CisKKyAgICAgIC8qIEdpdmUgYmFjayBzcGFyZSByb29tIGF0IHRoZSBlbmQgKi8KKyAgICAgIGlmICghaXNfbW1hcHBlZChwKSkgeworCXNpemVfdCBzaXplID0gY2h1bmtzaXplKHApOworCWlmIChzaXplID4gbmIgKyBNSU5fQ0hVTktfU0laRSkgeworCSAgc2l6ZV90IHJlbWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOworCSAgbWNodW5rcHRyIHJlbWFpbmRlciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKwkgIHNldF9pbnVzZShtLCBwLCBuYik7CisJICBzZXRfaW51c2UobSwgcmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSk7CisJICB0cmFpbGVyID0gY2h1bmsybWVtKHJlbWFpbmRlcik7CisJfQorICAgICAgfQorCisgICAgICBhc3NlcnQgKGNodW5rc2l6ZShwKSA+PSBuYik7CisgICAgICBhc3NlcnQoKCgoc2l6ZV90KShjaHVuazJtZW0ocCkpKSAlIGFsaWdubWVudCkgPT0gMCk7CisgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBwKTsKKyAgICAgIFBPU1RBQ1RJT04obSk7CisgICAgICBpZiAobGVhZGVyICE9IDApIHsKKwlpbnRlcm5hbF9mcmVlKG0sIGxlYWRlcik7CisgICAgICB9CisgICAgICBpZiAodHJhaWxlciAhPSAwKSB7CisJaW50ZXJuYWxfZnJlZShtLCB0cmFpbGVyKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY29tYWxsb2MvY29hbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCoqIGlhbGxvYyhtc3RhdGUgbSwKKwkJICAgICBzaXplX3Qgbl9lbGVtZW50cywKKwkJICAgICBzaXplX3QqIHNpemVzLAorCQkgICAgIGludCBvcHRzLAorCQkgICAgIHZvaWQqIGNodW5rc1tdKSB7CisgIC8qCisgICAgVGhpcyBwcm92aWRlcyBjb21tb24gc3VwcG9ydCBmb3IgaW5kZXBlbmRlbnRfWCByb3V0aW5lcywgaGFuZGxpbmcKKyAgICBhbGwgb2YgdGhlIGNvbWJpbmF0aW9ucyB0aGF0IGNhbiByZXN1bHQuCisKKyAgICBUaGUgb3B0cyBhcmcgaGFzOgorICAgIGJpdCAwIHNldCBpZiBhbGwgZWxlbWVudHMgYXJlIHNhbWUgc2l6ZSAodXNpbmcgc2l6ZXNbMF0pCisgICAgYml0IDEgc2V0IGlmIGVsZW1lbnRzIHNob3VsZCBiZSB6ZXJvZWQKKyAgKi8KKworICBzaXplX3QgICAgZWxlbWVudF9zaXplOyAgIC8qIGNodW5rc2l6ZSBvZiBlYWNoIGVsZW1lbnQsIGlmIGFsbCBzYW1lICovCisgIHNpemVfdCAgICBjb250ZW50c19zaXplOyAgLyogdG90YWwgc2l6ZSBvZiBlbGVtZW50cyAqLworICBzaXplX3QgICAgYXJyYXlfc2l6ZTsgICAgIC8qIHJlcXVlc3Qgc2l6ZSBvZiBwb2ludGVyIGFycmF5ICovCisgIHZvaWQqICAgICBtZW07ICAgICAgICAgICAgLyogbWFsbG9jZWQgYWdncmVnYXRlIHNwYWNlICovCisgIG1jaHVua3B0ciBwOyAgICAgICAgICAgICAgLyogY29ycmVzcG9uZGluZyBjaHVuayAqLworICBzaXplX3QgICAgcmVtYWluZGVyX3NpemU7IC8qIHJlbWFpbmluZyBieXRlcyB3aGlsZSBzcGxpdHRpbmcgKi8KKyAgdm9pZCoqICAgIG1hcnJheTsgICAgICAgICAvKiBlaXRoZXIgImNodW5rcyIgb3IgbWFsbG9jZWQgcHRyIGFycmF5ICovCisgIG1jaHVua3B0ciBhcnJheV9jaHVuazsgICAgLyogY2h1bmsgZm9yIG1hbGxvY2VkIHB0ciBhcnJheSAqLworICBmbGFnX3QgICAgd2FzX2VuYWJsZWQ7ICAgIC8qIHRvIGRpc2FibGUgbW1hcCAqLworICBzaXplX3QgICAgc2l6ZTsKKyAgc2l6ZV90ICAgIGk7CisKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIC8qIGNvbXB1dGUgYXJyYXkgbGVuZ3RoLCBpZiBuZWVkZWQgKi8KKyAgaWYgKGNodW5rcyAhPSAwKSB7CisgICAgaWYgKG5fZWxlbWVudHMgPT0gMCkKKyAgICAgIHJldHVybiBjaHVua3M7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICBtYXJyYXkgPSBjaHVua3M7CisgICAgYXJyYXlfc2l6ZSA9IDA7CisgIH0KKyAgZWxzZSB7CisgICAgLyogaWYgZW1wdHkgcmVxLCBtdXN0IHN0aWxsIHJldHVybiBjaHVuayByZXByZXNlbnRpbmcgZW1wdHkgYXJyYXkgKi8KKyAgICBpZiAobl9lbGVtZW50cyA9PSAwKQorICAgICAgcmV0dXJuICh2b2lkKiopaW50ZXJuYWxfbWFsbG9jKG0sIDApOworICAgIG1hcnJheSA9IDA7CisgICAgYXJyYXlfc2l6ZSA9IHJlcXVlc3Qyc2l6ZShuX2VsZW1lbnRzICogKHNpemVvZih2b2lkKikpKTsKKyAgfQorCisgIC8qIGNvbXB1dGUgdG90YWwgZWxlbWVudCBzaXplICovCisgIGlmIChvcHRzICYgMHgxKSB7IC8qIGFsbC1zYW1lLXNpemUgKi8KKyAgICBlbGVtZW50X3NpemUgPSByZXF1ZXN0MnNpemUoKnNpemVzKTsKKyAgICBjb250ZW50c19zaXplID0gbl9lbGVtZW50cyAqIGVsZW1lbnRfc2l6ZTsKKyAgfQorICBlbHNlIHsgLyogYWRkIHVwIGFsbCB0aGUgc2l6ZXMgKi8KKyAgICBlbGVtZW50X3NpemUgPSAwOworICAgIGNvbnRlbnRzX3NpemUgPSAwOworICAgIGZvciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQorICAgICAgY29udGVudHNfc2l6ZSArPSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pOworICB9CisKKyAgc2l6ZSA9IGNvbnRlbnRzX3NpemUgKyBhcnJheV9zaXplOworCisgIC8qCisgICAgIEFsbG9jYXRlIHRoZSBhZ2dyZWdhdGUgY2h1bmsuICBGaXJzdCBkaXNhYmxlIGRpcmVjdC1tbWFwcGluZyBzbworICAgICBtYWxsb2Mgd29uJ3QgdXNlIGl0LCBzaW5jZSB3ZSB3b3VsZCBub3QgYmUgYWJsZSB0byBsYXRlcgorICAgICBmcmVlL3JlYWxsb2Mgc3BhY2UgaW50ZXJuYWwgdG8gYSBzZWdyZWdhdGVkIG1tYXAgcmVnaW9uLgorICAqLworICB3YXNfZW5hYmxlZCA9IHVzZV9tbWFwKG0pOworICBkaXNhYmxlX21tYXAobSk7CisgIG1lbSA9IGludGVybmFsX21hbGxvYyhtLCBzaXplIC0gQ0hVTktfT1ZFUkhFQUQpOworICBpZiAod2FzX2VuYWJsZWQpCisgICAgZW5hYmxlX21tYXAobSk7CisgIGlmIChtZW0gPT0gMCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoUFJFQUNUSU9OKG0pKSByZXR1cm4gMDsKKyAgcCA9IG1lbTJjaHVuayhtZW0pOworICByZW1haW5kZXJfc2l6ZSA9IGNodW5rc2l6ZShwKTsKKworICBhc3NlcnQoIWlzX21tYXBwZWQocCkpOworCisgIGlmIChvcHRzICYgMHgyKSB7ICAgICAgIC8qIG9wdGlvbmFsbHkgY2xlYXIgdGhlIGVsZW1lbnRzICovCisgICAgbWVtc2V0KChzaXplX3QqKW1lbSwgMCwgcmVtYWluZGVyX3NpemUgLSBTSVpFX1RfU0laRSAtIGFycmF5X3NpemUpOworICB9CisKKyAgLyogSWYgbm90IHByb3ZpZGVkLCBhbGxvY2F0ZSB0aGUgcG9pbnRlciBhcnJheSBhcyBmaW5hbCBwYXJ0IG9mIGNodW5rICovCisgIGlmIChtYXJyYXkgPT0gMCkgeworICAgIHNpemVfdCAgYXJyYXlfY2h1bmtfc2l6ZTsKKyAgICBhcnJheV9jaHVuayA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIGNvbnRlbnRzX3NpemUpOworICAgIGFycmF5X2NodW5rX3NpemUgPSByZW1haW5kZXJfc2l6ZSAtIGNvbnRlbnRzX3NpemU7CisgICAgbWFycmF5ID0gKHZvaWQqKikgKGNodW5rMm1lbShhcnJheV9jaHVuaykpOworICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgYXJyYXlfY2h1bmssIGFycmF5X2NodW5rX3NpemUpOworICAgIHJlbWFpbmRlcl9zaXplID0gY29udGVudHNfc2l6ZTsKKyAgfQorCisgIC8qIHNwbGl0IG91dCBlbGVtZW50cyAqLworICBmb3IgKGkgPSAwOyA7ICsraSkgeworICAgIG1hcnJheVtpXSA9IGNodW5rMm1lbShwKTsKKyAgICBpZiAoaSAhPSBuX2VsZW1lbnRzLTEpIHsKKyAgICAgIGlmIChlbGVtZW50X3NpemUgIT0gMCkKKwlzaXplID0gZWxlbWVudF9zaXplOworICAgICAgZWxzZQorCXNpemUgPSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pOworICAgICAgcmVtYWluZGVyX3NpemUgLT0gc2l6ZTsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgc2l6ZSk7CisgICAgICBwID0gY2h1bmtfcGx1c19vZmZzZXQocCwgc2l6ZSk7CisgICAgfQorICAgIGVsc2UgeyAvKiB0aGUgZmluYWwgZWxlbWVudCBhYnNvcmJzIGFueSBvdmVyYWxsb2NhdGlvbiBzbG9wICovCisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIHJlbWFpbmRlcl9zaXplKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisjaWYgREVCVUcKKyAgaWYgKG1hcnJheSAhPSBjaHVua3MpIHsKKyAgICAvKiBmaW5hbCBlbGVtZW50IG11c3QgaGF2ZSBleGFjdGx5IGV4aGF1c3RlZCBjaHVuayAqLworICAgIGlmIChlbGVtZW50X3NpemUgIT0gMCkgeworICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IGVsZW1lbnRfc2l6ZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSkpOworICAgIH0KKyAgICBjaGVja19pbnVzZV9jaHVuayhtLCBtZW0yY2h1bmsobWFycmF5KSk7CisgIH0KKyAgZm9yIChpID0gMDsgaSAhPSBuX2VsZW1lbnRzOyArK2kpCisgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbWVtMmNodW5rKG1hcnJheVtpXSkpOworCisjZW5kaWYgLyogREVCVUcgKi8KKworICBQT1NUQUNUSU9OKG0pOworICByZXR1cm4gbWFycmF5OworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHB1YmxpYyByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKK3ZvaWQqIGRsbWFsbG9jKHNpemVfdCBieXRlcykgeworICAvKgorICAgICBCYXNpYyBhbGdvcml0aG06CisgICAgIElmIGEgc21hbGwgcmVxdWVzdCAoPCAyNTYgYnl0ZXMgbWludXMgcGVyLWNodW5rIG92ZXJoZWFkKToKKyAgICAgICAxLiBJZiBvbmUgZXhpc3RzLCB1c2UgYSByZW1haW5kZXJsZXNzIGNodW5rIGluIGFzc29jaWF0ZWQgc21hbGxiaW4uCisJICAoUmVtYWluZGVybGVzcyBtZWFucyB0aGF0IHRoZXJlIGFyZSB0b28gZmV3IGV4Y2VzcyBieXRlcyB0bworCSAgcmVwcmVzZW50IGFzIGEgY2h1bmsuKQorICAgICAgIDIuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgZHYgY2h1bmssIHdoaWNoIGlzIG5vcm1hbGx5IHRoZQorCSAgY2h1bmsgYWRqYWNlbnQgdG8gdGhlIG9uZSB1c2VkIGZvciB0aGUgbW9zdCByZWNlbnQgc21hbGwgcmVxdWVzdC4KKyAgICAgICAzLiBJZiBvbmUgZXhpc3RzLCBzcGxpdCB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIGNodW5rIGluIGEgYmluLAorCSAgc2F2aW5nIHJlbWFpbmRlciBpbiBkdi4KKyAgICAgICA0LiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIHRvcCBjaHVuay4KKyAgICAgICA1LiBJZiBhdmFpbGFibGUsIGdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gYW5kIHVzZSBpdAorICAgICBPdGhlcndpc2UsIGZvciBhIGxhcmdlIHJlcXVlc3Q6CisgICAgICAgMS4gRmluZCB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIGJpbm5lZCBjaHVuayB0aGF0IGZpdHMsIGFuZCB1c2UgaXQKKwkgIGlmIGl0IGlzIGJldHRlciBmaXR0aW5nIHRoYW4gZHYgY2h1bmssIHNwbGl0dGluZyBpZiBuZWNlc3NhcnkuCisgICAgICAgMi4gSWYgYmV0dGVyIGZpdHRpbmcgdGhhbiBhbnkgYmlubmVkIGNodW5rLCB1c2UgdGhlIGR2IGNodW5rLgorICAgICAgIDMuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgdG9wIGNodW5rLgorICAgICAgIDQuIElmIHJlcXVlc3Qgc2l6ZSA+PSBtbWFwIHRocmVzaG9sZCwgdHJ5IHRvIGRpcmVjdGx5IG1tYXAgdGhpcyBjaHVuay4KKyAgICAgICA1LiBJZiBhdmFpbGFibGUsIGdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gYW5kIHVzZSBpdAorCisgICAgIFRoZSB1Z2x5IGdvdG8ncyBoZXJlIGVuc3VyZSB0aGF0IHBvc3RhY3Rpb24gb2NjdXJzIGFsb25nIGFsbCBwYXRocy4KKyAgKi8KKworI2lmIFVTRV9MT0NLUworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsgLyogaW5pdGlhbGl6ZSBpbiBzeXNfYWxsb2MgaWYgbm90IHVzaW5nIGxvY2tzICovCisjZW5kaWYKKworICBpZiAoIVBSRUFDVElPTihnbSkpIHsKKyAgICB2b2lkKiBtZW07CisgICAgc2l6ZV90IG5iOworICAgIGlmIChieXRlcyA8PSBNQVhfU01BTExfUkVRVUVTVCkgeworICAgICAgYmluZGV4X3QgaWR4OworICAgICAgYmlubWFwX3Qgc21hbGxiaXRzOworICAgICAgbmIgPSAoYnl0ZXMgPCBNSU5fUkVRVUVTVCk/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWR4ID0gc21hbGxfaW5kZXgobmIpOworICAgICAgc21hbGxiaXRzID0gZ20tPnNtYWxsbWFwID4+IGlkeDsKKworICAgICAgaWYgKChzbWFsbGJpdHMgJiAweDNVKSAhPSAwKSB7IC8qIFJlbWFpbmRlcmxlc3MgZml0IHRvIGEgc21hbGxiaW4uICovCisJbWNodW5rcHRyIGIsIHA7CisJaWR4ICs9IH5zbWFsbGJpdHMgJiAxOyAgICAgICAvKiBVc2VzIG5leHQgYmluIGlmIGlkeCBlbXB0eSAqLworCWIgPSBzbWFsbGJpbl9hdChnbSwgaWR4KTsKKwlwID0gYi0+ZmQ7CisJYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGlkeCkpOworCXVubGlua19maXJzdF9zbWFsbF9jaHVuayhnbSwgYiwgcCwgaWR4KTsKKwlzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKwltZW0gPSBjaHVuazJtZW0ocCk7CisJY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworCWdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKworICAgICAgZWxzZSBpZiAobmIgPiBnbS0+ZHZzaXplKSB7CisJaWYgKHNtYWxsYml0cyAhPSAwKSB7IC8qIFVzZSBjaHVuayBpbiBuZXh0IG5vbmVtcHR5IHNtYWxsYmluICovCisJICBtY2h1bmtwdHIgYiwgcCwgcjsKKwkgIHNpemVfdCByc2l6ZTsKKwkgIGJpbmRleF90IGk7CisJICBiaW5tYXBfdCBsZWZ0Yml0cyA9IChzbWFsbGJpdHMgPDwgaWR4KSAmIGxlZnRfYml0cyhpZHgyYml0KGlkeCkpOworCSAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOworCSAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKKwkgIGIgPSBzbWFsbGJpbl9hdChnbSwgaSk7CisJICBwID0gYi0+ZmQ7CisJICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaSkpOworCSAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKGdtLCBiLCBwLCBpKTsKKwkgIHJzaXplID0gc21hbGxfaW5kZXgyc2l6ZShpKSAtIG5iOworCSAgLyogRml0IGhlcmUgY2Fubm90IGJlIHJlbWFpbmRlcmxlc3MgaWYgNGJ5dGUgc2l6ZXMgKi8KKwkgIGlmIChTSVpFX1RfU0laRSAhPSA0ICYmIHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisJICAgIHNldF9pbnVzZV9hbmRfcGludXNlKGdtLCBwLCBzbWFsbF9pbmRleDJzaXplKGkpKTsKKwkgIGVsc2UgeworCSAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7CisJICAgIHIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisJICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisJICAgIHJlcGxhY2VfZHYoZ20sIHIsIHJzaXplKTsKKwkgIH0KKwkgIG1lbSA9IGNodW5rMm1lbShwKTsKKwkgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKwkgIGdvdG8gcG9zdGFjdGlvbjsKKwl9CisKKwllbHNlIGlmIChnbS0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX3NtYWxsKGdtLCBuYikpICE9IDApIHsKKwkgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKwkgIGdvdG8gcG9zdGFjdGlvbjsKKwl9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQorICAgICAgbmIgPSBNQVhfU0laRV9UOyAvKiBUb28gYmlnIHRvIGFsbG9jYXRlLiBGb3JjZSBmYWlsdXJlIChpbiBzeXMgYWxsb2MpICovCisgICAgZWxzZSB7CisgICAgICBuYiA9IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlmIChnbS0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX2xhcmdlKGdtLCBuYikpICE9IDApIHsKKwljaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisJZ290byBwb3N0YWN0aW9uOworICAgICAgfQorICAgIH0KKworICAgIGlmIChuYiA8PSBnbS0+ZHZzaXplKSB7CisgICAgICBzaXplX3QgcnNpemUgPSBnbS0+ZHZzaXplIC0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IGdtLT5kdjsKKyAgICAgIGlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgeyAvKiBzcGxpdCBkdiAqLworCW1jaHVua3B0ciByID0gZ20tPmR2ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworCWdtLT5kdnNpemUgPSByc2l6ZTsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCXNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeyAvKiBleGhhdXN0IGR2ICovCisJc2l6ZV90IGR2cyA9IGdtLT5kdnNpemU7CisJZ20tPmR2c2l6ZSA9IDA7CisJZ20tPmR2ID0gMDsKKwlzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgZHZzKTsKKyAgICAgIH0KKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBlbHNlIGlmIChuYiA8IGdtLT50b3BzaXplKSB7IC8qIFNwbGl0IHRvcCAqLworICAgICAgc2l6ZV90IHJzaXplID0gZ20tPnRvcHNpemUgLT0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IGdtLT50b3A7CisgICAgICBtY2h1bmtwdHIgciA9IGdtLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICByLT5oZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOworICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfdG9wX2NodW5rKGdtLCBnbS0+dG9wKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBtZW0gPSBzeXNfYWxsb2MoZ20sIG5iKTsKKworICBwb3N0YWN0aW9uOgorICAgIFBPU1RBQ1RJT04oZ20pOworICAgIHJldHVybiBtZW07CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZCBkbGZyZWUodm9pZCogbWVtKSB7CisgIC8qCisgICAgIENvbnNvbGlkYXRlIGZyZWVkIGNodW5rcyB3aXRoIHByZWNlZWRpbmcgb3Igc3VjY2VlZGluZyBib3JkZXJpbmcKKyAgICAgZnJlZSBjaHVua3MsIGlmIHRoZXkgZXhpc3QsIGFuZCB0aGVuIHBsYWNlIGluIGEgYmluLiAgSW50ZXJtaXhlZAorICAgICB3aXRoIHNwZWNpYWwgY2FzZXMgZm9yIHRvcCwgZHYsIG1tYXBwZWQgY2h1bmtzLCBhbmQgdXNhZ2UgZXJyb3JzLgorICAqLworCisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhtZW0pOworI2lmIEZPT1RFUlMKKyAgICBtc3RhdGUgZm0gPSBnZXRfbXN0YXRlX2ZvcihwKTsKKyAgICBpZiAoIW9rX21hZ2ljKGZtKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZSAvKiBGT09URVJTICovCisjZGVmaW5lIGZtIGdtCisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIGlmICghUFJFQUNUSU9OKGZtKSkgeworICAgICAgY2hlY2tfaW51c2VfY2h1bmsoZm0sIHApOworICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcCkgJiYgb2tfY2ludXNlKHApKSkgeworCXNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKwltY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsKKwlpZiAoIXBpbnVzZShwKSkgeworCSAgc2l6ZV90IHByZXZzaXplID0gcC0+cHJldl9mb290OworCSAgaWYgKChwcmV2c2l6ZSAmIElTX01NQVBQRURfQklUKSAhPSAwKSB7CisJICAgIHByZXZzaXplICY9IH5JU19NTUFQUEVEX0JJVDsKKwkgICAgcHNpemUgKz0gcHJldnNpemUgKyBNTUFQX0ZPT1RfUEFEOworCSAgICBpZiAoQ0FMTF9NVU5NQVAoKGNoYXIqKXAgLSBwcmV2c2l6ZSwgcHNpemUpID09IDApCisJICAgICAgZm0tPmZvb3RwcmludCAtPSBwc2l6ZTsKKwkgICAgZ290byBwb3N0YWN0aW9uOworCSAgfQorCSAgZWxzZSB7CisJICAgIG1jaHVua3B0ciBwcmV2ID0gY2h1bmtfbWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsKKwkgICAgcHNpemUgKz0gcHJldnNpemU7CisJICAgIHAgPSBwcmV2OworCSAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwcmV2KSkpIHsgLyogY29uc29saWRhdGUgYmFja3dhcmQgKi8KKwkgICAgICBpZiAocCAhPSBmbS0+ZHYpIHsKKwkJdW5saW5rX2NodW5rKGZtLCBwLCBwcmV2c2l6ZSk7CisJICAgICAgfQorCSAgICAgIGVsc2UgaWYgKChuZXh0LT5oZWFkICYgSU5VU0VfQklUUykgPT0gSU5VU0VfQklUUykgeworCQlmbS0+ZHZzaXplID0gcHNpemU7CisJCXNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKwkJZ290byBwb3N0YWN0aW9uOworCSAgICAgIH0KKwkgICAgfQorCSAgICBlbHNlCisJICAgICAgZ290byBlcnJvcmFjdGlvbjsKKwkgIH0KKwl9CisKKwlpZiAoUlRDSEVDSyhva19uZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKKwkgIGlmICghY2ludXNlKG5leHQpKSB7ICAvKiBjb25zb2xpZGF0ZSBmb3J3YXJkICovCisJICAgIGlmIChuZXh0ID09IGZtLT50b3ApIHsKKwkgICAgICBzaXplX3QgdHNpemUgPSBmbS0+dG9wc2l6ZSArPSBwc2l6ZTsKKwkgICAgICBmbS0+dG9wID0gcDsKKwkgICAgICBwLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworCSAgICAgIGlmIChwID09IGZtLT5kdikgeworCQlmbS0+ZHYgPSAwOworCQlmbS0+ZHZzaXplID0gMDsKKwkgICAgICB9CisJICAgICAgaWYgKHNob3VsZF90cmltKGZtLCB0c2l6ZSkpCisJCXN5c190cmltKGZtLCAwKTsKKwkgICAgICBnb3RvIHBvc3RhY3Rpb247CisJICAgIH0KKwkgICAgZWxzZSBpZiAobmV4dCA9PSBmbS0+ZHYpIHsKKwkgICAgICBzaXplX3QgZHNpemUgPSBmbS0+ZHZzaXplICs9IHBzaXplOworCSAgICAgIGZtLT5kdiA9IHA7CisJICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIGRzaXplKTsKKwkgICAgICBnb3RvIHBvc3RhY3Rpb247CisJICAgIH0KKwkgICAgZWxzZSB7CisJICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG5leHQpOworCSAgICAgIHBzaXplICs9IG5zaXplOworCSAgICAgIHVubGlua19jaHVuayhmbSwgbmV4dCwgbnNpemUpOworCSAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBwc2l6ZSk7CisJICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisJCWZtLT5kdnNpemUgPSBwc2l6ZTsKKwkJZ290byBwb3N0YWN0aW9uOworCSAgICAgIH0KKwkgICAgfQorCSAgfQorCSAgZWxzZQorCSAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisKKwkgIGlmIChpc19zbWFsbChwc2l6ZSkpIHsKKwkgICAgaW5zZXJ0X3NtYWxsX2NodW5rKGZtLCBwLCBwc2l6ZSk7CisJICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOworCSAgfQorCSAgZWxzZSB7CisJICAgIHRjaHVua3B0ciB0cCA9ICh0Y2h1bmtwdHIpcDsKKwkgICAgaW5zZXJ0X2xhcmdlX2NodW5rKGZtLCB0cCwgcHNpemUpOworCSAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKwkgICAgaWYgKC0tZm0tPnJlbGVhc2VfY2hlY2tzID09IDApCisJICAgICAgcmVsZWFzZV91bnVzZWRfc2VnbWVudHMoZm0pOworCSAgfQorCSAgZ290byBwb3N0YWN0aW9uOworCX0KKyAgICAgIH0KKyAgICBlcnJvcmFjdGlvbjoKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgcG9zdGFjdGlvbjoKKyAgICAgIFBPU1RBQ1RJT04oZm0pOworICAgIH0KKyAgfQorI2lmICFGT09URVJTCisjdW5kZWYgZm0KKyNlbmRpZiAvKiBGT09URVJTICovCit9CisKK3ZvaWQqIGRsY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7CisgIHZvaWQqIG1lbTsKKyAgc2l6ZV90IHJlcSA9IDA7CisgIGlmIChuX2VsZW1lbnRzICE9IDApIHsKKyAgICByZXEgPSBuX2VsZW1lbnRzICogZWxlbV9zaXplOworICAgIGlmICgoKG5fZWxlbWVudHMgfCBlbGVtX3NpemUpICYgfihzaXplX3QpMHhmZmZmKSAmJgorCShyZXEgLyBuX2VsZW1lbnRzICE9IGVsZW1fc2l6ZSkpCisgICAgICByZXEgPSBNQVhfU0laRV9UOyAvKiBmb3JjZSBkb3duc3RyZWFtIGZhaWx1cmUgb24gb3ZlcmZsb3cgKi8KKyAgfQorICBtZW0gPSBkbG1hbGxvYyhyZXEpOworICBpZiAobWVtICE9IDAgJiYgY2FsbG9jX211c3RfY2xlYXIobWVtMmNodW5rKG1lbSkpKQorICAgIG1lbXNldChtZW0sIDAsIHJlcSk7CisgIHJldHVybiBtZW07Cit9CisKK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgeworICBpZiAob2xkbWVtID09IDApCisgICAgcmV0dXJuIGRsbWFsbG9jKGJ5dGVzKTsKKyNpZmRlZiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMKKyAgaWYgKGJ5dGVzID09IDApIHsKKyAgICBkbGZyZWUob2xkbWVtKTsKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmIC8qIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAqLworICBlbHNlIHsKKyNpZiAhIEZPT1RFUlMKKyAgICBtc3RhdGUgbSA9IGdtOworI2Vsc2UgLyogRk9PVEVSUyAqLworICAgIG1zdGF0ZSBtID0gZ2V0X21zdGF0ZV9mb3IobWVtMmNodW5rKG9sZG1lbSkpOworICAgIGlmICghb2tfbWFnaWMobSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtLCBvbGRtZW0pOworICAgICAgcmV0dXJuIDA7CisgICAgfQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICByZXR1cm4gaW50ZXJuYWxfcmVhbGxvYyhtLCBvbGRtZW0sIGJ5dGVzKTsKKyAgfQorfQorCit2b2lkKiBkbG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICByZXR1cm4gaW50ZXJuYWxfbWVtYWxpZ24oZ20sIGFsaWdubWVudCwgYnl0ZXMpOworfQorCit2b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUsCisJCQkJIHZvaWQqIGNodW5rc1tdKSB7CisgIHNpemVfdCBzeiA9IGVsZW1fc2l6ZTsgLyogc2VydmVzIGFzIDEtZWxlbWVudCBhcnJheSAqLworICByZXR1cm4gaWFsbG9jKGdtLCBuX2VsZW1lbnRzLCAmc3osIDMsIGNodW5rcyk7Cit9CisKK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwKKwkJCQkgICB2b2lkKiBjaHVua3NbXSkgeworICByZXR1cm4gaWFsbG9jKGdtLCBuX2VsZW1lbnRzLCBzaXplcywgMCwgY2h1bmtzKTsKK30KKwordm9pZCogZGx2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc3o7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBwYWdlc3ogPSBtcGFyYW1zLnBhZ2Vfc2l6ZTsKKyAgcmV0dXJuIGRsbWVtYWxpZ24ocGFnZXN6LCBieXRlcyk7Cit9CisKK3ZvaWQqIGRscHZhbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgc2l6ZV90IHBhZ2VzejsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIHBhZ2VzeiA9IG1wYXJhbXMucGFnZV9zaXplOworICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIChieXRlcyArIHBhZ2VzeiAtIFNJWkVfVF9PTkUpICYgfihwYWdlc3ogLSBTSVpFX1RfT05FKSk7Cit9CisKK2ludCBkbG1hbGxvY190cmltKHNpemVfdCBwYWQpIHsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIGludCByZXN1bHQgPSAwOworICBpZiAoIVBSRUFDVElPTihnbSkpIHsKKyAgICByZXN1bHQgPSBzeXNfdHJpbShnbSwgcGFkKTsKKyAgICBQT1NUQUNUSU9OKGdtKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50KHZvaWQpIHsKKyAgcmV0dXJuIGdtLT5mb290cHJpbnQ7Cit9CisKK3NpemVfdCBkbG1hbGxvY19tYXhfZm9vdHByaW50KHZvaWQpIHsKKyAgcmV0dXJuIGdtLT5tYXhfZm9vdHByaW50OworfQorCisjaWYgIU5PX01BTExJTkZPCitzdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKSB7CisgIHJldHVybiBpbnRlcm5hbF9tYWxsaW5mbyhnbSk7Cit9CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKwordm9pZCBkbG1hbGxvY19zdGF0cygpIHsKKyAgaW50ZXJuYWxfbWFsbG9jX3N0YXRzKGdtKTsKK30KKworaW50IGRsbWFsbG9wdChpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgcmV0dXJuIGNoYW5nZV9tcGFyYW0ocGFyYW1fbnVtYmVyLCB2YWx1ZSk7Cit9CisKKyNlbmRpZiAvKiAhT05MWV9NU1BBQ0VTICovCisKK3NpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKiBtZW0pIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgICBpZiAoY2ludXNlKHApKQorICAgICAgcmV0dXJuIGNodW5rc2l6ZShwKSAtIG92ZXJoZWFkX2ZvcihwKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdXNlciBtc3BhY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIE1TUEFDRVMKKworc3RhdGljIG1zdGF0ZSBpbml0X3VzZXJfbXN0YXRlKGNoYXIqIHRiYXNlLCBzaXplX3QgdHNpemUpIHsKKyAgc2l6ZV90IG1zaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc3RhdGUpKTsKKyAgbWNodW5rcHRyIG1uOworICBtY2h1bmtwdHIgbXNwID0gYWxpZ25fYXNfY2h1bmsodGJhc2UpOworICBtc3RhdGUgbSA9IChtc3RhdGUpKGNodW5rMm1lbShtc3ApKTsKKyAgbWVtc2V0KG0sIDAsIG1zaXplKTsKKyAgSU5JVElBTF9MT0NLKCZtLT5tdXRleCk7CisgIG1zcC0+aGVhZCA9IChtc2l6ZXxQSU5VU0VfQklUfENJTlVTRV9CSVQpOworICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKyAgbS0+c2VnLnNpemUgPSBtLT5mb290cHJpbnQgPSBtLT5tYXhfZm9vdHByaW50ID0gdHNpemU7CisgIG0tPm1hZ2ljID0gbXBhcmFtcy5tYWdpYzsKKyAgbS0+cmVsZWFzZV9jaGVja3MgPSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFOworICBtLT5tZmxhZ3MgPSBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzOworICBtLT5leHRwID0gMDsKKyAgbS0+ZXh0cyA9IDA7CisgIGRpc2FibGVfY29udGlndW91cyhtKTsKKyAgaW5pdF9iaW5zKG0pOworICBtbiA9IG5leHRfY2h1bmsobWVtMmNodW5rKG0pKTsKKyAgaW5pdF90b3AobSwgbW4sIChzaXplX3QpKCh0YmFzZSArIHRzaXplKSAtIChjaGFyKiltbikgLSBUT1BfRk9PVF9TSVpFKTsKKyAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgIHJldHVybiBtOworfQorCittc3BhY2UgY3JlYXRlX21zcGFjZShzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpIHsKKyAgbXN0YXRlIG0gPSAwOworICBzaXplX3QgbXNpemU7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7CisgIGlmIChjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CisgICAgc2l6ZV90IHJzID0gKChjYXBhY2l0eSA9PSAwKT8gbXBhcmFtcy5ncmFudWxhcml0eSA6CisJCSAoY2FwYWNpdHkgKyBUT1BfRk9PVF9TSVpFICsgbXNpemUpKTsKKyAgICBzaXplX3QgdHNpemUgPSBncmFudWxhcml0eV9hbGlnbihycyk7CisgICAgY2hhciogdGJhc2UgPSAoY2hhciopKENBTExfTU1BUCh0c2l6ZSkpOworICAgIGlmICh0YmFzZSAhPSBDTUZBSUwpIHsKKyAgICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKHRiYXNlLCB0c2l6ZSk7CisgICAgICBtLT5zZWcuc2ZsYWdzID0gSVNfTU1BUFBFRF9CSVQ7CisgICAgICBzZXRfbG9jayhtLCBsb2NrZWQpOworICAgIH0KKyAgfQorICByZXR1cm4gKG1zcGFjZSltOworfQorCittc3BhY2UgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2Uodm9pZCogYmFzZSwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKSB7CisgIG1zdGF0ZSBtID0gMDsKKyAgc2l6ZV90IG1zaXplOworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBpZiAoY2FwYWNpdHkgPiBtc2l6ZSArIFRPUF9GT09UX1NJWkUgJiYKKyAgICAgIGNhcGFjaXR5IDwgKHNpemVfdCkgLShtc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBtcGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKKyAgICBtID0gaW5pdF91c2VyX21zdGF0ZSgoY2hhciopYmFzZSwgY2FwYWNpdHkpOworICAgIG0tPnNlZy5zZmxhZ3MgPSBFWFRFUk5fQklUOworICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CisgIH0KKyAgcmV0dXJuIChtc3BhY2UpbTsKK30KKworaW50IG1zcGFjZV9tbWFwX2xhcmdlX2NodW5rcyhtc3BhY2UgbXNwLCBpbnQgZW5hYmxlKSB7CisgIGludCByZXQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFQUkVBQ1RJT04obXMpKSB7CisgICAgaWYgKHVzZV9tbWFwKG1zKSkKKyAgICAgIHJldCA9IDE7CisgICAgaWYgKGVuYWJsZSkKKyAgICAgIGVuYWJsZV9tbWFwKG1zKTsKKyAgICBlbHNlCisgICAgICBkaXNhYmxlX21tYXAobXMpOworICAgIFBPU1RBQ1RJT04obXMpOworICB9CisgIHJldHVybiByZXQ7Cit9CisKK3NpemVfdCBkZXN0cm95X21zcGFjZShtc3BhY2UgbXNwKSB7CisgIHNpemVfdCBmcmVlZCA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgbXNlZ21lbnRwdHIgc3AgPSAmbXMtPnNlZzsKKyAgICB3aGlsZSAoc3AgIT0gMCkgeworICAgICAgY2hhciogYmFzZSA9IHNwLT5iYXNlOworICAgICAgc2l6ZV90IHNpemUgPSBzcC0+c2l6ZTsKKyAgICAgIGZsYWdfdCBmbGFnID0gc3AtPnNmbGFnczsKKyAgICAgIHNwID0gc3AtPm5leHQ7CisgICAgICBpZiAoKGZsYWcgJiBJU19NTUFQUEVEX0JJVCkgJiYgIShmbGFnICYgRVhURVJOX0JJVCkgJiYKKwkgIENBTExfTVVOTUFQKGJhc2UsIHNpemUpID09IDApCisJZnJlZWQgKz0gc2l6ZTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gZnJlZWQ7Cit9CisKKy8qCisgIG1zcGFjZSB2ZXJzaW9ucyBvZiByb3V0aW5lcyBhcmUgbmVhci1jbG9uZXMgb2YgdGhlIGdsb2JhbAorICB2ZXJzaW9ucy4gVGhpcyBpcyBub3Qgc28gbmljZSBidXQgYmV0dGVyIHRoYW4gdGhlIGFsdGVybmF0aXZlcy4KKyovCisKKwordm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoIVBSRUFDVElPTihtcykpIHsKKyAgICB2b2lkKiBtZW07CisgICAgc2l6ZV90IG5iOworICAgIGlmIChieXRlcyA8PSBNQVhfU01BTExfUkVRVUVTVCkgeworICAgICAgYmluZGV4X3QgaWR4OworICAgICAgYmlubWFwX3Qgc21hbGxiaXRzOworICAgICAgbmIgPSAoYnl0ZXMgPCBNSU5fUkVRVUVTVCk/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWR4ID0gc21hbGxfaW5kZXgobmIpOworICAgICAgc21hbGxiaXRzID0gbXMtPnNtYWxsbWFwID4+IGlkeDsKKworICAgICAgaWYgKChzbWFsbGJpdHMgJiAweDNVKSAhPSAwKSB7IC8qIFJlbWFpbmRlcmxlc3MgZml0IHRvIGEgc21hbGxiaW4uICovCisJbWNodW5rcHRyIGIsIHA7CisJaWR4ICs9IH5zbWFsbGJpdHMgJiAxOyAgICAgICAvKiBVc2VzIG5leHQgYmluIGlmIGlkeCBlbXB0eSAqLworCWIgPSBzbWFsbGJpbl9hdChtcywgaWR4KTsKKwlwID0gYi0+ZmQ7CisJYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGlkeCkpOworCXVubGlua19maXJzdF9zbWFsbF9jaHVuayhtcywgYiwgcCwgaWR4KTsKKwlzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKwltZW0gPSBjaHVuazJtZW0ocCk7CisJY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworCWdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKworICAgICAgZWxzZSBpZiAobmIgPiBtcy0+ZHZzaXplKSB7CisJaWYgKHNtYWxsYml0cyAhPSAwKSB7IC8qIFVzZSBjaHVuayBpbiBuZXh0IG5vbmVtcHR5IHNtYWxsYmluICovCisJICBtY2h1bmtwdHIgYiwgcCwgcjsKKwkgIHNpemVfdCByc2l6ZTsKKwkgIGJpbmRleF90IGk7CisJICBiaW5tYXBfdCBsZWZ0Yml0cyA9IChzbWFsbGJpdHMgPDwgaWR4KSAmIGxlZnRfYml0cyhpZHgyYml0KGlkeCkpOworCSAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOworCSAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKKwkgIGIgPSBzbWFsbGJpbl9hdChtcywgaSk7CisJICBwID0gYi0+ZmQ7CisJICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaSkpOworCSAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKG1zLCBiLCBwLCBpKTsKKwkgIHJzaXplID0gc21hbGxfaW5kZXgyc2l6ZShpKSAtIG5iOworCSAgLyogRml0IGhlcmUgY2Fubm90IGJlIHJlbWFpbmRlcmxlc3MgaWYgNGJ5dGUgc2l6ZXMgKi8KKwkgIGlmIChTSVpFX1RfU0laRSAhPSA0ICYmIHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisJICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBzbWFsbF9pbmRleDJzaXplKGkpKTsKKwkgIGVsc2UgeworCSAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7CisJICAgIHIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisJICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisJICAgIHJlcGxhY2VfZHYobXMsIHIsIHJzaXplKTsKKwkgIH0KKwkgIG1lbSA9IGNodW5rMm1lbShwKTsKKwkgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKwkgIGdvdG8gcG9zdGFjdGlvbjsKKwl9CisKKwllbHNlIGlmIChtcy0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX3NtYWxsKG1zLCBuYikpICE9IDApIHsKKwkgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKwkgIGdvdG8gcG9zdGFjdGlvbjsKKwl9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQorICAgICAgbmIgPSBNQVhfU0laRV9UOyAvKiBUb28gYmlnIHRvIGFsbG9jYXRlLiBGb3JjZSBmYWlsdXJlIChpbiBzeXMgYWxsb2MpICovCisgICAgZWxzZSB7CisgICAgICBuYiA9IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlmIChtcy0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX2xhcmdlKG1zLCBuYikpICE9IDApIHsKKwljaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisJZ290byBwb3N0YWN0aW9uOworICAgICAgfQorICAgIH0KKworICAgIGlmIChuYiA8PSBtcy0+ZHZzaXplKSB7CisgICAgICBzaXplX3QgcnNpemUgPSBtcy0+ZHZzaXplIC0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IG1zLT5kdjsKKyAgICAgIGlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgeyAvKiBzcGxpdCBkdiAqLworCW1jaHVua3B0ciByID0gbXMtPmR2ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworCW1zLT5kdnNpemUgPSByc2l6ZTsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCXNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeyAvKiBleGhhdXN0IGR2ICovCisJc2l6ZV90IGR2cyA9IG1zLT5kdnNpemU7CisJbXMtPmR2c2l6ZSA9IDA7CisJbXMtPmR2ID0gMDsKKwlzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgZHZzKTsKKyAgICAgIH0KKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBlbHNlIGlmIChuYiA8IG1zLT50b3BzaXplKSB7IC8qIFNwbGl0IHRvcCAqLworICAgICAgc2l6ZV90IHJzaXplID0gbXMtPnRvcHNpemUgLT0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IG1zLT50b3A7CisgICAgICBtY2h1bmtwdHIgciA9IG1zLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICByLT5oZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOworICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfdG9wX2NodW5rKG1zLCBtcy0+dG9wKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBtZW0gPSBzeXNfYWxsb2MobXMsIG5iKTsKKworICBwb3N0YWN0aW9uOgorICAgIFBPU1RBQ1RJT04obXMpOworICAgIHJldHVybiBtZW07CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZCBtc3BhY2VfZnJlZShtc3BhY2UgbXNwLCB2b2lkKiBtZW0pIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG1lbSk7CisjaWYgRk9PVEVSUworICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHApOworI2Vsc2UgLyogRk9PVEVSUyAqLworICAgIG1zdGF0ZSBmbSA9IChtc3RhdGUpbXNwOworI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICBpZiAoIW9rX21hZ2ljKGZtKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFQUkVBQ1RJT04oZm0pKSB7CisgICAgICBjaGVja19pbnVzZV9jaHVuayhmbSwgcCk7CisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwKSAmJiBva19jaW51c2UocCkpKSB7CisJc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworCW1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpOworCWlmICghcGludXNlKHApKSB7CisJICBzaXplX3QgcHJldnNpemUgPSBwLT5wcmV2X2Zvb3Q7CisJICBpZiAoKHByZXZzaXplICYgSVNfTU1BUFBFRF9CSVQpICE9IDApIHsKKwkgICAgcHJldnNpemUgJj0gfklTX01NQVBQRURfQklUOworCSAgICBwc2l6ZSArPSBwcmV2c2l6ZSArIE1NQVBfRk9PVF9QQUQ7CisJICAgIGlmIChDQUxMX01VTk1BUCgoY2hhciopcCAtIHByZXZzaXplLCBwc2l6ZSkgPT0gMCkKKwkgICAgICBmbS0+Zm9vdHByaW50IC09IHBzaXplOworCSAgICBnb3RvIHBvc3RhY3Rpb247CisJICB9CisJICBlbHNlIHsKKwkgICAgbWNodW5rcHRyIHByZXYgPSBjaHVua19taW51c19vZmZzZXQocCwgcHJldnNpemUpOworCSAgICBwc2l6ZSArPSBwcmV2c2l6ZTsKKwkgICAgcCA9IHByZXY7CisJICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHByZXYpKSkgeyAvKiBjb25zb2xpZGF0ZSBiYWNrd2FyZCAqLworCSAgICAgIGlmIChwICE9IGZtLT5kdikgeworCQl1bmxpbmtfY2h1bmsoZm0sIHAsIHByZXZzaXplKTsKKwkgICAgICB9CisJICAgICAgZWxzZSBpZiAoKG5leHQtPmhlYWQgJiBJTlVTRV9CSVRTKSA9PSBJTlVTRV9CSVRTKSB7CisJCWZtLT5kdnNpemUgPSBwc2l6ZTsKKwkJc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworCQlnb3RvIHBvc3RhY3Rpb247CisJICAgICAgfQorCSAgICB9CisJICAgIGVsc2UKKwkgICAgICBnb3RvIGVycm9yYWN0aW9uOworCSAgfQorCX0KKworCWlmIChSVENIRUNLKG9rX25leHQocCwgbmV4dCkgJiYgb2tfcGludXNlKG5leHQpKSkgeworCSAgaWYgKCFjaW51c2UobmV4dCkpIHsgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8KKwkgICAgaWYgKG5leHQgPT0gZm0tPnRvcCkgeworCSAgICAgIHNpemVfdCB0c2l6ZSA9IGZtLT50b3BzaXplICs9IHBzaXplOworCSAgICAgIGZtLT50b3AgPSBwOworCSAgICAgIHAtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7CisJICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisJCWZtLT5kdiA9IDA7CisJCWZtLT5kdnNpemUgPSAwOworCSAgICAgIH0KKwkgICAgICBpZiAoc2hvdWxkX3RyaW0oZm0sIHRzaXplKSkKKwkJc3lzX3RyaW0oZm0sIDApOworCSAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKwkgICAgfQorCSAgICBlbHNlIGlmIChuZXh0ID09IGZtLT5kdikgeworCSAgICAgIHNpemVfdCBkc2l6ZSA9IGZtLT5kdnNpemUgKz0gcHNpemU7CisJICAgICAgZm0tPmR2ID0gcDsKKwkgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgZHNpemUpOworCSAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUobmV4dCk7CisJICAgICAgcHNpemUgKz0gbnNpemU7CisJICAgICAgdW5saW5rX2NodW5rKGZtLCBuZXh0LCBuc2l6ZSk7CisJICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHBzaXplKTsKKwkgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKwkJZm0tPmR2c2l6ZSA9IHBzaXplOworCQlnb3RvIHBvc3RhY3Rpb247CisJICAgICAgfQorCSAgICB9CisJICB9CisJICBlbHNlCisJICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKworCSAgaWYgKGlzX3NtYWxsKHBzaXplKSkgeworCSAgICBpbnNlcnRfc21hbGxfY2h1bmsoZm0sIHAsIHBzaXplKTsKKwkgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisJICB9CisJICBlbHNlIHsKKwkgICAgdGNodW5rcHRyIHRwID0gKHRjaHVua3B0cilwOworCSAgICBpbnNlcnRfbGFyZ2VfY2h1bmsoZm0sIHRwLCBwc2l6ZSk7CisJICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOworCSAgICBpZiAoLS1mbS0+cmVsZWFzZV9jaGVja3MgPT0gMCkKKwkgICAgICByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhmbSk7CisJICB9CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorICAgICAgfQorICAgIGVycm9yYWN0aW9uOgorICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICBwb3N0YWN0aW9uOgorICAgICAgUE9TVEFDVElPTihmbSk7CisgICAgfQorICB9Cit9CisKK3ZvaWQqIG1zcGFjZV9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKKyAgdm9pZCogbWVtOworICBzaXplX3QgcmVxID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAobl9lbGVtZW50cyAhPSAwKSB7CisgICAgcmVxID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKKyAgICBpZiAoKChuX2VsZW1lbnRzIHwgZWxlbV9zaXplKSAmIH4oc2l6ZV90KTB4ZmZmZikgJiYKKwkocmVxIC8gbl9lbGVtZW50cyAhPSBlbGVtX3NpemUpKQorICAgICAgcmVxID0gTUFYX1NJWkVfVDsgLyogZm9yY2UgZG93bnN0cmVhbSBmYWlsdXJlIG9uIG92ZXJmbG93ICovCisgIH0KKyAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG1zLCByZXEpOworICBpZiAobWVtICE9IDAgJiYgY2FsbG9jX211c3RfY2xlYXIobWVtMmNodW5rKG1lbSkpKQorICAgIG1lbXNldChtZW0sIDAsIHJlcSk7CisgIHJldHVybiBtZW07Cit9CisKK3ZvaWQqIG1zcGFjZV9yZWFsbG9jKG1zcGFjZSBtc3AsIHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChvbGRtZW0gPT0gMCkKKyAgICByZXR1cm4gbXNwYWNlX21hbGxvYyhtc3AsIGJ5dGVzKTsKKyNpZmRlZiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMKKyAgaWYgKGJ5dGVzID09IDApIHsKKyAgICBtc3BhY2VfZnJlZShtc3AsIG9sZG1lbSk7CisgICAgcmV0dXJuIDA7CisgIH0KKyNlbmRpZiAvKiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgKi8KKyAgZWxzZSB7CisjaWYgRk9PVEVSUworICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhvbGRtZW0pOworICAgIG1zdGF0ZSBtcyA9IGdldF9tc3RhdGVfZm9yKHApOworI2Vsc2UgLyogRk9PVEVSUyAqLworICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gaW50ZXJuYWxfcmVhbGxvYyhtcywgb2xkbWVtLCBieXRlcyk7CisgIH0KK30KKwordm9pZCogbXNwYWNlX21lbWFsaWduKG1zcGFjZSBtc3AsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBpbnRlcm5hbF9tZW1hbGlnbihtcywgYWxpZ25tZW50LCBieXRlcyk7Cit9CisKK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorCQkJCSBzaXplX3QgZWxlbV9zaXplLCB2b2lkKiBjaHVua3NbXSkgeworICBzaXplX3Qgc3ogPSBlbGVtX3NpemU7IC8qIHNlcnZlcyBhcyAxLWVsZW1lbnQgYXJyYXkgKi8KKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gaWFsbG9jKG1zLCBuX2VsZW1lbnRzLCAmc3osIDMsIGNodW5rcyk7Cit9CisKK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisJCQkJICAgc2l6ZV90IHNpemVzW10sIHZvaWQqIGNodW5rc1tdKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIGlhbGxvYyhtcywgbl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7Cit9CisKK2ludCBtc3BhY2VfdHJpbShtc3BhY2UgbXNwLCBzaXplX3QgcGFkKSB7CisgIGludCByZXN1bHQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIGlmICghUFJFQUNUSU9OKG1zKSkgeworICAgICAgcmVzdWx0ID0gc3lzX3RyaW0obXMsIHBhZCk7CisgICAgICBQT1NUQUNUSU9OKG1zKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIG1zcGFjZV9tYWxsb2Nfc3RhdHMobXNwYWNlIG1zcCkgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIGludGVybmFsX21hbGxvY19zdGF0cyhtcyk7CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorfQorCitzaXplX3QgbXNwYWNlX2Zvb3RwcmludChtc3BhY2UgbXNwKSB7CisgIHNpemVfdCByZXN1bHQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIHJlc3VsdCA9IG1zLT5mb290cHJpbnQ7CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisKK3NpemVfdCBtc3BhY2VfbWF4X2Zvb3RwcmludChtc3BhY2UgbXNwKSB7CisgIHNpemVfdCByZXN1bHQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIHJlc3VsdCA9IG1zLT5tYXhfZm9vdHByaW50OworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisjaWYgIU5PX01BTExJTkZPCitzdHJ1Y3QgbWFsbGluZm8gbXNwYWNlX21hbGxpbmZvKG1zcGFjZSBtc3ApIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gaW50ZXJuYWxfbWFsbGluZm8obXMpOworfQorI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKK3NpemVfdCBtc3BhY2VfdXNhYmxlX3NpemUodm9pZCogbWVtKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisgICAgaWYgKGNpbnVzZShwKSkKKyAgICAgIHJldHVybiBjaHVua3NpemUocCkgLSBvdmVyaGVhZF9mb3IocCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBtc3BhY2VfbWFsbG9wdChpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgcmV0dXJuIGNoYW5nZV9tcGFyYW0ocGFyYW1fbnVtYmVyLCB2YWx1ZSk7Cit9CisKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEFsdGVybmF0aXZlIE1PUkVDT1JFIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIEd1aWRlbGluZXMgZm9yIGNyZWF0aW5nIGEgY3VzdG9tIHZlcnNpb24gb2YgTU9SRUNPUkU6CisKKyAgKiBGb3IgYmVzdCBwZXJmb3JtYW5jZSwgTU9SRUNPUkUgc2hvdWxkIGFsbG9jYXRlIGluIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4KKyAgKiBNT1JFQ09SRSBtYXkgYWxsb2NhdGUgbW9yZSBtZW1vcnkgdGhhbiByZXF1ZXN0ZWQuIChPciBldmVuIGxlc3MsCisgICAgICBidXQgdGhpcyB3aWxsIHVzdWFsbHkgcmVzdWx0IGluIGEgbWFsbG9jIGZhaWx1cmUuKQorICAqIE1PUkVDT1JFIG11c3Qgbm90IGFsbG9jYXRlIG1lbW9yeSB3aGVuIGdpdmVuIGFyZ3VtZW50IHplcm8sIGJ1dAorICAgICAgaW5zdGVhZCByZXR1cm4gb25lIHBhc3QgdGhlIGVuZCBhZGRyZXNzIG9mIG1lbW9yeSBmcm9tIHByZXZpb3VzCisgICAgICBub256ZXJvIGNhbGwuCisgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFIHdpdGggcG9zaXRpdmUKKyAgICAgIGFyZ3VtZW50cyBzaG91bGQgcmV0dXJuIGluY3JlYXNpbmcgYWRkcmVzc2VzLCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgIHNwYWNlIGhhcyBiZWVuIGNvbnRpZ3VvdXNseSBleHRlbmRlZC4KKyAgKiBFdmVuIHRob3VnaCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRSBuZWVkIG5vdCByZXR1cm4gY29udGlndW91cworICAgICAgYWRkcmVzc2VzLCBpdCBtdXN0IGJlIE9LIGZvciBtYWxsb2MnZWQgY2h1bmtzIHRvIHNwYW4gbXVsdGlwbGUKKyAgICAgIHJlZ2lvbnMgaW4gdGhvc2UgY2FzZXMgd2hlcmUgdGhleSBkbyBoYXBwZW4gdG8gYmUgY29udGlndW91cy4KKyAgKiBNT1JFQ09SRSBuZWVkIG5vdCBoYW5kbGUgbmVnYXRpdmUgYXJndW1lbnRzIC0tIGl0IG1heSBpbnN0ZWFkCisgICAgICBqdXN0IHJldHVybiBNRkFJTCB3aGVuIGdpdmVuIG5lZ2F0aXZlIGFyZ3VtZW50cy4KKyAgICAgIE5lZ2F0aXZlIGFyZ3VtZW50cyBhcmUgYWx3YXlzIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4gTU9SRUNPUkUKKyAgICAgIG11c3Qgbm90IG1pc2ludGVycHJldCBuZWdhdGl2ZSBhcmdzIGFzIGxhcmdlIHBvc2l0aXZlIHVuc2lnbmVkCisgICAgICBhcmdzLiBZb3UgY2FuIHN1cHByZXNzIGFsbCBzdWNoIGNhbGxzIGZyb20gZXZlbiBvY2N1cnJpbmcgYnkgZGVmaW5pbmcKKyAgICAgIE1PUkVDT1JFX0NBTk5PVF9UUklNLAorCisgIEFzIGFuIGV4YW1wbGUgYWx0ZXJuYXRpdmUgTU9SRUNPUkUsIGhlcmUgaXMgYSBjdXN0b20gYWxsb2NhdG9yCisgIGtpbmRseSBjb250cmlidXRlZCBmb3IgcHJlLU9TWCBtYWNPUy4gIEl0IHVzZXMgdmlydHVhbGx5IGJ1dCBub3QKKyAgbmVjZXNzYXJpbHkgcGh5c2ljYWxseSBjb250aWd1b3VzIG5vbi1wYWdlZCBtZW1vcnkgKGxvY2tlZCBpbiwKKyAgcHJlc2VudCBhbmQgd29uJ3QgZ2V0IHN3YXBwZWQgb3V0KS4gIFlvdSBjYW4gdXNlIGl0IGJ5IHVuY29tbWVudGluZworICB0aGlzIHNlY3Rpb24sIGFkZGluZyBzb21lICNpbmNsdWRlcywgYW5kIHNldHRpbmcgdXAgdGhlIGFwcHJvcHJpYXRlCisgIGRlZmluZXMgYWJvdmU6CisKKyAgICAgICNkZWZpbmUgTU9SRUNPUkUgb3NNb3JlQ29yZQorCisgIFRoZXJlIGlzIGFsc28gYSBzaHV0ZG93biByb3V0aW5lIHRoYXQgc2hvdWxkIHNvbWVob3cgYmUgY2FsbGVkIGZvcgorICBjbGVhbnVwIHVwb24gcHJvZ3JhbSBleGl0LgorCisgICNkZWZpbmUgTUFYX1BPT0xfRU5UUklFUyAxMDAKKyAgI2RlZmluZSBNSU5JTVVNX01PUkVDT1JFX1NJWkUgICg2NCAqIDEwMjRVKQorICBzdGF0aWMgaW50IG5leHRfb3NfcG9vbDsKKyAgdm9pZCAqb3VyX29zX3Bvb2xzW01BWF9QT09MX0VOVFJJRVNdOworCisgIHZvaWQgKm9zTW9yZUNvcmUoaW50IHNpemUpCisgIHsKKyAgICB2b2lkICpwdHIgPSAwOworICAgIHN0YXRpYyB2b2lkICpzYnJrX3RvcCA9IDA7CisKKyAgICBpZiAoc2l6ZSA+IDApCisgICAgeworICAgICAgaWYgKHNpemUgPCBNSU5JTVVNX01PUkVDT1JFX1NJWkUpCisJIHNpemUgPSBNSU5JTVVNX01PUkVDT1JFX1NJWkU7CisgICAgICBpZiAoQ3VycmVudEV4ZWN1dGlvbkxldmVsKCkgPT0ga1Rhc2tMZXZlbCkKKwkgcHRyID0gUG9vbEFsbG9jYXRlUmVzaWRlbnQoc2l6ZSArIFJNX1BBR0VfU0laRSwgMCk7CisgICAgICBpZiAocHRyID09IDApCisgICAgICB7CisJcmV0dXJuICh2b2lkICopIE1GQUlMOworICAgICAgfQorICAgICAgLy8gc2F2ZSBwdHJzIHNvIHRoZXkgY2FuIGJlIGZyZWVkIGR1cmluZyBjbGVhbnVwCisgICAgICBvdXJfb3NfcG9vbHNbbmV4dF9vc19wb29sXSA9IHB0cjsKKyAgICAgIG5leHRfb3NfcG9vbCsrOworICAgICAgcHRyID0gKHZvaWQgKikgKCgoKHNpemVfdCkgcHRyKSArIFJNX1BBR0VfTUFTSykgJiB+Uk1fUEFHRV9NQVNLKTsKKyAgICAgIHNicmtfdG9wID0gKGNoYXIgKikgcHRyICsgc2l6ZTsKKyAgICAgIHJldHVybiBwdHI7CisgICAgfQorICAgIGVsc2UgaWYgKHNpemUgPCAwKQorICAgIHsKKyAgICAgIC8vIHdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHNocmluayBiZWhhdmlvcgorICAgICAgcmV0dXJuICh2b2lkICopIE1GQUlMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIHNicmtfdG9wOworICAgIH0KKyAgfQorCisgIC8vIGNsZWFudXAgYW55IGFsbG9jYXRlZCBtZW1vcnkgcG9vbHMKKyAgLy8gY2FsbGVkIGFzIGxhc3QgdGhpbmcgYmVmb3JlIHNodXR0aW5nIGRvd24gZHJpdmVyCisKKyAgdm9pZCBvc0NsZWFudXBNZW0odm9pZCkKKyAgeworICAgIHZvaWQgKipwdHI7CisKKyAgICBmb3IgKHB0ciA9IG91cl9vc19wb29sczsgcHRyIDwgJm91cl9vc19wb29sc1tNQVhfUE9PTF9FTlRSSUVTXTsgcHRyKyspCisgICAgICBpZiAoKnB0cikKKyAgICAgIHsKKwkgUG9vbERlYWxsb2NhdGUoKnB0cik7CisJICpwdHIgPSAwOworICAgICAgfQorICB9CisKKyovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hpc3Rvcnk6CisgICAgVjIuOC40IChub3QgeWV0IHJlbGVhc2VkKQorICAgICAgKiBBZGQgbXNwYWNlX21tYXBfbGFyZ2VfY2h1bmtzOyB0aGFua3MgdG8gSmVhbiBCcm91d2VycworICAgICAgKiBGaXggaW5zdWZmaWNpZW50IHN5c19hbGxvYyBwYWRkaW5nIHdoZW4gdXNpbmcgMTZieXRlIGFsaWdubWVudAorICAgICAgKiBGaXggYmFkIGVycm9yIGNoZWNrIGluIG1zcGFjZV9mb290cHJpbnQKKyAgICAgICogQWRhcHRhdGlvbnMgZm9yIHB0bWFsbG9jLCBjb3VydGVzeSBvZiBXb2xmcmFtIEdsb2dlci4KKyAgICAgICogUmVlbnRyYW50IHNwaW4gbG9ja3MsIGNvdXJ0ZXN5IG9mIEVhcmwgQ2hldyBhbmQgb3RoZXJzCisgICAgICAqIFdpbjMyIGltcHJvdmVtZW50cywgY291cnRlc3kgb2YgTmlhbGwgRG91Z2xhcyBhbmQgRWFybCBDaGV3CisgICAgICAqIEFkZCBOT19TRUdNRU5UX1RSQVZFUlNBTCBhbmQgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSBvcHRpb25zCisgICAgICAqIEV4dGVuc2lvbiBob29rIGluIG1hbGxvY19zdGF0ZQorICAgICAgKiBWYXJpb3VzIHNtYWxsIGFkanVzdG1lbnRzIHRvIHJlZHVjZSB3YXJuaW5ncyBvbiBzb21lIGNvbXBpbGVycworICAgICAgKiBWYXJpb3VzIGNvbmZpZ3VyYXRpb24gZXh0ZW5zaW9ucy9jaGFuZ2VzIGZvciBtb3JlIHBsYXRmb3Jtcy4gVGhhbmtzCisJIHRvIGFsbCB3aG8gY29udHJpYnV0ZWQgdGhlc2UuCisKKyAgICBWMi44LjMgVGh1IFNlcCAyMiAxMToxNjozMiAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWRkIG1heF9mb290cHJpbnQgZnVuY3Rpb25zCisgICAgICAqIEVuc3VyZSBhbGwgYXBwcm9wcmlhdGUgbGl0ZXJhbHMgYXJlIHNpemVfdAorICAgICAgKiBGaXggY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcHJvYmxlbSBmb3Igc29tZSAjZGVmaW5lIHNldHRpbmdzCisgICAgICAqIEF2b2lkIGNvbmNhdGVuYXRpbmcgc2VnbWVudHMgd2l0aCB0aGUgb25lIHByb3ZpZGVkCisJaW4gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UKKyAgICAgICogUmVuYW1lIHNvbWUgdmFyaWFibGVzIHRvIGF2b2lkIGNvbXBpbGVyIHNoYWRvd2luZyB3YXJuaW5ncworICAgICAgKiBVc2UgZXhwbGljaXQgbG9jayBpbml0aWFsaXphdGlvbi4KKyAgICAgICogQmV0dGVyIGhhbmRsaW5nIG9mIHNicmsgaW50ZXJmZXJlbmNlLgorICAgICAgKiBTaW1wbGlmeSBhbmQgZml4IHNlZ21lbnQgaW5zZXJ0aW9uLCB0cmltbWluZyBhbmQgbXNwYWNlX2Rlc3Ryb3kKKyAgICAgICogUmVpbnN0YXRlIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyBvcHRpb24gZnJvbSAyLjcueAorICAgICAgKiBUaGFua3MgZXNwZWNpYWxseSB0byBEZW5uaXMgRmxhbmFnYW4gZm9yIGhlbHAgb24gdGhlc2UuCisKKyAgICBWMi44LjIgU3VuIEp1biAxMiAxNjowMToxMCAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IG1lbWFsaWduIGJyYWNlIGVycm9yLgorCisgICAgVjIuOC4xIFdlZCBKdW4gIDggMTY6MTE6NDYgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeCBpbXByb3BlciAjZW5kaWYgbmVzdGluZyBpbiBDKysKKyAgICAgICogQWRkIGV4cGxpY2l0IGNhc3RzIG5lZWRlZCBmb3IgQysrCisKKyAgICBWMi44LjAgTW9uIE1heSAzMCAxNDowOTowMiAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogVXNlIHRyZWVzIGZvciBsYXJnZSBiaW5zCisgICAgICAqIFN1cHBvcnQgbXNwYWNlcworICAgICAgKiBVc2Ugc2VnbWVudHMgdG8gdW5pZnkgc2Jyay1iYXNlZCBhbmQgbW1hcC1iYXNlZCBzeXN0ZW0gYWxsb2NhdGlvbiwKKwlyZW1vdmluZyBuZWVkIGZvciBlbXVsYXRpb24gb24gbW9zdCBwbGF0Zm9ybXMgd2l0aG91dCBzYnJrLgorICAgICAgKiBEZWZhdWx0IHNhZmV0eSBjaGVja3MKKyAgICAgICogT3B0aW9uYWwgZm9vdGVyIGNoZWNrcy4gVGhhbmtzIHRvIFdpbGxpYW0gUm9iZXJ0c29uIGZvciB0aGUgaWRlYS4KKyAgICAgICogSW50ZXJuYWwgY29kZSByZWZhY3RvcmluZworICAgICAgKiBJbmNvcnBvcmF0ZSBzdWdnZXN0aW9ucyBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgY2hhbmdlcy4KKwlUaGFua3MgdG8gRGVubmlzIEZsYW5hZ2FuLCBDb2xpbiBQbHVtYiwgTmlhbGwgRG91Z2xhcywKKwlBYXJvbiBCYWNobWFubiwgIEVtZXJ5IEJlcmdlciwgYW5kIG90aGVycy4KKyAgICAgICogU3BlZWQgdXAgbm9uLWZhc3RiaW4gcHJvY2Vzc2luZyBlbm91Z2ggdG8gcmVtb3ZlIGZhc3RiaW5zLgorICAgICAgKiBSZW1vdmUgdXNlbGVzcyBjZnJlZSgpIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIGFwcHMuCisgICAgICAqIFJlbW92ZSBpbnRlcm5hbCBtZW1jcHksIG1lbXNldC4gQ29tcGlsZXJzIGhhbmRsZSBidWlsdGlucyBiZXR0ZXIuCisgICAgICAqIFJlbW92ZSBzb21lIG9wdGlvbnMgdGhhdCBubyBvbmUgZXZlciB1c2VkIGFuZCByZW5hbWUgb3RoZXJzLgorCisgICAgVjIuNy4yIFNhdCBBdWcgMTcgMDk6MDc6MzAgMjAwMiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeCBtYWxsb2Nfc3RhdGUgYml0bWFwIGFycmF5IG1pc2RlY2xhcmF0aW9uCisKKyAgICBWMi43LjEgVGh1IEp1bCAyNSAxMDo1ODowMyAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWxsb3cgdHVuaW5nIG9mIEZJUlNUX1NPUlRFRF9CSU5fU0laRQorICAgICAgKiBVc2UgUFRSX1VJTlQgYXMgdHlwZSBmb3IgYWxsIHB0ci0+aW50IGNhc3RzLiBUaGFua3MgdG8gSm9obiBCZWxtb250ZS4KKyAgICAgICogQmV0dGVyIGRldGVjdGlvbiBhbmQgc3VwcG9ydCBmb3Igbm9uLWNvbnRpZ3VvdXNuZXNzIG9mIE1PUkVDT1JFLgorCVRoYW5rcyB0byBBbmRyZWFzIE11ZWxsZXIsIENvbmFsIFdhbHNoLCBhbmQgV29sZnJhbSBHbG9nZXIKKyAgICAgICogQnlwYXNzIG1vc3Qgb2YgbWFsbG9jIGlmIG5vIGZyZWVzLiBUaGFua3MgVG8gRW1lcnkgQmVyZ2VyLgorICAgICAgKiBGaXggZnJlZWluZyBvZiBvbGQgdG9wIG5vbi1jb250aWd1b3VzIGNodW5rIGltIHN5c21hbGxvYy4KKyAgICAgICogUmFpc2VkIGRlZmF1bHQgdHJpbSBhbmQgbWFwIHRocmVzaG9sZHMgdG8gMjU2Sy4KKyAgICAgICogRml4IG1tYXAtcmVsYXRlZCAjZGVmaW5lcy4gVGhhbmtzIHRvIEx1Ym9zIEx1bmFrLgorICAgICAgKiBGaXggY29weSBtYWNyb3M7IGFkZGVkIExBQ0tTX0ZDTlRMX0guIFRoYW5rcyB0byBOZWFsIFdhbGZpZWxkLgorICAgICAgKiBCcmFuY2gtZnJlZSBiaW4gY2FsY3VsYXRpb24KKyAgICAgICogRGVmYXVsdCB0cmltIGFuZCBtbWFwIHRocmVzaG9sZHMgbm93IDI1NksuCisKKyAgICBWMi43LjAgU3VuIE1hciAxMSAxNDoxNDowNiAyMDAxICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogSW50cm9kdWNlIGluZGVwZW5kZW50X2NvbWFsbG9jIGFuZCBpbmRlcGVuZGVudF9jYWxsb2MuCisJVGhhbmtzIHRvIE1pY2hhZWwgUGFjaG9zIGZvciBtb3RpdmF0aW9uIGFuZCBoZWxwLgorICAgICAgKiBNYWtlIG9wdGlvbmFsIC5oIGZpbGUgYXZhaWxhYmxlCisgICAgICAqIEFsbG93ID4gMkdCIHJlcXVlc3RzIG9uIDMyYml0IHN5c3RlbXMuCisgICAgICAqIG5ldyBXSU4zMiBzYnJrLCBtbWFwLCBtdW5tYXAsIGxvY2sgY29kZSBmcm9tIDxXYWx0ZXJAR2VOZVN5cy1lLmRlPi4KKwlUaGFua3MgYWxzbyB0byBBbmRyZWFzIE11ZWxsZXIgPGEubXVlbGxlciBhdCBwYXJhZGF0ZWMuZGU+LAorCWFuZCBBbm9ueW1vdXMuCisgICAgICAqIEFsbG93IG92ZXJyaWRlIG9mIE1BTExPQ19BTElHTk1FTlQgKFRoYW5rcyB0byBSdXVkIFdhaWogZm9yCisJaGVscGluZyB0ZXN0IHRoaXMuKQorICAgICAgKiBtZW1hbGlnbjogY2hlY2sgYWxpZ25tZW50IGFyZworICAgICAgKiByZWFsbG9jOiBkb24ndCB0cnkgdG8gc2hpZnQgY2h1bmtzIGJhY2t3YXJkcywgc2luY2UgdGhpcworCWxlYWRzIHRvICBtb3JlIGZyYWdtZW50YXRpb24gaW4gc29tZSBwcm9ncmFtcyBhbmQgZG9lc24ndAorCXNlZW0gdG8gaGVscCBpbiBhbnkgb3RoZXJzLgorICAgICAgKiBDb2xsZWN0IGFsbCBjYXNlcyBpbiBtYWxsb2MgcmVxdWlyaW5nIHN5c3RlbSBtZW1vcnkgaW50byBzeXNtYWxsb2MKKyAgICAgICogVXNlIG1tYXAgYXMgYmFja3VwIHRvIHNicmsKKyAgICAgICogUGxhY2UgYWxsIGludGVybmFsIHN0YXRlIGluIG1hbGxvY19zdGF0ZQorICAgICAgKiBJbnRyb2R1Y2UgZmFzdGJpbnMgKGFsdGhvdWdoIHNpbWlsYXIgdG8gMi41LjEpCisgICAgICAqIE1hbnkgbWlub3IgdHVuaW5ncyBhbmQgY29zbWV0aWMgaW1wcm92ZW1lbnRzCisgICAgICAqIEludHJvZHVjZSBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVSUywgVVNFX01BTExPQ19MT0NLCisgICAgICAqIEludHJvZHVjZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04sIE1PUkVDT1JFX0NPTlRJR1VPVVMKKwlUaGFua3MgdG8gVG9ueSBFLiBCZW5uZXR0IDx0YmVubmV0dEBudmlkaWEuY29tPiBhbmQgb3RoZXJzLgorICAgICAgKiBJbmNsdWRlIGVycm5vLmggdG8gc3VwcG9ydCBkZWZhdWx0IGZhaWx1cmUgYWN0aW9uLgorCisgICAgVjIuNi42IFN1biBEZWMgIDUgMDc6NDI6MTkgMTk5OSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIHJldHVybiBudWxsIGZvciBuZWdhdGl2ZSBhcmd1bWVudHMKKyAgICAgICogQWRkZWQgU2V2ZXJhbCBXSU4zMiBjbGVhbnVwcyBmcm9tIE1hcnRpbiBDLiBGb25nIDxtY2ZvbmcgYXQgeWFob28uY29tPgorCSAqIEFkZCAnTEFDS1NfU1lTX1BBUkFNX0gnIGZvciB0aG9zZSBzeXN0ZW1zIHdpdGhvdXQgJ3N5cy9wYXJhbS5oJworCSAgKGUuZy4gV0lOMzIgcGxhdGZvcm1zKQorCSAqIENsZWFudXAgaGVhZGVyIGZpbGUgaW5jbHVzaW9uIGZvciBXSU4zMiBwbGF0Zm9ybXMKKwkgKiBDbGVhbnVwIGNvZGUgdG8gYXZvaWQgTWljcm9zb2Z0IFZpc3VhbCBDKysgY29tcGlsZXIgY29tcGxhaW50cworCSAqIEFkZCAnVVNFX0RMX1BSRUZJWCcgdG8gcXVpY2tseSBhbGxvdyBjby1leGlzdGVuY2Ugd2l0aCBleGlzdGluZworCSAgIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzCisJICogU2V0ICdtYWxsb2NfZ2V0cGFnZXNpemUnIGZvciBXSU4zMiBwbGF0Zm9ybXMgKG5lZWRzIG1vcmUgd29yaykKKwkgKiBVc2UgJ2Fzc2VydCcgcmF0aGVyIHRoYW4gJ0FTU0VSVCcgaW4gV0lOMzIgY29kZSB0byBjb25mb3JtIHRvCisJICAgdXNhZ2Ugb2YgJ2Fzc2VydCcgaW4gbm9uLVdJTjMyIGNvZGUKKwkgKiBJbXByb3ZlIFdJTjMyICdzYnJrKCknIGVtdWxhdGlvbidzICdmaW5kUmVnaW9uKCknIHJvdXRpbmUgdG8KKwkgICBhdm9pZCBpbmZpbml0ZSBsb29wCisgICAgICAqIEFsd2F5cyBjYWxsICdmUkVlKCknIHJhdGhlciB0aGFuICdmcmVlKCknCisKKyAgICBWMi42LjUgV2VkIEp1biAxNyAxNTo1NzozMSAxOTk4ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4ZWQgb3JkZXJpbmcgcHJvYmxlbSB3aXRoIGJvdW5kYXJ5LXN0YW1waW5nCisKKyAgICBWMi42LjMgU3VuIE1heSAxOSAwODoxNzo1OCAxOTk2ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWRkZWQgcHZhbGxvYywgYXMgcmVjb21tZW5kZWQgYnkgSC5KLiBMaXUKKyAgICAgICogQWRkZWQgNjRiaXQgcG9pbnRlciBzdXBwb3J0IG1haW5seSBmcm9tIFdvbGZyYW0gR2xvZ2VyCisgICAgICAqIEFkZGVkIGFub255bW91c2x5IGRvbmF0ZWQgV0lOMzIgc2JyayBlbXVsYXRpb24KKyAgICAgICogTWFsbG9jLCBjYWxsb2MsIGdldHBhZ2VzaXplOiBhZGQgb3B0aW1pemF0aW9ucyBmcm9tIFJheW1vbmQgTmlqc3NlbgorICAgICAgKiBtYWxsb2NfZXh0ZW5kX3RvcDogZml4IG1hc2sgZXJyb3IgdGhhdCBjYXVzZWQgd2FzdGFnZSBhZnRlcgorCWZvcmVpZ24gc2Jya3MKKyAgICAgICogQWRkIGxpbnV4IG1yZW1hcCBzdXBwb3J0IGNvZGUgZnJvbSBISiBMaXUKKworICAgIFYyLjYuMiBUdWUgRGVjICA1IDA2OjUyOjU1IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBJbnRlZ3JhdGVkIG1vc3QgZG9jdW1lbnRhdGlvbiB3aXRoIHRoZSBjb2RlLgorICAgICAgKiBBZGQgc3VwcG9ydCBmb3IgbW1hcCwgd2l0aCBoZWxwIGZyb20KKwlXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgorICAgICAgKiBVc2UgbGFzdF9yZW1haW5kZXIgaW4gbW9yZSBjYXNlcy4KKyAgICAgICogUGFjayBiaW5zIHVzaW5nIGlkZWEgZnJvbSAgY29saW5Abnl4MTAuY3MuZHUuZWR1CisgICAgICAqIFVzZSBvcmRlcmVkIGJpbnMgaW5zdGVhZCBvZiBiZXN0LWZpdCB0aHJlc2hob2xkCisgICAgICAqIEVsaW1pbmF0ZSBibG9jay1sb2NhbCBkZWNscyB0byBzaW1wbGlmeSB0cmFjaW5nIGFuZCBkZWJ1Z2dpbmcuCisgICAgICAqIFN1cHBvcnQgYW5vdGhlciBjYXNlIG9mIHJlYWxsb2MgdmlhIG1vdmUgaW50byB0b3AKKyAgICAgICogRml4IGVycm9yIG9jY3VyaW5nIHdoZW4gaW5pdGlhbCBzYnJrX2Jhc2Ugbm90IHdvcmQtYWxpZ25lZC4KKyAgICAgICogUmVseSBvbiBwYWdlIHNpemUgZm9yIHVuaXRzIGluc3RlYWQgb2YgU0JSS19VTklUIHRvCisJYXZvaWQgc3VycHJpc2VzIGFib3V0IHNicmsgYWxpZ25tZW50IGNvbnZlbnRpb25zLgorICAgICAgKiBBZGQgbWFsbGluZm8sIG1hbGxvcHQuIFRoYW5rcyB0byBSYXltb25kIE5panNzZW4KKwkocmF5bW9uZEBlcy5lbGUudHVlLm5sKSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisgICAgICAqIEFkZCBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSBhbmQgdG9wX3BhZCBtYWxsb3B0IHBhcmFtZXRlci4KKyAgICAgICogTW9yZSBwcmVjYXV0aW9ucyBmb3IgY2FzZXMgd2hlcmUgb3RoZXIgcm91dGluZXMgY2FsbCBzYnJrLAorCWNvdXJ0ZXN5IG9mIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuCisgICAgICAqIEFkZGVkIG1hY3JvcyBldGMuLCBhbGxvd2luZyB1c2UgaW4gbGludXggbGliYyBmcm9tCisJSC5KLiBMdSAoaGpsQGdudS5haS5taXQuZWR1KQorICAgICAgKiBJbnZlcnRlZCB0aGlzIGhpc3RvcnkgbGlzdAorCisgICAgVjIuNi4xIFNhdCBEZWMgIDIgMTQ6MTA6NTcgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIFJlLXR1bmVkIGFuZCBmaXhlZCB0byBiZWhhdmUgbW9yZSBuaWNlbHkgd2l0aCBWMi42LjAgY2hhbmdlcy4KKyAgICAgICogUmVtb3ZlZCBhbGwgcHJlYWxsb2NhdGlvbiBjb2RlIHNpbmNlIHVuZGVyIGN1cnJlbnQgc2NoZW1lCisJdGhlIHdvcmsgcmVxdWlyZWQgdG8gdW5kbyBiYWQgcHJlYWxsb2NhdGlvbnMgZXhjZWVkcworCXRoZSB3b3JrIHNhdmVkIGluIGdvb2QgY2FzZXMgZm9yIG1vc3QgdGVzdCBwcm9ncmFtcy4KKyAgICAgICogTm8gbG9uZ2VyIHVzZSByZXR1cm4gbGlzdCBvciB1bmNvbnNvbGlkYXRlZCBiaW5zIHNpbmNlCisJbm8gc2NoZW1lIHVzaW5nIHRoZW0gY29uc2lzdGVudGx5IG91dHBlcmZvcm1zIHRob3NlIHRoYXQgZG9uJ3QKKwlnaXZlbiBhYm92ZSBjaGFuZ2VzLgorICAgICAgKiBVc2UgYmVzdCBmaXQgZm9yIHZlcnkgbGFyZ2UgY2h1bmtzIHRvIHByZXZlbnQgc29tZSB3b3JzdC1jYXNlcy4KKyAgICAgICogQWRkZWQgc29tZSBzdXBwb3J0IGZvciBkZWJ1Z2dpbmcKKworICAgIFYyLjYuMCBTYXQgTm92ICA0IDA3OjA1OjIzIDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBSZW1vdmVkIGZvb3RlcnMgd2hlbiBjaHVua3MgYXJlIGluIHVzZS4gVGhhbmtzIHRvCisJUGF1bCBXaWxzb24gKHdpbHNvbkBjcy50ZXhhcy5lZHUpIGZvciB0aGUgc3VnZ2VzdGlvbi4KKworICAgIFYyLjUuNCBXZWQgTm92ICAxIDA3OjU0OjUxIDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBZGRlZCBtYWxsb2NfdHJpbSwgd2l0aCBoZWxwIGZyb20gV29sZnJhbSBHbG9nZXIKKwkod21nbG9ARGVudC5NRUQuVW5pLU11ZW5jaGVuLkRFKS4KKworICAgIFYyLjUuMyBUdWUgQXByIDI2IDEwOjE2OjAxIDE5OTQgIERvdWcgTGVhICAoZGwgYXQgZykKKworICAgIFYyLjUuMiBUdWUgQXByICA1IDE2OjIwOjQwIDE5OTQgIERvdWcgTGVhICAoZGwgYXQgZykKKyAgICAgICogcmVhbGxvYzogdHJ5IHRvIGV4cGFuZCBpbiBib3RoIGRpcmVjdGlvbnMKKyAgICAgICogbWFsbG9jOiBzd2FwIG9yZGVyIG9mIGNsZWFuLWJpbiBzdHJhdGVneTsKKyAgICAgICogcmVhbGxvYzogb25seSBjb25kaXRpb25hbGx5IGV4cGFuZCBiYWNrd2FyZHMKKyAgICAgICogVHJ5IG5vdCB0byBzY2F2ZW5nZSB1c2VkIGJpbnMKKyAgICAgICogVXNlIGJpbiBjb3VudHMgYXMgYSBndWlkZSB0byBwcmVhbGxvY2F0aW9uCisgICAgICAqIE9jY2FzaW9uYWxseSBiaW4gcmV0dXJuIGxpc3QgY2h1bmtzIGluIGZpcnN0IHNjYW4KKyAgICAgICogQWRkIGEgZmV3IG9wdGltaXphdGlvbnMgZnJvbSBjb2xpbkBueXgxMC5jcy5kdS5lZHUKKworICAgIFYyLjUuMSBTYXQgQXVnIDE0IDE1OjQwOjQzIDE5OTMgIERvdWcgTGVhICAoZGwgYXQgZykKKyAgICAgICogZmFzdGVyIGJpbiBjb21wdXRhdGlvbiAmIHNsaWdodGx5IGRpZmZlcmVudCBiaW5uaW5nCisgICAgICAqIG1lcmdlZCBhbGwgY29uc29saWRhdGlvbnMgdG8gb25lIHBhcnQgb2YgbWFsbG9jIHByb3BlcgorCSAoZWxpbWluYXRpbmcgb2xkIG1hbGxvY19maW5kX3NwYWNlICYgbWFsbG9jX2NsZWFuX2JpbikKKyAgICAgICogU2NhbiAyIHJldHVybnMgY2h1bmtzIChub3QganVzdCAxKQorICAgICAgKiBQcm9wYWdhdGUgZmFpbHVyZSBpbiByZWFsbG9jIGlmIG1hbGxvYyByZXR1cm5zIDAKKyAgICAgICogQWRkIHN0dWZmIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9uIG5vbi1BTlNJIGNvbXBpbGVycworCSAgZnJvbSBrcHZAcmVzZWFyY2guYXR0LmNvbQorCisgICAgVjIuNSBTYXQgQXVnICA3IDA3OjQxOjU5IDE5OTMgIERvdWcgTGVhICAoZGwgYXQgZy5vc3dlZ28uZWR1KQorICAgICAgKiByZW1vdmVkIHBvdGVudGlhbCBmb3Igb2RkIGFkZHJlc3MgYWNjZXNzIGluIHByZXZfY2h1bmsKKyAgICAgICogcmVtb3ZlZCBkZXBlbmRlbmN5IG9uIGdldHBhZ2VzaXplLmgKKyAgICAgICogbWlzYyBjb3NtZXRpY3MgYW5kIGEgYml0IG1vcmUgaW50ZXJuYWwgZG9jdW1lbnRhdGlvbgorICAgICAgKiBhbnRpY29zbWV0aWNzOiBtYW5nbGVkIG5hbWVzIGluIG1hY3JvcyB0byBldmFkZSBkZWJ1Z2dlciBzdHJhbmdlbmVzcworICAgICAgKiB0ZXN0ZWQgb24gc3BhcmMsIGhwLTcwMCwgZGVjLW1pcHMsIHJzNjAwMAorCSAgd2l0aCBnY2MgJiBuYXRpdmUgY2MgKGhwLCBkZWMgb25seSkgYWxsb3dpbmcKKwkgIERldGxlZnMgJiBab3JuIGNvbXBhcmlzb24gc3R1ZHkgKGluIFNJR1BMQU4gTm90aWNlcy4pCisKKyAgICBUcmlhbCB2ZXJzaW9uIEZyaSBBdWcgMjggMTM6MTQ6MjkgMTk5MiAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCisgICAgICAqIEJhc2VkIGxvb3NlbHkgb24gbGliZysrLTEuMlggbWFsbG9jLiAoSXQgcmV0YWlucyBzb21lIG9mIHRoZSBvdmVyYWxsCisJIHN0cnVjdHVyZSBvZiBvbGQgdmVyc2lvbiwgIGJ1dCBtb3N0IGRldGFpbHMgZGlmZmVyLikKKworKi8KKworCmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5jIGIvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWExN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuYwpAQCAtMCwwICsxLDk2NiBAQAorLyogQWx0ZXJuYXRpdmUgbWFsbG9jIGltcGxlbWVudGF0aW9uIGZvciBtdWx0aXBsZSB0aHJlYWRzIHdpdGhvdXQKK2xvY2sgY29udGVudGlvbiBiYXNlZCBvbiBkbG1hbGxvYy4gKEMpIDIwMDUtMjAwNiBOaWFsbCBEb3VnbGFzCisKK0Jvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKK3RoaXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKK1NvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCitkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKKworVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcKK3RoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCittdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKK2FsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUKK3dvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQorYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUgQkUgTElBQkxFCitGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKK0FSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorKi8KKworI2lmZGVmIF9NU0NfVkVSCisvKiBFbmFibGUgZnVsbCBhbGlhc2luZyBvbiBNU1ZDICovCisvKiNwcmFnbWEgb3B0aW1pemUoImEiLCBvbikqLworI2VuZGlmCisKKy8qI2RlZmluZSBGVUxMU0FOSVRZQ0hFQ0tTKi8KKworI2luY2x1ZGUgIm5lZG1hbGxvYy5oIgorI2lmIGRlZmluZWQoV0lOMzIpCisgI2luY2x1ZGUgPG1hbGxvYy5oPgorI2VuZGlmCisjZGVmaW5lIE1TUEFDRVMgMQorI2RlZmluZSBPTkxZX01TUEFDRVMgMQorI2lmbmRlZiBVU0VfTE9DS1MKKyAjZGVmaW5lIFVTRV9MT0NLUyAxCisjZW5kaWYKKyNkZWZpbmUgRk9PVEVSUyAxICAgICAgICAgICAvKiBOZWVkIHRvIGVuYWJsZSBmb290ZXJzIHNvIGZyZWVzIGxvY2sgdGhlIHJpZ2h0IG1zcGFjZSAqLworI3VuZGVmIERFQlVHCQkJCS8qIGRsbWFsbG9jIHdhbnRzIERFQlVHIGVpdGhlciAwIG9yIDEgKi8KKyNpZmRlZiBfREVCVUcKKyAjZGVmaW5lIERFQlVHIDEKKyNlbHNlCisgI2RlZmluZSBERUJVRyAwCisjZW5kaWYKKyNpZmRlZiBOREVCVUcgICAgICAgICAgICAgICAvKiBEaXNhYmxlIGFzc2VydCBjaGVja2luZyBvbiByZWxlYXNlIGJ1aWxkcyAqLworICN1bmRlZiBERUJVRworI2VuZGlmCisvKiBUaGUgZGVmYXVsdCBvZiA2NEtiIG1lYW5zIHdlIHNwZW5kIHRvbyBtdWNoIHRpbWUga2VybmVsLXNpZGUgKi8KKyNpZm5kZWYgREVGQVVMVF9HUkFOVUxBUklUWQorI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgxKjEwMjQqMTAyNCkKKyNlbmRpZgorLyojZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDAqLworCisKKy8qI2RlZmluZSBGT1JDRUlOTElORSovCisjaW5jbHVkZSAibWFsbG9jLmMuaCIKKyNpZmRlZiBOREVCVUcgICAgICAgICAgICAgICAvKiBEaXNhYmxlIGFzc2VydCBjaGVja2luZyBvbiByZWxlYXNlIGJ1aWxkcyAqLworICN1bmRlZiBERUJVRworI2VuZGlmCisKKy8qIFRoZSBtYXhpbXVtIGNvbmN1cnJlbnQgdGhyZWFkcyBpbiBhIHBvb2wgcG9zc2libGUgKi8KKyNpZm5kZWYgTUFYVEhSRUFEU0lOUE9PTAorI2RlZmluZSBNQVhUSFJFQURTSU5QT09MIDE2CisjZW5kaWYKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRjYWNoZXMgd2hpY2ggY2FuIGJlIGFsbG9jYXRlZCAqLworI2lmbmRlZiBUSFJFQURDQUNIRU1BWENBQ0hFUworI2RlZmluZSBUSFJFQURDQUNIRU1BWENBQ0hFUyAyNTYKKyNlbmRpZgorLyogVGhlIG1heGltdW0gc2l6ZSB0byBiZSBhbGxvY2F0ZWQgZnJvbSB0aGUgdGhyZWFkIGNhY2hlICovCisjaWZuZGVmIFRIUkVBRENBQ0hFTUFYCisjZGVmaW5lIFRIUkVBRENBQ0hFTUFYIDgxOTIKKyNlbmRpZgorI2lmIDAKKy8qIFRoZSBudW1iZXIgb2YgY2FjaGUgZW50cmllcyBmb3IgZmluZXIgZ3JhaW5lZCBiaW5zLiBUaGlzIGlzICh0b3BiaXRwb3MoVEhSRUFEQ0FDSEVNQVgpLTQpKjIgKi8KKyNkZWZpbmUgVEhSRUFEQ0FDSEVNQVhCSU5TICgoMTMtNCkqMikKKyNlbHNlCisvKiBUaGUgbnVtYmVyIG9mIGNhY2hlIGVudHJpZXMuIFRoaXMgaXMgKHRvcGJpdHBvcyhUSFJFQURDQUNIRU1BWCktNCkgKi8KKyNkZWZpbmUgVEhSRUFEQ0FDSEVNQVhCSU5TICgxMy00KQorI2VuZGlmCisvKiBQb2ludCBhdCB3aGljaCB0aGUgZnJlZSBzcGFjZSBpbiBhIHRocmVhZCBjYWNoZSBpcyBnYXJiYWdlIGNvbGxlY3RlZCAqLworI2lmbmRlZiBUSFJFQURDQUNIRU1BWEZSRUVTUEFDRQorI2RlZmluZSBUSFJFQURDQUNIRU1BWEZSRUVTUEFDRSAoNTEyKjEwMjQpCisjZW5kaWYKKworCisjaWZkZWYgV0lOMzIKKyAjZGVmaW5lIFRMU1ZBUgkJCURXT1JECisgI2RlZmluZSBUTFNBTExPQyhrKQkoKihrKT1UbHNBbGxvYygpLCBUTFNfT1VUX09GX0lOREVYRVM9PSooaykpCisgI2RlZmluZSBUTFNGUkVFKGspCQkoIVRsc0ZyZWUoaykpCisgI2RlZmluZSBUTFNHRVQoaykJCVRsc0dldFZhbHVlKGspCisgI2RlZmluZSBUTFNTRVQoaywgYSkJKCFUbHNTZXRWYWx1ZShrLCBhKSkKKyAjaWZkZWYgREVCVUcKK3N0YXRpYyBMUFZPSUQgQ2hrZWRUbHNHZXRWYWx1ZShEV09SRCBpZHgpCit7CisJTFBWT0lEIHJldD1UbHNHZXRWYWx1ZShpZHgpOworCWFzc2VydChTX09LPT1HZXRMYXN0RXJyb3IoKSk7CisJcmV0dXJuIHJldDsKK30KKyAgI3VuZGVmIFRMU0dFVAorICAjZGVmaW5lIFRMU0dFVChrKSBDaGtlZFRsc0dldFZhbHVlKGspCisgI2VuZGlmCisjZWxzZQorICNkZWZpbmUgVExTVkFSCQkJcHRocmVhZF9rZXlfdAorICNkZWZpbmUgVExTQUxMT0MoaykJcHRocmVhZF9rZXlfY3JlYXRlKGssIDApCisgI2RlZmluZSBUTFNGUkVFKGspCQlwdGhyZWFkX2tleV9kZWxldGUoaykKKyAjZGVmaW5lIFRMU0dFVChrKQkJcHRocmVhZF9nZXRzcGVjaWZpYyhrKQorICNkZWZpbmUgVExTU0VUKGssIGEpCXB0aHJlYWRfc2V0c3BlY2lmaWMoaywgYSkKKyNlbmRpZgorCisjaWYgMAorLyogT25seSBlbmFibGUgaWYgdGVzdGluZyB3aXRoIHZhbGdyaW5kLiBDYXVzZXMgbWlzb3BlcmF0aW9uICovCisjZGVmaW5lIG1zcGFjZV9tYWxsb2MocCwgcykgbWFsbG9jKHMpCisjZGVmaW5lIG1zcGFjZV9yZWFsbG9jKHAsIG0sIHMpIHJlYWxsb2MobSwgcykKKyNkZWZpbmUgbXNwYWNlX2NhbGxvYyhwLCBuLCBzKSBjYWxsb2MobiwgcykKKyNkZWZpbmUgbXNwYWNlX2ZyZWUocCwgbSkgZnJlZShtKQorI2VuZGlmCisKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjaWYgIWRlZmluZWQoTk9fTkVEX05BTUVTUEFDRSkKK25hbWVzcGFjZSBuZWRhbGxvYyB7CisjZWxzZQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKyNlbmRpZgorCitzaXplX3QgbmVkYmxrc2l6ZSh2b2lkICptZW0pIFRIUk9XU1BFQworeworI2lmIDAKKwkvKiBPbmx5IGVuYWJsZSBpZiB0ZXN0aW5nIHdpdGggdmFsZ3JpbmQuIENhdXNlcyBtaXNvcGVyYXRpb24gKi8KKwlyZXR1cm4gVEhSRUFEQ0FDSEVNQVg7CisjZWxzZQorCWlmKG1lbSkKKwl7CisJCW1jaHVua3B0ciBwPW1lbTJjaHVuayhtZW0pOworCQlhc3NlcnQoY2ludXNlKHApKTsJLyogSWYgdGhpcyBmYWlscywgc29tZW9uZSB0cmllZCB0byBmcmVlIGEgYmxvY2sgdHdpY2UgKi8KKwkJaWYoY2ludXNlKHApKQorCQkJcmV0dXJuIGNodW5rc2l6ZShwKS1vdmVyaGVhZF9mb3IocCk7CisJfQorCXJldHVybiAwOworI2VuZGlmCit9CisKK3ZvaWQgbmVkc2V0dmFsdWUodm9pZCAqdikgVEhST1dTUEVDCQkJCQl7IG5lZHBzZXR2YWx1ZSgwLCB2KTsgfQordm9pZCAqIG5lZG1hbGxvYyhzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCQkJCXsgcmV0dXJuIG5lZHBtYWxsb2MoMCwgc2l6ZSk7IH0KK3ZvaWQgKiBuZWRjYWxsb2Moc2l6ZV90IG5vLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHBjYWxsb2MoMCwgbm8sIHNpemUpOyB9Cit2b2lkICogbmVkcmVhbGxvYyh2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMJeyByZXR1cm4gbmVkcHJlYWxsb2MoMCwgbWVtLCBzaXplKTsgfQordm9pZCAgIG5lZGZyZWUodm9pZCAqbWVtKSBUSFJPV1NQRUMJCQkJCXsgbmVkcGZyZWUoMCwgbWVtKTsgfQordm9pZCAqIG5lZG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgVEhST1dTUEVDIHsgcmV0dXJuIG5lZHBtZW1hbGlnbigwLCBhbGlnbm1lbnQsIGJ5dGVzKTsgfQorI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIG5lZG1hbGxpbmZvKHZvaWQpIFRIUk9XU1BFQwkJCXsgcmV0dXJuIG5lZHBtYWxsaW5mbygwKTsgfQorI2VuZGlmCitpbnQgICAgbmVkbWFsbG9wdChpbnQgcGFybm8sIGludCB2YWx1ZSkgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHBtYWxsb3B0KDAsIHBhcm5vLCB2YWx1ZSk7IH0KK2ludCAgICBuZWRtYWxsb2NfdHJpbShzaXplX3QgcGFkKSBUSFJPV1NQRUMJCQl7IHJldHVybiBuZWRwbWFsbG9jX3RyaW0oMCwgcGFkKTsgfQordm9pZCAgIG5lZG1hbGxvY19zdGF0cygpIFRIUk9XU1BFQwkJCQkJeyBuZWRwbWFsbG9jX3N0YXRzKDApOyB9CitzaXplX3QgbmVkbWFsbG9jX2Zvb3RwcmludCgpIFRIUk9XU1BFQwkJCQl7IHJldHVybiBuZWRwbWFsbG9jX2Zvb3RwcmludCgwKTsgfQordm9pZCAqKm5lZGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3QgZWxlbXNubywgc2l6ZV90IGVsZW1zaXplLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUMJeyByZXR1cm4gbmVkcGluZGVwZW5kZW50X2NhbGxvYygwLCBlbGVtc25vLCBlbGVtc2l6ZSwgY2h1bmtzKTsgfQordm9pZCAqKm5lZGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBlbGVtcywgc2l6ZV90ICpzaXplcywgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHBpbmRlcGVuZGVudF9jb21hbGxvYygwLCBlbGVtcywgc2l6ZXMsIGNodW5rcyk7IH0KKworc3RydWN0IHRocmVhZGNhY2hlYmxrX3Q7Cit0eXBlZGVmIHN0cnVjdCB0aHJlYWRjYWNoZWJsa190IHRocmVhZGNhY2hlYmxrOworc3RydWN0IHRocmVhZGNhY2hlYmxrX3QKK3sJLyogS2VlcCBsZXNzIHRoYW4gMTYgYnl0ZXMgb24gMzIgYml0IHN5c3RlbXMgYW5kIDMyIGJ5dGVzIG9uIDY0IGJpdCBzeXN0ZW1zICovCisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXVuc2lnbmVkIGludCBtYWdpYzsKKyNlbmRpZgorCXVuc2lnbmVkIGludCBsYXN0VXNlZCwgc2l6ZTsKKwl0aHJlYWRjYWNoZWJsayAqbmV4dCwgKnByZXY7Cit9OwordHlwZWRlZiBzdHJ1Y3QgdGhyZWFkY2FjaGVfdAoreworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl1bnNpZ25lZCBpbnQgbWFnaWMxOworI2VuZGlmCisJaW50IG15bXNwYWNlOwkJCQkJCS8qIExhc3QgbXNwYWNlIGVudHJ5IHRoaXMgdGhyZWFkIHVzZWQgKi8KKwlsb25nIHRocmVhZGlkOworCXVuc2lnbmVkIGludCBtYWxsb2NzLCBmcmVlcywgc3VjY2Vzc2VzOworCXNpemVfdCBmcmVlSW5DYWNoZTsJCQkJCS8qIEhvdyBtdWNoIGZyZWUgc3BhY2UgaXMgc3RvcmVkIGluIHRoaXMgY2FjaGUgKi8KKwl0aHJlYWRjYWNoZWJsayAqYmluc1soVEhSRUFEQ0FDSEVNQVhCSU5TKzEpKjJdOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl1bnNpZ25lZCBpbnQgbWFnaWMyOworI2VuZGlmCit9IHRocmVhZGNhY2hlOworc3RydWN0IG5lZHBvb2xfdAoreworCU1MT0NLX1QgbXV0ZXg7CisJdm9pZCAqdXNlcnZhbHVlOworCWludCB0aHJlYWRzOwkJCQkJCS8qIE1heCBlbnRyaWVzIGluIG0gdG8gdXNlICovCisJdGhyZWFkY2FjaGUgKmNhY2hlc1tUSFJFQURDQUNIRU1BWENBQ0hFU107CisJVExTVkFSIG15Y2FjaGU7CQkJCQkJLyogVGhyZWFkIGNhY2hlIGZvciB0aGlzIHRocmVhZC4gMCBmb3IgdW5zZXQsIG5lZ2F0aXZlIGZvciB1c2UgbXNwYWNlLTEgZGlyZWN0bHksIG90aGVyd2lzZSBpcyBjYWNoZS0xICovCisJbXN0YXRlIG1bTUFYVEhSRUFEU0lOUE9PTCsxXTsJCS8qIG1zcGFjZSBlbnRyaWVzIGZvciB0aGlzIHBvb2wgKi8KK307CitzdGF0aWMgbmVkcG9vbCBzeXNwb29sOworCitzdGF0aWMgRk9SQ0VJTkxJTkUgdW5zaWduZWQgaW50IHNpemUyYmluaWR4KHNpemVfdCBfc2l6ZSkgVEhST1dTUEVDCit7CS8qIDg9MTAwMAkxNj0xMDAwMAkyMD0xMDEwMAkyND0xMTAwMAkzMj0xMDAwMDAJNDg9MTEwMDAwCTQwOTY9MTAwMDAwMDAwMDAwMCAqLworCXVuc2lnbmVkIGludCB0b3BiaXQsIHNpemU9KHVuc2lnbmVkIGludCkoX3NpemU+PjQpOworCS8qIDE2PTEJCTIwPTEJMjQ9MQkzMj0xMAk0OD0xMQk2ND0xMDAJOTY9MTEwCTEyOD0xMDAwCTQwOTY9MTAwMDAwMDAwICovCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorCXRvcGJpdCA9IHNpemVvZihzaXplKSpfX0NIQVJfQklUX18gLSAxIC0gX19idWlsdGluX2NseihzaXplKTsKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwCisJeworCSAgICB1bnNpZ25lZCBsb25nIGJzclRvcEJpdDsKKworCSAgICBfQml0U2NhblJldmVyc2UoJmJzclRvcEJpdCwgc2l6ZSk7CisKKwkgICAgdG9wYml0ID0gYnNyVG9wQml0OworCX0KKyNlbHNlCisjaWYgMAorCXVuaW9uIHsKKwkJdW5zaWduZWQgYXNJbnRbMl07CisJCWRvdWJsZSBhc0RvdWJsZTsKKwl9OworCWludCBuOworCisJYXNEb3VibGUgPSAoZG91YmxlKXNpemUgKyAwLjU7CisJdG9wYml0ID0gKGFzSW50WyFGT1hfQklHRU5ESUFOXSA+PiAyMCkgLSAxMDIzOworI2Vsc2UKKwl7CisJCXVuc2lnbmVkIGludCB4PXNpemU7CisJCXggPSB4IHwgKHggPj4gMSk7CisJCXggPSB4IHwgKHggPj4gMik7CisJCXggPSB4IHwgKHggPj4gNCk7CisJCXggPSB4IHwgKHggPj4gOCk7CisJCXggPSB4IHwgKHggPj4xNik7CisJCXggPSB+eDsKKwkJeCA9IHggLSAoKHggPj4gMSkgJiAweDU1NTU1NTU1KTsKKwkJeCA9ICh4ICYgMHgzMzMzMzMzMykgKyAoKHggPj4gMikgJiAweDMzMzMzMzMzKTsKKwkJeCA9ICh4ICsgKHggPj4gNCkpICYgMHgwRjBGMEYwRjsKKwkJeCA9IHggKyAoeCA8PCA4KTsKKwkJeCA9IHggKyAoeCA8PCAxNik7CisJCXRvcGJpdD0zMSAtICh4ID4+IDI0KTsKKwl9CisjZW5kaWYKKyNlbmRpZgorCXJldHVybiB0b3BiaXQ7Cit9CisKKworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKK3N0YXRpYyB2b2lkIHRjc2FuaXR5Y2hlY2sodGhyZWFkY2FjaGVibGsgKipwdHIpIFRIUk9XU1BFQworeworCWFzc2VydCgocHRyWzBdICYmIHB0clsxXSkgfHwgKCFwdHJbMF0gJiYgIXB0clsxXSkpOworCWlmKHB0clswXSAmJiBwdHJbMV0pCisJeworCQlhc3NlcnQobmVkYmxrc2l6ZShwdHJbMF0pPj1zaXplb2YodGhyZWFkY2FjaGVibGspKTsKKwkJYXNzZXJ0KG5lZGJsa3NpemUocHRyWzFdKT49c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSk7CisJCWFzc2VydCgqKHVuc2lnbmVkIGludCAqKSAiTkVETiI9PXB0clswXS0+bWFnaWMpOworCQlhc3NlcnQoKih1bnNpZ25lZCBpbnQgKikgIk5FRE4iPT1wdHJbMV0tPm1hZ2ljKTsKKwkJYXNzZXJ0KCFwdHJbMF0tPnByZXYpOworCQlhc3NlcnQoIXB0clsxXS0+bmV4dCk7CisJCWlmKHB0clswXT09cHRyWzFdKQorCQl7CisJCQlhc3NlcnQoIXB0clswXS0+bmV4dCk7CisJCQlhc3NlcnQoIXB0clsxXS0+cHJldik7CisJCX0KKwl9Cit9CitzdGF0aWMgdm9pZCB0Y2Z1bGxzYW5pdHljaGVjayh0aHJlYWRjYWNoZSAqdGMpIFRIUk9XU1BFQworeworCXRocmVhZGNhY2hlYmxrICoqdGNicHRyPXRjLT5iaW5zOworCWludCBuOworCWZvcihuPTA7IG48PVRIUkVBRENBQ0hFTUFYQklOUzsgbisrLCB0Y2JwdHIrPTIpCisJeworCQl0aHJlYWRjYWNoZWJsayAqYiwgKm9iPTA7CisJCXRjc2FuaXR5Y2hlY2sodGNicHRyKTsKKwkJZm9yKGI9dGNicHRyWzBdOyBiOyBvYj1iLCBiPWItPm5leHQpCisJCXsKKwkJCWFzc2VydCgqKHVuc2lnbmVkIGludCAqKSAiTkVETiI9PWItPm1hZ2ljKTsKKwkJCWFzc2VydCghb2IgfHwgb2ItPm5leHQ9PWIpOworCQkJYXNzZXJ0KCFvYiB8fCBiLT5wcmV2PT1vYik7CisJCX0KKwl9Cit9CisjZW5kaWYKKworc3RhdGljIE5PSU5MSU5FIHZvaWQgUmVtb3ZlQ2FjaGVFbnRyaWVzKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgdW5zaWduZWQgaW50IGFnZSkgVEhST1dTUEVDCit7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorCWlmKHRjLT5mcmVlSW5DYWNoZSkKKwl7CisJCXRocmVhZGNhY2hlYmxrICoqdGNicHRyPXRjLT5iaW5zOworCQlpbnQgbjsKKwkJZm9yKG49MDsgbjw9VEhSRUFEQ0FDSEVNQVhCSU5TOyBuKyssIHRjYnB0cis9MikKKwkJeworCQkJdGhyZWFkY2FjaGVibGsgKip0Y2I9dGNicHRyKzE7CQkvKiBjb21lIGZyb20gb2xkZXN0IGVuZCBvZiBsaXN0ICovCisJCQkvKnRjc2FuaXR5Y2hlY2sodGNicHRyKTsqLworCQkJZm9yKDsgKnRjYiAmJiB0Yy0+ZnJlZXMtKCp0Y2IpLT5sYXN0VXNlZD49YWdlOyApCisJCQl7CisJCQkJdGhyZWFkY2FjaGVibGsgKmY9KnRjYjsKKwkJCQlzaXplX3QgYmxrc2l6ZT1mLT5zaXplOyAvKm5lZGJsa3NpemUoZik7Ki8KKwkJCQlhc3NlcnQoYmxrc2l6ZTw9bmVkYmxrc2l6ZShmKSk7CisJCQkJYXNzZXJ0KGJsa3NpemUpOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwkJCQlhc3NlcnQoKih1bnNpZ25lZCBpbnQgKikgIk5FRE4iPT0oKnRjYiktPm1hZ2ljKTsKKyNlbmRpZgorCQkJCSp0Y2I9KCp0Y2IpLT5wcmV2OworCQkJCWlmKCp0Y2IpCisJCQkJCSgqdGNiKS0+bmV4dD0wOworCQkJCWVsc2UKKwkJCQkJKnRjYnB0cj0wOworCQkJCXRjLT5mcmVlSW5DYWNoZS09Ymxrc2l6ZTsKKwkJCQlhc3NlcnQoKGxvbmcpIHRjLT5mcmVlSW5DYWNoZT49MCk7CisJCQkJbXNwYWNlX2ZyZWUoMCwgZik7CisJCQkJLyp0Y3Nhbml0eWNoZWNrKHRjYnB0cik7Ki8KKwkJCX0KKwkJfQorCX0KKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNmdWxsc2FuaXR5Y2hlY2sodGMpOworI2VuZGlmCit9CitzdGF0aWMgdm9pZCBEZXN0cm95Q2FjaGVzKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCWlmKHAtPmNhY2hlcykKKwl7CisJCXRocmVhZGNhY2hlICp0YzsKKwkJaW50IG47CisJCWZvcihuPTA7IG48VEhSRUFEQ0FDSEVNQVhDQUNIRVM7IG4rKykKKwkJeworCQkJaWYoKHRjPXAtPmNhY2hlc1tuXSkpCisJCQl7CisJCQkJdGMtPmZyZWVzKys7CisJCQkJUmVtb3ZlQ2FjaGVFbnRyaWVzKHAsIHRjLCAwKTsKKwkJCQlhc3NlcnQoIXRjLT5mcmVlSW5DYWNoZSk7CisJCQkJdGMtPm15bXNwYWNlPS0xOworCQkJCXRjLT50aHJlYWRpZD0wOworCQkJCW1zcGFjZV9mcmVlKDAsIHRjKTsKKwkJCQlwLT5jYWNoZXNbbl09MDsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIE5PSU5MSU5FIHRocmVhZGNhY2hlICpBbGxvY0NhY2hlKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCXRocmVhZGNhY2hlICp0Yz0wOworCWludCBuLCBlbmQ7CisJQUNRVUlSRV9MT0NLKCZwLT5tdXRleCk7CisJZm9yKG49MDsgbjxUSFJFQURDQUNIRU1BWENBQ0hFUyAmJiBwLT5jYWNoZXNbbl07IG4rKyk7CisJaWYoVEhSRUFEQ0FDSEVNQVhDQUNIRVM9PW4pCisJewkvKiBMaXN0IGV4aGF1c3RlZCwgc28gZGlzYWJsZSBmb3IgdGhpcyB0aHJlYWQgKi8KKwkJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKwl0Yz1wLT5jYWNoZXNbbl09KHRocmVhZGNhY2hlICopIG1zcGFjZV9jYWxsb2MocC0+bVswXSwgMSwgc2l6ZW9mKHRocmVhZGNhY2hlKSk7CisJaWYoIXRjKQorCXsKKwkJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGMtPm1hZ2ljMT0qKHVuc2lnbmVkIGludCAqKSJORURNQUxDMSI7CisJdGMtPm1hZ2ljMj0qKHVuc2lnbmVkIGludCAqKSJORURNQUxDMiI7CisjZW5kaWYKKwl0Yy0+dGhyZWFkaWQ9KGxvbmcpKHNpemVfdClDVVJSRU5UX1RIUkVBRDsKKwlmb3IoZW5kPTA7IHAtPm1bZW5kXTsgZW5kKyspOworCXRjLT5teW1zcGFjZT10Yy0+dGhyZWFkaWQgJSBlbmQ7CisJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJaWYoVExTU0VUKHAtPm15Y2FjaGUsICh2b2lkICopKHNpemVfdCkobisxKSkpIGFib3J0KCk7CisJcmV0dXJuIHRjOworfQorCitzdGF0aWMgdm9pZCAqdGhyZWFkY2FjaGVfbWFsbG9jKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0Yywgc2l6ZV90ICpzaXplKSBUSFJPV1NQRUMKK3sKKwl2b2lkICpyZXQ9MDsKKwl1bnNpZ25lZCBpbnQgYmVzdHNpemU7CisJdW5zaWduZWQgaW50IGlkeD1zaXplMmJpbmlkeCgqc2l6ZSk7CisJc2l6ZV90IGJsa3NpemU9MDsKKwl0aHJlYWRjYWNoZWJsayAqYmxrLCAqKmJpbnNwdHI7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorCS8qIENhbGN1bGF0ZSBiZXN0IGZpdCBiaW4gc2l6ZSAqLworCWJlc3RzaXplPTE8PChpZHgrNCk7CisjaWYgMAorCS8qIEZpbmVyIGdyYWluZWQgYmluIGZpdCAqLworCWlkeDw8PTE7CisJaWYoKnNpemU+YmVzdHNpemUpCisJeworCQlpZHgrKzsKKwkJYmVzdHNpemUrPWJlc3RzaXplPj4xOworCX0KKwlpZigqc2l6ZT5iZXN0c2l6ZSkKKwl7CisJCWlkeCsrOworCQliZXN0c2l6ZT0xPDwoNCsoaWR4Pj4xKSk7CisJfQorI2Vsc2UKKwlpZigqc2l6ZT5iZXN0c2l6ZSkKKwl7CisJCWlkeCsrOworCQliZXN0c2l6ZTw8PTE7CisJfQorI2VuZGlmCisJYXNzZXJ0KGJlc3RzaXplPj0qc2l6ZSk7CisJaWYoKnNpemU8YmVzdHNpemUpICpzaXplPWJlc3RzaXplOworCWFzc2VydCgqc2l6ZTw9VEhSRUFEQ0FDSEVNQVgpOworCWFzc2VydChpZHg8PVRIUkVBRENBQ0hFTUFYQklOUyk7CisJYmluc3B0cj0mdGMtPmJpbnNbaWR4KjJdOworCS8qIFRyeSB0byBtYXRjaCBjbG9zZSwgYnV0IG1vdmUgdXAgYSBiaW4gaWYgbmVjZXNzYXJ5ICovCisJYmxrPSpiaW5zcHRyOworCWlmKCFibGsgfHwgYmxrLT5zaXplPCpzaXplKQorCXsJLyogQnVtcCBpdCB1cCBhIGJpbiAqLworCQlpZihpZHg8VEhSRUFEQ0FDSEVNQVhCSU5TKQorCQl7CisJCQlpZHgrKzsKKwkJCWJpbnNwdHIrPTI7CisJCQlibGs9KmJpbnNwdHI7CisJCX0KKwl9CisJaWYoYmxrKQorCXsKKwkJYmxrc2l6ZT1ibGstPnNpemU7IC8qbmVkYmxrc2l6ZShibGspOyovCisJCWFzc2VydChuZWRibGtzaXplKGJsayk+PWJsa3NpemUpOworCQlhc3NlcnQoYmxrc2l6ZT49KnNpemUpOworCQlpZihibGstPm5leHQpCisJCQlibGstPm5leHQtPnByZXY9MDsKKwkJKmJpbnNwdHI9YmxrLT5uZXh0OworCQlpZighKmJpbnNwdHIpCisJCQliaW5zcHRyWzFdPTA7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCQlibGstPm1hZ2ljPTA7CisjZW5kaWYKKwkJYXNzZXJ0KGJpbnNwdHJbMF0hPWJsayAmJiBiaW5zcHRyWzFdIT1ibGspOworCQlhc3NlcnQobmVkYmxrc2l6ZShibGspPj1zaXplb2YodGhyZWFkY2FjaGVibGspICYmIG5lZGJsa3NpemUoYmxrKTw9VEhSRUFEQ0FDSEVNQVgrQ0hVTktfT1ZFUkhFQUQpOworCQkvKnByaW50ZigibWFsbG9jOiAlcCwgJXAsICVwLCAlbHVcbiIsIHAsIHRjLCBibGssIChsb25nKSBzaXplKTsqLworCQlyZXQ9KHZvaWQgKikgYmxrOworCX0KKwkrK3RjLT5tYWxsb2NzOworCWlmKHJldCkKKwl7CisJCWFzc2VydChibGtzaXplPj0qc2l6ZSk7CisJCSsrdGMtPnN1Y2Nlc3NlczsKKwkJdGMtPmZyZWVJbkNhY2hlLT1ibGtzaXplOworCQlhc3NlcnQoKGxvbmcpIHRjLT5mcmVlSW5DYWNoZT49MCk7CisJfQorI2lmIGRlZmluZWQoREVCVUcpICYmIDAKKwlpZighKHRjLT5tYWxsb2NzICYgMHhmZmYpKQorCXsKKwkJcHJpbnRmKCIqKiogdGhyZWFkY2FjaGU9JXUsIG1hbGxvY3M9JXUgKCVmKSwgZnJlZT0ldSAoJWYpLCBmcmVlSW5DYWNoZT0ldVxuIiwgKHVuc2lnbmVkIGludCkgdGMtPnRocmVhZGlkLCB0Yy0+bWFsbG9jcywKKwkJCShmbG9hdCkgdGMtPnN1Y2Nlc3Nlcy90Yy0+bWFsbG9jcywgdGMtPmZyZWVzLCAoZmxvYXQpIHRjLT5zdWNjZXNzZXMvdGMtPmZyZWVzLCAodW5zaWduZWQgaW50KSB0Yy0+ZnJlZUluQ2FjaGUpOworCX0KKyNlbmRpZgorI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIE5PSU5MSU5FIHZvaWQgUmVsZWFzZUZyZWVJbkNhY2hlKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgaW50IG15bXNwYWNlKSBUSFJPV1NQRUMKK3sKKwl1bnNpZ25lZCBpbnQgYWdlPVRIUkVBRENBQ0hFTUFYRlJFRVNQQUNFLzgxOTI7CisJLypBQ1FVSVJFX0xPQ0soJnAtPm1bbXltc3BhY2VdLT5tdXRleCk7Ki8KKwl3aGlsZShhZ2UgJiYgdGMtPmZyZWVJbkNhY2hlPj1USFJFQURDQUNIRU1BWEZSRUVTUEFDRSkKKwl7CisJCVJlbW92ZUNhY2hlRW50cmllcyhwLCB0YywgYWdlKTsKKwkJLypwcmludGYoIioqKiBSZW1vdmluZyBjYWNoZSBlbnRyaWVzIG9sZGVyIHRoYW4gJXUgKCV1KVxuIiwgYWdlLCAodW5zaWduZWQgaW50KSB0Yy0+ZnJlZUluQ2FjaGUpOyovCisJCWFnZT4+PTE7CisJfQorCS8qUkVMRUFTRV9MT0NLKCZwLT5tW215bXNwYWNlXS0+bXV0ZXgpOyovCit9CitzdGF0aWMgdm9pZCB0aHJlYWRjYWNoZV9mcmVlKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgaW50IG15bXNwYWNlLCB2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sKKwl1bnNpZ25lZCBpbnQgYmVzdHNpemU7CisJdW5zaWduZWQgaW50IGlkeD1zaXplMmJpbmlkeChzaXplKTsKKwl0aHJlYWRjYWNoZWJsayAqKmJpbnNwdHIsICp0Y2s9KHRocmVhZGNhY2hlYmxrICopIG1lbTsKKwlhc3NlcnQoc2l6ZT49c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSAmJiBzaXplPD1USFJFQURDQUNIRU1BWCtDSFVOS19PVkVSSEVBRCk7CisjaWZkZWYgREVCVUcKKwl7CS8qIE1ha2Ugc3VyZSB0aGlzIGlzIGEgdmFsaWQgbWVtb3J5IGJsb2NrICovCisJICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhtZW0pOworCSAgICBtc3RhdGUgZm0gPSBnZXRfbXN0YXRlX2ZvcihwKTsKKwkgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKwkgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCX0KKyNlbmRpZgorI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKKwkvKiBDYWxjdWxhdGUgYmVzdCBmaXQgYmluIHNpemUgKi8KKwliZXN0c2l6ZT0xPDwoaWR4KzQpOworI2lmIDAKKwkvKiBGaW5lciBncmFpbmVkIGJpbiBmaXQgKi8KKwlpZHg8PD0xOworCWlmKHNpemU+YmVzdHNpemUpCisJeworCQl1bnNpZ25lZCBpbnQgYmlnZ2VyYmVzdHNpemU9YmVzdHNpemUrYmVzdHNpemU8PDE7CisJCWlmKHNpemU+PWJpZ2dlcmJlc3RzaXplKQorCQl7CisJCQlpZHgrKzsKKwkJCWJlc3RzaXplPWJpZ2dlcmJlc3RzaXplOworCQl9CisJfQorI2VuZGlmCisJaWYoYmVzdHNpemUhPXNpemUpCS8qIGRsbWFsbG9jIGNhbiByb3VuZCB1cCwgc28gd2Ugcm91bmQgZG93biB0byBwcmVzZXJ2ZSBpbmRleGluZyAqLworCQlzaXplPWJlc3RzaXplOworCWJpbnNwdHI9JnRjLT5iaW5zW2lkeCoyXTsKKwlhc3NlcnQoaWR4PD1USFJFQURDQUNIRU1BWEJJTlMpOworCWlmKHRjaz09KmJpbnNwdHIpCisJeworCQlmcHJpbnRmKHN0ZGVyciwgIkF0dGVtcHQgdG8gZnJlZSBhbHJlYWR5IGZyZWVkIG1lbW9yeSBibG9jayAlcCAtIGFib3J0aW5nIVxuIiwgdGNrKTsKKwkJYWJvcnQoKTsKKwl9CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjay0+bWFnaWM9Kih1bnNpZ25lZCBpbnQgKikgIk5FRE4iOworI2VuZGlmCisJdGNrLT5sYXN0VXNlZD0rK3RjLT5mcmVlczsKKwl0Y2stPnNpemU9KHVuc2lnbmVkIGludCkgc2l6ZTsKKwl0Y2stPm5leHQ9KmJpbnNwdHI7CisJdGNrLT5wcmV2PTA7CisJaWYodGNrLT5uZXh0KQorCQl0Y2stPm5leHQtPnByZXY9dGNrOworCWVsc2UKKwkJYmluc3B0clsxXT10Y2s7CisJYXNzZXJ0KCEqYmluc3B0ciB8fCAoKmJpbnNwdHIpLT5zaXplPT10Y2stPnNpemUpOworCSpiaW5zcHRyPXRjazsKKwlhc3NlcnQodGNrPT10Yy0+Ymluc1tpZHgqMl0pOworCWFzc2VydCh0Yy0+Ymluc1tpZHgqMisxXT09dGNrIHx8IGJpbnNwdHJbMF0tPm5leHQtPnByZXY9PXRjayk7CisJLypwcmludGYoImZyZWU6ICVwLCAlcCwgJXAsICVsdVxuIiwgcCwgdGMsIG1lbSwgKGxvbmcpIHNpemUpOyovCisJdGMtPmZyZWVJbkNhY2hlKz1zaXplOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKKyNpZiAxCisJaWYodGMtPmZyZWVJbkNhY2hlPj1USFJFQURDQUNIRU1BWEZSRUVTUEFDRSkKKwkJUmVsZWFzZUZyZWVJbkNhY2hlKHAsIHRjLCBteW1zcGFjZSk7CisjZW5kaWYKK30KKworCisKKworc3RhdGljIE5PSU5MSU5FIGludCBJbml0UG9vbChuZWRwb29sICpwLCBzaXplX3QgY2FwYWNpdHksIGludCB0aHJlYWRzKSBUSFJPV1NQRUMKK3sJLyogdGhyZWFkcyBpcyAtMSBmb3Igc3lzdGVtIHBvb2wgKi8KKwllbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKwlBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworCWlmKHAtPnRocmVhZHMpIGdvdG8gZG9uZTsKKwlpZihJTklUSUFMX0xPQ0soJnAtPm11dGV4KSkgZ290byBlcnI7CisJaWYoVExTQUxMT0MoJnAtPm15Y2FjaGUpKSBnb3RvIGVycjsKKwlpZighKHAtPm1bMF09KG1zdGF0ZSkgY3JlYXRlX21zcGFjZShjYXBhY2l0eSwgMSkpKSBnb3RvIGVycjsKKwlwLT5tWzBdLT5leHRwPXA7CisJcC0+dGhyZWFkcz0odGhyZWFkczwxIHx8IHRocmVhZHM+TUFYVEhSRUFEU0lOUE9PTCkgPyBNQVhUSFJFQURTSU5QT09MIDogdGhyZWFkczsKK2RvbmU6CisJUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKwlyZXR1cm4gMTsKK2VycjoKKwlpZih0aHJlYWRzPDApCisJCWFib3J0KCk7CQkJLyogSWYgeW91IGNhbid0IGFsbG9jYXRlIGZvciBzeXN0ZW0gcG9vbCwgd2UncmUgc2NyZXdlZCAqLworCURlc3Ryb3lDYWNoZXMocCk7CisJaWYocC0+bVswXSkKKwl7CisJCWRlc3Ryb3lfbXNwYWNlKHAtPm1bMF0pOworCQlwLT5tWzBdPTA7CisJfQorCWlmKHAtPm15Y2FjaGUpCisJeworCQlpZihUTFNGUkVFKHAtPm15Y2FjaGUpKSBhYm9ydCgpOworCQlwLT5teWNhY2hlPTA7CisJfQorCVJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgTk9JTkxJTkUgbXN0YXRlIEZpbmRNU3BhY2UobmVkcG9vbCAqcCwgdGhyZWFkY2FjaGUgKnRjLCBpbnQgKmxhc3RVc2VkLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CS8qIEdldHMgY2FsbGVkIHdoZW4gdGhyZWFkJ3MgbGFzdCB1c2VkIG1zcGFjZSBpcyBpbiB1c2UuIFRoZSBzdHJhdGVneQorCWlzIHRvIHJ1biB0aHJvdWdoIHRoZSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgbXNwYWNlcyBsb29raW5nIGZvciBhbgorCXVubG9ja2VkIG9uZSBhbmQgaWYgd2UgZmFpbCwgd2UgY3JlYXRlIGEgbmV3IG9uZSBzbyBsb25nIGFzIHdlIGRvbid0CisJZXhjZWVkIHAtPnRocmVhZHMgKi8KKwlpbnQgbiwgZW5kOworCWZvcihuPWVuZD0qbGFzdFVzZWQrMTsgcC0+bVtuXTsgZW5kPSsrbikKKwl7CisJCWlmKFRSWV9MT0NLKCZwLT5tW25dLT5tdXRleCkpIGdvdG8gZm91bmQ7CisJfQorCWZvcihuPTA7IG48Kmxhc3RVc2VkICYmIHAtPm1bbl07IG4rKykKKwl7CisJCWlmKFRSWV9MT0NLKCZwLT5tW25dLT5tdXRleCkpIGdvdG8gZm91bmQ7CisJfQorCWlmKGVuZDxwLT50aHJlYWRzKQorCXsKKwkJbXN0YXRlIHRlbXA7CisJCWlmKCEodGVtcD0obXN0YXRlKSBjcmVhdGVfbXNwYWNlKHNpemUsIDEpKSkKKwkJCWdvdG8gYmFkZXhpdDsKKwkJLyogTm93IHdlJ3JlIHJlYWR5IHRvIG1vZGlmeSB0aGUgbGlzdHMsIHdlIGxvY2sgKi8KKwkJQUNRVUlSRV9MT0NLKCZwLT5tdXRleCk7CisJCXdoaWxlKHAtPm1bZW5kXSAmJiBlbmQ8cC0+dGhyZWFkcykKKwkJCWVuZCsrOworCQlpZihlbmQ+PXAtPnRocmVhZHMpCisJCXsJLyogRHJhdCwgbXVzdCBkZXN0cm95IGl0IG5vdyAqLworCQkJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJCQlkZXN0cm95X21zcGFjZSgobXNwYWNlKSB0ZW1wKTsKKwkJCWdvdG8gYmFkZXhpdDsKKwkJfQorCQkvKiBXZSByZWFsbHkgd2FudCB0byBtYWtlIHN1cmUgdGhpcyBnb2VzIGludG8gbWVtb3J5IG5vdyBidXQgd2UKKwkJaGF2ZSB0byBiZSBjYXJlZnVsIG9mIGJyZWFraW5nIGFsaWFzaW5nIHJ1bGVzLCBzbyB3cml0ZSBpdCB0d2ljZSAqLworCQkqKCh2b2xhdGlsZSBzdHJ1Y3QgbWFsbG9jX3N0YXRlICoqKSAmcC0+bVtlbmRdKT1wLT5tW2VuZF09dGVtcDsKKwkJQUNRVUlSRV9MT0NLKCZwLT5tW2VuZF0tPm11dGV4KTsKKwkJLypwcmludGYoIkNyZWF0ZWQgbXNwYWNlIGlkeCAlZFxuIiwgZW5kKTsqLworCQlSRUxFQVNFX0xPQ0soJnAtPm11dGV4KTsKKwkJbj1lbmQ7CisJCWdvdG8gZm91bmQ7CisJfQorCS8qIExldCBpdCBsb2NrIG9uIHRoZSBsYXN0IG9uZSBpdCB1c2VkICovCitiYWRleGl0OgorCUFDUVVJUkVfTE9DSygmcC0+bVsqbGFzdFVzZWRdLT5tdXRleCk7CisJcmV0dXJuIHAtPm1bKmxhc3RVc2VkXTsKK2ZvdW5kOgorCSpsYXN0VXNlZD1uOworCWlmKHRjKQorCQl0Yy0+bXltc3BhY2U9bjsKKwllbHNlCisJeworCQlpZihUTFNTRVQocC0+bXljYWNoZSwgKHZvaWQgKikoc2l6ZV90KSgtKG4rMSkpKSkgYWJvcnQoKTsKKwl9CisJcmV0dXJuIHAtPm1bbl07Cit9CisKK25lZHBvb2wgKm5lZGNyZWF0ZXBvb2woc2l6ZV90IGNhcGFjaXR5LCBpbnQgdGhyZWFkcykgVEhST1dTUEVDCit7CisJbmVkcG9vbCAqcmV0OworCWlmKCEocmV0PShuZWRwb29sICopIG5lZHBjYWxsb2MoMCwgMSwgc2l6ZW9mKG5lZHBvb2wpKSkpIHJldHVybiAwOworCWlmKCFJbml0UG9vbChyZXQsIGNhcGFjaXR5LCB0aHJlYWRzKSkKKwl7CisJCW5lZHBmcmVlKDAsIHJldCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCBuZWRkZXN0cm95cG9vbChuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlpbnQgbjsKKwlBQ1FVSVJFX0xPQ0soJnAtPm11dGV4KTsKKwlEZXN0cm95Q2FjaGVzKHApOworCWZvcihuPTA7IHAtPm1bbl07IG4rKykKKwl7CisJCWRlc3Ryb3lfbXNwYWNlKHAtPm1bbl0pOworCQlwLT5tW25dPTA7CisJfQorCVJFTEVBU0VfTE9DSygmcC0+bXV0ZXgpOworCWlmKFRMU0ZSRUUocC0+bXljYWNoZSkpIGFib3J0KCk7CisJbmVkcGZyZWUoMCwgcCk7Cit9CisKK3ZvaWQgbmVkcHNldHZhbHVlKG5lZHBvb2wgKnAsIHZvaWQgKnYpIFRIUk9XU1BFQworeworCWlmKCFwKSB7IHA9JnN5c3Bvb2w7IGlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7IH0KKwlwLT51c2VydmFsdWU9djsKK30KK3ZvaWQgKm5lZGdldHZhbHVlKG5lZHBvb2wgKipwLCB2b2lkICptZW0pIFRIUk9XU1BFQworeworCW5lZHBvb2wgKm5wPTA7CisJbWNodW5rcHRyIG1jcD1tZW0yY2h1bmsobWVtKTsKKwltc3RhdGUgZm07CisJaWYoIShpc19hbGlnbmVkKGNodW5rMm1lbShtY3ApKSkgJiYgbWNwLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSByZXR1cm4gMDsKKwlpZighY2ludXNlKG1jcCkpIHJldHVybiAwOworCWlmKCFuZXh0X3BpbnVzZShtY3ApKSByZXR1cm4gMDsKKwlpZighaXNfbW1hcHBlZChtY3ApICYmICFwaW51c2UobWNwKSkKKwl7CisJCWlmKG5leHRfY2h1bmsocHJldl9jaHVuayhtY3ApKSE9bWNwKSByZXR1cm4gMDsKKwl9CisJZm09Z2V0X21zdGF0ZV9mb3IobWNwKTsKKwlpZighb2tfbWFnaWMoZm0pKSByZXR1cm4gMDsKKwlpZighb2tfYWRkcmVzcyhmbSwgbWNwKSkgcmV0dXJuIDA7CisJaWYoIWZtLT5leHRwKSByZXR1cm4gMDsKKwlucD0obmVkcG9vbCAqKSBmbS0+ZXh0cDsKKwlpZihwKSAqcD1ucDsKKwlyZXR1cm4gbnAtPnVzZXJ2YWx1ZTsKK30KKwordm9pZCBuZWRkaXNhYmxldGhyZWFkY2FjaGUobmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJaW50IG15Y2FjaGU7CisJaWYoIXApCisJeworCQlwPSZzeXNwb29sOworCQlpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOworCX0KKwlteWNhY2hlPShpbnQpKHNpemVfdCkgVExTR0VUKHAtPm15Y2FjaGUpOworCWlmKCFteWNhY2hlKQorCXsJLyogU2V0IHRvIG1zcGFjZSAwICovCisJCWlmKFRMU1NFVChwLT5teWNhY2hlLCAodm9pZCAqKS0xKSkgYWJvcnQoKTsKKwl9CisJZWxzZSBpZihteWNhY2hlPjApCisJewkvKiBTZXQgdG8gbGFzdCB1c2VkIG1zcGFjZSAqLworCQl0aHJlYWRjYWNoZSAqdGM9cC0+Y2FjaGVzW215Y2FjaGUtMV07CisjaWYgZGVmaW5lZChERUJVRykKKwkJcHJpbnRmKCJUaHJlYWRjYWNoZSB1dGlsaXNhdGlvbjogJWxmJSUgaW4gY2FjaGUgd2l0aCAlbGYlJSBsb3N0IHRvIG90aGVyIHRocmVhZHNcbiIsCisJCQkxMDAuMCp0Yy0+c3VjY2Vzc2VzL3RjLT5tYWxsb2NzLCAxMDAuMCooKGRvdWJsZSkgdGMtPm1hbGxvY3MtdGMtPmZyZWVzKS90Yy0+bWFsbG9jcyk7CisjZW5kaWYKKwkJaWYoVExTU0VUKHAtPm15Y2FjaGUsICh2b2lkICopKHNpemVfdCkoLXRjLT5teW1zcGFjZSkpKSBhYm9ydCgpOworCQl0Yy0+ZnJlZXMrKzsKKwkJUmVtb3ZlQ2FjaGVFbnRyaWVzKHAsIHRjLCAwKTsKKwkJYXNzZXJ0KCF0Yy0+ZnJlZUluQ2FjaGUpOworCQl0Yy0+bXltc3BhY2U9LTE7CisJCXRjLT50aHJlYWRpZD0wOworCQltc3BhY2VfZnJlZSgwLCBwLT5jYWNoZXNbbXljYWNoZS0xXSk7CisJCXAtPmNhY2hlc1tteWNhY2hlLTFdPTA7CisJfQorfQorCisjZGVmaW5lIEdFVE1TUEFDRShtLHAsdGMsbXMscyxhY3Rpb24pICAgICAgICAgICBcCisgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbXN0YXRlIG0gPSBHZXRNU3BhY2UoKHApLCh0YyksKG1zKSwocykpOyAgICBcCisgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUkVMRUFTRV9MT0NLKCZtLT5tdXRleCk7ICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKK3N0YXRpYyBGT1JDRUlOTElORSBtc3RhdGUgR2V0TVNwYWNlKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgaW50IG15bXNwYWNlLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CS8qIFJldHVybnMgYSBsb2NrZWQgYW5kIHJlYWR5IGZvciB1c2UgbXNwYWNlICovCisJbXN0YXRlIG09cC0+bVtteW1zcGFjZV07CisJYXNzZXJ0KG0pOworCWlmKCFUUllfTE9DSygmcC0+bVtteW1zcGFjZV0tPm11dGV4KSkgbT1GaW5kTVNwYWNlKHAsIHRjLCAmbXltc3BhY2UsIHNpemUpO1wKKwkvKmFzc2VydChJU19MT0NLRUQoJnAtPm1bbXltc3BhY2VdLT5tdXRleCkpOyovCisJcmV0dXJuIG07Cit9CitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCBHZXRUaHJlYWRDYWNoZShuZWRwb29sICoqcCwgdGhyZWFkY2FjaGUgKip0YywgaW50ICpteW1zcGFjZSwgc2l6ZV90ICpzaXplKSBUSFJPV1NQRUMKK3sKKwlpbnQgbXljYWNoZTsKKwlpZihzaXplICYmICpzaXplPHNpemVvZih0aHJlYWRjYWNoZWJsaykpICpzaXplPXNpemVvZih0aHJlYWRjYWNoZWJsayk7CisJaWYoISpwKQorCXsKKwkJKnA9JnN5c3Bvb2w7CisJCWlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7CisJfQorCW15Y2FjaGU9KGludCkoc2l6ZV90KSBUTFNHRVQoKCpwKS0+bXljYWNoZSk7CisJaWYobXljYWNoZT4wKQorCXsKKwkJKnRjPSgqcCktPmNhY2hlc1tteWNhY2hlLTFdOworCQkqbXltc3BhY2U9KCp0YyktPm15bXNwYWNlOworCX0KKwllbHNlIGlmKCFteWNhY2hlKQorCXsKKwkJKnRjPUFsbG9jQ2FjaGUoKnApOworCQlpZighKnRjKQorCQl7CS8qIERpc2FibGUgKi8KKwkJCWlmKFRMU1NFVCgoKnApLT5teWNhY2hlLCAodm9pZCAqKS0xKSkgYWJvcnQoKTsKKwkJCSpteW1zcGFjZT0wOworCQl9CisJCWVsc2UKKwkJCSpteW1zcGFjZT0oKnRjKS0+bXltc3BhY2U7CisJfQorCWVsc2UKKwl7CisJCSp0Yz0wOworCQkqbXltc3BhY2U9LW15Y2FjaGUtMTsKKwl9CisJYXNzZXJ0KCpteW1zcGFjZT49MCk7CisJYXNzZXJ0KChsb25nKShzaXplX3QpQ1VSUkVOVF9USFJFQUQ9PSgqdGMpLT50aHJlYWRpZCk7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCWlmKCp0YykKKwl7CisJCWlmKCoodW5zaWduZWQgaW50ICopIk5FRE1BTEMxIiE9KCp0YyktPm1hZ2ljMSB8fCAqKHVuc2lnbmVkIGludCAqKSJORURNQUxDMiIhPSgqdGMpLT5tYWdpYzIpCisJCXsKKwkJCWFib3J0KCk7CisJCX0KKwl9CisjZW5kaWYKK30KKwordm9pZCAqIG5lZHBtYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQworeworCXZvaWQgKnJldD0wOworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAmc2l6ZSk7CisjaWYgVEhSRUFEQ0FDSEVNQVgKKwlpZih0YyAmJiBzaXplPD1USFJFQURDQUNIRU1BWCkKKwl7CS8qIFVzZSB0aGUgdGhyZWFkIGNhY2hlICovCisJCXJldD10aHJlYWRjYWNoZV9tYWxsb2MocCwgdGMsICZzaXplKTsKKwl9CisjZW5kaWYKKwlpZighcmV0KQorCXsJLyogVXNlIHRoaXMgdGhyZWFkJ3MgbXNwYWNlICovCisJR0VUTVNQQUNFKG0sIHAsIHRjLCBteW1zcGFjZSwgc2l6ZSwKKwkJICByZXQ9bXNwYWNlX21hbGxvYyhtLCBzaXplKSk7CisJfQorCXJldHVybiByZXQ7Cit9Cit2b2lkICogbmVkcGNhbGxvYyhuZWRwb29sICpwLCBzaXplX3Qgbm8sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sKKwlzaXplX3QgcnNpemU9c2l6ZSpubzsKKwl2b2lkICpyZXQ9MDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgJnJzaXplKTsKKyNpZiBUSFJFQURDQUNIRU1BWAorCWlmKHRjICYmIHJzaXplPD1USFJFQURDQUNIRU1BWCkKKwl7CS8qIFVzZSB0aGUgdGhyZWFkIGNhY2hlICovCisJCWlmKChyZXQ9dGhyZWFkY2FjaGVfbWFsbG9jKHAsIHRjLCAmcnNpemUpKSkKKwkJCW1lbXNldChyZXQsIDAsIHJzaXplKTsKKwl9CisjZW5kaWYKKwlpZighcmV0KQorCXsJLyogVXNlIHRoaXMgdGhyZWFkJ3MgbXNwYWNlICovCisJR0VUTVNQQUNFKG0sIHAsIHRjLCBteW1zcGFjZSwgcnNpemUsCisJCSAgcmV0PW1zcGFjZV9jYWxsb2MobSwgMSwgcnNpemUpKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgKiBuZWRwcmVhbGxvYyhuZWRwb29sICpwLCB2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sKKwl2b2lkICpyZXQ9MDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCWlmKCFtZW0pIHJldHVybiBuZWRwbWFsbG9jKHAsIHNpemUpOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgJnNpemUpOworI2lmIFRIUkVBRENBQ0hFTUFYCisJaWYodGMgJiYgc2l6ZSAmJiBzaXplPD1USFJFQURDQUNIRU1BWCkKKwl7CS8qIFVzZSB0aGUgdGhyZWFkIGNhY2hlICovCisJCXNpemVfdCBtZW1zaXplPW5lZGJsa3NpemUobWVtKTsKKwkJYXNzZXJ0KG1lbXNpemUpOworCQlpZigocmV0PXRocmVhZGNhY2hlX21hbGxvYyhwLCB0YywgJnNpemUpKSkKKwkJeworCQkJbWVtY3B5KHJldCwgbWVtLCBtZW1zaXplPHNpemUgPyBtZW1zaXplIDogc2l6ZSk7CisJCQlpZihtZW1zaXplPD1USFJFQURDQUNIRU1BWCkKKwkJCQl0aHJlYWRjYWNoZV9mcmVlKHAsIHRjLCBteW1zcGFjZSwgbWVtLCBtZW1zaXplKTsKKwkJCWVsc2UKKwkJCQltc3BhY2VfZnJlZSgwLCBtZW0pOworCQl9CisJfQorI2VuZGlmCisJaWYoIXJldCkKKwl7CS8qIFJlYWxsb2NzIGFsd2F5cyBoYXBwZW4gaW4gdGhlIG1zcGFjZSB0aGV5IGhhcHBlbmVkIGluLCBzbyBza2lwCisJCWxvY2tpbmcgdGhlIHByZWZlcnJlZCBtc3BhY2UgZm9yIHRoaXMgdGhyZWFkICovCisJCXJldD1tc3BhY2VfcmVhbGxvYygwLCBtZW0sIHNpemUpOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCAgIG5lZHBmcmVlKG5lZHBvb2wgKnAsIHZvaWQgKm1lbSkgVEhST1dTUEVDCit7CS8qIEZyZWVzIGFsd2F5cyBoYXBwZW4gaW4gdGhlIG1zcGFjZSB0aGV5IGhhcHBlbmVkIGluLCBzbyBza2lwCisJbG9ja2luZyB0aGUgcHJlZmVycmVkIG1zcGFjZSBmb3IgdGhpcyB0aHJlYWQgKi8KKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCXNpemVfdCBtZW1zaXplOworCWFzc2VydChtZW0pOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgMCk7CisjaWYgVEhSRUFEQ0FDSEVNQVgKKwltZW1zaXplPW5lZGJsa3NpemUobWVtKTsKKwlhc3NlcnQobWVtc2l6ZSk7CisJaWYobWVtICYmIHRjICYmIG1lbXNpemU8PShUSFJFQURDQUNIRU1BWCtDSFVOS19PVkVSSEVBRCkpCisJCXRocmVhZGNhY2hlX2ZyZWUocCwgdGMsIG15bXNwYWNlLCBtZW0sIG1lbXNpemUpOworCWVsc2UKKyNlbmRpZgorCQltc3BhY2VfZnJlZSgwLCBtZW0pOworfQordm9pZCAqIG5lZHBtZW1hbGlnbihuZWRwb29sICpwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIFRIUk9XU1BFQworeworCXZvaWQgKnJldDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgJmJ5dGVzKTsKKwl7CS8qIFVzZSB0aGlzIHRocmVhZCdzIG1zcGFjZSAqLworCUdFVE1TUEFDRShtLCBwLCB0YywgbXltc3BhY2UsIGJ5dGVzLAorCQkgIHJldD1tc3BhY2VfbWVtYWxpZ24obSwgYWxpZ25tZW50LCBieXRlcykpOworCX0KKwlyZXR1cm4gcmV0OworfQorI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIG5lZHBtYWxsaW5mbyhuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlpbnQgbjsKKwlzdHJ1Y3QgbWFsbGluZm8gcmV0PXswfTsKKwlpZighcCkgeyBwPSZzeXNwb29sOyBpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOyB9CisJZm9yKG49MDsgcC0+bVtuXTsgbisrKQorCXsKKwkJc3RydWN0IG1hbGxpbmZvIHQ9bXNwYWNlX21hbGxpbmZvKHAtPm1bbl0pOworCQlyZXQuYXJlbmErPXQuYXJlbmE7CisJCXJldC5vcmRibGtzKz10Lm9yZGJsa3M7CisJCXJldC5oYmxraGQrPXQuaGJsa2hkOworCQlyZXQudXNtYmxrcys9dC51c21ibGtzOworCQlyZXQudW9yZGJsa3MrPXQudW9yZGJsa3M7CisJCXJldC5mb3JkYmxrcys9dC5mb3JkYmxrczsKKwkJcmV0LmtlZXBjb3N0Kz10LmtlZXBjb3N0OworCX0KKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCitpbnQgICAgbmVkcG1hbGxvcHQobmVkcG9vbCAqcCwgaW50IHBhcm5vLCBpbnQgdmFsdWUpIFRIUk9XU1BFQworeworCXJldHVybiBtc3BhY2VfbWFsbG9wdChwYXJubywgdmFsdWUpOworfQoraW50ICAgIG5lZHBtYWxsb2NfdHJpbShuZWRwb29sICpwLCBzaXplX3QgcGFkKSBUSFJPV1NQRUMKK3sKKwlpbnQgbiwgcmV0PTA7CisJaWYoIXApIHsgcD0mc3lzcG9vbDsgaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsgfQorCWZvcihuPTA7IHAtPm1bbl07IG4rKykKKwl7CisJCXJldCs9bXNwYWNlX3RyaW0ocC0+bVtuXSwgcGFkKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgICBuZWRwbWFsbG9jX3N0YXRzKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCWludCBuOworCWlmKCFwKSB7IHA9JnN5c3Bvb2w7IGlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7IH0KKwlmb3Iobj0wOyBwLT5tW25dOyBuKyspCisJeworCQltc3BhY2VfbWFsbG9jX3N0YXRzKHAtPm1bbl0pOworCX0KK30KK3NpemVfdCBuZWRwbWFsbG9jX2Zvb3RwcmludChuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlzaXplX3QgcmV0PTA7CisJaW50IG47CisJaWYoIXApIHsgcD0mc3lzcG9vbDsgaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsgfQorCWZvcihuPTA7IHAtPm1bbl07IG4rKykKKwl7CisJCXJldCs9bXNwYWNlX2Zvb3RwcmludChwLT5tW25dKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgKipuZWRwaW5kZXBlbmRlbnRfY2FsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBlbGVtc25vLCBzaXplX3QgZWxlbXNpemUsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQworeworCXZvaWQgKipyZXQ7CisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsICZlbGVtc2l6ZSk7CisgICAgR0VUTVNQQUNFKG0sIHAsIHRjLCBteW1zcGFjZSwgZWxlbXNubyplbGVtc2l6ZSwKKwkgICAgICByZXQ9bXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtLCBlbGVtc25vLCBlbGVtc2l6ZSwgY2h1bmtzKSk7CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgKipuZWRwaW5kZXBlbmRlbnRfY29tYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IGVsZW1zLCBzaXplX3QgKnNpemVzLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUMKK3sKKwl2b2lkICoqcmV0OworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisgICAgc2l6ZV90IGksICphZGp1c3RlZHNpemVzPShzaXplX3QgKikgYWxsb2NhKGVsZW1zKnNpemVvZihzaXplX3QpKTsKKyAgICBpZighYWRqdXN0ZWRzaXplcykgcmV0dXJuIDA7CisgICAgZm9yKGk9MDsgaTxlbGVtczsgaSsrKQorCWFkanVzdGVkc2l6ZXNbaV09c2l6ZXNbaV08c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSA/IHNpemVvZih0aHJlYWRjYWNoZWJsaykgOiBzaXplc1tpXTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsIDApOworCUdFVE1TUEFDRShtLCBwLCB0YywgbXltc3BhY2UsIDAsCisJICAgICAgcmV0PW1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyhtLCBlbGVtcywgYWRqdXN0ZWRzaXplcywgY2h1bmtzKSk7CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIE9WRVJSSURFX1NUUkRVUAorLyoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgcHVyZWx5IHRoZXJlIHRvIG92ZXJyaWRlIHRoZSBsaWJjIHZlcnNpb24sIHRvCisgKiBhdm9pZCBhIGNyYXNoIGR1ZSB0byBhbGxvY2F0aW9uIGFuZCBmcmVlIG9uIGRpZmZlcmVudCAnaGVhcHMnLgorICovCitjaGFyICpzdHJkdXAoY29uc3QgY2hhciAqczEpCit7CisJY2hhciAqczIgPSAwOworCWlmIChzMSkgeworCQlzMiA9IG1hbGxvYyhzdHJsZW4oczEpICsgMSk7CisJCXN0cmNweShzMiwgczEpOworCX0KKwlyZXR1cm4gczI7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmggYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjBlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5oCkBAIC0wLDAgKzEsMTgwIEBACisvKiBuZWRhbGxvYywgYW4gYWx0ZXJuYXRpdmUgbWFsbG9jIGltcGxlbWVudGF0aW9uIGZvciBtdWx0aXBsZSB0aHJlYWRzIHdpdGhvdXQKK2xvY2sgY29udGVudGlvbiBiYXNlZCBvbiBkbG1hbGxvYyB2Mi44LjMuIChDKSAyMDA1IE5pYWxsIERvdWdsYXMKKworQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQordGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCitleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KK2RvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgorCitUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwordGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKK211c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQord29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CithIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKK0ZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisqLworCisjaWZuZGVmIE5FRE1BTExPQ19ICisjZGVmaW5lIE5FRE1BTExPQ19ICisKKworLyogU2VlIG1hbGxvYy5jLmggZm9yIHdoYXQgZWFjaCBmdW5jdGlvbiBkb2VzLgorCitSRVBMQUNFX1NZU1RFTV9BTExPQ0FUT1IgY2F1c2VzIG5lZGFsbG9jJ3MgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBtYWxsb2MsCitmcmVlIGV0Yy4gaW5zdGVhZCBvZiBuZWRtYWxsb2MsIG5lZGZyZWUgZXRjLiBZb3UgbWF5IG9yIG1heSBub3Qgd2FudCB0aGlzLgorCitOT19ORURfTkFNRVNQQUNFIHByZXZlbnRzIHRoZSBmdW5jdGlvbnMgZnJvbSBiZWluZyBkZWZpbmVkIGluIHRoZSBuZWRhbGxvYworbmFtZXNwYWNlIHdoZW4gaW4gQysrICh1c2VzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIGluc3RlYWQpLgorCitFWFRTUEVDIGNhbiBiZSBkZWZpbmVkIHRvIGJlIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBvcgorX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIG9yIHdoYXRldmVyIHlvdSBsaWtlLiBJdCBkZWZhdWx0cwordG8gZXh0ZXJuLgorCitVU0VfTE9DS1MgY2FuIGJlIDIgaWYgeW91IHdhbnQgdG8gZGVmaW5lIHlvdXIgb3duIE1MT0NLX1QsIElOSVRJQUxfTE9DSywKK0FDUVVJUkVfTE9DSywgUkVMRUFTRV9MT0NLLCBUUllfTE9DSywgSVNfTE9DS0VEIGFuZCBOVUxMX0xPQ0tfSU5JVElBTElaRVIuCisKKyovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4gICAvKiBmb3Igc2l6ZV90ICovCisKKyNpZm5kZWYgRVhUU1BFQworICNkZWZpbmUgRVhUU1BFQyBleHRlcm4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTE0MDAKKyAjZGVmaW5lIE1BTExPQ0FUVFIgX19kZWNsc3BlYyhyZXN0cmljdCkKKyNlbmRpZgorI2lmZGVmIF9fR05VQ19fCisgI2RlZmluZSBNQUxMT0NBVFRSIF9fYXR0cmlidXRlX18gKChtYWxsb2MpKQorI2VuZGlmCisjaWZuZGVmIE1BTExPQ0FUVFIKKyAjZGVmaW5lIE1BTExPQ0FUVFIKKyNlbmRpZgorCisjaWZkZWYgUkVQTEFDRV9TWVNURU1fQUxMT0NBVE9SCisgI2RlZmluZSBuZWRtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyAjZGVmaW5lIG5lZGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworICNkZWZpbmUgbmVkcmVhbGxvYyAgICAgICAgICAgICAgcmVhbGxvYworICNkZWZpbmUgbmVkZnJlZSAgICAgICAgICAgICAgICAgZnJlZQorICNkZWZpbmUgbmVkbWVtYWxpZ24gICAgICAgICAgICAgbWVtYWxpZ24KKyAjZGVmaW5lIG5lZG1hbGxpbmZvICAgICAgICAgICAgIG1hbGxpbmZvCisgI2RlZmluZSBuZWRtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisgI2RlZmluZSBuZWRtYWxsb2NfdHJpbSAgICAgICAgICBtYWxsb2NfdHJpbQorICNkZWZpbmUgbmVkbWFsbG9jX3N0YXRzICAgICAgICAgbWFsbG9jX3N0YXRzCisgI2RlZmluZSBuZWRtYWxsb2NfZm9vdHByaW50ICAgICBtYWxsb2NfZm9vdHByaW50CisgI2RlZmluZSBuZWRpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MKKyAjZGVmaW5lIG5lZGluZGVwZW5kZW50X2NvbWFsbG9jIGluZGVwZW5kZW50X2NvbWFsbG9jCisgI2lmZGVmIF9NU0NfVkVSCisgICNkZWZpbmUgbmVkYmxrc2l6ZSAgICAgICAgICAgICAgX21zaXplCisgI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBOT19NQUxMSU5GTworI2RlZmluZSBOT19NQUxMSU5GTyAwCisjZW5kaWYKKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorICNpZiAhZGVmaW5lZChOT19ORURfTkFNRVNQQUNFKQorbmFtZXNwYWNlIG5lZGFsbG9jIHsKKyAjZWxzZQorZXh0ZXJuICJDIiB7CisgI2VuZGlmCisgI2RlZmluZSBUSFJPV1NQRUMgdGhyb3coKQorI2Vsc2UKKyAjZGVmaW5lIFRIUk9XU1BFQworI2VuZGlmCisKKy8qIFRoZXNlIGFyZSB0aGUgZ2xvYmFsIGZ1bmN0aW9ucyAqLworCisvKiBHZXRzIHRoZSB1c2FibGUgc2l6ZSBvZiBhbiBhbGxvY2F0ZWQgYmxvY2suIE5vdGUgdGhpcyB3aWxsIGFsd2F5cyBiZSBiaWdnZXIgdGhhbiB3aGF0IHdhcworYXNrZWQgZm9yIGR1ZSB0byByb3VuZGluZyBldGMuCisqLworRVhUU1BFQyBzaXplX3QgbmVkYmxrc2l6ZSh2b2lkICptZW0pIFRIUk9XU1BFQzsKKworRVhUU1BFQyB2b2lkIG5lZHNldHZhbHVlKHZvaWQgKnYpIFRIUk9XU1BFQzsKKworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRtYWxsb2Moc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkY2FsbG9jKHNpemVfdCBubywgc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcmVhbGxvYyh2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUM7CitFWFRTUEVDIHZvaWQgICBuZWRmcmVlKHZvaWQgKm1lbSkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIFRIUk9XU1BFQzsKKyNpZiAhTk9fTUFMTElORk8KK0VYVFNQRUMgc3RydWN0IG1hbGxpbmZvIG5lZG1hbGxpbmZvKHZvaWQpIFRIUk9XU1BFQzsKKyNlbmRpZgorRVhUU1BFQyBpbnQgICAgbmVkbWFsbG9wdChpbnQgcGFybm8sIGludCB2YWx1ZSkgVEhST1dTUEVDOworRVhUU1BFQyBpbnQgICAgbmVkbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkbWFsbG9jX3N0YXRzKHZvaWQpIFRIUk9XU1BFQzsKK0VYVFNQRUMgc2l6ZV90IG5lZG1hbGxvY19mb290cHJpbnQodm9pZCkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IGVsZW1zbm8sIHNpemVfdCBlbGVtc2l6ZSwgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QgZWxlbXMsIHNpemVfdCAqc2l6ZXMsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQzsKKworLyogVGhlc2UgYXJlIHRoZSBwb29sIGZ1bmN0aW9ucyAqLworc3RydWN0IG5lZHBvb2xfdDsKK3R5cGVkZWYgc3RydWN0IG5lZHBvb2xfdCBuZWRwb29sOworCisvKiBDcmVhdGVzIGEgbWVtb3J5IHBvb2wgZm9yIHVzZSB3aXRoIHRoZSBuZWRwKiBmdW5jdGlvbnMgYmVsb3cuCitDYXBhY2l0eSBpcyBob3cgbXVjaCB0byBhbGxvY2F0ZSBpbW1lZGlhdGVseSAoaWYgeW91IGtub3cgeW91J2xsIGJlIGFsbG9jYXRpbmcgYSBsb3QKK29mIG1lbW9yeSB2ZXJ5IHNvb24pIHdoaWNoIHlvdSBjYW4gbGVhdmUgYXQgemVyby4gVGhyZWFkcyBzcGVjaWZpZXMgaG93IG1hbnkgdGhyZWFkcword2lsbCAqbm9ybWFsbHkqIGJlIGFjY2Vzc2luZyB0aGUgcG9vbCBjb25jdXJyZW50bHkuIFNldHRpbmcgdGhpcyB0byB6ZXJvIG1lYW5zIGl0CitleHRlbmRzIG9uIGRlbWFuZCwgYnV0IGJlIGNhcmVmdWwgb2YgdGhpcyBhcyBpdCBjYW4gcmFwaWRseSBjb25zdW1lIHN5c3RlbSByZXNvdXJjZXMKK3doZXJlIGJ1cnN0cyBvZiBjb25jdXJyZW50IHRocmVhZHMgdXNlIGEgcG9vbCBhdCBvbmNlLgorKi8KK0VYVFNQRUMgTUFMTE9DQVRUUiBuZWRwb29sICpuZWRjcmVhdGVwb29sKHNpemVfdCBjYXBhY2l0eSwgaW50IHRocmVhZHMpIFRIUk9XU1BFQzsKKworLyogRGVzdHJveXMgYSBtZW1vcnkgcG9vbCBwcmV2aW91c2x5IGNyZWF0ZWQgYnkgbmVkY3JlYXRlcG9vbCgpLgorKi8KK0VYVFNQRUMgdm9pZCBuZWRkZXN0cm95cG9vbChuZWRwb29sICpwKSBUSFJPV1NQRUM7CisKKy8qIFNldHMgYSB2YWx1ZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggYSBwb29sLiBZb3UgY2FuIHJldHJpZXZlIHRoaXMgdmFsdWUgYnkgcGFzc2luZworYW55IG1lbW9yeSBibG9jayBhbGxvY2F0ZWQgZnJvbSB0aGF0IHBvb2wuCisqLworRVhUU1BFQyB2b2lkIG5lZHBzZXR2YWx1ZShuZWRwb29sICpwLCB2b2lkICp2KSBUSFJPV1NQRUM7CisvKiBHZXRzIGEgcHJldmlvdXNseSBzZXQgdmFsdWUgdXNpbmcgbmVkcHNldHZhbHVlKCkgb3IgemVybyBpZiBtZW1vcnkgaXMgdW5rbm93bi4KK09wdGlvbmFsbHkgY2FuIGFsc28gcmV0cmlldmUgcG9vbC4KKyovCitFWFRTUEVDIHZvaWQgKm5lZGdldHZhbHVlKG5lZHBvb2wgKipwLCB2b2lkICptZW0pIFRIUk9XU1BFQzsKKworLyogRGlzYWJsZXMgdGhlIHRocmVhZCBjYWNoZSBmb3IgdGhlIGNhbGxpbmcgdGhyZWFkLCByZXR1cm5pbmcgYW55IGV4aXN0aW5nIGNhY2hlCitkYXRhIHRvIHRoZSBjZW50cmFsIHBvb2wuCisqLworRVhUU1BFQyB2b2lkIG5lZGRpc2FibGV0aHJlYWRjYWNoZShuZWRwb29sICpwKSBUSFJPV1NQRUM7CisKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcG1hbGxvYyhuZWRwb29sICpwLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRwY2FsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBubywgc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcHJlYWxsb2MobmVkcG9vbCAqcCwgdm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkcGZyZWUobmVkcG9vbCAqcCwgdm9pZCAqbWVtKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZHBtZW1hbGlnbihuZWRwb29sICpwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIFRIUk9XU1BFQzsKKyNpZiAhTk9fTUFMTElORk8KK0VYVFNQRUMgc3RydWN0IG1hbGxpbmZvIG5lZHBtYWxsaW5mbyhuZWRwb29sICpwKSBUSFJPV1NQRUM7CisjZW5kaWYKK0VYVFNQRUMgaW50ICAgIG5lZHBtYWxsb3B0KG5lZHBvb2wgKnAsIGludCBwYXJubywgaW50IHZhbHVlKSBUSFJPV1NQRUM7CitFWFRTUEVDIGludCAgICBuZWRwbWFsbG9jX3RyaW0obmVkcG9vbCAqcCwgc2l6ZV90IHBhZCkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkcG1hbGxvY19zdGF0cyhuZWRwb29sICpwKSBUSFJPV1NQRUM7CitFWFRTUEVDIHNpemVfdCBuZWRwbWFsbG9jX2Zvb3RwcmludChuZWRwb29sICpwKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqKm5lZHBpbmRlcGVuZGVudF9jYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IGVsZW1zbm8sIHNpemVfdCBlbGVtc2l6ZSwgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRwaW5kZXBlbmRlbnRfY29tYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IGVsZW1zLCBzaXplX3QgKnNpemVzLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUM7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKyN1bmRlZiBNQUxMT0NBVFRSCisjdW5kZWYgRVhUU1BFQworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdleC5jIGIvY29tcGF0L3JlZ2V4L3JlZ2V4LmMKaW5kZXggODdiMzNlNC4uNWVhMDA3NSAxMDA2NDQKLS0tIGEvY29tcGF0L3JlZ2V4L3JlZ2V4LmMKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2V4LmMKQEAgLTEwNDMsNyArMTA0Myw3IEBACiAgICAgIHRoZXkgY2FuIGJlIHJlbGlhYmx5IHVzZWQgYXMgYXJyYXkgaW5kaWNlcy4gICovCiAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgYywgYzE7CiAKLSAgLyogQSByYW5kb20gdGVtcG9yeSBzcG90IGluIFBBVFRFUk4uICAqLworICAvKiBBIHJhbmRvbSB0ZW1wb3Jhcnkgc3BvdCBpbiBQQVRURVJOLiAgKi8KICAgY29uc3QgY2hhciAqcDE7CiAKICAgLyogUG9pbnRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgd2hlcmUgd2Ugc2hvdWxkIGFwcGVuZC4gICovCkBAIC0xNzk2LDcgKzE3OTYsNyBAQAogCQkgICAgd2UncmUgYWxsIGRvbmUsIHRoZSBwYXR0ZXJuIHdpbGwgbG9vayBsaWtlOgogCQkgICAgICBzZXRfbnVtYmVyX2F0IDxqdW1wIGNvdW50PiA8dXBwZXIgYm91bmQ+CiAJCSAgICAgIHNldF9udW1iZXJfYXQgPHN1Y2NlZWRfbiBjb3VudD4gPGxvd2VyIGJvdW5kPgotCQkgICAgICBzdWNjZWVkX24gPGFmdGVyIGp1bXAgYWRkcj4gPHN1Y2NlZF9uIGNvdW50PgorCQkgICAgICBzdWNjZWVkX24gPGFmdGVyIGp1bXAgYWRkcj4gPHN1Y2NlZWRfbiBjb3VudD4KIAkJICAgICAgPGJvZHkgb2YgbG9vcD4KIAkJICAgICAganVtcF9uIDxzdWNjZWVkX24gYWRkcj4gPGp1bXAgY291bnQ+CiAJCSAgICAoVGhlIHVwcGVyIGJvdW5kIGFuZCBganVtcF9uJyBhcmUgb21pdHRlZCBpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L3NucHJpbnRmLmMgYi9jb21wYXQvc25wcmludGYuYwppbmRleCAzNTdlNzMzLi42YzBmYjA1IDEwMDY0NAotLS0gYS9jb21wYXQvc25wcmludGYuYworKysgYi9jb21wYXQvc25wcmludGYuYwpAQCAtNiw4ICs2LDEyIEBACiAgKiBudW1iZXIgb2YgY2hhcmFjdGVycyB0byB3cml0ZSB3aXRob3V0IHRoZSB0cmFpbGluZyBOVUwuCiAgKi8KICNpZm5kZWYgU05QUklOVEZfU0laRV9DT1JSCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykgJiYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPCA0CisjZGVmaW5lIFNOUFJJTlRGX1NJWkVfQ09SUiAxCisjZWxzZQogI2RlZmluZSBTTlBSSU5URl9TSVpFX0NPUlIgMAogI2VuZGlmCisjZW5kaWYKIAogI3VuZGVmIHZzbnByaW50ZgogaW50IGdpdF92c25wcmludGYoY2hhciAqc3RyLCBzaXplX3QgbWF4c2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMybW1hcC5jIGIvY29tcGF0L3dpbjMybW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3OWQ3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzJtbWFwLmMKQEAgLTAsMCArMSw1MyBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCisvKgorICogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYWdlc2l6ZSwgYnV0CisgKiB0aGUgYWxsb2NhdGlvbiBncmFudWxhcml0eS4gSWYgZnV0dXJlIFdpbmRvd3Mgc3BlY2lmaWMgZ2l0IGNvZGUKKyAqIG5lZWRzIHRoZSByZWFsIGdldHBhZ2VzaXplIGZ1bmN0aW9uLCB3ZSBuZWVkIHRvIGZpbmQgYW5vdGhlciBzb2x1dGlvbi4KKyAqLworaW50IG1pbmd3X2dldHBhZ2VzaXplKHZvaWQpCit7CisJU1lTVEVNX0lORk8gc2k7CisJR2V0U3lzdGVtSW5mbygmc2kpOworCXJldHVybiBzaS5kd0FsbG9jYXRpb25HcmFudWxhcml0eTsKK30KKwordm9pZCAqZ2l0X21tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsIGludCBwcm90LCBpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KQoreworCUhBTkRMRSBobWFwOworCXZvaWQgKnRlbXA7CisJc2l6ZV90IGxlbjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwl1aW50NjRfdCBvID0gb2Zmc2V0OworCXVpbnQzMl90IGwgPSBvICYgMHhGRkZGRkZGRjsKKwl1aW50MzJfdCBoID0gKG8gPj4gMzIpICYgMHhGRkZGRkZGRjsKKworCWlmICghZnN0YXQoZmQsICZzdCkpCisJCWxlbiA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisJZWxzZQorCQlkaWUoIm1tYXA6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZmlsZXNpemUiKTsKKworCWlmICgobGVuZ3RoICsgb2Zmc2V0KSA+IGxlbikKKwkJbGVuZ3RoID0gbGVuIC0gb2Zmc2V0OworCisJaWYgKCEoZmxhZ3MgJiBNQVBfUFJJVkFURSkpCisJCWRpZSgiSW52YWxpZCB1c2FnZSBvZiBtbWFwIHdoZW4gYnVpbHQgd2l0aCBVU0VfV0lOMzJfTU1BUCIpOworCisJaG1hcCA9IENyZWF0ZUZpbGVNYXBwaW5nKChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpLCAwLCBQQUdFX1dSSVRFQ09QWSwKKwkJMCwgMCwgMCk7CisKKwlpZiAoIWhtYXApCisJCXJldHVybiBNQVBfRkFJTEVEOworCisJdGVtcCA9IE1hcFZpZXdPZkZpbGVFeChobWFwLCBGSUxFX01BUF9DT1BZLCBoLCBsLCBsZW5ndGgsIHN0YXJ0KTsKKworCWlmICghQ2xvc2VIYW5kbGUoaG1hcCkpCisJCXdhcm5pbmcoInVuYWJsZSB0byBjbG9zZSBmaWxlIG1hcHBpbmcgaGFuZGxlXG4iKTsKKworCXJldHVybiB0ZW1wID8gdGVtcCA6IE1BUF9GQUlMRUQ7Cit9CisKK2ludCBnaXRfbXVubWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoKQoreworCXJldHVybiAhVW5tYXBWaWV3T2ZGaWxlKHN0YXJ0KTsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC93aW5hbnNpLmMgYi9jb21wYXQvd2luYW5zaS5jCmluZGV4IGUyZDk2ZGYuLjkyMTdjMjQgMTAwNjQ0Ci0tLSBhL2NvbXBhdC93aW5hbnNpLmMKKysrIGIvY29tcGF0L3dpbmFuc2kuYwpAQCAtMTgsOCArMTgsNiBAQAogCiAgVGhpcyBmaWxlIGlzIGdpdC1zcGVjaWZpYy4gVGhlcmVmb3JlLCB0aGlzIGZpbGUgZG9lcyBub3QgYXR0ZW1wdAogIHRvIGltcGxlbWVudCBhbnkgY29kZXMgdGhhdCBhcmUgbm90IHVzZWQgYnkgZ2l0LgotCi0gVE9ETzogSwogKi8KIAogc3RhdGljIEhBTkRMRSBjb25zb2xlOwpAQCAtNzksNiArNzcsMjEgQEAKIAlTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZShjb25zb2xlLCBhdHRyaWJ1dGVzKTsKIH0KIAorc3RhdGljIHZvaWQgZXJhc2VfaW5fbGluZSh2b2lkKQoreworCUNPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIHNiaTsKKwlEV09SRCBkdW1teTsgLyogTmVlZGVkIGZvciBXaW5kb3dzIDcgKG9yIFZpc3RhKSByZWdyZXNzaW9uICovCisKKwlpZiAoIWNvbnNvbGUpCisJCXJldHVybjsKKworCUdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvKGNvbnNvbGUsICZzYmkpOworCUZpbGxDb25zb2xlT3V0cHV0Q2hhcmFjdGVyQShjb25zb2xlLCAnICcsCisJCXNiaS5kd1NpemUuWCAtIHNiaS5kd0N1cnNvclBvc2l0aW9uLlgsIHNiaS5kd0N1cnNvclBvc2l0aW9uLAorCQkmZHVtbXkpOworfQorCisKIHN0YXRpYyBjb25zdCBjaGFyICpzZXRfYXR0cihjb25zdCBjaGFyICpzdHIpCiB7CiAJY29uc3QgY2hhciAqZnVuYzsKQEAgLTIxOCw3ICsyMzEsNyBAQAogCQlzZXRfY29uc29sZV9hdHRyKCk7CiAJCWJyZWFrOwogCWNhc2UgJ0snOgotCQkvKiBUT0RPICovCisJCWVyYXNlX2luX2xpbmUoKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogVW5zdXBwb3J0ZWQgY29kZSAqLwpkaWZmIC0tZ2l0IGEvY29uZmlnLmMgYi9jb25maWcuYwppbmRleCAzN2UzYzc0Li5lODdlZGVhIDEwMDY0NAotLS0gYS9jb25maWcuYworKysgYi9jb25maWcuYwpAQCAtNjIsNyArNjIsOCBAQAogCQlpZiAoY29tbWVudCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaXNzcGFjZShjKSAmJiAhcXVvdGUpIHsKLQkJCXNwYWNlID0gMTsKKwkJCWlmIChsZW4pCisJCQkJc3BhY2UrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICghcXVvdGUpIHsKQEAgLTcxLDExICs3Miw4IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KLQkJaWYgKHNwYWNlKSB7Ci0JCQlpZiAobGVuKQotCQkJCXZhbHVlW2xlbisrXSA9ICcgJzsKLQkJCXNwYWNlID0gMDsKLQkJfQorCQlmb3IgKDsgc3BhY2U7IHNwYWNlLS0pCisJCQl2YWx1ZVtsZW4rK10gPSAnICc7CiAJCWlmIChjID09ICdcXCcpIHsKIAkJCWMgPSBnZXRfbmV4dF9jaGFyKCk7CiAJCQlzd2l0Y2ggKGMpIHsKQEAgLTMzMSw5ICszMjksOSBAQAogCQlyZXR1cm4gMTsKIAlpZiAoISp2YWx1ZSkKIAkJcmV0dXJuIDA7Ci0JaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAidHJ1ZSIpIHx8ICFzdHJjYXNlY21wKHZhbHVlLCAieWVzIikpCisJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAidHJ1ZSIpIHx8ICFzdHJjYXNlY21wKHZhbHVlLCAieWVzIikgfHwgIXN0cmNhc2VjbXAodmFsdWUsICJvbiIpKQogCQlyZXR1cm4gMTsKLQlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJmYWxzZSIpIHx8ICFzdHJjYXNlY21wKHZhbHVlLCAibm8iKSkKKwlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJmYWxzZSIpIHx8ICFzdHJjYXNlY21wKHZhbHVlLCAibm8iKSB8fCAhc3RyY2FzZWNtcCh2YWx1ZSwgIm9mZiIpKQogCQlyZXR1cm4gMDsKIAkqaXNfYm9vbCA9IDA7CiAJcmV0dXJuIGdpdF9jb25maWdfaW50KG5hbWUsIHZhbHVlKTsKQEAgLTQ5NSw2ICs0OTMsMTYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5jcmVhdGVvYmplY3QiKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInJlbmFtZSIpKQorCQkJb2JqZWN0X2NyZWF0aW9uX21vZGUgPSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibGluayIpKQorCQkJb2JqZWN0X2NyZWF0aW9uX21vZGUgPSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19IQVJETElOS1M7CisJCWVsc2UKKwkJCWRpZSgiSW52YWxpZCBtb2RlIGZvciBvYmplY3QgY3JlYXRpb246ICVzIiwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCiAJcmV0dXJuIDA7CiB9CkBAIC01NjUsNiArNTczLDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZ2l0X2RlZmF1bHRfcHVzaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJwdXNoLmRlZmF1bHQiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJub3RoaW5nIikpCisJCQlwdXNoX2RlZmF1bHQgPSBQVVNIX0RFRkFVTFRfTk9USElORzsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIm1hdGNoaW5nIikpCisJCQlwdXNoX2RlZmF1bHQgPSBQVVNIX0RFRkFVTFRfTUFUQ0hJTkc7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJ0cmFja2luZyIpKQorCQkJcHVzaF9kZWZhdWx0ID0gUFVTSF9ERUZBVUxUX1RSQUNLSU5HOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiY3VycmVudCIpKQorCQkJcHVzaF9kZWZhdWx0ID0gUFVTSF9ERUZBVUxUX0NVUlJFTlQ7CisJCWVsc2UgeworCQkJZXJyb3IoIk1hbGZvcm1lZCB2YWx1ZSBmb3IgJXM6ICVzIiwgdmFyLCB2YWx1ZSk7CisJCQlyZXR1cm4gZXJyb3IoIk11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCAiCisJCQkJICAgICAidHJhY2tpbmcgb3IgY3VycmVudC4iKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2RlZmF1bHRfbWFpbG1hcF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJtYWlsbWFwLmZpbGUiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZnaXRfbWFpbG1hcF9maWxlLCB2YXIsIHZhbHVlKTsKKworCS8qIEFkZCBvdGhlciBjb25maWcgdmFyaWFibGVzIGhlcmUgYW5kIHRvIERvY3VtZW50YXRpb24vY29uZmlnLnR4dC4gKi8KKwlyZXR1cm4gMDsKK30KKwogaW50IGdpdF9kZWZhdWx0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpkdW1teSkKIHsKIAlpZiAoIXByZWZpeGNtcCh2YXIsICJjb3JlLiIpKQpAQCAtNTc5LDYgKzYyMSwxMiBAQAogCWlmICghcHJlZml4Y21wKHZhciwgImJyYW5jaC4iKSkKIAkJcmV0dXJuIGdpdF9kZWZhdWx0X2JyYW5jaF9jb25maWcodmFyLCB2YWx1ZSk7CiAKKwlpZiAoIXByZWZpeGNtcCh2YXIsICJwdXNoLiIpKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfcHVzaF9jb25maWcodmFyLCB2YWx1ZSk7CisKKwlpZiAoIXByZWZpeGNtcCh2YXIsICJtYWlsbWFwLiIpKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfbWFpbG1hcF9jb25maWcodmFyLCB2YWx1ZSk7CisKIAlpZiAoIXN0cmNtcCh2YXIsICJwYWdlci5jb2xvciIpIHx8ICFzdHJjbXAodmFyLCAiY29sb3IucGFnZXIiKSkgewogCQlwYWdlcl91c2VfY29sb3IgPSBnaXRfY29uZmlnX2Jvb2wodmFyLHZhbHVlKTsKIAkJcmV0dXJuIDA7CkBAIC02MzIsMjggKzY4MCwzNyBAQAogCiBpbnQgZ2l0X2NvbmZpZyhjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKIHsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMCwgZm91bmQgPSAwOwogCWNoYXIgKnJlcG9fY29uZmlnID0gTlVMTDsKIAljb25zdCBjaGFyICpob21lID0gTlVMTDsKIAogCS8qIFNldHRpbmcgJEdJVF9DT05GSUcgbWFrZXMgZ2l0IHJlYWQgX29ubHlfIHRoZSBnaXZlbiBjb25maWcgZmlsZS4gKi8KIAlpZiAoY29uZmlnX2V4Y2x1c2l2ZV9maWxlbmFtZSkKIAkJcmV0dXJuIGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCBjb25maWdfZXhjbHVzaXZlX2ZpbGVuYW1lLCBkYXRhKTsKLQlpZiAoZ2l0X2NvbmZpZ19zeXN0ZW0oKSAmJiAhYWNjZXNzKGdpdF9ldGNfZ2l0Y29uZmlnKCksIFJfT0spKQorCWlmIChnaXRfY29uZmlnX3N5c3RlbSgpICYmICFhY2Nlc3MoZ2l0X2V0Y19naXRjb25maWcoKSwgUl9PSykpIHsKIAkJcmV0ICs9IGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCBnaXRfZXRjX2dpdGNvbmZpZygpLAogCQkJCQkgICAgZGF0YSk7CisJCWZvdW5kICs9IDE7CisJfQogCiAJaG9tZSA9IGdldGVudigiSE9NRSIpOwogCWlmIChnaXRfY29uZmlnX2dsb2JhbCgpICYmIGhvbWUpIHsKIAkJY2hhciAqdXNlcl9jb25maWcgPSB4c3RyZHVwKG1rcGF0aCgiJXMvLmdpdGNvbmZpZyIsIGhvbWUpKTsKLQkJaWYgKCFhY2Nlc3ModXNlcl9jb25maWcsIFJfT0spKQorCQlpZiAoIWFjY2Vzcyh1c2VyX2NvbmZpZywgUl9PSykpIHsKIAkJCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgdXNlcl9jb25maWcsIGRhdGEpOworCQkJZm91bmQgKz0gMTsKKwkJfQogCQlmcmVlKHVzZXJfY29uZmlnKTsKIAl9CiAKIAlyZXBvX2NvbmZpZyA9IGdpdF9wYXRoZHVwKCJjb25maWciKTsKLQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIHJlcG9fY29uZmlnLCBkYXRhKTsKKwlpZiAoIWFjY2VzcyhyZXBvX2NvbmZpZywgUl9PSykpIHsKKwkJcmV0ICs9IGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCByZXBvX2NvbmZpZywgZGF0YSk7CisJCWZvdW5kICs9IDE7CisJfQogCWZyZWUocmVwb19jb25maWcpOworCWlmIChmb3VuZCA9PSAwKQorCQlyZXR1cm4gLTE7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjY1LDE2ICs3MjIsMTYgQEAKIAogc3RhdGljIHN0cnVjdCB7CiAJaW50IGJhc2VsZW47Ci0JY2hhcioga2V5OworCWNoYXIgKmtleTsKIAlpbnQgZG9fbm90X21hdGNoOwotCXJlZ2V4X3QqIHZhbHVlX3JlZ2V4OworCXJlZ2V4X3QgKnZhbHVlX3JlZ2V4OwogCWludCBtdWx0aV9yZXBsYWNlOwogCXNpemVfdCBvZmZzZXRbTUFYX01BVENIRVNdOwogCWVudW0geyBTVEFSVCwgU0VDVElPTl9TRUVOLCBTRUNUSU9OX0VORF9TRUVOLCBLRVlfU0VFTiB9IHN0YXRlOwogCWludCBzZWVuOwogfSBzdG9yZTsKIAotc3RhdGljIGludCBtYXRjaGVzKGNvbnN0IGNoYXIqIGtleSwgY29uc3QgY2hhciogdmFsdWUpCitzdGF0aWMgaW50IG1hdGNoZXMoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKIAlyZXR1cm4gIXN0cmNtcChrZXksIHN0b3JlLmtleSkgJiYKIAkJKHN0b3JlLnZhbHVlX3JlZ2V4ID09IE5VTEwgfHwKQEAgLTY4Miw3ICs3MzksNyBAQAogCQkgICFyZWdleGVjKHN0b3JlLnZhbHVlX3JlZ2V4LCB2YWx1ZSwgMCwgTlVMTCwgMCkpKTsKIH0KIAotc3RhdGljIGludCBzdG9yZV9hdXgoY29uc3QgY2hhcioga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSwgdm9pZCAqY2IpCitzdGF0aWMgaW50IHN0b3JlX2F1eChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAljb25zdCBjaGFyICplcDsKIAlzaXplX3Qgc2VjdGlvbl9sZW47CkBAIC03NTEsNyArODA4LDcgQEAKIAlyZXR1cm4gNDsKIH0KIAotc3RhdGljIGludCBzdG9yZV93cml0ZV9zZWN0aW9uKGludCBmZCwgY29uc3QgY2hhcioga2V5KQorc3RhdGljIGludCBzdG9yZV93cml0ZV9zZWN0aW9uKGludCBmZCwgY29uc3QgY2hhciAqa2V5KQogewogCWNvbnN0IGNoYXIgKmRvdDsKIAlpbnQgaSwgc3VjY2VzczsKQEAgLTc3Niw3ICs4MzMsNyBAQAogCXJldHVybiBzdWNjZXNzOwogfQogCi1zdGF0aWMgaW50IHN0b3JlX3dyaXRlX3BhaXIoaW50IGZkLCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKQorc3RhdGljIGludCBzdG9yZV93cml0ZV9wYWlyKGludCBmZCwgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKIAlpbnQgaSwgc3VjY2VzczsKIAlpbnQgbGVuZ3RoID0gc3RybGVuKGtleSArIHN0b3JlLmJhc2VsZW4gKyAxKTsKQEAgLTgyNCw4ICs4ODEsOCBAQAogCXJldHVybiBzdWNjZXNzOwogfQogCi1zdGF0aWMgc3NpemVfdCBmaW5kX2JlZ2lubmluZ19vZl9saW5lKGNvbnN0IGNoYXIqIGNvbnRlbnRzLCBzaXplX3Qgc2l6ZSwKLQlzaXplX3Qgb2Zmc2V0XywgaW50KiBmb3VuZF9icmFja2V0KQorc3RhdGljIHNzaXplX3QgZmluZF9iZWdpbm5pbmdfb2ZfbGluZShjb25zdCBjaGFyICpjb250ZW50cywgc2l6ZV90IHNpemUsCisJc2l6ZV90IG9mZnNldF8sIGludCAqZm91bmRfYnJhY2tldCkKIHsKIAlzaXplX3QgZXF1YWxfb2Zmc2V0ID0gc2l6ZSwgYnJhY2tldF9vZmZzZXQgPSBzaXplOwogCXNzaXplX3Qgb2Zmc2V0OwpAQCAtODUwLDcgKzkwNyw3IEBACiAJcmV0dXJuIG9mZnNldDsKIH0KIAotaW50IGdpdF9jb25maWdfc2V0KGNvbnN0IGNoYXIqIGtleSwgY29uc3QgY2hhciogdmFsdWUpCitpbnQgZ2l0X2NvbmZpZ19zZXQoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKIAlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoa2V5LCB2YWx1ZSwgTlVMTCwgMCk7CiB9CkBAIC04NzgsMTUgKzkzNSwxNSBAQAogICogLSB0aGUgY29uZmlnIGZpbGUgaXMgcmVtb3ZlZCBhbmQgdGhlIGxvY2sgZmlsZSByZW5hbWUoKWQgdG8gaXQuCiAgKgogICovCi1pbnQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoY29uc3QgY2hhcioga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSwKLQljb25zdCBjaGFyKiB2YWx1ZV9yZWdleCwgaW50IG11bHRpX3JlcGxhY2UpCitpbnQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwKKwljb25zdCBjaGFyICp2YWx1ZV9yZWdleCwgaW50IG11bHRpX3JlcGxhY2UpCiB7CiAJaW50IGksIGRvdDsKIAlpbnQgZmQgPSAtMSwgaW5fZmQ7CiAJaW50IHJldDsKLQljaGFyKiBjb25maWdfZmlsZW5hbWU7CisJY2hhciAqY29uZmlnX2ZpbGVuYW1lOwogCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2sgPSBOVUxMOwotCWNvbnN0IGNoYXIqIGxhc3RfZG90ID0gc3RycmNocihrZXksICcuJyk7CisJY29uc3QgY2hhciAqbGFzdF9kb3QgPSBzdHJyY2hyKGtleSwgJy4nKTsKIAogCWlmIChjb25maWdfZXhjbHVzaXZlX2ZpbGVuYW1lKQogCQljb25maWdfZmlsZW5hbWUgPSB4c3RyZHVwKGNvbmZpZ19leGNsdXNpdmVfZmlsZW5hbWUpOwpAQCAtOTQyLDcgKzk5OSw3IEBACiAJbG9jayA9IHhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpLCAxKTsKIAlmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUobG9jaywgY29uZmlnX2ZpbGVuYW1lLCAwKTsKIAlpZiAoZmQgPCAwKSB7Ci0JCWVycm9yKCJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIsIGNvbmZpZ19maWxlbmFtZSk7CisJCWVycm9yKCJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlczogJXMiLCBjb25maWdfZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAJCWZyZWUoc3RvcmUua2V5KTsKIAkJcmV0ID0gLTE7CiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC05NjcsMTMgKzEwMjQsMTMgQEAKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KIAotCQlzdG9yZS5rZXkgPSAoY2hhciopa2V5OworCQlzdG9yZS5rZXkgPSAoY2hhciAqKWtleTsKIAkJaWYgKCFzdG9yZV93cml0ZV9zZWN0aW9uKGZkLCBrZXkpIHx8CiAJCSAgICAhc3RvcmVfd3JpdGVfcGFpcihmZCwga2V5LCB2YWx1ZSkpCiAJCQlnb3RvIHdyaXRlX2Vycl9vdXQ7CiAJfSBlbHNlIHsKIAkJc3RydWN0IHN0YXQgc3Q7Ci0JCWNoYXIqIGNvbnRlbnRzOworCQljaGFyICpjb250ZW50czsKIAkJc2l6ZV90IGNvbnRlbnRzX3N6LCBjb3B5X2JlZ2luLCBjb3B5X2VuZDsKIAkJaW50IGksIG5ld19saW5lID0gMDsKIApAQCAtMTExNSw3ICsxMTcyLDkgQEAKIHN0YXRpYyBpbnQgc2VjdGlvbl9uYW1lX21hdGNoIChjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaW50IGkgPSAwLCBqID0gMCwgZG90ID0gMDsKLQlmb3IgKDsgYnVmW2ldICYmIGJ1ZltpXSAhPSAnXSc7IGkrKykgeworCWlmIChidWZbaV0gIT0gJ1snKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAxOyBidWZbaV0gJiYgYnVmW2ldICE9ICddJzsgaSsrKSB7CiAJCWlmICghZG90ICYmIGlzc3BhY2UoYnVmW2ldKSkgewogCQkJZG90ID0gMTsKIAkJCWlmIChuYW1lW2orK10gIT0gJy4nKQpAQCAtMTEzNiw3ICsxMTk1LDE3IEBACiAJCWlmIChidWZbaV0gIT0gbmFtZVtqKytdKQogCQkJYnJlYWs7CiAJfQotCXJldHVybiAoYnVmW2ldID09ICddJyAmJiBuYW1lW2pdID09IDApOworCWlmIChidWZbaV0gPT0gJ10nICYmIG5hbWVbal0gPT0gMCkgeworCQkvKgorCQkgKiBXZSBtYXRjaCwgbm93IGp1c3QgZmluZCB0aGUgcmlnaHQgbGVuZ3RoIG9mZnNldCBieQorCQkgKiBnb2JibGluZyB1cCBhbnkgd2hpdGVzcGFjZSBhZnRlciBpdCwgYXMgd2VsbAorCQkgKi8KKwkJaSsrOworCQlmb3IgKDsgYnVmW2ldICYmIGlzc3BhY2UoYnVmW2ldKTsgaSsrKQorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCXJldHVybiBpOworCX0KKwlyZXR1cm4gMDsKIH0KIAogLyogaWYgbmV3X25hbWUgPT0gTlVMTCwgdGhlIHNlY3Rpb24gaXMgcmVtb3ZlZCBpbnN0ZWFkICovCkBAIC0xMTY2LDExICsxMjM1LDEzIEBACiAJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGNvbmZpZ19maWxlKSkgewogCQlpbnQgaTsKIAkJaW50IGxlbmd0aDsKKwkJY2hhciAqb3V0cHV0ID0gYnVmOwogCQlmb3IgKGkgPSAwOyBidWZbaV0gJiYgaXNzcGFjZShidWZbaV0pOyBpKyspCiAJCQk7IC8qIGRvIG5vdGhpbmcgKi8KIAkJaWYgKGJ1ZltpXSA9PSAnWycpIHsKIAkJCS8qIGl0J3MgYSBzZWN0aW9uICovCi0JCQlpZiAoc2VjdGlvbl9uYW1lX21hdGNoICgmYnVmW2krMV0sIG9sZF9uYW1lKSkgeworCQkJaW50IG9mZnNldCA9IHNlY3Rpb25fbmFtZV9tYXRjaCgmYnVmW2ldLCBvbGRfbmFtZSk7CisJCQlpZiAob2Zmc2V0ID4gMCkgewogCQkJCXJldCsrOwogCQkJCWlmIChuZXdfbmFtZSA9PSBOVUxMKSB7CiAJCQkJCXJlbW92ZSA9IDE7CkBAIC0xMTgxLDE0ICsxMjUyLDI5IEBACiAJCQkJCXJldCA9IHdyaXRlX2Vycm9yKGxvY2stPmZpbGVuYW1lKTsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQotCQkJCWNvbnRpbnVlOworCQkJCS8qCisJCQkJICogV2Ugd3JvdGUgb3V0IHRoZSBuZXcgc2VjdGlvbiwgd2l0aAorCQkJCSAqIGEgbmV3bGluZSwgbm93IHNraXAgdGhlIG9sZAorCQkJCSAqIHNlY3Rpb24ncyBsZW5ndGgKKwkJCQkgKi8KKwkJCQlvdXRwdXQgKz0gb2Zmc2V0ICsgaTsKKwkJCQlpZiAoc3RybGVuKG91dHB1dCkgPiAwKSB7CisJCQkJCS8qCisJCQkJCSAqIE1vcmUgY29udGVudCBtZWFucyB0aGVyZSdzCisJCQkJCSAqIGEgZGVjbGFyYXRpb24gdG8gcHV0IG9uIHRoZQorCQkJCQkgKiBuZXh0IGxpbmU7IGluZGVudCB3aXRoIGEKKwkJCQkJICogdGFiCisJCQkJCSAqLworCQkJCQlvdXRwdXQgLT0gMTsKKwkJCQkJb3V0cHV0WzBdID0gJ1x0JzsKKwkJCQl9CiAJCQl9CiAJCQlyZW1vdmUgPSAwOwogCQl9CiAJCWlmIChyZW1vdmUpCiAJCQljb250aW51ZTsKLQkJbGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCWlmICh3cml0ZV9pbl9mdWxsKG91dF9mZCwgYnVmLCBsZW5ndGgpICE9IGxlbmd0aCkgeworCQlsZW5ndGggPSBzdHJsZW4ob3V0cHV0KTsKKwkJaWYgKHdyaXRlX2luX2Z1bGwob3V0X2ZkLCBvdXRwdXQsIGxlbmd0aCkgIT0gbGVuZ3RoKSB7CiAJCQlyZXQgPSB3cml0ZV9lcnJvcihsb2NrLT5maWxlbmFtZSk7CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvY29uZmlnLm1hay5pbiBiL2NvbmZpZy5tYWsuaW4KaW5kZXggMTRkZmIyMS4uNjdiMTJmNyAxMDA2NDQKLS0tIGEvY29uZmlnLm1hay5pbgorKysgYi9jb25maWcubWFrLmluCkBAIC0xMyw5ICsxMyw5IEBACiBwcmVmaXggPSBAcHJlZml4QAogZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACiBiaW5kaXIgPSBAYmluZGlyQAotZ2l0ZXhlY2RpciA9IEBsaWJleGVjZGlyQC9naXQtY29yZS8KK2dpdGV4ZWNkaXIgPSBAbGliZXhlY2RpckAvZ2l0LWNvcmUKIGRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotdGVtcGxhdGVfZGlyID0gQGRhdGFkaXJAL2dpdC1jb3JlL3RlbXBsYXRlcy8KK3RlbXBsYXRlX2RpciA9IEBkYXRhZGlyQC9naXQtY29yZS90ZW1wbGF0ZXMKIAogbWFuZGlyPUBtYW5kaXJACiAKQEAgLTMwLDggKzMwLDExIEBACiBOT19PUEVOU1NMPUBOT19PUEVOU1NMQAogTk9fQ1VSTD1ATk9fQ1VSTEAKIE5PX0VYUEFUPUBOT19FWFBBVEAKK05PX0xJQkdFTl9IPUBOT19MSUJHRU5fSEAKIE5FRURTX0xJQklDT05WPUBORUVEU19MSUJJQ09OVkAKIE5FRURTX1NPQ0tFVD1ATkVFRFNfU09DS0VUQAorTkVFRFNfUkVTT0xWPUBORUVEU19SRVNPTFZACitORUVEU19MSUJHRU49QE5FRURTX0xJQkdFTkAKIE5PX1NZU19TRUxFQ1RfSD1ATk9fU1lTX1NFTEVDVF9IQAogTk9fRF9JTk9fSU5fRElSRU5UPUBOT19EX0lOT19JTl9ESVJFTlRACiBOT19EX1RZUEVfSU5fRElSRU5UPUBOT19EX1RZUEVfSU5fRElSRU5UQApAQCAtNDYsMTAgKzQ5LDEyIEBACiBOT19TRVRFTlY9QE5PX1NFVEVOVkAKIE5PX1VOU0VURU5WPUBOT19VTlNFVEVOVkAKIE5PX01LRFRFTVA9QE5PX01LRFRFTVBACitOT19NS1NURU1QUz1ATk9fTUtTVEVNUFNACiBOT19JQ09OVj1ATk9fSUNPTlZACiBPTERfSUNPTlY9QE9MRF9JQ09OVkAKIE5PX0RFRkxBVEVfQk9VTkQ9QE5PX0RFRkxBVEVfQk9VTkRACiBGUkVBRF9SRUFEU19ESVJFQ1RPUklFUz1ARlJFQURfUkVBRFNfRElSRUNUT1JJRVNACiBTTlBSSU5URl9SRVRVUk5TX0JPR1VTPUBTTlBSSU5URl9SRVRVUk5TX0JPR1VTQAogTk9fUFRIUkVBRFM9QE5PX1BUSFJFQURTQAorVEhSRUFERURfREVMVEFfU0VBUkNIPUBUSFJFQURFRF9ERUxUQV9TRUFSQ0hACiBQVEhSRUFEX0xJQlM9QFBUSFJFQURfTElCU0AKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCAwYTVmYzhjLi4zZjE5MjJkIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC00Miw2ICs0Miw4IEBACiAJaWYgdGVzdCAiJHdpdGh2YWwiID0gInllcyI7IHRoZW4gXAogCQlBQ19NU0dfV0FSTihbWW91IHNob3VsZCBwcm92aWRlIHBhdGggZm9yIC0td2l0aC0kMT1QQVRIXSk7IFwKIAllbHNlIFwKKwkJbTRfdG91cHBlcigkMSlfUEFUSD0kd2l0aHZhbDsgXAorCQlBQ19NU0dfTk9USUNFKFtTZXR0aW5nIG00X3RvdXBwZXIoJDEpX1BBVEggdG8gJHdpdGh2YWxdKTsgXAogCQlHSVRfQ09ORl9BUFBFTkRfTElORSgke1BST0dSQU19X1BBVEg9JHdpdGh2YWwpOyBcCiAJZmk7IFwKIGZpOyBcCkBAIC02MSw2ICs2Myw4IEBACiAJbTRfdG91cHBlcihOT18kMSk9OyBcCiBlbHNlIFwKIAltNF90b3VwcGVyKE5PXyQxKT07IFwKKwltNF90b3VwcGVyKCQxKURJUj0kd2l0aHZhbDsgXAorCUFDX01TR19OT1RJQ0UoW1NldHRpbmcgbTRfdG91cHBlcigkMSlESVIgdG8gJHdpdGh2YWxdKTsgXAogCUdJVF9DT05GX0FQUEVORF9MSU5FKCR7UEFDS0FHRX1ESVI9JHdpdGh2YWwpOyBcCiBmaSBcCiBdKSMgR0lUX1BBUlNFX1dJVEgKQEAgLTc2LDYgKzgwLDMyIEBACiAgIEFDX1NFQVJDSF9MSUJTKFskMV0sLAogICBbJDJdLFskM10pCiBdLFskM10pXSkKKworZG5sCitkbmwgR0lUX1NUQVNIX0ZMQUdTKEJBU0VQQVRIX1ZBUikKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIEFsbG93IGZvciBlYXN5IHN0YXNoaW5nIG9mIExERkxBR1MgYW5kIENQUEZMQUdTIGJlZm9yZSBydW5uaW5nCitkbmwgdGVzdHMgdGhhdCBtYXkgd2FudCB0byB0YWtlIHVzZXIgc2V0dGluZ3MgaW50byBhY2NvdW50LgorQUNfREVGVU4oW0dJVF9TVEFTSF9GTEFHU10sWworaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICBvbGRfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgIG9sZF9MREZMQUdTPSIkTERGTEFHUyIKKyAgIENQUEZMQUdTPSItSSQxL2luY2x1ZGUgJENQUEZMQUdTIgorICAgTERGTEFHUz0iLUwkMS8kbGliICRMREZMQUdTIgorZmkKK10pCisKK2RubAorZG5sIEdJVF9VTlNUQVNIX0ZMQUdTKEJBU0VQQVRIX1ZBUikKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFJlc3RvcmUgdGhlIHN0YXNoZWQgKkZMQUdTIHZhbHVlcy4KK0FDX0RFRlVOKFtHSVRfVU5TVEFTSF9GTEFHU10sWworaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICBDUFBGTEFHUz0iJG9sZF9DUFBGTEFHUyIKKyAgIExERkxBR1M9IiRvbGRfTERGTEFHUyIKK2ZpCitdKQorCiAjIyBTaXRlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBwcm9ncmFtcyAoYmVmb3JlIHRlc3RzKQogIyMgLS13aXRoLVBBQ0tBR0VbPUFSR10gYW5kIC0td2l0aG91dC1QQUNLQUdFCiAjCkBAIC04Niw5ICsxMTYsMTI0IEBACiAgW2lmIHRlc3QgIiR3aXRodmFsIiA9ICJubyIgfHwgdGVzdCAiJHdpdGh2YWwiID0gInllcyI7IHRoZW4gXAogCUFDX01TR19XQVJOKFtZb3Ugc2hvdWxkIHByb3ZpZGUgbmFtZSBmb3IgLS13aXRoLWxpYj1BUkddKTsgXAogZWxzZSBcCisJbGliPSR3aXRodmFsOyBcCisJQUNfTVNHX05PVElDRShbU2V0dGluZyBsaWIgdG8gJyRsaWInXSk7IFwKIAlHSVRfQ09ORl9BUFBFTkRfTElORShsaWI9JHdpdGh2YWwpOyBcCiBmaTsgXAogXSxbXSkKKworaWYgdGVzdCAteiAiJGxpYiI7IHRoZW4KKyAgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgbGliIHRvICdsaWInICh0aGUgZGVmYXVsdCldKQorICAgbGliPWxpYgorZmkKKworQUNfQVJHX0VOQUJMRShbcHRocmVhZHNdLAorIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRocmVhZHM9RkxBR1NdLAorICBbRkxBR1MgaXMgdGhlIHZhbHVlIHRvIHBhc3MgdG8gdGhlIGNvbXBpbGVyIHRvIGVuYWJsZSBQT1NJWCBUaHJlYWRzLl0KKyAgW1RoZSBkZWZhdWx0IGlmIEZMQUdTIGlzIG5vdCBzcGVjaWZpZWQgaXMgdG8gdHJ5IGZpcnN0IC1wdGhyZWFkXQorICBbYW5kIHRoZW4gLWxwdGhyZWFkLl0KKyAgWy0td2l0aG91dC1wdGhyZWFkcyB3aWxsIGRpc2FibGUgdGhyZWFkaW5nLl0pXSwKK1sKK2lmIHRlc3QgIngkZW5hYmxldmFsIiA9ICJ4eWVzIjsgdGhlbgorICAgQUNfTVNHX05PVElDRShbV2lsbCB0cnkgLXB0aHJlYWQgdGhlbiAtbHB0aHJlYWQgdG8gZW5hYmxlIFBPU0lYIFRocmVhZHNdKQorZWxpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgIT0gInhubyI7IHRoZW4KKyAgIFBUSFJFQURfQ0ZMQUdTPSRlbmFibGV2YWwKKyAgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgJyRQVEhSRUFEX0NGTEFHUycgYXMgdGhlIEZMQUdTIHRvIGVuYWJsZSBQT1NJWCBUaHJlYWRzXSkKK2Vsc2UKKyAgIEFDX01TR19OT1RJQ0UoW1BPU0lYIFRocmVhZHMgd2lsbCBiZSBkaXNhYmxlZC5dKQorICAgTk9fUFRIUkVBRFM9WWVzUGxlYXNlCisgICBVU0VSX05PUFRIUkVBRD0xCitmaV0sCitbCisgICBBQ19NU0dfTk9USUNFKFtXaWxsIHRyeSAtcHRocmVhZCB0aGVuIC1scHRocmVhZCB0byBlbmFibGUgUE9TSVggVGhyZWFkcy5dKQorXSkKKworIyMgU2l0ZSBjb25maWd1cmF0aW9uIChvdmVycmlkZSBhdXRvZGV0ZWN0aW9uKQorIyMgLS13aXRoLVBBQ0tBR0VbPUFSR10gYW5kIC0td2l0aG91dC1QQUNLQUdFCitBQ19NU0dfTk9USUNFKFtDSEVDS1MgZm9yIHNpdGUgY29uZmlndXJhdGlvbl0pCisjCisjIERlZmluZSBOT19TVk5fVEVTVFMgaWYgeW91IHdhbnQgdG8gc2tpcCB0aW1lLWNvbnN1bWluZyBTVk4gaW50ZXJvcGVyYWJpbGl0eQorIyB0ZXN0cy4gIFRoZXNlIHRlc3RzIHRha2UgdXAgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGhlIHRvdGFsIHRlc3QgdGltZQorIyBidXQgYXJlIG5vdCBuZWVkZWQgdW5sZXNzIHlvdSBwbGFuIHRvIHRhbGsgdG8gU1ZOIHJlcG9zLgorIworIyBEZWZpbmUgTU9aSUxMQV9TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZyBtYWtlIHRvIG1ha2UgdXNlIG9mCisjIGEgYnVuZGxlZCBTSEExIHJvdXRpbmUgY29taW5nIGZyb20gTW96aWxsYS4gSXQgaXMgR1BMJ2QgYW5kIHNob3VsZCBiZSBmYXN0CisjIG9uIG5vbi14ODYgYXJjaGl0ZWN0dXJlcyAoZS5nLiBQb3dlclBDKSwgd2hpbGUgdGhlIE9wZW5TU0wgdmVyc2lvbiAoZGVmYXVsdAorIyBjaG9pY2UpIGhhcyB2ZXJ5IGZhc3QgdmVyc2lvbiBvcHRpbWl6ZWQgZm9yIGk1ODYuCisjCisjIERlZmluZSBQUENfU0hBMSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHJ1bm5pbmcgbWFrZSB0byBtYWtlIHVzZSBvZgorIyBhIGJ1bmRsZWQgU0hBMSByb3V0aW5lIG9wdGltaXplZCBmb3IgUG93ZXJQQy4KKyMKKyMgRGVmaW5lIEFSTV9TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZyBtYWtlIHRvIG1ha2UgdXNlIG9mCisjIGEgYnVuZGxlZCBTSEExIHJvdXRpbmUgb3B0aW1pemVkIGZvciBBUk0uCisjCisjIERlZmluZSBOT19PUEVOU1NMIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdSBkbyBub3QgaGF2ZSBPcGVuU1NMLgorIyBUaGlzIGFsc28gaW1wbGllcyBNT1pJTExBX1NIQTEuCisjCisjIERlZmluZSBPUEVOU1NMRElSPS9mb28vYmFyIGlmIHlvdXIgb3BlbnNzbCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlIGluCisjIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4KK0FDX0FSR19XSVRIKG9wZW5zc2wsCitBU19IRUxQX1NUUklORyhbLS13aXRoLW9wZW5zc2xdLFt1c2UgT3BlblNTTCBsaWJyYXJ5IChkZWZhdWx0IGlzIFlFUyldKQorQVNfSEVMUF9TVFJJTkcoW10sICAgICAgICAgICAgICBbQVJHIGNhbiBiZSBwcmVmaXggZm9yIG9wZW5zc2wgbGlicmFyeSBhbmQgaGVhZGVyc10pLFwKK0dJVF9QQVJTRV9XSVRIKG9wZW5zc2wpKQorIworIyBEZWZpbmUgTk9fQ1VSTCBpZiB5b3UgZG8gbm90IGhhdmUgY3VybCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdWxsIGFuZAorIyBnaXQtaHR0cC1wdXNoIGFyZSBub3QgYnVpbHQsIGFuZCB5b3UgY2Fubm90IHVzZSBodHRwOi8vIGFuZCBodHRwczovLworIyB0cmFuc3BvcnRzLgorIworIyBEZWZpbmUgQ1VSTERJUj0vZm9vL2JhciBpZiB5b3VyIGN1cmwgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBpbgorIyAvZm9vL2Jhci9pbmNsdWRlIGFuZCAvZm9vL2Jhci9saWIgZGlyZWN0b3JpZXMuCitBQ19BUkdfV0lUSChjdXJsLAorQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1jdXJsXSxbc3VwcG9ydCBodHRwKHMpOi8vIHRyYW5zcG9ydHMgKGRlZmF1bHQgaXMgWUVTKV0pCitBU19IRUxQX1NUUklORyhbXSwgICAgICAgICAgIFtBUkcgY2FuIGJlIGFsc28gcHJlZml4IGZvciBjdXJsIGxpYnJhcnkgYW5kIGhlYWRlcnNdKSwKK0dJVF9QQVJTRV9XSVRIKGN1cmwpKQorIworIyBEZWZpbmUgTk9fRVhQQVQgaWYgeW91IGRvIG5vdCBoYXZlIGV4cGF0IGluc3RhbGxlZC4gIGdpdC1odHRwLXB1c2ggaXMKKyMgbm90IGJ1aWx0LCBhbmQgeW91IGNhbm5vdCBwdXNoIHVzaW5nIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIHRyYW5zcG9ydHMuCisjCisjIERlZmluZSBFWFBBVERJUj0vZm9vL2JhciBpZiB5b3VyIGV4cGF0IGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyBhcmUgaW4KKyMgL2Zvby9iYXIvaW5jbHVkZSBhbmQgL2Zvby9iYXIvbGliIGRpcmVjdG9yaWVzLgorQUNfQVJHX1dJVEgoZXhwYXQsCitBU19IRUxQX1NUUklORyhbLS13aXRoLWV4cGF0XSwKK1tzdXBwb3J0IGdpdC1wdXNoIHVzaW5nIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIHRyYW5zcG9ydHMgdmlhIFdlYkRBViAoZGVmYXVsdCBpcyBZRVMpXSkKK0FTX0hFTFBfU1RSSU5HKFtdLCAgICAgICAgICAgIFtBUkcgY2FuIGJlIGFsc28gcHJlZml4IGZvciBleHBhdCBsaWJyYXJ5IGFuZCBoZWFkZXJzXSksCitHSVRfUEFSU0VfV0lUSChleHBhdCkpCisjCisjIERlZmluZSBOT19GSU5LIGlmIHlvdSBhcmUgYnVpbGRpbmcgb24gRGFyd2luL01hYyBPUyBYLCBoYXZlIEZpbmsKKyMgaW5zdGFsbGVkIGluIC9zdywgYnV0IGRvbid0IHdhbnQgR0lUIHRvIGxpbmsgYWdhaW5zdCBhbnkgbGlicmFyaWVzCisjIGluc3RhbGxlZCB0aGVyZS4gIElmIGRlZmluZWQgeW91IG1heSBzcGVjaWZ5IHlvdXIgb3duIChvciBGaW5rJ3MpCisjIGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kIGxpYnJhcnkgZGlyZWN0b3JpZXMgYnkgZGVmaW5pbmcgQ0ZMQUdTCisjIGFuZCBMREZMQUdTIGFwcHJvcHJpYXRlbHkuCisjCisjIERlZmluZSBOT19EQVJXSU5fUE9SVFMgaWYgeW91IGFyZSBidWlsZGluZyBvbiBEYXJ3aW4vTWFjIE9TIFgsCisjIGhhdmUgRGFyd2luUG9ydHMgaW5zdGFsbGVkIGluIC9vcHQvbG9jYWwsIGJ1dCBkb24ndCB3YW50IEdJVCB0bworIyBsaW5rIGFnYWluc3QgYW55IGxpYnJhcmllcyBpbnN0YWxsZWQgdGhlcmUuICBJZiBkZWZpbmVkIHlvdSBtYXkKKyMgc3BlY2lmeSB5b3VyIG93biAob3IgRGFyd2luUG9ydCdzKSBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZAorIyBsaWJyYXJ5IGRpcmVjdG9yaWVzIGJ5IGRlZmluaW5nIENGTEFHUyBhbmQgTERGTEFHUyBhcHByb3ByaWF0ZWx5LgorIworIyBEZWZpbmUgTk9fTU1BUCBpZiB5b3Ugd2FudCB0byBhdm9pZCBtbWFwLgorIworIyBEZWZpbmUgTk9fSUNPTlYgaWYgeW91ciBsaWJjIGRvZXMgbm90IHByb3Blcmx5IHN1cHBvcnQgaWNvbnYuCitBQ19BUkdfV0lUSChpY29udiwKK0FTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtaWNvbnZdLAorW2lmIHlvdXIgYXJjaGl0ZWN0dXJlIGRvZXNuJ3QgcHJvcGVybHkgc3VwcG9ydCBpY29udl0pCitBU19IRUxQX1NUUklORyhbLS13aXRoLWljb252PVBBVEhdLAorW1BBVEggaXMgcHJlZml4IGZvciBsaWJpY29udiBsaWJyYXJ5IGFuZCBoZWFkZXJzXSkKK0FTX0hFTFBfU1RSSU5HKFtdLAorW3VzZWQgb25seSBpZiB5b3UgbmVlZCBsaW5raW5nIHdpdGggbGliaWNvbnZdKSwKK0dJVF9QQVJTRV9XSVRIKGljb252KSkKKworIyMgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSBhbmQgLS1kaXNhYmxlLUZFQVRVUkUKKyMKKyMgRGVmaW5lIFVTRV9OU0VDIGJlbG93IGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMKKyMgYW5kIGN0aW1lcy4gTm90ZSB0aGF0IHlvdSBuZWVkIHJlY2VudCBnbGliYyAoYXQgbGVhc3QgMi4yLjQpIGZvciB0aGlzLCBhbmQKKyMgaXQgd2lsbCBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5CisjIHJhbmRvbWx5IGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kCisjIHRpbWVzIChteSBleHQzIGRvZXNuJ3QpLgorIworIyBEZWZpbmUgVVNFX1NUREVWIGJlbG93IGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRldmljZQorIyBjaGFuZ2UgYmVpbmcgY29uc2lkZXJlZCBhbiBpbm9kZSBjaGFuZ2UgZnJvbSB0aGUgdXBkYXRlLWluZGV4IHBlcnNwZWN0aXZlLgorCiAjCiAjIERlZmluZSBTSEVMTF9QQVRIIHRvIHByb3ZpZGUgcGF0aCB0byBzaGVsbC4KIEdJVF9BUkdfU0VUX1BBVEgoc2hlbGwpCkBAIC0xMTQsMzEgKzI1OSwzMSBAQAogIwogQUNfUFJPR19DQyhbY2MgZ2NjXSkKICMgd2hpY2ggc3dpdGNoIHRvIHBhc3MgcnVudGltZSBwYXRoIHRvIGR5bmFtaWMgbGlicmFyaWVzIHRvIHRoZSBsaW5rZXIKLUFDX0NBQ0hFX0NIRUNLKFtpZiBsaW5rZXIgc3VwcG9ydHMgLVJdLCBsZF9kYXNociwgWworQUNfQ0FDSEVfQ0hFQ0soW2lmIGxpbmtlciBzdXBwb3J0cyAtUl0sIGdpdF9jdl9sZF9kYXNociwgWwogICAgU0FWRV9MREZMQUdTPSIke0xERkxBR1N9IgogICAgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9IC1SIC8iCi0gICBBQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0oW10sIFtdKSwgW2xkX2Rhc2hyPXllc10sIFtsZF9kYXNocj1ub10pCisgICBBQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0oW10sIFtdKSwgW2dpdF9jdl9sZF9kYXNocj15ZXNdLCBbZ2l0X2N2X2xkX2Rhc2hyPW5vXSkKICAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSIKIF0pCi1pZiB0ZXN0ICIkbGRfZGFzaHIiID0gInllcyI7IHRoZW4KK2lmIHRlc3QgIiRnaXRfY3ZfbGRfZGFzaHIiID0gInllcyI7IHRoZW4KICAgIEFDX1NVQlNUKENDX0xEX0RZTlBBVEgsIFstUl0pCiBlbHNlCi0gICBBQ19DQUNIRV9DSEVDSyhbaWYgbGlua2VyIHN1cHBvcnRzIC1XbCwtcnBhdGgsXSwgbGRfd2xfcnBhdGgsIFsKKyAgIEFDX0NBQ0hFX0NIRUNLKFtpZiBsaW5rZXIgc3VwcG9ydHMgLVdsLC1ycGF0aCxdLCBnaXRfY3ZfbGRfd2xfcnBhdGgsIFsKICAgICAgIFNBVkVfTERGTEFHUz0iJHtMREZMQUdTfSIKICAgICAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSAtV2wsLXJwYXRoLC8iCi0gICAgICBBQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0oW10sIFtdKSwgW2xkX3dsX3JwYXRoPXllc10sIFtsZF93bF9ycGF0aD1ub10pCisgICAgICBBQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0oW10sIFtdKSwgW2dpdF9jdl9sZF93bF9ycGF0aD15ZXNdLCBbZ2l0X2N2X2xkX3dsX3JwYXRoPW5vXSkKICAgICAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSIKICAgIF0pCi0gICBpZiB0ZXN0ICIkbGRfd2xfcnBhdGgiID0gInllcyI7IHRoZW4KKyAgIGlmIHRlc3QgIiRnaXRfY3ZfbGRfd2xfcnBhdGgiID0gInllcyI7IHRoZW4KICAgICAgIEFDX1NVQlNUKENDX0xEX0RZTlBBVEgsIFstV2wsLXJwYXRoLF0pCiAgICBlbHNlCi0gICAgICBBQ19DQUNIRV9DSEVDSyhbaWYgbGlua2VyIHN1cHBvcnRzIC1ycGF0aF0sIGxkX3JwYXRoLCBbCisgICAgICBBQ19DQUNIRV9DSEVDSyhbaWYgbGlua2VyIHN1cHBvcnRzIC1ycGF0aF0sIGdpdF9jdl9sZF9ycGF0aCwgWwogICAgICAgICAgU0FWRV9MREZMQUdTPSIke0xERkxBR1N9IgogICAgICAgICAgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9IC1ycGF0aCAvIgotICAgICAgICAgQUNfTElOS19JRkVMU0UoQUNfTEFOR19QUk9HUkFNKFtdLCBbXSksIFtsZF9ycGF0aD15ZXNdLCBbbGRfcnBhdGg9bm9dKQorICAgICAgICAgQUNfTElOS19JRkVMU0UoQUNfTEFOR19QUk9HUkFNKFtdLCBbXSksIFtnaXRfY3ZfbGRfcnBhdGg9eWVzXSwgW2dpdF9jdl9sZF9ycGF0aD1ub10pCiAgICAgICAgICBMREZMQUdTPSIke1NBVkVfTERGTEFHU30iCiAgICAgICBdKQotICAgICAgaWYgdGVzdCAiJGxkX3JwYXRoIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkZ2l0X2N2X2xkX3JwYXRoIiA9ICJ5ZXMiOyB0aGVuCiAgICAgICAgICBBQ19TVUJTVChDQ19MRF9EWU5QQVRILCBbLXJwYXRoXSkKICAgICAgIGVsc2UKICAgICAgICAgIEFDX01TR19XQVJOKFtsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBydW50aW1lIHBhdGggdG8gZHluYW1pYyBsaWJyYXJpZXNdKQpAQCAtMTY3LDcgKzMxMiw3IEBACiBBQ19DSEVDS19QUk9HUyhBU0NJSURPQywgW2FzY2lpZG9jXSkKIGlmIHRlc3QgLW4gIiRBU0NJSURPQyI7IHRoZW4KIAlBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhc2NpaWRvYyB2ZXJzaW9uXSkKLQlhc2NpaWRvY192ZXJzaW9uPWAkQVNDSUlET0MgLS12ZXJzaW9uIDI+JjFgCisJYXNjaWlkb2NfdmVyc2lvbj1gJEFTQ0lJRE9DIC0tdmVyc2lvbiAyPi9kZXYvbnVsbGAKIAljYXNlICIke2FzY2lpZG9jX3ZlcnNpb259IiBpbgogCWFzY2lpZG9jJyAnOCopCiAJCUFTQ0lJRE9DOD1ZZXNQbGVhc2UKQEAgLTE5MSwzMyArMzM2LDU4IEBACiAjCiAjIERlZmluZSBOT19PUEVOU1NMIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdSBkbyBub3QgaGF2ZSBPcGVuU1NMLgogIyBEZWZpbmUgTkVFRFNfU1NMX1dJVEhfQ1JZUFRPIGlmIHlvdSBuZWVkIC1sY3J5cHRvIHdpdGggLWxzc2wgKERhcndpbikuCisKK0dJVF9TVEFTSF9GTEFHUygkT1BFTlNTTERJUikKKwogQUNfQ0hFQ0tfTElCKFtjcnlwdG9dLCBbU0hBMV9Jbml0XSwKIFtORUVEU19TU0xfV0lUSF9DUllQVE89XSwKIFtBQ19DSEVDS19MSUIoW3NzbF0sIFtTSEExX0luaXRdLAotIFtORUVEU19TU0xfV0lUSF9DUllQVE89WWVzUGxlYXNlCi0gIE5FRURTX1NTTF9XSVRIX0NSWVBUTz1dLAotIFtOT19PUEVOU1NMPVllc1BsZWFzZV0pXSkKKyBbTkVFRFNfU1NMX1dJVEhfQ1JZUFRPPVllc1BsZWFzZV0sCisgW05FRURTX1NTTF9XSVRIX0NSWVBUTz0gTk9fT1BFTlNTTD1ZZXNQbGVhc2VdKV0pCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRPUEVOU1NMRElSKQorCiBBQ19TVUJTVChORUVEU19TU0xfV0lUSF9DUllQVE8pCiBBQ19TVUJTVChOT19PUEVOU1NMKQorCiAjCiAjIERlZmluZSBOT19DVVJMIGlmIHlvdSBkbyBub3QgaGF2ZSBsaWJjdXJsIGluc3RhbGxlZC4gIGdpdC1odHRwLXB1bGwgYW5kCiAjIGdpdC1odHRwLXB1c2ggYXJlIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgdXNlIGh0dHA6Ly8gYW5kIGh0dHBzOi8vCiAjIHRyYW5zcG9ydHMuCisKK0dJVF9TVEFTSF9GTEFHUygkQ1VSTERJUikKKwogQUNfQ0hFQ0tfTElCKFtjdXJsXSwgW2N1cmxfZ2xvYmFsX2luaXRdLAogW05PX0NVUkw9XSwKIFtOT19DVVJMPVllc1BsZWFzZV0pCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRDVVJMRElSKQorCiBBQ19TVUJTVChOT19DVVJMKQorCiAjCiAjIERlZmluZSBOT19FWFBBVCBpZiB5b3UgZG8gbm90IGhhdmUgZXhwYXQgaW5zdGFsbGVkLiAgZ2l0LWh0dHAtcHVzaCBpcwogIyBub3QgYnVpbHQsIGFuZCB5b3UgY2Fubm90IHB1c2ggdXNpbmcgaHR0cDovLyBhbmQgaHR0cHM6Ly8gdHJhbnNwb3J0cy4KKworR0lUX1NUQVNIX0ZMQUdTKCRFWFBBVERJUikKKwogQUNfQ0hFQ0tfTElCKFtleHBhdF0sIFtYTUxfUGFyc2VyQ3JlYXRlXSwKIFtOT19FWFBBVD1dLAogW05PX0VYUEFUPVllc1BsZWFzZV0pCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRFWFBBVERJUikKKwogQUNfU1VCU1QoTk9fRVhQQVQpCisKICMKICMgRGVmaW5lIE5FRURTX0xJQklDT05WIGlmIGxpbmtpbmcgd2l0aCBsaWJjIGlzIG5vdCBlbm91Z2ggKERhcndpbiBhbmQKICMgc29tZSBTb2xhcmlzIGluc3RhbGxhdGlvbnMpLgogIyBEZWZpbmUgTk9fSUNPTlYgaWYgbmVpdGhlciBsaWJjIG5vciBsaWJpY29udiBzdXBwb3J0IGljb252LgorCitpZiB0ZXN0IC16ICIkTk9fSUNPTlYiOyB0aGVuCisKK0dJVF9TVEFTSF9GTEFHUygkSUNPTlZESVIpCisKIEFDX0RFRlVOKFtJQ09OVlRFU1RfU1JDXSwgWwogI2luY2x1ZGUgPGljb252Lmg+CiAKQEAgLTIyNywyNSArMzk3LDUyIEBACiAJcmV0dXJuIDA7CiB9CiBdKQotQUNfTVNHX0NIRUNLSU5HKFtmb3IgaWNvbnYgaW4gLWxjXSkKLUFDX0xJTktfSUZFTFNFKElDT05WVEVTVF9TUkMsCisKK2lmIHRlc3QgLW4gIiRJQ09OVkRJUiI7IHRoZW4KKyAgIGxpYl9vcmRlcj0iLWxpY29udiAtbGMiCitlbHNlCisgICBsaWJfb3JkZXI9Ii1sYyAtbGljb252IgorZmkKKworTk9fSUNPTlY9WWVzUGxlYXNlCisKK2ZvciBsIGluICRsaWJfb3JkZXI7IGRvCisgICAgaWYgdGVzdCAiJGwiID0gIi1saWNvbnYiOyB0aGVuCisgICAgICAgTkVFRFNfTElCSUNPTlY9WWVzUGxlYXNlCisgICAgZWxzZQorICAgICAgIE5FRURTX0xJQklDT05WPQorICAgIGZpCisKKyAgICBvbGRfTElCUz0iJExJQlMiCisgICAgTElCUz0iJExJQlMgJGwiCisgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgaWNvbnYgaW4gJGxdKQorICAgIEFDX0xJTktfSUZFTFNFKElDT05WVEVTVF9TUkMsCiAJW0FDX01TR19SRVNVTFQoW3llc10pCi0JTkVFRFNfTElCSUNPTlY9XSwKLQlbQUNfTVNHX1JFU1VMVChbbm9dKQotCW9sZF9MSUJTPSIkTElCUyIKLQlMSUJTPSIkTElCUyAtbGljb252IgotCUFDX01TR19DSEVDS0lORyhbZm9yIGljb252IGluIC1saWNvbnZdKQotCUFDX0xJTktfSUZFTFNFKElDT05WVEVTVF9TUkMsCi0JCVtBQ19NU0dfUkVTVUxUKFt5ZXNdKQotCQlORUVEU19MSUJJQ09OVj1ZZXNQbGVhc2VdLAotCQlbQUNfTVNHX1JFU1VMVChbbm9dKQotCQlOT19JQ09OVj1ZZXNQbGVhc2VdKQotCUxJQlM9IiRvbGRfTElCUyJdKQorCU5PX0lDT05WPQorCWJyZWFrXSwKKwlbQUNfTVNHX1JFU1VMVChbbm9dKV0pCisgICAgTElCUz0iJG9sZF9MSUJTIgorZG9uZQorCisjaW4gY2FzZSBvZiBicmVhaworTElCUz0iJG9sZF9MSUJTIgorCitHSVRfVU5TVEFTSF9GTEFHUygkSUNPTlZESVIpCisKIEFDX1NVQlNUKE5FRURTX0xJQklDT05WKQogQUNfU1VCU1QoTk9fSUNPTlYpCi10ZXN0IC1uICIkTkVFRFNfTElCSUNPTlYiICYmIExJQlM9IiRMSUJTIC1saWNvbnYiCisKK2lmIHRlc3QgLW4gIiROT19JQ09OViI7IHRoZW4KKyAgICBORUVEU19MSUJJQ09OVj0KK2ZpCisKK2ZpCisKICMKICMgRGVmaW5lIE5PX0RFRkxBVEVfQk9VTkQgaWYgZGVmbGF0ZUJvdW5kIGlzIG1pc3NpbmcgZnJvbSB6bGliLgorCitHSVRfU1RBU0hfRkxBR1MoJFpMSUJfUEFUSCkKKwogQUNfREVGVU4oW1pMSUJURVNUX1NSQ10sIFsKICNpbmNsdWRlIDx6bGliLmg+CiAKQEAgLTI2Myw3ICs0NjAsMTEgQEAKIAlbQUNfTVNHX1JFU1VMVChbbm9dKQogCU5PX0RFRkxBVEVfQk9VTkQ9eWVzXSkKIExJQlM9IiRvbGRfTElCUyIKKworR0lUX1VOU1RBU0hfRkxBR1MoJFpMSUJfUEFUSCkKKwogQUNfU1VCU1QoTk9fREVGTEFURV9CT1VORCkKKwogIwogIyBEZWZpbmUgTkVFRFNfU09DS0VUIGlmIGxpbmtpbmcgd2l0aCBsaWJjIGlzIG5vdCBlbm91Z2ggKFN1bk9TLAogIyBQYXRyaWNrIE1hdXJpdHopLgpAQCAtMjczLDYgKzQ3NCwyMSBAQAogQUNfU1VCU1QoTkVFRFNfU09DS0VUKQogdGVzdCAtbiAiJE5FRURTX1NPQ0tFVCIgJiYgTElCUz0iJExJQlMgLWxzb2NrZXQiCiAKKyMKKyMgRGVmaW5lIE5FRURTX1JFU09MViBpZiBsaW5raW5nIHdpdGggLWxuc2wgYW5kL29yIC1sc29ja2V0IGlzIG5vdCBlbm91Z2guCisjIE5vdGFibHkgb24gU29sYXJpcyBoc3RyZXJyb3IgcmVzaWRlcyBpbiBsaWJyZXNvbHYgYW5kIG9uIFNvbGFyaXMgNworIyBpbmV0X250b3AgYW5kIGluZXRfcHRvbiBhZGRpdGlvbmFsbHkgcmVzaWRlIHRoZXJlLgorQUNfQ0hFQ0tfTElCKFtjXSwgW2hzdHJlcnJvcl0sCitbTkVFRFNfUkVTT0xWPV0sCitbTkVFRFNfUkVTT0xWPVllc1BsZWFzZV0pCitBQ19TVUJTVChORUVEU19SRVNPTFYpCit0ZXN0IC1uICIkTkVFRFNfUkVTT0xWIiAmJiBMSUJTPSIkTElCUyAtbHJlc29sdiIKKworQUNfQ0hFQ0tfTElCKFtjXSwgW2Jhc2VuYW1lXSwKK1tORUVEU19MSUJHRU49XSwKK1tORUVEU19MSUJHRU49WWVzUGxlYXNlXSkKK0FDX1NVQlNUKE5FRURTX0xJQkdFTikKK3Rlc3QgLW4gIiRORUVEU19MSUJHRU4iICYmIExJQlM9IiRMSUJTIC1sZ2VuIgogCiAjIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KIEFDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgaGVhZGVyIGZpbGVzXSkKQEAgLTI5NywxMyArNTEzLDE4IEBACiAJcmV0dXJuIDA7CiB9CiBdXSkKKworR0lUX1NUQVNIX0ZMQUdTKCRJQ09OVkRJUikKKwogQUNfTVNHX0NIRUNLSU5HKFtmb3Igb2xkIGljb252KCldKQogQUNfQ09NUElMRV9JRkVMU0UoT0xESUNPTlZURVNUX1NSQywKIAlbQUNfTVNHX1JFU1VMVChbbm9dKV0sCiAJW0FDX01TR19SRVNVTFQoW3llc10pCiAJT0xEX0lDT05WPVVuZm9ydHVuYXRlbHlZZXNdKQotQUNfU1VCU1QoT0xEX0lDT05WKQogCitHSVRfVU5TVEFTSF9GTEFHUygkSUNPTlZESVIpCisKK0FDX1NVQlNUKE9MRF9JQ09OVikKIAogIyMgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KIEFDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3NdKQpAQCAtNDI4LDYgKzY0OSwxMiBAQAogIyMgKGluIGRlZmF1bHQgQyBsaWJyYXJ5IGFuZCBsaWJyYXJpZXMgY2hlY2tlZCBieSBBQ19DSEVDS19MSUIpCiBBQ19NU0dfTk9USUNFKFtDSEVDS1MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zXSkKICMKKyMgRGVmaW5lIE5PX0xJQkdFTl9IIGlmIHlvdSBkb24ndCBoYXZlIGxpYmdlbi5oLgorQUNfQ0hFQ0tfSEVBREVSKFtsaWJnZW4uaF0sCitbTk9fTElCR0VOX0g9XSwKK1tOT19MSUJHRU5fSD1ZZXNQbGVhc2VdKQorQUNfU1VCU1QoTk9fTElCR0VOX0gpCisjCiAjIERlZmluZSBOT19TVFJDQVNFU1RSIGlmIHlvdSBkb24ndCBoYXZlIHN0cmNhc2VzdHIuCiBHSVRfQ0hFQ0tfRlVOQyhzdHJjYXNlc3RyLAogW05PX1NUUkNBU0VTVFI9XSwKQEAgLTQ3OCw2ICs3MDUsMTMgQEAKIFtOT19NS0RURU1QPVllc1BsZWFzZV0pCiBBQ19TVUJTVChOT19NS0RURU1QKQogIworIyBEZWZpbmUgTk9fTUtTVEVNUFMgaWYgeW91IGRvbid0IGhhdmUgbWtzdGVtcHMgaW4gdGhlIEMgbGlicmFyeS4KK0dJVF9DSEVDS19GVU5DKG1rc3RlbXBzLAorW05PX01LU1RFTVBTPV0sCitbTk9fTUtTVEVNUFM9WWVzUGxlYXNlXSkKK0FDX1NVQlNUKE5PX01LU1RFTVBTKQorIworIwogIyBEZWZpbmUgTk9fTU1BUCBpZiB5b3Ugd2FudCB0byBhdm9pZCBtbWFwLgogIwogIyBEZWZpbmUgTk9fSUNPTlYgaWYgeW91ciBsaWJjIGRvZXMgbm90IHByb3Blcmx5IHN1cHBvcnQgaWNvbnYuCkBAIC00OTIsMTExICs3MjYsNjYgQEAKICMKICMgRGVmaW5lIE5PX1BUSFJFQURTIGlmIHdlIGRvIG5vdCBoYXZlIHB0aHJlYWRzCiAjCi0jIERlZmluZSBQVEhSRUFEX0xJQlMgdG8gdGhlIGxpbmtlciBmbGFnIHVzZWQgZm9yIFB0aHJlYWQgc3VwcG9ydC4KLUFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKLSAgW1sjaW5jbHVkZSA8cHRocmVhZC5oPl1dLAotICBbW3B0aHJlYWRfbXV0ZXhfdCB0ZXN0X211dGV4O11dCi0pXSkKLSR7Q0N9IC1wdGhyZWFkIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QubyA+IC9kZXYvbnVsbCAyPiYxCi1pZiB0ZXN0ICQ/IC1lcSAwO3RoZW4KLSBQVEhSRUFEX0xJQlM9Ii1wdGhyZWFkIgorIyBEZWZpbmUgUFRIUkVBRF9MSUJTIHRvIHRoZSBsaW5rZXIgZmxhZyB1c2VkIGZvciBQdGhyZWFkIHN1cHBvcnQgYW5kIGRlZmluZQorIyBUSFJFQURFRF9ERUxUQV9TRUFSQ0ggaWYgUHRocmVhZHMgYXJlIGF2YWlsYWJsZS4KK0FDX0RFRlVOKFtQVEhSRUFEVEVTVF9TUkNdLCBbCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCitpbnQgbWFpbih2b2lkKQoreworCXB0aHJlYWRfbXV0ZXhfdCB0ZXN0X211dGV4OworCXJldHVybiAoMCk7Cit9CitdKQorCitkbmwgQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKAorZG5sICAgW1sjaW5jbHVkZSA8cHRocmVhZC5oPl1dLAorZG5sICAgW1twdGhyZWFkX211dGV4X3QgdGVzdF9tdXRleDtdXQorZG5sICldKQorCitOT19QVEhSRUFEUz1VbmZvcnR1bmF0ZWx5WWVzCitUSFJFQURFRF9ERUxUQV9TRUFSQ0g9CitQVEhSRUFEX0xJQlM9CisKK2lmIHRlc3QgLW4gIiRVU0VSX05PUFRIUkVBRCI7IHRoZW4KKyAgIEFDX01TR19OT1RJQ0UoW1NraXBwaW5nIFBPU0lYIFRocmVhZHMgYXQgdXNlciByZXF1ZXN0Ll0pCisjIGhhbmRsZSB0aGVzZSBzZXBhcmF0ZWx5IHNpbmNlIFBUSFJFQURfQ0ZMQUdTIGNvdWxkIGJlICctbHB0aHJlYWRzCisjIC1EX1JFRU5UUkFOVCcgb3Igc29tZSBzdWNoLgorZWxpZiB0ZXN0IC16ICIkUFRIUkVBRF9DRkxBR1MiOyB0aGVuCisgIGZvciBvcHQgaW4gLXB0aHJlYWQgLWxwdGhyZWFkOyBkbworICAgICBvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBDRkxBR1M9IiRvcHQgJENGTEFHUyIKKyAgICAgQUNfTVNHX0NIRUNLSU5HKFtDaGVja2luZyBmb3IgUE9TSVggVGhyZWFkcyB3aXRoICckb3B0J10pCisgICAgIEFDX0xJTktfSUZFTFNFKFBUSFJFQURURVNUX1NSQywKKwlbQUNfTVNHX1JFU1VMVChbeWVzXSkKKwkJTk9fUFRIUkVBRFM9CisJCVBUSFJFQURfTElCUz0iJG9wdCIKKwkJVEhSRUFERURfREVMVEFfU0VBUkNIPVllc1BsZWFzZQorCQlicmVhaworCV0sCisJW0FDX01TR19SRVNVTFQoW25vXSldKQorICAgICAgQ0ZMQUdTPSIkb2xkX0NGTEFHUyIKKyAgZG9uZQogZWxzZQotICR7Q0N9IC1scHRocmVhZCBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0Lm8gPiAvZGV2L251bGwgMj4mMQotIGlmIHRlc3QgJD8gLWVxIDA7dGhlbgotICBQVEhSRUFEX0xJQlM9Ii1scHRocmVhZCIKLSBlbHNlCi0gIE5PX1BUSFJFQURTPVVuZm9ydHVuYXRlbHlZZXMKLSBmaQorICBvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRQVEhSRUFEX0NGTEFHUyAkQ0ZMQUdTIgorICBBQ19NU0dfQ0hFQ0tJTkcoW0NoZWNraW5nIGZvciBQT1NJWCBUaHJlYWRzIHdpdGggJyRQVEhSRUFEX0NGTEFHUyddKQorICBBQ19MSU5LX0lGRUxTRShQVEhSRUFEVEVTVF9TUkMsCisJW0FDX01TR19SRVNVTFQoW3llc10pCisJCU5PX1BUSFJFQURTPQorCQlQVEhSRUFEX0xJQlM9IiRQVEhSRUFEX0NGTEFHUyIKKwkJVEhSRUFERURfREVMVEFfU0VBUkNIPVllc1BsZWFzZQorCV0sCisJW0FDX01TR19SRVNVTFQoW25vXSldKQorCisgIENGTEFHUz0iJG9sZF9DRkxBR1MiCiBmaQorCitDRkxBR1M9IiRvbGRfQ0ZMQUdTIgorCiBBQ19TVUJTVChQVEhSRUFEX0xJQlMpCiBBQ19TVUJTVChOT19QVEhSRUFEUykKLQotIyMgU2l0ZSBjb25maWd1cmF0aW9uIChvdmVycmlkZSBhdXRvZGV0ZWN0aW9uKQotIyMgLS13aXRoLVBBQ0tBR0VbPUFSR10gYW5kIC0td2l0aG91dC1QQUNLQUdFCi1BQ19NU0dfTk9USUNFKFtDSEVDS1MgZm9yIHNpdGUgY29uZmlndXJhdGlvbl0pCi0jCi0jIERlZmluZSBOT19TVk5fVEVTVFMgaWYgeW91IHdhbnQgdG8gc2tpcCB0aW1lLWNvbnN1bWluZyBTVk4gaW50ZXJvcGVyYWJpbGl0eQotIyB0ZXN0cy4gIFRoZXNlIHRlc3RzIHRha2UgdXAgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGhlIHRvdGFsIHRlc3QgdGltZQotIyBidXQgYXJlIG5vdCBuZWVkZWQgdW5sZXNzIHlvdSBwbGFuIHRvIHRhbGsgdG8gU1ZOIHJlcG9zLgotIwotIyBEZWZpbmUgTU9aSUxMQV9TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZyBtYWtlIHRvIG1ha2UgdXNlIG9mCi0jIGEgYnVuZGxlZCBTSEExIHJvdXRpbmUgY29taW5nIGZyb20gTW96aWxsYS4gSXQgaXMgR1BMJ2QgYW5kIHNob3VsZCBiZSBmYXN0Ci0jIG9uIG5vbi14ODYgYXJjaGl0ZWN0dXJlcyAoZS5nLiBQb3dlclBDKSwgd2hpbGUgdGhlIE9wZW5TU0wgdmVyc2lvbiAoZGVmYXVsdAotIyBjaG9pY2UpIGhhcyB2ZXJ5IGZhc3QgdmVyc2lvbiBvcHRpbWl6ZWQgZm9yIGk1ODYuCi0jCi0jIERlZmluZSBQUENfU0hBMSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHJ1bm5pbmcgbWFrZSB0byBtYWtlIHVzZSBvZgotIyBhIGJ1bmRsZWQgU0hBMSByb3V0aW5lIG9wdGltaXplZCBmb3IgUG93ZXJQQy4KLSMKLSMgRGVmaW5lIEFSTV9TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZyBtYWtlIHRvIG1ha2UgdXNlIG9mCi0jIGEgYnVuZGxlZCBTSEExIHJvdXRpbmUgb3B0aW1pemVkIGZvciBBUk0uCi0jCi0jIERlZmluZSBOT19PUEVOU1NMIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdSBkbyBub3QgaGF2ZSBPcGVuU1NMLgotIyBUaGlzIGFsc28gaW1wbGllcyBNT1pJTExBX1NIQTEuCi0jCi0jIERlZmluZSBPUEVOU1NMRElSPS9mb28vYmFyIGlmIHlvdXIgb3BlbnNzbCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlIGluCi0jIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4KLUFDX0FSR19XSVRIKG9wZW5zc2wsCi1BU19IRUxQX1NUUklORyhbLS13aXRoLW9wZW5zc2xdLFt1c2UgT3BlblNTTCBsaWJyYXJ5IChkZWZhdWx0IGlzIFlFUyldKQotQVNfSEVMUF9TVFJJTkcoW10sICAgICAgICAgICAgICBbQVJHIGNhbiBiZSBwcmVmaXggZm9yIG9wZW5zc2wgbGlicmFyeSBhbmQgaGVhZGVyc10pLFwKLUdJVF9QQVJTRV9XSVRIKG9wZW5zc2wpKQotIwotIyBEZWZpbmUgTk9fQ1VSTCBpZiB5b3UgZG8gbm90IGhhdmUgY3VybCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdWxsIGFuZAotIyBnaXQtaHR0cC1wdXNoIGFyZSBub3QgYnVpbHQsIGFuZCB5b3UgY2Fubm90IHVzZSBodHRwOi8vIGFuZCBodHRwczovLwotIyB0cmFuc3BvcnRzLgotIwotIyBEZWZpbmUgQ1VSTERJUj0vZm9vL2JhciBpZiB5b3VyIGN1cmwgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBpbgotIyAvZm9vL2Jhci9pbmNsdWRlIGFuZCAvZm9vL2Jhci9saWIgZGlyZWN0b3JpZXMuCi1BQ19BUkdfV0lUSChjdXJsLAotQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1jdXJsXSxbc3VwcG9ydCBodHRwKHMpOi8vIHRyYW5zcG9ydHMgKGRlZmF1bHQgaXMgWUVTKV0pCi1BU19IRUxQX1NUUklORyhbXSwgICAgICAgICAgIFtBUkcgY2FuIGJlIGFsc28gcHJlZml4IGZvciBjdXJsIGxpYnJhcnkgYW5kIGhlYWRlcnNdKSwKLUdJVF9QQVJTRV9XSVRIKGN1cmwpKQotIwotIyBEZWZpbmUgTk9fRVhQQVQgaWYgeW91IGRvIG5vdCBoYXZlIGV4cGF0IGluc3RhbGxlZC4gIGdpdC1odHRwLXB1c2ggaXMKLSMgbm90IGJ1aWx0LCBhbmQgeW91IGNhbm5vdCBwdXNoIHVzaW5nIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIHRyYW5zcG9ydHMuCi0jCi0jIERlZmluZSBFWFBBVERJUj0vZm9vL2JhciBpZiB5b3VyIGV4cGF0IGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyBhcmUgaW4KLSMgL2Zvby9iYXIvaW5jbHVkZSBhbmQgL2Zvby9iYXIvbGliIGRpcmVjdG9yaWVzLgotQUNfQVJHX1dJVEgoZXhwYXQsCi1BU19IRUxQX1NUUklORyhbLS13aXRoLWV4cGF0XSwKLVtzdXBwb3J0IGdpdC1wdXNoIHVzaW5nIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIHRyYW5zcG9ydHMgdmlhIFdlYkRBViAoZGVmYXVsdCBpcyBZRVMpXSkKLUFTX0hFTFBfU1RSSU5HKFtdLCAgICAgICAgICAgIFtBUkcgY2FuIGJlIGFsc28gcHJlZml4IGZvciBleHBhdCBsaWJyYXJ5IGFuZCBoZWFkZXJzXSksCi1HSVRfUEFSU0VfV0lUSChleHBhdCkpCi0jCi0jIERlZmluZSBOT19GSU5LIGlmIHlvdSBhcmUgYnVpbGRpbmcgb24gRGFyd2luL01hYyBPUyBYLCBoYXZlIEZpbmsKLSMgaW5zdGFsbGVkIGluIC9zdywgYnV0IGRvbid0IHdhbnQgR0lUIHRvIGxpbmsgYWdhaW5zdCBhbnkgbGlicmFyaWVzCi0jIGluc3RhbGxlZCB0aGVyZS4gIElmIGRlZmluZWQgeW91IG1heSBzcGVjaWZ5IHlvdXIgb3duIChvciBGaW5rJ3MpCi0jIGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kIGxpYnJhcnkgZGlyZWN0b3JpZXMgYnkgZGVmaW5pbmcgQ0ZMQUdTCi0jIGFuZCBMREZMQUdTIGFwcHJvcHJpYXRlbHkuCi0jCi0jIERlZmluZSBOT19EQVJXSU5fUE9SVFMgaWYgeW91IGFyZSBidWlsZGluZyBvbiBEYXJ3aW4vTWFjIE9TIFgsCi0jIGhhdmUgRGFyd2luUG9ydHMgaW5zdGFsbGVkIGluIC9vcHQvbG9jYWwsIGJ1dCBkb24ndCB3YW50IEdJVCB0bwotIyBsaW5rIGFnYWluc3QgYW55IGxpYnJhcmllcyBpbnN0YWxsZWQgdGhlcmUuICBJZiBkZWZpbmVkIHlvdSBtYXkKLSMgc3BlY2lmeSB5b3VyIG93biAob3IgRGFyd2luUG9ydCdzKSBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZAotIyBsaWJyYXJ5IGRpcmVjdG9yaWVzIGJ5IGRlZmluaW5nIENGTEFHUyBhbmQgTERGTEFHUyBhcHByb3ByaWF0ZWx5LgotIwotIyBEZWZpbmUgTk9fTU1BUCBpZiB5b3Ugd2FudCB0byBhdm9pZCBtbWFwLgotIwotIyBEZWZpbmUgTk9fSUNPTlYgaWYgeW91ciBsaWJjIGRvZXMgbm90IHByb3Blcmx5IHN1cHBvcnQgaWNvbnYuCi1BQ19BUkdfV0lUSChpY29udiwKLUFTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtaWNvbnZdLAotW2lmIHlvdXIgYXJjaGl0ZWN0dXJlIGRvZXNuJ3QgcHJvcGVybHkgc3VwcG9ydCBpY29udl0pCi1BU19IRUxQX1NUUklORyhbLS13aXRoLWljb252PVBBVEhdLAotW1BBVEggaXMgcHJlZml4IGZvciBsaWJpY29udiBsaWJyYXJ5IGFuZCBoZWFkZXJzXSkKLUFTX0hFTFBfU1RSSU5HKFtdLAotW3VzZWQgb25seSBpZiB5b3UgbmVlZCBsaW5raW5nIHdpdGggbGliaWNvbnZdKSwKLUdJVF9QQVJTRV9XSVRIKGljb252KSkKLQotIyMgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSBhbmQgLS1kaXNhYmxlLUZFQVRVUkUKLSMKLSMgRGVmaW5lIFVTRV9OU0VDIGJlbG93IGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMKLSMgYW5kIGN0aW1lcy4gTm90ZSB0aGF0IHlvdSBuZWVkIHJlY2VudCBnbGliYyAoYXQgbGVhc3QgMi4yLjQpIGZvciB0aGlzLCBhbmQKLSMgaXQgd2lsbCBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5Ci0jIHJhbmRvbWx5IGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kCi0jIHRpbWVzIChteSBleHQzIGRvZXNuJ3QpLgotIwotIyBEZWZpbmUgVVNFX1NUREVWIGJlbG93IGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRldmljZQotIyBjaGFuZ2UgYmVpbmcgY29uc2lkZXJlZCBhbiBpbm9kZSBjaGFuZ2UgZnJvbSB0aGUgdXBkYXRlLWluZGV4IHBlcnNwZWN0aXZlLgotCitBQ19TVUJTVChUSFJFQURFRF9ERUxUQV9TRUFSQ0gpCiAKICMjIE91dHB1dCBmaWxlcwogQUNfQ09ORklHX0ZJTEVTKFsiJHtjb25maWdfZmlsZX0iOiIke2NvbmZpZ19pbn0iOiIke2NvbmZpZ19hcHBlbmR9Il0pCmRpZmYgLS1naXQgYS9jb25uZWN0LmMgYi9jb25uZWN0LmMKaW5kZXggMmY1NWFkMi4uNzZlNTQyNyAxMDA2NDQKLS0tIGEvY29ubmVjdC5jCisrKyBiL2Nvbm5lY3QuYwpAQCAtMTc3LDE4ICsxNzcsMTEgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmFpX25hbWUoY29uc3Qgc3RydWN0IGFkZHJpbmZvICphaSkKIHsKLQlzdGF0aWMgY2hhciBhZGRyW0lORVRfQUREUlNUUkxFTl07Ci0JaWYgKCBBRl9JTkVUID09IGFpLT5haV9mYW1pbHkgKSB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqaW47Ci0JCWluID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFpLT5haV9hZGRyOwotCQlpbmV0X250b3AoYWktPmFpX2ZhbWlseSwgJmluLT5zaW5fYWRkciwgYWRkciwgc2l6ZW9mKGFkZHIpKTsKLQl9IGVsc2UgaWYgKCBBRl9JTkVUNiA9PSBhaS0+YWlfZmFtaWx5ICkgewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICppbjsKLQkJaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFpLT5haV9hZGRyOwotCQlpbmV0X250b3AoYWktPmFpX2ZhbWlseSwgJmluLT5zaW42X2FkZHIsIGFkZHIsIHNpemVvZihhZGRyKSk7Ci0JfSBlbHNlIHsKKwlzdGF0aWMgY2hhciBhZGRyW05JX01BWEhPU1RdOworCWlmIChnZXRuYW1laW5mbyhhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4sIGFkZHIsIHNpemVvZihhZGRyKSwgTlVMTCwgMCwKKwkJCU5JX05VTUVSSUNIT1NUKSAhPSAwKQogCQlzdHJjcHkoYWRkciwgIih1bmtub3duKSIpOwotCX0KKwogCXJldHVybiBhZGRyOwogfQogCkBAIC0zMTUsNyArMzA4LDcgQEAKIAkJLyogTm90IG51bWVyaWMgKi8KIAkJc3RydWN0IHNlcnZlbnQgKnNlID0gZ2V0c2VydmJ5bmFtZShwb3J0LCJ0Y3AiKTsKIAkJaWYgKCAhc2UgKQotCQkJZGllKCJVbmtub3duIHBvcnQgJXNcbiIsIHBvcnQpOworCQkJZGllKCJVbmtub3duIHBvcnQgJXMiLCBwb3J0KTsKIAkJbnBvcnQgPSBzZS0+c19wb3J0OwogCX0KIApAQCAtMzczLDggKzM2Niw2IEBACiAKIAogc3RhdGljIGNoYXIgKmdpdF9wcm94eV9jb21tYW5kOwotc3RhdGljIGNvbnN0IGNoYXIgKnJob3N0X25hbWU7Ci1zdGF0aWMgaW50IHJob3N0X2xlbjsKIAogc3RhdGljIGludCBnaXRfcHJveHlfY29tbWFuZF9vcHRpb25zKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsCiAJCXZvaWQgKmNiKQpAQCAtMzgzLDYgKzM3NCw4IEBACiAJCWNvbnN0IGNoYXIgKmZvcl9wb3M7CiAJCWludCBtYXRjaGxlbiA9IC0xOwogCQlpbnQgaG9zdGxlbjsKKwkJY29uc3QgY2hhciAqcmhvc3RfbmFtZSA9IGNiOworCQlpbnQgcmhvc3RfbGVuID0gc3RybGVuKHJob3N0X25hbWUpOwogCiAJCWlmIChnaXRfcHJveHlfY29tbWFuZCkKIAkJCXJldHVybiAwOwpAQCAtNDI2LDExICs0MTksOCBAQAogCiBzdGF0aWMgaW50IGdpdF91c2VfcHJveHkoY29uc3QgY2hhciAqaG9zdCkKIHsKLQlyaG9zdF9uYW1lID0gaG9zdDsKLQlyaG9zdF9sZW4gPSBzdHJsZW4oaG9zdCk7CiAJZ2l0X3Byb3h5X2NvbW1hbmQgPSBnZXRlbnYoIkdJVF9QUk9YWV9DT01NQU5EIik7Ci0JZ2l0X2NvbmZpZyhnaXRfcHJveHlfY29tbWFuZF9vcHRpb25zLCBOVUxMKTsKLQlyaG9zdF9uYW1lID0gTlVMTDsKKwlnaXRfY29uZmlnKGdpdF9wcm94eV9jb21tYW5kX29wdGlvbnMsICh2b2lkKilob3N0KTsKIAlyZXR1cm4gKGdpdF9wcm94eV9jb21tYW5kICYmICpnaXRfcHJveHlfY29tbWFuZCk7CiB9CiAKQEAgLTQ3NCw3ICs0NjQsNyBAQAogCiAjZGVmaW5lIE1BWF9DTURfTEVOIDEwMjQKIAotY2hhciAqZ2V0X3BvcnQoY2hhciAqaG9zdCkKK3N0YXRpYyBjaGFyICpnZXRfcG9ydChjaGFyICpob3N0KQogewogCWNoYXIgKmVuZDsKIAljaGFyICpwID0gc3RyY2hyKGhvc3QsICc6Jyk7CkBAIC01MDcsNyArNDk3LDcgQEAKIAkJCQkgIGNvbnN0IGNoYXIgKnByb2csIGludCBmbGFncykKIHsKIAljaGFyICp1cmwgPSB4c3RyZHVwKHVybF9vcmlnKTsKLQljaGFyICpob3N0LCAqcGF0aCA9IHVybDsKKwljaGFyICpob3N0LCAqcGF0aDsKIAljaGFyICplbmQ7CiAJaW50IGM7CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm47CkBAIC01ODksNyArNTc5LDEwIEBACiAJCQlnaXRfdGNwX2Nvbm5lY3QoZmQsIGhvc3QsIGZsYWdzKTsKIAkJLyoKIAkJICogU2VwYXJhdGUgb3JpZ2luYWwgcHJvdG9jb2wgY29tcG9uZW50cyBwcm9nIGFuZCBwYXRoCi0JCSAqIGZyb20gZXh0ZW5kZWQgY29tcG9uZW50cyB3aXRoIGEgTlVMIGJ5dGUuCisJCSAqIGZyb20gZXh0ZW5kZWQgaG9zdCBoZWFkZXIgd2l0aCBhIE5VTCBieXRlLgorCQkgKgorCQkgKiBOb3RlOiBEbyBub3QgYWRkIGFueSBvdGhlciBoZWFkZXJzIGhlcmUhICBEb2luZyBzbworCQkgKiB3aWxsIGNhdXNlIG9sZGVyIGdpdC1kYWVtb24gc2VydmVycyB0byBjcmFzaC4KIAkJICovCiAJCXBhY2tldF93cml0ZShmZFsxXSwKIAkJCSAgICAgIiVzICVzJWNob3N0PSVzJWMiLApAQCAtNjEyLDE0ICs2MDUsMTggQEAKIAkJZGllKCJjb21tYW5kIGxpbmUgdG9vIGxvbmciKTsKIAogCWNvbm4tPmluID0gY29ubi0+b3V0ID0gLTE7Ci0JY29ubi0+YXJndiA9IGFyZyA9IHhjYWxsb2MoNiwgc2l6ZW9mKCphcmcpKTsKKwljb25uLT5hcmd2ID0gYXJnID0geGNhbGxvYyg3LCBzaXplb2YoKmFyZykpOwogCWlmIChwcm90b2NvbCA9PSBQUk9UT19TU0gpIHsKIAkJY29uc3QgY2hhciAqc3NoID0gZ2V0ZW52KCJHSVRfU1NIIik7CisJCWludCBwdXR0eSA9IHNzaCAmJiBzdHJjYXNlc3RyKHNzaCwgInBsaW5rIik7CiAJCWlmICghc3NoKSBzc2ggPSAic3NoIjsKIAogCQkqYXJnKysgPSBzc2g7CisJCWlmIChwdXR0eSAmJiAhc3RyY2FzZXN0cihzc2gsICJ0b3J0b2lzZXBsaW5rIikpCisJCQkqYXJnKysgPSAiLWJhdGNoIjsKIAkJaWYgKHBvcnQpIHsKLQkJCSphcmcrKyA9ICItcCI7CisJCQkvKiBQIGlzIGZvciBQdVRUWSwgcCBpcyBmb3IgT3BlblNTSCAqLworCQkJKmFyZysrID0gcHV0dHkgPyAiLVAiIDogIi1wIjsKIAkJCSphcmcrKyA9IHBvcnQ7CiAJCX0KIAkJKmFyZysrID0gaG9zdDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKaW5kZXggMzg4OWNmYi4uNzQ1YjVmYiAxMDA3NTUKLS0tIGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKQEAgLTEsMyArMSw0IEBACisjIWJhc2gKICMKICMgYmFzaCBjb21wbGV0aW9uIHN1cHBvcnQgZm9yIGNvcmUgR2l0LgogIwpAQCAtMzMsNiArMzQsMjAgQEAKICMgICAgICAgYXJlIGN1cnJlbnRseSBpbiBhIGdpdCByZXBvc2l0b3J5LiAgVGhlICVzIHRva2VuIHdpbGwgYmUKICMgICAgICAgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnJhbmNoLgogIworIyAgICAgICBJbiBhZGRpdGlvbiwgaWYgeW91IHNldCBHSVRfUFMxX1NIT1dESVJUWVNUQVRFIHRvIGEgbm9uZW1wdHkKKyMgICAgICAgdmFsdWUsIHVuc3RhZ2VkICgqKSBhbmQgc3RhZ2VkICgrKSBjaGFuZ2VzIHdpbGwgYmUgc2hvd24gbmV4dAorIyAgICAgICB0byB0aGUgYnJhbmNoIG5hbWUuICBZb3UgY2FuIGNvbmZpZ3VyZSB0aGlzIHBlci1yZXBvc2l0b3J5CisjICAgICAgIHdpdGggdGhlIGJhc2guc2hvd0RpcnR5U3RhdGUgdmFyaWFibGUsIHdoaWNoIGRlZmF1bHRzIHRvIHRydWUKKyMgICAgICAgb25jZSBHSVRfUFMxX1NIT1dESVJUWVNUQVRFIGlzIGVuYWJsZWQuCisjCisjICAgICAgIFlvdSBjYW4gYWxzbyBzZWUgaWYgY3VycmVudGx5IHNvbWV0aGluZyBpcyBzdGFzaGVkLCBieSBzZXR0aW5nCisjICAgICAgIEdJVF9QUzFfU0hPV1NUQVNIU1RBVEUgdG8gYSBub25lbXB0eSB2YWx1ZS4gSWYgc29tZXRoaW5nIGlzIHN0YXNoZWQsCisjICAgICAgIHRoZW4gYSAnJCcgd2lsbCBiZSBzaG93biBuZXh0IHRvIHRoZSBicmFuY2ggbmFtZS4KKyMKKyMgICAgICAgSWYgeW91IHdvdWxkIGxpa2UgdG8gc2VlIGlmIHRoZXJlJ3JlIHVudHJhY2tlZCBmaWxlcywgdGhlbiB5b3UgY2FuCisjICAgICAgIHNldCBHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUyB0byBhIG5vbmVtcHR5IHZhbHVlLiBJZiB0aGVyZSdyZQorIyAgICAgICB1bnRyYWNrZWQgZmlsZXMsIHRoZW4gYSAnJScgd2lsbCBiZSBzaG93biBuZXh0IHRvIHRoZSBicmFuY2ggbmFtZS4KKyMKICMgVG8gc3VibWl0IHBhdGNoZXM6CiAjCiAjICAgICopIFJlYWQgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwpAQCAtNTAsMTAgKzY1LDEyIEBACiAqKSAgIENPTVBfV09SREJSRUFLUz0iJENPTVBfV09SREJSRUFLUzoiCiBlc2FjCiAKKyMgX19naXRkaXIgYWNjZXB0cyAwIG9yIDEgYXJndW1lbnRzIChpLmUuLCBsb2NhdGlvbikKKyMgcmV0dXJucyBsb2NhdGlvbiBvZiAuZ2l0IHJlcG8KIF9fZ2l0ZGlyICgpCiB7Ci0JaWYgWyAteiAiJDEiIF07IHRoZW4KLQkJaWYgWyAtbiAiJF9fZ2l0X2RpciIgXTsgdGhlbgorCWlmIFsgLXogIiR7MS19IiBdOyB0aGVuCisJCWlmIFsgLW4gIiR7X19naXRfZGlyLX0iIF07IHRoZW4KIAkJCWVjaG8gIiRfX2dpdF9kaXIiCiAJCWVsaWYgWyAtZCAuZ2l0IF07IHRoZW4KIAkJCWVjaG8gLmdpdApAQCAtNjcsNTggKzg0LDEwMCBAQAogCWZpCiB9CiAKKyMgX19naXRfcHMxIGFjY2VwdHMgMCBvciAxIGFyZ3VtZW50cyAoaS5lLiwgZm9ybWF0IHN0cmluZykKKyMgcmV0dXJucyB0ZXh0IHRvIGFkZCB0byBiYXNoIFBTMSBwcm9tcHQgKGluY2x1ZGVzIGJyYW5jaCBuYW1lKQogX19naXRfcHMxICgpCiB7Ci0JbG9jYWwgZz0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAyPi9kZXYvbnVsbCkiCisJbG9jYWwgZz0iJChfX2dpdGRpcikiCiAJaWYgWyAtbiAiJGciIF07IHRoZW4KIAkJbG9jYWwgcgogCQlsb2NhbCBiCi0JCWlmIFsgLWQgIiRnL3JlYmFzZS1hcHBseSIgXQotCQl0aGVuCi0JCQlpZiB0ZXN0IC1mICIkZy9yZWJhc2UtYXBwbHkvcmViYXNpbmciCi0JCQl0aGVuCi0JCQkJcj0ifFJFQkFTRSIKLQkJCWVsaWYgdGVzdCAtZiAiJGcvcmViYXNlLWFwcGx5L2FwcGx5aW5nIgotCQkJdGhlbgotCQkJCXI9InxBTSIKLQkJCWVsc2UKLQkJCQlyPSJ8QU0vUkVCQVNFIgotCQkJZmkKLQkJCWI9IiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsKSIKLQkJZWxpZiBbIC1mICIkZy9yZWJhc2UtbWVyZ2UvaW50ZXJhY3RpdmUiIF0KLQkJdGhlbgorCQlpZiBbIC1mICIkZy9yZWJhc2UtbWVyZ2UvaW50ZXJhY3RpdmUiIF07IHRoZW4KIAkJCXI9InxSRUJBU0UtaSIKIAkJCWI9IiQoY2F0ICIkZy9yZWJhc2UtbWVyZ2UvaGVhZC1uYW1lIikiCi0JCWVsaWYgWyAtZCAiJGcvcmViYXNlLW1lcmdlIiBdCi0JCXRoZW4KKwkJZWxpZiBbIC1kICIkZy9yZWJhc2UtbWVyZ2UiIF07IHRoZW4KIAkJCXI9InxSRUJBU0UtbSIKIAkJCWI9IiQoY2F0ICIkZy9yZWJhc2UtbWVyZ2UvaGVhZC1uYW1lIikiCi0JCWVsaWYgWyAtZiAiJGcvTUVSR0VfSEVBRCIgXQotCQl0aGVuCi0JCQlyPSJ8TUVSR0lORyIKLQkJCWI9IiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsKSIKIAkJZWxzZQotCQkJaWYgWyAtZiAiJGcvQklTRUNUX0xPRyIgXQotCQkJdGhlbgorCQkJaWYgWyAtZCAiJGcvcmViYXNlLWFwcGx5IiBdOyB0aGVuCisJCQkJaWYgWyAtZiAiJGcvcmViYXNlLWFwcGx5L3JlYmFzaW5nIiBdOyB0aGVuCisJCQkJCXI9InxSRUJBU0UiCisJCQkJZWxpZiBbIC1mICIkZy9yZWJhc2UtYXBwbHkvYXBwbHlpbmciIF07IHRoZW4KKwkJCQkJcj0ifEFNIgorCQkJCWVsc2UKKwkJCQkJcj0ifEFNL1JFQkFTRSIKKwkJCQlmaQorCQkJZWxpZiBbIC1mICIkZy9NRVJHRV9IRUFEIiBdOyB0aGVuCisJCQkJcj0ifE1FUkdJTkciCisJCQllbGlmIFsgLWYgIiRnL0JJU0VDVF9MT0ciIF07IHRoZW4KIAkJCQlyPSJ8QklTRUNUSU5HIgogCQkJZmkKLQkJCWlmICEgYj0iJChnaXQgc3ltYm9saWMtcmVmIEhFQUQgMj4vZGV2L251bGwpIgotCQkJdGhlbgotCQkJCWlmICEgYj0iJChnaXQgZGVzY3JpYmUgLS1leGFjdC1tYXRjaCBIRUFEIDI+L2Rldi9udWxsKSIKLQkJCQl0aGVuCi0JCQkJCWI9IiQoY3V0IC1jMS03ICIkZy9IRUFEIikuLi4iCisKKwkJCWI9IiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsKSIgfHwgeworCisJCQkJYj0iJCgKKwkJCQljYXNlICIke0dJVF9QUzFfREVTQ1JJQkVfU1RZTEUtfSIgaW4KKwkJCQkoY29udGFpbnMpCisJCQkJCWdpdCBkZXNjcmliZSAtLWNvbnRhaW5zIEhFQUQgOzsKKwkJCQkoYnJhbmNoKQorCQkJCQlnaXQgZGVzY3JpYmUgLS1jb250YWlucyAtLWFsbCBIRUFEIDs7CisJCQkJKGRlc2NyaWJlKQorCQkJCQlnaXQgZGVzY3JpYmUgSEVBRCA7OworCQkJCSgqIHwgZGVmYXVsdCkKKwkJCQkJZ2l0IGRlc2NyaWJlIC0tZXhhY3QtbWF0Y2ggSEVBRCA7OworCQkJCWVzYWMgMj4vZGV2L251bGwpIiB8fAorCisJCQkJYj0iJChjdXQgLWMxLTcgIiRnL0hFQUQiIDI+L2Rldi9udWxsKS4uLiIgfHwKKwkJCQliPSJ1bmtub3duIgorCQkJCWI9IigkYikiCisJCQl9CisJCWZpCisKKwkJbG9jYWwgdworCQlsb2NhbCBpCisJCWxvY2FsIHMKKwkJbG9jYWwgdQorCQlsb2NhbCBjCisKKwkJaWYgWyAidHJ1ZSIgPSAiJChnaXQgcmV2LXBhcnNlIC0taXMtaW5zaWRlLWdpdC1kaXIgMj4vZGV2L251bGwpIiBdOyB0aGVuCisJCQlpZiBbICJ0cnVlIiA9ICIkKGdpdCByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnkgMj4vZGV2L251bGwpIiBdOyB0aGVuCisJCQkJYz0iQkFSRToiCisJCQllbHNlCisJCQkJYj0iR0lUX0RJUiEiCisJCQlmaQorCQllbGlmIFsgInRydWUiID0gIiQoZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWUgMj4vZGV2L251bGwpIiBdOyB0aGVuCisJCQlpZiBbIC1uICIke0dJVF9QUzFfU0hPV0RJUlRZU1RBVEUtfSIgXTsgdGhlbgorCQkJCWlmIFsgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgYmFzaC5zaG93RGlydHlTdGF0ZSkiICE9ICJmYWxzZSIgXTsgdGhlbgorCQkJCQlnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIC0taWdub3JlLXN1Ym1vZHVsZXMgXAorCQkJCQkJLS1xdWlldCAtLWV4aXQtY29kZSB8fCB3PSIqIgorCQkJCQlpZiBnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgSEVBRCA+L2Rldi9udWxsOyB0aGVuCisJCQkJCQlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLXF1aWV0IFwKKwkJCQkJCQktLWlnbm9yZS1zdWJtb2R1bGVzIEhFQUQgLS0gfHwgaT0iKyIKKwkJCQkJZWxzZQorCQkJCQkJaT0iIyIKKwkJCQkJZmkKIAkJCQlmaQogCQkJZmkKKwkJCWlmIFsgLW4gIiR7R0lUX1BTMV9TSE9XU1RBU0hTVEFURS19IiBdOyB0aGVuCisJCQkgICAgICAgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9zdGFzaCA+L2Rldi9udWxsIDI+JjEgJiYgcz0iJCIKKwkJCWZpCisKKwkJCWlmIFsgLW4gIiR7R0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVMtfSIgXTsgdGhlbgorCQkJICAgaWYgWyAtbiAiJChnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlLXN0YW5kYXJkKSIgXTsgdGhlbgorCQkJICAgICAgdT0iJSIKKwkJCSAgIGZpCisJCQlmaQogCQlmaQogCi0JCWlmIFsgLW4gIiQxIiBdOyB0aGVuCi0JCQlwcmludGYgIiQxIiAiJHtiIyNyZWZzL2hlYWRzL30kciIKKwkJaWYgWyAtbiAiJHsxLX0iIF07IHRoZW4KKwkJCXByaW50ZiAiJDEiICIkYyR7YiMjcmVmcy9oZWFkcy99JHckaSRzJHUkciIKIAkJZWxzZQotCQkJcHJpbnRmICIgKCVzKSIgIiR7YiMjcmVmcy9oZWFkcy99JHIiCisJCQlwcmludGYgIiAoJXMpIiAiJGMke2IjI3JlZnMvaGVhZHMvfSR3JGkkcyR1JHIiCiAJCWZpCiAJZmkKIH0KIAorIyBfX2dpdGNvbXBfMSByZXF1aXJlcyAyIGFyZ3VtZW50cwogX19naXRjb21wXzEgKCkKIHsKIAlsb2NhbCBjIElGUz0nICckJ1x0JyQnXG4nCkBAIC0xMzEsNiArMTkwLDggQEAKIAlkb25lCiB9CiAKKyMgX19naXRjb21wIGFjY2VwdHMgMSwgMiwgMywgb3IgNCBhcmd1bWVudHMKKyMgZ2VuZXJhdGVzIGNvbXBsZXRpb24gcmVwbHkgd2l0aCBjb21wZ2VuCiBfX2dpdGNvbXAgKCkKIHsKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCkBAIC0xNDMsMjIgKzIwNCwyMyBAQAogCQk7OwogCSopCiAJCWxvY2FsIElGUz0kJ1xuJwotCQlDT01QUkVQTFk9KCQoY29tcGdlbiAtUCAiJDIiIFwKLQkJCS1XICIkKF9fZ2l0Y29tcF8xICIkMSIgIiQ0IikiIFwKKwkJQ09NUFJFUExZPSgkKGNvbXBnZW4gLVAgIiR7Mi19IiBcCisJCQktVyAiJChfX2dpdGNvbXBfMSAiJHsxLX0iICIkezQtfSIpIiBcCiAJCQktLSAiJGN1ciIpKQogCQk7OwogCWVzYWMKIH0KIAorIyBfX2dpdF9oZWFkcyBhY2NlcHRzIDAgb3IgMSBhcmd1bWVudHMgKHRvIHBhc3MgdG8gX19naXRkaXIpCiBfX2dpdF9oZWFkcyAoKQogewotCWxvY2FsIGNtZCBpIGlzX2hhc2g9eSBkaXI9IiQoX19naXRkaXIgIiQxIikiCisJbG9jYWwgY21kIGkgaXNfaGFzaD15IGRpcj0iJChfX2dpdGRpciAiJHsxLX0iKSIKIAlpZiBbIC1kICIkZGlyIiBdOyB0aGVuCiAJCWdpdCAtLWdpdC1kaXI9IiRkaXIiIGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShyZWZuYW1lOnNob3J0KScgXAogCQkJcmVmcy9oZWFkcwogCQlyZXR1cm4KIAlmaQotCWZvciBpIGluICQoZ2l0IGxzLXJlbW90ZSAiJDEiIDI+L2Rldi9udWxsKTsgZG8KKwlmb3IgaSBpbiAkKGdpdCBscy1yZW1vdGUgIiR7MS19IiAyPi9kZXYvbnVsbCk7IGRvCiAJCWNhc2UgIiRpc19oYXNoLCRpIiBpbgogCQl5LCopIGlzX2hhc2g9biA7OwogCQluLCpee30pIGlzX2hhc2g9eSA7OwpAQCAtMTY4LDE1ICsyMzAsMTYgQEAKIAlkb25lCiB9CiAKKyMgX19naXRfdGFncyBhY2NlcHRzIDAgb3IgMSBhcmd1bWVudHMgKHRvIHBhc3MgdG8gX19naXRkaXIpCiBfX2dpdF90YWdzICgpCiB7Ci0JbG9jYWwgY21kIGkgaXNfaGFzaD15IGRpcj0iJChfX2dpdGRpciAiJDEiKSIKKwlsb2NhbCBjbWQgaSBpc19oYXNoPXkgZGlyPSIkKF9fZ2l0ZGlyICIkezEtfSIpIgogCWlmIFsgLWQgIiRkaXIiIF07IHRoZW4KIAkJZ2l0IC0tZ2l0LWRpcj0iJGRpciIgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHJlZm5hbWU6c2hvcnQpJyBcCiAJCQlyZWZzL3RhZ3MKIAkJcmV0dXJuCiAJZmkKLQlmb3IgaSBpbiAkKGdpdCBscy1yZW1vdGUgIiQxIiAyPi9kZXYvbnVsbCk7IGRvCisJZm9yIGkgaW4gJChnaXQgbHMtcmVtb3RlICIkezEtfSIgMj4vZGV2L251bGwpOyBkbwogCQljYXNlICIkaXNfaGFzaCwkaSIgaW4KIAkJeSwqKSBpc19oYXNoPW4gOzsKIAkJbiwqXnt9KSBpc19oYXNoPXkgOzsKQEAgLTE4Niw5ICsyNDksMTAgQEAKIAlkb25lCiB9CiAKKyMgX19naXRfcmVmcyBhY2NlcHRzIDAgb3IgMSBhcmd1bWVudHMgKHRvIHBhc3MgdG8gX19naXRkaXIpCiBfX2dpdF9yZWZzICgpCiB7Ci0JbG9jYWwgaSBpc19oYXNoPXkgZGlyPSIkKF9fZ2l0ZGlyICIkMSIpIgorCWxvY2FsIGkgaXNfaGFzaD15IGRpcj0iJChfX2dpdGRpciAiJHsxLX0iKSIKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iIGZvcm1hdCByZWZzCiAJaWYgWyAtZCAiJGRpciIgXTsgdGhlbgogCQljYXNlICIkY3VyIiBpbgpAQCAtMjE4LDYgKzI4Miw3IEBACiAJZG9uZQogfQogCisjIF9fZ2l0X3JlZnMyIHJlcXVpcmVzIDEgYXJndW1lbnQgKHRvIHBhc3MgdG8gX19naXRfcmVmcykKIF9fZ2l0X3JlZnMyICgpCiB7CiAJbG9jYWwgaQpAQCAtMjI2LDYgKzI5MSw3IEBACiAJZG9uZQogfQogCisjIF9fZ2l0X3JlZnNfcmVtb3RlcyByZXF1aXJlcyAxIGFyZ3VtZW50ICh0byBwYXNzIHRvIGxzLXJlbW90ZSkKIF9fZ2l0X3JlZnNfcmVtb3RlcyAoKQogewogCWxvY2FsIGNtZCBpIGlzX2hhc2g9eQpAQCAtMjY0LDcgKzMzMCw3IEBACiAKIF9fZ2l0X21lcmdlX3N0cmF0ZWdpZXMgKCkKIHsKLQlpZiBbIC1uICIkX19naXRfbWVyZ2Vfc3RyYXRlZ3lsaXN0IiBdOyB0aGVuCisJaWYgWyAtbiAiJHtfX2dpdF9tZXJnZV9zdHJhdGVneWxpc3QtfSIgXTsgdGhlbgogCQllY2hvICIkX19naXRfbWVyZ2Vfc3RyYXRlZ3lsaXN0IgogCQlyZXR1cm4KIAlmaQpAQCAtMzQ4LDkgKzQxNCw4OCBAQAogCWVzYWMKIH0KIAorX19naXRfY29tcGxldGVfcmVtb3RlX29yX3JlZnNwZWMgKCkKK3sKKwlsb2NhbCBjbWQ9IiR7Q09NUF9XT1JEU1sxXX0iCisJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgorCWxvY2FsIGkgYz0yIHJlbW90ZT0iIiBwZng9IiIgbGhzPTEgbm9fY29tcGxldGVfcmVmc3BlYz0wCisJd2hpbGUgWyAkYyAtbHQgJENPTVBfQ1dPUkQgXTsgZG8KKwkJaT0iJHtDT01QX1dPUkRTW2NdfSIKKwkJY2FzZSAiJGkiIGluCisJCS0tYWxsfC0tbWlycm9yKSBbICIkY21kIiA9ICJwdXNoIiBdICYmIG5vX2NvbXBsZXRlX3JlZnNwZWM9MSA7OworCQktKikgOzsKKwkJKikgcmVtb3RlPSIkaSI7IGJyZWFrIDs7CisJCWVzYWMKKwkJYz0kKCgrK2MpKQorCWRvbmUKKwlpZiBbIC16ICIkcmVtb3RlIiBdOyB0aGVuCisJCV9fZ2l0Y29tcCAiJChfX2dpdF9yZW1vdGVzKSIKKwkJcmV0dXJuCisJZmkKKwlpZiBbICRub19jb21wbGV0ZV9yZWZzcGVjID0gMSBdOyB0aGVuCisJCUNPTVBSRVBMWT0oKQorCQlyZXR1cm4KKwlmaQorCVsgIiRyZW1vdGUiID0gIi4iIF0gJiYgcmVtb3RlPQorCWNhc2UgIiRjdXIiIGluCisJKjoqKQorCQljYXNlICIkQ09NUF9XT1JEQlJFQUtTIiBpbgorCQkqOiopIDogZ3JlYXQgOzsKKwkJKikgICBwZng9IiR7Y3VyJSU6Kn06IiA7OworCQllc2FjCisJCWN1cj0iJHtjdXIjKjp9IgorCQlsaHM9MAorCQk7OworCSsqKQorCQlwZng9IisiCisJCWN1cj0iJHtjdXIjK30iCisJCTs7CisJZXNhYworCWNhc2UgIiRjbWQiIGluCisJZmV0Y2gpCisJCWlmIFsgJGxocyA9IDEgXTsgdGhlbgorCQkJX19naXRjb21wICIkKF9fZ2l0X3JlZnMyICIkcmVtb3RlIikiICIkcGZ4IiAiJGN1ciIKKwkJZWxzZQorCQkJX19naXRjb21wICIkKF9fZ2l0X3JlZnMpIiAiJHBmeCIgIiRjdXIiCisJCWZpCisJCTs7CisJcHVsbCkKKwkJaWYgWyAkbGhzID0gMSBdOyB0aGVuCisJCQlfX2dpdGNvbXAgIiQoX19naXRfcmVmcyAiJHJlbW90ZSIpIiAiJHBmeCIgIiRjdXIiCisJCWVsc2UKKwkJCV9fZ2l0Y29tcCAiJChfX2dpdF9yZWZzKSIgIiRwZngiICIkY3VyIgorCQlmaQorCQk7OworCXB1c2gpCisJCWlmIFsgJGxocyA9IDEgXTsgdGhlbgorCQkJX19naXRjb21wICIkKF9fZ2l0X3JlZnMpIiAiJHBmeCIgIiRjdXIiCisJCWVsc2UKKwkJCV9fZ2l0Y29tcCAiJChfX2dpdF9yZWZzICIkcmVtb3RlIikiICIkcGZ4IiAiJGN1ciIKKwkJZmkKKwkJOzsKKwllc2FjCit9CisKK19fZ2l0X2NvbXBsZXRlX3N0cmF0ZWd5ICgpCit7CisJY2FzZSAiJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkQtMV19IiBpbgorCS1zfC0tc3RyYXRlZ3kpCisJCV9fZ2l0Y29tcCAiJChfX2dpdF9tZXJnZV9zdHJhdGVnaWVzKSIKKwkJcmV0dXJuIDAKKwllc2FjCisJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgorCWNhc2UgIiRjdXIiIGluCisJLS1zdHJhdGVneT0qKQorCQlfX2dpdGNvbXAgIiQoX19naXRfbWVyZ2Vfc3RyYXRlZ2llcykiICIiICIke2N1ciMjLS1zdHJhdGVneT19IgorCQlyZXR1cm4gMAorCQk7OworCWVzYWMKKwlyZXR1cm4gMQorfQorCiBfX2dpdF9hbGxfY29tbWFuZHMgKCkKIHsKLQlpZiBbIC1uICIkX19naXRfYWxsX2NvbW1hbmRsaXN0IiBdOyB0aGVuCisJaWYgWyAtbiAiJHtfX2dpdF9hbGxfY29tbWFuZGxpc3QtfSIgXTsgdGhlbgogCQllY2hvICIkX19naXRfYWxsX2NvbW1hbmRsaXN0IgogCQlyZXR1cm4KIAlmaQpAQCAtMzY4LDcgKzUxMyw3IEBACiAKIF9fZ2l0X3BvcmNlbGFpbl9jb21tYW5kcyAoKQogewotCWlmIFsgLW4gIiRfX2dpdF9wb3JjZWxhaW5fY29tbWFuZGxpc3QiIF07IHRoZW4KKwlpZiBbIC1uICIke19fZ2l0X3BvcmNlbGFpbl9jb21tYW5kbGlzdC19IiBdOyB0aGVuCiAJCWVjaG8gIiRfX2dpdF9wb3JjZWxhaW5fY29tbWFuZGxpc3QiCiAJCXJldHVybgogCWZpCkBAIC00NzAsNiArNjE1LDcgQEAKIAlkb25lCiB9CiAKKyMgX19naXRfYWxpYXNlZF9jb21tYW5kIHJlcXVpcmVzIDEgYXJndW1lbnQKIF9fZ2l0X2FsaWFzZWRfY29tbWFuZCAoKQogewogCWxvY2FsIHdvcmQgY21kbGluZT0kKGdpdCAtLWdpdC1kaXI9IiQoX19naXRkaXIpIiBcCkBAIC00ODIsNiArNjI4LDcgQEAKIAlkb25lCiB9CiAKKyMgX19naXRfZmluZF9zdWJjb21tYW5kIHJlcXVpcmVzIDEgYXJndW1lbnQKIF9fZ2l0X2ZpbmRfc3ViY29tbWFuZCAoKQogewogCWxvY2FsIHdvcmQgc3ViY29tbWFuZCBjPTEKQEAgLTUyNiw3ICs2NzMsOCBAQAogCQk7OwogCS0tKikKIAkJX19naXRjb21wICIKLQkJCS0tc2lnbm9mZiAtLXV0ZjggLS1iaW5hcnkgLS0zd2F5IC0taW50ZXJhY3RpdmUKKwkJCS0tM3dheSAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlIC0taWdub3JlLWRhdGUKKwkJCS0taW50ZXJhY3RpdmUgLS1rZWVwIC0tbm8tdXRmOCAtLXNpZ25vZmYgLS11dGY4CiAJCQktLXdoaXRlc3BhY2U9CiAJCQkiCiAJCXJldHVybgpAQCAtNTYzLDcgKzcxMSw3IEBACiAJLS0qKQogCQlfX2dpdGNvbXAgIgogCQkJLS1pbnRlcmFjdGl2ZSAtLXJlZnJlc2ggLS1wYXRjaCAtLXVwZGF0ZSAtLWRyeS1ydW4KLQkJCS0taWdub3JlLWVycm9ycworCQkJLS1pZ25vcmUtZXJyb3JzIC0taW50ZW50LXRvLWFkZAogCQkJIgogCQlyZXR1cm4KIAllc2FjCkBAIC02MjgsNyArNzc2LDYgQEAKIAlkb25lCiAKIAljYXNlICIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IiBpbgotCS0tKj0qKQlDT01QUkVQTFk9KCkgOzsKIAktLSopCiAJCV9fZ2l0Y29tcCAiCiAJCQktLWNvbG9yIC0tbm8tY29sb3IgLS12ZXJib3NlIC0tYWJicmV2PSAtLW5vLWFiYnJldgpAQCAtNzU5LDYgKzkwNiwyMCBAQAogCV9fZ2l0Y29tcCAiJChfX2dpdF9yZWZzKSIKIH0KIAorX19naXRfZGlmZl9jb21tb25fb3B0aW9ucz0iLS1zdGF0IC0tbnVtc3RhdCAtLXNob3J0c3RhdCAtLXN1bW1hcnkKKwkJCS0tcGF0Y2gtd2l0aC1zdGF0IC0tbmFtZS1vbmx5IC0tbmFtZS1zdGF0dXMgLS1jb2xvcgorCQkJLS1uby1jb2xvciAtLWNvbG9yLXdvcmRzIC0tbm8tcmVuYW1lcyAtLWNoZWNrCisJCQktLWZ1bGwtaW5kZXggLS1iaW5hcnkgLS1hYmJyZXYgLS1kaWZmLWZpbHRlcj0KKwkJCS0tZmluZC1jb3BpZXMtaGFyZGVyCisJCQktLXRleHQgLS1pZ25vcmUtc3BhY2UtYXQtZW9sIC0taWdub3JlLXNwYWNlLWNoYW5nZQorCQkJLS1pZ25vcmUtYWxsLXNwYWNlIC0tZXhpdC1jb2RlIC0tcXVpZXQgLS1leHQtZGlmZgorCQkJLS1uby1leHQtZGlmZgorCQkJLS1uby1wcmVmaXggLS1zcmMtcHJlZml4PSAtLWRzdC1wcmVmaXg9CisJCQktLWludGVyLWh1bmstY29udGV4dD0KKwkJCS0tcGF0aWVuY2UKKwkJCS0tcmF3CisiCisKIF9naXRfZGlmZiAoKQogewogCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgpAQCAtNzY2LDE2ICs5MjcsOSBAQAogCWxvY2FsIGN1cj0iJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIKIAljYXNlICIkY3VyIiBpbgogCS0tKikKLQkJX19naXRjb21wICItLWNhY2hlZCAtLXN0YXQgLS1udW1zdGF0IC0tc2hvcnRzdGF0IC0tc3VtbWFyeQotCQkJLS1wYXRjaC13aXRoLXN0YXQgLS1uYW1lLW9ubHkgLS1uYW1lLXN0YXR1cyAtLWNvbG9yCi0JCQktLW5vLWNvbG9yIC0tY29sb3Itd29yZHMgLS1uby1yZW5hbWVzIC0tY2hlY2sKLQkJCS0tZnVsbC1pbmRleCAtLWJpbmFyeSAtLWFiYnJldiAtLWRpZmYtZmlsdGVyPQotCQkJLS1maW5kLWNvcGllcy1oYXJkZXIgLS1waWNrYXhlLWFsbCAtLXBpY2theGUtcmVnZXgKLQkJCS0tdGV4dCAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgLS1pZ25vcmUtc3BhY2UtY2hhbmdlCi0JCQktLWlnbm9yZS1hbGwtc3BhY2UgLS1leGl0LWNvZGUgLS1xdWlldCAtLWV4dC1kaWZmCi0JCQktLW5vLWV4dC1kaWZmCi0JCQktLW5vLXByZWZpeCAtLXNyYy1wcmVmaXg9IC0tZHN0LXByZWZpeD0KKwkJX19naXRjb21wICItLWNhY2hlZCAtLXN0YWdlZCAtLXBpY2theGUtYWxsIC0tcGlja2F4ZS1yZWdleAogCQkJLS1iYXNlIC0tb3VycyAtLXRoZWlycworCQkJJF9fZ2l0X2RpZmZfY29tbW9uX29wdGlvbnMKIAkJCSIKIAkJcmV0dXJuCiAJCTs7CkBAIC03ODMsNDYgKzkzNyw2OCBAQAogCV9fZ2l0X2NvbXBsZXRlX2ZpbGUKIH0KIAorX19naXRfbWVyZ2V0b29sc19jb21tb249ImRpZmZ1c2UgZWNtZXJnZSBlbWVyZ2Uga2RpZmYzIG1lbGQgb3BlbmRpZmYKKwkJCXRrZGlmZiB2aW1kaWZmIGd2aW1kaWZmIHh4ZGlmZiBhcmF4aXMKKyIKKworX2dpdF9kaWZmdG9vbCAoKQoreworCWxvY2FsIGN1cj0iJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIKKwljYXNlICIkY3VyIiBpbgorCS0tdG9vbD0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZXRvb2xzX2NvbW1vbiBrb21wYXJlIiAiIiAiJHtjdXIjIy0tdG9vbD19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiLS10b29sPSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCUNPTVBSRVBMWT0oKQorfQorCitfX2dpdF9mZXRjaF9vcHRpb25zPSIKKwktLXF1aWV0IC0tdmVyYm9zZSAtLWFwcGVuZCAtLXVwbG9hZC1wYWNrIC0tZm9yY2UgLS1rZWVwIC0tZGVwdGg9CisJLS10YWdzIC0tbm8tdGFncworIgorCiBfZ2l0X2ZldGNoICgpCiB7CiAJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgotCi0JaWYgWyAiJENPTVBfQ1dPUkQiID0gMiBdOyB0aGVuCi0JCV9fZ2l0Y29tcCAiJChfX2dpdF9yZW1vdGVzKSIKLQllbHNlCi0JCWNhc2UgIiRjdXIiIGluCi0JCSo6KikKLQkJCWxvY2FsIHBmeD0iIgotCQkJY2FzZSAiJENPTVBfV09SREJSRUFLUyIgaW4KLQkJCSo6KikgOiBncmVhdCA7OwotCQkJKikgICBwZng9IiR7Y3VyJSU6Kn06IiA7OwotCQkJZXNhYwotCQkJX19naXRjb21wICIkKF9fZ2l0X3JlZnMpIiAiJHBmeCIgIiR7Y3VyIyo6fSIKLQkJCTs7Ci0JCSopCi0JCQlfX2dpdGNvbXAgIiQoX19naXRfcmVmczIgIiR7Q09NUF9XT1JEU1syXX0iKSIKLQkJCTs7Ci0JCWVzYWMKLQlmaQorCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9mZXRjaF9vcHRpb25zIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmVtb3RlX29yX3JlZnNwZWMKIH0KIAogX2dpdF9mb3JtYXRfcGF0Y2ggKCkKIHsKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCiAJY2FzZSAiJGN1ciIgaW4KKwktLXRocmVhZD0qKQorCQlfX2dpdGNvbXAgIgorCQkJZGVlcCBzaGFsbG93CisJCQkiICIiICIke2N1ciMjLS10aHJlYWQ9fSIKKwkJcmV0dXJuCisJCTs7CiAJLS0qKQogCQlfX2dpdGNvbXAgIgotCQkJLS1zdGRvdXQgLS1hdHRhY2ggLS10aHJlYWQKKwkJCS0tc3Rkb3V0IC0tYXR0YWNoIC0tbm8tYXR0YWNoIC0tdGhyZWFkIC0tdGhyZWFkPQogCQkJLS1vdXRwdXQtZGlyZWN0b3J5CiAJCQktLW51bWJlcmVkIC0tc3RhcnQtbnVtYmVyCiAJCQktLW51bWJlcmVkLWZpbGVzCiAJCQktLWtlZXAtc3ViamVjdAogCQkJLS1zaWdub2ZmCi0JCQktLWluLXJlcGx5LXRvPQorCQkJLS1pbi1yZXBseS10bz0gLS1jYz0KIAkJCS0tZnVsbC1pbmRleCAtLWJpbmFyeQogCQkJLS1ub3QgLS1hbGwKIAkJCS0tY292ZXItbGV0dGVyCiAJCQktLW5vLXByZWZpeCAtLXNyYy1wcmVmaXg9IC0tZHN0LXByZWZpeD0KKwkJCS0taW5saW5lIC0tc3VmZml4PSAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbQorCQkJLS1zdWJqZWN0LXByZWZpeD0KIAkJCSIKIAkJcmV0dXJuCiAJCTs7CkBAIC04MzAsNiArMTAwNiwyMSBAQAogCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3QKIH0KIAorX2dpdF9mc2NrICgpCit7CisJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgorCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS10YWdzIC0tcm9vdCAtLXVucmVhY2hhYmxlIC0tY2FjaGUgLS1uby1yZWZsb2dzIC0tZnVsbAorCQkJLS1zdHJpY3QgLS12ZXJib3NlIC0tbG9zdC1mb3VuZAorCQkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJQ09NUFJFUExZPSgpCit9CisKIF9naXRfZ2MgKCkKIHsKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCkBAIC05MzAsNiArMTEyMSwzMCBAQAogCV9fZ2l0X2NvbXBsZXRlX2ZpbGUKIH0KIAorIyBPcHRpb25zIHRoYXQgZ28gd2VsbCBmb3IgbG9nLCBzaG9ydGxvZyBhbmQgZ2l0aworX19naXRfbG9nX2NvbW1vbl9vcHRpb25zPSIKKwktLW5vdCAtLWFsbAorCS0tYnJhbmNoZXMgLS10YWdzIC0tcmVtb3RlcworCS0tZmlyc3QtcGFyZW50IC0tbWVyZ2VzIC0tbm8tbWVyZ2VzCisJLS1tYXgtY291bnQ9CisJLS1tYXgtYWdlPSAtLXNpbmNlPSAtLWFmdGVyPQorCS0tbWluLWFnZT0gLS11bnRpbD0gLS1iZWZvcmU9CisiCisjIE9wdGlvbnMgdGhhdCBnbyB3ZWxsIGZvciBsb2cgYW5kIGdpdGsgKG5vdCBzaG9ydGxvZykKK19fZ2l0X2xvZ19naXRrX29wdGlvbnM9IgorCS0tZGVuc2UgLS1zcGFyc2UgLS1mdWxsLWhpc3RvcnkKKwktLXNpbXBsaWZ5LW1lcmdlcyAtLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24KKwktLWxlZnQtcmlnaHQKKyIKKyMgT3B0aW9ucyB0aGF0IGdvIHdlbGwgZm9yIGxvZyBhbmQgc2hvcnRsb2cgKG5vdCBnaXRrKQorX19naXRfbG9nX3Nob3J0bG9nX29wdGlvbnM9IgorCS0tYXV0aG9yPSAtLWNvbW1pdHRlcj0gLS1ncmVwPQorCS0tYWxsLW1hdGNoCisiCisKK19fZ2l0X2xvZ19wcmV0dHlfZm9ybWF0cz0ib25lbGluZSBzaG9ydCBtZWRpdW0gZnVsbCBmdWxsZXIgZW1haWwgcmF3IGZvcm1hdDoiCitfX2dpdF9sb2dfZGF0ZV9mb3JtYXRzPSJyZWxhdGl2ZSBpc284NjAxIHJmYzI4MjIgc2hvcnQgbG9jYWwgZGVmYXVsdCByYXciCisKIF9naXRfbG9nICgpCiB7CiAJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCkBAIC05NDIsMzYgKzExNTcsMzcgQEAKIAlmaQogCWNhc2UgIiRjdXIiIGluCiAJLS1wcmV0dHk9KikKLQkJX19naXRjb21wICIKLQkJCW9uZWxpbmUgc2hvcnQgbWVkaXVtIGZ1bGwgZnVsbGVyIGVtYWlsIHJhdworCQlfX2dpdGNvbXAgIiRfX2dpdF9sb2dfcHJldHR5X2Zvcm1hdHMKIAkJCSIgIiIgIiR7Y3VyIyMtLXByZXR0eT19IgogCQlyZXR1cm4KIAkJOzsKKwktLWZvcm1hdD0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9sb2dfcHJldHR5X2Zvcm1hdHMKKwkJCSIgIiIgIiR7Y3VyIyMtLWZvcm1hdD19IgorCQlyZXR1cm4KKwkJOzsKIAktLWRhdGU9KikKLQkJX19naXRjb21wICIKLQkJCXJlbGF0aXZlIGlzbzg2MDEgcmZjMjgyMiBzaG9ydCBsb2NhbCBkZWZhdWx0Ci0JCSIgIiIgIiR7Y3VyIyMtLWRhdGU9fSIKKwkJX19naXRjb21wICIkX19naXRfbG9nX2RhdGVfZm9ybWF0cyIgIiIgIiR7Y3VyIyMtLWRhdGU9fSIKIAkJcmV0dXJuCiAJCTs7CiAJLS0qKQogCQlfX2dpdGNvbXAgIgotCQkJLS1tYXgtY291bnQ9IC0tbWF4LWFnZT0gLS1zaW5jZT0gLS1hZnRlcj0KLQkJCS0tbWluLWFnZT0gLS1iZWZvcmU9IC0tdW50aWw9CisJCQkkX19naXRfbG9nX2NvbW1vbl9vcHRpb25zCisJCQkkX19naXRfbG9nX3Nob3J0bG9nX29wdGlvbnMKKwkJCSRfX2dpdF9sb2dfZ2l0a19vcHRpb25zCiAJCQktLXJvb3QgLS10b3BvLW9yZGVyIC0tZGF0ZS1vcmRlciAtLXJldmVyc2UKLQkJCS0tbm8tbWVyZ2VzIC0tZm9sbG93CisJCQktLWZvbGxvdyAtLWZ1bGwtZGlmZgogCQkJLS1hYmJyZXYtY29tbWl0IC0tYWJicmV2PQogCQkJLS1yZWxhdGl2ZS1kYXRlIC0tZGF0ZT0KLQkJCS0tYXV0aG9yPSAtLWNvbW1pdHRlcj0gLS1ncmVwPQotCQkJLS1hbGwtbWF0Y2gKLQkJCS0tcHJldHR5PSAtLW5hbWUtc3RhdHVzIC0tbmFtZS1vbmx5IC0tcmF3Ci0JCQktLW5vdCAtLWFsbAotCQkJLS1sZWZ0LXJpZ2h0IC0tY2hlcnJ5LXBpY2sKKwkJCS0tcHJldHR5PSAtLWZvcm1hdD0gLS1vbmVsaW5lCisJCQktLWNoZXJyeS1waWNrCiAJCQktLWdyYXBoCi0JCQktLXN0YXQgLS1udW1zdGF0IC0tc2hvcnRzdGF0Ci0JCQktLWRlY29yYXRlIC0tZGlmZi1maWx0ZXI9Ci0JCQktLWNvbG9yLXdvcmRzIC0td2Fsay1yZWZsb2dzCi0JCQktLXBhcmVudHMgLS1jaGlsZHJlbiAtLWZ1bGwtaGlzdG9yeQorCQkJLS1kZWNvcmF0ZQorCQkJLS13YWxrLXJlZmxvZ3MKKwkJCS0tcGFyZW50cyAtLWNoaWxkcmVuCiAJCQkkbWVyZ2UKKwkJCSRfX2dpdF9kaWZmX2NvbW1vbl9vcHRpb25zCisJCQktLXBpY2theGUtYWxsIC0tcGlja2F4ZS1yZWdleAogCQkJIgogCQlyZXR1cm4KIAkJOzsKQEAgLTk3OSwyMyArMTE5NSwxOSBAQAogCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3QKIH0KIAorX19naXRfbWVyZ2Vfb3B0aW9ucz0iCisJLS1uby1jb21taXQgLS1uby1zdGF0IC0tbG9nIC0tbm8tbG9nIC0tc3F1YXNoIC0tc3RyYXRlZ3kKKwktLWNvbW1pdCAtLXN0YXQgLS1uby1zcXVhc2ggLS1mZiAtLW5vLWZmCisiCisKIF9naXRfbWVyZ2UgKCkKIHsKKwlfX2dpdF9jb21wbGV0ZV9zdHJhdGVneSAmJiByZXR1cm4KKwogCWxvY2FsIGN1cj0iJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIKLQljYXNlICIke0NPTVBfV09SRFNbQ09NUF9DV09SRC0xXX0iIGluCi0JLXN8LS1zdHJhdGVneSkKLQkJX19naXRjb21wICIkKF9fZ2l0X21lcmdlX3N0cmF0ZWdpZXMpIgotCQlyZXR1cm4KLQllc2FjCiAJY2FzZSAiJGN1ciIgaW4KLQktLXN0cmF0ZWd5PSopCi0JCV9fZ2l0Y29tcCAiJChfX2dpdF9tZXJnZV9zdHJhdGVnaWVzKSIgIiIgIiR7Y3VyIyMtLXN0cmF0ZWd5PX0iCi0JCXJldHVybgotCQk7OwogCS0tKikKLQkJX19naXRjb21wICIKLQkJCS0tbm8tY29tbWl0IC0tbm8tc3RhdCAtLWxvZyAtLW5vLWxvZyAtLXNxdWFzaCAtLXN0cmF0ZWd5Ci0JCQkiCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X21lcmdlX29wdGlvbnMiCiAJCXJldHVybgogCWVzYWMKIAlfX2dpdGNvbXAgIiQoX19naXRfcmVmcykiCkBAIC0xMDA2LDEwICsxMjE4LDcgQEAKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCiAJY2FzZSAiJGN1ciIgaW4KIAktLXRvb2w9KikKLQkJX19naXRjb21wICIKLQkJCWtkaWZmMyB0a2RpZmYgbWVsZCB4eGRpZmYgZW1lcmdlCi0JCQl2aW1kaWZmIGd2aW1kaWZmIGVjbWVyZ2Ugb3BlbmRpZmYKLQkJCSIgIiIgIiR7Y3VyIyMtLXRvb2w9fSIKKwkJX19naXRjb21wICIkX19naXRfbWVyZ2V0b29sc19jb21tb24gdG9ydG9pc2VtZXJnZSIgIiIgIiR7Y3VyIyMtLXRvb2w9fSIKIAkJcmV0dXJuCiAJCTs7CiAJLS0qKQpAQCAtMTA0NCw0MCArMTI1Myw0NCBAQAogCiBfZ2l0X3B1bGwgKCkKIHsKLQlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCisJX19naXRfY29tcGxldGVfc3RyYXRlZ3kgJiYgcmV0dXJuCiAKLQlpZiBbICIkQ09NUF9DV09SRCIgPSAyIF07IHRoZW4KLQkJX19naXRjb21wICIkKF9fZ2l0X3JlbW90ZXMpIgotCWVsc2UKLQkJX19naXRjb21wICIkKF9fZ2l0X3JlZnMgIiR7Q09NUF9XT1JEU1syXX0iKSIKLQlmaQorCWxvY2FsIGN1cj0iJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICIKKwkJCS0tcmViYXNlIC0tbm8tcmViYXNlCisJCQkkX19naXRfbWVyZ2Vfb3B0aW9ucworCQkJJF9fZ2l0X2ZldGNoX29wdGlvbnMKKwkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmVtb3RlX29yX3JlZnNwZWMKIH0KIAogX2dpdF9wdXNoICgpCiB7CiAJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgotCi0JaWYgWyAiJENPTVBfQ1dPUkQiID0gMiBdOyB0aGVuCisJY2FzZSAiJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkQtMV19IiBpbgorCS0tcmVwbykKIAkJX19naXRjb21wICIkKF9fZ2l0X3JlbW90ZXMpIgotCWVsc2UKLQkJY2FzZSAiJGN1ciIgaW4KLQkJKjoqKQotCQkJbG9jYWwgcGZ4PSIiCi0JCQljYXNlICIkQ09NUF9XT1JEQlJFQUtTIiBpbgotCQkJKjoqKSA6IGdyZWF0IDs7Ci0JCQkqKSAgIHBmeD0iJHtjdXIlJToqfToiIDs7Ci0JCQllc2FjCi0KLQkJCV9fZ2l0Y29tcCAiJChfX2dpdF9yZWZzICIke0NPTVBfV09SRFNbMl19IikiICIkcGZ4IiAiJHtjdXIjKjp9IgotCQkJOzsKLQkJKyopCi0JCQlfX2dpdGNvbXAgIiQoX19naXRfcmVmcykiICsgIiR7Y3VyIyt9IgotCQkJOzsKLQkJKikKLQkJCV9fZ2l0Y29tcCAiJChfX2dpdF9yZWZzKSIKLQkJCTs7Ci0JCWVzYWMKLQlmaQorCQlyZXR1cm4KKwllc2FjCisJY2FzZSAiJGN1ciIgaW4KKwktLXJlcG89KikKKwkJX19naXRjb21wICIkKF9fZ2l0X3JlbW90ZXMpIiAiIiAiJHtjdXIjIy0tcmVwbz19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWFsbCAtLW1pcnJvciAtLXRhZ3MgLS1kcnktcnVuIC0tZm9yY2UgLS12ZXJib3NlCisJCQktLXJlY2VpdmUtcGFjaz0gLS1yZXBvPQorCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZW1vdGVfb3JfcmVmc3BlYwogfQogCiBfZ2l0X3JlYmFzZSAoKQpAQCAtMTA4NywxNiArMTMwMCw4IEBACiAJCV9fZ2l0Y29tcCAiLS1jb250aW51ZSAtLXNraXAgLS1hYm9ydCIKIAkJcmV0dXJuCiAJZmkKLQljYXNlICIke0NPTVBfV09SRFNbQ09NUF9DV09SRC0xXX0iIGluCi0JLXN8LS1zdHJhdGVneSkKLQkJX19naXRjb21wICIkKF9fZ2l0X21lcmdlX3N0cmF0ZWdpZXMpIgotCQlyZXR1cm4KLQllc2FjCisJX19naXRfY29tcGxldGVfc3RyYXRlZ3kgJiYgcmV0dXJuCiAJY2FzZSAiJGN1ciIgaW4KLQktLXN0cmF0ZWd5PSopCi0JCV9fZ2l0Y29tcCAiJChfX2dpdF9tZXJnZV9zdHJhdGVnaWVzKSIgIiIgIiR7Y3VyIyMtLXN0cmF0ZWd5PX0iCi0JCXJldHVybgotCQk7OwogCS0tKikKIAkJX19naXRjb21wICItLW9udG8gLS1tZXJnZSAtLXN0cmF0ZWd5IC0taW50ZXJhY3RpdmUiCiAJCXJldHVybgpAQCAtMTEwNCwxOCArMTMwOSwzOSBAQAogCV9fZ2l0Y29tcCAiJChfX2dpdF9yZWZzKSIKIH0KIAorX19naXRfc2VuZF9lbWFpbF9jb25maXJtX29wdGlvbnM9ImFsd2F5cyBuZXZlciBhdXRvIGNjIGNvbXBvc2UiCitfX2dpdF9zZW5kX2VtYWlsX3N1cHByZXNzY2Nfb3B0aW9ucz0iYXV0aG9yIHNlbGYgY2MgYm9keWNjIHNvYiBjY2NtZCBib2R5IGFsbCIKKwogX2dpdF9zZW5kX2VtYWlsICgpCiB7CiAJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgogCWNhc2UgIiRjdXIiIGluCisJLS1jb25maXJtPSopCisJCV9fZ2l0Y29tcCAiCisJCQkkX19naXRfc2VuZF9lbWFpbF9jb25maXJtX29wdGlvbnMKKwkJCSIgIiIgIiR7Y3VyIyMtLWNvbmZpcm09fSIKKwkJcmV0dXJuCisJCTs7CisJLS1zdXBwcmVzcy1jYz0qKQorCQlfX2dpdGNvbXAgIgorCQkJJF9fZ2l0X3NlbmRfZW1haWxfc3VwcHJlc3NjY19vcHRpb25zCisJCQkiICIiICIke2N1ciMjLS1zdXBwcmVzcy1jYz19IgorCisJCXJldHVybgorCQk7OworCS0tc210cC1lbmNyeXB0aW9uPSopCisJCV9fZ2l0Y29tcCAic3NsIHRscyIgIiIgIiR7Y3VyIyMtLXNtdHAtZW5jcnlwdGlvbj19IgorCQlyZXR1cm4KKwkJOzsKIAktLSopCi0JCV9fZ2l0Y29tcCAiLS1iY2MgLS1jYyAtLWNjLWNtZCAtLWNoYWluLXJlcGx5LXRvIC0tY29tcG9zZQotCQkJLS1kcnktcnVuIC0tZW52ZWxvcGUtc2VuZGVyIC0tZnJvbSAtLWlkZW50aXR5CisJCV9fZ2l0Y29tcCAiLS1hbm5vdGF0ZSAtLWJjYyAtLWNjIC0tY2MtY21kIC0tY2hhaW4tcmVwbHktdG8KKwkJCS0tY29tcG9zZSAtLWNvbmZpcm09IC0tZHJ5LXJ1biAtLWVudmVsb3BlLXNlbmRlcgorCQkJLS1mcm9tIC0taWRlbnRpdHkKIAkJCS0taW4tcmVwbHktdG8gLS1uby1jaGFpbi1yZXBseS10byAtLW5vLXNpZ25lZC1vZmYtYnktY2MKIAkJCS0tbm8tc3VwcHJlc3MtZnJvbSAtLW5vLXRocmVhZCAtLXF1aWV0CiAJCQktLXNpZ25lZC1vZmYtYnktY2MgLS1zbXRwLXBhc3MgLS1zbXRwLXNlcnZlcgotCQkJLS1zbXRwLXNlcnZlci1wb3J0IC0tc210cC1zc2wgLS1zbXRwLXVzZXIgLS1zdWJqZWN0Ci0JCQktLXN1cHByZXNzLWNjIC0tc3VwcHJlc3MtZnJvbSAtLXRocmVhZCAtLXRvCisJCQktLXNtdHAtc2VydmVyLXBvcnQgLS1zbXRwLWVuY3J5cHRpb249IC0tc210cC11c2VyCisJCQktLXN1YmplY3QgLS1zdXBwcmVzcy1jYz0gLS1zdXBwcmVzcy1mcm9tIC0tdGhyZWFkIC0tdG8KIAkJCS0tdmFsaWRhdGUgLS1uby12YWxpZGF0ZSIKIAkJcmV0dXJuCiAJCTs7CkBAIC0xMTIzLDYgKzEzNDksMzYgQEAKIAlDT01QUkVQTFk9KCkKIH0KIAorX19naXRfY29uZmlnX2dldF9zZXRfdmFyaWFibGVzICgpCit7CisJbG9jYWwgcHJldndvcmQgd29yZCBjb25maWdfZmlsZT0gYz0kQ09NUF9DV09SRAorCXdoaWxlIFsgJGMgLWd0IDEgXTsgZG8KKwkJd29yZD0iJHtDT01QX1dPUkRTW2NdfSIKKwkJY2FzZSAiJHdvcmQiIGluCisJCS0tZ2xvYmFsfC0tc3lzdGVtfC0tZmlsZT0qKQorCQkJY29uZmlnX2ZpbGU9IiR3b3JkIgorCQkJYnJlYWsKKwkJCTs7CisJCS1mfC0tZmlsZSkKKwkJCWNvbmZpZ19maWxlPSIkd29yZCAkcHJldndvcmQiCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlwcmV2d29yZD0kd29yZAorCQljPSQoKC0tYykpCisJZG9uZQorCisJZ2l0IC0tZ2l0LWRpcj0iJChfX2dpdGRpcikiIGNvbmZpZyAkY29uZmlnX2ZpbGUgLS1saXN0IDI+L2Rldi9udWxsIHwKKwl3aGlsZSByZWFkIGxpbmUKKwlkbworCQljYXNlICIkbGluZSIgaW4KKwkJKi4qPSopCisJCQllY2hvICIke2xpbmUvPSovfSIKKwkJCTs7CisJCWVzYWMKKwlkb25lCit9CisKIF9naXRfY29uZmlnICgpCiB7CiAJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgpAQCAtMTE1NCwxMCArMTQxMCwxNSBAQAogCQlfX2dpdGNvbXAgIiQoX19naXRfbWVyZ2Vfc3RyYXRlZ2llcykiCiAJCXJldHVybgogCQk7OwotCWNvbG9yLmJyYW5jaHxjb2xvci5kaWZmfGNvbG9yLnN0YXR1cykKKwljb2xvci5icmFuY2h8Y29sb3IuZGlmZnxjb2xvci5pbnRlcmFjdGl2ZXxcCisJY29sb3Iuc2hvd2JyYW5jaHxjb2xvci5zdGF0dXN8Y29sb3IudWkpCiAJCV9fZ2l0Y29tcCAiYWx3YXlzIG5ldmVyIGF1dG8iCiAJCXJldHVybgogCQk7OworCWNvbG9yLnBhZ2VyKQorCQlfX2dpdGNvbXAgImZhbHNlIHRydWUiCisJCXJldHVybgorCQk7OwogCWNvbG9yLiouKikKIAkJX19naXRjb21wICIKIAkJCW5vcm1hbCBibGFjayByZWQgZ3JlZW4geWVsbG93IGJsdWUgbWFnZW50YSBjeWFuIHdoaXRlCkBAIC0xMTY1LDYgKzE0MjYsMzAgQEAKIAkJCSIKIAkJcmV0dXJuCiAJCTs7CisJaGVscC5mb3JtYXQpCisJCV9fZ2l0Y29tcCAibWFuIGluZm8gd2ViIGh0bWwiCisJCXJldHVybgorCQk7OworCWxvZy5kYXRlKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9sb2dfZGF0ZV9mb3JtYXRzIgorCQlyZXR1cm4KKwkJOzsKKwlzZW5kZW1haWwuYWxpYXNlc2ZpbGV0eXBlKQorCQlfX2dpdGNvbXAgIm11dHQgbWFpbHJjIHBpbmUgZWxtIGdudXMiCisJCXJldHVybgorCQk7OworCXNlbmRlbWFpbC5jb25maXJtKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9zZW5kX2VtYWlsX2NvbmZpcm1fb3B0aW9ucyIKKwkJcmV0dXJuCisJCTs7CisJc2VuZGVtYWlsLnN1cHByZXNzY2MpCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3NlbmRfZW1haWxfc3VwcHJlc3NjY19vcHRpb25zIgorCQlyZXR1cm4KKwkJOzsKKwktLWdldHwtLWdldC1hbGx8LS11bnNldHwtLXVuc2V0LWFsbCkKKwkJX19naXRjb21wICIkKF9fZ2l0X2NvbmZpZ19nZXRfc2V0X3ZhcmlhYmxlcykiCisJCXJldHVybgorCQk7OwogCSouKikKIAkJQ09NUFJFUExZPSgpCiAJCXJldHVybgpAQCAtMTE4NCw3ICsxNDY5LDcgQEAKIAlicmFuY2guKi4qKQogCQlsb2NhbCBwZng9IiR7Y3VyJS4qfS4iCiAJCWN1cj0iJHtjdXIjIyoufSIKLQkJX19naXRjb21wICJyZW1vdGUgbWVyZ2UgbWVyZ2VvcHRpb25zIiAiJHBmeCIgIiRjdXIiCisJCV9fZ2l0Y29tcCAicmVtb3RlIG1lcmdlIG1lcmdlb3B0aW9ucyByZWJhc2UiICIkcGZ4IiAiJGN1ciIKIAkJcmV0dXJuCiAJCTs7CiAJYnJhbmNoLiopCkBAIC0xMTkzLDEyICsxNDc4LDQ1IEBACiAJCV9fZ2l0Y29tcCAiJChfX2dpdF9oZWFkcykiICIkcGZ4IiAiJGN1ciIgIi4iCiAJCXJldHVybgogCQk7OworCWd1aXRvb2wuKi4qKQorCQlsb2NhbCBwZng9IiR7Y3VyJS4qfS4iCisJCWN1cj0iJHtjdXIjIyoufSIKKwkJX19naXRjb21wICIKKwkJCWFyZ3Byb21wdCBjbWQgY29uZmlybSBuZWVkc2ZpbGUgbm9jb25zb2xlIG5vcmVzY2FuCisJCQlwcm9tcHQgcmV2cHJvbXB0IHJldnVubWVyZ2VkIHRpdGxlCisJCQkiICIkcGZ4IiAiJGN1ciIKKwkJcmV0dXJuCisJCTs7CisJZGlmZnRvb2wuKi4qKQorCQlsb2NhbCBwZng9IiR7Y3VyJS4qfS4iCisJCWN1cj0iJHtjdXIjIyoufSIKKwkJX19naXRjb21wICJjbWQgcGF0aCIgIiRwZngiICIkY3VyIgorCQlyZXR1cm4KKwkJOzsKKwltYW4uKi4qKQorCQlsb2NhbCBwZng9IiR7Y3VyJS4qfS4iCisJCWN1cj0iJHtjdXIjIyoufSIKKwkJX19naXRjb21wICJjbWQgcGF0aCIgIiRwZngiICIkY3VyIgorCQlyZXR1cm4KKwkJOzsKKwltZXJnZXRvb2wuKi4qKQorCQlsb2NhbCBwZng9IiR7Y3VyJS4qfS4iCisJCWN1cj0iJHtjdXIjIyoufSIKKwkJX19naXRjb21wICJjbWQgcGF0aCB0cnVzdEV4aXRDb2RlIiAiJHBmeCIgIiRjdXIiCisJCXJldHVybgorCQk7OworCXBhZ2VyLiopCisJCWxvY2FsIHBmeD0iJHtjdXIlLip9LiIKKwkJY3VyPSIke2N1ciMqLn0iCisJCV9fZ2l0Y29tcCAiJChfX2dpdF9hbGxfY29tbWFuZHMpIiAiJHBmeCIgIiRjdXIiCisJCXJldHVybgorCQk7OwogCXJlbW90ZS4qLiopCiAJCWxvY2FsIHBmeD0iJHtjdXIlLip9LiIKIAkJY3VyPSIke2N1ciMjKi59IgogCQlfX2dpdGNvbXAgIgogCQkJdXJsIHByb3h5IGZldGNoIHB1c2ggbWlycm9yIHNraXBEZWZhdWx0VXBkYXRlCi0JCQlyZWNlaXZlcGFjayB1cGxvYWRwYWNrIHRhZ29wdAorCQkJcmVjZWl2ZXBhY2sgdXBsb2FkcGFjayB0YWdvcHQgcHVzaHVybAogCQkJIiAiJHBmeCIgIiRjdXIiCiAJCXJldHVybgogCQk7OwpAQCAtMTIwOCw4ICsxNTI2LDE2IEBACiAJCV9fZ2l0Y29tcCAiJChfX2dpdF9yZW1vdGVzKSIgIiRwZngiICIkY3VyIiAiLiIKIAkJcmV0dXJuCiAJCTs7CisJdXJsLiouKikKKwkJbG9jYWwgcGZ4PSIke2N1ciUuKn0uIgorCQljdXI9IiR7Y3VyIyMqLn0iCisJCV9fZ2l0Y29tcCAiaW5zdGVhZG9mIiAiJHBmeCIgIiRjdXIiCisJCXJldHVybgorCQk7OwogCWVzYWMKIAlfX2dpdGNvbXAgIgorCQlhZGQuaWdub3JlLWVycm9ycworCQlhbGlhcy4KIAkJYXBwbHkud2hpdGVzcGFjZQogCQlicmFuY2guYXV0b3NldHVwbWVyZ2UKIAkJYnJhbmNoLmF1dG9zZXR1cHJlYmFzZQpAQCAtMTIyNywxMSArMTU1MywxNSBAQAogCQljb2xvci5kaWZmLm9sZAogCQljb2xvci5kaWZmLnBsYWluCiAJCWNvbG9yLmRpZmYud2hpdGVzcGFjZQorCQljb2xvci5ncmVwCisJCWNvbG9yLmdyZXAuZXh0ZXJuYWwKKwkJY29sb3IuZ3JlcC5tYXRjaAogCQljb2xvci5pbnRlcmFjdGl2ZQogCQljb2xvci5pbnRlcmFjdGl2ZS5oZWFkZXIKIAkJY29sb3IuaW50ZXJhY3RpdmUuaGVscAogCQljb2xvci5pbnRlcmFjdGl2ZS5wcm9tcHQKIAkJY29sb3IucGFnZXIKKwkJY29sb3Iuc2hvd2JyYW5jaAogCQljb2xvci5zdGF0dXMKIAkJY29sb3Iuc3RhdHVzLmFkZGVkCiAJCWNvbG9yLnN0YXR1cy5jaGFuZ2VkCkBAIC0xMjQ0LDYgKzE1NzQsNyBAQAogCQljb3JlLmF1dG9jcmxmCiAJCWNvcmUuYmFyZQogCQljb3JlLmNvbXByZXNzaW9uCisJCWNvcmUuY3JlYXRlT2JqZWN0CiAJCWNvcmUuZGVsdGFCYXNlQ2FjaGVMaW1pdAogCQljb3JlLmVkaXRvcgogCQljb3JlLmV4Y2x1ZGVzZmlsZQpAQCAtMTI3NCwxMSArMTYwNSwyMSBAQAogCQlkaWZmLnJlbmFtZUxpbWl0CiAJCWRpZmYucmVuYW1lTGltaXQuCiAJCWRpZmYucmVuYW1lcworCQlkaWZmLnN1cHByZXNzQmxhbmtFbXB0eQorCQlkaWZmLnRvb2wKKwkJZGlmZi53b3JkUmVnZXgKKwkJZGlmZnRvb2wuCisJCWRpZmZ0b29sLnByb21wdAogCQlmZXRjaC51bnBhY2tMaW1pdAorCQlmb3JtYXQuYXR0YWNoCisJCWZvcm1hdC5jYwogCQlmb3JtYXQuaGVhZGVycwogCQlmb3JtYXQubnVtYmVyZWQKIAkJZm9ybWF0LnByZXR0eQorCQlmb3JtYXQuc2lnbm9mZgorCQlmb3JtYXQuc3ViamVjdHByZWZpeAogCQlmb3JtYXQuc3VmZml4CisJCWZvcm1hdC50aHJlYWQKIAkJZ2MuYWdncmVzc2l2ZVdpbmRvdwogCQlnYy5hdXRvCiAJCWdjLmF1dG9wYWNrbGltaXQKQEAgLTEyODksNiArMTYzMCw3IEBACiAJCWdjLnJlcmVyZXJlc29sdmVkCiAJCWdjLnJlcmVyZXVucmVzb2x2ZWQKIAkJZ2l0Y3ZzLmFsbGJpbmFyeQorCQlnaXRjdnMuY29tbWl0bXNnYW5ub3RhdGlvbgogCQlnaXRjdnMuZGJUYWJsZU5hbWVQcmVmaXgKIAkJZ2l0Y3ZzLmRiZHJpdmVyCiAJCWdpdGN2cy5kYm5hbWUKQEAgLTEyOTcsNiArMTYzOSw3IEBACiAJCWdpdGN2cy5lbmFibGVkCiAJCWdpdGN2cy5sb2dmaWxlCiAJCWdpdGN2cy51c2VjcmxmYXR0cgorCQlndWl0b29sLgogCQlndWkuYmxhbWVoaXN0b3J5Y3R4CiAJCWd1aS5jb21taXRtc2d3aWR0aAogCQlndWkuY29weWJsYW1ldGhyZXNob2xkCkBAIC0xMzIzLDEzICsxNjY2LDI0IEBACiAJCWh0dHAuc3NsVmVyaWZ5CiAJCWkxOG4uY29tbWl0RW5jb2RpbmcKIAkJaTE4bi5sb2dPdXRwdXRFbmNvZGluZworCQlpbWFwLmZvbGRlcgorCQlpbWFwLmhvc3QKKwkJaW1hcC5wYXNzCisJCWltYXAucG9ydAorCQlpbWFwLnByZWZvcm1hdHRlZEhUTUwKKwkJaW1hcC5zc2x2ZXJpZnkKKwkJaW1hcC50dW5uZWwKKwkJaW1hcC51c2VyCiAJCWluc3Rhd2ViLmJyb3dzZXIKIAkJaW5zdGF3ZWIuaHR0cGQKIAkJaW5zdGF3ZWIubG9jYWwKIAkJaW5zdGF3ZWIubW9kdWxlcGF0aAogCQlpbnN0YXdlYi5wb3J0CisJCWludGVyYWN0aXZlLnNpbmdsZWtleQogCQlsb2cuZGF0ZQogCQlsb2cuc2hvd3Jvb3QKKwkJbWFpbG1hcC5maWxlCisJCW1hbi4KIAkJbWFuLnZpZXdlcgogCQltZXJnZS5jb25mbGljdHN0eWxlCiAJCW1lcmdlLmxvZwpAQCAtMTMzNyw3ICsxNjkxLDkgQEAKIAkJbWVyZ2Uuc3RhdAogCQltZXJnZS50b29sCiAJCW1lcmdlLnZlcmJvc2l0eQorCQltZXJnZXRvb2wuCiAJCW1lcmdldG9vbC5rZWVwQmFja3VwCisJCW1lcmdldG9vbC5wcm9tcHQKIAkJcGFjay5jb21wcmVzc2lvbgogCQlwYWNrLmRlbHRhQ2FjaGVMaW1pdAogCQlwYWNrLmRlbHRhQ2FjaGVTaXplCkBAIC0xMzQ3LDggKzE3MDMsMTEgQEAKIAkJcGFjay50aHJlYWRzCiAJCXBhY2sud2luZG93CiAJCXBhY2sud2luZG93TWVtb3J5CisJCXBhZ2VyLgogCQlwdWxsLm9jdG9wdXMKIAkJcHVsbC50d29oZWFkCisJCXB1c2guZGVmYXVsdAorCQlyZWJhc2Uuc3RhdAogCQlyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoCiAJCXJlY2VpdmUuZGVueURlbGV0ZXMKIAkJcmVjZWl2ZS5kZW55Tm9uRmFzdEZvcndhcmRzCkBAIC0xMzU3LDExICsxNzE2LDMyIEBACiAJCXJlcGFjay51c2VkZWx0YWJhc2VvZmZzZXQKIAkJcmVyZXJlLmF1dG91cGRhdGUKIAkJcmVyZXJlLmVuYWJsZWQKKwkJc2VuZGVtYWlsLmFsaWFzZXNmaWxlCisJCXNlbmRlbWFpbC5hbGlhc2VzZmlsZXR5cGUKKwkJc2VuZGVtYWlsLmJjYworCQlzZW5kZW1haWwuY2MKKwkJc2VuZGVtYWlsLmNjY21kCisJCXNlbmRlbWFpbC5jaGFpbnJlcGx5dG8KKwkJc2VuZGVtYWlsLmNvbmZpcm0KKwkJc2VuZGVtYWlsLmVudmVsb3Blc2VuZGVyCisJCXNlbmRlbWFpbC5tdWx0aWVkaXQKKwkJc2VuZGVtYWlsLnNpZ25lZG9mZmJ5Y2MKKwkJc2VuZGVtYWlsLnNtdHBlbmNyeXB0aW9uCisJCXNlbmRlbWFpbC5zbXRwcGFzcworCQlzZW5kZW1haWwuc210cHNlcnZlcgorCQlzZW5kZW1haWwuc210cHNlcnZlcnBvcnQKKwkJc2VuZGVtYWlsLnNtdHB1c2VyCisJCXNlbmRlbWFpbC5zdXBwcmVzc2NjCisJCXNlbmRlbWFpbC5zdXBwcmVzc2Zyb20KKwkJc2VuZGVtYWlsLnRocmVhZAorCQlzZW5kZW1haWwudG8KKwkJc2VuZGVtYWlsLnZhbGlkYXRlCiAJCXNob3dicmFuY2guZGVmYXVsdAogCQlzdGF0dXMucmVsYXRpdmVQYXRocwogCQlzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzCiAJCXRhci51bWFzawogCQl0cmFuc2Zlci51bnBhY2tMaW1pdAorCQl1cmwuCiAJCXVzZXIuZW1haWwKIAkJdXNlci5uYW1lCiAJCXVzZXIuc2lnbmluZ2tleQpAQCAtMTM3Miw3ICsxNzUyLDcgQEAKIAogX2dpdF9yZW1vdGUgKCkKIHsKLQlsb2NhbCBzdWJjb21tYW5kcz0iYWRkIHJtIHNob3cgcHJ1bmUgdXBkYXRlIgorCWxvY2FsIHN1YmNvbW1hbmRzPSJhZGQgcmVuYW1lIHJtIHNob3cgcHJ1bmUgdXBkYXRlIHNldC1oZWFkIgogCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9zdWJjb21tYW5kICIkc3ViY29tbWFuZHMiKSIKIAlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgogCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyIKQEAgLTEzODAsNyArMTc2MCw3IEBACiAJZmkKIAogCWNhc2UgIiRzdWJjb21tYW5kIiBpbgotCXJtfHNob3d8cHJ1bmUpCisJcmVuYW1lfHJtfHNob3d8cHJ1bmUpCiAJCV9fZ2l0Y29tcCAiJChfX2dpdF9yZW1vdGVzKSIKIAkJOzsKIAl1cGRhdGUpCkBAIC0xNDA4LDcgKzE3ODgsNyBAQAogCWxvY2FsIGN1cj0iJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIKIAljYXNlICIkY3VyIiBpbgogCS0tKikKLQkJX19naXRjb21wICItLW1peGVkIC0taGFyZCAtLXNvZnQiCisJCV9fZ2l0Y29tcCAiLS1tZXJnZSAtLW1peGVkIC0taGFyZCAtLXNvZnQiCiAJCXJldHVybgogCQk7OwogCWVzYWMKQEAgLTE0NDksMTIgKzE4MjksOCBAQAogCWNhc2UgIiRjdXIiIGluCiAJLS0qKQogCQlfX2dpdGNvbXAgIgotCQkJLS1tYXgtY291bnQ9IC0tbWF4LWFnZT0gLS1zaW5jZT0gLS1hZnRlcj0KLQkJCS0tbWluLWFnZT0gLS1iZWZvcmU9IC0tdW50aWw9Ci0JCQktLW5vLW1lcmdlcwotCQkJLS1hdXRob3I9IC0tY29tbWl0dGVyPSAtLWdyZXA9Ci0JCQktLWFsbC1tYXRjaAotCQkJLS1ub3QgLS1hbGwKKwkJCSRfX2dpdF9sb2dfY29tbW9uX29wdGlvbnMKKwkJCSRfX2dpdF9sb2dfc2hvcnRsb2dfb3B0aW9ucwogCQkJLS1udW1iZXJlZCAtLXN1bW1hcnkKIAkJCSIKIAkJcmV0dXJuCkBAIC0xNDcwLDEzICsxODQ2LDE5IEBACiAJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgogCWNhc2UgIiRjdXIiIGluCiAJLS1wcmV0dHk9KikKLQkJX19naXRjb21wICIKLQkJCW9uZWxpbmUgc2hvcnQgbWVkaXVtIGZ1bGwgZnVsbGVyIGVtYWlsIHJhdworCQlfX2dpdGNvbXAgIiRfX2dpdF9sb2dfcHJldHR5X2Zvcm1hdHMKIAkJCSIgIiIgIiR7Y3VyIyMtLXByZXR0eT19IgogCQlyZXR1cm4KIAkJOzsKKwktLWZvcm1hdD0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9sb2dfcHJldHR5X2Zvcm1hdHMKKwkJCSIgIiIgIiR7Y3VyIyMtLWZvcm1hdD19IgorCQlyZXR1cm4KKwkJOzsKIAktLSopCi0JCV9fZ2l0Y29tcCAiLS1wcmV0dHk9IgorCQlfX2dpdGNvbXAgIi0tcHJldHR5PSAtLWZvcm1hdD0gLS1hYmJyZXYtY29tbWl0IC0tb25lbGluZQorCQkJJF9fZ2l0X2RpZmZfY29tbW9uX29wdGlvbnMKKwkJCSIKIAkJcmV0dXJuCiAJCTs7CiAJZXNhYwpAQCAtMTQ5MSw3ICsxODczLDggQEAKIAkJX19naXRjb21wICIKIAkJCS0tYWxsIC0tcmVtb3RlcyAtLXRvcG8tb3JkZXIgLS1jdXJyZW50IC0tbW9yZT0KIAkJCS0tbGlzdCAtLWluZGVwZW5kZW50IC0tbWVyZ2UtYmFzZSAtLW5vLW5hbWUKLQkJCS0tc2hhMS1uYW1lIC0tdG9waWNzIC0tcmVmbG9nCisJCQktLWNvbG9yIC0tbm8tY29sb3IKKwkJCS0tc2hhMS1uYW1lIC0tc3BhcnNlIC0tdG9waWNzIC0tcmVmbG9nCiAJCQkiCiAJCXJldHVybgogCQk7OwpAQCAtMTUxMSwxMCArMTg5NCwxMCBAQAogCQlzYXZlLC0tKikKIAkJCV9fZ2l0Y29tcCAiLS1rZWVwLWluZGV4IgogCQkJOzsKLQkJYXBwbHksLS0qKQorCQlhcHBseSwtLSp8cG9wLC0tKikKIAkJCV9fZ2l0Y29tcCAiLS1pbmRleCIKIAkJCTs7Ci0JCXNob3csLS0qfGRyb3AsLS0qfHBvcCwtLSp8YnJhbmNoLC0tKikKKwkJc2hvdywtLSp8ZHJvcCwtLSp8YnJhbmNoLC0tKikKIAkJCUNPTVBSRVBMWT0oKQogCQkJOzsKIAkJc2hvdywqfGFwcGx5LCp8ZHJvcCwqfHBvcCwqfGJyYW5jaCwqKQpAQCAtMTU1Miw3ICsxOTM1LDggQEAKIAlsb2NhbCBzdWJjb21tYW5kcz0iCiAJCWluaXQgZmV0Y2ggY2xvbmUgcmViYXNlIGRjb21taXQgbG9nIGZpbmQtcmV2CiAJCXNldC10cmVlIGNvbW1pdC1kaWZmIGluZm8gY3JlYXRlLWlnbm9yZSBwcm9wZ2V0Ci0JCXByb3BsaXN0IHNob3ctaWdub3JlIHNob3ctZXh0ZXJuYWxzCisJCXByb3BsaXN0IHNob3ctaWdub3JlIHNob3ctZXh0ZXJuYWxzIGJyYW5jaCB0YWcgYmxhbWUKKwkJbWlncmF0ZQogCQkiCiAJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX3N1YmNvbW1hbmQgIiRzdWJjb21tYW5kcyIpIgogCWlmIFsgLXogIiRzdWJjb21tYW5kIiBdOyB0aGVuCkBAIC0xNTYzLDEzICsxOTQ3LDE1IEBACiAJCQktLWZvbGxvdy1wYXJlbnQgLS1hdXRob3JzLWZpbGU9IC0tcmVwYWNrPQogCQkJLS1uby1tZXRhZGF0YSAtLXVzZS1zdm0tcHJvcHMgLS11c2Utc3Zuc3luYy1wcm9wcwogCQkJLS1sb2ctd2luZG93LXNpemU9IC0tbm8tY2hlY2tvdXQgLS1xdWlldAotCQkJLS1yZXBhY2stZmxhZ3MgLS11c2VyLWxvZy1hdXRob3IgJHJlbW90ZV9vcHRzCisJCQktLXJlcGFjay1mbGFncyAtLXVzZS1sb2ctYXV0aG9yIC0tbG9jYWx0aW1lCisJCQktLWlnbm9yZS1wYXRocz0gJHJlbW90ZV9vcHRzCiAJCQkiCiAJCWxvY2FsIGluaXRfb3B0cz0iCiAJCQktLXRlbXBsYXRlPSAtLXNoYXJlZD0gLS10cnVuaz0gLS10YWdzPQogCQkJLS1icmFuY2hlcz0gLS1zdGRsYXlvdXQgLS1taW5pbWl6ZS11cmwKIAkJCS0tbm8tbWV0YWRhdGEgLS11c2Utc3ZtLXByb3BzIC0tdXNlLXN2bnN5bmMtcHJvcHMKLQkJCS0tcmV3cml0ZS1yb290PSAkcmVtb3RlX29wdHMKKwkJCS0tcmV3cml0ZS1yb290PSAtLXByZWZpeD0gLS11c2UtbG9nLWF1dGhvcgorCQkJLS1hZGQtYXV0aG9yLWZyb20gJHJlbW90ZV9vcHRzCiAJCQkiCiAJCWxvY2FsIGNtdF9vcHRzPSIKIAkJCS0tZWRpdCAtLXJtZGlyIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tY29weS1zaW1pbGFyaXR5PQpAQCAtMTU4OSw3ICsxOTc1LDggQEAKIAkJZGNvbW1pdCwtLSopCiAJCQlfX2dpdGNvbXAgIgogCQkJCS0tbWVyZ2UgLS1zdHJhdGVneT0gLS12ZXJib3NlIC0tZHJ5LXJ1bgotCQkJCS0tZmV0Y2gtYWxsIC0tbm8tcmViYXNlICRjbXRfb3B0cyAkZmNfb3B0cworCQkJCS0tZmV0Y2gtYWxsIC0tbm8tcmViYXNlIC0tY29tbWl0LXVybAorCQkJCS0tcmV2aXNpb24gJGNtdF9vcHRzICRmY19vcHRzCiAJCQkJIgogCQkJOzsKIAkJc2V0LXRyZWUsLS0qKQpAQCAtMTYwMywxMyArMTk5MCwxMyBAQAogCQkJX19naXRjb21wICIKIAkJCQktLWxpbWl0PSAtLXJldmlzaW9uPSAtLXZlcmJvc2UgLS1pbmNyZW1lbnRhbAogCQkJCS0tb25lbGluZSAtLXNob3ctY29tbWl0IC0tbm9uLXJlY3Vyc2l2ZQotCQkJCS0tYXV0aG9ycy1maWxlPQorCQkJCS0tYXV0aG9ycy1maWxlPSAtLWNvbG9yCiAJCQkJIgogCQkJOzsKIAkJcmViYXNlLC0tKikKIAkJCV9fZ2l0Y29tcCAiCiAJCQkJLS1tZXJnZSAtLXZlcmJvc2UgLS1zdHJhdGVneT0gLS1sb2NhbAotCQkJCS0tZmV0Y2gtYWxsICRmY19vcHRzCisJCQkJLS1mZXRjaC1hbGwgLS1kcnktcnVuICRmY19vcHRzCiAJCQkJIgogCQkJOzsKIAkJY29tbWl0LWRpZmYsLS0qKQpAQCAtMTYxOCw2ICsyMDA1LDIxIEBACiAJCWluZm8sLS0qKQogCQkJX19naXRjb21wICItLXVybCIKIAkJCTs7CisJCWJyYW5jaCwtLSopCisJCQlfX2dpdGNvbXAgIi0tZHJ5LXJ1biAtLW1lc3NhZ2UgLS10YWciCisJCQk7OworCQl0YWcsLS0qKQorCQkJX19naXRjb21wICItLWRyeS1ydW4gLS1tZXNzYWdlIgorCQkJOzsKKwkJYmxhbWUsLS0qKQorCQkJX19naXRjb21wICItLWdpdC1mb3JtYXQiCisJCQk7OworCQltaWdyYXRlLC0tKikKKwkJCV9fZ2l0Y29tcCAiCisJCQkJLS1jb25maWctZGlyPSAtLWlnbm9yZS1wYXRocz0gLS1taW5pbWl6ZQorCQkJCS0tbm8tYXV0aC1jYWNoZSAtLXVzZXJuYW1lPQorCQkJCSIKKwkJCTs7CiAJCSopCiAJCQlDT01QUkVQTFk9KCkKIAkJCTs7CkBAIC0xNjc3LDcgKzIwNzksNiBAQAogCiAJaWYgWyAteiAiJGNvbW1hbmQiIF07IHRoZW4KIAkJY2FzZSAiJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIgaW4KLQkJLS0qPSopIENPTVBSRVBMWT0oKSA7OwogCQktLSopICAgX19naXRjb21wICIKIAkJCS0tcGFnaW5hdGUKIAkJCS0tbm8tcGFnZXIKQEAgLTE2ODUsNiArMjA4Niw3IEBACiAJCQktLWJhcmUKIAkJCS0tdmVyc2lvbgogCQkJLS1leGVjLXBhdGgKKwkJCS0taHRtbC1wYXRoCiAJCQktLXdvcmstdHJlZT0KIAkJCS0taGVscAogCQkJIgpAQCAtMTcxNCw4ICsyMTE2LDEwIEBACiAJY29uZmlnKSAgICAgIF9naXRfY29uZmlnIDs7CiAJZGVzY3JpYmUpICAgIF9naXRfZGVzY3JpYmUgOzsKIAlkaWZmKSAgICAgICAgX2dpdF9kaWZmIDs7CisJZGlmZnRvb2wpICAgIF9naXRfZGlmZnRvb2wgOzsKIAlmZXRjaCkgICAgICAgX2dpdF9mZXRjaCA7OwogCWZvcm1hdC1wYXRjaCkgX2dpdF9mb3JtYXRfcGF0Y2ggOzsKKwlmc2NrKSAgICAgICAgX2dpdF9mc2NrIDs7CiAJZ2MpICAgICAgICAgIF9naXRfZ2MgOzsKIAlncmVwKSAgICAgICAgX2dpdF9ncmVwIDs7CiAJaGVscCkgICAgICAgIF9naXRfaGVscCA7OwpAQCAtMTc0MSw2ICsyMTQ1LDcgQEAKIAlzaG93KSAgICAgICAgX2dpdF9zaG93IDs7CiAJc2hvdy1icmFuY2gpIF9naXRfc2hvd19icmFuY2ggOzsKIAlzdGFzaCkgICAgICAgX2dpdF9zdGFzaCA7OworCXN0YWdlKSAgICAgICBfZ2l0X2FkZCA7OwogCXN1Ym1vZHVsZSkgICBfZ2l0X3N1Ym1vZHVsZSA7OwogCXN2bikgICAgICAgICBfZ2l0X3N2biA7OwogCXRhZykgICAgICAgICBfZ2l0X3RhZyA7OwpAQCAtMTc1NCwyNyArMjE1OSwzNCBAQAogCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgogCiAJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgotCWxvY2FsIGc9IiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIgMj4vZGV2L251bGwpIgorCWxvY2FsIGc9IiQoX19naXRkaXIpIgogCWxvY2FsIG1lcmdlPSIiCiAJaWYgWyAtZiAiJGcvTUVSR0VfSEVBRCIgXTsgdGhlbgogCQltZXJnZT0iLS1tZXJnZSIKIAlmaQogCWNhc2UgIiRjdXIiIGluCiAJLS0qKQotCQlfX2dpdGNvbXAgIi0tbm90IC0tYWxsICRtZXJnZSIKKwkJX19naXRjb21wICIKKwkJCSRfX2dpdF9sb2dfY29tbW9uX29wdGlvbnMKKwkJCSRfX2dpdF9sb2dfZ2l0a19vcHRpb25zCisJCQkkbWVyZ2UKKwkJCSIKIAkJcmV0dXJuCiAJCTs7CiAJZXNhYwogCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3QKIH0KIAotY29tcGxldGUgLW8gZGVmYXVsdCAtbyBub3NwYWNlIC1GIF9naXQgZ2l0Ci1jb21wbGV0ZSAtbyBkZWZhdWx0IC1vIG5vc3BhY2UgLUYgX2dpdGsgZ2l0aworY29tcGxldGUgLW8gYmFzaGRlZmF1bHQgLW8gZGVmYXVsdCAtbyBub3NwYWNlIC1GIF9naXQgZ2l0IDI+L2Rldi9udWxsIFwKKwl8fCBjb21wbGV0ZSAtbyBkZWZhdWx0IC1vIG5vc3BhY2UgLUYgX2dpdCBnaXQKK2NvbXBsZXRlIC1vIGJhc2hkZWZhdWx0IC1vIGRlZmF1bHQgLW8gbm9zcGFjZSAtRiBfZ2l0ayBnaXRrIDI+L2Rldi9udWxsIFwKKwl8fCBjb21wbGV0ZSAtbyBkZWZhdWx0IC1vIG5vc3BhY2UgLUYgX2dpdGsgZ2l0awogCiAjIFRoZSBmb2xsb3dpbmcgYXJlIG5lY2Vzc2FyeSBvbmx5IGZvciBDeWd3aW4sIGFuZCBvbmx5IGFyZSBuZWVkZWQKICMgd2hlbiB0aGUgdXNlciBoYXMgdGFiLWNvbXBsZXRlZCB0aGUgZXhlY3V0YWJsZSBuYW1lIGFuZCBjb25zZXF1ZW50bHkKICMgaW5jbHVkZWQgdGhlICcuZXhlJyBzdWZmaXguCiAjCiBpZiBbIEN5Z3dpbiA9ICIkKHVuYW1lIC1vIDI+L2Rldi9udWxsKSIgXTsgdGhlbgotY29tcGxldGUgLW8gZGVmYXVsdCAtbyBub3NwYWNlIC1GIF9naXQgZ2l0LmV4ZQorY29tcGxldGUgLW8gYmFzaGRlZmF1bHQgLW8gZGVmYXVsdCAtbyBub3NwYWNlIC1GIF9naXQgZ2l0LmV4ZSAyPi9kZXYvbnVsbCBcCisJfHwgY29tcGxldGUgLW8gZGVmYXVsdCAtbyBub3NwYWNlIC1GIF9naXQgZ2l0LmV4ZQogZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29udmVydC1vYmplY3RzL2NvbnZlcnQtb2JqZWN0cy5jIGIvY29udHJpYi9jb252ZXJ0LW9iamVjdHMvY29udmVydC1vYmplY3RzLmMKaW5kZXggOTBlNzkwMC4uZjNiNTdiZiAxMDA2NDQKLS0tIGEvY29udHJpYi9jb252ZXJ0LW9iamVjdHMvY29udmVydC1vYmplY3RzLmMKKysrIGIvY29udHJpYi9jb252ZXJ0LW9iamVjdHMvY29udmVydC1vYmplY3RzLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAlzdHJ1Y3QgZW50cnkgKmVudHJ5OwogCiAJaWYgKGdldF9zaGExX2hleChidWZmZXIsIHNoYTEpKQotCQlkaWUoImV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIiwgKGNoYXIqKSBidWZmZXIpOworCQlkaWUoImV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIiwgKGNoYXIgKikgYnVmZmVyKTsKIAllbnRyeSA9IGNvbnZlcnRfZW50cnkoc2hhMSk7CiAJbWVtY3B5KGJ1ZmZlciwgc2hhMV90b19oZXgoZW50cnktPm5ld19zaGExKSwgNDApOwogfQpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCWlmICghc2xhc2gpIHsKIAkJCW5ld2xlbiArPSBzcHJpbnRmKG5ldyArIG5ld2xlbiwgIiVvICVzIiwgbW9kZSwgcGF0aCk7CiAJCQluZXdbbmV3bGVuKytdID0gJ1wwJzsKLQkJCWhhc2hjcHkoKHVuc2lnbmVkIGNoYXIqKW5ldyArIG5ld2xlbiwgKHVuc2lnbmVkIGNoYXIgKikgYnVmZmVyICsgbGVuIC0gMjApOworCQkJaGFzaGNweSgodW5zaWduZWQgY2hhciAqKW5ldyArIG5ld2xlbiwgKHVuc2lnbmVkIGNoYXIgKikgYnVmZmVyICsgbGVuIC0gMjApOwogCQkJbmV3bGVuICs9IDIwOwogCiAJCQl1c2VkICs9IGxlbjsKQEAgLTI3MSw3ICsyNzEsNyBAQAogCXVuc2lnbmVkIGxvbmcgb3JpZ19zaXplID0gc2l6ZTsKIAogCWlmIChtZW1jbXAoYnVmZmVyLCAidHJlZSAiLCA1KSkKLQkJZGllKCJCYWQgY29tbWl0ICclcyciLCAoY2hhciopIGJ1ZmZlcik7CisJCWRpZSgiQmFkIGNvbW1pdCAnJXMnIiwgKGNoYXIgKikgYnVmZmVyKTsKIAljb252ZXJ0X2FzY2lpX3NoYTEoKGNoYXIgKikgYnVmZmVyICsgNSk7CiAJYnVmZmVyID0gKGNoYXIgKikgYnVmZmVyICsgNDY7ICAgIC8qICJ0cmVlICIgKyAiaGV4IHNoYTEiICsgIlxuIiAqLwogCXdoaWxlICghbWVtY21wKGJ1ZmZlciwgInBhcmVudCAiLCA3KSkgewpkaWZmIC0tZ2l0IGEvY29udHJpYi9lbWFjcy9NYWtlZmlsZSBiL2NvbnRyaWIvZW1hY3MvTWFrZWZpbGUKaW5kZXggYTQ4NTQwYS4uMjRkOTMxMiAxMDA2NDQKLS0tIGEvY29udHJpYi9lbWFjcy9NYWtlZmlsZQorKysgYi9jb250cmliL2VtYWNzL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogCiBFTUFDUyA9IGVtYWNzCiAKLUVMQyA9IGdpdC5lbGMgdmMtZ2l0LmVsYyBnaXQtYmxhbWUuZWxjCitFTEMgPSBnaXQuZWxjIGdpdC1ibGFtZS5lbGMKIElOU1RBTEwgPz0gaW5zdGFsbAogSU5TVEFMTF9FTEMgPSAkKElOU1RBTEwpIC1tIDY0NAogcHJlZml4ID89ICQoSE9NRSkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZW1hY3MvUkVBRE1FIGIvY29udHJpYi9lbWFjcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzNjhiZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZW1hY3MvUkVBRE1FCkBAIC0wLDAgKzEsMzkgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHZhcmlvdXMgbW9kdWxlcyBmb3IgRW1hY3Mgc3VwcG9ydC4KKworVG8gbWFrZSB0aGUgbW9kdWxlcyBhdmFpbGFibGUgdG8gRW1hY3MsIHlvdSBzaG91bGQgYWRkIHRoaXMgZGlyZWN0b3J5Cit0byB5b3VyIGxvYWQtcGF0aCwgYW5kIHRoZW4gcmVxdWlyZSB0aGUgbW9kdWxlcyB5b3Ugd2FudC4gVGhpcyBjYW4gYmUKK2RvbmUgYnkgYWRkaW5nIHRvIHlvdXIgLmVtYWNzIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKyAgKGFkZC10by1saXN0ICdsb2FkLXBhdGggIi4uLi9naXQvY29udHJpYi9lbWFjcyIpCisgIChyZXF1aXJlICdnaXQpCisgIChyZXF1aXJlICdnaXQtYmxhbWUpCisKKworVGhlIGZvbGxvd2luZyBtb2R1bGVzIGFyZSBhdmFpbGFibGU6CisKKyogZ2l0LmVsOgorCisgIFN0YXR1cyBtYW5hZ2VyIHRoYXQgZGlzcGxheXMgdGhlIHN0YXRlIG9mIGFsbCB0aGUgZmlsZXMgb2YgdGhlCisgIHByb2plY3QsIGFuZCBwcm92aWRlcyBlYXN5IGFjY2VzcyB0byB0aGUgbW9zdCBmcmVxdWVudGx5IHVzZWQgZ2l0CisgIGNvbW1hbmRzLiBUaGUgdXNlciBpbnRlcmZhY2UgaXMgYXMgZmFyIGFzIHBvc3NpYmxlIGNvbXBhdGlibGUgd2l0aAorICB0aGUgcGNsLWN2cyBtb2RlLiBJdCBjYW4gYmUgc3RhcnRlZCB3aXRoIGBNLXggZ2l0LXN0YXR1cycuCisKKyogZ2l0LWJsYW1lLmVsOgorCisgIEVtYWNzIGltcGxlbWVudGF0aW9uIG9mIGluY3JlbWVudGFsIGdpdC1ibGFtZS4gIFdoZW4geW91IHR1cm4gaXQgb24KKyAgd2hpbGUgdmlld2luZyBhIGZpbGUsIHRoZSBlZGl0b3IgYnVmZmVyIHdpbGwgYmUgdXBkYXRlZCBieSBzZXR0aW5nCisgIHRoZSBiYWNrZ3JvdW5kIG9mIGluZGl2aWR1YWwgbGluZXMgdG8gYSBjb2xvciB0aGF0IHJlZmxlY3RzIHdoaWNoCisgIGNvbW1pdCBpdCBjb21lcyBmcm9tLiAgQW5kIHdoZW4geW91IG1vdmUgYXJvdW5kIHRoZSBidWZmZXIsIGEKKyAgb25lLWxpbmUgc3VtbWFyeSB3aWxsIGJlIHNob3duIGluIHRoZSBlY2hvIGFyZWEuCisKKyogdmMtZ2l0LmVsOgorCisgIFRoaXMgZmlsZSB1c2VkIHRvIGNvbnRhaW4gdGhlIFZDLW1vZGUgYmFja2VuZCBmb3IgZ2l0LCBidXQgaXQgaXMgbm8KKyAgbG9uZ2VyIGRpc3RyaWJ1dGVkIHdpdGggZ2l0LiBJdCBpcyBub3cgbWFpbnRhaW5lZCBhcyBwYXJ0IG9mIEVtYWNzCisgIGFuZCBpbmNsdWRlZCBpbiBzdGFuZGFyZCBFbWFjcyBkaXN0cmlidXRpb25zIHN0YXJ0aW5nIGZyb20gdmVyc2lvbgorICAyMi4yLgorCisgIElmIHlvdSBoYXZlIGFuIGVhcmxpZXIgRW1hY3MgdmVyc2lvbiwgdXBncmFkaW5nIHRvIEVtYWNzIDIyIGlzCisgIHJlY29tbWVuZGVkLCBzaW5jZSB0aGUgVkMgbW9kZSBpbiBvbGRlciBFbWFjcyBpcyBub3QgZ2VuZXJpYyBlbm91Z2gKKyAgdG8gYmUgYWJsZSB0byBzdXBwb3J0IGdpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyLCBhbmQgbm8gYXR0ZW1wdCBoYXMKKyAgYmVlbiBtYWRlIHRvIGJhY2twb3J0IHZjLWdpdC5lbC4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZW1hY3MvZ2l0LmVsIGIvY29udHJpYi9lbWFjcy9naXQuZWwKaW5kZXggMDllOGJhZS4uZWFjZTljMSAxMDA2NDQKLS0tIGEvY29udHJpYi9lbWFjcy9naXQuZWwKKysrIGIvY29udHJpYi9lbWFjcy9naXQuZWwKQEAgLTEsNiArMSw2IEBACiA7OzsgZ2l0LmVsIC0tLSBBIHVzZXIgaW50ZXJmYWNlIGZvciBnaXQKIAotOzsgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFsZXhhbmRyZSBKdWxsaWFyZCA8anVsbGlhcmRAd2luZWhxLm9yZz4KKzs7IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBbGV4YW5kcmUgSnVsbGlhcmQgPGp1bGxpYXJkQHdpbmVocS5vcmc+CiAKIDs7IFZlcnNpb246IDEuMAogCkBAIC0zNCwxNSArMzQsMjEgQEAKIDs7IFRvIHN0YXJ0OiBgTS14IGdpdC1zdGF0dXMnCiA7OwogOzsgVE9ETwotOzsgIC0gcG9ydGFiaWxpdHkgdG8gWEVtYWNzCiA7OyAgLSBkaWZmIGFnYWluc3Qgb3RoZXIgYnJhbmNoCiA7OyAgLSByZW5hbWluZyBmaWxlcyBmcm9tIHRoZSBzdGF0dXMgYnVmZmVyCiA7OyAgLSBjcmVhdGluZyB0YWdzCiA7OyAgLSBmZXRjaC9wdWxsCi07OyAgLSBzd2l0Y2hpbmcgYnJhbmNoZXMKIDs7ICAtIHJldmxpc3QgYnJvd3NlcgogOzsgIC0gZ2l0LXNob3ctYnJhbmNoIGJyb3dzZXIKLTs7ICAtIG1lbnVzCis7OworCis7OzsgQ29tcGF0aWJpbGl0eToKKzs7Cis7OyBUaGlzIGZpbGUgd29ya3Mgb24gR05VIEVtYWNzIDIxIG9yIGxhdGVyLiBJdCBtYXkgd29yayBvbiBvbGRlcgorOzsgdmVyc2lvbnMgYnV0IHRoaXMgaXMgbm90IGd1YXJhbnRlZWQuCis7OworOzsgSXQgbWF5IHdvcmsgb24gWEVtYWNzIDIxLCBwcm92aWRlZCB0aGF0IHlvdSBmaXJzdCBpbnN0YWxsIHRoZSBld29jCis7OyBhbmQgbG9nLWVkaXQgcGFja2FnZXMuCiA7OwogCiAoZXZhbC13aGVuLWNvbXBpbGUgKHJlcXVpcmUgJ2NsKSkKQEAgLTIyMiw3ICsyMjgsNyBAQAogICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgogICAgICAgKGNkIGRpcikKICAgICAgIChhcHBseSAjJ2NhbGwtcHJvY2Vzcy1yZWdpb24gc3RhcnQgZW5kIHByb2dyYW0KLSAgICAgICAgICAgICBuaWwgKGxpc3Qgb3V0cHV0LWJ1ZmZlciBuaWwpIG5pbCBhcmdzKSkpKQorICAgICAgICAgICAgIG5pbCAobGlzdCBvdXRwdXQtYnVmZmVyIHQpIG5pbCBhcmdzKSkpKQogCiAoZGVmdW4gZ2l0LXJ1bi1jb21tYW5kLWJ1ZmZlciAoYnVmZmVyLW5hbWUgJnJlc3QgYXJncykKICAgIlJ1biBhIGdpdCBjb21tYW5kLCBzZW5kaW5nIHRoZSBvdXRwdXQgdG8gYSBidWZmZXIgbmFtZWQgQlVGRkVSLU5BTUUuIgpAQCAtMjM5LDEzICsyNDUsMTUgQEAKIAogKGRlZnVuIGdpdC1ydW4tY29tbWFuZC1yZWdpb24gKGJ1ZmZlciBzdGFydCBlbmQgZW52ICZyZXN0IGFyZ3MpCiAgICJSdW4gYSBnaXQgY29tbWFuZCB3aXRoIHNwZWNpZmllZCBidWZmZXIgcmVnaW9uIGFzIGlucHV0LiIKLSAgKHVubGVzcyAoZXEgMCAoaWYgZW52Ci0gICAgICAgICAgICAgICAgICAgIChnaXQtcnVuLXByb2Nlc3MtcmVnaW9uCi0gICAgICAgICAgICAgICAgICAgICBidWZmZXIgc3RhcnQgZW5kICJlbnYiCi0gICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIChnaXQtZ2V0LWVudi1zdHJpbmdzIGVudikgKGxpc3QgImdpdCIpIGFyZ3MpKQorICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgIChpZiAoZXEgMCAoaWYgZW52CiAgICAgICAgICAgICAgICAgICAoZ2l0LXJ1bi1wcm9jZXNzLXJlZ2lvbgotICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBzdGFydCBlbmQgImdpdCIgYXJncykpKQotICAgIChlcnJvciAiRmFpbGVkIHRvIHJ1biBcImdpdCAlc1wiOlxuJXMiIChtYXBjb25jYXQgKGxhbWJkYSAoeCkgeCkgYXJncyAiICIpIChidWZmZXItc3RyaW5nKSkpKQorICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBzdGFydCBlbmQgImVudiIKKyAgICAgICAgICAgICAgICAgICAoYXBwZW5kIChnaXQtZ2V0LWVudi1zdHJpbmdzIGVudikgKGxpc3QgImdpdCIpIGFyZ3MpKQorICAgICAgICAgICAgICAgIChnaXQtcnVuLXByb2Nlc3MtcmVnaW9uIGJ1ZmZlciBzdGFydCBlbmQgImdpdCIgYXJncykpKQorICAgICAgICAoYnVmZmVyLXN0cmluZykKKyAgICAgIChkaXNwbGF5LW1lc3NhZ2Utb3ItYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpCisgICAgICBuaWwpKSkKIAogKGRlZnVuIGdpdC1ydW4taG9vayAoaG9vayBlbnYgJnJlc3QgYXJncykKICAgIlJ1biBhIGdpdCBob29rIGFuZCBkaXNwbGF5IGl0cyBvdXRwdXQgaWYgYW55LiIKQEAgLTM5Nyw2ICs0MDUsMTcgQEAKICAgICAodW5sZXNzIG5ld3ZhbCAocHVzaCAiLWQiIGFyZ3MpKQogICAgIChhcHBseSAnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJ1cGRhdGUtcmVmIiBhcmdzKSkpCiAKKyhkZWZ1biBnaXQtZm9yLWVhY2gtcmVmICgmcmVzdCBzcGVjcykKKyAgIlJldHVybiBhIGxpc3Qgb2YgcmVmcyB1c2luZyBnaXQtZm9yLWVhY2gtcmVmLgorRWFjaCBlbnRyeSBpcyBhIGNvbnMgb2YgKFNIT1JULU5BTUUgLiBGVUxMLU5BTUUpLiIKKyAgKGxldCAocmVmcykKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2VzcyB0ICJmb3ItZWFjaC1yZWYiICItLWZvcm1hdD0lKHJlZm5hbWUpIiBzcGVjcykKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJeW14vXG5dKy9bXi9cbl0rL1xcKC4rXFwpJCIgbmlsIHQpCisJKHB1c2ggKGNvbnMgKG1hdGNoLXN0cmluZyAxKSAobWF0Y2gtc3RyaW5nIDApKSByZWZzKSkpCisgICAgKG5yZXZlcnNlIHJlZnMpKSkKKwogKGRlZnVuIGdpdC1yZWFkLXRyZWUgKHRyZWUgJm9wdGlvbmFsIGluZGV4LWZpbGUpCiAgICJSZWFkIGEgdHJlZSBpbnRvIHRoZSBpbmRleCBmaWxlLiIKICAgKGxldCAoKHByb2Nlc3MtZW52aXJvbm1lbnQKQEAgLTQ0NywxOCArNDY2LDE2IEBACiAgICAgICAoc2V0cSBjb2Rpbmctc3lzdGVtLWZvci13cml0ZSBidWZmZXItZmlsZS1jb2Rpbmctc3lzdGVtKSkKICAgICAobGV0ICgoY29tbWl0CiAgICAgICAgICAgIChnaXQtZ2V0LXN0cmluZy1zaGExCi0gICAgICAgICAgICAod2l0aC1vdXRwdXQtdG8tc3RyaW5nCi0gICAgICAgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHN0YW5kYXJkLW91dHB1dAotICAgICAgICAgICAgICAgIChsZXQgKChlbnYgYCgoIkdJVF9BVVRIT1JfTkFNRSIgLiAsYXV0aG9yLW5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiR0lUX0FVVEhPUl9FTUFJTCIgLiAsYXV0aG9yLWVtYWlsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkdJVF9DT01NSVRURVJfTkFNRSIgLiAsKGdpdC1nZXQtY29tbWl0dGVyLW5hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkdJVF9DT01NSVRURVJfRU1BSUwiIC4gLChnaXQtZ2V0LWNvbW1pdHRlci1lbWFpbCkpKSkpCi0gICAgICAgICAgICAgICAgICAod2hlbiBhdXRob3ItZGF0ZSAocHVzaCBgKCJHSVRfQVVUSE9SX0RBVEUiIC4gLGF1dGhvci1kYXRlKSBlbnYpKQotICAgICAgICAgICAgICAgICAgKGFwcGx5ICMnZ2l0LXJ1bi1jb21tYW5kLXJlZ2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBsb2ctc3RhcnQgbG9nLWVuZCBlbnYKLSAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWl0LXRyZWUiIHRyZWUgKG5yZXZlcnNlIGFyZ3MpKSkpKSkpKQotICAgICAgKGFuZCAoZ2l0LXVwZGF0ZS1yZWYgIkhFQUQiIGNvbW1pdCBoZWFkIHN1YmplY3QpCi0gICAgICAgICAgIGNvbW1pdCkpKSkKKyAgICAgICAgICAgIChsZXQgKChlbnYgYCgoIkdJVF9BVVRIT1JfTkFNRSIgLiAsYXV0aG9yLW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJHSVRfQVVUSE9SX0VNQUlMIiAuICxhdXRob3ItZW1haWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJHSVRfQ09NTUlUVEVSX05BTUUiIC4gLChnaXQtZ2V0LWNvbW1pdHRlci1uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAoIkdJVF9DT01NSVRURVJfRU1BSUwiIC4gLChnaXQtZ2V0LWNvbW1pdHRlci1lbWFpbCkpKSkpCisgICAgICAgICAgICAgICh3aGVuIGF1dGhvci1kYXRlIChwdXNoIGAoIkdJVF9BVVRIT1JfREFURSIgLiAsYXV0aG9yLWRhdGUpIGVudikpCisgICAgICAgICAgICAgIChhcHBseSAjJ2dpdC1ydW4tY29tbWFuZC1yZWdpb24KKyAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBsb2ctc3RhcnQgbG9nLWVuZCBlbnYKKyAgICAgICAgICAgICAgICAgICAgICJjb21taXQtdHJlZSIgdHJlZSAobnJldmVyc2UgYXJncykpKSkpKQorICAgICAgKHdoZW4gY29tbWl0IChnaXQtdXBkYXRlLXJlZiAiSEVBRCIgY29tbWl0IGhlYWQgc3ViamVjdCkpCisgICAgICBjb21taXQpKSkKIAogKGRlZnVuIGdpdC1lbXB0eS1kYi1wICgpCiAgICJDaGVjayBpZiB0aGUgZ2l0IGRiIGlzIGVtcHR5IChubyBjb21taXQgZG9uZSB5ZXQpLiIKQEAgLTUxMyw5ICs1MzAsOSBAQAogICAgICAgICAgIChnaXQtZmlsZWluZm8tPm5lZWRzLXJlZnJlc2ggaW5mbykgdCkpKQogCiAoZGVmdW4gZ2l0LXN0YXR1cy1maWxlbmFtZXMtbWFwIChzdGF0dXMgZnVuYyBmaWxlcyAmcmVzdCBhcmdzKQotICAiQXBwbHkgRlVOQyB0byB0aGUgc3RhdHVzIGZpbGVzIG5hbWVzIGluIHRoZSBGSUxFUyBsaXN0LiIKKyAgIkFwcGx5IEZVTkMgdG8gdGhlIHN0YXR1cyBmaWxlcyBuYW1lcyBpbiB0aGUgRklMRVMgbGlzdC4KK1RoZSBsaXN0IG11c3QgYmUgc29ydGVkLiIKICAgKHdoZW4gZmlsZXMKLSAgICAoc2V0cSBmaWxlcyAoc29ydCBmaWxlcyAjJ3N0cmluZy1sZXNzcCkpCiAgICAgKGxldCAoKGZpbGUgKHBvcCBmaWxlcykpCiAgICAgICAgICAgKG5vZGUgKGV3b2MtbnRoIHN0YXR1cyAwKSkpCiAgICAgICAod2hpbGUgKGFuZCBmaWxlIG5vZGUpCkBAIC01MjgsNyArNTQ1LDcgQEAKICAgICAgICAgICAgIChzZXRxIGZpbGUgKHBvcCBmaWxlcykpKSkpKSkpCiAKIChkZWZ1biBnaXQtc2V0LWZpbGVuYW1lcy1zdGF0ZSAoc3RhdHVzIGZpbGVzIHN0YXRlKQotICAiU2V0IHRoZSBzdGF0ZSBvZiBhIGxpc3Qgb2YgbmFtZWQgZmlsZXMuIgorICAiU2V0IHRoZSBzdGF0ZSBvZiBhIGxpc3Qgb2YgbmFtZWQgZmlsZXMuIFRoZSBsaXN0IG11c3QgYmUgc29ydGVkIgogICAod2hlbiBmaWxlcwogICAgIChnaXQtc3RhdHVzLWZpbGVuYW1lcy1tYXAgc3RhdHVzICMnZ2l0LXNldC1maWxlaW5mby1zdGF0ZSBmaWxlcyBzdGF0ZSkKICAgICAodW5sZXNzIHN0YXRlICA7OyBkZWxldGUgZmlsZXMgd2hvc2Ugc3RhdGUgaGFzIGJlZW4gc2V0IHRvIG5pbApAQCAtNTYyLDI5ICs1NzksMjkgQEAKICAgKGxldCogKChvbGQtdHlwZSAobHNoIChvciBvbGQtcGVybSAwKSAtOSkpCiAJIChuZXctdHlwZSAobHNoIChvciBuZXctcGVybSAwKSAtOSkpCiAJIChzdHIgKGNhc2UgbmV3LXR5cGUKLQkJKD9cMTAwICA7OyBmaWxlCisJCSg2NCAgOzsgZmlsZQogCQkgKGNhc2Ugb2xkLXR5cGUKLQkJICAgKD9cMTAwIG5pbCkKLQkJICAgKD9cMTIwICIgICAodHlwZSBjaGFuZ2Ugc3ltbGluayAtPiBmaWxlKSIpCi0JCSAgICg/XDE2MCAiICAgKHR5cGUgY2hhbmdlIHN1YnByb2plY3QgLT4gZmlsZSkiKSkpCi0JCSAoP1wxMjAgIDs7IHN5bWxpbmsKKwkJICAgKDY0IG5pbCkKKwkJICAgKDgwICIgICAodHlwZSBjaGFuZ2Ugc3ltbGluayAtPiBmaWxlKSIpCisJCSAgICgxMTIgIiAgICh0eXBlIGNoYW5nZSBzdWJwcm9qZWN0IC0+IGZpbGUpIikpKQorCQkgKDgwICA7OyBzeW1saW5rCiAJCSAgKGNhc2Ugb2xkLXR5cGUKLQkJICAgICg/XDEwMCAiICAgKHR5cGUgY2hhbmdlIGZpbGUgLT4gc3ltbGluaykiKQotCQkgICAgKD9cMTYwICIgICAodHlwZSBjaGFuZ2Ugc3VicHJvamVjdCAtPiBzeW1saW5rKSIpCisJCSAgICAoNjQgIiAgICh0eXBlIGNoYW5nZSBmaWxlIC0+IHN5bWxpbmspIikKKwkJICAgICgxMTIgIiAgICh0eXBlIGNoYW5nZSBzdWJwcm9qZWN0IC0+IHN5bWxpbmspIikKIAkJICAgICh0ICIgICAoc3ltbGluaykiKSkpCi0JCSAgKD9cMTYwICA7OyBzdWJwcm9qZWN0CisJCSAgKDExMiAgOzsgc3VicHJvamVjdAogCQkgICAoY2FzZSBvbGQtdHlwZQotCQkgICAgICg/XDEwMCAiICAgKHR5cGUgY2hhbmdlIGZpbGUgLT4gc3VicHJvamVjdCkiKQotCQkgICAgICg/XDEyMCAiICAgKHR5cGUgY2hhbmdlIHN5bWxpbmsgLT4gc3VicHJvamVjdCkiKQorCQkgICAgICg2NCAiICAgKHR5cGUgY2hhbmdlIGZpbGUgLT4gc3VicHJvamVjdCkiKQorCQkgICAgICg4MCAiICAgKHR5cGUgY2hhbmdlIHN5bWxpbmsgLT4gc3VicHJvamVjdCkiKQogCQkgICAgICh0ICIgICAoc3VicHJvamVjdCkiKSkpCi0gICAgICAgICAgICAgICAgICAoP1wxMTAgbmlsKSAgOzsgZGlyZWN0b3J5IChpbnRlcm5hbCwgbm90IGEgcmVhbCBnaXQgc3RhdGUpCi0JCSAgKD9cMDAwICA7OyBkZWxldGVkIG9yIHVua25vd24KKyAgICAgICAgICAgICAgICAgICg3MiBuaWwpICA7OyBkaXJlY3RvcnkgKGludGVybmFsLCBub3QgYSByZWFsIGdpdCBzdGF0ZSkKKwkJICAoMCAgOzsgZGVsZXRlZCBvciB1bmtub3duCiAJCSAgIChjYXNlIG9sZC10eXBlCi0JCSAgICAgKD9cMTIwICIgICAoc3ltbGluaykiKQotCQkgICAgICg/XDE2MCAiICAgKHN1YnByb2plY3QpIikpKQorCQkgICAgICg4MCAiICAgKHN5bWxpbmspIikKKwkJICAgICAoMTEyICIgICAoc3VicHJvamVjdCkiKSkpCiAJCSAgKHQgKGZvcm1hdCAiICAgKHVua25vd24gdHlwZSAlbykiIG5ldy10eXBlKSkpKSkKICAgICAoY29uZCAoc3RyIChwcm9wZXJ0aXplIHN0ciAnZmFjZSAnZ2l0LXN0YXR1cy1mYWNlKSkKLSAgICAgICAgICAoKGVxIG5ldy10eXBlID9cMTEwKSAiLyIpCisgICAgICAgICAgKChlcSBuZXctdHlwZSA3MikgIi8iKQogICAgICAgICAgICh0ICIiKSkpKQogCiAoZGVmdW4gZ2l0LXJlbmFtZS1hcy1zdHJpbmcgKGluZm8pCkBAIC03MzMsNiArNzUwLDcgQEAKICAgICAobGV0ICh1bm1lcmdlZC1maWxlcykKICAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgIlswLTddXFx7NlxcfSBbMC05YS1mXVxcezQwXFx9IFsxMjNdXHRcXChbXlwwXStcXClcMCIgbmlsIHQpCiAgICAgICAgIChwdXNoIChtYXRjaC1zdHJpbmcgMSkgdW5tZXJnZWQtZmlsZXMpKQorICAgICAgKHNldHEgdW5tZXJnZWQtZmlsZXMgKG5yZXZlcnNlIHVubWVyZ2VkLWZpbGVzKSkgIDs7IGFzc3VtZSBpdCBpcyBzb3J0ZWQgYWxyZWFkeQogICAgICAgKGdpdC1zZXQtZmlsZW5hbWVzLXN0YXRlIHN0YXR1cyB1bm1lcmdlZC1maWxlcyAndW5tZXJnZWQpKSkpCiAKIChkZWZ1biBnaXQtZ2V0LWV4Y2x1ZGUtZmlsZXMgKCkKQEAgLTc1MywxNyArNzcxLDE4IEBACiAgICAgICAgICAgIChhcHBlbmQgb3B0aW9ucyAobWFwY2FyIChsYW1iZGEgKGYpIChjb25jYXQgIi0tZXhjbHVkZS1mcm9tPSIgZikpIGV4Y2x1ZGUtZmlsZXMpKSkpKQogCiAoZGVmdW4gZ2l0LXVwZGF0ZS1zdGF0dXMtZmlsZXMgKCZvcHRpb25hbCBmaWxlcyBtYXJrLWZpbGVzKQotICAiVXBkYXRlIHRoZSBzdGF0dXMgb2YgRklMRVMgZnJvbSB0aGUgaW5kZXguIgorICAiVXBkYXRlIHRoZSBzdGF0dXMgb2YgRklMRVMgZnJvbSB0aGUgaW5kZXguCitUaGUgRklMRVMgbGlzdCBtdXN0IGJlIHNvcnRlZC4iCiAgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKICAgOzsgc2V0IHRoZSBuZWVkcy11cGRhdGUgZmxhZyBvbiBleGlzdGluZyBmaWxlcwotICAoaWYgKHNldHEgZmlsZXMgKHNvcnQgZmlsZXMgIydzdHJpbmctbGVzc3ApKQorICAoaWYgZmlsZXMKICAgICAgIChnaXQtc3RhdHVzLWZpbGVuYW1lcy1tYXAKICAgICAgICBnaXQtc3RhdHVzIChsYW1iZGEgKGluZm8pIChzZXRmIChnaXQtZmlsZWluZm8tPm5lZWRzLXVwZGF0ZSBpbmZvKSB0KSkgZmlsZXMpCiAgICAgKGV3b2MtbWFwIChsYW1iZGEgKGluZm8pIChzZXRmIChnaXQtZmlsZWluZm8tPm5lZWRzLXVwZGF0ZSBpbmZvKSB0KSBuaWwpIGdpdC1zdGF0dXMpCiAgICAgKGdpdC1jYWxsLXByb2Nlc3MgbmlsICJ1cGRhdGUtaW5kZXgiICItLXJlZnJlc2giKQogICAgICh3aGVuIGdpdC1zaG93LXVwdG9kYXRlCiAgICAgICAoZ2l0LXJ1bi1scy1maWxlcy1jYWNoZWQgZ2l0LXN0YXR1cyBuaWwgJ3VwdG9kYXRlKSkpCi0gIChsZXQqICgocmVtYWluaW5nLWZpbGVzCisgIChsZXQgKChyZW1haW5pbmctZmlsZXMKICAgICAgICAgICAoaWYgKGdpdC1lbXB0eS1kYi1wKSA7IHdlIG5lZWQgc29tZSBzcGVjaWFsIGhhbmRsaW5nIGZvciBhbiBlbXB0eSBkYgogCSAgICAgIChnaXQtcnVuLWxzLWZpbGVzLWNhY2hlZCBnaXQtc3RhdHVzIGZpbGVzICdhZGRlZCkKICAgICAgICAgICAgIChnaXQtcnVuLWRpZmYtaW5kZXggZ2l0LXN0YXR1cyBmaWxlcykpKSkKQEAgLTgwOCwxMyArODI3LDEzIEBACiAgICAgICAobGlzdCAoZXdvYy1kYXRhIChld29jLWxvY2F0ZSBnaXQtc3RhdHVzKSkpKSkKIAogKGRlZnVuIGdpdC1tYXJrZWQtZmlsZXMtc3RhdGUgKCZyZXN0IHN0YXRlcykKLSAgIlJldHVybiBtYXJrZWQgZmlsZXMgdGhhdCBhcmUgaW4gdGhlIHNwZWNpZmllZCBzdGF0ZXMuIgorICAiUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgbWFya2VkIGZpbGVzIHRoYXQgYXJlIGluIHRoZSBzcGVjaWZpZWQgc3RhdGVzLiIKICAgKGxldCAoKGZpbGVzIChnaXQtbWFya2VkLWZpbGVzKSkKICAgICAgICAgcmVzdWx0KQogICAgIChkb2xpc3QgKGluZm8gZmlsZXMpCiAgICAgICAod2hlbiAobWVtcSAoZ2l0LWZpbGVpbmZvLT5zdGF0ZSBpbmZvKSBzdGF0ZXMpCiAgICAgICAgIChwdXNoIGluZm8gcmVzdWx0KSkpCi0gICAgcmVzdWx0KSkKKyAgICAobnJldmVyc2UgcmVzdWx0KSkpCiAKIChkZWZ1biBnaXQtcmVmcmVzaC1maWxlcyAoKQogICAiUmVmcmVzaCBhbGwgZmlsZXMgdGhhdCBuZWVkIGl0IGFuZCBjbGVhciB0aGUgbmVlZHMtcmVmcmVzaCBmbGFnLiIKQEAgLTEwNDksNyArMTA2OCw5IEBACiAgICAgKHVubGVzcyBmaWxlcwogICAgICAgKHB1c2ggKGZpbGUtcmVsYXRpdmUtbmFtZSAocmVhZC1maWxlLW5hbWUgIkZpbGUgdG8gcmVtb3ZlOiAiIG5pbCBuaWwgdCkpIGZpbGVzKSkKICAgICAoaWYgKHllcy1vci1uby1wCi0gICAgICAgICAoZm9ybWF0ICJSZW1vdmUgJWQgZmlsZSVzPyAiIChsZW5ndGggZmlsZXMpIChpZiAoPiAobGVuZ3RoIGZpbGVzKSAxKSAicyIgIiIpKSkKKyAgICAgICAgIChpZiAoY2RyIGZpbGVzKQorICAgICAgICAgICAgIChmb3JtYXQgIlJlbW92ZSAlZCBmaWxlcz8gIiAobGVuZ3RoIGZpbGVzKSkKKyAgICAgICAgICAgKGZvcm1hdCAiUmVtb3ZlICVzPyAiIChjYXIgZmlsZXMpKSkpCiAgICAgICAgIChwcm9nbgogICAgICAgICAgIChkb2xpc3QgKG5hbWUgZmlsZXMpCiAgICAgICAgICAgICAoaWdub3JlLWVycm9ycwpAQCAtMTA2OCw3ICsxMDg5LDkgQEAKICAgICAgICAgYWRkZWQgbW9kaWZpZWQpCiAgICAgKHdoZW4gKGFuZCBmaWxlcwogICAgICAgICAgICAgICAgKHllcy1vci1uby1wCi0gICAgICAgICAgICAgICAgKGZvcm1hdCAiUmV2ZXJ0ICVkIGZpbGUlcz8gIiAobGVuZ3RoIGZpbGVzKSAoaWYgKD4gKGxlbmd0aCBmaWxlcykgMSkgInMiICIiKSkpKQorICAgICAgICAgICAgICAgIChpZiAoY2RyIGZpbGVzKQorICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICJSZXZlcnQgJWQgZmlsZXM/ICIgKGxlbmd0aCBmaWxlcykpCisgICAgICAgICAgICAgICAgICAoZm9ybWF0ICJSZXZlcnQgJXM/ICIgKGdpdC1maWxlaW5mby0+bmFtZSAoY2FyIGZpbGVzKSkpKSkpCiAgICAgICAoZG9saXN0IChpbmZvIGZpbGVzKQogICAgICAgICAoY2FzZSAoZ2l0LWZpbGVpbmZvLT5zdGF0ZSBpbmZvKQogICAgICAgICAgICgnYWRkZWQgKHB1c2ggKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSBhZGRlZCkpCkBAIC0xMDg0LDEzICsxMTA3LDE0IEBACiAgICAgICAgICAgICAgICAgIChvciAobm90IGFkZGVkKQogICAgICAgICAgICAgICAgICAgICAgKGFwcGx5ICdnaXQtY2FsbC1wcm9jZXNzLWRpc3BsYXktZXJyb3IgInVwZGF0ZS1pbmRleCIgIi0tZm9yY2UtcmVtb3ZlIiAiLS0iIGFkZGVkKSkKICAgICAgICAgICAgICAgICAgKG9yIChub3QgbW9kaWZpZWQpCi0gICAgICAgICAgICAgICAgICAgICAoYXBwbHkgJ2dpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAiY2hlY2tvdXQiICJIRUFEIiBtb2RpZmllZCkpKSkpCi0gICAgICAgIChnaXQtdXBkYXRlLXN0YXR1cy1maWxlcyAoYXBwZW5kIGFkZGVkIG1vZGlmaWVkKSkKKyAgICAgICAgICAgICAgICAgICAgIChhcHBseSAnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJjaGVja291dCIgIkhFQUQiIG1vZGlmaWVkKSkpKQorICAgICAgICAgICAgKG5hbWVzIChnaXQtZ2V0LWZpbGVuYW1lcyBmaWxlcykpKQorICAgICAgICAoZ2l0LXVwZGF0ZS1zdGF0dXMtZmlsZXMgbmFtZXMpCiAgICAgICAgICh3aGVuIG9rCiAgICAgICAgICAgKGRvbGlzdCAoZmlsZSBtb2RpZmllZCkKICAgICAgICAgICAgIChsZXQgKChidWZmZXIgKGdldC1maWxlLWJ1ZmZlciBmaWxlKSkpCiAgICAgICAgICAgICAgICh3aGVuIGJ1ZmZlciAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIgKHJldmVydC1idWZmZXIgdCB0IHQpKSkpKQotICAgICAgICAgIChnaXQtc3VjY2Vzcy1tZXNzYWdlICJSZXZlcnRlZCIgKGdpdC1nZXQtZmlsZW5hbWVzIGZpbGVzKSkpKSkpKQorICAgICAgICAgIChnaXQtc3VjY2Vzcy1tZXNzYWdlICJSZXZlcnRlZCIgbmFtZXMpKSkpKSkKIAogKGRlZnVuIGdpdC1yZXNvbHZlLWZpbGUgKCkKICAgIlJlc29sdmUgY29uZmxpY3RzIGluIG1hcmtlZCBmaWxlKHMpLiIKQEAgLTEzMjAsNiArMTM0NCw3IEBACiAJCQkJCSAobG9nLWVkaXQtZGlmZi1mdW5jdGlvbiAuIGdpdC1sb2ctZWRpdC1kaWZmKSkgYnVmZmVyKQogCShsb2ctZWRpdCAnZ2l0LWRvLWNvbW1pdCBuaWwgJ2dpdC1sb2ctZWRpdC1maWxlcyBidWZmZXIpKQogICAgICAgKHNldHEgZm9udC1sb2NrLWtleXdvcmRzIChmb250LWxvY2stY29tcGlsZS1rZXl3b3JkcyBnaXQtbG9nLWVkaXQtZm9udC1sb2NrLWtleXdvcmRzKSkKKyAgICAgIChzZXRxIHBhcmFncmFwaC1zZXBhcmF0ZSAoY29uY2F0IChyZWdleHAtcXVvdGUgZ2l0LWxvZy1tc2ctc2VwYXJhdG9yKSAiJFxcfEF1dGhvcjogXFx8RGF0ZTogXFx8TWVyZ2U6IFxcfFNpZ25lZC1vZmYtYnk6IFxcfFxmXFx8WyAJXSokIikpCiAgICAgICAoc2V0cSBidWZmZXItZmlsZS1jb2Rpbmctc3lzdGVtIGNvZGluZy1zeXN0ZW0pCiAgICAgICAocmUtc2VhcmNoLWZvcndhcmQgKHJlZ2V4cC1xdW90ZSAoY29uY2F0IGdpdC1sb2ctbXNnLXNlcGFyYXRvciAiXG4iKSkgbmlsIHQpKSkpCiAKQEAgLTEzNDcsMTQgKzEzNzIsNDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGNvbmNhdCAjJ2lkZW50aXR5IG1zZyAiXG4iKSkpKQogCiAoZGVmdW4gZ2l0LWdldC1jb21taXQtZmlsZXMgKGNvbW1pdCkKLSAgIlJldHJpZXZlIHRoZSBsaXN0IG9mIGZpbGVzIG1vZGlmaWVkIGJ5IENPTU1JVC4iCisgICJSZXRyaWV2ZSBhIHNvcnRlZCBsaXN0IG9mIGZpbGVzIG1vZGlmaWVkIGJ5IENPTU1JVC4iCiAgIChsZXQgKGZpbGVzKQogICAgICh3aXRoLXRlbXAtYnVmZmVyCiAgICAgICAoZ2l0LWNhbGwtcHJvY2VzcyB0ICJkaWZmLXRyZWUiICItbSIgIi1yIiAiLXoiICItLW5hbWUtb25seSIgIi0tbm8tY29tbWl0LWlkIiAiLS1yb290IiBjb21taXQpCiAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCAiXFwoW15cMF0qXFwpXDAiIG5pbCB0IDEpCiAgICAgICAgIChwdXNoIChtYXRjaC1zdHJpbmcgMSkgZmlsZXMpKSkKLSAgICBmaWxlcykpCisgICAgKHNvcnQgZmlsZXMgIydzdHJpbmctbGVzc3ApKSkKKworKGRlZnVuIGdpdC1yZWFkLWNvbW1pdC1uYW1lIChwcm9tcHQgJm9wdGlvbmFsIGRlZmF1bHQpCisgICJBc2sgZm9yIGEgY29tbWl0IG5hbWUsIHdpdGggY29tcGxldGlvbiBmb3IgbG9jYWwgYnJhbmNoLCByZW1vdGUgYnJhbmNoIGFuZCB0YWcuIgorICAoY29tcGxldGluZy1yZWFkIHByb21wdAorICAgICAgICAgICAgICAgICAgIChsaXN0KiAiSEVBRCIgIk9SSUdfSEVBRCIgIkZFVENIX0hFQUQiIChtYXBjYXIgIydjYXIgKGdpdC1mb3ItZWFjaC1yZWYpKSkKKwkJICAgbmlsIG5pbCBuaWwgbmlsIGRlZmF1bHQpKQorCisoZGVmdW4gZ2l0LWNoZWNrb3V0IChicmFuY2ggJm9wdGlvbmFsIG1lcmdlKQorICAiQ2hlY2tvdXQgYSBicmFuY2gsIHRhZywgb3IgYW55IGNvbW1pdC4KK1VzZSBhIHByZWZpeCBhcmcgaWYgZ2l0IHNob3VsZCBtZXJnZSB3aGlsZSBjaGVja2luZyBvdXQuIgorICAoaW50ZXJhY3RpdmUKKyAgIChsaXN0IChnaXQtcmVhZC1jb21taXQtbmFtZSAiQ2hlY2tvdXQ6ICIpCisgICAgICAgICBjdXJyZW50LXByZWZpeC1hcmcpKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChsZXQgKChhcmdzIChsaXN0IGJyYW5jaCAiLS0iKSkpCisgICAgKHdoZW4gbWVyZ2UgKHB1c2ggIi1tIiBhcmdzKSkKKyAgICAod2hlbiAoYXBwbHkgIydnaXQtY2FsbC1wcm9jZXNzLWRpc3BsYXktZXJyb3IgImNoZWNrb3V0IiBhcmdzKQorICAgICAgKGdpdC11cGRhdGUtc3RhdHVzLWZpbGVzKSkpKQorCisoZGVmdW4gZ2l0LWJyYW5jaCAoYnJhbmNoKQorICAiQ3JlYXRlIGEgYnJhbmNoIGZyb20gdGhlIGN1cnJlbnQgSEVBRCBhbmQgc3dpdGNoIHRvIGl0LiIKKyAgKGludGVyYWN0aXZlIChsaXN0IChnaXQtcmVhZC1jb21taXQtbmFtZSAiQnJhbmNoOiAiKSkpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKGlmIChnaXQtcmV2LXBhcnNlIChjb25jYXQgInJlZnMvaGVhZHMvIiBicmFuY2gpKQorICAgICAgKGlmICh5ZXMtb3Itbm8tcCAoZm9ybWF0ICJCcmFuY2ggJXMgYWxyZWFkeSBleGlzdHMsIHJlcGxhY2UgaXQ/ICIgYnJhbmNoKSkKKyAgICAgICAgICAoYW5kIChnaXQtY2FsbC1wcm9jZXNzLWRpc3BsYXktZXJyb3IgImJyYW5jaCIgIi1mIiBicmFuY2gpCisgICAgICAgICAgICAgICAoZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJjaGVja291dCIgYnJhbmNoKSkKKyAgICAgICAgKG1lc3NhZ2UgIkNhbmNlbGVkLiIpKQorICAgIChnaXQtY2FsbC1wcm9jZXNzLWRpc3BsYXktZXJyb3IgImNoZWNrb3V0IiAiLWIiIGJyYW5jaCkpCisgICAgKGdpdC1yZWZyZXNoLWV3b2MtaGYgZ2l0LXN0YXR1cykpCiAKIChkZWZ1biBnaXQtYW1lbmQtY29tbWl0ICgpCiAgICJVbmRvIHRoZSBsYXN0IGNvbW1pdCBvbiBIRUFELCBhbmQgc2V0IHRoaW5ncyB1cCB0byBjb21taXQgYW4KQEAgLTEzNzIsNiArMTQyNyw0NCBAQAogICAgICAgKGdpdC1zZXR1cC1jb21taXQtYnVmZmVyIGNvbW1pdCkKICAgICAgIChnaXQtY29tbWl0LWZpbGUpKSkpCiAKKyhkZWZ1biBnaXQtY2hlcnJ5LXBpY2stY29tbWl0IChhcmcpCisgICJDaGVycnktcGljayBhIGNvbW1pdC4iCisgIChpbnRlcmFjdGl2ZSAobGlzdCAoZ2l0LXJlYWQtY29tbWl0LW5hbWUgIkNoZXJyeS1waWNrIGNvbW1pdDogIikpKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChsZXQgKChjb21taXQgKGdpdC1yZXYtcGFyc2UgKGNvbmNhdCBhcmcgIl4wIikpKSkKKyAgICAodW5sZXNzIGNvbW1pdCAoZXJyb3IgIk5vdCBhIHZhbGlkIGNvbW1pdCAnJXMnLiIgYXJnKSkKKyAgICAod2hlbiAoZ2l0LXJldi1wYXJzZSAoY29uY2F0IGNvbW1pdCAiXjIiKSkKKyAgICAgIChlcnJvciAiQ2Fubm90IGNoZXJyeS1waWNrIGEgbWVyZ2UgY29tbWl0LiIpKQorICAgIChsZXQgKChmaWxlcyAoZ2l0LWdldC1jb21taXQtZmlsZXMgY29tbWl0KSkKKyAgICAgICAgICAob2sgKGdpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAiY2hlcnJ5LXBpY2siICItbiIgY29tbWl0KSkpCisgICAgICAoZ2l0LXVwZGF0ZS1zdGF0dXMtZmlsZXMgZmlsZXMgb2spCisgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAoZ2l0LXNldHVwLWNvbW1pdC1idWZmZXIgY29tbWl0KQorICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkICJeXG4qU2lnbmVkLW9mZi1ieToiIG5pbCB0IDEpCisgICAgICAgICAgICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMCkpCisgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkpCisgICAgICAgIChpbnNlcnQgIihjaGVycnkgcGlja2VkIGZyb20gY29tbWl0ICIgY29tbWl0ICIpXG4iKSkKKyAgICAgICh3aGVuIG9rIChnaXQtY29tbWl0LWZpbGUpKSkpKQorCisoZGVmdW4gZ2l0LXJldmVydC1jb21taXQgKGFyZykKKyAgIlJldmVydCBhIGNvbW1pdC4iCisgIChpbnRlcmFjdGl2ZSAobGlzdCAoZ2l0LXJlYWQtY29tbWl0LW5hbWUgIlJldmVydCBjb21taXQ6ICIpKSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0ICgoY29tbWl0IChnaXQtcmV2LXBhcnNlIChjb25jYXQgYXJnICJeMCIpKSkpCisgICAgKHVubGVzcyBjb21taXQgKGVycm9yICJOb3QgYSB2YWxpZCBjb21taXQgJyVzJy4iIGFyZykpCisgICAgKHdoZW4gKGdpdC1yZXYtcGFyc2UgKGNvbmNhdCBjb21taXQgIl4yIikpCisgICAgICAoZXJyb3IgIkNhbm5vdCByZXZlcnQgYSBtZXJnZSBjb21taXQuIikpCisgICAgKGxldCAoKGZpbGVzIChnaXQtZ2V0LWNvbW1pdC1maWxlcyBjb21taXQpKQorICAgICAgICAgIChzdWJqZWN0IChnaXQtZ2V0LWNvbW1pdC1kZXNjcmlwdGlvbiBjb21taXQpKQorICAgICAgICAgIChvayAoZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJyZXZlcnQiICItbiIgY29tbWl0KSkpCisgICAgICAoZ2l0LXVwZGF0ZS1zdGF0dXMtZmlsZXMgZmlsZXMgb2spCisgICAgICAod2hlbiAoc3RyaW5nLW1hdGNoICJeWzAtOWEtZl0rIC0gXFwoLipcXCkkIiBzdWJqZWN0KQorICAgICAgICAoc2V0cSBzdWJqZWN0IChtYXRjaC1zdHJpbmcgMSBzdWJqZWN0KSkpCisgICAgICAoZ2l0LXNldHVwLWxvZy1idWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIqZ2l0LWNvbW1pdCoiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnaXQtZ2V0LW1lcmdlLWhlYWRzKSBuaWwgbmlsIChmb3JtYXQgIlJldmVydCBcIiVzXCIiIHN1YmplY3QpIG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgIlRoaXMgcmV2ZXJ0cyBjb21taXQgJXMuXG4iIGNvbW1pdCkpCisgICAgICAod2hlbiBvayAoZ2l0LWNvbW1pdC1maWxlKSkpKSkKKwogKGRlZnVuIGdpdC1maW5kLWZpbGUgKCkKICAgIlZpc2l0IHRoZSBjdXJyZW50IGZpbGUgaW4gaXRzIG93biBidWZmZXIuIgogICAoaW50ZXJhY3RpdmUpCkBAIC0xNDcxLDYgKzE1NjQsMTAgQEAKICAgICAoZGVmaW5lLWtleSBtYXAgIlxNLVxDLT8iICdnaXQtdW5tYXJrLWFsbCkKICAgICA7IHRoZSBjb21taXQgc3VibWFwCiAgICAgKGRlZmluZS1rZXkgY29tbWl0LW1hcCAiXEMtYSIgJ2dpdC1hbWVuZC1jb21taXQpCisgICAgKGRlZmluZS1rZXkgY29tbWl0LW1hcCAiXEMtYiIgJ2dpdC1icmFuY2gpCisgICAgKGRlZmluZS1rZXkgY29tbWl0LW1hcCAiXEMtbyIgJ2dpdC1jaGVja291dCkKKyAgICAoZGVmaW5lLWtleSBjb21taXQtbWFwICJcQy1wIiAnZ2l0LWNoZXJyeS1waWNrLWNvbW1pdCkKKyAgICAoZGVmaW5lLWtleSBjb21taXQtbWFwICJcQy12IiAnZ2l0LXJldmVydC1jb21taXQpCiAgICAgOyB0aGUgZGlmZiBzdWJtYXAKICAgICAoZGVmaW5lLWtleSBkaWZmLW1hcCAiYiIgJ2dpdC1kaWZmLWZpbGUtYmFzZSkKICAgICAoZGVmaW5lLWtleSBkaWZmLW1hcCAiYyIgJ2dpdC1kaWZmLWZpbGUtY29tYmluZWQpCkBAIC0xNDkxLDYgKzE1ODgsMTAgQEAKICAgICBgKCJHaXQiCiAgICAgICBbIlJlZnJlc2giIGdpdC1yZWZyZXNoLXN0YXR1cyB0XQogICAgICAgWyJDb21taXQiIGdpdC1jb21taXQtZmlsZSB0XQorICAgICAgWyJDaGVja291dC4uLiIgZ2l0LWNoZWNrb3V0IHRdCisgICAgICBbIk5ldyBCcmFuY2guLi4iIGdpdC1icmFuY2ggdF0KKyAgICAgIFsiQ2hlcnJ5LXBpY2sgQ29tbWl0Li4uIiBnaXQtY2hlcnJ5LXBpY2stY29tbWl0IHRdCisgICAgICBbIlJldmVydCBDb21taXQuLi4iIGdpdC1yZXZlcnQtY29tbWl0IHRdCiAgICAgICAoIk1lcmdlIgogCVsiTmV4dCBVbm1lcmdlZCBGaWxlIiBnaXQtbmV4dC11bm1lcmdlZC1maWxlIHRdCiAJWyJQcmV2IFVubWVyZ2VkIEZpbGUiIGdpdC1wcmV2LXVubWVyZ2VkLWZpbGUgdF0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZW1hY3MvdmMtZ2l0LmVsIGIvY29udHJpYi9lbWFjcy92Yy1naXQuZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZjZiZTUuLjAwMDAwMDAKLS0tIGEvY29udHJpYi9lbWFjcy92Yy1naXQuZWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotOzs7IHZjLWdpdC5lbCAtLS0gVkMgYmFja2VuZCBmb3IgdGhlIGdpdCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtCi0KLTs7IENvcHlyaWdodCAoQykgMjAwNiBBbGV4YW5kcmUgSnVsbGlhcmQKLQotOzsgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotOzsgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLTs7IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi07OyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLTs7Ci07OyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCi07OyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCi07OyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi07OyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotOzsKLTs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotOzsgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotOzsgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLTs7IE1BIDAyMTExLTEzMDcgVVNBCi0KLTs7OyBDb21tZW50YXJ5OgotCi07OyBUaGlzIGZpbGUgY29udGFpbnMgYSBWQyBiYWNrZW5kIGZvciB0aGUgZ2l0IHZlcnNpb24gY29udHJvbAotOzsgc3lzdGVtLgotOzsKLTs7IFRvIGluc3RhbGw6IHB1dCB0aGlzIGZpbGUgb24gdGhlIGxvYWQtcGF0aCBhbmQgYWRkIEdJVCB0byB0aGUgbGlzdAotOzsgb2Ygc3VwcG9ydGVkIGJhY2tlbmRzIGluIGB2Yy1oYW5kbGVkLWJhY2tlbmRzJzsgdGhlIGZvbGxvd2luZyBsaW5lLAotOzsgcGxhY2VkIGluIHlvdXIgfi8uZW1hY3MsIHdpbGwgYWNjb21wbGlzaCB0aGlzOgotOzsKLTs7ICAgICAoYWRkLXRvLWxpc3QgJ3ZjLWhhbmRsZWQtYmFja2VuZHMgJ0dJVCkKLTs7Ci07OyBUT0RPCi07OyAgLSBjaGFuZ2Vsb2cgZ2VuZXJhdGlvbgotOzsgIC0gd29ya2luZyB3aXRoIHJldmlzaW9ucyBvdGhlciB0aGFuIEhFQUQKLTs7Ci0KLShldmFsLXdoZW4tY29tcGlsZSAocmVxdWlyZSAnY2wpKQotCi0oZGVmdmFyIGdpdC1jb21taXRzLWNvZGluZy1zeXN0ZW0gJ3V0Zi04Ci0gICJEZWZhdWx0IGNvZGluZyBzeXN0ZW0gZm9yIGdpdCBjb21taXRzLiIpCi0KLShkZWZ1biB2Yy1naXQtLXJ1bi1jb21tYW5kLXN0cmluZyAoZmlsZSAmcmVzdCBhcmdzKQotICAiUnVuIGEgZ2l0IGNvbW1hbmQgb24gRklMRSBhbmQgcmV0dXJuIGl0cyBvdXRwdXQgYXMgc3RyaW5nLiIKLSAgKGxldCogKChvayB0KQotICAgICAgICAgKHN0ciAod2l0aC1vdXRwdXQtdG8tc3RyaW5nCi0gICAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgc3RhbmRhcmQtb3V0cHV0Ci0gICAgICAgICAgICAgICAgICAodW5sZXNzIChlcSAwIChhcHBseSAjJ2NhbGwtcHJvY2VzcyAiZ2l0IiBuaWwgJyh0IG5pbCkgbmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIGFyZ3MgKGxpc3QgKGZpbGUtcmVsYXRpdmUtbmFtZSBmaWxlKSkpKSkKLSAgICAgICAgICAgICAgICAgICAgKHNldHEgb2sgbmlsKSkpKSkpCi0gICAgKGFuZCBvayBzdHIpKSkKLQotKGRlZnVuIHZjLWdpdC0tcnVuLWNvbW1hbmQgKGZpbGUgJnJlc3QgYXJncykKLSAgIlJ1biBhIGdpdCBjb21tYW5kIG9uIEZJTEUsIGRpc2NhcmRpbmcgYW55IG91dHB1dC4iCi0gIChsZXQgKChuYW1lIChmaWxlLXJlbGF0aXZlLW5hbWUgZmlsZSkpKQotICAgIChlcSAwIChhcHBseSAjJ2NhbGwtcHJvY2VzcyAiZ2l0IiBuaWwgKGdldC1idWZmZXIgIipNZXNzYWdlcyIpIG5pbCAoYXBwZW5kIGFyZ3MgKGxpc3QgbmFtZSkpKSkpKQotCi0oZGVmdW4gdmMtZ2l0LXJlZ2lzdGVyZWQgKGZpbGUpCi0gICJDaGVjayB3aGV0aGVyIEZJTEUgaXMgcmVnaXN0ZXJlZCB3aXRoIGdpdC4iCi0gICh3aXRoLXRlbXAtYnVmZmVyCi0gICAgKGxldCogKChkaXIgKGZpbGUtbmFtZS1kaXJlY3RvcnkgZmlsZSkpCi0gICAgICAgICAgIChuYW1lIChmaWxlLXJlbGF0aXZlLW5hbWUgZmlsZSBkaXIpKSkKLSAgICAgIChhbmQgKGlnbm9yZS1lcnJvcnMKLSAgICAgICAgICAgICAod2hlbiBkaXIgKGNkIGRpcikpCi0gICAgICAgICAgICAgKGVxIDAgKGNhbGwtcHJvY2VzcyAiZ2l0IiBuaWwgJyh0IG5pbCkgbmlsICJscy1maWxlcyIgIi1jIiAiLXoiICItLSIgbmFtZSkpKQotICAgICAgICAgICAobGV0ICgoc3RyIChidWZmZXItc3RyaW5nKSkpCi0gICAgICAgICAgICAgKGFuZCAoPiAobGVuZ3RoIHN0cikgKGxlbmd0aCBuYW1lKSkKLSAgICAgICAgICAgICAgICAgIChzdHJpbmc9IChzdWJzdHJpbmcgc3RyIDAgKDErIChsZW5ndGggbmFtZSkpKSAoY29uY2F0IG5hbWUgIlwwIikpKSkpKSkpCi0KLShkZWZ1biB2Yy1naXQtc3RhdGUgKGZpbGUpCi0gICJnaXQtc3BlY2lmaWMgdmVyc2lvbiBvZiBgdmMtc3RhdGUnLiIKLSAgKGxldCAoKGRpZmYgKHZjLWdpdC0tcnVuLWNvbW1hbmQtc3RyaW5nIGZpbGUgImRpZmYtaW5kZXgiICIteiIgIkhFQUQiICItLSIpKSkKLSAgICAoaWYgKGFuZCBkaWZmIChzdHJpbmctbWF0Y2ggIjpbMC03XVxcezZcXH0gWzAtN11cXHs2XFx9IFswLTlhLWZdXFx7NDBcXH0gWzAtOWEtZl1cXHs0MFxcfSBbQURNVV1cMFteXDBdK1wwIiBkaWZmKSkKLSAgICAgICAgJ2VkaXRlZAotICAgICAgJ3VwLXRvLWRhdGUpKSkKLQotKGRlZnVuIHZjLWdpdC13b3JrZmlsZS12ZXJzaW9uIChmaWxlKQotICAiZ2l0LXNwZWNpZmljIHZlcnNpb24gb2YgYHZjLXdvcmtmaWxlLXZlcnNpb24nLiIKLSAgKGxldCAoKHN0ciAod2l0aC1vdXRwdXQtdG8tc3RyaW5nCi0gICAgICAgICAgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBzdGFuZGFyZC1vdXRwdXQKLSAgICAgICAgICAgICAgICAgKGNhbGwtcHJvY2VzcyAiZ2l0IiBuaWwgJyh0IG5pbCkgbmlsICJzeW1ib2xpYy1yZWYiICJIRUFEIikpKSkpCi0gICAgKGlmIChzdHJpbmctbWF0Y2ggIl5cXChyZWZzL2hlYWRzL1xcKT9cXCguK1xcKSQiIHN0cikKLSAgICAgICAgKG1hdGNoLXN0cmluZyAyIHN0cikKLSAgICAgIHN0cikpKQotCi0oZGVmdW4gdmMtZ2l0LXN5bWJvbGljLWNvbW1pdCAoY29tbWl0KQotICAiVHJhbnNsYXRlIENPTU1JVCBzdHJpbmcgaW50byBzeW1ib2xpYyBmb3JtLgotUmV0dXJucyBuaWwgaWYgbm90IHBvc3NpYmxlLiIKLSAgKGFuZCBjb21taXQKLSAgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgotCSAoYW5kCi0JICAoemVyb3AKLQkgICAoY2FsbC1wcm9jZXNzICJnaXQiIG5pbCAnKHQgbmlsKSBuaWwgIm5hbWUtcmV2IgotCQkJICItLW5hbWUtb25seSIgIi0tdGFncyIKLQkJCSBjb21taXQpKQotCSAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKLQkgICg9IChmb3J3YXJkLWxpbmUgMikgMSkKLQkgIChib2xwKQotCSAgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAocG9pbnQtbWluKSAoMS0gKHBvaW50LW1heCkpKSkpKSkKLQotKGRlZnVuIHZjLWdpdC1wcmV2aW91cy12ZXJzaW9uIChmaWxlIHJldikKLSAgImdpdC1zcGVjaWZpYyB2ZXJzaW9uIG9mIGB2Yy1wcmV2aW91cy12ZXJzaW9uJy4iCi0gIChsZXQgKChkZWZhdWx0LWRpcmVjdG9yeSAoZmlsZS1uYW1lLWRpcmVjdG9yeSAoZXhwYW5kLWZpbGUtbmFtZSBmaWxlKSkpCi0JKGZpbGUgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkgZmlsZSkpKQotICAgICh2Yy1naXQtc3ltYm9saWMtY29tbWl0Ci0gICAgICh3aXRoLXRlbXAtYnVmZmVyCi0gICAgICAgKGFuZAotCSh6ZXJvcAotCSAoY2FsbC1wcm9jZXNzICJnaXQiIG5pbCAnKHQgbmlsKSBuaWwgInJldi1saXN0IgotCQkgICAgICAgIi0yIiByZXYgIi0tIiBmaWxlKSkKLQkoZ290by1jaGFyIChwb2ludC1tYXgpKQotCShib2xwKQotCSh6ZXJvcCAoZm9yd2FyZC1saW5lIC0xKSkKLQkobm90IChib2JwKSkKLQkoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzCi0JICAgKHBvaW50KQotCSAgICgxLSAocG9pbnQtbWF4KSkpKSkpKSkKLQotKGRlZnVuIHZjLWdpdC1uZXh0LXZlcnNpb24gKGZpbGUgcmV2KQotICAiZ2l0LXNwZWNpZmljIHZlcnNpb24gb2YgYHZjLW5leHQtdmVyc2lvbicuIgotICAobGV0KiAoKGRlZmF1bHQtZGlyZWN0b3J5IChmaWxlLW5hbWUtZGlyZWN0b3J5Ci0JCQkgICAgIChleHBhbmQtZmlsZS1uYW1lIGZpbGUpKSkKLQkoZmlsZSAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBmaWxlKSkKLQkoY3VycmVudC1yZXYKLQkgKHdpdGgtdGVtcC1idWZmZXIKLQkgICAoYW5kCi0JICAgICh6ZXJvcAotCSAgICAgKGNhbGwtcHJvY2VzcyAiZ2l0IiBuaWwgJyh0IG5pbCkgbmlsICJyZXYtbGlzdCIKLQkJCSAgICItMSIgcmV2ICItLSIgZmlsZSkpCi0JICAgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpCi0JICAgIChib2xwKQotCSAgICAoemVyb3AgKGZvcndhcmQtbGluZSAtMSkpCi0JICAgIChib2JwKQotCSAgICAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzCi0JICAgICAocG9pbnQpCi0JICAgICAoMS0gKHBvaW50LW1heCkpKSkpKSkKLSAgICAoYW5kIGN1cnJlbnQtcmV2Ci0JICh2Yy1naXQtc3ltYm9saWMtY29tbWl0Ci0JICAod2l0aC10ZW1wLWJ1ZmZlcgotCSAgICAoYW5kCi0JICAgICAoemVyb3AKLQkgICAgICAoY2FsbC1wcm9jZXNzICJnaXQiIG5pbCAnKHQgbmlsKSBuaWwgInJldi1saXN0IgotCQkJICAgICJIRUFEIiAiLS0iIGZpbGUpKQotCSAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKLQkgICAgIChzZWFyY2gtZm9yd2FyZCBjdXJyZW50LXJldiBuaWwgdCkKLQkgICAgICh6ZXJvcCAoZm9yd2FyZC1saW5lIC0xKSkKLQkgICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMKLQkgICAgICAocG9pbnQpCi0JICAgICAgKHByb2duIChmb3J3YXJkLWxpbmUgMSkgKDEtIChwb2ludCkpKSkpKSkpKSkKLQotKGRlZnVuIHZjLWdpdC1yZXZlcnQgKGZpbGUgJm9wdGlvbmFsIGNvbnRlbnRzLWRvbmUpCi0gICJSZXZlcnQgRklMRSB0byB0aGUgdmVyc2lvbiBzdG9yZWQgaW4gdGhlIGdpdCByZXBvc2l0b3J5LiIKLSAgKGlmIGNvbnRlbnRzLWRvbmUKLSAgICAgICh2Yy1naXQtLXJ1bi1jb21tYW5kIGZpbGUgInVwZGF0ZS1pbmRleCIgIi0tIikKLSAgICAodmMtZ2l0LS1ydW4tY29tbWFuZCBmaWxlICJjaGVja291dCIgIkhFQUQiKSkpCi0KLShkZWZ1biB2Yy1naXQtY2hlY2tvdXQtbW9kZWwgKGZpbGUpCi0gICdpbXBsaWNpdCkKLQotKGRlZnVuIHZjLWdpdC13b3JrZmlsZS11bmNoYW5nZWQtcCAoZmlsZSkKLSAgKGxldCAoKHNoYTEgKHZjLWdpdC0tcnVuLWNvbW1hbmQtc3RyaW5nIGZpbGUgImhhc2gtb2JqZWN0IiAiLS0iKSkKLSAgICAgICAgKGhlYWQgKHZjLWdpdC0tcnVuLWNvbW1hbmQtc3RyaW5nIGZpbGUgImxzLXRyZWUiICIteiIgIkhFQUQiICItLSIpKSkKLSAgICAoYW5kIGhlYWQKLSAgICAgICAgIChzdHJpbmctbWF0Y2ggIlswLTddXFx7NlxcfSBibG9iIFxcKFswLTlhLWZdXFx7NDBcXH1cXClcdFteXDBdK1wwIiBoZWFkKQotICAgICAgICAgKHN0cmluZz0gKGNhciAoc3BsaXQtc3RyaW5nIHNoYTEgIlxuIikpIChtYXRjaC1zdHJpbmcgMSBoZWFkKSkpKSkKLQotKGRlZnVuIHZjLWdpdC1yZWdpc3RlciAoZmlsZSAmb3B0aW9uYWwgcmV2IGNvbW1lbnQpCi0gICJSZWdpc3RlciBGSUxFIGludG8gdGhlIGdpdCB2ZXJzaW9uLWNvbnRyb2wgc3lzdGVtLiIKLSAgKHZjLWdpdC0tcnVuLWNvbW1hbmQgZmlsZSAidXBkYXRlLWluZGV4IiAiLS1hZGQiICItLSIpKQotCi0oZGVmdW4gdmMtZ2l0LXByaW50LWxvZyAoZmlsZSAmb3B0aW9uYWwgYnVmZmVyKQotICAobGV0ICgobmFtZSAoZmlsZS1yZWxhdGl2ZS1uYW1lIGZpbGUpKQotICAgICAgICAoY29kaW5nLXN5c3RlbS1mb3ItcmVhZCBnaXQtY29tbWl0cy1jb2Rpbmctc3lzdGVtKSkKLSAgICAodmMtZG8tY29tbWFuZCBidWZmZXIgJ2FzeW5jICJnaXQiIG5hbWUgInJldi1saXN0IiAiLS1wcmV0dHkiICJIRUFEIiAiLS0iKSkpCi0KLShkZWZ1biB2Yy1naXQtZGlmZiAoZmlsZSAmb3B0aW9uYWwgcmV2MSByZXYyIGJ1ZmZlcikKLSAgKGxldCAoKG5hbWUgKGZpbGUtcmVsYXRpdmUtbmFtZSBmaWxlKSkKLSAgICAgICAgKGJ1ZiAob3IgYnVmZmVyICIqdmMtZGlmZioiKSkpCi0gICAgKGlmIChhbmQgcmV2MSByZXYyKQotICAgICAgICAodmMtZG8tY29tbWFuZCBidWYgMCAiZ2l0IiBuYW1lICJkaWZmLXRyZWUiICItcCIgcmV2MSByZXYyICItLSIpCi0gICAgICAodmMtZG8tY29tbWFuZCBidWYgMCAiZ2l0IiBuYW1lICJkaWZmLWluZGV4IiAiLXAiIChvciByZXYxICJIRUFEIikgIi0tIikpCi0gICAgOyBnaXQtZGlmZi1pbmRleCBkb2Vzbid0IHNldCBleGl0IHN0YXR1cyBsaWtlIGRpZmYgZG9lcwotICAgIChpZiAodmMtZ2l0LXdvcmtmaWxlLXVuY2hhbmdlZC1wIGZpbGUpIDAgMSkpKQotCi0oZGVmdW4gdmMtZ2l0LWNoZWNraW4gKGZpbGUgcmV2IGNvbW1lbnQpCi0gIChsZXQgKChjb2Rpbmctc3lzdGVtLWZvci13cml0ZSBnaXQtY29tbWl0cy1jb2Rpbmctc3lzdGVtKSkKLSAgICAodmMtZ2l0LS1ydW4tY29tbWFuZCBmaWxlICJjb21taXQiICItbSIgY29tbWVudCAiLS1vbmx5IiAiLS0iKSkpCi0KLShkZWZ1biB2Yy1naXQtY2hlY2tvdXQgKGZpbGUgJm9wdGlvbmFsIGVkaXRhYmxlIHJldiBkZXN0ZmlsZSkKLSAgKGlmIGRlc3RmaWxlCi0gICAgICAobGV0ICgoZnVsbG5hbWUgKHN1YnN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAodmMtZ2l0LS1ydW4tY29tbWFuZC1zdHJpbmcgZmlsZSAibHMtZmlsZXMiICIteiIgIi0tZnVsbC1uYW1lIiAiLS0iKQotICAgICAgICAgICAgICAgICAgICAgICAwIC0xKSkKLSAgICAgICAgICAgIChjb2Rpbmctc3lzdGVtLWZvci1yZWFkICduby1jb252ZXJzaW9uKQotICAgICAgICAgICAgKGNvZGluZy1zeXN0ZW0tZm9yLXdyaXRlICduby1jb252ZXJzaW9uKSkKLSAgICAgICAgKHdpdGgtdGVtcC1maWxlIGRlc3RmaWxlCi0gICAgICAgICAgKGVxIDAgKGNhbGwtcHJvY2VzcyAiZ2l0IiBuaWwgdCBuaWwgImNhdC1maWxlIiAiYmxvYiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQgKG9yIHJldiAiSEVBRCIpICI6IiBmdWxsbmFtZSkpKSkpCi0gICAgKHZjLWdpdC0tcnVuLWNvbW1hbmQgZmlsZSAiY2hlY2tvdXQiIChvciByZXYgIkhFQUQiKSkpKQotCi0oZGVmdW4gdmMtZ2l0LWFubm90YXRlLWNvbW1hbmQgKGZpbGUgYnVmICZvcHRpb25hbCByZXYpCi0gIDsgRklYTUU6IHJldiBpcyBpZ25vcmVkCi0gIChsZXQgKChuYW1lIChmaWxlLXJlbGF0aXZlLW5hbWUgZmlsZSkpKQotICAgIChjYWxsLXByb2Nlc3MgImdpdCIgbmlsIGJ1ZiBuaWwgImJsYW1lIiBuYW1lKSkpCi0KLShkZWZ1biB2Yy1naXQtYW5ub3RhdGUtdGltZSAoKQotICAoYW5kIChyZS1zZWFyY2gtZm9yd2FyZCAiWzAtOWEtZl0rICguKiBcXChbMC05XStcXCktXFwoWzAtOV0rXFwpLVxcKFswLTldK1xcKSBcXChbMC05XStcXCk6XFwoWzAtOV0rXFwpOlxcKFswLTldK1xcKSBcXChbLSswLTldK1xcKSArWzAtOV0rKSIgbmlsIHQpCi0gICAgICAgKHZjLWFubm90YXRlLWNvbnZlcnQtdGltZQotICAgICAgICAoYXBwbHkgIydlbmNvZGUtdGltZSAobWFwY2FyIChsYW1iZGEgKG1hdGNoKSAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIG1hdGNoKSkpICcoNiA1IDQgMyAyIDEgNykpKSkpKQotCi07OyBOb3QgcmVhbGx5IHVzZWZ1bCBzaW5jZSB3ZSBjYW4ndCBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXZpc2lvbiB5ZXQKLTs7KGRlZnVuIHZjLWFubm90YXRlLWV4dHJhY3QtcmV2aXNpb24tYXQtbGluZSAoKQotOzsgIChzYXZlLWV4Y3Vyc2lvbgotOzsgICAgKG1vdmUtYmVnaW5uaW5nLW9mLWxpbmUgMSkKLTs7ICAgIChhbmQgKGxvb2tpbmctYXQgIlswLTlhLWZdKyIpCi07OyAgICAgICAgIChidWZmZXItc3Vic3RyaW5nIChtYXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkpKSkKLQotKHByb3ZpZGUgJ3ZjLWdpdCkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXN2bmltcG9ydC5wZXJsIGIvY29udHJpYi9leGFtcGxlcy9naXQtc3ZuaW1wb3J0LnBlcmwKaW5kZXggYTEzYmI2YS4uNDU3NmM0YSAxMDA3NTUKLS0tIGEvY29udHJpYi9leGFtcGxlcy9naXQtc3ZuaW1wb3J0LnBlcmwKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtc3ZuaW1wb3J0LnBlcmwKQEAgLTI4Nyw5ICsyODcsOSBAQAogbXkgJGxhc3RfYnJhbmNoOwogbXkgJGN1cnJlbnRfcmV2ID0gJG9wdF9zIHx8IDE7CiB1bmxlc3MoLWQgJGdpdF9kaXIpIHsKLQlzeXN0ZW0oImdpdC1pbml0Iik7CisJc3lzdGVtKCJnaXQgaW5pdCIpOwogCWRpZSAiQ2Fubm90IGluaXQgdGhlIEdJVCBkYiBhdCAkZ2l0X3RyZWU6ICQ/XG4iIGlmICQ/OwotCXN5c3RlbSgiZ2l0LXJlYWQtdHJlZSIpOworCXN5c3RlbSgiZ2l0IHJlYWQtdHJlZSIpOwogCWRpZSAiQ2Fubm90IGluaXQgYW4gZW1wdHkgdHJlZTogJD9cbiIgaWYgJD87CiAKIAkkbGFzdF9icmFuY2ggPSAkb3B0X287CkBAIC0zMDMsNyArMzAzLDcgQEAKIAktZiAiJGdpdF9kaXIvc3ZuMmdpdCIKIAkJb3IgZGllICInJGdpdF9kaXIvc3ZuMmdpdCcgZG9lcyBub3QgZXhpc3QuXG4iLgogCQkgICAgICAgIllvdSBuZWVkIHRoYXQgZmlsZSBmb3IgaW5jcmVtZW50YWwgaW1wb3J0cy5cbiI7Ci0Jb3BlbihGLCAiZ2l0LXN5bWJvbGljLXJlZiBIRUFEIHwiKSBvcgorCW9wZW4oRiwgImdpdCBzeW1ib2xpYy1yZWYgSEVBRCB8Iikgb3IKIAkJZGllICJDYW5ub3QgcnVuIGdpdC1zeW1ib2xpYy1yZWY6ICQhXG4iOwogCWNob21wICgkbGFzdF9icmFuY2ggPSA8Rj4pOwogCSRsYXN0X2JyYW5jaCA9IGJhc2VuYW1lKCRsYXN0X2JyYW5jaCk7CkBAIC0zMzEsNyArMzMxLDcgQEAKIAkJCQkiJGdpdF9kaXIvcmVmcy9oZWFkcy8kb3B0X28iKSA9PSAwOwogCiAJIyBwb3B1bGF0ZSBpbmRleAotCXN5c3RlbSgnZ2l0LXJlYWQtdHJlZScsICRsYXN0X3Jldik7CisJc3lzdGVtKCdnaXQnLCAncmVhZC10cmVlJywgJGxhc3RfcmV2KTsKIAlkaWUgInJlYWQtdHJlZSBmYWlsZWQ6ICQ/XG4iIGlmICQ/OwogCiAJIyBHZXQgdGhlIGxhc3QgaW1wb3J0IHRpbWVzdGFtcHMKQEAgLTM5OSw3ICszOTksNyBAQAogCW15ICRwaWQgPSBvcGVuKG15ICRGLCAnLXwnKTsKIAlkaWUgJCEgdW5sZXNzIGRlZmluZWQgJHBpZDsKIAlpZiAoISRwaWQpIHsKLQkgICAgZXhlYygiZ2l0LWhhc2gtb2JqZWN0IiwgIi13IiwgJG5hbWUpCisJICAgIGV4ZWMoImdpdCIsICJoYXNoLW9iamVjdCIsICItdyIsICRuYW1lKQogCQlvciBkaWUgIkNhbm5vdCBjcmVhdGUgb2JqZWN0OiAkIVxuIjsKIAl9CiAJbXkgJHNoYSA9IDwkRj47CkBAIC00MjMsNyArNDIzLDcgQEAKIAkJbXkgJHBpZCA9IG9wZW4obXkgJEYsICctfCcpOwogCQlkaWUgJCEgdW5sZXNzIGRlZmluZWQgJHBpZDsKIAkJaWYgKCEkcGlkKSB7Ci0JCQlleGVjKCJnaXQtaGFzaC1vYmplY3QiLCAiLXciLCAkbmFtZSkKKwkJCWV4ZWMoImdpdCIsICJoYXNoLW9iamVjdCIsICItdyIsICRuYW1lKQogCQkJICAgIG9yIGRpZSAiQ2Fubm90IGNyZWF0ZSBvYmplY3Q6ICQhXG4iOwogCQl9CiAJCW15ICRzaGEgPSA8JEY+OwpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAJbXkgJHBpZCA9IG9wZW4gbXkgJGYsJy18JzsKIAlkaWUgJCEgdW5sZXNzIGRlZmluZWQgJHBpZDsKIAlpZiAoISRwaWQpIHsKLQkJZXhlYygiZ2l0LWxzLXRyZWUiLCItciIsIi16IiwkZ2l0cmV2LCRzcmNwYXRoKQorCQlleGVjKCJnaXQiLCJscy10cmVlIiwiLXIiLCIteiIsJGdpdHJldiwkc3JjcGF0aCkKIAkJCW9yIGRpZSAkITsKIAl9CiAJbG9jYWwgJC8gPSAiXDAiOwpAQCAtNjM0LDcgKzYzNCw3IEBACiAKIAlteSAkcmV2OwogCWlmKCRyZXZpc2lvbiA+ICRvcHRfcyBhbmQgZGVmaW5lZCAkcGFyZW50KSB7Ci0JCW9wZW4oSCwnLXwnLCJnaXQtcmV2LXBhcnNlIiwiLS12ZXJpZnkiLCRwYXJlbnQpOworCQlvcGVuKEgsJy18JywiZ2l0IiwicmV2LXBhcnNlIiwiLS12ZXJpZnkiLCRwYXJlbnQpOwogCQkkcmV2ID0gPEg+OwogCQljbG9zZShIKSBvciBkbyB7CiAJCQlwcmludCBTVERFUlIgIiRyZXZpc2lvbjogY2Fubm90IGZpbmQgY29tbWl0ICckcGFyZW50JyFcbiI7CkBAIC02NzEsNyArNjcxLDcgQEAKIAkJdW5saW5rKCRnaXRfaW5kZXgpOwogCX0gZWxzaWYgKCRyZXYgbmUgJGxhc3RfcmV2KSB7CiAJCXByaW50ICJTd2l0Y2hpbmcgZnJvbSAkbGFzdF9yZXYgdG8gJHJldiAoJGJyYW5jaClcbiIgaWYgJG9wdF92OwotCQlzeXN0ZW0oImdpdC1yZWFkLXRyZWUiLCAkcmV2KTsKKwkJc3lzdGVtKCJnaXQiLCAicmVhZC10cmVlIiwgJHJldik7CiAJCWRpZSAicmVhZC10cmVlIGZhaWxlZCBmb3IgJHJldjogJD9cbiIgaWYgJD87CiAJCSRsYXN0X3JldiA9ICRyZXY7CiAJfQpAQCAtNzQwLDcgKzc0MCw3IEBACiAJCQlteSAkcGlkID0gb3BlbiBteSAkRiwgIi18IjsKIAkJCWRpZSAiJCEiIHVubGVzcyBkZWZpbmVkICRwaWQ7CiAJCQlpZiAoISRwaWQpIHsKLQkJCQlleGVjKCJnaXQtbHMtZmlsZXMiLCAiLXoiLCBAbzEpIG9yIGRpZSAkITsKKwkJCQlleGVjKCJnaXQiLCAibHMtZmlsZXMiLCAiLXoiLCBAbzEpIG9yIGRpZSAkITsKIAkJCX0KIAkJCUBvMSA9ICgpOwogCQkJbG9jYWwgJC8gPSAiXDAiOwpAQCAtNzU4LDcgKzc1OCw3IEBACiAJCQkJCUBvMiA9IEBvMTsKIAkJCQkJQG8xID0gKCk7CiAJCQkJfQotCQkJCXN5c3RlbSgiZ2l0LXVwZGF0ZS1pbmRleCIsIi0tZm9yY2UtcmVtb3ZlIiwiLS0iLEBvMik7CisJCQkJc3lzdGVtKCJnaXQiLCJ1cGRhdGUtaW5kZXgiLCItLWZvcmNlLXJlbW92ZSIsIi0tIixAbzIpOwogCQkJCWRpZSAiQ2Fubm90IHJlbW92ZSBmaWxlczogJD9cbiIgaWYgJD87CiAJCQl9CiAJCX0KQEAgLTc3MCw3ICs3NzAsNyBAQAogCQkJCUBuMiA9IEBuZXc7CiAJCQkJQG5ldyA9ICgpOwogCQkJfQotCQkJc3lzdGVtKCJnaXQtdXBkYXRlLWluZGV4IiwiLS1hZGQiLAorCQkJc3lzdGVtKCJnaXQiLCJ1cGRhdGUtaW5kZXgiLCItLWFkZCIsCiAJCQkJKG1hcCB7ICgnLS1jYWNoZWluZm8nLCBAJF8pIH0gQG4yKSk7CiAJCQlkaWUgIkNhbm5vdCBhZGQgZmlsZXM6ICQ/XG4iIGlmICQ/OwogCQl9CkBAIC03NzgsNyArNzc4LDcgQEAKIAkJbXkgJHBpZCA9IG9wZW4oQywiLXwiKTsKIAkJZGllICJDYW5ub3QgZm9yazogJCEiIHVubGVzcyBkZWZpbmVkICRwaWQ7CiAJCXVubGVzcygkcGlkKSB7Ci0JCQlleGVjKCJnaXQtd3JpdGUtdHJlZSIpOworCQkJZXhlYygiZ2l0Iiwid3JpdGUtdHJlZSIpOwogCQkJZGllICJDYW5ub3QgZXhlYyBnaXQtd3JpdGUtdHJlZTogJCFcbiI7CiAJCX0KIAkJY2hvbXAobXkgJHRyZWUgPSA8Qz4pOwpAQCAtODMwLDcgKzgzMCw3IEBACiAJCQkJIkdJVF9DT01NSVRURVJfTkFNRT0kY29tbWl0dGVyX25hbWUiLAogCQkJCSJHSVRfQ09NTUlUVEVSX0VNQUlMPSRjb21taXR0ZXJfZW1haWwiLAogCQkJCSJHSVRfQ09NTUlUVEVSX0RBVEU9Ii5zdHJmdGltZSgiKzAwMDAgJVktJW0tJWQgJUg6JU06JVMiLGdtdGltZSgkZGF0ZSkpLAotCQkJCSJnaXQtY29tbWl0LXRyZWUiLCAkdHJlZSxAcGFyKTsKKwkJCQkiZ2l0IiwgImNvbW1pdC10cmVlIiwgJHRyZWUsQHBhcik7CiAJCQlkaWUgIkNhbm5vdCBleGVjIGdpdC1jb21taXQtdHJlZTogJCFcbiI7CiAJCX0KIAkJJHB3LT53cml0ZXIoKTsKQEAgLTg3NCw3ICs4NzQsNyBAQAogCiAJCSRkZXN0ID1+IHRyL18vXC4vIGlmICRvcHRfdTsKIAotCQlzeXN0ZW0oJ2dpdC10YWcnLCAnLWYnLCAkZGVzdCwgJGNpZCkgPT0gMAorCQlzeXN0ZW0oJ2dpdCcsICd0YWcnLCAnLWYnLCAkZGVzdCwgJGNpZCkgPT0gMAogCQkJb3IgZGllICJDYW5ub3QgY3JlYXRlIHRhZyAkZGVzdDogJCFcbiI7CiAKIAkJcHJpbnQgIkNyZWF0ZWQgdGFnICckZGVzdCcgb24gJyRicmFuY2gnXG4iIGlmICRvcHRfdjsKQEAgLTkzNyw3ICs5MzcsNyBAQAogCW15ICRwaWQgPSBmb3JrKCk7CiAJZGllICJGb3JrOiAkIVxuIiB1bmxlc3MgZGVmaW5lZCAkcGlkOwogCXVubGVzcygkcGlkKSB7Ci0JCWV4ZWMoImdpdC1yZXBhY2siLCAiLWQiKQorCQlleGVjKCJnaXQiLCAicmVwYWNrIiwgIi1kIikKIAkJCW9yIGRpZSAiQ2Fubm90IHJlcGFjazogJCFcbiI7CiAJfQogCXdhaXRwaWQoJHBpZCwgMCk7CkBAIC05NTgsNyArOTU4LDcgQEAKIAlzeXN0ZW0oImNwIiwiJGdpdF9kaXIvcmVmcy9oZWFkcy8kb3B0X28iLCIkZ2l0X2Rpci9yZWZzL2hlYWRzL21hc3RlciIpCiAJCWlmICRmb3J3YXJkX21hc3RlcjsKIAl1bmxlc3MgKCRvcHRfaSkgewotCQlzeXN0ZW0oJ2dpdC1yZWFkLXRyZWUnLCAnLW0nLCAnLXUnLCAnU1ZOMkdJVF9IRUFEJywgJ0hFQUQnKTsKKwkJc3lzdGVtKCdnaXQnLCAncmVhZC10cmVlJywgJy1tJywgJy11JywgJ1NWTjJHSVRfSEVBRCcsICdIRUFEJyk7CiAJCWRpZSAicmVhZC10cmVlIGZhaWxlZDogJD9cbiIgaWYgJD87CiAJfQogfSBlbHNlIHsKQEAgLTk2Niw3ICs5NjYsNyBAQAogCXByaW50ICJET05FOyBjcmVhdGluZyAkb3JpZ19icmFuY2ggYnJhbmNoXG4iIGlmICRvcHRfdiBhbmQgKG5vdCBkZWZpbmVkICRvcHRfbCBvciAkb3B0X2wgPiAwKTsKIAlzeXN0ZW0oImNwIiwiJGdpdF9kaXIvcmVmcy9oZWFkcy8kb3B0X28iLCIkZ2l0X2Rpci9yZWZzL2hlYWRzL21hc3RlciIpCiAJCXVubGVzcyAtZiAiJGdpdF9kaXIvcmVmcy9oZWFkcy9tYXN0ZXIiOwotCXN5c3RlbSgnZ2l0LXVwZGF0ZS1yZWYnLCAnSEVBRCcsICIkb3JpZ19icmFuY2giKTsKKwlzeXN0ZW0oJ2dpdCcsICd1cGRhdGUtcmVmJywgJ0hFQUQnLCAiJG9yaWdfYnJhbmNoIik7CiAJdW5sZXNzICgkb3B0X2kpIHsKIAkJc3lzdGVtKCdnaXQgY2hlY2tvdXQnKTsKIAkJZGllICJjaGVja291dCBmYWlsZWQ6ICQ/XG4iIGlmICQ/OwpkaWZmIC0tZ2l0IGEvY29udHJpYi9leGFtcGxlcy9naXQtc3ZuaW1wb3J0LnR4dCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXN2bmltcG9ydC50eHQKaW5kZXggNzFhYWQ4Yi4uM2JiODcxZSAxMDA2NDQKLS0tIGEvY29udHJpYi9leGFtcGxlcy9naXQtc3ZuaW1wb3J0LnR4dAorKysgYi9jb250cmliL2V4YW1wbGVzL2dpdC1zdm5pbXBvcnQudHh0CkBAIC0xMTQsOSArMTE0LDkgQEAKIC1SIDxyZXBhY2tfZWFjaF9yZXZzPjo6CiAJU3BlY2lmeSBob3cgb2Z0ZW4gZ2l0IHJlcG9zaXRvcnkgc2hvdWxkIGJlIHJlcGFja2VkLgogKwotVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwMC4gZ2l0LXN2bmltcG9ydCB3aWxsIGRvIGltcG9ydCBpbiBjaHVua3Mgb2YgMTAwMAotcmV2aXNpb25zLCBhZnRlciBlYWNoIGNodW5rIGdpdCByZXBvc2l0b3J5IHdpbGwgYmUgcmVwYWNrZWQuIFRvIGRpc2FibGUKLXRoaXMgYmVoYXZpb3Igc3BlY2lmeSBzb21lIGJpZyB2YWx1ZSBoZXJlIHdoaWNoIGlzIG1vdGUgdGhhbiBudW1iZXIgb2YKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDEwMDAuIGdpdC1zdm5pbXBvcnQgd2lsbCBkbyBpbXBvcnRzIGluIGNodW5rcyBvZiAxMDAwCityZXZpc2lvbnMsIGFmdGVyIGVhY2ggY2h1bmsgdGhlIGdpdCByZXBvc2l0b3J5IHdpbGwgYmUgcmVwYWNrZWQuIFRvIGRpc2FibGUKK3RoaXMgYmVoYXZpb3Igc3BlY2lmeSBzb21lIGxhcmdlIHZhbHVlIGhlcmUgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YKIHJldmlzaW9ucyB0byBpbXBvcnQuCiAKIC1QIDxwYXRoX2Zyb21fdHJ1bms+OjoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LXA0IGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtcDQKaW5kZXggYTg1YTdiMi4uMzQyNTI5ZCAxMDA3NTUKLS0tIGEvY29udHJpYi9mYXN0LWltcG9ydC9naXQtcDQKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtcDQKQEAgLTQ0MiwxMyArNDQyLDE0IEBACiAgICAgb3V0cHV0ID0gcDRfcmVhZF9waXBlX2xpbmVzKCJjaGFuZ2VzICIgKyAnICcuam9pbiAoWyIlcy4uLiVzIiAlIChwLCBjaGFuZ2VSYW5nZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gZGVwb3RQYXRoc10pKQogCi0gICAgY2hhbmdlcyA9IFtdCisgICAgY2hhbmdlcyA9IHt9CiAgICAgZm9yIGxpbmUgaW4gb3V0cHV0OgotICAgICAgICBjaGFuZ2VOdW0gPSBsaW5lLnNwbGl0KCIgIilbMV0KLSAgICAgICAgY2hhbmdlcy5hcHBlbmQoaW50KGNoYW5nZU51bSkpCisJY2hhbmdlTnVtID0gaW50KGxpbmUuc3BsaXQoIiAiKVsxXSkKKwljaGFuZ2VzW2NoYW5nZU51bV0gPSBUcnVlCiAKLSAgICBjaGFuZ2VzLnNvcnQoKQotICAgIHJldHVybiBjaGFuZ2VzCisgICAgY2hhbmdlbGlzdCA9IGNoYW5nZXMua2V5cygpCisgICAgY2hhbmdlbGlzdC5zb3J0KCkKKyAgICByZXR1cm4gY2hhbmdlbGlzdAogCiBjbGFzcyBDb21tYW5kOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTExNDEsNyArMTE0Miw3IEBACiAKICAgICAgICAgcyA9ICcnCiAgICAgICAgIGZvciAoa2V5LCB2YWwpIGluIHNlbGYudXNlcnMuaXRlbXMoKToKLSAgICAgICAgICAgIHMgKz0gIiVzXHQlc1xuIiAlIChrZXksIHZhbCkKKwkgICAgcyArPSAiJXNcdCVzXG4iICUgKGtleS5leHBhbmR0YWJzKDEpLCB2YWwuZXhwYW5kdGFicygxKSkKIAogICAgICAgICBvcGVuKHNlbGYuZ2V0VXNlckNhY2hlRmlsZW5hbWUoKSwgIndiIikud3JpdGUocykKICAgICAgICAgc2VsZi51c2VyTWFwRnJvbVBlcmZvcmNlU2VydmVyID0gVHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtdGFycy5wZXJsIGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtdGFycy5wZXJsCmluZGV4IDIzYWViMjUuLjc4ZTQwZDIgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXRhcnMucGVybAorKysgYi9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC10YXJzLnBlcmwKQEAgLTE0LDEzICsxNCwxOCBAQAogCiBteSAkYnJhbmNoX25hbWUgPSAnaW1wb3J0LXRhcnMnOwogbXkgJGJyYW5jaF9yZWYgPSAicmVmcy9oZWFkcy8kYnJhbmNoX25hbWUiOwotbXkgJGNvbW1pdHRlcl9uYW1lID0gJ1QgQXIgQ3JlYXRvcic7Ci1teSAkY29tbWl0dGVyX2VtYWlsID0gJ3RhckBleGFtcGxlLmNvbSc7CitteSAkYXV0aG9yX25hbWUgPSAkRU5WeydHSVRfQVVUSE9SX05BTUUnfSB8fCAnVCBBciBDcmVhdG9yJzsKK215ICRhdXRob3JfZW1haWwgPSAkRU5WeydHSVRfQVVUSE9SX0VNQUlMJ30gfHwgJ3RhckBleGFtcGxlLmNvbSc7CitteSAkY29tbWl0dGVyX25hbWUgPSAkRU5WeydHSVRfQ09NTUlUVEVSX05BTUUnfSB8fCBgZ2l0IGNvbmZpZyAtLWdldCB1c2VyLm5hbWVgOworbXkgJGNvbW1pdHRlcl9lbWFpbCA9ICRFTlZ7J0dJVF9DT01NSVRURVJfRU1BSUwnfSB8fCBgZ2l0IGNvbmZpZyAtLWdldCB1c2VyLmVtYWlsYDsKKworY2hvbXAoJGNvbW1pdHRlcl9uYW1lLCAkY29tbWl0dGVyX2VtYWlsKTsKIAogb3BlbihGSSwgJ3wtJywgJ2dpdCcsICdmYXN0LWltcG9ydCcsICctLXF1aWV0JykKIAlvciBkaWUgIlVuYWJsZSB0byBzdGFydCBnaXQgZmFzdC1pbXBvcnQ6ICQhXG4iOwogZm9yZWFjaCBteSAkdGFyX2ZpbGUgKEBBUkdWKQogeworCW15ICRjb21taXRfdGltZSA9IHRpbWU7CiAJJHRhcl9maWxlID1+IG0sKFteL10rKSQsOwogCW15ICR0YXJfbmFtZSA9ICQxOwogCkBAIC0zOSw3ICs0NCw3IEBACiAJCWRpZSAiVW5yZWNvZ25pemVkIGNvbXByZXNzaW9uIGZvcm1hdDogJHRhcl9maWxlXG4iOwogCX0KIAotCW15ICRjb21taXRfdGltZSA9IDA7CisJbXkgJGF1dGhvcl90aW1lID0gMDsKIAlteSAkbmV4dF9tYXJrID0gMTsKIAlteSAkaGF2ZV90b3BfZGlyID0gMTsKIAlteSAoJHRvcF9kaXIsICVmaWxlcyk7CkBAIC03NywxMCArODIsMTYgQEAKIAkJJG10aW1lID0gb2N0ICRtdGltZTsKIAkJbmV4dCBpZiAkdHlwZWZsYWcgPT0gNTsgIyBkaXJlY3RvcnkKIAotCQlwcmludCBGSSAiYmxvYlxuIiwgIm1hcmsgOiRuZXh0X21hcmtcbiIsICJkYXRhICRzaXplXG4iOwotCQl3aGlsZSAoJHNpemUgPiAwICYmIHJlYWQoSSwgJF8sIDUxMikgPT0gNTEyKSB7Ci0JCQlwcmludCBGSSBzdWJzdHIoJF8sIDAsICRzaXplKTsKLQkJCSRzaXplIC09IDUxMjsKKwkJcHJpbnQgRkkgImJsb2JcbiIsICJtYXJrIDokbmV4dF9tYXJrXG4iOworCQlpZiAoJHR5cGVmbGFnID09IDIpIHsgIyBzeW1ib2xpYyBsaW5rCisJCQlwcmludCBGSSAiZGF0YSAiLCBsZW5ndGgoJGxpbmtuYW1lKSwgIlxuIiwgJGxpbmtuYW1lOworCQkJJG1vZGUgPSAwMTIwMDAwOworCQl9IGVsc2UgeworCQkJcHJpbnQgRkkgImRhdGEgJHNpemVcbiI7CisJCQl3aGlsZSAoJHNpemUgPiAwICYmIHJlYWQoSSwgJF8sIDUxMikgPT0gNTEyKSB7CisJCQkJcHJpbnQgRkkgc3Vic3RyKCRfLCAwLCAkc2l6ZSk7CisJCQkJJHNpemUgLT0gNTEyOworCQkJfQogCQl9CiAJCXByaW50IEZJICJcbiI7CiAKQEAgLTkyLDcgKzEwMyw3IEBACiAJCX0KIAkJJGZpbGVzeyRwYXRofSA9IFskbmV4dF9tYXJrKyssICRtb2RlXTsKIAotCQkkY29tbWl0X3RpbWUgPSAkbXRpbWUgaWYgJG10aW1lID4gJGNvbW1pdF90aW1lOworCQkkYXV0aG9yX3RpbWUgPSAkbXRpbWUgaWYgJG10aW1lID4gJGF1dGhvcl90aW1lOwogCQkkcGF0aCA9fiBtLF4oW14vXSspLyw7CiAJCSR0b3BfZGlyID0gJDEgdW5sZXNzICR0b3BfZGlyOwogCQkkaGF2ZV90b3BfZGlyID0gMCBpZiAkdG9wX2RpciBuZSAkMTsKQEAgLTEwMCw2ICsxMTEsNyBAQAogCiAJcHJpbnQgRkkgPDxFT0Y7CiBjb21taXQgJGJyYW5jaF9yZWYKK2F1dGhvciAkYXV0aG9yX25hbWUgPCRhdXRob3JfZW1haWw+ICRhdXRob3JfdGltZSArMDAwMAogY29tbWl0dGVyICRjb21taXR0ZXJfbmFtZSA8JGNvbW1pdHRlcl9lbWFpbD4gJGNvbW1pdF90aW1lICswMDAwCiBkYXRhIDw8RU5EX09GX0NPTU1JVF9NRVNTQUdFCiBJbXBvcnRlZCBmcm9tICR0YXJfZmlsZS4KQEAgLTExMiwxNCArMTI0LDE1IEBACiAJewogCQlteSAoJG1hcmssICRtb2RlKSA9IEB7JGZpbGVzeyRwYXRofX07CiAJCSRwYXRoID1+IHMsXihbXi9dKykvLCwgaWYgJGhhdmVfdG9wX2RpcjsKLQkJcHJpbnRmIEZJICJNICVvIDolaSAlc1xuIiwgJG1vZGUgJiAwMTExID8gMDc1NSA6IDA2NDQsICRtYXJrLCAkcGF0aDsKKwkJJG1vZGUgPSAkbW9kZSAmIDAxMTEgPyAwNzU1IDogMDY0NCB1bmxlc3MgJG1vZGUgPT0gMDEyMDAwMDsKKwkJcHJpbnRmIEZJICJNICVvIDolaSAlc1xuIiwgJG1vZGUsICRtYXJrLCAkcGF0aDsKIAl9CiAJcHJpbnQgRkkgIlxuIjsKIAogCXByaW50IEZJIDw8RU9GOwogdGFnICR0YXJfbmFtZQogZnJvbSAkYnJhbmNoX3JlZgotdGFnZ2VyICRjb21taXR0ZXJfbmFtZSA8JGNvbW1pdHRlcl9lbWFpbD4gJGNvbW1pdF90aW1lICswMDAwCit0YWdnZXIgJGF1dGhvcl9uYW1lIDwkYXV0aG9yX2VtYWlsPiAkYXV0aG9yX3RpbWUgKzAwMDAKIGRhdGEgPDxFTkRfT0ZfVEFHX01FU1NBR0UKIFBhY2thZ2UgJHRhcl9uYW1lCiBFTkRfT0ZfVEFHX01FU1NBR0UKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2l0LXJlc3VycmVjdC5zaCBiL2NvbnRyaWIvZ2l0LXJlc3VycmVjdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMzY0ZGRhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9naXQtcmVzdXJyZWN0LnNoCkBAIC0wLDAgKzEsMTgwIEBACisjIS9iaW4vc2gKKworVVNBR0U9IlstYV0gWy1yXSBbLW1dIFstdF0gWy1uXSBbLWIgPG5ld25hbWU+XSA8bmFtZT4iCitMT05HX1VTQUdFPSJnaXQtcmVzdXJyZWN0IGF0dGVtcHRzIHRvIGZpbmQgdHJhY2VzIG9mIGEgYnJhbmNoIHRpcAorY2FsbGVkIDxuYW1lPiwgYW5kIHRyaWVzIHRvIHJlc3VycmVjdCBpdC4gIEN1cnJlbnRseSwgdGhlIHJlZmxvZyBpcworc2VhcmNoZWQgZm9yIGNoZWNrb3V0IG1lc3NhZ2VzLCBhbmQgd2l0aCAtciBhbHNvIG1lcmdlIG1lc3NhZ2VzLiAgV2l0aAorLW0gYW5kIC10LCB0aGUgaGlzdG9yeSBvZiBhbGwgcmVmcyBpcyBzY2FubmVkIGZvciBNZXJnZSA8bmFtZT4gaW50bworb3RoZXIvTWVyZ2UgPG90aGVyPiBpbnRvIDxuYW1lPiAocmVzcGVjdGl2ZWx5KSBjb21taXQgc3ViamVjdHMsIHdoaWNoCitpcyByYXRoZXIgc2xvdyBidXQgYWxsb3dzIHlvdSB0byByZXN1cnJlY3Qgb3RoZXIgcGVvcGxlJ3MgdG9waWMKK2JyYW5jaGVzLiIKKworT1BUSU9OU19TUEVDPSJcCitnaXQgcmVzdXJyZWN0ICRVU0FHRQorLS0KK2IsYnJhbmNoPSAgICAgICAgICAgIHNhdmUgYnJhbmNoIGFzIDxuZXduYW1lPiBpbnN0ZWFkIG9mIDxuYW1lPgorYSxhbGwgICAgICAgICAgICAgICAgc2FtZSBhcyAtbCAtciAtbSAtdAorayxrZWVwLWdvaW5nICAgICAgICAgZnVsbCByZXYtbGlzdCBzY2FuIChpbnN0ZWFkIG9mIGZpcnN0IG1hdGNoKQorbCxyZWZsb2cgICAgICAgICAgICAgc2NhbiByZWZsb2cgZm9yIGNoZWNrb3V0cyAoZW5hYmxlZCBieSBkZWZhdWx0KQorcixyZWZsb2ctbWVyZ2VzICAgICAgc2NhbiBmb3IgbWVyZ2VzIHJlY29yZGVkIGluIHJlZmxvZworbSxtZXJnZXMgICAgICAgICAgICAgc2NhbiBmb3IgbWVyZ2VzIGludG8gb3RoZXIgYnJhbmNoZXMgKHNsb3cpCit0LG1lcmdlLXRhcmdldHMgICAgICBzY2FuIGZvciBtZXJnZXMgb2Ygb3RoZXIgYnJhbmNoZXMgaW50byA8bmFtZT4KK24sZHJ5LXJ1biAgICAgICAgICAgIGRvbid0IHJlY3JlYXRlIHRoZSBicmFuY2giCisKKy4gZ2l0LXNoLXNldHVwCisKK3NlYXJjaF9yZWZsb2cgKCkgeworICAgICAgICBzZWQgLW5lICdzfl5cKFteIF0qXCkgLipcdGNoZWNrb3V0OiBtb3ZpbmcgZnJvbSAnIiQxIicgLip+XDF+cCcgXAorICAgICAgICAgICAgICAgIDwgIiRHSVRfRElSIi9sb2dzL0hFQUQKK30KKworc2VhcmNoX3JlZmxvZ19tZXJnZXMgKCkgeworCWdpdCByZXYtcGFyc2UgJCgKKwkJc2VkIC1uZSAnc35eW14gXSogXChbXiBdKlwpIC4qXHRtZXJnZSAnIiQxIic6Lip+XDFeMn5wJyBcCisJCQk8ICIkR0lUX0RJUiIvbG9ncy9IRUFECisJKQorfQorCitfeDQwPSJbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdIgorX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKKworc2VhcmNoX21lcmdlcyAoKSB7CisgICAgICAgIGdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9Ik1lcmdlIGJyYW5jaCAnJDEnIiBcCisgICAgICAgICAgICAgICAgLS1wcmV0dHk9dGZvcm1hdDoiJVAgJXMiIHwKKyAgICAgICAgc2VkIC1uZSAiL14kX3g0MCBcKCRfeDQwXCkgTWVyZ2UgLiovIHtzLy9cMS9wOyRlYXJseV9leGl0fSIKK30KKworc2VhcmNoX21lcmdlX3RhcmdldHMgKCkgeworCWdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9Ik1lcmdlIGJyYW5jaCAnW14nXSonIGludG8gJGJyYW5jaFwkIiBcCisJCS0tcHJldHR5PXRmb3JtYXQ6IiVIICVzIiAtLWFsbCB8CisJc2VkIC1uZSAiL15cKCRfeDQwXCkgTWVyZ2UgLiovIHtzLy9cMS9wOyRlYXJseV9leGl0fSAiCit9CisKK2RyeV9ydW49CitlYXJseV9leGl0PXEKK3NjYW5fcmVmbG9nPXQKK3NjYW5fcmVmbG9nX21lcmdlcz0KK3NjYW5fbWVyZ2VzPQorc2Nhbl9tZXJnZV90YXJnZXRzPQorbmV3X25hbWU9CisKK3doaWxlIHRlc3QgIiQjIiAhPSAwOyBkbworCWNhc2UgIiQxIiBpbgorCSAgICAtYnwtLWJyYW5jaCkKKwkJc2hpZnQKKwkJbmV3X25hbWU9IiQxIgorCQk7OworCSAgICAtbnwtLWRyeS1ydW4pCisJCWRyeV9ydW49dAorCQk7OworCSAgICAtLW5vLWRyeS1ydW4pCisJCWRyeV9ydW49CisJCTs7CisJICAgIC1rfC0ta2VlcC1nb2luZykKKwkJZWFybHlfZXhpdD0KKwkJOzsKKwkgICAgLS1uby1rZWVwLWdvaW5nKQorCQllYXJseV9leGl0PXEKKwkJOzsKKwkgICAgLW18LS1tZXJnZXMpCisJCXNjYW5fbWVyZ2VzPXQKKwkJOzsKKwkgICAgLS1uby1tZXJnZXMpCisJCXNjYW5fbWVyZ2VzPQorCQk7OworCSAgICAtbHwtLXJlZmxvZykKKwkJc2Nhbl9yZWZsb2c9dAorCQk7OworCSAgICAtLW5vLXJlZmxvZykKKwkJc2Nhbl9yZWZsb2c9CisJCTs7CisJICAgIC1yfC0tcmVmbG9nX21lcmdlcykKKwkJc2Nhbl9yZWZsb2dfbWVyZ2VzPXQKKwkJOzsKKwkgICAgLS1uby1yZWZsb2dfbWVyZ2VzKQorCQlzY2FuX3JlZmxvZ19tZXJnZXM9CisJCTs7CisJICAgIC10fC0tbWVyZ2UtdGFyZ2V0cykKKwkJc2Nhbl9tZXJnZV90YXJnZXRzPXQKKwkJOzsKKwkgICAgLS1uby1tZXJnZS10YXJnZXRzKQorCQlzY2FuX21lcmdlX3RhcmdldHM9CisJCTs7CisJICAgIC1hfC0tYWxsKQorCQlzY2FuX3JlZmxvZz10CisJCXNjYW5fcmVmbG9nX21lcmdlcz10CisJCXNjYW5fbWVyZ2VzPXQKKwkJc2Nhbl9tZXJnZV90YXJnZXRzPXQKKwkJOzsKKwkgICAgLS0pCisJCXNoaWZ0CisJCWJyZWFrCisJCTs7CisJICAgICopCisJCXVzYWdlCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK3Rlc3QgIiQjIiA9IDEgfHwgdXNhZ2UKKworYWxsX3N0cmF0ZWdpZXM9IiRzY2FuX3JlZmxvZyRzY2FuX3JlZmxvZ19tZXJnZXMkc2Nhbl9tZXJnZXMkc2Nhbl9tZXJnZV90YXJnZXRzIgoraWYgdGVzdCAteiAiJGFsbF9zdHJhdGVnaWVzIjsgdGhlbgorCWRpZSAibXVzdCBlbmFibGUgYXQgbGVhc3Qgb25lIG9mIC1scm10IgorZmkKKworYnJhbmNoPSIkMSIKK3Rlc3QgLXogIiRuZXdfbmFtZSIgJiYgbmV3X25hbWU9IiRicmFuY2giCisKK2lmIHRlc3QgISAteiAiJHNjYW5fcmVmbG9nIjsgdGhlbgorCWlmIHRlc3QgLXIgIiRHSVRfRElSIi9sb2dzL0hFQUQ7IHRoZW4KKwkJY2FuZGlkYXRlcz0iJChzZWFyY2hfcmVmbG9nICRicmFuY2gpIgorCWVsc2UKKwkJZGllICdyZWZsb2cgc2Nhbm5pbmcgcmVxdWVzdGVkLCBidXQnIFwKKwkJCSckR0lUX0RJUi9sb2dzL0hFQUQgbm90IHJlYWRhYmxlJworCWZpCitmaQoraWYgdGVzdCAhIC16ICIkc2Nhbl9yZWZsb2dfbWVyZ2VzIjsgdGhlbgorCWlmIHRlc3QgLXIgIiRHSVRfRElSIi9sb2dzL0hFQUQ7IHRoZW4KKwkJY2FuZGlkYXRlcz0iJGNhbmRpZGF0ZXMgJChzZWFyY2hfcmVmbG9nX21lcmdlcyAkYnJhbmNoKSIKKwllbHNlCisJCWRpZSAncmVmbG9nIHNjYW5uaW5nIHJlcXVlc3RlZCwgYnV0JyBcCisJCQknJEdJVF9ESVIvbG9ncy9IRUFEIG5vdCByZWFkYWJsZScKKwlmaQorZmkKK2lmIHRlc3QgISAteiAiJHNjYW5fbWVyZ2VzIjsgdGhlbgorCWNhbmRpZGF0ZXM9IiRjYW5kaWRhdGVzICQoc2VhcmNoX21lcmdlcyAkYnJhbmNoKSIKK2ZpCitpZiB0ZXN0ICEgLXogIiRzY2FuX21lcmdlX3RhcmdldHMiOyB0aGVuCisJY2FuZGlkYXRlcz0iJGNhbmRpZGF0ZXMgJChzZWFyY2hfbWVyZ2VfdGFyZ2V0cyAkYnJhbmNoKSIKK2ZpCisKK2NhbmRpZGF0ZXM9IiQoZ2l0IHJldi1wYXJzZSAkY2FuZGlkYXRlcyB8IHNvcnQgLXUpIgorCitpZiB0ZXN0IC16ICIkY2FuZGlkYXRlcyI7IHRoZW4KKwloaW50PQorCXRlc3QgInokYWxsX3N0cmF0ZWdpZXMiICE9ICJ6dHR0dCIgXAorCQkmJiBoaW50PSIgKG1heWJlIHRyeSBhZ2FpbiB3aXRoIC1hKSIKKwlkaWUgIm5vIGNhbmRpZGF0ZXMgZm9yICRicmFuY2ggZm91bmQkaGludCIKK2ZpCisKK2VjaG8gIioqIENhbmRpZGF0ZXMgZm9yICRicmFuY2ggKioiCitmb3IgY210IGluICRjYW5kaWRhdGVzOyBkbworCWdpdCAtLW5vLXBhZ2VyIGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlY3Q6JWggWyVjcl0gJXMiIC0tYWJicmV2LWNvbW1pdCAtMSAkY210Citkb25lIFwKK3wgc29ydCAtbiB8IGN1dCAtZDogLWYyLQorCituZXdlc3Q9IiQoZ2l0IHJldi1saXN0IC0xICRjYW5kaWRhdGVzKSIKK2lmIHRlc3QgISAteiAiJGRyeV9ydW4iOyB0aGVuCisJcHJpbnRmICIqKiBNb3N0IHJlY2VudDogIgorCWdpdCAtLW5vLXBhZ2VyIGxvZyAtMSAtLXByZXR0eT10Zm9ybWF0OiIlaCAlcyIgJG5ld2VzdAorZWxpZiAhIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCAkbmV3X25hbWUgPi9kZXYvbnVsbDsgdGhlbgorCXByaW50ZiAiKiogUmVzdG9yaW5nICRuZXdfbmFtZSB0byAiCisJZ2l0IC0tbm8tcGFnZXIgbG9nIC0xIC0tcHJldHR5PXRmb3JtYXQ6IiVoICVzIiAkbmV3ZXN0CisJZ2l0IGJyYW5jaCAkbmV3X25hbWUgJG5ld2VzdAorZWxzZQorCXByaW50ZiAiTW9zdCByZWNlbnQ6ICIKKwlnaXQgLS1uby1wYWdlciBsb2cgLTEgLS1wcmV0dHk9dGZvcm1hdDoiJWggJXMiICRuZXdlc3QKKwllY2hvICIqKiAkbmV3X25hbWUgYWxyZWFkeSBleGlzdHMsIGRvaW5nIG5vdGhpbmciCitmaQpkaWZmIC0tZ2l0IGEvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnB5IGIvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnB5CmluZGV4IDdiMDMyMDQuLjJhNjgzOWQgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvaGctdG8tZ2l0L2hnLXRvLWdpdC5weQorKysgYi9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQucHkKQEAgLTIwLDcgKzIwLDcgQEAKICIiIgogCiBpbXBvcnQgb3MsIG9zLnBhdGgsIHN5cwotaW1wb3J0IHRlbXBmaWxlLCBwb3BlbjIsIHBpY2tsZSwgZ2V0b3B0CitpbXBvcnQgdGVtcGZpbGUsIHBpY2tsZSwgZ2V0b3B0CiBpbXBvcnQgcmUKIAogIyBNYXBzIGhnIHZlcnNpb24gLT4gZ2l0IHZlcnNpb24KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsIGIvY29udHJpYi9ob29rcy9wb3N0LXJlY2VpdmUtZW1haWwKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAyOGEzYzBlLi4yYTY2MDYzCi0tLSBhL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsCisrKyBiL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsCkBAIC00NCw2ICs0NCwxMCBAQAogIyAgIC0tcHJldHR5ICVzIiwgZGlzcGxheWluZyB0aGUgY29tbWl0IGlkLCBhdXRob3IsIGRhdGUgYW5kIGxvZwogIyAgIG1lc3NhZ2UuICBUbyBsaXN0IGZ1bGwgcGF0Y2hlcyBzZXBhcmF0ZWQgYnkgYSBibGFuayBsaW5lLCB5b3UKICMgICBjb3VsZCBzZXQgdGhpcyB0byAiZ2l0IHNob3cgLUMgJXM7IGVjaG8iLgorIyAgIFRvIGxpc3QgYSBnaXR3ZWIvY2dpdCBVUkwgKmFuZCogYSBmdWxsIHBhdGNoIGZvciBlYWNoIGNoYW5nZSBzZXQsIHVzZSB0aGlzOgorIyAgICAgInQ9JXM7IHByaW50ZiAnaHR0cDovLy4uLi8/aWQ9JSVzJyBcJHQ7IGVjaG87ZWNobzsgZ2l0IHNob3cgLUMgXCR0OyBlY2hvIgorIyAgIEJlIGNhcmVmdWwgaWYgIi4uLiIgY29udGFpbnMgdGhpbmdzIHRoYXQgd2lsbCBiZSBleHBhbmRlZCBieSBzaGVsbCAiZXZhbCIKKyMgICBvciBwcmludGYuCiAjCiAjIE5vdGVzCiAjIC0tLS0tCkBAIC02MTUsNyArNjE5LDkgQEAKIAkJcmV2c3BlYz0kb2xkcmV2Li4kbmV3cmV2CiAJZmkKIAotCWdpdCByZXYtcGFyc2UgLS1ub3QgLS1icmFuY2hlcyB8IGdyZXAgLXYgJChnaXQgcmV2LXBhcnNlICRyZWZuYW1lKSB8CisJb3RoZXJfYnJhbmNoZXM9JChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHJlZm5hbWUpJyByZWZzL2hlYWRzLyB8CisJICAgIGdyZXAgLUYgLXYgJHJlZm5hbWUpCisJZ2l0IHJldi1wYXJzZSAtLW5vdCAkb3RoZXJfYnJhbmNoZXMgfAogCWlmIFsgLXogIiRjdXN0b21fc2hvd3JldiIgXQogCXRoZW4KIAkJZ2l0IHJldi1saXN0IC0tcHJldHR5IC0tc3RkaW4gJHJldnNwZWMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGh1bmRlcmJpcmQtcGF0Y2gtaW5saW5lL1JFQURNRSBiL2NvbnRyaWIvdGh1bmRlcmJpcmQtcGF0Y2gtaW5saW5lL1JFQURNRQppbmRleCAzOWY5NmFhLi4wMDAxNDdiIDEwMDY0NAotLS0gYS9jb250cmliL3RodW5kZXJiaXJkLXBhdGNoLWlubGluZS9SRUFETUUKKysrIGIvY29udHJpYi90aHVuZGVyYmlyZC1wYXRjaC1pbmxpbmUvUkVBRE1FCkBAIC0xLDEyICsxLDEyIEBACiBhcHBwLnNoIGlzIGEgc2NyaXB0IHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoIEV4dGVybmFsRWRpdG9yCi1mb3IgTW96aWxsYSBUaHVuZGViaXJkLiBJdCB3aWxsIGxldCB5b3UgaW5jbHVkZSBwYXRjaGVzIGlubGluZSBpbiBlLW1haWxzCitmb3IgTW96aWxsYSBUaHVuZGVyYmlyZC4gSXQgd2lsbCBsZXQgeW91IGluY2x1ZGUgcGF0Y2hlcyBpbmxpbmUgaW4gZS1tYWlscwogaW4gYW4gZWFzeSB3YXkuCiAKIFVzYWdlOgogLSBHZW5lcmF0ZSB0aGUgcGF0Y2ggd2l0aCBnaXQgZm9ybWF0LXBhdGNoLgogLSBTdGFydCB3cml0aW5nIGEgbmV3IGUtbWFpbCBpbiBUaHVuZGVyYmlyZC4KIC0gUHJlc3MgdGhlIGV4dGVybmFsIGVkaXRvciBidXR0b24gKG9yIEN0cmwtRSkgdG8gcnVuIGFwcHAuc2gKLS0gU2VsZWN0IHRoZSBwcmV2aW9zbHkgZ2VuZXJhdGVkIHBhdGNoIGZpbGUuCistIFNlbGVjdCB0aGUgcHJldmlvdXNseSBnZW5lcmF0ZWQgcGF0Y2ggZmlsZS4KIC0gRmluaXNoIGVkaXRpbmcgdGhlIGUtbWFpbC4KIAogQW55IHRleHQgdGhhdCBpcyBlbnRlcmVkIGludG8gdGhlIG1lc3NhZ2UgZWRpdG9yIGJlZm9yZSBhcHBwLnNoIGlzIGNhbGxlZApkaWZmIC0tZ2l0IGEvY29udHJpYi92aW0vUkVBRE1FIGIvY29udHJpYi92aW0vUkVBRE1FCmluZGV4IGM0ODczNDYuLmZjYTFlMTcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvdmltL1JFQURNRQorKysgYi9jb250cmliL3ZpbS9SRUFETUUKQEAgLTUsMTEgKzUsMTMgQEAKIElmIHlvdSBoYXZlIGFuIG9sZGVyIHZlcnNpb24gb2YgdmltLCB5b3UgY2FuIGdldCB0aGUgbGF0ZXN0IHN5bnRheAogZmlsZXMgZnJvbSB0aGUgdmltIHByb2plY3Q6CiAKLSAgaHR0cDovL3ZpbS5zdm4uc291cmNlZm9yZ2UubmV0L3ZpZXd2Yy92aW0vdHJ1bmsvcnVudGltZS9zeW50YXgvZ2l0LnZpbQotICBodHRwOi8vdmltLnN2bi5zb3VyY2Vmb3JnZS5uZXQvdmlld3ZjL3ZpbS90cnVuay9ydW50aW1lL3N5bnRheC9naXRjb21taXQudmltCi0gIGh0dHA6Ly92aW0uc3ZuLnNvdXJjZWZvcmdlLm5ldC92aWV3dmMvdmltL3RydW5rL3J1bnRpbWUvc3ludGF4L2dpdGNvbmZpZy52aW0KLSAgaHR0cDovL3ZpbS5zdm4uc291cmNlZm9yZ2UubmV0L3ZpZXd2Yy92aW0vdHJ1bmsvcnVudGltZS9zeW50YXgvZ2l0cmViYXNlLnZpbQotICBodHRwOi8vdmltLnN2bi5zb3VyY2Vmb3JnZS5uZXQvdmlld3ZjL3ZpbS90cnVuay9ydW50aW1lL3N5bnRheC9naXRzZW5kZW1haWwudmltCisgIGh0dHA6Ly9mdHAudmltLm9yZy9wdWIvdmltL3J1bnRpbWUvc3ludGF4L2dpdC52aW0KKyAgaHR0cDovL2Z0cC52aW0ub3JnL3B1Yi92aW0vcnVudGltZS9zeW50YXgvZ2l0Y29tbWl0LnZpbQorICBodHRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS9ydW50aW1lL3N5bnRheC9naXRjb25maWcudmltCisgIGh0dHA6Ly9mdHAudmltLm9yZy9wdWIvdmltL3J1bnRpbWUvc3ludGF4L2dpdHJlYmFzZS52aW0KKyAgaHR0cDovL2Z0cC52aW0ub3JnL3B1Yi92aW0vcnVudGltZS9zeW50YXgvZ2l0c2VuZGVtYWlsLnZpbQorCitUaGVzZSBmaWxlcyBhcmUgYWxzbyBhdmFpbGFibGUgdmlhIEZUUCBhdCB0aGUgc2FtZSBsb2NhdGlvbi4KIAogVG8gaW5zdGFsbDoKIApkaWZmIC0tZ2l0IGEvY3N1bS1maWxlLmMgYi9jc3VtLWZpbGUuYwppbmRleCAyZGRiMTJhLi40ZDUwY2M1IDEwMDY0NAotLS0gYS9jc3VtLWZpbGUuYworKysgYi9jc3VtLWZpbGUuYwpAQCAtMjYsNyArMjYsNyBAQAogCQl9CiAJCWlmICghcmV0KQogCQkJZGllKCJzaGExIGZpbGUgJyVzJyB3cml0ZSBlcnJvci4gT3V0IG9mIGRpc2tzcGFjZSIsIGYtPm5hbWUpOwotCQlkaWUoInNoYTEgZmlsZSAnJXMnIHdyaXRlIGVycm9yICglcykiLCBmLT5uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oInNoYTEgZmlsZSAnJXMnIHdyaXRlIGVycm9yIiwgZi0+bmFtZSk7CiAJfQogfQogCkBAIC01NSw4ICs1NSw3IEBACiAJCWlmIChmbGFncyAmIENTVU1fRlNZTkMpCiAJCQlmc3luY19vcl9kaWUoZi0+ZmQsIGYtPm5hbWUpOwogCQlpZiAoY2xvc2UoZi0+ZmQpKQotCQkJZGllKCIlczogc2hhMSBmaWxlIGVycm9yIG9uIGNsb3NlICglcykiLAotCQkJICAgIGYtPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oIiVzOiBzaGExIGZpbGUgZXJyb3Igb24gY2xvc2UiLCBmLT5uYW1lKTsKIAkJZmQgPSAwOwogCX0gZWxzZQogCQlmZCA9IGYtPmZkOwpkaWZmIC0tZ2l0IGEvY3R5cGUuYyBiL2N0eXBlLmMKaW5kZXggOTIwOGQ2Ny4uN2VlNjRjNyAxMDA2NDQKLS0tIGEvY3R5cGUuYworKysgYi9jdHlwZS5jCkBAIC01LDI1ICs1LDIyIEBACiAgKi8KICNpbmNsdWRlICJjYWNoZS5oIgogCi0vKiBKdXN0IHNvIHRoYXQgbm8gaW5zYW5lIHBsYXRmb3JtIGNvbnRhbWluYXRlIG5hbWVzcGFjZSB3aXRoIHRoZXNlIHN5bWJvbHMgKi8KLSN1bmRlZiBTUwotI3VuZGVmIEFBCi0jdW5kZWYgREQKLSN1bmRlZiBHUwotCi0jZGVmaW5lIFNTIEdJVF9TUEFDRQotI2RlZmluZSBBQSBHSVRfQUxQSEEKLSNkZWZpbmUgREQgR0lUX0RJR0lUCi0jZGVmaW5lIEdTIEdJVF9TUEVDSUFMICAvKiBcMCwgKiwgPywgWywgXFwgKi8KK2VudW0geworCVMgPSBHSVRfU1BBQ0UsCisJQSA9IEdJVF9BTFBIQSwKKwlEID0gR0lUX0RJR0lULAorCUcgPSBHSVRfR0xPQl9TUEVDSUFMLAkvKiAqLCA/LCBbLCBcXCAqLworCVIgPSBHSVRfUkVHRVhfU1BFQ0lBTCwJLyogJCwgKCwgKSwgKywgLiwgXiwgeywgfCAqLworfTsKIAogdW5zaWduZWQgY2hhciBzYW5lX2N0eXBlWzI1Nl0gPSB7Ci0JR1MsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgU1MsIFNTLCAgMCwgIDAsIFNTLCAgMCwgIDAsCQkvKiAwLTE1ICovCi0JIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCQkvKiAxNi0xNSAqLwotCVNTLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCBHUywgIDAsICAwLCAgMCwgIDAsICAwLAkJLyogMzItMTUgKi8KLQlERCwgREQsIERELCBERCwgREQsIERELCBERCwgREQsIERELCBERCwgIDAsICAwLCAgMCwgIDAsICAwLCBHUywJCS8qIDQ4LTE1ICovCi0JIDAsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsCQkvKiA2NC0xNSAqLwotCUFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgR1MsIEdTLCAgMCwgIDAsICAwLAkJLyogODAtMTUgKi8KLQkgMCwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwJCS8qIDk2LTE1ICovCi0JQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCAgMCwgIDAsICAwLCAgMCwgIDAsCQkvKiAxMTItMTUgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCBTLCBTLCAwLCAwLCBTLCAwLCAwLAkJLyogICAwLi4gMTUgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAkJLyogIDE2Li4gMzEgKi8KKwlTLCAwLCAwLCAwLCBSLCAwLCAwLCAwLCBSLCBSLCBHLCBSLCAwLCAwLCBSLCAwLAkJLyogIDMyLi4gNDcgKi8KKwlELCBELCBELCBELCBELCBELCBELCBELCBELCBELCAwLCAwLCAwLCAwLCAwLCBHLAkJLyogIDQ4Li4gNjMgKi8KKwkwLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLAkJLyogIDY0Li4gNzkgKi8KKwlBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBHLCBHLCAwLCBSLCAwLAkJLyogIDgwLi4gOTUgKi8KKwkwLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLAkJLyogIDk2Li4xMTEgKi8KKwlBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBSLCBSLCAwLCAwLCAwLAkJLyogMTEyLi4xMjcgKi8KIAkvKiBOb3RoaW5nIGluIHRoZSAxMjguLiByYW5nZSAqLwogfTsKZGlmZiAtLWdpdCBhL2RhZW1vbi5jIGIvZGFlbW9uLmMKaW5kZXggNjBiZjZjNy4uMWI1YWRhNiAxMDA2NDQKLS0tIGEvZGFlbW9uLmMKKysrIGIvZGFlbW9uLmMKQEAgLTEsNiArMSw4IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJwa3QtbGluZS5oIgogI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKIAogI2luY2x1ZGUgPHN5c2xvZy5oPgogCkBAIC0yMjksNyArMjMxLDcgQEAKIAl9CiAKIAlpZiAoIXBhdGgpIHsKLQkJbG9nZXJyb3IoIiclcyc6IHVuYWJsZSB0byBjaGRpciBvciBub3QgYSBnaXQgYXJjaGl2ZSIsIGRpcik7CisJCWxvZ2Vycm9yKCInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIGdpdCByZXBvc2l0b3J5IiwgZGlyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0zNDMsMjggKzM0NSw2NiBAQAogCXJldHVybiBzZXJ2aWNlLT5mbigpOwogfQogCitzdGF0aWMgdm9pZCBjb3B5X3RvX2xvZyhpbnQgZmQpCit7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqZnA7CisKKwlmcCA9IGZkb3BlbihmZCwgInIiKTsKKwlpZiAoZnAgPT0gTlVMTCkgeworCQlsb2dlcnJvcigiZmRvcGVuIG9mIGVycm9yIGNoYW5uZWwgZmFpbGVkIik7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbGluZSwgZnAsICdcbicpICE9IEVPRikgeworCQlsb2dlcnJvcigiJXMiLCBsaW5lLmJ1Zik7CisJCXN0cmJ1Zl9zZXRsZW4oJmxpbmUsIDApOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwlmY2xvc2UoZnApOworfQorCitzdGF0aWMgaW50IHJ1bl9zZXJ2aWNlX2NvbW1hbmQoY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2xkOworCisJbWVtc2V0KCZjbGQsIDAsIHNpemVvZihjbGQpKTsKKwljbGQuYXJndiA9IGFyZ3Y7CisJY2xkLmdpdF9jbWQgPSAxOworCWNsZC5lcnIgPSAtMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2xkKSkKKwkJcmV0dXJuIC0xOworCisJY2xvc2UoMCk7CisJY2xvc2UoMSk7CisKKwljb3B5X3RvX2xvZyhjbGQuZXJyKTsKKworCXJldHVybiBmaW5pc2hfY29tbWFuZCgmY2xkKTsKK30KKwogc3RhdGljIGludCB1cGxvYWRfcGFjayh2b2lkKQogewogCS8qIFRpbWVvdXQgYXMgc3RyaW5nICovCiAJY2hhciB0aW1lb3V0X2J1Zls2NF07CisJY29uc3QgY2hhciAqYXJndltdID0geyAidXBsb2FkLXBhY2siLCAiLS1zdHJpY3QiLCB0aW1lb3V0X2J1ZiwgIi4iLCBOVUxMIH07CiAKIAlzbnByaW50Zih0aW1lb3V0X2J1Ziwgc2l6ZW9mIHRpbWVvdXRfYnVmLCAiLS10aW1lb3V0PSV1IiwgdGltZW91dCk7Ci0KLQkvKiBnaXQtdXBsb2FkLXBhY2sgb25seSBldmVyIHJlYWRzIHN0dWZmLCBzbyB0aGlzIGlzIHNhZmUgKi8KLQlleGVjbF9naXRfY21kKCJ1cGxvYWQtcGFjayIsICItLXN0cmljdCIsIHRpbWVvdXRfYnVmLCAiLiIsIE5VTEwpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gcnVuX3NlcnZpY2VfY29tbWFuZChhcmd2KTsKIH0KIAogc3RhdGljIGludCB1cGxvYWRfYXJjaGl2ZSh2b2lkKQogewotCWV4ZWNsX2dpdF9jbWQoInVwbG9hZC1hcmNoaXZlIiwgIi4iLCBOVUxMKTsKLQlyZXR1cm4gLTE7CisJc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgInVwbG9hZC1hcmNoaXZlIiwgIi4iLCBOVUxMIH07CisJcmV0dXJuIHJ1bl9zZXJ2aWNlX2NvbW1hbmQoYXJndik7CiB9CiAKIHN0YXRpYyBpbnQgcmVjZWl2ZV9wYWNrKHZvaWQpCiB7Ci0JZXhlY2xfZ2l0X2NtZCgicmVjZWl2ZS1wYWNrIiwgIi4iLCBOVUxMKTsKLQlyZXR1cm4gLTE7CisJc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgInJlY2VpdmUtcGFjayIsICIuIiwgTlVMTCB9OworCXJldHVybiBydW5fc2VydmljZV9jb21tYW5kKGFyZ3YpOwogfQogCiBzdGF0aWMgc3RydWN0IGRhZW1vbl9zZXJ2aWNlIGRhZW1vbl9zZXJ2aWNlW10gPSB7CkBAIC00MDYsMTUgKzQ0NiwxNSBAQAogfQogCiAvKgotICogU2VwYXJhdGUgdGhlICJleHRyYSBhcmdzIiBpbmZvcm1hdGlvbiBhcyBzdXBwbGllZCBieSB0aGUgY2xpZW50IGNvbm5lY3Rpb24uCisgKiBSZWFkIHRoZSBob3N0IGFzIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQgY29ubmVjdGlvbi4KICAqLwotc3RhdGljIHZvaWQgcGFyc2VfZXh0cmFfYXJncyhjaGFyICpleHRyYV9hcmdzLCBpbnQgYnVmbGVuKQorc3RhdGljIHZvaWQgcGFyc2VfaG9zdF9hcmcoY2hhciAqZXh0cmFfYXJncywgaW50IGJ1ZmxlbikKIHsKIAljaGFyICp2YWw7CiAJaW50IHZhbGxlbjsKIAljaGFyICplbmQgPSBleHRyYV9hcmdzICsgYnVmbGVuOwogCi0Jd2hpbGUgKGV4dHJhX2FyZ3MgPCBlbmQgJiYgKmV4dHJhX2FyZ3MpIHsKKwlpZiAoZXh0cmFfYXJncyA8IGVuZCAmJiAqZXh0cmFfYXJncykgewogCQlzYXdfZXh0ZW5kZWRfYXJncyA9IDE7CiAJCWlmIChzdHJuY2FzZWNtcCgiaG9zdD0iLCBleHRyYV9hcmdzLCA1KSA9PSAwKSB7CiAJCQl2YWwgPSBleHRyYV9hcmdzICsgNTsKQEAgLTQzNiw2ICs0NzYsOCBAQAogCQkJLyogT24gdG8gdGhlIG5leHQgb25lICovCiAJCQlleHRyYV9hcmdzID0gdmFsICsgdmFsbGVuOwogCQl9CisJCWlmIChleHRyYV9hcmdzIDwgZW5kICYmICpleHRyYV9hcmdzKQorCQkJZGllKCJJbnZhbGlkIHJlcXVlc3QiKTsKIAl9CiAKIAkvKgpAQCAtNDQ0LDI3ICs0ODYsMjcgQEAKIAlpZiAoaG9zdG5hbWUpIHsKICNpZm5kZWYgTk9fSVBWNgogCQlzdHJ1Y3QgYWRkcmluZm8gaGludHM7Ci0JCXN0cnVjdCBhZGRyaW5mbyAqYWksICphaTA7CisJCXN0cnVjdCBhZGRyaW5mbyAqYWk7CiAJCWludCBnYWk7CiAJCXN0YXRpYyBjaGFyIGFkZHJidWZbSE9TVF9OQU1FX01BWCArIDFdOwogCiAJCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwogCQloaW50cy5haV9mbGFncyA9IEFJX0NBTk9OTkFNRTsKIAotCQlnYWkgPSBnZXRhZGRyaW5mbyhob3N0bmFtZSwgMCwgJmhpbnRzLCAmYWkwKTsKKwkJZ2FpID0gZ2V0YWRkcmluZm8oaG9zdG5hbWUsIE5VTEwsICZoaW50cywgJmFpKTsKIAkJaWYgKCFnYWkpIHsKLQkJCWZvciAoYWkgPSBhaTA7IGFpOyBhaSA9IGFpLT5haV9uZXh0KSB7Ci0JCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW5fYWRkciA9ICh2b2lkICopYWktPmFpX2FkZHI7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbl9hZGRyID0gKHZvaWQgKilhaS0+YWlfYWRkcjsKIAotCQkJCWluZXRfbnRvcChBRl9JTkVULCAmc2luX2FkZHItPnNpbl9hZGRyLAotCQkJCQkgIGFkZHJidWYsIHNpemVvZihhZGRyYnVmKSk7Ci0JCQkJZnJlZShjYW5vbl9ob3N0bmFtZSk7Ci0JCQkJY2Fub25faG9zdG5hbWUgPSB4c3RyZHVwKGFpLT5haV9jYW5vbm5hbWUpOwotCQkJCWZyZWUoaXBfYWRkcmVzcyk7Ci0JCQkJaXBfYWRkcmVzcyA9IHhzdHJkdXAoYWRkcmJ1Zik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlmcmVlYWRkcmluZm8oYWkwKTsKKwkJCWluZXRfbnRvcChBRl9JTkVULCAmc2luX2FkZHItPnNpbl9hZGRyLAorCQkJCSAgYWRkcmJ1Ziwgc2l6ZW9mKGFkZHJidWYpKTsKKwkJCWZyZWUoaXBfYWRkcmVzcyk7CisJCQlpcF9hZGRyZXNzID0geHN0cmR1cChhZGRyYnVmKTsKKworCQkJZnJlZShjYW5vbl9ob3N0bmFtZSk7CisJCQljYW5vbl9ob3N0bmFtZSA9IHhzdHJkdXAoYWktPmFpX2Nhbm9ubmFtZSA/CisJCQkJCQkgYWktPmFpX2Nhbm9ubmFtZSA6IGlwX2FkZHJlc3MpOworCisJCQlmcmVlYWRkcmluZm8oYWkpOwogCQl9CiAjZWxzZQogCQlzdHJ1Y3QgaG9zdGVudCAqaGVudDsKQEAgLTU0NSw3ICs1ODcsNyBAQAogCWhvc3RuYW1lID0gY2Fub25faG9zdG5hbWUgPSBpcF9hZGRyZXNzID0gdGNwX3BvcnQgPSBOVUxMOwogCiAJaWYgKGxlbiAhPSBwa3RsZW4pCi0JCXBhcnNlX2V4dHJhX2FyZ3MobGluZSArIGxlbiArIDEsIHBrdGxlbiAtIGxlbiAtIDEpOworCQlwYXJzZV9ob3N0X2FyZyhsaW5lICsgbGVuICsgMSwgcGt0bGVuIC0gbGVuIC0gMSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYWVtb25fc2VydmljZSk7IGkrKykgewogCQlzdHJ1Y3QgZGFlbW9uX3NlcnZpY2UgKnMgPSAmKGRhZW1vbl9zZXJ2aWNlW2ldKTsKQEAgLTcxNiw3ICs3NTgsNyBAQAogCiAJZ2FpID0gZ2V0YWRkcmluZm8obGlzdGVuX2FkZHIsIHBidWYsICZoaW50cywgJmFpMCk7CiAJaWYgKGdhaSkKLQkJZGllKCJnZXRhZGRyaW5mbygpIGZhaWxlZDogJXNcbiIsIGdhaV9zdHJlcnJvcihnYWkpKTsKKwkJZGllKCJnZXRhZGRyaW5mbygpIGZhaWxlZDogJXMiLCBnYWlfc3RyZXJyb3IoZ2FpKSk7CiAKIAlmb3IgKGFpID0gYWkwOyBhaTsgYWkgPSBhaS0+YWlfbmV4dCkgewogCQlpbnQgc29ja2ZkOwpAQCAtODYwLDcgKzkwMiw3IEBACiAJCQkJCWNhc2UgRUNPTk5BQk9SVEVEOgogCQkJCQkJY29udGludWU7CiAJCQkJCWRlZmF1bHQ6Ci0JCQkJCQlkaWUoImFjY2VwdCByZXR1cm5lZCAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJCQlkaWVfZXJybm8oImFjY2VwdCByZXR1cm5lZCIpOwogCQkJCQl9CiAJCQkJfQogCQkJCWhhbmRsZShpbmNvbWluZywgKHN0cnVjdCBzb2NrYWRkciAqKSZzcywgc3NsZW4pOwpAQCAtODc2LDcgKzkxOCw3IEBACiAJd2hpbGUgKGZkICE9IC0xICYmIGZkIDwgMikKIAkJZmQgPSBkdXAoZmQpOwogCWlmIChmZCA9PSAtMSkKLQkJZGllKCJvcGVuIC9kZXYvbnVsbCBvciBkdXAgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIpOwogCWlmIChmZCA+IDIpCiAJCWNsb3NlKGZkKTsKIH0KQEAgLTg4NywxMiArOTI5LDEyIEBACiAJCWNhc2UgMDoKIAkJCWJyZWFrOwogCQljYXNlIC0xOgotCQkJZGllKCJmb3JrIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJmb3JrIGZhaWxlZCIpOwogCQlkZWZhdWx0OgogCQkJZXhpdCgwKTsKIAl9CiAJaWYgKHNldHNpZCgpID09IC0xKQotCQlkaWUoInNldHNpZCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJzZXRzaWQgZmFpbGVkIik7CiAJY2xvc2UoMCk7CiAJY2xvc2UoMSk7CiAJY2xvc2UoMik7CkBAIC05MDMsOSArOTQ1LDkgQEAKIHsKIAlGSUxFICpmID0gZm9wZW4ocGF0aCwgInciKTsKIAlpZiAoIWYpCi0JCWRpZSgiY2Fubm90IG9wZW4gcGlkIGZpbGUgJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiBwaWQgZmlsZSAnJXMnIiwgcGF0aCk7CiAJaWYgKGZwcmludGYoZiwgIiUiUFJJdU1BWCJcbiIsICh1aW50bWF4X3QpIGdldHBpZCgpKSA8IDAgfHwgZmNsb3NlKGYpICE9IDApCi0JCWRpZSgiZmFpbGVkIHRvIHdyaXRlIHBpZCBmaWxlICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiZmFpbGVkIHRvIHdyaXRlIHBpZCBmaWxlICclcyciLCBwYXRoKTsKIH0KIAogc3RhdGljIGludCBzZXJ2ZShjaGFyICpsaXN0ZW5fYWRkciwgaW50IGxpc3Rlbl9wb3J0LCBzdHJ1Y3QgcGFzc3dkICpwYXNzLCBnaWRfdCBnaWQpCkBAIC05MzcsNiArOTc5LDggQEAKIAlnaWRfdCBnaWQgPSAwOwogCWludCBpOwogCisJZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKKwogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKIAkJY2hhciAqYXJnID0gYXJndltpXTsKIApAQCAtMTEwMyw4ICsxMTQ3LDcgQEAKIAkJc29ja2xlbl90IHNsZW4gPSBzaXplb2Yoc3MpOwogCiAJCWlmICghZnJlb3BlbigiL2Rldi9udWxsIiwgInciLCBzdGRlcnIpKQotCQkJZGllKCJmYWlsZWQgdG8gcmVkaXJlY3Qgc3RkZXJyIHRvIC9kZXYvbnVsbDogJXMiLAotCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImZhaWxlZCB0byByZWRpcmVjdCBzdGRlcnIgdG8gL2Rldi9udWxsIik7CiAKIAkJaWYgKGdldHBlZXJuYW1lKDAsIHBlZXIsICZzbGVuKSkKIAkJCXBlZXIgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZGF0ZS5jIGIvZGF0ZS5jCmluZGV4IDk1MGI4OGYuLjQwOWExN2QgMTAwNjQ0Ci0tLSBhL2RhdGUuYworKysgYi9kYXRlLmMKQEAgLTg5LDYgKzg5LDExIEBACiAJc3RydWN0IHRtICp0bTsKIAlzdGF0aWMgY2hhciB0aW1lYnVmWzIwMF07CiAKKwlpZiAobW9kZSA9PSBEQVRFX1JBVykgeworCQlzbnByaW50Zih0aW1lYnVmLCBzaXplb2YodGltZWJ1ZiksICIlbHUgJSswNWQiLCB0aW1lLCB0eik7CisJCXJldHVybiB0aW1lYnVmOworCX0KKwogCWlmIChtb2RlID09IERBVEVfUkVMQVRJVkUpIHsKIAkJdW5zaWduZWQgbG9uZyBkaWZmOwogCQlzdHJ1Y3QgdGltZXZhbCBub3c7CkBAIC0xMjgsNyArMTMzLDI1IEBACiAJCQlzbnByaW50Zih0aW1lYnVmLCBzaXplb2YodGltZWJ1ZiksICIlbHUgbW9udGhzIGFnbyIsIChkaWZmICsgMTUpIC8gMzApOwogCQkJcmV0dXJuIHRpbWVidWY7CiAJCX0KLQkJLyogRWxzZSBmYWxsIGJhY2sgb24gYWJzb2x1dGUgZm9ybWF0Li4gKi8KKwkJLyogR2l2ZSB5ZWFycyBhbmQgbW9udGhzIGZvciA1IHllYXJzIG9yIHNvICovCisJCWlmIChkaWZmIDwgMTgyNSkgeworCQkJdW5zaWduZWQgbG9uZyB5ZWFycyA9IChkaWZmICsgMTgzKSAvIDM2NTsKKwkJCXVuc2lnbmVkIGxvbmcgbW9udGhzID0gKGRpZmYgJSAzNjUgKyAxNSkgLyAzMDsKKwkJCWludCBuOworCQkJbiA9IHNucHJpbnRmKHRpbWVidWYsIHNpemVvZih0aW1lYnVmKSwgIiVsdSB5ZWFyJXMiLAorCQkJCQl5ZWFycywgKHllYXJzID4gMSA/ICJzIiA6ICIiKSk7CisJCQlpZiAobW9udGhzKQorCQkJCXNucHJpbnRmKHRpbWVidWYgKyBuLCBzaXplb2YodGltZWJ1ZikgLSBuLAorCQkJCQkiLCAlbHUgbW9udGglcyBhZ28iLAorCQkJCQltb250aHMsIChtb250aHMgPiAxID8gInMiIDogIiIpKTsKKwkJCWVsc2UKKwkJCQlzbnByaW50Zih0aW1lYnVmICsgbiwgc2l6ZW9mKHRpbWVidWYpIC0gbiwKKwkJCQkJIiBhZ28iKTsKKwkJCXJldHVybiB0aW1lYnVmOworCQl9CisJCS8qIE90aGVyd2lzZSwganVzdCB5ZWFycy4gQ2VudHVyaWVzIGlzIHByb2JhYmx5IG92ZXJraWxsLiAqLworCQlzbnByaW50Zih0aW1lYnVmLCBzaXplb2YodGltZWJ1ZiksICIlbHUgeWVhcnMgYWdvIiwgKGRpZmYgKyAxODMpIC8gMzY1KTsKKwkJcmV0dXJuIHRpbWVidWY7CiAJfQogCiAJaWYgKG1vZGUgPT0gREFURV9MT0NBTCkKQEAgLTYxNSw2ICs2MzgsOCBAQAogCQlyZXR1cm4gREFURV9MT0NBTDsKIAllbHNlIGlmICghc3RyY21wKGZvcm1hdCwgImRlZmF1bHQiKSkKIAkJcmV0dXJuIERBVEVfTk9STUFMOworCWVsc2UgaWYgKCFzdHJjbXAoZm9ybWF0LCAicmF3IikpCisJCXJldHVybiBEQVRFX1JBVzsKIAllbHNlCiAJCWRpZSgidW5rbm93biBkYXRlIGZvcm1hdCAlcyIsIGZvcm1hdCk7CiB9CkBAIC04NDYsMTMgKzg3MSwxNSBAQAogCWludCBudW1iZXIgPSAwOwogCXN0cnVjdCB0bSB0bSwgbm93OwogCXN0cnVjdCB0aW1ldmFsIHR2OworCXRpbWVfdCB0aW1lX3NlYzsKIAljaGFyIGJ1ZmZlcls1MF07CiAKIAlpZiAocGFyc2VfZGF0ZShkYXRlLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSA+IDApCiAJCXJldHVybiBzdHJ0b3VsKGJ1ZmZlciwgTlVMTCwgMTApOwogCiAJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JbG9jYWx0aW1lX3IoJnR2LnR2X3NlYywgJnRtKTsKKwl0aW1lX3NlYyA9IHR2LnR2X3NlYzsKKwlsb2NhbHRpbWVfcigmdGltZV9zZWMsICZ0bSk7CiAJbm93ID0gdG07CiAJZm9yICg7OykgewogCQl1bnNpZ25lZCBjaGFyIGMgPSAqZGF0ZTsKZGlmZiAtLWdpdCBhL2RlY29yYXRlLmMgYi9kZWNvcmF0ZS5jCmluZGV4IDgyZDllMjIuLjJmOGE2M2UgMTAwNjQ0Ci0tLSBhL2RlY29yYXRlLmMKKysrIGIvZGVjb3JhdGUuYwpAQCAtOCw3ICs4LDkgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBoYXNoX29iaihjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIHVuc2lnbmVkIGludCBuKQogewotCXVuc2lnbmVkIGludCBoYXNoID0gKih1bnNpZ25lZCBpbnQgKilvYmotPnNoYTE7CisJdW5zaWduZWQgaW50IGhhc2g7CisKKwltZW1jcHkoJmhhc2gsIG9iai0+c2hhMSwgc2l6ZW9mKHVuc2lnbmVkIGludCkpOwogCXJldHVybiBoYXNoICUgbjsKIH0KIApAQCAtMTYsNyArMTgsNyBAQAogewogCWludCBzaXplID0gbi0+c2l6ZTsKIAlzdHJ1Y3Qgb2JqZWN0X2RlY29yYXRpb24gKmhhc2ggPSBuLT5oYXNoOwotCWludCBqID0gaGFzaF9vYmooYmFzZSwgc2l6ZSk7CisJdW5zaWduZWQgaW50IGogPSBoYXNoX29iaihiYXNlLCBzaXplKTsKIAogCXdoaWxlIChoYXNoW2pdLmJhc2UpIHsKIAkJaWYgKGhhc2hbal0uYmFzZSA9PSBiYXNlKSB7CkBAIC02OCw3ICs3MCw3IEBACiAvKiBMb29rdXAgYSBkZWNvcmF0aW9uIHBvaW50ZXIgKi8KIHZvaWQgKmxvb2t1cF9kZWNvcmF0aW9uKHN0cnVjdCBkZWNvcmF0aW9uICpuLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCiB7Ci0JaW50IGo7CisJdW5zaWduZWQgaW50IGo7CiAKIAkvKiBub3RoaW5nIHRvIGxvb2t1cCAqLwogCWlmICghbi0+c2l6ZSkKZGlmZiAtLWdpdCBhL2RlbHRhLmggYi9kZWx0YS5oCmluZGV4IDQwY2NmNWEuLmI5ZDMzM2QgMTAwNjQ0Ci0tLSBhL2RlbHRhLmgKKysrIGIvZGVsdGEuaApAQCAtOTAsMTIgKzkwLDExIEBACiAJCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0b3ApCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9ICpkYXRhcDsKLQl1bnNpZ25lZCBjaGFyIGNtZDsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSAwOworCXVuc2lnbmVkIGxvbmcgY21kLCBzaXplID0gMDsKIAlpbnQgaSA9IDA7CiAJZG8gewogCQljbWQgPSAqZGF0YSsrOwotCQlzaXplIHw9IChjbWQgJiB+MHg4MCkgPDwgaTsKKwkJc2l6ZSB8PSAoY21kICYgMHg3ZikgPDwgaTsKIAkJaSArPSA3OwogCX0gd2hpbGUgKGNtZCAmIDB4ODAgJiYgZGF0YSA8IHRvcCk7CiAJKmRhdGFwID0gZGF0YTsKZGlmZiAtLWdpdCBhL2RpZmYtbGliLmMgYi9kaWZmLWxpYi5jCmluZGV4IGFlOTZjNjQuLmFkMmE0Y2QgMTAwNjQ0Ci0tLSBhL2RpZmYtbGliLmMKKysrIGIvZGlmZi1saWIuYwpAQCAtMzEsNyArMzEsNyBAQAogCQkJcmV0dXJuIC0xOwogCQlyZXR1cm4gMTsKIAl9Ci0JaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjZV9uYW1lbGVuKGNlKSwgY2UtPm5hbWUpKQorCWlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKSkKIAkJcmV0dXJuIDE7CiAJaWYgKFNfSVNESVIoc3QtPnN0X21vZGUpKSB7CiAJCXVuc2lnbmVkIGNoYXIgc3ViWzIwXTsKQEAgLTYxLDE0ICs2MSwxMiBAQAogCWludCBzaWxlbnRfb25fcmVtb3ZlZCA9IG9wdGlvbiAmIERJRkZfU0lMRU5UX09OX1JFTU9WRUQ7CiAJdW5zaWduZWQgY2Vfb3B0aW9uID0gKChvcHRpb24gJiBESUZGX1JBQ1lfSVNfTU9ESUZJRUQpCiAJCQkgICAgICA/IENFX01BVENIX1JBQ1lfSVNfRElSVFkgOiAwKTsKLQljaGFyIHN5bWNhY2hlW1BBVEhfTUFYXTsKIAogCWRpZmZfc2V0X21uZW1vbmljX3ByZWZpeCgmcmV2cy0+ZGlmZm9wdCwgImkvIiwgIncvIik7CiAKIAlpZiAoZGlmZl91bm1lcmdlZF9zdGFnZSA8IDApCiAJCWRpZmZfdW5tZXJnZWRfc3RhZ2UgPSAyOwogCWVudHJpZXMgPSBhY3RpdmVfbnI7Ci0Jc3ltY2FjaGVbMF0gPSAnXDAnOwogCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKIAkJc3RydWN0IHN0YXQgc3Q7CiAJCXVuc2lnbmVkIGludCBvbGRtb2RlLCBuZXdtb2RlOwpAQCAtMTk4LDExICsxOTYsNiBAQAogICogZGlmZi1pbmRleAogICovCiAKLXN0cnVjdCBvbmV3YXlfdW5wYWNrX2RhdGEgewotCXN0cnVjdCByZXZfaW5mbyAqcmV2czsKLQljaGFyIHN5bWNhY2hlW1BBVEhfTUFYXTsKLX07Ci0KIC8qIEEgZmlsZSBlbnRyeSB3ZW50IGF3YXkgb3IgYXBwZWFyZWQgKi8KIHN0YXRpYyB2b2lkIGRpZmZfaW5kZXhfc2hvd19maWxlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKIAkJCQkgY29uc3QgY2hhciAqcHJlZml4LApAQCAtMjE2LDEzICsyMDksMTIgQEAKIHN0YXRpYyBpbnQgZ2V0X3N0YXRfZGF0YShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAogCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipzaGExcCwKIAkJCSB1bnNpZ25lZCBpbnQgKm1vZGVwLAotCQkJIGludCBjYWNoZWQsIGludCBtYXRjaF9taXNzaW5nLAotCQkJIHN0cnVjdCBvbmV3YXlfdW5wYWNrX2RhdGEgKmNiZGF0YSkKKwkJCSBpbnQgY2FjaGVkLCBpbnQgbWF0Y2hfbWlzc2luZykKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gY2UtPnNoYTE7CiAJdW5zaWduZWQgaW50IG1vZGUgPSBjZS0+Y2VfbW9kZTsKIAotCWlmICghY2FjaGVkKSB7CisJaWYgKCFjYWNoZWQgJiYgIWNlX3VwdG9kYXRlKGNlKSkgewogCQlpbnQgY2hhbmdlZDsKIAkJc3RydWN0IHN0YXQgc3Q7CiAJCWNoYW5nZWQgPSBjaGVja19yZW1vdmVkKGNlLCAmc3QpOwpAQCAtMjQ4LDI1ICsyNDAsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2hvd19uZXdfZmlsZShzdHJ1Y3Qgb25ld2F5X3VucGFja19kYXRhICpjYmRhdGEsCitzdGF0aWMgdm9pZCBzaG93X25ld19maWxlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKIAkJCSAgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXcsCiAJCQkgIGludCBjYWNoZWQsIGludCBtYXRjaF9taXNzaW5nKQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7CiAJdW5zaWduZWQgaW50IG1vZGU7Ci0Jc3RydWN0IHJldl9pbmZvICpyZXZzID0gY2JkYXRhLT5yZXZzOwogCiAJLyoKIAkgKiBOZXcgZmlsZSBpbiB0aGUgaW5kZXg6IGl0IG1pZ2h0IGFjdHVhbGx5IGJlIGRpZmZlcmVudCBpbgogCSAqIHRoZSB3b3JraW5nIGNvcHkuCiAJICovCi0JaWYgKGdldF9zdGF0X2RhdGEobmV3LCAmc2hhMSwgJm1vZGUsIGNhY2hlZCwgbWF0Y2hfbWlzc2luZywgY2JkYXRhKSA8IDApCisJaWYgKGdldF9zdGF0X2RhdGEobmV3LCAmc2hhMSwgJm1vZGUsIGNhY2hlZCwgbWF0Y2hfbWlzc2luZykgPCAwKQogCQlyZXR1cm47CiAKIAlkaWZmX2luZGV4X3Nob3dfZmlsZShyZXZzLCAiKyIsIG5ldywgc2hhMSwgbW9kZSk7CiB9CiAKLXN0YXRpYyBpbnQgc2hvd19tb2RpZmllZChzdHJ1Y3Qgb25ld2F5X3VucGFja19kYXRhICpjYmRhdGEsCitzdGF0aWMgaW50IHNob3dfbW9kaWZpZWQoc3RydWN0IHJldl9pbmZvICpyZXZzLAogCQkJIHN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkLAogCQkJIHN0cnVjdCBjYWNoZV9lbnRyeSAqbmV3LAogCQkJIGludCByZXBvcnRfbWlzc2luZywKQEAgLTI3NCw5ICsyNjUsOCBAQAogewogCXVuc2lnbmVkIGludCBtb2RlLCBvbGRtb2RlOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7Ci0Jc3RydWN0IHJldl9pbmZvICpyZXZzID0gY2JkYXRhLT5yZXZzOwogCi0JaWYgKGdldF9zdGF0X2RhdGEobmV3LCAmc2hhMSwgJm1vZGUsIGNhY2hlZCwgbWF0Y2hfbWlzc2luZywgY2JkYXRhKSA8IDApIHsKKwlpZiAoZ2V0X3N0YXRfZGF0YShuZXcsICZzaGExLCAmbW9kZSwgY2FjaGVkLCBtYXRjaF9taXNzaW5nKSA8IDApIHsKIAkJaWYgKHJlcG9ydF9taXNzaW5nKQogCQkJZGlmZl9pbmRleF9zaG93X2ZpbGUocmV2cywgIi0iLCBvbGQsCiAJCQkJCSAgICAgb2xkLT5zaGExLCBvbGQtPmNlX21vZGUpOwpAQCAtMzQ0LDggKzMzNCw3IEBACiAJc3RydWN0IGNhY2hlX2VudHJ5ICppZHgsCiAJc3RydWN0IGNhY2hlX2VudHJ5ICp0cmVlKQogewotCXN0cnVjdCBvbmV3YXlfdW5wYWNrX2RhdGEgKmNiZGF0YSA9IG8tPnVucGFja19kYXRhOwotCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IGNiZGF0YS0+cmV2czsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSBvLT51bnBhY2tfZGF0YTsKIAlpbnQgbWF0Y2hfbWlzc2luZywgY2FjaGVkOwogCiAJLyoKQEAgLTM2OCw3ICszNTcsNyBAQAogCSAqIFNvbWV0aGluZyBhZGRlZCB0byB0aGUgdHJlZT8KIAkgKi8KIAlpZiAoIXRyZWUpIHsKLQkJc2hvd19uZXdfZmlsZShjYmRhdGEsIGlkeCwgY2FjaGVkLCBtYXRjaF9taXNzaW5nKTsKKwkJc2hvd19uZXdfZmlsZShyZXZzLCBpZHgsIGNhY2hlZCwgbWF0Y2hfbWlzc2luZyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM4MSw3ICszNzAsNyBAQAogCX0KIAogCS8qIFNob3cgZGlmZmVyZW5jZSBiZXR3ZWVuIG9sZCBhbmQgbmV3ICovCi0Jc2hvd19tb2RpZmllZChjYmRhdGEsIHRyZWUsIGlkeCwgMSwgY2FjaGVkLCBtYXRjaF9taXNzaW5nKTsKKwlzaG93X21vZGlmaWVkKHJldnMsIHRyZWUsIGlkeCwgMSwgY2FjaGVkLCBtYXRjaF9taXNzaW5nKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNraXBfc2FtZV9uYW1lKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKQEAgLTQxOCw4ICs0MDcsNyBAQAogewogCXN0cnVjdCBjYWNoZV9lbnRyeSAqaWR4ID0gc3JjWzBdOwogCXN0cnVjdCBjYWNoZV9lbnRyeSAqdHJlZSA9IHNyY1sxXTsKLQlzdHJ1Y3Qgb25ld2F5X3VucGFja19kYXRhICpjYmRhdGEgPSBvLT51bnBhY2tfZGF0YTsKLQlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSBjYmRhdGEtPnJldnM7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gby0+dW5wYWNrX2RhdGE7CiAKIAlpZiAoaWR4ICYmIGNlX3N0YWdlKGlkeCkpCiAJCXNraXBfc2FtZV9uYW1lKGlkeCwgbyk7CkBAIC00NDYsNyArNDM0LDYgQEAKIAljb25zdCBjaGFyICp0cmVlX25hbWU7CiAJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CiAJc3RydWN0IHRyZWVfZGVzYyB0OwotCXN0cnVjdCBvbmV3YXlfdW5wYWNrX2RhdGEgdW5wYWNrX2NiOwogCiAJbWFya19tZXJnZV9lbnRyaWVzKCk7CiAKQEAgLTQ1NiwxNCArNDQzLDE0IEBACiAJaWYgKCF0cmVlKQogCQlyZXR1cm4gZXJyb3IoImJhZCB0cmVlIG9iamVjdCAlcyIsIHRyZWVfbmFtZSk7CiAKLQl1bnBhY2tfY2IucmV2cyA9IHJldnM7Ci0JdW5wYWNrX2NiLnN5bWNhY2hlWzBdID0gJ1wwJzsKIAltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CiAJb3B0cy5oZWFkX2lkeCA9IDE7CiAJb3B0cy5pbmRleF9vbmx5ID0gY2FjaGVkOworCW9wdHMuZGlmZl9pbmRleF9jYWNoZWQgPSAoY2FjaGVkICYmCisJCQkJICAhRElGRl9PUFRfVFNUKCZyZXZzLT5kaWZmb3B0LCBGSU5EX0NPUElFU19IQVJERVIpKTsKIAlvcHRzLm1lcmdlID0gMTsKIAlvcHRzLmZuID0gb25ld2F5X2RpZmY7Ci0Jb3B0cy51bnBhY2tfZGF0YSA9ICZ1bnBhY2tfY2I7CisJb3B0cy51bnBhY2tfZGF0YSA9IHJldnM7CiAJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OwogCW9wdHMuZHN0X2luZGV4ID0gTlVMTDsKIApAQCAtNDg2LDcgKzQ3Myw2IEBACiAJc3RydWN0IGNhY2hlX2VudHJ5ICpsYXN0ID0gTlVMTDsKIAlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKIAlzdHJ1Y3QgdHJlZV9kZXNjIHQ7Ci0Jc3RydWN0IG9uZXdheV91bnBhY2tfZGF0YSB1bnBhY2tfY2I7CiAKIAkvKgogCSAqIFRoaXMgaXMgdXNlZCBieSBnaXQtYmxhbWUgdG8gcnVuIGRpZmYtY2FjaGUgaW50ZXJuYWxseTsKQEAgLTUxNSwxNCArNTAxLDEzIEBACiAJaWYgKCF0cmVlKQogCQlkaWUoImJhZCB0cmVlIG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KHRyZWVfc2hhMSkpOwogCi0JdW5wYWNrX2NiLnJldnMgPSAmcmV2czsKLQl1bnBhY2tfY2Iuc3ltY2FjaGVbMF0gPSAnXDAnOwogCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKIAlvcHRzLmhlYWRfaWR4ID0gMTsKIAlvcHRzLmluZGV4X29ubHkgPSAxOworCW9wdHMuZGlmZl9pbmRleF9jYWNoZWQgPSAhRElGRl9PUFRfVFNUKG9wdCwgRklORF9DT1BJRVNfSEFSREVSKTsKIAlvcHRzLm1lcmdlID0gMTsKIAlvcHRzLmZuID0gb25ld2F5X2RpZmY7Ci0Jb3B0cy51bnBhY2tfZGF0YSA9ICZ1bnBhY2tfY2I7CisJb3B0cy51bnBhY2tfZGF0YSA9ICZyZXZzOwogCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKIAlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CiAKQEAgLTUzMSwzICs1MTYsMTggQEAKIAkJZXhpdCgxMjgpOwogCXJldHVybiAwOwogfQorCitpbnQgaW5kZXhfZGlmZmVyc19mcm9tKGNvbnN0IGNoYXIgKmRlZiwgaW50IGRpZmZfZmxhZ3MpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKworCWluaXRfcmV2aXNpb25zKCZyZXYsIE5VTEwpOworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCBkZWYpOworCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIFFVSUVUKTsKKwlESUZGX09QVF9TRVQoJnJldi5kaWZmb3B0LCBFWElUX1dJVEhfU1RBVFVTKTsKKwlyZXYuZGlmZm9wdC5mbGFncyB8PSBkaWZmX2ZsYWdzOworCXJ1bl9kaWZmX2luZGV4KCZyZXYsIDEpOworCWlmIChyZXYucGVuZGluZy5hbGxvYykKKwkJZnJlZShyZXYucGVuZGluZy5vYmplY3RzKTsKKwlyZXR1cm4gKERJRkZfT1BUX1RTVCgmcmV2LmRpZmZvcHQsIEhBU19DSEFOR0VTKSAhPSAwKTsKK30KZGlmZiAtLWdpdCBhL2RpZmYtbm8taW5kZXguYyBiL2RpZmYtbm8taW5kZXguYwppbmRleCBhM2U0N2E3Li40ZWJjMWRiIDEwMDY0NAotLS0gYS9kaWZmLW5vLWluZGV4LmMKKysrIGIvZGlmZi1uby1pbmRleC5jCkBAIC0zOCw5ICszOCwxMyBAQAogCiAJaWYgKCFwYXRoIHx8ICFzdHJjbXAocGF0aCwgIi9kZXYvbnVsbCIpKQogCQkqbW9kZSA9IDA7CisjaWZkZWYgX1dJTjMyCisJZWxzZSBpZiAoIXN0cmNhc2VjbXAocGF0aCwgIm51bCIpKQorCQkqbW9kZSA9IDA7CisjZW5kaWYKIAllbHNlIGlmICghc3RyY21wKHBhdGgsICItIikpCiAJCSptb2RlID0gY3JlYXRlX2NlX21vZGUoMDY2Nik7Ci0JZWxzZSBpZiAoc3RhdChwYXRoLCAmc3QpKQorCWVsc2UgaWYgKGxzdGF0KHBhdGgsICZzdCkpCiAJCXJldHVybiBlcnJvcigiQ291bGQgbm90IGFjY2VzcyAnJXMnIiwgcGF0aCk7CiAJZWxzZQogCQkqbW9kZSA9IHN0LnN0X21vZGU7CkBAIC0yMjksNyArMjMzLDcgQEAKIAlpZiAocHJlZml4KSB7CiAJCWludCBsZW4gPSBzdHJsZW4ocHJlZml4KTsKIAotCQlyZXZzLT5kaWZmb3B0LnBhdGhzID0geGNhbGxvYygyLCBzaXplb2YoY2hhciopKTsKKwkJcmV2cy0+ZGlmZm9wdC5wYXRocyA9IHhjYWxsb2MoMiwgc2l6ZW9mKGNoYXIgKikpOwogCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCQljb25zdCBjaGFyICpwID0gYXJndlthcmdjIC0gMiArIGldOwogCQkJLyoKZGlmZiAtLWdpdCBhL2RpZmYuYyBiL2RpZmYuYwppbmRleCAzODdkMTlmLi5jZDM1ZTBjIDEwMDY0NAotLS0gYS9kaWZmLmMKKysrIGIvZGlmZi5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKICNpbmNsdWRlICJ1dGY4LmgiCiAjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgogCiAjaWZkZWYgTk9fRkFTVF9XT1JLSU5HX0RJUkVDVE9SWQogI2RlZmluZSBGQVNUX1dPUktJTkdfRElSRUNUT1JZIDAKQEAgLTIzLDE5ICsyNCwyMCBAQAogc3RhdGljIGludCBkaWZmX3JlbmFtZV9saW1pdF9kZWZhdWx0ID0gMjAwOwogc3RhdGljIGludCBkaWZmX3N1cHByZXNzX2JsYW5rX2VtcHR5OwogaW50IGRpZmZfdXNlX2NvbG9yX2RlZmF1bHQgPSAtMTsKK3N0YXRpYyBjb25zdCBjaGFyICpkaWZmX3dvcmRfcmVnZXhfY2ZnOwogc3RhdGljIGNvbnN0IGNoYXIgKmV4dGVybmFsX2RpZmZfY21kX2NmZzsKIGludCBkaWZmX2F1dG9fcmVmcmVzaF9pbmRleCA9IDE7CiBzdGF0aWMgaW50IGRpZmZfbW5lbW9uaWNfcHJlZml4OwogCiBzdGF0aWMgY2hhciBkaWZmX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7Ci0JIlwwMzNbbSIsCS8qIHJlc2V0ICovCi0JIiIsCQkvKiBQTEFJTiAobm9ybWFsKSAqLwotCSJcMDMzWzFtIiwJLyogTUVUQUlORk8gKGJvbGQpICovCi0JIlwwMzNbMzZtIiwJLyogRlJBR0lORk8gKGN5YW4pICovCi0JIlwwMzNbMzFtIiwJLyogT0xEIChyZWQpICovCi0JIlwwMzNbMzJtIiwJLyogTkVXIChncmVlbikgKi8KLQkiXDAzM1szM20iLAkvKiBDT01NSVQgKHllbGxvdykgKi8KLQkiXDAzM1s0MW0iLAkvKiBXSElURVNQQUNFIChyZWQgYmFja2dyb3VuZCkgKi8KKwlHSVRfQ09MT1JfUkVTRVQsCisJR0lUX0NPTE9SX05PUk1BTCwJLyogUExBSU4gKi8KKwlHSVRfQ09MT1JfQk9MRCwJCS8qIE1FVEFJTkZPICovCisJR0lUX0NPTE9SX0NZQU4sCQkvKiBGUkFHSU5GTyAqLworCUdJVF9DT0xPUl9SRUQsCQkvKiBPTEQgKi8KKwlHSVRfQ09MT1JfR1JFRU4sCS8qIE5FVyAqLworCUdJVF9DT0xPUl9ZRUxMT1csCS8qIENPTU1JVCAqLworCUdJVF9DT0xPUl9CR19SRUQsCS8qIFdISVRFU1BBQ0UgKi8KIH07CiAKIHN0YXRpYyB2b2lkIGRpZmZfZmlsZXNwZWNfbG9hZF9kcml2ZXIoc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSk7CkBAIC02MCw2ICs2MiwxNSBAQAogCWRpZSgiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIiwgdmFyKTsKIH0KIAorc3RhdGljIGludCBnaXRfY29uZmlnX3JlbmFtZShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiBESUZGX0RFVEVDVF9SRU5BTUU7CisJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAiY29waWVzIikgfHwgIXN0cmNhc2VjbXAodmFsdWUsICJjb3B5IikpCisJCXJldHVybiAgRElGRl9ERVRFQ1RfQ09QWTsKKwlyZXR1cm4gZ2l0X2NvbmZpZ19ib29sKHZhcix2YWx1ZSkgPyBESUZGX0RFVEVDVF9SRU5BTUUgOiAwOworfQorCiAvKgogICogVGhlc2UgYXJlIHRvIGdpdmUgVUkgbGF5ZXIgZGVmYXVsdHMuCiAgKiBUaGUgY29yZS1sZXZlbCBjb21tYW5kcyBzdWNoIGFzIGdpdC1kaWZmLWZpbGVzIHNob3VsZApAQCAtNzMsMTMgKzg0LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghc3RyY21wKHZhciwgImRpZmYucmVuYW1lcyIpKSB7Ci0JCWlmICghdmFsdWUpCi0JCQlkaWZmX2RldGVjdF9yZW5hbWVfZGVmYXVsdCA9IERJRkZfREVURUNUX1JFTkFNRTsKLQkJZWxzZSBpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJjb3BpZXMiKSB8fAotCQkJICFzdHJjYXNlY21wKHZhbHVlLCAiY29weSIpKQotCQkJZGlmZl9kZXRlY3RfcmVuYW1lX2RlZmF1bHQgPSBESUZGX0RFVEVDVF9DT1BZOwotCQllbHNlIGlmIChnaXRfY29uZmlnX2Jvb2wodmFyLHZhbHVlKSkKLQkJCWRpZmZfZGV0ZWN0X3JlbmFtZV9kZWZhdWx0ID0gRElGRl9ERVRFQ1RfUkVOQU1FOworCQlkaWZmX2RldGVjdF9yZW5hbWVfZGVmYXVsdCA9IGdpdF9jb25maWdfcmVuYW1lKHZhciwgdmFsdWUpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5hdXRvcmVmcmVzaGluZGV4IikpIHsKQEAgLTkyLDYgKzk3LDggQEAKIAl9CiAJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5leHRlcm5hbCIpKQogCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmV4dGVybmFsX2RpZmZfY21kX2NmZywgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi53b3JkcmVnZXgiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZkaWZmX3dvcmRfcmVnZXhfY2ZnLCB2YXIsIHZhbHVlKTsKIAogCXJldHVybiBnaXRfZGlmZl9iYXNpY19jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQpAQCAtMTY3LDYgKzE3NCwzMyBAQAogCWNoYXIgdG1wX3BhdGhbUEFUSF9NQVhdOwogfSBkaWZmX3RlbXBbMl07CiAKK3N0YXRpYyBzdHJ1Y3QgZGlmZl90ZW1wZmlsZSAqY2xhaW1fZGlmZl90ZW1wZmlsZSh2b2lkKSB7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlmZl90ZW1wKTsgaSsrKQorCQlpZiAoIWRpZmZfdGVtcFtpXS5uYW1lKQorCQkJcmV0dXJuIGRpZmZfdGVtcCArIGk7CisJZGllKCJCVUc6IGRpZmYgaXMgZmFpbGluZyB0byBjbGVhbiB1cCBpdHMgdGVtcGZpbGVzIik7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX3RlbXBmaWxlX2luc3RhbGxlZDsKKworc3RhdGljIHZvaWQgcmVtb3ZlX3RlbXBmaWxlKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlmZl90ZW1wKTsgaSsrKSB7CisJCWlmIChkaWZmX3RlbXBbaV0ubmFtZSA9PSBkaWZmX3RlbXBbaV0udG1wX3BhdGgpCisJCQl1bmxpbmtfb3Jfd2FybihkaWZmX3RlbXBbaV0ubmFtZSk7CisJCWRpZmZfdGVtcFtpXS5uYW1lID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV90ZW1wZmlsZV9vbl9zaWduYWwoaW50IHNpZ25vKQoreworCXJlbW92ZV90ZW1wZmlsZSgpOworCXNpZ2NoYWluX3BvcChzaWdubyk7CisJcmFpc2Uoc2lnbm8pOworfQorCiBzdGF0aWMgaW50IGNvdW50X2xpbmVzKGNvbnN0IGNoYXIgKmRhdGEsIGludCBzaXplKQogewogCWludCBjb3VudCwgY2gsIGNvbXBsZXRlbHlfZW1wdHkgPSAxLCBubF9qdXN0X3NlZW4gPSAwOwpAQCAtMzIxLDgyICszNTUsMTM4IEBACiBzdHJ1Y3QgZGlmZl93b3Jkc19idWZmZXIgewogCW1tZmlsZV90IHRleHQ7CiAJbG9uZyBhbGxvYzsKLQlsb25nIGN1cnJlbnQ7IC8qIG91dHB1dCBwb2ludGVyICovCi0JaW50IHN1cHByZXNzZWRfbmV3bGluZTsKKwlzdHJ1Y3QgZGlmZl93b3Jkc19vcmlnIHsKKwkJY29uc3QgY2hhciAqYmVnaW4sICplbmQ7CisJfSAqb3JpZzsKKwlpbnQgb3JpZ19uciwgb3JpZ19hbGxvYzsKIH07CiAKIHN0YXRpYyB2b2lkIGRpZmZfd29yZHNfYXBwZW5kKGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQlzdHJ1Y3QgZGlmZl93b3Jkc19idWZmZXIgKmJ1ZmZlcikKIHsKLQlpZiAoYnVmZmVyLT50ZXh0LnNpemUgKyBsZW4gPiBidWZmZXItPmFsbG9jKSB7Ci0JCWJ1ZmZlci0+YWxsb2MgPSAoYnVmZmVyLT50ZXh0LnNpemUgKyBsZW4pICogMyAvIDI7Ci0JCWJ1ZmZlci0+dGV4dC5wdHIgPSB4cmVhbGxvYyhidWZmZXItPnRleHQucHRyLCBidWZmZXItPmFsbG9jKTsKLQl9CisJQUxMT0NfR1JPVyhidWZmZXItPnRleHQucHRyLCBidWZmZXItPnRleHQuc2l6ZSArIGxlbiwgYnVmZmVyLT5hbGxvYyk7CiAJbGluZSsrOwogCWxlbi0tOwogCW1lbWNweShidWZmZXItPnRleHQucHRyICsgYnVmZmVyLT50ZXh0LnNpemUsIGxpbmUsIGxlbik7CiAJYnVmZmVyLT50ZXh0LnNpemUgKz0gbGVuOworCWJ1ZmZlci0+dGV4dC5wdHJbYnVmZmVyLT50ZXh0LnNpemVdID0gJ1wwJzsKIH0KIAogc3RydWN0IGRpZmZfd29yZHNfZGF0YSB7CiAJc3RydWN0IGRpZmZfd29yZHNfYnVmZmVyIG1pbnVzLCBwbHVzOworCWNvbnN0IGNoYXIgKmN1cnJlbnRfcGx1czsKIAlGSUxFICpmaWxlOworCXJlZ2V4X3QgKndvcmRfcmVnZXg7CiB9OwogCi1zdGF0aWMgdm9pZCBwcmludF93b3JkKEZJTEUgKmZpbGUsIHN0cnVjdCBkaWZmX3dvcmRzX2J1ZmZlciAqYnVmZmVyLCBpbnQgbGVuLCBpbnQgY29sb3IsCi0JCWludCBzdXBwcmVzc19uZXdsaW5lKQotewotCWNvbnN0IGNoYXIgKnB0cjsKLQlpbnQgZW9sID0gMDsKLQotCWlmIChsZW4gPT0gMCkKLQkJcmV0dXJuOwotCi0JcHRyICA9IGJ1ZmZlci0+dGV4dC5wdHIgKyBidWZmZXItPmN1cnJlbnQ7Ci0JYnVmZmVyLT5jdXJyZW50ICs9IGxlbjsKLQotCWlmIChwdHJbbGVuIC0gMV0gPT0gJ1xuJykgewotCQllb2wgPSAxOwotCQlsZW4tLTsKLQl9Ci0KLQlmcHV0cyhkaWZmX2dldF9jb2xvcigxLCBjb2xvciksIGZpbGUpOwotCWZ3cml0ZShwdHIsIGxlbiwgMSwgZmlsZSk7Ci0JZnB1dHMoZGlmZl9nZXRfY29sb3IoMSwgRElGRl9SRVNFVCksIGZpbGUpOwotCi0JaWYgKGVvbCkgewotCQlpZiAoc3VwcHJlc3NfbmV3bGluZSkKLQkJCWJ1ZmZlci0+c3VwcHJlc3NlZF9uZXdsaW5lID0gMTsKLQkJZWxzZQotCQkJcHV0YygnXG4nLCBmaWxlKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIGZuX291dF9kaWZmX3dvcmRzX2F1eCh2b2lkICpwcml2LCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKIAlzdHJ1Y3QgZGlmZl93b3Jkc19kYXRhICpkaWZmX3dvcmRzID0gcHJpdjsKKwlpbnQgbWludXNfZmlyc3QsIG1pbnVzX2xlbiwgcGx1c19maXJzdCwgcGx1c19sZW47CisJY29uc3QgY2hhciAqbWludXNfYmVnaW4sICptaW51c19lbmQsICpwbHVzX2JlZ2luLCAqcGx1c19lbmQ7CiAKLQlpZiAoZGlmZl93b3Jkcy0+bWludXMuc3VwcHJlc3NlZF9uZXdsaW5lKSB7Ci0JCWlmIChsaW5lWzBdICE9ICcrJykKLQkJCXB1dGMoJ1xuJywgZGlmZl93b3Jkcy0+ZmlsZSk7Ci0JCWRpZmZfd29yZHMtPm1pbnVzLnN1cHByZXNzZWRfbmV3bGluZSA9IDA7CisJaWYgKGxpbmVbMF0gIT0gJ0AnIHx8IHBhcnNlX2h1bmtfaGVhZGVyKGxpbmUsIGxlbiwKKwkJCSZtaW51c19maXJzdCwgJm1pbnVzX2xlbiwgJnBsdXNfZmlyc3QsICZwbHVzX2xlbikpCisJCXJldHVybjsKKworCS8qIFBPU0lYIHJlcXVpcmVzIHRoYXQgZmlyc3QgYmUgZGVjcmVtZW50ZWQgYnkgb25lIGlmIGxlbiA9PSAwLi4uICovCisJaWYgKG1pbnVzX2xlbikgeworCQltaW51c19iZWdpbiA9IGRpZmZfd29yZHMtPm1pbnVzLm9yaWdbbWludXNfZmlyc3RdLmJlZ2luOworCQltaW51c19lbmQgPQorCQkJZGlmZl93b3Jkcy0+bWludXMub3JpZ1ttaW51c19maXJzdCArIG1pbnVzX2xlbiAtIDFdLmVuZDsKKwl9IGVsc2UKKwkJbWludXNfYmVnaW4gPSBtaW51c19lbmQgPQorCQkJZGlmZl93b3Jkcy0+bWludXMub3JpZ1ttaW51c19maXJzdF0uZW5kOworCisJaWYgKHBsdXNfbGVuKSB7CisJCXBsdXNfYmVnaW4gPSBkaWZmX3dvcmRzLT5wbHVzLm9yaWdbcGx1c19maXJzdF0uYmVnaW47CisJCXBsdXNfZW5kID0gZGlmZl93b3Jkcy0+cGx1cy5vcmlnW3BsdXNfZmlyc3QgKyBwbHVzX2xlbiAtIDFdLmVuZDsKKwl9IGVsc2UKKwkJcGx1c19iZWdpbiA9IHBsdXNfZW5kID0gZGlmZl93b3Jkcy0+cGx1cy5vcmlnW3BsdXNfZmlyc3RdLmVuZDsKKworCWlmIChkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgIT0gcGx1c19iZWdpbikKKwkJZndyaXRlKGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cywKKwkJCQlwbHVzX2JlZ2luIC0gZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzLCAxLAorCQkJCWRpZmZfd29yZHMtPmZpbGUpOworCWlmIChtaW51c19iZWdpbiAhPSBtaW51c19lbmQpCisJCWNvbG9yX2Z3cml0ZV9saW5lcyhkaWZmX3dvcmRzLT5maWxlLAorCQkJCWRpZmZfZ2V0X2NvbG9yKDEsIERJRkZfRklMRV9PTEQpLAorCQkJCW1pbnVzX2VuZCAtIG1pbnVzX2JlZ2luLCBtaW51c19iZWdpbik7CisJaWYgKHBsdXNfYmVnaW4gIT0gcGx1c19lbmQpCisJCWNvbG9yX2Z3cml0ZV9saW5lcyhkaWZmX3dvcmRzLT5maWxlLAorCQkJCWRpZmZfZ2V0X2NvbG9yKDEsIERJRkZfRklMRV9ORVcpLAorCQkJCXBsdXNfZW5kIC0gcGx1c19iZWdpbiwgcGx1c19iZWdpbik7CisKKwlkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgPSBwbHVzX2VuZDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzdGFydHMgbG9va2luZyBhdCAqYmVnaW4sIGFuZCByZXR1cm5zIDAgaWZmIGEgd29yZCB3YXMgZm91bmQuICovCitzdGF0aWMgaW50IGZpbmRfd29yZF9ib3VuZGFyaWVzKG1tZmlsZV90ICpidWZmZXIsIHJlZ2V4X3QgKndvcmRfcmVnZXgsCisJCWludCAqYmVnaW4sIGludCAqZW5kKQoreworCWlmICh3b3JkX3JlZ2V4ICYmICpiZWdpbiA8IGJ1ZmZlci0+c2l6ZSkgeworCQlyZWdtYXRjaF90IG1hdGNoWzFdOworCQlpZiAoIXJlZ2V4ZWMod29yZF9yZWdleCwgYnVmZmVyLT5wdHIgKyAqYmVnaW4sIDEsIG1hdGNoLCAwKSkgeworCQkJY2hhciAqcCA9IG1lbWNocihidWZmZXItPnB0ciArICpiZWdpbiArIG1hdGNoWzBdLnJtX3NvLAorCQkJCQknXG4nLCBtYXRjaFswXS5ybV9lbyAtIG1hdGNoWzBdLnJtX3NvKTsKKwkJCSplbmQgPSBwID8gcCAtIGJ1ZmZlci0+cHRyIDogbWF0Y2hbMF0ucm1fZW8gKyAqYmVnaW47CisJCQkqYmVnaW4gKz0gbWF0Y2hbMF0ucm1fc287CisJCQlyZXR1cm4gKmJlZ2luID49ICplbmQ7CisJCX0KKwkJcmV0dXJuIC0xOwogCX0KIAotCWxlbi0tOwotCXN3aXRjaCAobGluZVswXSkgewotCQljYXNlICctJzoKLQkJCXByaW50X3dvcmQoZGlmZl93b3Jkcy0+ZmlsZSwKLQkJCQkgICAmZGlmZl93b3Jkcy0+bWludXMsIGxlbiwgRElGRl9GSUxFX09MRCwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSAnKyc6Ci0JCQlwcmludF93b3JkKGRpZmZfd29yZHMtPmZpbGUsCi0JCQkJICAgJmRpZmZfd29yZHMtPnBsdXMsIGxlbiwgRElGRl9GSUxFX05FVywgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAnICc6Ci0JCQlwcmludF93b3JkKGRpZmZfd29yZHMtPmZpbGUsCi0JCQkJICAgJmRpZmZfd29yZHMtPnBsdXMsIGxlbiwgRElGRl9QTEFJTiwgMCk7Ci0JCQlkaWZmX3dvcmRzLT5taW51cy5jdXJyZW50ICs9IGxlbjsKLQkJCWJyZWFrOworCS8qIGZpbmQgdGhlIG5leHQgd29yZCAqLworCXdoaWxlICgqYmVnaW4gPCBidWZmZXItPnNpemUgJiYgaXNzcGFjZShidWZmZXItPnB0clsqYmVnaW5dKSkKKwkJKCpiZWdpbikrKzsKKwlpZiAoKmJlZ2luID49IGJ1ZmZlci0+c2l6ZSkKKwkJcmV0dXJuIC0xOworCisJLyogZmluZCB0aGUgZW5kIG9mIHRoZSB3b3JkICovCisJKmVuZCA9ICpiZWdpbiArIDE7CisJd2hpbGUgKCplbmQgPCBidWZmZXItPnNpemUgJiYgIWlzc3BhY2UoYnVmZmVyLT5wdHJbKmVuZF0pKQorCQkoKmVuZCkrKzsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzcGxpdHMgdGhlIHdvcmRzIGluIGJ1ZmZlci0+dGV4dCwgc3RvcmVzIHRoZSBsaXN0IHdpdGgKKyAqIG5ld2xpbmUgc2VwYXJhdG9yIGludG8gb3V0LCBhbmQgc2F2ZXMgdGhlIG9mZnNldHMgb2YgdGhlIG9yaWdpbmFsIHdvcmRzCisgKiBpbiBidWZmZXItPm9yaWcuCisgKi8KK3N0YXRpYyB2b2lkIGRpZmZfd29yZHNfZmlsbChzdHJ1Y3QgZGlmZl93b3Jkc19idWZmZXIgKmJ1ZmZlciwgbW1maWxlX3QgKm91dCwKKwkJcmVnZXhfdCAqd29yZF9yZWdleCkKK3sKKwlpbnQgaSwgajsKKwlsb25nIGFsbG9jID0gMDsKKworCW91dC0+c2l6ZSA9IDA7CisJb3V0LT5wdHIgPSBOVUxMOworCisJLyogZmFrZSBhbiBlbXB0eSAiMHRoIiB3b3JkICovCisJQUxMT0NfR1JPVyhidWZmZXItPm9yaWcsIDEsIGJ1ZmZlci0+b3JpZ19hbGxvYyk7CisJYnVmZmVyLT5vcmlnWzBdLmJlZ2luID0gYnVmZmVyLT5vcmlnWzBdLmVuZCA9IGJ1ZmZlci0+dGV4dC5wdHI7CisJYnVmZmVyLT5vcmlnX25yID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBidWZmZXItPnRleHQuc2l6ZTsgaSsrKSB7CisJCWlmIChmaW5kX3dvcmRfYm91bmRhcmllcygmYnVmZmVyLT50ZXh0LCB3b3JkX3JlZ2V4LCAmaSwgJmopKQorCQkJcmV0dXJuOworCisJCS8qIHN0b3JlIG9yaWdpbmFsIGJvdW5kYXJpZXMgKi8KKwkJQUxMT0NfR1JPVyhidWZmZXItPm9yaWcsIGJ1ZmZlci0+b3JpZ19uciArIDEsCisJCQkJYnVmZmVyLT5vcmlnX2FsbG9jKTsKKwkJYnVmZmVyLT5vcmlnW2J1ZmZlci0+b3JpZ19ucl0uYmVnaW4gPSBidWZmZXItPnRleHQucHRyICsgaTsKKwkJYnVmZmVyLT5vcmlnW2J1ZmZlci0+b3JpZ19ucl0uZW5kID0gYnVmZmVyLT50ZXh0LnB0ciArIGo7CisJCWJ1ZmZlci0+b3JpZ19ucisrOworCisJCS8qIHN0b3JlIG9uZSB3b3JkICovCisJCUFMTE9DX0dST1cob3V0LT5wdHIsIG91dC0+c2l6ZSArIGogLSBpICsgMSwgYWxsb2MpOworCQltZW1jcHkob3V0LT5wdHIgKyBvdXQtPnNpemUsIGJ1ZmZlci0+dGV4dC5wdHIgKyBpLCBqIC0gaSk7CisJCW91dC0+cHRyW291dC0+c2l6ZSArIGogLSBpXSA9ICdcbic7CisJCW91dC0+c2l6ZSArPSBqIC0gaSArIDE7CisKKwkJaSA9IGogLSAxOwogCX0KIH0KIApAQCAtNDA3LDM4ICs0OTcsMzYgQEAKIAl4ZGVtaXRjb25mX3QgeGVjZmc7CiAJeGRlbWl0Y2JfdCBlY2I7CiAJbW1maWxlX3QgbWludXMsIHBsdXM7Ci0JaW50IGk7CisKKwkvKiBzcGVjaWFsIGNhc2U6IG9ubHkgcmVtb3ZhbCAqLworCWlmICghZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnNpemUpIHsKKwkJY29sb3JfZndyaXRlX2xpbmVzKGRpZmZfd29yZHMtPmZpbGUsCisJCQlkaWZmX2dldF9jb2xvcigxLCBESUZGX0ZJTEVfT0xEKSwKKwkJCWRpZmZfd29yZHMtPm1pbnVzLnRleHQuc2l6ZSwgZGlmZl93b3Jkcy0+bWludXMudGV4dC5wdHIpOworCQlkaWZmX3dvcmRzLT5taW51cy50ZXh0LnNpemUgPSAwOworCQlyZXR1cm47CisJfQorCisJZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzID0gZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0cjsKIAogCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CiAJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7Ci0JbWludXMuc2l6ZSA9IGRpZmZfd29yZHMtPm1pbnVzLnRleHQuc2l6ZTsKLQltaW51cy5wdHIgPSB4bWFsbG9jKG1pbnVzLnNpemUpOwotCW1lbWNweShtaW51cy5wdHIsIGRpZmZfd29yZHMtPm1pbnVzLnRleHQucHRyLCBtaW51cy5zaXplKTsKLQlmb3IgKGkgPSAwOyBpIDwgbWludXMuc2l6ZTsgaSsrKQotCQlpZiAoaXNzcGFjZShtaW51cy5wdHJbaV0pKQotCQkJbWludXMucHRyW2ldID0gJ1xuJzsKLQlkaWZmX3dvcmRzLT5taW51cy5jdXJyZW50ID0gMDsKLQotCXBsdXMuc2l6ZSA9IGRpZmZfd29yZHMtPnBsdXMudGV4dC5zaXplOwotCXBsdXMucHRyID0geG1hbGxvYyhwbHVzLnNpemUpOwotCW1lbWNweShwbHVzLnB0ciwgZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0ciwgcGx1cy5zaXplKTsKLQlmb3IgKGkgPSAwOyBpIDwgcGx1cy5zaXplOyBpKyspCi0JCWlmIChpc3NwYWNlKHBsdXMucHRyW2ldKSkKLQkJCXBsdXMucHRyW2ldID0gJ1xuJzsKLQlkaWZmX3dvcmRzLT5wbHVzLmN1cnJlbnQgPSAwOwotCisJZGlmZl93b3Jkc19maWxsKCZkaWZmX3dvcmRzLT5taW51cywgJm1pbnVzLCBkaWZmX3dvcmRzLT53b3JkX3JlZ2V4KTsKKwlkaWZmX3dvcmRzX2ZpbGwoJmRpZmZfd29yZHMtPnBsdXMsICZwbHVzLCBkaWZmX3dvcmRzLT53b3JkX3JlZ2V4KTsKIAl4cHAuZmxhZ3MgPSBYREZfTkVFRF9NSU5JTUFMOwotCXhlY2ZnLmN0eGxlbiA9IGRpZmZfd29yZHMtPm1pbnVzLmFsbG9jICsgZGlmZl93b3Jkcy0+cGx1cy5hbGxvYzsKKwkvKiBhcyBvbmx5IHRoZSBodW5rIGhlYWRlciB3aWxsIGJlIHBhcnNlZCwgd2UgbmVlZCBhIDAtY29udGV4dCAqLworCXhlY2ZnLmN0eGxlbiA9IDA7CiAJeGRpX2RpZmZfb3V0ZigmbWludXMsICZwbHVzLCBmbl9vdXRfZGlmZl93b3Jkc19hdXgsIGRpZmZfd29yZHMsCiAJCSAgICAgICZ4cHAsICZ4ZWNmZywgJmVjYik7CiAJZnJlZShtaW51cy5wdHIpOwogCWZyZWUocGx1cy5wdHIpOworCWlmIChkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgIT0gZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0ciArCisJCQlkaWZmX3dvcmRzLT5wbHVzLnRleHQuc2l6ZSkKKwkJZndyaXRlKGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cywKKwkJCWRpZmZfd29yZHMtPnBsdXMudGV4dC5wdHIgKyBkaWZmX3dvcmRzLT5wbHVzLnRleHQuc2l6ZQorCQkJLSBkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMsIDEsCisJCQlkaWZmX3dvcmRzLT5maWxlKTsKIAlkaWZmX3dvcmRzLT5taW51cy50ZXh0LnNpemUgPSBkaWZmX3dvcmRzLT5wbHVzLnRleHQuc2l6ZSA9IDA7Ci0KLQlpZiAoZGlmZl93b3Jkcy0+bWludXMuc3VwcHJlc3NlZF9uZXdsaW5lKSB7Ci0JCXB1dGMoJ1xuJywgZGlmZl93b3Jkcy0+ZmlsZSk7Ci0JCWRpZmZfd29yZHMtPm1pbnVzLnN1cHByZXNzZWRfbmV3bGluZSA9IDA7Ci0JfQogfQogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgKCpzYW5lX3RydW5jYXRlX2ZuKShjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbik7CkBAIC00NjIsNyArNTUwLDEwIEBACiAJCQlkaWZmX3dvcmRzX3Nob3coZWNiZGF0YS0+ZGlmZl93b3Jkcyk7CiAKIAkJZnJlZSAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+bWludXMudGV4dC5wdHIpOworCQlmcmVlIChlY2JkYXRhLT5kaWZmX3dvcmRzLT5taW51cy5vcmlnKTsKIAkJZnJlZSAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0cik7CisJCWZyZWUgKGVjYmRhdGEtPmRpZmZfd29yZHMtPnBsdXMub3JpZyk7CisJCWZyZWUoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+d29yZF9yZWdleCk7CiAJCWZyZWUoZWNiZGF0YS0+ZGlmZl93b3Jkcyk7CiAJCWVjYmRhdGEtPmRpZmZfd29yZHMgPSBOVUxMOwogCX0KQEAgLTc0OCwxMCArODM5LDkgQEAKIH0KIAogc3RhdGljIHZvaWQgc2hvd19uYW1lKEZJTEUgKmZpbGUsCi0JCSAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKLQkJICAgICAgY29uc3QgY2hhciAqcmVzZXQsIGNvbnN0IGNoYXIgKnNldCkKKwkJICAgICAgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQogewotCWZwcmludGYoZmlsZSwgIiAlcyVzJS0qcyVzIHwiLCBzZXQsIHByZWZpeCwgbGVuLCBuYW1lLCByZXNldCk7CisJZnByaW50ZihmaWxlLCAiICVzJS0qcyB8IiwgcHJlZml4LCBsZW4sIG5hbWUpOwogfQogCiBzdGF0aWMgdm9pZCBzaG93X2dyYXBoKEZJTEUgKmZpbGUsIGNoYXIgY2gsIGludCBjbnQsIGNvbnN0IGNoYXIgKnNldCwgY29uc3QgY2hhciAqcmVzZXQpCkBAIC03ODUsOSArODc1LDkgQEAKIAlmaWxlLT5wcmludF9uYW1lID0gcG5hbWU7CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfc3RhdHMoc3RydWN0IGRpZmZzdGF0X3QqIGRhdGEsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCitzdGF0aWMgdm9pZCBzaG93X3N0YXRzKHN0cnVjdCBkaWZmc3RhdF90ICpkYXRhLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQogewotCWludCBpLCBsZW4sIGFkZCwgZGVsLCB0b3RhbCwgYWRkcyA9IDAsIGRlbHMgPSAwOworCWludCBpLCBsZW4sIGFkZCwgZGVsLCBhZGRzID0gMCwgZGVscyA9IDA7CiAJaW50IG1heF9jaGFuZ2UgPSAwLCBtYXhfbGVuID0gMDsKIAlpbnQgdG90YWxfZmlsZXMgPSBkYXRhLT5ucjsKIAlpbnQgd2lkdGgsIG5hbWVfd2lkdGg7CkBAIC04NjUsNyArOTU1LDcgQEAKIAkJfQogCiAJCWlmIChkYXRhLT5maWxlc1tpXS0+aXNfYmluYXJ5KSB7Ci0JCQlzaG93X25hbWUob3B0aW9ucy0+ZmlsZSwgcHJlZml4LCBuYW1lLCBsZW4sIHJlc2V0LCBzZXQpOworCQkJc2hvd19uYW1lKG9wdGlvbnMtPmZpbGUsIHByZWZpeCwgbmFtZSwgbGVuKTsKIAkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiAgQmluICIpOwogCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiJXMlZCVzIiwgZGVsX2MsIGRlbGV0ZWQsIHJlc2V0KTsKIAkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiAtPiAiKTsKQEAgLTg3NSw3ICs5NjUsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAkJZWxzZSBpZiAoZGF0YS0+ZmlsZXNbaV0tPmlzX3VubWVyZ2VkKSB7Ci0JCQlzaG93X25hbWUob3B0aW9ucy0+ZmlsZSwgcHJlZml4LCBuYW1lLCBsZW4sIHJlc2V0LCBzZXQpOworCQkJc2hvd19uYW1lKG9wdGlvbnMtPmZpbGUsIHByZWZpeCwgbmFtZSwgbGVuKTsKIAkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiAgVW5tZXJnZWRcbiIpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTg5MCwxNiArOTgwLDE0IEBACiAJCSAqLwogCQlhZGQgPSBhZGRlZDsKIAkJZGVsID0gZGVsZXRlZDsKLQkJdG90YWwgPSBhZGQgKyBkZWw7CiAJCWFkZHMgKz0gYWRkOwogCQlkZWxzICs9IGRlbDsKIAogCQlpZiAod2lkdGggPD0gbWF4X2NoYW5nZSkgewogCQkJYWRkID0gc2NhbGVfbGluZWFyKGFkZCwgd2lkdGgsIG1heF9jaGFuZ2UpOwogCQkJZGVsID0gc2NhbGVfbGluZWFyKGRlbCwgd2lkdGgsIG1heF9jaGFuZ2UpOwotCQkJdG90YWwgPSBhZGQgKyBkZWw7CiAJCX0KLQkJc2hvd19uYW1lKG9wdGlvbnMtPmZpbGUsIHByZWZpeCwgbmFtZSwgbGVuLCByZXNldCwgc2V0KTsKKwkJc2hvd19uYW1lKG9wdGlvbnMtPmZpbGUsIHByZWZpeCwgbmFtZSwgbGVuKTsKIAkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiJTVkJXMiLCBhZGRlZCArIGRlbGV0ZWQsCiAJCQkJYWRkZWQgKyBkZWxldGVkID8gIiAiIDogIiIpOwogCQlzaG93X2dyYXBoKG9wdGlvbnMtPmZpbGUsICcrJywgYWRkLCBhZGRfYywgcmVzZXQpOwpAQCAtOTA3LDggKzk5NSw4IEBACiAJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIlxuIik7CiAJfQogCWZwcmludGYob3B0aW9ucy0+ZmlsZSwKLQkgICAgICAgIiVzICVkIGZpbGVzIGNoYW5nZWQsICVkIGluc2VydGlvbnMoKyksICVkIGRlbGV0aW9ucygtKSVzXG4iLAotCSAgICAgICBzZXQsIHRvdGFsX2ZpbGVzLCBhZGRzLCBkZWxzLCByZXNldCk7CisJICAgICAgICIgJWQgZmlsZXMgY2hhbmdlZCwgJWQgaW5zZXJ0aW9ucygrKSwgJWQgZGVsZXRpb25zKC0pXG4iLAorCSAgICAgICB0b3RhbF9maWxlcywgYWRkcywgZGVscyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNob3dfc2hvcnRzdGF0cyhzdHJ1Y3QgZGlmZnN0YXRfdCogZGF0YSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKQEAgLTkzNiw3ICsxMDI0LDcgQEAKIAkgICAgICAgdG90YWxfZmlsZXMsIGFkZHMsIGRlbHMpOwogfQogCi1zdGF0aWMgdm9pZCBzaG93X251bXN0YXQoc3RydWN0IGRpZmZzdGF0X3QqIGRhdGEsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCitzdGF0aWMgdm9pZCBzaG93X251bXN0YXQoc3RydWN0IGRpZmZzdGF0X3QgKmRhdGEsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCiB7CiAJaW50IGk7CiAKQEAgLTEzMjUsNiArMTQxMywxMiBAQAogCXJldHVybiBvbmUtPmRyaXZlci0+ZnVuY25hbWUucGF0dGVybiA/ICZvbmUtPmRyaXZlci0+ZnVuY25hbWUgOiBOVUxMOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqdXNlcmRpZmZfd29yZF9yZWdleChzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWRpZmZfZmlsZXNwZWNfbG9hZF9kcml2ZXIob25lKTsKKwlyZXR1cm4gb25lLT5kcml2ZXItPndvcmRfcmVnZXg7Cit9CisKIHZvaWQgZGlmZl9zZXRfbW5lbW9uaWNfcHJlZml4KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCiB7CiAJaWYgKCFvcHRpb25zLT5hX3ByZWZpeCkKQEAgLTE0NzEsNiArMTU2NSw3IEBACiAJCWVjYmRhdGEuZmlsZSA9IG8tPmZpbGU7CiAJCXhwcC5mbGFncyA9IFhERl9ORUVEX01JTklNQUwgfCBvLT54ZGxfb3B0czsKIAkJeGVjZmcuY3R4bGVuID0gby0+Y29udGV4dDsKKwkJeGVjZmcuaW50ZXJodW5rY3R4bGVuID0gby0+aW50ZXJodW5rY29udGV4dDsKIAkJeGVjZmcuZmxhZ3MgPSBYRExfRU1JVF9GVU5DTkFNRVM7CiAJCWlmIChwZSkKIAkJCXhkaWZmX3NldF9maW5kX2Z1bmMoJnhlY2ZnLCBwZS0+cGF0dGVybiwgcGUtPmNmbGFncyk7CkBAIC0xNDg0LDYgKzE1NzksMjEgQEAKIAkJCWVjYmRhdGEuZGlmZl93b3JkcyA9CiAJCQkJeGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGRpZmZfd29yZHNfZGF0YSkpOwogCQkJZWNiZGF0YS5kaWZmX3dvcmRzLT5maWxlID0gby0+ZmlsZTsKKwkJCWlmICghby0+d29yZF9yZWdleCkKKwkJCQlvLT53b3JkX3JlZ2V4ID0gdXNlcmRpZmZfd29yZF9yZWdleChvbmUpOworCQkJaWYgKCFvLT53b3JkX3JlZ2V4KQorCQkJCW8tPndvcmRfcmVnZXggPSB1c2VyZGlmZl93b3JkX3JlZ2V4KHR3byk7CisJCQlpZiAoIW8tPndvcmRfcmVnZXgpCisJCQkJby0+d29yZF9yZWdleCA9IGRpZmZfd29yZF9yZWdleF9jZmc7CisJCQlpZiAoby0+d29yZF9yZWdleCkgeworCQkJCWVjYmRhdGEuZGlmZl93b3Jkcy0+d29yZF9yZWdleCA9IChyZWdleF90ICopCisJCQkJCXhtYWxsb2Moc2l6ZW9mKHJlZ2V4X3QpKTsKKwkJCQlpZiAocmVnY29tcChlY2JkYXRhLmRpZmZfd29yZHMtPndvcmRfcmVnZXgsCisJCQkJCQlvLT53b3JkX3JlZ2V4LAorCQkJCQkJUkVHX0VYVEVOREVEIHwgUkVHX05FV0xJTkUpKQorCQkJCQlkaWUgKCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogJXMiLAorCQkJCQkJCW8tPndvcmRfcmVnZXgpOworCQkJfQogCQl9CiAJCXhkaV9kaWZmX291dGYoJm1mMSwgJm1mMiwgZm5fb3V0X2NvbnN1bWUsICZlY2JkYXRhLAogCQkJICAgICAgJnhwcCwgJnhlY2ZnLCAmZWNiKTsKQEAgLTE0OTMsNiArMTYwMyw3IEBACiAJCQlmcmVlKG1mMS5wdHIpOwogCQlpZiAodGV4dGNvbnZfdHdvKQogCQkJZnJlZShtZjIucHRyKTsKKwkJeGRpZmZfY2xlYXJfZmluZF9mdW5jKCZ4ZWNmZyk7CiAJfQogCiAgZnJlZV9hYl9hbmRfcmV0dXJuOgpAQCAtMTg0NiwzMCArMTk1Nyw0OCBAQAogCXMtPmNudF9kYXRhID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgcHJlcF90ZW1wX2Jsb2Ioc3RydWN0IGRpZmZfdGVtcGZpbGUgKnRlbXAsCitzdGF0aWMgdm9pZCBwcmVwX3RlbXBfYmxvYihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZGlmZl90ZW1wZmlsZSAqdGVtcCwKIAkJCSAgIHZvaWQgKmJsb2IsCiAJCQkgICB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAogCQkJICAgaW50IG1vZGUpCiB7CiAJaW50IGZkOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB0ZW1wbGF0ZSA9IFNUUkJVRl9JTklUOworCWNoYXIgKnBhdGhfZHVwID0geHN0cmR1cChwYXRoKTsKKwljb25zdCBjaGFyICpiYXNlID0gYmFzZW5hbWUocGF0aF9kdXApOwogCi0JZmQgPSBnaXRfbWtzdGVtcCh0ZW1wLT50bXBfcGF0aCwgUEFUSF9NQVgsICIuZGlmZl9YWFhYWFgiKTsKKwkvKiBHZW5lcmF0ZSAiWFhYWFhYX2Jhc2VuYW1lLmV4dCIgKi8KKwlzdHJidWZfYWRkc3RyKCZ0ZW1wbGF0ZSwgIlhYWFhYWF8iKTsKKwlzdHJidWZfYWRkc3RyKCZ0ZW1wbGF0ZSwgYmFzZSk7CisKKwlmZCA9IGdpdF9ta3N0ZW1wcyh0ZW1wLT50bXBfcGF0aCwgUEFUSF9NQVgsIHRlbXBsYXRlLmJ1ZiwKKwkJCXN0cmxlbihiYXNlKSArIDEpOwogCWlmIChmZCA8IDApCi0JCWRpZSgidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wLWZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIHRlbXAtZmlsZSIpOworCWlmIChjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShwYXRoLAorCQkJKGNvbnN0IGNoYXIgKilibG9iLCAoc2l6ZV90KXNpemUsICZidWYpKSB7CisJCWJsb2IgPSBidWYuYnVmOworCQlzaXplID0gYnVmLmxlbjsKKwl9CiAJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJsb2IsIHNpemUpICE9IHNpemUpCi0JCWRpZSgidW5hYmxlIHRvIHdyaXRlIHRlbXAtZmlsZSIpOworCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0ZW1wLWZpbGUiKTsKIAljbG9zZShmZCk7CiAJdGVtcC0+bmFtZSA9IHRlbXAtPnRtcF9wYXRoOwogCXN0cmNweSh0ZW1wLT5oZXgsIHNoYTFfdG9faGV4KHNoYTEpKTsKIAl0ZW1wLT5oZXhbNDBdID0gMDsKIAlzcHJpbnRmKHRlbXAtPm1vZGUsICIlMDZvIiwgbW9kZSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnRlbXBsYXRlKTsKKwlmcmVlKHBhdGhfZHVwKTsKIH0KIAotc3RhdGljIHZvaWQgcHJlcGFyZV90ZW1wX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgICAgIHN0cnVjdCBkaWZmX3RlbXBmaWxlICp0ZW1wLAotCQkJICAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSkKK3N0YXRpYyBzdHJ1Y3QgZGlmZl90ZW1wZmlsZSAqcHJlcGFyZV90ZW1wX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSkKIHsKKwlzdHJ1Y3QgZGlmZl90ZW1wZmlsZSAqdGVtcCA9IGNsYWltX2RpZmZfdGVtcGZpbGUoKTsKKwogCWlmICghRElGRl9GSUxFX1ZBTElEKG9uZSkpIHsKIAlub3RfYV92YWxpZF9maWxlOgogCQkvKiBBICctJyBlbnRyeSBwcm9kdWNlcyB0aGlzIGZvciBmaWxlLTIsIGFuZApAQCAtMTg3OCw3ICsyMDA3LDEzIEBACiAJCXRlbXAtPm5hbWUgPSAiL2Rldi9udWxsIjsKIAkJc3RyY3B5KHRlbXAtPmhleCwgIi4iKTsKIAkJc3RyY3B5KHRlbXAtPm1vZGUsICIuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIHRlbXA7CisJfQorCisJaWYgKCFyZW1vdmVfdGVtcGZpbGVfaW5zdGFsbGVkKSB7CisJCWF0ZXhpdChyZW1vdmVfdGVtcGZpbGUpOworCQlzaWdjaGFpbl9wdXNoX2NvbW1vbihyZW1vdmVfdGVtcGZpbGVfb25fc2lnbmFsKTsKKwkJcmVtb3ZlX3RlbXBmaWxlX2luc3RhbGxlZCA9IDE7CiAJfQogCiAJaWYgKCFvbmUtPnNoYTFfdmFsaWQgfHwKQEAgLTE4ODcsMjEgKzIwMjIsMTggQEAKIAkJaWYgKGxzdGF0KG5hbWUsICZzdCkgPCAwKSB7CiAJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQogCQkJCWdvdG8gbm90X2FfdmFsaWRfZmlsZTsKLQkJCWRpZSgic3RhdCglcyk6ICVzIiwgbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygic3RhdCglcykiLCBuYW1lKTsKIAkJfQogCQlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgewotCQkJaW50IHJldDsKLQkJCWNoYXIgYnVmW1BBVEhfTUFYICsgMV07IC8qIG91Z2h0IHRvIGJlIFNZTUxJTktfTUFYICovCi0JCQlyZXQgPSByZWFkbGluayhuYW1lLCBidWYsIHNpemVvZihidWYpKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCWRpZSgicmVhZGxpbmsoJXMpIiwgbmFtZSk7Ci0JCQlpZiAocmV0ID09IHNpemVvZihidWYpKQotCQkJCWRpZSgic3ltbGluayB0b28gbG9uZzogJXMiLCBuYW1lKTsKLQkJCXByZXBfdGVtcF9ibG9iKHRlbXAsIGJ1ZiwgcmV0LAorCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQkJaWYgKHN0cmJ1Zl9yZWFkbGluaygmc2IsIG5hbWUsIHN0LnN0X3NpemUpIDwgMCkKKwkJCQlkaWVfZXJybm8oInJlYWRsaW5rKCVzKSIsIG5hbWUpOworCQkJcHJlcF90ZW1wX2Jsb2IobmFtZSwgdGVtcCwgc2IuYnVmLCBzYi5sZW4sCiAJCQkJICAgICAgIChvbmUtPnNoYTFfdmFsaWQgPwogCQkJCQlvbmUtPnNoYTEgOiBudWxsX3NoYTEpLAogCQkJCSAgICAgICAob25lLT5zaGExX3ZhbGlkID8KIAkJCQkJb25lLT5tb2RlIDogU19JRkxOSykpOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKIAkJfQogCQllbHNlIHsKIAkJCS8qIHdlIGNhbiBib3Jyb3cgZnJvbSB0aGUgZmlsZSBpbiB0aGUgd29yayB0cmVlICovCkBAIC0xOTE4LDMyICsyMDUwLDE1IEBACiAJCQkgKi8KIAkJCXNwcmludGYodGVtcC0+bW9kZSwgIiUwNm8iLCBvbmUtPm1vZGUpOwogCQl9Ci0JCXJldHVybjsKKwkJcmV0dXJuIHRlbXA7CiAJfQogCWVsc2UgewogCQlpZiAoZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhvbmUsIDApKQogCQkJZGllKCJjYW5ub3QgcmVhZCBkYXRhIGJsb2IgZm9yICVzIiwgb25lLT5wYXRoKTsKLQkJcHJlcF90ZW1wX2Jsb2IodGVtcCwgb25lLT5kYXRhLCBvbmUtPnNpemUsCisJCXByZXBfdGVtcF9ibG9iKG5hbWUsIHRlbXAsIG9uZS0+ZGF0YSwgb25lLT5zaXplLAogCQkJICAgICAgIG9uZS0+c2hhMSwgb25lLT5tb2RlKTsKIAl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZV90ZW1wZmlsZSh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykKLQkJaWYgKGRpZmZfdGVtcFtpXS5uYW1lID09IGRpZmZfdGVtcFtpXS50bXBfcGF0aCkgewotCQkJdW5saW5rKGRpZmZfdGVtcFtpXS5uYW1lKTsKLQkJCWRpZmZfdGVtcFtpXS5uYW1lID0gTlVMTDsKLQkJfQotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVfdGVtcGZpbGVfb25fc2lnbmFsKGludCBzaWdubykKLXsKLQlyZW1vdmVfdGVtcGZpbGUoKTsKLQlzaWduYWwoU0lHSU5ULCBTSUdfREZMKTsKLQlyYWlzZShzaWdubyk7CisJcmV0dXJuIHRlbXA7CiB9CiAKIC8qIEFuIGV4dGVybmFsIGRpZmYgY29tbWFuZCB0YWtlczoKQEAgLTE5NjEsMzQgKzIwNzYsMjIgQEAKIAkJCSAgICAgIGludCBjb21wbGV0ZV9yZXdyaXRlKQogewogCWNvbnN0IGNoYXIgKnNwYXduX2FyZ1sxMF07Ci0Jc3RydWN0IGRpZmZfdGVtcGZpbGUgKnRlbXAgPSBkaWZmX3RlbXA7CiAJaW50IHJldHZhbDsKLQlzdGF0aWMgaW50IGF0ZXhpdF9hc2tlZCA9IDA7Ci0JY29uc3QgY2hhciAqb3RoZXJuYW1lOwogCWNvbnN0IGNoYXIgKiphcmcgPSAmc3Bhd25fYXJnWzBdOwogCi0Jb3RoZXJuYW1lID0gKG90aGVyPyBvdGhlciA6IG5hbWUpOwogCWlmIChvbmUgJiYgdHdvKSB7Ci0JCXByZXBhcmVfdGVtcF9maWxlKG5hbWUsICZ0ZW1wWzBdLCBvbmUpOwotCQlwcmVwYXJlX3RlbXBfZmlsZShvdGhlcm5hbWUsICZ0ZW1wWzFdLCB0d28pOwotCQlpZiAoISBhdGV4aXRfYXNrZWQgJiYKLQkJICAgICh0ZW1wWzBdLm5hbWUgPT0gdGVtcFswXS50bXBfcGF0aCB8fAotCQkgICAgIHRlbXBbMV0ubmFtZSA9PSB0ZW1wWzFdLnRtcF9wYXRoKSkgewotCQkJYXRleGl0X2Fza2VkID0gMTsKLQkJCWF0ZXhpdChyZW1vdmVfdGVtcGZpbGUpOwotCQl9Ci0JCXNpZ25hbChTSUdJTlQsIHJlbW92ZV90ZW1wZmlsZV9vbl9zaWduYWwpOwotCX0KLQotCWlmIChvbmUgJiYgdHdvKSB7CisJCXN0cnVjdCBkaWZmX3RlbXBmaWxlICp0ZW1wX29uZSwgKnRlbXBfdHdvOworCQljb25zdCBjaGFyICpvdGhlcm5hbWUgPSAob3RoZXIgPyBvdGhlciA6IG5hbWUpOworCQl0ZW1wX29uZSA9IHByZXBhcmVfdGVtcF9maWxlKG5hbWUsIG9uZSk7CisJCXRlbXBfdHdvID0gcHJlcGFyZV90ZW1wX2ZpbGUob3RoZXJuYW1lLCB0d28pOwogCQkqYXJnKysgPSBwZ207CiAJCSphcmcrKyA9IG5hbWU7Ci0JCSphcmcrKyA9IHRlbXBbMF0ubmFtZTsKLQkJKmFyZysrID0gdGVtcFswXS5oZXg7Ci0JCSphcmcrKyA9IHRlbXBbMF0ubW9kZTsKLQkJKmFyZysrID0gdGVtcFsxXS5uYW1lOwotCQkqYXJnKysgPSB0ZW1wWzFdLmhleDsKLQkJKmFyZysrID0gdGVtcFsxXS5tb2RlOworCQkqYXJnKysgPSB0ZW1wX29uZS0+bmFtZTsKKwkJKmFyZysrID0gdGVtcF9vbmUtPmhleDsKKwkJKmFyZysrID0gdGVtcF9vbmUtPm1vZGU7CisJCSphcmcrKyA9IHRlbXBfdHdvLT5uYW1lOworCQkqYXJnKysgPSB0ZW1wX3R3by0+aGV4OworCQkqYXJnKysgPSB0ZW1wX3R3by0+bW9kZTsKIAkJaWYgKG90aGVyKSB7CiAJCQkqYXJnKysgPSBvdGhlcjsKIAkJCSphcmcrKyA9IHhmcm1fbXNnOwpAQCAtMjExNyw5ICsyMjIwLDkgQEAKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlpZiAobHN0YXQob25lLT5wYXRoLCAmc3QpIDwgMCkKLQkJCQlkaWUoInN0YXQgJXMiLCBvbmUtPnBhdGgpOworCQkJCWRpZV9lcnJubygic3RhdCAnJXMnIiwgb25lLT5wYXRoKTsKIAkJCWlmIChpbmRleF9wYXRoKG9uZS0+c2hhMSwgb25lLT5wYXRoLCAmc3QsIDApKQotCQkJCWRpZSgiY2Fubm90IGhhc2ggJXNcbiIsIG9uZS0+cGF0aCk7CisJCQkJZGllKCJjYW5ub3QgaGFzaCAlcyIsIG9uZS0+cGF0aCk7CiAJCX0KIAl9CiAJZWxzZQpAQCAtMjI0NiwxNSArMjM0OSwxMiBAQAogCW9wdGlvbnMtPmJyZWFrX29wdCA9IC0xOwogCW9wdGlvbnMtPnJlbmFtZV9saW1pdCA9IC0xOwogCW9wdGlvbnMtPmRpcnN0YXRfcGVyY2VudCA9IDM7Ci0JRElGRl9PUFRfQ0xSKG9wdGlvbnMsIERJUlNUQVRfQ1VNVUxBVElWRSk7CiAJb3B0aW9ucy0+Y29udGV4dCA9IDM7CiAKIAlvcHRpb25zLT5jaGFuZ2UgPSBkaWZmX2NoYW5nZTsKIAlvcHRpb25zLT5hZGRfcmVtb3ZlID0gZGlmZl9hZGRyZW1vdmU7CiAJaWYgKGRpZmZfdXNlX2NvbG9yX2RlZmF1bHQgPiAwKQogCQlESUZGX09QVF9TRVQob3B0aW9ucywgQ09MT1JfRElGRik7Ci0JZWxzZQotCQlESUZGX09QVF9DTFIob3B0aW9ucywgQ09MT1JfRElGRik7CiAJb3B0aW9ucy0+ZGV0ZWN0X3JlbmFtZSA9IGRpZmZfZGV0ZWN0X3JlbmFtZV9kZWZhdWx0OwogCiAJaWYgKCFkaWZmX21uZW1vbmljX3ByZWZpeCkgewpAQCAtMjQ5MCwxMSArMjU5MCwxMyBAQAogCiAJLyogeGRpZmYgb3B0aW9ucyAqLwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXciKSB8fCAhc3RyY21wKGFyZywgIi0taWdub3JlLWFsbC1zcGFjZSIpKQotCQlvcHRpb25zLT54ZGxfb3B0cyB8PSBYREZfSUdOT1JFX1dISVRFU1BBQ0U7CisJCURJRkZfWERMX1NFVChvcHRpb25zLCBJR05PUkVfV0hJVEVTUEFDRSk7CiAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItYiIpIHx8ICFzdHJjbXAoYXJnLCAiLS1pZ25vcmUtc3BhY2UtY2hhbmdlIikpCi0JCW9wdGlvbnMtPnhkbF9vcHRzIHw9IFhERl9JR05PUkVfV0hJVEVTUEFDRV9DSEFOR0U7CisJCURJRkZfWERMX1NFVChvcHRpb25zLCBJR05PUkVfV0hJVEVTUEFDRV9DSEFOR0UpOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1pZ25vcmUtc3BhY2UtYXQtZW9sIikpCi0JCW9wdGlvbnMtPnhkbF9vcHRzIHw9IFhERl9JR05PUkVfV0hJVEVTUEFDRV9BVF9FT0w7CisJCURJRkZfWERMX1NFVChvcHRpb25zLCBJR05PUkVfV0hJVEVTUEFDRV9BVF9FT0wpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1wYXRpZW5jZSIpKQorCQlESUZGX1hETF9TRVQob3B0aW9ucywgUEFUSUVOQ0VfRElGRik7CiAKIAkvKiBmbGFncyBvcHRpb25zICovCiAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWJpbmFyeSIpKSB7CkBAIC0yNTE1LDggKzI2MTcsMTUgQEAKIAkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIENPTE9SX0RJRkYpOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1jb2xvciIpKQogCQlESUZGX09QVF9DTFIob3B0aW9ucywgQ09MT1JfRElGRik7Ci0JZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNvbG9yLXdvcmRzIikpCi0JCW9wdGlvbnMtPmZsYWdzIHw9IERJRkZfT1BUX0NPTE9SX0RJRkYgfCBESUZGX09QVF9DT0xPUl9ESUZGX1dPUkRTOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jb2xvci13b3JkcyIpKSB7CisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBDT0xPUl9ESUZGKTsKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIENPTE9SX0RJRkZfV09SRFMpOworCX0KKwllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tY29sb3Itd29yZHM9IikpIHsKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIENPTE9SX0RJRkYpOworCQlESUZGX09QVF9TRVQob3B0aW9ucywgQ09MT1JfRElGRl9XT1JEUyk7CisJCW9wdGlvbnMtPndvcmRfcmVnZXggPSBhcmcgKyAxNDsKKwl9CiAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWV4aXQtY29kZSIpKQogCQlESUZGX09QVF9TRVQob3B0aW9ucywgRVhJVF9XSVRIX1NUQVRVUyk7CiAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXF1aWV0IikpCkBAIC0yNTYyLDYgKzI2NzEsOSBAQAogCQlvcHRpb25zLT5iX3ByZWZpeCA9IGFyZyArIDEzOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1wcmVmaXgiKSkKIAkJb3B0aW9ucy0+YV9wcmVmaXggPSBvcHRpb25zLT5iX3ByZWZpeCA9ICIiOworCWVsc2UgaWYgKG9wdF9hcmcoYXJnLCAnXDAnLCAiaW50ZXItaHVuay1jb250ZXh0IiwKKwkJCSAmb3B0aW9ucy0+aW50ZXJodW5rY29udGV4dCkpCisJCTsKIAllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tb3V0cHV0PSIpKSB7CiAJCW9wdGlvbnMtPmZpbGUgPSBmb3BlbihhcmcgKyBzdHJsZW4oIi0tb3V0cHV0PSIpLCAidyIpOwogCQlvcHRpb25zLT5jbG9zZV9maWxlID0gMTsKQEAgLTM0NjgsMTUgKzM1ODAsMTUgQEAKIHN0YXRpYyBjaGFyICpydW5fdGV4dGNvbnYoY29uc3QgY2hhciAqcGdtLCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3BlYywKIAkJc2l6ZV90ICpvdXRzaXplKQogewotCXN0cnVjdCBkaWZmX3RlbXBmaWxlIHRlbXA7CisJc3RydWN0IGRpZmZfdGVtcGZpbGUgKnRlbXA7CiAJY29uc3QgY2hhciAqYXJndlszXTsKIAljb25zdCBjaGFyICoqYXJnID0gYXJndjsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZDsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCi0JcHJlcGFyZV90ZW1wX2ZpbGUoc3BlYy0+cGF0aCwgJnRlbXAsIHNwZWMpOworCXRlbXAgPSBwcmVwYXJlX3RlbXBfZmlsZShzcGVjLT5wYXRoLCBzcGVjKTsKIAkqYXJnKysgPSBwZ207Ci0JKmFyZysrID0gdGVtcC5uYW1lOworCSphcmcrKyA9IHRlbXAtPm5hbWU7CiAJKmFyZyA9IE5VTEw7CiAKIAltZW1zZXQoJmNoaWxkLCAwLCBzaXplb2YoY2hpbGQpKTsKQEAgLTM0ODUsMTMgKzM1OTcsMTIgQEAKIAlpZiAoc3RhcnRfY29tbWFuZCgmY2hpbGQpICE9IDAgfHwKIAkgICAgc3RyYnVmX3JlYWQoJmJ1ZiwgY2hpbGQub3V0LCAwKSA8IDAgfHwKIAkgICAgZmluaXNoX2NvbW1hbmQoJmNoaWxkKSAhPSAwKSB7Ci0JCWlmICh0ZW1wLm5hbWUgPT0gdGVtcC50bXBfcGF0aCkKLQkJCXVubGluayh0ZW1wLm5hbWUpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmVtb3ZlX3RlbXBmaWxlKCk7CiAJCWVycm9yKCJlcnJvciBydW5uaW5nIHRleHRjb252IGNvbW1hbmQgJyVzJyIsIHBnbSk7CiAJCXJldHVybiBOVUxMOwogCX0KLQlpZiAodGVtcC5uYW1lID09IHRlbXAudG1wX3BhdGgpCi0JCXVubGluayh0ZW1wLm5hbWUpOworCXJlbW92ZV90ZW1wZmlsZSgpOwogCiAJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1Ziwgb3V0c2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9kaWZmLmggYi9kaWZmLmgKaW5kZXggNDI1ODJlZC4uNjYxNjg3NyAxMDA2NDQKLS0tIGEvZGlmZi5oCisrKyBiL2RpZmYuaApAQCAtNjksNiArNjksOSBAQAogI2RlZmluZSBESUZGX09QVF9UU1Qob3B0cywgZmxhZykgICAgKChvcHRzKS0+ZmxhZ3MgJiBESUZGX09QVF8jI2ZsYWcpCiAjZGVmaW5lIERJRkZfT1BUX1NFVChvcHRzLCBmbGFnKSAgICAoKG9wdHMpLT5mbGFncyB8PSBESUZGX09QVF8jI2ZsYWcpCiAjZGVmaW5lIERJRkZfT1BUX0NMUihvcHRzLCBmbGFnKSAgICAoKG9wdHMpLT5mbGFncyAmPSB+RElGRl9PUFRfIyNmbGFnKQorI2RlZmluZSBESUZGX1hETF9UU1Qob3B0cywgZmxhZykgICAgKChvcHRzKS0+eGRsX29wdHMgJiBYREZfIyNmbGFnKQorI2RlZmluZSBESUZGX1hETF9TRVQob3B0cywgZmxhZykgICAgKChvcHRzKS0+eGRsX29wdHMgfD0gWERGXyMjZmxhZykKKyNkZWZpbmUgRElGRl9YRExfQ0xSKG9wdHMsIGZsYWcpICAgICgob3B0cyktPnhkbF9vcHRzICY9IH5YREZfIyNmbGFnKQogCiBzdHJ1Y3QgZGlmZl9vcHRpb25zIHsKIAljb25zdCBjaGFyICpmaWx0ZXI7CkBAIC03OCw2ICs4MSw3IEBACiAJY29uc3QgY2hhciAqYV9wcmVmaXgsICpiX3ByZWZpeDsKIAl1bnNpZ25lZCBmbGFnczsKIAlpbnQgY29udGV4dDsKKwlpbnQgaW50ZXJodW5rY29udGV4dDsKIAlpbnQgYnJlYWtfb3B0OwogCWludCBkZXRlY3RfcmVuYW1lOwogCWludCBza2lwX3N0YXRfdW5tYXRjaDsKQEAgLTk3LDYgKzEwMSw3IEBACiAKIAlpbnQgc3RhdF93aWR0aDsKIAlpbnQgc3RhdF9uYW1lX3dpZHRoOworCWNvbnN0IGNoYXIgKndvcmRfcmVnZXg7CiAKIAkvKiB0aGlzIGlzIHNldCBieSBkaWZmY29yZSBmb3IgRElGRl9GT1JNQVRfUEFUQ0ggKi8KIAlpbnQgZm91bmRfY2hhbmdlczsKQEAgLTI2Myw0ICsyNjgsNiBAQAogCiBleHRlcm4gdm9pZCBkaWZmX25vX2luZGV4KHN0cnVjdCByZXZfaW5mbyAqLCBpbnQsIGNvbnN0IGNoYXIgKiosIGludCwgY29uc3QgY2hhciAqKTsKIAorZXh0ZXJuIGludCBpbmRleF9kaWZmZXJzX2Zyb20oY29uc3QgY2hhciAqZGVmLCBpbnQgZGlmZl9mbGFncyk7CisKICNlbmRpZiAvKiBESUZGX0ggKi8KZGlmZiAtLWdpdCBhL2RpZmZjb3JlLWJyZWFrLmMgYi9kaWZmY29yZS1icmVhay5jCmluZGV4IDMxY2RjZmUuLmQ3MDk3YmIgMTAwNjQ0Ci0tLSBhL2RpZmZjb3JlLWJyZWFrLmMKKysrIGIvZGlmZmNvcmUtYnJlYWsuYwpAQCAtNDUsNyArNDUsNyBAQAogCSAqIFRoZSB2YWx1ZSB3ZSByZXR1cm4gaXMgMSBpZiB3ZSB3YW50IHRoZSBwYWlyIHRvIGJlIGJyb2tlbiwKIAkgKiBvciAwIGlmIHdlIGRvIG5vdC4KIAkgKi8KLQl1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUsIGJhc2Vfc2l6ZSwgbWF4X3NpemU7CisJdW5zaWduZWQgbG9uZyBkZWx0YV9zaXplLCBtYXhfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHNyY19jb3BpZWQsIGxpdGVyYWxfYWRkZWQsIHNyY19yZW1vdmVkOwogCiAJKm1lcmdlX3Njb3JlX3AgPSAwOyAvKiBhc3N1bWUgbm8gZGVsZXRpb24gLS0tICJkbyBub3QgYnJlYWsiCkBAIC02NCw3ICs2NCw2IEBACiAJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMoc3JjLCAwKSB8fCBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKGRzdCwgMCkpCiAJCXJldHVybiAwOyAvKiBlcnJvciBidXQgY2F1Z2h0IGRvd25zdHJlYW0gKi8KIAotCWJhc2Vfc2l6ZSA9ICgoc3JjLT5zaXplIDwgZHN0LT5zaXplKSA/IHNyYy0+c2l6ZSA6IGRzdC0+c2l6ZSk7CiAJbWF4X3NpemUgPSAoKHNyYy0+c2l6ZSA+IGRzdC0+c2l6ZSkgPyBzcmMtPnNpemUgOiBkc3QtPnNpemUpOwogCWlmIChtYXhfc2l6ZSA8IE1JTklNVU1fQlJFQUtfU0laRSkKIAkJcmV0dXJuIDA7IC8qIHdlIGRvIG5vdCBicmVhayB0b28gc21hbGwgZmlsZXBhaXIgKi8KZGlmZiAtLWdpdCBhL2RpZmZjb3JlLXBpY2theGUuYyBiL2RpZmZjb3JlLXBpY2theGUuYwppbmRleCBhZjlmZmZlLi5kMGVmODM5IDEwMDY0NAotLS0gYS9kaWZmY29yZS1waWNrYXhlLmMKKysrIGIvZGlmZmNvcmUtcGlja2F4ZS5jCkBAIC0xMCw3ICsxMCw3IEBACiAJCQkgICAgIHJlZ2V4X3QgKnJlZ2V4cCkKIHsKIAl1bnNpZ25lZCBpbnQgY250OwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzejsKKwl1bnNpZ25lZCBsb25nIHN6OwogCWNvbnN0IGNoYXIgKmRhdGE7CiAJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob25lLCAwKSkKIAkJcmV0dXJuIDA7CkBAIC0yNSwyMyArMjUsMjMgQEAKIAkJcmVnbWF0Y2hfdCByZWdtYXRjaDsKIAkJaW50IGZsYWdzID0gMDsKIAorCQlhc3NlcnQoZGF0YVtzel0gPT0gJ1wwJyk7CiAJCXdoaWxlICgqZGF0YSAmJiAhcmVnZXhlYyhyZWdleHAsIGRhdGEsIDEsICZyZWdtYXRjaCwgZmxhZ3MpKSB7CiAJCQlmbGFncyB8PSBSRUdfTk9UQk9MOwotCQkJZGF0YSArPSByZWdtYXRjaC5ybV9zbzsKLQkJCWlmICgqZGF0YSkgZGF0YSsrOworCQkJZGF0YSArPSByZWdtYXRjaC5ybV9lbzsKKwkJCWlmICgqZGF0YSAmJiByZWdtYXRjaC5ybV9zbyA9PSByZWdtYXRjaC5ybV9lbykKKwkJCQlkYXRhKys7CiAJCQljbnQrKzsKIAkJfQogCiAJfSBlbHNlIHsgLyogQ2xhc3NpYyBleGFjdCBzdHJpbmcgbWF0Y2ggKi8KLQkJLyogWWVzLCBJJ3ZlIGhlYXJkIG9mIHN0cnN0cigpLCBidXQgdGhlIHRoaW5nIGlzICpkYXRhIG1heQotCQkgKiBub3QgYmUgTlVMIHRlcm1pbmF0ZWQuICBTdWUgbWUuCi0JCSAqLwotCQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCArIGxlbiA8PSBzejsgb2Zmc2V0KyspIHsKLQkJCS8qIHdlIGNvdW50IG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBuZWVkbGUgKi8KLQkJCWlmICghbWVtY21wKG5lZWRsZSwgZGF0YSArIG9mZnNldCwgbGVuKSkgewotCQkJCW9mZnNldCArPSBsZW4gLSAxOwotCQkJCWNudCsrOwotCQkJfQorCQl3aGlsZSAoc3opIHsKKwkJCWNvbnN0IGNoYXIgKmZvdW5kID0gbWVtbWVtKGRhdGEsIHN6LCBuZWVkbGUsIGxlbik7CisJCQlpZiAoIWZvdW5kKQorCQkJCWJyZWFrOworCQkJc3ogLT0gZm91bmQgLSBkYXRhICsgbGVuOworCQkJZGF0YSA9IGZvdW5kICsgbGVuOworCQkJY250Kys7CiAJCX0KIAl9CiAJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEob25lKTsKZGlmZiAtLWdpdCBhL2RpZmZjb3JlLXJlbmFtZS5jIGIvZGlmZmNvcmUtcmVuYW1lLmMKaW5kZXggMGIwZDZiOC4uNjNhYzk5OCAxMDA2NDQKLS0tIGEvZGlmZmNvcmUtcmVuYW1lLmMKKysrIGIvZGlmZmNvcmUtcmVuYW1lLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCQkJaW50IHNjb3JlOwogCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNvdXJjZSA9IHAtPmZpbGVzcGVjOwogCi0JCQkvKiBGYWxzZSBoYXNoIGNvbGxpc3Npb24/ICovCisJCQkvKiBGYWxzZSBoYXNoIGNvbGxpc2lvbj8gKi8KIAkJCWlmIChoYXNoY21wKHNvdXJjZS0+c2hhMSwgdGFyZ2V0LT5zaGExKSkKIAkJCQljb250aW51ZTsKIAkJCS8qIE5vbi1yZWd1bGFyIGZpbGVzPyBJZiBzbywgdGhlIG1vZGVzIG11c3QgbWF0Y2ghICovCmRpZmYgLS1naXQgYS9kaXIuYyBiL2Rpci5jCmluZGV4IDUzYWQ5MjEuLmUwNWI4NTAgMTAwNjQ0Ci0tLSBhL2Rpci5jCisrKyBiL2Rpci5jCkBAIC0xNCwxMiArMTQsMTEgQEAKIAljb25zdCBjaGFyICpwYXRoOwogfTsKIAotc3RhdGljIGludCByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKLQljb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKK3N0YXRpYyBpbnQgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sCiAJaW50IGNoZWNrX29ubHksIGNvbnN0IHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSk7Ci1zdGF0aWMgaW50IGdldF9kdHlwZShzdHJ1Y3QgZGlyZW50ICpkZSwgY29uc3QgY2hhciAqcGF0aCk7CitzdGF0aWMgaW50IGdldF9kdHlwZShzdHJ1Y3QgZGlyZW50ICpkZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbik7CiAKLWludCBjb21tb25fcHJlZml4KGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3N0YXRpYyBpbnQgY29tbW9uX3ByZWZpeChjb25zdCBjaGFyICoqcGF0aHNwZWMpCiB7CiAJY29uc3QgY2hhciAqcGF0aCwgKnNsYXNoLCAqbmV4dDsKIAlpbnQgcHJlZml4OwpAQCAtNTIsNiArNTEsMjYgQEAKIAlyZXR1cm4gcHJlZml4OwogfQogCitpbnQgZmlsbF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqKnBhdGhzcGVjKQoreworCWNvbnN0IGNoYXIgKnBhdGg7CisJaW50IGxlbjsKKworCS8qCisJICogQ2FsY3VsYXRlIGNvbW1vbiBwcmVmaXggZm9yIHRoZSBwYXRoc3BlYywgYW5kCisJICogdXNlIHRoYXQgdG8gb3B0aW1pemUgdGhlIGRpcmVjdG9yeSB3YWxrCisJICovCisJbGVuID0gY29tbW9uX3ByZWZpeChwYXRoc3BlYyk7CisJcGF0aCA9ICIiOworCisJaWYgKGxlbikKKwkJcGF0aCA9IHhtZW1kdXB6KCpwYXRoc3BlYywgbGVuKTsKKworCS8qIFJlYWQgdGhlIGRpcmVjdG9yeSBhbmQgcHJ1bmUgaXQgKi8KKwlyZWFkX2RpcmVjdG9yeShkaXIsIHBhdGgsIGxlbiwgcGF0aHNwZWMpOworCXJldHVybiBsZW47Cit9CisKIC8qCiAgKiBEb2VzICdtYXRjaCcgbWF0Y2ggdGhlIGdpdmVuIG5hbWU/CiAgKiBBIG1hdGNoIGlzIGZvdW5kIGlmCkBAIC03NSw3ICs5NCw3IEBACiAJZm9yICg7OykgewogCQl1bnNpZ25lZCBjaGFyIGMxID0gKm1hdGNoOwogCQl1bnNpZ25lZCBjaGFyIGMyID0gKm5hbWU7Ci0JCWlmIChpc3NwZWNpYWwoYzEpKQorCQlpZiAoYzEgPT0gJ1wwJyB8fCBpc19nbG9iX3NwZWNpYWwoYzEpKQogCQkJYnJlYWs7CiAJCWlmIChjMSAhPSBjMikKIAkJCXJldHVybiAwOwpAQCAtMTA4LDI1ICsxMjcsMjggQEAKICAqIGFuZCBhIG1hcmsgaXMgbGVmdCBpbiBzZWVuW10gYXJyYXkgZm9yIHBhdGhzcGVjIGVsZW1lbnQgdGhhdAogICogYWN0dWFsbHkgbWF0Y2hlZCBhbnl0aGluZy4KICAqLwotaW50IG1hdGNoX3BhdGhzcGVjKGNvbnN0IGNoYXIgKipwYXRoc3BlYywgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBwcmVmaXgsIGNoYXIgKnNlZW4pCitpbnQgbWF0Y2hfcGF0aHNwZWMoY29uc3QgY2hhciAqKnBhdGhzcGVjLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJaW50IHByZWZpeCwgY2hhciAqc2VlbikKIHsKLQlpbnQgcmV0dmFsOwotCWNvbnN0IGNoYXIgKm1hdGNoOworCWludCBpLCByZXR2YWwgPSAwOworCisJaWYgKCFwYXRoc3BlYykKKwkJcmV0dXJuIDE7CiAKIAluYW1lICs9IHByZWZpeDsKIAluYW1lbGVuIC09IHByZWZpeDsKIAotCWZvciAocmV0dmFsID0gMDsgKG1hdGNoID0gKnBhdGhzcGVjKyspICE9IE5VTEw7IHNlZW4rKykgeworCWZvciAoaSA9IDA7IHBhdGhzcGVjW2ldICE9IE5VTEw7IGkrKykgewogCQlpbnQgaG93OwotCQlpZiAocmV0dmFsICYmICpzZWVuID09IE1BVENIRURfRVhBQ1RMWSkKKwkJY29uc3QgY2hhciAqbWF0Y2ggPSBwYXRoc3BlY1tpXSArIHByZWZpeDsKKwkJaWYgKHNlZW4gJiYgc2VlbltpXSA9PSBNQVRDSEVEX0VYQUNUTFkpCiAJCQljb250aW51ZTsKLQkJbWF0Y2ggKz0gcHJlZml4OwogCQlob3cgPSBtYXRjaF9vbmUobWF0Y2gsIG5hbWUsIG5hbWVsZW4pOwogCQlpZiAoaG93KSB7CiAJCQlpZiAocmV0dmFsIDwgaG93KQogCQkJCXJldHZhbCA9IGhvdzsKLQkJCWlmICgqc2VlbiA8IGhvdykKLQkJCQkqc2VlbiA9IGhvdzsKKwkJCWlmIChzZWVuICYmIHNlZW5baV0gPCBob3cpCisJCQkJc2VlbltpXSA9IGhvdzsKIAkJfQogCX0KIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTUzLDcgKzE3NSw3IEBACiAJaWYgKGxlbiAmJiBzdHJpbmdbbGVuIC0gMV0gPT0gJy8nKSB7CiAJCWNoYXIgKnM7CiAJCXggPSB4bWFsbG9jKHNpemVvZigqeCkgKyBsZW4pOwotCQlzID0gKGNoYXIqKSh4KzEpOworCQlzID0gKGNoYXIgKikoeCsxKTsKIAkJbWVtY3B5KHMsIHN0cmluZywgbGVuIC0gMSk7CiAJCXNbbGVuIC0gMV0gPSAnXDAnOwogCQlzdHJpbmcgPSBzOwpAQCAtMzA0LDcgKzMyNiw3IEBACiAKIAkJCWlmICh4LT5mbGFncyAmIEVYQ19GTEFHX01VU1RCRURJUikgewogCQkJCWlmICgqZHR5cGUgPT0gRFRfVU5LTk9XTikKLQkJCQkJKmR0eXBlID0gZ2V0X2R0eXBlKE5VTEwsIHBhdGhuYW1lKTsKKwkJCQkJKmR0eXBlID0gZ2V0X2R0eXBlKE5VTEwsIHBhdGhuYW1lLCBwYXRobGVuKTsKIAkJCQlpZiAoKmR0eXBlICE9IERUX0RJUikKIAkJCQkJY29udGludWU7CiAJCQl9CkBAIC0zOTMsNyArNDE1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkaXJfZW50cnkgKmRpcl9hZGRfaWdub3JlZChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGxlbikKIHsKLQlpZiAoY2FjaGVfbmFtZV9wb3MocGF0aG5hbWUsIGxlbikgPj0gMCkKKwlpZiAoIWNhY2hlX25hbWVfaXNfb3RoZXIocGF0aG5hbWUsIGxlbikpCiAJCXJldHVybiBOVUxMOwogCiAJQUxMT0NfR1JPVyhkaXItPmlnbm9yZWQsIGRpci0+aWdub3JlZF9ucisxLCBkaXItPmlnbm9yZWRfYWxsb2MpOwpAQCAtNDg0LDE0ICs1MDYsMTQgQEAKIAkJcmV0dXJuIHJlY3Vyc2VfaW50b19kaXJlY3Rvcnk7CiAKIAljYXNlIGluZGV4X2dpdGRpcjoKLQkJaWYgKGRpci0+c2hvd19vdGhlcl9kaXJlY3RvcmllcykKKwkJaWYgKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUykKIAkJCXJldHVybiBpZ25vcmVfZGlyZWN0b3J5OwogCQlyZXR1cm4gc2hvd19kaXJlY3Rvcnk7CiAKIAljYXNlIGluZGV4X25vbmV4aXN0ZW50OgotCQlpZiAoZGlyLT5zaG93X290aGVyX2RpcmVjdG9yaWVzKQorCQlpZiAoZGlyLT5mbGFncyAmIERJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTKQogCQkJYnJlYWs7Ci0JCWlmICghZGlyLT5ub19naXRsaW5rcykgeworCQlpZiAoIShkaXItPmZsYWdzICYgRElSX05PX0dJVExJTktTKSkgewogCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAkJCWlmIChyZXNvbHZlX2dpdGxpbmtfcmVmKGRpcm5hbWUsICJIRUFEIiwgc2hhMSkgPT0gMCkKIAkJCQlyZXR1cm4gc2hvd19kaXJlY3Rvcnk7CkBAIC01MDAsOSArNTIyLDkgQEAKIAl9CiAKIAkvKiBUaGlzIGlzIHRoZSAic2hvd19vdGhlcl9kaXJlY3RvcmllcyIgY2FzZSAqLwotCWlmICghZGlyLT5oaWRlX2VtcHR5X2RpcmVjdG9yaWVzKQorCWlmICghKGRpci0+ZmxhZ3MgJiBESVJfSElERV9FTVBUWV9ESVJFQ1RPUklFUykpCiAJCXJldHVybiBzaG93X2RpcmVjdG9yeTsKLQlpZiAoIXJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShkaXIsIGRpcm5hbWUsIGRpcm5hbWUsIGxlbiwgMSwgc2ltcGxpZnkpKQorCWlmICghcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKGRpciwgZGlybmFtZSwgbGVuLCAxLCBzaW1wbGlmeSkpCiAJCXJldHVybiBpZ25vcmVfZGlyZWN0b3J5OwogCXJldHVybiBzaG93X2RpcmVjdG9yeTsKIH0KQEAgLTU0NCwxMyArNTY2LDU0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X2R0eXBlKHN0cnVjdCBkaXJlbnQgKmRlLCBjb25zdCBjaGFyICpwYXRoKQorc3RhdGljIGludCBnZXRfaW5kZXhfZHR5cGUoY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbikKK3sKKwlpbnQgcG9zOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwljZSA9IGNhY2hlX25hbWVfZXhpc3RzKHBhdGgsIGxlbiwgMCk7CisJaWYgKGNlKSB7CisJCWlmICghY2VfdXB0b2RhdGUoY2UpKQorCQkJcmV0dXJuIERUX1VOS05PV047CisJCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQlyZXR1cm4gRFRfRElSOworCQkvKgorCQkgKiBOb2JvZHkgYWN0dWFsbHkgY2FyZXMgYWJvdXQgdGhlCisJCSAqIGRpZmZlcmVuY2UgYmV0d2VlbiBEVF9MTksgYW5kIERUX1JFRworCQkgKi8KKwkJcmV0dXJuIERUX1JFRzsKKwl9CisKKwkvKiBUcnkgdG8gbG9vayBpdCB1cCBhcyBhIGRpcmVjdG9yeSAqLworCXBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIGxlbik7CisJaWYgKHBvcyA+PSAwKQorCQlyZXR1cm4gRFRfVU5LTk9XTjsKKwlwb3MgPSAtcG9zLTE7CisJd2hpbGUgKHBvcyA8IGFjdGl2ZV9ucikgeworCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3MrK107CisJCWlmIChzdHJuY21wKGNlLT5uYW1lLCBwYXRoLCBsZW4pKQorCQkJYnJlYWs7CisJCWlmIChjZS0+bmFtZVtsZW5dID4gJy8nKQorCQkJYnJlYWs7CisJCWlmIChjZS0+bmFtZVtsZW5dIDwgJy8nKQorCQkJY29udGludWU7CisJCWlmICghY2VfdXB0b2RhdGUoY2UpKQorCQkJYnJlYWs7CS8qIGNvbnRpbnVlPyAqLworCQlyZXR1cm4gRFRfRElSOworCX0KKwlyZXR1cm4gRFRfVU5LTk9XTjsKK30KKworc3RhdGljIGludCBnZXRfZHR5cGUoc3RydWN0IGRpcmVudCAqZGUsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCiB7CiAJaW50IGR0eXBlID0gZGUgPyBEVFlQRShkZSkgOiBEVF9VTktOT1dOOwogCXN0cnVjdCBzdGF0IHN0OwogCiAJaWYgKGR0eXBlICE9IERUX1VOS05PV04pCiAJCXJldHVybiBkdHlwZTsKKwlkdHlwZSA9IGdldF9pbmRleF9kdHlwZShwYXRoLCBsZW4pOworCWlmIChkdHlwZSAhPSBEVF9VTktOT1dOKQorCQlyZXR1cm4gZHR5cGU7CiAJaWYgKGxzdGF0KHBhdGgsICZzdCkpCiAJCXJldHVybiBkdHlwZTsKIAlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkKQEAgLTU3MSw0OCArNjM0LDQ3IEBACiAgKiBBbHNvLCB3ZSBpZ25vcmUgdGhlIG5hbWUgIi5naXQiIChldmVuIGlmIGl0IGlzIG5vdCBhIGRpcmVjdG9yeSkuCiAgKiBUaGF0IGxpa2VseSB3aWxsIG5vdCBjaGFuZ2UuCiAgKi8KLXN0YXRpYyBpbnQgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLCBpbnQgY2hlY2tfb25seSwgY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KQorc3RhdGljIGludCByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sIGludCBjaGVja19vbmx5LCBjb25zdCBzdHJ1Y3QgcGF0aF9zaW1wbGlmeSAqc2ltcGxpZnkpCiB7Ci0JRElSICpmZGlyID0gb3BlbmRpcihwYXRoKTsKKwlESVIgKmZkaXIgPSBvcGVuZGlyKCpiYXNlID8gYmFzZSA6ICIuIik7CiAJaW50IGNvbnRlbnRzID0gMDsKIAogCWlmIChmZGlyKSB7CiAJCXN0cnVjdCBkaXJlbnQgKmRlOwotCQljaGFyIGZ1bGxuYW1lW1BBVEhfTUFYICsgMV07Ci0JCW1lbWNweShmdWxsbmFtZSwgYmFzZSwgYmFzZWxlbik7CisJCWNoYXIgcGF0aFtQQVRIX01BWCArIDFdOworCQltZW1jcHkocGF0aCwgYmFzZSwgYmFzZWxlbik7CiAKIAkJd2hpbGUgKChkZSA9IHJlYWRkaXIoZmRpcikpICE9IE5VTEwpIHsKIAkJCWludCBsZW4sIGR0eXBlOwogCQkJaW50IGV4Y2x1ZGU7CiAKLQkJCWlmICgoZGUtPmRfbmFtZVswXSA9PSAnLicpICYmCi0JCQkgICAgKGRlLT5kX25hbWVbMV0gPT0gMCB8fAotCQkJICAgICAhc3RyY21wKGRlLT5kX25hbWUgKyAxLCAiLiIpIHx8Ci0JCQkgICAgICFzdHJjbXAoZGUtPmRfbmFtZSArIDEsICJnaXQiKSkpCisJCQlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSB8fAorCQkJICAgICAhc3RyY21wKGRlLT5kX25hbWUsICIuZ2l0IikpCiAJCQkJY29udGludWU7CiAJCQlsZW4gPSBzdHJsZW4oZGUtPmRfbmFtZSk7CiAJCQkvKiBJZ25vcmUgb3Zlcmx5IGxvbmcgcGF0aG5hbWVzISAqLwotCQkJaWYgKGxlbiArIGJhc2VsZW4gKyA4ID4gc2l6ZW9mKGZ1bGxuYW1lKSkKKwkJCWlmIChsZW4gKyBiYXNlbGVuICsgOCA+IHNpemVvZihwYXRoKSkKIAkJCQljb250aW51ZTsKLQkJCW1lbWNweShmdWxsbmFtZSArIGJhc2VsZW4sIGRlLT5kX25hbWUsIGxlbisxKTsKLQkJCWlmIChzaW1wbGlmeV9hd2F5KGZ1bGxuYW1lLCBiYXNlbGVuICsgbGVuLCBzaW1wbGlmeSkpCisJCQltZW1jcHkocGF0aCArIGJhc2VsZW4sIGRlLT5kX25hbWUsIGxlbisxKTsKKwkJCWxlbiA9IGJhc2VsZW4gKyBsZW47CisJCQlpZiAoc2ltcGxpZnlfYXdheShwYXRoLCBsZW4sIHNpbXBsaWZ5KSkKIAkJCQljb250aW51ZTsKIAogCQkJZHR5cGUgPSBEVFlQRShkZSk7Ci0JCQlleGNsdWRlID0gZXhjbHVkZWQoZGlyLCBmdWxsbmFtZSwgJmR0eXBlKTsKLQkJCWlmIChleGNsdWRlICYmIGRpci0+Y29sbGVjdF9pZ25vcmVkCi0JCQkgICAgJiYgaW5fcGF0aHNwZWMoZnVsbG5hbWUsIGJhc2VsZW4gKyBsZW4sIHNpbXBsaWZ5KSkKLQkJCQlkaXJfYWRkX2lnbm9yZWQoZGlyLCBmdWxsbmFtZSwgYmFzZWxlbiArIGxlbik7CisJCQlleGNsdWRlID0gZXhjbHVkZWQoZGlyLCBwYXRoLCAmZHR5cGUpOworCQkJaWYgKGV4Y2x1ZGUgJiYgKGRpci0+ZmxhZ3MgJiBESVJfQ09MTEVDVF9JR05PUkVEKQorCQkJICAgICYmIGluX3BhdGhzcGVjKHBhdGgsIGxlbiwgc2ltcGxpZnkpKQorCQkJCWRpcl9hZGRfaWdub3JlZChkaXIsIHBhdGgsbGVuKTsKIAogCQkJLyoKIAkJCSAqIEV4Y2x1ZGVkPyBJZiB3ZSBkb24ndCBleHBsaWNpdGx5IHdhbnQgdG8gc2hvdwogCQkJICogaWdub3JlZCBmaWxlcywgaWdub3JlIGl0CiAJCQkgKi8KLQkJCWlmIChleGNsdWRlICYmICFkaXItPnNob3dfaWdub3JlZCkKKwkJCWlmIChleGNsdWRlICYmICEoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAoZHR5cGUgPT0gRFRfVU5LTk9XTikKLQkJCQlkdHlwZSA9IGdldF9kdHlwZShkZSwgZnVsbG5hbWUpOworCQkJCWR0eXBlID0gZ2V0X2R0eXBlKGRlLCBwYXRoLCBsZW4pOwogCiAJCQkvKgogCQkJICogRG8gd2Ugd2FudCB0byBzZWUganVzdCB0aGUgaWdub3JlZCBmaWxlcz8KQEAgLTYyMCw3ICs2ODIsNyBAQAogCQkJICogZXZlbiBpZiB3ZSBkb24ndCBpZ25vcmUgdGhlbSwgc2luY2UgdGhlCiAJCQkgKiBkaXJlY3RvcnkgbWF5IGNvbnRhaW4gZmlsZXMgdGhhdCB3ZSBkby4uCiAJCQkgKi8KLQkJCWlmICghZXhjbHVkZSAmJiBkaXItPnNob3dfaWdub3JlZCkgeworCQkJaWYgKCFleGNsdWRlICYmIChkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkpIHsKIAkJCQlpZiAoZHR5cGUgIT0gRFRfRElSKQogCQkJCQljb250aW51ZTsKIAkJCX0KQEAgLTYyOSwxNiArNjkxLDE3IEBACiAJCQlkZWZhdWx0OgogCQkJCWNvbnRpbnVlOwogCQkJY2FzZSBEVF9ESVI6Ci0JCQkJbWVtY3B5KGZ1bGxuYW1lICsgYmFzZWxlbiArIGxlbiwgIi8iLCAyKTsKKwkJCQltZW1jcHkocGF0aCArIGxlbiwgIi8iLCAyKTsKIAkJCQlsZW4rKzsKLQkJCQlzd2l0Y2ggKHRyZWF0X2RpcmVjdG9yeShkaXIsIGZ1bGxuYW1lLCBiYXNlbGVuICsgbGVuLCBzaW1wbGlmeSkpIHsKKwkJCQlzd2l0Y2ggKHRyZWF0X2RpcmVjdG9yeShkaXIsIHBhdGgsIGxlbiwgc2ltcGxpZnkpKSB7CiAJCQkJY2FzZSBzaG93X2RpcmVjdG9yeToKLQkJCQkJaWYgKGV4Y2x1ZGUgIT0gZGlyLT5zaG93X2lnbm9yZWQpCisJCQkJCWlmIChleGNsdWRlICE9ICEhKGRpci0+ZmxhZ3MKKwkJCQkJCQkmIERJUl9TSE9XX0lHTk9SRUQpKQogCQkJCQkJY29udGludWU7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgcmVjdXJzZV9pbnRvX2RpcmVjdG9yeToKIAkJCQkJY29udGVudHMgKz0gcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKGRpciwKLQkJCQkJCWZ1bGxuYW1lLCBmdWxsbmFtZSwgYmFzZWxlbiArIGxlbiwgMCwgc2ltcGxpZnkpOworCQkJCQkJcGF0aCwgbGVuLCAwLCBzaW1wbGlmeSk7CiAJCQkJCWNvbnRpbnVlOwogCQkJCWNhc2UgaWdub3JlX2RpcmVjdG9yeToKIAkJCQkJY29udGludWU7CkBAIC02NTIsNyArNzE1LDcgQEAKIAkJCWlmIChjaGVja19vbmx5KQogCQkJCWdvdG8gZXhpdF9lYXJseTsKIAkJCWVsc2UKLQkJCQlkaXJfYWRkX25hbWUoZGlyLCBmdWxsbmFtZSwgYmFzZWxlbiArIGxlbik7CisJCQkJZGlyX2FkZF9uYW1lKGRpciwgcGF0aCwgbGVuKTsKIAkJfQogZXhpdF9lYXJseToKIAkJY2xvc2VkaXIoZmRpcik7CkBAIC02ODAsNyArNzQzLDcgQEAKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGNoYXIgYyA9ICptYXRjaCsrOwogCQlsZW4rKzsKLQkJaWYgKGlzc3BlY2lhbChjKSkKKwkJaWYgKGMgPT0gJ1wwJyB8fCBpc19nbG9iX3NwZWNpYWwoYykpCiAJCQlyZXR1cm4gbGVuOwogCX0KIH0KQEAgLTcxNSwxNSArNzc4LDE1IEBACiAJZnJlZShzaW1wbGlmeSk7CiB9CiAKLWludCByZWFkX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwgY29uc3QgY2hhciAqKnBhdGhzcGVjKQoraW50IHJlYWRfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIGNvbnN0IGNoYXIgKipwYXRoc3BlYykKIHsKIAlzdHJ1Y3QgcGF0aF9zaW1wbGlmeSAqc2ltcGxpZnk7CiAKLQlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHN0cmxlbihwYXRoKSwgcGF0aCkpCisJaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChwYXRoLCBsZW4pKQogCQlyZXR1cm4gZGlyLT5ucjsKIAogCXNpbXBsaWZ5ID0gY3JlYXRlX3NpbXBsaWZ5KHBhdGhzcGVjKTsKLQlyZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBwYXRoLCBiYXNlLCBiYXNlbGVuLCAwLCBzaW1wbGlmeSk7CisJcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKGRpciwgcGF0aCwgbGVuLCAwLCBzaW1wbGlmeSk7CiAJZnJlZV9zaW1wbGlmeShzaW1wbGlmeSk7CiAJcXNvcnQoZGlyLT5lbnRyaWVzLCBkaXItPm5yLCBzaXplb2Yoc3RydWN0IGRpcl9lbnRyeSAqKSwgY21wX25hbWUpOwogCXFzb3J0KGRpci0+aWdub3JlZCwgZGlyLT5pZ25vcmVkX25yLCBzaXplb2Yoc3RydWN0IGRpcl9lbnRyeSAqKSwgY21wX25hbWUpOwpAQCAtNzU3LDcgKzgyMCw3IEBACiAJaWYgKCFkaXIpCiAJCXJldHVybiBOVUxMOwogCWlmICghZ2V0Y3dkKGJ1ZmZlciwgc2l6ZSkpCi0JCWRpZSgiY2FuJ3QgZmluZCB0aGUgY3VycmVudCBkaXJlY3Rvcnk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJjYW4ndCBmaW5kIHRoZSBjdXJyZW50IGRpcmVjdG9yeSIpOwogCiAJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKGRpcikpCiAJCWRpciA9IG1ha2VfYWJzb2x1dGVfcGF0aChkaXIpOwpAQCAtNzc5LDYgKzg0MiwyNSBAQAogCXJldHVybiBnZXRfcmVsYXRpdmVfY3dkKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGRpcikgIT0gTlVMTDsKIH0KIAoraW50IGlzX2VtcHR5X2Rpcihjb25zdCBjaGFyICpwYXRoKQoreworCURJUiAqZGlyID0gb3BlbmRpcihwYXRoKTsKKwlzdHJ1Y3QgZGlyZW50ICplOworCWludCByZXQgPSAxOworCisJaWYgKCFkaXIpCisJCXJldHVybiAwOworCisJd2hpbGUgKChlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKQorCQlpZiAoIWlzX2RvdF9vcl9kb3Rkb3QoZS0+ZF9uYW1lKSkgeworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwljbG9zZWRpcihkaXIpOworCXJldHVybiByZXQ7Cit9CisKIGludCByZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KHN0cnVjdCBzdHJidWYgKnBhdGgsIGludCBvbmx5X2VtcHR5KQogewogCURJUiAqZGlyID0gb3BlbmRpcihwYXRoLT5idWYpOwpAQCAtNzkzLDEwICs4NzUsOCBAQAogCWxlbiA9IHBhdGgtPmxlbjsKIAl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKIAkJc3RydWN0IHN0YXQgc3Q7Ci0JCWlmICgoZS0+ZF9uYW1lWzBdID09ICcuJykgJiYKLQkJICAgICgoZS0+ZF9uYW1lWzFdID09IDApIHx8Ci0JCSAgICAgKChlLT5kX25hbWVbMV0gPT0gJy4nKSAmJiBlLT5kX25hbWVbMl0gPT0gMCkpKQotCQkJY29udGludWU7IC8qICIuIiBhbmQgIi4uIiAqLworCQlpZiAoaXNfZG90X29yX2RvdGRvdChlLT5kX25hbWUpKQorCQkJY29udGludWU7CiAKIAkJc3RyYnVmX3NldGxlbihwYXRoLCBsZW4pOwogCQlzdHJidWZfYWRkc3RyKHBhdGgsIGUtPmRfbmFtZSk7CmRpZmYgLS1naXQgYS9kaXIuaCBiL2Rpci5oCmluZGV4IDc2ODQyNWEuLmE2MzE0NDYgMTAwNjQ0Ci0tLSBhL2Rpci5oCisrKyBiL2Rpci5oCkBAIC0zNCwxMSArMzQsMTMgQEAKIHN0cnVjdCBkaXJfc3RydWN0IHsKIAlpbnQgbnIsIGFsbG9jOwogCWludCBpZ25vcmVkX25yLCBpZ25vcmVkX2FsbG9jOwotCXVuc2lnbmVkIGludCBzaG93X2lnbm9yZWQ6MSwKLQkJICAgICBzaG93X290aGVyX2RpcmVjdG9yaWVzOjEsCi0JCSAgICAgaGlkZV9lbXB0eV9kaXJlY3RvcmllczoxLAotCQkgICAgIG5vX2dpdGxpbmtzOjEsCi0JCSAgICAgY29sbGVjdF9pZ25vcmVkOjE7CisJZW51bSB7CisJCURJUl9TSE9XX0lHTk9SRUQgPSAxPDwwLAorCQlESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUyA9IDE8PDEsCisJCURJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTID0gMTw8MiwKKwkJRElSX05PX0dJVExJTktTID0gMTw8MywKKwkJRElSX0NPTExFQ1RfSUdOT1JFRCA9IDE8PDQKKwl9IGZsYWdzOwogCXN0cnVjdCBkaXJfZW50cnkgKiplbnRyaWVzOwogCXN0cnVjdCBkaXJfZW50cnkgKippZ25vcmVkOwogCkBAIC01OSwxNCArNjEsMTMgQEAKIAljaGFyIGJhc2VidWZbUEFUSF9NQVhdOwogfTsKIAotZXh0ZXJuIGludCBjb21tb25fcHJlZml4KGNvbnN0IGNoYXIgKipwYXRoc3BlYyk7Ci0KICNkZWZpbmUgTUFUQ0hFRF9SRUNVUlNJVkVMWSAxCiAjZGVmaW5lIE1BVENIRURfRk5NQVRDSCAyCiAjZGVmaW5lIE1BVENIRURfRVhBQ1RMWSAzCiBleHRlcm4gaW50IG1hdGNoX3BhdGhzcGVjKGNvbnN0IGNoYXIgKipwYXRoc3BlYywgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBwcmVmaXgsIGNoYXIgKnNlZW4pOwogCi1leHRlcm4gaW50IHJlYWRfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICosIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpOworZXh0ZXJuIGludCBmaWxsX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpOworZXh0ZXJuIGludCByZWFkX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpOwogCiBleHRlcm4gaW50IGV4Y2x1ZGVkKHN0cnVjdCBkaXJfc3RydWN0ICosIGNvbnN0IGNoYXIgKiwgaW50ICopOwogZXh0ZXJuIHZvaWQgYWRkX2V4Y2x1ZGVzX2Zyb21fZmlsZShzdHJ1Y3QgZGlyX3N0cnVjdCAqLCBjb25zdCBjaGFyICpmbmFtZSk7CkBAIC03Nyw2ICs3OCwxNSBAQAogZXh0ZXJuIGNoYXIgKmdldF9yZWxhdGl2ZV9jd2QoY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqZGlyKTsKIGV4dGVybiBpbnQgaXNfaW5zaWRlX2Rpcihjb25zdCBjaGFyICpkaXIpOwogCitzdGF0aWMgaW5saW5lIGludCBpc19kb3Rfb3JfZG90ZG90KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIChuYW1lWzBdID09ICcuJyAmJgorCQkobmFtZVsxXSA9PSAnXDAnIHx8CisJCSAobmFtZVsxXSA9PSAnLicgJiYgbmFtZVsyXSA9PSAnXDAnKSkpOworfQorCitleHRlcm4gaW50IGlzX2VtcHR5X2Rpcihjb25zdCBjaGFyICpkaXIpOworCiBleHRlcm4gdm9pZCBzZXR1cF9zdGFuZGFyZF9leGNsdWRlcyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKTsKIGV4dGVybiBpbnQgcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBpbnQgb25seV9lbXB0eSk7CiAKZGlmZiAtLWdpdCBhL2VudHJ5LmMgYi9lbnRyeS5jCmluZGV4IGFhMmVlNDYuLmQzZTg2YzcgMTAwNjQ0Ci0tLSBhL2VudHJ5LmMKKysrIGIvZW50cnkuYwpAQCAtMSw0OCArMSw0MyBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImRpci5oIgogCi1zdGF0aWMgdm9pZCBjcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSkKK3N0YXRpYyB2b2lkIGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBjaGFyICpwYXRoLCBpbnQgcGF0aF9sZW4sCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSkKIHsKLQlpbnQgbGVuID0gc3RybGVuKHBhdGgpOwotCWNoYXIgKmJ1ZiA9IHhtYWxsb2MobGVuICsgMSk7Ci0JY29uc3QgY2hhciAqc2xhc2ggPSBwYXRoOworCWNoYXIgKmJ1ZiA9IHhtYWxsb2MocGF0aF9sZW4gKyAxKTsKKwlpbnQgbGVuID0gMDsKIAotCXdoaWxlICgoc2xhc2ggPSBzdHJjaHIoc2xhc2grMSwgJy8nKSkgIT0gTlVMTCkgewotCQlzdHJ1Y3Qgc3RhdCBzdDsKLQkJaW50IHN0YXRfc3RhdHVzOwotCi0JCWxlbiA9IHNsYXNoIC0gcGF0aDsKLQkJbWVtY3B5KGJ1ZiwgcGF0aCwgbGVuKTsKKwl3aGlsZSAobGVuIDwgcGF0aF9sZW4pIHsKKwkJZG8geworCQkJYnVmW2xlbl0gPSBwYXRoW2xlbl07CisJCQlsZW4rKzsKKwkJfSB3aGlsZSAobGVuIDwgcGF0aF9sZW4gJiYgcGF0aFtsZW5dICE9ICcvJyk7CisJCWlmIChsZW4gPj0gcGF0aF9sZW4pCisJCQlicmVhazsKIAkJYnVmW2xlbl0gPSAwOwogCi0JCWlmIChsZW4gPD0gc3RhdGUtPmJhc2VfZGlyX2xlbikKLQkJCS8qCi0JCQkgKiBjaGVja291dC1pbmRleCAtLXByZWZpeD08ZGlyPjsgPGRpcj4gaXMKLQkJCSAqIGFsbG93ZWQgdG8gYmUgYSBzeW1saW5rIHRvIGFuIGV4aXN0aW5nCi0JCQkgKiBkaXJlY3RvcnkuCi0JCQkgKi8KLQkJCXN0YXRfc3RhdHVzID0gc3RhdChidWYsICZzdCk7Ci0JCWVsc2UKLQkJCS8qCi0JCQkgKiBpZiB0aGVyZSBjdXJyZW50bHkgaXMgYSBzeW1saW5rLCB3ZSB3b3VsZAotCQkJICogd2FudCB0byByZXBsYWNlIGl0IHdpdGggYSByZWFsIGRpcmVjdG9yeS4KLQkJCSAqLwotCQkJc3RhdF9zdGF0dXMgPSBsc3RhdChidWYsICZzdCk7Ci0KLQkJaWYgKCFzdGF0X3N0YXR1cyAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQorCQkvKgorCQkgKiBGb3IgJ2NoZWNrb3V0LWluZGV4IC0tcHJlZml4PTxkaXI+JywgPGRpcj4gaXMKKwkJICogYWxsb3dlZCB0byBiZSBhIHN5bWxpbmsgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LAorCQkgKiBhbmQgd2Ugc2V0ICdzdGF0ZS0+YmFzZV9kaXJfbGVuJyBiZWxvdywgc3VjaCB0aGF0CisJCSAqIHdlIHRlc3QgdGhlIHBhdGggY29tcG9uZW50cyBvZiB0aGUgcHJlZml4IHdpdGggdGhlCisJCSAqIHN0YXQoKSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRoZSBsc3RhdCgpIGZ1bmN0aW9uLgorCQkgKi8KKwkJaWYgKGhhc19kaXJzX29ubHlfcGF0aChidWYsIGxlbiwgc3RhdGUtPmJhc2VfZGlyX2xlbikpCiAJCQljb250aW51ZTsgLyogb2ssIGl0IGlzIGFscmVhZHkgYSBkaXJlY3RvcnkuICovCiAKIAkJLyoKLQkJICogV2Uga25vdyBzdGF0X3N0YXR1cyA9PSAwIG1lYW5zIHNvbWV0aGluZyBleGlzdHMKLQkJICogdGhlcmUgYW5kIHRoaXMgbWtkaXIgd291bGQgZmFpbCwgYnV0IHRoYXQgaXMgYW4KLQkJICogZXJyb3IgY29kZXBhdGg7IHdlIGRvIG5vdCBjYXJlLCBhcyB3ZSB1bmxpbmsgYW5kCi0JCSAqIG1rZGlyIGFnYWluIGluIHN1Y2ggYSBjYXNlLgorCQkgKiBJZiB0aGlzIG1rZGlyKCkgd291bGQgZmFpbCwgaXQgY291bGQgYmUgdGhhdCB0aGVyZQorCQkgKiBpcyBhbHJlYWR5IGEgc3ltbGluayBvciBzb21ldGhpbmcgZWxzZSBleGlzdHMKKwkJICogdGhlcmUsIHRoZXJlZm9yZSB3ZSB0aGVuIHRyeSB0byB1bmxpbmsgaXQgYW5kIHRyeQorCQkgKiBvbmUgbW9yZSB0aW1lIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5LgogCQkgKi8KIAkJaWYgKG1rZGlyKGJ1ZiwgMDc3NykpIHsKIAkJCWlmIChlcnJubyA9PSBFRVhJU1QgJiYgc3RhdGUtPmZvcmNlICYmCi0JCQkgICAgIXVubGluayhidWYpICYmICFta2RpcihidWYsIDA3NzcpKQorCQkJICAgICF1bmxpbmtfb3Jfd2FybihidWYpICYmICFta2RpcihidWYsIDA3NzcpKQogCQkJCWNvbnRpbnVlOwotCQkJZGllKCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBhdCAlcyIsIGJ1Zik7CisJCQlkaWVfZXJybm8oImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGF0ICclcyciLCBidWYpOwogCQl9CiAJfQogCWZyZWUoYnVmKTsKQEAgLTU2LDI3ICs1MSwyNSBAQAogCWNoYXIgKm5hbWU7CiAKIAlpZiAoIWRpcikKLQkJZGllKCJjYW5ub3Qgb3BlbmRpciAlcyAoJXMpIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbmRpciAnJXMnIiwgcGF0aCk7CiAJc3RyY3B5KHBhdGhidWYsIHBhdGgpOwogCW5hbWUgPSBwYXRoYnVmICsgc3RybGVuKHBhdGgpOwogCSpuYW1lKysgPSAnLyc7CiAJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgewogCQlzdHJ1Y3Qgc3RhdCBzdDsKLQkJaWYgKChkZS0+ZF9uYW1lWzBdID09ICcuJykgJiYKLQkJICAgICgoZGUtPmRfbmFtZVsxXSA9PSAwKSB8fAotCQkgICAgICgoZGUtPmRfbmFtZVsxXSA9PSAnLicpICYmIGRlLT5kX25hbWVbMl0gPT0gMCkpKQorCQlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSkKIAkJCWNvbnRpbnVlOwogCQlzdHJjcHkobmFtZSwgZGUtPmRfbmFtZSk7CiAJCWlmIChsc3RhdChwYXRoYnVmLCAmc3QpKQotCQkJZGllKCJjYW5ub3QgbHN0YXQgJXMgKCVzKSIsIHBhdGhidWYsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oImNhbm5vdCBsc3RhdCAnJXMnIiwgcGF0aGJ1Zik7CiAJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKQogCQkJcmVtb3ZlX3N1YnRyZWUocGF0aGJ1Zik7CiAJCWVsc2UgaWYgKHVubGluayhwYXRoYnVmKSkKLQkJCWRpZSgiY2Fubm90IHVubGluayAlcyAoJXMpIiwgcGF0aGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IHVubGluayAnJXMnIiwgcGF0aGJ1Zik7CiAJfQogCWNsb3NlZGlyKGRpcik7CiAJaWYgKHJtZGlyKHBhdGgpKQotCQlkaWUoImNhbm5vdCBybWRpciAlcyAoJXMpIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJjYW5ub3Qgcm1kaXIgJyVzJyIsIHBhdGgpOwogfQogCiBzdGF0aWMgaW50IGNyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBtb2RlKQpAQCAtODUsNyArNzgsNyBAQAogCXJldHVybiBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgbW9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkICpyZWFkX2Jsb2JfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3N0YXRpYyB2b2lkICpyZWFkX2Jsb2JfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKIHsKIAllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJdm9pZCAqbmV3ID0gcmVhZF9zaGExX2ZpbGUoY2UtPnNoYTEsICZ0eXBlLCBzaXplKTsKQEAgLTEwMCwzNiArOTMsNTIgQEAKIAogc3RhdGljIGludCB3cml0ZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBpbnQgdG9fdGVtcGZpbGUpCiB7Ci0JaW50IGZkOwotCWxvbmcgd3JvdGU7CisJdW5zaWduZWQgaW50IGNlX21vZGVfc19pZm10ID0gY2UtPmNlX21vZGUgJiBTX0lGTVQ7CisJaW50IGZkLCByZXQsIGZzdGF0X2RvbmUgPSAwOworCWNoYXIgKm5ldzsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzaXplX3Qgd3JvdGUsIG5ld3NpemUgPSAwOworCXN0cnVjdCBzdGF0IHN0OwogCi0Jc3dpdGNoIChjZS0+Y2VfbW9kZSAmIFNfSUZNVCkgewotCQljaGFyICpuZXc7Ci0JCXN0cnVjdCBzdHJidWYgYnVmOwotCQl1bnNpZ25lZCBsb25nIHNpemU7Ci0KKwlzd2l0Y2ggKGNlX21vZGVfc19pZm10KSB7CiAJY2FzZSBTX0lGUkVHOgotCQluZXcgPSByZWFkX2Jsb2JfZW50cnkoY2UsIHBhdGgsICZzaXplKTsKKwljYXNlIFNfSUZMTks6CisJCW5ldyA9IHJlYWRfYmxvYl9lbnRyeShjZSwgJnNpemUpOwogCQlpZiAoIW5ldykKIAkJCXJldHVybiBlcnJvcigiZ2l0IGNoZWNrb3V0LWluZGV4OiB1bmFibGUgdG8gcmVhZCBzaGExIGZpbGUgb2YgJXMgKCVzKSIsCiAJCQkJcGF0aCwgc2hhMV90b19oZXgoY2UtPnNoYTEpKTsKIAorCQlpZiAoY2VfbW9kZV9zX2lmbXQgPT0gU19JRkxOSyAmJiBoYXNfc3ltbGlua3MgJiYgIXRvX3RlbXBmaWxlKSB7CisJCQlyZXQgPSBzeW1saW5rKG5ldywgcGF0aCk7CisJCQlmcmVlKG5ldyk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiBlcnJvcigiZ2l0IGNoZWNrb3V0LWluZGV4OiB1bmFibGUgdG8gY3JlYXRlIHN5bWxpbmsgJXMgKCVzKSIsCisJCQkJCSAgICAgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWJyZWFrOworCQl9CisKIAkJLyoKIAkJICogQ29udmVydCBmcm9tIGdpdCBpbnRlcm5hbCBmb3JtYXQgdG8gd29ya2luZyB0cmVlIGZvcm1hdAogCQkgKi8KLQkJc3RyYnVmX2luaXQoJmJ1ZiwgMCk7Ci0JCWlmIChjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShjZS0+bmFtZSwgbmV3LCBzaXplLCAmYnVmKSkgewotCQkJc2l6ZV90IG5ld3NpemUgPSAwOworCQlpZiAoY2VfbW9kZV9zX2lmbXQgPT0gU19JRlJFRyAmJgorCQkgICAgY29udmVydF90b193b3JraW5nX3RyZWUoY2UtPm5hbWUsIG5ldywgc2l6ZSwgJmJ1ZikpIHsKIAkJCWZyZWUobmV3KTsKIAkJCW5ldyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJm5ld3NpemUpOwogCQkJc2l6ZSA9IG5ld3NpemU7CiAJCX0KIAogCQlpZiAodG9fdGVtcGZpbGUpIHsKLQkJCXN0cmNweShwYXRoLCAiLm1lcmdlX2ZpbGVfWFhYWFhYIik7CisJCQlpZiAoY2VfbW9kZV9zX2lmbXQgPT0gU19JRlJFRykKKwkJCQlzdHJjcHkocGF0aCwgIi5tZXJnZV9maWxlX1hYWFhYWCIpOworCQkJZWxzZQorCQkJCXN0cmNweShwYXRoLCAiLm1lcmdlX2xpbmtfWFhYWFhYIik7CiAJCQlmZCA9IG1rc3RlbXAocGF0aCk7Ci0JCX0gZWxzZQorCQl9IGVsc2UgaWYgKGNlX21vZGVfc19pZm10ID09IFNfSUZSRUcpIHsKIAkJCWZkID0gY3JlYXRlX2ZpbGUocGF0aCwgY2UtPmNlX21vZGUpOworCQl9IGVsc2UgeworCQkJZmQgPSBjcmVhdGVfZmlsZShwYXRoLCAwNjY2KTsKKwkJfQogCQlpZiAoZmQgPCAwKSB7CiAJCQlmcmVlKG5ldyk7CiAJCQlyZXR1cm4gZXJyb3IoImdpdCBjaGVja291dC1pbmRleDogdW5hYmxlIHRvIGNyZWF0ZSBmaWxlICVzICglcykiLApAQCAtMTM3LDQxICsxNDYsMTcgQEAKIAkJfQogCiAJCXdyb3RlID0gd3JpdGVfaW5fZnVsbChmZCwgbmV3LCBzaXplKTsKKwkJLyogdXNlIGZzdGF0KCkgb25seSB3aGVuIHBhdGggPT0gY2UtPm5hbWUgKi8KKwkJaWYgKGZzdGF0X2lzX3JlbGlhYmxlKCkgJiYKKwkJICAgIHN0YXRlLT5yZWZyZXNoX2NhY2hlICYmICF0b190ZW1wZmlsZSAmJiAhc3RhdGUtPmJhc2VfZGlyX2xlbikgeworCQkJZnN0YXQoZmQsICZzdCk7CisJCQlmc3RhdF9kb25lID0gMTsKKwkJfQogCQljbG9zZShmZCk7CiAJCWZyZWUobmV3KTsKIAkJaWYgKHdyb3RlICE9IHNpemUpCiAJCQlyZXR1cm4gZXJyb3IoImdpdCBjaGVja291dC1pbmRleDogdW5hYmxlIHRvIHdyaXRlIGZpbGUgJXMiLCBwYXRoKTsKIAkJYnJlYWs7Ci0JY2FzZSBTX0lGTE5LOgotCQluZXcgPSByZWFkX2Jsb2JfZW50cnkoY2UsIHBhdGgsICZzaXplKTsKLQkJaWYgKCFuZXcpCi0JCQlyZXR1cm4gZXJyb3IoImdpdCBjaGVja291dC1pbmRleDogdW5hYmxlIHRvIHJlYWQgc2hhMSBmaWxlIG9mICVzICglcykiLAotCQkJCXBhdGgsIHNoYTFfdG9faGV4KGNlLT5zaGExKSk7Ci0JCWlmICh0b190ZW1wZmlsZSB8fCAhaGFzX3N5bWxpbmtzKSB7Ci0JCQlpZiAodG9fdGVtcGZpbGUpIHsKLQkJCQlzdHJjcHkocGF0aCwgIi5tZXJnZV9saW5rX1hYWFhYWCIpOwotCQkJCWZkID0gbWtzdGVtcChwYXRoKTsKLQkJCX0gZWxzZQotCQkJCWZkID0gY3JlYXRlX2ZpbGUocGF0aCwgMDY2Nik7Ci0JCQlpZiAoZmQgPCAwKSB7Ci0JCQkJZnJlZShuZXcpOwotCQkJCXJldHVybiBlcnJvcigiZ2l0IGNoZWNrb3V0LWluZGV4OiB1bmFibGUgdG8gY3JlYXRlICIKLQkJCQkJCSAiZmlsZSAlcyAoJXMpIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCX0KLQkJCXdyb3RlID0gd3JpdGVfaW5fZnVsbChmZCwgbmV3LCBzaXplKTsKLQkJCWNsb3NlKGZkKTsKLQkJCWZyZWUobmV3KTsKLQkJCWlmICh3cm90ZSAhPSBzaXplKQotCQkJCXJldHVybiBlcnJvcigiZ2l0IGNoZWNrb3V0LWluZGV4OiB1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIsCi0JCQkJCXBhdGgpOwotCQl9IGVsc2UgewotCQkJd3JvdGUgPSBzeW1saW5rKG5ldywgcGF0aCk7Ci0JCQlmcmVlKG5ldyk7Ci0JCQlpZiAod3JvdGUpCi0JCQkJcmV0dXJuIGVycm9yKCJnaXQgY2hlY2tvdXQtaW5kZXg6IHVuYWJsZSB0byBjcmVhdGUgIgotCQkJCQkJICJzeW1saW5rICVzICglcykiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOwotCQl9Ci0JCWJyZWFrOwogCWNhc2UgU19JRkdJVExJTks6CiAJCWlmICh0b190ZW1wZmlsZSkKIAkJCXJldHVybiBlcnJvcigiZ2l0IGNoZWNrb3V0LWluZGV4OiBjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBzdWJwcm9qZWN0ICVzIiwgcGF0aCk7CkBAIC0xODMsOCArMTY4LDggQEAKIAl9CiAKIAlpZiAoc3RhdGUtPnJlZnJlc2hfY2FjaGUpIHsKLQkJc3RydWN0IHN0YXQgc3Q7Ci0JCWxzdGF0KGNlLT5uYW1lLCAmc3QpOworCQlpZiAoIWZzdGF0X2RvbmUpCisJCQlsc3RhdChjZS0+bmFtZSwgJnN0KTsKIAkJZmlsbF9zdGF0X2NhY2hlX2luZm8oY2UsICZzdCk7CiAJfQogCXJldHVybiAwOwpAQCAtMjAxLDYgKzE4Niw3IEBACiAKIAltZW1jcHkocGF0aCwgc3RhdGUtPmJhc2VfZGlyLCBsZW4pOwogCXN0cmNweShwYXRoICsgbGVuLCBjZS0+bmFtZSk7CisJbGVuICs9IGNlX25hbWVsZW4oY2UpOwogCiAJaWYgKCFsc3RhdChwYXRoLCAmc3QpKSB7CiAJCXVuc2lnbmVkIGNoYW5nZWQgPSBjZV9tYXRjaF9zdGF0KGNlLCAmc3QsIENFX01BVENIX0lHTk9SRV9WQUxJRCk7CkBAIC0yMjksNiArMjE1LDYgQEAKIAkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIHVubGluayBvbGQgJyVzJyAoJXMpIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKIAl9IGVsc2UgaWYgKHN0YXRlLT5ub3RfbmV3KQogCQlyZXR1cm4gMDsKLQljcmVhdGVfZGlyZWN0b3JpZXMocGF0aCwgc3RhdGUpOworCWNyZWF0ZV9kaXJlY3RvcmllcyhwYXRoLCBsZW4sIHN0YXRlKTsKIAlyZXR1cm4gd3JpdGVfZW50cnkoY2UsIHBhdGgsIHN0YXRlLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2Vudmlyb25tZW50LmMgYi9lbnZpcm9ubWVudC5jCmluZGV4IGUyNzhiY2UuLjhmNWVhYTcgMTAwNjQ0Ci0tLSBhL2Vudmlyb25tZW50LmMKKysrIGIvZW52aXJvbm1lbnQuYwpAQCAtNDIsNiArNDIsMTIgQEAKIHVuc2lnbmVkIHdoaXRlc3BhY2VfcnVsZV9jZmcgPSBXU19ERUZBVUxUX1JVTEU7CiBlbnVtIGJyYW5jaF90cmFjayBnaXRfYnJhbmNoX3RyYWNrID0gQlJBTkNIX1RSQUNLX1JFTU9URTsKIGVudW0gcmViYXNlX3NldHVwX3R5cGUgYXV0b3JlYmFzZSA9IEFVVE9SRUJBU0VfTkVWRVI7CitlbnVtIHB1c2hfZGVmYXVsdF90eXBlIHB1c2hfZGVmYXVsdCA9IFBVU0hfREVGQVVMVF9NQVRDSElORzsKKyNpZm5kZWYgT0JKRUNUX0NSRUFUSU9OX01PREUKKyNkZWZpbmUgT0JKRUNUX0NSRUFUSU9OX01PREUgT0JKRUNUX0NSRUFUSU9OX1VTRVNfSEFSRExJTktTCisjZW5kaWYKK2VudW0gb2JqZWN0X2NyZWF0aW9uX21vZGUgb2JqZWN0X2NyZWF0aW9uX21vZGUgPSBPQkpFQ1RfQ1JFQVRJT05fTU9ERTsKK2ludCBncmFmdHNfcmVwbGFjZV9wYXJlbnRzID0gMTsKIAogLyogUGFyYWxsZWwgaW5kZXggc3RhdCBkYXRhIHByZWxvYWQ/ICovCiBpbnQgY29yZV9wcmVsb2FkX2luZGV4ID0gMDsKZGlmZiAtLWdpdCBhL2V4ZWNfY21kLmMgYi9leGVjX2NtZC5jCmluZGV4IDM1MWZlYzIuLjQwOGU0ZTUgMTAwNjQ0Ci0tLSBhL2V4ZWNfY21kLmMKKysrIGIvZXhlY19jbWQuYwpAQCAtOSwxNyArOSw1MyBAQAogCiBjb25zdCBjaGFyICpzeXN0ZW1fcGF0aChjb25zdCBjaGFyICpwYXRoKQogewotCWlmICghaXNfYWJzb2x1dGVfcGF0aChwYXRoKSAmJiBhcmd2MF9wYXRoKSB7Ci0JCXN0cnVjdCBzdHJidWYgZCA9IFNUUkJVRl9JTklUOwotCQlzdHJidWZfYWRkZigmZCwgIiVzLyVzIiwgYXJndjBfcGF0aCwgcGF0aCk7Ci0JCXBhdGggPSBzdHJidWZfZGV0YWNoKCZkLCBOVUxMKTsKKyNpZmRlZiBSVU5USU1FX1BSRUZJWAorCXN0YXRpYyBjb25zdCBjaGFyICpwcmVmaXg7CisjZWxzZQorCXN0YXRpYyBjb25zdCBjaGFyICpwcmVmaXggPSBQUkVGSVg7CisjZW5kaWYKKwlzdHJ1Y3Qgc3RyYnVmIGQgPSBTVFJCVUZfSU5JVDsKKworCWlmIChpc19hYnNvbHV0ZV9wYXRoKHBhdGgpKQorCQlyZXR1cm4gcGF0aDsKKworI2lmZGVmIFJVTlRJTUVfUFJFRklYCisJYXNzZXJ0KGFyZ3YwX3BhdGgpOworCWFzc2VydChpc19hYnNvbHV0ZV9wYXRoKGFyZ3YwX3BhdGgpKTsKKworCWlmICghcHJlZml4ICYmCisJICAgICEocHJlZml4ID0gc3RyaXBfcGF0aF9zdWZmaXgoYXJndjBfcGF0aCwgR0lUX0VYRUNfUEFUSCkpICYmCisJICAgICEocHJlZml4ID0gc3RyaXBfcGF0aF9zdWZmaXgoYXJndjBfcGF0aCwgQklORElSKSkgJiYKKwkgICAgIShwcmVmaXggPSBzdHJpcF9wYXRoX3N1ZmZpeChhcmd2MF9wYXRoLCAiZ2l0IikpKSB7CisJCXByZWZpeCA9IFBSRUZJWDsKKwkJZnByaW50ZihzdGRlcnIsICJSVU5USU1FX1BSRUZJWCByZXF1ZXN0ZWQsICIKKwkJCQkiYnV0IHByZWZpeCBjb21wdXRhdGlvbiBmYWlsZWQuICAiCisJCQkJIlVzaW5nIHN0YXRpYyBmYWxsYmFjayAnJXMnLlxuIiwgcHJlZml4KTsKIAl9CisjZW5kaWYKKworCXN0cmJ1Zl9hZGRmKCZkLCAiJXMvJXMiLCBwcmVmaXgsIHBhdGgpOworCXBhdGggPSBzdHJidWZfZGV0YWNoKCZkLCBOVUxMKTsKIAlyZXR1cm4gcGF0aDsKIH0KIAotdm9pZCBnaXRfc2V0X2FyZ3YwX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK2NvbnN0IGNoYXIgKmdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoY29uc3QgY2hhciAqYXJndjApCiB7Ci0JYXJndjBfcGF0aCA9IHBhdGg7CisJY29uc3QgY2hhciAqc2xhc2g7CisKKwlpZiAoIWFyZ3YwIHx8ICEqYXJndjApCisJCXJldHVybiBOVUxMOworCXNsYXNoID0gYXJndjAgKyBzdHJsZW4oYXJndjApOworCisJd2hpbGUgKGFyZ3YwIDw9IHNsYXNoICYmICFpc19kaXJfc2VwKCpzbGFzaCkpCisJCXNsYXNoLS07CisKKwlpZiAoc2xhc2ggPj0gYXJndjApIHsKKwkJYXJndjBfcGF0aCA9IHhzdHJuZHVwKGFyZ3YwLCBzbGFzaCAtIGFyZ3YwKTsKKwkJcmV0dXJuIHNsYXNoICsgMTsKKwl9CisKKwlyZXR1cm4gYXJndjA7CiB9CiAKIHZvaWQgZ2l0X3NldF9hcmd2X2V4ZWNfcGF0aChjb25zdCBjaGFyICpleGVjX3BhdGgpCkBAIC02NSw5ICsxMDEsNyBAQAogCWNvbnN0IGNoYXIgKm9sZF9wYXRoID0gZ2V0ZW52KCJQQVRIIik7CiAJc3RydWN0IHN0cmJ1ZiBuZXdfcGF0aCA9IFNUUkJVRl9JTklUOwogCi0JYWRkX3BhdGgoJm5ld19wYXRoLCBhcmd2X2V4ZWNfcGF0aCk7Ci0JYWRkX3BhdGgoJm5ld19wYXRoLCBnZXRlbnYoRVhFQ19QQVRIX0VOVklST05NRU5UKSk7Ci0JYWRkX3BhdGgoJm5ld19wYXRoLCBzeXN0ZW1fcGF0aChHSVRfRVhFQ19QQVRIKSk7CisJYWRkX3BhdGgoJm5ld19wYXRoLCBnaXRfZXhlY19wYXRoKCkpOwogCWFkZF9wYXRoKCZuZXdfcGF0aCwgYXJndjBfcGF0aCk7CiAKIAlpZiAob2xkX3BhdGgpCmRpZmYgLS1naXQgYS9leGVjX2NtZC5oIGIvZXhlY19jbWQuaAppbmRleCA1OTRmOTYxLi5lMmI1NDZiIDEwMDY0NAotLS0gYS9leGVjX2NtZC5oCisrKyBiL2V4ZWNfY21kLmgKQEAgLTIsOCArMiw4IEBACiAjZGVmaW5lIEdJVF9FWEVDX0NNRF9ICiAKIGV4dGVybiB2b2lkIGdpdF9zZXRfYXJndl9leGVjX3BhdGgoY29uc3QgY2hhciAqZXhlY19wYXRoKTsKLWV4dGVybiB2b2lkIGdpdF9zZXRfYXJndjBfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKLWV4dGVybiBjb25zdCBjaGFyKiBnaXRfZXhlY19wYXRoKHZvaWQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X2V4ZWNfcGF0aCh2b2lkKTsKIGV4dGVybiB2b2lkIHNldHVwX3BhdGgodm9pZCk7CiBleHRlcm4gY29uc3QgY2hhciAqKnByZXBhcmVfZ2l0X2NtZChjb25zdCBjaGFyICoqYXJndik7CiBleHRlcm4gaW50IGV4ZWN2X2dpdF9jbWQoY29uc3QgY2hhciAqKmFyZ3YpOyAvKiBOVUxMIHRlcm1pbmF0ZWQgKi8KZGlmZiAtLWdpdCBhL2Zhc3QtaW1wb3J0LmMgYi9mYXN0LWltcG9ydC5jCmluZGV4IGYyNDZkNTMuLjdlZjk4NjUgMTAwNjQ0Ci0tLSBhL2Zhc3QtaW1wb3J0LmMKKysrIGIvZmFzdC1pbXBvcnQuYwpAQCAtMSw0ICsxLDUgQEAKIC8qCisoU2VlIERvY3VtZW50YXRpb24vZ2l0LWZhc3QtaW1wb3J0LnR4dCBmb3IgbWFpbnRhaW5lZCBkb2N1bWVudGF0aW9uLikKIEZvcm1hdCBvZiBTVERJTiBzdHJlYW06CiAKICAgc3RyZWFtIDo6PSBjbWQqOwpAQCAtMTgsOCArMTksOCBAQAogCiAgIG5ld19jb21taXQgOjo9ICdjb21taXQnIHNwIHJlZl9zdHIgbGYKICAgICBtYXJrPwotICAgICgnYXV0aG9yJyBzcCBuYW1lICc8JyBlbWFpbCAnPicgd2hlbiBsZik/Ci0gICAgJ2NvbW1pdHRlcicgc3AgbmFtZSAnPCcgZW1haWwgJz4nIHdoZW4gbGYKKyAgICAoJ2F1dGhvcicgc3AgbmFtZSBzcCAnPCcgZW1haWwgJz4nIHNwIHdoZW4gbGYpPworICAgICdjb21taXR0ZXInIHNwIG5hbWUgc3AgJzwnIGVtYWlsICc+JyBzcCB3aGVuIGxmCiAgICAgY29tbWl0X21zZwogICAgICgnZnJvbScgc3AgKHJlZl9zdHIgfCBoZXhzaGExIHwgc2hhMWV4cF9zdHIgfCBpZG51bSkgbGYpPwogICAgICgnbWVyZ2UnIHNwIChyZWZfc3RyIHwgaGV4c2hhMSB8IHNoYTFleHBfc3RyIHwgaWRudW0pIGxmKSoKQEAgLTQzLDcgKzQ0LDcgQEAKIAogICBuZXdfdGFnIDo6PSAndGFnJyBzcCB0YWdfc3RyIGxmCiAgICAgJ2Zyb20nIHNwIChyZWZfc3RyIHwgaGV4c2hhMSB8IHNoYTFleHBfc3RyIHwgaWRudW0pIGxmCi0gICAgKCd0YWdnZXInIHNwIG5hbWUgJzwnIGVtYWlsICc+JyB3aGVuIGxmKT8KKyAgICAoJ3RhZ2dlcicgc3AgbmFtZSBzcCAnPCcgZW1haWwgJz4nIHNwIHdoZW4gbGYpPwogICAgIHRhZ19tc2c7CiAgIHRhZ19tc2cgOjo9IGRhdGE7CiAKQEAgLTc1LDcgKzc2LDcgQEAKICAgICBkZWxpbSBsZjsKIAogICAgICAjIG5vdGU6IGRlY2xlbiBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiBiaW5hcnlfZGF0YSBpbiBieXRlcy4KLSAgICAgIyBkZWNsZW4gZG9lcyBub3QgaW5jbHVkZSB0aGUgbGYgcHJlY2VlZGluZyB0aGUgYmluYXJ5IGRhdGEuCisgICAgICMgZGVjbGVuIGRvZXMgbm90IGluY2x1ZGUgdGhlIGxmIHByZWNlZGluZyB0aGUgYmluYXJ5IGRhdGEuCiAgICAgICMKICAgZXhhY3RfZGF0YSA6Oj0gJ2RhdGEnIHNwIGRlY2xlbiBsZgogICAgIGJpbmFyeV9kYXRhOwpAQCAtMTMyLDggKzEzMyw4IEBACiAgICAgICMgYWx3YXlzIGVzY2FwZXMgdGhlIHJlbGF0ZWQgaW5wdXQgZnJvbSBjb21tZW50IHByb2Nlc3NpbmcuCiAgICAgICMKICAgICAgIyBJbiBjYXNlIGl0IGlzIG5vdCBjbGVhciwgdGhlICcjJyB0aGF0IHN0YXJ0cyB0aGUgY29tbWVudAotICAgICAjIG11c3QgYmUgdGhlIGZpcnN0IGNoYXJhY3RlciBvbiB0aGF0IHRoZSBsaW5lIChhbiBsZiBoYXZlCi0gICAgICMgcHJlY2VlZGVkIGl0KS4KKyAgICAgIyBtdXN0IGJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24gdGhhdCBsaW5lIChhbiBsZgorICAgICAjIHByZWNlZGVkIGl0KS4KICAgICAgIwogICBjb21tZW50IDo6PSAnIycgbm90X2xmKiBsZjsKICAgbm90X2xmICA6Oj0gIyBBbnkgYnl0ZSB0aGF0IGlzIG5vdCBBU0NJSSBuZXdsaW5lIChMRik7CkBAIC0xNTAsNiArMTUxLDcgQEAKICNpbmNsdWRlICJyZWZzLmgiCiAjaW5jbHVkZSAiY3N1bS1maWxlLmgiCiAjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgogCiAjZGVmaW5lIFBBQ0tfSURfQklUUyAxNgogI2RlZmluZSBNQVhfUEFDS19JRCAoKDE8PFBBQ0tfSURfQklUUyktMSkKQEAgLTIxMCw3ICsyMTIsNyBAQAogc3RydWN0IHRyZWVfZW50cnkKIHsKIAlzdHJ1Y3QgdHJlZV9jb250ZW50ICp0cmVlOwotCXN0cnVjdCBhdG9tX3N0ciogbmFtZTsKKwlzdHJ1Y3QgYXRvbV9zdHIgKm5hbWU7CiAJc3RydWN0IHRyZWVfZW50cnlfbXMKIAl7CiAJCXVpbnQxNl90IG1vZGU7CkBAIC0zMTEsNyArMzEzLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5X3Bvb2wgKmJsb2NrczsKIHN0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmplY3RfdGFibGVbMSA8PCAxNl07CiBzdGF0aWMgc3RydWN0IG1hcmtfc2V0ICptYXJrczsKLXN0YXRpYyBjb25zdCBjaGFyKiBtYXJrX2ZpbGU7CitzdGF0aWMgY29uc3QgY2hhciAqbWFya19maWxlOwogCiAvKiBPdXIgbGFzdCBibG9iICovCiBzdGF0aWMgc3RydWN0IGxhc3Rfb2JqZWN0IGxhc3RfYmxvYiA9IHsgU1RSQlVGX0lOSVQsIDAsIDAsIDAgfTsKQEAgLTY3MCw3ICs2NzIsNyBAQAogc3RhdGljIHN0cnVjdCBicmFuY2ggKm5ld19icmFuY2goY29uc3QgY2hhciAqbmFtZSkKIHsKIAl1bnNpZ25lZCBpbnQgaGMgPSBoY19zdHIobmFtZSwgc3RybGVuKG5hbWUpKSAlIGJyYW5jaF90YWJsZV9zejsKLQlzdHJ1Y3QgYnJhbmNoKiBiID0gbG9va3VwX2JyYW5jaChuYW1lKTsKKwlzdHJ1Y3QgYnJhbmNoICpiID0gbG9va3VwX2JyYW5jaChuYW1lKTsKIAogCWlmIChiKQogCQlkaWUoIkludmFsaWQgYXR0ZW1wdCB0byBjcmVhdGUgZHVwbGljYXRlIGJyYW5jaDogJXMiLCBuYW1lKTsKQEAgLTg2Nyw3ICs4NjksNyBAQAogCS8qIEdlbmVyYXRlIHRoZSBmYW4tb3V0IGFycmF5LiAqLwogCWMgPSBpZHg7CiAJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCXN0cnVjdCBvYmplY3RfZW50cnkgKipuZXh0ID0gYzs7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKipuZXh0ID0gYzsKIAkJd2hpbGUgKG5leHQgPCBsYXN0KSB7CiAJCQlpZiAoKCpuZXh0KS0+c2hhMVswXSAhPSBpKQogCQkJCWJyZWFrOwpAQCAtOTAxLDE1ICs5MDMsMTIgQEAKIAlzdGF0aWMgY29uc3QgY2hhciAqa2VlcF9tc2cgPSAiZmFzdC1pbXBvcnQiOwogCWludCBrZWVwX2ZkOwogCi0JY2htb2QocGFja19kYXRhLT5wYWNrX25hbWUsIDA0NDQpOwotCWNobW9kKGN1cnJfaW5kZXhfbmFtZSwgMDQ0NCk7Ci0KIAlrZWVwX2ZkID0gb2RiX3BhY2tfa2VlcChuYW1lLCBzaXplb2YobmFtZSksIHBhY2tfZGF0YS0+c2hhMSk7CiAJaWYgKGtlZXBfZmQgPCAwKQotCQlkaWUoImNhbm5vdCBjcmVhdGUga2VlcCBmaWxlIik7CisJCWRpZV9lcnJubygiY2Fubm90IGNyZWF0ZSBrZWVwIGZpbGUiKTsKIAl3cml0ZV9vcl9kaWUoa2VlcF9mZCwga2VlcF9tc2csIHN0cmxlbihrZWVwX21zZykpOwogCWlmIChjbG9zZShrZWVwX2ZkKSkKLQkJZGllKCJmYWlsZWQgdG8gd3JpdGUga2VlcCBmaWxlIik7CisJCWRpZV9lcnJubygiZmFpbGVkIHRvIHdyaXRlIGtlZXAgZmlsZSIpOwogCiAJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvcGFjay9wYWNrLSVzLnBhY2siLAogCQkgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwgc2hhMV90b19oZXgocGFja19kYXRhLT5zaGExKSk7CkBAIC05MzIsNyArOTMxLDcgQEAKIAkJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBhbGxfcGFja3Nba107CiAJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzL3BhY2svcGFjay0lcy5rZWVwIiwKIAkJCSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCBzaGExX3RvX2hleChwLT5zaGExKSk7Ci0JCXVubGluayhuYW1lKTsKKwkJdW5saW5rX29yX3dhcm4obmFtZSk7CiAJfQogfQogCkBAIC05NTQsNyArOTUzLDcgQEAKIAkJY2xvc2UocGFja19kYXRhLT5wYWNrX2ZkKTsKIAkJaWR4X25hbWUgPSBrZWVwX3BhY2soY3JlYXRlX2luZGV4KCkpOwogCi0JCS8qIFJlZ2lzdGVyIHRoZSBwYWNrZmlsZSB3aXRoIGNvcmUgZ2l0J3MgbWFjaGluYXJ5LiAqLworCQkvKiBSZWdpc3RlciB0aGUgcGFja2ZpbGUgd2l0aCBjb3JlIGdpdCdzIG1hY2hpbmVyeS4gKi8KIAkJbmV3X3AgPSBhZGRfcGFja2VkX2dpdChpZHhfbmFtZSwgc3RybGVuKGlkeF9uYW1lKSwgMSk7CiAJCWlmICghbmV3X3ApCiAJCQlkaWUoImNvcmUgZ2l0IHJlamVjdGVkIGluZGV4ICVzIiwgaWR4X25hbWUpOwpAQCAtOTgyLDcgKzk4MSw3IEBACiAJfQogCWVsc2UgewogCQljbG9zZShvbGRfcC0+cGFja19mZCk7Ci0JCXVubGluayhvbGRfcC0+cGFja19uYW1lKTsKKwkJdW5saW5rX29yX3dhcm4ob2xkX3AtPnBhY2tfbmFtZSk7CiAJfQogCWZyZWUob2xkX3ApOwogCkBAIC0xMDM2LDcgKzEwMzUsNyBAQAogCWdpdF9TSEFfQ1RYIGM7CiAJel9zdHJlYW0gczsKIAotCWhkcmxlbiA9IHNwcmludGYoKGNoYXIqKWhkciwiJXMgJWx1IiwgdHlwZW5hbWUodHlwZSksCisJaGRybGVuID0gc3ByaW50ZigoY2hhciAqKWhkciwiJXMgJWx1IiwgdHlwZW5hbWUodHlwZSksCiAJCSh1bnNpZ25lZCBsb25nKWRhdC0+bGVuKSArIDE7CiAJZ2l0X1NIQTFfSW5pdCgmYyk7CiAJZ2l0X1NIQTFfVXBkYXRlKCZjLCBoZHIsIGhkcmxlbik7CkBAIC0xMjE4LDcgKzEyMTcsNyBAQAogCiBzdGF0aWMgdm9pZCBsb2FkX3RyZWUoc3RydWN0IHRyZWVfZW50cnkgKnJvb3QpCiB7Ci0JdW5zaWduZWQgY2hhciogc2hhMSA9IHJvb3QtPnZlcnNpb25zWzFdLnNoYTE7CisJdW5zaWduZWQgY2hhciAqc2hhMSA9IHJvb3QtPnZlcnNpb25zWzFdLnNoYTE7CiAJc3RydWN0IG9iamVjdF9lbnRyeSAqbXlvZTsKIAlzdHJ1Y3QgdHJlZV9jb250ZW50ICp0OwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKQEAgLTEyNTksOCArMTI1OCw4IEBACiAJCWUtPnZlcnNpb25zWzBdLm1vZGUgPSBlLT52ZXJzaW9uc1sxXS5tb2RlOwogCQllLT5uYW1lID0gdG9fYXRvbShjLCBzdHJsZW4oYykpOwogCQljICs9IGUtPm5hbWUtPnN0cl9sZW4gKyAxOwotCQloYXNoY3B5KGUtPnZlcnNpb25zWzBdLnNoYTEsICh1bnNpZ25lZCBjaGFyKiljKTsKLQkJaGFzaGNweShlLT52ZXJzaW9uc1sxXS5zaGExLCAodW5zaWduZWQgY2hhciopYyk7CisJCWhhc2hjcHkoZS0+dmVyc2lvbnNbMF0uc2hhMSwgKHVuc2lnbmVkIGNoYXIgKiljKTsKKwkJaGFzaGNweShlLT52ZXJzaW9uc1sxXS5zaGExLCAodW5zaWduZWQgY2hhciAqKWMpOwogCQljICs9IDIwOwogCX0KIAlmcmVlKGJ1Zik7CkBAIC0xNzQ0LDIxICsxNzQzLDE5IEBACiBzdGF0aWMgaW50IHZhbGlkYXRlX3Jhd19kYXRlKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqcmVzdWx0LCBpbnQgbWF4bGVuKQogewogCWNvbnN0IGNoYXIgKm9yaWdfc3JjID0gc3JjOwotCWNoYXIgKmVuZHAsIHNpZ247Ci0JdW5zaWduZWQgbG9uZyBkYXRlOworCWNoYXIgKmVuZHA7CiAKIAllcnJubyA9IDA7CiAKLQlkYXRlID0gc3RydG91bChzcmMsICZlbmRwLCAxMCk7CisJc3RydG91bChzcmMsICZlbmRwLCAxMCk7CiAJaWYgKGVycm5vIHx8IGVuZHAgPT0gc3JjIHx8ICplbmRwICE9ICcgJykKIAkJcmV0dXJuIC0xOwogCiAJc3JjID0gZW5kcCArIDE7CiAJaWYgKCpzcmMgIT0gJy0nICYmICpzcmMgIT0gJysnKQogCQlyZXR1cm4gLTE7Ci0Jc2lnbiA9ICpzcmM7CiAKLQlkYXRlID0gc3RydG91bChzcmMgKyAxLCAmZW5kcCwgMTApOworCXN0cnRvdWwoc3JjICsgMSwgJmVuZHAsIDEwKTsKIAlpZiAoZXJybm8gfHwgZW5kcCA9PSBzcmMgfHwgKmVuZHAgfHwgKGVuZHAgLSBvcmlnX3NyYykgPj0gbWF4bGVuKQogCQlyZXR1cm4gLTE7CiAKQEAgLTIzNDUsNyArMjM0Miw3IEBACiAJY2hhciBsaW5lWzUxMl07CiAJRklMRSAqZiA9IGZvcGVuKGlucHV0X2ZpbGUsICJyIik7CiAJaWYgKCFmKQotCQlkaWUoImNhbm5vdCByZWFkICVzOiAlcyIsIGlucHV0X2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiY2Fubm90IHJlYWQgJyVzJyIsIGlucHV0X2ZpbGUpOwogCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CiAJCXVpbnRtYXhfdCBtYXJrOwogCQljaGFyICplbmQ7CkBAIC0yNDAzLDYgKzI0MDAsOCBAQAogewogCXVuc2lnbmVkIGludCBpLCBzaG93X3N0YXRzID0gMTsKIAorCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CisKIAlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CiAJZ2l0X2NvbmZpZyhnaXRfcGFja19jb25maWcsIE5VTEwpOwogCWlmICghcGFja19jb21wcmVzc2lvbl9zZWVuICYmIGNvcmVfY29tcHJlc3Npb25fc2VlbikKQEAgLTI0NDksNyArMjQ0OCw3IEBACiAJCQkJZmNsb3NlKHBhY2tfZWRnZXMpOwogCQkJcGFja19lZGdlcyA9IGZvcGVuKGEgKyAyMCwgImEiKTsKIAkJCWlmICghcGFja19lZGdlcykKLQkJCQlkaWUoIkNhbm5vdCBvcGVuICVzOiAlcyIsIGEgKyAyMCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oIkNhbm5vdCBvcGVuICclcyciLCBhICsgMjApOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAoYSwgIi0tZm9yY2UiKSkKIAkJCWZvcmNlX3VwZGF0ZSA9IDE7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi0tcXVpZXQiKSkKZGlmZiAtLWdpdCBhL2ZzY2suYyBiL2ZzY2suYwppbmRleCA5N2Y3NmM1Li44OTI3OGMxIDEwMDY0NAotLS0gYS9mc2NrLmMKKysrIGIvZnNjay5jCkBAIC0xNDgsMjAgKzE0OCwxNyBAQAogCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKIAl1bnNpZ25lZCBvX21vZGU7CiAJY29uc3QgY2hhciAqb19uYW1lOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm9fc2hhMTsKIAogCWluaXRfdHJlZV9kZXNjKCZkZXNjLCBpdGVtLT5idWZmZXIsIGl0ZW0tPnNpemUpOwogCiAJb19tb2RlID0gMDsKIAlvX25hbWUgPSBOVUxMOwotCW9fc2hhMSA9IE5VTEw7CiAKIAl3aGlsZSAoZGVzYy5zaXplKSB7CiAJCXVuc2lnbmVkIG1vZGU7CiAJCWNvbnN0IGNoYXIgKm5hbWU7Ci0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7CiAKLQkJc2hhMSA9IHRyZWVfZW50cnlfZXh0cmFjdCgmZGVzYywgJm5hbWUsICZtb2RlKTsKKwkJdHJlZV9lbnRyeV9leHRyYWN0KCZkZXNjLCAmbmFtZSwgJm1vZGUpOwogCiAJCWlmIChzdHJjaHIobmFtZSwgJy8nKSkKIAkJCWhhc19mdWxsX3BhdGggPSAxOwpAQCAtMjA3LDcgKzIwNCw2IEBACiAKIAkJb19tb2RlID0gbW9kZTsKIAkJb19uYW1lID0gbmFtZTsKLQkJb19zaGExID0gc2hhMTsKIAl9CiAKIAlyZXR2YWwgPSAwOwpAQCAtMjMzLDcgKzIyOSw3IEBACiAJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQ7CiAJaW50IHBhcmVudHMgPSAwOwogCi0JaWYgKCFjb21taXQtPmRhdGUpCisJaWYgKGNvbW1pdC0+ZGF0ZSA9PSBVTE9OR19NQVgpCiAJCXJldHVybiBlcnJvcl9mdW5jKCZjb21taXQtPm9iamVjdCwgRlNDS19FUlJPUiwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIik7CiAKIAlpZiAobWVtY21wKGJ1ZmZlciwgInRyZWUgIiwgNSkpCmRpZmYgLS1naXQgYS9mc2NrLmggYi9mc2NrLmgKaW5kZXggOTkwZWUwMi4uMDA4NDU2YiAxMDA2NDQKLS0tIGEvZnNjay5oCisrKyBiL2ZzY2suaApAQCAtMjMsNyArMjMsNyBAQAogICogdGhlIHJldHVybiB2YWx1ZSBpczoKICAqICAgIC0xCWVycm9yIGluIHByb2Nlc3NpbmcgdGhlIG9iamVjdAogICogICAgPDAJcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsYmFjaywgd2hpY2ggbGVhZCB0byBhbiBhYm9ydAotICogICAgPjAJcmV0dXJuIHZhbHVlIG9mIHRoZSBmaXJzdCBzaWdhbGVkIGVycm9yID4wIChpbiB0aGUgY2FzZSBvZiBubyBvdGhlciBlcnJvcnMpCisgKiAgICA+MAlyZXR1cm4gdmFsdWUgb2YgdGhlIGZpcnN0IHNpZ25hbGVkIGVycm9yID4wIChpbiB0aGUgY2FzZSBvZiBubyBvdGhlciBlcnJvcnMpCiAgKiAgICAwCQlldmVyeXRoaW5nIE9LCiAgKi8KIGludCBmc2NrX3dhbGsoc3RydWN0IG9iamVjdCAqb2JqLCBmc2NrX3dhbGtfZnVuYyB3YWxrLCB2b2lkICpkYXRhKTsKZGlmZiAtLWdpdCBhL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwgYi9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsCmluZGV4IGIwMjIzYzMuLmRmOWYyMzEgMTAwNzU1Ci0tLSBhL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKKysrIGIvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybApAQCAtMyw2ICszLDggQEAKIHVzZSBzdHJpY3Q7CiB1c2UgR2l0OwogCitiaW5tb2RlKFNURE9VVCwgIjpyYXciKTsKKwogbXkgJHJlcG8gPSBHaXQtPnJlcG9zaXRvcnkoKTsKIAogbXkgJG1lbnVfdXNlX2NvbG9yID0gJHJlcG8tPmdldF9jb2xvcmJvb2woJ2NvbG9yLmludGVyYWN0aXZlJyk7CkBAIC0xMiw2ICsxNCwxMyBAQAogCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5pbnRlcmFjdGl2ZS5oZWFkZXInLCAnYm9sZCcpLAogCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5pbnRlcmFjdGl2ZS5oZWxwJywgJ3JlZCBib2xkJyksCiAJKSA6ICgpOworbXkgJGVycm9yX2NvbG9yID0gKCk7CitpZiAoJG1lbnVfdXNlX2NvbG9yKSB7CisJbXkgJGhlbHBfY29sb3Jfc3BlYyA9ICgkcmVwby0+Y29uZmlnKCdjb2xvci5pbnRlcmFjdGl2ZS5oZWxwJykgb3IKKwkJCQkncmVkIGJvbGQnKTsKKwkkZXJyb3JfY29sb3IgPSAkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5pbnRlcmFjdGl2ZS5lcnJvcicsCisJCQkJCSRoZWxwX2NvbG9yX3NwZWMpOworfQogCiBteSAkZGlmZl91c2VfY29sb3IgPSAkcmVwby0+Z2V0X2NvbG9yYm9vbCgnY29sb3IuZGlmZicpOwogbXkgKCRmcmFnaW5mb19jb2xvcikgPQpAQCAtMzMsNiArNDIsMTcgQEAKIAogbXkgJG5vcm1hbF9jb2xvciA9ICRyZXBvLT5nZXRfY29sb3IoIiIsICJyZXNldCIpOwogCitteSAkdXNlX3JlYWRrZXkgPSAwOworc3ViIFJlYWRNb2RlOworc3ViIFJlYWRLZXk7CitpZiAoJHJlcG8tPmNvbmZpZ19ib29sKCJpbnRlcmFjdGl2ZS5zaW5nbGVrZXkiKSkgeworCWV2YWwgeworCQlyZXF1aXJlIFRlcm06OlJlYWRLZXk7CisJCVRlcm06OlJlYWRLZXktPmltcG9ydDsKKwkJJHVzZV9yZWFka2V5ID0gMTsKKwl9OworfQorCiBzdWIgY29sb3JlZCB7CiAJbXkgJGNvbG9yID0gc2hpZnQ7CiAJbXkgJHN0cmluZyA9IGpvaW4oIiIsIEBfKTsKQEAgLTczLDYgKzkzLDQ3IEBACiB9CiBjaG9tcCgkR0lUX0RJUik7CiAKK215ICVjcXVvdGVfbWFwID0gKAorICJiIiA9PiBjaHIoOCksCisgInQiID0+IGNocig5KSwKKyAibiIgPT4gY2hyKDEwKSwKKyAidiIgPT4gY2hyKDExKSwKKyAiZiIgPT4gY2hyKDEyKSwKKyAiciIgPT4gY2hyKDEzKSwKKyAiXFwiID0+ICJcXCIsCisgIlwwNDIiID0+ICJcMDQyIiwKKyk7CisKK3N1YiB1bnF1b3RlX3BhdGggeworCWxvY2FsICgkXykgPSBAXzsKKwlteSAoJHJldHZhbCwgJHJlbWFpbmRlcik7CisJaWYgKCEvXlwwNDIoLiopXDA0MiQvKSB7CisJCXJldHVybiAkXzsKKwl9CisJKCRfLCAkcmV0dmFsKSA9ICgkMSwgIiIpOworCXdoaWxlICgvXihbXlxcXSopXFwoLiopJC8pIHsKKwkJJHJlbWFpbmRlciA9ICQyOworCQkkcmV0dmFsIC49ICQxOworCQlmb3IgKCRyZW1haW5kZXIpIHsKKwkJCWlmICgvXihbMC0zXVswLTddWzAtN10pKC4qKSQvKSB7CisJCQkJJHJldHZhbCAuPSBjaHIob2N0KCQxKSk7CisJCQkJJF8gPSAkMjsKKwkJCQlsYXN0OworCQkJfQorCQkJaWYgKC9eKFtcXFwwNDJidG52ZnJdKSguKikkLykgeworCQkJCSRyZXR2YWwgLj0gJGNxdW90ZV9tYXB7JDF9OworCQkJCSRfID0gJDI7CisJCQkJbGFzdDsKKwkJCX0KKwkJCSMgVGhpcyBpcyBtYWxmb3JtZWQgLS0ganVzdCByZXR1cm4gaXQgYXMtaXMgZm9yIG5vdy4KKwkJCXJldHVybiAkX1swXTsKKwkJfQorCQkkXyA9ICRyZW1haW5kZXI7CisJfQorCSRyZXR2YWwgLj0gJF87CisJcmV0dXJuICRyZXR2YWw7Cit9CisKIHN1YiByZWZyZXNoIHsKIAlteSAkZmg7CiAJb3BlbiAkZmgsICdnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCB8JwpAQCAtODYsNyArMTQ3LDcgQEAKIHN1YiBsaXN0X3VudHJhY2tlZCB7CiAJbWFwIHsKIAkJY2hvbXAgJF87Ci0JCSRfOworCQl1bnF1b3RlX3BhdGgoJF8pOwogCX0KIAlydW5fY21kX3BpcGUocXcoZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZS1zdGFuZGFyZCAtLSksIEBBUkdWKTsKIH0KQEAgLTEyMyw3ICsxODQsOCBAQAogCiAJaWYgKEBBUkdWKSB7CiAJCUB0cmFja2VkID0gbWFwIHsKLQkJCWNob21wICRfOyAkXzsKKwkJCWNob21wICRfOworCQkJdW5xdW90ZV9wYXRoKCRfKTsKIAkJfSBydW5fY21kX3BpcGUocXcoZ2l0IGxzLWZpbGVzIC0tZXhjbHVkZS1zdGFuZGFyZCAtLSksIEBBUkdWKTsKIAkJcmV0dXJuIGlmICghQHRyYWNrZWQpOwogCX0KQEAgLTEzNSw2ICsxOTcsNyBAQAogCQlpZiAoKCRhZGQsICRkZWwsICRmaWxlKSA9CiAJCSAgICAvXihbLVxkXSspCShbLVxkXSspCSguKikvKSB7CiAJCQlteSAoJGNoYW5nZSwgJGJpbik7CisJCQkkZmlsZSA9IHVucXVvdGVfcGF0aCgkZmlsZSk7CiAJCQlpZiAoJGFkZCBlcSAnLScgJiYgJGRlbCBlcSAnLScpIHsKIAkJCQkkY2hhbmdlID0gJ2JpbmFyeSc7CiAJCQkJJGJpbiA9IDE7CkBAIC0xNTAsNiArMjEzLDcgQEAKIAkJfQogCQllbHNpZiAoKCRhZGRkZWwsICRmaWxlKSA9CiAJCSAgICAgICAvXiAoY3JlYXRlfGRlbGV0ZSkgbW9kZSBbMC03XSsgKC4qKSQvKSB7CisJCQkkZmlsZSA9IHVucXVvdGVfcGF0aCgkZmlsZSk7CiAJCQkkZGF0YXskZmlsZX17SU5ERVhfQUREREVMfSA9ICRhZGRkZWw7CiAJCX0KIAl9CkBAIC0xNTcsNiArMjIxLDcgQEAKIAlmb3IgKHJ1bl9jbWRfcGlwZShxdyhnaXQgZGlmZi1maWxlcyAtLW51bXN0YXQgLS1zdW1tYXJ5IC0tKSwgQHRyYWNrZWQpKSB7CiAJCWlmICgoJGFkZCwgJGRlbCwgJGZpbGUpID0KIAkJICAgIC9eKFstXGRdKykJKFstXGRdKykJKC4qKS8pIHsKKwkJCSRmaWxlID0gdW5xdW90ZV9wYXRoKCRmaWxlKTsKIAkJCWlmICghZXhpc3RzICRkYXRheyRmaWxlfSkgewogCQkJCSRkYXRheyRmaWxlfSA9ICt7CiAJCQkJCUlOREVYID0+ICd1bmNoYW5nZWQnLApAQCAtMTc4LDYgKzI0Myw3IEBACiAJCX0KIAkJZWxzaWYgKCgkYWRkZGVsLCAkZmlsZSkgPQogCQkgICAgICAgL14gKGNyZWF0ZXxkZWxldGUpIG1vZGUgWzAtN10rICguKikkLykgeworCQkJJGZpbGUgPSB1bnF1b3RlX3BhdGgoJGZpbGUpOwogCQkJJGRhdGF7JGZpbGV9e0ZJTEVfQUREREVMfSA9ICRhZGRkZWw7CiAJCX0KIAl9CkBAIC0yODQsNyArMzUwLDggQEAKIAkJCX0KIAkJCSVzZWFyY2ggPSAleyRzZWFyY2h7JGxldHRlcn19OwogCQl9Ci0JCWlmICgkc29mdF9saW1pdCAmJiAkaiArIDEgPiAkc29mdF9saW1pdCkgeworCQlpZiAob3JkKCRsZXR0ZXJzWzBdKSA+IDEyNyB8fAorCQkgICAgKCRzb2Z0X2xpbWl0ICYmICRqICsgMSA+ICRzb2Z0X2xpbWl0KSkgewogCQkJJHByZWZpeCA9IHVuZGVmOwogCQkJJHJlbWFpbmRlciA9ICRyZXQ7CiAJCX0KQEAgLTMyNSw2ICszOTIsMTAgQEAKIAlyZXR1cm4gIiRwcm9tcHRfY29sb3IkcHJlZml4JG5vcm1hbF9jb2xvciRyZW1haW5kZXIiOwogfQogCitzdWIgZXJyb3JfbXNnIHsKKwlwcmludCBTVERFUlIgY29sb3JlZCAkZXJyb3JfY29sb3IsIEBfOworfQorCiBzdWIgbGlzdF9hbmRfY2hvb3NlIHsKIAlteSAoJG9wdHMsIEBzdHVmZikgPSBAXzsKIAlteSAoQGNob3NlbiwgQHJldHVybik7CkBAIC00MjAsMTIgKzQ5MSwxMiBAQAogCQkJZWxzZSB7CiAJCQkJJGJvdHRvbSA9ICR0b3AgPSBmaW5kX3VuaXF1ZSgkY2hvaWNlLCBAc3R1ZmYpOwogCQkJCWlmICghZGVmaW5lZCAkYm90dG9tKSB7Ci0JCQkJCXByaW50ICJIdWggKCRjaG9pY2UpP1xuIjsKKwkJCQkJZXJyb3JfbXNnICJIdWggKCRjaG9pY2UpP1xuIjsKIAkJCQkJbmV4dCBUT1BMT09QOwogCQkJCX0KIAkJCX0KIAkJCWlmICgkb3B0cy0+e1NJTkdMRVRPTn0gJiYgJGJvdHRvbSAhPSAkdG9wKSB7Ci0JCQkJcHJpbnQgIkh1aCAoJGNob2ljZSk/XG4iOworCQkJCWVycm9yX21zZyAiSHVoICgkY2hvaWNlKT9cbiI7CiAJCQkJbmV4dCBUT1BMT09QOwogCQkJfQogCQkJZm9yICgkaSA9ICRib3R0b20tMTsgJGkgPD0gJHRvcC0xOyAkaSsrKSB7CkBAIC01NDksMTEgKzYyMCwxMiBAQAogCWlmICgkZGlmZl91c2VfY29sb3IpIHsKIAkJQGNvbG9yZWQgPSBydW5fY21kX3BpcGUocXcoZ2l0IGRpZmYtZmlsZXMgLXAgLS1jb2xvciAtLSksICRwYXRoKTsKIAl9Ci0JbXkgKEBodW5rKSA9IHsgVEVYVCA9PiBbXSwgRElTUExBWSA9PiBbXSB9OworCW15IChAaHVuaykgPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10sIFRZUEUgPT4gJ2hlYWRlcicgfTsKIAogCWZvciAobXkgJGkgPSAwOyAkaSA8IEBkaWZmOyAkaSsrKSB7CiAJCWlmICgkZGlmZlskaV0gPX4gL15AQCAvKSB7Ci0JCQlwdXNoIEBodW5rLCB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10gfTsKKwkJCXB1c2ggQGh1bmssIHsgVEVYVCA9PiBbXSwgRElTUExBWSA9PiBbXSwKKwkJCQlUWVBFID0+ICdodW5rJyB9OwogCQl9CiAJCXB1c2ggQHskaHVua1stMV17VEVYVH19LCAkZGlmZlskaV07CiAJCXB1c2ggQHskaHVua1stMV17RElTUExBWX19LApAQCAtNTY1LDggKzYzNyw4IEBACiBzdWIgcGFyc2VfZGlmZl9oZWFkZXIgewogCW15ICRzcmMgPSBzaGlmdDsKIAotCW15ICRoZWFkID0geyBURVhUID0+IFtdLCBESVNQTEFZID0+IFtdIH07Ci0JbXkgJG1vZGUgPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10gfTsKKwlteSAkaGVhZCA9IHsgVEVYVCA9PiBbXSwgRElTUExBWSA9PiBbXSwgVFlQRSA9PiAnaGVhZGVyJyB9OworCW15ICRtb2RlID0geyBURVhUID0+IFtdLCBESVNQTEFZID0+IFtdLCBUWVBFID0+ICdtb2RlJyB9OwogCiAJZm9yIChteSAkaSA9IDA7ICRpIDwgQHskc3JjLT57VEVYVH19OyAkaSsrKSB7CiAJCW15ICRkZXN0ID0gJHNyYy0+e1RFWFR9LT5bJGldID1+IC9eKG9sZHxuZXcpIG1vZGUgKFxkKykkLyA/CkBAIC02MTMsNiArNjg1LDcgQEAKIAkJbXkgJHRoaXMgPSArewogCQkJVEVYVCA9PiBbXSwKIAkJCURJU1BMQVkgPT4gW10sCisJCQlUWVBFID0+ICdodW5rJywKIAkJCU9MRCA9PiAkb19vZnMsCiAJCQlORVcgPT4gJG5fb2ZzLAogCQkJT0NOVCA9PiAwLApAQCAtNjk0LDYgKzc2Nyw5NiBAQAogCXJldHVybiBAc3BsaXQ7CiB9CiAKK3N1YiBmaW5kX2xhc3Rfb19jdHggeworCW15ICgkaXQpID0gQF87CisJbXkgJHRleHQgPSAkaXQtPntURVhUfTsKKwlteSAoJG9fb2ZzLCAkb19jbnQpID0gcGFyc2VfaHVua19oZWFkZXIoJHRleHQtPlswXSk7CisJbXkgJGkgPSBAeyR0ZXh0fTsKKwlteSAkbGFzdF9vX2N0eCA9ICRvX29mcyArICRvX2NudDsKKwl3aGlsZSAoMCA8IC0tJGkpIHsKKwkJbXkgJGxpbmUgPSAkdGV4dC0+WyRpXTsKKwkJaWYgKCRsaW5lID1+IC9eIC8pIHsKKwkJCSRsYXN0X29fY3R4LS07CisJCQluZXh0OworCQl9CisJCWxhc3Q7CisJfQorCXJldHVybiAkbGFzdF9vX2N0eDsKK30KKworc3ViIG1lcmdlX2h1bmsgeworCW15ICgkcHJldiwgJHRoaXMpID0gQF87CisJbXkgKCRvMF9vZnMsICRvMF9jbnQsICRuMF9vZnMsICRuMF9jbnQpID0KKwkgICAgcGFyc2VfaHVua19oZWFkZXIoJHByZXYtPntURVhUfVswXSk7CisJbXkgKCRvMV9vZnMsICRvMV9jbnQsICRuMV9vZnMsICRuMV9jbnQpID0KKwkgICAgcGFyc2VfaHVua19oZWFkZXIoJHRoaXMtPntURVhUfVswXSk7CisKKwlteSAoQGxpbmUsICRpLCAkb2ZzLCAkb19jbnQsICRuX2NudCk7CisJJG9mcyA9ICRvMF9vZnM7CisJJG9fY250ID0gJG5fY250ID0gMDsKKwlmb3IgKCRpID0gMTsgJGkgPCBAeyRwcmV2LT57VEVYVH19OyAkaSsrKSB7CisJCW15ICRsaW5lID0gJHByZXYtPntURVhUfVskaV07CisJCWlmICgkbGluZSA9fiAvXlwrLykgeworCQkJJG5fY250Kys7CisJCQlwdXNoIEBsaW5lLCAkbGluZTsKKwkJCW5leHQ7CisJCX0KKworCQlsYXN0IGlmICgkbzFfb2ZzIDw9ICRvZnMpOworCisJCSRvX2NudCsrOworCQkkb2ZzKys7CisJCWlmICgkbGluZSA9fiAvXiAvKSB7CisJCQkkbl9jbnQrKzsKKwkJfQorCQlwdXNoIEBsaW5lLCAkbGluZTsKKwl9CisKKwlmb3IgKCRpID0gMTsgJGkgPCBAeyR0aGlzLT57VEVYVH19OyAkaSsrKSB7CisJCW15ICRsaW5lID0gJHRoaXMtPntURVhUfVskaV07CisJCWlmICgkbGluZSA9fiAvXlwrLykgeworCQkJJG5fY250Kys7CisJCQlwdXNoIEBsaW5lLCAkbGluZTsKKwkJCW5leHQ7CisJCX0KKwkJJG9mcysrOworCQkkb19jbnQrKzsKKwkJaWYgKCRsaW5lID1+IC9eIC8pIHsKKwkJCSRuX2NudCsrOworCQl9CisJCXB1c2ggQGxpbmUsICRsaW5lOworCX0KKwlteSAkaGVhZCA9ICgiQEAgLSRvMF9vZnMiIC4KKwkJICAgICgoJG9fY250ICE9IDEpID8gIiwkb19jbnQiIDogJycpIC4KKwkJICAgICIgKyRuMF9vZnMiIC4KKwkJICAgICgoJG5fY250ICE9IDEpID8gIiwkbl9jbnQiIDogJycpIC4KKwkJICAgICIgQEBcbiIpOworCUB7JHByZXYtPntURVhUfX0gPSAoJGhlYWQsIEBsaW5lKTsKK30KKworc3ViIGNvYWxlc2NlX292ZXJsYXBwaW5nX2h1bmtzIHsKKwlteSAoQGluKSA9IEBfOworCW15IEBvdXQgPSAoKTsKKworCW15ICgkbGFzdF9vX2N0eCwgJGxhc3Rfd2FzX2RpcnR5KTsKKworCWZvciAoZ3JlcCB7ICRfLT57VVNFfSB9IEBpbikgeworCQlteSAkdGV4dCA9ICRfLT57VEVYVH07CisJCW15ICgkb19vZnMpID0gcGFyc2VfaHVua19oZWFkZXIoJHRleHQtPlswXSk7CisJCWlmIChkZWZpbmVkICRsYXN0X29fY3R4ICYmCisJCSAgICAkb19vZnMgPD0gJGxhc3Rfb19jdHggJiYKKwkJICAgICEkXy0+e0RJUlRZfSAmJgorCQkgICAgISRsYXN0X3dhc19kaXJ0eSkgeworCQkJbWVyZ2VfaHVuaygkb3V0Wy0xXSwgJF8pOworCQl9CisJCWVsc2UgeworCQkJcHVzaCBAb3V0LCAkXzsKKwkJfQorCQkkbGFzdF9vX2N0eCA9IGZpbmRfbGFzdF9vX2N0eCgkb3V0Wy0xXSk7CisJCSRsYXN0X3dhc19kaXJ0eSA9ICRfLT57RElSVFl9OworCX0KKwlyZXR1cm4gQG91dDsKK30KIAogc3ViIGNvbG9yX2RpZmYgewogCXJldHVybiBtYXAgewpAQCAtNzMxLDYgKzg5NCwxMCBAQAogCQl8fCAkRU5We1ZJU1VBTH0gfHwgJEVOVntFRElUT1J9IHx8ICJ2aSI7CiAJc3lzdGVtKCdzaCcsICctYycsICRlZGl0b3IuJyAiJEAiJywgJGVkaXRvciwgJGh1bmtmaWxlKTsKIAorCWlmICgkPyAhPSAwKSB7CisJCXJldHVybiB1bmRlZjsKKwl9CisKIAlvcGVuICRmaCwgJzwnLCAkaHVua2ZpbGUKIAkJb3IgZGllICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3IgcmVhZGluZzogIiAuICQhOwogCW15IEBuZXd0ZXh0ID0gZ3JlcCB7ICEvXiMvIH0gPCRmaD47CkBAIC03NTgsMTEgKzkyNSwzMiBAQAogCXJldHVybiBjbG9zZSAkZmg7CiB9CiAKK3N1YiBfcmVzdG9yZV90ZXJtaW5hbF9hbmRfZGllIHsKKwlSZWFkTW9kZSAncmVzdG9yZSc7CisJcHJpbnQgIlxuIjsKKwlleGl0IDE7Cit9CisKK3N1YiBwcm9tcHRfc2luZ2xlX2NoYXJhY3RlciB7CisJaWYgKCR1c2VfcmVhZGtleSkgeworCQlsb2NhbCAkU0lHe1RFUk19ID0gXCZfcmVzdG9yZV90ZXJtaW5hbF9hbmRfZGllOworCQlsb2NhbCAkU0lHe0lOVH0gPSBcJl9yZXN0b3JlX3Rlcm1pbmFsX2FuZF9kaWU7CisJCVJlYWRNb2RlICdjYnJlYWsnOworCQlteSAka2V5ID0gUmVhZEtleSAwOworCQlSZWFkTW9kZSAncmVzdG9yZSc7CisJCXByaW50ICIka2V5IiBpZiBkZWZpbmVkICRrZXk7CisJCXByaW50ICJcbiI7CisJCXJldHVybiAka2V5OworCX0gZWxzZSB7CisJCXJldHVybiA8U1RESU4+OworCX0KK30KKwogc3ViIHByb21wdF95ZXNubyB7CiAJbXkgKCRwcm9tcHQpID0gQF87CiAJd2hpbGUgKDEpIHsKIAkJcHJpbnQgY29sb3JlZCAkcHJvbXB0X2NvbG9yLCAkcHJvbXB0OwotCQlteSAkbGluZSA9IDxTVERJTj47CisJCW15ICRsaW5lID0gcHJvbXB0X3NpbmdsZV9jaGFyYWN0ZXI7CiAJCXJldHVybiAwIGlmICRsaW5lID1+IC9ebi9pOwogCQlyZXR1cm4gMSBpZiAkbGluZSA9fiAvXnkvaTsKIAl9CkBAIC03NzcsNyArOTY1LDEyIEBACiAJCWlmICghZGVmaW5lZCAkdGV4dCkgewogCQkJcmV0dXJuIHVuZGVmOwogCQl9Ci0JCW15ICRuZXdodW5rID0geyBURVhUID0+ICR0ZXh0LCBVU0UgPT4gMSB9OworCQlteSAkbmV3aHVuayA9IHsKKwkJCVRFWFQgPT4gJHRleHQsCisJCQlUWVBFID0+ICRodW5rLT5bJGl4XS0+e1RZUEV9LAorCQkJVVNFID0+IDEsCisJCQlESVJUWSA9PiAxLAorCQl9OwogCQlpZiAoZGlmZl9hcHBsaWVzKCRoZWFkLAogCQkJCSBAeyRodW5rfVswLi4kaXgtMV0sCiAJCQkJICRuZXdodW5rLApAQCAtNzk4LDggKzk5MSwxMSBAQAogCXByaW50IGNvbG9yZWQgJGhlbHBfY29sb3IsIDw8XEVPRiA7CiB5IC0gc3RhZ2UgdGhpcyBodW5rCiBuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuaworcSAtIHF1aXQsIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXMKIGEgLSBzdGFnZSB0aGlzIGFuZCBhbGwgdGhlIHJlbWFpbmluZyBodW5rcyBpbiB0aGUgZmlsZQogZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgcmVtYWluaW5nIGh1bmtzIGluIHRoZSBmaWxlCitnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0bworLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleAogaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rCiBKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVuawogayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVuawpAQCAtODMyLDExICsxMDI4LDUzIEBACiAJCQkJCUBtb2RzKTsKIAl9CiAJZm9yIChAdGhlbSkgewotCQlwYXRjaF91cGRhdGVfZmlsZSgkXy0+e1ZBTFVFfSk7CisJCXJldHVybiAwIGlmIHBhdGNoX3VwZGF0ZV9maWxlKCRfLT57VkFMVUV9KTsKIAl9CiB9CiAKKyMgR2VuZXJhdGUgYSBvbmUgbGluZSBzdW1tYXJ5IG9mIGEgaHVuay4KK3N1YiBzdW1tYXJpemVfaHVuayB7CisJbXkgJHJodW5rID0gc2hpZnQ7CisJbXkgJHN1bW1hcnkgPSAkcmh1bmstPntURVhUfVswXTsKKworCSMgS2VlcCB0aGUgbGluZSBudW1iZXJzLCBkaXNjYXJkIGV4dHJhIGNvbnRleHQuCisJJHN1bW1hcnkgPX4gcy9AQCguKj8pQEAuKi8kMSAvczsKKwkkc3VtbWFyeSAuPSAiICIgeCAoMjAgLSBsZW5ndGggJHN1bW1hcnkpOworCisJIyBBZGQgc29tZSB1c2VyIGNvbnRleHQuCisJZm9yIG15ICRsaW5lIChAeyRyaHVuay0+e1RFWFR9fSkgeworCQlpZiAoJGxpbmUgPX4gbS9eWystXS4qXHcvKSB7CisJCQkkc3VtbWFyeSAuPSAkbGluZTsKKwkJCWxhc3Q7CisJCX0KKwl9CisKKwljaG9tcCAkc3VtbWFyeTsKKwlyZXR1cm4gc3Vic3RyKCRzdW1tYXJ5LCAwLCA4MCkgLiAiXG4iOworfQorCisKKyMgUHJpbnQgYSBvbmUtbGluZSBzdW1tYXJ5IG9mIGVhY2ggaHVuayBpbiB0aGUgYXJyYXkgcmVmIGluCisjIHRoZSBmaXJzdCBhcmd1bWVudCwgc3RhcnRpbmcgd2loIHRoZSBpbmRleCBpbiB0aGUgMm5kLgorc3ViIGRpc3BsYXlfaHVua3MgeworCW15ICgkaHVua3MsICRpKSA9IEBfOworCW15ICRjdHIgPSAwOworCSRpIHx8PSAwOworCWZvciAoOyAkaSA8IEAkaHVua3MgJiYgJGN0ciA8IDIwOyAkaSsrLCAkY3RyKyspIHsKKwkJbXkgJHN0YXR1cyA9ICIgIjsKKwkJaWYgKGRlZmluZWQgJGh1bmtzLT5bJGlde1VTRX0pIHsKKwkJCSRzdGF0dXMgPSAkaHVua3MtPlskaV17VVNFfSA/ICIrIiA6ICItIjsKKwkJfQorCQlwcmludGYgIiVzJTJkOiAlcyIsCisJCQkkc3RhdHVzLAorCQkJJGkgKyAxLAorCQkJc3VtbWFyaXplX2h1bmsoJGh1bmtzLT5bJGldKTsKKwl9CisJcmV0dXJuICRpOworfQorCiBzdWIgcGF0Y2hfdXBkYXRlX2ZpbGUgeworCW15ICRxdWl0ID0gMDsKIAlteSAoJGl4LCAkbnVtKTsKIAlteSAkcGF0aCA9IHNoaWZ0OwogCW15ICgkaGVhZCwgQGh1bmspID0gcGFyc2VfZGlmZigkcGF0aCk7CkBAIC04NDYsMzIgKzEwODQsNyBAQAogCX0KIAogCWlmIChAeyRtb2RlLT57VEVYVH19KSB7Ci0JCXdoaWxlICgxKSB7Ci0JCQlwcmludCBAeyRtb2RlLT57RElTUExBWX19OwotCQkJcHJpbnQgY29sb3JlZCAkcHJvbXB0X2NvbG9yLAotCQkJCSJTdGFnZSBtb2RlIGNoYW5nZSBbeS9uL2EvZC8/XT8gIjsKLQkJCW15ICRsaW5lID0gPFNURElOPjsKLQkJCWlmICgkbGluZSA9fiAvXnkvaSkgewotCQkJCSRtb2RlLT57VVNFfSA9IDE7Ci0JCQkJbGFzdDsKLQkJCX0KLQkJCWVsc2lmICgkbGluZSA9fiAvXm4vaSkgewotCQkJCSRtb2RlLT57VVNFfSA9IDA7Ci0JCQkJbGFzdDsKLQkJCX0KLQkJCWVsc2lmICgkbGluZSA9fiAvXmEvaSkgewotCQkJCSRfLT57VVNFfSA9IDEgZm9yZWFjaCAoJG1vZGUsIEBodW5rKTsKLQkJCQlsYXN0OwotCQkJfQotCQkJZWxzaWYgKCRsaW5lID1+IC9eZC9pKSB7Ci0JCQkJJF8tPntVU0V9ID0gMCBmb3JlYWNoICgkbW9kZSwgQGh1bmspOwotCQkJCWxhc3Q7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQloZWxwX3BhdGNoX2NtZCgnJyk7Ci0JCQkJbmV4dDsKLQkJCX0KLQkJfQorCQl1bnNoaWZ0IEBodW5rLCAkbW9kZTsKIAl9CiAKIAkkbnVtID0gc2NhbGFyIEBodW5rOwpAQCAtODg3LDIyICsxMTAwLDI1IEBACiAJCWZvciAoJGkgPSAwOyAkaSA8ICRpeDsgJGkrKykgewogCQkJaWYgKCFkZWZpbmVkICRodW5rWyRpXXtVU0V9KSB7CiAJCQkJJHByZXYgPSAxOwotCQkJCSRvdGhlciAuPSAnL2snOworCQkJCSRvdGhlciAuPSAnLGsnOwogCQkJCWxhc3Q7CiAJCQl9CiAJCX0KIAkJaWYgKCRpeCkgewotCQkJJG90aGVyIC49ICcvSyc7CisJCQkkb3RoZXIgLj0gJyxLJzsKIAkJfQogCQlmb3IgKCRpID0gJGl4ICsgMTsgJGkgPCAkbnVtOyAkaSsrKSB7CiAJCQlpZiAoIWRlZmluZWQgJGh1bmtbJGlde1VTRX0pIHsKIAkJCQkkbmV4dCA9IDE7Ci0JCQkJJG90aGVyIC49ICcvaic7CisJCQkJJG90aGVyIC49ICcsaic7CiAJCQkJbGFzdDsKIAkJCX0KIAkJfQogCQlpZiAoJGl4IDwgJG51bSAtIDEpIHsKLQkJCSRvdGhlciAuPSAnL0onOworCQkJJG90aGVyIC49ICcsSic7CisJCX0KKwkJaWYgKCRudW0gPiAxKSB7CisJCQkkb3RoZXIgLj0gJyxnJzsKIAkJfQogCQlmb3IgKCRpID0gMDsgJGkgPCAkbnVtOyAkaSsrKSB7CiAJCQlpZiAoIWRlZmluZWQgJGh1bmtbJGlde1VTRX0pIHsKQEAgLTkxMiwxNSArMTEyOCwyMCBAQAogCQl9CiAJCWxhc3QgaWYgKCEkdW5kZWNpZGVkKTsKIAotCQlpZiAoaHVua19zcGxpdHRhYmxlKCRodW5rWyRpeF17VEVYVH0pKSB7Ci0JCQkkb3RoZXIgLj0gJy9zJzsKKwkJaWYgKCRodW5rWyRpeF17VFlQRX0gZXEgJ2h1bmsnICYmCisJCSAgICBodW5rX3NwbGl0dGFibGUoJGh1bmtbJGl4XXtURVhUfSkpIHsKKwkJCSRvdGhlciAuPSAnLHMnOwogCQl9Ci0JCSRvdGhlciAuPSAnL2UnOworCQlpZiAoJGh1bmtbJGl4XXtUWVBFfSBlcSAnaHVuaycpIHsKKwkJCSRvdGhlciAuPSAnLGUnOworCQl9CiAJCWZvciAoQHskaHVua1skaXhde0RJU1BMQVl9fSkgewogCQkJcHJpbnQ7CiAJCX0KLQkJcHJpbnQgY29sb3JlZCAkcHJvbXB0X2NvbG9yLCAiU3RhZ2UgdGhpcyBodW5rIFt5L24vYS9kJG90aGVyLz9dPyAiOwotCQlteSAkbGluZSA9IDxTVERJTj47CisJCXByaW50IGNvbG9yZWQgJHByb21wdF9jb2xvciwgJ1N0YWdlICcsCisJCSAgKCRodW5rWyRpeF17VFlQRX0gZXEgJ21vZGUnID8gJ21vZGUgY2hhbmdlJyA6ICd0aGlzIGh1bmsnKSwKKwkJICAiIFt5LG4scSxhLGQsLyRvdGhlciw/XT8gIjsKKwkJbXkgJGxpbmUgPSBwcm9tcHRfc2luZ2xlX2NoYXJhY3RlcjsKIAkJaWYgKCRsaW5lKSB7CiAJCQlpZiAoJGxpbmUgPX4gL155L2kpIHsKIAkJCQkkaHVua1skaXhde1VTRX0gPSAxOwpAQCAtOTM3LDYgKzExNTgsMzEgQEAKIAkJCQl9CiAJCQkJbmV4dDsKIAkJCX0KKwkJCWVsc2lmICgkb3RoZXIgPX4gL2cvICYmICRsaW5lID1+IC9eZyguKikvKSB7CisJCQkJbXkgJHJlc3BvbnNlID0gJDE7CisJCQkJbXkgJG5vID0gJGl4ID4gMTAgPyAkaXggLSAxMCA6IDA7CisJCQkJd2hpbGUgKCRyZXNwb25zZSBlcSAnJykgeworCQkJCQlteSAkZXh0cmEgPSAiIjsKKwkJCQkJJG5vID0gZGlzcGxheV9odW5rcyhcQGh1bmssICRubyk7CisJCQkJCWlmICgkbm8gPCAkbnVtKSB7CisJCQkJCQkkZXh0cmEgPSAiICg8cmV0PiB0byBzZWUgbW9yZSkiOworCQkJCQl9CisJCQkJCXByaW50ICJnbyB0byB3aGljaCBodW5rJGV4dHJhPyAiOworCQkJCQkkcmVzcG9uc2UgPSA8U1RESU4+OworCQkJCQlpZiAoIWRlZmluZWQgJHJlc3BvbnNlKSB7CisJCQkJCQkkcmVzcG9uc2UgPSAnJzsKKwkJCQkJfQorCQkJCQljaG9tcCAkcmVzcG9uc2U7CisJCQkJfQorCQkJCWlmICgkcmVzcG9uc2UgIX4gL15ccypcZCtccyokLykgeworCQkJCQllcnJvcl9tc2cgIkludmFsaWQgbnVtYmVyOiAnJHJlc3BvbnNlJ1xuIjsKKwkJCQl9IGVsc2lmICgwIDwgJHJlc3BvbnNlICYmICRyZXNwb25zZSA8PSAkbnVtKSB7CisJCQkJCSRpeCA9ICRyZXNwb25zZSAtIDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJZXJyb3JfbXNnICJTb3JyeSwgb25seSAkbnVtIGh1bmtzIGF2YWlsYWJsZS5cbiI7CisJCQkJfQorCQkJCW5leHQ7CisJCQl9CiAJCQllbHNpZiAoJGxpbmUgPX4gL15kL2kpIHsKIAkJCQl3aGlsZSAoJGl4IDwgJG51bSkgewogCQkJCQlpZiAoIWRlZmluZWQgJGh1bmtbJGl4XXtVU0V9KSB7CkBAIC05NDYsMzAgKzExOTIsODYgQEAKIAkJCQl9CiAJCQkJbmV4dDsKIAkJCX0KLQkJCWVsc2lmICgkb3RoZXIgPX4gL0svICYmICRsaW5lID1+IC9eSy8pIHsKLQkJCQkkaXgtLTsKLQkJCQluZXh0OwotCQkJfQotCQkJZWxzaWYgKCRvdGhlciA9fiAvSi8gJiYgJGxpbmUgPX4gL15KLykgewotCQkJCSRpeCsrOwotCQkJCW5leHQ7Ci0JCQl9Ci0JCQllbHNpZiAoJG90aGVyID1+IC9rLyAmJiAkbGluZSA9fiAvXmsvKSB7Ci0JCQkJd2hpbGUgKDEpIHsKLQkJCQkJJGl4LS07Ci0JCQkJCWxhc3QgaWYgKCEkaXggfHwKLQkJCQkJCSAhZGVmaW5lZCAkaHVua1skaXhde1VTRX0pOwotCQkJCX0KLQkJCQluZXh0OwotCQkJfQotCQkJZWxzaWYgKCRvdGhlciA9fiAvai8gJiYgJGxpbmUgPX4gL15qLykgewotCQkJCXdoaWxlICgxKSB7CisJCQllbHNpZiAoJGxpbmUgPX4gL15xL2kpIHsKKwkJCQl3aGlsZSAoJGl4IDwgJG51bSkgeworCQkJCQlpZiAoIWRlZmluZWQgJGh1bmtbJGl4XXtVU0V9KSB7CisJCQkJCQkkaHVua1skaXhde1VTRX0gPSAwOworCQkJCQl9CiAJCQkJCSRpeCsrOwotCQkJCQlsYXN0IGlmICgkaXggPj0gJG51bSB8fAotCQkJCQkJICFkZWZpbmVkICRodW5rWyRpeF17VVNFfSk7CisJCQkJfQorCQkJCSRxdWl0ID0gMTsKKwkJCQluZXh0OworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IG18Xi8oLiopfCkgeworCQkJCW15ICRyZWdleCA9ICQxOworCQkJCWlmICgkMSBlcSAiIikgeworCQkJCQlwcmludCBjb2xvcmVkICRwcm9tcHRfY29sb3IsICJzZWFyY2ggZm9yIHJlZ2V4PyAiOworCQkJCQkkcmVnZXggPSA8U1RESU4+OworCQkJCQlpZiAoZGVmaW5lZCAkcmVnZXgpIHsKKwkJCQkJCWNob21wICRyZWdleDsKKwkJCQkJfQorCQkJCX0KKwkJCQlteSAkc2VhcmNoX3N0cmluZzsKKwkJCQlldmFsIHsKKwkJCQkJJHNlYXJjaF9zdHJpbmcgPSBxcnskcmVnZXh9bTsKKwkJCQl9OworCQkJCWlmICgkQCkgeworCQkJCQlteSAoJGVyciwkZXhwKSA9ICgkQCwgJDEpOworCQkJCQkkZXJyID1+IHMvIGF0IC4qZ2l0LWFkZC0taW50ZXJhY3RpdmUgbGluZSBcZCssIDxTVERJTj4gbGluZSBcZCsuKiQvLzsKKwkJCQkJZXJyb3JfbXNnICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAkZXhwOiAkZXJyXG4iOworCQkJCQluZXh0OworCQkJCX0KKwkJCQlteSAkaXkgPSAkaXg7CisJCQkJd2hpbGUgKDEpIHsKKwkJCQkJbXkgJHRleHQgPSBqb2luICgiIiwgQHskaHVua1skaXlde1RFWFR9fSk7CisJCQkJCWxhc3QgaWYgKCR0ZXh0ID1+ICRzZWFyY2hfc3RyaW5nKTsKKwkJCQkJJGl5Kys7CisJCQkJCSRpeSA9IDAgaWYgKCRpeSA+PSAkbnVtKTsKKwkJCQkJaWYgKCRpeCA9PSAkaXkpIHsKKwkJCQkJCWVycm9yX21zZyAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iOworCQkJCQkJbGFzdDsKKwkJCQkJfQorCQkJCX0KKwkJCQkkaXggPSAkaXk7CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXksvKSB7CisJCQkJaWYgKCRvdGhlciA9fiAvSy8pIHsKKwkJCQkJJGl4LS07CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllcnJvcl9tc2cgIk5vIHByZXZpb3VzIGh1bmtcbiI7CiAJCQkJfQogCQkJCW5leHQ7CiAJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15KLykgeworCQkJCWlmICgkb3RoZXIgPX4gL0ovKSB7CisJCQkJCSRpeCsrOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZXJyb3JfbXNnICJObyBuZXh0IGh1bmtcbiI7CisJCQkJfQorCQkJCW5leHQ7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15rLykgeworCQkJCWlmICgkb3RoZXIgPX4gL2svKSB7CisJCQkJCXdoaWxlICgxKSB7CisJCQkJCQkkaXgtLTsKKwkJCQkJCWxhc3QgaWYgKCEkaXggfHwKKwkJCQkJCQkgIWRlZmluZWQgJGh1bmtbJGl4XXtVU0V9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZXJyb3JfbXNnICJObyBwcmV2aW91cyBodW5rXG4iOworCQkJCX0KKwkJCQluZXh0OworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9eai8pIHsKKwkJCQlpZiAoJG90aGVyICF+IC9qLykgeworCQkJCQllcnJvcl9tc2cgIk5vIG5leHQgaHVua1xuIjsKKwkJCQkJbmV4dDsKKwkJCQl9CisJCQl9CiAJCQllbHNpZiAoJG90aGVyID1+IC9zLyAmJiAkbGluZSA9fiAvXnMvKSB7CiAJCQkJbXkgQHNwbGl0ID0gc3BsaXRfaHVuaygkaHVua1skaXhde1RFWFR9LCAkaHVua1skaXhde0RJU1BMQVl9KTsKIAkJCQlpZiAoMSA8IEBzcGxpdCkgewpAQCAtOTgwLDcgKzEyODIsNyBAQAogCQkJCSRudW0gPSBzY2FsYXIgQGh1bms7CiAJCQkJbmV4dDsKIAkJCX0KLQkJCWVsc2lmICgkbGluZSA9fiAvXmUvKSB7CisJCQllbHNpZiAoJG90aGVyID1+IC9lLyAmJiAkbGluZSA9fiAvXmUvKSB7CiAJCQkJbXkgJG5ld2h1bmsgPSBlZGl0X2h1bmtfbG9vcCgkaGVhZCwgXEBodW5rLCAkaXgpOwogCQkJCWlmIChkZWZpbmVkICRuZXdodW5rKSB7CiAJCQkJCXNwbGljZSBAaHVuaywgJGl4LCAxLCAkbmV3aHVuazsKQEAgLTk5OSwxMSArMTMwMSwxMCBAQAogCQl9CiAJfQogCisJQGh1bmsgPSBjb2FsZXNjZV9vdmVybGFwcGluZ19odW5rcyhAaHVuayk7CisKIAlteSAkbl9sb2ZzID0gMDsKIAlteSBAcmVzdWx0ID0gKCk7Ci0JaWYgKCRtb2RlLT57VVNFfSkgewotCQlwdXNoIEByZXN1bHQsIEB7JG1vZGUtPntURVhUfX07Ci0JfQogCWZvciAoQGh1bmspIHsKIAkJaWYgKCRfLT57VVNFfSkgewogCQkJcHVzaCBAcmVzdWx0LCBAeyRfLT57VEVYVH19OwpAQCAtMTAyNiw2ICsxMzI3LDcgQEAKIAl9CiAKIAlwcmludCAiXG4iOworCXJldHVybiAkcXVpdDsKIH0KIAogc3ViIGRpZmZfY21kIHsKZGlmZiAtLWdpdCBhL2dpdC1hbS5zaCBiL2dpdC1hbS5zaAppbmRleCA0YjE1N2ZlLi5kNjRkOTk3IDEwMDc1NQotLS0gYS9naXQtYW0uc2gKKysrIGIvZ2l0LWFtLnNoCkBAIC04LDIxICs4LDI2IEBACiBnaXQgYW0gW29wdGlvbnNdIFs8bWJveD58PE1haWxkaXI+Li4uXQogZ2l0IGFtIFtvcHRpb25zXSAoLS1yZXNvbHZlZCB8IC0tc2tpcCB8IC0tYWJvcnQpCiAtLQotZCxkb3Rlc3Q9ICAgICAgIChyZW1vdmVkIC0tIGRvIG5vdCB1c2UpCiBpLGludGVyYWN0aXZlICAgcnVuIGludGVyYWN0aXZlbHkKLWIsYmluYXJ5ICAgICAgICAoaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3ApCitiLGJpbmFyeSogICAgICAgKGhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wKQogMywzd2F5ICAgICAgICAgIGFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkCitxLHF1aWV0ICAgICAgICAgYmUgcXVpZXQKIHMsc2lnbm9mZiAgICAgICBhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlCiB1LHV0ZjggICAgICAgICAgcmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkKIGssa2VlcCAgICAgICAgICBwYXNzIC1rIGZsYWcgdG8gZ2l0LW1haWxpbmZvCiB3aGl0ZXNwYWNlPSAgICAgcGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseQorZGlyZWN0b3J5PSAgICAgIHBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkKIEM9ICAgICAgICAgICAgICBwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5CiBwPSAgICAgICAgICAgICAgcGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseQorcGF0Y2gtZm9ybWF0PSAgIGZvcm1hdCB0aGUgcGF0Y2goZXMpIGFyZSBpbgorcmVqZWN0ICAgICAgICAgIHBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkKIHJlc29sdmVtc2c9ICAgICBvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMKIHIscmVzb2x2ZWQgICAgICB0byBiZSB1c2VkIGFmdGVyIGEgcGF0Y2ggZmFpbHVyZQogc2tpcCAgICAgICAgICAgIHNraXAgdGhlIGN1cnJlbnQgcGF0Y2gKIGFib3J0ICAgICAgICAgICByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uCi1yZWJhc2luZyAgICAgICAgKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCitjb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSAgICBsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUKK2lnbm9yZS1kYXRlICAgICB1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlCityZWJhc2luZyogICAgICAgKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCiAKIC4gZ2l0LXNoLXNldHVwCiBwcmVmaXg9JChnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgpCkBAIC0zMyw2ICszOCwxNyBAQAogZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID4vZGV2L251bGwgfHwKIAlkaWUgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IgogCitpZiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIEhFQUQgPi9kZXYvbnVsbAordGhlbgorCUhBU19IRUFEPXllcworZWxzZQorCUhBU19IRUFEPQorZmkKKworc3EgKCkgeworCWdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJEAiCit9CisKIHN0b3BfaGVyZSAoKSB7CiAgICAgZWNobyAiJDEiID4iJGRvdGVzdC9uZXh0IgogICAgIGV4aXQgMQpAQCAtODUsNyArMTAxLDcgQEAKICAgICBnaXQgd3JpdGUtdHJlZSA+IiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtYmFzZSsiIHx8CiAgICAgY2Fubm90X2ZhbGxiYWNrICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgogCi0gICAgZWNobyBVc2luZyBpbmRleCBpbmZvIHRvIHJlY29uc3RydWN0IGEgYmFzZSB0cmVlLi4uCisgICAgc2F5IFVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4KICAgICBpZiBHSVRfSU5ERVhfRklMRT0iJGRvdGVzdC9wYXRjaC1tZXJnZS10bXAtaW5kZXgiIFwKIAlnaXQgYXBwbHkgLS1jYWNoZWQgPCIkZG90ZXN0L3BhdGNoIgogICAgIHRoZW4KQEAgLTEwMSw3ICsxMTcsNyBAQAogICAgIG9yaWdfdHJlZT0kKGNhdCAiJGRvdGVzdC9wYXRjaC1tZXJnZS1iYXNlIikgJiYKICAgICBybSAtZnIgIiRkb3Rlc3QiL3BhdGNoLW1lcmdlLSogfHwgZXhpdCAxCiAKLSAgICBlY2hvIEZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLgorICAgIHNheSBGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4KIAogICAgICMgVGhpcyBpcyBub3Qgc28gd3JvbmcuICBEZXBlbmRpbmcgb24gd2hpY2ggYmFzZSB3ZSBwaWNrZWQsCiAgICAgIyBvcmlnX3RyZWUgbWF5IGJlIHdpbGRseSBkaWZmZXJlbnQgZnJvbSBvdXJzLCBidXQgaGlzX3RyZWUKQEAgLTExMSw2ICsxMjcsMTAgQEAKIAogICAgIGV2YWwgR0lUSEVBRF8kaGlzX3RyZWU9JyIkRklSU1RMSU5FIicKICAgICBleHBvcnQgR0lUSEVBRF8kaGlzX3RyZWUKKyAgICBpZiB0ZXN0IC1uICIkR0lUX1FVSUVUIgorICAgIHRoZW4KKwkgICAgZXhwb3J0IEdJVF9NRVJHRV9WRVJCT1NJVFk9MAorICAgIGZpCiAgICAgZ2l0LW1lcmdlLXJlY3Vyc2l2ZSAkb3JpZ190cmVlIC0tIEhFQUQgJGhpc190cmVlIHx8IHsKIAkgICAgZ2l0IHJlcmVyZQogCSAgICBlY2hvIEZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4KQEAgLTExOSwxMSArMTM5LDEzMyBAQAogICAgIHVuc2V0IEdJVEhFQURfJGhpc190cmVlCiB9CiAKK2NsZWFuX2Fib3J0ICgpIHsKKwl0ZXN0ICQjID0gMCB8fCBlY2hvID4mMiAiJEAiCisJcm0gLWZyICIkZG90ZXN0IgorCWV4aXQgMQorfQorCitwYXRjaF9mb3JtYXQ9CisKK2NoZWNrX3BhdGNoX2Zvcm1hdCAoKSB7CisJIyBlYXJseSByZXR1cm4gaWYgcGF0Y2hfZm9ybWF0IHdhcyBzZXQgZnJvbSB0aGUgY29tbWFuZCBsaW5lCisJaWYgdGVzdCAtbiAiJHBhdGNoX2Zvcm1hdCIKKwl0aGVuCisJCXJldHVybiAwCisJZmkKKworCSMgd2UgZGVmYXVsdCB0byBtYm94IGZvcm1hdCBpZiBpbnB1dCBpcyBmcm9tIHN0ZGluIGFuZCBmb3IKKwkjIGRpcmVjdG9yaWVzCisJaWYgdGVzdCAkIyA9IDAgfHwgdGVzdCAieCQxIiA9ICJ4LSIgfHwgdGVzdCAtZCAiJDEiCisJdGhlbgorCQlwYXRjaF9mb3JtYXQ9bWJveAorCQlyZXR1cm4gMAorCWZpCisKKwkjIG90aGVyd2lzZSwgY2hlY2sgdGhlIGZpcnN0IGZldyBsaW5lcyBvZiB0aGUgZmlyc3QgcGF0Y2ggdG8gdHJ5CisJIyB0byBkZXRlY3QgaXRzIGZvcm1hdAorCXsKKwkJcmVhZCBsMQorCQlyZWFkIGwyCisJCXJlYWQgbDMKKwkJY2FzZSAiJGwxIiBpbgorCQkiRnJvbSAiKiB8ICJGcm9tOiAiKikKKwkJCXBhdGNoX2Zvcm1hdD1tYm94CisJCQk7OworCQknIyBUaGlzIHNlcmllcyBhcHBsaWVzIG9uIEdJVCBjb21taXQnKikKKwkJCXBhdGNoX2Zvcm1hdD1zdGdpdC1zZXJpZXMKKwkJCTs7CisJCSIjIEhHIGNoYW5nZXNldCBwYXRjaCIpCisJCQlwYXRjaF9mb3JtYXQ9aGcKKwkJCTs7CisJCSopCisJCQkjIGlmIHRoZSBzZWNvbmQgbGluZSBpcyBlbXB0eSBhbmQgdGhlIHRoaXJkIGlzCisJCQkjIGEgRnJvbSwgQXV0aG9yIG9yIERhdGUgZW50cnksIHRoaXMgaXMgdmVyeQorCQkJIyBsaWtlbHkgYW4gU3RHSVQgcGF0Y2gKKwkJCWNhc2UgIiRsMiwkbDMiIGluCisJCQksIkZyb206ICIqIHwgLCJBdXRob3I6ICIqIHwgLCJEYXRlOiAiKikKKwkJCQlwYXRjaF9mb3JtYXQ9c3RnaXQKKwkJCQk7OworCQkJKikKKwkJCQk7OworCQkJZXNhYworCQkJOzsKKwkJZXNhYworCX0gPCAiJDEiIHx8IGNsZWFuX2Fib3J0Cit9CisKK3NwbGl0X3BhdGNoZXMgKCkgeworCWNhc2UgIiRwYXRjaF9mb3JtYXQiIGluCisJbWJveCkKKwkJZ2l0IG1haWxzcGxpdCAtZCIkcHJlYyIgLW8iJGRvdGVzdCIgLWIgLS0gIiRAIiA+ICIkZG90ZXN0L2xhc3QiIHx8CisJCWNsZWFuX2Fib3J0CisJCTs7CisJc3RnaXQtc2VyaWVzKQorCQlpZiB0ZXN0ICQjIC1uZSAxCisJCXRoZW4KKwkJCWNsZWFuX2Fib3J0ICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKKwkJZmkKKwkJc2VyaWVzX2Rpcj1gZGlybmFtZSAiJDEiYAorCQlzZXJpZXNfZmlsZT0iJDEiCisJCXNoaWZ0CisJCXsKKwkJCXNldCB4CisJCQl3aGlsZSByZWFkIGZpbGVuYW1lCisJCQlkbworCQkJCXNldCAiJEAiICIkc2VyaWVzX2Rpci8kZmlsZW5hbWUiCisJCQlkb25lCisJCQkjIHJlbW92ZSB0aGUgc2FmZXR5IHgKKwkJCXNoaWZ0CisJCQkjIHJlbW92ZSB0aGUgYXJnIGNvbWluZyBmcm9tIHRoZSBmaXJzdC1saW5lIGNvbW1lbnQKKwkJCXNoaWZ0CisJCX0gPCAiJHNlcmllc19maWxlIiB8fCBjbGVhbl9hYm9ydAorCQkjIHNldCB0aGUgcGF0Y2ggZm9ybWF0IGFwcHJvcHJpYXRlbHkKKwkJcGF0Y2hfZm9ybWF0PXN0Z2l0CisJCSMgbm93IGhhbmRsZSB0aGUgYWN0dWFsIFN0R0lUIHBhdGNoZXMKKwkJc3BsaXRfcGF0Y2hlcyAiJEAiCisJCTs7CisJc3RnaXQpCisJCXRoaXM9MAorCQlmb3Igc3RnaXQgaW4gIiRAIgorCQlkbworCQkJdGhpcz1gZXhwciAiJHRoaXMiICsgMWAKKwkJCW1zZ251bT1gcHJpbnRmICIlMCR7cHJlY31kIiAkdGhpc2AKKwkJCSMgUGVybCB2ZXJzaW9uIG9mIFN0R0lUIHBhcnNlX3BhdGNoLiBUaGUgZmlyc3Qgbm9uZW1wdHlsaW5lCisJCQkjIG5vdCBzdGFydGluZyB3aXRoIEF1dGhvciwgRnJvbSBvciBEYXRlIGlzIHRoZQorCQkJIyBzdWJqZWN0LCBhbmQgdGhlIGJvZHkgc3RhcnRzIHdpdGggdGhlIG5leHQgbm9uZW1wdHkKKwkJCSMgbGluZSBub3Qgc3RhcnRpbmcgd2l0aCBBdXRob3IsIEZyb20gb3IgRGF0ZQorCQkJcGVybCAtbmUgJ0JFR0lOIHsgJHN1YmplY3QgPSAwIH0KKwkJCQlpZiAoJHN1YmplY3QgPiAxKSB7IHByaW50IDsgfQorCQkJCWVsc2lmICgvXlxzKyQvKSB7IG5leHQgOyB9CisJCQkJZWxzaWYgKC9eQXV0aG9yOi8pIHsgcHJpbnQgcy9BdXRob3IvRnJvbS8gOyB9CisJCQkJZWxzaWYgKC9eKEZyb218RGF0ZSkvKSB7IHByaW50IDsgfQorCQkJCWVsc2lmICgkc3ViamVjdCkgeworCQkJCQkkc3ViamVjdCA9IDIgOworCQkJCQlwcmludCAiXG4iIDsKKwkJCQkJcHJpbnQgOworCQkJCX0gZWxzZSB7CisJCQkJCXByaW50ICJTdWJqZWN0OiAiLCAkXyA7CisJCQkJCSRzdWJqZWN0ID0gMTsKKwkJCQl9CisJCQknIDwgIiRzdGdpdCIgPiAiJGRvdGVzdC8kbXNnbnVtIiB8fCBjbGVhbl9hYm9ydAorCQlkb25lCisJCWVjaG8gIiR0aGlzIiA+ICIkZG90ZXN0L2xhc3QiCisJCXRoaXM9CisJCW1zZ251bT0KKwkJOzsKKwkqKQorCQljbGVhbl9hYm9ydCAiUGF0Y2ggZm9ybWF0ICRwYXRjaF9mb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4iCisJCTs7CisJZXNhYworfQorCiBwcmVjPTQKIGRvdGVzdD0iJEdJVF9ESVIvcmViYXNlLWFwcGx5Igogc2lnbj0gdXRmOD10IGtlZXA9IHNraXA9IGludGVyYWN0aXZlPSByZXNvbHZlZD0gcmViYXNpbmc9IGFib3J0PQogcmVzb2x2ZW1zZz0gcmVzdW1lPQogZ2l0X2FwcGx5X29wdD0KK2NvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlPQoraWdub3JlX2RhdGU9CiAKIHdoaWxlIHRlc3QgJCMgIT0gMAogZG8KQEAgLTE1NSwxMCArMjk3LDIwIEBACiAJCTs7CiAJLS1yZXNvbHZlbXNnKQogCQlzaGlmdDsgcmVzb2x2ZW1zZz0kMSA7OwotCS0td2hpdGVzcGFjZSkKLQkJZ2l0X2FwcGx5X29wdD0iJGdpdF9hcHBseV9vcHQgJDE9JDIiOyBzaGlmdCA7OworCS0td2hpdGVzcGFjZXwtLWRpcmVjdG9yeSkKKwkJZ2l0X2FwcGx5X29wdD0iJGdpdF9hcHBseV9vcHQgJChzcSAiJDE9JDIiKSI7IHNoaWZ0IDs7CiAJLUN8LXApCi0JCWdpdF9hcHBseV9vcHQ9IiRnaXRfYXBwbHlfb3B0ICQxJDIiOyBzaGlmdCA7OworCQlnaXRfYXBwbHlfb3B0PSIkZ2l0X2FwcGx5X29wdCAkKHNxICIkMSQyIikiOyBzaGlmdCA7OworCS0tcGF0Y2gtZm9ybWF0KQorCQlzaGlmdCA7IHBhdGNoX2Zvcm1hdD0iJDEiIDs7CisJLS1yZWplY3QpCisJCWdpdF9hcHBseV9vcHQ9IiRnaXRfYXBwbHlfb3B0ICQxIiA7OworCS0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUpCisJCWNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlPXQgOzsKKwktLWlnbm9yZS1kYXRlKQorCQlpZ25vcmVfZGF0ZT10IDs7CisJLXF8LS1xdWlldCkKKwkJR0lUX1FVSUVUPXQgOzsKIAktLSkKIAkJc2hpZnQ7IGJyZWFrIDs7CiAJKikKQEAgLTE5Miw3ICszNDQsNyBAQAogCQkjIHVucmVsaWFibGUgLS0gc3RkaW4gY291bGQgYmUgL2Rldi9udWxsIGZvciBleGFtcGxlCiAJCSMgYW5kIHRoZSBjYWxsZXIgZGlkIG5vdCBpbnRlbmQgdG8gZmVlZCB1cyBhIHBhdGNoIGJ1dAogCQkjIHdhbnRlZCB0byBjb250aW51ZSB1bmF0dGVuZGVkLgotCQl0dHkgLXMKKwkJdGVzdCAtdCAwCiAJCTs7CiAJKikKIAkJZmFsc2UKQEAgLTIwMiw2ICszNTQsOSBAQAogCXJlc3VtZT15ZXMKIAogCWNhc2UgIiRza2lwLCRhYm9ydCIgaW4KKwl0LHQpCisJCWRpZSAiUGxlYXNlIG1ha2UgdXAgeW91ciBtaW5kLiAtLXNraXAgb3IgLS1hYm9ydD8iCisJCTs7CiAJdCwpCiAJCWdpdCByZXJlcmUgY2xlYXIKIAkJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgSEVBRApAQCAtMjEwLDEyICszNjUsMTkgQEAKIAkJZ2l0IHVwZGF0ZS1yZWYgT1JJR19IRUFEICRvcmlnX2hlYWQKIAkJOzsKIAksdCkKKwkJaWYgdGVzdCAtZiAiJGRvdGVzdC9yZWJhc2luZyIKKwkJdGhlbgorCQkJZXhlYyBnaXQgcmViYXNlIC0tYWJvcnQKKwkJZmkKIAkJZ2l0IHJlcmVyZSBjbGVhcgotCQlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCBPUklHX0hFQUQKLQkJZ2l0IHJlc2V0IE9SSUdfSEVBRAorCQl0ZXN0IC1mICIkZG90ZXN0L2RpcnR5aW5kZXgiIHx8IHsKKwkJCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEIE9SSUdfSEVBRAorCQkJZ2l0IHJlc2V0IE9SSUdfSEVBRAorCQl9CiAJCXJtIC1mciAiJGRvdGVzdCIKIAkJZXhpdCA7OwogCWVzYWMKKwlybSAtZiAiJGRvdGVzdC9kaXJ0eWluZGV4IgogZWxzZQogCSMgTWFrZSBzdXJlIHdlIGFyZSBub3QgZ2l2ZW4gLS1za2lwLCAtLXJlc29sdmVkLCBub3IgLS1hYm9ydAogCXRlc3QgIiRza2lwJHJlc29sdmVkJGFib3J0IiA9ICIiIHx8CkBAIC0yNDIsMTIgKzQwNCwxMiBAQAogCQlkb25lCiAJCXNoaWZ0CiAJZmkKLQlnaXQgbWFpbHNwbGl0IC1kIiRwcmVjIiAtbyIkZG90ZXN0IiAtYiAtLSAiJEAiID4gIiRkb3Rlc3QvbGFzdCIgfHwgIHsKLQkJcm0gLWZyICIkZG90ZXN0IgotCQlleGl0IDEKLQl9CiAKLQkjIC1zLCAtdSwgLWssIC0td2hpdGVzcGFjZSwgLTMsIC1DIGFuZCAtcCBmbGFncyBhcmUga2VwdAorCWNoZWNrX3BhdGNoX2Zvcm1hdCAiJEAiCisKKwlzcGxpdF9wYXRjaGVzICIkQCIKKworCSMgLXMsIC11LCAtaywgLS13aGl0ZXNwYWNlLCAtMywgLUMsIC1xIGFuZCAtcCBmbGFncyBhcmUga2VwdAogCSMgZm9yIHRoZSByZXN1bWluZyBzZXNzaW9uIGFmdGVyIGEgcGF0Y2ggZmFpbHVyZS4KIAkjIC1pIGNhbiBhbmQgbXVzdCBiZSBnaXZlbiB3aGVuIHJlc3VtaW5nLgogCWVjaG8gIiAkZ2l0X2FwcGx5X29wdCIgPiIkZG90ZXN0L2FwcGx5LW9wdCIKQEAgLTI1NSwyMiArNDE3LDM0IEBACiAJZWNobyAiJHNpZ24iID4iJGRvdGVzdC9zaWduIgogCWVjaG8gIiR1dGY4IiA+IiRkb3Rlc3QvdXRmOCIKIAllY2hvICIka2VlcCIgPiIkZG90ZXN0L2tlZXAiCisJZWNobyAiJEdJVF9RVUlFVCIgPiIkZG90ZXN0L3F1aWV0IgogCWVjaG8gMSA+IiRkb3Rlc3QvbmV4dCIKIAlpZiB0ZXN0IC1uICIkcmViYXNpbmciCiAJdGhlbgogCQk6ID4iJGRvdGVzdC9yZWJhc2luZyIKIAllbHNlCiAJCTogPiIkZG90ZXN0L2FwcGx5aW5nIgotCQlnaXQgdXBkYXRlLXJlZiBPUklHX0hFQUQgSEVBRAorCQlpZiB0ZXN0IC1uICIkSEFTX0hFQUQiCisJCXRoZW4KKwkJCWdpdCB1cGRhdGUtcmVmIE9SSUdfSEVBRCBIRUFECisJCWVsc2UKKwkJCWdpdCB1cGRhdGUtcmVmIC1kIE9SSUdfSEVBRCA+L2Rldi9udWxsIDI+JjEKKwkJZmkKIAlmaQogZmkKIAogY2FzZSAiJHJlc29sdmVkIiBpbgogJycpCi0JZmlsZXM9JChnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLW5hbWUtb25seSBIRUFEIC0tKSB8fCBleGl0Ci0JaWYgWyAiJGZpbGVzIiBdOyB0aGVuCi0JICAgZWNobyAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJGZpbGVzKSIgPiYyCi0JICAgZXhpdCAxCisJY2FzZSAiJEhBU19IRUFEIiBpbgorCScnKQorCQlmaWxlcz0kKGdpdCBscy1maWxlcykgOzsKKwk/KikKKwkJZmlsZXM9JChnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLW5hbWUtb25seSBIRUFEIC0tKSA7OworCWVzYWMgfHwgZXhpdAorCWlmIHRlc3QgIiRmaWxlcyIKKwl0aGVuCisJCXRlc3QgLW4gIiRIQVNfSEVBRCIgJiYgOiA+IiRkb3Rlc3QvZGlydHlpbmRleCIKKwkJZGllICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAkZmlsZXMpIgogCWZpCiBlc2FjCiAKQEAgLTI4NCw2ICs0NTgsMTAgQEAKIHRoZW4KIAlrZWVwPS1rCiBmaQoraWYgdGVzdCAiJChjYXQgIiRkb3Rlc3QvcXVpZXQiKSIgPSB0Cit0aGVuCisJR0lUX1FVSUVUPXQKK2ZpCiBpZiB0ZXN0ICIkKGNhdCAiJGRvdGVzdC90aHJlZXdheSIpIiA9IHQKIHRoZW4KIAl0aHJlZXdheT10CkBAIC0zMDksNyArNDg3LDcgQEAKIAogaWYgdGVzdCAiJHRoaXMiIC1ndCAiJGxhc3QiCiB0aGVuCi0JZWNobyBOb3RoaW5nIHRvIGRvLgorCXNheSBOb3RoaW5nIHRvIGRvLgogCXJtIC1mciAiJGRvdGVzdCIKIAlleGl0CiBmaQpAQCAtNDU1LDExICs2MzMsMTggQEAKIAkJc3RvcF9oZXJlICR0aGlzCiAJZmkKIAotCXByaW50ZiAnQXBwbHlpbmc6ICVzXG4nICIkRklSU1RMSU5FIgorCXNheSAiQXBwbHlpbmc6ICRGSVJTVExJTkUiCiAKIAljYXNlICIkcmVzb2x2ZWQiIGluCiAJJycpCi0JCWdpdCBhcHBseSAkZ2l0X2FwcGx5X29wdCAtLWluZGV4ICIkZG90ZXN0L3BhdGNoIgorCQkjIFdoZW4gd2UgYXJlIGFsbG93ZWQgdG8gZmFsbCBiYWNrIHRvIDMtd2F5IGxhdGVyLCBkb24ndCBnaXZlCisJCSMgZmFsc2UgZXJyb3JzIGR1cmluZyB0aGUgaW5pdGlhbCBhdHRlbXB0LgorCQlzcXVlbGNoPQorCQlpZiB0ZXN0ICIkdGhyZWV3YXkiID0gdAorCQl0aGVuCisJCQlzcXVlbGNoPSc+L2Rldi9udWxsIDI+JjEgJworCQlmaQorCQlldmFsICJnaXQgYXBwbHkgJHNxdWVsY2gkZ2l0X2FwcGx5X29wdCInIC0taW5kZXggIiRkb3Rlc3QvcGF0Y2giJwogCQlhcHBseV9zdGF0dXM9JD8KIAkJOzsKIAl0KQpAQCAtNDkxLDcgKzY3Niw3IEBACiAJCSAgICAjIEFwcGx5aW5nIHRoZSBwYXRjaCB0byBhbiBlYXJsaWVyIHRyZWUgYW5kIG1lcmdpbmcgdGhlCiAJCSAgICAjIHJlc3VsdCBtYXkgaGF2ZSBwcm9kdWNlZCB0aGUgc2FtZSB0cmVlIGFzIG91cnMuCiAJCSAgICBnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgLS0gJiYgewotCQkJZWNobyBObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4KKwkJCXNheSBObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4KIAkJCWdvX25leHQKIAkJCWNvbnRpbnVlCiAJCSAgICB9CkBAIC01MDEsNyArNjg2LDcgQEAKIAlmaQogCWlmIHRlc3QgJGFwcGx5X3N0YXR1cyAhPSAwCiAJdGhlbgotCQllY2hvIFBhdGNoIGZhaWxlZCBhdCAkbXNnbnVtLgorCQlwcmludGYgJ1BhdGNoIGZhaWxlZCBhdCAlcyAlc1xuJyAiJG1zZ251bSIgIiRGSVJTVExJTkUiCiAJCXN0b3BfaGVyZV91c2VyX3Jlc29sdmUgJHRoaXMKIAlmaQogCkBAIC01MTEsOCArNjk2LDIxIEBACiAJZmkKIAogCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKLQlwYXJlbnQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCi0JY29tbWl0PSQoZ2l0IGNvbW1pdC10cmVlICR0cmVlIC1wICRwYXJlbnQgPCIkZG90ZXN0L2ZpbmFsLWNvbW1pdCIpICYmCisJY29tbWl0PSQoCisJCWlmIHRlc3QgLW4gIiRpZ25vcmVfZGF0ZSIKKwkJdGhlbgorCQkJR0lUX0FVVEhPUl9EQVRFPQorCQlmaQorCQlwYXJlbnQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIEhFQUQpIHx8CisJCXNheSA+JjIgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCisKKwkJaWYgdGVzdCAtbiAiJGNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlIgorCQl0aGVuCisJCQlHSVRfQ09NTUlUVEVSX0RBVEU9IiRHSVRfQVVUSE9SX0RBVEUiCisJCQlleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFCisJCWZpICYmCisJCWdpdCBjb21taXQtdHJlZSAkdHJlZSAke3BhcmVudDorLXB9ICRwYXJlbnQgPCIkZG90ZXN0L2ZpbmFsLWNvbW1pdCIKKwkpICYmCiAJZ2l0IHVwZGF0ZS1yZWYgLW0gIiRHSVRfUkVGTE9HX0FDVElPTjogJEZJUlNUTElORSIgSEVBRCAkY29tbWl0ICRwYXJlbnQgfHwKIAlzdG9wX2hlcmUgJHRoaXMKIApkaWZmIC0tZ2l0IGEvZ2l0LWJpc2VjdC5zaCBiL2dpdC1iaXNlY3Quc2gKaW5kZXggMTBhZDM0MC4uODk2OTU1MyAxMDA3NTUKLS0tIGEvZ2l0LWJpc2VjdC5zaAorKysgYi9naXQtYmlzZWN0LnNoCkBAIC0zMywxNiArMzMsNiBAQAogX3g0MD0nWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXScKIF94NDA9IiRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAiCiAKLXNxKCkgewotCUBAUEVSTEBAIC1lICcKLQkJZm9yIChAQVJHVikgewotCQkJcy8nXCcnLydcJ1xcXFxcJ1wnJy9nOwotCQkJcHJpbnQgIiAnXCcnJF8nXCcnIjsKLQkJfQotCQlwcmludCAiXG4iOwotCScgIiRAIgotfQotCiBiaXNlY3RfYXV0b3N0YXJ0KCkgewogCXRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9TVEFSVCIgfHwgewogCQllY2hvID4mMiAnWW91IG5lZWQgdG8gc3RhcnQgYnkgImdpdCBiaXNlY3Qgc3RhcnQiJwpAQCAtNzcsNyArNjcsNyBAQAogCXRoZW4KIAkJIyBSZXNldCB0byB0aGUgcmV2IGZyb20gd2hlcmUgd2Ugc3RhcnRlZC4KIAkJc3RhcnRfaGVhZD0kKGNhdCAiJEdJVF9ESVIvQklTRUNUX1NUQVJUIikKLQkJZ2l0IGNoZWNrb3V0ICIkc3RhcnRfaGVhZCIgfHwgZXhpdAorCQlnaXQgY2hlY2tvdXQgIiRzdGFydF9oZWFkIiAtLSB8fCBleGl0CiAJZWxzZQogCQkjIEdldCByZXYgZnJvbSB3aGVyZSB3ZSBzdGFydC4KIAkJY2FzZSAiJGhlYWQiIGluCkBAIC0xMDcsNyArOTcsNyBAQAogCWZvciBhcmc7IGRvCiAJICAgIGNhc2UgIiRhcmciIGluIC0tKSBoYXNfZG91YmxlX2Rhc2g9MTsgYnJlYWsgOzsgZXNhYwogCWRvbmUKLQlvcmlnX2FyZ3M9JChzcSAiJEAiKQorCW9yaWdfYXJncz0kKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJEAiKQogCWJhZF9zZWVuPTAKIAlldmFsPScnCiAJd2hpbGUgWyAkIyAtZ3QgMCBdOyBkbwpAQCAtMTQ3LDcgKzEzNyw3IEBACiAJIyBXcml0ZSBuZXcgc3RhcnQgc3RhdGUuCiAJIwogCWVjaG8gIiRzdGFydF9oZWFkIiA+IiRHSVRfRElSL0JJU0VDVF9TVEFSVCIgJiYKLQlzcSAiJEAiID4iJEdJVF9ESVIvQklTRUNUX05BTUVTIiAmJgorCWdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJEAiID4iJEdJVF9ESVIvQklTRUNUX05BTUVTIiAmJgogCWV2YWwgIiRldmFsIiAmJgogCWVjaG8gImdpdCBiaXNlY3Qgc3RhcnQkb3JpZ19hcmdzIiA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIiB8fCBleGl0CiAJIwpAQCAtMTc3LDEwICsxNjcsNiBAQAogCXRlc3QgIiQxIiA9ICQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfRVhQRUNURURfUkVWIikKIH0KIAotbWFya19leHBlY3RlZF9yZXYoKSB7Ci0JZWNobyAiJDEiID4gIiRHSVRfRElSL0JJU0VDVF9FWFBFQ1RFRF9SRVYiCi19Ci0KIGNoZWNrX2V4cGVjdGVkX3JldnMoKSB7CiAJZm9yIF9yZXYgaW4gIiRAIjsgZG8KIAkJaWYgISBpc19leHBlY3RlZF9yZXYgIiRfcmV2IjsgdGhlbgpAQCAtMTk5LDcgKzE4NSw3IEBACiAgICAgICAgICAgICAqLi4qKQogICAgICAgICAgICAgICAgIHJldnM9JChnaXQgcmV2LWxpc3QgIiRhcmciKSB8fCBkaWUgIkJhZCByZXYgaW5wdXQ6ICRhcmciIDs7CiAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgIHJldnM9JChzcSAiJGFyZyIpIDs7CisgICAgICAgICAgICAgICAgcmV2cz0kKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJGFyZyIpIDs7CiAJICAgIGVzYWMKICAgICAgICAgICAgIGFsbD0iJGFsbCAkcmV2cyIKICAgICAgICAgZG9uZQpAQCAtMjc5LDI0MCArMjY1LDIyIEBACiAJYmlzZWN0X25leHRfY2hlY2sgJiYgYmlzZWN0X25leHQgfHwgOgogfQogCi1maWx0ZXJfc2tpcHBlZCgpIHsKLQlfZXZhbD0iJDEiCi0JX3NraXA9IiQyIgotCi0JaWYgWyAteiAiJF9za2lwIiBdOyB0aGVuCi0JCWV2YWwgIiRfZXZhbCIgfCB7Ci0JCQl3aGlsZSByZWFkIGxpbmUKLQkJCWRvCi0JCQkJZWNobyAiJGxpbmUgJiYiCi0JCQlkb25lCi0JCQllY2hvICc6JwotCQl9Ci0JCXJldHVybgotCWZpCi0KLQkjIExldCdzIHBhcnNlIHRoZSBvdXRwdXQgb2Y6Ci0JIyAiZ2l0IHJldi1saXN0IC0tYmlzZWN0LXZhcnMgLS1iaXNlY3QtYWxsIC4uLiIKLQlldmFsICIkX2V2YWwiIHwgewotCQlWQVJTPSBGT1VORD0gVFJJRUQ9Ci0JCXdoaWxlIHJlYWQgaGFzaCBsaW5lCi0JCWRvCi0JCQljYXNlICIkVkFSUywkRk9VTkQsJFRSSUVELCRoYXNoIiBpbgotCQkJMSwqLCosKikKLQkJCQkjICJiaXNlY3RfZm9vPWJhciIgcmVhZCBmcm9tIHJldi1saXN0IG91dHB1dC4KLQkJCQllY2hvICIkaGFzaCAmJiIKLQkJCQk7OwotCQkJLCosKiwtLS0qKQotCQkJCSMgU2VwYXJhdG9yCi0JCQkJOzsKLQkJCSwsLGJpc2VjdF9yZXYqKQotCQkJCSMgV2UgaGFkIG5vdGhpbmcgdG8gc2VhcmNoLgotCQkJCWVjaG8gImJpc2VjdF9yZXY9ICYmIgotCQkJCVZBUlM9MQotCQkJCTs7Ci0JCQksLCosYmlzZWN0X3JldiopCi0JCQkJIyBXZSBkaWQgbm90IGZpbmQgYSBnb29kIGJpc2VjdCByZXYuCi0JCQkJIyBUaGlzIHNob3VsZCBoYXBwZW4gb25seSBpZiB0aGUgImJhZCIKLQkJCQkjIGNvbW1pdCBpcyBhbHNvIGEgInNraXAiIGNvbW1pdC4KLQkJCQllY2hvICJiaXNlY3RfcmV2PSckVFJJRUQnICYmIgotCQkJCVZBUlM9MQotCQkJCTs7Ci0JCQksLCosKikKLQkJCQkjIFdlIGFyZSBzZWFyY2hpbmcuCi0JCQkJVFJJRUQ9IiR7VFJJRUQ6KyRUUklFRHx9JGhhc2giCi0JCQkJY2FzZSAiJF9za2lwIiBpbgotCQkJCSokaGFzaCopIDs7Ci0JCQkJKikKLQkJCQkJZWNobyAiYmlzZWN0X3Jldj0kaGFzaCAmJiIKLQkJCQkJZWNobyAiYmlzZWN0X3RyaWVkPSckVFJJRUQnICYmIgotCQkJCQlGT1VORD0xCi0JCQkJCTs7Ci0JCQkJZXNhYwotCQkJCTs7Ci0JCQksMSwqLGJpc2VjdF9yZXYqKQotCQkJCSMgV2UgaGF2ZSBhbHJlYWR5IGZvdW5kIGEgcmV2IHRvIGJlIHRlc3RlZC4KLQkJCQlWQVJTPTEKLQkJCQk7OwotCQkJLDEsKiwqKQotCQkJCTs7Ci0JCQkqKQotCQkJCSMgVW5leHBlY3RlZCBpbnB1dAotCQkJCWVjaG8gImRpZSAnZmlsdGVyX3NraXBwZWQgZXJyb3InIgotCQkJCWRpZSAiZmlsdGVyX3NraXBwZWQgZXJyb3IgIiBcCi0JCQkJICAgICJWQVJTOiAnJFZBUlMnICIgXAotCQkJCSAgICAiRk9VTkQ6ICckRk9VTkQnICIgXAotCQkJCSAgICAiVFJJRUQ6ICckVFJJRUQnICIgXAotCQkJCSAgICAiaGFzaDogJyRoYXNoJyAiIFwKLQkJCQkgICAgImxpbmU6ICckbGluZSciCi0JCQkJOzsKLQkJCWVzYWMKLQkJZG9uZQotCQllY2hvICc6JwotCX0KLX0KLQotZXhpdF9pZl9za2lwcGVkX2NvbW1pdHMgKCkgewotCV90cmllZD0kMQotCWlmIGV4cHIgIiRfdHJpZWQiIDogIi4qW3xdLioiID4gL2Rldi9udWxsIDsgdGhlbgotCQllY2hvICJUaGVyZSBhcmUgb25seSAnc2tpcCdwZWQgY29tbWl0IGxlZnQgdG8gdGVzdC4iCi0JCWVjaG8gIlRoZSBmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZjoiCi0JCWVjaG8gIiRfdHJpZWQiIHwgdHIgJ1t8XScgJ1tcMDEyXScKLQkJZWNobyAiV2UgY2Fubm90IGJpc2VjdCBtb3JlISIKLQkJZXhpdCAyCi0JZmkKLX0KLQotYmlzZWN0X2NoZWNrb3V0KCkgewotCV9yZXY9IiQxIgotCV9tc2c9IiQyIgotCWVjaG8gIkJpc2VjdGluZzogJF9tc2ciCi0JbWFya19leHBlY3RlZF9yZXYgIiRfcmV2IgotCWdpdCBjaGVja291dCAtcSAiJF9yZXYiIHx8IGV4aXQKLQlnaXQgc2hvdy1icmFuY2ggIiRfcmV2IgotfQotCi1pc19hbW9uZygpIHsKLQlfcmV2PSIkMSIKLQlfbGlzdD0iJDIiCi0JY2FzZSAiJF9saXN0IiBpbiAqJF9yZXYqKSByZXR1cm4gMCA7OyBlc2FjCi0JcmV0dXJuIDEKLX0KLQotaGFuZGxlX2JhZF9tZXJnZV9iYXNlKCkgewotCV9iYWRtYj0iJDEiCi0JX2dvb2Q9IiQyIgotCWlmIGlzX2V4cGVjdGVkX3JldiAiJF9iYWRtYiI7IHRoZW4KLQkJY2F0ID4mMiA8PEVPRgotVGhlIG1lcmdlIGJhc2UgJF9iYWRtYiBpcyBiYWQuCi1UaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiAkX2JhZG1iIGFuZCBbJF9nb29kXS4KLUVPRgotCQlleGl0IDMKLQllbHNlCi0JCWNhdCA+JjIgPDxFT0YKLVNvbWUgZ29vZCByZXZzIGFyZSBub3QgYW5jZXN0b3Igb2YgdGhlIGJhZCByZXYuCi1naXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS4KLU1heWJlIHlvdSBtaXN0YWtlIGdvb2QgYW5kIGJhZCByZXZzPwotRU9GCi0JCWV4aXQgMQotCWZpCi19Ci0KLWhhbmRsZV9za2lwcGVkX21lcmdlX2Jhc2UoKSB7Ci0JX21iPSIkMSIKLQlfYmFkPSIkMiIKLQlfZ29vZD0iJDMiCi0JY2F0ID4mMiA8PEVPRgotV2FybmluZzogdGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAkX2JhZCBhbmQgWyRfZ29vZF0gbXVzdCBiZSBza2lwcGVkLgotU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0IGJhZCBjb21taXQgaXMgYmV0d2VlbiAkX21iIGFuZCAkX2JhZC4KLVdlIGNvbnRpbnVlIGFueXdheS4KLUVPRgotfQotCi0jCi0jICJjaGVja19tZXJnZV9iYXNlcyIgY2hlY2tzIHRoYXQgbWVyZ2UgYmFzZXMgYXJlIG5vdCAiYmFkIi4KLSMKLSMgLSBJZiBvbmUgaXMgImdvb2QiLCB0aGF0J3MgZ29vZCwgd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotIyAtIElmIG9uZSBpcyAiYmFkIiwgaXQgbWVhbnMgdGhlIHVzZXIgYXNzdW1lZCBzb21ldGhpbmcgd3JvbmcKLSMgYW5kIHdlIG11c3QgZXhpdC4KLSMgLSBJZiBvbmUgaXMgInNraXBwZWQiLCB3ZSBjYW4ndCBrbm93IGJ1dCB3ZSBzaG91bGQgd2Fybi4KLSMgLSBJZiB3ZSBkb24ndCBrbm93LCB3ZSBzaG91bGQgY2hlY2sgaXQgb3V0IGFuZCBhc2sgdGhlIHVzZXIgdG8gdGVzdC4KLSMKLSMgSW4gdGhlIGxhc3QgY2FzZSB3ZSB3aWxsIHJldHVybiAxLCBhbmQgb3RoZXJ3aXNlIDAuCi0jCi1jaGVja19tZXJnZV9iYXNlcygpIHsKLQlfYmFkPSIkMSIKLQlfZ29vZD0iJDIiCi0JX3NraXA9IiQzIgotCWZvciBfbWIgaW4gJChnaXQgbWVyZ2UtYmFzZSAtLWFsbCAkX2JhZCAkX2dvb2QpCi0JZG8KLQkJaWYgaXNfYW1vbmcgIiRfbWIiICIkX2dvb2QiOyB0aGVuCi0JCQljb250aW51ZQotCQllbGlmIHRlc3QgIiRfbWIiID0gIiRfYmFkIjsgdGhlbgotCQkJaGFuZGxlX2JhZF9tZXJnZV9iYXNlICIkX2JhZCIgIiRfZ29vZCIKLQkJZWxpZiBpc19hbW9uZyAiJF9tYiIgIiRfc2tpcCI7IHRoZW4KLQkJCWhhbmRsZV9za2lwcGVkX21lcmdlX2Jhc2UgIiRfbWIiICIkX2JhZCIgIiRfZ29vZCIKLQkJZWxzZQotCQkJYmlzZWN0X2NoZWNrb3V0ICIkX21iIiAiYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIgotCQkJcmV0dXJuIDEKLQkJZmkKLQlkb25lCi0JcmV0dXJuIDAKLX0KLQotIwotIyAiY2hlY2tfZ29vZF9hcmVfYW5jZXN0b3JzX29mX2JhZCIgY2hlY2tzIHRoYXQgYWxsICJnb29kIiByZXZzIGFyZQotIyBhbmNlc3RvciBvZiB0aGUgImJhZCIgcmV2LgotIwotIyBJZiB0aGF0J3Mgbm90IHRoZSBjYXNlLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBtZXJnZSBiYXNlcy4KLSMgSWYgYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIGJ5IHRoZSB1c2VyIHdlIHJldHVybiAxIGFuZAotIyBvdGhlcndpc2UgMC4KLSMKLWNoZWNrX2dvb2RfYXJlX2FuY2VzdG9yc19vZl9iYWQoKSB7Ci0JdGVzdCAtZiAiJEdJVF9ESVIvQklTRUNUX0FOQ0VTVE9SU19PSyIgJiYKLQkJcmV0dXJuCi0KLQlfYmFkPSIkMSIKLQlfZ29vZD0kKGVjaG8gJDIgfCBzZWQgLWUgJ3MvXF4vL2cnKQotCV9za2lwPSIkMyIKLQotCSMgQmlzZWN0aW5nIHdpdGggbm8gZ29vZCByZXYgaXMgb2sKLQl0ZXN0IC16ICIkX2dvb2QiICYmIHJldHVybgotCi0JX3NpZGU9JChnaXQgcmV2LWxpc3QgJF9nb29kIF4kX2JhZCkKLQlpZiB0ZXN0IC1uICIkX3NpZGUiOyB0aGVuCi0JCSMgUmV0dXJuIGlmIGEgY2hlY2tvdXQgd2FzIGRvbmUKLQkJY2hlY2tfbWVyZ2VfYmFzZXMgIiRfYmFkIiAiJF9nb29kIiAiJF9za2lwIiB8fCByZXR1cm4KLQlmaQotCi0JOiA+ICIkR0lUX0RJUi9CSVNFQ1RfQU5DRVNUT1JTX09LIgotCi0JcmV0dXJuIDAKLX0KLQogYmlzZWN0X25leHQoKSB7CiAJY2FzZSAiJCMiIGluIDApIDs7ICopIHVzYWdlIDs7IGVzYWMKIAliaXNlY3RfYXV0b3N0YXJ0CiAJYmlzZWN0X25leHRfY2hlY2sgZ29vZAogCi0JIyBHZXQgYmFkLCBnb29kIGFuZCBza2lwcGVkIHJldnMKLQliYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvYmlzZWN0L2JhZCkgJiYKLQlnb29kPSQoZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nXiUob2JqZWN0bmFtZSknIFwKLQkJInJlZnMvYmlzZWN0L2dvb2QtKiIgfCB0ciAnXDAxMicgJyAnKSAmJgotCXNraXA9JChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKG9iamVjdG5hbWUpJyBcCi0JCSJyZWZzL2Jpc2VjdC9za2lwLSoiIHwgdHIgJ1wwMTInICcgJykgfHwgZXhpdAorCSMgUGVyZm9ybSBhbGwgYmlzZWN0aW9uIGNvbXB1dGF0aW9uLCBkaXNwbGF5IGFuZCBjaGVja291dAorCWdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsCisJcmVzPSQ/CiAKLQkjIE1heWJlIHNvbWUgbWVyZ2UgYmFzZXMgbXVzdCBiZSB0ZXN0ZWQgZmlyc3QKLQljaGVja19nb29kX2FyZV9hbmNlc3RvcnNfb2ZfYmFkICIkYmFkIiAiJGdvb2QiICIkc2tpcCIKLQkjIFJldHVybiBub3cgaWYgYSBjaGVja291dCBoYXMgYWxyZWFkeSBiZWVuIGRvbmUKLQl0ZXN0ICIkPyIgLWVxICIxIiAmJiByZXR1cm4KKyAgICAgICAgIyBDaGVjayBpZiB3ZSBzaG91bGQgZXhpdCBiZWNhdXNlIGJpc2VjdGlvbiBpcyBmaW5pc2hlZAorCXRlc3QgJHJlcyAtZXEgMTAgJiYgZXhpdCAwCiAKLQkjIEdldCBiaXNlY3Rpb24gaW5mb3JtYXRpb24KLQlCSVNFQ1RfT1BUPScnCi0JdGVzdCAtbiAiJHNraXAiICYmIEJJU0VDVF9PUFQ9Jy0tYmlzZWN0LWFsbCcKLQlldmFsPSJnaXQgcmV2LWxpc3QgLS1iaXNlY3QtdmFycyAkQklTRUNUX09QVCAkZ29vZCAkYmFkIC0tIiAmJgotCWV2YWw9IiRldmFsICQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfTkFNRVMiKSIgJiYKLQlldmFsPSQoZmlsdGVyX3NraXBwZWQgIiRldmFsIiAiJHNraXAiKSAmJgotCWV2YWwgIiRldmFsIiB8fCBleGl0CisJIyBDaGVjayBmb3IgYW4gZXJyb3IgaW4gdGhlIGJpc2VjdGlvbiBwcm9jZXNzCisJdGVzdCAkcmVzIC1uZSAwICYmIGV4aXQgJHJlcwogCi0JaWYgWyAteiAiJGJpc2VjdF9yZXYiIF07IHRoZW4KLQkJZWNobyAiJGJhZCB3YXMgYm90aCBnb29kIGFuZCBiYWQiCi0JCWV4aXQgMQotCWZpCi0JaWYgWyAiJGJpc2VjdF9yZXYiID0gIiRiYWQiIF07IHRoZW4KLQkJZXhpdF9pZl9za2lwcGVkX2NvbW1pdHMgIiRiaXNlY3RfdHJpZWQiCi0JCWVjaG8gIiRiaXNlY3RfcmV2IGlzIGZpcnN0IGJhZCBjb21taXQiCi0JCWdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgJGJpc2VjdF9yZXYKLQkJZXhpdCAwCi0JZmkKLQotCSMgV2Ugc2hvdWxkIGV4aXQgaGVyZSBvbmx5IGlmIHRoZSAiYmFkIgotCSMgY29tbWl0IGlzIGFsc28gYSAic2tpcCIgY29tbWl0IChzZWUgYWJvdmUpLgotCWV4aXRfaWZfc2tpcHBlZF9jb21taXRzICIkYmlzZWN0X3JldiIKLQotCWJpc2VjdF9jaGVja291dCAiJGJpc2VjdF9yZXYiICIkYmlzZWN0X25yIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyIKKwlyZXR1cm4gMAogfQogCiBiaXNlY3RfdmlzdWFsaXplKCkgewpAQCAtNTQ5LDcgKzMxNyw3IEBACiAJKikKIAkgICAgdXNhZ2UgOzsKIAllc2FjCi0JZ2l0IGNoZWNrb3V0ICIkYnJhbmNoIiAmJiBiaXNlY3RfY2xlYW5fc3RhdGUKKwlnaXQgY2hlY2tvdXQgIiRicmFuY2giIC0tICYmIGJpc2VjdF9jbGVhbl9zdGF0ZQogfQogCiBiaXNlY3RfY2xlYW5fc3RhdGUoKSB7CmRpZmYgLS1naXQgYS9naXQtY29tcGF0LXV0aWwuaCBiL2dpdC1jb21wYXQtdXRpbC5oCmluZGV4IDEyNGJiOTQuLjlmOTQxZTQgMTAwNjQ0Ci0tLSBhL2dpdC1jb21wYXQtdXRpbC5oCisrKyBiL2dpdC1jb21wYXQtdXRpbC5oCkBAIC03LDcgKzcsNyBAQAogLyoKICAqIFNlZSBpZiBvdXIgY29tcGlsZXIgaXMga25vd24gdG8gc3VwcG9ydCBmbGV4aWJsZSBhcnJheSBtZW1iZXJzLgogICovCi0jaWYgZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKQorI2lmIGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgKF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkgJiYgKCFkZWZpbmVkKF9fU1VOUFJPX0MpIHx8IChfX1NVTlBST19DID4gMHg1ODApKQogIyBkZWZpbmUgRkxFWF9BUlJBWSAvKiBlbXB0eSAqLwogI2VsaWYgZGVmaW5lZChfX0dOVUNfXykKICMgaWYgKF9fR05VQ19fID49IDMpCkBAIC0yNiw2ICsyNiw3IEBACiAjZW5kaWYKIAogI2RlZmluZSBBUlJBWV9TSVpFKHgpIChzaXplb2YoeCkvc2l6ZW9mKHhbMF0pKQorI2RlZmluZSBiaXRzaXplb2YoeCkgIChDSEFSX0JJVCAqIHNpemVvZih4KSkKIAogI2lmZGVmIF9fR05VQ19fCiAjZGVmaW5lIFRZUEVPRih4KSAoX190eXBlb2ZfXyh4KSkKQEAgLTMzLDE5ICszNCwzOCBAQAogI2RlZmluZSBUWVBFT0YoeCkKICNlbmRpZgogCi0jZGVmaW5lIE1TQih4LCBiaXRzKSAoKHgpICYgVFlQRU9GKHgpKH4wVUxMIDw8IChzaXplb2YoeCkgKiA4IC0gKGJpdHMpKSkpCisjZGVmaW5lIE1TQih4LCBiaXRzKSAoKHgpICYgVFlQRU9GKHgpKH4wVUxMIDw8IChiaXRzaXplb2YoeCkgLSAoYml0cykpKSkKICNkZWZpbmUgSEFTX01VTFRJX0JJVFMoaSkgICgoaSkgJiAoKGkpIC0gMSkpICAvKiBjaGVja3MgaWYgYW4gaW50ZWdlciBoYXMgbW9yZSB0aGFuIDEgYml0IHNldCAqLwogCisjZGVmaW5lIERJVl9ST1VORF9VUChuLGQpICgoKG4pICsgKGQpIC0gMSkgLyAoZCkpCisKIC8qIEFwcHJveGltYXRpb24gb2YgdGhlIGxlbmd0aCBvZiB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHR5cGUuICovCiAjZGVmaW5lIGRlY2ltYWxfbGVuZ3RoKHgpCSgoaW50KShzaXplb2YoeCkgKiAyLjU2ICsgMC41KSArIDEpCiAKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAgJiYgIWRlZmluZWQoX19VU0xDX18pICYmICFkZWZpbmVkKF9NX1VOSVgpCisjaWYgZGVmaW5lZChfX3N1bl9fKQorIC8qCisgICogT24gU29sYXJpcywgd2hlbiBfWE9QRU5fRVhURU5ERUQgaXMgc2V0LCBpdHMgaGVhZGVyIGZpbGUKKyAgKiBmb3JjZXMgdGhlIHByb2dyYW1zIHRvIGJlIFhQRzR2MiwgZGVmZWF0aW5nIGFueSBfWE9QRU5fU09VUkNFCisgICogc2V0dGluZyB0byBzYXkgd2UgYXJlIFhQRzUgb3IgWFBHNi4gIEFsc28gb24gU29sYXJpcywKKyAgKiBYUEc2IHByb2dyYW1zIG11c3QgYmUgY29tcGlsZWQgd2l0aCBhIGM5OSBjb21waWxlciwgd2hpbGUKKyAgKiBub24gWFBHNiBwcm9ncmFtcyBtdXN0IGJlIGNvbXBpbGVkIHdpdGggYSBwcmUtYzk5IGNvbXBpbGVyLgorICAqLworIyBpZiBfX1NURENfVkVSU0lPTl9fIC0gMCA+PSAxOTk5MDFMCisjIGRlZmluZSBfWE9QRU5fU09VUkNFIDYwMAorIyBlbHNlCisjIGRlZmluZSBfWE9QRU5fU09VUkNFIDUwMAorIyBlbmRpZgorI2VsaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgICYmICFkZWZpbmVkKF9fVVNMQ19fKSAmJiAhZGVmaW5lZChfTV9VTklYKSAmJiAhZGVmaW5lZChzZ2kpCiAjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNjAwIC8qIGdsaWJjMiBhbmQgQUlYIDUuM0wgbmVlZCA1MDAsIE9wZW5CU0QgbmVlZHMgNjAwIGZvciBTX0lTTE5LKCkgKi8KKyNpZm5kZWYgX19zdW5fXwogI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEgLyogQUlYIDUuM0wgbmVlZHMgdGhpcyAqLwogI2VuZGlmCisjZW5kaWYKICNkZWZpbmUgX0FMTF9TT1VSQ0UgMQogI2RlZmluZSBfR05VX1NPVVJDRSAxCiAjZGVmaW5lIF9CU0RfU09VUkNFIDEKKyNkZWZpbmUgX05FVEJTRF9TT1VSQ0UgMQorI2RlZmluZSBfU0dJX1NPVVJDRSAxCiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtOTYsNiArMTE2LDEzIEBACiAjaW5jbHVkZSAiY29tcGF0L21pbmd3LmgiCiAjZW5kaWYJLyogX19NSU5HVzMyX18gKi8KIAorI2lmbmRlZiBOT19MSUJHRU5fSAorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2Vsc2UKKyNkZWZpbmUgYmFzZW5hbWUgZ2l0YmFzZW5hbWUKK2V4dGVybiBjaGFyICpnaXRiYXNlbmFtZShjaGFyICopOworI2VuZGlmCisKICNpZm5kZWYgTk9fSUNPTlYKICNpbmNsdWRlIDxpY29udi5oPgogI2VuZGlmCkBAIC0xNTIsNiArMTc5LDcgQEAKIC8qIEdlbmVyYWwgaGVscGVyIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqZXJyKSBOT1JFVFVSTjsKIGV4dGVybiB2b2lkIGRpZShjb25zdCBjaGFyICplcnIsIC4uLikgTk9SRVRVUk4gX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitleHRlcm4gdm9pZCBkaWVfZXJybm8oY29uc3QgY2hhciAqZXJyLCAuLi4pIE5PUkVUVVJOIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogZXh0ZXJuIGludCBlcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CiBleHRlcm4gdm9pZCB3YXJuaW5nKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKIApAQCAtMTY2LDcgKzE5NCw3IEBACiAJcmV0dXJuIHN0cm5jbXAoc3RyLCBwcmVmaXgsIGxlbikgPyBOVUxMIDogc3RyICsgbGVuOwogfQogCi0jaWZkZWYgTk9fTU1BUAorI2lmIGRlZmluZWQoTk9fTU1BUCkgfHwgZGVmaW5lZChVU0VfV0lOMzJfTU1BUCkKIAogI2lmbmRlZiBQUk9UX1JFQUQKICNkZWZpbmUgUFJPVF9SRUFEIDEKQEAgLTE4MCwxMyArMjA4LDE5IEBACiBleHRlcm4gdm9pZCAqZ2l0X21tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsIGludCBwcm90LCBpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KTsKIGV4dGVybiBpbnQgZ2l0X211bm1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCk7CiAKKyNlbHNlIC8qIE5PX01NQVAgfHwgVVNFX1dJTjMyX01NQVAgKi8KKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNlbmRpZiAvKiBOT19NTUFQIHx8IFVTRV9XSU4zMl9NTUFQICovCisKKyNpZmRlZiBOT19NTUFQCisKIC8qIFRoaXMgdmFsdWUgbXVzdCBiZSBtdWx0aXBsZSBvZiAocGFnZXNpemUgKiAyKSAqLwogI2RlZmluZSBERUZBVUxUX1BBQ0tFRF9HSVRfV0lORE9XX1NJWkUgKDEgKiAxMDI0ICogMTAyNCkKIAogI2Vsc2UgLyogTk9fTU1BUCAqLwogCi0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLQogLyogVGhpcyB2YWx1ZSBtdXN0IGJlIG11bHRpcGxlIG9mIChwYWdlc2l6ZSAqIDIpICovCiAjZGVmaW5lIERFRkFVTFRfUEFDS0VEX0dJVF9XSU5ET1dfU0laRSBcCiAJKHNpemVvZih2b2lkKikgPj0gOCBcCkBAIC0yMjUsNiArMjU5LDExIEBACiBleHRlcm4gY2hhciAqZ2l0bWtkdGVtcChjaGFyICopOwogI2VuZGlmCiAKKyNpZmRlZiBOT19NS1NURU1QUworI2RlZmluZSBta3N0ZW1wcyBnaXRta3N0ZW1wcworZXh0ZXJuIGludCBnaXRta3N0ZW1wcyhjaGFyICosIGludCk7CisjZW5kaWYKKwogI2lmZGVmIE5PX1VOU0VURU5WCiAjZGVmaW5lIHVuc2V0ZW52IGdpdHVuc2V0ZW52CiBleHRlcm4gdm9pZCBnaXR1bnNldGVudihjb25zdCBjaGFyICopOwpAQCAtMzE5LDYgKzM1OCw3IEBACiB9CiAKIC8qIFNhbmUgY3R5cGUgLSBubyBsb2NhbGUsIGFuZCB3b3JrcyB3aXRoIHNpZ25lZCBjaGFycyAqLworI3VuZGVmIGlzYXNjaWkKICN1bmRlZiBpc3NwYWNlCiAjdW5kZWYgaXNkaWdpdAogI3VuZGVmIGlzYWxwaGEKQEAgLTMyOSwxMyArMzY5LDE2IEBACiAjZGVmaW5lIEdJVF9TUEFDRSAweDAxCiAjZGVmaW5lIEdJVF9ESUdJVCAweDAyCiAjZGVmaW5lIEdJVF9BTFBIQSAweDA0Ci0jZGVmaW5lIEdJVF9TUEVDSUFMIDB4MDgKKyNkZWZpbmUgR0lUX0dMT0JfU1BFQ0lBTCAweDA4CisjZGVmaW5lIEdJVF9SRUdFWF9TUEVDSUFMIDB4MTAKICNkZWZpbmUgc2FuZV9pc3Rlc3QoeCxtYXNrKSAoKHNhbmVfY3R5cGVbKHVuc2lnbmVkIGNoYXIpKHgpXSAmIChtYXNrKSkgIT0gMCkKKyNkZWZpbmUgaXNhc2NpaSh4KSAoKCh4KSAmIH4weDdmKSA9PSAwKQogI2RlZmluZSBpc3NwYWNlKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX1NQQUNFKQogI2RlZmluZSBpc2RpZ2l0KHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0RJR0lUKQogI2RlZmluZSBpc2FscGhhKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0FMUEhBKQogI2RlZmluZSBpc2FsbnVtKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0FMUEhBIHwgR0lUX0RJR0lUKQotI2RlZmluZSBpc3NwZWNpYWwoeCkgc2FuZV9pc3Rlc3QoeCxHSVRfU1BFQ0lBTCkKKyNkZWZpbmUgaXNfZ2xvYl9zcGVjaWFsKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0dMT0JfU1BFQ0lBTCkKKyNkZWZpbmUgaXNfcmVnZXhfc3BlY2lhbCh4KSBzYW5lX2lzdGVzdCh4LEdJVF9HTE9CX1NQRUNJQUwgfCBHSVRfUkVHRVhfU1BFQ0lBTCkKICNkZWZpbmUgdG9sb3dlcih4KSBzYW5lX2Nhc2UoKHVuc2lnbmVkIGNoYXIpKHgpLCAweDIwKQogI2RlZmluZSB0b3VwcGVyKHgpIHNhbmVfY2FzZSgodW5zaWduZWQgY2hhcikoeCksIDApCiAKQEAgLTM4NCw0ICs0MjcsMzAgQEAKICMgZGVmaW5lIEZPUkNFX0RJUl9TRVRfR0lEIDAKICNlbmRpZgogCisjaWZkZWYgTk9fTlNFQworI3VuZGVmIFVTRV9OU0VDCisjZGVmaW5lIFNUX0NUSU1FX05TRUMoc3QpIDAKKyNkZWZpbmUgU1RfTVRJTUVfTlNFQyhzdCkgMAorI2Vsc2UKKyNpZmRlZiBVU0VfU1RfVElNRVNQRUMKKyNkZWZpbmUgU1RfQ1RJTUVfTlNFQyhzdCkgKCh1bnNpZ25lZCBpbnQpKChzdCkuc3RfY3RpbWVzcGVjLnR2X25zZWMpKQorI2RlZmluZSBTVF9NVElNRV9OU0VDKHN0KSAoKHVuc2lnbmVkIGludCkoKHN0KS5zdF9tdGltZXNwZWMudHZfbnNlYykpCisjZWxzZQorI2RlZmluZSBTVF9DVElNRV9OU0VDKHN0KSAoKHVuc2lnbmVkIGludCkoKHN0KS5zdF9jdGltLnR2X25zZWMpKQorI2RlZmluZSBTVF9NVElNRV9OU0VDKHN0KSAoKHVuc2lnbmVkIGludCkoKHN0KS5zdF9tdGltLnR2X25zZWMpKQorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFVOUkVMSUFCTEVfRlNUQVQKKyNkZWZpbmUgZnN0YXRfaXNfcmVsaWFibGUoKSAwCisjZWxzZQorI2RlZmluZSBmc3RhdF9pc19yZWxpYWJsZSgpIDEKKyNlbmRpZgorCisvKgorICogUHJlc2VydmVzIGVycm5vLCBwcmludHMgYSBtZXNzYWdlLCBidXQgZ2l2ZXMgbm8gd2FybmluZyBmb3IgRU5PRU5ULgorICogQWx3YXlzIHJldHVybnMgdGhlIHJldHVybiB2YWx1ZSBvZiB1bmxpbmsoMikuCisgKi8KK2ludCB1bmxpbmtfb3Jfd2Fybihjb25zdCBjaGFyICpwYXRoKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9naXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwgYi9naXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwKaW5kZXggNmQ5ZjBlZi4uNTliNjcyMiAxMDA3NTUKLS0tIGEvZ2l0LWN2c2V4cG9ydGNvbW1pdC5wZXJsCisrKyBiL2dpdC1jdnNleHBvcnRjb21taXQucGVybApAQCAtOCw5ICs4LDkgQEAKIHVzZSBGaWxlOjpTcGVjOwogdXNlIEdpdDsKIAotb3VyICgkb3B0X2gsICRvcHRfUCwgJG9wdF9wLCAkb3B0X3YsICRvcHRfYywgJG9wdF9mLCAkb3B0X2EsICRvcHRfbSwgJG9wdF9kLCAkb3B0X3UsICRvcHRfdywgJG9wdF9XKTsKK291ciAoJG9wdF9oLCAkb3B0X1AsICRvcHRfcCwgJG9wdF92LCAkb3B0X2MsICRvcHRfZiwgJG9wdF9hLCAkb3B0X20sICRvcHRfZCwgJG9wdF91LCAkb3B0X3csICRvcHRfVywgJG9wdF9rKTsKIAotZ2V0b3B0cygndWhQcHZjZmFtOmQ6dzpXJyk7CitnZXRvcHRzKCd1aFBwdmNma2FtOmQ6dzpXJyk7CiAKICRvcHRfaCAmJiB1c2FnZSgpOwogCkBAIC0yMjUsNyArMjI1LDE0IEBACiAgICAgICBmb3JlYWNoIG15ICRuYW1lIChrZXlzICV0b2RvKSB7CiAJbXkgJGJhc2VuYW1lID0gYmFzZW5hbWUoJG5hbWUpOwogCi0JJGJhc2VuYW1lID0gIm5vIGZpbGUgIiAuICRiYXNlbmFtZSBpZiAoZXhpc3RzKCRhZGRlZHskYmFzZW5hbWV9KSk7CisJIyBDVlMgcmVwb3J0cyBmaWxlcyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzCisJIyAibm8gZmlsZSAkYmFzZW5hbWUiIGluIGl0cyAic3RhdHVzIiBvdXRwdXQsIHNvIHdlIHNob3VsZAorCSMgYW50aWNpcGF0ZSB0aGF0LiAgVG90YWxseSB1bmtub3duIGZpbGVzIHdpbGwgaGF2ZSBhIHN0YXR1cworCSMgIlVua25vd24iLiBIb3dldmVyLCBpZiB0aGV5IGV4aXN0IGluIHRoZSBBdHRpYywgdGhlaXIgc3RhdHVzCisJIyB3aWxsIGJlICJVcC10by1kYXRlIiAodGhpcyBtZWFucyB0aGV5IHdlcmUgYWRkZWQgb25jZSBidXQgaGF2ZQorCSMgYmVlbiByZW1vdmVkKS4KKwkkYmFzZW5hbWUgPSAibm8gZmlsZSAkYmFzZW5hbWUiIGlmICRhZGRlZHskYmFzZW5hbWV9OworCiAJJGJhc2VuYW1lID1+IHMvXlxzKy8vOwogCSRiYXNlbmFtZSA9fiBzL1xzKyQvLzsKIApAQCAtMjMzLDMxICsyNDAsNDYgQEAKIAkgICRmdWxsbmFtZXskYmFzZW5hbWV9ID0gJG5hbWU7CiAJICBwdXNoIChAY2Fuc3RhdHVzZmlsZXMyLCAkbmFtZSk7CiAJICBkZWxldGUoJHRvZG97JG5hbWV9KTsKLSAgICAgICAgfQorCX0KICAgICAgIH0KICAgICAgIG15IEBjdnNvdXRwdXQ7CiAgICAgICBAY3Zzb3V0cHV0ID0geGFyZ3Nfc2FmZV9waXBlX2NhcHR1cmUoW0BjdnMsICdzdGF0dXMnXSwgQGNhbnN0YXR1c2ZpbGVzMik7CiAgICAgICBmb3JlYWNoIG15ICRsIChAY3Zzb3V0cHV0KSB7Ci0gICAgICAgIGNob21wICRsOwotICAgICAgICBpZiAoJGwgPX4gL15GaWxlOlxzKyguKlxTKVxzK1N0YXR1czogKC4qKSQvKSB7Ci0JICBpZiAoIWV4aXN0cygkZnVsbG5hbWV7JDF9KSkgewotCSAgICBwcmludCBTVERFUlIgIkh1aD8gU3RhdHVzIHJlcG9ydGVkIGZvciB1bmV4cGVjdGVkIGZpbGUgJyQxJ1xuIjsKLQkgIH0gZWxzZSB7Ci0JICAgICRjdnNzdGF0eyRmdWxsbmFtZXskMX19ID0gJDI7Ci0JICB9Ci0JfQorCWNob21wICRsOworCW5leHQgdW5sZXNzCisJICAgIG15ICgkZmlsZSwgJHN0YXR1cykgPSAkbCA9fiAvXkZpbGU6XHMrKC4qXFMpXHMrU3RhdHVzOiAoLiopJC87CisKKwlteSAkZnVsbG5hbWUgPSAkZnVsbG5hbWV7JGZpbGV9OworCXByaW50IFNUREVSUiAiSHVoPyBTdGF0dXMgJyRzdGF0dXMnIHJlcG9ydGVkIGZvciB1bmV4cGVjdGVkIGZpbGUgJyRmaWxlJ1xuIgorCSAgICB1bmxlc3MgZGVmaW5lZCAkZnVsbG5hbWU7CisKKwkjIFRoaXMgcmVzcG9uc2UgbWVhbnMgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QgZXhjZXB0IGluCisJIyBDVlMncyBhdHRpYywgc28gc2V0IHRoZSBzdGF0dXMgYWNjb3JkaW5nbHkKKwkkc3RhdHVzID0gIkluLWF0dGljIgorCSAgICBpZiAkZmlsZSA9fiAvXm5vIGZpbGUgLworCQkmJiAkc3RhdHVzIGVxICdVcC10by1kYXRlJzsKKworCSRjdnNzdGF0eyRmdWxsbmFtZXskZmlsZX19ID0gJHN0YXR1cworCSAgICBpZiBkZWZpbmVkICRmdWxsbmFtZXskZmlsZX07CiAgICAgICB9CiAgICAgfQogfQogCi0jIC4uLiB2YWxpZGF0ZSBuZXcgZmlsZXMsCisjIC4uLiBWYWxpZGF0ZSB0aGF0IG5ldyBmaWxlcyBoYXZlIHRoZSBjb3JyZWN0IHN0YXR1cwogZm9yZWFjaCBteSAkZiAoQGFmaWxlcykgewotICAgIGlmIChkZWZpbmVkICgkY3Zzc3RhdHskZn0pIGFuZCAkY3Zzc3RhdHskZn0gbmUgIlVua25vd24iKSB7Ci0JJGRpcnR5ID0gMTsKKyAgICBuZXh0IHVubGVzcyBkZWZpbmVkKG15ICRzdGF0ID0gJGN2c3N0YXR7JGZ9KTsKKworICAgICMgVGhpcyBtZWFucyB0aGUgZmlsZSBoYXMgbmV2ZXIgYmVlbiBzZWVuIGJlZm9yZQorICAgIG5leHQgaWYgJHN0YXQgZXEgJ1Vua25vd24nOworCisgICAgIyBUaGlzIG1lYW5zIHRoZSBmaWxlIGhhcyBiZWVuIHNlZW4gYmVmb3JlIGJ1dCB3YXMgcmVtb3ZlZAorICAgIG5leHQgaWYgJHN0YXQgZXEgJ0luLWF0dGljJzsKKworICAgICRkaXJ0eSA9IDE7CiAJd2FybiAiRmlsZSAkZiBpcyBhbHJlYWR5IGtub3duIGluIHlvdXIgQ1ZTIGNoZWNrb3V0IC0tIHBlcmhhcHMgaXQgaGFzIGJlZW4gYWRkZWQgYnkgYW5vdGhlciB1c2VyLiBPciB0aGlzIG1heSBpbmRpY2F0ZSB0aGF0IGl0IGV4aXN0cyBvbiBhIGRpZmZlcmVudCBicmFuY2guIElmIHRoaXMgaXMgdGhlIGNhc2UsIHVzZSAtZiB0byBmb3JjZSB0aGUgbWVyZ2UuXG4iOwogCXdhcm4gIlN0YXR1cyB3YXM6ICRjdnNzdGF0eyRmfVxuIjsKLSAgICB9CiB9CisKICMgLi4uIHZhbGlkYXRlIGtub3duIGZpbGVzLgogZm9yZWFjaCBteSAkZiAoQGZpbGVzKSB7CiAgICAgbmV4dCBpZiBncmVwIHsgJF8gZXEgJGYgfSBAYWZpbGVzOwpAQCAtMjY2LDcgKzI4OCwyNiBAQAogCSRkaXJ0eSA9IDE7CiAJd2FybiAiRmlsZSAkZiBub3QgdXAgdG8gZGF0ZSBidXQgaGFzIHN0YXR1cyAnJGN2c3N0YXR7JGZ9JyBpbiB5b3VyIENWUyBjaGVja291dCFcbiI7CiAgICAgfQorCisgICAgIyBEZXBlbmRpbmcgb24gaG93IHlvdXIgR0lUIHRyZWUgZ290IGltcG9ydGVkIGZyb20gQ1ZTIHlvdSBtYXkKKyAgICAjIGhhdmUgYSBjb25mbGljdCBiZXR3ZWVuIGV4cGFuZGVkIGtleXdvcmRzIGluIHlvdXIgQ1ZTIHRyZWUgYW5kCisgICAgIyB1bmV4cGFuZGVkIGtleXdvcmRzIGluIHRoZSBwYXRjaCBhYm91dCB0byBiZSBhcHBsaWVkLgorICAgIGlmICgkb3B0X2spIHsKKwlteSAkb3JpZ19maWxlID0iJGYub3JpZyI7CisJcmVuYW1lICRmLCAkb3JpZ19maWxlOworCW9wZW4oRklMVEVSX0lOLCAiPCRvcmlnX2ZpbGUiKSBvciBkaWUgIkNhbm5vdCBvcGVuICRvcmlnX2ZpbGVcbiI7CisJb3BlbihGSUxURVJfT1VULCAiPiRmIikgb3IgZGllICJDYW5ub3Qgb3BlbiAkZlxuIjsKKwl3aGlsZSAoPEZJTFRFUl9JTj4pCisJeworCSAgICBteSAkbGluZSA9ICRfOworCSAgICAkbGluZSA9fiBzL1wkKFtBLVpdW2Etel0rKTpbXlwkXStcJC9cJCQxXCQvZzsKKwkgICAgcHJpbnQgRklMVEVSX09VVCAkbGluZTsKKwl9CisJY2xvc2UgRklMVEVSX0lOOworCWNsb3NlIEZJTFRFUl9PVVQ7CisgICAgfQogfQorCiBpZiAoJGRpcnR5KSB7CiAgICAgaWYgKCRvcHRfZikgewl3YXJuICJUaGUgdHJlZSBpcyBub3QgY2xlYW4gLS0gZm9yY2VkIG1lcmdlXG4iOwogCSRkaXJ0eSA9IDA7CkBAIC0zNzAsNyArNDExLDcgQEAKIAogc3ViIHVzYWdlIHsKIAlwcmludCBTVERFUlIgPDxFTkQ7Ci1Vc2FnZTogR0lUX0RJUj0vcGF0aC90by8uZ2l0IGdpdCBjdnNleHBvcnRjb21taXQgWy1oXSBbLXBdIFstdl0gWy1jXSBbLWZdIFstdV0gWy13IGN2c3dvcmtkaXJdIFstbSBtc2dwcmVmaXhdIFsgcGFyZW50IF0gY29tbWl0CitVc2FnZTogR0lUX0RJUj0vcGF0aC90by8uZ2l0IGdpdCBjdnNleHBvcnRjb21taXQgWy1oXSBbLXBdIFstdl0gWy1jXSBbLWZdIFstdV0gWy1rXSBbLXcgY3Zzd29ya2Rpcl0gWy1tIG1zZ3ByZWZpeF0gWyBwYXJlbnQgXSBjb21taXQKIEVORAogCWV4aXQoMSk7CiB9CmRpZmYgLS1naXQgYS9naXQtY3Zzc2VydmVyLnBlcmwgYi9naXQtY3Zzc2VydmVyLnBlcmwKaW5kZXggYjBhODA1Yy4uYWI2Y2VhMyAxMDA3NTUKLS0tIGEvZ2l0LWN2c3NlcnZlci5wZXJsCisrKyBiL2dpdC1jdnNzZXJ2ZXIucGVybApAQCAtNzYsNiArNzYsNyBAQAogICAgICdoaXN0b3J5JyAgICAgICAgID0+IFwmcmVxX0NBVENIQUxMLAogICAgICd3YXRjaGVycycgICAgICAgID0+IFwmcmVxX0VNUFRZLAogICAgICdlZGl0b3JzJyAgICAgICAgID0+IFwmcmVxX0VNUFRZLAorICAgICdub29wJyAgICAgICAgICAgID0+IFwmcmVxX0VNUFRZLAogICAgICdhbm5vdGF0ZScgICAgICAgID0+IFwmcmVxX2Fubm90YXRlLAogICAgICdHbG9iYWxfb3B0aW9uJyAgID0+IFwmcmVxX0dsb2JhbG9wdGlvbiwKICAgICAjJ2Fubm90YXRlJyAgICAgICAgPT4gXCZyZXFfQ0FUQ0hBTEwsCkBAIC0xMzU4LDcgKzEzNTksMTMgQEAKICAgICAjIHdyaXRlIG91ciBjb21taXQgbWVzc2FnZSBvdXQgaWYgd2UgaGF2ZSBvbmUgLi4uCiAgICAgbXkgKCAkbXNnX2ZoLCAkbXNnX2ZpbGVuYW1lICkgPSB0ZW1wZmlsZSggRElSID0+ICRURU1QX0RJUiApOwogICAgIHByaW50ICRtc2dfZmggJHN0YXRlLT57b3B0fXttfTsjIGlmICggZXhpc3RzICggJHN0YXRlLT57b3B0fXttfSApICk7Ci0gICAgcHJpbnQgJG1zZ19maCAiXG5cbnZpYSBnaXQtQ1ZTIGVtdWxhdG9yXG4iOworICAgIGlmICggZGVmaW5lZCAoICRjZmctPntnaXRjdnN9e2NvbW1pdG1zZ2Fubm90YXRpb259ICkgKSB7CisgICAgICAgIGlmICgkY2ZnLT57Z2l0Y3ZzfXtjb21taXRtc2dhbm5vdGF0aW9ufSAhfiAvXlxzKiQvICkgeworICAgICAgICAgICAgcHJpbnQgJG1zZ19maCAiXG5cbiIuJGNmZy0+e2dpdGN2c317Y29tbWl0bXNnYW5ub3RhdGlvbn0uIlxuIgorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnQgJG1zZ19maCAiXG5cbnZpYSBnaXQtQ1ZTIGVtdWxhdG9yXG4iOworICAgIH0KICAgICBjbG9zZSAkbXNnX2ZoOwogCiAgICAgbXkgJGNvbW1pdGhhc2ggPSBgZ2l0LWNvbW1pdC10cmVlICR0cmVlaGFzaCAtcCAkcGFyZW50aGFzaCA8ICRtc2dfZmlsZW5hbWVgOwpAQCAtMTQwNywxNCArMTQxNCwxNCBAQAogCQljbG9zZSAkcGlwZSB8fCBkaWUgImJhZCBwaXBlOiAkISAkPyI7CiAJfQogCisgICAgJHVwZGF0ZXItPnVwZGF0ZSgpOworCiAJIyMjIFRoZW4gaG9va3MvcG9zdC11cGRhdGUKIAkkaG9vayA9ICRFTlZ7R0lUX0RJUn0uJ2hvb2tzL3Bvc3QtdXBkYXRlJzsKIAlpZiAoLXggJGhvb2spIHsKIAkJc3lzdGVtKCRob29rLCAicmVmcy9oZWFkcy8kc3RhdGUtPnttb2R1bGV9Iik7CiAJfQogCi0gICAgJHVwZGF0ZXItPnVwZGF0ZSgpOwotCiAgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCiAgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAY29tbWl0dGVkZmlsZXMgKQogICAgIHsKQEAgLTI1MjcsMTIgKzI1MzQsMTggQEAKICAgICByZXR1cm4gJGZoOwogfQogCi0jIEdlbmVyYXRlIGEgQ1ZTIGF1dGhvciBuYW1lIGZyb20gR2l0IGF1dGhvciBpbmZvcm1hdGlvbiwgYnkgdGFraW5nCi0jIHRoZSBmaXJzdCBlaWdodCBjaGFyYWN0ZXJzIG9mIHRoZSB1c2VyIHBhcnQgb2YgdGhlIGVtYWlsIGFkZHJlc3MuCisjIEdlbmVyYXRlIGEgQ1ZTIGF1dGhvciBuYW1lIGZyb20gR2l0IGF1dGhvciBpbmZvcm1hdGlvbiwgYnkgdGFraW5nIHRoZSBsb2NhbAorIyBwYXJ0IG9mIHRoZSBlbWFpbCBhZGRyZXNzIGFuZCByZXBsYWNpbmcgY2hhcmFjdGVycyBub3QgaW4gdGhlIFBvcnRhYmxlCisjIEZpbGVuYW1lIENoYXJhY3RlciBTZXQgKHNlZSBJRUVFIFN0ZCAxMDAzLjEtMjAwMSwgMy4yNzYpIGJ5IHVuZGVyc2NvcmVzLiBDVlMKKyMgTG9naW4gbmFtZXMgYXJlIFVuaXggbG9naW4gbmFtZXMsIHdoaWNoIHNob3VsZCBiZSByZXN0cmljdGVkIHRvIHRoaXMKKyMgY2hhcmFjdGVyIHNldC4KIHN1YiBjdnNfYXV0aG9yCiB7CiAgICAgbXkgJGF1dGhvcl9saW5lID0gc2hpZnQ7Ci0gICAgKG15ICRhdXRob3IpID0gJGF1dGhvcl9saW5lID1+IC88KFtePkBdezEsOH0pLzsKKyAgICAobXkgJGF1dGhvcikgPSAkYXV0aG9yX2xpbmUgPX4gLzwoW15APl0qKS87CisKKyAgICAkYXV0aG9yID1+IHMvW14tYS16QS1aMC05Xy5dL18vZzsKKyAgICAkYXV0aG9yID1+IHMvXi0vXy87CiAKICAgICAkYXV0aG9yOwogfQpkaWZmIC0tZ2l0IGEvZ2l0LWRpZmZ0b29sLS1oZWxwZXIuc2ggYi9naXQtZGlmZnRvb2wtLWhlbHBlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41N2U4ZTMyCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWRpZmZ0b29sLS1oZWxwZXIuc2gKQEAgLTAsMCArMSw1OSBAQAorIyEvYmluL3NoCisjIGdpdC1kaWZmdG9vbC0taGVscGVyIGlzIGEgR0lUX0VYVEVSTkFMX0RJRkYtY29tcGF0aWJsZSBkaWZmIHRvb2wgbGF1bmNoZXIuCisjIFRoaXMgc2NyaXB0IGlzIHR5cGljYWxseSBsYXVuY2hlZCBieSB1c2luZyB0aGUgJ2dpdCBkaWZmdG9vbCcKKyMgY29udmVuaWVuY2UgY29tbWFuZC4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IERhdmlkIEFndWlsYXIKKworIyBMb2FkIGNvbW1vbiBmdW5jdGlvbnMgZnJvbSBnaXQtbWVyZ2V0b29sLS1saWIKK1RPT0xfTU9ERT1kaWZmCisuIGdpdC1tZXJnZXRvb2wtLWxpYgorCisjIGRpZmZ0b29sLnByb21wdCBjb250cm9scyB0aGUgZGVmYXVsdCBwcm9tcHQvbm8tcHJvbXB0IGJlaGF2aW9yCisjIGFuZCBpcyBvdmVycmlkZGVuIHdpdGggJEdJVF9ESUZGVE9PTCpfUFJPTVBULgorc2hvdWxkX3Byb21wdCAoKSB7CisJcHJvbXB0PSQoZ2l0IGNvbmZpZyAtLWJvb2wgZGlmZnRvb2wucHJvbXB0IHx8IGVjaG8gdHJ1ZSkKKwlpZiB0ZXN0ICIkcHJvbXB0IiA9IHRydWU7IHRoZW4KKwkJdGVzdCAteiAiJEdJVF9ESUZGVE9PTF9OT19QUk9NUFQiCisJZWxzZQorCQl0ZXN0IC1uICIkR0lUX0RJRkZUT09MX1BST01QVCIKKwlmaQorfQorCisjIFNldHMgdXAgc2hlbGwgdmFyaWFibGVzIGFuZCBydW5zIGEgbWVyZ2UgdG9vbAorbGF1bmNoX21lcmdlX3Rvb2wgKCkgeworCSMgTWVyZ2VkIGlzIHRoZSBmaWxlbmFtZSBhcyBpdCBhcHBlYXJzIGluIHRoZSB3b3JrIHRyZWUKKwkjIExvY2FsIGlzIHRoZSBjb250ZW50cyBvZiBhL2ZpbGVuYW1lCisJIyBSZW1vdGUgaXMgdGhlIGNvbnRlbnRzIG9mIGIvZmlsZW5hbWUKKwkjIEN1c3RvbSBtZXJnZSB0b29sIGNvbW1hbmRzIG1pZ2h0IHVzZSAkQkFTRSBzbyB3ZSBwcm92aWRlIGl0CisJTUVSR0VEPSIkMSIKKwlMT0NBTD0iJDIiCisJUkVNT1RFPSIkMyIKKwlCQVNFPSIkMSIKKworCSMgJExPQ0FMIGFuZCAkUkVNT1RFIGFyZSB0ZW1wb3JhcnkgZmlsZXMgc28gcHJvbXB0CisJIyB0aGUgdXNlciB3aXRoIHRoZSByZWFsICRNRVJHRUQgbmFtZSBiZWZvcmUgbGF1bmNoaW5nICRtZXJnZV90b29sLgorCWlmIHNob3VsZF9wcm9tcHQ7IHRoZW4KKwkJcHJpbnRmICJcblZpZXdpbmc6ICckTUVSR0VEJ1xuIgorCQlwcmludGYgIkhpdCByZXR1cm4gdG8gbGF1bmNoICclcyc6ICIgIiRtZXJnZV90b29sIgorCQlyZWFkIGFucworCWZpCisKKwkjIFJ1biB0aGUgYXBwcm9wcmlhdGUgbWVyZ2UgdG9vbCBjb21tYW5kCisJcnVuX21lcmdlX3Rvb2wgIiRtZXJnZV90b29sIgorfQorCisjIEFsbG93IEdJVF9ESUZGX1RPT0wgYW5kIEdJVF9NRVJHRV9UT09MIHRvIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMKK3Rlc3QgLW4gIiRHSVRfTUVSR0VfVE9PTCIgJiYgbWVyZ2VfdG9vbD0iJEdJVF9NRVJHRV9UT09MIgordGVzdCAtbiAiJEdJVF9ESUZGX1RPT0wiICYmIG1lcmdlX3Rvb2w9IiRHSVRfRElGRl9UT09MIgorCitpZiB0ZXN0IC16ICIkbWVyZ2VfdG9vbCI7IHRoZW4KKwltZXJnZV90b29sPSIkKGdldF9tZXJnZV90b29sKSIgfHwgZXhpdAorZmkKKworIyBMYXVuY2ggdGhlIG1lcmdlIHRvb2wgb24gZWFjaCBwYXRoIHByb3ZpZGVkIGJ5ICdnaXQgZGlmZicKK3doaWxlIHRlc3QgJCMgLWd0IDYKK2RvCisJbGF1bmNoX21lcmdlX3Rvb2wgIiQxIiAiJDIiICIkNSIKKwlzaGlmdCA3Citkb25lCmRpZmYgLS1naXQgYS9naXQtZGlmZnRvb2wucGVybCBiL2dpdC1kaWZmdG9vbC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJhNWU2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZGlmZnRvb2wucGVybApAQCAtMCwwICsxLDkyIEBACisjIS91c3IvYmluL2VudiBwZXJsCisjIENvcHlyaWdodCAoYykgMjAwOSBEYXZpZCBBZ3VpbGFyCisjCisjIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgR0lUX0VYVEVSTkFMX0RJRkYtY29tcGF0aWJsZQorIyBnaXQtZGlmZnRvb2wtLWhlbHBlciBzY3JpcHQuCisjCisjIFRoaXMgc2NyaXB0IGV4cG9ydHMgR0lUX0VYVEVSTkFMX0RJRkYgYW5kIEdJVF9QQUdFUiBmb3IgdXNlIGJ5IGdpdC4KKyMgR0lUX0RJRkZUT09MX05PX1BST01QVCwgR0lUX0RJRkZUT09MX1BST01QVCwgYW5kIEdJVF9ESUZGX1RPT0wKKyMgYXJlIGV4cG9ydGVkIGZvciB1c2UgYnkgZ2l0LWRpZmZ0b29sLS1oZWxwZXIuCisjCisjIEFueSBhcmd1bWVudHMgdGhhdCBhcmUgdW5rbm93biB0byB0aGlzIHNjcmlwdCBhcmUgZm9yd2FyZGVkIHRvICdnaXQgZGlmZicuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgQ3dkIHF3KGFic19wYXRoKTsKK3VzZSBGaWxlOjpCYXNlbmFtZSBxdyhkaXJuYW1lKTsKKworbXkgJERJUiA9IGFic19wYXRoKGRpcm5hbWUoJDApKTsKKworCitzdWIgdXNhZ2UKK3sKKwlwcmludCA8PCAnVVNBR0UnOwordXNhZ2U6IGdpdCBkaWZmdG9vbCBbLS10b29sPTx0b29sPl0gWy15fC0tbm8tcHJvbXB0XSBbImdpdCBkaWZmIiBvcHRpb25zXQorVVNBR0UKKwlleGl0IDE7Cit9CisKK3N1YiBzZXR1cF9lbnZpcm9ubWVudAoreworCSRFTlZ7UEFUSH0gPSAiJERJUjokRU5We1BBVEh9IjsKKwkkRU5We0dJVF9QQUdFUn0gPSAnJzsKKwkkRU5We0dJVF9FWFRFUk5BTF9ESUZGfSA9ICdnaXQtZGlmZnRvb2wtLWhlbHBlcic7Cit9CisKK3N1YiBleGUKK3sKKwlteSAkZXhlID0gc2hpZnQ7CisJaWYgKCReTyBlcSAnTVNXaW4zMicgfHwgJF5PIGVxICdtc3lzJykgeworCQlyZXR1cm4gIiRleGUuZXhlIjsKKwl9CisJcmV0dXJuICRleGU7Cit9CisKK3N1YiBnZW5lcmF0ZV9jb21tYW5kCit7CisJbXkgQGNvbW1hbmQgPSAoZXhlKCdnaXQnKSwgJ2RpZmYnKTsKKwlteSAkc2tpcF9uZXh0ID0gMDsKKwlteSAkaWR4ID0gLTE7CisJZm9yIG15ICRhcmcgKEBBUkdWKSB7CisJCSRpZHgrKzsKKwkJaWYgKCRza2lwX25leHQpIHsKKwkJCSRza2lwX25leHQgPSAwOworCQkJbmV4dDsKKwkJfQorCQlpZiAoJGFyZyBlcSAnLXQnIHx8ICRhcmcgZXEgJy0tdG9vbCcpIHsKKwkJCXVzYWdlKCkgaWYgJCNBUkdWIDw9ICRpZHg7CisJCQkkRU5We0dJVF9ESUZGX1RPT0x9ID0gJEFSR1ZbJGlkeCArIDFdOworCQkJJHNraXBfbmV4dCA9IDE7CisJCQluZXh0OworCQl9CisJCWlmICgkYXJnID1+IC9eLS10b29sPS8pIHsKKwkJCSRFTlZ7R0lUX0RJRkZfVE9PTH0gPSBzdWJzdHIoJGFyZywgNyk7CisJCQluZXh0OworCQl9CisJCWlmICgkYXJnIGVxICcteScgfHwgJGFyZyBlcSAnLS1uby1wcm9tcHQnKSB7CisJCQkkRU5We0dJVF9ESUZGVE9PTF9OT19QUk9NUFR9ID0gJ3RydWUnOworCQkJZGVsZXRlICRFTlZ7R0lUX0RJRkZUT09MX1BST01QVH07CisJCQluZXh0OworCQl9CisJCWlmICgkYXJnIGVxICctLXByb21wdCcpIHsKKwkJCSRFTlZ7R0lUX0RJRkZUT09MX1BST01QVH0gPSAndHJ1ZSc7CisJCQlkZWxldGUgJEVOVntHSVRfRElGRlRPT0xfTk9fUFJPTVBUfTsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRhcmcgZXEgJy1oJyB8fCAkYXJnIGVxICctLWhlbHAnKSB7CisJCQl1c2FnZSgpOworCQl9CisJCXB1c2ggQGNvbW1hbmQsICRhcmc7CisJfQorCXJldHVybiBAY29tbWFuZAorfQorCitzZXR1cF9lbnZpcm9ubWVudCgpOworCisjIEFjdGl2ZVN0YXRlIFBlcmwgZm9yIFdpbjMyIGRvZXMgbm90IGltcGxlbWVudCBQT1NJWCBzZW1hbnRpY3Mgb2YKKyMgZXhlYyogc3lzdGVtIGNhbGwuIEl0IGp1c3Qgc3Bhd25zIHRoZSBnaXZlbiBleGVjdXRhYmxlIGFuZCBmaW5pc2hlcworIyB0aGUgc3RhcnRpbmcgcHJvZ3JhbSwgZXhpdGluZyB3aXRoIGNvZGUgMC4KKyMgc3lzdGVtIHdpbGwgYXQgbGVhc3QgY2F0Y2ggdGhlIGVycm9ycyByZXR1cm5lZCBieSBnaXQgZGlmZiwKKyMgYWxsb3dpbmcgdGhlIGNhbGxlciBvZiBnaXQgZGlmZnRvb2wgYmV0dGVyIGhhbmRsaW5nIG9mIGZhaWx1cmVzLgorbXkgJHJjID0gc3lzdGVtKGdlbmVyYXRlX2NvbW1hbmQoKSk7CitleGl0KCRyYyB8ICgkcmMgPj4gOCkpOwpkaWZmIC0tZ2l0IGEvZ2l0LWZpbHRlci1icmFuY2guc2ggYi9naXQtZmlsdGVyLWJyYW5jaC5zaAppbmRleCAwODk3YjU5Li5hNDgwZDZmIDEwMDc1NQotLS0gYS9naXQtZmlsdGVyLWJyYW5jaC5zaAorKysgYi9naXQtZmlsdGVyLWJyYW5jaC5zaApAQCAtNDAsNiArNDAsMTYgQEAKIAlkb25lOwogfQogCisjIGlmIHlvdSBydW4gJ2dpdF9jb21taXRfbm9uX2VtcHR5X3RyZWUgIiRAIicgaW4gYSBjb21taXQgZmlsdGVyLAorIyBpdCB3aWxsIHNraXAgY29tbWl0cyB0aGF0IGxlYXZlIHRoZSB0cmVlIHVudG91Y2hlZCwgY29tbWl0IHRoZSBvdGhlci4KK2dpdF9jb21taXRfbm9uX2VtcHR5X3RyZWUoKQoreworCWlmIHRlc3QgJCMgPSAzICYmIHRlc3QgIiQxIiA9ICQoZ2l0IHJldi1wYXJzZSAiJDNee3RyZWV9Iik7IHRoZW4KKwkJbWFwICIkMyIKKwllbHNlCisJCWdpdCBjb21taXQtdHJlZSAiJEAiCisJZmkKK30KICMgb3ZlcnJpZGUgZGllKCk6IHRoaXMgdmVyc2lvbiBwdXRzIGluIGFuIGV4dHJhIGxpbmUgYnJlYWssIHNvIHRoYXQKICMgdGhlIHByb2dyZXNzIGlzIHN0aWxsIHZpc2libGUKIApAQCAtODcsMTIgKzk3LDEyIEBACiAJZWNobyAiY2FzZSBcIlwkR0lUXyR7dWlkfV9OQU1FXCIgaW4gXCJcIikgR0lUXyR7dWlkfV9OQU1FPVwiXCR7R0lUXyR7dWlkfV9FTUFJTCUlQCp9XCIgJiYgZXhwb3J0IEdJVF8ke3VpZH1fTkFNRTs7IGVzYWMiCiB9CiAKLVVTQUdFPSJbLS1lbnYtZmlsdGVyIDxjb21tYW5kPl0gWy0tdHJlZS1maWx0ZXIgPGNvbW1hbmQ+XSBcCi1bLS1pbmRleC1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1wYXJlbnQtZmlsdGVyIDxjb21tYW5kPl0gXAotWy0tbXNnLWZpbHRlciA8Y29tbWFuZD5dIFstLWNvbW1pdC1maWx0ZXIgPGNvbW1hbmQ+XSBcCi1bLS10YWctbmFtZS1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1zdWJkaXJlY3RvcnktZmlsdGVyIDxkaXJlY3Rvcnk+XSBcCi1bLS1vcmlnaW5hbCA8bmFtZXNwYWNlPl0gWy1kIDxkaXJlY3Rvcnk+XSBbLWYgfCAtLWZvcmNlXSBcCi1bPHJldi1saXN0IG9wdGlvbnM+Li4uXSIKK1VTQUdFPSJbLS1lbnYtZmlsdGVyIDxjb21tYW5kPl0gWy0tdHJlZS1maWx0ZXIgPGNvbW1hbmQ+XQorICAgICAgICAgICAgWy0taW5kZXgtZmlsdGVyIDxjb21tYW5kPl0gWy0tcGFyZW50LWZpbHRlciA8Y29tbWFuZD5dCisgICAgICAgICAgICBbLS1tc2ctZmlsdGVyIDxjb21tYW5kPl0gWy0tY29tbWl0LWZpbHRlciA8Y29tbWFuZD5dCisgICAgICAgICAgICBbLS10YWctbmFtZS1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1zdWJkaXJlY3RvcnktZmlsdGVyIDxkaXJlY3Rvcnk+XQorICAgICAgICAgICAgWy0tb3JpZ2luYWwgPG5hbWVzcGFjZT5dIFstZCA8ZGlyZWN0b3J5Pl0gWy1mIHwgLS1mb3JjZV0KKyAgICAgICAgICAgIFs8cmV2LWxpc3Qgb3B0aW9ucz4uLi5dIgogCiBPUFRJT05TX1NQRUM9CiAuIGdpdC1zaC1zZXR1cApAQCAtMTA5LDExICsxMTksMTIgQEAKIGZpbHRlcl9pbmRleD0KIGZpbHRlcl9wYXJlbnQ9CiBmaWx0ZXJfbXNnPWNhdAotZmlsdGVyX2NvbW1pdD0nZ2l0IGNvbW1pdC10cmVlICIkQCInCitmaWx0ZXJfY29tbWl0PQogZmlsdGVyX3RhZ19uYW1lPQogZmlsdGVyX3N1YmRpcj0KIG9yaWdfbmFtZXNwYWNlPXJlZnMvb3JpZ2luYWwvCiBmb3JjZT0KK3BydW5lX2VtcHR5PQogd2hpbGUgOgogZG8KIAljYXNlICIkMSIgaW4KQEAgLTEyNiw2ICsxMzcsMTEgQEAKIAkJZm9yY2U9dAogCQljb250aW51ZQogCQk7OworCS0tcHJ1bmUtZW1wdHkpCisJCXNoaWZ0CisJCXBydW5lX2VtcHR5PXQKKwkJY29udGludWUKKwkJOzsKIAktKikKIAkJOzsKIAkqKQpAQCAtMTc2LDYgKzE5MiwxNyBAQAogCWVzYWMKIGRvbmUKIAorY2FzZSAiJHBydW5lX2VtcHR5LCRmaWx0ZXJfY29tbWl0IiBpbgorLCkKKwlmaWx0ZXJfY29tbWl0PSdnaXQgY29tbWl0LXRyZWUgIiRAIic7OwordCwpCisJZmlsdGVyX2NvbW1pdD0iJGZ1bmN0aW9uczsiJyBnaXRfY29tbWl0X25vbl9lbXB0eV90cmVlICIkQCInOzsKKywqKQorCTs7CisqKQorCWRpZSAiQ2Fubm90IHNldCAtLXBydW5lLWVtcHR5IGFuZCAtLWZpbHRlci1jb21taXQgYXQgdGhlIHNhbWUgdGltZSIKK2VzYWMKKwogY2FzZSAiJGZvcmNlIiBpbgogdCkKIAlybSAtcmYgIiR0ZW1wZGlyIgpAQCAtMTkzLDEzICsyMjAsMjEgQEAKICMgUmVtb3ZlIHRlbXBkaXIgb24gZXhpdAogdHJhcCAnY2QgLi4vLi47IHJtIC1yZiAiJHRlbXBkaXIiJyAwCiAKK09SSUdfR0lUX0RJUj0iJEdJVF9ESVIiCitPUklHX0dJVF9XT1JLX1RSRUU9IiRHSVRfV09SS19UUkVFIgorT1JJR19HSVRfSU5ERVhfRklMRT0iJEdJVF9JTkRFWF9GSUxFIgorR0lUX1dPUktfVFJFRT0uCitleHBvcnQgR0lUX0RJUiBHSVRfV09SS19UUkVFCisKICMgTWFrZSBzdXJlIHJlZnMvb3JpZ2luYWwgaXMgZW1wdHkKLWdpdCBmb3ItZWFjaC1yZWYgPiAiJHRlbXBkaXIiL2JhY2t1cC1yZWZzCitnaXQgZm9yLWVhY2gtcmVmID4gIiR0ZW1wZGlyIi9iYWNrdXAtcmVmcyB8fCBleGl0CiB3aGlsZSByZWFkIHNoYTEgdHlwZSBuYW1lCiBkbwogCWNhc2UgIiRmb3JjZSwkbmFtZSIgaW4KIAksJG9yaWdfbmFtZXNwYWNlKikKLQkJZGllICJOYW1lc3BhY2UgJG9yaWdfbmFtZXNwYWNlIG5vdCBlbXB0eSIKKwkJZGllICJDYW5ub3QgY3JlYXRlIGEgbmV3IGJhY2t1cC4KK0EgcHJldmlvdXMgYmFja3VwIGFscmVhZHkgZXhpc3RzIGluICRvcmlnX25hbWVzcGFjZQorRm9yY2Ugb3ZlcndyaXRpbmcgdGhlIGJhY2t1cCB3aXRoIC1mIgogCTs7CiAJdCwkb3JpZ19uYW1lc3BhY2UqKQogCQlnaXQgdXBkYXRlLXJlZiAtZCAiJG5hbWUiICRzaGExCkBAIC0yMDcsMTUgKzI0MiwxMCBAQAogCWVzYWMKIGRvbmUgPCAiJHRlbXBkaXIiL2JhY2t1cC1yZWZzCiAKLU9SSUdfR0lUX0RJUj0iJEdJVF9ESVIiCi1PUklHX0dJVF9XT1JLX1RSRUU9IiRHSVRfV09SS19UUkVFIgotT1JJR19HSVRfSU5ERVhfRklMRT0iJEdJVF9JTkRFWF9GSUxFIgotR0lUX1dPUktfVFJFRT0uCi1leHBvcnQgR0lUX0RJUiBHSVRfV09SS19UUkVFCi0KICMgVGhlIHJlZnMgc2hvdWxkIGJlIHVwZGF0ZWQgaWYgdGhlaXIgaGVhZHMgd2VyZSByZXdyaXR0ZW4KLWdpdCByZXYtcGFyc2UgLS1uby1mbGFncyAtLXJldnMtb25seSAtLXN5bWJvbGljLWZ1bGwtbmFtZSAtLWRlZmF1bHQgSEVBRCAiJEAiIHwKLXNlZCAtZSAnL15eL2QnID4iJHRlbXBkaXIiL2hlYWRzCitnaXQgcmV2LXBhcnNlIC0tbm8tZmxhZ3MgLS1yZXZzLW9ubHkgLS1zeW1ib2xpYy1mdWxsLW5hbWUgXAorCS0tZGVmYXVsdCBIRUFEICIkQCIgPiAiJHRlbXBkaXIiL3Jhdy1oZWFkcyB8fCBleGl0CitzZWQgLWUgJy9eXi9kJyAiJHRlbXBkaXIiL3Jhdy1oZWFkcyA+IiR0ZW1wZGlyIi9oZWFkcwogCiB0ZXN0IC1zICIkdGVtcGRpciIvaGVhZHMgfHwKIAlkaWUgIldoaWNoIHJlZiBkbyB5b3Ugd2FudCB0byByZXdyaXRlPyIKQEAgLTIyNCw4ICsyNTQsNiBAQAogZXhwb3J0IEdJVF9JTkRFWF9GSUxFCiBnaXQgcmVhZC10cmVlIHx8IGRpZSAiQ291bGQgbm90IHNlZWQgdGhlIGluZGV4IgogCi1yZXQ9MAotCiAjIG1hcCBvbGQtPm5ldyBjb21taXQgaWRzIGZvciByZXdyaXRpbmcgcGFyZW50cwogbWtkaXIgLi4vbWFwIHx8IGRpZSAiQ291bGQgbm90IGNyZWF0ZSBtYXAvIGRpcmVjdG9yeSIKIApAQCAtMjQ0LDEwICsyNzIsMTAgQEAKIAogIyBSZXdyaXRlIHRoZSBjb21taXRzCiAKLWk9MAorZ2l0X2ZpbHRlcl9icmFuY2hfX2NvbW1pdF9jb3VudD0wCiB3aGlsZSByZWFkIGNvbW1pdCBwYXJlbnRzOyBkbwotCWk9JCgoJGkrMSkpCi0JcHJpbnRmICJcclJld3JpdGUgJGNvbW1pdCAoJGkvJGNvbW1pdHMpIgorCWdpdF9maWx0ZXJfYnJhbmNoX19jb21taXRfY291bnQ9JCgoJGdpdF9maWx0ZXJfYnJhbmNoX19jb21taXRfY291bnQrMSkpCisJcHJpbnRmICJcclJld3JpdGUgJGNvbW1pdCAoJGdpdF9maWx0ZXJfYnJhbmNoX19jb21taXRfY291bnQvJGNvbW1pdHMpIgogCiAJY2FzZSAiJGZpbHRlcl9zdWJkaXIiIGluCiAJIiIpCkBAIC0yODgsMTAgKzMxNiwxMSBAQAogCQkJZGllICJ0cmVlIGZpbHRlciBmYWlsZWQ6ICRmaWx0ZXJfdHJlZSIKIAogCQkoCi0JCQlnaXQgZGlmZi1pbmRleCAtciAtLW5hbWUtb25seSAkY29tbWl0CisJCQlnaXQgZGlmZi1pbmRleCAtciAtLW5hbWUtb25seSAkY29tbWl0ICYmCiAJCQlnaXQgbHMtZmlsZXMgLS1vdGhlcnMKLQkJKSB8Ci0JCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZXBsYWNlIC0tcmVtb3ZlIC0tc3RkaW4KKwkJKSA+ICIkdGVtcGRpciIvdHJlZS1zdGF0ZSB8fCBleGl0CisJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZXBsYWNlIC0tcmVtb3ZlIC0tc3RkaW4gXAorCQkJPCAiJHRlbXBkaXIiL3RyZWUtc3RhdGUgfHwgZXhpdAogCWZpCiAKIAlldmFsICIkZmlsdGVyX2luZGV4IiA8IC9kZXYvbnVsbCB8fApAQCAtMzEyLDcgKzM0MSw4IEBACiAJCWV2YWwgIiRmaWx0ZXJfbXNnIiA+IC4uL21lc3NhZ2UgfHwKIAkJCWRpZSAibXNnIGZpbHRlciBmYWlsZWQ6ICRmaWx0ZXJfbXNnIgogCUBTSEVMTF9QQVRIQCAtYyAiJGZpbHRlcl9jb21taXQiICJnaXQgY29tbWl0LXRyZWUiIFwKLQkJJChnaXQgd3JpdGUtdHJlZSkgJHBhcmVudHN0ciA8IC4uL21lc3NhZ2UgPiAuLi9tYXAvJGNvbW1pdAorCQkkKGdpdCB3cml0ZS10cmVlKSAkcGFyZW50c3RyIDwgLi4vbWVzc2FnZSA+IC4uL21hcC8kY29tbWl0IHx8CisJCQlkaWUgImNvdWxkIG5vdCB3cml0ZSByZXdyaXR0ZW4gY29tbWl0IgogZG9uZSA8Li4vcmV2cwogCiAjIEluIGNhc2Ugb2YgYSBzdWJkaXJlY3RvcnkgZmlsdGVyLCBpdCBpcyBwb3NzaWJsZSB0aGF0IGEgc3BlY2lmaWVkIGhlYWQKQEAgLTM4MCw3ICs0MTAsOCBAQAogCQkJZGllICJDb3VsZCBub3QgcmV3cml0ZSAkcmVmIgogCTs7CiAJZXNhYwotCWdpdCB1cGRhdGUtcmVmIC1tICJmaWx0ZXItYnJhbmNoOiBiYWNrdXAiICIkb3JpZ19uYW1lc3BhY2UkcmVmIiAkc2hhMQorCWdpdCB1cGRhdGUtcmVmIC1tICJmaWx0ZXItYnJhbmNoOiBiYWNrdXAiICIkb3JpZ19uYW1lc3BhY2UkcmVmIiAkc2hhMSB8fAorCQkgZXhpdAogZG9uZSA8ICIkdGVtcGRpciIvaGVhZHMKIAogIyBUT0RPOiBUaGlzIHNob3VsZCBwb3NzaWJseSBnbywgd2l0aCB0aGUgc2VtYW50aWNzIHRoYXQgYWxsIHBvc2l0aXZlIGdpdmVuCkBAIC0zOTksNyArNDMwLDcgQEAKIAkJaWYgWyAiJHR5cGUiID0gInRhZyIgXTsgdGhlbgogCQkJIyBEZXJlZmVyZW5jZSB0byBhIGNvbW1pdAogCQkJc2hhMXQ9IiRzaGExIgotCQkJc2hhMT0iJChnaXQgcmV2LXBhcnNlICIkc2hhMSJee2NvbW1pdH0gMj4vZGV2L251bGwpIiB8fCBjb250aW51ZQorCQkJc2hhMT0iJChnaXQgcmV2LXBhcnNlIC1xICIkc2hhMSJee2NvbW1pdH0pIiB8fCBjb250aW51ZQogCQlmaQogCiAJCVsgLWYgIi4uL21hcC8kc2hhMSIgXSB8fCBjb250aW51ZQpAQCAtNDU2LDcgKzQ4Nyw3IEBACiB9CiAKIGlmIFsgIiQoaXNfYmFyZV9yZXBvc2l0b3J5KSIgPSBmYWxzZSBdOyB0aGVuCi0JZ2l0IHJlYWQtdHJlZSAtdSAtbSBIRUFECisJZ2l0IHJlYWQtdHJlZSAtdSAtbSBIRUFEIHx8IGV4aXQKIGZpCiAKLWV4aXQgJHJldAorZXhpdCAwCmRpZmYgLS1naXQgYS9naXQtZ3VpL01ha2VmaWxlIGIvZ2l0LWd1aS9NYWtlZmlsZQppbmRleCAzYWQ4YTIxLi5iMzU4MGU5IDEwMDY0NAotLS0gYS9naXQtZ3VpL01ha2VmaWxlCisrKyBiL2dpdC1ndWkvTWFrZWZpbGUKQEAgLTEwNSw4ICsxMDUsMTEgQEAKIAogaWZlcSAoJCh1bmFtZV9TKSxEYXJ3aW4pCiAJVEtGUkFNRVdPUksgPSAvTGlicmFyeS9GcmFtZXdvcmtzL1RrLmZyYW1ld29yay9SZXNvdXJjZXMvV2lzaC5hcHAKLQlpZmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfUikiIDogJzlcLicpLDIpCi0JCVRLRlJBTUVXT1JLID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvVGsuZnJhbWV3b3JrL1Jlc291cmNlcy9XaXNoXCBTaGVsbC5hcHAKKwlpZmVxICgkKHNoZWxsIGVjaG8gIiQodW5hbWVfUikiIHwgYXdrIC1GLiAne2lmICgkJDEgPj0gOSkgcHJpbnQgInkifScpXyQoc2hlbGwgdGVzdCAtZCAkKFRLRlJBTUVXT1JLKSB8fCBlY2hvIG4pLHlfbikKKwkJVEtGUkFNRVdPUksgPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Uay5mcmFtZXdvcmsvUmVzb3VyY2VzL1dpc2guYXBwCisJCWlmZXEgKCQoc2hlbGwgdGVzdCAtZCAkKFRLRlJBTUVXT1JLKSB8fCBlY2hvIG4pLG4pCisJCQlUS0ZSQU1FV09SSyA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1RrLmZyYW1ld29yay9SZXNvdXJjZXMvV2lzaFwgU2hlbGwuYXBwCisJCWVuZGlmCiAJZW5kaWYKIAlUS0VYRUNVVEFCTEUgPSAkKHNoZWxsIGJhc2VuYW1lICIkKFRLRlJBTUVXT1JLKSIgLmFwcCkKIGVuZGlmCmRpZmYgLS1naXQgYS9naXQtZ3VpL2dpdC1ndWkuc2ggYi9naXQtZ3VpL2dpdC1ndWkuc2gKaW5kZXggZTAxOGUwNy4uMTRiOTJiYSAxMDA3NTUKLS0tIGEvZ2l0LWd1aS9naXQtZ3VpLnNoCisrKyBiL2dpdC1ndWkvZ2l0LWd1aS5zaApAQCAtMTIyLDYgKzEyMiw3IEBACiBzZXQgX2FwcG5hbWUge0dpdCBHdWl9CiBzZXQgX2dpdGRpciB7fQogc2V0IF9naXRleGVjIHt9CitzZXQgX2dpdGh0bWxkaXIge30KIHNldCBfcmVwb25hbWUge30KIHNldCBfaXNjeWd3aW4ge30KIHNldCBfc2VhcmNoX3BhdGgge30KQEAgLTE2OCw2ICsxNjksMjggQEAKIAlyZXR1cm4gW2V2YWwgW2xpc3QgZmlsZSBqb2luICRfZ2l0ZXhlY10gJGFyZ3NdCiB9CiAKK3Byb2MgZ2l0aHRtbGRpciB7YXJnc30geworCWdsb2JhbCBfZ2l0aHRtbGRpcgorCWlmIHskX2dpdGh0bWxkaXIgZXEge319IHsKKwkJaWYge1tjYXRjaCB7c2V0IF9naXRodG1sZGlyIFtnaXQgLS1odG1sLXBhdGhdfV19IHsKKwkJCSMgR2l0IG5vdCBpbnN0YWxsZWQgb3Igb3B0aW9uIG5vdCB5ZXQgc3VwcG9ydGVkCisJCQlyZXR1cm4ge30KKwkJfQorCQlpZiB7W2lzX0N5Z3dpbl19IHsKKwkJCXNldCBfZ2l0aHRtbGRpciBbZXhlYyBjeWdwYXRoIFwKKwkJCQktLXdpbmRvd3MgXAorCQkJCS0tYWJzb2x1dGUgXAorCQkJCSRfZ2l0aHRtbGRpcl0KKwkJfSBlbHNlIHsKKwkJCXNldCBfZ2l0aHRtbGRpciBbZmlsZSBub3JtYWxpemUgJF9naXRodG1sZGlyXQorCQl9CisJfQorCWlmIHskYXJncyBlcSB7fX0geworCQlyZXR1cm4gJF9naXRodG1sZGlyCisJfQorCXJldHVybiBbZXZhbCBbbGlzdCBmaWxlIGpvaW4gJF9naXRodG1sZGlyXSAkYXJnc10KK30KKwogcHJvYyByZXBvbmFtZSB7fSB7CiAJcmV0dXJuICQ6Ol9yZXBvbmFtZQogfQpAQCAtNjQwLDEwICs2NjMsMTMgQEAKIGZvbnQgY3JlYXRlIGZvbnRfZGlmZml0YWxpYwogCiBmb3JlYWNoIGNsYXNzIHtCdXR0b24gQ2hlY2tidXR0b24gRW50cnkgTGFiZWwKLQkJTGFiZWxmcmFtZSBMaXN0Ym94IE1lbnUgTWVzc2FnZQorCQlMYWJlbGZyYW1lIExpc3Rib3ggTWVzc2FnZQogCQlSYWRpb2J1dHRvbiBTcGluYm94IFRleHR9IHsKIAlvcHRpb24gYWRkICokY2xhc3MuZm9udCBmb250X3VpCiB9CitpZiB7IVtpc19NYWNPU1hdfSB7CisJb3B0aW9uIGFkZCAqTWVudS5mb250IGZvbnRfdWkKK30KIHVuc2V0IGNsYXNzCiAKIGlmIHtbaXNfV2luZG93c10gfHwgW2lzX01hY09TWF19IHsKQEAgLTY5OSw3ICs3MjUsNyBAQAogCiBzZXQgZGVmYXVsdF9jb25maWcoYnJhbmNoLmF1dG9zZXR1cG1lcmdlKSB0cnVlCiBzZXQgZGVmYXVsdF9jb25maWcobWVyZ2UudG9vbCkge30KLXNldCBkZWZhdWx0X2NvbmZpZyhtZXJnZS5rZWVwYmFja3VwKSB0cnVlCitzZXQgZGVmYXVsdF9jb25maWcobWVyZ2V0b29sLmtlZXBiYWNrdXApIHRydWUKIHNldCBkZWZhdWx0X2NvbmZpZyhtZXJnZS5kaWZmc3RhdCkgdHJ1ZQogc2V0IGRlZmF1bHRfY29uZmlnKG1lcmdlLnN1bW1hcnkpIGZhbHNlCiBzZXQgZGVmYXVsdF9jb25maWcobWVyZ2UudmVyYm9zaXR5KSAyCkBAIC03NjksOSArNzk1LDkgQEAKIHNldCBfcmVhbF9naXRfdmVyc2lvbiAkX2dpdF92ZXJzaW9uCiByZWdzdWIgLS0ge1tcLVwuXWRpcnR5JH0gJF9naXRfdmVyc2lvbiB7fSBfZ2l0X3ZlcnNpb24KIHJlZ3N1YiB7XC5bMC05XStcLmdbMC05YS1mXSskfSAkX2dpdF92ZXJzaW9uIHt9IF9naXRfdmVyc2lvbgotcmVnc3ViIHtcLnJjWzAtOV0rJH0gJF9naXRfdmVyc2lvbiB7fSBfZ2l0X3ZlcnNpb24KK3JlZ3N1YiB7XC5bYS16QS1aXStcLj9bMC05XSskfSAkX2dpdF92ZXJzaW9uIHt9IF9naXRfdmVyc2lvbgogcmVnc3ViIHtcLkdJVCR9ICRfZ2l0X3ZlcnNpb24ge30gX2dpdF92ZXJzaW9uCi1yZWdzdWIge1wuW2EtekEtWl0rXC5bMC05XSskfSAkX2dpdF92ZXJzaW9uIHt9IF9naXRfdmVyc2lvbgorcmVnc3ViIHtcLlthLXpBLVpdK1wuP1swLTldKyR9ICRfZ2l0X3ZlcnNpb24ge30gX2dpdF92ZXJzaW9uCiAKIGlmIHshW3JlZ2V4cCB7XlsxLTldKyhcLlswLTldKykrJH0gJF9naXRfdmVyc2lvbl19IHsKIAljYXRjaCB7d20gd2l0aGRyYXcgLn0KQEAgLTExMDgsNiArMTEzNCw3IEBACiBzZXQgaXNfM3dheV9kaWZmIDAKIHNldCBpc19jb25mbGljdF9kaWZmIDAKIHNldCBzZWxlY3RlZF9jb21taXRfdHlwZSBuZXcKK3NldCBkaWZmX2VtcHR5X2NvdW50IDAKIAogc2V0IG51bGxpZCAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKIHNldCBudWxsaWQyICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIgpAQCAtMTkyNCw3ICsxOTUxLDcgQEAKIAkJIyBmcmVlZGVza3RvcC5vcmctY29uZm9ybWluZyBzeXN0ZW0gaXMgb3VyIGJlc3Qgc2hvdAogCQlzZXQgZXhwbG9yZXIgInhkZy1vcGVuIgogCX0KLQlldmFsIGV4ZWMgJGV4cGxvcmVyIFtmaWxlIGRpcm5hbWUgW2dpdGRpcl1dICYKKwlldmFsIGV4ZWMgJGV4cGxvcmVyIFtsaXN0IFtmaWxlIG5hdGl2ZW5hbWUgW2ZpbGUgZGlybmFtZSBbZ2l0ZGlyXV1dXSAmCiB9CiAKIHNldCBpc19xdWl0dGluZyAwCkBAIC0yMjc3LDYgKzIzMDQsMTIgQEAKICMgLS0gTWVudSBCYXIKICMKIG1lbnUgLm1iYXIgLXRlYXJvZmYgMAoraWYge1tpc19NYWNPU1hdfSB7CisJIyAtLSBBcHBsZSBNZW51IChNYWMgT1MgWCBvbmx5KQorCSMKKwkubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgQXBwbGUgLW1lbnUgLm1iYXIuYXBwbGUKKwltZW51IC5tYmFyLmFwcGxlCit9CiAubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgW21jIFJlcG9zaXRvcnldIC1tZW51IC5tYmFyLnJlcG9zaXRvcnkKIC5tYmFyIGFkZCBjYXNjYWRlIC1sYWJlbCBbbWMgRWRpdF0gLW1lbnUgLm1iYXIuZWRpdAogaWYge1tpc19lbmFibGVkIGJyYW5jaF19IHsKQEAgLTIyOTIsNyArMjMyNSw2IEBACiBpZiB7W2lzX2VuYWJsZWQgbXVsdGljb21taXRdIHx8IFtpc19lbmFibGVkIHNpbmdsZWNvbW1pdF19IHsKIAkubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgW21jIFRvb2xzXSAtbWVudSAubWJhci50b29scwogfQotLiBjb25maWd1cmUgLW1lbnUgLm1iYXIKIAogIyAtLSBSZXBvc2l0b3J5IE1lbnUKICMKQEAgLTI1NDUsMTkgKzI1NzcsNyBAQAogfQogCiBpZiB7W2lzX01hY09TWF19IHsKLQkjIC0tIEFwcGxlIE1lbnUgKE1hYyBPUyBYIG9ubHkpCi0JIwotCS5tYmFyIGFkZCBjYXNjYWRlIC1sYWJlbCBBcHBsZSAtbWVudSAubWJhci5hcHBsZQotCW1lbnUgLm1iYXIuYXBwbGUKLQotCS5tYmFyLmFwcGxlIGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgIkFib3V0ICVzIiBbYXBwbmFtZV1dIFwKLQkJLWNvbW1hbmQgZG9fYWJvdXQKLQkubWJhci5hcHBsZSBhZGQgc2VwYXJhdG9yCi0JLm1iYXIuYXBwbGUgYWRkIGNvbW1hbmQgXAotCQktbGFiZWwgW21jICJQcmVmZXJlbmNlcy4uLiJdIFwKLQkJLWNvbW1hbmQgZG9fb3B0aW9ucyBcCi0JCS1hY2NlbGVyYXRvciAkTTFULSwKLQliaW5kIC4gPCRNMUItLD4gZG9fb3B0aW9ucworCXByb2MgOjp0azo6bWFjOjpTaG93UHJlZmVyZW5jZXMge30ge2RvX29wdGlvbnN9CiB9IGVsc2UgewogCSMgLS0gRWRpdCBNZW51CiAJIwpAQCAtMjU4NSwxNyArMjYwNSwyMyBAQAogLm1iYXIgYWRkIGNhc2NhZGUgLWxhYmVsIFttYyBIZWxwXSAtbWVudSAubWJhci5oZWxwCiBtZW51IC5tYmFyLmhlbHAKIAotaWYgeyFbaXNfTWFjT1NYXX0geworaWYge1tpc19NYWNPU1hdfSB7CisJLm1iYXIuYXBwbGUgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiQWJvdXQgJXMiIFthcHBuYW1lXV0gXAorCQktY29tbWFuZCBkb19hYm91dAorCS5tYmFyLmFwcGxlIGFkZCBzZXBhcmF0b3IKK30gZWxzZSB7CiAJLm1iYXIuaGVscCBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJBYm91dCAlcyIgW2FwcG5hbWVdXSBcCiAJCS1jb21tYW5kIGRvX2Fib3V0CiB9CisuIGNvbmZpZ3VyZSAtbWVudSAubWJhcgogCitzZXQgZG9jX3BhdGggW2dpdGh0bWxkaXJdCitpZiB7JGRvY19wYXRoIG5lIHt9fSB7CisJc2V0IGRvY19wYXRoIFtmaWxlIGpvaW4gJGRvY19wYXRoIGluZGV4Lmh0bWxdCiAKLXNldCBkb2NfcGF0aCBbZmlsZSBkaXJuYW1lIFtnaXRleGVjXV0KLXNldCBkb2NfcGF0aCBbZmlsZSBqb2luICRkb2NfcGF0aCBEb2N1bWVudGF0aW9uIGluZGV4Lmh0bWxdCi0KLWlmIHtbaXNfQ3lnd2luXX0gewotCXNldCBkb2NfcGF0aCBbZXhlYyBjeWdwYXRoIC0tbWl4ZWQgJGRvY19wYXRoXQorCWlmIHtbaXNfQ3lnd2luXX0geworCQlzZXQgZG9jX3BhdGggW2V4ZWMgY3lncGF0aCAtLW1peGVkICRkb2NfcGF0aF0KKwl9CiB9CiAKIGlmIHtbZmlsZSBpc2ZpbGUgJGRvY19wYXRoXX0gewpAQCAtMjk0NCw3ICsyOTcwLDcgQEAKIAktY29tbWFuZCB7dGtfdGV4dFBhc3RlICR1aV9jb21tfQogJGN0eG0gYWRkIGNvbW1hbmQgXAogCS1sYWJlbCBbbWMgRGVsZXRlXSBcCi0JLWNvbW1hbmQgeyR1aV9jb21tIGRlbGV0ZSBzZWwuZmlyc3Qgc2VsLmxhc3R9CisJLWNvbW1hbmQge2NhdGNoIHskdWlfY29tbSBkZWxldGUgc2VsLmZpcnN0IHNlbC5sYXN0fX0KICRjdHhtIGFkZCBzZXBhcmF0b3IKICRjdHhtIGFkZCBjb21tYW5kIFwKIAktbGFiZWwgW21jICJTZWxlY3QgQWxsIl0gXApkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvYnJhbmNoX2RlbGV0ZS50Y2wgYi9naXQtZ3VpL2xpYi9icmFuY2hfZGVsZXRlLnRjbAppbmRleCBlZjE5MzBiLi4yMGQ1ZTQyIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9icmFuY2hfZGVsZXRlLnRjbAorKysgYi9naXQtZ3VpL2xpYi9icmFuY2hfZGVsZXRlLnRjbApAQCAtNTEsNyArNTEsNyBAQAogCQkkdy5jaGVjayBcCiAJCVttYyAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iXSBcCiAJCV0KLQkkd19jaGVjayBub25lIFttYyAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSB0ZXN0LikiXQorCSR3X2NoZWNrIG5vbmUgW21jICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiXQogCXBhY2sgJHcuY2hlY2sgLWFuY2hvciBudyAtZmlsbCB4IC1wYWR5IDUgLXBhZHggNQogCiAJZm9yZWFjaCBoIFtsb2FkX2FsbF9oZWFkc10gewpAQCAtMTEyLDcgKzExMiw3IEBACiAJfQogCWlmIHskdG9fZGVsZXRlIGVxIHt9fSByZXR1cm4KIAlpZiB7JGNoZWNrX2NtdCBlcSB7fX0gewotCQlzZXQgbXNnIFttYyAiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC4gXG5cbiBEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyJdCisJCXNldCBtc2cgW21jICJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuXG5EZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyJdCiAJCWlmIHtbdGtfbWVzc2FnZUJveCBcCiAJCQktaWNvbiB3YXJuaW5nIFwKIAkJCS10eXBlIHllc25vIFwKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2NoZWNrb3V0X29wLnRjbCBiL2dpdC1ndWkvbGliL2NoZWNrb3V0X29wLnRjbAppbmRleCBjYWNhODg4Li45ZTc0MTJjIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9jaGVja291dF9vcC50Y2wKKysrIGIvZ2l0LWd1aS9saWIvY2hlY2tvdXRfb3AudGNsCkBAIC05LDYgKzksNyBAQAogZmllbGQgbmV3X2V4cHIgICA7ICMgZXhwcmVzc2lvbiB0aGUgdXNlciBzYXcvdGhpbmtzIHRoaXMgaXMKIGZpZWxkIG5ld19oYXNoICAgOyAjIGNvbW1pdCBTSEEtMSB3ZSBhcmUgc3dpdGNoaW5nIHRvCiBmaWVsZCBuZXdfcmVmICAgIDsgIyByZWYgd2UgYXJlIHVwZGF0aW5nL2NyZWF0aW5nCitmaWVsZCBvbGRfaGFzaCAgIDsgIyBjb21taXQgU0hBLTEgdGhhdCB3YXMgY2hlY2tlZCBvdXQgd2hlbiB3ZSBzdGFydGVkCiAKIGZpZWxkIHBhcmVudF93ICAgICAgLjsgIyB3aW5kb3cgdGhhdCBzdGFydGVkIHVzCiBmaWVsZCBtZXJnZV90eXBlIG5vbmU7ICMgdHlwZSBvZiBtZXJnZSB0byBhcHBseSB0byBleGlzdGluZyBicmFuY2gKQEAgLTI4MCwxMSArMjgxLDExIEBACiAKIAkjIC0tIE91ciBpbiBtZW1vcnkgc3RhdGUgc2hvdWxkIG1hdGNoIHRoZSByZXBvc2l0b3J5LgogCSMKLQlyZXBvc2l0b3J5X3N0YXRlIGN1clR5cGUgY3VySEVBRCBjdXJNRVJHRV9IRUFECisJcmVwb3NpdG9yeV9zdGF0ZSBjdXJUeXBlIG9sZF9oYXNoIGN1ck1FUkdFX0hFQUQKIAlpZiB7W3N0cmluZyBtYXRjaCBhbWVuZCogJGNvbW1pdF90eXBlXQogCQkmJiAkY3VyVHlwZSBlcSB7bm9ybWFsfQotCQkmJiAkY3VySEVBRCBlcSAkSEVBRH0gewotCX0gZWxzZWlmIHskY29tbWl0X3R5cGUgbmUgJGN1clR5cGUgfHwgJEhFQUQgbmUgJGN1ckhFQUR9IHsKKwkJJiYgJG9sZF9oYXNoIGVxICRIRUFEfSB7CisJfSBlbHNlaWYgeyRjb21taXRfdHlwZSBuZSAkY3VyVHlwZSB8fCAkSEVBRCBuZSAkb2xkX2hhc2h9IHsKIAkJaW5mb19wb3B1cCBbbWMgIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLgogCiBBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgcmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuCkBAIC0yOTcsNyArMjk4LDcgQEAKIAkJcmV0dXJuCiAJfQogCi0JaWYgeyRjdXJIRUFEIGVxICRuZXdfaGFzaH0geworCWlmIHskb2xkX2hhc2ggZXEgJG5ld19oYXNofSB7CiAJCV9hZnRlcl9yZWFkdHJlZSAkdGhpcwogCX0gZWxzZWlmIHtbaXNfY29uZmlnX3RydWUgZ3VpLnRydXN0bXRpbWVdfSB7CiAJCV9yZWFkdHJlZSAkdGhpcwpAQCAtNDUzLDEzICs0NTQsNDcgQEAKIElmIHlvdSB3YW50ZWQgdG8gYmUgb24gYSBicmFuY2gsIGNyZWF0ZSBvbmUgbm93IHN0YXJ0aW5nIGZyb20gJ1RoaXMgRGV0YWNoZWQgQ2hlY2tvdXQnLiJdCiAJfQogCisJIyAtLSBSdW4gdGhlIHBvc3QtY2hlY2tvdXQgaG9vay4KKwkjCisJc2V0IGZkX3BoIFtnaXRob29rX3JlYWQgcG9zdC1jaGVja291dCAkb2xkX2hhc2ggJG5ld19oYXNoIDFdCisJaWYgeyRmZF9waCBuZSB7fX0geworCQlnbG9iYWwgcGNoX2Vycm9yCisJCXNldCBwY2hfZXJyb3Ige30KKwkJZmNvbmZpZ3VyZSAkZmRfcGggLWJsb2NraW5nIDAgLXRyYW5zbGF0aW9uIGJpbmFyeSAtZW9mY2hhciB7fQorCQlmaWxlZXZlbnQgJGZkX3BoIHJlYWRhYmxlIFtjYiBfcG9zdGNoZWNrb3V0X3dhaXQgJGZkX3BoXQorCX0gZWxzZSB7CisJCV91cGRhdGVfcmVwb19zdGF0ZSAkdGhpcworCX0KK30KKworbWV0aG9kIF9wb3N0Y2hlY2tvdXRfd2FpdCB7ZmRfcGh9IHsKKwlnbG9iYWwgcGNoX2Vycm9yCisKKwlhcHBlbmQgcGNoX2Vycm9yIFtyZWFkICRmZF9waF0KKwlmY29uZmlndXJlICRmZF9waCAtYmxvY2tpbmcgMQorCWlmIHtbZW9mICRmZF9waF19IHsKKwkJaWYge1tjYXRjaCB7Y2xvc2UgJGZkX3BofV19IHsKKwkJCWhvb2tfZmFpbGVkX3BvcHVwIHBvc3QtY2hlY2tvdXQgJHBjaF9lcnJvciAwCisJCX0KKwkJdW5zZXQgcGNoX2Vycm9yCisJCV91cGRhdGVfcmVwb19zdGF0ZSAkdGhpcworCQlyZXR1cm4KKwl9CisJZmNvbmZpZ3VyZSAkZmRfcGggLWJsb2NraW5nIDAKK30KKworbWV0aG9kIF91cGRhdGVfcmVwb19zdGF0ZSB7fSB7CiAJIyAtLSBVcGRhdGUgb3VyIHJlcG9zaXRvcnkgc3RhdGUuICBJZiB3ZSB3ZXJlIHByZXZpb3VzbHkgaW4KIAkjICAgIGFtZW5kIG1vZGUgd2UgbmVlZCB0byB0b3NzIHRoZSBjdXJyZW50IGJ1ZmZlciBhbmQgZG8gYQogCSMgICAgZnVsbCByZXNjYW4gdG8gdXBkYXRlIG91ciBmaWxlIGxpc3RzLiAgSWYgd2Ugd2VyZW4ndCBpbgogCSMgICAgYW1lbmQgbW9kZSBvdXIgZmlsZSBsaXN0cyBhcmUgYWNjdXJhdGUgYW5kIHdlIGNhbiBhdm9pZAogCSMgICAgdGhlIHJlc2Nhbi4KIAkjCisJZ2xvYmFsIHNlbGVjdGVkX2NvbW1pdF90eXBlIGNvbW1pdF90eXBlIEhFQUQgTUVSR0VfSEVBRCBQQVJFTlQKKwlnbG9iYWwgdWlfY29tbQorCiAJdW5sb2NrX2luZGV4CisJc2V0IG5hbWUgW19uYW1lICR0aGlzXQogCXNldCBzZWxlY3RlZF9jb21taXRfdHlwZSBuZXcKIAlpZiB7W3N0cmluZyBtYXRjaCBhbWVuZCogJGNvbW1pdF90eXBlXX0gewogCQkkdWlfY29tbSBkZWxldGUgMC4wIGVuZApkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsIGIvZ2l0LWd1aS9saWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsCmluZGV4IGY5ZmY2MmEuLjYzM2NjNTcgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbAorKysgYi9naXQtZ3VpL2xpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2wKQEAgLTM5OCw2ICszOTgsOCBAQAogCWdyaWQgJHdfYm9keS53aGVyZS5sICR3X2JvZHkud2hlcmUudCAkd19ib2R5LndoZXJlLmIgLXN0aWNreSBldwogCXBhY2sgJHdfYm9keS53aGVyZSAtZmlsbCB4CiAKKwlncmlkIGNvbHVtbmNvbmZpZ3VyZSAkd19ib2R5LndoZXJlIDEgLXdlaWdodCAxCisKIAl0cmFjZSBhZGQgdmFyaWFibGUgQGxvY2FsX3BhdGggd3JpdGUgW2NiIF93cml0ZV9sb2NhbF9wYXRoXQogCWJpbmQgJHdfYm9keS5oIDxEZXN0cm95PiBbbGlzdCB0cmFjZSByZW1vdmUgdmFyaWFibGUgQGxvY2FsX3BhdGggd3JpdGUgW2NiIF93cml0ZV9sb2NhbF9wYXRoXV0KIAl1cGRhdGUKQEAgLTk2NCw3ICs5NjYsMzQgQEAKIAkJcmV0dXJuCiAJfQogCi0Jc2V0IGRvbmUgMQorCSMgLS0gUnVuIHRoZSBwb3N0LWNoZWNrb3V0IGhvb2suCisJIworCXNldCBmZF9waCBbZ2l0aG9va19yZWFkIHBvc3QtY2hlY2tvdXQgW3N0cmluZyByZXBlYXQgMCA0MF0gXAorCQlbZ2l0IHJldi1wYXJzZSBIRUFEXSAxXQorCWlmIHskZmRfcGggbmUge319IHsKKwkJZ2xvYmFsIHBjaF9lcnJvcgorCQlzZXQgcGNoX2Vycm9yIHt9CisJCWZjb25maWd1cmUgJGZkX3BoIC1ibG9ja2luZyAwIC10cmFuc2xhdGlvbiBiaW5hcnkgLWVvZmNoYXIge30KKwkJZmlsZWV2ZW50ICRmZF9waCByZWFkYWJsZSBbY2IgX3Bvc3RjaGVja291dF93YWl0ICRmZF9waF0KKwl9IGVsc2UgeworCQlzZXQgZG9uZSAxCisJfQorfQorCittZXRob2QgX3Bvc3RjaGVja291dF93YWl0IHtmZF9waH0geworCWdsb2JhbCBwY2hfZXJyb3IKKworCWFwcGVuZCBwY2hfZXJyb3IgW3JlYWQgJGZkX3BoXQorCWZjb25maWd1cmUgJGZkX3BoIC1ibG9ja2luZyAxCisJaWYge1tlb2YgJGZkX3BoXX0geworCQlpZiB7W2NhdGNoIHtjbG9zZSAkZmRfcGh9XX0geworCQkJaG9va19mYWlsZWRfcG9wdXAgcG9zdC1jaGVja291dCAkcGNoX2Vycm9yIDAKKwkJfQorCQl1bnNldCBwY2hfZXJyb3IKKwkJc2V0IGRvbmUgMQorCQlyZXR1cm4KKwl9CisJZmNvbmZpZ3VyZSAkZmRfcGggLWJsb2NraW5nIDAKIH0KIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtOTk4LDYgKzEwMjcsOCBAQAogCWdyaWQgJHdfYm9keS53aGVyZS5sICR3X2JvZHkud2hlcmUudCAkd19ib2R5LndoZXJlLmIgLXN0aWNreSBldwogCXBhY2sgJHdfYm9keS53aGVyZSAtZmlsbCB4CiAKKwlncmlkIGNvbHVtbmNvbmZpZ3VyZSAkd19ib2R5LndoZXJlIDEgLXdlaWdodCAxCisKIAl0cmFjZSBhZGQgdmFyaWFibGUgQGxvY2FsX3BhdGggd3JpdGUgW2NiIF93cml0ZV9sb2NhbF9wYXRoXQogCWJpbmQgJHdfYm9keS5oIDxEZXN0cm95PiBbbGlzdCB0cmFjZSByZW1vdmUgdmFyaWFibGUgQGxvY2FsX3BhdGggd3JpdGUgW2NiIF93cml0ZV9sb2NhbF9wYXRoXV0KIAl1cGRhdGUKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2NvbW1pdC50Y2wgYi9naXQtZ3VpL2xpYi9jb21taXQudGNsCmluZGV4IDljYzg0MTAuLjdmNDU5Y2QgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvbGliL2NvbW1pdC50Y2wKKysrIGIvZ2l0LWd1aS9saWIvY29tbWl0LnRjbApAQCAtMTE1LDYgKzExNSwyMyBAQAogCXJlc2NhbiB1aV9yZWFkeQogfQogCitwcm9jIHNldHVwX2NvbW1pdF9lbmNvZGluZyB7bXNnX3d0IHtxdWlldCAwfX0geworCWdsb2JhbCByZXBvX2NvbmZpZworCisJaWYge1tjYXRjaCB7c2V0IGVuYyAkcmVwb19jb25maWcoaTE4bi5jb21taXRlbmNvZGluZyl9XX0geworCQlzZXQgZW5jIHV0Zi04CisJfQorCXNldCB1c2VfZW5jIFt0Y2xfZW5jb2RpbmcgJGVuY10KKwlpZiB7JHVzZV9lbmMgbmUge319IHsKKwkJZmNvbmZpZ3VyZSAkbXNnX3d0IC1lbmNvZGluZyAkdXNlX2VuYworCX0gZWxzZSB7CisJCWlmIHshJHF1aWV0fSB7CisJCQllcnJvcl9wb3B1cCBbbWMgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIiAkZW5jXQorCQl9CisJCWZjb25maWd1cmUgJG1zZ193dCAtZW5jb2RpbmcgdXRmLTgKKwl9Cit9CisKIHByb2MgY29tbWl0X3RyZWUge30gewogCWdsb2JhbCBIRUFEIGNvbW1pdF90eXBlIGZpbGVfc3RhdGVzIHVpX2NvbW0gcmVwb19jb25maWcKIAlnbG9iYWwgcGNoX2Vycm9yCkBAIC0yMDAsMTYgKzIxNyw3IEBACiAJc2V0IG1zZ19wIFtnaXRkaXIgR0lUR1VJX0VESVRNU0ddCiAJc2V0IG1zZ193dCBbb3BlbiAkbXNnX3Agd10KIAlmY29uZmlndXJlICRtc2dfd3QgLXRyYW5zbGF0aW9uIGxmCi0JaWYge1tjYXRjaCB7c2V0IGVuYyAkcmVwb19jb25maWcoaTE4bi5jb21taXRlbmNvZGluZyl9XX0gewotCQlzZXQgZW5jIHV0Zi04Ci0JfQotCXNldCB1c2VfZW5jIFt0Y2xfZW5jb2RpbmcgJGVuY10KLQlpZiB7JHVzZV9lbmMgbmUge319IHsKLQkJZmNvbmZpZ3VyZSAkbXNnX3d0IC1lbmNvZGluZyAkdXNlX2VuYwotCX0gZWxzZSB7Ci0JCWVycm9yX3BvcHVwIFttYyAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iICRlbmNdCi0JCWZjb25maWd1cmUgJG1zZ193dCAtZW5jb2RpbmcgdXRmLTgKLQl9CisJc2V0dXBfY29tbWl0X2VuY29kaW5nICRtc2dfd3QKIAlwdXRzICRtc2dfd3QgJG1zZwogCWNsb3NlICRtc2dfd3QKIApAQCAtMzYyLDYgKzM3MCw3IEBACiAJCWFwcGVuZCByZWZsb2dtICIgKCRjb21taXRfdHlwZSkiCiAJfQogCXNldCBtc2dfZmQgW29wZW4gJG1zZ19wIHJdCisJc2V0dXBfY29tbWl0X2VuY29kaW5nICRtc2dfZmQgMQogCWdldHMgJG1zZ19mZCBzdWJqZWN0CiAJY2xvc2UgJG1zZ19mZAogCWFwcGVuZCByZWZsb2dtIHs6IH0gJHN1YmplY3QKQEAgLTM5OCw4ICs0MDcsOCBAQAogCSMKIAlzZXQgZmRfcGggW2dpdGhvb2tfcmVhZCBwb3N0LWNvbW1pdF0KIAlpZiB7JGZkX3BoIG5lIHt9fSB7Ci0JCXVwdmFyICMwIHBjaF9lcnJvciRjbXRfaWQgcGNfZXJyCi0JCXNldCBwY19lcnIge30KKwkJZ2xvYmFsIHBjaF9lcnJvcgorCQlzZXQgcGNoX2Vycm9yIHt9CiAJCWZjb25maWd1cmUgJGZkX3BoIC1ibG9ja2luZyAwIC10cmFuc2xhdGlvbiBiaW5hcnkgLWVvZmNoYXIge30KIAkJZmlsZWV2ZW50ICRmZF9waCByZWFkYWJsZSBcCiAJCQlbbGlzdCBjb21taXRfcG9zdGNvbW1pdF93YWl0ICRmZF9waCAkY210X2lkXQpAQCAtNDYxLDcgKzQ3MCw3IEBACiB9CiAKIHByb2MgY29tbWl0X3Bvc3Rjb21taXRfd2FpdCB7ZmRfcGggY210X2lkfSB7Ci0JdXB2YXIgIzAgcGNoX2Vycm9yJGNtdF9pZCBwY2hfZXJyb3IKKwlnbG9iYWwgcGNoX2Vycm9yCiAKIAlhcHBlbmQgcGNoX2Vycm9yIFtyZWFkICRmZF9waF0KIAlmY29uZmlndXJlICRmZF9waCAtYmxvY2tpbmcgMQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvZGlmZi50Y2wgYi9naXQtZ3VpL2xpYi9kaWZmLnRjbAppbmRleCBiYmJmMTVjLi45MjViM2Y1IDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9kaWZmLnRjbAorKysgYi9naXQtZ3VpL2xpYi9kaWZmLnRjbApAQCAtNTEsMTEgKzUxLDE2IEBACiAKIHByb2MgaGFuZGxlX2VtcHR5X2RpZmYge30gewogCWdsb2JhbCBjdXJyZW50X2RpZmZfcGF0aCBmaWxlX3N0YXRlcyBmaWxlX2xpc3RzCisJZ2xvYmFsIGRpZmZfZW1wdHlfY291bnQKIAogCXNldCBwYXRoICRjdXJyZW50X2RpZmZfcGF0aAogCXNldCBzICRmaWxlX3N0YXRlcygkcGF0aCkKIAlpZiB7W2xpbmRleCAkcyAwXSBuZSB7X019fSByZXR1cm4KIAorCSMgUHJldmVudCBpbmZpbml0ZSByZXNjYW4gbG9vcHMKKwlpbmNyIGRpZmZfZW1wdHlfY291bnQKKwlpZiB7JGRpZmZfZW1wdHlfY291bnQgPiAxfSByZXR1cm4KKwogCWluZm9fcG9wdXAgW21jICJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC4KIAogJXMgaGFzIG5vIGNoYW5nZXMuCkBAIC0zMTAsNiArMzE1LDcgQEAKIAlnbG9iYWwgdWlfZGlmZiBkaWZmX2FjdGl2ZQogCWdsb2JhbCBpc18zd2F5X2RpZmYgaXNfY29uZmxpY3RfZGlmZiBjdXJyZW50X2RpZmZfaGVhZGVyCiAJZ2xvYmFsIGN1cnJlbnRfZGlmZl9xdWV1ZQorCWdsb2JhbCBkaWZmX2VtcHR5X2NvdW50CiAKIAkkdWlfZGlmZiBjb25mIC1zdGF0ZSBub3JtYWwKIAl3aGlsZSB7W2dldHMgJGZkIGxpbmVdID49IDB9IHsKQEAgLTQxNSw3ICs0MjEsMTAgQEAKIAogCQlpZiB7WyR1aV9kaWZmIGluZGV4IGVuZF0gZXEgezIuMH19IHsKIAkJCWhhbmRsZV9lbXB0eV9kaWZmCisJCX0gZWxzZSB7CisJCQlzZXQgZGlmZl9lbXB0eV9jb3VudCAwCiAJCX0KKwogCQlzZXQgY2FsbGJhY2sgW2xpbmRleCAkY29udF9pbmZvIDFdCiAJCWlmIHskY2FsbGJhY2sgbmUge319IHsKIAkJCWV2YWwgJGNhbGxiYWNrCmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9tZXJnZXRvb2wudGNsIGIvZ2l0LWd1aS9saWIvbWVyZ2V0b29sLnRjbAppbmRleCBlYjJiNGI1Li4zZmU5MGU2IDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9tZXJnZXRvb2wudGNsCisrKyBiL2dpdC1ndWkvbGliL21lcmdldG9vbC50Y2wKQEAgLTg4LDcgKzg4LDcgQEAKIAlzZXQgbWVyZ2Vfc3RhZ2VzKDMpIHt9CiAJc2V0IG1lcmdlX3N0YWdlc19idWYge30KIAotCXNldCBtZXJnZV9zdGFnZXNfZmQgW2V2YWwgZ2l0X3JlYWQgbHMtZmlsZXMgLXUgLXogLS0gJHBhdGhdCisJc2V0IG1lcmdlX3N0YWdlc19mZCBbZXZhbCBnaXRfcmVhZCBscy1maWxlcyAtdSAteiAtLSB7JHBhdGh9XQogCiAJZmNvbmZpZ3VyZSAkbWVyZ2Vfc3RhZ2VzX2ZkIC1ibG9ja2luZyAwIC10cmFuc2xhdGlvbiBiaW5hcnkgLWVuY29kaW5nIGJpbmFyeQogCWZpbGVldmVudCAkbWVyZ2Vfc3RhZ2VzX2ZkIHJlYWRhYmxlIFtsaXN0IHJlYWRfbWVyZ2Vfc3RhZ2VzICRtZXJnZV9zdGFnZXNfZmQgJGNvbnRdCkBAIC0zODIsNyArMzgyLDcgQEAKIAkJZGVsZXRlX3RlbXBfZmlsZXMgJG10b29sX3RtcGZpbGVzCiAJCXVpX3N0YXR1cyBbbWMgIk1lcmdlIHRvb2wgZmFpbGVkLiJdCiAJfSBlbHNlIHsKLQkJaWYge1tpc19jb25maWdfdHJ1ZSBtZXJnZS5rZWVwYmFja3VwXX0geworCQlpZiB7W2lzX2NvbmZpZ190cnVlIG1lcmdldG9vbC5rZWVwYmFja3VwXX0gewogCQkJZmlsZSByZW5hbWUgLWZvcmNlIC0tICRiYWNrdXAgIiRtdG9vbF90YXJnZXQub3JpZyIKIAkJfQogCmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2wgYi9naXQtZ3VpL2xpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2wKaW5kZXggODllYjBmNy4uNGUwMmZjMCAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsCisrKyBiL2dpdC1ndWkvbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbApAQCAtMjEzLDkgKzIxMyw3IEBACiAJCS10eXBlIHllc25vIFwKIAkJLXRpdGxlIFt3bSB0aXRsZSAkd10gXAogCQktcGFyZW50ICR3IFwKLQkJLW1lc3NhZ2UgW21jICJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LgotCi1EZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyJdXSBuZSB5ZXN9IHsKKwkJLW1lc3NhZ2UgW21jICJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuXG5EZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyJdXSBuZSB5ZXN9IHsKIAkJcmV0dXJuCiAJfQogCmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9zaG9ydGN1dC50Y2wgYi9naXQtZ3VpL2xpYi9zaG9ydGN1dC50Y2wKaW5kZXggMzhjMzE1MS4uMmYyMGViMyAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvc2hvcnRjdXQudGNsCisrKyBiL2dpdC1ndWkvbGliL3Nob3J0Y3V0LnRjbApAQCAtNTQsNyArNTQsNyBAQAogCQkJCQkkYXJndjBdCiAJCQkJd2luMzJfY3JlYXRlX2xuayAkZm4gW2xpc3QgXAogCQkJCQkkc2ggLWMgXAotCQkJCQkiQ0hFUkVfSU5WT0tJTkc9MSBzb3VyY2UgL2V0Yy9wcm9maWxlO1tzcSAkbWVdIiBcCisJCQkJCSJDSEVSRV9JTlZPS0lORz0xIHNvdXJjZSAvZXRjL3Byb2ZpbGU7W3NxICRtZV0gJiIgXAogCQkJCQldIFwKIAkJCQkJW2ZpbGUgZGlybmFtZSBbZmlsZSBub3JtYWxpemUgW2dpdGRpcl1dXQogCQkJfSBlcnJdfSB7CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi90b29scy50Y2wgYi9naXQtZ3VpL2xpYi90b29scy50Y2wKaW5kZXggNmFlNjNiNi4uOTVlNmU1NSAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvdG9vbHMudGNsCisrKyBiL2dpdC1ndWkvbGliL3Rvb2xzLnRjbApAQCAtMTQ2LDcgKzE0Niw3IEBACiAJfQogCiAJaWYgeyRva30gewotCQlzZXQgbXNnIFttYyAiVG9vbCBjb21wbGV0ZWQgc3VjY2VzZnVsbHk6ICVzIiAkZnVsbG5hbWVdCisJCXNldCBtc2cgW21jICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIiAkZnVsbG5hbWVdCiAJfSBlbHNlIHsKIAkJc2V0IG1zZyBbbWMgIlRvb2wgZmFpbGVkOiAlcyIgJGZ1bGxuYW1lXQogCX0KZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vZGUucG8gYi9naXQtZ3VpL3BvL2RlLnBvCmluZGV4IGE2ZjczMGIuLjUxYWJiNTAgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvcG8vZGUucG8KKysrIGIvZ2l0LWd1aS9wby9kZS5wbwpAQCAtNzczLDE2ICs3NzMsNiBAQAogbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKIG1zZ3N0ciAiRm9sZ2VuZGUgWndlaWdlIHNpbmQgbm9jaCBuaWNodCBtaXQgwrslc8KrIHp1c2FtbWVuZ2Vmw7xocnQ6IgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1Ci1tc2dpZCAiIgotIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuIFxuIgotIlxuIgotIiBEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKLW1zZ3N0ciAiIgotIkdlbMO2c2NodGUgWndlaWdlIGvDtm5uZW4gbnVyIG1pdCBncsO2w59lcmVtIEF1ZndhbmQgd2llZGVyaGVyZ2VzdGVsbHQgd2VyZGVuLlxuIgotIlxuIgotIkdld8OkaGx0ZSBad2VpZ2UgamV0enQgbMO2c2NoZW4/IgotCiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgpAQCAtMjUwNiw3ICsyNDk2LDcgQEAKIAogIzogbGliL3Rvb2xzLnRjbDoxNDkKICMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNmdWxseTogJXMiCittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKIG1zZ3N0ciAiV2Vya3pldWcgZXJmb2xncmVpY2ggYWJnZXNjaGxvc3NlbjogJXMiCiAKICM6IGxpYi90b29scy50Y2w6MTUxCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2ZyLnBvIGIvZ2l0LWd1aS9wby9mci5wbwppbmRleCA0NTc3M2FiLi5hOTQ0YWNlIDEwMDY0NAotLS0gYS9naXQtZ3VpL3BvL2ZyLnBvCisrKyBiL2dpdC1ndWkvcG8vZnIucG8KQEAgLTYyLDcgKzYyLDcgQEAKICJcbiIKICIlcyBuw6ljZXNzaXRlIGF1IG1vaW5zIEdpdCAxLjUuMC5cbiIKICJcbiIKLSJQZXV0J29uIGNvbnNpZMOpcmVyIHF1ZSAnJXMnIGVzdCBlbiB2ZXJzaW9uIDEuNS4wID9cbiIKKyJQZXV0LW9uIGNvbnNpZMOpcmVyIHF1ZSAnJXMnIGVzdCBlbiB2ZXJzaW9uIDEuNS4wID9cbiIKIAogIzogZ2l0LWd1aS5zaDoxMDYyCiBtc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgpAQCAtODIsNyArODIsNyBAQAogCiAjOiBnaXQtZ3VpLnNoOjEyNDcgbGliL2NoZWNrb3V0X29wLnRjbDozMDUKIG1zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgotbXNnc3RyICJSYWZyYWljaGlzc2VtZW50IGR1IHN0YXR1cyBkZXMgZmljaGllcnMuLi4iCittc2dzdHIgIlJhZnJhw65jaGlzc2VtZW50IGR1IHN0YXR1dCBkZXMgZmljaGllcnMuLi4iCiAKICM6IGdpdC1ndWkuc2g6MTMwMwogbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCkBAIC0xNjMsNyArMTYzLDcgQEAKIAogIzogZ2l0LWd1aS5zaDoyMjgxCiBtc2dpZCAiRWRpdCIKLW1zZ3N0ciAiRWRpdGlvbiIKK21zZ3N0ciAiw4lkaXRpb24iCiAKICM6IGdpdC1ndWkuc2g6MjI4MyBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCiBtc2dpZCAiQnJhbmNoIgpAQCAtMTk5LDcgKzE5OSw3IEBACiAKICM6IGdpdC1ndWkuc2g6MjMxNgogbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCdzIEhpc3RvcnkiCi1tc2dzdHIgIlZpc3VhbGlzZXIgaGlzdG9yaXF1ZSBicmFuY2hlIGNvdXJhbnRlIgorbXNnc3RyICJWaXN1YWxpc2VyIGwnaGlzdG9yaXF1ZSBkZSBsYSBicmFuY2hlIGNvdXJhbnRlIgogCiAjOiBnaXQtZ3VpLnNoOjIzMjAKIG1zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgpAQCAtMjA4LDEyICsyMDgsMTIgQEAKICM6IGdpdC1ndWkuc2g6MjMyNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgotbXNnc3RyICJOYXZpZ3VlciBsJ2FyYm9yZXNjZW5jZSBkZSAlcyIKK21zZ3N0ciAiUGFyY291cmlyIGwnYXJib3Jlc2NlbmNlIGRlICVzIgogCiAjOiBnaXQtZ3VpLnNoOjIzMjkKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgotbXNnc3RyICJWb2lyIGwnaGlzdG9yaXF1ZSBkZSBsYSBicmFuY2hlOiAlcyIKK21zZ3N0ciAiVm9pciBsJ2hpc3RvcmlxdWUgZGUgbGEgYnJhbmNoZSA6ICVzIgogCiAjOiBnaXQtZ3VpLnNoOjIzMzQgbGliL2RhdGFiYXNlLnRjbDoyNyBsaWIvZGF0YWJhc2UudGNsOjY3CiBtc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKQEAgLTIzMCw3ICsyMzAsNyBAQAogIzogZ2l0LWd1aS5zaDoyMzQ3IGdpdC1ndWkuc2g6MjM1MSBnaXQtZ3VpLnNoOjIzNTUgbGliL3Nob3J0Y3V0LnRjbDo3CiAjOiBsaWIvc2hvcnRjdXQudGNsOjM5IGxpYi9zaG9ydGN1dC50Y2w6NzEKIG1zZ2lkICJDcmVhdGUgRGVza3RvcCBJY29uIgotbXNnc3RyICJDcsOpZXIgaWPDtG5lIHN1ciBidXJlYXUiCittc2dzdHIgIkNyw6llciB1bmUgaWPDtG5lIHN1ciBsZSBidXJlYXUiCiAKICM6IGdpdC1ndWkuc2g6MjM2MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE4MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MQogbXNnaWQgIlF1aXQiCkBAIC0zMjAsNyArMzIwLDcgQEAKIAogIzogZ2l0LWd1aS5zaDoyNDg0IGxpYi9pbmRleC50Y2w6NDEwCiBtc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCi1tc2dzdHIgIkFubnVsZXIgbGVzIG1vZGlmaWNhdGlvbnMgKHJldmVydCkiCittc2dzdHIgIkFubnVsZXIgbGVzIG1vZGlmaWNhdGlvbnMiCiAKICM6IGdpdC1ndWkuc2g6MjQ5MSBnaXQtZ3VpLnNoOjMwNjkKIG1zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKQEAgLTM4Miw3ICszODIsNyBAQAogCiAjOiBnaXQtZ3VpLnNoOjI2MTQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2CiBtc2dpZCAiU2hvdyBTU0ggS2V5IgotbXNnc3RyICJNb250cmVyIGNsw6kgU1NIIgorbXNnc3RyICJNb250cmVyIGxhIGNsw6kgU1NIIgogCiAjOiBnaXQtZ3VpLnNoOjI3MDcKICMsIHRjbC1mb3JtYXQKQEAgLTQ0NSw3ICs0NDUsNyBAQAogCiAjOiBnaXQtZ3VpLnNoOjMwNzgKIG1zZ2lkICJSZWZyZXNoIgotbXNnc3RyICJSYWZyYWljaGlyIgorbXNnc3RyICJSYWZyYcOuY2hpciIKIAogIzogZ2l0LWd1aS5zaDozMDk5CiBtc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAKICM6IGdpdC1ndWkuc2g6MzExMSBsaWIvYmxhbWUudGNsOjI4MQogbXNnaWQgIkVuY29kaW5nIgotbXNnc3RyICJFbmNvZGFnZSIKK21zZ3N0ciAiQ29kYWdlIGRlcyBjYXJhY3TDqHJlcyIKIAogIzogZ2l0LWd1aS5zaDozMTIyCiBtc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgpAQCAtNDY5LDcgKzQ2OSw3IEBACiAKICM6IGdpdC1ndWkuc2g6MzEzNwogbXNnaWQgIlJ1biBNZXJnZSBUb29sIgotbXNnc3RyICJMYW5jZXIgb3V0aWwgZGUgbWVyZ2UiCittc2dzdHIgIkxhbmNlciBsJ291dGlsIGRlIGZ1c2lvbiIKIAogIzogZ2l0LWd1aS5zaDozMTQyCiBtc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgpAQCAtNTI3LDcgKzUyNyw3IEBACiAiVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgogbXNnc3RyICIiCiAiXG4iCi0iQ2VjaSBlc3QgZHUgw6AgdW4gcHJvYmzDqG1lIGNvbm51IGF2ZWNcbiIKKyJDZWNpIGVzdCBkw7sgw6AgdW4gcHJvYmzDqG1lIGNvbm51IGF2ZWNcbiIKICJsZSBiaW5haXJlIFRjbCBkaXN0cmlidcOpIHBhciBDeWd3aW4uIgogCiAjOiBnaXQtZ3VpLnNoOjMzMzYKQEAgLTYzMCwxMSArNjMwLDExIEBACiAKICM6IGxpYi9ibGFtZS50Y2w6MTAyMQogbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlIGNvbW1pdCBIRUFEOiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlIGNvbW1pdCBIRUFEIDoiCiAKICM6IGxpYi9ibGFtZS50Y2w6MTA3NgogbXNnaWQgIkNhbm5vdCBmaW5kIHBhcmVudCBjb21taXQ6IgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgY29tbWl0IHBhcmVudDoiCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBsZSBjb21taXQgcGFyZW50IDoiCiAKICM6IGxpYi9ibGFtZS50Y2w6MTA5MQogbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKQEAgLTY0Niw3ICs2NDYsNyBAQAogCiAjOiBsaWIvYmxhbWUudGNsOjEyMzIKIG1zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKLW1zZ3N0ciAiQSBsJ29yaWdpbmUgcGFyIDoiCittc2dzdHIgIsOAIGwnb3JpZ2luZSBwYXIgOiIKIAogIzogbGliL2JsYW1lLnRjbDoxMjM4CiBtc2dpZCAiSW4gRmlsZToiCkBAIC02OTEsMTEgKzY5MSwxMSBAQAogCiAjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjIKIG1zZ2lkICJDcmVhdGUgQnJhbmNoIgotbXNnc3RyICJDcsOpZXIgYnJhbmNoZSIKK21zZ3N0ciAiQ3LDqWVyIHVuZSBicmFuY2hlIgogCiAjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjcKIG1zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKLW1zZ3N0ciAiQ3LDqWVyIG5vdXZlbGxlIGJyYW5jaGUiCittc2dzdHIgIkNyw6llciB1bmUgbm91dmVsbGUgYnJhbmNoZSIKIAogIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzc3CiBtc2dpZCAiQ3JlYXRlIgpAQCAtNzE5LDcgKzcxOSw3IEBACiAKICM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgogbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgotbXNnc3RyICJNZXR0cmUgw6Agam91ciBicmFuY2hlIGV4aXN0YW50ZSA6IgorbXNnc3RyICJNZXR0cmUgw6Agam91ciB1bmUgYnJhbmNoZSBleGlzdGFudGUgOiIKIAogIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjc1CiBtc2dpZCAiTm8iCkBAIC03MjcsNyArNzI3LDcgQEAKIAogIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjgwCiBtc2dpZCAiRmFzdCBGb3J3YXJkIE9ubHkiCi1tc2dzdHIgIk1pc2Utw6Atam91ciByZWN0aWxpZ25lIHNldWxlbWVudCAoZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyIHJlY3RpbGlnbmUgc2V1bGVtZW50IChmYXN0LWZvcndhcmQpIgogCiAjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1MzYKIG1zZ2lkICJSZXNldCIKQEAgLTc2OSw3ICs3NjksNyBAQAogCiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTIKIG1zZ2lkICJEZWxldGUgT25seSBJZiBNZXJnZWQgSW50byIKLW1zZ3N0ciAiU3VwcHJpbWVyIHNldWxlbWVudCBzaSBmdXNpb25uw6llIGRhbnM6IgorbXNnc3RyICJTdXBwcmltZXIgc2V1bGVtZW50IHNpIGZ1c2lvbm7DqWUgZGFucyA6IgogCiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTQKIG1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIHRlc3QuKSIKQEAgLTc4MCwyMyArNzgwLDEzIEBACiBtc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgogbXNnc3RyICJMZXMgYnJhbmNoZXMgc3VpdmFudGVzIG5lIHNvbnQgcGFzIGNvbXBsw6h0ZW1lbnQgZnVzaW9ubsOpZXMgZGFucyAlcyA6IgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1Ci1tc2dpZCAiIgotIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuIFxuIgotIlxuIgotIiBEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKLW1zZ3N0ciAiIgotIlLDqWN1cMOpcmVyIGRlcyBicmFuY2hlcyBzdXBwcmltw6llcyBlc3QgZGlmZmljaWxlLlxuIgotIlxuIgotIlN1cHByaW1lciBsZXMgYnJhbmNoZXMgc8OpbGVjdGlvbm7DqWVzID8iCi0KICM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKICIlcyIKIG1zZ3N0ciAiIgotIkxhIHN1cHByZXNzaW9uIGRlcyBicmFuY2hlcyBzdWl2YW50ZXMgYSDDqWNob3XDqWUgOlxuIgorIkxhIHN1cHByZXNzaW9uIGRlcyBicmFuY2hlcyBzdWl2YW50ZXMgYSDDqWNob3XDqSA6XG4iCiAiJXMiCiAKICM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxNCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjIKQEAgLTkwMiwxMSArODkyLDExIEBACiAjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCi1tc2dzdHIgIkxhIG1pc2Ugw6Agam91ciBkZSAnJXMnIGEgw6ljaG91w6llLiIKK21zZ3N0ciAiTGEgbWlzZSDDoCBqb3VyIGRlICclcycgYSDDqWNob3XDqS4iCiAKICM6IGxpYi9jaGVja291dF9vcC50Y2w6MjczCiBtc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgotbXNnc3RyICJMJ2luZGV4IChzdGFnaW5nIGFyZWEpIGVzdCBkw6lqw6AgdsOpcm91aWxsw6kiCittc2dzdHIgIkwnaW5kZXggKHN0YWdpbmcgYXJlYSkgZXN0IGTDqWrDoCB2ZXJyb3VpbGzDqS4iCiAKICM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg4CiBtc2dpZCAiIgpAQCAtOTE4LDcgKzkwOCw3IEBACiAiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCiBtc2dzdHIgIiIKICJMJ8OpdGF0IGxvcnMgZGUgbGEgZGVybmnDqHJlIHN5bmNocm9uaXNhdGlvbiBuZSBjb3JyZXNwb25kIHBsdXMgw6AgbCfDqXRhdCBkdSAiCi0iZMOpcMO0dFxuIgorImTDqXDDtHQuXG4iCiAiXG4iCiAiVW4gYXV0cmUgcHJvZ3JhbW1lIEdpdCBhIG1vZGlmacOpIGNlIGTDqXDDtHQgZGVwdWlzIGxhIGRlcm5pw6hyZSAiCiAic3luY2hyb25pc2F0aW9uLiBVbmUgcmVzeW5jaHJvbmlzYXRpb24gZG9pdCDDqnRyZSBlZmZlY3R1w6llIGF2YW50IGRlIHBvdXZvaXIgIgpAQCAtOTU2LDkgKzk0Niw5IEBACiAiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCiAiQ2hlY2tvdXQnLiIKIG1zZ3N0ciAiIgotIlZvdXMgbifDqnRlcyBwbHVzIHVyIHVuZSBicmFuY2hlIGxvY2FsZS5cbiIKKyJWb3VzIG4nw6p0ZXMgcGx1cyBzdXIgdW5lIGJyYW5jaGUgbG9jYWxlLlxuIgogIlxuIgotIlNpIHZvdXMgdm91bGlleiDDqnRyZSBzdXIgdW5lIGJyYW5jaGUsIGNyw6lleiBlbiB1bmUgbWFpbnRlbmFudCBlbiBwYXJ0YW50IGRlICIKKyJTaSB2b3VzIHZvdWxpZXogw6p0cmUgc3VyIHVuZSBicmFuY2hlLCBjcsOpZXotZW4gdW5lIG1haW50ZW5hbnQgZW4gcGFydGFudCBkZSAiCiAiJ0NldCBlbXBydW50IGTDqXRhY2jDqScuIgogCiAjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ2OCBsaWIvY2hlY2tvdXRfb3AudGNsOjQ3MgpAQCAtMTAwMCw3ICs5OTAsNyBAQAogIm1pcyDDoCBqb3VyIGF2ZWMgc3VjY8OocywgbWFpcyBsYSBtaXNlIMOgIGpvdXIgZCd1biBmaWNoaWVyIGludGVybmUgw6AgR2l0IGEgIgogIsOpY2hvdcOpZS5cbiIKICJcbiIKLSJDZWxhIG4nYXVyYWl0IHBhcyBkdSBzZSBwcm9kdWlyZS4gJXMgdmEgYWJhbmRvbm5lciBldCBzZSB0ZXJtaW5lci4iCisiQ2VsYSBuJ2F1cmFpdCBwYXMgZMO7IHNlIHByb2R1aXJlLiAlcyB2YSBhYmFuZG9ubmVyIGV0IHNlIHRlcm1pbmVyLiIKIAogIzogbGliL2Nob29zZV9mb250LnRjbDozOQogbXNnaWQgIlNlbGVjdCIKQEAgLTEwMjMsOCArMTAxMyw4IEBACiAiVGhpcyBpcyBleGFtcGxlIHRleHQuXG4iCiAiSWYgeW91IGxpa2UgdGhpcyB0ZXh0LCBpdCBjYW4gYmUgeW91ciBmb250LiIKIG1zZ3N0ciAiIgotIkMnZXN0IHVuIHRleHRlIGQnZXhlbXBsZS5cbiIKLSJTaSB2b3VzIGFpbWV6IGNlIHRleHRlLCB2b3VzIHBvdXZleiBjaG9pc2lyIGNldHRlIHBvbGljZSIKKyJDZWNpIGVzdCB1biB0ZXh0ZSBkJ2V4ZW1wbGUuXG4iCisiU2kgdm91cyBhaW1leiBjZSB0ZXh0ZSwgdm91cyBwb3V2ZXogY2hvaXNpciBjZXR0ZSBwb2xpY2UuIgogCiAjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjI4CiBtc2dpZCAiR2l0IEd1aSIKQEAgLTEwNDAsNyArMTAzMCw3IEBACiAKICM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY1CiBtc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiQ2xvbmVyIGTDqXDDtHQgZXhpc3RhbnQiCittc2dzdHIgIkNsb25lciB1biBkw6lww7R0IGV4aXN0YW50IgogCiAjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNgogbXNnaWQgIkNsb25lLi4uIgpAQCAtMTA0OCw3ICsxMDM4LDcgQEAKIAogIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5ODMKIG1zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgIk91dnJpciBkw6lww7R0IGV4aXN0YW50IgorbXNnc3RyICJPdXZyaXIgdW4gZMOpcMO0dCBleGlzdGFudCIKIAogIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTkKIG1zZ2lkICJPcGVuLi4uIgpAQCAtMTA1NiwxNyArMTA0NiwxNyBAQAogCiAjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzMgogbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCi1tc2dzdHIgIkTDqXDDtHQgcsOpY2VtbWVudCB1dGlsaXPDqXMiCittc2dzdHIgIkTDqXDDtHRzIHLDqWNlbW1lbnQgdXRpbGlzw6lzIgogCiAjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzOAogbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgotbXNnc3RyICJPdXZyaXIgZMOpcMO0dCByw6ljZW50IDoiCittc2dzdHIgIk91dnJpciB1biBkw6lww7R0IHLDqWNlbnQgOiIKIAogIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDkKICM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzE2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAiTGEgY3LDqWF0aW9uIGR1IGTDqXDDtHQgJXMgYSDDqWNob3XDqWUgOiIKK21zZ3N0ciAiTGEgY3LDqWF0aW9uIGR1IGTDqXDDtHQgJXMgYSDDqWNob3XDqSA6IgogCiAjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NwogbXNnaWQgIkRpcmVjdG9yeToiCkBAIC0xMDkzLDExICsxMDgzLDExIEBACiAKICM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDczCiBtc2dpZCAiU291cmNlIExvY2F0aW9uOiIKLW1zZ3N0ciAiRW1wbGFjZW1lbnQgc291cmNlOiIKK21zZ3N0ciAiRW1wbGFjZW1lbnQgc291cmNlIDoiCiAKICM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg0CiBtc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCi1tc2dzdHIgIlLDqXBlcnRvaXJlIGNpYmxlOiIKK21zZ3N0ciAiUsOpcGVydG9pcmUgY2libGUgOiIKIAogIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTYKIG1zZ2lkICJDbG9uZSBUeXBlOiIKQEAgLTExMzcsNyArMTEyNyw3IEBACiAKICM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjIyCiBtc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCi1tc2dzdHIgIkxhIGNvbmZpZ3VyYXRpb24gZGUgbCdvcmlnaW5lIGEgw6ljaG91w6llLiIKK21zZ3N0ciAiTGEgY29uZmlndXJhdGlvbiBkZSBsJ29yaWdpbmUgYSDDqWNob3XDqS4iCiAKICM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjM0CiBtc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKQEAgLTEyNDIsNyArMTIzMiw3IEBACiAKICM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTYyCiBtc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCi1tc2dzdHIgIkNoYXJnZW1lbnQgaW5pdGlhbCBkdSBmaWNoaWVyIMOpY2hvdcOpLiIKK21zZ3N0ciAiTGUgY2hhcmdlbWVudCBpbml0aWFsIGR1IGZpY2hpZXIgYSDDqWNob3XDqS4iCiAKICM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTc4CiBtc2dpZCAiT3BlbiIKQEAgLTEyODQsNyArMTI3NCw3IEBACiAKICM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMzgKIG1zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCi1tc2dzdHIgIlBhcyBkZSByw6l2aXNpb24gc2VsZWN0aW9ubsOpZS4iCittc2dzdHIgIlBhcyBkZSByw6l2aXNpb24gc8OpbGVjdGlvbm7DqWUuIgogCiAjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzQ2CiBtc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCkBAIC0xMjkyLDcgKzEyODIsNyBAQAogCiAjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMxCiBtc2dpZCAiVXBkYXRlZCIKLW1zZ3N0ciAiTWlzZS3DoC1qb3VyOiIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyOiIKIAogIzogbGliL2Nob29zZV9yZXYudGNsOjU1OQogbXNnaWQgIlVSTCIKQEAgLTEzMjAsOCArMTMxMCw4IEBACiBtc2dzdHIgIiIKICJJbXBvc3NpYmxlIGRlIGNvcnJpZ2VyIHBlbmRhbnQgdW5lIGZ1c2lvbi5cbiIKICJcbiIKLSJWb3VzIMOqdGVzIGFjdHVlbGxlbWVudCBhdSBtaWxpZXUgZCd1bmUgZnVzaW9uIHF1aSBuJ2EgcGFzIMOpdMOpIGNvbXBsZXRlbWVudCAiCi0idGVybWluw6llLiBWb3VzIG5lIHBvdXZleiBwYXMgY29ycmlnZXIgbGUgY29tbWl0IHByw6ljw6lkYW50IHNhdWYgc2kgdm91cyAiCisiVm91cyDDqnRlcyBhY3R1ZWxsZW1lbnQgYXUgbWlsaWV1IGQndW5lIGZ1c2lvbiBxdWkgbidhIHBhcyDDqXTDqSBjb21wbMOodGVtZW50ICIKKyJ0ZXJtaW7DqWUuIFZvdXMgbmUgcG91dmV6IHBhcyBjb3JyaWdlciBsZSBjb21taXQgcHLDqWPDqWRlbnQgc2F1ZiBzaSB2b3VzICIKICJhYmFuZG9ubmV6IGxhIGZ1c2lvbiBjb3VyYW50ZS5cbiIKIAogIzogbGliL2NvbW1pdC50Y2w6NDkKQEAgLTE0MDksNyArMTM5OSw3IEBACiAjOiBsaWIvY29tbWl0LnRjbDoyMTEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKLW1zZ3N0ciAiYXR0ZW50aW9uIDogVGNsIG5lIHN1cHBvcnRlIHBhcyBsJ2VuY29kYWdlICclcycuIgorbXNnc3RyICJhdHRlbnRpb24gOiBUY2wgbmUgc3VwcG9ydGUgcGFzIGxlIGNvZGFnZSAnJXMnLiIKIAogIzogbGliL2NvbW1pdC50Y2w6MjI3CiBtc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCkBAIC0xNDY5LDEyICsxNDU5LDEyIEBACiAKICM6IGxpYi9jb21taXQudGNsOjM3MwogbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKLW1zZ3N0ciAidXBkYXRlLXJlZiBhIMOpY2hvdcOpIgorbXNnc3RyICJ1cGRhdGUtcmVmIGEgw6ljaG91w6kgOiIKIAogIzogbGliL2NvbW1pdC50Y2w6NDYxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgotbXNnc3RyICJDb21taXQgY3LDqcOpICVzIDogJXMiCittc2dzdHIgIkNvbW1pdCAlcyBjcsOpw6kgOiAlcyIKIAogIzogbGliL2NvbnNvbGUudGNsOjU5CiBtc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKQEAgLTE1ODEsMjQgKzE1NzEsMjQgQEAKICJMT0NBTDogZGVsZXRlZFxuIgogIlJFTU9URTpcbiIKIG1zZ3N0ciAiIgotIkxPQ0FMOiBzdXBwcmltw6lcbiIKLSJESVNUQU5UOlxuIgorIkxPQ0FMIDogc3VwcHJpbcOpXG4iCisiRElTVEFOVCA6XG4iCiAKICM6IGxpYi9kaWZmLnRjbDoxMjUKIG1zZ2lkICIiCiAiUkVNT1RFOiBkZWxldGVkXG4iCiAiTE9DQUw6XG4iCiBtc2dzdHIgIiIKLSJESVNUQU5UOiBzdXBwcmltw6lcbiIKLSJMT0NBTDpcbiIKKyJESVNUQU5UIDogc3VwcHJpbcOpXG4iCisiTE9DQUwgOlxuIgogCiAjOiBsaWIvZGlmZi50Y2w6MTMyCiBtc2dpZCAiTE9DQUw6XG4iCi1tc2dzdHIgIkxPQ0FMOlxuIgorbXNnc3RyICJMT0NBTCA6XG4iCiAKICM6IGxpYi9kaWZmLnRjbDoxMzUKIG1zZ2lkICJSRU1PVEU6XG4iCi1tc2dzdHIgIkRJU1RBTlQ6XG4iCittc2dzdHIgIkRJU1RBTlQgOlxuIgogCiAjOiBsaWIvZGlmZi50Y2w6MTk3IGxpYi9kaWZmLnRjbDoyOTYKICMsIHRjbC1mb3JtYXQKQEAgLTE2MjQsNyArMTYxNCw3IEBACiAiKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCiBtc2dzdHIgIiIKICIqIExlIGZpY2hpZXIgbm9uIHN1aXZpIGZhaXQgJWQgb2N0ZXRzLlxuIgotIiogT24gbW9udHJlIHNldWxlbWVudCBsZXMgcHJlbWllcnMgJWQgb2N0ZXRzLlxuIgorIiogU2V1bHMgbGVzICVkIHByZW1pZXJzIG9jdGV0cyBzb250IG1vbnRyw6lzLlxuIgogCiAjOiBsaWIvZGlmZi50Y2w6MjI4CiAjLCB0Y2wtZm9ybWF0CkBAIC0xNjM1LDcgKzE2MjUsNyBAQAogbXNnc3RyICIiCiAiXG4iCiAiKiBGaWNoaWVyIHN1aXZpIHJhY2NvdXJjaXMgaWNpIGRlICVzLlxuIgotIiogUG91ciB2b2lyIGxlIGZpY2hpZXIgZW50aWVyLCB1dGlsaXNlciB1biDDqWRpdGV1ciBleHRlcm5lLlxuIgorIiogUG91ciB2b2lyIGxlIGZpY2hpZXIgZW50aWVyLCB1dGlsaXNleiB1biDDqWRpdGV1ciBleHRlcm5lLlxuIgogCiAjOiBsaWIvZGlmZi50Y2w6NDM2CiBtc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCkBAIC0xNjgwLDcgKzE2NzAsNyBAQAogCiAjOiBsaWIvaW5kZXgudGNsOjYKIG1zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCi1tc2dzdHIgIkltcG9zc2libGUgZGUgZMOpdsOpcm91aWxsZXIgbCdpbmRleC4iCittc2dzdHIgIkltcG9zc2libGUgZGUgZMOpdmVycm91aWxsZXIgbCdpbmRleC4iCiAKICM6IGxpYi9pbmRleC50Y2w6MTUKIG1zZ2lkICJJbmRleCBFcnJvciIKQEAgLTE3MDAsMTIgKzE2OTAsMTIgQEAKIAogIzogbGliL2luZGV4LnRjbDozMQogbXNnaWQgIlVubG9jayBJbmRleCIKLW1zZ3N0ciAiRMOpdmVyb3VpbGxlciBsJ2luZGV4IgorbXNnc3RyICJEw6l2ZXJyb3VpbGxlciBsJ2luZGV4IgogCiAjOiBsaWIvaW5kZXgudGNsOjI4NwogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKLW1zZ3N0ciAiRMOpc2luZGV4YXRpb24gZGU6ICVzIgorbXNnc3RyICJEw6lzaW5kZXhhdGlvbiBkZSA6ICVzIgogCiAjOiBsaWIvaW5kZXgudGNsOjMyNgogbXNnaWQgIlJlYWR5IHRvIGNvbW1pdC4iCkBAIC0xODA0LDExICsxNzk0LDExIEBACiBtc2dzdHIgIiIKICJWb3VzIMOqdGVzIGF1IG1pbGlldSBkJ3VuZSBtb2RpZmljYXRpb24uXG4iCiAiXG4iCi0iTGUgZmljaGllciAlcyBlc3QgbW9kaWZpw6kuXG4iCisiTGUgZmljaGllciAlcyBhIMOpdMOpIG1vZGlmacOpLlxuIgogIlxuIgogIlZvdXMgZGV2cmlleiB0ZXJtaW5lciBsZSBjb21taXQgY291cmFudCBhdmFudCBkZSBsYW5jZXIgdW5lIGZ1c2lvbi4gRW4gIgogImZhaXNhaXQgY29tbWUgY2VsYSwgdm91cyDDqXZpdGVyZXogZGUgZGV2b2lyIMOpdmVudHVlbGxlbWVudCBhYmFuZG9ubmVyIHVuZSAiCi0iZnVzaW9uIGF5YW50IMOpY2hvdcOpZS5cbiIKKyJmdXNpb24gYXlhbnQgw6ljaG91w6kuXG4iCiAKICM6IGxpYi9tZXJnZS50Y2w6MTA3CiAjLCB0Y2wtZm9ybWF0CkBAIC0xODI2LDcgKzE4MTYsNyBAQAogCiAjOiBsaWIvbWVyZ2UudGNsOjEzMwogbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgotbXNnc3RyICJMYSBmdXNpb24gYSBlY2hvdcOpZS4gSWwgZXN0IG7DqWNlc3NhaXJlIGRlIHLDqXNvdWRyZSBsZXMgY29uZmxpY3RzLiIKK21zZ3N0ciAiTGEgZnVzaW9uIGEgZWNob3XDqS4gSWwgZXN0IG7DqWNlc3NhaXJlIGRlIHLDqXNvdWRyZSBsZXMgY29uZmxpdHMuIgogCiAjOiBsaWIvbWVyZ2UudGNsOjE1OAogIywgdGNsLWZvcm1hdApAQCAtMTkxNCwxNiArMTkwNCwxNiBAQAogIlxuIgogIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCiBtc2dzdHIgIiIKLSJOb3RlciBxdWUgbGUgZGlmZiBuZSBtb250cmUgcXVlIGxlcyBtb2RpZmljYXRpb25zIGVuIGNvbmZsaWN0LlxuIgorIk5vdGVyIHF1ZSBsZSBkaWZmIG5lIG1vbnRyZSBxdWUgbGVzIG1vZGlmaWNhdGlvbnMgZW4gY29uZmxpdC5cbiIKICJcbiIKICIlcyBzZXJhIMOpY3Jhc8OpLlxuIgogIlxuIgotIkNldHRlIG9ww6lyYXRpb24gbmUgcGV1dCDDqnRyZSBkw6lmYWl0ZSBxdSdlbiByZWxhbsOnYW50IGxhIGZ1c2lvbi4iCisiQ2V0dGUgb3DDqXJhdGlvbiBuZSBwZXV0IMOqdHJlIGludmVyc8OpZSBxdSdlbiByZWxhbsOnYW50IGxhIGZ1c2lvbi4iCiAKICM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCi1tc2dzdHIgIkxlIGZpY2hpZXIgJXMgc2VtYmxlIGF2b2lyIGRlcyBjb25mbGljdHMgbm9uIHLDqXNvbHVzLCBpbmTDqXhlciBxdWFuZCBtw6ptZSA/IgorbXNnc3RyICJMZSBmaWNoaWVyICVzIHNlbWJsZSBhdm9pciBkZXMgY29uZmxpdHMgbm9uIHLDqXNvbHVzLCBpbmRleGVyIHF1YW5kIG3Dqm1lID8iCiAKICM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCiAjLCB0Y2wtZm9ybWF0CkBAIC0xOTMyLDExICsxOTIyLDExIEBACiAKICM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQogbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgbGEgc3VwcHJlc3Npb24gb3UgZGUgcmVsaWVyIGRlcyBjb25mbGljdHMgZW4gdXRpbGlzYW50IHVuIG91dGlsIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSBsYSBzdXBwcmVzc2lvbiBvdSBkZSByZWxpZXIgZGVzIGNvbmZsaXRzIGVuIHV0aWxpc2FudCB1biBvdXRpbCIKIAogIzogbGliL21lcmdldG9vbC50Y2w6MTQ2CiBtc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKLW1zZ3N0ciAiTGUgZmljaGllciBlbiBjb25mbGljdCBuJ2V4aXN0ZSBwYXMuIgorbXNnc3RyICJMZSBmaWNoaWVyIGVuIGNvbmZsaXQgbidleGlzdGUgcGFzLiIKIAogIzogbGliL21lcmdldG9vbC50Y2w6MjY0CiAjLCB0Y2wtZm9ybWF0CkBAIC0xOTU4LDcgKzE5NDgsNyBAQAogIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCiAiJXMiCiBtc2dzdHIgIiIKLSJFcnJldXIgbG9ycyBkZSBsYSByw6ljdXDDqXJhdGlvbiBkZXMgdmVyc2lvbnM6XG4iCisiRXJyZXVyIGxvcnMgZGUgbGEgcsOpY3Vww6lyYXRpb24gZGVzIHZlcnNpb25zIDpcbiIKICIlcyIKIAogIzogbGliL21lcmdldG9vbC50Y2w6MzQzCkBAIC0xOTY4LDcgKzE5NTgsNyBAQAogIlxuIgogIiVzIgogbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkZSBsYW5jZXIgbCdvdXRpbCBkZSBmdXNpb246XG4iCisiSW1wb3NzaWJsZSBkZSBsYW5jZXIgbCdvdXRpbCBkZSBmdXNpb24gOlxuIgogIlxuIgogIiVzIgogCkBAIC0xOTgzLDEyICsxOTczLDEyIEBACiAjOiBsaWIvb3B0aW9uLnRjbDoxMQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkludmFsaWQgZ2xvYmFsIGVuY29kaW5nICclcyciCi1tc2dzdHIgIkVuY29kYWdlIGdsb2JhbCBpbnZhbGlkZSAnJXMnIgorbXNnc3RyICJDb2RhZ2UgZ2xvYmFsICclcycgaW52YWxpZGUiCiAKICM6IGxpYi9vcHRpb24udGNsOjE5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiSW52YWxpZCByZXBvIGVuY29kaW5nICclcyciCi1tc2dzdHIgIkVuY29kYWdlIGRlIGTDqXDDtHQgaW52YWxpZGUgJyVzJyIKK21zZ3N0ciAiQ29kYWdlIGRlIGTDqXDDtHQgJyVzJyBpbnZhbGlkZSIKIAogIzogbGliL29wdGlvbi50Y2w6MTE3CiBtc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKQEAgLTIwMDEsNyArMTk5MSw3IEBACiAjOiBsaWIvb3B0aW9uLnRjbDoxMzEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIlcyBSZXBvc2l0b3J5IgotbXNnc3RyICJEw6lww7R0OiAlcyIKK21zZ3N0ciAiRMOpcMO0dCA6ICVzIgogCiAjOiBsaWIvb3B0aW9uLnRjbDoxMzIKIG1zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgpAQCAtMjA2OSw3ICsyMDU5LDcgQEAKIAogIzogbGliL29wdGlvbi50Y2w6MTU1CiBtc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgotbXNnc3RyICJFbmNvZGFnZSBkdSBjb250ZW51IGRlcyBmaWNoaWVycyBwYXIgZMOpZmF1dCIKK21zZ3N0ciAiQ29kYWdlIGR1IGNvbnRlbnUgZGVzIGZpY2hpZXJzIHBhciBkw6lmYXV0IgogCiAjOiBsaWIvb3B0aW9uLnRjbDoyMDMKIG1zZ2lkICJDaGFuZ2UiCkBAIC0yMDk4LDExICsyMDg4LDExIEBACiAKICM6IGxpYi9vcHRpb24udGNsOjMxNAogbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCi1tc2dzdHIgIkxhIHNhdXZlZ2FyZGUgY29tcGzDqHRlIGRlcyBvcHRpb25zIGEgw6ljaG91w6llIDoiCittc2dzdHIgIkxhIHNhdXZlZ2FyZGUgY29tcGzDqHRlIGRlcyBvcHRpb25zIGEgw6ljaG91w6kgOiIKIAogIzogbGliL3JlbW90ZS50Y2w6MTYzCiBtc2dpZCAiUmVtb3ZlIFJlbW90ZSIKLW1zZ3N0ciAiU3VwcHJpbWVyIGTDqXDDtHQgZGlzdGFudCIKK21zZ3N0ciAiU3VwcHJpbWVyIHVuIGTDqXDDtHQgZGlzdGFudCIKIAogIzogbGliL3JlbW90ZS50Y2w6MTY4CiBtc2dpZCAiUHJ1bmUgZnJvbSIKQEAgLTIxMTgsMTEgKzIxMDgsMTEgQEAKIAogIzogbGliL3JlbW90ZV9hZGQudGNsOjE5CiBtc2dpZCAiQWRkIFJlbW90ZSIKLW1zZ3N0ciAiQWpvdXRlciBkw6lww7R0IGRpc3RhbnQiCittc2dzdHIgIkFqb3V0ZXIgdW4gZMOpcMO0dCBkaXN0YW50IgogCiAjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjQKIG1zZ2lkICJBZGQgTmV3IFJlbW90ZSIKLW1zZ3N0ciAiQWpvdXRlciBub3V2ZWF1IGTDqXDDtHQgZGlzdGFudCIKK21zZ3N0ciAiQWpvdXRlciB1biBub3V2ZWF1IGTDqXDDtHQgZGlzdGFudCIKIAogIzogbGliL3JlbW90ZV9hZGQudGNsOjI4IGxpYi90b29sc19kbGcudGNsOjM2CiBtc2dpZCAiQWRkIgpAQCAtMjEzNCw3ICsyMTI0LDcgQEAKIAogIzogbGliL3JlbW90ZV9hZGQudGNsOjUwCiBtc2dpZCAiTG9jYXRpb246IgotbXNnc3RyICJFbXBsYWNlbWVudDoiCittc2dzdHIgIkVtcGxhY2VtZW50IDoiCiAKICM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MgogbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgpAQCAtMjE0Niw3ICsyMTM2LDcgQEAKIAogIzogbGliL3JlbW90ZV9hZGQudGNsOjcxCiBtc2dpZCAiSW5pdGlhbGl6ZSBSZW1vdGUgUmVwb3NpdG9yeSBhbmQgUHVzaCIKLW1zZ3N0ciAiSW5pdGlhbGlzZXIgZMOpcMO0dCBkaXN0YW50IGV0IHBvdXNzZXIiCittc2dzdHIgIkluaXRpYWxpc2VyIHVuIGTDqXDDtHQgZGlzdGFudCBldCBwb3Vzc2VyIgogCiAjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzcKIG1zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgpAQCAtMjE5Myw3ICsyMTgzLDcgQEAKIAogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM0CiBtc2dpZCAiRGVsZXRlIEJyYW5jaCBSZW1vdGVseSIKLW1zZ3N0ciAiU3VwcHJpbWVyIGJyYW5jaGUgw6AgZGlzdGFuY2UiCittc2dzdHIgIlN1cHByaW1lciB1bmUgYnJhbmNoZSDDoCBkaXN0YW5jZSIKIAogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0NwogbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKQEAgLTIyNDQsOCArMjIzNCw4IEBACiAiT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCiAibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCiBtc2dzdHIgIiIKLSJVbmUgb3UgcGx1c2lldXJzIGRlcyB0ZXN0cyBkZSBmdXNpb24gb250IMOpY2hvdcOpcyBwYXJjZSBxdWUgdm91cyBuJ2F2ZXogcGFzICIKLSJyw6ljdXDDqXLDqSBsZXMgY29tbWl0cyBuw6ljZXNzYWlyZXMuIEVzc2F5ZXogZGUgcsOpY3Vww6lyw6kgw6AgcGFydGlyIGRlICVzIGQnYWJvcmQuIgorIlVuIG91IHBsdXNpZXVycyBkZXMgdGVzdHMgZGUgZnVzaW9uIG9udCDDqWNob3XDqSBwYXJjZSBxdWUgdm91cyBuJ2F2ZXogcGFzICIKKyJyw6ljdXDDqXLDqSBsZXMgY29tbWl0cyBuw6ljZXNzYWlyZXMuIEVzc2F5ZXogZGUgcsOpY3Vww6lyZXIgw6AgcGFydGlyIGRlICVzIGQnYWJvcmQuIgogCiAjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNwogbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKQEAgLTIyNTcsMTQgKzIyNDcsMTQgQEAKICJcbiIKICJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKIG1zZ3N0ciAiIgotIlLDqWN1cMOpcmVyIGRlcyBicmFuY2hlcyBzdXBwcmltw6llcyBlc3QgZGlmZmljaWxlLlxuIgorIklsIGVzdCBkaWZmaWNpbGUgZGUgcsOpY3Vww6lyZXIgZGVzIGJyYW5jaGVzIHN1cHByaW3DqWVzLlxuIgogIlxuIgotIlNvdWhhaXRleiB2b3VzIHN1cHByaW1lciBsZXMgYnJhbmNoZXMgc8OpbGVjdGlvbm7DqWVzID8iCisiU3VwcHJpbWVyIGxlcyBicmFuY2hlcyBzw6lsZWN0aW9ubsOpZXMgPyIKIAogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgotbXNnc3RyICJTdXBwcmltZXIgbGVzIGJyYW5jaGVzIGRlICVzIgorbXNnc3RyICJTdXBwcmVzc2lvbiBkZXMgYnJhbmNoZXMgZGUgJXMiCiAKICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjg2CiBtc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCkBAIC0yMjg1LDcgKzIyNzUsNyBAQAogCiAjOiBsaWIvc2VhcmNoLnRjbDoyNAogbXNnaWQgIlByZXYiCi1tc2dzdHIgIlByw6ljw6lkYW50IgorbXNnc3RyICJQcsOpY8OpZGVudCIKIAogIzogbGliL3NlYXJjaC50Y2w6MjUKIG1zZ2lkICJDYXNlLVNlbnNpdGl2ZSIKQEAgLTIyOTMsNyArMjI4Myw3IEBACiAKICM6IGxpYi9zaG9ydGN1dC50Y2w6MjAgbGliL3Nob3J0Y3V0LnRjbDo2MQogbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCi1tc2dzdHIgIkltcG9zc2libGUgZCfDqWNyaXJlIGxlIHJhY2NvdXJjaXMgOiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgcmFjY291cmNpIDoiCiAKICM6IGxpYi9zaG9ydGN1dC50Y2w6MTM2CiBtc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgpAQCAtMjMxOCw3ICsyMzA4LDcgQEAKIAogIzogbGliL3NwZWxsY2hlY2sudGNsOjczCiBtc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKLW1zZ3N0ciAiTGEgdsOpcmlmaWNhdGlvbiBkJ29ydGhvZ3JhcGhlIGEgw6ljaG91w6llIHNpbGVudGlldXNlbWVudCBhdSBkw6ltYXJyYWdlIgorbXNnc3RyICJMYSB2w6lyaWZpY2F0aW9uIGQnb3J0aG9ncmFwaGUgYSDDqWNob3XDqSBzaWxlbmNpZXVzZW1lbnQgYXUgZMOpbWFycmFnZSIKIAogIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCiBtc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCkBAIC0yMzUxLDExICsyMzQxLDExIEBACiAKICM6IGxpYi9zc2hrZXkudGNsOjU2CiBtc2dpZCAiQ29weSBUbyBDbGlwYm9hcmQiCi1tc2dzdHIgIkNvcGllciBkYW5zIGxlIHByZXNzZSBwYXBpZXIiCittc2dzdHIgIkNvcGllciBkYW5zIGxlIHByZXNzZS1wYXBpZXIiCiAKICM6IGxpYi9zc2hrZXkudGNsOjcwCiBtc2dpZCAiWW91ciBPcGVuU1NIIFB1YmxpYyBLZXkiCi1tc2dzdHIgIlZvdHJlIGNsw6kgcHVibGlxdWUgT3BlbiBTU0giCittc2dzdHIgIlZvdHJlIGNsw6kgcHVibGlxdWUgT3BlblNTSCIKIAogIzogbGliL3NzaGtleS50Y2w6NzgKIG1zZ2lkICJHZW5lcmF0aW5nLi4uIgpAQCAtMjM2OCw3ICsyMzU4LDcgQEAKICJcbiIKICIlcyIKIG1zZ3N0ciAiIgotIkltcG9zc2libGUgZGUgbGFuY2VyIHNzaC1rZXlnZW46XG4iCisiSW1wb3NzaWJsZSBkZSBsYW5jZXIgc3NoLWtleWdlbiA6XG4iCiAiXG4iCiAiJXMiCiAKQEAgLTIzOTgsNyArMjM4OCw3IEBACiAjOiBsaWIvdG9vbHMudGNsOjkwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCi1tc2dzdHIgIsOKdGVzIHZvdXMgc8O7ciBkZSB2b3Vsb2lyIGxhbmNlciAlcyA/IgorbXNnc3RyICLDinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciBsYW5jZXIgJXMgPyIKIAogIzogbGliL3Rvb2xzLnRjbDoxMTAKICMsIHRjbC1mb3JtYXQKQEAgLTI0MTIsNyArMjQwMiw3IEBACiAKICM6IGxpYi90b29scy50Y2w6MTQ5CiAjLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2VzZnVsbHk6ICVzIgorbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCiBtc2dzdHIgIkwnb3V0aWwgYSB0ZXJtaW7DqSBhdmVjIHN1Y2PDqHMgOiAlcyIKIAogIzogbGliL3Rvb2xzLnRjbDoxNTEKQEAgLTI0MjIsMTEgKzI0MTIsMTEgQEAKIAogIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKIG1zZ2lkICJBZGQgVG9vbCIKLW1zZ3N0ciAiQWpvdXRlciBvdXRpbCIKK21zZ3N0ciAiQWpvdXRlciB1biBvdXRpbCIKIAogIzogbGliL3Rvb2xzX2RsZy50Y2w6MjgKIG1zZ2lkICJBZGQgTmV3IFRvb2wgQ29tbWFuZCIKLW1zZ3N0ciAiQWpvdXRlciBub3V2ZWxsZSBjb21tYW5kZSBkJ291dGlsIgorbXNnc3RyICJBam91dGVyIHVuZSBub3V2ZWxsZSBjb21tYW5kZSBkJ291dGlsIgogCiAjOiBsaWIvdG9vbHNfZGxnLnRjbDozMwogbXNnaWQgIkFkZCBnbG9iYWxseSIKQEAgLTI0MzgsNyArMjQyOCw3IEBACiAKICM6IGxpYi90b29sc19kbGcudGNsOjQ4CiBtc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCi1tc2dzdHIgIlV0aWxpc2VyIGxlcyBzw6lwYXJhdGV1cnMgJy8nIHBvdXIgY3LDqWVyIHVuIGFyYnJlIGRlIHNvdXMgbWVudXMgOiIKK21zZ3N0ciAiVXRpbGlzZXIgbGVzIHPDqXBhcmF0ZXVycyAnLycgcG91ciBjcsOpZXIgdW4gYXJicmUgZGUgc291cy1tZW51cyA6IgogCiAjOiBsaWIvdG9vbHNfZGxnLnRjbDo2MQogbXNnaWQgIkNvbW1hbmQ6IgpAQCAtMjQ2Miw3ICsyNDUyLDcgQEAKIAogIzogbGliL3Rvb2xzX2RsZy50Y2w6OTcKIG1zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgotbXNnc3RyICJMYW5jZXIgc2V1bGVtZW50IHNpIHVuIGRpZmYgZXN0IHNlbGVjdGlvbm7DqSAoJEZJTEVOQU1FIG5vbiB2aWRlKSIKK21zZ3N0ciAiTGFuY2VyIHNldWxlbWVudCBzaSB1biBkaWZmIGVzdCBzw6lsZWN0aW9ubsOpICgkRklMRU5BTUUgbm9uIHZpZGUpIgogCiAjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjEKIG1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgbmFtZSBmb3IgdGhlIHRvb2wuIgpAQCAtMjQ3OSw3ICsyNDY5LDcgQEAKICJDb3VsZCBub3QgYWRkIHRvb2w6XG4iCiAiJXMiCiBtc2dzdHIgIiIKLSJJbXBvc3NpYmxlIGQnYWpvdXRlciBsJ291dGlsOlxuIgorIkltcG9zc2libGUgZCdham91dGVyIGwnb3V0aWwgOlxuIgogIiVzIgogCiAjOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTAKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vZ2l0LWd1aS5wb3QgYi9naXQtZ3VpL3BvL2dpdC1ndWkucG90CmluZGV4IDE1YWVhMGQuLjUzYjdkMzYgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvcG8vZ2l0LWd1aS5wb3QKKysrIGIvZ2l0LWd1aS9wby9naXQtZ3VpLnBvdApAQCAtNzUzLDEzICs3NTMsNiBAQAogbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1Ci1tc2dpZCAiIgotIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuIFxuIgotIlxuIgotIiBEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKLW1zZ3N0ciAiIgotCiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgpAQCAtMjIyMCw3ICsyMjEzLDcgQEAKIAogIzogbGliL3Rvb2xzLnRjbDoxNDkKICMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNmdWxseTogJXMiCittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKIG1zZ3N0ciAiIgogCiAjOiBsaWIvdG9vbHMudGNsOjE1MQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9odS5wbyBiL2dpdC1ndWkvcG8vaHUucG8KaW5kZXggZjc2MWI2NC4uMGY4N2JjMSAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9wby9odS5wbworKysgYi9naXQtZ3VpL3BvL2h1LnBvCkBAIC03NzYsMTYgKzc3Niw2IEBACiBtc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgogbXNnc3RyICJBIGvDtnZldGtlesWRIGJyYW5jaGVrIG5lbSB0ZWxqZXNlbiBsZXR0ZWsgbWVyZ2Utw7ZsdmUgZWJiZTogJXM6IgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1Ci1tc2dpZCAiIgotIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuIFxuIgotIlxuIgotIiBEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKLW1zZ3N0ciAiIgotIkEgdMO2csO2bHQgYnJhbmNoZWsgdmlzc3phw6FsbMOtdMOhc2EgYm9ueW9sdWx0LiBcbiIKLSJcbiIKLSIgQml6dG9zYW4gdMO2cmxpIGEga2l2w6FsYXN6dG90dCBicmFuY2hla2V0PyIKLQogIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE0MQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKQEAgLTIzOTksNyArMjM4OSw3IEBACiAKICM6IGxpYi90b29scy50Y2w6MTQ5CiAjLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2VzZnVsbHk6ICVzIgorbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCiBtc2dzdHIgIkF6IGVzemvDtnogc2lrZXJlc2VuIGJlZmVqZXrFkWTDtnR0OiAlcyIKIAogIzogbGliL3Rvb2xzLnRjbDoxNTEKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vaXQucG8gYi9naXQtZ3VpL3BvL2l0LnBvCmluZGV4IDI5NGU1OTUuLjc2MjYzMmMgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvcG8vaXQucG8KKysrIGIvZ2l0LWd1aS9wby9pdC5wbwpAQCAtNzc4LDE2ICs3NzgsNiBAQAogbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKIG1zZ3N0ciAiSSByYW1pIHNlZ3VlbnRpIG5vbiBzb25vIHN0YXRpIGZ1c2kgY29tcGxldGFtZW50ZSBpbiAlczoiCiAKLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUKLW1zZ2lkICIiCi0iUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC4gXG4iCi0iXG4iCi0iIERlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgotbXNnc3RyICIiCi0iUmljb21wb3JyZSByYW1pIGNhbmNlbGxhdGkgcHXDsiBlc3NlcmUgY29tcGxpY2F0by4gXG4iCi0iXG4iCi0iIEVsaW1pbmFyZSBpIHJhbWkgc2VsZXppb25hdGk/IgotCiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgpAQCAtMjQxOCw3ICsyNDA4LDcgQEAKIAogIzogbGliL3Rvb2xzLnRjbDoxNDkKICMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNmdWxseTogJXMiCittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKIG1zZ3N0ciAiSWwgcHJvZ3JhbW1hIGVzdGVybm8gw6ggdGVybWluYXRvIGNvbiBzdWNjZXNzbzogJXMiCiAKICM6IGxpYi90b29scy50Y2w6MTUxCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2phLnBvIGIvZ2l0LWd1aS9wby9qYS5wbwppbmRleCAwOWQ2MGJlLi42M2M0Njk1IDEwMDY0NAotLS0gYS9naXQtZ3VpL3BvL2phLnBvCisrKyBiL2dpdC1ndWkvcG8vamEucG8KQEAgLTc3MywxNiArNzczLDYgQEAKIG1zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCiBtc2dzdHIgIuS7peS4i+OBruODluODqeODs+ODgeOBryAlcyDjgavlrozlhajjgavjg57jg7zjgrjjgZXjgozjgabjgYTjgb7jgZvjgpM6IgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1Ci1tc2dpZCAiIgotIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuIFxuIgotIlxuIgotIiBEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKLW1zZ3N0ciAiIgotIuODluODqeODs+ODgeOCkuWJiumZpOOBmeOCi+OBqOWFg+OBq+aIu+OBmeOBruOBr+WbsOmbo+OBp+OBmeOAgiBcbiIKLSJcbiIKLSIg6YG45oqe44GX44Gf44OW44Op44Oz44OB44KS5YmK6Zmk44GX44G+44GZ44GL77yfIgotCiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgpAQCAtMjM4Miw3ICsyMzcyLDcgQEAKIAogIzogbGliL3Rvb2xzLnRjbDoxNDkKICMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNmdWxseTogJXMiCittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKIG1zZ3N0ciAi44OE44O844Or44GM5a6M5LqG44GX44G+44GX44GfOiAlcyIKIAogIzogbGliL3Rvb2xzLnRjbDoxNTEKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vbmIucG8gYi9naXQtZ3VpL3BvL25iLnBvCmluZGV4IDFjNTEzN2QuLjZkZTkzYzIgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvcG8vbmIucG8KKysrIGIvZ2l0LWd1aS9wby9uYi5wbwpAQCAtNzYxLDE2ICs3NjEsNiBAQAogbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKIG1zZ3N0ciAiRsO4bGdlbmRlIGdyZW5lciBlciBpa2tlIGZ1bGxzdGVuZGlnIHNsw6V0dCBzYW1tZW4gbWVkICVzOiIKIAotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNQotbXNnaWQgIiIKLSJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LiBcbiIKLSJcbiIKLSIgRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCi1tc2dzdHIgIiIKLSJHamVub3BwcmV0dGluZyBhdiBmamVybmVkZSBncmVuZXIgZXIgdmFuc2tlbGlnLiBcbiIKLSJcbiIKLSIgRmplcm4gdmFsZ3RlIGdyZW5lcj8iCi0KICM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCkBAIC0yMzMxLDcgKzIzMjEsNyBAQAogCiAjOiBsaWIvdG9vbHMudGNsOjE0OQogIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc2Z1bGx5OiAlcyIKK21zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgogbXNnc3RyICJWZXJrdMO4eWV0IGJsZSBmdWxsZsO4cnQgbWVkIHN1a3Nlc3M6ICVzIgogCiAjOiBsaWIvdG9vbHMudGNsOjE1MQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9ydS5wbyBiL2dpdC1ndWkvcG8vcnUucG8KaW5kZXggZGI1NWIzZS4uMGZmYzRhNCAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9wby9ydS5wbworKysgYi9naXQtZ3VpL3BvL3J1LnBvCkBAIC03LDcgKzcsNyBAQAogbXNnc3RyICIiCiAiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCiAiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA4LTAzLTE0IDA3OjE4KzAxMDBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOC0xMi0wOCAwODozMS0wODAwXG4iCiAiUE8tUmV2aXNpb24tRGF0ZTogMjAwNy0xMC0yMiAyMjozMC0wMjAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBBbGV4IFJpZXNlbiA8cmFhLmxrbWxAZ21haWwuY29tPlxuIgogIkxhbmd1YWdlLVRlYW06IFJ1c3NpYW4gVHJhbnNsYXRpb24gPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCkBAIC0xNSwzMyArMTUsMzMgQEAKICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiAKLSM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo2MzQgZ2l0LWd1aS5zaDo2NDggZ2l0LWd1aS5zaDo2NjEgZ2l0LWd1aS5zaDo3NDQKLSM6IGdpdC1ndWkuc2g6NzYzCisjOiBnaXQtZ3VpLnNoOjQxIGdpdC1ndWkuc2g6NzM3IGdpdC1ndWkuc2g6NzUxIGdpdC1ndWkuc2g6NzY0IGdpdC1ndWkuc2g6ODQ3CisjOiBnaXQtZ3VpLnNoOjg2NgogbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgogbXNnc3RyICJnaXQtZ3VpOiDQutGA0LjRgtC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsCIKIAotIzogZ2l0LWd1aS5zaDo1OTMKKyM6IGdpdC1ndWkuc2g6Njg5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCiBtc2dzdHIgItCSICVzINGD0YHRgtCw0L3QvtCy0LvQtdC9INC90LXQstC10YDQvdGL0Lkg0YjRgNC40YTRgjoiCiAKLSM6IGdpdC1ndWkuc2g6NjIwCisjOiBnaXQtZ3VpLnNoOjcyMwogbXNnaWQgIk1haW4gRm9udCIKIG1zZ3N0ciAi0KjRgNC40YTRgiDQuNC90YLQtdGA0YTQtdC50YHQsCIKIAotIzogZ2l0LWd1aS5zaDo2MjEKKyM6IGdpdC1ndWkuc2g6NzI0CiBtc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCiBtc2dzdHIgItCo0YDQuNGE0YIg0LrQvtC90YHQvtC70Lgg0Lgg0LjQt9C80LXQvdC10L3QuNC5IChkaWZmKSIKIAotIzogZ2l0LWd1aS5zaDo2MzUKKyM6IGdpdC1ndWkuc2g6NzM4CiBtc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgogbXNnc3RyICJnaXQg0L3QtSDQvdCw0LnQtNC10L0g0LIgUEFUSC4iCiAKLSM6IGdpdC1ndWkuc2g6NjYyCisjOiBnaXQtZ3VpLnNoOjc2NQogbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgogbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDRgNCw0YHQv9C+0LfQvdCw0YLRjCDRgdGC0YDQvtC60YMg0LLQtdGA0YHQuNC4IEdpdDogIgogCi0jOiBnaXQtZ3VpLnNoOjY4MAorIzogZ2l0LWd1aS5zaDo3ODMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiR2l0IHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWQuXG4iCkBAIC01MywzODQgKzUzLDQ1MSBAQAogIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCiBtc2dzdHIgIiIKICLQndC10LLQvtC30LzQvtC20L3QviDQvtC/0YDQtdC00LXQu9C40YLRjCDQstC10YDRgdC40Y4gR2l0XG4iCisiXG4iCiAiJXMg0YPQutCw0LfRi9Cy0LDQtdGCINC90LAg0LLQtdGA0YHQuNGOICclcycuXG4iCiAiXG4iCiAi0LTQu9GPICVzINGC0YDQtdCx0YPQtdGC0YHRjyDQstC10YDRgdC40Y8gR2l0LCDQvdCw0YfQuNC90LDRjyDRgSAxLjUuMFxuIgogIlxuIgogItCf0YDQuNC90Y/RgtGMICclcycg0LrQsNC6INCy0LXRgNGB0LjRjiAxLjUuMD9cbiIKIAotIzogZ2l0LWd1aS5zaDo5MTgKKyM6IGdpdC1ndWkuc2g6MTA2MgogbXNnaWQgIkdpdCBkaXJlY3Rvcnkgbm90IGZvdW5kOiIKIG1zZ3N0ciAi0JrQsNGC0LDQu9C+0LMgR2l0INC90LUg0L3QsNC50LTQtdC9OiIKIAotIzogZ2l0LWd1aS5zaDo5MjUKKyM6IGdpdC1ndWkuc2g6MTA2OQogbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCiBtc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC/0LXRgNC10LnRgtC4INC6INC60L7RgNC90Y4g0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwINGA0LXQv9C+0LfQuNGC0L7RgNC40Y86ICIKIAotIzogZ2l0LWd1aS5zaDo5MzIKKyM6IGdpdC1ndWkuc2g6MTA3NgogbXNnaWQgIkNhbm5vdCB1c2UgZnVubnkgLmdpdCBkaXJlY3Rvcnk6IgotbXNnc3RyICLQmtCw0YLQsNC70L7Qsy5naXQg0LjRgdC/0L7RgNGH0LXQvTogIgorbXNnc3RyICLQmtCw0YLQsNC70L7QsyAuZ2l0INC40YHQv9C+0YDRh9C10L06ICIKIAotIzogZ2l0LWd1aS5zaDo5MzcKKyM6IGdpdC1ndWkuc2g6MTA4MQogbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgogbXNnc3RyICLQntGC0YHRg9GC0YHRgtCy0YPQtdGCINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIgogCi0jOiBnaXQtZ3VpLnNoOjEwODQgbGliL2NoZWNrb3V0X29wLnRjbDoyODMKKyM6IGdpdC1ndWkuc2g6MTI0NyBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNQogbXNnaWQgIlJlZnJlc2hpbmcgZmlsZSBzdGF0dXMuLi4iCiBtc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QuNC1INC40L3RhNC+0YDQvNCw0YbQuNC4INC+INGB0L7RgdGC0L7Rj9C90LjQuCDRhNCw0LnQu9C+0LIuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MTE0OQorIzogZ2l0LWd1aS5zaDoxMzAzCiBtc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKIG1zZ3N0ciAi0J/QvtC40YHQuiDQuNC30LzQtdC90LXQvdC90YvRhSDRhNCw0LnQu9C+0LIuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MTMyNCBsaWIvYnJvd3Nlci50Y2w6MjQ2CisjOiBnaXQtZ3VpLnNoOjEzNjcKK21zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICLQktGL0LfQvtCyINC/0YDQvtCz0YDQsNC80LzRiyDQv9C+0LTQtNC10YDQttC60Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyBwcmVwYXJlLWNvbW1pdC1tc2cuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTM4NAorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgItCh0L7RhdGA0LDQvdC10L3QuNC1INC/0YDQtdGA0LLQsNC90L4g0L/RgNC+0LPRgNCw0LzQvNC+0Lkg0L/QvtC00LTQtdGA0LbQutC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gcHJlcGFyZS1jb21taXQtbXNnIgorCisjOiBnaXQtZ3VpLnNoOjE1NDIgbGliL2Jyb3dzZXIudGNsOjI0NgogbXNnaWQgIlJlYWR5LiIKIG1zZ3N0ciAi0JPQvtGC0L7QstC+LiIKIAotIzogZ2l0LWd1aS5zaDoxNTkwCisjOiBnaXQtZ3VpLnNoOjE4MTkKIG1zZ2lkICJVbm1vZGlmaWVkIgogbXNnc3RyICLQndC1INC40LfQvNC10L3QtdC90L4iCiAKLSM6IGdpdC1ndWkuc2g6MTU5MgorIzogZ2l0LWd1aS5zaDoxODIxCiBtc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCiBtc2dzdHIgItCY0LfQvNC10L3QtdC90L4sINC90LUg0L/QvtC00LPQvtGC0L7QstC70LXQvdC+IgogCi0jOiBnaXQtZ3VpLnNoOjE1OTMgZ2l0LWd1aS5zaDoxNTk4CisjOiBnaXQtZ3VpLnNoOjE4MjIgZ2l0LWd1aS5zaDoxODMwCiBtc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCiBtc2dzdHIgItCf0L7QtNCz0L7RgtC+0LLQu9C10L3QviDQtNC70Y8g0YHQvtGF0YDQsNC90LXQvdC40Y8iCiAKLSM6IGdpdC1ndWkuc2g6MTU5NCBnaXQtZ3VpLnNoOjE1OTkKKyM6IGdpdC1ndWkuc2g6MTgyMyBnaXQtZ3VpLnNoOjE4MzEKIG1zZ2lkICJQb3J0aW9ucyBzdGFnZWQgZm9yIGNvbW1pdCIKIG1zZ3N0ciAi0KfQsNGB0YLQuCwg0L/QvtC00LPQvtGC0L7QstC70LXQvdC90YvQtSDQtNC70Y8g0YHQvtGF0YDQsNC90LXQvdC40Y8iCiAKLSM6IGdpdC1ndWkuc2g6MTU5NSBnaXQtZ3VpLnNoOjE2MDAKKyM6IGdpdC1ndWkuc2g6MTgyNCBnaXQtZ3VpLnNoOjE4MzIKIG1zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyIKIG1zZ3N0ciAi0J/QvtC00LPQvtGC0L7QstC70LXQvdC+INC00LvRjyDRgdC+0YXRgNCw0L3QtdC90LjRjywg0L7RgtGB0YPRgtGB0YLQstGD0LXRgiIKIAotIzogZ2l0LWd1aS5zaDoxNTk3CisjOiBnaXQtZ3VpLnNoOjE4MjYKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAi0KLQuNC/INGE0LDQudC70LAg0LjQt9C80LXQvdGR0L0sINC90LUg0L/QvtC00LPQvtGC0L7QstC70LXQvdC+IgorCisjOiBnaXQtZ3VpLnNoOjE4MjcKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgorbXNnc3RyICLQotC40L8g0YTQsNC50LvQsCDQuNC30LzQtdC90ZHQvSwg0L/QvtC00LPQvtGC0L7QstC70LXQvdC+IgorCisjOiBnaXQtZ3VpLnNoOjE4MjkKIG1zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCiBtc2dzdHIgItCd0LUg0L7RgtGB0LvQtdC20LjQstCw0LXRgtGB0Y8sINC90LUg0L/QvtC00LPQvtGC0L7QstC70LXQvdC+IgogCi0jOiBnaXQtZ3VpLnNoOjE2MDIKKyM6IGdpdC1ndWkuc2g6MTgzNAogbXNnaWQgIk1pc3NpbmciCiBtc2dzdHIgItCe0YLRgdGD0YLRgdGC0LLRg9C10YIiCiAKLSM6IGdpdC1ndWkuc2g6MTYwMworIzogZ2l0LWd1aS5zaDoxODM1CiBtc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsIgogbXNnc3RyICLQn9C+0LTQs9C+0YLQvtCy0LvQtdC90L4g0LTQu9GPINGD0LTQsNC70LXQvdC40Y8iCiAKLSM6IGdpdC1ndWkuc2g6MTYwNAorIzogZ2l0LWd1aS5zaDoxODM2CiBtc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgogbXNnc3RyICLQn9C+0LTQs9C+0YLQvtCy0LvQtdC90L4g0LTQu9GPINGD0LTQsNC70LXQvdC40Y8sINC10YnQtSDQvdC1INGD0LTQsNC70LXQvdC+IgogCi0jOiBnaXQtZ3VpLnNoOjE2MDYgZ2l0LWd1aS5zaDoxNjA3IGdpdC1ndWkuc2g6MTYwOCBnaXQtZ3VpLnNoOjE2MDkKKyM6IGdpdC1ndWkuc2g6MTgzOCBnaXQtZ3VpLnNoOjE4MzkgZ2l0LWd1aS5zaDoxODQwIGdpdC1ndWkuc2g6MTg0MQorIzogZ2l0LWd1aS5zaDoxODQyIGdpdC1ndWkuc2g6MTg0MwogbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCi1tc2dzdHIgItCi0YDQtdCx0YPQtdGC0YHRjyDRgNCw0LfRgNC10YjQtdC90LjQtSDQutC+0L3RhNC70LjQutGC0LAg0L/RgNC4INC+0LHRitC10LTQuNC90LXQvdC40LgiCittc2dzdHIgItCi0YDQtdCx0YPQtdGC0YHRjyDRgNCw0LfRgNC10YjQtdC90LjQtSDQutC+0L3RhNC70LjQutGC0LAg0L/RgNC4INGB0LvQuNGP0L3QuNC4IgogCi0jOiBnaXQtZ3VpLnNoOjE2NDQKKyM6IGdpdC1ndWkuc2g6MTg3OAogbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCi1tc2dzdHIgItCX0LDQv9GD0YHQutCw0LXRgtGB0Y8gZ2l0ay4uLiDQv9C+0LbQsNC70YPQudGB0YLQsCwg0LbQtNC40YLQtS4uLiIKK21zZ3N0ciAi0JfQsNC/0YPRgdC60LDQtdGC0YHRjyBnaXRrLi4uINCf0L7QtNC+0LbQtNC40YLQtSwg0L/QvtC20LDQu9GD0LnRgdGC0LAuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MTY1MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJVbmFibGUgdG8gc3RhcnQgZ2l0azpcbiIKLSJcbiIKLSIlcyBkb2VzIG5vdCBleGlzdCIKLW1zZ3N0ciAiIgotItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0YPRgdGC0LjRgtGMIGdpdGs6XG4iCi0iXG4iCi0iJXMg0L3QtSDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKyM6IGdpdC1ndWkuc2g6MTg4NworbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgorbXNnc3RyICJnaXRrINC90LUg0L3QsNC50LTQtdC9INCyIFBBVEguIgogCi0jOiBnaXQtZ3VpLnNoOjE4NjAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNgorIzogZ2l0LWd1aS5zaDoyMjgwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKIG1zZ2lkICJSZXBvc2l0b3J5IgogbXNnc3RyICLQoNC10L/QvtC30LjRgtC+0YDQuNC5IgogCi0jOiBnaXQtZ3VpLnNoOjE4NjEKKyM6IGdpdC1ndWkuc2g6MjI4MQogbXNnaWQgIkVkaXQiCiBtc2dzdHIgItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMIgogCi0jOiBnaXQtZ3VpLnNoOjE4NjMgbGliL2Nob29zZV9yZXYudGNsOjU2MQorIzogZ2l0LWd1aS5zaDoyMjgzIGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKIG1zZ2lkICJCcmFuY2giCiBtc2dzdHIgItCS0LXRgtCy0YwiCiAKLSM6IGdpdC1ndWkuc2g6MTg2NiBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ4CisjOiBnaXQtZ3VpLnNoOjIyODYgbGliL2Nob29zZV9yZXYudGNsOjU0OAogbXNnaWQgIkNvbW1pdEBAbm91biIKIG1zZ3N0ciAi0KHQvtGB0YLQvtGP0L3QuNC1IgogCi0jOiBnaXQtZ3VpLnNoOjE4NjkgbGliL21lcmdlLnRjbDoxMjAgbGliL21lcmdlLnRjbDoxNDkgbGliL21lcmdlLnRjbDoxNjcKKyM6IGdpdC1ndWkuc2g6MjI4OSBsaWIvbWVyZ2UudGNsOjEyMSBsaWIvbWVyZ2UudGNsOjE1MCBsaWIvbWVyZ2UudGNsOjE2OAogbXNnaWQgIk1lcmdlIgotbXNnc3RyICLQntCx0YrQtdC00LjQvdC40YLRjCIKK21zZ3N0ciAi0KHQu9C40Y/QvdC40LUiCiAKLSM6IGdpdC1ndWkuc2g6MTg3MCBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3CisjOiBnaXQtZ3VpLnNoOjIyOTAgbGliL2Nob29zZV9yZXYudGNsOjU1NwogbXNnaWQgIlJlbW90ZSIKIG1zZ3N0ciAi0JLQvdC10YjQvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKIAotIzogZ2l0LWd1aS5zaDoxODc5CisjOiBnaXQtZ3VpLnNoOjIyOTMKK21zZ2lkICJUb29scyIKK21zZ3N0ciAi0JLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3Ri9C1INC+0L/QtdGA0LDRhtC40LgiCisKKyM6IGdpdC1ndWkuc2g6MjMwMgorbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgorbXNnc3RyICLQn9GA0L7RgdC80L7RgtGAINGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogZ2l0LWd1aS5zaDoyMzA3CiBtc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCiBtc2dzdHIgItCf0YDQvtGB0LzQvtGC0YDQtdGC0Ywg0YTQsNC50LvRiyDRgtC10LrRg9GJ0LXQuSDQstC10YLQstC4IgogCi0jOiBnaXQtZ3VpLnNoOjE4ODMKKyM6IGdpdC1ndWkuc2g6MjMxMQogbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCiBtc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0YTQsNC50LvRiyDQstC10YLQstC4Li4uIgogCi0jOiBnaXQtZ3VpLnNoOjE4ODgKKyM6IGdpdC1ndWkuc2g6MjMxNgogbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCdzIEhpc3RvcnkiCi1tc2dzdHIgItCY0YHRgtC+0YDQuNGPINGC0LXQutGD0YnQtdC5INCy0LXRgtCy0Lgg0L3QsNCz0LvRj9C00L3QviIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQuNGB0YLQvtGA0LjRjiDRgtC10LrRg9GJ0LXQuSDQstC10YLQstC4IgogCi0jOiBnaXQtZ3VpLnNoOjE4OTIKKyM6IGdpdC1ndWkuc2g6MjMyMAogbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCi1tc2dzdHIgItCY0YHRgtC+0YDQuNGPINCy0YHQtdGFINCy0LXRgtCy0LXQuSDQvdCw0LPQu9GP0LTQvdC+IgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGOINCy0YHQtdGFINCy0LXRgtCy0LXQuSIKIAotIzogZ2l0LWd1aS5zaDoxODk5CisjOiBnaXQtZ3VpLnNoOjIzMjcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKIG1zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDRhNCw0LnQu9GLINCy0LXRgtCy0LggJXMiCiAKLSM6IGdpdC1ndWkuc2g6MTkwMQorIzogZ2l0LWd1aS5zaDoyMzI5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKLW1zZ3N0ciAi0JjRgdGC0L7RgNC40Y8g0LLQtdGC0LLQuCAlcyDQvdCw0LPQu9GP0LTQvdC+IgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGOINCy0LXRgtCy0LggJXMiCiAKLSM6IGdpdC1ndWkuc2g6MTkwNiBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKKyM6IGdpdC1ndWkuc2g6MjMzNCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKIG1zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgogbXNnc3RyICLQodGC0LDRgtC40YHRgtC40LrQsCDQsdCw0LfRiyDQtNCw0L3QvdGL0YUiCiAKLSM6IGdpdC1ndWkuc2g6MTkwOSBsaWIvZGF0YWJhc2UudGNsOjM0CisjOiBnaXQtZ3VpLnNoOjIzMzcgbGliL2RhdGFiYXNlLnRjbDozNAogbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgogbXNnc3RyICLQodC20LDRgtGMINCx0LDQt9GDINC00LDQvdC90YvRhSIKIAotIzogZ2l0LWd1aS5zaDoxOTEyCisjOiBnaXQtZ3VpLnNoOjIzNDAKIG1zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCiBtc2dzdHIgItCf0YDQvtCy0LXRgNC40YLRjCDQsdCw0LfRgyDQtNCw0L3QvdGL0YUiCiAKLSM6IGdpdC1ndWkuc2g6MTkxOSBnaXQtZ3VpLnNoOjE5MjMgZ2l0LWd1aS5zaDoxOTI3IGxpYi9zaG9ydGN1dC50Y2w6NworIzogZ2l0LWd1aS5zaDoyMzQ3IGdpdC1ndWkuc2g6MjM1MSBnaXQtZ3VpLnNoOjIzNTUgbGliL3Nob3J0Y3V0LnRjbDo3CiAjOiBsaWIvc2hvcnRjdXQudGNsOjM5IGxpYi9zaG9ydGN1dC50Y2w6NzEKIG1zZ2lkICJDcmVhdGUgRGVza3RvcCBJY29uIgogbXNnc3RyICLQodC+0LfQtNCw0YLRjCDRj9GA0LvRi9C6INC90LAg0YDQsNCx0L7Rh9C10Lwg0YHRgtC+0LvQtSIKIAotIzogZ2l0LWd1aS5zaDoxOTMyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTc3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTg1CisjOiBnaXQtZ3VpLnNoOjIzNjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTEKIG1zZ2lkICJRdWl0IgogbXNnc3RyICLQktGL0YXQvtC0IgogCi0jOiBnaXQtZ3VpLnNoOjE5MzkKKyM6IGdpdC1ndWkuc2g6MjM3MQogbXNnaWQgIlVuZG8iCiBtc2dzdHIgItCe0YLQvNC10L3QuNGC0YwiCiAKLSM6IGdpdC1ndWkuc2g6MTk0MgorIzogZ2l0LWd1aS5zaDoyMzc0CiBtc2dpZCAiUmVkbyIKIG1zZ3N0ciAi0J/QvtCy0YLQvtGA0LjRgtGMIgogCi0jOiBnaXQtZ3VpLnNoOjE5NDYgZ2l0LWd1aS5zaDoyNDQzCisjOiBnaXQtZ3VpLnNoOjIzNzggZ2l0LWd1aS5zaDoyOTM3CiBtc2dpZCAiQ3V0IgogbXNnc3RyICLQktGL0YDQtdC30LDRgtGMIgogCi0jOiBnaXQtZ3VpLnNoOjE5NDkgZ2l0LWd1aS5zaDoyNDQ2IGdpdC1ndWkuc2g6MjUyMCBnaXQtZ3VpLnNoOjI2MTQKKyM6IGdpdC1ndWkuc2g6MjM4MSBnaXQtZ3VpLnNoOjI5NDAgZ2l0LWd1aS5zaDozMDE0IGdpdC1ndWkuc2g6MzA5NgogIzogbGliL2NvbnNvbGUudGNsOjY5CiBtc2dpZCAiQ29weSIKIG1zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNGC0YwiCiAKLSM6IGdpdC1ndWkuc2g6MTk1MiBnaXQtZ3VpLnNoOjI0NDkKKyM6IGdpdC1ndWkuc2g6MjM4NCBnaXQtZ3VpLnNoOjI5NDMKIG1zZ2lkICJQYXN0ZSIKIG1zZ3N0ciAi0JLRgdGC0LDQstC40YLRjCIKIAotIzogZ2l0LWd1aS5zaDoxOTU1IGdpdC1ndWkuc2g6MjQ1MiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjYKKyM6IGdpdC1ndWkuc2g6MjM4NyBnaXQtZ3VpLnNoOjI5NDYgbGliL2JyYW5jaF9kZWxldGUudGNsOjI2CiAjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM4CiBtc2dpZCAiRGVsZXRlIgogbXNnc3RyICLQo9C00LDQu9C40YLRjCIKIAotIzogZ2l0LWd1aS5zaDoxOTU5IGdpdC1ndWkuc2g6MjQ1NiBnaXQtZ3VpLnNoOjI2MTggbGliL2NvbnNvbGUudGNsOjcxCisjOiBnaXQtZ3VpLnNoOjIzOTEgZ2l0LWd1aS5zaDoyOTUwIGdpdC1ndWkuc2g6MzEwMCBsaWIvY29uc29sZS50Y2w6NzEKIG1zZ2lkICJTZWxlY3QgQWxsIgogbXNnc3RyICLQktGL0LTQtdC70LjRgtGMINCy0YHQtSIKIAotIzogZ2l0LWd1aS5zaDoxOTY4CisjOiBnaXQtZ3VpLnNoOjI0MDAKIG1zZ2lkICJDcmVhdGUuLi4iCiBtc2dzdHIgItCh0L7Qt9C00LDRgtGMLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjE5NzQKKyM6IGdpdC1ndWkuc2g6MjQwNgogbXNnaWQgIkNoZWNrb3V0Li4uIgogbXNnc3RyICLQn9C10YDQtdC50YLQuC4uLiIKIAotIzogZ2l0LWd1aS5zaDoxOTgwCisjOiBnaXQtZ3VpLnNoOjI0MTIKIG1zZ2lkICJSZW5hbWUuLi4iCiBtc2dzdHIgItCf0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjE5ODUgZ2l0LWd1aS5zaDoyMDg1CisjOiBnaXQtZ3VpLnNoOjI0MTcKIG1zZ2lkICJEZWxldGUuLi4iCiBtc2dzdHIgItCj0LTQsNC70LjRgtGMLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjE5OTAKKyM6IGdpdC1ndWkuc2g6MjQyMgogbXNnaWQgIlJlc2V0Li4uIgogbXNnc3RyICLQodCx0YDQvtGB0LjRgtGMLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjIwMDIgZ2l0LWd1aS5zaDoyMzg5Ci1tc2dpZCAiTmV3IENvbW1pdCIKLW1zZ3N0ciAi0J3QvtCy0L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUiCisjOiBnaXQtZ3VpLnNoOjI0MzIKK21zZ2lkICJEb25lIgorbXNnc3RyICLQl9Cw0LLQtdGA0YjQtdC90L4iCiAKLSM6IGdpdC1ndWkuc2g6MjAxMCBnaXQtZ3VpLnNoOjIzOTYKLW1zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKLW1zZ3N0ciAi0JjRgdC/0YDQsNCy0LjRgtGMINC/0L7RgdC70LXQtNC90LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUiCi0KLSM6IGdpdC1ndWkuc2g6MjAxOSBnaXQtZ3VpLnNoOjIzNTYgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQotbXNnaWQgIlJlc2NhbiIKLW1zZ3N0ciAi0J/QtdGA0LXRh9C40YLQsNGC0YwiCi0KLSM6IGdpdC1ndWkuc2g6MjAyNQotbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKLW1zZ3N0ciAi0J/QvtC00LPQvtGC0L7QstC40YLRjCDQtNC70Y8g0YHQvtGF0YDQsNC90LXQvdC40Y8iCi0KLSM6IGdpdC1ndWkuc2g6MjAzMQotbXNnaWQgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0IgotbXNnc3RyICLQn9C+0LTQs9C+0YLQvtCy0LjRgtGMINC40LfQvNC10L3QtdC90L3Ri9C1INGE0LDQudC70Ysg0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPIgotCi0jOiBnaXQtZ3VpLnNoOjIwMzcKLW1zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgotbXNnc3RyICLQo9Cx0YDQsNGC0Ywg0LjQtyDQv9C+0LTQs9C+0YLQvtCy0LvQtdC90L3QvtCz0L4iCi0KLSM6IGdpdC1ndWkuc2g6MjA0MiBsaWIvaW5kZXgudGNsOjM5NQotbXNnaWQgIlJldmVydCBDaGFuZ2VzIgotbXNnc3RyICLQntGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyIKLQotIzogZ2l0LWd1aS5zaDoyMDQ5IGdpdC1ndWkuc2g6MjM2OCBnaXQtZ3VpLnNoOjI0NjcKLW1zZ2lkICJTaWduIE9mZiIKLW1zZ3N0ciAi0J/QvtC00L/QuNGB0LDRgtGMIgotCi0jOiBnaXQtZ3VpLnNoOjIwNTMgZ2l0LWd1aS5zaDoyMzcyCisjOiBnaXQtZ3VpLnNoOjI0MzQKIG1zZ2lkICJDb21taXRAQHZlcmIiCiBtc2dzdHIgItCh0L7RhdGA0LDQvdC40YLRjCIKIAotIzogZ2l0LWd1aS5zaDoyMDY0CisjOiBnaXQtZ3VpLnNoOjI0NDMgZ2l0LWd1aS5zaDoyODc4Cittc2dpZCAiTmV3IENvbW1pdCIKK21zZ3N0ciAi0J3QvtCy0L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUiCisKKyM6IGdpdC1ndWkuc2g6MjQ1MSBnaXQtZ3VpLnNoOjI4ODUKK21zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKK21zZ3N0ciAi0JjRgdC/0YDQsNCy0LjRgtGMINC/0L7RgdC70LXQtNC90LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUiCisKKyM6IGdpdC1ndWkuc2g6MjQ2MSBnaXQtZ3VpLnNoOjI4MzkgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQorbXNnaWQgIlJlc2NhbiIKK21zZ3N0ciAi0J/QtdGA0LXRh9C40YLQsNGC0YwiCisKKyM6IGdpdC1ndWkuc2g6MjQ2NworbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKK21zZ3N0ciAi0J/QvtC00LPQvtGC0L7QstC40YLRjCDQtNC70Y8g0YHQvtGF0YDQsNC90LXQvdC40Y8iCisKKyM6IGdpdC1ndWkuc2g6MjQ3MworbXNnaWQgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0IgorbXNnc3RyICLQn9C+0LTQs9C+0YLQvtCy0LjRgtGMINC40LfQvNC10L3QtdC90L3Ri9C1INGE0LDQudC70Ysg0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPIgorCisjOiBnaXQtZ3VpLnNoOjI0NzkKK21zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgorbXNnc3RyICLQo9Cx0YDQsNGC0Ywg0LjQtyDQv9C+0LTQs9C+0YLQvtCy0LvQtdC90L3QvtCz0L4iCisKKyM6IGdpdC1ndWkuc2g6MjQ4NCBsaWIvaW5kZXgudGNsOjQxMAorbXNnaWQgIlJldmVydCBDaGFuZ2VzIgorbXNnc3RyICLQntGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyIKKworIzogZ2l0LWd1aS5zaDoyNDkxIGdpdC1ndWkuc2g6MzA4MworbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgorbXNnc3RyICLQnNC10L3RjNGI0LUg0LrQvtC90YLQtdC60YHRgtCwIgorCisjOiBnaXQtZ3VpLnNoOjI0OTUgZ2l0LWd1aS5zaDozMDg3Cittc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCittc2dzdHIgItCR0L7Qu9GM0YjQtSDQutC+0L3RgtC10LrRgdGC0LAiCisKKyM6IGdpdC1ndWkuc2g6MjUwMiBnaXQtZ3VpLnNoOjI4NTIgZ2l0LWd1aS5zaDoyOTYxCittc2dpZCAiU2lnbiBPZmYiCittc2dzdHIgItCS0YHRgtCw0LLQuNGC0YwgU2lnbmVkLW9mZi1ieSIKKworIzogZ2l0LWd1aS5zaDoyNTE4CiBtc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCi1tc2dzdHIgItCb0L7QutCw0LvRjNC90L7QtSDQvtCx0YrQtdC00LjQvdC10L3QuNC1Li4uIgorbXNnc3RyICLQm9C+0LrQsNC70YzQvdC+0LUg0YHQu9C40Y/QvdC40LUuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjA2OQorIzogZ2l0LWd1aS5zaDoyNTIzCiBtc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCi1tc2dzdHIgItCf0YDQtdGA0LLQsNGC0Ywg0L7QsdGK0LXQtNC40L3QtdC90LjQtS4uLiIKK21zZ3N0ciAi0J/RgNC10YDQstCw0YLRjCDRgdC70LjRj9C90LjQtS4uLiIKIAotIzogZ2l0LWd1aS5zaDoyMDgxCisjOiBnaXQtZ3VpLnNoOjI1MzUgZ2l0LWd1aS5zaDoyNTc1Cittc2dpZCAiQWRkLi4uIgorbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1MzkKIG1zZ2lkICJQdXNoLi4uIgogbXNnc3RyICLQntGC0L/RgNCw0LLQuNGC0YwuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjA5MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxCi1tc2dpZCAiQXBwbGUiCi1tc2dzdHIgIiIKKyM6IGdpdC1ndWkuc2g6MjU0MworbXNnaWQgIkRlbGV0ZSBCcmFuY2guLi4iCittc2dzdHIgItCj0LTQsNC70LjRgtGMINCy0LXRgtCy0YwuLi4iCiAKLSM6IGdpdC1ndWkuc2g6MjA5NSBnaXQtZ3VpLnNoOjIxMTcgbGliL2Fib3V0LnRjbDoxNAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwCisjOiBnaXQtZ3VpLnNoOjI1NTMgZ2l0LWd1aS5zaDoyNTg5IGxpYi9hYm91dC50Y2w6MTQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkFib3V0ICVzIgogbXNnc3RyICLQniAlcyIKIAotIzogZ2l0LWd1aS5zaDoyMDk5CisjOiBnaXQtZ3VpLnNoOjI1NTcKIG1zZ2lkICJQcmVmZXJlbmNlcy4uLiIKIG1zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4Li4uIgogCi0jOiBnaXQtZ3VpLnNoOjIxMDcgZ2l0LWd1aS5zaDoyNjM5CisjOiBnaXQtZ3VpLnNoOjI1NjUgZ2l0LWd1aS5zaDozMTI5CiBtc2dpZCAiT3B0aW9ucy4uLiIKIG1zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4Li4uIgogCi0jOiBnaXQtZ3VpLnNoOjIxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NworIzogZ2l0LWd1aS5zaDoyNTc2Cittc2dpZCAiUmVtb3ZlLi4uIgorbXNnc3RyICLQo9C00LDQu9C40YLRjC4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTg1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKIG1zZ2lkICJIZWxwIgogbXNnc3RyICLQn9C+0LzQvtGJ0YwiCiAKLSM6IGdpdC1ndWkuc2g6MjE1NAorIzogZ2l0LWd1aS5zaDoyNjExCiBtc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCiBtc2dzdHIgItCU0L7QutGD0LzQtdC90YLQsNGG0LjRjyDQsiDQuNC90YLQtdGA0L3QtdGC0LUiCiAKLSM6IGdpdC1ndWkuc2g6MjIzOAorIzogZ2l0LWd1aS5zaDoyNjE0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NgorbXNnaWQgIlNob3cgU1NIIEtleSIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQutC70Y7RhyBTU0giCisKKyM6IGdpdC1ndWkuc2g6MjcyMQogIywgdGNsLWZvcm1hdAogbXNnaWQgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgogbXNnc3RyICLQutGA0LjRgtC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsDogJXM6INC90LXRgiDRgtCw0LrQvtCz0L4g0YTQsNC50LvQsCDQuNC70Lgg0LrQsNGC0LDQu9C+0LPQsCIKIAotIzogZ2l0LWd1aS5zaDoyMjcxCisjOiBnaXQtZ3VpLnNoOjI3NTQKIG1zZ2lkICJDdXJyZW50IEJyYW5jaDoiCiBtc2dzdHIgItCi0LXQutGD0YnQsNGPINCy0LXRgtCy0Yw6IgogCi0jOiBnaXQtZ3VpLnNoOjIyOTIKKyM6IGdpdC1ndWkuc2g6Mjc3NQogbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCiBtc2dzdHIgItCf0L7QtNCz0L7RgtC+0LLQu9C10L3QviAo0LHRg9C00LXRgiDRgdC+0YXRgNCw0L3QtdC90L4pIgogCi0jOiBnaXQtZ3VpLnNoOjIzMTIKKyM6IGdpdC1ndWkuc2g6Mjc5NQogbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCiBtc2dzdHIgItCY0LfQvNC10L3QtdC90L4gKNC90LUg0LHRg9C00LXRgiDRgdC+0YXRgNCw0L3QtdC90L4pIgogCi0jOiBnaXQtZ3VpLnNoOjIzNjIKKyM6IGdpdC1ndWkuc2g6Mjg0NQogbXNnaWQgIlN0YWdlIENoYW5nZWQiCiBtc2dzdHIgItCf0L7QtNCz0L7RgtC+0LLQuNGC0Ywg0LLRgdC1IgogCi0jOiBnaXQtZ3VpLnNoOjIzNzggbGliL3RyYW5zcG9ydC50Y2w6OTMgbGliL3RyYW5zcG9ydC50Y2w6MTgyCisjOiBnaXQtZ3VpLnNoOjI4NjQgbGliL3RyYW5zcG9ydC50Y2w6MTA0IGxpYi90cmFuc3BvcnQudGNsOjE5MwogbXNnaWQgIlB1c2giCiBtc2dzdHIgItCe0YLQv9GA0LDQstC40YLRjCIKIAotIzogZ2l0LWd1aS5zaDoyNDA4CisjOiBnaXQtZ3VpLnNoOjI4OTkKIG1zZ2lkICJJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAi0JrQvtC80LzQtdC90YLQsNGA0LjQuSDQuiDQv9C10YDQstC+0LzRgyDRgdC+0YHRgtC+0Y/QvdC40Y46IgogCi0jOiBnaXQtZ3VpLnNoOjI0MDkKKyM6IGdpdC1ndWkuc2g6MjkwMAogbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgogbXNnc3RyICLQmtC+0LzQvNC10L3RgtCw0YDQuNC5INC6INC40YHQv9GA0LDQstC70LXQvdC90L7QvNGDINGB0L7RgdGC0L7Rj9C90LjRjjoiCiAKLSM6IGdpdC1ndWkuc2g6MjQxMAorIzogZ2l0LWd1aS5zaDoyOTAxCiBtc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKIG1zZ3N0ciAi0JrQvtC80LzQtdC90YLQsNGA0LjQuSDQuiDQuNGB0L/RgNCw0LLQu9C10L3QvdC+0LzRgyDQv9C10YDQstC+0L3QsNGH0LDQu9GM0L3QvtC80YMg0YHQvtGB0YLQvtGP0L3QuNGOOiIKIAotIzogZ2l0LWd1aS5zaDoyNDExCisjOiBnaXQtZ3VpLnNoOjI5MDIKIG1zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAi0JrQvtC80LzQtdC90YLQsNGA0LjQuSDQuiDQuNGB0L/RgNCw0LLQu9C10L3QvdC+0LzRgyDQvtCx0YrQtdC00LjQvdC10L3QuNGOOiIKK21zZ3N0ciAi0JrQvtC80LzQtdC90YLQsNGA0LjQuSDQuiDQuNGB0L/RgNCw0LLQu9C10L3QvdC+0LzRgyDRgdC70LjRj9C90LjRjjoiCiAKLSM6IGdpdC1ndWkuc2g6MjQxMgorIzogZ2l0LWd1aS5zaDoyOTAzCiBtc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICLQmtC+0LzQvNC10L3RgtCw0YDQuNC5INC6INC+0LHRitC10LTQuNC90LXQvdC40Y46IgorbXNnc3RyICLQmtC+0LzQvNC10L3RgtCw0YDQuNC5INC6INGB0LvQuNGP0L3QuNGOOiIKIAotIzogZ2l0LWd1aS5zaDoyNDEzCisjOiBnaXQtZ3VpLnNoOjI5MDQKIG1zZ2lkICJDb21taXQgTWVzc2FnZToiCiBtc2dzdHIgItCa0L7QvNC80LXQvdGC0LDRgNC40Lkg0Log0YHQvtGB0YLQvtGP0L3QuNGOOiIKIAotIzogZ2l0LWd1aS5zaDoyNDU5IGdpdC1ndWkuc2g6MjYyMiBsaWIvY29uc29sZS50Y2w6NzMKKyM6IGdpdC1ndWkuc2g6Mjk1MyBnaXQtZ3VpLnNoOjMxMDQgbGliL2NvbnNvbGUudGNsOjczCiBtc2dpZCAiQ29weSBBbGwiCiBtc2dzdHIgItCa0L7Qv9C40YDQvtCy0LDRgtGMINCy0YHQtSIKIAotIzogZ2l0LWd1aS5zaDoyNDgzIGxpYi9ibGFtZS50Y2w6MTA3CisjOiBnaXQtZ3VpLnNoOjI5NzcgbGliL2JsYW1lLnRjbDoxMDQKIG1zZ2lkICJGaWxlOiIKIG1zZ3N0ciAi0KTQsNC50Ls6IgogCi0jOiBnaXQtZ3VpLnNoOjI1ODkKLW1zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCi1tc2dzdHIgItCf0YDQuNC80LXQvdC40YLRjC/Qo9Cx0YDQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNC1IgotCi0jOiBnaXQtZ3VpLnNoOjI1OTUKLW1zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKLW1zZ3N0ciAi0JzQtdC90YzRiNC1INC60L7QvdGC0LXQutGB0YLQsCIKLQotIzogZ2l0LWd1aS5zaDoyNjAyCi1tc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCi1tc2dzdHIgItCR0L7Qu9GM0YjQtSDQutC+0L3RgtC10LrRgdGC0LAiCi0KLSM6IGdpdC1ndWkuc2g6MjYxMAorIzogZ2l0LWd1aS5zaDozMDkyCiBtc2dpZCAiUmVmcmVzaCIKIG1zZ3N0ciAi0J7QsdC90L7QstC40YLRjCIKIAotIzogZ2l0LWd1aS5zaDoyNjMxCisjOiBnaXQtZ3VpLnNoOjMxMTMKIG1zZ2lkICJEZWNyZWFzZSBGb250IFNpemUiCiBtc2dzdHIgItCj0LzQtdC90YzRiNC40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgogCi0jOiBnaXQtZ3VpLnNoOjI2MzUKKyM6IGdpdC1ndWkuc2g6MzExNwogbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKIG1zZ3N0ciAi0KPQstC10LvQuNGH0LjRgtGMINGA0LDQt9C80LXRgCDRiNGA0LjRhNGC0LAiCiAKLSM6IGdpdC1ndWkuc2g6MjY0NgorIzogZ2l0LWd1aS5zaDozMTI1IGxpYi9ibGFtZS50Y2w6MjgxCittc2dpZCAiRW5jb2RpbmciCittc2dzdHIgItCa0L7QtNC40YDQvtCy0LrQsCIKKworIzogZ2l0LWd1aS5zaDozMTM2Cittc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgorbXNnc3RyICLQn9GA0LjQvNC10L3QuNGC0Ywv0KPQsdGA0LDRgtGMINC40LfQvNC10L3QtdC90LjQtSIKKworIzogZ2l0LWd1aS5zaDozMTQxCittc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgorbXNnc3RyICLQn9GA0LjQvNC10L3QuNGC0Ywv0KPQsdGA0LDRgtGMINGB0YLRgNC+0LrRgyIKKworIzogZ2l0LWd1aS5zaDozMTUxCittc2dpZCAiUnVuIE1lcmdlIFRvb2wiCittc2dzdHIgItCX0LDQv9GD0YHRgtC40YLRjCDQv9GA0L7Qs9GA0LDQvNC80YMg0YHQu9C40Y/QvdC40Y8iCisKKyM6IGdpdC1ndWkuc2g6MzE1NgorbXNnaWQgIlVzZSBSZW1vdGUgVmVyc2lvbiIKK21zZ3N0ciAi0JLQt9GP0YLRjCDQstC90LXRiNC90Y7RjiDQstC10YDRgdC40Y4iCisKKyM6IGdpdC1ndWkuc2g6MzE2MAorbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgorbXNnc3RyICLQktC30Y/RgtGMINC70L7QutCw0LvRjNC90YPRjiDQstC10YDRgdC40Y4iCisKKyM6IGdpdC1ndWkuc2g6MzE2NAorbXNnaWQgIlJldmVydCBUbyBCYXNlIgorbXNnc3RyICLQntGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyIKKworIzogZ2l0LWd1aS5zaDozMTgzCiBtc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgogbXNnc3RyICLQndC1INGB0L7RhdGA0LDQvdGP0YLRjCDRh9Cw0YHRgtGMIgogCi0jOiBnaXQtZ3VpLnNoOjI2NDgKKyM6IGdpdC1ndWkuc2g6MzE4NAorbXNnaWQgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAi0KPQsdGA0LDRgtGMINGB0YLRgNC+0LrRgyDQuNC3INC/0L7QtNCz0L7RgtC+0LLQu9C10L3QvdC+0LPQviIKKworIzogZ2l0LWd1aS5zaDozMTg2CiBtc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgogbXNnc3RyICLQn9C+0LTQs9C+0YLQvtCy0LjRgtGMINGH0LDRgdGC0Ywg0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPIgogCi0jOiBnaXQtZ3VpLnNoOjI2NjcKKyM6IGdpdC1ndWkuc2g6MzE4NworbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKK21zZ3N0ciAi0J/QvtC00LPQvtGC0L7QstC40YLRjCDRgdGC0YDQvtC60YMg0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPIgorCisjOiBnaXQtZ3VpLnNoOjMyMTAKIG1zZ2lkICJJbml0aWFsaXppbmcuLi4iCiBtc2dzdHIgItCY0L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGPLi4uIgogCi0jOiBnaXQtZ3VpLnNoOjI3NjIKKyM6IGdpdC1ndWkuc2g6MzMxNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJQb3NzaWJsZSBlbnZpcm9ubWVudCBpc3N1ZXMgZXhpc3QuXG4iCkBAIC00NDcsNyArNTE0LDcgQEAKICLQt9Cw0L/Rg9GJ0LXQvdC90YvQvNC4INC40LcgJXNcbiIKICJcbiIKIAotIzogZ2l0LWd1aS5zaDoyNzkyCisjOiBnaXQtZ3VpLnNoOjMzNDUKIG1zZ2lkICIiCiAiXG4iCiAiVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgpAQCAtNDU3LDcgKzUyNCw3IEBACiAi0K3RgtC+INC40LfQstC10YHRgtC90LDRjyDQv9GA0L7QsdC70LXQvNCwINGBIFRjbCxcbiIKICLRgNCw0YHQv9GA0L7RgdGC0YDQsNC90Y/QtdC80YvQvCBDeWd3aW4uIgogCi0jOiBnaXQtZ3VpLnNoOjI3OTcKKyM6IGdpdC1ndWkuc2g6MzM1MAogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJcbiIKQEAgLTQ3OCw2NCArNTQ1LDEwOCBAQAogbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKIG1zZ3N0ciAiZ2l0LWd1aSAtINCz0YDQsNGE0LjRh9C10YHQutC40Lkg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0YHQutC40Lkg0LjQvdGC0LXRgNGE0LXQudGBINC6IEdpdC4iCiAKLSM6IGxpYi9ibGFtZS50Y2w6NzcKKyM6IGxpYi9ibGFtZS50Y2w6NzIKIG1zZ2lkICJGaWxlIFZpZXdlciIKIG1zZ3N0ciAi0J/RgNC+0YHQvNC+0YLRgCDRhNCw0LnQu9CwIgogCi0jOiBsaWIvYmxhbWUudGNsOjgxCisjOiBsaWIvYmxhbWUudGNsOjc4CiBtc2dpZCAiQ29tbWl0OiIKIG1zZ3N0ciAi0KHQvtGF0YDQsNC90LXQvdC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LU6IgogCi0jOiBsaWIvYmxhbWUudGNsOjI2NAorIzogbGliL2JsYW1lLnRjbDoyNzEKIG1zZ2lkICJDb3B5IENvbW1pdCIKIG1zZ3N0ciAi0KHQutC+0L/QuNGA0L7QstCw0YLRjCBTSEEtMSIKIAotIzogbGliL2JsYW1lLnRjbDozODQKKyM6IGxpYi9ibGFtZS50Y2w6Mjc1Cittc2dpZCAiRmluZCBUZXh0Li4uIgorbXNnc3RyICLQndCw0LnRgtC4INGC0LXQutGB0YIuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg0Cittc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKK21zZ3N0ciAi0J/RgNC+0LLQtdGB0YLQuCDQv9C+0LvQvdGL0Lkg0L/QvtC40YHQuiDQutC+0L/QuNC5IgorCisjOiBsaWIvYmxhbWUudGNsOjI4OAorbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGH0LXRgdC60LjQuSDQutC+0L3RgtC10LrRgdGCIgorCisjOiBsaWIvYmxhbWUudGNsOjI5MQorbXNnaWQgIkJsYW1lIFBhcmVudCBDb21taXQiCittc2dzdHIgItCg0LDRgdGB0LzQvtGC0YDQtdGC0Ywg0YHQvtGB0YLQvtGP0L3QuNC1INC/0YDQtdC00LrQsCIKKworIzogbGliL2JsYW1lLnRjbDo0NTAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZWFkaW5nICVzLi4uIgogbXNnc3RyICLQp9GC0LXQvdC40LUgJXMuLi4iCiAKLSM6IGxpYi9ibGFtZS50Y2w6NDg4CisjOiBsaWIvYmxhbWUudGNsOjU1NwogbXNnaWQgIkxvYWRpbmcgY29weS9tb3ZlIHRyYWNraW5nIGFubm90YXRpb25zLi4uIgogbXNnc3RyICLQl9Cw0LPRgNGD0LfQutCwINCw0L3QvdC+0YLQsNGG0LjQuCDQutC+0L/QuNGA0L7QstCw0L3QuNC5L9C/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40LkuLi4iCiAKLSM6IGxpYi9ibGFtZS50Y2w6NTA4CisjOiBsaWIvYmxhbWUudGNsOjU3NwogbXNnaWQgImxpbmVzIGFubm90YXRlZCIKIG1zZ3N0ciAi0YHRgtGA0L7QuiDQv9GA0L7QutC+0LzQvNC10L3RgtC40YDQvtCy0LDQvdC+IgogCi0jOiBsaWIvYmxhbWUudGNsOjY4OQorIzogbGliL2JsYW1lLnRjbDo3NjkKIG1zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgogbXNnc3RyICLQl9Cw0LPRgNGD0LfQutCwINCw0L3QvdC+0YLQsNGG0LjQuSDQv9C10YDQstC+0L3QsNGH0LDQu9GM0L3QvtCz0L4g0L/QvtC70L7QttC10L3QuNGPINC+0LHRitC10LrRgtCwLi4uIgogCi0jOiBsaWIvYmxhbWUudGNsOjY5MgorIzogbGliL2JsYW1lLnRjbDo3NzIKIG1zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKIG1zZ3N0ciAi0JDQvdC90L7RgtCw0YbQuNGPINC30LDQstC10YDRiNC10L3QsC4iCiAKLSM6IGxpYi9ibGFtZS50Y2w6NzQ2CisjOiBsaWIvYmxhbWUudGNsOjgwMgorbXNnaWQgIkJ1c3kiCittc2dzdHIgItCX0LDQvdGP0YIiCisKKyM6IGxpYi9ibGFtZS50Y2w6ODAzCittc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCittc2dzdHIgItCQ0L3QvdC+0YLQsNGG0LjRjyDRg9C20LUg0LfQsNC/0YPRidC10L3QsCIKKworIzogbGliL2JsYW1lLnRjbDo4NDIKK21zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgorbXNnc3RyICLQktGL0L/QvtC70L3QtdC90LjQtSDQv9C+0LvQvdC+0LPQviDQv9C+0LjRgdC60LAg0LrQvtC/0LjQuS4uLiIKKworIzogbGliL2JsYW1lLnRjbDo5MTAKIG1zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCiBtc2dzdHIgItCX0LDQs9GA0YPQt9C60LAg0LDQvdC90L7RgtCw0YbQuNC4Li4uIgogCi0jOiBsaWIvYmxhbWUudGNsOjgwMgorIzogbGliL2JsYW1lLnRjbDo5NjMKIG1zZ2lkICJBdXRob3I6IgogbXNnc3RyICLQkNCy0YLQvtGAOiIKIAotIzogbGliL2JsYW1lLnRjbDo4MDYKKyM6IGxpYi9ibGFtZS50Y2w6OTY3CiBtc2dpZCAiQ29tbWl0dGVyOiIKIG1zZ3N0ciAi0KHQvtGF0YDQsNC90LjQuzoiCiAKLSM6IGxpYi9ibGFtZS50Y2w6ODExCisjOiBsaWIvYmxhbWUudGNsOjk3MgogbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgogbXNnc3RyICLQmNGB0YXQvtC00L3Ri9C5INGE0LDQudC7OiIKIAotIzogbGliL2JsYW1lLnRjbDo5MjUKKyM6IGxpYi9ibGFtZS50Y2w6MTAyMAorbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0L3QsNC50YLQuCDRgtC10LrRg9GJ0LXQtSDRgdC+0YHRgtC+0Y/QvdC40LU6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwNzUKK21zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0L3QsNC50YLQuCDRgdC+0YHRgtC+0Y/QvdC40LUg0L/RgNC10LTQutCwOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDkwCittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgorbXNnc3RyICLQndC1INC80L7Qs9GDINC/0L7QutCw0LfQsNGC0Ywg0L/RgNC10LTQutCwIgorCisjOiBsaWIvYmxhbWUudGNsOjEwOTEgbGliL2RpZmYudGNsOjI5NworbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0LPRgNGD0LfQutC4INC40LfQvNC10L3QtdC90LjQuToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTIzMQogbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgogbXNnc3RyICLQmNGB0YLQvtGH0L3QuNC6OiIKIAotIzogbGliL2JsYW1lLnRjbDo5MzEKKyM6IGxpYi9ibGFtZS50Y2w6MTIzNwogbXNnaWQgIkluIEZpbGU6IgogbXNnc3RyICLQpNCw0LnQuzoiCiAKLSM6IGxpYi9ibGFtZS50Y2w6OTM2CisjOiBsaWIvYmxhbWUudGNsOjEyNDIKIG1zZ2lkICJDb3BpZWQgT3IgTW92ZWQgSGVyZSBCeToiCiBtc2dzdHIgItCh0LrQvtC/0LjRgNC+0LLQsNC90L4v0L/QtdGA0LXQvNC10YnQtdC90L4g0LI6IgogCkBAIC01NDksMTYgKzY2MCwxOCBAQAogCiAjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzUKICM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzAgbGliL2Jyb3dzZXIudGNsOjI4MgotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MjIgbGliL2Nob29zZV9mb250LnRjbDo0MyBsaWIvbWVyZ2UudGNsOjE3MQotIzogbGliL29wdGlvbi50Y2w6MTAzIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDIgbGliL3RyYW5zcG9ydC50Y2w6OTcKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTQ0IGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzIKKyM6IGxpYi9vcHRpb24udGNsOjEyNSBsaWIvcmVtb3RlX2FkZC50Y2w6MzIgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MgorIzogbGliL3Rvb2xzX2RsZy50Y2w6NDAgbGliL3Rvb2xzX2RsZy50Y2w6MjA0IGxpYi90b29sc19kbGcudGNsOjM1MgorIzogbGliL3RyYW5zcG9ydC50Y2w6MTA4CiBtc2dpZCAiQ2FuY2VsIgotbXNnc3RyICLQntGC0LzQtdC90LjRgtGMIgorbXNnc3RyICLQntGC0LzQtdC90LAiCiAKLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMyIGxpYi9icm93c2VyLnRjbDoyODcKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMyIGxpYi9icm93c2VyLnRjbDoyODcgbGliL3Rvb2xzX2RsZy50Y2w6MzI4CiBtc2dpZCAiUmV2aXNpb24iCiBtc2dzdHIgItCS0LXRgNGB0LjRjyIKIAotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzYgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjI0MgorIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzYgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjI4MAogbXNnaWQgIk9wdGlvbnMiCiBtc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCIKIApAQCAtNTc4LDcgKzY5MSw3IEBACiBtc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCiBtc2dzdHIgItCh0L7Qt9C00LDRgtGMINC90L7QstGD0Y4g0LLQtdGC0LLRjCIKIAotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzcxCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNzcKIG1zZ2lkICJDcmVhdGUiCiBtc2dzdHIgItCh0L7Qt9C00LDRgtGMIgogCkBAIC01ODYsNyArNjk5LDcgQEAKIG1zZ2lkICJCcmFuY2ggTmFtZSIKIG1zZ3N0ciAi0J3QsNC30LLQsNC90LjQtSDQstC10YLQstC4IgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MyBsaWIvcmVtb3RlX2FkZC50Y2w6MzkgbGliL3Rvb2xzX2RsZy50Y2w6NTAKIG1zZ2lkICJOYW1lOiIKIG1zZ3N0ciAi0J3QsNC30LLQsNC90LjQtToiCiAKQEAgLTYxMCw3ICs3MjMsNyBAQAogbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgogbXNnc3RyICLQotC+0LvRjNC60L4gRmFzdCBGb3J3YXJkIgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1MTQKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNgogbXNnaWQgIlJlc2V0IgogbXNnc3RyICLQodCx0YDQvtGBIgogCkBAIC02NTAsMjYgKzc2MywxNiBAQAogCiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTIKIG1zZ2lkICJEZWxldGUgT25seSBJZiBNZXJnZWQgSW50byIKLW1zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0YLQvtC70YzQutC+INCyINGB0LvRg9GH0LDQtSwg0LXRgdC70Lgg0LHRi9C70L4g0L7QsdGK0LXQtNC40L3QtdC90LjQtSDRgSIKK21zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0YLQvtC70YzQutC+INCyINGB0LvRg9GH0LDQtSwg0LXRgdC70Lgg0LHRi9C70L4g0YHQu9C40Y/QvdC40LUg0YEiCiAKICM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1NAogbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgdGVzdC4pIgotbXNnc3RyICLQktGB0LXQs9C00LAgKNC90LUg0LLRi9C/0L7Qu9C90Y/RgtGMINC/0YDQvtCy0LXRgNC60YMg0L3QsCDQvtCx0YrQtdC00LjQvdC10L3QuNC1KSIKK21zZ3N0ciAi0JLRgdC10LPQtNCwICjQvdC1INCy0YvQv9C+0LvQvdGP0YLRjCDQv9GA0L7QstC10YDQutGDINC90LAg0YHQu9C40Y/QvdC40LUpIgogCiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgotbXNnc3RyICLQodC70LXQtNGD0Y7RidC40LUg0LLQtdGC0LLQuCDQvtCx0YrQtdC00LjQvdC10L3RiyDRgSAlcyDQvdC1INC/0L7Qu9C90L7RgdGC0YzRjjoiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUKLW1zZ2lkICIiCi0iUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC4gXG4iCi0iXG4iCi0iIERlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgotbXNnc3RyICIiCi0i0JLQvtGB0YHRgtCw0L3QsNCy0LvQuNCy0LDRgtGMINGD0LTQsNC70LXQvdC90YvQtSDQstC10YLQstC4INGB0LvQvtC20L3Qvi4gXG4iCi0iXG4iCi0iINCj0LTQsNC70LjRgtGMINCy0YvQsdGA0LDQvdC90YvQtSDQstC10YLQstC4PyIKK21zZ3N0ciAi0JLQtdGC0LLQuCwg0LrQvtGC0L7RgNGL0LUg0L3QtSDQv9C+0LvQvdC+0YHRgtGM0Y4g0YHQu9C40LLQsNGO0YLRgdGPINGBICVzOiIKIAogIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE0MQogIywgdGNsLWZvcm1hdApAQCAtNzAwLDcgKzgwMyw3IEBACiBtc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgogbXNnc3RyICLQo9C60LDQttC40YLQtSDQstC10YLQstGMINC00LvRjyDQv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNGPLiIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MTc5CisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCiBtc2dzdHIgItCS0LXRgtCy0YwgJyVzJyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuIgpAQCAtNzMxLDMyICs4MzQsMzggQEAKIG1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgogbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINGE0LDQudC70Ysg0LLQtdGC0LLQuCIKIAotIzogbGliL2Jyb3dzZXIudGNsOjI3OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODQKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTg3CisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5OTUKIG1zZ2lkICJCcm93c2UiCiBtc2dzdHIgItCf0L7QutCw0LfQsNGC0YwiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NzkKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6ODQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgogbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC40LUgJXMg0LjQtyAlcyAiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTI3CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMgogIywgdGNsLWZvcm1hdAogbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKIG1zZ3N0ciAi0LrRgNC40YLQuNGH0LXRgdC60LDRjyDQvtGI0LjQsdC60LA6INC90LXQstC+0LfQvNC+0LbQvdC+INGA0LDQt9GA0LXRiNC40YLRjCAlcyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDAgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzEKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ1IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMxCisjOiBsaWIvc3Noa2V5LnRjbDo1MwogbXNnaWQgIkNsb3NlIgogbXNnc3RyICLQl9Cw0LrRgNGL0YLRjCIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNjkKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgogbXNnc3RyICLQktC10YLQstGMICclcycg0L3QtSDRgdGD0YnQtdGB0YLQstGD0LXRgiAiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjA2CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCittc2dzdHIgItCe0YjQuNCx0LrQsCDRgdC+0LfQtNCw0L3QuNGPINGD0L/RgNC+0YnRkdC90L3QvtC5INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCBnaXQgcHVsbCDQtNC70Y8gJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgpAQCAtNzY3LDIzICs4NzYsMjMgQEAKICLQktC10YLQstGMICclcycg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLlxuIgogIlxuIgogItCe0L3QsCDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0L/RgNC+0LrRgNGD0YfQtdC90LAoZmFzdC1mb3J3YXJkKSDQuiAlcy5cbiIKLSLQotGA0LXQsdGD0LXRgtGB0Y8g0L7QsdGK0LXQtNC40L3QtdC90LjQtS4iCisi0KLRgNC10LHRg9C10YLRgdGPINGB0LvQuNGP0L3QuNC1LiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjAKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAi0KHRgtGA0LDRgtC10LPQuNGPINC+0LHRitC10LTQuNC90LXQvdC40Y8gJyVzJyDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8uIgorbXNnc3RyICLQndC10LjQt9Cy0LXRgdGC0L3QsNGPINGB0YLRgNCw0YLQtdCz0LjRjyDRgdC70LjRj9C90LjRjzogJyVzJy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjM5CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCiBtc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCAnJXMnLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNTEKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjczCiBtc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgogbXNnc3RyICLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L3QsCDQtNGA0YPQs9C40Lwg0L/RgNC+0YbQtdGB0YHQvtC8LiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjYKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg4CiBtc2dpZCAiIgogIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgogIlxuIgpAQCAtNzk5LDMwICs5MDgsMzAgQEAKICJcbiIKICLQrdGC0L4g0LHRg9C00LXRgiDRgdC00LXQu9Cw0L3QviDRgdC10LnRh9Cw0YEg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LguXG4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzIyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvICclcycuLi4iCiBtc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QuNC1INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCDQuNC3ICclcycuLi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzIzCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQogbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgogbXNnc3RyICLRhNCw0LnQu9GLINC40LfQstC70LXRh9C10L3RiyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNTMKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKLW1zZ3N0ciAi0J/RgNC10YDQstCw0L0g0L/QtdGA0LXRhdC+0LQg0L3QsCAnJXMnICjRgtGA0LXQsdGD0LXRgtGB0Y8g0L7QsdGK0LXQtNC40L3QtdC90LjQtSDQvdCwINGD0YDQvtCy0L3QtSDRhNCw0LnQu9C+0LIpIgorbXNnc3RyICLQn9GA0LXRgNCy0LDQvSDQv9C10YDQtdGF0L7QtCDQvdCwICclcycgKNGC0YDQtdCx0YPQtdGC0YHRjyDRgdC70LjRj9C90LjQtSDRgdC+0LTQtdGA0LbQsNC90LjRjyDRhNCw0LnQu9C+0LIpIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM1NAorIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKIG1zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKLW1zZ3N0ciAi0KLRgNC10LHRg9C10YLRgdGPINC+0LHRitC10LTQuNC90LXQvdC40LUg0L3QsCDRg9GA0L7QstC90LUg0YTQsNC50LvQvtCyLiIKK21zZ3N0ciAi0KLRgNC10LHRg9C10YLRgdGPINGB0LvQuNGP0L3QuNC1INGB0L7QtNC10YDQttCw0L3QuNGPINGE0LDQudC70L7Qsi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzU4CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgogbXNnc3RyICLQktC10YLQstGMICclcycg0L7RgdGC0LDQtdGC0YHRjyDRgtC10LrRg9GJ0LXQuS4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDI5CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MQogbXNnaWQgIiIKICJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKICJcbiIKQEAgLTgzNCwzMCArOTQzLDMwIEBACiAi0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0YHQvdC+0LLQsCDQstC10YDQvdGD0YLRjNGB0Y8g0Log0LrQsNC60L7QuS3QvdC40LHRg9C00Ywg0LLQtdGC0LLQuCwg0YHQvtC30LTQsNC50YLQtSDQtdC1INGB0LXQudGH0LDRgSwgIgogItC90LDRh9C40L3QsNGPINGBICfQotC10LrRg9GJ0LXQs9C+INC+0YLRgdC+0LXQtNC40L3QtdC90L3QvtCz0L4g0YHQvtGB0YLQvtGP0L3QuNGPJy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDQ2IGxpYi9jaGVja291dF9vcC50Y2w6NDUwCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ2OCBsaWIvY2hlY2tvdXRfb3AudGNsOjQ3MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgogbXNnc3RyICLQktC10YLQstGMICclcycg0YHQtNC10LvQsNC90LAg0YLQtdC60YPRidC10LkuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ3OAorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgogbXNnc3RyICLQodCx0YDQvtGBICclcycg0LIgJyVzJyDQv9GA0LjQstC10LTQtdGCINC6INC/0L7RgtC10YDQtSDRgdC70LXQtNGD0Y7RidC40YUg0YHQvtGF0YDQsNC90LXQvdC90YvRhSDRgdC+0YHRgtC+0Y/QvdC40Lk6ICIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDAKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTIyCiBtc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKIG1zZ3N0ciAi0JLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC/0L7RgtC10YDRj9C90L3Ri9C1INGB0L7RhdGA0LDQvdC10L3QvdGL0LUg0YHQvtGB0YLQvtGP0L3QuNGPINCx0YPQtNC10YIg0YHQu9C+0LbQvdC+LiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDUKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTI3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmVzZXQgJyVzJz8iCiBtc2dzdHIgItCh0LHRgNC+0YHQuNGC0YwgJyVzJz8iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTEwIGxpYi9tZXJnZS50Y2w6MTYzCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUzMiBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKIG1zZ2lkICJWaXN1YWxpemUiCiBtc2dzdHIgItCd0LDQs9C70Y/QtNC90L4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTc4CisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYwMAogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgpAQCAtOTAwLDIyNCArMTAwOSwyMjggQEAKIAogIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyOAogbXNnaWQgIkdpdCBHdWkiCi1tc2dzdHIgIiIKK21zZ3N0ciAiR2l0IEd1aSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM3NgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MgogbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKIG1zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0L3QvtCy0YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzCiBtc2dpZCAiTmV3Li4uIgogbXNnc3RyICLQndC+0LLRi9C5Li4uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDYwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NQogbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCiBtc2dzdHIgItCh0LrQu9C+0L3QuNGA0L7QstCw0YLRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2CiBtc2dpZCAiQ2xvbmUuLi4iCiBtc2dzdHIgItCh0LrQu9C+0L3QuNGA0L7QstCw0YLRjC4uLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NzYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgzCiBtc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgogbXNnc3RyICLQktGL0LHRgNCw0YLRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE5CiBtc2dpZCAiT3Blbi4uLiIKIG1zZ3N0ciAi0J7RgtC60YDRi9GC0YwuLi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTI2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzMgogbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCiBtc2dzdHIgItCd0LXQtNCw0LLQvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTM4CiBtc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCiBtc2dzdHIgItCe0YLQutGA0YvRgtGMINC/0L7RgdC70LXQtNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjI5NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMwMwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzAyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzA5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxNgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCiBtc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSAlczoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NwogbXNnaWQgIkRpcmVjdG9yeToiCiBtc2dzdHIgItCa0LDRgtCw0LvQvtCzOiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MTIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MzcKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxMQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NDQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNwogbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgogbXNnc3RyICLQoNC10L/QvtC30LjRgtC+0YDQuNC5IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQzNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgogbXNnc3RyICLQmtCw0YLQsNC70L7QsyAnJXMnINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQxCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0NgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIgogbXNnc3RyICLQpNCw0LnQuyAnJXMnINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDU1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2MAogbXNnaWQgIkNsb25lIgogbXNnc3RyICLQodC60LvQvtC90LjRgNC+0LLQsNGC0YwiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY4Ci1tc2dpZCAiVVJMOiIKLW1zZ3N0ciAi0KHRgdGL0LvQutCwOiIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDczCittc2dpZCAiU291cmNlIExvY2F0aW9uOiIKK21zZ3N0ciAi0JjRgdGF0L7QtNC90L7QtSDQv9C+0LvQvtC20LXQvdC40LU6IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4OQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODQKK21zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKK21zZ3N0ciAi0JrQsNGC0LDQu9C+0LMg0L3QsNC30L3QsNGH0LXQvdC40Y86IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NgogbXNnaWQgIkNsb25lIFR5cGU6IgogbXNnc3RyICLQotC40L8g0LrQu9C+0L3QsDoiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMgogbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKIG1zZ3N0ciAi0KHRgtCw0L3QtNCw0YDRgtC90YvQuSAo0JHRi9GB0YLRgNGL0LksINC/0L7Qu9GD0LjQt9Cx0YvRgtC+0YfQvdGL0LksIFwi0LbQtdGB0YLQutC40LVcIiDRgdGB0YvQu9C60LgpIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDgKIG1zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCiBtc2dzdHIgItCf0L7Qu9C90LDRjyDQutC+0L/QuNGPICjQnNC10LTQu9C10L3QvdGL0LksINGB0L7Qt9C00LDQtdGCINGA0LXQt9C10YDQstC90YPRjiDQutC+0L/QuNGOKSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0CiBtc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCiBtc2dzdHIgItCe0LHRidC40LkgKNCh0LDQvNGL0Lkg0LHRi9GB0YLRgNGL0LksINC90LUg0YDQtdC60L7QvNC10L3QtNGD0LXRgtGB0Y8sINCx0LXQtyDRgNC10LfQtdGA0LLQvdC+0Lkg0LrQvtC/0LjQuCkiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkwCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjczNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgwNgotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyNQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODEzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDMxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgogbXNnc3RyICLQmtCw0YLQsNC70L7QsyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdC8OiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NzkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTg2CiBtc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgogbXNnc3RyICLQodGC0LDQvdC00LDRgNGC0L3Ri9C5INC60LvQvtC9INCy0L7Qt9C80L7QttC10L0g0YLQvtC70YzQutC+INC00LvRjyDQu9C+0LrQsNC70YzQvdC+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1ODMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkwCiBtc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKIG1zZ3N0ciAi0J7QsdGJ0LjQuSDQutC70L7QvSDQstC+0LfQvNC+0LbQtdC9INGC0L7Qu9GM0LrQviDQtNC70Y8g0LvQvtC60LDQu9GM0L3QvtCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjy4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjA0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxMQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKIG1zZ3N0ciAi0J/Rg9GC0YwgJyVzJyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjIKIG1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKIG1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDRgdC60L7QvdGE0LjQs9GD0YDQuNGA0L7QstCw0YLRjCDQuNGB0YXQvtC00L3Ri9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MzQKIG1zZ2lkICJDb3VudGluZyBvYmplY3RzIgogbXNnc3RyICLQodGH0LjRgtCw0Y4g0L7QsdGK0LXQutGC0YsiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYzNQogbXNnaWQgImJ1Y2tldHMiCiBtc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NTIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjU5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgogbXNnc3RyICLQndC1INC80L7Qs9GDINGB0LrQvtC/0LjRgNC+0LLQsNGC0Ywgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY4OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2OTUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgogbXNnc3RyICLQndC10YfQtdCz0L4g0LrQu9C+0L3QuNGA0L7QstCw0YLRjCDRgSAlcy4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjkwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2OTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTEKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTIzCiBtc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgogbXNnc3RyICLQndC1INC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDQvdCwINCy0LXRgtCy0YwgJ21hc3RlcicuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MTAKIG1zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgotbXNnc3RyICJcItCW0LXRgdGC0LrQuNC1INGB0YHRi9C70LrQuFwiINC90LUg0LTQvtGB0YLRg9C/0L3Riy4g0JHRg9C00YMg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC60L7Qv9C40YDQvtCy0LDQvdC40LUuIgorbXNnc3RyICJcItCW0LXRgdGC0LrQuNC1INGB0YHRi9C70LrQuFwiINC90LXQtNC+0YHRgtGD0L/QvdGLLiDQkdGD0LTQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0L3QviDQutC+0L/QuNGA0L7QstCw0L3QuNC1LiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MTUKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzIyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ2xvbmluZyBmcm9tICVzIgogbXNnc3RyICLQmtC70L7QvdC40YDQvtCy0LDQvdC40LUgJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1MwogbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKIG1zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNC90LjQtSBvYmplY3RzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTQKIG1zZ2lkICJLaUIiCiBtc2dzdHIgItCa0JEiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzcxCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc3OAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCiBtc2dzdHIgItCd0LUg0LzQvtCz0YMg0YHQutC+0L/QuNGA0L7QstCw0YLRjCDQvtCx0YrQtdC60YI6ICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4MQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODgKIG1zZ2lkICJMaW5raW5nIG9iamVjdHMiCiBtc2dzdHIgItCh0L7Qt9C00LDQvdC40LUg0YHRgdGL0LvQvtC6INC90LAgb2JqZWN0cyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzg5CiBtc2dpZCAib2JqZWN0cyIKIG1zZ3N0ciAi0L7QsdGK0LXQutGC0YsiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzkwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NwogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgogbXNnc3RyICLQndC1INC80L7Qs9GDIFwi0LbQtdGB0YLQutC+INGB0LLRj9C30LDRgtGMXCIg0L7QsdGK0LXQutGCOiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NDUKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODUyCiBtc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKIG1zZ3N0ciAiIgogItCd0LUg0LzQvtCz0YMg0L/QvtC70YPRh9C40YLRjCDQstC10YLQstC4INC4INC+0LHRitC10LrRgtGLLiDQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QsNGPINC40L3RhNC+0YDQvNCw0YbQuNGPINC90LAg0LrQvtC90YHQvtC70LguIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg1NgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjMKIG1zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCiBtc2dzdHIgItCd0LUg0LzQvtCz0YMg0L/QvtC70YPRh9C40YLRjCDQvNC10YLQutC4LiDQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QsNGPINC40L3RhNC+0YDQvNCw0YbQuNGPINC90LAg0LrQvtC90YHQvtC70LguIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg4MAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4ODcKIG1zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIEhFQUQuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgogbXNnc3RyICLQndC1INC80L7Qs9GDINC+0L/RgNC10LTQtdC70LjRgtGMIEhFQUQuINCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdCw0Y8g0LjQvdGE0L7RgNC80LDRhtC40Y8g0L3QsCDQutC+0L3RgdC+0LvQuC4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODg5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5NgogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgogbXNnc3RyICLQndC1INC80L7Qs9GDINC+0YfQuNGB0YLQuNGC0YwgJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODk1CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgogbXNnaWQgIkNsb25lIGZhaWxlZC4iCiBtc2dzdHIgItCa0LvQvtC90LjRgNC+0LLQsNC90LjQtSDQvdC1INGD0LTQsNC70L7RgdGMLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA5CiBtc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgogbXNnc3RyICLQndC1INCx0YvQu9C+INC/0L7Qu9GD0YfQtdC90L4g0LLQtdGC0LLQuCDQv9C+INGD0LzQvtC70YfQsNC90LjRji4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTEzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyMAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKIG1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDRgNCw0YHQv9C+0LfQvdCw0YLRjCAlcyDQutCw0Log0YHQvtGB0YLQvtGP0L3QuNC1LiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjUKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMyCiBtc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCiBtc2dzdHIgItCh0L7Qt9C00LDRjiDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjYgbGliL2luZGV4LnRjbDo2NSBsaWIvaW5kZXgudGNsOjEyNwotIzogbGliL2luZGV4LnRjbDoxOTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMzIGxpYi9pbmRleC50Y2w6NjUgbGliL2luZGV4LnRjbDoxMjgKKyM6IGxpYi9pbmRleC50Y2w6MTk2CiBtc2dpZCAiZmlsZXMiCiBtc2dzdHIgItGE0LDQudC70L7QsiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NTUKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTYyCiBtc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCiBtc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQvdCw0YfQsNC70YzQvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1INGE0LDQudC70L7QsiDRgNC10L/QvtC30LjRgtC+0YDQuNGPLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NzEKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTc4CiBtc2dpZCAiT3BlbiIKIG1zZ3N0ciAi0J7RgtC60YDRi9GC0YwiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgxCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk4OAogbXNnaWQgIlJlcG9zaXRvcnk6IgogbXNnc3RyICLQoNC10L/QvtC30LjRgtC+0YDQuNC5OiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDMxCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMzcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKIG1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRgNC10L/QvtC30LjRgtC+0YDQuNC5ICVzOiIKQEAgLTExNDAsNyArMTI1Myw3IEBACiAKICM6IGxpYi9jaG9vc2VfcmV2LnRjbDo4NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTM4CiBtc2dpZCAiVGFnIgotbXNnc3RyICLQotCw0LMiCittc2dzdHIgItCc0LXRgtC60LAiCiAKICM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMTcKICMsIHRjbC1mb3JtYXQKQEAgLTExODIsMjQgKzEyOTUsMjQgQEAKICJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgogImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCiBtc2dzdHIgIiIKLSLQndC10LLQvtC30LzQvtC20L3QviDQuNGB0L/RgNCw0LLQuNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNC1INCy0L4g0LLRgNC10LzRjyDQvtCx0YrQtdC00LjQvdC10L3QuNGPLlxuIgorItCd0LXQstC+0LfQvNC+0LbQvdC+INC40YHQv9GA0LDQstC40YLRjCDRgdC+0YHRgtC+0Y/QvdC40LUg0LLQviDQstGA0LXQvNGPINC+0L/QtdGA0LDRhtC40Lgg0YHQu9C40Y/QvdC40Y8uXG4iCiAiXG4iCi0i0KLQtdC60YPRidC10LUg0L7QsdGK0LXQtNC40L3QtdC90LjQtSDQvdC1INC30LDQstC10YDRiNC10L3Qvi4g0J3QtdCy0L7Qt9C80L7QttC90L4g0LjRgdC/0YDQsNCy0LjRgtGMINC/0YDQtdC00YvQtNGD0YnQtdC1ICIKLSLRgdC+0YXRgNCw0L3QtdC90L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSDQvdC1INC/0YDQtdGA0YvQstCw0Y8g0YLQtdC60YPRidC10LUg0L7QsdGK0LXQtNC40L3QtdC90LjQtS5cbiIKKyLQotC10LrRg9GJ0LXQtSDRgdC70LjRj9C90LjQtSDQvdC1INC30LDQstC10YDRiNC10L3Qvi4g0J3QtdCy0L7Qt9C80L7QttC90L4g0LjRgdC/0YDQsNCy0LjRgtGMINC/0YDQtdC00YvQtNGD0YnQtdC1ICIKKyLRgdC+0YXRgNCw0L3QtdC90L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSwg0L3QtSDQv9GA0LXRgNGL0LLQsNGPINGN0YLRgyDQvtC/0LXRgNCw0YbQuNGOLlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDo0OQorIzogbGliL2NvbW1pdC50Y2w6NDgKIG1zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCiBtc2dzdHIgItCe0YjQuNCx0LrQsCDQv9GA0Lgg0LfQsNCz0YDRg9C30LrQtSDQtNCw0L3QvdGL0YUg0LTQu9GPINC40YHQv9GA0LDQstC70LXQvdC40Y8g0YHQvtGF0YDQsNC90LXQvdC90L7Qs9C+INGB0L7RgdGC0L7Rj9C90LjRjzoiCiAKLSM6IGxpYi9jb21taXQudGNsOjc2CisjOiBsaWIvY29tbWl0LnRjbDo3NQogbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCiBtc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC/0L7Qu9GD0YfQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L7QsSDQsNCy0YLQvtGA0YHRgtCy0LU6IgogCi0jOiBsaWIvY29tbWl0LnRjbDo4MQorIzogbGliL2NvbW1pdC50Y2w6ODAKIG1zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgogbXNnc3RyICLQndC10LLQtdGA0L3Ri9C5IEdJVF9DT01NSVRURVJfSURFTlQ6IgogCi0jOiBsaWIvY29tbWl0LnRjbDoxMzMKKyM6IGxpYi9jb21taXQudGNsOjEzMgogbXNnaWQgIiIKICJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKICJcbiIKQEAgLTEyMTUsNyArMTMyOCw3IEBACiAiXG4iCiAi0K3RgtC+INCx0YPQtNC10YIg0YHQtNC10LvQsNC90L4g0YHQtdC50YfQsNGBINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4LlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNTQKKyM6IGxpYi9jb21taXQudGNsOjE1NQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgpAQCAtMTIyMywxMiArMTMzNiwxMiBAQAogIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgIgogImJlZm9yZSBjb21taXR0aW5nLlxuIgogbXNnc3RyICIiCi0i0J3QtdC70YzQt9GPINGB0L7RhdGA0LDQvdC40YLRjCDQvdC10L7QsdGK0LXQtNC40L3QtdC90L3Ri9C1INGE0LDQudC70YsuXG4iCisi0J3QtdC70YzQt9GPINGB0L7RhdGA0LDQvdC40YLRjCDRhNCw0LnQu9GLINGBINC90LXQt9Cw0LLQtdGA0YjRkdC90L3QvtC5INC+0L/QtdGA0LDRhtC10Lkg0YHQu9C40Y/QvdC40Y8uXG4iCiAiXG4iCi0i0JTQu9GPINGE0LDQudC70LAgJXMg0LLQvtC30L3QuNC6INC60L7QvdGE0LvQuNC60YIg0L7QsdGK0LXQtNC40L3QtdC90LjRjy4g0KDQsNC30YDQtdGI0LjRgtC1INC60L7QvdGE0LvQuNC60YIg0Lgg0LTQvtCx0LDQstGM0YLQtSDQuiAiCisi0JTQu9GPINGE0LDQudC70LAgJXMg0LLQvtC30L3QuNC6INC60L7QvdGE0LvQuNC60YIg0YHQu9C40Y/QvdC40Y8uINCg0LDQt9GA0LXRiNC40YLQtSDQutC+0L3RhNC70LjQutGCINC4INC00L7QsdCw0LLRjNGC0LUg0LogIgogItC/0L7QtNCz0L7RgtC+0LLQu9C10L3QvdGL0Lwg0YTQsNC50LvQsNC8INC/0LXRgNC10LQg0YHQvtGF0YDQsNC90LXQvdC40LXQvC5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTYyCisjOiBsaWIvY29tbWl0LnRjbDoxNjMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgpAQCAtMTIzOSw3ICsxMzUyLDcgQEAKICJcbiIKICLQpNCw0LnQuyAlcyDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0YHQvtGF0YDQsNC90LXQvSDQtNCw0L3QvdC+0Lkg0L/RgNC+0LPRgNCw0LzQvNC+0LkuXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE3MAorIzogbGliL2NvbW1pdC50Y2w6MTcxCiBtc2dpZCAiIgogIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgogIlxuIgpAQCAtMTI0OSw3ICsxMzYyLDcgQEAKICJcbiIKICLQn9C+0LTQs9C+0YLQvtCy0YzRgtC1INGF0L7RgtGPINCx0Ysg0L7QtNC40L0g0YTQsNC50Lsg0LTQviDRgdC+0LfQtNCw0L3QuNGPINGB0L7RhdGA0LDQvdC10L3QvdC+0LPQviDRgdC+0YHRgtC+0Y/QvdC40Y8uXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE4MworIzogbGliL2NvbW1pdC50Y2w6MTg2CiBtc2dpZCAiIgogIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKICJcbiIKQEAgLTEyNjcsNDUgKzEzODAsNDUgQEAKICItINCy0YLQvtGA0LDRjyDRgdGC0YDQvtC60LAg0L/Rg9GB0YLQsNGPXG4iCiAiLSDQvtGB0YLQsNCy0YjQuNC10YHRjyDRgdGC0YDQvtC60Lg6INC+0L/QuNGI0LjRgtC1LCDRh9GC0L4g0LTQsNGO0YIg0LLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPLlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMDcKKyM6IGxpYi9jb21taXQudGNsOjIxMAogIywgdGNsLWZvcm1hdAogbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgogbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiBUY2wg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LrQvtC00LjRgNC+0LLQutGDICclcycuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMjEKKyM6IGxpYi9jb21taXQudGNsOjIyNgogbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgogbXNnc3RyICLQktGL0LfQvtCyINC/0YDQvtCz0YDQsNC80LzRiyDQv9C+0LTQtNC10YDQttC60Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyBwcmUtY29tbWl0Li4uIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMzYKKyM6IGxpYi9jb21taXQudGNsOjI0MQogbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgogbXNnc3RyICLQodC+0YXRgNCw0L3QtdC90LjQtSDQv9GA0LXRgNCy0LDQvdC+INC/0YDQvtCz0YDQsNC80LzQvtC5INC/0L7QtNC00LXRgNC20LrQuCDRgNC10L/QvtC30LjRgtC+0YDQuNGPIHByZS1jb21taXQiCiAKLSM6IGxpYi9jb21taXQudGNsOjI1OQorIzogbGliL2NvbW1pdC50Y2w6MjY0CiBtc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCiBtc2dzdHIgItCS0YvQt9C+0LIg0L/RgNC+0LPRgNCw0LzQvNGLINC/0L7QtNC00LXRgNC20LrQuCDRgNC10L/QvtC30LjRgtC+0YDQuNGPIGNvbW1pdC1tc2cuLi4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI3NAorIzogbGliL2NvbW1pdC50Y2w6Mjc5CiBtc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCiBtc2dzdHIgItCh0L7RhdGA0LDQvdC10L3QuNC1INC/0YDQtdGA0LLQsNC90L4g0L/RgNC+0LPRgNCw0LzQvNC+0Lkg0L/QvtC00LTQtdGA0LbQutC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gY29tbWl0LW1zZyIKIAotIzogbGliL2NvbW1pdC50Y2w6Mjg3CisjOiBsaWIvY29tbWl0LnRjbDoyOTIKIG1zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCiBtc2dzdHIgItCh0L7RhdGA0LDQvdC10L3QuNC1INC40LfQvNC10L3QtdC90LjQuS4uLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzAzCisjOiBsaWIvY29tbWl0LnRjbDozMDgKIG1zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCiBtc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCB3cml0ZS10cmVlINC30LDQstC10YDRiNC40LvQsNGB0Ywg0YEg0L7RiNC40LHQutC+0Lk6IgogCi0jOiBsaWIvY29tbWl0LnRjbDozMDQgbGliL2NvbW1pdC50Y2w6MzQ4IGxpYi9jb21taXQudGNsOjM2OAorIzogbGliL2NvbW1pdC50Y2w6MzA5IGxpYi9jb21taXQudGNsOjM1MyBsaWIvY29tbWl0LnRjbDozNzMKIG1zZ2lkICJDb21taXQgZmFpbGVkLiIKIG1zZ3N0ciAi0KHQvtGF0YDQsNC90LjRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSDQvdC1INGD0LTQsNC70L7RgdGMLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzIxCisjOiBsaWIvY29tbWl0LnRjbDozMjYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgogbXNnc3RyICLQodC+0YHRgtC+0Y/QvdC40LUgJXMg0LLRi9Cz0LvRj9C00LjRgiDQv9C+0LLRgNC10LbQtNC10L3QvdGL0LwiCiAKLSM6IGxpYi9jb21taXQudGNsOjMyNgorIzogbGliL2NvbW1pdC50Y2w6MzMxCiBtc2dpZCAiIgogIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgogIlxuIgpAQCAtMTMxNSwyMyArMTQyOCwyMyBAQAogbXNnc3RyICIiCiAi0J7RgtGB0YPRgtGB0YLQstGD0Y7RgiDQuNC30LzQtdC90LXQvdC40Y8g0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPLlxuIgogIlxuIgotItCd0Lgg0L7QtNC40L0g0YTQsNC50Lsg0L3QtSDQsdGL0Lsg0LjQt9C80LXQvdC10L0g0Lgg0L3QtSDQsdGL0LvQviDQvtCx0YrQtdC00LjQvdC10L3QuNGPLlxuIgorItCd0Lgg0L7QtNC40L0g0YTQsNC50Lsg0L3QtSDQsdGL0Lsg0LjQt9C80LXQvdC10L0g0Lgg0L3QtSDQsdGL0LvQviDRgdC70LjRj9C90LjRjy5cbiIKICJcbiIKICLQodC10LnRh9Cw0YEg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60Lgg0LfQsNC/0YPRgdGC0LjRgtGB0Y8g0L/QtdGA0LXRh9C40YLRi9Cy0LDQvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjy5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzMzCisjOiBsaWIvY29tbWl0LnRjbDozMzgKIG1zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCiBtc2dzdHIgItCe0YLRg9GB0YLQstGD0Y7RgiDQuNC30LzQtdC90LjRjyDQtNC70Y8g0YHQvtGF0YDQsNC90LXQvdC40Y8uIgogCi0jOiBsaWIvY29tbWl0LnRjbDozNDcKKyM6IGxpYi9jb21taXQudGNsOjM1MgogbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCiBtc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCBjb21taXQtdHJlZSDQt9Cw0LLQtdGA0YjQuNC70LDRgdGMINGBINC+0YjQuNCx0LrQvtC5OiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzY3CisjOiBsaWIvY29tbWl0LnRjbDozNzIKIG1zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCiBtc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCB1cGRhdGUtcmVmINC30LDQstC10YDRiNC40LvQsNGB0Ywg0YEg0L7RiNC40LHQutC+0Lk6IgogCi0jOiBsaWIvY29tbWl0LnRjbDo0NTQKKyM6IGxpYi9jb21taXQudGNsOjQ2MAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKIG1zZ3N0ciAi0KHQvtC30LTQsNC90L4g0YHQvtGB0YLQvtGP0L3QuNC1ICVzOiAlcyAiCkBAIC0xNDA2LDcgKzE1MTksNyBAQAogbXNnaWQgIkludmFsaWQgZGF0ZSBmcm9tIEdpdDogJXMiCiBtc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90LDRjyDQtNCw0YLQsCDQsiDRgNC10L/QvtC30LjRgtC+0YDQuNC4OiAlcyIKIAotIzogbGliL2RpZmYudGNsOjQyCisjOiBsaWIvZGlmZi50Y2w6NTkKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCkBAIC0xNDI4LDQwICsxNTQxLDEwMSBAQAogIlxuIgogItCh0LXQudGH0LDRgSDQsdGD0LTQtdGCINC30LDQv9GD0YnQtdC90L4g0L/QtdGA0LXRh9C40YLRi9Cy0LDQvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjywg0YfRgtC+0LHRiyDQvdCw0LnRgtC4INC/0L7QtNC+0LHQvdGL0LUg0YTQsNC50LvRiy4iCiAKLSM6IGxpYi9kaWZmLnRjbDo4MQorIzogbGliL2RpZmYudGNsOjk5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgogbXNnc3RyICLQl9Cw0LPRgNGD0LfQutCwINC40LfQvNC10L3QtdC90LjQuSDQsiAlcy4uLiIKIAotIzogbGliL2RpZmYudGNsOjExNCBsaWIvZGlmZi50Y2w6MTg0CisjOiBsaWIvZGlmZi50Y2w6MTIwCittc2dpZCAiIgorIkxPQ0FMOiBkZWxldGVkXG4iCisiUkVNT1RFOlxuIgorbXNnc3RyICIiCisi0JvQntCa0JDQm9Cs0J3Qnjog0YPQtNCw0LvRkdC9XG4iCisi0JLQndCV0KjQndCY0Jk6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMjUKK21zZ2lkICIiCisiUkVNT1RFOiBkZWxldGVkXG4iCisiTE9DQUw6XG4iCittc2dzdHIgIiIKKyLQktCd0JXQqNCd0JjQmTog0YPQtNCw0LvRkdC9XG4iCisi0JvQntCa0JDQm9Cs0J3QnjpcbiIKKworIzogbGliL2RpZmYudGNsOjEzMgorbXNnaWQgIkxPQ0FMOlxuIgorbXNnc3RyICLQm9Ce0JrQkNCb0KzQndCeOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTM1Cittc2dpZCAiUkVNT1RFOlxuIgorbXNnc3RyICLQktCd0JXQqNCd0JjQmTpcbiIKKworIzogbGliL2RpZmYudGNsOjE5NyBsaWIvZGlmZi50Y2w6Mjk2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCiBtc2dzdHIgItCd0LUg0LzQvtCz0YMg0L/QvtC60LDQt9Cw0YLRjCAlcyIKIAotIzogbGliL2RpZmYudGNsOjExNQorIzogbGliL2RpZmYudGNsOjE5OAogbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCiBtc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0LPRgNGD0LfQutC4INGE0LDQudC70LA6IgogCi0jOiBsaWIvZGlmZi50Y2w6MTIyCisjOiBsaWIvZGlmZi50Y2w6MjA1CiBtc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgogbXNnc3RyICLQoNC10L/QvtC30LjRgtC+0YDQuNC5IEdpdCAo0L/QvtC00L/RgNC+0LXQutGCKSIKIAotIzogbGliL2RpZmYudGNsOjEzNAorIzogbGliL2RpZmYudGNsOjIxNwogbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKIG1zZ3N0ciAiKiDQlNCy0L7QuNGH0L3Ri9C5INGE0LDQudC7ICjRgdC+0LTQtdGA0LbQuNC80L7QtSDQvdC1INC/0L7QutCw0LfQsNC90L4pIgogCi0jOiBsaWIvZGlmZi50Y2w6MTg1Ci1tc2dpZCAiRXJyb3IgbG9hZGluZyBkaWZmOiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC30LDQs9GA0YPQt9C60LggZGlmZjoiCisjOiBsaWIvZGlmZi50Y2w6MjIyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCisiKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCittc2dzdHIgIiIKKyIqINCg0LDQt9C80LXRgCDQvdC10L/QvtC00LPQvtGC0L7QstC70LXQvdC+0LPQviDRhNCw0LnQu9CwICVkINCx0LDQudGCLlxuIgorIiog0J/QvtC60LDQt9Cw0L3QviDQv9C10YDQstGL0YUgJWQg0LHQsNC50YIuXG4iCiAKLSM6IGxpYi9kaWZmLnRjbDozMDMKKyM6IGxpYi9kaWZmLnRjbDoyMjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiKiBVbnRyYWNrZWQgZmlsZSBjbGlwcGVkIGhlcmUgYnkgJXMuXG4iCisiKiBUbyBzZWUgdGhlIGVudGlyZSBmaWxlLCB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yLlxuIgorbXNnc3RyICIiCisiXG4iCisiKiDQndC10L/QvtC00LPQvtGC0L7QstC70LXQvdGL0Lkg0YTQsNC50Lsg0L7QsdGA0LXQt9Cw0L06ICVzLlxuIgorIiog0KfRgtC+0LHRiyDRg9Cy0LjQtNC10YLRjCDQstC10YHRjCDRhNCw0LnQuywg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQv9GA0L7Qs9GA0LDQvNC80YMt0YDQtdC00LDQutGC0L7RgC5cbiIKKworIzogbGliL2RpZmYudGNsOjQzNgogbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgogbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC40YHQutC70Y7Rh9C40YLRjCDQstGL0LHRgNCw0L3QvdGD0Y4g0YfQsNGB0YLRjC4iCiAKLSM6IGxpYi9kaWZmLnRjbDozMTAKKyM6IGxpYi9kaWZmLnRjbDo0NDMKIG1zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCiBtc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC00LPQvtGC0L7QstC40YLRjCDQuiDRgdC+0YXRgNCw0L3QtdC90LjRjiDQstGL0LHRgNCw0L3QvdGD0Y4g0YfQsNGB0YLRjC4iCiAKKyM6IGxpYi9kaWZmLnRjbDo1MDkKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNGB0LrQu9GO0YfQuNGC0Ywg0LLRi9Cx0YDQsNC90L3Rg9GOINGB0YLRgNC+0LrRgy4iCisKKyM6IGxpYi9kaWZmLnRjbDo1MTcKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC00LPQvtGC0L7QstC40YLRjCDQuiDRgdC+0YXRgNCw0L3QtdC90LjRjiDQstGL0LHRgNCw0L3QvdGD0Y4g0YHRgtGA0L7QutGDLiIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDMKK21zZ2lkICJEZWZhdWx0IgorbXNnc3RyICLQn9C+INGD0LzQvtC70YfQsNC90LjRjiIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gKCVzKSIKK21zZ3N0ciAi0KHQuNGB0YLQtdC80L3QsNGPICglcykiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Cittc2dpZCAiT3RoZXIiCittc2dzdHIgItCU0YDRg9Cz0LDRjyIKKwogIzogbGliL2Vycm9yLnRjbDoyMCBsaWIvZXJyb3IudGNsOjExNAogbXNnaWQgImVycm9yIgogbXNnc3RyICLQvtGI0LjQsdC60LAiCkBAIC0xNDgwLDcgKzE2NTQsNyBAQAogCiAjOiBsaWIvaW5kZXgudGNsOjE1CiBtc2dpZCAiSW5kZXggRXJyb3IiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQuNC90LTQtdC60YHQsCIKK21zZ3N0ciAi0J7RiNC40LHQutCwINCyINC40L3QtNC10LrRgdC1IgogCiAjOiBsaWIvaW5kZXgudGNsOjIxCiBtc2dpZCAiIgpAQCAtMTQ5OCw1MCArMTY3Miw1OSBAQAogbXNnaWQgIlVubG9jayBJbmRleCIKIG1zZ3N0ciAi0KDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCDQuNC90LTQtdC60YEiCiAKLSM6IGxpYi9pbmRleC50Y2w6MjgyCisjOiBsaWIvaW5kZXgudGNsOjI4NwogIywgdGNsLWZvcm1hdAogbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKIG1zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSAlcyDQuNC3INC/0L7QtNCz0L7RgtC+0LLQu9C10L3QvdC+0LPQviIKIAotIzogbGliL2luZGV4LnRjbDozMTMKKyM6IGxpYi9pbmRleC50Y2w6MzI2CiBtc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKIG1zZ3N0ciAi0J/QvtC00LPQvtGC0L7QstC70LXQvdC+INC00LvRjyDRgdC+0YXRgNCw0L3QtdC90LjRjyIKIAotIzogbGliL2luZGV4LnRjbDozMjYKKyM6IGxpYi9pbmRleC50Y2w6MzM5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQWRkaW5nICVzIgogbXNnc3RyICLQlNC+0LHQsNCy0LvQtdC90LjQtSAlcy4uLiIKIAotIzogbGliL2luZGV4LnRjbDozODEKKyM6IGxpYi9pbmRleC50Y2w6Mzk2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCiBtc2dzdHIgItCe0YLQvNC10L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINCyINGE0LDQudC70LUgJXM/IgogCi0jOiBsaWIvaW5kZXgudGNsOjM4MworIzogbGliL2luZGV4LnRjbDozOTgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCiBtc2dzdHIgItCe0YLQvNC10L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINCyICVpINGE0LDQudC70LUoLdCw0YUpPyIKIAotIzogbGliL2luZGV4LnRjbDozOTEKKyM6IGxpYi9pbmRleC50Y2w6NDA2CiBtc2dpZCAiQW55IHVuc3RhZ2VkIGNoYW5nZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBsb3N0IGJ5IHRoZSByZXZlcnQuIgogbXNnc3RyICIiCiAi0JvRjtCx0YvQtSDQuNC30LzQtdC90LXQvdC40Y8sINC90LUg0L/QvtC00LPQvtGC0L7QstC70LXQvdC90YvQtSDQuiDRgdC+0YXRgNCw0L3QtdC90LjRjiwg0LHRg9C00YPRgiDQv9C+0YLQtdGA0Y/QvdGLINC/0YDQuCDQtNCw0L3QvdC+0LkgIgogItC+0L/QtdGA0LDRhtC40LguIgogCi0jOiBsaWIvaW5kZXgudGNsOjM5NAorIzogbGliL2luZGV4LnRjbDo0MDkKIG1zZ2lkICJEbyBOb3RoaW5nIgogbXNnc3RyICLQndC40YfQtdCz0L4g0L3QtSDQtNC10LvQsNGC0YwiCiAKKyM6IGxpYi9pbmRleC50Y2w6NDI3Cittc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQsiDQstGL0LHRgNCw0L3Ri9GFINGE0LDQudC70LDRhSIKKworIzogbGliL2luZGV4LnRjbDo0MzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgJXMiCittc2dzdHIgItCe0YLQvNC10L3QsCDQuNC30LzQtdC90LXQvdC40Lkg0LIgJXMiCisKICM6IGxpYi9tZXJnZS50Y2w6MTMKIG1zZ2lkICIiCiAiQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgogIlxuIgogIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCiBtc2dzdHIgIiIKLSLQndC10LLQvtC30LzQvtC20L3QviDQstGL0L/QvtC70L3QuNGC0Ywg0L7QsdGK0LXQtNC40L3QtdC90LjQtSDQstC+INCy0YDQtdC80Y8g0LjRgdC/0YDQsNCy0LvQtdC90LjRjy5cbiIKKyLQndC10LLQvtC30LzQvtC20L3QviDQstGL0L/QvtC70L3QuNGC0Ywg0YHQu9C40Y/QvdC40LUg0LLQviDQstGA0LXQvNGPINC40YHQv9GA0LDQstC70LXQvdC40Y8uXG4iCiAiXG4iCiAi0JfQsNCy0LXRgNGI0LjRgtC1INC40YHQv9GA0LDQstC70LXQvdC40LUg0LTQsNC90L3QvtCz0L4g0YHQvtGB0YLQvtGP0L3QuNGPINC/0LXRgNC10LQg0LLRi9C/0L7Qu9C90LXQvdC40LXQvCDQvtC/0LXRgNCw0YbQuNC4ICIKLSLQvtCx0YrQtdC00LjQvdC10L3QuNGPLlxuIgorItGB0LvQuNGP0L3QuNGPLlxuIgogCiAjOiBsaWIvbWVyZ2UudGNsOjI3CiBtc2dpZCAiIgpAQCAtMTU1OSw3ICsxNzQyLDcgQEAKICJcbiIKICLQrdGC0L4g0LHRg9C00LXRgiDRgdC00LXQu9Cw0L3QviDRgdC10LnRh9Cw0YEg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LguXG4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6NDQKKyM6IGxpYi9tZXJnZS50Y2w6NDUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKQEAgLTE1NjksMTQgKzE3NTIsMTQgQEAKICJZb3UgbXVzdCByZXNvbHZlIHRoZW0sIHN0YWdlIHRoZSBmaWxlLCBhbmQgY29tbWl0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50ICIKICJtZXJnZS4gIE9ubHkgdGhlbiBjYW4geW91IGJlZ2luIGFub3RoZXIgbWVyZ2UuXG4iCiBtc2dzdHIgIiIKLSLQn9GA0LXQtNGL0LTRg9GJ0LXQtSDQvtCx0YrQtdC00LjQvdC10L3QuNC1INC90LUg0LfQsNCy0LXRgNGI0LXQvdC+INC40Lct0LfQsCDQutC+0L3RhNC70LjQutGC0LAuXG4iCisi0J/RgNC10LTRi9C00YPRidC10LUg0YHQu9C40Y/QvdC40LUg0L3QtSDQt9Cw0LLQtdGA0YjQtdC90L4g0LjQty3Qt9CwINC60L7QvdGE0LvQuNC60YLQsC5cbiIKICJcbiIKLSLQlNC70Y8g0YTQsNC50LvQsCAlcyDQstC+0LfQvdC40Log0LrQvtC90YTQu9C40LrRgiDQvtCx0YrQtdC00LjQvdC10L3QuNGPLlxuIgorItCU0LvRjyDRhNCw0LnQu9CwICVzINCy0L7Qt9C90LjQuiDQutC+0L3RhNC70LjQutGCINGB0LvQuNGP0L3QuNGPLlxuIgogIlxuIgogItCg0LDQt9GA0LXRiNC40YLQtSDQutC+0L3RhNC70LjQutGCLCDQv9C+0LTQs9C+0YLQvtCy0YzRgtC1INGE0LDQudC7INC4INGB0L7RhdGA0LDQvdC40YLQtS4g0KLQvtC70YzQutC+INC/0L7RgdC70LUg0Y3RgtC+0LPQviDQvNC+0LbQvdC+ICIKLSLQvdCw0YfQsNGC0Ywg0YHQu9C10LTRg9GO0YnQtdC1INC+0LHRitC10LTQuNC90LXQvdC40LUuXG4iCisi0L3QsNGH0LDRgtGMINGB0LvQtdC00YPRjtGJ0LXQtSDRgdC70LjRj9C90LjQtS5cbiIKIAotIzogbGliL21lcmdlLnRjbDo1NAorIzogbGliL21lcmdlLnRjbDo1NQogIywgdGNsLWZvcm1hdAogbXNnaWQgIiIKICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCkBAIC0xNTkwLDM2ICsxNzczLDM3IEBACiAiXG4iCiAi0KTQsNC50LsgJXMg0LjQt9C80LXQvdC10L0uXG4iCiAiXG4iCi0i0J/QvtC00LPQvtGC0L7QstGM0YLQtSDQuCDRgdC+0YXRgNCw0L3QuNGC0LUg0LjQt9C80LXQvdC40Y8g0L/QtdGA0LXQtCDQvdCw0YfQsNC70L7QvCDQvtCx0YrQtdC00LjQvdC10L3QuNGPLiDQkiDRgdC70YPRh9Cw0LUgIgotItC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtC4INGN0YLQviDQv9C+0LfQstC+0LvQuNGCINC/0YDQtdGA0LLQsNGC0Ywg0L7Qv9C10YDQsNGG0LjRjiDQvtCx0YrQtdC00LjQvdC10L3QuNGPLlxuIgorItCf0L7QtNCz0L7RgtC+0LLRjNGC0LUg0Lgg0YHQvtGF0YDQsNC90LjRgtC1INC40LfQvNC10L3QuNGPINC/0LXRgNC10LQg0L3QsNGH0LDQu9C+0Lwg0YHQu9C40Y/QvdC40Y8uINCSINGB0LvRg9GH0LDQtSAiCisi0L3QtdC+0LHRhdC+0LTQuNC80L7RgdGC0Lgg0Y3RgtC+INC/0L7Qt9Cy0L7Qu9C40YIg0L/RgNC10YDQstCw0YLRjCDQvtC/0LXRgNCw0YbQuNGOINGB0LvQuNGP0L3QuNGPLlxuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEwNgorIzogbGliL21lcmdlLnRjbDoxMDcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIlcyBvZiAlcyIKIG1zZ3N0ciAiJXMg0LjQtyAlcyIKIAotIzogbGliL21lcmdlLnRjbDoxMTkKKyM6IGxpYi9tZXJnZS50Y2w6MTIwCisjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCi1tc2dzdHIgItCe0LHRitC10LTQuNC90LXQvdC40LUgJXMg0LggJXMuLi4iCittc2dzdHIgItCh0LvQuNGP0L3QuNC1ICVzINC4ICVzLi4uIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEzMAorIzogbGliL21lcmdlLnRjbDoxMzEKIG1zZ2lkICJNZXJnZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiIKLW1zZ3N0ciAi0J7QsdGK0LXQtNC40L3QtdC90LjQtSDRg9GB0L/QtdGI0L3QviDQt9Cw0LLQtdGA0YjQtdC90L4uIgorbXNnc3RyICLQodC70LjRj9C90LjQtSDRg9GB0L/QtdGI0L3QviDQt9Cw0LLQtdGA0YjQtdC90L4uIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEzMgorIzogbGliL21lcmdlLnRjbDoxMzMKIG1zZ2lkICJNZXJnZSBmYWlsZWQuICBDb25mbGljdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LLQtdGA0YjQuNGC0Ywg0L7QsdGK0LXQtNC40L3QtdC90LjQtS4g0KLRgNC10LHRg9C10YLRgdGPINGA0LDQt9GA0LXRiNC10L3QuNC1INC60L7QvdGE0LvQuNC60YLQsC4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNCy0LXRgNGI0LjRgtGMINGB0LvQuNGP0L3QuNC1LiDQotGA0LXQsdGD0LXRgtGB0Y8g0YDQsNC30YDQtdGI0LXQvdC40LUg0LrQvtC90YTQu9C40LrRgtCwLiIKIAotIzogbGliL21lcmdlLnRjbDoxNTcKKyM6IGxpYi9tZXJnZS50Y2w6MTU4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTWVyZ2UgSW50byAlcyIKLW1zZ3N0ciAi0J7QsdGK0LXQtNC40L3QuNGC0Ywg0YEgJXMiCittc2dzdHIgItCh0LvQuNGP0L3QuNC1INGBICVzIgogCi0jOiBsaWIvbWVyZ2UudGNsOjE3NgorIzogbGliL21lcmdlLnRjbDoxNzcKIG1zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKLW1zZ3N0ciAi0JLQtdGA0YHQuNGPINC00LvRjyDQvtCx0YrQtdC00LjQvdC10L3QuNGPIgorbXNnc3RyICLQktC10YDRgdC40Y8sINGBINC60L7RgtC+0YDQvtC5INC/0YDQvtCy0LXRgdGC0Lgg0YHQu9C40Y/QvdC40LUiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjExCisjOiBsaWIvbWVyZ2UudGNsOjIxMgogbXNnaWQgIiIKICJDYW5ub3QgYWJvcnQgd2hpbGUgYW1lbmRpbmcuXG4iCiAiXG4iCkBAIC0xNjI5LDcgKzE4MTMsNyBAQAogIlxuIgogItCX0LDQstC10YDRiNC40YLQtSDRgtC10LrRg9GJ0LXQtSDQuNGB0L/RgNCw0LLQu9C10L3QuNC1INGB0L7RhdGA0LDQvdC10L3QvdC+0LPQviDRgdC+0YHRgtC+0Y/QvdC40Y8uXG4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjIxCisjOiBsaWIvbWVyZ2UudGNsOjIyMgogbXNnaWQgIiIKICJBYm9ydCBtZXJnZT9cbiIKICJcbiIKQEAgLTE2MzcsMTMgKzE4MjEsMTMgQEAKICJcbiIKICJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKIG1zZ3N0ciAiIgotItCf0YDQtdGA0LLQsNGC0Ywg0L7QsdGK0LXQtNC40L3QtdC90LjQtT9cbiIKKyLQn9GA0LXRgNCy0LDRgtGMINC+0L/QtdGA0LDRhtC40Y4g0YHQu9C40Y/QvdC40Y8/XG4iCiAiXG4iCi0i0J/RgNC10YDRi9Cy0LDQvdC40LUg0L7QsdGK0LXQtNC40L3QtdC90LjRjyDQv9GA0LjQstC10LTQtdGCINC6INC/0L7RgtC10YDQtSAq0JLQodCV0KUqINC90LXRgdC+0YXRgNCw0L3QtdC90L3Ri9GFINC40LfQvNC10L3QtdC90LjQuS5cbiIKKyLQn9GA0LXRgNGL0LLQsNC90LjQtSDRjdGC0L7QuSDQvtC/0LXRgNCw0YbQuNC4INC/0YDQuNCy0LXQtNC10YIg0Log0L/QvtGC0LXRgNC1ICrQktCh0JXQpSog0L3QtdGB0L7RhdGA0LDQvdC10L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5LlxuIgogIlxuIgogItCf0YDQvtC00L7Qu9C20LjRgtGMPyIKIAotIzogbGliL21lcmdlLnRjbDoyMjcKKyM6IGxpYi9tZXJnZS50Y2w6MjI4CiBtc2dpZCAiIgogIlJlc2V0IGNoYW5nZXM/XG4iCiAiXG4iCkBAIC0xNjUxLDEzMCArMTgzNSwzNDYgQEAKICJcbiIKICJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKIG1zZ3N0ciAiIgotItCf0YDQtdGA0LLQsNGC0Ywg0L7QsdGK0LXQtNC40L3QtdC90LjQtT9cbiIKKyLQn9GA0LXRgNCy0LDRgtGMINC+0L/QtdGA0LDRhtC40Y4g0YHQu9C40Y/QvdC40Y8/XG4iCiAiXG4iCi0i0J/RgNC10YDRi9Cy0LDQvdC40LUg0L7QsdGK0LXQtNC40L3QtdC90LjRjyDQv9GA0LjQstC10LTQtdGCINC6INC/0L7RgtC10YDQtSAq0JLQodCV0KUqINC90LXRgdC+0YXRgNCw0L3QtdC90L3Ri9GFINC40LfQvNC10L3QtdC90LjQuS5cbiIKKyLQn9GA0LXRgNGL0LLQsNC90LjQtSDRjdGC0L7QuSDQvtC/0LXRgNCw0YbQuNC4INC/0YDQuNCy0LXQtNC10YIg0Log0L/QvtGC0LXRgNC1ICrQktCh0JXQpSog0L3QtdGB0L7RhdGA0LDQvdC10L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5LlxuIgogIlxuIgogItCf0YDQvtC00L7Qu9C20LjRgtGMPyIKIAotIzogbGliL21lcmdlLnRjbDoyMzgKKyM6IGxpYi9tZXJnZS50Y2w6MjM5CiBtc2dpZCAiQWJvcnRpbmciCiBtc2dzdHIgItCf0YDQtdGA0YvQstCw0Y4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjM4CisjOiBsaWIvbWVyZ2UudGNsOjIzOQogbXNnaWQgImZpbGVzIHJlc2V0IgogbXNnc3RyICLQuNC30LzQtdC90LXQvdC40Y8g0LIg0YTQsNC50LvQsNGFINC+0YLQvNC10L3QtdC90YsiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjY1CisjOiBsaWIvbWVyZ2UudGNsOjI2NwogbXNnaWQgIkFib3J0IGZhaWxlZC4iCiBtc2dzdHIgItCf0YDQtdGA0LLQsNGC0Ywg0L3QtSDRg9C00LDQu9C+0YHRjC4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjY3CisjOiBsaWIvbWVyZ2UudGNsOjI2OQogbXNnaWQgIkFib3J0IGNvbXBsZXRlZC4gIFJlYWR5LiIKIG1zZ3N0ciAi0J/RgNC10YDQstCw0L3Qvi4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjk1CisjOiBsaWIvbWVyZ2V0b29sLnRjbDo4Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCx0LDQt9C+0LLRg9GOINCy0LXRgNGB0LjRjiDQtNC70Y8g0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtCwPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6OQorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhpcyBicmFuY2g/IgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LLQtdGA0YHQuNGOINGN0YLQvtC5INCy0LXRgtCy0Lgg0LTQu9GPINGA0LDQt9GA0LXRiNC10L3QuNGPINC60L7QvdGE0LvQuNC60YLQsD8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCy0LXRgNGB0LjRjiDQtNGA0YPQs9C+0Lkg0LLQtdGC0LLQuCDQtNC70Y8g0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtCwPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKKyJcbiIKKyIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIlxuIgorIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCittc2dzdHIgIiIKKyLQktC90LjQvNCw0L3QuNC1ISDQodC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5INC/0L7QutCw0LfRi9Cy0LDQtdGCINGC0L7Qu9GM0LrQviDQutC+0L3RhNC70LjQutGC0YPRjtGJ0LjQtSDQvtGC0LvQuNGH0LjRjy5cbiIKKyJcbiIKKyIlcyDQsdGD0LTQtdGCINC/0LXRgNC10L/QuNGB0LDQvS5cbiIKKyJcbiIKKyLQrdGC0L4g0LTQtdC50YHRgtCy0LjQtSDQvNC+0LbQvdC+INC+0YLQvNC10L3QuNGC0Ywg0YLQvtC70YzQutC+INC/0LXRgNC10LfQsNC/0YPRgdC60L7QvCDQvtC/0LXRgNCw0YbQuNC4INGB0LvQuNGP0L3QuNGPLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIHNlZW1zIHRvIGhhdmUgdW5yZXNvbHZlZCBjb25mbGljdHMsIHN0aWxsIHN0YWdlPyIKK21zZ3N0ciAiIgorItCk0LDQudC7ICVzINC60LDQttC10YLRgdGPINGB0L7QtNC10YDQttC40YIg0L3QtdC+0LHRgNCw0LHQvtGC0LDQvdGL0LUg0LrQvtC90YTQu9C40LrRgtGLLiAiCisi0J/RgNC+0LTQvtC70LbQuNGC0Ywg0L/QvtC00LPQvtGC0L7QstC60YMg0Log0YHQvtGF0YDQsNC90LXQvdC40Y4/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKK21zZ3N0ciAi0JTQvtCx0LDQstC70Y/RjiDRgNC10LfRg9C70YzRgtCw0YIg0YDQsNC30YDQtdGI0LXQvdC40Y8g0LTQu9GPICVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDEKK21zZ2lkICJDYW5ub3QgcmVzb2x2ZSBkZWxldGlvbiBvciBsaW5rIGNvbmZsaWN0cyB1c2luZyBhIHRvb2wiCittc2dzdHIgIiIKKyLQn9GA0L7Qs9GA0LDQvNC80LAg0YHQu9C40Y/QvdC40Y8g0L3QtSDQvtCx0YDQsNCx0LDRgtGL0LLQsNC10YIg0LrQvtC90YTQu9C40LrRgtGLINGBINGD0LTQsNC70LXQvdC40LXQvCDQuNC70Lgg0YPRh9Cw0YHRgtC40LXQvCDRgdGB0YvQu9C+0LoiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgorbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgItCa0L7QvdGE0LvQuNC60YLRg9GO0YnQuNC5INGE0LDQudC7INC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgorbXNnc3RyICInJXMnINC90LUg0Y/QstC70Y/QtdGC0YHRjyDQv9GA0L7Qs9GA0LDQvNC80L7QuSDRgdC70LjRj9C90LjRjyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MjY4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgorbXNnc3RyICLQndC10LjQt9Cy0LXRgdGC0L3QsNGPINC/0YDQvtCz0YDQsNC80LzQsCDRgdC70LjRj9C90LjRjyAnJXMnIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMDMKK21zZ2lkICJNZXJnZSB0b29sIGlzIGFscmVhZHkgcnVubmluZywgdGVybWluYXRlIGl0PyIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwINGB0LvQuNGP0L3QuNGPINGD0LbQtSDRgNCw0LHQvtGC0LDQtdGCLiDQn9GA0LXRgNCy0LDRgtGMPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCisiJXMiCittc2dzdHIgIiIKKyLQntGI0LjQsdC60LAg0L/QvtC70YPRh9C10L3QuNGPINCy0LXRgNGB0LjQuTpcbiIKKyIlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBzdGFydCB0aGUgbWVyZ2UgdG9vbDpcbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorItCe0YjQuNCx0LrQsCDQt9Cw0L/Rg9GB0LrQsCDQv9GA0L7Qs9GA0LDQvNC80Ysg0YHQu9C40Y/QvdC40Y86XG4iCisiXG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM0NworbXNnaWQgIlJ1bm5pbmcgbWVyZ2UgdG9vbC4uLiIKK21zZ3N0ciAi0JfQsNC/0YPRgdC6INC/0YDQvtCz0YDQsNC80LzRiyDRgdC70LjRj9C90LjRjy4uLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6Mzc1IGxpYi9tZXJnZXRvb2wudGNsOjM4MworbXNnaWQgIk1lcmdlIHRvb2wgZmFpbGVkLiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINCy0YvQv9C+0LvQvdC10L3QuNGPINC/0YDQvtCz0YDQsNC80LzRiyDRgdC70LjRj9C90LjRjy4iCisKKyM6IGxpYi9vcHRpb24udGNsOjExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAi0J7RiNC40LHQutCwINCyINCz0LvQvtCx0LDQu9GM0L3QvtC5INGD0YHRgtCw0L3QvtCy0LrQtSDQutC+0LTQuNGA0L7QstC60LggJyVzJyIKKworIzogbGliL29wdGlvbi50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90LDRjyDQutC+0LTQuNGA0L7QstC60LAg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjzogJyVzJyIKKworIzogbGliL29wdGlvbi50Y2w6MTE3CiBtc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKIG1zZ3N0ciAi0JLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC90LDRgdGC0YDQvtC50LrQuCDQv9C+INGD0LzQvtC70YfQsNC90LjRjiIKIAotIzogbGliL29wdGlvbi50Y2w6OTkKKyM6IGxpYi9vcHRpb24udGNsOjEyMQogbXNnaWQgIlNhdmUiCiBtc2dzdHIgItCh0L7RhdGA0LDQvdC40YLRjCIKIAotIzogbGliL29wdGlvbi50Y2w6MTA5CisjOiBsaWIvb3B0aW9uLnRjbDoxMzEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIlcyBSZXBvc2l0b3J5IgotbXNnc3RyICLQtNC70Y8g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyAlcyIKK21zZ3N0ciAi0JTQu9GPINGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gJXMiCiAKLSM6IGxpYi9vcHRpb24udGNsOjExMAorIzogbGliL29wdGlvbi50Y2w6MTMyCiBtc2dpZCAiR2xvYmFsIChBbGwgUmVwb3NpdG9yaWVzKSIKIG1zZ3N0ciAi0J7QsdGJ0LjQtSAo0LTQu9GPINCy0YHQtdGFINGA0LXQv9C+0LfQuNGC0L7RgNC40LXQsikiCiAKLSM6IGxpYi9vcHRpb24udGNsOjExNgorIzogbGliL29wdGlvbi50Y2w6MTM4CiBtc2dpZCAiVXNlciBOYW1lIgogbXNnc3RyICLQmNC80Y8g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMTcKKyM6IGxpYi9vcHRpb24udGNsOjEzOQogbXNnaWQgIkVtYWlsIEFkZHJlc3MiCiBtc2dzdHIgItCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMTkKKyM6IGxpYi9vcHRpb24udGNsOjE0MQogbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgotbXNnc3RyICLQodGD0LzQvNCw0YDQvdGL0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuSDQv9GA0Lgg0L7QsdGK0LXQtNC40L3QtdC90LjQuCIKK21zZ3N0ciAi0KHRg9C80LzQsNGA0L3Ri9C5INC60L7QvNC80LXQvdGC0LDRgNC40Lkg0L/RgNC4INGB0LvQuNGP0L3QuNC4IgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjAKKyM6IGxpYi9vcHRpb24udGNsOjE0MgogbXNnaWQgIk1lcmdlIFZlcmJvc2l0eSIKLW1zZ3N0ciAi0KPRgNC+0LLQtdC90Ywg0LTQtdGC0LDQu9GM0L3QvtGB0YLQuCDRgdC+0L7QsdGJ0LXQvdC40Lkg0L/RgNC4INC+0LHRitC10LTQuNC90LXQvdC40LgiCittc2dzdHIgItCj0YDQvtCy0LXQvdGMINC00LXRgtCw0LvRjNC90L7RgdGC0Lgg0YHQvtC+0LHRidC10L3QuNC5INC/0YDQuCDRgdC70LjRj9C90LjQuCIKIAotIzogbGliL29wdGlvbi50Y2w6MTIxCisjOiBsaWIvb3B0aW9uLnRjbDoxNDMKIG1zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgotbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC+0YLRh9C10YIg0L7QsSDQuNC30LzQtdC90LXQvdC40Y/RhSDQv9C+0YHQu9C1INC+0LHRitC10LTQuNC90LXQvdC40Y8iCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0L7RgtGH0LXRgiDQvtCxINC40LfQvNC10L3QtdC90LjRj9GFINC/0L7RgdC70LUg0YHQu9C40Y/QvdC40Y8iCiAKLSM6IGxpYi9vcHRpb24udGNsOjEyMworIzogbGliL29wdGlvbi50Y2w6MTQ0Cittc2dpZCAiVXNlIE1lcmdlIFRvb2wiCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDQtNC70Y8g0YHQu9C40Y/QvdC40Y8g0L/RgNC+0LPRgNCw0LzQvNGDIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDYKIG1zZ2lkICJUcnVzdCBGaWxlIE1vZGlmaWNhdGlvbiBUaW1lc3RhbXBzIgogbXNnc3RyICLQlNC+0LLQtdGA0Y/RgtGMINCy0YDQtdC80LXQvdC4INC80L7QtNC40YTQuNC60LDRhtC40Lgg0YTQsNC50LvQsCIKIAotIzogbGliL29wdGlvbi50Y2w6MTI0CisjOiBsaWIvb3B0aW9uLnRjbDoxNDcKIG1zZ2lkICJQcnVuZSBUcmFja2luZyBCcmFuY2hlcyBEdXJpbmcgRmV0Y2giCiBtc2dzdHIgItCn0LjRgdGC0LrQsCDQstC10YLQstC10Lkg0YHQu9C10LbQtdC90LjRjyDQv9GA0Lgg0L/QvtC70YPRh9C10L3QuNC4INC40LfQvNC10L3QtdC90LjQuSIKIAotIzogbGliL29wdGlvbi50Y2w6MTI1CisjOiBsaWIvb3B0aW9uLnRjbDoxNDgKIG1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKIG1zZ3N0ciAi0JjQvNGPINC90L7QstC+0Lkg0LLQtdGC0LLQuCDQstC30Y/RgtGMINC40Lcg0LjQvNC10L0g0LLQtdGC0LLQtdC5INGB0LvQtdC20LXQvdC40Y8iCiAKLSM6IGxpYi9vcHRpb24udGNsOjEyNgorIzogbGliL29wdGlvbi50Y2w6MTQ5Cittc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCittc2dzdHIgItCf0L7QuNGB0Log0LrQvtC/0LjQuSDRgtC+0LvRjNC60L4g0LIg0LjQt9C80LXQvdGR0L3QvdGL0YUg0YTQsNC50LvQsNGFIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTAKK21zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKK21zZ3N0ciAi0JzQuNC90LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdC40LzQstC+0LvQvtCyINC00LvRjyDQv9C+0LjRgdC60LAg0LrQvtC/0LjQuSIKKworIzogbGliL29wdGlvbi50Y2w6MTUxCittc2dpZCAiQmxhbWUgSGlzdG9yeSBDb250ZXh0IFJhZGl1cyAoZGF5cykiCittc2dzdHIgItCg0LDQtNC40YPRgSDQuNGB0YLQvtGA0LjRh9C10YHQutC+0LPQviDQutC+0L3RgtC10LrRgdGC0LAgKNCyINC00L3Rj9GFKSIKKworIzogbGliL29wdGlvbi50Y2w6MTUyCiBtc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKIG1zZ3N0ciAi0KfQuNGB0LvQviDRgdGC0YDQvtC6INCyINC60L7QvdGC0LXQutGB0YLQtSBkaWZmIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjcKKyM6IGxpYi9vcHRpb24udGNsOjE1MwogbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCi1tc2dzdHIgItCo0LjRgNC40L3QsCDQutC+0LzQvNC10L3RgtCw0YDQuNGPINC6INGB0L7RgdGC0L7Rj9C90LjRjjoiCittc2dzdHIgItCo0LjRgNC40L3QsCDRgtC10LrRgdGC0LAg0LrQvtC80LzQtdC90YLQsNGA0LjRjyIKIAotIzogbGliL29wdGlvbi50Y2w6MTI4CisjOiBsaWIvb3B0aW9uLnRjbDoxNTQKIG1zZ2lkICJOZXcgQnJhbmNoIE5hbWUgVGVtcGxhdGUiCiBtc2dzdHIgItCo0LDQsdC70L7QvSDQtNC70Y8g0LjQvNC10L3QuCDQvdC+0LLQvtC5INCy0LXRgtCy0LgiCiAKLSM6IGxpYi9vcHRpb24udGNsOjE5MgorIzogbGliL29wdGlvbi50Y2w6MTU1Cittc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgorbXNnc3RyICLQmtC+0LTQuNGA0L7QstC60LAg0YHQvtC00LXRgNC20LDQvdC40Y8g0YTQsNC50LvQsCDQv9C+INGD0LzQvtC70YfQsNC90LjRjiIKKworIzogbGliL29wdGlvbi50Y2w6MjAzCittc2dpZCAiQ2hhbmdlIgorbXNnc3RyICLQmNC30LzQtdC90LjRgtGMIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMzAKIG1zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKIG1zZ3N0ciAi0KHQu9C+0LLQsNGA0Ywg0LTQu9GPINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPOiIKIAotIzogbGliL29wdGlvbi50Y2w6MjE2CisjOiBsaWIvb3B0aW9uLnRjbDoyNTQKIG1zZ2lkICJDaGFuZ2UgRm9udCIKLW1zZ3N0ciAi0JjQt9C80LXQvdC40YLRjCDRiNGA0LjRhNGCIgorbXNnc3RyICLQmNC30LzQtdC90LjRgtGMIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoyMjAKKyM6IGxpYi9vcHRpb24udGNsOjI1OAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNob29zZSAlcyIKIG1zZ3N0ciAi0JLRi9Cx0LXRgNC40YLQtSAlcyIKIAogIyBjYXJib24gY29weQotIzogbGliL29wdGlvbi50Y2w6MjI2CisjOiBsaWIvb3B0aW9uLnRjbDoyNjQKIG1zZ2lkICJwdC4iCi1tc2dzdHIgIiIKK21zZ3N0ciAicHQuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoyNDAKKyM6IGxpYi9vcHRpb24udGNsOjI3OAogbXNnaWQgIlByZWZlcmVuY2VzIgogbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LgiCiAKLSM6IGxpYi9vcHRpb24udGNsOjI3NQorIzogbGliL29wdGlvbi50Y2w6MzE0CiBtc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKIG1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvQvdC+0YHRgtGM0Y4g0YHQvtGF0YDQsNC90LjRgtGMINC90LDRgdGC0YDQvtC50LrQuDoiCiAKKyM6IGxpYi9yZW1vdGUudGNsOjE2MworbXNnaWQgIlJlbW92ZSBSZW1vdGUiCittc2dzdHIgItCj0LTQsNC70LjRgtGMINGB0YHRi9C70LrRgyDQvdCwINCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE2OAorbXNnaWQgIlBydW5lIGZyb20iCittc2dzdHIgItCn0LjRgdGC0LrQsCIKKworIzogbGliL3JlbW90ZS50Y2w6MTczCittc2dpZCAiRmV0Y2ggZnJvbSIKK21zZ3N0ciAi0J/QvtC70YPRh9C10L3QuNC1INC40LciCisKKyM6IGxpYi9yZW1vdGUudGNsOjIxNQorbXNnaWQgIlB1c2ggdG8iCittc2dzdHIgItCe0YLQv9GA0LDQstC40YLRjCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE5Cittc2dpZCAiQWRkIFJlbW90ZSIKK21zZ3N0ciAi0JfQsNGA0LXQs9C40YHRgtGA0LjRgNC+0LLQsNGC0Ywg0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjI0Cittc2dpZCAiQWRkIE5ldyBSZW1vdGUiCittc2dzdHIgItCU0L7QsdCw0LLQuNGC0Ywg0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjI4IGxpYi90b29sc19kbGcudGNsOjM2Cittc2dpZCAiQWRkIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDozNworbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgorbXNnc3RyICLQmNC90YTQvtGA0LzQsNGG0LjRjyDQviDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKK21zZ2lkICJMb2NhdGlvbjoiCittc2dzdHIgItCf0L7Qu9C+0LbQtdC90LjQtToiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MgorbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgorbXNnc3RyICLQodC70LXQtNGD0Y7RidCw0Y8g0L7Qv9C10YDQsNGG0LjRjyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjY1Cittc2dpZCAiRmV0Y2ggSW1tZWRpYXRlbHkiCittc2dzdHIgItCh0LrQsNGH0LDRgtGMINGB0YDQsNC30YMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3MQorbXNnaWQgIkluaXRpYWxpemUgUmVtb3RlIFJlcG9zaXRvcnkgYW5kIFB1c2giCittc2dzdHIgItCY0L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDRgtGMINCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0Lgg0L7RgtC/0YDQsNCy0LjRgtGMIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzcKK21zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgorbXNnc3RyICLQkdC+0LvRjNGI0LUg0L3QuNGH0LXQs9C+INC90LUg0LTQtdC70LDRgtGMIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTAxCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAi0KPQutCw0LbQuNGC0LUg0L3QsNC30LLQsNC90LjQtSDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8uIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCittc2dzdHIgItCd0LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDQvdCw0LfQstCw0L3QuNC1INCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyAnJXMnLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LTQvtCx0LDQstC40YLRjCAnJXMnINC40LcgJyVzJy4gIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMzIGxpYi90cmFuc3BvcnQudGNsOjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmZXRjaCAlcyIKK21zZ3N0ciAi0L/QvtC70YPRh9C10L3QuNC1ICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgdGhlICVzIgorbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC40LUgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQuNC90LjRhtC40LDQu9C40YDQvtCy0LDRgtGMINGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LIgJyVzJy4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMgbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NjMKKyM6IGxpYi90cmFuc3BvcnQudGNsOjgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicHVzaCAlcyIKK21zZ3N0ciAi0L7RgtC/0YDQsNCy0LjRgtGMICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB1cCB0aGUgJXMgKGF0ICVzKSIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutCwICVzICjQsiAlcykiCisKICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozNAotbXNnaWQgIkRlbGV0ZSBSZW1vdGUgQnJhbmNoIgotbXNnc3RyICLQo9C00LDQu9C40YLRjCDQstC90LXRiNC90Y7RjiDQstC10YLQstGMIgorbXNnaWQgIkRlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0LLQtdGC0LLQuCDQstC+INCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCiAKICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDcKIG1zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCiBtc2dzdHIgItCY0Lcg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMjMKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTAgbGliL3RyYW5zcG9ydC50Y2w6MTM0CiBtc2dpZCAiUmVtb3RlOiIKIG1zZ3N0ciAi0LLQvdC10YjQvdC40Lk6IgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjEzOAotbXNnaWQgIkFyYml0cmFyeSBVUkw6IgotbXNnc3RyICLQv9C+INGD0LrQsNC30LDQvdC90L7QvNGDIFVSTDoiCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjE0OQorbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCittc2dzdHIgItCj0LrQsNC30LDQvdC+0LUg0L/QvtC70L7QttC10L3QuNC1OiIKIAogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4NAogbXNnaWQgIkJyYW5jaGVzIgpAQCAtMTc4NiwxNSArMjE4NiwxNSBAQAogCiAjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMQogbXNnaWQgIk1lcmdlZCBJbnRvOiIKLW1zZ3N0ciAi0J7QsdGK0LXQtNC40L3QtdC90L4g0YE6IgorbXNnc3RyICLQodC70LjRj9C90LjQtSDRgToiCiAKICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5CiBtc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgotbXNnc3RyICLQktGB0LXQs9C00LAgKNC90LUg0LLRi9C/0L7Qu9C90Y/RgtGMINC/0YDQvtCy0LXRgNC60YMg0L7QsdGK0LXQtNC40L3QtdC90LjQuSkiCittc2dzdHIgItCS0YHQtdCz0LTQsCAo0L3QtSDQstGL0L/QvtC70L3Rj9GC0Ywg0L/RgNC+0LLQtdGA0LrRgyDQvdCwINGB0LvQuNGP0L3QuNC1KSIKIAogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTIKIG1zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCi1tc2dzdHIgItCU0LvRjyDQvtC/0YbQuNC4ICfQntCx0YrQtdC00LjQvdC10L3QviDRgScg0YLRgNC10LHRg9C10YLRgdGPINGD0LrQsNC30LDRgtGMINCy0LXRgtCy0YwuIgorbXNnc3RyICLQlNC70Y8g0L7Qv9GG0LjQuCAn0KHQu9C40Y/QvdC40LUg0YEnINGC0YDQtdCx0YPQtdGC0YHRjyDRg9C60LDQt9Cw0YLRjCDQstC10YLQstGMLiIKIAogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODQKICMsIHRjbC1mb3JtYXQKQEAgLTE4MDMsNyArMjIwMyw4IEBACiAiXG4iCiAiIC0gJXMiCiBtc2dzdHIgIiIKLSLQodC70LXQtNGD0Y7RidC40LUg0LLQtdGC0LLQuCDQvtCx0YrQtdC00LjQvdC10L3RiyDRgSAlcyDQvdC1INC/0L7Qu9C90L7RgdGC0YzRjjpcbiIKKyLQodC70LXQtNGD0Y7RidC40LUg0LLQtdGC0LLQuCDQvNC+0LPRg9GCINCx0YvRgtGMINC+0LHRitC10LTQuNC90LXQvdGLINGBICVzINC/0YDQuCDQv9C+0LzQvtGJ0Lgg0L7Qv9C10YDQsNGG0LjQuCDRgdC70LjRj9C90LjRjzpcbiIKKyJcbiIKICIgLSAlcyIKIAogIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODkKQEAgLTE4MTIsNyArMjIxMyw3IEBACiAiT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCiAibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCiBtc2dzdHIgIiIKLSLQntC00LjQvSDQuNC70Lgg0L3QtdGB0LrQvtC70YzQutC+INGC0LXRgdGC0L7QsiDQvdCwINC+0LHRitC10LTQuNC90LXQvdC40LUg0L3QtSDQv9GA0L7RiNC70LgsINC/0L7RgtC+0LzRgyDRh9GC0L4g0JLRiyDQvdC1ICIKKyLQndC10LrQvtGC0L7RgNGL0LUg0YLQtdGB0YLRiyDQvdCwINGB0LvQuNGP0L3QuNC1INC90LUg0L/RgNC+0YjQu9C4LCDQv9C+0YLQvtC80YMg0YfRgtC+INCS0Ysg0L3QtSAiCiAi0L/QvtC70YPRh9C40LvQuCDQvdC10L7QsdGF0L7QtNC40LzRi9C1INGB0L7RgdGC0L7Rj9C90LjRjy4g0J/QvtC/0YvRgtCw0LnRgtC10YHRjCDQv9C+0LvRg9GH0LjRgtGMINC40YUg0LjQtyAlcy4iCiAKICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA3CkBAIC0xODQzLDE3ICsyMjQ0LDIxIEBACiBtc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCiBtc2dzdHIgItCf0LXRgNC10YfQuNGC0YvQstCw0L3QuNC1ICVzLi4uICIKIAotIzogbGliL3JlbW90ZS50Y2w6MTY1Ci1tc2dpZCAiUHJ1bmUgZnJvbSIKLW1zZ3N0ciAi0KfQuNGB0YLQutCwIgorIzogbGliL3NlYXJjaC50Y2w6MjEKK21zZ2lkICJGaW5kOiIKK21zZ3N0ciAi0J/QvtC40YHQujoiCiAKLSM6IGxpYi9yZW1vdGUudGNsOjE3MAotbXNnaWQgIkZldGNoIGZyb20iCi1tc2dzdHIgItCf0L7Qu9GD0YfQtdC90LjQtSDQuNC3IgorIzogbGliL3NlYXJjaC50Y2w6MjMKK21zZ2lkICJOZXh0IgorbXNnc3RyICLQlNCw0LvRjNGI0LUiCiAKLSM6IGxpYi9yZW1vdGUudGNsOjIxMwotbXNnaWQgIlB1c2ggdG8iCi1tc2dzdHIgItCe0YLQv9GA0LDQstC40YLRjCIKKyM6IGxpYi9zZWFyY2gudGNsOjI0Cittc2dpZCAiUHJldiIKK21zZ3N0ciAi0J7QsdGA0LDRgtC90L4iCisKKyM6IGxpYi9zZWFyY2gudGNsOjI1Cittc2dpZCAiQ2FzZS1TZW5zaXRpdmUiCittc2dzdHIgItCY0LPQvS4g0LHQvtC70YzRiNC40LUv0LzQsNC70LXQvdGM0LrQuNC1IgogCiAjOiBsaWIvc2hvcnRjdXQudGNsOjIwIGxpYi9zaG9ydGN1dC50Y2w6NjEKIG1zZ2lkICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6IgpAQCAtMTg4OCwyNyArMjI5MywxOTIgQEAKIG1zZ2lkICJVbnJlY29nbml6ZWQgc3BlbGwgY2hlY2tlciIKIG1zZ3N0ciAi0J3QtdGA0LDRgdC/0L7Qt9C90LDQvdCw0Y8g0L/RgNC+0LPRgNCw0LzQvNCwINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6MTgwCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2CiBtc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCiBtc2dzdHIgItCY0YHQv9GA0LDQstC70LXQvdC40Lkg0L3QtSDQvdCw0LnQtNC10L3QviIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjM4MQorIzogbGliL3NwZWxsY2hlY2sudGNsOjM4OAogbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKIG1zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPINC/0YDQtdGA0LLQsNC70LAg0L/QtdGA0LXQtNCw0YfRgyDQtNCw0L3QvdGL0YUiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODUKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKIG1zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKIG1zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPIgogCisjOiBsaWIvc3Noa2V5LnRjbDozMQorbXNnaWQgIk5vIGtleXMgZm91bmQuIgorbXNnc3RyICLQmtC70Y7RhyDQvdC1INC90LDQudC00LXQvSIKKworIzogbGliL3NzaGtleS50Y2w6MzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgorbXNnc3RyICLQn9GD0LHQu9C40YfQvdGL0Lkg0LrQu9GO0Ycg0LjQtyAlcyIKKworIzogbGliL3NzaGtleS50Y2w6NDAKK21zZ2lkICJHZW5lcmF0ZSBLZXkiCittc2dzdHIgItCh0L7Qt9C00LDRgtGMINC60LvRjtGHIgorCisjOiBsaWIvc3Noa2V5LnRjbDo1NgorbXNnaWQgIkNvcHkgVG8gQ2xpcGJvYXJkIgorbXNnc3RyICLQodC60L7Qv9C40YDQvtCy0LDRgtGMINCyINCx0YPRhNC10YAg0L7QsdC80LXQvdCwIgorCisjOiBsaWIvc3Noa2V5LnRjbDo3MAorbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgorbXNnc3RyICLQktCw0Ygg0L/Rg9Cx0LvQuNGH0L3Ri9C5INC60LvRjtGHIE9wZW5TU0giCisKKyM6IGxpYi9zc2hrZXkudGNsOjc4Cittc2dpZCAiR2VuZXJhdGluZy4uLiIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtS4uLiIKKworIzogbGliL3NzaGtleS50Y2w6ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyLQntGI0LjQsdC60LAg0LfQsNC/0YPRgdC60LAgc3NoLWtleWdlbjpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3NzaGtleS50Y2w6MTExCittc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgorbXNnc3RyICLQmtC70Y7RhyDQvdC1INGB0L7Qt9C00LDQvS4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjExOAorbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VkZWQsIGJ1dCBubyBrZXlzIGZvdW5kLiIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSDQutC70Y7Rh9CwINC30LDQstC10YDRiNC40LvQvtGB0YwsINC90L4g0YDQtdC30YPQu9GM0YLQsNGCINC90LUg0LHRi9C7INC90LDQudC00LXQvSIKKworIzogbGliL3NzaGtleS50Y2w6MTIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiWW91ciBrZXkgaXMgaW46ICVzIgorbXNnc3RyICLQktCw0Ygg0LrQu9GO0Ycg0L3QsNGF0L7QtNC40YLRgdGPINCyOiAlcyIKKwogIzogbGliL3N0YXR1c19iYXIudGNsOjgzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKIG1zZ3N0ciAiJXMgLi4uICUqaSDQuNC3ICUqaSAlcyAoJTNpJSUpIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo2CisjOiBsaWIvdG9vbHMudGNsOjc1CiAjLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmV0Y2ggJXMiCi1tc2dzdHIgItC/0L7Qu9GD0YfQtdC90LjQtSAlcyIKK21zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCittc2dzdHIgItCX0LDQv9GD0YHQuiAlcyDRgtGA0LXQsdGD0LXRgiDQstGL0LHRgNCw0L3QvdC+0LPQviDRhNCw0LnQu9CwLiIKKworIzogbGliL3Rvb2xzLnRjbDo5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJXM/IgorbXNnc3RyICLQlNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDQt9Cw0L/Rg9GB0YLQuNGC0YwgJXM/IgorCisjOiBsaWIvdG9vbHMudGNsOjExMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2w6ICVzIgorbXNnc3RyICLQktGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdCw0Y8g0L7Qv9C10YDQsNGG0LjRjzogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUnVubmluZzogJXMiCittc2dzdHIgItCS0YvQv9C+0LvQvdC10L3QuNC1OiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNmdWxseTogJXMiCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCAlcyDRg9GB0L/QtdGI0L3QviDQt9Cw0LLQtdGA0YjQuNC70LDRgdGMLiIKKworIzogbGliL3Rvb2xzLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGZhaWxlZDogJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQv9GA0L7Qs9GA0LDQvNC80Ys6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgorbXNnaWQgIkFkZCBUb29sIgorbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMINCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90YPRjiDQvtC/0LXRgNCw0YbQuNGOIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAorbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgorbXNnc3RyICLQndC+0LLQsNGPINCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90LDRjyDQvtC/0LXRgNCw0YbQuNGPIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMworbXNnaWQgIkFkZCBnbG9iYWxseSIKK21zZ3N0ciAi0JTQvtCx0LDQstC40YLRjCDQtNC70Y8g0LLRgdC10YUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0NQorbXNnaWQgIlRvb2wgRGV0YWlscyIKK21zZ3N0ciAi0J7Qv9C40YHQsNC90LjQtSDQstGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDgKK21zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0YPQudGC0LUgJy8nINC00LvRjyDRgdC+0LfQtNCw0L3QuNGPINC/0L7QtNC80LXQvdGOIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo2MQorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICLQmtC+0LzQsNC90LTQsDoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjc0Cittc2dpZCAiU2hvdyBhIGRpYWxvZyBiZWZvcmUgcnVubmluZyIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQtNC40LDQu9C+0LMg0L/QtdGA0LXQtCDQt9Cw0L/Rg9GB0LrQvtC8IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4MAorbXNnaWQgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyAkUkVWSVNJT04pIgorbXNnc3RyICLQl9Cw0L/RgNC+0YEg0L3QsCDQstGL0LHQvtGAINCy0LXRgNGB0LjQuCAo0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIgJFJFVklTSU9OKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODUKK21zZ2lkICJBc2sgdGhlIHVzZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIChzZXRzICRBUkdTKSIKK21zZ3N0ciAi0JfQsNC/0YDQvtGBINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0YUg0LDRgNCz0YPQvNC10L3RgtC+0LIgKNGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCICRBUkdTKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTIKK21zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCittc2dzdHIgItCd0LUg0L/QvtC60LDQt9GL0LLQsNGC0Ywg0L7QutC90L4g0LLRi9Cy0L7QtNCwINC60L7QvNCw0L3QtNGLIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo5NworbXNnaWQgIlJ1biBvbmx5IGlmIGEgZGlmZiBpcyBzZWxlY3RlZCAoJEZJTEVOQU1FIG5vdCBlbXB0eSkiCittc2dzdHIgItCX0LDQv9GD0YHQuiDRgtC+0LvRjNC60L4g0LXRgdC70Lgg0L/QvtC60LDQt9Cw0L0g0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSAoJEZJTEVOQU1FINC90LUg0L/Rg9GB0YLQvikiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjEyMQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCittc2dzdHIgItCj0LrQsNC20LjRgtC1INC90LDQt9Cy0LDQvdC40LUg0LLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3QvtC5INC+0L/QtdGA0LDRhtC40LguIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLQktGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdCw0Y8g0L7Qv9C10YDQsNGG0LjRjyAnJXMnINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE1MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYWRkIHRvb2w6XG4iCisiJXMiCittc2dzdHIgIiIKKyLQntGI0LjQsdC60LAg0LTQvtCx0LDQstC70LXQvdC40Y8g0L/RgNC+0LPRgNCw0LzQvNGLOlxuIgorIiVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTAKK21zZ2lkICJSZW1vdmUgVG9vbCIKK21zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0L/RgNC+0LPRgNCw0LzQvNGDIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTYKK21zZ2lkICJSZW1vdmUgVG9vbCBDb21tYW5kcyIKK21zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0LrQvtC80LDQvdC00Ysg0L/RgNC+0LPRgNCw0LzQvNGLIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDAKK21zZ2lkICJSZW1vdmUiCittc2dzdHIgItCj0LTQsNC70LjRgtGMIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzYKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIo0KHQuNC90LjQvCDQstGL0LTQtdC70LXQvdGLINC/0YDQvtCz0YDQsNC80LzRiyDQu9C+0LrQsNC70YzQvdGL0LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjikiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1biBDb21tYW5kOiAlcyIKK21zZ3N0ciAi0JfQsNC/0YPRgdC6INC60L7QvNCw0L3QtNGLOiAlcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzExCittc2dpZCAiQXJndW1lbnRzIgorbXNnc3RyICLQkNGA0LPRg9C80LXQvdGC0YsiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjM0OAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKIAogIzogbGliL3RyYW5zcG9ydC50Y2w6NwogIywgdGNsLWZvcm1hdApAQCAtMTkyNiw0OCArMjQ5Niw0NiBAQAogbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgogbXNnc3RyICLQp9C40YHRgtC60LAg0LLQtdGC0LLQtdC5INGB0LvQtdC20LXQvdC40Y8sINGD0LTQsNC70LXQvdC90YvRhSDQuNC3ICVzIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyNSBsaWIvdHJhbnNwb3J0LnRjbDo3MQotIywgdGNsLWZvcm1hdAotbXNnaWQgInB1c2ggJXMiCi1tc2dzdHIgItC+0YLQv9GA0LDQstC40YLRjCAlcyIKLQogIzogbGliL3RyYW5zcG9ydC50Y2w6MjYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJQdXNoaW5nIGNoYW5nZXMgdG8gJXMiCiBtc2dzdHIgItCe0YLQv9GA0LDQstC60LAg0LjQt9C80LXQvdC10L3QuNC5INCyICVzICIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NzIKKyM6IGxpYi90cmFuc3BvcnQudGNsOjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWlycm9yaW5nIHRvICVzIgorbXNnc3RyICLQotC+0YfQvdC+0LUg0LrQvtC/0LjRgNC+0LLQsNC90LjQtSDQsiAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6ODIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJQdXNoaW5nICVzICVzIHRvICVzIgogbXNnc3RyICLQntGC0L/RgNCw0LLQutCwICVzICVzINCyICVzIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo4OQorIzogbGliL3RyYW5zcG9ydC50Y2w6MTAwCiBtc2dpZCAiUHVzaCBCcmFuY2hlcyIKIG1zZ3N0ciAi0J7RgtC/0YDQsNCy0LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDQsiDQstC10YLQstGP0YUiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjEwMworIzogbGliL3RyYW5zcG9ydC50Y2w6MTE0CiBtc2dpZCAiU291cmNlIEJyYW5jaGVzIgogbXNnc3RyICLQmNGB0YXQvtC00L3Ri9C1INCy0LXRgtCy0LgiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjEyMAorIzogbGliL3RyYW5zcG9ydC50Y2w6MTMxCiBtc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKIG1zZ3N0ciAi0KDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQvdCw0LfQvdCw0YfQtdC90LjRjyIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTU4CisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjkKIG1zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgogbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0L7RgtC/0YDQsNCy0LrQuCIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTYwCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzEKIG1zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKIG1zZ3N0ciAi0J3QsNC80LXRgNC10L3QvdC+INC/0LXRgNC10L/QuNGB0LDRgtGMINGB0YPRidC10YHRgtCy0YPRjtGJ0YPRjiDQstC10YLQstGMICjQstC+0LfQvNC+0LbQvdCwINC/0L7RgtC10YDRjyDQuNC30LzQtdC90LXQvdC40LkpIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjQKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3NQogbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgogbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgdGhpbiBwYWNrICjQtNC70Y8g0LzQtdC00LvQtdC90L3Ri9GFINGB0LXRgtC10LLRi9GFINC/0L7QtNC60LvRjtGH0LXQvdC40LkpIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjgKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3OQogbXNnaWQgIkluY2x1ZGUgdGFncyIKLW1zZ3N0ciAi0J/QtdGA0LXQtNCw0YLRjCDRgtCw0LPQuCIKK21zZ3N0ciAi0J/QtdGA0LXQtNCw0YLRjCDQvNC10YLQutC4IgogCi0jfiBtc2dpZCAiTmV4dCA+IgotI34gbXNnc3RyICLQlNCw0LvRjNGI0LUgPiIKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vc3YucG8gYi9naXQtZ3VpL3BvL3N2LnBvCmluZGV4IDE2NzY1NGMuLmMxNTM1ZjkgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvcG8vc3YucG8KKysrIGIvZ2l0LWd1aS9wby9zdi5wbwpAQCAtNzgwLDE2ICs3ODAsNiBAQAogbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKIG1zZ3N0ciAiRsO2bGphbmRlIGdyZW5hciDDpHIgaW50ZSB0aWxsIGZ1bGxvIHNhbW1hbnNsYWduYSBtZWQgJXM6IgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1Ci1tc2dpZCAiIgotIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuIFxuIgotIlxuIgotIiBEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKLW1zZ3N0ciAiIgotIkRldCDDpHIgc3bDpXJ0IGF0dCDDpXRlcnN0w6RsbGEgYm9ydHRhZ25hIGdyZW5hci5cbiIKLSJcbiIKLSIgVGEgYm9ydCB2YWxkYSBncmVuYXI/IgotCiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgpAQCAtMjM5OCw3ICsyMzg4LDcgQEAKIAogIzogbGliL3Rvb2xzLnRjbDoxNDkKICMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNmdWxseTogJXMiCittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKIG1zZ3N0ciAiVmVya3R5Z2V0IGF2c2x1dGFkZXMgZnJhbWfDpW5nc3Jpa3Q6ICVzIgogCiAjOiBsaWIvdG9vbHMudGNsOjE1MQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby96aF9jbi5wbyBiL2dpdC1ndWkvcG8vemhfY24ucG8KaW5kZXggZDJjNjg2Ni4uOTFjMWJlMiAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9wby96aF9jbi5wbworKysgYi9naXQtZ3VpL3BvL3poX2NuLnBvCkBAIC02NzYsMTYgKzY3Niw2IEBACiBtc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgogbXNnc3RyICLkuIvliJfliIbmlK/msqHmnInlrozlhajooqvlkIjlubbliLAgJXM6IgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1Ci1tc2dpZCAiIgotIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuIFxuIgotIlxuIgotIiBEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKLW1zZ3N0ciAiIgotIuaBouWkjeiiq+WIoOmZpOeahOWIhuaUr+mdnuW4uOWbsOmavi5cbiIKLSJcbiIKLSLmmK/lkKbopoHliKDpmaTmiYDpgInliIbmlK8/IgotCiAjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS93aW5kb3dzL2dpdC1ndWkuc2ggYi9naXQtZ3VpL3dpbmRvd3MvZ2l0LWd1aS5zaAppbmRleCA1M2MzYTk0Li42NmJiYjJmIDEwMDY0NAotLS0gYS9naXQtZ3VpL3dpbmRvd3MvZ2l0LWd1aS5zaAorKysgYi9naXQtZ3VpL3dpbmRvd3MvZ2l0LWd1aS5zaApAQCAtMyw3ICszLDEyIEBACiBleGVjIHdpc2ggIiQwIiAtLSAiJEAiCiAKIGlmIHsgJGFyZ2MgPj0yICYmIFtsaW5kZXggJGFyZ3YgMF0gPT0gIi0td29ya2luZy1kaXIiIH0gewotCWNkIFtsaW5kZXggJGFyZ3YgMV0KKwlzZXQgd29ya2RpciBbbGluZGV4ICRhcmd2IDFdCisJY2QgJHdvcmtkaXIKKwlpZiB7W2xpbmRleCBbZmlsZSBzcGxpdCAkd29ya2Rpcl0gZW5kXSBlcSB7LmdpdH19IHsKKwkJIyBXb3JrYXJvdW5kIGZvciBFeHBsb3JlciByaWdodCBjbGljayAiR2l0IEdVSSBIZXJlIiBvbiAuZ2l0LworCQljZCAuLgorCX0KIAlzZXQgYXJndiBbbHJhbmdlICRhcmd2IDIgZW5kXQogCWluY3IgYXJnYyAtMgogfQpkaWZmIC0tZ2l0IGEvZ2l0LWluc3Rhd2ViLnNoIGIvZ2l0LWluc3Rhd2ViLnNoCmluZGV4IDA4NDMzNzIuLjVmNWNhYzcgMTAwNzU1Ci0tLSBhL2dpdC1pbnN0YXdlYi5zaAorKysgYi9naXQtaW5zdGF3ZWIuc2gKQEAgLTQ5LDcgKzQ5LDcgQEAKIAllc2FjCiAKIAlodHRwZF9vbmx5PSIkKGVjaG8gJGh0dHBkIHwgY3V0IC1mMSAtZCcgJykiCi0JaWYgY2FzZSAiJGh0dHBkX29ubHkiIGluIC8qKSA6IDs7ICopIHdoaWNoICRodHRwZF9vbmx5ID4vZGV2L251bGw7OyBlc2FjCisJaWYgY2FzZSAiJGh0dHBkX29ubHkiIGluIC8qKSA6IDs7ICopIHdoaWNoICRodHRwZF9vbmx5ID4vZGV2L251bGwgMj4mMTs7IGVzYWMKIAl0aGVuCiAJCWZ1bGxfaHR0cGQ9JGh0dHBkCiAJZWxzZQpAQCAtMTc5LDExICsxNzksNzQgQEAKIAljYXQgPiAiJGNvbmYiIDw8RU9GCiBzZXJ2ZXIuZG9jdW1lbnQtcm9vdCA9ICIkZnFnaXRkaXIvZ2l0d2ViIgogc2VydmVyLnBvcnQgPSAkcG9ydAotc2VydmVyLm1vZHVsZXMgPSAoICJtb2RfY2dpIiApCitzZXJ2ZXIubW9kdWxlcyA9ICggIm1vZF9zZXRlbnYiLCAibW9kX2NnaSIgKQogc2VydmVyLmluZGV4ZmlsZXMgPSAoICJnaXR3ZWIuY2dpIiApCiBzZXJ2ZXIucGlkLWZpbGUgPSAiJGZxZ2l0ZGlyL3BpZCIKK3NlcnZlci5lcnJvcmxvZyA9ICIkZnFnaXRkaXIvZ2l0d2ViL2Vycm9yLmxvZyIKKworIyB0byBlbmFibGUsIGFkZCAibW9kX2FjY2VzcyIsICJtb2RfYWNjZXNzbG9nIiB0byBzZXJ2ZXIubW9kdWxlcworIyB2YXJpYWJsZSBhYm92ZSBhbmQgdW5jb21tZW50IHRoaXMKKyNhY2Nlc3Nsb2cuZmlsZW5hbWUgPSAiJGZxZ2l0ZGlyL2dpdHdlYi9hY2Nlc3MubG9nIgorCitzZXRlbnYuYWRkLWVudmlyb25tZW50ID0gKCAiUEFUSCIgPT4gIi91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW4iICkKKwogY2dpLmFzc2lnbiA9ICggIi5jZ2kiID0+ICIiICkKLW1pbWV0eXBlLmFzc2lnbiA9ICggIi5jc3MiID0+ICJ0ZXh0L2NzcyIgKQorCisjIG1pbWV0eXBlIG1hcHBpbmcKK21pbWV0eXBlLmFzc2lnbiAgICAgICAgICAgICA9ICgKKyAgIi5wZGYiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3BkZiIsCisgICIuc2lnIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlIiwKKyAgIi5zcGwiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL2Z1dHVyZXNwbGFzaCIsCisgICIuY2xhc3MiICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLAorICAiLnBzIiAgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vcG9zdHNjcmlwdCIsCisgICIudG9ycmVudCIgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQiLAorICAiLmR2aSIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1kdmkiLAorICAiLmd6IiAgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1nemlwIiwKKyAgIi5wYWMiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtbnMtcHJveHktYXV0b2NvbmZpZyIsCisgICIuc3dmIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIsCisgICIudGFyLmd6IiAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXRneiIsCisgICIudGd6IiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXRneiIsCisgICIudGFyIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXRhciIsCisgICIuemlwIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi96aXAiLAorICAiLm1wMyIgICAgICAgICAgPT4gICAgICAiYXVkaW8vbXBlZyIsCisgICIubTN1IiAgICAgICAgICA9PiAgICAgICJhdWRpby94LW1wZWd1cmwiLAorICAiLndtYSIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC1tcy13bWEiLAorICAiLndheCIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC1tcy13YXgiLAorICAiLm9nZyIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vb2dnIiwKKyAgIi53YXYiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtd2F2IiwKKyAgIi5naWYiICAgICAgICAgID0+ICAgICAgImltYWdlL2dpZiIsCisgICIuanBnIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9qcGVnIiwKKyAgIi5qcGVnIiAgICAgICAgID0+ICAgICAgImltYWdlL2pwZWciLAorICAiLnBuZyIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvcG5nIiwKKyAgIi54Ym0iICAgICAgICAgID0+ICAgICAgImltYWdlL3gteGJpdG1hcCIsCisgICIueHBtIiAgICAgICAgICA9PiAgICAgICJpbWFnZS94LXhwaXhtYXAiLAorICAiLnh3ZCIgICAgICAgICAgPT4gICAgICAiaW1hZ2UveC14d2luZG93ZHVtcCIsCisgICIuY3NzIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2NzcyIsCisgICIuaHRtbCIgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAorICAiLmh0bSIgICAgICAgICAgPT4gICAgICAidGV4dC9odG1sIiwKKyAgIi5qcyIgICAgICAgICAgID0+ICAgICAgInRleHQvamF2YXNjcmlwdCIsCisgICIuYXNjIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5jIiAgICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmNwcCIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIubG9nIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5jb25mIiAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLnRleHQiICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIudHh0IiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5kdGQiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwKKyAgIi54bWwiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwKKyAgIi5tcGVnIiAgICAgICAgID0+ICAgICAgInZpZGVvL21wZWciLAorICAiLm1wZyIgICAgICAgICAgPT4gICAgICAidmlkZW8vbXBlZyIsCisgICIubW92IiAgICAgICAgICA9PiAgICAgICJ2aWRlby9xdWlja3RpbWUiLAorICAiLnF0IiAgICAgICAgICAgPT4gICAgICAidmlkZW8vcXVpY2t0aW1lIiwKKyAgIi5hdmkiICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXN2aWRlbyIsCisgICIuYXNmIiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zLWFzZiIsCisgICIuYXN4IiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zLWFzZiIsCisgICIud212IiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zLXdtdiIsCisgICIuYnoyIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJ6aXAiLAorICAiLnRieiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyIiwKKyAgIi50YXIuYnoyIiAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhciIsCisgICIiICAgICAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIgorICkKIEVPRgogCXRlc3QgeCIkbG9jYWwiID0geHRydWUgJiYgZWNobyAnc2VydmVyLmJpbmQgPSAiMTI3LjAuMC4xIicgPj4gIiRjb25mIgogfQpAQCAtMTkzLDcgKzI1Niw3IEBACiAJbWtkaXIgLXAgIiRHSVRfRElSL2dpdHdlYi9sb2dzIgogCWJpbmQ9CiAJdGVzdCB4IiRsb2NhbCIgPSB4dHJ1ZSAmJiBiaW5kPScxMjcuMC4wLjE6JwotCWVjaG8gJ3RleHQvY3NzIGNzcycgPiAkZnFnaXRkaXIvbWltZS50eXBlcworCWVjaG8gJ3RleHQvY3NzIGNzcycgPiAiJGZxZ2l0ZGlyL21pbWUudHlwZXMiCiAJY2F0ID4gIiRjb25mIiA8PEVPRgogU2VydmVyTmFtZSAiZ2l0LWluc3Rhd2ViIgogU2VydmVyUm9vdCAiJGZxZ2l0ZGlyL2dpdHdlYiIKQEAgLTIwOSwxMyArMjcyLDEzIEBACiAJCWZpCiAJZG9uZQogCWNhdCA+PiAiJGNvbmYiIDw8RU9GCi1UeXBlc0NvbmZpZyAkZnFnaXRkaXIvbWltZS50eXBlcworVHlwZXNDb25maWcgIiRmcWdpdGRpci9taW1lLnR5cGVzIgogRGlyZWN0b3J5SW5kZXggZ2l0d2ViLmNnaQogRU9GCiAKIAkjIGNoZWNrIHRvIHNlZSBpZiBEZW5uaXMgU3Rvc2JlcmcncyBtb2RfcGVybCBjb21wYXRpYmlsaXR5IHBhdGNoCiAJIyAoPDIwMDYwNjIxMTMwNzA4LkdjYmM2ZTVjQGxlb25vdi5zdG9zYmVyZy5uZXQ+KSBoYXMgYmVlbiBhcHBsaWVkCi0JaWYgdGVzdCAtZiAiJG1vZHVsZV9wYXRoL21vZF9wZXJsLnNvIiAmJiBncmVwICdeb3VyICRnaXRiaW4nIFwKKwlpZiB0ZXN0IC1mICIkbW9kdWxlX3BhdGgvbW9kX3Blcmwuc28iICYmIGdyZXAgJ01PRF9QRVJMJyBcCiAJCQkJIiRHSVRfRElSL2dpdHdlYi9naXR3ZWIuY2dpIiA+L2Rldi9udWxsCiAJdGhlbgogCQkjIGZhdm9yIG1vZF9wZXJsIGlmIGF2YWlsYWJsZQpkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdlLW9uZS1maWxlLnNoIGIvZ2l0LW1lcmdlLW9uZS1maWxlLnNoCmluZGV4IGUxZWI5NjMuLjljMmMxYjcgMTAwNzU1Ci0tLSBhL2dpdC1tZXJnZS1vbmUtZmlsZS5zaAorKysgYi9naXQtbWVyZ2Utb25lLWZpbGUuc2gKQEAgLTExMyw2ICsxMTMsMTAgQEAKIAlzcmMxPWBnaXQtdW5wYWNrLWZpbGUgJDJgCiAJZ2l0IG1lcmdlLWZpbGUgIiRzcmMxIiAiJG9yaWciICIkc3JjMiIKIAlyZXQ9JD8KKwltc2c9CisJaWYgWyAkcmV0IC1uZSAwIF07IHRoZW4KKwkJbXNnPSdjb250ZW50IGNvbmZsaWN0JworCWZpCiAKIAkjIENyZWF0ZSB0aGUgd29ya2luZyB0cmVlIGZpbGUsIHVzaW5nICJvdXIgdHJlZSIgdmVyc2lvbiBmcm9tIHRoZQogCSMgaW5kZXgsIGFuZCB0aGVuIHN0b3JlIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlLgpAQCAtMTIwLDcgKzEyNCwxMCBAQAogCXJtIC1mIC0tICIkb3JpZyIgIiRzcmMxIiAiJHNyYzIiCiAKIAlpZiBbICIkNiIgIT0gIiQ3IiBdOyB0aGVuCi0JCWVjaG8gIkVSUk9SOiBQZXJtaXNzaW9ucyBjb25mbGljdDogJDUtPiQ2LCQ3LiIKKwkJaWYgWyAtbiAiJG1zZyIgXTsgdGhlbgorCQkJbXNnPSIkbXNnLCAiCisJCWZpCisJCW1zZz0iJHttc2d9cGVybWlzc2lvbnMgY29uZmxpY3Q6ICQ1LT4kNiwkNyIKIAkJcmV0PTEKIAlmaQogCWlmIFsgIiQxIiA9ICcnIF07IHRoZW4KQEAgLTEyOCw3ICsxMzUsNyBAQAogCWZpCiAKIAlpZiBbICRyZXQgLW5lIDAgXTsgdGhlbgotCQllY2hvICJFUlJPUjogTWVyZ2UgY29uZmxpY3QgaW4gJDQiCisJCWVjaG8gIkVSUk9SOiAkbXNnIGluICQ0IgogCQlleGl0IDEKIAlmaQogCWV4ZWMgZ2l0IHVwZGF0ZS1pbmRleCAtLSAiJDQiCmRpZmYgLS1naXQgYS9naXQtbWVyZ2UtcmVzb2x2ZS5zaCBiL2dpdC1tZXJnZS1yZXNvbHZlLnNoCmluZGV4IDkzYmNmYzIuLmM5ZGE3NDcgMTAwNzU1Ci0tLSBhL2dpdC1tZXJnZS1yZXNvbHZlLnNoCisrKyBiL2dpdC1tZXJnZS1yZXNvbHZlLnNoCkBAIC0zNywxMCArMzcsMTAgQEAKIAlleGl0IDIKIGZpCiAKLWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIDI+L2Rldi9udWxsCitnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAogZ2l0IHJlYWQtdHJlZSAtdSAtbSAtLWFnZ3Jlc3NpdmUgJGJhc2VzICRoZWFkICRyZW1vdGVzIHx8IGV4aXQgMgogZWNobyAiVHJ5aW5nIHNpbXBsZSBtZXJnZS4iCi1pZiByZXN1bHRfdHJlZT0kKGdpdCB3cml0ZS10cmVlICAyPi9kZXYvbnVsbCkKK2lmIHJlc3VsdF90cmVlPSQoZ2l0IHdyaXRlLXRyZWUgMj4vZGV2L251bGwpCiB0aGVuCiAJZXhpdCAwCiBlbHNlCmRpZmYgLS1naXQgYS9naXQtbWVyZ2V0b29sLS1saWIuc2ggYi9naXQtbWVyZ2V0b29sLS1saWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZiMDFmNwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1tZXJnZXRvb2wtLWxpYi5zaApAQCAtMCwwICsxLDQwNiBAQAorIyBnaXQtbWVyZ2V0b29sLS1saWIgaXMgYSBsaWJyYXJ5IGZvciBjb21tb24gbWVyZ2UgdG9vbCBmdW5jdGlvbnMKK2RpZmZfbW9kZSgpIHsKKwl0ZXN0ICIkVE9PTF9NT0RFIiA9IGRpZmYKK30KKworbWVyZ2VfbW9kZSgpIHsKKwl0ZXN0ICIkVE9PTF9NT0RFIiA9IG1lcmdlCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGggKCkgeworCWNhc2UgIiQxIiBpbgorCXZpbWRpZmYpCisJCWVjaG8gdmltCisJCTs7CisJZ3ZpbWRpZmYpCisJCWVjaG8gZ3ZpbQorCQk7OworCWVtZXJnZSkKKwkJZWNobyBlbWFjcworCQk7OworCWFyYXhpcykKKwkJZWNobyBjb21wYXJlCisJCTs7CisJKikKKwkJZWNobyAiJDEiCisJCTs7CisJZXNhYworfQorCitjaGVja191bmNoYW5nZWQgKCkgeworCWlmIHRlc3QgIiRNRVJHRUQiIC1udCAiJEJBQ0tVUCI7IHRoZW4KKwkJc3RhdHVzPTAKKwllbHNlCisJCXdoaWxlIHRydWU7IGRvCisJCQllY2hvICIkTUVSR0VEIHNlZW1zIHVuY2hhbmdlZC4iCisJCQlwcmludGYgIldhcyB0aGUgbWVyZ2Ugc3VjY2Vzc2Z1bD8gW3kvbl0gIgorCQkJcmVhZCBhbnN3ZXIgPCAvZGV2L3R0eQorCQkJY2FzZSAiJGFuc3dlciIgaW4KKwkJCXkqfFkqKSBzdGF0dXM9MDsgYnJlYWsgOzsKKwkJCW4qfE4qKSBzdGF0dXM9MTsgYnJlYWsgOzsKKwkJCWVzYWMKKwkJZG9uZQorCWZpCit9CisKK3ZhbGlkX3Rvb2wgKCkgeworCWNhc2UgIiQxIiBpbgorCWtkaWZmMyB8IHRrZGlmZiB8IHh4ZGlmZiB8IG1lbGQgfCBvcGVuZGlmZiB8IFwKKwllbWVyZ2UgfCB2aW1kaWZmIHwgZ3ZpbWRpZmYgfCBlY21lcmdlIHwgZGlmZnVzZSB8IGFyYXhpcykKKwkJOzsgIyBoYXBweQorCXRvcnRvaXNlbWVyZ2UpCisJCWlmICEgbWVyZ2VfbW9kZTsgdGhlbgorCQkJcmV0dXJuIDEKKwkJZmkKKwkJOzsKKwlrb21wYXJlKQorCQlpZiAhIGRpZmZfbW9kZTsgdGhlbgorCQkJcmV0dXJuIDEKKwkJZmkKKwkJOzsKKwkqKQorCQlpZiB0ZXN0IC16ICIkKGdldF9tZXJnZV90b29sX2NtZCAiJDEiKSI7IHRoZW4KKwkJCXJldHVybiAxCisJCWZpCisJCTs7CisJZXNhYworfQorCitnZXRfbWVyZ2VfdG9vbF9jbWQgKCkgeworCSMgUHJpbnRzIHRoZSBjdXN0b20gY29tbWFuZCBmb3IgYSBtZXJnZSB0b29sCisJaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisJCW1lcmdlX3Rvb2w9IiQxIgorCWVsc2UKKwkJbWVyZ2VfdG9vbD0iJChnZXRfbWVyZ2VfdG9vbCkiCisJZmkKKwlpZiBkaWZmX21vZGU7IHRoZW4KKwkJZWNobyAiJChnaXQgY29uZmlnIGRpZmZ0b29sLiRtZXJnZV90b29sLmNtZCB8fAorCQkgICAgICAgIGdpdCBjb25maWcgbWVyZ2V0b29sLiRtZXJnZV90b29sLmNtZCkiCisJZWxzZQorCQllY2hvICIkKGdpdCBjb25maWcgbWVyZ2V0b29sLiRtZXJnZV90b29sLmNtZCkiCisJZmkKK30KKworcnVuX21lcmdlX3Rvb2wgKCkgeworCW1lcmdlX3Rvb2xfcGF0aD0iJChnZXRfbWVyZ2VfdG9vbF9wYXRoICIkMSIpIiB8fCBleGl0CisJYmFzZV9wcmVzZW50PSIkMiIKKwlzdGF0dXM9MAorCisJY2FzZSAiJDEiIGluCisJa2RpZmYzKQorCQlpZiBtZXJnZV9tb2RlOyB0aGVuCisJCQlpZiAkYmFzZV9wcmVzZW50OyB0aGVuCisJCQkJKCIkbWVyZ2VfdG9vbF9wYXRoIiAtLWF1dG8gXAorCQkJCQktLUwxICIkTUVSR0VEIChCYXNlKSIgXAorCQkJCQktLUwyICIkTUVSR0VEIChMb2NhbCkiIFwKKwkJCQkJLS1MMyAiJE1FUkdFRCAoUmVtb3RlKSIgXAorCQkJCQktbyAiJE1FUkdFRCIgXAorCQkJCQkiJEJBU0UiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQkJPiAvZGV2L251bGwgMj4mMSkKKwkJCWVsc2UKKwkJCQkoIiRtZXJnZV90b29sX3BhdGgiIC0tYXV0byBcCisJCQkJCS0tTDEgIiRNRVJHRUQgKExvY2FsKSIgXAorCQkJCQktLUwyICIkTUVSR0VEIChSZW1vdGUpIiBcCisJCQkJCS1vICIkTUVSR0VEIiBcCisJCQkJCSIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQkJPiAvZGV2L251bGwgMj4mMSkKKwkJCWZpCisJCQlzdGF0dXM9JD8KKwkJZWxzZQorCQkJKCIkbWVyZ2VfdG9vbF9wYXRoIiAtLWF1dG8gXAorCQkJCS0tTDEgIiRNRVJHRUQgKEEpIiBcCisJCQkJLS1MMiAiJE1FUkdFRCAoQikiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQk+IC9kZXYvbnVsbCAyPiYxKQorCQlmaQorCQk7OworCWtvbXBhcmUpCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIKKwkJOzsKKwl0a2RpZmYpCisJCWlmIG1lcmdlX21vZGU7IHRoZW4KKwkJCWlmICRiYXNlX3ByZXNlbnQ7IHRoZW4KKwkJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWEgIiRCQVNFIiBcCisJCQkJCS1vICIkTUVSR0VEIiAiJExPQ0FMIiAiJFJFTU9URSIKKwkJCWVsc2UKKwkJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgXAorCQkJCQktbyAiJE1FUkdFRCIgIiRMT0NBTCIgIiRSRU1PVEUiCisJCQlmaQorCQkJc3RhdHVzPSQ/CisJCWVsc2UKKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIKKwkJZmkKKwkJOzsKKwltZWxkKQorCQlpZiBtZXJnZV9tb2RlOyB0aGVuCisJCQl0b3VjaCAiJEJBQ0tVUCIKKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJE1FUkdFRCIgIiRSRU1PVEUiCisJCQljaGVja191bmNoYW5nZWQKKwkJZWxzZQorCQkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIgorCQlmaQorCQk7OworCWRpZmZ1c2UpCisJCWlmIG1lcmdlX21vZGU7IHRoZW4KKwkJCXRvdWNoICIkQkFDS1VQIgorCQkJaWYgJGJhc2VfcHJlc2VudDsgdGhlbgorCQkJCSIkbWVyZ2VfdG9vbF9wYXRoIiBcCisJCQkJCSIkTE9DQUwiICIkTUVSR0VEIiAiJFJFTU9URSIgXAorCQkJCQkiJEJBU0UiIHwgY2F0CisJCQllbHNlCisJCQkJIiRtZXJnZV90b29sX3BhdGgiIFwKKwkJCQkJIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIiB8IGNhdAorCQkJZmkKKwkJCWNoZWNrX3VuY2hhbmdlZAorCQllbHNlCisJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIHwgY2F0CisJCWZpCisJCTs7CisJdmltZGlmZikKKwkJaWYgbWVyZ2VfbW9kZTsgdGhlbgorCQkJdG91Y2ggIiRCQUNLVVAiCisJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWQgLWMgIndpbmNtZCBsIiBcCisJCQkJIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIgorCQkJY2hlY2tfdW5jaGFuZ2VkCisJCWVsc2UKKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtZCAtYyAid2luY21kIGwiIFwKKwkJCQkiJExPQ0FMIiAiJFJFTU9URSIKKwkJZmkKKwkJOzsKKwlndmltZGlmZikKKwkJaWYgbWVyZ2VfbW9kZTsgdGhlbgorCQkJdG91Y2ggIiRCQUNLVVAiCisJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWQgLWMgIndpbmNtZCBsIiAtZiBcCisJCQkJIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIgorCQkJY2hlY2tfdW5jaGFuZ2VkCisJCWVsc2UKKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtZCAtYyAid2luY21kIGwiIC1mIFwKKwkJCQkiJExPQ0FMIiAiJFJFTU9URSIKKwkJZmkKKwkJOzsKKwl4eGRpZmYpCisJCWlmIG1lcmdlX21vZGU7IHRoZW4KKwkJCXRvdWNoICIkQkFDS1VQIgorCQkJaWYgJGJhc2VfcHJlc2VudDsgdGhlbgorCQkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtWCAtLXNob3ctbWVyZ2VkLXBhbmUgXAorCQkJCQktUiAnQWNjZWwuU2F2ZUFzTWVyZ2VkOiAiQ3RybC1TIicgXAorCQkJCQktUiAnQWNjZWwuU2VhcmNoOiAiQ3RybCtGIicgXAorCQkJCQktUiAnQWNjZWwuU2VhcmNoRm9yd2FyZDogIkN0cmwtRyInIFwKKwkJCQkJLS1tZXJnZWQtZmlsZSAiJE1FUkdFRCIgXAorCQkJCQkiJExPQ0FMIiAiJEJBU0UiICIkUkVNT1RFIgorCQkJZWxzZQorCQkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtWCAkZXh0cmEgXAorCQkJCQktUiAnQWNjZWwuU2F2ZUFzTWVyZ2VkOiAiQ3RybC1TIicgXAorCQkJCQktUiAnQWNjZWwuU2VhcmNoOiAiQ3RybCtGIicgXAorCQkJCQktUiAnQWNjZWwuU2VhcmNoRm9yd2FyZDogIkN0cmwtRyInIFwKKwkJCQkJLS1tZXJnZWQtZmlsZSAiJE1FUkdFRCIgXAorCQkJCQkiJExPQ0FMIiAiJFJFTU9URSIKKwkJCWZpCisJCQljaGVja191bmNoYW5nZWQKKwkJZWxzZQorCQkJIiRtZXJnZV90b29sX3BhdGgiIFwKKwkJCQktUiAnQWNjZWwuU2VhcmNoOiAiQ3RybCtGIicgXAorCQkJCS1SICdBY2NlbC5TZWFyY2hGb3J3YXJkOiAiQ3RybC1HIicgXAorCQkJCSIkTE9DQUwiICIkUkVNT1RFIgorCQlmaQorCQk7OworCW9wZW5kaWZmKQorCQlpZiBtZXJnZV9tb2RlOyB0aGVuCisJCQl0b3VjaCAiJEJBQ0tVUCIKKwkJCWlmICRiYXNlX3ByZXNlbnQ7IHRoZW4KKwkJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJCQkJLWFuY2VzdG9yICIkQkFTRSIgXAorCQkJCQktbWVyZ2UgIiRNRVJHRUQiIHwgY2F0CisJCQllbHNlCisJCQkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQkJCS1tZXJnZSAiJE1FUkdFRCIgfCBjYXQKKwkJCWZpCisJCQljaGVja191bmNoYW5nZWQKKwkJZWxzZQorCQkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiB8IGNhdAorCQlmaQorCQk7OworCWVjbWVyZ2UpCisJCWlmIG1lcmdlX21vZGU7IHRoZW4KKwkJCXRvdWNoICIkQkFDS1VQIgorCQkJaWYgJGJhc2VfcHJlc2VudDsgdGhlbgorCQkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJEJBU0UiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQkJCS0tZGVmYXVsdCAtLW1vZGU9bWVyZ2UzIC0tdG89IiRNRVJHRUQiCisJCQllbHNlCisJCQkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQkJCS0tZGVmYXVsdCAtLW1vZGU9bWVyZ2UyIC0tdG89IiRNRVJHRUQiCisJCQlmaQorCQkJY2hlY2tfdW5jaGFuZ2VkCisJCWVsc2UKKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtLWRlZmF1bHQgLS1tb2RlPWRpZmYyIFwKKwkJCQkiJExPQ0FMIiAiJFJFTU9URSIKKwkJZmkKKwkJOzsKKwllbWVyZ2UpCisJCWlmIG1lcmdlX21vZGU7IHRoZW4KKwkJCWlmICRiYXNlX3ByZXNlbnQ7IHRoZW4KKwkJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgXAorCQkJCQktZiBlbWVyZ2UtZmlsZXMtd2l0aC1hbmNlc3Rvci1jb21tYW5kIFwKKwkJCQkJIiRMT0NBTCIgIiRSRU1PVEUiICIkQkFTRSIgXAorCQkJCQkiJChiYXNlbmFtZSAiJE1FUkdFRCIpIgorCQkJZWxzZQorCQkJCSIkbWVyZ2VfdG9vbF9wYXRoIiBcCisJCQkJCS1mIGVtZXJnZS1maWxlcy1jb21tYW5kIFwKKwkJCQkJIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJCQkJIiQoYmFzZW5hbWUgIiRNRVJHRUQiKSIKKwkJCWZpCisJCQlzdGF0dXM9JD8KKwkJZWxzZQorCQkJIiRtZXJnZV90b29sX3BhdGgiIC1mIGVtZXJnZS1maWxlcy1jb21tYW5kIFwKKwkJCQkiJExPQ0FMIiAiJFJFTU9URSIKKwkJZmkKKwkJOzsKKwl0b3J0b2lzZW1lcmdlKQorCQlpZiAkYmFzZV9wcmVzZW50OyB0aGVuCisJCQl0b3VjaCAiJEJBQ0tVUCIKKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiBcCisJCQkJLWJhc2U6IiRCQVNFIiAtbWluZToiJExPQ0FMIiBcCisJCQkJLXRoZWlyczoiJFJFTU9URSIgLW1lcmdlZDoiJE1FUkdFRCIKKwkJCWNoZWNrX3VuY2hhbmdlZAorCQllbHNlCisJCQllY2hvICJUb3J0b2lzZU1lcmdlIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSBiYXNlIiAxPiYyCisJCQlzdGF0dXM9MQorCQlmaQorCQk7OworCWFyYXhpcykKKwkJaWYgbWVyZ2VfbW9kZTsgdGhlbgorCQkJdG91Y2ggIiRCQUNLVVAiCisJCQlpZiAkYmFzZV9wcmVzZW50OyB0aGVuCisJCQkJIiRtZXJnZV90b29sX3BhdGgiIC13YWl0IC1tZXJnZSAtMyAtYTEgXAorCQkJCQkiJEJBU0UiICIkTE9DQUwiICIkUkVNT1RFIiAiJE1FUkdFRCIgXAorCQkJCQk+L2Rldi9udWxsIDI+JjEKKwkJCWVsc2UKKwkJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLXdhaXQgLTIgXAorCQkJCQkiJExPQ0FMIiAiJFJFTU9URSIgIiRNRVJHRUQiIFwKKwkJCQkJPi9kZXYvbnVsbCAyPiYxCisJCQlmaQorCQkJY2hlY2tfdW5jaGFuZ2VkCisJCWVsc2UKKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtd2FpdCAtMiAiJExPQ0FMIiAiJFJFTU9URSIgXAorCQkJCT4vZGV2L251bGwgMj4mMQorCQlmaQorCQk7OworCSopCisJCW1lcmdlX3Rvb2xfY21kPSIkKGdldF9tZXJnZV90b29sX2NtZCAiJDEiKSIKKwkJaWYgdGVzdCAteiAiJG1lcmdlX3Rvb2xfY21kIjsgdGhlbgorCQkJaWYgbWVyZ2VfbW9kZTsgdGhlbgorCQkJCXN0YXR1cz0xCisJCQlmaQorCQkJYnJlYWsKKwkJZmkKKwkJaWYgbWVyZ2VfbW9kZTsgdGhlbgorCQkJdHJ1c3RfZXhpdF9jb2RlPSIkKGdpdCBjb25maWcgLS1ib29sIFwKKwkJCQltZXJnZXRvb2wuIiQxIi50cnVzdEV4aXRDb2RlIHx8IGVjaG8gZmFsc2UpIgorCQkJaWYgdGVzdCAiJHRydXN0X2V4aXRfY29kZSIgPSAiZmFsc2UiOyB0aGVuCisJCQkJdG91Y2ggIiRCQUNLVVAiCisJCQkJKCBldmFsICRtZXJnZV90b29sX2NtZCApCisJCQkJY2hlY2tfdW5jaGFuZ2VkCisJCQllbHNlCisJCQkJKCBldmFsICRtZXJnZV90b29sX2NtZCApCisJCQkJc3RhdHVzPSQ/CisJCQlmaQorCQllbHNlCisJCQkoIGV2YWwgJG1lcmdlX3Rvb2xfY21kICkKKwkJZmkKKwkJOzsKKwllc2FjCisJcmV0dXJuICRzdGF0dXMKK30KKworZ3Vlc3NfbWVyZ2VfdG9vbCAoKSB7CisJaWYgbWVyZ2VfbW9kZTsgdGhlbgorCQl0b29scz0idG9ydG9pc2VtZXJnZSIKKwllbHNlCisJCXRvb2xzPSJrb21wYXJlIgorCWZpCisJaWYgdGVzdCAtbiAiJERJU1BMQVkiOyB0aGVuCisJCWlmIHRlc3QgLW4gIiRHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiIDsgdGhlbgorCQkJdG9vbHM9Im1lbGQgb3BlbmRpZmYga2RpZmYzIHRrZGlmZiB4eGRpZmYgJHRvb2xzIgorCQllbHNlCisJCQl0b29scz0ib3BlbmRpZmYga2RpZmYzIHRrZGlmZiB4eGRpZmYgbWVsZCAkdG9vbHMiCisJCWZpCisJCXRvb2xzPSIkdG9vbHMgZ3ZpbWRpZmYgZGlmZnVzZSBlY21lcmdlIGFyYXhpcyIKKwlmaQorCWlmIGVjaG8gIiR7VklTVUFMOi0kRURJVE9SfSIgfCBncmVwIGVtYWNzID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJIyAkRURJVE9SIGlzIGVtYWNzIHNvIGFkZCBlbWVyZ2UgYXMgYSBjYW5kaWRhdGUKKwkJdG9vbHM9IiR0b29scyBlbWVyZ2UgdmltZGlmZiIKKwllbGlmIGVjaG8gIiR7VklTVUFMOi0kRURJVE9SfSIgfCBncmVwIHZpbSA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCSMgJEVESVRPUiBpcyB2aW0gc28gYWRkIHZpbWRpZmYgYXMgYSBjYW5kaWRhdGUKKwkJdG9vbHM9IiR0b29scyB2aW1kaWZmIGVtZXJnZSIKKwllbHNlCisJCXRvb2xzPSIkdG9vbHMgZW1lcmdlIHZpbWRpZmYiCisJZmkKKwllY2hvID4mMiAibWVyZ2UgdG9vbCBjYW5kaWRhdGVzOiAkdG9vbHMiCisKKwkjIExvb3Agb3ZlciBlYWNoIGNhbmRpZGF0ZSBhbmQgc3RvcCB3aGVuIGEgdmFsaWQgbWVyZ2UgdG9vbCBpcyBmb3VuZC4KKwlmb3IgaSBpbiAkdG9vbHMKKwlkbworCQltZXJnZV90b29sX3BhdGg9IiQodHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCAiJGkiKSIKKwkJaWYgdHlwZSAiJG1lcmdlX3Rvb2xfcGF0aCIgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorCQkJZWNobyAiJGkiCisJCQlyZXR1cm4gMAorCQlmaQorCWRvbmUKKworCWVjaG8gPiYyICJObyBrbm93biBtZXJnZSByZXNvbHV0aW9uIHByb2dyYW0gYXZhaWxhYmxlLiIKKwlyZXR1cm4gMQorfQorCitnZXRfY29uZmlndXJlZF9tZXJnZV90b29sICgpIHsKKwkjIERpZmYgbW9kZSBmaXJzdCB0cmllcyBkaWZmLnRvb2wgYW5kIGZhbGxzIGJhY2sgdG8gbWVyZ2UudG9vbC4KKwkjIE1lcmdlIG1vZGUgb25seSBjaGVja3MgbWVyZ2UudG9vbAorCWlmIGRpZmZfbW9kZTsgdGhlbgorCQltZXJnZV90b29sPSQoZ2l0IGNvbmZpZyBkaWZmLnRvb2wgfHwgZ2l0IGNvbmZpZyBtZXJnZS50b29sKQorCWVsc2UKKwkJbWVyZ2VfdG9vbD0kKGdpdCBjb25maWcgbWVyZ2UudG9vbCkKKwlmaQorCWlmIHRlc3QgLW4gIiRtZXJnZV90b29sIiAmJiAhIHZhbGlkX3Rvb2wgIiRtZXJnZV90b29sIjsgdGhlbgorCQllY2hvID4mMiAiZ2l0IGNvbmZpZyBvcHRpb24gJFRPT0xfTU9ERS50b29sIHNldCB0byB1bmtub3duIHRvb2w6ICRtZXJnZV90b29sIgorCQllY2hvID4mMiAiUmVzZXR0aW5nIHRvIGRlZmF1bHQuLi4iCisJCXJldHVybiAxCisJZmkKKwllY2hvICIkbWVyZ2VfdG9vbCIKK30KKworZ2V0X21lcmdlX3Rvb2xfcGF0aCAoKSB7CisJIyBBIG1lcmdlIHRvb2wgaGFzIGJlZW4gc2V0LCBzbyB2ZXJpZnkgdGhhdCBpdCdzIHZhbGlkLgorCWlmIHRlc3QgLW4gIiQxIjsgdGhlbgorCQltZXJnZV90b29sPSIkMSIKKwllbHNlCisJCW1lcmdlX3Rvb2w9IiQoZ2V0X21lcmdlX3Rvb2wpIgorCWZpCisJaWYgISB2YWxpZF90b29sICIkbWVyZ2VfdG9vbCI7IHRoZW4KKwkJZWNobyA+JjIgIlVua25vd24gbWVyZ2UgdG9vbCAkbWVyZ2VfdG9vbCIKKwkJZXhpdCAxCisJZmkKKwlpZiBkaWZmX21vZGU7IHRoZW4KKwkJbWVyZ2VfdG9vbF9wYXRoPSQoZ2l0IGNvbmZpZyBkaWZmdG9vbC4iJG1lcmdlX3Rvb2wiLnBhdGggfHwKKwkJICAgICAgICAgICAgICAgICAgZ2l0IGNvbmZpZyBtZXJnZXRvb2wuIiRtZXJnZV90b29sIi5wYXRoKQorCWVsc2UKKwkJbWVyZ2VfdG9vbF9wYXRoPSQoZ2l0IGNvbmZpZyBtZXJnZXRvb2wuIiRtZXJnZV90b29sIi5wYXRoKQorCWZpCisJaWYgdGVzdCAteiAiJG1lcmdlX3Rvb2xfcGF0aCI7IHRoZW4KKwkJbWVyZ2VfdG9vbF9wYXRoPSIkKHRyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGggIiRtZXJnZV90b29sIikiCisJZmkKKwlpZiB0ZXN0IC16ICIkKGdldF9tZXJnZV90b29sX2NtZCAiJG1lcmdlX3Rvb2wiKSIgJiYKKwkhIHR5cGUgIiRtZXJnZV90b29sX3BhdGgiID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZWNobyA+JjIgIlRoZSAkVE9PTF9NT0RFIHRvb2wgJG1lcmdlX3Rvb2wgaXMgbm90IGF2YWlsYWJsZSBhcyJcCisJCSAgICAgICAgICInJG1lcmdlX3Rvb2xfcGF0aCciCisJCWV4aXQgMQorCWZpCisJZWNobyAiJG1lcmdlX3Rvb2xfcGF0aCIKK30KKworZ2V0X21lcmdlX3Rvb2wgKCkgeworCSMgQ2hlY2sgaWYgYSBtZXJnZSB0b29sIGhhcyBiZWVuIGNvbmZpZ3VyZWQKKwltZXJnZV90b29sPSQoZ2V0X2NvbmZpZ3VyZWRfbWVyZ2VfdG9vbCkKKwkjIFRyeSB0byBndWVzcyBhbiBhcHByb3ByaWF0ZSBtZXJnZSB0b29sIGlmIG5vIHRvb2wgaGFzIGJlZW4gc2V0LgorCWlmIHRlc3QgLXogIiRtZXJnZV90b29sIjsgdGhlbgorCQltZXJnZV90b29sPSIkKGd1ZXNzX21lcmdlX3Rvb2wpIiB8fCBleGl0CisJZmkKKwllY2hvICIkbWVyZ2VfdG9vbCIKK30KZGlmZiAtLWdpdCBhL2dpdC1tZXJnZXRvb2wuc2ggYi9naXQtbWVyZ2V0b29sLnNoCmluZGV4IGQ0MDc4YTYuLmI1MmE3NDEgMTAwNzU1Ci0tLSBhL2dpdC1tZXJnZXRvb2wuc2gKKysrIGIvZ2l0LW1lcmdldG9vbC5zaApAQCAtOCwxMiArOCwxMyBAQAogIyBhdCB0aGUgZGlzY3JldGlvbiBvZiBKdW5pbyBDIEhhbWFuby4KICMKIAotVVNBR0U9J1stLXRvb2w9dG9vbF0gW2ZpbGUgdG8gbWVyZ2VdIC4uLicKK1VTQUdFPSdbLS10b29sPXRvb2xdIFsteXwtLW5vLXByb21wdHwtLXByb21wdF0gW2ZpbGUgdG8gbWVyZ2VdIC4uLicKIFNVQkRJUkVDVE9SWV9PSz1ZZXMKIE9QVElPTlNfU1BFQz0KK1RPT0xfTU9ERT1tZXJnZQogLiBnaXQtc2gtc2V0dXAKKy4gZ2l0LW1lcmdldG9vbC0tbGliCiByZXF1aXJlX3dvcmtfdHJlZQotcHJlZml4PSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4KQogCiAjIFJldHVybnMgdHJ1ZSBpZiB0aGUgbW9kZSByZWZsZWN0cyBhIHN5bWxpbmsKIGlzX3N5bWxpbmsgKCkgewpAQCAtNzAsMTYgKzcxLDE2IEBACiAJCWdpdCBjaGVja291dC1pbmRleCAtZiAtLXN0YWdlPTIgLS0gIiRNRVJHRUQiCiAJCWdpdCBhZGQgLS0gIiRNRVJHRUQiCiAJCWNsZWFudXBfdGVtcF9maWxlcyAtLXNhdmUtYmFja3VwCi0JCXJldHVybgorCQlyZXR1cm4gMAogCQk7OwogCSAgICBbclJdKikKIAkJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC0tc3RhZ2U9MyAtLSAiJE1FUkdFRCIKIAkJZ2l0IGFkZCAtLSAiJE1FUkdFRCIKIAkJY2xlYW51cF90ZW1wX2ZpbGVzIC0tc2F2ZS1iYWNrdXAKLQkJcmV0dXJuCisJCXJldHVybiAwCiAJCTs7CiAJICAgIFthQV0qKQotCQlleGl0IDEKKwkJcmV0dXJuIDEKIAkJOzsKIAkgICAgZXNhYwogCWRvbmUKQEAgLTk3LDQ3ICs5OCwzOSBAQAogCSAgICBbbU1jQ10qKQogCQlnaXQgYWRkIC0tICIkTUVSR0VEIgogCQljbGVhbnVwX3RlbXBfZmlsZXMgLS1zYXZlLWJhY2t1cAotCQlyZXR1cm4KKwkJcmV0dXJuIDAKIAkJOzsKIAkgICAgW2REXSopCiAJCWdpdCBybSAtLSAiJE1FUkdFRCIgPiAvZGV2L251bGwKIAkJY2xlYW51cF90ZW1wX2ZpbGVzCi0JCXJldHVybgorCQlyZXR1cm4gMAogCQk7OwogCSAgICBbYUFdKikKLQkJZXhpdCAxCisJCXJldHVybiAxCiAJCTs7CiAJICAgIGVzYWMKIAlkb25lCiB9CiAKLWNoZWNrX3VuY2hhbmdlZCAoKSB7Ci0gICAgaWYgdGVzdCAiJE1FUkdFRCIgLW50ICIkQkFDS1VQIiA7IHRoZW4KLQlzdGF0dXM9MDsKLSAgICBlbHNlCi0Jd2hpbGUgdHJ1ZTsgZG8KLQkgICAgZWNobyAiJE1FUkdFRCBzZWVtcyB1bmNoYW5nZWQuIgotCSAgICBwcmludGYgIldhcyB0aGUgbWVyZ2Ugc3VjY2Vzc2Z1bD8gW3kvbl0gIgotCSAgICByZWFkIGFuc3dlciA8IC9kZXYvdHR5Ci0JICAgIGNhc2UgIiRhbnN3ZXIiIGluCi0JCXkqfFkqKSBzdGF0dXM9MDsgYnJlYWsgOzsKLQkJbip8TiopIHN0YXR1cz0xOyBicmVhayA7OwotCSAgICBlc2FjCi0JZG9uZQorY2hlY2tvdXRfc3RhZ2VkX2ZpbGUgKCkgeworICAgIHRtcGZpbGU9JChleHByICIkKGdpdCBjaGVja291dC1pbmRleCAtLXRlbXAgLS1zdGFnZT0iJDEiICIkMiIpIiA6ICdcKFteCV0qXCkJJykKKworICAgIGlmIHRlc3QgJD8gLWVxIDAgLWEgLW4gIiR0bXBmaWxlIiA7IHRoZW4KKwltdiAtLSAiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwKSR0bXBmaWxlIiAiJDMiCiAgICAgZmkKIH0KIAogbWVyZ2VfZmlsZSAoKSB7CiAgICAgTUVSR0VEPSIkMSIKIAotICAgIGY9YGdpdCBscy1maWxlcyAtdSAtLSAiJE1FUkdFRCJgCisgICAgZj0kKGdpdCBscy1maWxlcyAtdSAtLSAiJE1FUkdFRCIpCiAgICAgaWYgdGVzdCAteiAiJGYiIDsgdGhlbgogCWlmIHRlc3QgISAtZiAiJE1FUkdFRCIgOyB0aGVuCiAJICAgIGVjaG8gIiRNRVJHRUQ6IGZpbGUgbm90IGZvdW5kIgogCWVsc2UKIAkgICAgZWNobyAiJE1FUkdFRDogZmlsZSBkb2VzIG5vdCBuZWVkIG1lcmdpbmciCiAJZmkKLQlleGl0IDEKKwlyZXR1cm4gMQogICAgIGZpCiAKICAgICBleHQ9IiQkJChleHByICIkTUVSR0VEIiA6ICcuKlwoXC5bXi9dKlwpJCcpIgpAQCAtMTQ5LDEzICsxNDIsMTMgQEAKICAgICBtdiAtLSAiJE1FUkdFRCIgIiRCQUNLVVAiCiAgICAgY3AgLS0gIiRCQUNLVVAiICIkTUVSR0VEIgogCi0gICAgYmFzZV9tb2RlPWBnaXQgbHMtZmlsZXMgLXUgLS0gIiRNRVJHRUQiIHwgYXdrICd7aWYgKCQzPT0xKSBwcmludCAkMTt9J2AKLSAgICBsb2NhbF9tb2RlPWBnaXQgbHMtZmlsZXMgLXUgLS0gIiRNRVJHRUQiIHwgYXdrICd7aWYgKCQzPT0yKSBwcmludCAkMTt9J2AKLSAgICByZW1vdGVfbW9kZT1gZ2l0IGxzLWZpbGVzIC11IC0tICIkTUVSR0VEIiB8IGF3ayAne2lmICgkMz09MykgcHJpbnQgJDE7fSdgCisgICAgYmFzZV9tb2RlPSQoZ2l0IGxzLWZpbGVzIC11IC0tICIkTUVSR0VEIiB8IGF3ayAne2lmICgkMz09MSkgcHJpbnQgJDE7fScpCisgICAgbG9jYWxfbW9kZT0kKGdpdCBscy1maWxlcyAtdSAtLSAiJE1FUkdFRCIgfCBhd2sgJ3tpZiAoJDM9PTIpIHByaW50ICQxO30nKQorICAgIHJlbW90ZV9tb2RlPSQoZ2l0IGxzLWZpbGVzIC11IC0tICIkTUVSR0VEIiB8IGF3ayAne2lmICgkMz09MykgcHJpbnQgJDE7fScpCiAKLSAgICBiYXNlX3ByZXNlbnQgICAmJiBnaXQgY2F0LWZpbGUgYmxvYiAiOjE6JHByZWZpeCRNRVJHRUQiID4iJEJBU0UiIDI+L2Rldi9udWxsCi0gICAgbG9jYWxfcHJlc2VudCAgJiYgZ2l0IGNhdC1maWxlIGJsb2IgIjoyOiRwcmVmaXgkTUVSR0VEIiA+IiRMT0NBTCIgMj4vZGV2L251bGwKLSAgICByZW1vdGVfcHJlc2VudCAmJiBnaXQgY2F0LWZpbGUgYmxvYiAiOjM6JHByZWZpeCRNRVJHRUQiID4iJFJFTU9URSIgMj4vZGV2L251bGwKKyAgICBiYXNlX3ByZXNlbnQgICAmJiBjaGVja291dF9zdGFnZWRfZmlsZSAxICIkTUVSR0VEIiAiJEJBU0UiCisgICAgbG9jYWxfcHJlc2VudCAgJiYgY2hlY2tvdXRfc3RhZ2VkX2ZpbGUgMiAiJE1FUkdFRCIgIiRMT0NBTCIKKyAgICByZW1vdGVfcHJlc2VudCAmJiBjaGVja291dF9zdGFnZWRfZmlsZSAzICIkTUVSR0VEIiAiJFJFTU9URSIKIAogICAgIGlmIHRlc3QgLXogIiRsb2NhbF9tb2RlIiAtbyAteiAiJHJlbW90ZV9tb2RlIjsgdGhlbgogCWVjaG8gIkRlbGV0ZWQgbWVyZ2UgY29uZmxpY3QgZm9yICckTUVSR0VEJzoiCkBAIC0xNzYsOTggKzE2OSwyNiBAQAogICAgIGVjaG8gIk5vcm1hbCBtZXJnZSBjb25mbGljdCBmb3IgJyRNRVJHRUQnOiIKICAgICBkZXNjcmliZV9maWxlICIkbG9jYWxfbW9kZSIgImxvY2FsIiAiJExPQ0FMIgogICAgIGRlc2NyaWJlX2ZpbGUgIiRyZW1vdGVfbW9kZSIgInJlbW90ZSIgIiRSRU1PVEUiCi0gICAgcHJpbnRmICJIaXQgcmV0dXJuIHRvIHN0YXJ0IG1lcmdlIHJlc29sdXRpb24gdG9vbCAoJXMpOiAiICIkbWVyZ2VfdG9vbCIKLSAgICByZWFkIGFucworICAgIGlmICIkcHJvbXB0IiA9IHRydWU7IHRoZW4KKwlwcmludGYgIkhpdCByZXR1cm4gdG8gc3RhcnQgbWVyZ2UgcmVzb2x1dGlvbiB0b29sICglcyk6ICIgIiRtZXJnZV90b29sIgorCXJlYWQgYW5zCisgICAgZmkKIAotICAgIGNhc2UgIiRtZXJnZV90b29sIiBpbgotCWtkaWZmMykKLQkgICAgaWYgYmFzZV9wcmVzZW50IDsgdGhlbgotCQkoIiRtZXJnZV90b29sX3BhdGgiIC0tYXV0byAtLUwxICIkTUVSR0VEIChCYXNlKSIgLS1MMiAiJE1FUkdFRCAoTG9jYWwpIiAtLUwzICIkTUVSR0VEIChSZW1vdGUpIiBcCi0JCSAgICAtbyAiJE1FUkdFRCIgIiRCQVNFIiAiJExPQ0FMIiAiJFJFTU9URSIgPiAvZGV2L251bGwgMj4mMSkKLQkgICAgZWxzZQotCQkoIiRtZXJnZV90b29sX3BhdGgiIC0tYXV0byAtLUwxICIkTUVSR0VEIChMb2NhbCkiIC0tTDIgIiRNRVJHRUQgKFJlbW90ZSkiIFwKLQkJICAgIC1vICIkTUVSR0VEIiAiJExPQ0FMIiAiJFJFTU9URSIgPiAvZGV2L251bGwgMj4mMSkKLQkgICAgZmkKLQkgICAgc3RhdHVzPSQ/Ci0JICAgIDs7Ci0JdGtkaWZmKQotCSAgICBpZiBiYXNlX3ByZXNlbnQgOyB0aGVuCi0JCSIkbWVyZ2VfdG9vbF9wYXRoIiAtYSAiJEJBU0UiIC1vICIkTUVSR0VEIiAiJExPQ0FMIiAiJFJFTU9URSIKLQkgICAgZWxzZQotCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLW8gIiRNRVJHRUQiICIkTE9DQUwiICIkUkVNT1RFIgotCSAgICBmaQotCSAgICBzdGF0dXM9JD8KLQkgICAgOzsKLQltZWxkfHZpbWRpZmYpCi0JICAgIHRvdWNoICIkQkFDS1VQIgotCSAgICAiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIgotCSAgICBjaGVja191bmNoYW5nZWQKLQkgICAgOzsKLQlndmltZGlmZikKLQkgICAgdG91Y2ggIiRCQUNLVVAiCi0JICAgICIkbWVyZ2VfdG9vbF9wYXRoIiAtZiAiJExPQ0FMIiAiJE1FUkdFRCIgIiRSRU1PVEUiCi0JICAgIGNoZWNrX3VuY2hhbmdlZAotCSAgICA7OwotCXh4ZGlmZikKLQkgICAgdG91Y2ggIiRCQUNLVVAiCi0JICAgIGlmIGJhc2VfcHJlc2VudCA7IHRoZW4KLQkJIiRtZXJnZV90b29sX3BhdGgiIC1YIC0tc2hvdy1tZXJnZWQtcGFuZSBcCi0JCSAgICAtUiAnQWNjZWwuU2F2ZUFzTWVyZ2VkOiAiQ3RybC1TIicgXAotCQkgICAgLVIgJ0FjY2VsLlNlYXJjaDogIkN0cmwrRiInIFwKLQkJICAgIC1SICdBY2NlbC5TZWFyY2hGb3J3YXJkOiAiQ3RybC1HIicgXAotCQkgICAgLS1tZXJnZWQtZmlsZSAiJE1FUkdFRCIgIiRMT0NBTCIgIiRCQVNFIiAiJFJFTU9URSIKLQkgICAgZWxzZQotCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLVggLS1zaG93LW1lcmdlZC1wYW5lIFwKLQkJICAgIC1SICdBY2NlbC5TYXZlQXNNZXJnZWQ6ICJDdHJsLVMiJyBcCi0JCSAgICAtUiAnQWNjZWwuU2VhcmNoOiAiQ3RybCtGIicgXAotCQkgICAgLVIgJ0FjY2VsLlNlYXJjaEZvcndhcmQ6ICJDdHJsLUciJyBcCi0JCSAgICAtLW1lcmdlZC1maWxlICIkTUVSR0VEIiAiJExPQ0FMIiAiJFJFTU9URSIKLQkgICAgZmkKLQkgICAgY2hlY2tfdW5jaGFuZ2VkCi0JICAgIDs7Ci0Jb3BlbmRpZmYpCi0JICAgIHRvdWNoICIkQkFDS1VQIgotCSAgICBpZiBiYXNlX3ByZXNlbnQ7IHRoZW4KLQkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiAtYW5jZXN0b3IgIiRCQVNFIiAtbWVyZ2UgIiRNRVJHRUQiIHwgY2F0Ci0JICAgIGVsc2UKLQkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiAtbWVyZ2UgIiRNRVJHRUQiIHwgY2F0Ci0JICAgIGZpCi0JICAgIGNoZWNrX3VuY2hhbmdlZAotCSAgICA7OwotCWVjbWVyZ2UpCi0JICAgIHRvdWNoICIkQkFDS1VQIgotCSAgICBpZiBiYXNlX3ByZXNlbnQ7IHRoZW4KLQkJIiRtZXJnZV90b29sX3BhdGgiICIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiIC0tZGVmYXVsdCAtLW1vZGU9bWVyZ2UzIC0tdG89IiRNRVJHRUQiCi0JICAgIGVsc2UKLQkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiAtLWRlZmF1bHQgLS1tb2RlPW1lcmdlMiAtLXRvPSIkTUVSR0VEIgotCSAgICBmaQotCSAgICBjaGVja191bmNoYW5nZWQKLQkgICAgOzsKLQllbWVyZ2UpCi0JICAgIGlmIGJhc2VfcHJlc2VudCA7IHRoZW4KLQkJIiRtZXJnZV90b29sX3BhdGgiIC1mIGVtZXJnZS1maWxlcy13aXRoLWFuY2VzdG9yLWNvbW1hbmQgIiRMT0NBTCIgIiRSRU1PVEUiICIkQkFTRSIgIiQoYmFzZW5hbWUgIiRNRVJHRUQiKSIKLQkgICAgZWxzZQotCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgZW1lcmdlLWZpbGVzLWNvbW1hbmQgIiRMT0NBTCIgIiRSRU1PVEUiICIkKGJhc2VuYW1lICIkTUVSR0VEIikiCi0JICAgIGZpCi0JICAgIHN0YXR1cz0kPwotCSAgICA7OwotCSopCi0JICAgIGlmIHRlc3QgLW4gIiRtZXJnZV90b29sX2NtZCI7IHRoZW4KLQkJaWYgdGVzdCAiJG1lcmdlX3Rvb2xfdHJ1c3RfZXhpdF9jb2RlIiA9ICJmYWxzZSI7IHRoZW4KLQkJICAgIHRvdWNoICIkQkFDS1VQIgotCQkgICAgKCBldmFsICRtZXJnZV90b29sX2NtZCApCi0JCSAgICBjaGVja191bmNoYW5nZWQKLQkJZWxzZQotCQkgICAgKCBldmFsICRtZXJnZV90b29sX2NtZCApCi0JCSAgICBzdGF0dXM9JD8KLQkJZmkKLQkgICAgZmkKLQkgICAgOzsKLSAgICBlc2FjCi0gICAgaWYgdGVzdCAiJHN0YXR1cyIgLW5lIDA7IHRoZW4KKyAgICBpZiBiYXNlX3ByZXNlbnQ7IHRoZW4KKwkgICAgcHJlc2VudD10cnVlCisgICAgZWxzZQorCSAgICBwcmVzZW50PWZhbHNlCisgICAgZmkKKworICAgIGlmICEgcnVuX21lcmdlX3Rvb2wgIiRtZXJnZV90b29sIiAiJHByZXNlbnQiOyB0aGVuCiAJZWNobyAibWVyZ2Ugb2YgJE1FUkdFRCBmYWlsZWQiIDE+JjIKIAltdiAtLSAiJEJBQ0tVUCIgIiRNRVJHRUQiCi0JZXhpdCAxCisKKwlpZiB0ZXN0ICIkbWVyZ2Vfa2VlcF90ZW1wb3JhcmllcyIgPSAiZmFsc2UiOyB0aGVuCisJICAgIGNsZWFudXBfdGVtcF9maWxlcworCWZpCisKKwlyZXR1cm4gMQogICAgIGZpCiAKICAgICBpZiB0ZXN0ICIkbWVyZ2Vfa2VlcF9iYWNrdXAiID0gInRydWUiOyB0aGVuCkBAIC0yNzgsMTUgKzE5OSwxOCBAQAogCiAgICAgZ2l0IGFkZCAtLSAiJE1FUkdFRCIKICAgICBjbGVhbnVwX3RlbXBfZmlsZXMKKyAgICByZXR1cm4gMAogfQogCitwcm9tcHQ9JChnaXQgY29uZmlnIC0tYm9vbCBtZXJnZXRvb2wucHJvbXB0IHx8IGVjaG8gdHJ1ZSkKKwogd2hpbGUgdGVzdCAkIyAhPSAwCiBkbwogICAgIGNhc2UgIiQxIiBpbgogCS10fC0tdG9vbCopCiAJICAgIGNhc2UgIiQjLCQxIiBpbgogCQkqLCo9KikKLQkJICAgIG1lcmdlX3Rvb2w9YGV4cHIgInokMSIgOiAnei1bXj1dKj1cKC4qXCknYAorCQkgICAgbWVyZ2VfdG9vbD0kKGV4cHIgInokMSIgOiAnei1bXj1dKj1cKC4qXCknKQogCQkgICAgOzsKIAkJMSwqKQogCQkgICAgdXNhZ2UgOzsKQEAgLTI5NSw2ICsyMTksMTIgQEAKIAkJICAgIHNoaWZ0IDs7CiAJICAgIGVzYWMKIAkgICAgOzsKKwkteXwtLW5vLXByb21wdCkKKwkgICAgcHJvbXB0PWZhbHNlCisJICAgIDs7CisJLS1wcm9tcHQpCisJICAgIHByb21wdD10cnVlCisJICAgIDs7CiAJLS0pCiAJICAgIHNoaWZ0CiAJICAgIGJyZWFrCkBAIC0zMDksMTE4ICsyMzksNjcgQEAKICAgICBzaGlmdAogZG9uZQogCi12YWxpZF9jdXN0b21fdG9vbCgpCi17Ci0gICAgbWVyZ2VfdG9vbF9jbWQ9IiQoZ2l0IGNvbmZpZyBtZXJnZXRvb2wuJDEuY21kKSIKLSAgICB0ZXN0IC1uICIkbWVyZ2VfdG9vbF9jbWQiCi19Citwcm9tcHRfYWZ0ZXJfZmFpbGVkX21lcmdlKCkgeworICAgIHdoaWxlIHRydWU7IGRvCisJcHJpbnRmICJDb250aW51ZSBtZXJnaW5nIG90aGVyIHVucmVzb2x2ZWQgcGF0aHMgKHkvbikgPyAiCisJcmVhZCBhbnMKKwljYXNlICIkYW5zIiBpbgogCi12YWxpZF90b29sKCkgewotCWNhc2UgIiQxIiBpbgotCQlrZGlmZjMgfCB0a2RpZmYgfCB4eGRpZmYgfCBtZWxkIHwgb3BlbmRpZmYgfCBlbWVyZ2UgfCB2aW1kaWZmIHwgZ3ZpbWRpZmYgfCBlY21lcmdlKQotCQkJOzsgIyBoYXBweQotCQkqKQotCQkJaWYgISB2YWxpZF9jdXN0b21fdG9vbCAiJDEiOyB0aGVuCi0JCQkJcmV0dXJuIDEKLQkJCWZpCi0JCQk7OworCSAgICBbeVldKikKKwkJcmV0dXJuIDAKKwkJOzsKKworCSAgICBbbk5dKikKKwkJcmV0dXJuIDEKKwkJOzsKIAllc2FjCisgICAgZG9uZQogfQogCi1pbml0X21lcmdlX3Rvb2xfcGF0aCgpIHsKLQltZXJnZV90b29sX3BhdGg9YGdpdCBjb25maWcgbWVyZ2V0b29sLiQxLnBhdGhgCi0JaWYgdGVzdCAteiAiJG1lcmdlX3Rvb2xfcGF0aCIgOyB0aGVuCi0JCWNhc2UgIiQxIiBpbgotCQkJZW1lcmdlKQotCQkJCW1lcmdlX3Rvb2xfcGF0aD1lbWFjcwotCQkJCTs7Ci0JCQkqKQotCQkJCW1lcmdlX3Rvb2xfcGF0aD0kMQotCQkJCTs7Ci0JCWVzYWMKLQlmaQotfQotCi0KIGlmIHRlc3QgLXogIiRtZXJnZV90b29sIjsgdGhlbgotICAgIG1lcmdlX3Rvb2w9YGdpdCBjb25maWcgbWVyZ2UudG9vbGAKLSAgICBpZiB0ZXN0IC1uICIkbWVyZ2VfdG9vbCIgJiYgISB2YWxpZF90b29sICIkbWVyZ2VfdG9vbCI7IHRoZW4KLQkgICAgZWNobyA+JjIgImdpdCBjb25maWcgb3B0aW9uIG1lcmdlLnRvb2wgc2V0IHRvIHVua25vd24gdG9vbDogJG1lcmdlX3Rvb2wiCi0JICAgIGVjaG8gPiYyICJSZXNldHRpbmcgdG8gZGVmYXVsdC4uLiIKLQkgICAgdW5zZXQgbWVyZ2VfdG9vbAotICAgIGZpCisgICAgbWVyZ2VfdG9vbD0kKGdldF9tZXJnZV90b29sICIkbWVyZ2VfdG9vbCIpIHx8IGV4aXQKIGZpCittZXJnZV9rZWVwX2JhY2t1cD0iJChnaXQgY29uZmlnIC0tYm9vbCBtZXJnZXRvb2wua2VlcEJhY2t1cCB8fCBlY2hvIHRydWUpIgorbWVyZ2Vfa2VlcF90ZW1wb3Jhcmllcz0iJChnaXQgY29uZmlnIC0tYm9vbCBtZXJnZXRvb2wua2VlcFRlbXBvcmFyaWVzIHx8IGVjaG8gZmFsc2UpIgogCi1pZiB0ZXN0IC16ICIkbWVyZ2VfdG9vbCIgOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJERJU1BMQVkiOyB0aGVuCi0gICAgICAgIG1lcmdlX3Rvb2xfY2FuZGlkYXRlcz0ia2RpZmYzIHRrZGlmZiB4eGRpZmYgbWVsZCBndmltZGlmZiIKLSAgICAgICAgaWYgdGVzdCAtbiAiJEdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIgOyB0aGVuCi0gICAgICAgICAgICBtZXJnZV90b29sX2NhbmRpZGF0ZXM9Im1lbGQgJG1lcmdlX3Rvb2xfY2FuZGlkYXRlcyIKLSAgICAgICAgZmkKLSAgICAgICAgaWYgdGVzdCAiJEtERV9GVUxMX1NFU1NJT04iID0gInRydWUiOyB0aGVuCi0gICAgICAgICAgICBtZXJnZV90b29sX2NhbmRpZGF0ZXM9ImtkaWZmMyAkbWVyZ2VfdG9vbF9jYW5kaWRhdGVzIgotICAgICAgICBmaQotICAgIGZpCi0gICAgaWYgZWNobyAiJHtWSVNVQUw6LSRFRElUT1J9IiB8IGdyZXAgJ2VtYWNzJyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAgIG1lcmdlX3Rvb2xfY2FuZGlkYXRlcz0iJG1lcmdlX3Rvb2xfY2FuZGlkYXRlcyBlbWVyZ2UiCi0gICAgZmkKLSAgICBpZiBlY2hvICIke1ZJU1VBTDotJEVESVRPUn0iIHwgZ3JlcCAndmltJyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAgIG1lcmdlX3Rvb2xfY2FuZGlkYXRlcz0iJG1lcmdlX3Rvb2xfY2FuZGlkYXRlcyB2aW1kaWZmIgotICAgIGZpCi0gICAgbWVyZ2VfdG9vbF9jYW5kaWRhdGVzPSIkbWVyZ2VfdG9vbF9jYW5kaWRhdGVzIG9wZW5kaWZmIGVtZXJnZSB2aW1kaWZmIgotICAgIGVjaG8gIm1lcmdlIHRvb2wgY2FuZGlkYXRlczogJG1lcmdlX3Rvb2xfY2FuZGlkYXRlcyIKLSAgICBmb3IgaSBpbiAkbWVyZ2VfdG9vbF9jYW5kaWRhdGVzOyBkbwotICAgICAgICBpbml0X21lcmdlX3Rvb2xfcGF0aCAkaQotICAgICAgICBpZiB0eXBlICIkbWVyZ2VfdG9vbF9wYXRoIiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAgICAgICBtZXJnZV90b29sPSRpCi0gICAgICAgICAgICBicmVhawotICAgICAgICBmaQotICAgIGRvbmUKLSAgICBpZiB0ZXN0IC16ICIkbWVyZ2VfdG9vbCIgOyB0aGVuCi0JZWNobyAiTm8ga25vd24gbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtIGF2YWlsYWJsZS4iCi0JZXhpdCAxCi0gICAgZmkKLWVsc2UKLSAgICBpZiAhIHZhbGlkX3Rvb2wgIiRtZXJnZV90b29sIjsgdGhlbgotICAgICAgICBlY2hvID4mMiAiVW5rbm93biBtZXJnZV90b29sICRtZXJnZV90b29sIgotICAgICAgICBleGl0IDEKLSAgICBmaQotCi0gICAgaW5pdF9tZXJnZV90b29sX3BhdGggIiRtZXJnZV90b29sIgotCi0gICAgbWVyZ2Vfa2VlcF9iYWNrdXA9IiQoZ2l0IGNvbmZpZyAtLWJvb2wgbWVyZ2Uua2VlcEJhY2t1cCB8fCBlY2hvIHRydWUpIgotCi0gICAgaWYgdGVzdCAteiAiJG1lcmdlX3Rvb2xfY21kIiAmJiAhIHR5cGUgIiRtZXJnZV90b29sX3BhdGgiID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICAgZWNobyAiVGhlIG1lcmdlIHRvb2wgJG1lcmdlX3Rvb2wgaXMgbm90IGF2YWlsYWJsZSBhcyAnJG1lcmdlX3Rvb2xfcGF0aCciCi0gICAgICAgIGV4aXQgMQotICAgIGZpCi0KLSAgICBpZiAhIHRlc3QgLXogIiRtZXJnZV90b29sX2NtZCI7IHRoZW4KLSAgICAgICAgbWVyZ2VfdG9vbF90cnVzdF9leGl0X2NvZGU9IiQoZ2l0IGNvbmZpZyAtLWJvb2wgbWVyZ2V0b29sLiRtZXJnZV90b29sLnRydXN0RXhpdENvZGUgfHwgZWNobyBmYWxzZSkiCi0gICAgZmkKLWZpCi0KK2xhc3Rfc3RhdHVzPTAKK3JvbGx1cF9zdGF0dXM9MAogCiBpZiB0ZXN0ICQjIC1lcSAwIDsgdGhlbgotCWZpbGVzPWBnaXQgbHMtZmlsZXMgLXUgfCBzZWQgLWUgJ3MvXlteCV0qCS8vJyB8IHNvcnQgLXVgCi0JaWYgdGVzdCAteiAiJGZpbGVzIiA7IHRoZW4KLQkJZWNobyAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIgotCQlleGl0IDAKKyAgICBmaWxlcz0kKGdpdCBscy1maWxlcyAtdSB8IHNlZCAtZSAncy9eW14JXSoJLy8nIHwgc29ydCAtdSkKKyAgICBpZiB0ZXN0IC16ICIkZmlsZXMiIDsgdGhlbgorCWVjaG8gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIKKwlleGl0IDAKKyAgICBmaQorICAgIGVjaG8gTWVyZ2luZyB0aGUgZmlsZXM6ICIkZmlsZXMiCisgICAgZ2l0IGxzLWZpbGVzIC11IHwKKyAgICBzZWQgLWUgJ3MvXlteCV0qCS8vJyB8CisgICAgc29ydCAtdSB8CisgICAgd2hpbGUgSUZTPSByZWFkIGkKKyAgICBkbworCWlmIHRlc3QgJGxhc3Rfc3RhdHVzIC1uZSAwOyB0aGVuCisJICAgIHByb21wdF9hZnRlcl9mYWlsZWRfbWVyZ2UgPCAvZGV2L3R0eSB8fCBleGl0IDEKIAlmaQotCWVjaG8gTWVyZ2luZyB0aGUgZmlsZXM6ICIkZmlsZXMiCi0JZ2l0IGxzLWZpbGVzIC11IHwKLQlzZWQgLWUgJ3MvXlteCV0qCS8vJyB8Ci0Jc29ydCAtdSB8Ci0Jd2hpbGUgSUZTPSByZWFkIGkKLQlkbwotCQlwcmludGYgIlxuIgotCQltZXJnZV9maWxlICIkaSIgPCAvZGV2L3R0eSA+IC9kZXYvdHR5Ci0JZG9uZQorCXByaW50ZiAiXG4iCisJbWVyZ2VfZmlsZSAiJGkiIDwgL2Rldi90dHkgPiAvZGV2L3R0eQorCWxhc3Rfc3RhdHVzPSQ/CisJaWYgdGVzdCAkbGFzdF9zdGF0dXMgLW5lIDA7IHRoZW4KKwkgICAgcm9sbHVwX3N0YXR1cz0xCisJZmkKKyAgICBkb25lCiBlbHNlCi0Jd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KLQkJcHJpbnRmICJcbiIKLQkJbWVyZ2VfZmlsZSAiJDEiCi0JCXNoaWZ0Ci0JZG9uZQorICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisJaWYgdGVzdCAkbGFzdF9zdGF0dXMgLW5lIDA7IHRoZW4KKwkgICAgcHJvbXB0X2FmdGVyX2ZhaWxlZF9tZXJnZSB8fCBleGl0IDEKKwlmaQorCXByaW50ZiAiXG4iCisJbWVyZ2VfZmlsZSAiJDEiCisJbGFzdF9zdGF0dXM9JD8KKwlpZiB0ZXN0ICRsYXN0X3N0YXR1cyAtbmUgMDsgdGhlbgorCSAgICByb2xsdXBfc3RhdHVzPTEKKwlmaQorCXNoaWZ0CisgICAgZG9uZQogZmkKLWV4aXQgMAorCitleGl0ICRyb2xsdXBfc3RhdHVzCmRpZmYgLS1naXQgYS9naXQtcGFyc2UtcmVtb3RlLnNoIGIvZ2l0LXBhcnNlLXJlbW90ZS5zaAppbmRleCA2OTVhNDA5Li41ZjQ3YjE4IDEwMDc1NQotLS0gYS9naXQtcGFyc2UtcmVtb3RlLnNoCisrKyBiL2dpdC1wYXJzZS1yZW1vdGUuc2gKQEAgLTIsNyArMiw3IEBACiAKICMgZ2l0LWxzLXJlbW90ZSBjb3VsZCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIGEgZ2l0IG1hbmFnZWQgcmVwb3NpdG9yeTsKICMgdGhpcyB3b3VsZCBmYWlsIGluIHRoYXQgY2FzZSBhbmQgd291bGQgaXNzdWUgYW4gZXJyb3IgbWVzc2FnZS4KLUdJVF9ESVI9JChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAyPi9kZXYvbnVsbCkgfHwgOjsKK0dJVF9ESVI9JChnaXQgcmV2LXBhcnNlIC1xIC0tZ2l0LWRpcikgfHwgOjsKIAogZ2V0X2RhdGFfc291cmNlICgpIHsKIAljYXNlICIkMSIgaW4KQEAgLTYwLDIwNSArNjAsMzYgQEAKIAllY2hvICR7b3JpZ2luOi1vcmlnaW59CiB9CiAKLWdldF9yZW1vdGVfZGVmYXVsdF9yZWZzX2Zvcl9wdXNoICgpIHsKLQlkYXRhX3NvdXJjZT0kKGdldF9kYXRhX3NvdXJjZSAiJDEiKQotCWNhc2UgIiRkYXRhX3NvdXJjZSIgaW4KLQknJyB8IGJyYW5jaGVzIHwgc2VsZikKLQkJOzsgIyBubyBkZWZhdWx0IHB1c2ggbWFwcGluZywganVzdCBzZW5kIG1hdGNoaW5nIHJlZnMuCi0JY29uZmlnKQotCQlnaXQgY29uZmlnIC0tZ2V0LWFsbCAicmVtb3RlLiQxLnB1c2giIDs7Ci0JcmVtb3RlcykKLQkJc2VkIC1uZSAnL15QdXNoOiAqL3sKLQkJCXMvLy9wCi0JCX0nICIkR0lUX0RJUi9yZW1vdGVzLyQxIiA7OwotCSopCi0JCWRpZSAiaW50ZXJuYWwgZXJyb3I6IGdldC1yZW1vdGUtZGVmYXVsdC1yZWYtZm9yLXB1c2ggJDEiIDs7Ci0JZXNhYwotfQotCi0jIENhbGxlZCBmcm9tIGNhbm9uX3JlZnNfbGlzdF9mb3JfZmV0Y2ggLWQgIiRyZW1vdGUiLCB3aGljaAotIyBpcyBjYWxsZWQgZnJvbSBnZXRfcmVtb3RlX2RlZmF1bHRfcmVmc19mb3JfZmV0Y2ggdG8gZ3JvawotIyByZWZzcGVjcyB0aGF0IGFyZSByZXRyaWV2ZWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiwgYnV0IG5vdAotIyBmcm9tIGdldF9yZW1vdGVfcmVmc19mb3JfZmV0Y2ggd2hlbiBpdCBkZWFscyB3aXRoIHJlZnNwZWNzCi0jIHN1cHBsaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuICAkbHNfcmVtb3RlX3Jlc3VsdCBoYXMgdGhlIGxpc3QKLSMgb2YgcmVmcyBhdmFpbGFibGUgYXQgcmVtb3RlLgotIwotIyBUaGUgZmlyc3QgdG9rZW4gcmV0dXJuZWQgaXMgZWl0aGVyICJleHBsaWNpdCIgb3IgImdsb2IiOyB0aGlzCi0jIGlzIHRvIGhlbHAgcHJldmVudCByYW5kb21seSAiZ2xvYmJlZCIgcmVmIGZyb20gYmVpbmcgY2hvc2VuIGFzCi0jIGEgbWVyZ2UgY2FuZGlkYXRlCi1leHBhbmRfcmVmc193aWxkY2FyZCAoKSB7Ci0JZWNobyAiJGxzX3JlbW90ZV9yZXN1bHQiIHwKLQlnaXQgZmV0Y2gtLXRvb2wgZXhwYW5kLXJlZnMtd2lsZGNhcmQgIi0iICIkQCIKLX0KLQotIyBTdWJyb3V0aW5lIHRvIGNhbm9uaWNhbGl6ZSByZW1vdGU6bG9jYWwgbm90YXRpb24uCi1jYW5vbl9yZWZzX2xpc3RfZm9yX2ZldGNoICgpIHsKLQkjIElmIGNhbGxlZCBmcm9tIGdldF9yZW1vdGVfZGVmYXVsdF9yZWZzX2Zvcl9mZXRjaAotCSMgbGVhdmUgdGhlIGJyYW5jaGVzIGluIGJyYW5jaC4ke2N1cnJfYnJhbmNofS5tZXJnZSBhbG9uZSwKLQkjIG9yIHRoZSBmaXJzdCBvbmUgb3RoZXJ3aXNlOyBhZGQgcHJlZml4IC4gdG8gdGhlIHJlc3QKLQkjIHRvIHByZXZlbnQgdGhlIHNlY29uZGFyeSBicmFuY2hlcyB0byBiZSBtZXJnZWQgYnkgZGVmYXVsdC4KLQltZXJnZV9icmFuY2hlcz0KLQljdXJyX2JyYW5jaD0KLQlpZiB0ZXN0ICIkMSIgPSAiLWQiCi0JdGhlbgotCQlzaGlmdCA7IHJlbW90ZT0iJDEiIDsgc2hpZnQKLQkJc2V0ICQoZXhwYW5kX3JlZnNfd2lsZGNhcmQgIiRyZW1vdGUiICIkQCIpCi0JCWlzX2V4cGxpY2l0PSIkMSIKLQkJc2hpZnQKLQkJaWYgdGVzdCAiJHJlbW90ZSIgPSAiJChnZXRfZGVmYXVsdF9yZW1vdGUpIgotCQl0aGVuCi0JCQljdXJyX2JyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCB8IFwKLQkJCSAgICBzZWQgLWUgJ3N8XnJlZnMvaGVhZHMvfHwnKQotCQkJbWVyZ2VfYnJhbmNoZXM9JChnaXQgY29uZmlnIFwKLQkJCSAgICAtLWdldC1hbGwgImJyYW5jaC4ke2N1cnJfYnJhbmNofS5tZXJnZSIpCi0JCWZpCi0JCWlmIHRlc3QgLXogIiRtZXJnZV9icmFuY2hlcyIgJiYgdGVzdCAkaXNfZXhwbGljaXQgIT0gZXhwbGljaXQKLQkJdGhlbgotCQkJbWVyZ2VfYnJhbmNoZXM9Li50aGlzLndpbGwubmV2ZXIubWF0Y2guYW55LnJlZi4uCi0JCWZpCi0JZmkKLQlmb3IgcmVmCi0JZG8KLQkJZm9yY2U9Ci0JCWNhc2UgIiRyZWYiIGluCi0JCSsqKQotCQkJcmVmPSQoZXhwciAieiRyZWYiIDogJ3orXCguKlwpJykKLQkJCWZvcmNlPSsKLQkJCTs7Ci0JCWVzYWMKLQkJZXhwciAieiRyZWYiIDogJ3ouKjonID4vZGV2L251bGwgfHwgcmVmPSIke3JlZn06IgotCQlyZW1vdGU9JChleHByICJ6JHJlZiIgOiAnelwoW146XSpcKTonKQotCQlsb2NhbD0kKGV4cHIgInokcmVmIiA6ICd6W146XSo6XCguKlwpJykKLQkJZG90X3ByZWZpeD0uCi0JCWlmIHRlc3QgLXogIiRtZXJnZV9icmFuY2hlcyIKLQkJdGhlbgotCQkJbWVyZ2VfYnJhbmNoZXM9JHJlbW90ZQotCQkJZG90X3ByZWZpeD0KLQkJZWxzZQotCQkJZm9yIG1lcmdlX2JyYW5jaCBpbiAkbWVyZ2VfYnJhbmNoZXMKLQkJCWRvCi0JCQkgICAgWyAiJHJlbW90ZSIgPSAiJG1lcmdlX2JyYW5jaCIgXSAmJgotCQkJICAgIGRvdF9wcmVmaXg9ICYmIGJyZWFrCi0JCQlkb25lCi0JCWZpCi0JCWNhc2UgIiRyZW1vdGUiIGluCi0JCScnIHwgSEVBRCApIHJlbW90ZT1IRUFEIDs7Ci0JCXJlZnMvKikgOzsKLQkJaGVhZHMvKiB8IHRhZ3MvKiB8IHJlbW90ZXMvKiApIHJlbW90ZT0icmVmcy8kcmVtb3RlIiA7OwotCQkqKSByZW1vdGU9InJlZnMvaGVhZHMvJHJlbW90ZSIgOzsKLQkJZXNhYwotCQljYXNlICIkbG9jYWwiIGluCi0JCScnKSBsb2NhbD0gOzsKLQkJcmVmcy8qKSA7OwotCQloZWFkcy8qIHwgdGFncy8qIHwgcmVtb3Rlcy8qICkgbG9jYWw9InJlZnMvJGxvY2FsIiA7OwotCQkqKSBsb2NhbD0icmVmcy9oZWFkcy8kbG9jYWwiIDs7Ci0JCWVzYWMKLQotCQlpZiBsb2NhbF9yZWZfbmFtZT0kKGV4cHIgInokbG9jYWwiIDogJ3pyZWZzL1woLipcKScpCi0JCXRoZW4KLQkJICAgZ2l0IGNoZWNrLXJlZi1mb3JtYXQgIiRsb2NhbF9yZWZfbmFtZSIgfHwKLQkJICAgZGllICIqIHJlZnVzaW5nIHRvIGNyZWF0ZSBmdW5ueSByZWYgJyRsb2NhbF9yZWZfbmFtZScgbG9jYWxseSIKLQkJZmkKLQkJZWNobyAiJHtkb3RfcHJlZml4fSR7Zm9yY2V9JHtyZW1vdGV9OiR7bG9jYWx9IgotCWRvbmUKLX0KLQotIyBSZXR1cm5zIGxpc3Qgb2Ygc3JjOiAobm8gc3RvcmUpLCBvciBzcmM6ZHN0IChzdG9yZSkKLWdldF9yZW1vdGVfZGVmYXVsdF9yZWZzX2Zvcl9mZXRjaCAoKSB7Ci0JZGF0YV9zb3VyY2U9JChnZXRfZGF0YV9zb3VyY2UgIiQxIikKLQljYXNlICIkZGF0YV9zb3VyY2UiIGluCi0JJycpCi0JCWVjaG8gIkhFQUQ6IiA7OwotCXNlbGYpCi0JICAgICAgICBjYW5vbl9yZWZzX2xpc3RfZm9yX2ZldGNoIC1kICIkMSIgXAotCQkJJChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHJlZm5hbWUpOicpCi0JCTs7Ci0JY29uZmlnKQotCQljYW5vbl9yZWZzX2xpc3RfZm9yX2ZldGNoIC1kICIkMSIgXAotCQkJJChnaXQgY29uZmlnIC0tZ2V0LWFsbCAicmVtb3RlLiQxLmZldGNoIikgOzsKLQlicmFuY2hlcykKLQkJcmVtb3RlX2JyYW5jaD0kKHNlZCAtbmUgJy8jL3MvLiojLy9wJyAiJEdJVF9ESVIvYnJhbmNoZXMvJDEiKQotCQljYXNlICIkcmVtb3RlX2JyYW5jaCIgaW4gJycpIHJlbW90ZV9icmFuY2g9bWFzdGVyIDs7IGVzYWMKLQkJZWNobyAicmVmcy9oZWFkcy8ke3JlbW90ZV9icmFuY2h9OnJlZnMvaGVhZHMvJDEiCi0JCTs7Ci0JcmVtb3RlcykKLQkJY2Fub25fcmVmc19saXN0X2Zvcl9mZXRjaCAtZCAiJDEiICQoc2VkIC1uZSAnL15QdWxsOiAqL3sKLQkJCQkJCXMvLy9wCi0JCQkJCX0nICIkR0lUX0RJUi9yZW1vdGVzLyQxIikKLQkJOzsKLQkqKQotCQlkaWUgImludGVybmFsIGVycm9yOiBnZXQtcmVtb3RlLWRlZmF1bHQtcmVmLWZvci1mZXRjaCAkMSIgOzsKLQllc2FjCi19Ci0KLWdldF9yZW1vdGVfcmVmc19mb3JfcHVzaCAoKSB7CitnZXRfcmVtb3RlX21lcmdlX2JyYW5jaCAoKSB7CiAJY2FzZSAiJCMiIGluCi0JMCkgZGllICJpbnRlcm5hbCBlcnJvcjogZ2V0LXJlbW90ZS1yZWZzLWZvci1wdXNoLiIgOzsKLQkxKSBnZXRfcmVtb3RlX2RlZmF1bHRfcmVmc19mb3JfcHVzaCAiJEAiIDs7Ci0JKikgc2hpZnQ7IGVjaG8gIiRAIiA7OwotCWVzYWMKLX0KLQotZ2V0X3JlbW90ZV9yZWZzX2Zvcl9mZXRjaCAoKSB7Ci0JY2FzZSAiJCMiIGluCi0JMCkKLQkgICAgZGllICJpbnRlcm5hbCBlcnJvcjogZ2V0LXJlbW90ZS1yZWZzLWZvci1mZXRjaC4iIDs7Ci0JMSkKLQkgICAgZ2V0X3JlbW90ZV9kZWZhdWx0X3JlZnNfZm9yX2ZldGNoICIkQCIgOzsKLQkqKQotCSAgICBzaGlmdAotCSAgICB0YWdfanVzdF9zZWVuPQotCSAgICBmb3IgcmVmCi0JICAgIGRvCi0JCWlmIHRlc3QgIiR0YWdfanVzdF9zZWVuIgotCQl0aGVuCi0JCSAgICBlY2hvICJyZWZzL3RhZ3MvJHtyZWZ9OnJlZnMvdGFncy8ke3JlZn0iCi0JCSAgICB0YWdfanVzdF9zZWVuPQotCQkgICAgY29udGludWUKLQkJZWxzZQotCQkgICAgY2FzZSAiJHJlZiIgaW4KLQkJICAgIHRhZykKLQkJCXRhZ19qdXN0X3NlZW49eWVzCi0JCQljb250aW51ZQotCQkJOzsKLQkJICAgIGVzYWMKLQkJZmkKLQkJY2Fub25fcmVmc19saXN0X2Zvcl9mZXRjaCAiJHJlZiIKLQkgICAgZG9uZQorCTB8MSkKKwkgICAgb3JpZ2luPSIkMSIKKwkgICAgZGVmYXVsdD0kKGdldF9kZWZhdWx0X3JlbW90ZSkKKwkgICAgdGVzdCAteiAiJG9yaWdpbiIgJiYgb3JpZ2luPSRkZWZhdWx0CisJICAgIGN1cnJfYnJhbmNoPSQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKQorCSAgICBbICIkb3JpZ2luIiA9ICIkZGVmYXVsdCIgXSAmJgorCSAgICBlY2hvICQoZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJSh1cHN0cmVhbSknICRjdXJyX2JyYW5jaCkKIAkgICAgOzsKLQllc2FjCi19Ci0KLXJlc29sdmVfYWx0ZXJuYXRlcyAoKSB7Ci0JIyBvcmlnaW5hbCBVUkwgKHh4eC5naXQpCi0JdG9wXz1gZXhwciAieiQxIiA6ICd6XChbXjpdKjovKlteL10qXCkvJ2AKLQl3aGlsZSByZWFkIHBhdGgKLQlkbwotCQljYXNlICIkcGF0aCIgaW4KLQkJXCMqIHwgJycpCi0JCQljb250aW51ZSA7OwotCQkvKikKLQkJCWVjaG8gIiR0b3BfJHBhdGgvIiA7OwotCQkuLi8qKQotCQkJIyByZWxhdGl2ZSAtLSB1Z2x5IGJ1dCBzZWVtcyB0byB3b3JrLgotCQkJZWNobyAiJDEvb2JqZWN0cy8kcGF0aC8iIDs7Ci0JCSopCi0JCQkjIGV4aXQgY29kZSBtYXkgbm90IGJlIGNhdWdodCBieSB0aGUgcmVhZGVyLgotCQkJZWNobyAiYmFkIGFsdGVybmF0ZTogJHBhdGgiCi0JCQlleGl0IDEgOzsKLQkJZXNhYwotCWRvbmUKLX0KLQotZ2V0X3VwbG9hZHBhY2sgKCkgewotCWRhdGFfc291cmNlPSQoZ2V0X2RhdGFfc291cmNlICIkMSIpCi0JY2FzZSAiJGRhdGFfc291cmNlIiBpbgotCWNvbmZpZykKLQkJdXBscD0kKGdpdCBjb25maWcgLS1nZXQgInJlbW90ZS4kMS51cGxvYWRwYWNrIikKLQkJZWNobyAke3VwbHA6LWdpdC11cGxvYWQtcGFja30KLQkJOzsKIAkqKQotCQllY2hvICJnaXQtdXBsb2FkLXBhY2siCisJICAgIHJlcG89JDEKKwkgICAgc2hpZnQKKwkgICAgcmVmPSQxCisJICAgICMgRklYTUU6IEl0IHNob3VsZCByZXR1cm4gdGhlIHRyYWNraW5nIGJyYW5jaAorCSAgICAjICAgICAgICBDdXJyZW50bHkgb25seSB3b3JrcyB3aXRoIHRoZSBkZWZhdWx0IG1hcHBpbmcKKwkgICAgY2FzZSAiJHJlZiIgaW4KKwkgICAgKyopCisJCXJlZj0kKGV4cHIgInokcmVmIiA6ICd6K1woLipcKScpCiAJCTs7CisJICAgIGVzYWMKKwkgICAgZXhwciAieiRyZWYiIDogJ3ouKjonID4vZGV2L251bGwgfHwgcmVmPSIke3JlZn06IgorCSAgICByZW1vdGU9JChleHByICJ6JHJlZiIgOiAnelwoW146XSpcKTonKQorCSAgICBjYXNlICIkcmVtb3RlIiBpbgorCSAgICAnJyB8IEhFQUQgKSByZW1vdGU9SEVBRCA7OworCSAgICBoZWFkcy8qKSByZW1vdGU9JHtyZW1vdGUjaGVhZHMvfSA7OworCSAgICByZWZzL2hlYWRzLyopIHJlbW90ZT0ke3JlbW90ZSNyZWZzL2hlYWRzL30gOzsKKwkgICAgcmVmcy8qIHwgdGFncy8qIHwgcmVtb3Rlcy8qICkgcmVtb3RlPQorCSAgICBlc2FjCisKKwkgICAgWyAtbiAiJHJlbW90ZSIgXSAmJiBlY2hvICJyZWZzL3JlbW90ZXMvJHJlcG8vJHJlbW90ZSIKIAllc2FjCiB9CmRpZmYgLS1naXQgYS9naXQtcHVsbC5zaCBiL2dpdC1wdWxsLnNoCmluZGV4IDJjN2Y0MzIuLjBmMjQxODIgMTAwNzU1Ci0tLSBhL2dpdC1wdWxsLnNoCisrKyBiL2dpdC1wdWxsLnNoCkBAIC0xNiw3ICsxNiw3IEBACiB0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtdSkiIHx8CiAJZGllICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25mbGljdGVkIG1lcmdlLiIKIAotc3RyYXRlZ3lfYXJncz0gbm9fc3RhdD0gbm9fY29tbWl0PSBzcXVhc2g9IG5vX2ZmPSBsb2dfYXJnPSB2ZXJib3NpdHk9CitzdHJhdGVneV9hcmdzPSBkaWZmc3RhdD0gbm9fY29tbWl0PSBzcXVhc2g9IG5vX2ZmPSBsb2dfYXJnPSB2ZXJib3NpdHk9CiBjdXJyX2JyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkKIGN1cnJfYnJhbmNoX3Nob3J0PSQoZWNobyAiJGN1cnJfYnJhbmNoIiB8IHNlZCAic3xyZWZzL2hlYWRzL3x8IikKIHJlYmFzZT0kKGdpdCBjb25maWcgLS1ib29sIGJyYW5jaC4kY3Vycl9icmFuY2hfc2hvcnQucmViYXNlKQpAQCAtMjgsOSArMjgsOSBAQAogCS12fC0tdmVyYm9zZSkKIAkJdmVyYm9zaXR5PSIkdmVyYm9zaXR5IC12IiA7OwogCS1ufC0tbm8tc3RhdHwtLW5vLXN1bW1hcnkpCi0JCW5vX3N0YXQ9LW4gOzsKKwkJZGlmZnN0YXQ9LS1uby1zdGF0IDs7CiAJLS1zdGF0fC0tc3VtbWFyeSkKLQkJbm9fc3RhdD0kMSA7OworCQlkaWZmc3RhdD0tLXN0YXQgOzsKIAktLWxvZ3wtLW5vLWxvZykKIAkJbG9nX2FyZz0kMSA7OwogCS0tbm8tY3wtLW5vLWNvfC0tbm8tY29tfC0tbm8tY29tbXwtLW5vLWNvbW1pfC0tbm8tY29tbWl0KQpAQCAtOTAsMjMgKzkwLDMxIEBACiAKIAljdXJyX2JyYW5jaD0ke2N1cnJfYnJhbmNoI3JlZnMvaGVhZHMvfQogCi0JZWNobyAiWW91IGFza2VkIG1lIHRvIHB1bGwgd2l0aG91dCB0ZWxsaW5nIG1lIHdoaWNoIGJyYW5jaCB5b3UiCi0JZWNobyAid2FudCB0byBtZXJnZSB3aXRoLCBhbmQgJ2JyYW5jaC4ke2N1cnJfYnJhbmNofS5tZXJnZScgaW4iCi0JZWNobyAieW91ciBjb25maWd1cmF0aW9uIGZpbGUgZG9lcyBub3QgdGVsbCBtZSBlaXRoZXIuICBQbGVhc2UiCi0JZWNobyAibmFtZSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugb24gdGhlIGNvbW1hbmQgbGluZSBhbmQiCi0JZWNobyAidHJ5IGFnYWluIChlLmcuICdnaXQgcHVsbCA8cmVwb3NpdG9yeT4gPHJlZnNwZWM+JykuIgotCWVjaG8gIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscyBvbiB0aGUgcmVmc3BlYy4iCi0JZWNobwotCWVjaG8gIklmIHlvdSBvZnRlbiBtZXJnZSB3aXRoIHRoZSBzYW1lIGJyYW5jaCwgeW91IG1heSB3YW50IHRvIgotCWVjaG8gImNvbmZpZ3VyZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24iCi0JZWNobyAiZmlsZToiCi0JZWNobwotCWVjaG8gIiAgICBicmFuY2guJHtjdXJyX2JyYW5jaH0ucmVtb3RlID0gPG5pY2tuYW1lPiIKLQllY2hvICIgICAgYnJhbmNoLiR7Y3Vycl9icmFuY2h9Lm1lcmdlID0gPHJlbW90ZS1yZWY+IgotCWVjaG8gIiAgICByZW1vdGUuPG5pY2tuYW1lPi51cmwgPSA8dXJsPiIKLQllY2hvICIgICAgcmVtb3RlLjxuaWNrbmFtZT4uZmV0Y2ggPSA8cmVmc3BlYz4iCi0JZWNobwotCWVjaG8gIlNlZSBnaXQtY29uZmlnKDEpIGZvciBkZXRhaWxzLiIKKwlpZiBbIC16ICIkY3Vycl9icmFuY2giIF07IHRoZW4KKwkJZWNobyAiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLCBzbyBJIGNhbm5vdCB1c2UgYW55IgorCQllY2hvICInYnJhbmNoLjxicmFuY2huYW1lPi5tZXJnZScgaW4geW91ciBjb25maWd1cmF0aW9uIGZpbGUuIgorCQllY2hvICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugb24gdGhlIGNvbW1hbmQiCisJCWVjaG8gImxpbmUgYW5kIHRyeSBhZ2FpbiAoZS5nLiAnZ2l0IHB1bGwgPHJlcG9zaXRvcnk+IDxyZWZzcGVjPicpLiIKKwkJZWNobyAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKKwllbHNlCisJCWVjaG8gIllvdSBhc2tlZCBtZSB0byBwdWxsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGljaCBicmFuY2ggeW91IgorCQllY2hvICJ3YW50IHRvIG1lcmdlIHdpdGgsIGFuZCAnYnJhbmNoLiR7Y3Vycl9icmFuY2h9Lm1lcmdlJyBpbiIKKwkJZWNobyAieW91ciBjb25maWd1cmF0aW9uIGZpbGUgZG9lcyBub3QgdGVsbCBtZSBlaXRoZXIuCVBsZWFzZSIKKwkJZWNobyAic3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugb24gdGhlIGNvbW1hbmQgbGluZSBhbmQiCisJCWVjaG8gInRyeSBhZ2FpbiAoZS5nLiAnZ2l0IHB1bGwgPHJlcG9zaXRvcnk+IDxyZWZzcGVjPicpLiIKKwkJZWNobyAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKKwkJZWNobworCQllY2hvICJJZiB5b3Ugb2Z0ZW4gbWVyZ2Ugd2l0aCB0aGUgc2FtZSBicmFuY2gsIHlvdSBtYXkgd2FudCB0byIKKwkJZWNobyAiY29uZmlndXJlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluIHlvdXIgY29uZmlndXJhdGlvbiIKKwkJZWNobyAiZmlsZToiCisJCWVjaG8KKwkJZWNobyAiICAgIGJyYW5jaC4ke2N1cnJfYnJhbmNofS5yZW1vdGUgPSA8bmlja25hbWU+IgorCQllY2hvICIgICAgYnJhbmNoLiR7Y3Vycl9icmFuY2h9Lm1lcmdlID0gPHJlbW90ZS1yZWY+IgorCQllY2hvICIgICAgcmVtb3RlLjxuaWNrbmFtZT4udXJsID0gPHVybD4iCisJCWVjaG8gIiAgICByZW1vdGUuPG5pY2tuYW1lPi5mZXRjaCA9IDxyZWZzcGVjPiIKKwkJZWNobworCQllY2hvICJTZWUgZ2l0LWNvbmZpZygxKSBmb3IgZGV0YWlscy4iCisJZmkKIAlleGl0IDEKIH0KIApAQCAtMTE2LDEzICsxMjQsMTggQEAKIAlnaXQgZGlmZi1pbmRleCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tY2FjaGVkIC0tcXVpZXQgSEVBRCAtLSB8fAogCWRpZSAicmVmdXNpbmcgdG8gcHVsbCB3aXRoIHJlYmFzZTogeW91ciB3b3JraW5nIHRyZWUgaXMgbm90IHVwLXRvLWRhdGUiCiAKKwlvbGRyZW1vdGVyZWY9ICYmCiAJLiBnaXQtcGFyc2UtcmVtb3RlICYmCi0Jb3JpZ2luPSIkMSIKLQl0ZXN0IC16ICIkb3JpZ2luIiAmJiBvcmlnaW49JChnZXRfZGVmYXVsdF9yZW1vdGUpCi0JcmVmbGlzdD0iJChnZXRfcmVtb3RlX3JlZnNfZm9yX2ZldGNoICIkQCIgMj4vZGV2L251bGwgfAotCQlzZWQgInN8cmVmcy9oZWFkcy9cKC4qXCk6fFwxfCIpIiAmJgotCW9sZHJlbW90ZXJlZj0iJChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IFwKLQkJInJlZnMvcmVtb3Rlcy8kb3JpZ2luLyRyZWZsaXN0IikiCisJcmVtb3RlcmVmPSIkKGdldF9yZW1vdGVfbWVyZ2VfYnJhbmNoICIkQCIgMj4vZGV2L251bGwpIiAmJgorCW9sZHJlbW90ZXJlZj0iJChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICIkcmVtb3RlcmVmIikiICYmCisJZm9yIHJlZmxvZyBpbiAkKGdpdCByZXYtbGlzdCAtZyAkcmVtb3RlcmVmIDI+L2Rldi9udWxsKQorCWRvCisJCWlmIHRlc3QgIiRyZWZsb2ciID0gIiQoZ2l0IG1lcmdlLWJhc2UgJHJlZmxvZyAkY3Vycl9icmFuY2gpIgorCQl0aGVuCisJCQlvbGRyZW1vdGVyZWY9IiRyZWZsb2ciCisJCQlicmVhaworCQlmaQorCWRvbmUKIH0KIG9yaWdfaGVhZD0kKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgSEVBRCkKIGdpdCBmZXRjaCAkdmVyYm9zaXR5IC0tdXBkYXRlLWhlYWQtb2sgIiRAIiB8fCBleGl0IDEKQEAgLTEzOSw3ICsxNTIsNyBAQAogCWVjaG8gPiYyICJXYXJuaW5nOiBmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLiIKIAllY2hvID4mMiAiV2FybmluZzogZmFzdCBmb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb20iCiAJZWNobyA+JjIgIldhcm5pbmc6IGNvbW1pdCAkb3JpZ19oZWFkLiIKLQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAyPi9kZXYvbnVsbAorCWdpdCB1cGRhdGUtaW5kZXggLXEgLS1yZWZyZXNoCiAJZ2l0IHJlYWQtdHJlZSAtdSAtbSAiJG9yaWdfaGVhZCIgIiRjdXJyX2hlYWQiIHx8CiAJCWRpZSAnQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS4KIEFmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb20KQEAgLTE2OCw4ICsxODEsMTEgQEAKID8qJyAnPyopCiAJaWYgdGVzdCAteiAiJG9yaWdfaGVhZCIKIAl0aGVuCi0JCWVjaG8gPiYyICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkIgotCQlleGl0IDEKKwkJZGllICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkIgorCWZpCisJaWYgdGVzdCB0cnVlID0gIiRyZWJhc2UiCisJdGhlbgorCQlkaWUgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcyIKIAlmaQogCTs7CiBlc2FjCkBAIC0xODMsNyArMTk5LDcgQEAKIAogbWVyZ2VfbmFtZT0kKGdpdCBmbXQtbWVyZ2UtbXNnICRsb2dfYXJnIDwiJEdJVF9ESVIvRkVUQ0hfSEVBRCIpIHx8IGV4aXQKIHRlc3QgdHJ1ZSA9ICIkcmViYXNlIiAmJgotCWV4ZWMgZ2l0LXJlYmFzZSAkc3RyYXRlZ3lfYXJncyAtLW9udG8gJG1lcmdlX2hlYWQgXAorCWV4ZWMgZ2l0LXJlYmFzZSAkZGlmZnN0YXQgJHN0cmF0ZWd5X2FyZ3MgLS1vbnRvICRtZXJnZV9oZWFkIFwKIAkke29sZHJlbW90ZXJlZjotJG1lcmdlX2hlYWR9Ci1leGVjIGdpdC1tZXJnZSAkbm9fc3RhdCAkbm9fY29tbWl0ICRzcXVhc2ggJG5vX2ZmICRsb2dfYXJnICRzdHJhdGVneV9hcmdzIFwKK2V4ZWMgZ2l0LW1lcmdlICRkaWZmc3RhdCAkbm9fY29tbWl0ICRzcXVhc2ggJG5vX2ZmICRsb2dfYXJnICRzdHJhdGVneV9hcmdzIFwKIAkiJG1lcmdlX25hbWUiIEhFQUQgJG1lcmdlX2hlYWQgJHZlcmJvc2l0eQpkaWZmIC0tZ2l0IGEvZ2l0LXF1aWx0aW1wb3J0LnNoIGIvZ2l0LXF1aWx0aW1wb3J0LnNoCmluZGV4IGNlYmFlZTEuLjlhNmJhMmIgMTAwNzU1Ci0tLSBhL2dpdC1xdWlsdGltcG9ydC5zaAorKysgYi9naXQtcXVpbHRpbXBvcnQuc2gKQEAgLTYzLDcgKzYzLDcgQEAKIGNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkKIAogbWtkaXIgJHRtcF9kaXIgfHwgZXhpdCAyCi13aGlsZSByZWFkIHBhdGNoX25hbWUgbGV2ZWwgZ2FyYmFnZQord2hpbGUgcmVhZCBwYXRjaF9uYW1lIGxldmVsIGdhcmJhZ2UgPCYzCiBkbwogCWNhc2UgIiRwYXRjaF9uYW1lIiBpbiAnJ3wnIycqKSBjb250aW51ZTs7IGVzYWMKIAljYXNlICIkbGV2ZWwiIGluCkBAIC0xMzQsNSArMTM0LDUgQEAKIAkJY29tbWl0PSQoIChlY2hvICIkU1VCSkVDVCI7IGVjaG87IGNhdCAiJHRtcF9tc2ciKSB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSAtcCAkY29tbWl0KSAmJgogCQlnaXQgdXBkYXRlLXJlZiAtbSAicXVpbHRpbXBvcnQ6ICRwYXRjaF9uYW1lIiBIRUFEICRjb21taXQgfHwgZXhpdCA0CiAJZmkKLWRvbmUgPCIkUVVJTFRfUEFUQ0hFUy9zZXJpZXMiCitkb25lIDM8IiRRVUlMVF9QQVRDSEVTL3NlcmllcyIKIHJtIC1yZiAkdG1wX2RpciB8fCBleGl0IDUKZGlmZiAtLWdpdCBhL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoIGIvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2gKaW5kZXggMWNlYjU3YS4uMjNkZWQ0OCAxMDA3NTUKLS0tIGEvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2gKKysrIGIvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2gKQEAgLTI3LDYgKzI3LDcgQEAKIGFib3J0ICAgICAgICAgICAgICBhYm9ydCByZWJhc2luZyBwcm9jZXNzIGFuZCByZXN0b3JlIG9yaWdpbmFsIGJyYW5jaAogc2tpcCAgICAgICAgICAgICAgIHNraXAgY3VycmVudCBwYXRjaCBhbmQgY29udGludWUgcmViYXNpbmcgcHJvY2Vzcwogbm8tdmVyaWZ5ICAgICAgICAgIG92ZXJyaWRlIHByZS1yZWJhc2UgaG9vayBmcm9tIHN0b3BwaW5nIHRoZSBvcGVyYXRpb24KK3Jvb3QgICAgICAgICAgICAgICByZWJhc2UgYWxsIHJlYWNoYWJsZSBjb21tbWl0cyB1cCB0byB0aGUgcm9vdChzKQogIgogCiAuIGdpdC1zaC1zZXR1cApAQCAtNDQsNiArNDUsNyBAQAogT05UTz0KIFZFUkJPU0U9CiBPS19UT19TS0lQX1BSRV9SRUJBU0U9CitSRUJBU0VfUk9PVD0KIAogR0lUX0NIRVJSWV9QSUNLX0hFTFA9IiAgQWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsCiBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHMgd2l0aCAnZ2l0IGFkZCA8cGF0aHM+JywgYW5kCkBAIC0xNTQsNiArMTU2LDExIEBACiAJb3V0cHV0IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJHNoYTEgfHwgZGllICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKIAl0ZXN0IC1kICIkUkVXUklUVEVOIiAmJgogCQlwaWNrX29uZV9wcmVzZXJ2aW5nX21lcmdlcyAiJEAiICYmIHJldHVybgorCWlmIHRlc3QgISAteiAiJFJFQkFTRV9ST09UIgorCXRoZW4KKwkJb3V0cHV0IGdpdCBjaGVycnktcGljayAiJEAiCisJCXJldHVybgorCWZpCiAJcGFyZW50X3NoYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRzaGExXikgfHwKIAkJZGllICJDb3VsZCBub3QgZ2V0IHRoZSBwYXJlbnQgb2YgJHNoYTEiCiAJY3VycmVudF9zaGExPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQpAQCAtMTk3LDcgKzIwNCwxMSBAQAogCiAJIyByZXdyaXRlIHBhcmVudHM7IGlmIG5vbmUgd2VyZSByZXdyaXR0ZW4sIHdlIGNhbiBmYXN0LWZvcndhcmQuCiAJbmV3X3BhcmVudHM9Ci0JcGVuZD0iICQoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtMSAkc2hhMSB8IGN1dCAtZCcgJyAtZjItKSIKKwlwZW5kPSIgJChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0xICRzaGExIHwgY3V0IC1kJyAnIC1zIC1mMi0pIgorCWlmIHRlc3QgIiRwZW5kIiA9ICIgIgorCXRoZW4KKwkJcGVuZD0iIHJvb3QiCisJZmkKIAl3aGlsZSBbICIkcGVuZCIgIT0gIiIgXQogCWRvCiAJCXA9JChleHByICIkcGVuZCIgOiAnIFwoW14gXSpcKScpCkBAIC0yMjcsNyArMjM4LDkgQEAKIAkJCWlmIHRlc3QgLWYgIiREUk9QUEVEIi8kcAogCQkJdGhlbgogCQkJCWZhc3RfZm9yd2FyZD1mCi0JCQkJcGVuZD0iICQoY2F0ICIkRFJPUFBFRCIvJHApJHBlbmQiCisJCQkJcmVwbGFjZW1lbnQ9IiQoY2F0ICIkRFJPUFBFRCIvJHApIgorCQkJCXRlc3QgLXogIiRyZXBsYWNlbWVudCIgJiYgcmVwbGFjZW1lbnQ9cm9vdAorCQkJCXBlbmQ9IiAkcmVwbGFjZW1lbnQkcGVuZCIKIAkJCWVsc2UKIAkJCQluZXdfcGFyZW50cz0iJG5ld19wYXJlbnRzICRwIgogCQkJZmkKQEAgLTQwNyw3ICs0MjAsNyBAQAogCU5FV0hFQUQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCiAJY2FzZSAkSEVBRE5BTUUgaW4KIAlyZWZzLyopCi0JCW1lc3NhZ2U9IiRHSVRfUkVGTE9HX0FDVElPTjogJEhFQUROQU1FIG9udG8gJFNIT1JUT05UTykiICYmCisJCW1lc3NhZ2U9IiRHSVRfUkVGTE9HX0FDVElPTjogJEhFQUROQU1FIG9udG8gJFNIT1JUT05UTyIgJiYKIAkJZ2l0IHVwZGF0ZS1yZWYgLW0gIiRtZXNzYWdlIiAkSEVBRE5BTUUgJE5FV0hFQUQgJE9MREhFQUQgJiYKIAkJZ2l0IHN5bWJvbGljLXJlZiBIRUFEICRIRUFETkFNRQogCQk7OwpAQCAtNDI5LDYgKzQ0MiwzMCBAQAogCWRvbmUKIH0KIAorIyBza2lwIHBpY2tpbmcgY29tbWl0cyB3aG9zZSBwYXJlbnRzIGFyZSB1bmNoYW5nZWQKK3NraXBfdW5uZWNlc3NhcnlfcGlja3MgKCkgeworCWZkPTMKKwl3aGlsZSByZWFkIGNvbW1hbmQgc2hhMSByZXN0CisJZG8KKwkJIyBmZD0zIG1lYW5zIHdlIHNraXAgdGhlIGNvbW1hbmQKKwkJY2FzZSAiJGZkLCRjb21tYW5kLCQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICRzaGExXikiIGluCisJCTMscGljaywiJE9OVE8iKnwzLHAsIiRPTlRPIiopCisJCQkjIHBpY2sgYSBjb21taXQgd2hvc2UgcGFyZW50IGlzIGN1cnJlbnQgJE9OVE8gLT4gc2tpcAorCQkJT05UTz0kc2hhMQorCQkJOzsKKwkJMywjKnwzLCwqKQorCQkJIyBjb3B5IGNvbW1lbnRzCisJCQk7OworCQkqKQorCQkJZmQ9MQorCQkJOzsKKwkJZXNhYworCQllY2hvICIkY29tbWFuZCR7c2hhMTorIH0kc2hhMSR7cmVzdDorIH0kcmVzdCIgPiYkZmQKKwlkb25lIDwiJFRPRE8iID4iJFRPRE8ubmV3IiAzPj4iJERPTkUiICYmCisJbXYgLWYgIiRUT0RPIi5uZXcgIiRUT0RPIiB8fAorCWRpZSAiQ291bGQgbm90IHNraXAgdW5uZWNlc3NhcnkgcGljayBjb21tYW5kcyIKK30KKwogIyBjaGVjayBpZiBubyBvdGhlciBvcHRpb25zIGFyZSBzZXQKIGlzX3N0YW5kYWxvbmUgKCkgewogCXRlc3QgJCMgLWVxIDIgLWEgIiQyIiA9ICctLScgJiYKQEAgLTQ0Miw2ICs0NzksNyBAQAogCXRlc3QgLWQgIiRSRVdSSVRURU4iICYmIFBSRVNFUlZFX01FUkdFUz10CiAJdGVzdCAtZiAiJERPVEVTVCIvc3RyYXRlZ3kgJiYgU1RSQVRFR1k9IiQoY2F0ICIkRE9URVNUIi9zdHJhdGVneSkiCiAJdGVzdCAtZiAiJERPVEVTVCIvdmVyYm9zZSAmJiBWRVJCT1NFPXQKKwl0ZXN0IC1mICIkRE9URVNUIi9yZWJhc2Utcm9vdCAmJiBSRUJBU0VfUk9PVD10CiB9CiAKIHdoaWxlIHRlc3QgJCMgIT0gMApAQCAtNTQ2LDYgKzU4NCw5IEBACiAJLWkpCiAJCSMgeWVhaCwgd2Uga25vdwogCQk7OworCS0tcm9vdCkKKwkJUkVCQVNFX1JPT1Q9dAorCQk7OwogCS0tb250bykKIAkJc2hpZnQKIAkJT05UTz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIikgfHwKQEAgLTU1MywyNyArNTk0LDM4IEBACiAJCTs7CiAJLS0pCiAJCXNoaWZ0Ci0JCXJ1bl9wcmVfcmViYXNlX2hvb2sgJHsxKyIkQCJ9Ci0JCXRlc3QgJCMgLWVxIDEgLW8gJCMgLWVxIDIgfHwgdXNhZ2UKKwkJdGVzdCAteiAiJFJFQkFTRV9ST09UIiAtYSAkIyAtZ2UgMSAtYSAkIyAtbGUgMiB8fAorCQl0ZXN0ICEgLXogIiRSRUJBU0VfUk9PVCIgLWEgJCMgLWxlIDEgfHwgdXNhZ2UKIAkJdGVzdCAtZCAiJERPVEVTVCIgJiYKIAkJCWRpZSAiSW50ZXJhY3RpdmUgcmViYXNlIGFscmVhZHkgc3RhcnRlZCIKIAogCQlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgPi9kZXYvbnVsbCB8fAogCQkJZGllICJZb3UgbmVlZCB0byBzZXQgeW91ciBjb21taXR0ZXIgaW5mbyBmaXJzdCIKIAorCQlpZiB0ZXN0IC16ICIkUkVCQVNFX1JPT1QiCisJCXRoZW4KKwkJCVVQU1RSRUFNX0FSRz0iJDEiCisJCQlVUFNUUkVBTT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIikgfHwgZGllICJJbnZhbGlkIGJhc2UiCisJCQl0ZXN0IC16ICIkT05UTyIgJiYgT05UTz0kVVBTVFJFQU0KKwkJCXNoaWZ0CisJCWVsc2UKKwkJCVVQU1RSRUFNPQorCQkJVVBTVFJFQU1fQVJHPS0tcm9vdAorCQkJdGVzdCAteiAiJE9OVE8iICYmCisJCQkJZGllICJZb3UgbXVzdCBzcGVjaWZ5IC0tb250byB3aGVuIHVzaW5nIC0tcm9vdCIKKwkJZmkKKwkJcnVuX3ByZV9yZWJhc2VfaG9vayAiJFVQU1RSRUFNX0FSRyIgIiRAIgorCiAJCWNvbW1lbnRfZm9yX3JlZmxvZyBzdGFydAogCiAJCXJlcXVpcmVfY2xlYW5fd29ya190cmVlCiAKLQkJVVBTVFJFQU09JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMSIpIHx8IGRpZSAiSW52YWxpZCBiYXNlIgotCQl0ZXN0IC16ICIkT05UTyIgJiYgT05UTz0kVVBTVFJFQU0KLQotCQlpZiB0ZXN0ICEgLXogIiQyIgorCQlpZiB0ZXN0ICEgLXogIiQxIgogCQl0aGVuCi0JCQlvdXRwdXQgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC0tcXVpZXQgInJlZnMvaGVhZHMvJDIiIHx8Ci0JCQkJZGllICJJbnZhbGlkIGJyYW5jaG5hbWU6ICQyIgotCQkJb3V0cHV0IGdpdCBjaGVja291dCAiJDIiIHx8Ci0JCQkJZGllICJDb3VsZCBub3QgY2hlY2tvdXQgJDIiCisJCQlvdXRwdXQgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC0tcXVpZXQgInJlZnMvaGVhZHMvJDEiIHx8CisJCQkJZGllICJJbnZhbGlkIGJyYW5jaG5hbWU6ICQxIgorCQkJb3V0cHV0IGdpdCBjaGVja291dCAiJDEiIHx8CisJCQkJZGllICJDb3VsZCBub3QgY2hlY2tvdXQgJDEiCiAJCWZpCiAKIAkJSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgfHwgZGllICJObyBIRUFEPyIKQEAgLTU4NCw3ICs2MzYsMTIgQEAKIAkJCWVjaG8gImRldGFjaGVkIEhFQUQiID4gIiRET1RFU1QiL2hlYWQtbmFtZQogCiAJCWVjaG8gJEhFQUQgPiAiJERPVEVTVCIvaGVhZAotCQllY2hvICRVUFNUUkVBTSA+ICIkRE9URVNUIi91cHN0cmVhbQorCQljYXNlICIkUkVCQVNFX1JPT1QiIGluCisJCScnKQorCQkJcm0gLWYgIiRET1RFU1QiL3JlYmFzZS1yb290IDs7CisJCSopCisJCQk6ID4iJERPVEVTVCIvcmViYXNlLXJvb3QgOzsKKwkJZXNhYwogCQllY2hvICRPTlRPID4gIiRET1RFU1QiL29udG8KIAkJdGVzdCAteiAiJFNUUkFURUdZIiB8fCBlY2hvICIkU1RSQVRFR1kiID4gIiRET1RFU1QiL3N0cmF0ZWd5CiAJCXRlc3QgdCA9ICIkVkVSQk9TRSIgJiYgOiA+ICIkRE9URVNUIi92ZXJib3NlCkBAIC01OTcsMTIgKzY1NCwxOSBAQAogCQkJIyBUaGlzIGVuc3VyZXMgdGhhdCBjb21taXRzIG9uIG1lcmdlZCwgYnV0IG90aGVyd2lzZQogCQkJIyB1bnJlbGF0ZWQgc2lkZSBicmFuY2hlcyBhcmUgbGVmdCBhbG9uZS4gKFRoaW5rICJYIgogCQkJIyBpbiB0aGUgbWFuIHBhZ2UncyBleGFtcGxlLikKLQkJCW1rZGlyICIkUkVXUklUVEVOIiAmJgotCQkJZm9yIGMgaW4gJChnaXQgbWVyZ2UtYmFzZSAtLWFsbCAkSEVBRCAkVVBTVFJFQU0pCi0JCQlkbwotCQkJCWVjaG8gJE9OVE8gPiAiJFJFV1JJVFRFTiIvJGMgfHwKKwkJCWlmIHRlc3QgLXogIiRSRUJBU0VfUk9PVCIKKwkJCXRoZW4KKwkJCQlta2RpciAiJFJFV1JJVFRFTiIgJiYKKwkJCQlmb3IgYyBpbiAkKGdpdCBtZXJnZS1iYXNlIC0tYWxsICRIRUFEICRVUFNUUkVBTSkKKwkJCQlkbworCQkJCQllY2hvICRPTlRPID4gIiRSRVdSSVRURU4iLyRjIHx8CisJCQkJCQlkaWUgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorCQkJCWRvbmUKKwkJCWVsc2UKKwkJCQlta2RpciAiJFJFV1JJVFRFTiIgJiYKKwkJCQllY2hvICRPTlRPID4gIiRSRVdSSVRURU4iL3Jvb3QgfHwKIAkJCQkJZGllICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIKLQkJCWRvbmUKKwkJCWZpCiAJCQkjIE5vIGNoZXJyeS1waWNrIGJlY2F1c2Ugb3VyIGZpcnN0IHBhc3MgaXMgdG8gZGV0ZXJtaW5lCiAJCQkjIHBhcmVudHMgdG8gcmV3cml0ZSBhbmQgc2tpcHBpbmcgZHJvcHBlZCBjb21taXRzIHdvdWxkCiAJCQkjIHByZW1hdHVyZWx5IGVuZCBvdXIgcHJvYmUKQEAgLTYxMiwxMiArNjc2LDIxIEBACiAJCQlNRVJHRVNfT1BUSU9OPSItLW5vLW1lcmdlcyAtLWNoZXJyeS1waWNrIgogCQlmaQogCi0JCVNIT1JUVVBTVFJFQU09JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJFVQU1RSRUFNKQogCQlTSE9SVEhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJEhFQUQpCiAJCVNIT1JUT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkT05UTykKKwkJaWYgdGVzdCAteiAiJFJFQkFTRV9ST09UIgorCQkJIyB0aGlzIGlzIG5vdyBlcXVpdmFsZW50IHRvICEgLXogIiRVUFNUUkVBTSIKKwkJdGhlbgorCQkJU0hPUlRVUFNUUkVBTT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkVVBTVFJFQU0pCisJCQlSRVZJU0lPTlM9JFVQU1RSRUFNLi4uJEhFQUQKKwkJCVNIT1JUUkVWSVNJT05TPSRTSE9SVFVQU1RSRUFNLi4kU0hPUlRIRUFECisJCWVsc2UKKwkJCVJFVklTSU9OUz0kT05UTy4uLiRIRUFECisJCQlTSE9SVFJFVklTSU9OUz0kU0hPUlRIRUFECisJCWZpCiAJCWdpdCByZXYtbGlzdCAkTUVSR0VTX09QVElPTiAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCBcCiAJCQktLWFiYnJldj03IC0tcmV2ZXJzZSAtLWxlZnQtcmlnaHQgLS10b3BvLW9yZGVyIFwKLQkJCSRVUFNUUkVBTS4uLiRIRUFEIHwgXAorCQkJJFJFVklTSU9OUyB8IFwKIAkJCXNlZCAtbiAicy9ePi8vcCIgfCB3aGlsZSByZWFkIHNob3J0c2hhMSByZXN0CiAJCWRvCiAJCQlpZiB0ZXN0IHQgIT0gIiRQUkVTRVJWRV9NRVJHRVMiCkBAIC02MjUsMTQgKzY5OCwxOSBAQAogCQkJCWVjaG8gInBpY2sgJHNob3J0c2hhMSAkcmVzdCIgPj4gIiRUT0RPIgogCQkJZWxzZQogCQkJCXNoYTE9JChnaXQgcmV2LXBhcnNlICRzaG9ydHNoYTEpCi0JCQkJcHJlc2VydmU9dAotCQkJCWZvciBwIGluICQoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtMSAkc2hhMSB8IGN1dCAtZCcgJyAtZjItKQotCQkJCWRvCi0JCQkJCWlmIHRlc3QgLWYgIiRSRVdSSVRURU4iLyRwIC1hIFwoICRwICE9ICRVUFNUUkVBTSAtbyAkc2hhMSA9ICRmaXJzdF9hZnRlcl91cHN0cmVhbSBcKQotCQkJCQl0aGVuCi0JCQkJCQlwcmVzZXJ2ZT1mCi0JCQkJCWZpCi0JCQkJZG9uZQorCQkJCWlmIHRlc3QgLXogIiRSRUJBU0VfUk9PVCIKKwkJCQl0aGVuCisJCQkJCXByZXNlcnZlPXQKKwkJCQkJZm9yIHAgaW4gJChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0xICRzaGExIHwgY3V0IC1kJyAnIC1zIC1mMi0pCisJCQkJCWRvCisJCQkJCQlpZiB0ZXN0IC1mICIkUkVXUklUVEVOIi8kcCAtYSBcKCAkcCAhPSAkT05UTyAtbyAkc2hhMSA9ICRmaXJzdF9hZnRlcl91cHN0cmVhbSBcKQorCQkJCQkJdGhlbgorCQkJCQkJCXByZXNlcnZlPWYKKwkJCQkJCWZpCisJCQkJCWRvbmUKKwkJCQllbHNlCisJCQkJCXByZXNlcnZlPWYKKwkJCQlmaQogCQkJCWlmIHRlc3QgZiA9ICIkcHJlc2VydmUiCiAJCQkJdGhlbgogCQkJCQl0b3VjaCAiJFJFV1JJVFRFTiIvJHNoYTEKQEAgLTY0NiwxMSArNzI0LDExIEBACiAJCXRoZW4KIAkJCW1rZGlyICIkRFJPUFBFRCIKIAkJCSMgU2F2ZSBhbGwgbm9uLWNoZXJyeS1waWNrZWQgY2hhbmdlcwotCQkJZ2l0IHJldi1saXN0ICRVUFNUUkVBTS4uLiRIRUFEIC0tbGVmdC1yaWdodCAtLWNoZXJyeS1waWNrIHwgXAorCQkJZ2l0IHJldi1saXN0ICRSRVZJU0lPTlMgLS1sZWZ0LXJpZ2h0IC0tY2hlcnJ5LXBpY2sgfCBcCiAJCQkJc2VkIC1uICJzL14+Ly9wIiA+ICIkRE9URVNUIi9ub3QtY2hlcnJ5LXBpY2tzCiAJCQkjIE5vdyBhbGwgY29tbWl0cyBhbmQgbm90ZSB3aGljaCBvbmVzIGFyZSBtaXNzaW5nIGluCiAJCQkjIG5vdC1jaGVycnktcGlja3MgYW5kIGhlbmNlIGJlaW5nIGRyb3BwZWQKLQkJCWdpdCByZXYtbGlzdCAkVVBTVFJFQU0uLiRIRUFEIHwKKwkJCWdpdCByZXYtbGlzdCAkUkVWSVNJT05TIHwKIAkJCXdoaWxlIHJlYWQgcmV2CiAJCQlkbwogCQkJCWlmIHRlc3QgLWYgIiRSRVdSSVRURU4iLyRyZXYgLWEgIiQoZ3JlcCAiJHJldiIgIiRET1RFU1QiL25vdC1jaGVycnktcGlja3MpIiA9ICIiCkBAIC02NTksMTcgKzczNywxOCBAQAogCQkJCQkjIG5vdCB3b3J0aHdoaWxlLCB3ZSBkb24ndCB3YW50IHRvIHRyYWNrIGl0cyBtdWx0aXBsZSBoZWFkcywKIAkJCQkJIyBqdXN0IHRoZSBoaXN0b3J5IG9mIGl0cyBmaXJzdC1wYXJlbnQgZm9yIG90aGVycyB0aGF0IHdpbGwKIAkJCQkJIyBiZSByZWJhc2luZyBvbiB0b3Agb2YgaXQKLQkJCQkJZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtMSAkcmV2IHwgY3V0IC1kJyAnIC1mMiA+ICIkRFJPUFBFRCIvJHJldgorCQkJCQlnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0xICRyZXYgfCBjdXQgLWQnICcgLXMgLWYyID4gIiREUk9QUEVEIi8kcmV2CiAJCQkJCXNob3J0PSQoZ2l0IHJldi1saXN0IC0xIC0tYWJicmV2LWNvbW1pdCAtLWFiYnJldj03ICRyZXYpCiAJCQkJCWdyZXAgLXYgIl5bYS16XVthLXpdKiAkc2hvcnQiIDwiJFRPRE8iID4gIiR7VE9ET30yIiA7IG12ICIke1RPRE99MiIgIiRUT0RPIgogCQkJCQlybSAiJFJFV1JJVFRFTiIvJHJldgogCQkJCWZpCiAJCQlkb25lCiAJCWZpCisKIAkJdGVzdCAtcyAiJFRPRE8iIHx8IGVjaG8gbm9vcCA+PiAiJFRPRE8iCiAJCWNhdCA+PiAiJFRPRE8iIDw8IEVPRgogCi0jIFJlYmFzZSAkU0hPUlRVUFNUUkVBTS4uJFNIT1JUSEVBRCBvbnRvICRTSE9SVE9OVE8KKyMgUmViYXNlICRTSE9SVFJFVklTSU9OUyBvbnRvICRTSE9SVE9OVE8KICMKICMgQ29tbWFuZHM6CiAjICBwLCBwaWNrID0gdXNlIGNvbW1pdApAQCAtNjkxLDYgKzc3MCw4IEBACiAJCWhhc19hY3Rpb24gIiRUT0RPIiB8fAogCQkJZGllX2Fib3J0ICJOb3RoaW5nIHRvIGRvIgogCisJCXRlc3QgLWQgIiRSRVdSSVRURU4iIHx8IHNraXBfdW5uZWNlc3NhcnlfcGlja3MKKwogCQlnaXQgdXBkYXRlLXJlZiBPUklHX0hFQUQgJEhFQUQKIAkJb3V0cHV0IGdpdCBjaGVja291dCAkT05UTyAmJiBkb19yZXN0CiAJCTs7CmRpZmYgLS1naXQgYS9naXQtcmViYXNlLnNoIGIvZ2l0LXJlYmFzZS5zaAppbmRleCBlYmQ0ZGYzLi4xOGJjNjk0IDEwMDc1NQotLS0gYS9naXQtcmViYXNlLnNoCisrKyBiL2dpdC1yZWJhc2Uuc2gKQEAgLTMsNyArMyw3IEBACiAjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFuby4KICMKIAotVVNBR0U9J1stLWludGVyYWN0aXZlIHwgLWldIFstdl0gWy0tb250byA8bmV3YmFzZT5dIDx1cHN0cmVhbT4gWzxicmFuY2g+XScKK1VTQUdFPSdbLS1pbnRlcmFjdGl2ZSB8IC1pXSBbLXZdIFstLWZvcmNlLXJlYmFzZSB8IC1mXSBbLS1vbnRvIDxuZXdiYXNlPl0gWzx1cHN0cmVhbT58LS1yb290XSBbPGJyYW5jaD5dIFstLXF1aWV0IHwgLXFdJwogTE9OR19VU0FHRT0nZ2l0LXJlYmFzZSByZXBsYWNlcyA8YnJhbmNoPiB3aXRoIGEgbmV3IGJyYW5jaCBvZiB0aGUKIHNhbWUgbmFtZS4gIFdoZW4gdGhlIC0tb250byBvcHRpb24gaXMgcHJvdmlkZWQgdGhlIG5ldyBicmFuY2ggc3RhcnRzCiBvdXQgd2l0aCBhIEhFQUQgZXF1YWwgdG8gPG5ld2Jhc2U+LCBvdGhlcndpc2UgaXQgaXMgZXF1YWwgdG8gPHVwc3RyZWFtPgpAQCAtNDYsNyArNDYsMTAgQEAKIGRvdGVzdD0iJEdJVF9ESVIiL3JlYmFzZS1tZXJnZQogcHJlYz00CiB2ZXJib3NlPQorZGlmZnN0YXQ9JChnaXQgY29uZmlnIC0tYm9vbCByZWJhc2Uuc3RhdCkKIGdpdF9hbV9vcHQ9CityZWJhc2Vfcm9vdD0KK2ZvcmNlX3JlYmFzZT0KIAogY29udGludWVfbWVyZ2UgKCkgewogCXRlc3QgLW4gIiRwcmV2X2hlYWQiIHx8IGRpZSAicHJldl9oZWFkIG11c3QgYmUgZGVmaW5lZCIKQEAgLTY5LDExICs3MiwyMCBAQAogCQkJZWNobyAiZGlyZWN0bHksIGJ1dCBpbnN0ZWFkIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOiAiCiAJCQlkaWUgIiRSRVNPTFZFTVNHIgogCQlmaQotCQlwcmludGYgIkNvbW1pdHRlZDogJTAke3ByZWN9ZCAiICRtc2dudW0KKwkJaWYgdGVzdCAteiAiJEdJVF9RVUlFVCIKKwkJdGhlbgorCQkJcHJpbnRmICJDb21taXR0ZWQ6ICUwJHtwcmVjfWQgIiAkbXNnbnVtCisJCWZpCiAJZWxzZQotCQlwcmludGYgIkFscmVhZHkgYXBwbGllZDogJTAke3ByZWN9ZCAiICRtc2dudW0KKwkJaWYgdGVzdCAteiAiJEdJVF9RVUlFVCIKKwkJdGhlbgorCQkJcHJpbnRmICJBbHJlYWR5IGFwcGxpZWQ6ICUwJHtwcmVjfWQgIiAkbXNnbnVtCisJCWZpCiAJZmkKLQlnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZSAtMSAiJGNtdCIgfCBzZWQgLWUgJ3MvXlteIF0qIC8vJworCWlmIHRlc3QgLXogIiRHSVRfUVVJRVQiCisJdGhlbgorCQlnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZSAtMSAiJGNtdCIgfCBzZWQgLWUgJ3MvXlteIF0qIC8vJworCWZpCiAKIAlwcmV2X2hlYWQ9YGdpdCByZXYtcGFyc2UgSEVBRF4wYAogCSMgc2F2ZSB0aGUgcmVzdWx0aW5nIGNvbW1pdCBzbyB3ZSBjYW4gcmVhZC10cmVlIG9uIGl0IGxhdGVyCkBAIC05NCw2ICsxMDYsMTAgQEAKIAlldmFsIEdJVEhFQURfJGNtdD0nIiR7Y210X25hbWUjI3JlZnMvaGVhZHMvfX4kKCgkZW5kIC0gJG1zZ251bSkpIicKIAlldmFsIEdJVEhFQURfJGhkPSckKGNhdCAiJGRvdGVzdC9vbnRvX25hbWUiKScKIAlleHBvcnQgR0lUSEVBRF8kY210IEdJVEhFQURfJGhkCisJaWYgdGVzdCAtbiAiJEdJVF9RVUlFVCIKKwl0aGVuCisJCWV4cG9ydCBHSVRfTUVSR0VfVkVSQk9TSVRZPTEKKwlmaQogCWdpdC1tZXJnZS0kc3RyYXRlZ3kgIiRjbXReIiAtLSAiJGhkIiAiJGNtdCIKIAlydj0kPwogCWNhc2UgIiRydiIgaW4KQEAgLTEzNSw3ICsxNTEsNyBAQAogZmluaXNoX3JiX21lcmdlICgpIHsKIAltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAogCXJtIC1yICIkZG90ZXN0IgotCWVjaG8gIkFsbCBkb25lLiIKKwlzYXkgQWxsIGRvbmUuCiB9CiAKIGlzX2ludGVyYWN0aXZlICgpIHsKQEAgLTE2NSwxMCArMTgxLDggQEAKIAlpZiB0ZXN0IC16ICIkT0tfVE9fU0tJUF9QUkVfUkVCQVNFIiAmJgogCSAgIHRlc3QgLXggIiRHSVRfRElSL2hvb2tzL3ByZS1yZWJhc2UiCiAJdGhlbgotCQkiJEdJVF9ESVIvaG9va3MvcHJlLXJlYmFzZSIgJHsxKyIkQCJ9IHx8IHsKLQkJCWVjaG8gPiYyICJUaGUgcHJlLXJlYmFzZSBob29rIHJlZnVzZWQgdG8gcmViYXNlLiIKLQkJCWV4aXQgMQotCQl9CisJCSIkR0lUX0RJUi9ob29rcy9wcmUtcmViYXNlIiAkezErIiRAIn0gfHwKKwkJZGllICJUaGUgcHJlLXJlYmFzZSBob29rIHJlZnVzZWQgdG8gcmViYXNlLiIKIAlmaQogfQogCkBAIC0yMDYsNiArMjIwLDcgQEAKIAkJCWVuZD0kKGNhdCAiJGRvdGVzdC9lbmQiKQogCQkJbXNnbnVtPSQoY2F0ICIkZG90ZXN0L21zZ251bSIpCiAJCQlvbnRvPSQoY2F0ICIkZG90ZXN0L29udG8iKQorCQkJR0lUX1FVSUVUPSQoY2F0ICIkZG90ZXN0L3F1aWV0IikKIAkJCWNvbnRpbnVlX21lcmdlCiAJCQl3aGlsZSB0ZXN0ICIkbXNnbnVtIiAtbGUgIiRlbmQiCiAJCQlkbwpAQCAtMjE4LDYgKzIzMyw3IEBACiAJCWhlYWRfbmFtZT0kKGNhdCAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9oZWFkLW5hbWUpICYmCiAJCW9udG89JChjYXQgIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvb250bykgJiYKIAkJb3JpZ19oZWFkPSQoY2F0ICIkR0lUX0RJUiIvcmViYXNlLWFwcGx5L29yaWctaGVhZCkgJiYKKwkJR0lUX1FVSUVUPSQoY2F0ICIkR0lUX0RJUiIvcmViYXNlLWFwcGx5L3F1aWV0KQogCQlnaXQgYW0gLS1yZXNvbHZlZCAtLTN3YXkgLS1yZXNvbHZlbXNnPSIkUkVTT0xWRU1TRyIgJiYKIAkJbW92ZV90b19vcmlnaW5hbF9icmFuY2gKIAkJZXhpdApAQCAtMjM1LDYgKzI1MSw3IEBACiAJCQltc2dudW09JChjYXQgIiRkb3Rlc3QvbXNnbnVtIikKIAkJCW1zZ251bT0kKCgkbXNnbnVtICsgMSkpCiAJCQlvbnRvPSQoY2F0ICIkZG90ZXN0L29udG8iKQorCQkJR0lUX1FVSUVUPSQoY2F0ICIkZG90ZXN0L3F1aWV0IikKIAkJCXdoaWxlIHRlc3QgIiRtc2dudW0iIC1sZSAiJGVuZCIKIAkJCWRvCiAJCQkJY2FsbF9tZXJnZSAiJG1zZ251bSIKQEAgLTI0Niw2ICsyNjMsNyBAQAogCQloZWFkX25hbWU9JChjYXQgIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvaGVhZC1uYW1lKSAmJgogCQlvbnRvPSQoY2F0ICIkR0lUX0RJUiIvcmViYXNlLWFwcGx5L29udG8pICYmCiAJCW9yaWdfaGVhZD0kKGNhdCAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9vcmlnLWhlYWQpICYmCisJCUdJVF9RVUlFVD0kKGNhdCAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9xdWlldCkKIAkJZ2l0IGFtIC0zIC0tc2tpcCAtLXJlc29sdmVtc2c9IiRSRVNPTFZFTVNHIiAmJgogCQltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAogCQlleGl0CkBAIC0yNTcsOSArMjc1LDExIEBACiAJCWdpdCByZXJlcmUgY2xlYXIKIAkJaWYgdGVzdCAtZCAiJGRvdGVzdCIKIAkJdGhlbgorCQkJR0lUX1FVSUVUPSQoY2F0ICIkZG90ZXN0L3F1aWV0IikKIAkJCW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCiAJCWVsc2UKIAkJCWRvdGVzdD0iJEdJVF9ESVIiL3JlYmFzZS1hcHBseQorCQkJR0lUX1FVSUVUPSQoY2F0ICIkZG90ZXN0L3F1aWV0IikKIAkJCW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCiAJCWZpCiAJCWdpdCByZXNldCAtLWhhcmQgJChjYXQgIiRkb3Rlc3Qvb3JpZy1oZWFkIikKQEAgLTI4OCwxNSArMzA4LDQ0IEBACiAJCWVzYWMKIAkJZG9fbWVyZ2U9dAogCQk7OworCS1ufC0tbm8tc3RhdCkKKwkJZGlmZnN0YXQ9CisJCTs7CisJLS1zdGF0KQorCQlkaWZmc3RhdD10CisJCTs7CiAJLXZ8LS12ZXJib3NlKQogCQl2ZXJib3NlPXQKKwkJZGlmZnN0YXQ9dAorCQlHSVRfUVVJRVQ9CisJCTs7CisJLXF8LS1xdWlldCkKKwkJR0lUX1FVSUVUPXQKKwkJZ2l0X2FtX29wdD0iJGdpdF9hbV9vcHQgLXEiCisJCXZlcmJvc2U9CisJCWRpZmZzdGF0PQogCQk7OwogCS0td2hpdGVzcGFjZT0qKQogCQlnaXRfYW1fb3B0PSIkZ2l0X2FtX29wdCAkMSIKKwkJY2FzZSAiJDEiIGluCisJCS0td2hpdGVzcGFjZT1maXh8LS13aGl0ZXNwYWNlPXN0cmlwKQorCQkJZm9yY2VfcmViYXNlPXQKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwktLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlfC0taWdub3JlLWRhdGUpCisJCWdpdF9hbV9vcHQ9IiRnaXRfYW1fb3B0ICQxIgorCQlmb3JjZV9yZWJhc2U9dAogCQk7OwogCS1DKikKIAkJZ2l0X2FtX29wdD0iJGdpdF9hbV9vcHQgJDEiCiAJCTs7CisJLS1yb290KQorCQlyZWJhc2Vfcm9vdD10CisJCTs7CisJLWZ8LS1mfC0tZm98LS1mb3J8LS1mb3JjfGZvcmNlfC0tZm9yY2UtcnwtLWZvcmNlLXJlfC0tZm9yY2UtcmVifC0tZm9yY2UtcmViYXwtLWZvcmNlLXJlYmFzfC0tZm9yY2UtcmViYXNlKQorCQlmb3JjZV9yZWJhc2U9dAorCQk7OwogCS0qKQogCQl1c2FnZQogCQk7OwpAQCAtMzA2LDYgKzM1NSw3IEBACiAJZXNhYwogCXNoaWZ0CiBkb25lCit0ZXN0ICQjIC1ndCAyICYmIHVzYWdlCiAKICMgTWFrZSBzdXJlIHdlIGRvIG5vdCBoYXZlICRHSVRfRElSL3JlYmFzZS1hcHBseQogaWYgdGVzdCAteiAiJGRvX21lcmdlIgpAQCAtMzMzLDggKzM4Myw3IEBACiAKICMgVGhlIHRyZWUgbXVzdCBiZSByZWFsbHkgcmVhbGx5IGNsZWFuLgogaWYgISBnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoOyB0aGVuCi0JZWNobyA+JjIgImNhbm5vdCByZWJhc2U6IHlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMiCi0JZXhpdCAxCisJZGllICJjYW5ub3QgcmViYXNlOiB5b3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzIgogZmkKIGRpZmY9JChnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzIC1yIC0taWdub3JlLXN1Ym1vZHVsZXMgSEVBRCAtLSkKIGNhc2UgIiRkaWZmIiBpbgpAQCAtMzQ0LDE3ICszOTMsMjkgQEAKIAk7OwogZXNhYwogCi0jIFRoZSB1cHN0cmVhbSBoZWFkIG11c3QgYmUgZ2l2ZW4uICBNYWtlIHN1cmUgaXQgaXMgdmFsaWQuCi11cHN0cmVhbV9uYW1lPSIkMSIKLXVwc3RyZWFtPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIke3Vwc3RyZWFtX25hbWV9XjAiYCB8fAotICAgIGRpZSAiaW52YWxpZCB1cHN0cmVhbSAkdXBzdHJlYW1fbmFtZSIKK2lmIHRlc3QgLXogIiRyZWJhc2Vfcm9vdCIKK3RoZW4KKwkjIFRoZSB1cHN0cmVhbSBoZWFkIG11c3QgYmUgZ2l2ZW4uICBNYWtlIHN1cmUgaXQgaXMgdmFsaWQuCisJdXBzdHJlYW1fbmFtZT0iJDEiCisJc2hpZnQKKwl1cHN0cmVhbT1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHt1cHN0cmVhbV9uYW1lfV4wImAgfHwKKwlkaWUgImludmFsaWQgdXBzdHJlYW0gJHVwc3RyZWFtX25hbWUiCisJdW5zZXQgcm9vdF9mbGFnCisJdXBzdHJlYW1fYXJnPSIkdXBzdHJlYW1fbmFtZSIKK2Vsc2UKKwl0ZXN0IC16ICIkbmV3YmFzZSIgJiYgZGllICItLXJvb3QgbXVzdCBiZSB1c2VkIHdpdGggLS1vbnRvIgorCXVuc2V0IHVwc3RyZWFtX25hbWUKKwl1bnNldCB1cHN0cmVhbQorCXJvb3RfZmxhZz0iLS1yb290IgorCXVwc3RyZWFtX2FyZz0iJHJvb3RfZmxhZyIKK2ZpCiAKICMgTWFrZSBzdXJlIHRoZSBicmFuY2ggdG8gcmViYXNlIG9udG8gaXMgdmFsaWQuCiBvbnRvX25hbWU9JHtuZXdiYXNlLSIkdXBzdHJlYW1fbmFtZSJ9CiBvbnRvPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHtvbnRvX25hbWV9XjAiKSB8fCBleGl0CiAKICMgSWYgYSBob29rIGV4aXN0cywgZ2l2ZSBpdCBhIGNoYW5jZSB0byBpbnRlcnJ1cHQKLXJ1bl9wcmVfcmViYXNlX2hvb2sgJHsxKyIkQCJ9CitydW5fcHJlX3JlYmFzZV9ob29rICIkdXBzdHJlYW1fYXJnIiAiJEAiCiAKICMgSWYgdGhlIGJyYW5jaCB0byByZWJhc2UgaXMgZ2l2ZW4sIHRoYXQgaXMgdGhlIGJyYW5jaCB3ZSB3aWxsIHJlYmFzZQogIyAkYnJhbmNoX25hbWUgLS0gYnJhbmNoIGJlaW5nIHJlYmFzZWQsIG9yIEhFQUQgKGFscmVhZHkgZGV0YWNoZWQpCkBAIC0zNjIsMTYgKzQyMywxNiBAQAogIyAkaGVhZF9uYW1lIC0tIHJlZnMvaGVhZHMvPHRoYXQtYnJhbmNoPiBvciAiZGV0YWNoZWQgSEVBRCIKIHN3aXRjaF90bz0KIGNhc2UgIiQjIiBpbgotMikKKzEpCiAJIyBJcyBpdCAicmViYXNlIG90aGVyICRicmFuY2huYW1lIiBvciAicmViYXNlIG90aGVyICRjb21taXQiPwotCWJyYW5jaF9uYW1lPSIkMiIKLQlzd2l0Y2hfdG89IiQyIgorCWJyYW5jaF9uYW1lPSIkMSIKKwlzd2l0Y2hfdG89IiQxIgogCi0JaWYgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC0tcXVpZXQgLS0gInJlZnMvaGVhZHMvJDIiICYmCi0JICAgYnJhbmNoPSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAicmVmcy9oZWFkcy8kMiIpCisJaWYgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC0tcXVpZXQgLS0gInJlZnMvaGVhZHMvJDEiICYmCisJICAgYnJhbmNoPSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAicmVmcy9oZWFkcy8kMSIpCiAJdGhlbgotCQloZWFkX25hbWU9InJlZnMvaGVhZHMvJDIiCi0JZWxpZiBicmFuY2g9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICIkMiIpCisJCWhlYWRfbmFtZT0icmVmcy9oZWFkcy8kMSIKKwllbGlmIGJyYW5jaD0kKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgIiQxIikKIAl0aGVuCiAJCWhlYWRfbmFtZT0iZGV0YWNoZWQgSEVBRCIKIAllbHNlCkBAIC0zOTMsNyArNDU0LDggQEAKIGVzYWMKIG9yaWdfaGVhZD0kYnJhbmNoCiAKLSMgTm93IHdlIGFyZSByZWJhc2luZyBjb21taXRzICR1cHN0cmVhbS4uJGJyYW5jaCBvbiB0b3Agb2YgJG9udG8KKyMgTm93IHdlIGFyZSByZWJhc2luZyBjb21taXRzICR1cHN0cmVhbS4uJGJyYW5jaCAob3Igd2l0aCAtLXJvb3QsCisjIGV2ZXJ5dGhpbmcgbGVhZGluZyB1cCB0byAkYnJhbmNoKSBvbiB0b3Agb2YgJG9udG8KIAogIyBDaGVjayBpZiB3ZSBhcmUgYWxyZWFkeSBiYXNlZCBvbiAkb250byB3aXRoIGxpbmVhciBoaXN0b3J5LAogIyBidXQgdGhpcyBzaG91bGQgYmUgZG9uZSBvbmx5IHdoZW4gdXBzdHJlYW0gYW5kIG9udG8gYXJlIHRoZSBzYW1lLgpAQCAtNDAyLDQ0ICs0NjQsNjAgQEAKIAkjIGxpbmVhciBoaXN0b3J5PwogCSEgKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgIiRvbnRvIi4uIiRicmFuY2giIHwgZ3JlcCAiIC4qICIpID4gL2Rldi9udWxsCiB0aGVuCi0JIyBMYXppbHkgc3dpdGNoIHRvIHRoZSB0YXJnZXQgYnJhbmNoIGlmIG5lZWRlZC4uLgotCXRlc3QgLXogIiRzd2l0Y2hfdG8iIHx8IGdpdCBjaGVja291dCAiJHN3aXRjaF90byIKLQllY2hvID4mMiAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUuIgotCWV4aXQgMAotZmkKLQotaWYgdGVzdCAtbiAiJHZlcmJvc2UiCi10aGVuCi0JZWNobyAiQ2hhbmdlcyBmcm9tICRtYiB0byAkb250bzoiCi0JIyBXZSB3YW50IGNvbG9yIChpZiBzZXQpLCBidXQgbm8gcGFnZXIKLQlHSVRfUEFHRVI9JycgZ2l0IGRpZmYgLS1zdGF0IC0tc3VtbWFyeSAiJG1iIiAiJG9udG8iCisJaWYgdGVzdCAteiAiJGZvcmNlX3JlYmFzZSIKKwl0aGVuCisJCSMgTGF6aWx5IHN3aXRjaCB0byB0aGUgdGFyZ2V0IGJyYW5jaCBpZiBuZWVkZWQuLi4KKwkJdGVzdCAteiAiJHN3aXRjaF90byIgfHwgZ2l0IGNoZWNrb3V0ICIkc3dpdGNoX3RvIgorCQlzYXkgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLiIKKwkJZXhpdCAwCisJZWxzZQorCQlzYXkgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKKwlmaQogZmkKIAogIyBEZXRhY2ggSEVBRCBhbmQgcmVzZXQgdGhlIHRyZWUKLWVjaG8gIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKK3NheSAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uIgogZ2l0IGNoZWNrb3V0IC1xICIkb250b14wIiB8fCBkaWUgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKIGdpdCB1cGRhdGUtcmVmIE9SSUdfSEVBRCAkYnJhbmNoCiAKK2lmIHRlc3QgLW4gIiRkaWZmc3RhdCIKK3RoZW4KKwlpZiB0ZXN0IC1uICIkdmVyYm9zZSIKKwl0aGVuCisJCWVjaG8gIkNoYW5nZXMgZnJvbSAkbWIgdG8gJG9udG86IgorCWZpCisJIyBXZSB3YW50IGNvbG9yIChpZiBzZXQpLCBidXQgbm8gcGFnZXIKKwlHSVRfUEFHRVI9JycgZ2l0IGRpZmYgLS1zdGF0IC0tc3VtbWFyeSAiJG1iIiAiJG9udG8iCitmaQorCiAjIElmIHRoZSAkb250byBpcyBhIHByb3BlciBkZXNjZW5kYW50IG9mIHRoZSB0aXAgb2YgdGhlIGJyYW5jaCwgdGhlbgogIyB3ZSBqdXN0IGZhc3QgZm9yd2FyZGVkLgogaWYgdGVzdCAiJG1iIiA9ICIkYnJhbmNoIgogdGhlbgotCWVjaG8gPiYyICJGYXN0LWZvcndhcmRlZCAkYnJhbmNoX25hbWUgdG8gJG9udG9fbmFtZS4iCisJc2F5ICJGYXN0LWZvcndhcmRlZCAkYnJhbmNoX25hbWUgdG8gJG9udG9fbmFtZS4iCiAJbW92ZV90b19vcmlnaW5hbF9icmFuY2gKIAlleGl0IDAKIGZpCiAKK2lmIHRlc3QgLW4gIiRyZWJhc2Vfcm9vdCIKK3RoZW4KKwlyZXZpc2lvbnM9IiRvbnRvLi4kb3JpZ19oZWFkIgorZWxzZQorCXJldmlzaW9ucz0iJHVwc3RyZWFtLi4kb3JpZ19oZWFkIgorZmkKKwogaWYgdGVzdCAteiAiJGRvX21lcmdlIgogdGhlbgogCWdpdCBmb3JtYXQtcGF0Y2ggLWsgLS1zdGRvdXQgLS1mdWxsLWluZGV4IC0taWdub3JlLWlmLWluLXVwc3RyZWFtIFwKLQkJIiR1cHN0cmVhbS4uJG9yaWdfaGVhZCIgfAorCQkkcm9vdF9mbGFnICIkcmV2aXNpb25zIiB8CiAJZ2l0IGFtICRnaXRfYW1fb3B0IC0tcmViYXNpbmcgLS1yZXNvbHZlbXNnPSIkUkVTT0xWRU1TRyIgJiYKIAltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAogCXJldD0kPwogCXRlc3QgMCAhPSAkcmV0IC1hIC1kICIkR0lUX0RJUiIvcmViYXNlLWFwcGx5ICYmCiAJCWVjaG8gJGhlYWRfbmFtZSA+ICIkR0lUX0RJUiIvcmViYXNlLWFwcGx5L2hlYWQtbmFtZSAmJgogCQllY2hvICRvbnRvID4gIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvb250byAmJgotCQllY2hvICRvcmlnX2hlYWQgPiAiJEdJVF9ESVIiL3JlYmFzZS1hcHBseS9vcmlnLWhlYWQKKwkJZWNobyAkb3JpZ19oZWFkID4gIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvb3JpZy1oZWFkICYmCisJCWVjaG8gIiRHSVRfUVVJRVQiID4gIiRHSVRfRElSIi9yZWJhc2UtYXBwbHkvcXVpZXQKIAlleGl0ICRyZXQKIGZpCiAKQEAgLTQ1Myw5ICs1MzEsMTAgQEAKIGVjaG8gIiRwcmV2X2hlYWQiID4gIiRkb3Rlc3QvcHJldl9oZWFkIgogZWNobyAiJG9yaWdfaGVhZCIgPiAiJGRvdGVzdC9vcmlnLWhlYWQiCiBlY2hvICIkaGVhZF9uYW1lIiA+ICIkZG90ZXN0L2hlYWQtbmFtZSIKK2VjaG8gIiRHSVRfUVVJRVQiID4gIiRkb3Rlc3QvcXVpZXQiCiAKIG1zZ251bT0wCi1mb3IgY210IGluIGBnaXQgcmV2LWxpc3QgLS1yZXZlcnNlIC0tbm8tbWVyZ2VzICIkdXBzdHJlYW0uLiRvcmlnX2hlYWQiYAorZm9yIGNtdCBpbiBgZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSAtLW5vLW1lcmdlcyAiJHJldmlzaW9ucyJgCiBkbwogCW1zZ251bT0kKCgkbXNnbnVtICsgMSkpCiAJZWNobyAiJGNtdCIgPiAiJGRvdGVzdC9jbXQuJG1zZ251bSIKZGlmZiAtLWdpdCBhL2dpdC1yZXBhY2suc2ggYi9naXQtcmVwYWNrLnNoCmluZGV4IDA4Njg3MzQuLjFlYjNiY2EgMTAwNzU1Ci0tLSBhL2dpdC1yZXBhY2suc2gKKysrIGIvZ2l0LXJlcGFjay5zaApAQCAtMjQsNyArMjQsNyBAQAogLiBnaXQtc2gtc2V0dXAKIAogbm9fdXBkYXRlX2luZm89IGFsbF9pbnRvX29uZT0gcmVtb3ZlX3JlZHVuZGFudD0gdW5wYWNrX3VucmVhY2hhYmxlPQotbG9jYWw9IHF1aWV0PSBub19yZXVzZT0gZXh0cmE9Citsb2NhbD0gbm9fcmV1c2U9IGV4dHJhPQogd2hpbGUgdGVzdCAkIyAhPSAwCiBkbwogCWNhc2UgIiQxIiBpbgpAQCAtMzMsNyArMzMsNyBAQAogCS1BKQlhbGxfaW50b19vbmU9dAogCQl1bnBhY2tfdW5yZWFjaGFibGU9LS11bnBhY2stdW5yZWFjaGFibGUgOzsKIAktZCkJcmVtb3ZlX3JlZHVuZGFudD10IDs7Ci0JLXEpCXF1aWV0PS1xIDs7CisJLXEpCUdJVF9RVUlFVD10IDs7CiAJLWYpCW5vX3JldXNlPS0tbm8tcmV1c2Utb2JqZWN0IDs7CiAJLWwpCWxvY2FsPS0tbG9jYWwgOzsKIAktLW1heC1wYWNrLXNpemV8LS13aW5kb3d8LS13aW5kb3ctbWVtb3J5fC0tZGVwdGgpCkBAIC04MCwxMyArODAsMTEgQEAKIAk7OwogZXNhYwogCi1hcmdzPSIkYXJncyAkbG9jYWwgJHF1aWV0ICRub19yZXVzZSRleHRyYSIKLW5hbWVzPSQoZ2l0IHBhY2stb2JqZWN0cyAtLWhvbm9yLXBhY2sta2VlcCAtLW5vbi1lbXB0eSAtLWFsbCAtLXJlZmxvZyAkYXJncyA8L2Rldi9udWxsICIkUEFDS1RNUCIpIHx8CithcmdzPSIkYXJncyAkbG9jYWwgJHtHSVRfUVVJRVQ6Ky1xfSAkbm9fcmV1c2UkZXh0cmEiCituYW1lcz0kKGdpdCBwYWNrLW9iamVjdHMgLS1rZWVwLXRydWUtcGFyZW50cyAtLWhvbm9yLXBhY2sta2VlcCAtLW5vbi1lbXB0eSAtLWFsbCAtLXJlZmxvZyAkYXJncyA8L2Rldi9udWxsICIkUEFDS1RNUCIpIHx8CiAJZXhpdCAxCiBpZiBbIC16ICIkbmFtZXMiIF07IHRoZW4KLQlpZiB0ZXN0IC16ICIkcXVpZXQiOyB0aGVuCi0JCWVjaG8gTm90aGluZyBuZXcgdG8gcGFjay4KLQlmaQorCXNheSBOb3RoaW5nIG5ldyB0byBwYWNrLgogZmkKIAogIyBPayB3ZSBoYXZlIHByZXBhcmVkIGFsbCBuZXcgcGFja2ZpbGVzLgpAQCAtMTc2LDcgKzE3NCw3IEBACiAJCSAgZG9uZQogCQkpCiAJZmkKLQlnaXQgcHJ1bmUtcGFja2VkICRxdWlldAorCWdpdCBwcnVuZS1wYWNrZWQgJHtHSVRfUVVJRVQ6Ky1xfQogZmkKIAogY2FzZSAiJG5vX3VwZGF0ZV9pbmZvIiBpbgpkaWZmIC0tZ2l0IGEvZ2l0LXJlcXVlc3QtcHVsbC5zaCBiL2dpdC1yZXF1ZXN0LXB1bGwuc2gKaW5kZXggYTJjZjViOC4uZmQ5NWJlYSAxMDA3NTUKLS0tIGEvZ2l0LXJlcXVlc3QtcHVsbC5zaAorKysgYi9naXQtcmVxdWVzdC1wdWxsLnNoCkBAIC0xMiw2ICsxMiw5IEBACiAuIGdpdC1zaC1zZXR1cAogLiBnaXQtcGFyc2UtcmVtb3RlCiAKK0dJVF9QQUdFUj0KK2V4cG9ydCBHSVRfUEFHRVIKKwogYmFzZT0kMQogdXJsPSQyCiBoZWFkPSR7My1IRUFEfQpAQCAtMjUsMTYgKzI4LDE2IEBACiBtZXJnZV9iYXNlPWBnaXQgbWVyZ2UtYmFzZSAkYmFzZXJldiAkaGVhZHJldmAgfHwKIGRpZSAiZmF0YWw6IE5vIGNvbW1pdHMgaW4gY29tbW9uIGJldHdlZW4gJGJhc2UgYW5kICRoZWFkIgogCi11cmw9JChnZXRfcmVtb3RlX3VybCAiJHVybCIpCiBicmFuY2g9JChnaXQgbHMtcmVtb3RlICIkdXJsIiBcCiAJfCBzZWQgLW4gLWUgIi9eJGhlYWRyZXYJcmVmcy5oZWFkcy4vewogCQlzL14uKglyZWZzLmhlYWRzLi8vCiAJCXAKIAkJcQogCX0iKQordXJsPSQoZ2V0X3JlbW90ZV91cmwgIiR1cmwiKQogaWYgWyAteiAiJGJyYW5jaCIgXTsgdGhlbgogCWVjaG8gIndhcm46IE5vIGJyYW5jaCBvZiAkdXJsIGlzIGF0OiIgPiYyCi0JZ2l0IGxvZyAtLW1heC1jb3VudD0xIC0tcHJldHR5PSdmb3JtYXQ6d2FybjogICAlaDogJXMnICRoZWFkcmV2ID4mMgorCWdpdCBsb2cgLS1tYXgtY291bnQ9MSAtLXByZXR0eT0ndGZvcm1hdDp3YXJuOiAgICVoOiAlcycgJGhlYWRyZXYgPiYyCiAJZWNobyAid2FybjogQXJlIHlvdSBzdXJlIHlvdSBwdXNoZWQgJGhlYWQgdGhlcmU/IiA+JjIKIAllY2hvID4mMgogCWVjaG8gPiYyCkBAIC00Miw4ICs0NSw2IEBACiAJc3RhdHVzPTEKIGZpCiAKLVBBR0VSPQotZXhwb3J0IFBBR0VSCiBlY2hvICJUaGUgZm9sbG93aW5nIGNoYW5nZXMgc2luY2UgY29tbWl0ICRiYXNlcmV2OiIKIGdpdCBzaG9ydGxvZyAtLW1heC1jb3VudD0xICRiYXNlcmV2IHwgc2VkIC1lICdzL15cKC5cKS8gIFwxLycKIApkaWZmIC0tZ2l0IGEvZ2l0LXNlbmQtZW1haWwucGVybCBiL2dpdC1zZW5kLWVtYWlsLnBlcmwKaW5kZXggNzdjYThmZS4uMDcwMGQ4MCAxMDA3NTUKLS0tIGEvZ2l0LXNlbmQtZW1haWwucGVybAorKysgYi9naXQtc2VuZC1lbWFpbC5wZXJsCkBAIC0yMyw3ICsyMyw3IEBACiB1c2UgVGV4dDo6UGFyc2VXb3JkczsKIHVzZSBEYXRhOjpEdW1wZXI7CiB1c2UgVGVybTo6QU5TSUNvbG9yOwotdXNlIEZpbGU6OlRlbXAgcXcvIHRlbXBkaXIgLzsKK3VzZSBGaWxlOjpUZW1wIHF3LyB0ZW1wZGlyIHRlbXBmaWxlIC87CiB1c2UgRXJyb3IgcXcoOnRyeSk7CiB1c2UgR2l0OwogCkBAIC02OCwxNCArNjgsMTUgQEAKICAgQXV0b21hdGluZzoKICAgICAtLWlkZW50aXR5ICAgICAgICAgICAgICA8c3RyPiAgKiBVc2UgdGhlIHNlbmRlbWFpbC48aWQ+IG9wdGlvbnMuCiAgICAgLS1jYy1jbWQgICAgICAgICAgICAgICAgPHN0cj4gICogRW1haWwgQ2M6IHZpYSBgPHN0cj4gXCRwYXRjaF9wYXRoYAotICAgIC0tc3VwcHJlc3MtY2MgICAgICAgICAgIDxzdHI+ICAqIGF1dGhvciwgc2VsZiwgc29iLCBjY2NtZCwgYWxsLgotICAgIC0tW25vLV1zaWduZWQtb2ZmLWJ5LWNjICAgICAgICAqIFNlbmQgdG8gQ2M6IGFuZCBTaWduZWQtb2ZmLWJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3Nlcy4gRGVmYXVsdCBvbi4KKyAgICAtLXN1cHByZXNzLWNjICAgICAgICAgICA8c3RyPiAgKiBhdXRob3IsIHNlbGYsIHNvYiwgY2MsIGNjY21kLCBib2R5LCBib2R5Y2MsIGFsbC4KKyAgICAtLVtuby1dc2lnbmVkLW9mZi1ieS1jYyAgICAgICAgKiBTZW5kIHRvIFNpZ25lZC1vZmYtYnk6IGFkZHJlc3Nlcy4gRGVmYXVsdCBvbi4KICAgICAtLVtuby1dc3VwcHJlc3MtZnJvbSAgICAgICAgICAgKiBTZW5kIHRvIHNlbGYuIERlZmF1bHQgb2ZmLgogICAgIC0tW25vLV1jaGFpbi1yZXBseS10byAgICAgICAgICAqIENoYWluIEluLVJlcGx5LVRvOiBmaWVsZHMuIERlZmF1bHQgb24uCiAgICAgLS1bbm8tXXRocmVhZCAgICAgICAgICAgICAgICAgICogVXNlIEluLVJlcGx5LVRvOiBmaWVsZC4gRGVmYXVsdCBvbi4KIAogICBBZG1pbmlzdGVyaW5nOgorICAgIC0tY29uZmlybSAgICAgICAgICAgICAgIDxzdHI+ICAqIENvbmZpcm0gcmVjaXBpZW50cyBiZWZvcmUgc2VuZGluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvLCBjYywgY29tcG9zZSwgYWx3YXlzLCBvciBuZXZlci4KICAgICAtLXF1aWV0ICAgICAgICAgICAgICAgICAgICAgICAgKiBPdXRwdXQgb25lIGxpbmUgb2YgaW5mbyBwZXIgZW1haWwuCiAgICAgLS1kcnktcnVuICAgICAgICAgICAgICAgICAgICAgICogRG9uJ3QgYWN0dWFsbHkgc2VuZCB0aGUgZW1haWxzLgogICAgIC0tW25vLV12YWxpZGF0ZSAgICAgICAgICAgICAgICAqIFBlcmZvcm0gcGF0Y2ggc2FuaXR5IGNoZWNrcy4gRGVmYXVsdCBvbi4KQEAgLTEyNiw2ICsxMjcsNyBAQAogfQogCiBteSAkaGF2ZV9lbWFpbF92YWxpZCA9IGV2YWwgeyByZXF1aXJlIEVtYWlsOjpWYWxpZDsgMSB9OworbXkgJGhhdmVfbWFpbF9hZGRyZXNzID0gZXZhbCB7IHJlcXVpcmUgTWFpbDo6QWRkcmVzczsgMSB9OwogbXkgJHNtdHA7CiBteSAkYXV0aDsKIApAQCAtMTU2LDcgKzE1OCw3IEBACiAjIEJlaGF2aW9yIG1vZGlmaWNhdGlvbiB2YXJpYWJsZXMKIG15ICgkcXVpZXQsICRkcnlfcnVuKSA9ICgwLCAwKTsKIG15ICRmb3JtYXRfcGF0Y2g7Ci1teSAkY29tcG9zZV9maWxlbmFtZSA9ICRyZXBvLT5yZXBvX3BhdGgoKSAuICIvLmdpdHNlbmRlbWFpbC5tc2cuJCQiOworbXkgJGNvbXBvc2VfZmlsZW5hbWU7CiAKICMgSGFuZGxlIGludGVyYWN0aXZlIGVkaXRpb24gb2YgZmlsZXMuCiBteSAkbXVsdGllZGl0OwpAQCAtMTgxLDcgKzE4Myw3IEBACiBteSAoJHRocmVhZCwgJGNoYWluX3JlcGx5X3RvLCAkc3VwcHJlc3NfZnJvbSwgJHNpZ25lZF9vZmZfYnlfY2MsICRjY19jbWQpOwogbXkgKCRzbXRwX3NlcnZlciwgJHNtdHBfc2VydmVyX3BvcnQsICRzbXRwX2F1dGh1c2VyLCAkc210cF9lbmNyeXB0aW9uKTsKIG15ICgkaWRlbnRpdHksICRhbGlhc2ZpbGV0eXBlLCBAYWxpYXNfZmlsZXMsIEBzbXRwX2hvc3RfcGFydHMpOwotbXkgKCR2YWxpZGF0ZSk7CitteSAoJHZhbGlkYXRlLCAkY29uZmlybSk7CiBteSAoQHN1cHByZXNzX2NjKTsKIAogbXkgJWNvbmZpZ19ib29sX3NldHRpbmdzID0gKApAQCAtMjA3LDYgKzIwOSw4IEBACiAgICAgInN1cHByZXNzY2MiID0+IFxAc3VwcHJlc3NfY2MsCiAgICAgImVudmVsb3Blc2VuZGVyIiA9PiBcJGVudmVsb3BlX3NlbmRlciwKICAgICAibXVsdGllZGl0IiA9PiBcJG11bHRpZWRpdCwKKyAgICAiY29uZmlybSIgICA9PiBcJGNvbmZpcm0sCisgICAgImZyb20iID0+IFwkc2VuZGVyLAogKTsKIAogIyBIYW5kbGUgVW5jb3V0aCBUZXJtaW5hdGlvbgpAQCAtMjE5LDExICsyMjMsMTMgQEAKIAlzeXN0ZW0gInN0dHkgZWNobyI7CiAKIAkjIHRtcCBmaWxlcyBmcm9tIC0tY29tcG9zZQotCWlmICgtZSAkY29tcG9zZV9maWxlbmFtZSkgewotCQlwcmludCAiJyRjb21wb3NlX2ZpbGVuYW1lJyBjb250YWlucyBhbiBpbnRlcm1lZGlhdGUgdmVyc2lvbiBvZiB0aGUgZW1haWwgeW91IHdlcmUgY29tcG9zaW5nLlxuIjsKLQl9Ci0JaWYgKC1lICgkY29tcG9zZV9maWxlbmFtZSAuICIuZmluYWwiKSkgewotCQlwcmludCAiJyRjb21wb3NlX2ZpbGVuYW1lLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iCisJaWYgKGRlZmluZWQgJGNvbXBvc2VfZmlsZW5hbWUpIHsKKwkJaWYgKC1lICRjb21wb3NlX2ZpbGVuYW1lKSB7CisJCQlwcmludCAiJyRjb21wb3NlX2ZpbGVuYW1lJyBjb250YWlucyBhbiBpbnRlcm1lZGlhdGUgdmVyc2lvbiBvZiB0aGUgZW1haWwgeW91IHdlcmUgY29tcG9zaW5nLlxuIjsKKwkJfQorCQlpZiAoLWUgKCRjb21wb3NlX2ZpbGVuYW1lIC4gIi5maW5hbCIpKSB7CisJCQlwcmludCAiJyRjb21wb3NlX2ZpbGVuYW1lLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iCisJCX0KIAl9CiAKIAlleGl0OwpAQCAtMjU2LDYgKzI2Miw3IEBACiAJCSAgICAic3VwcHJlc3MtZnJvbSEiID0+IFwkc3VwcHJlc3NfZnJvbSwKIAkJICAgICJzdXBwcmVzcy1jYz1zIiA9PiBcQHN1cHByZXNzX2NjLAogCQkgICAgInNpZ25lZC1vZmYtY2N8c2lnbmVkLW9mZi1ieS1jYyEiID0+IFwkc2lnbmVkX29mZl9ieV9jYywKKwkJICAgICJjb25maXJtPXMiID0+IFwkY29uZmlybSwKIAkJICAgICJkcnktcnVuIiA9PiBcJGRyeV9ydW4sCiAJCSAgICAiZW52ZWxvcGUtc2VuZGVyPXMiID0+IFwkZW52ZWxvcGVfc2VuZGVyLAogCQkgICAgInRocmVhZCEiID0+IFwkdGhyZWFkLApAQCAtMjY3LDYgKzI3NCw5IEBACiAgICAgdXNhZ2UoKTsKIH0KIAorZGllICJDYW5ub3QgcnVuIGdpdCBmb3JtYXQtcGF0Y2ggZnJvbSBvdXRzaWRlIGEgcmVwb3NpdG9yeVxuIgorCWlmICRmb3JtYXRfcGF0Y2ggYW5kIG5vdCAkcmVwbzsKKwogIyBOb3csIGxldCdzIGZpbGwgYW55IHRoYXQgYXJlbid0IHNldCBpbiB3aXRoIGRlZmF1bHRzOgogCiBzdWIgcmVhZF9jb25maWcgewpAQCAtMzE4LDEzICszMjgsMTMgQEAKIGlmIChAc3VwcHJlc3NfY2MpIHsKIAlmb3JlYWNoIG15ICRlbnRyeSAoQHN1cHByZXNzX2NjKSB7CiAJCWRpZSAiVW5rbm93biAtLXN1cHByZXNzLWNjIGZpZWxkOiAnJGVudHJ5J1xuIgotCQkJdW5sZXNzICRlbnRyeSA9fiAvXihhbGx8Y2NjbWR8Y2N8YXV0aG9yfHNlbGZ8c29iKSQvOworCQkJdW5sZXNzICRlbnRyeSA9fiAvXihhbGx8Y2NjbWR8Y2N8YXV0aG9yfHNlbGZ8c29ifGJvZHl8Ym9keWNjKSQvOwogCQkkc3VwcHJlc3NfY2N7JGVudHJ5fSA9IDE7CiAJfQogfQogCiBpZiAoJHN1cHByZXNzX2NjeydhbGwnfSkgewotCWZvcmVhY2ggbXkgJGVudHJ5IChxdyAoY2NtZCBjYyBhdXRob3Igc2VsZiBzb2IpKSB7CisJZm9yZWFjaCBteSAkZW50cnkgKHF3IChjY2NtZCBjYyBhdXRob3Igc2VsZiBzb2IgYm9keSBib2R5Y2MpKSB7CiAJCSRzdXBwcmVzc19jY3skZW50cnl9ID0gMTsKIAl9CiAJZGVsZXRlICRzdXBwcmVzc19jY3snYWxsJ307CkBAIC0zMzQsNiArMzQ0LDIxIEBACiAkc3VwcHJlc3NfY2N7J3NlbGYnfSA9ICRzdXBwcmVzc19mcm9tIGlmIGRlZmluZWQgJHN1cHByZXNzX2Zyb207CiAkc3VwcHJlc3NfY2N7J3NvYid9ID0gISRzaWduZWRfb2ZmX2J5X2NjIGlmIGRlZmluZWQgJHNpZ25lZF9vZmZfYnlfY2M7CiAKK2lmICgkc3VwcHJlc3NfY2N7J2JvZHknfSkgeworCWZvcmVhY2ggbXkgJGVudHJ5IChxdyAoc29iIGJvZHljYykpIHsKKwkJJHN1cHByZXNzX2NjeyRlbnRyeX0gPSAxOworCX0KKwlkZWxldGUgJHN1cHByZXNzX2Njeydib2R5J307Cit9CisKKyMgU2V0IGNvbmZpcm0ncyBkZWZhdWx0IHZhbHVlCitteSAkY29uZmlybV91bmNvbmZpZ3VyZWQgPSAhZGVmaW5lZCAkY29uZmlybTsKK2lmICgkY29uZmlybV91bmNvbmZpZ3VyZWQpIHsKKwkkY29uZmlybSA9IHNjYWxhciAlc3VwcHJlc3NfY2MgPyAnY29tcG9zZScgOiAnYXV0byc7Cit9OworZGllICJVbmtub3duIC0tY29uZmlybSBzZXR0aW5nOiAnJGNvbmZpcm0nXG4iCisJdW5sZXNzICRjb25maXJtID1+IC9eKD86YXV0b3xjY3xjb21wb3NlfGFsd2F5c3xuZXZlcikvOworCiAjIERlYnVnZ2luZywgcHJpbnQgb3V0IHRoZSBzdXBwcmVzc2lvbnMuCiBpZiAoMCkgewogCXByaW50ICJzdXBwcmVzc2lvbnM6XG4iOwpAQCAtMzYwLDYgKzM4NSwxNCBAQAogCWRpZSAiQ29tbWEgaW4gLS1iY2NsaXN0IGVudHJ5OiAkZW50cnknXG4iIHVubGVzcyAkZW50cnkgIX4gbS8sLzsKIH0KIAorc3ViIHBhcnNlX2FkZHJlc3NfbGluZSB7CisJaWYgKCRoYXZlX21haWxfYWRkcmVzcykgeworCQlyZXR1cm4gbWFwIHsgJF8tPmZvcm1hdCB9IE1haWw6OkFkZHJlc3MtPnBhcnNlKCRfWzBdKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gc3BsaXRfYWRkcnMoJF9bMF0pOworCX0KK30KKwogc3ViIHNwbGl0X2FkZHJzIHsKIAlyZXR1cm4gcXVvdGV3b3JkcygnXHMqLFxzKicsIDEsIEBfKTsKIH0KQEAgLTM3Nyw3ICs0MTAsNyBAQAogCW1haWxyYyA9PiBzdWIgeyBteSAkZmggPSBzaGlmdDsgd2hpbGUgKDwkZmg+KSB7CiAJCWlmICgvXmFsaWFzXHMrKFxTKylccysoLiopJC8pIHsKIAkJCSMgc3BhY2VzIGRlbGltaXQgbXVsdGlwbGUgYWRkcmVzc2VzCi0JCQkkYWxpYXNlc3skMX0gPSBbIHNwbGl0KC9ccysvLCAkMikgXTsKKwkJCSRhbGlhc2VzeyQxfSA9IFsgcXVvdGV3b3JkcygnXHMrJywgMCwgJDIpIF07CiAJCX19fSwKIAlwaW5lID0+IHN1YiB7IG15ICRmaCA9IHNoaWZ0OyBteSAkZj0nXHRbXlx0XSonOwogCSAgICAgICAgZm9yIChteSAkeCA9ICcnOyBkZWZpbmVkKCR4KTsgJHggPSAkXykgewpAQCAtMzg2LDYgKzQxOSwxNCBAQAogCQkJJHggPX4gL14oXFMrKSRmXHRcKD8oW15cdF0rPylcKT8oOj8kZil7MCwyfSQvIG9yIG5leHQ7CiAJCQkkYWxpYXNlc3skMX0gPSBbIHNwbGl0X2FkZHJzKCQyKSBdOwogCQl9fSwKKwllbG0gPT4gc3ViICB7IG15ICRmaCA9IHNoaWZ0OworCQkgICAgICB3aGlsZSAoPCRmaD4pIHsKKwkJCSAgaWYgKC9eKFxTKylccys9XHMrW149XSs9XHMoXFMrKS8pIHsKKwkJCSAgICAgIG15ICgkYWxpYXMsICRhZGRyKSA9ICgkMSwgJDIpOworCQkJICAgICAgICRhbGlhc2VzeyRhbGlhc30gPSBbIHNwbGl0X2FkZHJzKCRhZGRyKSBdOworCQkJICB9CisJCSAgICAgIH0gfSwKKwogCWdudXMgPT4gc3ViIHsgbXkgJGZoID0gc2hpZnQ7IHdoaWxlICg8JGZoPikgewogCQlpZiAoL1woZGVmaW5lLW1haWwtYWxpYXNccysiKFxTKz8pIlxzKyIoXFMrPykiXCkvKSB7CiAJCQkkYWxpYXNlc3skMX0gPSBbICQyIF07CkBAIC00MDQsMTEgKzQ0NSwxMSBAQAogCiAjIHJldHVybnMgMSBpZiB0aGUgY29uZmxpY3QgbXVzdCBiZSBzb2x2ZWQgdXNpbmcgaXQgYXMgYSBmb3JtYXQtcGF0Y2ggYXJndW1lbnQKIHN1YiBjaGVja19maWxlX3Jldl9jb25mbGljdCgkKSB7CisJcmV0dXJuIHVubGVzcyAkcmVwbzsKIAlteSAkZiA9IHNoaWZ0OwogCXRyeSB7CiAJCSRyZXBvLT5jb21tYW5kKCdyZXYtcGFyc2UnLCAnLS12ZXJpZnknLCAnLS1xdWlldCcsICRmKTsKIAkJaWYgKGRlZmluZWQoJGZvcm1hdF9wYXRjaCkpIHsKLQkJCXByaW50ICJmb29cbiI7CiAJCQlyZXR1cm4gJGZvcm1hdF9wYXRjaDsKIAkJfQogCQlkaWUoPDxFT0YpOwpAQCAtNDQ1LDYgKzQ4Niw4IEBACiB9CiAKIGlmIChAcmV2X2xpc3Rfb3B0cykgeworCWRpZSAiQ2Fubm90IHJ1biBnaXQgZm9ybWF0LXBhdGNoIGZyb20gb3V0c2lkZSBhIHJlcG9zaXRvcnlcbiIKKwkJdW5sZXNzICRyZXBvOwogCXB1c2ggQGZpbGVzLCAkcmVwby0+Y29tbWFuZCgnZm9ybWF0LXBhdGNoJywgJy1vJywgdGVtcGRpcihDTEVBTlVQID0+IDEpLCBAcmV2X2xpc3Rfb3B0cyk7CiB9CiAKQEAgLTQ4MSw2ICs1MjQsOSBAQAogaWYgKCRjb21wb3NlKSB7CiAJIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBuZWVkIHRvIGJlIHNlY3VyZSwgYnV0IHdlIHdpbGwgbWFrZSBhIHNtYWxsCiAJIyBlZmZvcnQgdG8gaGF2ZSBpdCBiZSB1bmlxdWUKKwkkY29tcG9zZV9maWxlbmFtZSA9ICgkcmVwbyA/CisJCXRlbXBmaWxlKCIuZ2l0c2VuZGVtYWlsLm1zZy5YWFhYWFgiLCBESVIgPT4gJHJlcG8tPnJlcG9fcGF0aCgpKSA6CisJCXRlbXBmaWxlKCIuZ2l0c2VuZGVtYWlsLm1zZy5YWFhYWFgiLCBESVIgPT4gIi4iKSlbMV07CiAJb3BlbihDLCI+IiwkY29tcG9zZV9maWxlbmFtZSkKIAkJb3IgZGllICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAkY29tcG9zZV9maWxlbmFtZTogJCEiOwogCkBAIC00OTEsNyArNTM3LDcgQEAKIAogCXByaW50IEMgPDxFT1Q7CiBGcm9tICR0cGxfc2VuZGVyICMgVGhpcyBsaW5lIGlzIGlnbm9yZWQuCi1HSVQ6IExpbmVzIGJlZ2lubmluZyBpbiAiR0lUOiAiIHdpbGwgYmUgcmVtb3ZlZC4KK0dJVDogTGluZXMgYmVnaW5uaW5nIGluICJHSVQ6IiB3aWxsIGJlIHJlbW92ZWQuCiBHSVQ6IENvbnNpZGVyIGluY2x1ZGluZyBhbiBvdmVyYWxsIGRpZmZzdGF0IG9yIHRhYmxlIG9mIGNvbnRlbnRzCiBHSVQ6IGZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLgogR0lUOgpAQCAtNTA2LDggKzU1Miw2IEBACiAJfQogCWNsb3NlKEMpOwogCi0JbXkgJGVkaXRvciA9ICRFTlZ7R0lUX0VESVRPUn0gfHwgR2l0Ojpjb25maWcoQHJlcG8sICJjb3JlLmVkaXRvciIpIHx8ICRFTlZ7VklTVUFMfSB8fCAkRU5We0VESVRPUn0gfHwgInZpIjsKLQogCWlmICgkYW5ub3RhdGUpIHsKIAkJZG9fZWRpdCgkY29tcG9zZV9maWxlbmFtZSwgQGZpbGVzKTsKIAl9IGVsc2UgewpAQCAtNTI0LDcgKzU2OCw3IEBACiAJbXkgJGluX2JvZHkgPSAwOwogCW15ICRzdW1tYXJ5X2VtcHR5ID0gMTsKIAl3aGlsZSg8Qz4pIHsKLQkJbmV4dCBpZiBtL15HSVQ6IC87CisJCW5leHQgaWYgbS9eR0lUOi87CiAJCWlmICgkaW5fYm9keSkgewogCQkJJHN1bW1hcnlfZW1wdHkgPSAwIHVubGVzcyAoL15cbiQvKTsKIAkJfSBlbHNpZiAoL15cbiQvKSB7CkBAIC01MzIsNyArNTc2LDcgQEAKIAkJCWlmICgkbmVlZF84Yml0X2N0ZSkgewogCQkJCXByaW50IEMyICJNSU1FLVZlcnNpb246IDEuMFxuIiwKIAkJCQkJICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47ICIsCi0JCQkJCSAgICJjaGFyc2V0PXV0Zi04XG4iLAorCQkJCQkgICAiY2hhcnNldD1VVEYtOFxuIiwKIAkJCQkJICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iOwogCQkJfQogCQl9IGVsc2lmICgvXk1JTUUtVmVyc2lvbjovaSkgewpAQCAtNTY4LDQzICs2MTIsNTggQEAKIAlkb19lZGl0KEBmaWxlcyk7CiB9CiAKK3N1YiBhc2sgeworCW15ICgkcHJvbXB0LCAlYXJnKSA9IEBfOworCW15ICR2YWxpZF9yZSA9ICRhcmd7dmFsaWRfcmV9OworCW15ICRkZWZhdWx0ID0gJGFyZ3tkZWZhdWx0fTsKKwlteSAkcmVzcDsKKwlteSAkaSA9IDA7CisJcmV0dXJuIGRlZmluZWQgJGRlZmF1bHQgPyAkZGVmYXVsdCA6IHVuZGVmCisJCXVubGVzcyBkZWZpbmVkICR0ZXJtLT5JTiBhbmQgZGVmaW5lZCBmaWxlbm8oJHRlcm0tPklOKSBhbmQKKwkJICAgICAgIGRlZmluZWQgJHRlcm0tPk9VVCBhbmQgZGVmaW5lZCBmaWxlbm8oJHRlcm0tPk9VVCk7CisJd2hpbGUgKCRpKysgPCAxMCkgeworCQkkcmVzcCA9ICR0ZXJtLT5yZWFkbGluZSgkcHJvbXB0KTsKKwkJaWYgKCFkZWZpbmVkICRyZXNwKSB7ICMgRU9GCisJCQlwcmludCAiXG4iOworCQkJcmV0dXJuIGRlZmluZWQgJGRlZmF1bHQgPyAkZGVmYXVsdCA6IHVuZGVmOworCQl9CisJCWlmICgkcmVzcCBlcSAnJyBhbmQgZGVmaW5lZCAkZGVmYXVsdCkgeworCQkJcmV0dXJuICRkZWZhdWx0OworCQl9CisJCWlmICghZGVmaW5lZCAkdmFsaWRfcmUgb3IgJHJlc3AgPX4gLyR2YWxpZF9yZS8pIHsKKwkJCXJldHVybiAkcmVzcDsKKwkJfQorCX0KKwlyZXR1cm4gdW5kZWY7Cit9CisKIG15ICRwcm9tcHRpbmcgPSAwOwogaWYgKCFkZWZpbmVkICRzZW5kZXIpIHsKIAkkc2VuZGVyID0gJHJlcG9hdXRob3IgfHwgJHJlcG9jb21taXR0ZXIgfHwgJyc7Ci0KLQl3aGlsZSAoMSkgewotCQkkXyA9ICR0ZXJtLT5yZWFkbGluZSgiV2hvIHNob3VsZCB0aGUgZW1haWxzIGFwcGVhciB0byBiZSBmcm9tPyBbJHNlbmRlcl0gIik7Ci0JCWxhc3QgaWYgZGVmaW5lZCAkXzsKLQkJcHJpbnQgIlxuIjsKLQl9Ci0KLQkkc2VuZGVyID0gJF8gaWYgKCRfKTsKKwkkc2VuZGVyID0gYXNrKCJXaG8gc2hvdWxkIHRoZSBlbWFpbHMgYXBwZWFyIHRvIGJlIGZyb20/IFskc2VuZGVyXSAiLAorCSAgICAgICAgICAgICAgZGVmYXVsdCA9PiAkc2VuZGVyKTsKIAlwcmludCAiRW1haWxzIHdpbGwgYmUgc2VudCBmcm9tOiAiLCAkc2VuZGVyLCAiXG4iOwogCSRwcm9tcHRpbmcrKzsKIH0KIAogaWYgKCFAdG8pIHsKLQotCi0Jd2hpbGUgKDEpIHsKLQkJJF8gPSAkdGVybS0+cmVhZGxpbmUoIldobyBzaG91bGQgdGhlIGVtYWlscyBiZSBzZW50IHRvPyAiLCAiIik7Ci0JCWxhc3QgaWYgZGVmaW5lZCAkXzsKLQkJcHJpbnQgIlxuIjsKLQl9Ci0KLQlteSAkdG8gPSAkXzsKLQlwdXNoIEB0bywgc3BsaXRfYWRkcnMoJHRvKTsKKwlteSAkdG8gPSBhc2soIldobyBzaG91bGQgdGhlIGVtYWlscyBiZSBzZW50IHRvPyAiKTsKKwlwdXNoIEB0bywgcGFyc2VfYWRkcmVzc19saW5lKCR0bykgaWYgZGVmaW5lZCAkdG87ICMgc2FuaXRpemVkL3ZhbGlkYXRlZCBsYXRlcgogCSRwcm9tcHRpbmcrKzsKIH0KIAogc3ViIGV4cGFuZF9hbGlhc2VzIHsKLQlteSBAY3VyID0gQF87Ci0JbXkgQGxhc3Q7Ci0JZG8gewotCQlAbGFzdCA9IEBjdXI7Ci0JCUBjdXIgPSBtYXAgeyAkYWxpYXNlc3skX30gPyBAeyRhbGlhc2VzeyRffX0gOiAkXyB9IEBsYXN0OwotCX0gd2hpbGUgKGpvaW4oJywnLEBjdXIpIG5lIGpvaW4oJywnLEBsYXN0KSk7Ci0JcmV0dXJuIEBjdXI7CisJcmV0dXJuIG1hcCB7IGV4cGFuZF9vbmVfYWxpYXMoJF8pIH0gQF87Cit9CisKK215ICVFWFBBTkRFRF9BTElBU0VTOworc3ViIGV4cGFuZF9vbmVfYWxpYXMgeworCW15ICRhbGlhcyA9IHNoaWZ0OworCWlmICgkRVhQQU5ERURfQUxJQVNFU3skYWxpYXN9KSB7CisJCWRpZSAiZmF0YWw6IGFsaWFzICckYWxpYXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iOworCX0KKwlsb2NhbCAkRVhQQU5ERURfQUxJQVNFU3skYWxpYXN9ID0gMTsKKwlyZXR1cm4gJGFsaWFzZXN7JGFsaWFzfSA/IGV4cGFuZF9hbGlhc2VzKEB7JGFsaWFzZXN7JGFsaWFzfX0pIDogJGFsaWFzOwogfQogCiBAdG8gPSBleHBhbmRfYWxpYXNlcyhAdG8pOwpAQCAtNjEzLDEzICs2NzIsOCBAQAogQGJjY2xpc3QgPSBleHBhbmRfYWxpYXNlcyhAYmNjbGlzdCk7CiAKIGlmICgkdGhyZWFkICYmICFkZWZpbmVkICRpbml0aWFsX3JlcGx5X3RvICYmICRwcm9tcHRpbmcpIHsKLQl3aGlsZSAoMSkgewotCQkkXz0gJHRlcm0tPnJlYWRsaW5lKCJNZXNzYWdlLUlEIHRvIGJlIHVzZWQgYXMgSW4tUmVwbHktVG8gZm9yIHRoZSBmaXJzdCBlbWFpbD8gIiwgJGluaXRpYWxfcmVwbHlfdG8pOwotCQlsYXN0IGlmIGRlZmluZWQgJF87Ci0JCXByaW50ICJcbiI7Ci0JfQotCi0JJGluaXRpYWxfcmVwbHlfdG8gPSAkXzsKKwkkaW5pdGlhbF9yZXBseV90byA9IGFzaygKKwkJIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsPyAiKTsKIH0KIGlmIChkZWZpbmVkICRpbml0aWFsX3JlcGx5X3RvKSB7CiAJJGluaXRpYWxfcmVwbHlfdG8gPX4gcy9eXHMqPD8vLzsKQEAgLTYzNywyNSArNjkxLDEzIEBACiAJJHNtdHBfc2VydmVyIHx8PSAnbG9jYWxob3N0JzsgIyBjb3VsZCBiZSAxMjcuMC4wLjEsIHRvby4uLiAqc2hydWcqCiB9CiAKLWlmICgkY29tcG9zZSkgewotCXdoaWxlICgxKSB7Ci0JCSRfID0gJHRlcm0tPnJlYWRsaW5lKCJTZW5kIHRoaXMgZW1haWw/ICh5fG4pICIpOwotCQlsYXN0IGlmIGRlZmluZWQgJF87Ci0JCXByaW50ICJcbiI7Ci0JfQotCi0JaWYgKHVjIHN1YnN0cigkXywwLDEpIG5lICdZJykgewotCQljbGVhbnVwX2NvbXBvc2VfZmlsZXMoKTsKLQkJZXhpdCgwKTsKLQl9Ci0KLQlpZiAoJGNvbXBvc2UgPiAwKSB7Ci0JCUBmaWxlcyA9ICgkY29tcG9zZV9maWxlbmFtZSAuICIuZmluYWwiLCBAZmlsZXMpOwotCX0KK2lmICgkY29tcG9zZSAmJiAkY29tcG9zZSA+IDApIHsKKwlAZmlsZXMgPSAoJGNvbXBvc2VfZmlsZW5hbWUgLiAiLmZpbmFsIiwgQGZpbGVzKTsKIH0KIAogIyBWYXJpYWJsZXMgd2Ugc2V0IGFzIHBhcnQgb2YgdGhlIGxvb3Agb3ZlciBmaWxlcwotb3VyICgkbWVzc2FnZV9pZCwgJW1haWwsICRzdWJqZWN0LCAkcmVwbHlfdG8sICRyZWZlcmVuY2VzLCAkbWVzc2FnZSk7CitvdXIgKCRtZXNzYWdlX2lkLCAlbWFpbCwgJHN1YmplY3QsICRyZXBseV90bywgJHJlZmVyZW5jZXMsICRtZXNzYWdlLAorCSRuZWVkc19jb25maXJtLCAkbWVzc2FnZV9udW0sICRhc2tfZGVmYXVsdCk7CiAKIHN1YiBleHRyYWN0X3ZhbGlkX2FkZHJlc3MgewogCW15ICRhZGRyZXNzID0gc2hpZnQ7CkBAIC03MjcsMTIgKzc2OSwyMCBAQAogCiBzdWIgcXVvdGVfcmZjMjA0NyB7CiAJbG9jYWwgJF8gPSBzaGlmdDsKLQlteSAkZW5jb2RpbmcgPSBzaGlmdCB8fCAndXRmLTgnOworCW15ICRlbmNvZGluZyA9IHNoaWZ0IHx8ICdVVEYtOCc7CiAJcy8oW14tYS16QS1aMC05ISorXC9dKS9zcHJpbnRmKCI9JTAyWCIsIG9yZCgkMSkpL2VnOwogCXMvKC4qKS89XD8kZW5jb2RpbmdcP3FcPyQxXD89LzsKIAlyZXR1cm4gJF87CiB9CiAKK3N1YiBpc19yZmMyMDQ3X3F1b3RlZCB7CisJbXkgJHMgPSBzaGlmdDsKKwlteSAkdG9rZW4gPSAnW15dWygpPD5ALDs6IlwvPy49IFwwMDAtXDAzN1wxNzctXDM3N10rJzsKKwlteSAkZW5jb2RlZF90ZXh0ID0gJ1shLT5ALX5dKyc7CisJbGVuZ3RoKCRzKSA8PSA3NSAmJgorCSRzID1+IG0vXig/OiJbWzphc2NpaTpdXSoifD1cPyR0b2tlblw/JHRva2VuXD8kZW5jb2RlZF90ZXh0XD89KSQvbzsKK30KKwogIyB1c2UgdGhlIHNpbXBsZXN0IHF1b3RpbmcgYmVpbmcgYWJsZSB0byBoYW5kbGUgdGhlIHJlY2lwaWVudAogc3ViIHNhbml0aXplX2FkZHJlc3MKIHsKQEAgLTc0NCwxMiArNzk0LDEzIEBACiAJfQogCiAJIyBpZiByZWNpcGllbnRfbmFtZSBpcyBhbHJlYWR5IHF1b3RlZCwgZG8gbm90aGluZwotCWlmICgkcmVjaXBpZW50X25hbWUgPX4gL14oIi4qInw9XD91dGYtOFw/cVw/LipcPz0pJC8pIHsKKwlpZiAoaXNfcmZjMjA0N19xdW90ZWQoJHJlY2lwaWVudF9uYW1lKSkgewogCQlyZXR1cm4gJHJlY2lwaWVudDsKIAl9CiAKIAkjIHJmYzIwNDcgaXMgbmVlZGVkIGlmIGEgbm9uLWFzY2lpIGNoYXIgaXMgaW5jbHVkZWQKIAlpZiAoJHJlY2lwaWVudF9uYW1lID1+IC9bXls6YXNjaWk6XV0vKSB7CisJCSRyZWNpcGllbnRfbmFtZSA9fiBzL14iKC4qKSIkLyQxLzsKIAkJJHJlY2lwaWVudF9uYW1lID0gcXVvdGVfcmZjMjA0NygkcmVjaXBpZW50X25hbWUpOwogCX0KIApAQCAtNzYzLDYgKzgxNCwxMCBAQAogCiB9CiAKKyMgUmV0dXJucyAxIGlmIHRoZSBtZXNzYWdlIHdhcyBzZW50LCBhbmQgMCBvdGhlcndpc2UuCisjIEluIGFjdHVhbGl0eSwgdGhlIHdob2xlIHByb2dyYW0gZGllcyB3aGVuIHRoZXJlCisjIGlzIGFuIGVycm9yIHNlbmRpbmcgYSBtZXNzYWdlLgorCiBzdWIgc2VuZF9tZXNzYWdlCiB7CiAJbXkgQHJlY2lwaWVudHMgPSB1bmlxdWVfZW1haWxfbGlzdChAdG8pOwpAQCAtNzk1LDcgKzg1MCw3IEBACiBNZXNzYWdlLUlkOiAkbWVzc2FnZV9pZAogWC1NYWlsZXI6IGdpdC1zZW5kLWVtYWlsICRnaXR2ZXJzaW9uCiAiOwotCWlmICgkdGhyZWFkICYmICRyZXBseV90bykgeworCWlmICgkcmVwbHlfdG8pIHsKIAogCQkkaGVhZGVyIC49ICJJbi1SZXBseS1UbzogJHJlcGx5X3RvXG4iOwogCQkkaGVhZGVyIC49ICJSZWZlcmVuY2VzOiAkcmVmZXJlbmNlc1xuIjsKQEAgLTgxMSw2ICs4NjYsMzUgQEAKIAl1bnNoaWZ0IChAc2VuZG1haWxfcGFyYW1ldGVycywKIAkJCSctZicsICRyYXdfZnJvbSkgaWYoZGVmaW5lZCAkZW52ZWxvcGVfc2VuZGVyKTsKIAorCWlmICgkbmVlZHNfY29uZmlybSAmJiAhJGRyeV9ydW4pIHsKKwkJcHJpbnQgIlxuJGhlYWRlclxuIjsKKwkJaWYgKCRuZWVkc19jb25maXJtIGVxICJpbmZvcm0iKSB7CisJCQkkY29uZmlybV91bmNvbmZpZ3VyZWQgPSAwOyAjIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGZvciB0aGUgcmVzdCBvZiB0aGlzIHJ1bgorCQkJJGFza19kZWZhdWx0ID0gInkiOyAjIGFzc3VtZSB5ZXMgb24gRU9GIHNpbmNlIHVzZXIgaGFzbid0IGV4cGxpY2l0bHkgYXNrZWQgZm9yIGNvbmZpcm1hdGlvbgorCQkJcHJpbnQgIiAgICBUaGUgQ2MgbGlzdCBhYm92ZSBoYXMgYmVlbiBleHBhbmRlZCBieSBhZGRpdGlvbmFsXG4iOworCQkJcHJpbnQgIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iOworCQkJcHJpbnQgIiAgICBzZW5kLWVtYWlsIHByb21wdHMgYmVmb3JlIHNlbmRpbmcgd2hlbmV2ZXIgdGhpcyBvY2N1cnMuXG4iOworCQkJcHJpbnQgIiAgICBUaGlzIGJlaGF2aW9yIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNlbmRlbWFpbC5jb25maXJtXG4iOworCQkJcHJpbnQgIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iOworCQkJcHJpbnQgIlxuIjsKKwkJCXByaW50ICIgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHJ1biAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJy5cbiI7CisJCQlwcmludCAiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIjsKKwkJCXByaW50ICIgICAgcnVuICdnaXQgY29uZmlnIC0tZ2xvYmFsIHNlbmRlbWFpbC5jb25maXJtIGF1dG8nLlxuXG4iOworCQl9CisJCSRfID0gYXNrKCJTZW5kIHRoaXMgZW1haWw/IChbeV1lc3xbbl1vfFtxXXVpdHxbYV1sbCk6ICIsCisJCSAgICAgICAgIHZhbGlkX3JlID0+IHFyL14oPzp5ZXN8eXxub3xufHF1aXR8cXxhbGx8YSkvaSwKKwkJICAgICAgICAgZGVmYXVsdCA9PiAkYXNrX2RlZmF1bHQpOworCQlkaWUgIlNlbmQgdGhpcyBlbWFpbCByZXBseSByZXF1aXJlZCIgdW5sZXNzIGRlZmluZWQgJF87CisJCWlmICgvXm4vaSkgeworCQkJcmV0dXJuIDA7CisJCX0gZWxzaWYgKC9ecS9pKSB7CisJCQljbGVhbnVwX2NvbXBvc2VfZmlsZXMoKTsKKwkJCWV4aXQoMCk7CisJCX0gZWxzaWYgKC9eYS9pKSB7CisJCQkkY29uZmlybSA9ICduZXZlcic7CisJCX0KKwl9CisKIAlpZiAoJGRyeV9ydW4pIHsKIAkJIyBXZSBkb24ndCB3YW50IHRvIHNlbmQgdGhlIGVtYWlsLgogCX0gZWxzaWYgKCRzbXRwX3NlcnZlciA9fiBtI14vIykgewpAQCAtODgzLDcgKzk2Nyw3IEBACiAJCSRzbXRwLT5kYXRhIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKIAkJJHNtdHAtPmRhdGFzZW5kKCIkaGVhZGVyXG4kbWVzc2FnZSIpIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKIAkJJHNtdHAtPmRhdGFlbmQoKSBvciBkaWUgJHNtdHAtPm1lc3NhZ2U7Ci0JCSRzbXRwLT5vayBvciBkaWUgIkZhaWxlZCB0byBzZW5kICRzdWJqZWN0XG4iLiRzbXRwLT5tZXNzYWdlOworCQkkc210cC0+Y29kZSA9fiAvMjUwfDIwMC8gb3IgZGllICJGYWlsZWQgdG8gc2VuZCAkc3ViamVjdFxuIi4kc210cC0+bWVzc2FnZTsKIAl9CiAJaWYgKCRxdWlldCkgewogCQlwcmludGYgKCgkZHJ5X3J1biA/ICJEcnktIiA6ICIiKS4iU2VudCAlc1xuIiwgJHN1YmplY3QpOwpAQCAtOTA0LDExICs5ODgsMTQgQEAKIAkJCXByaW50ICJSZXN1bHQ6IE9LXG4iOwogCQl9CiAJfQorCisJcmV0dXJuIDE7CiB9CiAKICRyZXBseV90byA9ICRpbml0aWFsX3JlcGx5X3RvOwogJHJlZmVyZW5jZXMgPSAkaW5pdGlhbF9yZXBseV90byB8fCAnJzsKICRzdWJqZWN0ID0gJGluaXRpYWxfc3ViamVjdDsKKyRtZXNzYWdlX251bSA9IDA7CiAKIGZvcmVhY2ggbXkgJHQgKEBmaWxlcykgewogCW9wZW4oRiwiPCIsJHQpIG9yIGRpZSAiY2FuJ3Qgb3BlbiBmaWxlICR0IjsKQEAgLTkxNyw5NSArMTAwNCwxMTAgQEAKIAlteSAkYXV0aG9yX2VuY29kaW5nOwogCW15ICRoYXNfY29udGVudF90eXBlOwogCW15ICRib2R5X2VuY29kaW5nOwotCUBjYyA9IEBpbml0aWFsX2NjOworCUBjYyA9ICgpOwogCUB4aCA9ICgpOwogCW15ICRpbnB1dF9mb3JtYXQgPSB1bmRlZjsKLQlteSAkaGVhZGVyX2RvbmUgPSAwOworCW15IEBoZWFkZXIgPSAoKTsKIAkkbWVzc2FnZSA9ICIiOworCSRtZXNzYWdlX251bSsrOworCSMgRmlyc3QgdW5mb2xkIG11bHRpbGluZSBoZWFkZXIgZmllbGRzCiAJd2hpbGUoPEY+KSB7Ci0JCWlmICghJGhlYWRlcl9kb25lKSB7Ci0JCQlpZiAoL15Gcm9tIC8pIHsKLQkJCQkkaW5wdXRfZm9ybWF0ID0gJ21ib3gnOwotCQkJCW5leHQ7Ci0JCQl9Ci0JCQljaG9tcDsKLQkJCWlmICghZGVmaW5lZCAkaW5wdXRfZm9ybWF0ICYmIC9eWy1BLVphLXpdKzpccy8pIHsKLQkJCQkkaW5wdXRfZm9ybWF0ID0gJ21ib3gnOwotCQkJfQorCQlsYXN0IGlmIC9eXHMqJC87CisJCWlmICgvXlxzK1xTLyBhbmQgQGhlYWRlcikgeworCQkJY2hvbXAoJGhlYWRlclskI2hlYWRlcl0pOworCQkJcy9eXHMrLyAvOworCQkJJGhlYWRlclskI2hlYWRlcl0gLj0gJF87CisJICAgIH0gZWxzZSB7CisJCQlwdXNoKEBoZWFkZXIsICRfKTsKKwkJfQorCX0KKwkjIE5vdyBwYXJzZSB0aGUgaGVhZGVyCisJZm9yZWFjaChAaGVhZGVyKSB7CisJCWlmICgvXkZyb20gLykgeworCQkJJGlucHV0X2Zvcm1hdCA9ICdtYm94JzsKKwkJCW5leHQ7CisJCX0KKwkJY2hvbXA7CisJCWlmICghZGVmaW5lZCAkaW5wdXRfZm9ybWF0ICYmIC9eWy1BLVphLXpdKzpccy8pIHsKKwkJCSRpbnB1dF9mb3JtYXQgPSAnbWJveCc7CisJCX0KIAotCQkJaWYgKGRlZmluZWQgJGlucHV0X2Zvcm1hdCAmJiAkaW5wdXRfZm9ybWF0IGVxICdtYm94JykgewotCQkJCWlmICgvXlN1YmplY3Q6XHMrKC4qKSQvKSB7Ci0JCQkJCSRzdWJqZWN0ID0gJDE7Ci0KLQkJCQl9IGVsc2lmICgvXihDY3xGcm9tKTpccysoLiopJC8pIHsKLQkJCQkJaWYgKHVucXVvdGVfcmZjMjA0NygkMikgZXEgJHNlbmRlcikgeworCQlpZiAoZGVmaW5lZCAkaW5wdXRfZm9ybWF0ICYmICRpbnB1dF9mb3JtYXQgZXEgJ21ib3gnKSB7CisJCQlpZiAoL15TdWJqZWN0OlxzKyguKikkLykgeworCQkJCSRzdWJqZWN0ID0gJDE7CisJCQl9CisJCQllbHNpZiAoL15Gcm9tOlxzKyguKikkLykgeworCQkJCSgkYXV0aG9yLCAkYXV0aG9yX2VuY29kaW5nKSA9IHVucXVvdGVfcmZjMjA0NygkMSk7CisJCQkJbmV4dCBpZiAkc3VwcHJlc3NfY2N7J2F1dGhvcid9OworCQkJCW5leHQgaWYgJHN1cHByZXNzX2NjeydzZWxmJ30gYW5kICRhdXRob3IgZXEgJHNlbmRlcjsKKwkJCQlwcmludGYoIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iLAorCQkJCQkkMSwgJF8pIHVubGVzcyAkcXVpZXQ7CisJCQkJcHVzaCBAY2MsICQxOworCQkJfQorCQkJZWxzaWYgKC9eQ2M6XHMrKC4qKSQvKSB7CisJCQkJZm9yZWFjaCBteSAkYWRkciAocGFyc2VfYWRkcmVzc19saW5lKCQxKSkgeworCQkJCQlpZiAodW5xdW90ZV9yZmMyMDQ3KCRhZGRyKSBlcSAkc2VuZGVyKSB7CiAJCQkJCQluZXh0IGlmICgkc3VwcHJlc3NfY2N7J3NlbGYnfSk7Ci0JCQkJCX0KLQkJCQkJZWxzaWYgKCQxIGVxICdGcm9tJykgewotCQkJCQkJKCRhdXRob3IsICRhdXRob3JfZW5jb2RpbmcpCi0JCQkJCQkgID0gdW5xdW90ZV9yZmMyMDQ3KCQyKTsKLQkJCQkJCW5leHQgaWYgKCRzdXBwcmVzc19jY3snYXV0aG9yJ30pOwogCQkJCQl9IGVsc2UgewogCQkJCQkJbmV4dCBpZiAoJHN1cHByZXNzX2NjeydjYyd9KTsKIAkJCQkJfQogCQkJCQlwcmludGYoIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iLAotCQkJCQkJJDIsICRfKSB1bmxlc3MgJHF1aWV0OwotCQkJCQlwdXNoIEBjYywgJDI7Ci0JCQkJfQotCQkJCWVsc2lmICgvXkNvbnRlbnQtdHlwZTovaSkgewotCQkJCQkkaGFzX2NvbnRlbnRfdHlwZSA9IDE7Ci0JCQkJCWlmICgvY2hhcnNldD0iPyhbXiAiXSspLykgewotCQkJCQkJJGJvZHlfZW5jb2RpbmcgPSAkMTsKLQkJCQkJfQotCQkJCQlwdXNoIEB4aCwgJF87Ci0JCQkJfQotCQkJCWVsc2lmICgvXk1lc3NhZ2UtSWQ6ICguKikvaSkgewotCQkJCQkkbWVzc2FnZV9pZCA9ICQxOwotCQkJCX0KLQkJCQllbHNpZiAoIS9eRGF0ZTpccy8gJiYgL15bLUEtWmEtel0rOlxzK1xTLykgewotCQkJCQlwdXNoIEB4aCwgJF87Ci0JCQkJfQotCi0JCQl9IGVsc2UgewotCQkJCSMgSW4gdGhlIHRyYWRpdGlvbmFsCi0JCQkJIyAic2VuZCBsb3RzIG9mIGVtYWlsIiBmb3JtYXQsCi0JCQkJIyBsaW5lIDEgPSBjYwotCQkJCSMgbGluZSAyID0gc3ViamVjdAotCQkJCSMgU28gbGV0J3Mgc3VwcG9ydCB0aGF0LCB0b28uCi0JCQkJJGlucHV0X2Zvcm1hdCA9ICdsb3RzJzsKLQkJCQlpZiAoQGNjID09IDAgJiYgISRzdXBwcmVzc19jY3snY2MnfSkgewotCQkJCQlwcmludGYoIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIiwKLQkJCQkJCSRfLCAkXykgdW5sZXNzICRxdWlldDsKLQotCQkJCQlwdXNoIEBjYywgJF87Ci0KLQkJCQl9IGVsc2lmICghZGVmaW5lZCAkc3ViamVjdCkgewotCQkJCQkkc3ViamVjdCA9ICRfOworCQkJCQkJJGFkZHIsICRfKSB1bmxlc3MgJHF1aWV0OworCQkJCQlwdXNoIEBjYywgJGFkZHI7CiAJCQkJfQogCQkJfQotCi0JCQkjIEEgd2hpdGVzcGFjZSBsaW5lIHdpbGwgdGVybWluYXRlIHRoZSBoZWFkZXJzCi0JCQlpZiAobS9eXHMqJC8pIHsKLQkJCQkkaGVhZGVyX2RvbmUgPSAxOworCQkJZWxzaWYgKC9eQ29udGVudC10eXBlOi9pKSB7CisJCQkJJGhhc19jb250ZW50X3R5cGUgPSAxOworCQkJCWlmICgvY2hhcnNldD0iPyhbXiAiXSspLykgeworCQkJCQkkYm9keV9lbmNvZGluZyA9ICQxOworCQkJCX0KKwkJCQlwdXNoIEB4aCwgJF87CiAJCQl9CisJCQllbHNpZiAoL15NZXNzYWdlLUlkOiAoLiopL2kpIHsKKwkJCQkkbWVzc2FnZV9pZCA9ICQxOworCQkJfQorCQkJZWxzaWYgKCEvXkRhdGU6XHMvICYmIC9eWy1BLVphLXpdKzpccytcUy8pIHsKKwkJCQlwdXNoIEB4aCwgJF87CisJCQl9CisKIAkJfSBlbHNlIHsKLQkJCSRtZXNzYWdlIC49ICAkXzsKLQkJCWlmICgvXihTaWduZWQtb2ZmLWJ5fENjKTogKC4qKSQvaSkgewotCQkJCW5leHQgaWYgKCRzdXBwcmVzc19jY3snc29iJ30pOwotCQkJCWNob21wOwotCQkJCW15ICRjID0gJDI7Ci0JCQkJY2hvbXAgJGM7Ci0JCQkJbmV4dCBpZiAoJGMgZXEgJHNlbmRlciBhbmQgJHN1cHByZXNzX2NjeydzZWxmJ30pOwotCQkJCXB1c2ggQGNjLCAkYzsKLQkJCQlwcmludGYoIihzb2IpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIsCi0JCQkJCSRjLCAkXykgdW5sZXNzICRxdWlldDsKKwkJCSMgSW4gdGhlIHRyYWRpdGlvbmFsCisJCQkjICJzZW5kIGxvdHMgb2YgZW1haWwiIGZvcm1hdCwKKwkJCSMgbGluZSAxID0gY2MKKwkJCSMgbGluZSAyID0gc3ViamVjdAorCQkJIyBTbyBsZXQncyBzdXBwb3J0IHRoYXQsIHRvby4KKwkJCSRpbnB1dF9mb3JtYXQgPSAnbG90cyc7CisJCQlpZiAoQGNjID09IDAgJiYgISRzdXBwcmVzc19jY3snY2MnfSkgeworCQkJCXByaW50ZigiKG5vbi1tYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iLAorCQkJCQkkXywgJF8pIHVubGVzcyAkcXVpZXQ7CisJCQkJcHVzaCBAY2MsICRfOworCQkJfSBlbHNpZiAoIWRlZmluZWQgJHN1YmplY3QpIHsKKwkJCQkkc3ViamVjdCA9ICRfOwogCQkJfQogCQl9CiAJfQorCSMgTm93IHBhcnNlIHRoZSBtZXNzYWdlIGJvZHkKKwl3aGlsZSg8Rj4pIHsKKwkJJG1lc3NhZ2UgLj0gICRfOworCQlpZiAoL14oU2lnbmVkLW9mZi1ieXxDYyk6ICguKikkL2kpIHsKKwkJCWNob21wOworCQkJbXkgKCR3aGF0LCAkYykgPSAoJDEsICQyKTsKKwkJCWNob21wICRjOworCQkJaWYgKCRjIGVxICRzZW5kZXIpIHsKKwkJCQluZXh0IGlmICgkc3VwcHJlc3NfY2N7J3NlbGYnfSk7CisJCQl9IGVsc2UgeworCQkJCW5leHQgaWYgJHN1cHByZXNzX2Njeydzb2InfSBhbmQgJHdoYXQgPX4gL1NpZ25lZC1vZmYtYnkvaTsKKwkJCQluZXh0IGlmICRzdXBwcmVzc19jY3snYm9keWNjJ30gYW5kICR3aGF0ID1+IC9DYy9pOworCQkJfQorCQkJcHVzaCBAY2MsICRjOworCQkJcHJpbnRmKCIoYm9keSkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIiwKKwkJCQkkYywgJF8pIHVubGVzcyAkcXVpZXQ7CisJCX0KKwl9CiAJY2xvc2UgRjsKIAogCWlmIChkZWZpbmVkICRjY19jbWQgJiYgISRzdXBwcmVzc19jY3snY2NjbWQnfSkgewotCQlvcGVuKEYsICIkY2NfY21kICR0IHwiKQorCQlvcGVuKEYsICIkY2NfY21kIFxRJHRcRSB8IikKIAkJCW9yIGRpZSAiKGNjLWNtZCkgQ291bGQgbm90IGV4ZWN1dGUgJyRjY19jbWQnIjsKIAkJd2hpbGUoPEY+KSB7CiAJCQlteSAkYyA9ICRfOwpAQCAtMTAyMCw3ICsxMTIyLDcgQEAKIAkJCW9yIGRpZSAiKGNjLWNtZCkgZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJyRjY19jbWQnIjsKIAl9CiAKLQlpZiAoZGVmaW5lZCAkYXV0aG9yKSB7CisJaWYgKGRlZmluZWQgJGF1dGhvciBhbmQgJGF1dGhvciBuZSAkc2VuZGVyKSB7CiAJCSRtZXNzYWdlID0gIkZyb206ICRhdXRob3JcblxuJG1lc3NhZ2UiOwogCQlpZiAoZGVmaW5lZCAkYXV0aG9yX2VuY29kaW5nKSB7CiAJCQlpZiAoJGhhc19jb250ZW50X3R5cGUpIHsKQEAgLTEwNDAsMTAgKzExNDIsMTkgQEAKIAkJfQogCX0KIAotCXNlbmRfbWVzc2FnZSgpOworCSRuZWVkc19jb25maXJtID0gKAorCQkkY29uZmlybSBlcSAiYWx3YXlzIiBvcgorCQkoJGNvbmZpcm0gPX4gL14oPzphdXRvfGNjKSQvICYmIEBjYykgb3IKKwkJKCRjb25maXJtID1+IC9eKD86YXV0b3xjb21wb3NlKSQvICYmICRjb21wb3NlICYmICRtZXNzYWdlX251bSA9PSAxKSk7CisJJG5lZWRzX2NvbmZpcm0gPSAiaW5mb3JtIiBpZiAoJG5lZWRzX2NvbmZpcm0gJiYgJGNvbmZpcm1fdW5jb25maWd1cmVkICYmIEBjYyk7CisKKwlAY2MgPSAoQGluaXRpYWxfY2MsIEBjYyk7CisKKwlteSAkbWVzc2FnZV93YXNfc2VudCA9IHNlbmRfbWVzc2FnZSgpOwogCiAJIyBzZXQgdXAgZm9yIHRoZSBuZXh0IG1lc3NhZ2UKLQlpZiAoJGNoYWluX3JlcGx5X3RvIHx8ICFkZWZpbmVkICRyZXBseV90byB8fCBsZW5ndGgoJHJlcGx5X3RvKSA9PSAwKSB7CisJaWYgKCR0aHJlYWQgJiYgJG1lc3NhZ2Vfd2FzX3NlbnQgJiYKKwkJKCRjaGFpbl9yZXBseV90byB8fCAhZGVmaW5lZCAkcmVwbHlfdG8gfHwgbGVuZ3RoKCRyZXBseV90bykgPT0gMCkpIHsKIAkJJHJlcGx5X3RvID0gJG1lc3NhZ2VfaWQ7CiAJCWlmIChsZW5ndGggJHJlZmVyZW5jZXMgPiAwKSB7CiAJCQkkcmVmZXJlbmNlcyAuPSAiXG4gJG1lc3NhZ2VfaWQiOwpAQCAtMTA1NCwxMyArMTE2NSwxMCBAQAogCSRtZXNzYWdlX2lkID0gdW5kZWY7CiB9CiAKLWlmICgkY29tcG9zZSkgewotCWNsZWFudXBfY29tcG9zZV9maWxlcygpOwotfQorY2xlYW51cF9jb21wb3NlX2ZpbGVzKCk7CiAKIHN1YiBjbGVhbnVwX2NvbXBvc2VfZmlsZXMoKSB7Ci0JdW5saW5rKCRjb21wb3NlX2ZpbGVuYW1lLCAkY29tcG9zZV9maWxlbmFtZSAuICIuZmluYWwiKTsKLQorCXVubGluaygkY29tcG9zZV9maWxlbmFtZSwgJGNvbXBvc2VfZmlsZW5hbWUgLiAiLmZpbmFsIikgaWYgJGNvbXBvc2U7CiB9CiAKICRzbXRwLT5xdWl0IGlmICRzbXRwOwpkaWZmIC0tZ2l0IGEvZ2l0LXNoLXNldHVwLnNoIGIvZ2l0LXNoLXNldHVwLnNoCmluZGV4IDIxNDIzMDguLmM0MWMyZjcgMTAwNzU1Ci0tLSBhL2dpdC1zaC1zZXR1cC5zaAorKysgYi9naXQtc2gtc2V0dXAuc2gKQEAgLTExLDExICsxMSw0OCBAQAogIyBleHBvcnRpbmcgaXQuCiB1bnNldCBDRFBBVEgKIAorZ2l0X2Jyb2tlbl9wYXRoX2ZpeCAoKSB7CisJY2FzZSAiOiRQQVRIOiIgaW4KKwkqOiQxOiopIDogb2sgOzsKKwkqKQorCQlQQVRIPSQoCisJCQlTQU5FX1RPT0xfUEFUSD0iJDEiCisJCQlJRlM9OiBwYXRoPSBzZXA9CisJCQlzZXQgeCAkUEFUSAorCQkJc2hpZnQKKwkJCWZvciBlbGVtCisJCQlkbworCQkJCWNhc2UgIiRTQU5FX1RPT0xfUEFUSDokZWxlbSIgaW4KKwkJCQkoPyo6L2JpbiB8ID8qOi91c3IvYmluKQorCQkJCQlwYXRoPSIkcGF0aCRzZXAkU0FORV9UT09MX1BBVEgiCisJCQkJCXNlcD06CisJCQkJCVNBTkVfVE9PTF9QQVRIPQorCQkJCWVzYWMKKwkJCQlwYXRoPSIkcGF0aCRzZXAkZWxlbSIKKwkJCQlzZXA9OgorCQkJZG9uZQorCQkJZWNobyAiJHBhdGgiCisJCSkKKwkJOzsKKwllc2FjCit9CisKKyMgQEBCUk9LRU5fUEFUSF9GSVhAQAorCiBkaWUoKSB7CiAJZWNobyA+JjIgIiRAIgogCWV4aXQgMQogfQogCitHSVRfUVVJRVQ9CisKK3NheSAoKSB7CisJaWYgdGVzdCAteiAiJEdJVF9RVUlFVCIKKwl0aGVuCisJCXByaW50ZiAnJXNcbicgIiQqIgorCWZpCit9CisKIGlmIHRlc3QgLW4gIiRPUFRJT05TX1NQRUMiOyB0aGVuCiAJdXNhZ2UoKSB7CiAJCSIkMCIgLWgKQEAgLTg1LDI3ICsxMjIsMTQgQEAKIAljZHVwPSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctY2R1cCkKIAlpZiB0ZXN0ICEgLXogIiRjZHVwIgogCXRoZW4KLQkJY2FzZSAiJGNkdXAiIGluCi0JCS8qKQotCQkJIyBOb3QgcXVpdGUgdGhlIHNhbWUgYXMgaWYgd2UgZGlkICJjZCAtUCAnJGNkdXAnIiB3aGVuCi0JCQkjICRjZHVwIGNvbnRhaW5zICIuLiIgYWZ0ZXIgc3ltbGluayBwYXRoIGNvbXBvbmVudHMuCi0JCQkjIERvbid0IGZpeCB0aGF0IGNhc2UgYXQgbGVhc3QgdW50aWwgR2l0IHN3aXRjaGVzIHRvCi0JCQkjICJjZCAtUCIgYWNyb3NzIHRoZSBib2FyZC4KLQkJCXBoeXM9IiRjZHVwIgotCQkJOzsKLQkJLi58Li4vKnwqLy4ufCovLi4vKikKLQkJCSMgSW50ZXJwcmV0ICRjZHVwIHJlbGF0aXZlIHRvIHRoZSBwaHlzaWNhbCwgbm90IGxvZ2ljYWwsIGN3ZC4KLQkJCSMgUHJvYmFibHkgL2Jpbi9wd2QgaXMgbW9yZSBwb3J0YWJsZSB0aGFuIHBhc3NpbmcgLVAgdG8gY2Qgb3IgcHdkLgotCQkJcGh5cz0iJCh1bnNldCBQV0Q7IC9iaW4vcHdkKS8kY2R1cCIKLQkJCTs7Ci0JCSopCi0JCQkjIFRoZXJlJ3Mgbm8gIi4uIiwgc28gbm8gbmVlZCB0byBtYWtlIHRoaW5ncyBhYnNvbHV0ZS4KLQkJCXBoeXM9IiRjZHVwIgotCQkJOzsKLQkJZXNhYwotCi0JCWNkICIkcGh5cyIgfHwgewotCQkJZWNobyA+JjIgIkNhbm5vdCBjaGRpciB0byAkcGh5cywgdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCisJCSMgVGhlICItUCIgb3B0aW9uIHNheXMgdG8gZm9sbG93ICJwaHlzaWNhbCIgZGlyZWN0b3J5CisJCSMgc3RydWN0dXJlIGluc3RlYWQgb2YgZm9sbG93aW5nIHN5bWJvbGljIGxpbmtzLiAgV2hlbiBjZHVwIGlzCisJCSMgIi4uLyIsIHRoaXMgbWVhbnMgZm9sbG93aW5nIHRoZSAiLi4iIGVudHJ5IGluIHRoZSBjdXJyZW50CisJCSMgZGlyZWN0b3J5IGluc3RlYWQgdGV4dHVhbGx5IHJlbW92aW5nIGEgc3ltbGluayBwYXRoIGVsZW1lbnQKKwkJIyBmcm9tIHRoZSBQV0Qgc2hlbGwgdmFyaWFibGUuICBUaGUgIi1QIiBiZWhhdmlvciBpcyBtb3JlCisJCSMgY29uc2lzdGVudCB3aXRoIHRoZSBDLXN0eWxlIGNoZGlyIHVzZWQgYnkgbW9zdCBvZiBHaXQuCisJCWNkIC1QICIkY2R1cCIgfHwgeworCQkJZWNobyA+JjIgIkNhbm5vdCBjaGRpciB0byAkY2R1cCwgdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCiAJCQlleGl0IDEKIAkJfQogCWZpCmRpZmYgLS1naXQgYS9naXQtc3Rhc2guc2ggYi9naXQtc3Rhc2guc2gKaW5kZXggYjlhY2U5OS4uMDNlNTg5ZiAxMDA3NTUKLS0tIGEvZ2l0LXN0YXNoLnNoCisrKyBiL2dpdC1zdGFzaC5zaApAQCAtMywxMCArMywxMSBAQAogCiBkYXNobGVzcz0kKGJhc2VuYW1lICIkMCIgfCBzZWQgLWUgJ3MvLS8gLycpCiBVU0FHRT0ibGlzdCBbPG9wdGlvbnM+XQotICAgb3I6ICRkYXNobGVzcyAoc2hvdyB8IGRyb3AgfCBwb3AgKSBbPHN0YXNoPl0KLSAgIG9yOiAkZGFzaGxlc3MgYXBwbHkgWy0taW5kZXhdIFs8c3Rhc2g+XQorICAgb3I6ICRkYXNobGVzcyBzaG93IFs8c3Rhc2g+XQorICAgb3I6ICRkYXNobGVzcyBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0KKyAgIG9yOiAkZGFzaGxlc3MgKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dCiAgICBvcjogJGRhc2hsZXNzIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dCi0gICBvcjogJGRhc2hsZXNzIFtzYXZlIFstLWtlZXAtaW5kZXhdIFs8bWVzc2FnZT5dXQorICAgb3I6ICRkYXNobGVzcyBbc2F2ZSBbLS1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF0gWzxtZXNzYWdlPl1dCiAgICBvcjogJGRhc2hsZXNzIGNsZWFyIgogCiBTVUJESVJFQ1RPUllfT0s9WWVzCkBAIC05NCwxOCArOTUsMjggQEAKIAogc2F2ZV9zdGFzaCAoKSB7CiAJa2VlcF9pbmRleD0KLQljYXNlICIkMSIgaW4KLQktLWtlZXAtaW5kZXgpCi0JCWtlZXBfaW5kZXg9dAorCXdoaWxlIHRlc3QgJCMgIT0gMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktLWtlZXAtaW5kZXgpCisJCQlrZWVwX2luZGV4PXQKKwkJCTs7CisJCS1xfC0tcXVpZXQpCisJCQlHSVRfUVVJRVQ9dAorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCiAJCXNoaWZ0Ci0JZXNhYworCWRvbmUKIAogCXN0YXNoX21zZz0iJCoiCiAKIAlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAogCWlmIG5vX2NoYW5nZXMKIAl0aGVuCi0JCWVjaG8gJ05vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZScKKwkJc2F5ICdObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUnCiAJCWV4aXQgMAogCWZpCiAJdGVzdCAtZiAiJEdJVF9ESVIvbG9ncy8kcmVmX3N0YXNoIiB8fApAQCAtMTE4LDkgKzEyOSw5IEBACiAKIAlnaXQgdXBkYXRlLXJlZiAtbSAiJHN0YXNoX21zZyIgJHJlZl9zdGFzaCAkd19jb21taXQgfHwKIAkJZGllICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCi0JcHJpbnRmICdTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgIiVzIlxuJyAiJHN0YXNoX21zZyIKKwlzYXkgU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICIkc3Rhc2hfbXNnIgogCi0JZ2l0IHJlc2V0IC0taGFyZAorCWdpdCByZXNldCAtLWhhcmQgJHtHSVRfUVVJRVQ6Ky1xfQogCiAJaWYgdGVzdCAtbiAiJGtlZXBfaW5kZXgiICYmIHRlc3QgLW4gJGlfdHJlZQogCXRoZW4KQEAgLTE1NiwxMSArMTY3LDIyIEBACiAJCWRpZSAnQ2Fubm90IGFwcGx5IHRvIGEgZGlydHkgd29ya2luZyB0cmVlLCBwbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzJwogCiAJdW5zdGFzaF9pbmRleD0KLQljYXNlICIkMSIgaW4KLQktLWluZGV4KQotCQl1bnN0YXNoX2luZGV4PXQKKworCXdoaWxlIHRlc3QgJCMgIT0gMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktLWluZGV4KQorCQkJdW5zdGFzaF9pbmRleD10CisJCQk7OworCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPXQKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYwogCQlzaGlmdAotCWVzYWMKKwlkb25lCiAKIAkjIGN1cnJlbnQgaW5kZXggc3RhdGUKIAljX3RyZWU9JChnaXQgd3JpdGUtdHJlZSkgfHwKQEAgLTE4MSw3ICsyMDMsNyBAQAogCQlnaXQgZGlmZi10cmVlIC0tYmluYXJ5ICRzXjJeLi4kc14yIHwgZ2l0IGFwcGx5IC0tY2FjaGVkCiAJCXRlc3QgJD8gLW5lIDAgJiYKIAkJCWRpZSAnQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LicKLQkJdW5zdGFzaGVkX2luZGV4X3RyZWU9JChnaXQtd3JpdGUtdHJlZSkgfHwKKwkJdW5zdGFzaGVkX2luZGV4X3RyZWU9JChnaXQgd3JpdGUtdHJlZSkgfHwKIAkJCWRpZSAnQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZScKIAkJZ2l0IHJlc2V0CiAJZmkKQEAgLTE5Myw3ICsyMTUsMTEgQEAKIAkJZXhwb3J0IEdJVEhFQURfJHdfdHJlZSBHSVRIRUFEXyRjX3RyZWUgR0lUSEVBRF8kYl90cmVlCiAJIgogCi0JaWYgZ2l0LW1lcmdlLXJlY3Vyc2l2ZSAkYl90cmVlIC0tICRjX3RyZWUgJHdfdHJlZQorCWlmIHRlc3QgLW4gIiRHSVRfUVVJRVQiCisJdGhlbgorCQlleHBvcnQgR0lUX01FUkdFX1ZFUkJPU0lUWT0wCisJZmkKKwlpZiBnaXQgbWVyZ2UtcmVjdXJzaXZlICRiX3RyZWUgLS0gJGNfdHJlZSAkd190cmVlCiAJdGhlbgogCQkjIE5vIGNvbmZsaWN0CiAJCWlmIHRlc3QgLW4gIiR1bnN0YXNoZWRfaW5kZXhfdHJlZSIKQEAgLTIwNyw3ICsyMzMsMTIgQEAKIAkJCQlkaWUgIkNhbm5vdCB1bnN0YWdlIG1vZGlmaWVkIGZpbGVzIgogCQkJcm0gLWYgIiRhIgogCQlmaQotCQlnaXQgc3RhdHVzIHx8IDoKKwkJc3F1ZWxjaD0KKwkJaWYgdGVzdCAtbiAiJEdJVF9RVUlFVCIKKwkJdGhlbgorCQkJc3F1ZWxjaD0nPi9kZXYvbnVsbCAyPiYxJworCQlmaQorCQlldmFsICJnaXQgc3RhdHVzICRzcXVlbGNoIiB8fCA6CiAJZWxzZQogCQkjIE1lcmdlIGNvbmZsaWN0OyBrZWVwIHRoZSBleGl0IHN0YXR1cyBmcm9tIG1lcmdlLXJlY3Vyc2l2ZQogCQlzdGF0dXM9JD8KQEAgLTIyMiw2ICsyNTMsMTkgQEAKIGRyb3Bfc3Rhc2ggKCkgewogCWhhdmVfc3Rhc2ggfHwgZGllICdObyBzdGFzaCBlbnRyaWVzIHRvIGRyb3AnCiAKKwl3aGlsZSB0ZXN0ICQjICE9IDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD10CisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKIAlpZiB0ZXN0ICQjID0gMAogCXRoZW4KIAkJc2V0IHggIiRyZWZfc3Rhc2hAezB9IgpAQCAtMjM1LDcgKzI3OSw3IEBACiAJCWRpZSAiJCo6IG5vdCBhIHZhbGlkIHN0YXNoZWQgc3RhdGUiCiAKIAlnaXQgcmVmbG9nIGRlbGV0ZSAtLXVwZGF0ZXJlZiAtLXJld3JpdGUgIiRAIiAmJgotCQllY2hvICJEcm9wcGVkICQqICgkcykiIHx8IGRpZSAiJCo6IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorCQlzYXkgIkRyb3BwZWQgJCogKCRzKSIgfHwgZGllICIkKjogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCiAKIAkjIGNsZWFyX3N0YXNoIGlmIHdlIGp1c3QgZHJvcHBlZCB0aGUgbGFzdCBzdGFzaCBlbnRyeQogCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRyZWZfc3Rhc2hAezB9IiA+IC9kZXYvbnVsbCAyPiYxIHx8IGNsZWFyX3N0YXNoCkBAIC0yNTMsNyArMjk3LDcgQEAKIAlmaQogCXN0YXNoPSQyCiAKLQlnaXQtY2hlY2tvdXQgLWIgJGJyYW5jaCAkc3Rhc2heICYmCisJZ2l0IGNoZWNrb3V0IC1iICRicmFuY2ggJHN0YXNoXiAmJgogCWFwcGx5X3N0YXNoIC0taW5kZXggJHN0YXNoICYmCiAJZHJvcF9zdGFzaCAkc3Rhc2gKIH0KQEAgLTMxMiw3ICszNTYsNyBAQAogCWlmIHRlc3QgJCMgLWVxIDAKIAl0aGVuCiAJCXNhdmVfc3Rhc2ggJiYKLQkJZWNobyAnKFRvIHJlc3RvcmUgdGhlbSB0eXBlICJnaXQgc3Rhc2ggYXBwbHkiKScKKwkJc2F5ICcoVG8gcmVzdG9yZSB0aGVtIHR5cGUgImdpdCBzdGFzaCBhcHBseSIpJwogCWVsc2UKIAkJdXNhZ2UKIAlmaQpkaWZmIC0tZ2l0IGEvZ2l0LXN1Ym1vZHVsZS5zaCBiL2dpdC1zdWJtb2R1bGUuc2gKaW5kZXggMmY0N2UwNi4uZWJlZDcxMSAxMDA3NTUKLS0tIGEvZ2l0LXN1Ym1vZHVsZS5zaAorKysgYi9naXQtc3VibW9kdWxlLnNoCkBAIC01LDcgKzUsNyBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDcgTGFycyBIamVtbGkKIAogVVNBR0U9IlstLXF1aWV0XSBbLS1jYWNoZWRdIFwKLVthZGQgPHJlcG8+IFstYiBicmFuY2hdIDxwYXRoPl18W3N0YXR1c3xpbml0fHVwZGF0ZSBbLWl8LS1pbml0XXxzdW1tYXJ5IFstbnwtLXN1bW1hcnktbGltaXQgPG4+XSBbPGNvbW1pdD5dXSBcCitbYWRkIFstYiBicmFuY2hdIDxyZXBvPiA8cGF0aD5dfFtzdGF0dXN8aW5pdHx1cGRhdGUgWy1pfC0taW5pdF0gWy1OfC0tbm8tZmV0Y2hdIFstLXJlYmFzZXwtLW1lcmdlXXxzdW1tYXJ5IFstbnwtLXN1bW1hcnktbGltaXQgPG4+XSBbPGNvbW1pdD5dXSBcCiBbLS1dIFs8cGF0aD4uLi5dfFtmb3JlYWNoIDxjb21tYW5kPl18W3N5bmMgWy0tXSBbPHBhdGg+Li4uXV0iCiBPUFRJT05TX1NQRUM9CiAuIGdpdC1zaC1zZXR1cApAQCAtMTQsMTkgKzE0LDEwIEBACiAKIGNvbW1hbmQ9CiBicmFuY2g9Ci1xdWlldD0KK3JlZmVyZW5jZT0KIGNhY2hlZD0KLQotIwotIyBwcmludCBzdHVmZiBvbiBzdGRvdXQgdW5sZXNzIC1xIHdhcyBzcGVjaWZpZWQKLSMKLXNheSgpCi17Ci0JaWYgdGVzdCAteiAiJHF1aWV0IgotCXRoZW4KLQkJZWNobyAiJEAiCi0JZmkKLX0KK25vZmV0Y2g9Cit1cGRhdGU9CiAKICMgUmVzb2x2ZSByZWxhdGl2ZSB1cmwgYnkgYXBwZW5kaW5nIHRvIHBhcmVudCdzIHVybAogcmVzb2x2ZV9yZWxhdGl2ZV91cmwgKCkKQEAgLTU5LDcgKzUwLDcgQEAKICMKIG1vZHVsZV9saXN0KCkKIHsKLQlnaXQgbHMtZmlsZXMgLS1zdGFnZSAtLSAiJEAiIHwgZ3JlcCAnXjE2MDAwMCAnCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCAtLXN0YWdlIC0tICIkQCIgfCBncmVwICdeMTYwMDAwICcKIH0KIAogIwpAQCAtOTAsNiArODEsNyBAQAogewogCXBhdGg9JDEKIAl1cmw9JDIKKwlyZWZlcmVuY2U9IiQzIgogCiAJIyBJZiB0aGVyZSBhbHJlYWR5IGlzIGEgZGlyZWN0b3J5IGF0IHRoZSBzdWJtb2R1bGUgcGF0aCwKIAkjIGV4cGVjdCBpdCB0byBiZSBlbXB0eSAoc2luY2UgdGhhdCBpcyB0aGUgZGVmYXVsdCBjaGVja291dApAQCAtMTA1LDcgKzk3LDEyIEBACiAJdGVzdCAtZSAiJHBhdGgiICYmCiAJZGllICJBIGZpbGUgYWxyZWFkeSBleGlzdCBhdCBwYXRoICckcGF0aCciCiAKLQlnaXQtY2xvbmUgLW4gIiR1cmwiICIkcGF0aCIgfHwKKwlpZiB0ZXN0IC1uICIkcmVmZXJlbmNlIgorCXRoZW4KKwkJZ2l0LWNsb25lICIkcmVmZXJlbmNlIiAtbiAiJHVybCIgIiRwYXRoIgorCWVsc2UKKwkJZ2l0LWNsb25lIC1uICIkdXJsIiAiJHBhdGgiCisJZmkgfHwKIAlkaWUgIkNsb25lIG9mICckdXJsJyBpbnRvIHN1Ym1vZHVsZSBwYXRoICckcGF0aCcgZmFpbGVkIgogfQogCkBAIC0xMjgsNyArMTI1LDE2IEBACiAJCQlzaGlmdAogCQkJOzsKIAkJLXF8LS1xdWlldCkKLQkJCXF1aWV0PTEKKwkJCUdJVF9RVUlFVD0xCisJCQk7OworCQktLXJlZmVyZW5jZSkKKwkJCWNhc2UgIiQyIiBpbiAnJykgdXNhZ2UgOzsgZXNhYworCQkJcmVmZXJlbmNlPSItLXJlZmVyZW5jZT0kMiIKKwkJCXNoaWZ0CisJCQk7OworCQktLXJlZmVyZW5jZT0qKQorCQkJcmVmZXJlbmNlPSIkMSIKKwkJCXNoaWZ0CiAJCQk7OwogCQktLSkKIAkJCXNoaWZ0CkBAIC0xNjYsOSArMTcyLDE4IEBACiAJOzsKIAllc2FjCiAKLQkjIHN0cmlwIHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBwYXRoCi0JcGF0aD0kKGVjaG8gIiRwYXRoIiB8IHNlZCAtZSAnc3wvKiR8fCcpCi0KKwkjIG5vcm1hbGl6ZSBwYXRoOgorCSMgbXVsdGlwbGUgLy87IGxlYWRpbmcgLi87IC8uLzsgLy4uLzsgdHJhaWxpbmcgLworCXBhdGg9JChwcmludGYgJyVzL1xuJyAiJHBhdGgiIHwKKwkJc2VkIC1lICcKKwkJCXN8Ly8qfC98ZworCQkJc3xeXChcLi9cKSp8fAorCQkJc3wvXC4vfC98ZworCQkJOnN0YXJ0CisJCQlzfFwoW14vXSpcKS9cLlwuL3x8CisJCQl0c3RhcnQKKwkJCXN8LyokfHwKKwkJJykKIAlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoICIkcGF0aCIgPiAvZGV2L251bGwgMj4mMSAmJgogCWRpZSAiJyRwYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCiAKQEAgLTE5Myw5ICsyMDgsMTYgQEAKIAkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRwYXRoIi51cmwgIiR1cmwiCiAJZWxzZQogCi0JCW1vZHVsZV9jbG9uZSAiJHBhdGgiICIkcmVhbHJlcG8iIHx8IGV4aXQKLQkJKHVuc2V0IEdJVF9ESVI7IGNkICIkcGF0aCIgJiYgZ2l0IGNoZWNrb3V0IC1mIC1xICR7YnJhbmNoOistYiAiJGJyYW5jaCIgIm9yaWdpbi8kYnJhbmNoIn0pIHx8Ci0JCWRpZSAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHBhdGgnIgorCQltb2R1bGVfY2xvbmUgIiRwYXRoIiAiJHJlYWxyZXBvIiAiJHJlZmVyZW5jZSIgfHwgZXhpdAorCQkoCisJCQl1bnNldCBHSVRfRElSCisJCQljZCAiJHBhdGgiICYmCisJCQkjIGFzaCBmYWlscyB0byB3b3Jkc3BsaXQgJHticmFuY2g6Ky1iICIkYnJhbmNoIi4uLn0KKwkJCWNhc2UgIiRicmFuY2giIGluCisJCQknJykgZ2l0IGNoZWNrb3V0IC1mIC1xIDs7CisJCQk/KikgZ2l0IGNoZWNrb3V0IC1mIC1xIC1iICIkYnJhbmNoIiAib3JpZ2luLyRicmFuY2giIDs7CisJCQllc2FjCisJCSkgfHwgZGllICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckcGF0aCciCiAJZmkKIAogCWdpdCBhZGQgIiRwYXRoIiB8fApAQCAtMjM5LDcgKzI2MSw3IEBACiAJZG8KIAkJY2FzZSAiJDEiIGluCiAJCS1xfC0tcXVpZXQpCi0JCQlxdWlldD0xCisJCQlHSVRfUVVJRVQ9MQogCQkJOzsKIAkJLS0pCiAJCQlzaGlmdApAQCAtMjc3LDYgKzI5OSwxMSBAQAogCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCAiJHVybCIgfHwKIAkJZGllICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJHBhdGgnIgogCisJCXVwZD0iJChnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS4iJG5hbWUiLnVwZGF0ZSkiCisJCXRlc3QgLXogIiR1cGQiIHx8CisJCWdpdCBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXBkYXRlICIkdXBkIiB8fAorCQlkaWUgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKKwogCQlzYXkgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSByZWdpc3RlcmVkIGZvciBwYXRoICckcGF0aCciCiAJZG9uZQogfQpAQCAtMjk0LDExICszMjEsMzIgQEAKIAkJY2FzZSAiJDEiIGluCiAJCS1xfC0tcXVpZXQpCiAJCQlzaGlmdAotCQkJcXVpZXQ9MQorCQkJR0lUX1FVSUVUPTEKIAkJCTs7CiAJCS1pfC0taW5pdCkKKwkJCWluaXQ9MQogCQkJc2hpZnQKLQkJCWNtZF9pbml0ICIkQCIgfHwgcmV0dXJuCisJCQk7OworCQktTnwtLW5vLWZldGNoKQorCQkJc2hpZnQKKwkJCW5vZmV0Y2g9MQorCQkJOzsKKwkJLXJ8LS1yZWJhc2UpCisJCQlzaGlmdAorCQkJdXBkYXRlPSJyZWJhc2UiCisJCQk7OworCQktLXJlZmVyZW5jZSkKKwkJCWNhc2UgIiQyIiBpbiAnJykgdXNhZ2UgOzsgZXNhYworCQkJcmVmZXJlbmNlPSItLXJlZmVyZW5jZT0kMiIKKwkJCXNoaWZ0IDIKKwkJCTs7CisJCS0tcmVmZXJlbmNlPSopCisJCQlyZWZlcmVuY2U9IiQxIgorCQkJc2hpZnQKKwkJCTs7CisJCS1tfC0tbWVyZ2UpCisJCQlzaGlmdAorCQkJdXBkYXRlPSJtZXJnZSIKIAkJCTs7CiAJCS0tKQogCQkJc2hpZnQKQEAgLTMxMywxMSArMzYxLDE3IEBACiAJCWVzYWMKIAlkb25lCiAKKwlpZiB0ZXN0IC1uICIkaW5pdCIKKwl0aGVuCisJCWNtZF9pbml0ICItLSIgIiRAIiB8fCByZXR1cm4KKwlmaQorCiAJbW9kdWxlX2xpc3QgIiRAIiB8CiAJd2hpbGUgcmVhZCBtb2RlIHNoYTEgc3RhZ2UgcGF0aAogCWRvCiAJCW5hbWU9JChtb2R1bGVfbmFtZSAiJHBhdGgiKSB8fCBleGl0CiAJCXVybD0kKGdpdCBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXJsKQorCQl1cGRhdGVfbW9kdWxlPSQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cGRhdGUpCiAJCWlmIHRlc3QgLXogIiR1cmwiCiAJCXRoZW4KIAkJCSMgT25seSBtZW50aW9uIHVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlcyB3aGVuIGl0cwpAQCAtMzMwLDcgKzM4NCw3IEBACiAKIAkJaWYgISB0ZXN0IC1kICIkcGF0aCIvLmdpdCAtbyAtZiAiJHBhdGgiLy5naXQKIAkJdGhlbgotCQkJbW9kdWxlX2Nsb25lICIkcGF0aCIgIiR1cmwiIHx8IGV4aXQKKwkJCW1vZHVsZV9jbG9uZSAiJHBhdGgiICIkdXJsIiAiJHJlZmVyZW5jZSJ8fCBleGl0CiAJCQlzdWJzaGExPQogCQllbHNlCiAJCQlzdWJzaGExPSQodW5zZXQgR0lUX0RJUjsgY2QgIiRwYXRoIiAmJgpAQCAtMzM4LDYgKzM5MiwxMSBAQAogCQkJZGllICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCiAJCWZpCiAKKwkJaWYgISB0ZXN0IC16ICIkdXBkYXRlIgorCQl0aGVuCisJCQl1cGRhdGVfbW9kdWxlPSR1cGRhdGUKKwkJZmkKKwogCQlpZiB0ZXN0ICIkc3Vic2hhMSIgIT0gIiRzaGExIgogCQl0aGVuCiAJCQlmb3JjZT0KQEAgLTM0NSwxMSArNDA0LDM1IEBACiAJCQl0aGVuCiAJCQkJZm9yY2U9Ii1mIgogCQkJZmkKLQkJCSh1bnNldCBHSVRfRElSOyBjZCAiJHBhdGgiICYmIGdpdC1mZXRjaCAmJgotCQkJCWdpdC1jaGVja291dCAkZm9yY2UgLXEgIiRzaGExIikgfHwKLQkJCWRpZSAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKIAotCQkJc2F5ICJTdWJtb2R1bGUgcGF0aCAnJHBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorCQkJaWYgdGVzdCAteiAiJG5vZmV0Y2giCisJCQl0aGVuCisJCQkJKHVuc2V0IEdJVF9ESVI7IGNkICIkcGF0aCIgJiYKKwkJCQkJZ2l0LWZldGNoKSB8fAorCQkJCWRpZSAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCisJCQlmaQorCisJCQljYXNlICIkdXBkYXRlX21vZHVsZSIgaW4KKwkJCXJlYmFzZSkKKwkJCQljb21tYW5kPSJnaXQgcmViYXNlIgorCQkJCWFjdGlvbj0icmViYXNlIgorCQkJCW1zZz0icmViYXNlZCBvbnRvIgorCQkJCTs7CisJCQltZXJnZSkKKwkJCQljb21tYW5kPSJnaXQgbWVyZ2UiCisJCQkJYWN0aW9uPSJtZXJnZSIKKwkJCQltc2c9Im1lcmdlZCBpbiIKKwkJCQk7OworCQkJKikKKwkJCQljb21tYW5kPSJnaXQgY2hlY2tvdXQgJGZvcmNlIC1xIgorCQkJCWFjdGlvbj0iY2hlY2tvdXQiCisJCQkJbXNnPSJjaGVja2VkIG91dCIKKwkJCQk7OworCQkJZXNhYworCisJCQkodW5zZXQgR0lUX0RJUjsgY2QgIiRwYXRoIiAmJiAkY29tbWFuZCAiJHNoYTEiKSB8fAorCQkJZGllICJVbmFibGUgdG8gJGFjdGlvbiAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCisJCQlzYXkgIlN1Ym1vZHVsZSBwYXRoICckcGF0aCc6ICRtc2cgJyRzaGExJyIKIAkJZmkKIAlkb25lCiB9CkBAIC01NjQsNyArNjQ3LDcgQEAKIAlkbwogCQljYXNlICIkMSIgaW4KIAkJLXF8LS1xdWlldCkKLQkJCXF1aWV0PTEKKwkJCUdJVF9RVUlFVD0xCiAJCQk7OwogCQktLWNhY2hlZCkKIAkJCWNhY2hlZD0xCkBAIC02MTgsNyArNzAxLDcgQEAKIAlkbwogCQljYXNlICIkMSIgaW4KIAkJLXF8LS1xdWlldCkKLQkJCXF1aWV0PTEKKwkJCUdJVF9RVUlFVD0xCiAJCQlzaGlmdAogCQkJOzsKIAkJLS0pCkBAIC02NzMsNyArNzU2LDcgQEAKIAkJY29tbWFuZD0kMQogCQk7OwogCS1xfC0tcXVpZXQpCi0JCXF1aWV0PTEKKwkJR0lUX1FVSUVUPTEKIAkJOzsKIAktYnwtLWJyYW5jaCkKIAkJY2FzZSAiJDIiIGluCmRpZmYgLS1naXQgYS9naXQtc3ZuLnBlcmwgYi9naXQtc3ZuLnBlcmwKaW5kZXggYWQwMWUxOC4uZDA3NTgxMCAxMDA3NTUKLS0tIGEvZ2l0LXN2bi5wZXJsCisrKyBiL2dpdC1zdm4ucGVybApAQCAtNSw3ICs1LDcgQEAKIHVzZSBzdHJpY3Q7CiB1c2UgdmFycyBxdy8JJEFVVEhPUiAkVkVSU0lPTgogCQkkc2hhMSAkc2hhMV9zaG9ydCAkX3JldmlzaW9uICRfcmVwb3NpdG9yeQotCQkkX3EgJF9hdXRob3JzICV1c2Vycy87CisJCSRfcSAkX2F1dGhvcnMgJF9hdXRob3JzX3Byb2cgJXVzZXJzLzsKICRBVVRIT1IgPSAnRXJpYyBXb25nIDxub3JtYWxwZXJzb25AeWhidC5uZXQ+JzsKICRWRVJTSU9OID0gJ0BAR0lUX1ZFUlNJT05AQCc7CiAKQEAgLTE5LDYgKzE5LDcgQEAKICRHaXQ6OlNWTjo6ZGVmYXVsdF9yZXBvX2lkID0gJ3N2bic7CiAkR2l0OjpTVk46OmRlZmF1bHRfcmVmX2lkID0gJEVOVntHSVRfU1ZOX0lEfSB8fCAnZ2l0LXN2bic7CiAkR2l0OjpTVk46OlJhOjpfbG9nX3dpbmRvd19zaXplID0gMTAwOworJEdpdDo6U1ZOOjpfbWluaW1pemVfdXJsID0gJ3Vuc2V0JzsKIAogJEdpdDo6U1ZOOjpMb2c6OlRaID0gJEVOVntUWn07CiAkRU5We1RafSA9ICdVVEMnOwpAQCAtMzEsNiArMzIsNyBAQAogaWYgKCRTVk46OkNvcmU6OlZFUlNJT04gbHQgJzEuMS4wJykgewogCWZhdGFsICJOZWVkIFNWTjo6Q29yZSAxLjEuMCBvciBiZXR0ZXIgKGdvdCAkU1ZOOjpDb3JlOjpWRVJTSU9OKSI7CiB9CitteSAkY2FuX2NvbXByZXNzID0gZXZhbCB7IHJlcXVpcmUgQ29tcHJlc3M6OlpsaWI7IDF9OwogcHVzaCBAR2l0OjpTVk46OlJhOjpJU0EsICdTVk46OlJhJzsKIHB1c2ggQFNWTjo6R2l0OjpFZGl0b3I6OklTQSwgJ1NWTjo6RGVsdGE6OkVkaXRvcic7CiBwdXNoIEBTVk46OkdpdDo6RmV0Y2hlcjo6SVNBLCAnU1ZOOjpEZWx0YTo6RWRpdG9yJzsKQEAgLTM5LDYgKzQxLDggQEAKIHVzZSBJTzo6RmlsZSBxdy8vOwogdXNlIEZpbGU6OkJhc2VuYW1lIHF3L2Rpcm5hbWUgYmFzZW5hbWUvOwogdXNlIEZpbGU6OlBhdGggcXcvbWtwYXRoLzsKK3VzZSBGaWxlOjpTcGVjOwordXNlIEZpbGU6OkZpbmQ7CiB1c2UgR2V0b3B0OjpMb25nIHF3Lzpjb25maWcgZ251X2dldG9wdCBub19pZ25vcmVfY2FzZSBhdXRvX2FiYnJldi87CiB1c2UgSVBDOjpPcGVuMzsKIHVzZSBHaXQ7CkBAIC00Nyw3ICs1MSw4IEBACiAJIyBpbXBvcnQgZnVuY3Rpb25zIGZyb20gR2l0IGludG8gb3VyIHBhY2thZ2VzLCBlbiBtYXNzZQogCW5vIHN0cmljdCAncmVmcyc7CiAJZm9yZWFjaCAocXcvY29tbWFuZCBjb21tYW5kX29uZWxpbmUgY29tbWFuZF9ub2lzeSBjb21tYW5kX291dHB1dF9waXBlCi0JICAgICAgICAgICAgY29tbWFuZF9pbnB1dF9waXBlIGNvbW1hbmRfY2xvc2VfcGlwZS8pIHsKKwkgICAgICAgICAgICBjb21tYW5kX2lucHV0X3BpcGUgY29tbWFuZF9jbG9zZV9waXBlCisJICAgICAgICAgICAgY29tbWFuZF9iaWRpX3BpcGUgY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUvKSB7CiAJCWZvciBteSAkcGFja2FnZSAoIHF3KFNWTjo6R2l0OjpFZGl0b3IgU1ZOOjpHaXQ6OkZldGNoZXIKIAkJCUdpdDo6U1ZOOjpNaWdyYXRpb24gR2l0OjpTVk46OkxvZyBHaXQ6OlNWTiksCiAJCQlfX1BBQ0tBR0VfXykgewpAQCAtNjEsMzggKzY2LDQyIEBACiAkc2hhMSA9IHFyL1thLWZcZF17NDB9LzsKICRzaGExX3Nob3J0ID0gcXIvW2EtZlxkXXs0LDQwfS87CiBteSAoJF9zdGRpbiwgJF9oZWxwLCAkX2VkaXQsCi0JJF9tZXNzYWdlLCAkX2ZpbGUsCisJJF9tZXNzYWdlLCAkX2ZpbGUsICRfYnJhbmNoX2Rlc3QsCiAJJF90ZW1wbGF0ZSwgJF9zaGFyZWQsCi0JJF92ZXJzaW9uLCAkX2ZldGNoX2FsbCwgJF9ub19yZWJhc2UsCisJJF92ZXJzaW9uLCAkX2ZldGNoX2FsbCwgJF9ub19yZWJhc2UsICRfZmV0Y2hfcGFyZW50LAogCSRfbWVyZ2UsICRfc3RyYXRlZ3ksICRfZHJ5X3J1biwgJF9sb2NhbCwKIAkkX3ByZWZpeCwgJF9ub19jaGVja291dCwgJF91cmwsICRfdmVyYm9zZSwKIAkkX2dpdF9mb3JtYXQsICRfY29tbWl0X3VybCwgJF90YWcpOwogJEdpdDo6U1ZOOjpfZm9sbG93X3BhcmVudCA9IDE7CiskX3EgfHw9IDA7CiBteSAlcmVtb3RlX29wdHMgPSAoICd1c2VybmFtZT1zJyA9PiBcJEdpdDo6U1ZOOjpQcm9tcHQ6Ol91c2VybmFtZSwKICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZy1kaXI9cycgPT4gXCRHaXQ6OlNWTjo6UmE6OmNvbmZpZ19kaXIsCi0gICAgICAgICAgICAgICAgICAgICduby1hdXRoLWNhY2hlJyA9PiBcJEdpdDo6U1ZOOjpQcm9tcHQ6Ol9ub19hdXRoX2NhY2hlICk7CisgICAgICAgICAgICAgICAgICAgICduby1hdXRoLWNhY2hlJyA9PiBcJEdpdDo6U1ZOOjpQcm9tcHQ6Ol9ub19hdXRoX2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAnaWdub3JlLXBhdGhzPXMnID0+IFwkU1ZOOjpHaXQ6OkZldGNoZXI6Ol9pZ25vcmVfcmVnZXggKTsKIG15ICVmY19vcHRzID0gKCAnZm9sbG93LXBhcmVudHxmb2xsb3chJyA9PiBcJEdpdDo6U1ZOOjpfZm9sbG93X3BhcmVudCwKIAkJJ2F1dGhvcnMtZmlsZXxBPXMnID0+IFwkX2F1dGhvcnMsCisJCSdhdXRob3JzLXByb2c9cycgPT4gXCRfYXV0aG9yc19wcm9nLAogCQkncmVwYWNrOmknID0+IFwkR2l0OjpTVk46Ol9yZXBhY2ssCiAJCSdub01ldGFkYXRhJyA9PiBcJEdpdDo6U1ZOOjpfbm9fbWV0YWRhdGEsCiAJCSd1c2VTdm1Qcm9wcycgPT4gXCRHaXQ6OlNWTjo6X3VzZV9zdm1fcHJvcHMsCiAJCSd1c2VTdm5zeW5jUHJvcHMnID0+IFwkR2l0OjpTVk46Ol91c2Vfc3Zuc3luY19wcm9wcywKIAkJJ2xvZy13aW5kb3ctc2l6ZT1pJyA9PiBcJEdpdDo6U1ZOOjpSYTo6X2xvZ193aW5kb3dfc2l6ZSwKIAkJJ25vLWNoZWNrb3V0JyA9PiBcJF9ub19jaGVja291dCwKLQkJJ3F1aWV0fHEnID0+IFwkX3EsCisJCSdxdWlldHxxKycgPT4gXCRfcSwKIAkJJ3JlcGFjay1mbGFnc3xyZXBhY2stYXJnc3xyZXBhY2stb3B0cz1zJyA9PgogCQkgICBcJEdpdDo6U1ZOOjpfcmVwYWNrX2ZsYWdzLAogCQkndXNlLWxvZy1hdXRob3InID0+IFwkR2l0OjpTVk46Ol91c2VfbG9nX2F1dGhvciwKIAkJJ2FkZC1hdXRob3ItZnJvbScgPT4gXCRHaXQ6OlNWTjo6X2FkZF9hdXRob3JfZnJvbSwKKwkJJ2xvY2FsdGltZScgPT4gXCRHaXQ6OlNWTjo6X2xvY2FsdGltZSwKIAkJJXJlbW90ZV9vcHRzICk7CiAKLW15ICgkX3RydW5rLCAkX3RhZ3MsICRfYnJhbmNoZXMsICRfc3RkbGF5b3V0KTsKK215ICgkX3RydW5rLCBAX3RhZ3MsIEBfYnJhbmNoZXMsICRfc3RkbGF5b3V0KTsKIG15ICVpY3Y7CiBteSAlaW5pdF9vcHRzID0gKCAndGVtcGxhdGU9cycgPT4gXCRfdGVtcGxhdGUsICdzaGFyZWQ6cycgPT4gXCRfc2hhcmVkLAotICAgICAgICAgICAgICAgICAgJ3RydW5rfFQ9cycgPT4gXCRfdHJ1bmssICd0YWdzfHQ9cycgPT4gXCRfdGFncywKLSAgICAgICAgICAgICAgICAgICdicmFuY2hlc3xiPXMnID0+IFwkX2JyYW5jaGVzLCAncHJlZml4PXMnID0+IFwkX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgICd0cnVua3xUPXMnID0+IFwkX3RydW5rLCAndGFnc3x0PXNAJyA9PiBcQF90YWdzLAorICAgICAgICAgICAgICAgICAgJ2JyYW5jaGVzfGI9c0AnID0+IFxAX2JyYW5jaGVzLCAncHJlZml4PXMnID0+IFwkX3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICdzdGRsYXlvdXR8cycgPT4gXCRfc3RkbGF5b3V0LAotICAgICAgICAgICAgICAgICAgJ21pbmltaXplLXVybHxtJyA9PiBcJEdpdDo6U1ZOOjpfbWluaW1pemVfdXJsLAorICAgICAgICAgICAgICAgICAgJ21pbmltaXplLXVybHxtIScgPT4gXCRHaXQ6OlNWTjo6X21pbmltaXplX3VybCwKIAkJICAnbm8tbWV0YWRhdGEnID0+IHN1YiB7ICRpY3Z7bm9NZXRhZGF0YX0gPSAxIH0sCiAJCSAgJ3VzZS1zdm0tcHJvcHMnID0+IHN1YiB7ICRpY3Z7dXNlU3ZtUHJvcHN9ID0gMSB9LAogCQkgICd1c2Utc3Zuc3luYy1wcm9wcycgPT4gc3ViIHsgJGljdnt1c2VTdm5zeW5jUHJvcHN9ID0gMSB9LApAQCAtMTA5LDYgKzExOCw3IEBACiAJZmV0Y2ggPT4gWyBcJmNtZF9mZXRjaCwgIkRvd25sb2FkIG5ldyByZXZpc2lvbnMgZnJvbSBTVk4iLAogCQkJeyAncmV2aXNpb258cj1zJyA9PiBcJF9yZXZpc2lvbiwKIAkJCSAgJ2ZldGNoLWFsbHxhbGwnID0+IFwkX2ZldGNoX2FsbCwKKwkJCSAgJ3BhcmVudHxwJyA9PiBcJF9mZXRjaF9wYXJlbnQsCiAJCQkgICAlZmNfb3B0cyB9IF0sCiAJY2xvbmUgPT4gWyBcJmNtZF9jbG9uZSwgIkluaXRpYWxpemUgYW5kIGZldGNoIHJldmlzaW9ucyIsCiAJCQl7ICdyZXZpc2lvbnxyPXMnID0+IFwkX3JldmlzaW9uLApAQCAtMTM0LDE1ICsxNDQsMTcgQEAKIAlicmFuY2ggPT4gWyBcJmNtZF9icmFuY2gsCiAJICAgICAgICAgICAgJ0NyZWF0ZSBhIGJyYW5jaCBpbiB0aGUgU1ZOIHJlcG9zaXRvcnknLAogCSAgICAgICAgICAgIHsgJ21lc3NhZ2V8bT1zJyA9PiBcJF9tZXNzYWdlLAorCSAgICAgICAgICAgICAgJ2Rlc3RpbmF0aW9ufGQ9cycgPT4gXCRfYnJhbmNoX2Rlc3QsCiAJICAgICAgICAgICAgICAnZHJ5LXJ1bnxuJyA9PiBcJF9kcnlfcnVuLAogCQkgICAgICAndGFnfHQnID0+IFwkX3RhZyB9IF0sCiAJdGFnID0+IFsgc3ViIHsgJF90YWcgPSAxOyBjbWRfYnJhbmNoKEBfKSB9LAogCSAgICAgICAgICdDcmVhdGUgYSB0YWcgaW4gdGhlIFNWTiByZXBvc2l0b3J5JywKIAkgICAgICAgICB7ICdtZXNzYWdlfG09cycgPT4gXCRfbWVzc2FnZSwKKwkgICAgICAgICAgICdkZXN0aW5hdGlvbnxkPXMnID0+IFwkX2JyYW5jaF9kZXN0LAogCSAgICAgICAgICAgJ2RyeS1ydW58bicgPT4gXCRfZHJ5X3J1biB9IF0sCiAJJ3NldC10cmVlJyA9PiBbIFwmY21kX3NldF90cmVlLAogCSAgICAgICAgICAgICAgICAiU2V0IGFuIFNWTiByZXBvc2l0b3J5IHRvIGEgZ2l0IHRyZWUtaXNoIiwKLQkJCXsgJ3N0ZGlufCcgPT4gXCRfc3RkaW4sICVjbXRfb3B0cywgJWZjX29wdHMsIH0gXSwKKwkJCXsgJ3N0ZGluJyA9PiBcJF9zdGRpbiwgJWNtdF9vcHRzLCAlZmNfb3B0cywgfSBdLAogCSdjcmVhdGUtaWdub3JlJyA9PiBbIFwmY21kX2NyZWF0ZV9pZ25vcmUsCiAJCQkgICAgICdDcmVhdGUgYSAuZ2l0aWdub3JlIHBlciBzdm46aWdub3JlJywKIAkJCSAgICAgeyAncmV2aXNpb258cj1pJyA9PiBcJF9yZXZpc2lvbgpAQCAtMjA0LDYgKzIxNiwxNCBAQAogCSdibGFtZScgPT4gWyBcJkdpdDo6U1ZOOjpMb2c6OmNtZF9ibGFtZSwKIAkgICAgICAgICAgICAiU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlIiwKIAkJICAgIHsgJ2dpdC1mb3JtYXQnID0+IFwkX2dpdF9mb3JtYXQgfSBdLAorCSdyZXNldCcgPT4gWyBcJmNtZF9yZXNldCwKKwkJICAgICAiVW5kbyBmZXRjaGVzIGJhY2sgdG8gdGhlIHNwZWNpZmllZCBTVk4gcmV2aXNpb24iLAorCQkgICAgIHsgJ3JldmlzaW9ufHI9cycgPT4gXCRfcmV2aXNpb24sCisJCSAgICAgICAncGFyZW50fHAnID0+IFwkX2ZldGNoX3BhcmVudCB9IF0sCisJJ2djJyA9PiBbIFwmY21kX2djLAorCQkgICJDb21wcmVzcyB1bmhhbmRsZWQubG9nIGZpbGVzIGluIC5naXQvc3ZuIGFuZCByZW1vdmUgIiAuCisJCSAgImluZGV4IGZpbGVzIGluIC5naXQvc3ZuIiwKKwkJe30gXSwKICk7CiAKIG15ICRjbWQ7CkBAIC0yMTIsNiArMjMyLDkgQEAKIAkJJGNtZCA9ICRBUkdWWyRpXTsKIAkJc3BsaWNlIEBBUkdWLCAkaSwgMTsKIAkJbGFzdDsKKwl9IGVsc2lmICgkQVJHVlskaV0gZXEgJ2hlbHAnKSB7CisJCSRjbWQgPSAkQVJHVlskaSsxXTsKKwkJdXNhZ2UoMCk7CiAJfQogfTsKIApAQCAtMjU4LDYgKzI4MSw5IEBACiB2ZXJzaW9uKCkgaWYgJF92ZXJzaW9uOwogdXNhZ2UoMSkgdW5sZXNzIGRlZmluZWQgJGNtZDsKIGxvYWRfYXV0aG9ycygpIGlmICRfYXV0aG9yczsKK2lmIChkZWZpbmVkICRfYXV0aG9yc19wcm9nKSB7CisJJF9hdXRob3JzX3Byb2cgPSAiJyIgLiBGaWxlOjpTcGVjLT5yZWwyYWJzKCRfYXV0aG9yc19wcm9nKSAuICInIjsKK30KIAogdW5sZXNzICgkY21kID1+IC9eKD86Y2xvbmV8aW5pdHxtdWx0aS1pbml0fGNvbW1pdC1kaWZmKSQvKSB7CiAJR2l0OjpTVk46Ok1pZ3JhdGlvbjo6bWlncmF0aW9uX2NoZWNrKCk7CkBAIC0zMjMsNiArMzQ5LDcgQEAKIAkJY29tbWFuZF9ub2lzeShAaW5pdF9kYik7CiAJCSRfcmVwb3NpdG9yeSA9IEdpdC0+cmVwb3NpdG9yeShSZXBvc2l0b3J5ID0+ICIuZ2l0Iik7CiAJfQorCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICdjb3JlLmF1dG9jcmxmJywgJ2ZhbHNlJyk7CiAJbXkgJHNldDsKIAlteSAkcGZ4ID0gInN2bi1yZW1vdGUuJEdpdDo6U1ZOOjpkZWZhdWx0X3JlcG9faWQiOwogCWZvcmVhY2ggbXkgJGkgKGtleXMgJWljdikgewpAQCAtMzMxLDYgKzM1OCw5IEBACiAJCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICIkcGZ4LiRpIiwgJGljdnskaX0pOwogCQkkc2V0ID0gJGk7CiAJfQorCW15ICRpZ25vcmVfcmVnZXggPSBcJFNWTjo6R2l0OjpGZXRjaGVyOjpfaWdub3JlX3JlZ2V4OworCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICIkcGZ4Lmlnbm9yZS1wYXRocyIsICQkaWdub3JlX3JlZ2V4KQorCQlpZiBkZWZpbmVkICQkaWdub3JlX3JlZ2V4OwogfQogCiBzdWIgaW5pdF9zdWJkaXIgewpAQCAtMzQ0LDcgKzM3NCw3IEBACiBzdWIgY21kX2Nsb25lIHsKIAlteSAoJHVybCwgJHBhdGgpID0gQF87CiAJaWYgKCFkZWZpbmVkICRwYXRoICYmCi0JICAgIChkZWZpbmVkICRfdHJ1bmsgfHwgZGVmaW5lZCAkX2JyYW5jaGVzIHx8IGRlZmluZWQgJF90YWdzIHx8CisJICAgIChkZWZpbmVkICRfdHJ1bmsgfHwgQF9icmFuY2hlcyB8fCBAX3RhZ3MgfHwKIAkgICAgIGRlZmluZWQgJF9zdGRsYXlvdXQpICYmCiAJICAgICR1cmwgIX4gbSNeW2EtelwrXSs6Ly8jKSB7CiAJCSRwYXRoID0gJHVybDsKQEAgLTM1MiwyMiArMzgyLDI4IEBACiAJJHBhdGggPSBiYXNlbmFtZSgkdXJsKSBpZiAhZGVmaW5lZCAkcGF0aCB8fCAhbGVuZ3RoICRwYXRoOwogCWNtZF9pbml0KCR1cmwsICRwYXRoKTsKIAlHaXQ6OlNWTjo6ZmV0Y2hfYWxsKCRHaXQ6OlNWTjo6ZGVmYXVsdF9yZXBvX2lkKTsKKwljb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICdzdm4uYXV0aG9yc2ZpbGUnLCAkX2F1dGhvcnMpIGlmICRfYXV0aG9yczsKIH0KIAogc3ViIGNtZF9pbml0IHsKIAlpZiAoZGVmaW5lZCAkX3N0ZGxheW91dCkgewogCQkkX3RydW5rID0gJ3RydW5rJyBpZiAoIWRlZmluZWQgJF90cnVuayk7Ci0JCSRfdGFncyA9ICd0YWdzJyBpZiAoIWRlZmluZWQgJF90YWdzKTsKLQkJJF9icmFuY2hlcyA9ICdicmFuY2hlcycgaWYgKCFkZWZpbmVkICRfYnJhbmNoZXMpOworCQlAX3RhZ3MgPSAndGFncycgaWYgKCEgQF90YWdzKTsKKwkJQF9icmFuY2hlcyA9ICdicmFuY2hlcycgaWYgKCEgQF9icmFuY2hlcyk7CiAJfQotCWlmIChkZWZpbmVkICRfdHJ1bmsgfHwgZGVmaW5lZCAkX2JyYW5jaGVzIHx8IGRlZmluZWQgJF90YWdzKSB7CisJaWYgKGRlZmluZWQgJF90cnVuayB8fCBAX2JyYW5jaGVzIHx8IEBfdGFncykgewogCQlyZXR1cm4gY21kX211bHRpX2luaXQoQF8pOwogCX0KIAlteSAkdXJsID0gc2hpZnQgb3IgZGllICJTVk4gcmVwb3NpdG9yeSBsb2NhdGlvbiByZXF1aXJlZCAiLAogCSAgICAgICAgICAgICAgICAgICAgICAgImFzIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50XG4iOworCSR1cmwgPSBjYW5vbmljYWxpemVfdXJsKCR1cmwpOwogCWluaXRfc3ViZGlyKEBfKTsKIAlkb19naXRfaW5pdF9kYigpOwogCisJaWYgKCRHaXQ6OlNWTjo6X21pbmltaXplX3VybCBlcSAndW5zZXQnKSB7CisJCSRHaXQ6OlNWTjo6X21pbmltaXplX3VybCA9IDA7CisJfQorCiAJR2l0OjpTVk4tPmluaXQoJHVybCk7CiB9CiAKQEAgLTM3OCwxMiArNDE0LDIxIEBACiAJfQogCW15ICgkcmVtb3RlKSA9IEBfOwogCWlmIChAXyA+IDEpIHsKLQkJZGllICJVc2FnZTogJDAgZmV0Y2ggWy0tYWxsXSBbc3ZuLXJlbW90ZV1cbiI7CisJCWRpZSAiVXNhZ2U6ICQwIGZldGNoIFstLWFsbF0gWy0tcGFyZW50XSBbc3ZuLXJlbW90ZV1cbiI7CiAJfQotCSRyZW1vdGUgfHw9ICRHaXQ6OlNWTjo6ZGVmYXVsdF9yZXBvX2lkOwotCWlmICgkX2ZldGNoX2FsbCkgeworCWlmICgkX2ZldGNoX3BhcmVudCkgeworCQlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcpOworCQl1bmxlc3MgKCRncykgeworCQkJZGllICJVbmFibGUgdG8gZGV0ZXJtaW5lIHVwc3RyZWFtIFNWTiBpbmZvcm1hdGlvbiBmcm9tICIsCisJCQkgICAgIndvcmtpbmcgdHJlZSBoaXN0b3J5XG4iOworCQl9CisJICAgICAgICAjIGp1c3QgZmV0Y2gsIGRvbid0IGNoZWNrb3V0LgorCQkkX25vX2NoZWNrb3V0ID0gJ3RydWUnOworCQkkX2ZldGNoX2FsbCA/ICRncy0+ZmV0Y2hfYWxsIDogJGdzLT5mZXRjaDsKKwl9IGVsc2lmICgkX2ZldGNoX2FsbCkgewogCQljbWRfbXVsdGlfZmV0Y2goKTsKIAl9IGVsc2UgeworCQkkcmVtb3RlIHx8PSAkR2l0OjpTVk46OmRlZmF1bHRfcmVwb19pZDsKIAkJR2l0OjpTVk46OmZldGNoX2FsbCgkcmVtb3RlLCBHaXQ6OlNWTjo6cmVhZF9hbGxfcmVtb3RlcygpKTsKIAl9CiB9CkBAIC00MzAsMTMgKzQ3NSwzNyBAQAogCQknQ2Fubm90IGRjb21taXQgd2l0aCBhIGRpcnR5IGluZGV4LiAgQ29tbWl0IHlvdXIgY2hhbmdlcyBmaXJzdCwgJwogCQkuICJvciBzdGFzaCB0aGVtIHdpdGggYGdpdCBzdGFzaCcuXG4iOwogCSRoZWFkIHx8PSAnSEVBRCc7CisKKwlteSAkb2xkX2hlYWQ7CisJaWYgKCRoZWFkIG5lICdIRUFEJykgeworCQkkb2xkX2hlYWQgPSBldmFsIHsKKwkJCWNvbW1hbmRfb25lbGluZShbcXcvc3ltYm9saWMtcmVmIC1xIEhFQUQvXSkKKwkJfTsKKwkJaWYgKCRvbGRfaGVhZCkgeworCQkJJG9sZF9oZWFkID1+IHN7XnJlZnMvaGVhZHMvfXt9OworCQl9IGVsc2UgeworCQkJJG9sZF9oZWFkID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZShxdy9yZXYtcGFyc2UgSEVBRC8pIH07CisJCX0KKwkJY29tbWFuZChbJ2NoZWNrb3V0JywgJGhlYWRdLCBTVERFUlIgPT4gMCk7CisJfQorCiAJbXkgQHJlZnM7Ci0JbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJGhlYWQsIFxAcmVmcyk7CisJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJ0hFQUQnLCBcQHJlZnMpOwogCXVubGVzcyAoJGdzKSB7CiAJCWRpZSAiVW5hYmxlIHRvIGRldGVybWluZSB1cHN0cmVhbSBTVk4gaW5mb3JtYXRpb24gZnJvbSAiLAogCQkgICAgIiRoZWFkIGhpc3RvcnkuXG5QZXJoYXBzIHRoZSByZXBvc2l0b3J5IGlzIGVtcHR5LiI7CiAJfQotCSR1cmwgPSBkZWZpbmVkICRfY29tbWl0X3VybCA/ICRfY29tbWl0X3VybCA6ICRncy0+ZnVsbF91cmw7CisKKwlpZiAoZGVmaW5lZCAkX2NvbW1pdF91cmwpIHsKKwkJJHVybCA9ICRfY29tbWl0X3VybDsKKwl9IGVsc2UgeworCQkkdXJsID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywKKwkJCSAgICAgICJzdm4tcmVtb3RlLiRncy0+e3JlcG9faWR9LmNvbW1pdHVybCIpIH07CisJCWlmICghJHVybCkgeworCQkJJHVybCA9ICRncy0+ZnVsbF91cmwKKwkJfQorCX0KKwogCW15ICRsYXN0X3JldiA9ICRfcmV2aXNpb24gaWYgZGVmaW5lZCAkX3JldmlzaW9uOwogCWlmICgkdXJsKSB7CiAJCXByaW50ICJDb21taXR0aW5nIHRvICR1cmwgLi4uXG4iOwpAQCAtNTA3LDcgKzU3Niw3IEBACiAJCQlpZiAoQGRpZmYpIHsKIAkJCQlAcmVmcyA9ICgpOwogCQkJCW15ICgkdXJsXywgJHJldl8sICR1dWlkXywgJGdzXykgPQotCQkJCSAgICAgICAgICAgICAgd29ya2luZ19oZWFkX2luZm8oJGhlYWQsIFxAcmVmcyk7CisJCQkJICAgICAgICAgICAgICB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcsIFxAcmVmcyk7CiAJCQkJbXkgKCRsaW5lYXJfcmVmc18sICRwYXJlbnRzXykgPQogCQkJCSAgICAgICAgICAgICAgbGluZWFyaXplX2hpc3RvcnkoJGdzXywgXEByZWZzKTsKIAkJCQlpZiAoc2NhbGFyKEAkbGluZWFyX3JlZnMpICE9CkBAIC01NDUsNiArNjE0LDIyIEBACiAJCQl9CiAJCX0KIAl9CisKKwlpZiAoJG9sZF9oZWFkKSB7CisJCW15ICRuZXdfaGVhZCA9IGNvbW1hbmRfb25lbGluZShxdy9yZXYtcGFyc2UgSEVBRC8pOworCQlteSAkbmV3X2lzX3N5bWJvbGljID0gZXZhbCB7CisJCQljb21tYW5kX29uZWxpbmUocXcvc3ltYm9saWMtcmVmIC1xIEhFQUQvKTsKKwkJfTsKKwkJaWYgKCRuZXdfaXNfc3ltYm9saWMpIHsKKwkJCXByaW50ICJkY29tbWl0dGVkIHRoZSBicmFuY2ggIiwgJGhlYWQsICJcbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiZGNvbW1pdHRlZCBvbiBhIGRldGFjaGVkIEhFQUQgYmVjYXVzZSB5b3UgZ2F2ZSAiLAorCQkJICAgICAgImEgcmV2aXNpb24gYXJndW1lbnQuXG4iLAorCQkJICAgICAgIlRoZSByZXdyaXR0ZW4gY29tbWl0IGlzOiAiLCAkbmV3X2hlYWQsICJcbiI7CisJCX0KKwkJY29tbWFuZChbJ2NoZWNrb3V0JywgJG9sZF9oZWFkXSwgU1RERVJSID0+IDApOworCX0KKwogCXVubGluayAkZ3MtPntpbmRleH07CiB9CiAKQEAgLTU1OSw3ICs2NDQsNDYgQEAKIAlteSAoJHNyYywgJHJldiwgdW5kZWYsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygkaGVhZCk7CiAKIAlteSAkcmVtb3RlID0gR2l0OjpTVk46OnJlYWRfYWxsX3JlbW90ZXMoKS0+eyRncy0+e3JlcG9faWR9fTsKLQlteSAkZ2xvYiA9ICRyZW1vdGUtPnsgJF90YWcgPyAndGFncycgOiAnYnJhbmNoZXMnIH07CisJbXkgJGFsbGdsb2JzID0gJHJlbW90ZS0+eyAkX3RhZyA/ICd0YWdzJyA6ICdicmFuY2hlcycgfTsKKwlteSAkZ2xvYjsKKwlpZiAoJCN7JGFsbGdsb2JzfSA9PSAwKSB7CisJCSRnbG9iID0gJGFsbGdsb2JzLT5bMF07CisJfSBlbHNlIHsKKwkJdW5sZXNzKGRlZmluZWQgJF9icmFuY2hfZGVzdCkgeworCQkJZGllICJNdWx0aXBsZSAiLAorCQkJICAgICRfdGFnID8gInRhZyIgOiAiYnJhbmNoIiwKKwkJCSAgICAiIHBhdGhzIGRlZmluZWQgZm9yIFN1YnZlcnNpb24gcmVwb3NpdG9yeS5cbiIsCisJCSAgICAgICAgICAgICJZb3UgbXVzdCBzcGVjaWZ5IHdoZXJlIHlvdSB3YW50IHRvIGNyZWF0ZSB0aGUgIiwKKwkJICAgICAgICAgICAgJF90YWcgPyAidGFnIiA6ICJicmFuY2giLAorCQkgICAgICAgICAgICAiIHdpdGggdGhlIC0tZGVzdGluYXRpb24gYXJndW1lbnQuXG4iOworCQl9CisJCWZvcmVhY2ggbXkgJGcgKEB7JGFsbGdsb2JzfSkgeworCQkJIyBTVk46OkdpdDo6RWRpdG9yIGNvdWxkIHByb2JhYmx5IGJlIG1vdmVkIHRvIEdpdC5wbS4uCisJCQlteSAkcmUgPSBTVk46OkdpdDo6RWRpdG9yOjpnbG9iMnBhdCgkZy0+e3BhdGh9LT57bGVmdH0pOworCQkJaWYgKCRfYnJhbmNoX2Rlc3QgPX4gLyRyZS8pIHsKKwkJCQkkZ2xvYiA9ICRnOworCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJdW5sZXNzIChkZWZpbmVkICRnbG9iKSB7CisJCQlteSAkZGVzdF9yZSA9IHFyL1xiXFEkX2JyYW5jaF9kZXN0XEVcYi87CisJCQlmb3JlYWNoIG15ICRnIChAeyRhbGxnbG9ic30pIHsKKwkJCQkkZy0+e3BhdGh9LT57bGVmdH0gPX4gLyRkZXN0X3JlLyBvciBuZXh0OworCQkJCWlmIChkZWZpbmVkICRnbG9iKSB7CisJCQkJCWRpZSAiQW1iaWd1b3VzIGRlc3RpbmF0aW9uOiAiLAorCQkJCQkgICAgJF9icmFuY2hfZGVzdCwgIlxubWF0Y2hlcyBib3RoICciLAorCQkJCQkgICAgJGdsb2ItPntwYXRofS0+e2xlZnR9LCAiJyBhbmQgJyIsCisJCQkJCSAgICAkZy0+e3BhdGh9LT57bGVmdH0sICInXG4iOworCQkJCX0KKwkJCQkkZ2xvYiA9ICRnOworCQkJfQorCQkJdW5sZXNzIChkZWZpbmVkICRnbG9iKSB7CisJCQkJZGllICJVbmtub3duICIsCisJCQkJICAgICRfdGFnID8gInRhZyIgOiAiYnJhbmNoIiwKKwkJCQkgICAgIiBkZXN0aW5hdGlvbiAkX2JyYW5jaF9kZXN0XG4iOworCQkJfQorCQl9CisJfQogCW15ICgkbGZ0LCAkcmd0KSA9IEB7ICRnbG9iLT57cGF0aH0gfXtxdy9sZWZ0IHJpZ2h0L307CiAJbXkgJGRzdCA9IGpvaW4gJy8nLCAkcmVtb3RlLT57dXJsfSwgJGxmdCwgJGJyYW5jaF9uYW1lLCAoJHJndCB8fCAoKSk7CiAKQEAgLTY2OCw3ICs3OTIsMTEgQEAKIAkkZ3MtPnByb3Bfd2FsaygkZ3MtPntwYXRofSwgJHIsIHN1YiB7CiAJCW15ICgkZ3MsICRwYXRoLCAkcHJvcHMpID0gQF87CiAJCSMgJHBhdGggaXMgb2YgdGhlIGZvcm0gL3BhdGgvdG8vZGlyLwotCQlteSAkaWdub3JlID0gJy4nIC4gJHBhdGggLiAnLmdpdGlnbm9yZSc7CisJCSRwYXRoID0gJy4nIC4gJHBhdGg7CisJCSMgU1ZOIGNhbiBoYXZlIGF0dHJpYnV0ZXMgb24gZW1wdHkgZGlyZWN0b3JpZXMsCisJCSMgd2hpY2ggZ2l0IHdvbid0IHRyYWNrCisJCW1rcGF0aChbJHBhdGhdKSB1bmxlc3MgLWQgJHBhdGg7CisJCW15ICRpZ25vcmUgPSAkcGF0aCAuICcuZ2l0aWdub3JlJzsKIAkJbXkgJHMgPSAkcHJvcHMtPnsnc3ZuOmlnbm9yZSd9IG9yIHJldHVybjsKIAkJb3BlbihHSVRJR05PUkUsICc+JywgJGlnbm9yZSkKIAkJICBvciBmYXRhbCgiRmFpbGVkIHRvIG9wZW4gYCRpZ25vcmUnIGZvciB3cml0aW5nOiAkISIpOwpAQCAtNzAzLDYgKzgzMSwxMiBAQAogCXJldHVybiAkcGF0aDsKIH0KIAorc3ViIGNhbm9uaWNhbGl6ZV91cmwgeworCW15ICgkdXJsKSA9IEBfOworCSR1cmwgPX4gcyNeKFteOl0rOi8vW14vXSovKSguKikkIyQxIC4gY2Fub25pY2FsaXplX3BhdGgoJDIpI2U7CisJcmV0dXJuICR1cmw7Cit9CisKICMgZ2V0X3N2bnByb3BzKFBBVEgpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLQogIyBIZWxwZXIgZm9yIGNtZF9wcm9wZ2V0IGFuZCBjbWRfcHJvcGxpc3QgYmVsb3cuCkBAIC03NjIsMTcgKzg5NiwxMyBAQAogCiBzdWIgY21kX211bHRpX2luaXQgewogCW15ICR1cmwgPSBzaGlmdDsKLQl1bmxlc3MgKGRlZmluZWQgJF90cnVuayB8fCBkZWZpbmVkICRfYnJhbmNoZXMgfHwgZGVmaW5lZCAkX3RhZ3MpIHsKKwl1bmxlc3MgKGRlZmluZWQgJF90cnVuayB8fCBAX2JyYW5jaGVzIHx8IEBfdGFncykgewogCQl1c2FnZSgxKTsKIAl9CiAKLQkjIHRoZXJlIGFyZSBjdXJyZW50bHkgc29tZSBidWdzIHRoYXQgcHJldmVudCBtdWx0aS1pbml0L211bHRpLWZldGNoCi0JIyBzZXR1cHMgZnJvbSB3b3JraW5nIHdlbGwgd2l0aG91dCB0aGlzLgotCSRHaXQ6OlNWTjo6X21pbmltaXplX3VybCA9IDE7Ci0KIAkkX3ByZWZpeCA9ICcnIHVubGVzcyBkZWZpbmVkICRfcHJlZml4OwogCWlmIChkZWZpbmVkICR1cmwpIHsKLQkJJHVybCA9fiBzIy8rJCMjOworCQkkdXJsID0gY2Fub25pY2FsaXplX3VybCgkdXJsKTsKIAkJaW5pdF9zdWJkaXIoQF8pOwogCX0KIAlkb19naXRfaW5pdF9kYigpOwpAQCAtNzg3LDEwICs5MTcsMTQgQEAKIAkJCQkJCSAgIHVuZGVmLCAkdHJ1bmtfcmVmKTsKIAkJfQogCX0KLQlyZXR1cm4gdW5sZXNzIGRlZmluZWQgJF9icmFuY2hlcyB8fCBkZWZpbmVkICRfdGFnczsKKwlyZXR1cm4gdW5sZXNzIEBfYnJhbmNoZXMgfHwgQF90YWdzOwogCW15ICRyYSA9ICR1cmwgPyBHaXQ6OlNWTjo6UmEtPm5ldygkdXJsKSA6IHVuZGVmOwotCWNvbXBsZXRlX3VybF9sc19pbml0KCRyYSwgJF9icmFuY2hlcywgJy0tYnJhbmNoZXMvLWInLCAkX3ByZWZpeCk7Ci0JY29tcGxldGVfdXJsX2xzX2luaXQoJHJhLCAkX3RhZ3MsICctLXRhZ3MvLXQnLCAkX3ByZWZpeCAuICd0YWdzLycpOworCWZvcmVhY2ggbXkgJHBhdGggKEBfYnJhbmNoZXMpIHsKKwkJY29tcGxldGVfdXJsX2xzX2luaXQoJHJhLCAkcGF0aCwgJy0tYnJhbmNoZXMvLWInLCAkX3ByZWZpeCk7CisJfQorCWZvcmVhY2ggbXkgJHBhdGggKEBfdGFncykgeworCQljb21wbGV0ZV91cmxfbHNfaW5pdCgkcmEsICRwYXRoLCAnLS10YWdzLy10JywgJF9wcmVmaXguJ3RhZ3MvJyk7CisJfQogfQogCiBzdWIgY21kX211bHRpX2ZldGNoIHsKQEAgLTkxMSw3ICsxMDQ1LDggQEAKIAlpZiAoJEApIHsKIAkJJHJlc3VsdCAuPSAiUmVwb3NpdG9yeSBSb290OiAob2ZmbGluZSlcbiI7CiAJfQotCSRyZXN1bHQgLj0gIlJlcG9zaXRvcnkgVVVJRDogJHV1aWRcbiIgdW5sZXNzICRkaWZmX3N0YXR1cyBlcSAiQSI7CisJJHJlc3VsdCAuPSAiUmVwb3NpdG9yeSBVVUlEOiAkdXVpZFxuIiB1bmxlc3MgJGRpZmZfc3RhdHVzIGVxICJBIiAmJgorCQkoJFNWTjo6Q29yZTo6VkVSU0lPTiBsZSAnMS41LjQnIHx8ICRmaWxlX3R5cGUgbmUgImRpciIpOwogCSRyZXN1bHQgLj0gIlJldmlzaW9uOiAiIC4gKCRkaWZmX3N0YXR1cyBlcSAiQSIgPyAwIDogJHJldikgLiAiXG4iOwogCiAJJHJlc3VsdCAuPSAiTm9kZSBLaW5kOiAiIC4KQEAgLTk4Miw2ICsxMTE3LDI4IEBACiAJcHJpbnQgJHJlc3VsdCwgIlxuIjsKIH0KIAorc3ViIGNtZF9yZXNldCB7CisJbXkgJHRhcmdldCA9IHNoaWZ0IHx8ICRfcmV2aXNpb24gb3IgZGllICJTVk4gcmV2aXNpb24gcmVxdWlyZWRcbiI7CisJJHRhcmdldCA9ICQxIGlmICR0YXJnZXQgPX4gL15yKFxkKykkLzsKKwkkdGFyZ2V0ID1+IC9eXGQrJC8gb3IgZGllICJOdW1lcmljIFNWTiByZXZpc2lvbiBleHBlY3RlZFxuIjsKKwlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcpOworCXVubGVzcyAoJGdzKSB7CisJCWRpZSAiVW5hYmxlIHRvIGRldGVybWluZSB1cHN0cmVhbSBTVk4gaW5mb3JtYXRpb24gZnJvbSAiLgorCQkgICAgImhpc3RvcnlcbiI7CisJfQorCW15ICgkciwgJGMpID0gJGdzLT5maW5kX3Jldl9iZWZvcmUoJHRhcmdldCwgbm90ICRfZmV0Y2hfcGFyZW50KTsKKwkkZ3MtPnJldl9tYXBfc2V0KCRyLCAkYywgJ3Jlc2V0JywgJHV1aWQpOworCXByaW50ICJyJHIgPSAkYyAoJGdzLT57cmVmX2lkfSlcbiI7Cit9CisKK3N1YiBjbWRfZ2MgeworCWlmICghJGNhbl9jb21wcmVzcykgeworCQl3YXJuICJDb21wcmVzczo6WmxpYiBjb3VsZCBub3QgYmUgZm91bmQ7IHVuaGFuZGxlZC5sb2cgIiAuCisJCSAgICAgImZpbGVzIHdpbGwgbm90IGJlIGNvbXByZXNzZWQuXG4iOworCX0KKwlmaW5kKHsgd2FudGVkID0+IFwmZ2NfZGlyZWN0b3J5LCBub19jaGRpciA9PiAxfSwgIiRFTlZ7R0lUX0RJUn0vc3ZuIik7Cit9CisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyB1dGlsaXR5IGZ1bmN0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIHN1YiByZWJhc2VfY21kIHsKQEAgLTEwNTEsNyArMTIwOCw3IEBACiAJCSAgICAid2FudGVkIHRvIHNldCB0bzogJGdzLT57dXJsfVxuIjsKIAl9CiAJY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAkaywgJGdzLT57dXJsfSkgdW5sZXNzICRvcmlnX3VybDsKLQlteSAkcmVtb3RlX3BhdGggPSAiJHJhLT57c3ZuX3BhdGh9LyRyZXBvX3BhdGgiOworCW15ICRyZW1vdGVfcGF0aCA9ICIkZ3MtPntwYXRofS8kcmVwb19wYXRoIjsKIAkkcmVtb3RlX3BhdGggPX4gcyMvKyMvI2c7CiAJJHJlbW90ZV9wYXRoID1+IHMjXi8jI2c7CiAJJHJlbW90ZV9wYXRoIC49ICIvKiIgaWYgJHJlbW90ZV9wYXRoICF+IC9cKi87CkBAIC0xMDYwLDYgKzEyMTcsNyBAQAogCQlkaWUgIi0tcHJlZml4PSckcGZ4JyBtdXN0IGhhdmUgYSB0cmFpbGluZyBzbGFzaCAnLydcbiI7CiAJfQogCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsCisJCSAgICAgICctLWFkZCcsCiAJICAgICAgICAgICAgICAic3ZuLXJlbW90ZS4kZ3MtPntyZXBvX2lkfS4kbiIsCiAJICAgICAgICAgICAgICAiJHJlbW90ZV9wYXRoOnJlZnMvcmVtb3Rlcy8kcGZ4KiIgLgogCSAgICAgICAgICAgICAgICAoJy8qJyB4ICgoJHJlbW90ZV9wYXRoID1+IHRyLyovKi8pIC0gMSkpICk7CkBAIC0xMTM5LDE2ICsxMjk3LDI3IEBACiAJfQogCXJlbmFtZSAkY29tbWl0X2VkaXRtc2csICRjb21taXRfbXNnIG9yIGNyb2FrICQhOwogCXsKKwkJcmVxdWlyZSBFbmNvZGU7CiAJCSMgU1ZOIHJlcXVpcmVzIG1lc3NhZ2VzIHRvIGJlIFVURi04IHdoZW4gZW50ZXJpbmcgdGhlIHJlcG8KIAkJbG9jYWwgJC87CiAJCW9wZW4gJGxvZ19maCwgJzwnLCAkY29tbWl0X21zZyBvciBjcm9hayAkITsKIAkJYmlubW9kZSAkbG9nX2ZoOwogCQljaG9tcCgkbG9nX2VudHJ5e2xvZ30gPSA8JGxvZ19maD4pOwogCi0JCWlmIChteSAkZW5jID0gR2l0Ojpjb25maWcoJ2kxOG4uY29tbWl0ZW5jb2RpbmcnKSkgewotCQkJcmVxdWlyZSBFbmNvZGU7Ci0JCQlFbmNvZGU6OmZyb21fdG8oJGxvZ19lbnRyeXtsb2d9LCAkZW5jLCAnVVRGLTgnKTsKKwkJbXkgJGVuYyA9IEdpdDo6Y29uZmlnKCdpMThuLmNvbW1pdGVuY29kaW5nJykgfHwgJ1VURi04JzsKKwkJbXkgJG1zZyA9ICRsb2dfZW50cnl7bG9nfTsKKworCQlldmFsIHsgJG1zZyA9IEVuY29kZTo6ZGVjb2RlKCRlbmMsICRtc2csIDEpIH07CisJCWlmICgkQCkgeworCQkJZGllICJDb3VsZCBub3QgZGVjb2RlIGFzICRlbmM6XG4iLCAkbXNnLAorCQkJICAgICJcblBlcmhhcHMgeW91IG5lZWQgdG8gc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmdcbiI7CiAJCX0KKworCQlldmFsIHsgJG1zZyA9IEVuY29kZTo6ZW5jb2RlKCdVVEYtOCcsICRtc2csIDEpIH07CisJCWRpZSAiQ291bGQgbm90IGVuY29kZSBhcyBVVEYtODpcbiRtc2dcbiIgaWYgJEA7CisKKwkJJGxvZ19lbnRyeXtsb2d9ID0gJG1zZzsKKwogCQljbG9zZSAkbG9nX2ZoIG9yIGNyb2FrICQhOwogCX0KIAl1bmxpbmsgJGNvbW1pdF9tc2c7CkBAIC0xMjIyLDExICsxMzkxLDExIEBACiBzdWIgZXh0cmFjdF9tZXRhZGF0YSB7CiAJbXkgJGlkID0gc2hpZnQgb3IgcmV0dXJuICh1bmRlZiwgdW5kZWYsIHVuZGVmKTsKIAlteSAoJHVybCwgJHJldiwgJHV1aWQpID0gKCRpZCA9fiAvXlxzKmdpdC1zdm4taWQ6XHMrKC4qKVxAKFxkKykKLQkJCQkJCQlccyhbYS1mXGRcLV0rKSQveCk7CisJCQkJCQkJXHMoW2EtZlxkXC1dKykkL2l4KTsKIAlpZiAoIWRlZmluZWQgJHJldiB8fCAhJHV1aWQgfHwgISR1cmwpIHsKIAkJIyBzb21lIG9mIHRoZSBvcmlnaW5hbCByZXBvc2l0b3JpZXMgSSBtYWRlIGhhZAogCQkjIGlkZW50aWZpZXJzIGxpa2UgdGhpczoKLQkJKCRyZXYsICR1dWlkKSA9ICgkaWQgPX4vXlxzKmdpdC1zdm4taWQ6XHMoXGQrKVxAKFthLWZcZFwtXSspLyk7CisJCSgkcmV2LCAkdXVpZCkgPSAoJGlkID1+L15ccypnaXQtc3ZuLWlkOlxzKFxkKylcQChbYS1mXGRcLV0rKS9pKTsKIAl9CiAJcmV0dXJuICgkdXJsLCAkcmV2LCAkdXVpZCk7CiB9CkBAIC0xMjM2LDYgKzE0MDUsNDAgQEAKIAkJY29tbWFuZChxdy9jYXQtZmlsZSBjb21taXQvLCBzaGlmdCkpKVstMV0pOwogfQogCitzdWIgY210X3NoYTJyZXZfYmF0Y2ggeworCW15ICVzMnI7CisJbXkgKCRwaWQsICRpbiwgJG91dCwgJGN0eCkgPSBjb21tYW5kX2JpZGlfcGlwZShxdy9jYXQtZmlsZSAtLWJhdGNoLyk7CisJbXkgJGxpc3QgPSBzaGlmdDsKKworCWZvcmVhY2ggbXkgJHNoYSAoQHskbGlzdH0pIHsKKwkJbXkgJGZpcnN0ID0gMTsKKwkJbXkgJHNpemUgPSAwOworCQlwcmludCAkb3V0ICRzaGEsICJcbiI7CisKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRpbj4pIHsKKwkJCWlmICgkZmlyc3QgJiYgJGxpbmUgPX4gL15bWzp4ZGlnaXQ6XV17NDB9XHNtaXNzaW5nJC8pIHsKKwkJCQlsYXN0OworCQkJfSBlbHNpZiAoJGZpcnN0ICYmCisJCQkgICAgICAgJGxpbmUgPX4gL15bWzp4ZGlnaXQ6XV17NDB9XHNjb21taXRccyhcZCspJC8pIHsKKwkJCQkkZmlyc3QgPSAwOworCQkJCSRzaXplID0gJDE7CisJCQkJbmV4dDsKKwkJCX0gZWxzaWYgKCRsaW5lID1+IC9eKGdpdC1zdm4taWQ6ICkvKSB7CisJCQkJbXkgKHVuZGVmLCAkcmV2LCB1bmRlZikgPQorCQkJCSAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0X21ldGFkYXRhKCRsaW5lKTsKKwkJCQkkczJyeyRzaGF9ID0gJHJldjsKKwkJCX0KKworCQkJJHNpemUgLT0gbGVuZ3RoKCRsaW5lKTsKKwkJCWxhc3QgaWYgKCRzaXplID09IDApOworCQl9CisJfQorCisJY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUoJHBpZCwgJGluLCAkb3V0LCAkY3R4KTsKKworCXJldHVybiBcJXMycjsKK30KKwogc3ViIHdvcmtpbmdfaGVhZF9pbmZvIHsKIAlteSAoJGhlYWQsICRyZWZzKSA9IEBfOwogCW15IEBhcmdzID0gKCdsb2cnLCAnLS1uby1jb2xvcicsICctLWZpcnN0LXBhcmVudCcsICctLXByZXR0eT1tZWRpdW0nKTsKQEAgLTEzNTYsNiArMTU1OSwyNSBAQAogCXJldHVybiAkbWQ1LT5oZXhkaWdlc3QoKTsKIH0KIAorc3ViIGdjX2RpcmVjdG9yeSB7CisJaWYgKCRjYW5fY29tcHJlc3MgJiYgLWYgJF8gJiYgYmFzZW5hbWUoJF8pIGVxICJ1bmhhbmRsZWQubG9nIikgeworCQlteSAkb3V0X2ZpbGVuYW1lID0gJF8gLiAiLmd6IjsKKwkJb3BlbiBteSAkaW5fZmgsICI8IiwgJF8gb3IgZGllICJVbmFibGUgdG8gb3BlbiAkXzogJCFcbiI7CisJCWJpbm1vZGUgJGluX2ZoOworCQlteSAkZ3ogPSBDb21wcmVzczo6WmxpYjo6Z3pvcGVuKCRvdXRfZmlsZW5hbWUsICJhYiIpIG9yCisJCQkJZGllICJVbmFibGUgdG8gb3BlbiAkb3V0X2ZpbGVuYW1lOiAkIVxuIjsKKworCQlteSAkcmVzOworCQl3aGlsZSAoJHJlcyA9IHN5c3JlYWQoJGluX2ZoLCBteSAkc3RyLCAxMDI0KSkgeworCQkJJGd6LT5nendyaXRlKCRzdHIpIG9yCisJCQkJZGllICJVbmFibGUgdG8gd3JpdGU6ICIuJGd6LT5nemVycm9yKCkuIiFcbiI7CisJCX0KKwkJdW5saW5rICRfIG9yIGRpZSAidW5saW5rICRGaWxlOjpGaW5kOjpuYW1lOiAkIVxuIjsKKwl9IGVsc2lmICgtZiAkXyAmJiBiYXNlbmFtZSgkXykgZXEgImluZGV4IikgeworCQl1bmxpbmsgJF8gb3IgZGllICJ1bmxpbmsgJF86ICQhXG4iOworCX0KK30KKwogcGFja2FnZSBHaXQ6OlNWTjsKIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3M7CkBAIC0xMzY0LDcgKzE1ODYsNyBAQAogdXNlIHZhcnMgcXcvJGRlZmF1bHRfcmVwb19pZCAkZGVmYXVsdF9yZWZfaWQgJF9ub19tZXRhZGF0YSAkX2ZvbGxvd19wYXJlbnQKICAgICAgICAgICAgICRfcmVwYWNrICRfcmVwYWNrX2ZsYWdzICRfdXNlX3N2bV9wcm9wcyAkX2hlYWQKICAgICAgICAgICAgICRfdXNlX3N2bnN5bmNfcHJvcHMgJG5vX3JldXNlX2V4aXN0aW5nICRfbWluaW1pemVfdXJsCi0JICAgICRfdXNlX2xvZ19hdXRob3IgJF9hZGRfYXV0aG9yX2Zyb20vOworCSAgICAkX3VzZV9sb2dfYXV0aG9yICRfYWRkX2F1dGhvcl9mcm9tICRfbG9jYWx0aW1lLzsKIHVzZSBDYXJwIHF3L2Nyb2FrLzsKIHVzZSBGaWxlOjpQYXRoIHF3L21rcGF0aC87CiB1c2UgRmlsZTo6Q29weSBxdy9jb3B5LzsKQEAgLTE0NzYsMTIgKzE2OTgsMTQgQEAKIAlteSAkcmEgPSBHaXQ6OlNWTjo6UmEtPm5ldygkdXJsKTsKIAlteSAkdXVpZCA9ICRyYS0+Z2V0X3V1aWQ7CiAJbXkgJGhlYWQgPSAkcmEtPmdldF9sYXRlc3RfcmV2bnVtOworCSRyYS0+Z2V0X2xvZygiIiwgJGhlYWQsIDAsIDEsIDAsIDEsIHN1YiB7ICRoZWFkID0gJF9bMV0gfSk7CiAJbXkgJGJhc2UgPSBkZWZpbmVkICRmZXRjaCA/ICRoZWFkIDogMDsKIAogCSMgcmVhZCB0aGUgbWF4IHJldnMgZm9yIHdpbGRjYXJkIGV4cGFuc2lvbiAoYnJhbmNoZXMvKiwgdGFncy8qKQogCWZvcmVhY2ggbXkgJHQgKHF3L2JyYW5jaGVzIHRhZ3MvKSB7CiAJCWRlZmluZWQgJHJlbW90ZS0+eyR0fSBvciBuZXh0OwotCQlwdXNoIEBnbG9icywgJHJlbW90ZS0+eyR0fTsKKwkJcHVzaCBAZ2xvYnMsIEB7JHJlbW90ZS0+eyR0fX07CisKIAkJbXkgJG1heF9yZXYgPSBldmFsIHsgdG1wX2NvbmZpZyhxdy8tLWludCAtLWdldC8sCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAic3ZuLXJlbW90ZS4kcmVwb19pZC4ke3R9LW1heFJldiIpIH07CiAJCWlmIChkZWZpbmVkICRtYXhfcmV2ICYmICgkbWF4X3JldiA8ICRiYXNlKSkgewpAQCAtMTUyOCwxNSArMTc1MiwxNiBAQAogCQl9IGVsc2lmIChtIV4oLispXC4oYnJhbmNoZXN8dGFncyk9CiAJCSAgICAgICAgICAgKC4qKTpyZWZzL3JlbW90ZXMvKC4rKVxzKiQvIXgpIHsKIAkJCW15ICgkcCwgJGcpID0gKCQzLCAkNCk7Ci0JCQlteSAkcnMgPSAkci0+eyQxfS0+eyQyfSA9IHsKLQkJCSAgICAgICAgICAgICAgICAgIHQgPT4gJDIsCi0JCQkJCSAgcmVtb3RlID0+ICQxLAotCQkJICAgICAgICAgICAgICAgICAgcGF0aCA9PiBHaXQ6OlNWTjo6R2xvYlNwZWMtPm5ldygkcCksCi0JCQkgICAgICAgICAgICAgICAgICByZWYgPT4gR2l0OjpTVk46Okdsb2JTcGVjLT5uZXcoJGcpIH07CisJCQlteSAkcnMgPSB7CisJCQkgICAgdCA9PiAkMiwKKwkJCSAgICByZW1vdGUgPT4gJDEsCisJCQkgICAgcGF0aCA9PiBHaXQ6OlNWTjo6R2xvYlNwZWMtPm5ldygkcCksCisJCQkgICAgcmVmID0+IEdpdDo6U1ZOOjpHbG9iU3BlYy0+bmV3KCRnKSB9OwogCQkJaWYgKGxlbmd0aCgkcnMtPntyZWZ9LT57cmlnaHR9KSAhPSAwKSB7CiAJCQkJZGllICJUaGUgJyonIGdsb2IgY2hhcmFjdGVyIG11c3QgYmUgdGhlIGxhc3QgIiwKIAkJCQkgICAgImNoYXJhY3RlciBvZiAnJGcnXG4iOwogCQkJfQorCQkJcHVzaCBAeyAkci0+eyQxfS0+eyQyfSB9LCAkcnM7CiAJCX0KIAl9CiAKQEAgLTE2NzYsOSArMTkwMSwxMCBAQAogCQluZXh0IGlmIGRlZmluZWQgJHJlcG9zX3Jvb3QgJiYgJHJlcG9zX3Jvb3QgbmUgJHU7CiAKIAkJbXkgJGZldGNoID0gJHJlbW90ZXMtPnskcmVwb19pZH0tPntmZXRjaH0gfHwge307Ci0JCWZvcmVhY2ggKHF3L2JyYW5jaGVzIHRhZ3MvKSB7Ci0JCQlyZXNvbHZlX2xvY2FsX2dsb2JzKCR1LCAkZmV0Y2gsCi0JCQkgICAgICAgICAgICAgICAgICAgICRyZW1vdGVzLT57JHJlcG9faWR9LT57JF99KTsKKwkJZm9yZWFjaCBteSAkdCAocXcvYnJhbmNoZXMgdGFncy8pIHsKKwkJCWZvcmVhY2ggbXkgJGdsb2JzcGVjIChAeyRyZW1vdGVzLT57JHJlcG9faWR9LT57JHR9fSkgeworCQkJCXJlc29sdmVfbG9jYWxfZ2xvYnMoJHUsICRmZXRjaCwgJGdsb2JzcGVjKTsKKwkJCX0KIAkJfQogCQlteSAkcCA9ICRwYXRoOwogCQlteSAkcndyID0gcmV3cml0ZV9yb290KHtyZXBvX2lkID0+ICRyZXBvX2lkfSk7CkBAIC0xNjkwLDYgKzE5MTYsNyBAQAogCQkJbXkgJHByZWZpeCA9ICcnOwogCQkJaWYgKCRyd3IpIHsKIAkJCQkkeiA9ICRyd3I7CisJCQkJcmVtb3ZlX3VzZXJuYW1lKCR6KTsKIAkJCX0gZWxzaWYgKGRlZmluZWQgJHN2bSkgewogCQkJCSR6ID0gJHN2bS0+e3NvdXJjZX07CiAJCQkJJHByZWZpeCA9ICRzdm0tPntyZXBsYWNlfTsKQEAgLTE4MzUsNyArMjA2Miw3IEBACiAKIAkJY2hvbXAoJHNyYywgJHV1aWQpOwogCi0JCSR1dWlkID1+IG17XlswLTlhLWZcLV17MzAsfSR9CisJCSR1dWlkID1+IG17XlswLTlhLWZcLV17MzAsfSR9aQogCQkgICAgb3IgZGllICJkb2Vzbid0IGxvb2sgcmlnaHQgLSBzdm06dXVpZCBpcyAnJHV1aWQnXG4iOwogCiAJCSMgdGhlICchJyBpcyB1c2VkIHRvIG1hcmsgdGhlIHJlcG9zX3Jvb3QhL3JlbGF0aXZlL3BhdGgKQEAgLTE5MjEsNyArMjE0OCw3IEBACiAJCSAgIGRpZSAiZG9lc24ndCBsb29rIHJpZ2h0IC0gc3ZuOnN5bmMtZnJvbS11cmwgaXMgJyR1cmwnXG4iOwogCiAJCW15ICR1dWlkID0gdG1wX2NvbmZpZygnLS1nZXQnLCAiJHNlY3Rpb24uc3Zuc3luYy11dWlkIik7Ci0JCSgkdXVpZCkgPSAoJHV1aWQgPX4gbXteKFswLTlhLWZcLV17MzAsfSkkfSkgb3IKKwkJKCR1dWlkKSA9ICgkdXVpZCA9fiBte14oWzAtOWEtZlwtXXszMCx9KSR9aSkgb3IKIAkJICAgZGllICJkb2Vzbid0IGxvb2sgcmlnaHQgLSBzdm46c3luYy1mcm9tLXV1aWQgaXMgJyR1dWlkJ1xuIjsKIAogCQkkc3Zuc3luYyA9IHsgdXJsID0+ICR1cmwsIHV1aWQgPT4gJHV1aWQgfQpAQCAtMTkzOSw3ICsyMTY2LDcgQEAKIAkgICAgICAgICAgIGRpZSAiZG9lc24ndCBsb29rIHJpZ2h0IC0gc3ZuOnN5bmMtZnJvbS11cmwgaXMgJyR1cmwnXG4iOwogCiAJbXkgJHV1aWQgPSAkcnAtPnsnc3ZuOnN5bmMtZnJvbS11dWlkJ30gb3IgZGllICRlcnIgLiAidXVpZFxuIjsKLQkoJHV1aWQpID0gKCR1dWlkID1+IG17XihbMC05YS1mXC1dezMwLH0pJH0pIG9yCisJKCR1dWlkKSA9ICgkdXVpZCA9fiBte14oWzAtOWEtZlwtXXszMCx9KSR9aSkgb3IKIAkgICAgICAgICAgIGRpZSAiZG9lc24ndCBsb29rIHJpZ2h0IC0gc3ZuOnN5bmMtZnJvbS11dWlkIGlzICckdXVpZCdcbiI7CiAKIAlteSAkc2VjdGlvbiA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0iOwpAQCAtMTk1NSw3ICsyMTgyLDcgQEAKIAl1bmxlc3MgKCRzZWxmLT57cmFfdXVpZH0pIHsKIAkJbXkgJGtleSA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0udXVpZCI7CiAJCW15ICR1dWlkID0gZXZhbCB7IHRtcF9jb25maWcoJy0tZ2V0JywgJGtleSkgfTsKLQkJaWYgKCEkQCAmJiAkdXVpZCAmJiAkdXVpZCA9fiAvXihbYS1mXGRcLV17MzAsfSkkLykgeworCQlpZiAoISRAICYmICR1dWlkICYmICR1dWlkID1+IC9eKFthLWZcZFwtXXszMCx9KSQvaSkgewogCQkJJHNlbGYtPntyYV91dWlkfSA9ICR1dWlkOwogCQl9IGVsc2UgewogCQkJZGllICJyYV91dWlkIGNhbGxlZCB3aXRob3V0IFVSTFxuIiB1bmxlc3MgJHNlbGYtPnt1cmx9OwpAQCAtMTk5OCwxNiArMjIyNSw2IEBACiAJJHJhOwogfQogCi1zdWIgcmVsX3BhdGggewotCW15ICgkc2VsZikgPSBAXzsKLQlteSAkcmVwb3Nfcm9vdCA9ICRzZWxmLT5yYS0+e3JlcG9zX3Jvb3R9OwotCXJldHVybiAkc2VsZi0+e3BhdGh9IGlmICgkc2VsZi0+e3VybH0gZXEgJHJlcG9zX3Jvb3QpOwotCW15ICR1cmwgPSAkc2VsZi0+e3VybH0gLgotCSAgICAgICAgICAobGVuZ3RoICRzZWxmLT57cGF0aH0gPyAiLyRzZWxmLT57cGF0aH0iIDogJHNlbGYtPntwYXRofSk7Ci0JJHVybCA9fiBzIV5cUSRyZXBvc19yb290XEUoPzovK3wkKSEhZzsKLQkkdXJsOwotfQotCiAjIHByb3Bfd2FsayhQQVRILCBSRVYsIFNVQikKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBSZWN1cnNpdmVseSB0cmF2ZXJzZSBQQVRIIGF0IHJldmlzaW9uIFJFViBhbmQgaW52b2tlIFNVQiBmb3IgZWFjaApAQCAtMjMxMywxMyArMjUzMCwxMyBAQAogCiAJJHNlbGYtPntsYXN0X3Jldn0gPSAkbG9nX2VudHJ5LT57cmV2aXNpb259OwogCSRzZWxmLT57bGFzdF9jb21taXR9ID0gJGNvbW1pdDsKLQlwcmludCAiciRsb2dfZW50cnktPntyZXZpc2lvbn0iOworCXByaW50ICJyJGxvZ19lbnRyeS0+e3JldmlzaW9ufSIgdW5sZXNzICQ6Ol9xID4gMTsKIAlpZiAoZGVmaW5lZCAkbG9nX2VudHJ5LT57c3ZtX3JldmlzaW9ufSkgewotCQkgcHJpbnQgIiAoXEAkbG9nX2VudHJ5LT57c3ZtX3JldmlzaW9ufSkiOworCQkgcHJpbnQgIiAoXEAkbG9nX2VudHJ5LT57c3ZtX3JldmlzaW9ufSkiIHVubGVzcyAkOjpfcSA+IDE7CiAJCSAkc2VsZi0+cmV2X21hcF9zZXQoJGxvZ19lbnRyeS0+e3N2bV9yZXZpc2lvbn0sICRjb21taXQsCiAJCSAgICAgICAgICAgICAgICAgICAwLCAkc2VsZi0+c3ZtX3V1aWQpOwogCX0KLQlwcmludCAiID0gJGNvbW1pdCAoJHNlbGYtPntyZWZfaWR9KVxuIjsKKwlwcmludCAiID0gJGNvbW1pdCAoJHNlbGYtPntyZWZfaWR9KVxuIiB1bmxlc3MgJDo6X3EgPiAxOwogCWlmICgtLSRfZ2NfbnIgPT0gMCkgewogCQkkX2djX25yID0gJF9nY19wZXJpb2Q7CiAJCWdjKCk7CkBAIC0yMzU2LDE1ICsyNTczLDE0IEBACiAJdW5sZXNzIChkZWZpbmVkICRwYXRocykgewogCQlteSAkZXJyX2hhbmRsZXIgPSAkU1ZOOjpFcnJvcjo6aGFuZGxlcjsKIAkJJFNWTjo6RXJyb3I6OmhhbmRsZXIgPSBcJkdpdDo6U1ZOOjpSYTo6c2tpcF91bmtub3duX3JldnM7Ci0JCSRzZWxmLT5yYS0+Z2V0X2xvZyhbJHNlbGYtPntwYXRofV0sICRyZXYsICRyZXYsIDAsIDEsIDEsIHN1YiB7Ci0JCSAgICAgICAgICAgICAgICAgICAkcGF0aHMgPQotCQkJCSAgICAgIEdpdDo6U1ZOOjpSYTo6ZHVwX2NoYW5nZWRfcGF0aHMoJF9bMF0pIH0pOworCQkkc2VsZi0+cmEtPmdldF9sb2coWyRzZWxmLT57cGF0aH1dLCAkcmV2LCAkcmV2LCAwLCAxLCAxLAorCQkJCSAgIHN1YiB7ICRwYXRocyA9ICRfWzBdIH0pOwogCQkkU1ZOOjpFcnJvcjo6aGFuZGxlciA9ICRlcnJfaGFuZGxlcjsKIAl9CiAJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRwYXRoczsKIAogCSMgbG9vayBmb3IgYSBwYXJlbnQgZnJvbSBhbm90aGVyIGJyYW5jaDoKLQlteSBAYl9wYXRoX2NvbXBvbmVudHMgPSBzcGxpdCBtIy8jLCAkc2VsZi0+cmVsX3BhdGg7CisJbXkgQGJfcGF0aF9jb21wb25lbnRzID0gc3BsaXQgbSMvIywgJHNlbGYtPntwYXRofTsKIAlteSBAYV9wYXRoX2NvbXBvbmVudHM7CiAJbXkgJGk7CiAJd2hpbGUgKEBiX3BhdGhfY29tcG9uZW50cykgewpAQCAtMjM4MiwyNiArMjU5OCwxMiBAQAogCW15ICRyID0gJGktPntjb3B5ZnJvbV9yZXZ9OwogCW15ICRyZXBvc19yb290ID0gJHNlbGYtPnJhLT57cmVwb3Nfcm9vdH07CiAJbXkgJHVybCA9ICRzZWxmLT5yYS0+e3VybH07Ci0JbXkgJG5ld191cmwgPSAkcmVwb3Nfcm9vdCAuICRicmFuY2hfZnJvbTsKKwlteSAkbmV3X3VybCA9ICR1cmwgLiAkYnJhbmNoX2Zyb207CiAJcHJpbnQgU1RERVJSICAiRm91bmQgcG9zc2libGUgYnJhbmNoIHBvaW50OiAiLAogCSAgICAgICAgICAgICAgIiRuZXdfdXJsID0+ICIsICRzZWxmLT5mdWxsX3VybCwgIiwgJHJcbiI7CiAJJGJyYW5jaF9mcm9tID1+IHMjXi8jIzsKLQlteSAkZ3MgPSBHaXQ6OlNWTi0+ZmluZF9ieV91cmwoJG5ld191cmwsICRyZXBvc19yb290LCAkYnJhbmNoX2Zyb20pOwotCXVubGVzcyAoJGdzKSB7Ci0JCW15ICRyZWZfaWQgPSAkc2VsZi0+e3JlZl9pZH07Ci0JCSRyZWZfaWQgPX4gcy9cQFxkKyQvLzsKLQkJJHJlZl9pZCAuPSAiXEAkciI7Ci0JCSMganVzdCBncm93IGEgdGFpbCBpZiB3ZSdyZSBub3QgdW5pcXVlIGVub3VnaCA6eAotCQkkcmVmX2lkIC49ICctJyB3aGlsZSBmaW5kX3JlZigkcmVmX2lkKTsKLQkJcHJpbnQgU1RERVJSICJJbml0aWFsaXppbmcgcGFyZW50OiAkcmVmX2lkXG4iOwotCQlteSAoJHUsICRwLCAkcmVwb19pZCkgPSAoJG5ld191cmwsICcnLCAkcmVmX2lkKTsKLQkJaWYgKCR1ID1+IHMjXlxRJHVybFxFKC98JCkjIykgewotCQkJJHAgPSAkdTsKLQkJCSR1ID0gJHVybDsKLQkJCSRyZXBvX2lkID0gJHNlbGYtPntyZXBvX2lkfTsKLQkJfQotCQkkZ3MgPSBHaXQ6OlNWTi0+aW5pdCgkdSwgJHAsICRyZXBvX2lkLCAkcmVmX2lkLCAxKTsKLQl9CisJbXkgJGdzID0gJHNlbGYtPm90aGVyX2dzKCRuZXdfdXJsLCAkdXJsLAorCQkgICAgICAgICAgICAgICAgICRicmFuY2hfZnJvbSwgJHIsICRzZWxmLT57cmVmX2lkfSk7CiAJbXkgKCRyMCwgJHBhcmVudCkgPSAkZ3MtPmZpbmRfcmV2X2JlZm9yZSgkciwgMSk7CiAJewogCQlteSAoJGJhc2UsICRoZWFkKTsKQEAgLTI0MjcsOCArMjYyOSw5IEBACiAJCQkjIGRvX3N3aXRjaCB3b3JrcyB3aXRoIHN2bi90cnVuayA+PSByMjIzMTIsIGJ1dCB0aGF0CiAJCQkjIGlzIG5vdCBpbmNsdWRlZCB3aXRoIFNWTiAxLjQuMyAodGhlIGxhdGVzdCB2ZXJzaW9uCiAJCQkjIGF0IHRoZSBtb21lbnQpLCBzbyB3ZSBjYW4ndCByZWx5IG9uIGl0CisJCQkkc2VsZi0+e2xhc3RfcmV2fSA9ICRyMDsKIAkJCSRzZWxmLT57bGFzdF9jb21taXR9ID0gJHBhcmVudDsKLQkJCSRlZCA9IFNWTjo6R2l0OjpGZXRjaGVyLT5uZXcoJHNlbGYpOworCQkJJGVkID0gU1ZOOjpHaXQ6OkZldGNoZXItPm5ldygkc2VsZiwgJGdzLT57cGF0aH0pOwogCQkJJGdzLT5yYS0+Z3NfZG9fc3dpdGNoKCRyMCwgJHJldiwgJGdzLAogCQkJCQkgICAgICAkc2VsZi0+ZnVsbF91cmwsICRlZCkKIAkJCSAgb3IgZGllICJTVk4gY29ubmVjdGlvbiBmYWlsZWQgc29tZXdoZXJlLi4uXG4iOwpAQCAtMjUyNiwyMCArMjcyOSwxMTIgQEAKIAlcQG91dDsKIH0KIAorIyBwYXJzZV9zdm5fZGF0ZShEQVRFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHaXZlbiBhIGRhdGUgKGluIFVUQykgZnJvbSBTdWJ2ZXJzaW9uLCByZXR1cm4gYSBzdHJpbmcgaW4gdGhlIGZvcm1hdAorIyAiPFRaIE9mZnNldD4gPGxvY2FsIGRhdGUvdGltZT4iIHRoYXQgR2l0IHdpbGwgdXNlLgorIworIyBCeSBkZWZhdWx0IHRoZSBwYXJzZWQgZGF0ZSB3aWxsIGJlIGluIFVUQzsgaWYgJEdpdDo6U1ZOOjpfbG9jYWx0aW1lCisjIGlzIHRydWUgd2UnbGwgY29udmVydCBpdCB0byB0aGUgbG9jYWwgdGltZXpvbmUgaW5zdGVhZC4KIHN1YiBwYXJzZV9zdm5fZGF0ZSB7CiAJbXkgJGRhdGUgPSBzaGlmdCB8fCByZXR1cm4gJyswMDAwIDE5NzAtMDEtMDEgMDA6MDA6MDAnOwogCW15ICgkWSwkbSwkZCwkSCwkTSwkUykgPSAoJGRhdGUgPX4gL14oXGR7NH0pXC0oXGRcZClcLShcZFxkKVQKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXGRcZClcOihcZFxkKVw6KFxkXGQpLlxkK1okL3gpIG9yCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxkXGQpXDooXGRcZClcOihcZFxkKVwuXGQqWiQveCkgb3IKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9hayAiVW5hYmxlIHRvIHBhcnNlIGRhdGU6ICRkYXRlXG4iOwotCSIrMDAwMCAkWS0kbS0kZCAkSDokTTokUyI7CisJbXkgJHBhcnNlZF9kYXRlOyAgICAjIFNldCBuZXh0LgorCisJaWYgKCRHaXQ6OlNWTjo6X2xvY2FsdGltZSkgeworCQkjIFRyYW5zbGF0ZSB0aGUgU3VidmVyc2lvbiBkYXRldGltZSB0byBhbiBlcG9jaCB0aW1lLgorCQkjIEJlZ2luIGJ5IHN3aXRjaGluZyBvdXJzZWx2ZXMgdG8gJGRhdGUncyB0aW1lem9uZSwgVVRDLgorCQlteSAkb2xkX2Vudl9UWiA9ICRFTlZ7VFp9OworCQkkRU5We1RafSA9ICdVVEMnOworCisJCW15ICRlcG9jaF9pbl9VVEMgPQorCQkgICAgUE9TSVg6OnN0cmZ0aW1lKCclcycsICRTLCAkTSwgJEgsICRkLCAkbSAtIDEsICRZIC0gMTkwMCk7CisKKwkJIyBEZXRlcm1pbmUgb3VyIGxvY2FsIHRpbWV6b25lIChpbmNsdWRpbmcgRFNUKSBhdCB0aGUKKwkJIyB0aW1lIG9mICRlcG9jaF9pbl9VVEMuICAkR2l0OjpTVk46OkxvZzo6VFogc3RvcmVkIHRoZQorCQkjIHZhbHVlIG9mIFRaLCBpZiBhbnksIGF0IHRoZSB0aW1lIHdlIHdlcmUgcnVuLgorCQlpZiAoZGVmaW5lZCAkR2l0OjpTVk46OkxvZzo6VFopIHsKKwkJCSRFTlZ7VFp9ID0gJEdpdDo6U1ZOOjpMb2c6OlRaOworCQl9IGVsc2UgeworCQkJZGVsZXRlICRFTlZ7VFp9OworCQl9CisKKwkJbXkgJG91cl9UWiA9CisJCSAgICBQT1NJWDo6c3RyZnRpbWUoJyVaJywgJFMsICRNLCAkSCwgJGQsICRtIC0gMSwgJFkgLSAxOTAwKTsKKworCQkjIFRoaXMgY29udmVydHMgJGVwb2NoX2luX1VUQyBpbnRvIG91ciBsb2NhbCB0aW1lem9uZS4KKwkJbXkgKCRzZWMsICRtaW4sICRob3VyLCAkbWRheSwgJG1vbiwgJHllYXIsCisJCSAgICAkd2RheSwgJHlkYXksICRpc2RzdCkgPSBsb2NhbHRpbWUoJGVwb2NoX2luX1VUQyk7CisKKwkJJHBhcnNlZF9kYXRlID0gc3ByaW50ZignJXMgJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQnLAorCQkJCSAgICAgICAkb3VyX1RaLCAkeWVhciArIDE5MDAsICRtb24gKyAxLAorCQkJCSAgICAgICAkbWRheSwgJGhvdXIsICRtaW4sICRzZWMpOworCisJCSMgUmVzZXQgdXMgdG8gdGhlIHRpbWV6b25lIGluIGVmZmVjdCB3aGVuIHdlIGVudGVyZWQKKwkJIyB0aGlzIHJvdXRpbmUuCisJCWlmIChkZWZpbmVkICRvbGRfZW52X1RaKSB7CisJCQkkRU5We1RafSA9ICRvbGRfZW52X1RaOworCQl9IGVsc2UgeworCQkJZGVsZXRlICRFTlZ7VFp9OworCQl9CisJfSBlbHNlIHsKKwkJJHBhcnNlZF9kYXRlID0gIiswMDAwICRZLSRtLSRkICRIOiRNOiRTIjsKKwl9CisKKwlyZXR1cm4gJHBhcnNlZF9kYXRlOworfQorCitzdWIgb3RoZXJfZ3MgeworCW15ICgkc2VsZiwgJG5ld191cmwsICR1cmwsCisJICAgICRicmFuY2hfZnJvbSwgJHIsICRvbGRfcmVmX2lkKSA9IEBfOworCW15ICRncyA9IEdpdDo6U1ZOLT5maW5kX2J5X3VybCgkbmV3X3VybCwgJHVybCwgJGJyYW5jaF9mcm9tKTsKKwl1bmxlc3MgKCRncykgeworCQlteSAkcmVmX2lkID0gJG9sZF9yZWZfaWQ7CisJCSRyZWZfaWQgPX4gcy9cQFxkKyQvLzsKKwkJJHJlZl9pZCAuPSAiXEAkciI7CisJCSMganVzdCBncm93IGEgdGFpbCBpZiB3ZSdyZSBub3QgdW5pcXVlIGVub3VnaCA6eAorCQkkcmVmX2lkIC49ICctJyB3aGlsZSBmaW5kX3JlZigkcmVmX2lkKTsKKwkJcHJpbnQgU1RERVJSICJJbml0aWFsaXppbmcgcGFyZW50OiAkcmVmX2lkXG4iOworCQlteSAoJHUsICRwLCAkcmVwb19pZCkgPSAoJG5ld191cmwsICcnLCAkcmVmX2lkKTsKKwkJaWYgKCR1ID1+IHMjXlxRJHVybFxFKC98JCkjIykgeworCQkJJHAgPSAkdTsKKwkJCSR1ID0gJHVybDsKKwkJCSRyZXBvX2lkID0gJHNlbGYtPntyZXBvX2lkfTsKKwkJfQorCQkkZ3MgPSBHaXQ6OlNWTi0+aW5pdCgkdSwgJHAsICRyZXBvX2lkLCAkcmVmX2lkLCAxKTsKKwl9CisJJGdzCit9CisKK3N1YiBjYWxsX2F1dGhvcnNfcHJvZyB7CisJbXkgKCRvcmlnX2F1dGhvcikgPSBAXzsKKwlteSAkYXV0aG9yID0gYCQ6Ol9hdXRob3JzX3Byb2cgJG9yaWdfYXV0aG9yYDsKKwlpZiAoJD8gIT0gMCkgeworCQlkaWUgIiQ6Ol9hdXRob3JzX3Byb2cgZmFpbGVkIHdpdGggZXhpdCBjb2RlICQ/XG4iCisJfQorCWlmICgkYXV0aG9yID1+IC9eXHMqKC4rPylccyo8KC4qKT5ccyokLykgeworCQlteSAoJG5hbWUsICRlbWFpbCkgPSAoJDEsICQyKTsKKwkJJGVtYWlsID0gdW5kZWYgaWYgbGVuZ3RoICQyID09IDA7CisJCXJldHVybiBbJG5hbWUsICRlbWFpbF07CisJfSBlbHNlIHsKKwkJZGllICJBdXRob3I6ICRvcmlnX2F1dGhvcjogJDo6X2F1dGhvcnNfcHJvZyByZXR1cm5lZCAiCisJCQkuICJpbnZhbGlkIGF1dGhvciBmb3JtYXQ6ICRhdXRob3JcbiI7CisJfQogfQogCiBzdWIgY2hlY2tfYXV0aG9yIHsKIAlteSAoJGF1dGhvcikgPSBAXzsKIAlpZiAoIWRlZmluZWQgJGF1dGhvciB8fCBsZW5ndGggJGF1dGhvciA9PSAwKSB7CiAJCSRhdXRob3IgPSAnKG5vIGF1dGhvciknOwotCX0gZWxzaWYgKGRlZmluZWQgJDo6X2F1dGhvcnMgJiYgISBkZWZpbmVkICQ6OnVzZXJzeyRhdXRob3J9KSB7Ci0JCWRpZSAiQXV0aG9yOiAkYXV0aG9yIG5vdCBkZWZpbmVkIGluICQ6Ol9hdXRob3JzIGZpbGVcbiI7CisJfQorCWlmICghZGVmaW5lZCAkOjp1c2Vyc3skYXV0aG9yfSkgeworCQlpZiAoZGVmaW5lZCAkOjpfYXV0aG9yc19wcm9nKSB7CisJCQkkOjp1c2Vyc3skYXV0aG9yfSA9IGNhbGxfYXV0aG9yc19wcm9nKCRhdXRob3IpOworCQl9IGVsc2lmIChkZWZpbmVkICQ6Ol9hdXRob3JzKSB7CisJCQlkaWUgIkF1dGhvcjogJGF1dGhvciBub3QgZGVmaW5lZCBpbiAkOjpfYXV0aG9ycyBmaWxlXG4iOworCQl9CiAJfQogCSRhdXRob3I7CiB9CkBAIC0yNjA1LDcgKzI5MDAsNyBAQAogCQkJZGllICJDYW4ndCBoYXZlIGJvdGggJ3VzZVN2bVByb3BzJyBhbmQgJ3Jld3JpdGVSb290JyAiLAogCQkJICAgICJvcHRpb25zIHNldCFcbiI7CiAJCX0KLQkJbXkgKCR1dWlkLCAkcikgPSAkaGVhZHJldiA9fiBte14oW2EtZlxkXC1dezMwLH0pOihcZCspJH07CisJCW15ICgkdXVpZCwgJHIpID0gJGhlYWRyZXYgPX4gbXteKFthLWZcZFwtXXszMCx9KTooXGQrKSR9aTsKIAkJIyB3ZSBkb24ndCB3YW50ICJTVk06IGluaXRpYWxpemluZyBtaXJyb3IgZm9yIGp1bmsiIC4uLgogCQlyZXR1cm4gdW5kZWYgaWYgJHIgPT0gMDsKIAkJbXkgJHN2bSA9ICRzZWxmLT5zdm07CkBAIC0yODIzLDYgKzMxMTgsMTQgQEAKIAkgIGNyb2FrICJ3cml0ZTogJCEiOwogfQogCitzdWIgX3Jldl9tYXBfcmVzZXQgeworCW15ICgkZmgsICRyZXYsICRjb21taXQpID0gQF87CisJbXkgJGMgPSBfcmV2X21hcF9nZXQoJGZoLCAkcmV2KTsKKwkkYyBlcSAkY29tbWl0IG9yIGRpZSAiX3Jldl9tYXBfcmVzZXQoQF8pIGNvbW1pdCAkYyBkb2VzIG5vdCBtYXRjaCFcbiI7CisJbXkgJG9mZnNldCA9IHN5c3NlZWsoJGZoLCAwLCBTRUVLX0NVUikgb3IgY3JvYWsgInNlZWs6ICQhIjsKKwl0cnVuY2F0ZSAkZmgsICRvZmZzZXQgb3IgY3JvYWsgInRydW5jYXRlOiAkISI7Cit9CisKIHN1YiBta2ZpbGUgewogCW15ICgkcGF0aCkgPSBAXzsKIAl1bmxlc3MgKC1lICRwYXRoKSB7CkBAIC0yODM5LDYgKzMxNDIsNyBAQAogCW15ICRkYiA9ICRzZWxmLT5tYXBfcGF0aCgkdXVpZCk7CiAJbXkgJGRiX2xvY2sgPSAiJGRiLmxvY2siOwogCW15ICRzaWc7CisJJHVwZGF0ZV9yZWYgfHw9IDA7CiAJaWYgKCR1cGRhdGVfcmVmKSB7CiAJCSRTSUd7SU5UfSA9ICRTSUd7SFVQfSA9ICRTSUd7VEVSTX0gPSAkU0lHe0FMUk19ID0gJFNJR3tQSVBFfSA9CiAJCSAgICAgICAgICAgICRTSUd7VVNSMX0gPSAkU0lHe1VTUjJ9ID0gc3ViIHsgJHNpZyA9ICRfWzBdIH07CkBAIC0yODYyLDcgKzMxNjYsOCBAQAogCiAJc3lzb3BlbihteSAkZmgsICRkYl9sb2NrLCBPX1JEV1IgfCBPX0NSRUFUKQogCSAgICAgb3IgY3JvYWsgIkNvdWxkbid0IG9wZW4gJGRiX2xvY2s6ICQhXG4iOwotCV9yZXZfbWFwX3NldCgkZmgsICRyZXYsICRjb21taXQpOworCSR1cGRhdGVfcmVmIGVxICdyZXNldCcgPyBfcmV2X21hcF9yZXNldCgkZmgsICRyZXYsICRjb21taXQpIDoKKwkJCQkgX3Jldl9tYXBfc2V0KCRmaCwgJHJldiwgJGNvbW1pdCk7CiAJaWYgKCRzeW5jKSB7CiAJCSRmaC0+Zmx1c2ggb3IgZGllICJDb3VsZG4ndCBmbHVzaCAkZGJfbG9jazogJCFcbiI7CiAJCSRmaC0+c3luYyBvciBkaWUgIkNvdWxkbid0IHN5bmMgJGRiX2xvY2s6ICQhXG4iOwpAQCAtMjg3MCw3ICszMTc1LDkgQEAKIAljbG9zZSAkZmggb3IgY3JvYWsgJCE7CiAJaWYgKCR1cGRhdGVfcmVmKSB7CiAJCSRfaGVhZCA9ICRzZWxmOwotCQljb21tYW5kX25vaXN5KCd1cGRhdGUtcmVmJywgJy1tJywgInIkcmV2IiwKKwkJbXkgJG5vdGUgPSAiIjsKKwkJJG5vdGUgPSAiICgkdXBkYXRlX3JlZikiIGlmICgkdXBkYXRlX3JlZiAhfiAvXlxkKiQvKTsKKwkJY29tbWFuZF9ub2lzeSgndXBkYXRlLXJlZicsICctbScsICJyJHJldiRub3RlIiwKIAkJICAgICAgICAgICAgICAkc2VsZi0+cmVmbmFtZSwgJGNvbW1pdCk7CiAJfQogCXJlbmFtZSAkZGJfbG9jaywgJGRiIG9yIGRpZSAicmV2X21hcF9zZXQoQF8pOiAiLCAiRmFpbGVkIHRvIHJlbmFtZTogIiwKQEAgLTI5MzIsMTIgKzMyMzksMTkgQEAKIAlyZXR1cm4gdW5kZWYgdW5sZXNzIC1lICRtYXBfcGF0aDsKIAogCXN5c29wZW4obXkgJGZoLCAkbWFwX3BhdGgsIE9fUkRPTkxZKSBvciBjcm9hayAib3BlbjogJCEiOworCW15ICRjID0gX3Jldl9tYXBfZ2V0KCRmaCwgJHJldik7CisJY2xvc2UoJGZoKSBvciBjcm9hayAiY2xvc2U6ICQhIjsKKwkkYworfQorCitzdWIgX3Jldl9tYXBfZ2V0IHsKKwlteSAoJGZoLCAkcmV2KSA9IEBfOworCiAJYmlubW9kZSAkZmggb3IgY3JvYWsgImJpbm1vZGU6ICQhIjsKIAlteSAkc2l6ZSA9IChzdGF0KCRmaCkpWzddOwogCSgkc2l6ZSAlIDI0KSA9PSAwIG9yIGNyb2FrICJpbmNvbnNpc3RlbnQgc2l6ZTogJHNpemUiOwogCiAJaWYgKCRzaXplID09IDApIHsKLQkJY2xvc2UgJGZoIG9yIGNyb2FrICJjbG9zZTogJGZoIjsKIAkJcmV0dXJuIHVuZGVmOwogCX0KIApAQCAtMjk1NSwxMSArMzI2OSw5IEBACiAJCX0gZWxzaWYgKCRyID4gJHJldikgewogCQkJJHUgPSAkaSAtIDI0OwogCQl9IGVsc2UgeyAjICRyID09ICRyZXYKLQkJCWNsb3NlKCRmaCkgb3IgY3JvYWsgImNsb3NlOiAkISI7CiAJCQlyZXR1cm4gJGMgZXEgKCcwJyB4IDQwKSA/IHVuZGVmIDogJGM7CiAJCX0KIAl9Ci0JY2xvc2UoJGZoKSBvciBjcm9hayAiY2xvc2U6ICQhIjsKIAl1bmRlZjsKIH0KIApAQCAtMjk3MSw2ICszMjgzLDggQEAKIAlteSAoJHNlbGYsICRyZXYsICRlcV9vaywgJG1pbl9yZXYpID0gQF87CiAJLS0kcmV2IHVubGVzcyAkZXFfb2s7CiAJJG1pbl9yZXYgfHw9IDE7CisJbXkgJG1heF9yZXYgPSAkc2VsZi0+cmV2X21hcF9tYXg7CisJJHJldiA9ICRtYXhfcmV2IGlmICgkcmV2ID4gJG1heF9yZXYpOwogCXdoaWxlICgkcmV2ID49ICRtaW5fcmV2KSB7CiAJCWlmIChteSAkYyA9ICRzZWxmLT5yZXZfbWFwX2dldCgkcmV2KSkgewogCQkJcmV0dXJuICgkcmV2LCAkYyk7CkBAIC0zMTk0LDEzICszNTA4LDIwIEBACiB1c2UgQ2FycCBxdy9jcm9hay87CiB1c2UgRmlsZTo6VGVtcCBxdy90ZW1wZmlsZS87CiB1c2UgSU86OkZpbGUgcXcvLzsKK3VzZSB2YXJzIHF3LyRfaWdub3JlX3JlZ2V4LzsKIAogIyBmaWxlIGJhdG9uIG1lbWJlcnM6IHBhdGgsIG1vZGVfYSwgbW9kZV9iLCBwb29sLCBmaCwgYmxvYiwgYmFzZQogc3ViIG5ldyB7Ci0JbXkgKCRjbGFzcywgJGdpdF9zdm4pID0gQF87CisJbXkgKCRjbGFzcywgJGdpdF9zdm4sICRzd2l0Y2hfcGF0aCkgPSBAXzsKIAlteSAkc2VsZiA9IFNWTjo6RGVsdGE6OkVkaXRvci0+bmV3OwogCWJsZXNzICRzZWxmLCAkY2xhc3M7Ci0JJHNlbGYtPntjfSA9ICRnaXRfc3ZuLT57bGFzdF9jb21taXR9IGlmIGV4aXN0cyAkZ2l0X3N2bi0+e2xhc3RfY29tbWl0fTsKKwlpZiAoZXhpc3RzICRnaXRfc3ZuLT57bGFzdF9jb21taXR9KSB7CisJCSRzZWxmLT57Y30gPSAkZ2l0X3N2bi0+e2xhc3RfY29tbWl0fTsKKwkJJHNlbGYtPntlbXB0eV9zeW1saW5rc30gPQorCQkgICAgICAgICAgICAgICAgICBfbWFya19lbXB0eV9zeW1saW5rcygkZ2l0X3N2biwgJHN3aXRjaF9wYXRoKTsKKwl9CisJJHNlbGYtPntpZ25vcmVfcmVnZXh9ID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywKKwkJCSAgICAgInN2bi1yZW1vdGUuJGdpdF9zdm4tPntyZXBvX2lkfS5pZ25vcmUtcGF0aHMiKSB9OwogCSRzZWxmLT57ZW1wdHl9ID0ge307CiAJJHNlbGYtPntkaXJfcHJvcH0gPSB7fTsKIAkkc2VsZi0+e2ZpbGVfcHJvcH0gPSB7fTsKQEAgLTMyMTAsNiArMzUzMSw3MCBAQAogCSRzZWxmOwogfQogCisjIHRoaXMgdXNlcyB0aGUgUmEgb2JqZWN0LCBzbyBpdCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgZG9fe3N3aXRjaCx1cGRhdGV9LAorIyBub3QgaW5zaWRlIHRoZW0gKHdoZW4gdGhlIEdpdDo6U1ZOOjpGZXRjaGVyIG9iamVjdCBpcyBwYXNzZWQpIHRvCisjIGRvX3tzd2l0Y2gsdXBkYXRlfQorc3ViIF9tYXJrX2VtcHR5X3N5bWxpbmtzIHsKKwlteSAoJGdpdF9zdm4sICRzd2l0Y2hfcGF0aCkgPSBAXzsKKwlteSAkYm9vbCA9IEdpdDo6Y29uZmlnX2Jvb2woJ3N2bi5icm9rZW5TeW1saW5rV29ya2Fyb3VuZCcpOworCXJldHVybiB7fSBpZiAoIWRlZmluZWQoJGJvb2wpKSB8fCAoZGVmaW5lZCgkYm9vbCkgJiYgISAkYm9vbCk7CisKKwlteSAlcmV0OworCW15ICgkcmV2LCAkY210KSA9ICRnaXRfc3ZuLT5sYXN0X3Jldl9jb21taXQ7CisJcmV0dXJuIHt9IHVubGVzcyAoJHJldiAmJiAkY210KTsKKworCSMgYWxsb3cgdGhlIHdhcm5pbmcgdG8gYmUgcHJpbnRlZCBmb3IgZWFjaCByZXZpc2lvbiB3ZSBmZXRjaCB0bworCSMgZW5zdXJlIHRoZSB1c2VyIHNlZXMgaXQuICBUaGUgdXNlciBjYW4gYWxzbyBkaXNhYmxlIHRoZSB3b3JrYXJvdW5kCisJIyBvbiB0aGUgcmVwb3NpdG9yeSBldmVuIHdoaWxlIGdpdCBzdm4gaXMgcnVubmluZyBhbmQgdGhlIG5leHQKKwkjIHJldmlzaW9uIGZldGNoZWQgd2lsbCBza2lwIHRoaXMgZXhwZW5zaXZlIGZ1bmN0aW9uLgorCW15ICRwcmludGVkX3dhcm5pbmc7CisJY2hvbXAobXkgJGVtcHR5X2Jsb2IgPSBgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS1zdGRpbiA8IC9kZXYvbnVsbGApOworCW15ICgkbHMsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShxdy9scy10cmVlIC1yIC16LywgJGNtdCk7CisJbG9jYWwgJC8gPSAiXDAiOworCW15ICRwZnggPSBkZWZpbmVkKCRzd2l0Y2hfcGF0aCkgPyAkc3dpdGNoX3BhdGggOiAkZ2l0X3N2bi0+e3BhdGh9OworCSRwZnggLj0gJy8nIGlmIGxlbmd0aCgkcGZ4KTsKKwl3aGlsZSAoPCRscz4pIHsKKwkJY2hvbXA7CisJCXMvXEExMDA2NDQgYmxvYiAkZW1wdHlfYmxvYlx0Ly9vIG9yIG5leHQ7CisJCXVubGVzcyAoJHByaW50ZWRfd2FybmluZykgeworCQkJcHJpbnQgU1RERVJSICJTY2FubmluZyBmb3IgZW1wdHkgc3ltbGlua3MsICIsCisJCQkgICAgICAgICAgICAgInRoaXMgbWF5IHRha2UgYSB3aGlsZSBpZiB5b3UgaGF2ZSAiLAorCQkJCSAgICAgIm1hbnkgZW1wdHkgZmlsZXNcbiIsCisJCQkJICAgICAiWW91IG1heSBkaXNhYmxlIHRoaXMgd2l0aCBgIiwKKwkJCQkgICAgICJnaXQgY29uZmlnIHN2bi5icm9rZW5TeW1saW5rV29ya2Fyb3VuZCAiLAorCQkJCSAgICAgImZhbHNlJy5cbiIsCisJCQkJICAgICAiVGhpcyBtYXkgYmUgZG9uZSBpbiBhIGRpZmZlcmVudCAiLAorCQkJCSAgICAgInRlcm1pbmFsIHdpdGhvdXQgcmVzdGFydGluZyAiLAorCQkJCSAgICAgImdpdCBzdm5cbiI7CisJCQkkcHJpbnRlZF93YXJuaW5nID0gMTsKKwkJfQorCQlteSAkcGF0aCA9ICRfOworCQlteSAodW5kZWYsICRwcm9wcykgPQorCQkgICAgICAgICAgICAgICAkZ2l0X3N2bi0+cmEtPmdldF9maWxlKCRwZnguJHBhdGgsICRyZXYsIHVuZGVmKTsKKwkJaWYgKCRwcm9wcy0+eydzdm46c3BlY2lhbCd9KSB7CisJCQkkcmV0eyRwYXRofSA9IDE7CisJCX0KKwl9CisJY29tbWFuZF9jbG9zZV9waXBlKCRscywgJGN0eCk7CisJXCVyZXQ7Cit9CisKKyMgcmV0dXJucyB0cnVlIGlmIGEgZ2l2ZW4gcGF0aCBpcyBpbnNpZGUgYSAiLmdpdCIgZGlyZWN0b3J5CitzdWIgaW5fZG90X2dpdCB7CisJJF9bMF0gPX4gbXsoPzpefC8pXC5naXQoPzovfCQpfTsKK30KKworIyByZXR1cm4gdmFsdWU6IDAgLS0gZG9uJ3QgaWdub3JlLCAxIC0tIGlnbm9yZQorc3ViIGlzX3BhdGhfaWdub3JlZCB7CisJbXkgKCRzZWxmLCAkcGF0aCkgPSBAXzsKKwlyZXR1cm4gMSBpZiBpbl9kb3RfZ2l0KCRwYXRoKTsKKwlyZXR1cm4gMSBpZiBkZWZpbmVkKCRzZWxmLT57aWdub3JlX3JlZ2V4fSkgJiYKKwkgICAgICAgICAgICAkcGF0aCA9fiBtISRzZWxmLT57aWdub3JlX3JlZ2V4fSE7CisJcmV0dXJuIDAgdW5sZXNzIGRlZmluZWQoJF9pZ25vcmVfcmVnZXgpOworCXJldHVybiAxIGlmICRwYXRoID1+IG0hJF9pZ25vcmVfcmVnZXghbzsKKwlyZXR1cm4gMDsKK30KKwogc3ViIHNldF9wYXRoX3N0cmlwIHsKIAlteSAoJHNlbGYsICRwYXRoKSA9IEBfOwogCSRzZWxmLT57cGF0aF9zdHJpcH0gPSBxci9eXFEkcGF0aFxFKFwvfCQpLyBpZiBsZW5ndGggJHBhdGg7CkBAIC0zMjM1LDIwICszNjIwLDI0IEBACiAKIHN1YiBkZWxldGVfZW50cnkgewogCW15ICgkc2VsZiwgJHBhdGgsICRyZXYsICRwYikgPSBAXzsKKwlyZXR1cm4gdW5kZWYgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkcGF0aCk7CiAKIAlteSAkZ3BhdGggPSAkc2VsZi0+Z2l0X3BhdGgoJHBhdGgpOwogCXJldHVybiB1bmRlZiBpZiAoJGdwYXRoIGVxICcnKTsKIAogCSMgcmVtb3ZlIGVudGlyZSBkaXJlY3Rvcmllcy4KLQlpZiAoY29tbWFuZCgnbHMtdHJlZScsICRzZWxmLT57Y30sICctLScsICRncGF0aCkgPX4gL14wNDAwMDAgdHJlZS8pIHsKKwlteSAoJHRyZWUpID0gKGNvbW1hbmQoJ2xzLXRyZWUnLCAnLXonLCAkc2VsZi0+e2N9LCAiLi8kZ3BhdGgiKQorCSAgICAgICAgICAgICAgICAgPX4gL1xBMDQwMDAwIHRyZWUgKFthLWZcZF17NDB9KVx0XFEkZ3BhdGhcRVwwLyk7CisJaWYgKCR0cmVlKSB7CiAJCW15ICgkbHMsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShxdy9scy10cmVlCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtciAtLW5hbWUtb25seSAtei8sCi0JCQkJICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPntjfSwgJy0tJywgJGdwYXRoKTsKKwkJCQkgICAgICAgICAgICAgICAgICAgICAkdHJlZSk7CiAJCWxvY2FsICQvID0gIlwwIjsKIAkJd2hpbGUgKDwkbHM+KSB7CiAJCQljaG9tcDsKLQkJCSRzZWxmLT57Z2lpfS0+cmVtb3ZlKCRfKTsKLQkJCXByaW50ICJcdERcdCRfXG4iIHVubGVzcyAkOjpfcTsKKwkJCW15ICRybXBhdGggPSAiJGdwYXRoLyRfIjsKKwkJCSRzZWxmLT57Z2lpfS0+cmVtb3ZlKCRybXBhdGgpOworCQkJcHJpbnQgIlx0RFx0JHJtcGF0aFxuIiB1bmxlc3MgJDo6X3E7CiAJCX0KIAkJcHJpbnQgIlx0RFx0JGdwYXRoL1xuIiB1bmxlc3MgJDo6X3E7CiAJCWNvbW1hbmRfY2xvc2VfcGlwZSgkbHMsICRjdHgpOwpAQCAtMzI2MiwyNiArMzY1MSw0MCBAQAogCiBzdWIgb3Blbl9maWxlIHsKIAlteSAoJHNlbGYsICRwYXRoLCAkcGIsICRyZXYpID0gQF87CisJbXkgKCRtb2RlLCAkYmxvYik7CisKKwlnb3RvIG91dCBpZiAkc2VsZi0+aXNfcGF0aF9pZ25vcmVkKCRwYXRoKTsKKwogCW15ICRncGF0aCA9ICRzZWxmLT5naXRfcGF0aCgkcGF0aCk7Ci0JbXkgKCRtb2RlLCAkYmxvYikgPSAoY29tbWFuZCgnbHMtdHJlZScsICRzZWxmLT57Y30sICctLScsICRncGF0aCkKLQkgICAgICAgICAgICAgICAgICAgICA9fiAvXihcZHs2fSkgYmxvYiAoW2EtZlxkXXs0MH0pXHQvKTsKKwkoJG1vZGUsICRibG9iKSA9IChjb21tYW5kKCdscy10cmVlJywgJy16JywgJHNlbGYtPntjfSwgIi4vJGdwYXRoIikKKwkgICAgICAgICAgICAgICAgICAgICA9fiAvXEEoXGR7Nn0pIGJsb2IgKFthLWZcZF17NDB9KVx0XFEkZ3BhdGhcRVwwLyk7CiAJdW5sZXNzIChkZWZpbmVkICRtb2RlICYmIGRlZmluZWQgJGJsb2IpIHsKIAkJZGllICIkcGF0aCB3YXMgbm90IGZvdW5kIGluIGNvbW1pdCAkc2VsZi0+e2N9IChyJHJldilcbiI7CiAJfQorCWlmICgkbW9kZSBlcSAnMTAwNjQ0JyAmJiAkc2VsZi0+e2VtcHR5X3N5bWxpbmtzfS0+eyRwYXRofSkgeworCQkkbW9kZSA9ICcxMjAwMDAnOworCX0KK291dDoKIAl7IHBhdGggPT4gJHBhdGgsIG1vZGVfYSA9PiAkbW9kZSwgbW9kZV9iID0+ICRtb2RlLCBibG9iID0+ICRibG9iLAogCSAgcG9vbCA9PiBTVk46OlBvb2wtPm5ldywgYWN0aW9uID0+ICdNJyB9OwogfQogCiBzdWIgYWRkX2ZpbGUgewogCW15ICgkc2VsZiwgJHBhdGgsICRwYiwgJGNwX3BhdGgsICRjcF9yZXYpID0gQF87Ci0JbXkgKCRkaXIsICRmaWxlKSA9ICgkcGF0aCA9fiBtI14oLio/KS8/KFteL10rKSQjKTsKLQlkZWxldGUgJHNlbGYtPntlbXB0eX0tPnskZGlyfTsKLQl7IHBhdGggPT4gJHBhdGgsIG1vZGVfYSA9PiAxMDA2NDQsIG1vZGVfYiA9PiAxMDA2NDQsCisJbXkgJG1vZGU7CisKKwlpZiAoISRzZWxmLT5pc19wYXRoX2lnbm9yZWQoJHBhdGgpKSB7CisJCW15ICgkZGlyLCAkZmlsZSkgPSAoJHBhdGggPX4gbSNeKC4qPykvPyhbXi9dKykkIyk7CisJCWRlbGV0ZSAkc2VsZi0+e2VtcHR5fS0+eyRkaXJ9OworCQkkbW9kZSA9ICcxMDA2NDQnOworCX0KKwl7IHBhdGggPT4gJHBhdGgsIG1vZGVfYSA9PiAkbW9kZSwgbW9kZV9iID0+ICRtb2RlLAogCSAgcG9vbCA9PiBTVk46OlBvb2wtPm5ldywgYWN0aW9uID0+ICdBJyB9OwogfQogCiBzdWIgYWRkX2RpcmVjdG9yeSB7CiAJbXkgKCRzZWxmLCAkcGF0aCwgJGNwX3BhdGgsICRjcF9yZXYpID0gQF87CisJZ290byBvdXQgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkcGF0aCk7CiAJbXkgJGdwYXRoID0gJHNlbGYtPmdpdF9wYXRoKCRwYXRoKTsKIAlpZiAoJGdwYXRoIGVxICcnKSB7CiAJCW15ICgkbHMsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShxdy9scy10cmVlCkBAIC0zMjk5LDExICszNzAyLDEzIEBACiAJbXkgKCRkaXIsICRmaWxlKSA9ICgkcGF0aCA9fiBtI14oLio/KS8/KFteL10rKSQjKTsKIAlkZWxldGUgJHNlbGYtPntlbXB0eX0tPnskZGlyfTsKIAkkc2VsZi0+e2VtcHR5fS0+eyRwYXRofSA9IDE7CitvdXQ6CiAJeyBwYXRoID0+ICRwYXRoIH07CiB9CiAKIHN1YiBjaGFuZ2VfZGlyX3Byb3AgewogCW15ICgkc2VsZiwgJGRiLCAkcHJvcCwgJHZhbHVlKSA9IEBfOworCXJldHVybiB1bmRlZiBpZiAkc2VsZi0+aXNfcGF0aF9pZ25vcmVkKCRkYi0+e3BhdGh9KTsKIAkkc2VsZi0+e2Rpcl9wcm9wfS0+eyRkYi0+e3BhdGh9fSB8fD0ge307CiAJJHNlbGYtPntkaXJfcHJvcH0tPnskZGItPntwYXRofX0tPnskcHJvcH0gPSAkdmFsdWU7CiAJdW5kZWY7CkBAIC0zMzExLDYgKzM3MTYsNyBAQAogCiBzdWIgYWJzZW50X2RpcmVjdG9yeSB7CiAJbXkgKCRzZWxmLCAkcGF0aCwgJHBiKSA9IEBfOworCXJldHVybiB1bmRlZiBpZiAkc2VsZi0+aXNfcGF0aF9pZ25vcmVkKCRwYXRoKTsKIAkkc2VsZi0+e2Fic2VudF9kaXJ9LT57JHBiLT57cGF0aH19IHx8PSBbXTsKIAlwdXNoIEB7JHNlbGYtPnthYnNlbnRfZGlyfS0+eyRwYi0+e3BhdGh9fX0sICRwYXRoOwogCXVuZGVmOwpAQCAtMzMxOCw2ICszNzI0LDcgQEAKIAogc3ViIGFic2VudF9maWxlIHsKIAlteSAoJHNlbGYsICRwYXRoLCAkcGIpID0gQF87CisJcmV0dXJuIHVuZGVmIGlmICRzZWxmLT5pc19wYXRoX2lnbm9yZWQoJHBhdGgpOwogCSRzZWxmLT57YWJzZW50X2ZpbGV9LT57JHBiLT57cGF0aH19IHx8PSBbXTsKIAlwdXNoIEB7JHNlbGYtPnthYnNlbnRfZmlsZX0tPnskcGItPntwYXRofX19LCAkcGF0aDsKIAl1bmRlZjsKQEAgLTMzMjUsNiArMzczMiw3IEBACiAKIHN1YiBjaGFuZ2VfZmlsZV9wcm9wIHsKIAlteSAoJHNlbGYsICRmYiwgJHByb3AsICR2YWx1ZSkgPSBAXzsKKwlyZXR1cm4gdW5kZWYgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkZmItPntwYXRofSk7CiAJaWYgKCRwcm9wIGVxICdzdm46ZXhlY3V0YWJsZScpIHsKIAkJaWYgKCRmYi0+e21vZGVfYn0gIT0gMTIwMDAwKSB7CiAJCQkkZmItPnttb2RlX2J9ID0gZGVmaW5lZCAkdmFsdWUgPyAxMDA3NTUgOiAxMDA2NDQ7CkBAIC0zMzQwLDIyICszNzQ4LDQzIEBACiAKIHN1YiBhcHBseV90ZXh0ZGVsdGEgewogCW15ICgkc2VsZiwgJGZiLCAkZXhwKSA9IEBfOworCXJldHVybiB1bmRlZiBpZiAkc2VsZi0+aXNfcGF0aF9pZ25vcmVkKCRmYi0+e3BhdGh9KTsKIAlteSAkZmggPSAkOjpfcmVwb3NpdG9yeS0+dGVtcF9hY3F1aXJlKCdzdm5fZGVsdGEnKTsKIAkjICRmaCBnZXRzIGF1dG8tY2xvc2VkKCkgYnkgU1ZOOjpUeERlbHRhOjphcHBseSgpLAogCSMgKGJ1dCAkYmFzZSBkb2VzIG5vdCwpIHNvIGR1cCgpIGl0IGZvciByZWFkaW5nIGluIGNsb3NlX2ZpbGUKIAlvcGVuIG15ICRkdXAsICc8JicsICRmaCBvciBjcm9hayAkITsKIAlteSAkYmFzZSA9ICQ6Ol9yZXBvc2l0b3J5LT50ZW1wX2FjcXVpcmUoJ2dpdF9ibG9iJyk7CisKIAlpZiAoJGZiLT57YmxvYn0pIHsKLQkJcHJpbnQgJGJhc2UgJ2xpbmsgJyBpZiAoJGZiLT57bW9kZV9hfSA9PSAxMjAwMDApOwotCQlteSAkc2l6ZSA9ICQ6Ol9yZXBvc2l0b3J5LT5jYXRfYmxvYigkZmItPntibG9ifSwgJGJhc2UpOworCQlteSAoJGJhc2VfaXNfbGluaywgJHNpemUpOworCisJCWlmICgkZmItPnttb2RlX2F9IGVxICcxMjAwMDAnICYmCisJCSAgICAhICRzZWxmLT57ZW1wdHlfc3ltbGlua3N9LT57JGZiLT57cGF0aH19KSB7CisJCQlwcmludCAkYmFzZSAnbGluayAnIG9yIGRpZSAicHJpbnQgJCFcbiI7CisJCQkkYmFzZV9pc19saW5rID0gMTsKKwkJfQorCXJldHJ5OgorCQkkc2l6ZSA9ICQ6Ol9yZXBvc2l0b3J5LT5jYXRfYmxvYigkZmItPntibG9ifSwgJGJhc2UpOwogCQlkaWUgIkZhaWxlZCB0byByZWFkIG9iamVjdCAkZmItPntibG9ifSIgaWYgKCRzaXplIDwgMCk7CiAKIAkJaWYgKGRlZmluZWQgJGV4cCkgewogCQkJc2VlayAkYmFzZSwgMCwgMCBvciBjcm9hayAkITsKIAkJCW15ICRnb3QgPSA6Om1kNXN1bSgkYmFzZSk7Ci0JCQlkaWUgIkNoZWNrc3VtIG1pc21hdGNoOiAkZmItPntwYXRofSAkZmItPntibG9ifVxuIiwKLQkJCSAgICAiZXhwZWN0ZWQ6ICRleHBcbiIsCi0JCQkgICAgIiAgICAgZ290OiAkZ290XG4iIGlmICgkZ290IG5lICRleHApOworCQkJaWYgKCRnb3QgbmUgJGV4cCkgeworCQkJCW15ICRlcnIgPSAiQ2hlY2tzdW0gbWlzbWF0Y2g6ICIuCisJCQkJICAgICAgICIkZmItPntwYXRofSAkZmItPntibG9ifVxuIiAuCisJCQkJICAgICAgICJleHBlY3RlZDogJGV4cFxuIiAuCisJCQkJICAgICAgICIgICAgIGdvdDogJGdvdFxuIjsKKwkJCQlpZiAoJGJhc2VfaXNfbGluaykgeworCQkJCQl3YXJuICRlcnIsCisJCQkJCSAgICAgIlJldHJ5aW5nLi4uIChwb3NzaWJseSAiLAorCQkJCQkgICAgICJhIGJhZCBzeW1saW5rIGZyb20gU1ZOKVxuIjsKKwkJCQkJJDo6X3JlcG9zaXRvcnktPnRlbXBfcmVzZXQoJGJhc2UpOworCQkJCQkkYmFzZV9pc19saW5rID0gMDsKKwkJCQkJZ290byByZXRyeTsKKwkJCQl9CisJCQkJZGllICRlcnI7CisJCQl9CiAJCX0KIAl9CiAJc2VlayAkYmFzZSwgMCwgMCBvciBjcm9hayAkITsKQEAgLTMzNjYsNiArMzc5NSw4IEBACiAKIHN1YiBjbG9zZV9maWxlIHsKIAlteSAoJHNlbGYsICRmYiwgJGV4cCkgPSBAXzsKKwlyZXR1cm4gdW5kZWYgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkZmItPntwYXRofSk7CisKIAlteSAkaGFzaDsKIAlteSAkcGF0aCA9ICRzZWxmLT5naXRfcGF0aCgkZmItPntwYXRofSk7CiAJaWYgKG15ICRmaCA9ICRmYi0+e2ZofSkgewpAQCAtMzM3OSwxMSArMzgxMCwxOSBAQAogCQl9CiAJCWlmICgkZmItPnttb2RlX2J9ID09IDEyMDAwMCkgewogCQkJc3lzc2VlaygkZmgsIDAsIDApIG9yIGNyb2FrICQhOwotCQkJc3lzcmVhZCgkZmgsIG15ICRidWYsIDUpID09IDUgb3IgY3JvYWsgJCE7CisJCQlteSAkcmQgPSBzeXNyZWFkKCRmaCwgbXkgJGJ1ZiwgNSk7CiAKLQkJCXVubGVzcyAoJGJ1ZiBlcSAnbGluayAnKSB7CisJCQlpZiAoIWRlZmluZWQgJHJkKSB7CisJCQkJY3JvYWsgInN5c3JlYWQ6ICQhXG4iOworCQkJfSBlbHNpZiAoJHJkID09IDApIHsKIAkJCQl3YXJuICIkcGF0aCBoYXMgbW9kZSAxMjAwMDAiLAotCQkJCQkJIiBidXQgaXMgbm90IGEgbGlua1xuIjsKKwkJCQkgICAgICIgYnV0IGl0IHBvaW50cyB0byBub3RoaW5nXG4iLAorCQkJCSAgICAgImNvbnZlcnRpbmcgdG8gYW4gZW1wdHkgZmlsZSB3aXRoIG1vZGUiLAorCQkJCSAgICAgIiAxMDA2NDRcbiI7CisJCQkJJGZiLT57bW9kZV9ifSA9ICcxMDA2NDQnOworCQkJfSBlbHNpZiAoJGJ1ZiBuZSAnbGluayAnKSB7CisJCQkJd2FybiAiJHBhdGggaGFzIG1vZGUgMTIwMDAwIiwKKwkJCQkgICAgICIgYnV0IGlzIG5vdCBhIGxpbmtcbiI7CiAJCQl9IGVsc2UgewogCQkJCW15ICR0bXBfZmggPSAkOjpfcmVwb3NpdG9yeS0+dGVtcF9hY3F1aXJlKAogCQkJCQknc3ZuX2hhc2gnKTsKQEAgLTM1NjYsNyArNDAwNSw3IEBACiBzdWIgdXJsX3BhdGggewogCW15ICgkc2VsZiwgJHBhdGgpID0gQF87CiAJaWYgKCRzZWxmLT57dXJsfSA9fiBtI15odHRwcz86Ly8jKSB7Ci0JCSRwYXRoID1+IHMvKFtefmEtekEtWjAtOV8uLV0pL3VjIHNwcmludGYoIiUlJTAyeCIsb3JkKCQxKSkvZWc7CisJCSRwYXRoID1+IHMhKFtefmEtekEtWjAtOV8uLy1dKSF1YyBzcHJpbnRmKCIlJSUwMngiLG9yZCgkMSkpIWVnOwogCX0KIAkkc2VsZi0+e3VybH0gLiAnLycgLiAkc2VsZi0+cmVwb19wYXRoKCRwYXRoKTsKIH0KQEAgLTM4ODMsNyArNDMyMiw4IEBACiBCRUdJTiB7CiAJIyBlbmZvcmNlIHRlbXBvcmFyeSBwb29sIHVzYWdlIGZvciBzb21lIHNpbXBsZSBmdW5jdGlvbnMKIAlubyBzdHJpY3QgJ3JlZnMnOwotCWZvciBteSAkZiAocXcvcmV2X3Byb3BsaXN0IGdldF9sYXRlc3RfcmV2bnVtIGdldF91dWlkIGdldF9yZXBvc19yb290LykgeworCWZvciBteSAkZiAocXcvcmV2X3Byb3BsaXN0IGdldF9sYXRlc3RfcmV2bnVtIGdldF91dWlkIGdldF9yZXBvc19yb290CisJICAgICAgICAgICAgICBnZXRfZmlsZS8pIHsKIAkJbXkgJFNVUEVSID0gIlNVUEVSOjokZiI7CiAJCSokZiA9IHN1YiB7CiAJCQlteSAkc2VsZiA9IHNoaWZ0OwpAQCAtNDAxOSwxMCArNDQ1OSw1MSBAQAogCSMgZG8gbm90IGNhbGwgdGhlIHJlYWwgREVTVFJPWSBzaW5jZSB3ZSBzdG9yZSBvdXJzZWx2ZXMgaW4gJFJBCiB9CiAKKyMgZ2V0X2xvZyhwYXRocywgc3RhcnQsIGVuZCwgbGltaXQsCisjICAgICAgICAgZGlzY292ZXJfY2hhbmdlZF9wYXRocywgc3RyaWN0X25vZGVfaGlzdG9yeSwgcmVjZWl2ZXIpCiBzdWIgZ2V0X2xvZyB7CiAJbXkgKCRzZWxmLCBAYXJncykgPSBAXzsKIAlteSAkcG9vbCA9IFNWTjo6UG9vbC0+bmV3OwotCXNwbGljZShAYXJncywgMywgMSkgaWYgKCRTVk46OkNvcmU6OlZFUlNJT04gbGUgJzEuMi4wJyk7CisKKwkjIHN2bl9sb2dfY2hhbmdlZF9wYXRoX3Qgb2JqZWN0cyBwYXNzZWQgdG8gZ2V0X2xvZyBhcmUgbGlrZWx5IHRvIGJlCisJIyBvdmVyd3JpdHRlbiBldmVuIGlmIG9ubHkgdGhlIHJlZnMgYXJlIGNvcGllZCB0byBhbiBleHRlcm5hbCB2YXJpYWJsZSwKKwkjIHNvIHdlIHNob3VsZCBkdXAgdGhlIHN0cnVjdHVyZXMgaW4gdGhlaXIgZW50aXJldHkuICBVc2luZyBhbgorCSMgZXh0ZXJuYWxseSBwYXNzZWQgcG9vbCAoaW5zdGVhZCBvZiBvdXIgdGVtcG9yYXJ5IGFuZCBxdWlja2x5IGNsZWFyZWQKKwkjIHBvb2wgaW4gR2l0OjpTVk46OlJhKSBkb2VzIG5vdCBoZWxwIG1hdHRlcnMgYXQgYWxsLi4uCisJbXkgJHJlY2VpdmVyID0gcG9wIEBhcmdzOworCW15ICRwcmVmaXggPSAiLyIuJHNlbGYtPntzdm5fcGF0aH07CisJJHByZWZpeCA9fiBzIy8rKCQpIyM7CisJbXkgJHByZWZpeF9yZWdleCA9IHFyI15cUSRwcmVmaXhcRSM7CisJcHVzaChAYXJncywgc3ViIHsKKwkJbXkgKCRwYXRocykgPSAkX1swXTsKKwkJcmV0dXJuICYkcmVjZWl2ZXIoQF8pIHVubGVzcyAkcGF0aHM7CisJCSRfWzBdID0gKCk7CisJCWZvcmVhY2ggbXkgJHAgKGtleXMgJSRwYXRocykgeworCQkJbXkgJGkgPSAkcGF0aHMtPnskcH07CisJCQkjIE1ha2UgcGF0aCByZWxhdGl2ZSB0byBvdXIgdXJsLCBub3QgcmVwb3Nfcm9vdAorCQkJJHAgPX4gcy8kcHJlZml4X3JlZ2V4Ly87CisJCQlteSAlcyA9IG1hcCB7ICRfID0+ICRpLT4kXzsgfQorCQkJCXF3L2NvcHlmcm9tX3BhdGggY29weWZyb21fcmV2IGFjdGlvbi87CisJCQlpZiAoJHN7J2NvcHlmcm9tX3BhdGgnfSkgeworCQkJCSRzeydjb3B5ZnJvbV9wYXRoJ30gPX4gcy8kcHJlZml4X3JlZ2V4Ly87CisJCQl9CisJCQkkX1swXXskcH0gPSBcJXM7CisJCX0KKwkJJiRyZWNlaXZlcihAXyk7CisJfSk7CisKKworCSMgdGhlIGxpbWl0IHBhcmFtZXRlciB3YXMgbm90IHN1cHBvcnRlZCBpbiBTVk4gMS4xLngsIHNvIHdlCisJIyBkcm9wIGl0LiAgVGhlcmVmb3JlLCB0aGUgcmVjZWl2ZXIgY2FsbGJhY2sgcGFzc2VkIHRvIGl0CisJIyBpcyBtYWRlIGF3YXJlIG9mIHRoaXMgbGltaXRhdGlvbiBieSBiZWluZyB3cmFwcGVkIGlmCisJIyB0aGUgbGltaXQgcGFzc2VkIHRvIGlzIGJlaW5nIHdyYXBwZWQuCisJaWYgKCRTVk46OkNvcmU6OlZFUlNJT04gbGUgJzEuMi4wJykgeworCQlteSAkbGltaXQgPSBzcGxpY2UoQGFyZ3MsIDMsIDEpOworCQlpZiAoJGxpbWl0ID4gMCkgeworCQkJbXkgJHJlY2VpdmVyID0gcG9wIEBhcmdzOworCQkJcHVzaChAYXJncywgc3ViIHsgJiRyZWNlaXZlcihAXykgaWYgKC0tJGxpbWl0ID49IDApIH0pOworCQl9CisJfQogCW15ICRyZXQgPSAkc2VsZi0+U1VQRVI6OmdldF9sb2coQGFyZ3MsICRwb29sKTsKIAkkcG9vbC0+Y2xlYXI7CiAJJHJldDsKQEAgLTQwOTYsMTAgKzQ1NzcsMTIgQEAKIAogCW15ICRmdWxsX3VybCA9ICRzZWxmLT57dXJsfTsKIAlteSAkb2xkX3VybCA9ICRmdWxsX3VybDsKLQkkZnVsbF91cmwgLj0gJy8nIC4gZXNjYXBlX3VyaV9vbmx5KCRwYXRoKSBpZiBsZW5ndGggJHBhdGg7CisJJGZ1bGxfdXJsIC49ICcvJyAuICRwYXRoIGlmIGxlbmd0aCAkcGF0aDsKIAlteSAoJHJhLCAkcmVwYXJlbnRlZCk7CiAKLQlpZiAoJG9sZF91cmwgPX4gbSNec3ZuKFwrc3NoKT86Ly8jKSB7CisJaWYgKCRvbGRfdXJsID1+IG0jXnN2bihcK3NzaCk/Oi8vIyB8fAorCSAgICAoJGZ1bGxfdXJsID1+IG0jXmh0dHBzPzovLyMgJiYKKwkgICAgIGVzY2FwZV91cmwoJGZ1bGxfdXJsKSBuZSAkZnVsbF91cmwpKSB7CiAJCSRfWzBdID0gdW5kZWY7CiAJCSRzZWxmID0gdW5kZWY7CiAJCSRSQSA9IHVuZGVmOwpAQCAtNDE3MCw2ICs0NjUzLDcgQEAKIAlteSAoJG1pbiwgJG1heCkgPSAoJGJhc2UsICRoZWFkIDwgJGJhc2UgKyAkaW5jID8gJGhlYWQgOiAkYmFzZSArICRpbmMpOwogCW15ICRsb25nZXN0X3BhdGggPSBsb25nZXN0X2NvbW1vbl9wYXRoKCRnc3YsICRnbG9icyk7CiAJbXkgJHJhX3VybCA9ICRzZWxmLT57dXJsfTsKKwlteSAkZmluZF90cmFpbGluZ19lZGdlOwogCXdoaWxlICgxKSB7CiAJCW15ICVyZXZzOwogCQlteSAkZXJyOwpAQCAtNDE4MCwxMiArNDY2NCwxNyBAQAogCQl9OwogCQlzdWIgX2NiIHsKIAkJCW15ICgkcGF0aHMsICRyLCAkYXV0aG9yLCAkZGF0ZSwgJGxvZykgPSBAXzsKLQkJCVsgZHVwX2NoYW5nZWRfcGF0aHMoJHBhdGhzKSwKKwkJCVsgJHBhdGhzLAogCQkJICB7IGF1dGhvciA9PiAkYXV0aG9yLCBkYXRlID0+ICRkYXRlLCBsb2cgPT4gJGxvZyB9IF07CiAJCX0KIAkJJHNlbGYtPmdldF9sb2coWyRsb25nZXN0X3BhdGhdLCAkbWluLCAkbWF4LCAwLCAxLCAxLAogCQkgICAgICAgICAgICAgICBzdWIgeyAkcmV2c3skX1sxXX0gPSBfY2IoQF8pIH0pOwotCQlpZiAoJGVyciAmJiAkbWF4ID49ICRoZWFkKSB7CisJCWlmICgkZXJyKSB7CisJCQlwcmludCAiQ2hlY2tlZCB0aHJvdWdoIHIkbWF4XHIiOworCQl9IGVsc2UgeworCQkJJGZpbmRfdHJhaWxpbmdfZWRnZSA9IDE7CisJCX0KKwkJaWYgKCRlcnIgYW5kICRmaW5kX3RyYWlsaW5nX2VkZ2UpIHsKIAkJCXByaW50IFNUREVSUiAiUGF0aCAnJGxvbmdlc3RfcGF0aCcgIiwKIAkJCQkgICAgICJ3YXMgcHJvYmFibHkgZGVsZXRlZDpcbiIsCiAJCQkJICAgICAkZXJyLT5leHBhbmRlZF9tZXNzYWdlLApAQCAtNDE5NywxMyArNDY4NiwxNCBAQAogCQkJCW15ICRvazsKIAkJCQkkc2VsZi0+Z2V0X2xvZyhbJGxvbmdlc3RfcGF0aF0sICRtaW4sICRoaSwKIAkJCQkgICAgICAgICAgICAgICAwLCAxLCAxLCBzdWIgewotCQkJCSAgICAgICAgICAgICAgICRvayB8fD0gJF9bMV07CisJCQkJICAgICAgICAgICAgICAgJG9rID0gJF9bMV07CiAJCQkJICAgICAgICAgICAgICAgJHJldnN7JF9bMV19ID0gX2NiKEBfKSB9KTsKIAkJCQlpZiAoJG9rKSB7CiAJCQkJCXByaW50IFNUREVSUiAiciRtaW4gLi4gciRvayBPS1xuIjsKIAkJCQkJbGFzdDsKIAkJCQl9CiAJCQl9CisJCQkkZmluZF90cmFpbGluZ19lZGdlID0gMDsKIAkJfQogCQkkU1ZOOjpFcnJvcjo6aGFuZGxlciA9ICRlcnJfaGFuZGxlcjsKIApAQCAtNDM0MSw3ICs0ODMxLDExIEBACiAJbXkgJGMgPSAnJzsKIAlkbyB7CiAJCSR1cmwgLj0gIi8kYyIgaWYgbGVuZ3RoICRjOwotCQlldmFsIHsgKHJlZiAkc2VsZiktPm5ldygkdXJsKS0+Z2V0X2xhdGVzdF9yZXZudW0gfTsKKwkJZXZhbCB7CisJCQlteSAkcmEgPSAocmVmICRzZWxmKS0+bmV3KCR1cmwpOworCQkJbXkgJGxhdGVzdCA9ICRyYS0+Z2V0X2xhdGVzdF9yZXZudW07CisJCQkkcmEtPmdldF9sb2coIiIsICRsYXRlc3QsIDAsIDEsIDAsIDEsIHN1YiB7fSk7CisJCX07CiAJfSB3aGlsZSAoJEAgJiYgKCRjID0gc2hpZnQgQGNvbXBvbmVudHMpKTsKIAkkdXJsOwogfQpAQCAtNDM5NywyOCArNDg5MSwxMSBAQAogCWRpZSAiRXJyb3IgZnJvbSBTVk4sICgkZXJybm8pOiAiLCAkZXJyLT5leHBhbmRlZF9tZXNzYWdlLCJcbiI7CiB9CiAKLSMgc3ZuX2xvZ19jaGFuZ2VkX3BhdGhfdCBvYmplY3RzIHBhc3NlZCB0byBnZXRfbG9nIGFyZSBsaWtlbHkgdG8gYmUKLSMgb3ZlcndyaXR0ZW4gZXZlbiBpZiBvbmx5IHRoZSByZWZzIGFyZSBjb3BpZWQgdG8gYW4gZXh0ZXJuYWwgdmFyaWFibGUsCi0jIHNvIHdlIHNob3VsZCBkdXAgdGhlIHN0cnVjdHVyZXMgaW4gdGhlaXIgZW50aXJldHkuICBVc2luZyBhbiBleHRlcm5hbGx5Ci0jIHBhc3NlZCBwb29sIChpbnN0ZWFkIG9mIG91ciB0ZW1wb3JhcnkgYW5kIHF1aWNrbHkgY2xlYXJlZCBwb29sIGluCi0jIEdpdDo6U1ZOOjpSYSkgZG9lcyBub3QgaGVscCBtYXR0ZXJzIGF0IGFsbC4uLgotc3ViIGR1cF9jaGFuZ2VkX3BhdGhzIHsKLQlteSAoJHBhdGhzKSA9IEBfOwotCXJldHVybiB1bmRlZiB1bmxlc3MgJHBhdGhzOwotCW15ICVyZXQ7Ci0JZm9yZWFjaCBteSAkcCAoa2V5cyAlJHBhdGhzKSB7Ci0JCW15ICRpID0gJHBhdGhzLT57JHB9OwotCQlteSAlcyA9IG1hcCB7ICRfID0+ICRpLT4kXyB9Ci0JCSAgICAgICAgICAgICAgcXcvY29weWZyb21fcGF0aCBjb3B5ZnJvbV9yZXYgYWN0aW9uLzsKLQkJJHJldHskcH0gPSBcJXM7Ci0JfQotCVwlcmV0OwotfQotCiBwYWNrYWdlIEdpdDo6U1ZOOjpMb2c7CiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzOwogdXNlIFBPU0lYIHF3L3N0cmZ0aW1lLzsKK3VzZSBUaW1lOjpMb2NhbDsKIHVzZSBjb25zdGFudCBjb21taXRfbG9nX3NlcGFyYXRvciA9PiAoJy0nIHggNzIpIC4gIlxuIjsKIHVzZSB2YXJzIHF3LyRUWiAkbGltaXQgJGNvbG9yICRwYWdlciAkbm9uX3JlY3Vyc2l2ZSAkdmVyYm9zZSAkb25lbGluZQogICAgICAgICAgICAgJXJ1c2VycyAkc2hvd19jb21taXQgJGluY3JlbWVudGFsLzsKQEAgLTQ1MjUsNyArNTAwMiwxMiBAQAogfQogCiBzdWIgZm9ybWF0X3N2bl9kYXRlIHsKLQlyZXR1cm4gc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTICV6ICglYSwgJWQgJWIgJVkpIiwgbG9jYWx0aW1lKHNoaWZ0KSk7CisJIyBzb21lIHN5c3RtZXMgZG9uJ3QgaGFuZGxlIG9yIG1pc2hhbmRsZSAleiwgc28gYmUgY3JlYXRpdmUuCisJbXkgJHQgPSBzaGlmdCB8fCB0aW1lOworCW15ICRnbSA9IHRpbWVsb2NhbChnbXRpbWUoJHQpKTsKKwlteSAkc2lnbiA9IHF3KCArICsgLSApWyAkdCA8PT4gJGdtIF07CisJbXkgJGdtb2ZmID0gc3ByaW50ZigiJXMlMDJkJTAyZCIsICRzaWduLCAoZ210aW1lKGFicygkdCAtICRnbSkpKVsyLDFdKTsKKwlyZXR1cm4gc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTICRnbW9mZiAoJWEsICVkICViICVZKSIsIGxvY2FsdGltZSgkdCkpOwogfQogCiBzdWIgcGFyc2VfZ2l0X2RhdGUgewpAQCAtNDc2NywxMSArNTI0OSwyMiBAQAogCQkJCQkJICAnLS0nLCAkcGF0aCk7CiAJCW15ICgkc2hhMSk7CiAJCW15ICVhdXRob3JzOworCQlteSBAYnVmZmVyOworCQlteSAlZHNoYTsgI2Rpc3RpbmN0IHNoYSBrZXlzCisKIAkJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJCXB1c2ggQGJ1ZmZlciwgJGxpbmU7CiAJCQlpZiAoJGxpbmUgPX4gL14oW1s6eGRpZ2l0Ol1dezQwfSlcc1xkK1xzXGQrLykgewotCQkJCSRzaGExID0gJDE7Ci0JCQkJKHVuZGVmLCAkcmV2LCB1bmRlZikgPSA6OmNtdF9tZXRhZGF0YSgkMSk7Ci0JCQkJJHJldiA9ICcwJyBpZiAoISRyZXYpOworCQkJCSRkc2hheyQxfSA9IDE7CisJCQl9CisJCX0KKworCQlteSAkczJyID0gOjpjbXRfc2hhMnJldl9iYXRjaChba2V5cyAlZHNoYV0pOworCisJCWZvcmVhY2ggbXkgJGxpbmUgKEBidWZmZXIpIHsKKwkJCWlmICgkbGluZSA9fiAvXihbWzp4ZGlnaXQ6XV17NDB9KVxzXGQrXHNcZCsvKSB7CisJCQkJJHJldiA9ICRzMnItPnskMX07CisJCQkJJHJldiA9ICcwJyBpZiAoISRyZXYpCiAJCQl9CiAJCQllbHNpZiAoJGxpbmUgPX4gL15hdXRob3IgKC4qKS8pIHsKIAkJCQkkYXV0aG9yc3skcmV2fSA9ICQxOwpkaWZmIC0tZ2l0IGEvZ2l0LXdlYi0tYnJvd3NlLnNoIGIvZ2l0LXdlYi0tYnJvd3NlLnNoCmluZGV4IDc4ZDIzNmIuLjRmNWM3NDAgMTAwNzU1Ci0tLSBhL2dpdC13ZWItLWJyb3dzZS5zaAorKysgYi9naXQtd2ViLS1icm93c2Uuc2gKQEAgLTExNSw3ICsxMTUsNyBAQAogCWJyb3dzZXJfY2FuZGlkYXRlcz0ib3BlbiAkYnJvd3Nlcl9jYW5kaWRhdGVzIgogICAgIGZpCiAgICAgIyAvYmluL3N0YXJ0IGluZGljYXRlcyBNaW5HVwotICAgIGlmIHRlc3QgLW4gL2Jpbi9zdGFydDsgdGhlbgorICAgIGlmIHRlc3QgLXggL2Jpbi9zdGFydDsgdGhlbgogCWJyb3dzZXJfY2FuZGlkYXRlcz0ic3RhcnQgJGJyb3dzZXJfY2FuZGlkYXRlcyIKICAgICBmaQogCkBAIC0xNjEsOSArMTYxLDEyIEBACiAJCTs7CiAJZXNhYwogCTs7Ci0gICAgdzNtfGxpbmtzfGx5bnh8b3BlbnxzdGFydCkKKyAgICB3M218bGlua3N8bHlueHxvcGVuKQogCWV2YWwgIiRicm93c2VyX3BhdGgiICIkQCIKIAk7OworICAgIHN0YXJ0KQorICAgICAgICBleGVjICIkYnJvd3Nlcl9wYXRoIiAnIndlYi1icm93c2UiJyAiJEAiCisgICAgICAgIDs7CiAgICAgZGlsbG8pCiAJIiRicm93c2VyX3BhdGgiICIkQCIgJgogCTs7CmRpZmYgLS1naXQgYS9naXQuYyBiL2dpdC5jCmluZGV4IGFmNzQ3NjEuLjgwN2Q4NzUgMTAwNjQ0Ci0tLSBhL2dpdC5jCisrKyBiL2dpdC5jCkBAIC01LDcgKzUsNyBAQAogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAKIGNvbnN0IGNoYXIgZ2l0X3VzYWdlX3N0cmluZ1tdID0KLQkiZ2l0IFstLXZlcnNpb25dIFstLWV4ZWMtcGF0aFs9R0lUX0VYRUNfUEFUSF1dIFstcHwtLXBhZ2luYXRlfC0tbm8tcGFnZXJdIFstLWJhcmVdIFstLWdpdC1kaXI9R0lUX0RJUl0gWy0td29yay10cmVlPUdJVF9XT1JLX1RSRUVdIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdIjsKKwkiZ2l0IFstLXZlcnNpb25dIFstLWV4ZWMtcGF0aFs9R0lUX0VYRUNfUEFUSF1dIFstLWh0bWwtcGF0aF0gWy1wfC0tcGFnaW5hdGV8LS1uby1wYWdlcl0gWy0tYmFyZV0gWy0tZ2l0LWRpcj1HSVRfRElSXSBbLS13b3JrLXRyZWU9R0lUX1dPUktfVFJFRV0gWy0taGVscF0gQ09NTUFORCBbQVJHU10iOwogCiBjb25zdCBjaGFyIGdpdF9tb3JlX2luZm9fc3RyaW5nW10gPQogCSJTZWUgJ2dpdCBoZWxwIENPTU1BTkQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4iOwpAQCAtNDcsNyArNDcsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBoYW5kbGVfb3B0aW9ucyhjb25zdCBjaGFyKioqIGFyZ3YsIGludCogYXJnYywgaW50KiBlbnZjaGFuZ2VkKQorc3RhdGljIGludCBoYW5kbGVfb3B0aW9ucyhjb25zdCBjaGFyICoqKmFyZ3YsIGludCAqYXJnYywgaW50ICplbnZjaGFuZ2VkKQogewogCWludCBoYW5kbGVkID0gMDsKIApAQCAtNzUsNiArNzUsOSBAQAogCQkJCXB1dHMoZ2l0X2V4ZWNfcGF0aCgpKTsKIAkJCQlleGl0KDApOwogCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1odG1sLXBhdGgiKSkgeworCQkJcHV0cyhzeXN0ZW1fcGF0aChHSVRfSFRNTF9QQVRIKSk7CisJCQlleGl0KDApOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLXAiKSB8fCAhc3RyY21wKGNtZCwgIi0tcGFnaW5hdGUiKSkgewogCQkJdXNlX3BhZ2VyID0gMTsKIAkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tbm8tcGFnZXIiKSkgewpAQCAtMTMzLDcgKzEzNiw3IEBACiAJaW50IGVudmNoYW5nZWQgPSAwLCByZXQgPSAwLCBzYXZlZF9lcnJubyA9IGVycm5vOwogCWNvbnN0IGNoYXIgKnN1YmRpcjsKIAlpbnQgY291bnQsIG9wdGlvbl9jb3VudDsKLQljb25zdCBjaGFyKiogbmV3X2FyZ3Y7CisJY29uc3QgY2hhciAqKm5ld19hcmd2OwogCWNvbnN0IGNoYXIgKmFsaWFzX2NvbW1hbmQ7CiAJY2hhciAqYWxpYXNfc3RyaW5nOwogCWludCB1bnVzZWRfbm9uZ2l0OwpAQCAtMTU5LDcgKzE2Miw3IEBACiAJCQlpZiAocmV0ID49IDAgJiYgV0lGRVhJVEVEKHJldCkgJiYKIAkJCSAgICBXRVhJVFNUQVRVUyhyZXQpICE9IDEyNykKIAkJCQlleGl0KFdFWElUU1RBVFVTKHJldCkpOwotCQkJZGllKCJGYWlsZWQgdG8gcnVuICclcycgd2hlbiBleHBhbmRpbmcgYWxpYXMgJyVzJ1xuIiwKKwkJCWRpZSgiRmFpbGVkIHRvIHJ1biAnJXMnIHdoZW4gZXhwYW5kaW5nIGFsaWFzICclcyciLAogCQkJICAgIGFsaWFzX3N0cmluZyArIDEsIGFsaWFzX2NvbW1hbmQpOwogCQl9CiAJCWNvdW50ID0gc3BsaXRfY21kbGluZShhbGlhc19zdHJpbmcsICZuZXdfYXJndik7CkBAIC0xODQsMTEgKzE4NywxMCBAQAogCQkJCSAgInRyYWNlOiBhbGlhcyBleHBhbnNpb246ICVzID0+IiwKIAkJCQkgIGFsaWFzX2NvbW1hbmQpOwogCi0JCW5ld19hcmd2ID0geHJlYWxsb2MobmV3X2FyZ3YsIHNpemVvZihjaGFyKikgKgotCQkJCSAgICAoY291bnQgKyAqYXJnY3AgKyAxKSk7CisJCW5ld19hcmd2ID0geHJlYWxsb2MobmV3X2FyZ3YsIHNpemVvZihjaGFyICopICoKKwkJCQkgICAgKGNvdW50ICsgKmFyZ2NwKSk7CiAJCS8qIGluc2VydCBhZnRlciBjb21tYW5kIG5hbWUgKi8KLQkJbWVtY3B5KG5ld19hcmd2ICsgY291bnQsICphcmd2ICsgMSwgc2l6ZW9mKGNoYXIqKSAqICphcmdjcCk7Ci0JCW5ld19hcmd2W2NvdW50KyphcmdjcF0gPSBOVUxMOworCQltZW1jcHkobmV3X2FyZ3YgKyBjb3VudCwgKmFyZ3YgKyAxLCBzaXplb2YoY2hhciAqKSAqICphcmdjcCk7CiAKIAkJKmFyZ3YgPSBuZXdfYXJndjsKIAkJKmFyZ2NwICs9IGNvdW50IC0gMTsKQEAgLTE5Nyw3ICsxOTksNyBAQAogCX0KIAogCWlmIChzdWJkaXIgJiYgY2hkaXIoc3ViZGlyKSkKLQkJZGllKCJDYW5ub3QgY2hhbmdlIHRvICVzOiAlcyIsIHN1YmRpciwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJDYW5ub3QgY2hhbmdlIHRvICclcyciLCBzdWJkaXIpOwogCiAJZXJybm8gPSBzYXZlZF9lcnJubzsKIApAQCAtMjQzLDcgKzI0NSw3IEBACiAKIAlzdGF0dXMgPSBwLT5mbihhcmdjLCBhcmd2LCBwcmVmaXgpOwogCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXMgJiAweGZmOworCQlyZXR1cm4gc3RhdHVzOwogCiAJLyogU29tZWJvZHkgY2xvc2VkIHN0ZG91dD8gKi8KIAlpZiAoZnN0YXQoZmlsZW5vKHN0ZG91dCksICZzdCkpCkBAIC0yNTQsMTEgKzI1NiwxMSBAQAogCiAJLyogQ2hlY2sgZm9yIEVOT1NQQyBhbmQgRUlPIGVycm9ycy4uICovCiAJaWYgKGZmbHVzaChzdGRvdXQpKQotCQlkaWUoIndyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygid3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiKTsKIAlpZiAoZmVycm9yKHN0ZG91dCkpCiAJCWRpZSgidW5rbm93biB3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIpOwogCWlmIChmY2xvc2Uoc3Rkb3V0KSkKLQkJZGllKCJjbG9zZSBmYWlsZWQgb24gc3RhbmRhcmQgb3V0cHV0OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiY2xvc2UgZmFpbGVkIG9uIHN0YW5kYXJkIG91dHB1dCIpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzEsNiArMjczLDcgQEAKIAkJeyAiYW5ub3RhdGUiLCBjbWRfYW5ub3RhdGUsIFJVTl9TRVRVUCB9LAogCQl7ICJhcHBseSIsIGNtZF9hcHBseSB9LAogCQl7ICJhcmNoaXZlIiwgY21kX2FyY2hpdmUgfSwKKwkJeyAiYmlzZWN0LS1oZWxwZXIiLCBjbWRfYmlzZWN0X19oZWxwZXIsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCiAJCXsgImJsYW1lIiwgY21kX2JsYW1lLCBSVU5fU0VUVVAgfSwKIAkJeyAiYnJhbmNoIiwgY21kX2JyYW5jaCwgUlVOX1NFVFVQIH0sCiAJCXsgImJ1bmRsZSIsIGNtZF9idW5kbGUgfSwKQEAgLTMyMyw2ICszMjYsNyBAQAogCQl7ICJtZXJnZS1vdXJzIiwgY21kX21lcmdlX291cnMsIFJVTl9TRVRVUCB9LAogCQl7ICJtZXJnZS1yZWN1cnNpdmUiLCBjbWRfbWVyZ2VfcmVjdXJzaXZlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAogCQl7ICJtZXJnZS1zdWJ0cmVlIiwgY21kX21lcmdlX3JlY3Vyc2l2ZSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwkJeyAibWt0cmVlIiwgY21kX21rdHJlZSwgUlVOX1NFVFVQIH0sCiAJCXsgIm12IiwgY21kX212LCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAogCQl7ICJuYW1lLXJldiIsIGNtZF9uYW1lX3JldiwgUlVOX1NFVFVQIH0sCiAJCXsgInBhY2stb2JqZWN0cyIsIGNtZF9wYWNrX29iamVjdHMsIFJVTl9TRVRVUCB9LApAQCAtNDI1LDI2ICs0MjksMzcgQEAKIAlzdHJidWZfcmVsZWFzZSgmY21kKTsKIH0KIAorc3RhdGljIGludCBydW5fYXJndihpbnQgKmFyZ2NwLCBjb25zdCBjaGFyICoqKmFyZ3YpCit7CisJaW50IGRvbmVfYWxpYXMgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJLyogU2VlIGlmIGl0J3MgYW4gaW50ZXJuYWwgY29tbWFuZCAqLworCQloYW5kbGVfaW50ZXJuYWxfY29tbWFuZCgqYXJnY3AsICphcmd2KTsKKworCQkvKiAuLiB0aGVuIHRyeSB0aGUgZXh0ZXJuYWwgb25lcyAqLworCQlleGVjdl9kYXNoZWRfZXh0ZXJuYWwoKmFyZ3YpOworCisJCS8qIEl0IGNvdWxkIGJlIGFuIGFsaWFzIC0tIHRoaXMgd29ya3MgYXJvdW5kIHRoZSBpbnNhbml0eQorCQkgKiBvZiBvdmVycmlkaW5nICJnaXQgbG9nIiB3aXRoICJnaXQgc2hvdyIgYnkgaGF2aW5nCisJCSAqIGFsaWFzLmxvZyA9IHNob3cKKwkJICovCisJCWlmIChkb25lX2FsaWFzIHx8ICFoYW5kbGVfYWxpYXMoYXJnY3AsIGFyZ3YpKQorCQkJYnJlYWs7CisJCWRvbmVfYWxpYXMgPSAxOworCX0KKworCXJldHVybiBkb25lX2FsaWFzOworfQorCiAKIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKLQljb25zdCBjaGFyICpjbWQgPSBhcmd2WzBdICYmICphcmd2WzBdID8gYXJndlswXSA6ICJnaXQtaGVscCI7Ci0JY2hhciAqc2xhc2ggPSAoY2hhciAqKWNtZCArIHN0cmxlbihjbWQpOwotCWludCBkb25lX2FsaWFzID0gMDsKKwljb25zdCBjaGFyICpjbWQ7CiAKLQkvKgotCSAqIFRha2UgdGhlIGJhc2VuYW1lIG9mIGFyZ3ZbMF0gYXMgdGhlIGNvbW1hbmQKLQkgKiBuYW1lLCBhbmQgdGhlIGRpcm5hbWUgYXMgdGhlIGRlZmF1bHQgZXhlY19wYXRoCi0JICogaWYgd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyBiZXR0ZXIuCi0JICovCi0JZG8KLQkJLS1zbGFzaDsKLQl3aGlsZSAoY21kIDw9IHNsYXNoICYmICFpc19kaXJfc2VwKCpzbGFzaCkpOwotCWlmIChjbWQgPD0gc2xhc2gpIHsKLQkJKnNsYXNoKysgPSAwOwotCQlnaXRfc2V0X2FyZ3YwX3BhdGgoY21kKTsKLQkJY21kID0gc2xhc2g7Ci0JfQorCWNtZCA9IGdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CisJaWYgKCFjbWQpCisJCWNtZCA9ICJnaXQtaGVscCI7CiAKIAkvKgogCSAqICJnaXQteHh4eCIgaXMgdGhlIHNhbWUgYXMgImdpdCB4eHh4IiwgYnV0IHdlIG9idmlvdXNseToKQEAgLTQ4MiwzOCArNDk3LDI5IEBACiAKIAkvKgogCSAqIFdlIHVzZSBQQVRIIHRvIGZpbmQgZ2l0IGNvbW1hbmRzLCBidXQgd2UgcHJlcGVuZCBzb21lIGhpZ2hlcgotCSAqIHByZWNpZGVuY2UgcGF0aHM6IHRoZSAiLS1leGVjLXBhdGgiIG9wdGlvbiwgdGhlIEdJVF9FWEVDX1BBVEgKKwkgKiBwcmVjZWRlbmNlIHBhdGhzOiB0aGUgIi0tZXhlYy1wYXRoIiBvcHRpb24sIHRoZSBHSVRfRVhFQ19QQVRICiAJICogZW52aXJvbm1lbnQsIGFuZCB0aGUgJChnaXRleGVjZGlyKSBmcm9tIHRoZSBNYWtlZmlsZSBhdCBidWlsZAogCSAqIHRpbWUuCiAJICovCiAJc2V0dXBfcGF0aCgpOwogCiAJd2hpbGUgKDEpIHsKLQkJLyogU2VlIGlmIGl0J3MgYW4gaW50ZXJuYWwgY29tbWFuZCAqLwotCQloYW5kbGVfaW50ZXJuYWxfY29tbWFuZChhcmdjLCBhcmd2KTsKLQotCQkvKiAuLiB0aGVuIHRyeSB0aGUgZXh0ZXJuYWwgb25lcyAqLwotCQlleGVjdl9kYXNoZWRfZXh0ZXJuYWwoYXJndik7Ci0KLQkJLyogSXQgY291bGQgYmUgYW4gYWxpYXMgLS0gdGhpcyB3b3JrcyBhcm91bmQgdGhlIGluc2FuaXR5Ci0JCSAqIG9mIG92ZXJyaWRpbmcgImdpdCBsb2ciIHdpdGggImdpdCBzaG93IiBieSBoYXZpbmcKLQkJICogYWxpYXMubG9nID0gc2hvdwotCQkgKi8KLQkJaWYgKGRvbmVfYWxpYXMgfHwgIWhhbmRsZV9hbGlhcygmYXJnYywgJmFyZ3YpKQorCQlzdGF0aWMgaW50IGRvbmVfaGVscCA9IDA7CisJCXN0YXRpYyBpbnQgd2FzX2FsaWFzID0gMDsKKwkJd2FzX2FsaWFzID0gcnVuX2FyZ3YoJmFyZ2MsICZhcmd2KTsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKIAkJCWJyZWFrOwotCQlkb25lX2FsaWFzID0gMTsKLQl9Ci0KLQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7Ci0JCWlmIChkb25lX2FsaWFzKSB7CisJCWlmICh3YXNfYWxpYXMpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAiRXhwYW5zaW9uIG9mIGFsaWFzICclcycgZmFpbGVkOyAiCiAJCQkJIiclcycgaXMgbm90IGEgZ2l0LWNvbW1hbmRcbiIsCiAJCQkJY21kLCBhcmd2WzBdKTsKIAkJCWV4aXQoMSk7CiAJCX0KLQkJYXJndlswXSA9IGhlbHBfdW5rbm93bl9jbWQoY21kKTsKLQkJaGFuZGxlX2ludGVybmFsX2NvbW1hbmQoYXJnYywgYXJndik7Ci0JCWV4ZWN2X2Rhc2hlZF9leHRlcm5hbChhcmd2KTsKKwkJaWYgKCFkb25lX2hlbHApIHsKKwkJCWNtZCA9IGFyZ3ZbMF0gPSBoZWxwX3Vua25vd25fY21kKGNtZCk7CisJCQlkb25lX2hlbHAgPSAxOworCQl9IGVsc2UKKwkJCWJyZWFrOwogCX0KIAogCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iLApkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvZ2l0ayBiL2dpdGstZ2l0L2dpdGsKaW5kZXggZGMyYTQzOS4uNDYwNGM4MyAxMDA2NDQKLS0tIGEvZ2l0ay1naXQvZ2l0aworKysgYi9naXRrLWdpdC9naXRrCkBAIC0xODcsNyArMTg3LDggQEAKIAkgICAgIi0tdW50aWw9KiIgLSAiLS1iZWZvcmU9KiIgLSAiLS1tYXgtYWdlPSoiIC0gIi0tbWluLWFnZT0qIiAtCiAJICAgICItLWF1dGhvcj0qIiAtICItLWNvbW1pdHRlcj0qIiAtICItLWdyZXA9KiIgLSAiLVtpRV0iIC0KIAkgICAgIi0tcmVtb3ZlLWVtcHR5IiAtICItLWZpcnN0LXBhcmVudCIgLSAiLS1jaGVycnktcGljayIgLQotCSAgICAiLVMqIiAtICItLXBpY2theGUtYWxsIiAtICItLXBpY2theGUtcmVnZXgiIHsKKwkgICAgIi1TKiIgLSAiLS1waWNrYXhlLWFsbCIgLSAiLS1waWNrYXhlLXJlZ2V4IiAtCisJICAgICItLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24iIHsKIAkJIyBUaGVzZSBtZWFuIHRoYXQgd2UgZ2V0IGEgc3Vic2V0IG9mIHRoZSBjb21taXRzCiAJCXNldCBmaWx0ZXJlZCAxCiAJCWxhcHBlbmQgZ2xmbGFncyAkYXJnCkBAIC01MjEsNyArNTIyLDcgQEAKICAgICBpbmNyIHZpZXdhY3RpdmUoJHZpZXcpCiAgICAgc2V0IHZpZXdjb21wbGV0ZSgkdmlldykgMAogICAgIHJlc2V0X3BlbmRpbmdfc2VsZWN0IHt9Ci0gICAgbm93YnVzeSAkdmlldyAiUmVhZGluZyIKKyAgICBub3didXN5ICR2aWV3IFttYyAiUmVhZGluZyJdCiAgICAgaWYgeyRzaG93bmVhcnRhZ3N9IHsKIAlnZXRhbGxjb21taXRzCiAgICAgfQpAQCAtNzAxLDE2ICs3MDIsMTcgQEAKIH0KIAogcHJvYyBzcGxpdHZhcmMge3Agdn0gewotICAgIGdsb2JhbCB2YXJjaWQgdmFyY3N0YXJ0IHZhcmNjb21taXRzIHZhcmN0b2sKKyAgICBnbG9iYWwgdmFyY2lkIHZhcmNzdGFydCB2YXJjY29tbWl0cyB2YXJjdG9rIHZ0b2ttb2QKICAgICBnbG9iYWwgdnVwcHRyIHZkb3ducHRyIHZsZWZ0cHRyIHZiYWNrcHRyIHZhcmNpeCB2YXJjcm93IHZsYXN0aW5zCiAKICAgICBzZXQgb2EgJHZhcmNpZCgkdiwkcCkKKyAgICBzZXQgb3RvayBbbGluZGV4ICR2YXJjdG9rKCR2KSAkb2FdCiAgICAgc2V0IGFjICR2YXJjY29tbWl0cygkdiwkb2EpCiAgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICR2YXJjY29tbWl0cygkdiwkb2EpICRwXQogICAgIGlmIHskaSA8PSAwfSByZXR1cm4KICAgICBzZXQgbmEgW2xsZW5ndGggJHZhcmN0b2soJHYpXQogICAgICMgIiUiIHNvcnRzIGJlZm9yZSAiMCIuLi4KLSAgICBzZXQgdG9rICJbbGluZGV4ICR2YXJjdG9rKCR2KSAkb2FdJVtzdHJyZXAgJGldIgorICAgIHNldCB0b2sgIiRvdG9rJVtzdHJyZXAgJGldIgogICAgIGxhcHBlbmQgdmFyY3RvaygkdikgJHRvawogICAgIGxhcHBlbmQgdmFyY3Jvdygkdikge30KICAgICBsYXBwZW5kIHZhcmNpeCgkdikge30KQEAgLTczMCw2ICs3MzIsOSBAQAogICAgIGZvciB7c2V0IGIgW2xpbmRleCAkdmRvd25wdHIoJHYpICRuYV19IHskYiAhPSAwfSB7c2V0IGIgW2xpbmRleCAkdmxlZnRwdHIoJHYpICRiXX0gewogCWxzZXQgdnVwcHRyKCR2KSAkYiAkbmEKICAgICB9CisgICAgaWYge1tzdHJpbmcgY29tcGFyZSAkb3RvayAkdnRva21vZCgkdildIDw9IDB9IHsKKwltb2RpZnlfYXJjICR2ICRvYQorICAgIH0KIH0KIAogcHJvYyByZW51bWJlcnZhcmMge2Egdn0gewpAQCAtMTgyNiw3ICsxODMxLDkgQEAKICAgICBvcHRpb24gYWRkICpCdXR0b24uZm9udCB1aWZvbnQgc3RhcnR1cEZpbGUKICAgICBvcHRpb24gYWRkICpDaGVja2J1dHRvbi5mb250IHVpZm9udCBzdGFydHVwRmlsZQogICAgIG9wdGlvbiBhZGQgKlJhZGlvYnV0dG9uLmZvbnQgdWlmb250IHN0YXJ0dXBGaWxlCi0gICAgb3B0aW9uIGFkZCAqTWVudS5mb250IHVpZm9udCBzdGFydHVwRmlsZQorICAgIGlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBuZSAiYXF1YSJ9IHsKKwlvcHRpb24gYWRkICpNZW51LmZvbnQgdWlmb250IHN0YXJ0dXBGaWxlCisgICAgfQogICAgIG9wdGlvbiBhZGQgKk1lbnVidXR0b24uZm9udCB1aWZvbnQgc3RhcnR1cEZpbGUKICAgICBvcHRpb24gYWRkICpMYWJlbC5mb250IHVpZm9udCBzdGFydHVwRmlsZQogICAgIG9wdGlvbiBhZGQgKk1lc3NhZ2UuZm9udCB1aWZvbnQgc3RhcnR1cEZpbGUKQEAgLTE5MDYsOCArMTkxMyw4IEBACiAKICAgICAjIFRoZSAibWMiIGFyZ3VtZW50cyBoZXJlIGFyZSBwdXJlbHkgc28gdGhhdCB4Z2V0dGV4dAogICAgICMgc2VlcyB0aGUgZm9sbG93aW5nIHN0cmluZyBhcyBuZWVkaW5nIHRvIGJlIHRyYW5zbGF0ZWQKLSAgICBtYWtlbWVudSAuYmFyIHsKLQl7bWMgIkZpbGUiIGNhc2NhZGUgeworICAgIHNldCBmaWxlIHsKKwltYyAiRmlsZSIgY2FzY2FkZSB7CiAJICAgIHttYyAiVXBkYXRlIiBjb21tYW5kIHVwZGF0ZWNvbW1pdHMgLWFjY2VsZXJhdG9yIEY1fQogCSAgICB7bWMgIlJlbG9hZCIgY29tbWFuZCByZWxvYWRjb21taXRzIC1hY2NlbGVyYXRvciBNZXRhMS1GNX0KIAkgICAge21jICJSZXJlYWQgcmVmZXJlbmNlcyIgY29tbWFuZCByZXJlYWRyZWZzfQpAQCAtMTkxNywyMSArMTkyNCw0MSBAQAogCSAgICB7eHggIiIgc2VwYXJhdG9yfQogCSAgICB7bWMgIlF1aXQiIGNvbW1hbmQgZG9xdWl0IC1hY2NlbGVyYXRvciBNZXRhMS1RfQogCX19Ci0Je21jICJFZGl0IiBjYXNjYWRlIHsKKyAgICBzZXQgZWRpdCB7CisJbWMgIkVkaXQiIGNhc2NhZGUgewogCSAgICB7bWMgIlByZWZlcmVuY2VzIiBjb21tYW5kIGRvcHJlZnN9CiAJfX0KLQl7bWMgIlZpZXciIGNhc2NhZGUgeworICAgIHNldCB2aWV3IHsKKwltYyAiVmlldyIgY2FzY2FkZSB7CiAJICAgIHttYyAiTmV3IHZpZXcuLi4iIGNvbW1hbmQge25ld3ZpZXcgMH0gLWFjY2VsZXJhdG9yIFNoaWZ0LUY0fQogCSAgICB7bWMgIkVkaXQgdmlldy4uLiIgY29tbWFuZCBlZGl0dmlldyAtc3RhdGUgZGlzYWJsZWQgLWFjY2VsZXJhdG9yIEY0fQogCSAgICB7bWMgIkRlbGV0ZSB2aWV3IiBjb21tYW5kIGRlbHZpZXcgLXN0YXRlIGRpc2FibGVkfQogCSAgICB7eHggIiIgc2VwYXJhdG9yfQogCSAgICB7bWMgIkFsbCBmaWxlcyIgcmFkaW9idXR0b24ge3NlbGVjdGVkdmlldyAwfSAtY29tbWFuZCB7c2hvd3ZpZXcgMH19CiAJfX0KLQl7bWMgIkhlbHAiIGNhc2NhZGUgeworICAgIGlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBuZSAiYXF1YSJ9IHsKKwlzZXQgaGVscCB7CisJbWMgIkhlbHAiIGNhc2NhZGUgewogCSAgICB7bWMgIkFib3V0IGdpdGsiIGNvbW1hbmQgYWJvdXR9CiAJICAgIHttYyAiS2V5IGJpbmRpbmdzIiBjb21tYW5kIGtleXN9CiAJfX0KKwlzZXQgYmFyIFtsaXN0ICRmaWxlICRlZGl0ICR2aWV3ICRoZWxwXQorICAgIH0gZWxzZSB7CisJcHJvYyA6OnRrOjptYWM6OlNob3dQcmVmZXJlbmNlcyB7fSB7ZG9wcmVmc30KKwlwcm9jIDo6dGs6Om1hYzo6UXVpdCB7fSB7ZG9xdWl0fQorCWxzZXQgZmlsZSBlbmQgW2xyZXBsYWNlIFtsaW5kZXggJGZpbGUgZW5kXSBlbmQtMSBlbmRdCisJc2V0IGFwcGxlIHsKKwl4eCAiQXBwbGUiIGNhc2NhZGUgeworCSAgICB7bWMgIkFib3V0IGdpdGsiIGNvbW1hbmQgYWJvdXR9CisJICAgIHt4eCAiIiBzZXBhcmF0b3J9CisJfX0KKwlzZXQgaGVscCB7CisJbWMgIkhlbHAiIGNhc2NhZGUgeworCSAgICB7bWMgIktleSBiaW5kaW5ncyIgY29tbWFuZCBrZXlzfQorCX19CisJc2V0IGJhciBbbGlzdCAkYXBwbGUgJGZpbGUgJHZpZXcgJGhlbHBdCiAgICAgfQorICAgIG1ha2VtZW51IC5iYXIgJGJhcgogICAgIC4gY29uZmlndXJlIC1tZW51IC5iYXIKIAogICAgICMgdGhlIGd1aSBoYXMgdXBwZXIgYW5kIGxvd2VyIGhhbGYsIHBhcnRzIG9mIGEgcGFuZWQgd2luZG93LgpAQCAtMjExOSw3ICsyMTQ2LDcgQEAKICAgICBsYWJlbCAuYmxlZnQubWlkLmxhYmVsZGlmZmNvbnRleHQgLXRleHQgIiAgICAgIFttYyAiTGluZXMgb2YgY29udGV4dCJdOiAiCiAgICAgcGFjayAuYmxlZnQubWlkLmRpZmYgLmJsZWZ0Lm1pZC5vbGQgLmJsZWZ0Lm1pZC5uZXcgLXNpZGUgbGVmdAogICAgIHNwaW5ib3ggLmJsZWZ0Lm1pZC5kaWZmY29udGV4dCAtd2lkdGggNSAtZm9udCB0ZXh0Zm9udCBcCi0JLWZyb20gMSAtaW5jcmVtZW50IDEgLXRvIDEwMDAwMDAwIFwKKwktZnJvbSAwIC1pbmNyZW1lbnQgMSAtdG8gMTAwMDAwMDAgXAogCS12YWxpZGF0ZSBhbGwgLXZhbGlkYXRlY29tbWFuZCAiZGlmZmNvbnRleHR2YWxpZGF0ZSAlUCIgXAogCS10ZXh0dmFyaWFibGUgZGlmZmNvbnRleHRzdHJpbmcKICAgICAuYmxlZnQubWlkLmRpZmZjb250ZXh0IHNldCAkZGlmZmNvbnRleHQKQEAgLTIyMjUsMTAgKzIyNTIsMTYgQEAKIAl9CiAgICAgfQogCisgICAgaWYge1tpbmZvIGV4aXN0cyBnZW9tZXRyeShzdGF0ZSldICYmICRnZW9tZXRyeShzdGF0ZSkgZXEgInpvb21lZCJ9IHsKKyAgICAgICAgd20gc3RhdGUgLiAkZ2VvbWV0cnkoc3RhdGUpCisgICAgfQorCiAgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxIHthcXVhfX0gewogICAgICAgICBzZXQgTTFCIE0xCisgICAgICAgIHNldCA6OkJNICIzIgogICAgIH0gZWxzZSB7CiAgICAgICAgIHNldCBNMUIgQ29udHJvbAorICAgICAgICBzZXQgOjpCTSAiMiIKICAgICB9CiAKICAgICBiaW5kIC5wd2JvdHRvbSA8Q29uZmlndXJlPiB7cmVzaXplY2RldHBhbmVzICVXICV3fQpAQCAtMjI0NiwxMCArMjI3OSwxNCBAQAogICAgICAgICAgICAgICAgIHNldCBkZWx0YSBbZXhwciB7LSAoJUQpfV0KICAgICAgICAgICAgICAgICBhbGxjYW52cyB5dmlldyBzY3JvbGwgJGRlbHRhIHVuaXRzCiAgICAgICAgICAgICB9CisgICAgICAgICAgICBiaW5kYWxsIDxTaGlmdC1Nb3VzZVdoZWVsPiB7CisgICAgICAgICAgICAgICAgc2V0IGRlbHRhIFtleHByIHstICglRCl9XQorICAgICAgICAgICAgICAgICRjYW52IHh2aWV3IHNjcm9sbCAkZGVsdGEgdW5pdHMKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBiaW5kYWxsIDwyPiAiY2FudnNjYW4gbWFyayAlVyAleCAleSIKLSAgICBiaW5kYWxsIDxCMi1Nb3Rpb24+ICJjYW52c2NhbiBkcmFndG8gJVcgJXggJXkiCisgICAgYmluZGFsbCA8JDo6Qk0+ICJjYW52c2NhbiBtYXJrICVXICV4ICV5IgorICAgIGJpbmRhbGwgPEIkOjpCTS1Nb3Rpb24+ICJjYW52c2NhbiBkcmFndG8gJVcgJXggJXkiCiAgICAgYmluZGtleSA8SG9tZT4gc2VsZmlyc3RsaW5lCiAgICAgYmluZGtleSA8RW5kPiBzZWxsYXN0bGluZQogICAgIGJpbmQgLiA8S2V5LVVwPiAic2VsbmV4dGxpbmUgLTEiCkBAIC0yMjgxLDYgKzIzMTgsNyBAQAogICAgIGJpbmRrZXkgZCAiJGN0ZXh0IHl2aWV3IHNjcm9sbCAxOCB1bml0cyIKICAgICBiaW5ka2V5IHUgIiRjdGV4dCB5dmlldyBzY3JvbGwgLTE4IHVuaXRzIgogICAgIGJpbmRrZXkgLyB7Zm9jdXMgJGZzdHJpbmd9CisgICAgYmluZGtleSA8S2V5LUtQX0RpdmlkZT4ge2ZvY3VzICRmc3RyaW5nfQogICAgIGJpbmRrZXkgPEtleS1SZXR1cm4+IHtkb2ZpbmQgMSAxfQogICAgIGJpbmRrZXkgPyB7ZG9maW5kIC0xIDF9CiAgICAgYmluZGtleSBmIG5leHRmaWxlCkBAIC0yMzI3LDYgKzIzNjUsMTAgQEAKIAl7bWMgIkNyZWF0ZSBuZXcgYnJhbmNoIiBjb21tYW5kIG1rYnJhbmNofQogCXttYyAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiIGNvbW1hbmQgY2hlcnJ5cGlja30KIAl7bWMgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiIGNvbW1hbmQgcmVzZXRoZWFkfQorCXttYyAiTWFyayB0aGlzIGNvbW1pdCIgY29tbWFuZCBtYXJraGVyZX0KKwl7bWMgIlJldHVybiB0byBtYXJrIiBjb21tYW5kIGdvdG9tYXJrfQorCXttYyAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiIGNvbW1hbmQgZmluZF9jb21tb25fZGVzY30KKwl7bWMgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IiBjb21tYW5kIGNvbXBhcmVfY29tbWl0c30KICAgICB9CiAgICAgJHJvd2N0eG1lbnUgY29uZmlndXJlIC10ZWFyb2ZmIDAKIApAQCAtMjQ4Myw2ICsyNTI1LDkgQEAKICAgICBpZiB7IVt3aW5mbyB2aWV3YWJsZSAuXX0gcmV0dXJuCiAgICAgY2F0Y2ggewogCXNldCBmIFtvcGVuICJ+Ly5naXRrLW5ldyIgd10KKwlpZiB7JDo6dGNsX3BsYXRmb3JtKHBsYXRmb3JtKSBlcSB7d2luZG93c319IHsKKwkgICAgZmlsZSBhdHRyaWJ1dGVzICJ+Ly5naXRrLW5ldyIgLWhpZGRlbiB0cnVlCisJfQogCXB1dHMgJGYgW2xpc3Qgc2V0IG1haW5mb250ICRtYWluZm9udF0KIAlwdXRzICRmIFtsaXN0IHNldCB0ZXh0Zm9udCAkdGV4dGZvbnRdCiAJcHV0cyAkZiBbbGlzdCBzZXQgdWlmb250ICR1aWZvbnRdCkBAIC0yNTA4LDYgKzI1NTMsNyBAQAogCXB1dHMgJGYgW2xpc3Qgc2V0IHBlcmZpbGVfYXR0cnMgJHBlcmZpbGVfYXR0cnNdCiAKIAlwdXRzICRmICJzZXQgZ2VvbWV0cnkobWFpbikgW3dtIGdlb21ldHJ5IC5dIgorCXB1dHMgJGYgInNldCBnZW9tZXRyeShzdGF0ZSkgW3dtIHN0YXRlIC5dIgogCXB1dHMgJGYgInNldCBnZW9tZXRyeSh0b3B3aWR0aCkgW3dpbmZvIHdpZHRoIC50Zl0iCiAJcHV0cyAkZiAic2V0IGdlb21ldHJ5KHRvcGhlaWdodCkgW3dpbmZvIGhlaWdodCAudGZdIgogICAgICAgICBwdXRzICRmICJzZXQgZ2VvbWV0cnkocHdzYXNoMCkgXCJbLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2ggY29vcmQgMF1cIiIKQEAgLTMyMDAsOSArMzI0Niw4IEBACiAgICAgc2V0IGRpZmZ0b2ZpbGUgW2V4dGVybmFsX2RpZmZfZ2V0X29uZV9maWxlICRkaWZmaWR0byAkZmxpc3RfbWVudV9maWxlICRkaWZmZGlyXQogCiAgICAgaWYgeyRkaWZmZnJvbWZpbGUgbmUge30gJiYgJGRpZmZ0b2ZpbGUgbmUge319IHsKLSAgICAgICAgc2V0IGNtZCBbY29uY2F0IHwgW3NoZWxsc3BsaXQgJGV4dGRpZmZ0b29sXSBcCi0JCSAgICAgW2xpc3QgJGRpZmZmcm9tZmlsZSAkZGlmZnRvZmlsZV1dCi0gICAgICAgIGlmIHtbY2F0Y2gge3NldCBmbCBbb3BlbiAkY21kIHJdfSBlcnJdfSB7CisgICAgICAgIHNldCBjbWQgW2xpc3QgW3NoZWxsc3BsaXQgJGV4dGRpZmZ0b29sXSAkZGlmZmZyb21maWxlICRkaWZmdG9maWxlXQorICAgICAgICBpZiB7W2NhdGNoIHtzZXQgZmwgW29wZW4gfCRjbWQgcl19IGVycl19IHsKICAgICAgICAgICAgIGZpbGUgZGVsZXRlIC1mb3JjZSAkZGlmZmRpcgogICAgICAgICAgICAgZXJyb3JfcG9wdXAgIiRleHRkaWZmdG9vbDogW21jICJjb21tYW5kIGZhaWxlZDoiXSAkZXJyIgogICAgICAgICB9IGVsc2UgewpAQCAtMzM2Myw3ICszNDA4LDYgQEAKICAgICAjIGJlaW5nIGdpdmVuIGFuIGFic29sdXRlIHBhdGguLi4KICAgICBzZXQgZiBbbWFrZV9yZWxhdGl2ZSAkZl0KICAgICBsYXBwZW5kIGNtZGxpbmUgJGJhc2VfY29tbWl0ICRmCi0gICAgcHV0cyAiY21kbGluZT17JGNtZGxpbmV9IgogICAgIGlmIHtbY2F0Y2gge2V2YWwgZXhlYyAkY21kbGluZSAmfSBlcnJdfSB7CiAJZXJyb3JfcG9wdXAgIlttYyAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6Il0gJGVyciIKICAgICB9CkBAIC0zNjI4LDE3ICszNjcyLDM2IEBACiB9CiAKIHNldCBrbm93bl92aWV3X29wdGlvbnMgewotICAgIHtwZXJtICAgIGIgICAgLiB7fSAgICAgICAgICAgICAgIHttYyAiUmVtZW1iZXIgdGhpcyB2aWV3In19Ci0gICAge2FyZ3MgICAgdDUwPSArIHt9ICAgICAgICAgICAgICAge21jICJDb21taXRzIHRvIGluY2x1ZGUgKGFyZ3VtZW50cyB0byBnaXQgbG9nKToifX0KLSAgICB7YWxsICAgICBiICAgICogIi0tYWxsIiAgICAgICAgICB7bWMgIlVzZSBhbGwgcmVmcyJ9fQotICAgIHtkb3JkZXIgIGIgICAgLiB7Ii0tZGF0ZS1vcmRlciIgIi1kIn0gICAgICB7bWMgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSJ9fQotICAgIHtscmlnaHQgIGIgICAgLiAiLS1sZWZ0LXJpZ2h0IiAgIHttYyAiTWFyayBicmFuY2ggc2lkZXMifX0KLSAgICB7c2luY2UgICB0MTUgICsgeyItLXNpbmNlPSoiICItLWFmdGVyPSoifSAge21jICJTaW5jZSBkYXRlOiJ9fQotICAgIHt1bnRpbCAgIHQxNSAgLiB7Ii0tdW50aWw9KiIgIi0tYmVmb3JlPSoifSB7bWMgIlVudGlsIGRhdGU6In19Ci0gICAge2xpbWl0ICAgdDEwICArICItLW1heC1jb3VudD0qIiAge21jICJNYXggY291bnQ6In19Ci0gICAge3NraXAgICAgdDEwICAuICItLXNraXA9KiIgICAgICAge21jICJTa2lwOiJ9fQotICAgIHtmaXJzdCAgIGIgICAgLiAiLS1maXJzdC1wYXJlbnQiIHttYyAiTGltaXQgdG8gZmlyc3QgcGFyZW50In19Ci0gICAge2NtZCAgICAgdDUwPSArIHt9ICAgICAgICAgICAgICAge21jICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiJ9fQorICAgIHtwZXJtICAgICAgYiAgICAuICB7fSAgICAgICAgICAgICAgIHttYyAiUmVtZW1iZXIgdGhpcyB2aWV3In19CisgICAge3JlZmxhYmVsICBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6In19CisgICAge3JlZnMgICAgICB0MTUgIC4uIHt9ICAgICAgICAgICAgICAge21jICJCcmFuY2hlcyAmIHRhZ3M6In19CisgICAge2FsbHJlZnMgICBiICAgICouICItLWFsbCIgICAgICAgICAge21jICJBbGwgcmVmcyJ9fQorICAgIHticmFuY2hlcyAgYiAgICAuICAiLS1icmFuY2hlcyIgICAgIHttYyAiQWxsIChsb2NhbCkgYnJhbmNoZXMifX0KKyAgICB7dGFncyAgICAgIGIgICAgLiAgIi0tdGFncyIgICAgICAgICB7bWMgIkFsbCB0YWdzIn19CisgICAge3JlbW90ZXMgICBiICAgIC4gICItLXJlbW90ZXMiICAgICAge21jICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIn19CisgICAge2NvbW1pdGxibCBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6In19CisgICAge2F1dGhvciAgICB0MTUgIC4uICItLWF1dGhvcj0qIiAgICAge21jICJBdXRob3I6In19CisgICAge2NvbW1pdHRlciB0MTUgIC4gICItLWNvbW1pdHRlcj0qIiAge21jICJDb21taXR0ZXI6In19CisgICAge2xvZ2luZm8gICB0MTUgIC4uICItLWdyZXA9KiIgICAgICAge21jICJDb21taXQgTWVzc2FnZToifX0KKyAgICB7YWxsbWF0Y2ggIGIgICAgLi4gIi0tYWxsLW1hdGNoIiAgICB7bWMgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIn19CisgICAge2NoYW5nZXNfbCBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJDaGFuZ2VzIHRvIEZpbGVzOiJ9fQorICAgIHtwaWNrYXhlX3MgcjAgICAuICB7fSAgICAgICAgICAgICAgIHttYyAiRml4ZWQgU3RyaW5nIn19CisgICAge3BpY2theGVfdCByMSAgIC4gICItLXBpY2theGUtcmVnZXgiICB7bWMgIlJlZ3VsYXIgRXhwcmVzc2lvbiJ9fQorICAgIHtwaWNrYXhlICAgdDE1ICAuLiAiLVMqIiAgICAgICAgICAgIHttYyAiU2VhcmNoIHN0cmluZzoifX0KKyAgICB7ZGF0ZWxhYmVsIGwgICAgKyAge30gICAgICAgICAgICAgICB7bWMgIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAxNToyNzozOFwiKToifX0KKyAgICB7c2luY2UgICAgIHQxNSAgLi4gIHsiLS1zaW5jZT0qIiAiLS1hZnRlcj0qIn0gIHttYyAiU2luY2U6In19CisgICAge3VudGlsICAgICB0MTUgIC4gICB7Ii0tdW50aWw9KiIgIi0tYmVmb3JlPSoifSB7bWMgIlVudGlsOiJ9fQorICAgIHtsaW1pdF9sYmwgbCAgICArICB7fSAgICAgICAgICAgICAgIHttYyAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToifX0KKyAgICB7bGltaXQgICAgIHQxMCAgKi4gIi0tbWF4LWNvdW50PSoiICB7bWMgIk51bWJlciB0byBzaG93OiJ9fQorICAgIHtza2lwICAgICAgdDEwICAuICAiLS1za2lwPSoiICAgICAgIHttYyAiTnVtYmVyIHRvIHNraXA6In19CisgICAge21pc2NfbGJsICBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6In19CisgICAge2RvcmRlciAgICBiICAgICouIHsiLS1kYXRlLW9yZGVyIiAiLWQifSAgICAgIHttYyAiU3RyaWN0bHkgc29ydCBieSBkYXRlIn19CisgICAge2xyaWdodCAgICBiICAgIC4gICItLWxlZnQtcmlnaHQiICAge21jICJNYXJrIGJyYW5jaCBzaWRlcyJ9fQorICAgIHtmaXJzdCAgICAgYiAgICAuICAiLS1maXJzdC1wYXJlbnQiIHttYyAiTGltaXQgdG8gZmlyc3QgcGFyZW50In19CisgICAge3NtcGxoc3QgICBiICAgIC4gICItLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24iICAge21jICJTaW1wbGUgaGlzdG9yeSJ9fQorICAgIHthcmdzICAgICAgdDUwICAqLiB7fSAgICAgICAgICAgICAgIHttYyAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoifX0KKyAgICB7YWxscGF0aHMgIHBhdGggKyAge30gICAgICAgICAgICAgICB7bWMgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6In19CisgICAge2NtZCAgICAgICB0NTA9ICsgIHt9ICAgICAgICAgICAgICAge21jICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiJ9fQogICAgIH0KIAogcHJvYyBlbmNvZGVfdmlld19vcHRzIHtufSB7CkBAIC0zNjUwLDEzICszNzEzLDE5IEBACiAJaWYgeyRwYXR0ZXJucyBlcSB7fX0gY29udGludWUKIAlzZXQgcGF0dGVybiBbbGluZGV4ICRwYXR0ZXJucyAwXQogCi0Jc2V0IHZhbCAkbmV3dmlld29wdHMoJG4sW2xpbmRleCAkb3B0IDBdKQotCQogCWlmIHtbbGluZGV4ICRvcHQgMV0gZXEgImIifSB7CisJICAgIHNldCB2YWwgJG5ld3ZpZXdvcHRzKCRuLFtsaW5kZXggJG9wdCAwXSkKIAkgICAgaWYgeyR2YWx9IHsKIAkJbGFwcGVuZCByYXJncyAkcGF0dGVybgogCSAgICB9CisJfSBlbHNlaWYge1tyZWdleHAge15yKFxkKykkfSBbbGluZGV4ICRvcHQgMV0gdHlwZSB2YWx1ZV19IHsKKwkgICAgcmVnZXhwIHteKC4qXyl9IFtsaW5kZXggJG9wdCAwXSB1c2VsZXNzdmFyIGJ1dHRvbl9pZAorCSAgICBzZXQgdmFsICRuZXd2aWV3b3B0cygkbiwkYnV0dG9uX2lkKQorCSAgICBpZiB7JHZhbCBlcSAkdmFsdWV9IHsKKwkJbGFwcGVuZCByYXJncyAkcGF0dGVybgorCSAgICB9CiAJfSBlbHNlIHsKKwkgICAgc2V0IHZhbCAkbmV3dmlld29wdHMoJG4sW2xpbmRleCAkb3B0IDBdKQogCSAgICBzZXQgdmFsIFtzdHJpbmcgdHJpbSAkdmFsXQogCSAgICBpZiB7JHZhbCBuZSB7fX0gewogCQlzZXQgcGZpeCBbc3RyaW5nIHJhbmdlICRwYXR0ZXJuIDAgZW5kLTFdCkBAIC0zNjY0LDYgKzM3MzMsNyBAQAogCSAgICB9CiAJfQogICAgIH0KKyAgICBzZXQgcmFyZ3MgW2NvbmNhdCAkcmFyZ3MgW3NoZWxsc3BsaXQgJG5ld3ZpZXdvcHRzKCRuLHJlZnMpXV0KICAgICByZXR1cm4gW2NvbmNhdCAkcmFyZ3MgW3NoZWxsc3BsaXQgJG5ld3ZpZXdvcHRzKCRuLGFyZ3MpXV0KIH0KIApAQCAtMzY3MSwxNCArMzc0MSwyMiBAQAogICAgIGdsb2JhbCBrbm93bl92aWV3X29wdGlvbnMgbmV3dmlld29wdHMKIAogICAgIGZvcmVhY2ggb3B0ICRrbm93bl92aWV3X29wdGlvbnMgeworCXNldCBpZCBbbGluZGV4ICRvcHQgMF0KIAlpZiB7W2xpbmRleCAkb3B0IDFdIGVxICJiIn0geworCSAgICAjIENoZWNrYm94ZXMKKwkgICAgc2V0IHZhbCAwCisgICAgICAgIH0gZWxzZWlmIHtbcmVnZXhwIHtecihcZCspJH0gW2xpbmRleCAkb3B0IDFdXX0geworCSAgICAjIFJhZGlvYnV0dG9ucworCSAgICByZWdleHAge14oLipfKX0gJGlkIHVzZWxlc3N2YXIgaWQKIAkgICAgc2V0IHZhbCAwCiAJfSBlbHNlIHsKKwkgICAgIyBUZXh0IGZpZWxkcwogCSAgICBzZXQgdmFsIHt9CiAJfQotCXNldCBuZXd2aWV3b3B0cygkbixbbGluZGV4ICRvcHQgMF0pICR2YWwKKwlzZXQgbmV3dmlld29wdHMoJG4sJGlkKSAkdmFsCiAgICAgfQogICAgIHNldCBvYXJncyBbbGlzdF0KKyAgICBzZXQgcmVmYXJncyBbbGlzdF0KICAgICBmb3JlYWNoIGFyZyAkdmlld19hcmdzIHsKIAlpZiB7W3JlZ2V4cCAtLSB7Xi0oWzAtOV0rKSR9ICRhcmcgYXJnIGNudF0KIAkgICAgJiYgIVtpbmZvIGV4aXN0cyBmb3VuZChsaW1pdCldfSB7CkBAIC0zNjkyLDExICszNzcwLDE3IEBACiAJICAgIGlmIHtbaW5mbyBleGlzdHMgZm91bmQoJGlkKV19IGNvbnRpbnVlCiAJICAgIGZvcmVhY2ggcGF0dGVybiBbbGluZGV4ICRvcHQgM10gewogCQlpZiB7IVtzdHJpbmcgbWF0Y2ggJHBhdHRlcm4gJGFyZ119IGNvbnRpbnVlCi0JCWlmIHtbbGluZGV4ICRvcHQgMV0gbmUgImIifSB7CisJCWlmIHtbbGluZGV4ICRvcHQgMV0gZXEgImIifSB7CisJCSAgICAjIENoZWNrIGJ1dHRvbnMKKwkJICAgIHNldCB2YWwgMQorCQl9IGVsc2VpZiB7W3JlZ2V4cCB7XnIoXGQrKSR9IFtsaW5kZXggJG9wdCAxXSBtYXRjaCBudW1dfSB7CisJCSAgICAjIFJhZGlvIGJ1dHRvbnMKKwkJICAgIHJlZ2V4cCB7XiguKl8pfSAkaWQgdXNlbGVzc3ZhciBpZAorCQkgICAgc2V0IHZhbCAkbnVtCisJCX0gZWxzZSB7CisJCSAgICAjIFRleHQgaW5wdXQgZmllbGRzCiAJCSAgICBzZXQgc2l6ZSBbc3RyaW5nIGxlbmd0aCAkcGF0dGVybl0KIAkJICAgIHNldCB2YWwgW3N0cmluZyByYW5nZSAkYXJnIFtleHByIHskc2l6ZS0xfV0gZW5kXQotCQl9IGVsc2UgewotCQkgICAgc2V0IHZhbCAxCiAJCX0KIAkJc2V0IG5ld3ZpZXdvcHRzKCRuLCRpZCkgJHZhbAogCQlzZXQgZm91bmQoJGlkKSAxCkBAIC0zNzA1LDggKzM3ODksMTMgQEAKIAkgICAgaWYge1tpbmZvIGV4aXN0cyB2YWxdfSBicmVhawogCX0KIAlpZiB7W2luZm8gZXhpc3RzIHZhbF19IGNvbnRpbnVlCi0JbGFwcGVuZCBvYXJncyAkYXJnCisJaWYge1tyZWdleHAge14tfSAkYXJnXX0geworCSAgICBsYXBwZW5kIG9hcmdzICRhcmcKKwl9IGVsc2UgeworCSAgICBsYXBwZW5kIHJlZmFyZ3MgJGFyZworCX0KICAgICB9CisgICAgc2V0IG5ld3ZpZXdvcHRzKCRuLHJlZnMpIFtzaGVsbGFyZ2xpc3QgJHJlZmFyZ3NdCiAgICAgc2V0IG5ld3ZpZXdvcHRzKCRuLGFyZ3MpIFtzaGVsbGFyZ2xpc3QgJG9hcmdzXQogfQogCkBAIC0zNzM0LDcgKzM4MjMsNyBAQAogICAgIHNldCBuZXd2aWV3b3B0cygkY3VydmlldyxwZXJtKSAkdmlld3Blcm0oJGN1cnZpZXcpCiAgICAgc2V0IG5ld3ZpZXdvcHRzKCRjdXJ2aWV3LGNtZCkgICR2aWV3YXJnc2NtZCgkY3VydmlldykKICAgICBkZWNvZGVfdmlld19vcHRzICRjdXJ2aWV3ICR2aWV3YXJncygkY3VydmlldykKLSAgICB2aWV3ZWRpdG9yICR0b3AgJGN1cnZpZXcgIkdpdGs6IGVkaXQgdmlldyAkdmlld25hbWUoJGN1cnZpZXcpIgorICAgIHZpZXdlZGl0b3IgJHRvcCAkY3VydmlldyAiW21jICJHaXRrOiBlZGl0IHZpZXciXSAkdmlld25hbWUoJGN1cnZpZXcpIgogfQogCiBwcm9jIHZpZXdlZGl0b3Ige3RvcCBuIHRpdGxlfSB7CkBAIC0zNzQyLDE2ICszODMxLDE2IEBACiAgICAgZ2xvYmFsIGtub3duX3ZpZXdfb3B0aW9ucwogCiAgICAgdG9wbGV2ZWwgJHRvcAotICAgIHdtIHRpdGxlICR0b3AgJHRpdGxlCisgICAgd20gdGl0bGUgJHRvcCBbY29uY2F0ICR0aXRsZSBbbWMgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIl1dCiAgICAgbWFrZV90cmFuc2llbnQgJHRvcCAuCiAKICAgICAjIFZpZXcgbmFtZQogICAgIGZyYW1lICR0b3AubmZyCi0gICAgbGFiZWwgJHRvcC5ubCAtdGV4dCBbbWMgIk5hbWUiXQorICAgIGxhYmVsICR0b3AubmwgLXRleHQgW21jICJWaWV3IE5hbWU6Il0KICAgICBlbnRyeSAkdG9wLm5hbWUgLXdpZHRoIDIwIC10ZXh0dmFyaWFibGUgbmV3dmlld25hbWUoJG4pCiAgICAgcGFjayAkdG9wLm5mciAtaW4gJHRvcCAtZmlsbCB4IC1wYWR5IDUgLXBhZHggMwotICAgIHBhY2sgJHRvcC5ubCAtaW4gJHRvcC5uZnIgLXNpZGUgbGVmdCAtcGFkeCB7MCAzMH0KLSAgICBwYWNrICR0b3AubmFtZSAtaW4gJHRvcC5uZnIgLXNpZGUgbGVmdAorICAgIHBhY2sgJHRvcC5ubCAtaW4gJHRvcC5uZnIgLXNpZGUgbGVmdCAtcGFkeCB7MCA1fQorICAgIHBhY2sgJHRvcC5uYW1lIC1pbiAkdG9wLm5mciAtc2lkZSBsZWZ0IC1wYWR4IHswIDI1fQogCiAgICAgIyBWaWV3IG9wdGlvbnMKICAgICBzZXQgY2ZyYW1lICR0b3AubmZyCkBAIC0zNzcwLDE0ICszODU5LDI4IEBACiAJICAgIGZyYW1lICRjZnJhbWUKIAkgICAgcGFjayAkY2ZyYW1lIC1pbiAkdG9wIC1maWxsIHggLXBhZHkgMyAtcGFkeCAzCiAJICAgIHNldCBjZXhwYW5kIFtleHByIHskZmxhZ3MgZXEgIioifV0KKyAgICAgICAgfSBlbHNlaWYgeyRmbGFncyBlcSAiLi4iIHx8ICRmbGFncyBlcSAiKi4ifSB7CisJICAgIHNldCBjZnJhbWUgJHRvcC5mciRjbnQKKwkgICAgaW5jciBjbnQKKwkgICAgZnJhbWUgJGNmcmFtZQorCSAgICBwYWNrICRjZnJhbWUgLWluICR0b3AgLWZpbGwgeCAtcGFkeSAzIC1wYWR4IFtsaXN0IDE1IDNdCisJICAgIHNldCBjZXhwYW5kIFtleHByIHskZmxhZ3MgZXEgIiouIn1dCiAJfSBlbHNlIHsKIAkgICAgc2V0IGx4cGFkIDUKIAl9CiAKLQlpZiB7JHR5cGUgZXEgImIifSB7CisJaWYgeyR0eXBlIGVxICJsIn0geworICAgICAgICAgICAgbGFiZWwgJGNmcmFtZS5sXyRpZCAtdGV4dCAkdGl0bGUKKyAgICAgICAgICAgIHBhY2sgJGNmcmFtZS5sXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSBsZWZ0IC1wYWR5IFtsaXN0IDMgMF0gLWFuY2hvciB3CisJfSBlbHNlaWYgeyR0eXBlIGVxICJiIn0gewogCSAgICBjaGVja2J1dHRvbiAkY2ZyYW1lLmNfJGlkIC10ZXh0ICR0aXRsZSAtdmFyaWFibGUgbmV3dmlld29wdHMoJG4sJGlkKQogCSAgICBwYWNrICRjZnJhbWUuY18kaWQgLWluICRjZnJhbWUgLXNpZGUgbGVmdCBcCiAJCS1wYWR4IFtsaXN0ICRseHBhZCAwXSAtZXhwYW5kICRjZXhwYW5kIC1hbmNob3IgdworCX0gZWxzZWlmIHtbcmVnZXhwIHtecihcZCspJH0gJHR5cGUgdHlwZSBzel19IHsKKwkgICAgcmVnZXhwIHteKC4qXyl9ICRpZCB1c2VsZXNzdmFyIGJ1dHRvbl9pZAorCSAgICByYWRpb2J1dHRvbiAkY2ZyYW1lLmNfJGlkIC10ZXh0ICR0aXRsZSAtdmFyaWFibGUgbmV3dmlld29wdHMoJG4sJGJ1dHRvbl9pZCkgLXZhbHVlICRzegorCSAgICBwYWNrICRjZnJhbWUuY18kaWQgLWluICRjZnJhbWUgLXNpZGUgbGVmdCBcCisJCS1wYWR4IFtsaXN0ICRseHBhZCAwXSAtZXhwYW5kICRjZXhwYW5kIC1hbmNob3IgdwogCX0gZWxzZWlmIHtbcmVnZXhwIHtedChcZCspJH0gJHR5cGUgdHlwZSBzel19IHsKIAkgICAgbWVzc2FnZSAkY2ZyYW1lLmxfJGlkIC1hc3BlY3QgMTUwMCAtdGV4dCAkdGl0bGUKIAkgICAgZW50cnkgJGNmcmFtZS5lXyRpZCAtd2lkdGggJHN6IC1iYWNrZ3JvdW5kICRiZ2NvbG9yIFwKQEAgLTM3OTAsMjMgKzM4OTMsMjIgQEAKIAkJLXRleHR2YXJpYWJsZSBuZXd2aWV3b3B0cygkbiwkaWQpCiAJICAgIHBhY2sgJGNmcmFtZS5sXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSB0b3AgLXBhZHkgW2xpc3QgMyAwXSAtYW5jaG9yIHcKIAkgICAgcGFjayAkY2ZyYW1lLmVfJGlkIC1pbiAkY2ZyYW1lIC1zaWRlIHRvcCAtZmlsbCB4CisJfSBlbHNlaWYgeyR0eXBlIGVxICJwYXRoIn0geworCSAgICBtZXNzYWdlICR0b3AubCAtYXNwZWN0IDE1MDAgLXRleHQgJHRpdGxlCisJICAgIHBhY2sgJHRvcC5sIC1pbiAkdG9wIC1zaWRlIHRvcCAtcGFkeSBbbGlzdCAzIDBdIC1hbmNob3IgdyAtcGFkeCAzCisJICAgIHRleHQgJHRvcC50IC13aWR0aCA0MCAtaGVpZ2h0IDUgLWJhY2tncm91bmQgJGJnY29sb3IgLWZvbnQgdWlmb250CisJICAgIGlmIHtbaW5mbyBleGlzdHMgdmlld2ZpbGVzKCRuKV19IHsKKwkJZm9yZWFjaCBmICR2aWV3ZmlsZXMoJG4pIHsKKwkJICAgICR0b3AudCBpbnNlcnQgZW5kICRmCisJCSAgICAkdG9wLnQgaW5zZXJ0IGVuZCAiXG4iCisJCX0KKwkJJHRvcC50IGRlbGV0ZSB7ZW5kIC0gMWN9IGVuZAorCQkkdG9wLnQgbWFyayBzZXQgaW5zZXJ0IDAuMAorCSAgICB9CisJICAgIHBhY2sgJHRvcC50IC1pbiAkdG9wIC1zaWRlIHRvcCAtcGFkeSBbbGlzdCAwIDVdIC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR4IDMKIAl9CiAgICAgfQogCi0gICAgIyBQYXRoIGxpc3QKLSAgICBtZXNzYWdlICR0b3AubCAtYXNwZWN0IDE1MDAgXAotCS10ZXh0IFttYyAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiXQotICAgIHBhY2sgJHRvcC5sIC1pbiAkdG9wIC1zaWRlIHRvcCAtcGFkeSBbbGlzdCA3IDBdIC1hbmNob3IgdyAtcGFkeCAzCi0gICAgdGV4dCAkdG9wLnQgLXdpZHRoIDQwIC1oZWlnaHQgNSAtYmFja2dyb3VuZCAkYmdjb2xvciAtZm9udCB1aWZvbnQKLSAgICBpZiB7W2luZm8gZXhpc3RzIHZpZXdmaWxlcygkbildfSB7Ci0JZm9yZWFjaCBmICR2aWV3ZmlsZXMoJG4pIHsKLQkgICAgJHRvcC50IGluc2VydCBlbmQgJGYKLQkgICAgJHRvcC50IGluc2VydCBlbmQgIlxuIgotCX0KLQkkdG9wLnQgZGVsZXRlIHtlbmQgLSAxY30gZW5kCi0JJHRvcC50IG1hcmsgc2V0IGluc2VydCAwLjAKLSAgICB9Ci0gICAgcGFjayAkdG9wLnQgLWluICR0b3AgLXNpZGUgdG9wIC1wYWR5IFtsaXN0IDAgNV0gLWZpbGwgYm90aCAtZXhwYW5kIDEgLXBhZHggMwogICAgIGZyYW1lICR0b3AuYnV0cwogICAgIGJ1dHRvbiAkdG9wLmJ1dHMub2sgLXRleHQgW21jICJPSyJdIC1jb21tYW5kIFtsaXN0IG5ld3ZpZXdvayAkdG9wICRuXQogICAgIGJ1dHRvbiAkdG9wLmJ1dHMuYXBwbHkgLXRleHQgW21jICJBcHBseSAoRjUpIl0gLWNvbW1hbmQgW2xpc3QgbmV3dmlld29rICR0b3AgJG4gMV0KQEAgLTQwNDMsNyArNDE0NSw3IEBACiB9CiAKIHByb2MgYm9sZGVuIHtpZCBmb250fSB7Ci0gICAgZ2xvYmFsIGNhbnYgbGluZWh0YWcgY3VycmVudGlkIGJvbGRpZHMgbmVlZF9yZWRpc3BsYXkKKyAgICBnbG9iYWwgY2FudiBsaW5laHRhZyBjdXJyZW50aWQgYm9sZGlkcyBuZWVkX3JlZGlzcGxheSBtYXJrZWRpZAogCiAgICAgIyBuZWVkX3JlZGlzcGxheSA9IDEgbWVhbnMgdGhlIGRpc3BsYXkgaXMgc3RhbGUgYW5kIGFib3V0IHRvIGJlIHJlZHJhd24KICAgICBpZiB7JG5lZWRfcmVkaXNwbGF5fSByZXR1cm4KQEAgLTQwNTYsNiArNDE1OCw5IEBACiAJCSAgIC1maWxsIFskY2FudiBjZ2V0IC1zZWxlY3RiYWNrZ3JvdW5kXV0KIAkkY2FudiBsb3dlciAkdAogICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIG1hcmtlZGlkXSAmJiAkaWQgZXEgJG1hcmtlZGlkfSB7CisJbWFrZV9pZG1hcmsgJGlkCisgICAgfQogfQogCiBwcm9jIGJvbGRlbl9uYW1lIHtpZCBmb250fSB7CkBAIC01NTYwLDcgKzU2NjUsNyBAQAogICAgIGdsb2JhbCBjbWl0bGlzdGVkIGNvbW1pdGluZm8gcm93aWRsaXN0IHBhcmVudGxpc3QKICAgICBnbG9iYWwgcm93dGV4dHggaWRwb3MgaWR0YWdzIGlkaGVhZHMgaWRvdGhlcnJlZnMKICAgICBnbG9iYWwgbGluZWh0YWcgbGluZW50YWcgbGluZWR0YWcgc2VsZWN0ZWRsaW5lCi0gICAgZ2xvYmFsIGNhbnZ4bWF4IGJvbGRpZHMgYm9sZG5hbWVpZHMgZmdjb2xvcgorICAgIGdsb2JhbCBjYW52eG1heCBib2xkaWRzIGJvbGRuYW1laWRzIGZnY29sb3IgbWFya2VkaWQKICAgICBnbG9iYWwgbWFpbmhlYWRpZCBudWxsaWQgbnVsbGlkMiBjaXJjbGVpdGVtIGNpcmNsZWNvbG9ycyBjdHhidXQKIAogICAgICMgbGlzdGVkIGlzIDAgZm9yIGJvdW5kYXJ5LCAxIGZvciBub3JtYWwsIDIgZm9yIG5lZ2F0aXZlLCAzIGZvciBsZWZ0LCA0IGZvciByaWdodApAQCAtNTY0Miw2ICs1NzQ3LDkgQEAKICAgICBpZiB7JHNlbGVjdGVkbGluZSA9PSAkcm93fSB7CiAJbWFrZV9zZWNzZWwgJGlkCiAgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgbWFya2VkaWRdICYmICRtYXJrZWRpZCBlcSAkaWR9IHsKKwltYWtlX2lkbWFyayAkaWQKKyAgICB9CiAgICAgc2V0IHhyIFtleHByIHskeHQgKyBbZm9udCBtZWFzdXJlICRmb250ICRoZWFkbGluZV19XQogICAgIGlmIHskeHIgPiAkY2FudnhtYXh9IHsKIAlzZXQgY2FudnhtYXggJHhyCkBAIC01NzMxLDcgKzU4MzksNiBAQAogICAgIG9wdGltaXplX3Jvd3MgJHJvMSAwICRyMgogICAgIGlmIHskbmVlZF9yZWRpc3BsYXkgfHwgJG5yb3dzX2RyYXduID4gMjAwMH0gewogCWNsZWFyX2Rpc3BsYXkKLQlkcmF3dmlzaWJsZQogICAgIH0KIAogICAgICMgbWFrZSB0aGUgbGluZXMgam9pbiB0byBhbHJlYWR5LWRyYXduIHJvd3MgZWl0aGVyIHNpZGUKQEAgLTY0NDEsNiArNjU0OCwxNyBAQAogICAgIH0KIH0KIAorcHJvYyBhcHBlbmRzaG9ydGxpbmsge2lkIHtwcmUge319IHtwb3N0IHt9fX0geworICAgIGdsb2JhbCBjdGV4dCBsaW5rbnVtCisKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAkcHJlCisgICAgJGN0ZXh0IHRhZyBkZWxldGUgbGluayRsaW5rbnVtCisgICAgJGN0ZXh0IGluc2VydCBlbmQgW3N0cmluZyByYW5nZSAkaWQgMCA3XSBsaW5rJGxpbmtudW0KKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAkcG9zdAorICAgIHNldGxpbmsgJGlkIGxpbmskbGlua251bQorICAgIGluY3IgbGlua251bQorfQorCiBwcm9jIG1ha2VsaW5rIHtpZH0gewogICAgIGdsb2JhbCBwZW5kaW5nbGlua3MKIApAQCAtNjQ5Nyw3ICs2NjE1LDcgQEAKIAl9CiAgICAgfQogICAgIGlmIHtbbGxlbmd0aCAkdGFnc10gPiAkbWF4cmVmc30gewotCSRjdGV4dCBpbnNlcnQgJHBvcyAibWFueSAoW2xsZW5ndGggJHRhZ3NdKSIKKwkkY3RleHQgaW5zZXJ0ICRwb3MgIlttYyAibWFueSJdIChbbGxlbmd0aCAkdGFnc10pIgogICAgIH0gZWxzZSB7CiAJc2V0IHRhZ3MgW2xzb3J0IC1pbmRleCAwIC1kZWNyZWFzaW5nICR0YWdzXQogCXNldCBzZXAge30KQEAgLTY1ODQsNiArNjcwMiwxNiBAQAogICAgICRjYW52MyBsb3dlciAkdAogfQogCitwcm9jIG1ha2VfaWRtYXJrIHtpZH0geworICAgIGdsb2JhbCBsaW5laHRhZyBjYW52IGZnY29sb3IKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGxpbmVodGFnKCRpZCldfSByZXR1cm4KKyAgICAkY2FudiBkZWxldGUgbWFya2lkCisgICAgc2V0IHQgW2V2YWwgJGNhbnYgY3JlYXRlIHJlY3QgWyRjYW52IGJib3ggJGxpbmVodGFnKCRpZCldIFwKKwkgICAgICAgLXRhZ3MgbWFya2lkIC1vdXRsaW5lICRmZ2NvbG9yXQorICAgICRjYW52IHJhaXNlICR0Cit9CisKIHByb2Mgc2VsZWN0bGluZSB7bCBpc25ldyB7ZGVzaXJlZF9sb2Mge319fSB7CiAgICAgZ2xvYmFsIGNhbnYgY3RleHQgY29tbWl0aW5mbyBzZWxlY3RlZGxpbmUKICAgICBnbG9iYWwgY2FudnkwIGxpbmVzcGMgcGFyZW50cyBjaGlsZHJlbiBjdXJ2aWV3CkBAIC03MTgwLDcgKzczMDgsNyBAQAogICAgIGdsb2JhbCBkaWZmY29udGV4dHN0cmluZyBkaWZmY29udGV4dAogCiAgICAgaWYge1tzdHJpbmcgaXMgaW50ZWdlciAtc3RyaWN0ICRkaWZmY29udGV4dHN0cmluZ119IHsKLQlpZiB7JGRpZmZjb250ZXh0c3RyaW5nID4gMH0geworCWlmIHskZGlmZmNvbnRleHRzdHJpbmcgPj0gMH0gewogCSAgICBzZXQgZGlmZmNvbnRleHQgJGRpZmZjb250ZXh0c3RyaW5nCiAJICAgIHJlc2VsZWN0bGluZQogCX0KQEAgLTcxOTgsOCArNzMyNiwxMyBAQAogICAgIGdsb2JhbCBpZ25vcmVzcGFjZQogICAgIGdsb2JhbCBsaW1pdGRpZmZzIHZmaWxlbGltaXQgY3VydmlldwogICAgIGdsb2JhbCBkaWZmZW5jb2RpbmcgdGFyZ2V0bGluZSBkaWZmbnBhcmVudHMKKyAgICBnbG9iYWwgZ2l0X3ZlcnNpb24KIAotICAgIHNldCBjbWQgW2RpZmZjbWQgJGlkcyAiLXAgLUMgLS1jYyAtLW5vLWNvbW1pdC1pZCAtVSRkaWZmY29udGV4dCJdCisgICAgc2V0IHRleHRjb252IHt9CisgICAgaWYge1twYWNrYWdlIHZjb21wYXJlICRnaXRfdmVyc2lvbiAiMS42LjEiXSA+PSAwfSB7CisJc2V0IHRleHRjb252ICItLXRleHRjb252IgorICAgIH0KKyAgICBzZXQgY21kIFtkaWZmY21kICRpZHMgIi1wICR0ZXh0Y29udiAtQyAtLWNjIC0tbm8tY29tbWl0LWlkIC1VJGRpZmZjb250ZXh0Il0KICAgICBpZiB7JGlnbm9yZXNwYWNlfSB7CiAJYXBwZW5kIGNtZCAiIC13IgogICAgIH0KQEAgLTcyMTQsNyArNzM0Nyw3IEBACiAgICAgc2V0IGRpZmZucGFyZW50cyAwCiAgICAgc2V0IGRpZmZpbmhkciAwCiAgICAgc2V0IGRpZmZlbmNvZGluZyBbZ2V0X3BhdGhfZW5jb2Rpbmcge31dCi0gICAgZmNvbmZpZ3VyZSAkYmRmIC1ibG9ja2luZyAwIC1lbmNvZGluZyBiaW5hcnkKKyAgICBmY29uZmlndXJlICRiZGYgLWJsb2NraW5nIDAgLWVuY29kaW5nIGJpbmFyeSAtZW9mY2hhciB7fQogICAgIHNldCBibG9iZGlmZmZkKCRpZHMpICRiZGYKICAgICBmaWxlcnVuICRiZGYgW2xpc3QgZ2V0YmxvYmRpZmZsaW5lICRiZGYgJGRpZmZpZHNdCiB9CkBAIC03MzY1LDcgKzc0OTgsOCBAQAogCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiJGxpbmVcbiIgZmlsZXNlcAogCiAJfSBlbHNlIHsKLQkgICAgc2V0IGxpbmUgW2VuY29kaW5nIGNvbnZlcnRmcm9tICRkaWZmZW5jb2RpbmcgJGxpbmVdCisJICAgIHNldCBsaW5lIFtzdHJpbmcgbWFwIHtceDFBIF5afSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSAkZGlmZmVuY29kaW5nICRsaW5lXV0KIAkgICAgIyBwYXJzZSB0aGUgcHJlZml4IC0gb25lICcgJywgJy0nIG9yICcrJyBmb3IgZWFjaCBwYXJlbnQKIAkgICAgc2V0IHByZWZpeCBbc3RyaW5nIHJhbmdlICRsaW5lIDAgW2V4cHIgeyRkaWZmbnBhcmVudHMgLSAxfV1dCiAJICAgIHNldCB0YWcgW2V4cHIgeyRkaWZmbnBhcmVudHMgPiAxPyAibSI6ICJkIn1dCkBAIC03OTY4LDcgKzgxMDIsNyBAQAogCiBwcm9jIHJvd21lbnUge3ggeSBpZH0gewogICAgIGdsb2JhbCByb3djdHhtZW51IHNlbGVjdGVkbGluZSByb3dtZW51aWQgY3VydmlldwotICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMiBmYWtlcm93bWVudSBtYWluaGVhZAorICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMiBmYWtlcm93bWVudSBtYWluaGVhZCBtYXJrZWRpZAogCiAgICAgc3RvcGZpbmRpbmcKICAgICBzZXQgcm93bWVudWlkICRpZApAQCAtNzk4NCw2ICs4MTE4LDE1IEBACiAJfSBlbHNlIHsKIAkgICAgJG1lbnUgZW50cnljb25maWd1cmUgNyAtbGFiZWwgW21jICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIgJG1haW5oZWFkXSAtc3RhdGUgZGlzYWJsZWQKIAl9CisJaWYge1tpbmZvIGV4aXN0cyBtYXJrZWRpZF0gJiYgJG1hcmtlZGlkIG5lICRpZH0geworCSAgICAkbWVudSBlbnRyeWNvbmZpZ3VyZSA5IC1zdGF0ZSBub3JtYWwKKwkgICAgJG1lbnUgZW50cnljb25maWd1cmUgMTAgLXN0YXRlIG5vcm1hbAorCSAgICAkbWVudSBlbnRyeWNvbmZpZ3VyZSAxMSAtc3RhdGUgbm9ybWFsCisJfSBlbHNlIHsKKwkgICAgJG1lbnUgZW50cnljb25maWd1cmUgOSAtc3RhdGUgZGlzYWJsZWQKKwkgICAgJG1lbnUgZW50cnljb25maWd1cmUgMTAgLXN0YXRlIGRpc2FibGVkCisJICAgICRtZW51IGVudHJ5Y29uZmlndXJlIDExIC1zdGF0ZSBkaXNhYmxlZAorCX0KICAgICB9IGVsc2UgewogCXNldCBtZW51ICRmYWtlcm93bWVudQogICAgIH0KQEAgLTc5OTMsNiArODEzNiwxNjIgQEAKICAgICB0a19wb3B1cCAkbWVudSAkeCAkeQogfQogCitwcm9jIG1hcmtoZXJlIHt9IHsKKyAgICBnbG9iYWwgcm93bWVudWlkIG1hcmtlZGlkIGNhbnYKKworICAgIHNldCBtYXJrZWRpZCAkcm93bWVudWlkCisgICAgbWFrZV9pZG1hcmsgJG1hcmtlZGlkCit9CisKK3Byb2MgZ290b21hcmsge30geworICAgIGdsb2JhbCBtYXJrZWRpZAorCisgICAgaWYge1tpbmZvIGV4aXN0cyBtYXJrZWRpZF19IHsKKwlzZWxieWlkICRtYXJrZWRpZAorICAgIH0KK30KKworcHJvYyByZXBsYWNlX2J5X2tpZHMge2wgcn0geworICAgIGdsb2JhbCBjdXJ2aWV3IGNoaWxkcmVuCisKKyAgICBzZXQgaWQgW2NvbW1pdG9ucm93ICRyXQorICAgIHNldCBsIFtscmVwbGFjZSAkbCAwIDBdCisgICAgZm9yZWFjaCBraWQgJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkgeworCWxhcHBlbmQgbCBbcm93b2Zjb21taXQgJGtpZF0KKyAgICB9CisgICAgcmV0dXJuIFtsc29ydCAtaW50ZWdlciAtZGVjcmVhc2luZyAtdW5pcXVlICRsXQorfQorCitwcm9jIGZpbmRfY29tbW9uX2Rlc2Mge30geworICAgIGdsb2JhbCBtYXJrZWRpZCByb3dtZW51aWQgY3VydmlldyBjaGlsZHJlbgorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgbWFya2VkaWRdfSByZXR1cm4KKyAgICBpZiB7IVtjb21taXRpbnZpZXcgJG1hcmtlZGlkICRjdXJ2aWV3XSB8fAorCSFbY29tbWl0aW52aWV3ICRyb3dtZW51aWQgJGN1cnZpZXddfSByZXR1cm4KKyAgICAjc2V0IHQxIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBzZXQgbDEgW2xpc3QgW3Jvd29mY29tbWl0ICRtYXJrZWRpZF1dCisgICAgc2V0IGwyIFtsaXN0IFtyb3dvZmNvbW1pdCAkcm93bWVudWlkXV0KKyAgICB3aGlsZSAxIHsKKwlzZXQgcjEgW2xpbmRleCAkbDEgMF0KKwlzZXQgcjIgW2xpbmRleCAkbDIgMF0KKwlpZiB7JHIxIGVxIHt9IHx8ICRyMiBlcSB7fX0gYnJlYWsKKwlpZiB7JHIxID09ICRyMn0geworCSAgICBzZWxlY3RsaW5lICRyMSAxCisJICAgIGJyZWFrCisJfQorCWlmIHskcjEgPiAkcjJ9IHsKKwkgICAgc2V0IGwxIFtyZXBsYWNlX2J5X2tpZHMgJGwxICRyMV0KKwl9IGVsc2UgeworCSAgICBzZXQgbDIgW3JlcGxhY2VfYnlfa2lkcyAkbDIgJHIyXQorCX0KKyAgICB9CisgICAgI3NldCB0MiBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgI3B1dHMgInRvb2sgW2V4cHIgeyR0Mi0kdDF9XW1zIgorfQorCitwcm9jIGNvbXBhcmVfY29tbWl0cyB7fSB7CisgICAgZ2xvYmFsIG1hcmtlZGlkIHJvd21lbnVpZCBjdXJ2aWV3IGNoaWxkcmVuCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBtYXJrZWRpZF19IHJldHVybgorICAgIGlmIHshW2NvbW1pdGludmlldyAkbWFya2VkaWQgJGN1cnZpZXddfSByZXR1cm4KKyAgICBhZGR0b2hpc3RvcnkgW2xpc3QgZG9fY21wX2NvbW1pdHMgJG1hcmtlZGlkICRyb3dtZW51aWRdCisgICAgZG9fY21wX2NvbW1pdHMgJG1hcmtlZGlkICRyb3dtZW51aWQKK30KKworcHJvYyBnZXRwYXRjaGlkIHtpZH0geworICAgIGdsb2JhbCBwYXRjaGlkcworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgcGF0Y2hpZHMoJGlkKV19IHsKKwlzZXQgY21kIFtkaWZmY21kIFtsaXN0ICRpZF0gey1wIC0tcm9vdH1dCisJIyB0cmltIG9mZiB0aGUgaW5pdGlhbCAifCIKKwlzZXQgY21kIFtscmFuZ2UgJGNtZCAxIGVuZF0KKwlpZiB7W2NhdGNoIHsKKwkgICAgc2V0IHggW2V2YWwgZXhlYyAkY21kIHwgZ2l0IHBhdGNoLWlkXQorCSAgICBzZXQgcGF0Y2hpZHMoJGlkKSBbbGluZGV4ICR4IDBdCisJfV19IHsKKwkgICAgc2V0IHBhdGNoaWRzKCRpZCkgImVycm9yIgorCX0KKyAgICB9CisgICAgcmV0dXJuICRwYXRjaGlkcygkaWQpCit9CisKK3Byb2MgZG9fY21wX2NvbW1pdHMge2EgYn0geworICAgIGdsb2JhbCBjdGV4dCBjdXJ2aWV3IHBhcmVudHMgY2hpbGRyZW4gcGF0Y2hpZHMgY29tbWl0aW5mbworCisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgIGNsZWFyX2N0ZXh0CisgICAgaW5pdF9mbGlzdCB7fQorICAgIGZvciB7c2V0IGkgMH0geyRpIDwgMTAwfSB7aW5jciBpfSB7CisJc2V0IHNraXBhIDAKKwlzZXQgc2tpcGIgMAorCWlmIHtbbGxlbmd0aCAkcGFyZW50cygkY3VydmlldywkYSldID4gMX0geworCSAgICBhcHBlbmRzaG9ydGxpbmsgJGEgW21jICJTa2lwcGluZyBtZXJnZSBjb21taXQgIl0gIlxuIgorCSAgICBzZXQgc2tpcGEgMQorCX0gZWxzZSB7CisJICAgIHNldCBwYXRjaGEgW2dldHBhdGNoaWQgJGFdCisJfQorCWlmIHtbbGxlbmd0aCAkcGFyZW50cygkY3VydmlldywkYildID4gMX0geworCSAgICBhcHBlbmRzaG9ydGxpbmsgJGIgW21jICJTa2lwcGluZyBtZXJnZSBjb21taXQgIl0gIlxuIgorCSAgICBzZXQgc2tpcGIgMQorCX0gZWxzZSB7CisJICAgIHNldCBwYXRjaGIgW2dldHBhdGNoaWQgJGJdCisJfQorCWlmIHshJHNraXBhICYmICEkc2tpcGJ9IHsKKwkgICAgc2V0IGhlYWRhIFtsaW5kZXggJGNvbW1pdGluZm8oJGEpIDBdCisJICAgIHNldCBoZWFkYiBbbGluZGV4ICRjb21taXRpbmZvKCRiKSAwXQorCSAgICBpZiB7JHBhdGNoYSBlcSAiZXJyb3IifSB7CisJCWFwcGVuZHNob3J0bGluayAkYSBbbWMgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICJdIFwKKwkJICAgIFttYyAiIC0gc3RvcHBpbmdcbiJdCisJCWJyZWFrCisJICAgIH0KKwkgICAgaWYgeyRwYXRjaGIgZXEgImVycm9yIn0geworCQlhcHBlbmRzaG9ydGxpbmsgJGIgW21jICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiXSBcCisJCSAgICBbbWMgIiAtIHN0b3BwaW5nXG4iXQorCQlicmVhaworCSAgICB9CisJICAgIGlmIHskcGF0Y2hhIGVxICRwYXRjaGJ9IHsKKwkJaWYgeyRoZWFkYSBlcSAkaGVhZGJ9IHsKKwkJICAgIGFwcGVuZHNob3J0bGluayAkYSBbbWMgIkNvbW1pdCAiXQorCQkgICAgYXBwZW5kc2hvcnRsaW5rICRiICIgPT0gIiAiICAkaGVhZGFcbiIKKwkJfSBlbHNlIHsKKwkJICAgIGFwcGVuZHNob3J0bGluayAkYSBbbWMgIkNvbW1pdCAiXSAiICAkaGVhZGFcbiIKKwkJICAgIGFwcGVuZHNob3J0bGluayAkYiBbbWMgIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuICAgICAgICJdIFwKKwkJCSIgICRoZWFkYlxuIgorCQl9CisJCXNldCBza2lwYSAxCisJCXNldCBza2lwYiAxCisJICAgIH0gZWxzZSB7CisJCSRjdGV4dCBpbnNlcnQgZW5kICJcbiIKKwkJYXBwZW5kc2hvcnRsaW5rICRhIFttYyAiQ29tbWl0ICJdICIgICRoZWFkYVxuIgorCQlhcHBlbmRzaG9ydGxpbmsgJGIgW21jICIgZGlmZmVycyBmcm9tXG4gICAgICAgIl0gXAorCQkgICAgIiAgJGhlYWRiXG4iCisJCSRjdGV4dCBpbnNlcnQgZW5kIFttYyAiLSBzdG9wcGluZ1xuIl0KKwkJYnJlYWsKKwkgICAgfQorCX0KKwlpZiB7JHNraXBhfSB7CisJICAgIGlmIHtbbGxlbmd0aCAkY2hpbGRyZW4oJGN1cnZpZXcsJGEpXSAhPSAxfSB7CisJCSRjdGV4dCBpbnNlcnQgZW5kICJcbiIKKwkJYXBwZW5kc2hvcnRsaW5rICRhIFttYyAiQ29tbWl0ICJdIFwKKwkJICAgIFttYyAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iIFwKKwkJCSBbbGxlbmd0aCAkY2hpbGRyZW4oJGN1cnZpZXcsJGEpXV0KKwkJYnJlYWsKKwkgICAgfQorCSAgICBzZXQgYSBbbGluZGV4ICRjaGlsZHJlbigkY3VydmlldywkYSkgMF0KKwl9CisJaWYgeyRza2lwYn0geworCSAgICBpZiB7W2xsZW5ndGggJGNoaWxkcmVuKCRjdXJ2aWV3LCRiKV0gIT0gMX0geworCQlhcHBlbmRzaG9ydGxpbmsgJGIgW21jICJDb21taXQgIl0gXAorCQkgICAgW21jICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIgXAorCQkJIFtsbGVuZ3RoICRjaGlsZHJlbigkY3VydmlldywkYildXQorCQlicmVhaworCSAgICB9CisJICAgIHNldCBiIFtsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRiKSAwXQorCX0KKyAgICB9CisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCit9CisKIHByb2MgZGlmZnZzc2VsIHtkaXJufSB7CiAgICAgZ2xvYmFsIHJvd21lbnVpZCBzZWxlY3RlZGxpbmUKIApAQCAtODE4Nyw3ICs4NDg2LDcgQEAKIH0KIAogcHJvYyByZWRyYXd0YWdzIHtpZH0gewotICAgIGdsb2JhbCBjYW52IGxpbmVodGFnIGlkcG9zIGN1cnJlbnRpZCBjdXJ2aWV3IGNtaXRsaXN0ZWQKKyAgICBnbG9iYWwgY2FudiBsaW5laHRhZyBpZHBvcyBjdXJyZW50aWQgY3VydmlldyBjbWl0bGlzdGVkIG1hcmtlZGlkCiAgICAgZ2xvYmFsIGNhbnZ4bWF4IGlkZHJhd24gY2lyY2xlaXRlbSBtYWluaGVhZGlkIGNpcmNsZWNvbG9ycwogCiAgICAgaWYgeyFbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHJldHVybgpAQCAtODIxMiw2ICs4NTExLDkgQEAKICAgICBpZiB7W2luZm8gZXhpc3RzIGN1cnJlbnRpZF0gJiYgJGN1cnJlbnRpZCA9PSAkaWR9IHsKIAltYWtlX3NlY3NlbCAkaWQKICAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBtYXJrZWRpZF0gJiYgJG1hcmtlZGlkIGVxICRpZH0geworCW1ha2VfaWRtYXJrICRpZAorICAgIH0KIH0KIAogcHJvYyBta3RhZ2NhbiB7fSB7CkBAIC0xMDE5NSw3ICsxMDQ5Nyw3IEBACiBwcm9jIGNob29zZV9leHRkaWZmIHt9IHsKICAgICBnbG9iYWwgZXh0ZGlmZnRvb2wKIAotICAgIHNldCBwcm9nIFt0a19nZXRPcGVuRmlsZSAtdGl0bGUgIkV4dGVybmFsIGRpZmYgdG9vbCIgLW11bHRpcGxlIGZhbHNlXQorICAgIHNldCBwcm9nIFt0a19nZXRPcGVuRmlsZSAtdGl0bGUgW21jICJFeHRlcm5hbCBkaWZmIHRvb2wiXSAtbXVsdGlwbGUgZmFsc2VdCiAgICAgaWYgeyRwcm9nIG5lIHt9fSB7CiAJc2V0IGV4dGRpZmZ0b29sICRwcm9nCiAgICAgfQpAQCAtMTAyMzgsNiArMTA1NDAsNyBAQAogICAgIH0KICAgICBhbGxjYW52cyBpdGVtY29uZiB0ZXh0IC1maWxsICRjCiAgICAgJGNhbnYgaXRlbWNvbmYgY2lyY2xlIC1vdXRsaW5lICRjCisgICAgJGNhbnYgaXRlbWNvbmYgbWFya2lkIC1vdXRsaW5lICRjCiB9CiAKIHByb2MgcHJlZnNjYW4ge30gewpAQCAtMTA2ODcsOSArMTA5OTAsMTUgQEAKICAgICB9CiB9CiAKLXNldCBtYWluZm9udCB7SGVsdmV0aWNhIDl9Ci1zZXQgdGV4dGZvbnQge0NvdXJpZXIgOX0KLXNldCB1aWZvbnQge0hlbHZldGljYSA5IGJvbGR9CitpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgImFxdWEifSB7CisgICAgc2V0IG1haW5mb250IHt7THVjaWRhIEdyYW5kZX0gOX0KKyAgICBzZXQgdGV4dGZvbnQge01vbmFjbyA5fQorICAgIHNldCB1aWZvbnQge3tMdWNpZGEgR3JhbmRlfSA5IGJvbGR9Cit9IGVsc2UgeworICAgIHNldCBtYWluZm9udCB7SGVsdmV0aWNhIDl9CisgICAgc2V0IHRleHRmb250IHtDb3VyaWVyIDl9CisgICAgc2V0IHVpZm9udCB7SGVsdmV0aWNhIDkgYm9sZH0KK30KIHNldCB0YWJzdG9wIDgKIHNldCBmaW5kbWVyZ2VmaWxlcyAwCiBzZXQgbWF4Z3JhcGhwY3QgNTAKQEAgLTEwNzEwLDcgKzExMDE5LDExIEBACiBzZXQgYXV0b3NlbGVjdCAxCiBzZXQgcGVyZmlsZV9hdHRycyAwCiAKLXNldCBleHRkaWZmdG9vbCAibWVsZCIKK2lmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAiYXF1YSJ9IHsKKyAgICBzZXQgZXh0ZGlmZnRvb2wgIm9wZW5kaWZmIgorfSBlbHNlIHsKKyAgICBzZXQgZXh0ZGlmZnRvb2wgIm1lbGQiCit9CiAKIHNldCBjb2xvcnMge2dyZWVuIHJlZCBibHVlIG1hZ2VudGEgZGFya2dyZXkgYnJvd24gb3JhbmdlfQogc2V0IGJnY29sb3Igd2hpdGUKQEAgLTEwODQxLDYgKzExMTU0LDcgQEAKIHNldCBudWxsZmlsZSAiL2Rldi9udWxsIgogCiBzZXQgaGF2ZV90azg1IFtleHByIHtbcGFja2FnZSB2Y29tcGFyZSAkdGtfdmVyc2lvbiAiOC41Il0gPj0gMH1dCitzZXQgZ2l0X3ZlcnNpb24gW2pvaW4gW2xyYW5nZSBbc3BsaXQgW2xpbmRleCBbZXhlYyBnaXQgdmVyc2lvbl0gZW5kXSAuXSAwIDJdIC5dCiAKIHNldCBydW5xIHt9CiBzZXQgaGlzdG9yeSB7fQpAQCAtMTA4ODEsOSArMTExOTUsMzMgQEAKIHNldCBpc3dvcmt0cmVlIFtleHByIHtbZXhlYyBnaXQgcmV2LXBhcnNlIC0taXMtaW5zaWRlLXdvcmstdHJlZV0gPT0gInRydWUifV0KIHNldGNvb3JkcwogbWFrZXdpbmRvdworY2F0Y2ggeworICAgIGltYWdlIGNyZWF0ZSBwaG90byBnaXRsb2dvICAgICAgLXdpZHRoIDE2IC1oZWlnaHQgMTYKKworICAgIGltYWdlIGNyZWF0ZSBwaG90byBnaXRsb2dvbWludXMgLXdpZHRoICA0IC1oZWlnaHQgIDIKKyAgICBnaXRsb2dvbWludXMgcHV0ICNDMDAwMDAgLXRvIDAgMCA0IDIKKyAgICBnaXRsb2dvIGNvcHkgZ2l0bG9nb21pbnVzIC10byAgMSA1CisgICAgZ2l0bG9nbyBjb3B5IGdpdGxvZ29taW51cyAtdG8gIDYgNQorICAgIGdpdGxvZ28gY29weSBnaXRsb2dvbWludXMgLXRvIDExIDUKKyAgICBpbWFnZSBkZWxldGUgZ2l0bG9nb21pbnVzCisKKyAgICBpbWFnZSBjcmVhdGUgcGhvdG8gZ2l0bG9nb3BsdXMgIC13aWR0aCAgNCAtaGVpZ2h0ICA0CisgICAgZ2l0bG9nb3BsdXMgIHB1dCAjMDA4MDAwIC10byAxIDAgMyA0CisgICAgZ2l0bG9nb3BsdXMgIHB1dCAjMDA4MDAwIC10byAwIDEgNCAzCisgICAgZ2l0bG9nbyBjb3B5IGdpdGxvZ29wbHVzICAtdG8gIDEgOQorICAgIGdpdGxvZ28gY29weSBnaXRsb2dvcGx1cyAgLXRvICA2IDkKKyAgICBnaXRsb2dvIGNvcHkgZ2l0bG9nb3BsdXMgIC10byAxMSA5CisgICAgaW1hZ2UgZGVsZXRlIGdpdGxvZ29wbHVzCisKKyAgICBpbWFnZSBjcmVhdGUgcGhvdG8gZ2l0bG9nbzMyICAgIC13aWR0aCAzMiAtaGVpZ2h0IDMyCisgICAgZ2l0bG9nbzMyIGNvcHkgZ2l0bG9nbyAtem9vbSAyIDIKKworICAgIHdtIGljb25waG90byAuIC1kZWZhdWx0IGdpdGxvZ28gZ2l0bG9nbzMyCit9CiAjIHdhaXQgZm9yIHRoZSB3aW5kb3cgdG8gYmVjb21lIHZpc2libGUKIHRrd2FpdCB2aXNpYmlsaXR5IC4KIHdtIHRpdGxlIC4gIltmaWxlIHRhaWwgJGFyZ3YwXTogW2ZpbGUgdGFpbCBbcHdkXV0iCit1cGRhdGUKIHJlYWRyZWZzCiAKIGlmIHskY21kbGluZV9maWxlcyBuZSB7fSB8fCAkcmV2dHJlZWFyZ3MgbmUge30gfHwgJHJldnRyZWVhcmdzY21kIG5lIHt9fSB7CmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9kZS5wbyBiL2dpdGstZ2l0L3BvL2RlLnBvCmluZGV4IDgyNWRjOTguLjUzZWYwZDYgMTAwNjQ0Ci0tLSBhL2dpdGstZ2l0L3BvL2RlLnBvCisrKyBiL2dpdGstZ2l0L3BvL2RlLnBvCkBAIC0xLDE0ICsxLDE1IEBACiAjIFRyYW5zbGF0aW9uIG9mIGdpdGsgdG8gR2VybWFuLgogIyBDb3B5cmlnaHQgKEMpIDIwMDcgUGF1bCBNYWNrZXJyYXMuCiAjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCi0jIENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT4sIDIwMDcKICMKKyMgQ2hyaXN0aWFuIFN0aW1taW5nIDxzdGltbWluZ0B0dWhoLmRlPiwgMjAwNy4KKyMgRnJlZGVyaWsgU2Nod2FyemVyIDxzY2h3YXJ6ZXJmQGdtYWlsLmNvbT4sIDIwMDguCiBtc2dpZCAiIgogbXNnc3RyICIiCiAiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCiAiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA4LTEyLTA2IDIwOjQwKzAxMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTEyLTA2IDIwOjQ1KzAxMDBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNS0xMiAyMTo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0wNS0xMiAyMjoxOCswMjAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+XG4iCiAiTGFuZ3VhZ2UtVGVhbTogR2VybWFuXG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKQEAgLTE3LDI5NyArMTgsMzE0IEBACiAKICM6IGdpdGs6MTEzCiBtc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgotbXNnc3RyICJMaXN0ZSBkZXIgbmljaHQtenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gbmljaHQgZ2VmdW5kZW46IgorbXNnc3RyICJMaXN0ZSBkZXIgbmljaHQgenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gbmljaHQgZ2VmdW5kZW46IgogCi0jOiBnaXRrOjI3MgorIzogZ2l0azoyNjgKIG1zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCiBtc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlciBWZXJzaW9uZW46IgogCi0jOiBnaXRrOjMyNworIzogZ2l0azozMjMKIG1zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgotbXNnc3RyICJGZWhsZXIgYmVpbSAtLWFyZ3NjbWQgS29tbWFuZG86IgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIGRlcyAtLWFyZ3NjbWQtS29tbWFuZG9zOiIKIAotIzogZ2l0azozNDAKKyM6IGdpdGs6MzM2CiBtc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgogbXNnc3RyICIiCi0iS2VpbmUgRGF0ZWllbiBhdXNnZXfDpGhsdDogLS1tZXJnZSBhbmdlZ2ViZW4sIGVzIGV4aXN0aWVyZW4gYWJlciBrZWluZSBuaWNodC0iCi0ienVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4uIgorIktlaW5lIERhdGVpZW4gYXVzZ2V3w6RobHQ6IEVzIHd1cmRlIC0tbWVyZ2UgYW5nZWdlYmVuLCBhYmVyIGVzIGV4aXN0aWVyZW4gIgorImtlaW5lIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlbiBEYXRlaWVuLiIKIAotIzogZ2l0azozNDMKKyM6IGdpdGs6MzM5CiBtc2dpZCAiIgogIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKICJsaW1pdC4iCiBtc2dzdHIgIiIKLSJLZWluZSBEYXRlaWVuIGF1c2dld8OkaGxlOiAtLW1lcmdlIGFuZ2VnZWJlbiwgYWJlciBrZWluZSBuaWNodC0iCi0ienVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gc2luZCBpbiBkZXIgRGF0ZWlhdXN3YWhsLiIKKyJLZWluZSBEYXRlaWVuIGF1c2dld8OkaGx0OiBFcyB3dXJkZSAtLW1lcmdlIGFuZ2VnZWJlbiwgYWJlciBlcyBzaW5kIGtlaW5lICIKKyJuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZW4gRGF0ZWllbiBpbiBkZXIgRGF0ZWlhdXN3YWhsLiIKIAotIzogZ2l0azozNjUgZ2l0azo1MDMKKyM6IGdpdGs6MzYxIGdpdGs6NTA4CiBtc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiBnaXQtbG9nOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gwrtnaXQgbG9nwqs6IgogCi0jOiBnaXRrOjM3OAorIzogZ2l0azozNzkgZ2l0azo1MjQKIG1zZ2lkICJSZWFkaW5nIgogbXNnc3RyICJMZXNlbiIKIAotIzogZ2l0azo0MzggZ2l0azozNDYyCisjOiBnaXRrOjQzOSBnaXRrOjQwNjEKIG1zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCi1tc2dzdHIgIlZlcnNpb25lbiBsZXNlbi4uLiIKK21zZ3N0ciAiVmVyc2lvbmVuIHdlcmRlbiBnZWxlc2VuIC4uLiIKIAotIzogZ2l0azo0NDEgZ2l0azoxNTI4IGdpdGs6MzQ2NQorIzogZ2l0azo0NDIgZ2l0azoxNTYwIGdpdGs6NDA2NAogbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCi1tc2dzdHIgIktlaW5lIFZlcnNpb25lbiBhdXNnZXfDpGhsdC4iCittc2dzdHIgIktlaW5lIFZlcnNpb25lbiBhdXNnZXfDpGhsdCIKIAotIzogZ2l0azoxMzk5CisjOiBnaXRrOjE0MzYKIG1zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCi1tc2dzdHIgIkF1c2dhYmUgdm9uIGdpdC1sb2cga2FubiBuaWNodCBlcmthbm50IHdlcmRlbjoiCittc2dzdHIgIkF1c2dhYmUgdm9uIMK7Z2l0IGxvZ8KrIGthbm4gbmljaHQgZXJrYW5udCB3ZXJkZW46IgogCi0jOiBnaXRrOjE2MDUKKyM6IGdpdGs6MTY1NgogbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCiBtc2dzdHIgIktlaW5lIFZlcnNpb25zaW5mb3JtYXRpb24gdmVyZsO8Z2JhciIKIAotIzogZ2l0azoxNzA5IGdpdGs6MTczMSBnaXRrOjMyNTkgZ2l0azo3NzY0IGdpdGs6OTI5MyBnaXRrOjk0NjYKKyM6IGdpdGs6MTc5MSBnaXRrOjE4MTUgZ2l0azozODU0IGdpdGs6ODcxNCBnaXRrOjEwMjUwIGdpdGs6MTA0MjIKIG1zZ2lkICJPSyIKIG1zZ3N0ciAiT2siCiAKLSM6IGdpdGs6MTczMyBnaXRrOjMyNjAgZ2l0azo3NDM5IGdpdGs6NzUxMCBnaXRrOjc2MTMgZ2l0azo3NjYwIGdpdGs6Nzc2NgotIzogZ2l0azo5Mjk0IGdpdGs6OTQ2NworIzogZ2l0azoxODE3IGdpdGs6Mzg1NiBnaXRrOjgzMTEgZ2l0azo4Mzg1IGdpdGs6ODQ5NSBnaXRrOjg1NDQgZ2l0azo4NzE2CisjOiBnaXRrOjEwMjUxIGdpdGs6MTA0MjMKIG1zZ2lkICJDYW5jZWwiCiBtc2dzdHIgIkFiYnJlY2hlbiIKIAotIzogZ2l0azoxODExCisjOiBnaXRrOjE5MTcKIG1zZ2lkICJVcGRhdGUiCiBtc2dzdHIgIkFrdHVhbGlzaWVyZW4iCiAKLSM6IGdpdGs6MTgxMgorIzogZ2l0azoxOTE4CiBtc2dpZCAiUmVsb2FkIgogbXNnc3RyICJOZXUgbGFkZW4iCiAKLSM6IGdpdGs6MTgxMworIzogZ2l0azoxOTE5CiBtc2dpZCAiUmVyZWFkIHJlZmVyZW5jZXMiCiBtc2dzdHIgIlp3ZWlnZSBuZXUgbGFkZW4iCiAKLSM6IGdpdGs6MTgxNAorIzogZ2l0azoxOTIwCiBtc2dpZCAiTGlzdCByZWZlcmVuY2VzIgogbXNnc3RyICJad2VpZ2UvTWFya2llcnVuZ2VuIGF1Zmxpc3RlbiIKIAotIzogZ2l0azoxOTE1CisjOiBnaXRrOjE5MjIKIG1zZ2lkICJTdGFydCBnaXQgZ3VpIgogbXNnc3RyICLCu2dpdCBndWnCqyBzdGFydGVuIgogCi0jOiBnaXRrOjE5MTcKKyM6IGdpdGs6MTkyNAogbXNnaWQgIlF1aXQiCiBtc2dzdHIgIkJlZW5kZW4iCiAKLSM6IGdpdGs6MTgxMAorIzogZ2l0azoxOTE2CiBtc2dpZCAiRmlsZSIKIG1zZ3N0ciAiRGF0ZWkiCiAKLSM6IGdpdGs6MTgxOAorIzogZ2l0azoxOTI4CiBtc2dpZCAiUHJlZmVyZW5jZXMiCiBtc2dzdHIgIkVpbnN0ZWxsdW5nZW4iCiAKLSM6IGdpdGs6MTgxNworIzogZ2l0azoxOTI3CiBtc2dpZCAiRWRpdCIKIG1zZ3N0ciAiQmVhcmJlaXRlbiIKIAotIzogZ2l0azoxODIxCisjOiBnaXRrOjE5MzIKIG1zZ2lkICJOZXcgdmlldy4uLiIKLW1zZ3N0ciAiTmV1ZSBBbnNpY2h0Li4uIgorbXNnc3RyICJOZXVlIEFuc2ljaHQgLi4uIgogCi0jOiBnaXRrOjE4MjIKKyM6IGdpdGs6MTkzMwogbXNnaWQgIkVkaXQgdmlldy4uLiIKLW1zZ3N0ciAiQW5zaWNodCBiZWFyYmVpdGVuLi4uIgorbXNnc3RyICJBbnNpY2h0IGJlYXJiZWl0ZW4gLi4uIgogCi0jOiBnaXRrOjE4MjMKKyM6IGdpdGs6MTkzNAogbXNnaWQgIkRlbGV0ZSB2aWV3IgotbXNnc3RyICJBbnNpY2h0IGzDtnNjaGVuIgorbXNnc3RyICJBbnNpY2h0IGVudGZlcm5lbiIKIAotIzogZ2l0azoxODI1CisjOiBnaXRrOjE5MzYKIG1zZ2lkICJBbGwgZmlsZXMiCiBtc2dzdHIgIkFsbGUgRGF0ZWllbiIKIAotIzogZ2l0azoxODIwIGdpdGs6MzE5NgorIzogZ2l0azoxOTMxIGdpdGs6MzY2NgogbXNnaWQgIlZpZXciCiBtc2dzdHIgIkFuc2ljaHQiCiAKLSM6IGdpdGs6MTgyOCBnaXRrOjI0ODcKKyM6IGdpdGs6MTk0MSBnaXRrOjE5NTEgZ2l0azoyNjUwCiBtc2dpZCAiQWJvdXQgZ2l0ayIKIG1zZ3N0ciAiw5xiZXIgZ2l0ayIKIAotIzogZ2l0azoxODI5CisjOiBnaXRrOjE5NDIgZ2l0azoxOTU2CiBtc2dpZCAiS2V5IGJpbmRpbmdzIgogbXNnc3RyICJUYXN0ZW5rw7xyemVsIgogCi0jOiBnaXRrOjE4MjcKKyM6IGdpdGs6MTk0MCBnaXRrOjE5NTUKIG1zZ2lkICJIZWxwIgogbXNnc3RyICJIaWxmZSIKIAotIzogZ2l0azoxODg3CisjOiBnaXRrOjIwMTYKIG1zZ2lkICJTSEExIElEOiAiCiBtc2dzdHIgIlNIQTE6IgogCi0jOiBnaXRrOjE5MTgKKyM6IGdpdGs6MjA0NwogbXNnaWQgIlJvdyIKIG1zZ3N0ciAiWmVpbGUiCiAKLSM6IGdpdGs6MTk0OQorIzogZ2l0azoyMDc4CiBtc2dpZCAiRmluZCIKIG1zZ3N0ciAiU3VjaGUiCiAKLSM6IGdpdGs6MTk1MAorIzogZ2l0azoyMDc5CiBtc2dpZCAibmV4dCIKIG1zZ3N0ciAibsOkY2hzdGUiCiAKLSM6IGdpdGs6MTk1MQorIzogZ2l0azoyMDgwCiBtc2dpZCAicHJldiIKIG1zZ3N0ciAidm9yaWdlIgogCi0jOiBnaXRrOjE5NTIKKyM6IGdpdGs6MjA4MQogbXNnaWQgImNvbW1pdCIKIG1zZ3N0ciAiVmVyc2lvbiBuYWNoIgogCi0jOiBnaXRrOjE5NTUgZ2l0azoxOTU3IGdpdGs6MzYxNyBnaXRrOjM2NDAgZ2l0azozNjY0IGdpdGs6NTU1MCBnaXRrOjU2MjEKKyM6IGdpdGs6MjA4NCBnaXRrOjIwODYgZ2l0azo0MjIyIGdpdGs6NDI0NSBnaXRrOjQyNjkgZ2l0azo2MjEwIGdpdGs6NjI4MgorIzogZ2l0azo2MzY2CiBtc2dpZCAiY29udGFpbmluZzoiCiBtc2dzdHIgIkJlc2NocmVpYnVuZzoiCiAKLSM6IGdpdGs6MTk1OCBnaXRrOjI5NTQgZ2l0azoyOTU5IGdpdGs6MzY5MgorIzogZ2l0azoyMDg3IGdpdGs6MzE1OCBnaXRrOjMxNjMgZ2l0azo0Mjk3CiBtc2dpZCAidG91Y2hpbmcgcGF0aHM6IgogbXNnc3RyICJEYXRlaWVuOiIKIAotIzogZ2l0azoxOTU5IGdpdGs6MzY5NworIzogZ2l0azoyMDg4IGdpdGs6NDMwMgogbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgogbXNnc3RyICLDhG5kZXJ1bmdlbjoiCiAKLSM6IGdpdGs6MTk2OCBnaXRrOjE5NzAKKyM6IGdpdGs6MjA5NyBnaXRrOjIwOTkKIG1zZ2lkICJFeGFjdCIKIG1zZ3N0ciAiRXhha3QiCiAKLSM6IGdpdGs6MTk3MCBnaXRrOjM3NzMgZ2l0azo1NTE4CisjOiBnaXRrOjIwOTkgZ2l0azo0Mzc3IGdpdGs6NjE3OAogbXNnaWQgIklnbkNhc2UiCiBtc2dzdHIgIktlaW4gR3Jvw58vS2xlaW4iCiAKLSM6IGdpdGs6MTk3MCBnaXRrOjM2NjYgZ2l0azozNzcxIGdpdGs6NTUxNAorIzogZ2l0azoyMDk5IGdpdGs6NDI3MSBnaXRrOjQzNzUgZ2l0azo2MTc0CiBtc2dpZCAiUmVnZXhwIgogbXNnc3RyICJSZWdleHAiCiAKLSM6IGdpdGs6MTk3MiBnaXRrOjE5NzMgZ2l0azozNzkyIGdpdGs6MzgyMiBnaXRrOjM4MjkgZ2l0azo1NjQxIGdpdGs6NTcwOAorIzogZ2l0azoyMTAxIGdpdGs6MjEwMiBnaXRrOjQzOTYgZ2l0azo0NDI2IGdpdGs6NDQzMyBnaXRrOjYzMDIgZ2l0azo2MzcwCiBtc2dpZCAiQWxsIGZpZWxkcyIKIG1zZ3N0ciAiQWxsZSBGZWxkZXIiCiAKLSM6IGdpdGs6MTk3MyBnaXRrOjM3OTAgZ2l0azozODIyIGdpdGs6NTU4MAorIzogZ2l0azoyMTAyIGdpdGs6NDM5NCBnaXRrOjQ0MjYgZ2l0azo2MjQxCiBtc2dpZCAiSGVhZGxpbmUiCiBtc2dzdHIgIsOcYmVyc2NocmlmdCIKIAotIzogZ2l0azoxOTc0IGdpdGs6Mzc5MCBnaXRrOjU1ODAgZ2l0azo1NzA4IGdpdGs6NjEwOQorIzogZ2l0azoyMTAzIGdpdGs6NDM5NCBnaXRrOjYyNDEgZ2l0azo2MzcwIGdpdGs6NjgwNAogbXNnaWQgIkNvbW1lbnRzIgogbXNnc3RyICJCZXNjaHJlaWJ1bmciCiAKLSM6IGdpdGs6MTk3NCBnaXRrOjM3OTAgZ2l0azozNzk0IGdpdGs6MzgyOSBnaXRrOjU1ODAgZ2l0azo2MDQ1IGdpdGs6NzI4NQotIzogZ2l0azo3MzAwCisjOiBnaXRrOjIxMDMgZ2l0azo0Mzk0IGdpdGs6NDM5OCBnaXRrOjQ0MzMgZ2l0azo2MjQxIGdpdGs6NjczOSBnaXRrOjc5OTEKKyM6IGdpdGs6ODAwNgogbXNnaWQgIkF1dGhvciIKIG1zZ3N0ciAiQXV0b3IiCiAKLSM6IGdpdGs6MTk3NCBnaXRrOjM3OTAgZ2l0azo1NTgwIGdpdGs6NjA0NworIzogZ2l0azoyMTAzIGdpdGs6NDM5NCBnaXRrOjYyNDEgZ2l0azo2NzQxCiBtc2dpZCAiQ29tbWl0dGVyIgogbXNnc3RyICJFaW50cmFnZW5kZXIiCiAKLSM6IGdpdGs6MjAwMworIzogZ2l0azoyMTMyCiBtc2dpZCAiU2VhcmNoIgotbXNnc3RyICJTdWNoZSIKK21zZ3N0ciAiU3VjaGVuIgogCi0jOiBnaXRrOjIwMTAKKyM6IGdpdGs6MjEzOQogbXNnaWQgIkRpZmYiCiBtc2dzdHIgIlZlcmdsZWljaCIKIAotIzogZ2l0azoyMDEyCisjOiBnaXRrOjIxNDEKIG1zZ2lkICJPbGQgdmVyc2lvbiIKIG1zZ3N0ciAiQWx0ZSBWZXJzaW9uIgogCi0jOiBnaXRrOjIwMTQKKyM6IGdpdGs6MjE0MwogbXNnaWQgIk5ldyB2ZXJzaW9uIgogbXNnc3RyICJOZXVlIFZlcnNpb24iCiAKLSM6IGdpdGs6MjAxNgorIzogZ2l0azoyMTQ1CiBtc2dpZCAiTGluZXMgb2YgY29udGV4dCIKIG1zZ3N0ciAiS29udGV4dHplaWxlbiIKIAotIzogZ2l0azoyMDI2CisjOiBnaXRrOjIxNTUKIG1zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgogbXNnc3RyICJMZWVyemVpY2hlbsOkbmRlcnVuZ2VuIGlnbm9yaWVyZW4iCiAKLSM6IGdpdGs6MjA4NAorIzogZ2l0azoyMjEzCiBtc2dpZCAiUGF0Y2giCiBtc2dzdHIgIlBhdGNoIgogCi0jOiBnaXRrOjIwODYKKyM6IGdpdGs6MjIxNQogbXNnaWQgIlRyZWUiCiBtc2dzdHIgIkJhdW0iCiAKLSM6IGdpdGs6MjIxMyBnaXRrOjIyMjYKKyM6IGdpdGs6MjM1OSBnaXRrOjIzNzYKIG1zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCi1tc2dzdHIgIlZlcmdsZWljaCBkaWVzZSAtPiBnZXfDpGhsdGUiCittc2dzdHIgIlZlcmdsZWljaDogZGllc2UgLT4gZ2V3w6RobHRlIgogCi0jOiBnaXRrOjIyMTQgZ2l0azoyMjI3CisjOiBnaXRrOjIzNjAgZ2l0azoyMzc3CiBtc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgotbXNnc3RyICJWZXJnbGVpY2ggZ2V3w6RobHRlIC0+IGRpZXNlIgorbXNnc3RyICJWZXJnbGVpY2g6IGdld8OkaGx0ZSAtPiBkaWVzZSIKIAotIzogZ2l0azoyMjE1IGdpdGs6MjIyOAorIzogZ2l0azoyMzYxIGdpdGs6MjM3OAogbXNnaWQgIk1ha2UgcGF0Y2giCiBtc2dzdHIgIlBhdGNoIGVyc3RlbGxlbiIKIAotIzogZ2l0azoyMjE2IGdpdGs6NzQ5NAorIzogZ2l0azoyMzYyIGdpdGs6ODM2OQogbXNnaWQgIkNyZWF0ZSB0YWciCiBtc2dzdHIgIk1hcmtpZXJ1bmcgZXJzdGVsbGVuIgogCi0jOiBnaXRrOjIyMTcgZ2l0azo3NTkzCisjOiBnaXRrOjIzNjMgZ2l0azo4NDc1CiBtc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCiBtc2dzdHIgIlZlcnNpb24gaW4gRGF0ZWkgc2NocmVpYmVuIgogCi0jOiBnaXRrOjIyMTggZ2l0azo3NjQ3CisjOiBnaXRrOjIzNjQgZ2l0azo4NTMyCiBtc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCiBtc2dzdHIgIk5ldWVuIFp3ZWlnIGVyc3RlbGxlbiIKIAotIzogZ2l0azoyMjE5CisjOiBnaXRrOjIzNjUKIG1zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKIG1zZ3N0ciAiRGllc2UgVmVyc2lvbiBwZmzDvGNrZW4iCiAKLSM6IGdpdGs6MjIyMAorIzogZ2l0azoyMzY2CiBtc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKIG1zZ3N0ciAiSEVBRC1ad2VpZyBhdWYgZGllc2UgVmVyc2lvbiB6dXLDvGNrc2V0emVuIgogCi0jOiBnaXRrOjIyMzQKKyM6IGdpdGs6MjM2NworbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIkxlc2V6ZWljaGVuIHNldHplbiIKKworIzogZ2l0azoyMzY4Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIlp1bSBMZXNlemVpY2hlbiIKKworIzogZ2l0azoyMzY5Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIkFia8O2bW1saW5nIHZvbiBMZXNlemVpY2hlbiB1bmQgZGllc2VyIFZlcnNpb24gZmluZGVuIgorCisjOiBnaXRrOjIzNzAKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiTWl0IExlc2V6ZWljaGVuIHZlcmdsZWljaGVuIgorCisjOiBnaXRrOjIzODQKIG1zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCiBtc2dzdHIgIkF1ZiBkaWVzZW4gWndlaWcgdW1zdGVsbGVuIgogCi0jOiBnaXRrOjIyMzUKKyM6IGdpdGs6MjM4NQogbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKIG1zZ3N0ciAiWndlaWcgbMO2c2NoZW4iCiAKLSM6IGdpdGs6MjI0MgorIzogZ2l0azoyMzkyCiBtc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgogbXNnc3RyICJEaWVzZW4gYXVjaCBoZXJ2b3JoZWJlbiIKIAotIzogZ2l0azoyMjQzCisjOiBnaXRrOjIzOTMKIG1zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgogbXNnc3RyICJOdXIgZGllc2VuIGhlcnZvcmhlYmVuIgogCi0jOiBnaXRrOjIyNDQKKyM6IGdpdGs6MjM5NAogbXNnaWQgIkV4dGVybmFsIGRpZmYiCi1tc2dzdHIgIkV4dGVybmVyIFZlcmdsZWljaCIKK21zZ3N0ciAiRXh0ZXJuZXMgRGlmZi1Qcm9ncmFtbSIKIAotIzogZ2l0azoyMjU1CisjOiBnaXRrOjIzOTUKIG1zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgogbXNnc3RyICJBbm5vdGllcmVuIGRlciBFbHRlcm52ZXJzaW9uIgogCi0jOiBnaXRrOjIzNjAKKyM6IGdpdGs6MjQwMgogbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKIG1zZ3N0ciAiSGVya3VuZnQgZGllc2VyIFplaWxlIGFuemVpZ2VuIgogCi0jOiBnaXRrOjIzNjEKKyM6IGdpdGs6MjQwMwogbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKLW1zZ3N0ciAiQW5ub3RpZXJlbiAowrtnaXQgZ3VpIGJsYW1lwqspIHZvbiBkaWVzZXIgWmVpbGUiCittc2dzdHIgIkRpZXNlIFplaWxlIGFubm90aWVyZW4gKMK7Z2l0IGd1aSBibGFtZcKrKSIKIAotIzogZ2l0azoyNjA2CisjOiBnaXRrOjI2NTIKIG1zZ2lkICIiCiAiXG4iCiAiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCkBAIC0zMTcsNTA0ICszMzUsNTUyIEBACiAiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKIG1zZ3N0ciAiIgogIlxuIgotIkdpdGsgLSBlaW5lIFZpc3VhbGlzaWVydW5nIGRlciBHaXQgSGlzdG9yaWVcbiIKKyJHaXRrIC0gZWluZSBWaXN1YWxpc2llcnVuZyBkZXIgR2l0LUhpc3RvcmllXG4iCiAiXG4iCiAiQ29weXJpZ2h0IMKpIDIwMDUtMjAwOCBQYXVsIE1hY2tlcnJhc1xuIgogIlxuIgogIkJlbnV0enVuZyB1bmQgV2VpdGVydmVyYnJlaXR1bmcgZ2Vtw6TDnyBkZW4gQmVkaW5ndW5nZW4gZGVyIEdOVSBHZW5lcmFsIFB1YmxpYyAiCiAiTGljZW5zZSIKIAotIzogZ2l0azoyNDk2IGdpdGs6MjU1NyBnaXRrOjc5NDMKKyM6IGdpdGs6MjY2MCBnaXRrOjI3MjIgZ2l0azo4ODk3CiBtc2dpZCAiQ2xvc2UiCiBtc2dzdHIgIlNjaGxpZcOfZW4iCiAKLSM6IGdpdGs6MjUxNQorIzogZ2l0azoyNjc5CiBtc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCi1tc2dzdHIgIkdpdGsgVGFzdGF0dXJiZWxlZ3VuZyIKK21zZ3N0ciAiR2l0ay1UYXN0YXR1cmJlbGVndW5nIgogCi0jOiBnaXRrOjI1MTcKKyM6IGdpdGs6MjY4MgogbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKLW1zZ3N0ciAiR2l0ayBUYXN0YXR1cmJlbGVndW5nOiIKK21zZ3N0ciAiR2l0ay1UYXN0YXR1cmJlbGVndW5nOiIKIAotIzogZ2l0azoyNTE5CisjOiBnaXRrOjI2ODQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtUT5cdFx0UXVpdCIKIG1zZ3N0ciAiPCVzLVE+XHRcdEJlZW5kZW4iCiAKLSM6IGdpdGs6MjUyMAorIzogZ2l0azoyNjg1CiBtc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgogbXNnc3RyICI8UG9zMT5cdFx0WnVyIG5ldWVzdGVuIFZlcnNpb24gc3ByaW5nZW4iCiAKLSM6IGdpdGs6MjUyMQorIzogZ2l0azoyNjg2CiBtc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKIG1zZ3N0ciAiPEVuZGU+XHRcdFp1ciDDpGx0ZXN0ZW4gVmVyc2lvbiBzcHJpbmdlbiIKIAotIzogZ2l0azoyNTIyCisjOiBnaXRrOjI2ODcKIG1zZ2lkICI8VXA+LCBwLCBpXHRNb3ZlIHVwIG9uZSBjb21taXQiCiBtc2dzdHIgIjxIb2NoPiwgcCwgaVx0TsOkY2hzdGUgbmV1ZXJlIFZlcnNpb24iCiAKLSM6IGdpdGs6MjUyMworIzogZ2l0azoyNjg4CiBtc2dpZCAiPERvd24+LCBuLCBrXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKIG1zZ3N0ciAiPFJ1bnRlcj4sIG4sIGtcdE7DpGNoc3RlIMOkbHRlcmUgVmVyc2lvbiIKIAotIzogZ2l0azoyNTI0CisjOiBnaXRrOjI2ODkKIG1zZ2lkICI8TGVmdD4sIHosIGpcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgogbXNnc3RyICI8TGlua3M+LCB6LCBqXHRFaW5lIFZlcnNpb24genVyw7xja2dlaGVuIgogCi0jOiBnaXRrOjI1MjUKKyM6IGdpdGs6MjY5MAogbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgogbXNnc3RyICI8UmVjaHRzPiwgeCwgbFx0RWluZSBWZXJzaW9uIHdlaXRlcmdlaGVuIgogCi0jOiBnaXRrOjI1MjYKKyM6IGdpdGs6MjY5MQogbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgogbXNnc3RyICI8QmlsZEhvY2g+XHRFaW5lIFNlaXRlIG5hY2ggb2JlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUyNworIzogZ2l0azoyNjkyCiBtc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgogbXNnc3RyICI8QmlsZFJ1bnRlcj5cdEVpbmUgU2VpdGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUyOAorIzogZ2l0azoyNjkzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgogbXNnc3RyICI8JXMtUG9zMT5cdFp1bSBvYmVyZW4gRW5kZSBkZXIgVmVyc2lvbnNsaXN0ZSBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUyOQorIzogZ2l0azoyNjk0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCiBtc2dzdHIgIjwlcy1FbmRlPlx0WnVtIHVudGVyZW4gRW5kZSBkZXIgVmVyc2lvbnNsaXN0ZSBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUzMAorIzogZ2l0azoyNjk1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgogbXNnc3RyICI8JXMtSG9jaD5cdFZlcnNpb25zbGlzdGUgZWluZSBaZWlsZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1MzEKKyM6IGdpdGs6MjY5NgogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCiBtc2dzdHIgIjwlcy1SdW50ZXI+XHRWZXJzaW9uc2xpc3RlIGVpbmUgWmVpbGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUzMgorIzogZ2l0azoyNjk3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPCVzLUJpbGRIb2NoPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFNlaXRlIGhvY2ggYmzDpHR0ZXJuIgorbXNnc3RyICI8JXMtQmlsZEhvY2g+XHRWZXJzaW9uc2xpc3RlIGVpbmUgU2VpdGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKIAotIzogZ2l0azoyNTMzCisjOiBnaXRrOjI2OTgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKIG1zZ3N0ciAiPCVzLUJpbGRSdW50ZXI+XHRWZXJzaW9uc2xpc3RlIGVpbmUgU2VpdGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUzNAorIzogZ2l0azoyNjk5CiBtc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgogbXNnc3RyICI8VW1zY2hhbHQtSG9jaD5cdFLDvGNrd8OkcnRzIHN1Y2hlbiAobmFjaCBvYmVuOyBuZXVlcmUgVmVyc2lvbmVuKSIKIAotIzogZ2l0azoyNTM1CisjOiBnaXRrOjI3MDAKIG1zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKIG1zZ3N0ciAiPFVtc2NoYWx0LVJ1bnRlcj4gU3VjaGVuIChuYWNoIHVudGVuOyDDpGx0ZXJlIFZlcnNpb25lbikiCiAKLSM6IGdpdGs6MjUzNgorIzogZ2l0azoyNzAxCiBtc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCiBtc2dzdHIgIjxFbnRmPiwgYlx0XHRWZXJnbGVpY2ggZWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1MzcKKyM6IGdpdGs6MjcwMgogbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgogbXNnc3RyICI8TMO2c2NodGFzdGU+XHRWZXJnbGVpY2ggZWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgogCi0jOiBnaXRrOjI1MzgKKyM6IGdpdGs6MjcwMwogbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgogbXNnc3RyICI8TGVlcnRhc3RlPlx0VmVyZ2xlaWNoIGVpbmUgU2VpdGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjUzOQorIzogZ2l0azoyNzA0CiBtc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgotbXNnc3RyICJ1XHRcdFZlcmdsZWljaCB1bSAxOCBaZWlsZW4gbmFjaCBvYmVuICjCu3VwwqspIGJsw6R0dGVybiIKK21zZ3N0ciAidVx0XHRWZXJnbGVpY2ggdW0gMTggWmVpbGVuIG5hY2ggb2JlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjU0MAorIzogZ2l0azoyNzA1CiBtc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCi1tc2dzdHIgImRcdFx0VmVyZ2xlaWNoIHVtIDE4IFplaWxlbiBuYWNoIHVudGVuICjCu2Rvd27CqykgYmzDpHR0ZXJuIgorbXNnc3RyICJkXHRcdFZlcmdsZWljaCB1bSAxOCBaZWlsZW4gbmFjaCB1bnRlbiBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjU0MQorIzogZ2l0azoyNzA2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUY+XHRcdEZpbmQiCiBtc2dzdHIgIjwlcy1GPlx0XHRTdWNoZW4iCiAKLSM6IGdpdGs6MjU0MgorIzogZ2l0azoyNzA3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKIG1zZ3N0ciAiPCVzLUc+XHRcdFdlaXRlcnN1Y2hlbiIKIAotIzogZ2l0azoyNTQzCisjOiBnaXRrOjI3MDgKIG1zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgogbXNnc3RyICI8RWluZ2FiZXRhc3RlPlx0V2VpdGVyc3VjaGVuIgogCi0jOiBnaXRrOjI1NDQKLW1zZ2lkICIvXHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCwgb3IgcmVkbyBmaW5kIgotbXNnc3RyICIvXHRcdFdlaXRlcnN1Y2hlbiBvZGVyIG5ldWUgU3VjaGUgYmVnaW5uZW4iCisjOiBnaXRrOjI3MDkKK21zZ2lkICIvXHRcdEZvY3VzIHRoZSBzZWFyY2ggYm94IgorbXNnc3RyICIvXHRcdFRhc3RhdHVyZm9rdXMgaW5zIFN1Y2hmZWxkIgogCi0jOiBnaXRrOjI1NDUKKyM6IGdpdGs6MjcxMAogbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKIG1zZ3N0ciAiP1x0XHRSw7xja3fDpHJ0cyB3ZWl0ZXJzdWNoZW4iCiAKLSM6IGdpdGs6MjU0NgorIzogZ2l0azoyNzExCiBtc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKLW1zZ3N0ciAiZlx0XHRWZXJnbGVpY2ggenVyIG7DpGNoc3RlbiBEYXRlaSAowrtmaWxlwqspIGJsw6R0dGVybiIKK21zZ3N0ciAiZlx0XHRWZXJnbGVpY2ggenVyIG7DpGNoc3RlbiBEYXRlaSBibMOkdHRlcm4iCiAKLSM6IGdpdGs6MjU0NworIzogZ2l0azoyNzEyCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgogbXNnc3RyICI8JXMtUz5cdFx0V2VpdGVyc3VjaGVuIGltIFZlcmdsZWljaCIKIAotIzogZ2l0azoyNTQ4CisjOiBnaXRrOjI3MTMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgogbXNnc3RyICI8JXMtUj5cdFx0UsO8Y2t3w6RydHMgd2VpdGVyc3VjaGVuIGltIFZlcmdsZWljaCIKIAotIzogZ2l0azoyNTQ5CisjOiBnaXRrOjI3MTQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtTnVtbWVyYmxvY2stUGx1cz5cdFNjaHJpZnRncsO2w59lIHZlcmdyw7bDn2VybiIKK21zZ3N0ciAiPCVzLU51bW1lcmJsb2NrLVBsdXM+XHRTY2hyaWZ0IHZlcmdyw7bDn2VybiIKIAotIzogZ2l0azoyNTUwCisjOiBnaXRrOjI3MTUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLVBsdXM+XHRTY2hyaWZ0Z3LDtsOfZSB2ZXJncsO2w59lcm4iCittc2dzdHIgIjwlcy1QbHVzPlx0U2NocmlmdCB2ZXJncsO2w59lcm4iCiAKLSM6IGdpdGs6MjU1MQorIzogZ2l0azoyNzE2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLU51bW1lcm5ibG9jay0+IFNjaHJpZnRncsO2w59lIHZlcmtsZWluZXJuIgorbXNnc3RyICI8JXMtTnVtbWVybmJsb2NrLU1pbnVzPiBTY2hyaWZ0IHZlcmtsZWluZXJuIgogCi0jOiBnaXRrOjI1NTIKKyM6IGdpdGs6MjcxNwogIywgdGNsLWZvcm1hdAogbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLU1pbnVzPlx0U2NocmlmdGdyw7bDn2UgdmVya2xlaW5lcm4iCittc2dzdHIgIjwlcy1NaW51cz5cdFNjaHJpZnQgdmVya2xlaW5lcm4iCiAKLSM6IGdpdGs6MjU1MworIzogZ2l0azoyNzE4CiBtc2dpZCAiPEY1Plx0XHRVcGRhdGUiCiBtc2dzdHIgIjxGNT5cdFx0QWt0dWFsaXNpZXJlbiIKIAotIzogZ2l0azoyOTc5CisjOiBnaXRrOjMxNzMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gSG9sZW4gdm9uIMK7JXPCqyB2b24gwrslc8KrOiIKIAotIzogZ2l0azozMDM2IGdpdGs6MzA0NQorIzogZ2l0azozMjMwIGdpdGs6MzIzOQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBlaW5lcyB0ZW1wb3LDpHJlbiBWZXJ6ZWljaG5pc3NlcyDCuyVzwqs6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBkZXMgdGVtcG9yw6RyZW4gVmVyemVpY2huaXNzZXMgwrslc8KrOiIKIAotIzogZ2l0azozMDU4CisjOiBnaXRrOjMyNTEKIG1zZ2lkICJjb21tYW5kIGZhaWxlZDoiCiBtc2dzdHIgIktvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuOiIKIAotIzogZ2l0azozMDc4CisjOiBnaXRrOjMzOTcKIG1zZ2lkICJObyBzdWNoIGNvbW1pdCIKIG1zZ3N0ciAiVmVyc2lvbiBuaWNodCBnZWZ1bmRlbiIKIAotIzogZ2l0azozMDgzCisjOiBnaXRrOjM0MTEKIG1zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCiBtc2dzdHIgImdpdCBndWkgYmxhbWU6IEtvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuOiIKIAotIzogZ2l0azozMzk4CisjOiBnaXRrOjM0NDIKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgogbXNnc3RyICJadXNhbW1lbmbDvGhydW5ncy1TcGl0emUga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuOiAlcyIKIAotIzogZ2l0azozNDA2CisjOiBnaXRrOjM0NTAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gZGVyIEJlcmVpdHN0ZWxsdW5nICjCu2luZGV4wqspOiAlcyIKIAotIzogZ2l0azozNDMxCisjOiBnaXRrOjM0NzUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgogbXNnc3RyICLCu2dpdCBibGFtZcKrIGtvbm50ZSBuaWNodCBnZXN0YXJ0ZXQgd2VyZGVuOiAlcyIKIAotIzogZ2l0azozNDM0IGdpdGs6NjE2MAorIzogZ2l0azozNDc4IGdpdGs6NjIwOQogbXNnaWQgIlNlYXJjaGluZyIKIG1zZ3N0ciAiU3VjaGVuIgogCi0jOiBnaXRrOjM0NjYKKyM6IGdpdGs6MzUxMAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gwrtnaXQgYmxhbWXCqzogJXMiCiAKLSM6IGdpdGs6MzQ5NAorIzogZ2l0azozNTM4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKIG1zZ3N0ciAiIgotIkRpZXNlIFplaWxlIHN0YW1tdCBhdXMgVmVyc2lvbiAlcywgd2VsY2hlIG5pY2h0IGluIGRpZXNlciBBbnNpY2h0IGdlemVpZ3QgIgotIndpcmQuIgorIkRpZXNlIFplaWxlIHN0YW1tdCBhdXMgVmVyc2lvbiAlcywgZGllIG5pY2h0IGluIGRpZXNlciBBbnNpY2h0IGdlemVpZ3Qgd2lyZCIKIAotIzogZ2l0azozNTA4CisjOiBnaXRrOjM1NTIKIG1zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgotbXNnc3RyICJFeHRlcm5lcyBWZXJnbGVpY2gtKERpZmYtKVByb2dyYW1tIGZlaGxnZXNjaGxhZ2VuOiIKK21zZ3N0ciAiRXh0ZXJuZXMgRGlmZi1Qcm9ncmFtbSBmZWhsZ2VzY2hsYWdlbjoiCiAKLSM6IGdpdGs6MzIxMAorIzogZ2l0azozNjcwCiBtc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCi1tc2dzdHIgIkdpdGsgQW5zaWNodGVuIgorbXNnc3RyICJHaXRrLUFuc2ljaHRlbiIKIAotIzogZ2l0azozNjMwCisjOiBnaXRrOjM2NzQKIG1zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCiBtc2dzdHIgIkRpZXNlIEFuc2ljaHQgc3BlaWNoZXJuIgogCi0jOiBnaXRrOjMyMzIKKyM6IGdpdGs6MzY3NQogbXNnaWQgIkNvbW1pdHMgdG8gaW5jbHVkZSAoYXJndW1lbnRzIHRvIGdpdCBsb2cpOiIKLW1zZ3N0ciAiVmVyc2lvbmVuIGFuemVpZ2VuIChBcmd1bWVudGUgdm9uIGdpdC1sb2cpOiIKK21zZ3N0ciAiVmVyc2lvbmVuIGFuemVpZ2VuIChBcmd1bWVudGUgdm9uIGdpdCBsb2cpOiIKIAotIzogZ2l0azozNjMyCisjOiBnaXRrOjM2NzYKIG1zZ2lkICJVc2UgYWxsIHJlZnMiCiBtc2dzdHIgIkFsbGUgWndlaWdlIHZlcndlbmRlbiIKIAotIzogZ2l0azozNjMzCisjOiBnaXRrOjM2NzcKIG1zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCiBtc2dzdHIgIlN0cmVuZyBuYWNoIERhdHVtIHNvcnRpZXJlbiIKIAotIzogZ2l0azozNjM0CisjOiBnaXRrOjM2NzgKIG1zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKIG1zZ3N0ciAiWndlaWctU2VpdGVuIG1hcmtpZXJlbiIKIAotIzogZ2l0azozNjM1CisjOiBnaXRrOjM2NzkKIG1zZ2lkICJTaW5jZSBkYXRlOiIKIG1zZ3N0ciAiVm9uIERhdHVtOiIKIAotIzogZ2l0azozNjM2CisjOiBnaXRrOjM2ODAKIG1zZ2lkICJVbnRpbCBkYXRlOiIKIG1zZ3N0ciAiQmlzIERhdHVtOiIKIAotIzogZ2l0azozNjM3CisjOiBnaXRrOjM2ODEKIG1zZ2lkICJNYXggY291bnQ6IgogbXNnc3RyICJNYXguIEFuemFobDoiCiAKLSM6IGdpdGs6MzYzOAorIzogZ2l0azozNjgyCiBtc2dpZCAiU2tpcDoiCiBtc2dzdHIgIsOcYmVyc3ByaW5nZW46IgogCi0jOiBnaXRrOjM2MzkKKyM6IGdpdGs6MzY4MwogbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKIG1zZ3N0ciAiQXVmIGVyc3RlIEVsdGVybnZlcnNpb24gYmVzY2hyw6Rua2VuIgogCi0jOiBnaXRrOjM2NDAKKyM6IGdpdGs6MzY4NAogbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgogbXNnc3RyICJWZXJzaW9uc2xpc3RlIGR1cmNoIGZvbGdlbmRlcyBLb21tYW5kbyBlcnpldWdlbiBsYXNzZW46IgogCi0jOiBnaXRrOjM3NDkKKyM6IGdpdGs6Mzc4MAorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azogQW5zaWNodCBiZWFyYmVpdGVuIgorCisjOiBnaXRrOjM3OTMKIG1zZ2lkICJOYW1lIgogbXNnc3RyICJOYW1lIgogCi0jOiBnaXRrOjM3OTcKKyM6IGdpdGs6Mzg0MQogbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgogbXNnc3RyICJGb2xnZW5kZSBEYXRlaWVuIHVuZCBWZXJ6ZWljaG5pc3NlIGFuemVpZ2VuIChlaW5lIHBybyBaZWlsZSk6IgogCi0jOiBnaXRrOjM4MTEKKyM6IGdpdGs6Mzg1NQogbXNnaWQgIkFwcGx5IChGNSkiCiBtc2dzdHIgIkFud2VuZGVuIChGNSkiCiAKLSM6IGdpdGs6Mzg0OQorIzogZ2l0azozODkzCiBtc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgogbXNnc3RyICJGZWhsZXIgaW4gZGVuIGF1c2dld8OkaGx0ZW4gVmVyc2lvbmVuOiIKIAotIzogZ2l0azozMzQ3IGdpdGs6MzM5OSBnaXRrOjM4NDIgZ2l0azozODU2IGdpdGs6NTA2MCBnaXRrOjEwMTQxIGdpdGs6MTAxNDIKKyM6IGdpdGs6Mzk0NiBnaXRrOjM5OTggZ2l0azo0NDQ2IGdpdGs6NDQ2MCBnaXRrOjU3MjEgZ2l0azoxMTExNCBnaXRrOjExMTE1CiBtc2dpZCAiTm9uZSIKIG1zZ3N0ciAiS2VpbmUiCiAKLSM6IGdpdGs6Mzc5MCBnaXRrOjU1ODAgZ2l0azo3Mjg3IGdpdGs6NzMwMgorIzogZ2l0azo0Mzk0IGdpdGs6NjI0MSBnaXRrOjc5OTMgZ2l0azo4MDA4CiBtc2dpZCAiRGF0ZSIKIG1zZ3N0ciAiRGF0dW0iCiAKLSM6IGdpdGs6Mzc5MCBnaXRrOjU1ODAKKyM6IGdpdGs6NDM5NCBnaXRrOjYyNDEKIG1zZ2lkICJDRGF0ZSIKIG1zZ3N0ciAiRWludHJhZ2VkYXR1bSIKIAotIzogZ2l0azozOTM5IGdpdGs6Mzk0NAorIzogZ2l0azo0NTQzIGdpdGs6NDU0OAogbXNnaWQgIkRlc2NlbmRhbnQiCiBtc2dzdHIgIkFia8O2bW1saW5nIgogCi0jOiBnaXRrOjM5NDAKKyM6IGdpdGs6NDU0NAogbXNnaWQgIk5vdCBkZXNjZW5kYW50IgotbXNnc3RyICJOaWNodCBBYmvDtm1tbGluZyIKK21zZ3N0ciAiS2VpbiBBYmvDtm1tbGluZyIKIAotIzogZ2l0azozOTQ3IGdpdGs6Mzk1MgorIzogZ2l0azo0NTUxIGdpdGs6NDU1NgogbXNnaWQgIkFuY2VzdG9yIgogbXNnc3RyICJWb3Jnw6RuZ2VyIgogCi0jOiBnaXRrOjM5NDgKKyM6IGdpdGs6NDU1MgogbXNnaWQgIk5vdCBhbmNlc3RvciIKLW1zZ3N0ciAiTmljaHQgVm9yZ8OkbmdlciIKK21zZ3N0ciAiS2VpbiBWb3Jnw6RuZ2VyIgogCi0jOiBnaXRrOjQxODcKKyM6IGdpdGs6NDg0MgogbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKIG1zZ3N0ciAiTG9rYWxlIMOEbmRlcnVuZ2VuIGJlcmVpdGdlc3RlbGx0LCBhYmVyIG5pY2h0IGVpbmdldHJhZ2VuIgogCi0jOiBnaXRrOjQyMjAKKyM6IGdpdGs6NDg3OAogbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgogbXNnc3RyICJMb2thbGUgw4RuZGVydW5nZW4sIG5pY2h0IGJlcmVpdGdlc3RlbGx0IgogCi0jOiBnaXRrOjY2NzMKKyM6IGdpdGs6NjU1OQorbXNnaWQgIm1hbnkiCittc2dzdHIgInZpZWxlIgorCisjOiBnaXRrOjY3NDMKIG1zZ2lkICJUYWdzOiIKIG1zZ3N0ciAiTWFya2llcnVuZ2VuOiIKIAotIzogZ2l0azo2MDY2IGdpdGs6NjA3MiBnaXRrOjcyODAKKyM6IGdpdGs6Njc2MCBnaXRrOjY3NjYgZ2l0azo3OTg2CiBtc2dpZCAiUGFyZW50IgogbXNnc3RyICJFbHRlcm4iCiAKLSM6IGdpdGs6NjA3NworIzogZ2l0azo2NzcxCiBtc2dpZCAiQ2hpbGQiCiBtc2dzdHIgIktpbmQiCiAKLSM6IGdpdGs6NjA4NgorIzogZ2l0azo2NzgwCiBtc2dpZCAiQnJhbmNoIgogbXNnc3RyICJad2VpZyIKIAotIzogZ2l0azo2MDg5CisjOiBnaXRrOjY3ODMKIG1zZ2lkICJGb2xsb3dzIgogbXNnc3RyICJGb2xndCBhdWYiCiAKLSM6IGdpdGs6NjA5MgorIzogZ2l0azo2Nzg2CiBtc2dpZCAiUHJlY2VkZXMiCiBtc2dzdHIgIlZvcmfDpG5nZXIgdm9uIgogCi0jOiBnaXRrOjcyMDkKKyM6IGdpdGs6NzI3OQogIywgdGNsLWZvcm1hdAogbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgogbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXMgVmVyZ2xlaWNoczogJXMiCiAKLSM6IGdpdGs6Nzc0OAorIzogZ2l0azo3ODE5CiBtc2dpZCAiR290bzoiCiBtc2dzdHIgIkdlaGUgenU6IgogCi0jOiBnaXRrOjcxMTUKKyM6IGdpdGs6NzgyMQogbXNnaWQgIlNIQTEgSUQ6IgogbXNnc3RyICJTSEExLUhhc2h3ZXJ0OiIKIAotIzogZ2l0azo3MTM0CisjOiBnaXRrOjc4NDAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKIG1zZ3N0ciAiS3VyemVyIFNIQTEtSGFzaHdlcnQgwrslc8KrIGlzdCBtZWhyZGV1dGlnIgogCi0jOiBnaXRrOjcxNDYKKyM6IGdpdGs6Nzg1MgogIywgdGNsLWZvcm1hdAogbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgotbXNnc3RyICJTSEExLUhhc2h3ZXJ0IMK7JXPCqyB1bmJla2FubnQiCittc2dzdHIgIlNIQTEtSGFzaHdlcnQgwrslc8KrIGlzdCB1bmJla2FubnQiCiAKLSM6IGdpdGs6NzE0OAorIzogZ2l0azo3ODU0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVGFnL0hlYWQgJXMgaXMgbm90IGtub3duIgogbXNnc3RyICJNYXJraWVydW5nL1p3ZWlnIMK7JXPCqyBpc3QgdW5iZWthbm50IgogCi0jOiBnaXRrOjcyOTAKKyM6IGdpdGs6Nzk5NgogbXNnaWQgIkNoaWxkcmVuIgogbXNnc3RyICJLaW5kZXIiCiAKLSM6IGdpdGs6NzM0NworIzogZ2l0azo4MDUzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCiBtc2dzdHIgIlp3ZWlnIMK7JXPCqyBoaWVyaGVyIHp1csO8Y2tzZXR6ZW4iCiAKLSM6IGdpdGs6NzM0OQorIzogZ2l0azo4MDU1CiBtc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCiBtc2dzdHIgIlp3ZWlnc3BpdHplIGlzdCBhYmdldHJlbm50OiBadXLDvGNrc2V0emVuIG5pY2h0IG3DtmdsaWNoIgogCi0jOiBnaXRrOjczODEKKyM6IGdpdGs6ODE2NCBnaXRrOjgxNzAKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICLDnGJlcnNwcmluZ2UgWnVzYW1tZW5mw7xocnVuZ3MtVmVyc2lvbiAiCisKKyM6IGdpdGs6ODE3OSBnaXRrOjgxODQKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgIkZlaGxlciBiZWltIEhvbGVuIGRlciBQYXRjaC1JRCBmw7xyICIKKworIzogZ2l0azo4MTgwIGdpdGs6ODE4NQorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIEFiYnJ1Y2guXG4iCisKKyM6IGdpdGs6ODE5MCBnaXRrOjgxOTMgZ2l0azo4MjAxIGdpdGs6ODIxMSBnaXRrOjgyMjAKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJWZXJzaW9uICIKKworIzogZ2l0azo4MTk0Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgaXN0IGRhcyBnbGVpY2hlIFBhdGNoIHdpZVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODIwMgorbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBpc3QgdW50ZXJzY2hpZWRsaWNoIHZvblxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODIwNAorbXNnaWQgIi0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiLSBBYmJydWNoLlxuIgorCisjOiBnaXRrOjgyMTIgZ2l0azo4MjIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiBoYXQgJXMgS2luZGVyLiBBYmJydWNoXG4iCisKKyM6IGdpdGs6ODI1MgogbXNnaWQgIlRvcCIKIG1zZ3N0ciAiT2JlbiIKIAotIzogZ2l0azo3MzgyCisjOiBnaXRrOjgyNTMKIG1zZ2lkICJGcm9tIgogbXNnc3RyICJWb24iCiAKLSM6IGdpdGs6NzM4NworIzogZ2l0azo4MjU4CiBtc2dpZCAiVG8iCiBtc2dzdHIgImJpcyIKIAotIzogZ2l0azo3NDEwCisjOiBnaXRrOjgyODIKIG1zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKIG1zZ3N0ciAiUGF0Y2ggZXJzdGVsbGVuIgogCi0jOiBnaXRrOjc0MTIKKyM6IGdpdGs6ODI4NAogbXNnaWQgIkZyb206IgogbXNnc3RyICJWb246IgogCi0jOiBnaXRrOjc0MjEKKyM6IGdpdGs6ODI5MwogbXNnaWQgIlRvOiIKIG1zZ3N0ciAiYmlzOiIKIAotIzogZ2l0azo3NDMwCisjOiBnaXRrOjgzMDIKIG1zZ2lkICJSZXZlcnNlIgogbXNnc3RyICJVbWdla2VocnQiCiAKLSM6IGdpdGs6NzQzMiBnaXRrOjc2MDcKKyM6IGdpdGs6ODMwNCBnaXRrOjg0ODkKIG1zZ2lkICJPdXRwdXQgZmlsZToiCiBtc2dzdHIgIkF1c2dhYmVkYXRlaToiCiAKLSM6IGdpdGs6NzQzOAorIzogZ2l0azo4MzEwCiBtc2dpZCAiR2VuZXJhdGUiCiBtc2dzdHIgIkVyemV1Z2VuIgogCi0jOiBnaXRrOjc0NzQKKyM6IGdpdGs6ODM0OAogbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gUGF0Y2ggZXJ6ZXVnZW46IgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBkZXMgUGF0Y2hlczoiCiAKLSM6IGdpdGs6NzQ5NiBnaXRrOjc1OTUgZ2l0azo3NjQ5CisjOiBnaXRrOjgzNzEgZ2l0azo4NDc3IGdpdGs6ODUzNAogbXNnaWQgIklEOiIKIG1zZ3N0ciAiSUQ6IgogCi0jOiBnaXRrOjc1MDUKKyM6IGdpdGs6ODM4MAogbXNnaWQgIlRhZyBuYW1lOiIKIG1zZ3N0ciAiTWFya2llcnVuZ3NuYW1lOiIKIAotIzogZ2l0azo3NTA5IGdpdGs6NzY1OQorIzogZ2l0azo4Mzg0IGdpdGs6ODU0MwogbXNnaWQgIkNyZWF0ZSIKIG1zZ3N0ciAiRXJzdGVsbGVuIgogCi0jOiBnaXRrOjc1MjQKKyM6IGdpdGs6ODQwMQogbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKIG1zZ3N0ciAiS2VpbiBNYXJraWVydW5nc25hbWUgYW5nZWdlYmVuIgogCi0jOiBnaXRrOjc1MjgKKyM6IGdpdGs6ODQwNQogIywgdGNsLWZvcm1hdAogbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCiBtc2dzdHIgIk1hcmtpZXJ1bmcgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKIAotIzogZ2l0azo3NTM0CisjOiBnaXRrOjg0MTEKIG1zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgotbXNnc3RyICJGZWhsZXIgYmVpIE1hcmtpZXJ1bmcgZXJzdGVsbGVuOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlciBNYXJraWVydW5nOiIKIAotIzogZ2l0azo3NjA0CisjOiBnaXRrOjg0ODYKIG1zZ2lkICJDb21tYW5kOiIKIG1zZ3N0ciAiS29tbWFuZG86IgogCi0jOiBnaXRrOjc2MTIKKyM6IGdpdGs6ODQ5NAogbXNnaWQgIldyaXRlIgogbXNnc3RyICJTY2hyZWliZW4iCiAKLSM6IGdpdGs6NzYyOAorIzogZ2l0azo4NTEyCiBtc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgogbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIFZlcnNpb246IgogCi0jOiBnaXRrOjc2NTQKKyM6IGdpdGs6ODUzOQogbXNnaWQgIk5hbWU6IgogbXNnc3RyICJOYW1lOiIKIAotIzogZ2l0azo3Njc0CisjOiBnaXRrOjg1NjIKIG1zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgogbXNnc3RyICJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gTmFtZW4gZsO8ciBkZW4gbmV1ZW4gWndlaWcgYW4uIgogCi0jOiBnaXRrOjgzMjgKKyM6IGdpdGs6ODU2NwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgogbXNnc3RyICJad2VpZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIFNvbGwgZXIgw7xiZXJzY2hyaWViZW4gd2VyZGVuPyIKIAotIzogZ2l0azo4Mzk0CisjOiBnaXRrOjg2MzMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKIG1zZ3N0ciAiIgogIlZlcnNpb24gwrslc8KrIGlzdCBiZXJlaXRzIGltIFp3ZWlnIMK7JXPCqyBlbnRoYWx0ZW4gLS0gdHJvdHpkZW0gZXJuZXV0ICIKICJlaW50cmFnZW4/IgogCi0jOiBnaXRrOjc3MTgKKyM6IGdpdGs6ODYzOAogbXNnaWQgIkNoZXJyeS1waWNraW5nIgogbXNnc3RyICJWZXJzaW9uIHBmbMO8Y2tlbiIKIAotIzogZ2l0azo4NDA4CisjOiBnaXRrOjg2NDcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCkBAIC04MjIsNDUgKzg4OCw0NSBAQAogbXNnc3RyICIiCiAiUGZsw7xja2VuIGZlaGxnZXNjaGxhZ2VuLCBkYSBub2NoIGxva2FsZSDDhG5kZXJ1bmdlbiBpbiBEYXRlaSDCuyVzwqtcbiIKICJ2b3JsaWVnZW4uIEJpdHRlIGRpZXNlIMOEbmRlcnVuZ2VuIGVpbnRyYWdlbiwgenVyw7xja3NldHplbiBvZGVyXG4iCi0iendpc2NoZW5zcGVpY2hlcm4gKMK7Z2l0IHN0YXNowrspIHVuZCBkYW5uIGVybmV1dCB2ZXJzdWNoZW4uIgorInp3aXNjaGVuc3BlaWNoZXJuICjCu2dpdCBzdGFzaMKrKSB1bmQgZGFubiBlcm5ldXQgdmVyc3VjaGVuLiIKIAotIzogZ2l0azo4NDE0CisjOiBnaXRrOjg2NTMKIG1zZ2lkICIiCiAiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCiAiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCiBtc2dzdHIgIiIKICJQZmzDvGNrZW4gZmVobGdlc2NobGFnZW4sIGRhIGVpbiBadXNhbW1lbmbDvGhydW5ncy1Lb25mbGlrdCBhdWZnZXRyZXRlblxuIgotImlzdC4gU29sbCBkYXMgwrtnaXQgY2l0b29swqsgKFp1c2FtbWVuZsO8aHJ1bmdzLVdlcmt6ZXVnKSBhdWZnZXJ1ZmVuXG4iCisiaXN0LiBTb2xsIGRhcyBadXNhbW1lbmbDvGhydW5ncy1XZXJremV1ZyAowrtnaXQgY2l0b29swqspIGF1ZmdlcnVmZW5cbiIKICJ3ZXJkZW4sIHVtIGRpZXNlbiBLb25mbGlrdCBhdWZ6dWzDtnNlbj8iCiAKLSM6IGdpdGs6ODQzMAorIzogZ2l0azo4NjY5CiBtc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCiBtc2dzdHIgIktlaW5lIMOEbmRlcnVuZ2VuIGVpbmdldHJhZ2VuIgogCi0jOiBnaXRrOjc3NDUKKyM6IGdpdGs6ODY5NQogbXNnaWQgIkNvbmZpcm0gcmVzZXQiCiBtc2dzdHIgIlp1csO8Y2tzZXR6ZW4gYmVzdMOkdGlnZW4iCiAKLSM6IGdpdGs6Nzc0NworIzogZ2l0azo4Njk3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKIG1zZ3N0ciAiWndlaWcgwrslc8KrIGF1ZiDCuyVzwqsgenVyw7xja3NldHplbj8iCiAKLSM6IGdpdGs6Nzc1MQorIzogZ2l0azo4NzAxCiBtc2dpZCAiUmVzZXQgdHlwZToiCiBtc2dzdHIgIkFydCBkZXMgWnVyw7xja3NldHplbnM6IgogCi0jOiBnaXRrOjc3NTUKKyM6IGdpdGs6ODcwNQogbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgogbXNnc3RyICJIYXJtbG9zOiBBcmJlaXRza29waWUgdW5kIEJlcmVpdHN0ZWxsdW5nIHVudmVyw6RuZGVydCIKIAotIzogZ2l0azo3NzU4CisjOiBnaXRrOjg3MDgKIG1zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCiBtc2dzdHIgIiIKICJHZW1pc2NodDogQXJiZWl0c2tvcGllIHVudmVyw6RuZGVydCxcbiIKICJCZXJlaXRzdGVsbHVuZyB6dXLDvGNrZ2VzZXR6dCIKIAotIzogZ2l0azo3NzYxCisjOiBnaXRrOjg3MTEKIG1zZ2lkICIiCiAiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgogIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKQEAgLTg2OCwyMSArOTM0LDIxIEBACiAiSGFydDogQXJiZWl0c2tvcGllIHVuZCBCZXJlaXRzdGVsbHVuZ1xuIgogIihBbGxlIGxva2FsZW4gw4RuZGVydW5nZW4gd2VyZGVuIGdlbMO2c2NodCkiCiAKLSM6IGdpdGs6Nzc3NworIzogZ2l0azo4NzI4CiBtc2dpZCAiUmVzZXR0aW5nIgogbXNnc3RyICJadXLDvGNrc2V0emVuIgogCi0jOiBnaXRrOjc4MzQKKyM6IGdpdGs6ODc4NQogbXNnaWQgIkNoZWNraW5nIG91dCIKIG1zZ3N0ciAiVW1zdGVsbGVuIgogCi0jOiBnaXRrOjc4ODUKKyM6IGdpdGs6ODgzOAogbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCiBtc2dzdHIgIiIKICJEZXIgWndlaWcsIGF1ZiBkZW4gZGllIEFyYmVpdHNrb3BpZSBtb21lbnRhbiB1bWdlc3RlbGx0IGlzdCwga2FubiBuaWNodCAiCiAiZ2Vsw7ZzY2h0IHdlcmRlbi4iCiAKLSM6IGdpdGs6Nzg5MQorIzogZ2l0azo4ODQ0CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKQEAgLTg5MSwxNzQgKzk1NywxNzQgQEAKICJEaWUgVmVyc2lvbmVuIGF1ZiBad2VpZyDCuyVzwqsgZXhpc3RpZXJlbiBhdWYga2VpbmVtIGFuZGVyZW4gWndlaWcuXG4iCiAiWndlaWcgwrslc8KrIHRyb3R6ZGVtIGzDtnNjaGVuPyIKIAotIzogZ2l0azo3OTIyCisjOiBnaXRrOjg4NzUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCiBtc2dzdHIgIk1hcmtpZXJ1bmdlbiB1bmQgWndlaWdlOiAlcyIKIAotIzogZ2l0azo3OTM2CisjOiBnaXRrOjg4OTAKIG1zZ2lkICJGaWx0ZXIiCiBtc2dzdHIgIkZpbHRlcm4iCiAKLSM6IGdpdGs6ODIzMAorIzogZ2l0azo5MTg1CiBtc2dpZCAiIgogIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgogInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgogbXNnc3RyICIiCi0iRmVobGVyIGJlaW0gTGVzZW4gZGVyIFN0cnVrdHVyaW5mb3JtYXRpb25lbjsgWndlaWdlIHVuZCBWb3Jnw6RuZ2VyL05hY2hmb2xnZXIgIgotIkluZm9ybWF0aW9uZW4gd2VyZGVuIHVudm9sbHN0w6RuZGlnIHNlaW4uIgorIkZlaGxlciBiZWltIExlc2VuIGRlciBTdHJ1a3R1cmluZm9ybWF0aW9uZW47IFp3ZWlnZSB1bmQgSW5mb3JtYXRpb25lbiB6dSAiCisiVm9yZ8Okbmdlci9OYWNoZm9sZ2VyIHdlcmRlbiB1bnZvbGxzdMOkbmRpZyBzZWluLiIKIAotIzogZ2l0azo5MjE2CisjOiBnaXRrOjEwMTcxCiBtc2dpZCAiVGFnIgogbXNnc3RyICJNYXJraWVydW5nIgogCi0jOiBnaXRrOjkyMTYKKyM6IGdpdGs6MTAxNzEKIG1zZ2lkICJJZCIKIG1zZ3N0ciAiSWQiCiAKLSM6IGdpdGs6OTI2MgorIzogZ2l0azoxMDIxOQogbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgotbXNnc3RyICJHaXRrIFNjaHJpZnRlbiB3w6RobGVuIgorbXNnc3RyICJHaXRrLVNjaHJpZnRlbiB3w6RobGVuIgogCi0jOiBnaXRrOjkyNzkKKyM6IGdpdGs6MTAyMzYKIG1zZ2lkICJCIgogbXNnc3RyICJGIgogCi0jOiBnaXRrOjkyODIKKyM6IGdpdGs6MTAyMzkKIG1zZ2lkICJJIgogbXNnc3RyICJLIgogCi0jOiBnaXRrOjkzNzUKKyM6IGdpdGs6MTAzMzQKIG1zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgotbXNnc3RyICJHaXRrIEVpbnN0ZWxsdW5nZW4iCittc2dzdHIgIkdpdGstRWluc3RlbGx1bmdlbiIKIAotIzogZ2l0azo5Mzc2CisjOiBnaXRrOjEwMzM2CiBtc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgotbXNnc3RyICJBbnplaWdlIFZlcnNpb25zbGlzdGUiCittc2dzdHIgIkFuemVpZ2UgZGVyIFZlcnNpb25zbGlzdGUiCiAKLSM6IGdpdGs6OTM3OQorIzogZ2l0azoxMDMzOQogbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKIG1zZ3N0ciAiTWF4aW1hbGUgR3JhcGhlbmJyZWl0ZSAoWmVpbGVuKSIKIAotIzogZ2l0azo5MzgzCisjOiBnaXRrOjEwMzQzCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKIG1zZ3N0ciAiTWF4aW1hbGUgR3JhcGhlbmJyZWl0ZSAoJSBkZXMgRmVuc3RlcnMpIgogCi0jOiBnaXRrOjkzODgKKyM6IGdpdGs6MTAzNDcKIG1zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCiBtc2dzdHIgIkxva2FsZSDDhG5kZXJ1bmdlbiBhbnplaWdlbiIKIAotIzogZ2l0azo5MzkzCisjOiBnaXRrOjEwMzUwCiBtc2dpZCAiQXV0by1zZWxlY3QgU0hBMSIKLW1zZ3N0ciAiU0hBMS1IYXNod2VydCBhdXRvbWF0aXNjaCBtYXJraWVyZW4iCittc2dzdHIgIlNIQTEtSGFzaHdlcnQgYXV0b21hdGlzY2ggYXVzd8OkaGxlbiIKIAotIzogZ2l0azo5Mzk4CisjOiBnaXRrOjEwMzU0CiBtc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCi1tc2dzdHIgIkFuemVpZ2UgVmVyZ2xlaWNoIgorbXNnc3RyICJBbnplaWdlIGRlcyBWZXJnbGVpY2hzIgogCi0jOiBnaXRrOjk0MDAKKyM6IGdpdGs6MTAzNTYKIG1zZ2lkICJUYWIgc3BhY2luZyIKIG1zZ3N0ciAiVGFidWxhdG9yYnJlaXRlIgogCi0jOiBnaXRrOjk0MDQKKyM6IGdpdGs6MTAzNTkKIG1zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzIgotbXNnc3RyICJOYWhlbGllZ2VuZGUgw5xiZXJzY2hyaWZ0ZW4gYW56ZWlnZW4iCittc2dzdHIgIk5haGVsaWVnZW5kZSBNYXJraWVydW5nZW4gYW56ZWlnZW4iCiAKLSM6IGdpdGs6OTQwOQorIzogZ2l0azoxMDM2MgogbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKIG1zZ3N0ciAiVmVyZ2xlaWNoIG51ciBmw7xyIGFuZ2V6ZWlndGUgUGZhZGUiCiAKLSM6IGdpdGs6OTQxNAorIzogZ2l0azoxMDM2NQogbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgogbXNnc3RyICJaZWljaGVua29kaWVydW5nIHBybyBEYXRlaSBlcm1pdHRlbG4iCiAKLSM6IGdpdGs6OTQyMQorIzogZ2l0azoxMDM3MSBnaXRrOjEwNDM2CiBtc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgotbXNnc3RyICJFeHRlcm5lcyBWZXJnbGVpY2gtKERpZmYtKVByb2dyYW1tIgorbXNnc3RyICJFeHRlcm5lcyBEaWZmLVByb2dyYW1tIgogCi0jOiBnaXRrOjk0MjMKKyM6IGdpdGs6MTAzNzMKIG1zZ2lkICJDaG9vc2UuLi4iCi1tc2dzdHIgIlfDpGhsZW4uLi4iCittc2dzdHIgIlfDpGhsZW4gLi4uIgogCi0jOiBnaXRrOjk0MjgKKyM6IGdpdGs6MTAzNzgKIG1zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKIG1zZ3N0ciAiRmFyYmVuOiBLbGlja2VuIHp1bSBXw6RobGVuIgogCi0jOiBnaXRrOjk0MzEKKyM6IGdpdGs6MTAzODEKIG1zZ2lkICJCYWNrZ3JvdW5kIgogbXNnc3RyICJIaW50ZXJncnVuZCIKIAotIzogZ2l0azoxMDE1MyBnaXRrOjEwMTgzCisjOiBnaXRrOjEwMzgyIGdpdGs6MTA0MTIKIG1zZ2lkICJiYWNrZ3JvdW5kIgogbXNnc3RyICJIaW50ZXJncnVuZCIKIAotIzogZ2l0azoxMDE1NgorIzogZ2l0azoxMDM4NQogbXNnaWQgIkZvcmVncm91bmQiCiBtc2dzdHIgIlZvcmRlcmdydW5kIgogCi0jOiBnaXRrOjEwMTU3CisjOiBnaXRrOjEwMzg2CiBtc2dpZCAiZm9yZWdyb3VuZCIKIG1zZ3N0ciAiVm9yZGVyZ3J1bmQiCiAKLSM6IGdpdGs6MTAxNjAKKyM6IGdpdGs6MTAzODkKIG1zZ2lkICJEaWZmOiBvbGQgbGluZXMiCiBtc2dzdHIgIlZlcmdsZWljaDogQWx0ZSBaZWlsZW4iCiAKLSM6IGdpdGs6MTAxNjEKKyM6IGdpdGs6MTAzOTAKIG1zZ2lkICJkaWZmIG9sZCBsaW5lcyIKIG1zZ3N0ciAiVmVyZ2xlaWNoIC0gQWx0ZSBaZWlsZW4iCiAKLSM6IGdpdGs6MTAxNjUKKyM6IGdpdGs6MTAzOTQKIG1zZ2lkICJEaWZmOiBuZXcgbGluZXMiCiBtc2dzdHIgIlZlcmdsZWljaDogTmV1ZSBaZWlsZW4iCiAKLSM6IGdpdGs6MTAxNjYKKyM6IGdpdGs6MTAzOTUKIG1zZ2lkICJkaWZmIG5ldyBsaW5lcyIKIG1zZ3N0ciAiVmVyZ2xlaWNoIC0gTmV1ZSBaZWlsZW4iCiAKLSM6IGdpdGs6MTAxNzAKKyM6IGdpdGs6MTAzOTkKIG1zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKIG1zZ3N0ciAiVmVyZ2xlaWNoOiDDhG5kZXJ1bmdzdGl0ZWwiCiAKLSM6IGdpdGs6MTAxNzIKKyM6IGdpdGs6MTA0MDEKIG1zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgogbXNnc3RyICJWZXJnbGVpY2ggLSDDhG5kZXJ1bmdzdGl0ZWwiCiAKLSM6IGdpdGs6MTAxNzYKKyM6IGdpdGs6MTA0MDUKIG1zZ2lkICJNYXJrZWQgbGluZSBiZyIKLW1zZ3N0ciAiTWFya2llcnRlIFplaWxlIEhpbnRlcmdydW5kIgorbXNnc3RyICJIaW50ZXJncnVuZCBmw7xyIG1hcmtpZXJ0ZSBaZWlsZSIKIAotIzogZ2l0azoxMDE3OAorIzogZ2l0azoxMDQwNwogbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCi1tc2dzdHIgIm1hcmtpZXJ0ZSBaZWlsZSBIaW50ZXJncnVuZCIKK21zZ3N0ciAiSGludGVyZ3J1bmQgZsO8ciBtYXJraWVydGUgWmVpbGUiCiAKLSM6IGdpdGs6MTAxODIKKyM6IGdpdGs6MTA0MTEKIG1zZ2lkICJTZWxlY3QgYmciCi1tc2dzdHIgIkhpbnRlcmdydW5kZmFyYmUgQXVzd8OkaGxlbiIKK21zZ3N0ciAiSGludGVyZ3J1bmRmYXJiZSBhdXN3w6RobGVuIgogCi0jOiBnaXRrOjk0NTkKKyM6IGdpdGs6MTA0MTUKIG1zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgogbXNnc3RyICJTY2hyaWZ0YXJ0OiBLbGlja2VuIHp1bSBXw6RobGVuIgogCi0jOiBnaXRrOjk0NjEKKyM6IGdpdGs6MTA0MTcKIG1zZ2lkICJNYWluIGZvbnQiCiBtc2dzdHIgIlByb2dyYW1tc2NocmlmdGFydCIKIAotIzogZ2l0azo5NDYyCisjOiBnaXRrOjEwNDE4CiBtc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCi1tc2dzdHIgIlZlcmdsZWljaCIKK21zZ3N0ciAiU2NocmlmdGFydCBmw7xyIFZlcmdsZWljaCIKIAotIzogZ2l0azo5NDYzCisjOiBnaXRrOjEwNDE5CiBtc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKIG1zZ3N0ciAiQmVzY2hyaWZ0dW5nZW4iCiAKLSM6IGdpdGs6OTQ4OAorIzogZ2l0azoxMDQ0NgogIywgdGNsLWZvcm1hdAogbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCiBtc2dzdHIgIkdpdGs6IEZhcmJlIHfDpGhsZW4gZsO8ciAlcyIKIAotIzogZ2l0azo5OTM0CisjOiBnaXRrOjEwODkzCiBtc2dpZCAiIgogIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgogIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgpAQCAtMTA2NiwyNCArMTEzMiwyNCBAQAogIkdpdGsgbMOkdWZ0IG5pY2h0IG1pdCBkaWVzZXIgVmVyc2lvbiB2b24gVGNsL1RrLlxuIgogIkdpdGsgYmVuw7Z0aWd0IG1pbmRlc3RlbnMgVGNsL1RrIDguNC4iCiAKLSM6IGdpdGs6MTAwNDcKKyM6IGdpdGs6MTEwMjAKIG1zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgogbXNnc3RyICJLZWluIEdpdC1Qcm9qZWt0YXJjaGl2IGdlZnVuZGVuLiIKIAotIzogZ2l0azoxMDA1MQorIzogZ2l0azoxMTAyNAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCiBtc2dzdHIgIkdpdC1WZXJ6ZWljaG5pcyDCuyVzwqsgd3VyZGUgbmljaHQgZ2VmdW5kZW4uIgogCi0jOiBnaXRrOjEwMDk4CisjOiBnaXRrOjExMDcxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgogbXNnc3RyICJNZWhyZGV1dGlnZSBBbmdhYmUgwrslc8KrOiBTb3dvaGwgVmVyc2lvbiBhbHMgYXVjaCBEYXRlaW5hbWUgZXhpc3RpZXJ0LiIKIAotIzogZ2l0azoxMDExMAorIzogZ2l0azoxMTA4MwogbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCiBtc2dzdHIgIkZhbHNjaGUgS29tbWFuZG96ZWlsZW4tUGFyYW1ldGVyIGbDvHIgZ2l0azoiCiAKLSM6IGdpdGs6MTAxNzAKKyM6IGdpdGs6MTExNjcKIG1zZ2lkICJDb21tYW5kIGxpbmUiCiBtc2dzdHIgIktvbW1hbmRvemVpbGUiCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9ydS5wbyBiL2dpdGstZ2l0L3BvL3J1LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNGViYTgKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9ydS5wbwpAQCAtMCwwICsxLDEwODUgQEAKKyMKKyMgVHJhbnNsYXRpb24gb2YgZ2l0ayB0byBSdXNzaWFuLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0a1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNC0yNCAxNjowMCswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0wNC0yNCAxNjowMCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBbGV4IFJpZXNlbiA8cmFhLmxrbWxAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFJ1c3NpYW5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0azoxMTMKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIiIKKyLQndC10LLQvtC30LzQvtC20L3QviDQv9C+0LvRg9GH0LjRgtGMINGB0L/QuNGB0L7QuiDRhNCw0LnQu9C+0LIg0L3QtdC30LDQstC10YDRiNGR0L3QvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuCDRgdC70LjRj9C90LjRjzoiCisKKyM6IGdpdGs6MjY4Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0LIg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQtSDQstC10YDRgdC40Lg6IgorCisjOiBnaXRrOjMyMworbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQutC+0LzQsNC90LTRiyDQt9Cw0LTQsNC90L7QuSAtLWFyZ3NjbWQ6IgorCisjOiBnaXRrOjMzNgorbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorItCk0LDQudC70Ysg0L3QtSDQstGL0LHRgNCw0L3Rizog0YPQutCw0LfQsNC9IC0tbWVyZ2UsINC90L4g0L3QtSDQsdGL0LvQviDQvdCw0LnQtNC10L3QviDQvdC4INC+0LTQvdC+0LPQviDRhNCw0LnQu9CwICIKKyLQs9C00LUg0Y3RgtCwINC+0L/QtdGA0LDRhtC40Y8g0LTQvtC70LbQvdCwINCx0YvRgtGMINC30LDQstC10YDRiNC10L3QsC4iCisKKyM6IGdpdGs6MzM5Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIiIKKyLQpNCw0LnQu9GLINC90LUg0LLRi9Cx0YDQsNC90Ys6INGD0LrQsNC30LDQvSAtLW1lcmdlLCDQvdC+INCyINGA0LDQvNC60LDRhSDRg9C60LDQt9Cw0L3QvtCz0L4gIgorItC+0LPRgNCw0L3QuNGH0LXQvdC40Y8g0L3QsCDQuNC80LXQvdCwINGE0LDQudC70L7QsiDQvdC10YIg0L3QuCDQvtC00L3QvtCz0L4gIgorItCz0LTQtSDRjdGC0LAg0L7Qv9C10YDQsNGG0LjRjyDQtNC+0LvQttC90LAg0LHRi9GC0Ywg0LfQsNCy0LXRgNGI0LXQvdCwLiIKKworIzogZ2l0azozNjEgZ2l0azo1MDgKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0L/Rg9GB0LrQsCBnaXQgbG9nOiIKKworIzogZ2l0azozNzkKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICLQp9GC0LXQvdC40LUiCisKKyM6IGdpdGs6NDM5IGdpdGs6NDAyMQorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAi0KfRgtC10L3QuNC1INCy0LXRgNGB0LjQuS4uLiIKKworIzogZ2l0azo0NDIgZ2l0azoxNTYwIGdpdGs6NDAyNAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgItCd0LjRh9C10LPQviDQvdC1INCy0YvQsdGA0LDQvdC+IgorCisjOiBnaXRrOjE0MzYKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQvtCx0YDQsNCx0L7RgtC60Lgg0LLRi9Cy0L7QtNCwINC60L7QvNCw0L3QtNGLIGdpdCBsb2c6IgorCisjOiBnaXRrOjE2NTYKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICLQndC10YIg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0YHQvtGB0YLQvtGP0L3QuNC4IgorCisjOiBnaXRrOjE3OTEgZ2l0azoxODE1IGdpdGs6MzgxNCBnaXRrOjg0NzggZ2l0azoxMDAxNCBnaXRrOjEwMTg2Cittc2dpZCAiT0siCittc2dzdHIgIk9rIgorCisjOiBnaXRrOjE4MTcgZ2l0azozODE2IGdpdGs6ODA3OCBnaXRrOjgxNTIgZ2l0azo4MjU5IGdpdGs6ODMwOCBnaXRrOjg0ODAKKyM6IGdpdGs6MTAwMTUgZ2l0azoxMDE4NworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAi0J7RgtC80LXQvdCwIgorCisjOiBnaXRrOjE5MTUKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgItCe0LHQvdC+0LLQuNGC0YwiCisKKyM6IGdpdGs6MTkxNgorbXNnaWQgIlJlbG9hZCIKK21zZ3N0ciAi0J/QtdGA0LXRh9C40YLQsNGC0YwiCisKKyM6IGdpdGs6MTkxNworbXNnaWQgIlJlcmVhZCByZWZlcmVuY2VzIgorbXNnc3RyICLQntCx0L3QvtCy0LjRgtGMINGB0L/QuNGB0L7QuiDRgdGB0YvQu9C+0LoiCisKKyM6IGdpdGs6MTkxOAorbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAi0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiIKKworIzogZ2l0azoxOTIwCittc2dpZCAiU3RhcnQgZ2l0IGd1aSIKK21zZ3N0ciAi0JfQsNC/0YPRgdGC0LjRgtGMIGdpdCBndWkiCisKKyM6IGdpdGs6MTkyMgorbXNnaWQgIlF1aXQiCittc2dzdHIgItCX0LDQstC10YDRiNC40YLRjCIKKworIzogZ2l0azoxOTE0Cittc2dpZCAiRmlsZSIKK21zZ3N0ciAi0KTQsNC50LsiCisKKyM6IGdpdGs6MTkyNQorbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LgiCisKKyM6IGdpdGs6MTkyNAorbXNnaWQgIkVkaXQiCittc2dzdHIgItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMIgorCisjOiBnaXRrOjE5MjgKK21zZ2lkICJOZXcgdmlldy4uLiIKK21zZ3N0ciAi0J3QvtCy0L7QtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtS4uLiIKKworIzogZ2l0azoxOTI5Cittc2dpZCAiRWRpdCB2aWV3Li4uIgorbXNnc3RyICLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtS4uLiIKKworIzogZ2l0azoxOTMwCittc2dpZCAiRGVsZXRlIHZpZXciCittc2dzdHIgItCj0LTQsNC70LjRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1IgorCisjOiBnaXRrOjE5MzIKK21zZ2lkICJBbGwgZmlsZXMiCittc2dzdHIgItCS0YHQtSDRhNCw0LnQu9GLIgorCisjOiBnaXRrOjE5MjcgZ2l0azozNjI2Cittc2dpZCAiVmlldyIKK21zZ3N0ciAi0J/RgNC10LTRgdGC0LDQstC70LXQvdC40LUiCisKKyM6IGdpdGs6MTkzNSBnaXRrOjI2MDkKK21zZ2lkICJBYm91dCBnaXRrIgorbXNnc3RyICLQniBnaXRrIgorCisjOiBnaXRrOjE5MzYKK21zZ2lkICJLZXkgYmluZGluZ3MiCittc2dzdHIgItCd0LDQt9C90LDRh9C10L3QuNGPINC60LvQsNCy0LjQsNGC0YPRgNGLIgorCisjOiBnaXRrOjE5MzQKK21zZ2lkICJIZWxwIgorbXNnc3RyICLQn9C+0LTRgdC60LDQt9C60LAiCisKKyM6IGdpdGs6MTk5NAorbXNnaWQgIlNIQTEgSUQ6ICIKK21zZ3N0ciAiU0hBMToiCisKKyM6IGdpdGs6MjAyNQorbXNnaWQgIlJvdyIKK21zZ3N0ciAi0KHRgtGA0L7QutCwIgorCisjOiBnaXRrOjIwNTYKK21zZ2lkICJGaW5kIgorbXNnc3RyICLQn9C+0LjRgdC6IgorCisjOiBnaXRrOjIwNTcKK21zZ2lkICJuZXh0IgorbXNnc3RyICLQodC70LXQtC4iCisKKyM6IGdpdGs6MjA1OAorbXNnaWQgInByZXYiCittc2dzdHIgItCf0YDQtdC0LiIKKworIzogZ2l0azoyMDU5Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICLRgdC+0YHRgtC+0Y/QvdC40LUiCisKKyM6IGdpdGs6MjA2MiBnaXRrOjIwNjQgZ2l0azo0MTc5IGdpdGs6NDIwMiBnaXRrOjQyMjYgZ2l0azo2MTY0IGdpdGs6NjIzNgorIzogZ2l0azo2MzIwCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgItGB0L7QtNC10YDQttCw0YnQtdC1OiIKKworIzogZ2l0azoyMDY1IGdpdGs6MzExNyBnaXRrOjMxMjIgZ2l0azo0MjU0Cittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICLQutCw0YHQsNGC0LXQu9GM0L3QviDRhNCw0LnQu9C+0LI6IgorCisjOiBnaXRrOjIwNjYgZ2l0azo0MjU5Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgItC00L7QsdCw0LLQuNCyL9GD0LTQsNC70LjQsiDRgdGC0YDQvtC60YM6IgorCisjOiBnaXRrOjIwNzUgZ2l0azoyMDc3Cittc2dpZCAiRXhhY3QiCittc2dzdHIgItCi0L7Rh9C90L4iCisKKyM6IGdpdGs6MjA3NyBnaXRrOjQzMzQgZ2l0azo2MTMyCittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAi0JjQs9C90L7RgNC40YDQvtCy0LDRgtGMINCx0L7Qu9GM0YjQuNC1L9C80LDQu9C10L3RjNC60LjQtSIKKworIzogZ2l0azoyMDc3IGdpdGs6NDIyOCBnaXRrOjQzMzIgZ2l0azo2MTI4Cittc2dpZCAiUmVnZXhwIgorbXNnc3RyICLQoNC10LPRg9C70Y/RgNC90YvQtSDQstGL0YDQsNC20LXQvdC40Y8iCisKKyM6IGdpdGs6MjA3OSBnaXRrOjIwODAgZ2l0azo0MzUzIGdpdGs6NDM4MyBnaXRrOjQzOTAgZ2l0azo2MjU2IGdpdGs6NjMyNAorbXNnaWQgIkFsbCBmaWVsZHMiCittc2dzdHIgItCS0L4g0LLRgdC10YUg0L/QvtC70Y/RhSIKKworIzogZ2l0azoyMDgwIGdpdGs6NDM1MSBnaXRrOjQzODMgZ2l0azo2MTk1Cittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgItCX0LDQs9C+0LvQvtCy0L7QuiIKKworIzogZ2l0azoyMDgxIGdpdGs6NDM1MSBnaXRrOjYxOTUgZ2l0azo2MzI0IGdpdGs6NjczNworbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICLQmtC+0LzQvNC10L3RgtCw0YDQuNC4IgorCisjOiBnaXRrOjIwODEgZ2l0azo0MzUxIGdpdGs6NDM1NSBnaXRrOjQzOTAgZ2l0azo2MTk1IGdpdGs6NjY3MiBnaXRrOjc5MjMKKyM6IGdpdGs6NzkzOAorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAi0JDQstGC0L7RgCIKKworIzogZ2l0azoyMDgxIGdpdGs6NDM1MSBnaXRrOjYxOTUgZ2l0azo2Njc0Cittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICLQodC+0YXRgNCw0L3QuNCy0YjQuNC5INGB0L7RgdGC0L7Rj9C90LjQtSIKKworIzogZ2l0azoyMTEwCittc2dpZCAiU2VhcmNoIgorbXNnc3RyICLQndCw0LnRgtC4IgorCisjOiBnaXRrOjIxMTcKK21zZ2lkICJEaWZmIgorbXNnc3RyICLQodGA0LDQstC90LjRgtGMIgorCisjOiBnaXRrOjIxMTkKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAi0KHRgtCw0YDQsNGPINCy0LXRgNGB0LjRjyIKKworIzogZ2l0azoyMTIxCittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgItCd0L7QstCw0Y8g0LLQtdGA0YHQuNGPIgorCisjOiBnaXRrOjIxMjMKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICLQodGC0YDQvtC6INC60L7QvdGC0LXQutGB0YLQsCIKKworIzogZ2l0azoyMTMzCittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAi0JjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC/0YDQvtCx0LXQu9GLIgorCisjOiBnaXRrOjIxOTEKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAi0J/QsNGC0YciCisKKyM6IGdpdGs6MjE5MworbXNnaWQgIlRyZWUiCittc2dzdHIgItCk0LDQudC70YsiCisKKyM6IGdpdGs6MjMyNiBnaXRrOjIzMzkKK21zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCittc2dzdHIgItCh0YDQsNCy0L3QuNGC0Ywg0Y3RgtC+INGB0L7RgdGC0L7Rj9C90LjQtSDRgSDQstGL0LTQtdC70LXQvdGL0LwiCisKKyM6IGdpdGs6MjMyNyBnaXRrOjIzNDAKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgItCh0YDQsNCy0L3QuNGC0Ywg0LLRi9C00LXQu9C10L3QvtC1INGBINGN0YLQuNC8INGB0L7RgdGC0L7Rj9C90LjQtdC8IgorCisjOiBnaXRrOjIzMjggZ2l0azoyMzQxCittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0L/QsNGC0YciCisKKyM6IGdpdGs6MjMyOSBnaXRrOjgxMzYKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCDQvNC10YLQutGDIgorCisjOiBnaXRrOjIzMzAgZ2l0azo4MjM5Cittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgItCh0L7RhdGA0LDQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YTQsNC50LsiCisKKyM6IGdpdGs6MjMzMSBnaXRrOjgyOTYKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0LLQtdGC0LLRjCIKKworIzogZ2l0azoyMzMyCittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgItCh0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0Y3RgtC+INGB0L7RgdGC0L7Rj9C90LjQtSIKKworIzogZ2l0azoyMzMzCittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAi0KPRgdGC0LDQvdC+0LLQuNGC0YwgSEVBRCDQvdCwINGN0YLQviDRgdC+0YHRgtC+0Y/QvdC40LUiCisKKyM6IGdpdGs6MjM0NworbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0L3QsCDRjdGC0YMg0LLQtdGC0LLRjCIKKworIzogZ2l0azoyMzQ4Cittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCDRjdGC0YMg0LLQtdGC0LLRjCIKKworIzogZ2l0azoyMzU1Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICLQn9C+0LTRgdCy0LXRgtC40YLRjCDRjdGC0L7RgiDRgtC+0LbQtSIKKworIzogZ2l0azoyMzU2Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAi0J/QvtC00YHQstC10YLQuNGC0Ywg0YLQvtC70YzQutC+INGN0YLQvtGCIgorCisjOiBnaXRrOjIzNTcKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNC80LAg0YHRgNCw0LLQvdC10L3QuNGPIgorCisjOiBnaXRrOjIzNTgKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICLQkNC90L3QvtGC0LjRgNC+0LLQsNGC0Ywg0YDQvtC00LjRgtC10LvRjNGB0LrQvtC1INGB0L7RgdGC0L7Rj9C90LjQtSIKKworIzogZ2l0azoyMzY1Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YfQvdC40Log0Y3RgtC+0Lkg0YHRgtGA0L7QutC4IgorCisjOiBnaXRrOjIzNjYKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgItCX0LDQv9GD0YHRgtC40YLRjCBnaXQgZ3VpIGJsYW1lINC00LvRjyDRjdGC0L7QuSDRgdGC0YDQvtC60LgiCisKKyM6IGdpdGs6MjYxMQorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDA4IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSDQv9GA0L7Qs9GA0LDQvNC80LAg0L/RgNC+0YHQvNC+0YLRgNCwINC40YHRgtC+0YDQuNC4INGA0LXQv9C+0LfQuNGC0L7RgNC40LXQsiBHaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorItCY0YHQv9C+0LvRjNC30L7QstCw0L3QuNC1INC4INGA0LDRgdC/0YDQvtGB0YLRgNCw0L3QtdC90LjQtSDRgdC+0LPQu9Cw0YHQvdC+INGD0YHQu9C+0LLQuNGP0LwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCisKKyM6IGdpdGs6MjYxOSBnaXRrOjI2ODEgZ2l0azo4NjYxCittc2dpZCAiQ2xvc2UiCittc2dzdHIgItCX0LDQutGA0YvRgtGMIgorCisjOiBnaXRrOjI2MzgKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAi0J3QsNC30L3QsNGH0LXQvdC40Y8g0LrQu9Cw0LLQuNCw0YLRg9GA0Ysg0LIgR2l0ayIKKworIzogZ2l0azoyNjQxCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICLQndCw0LfQvdCw0YfQtdC90LjRjyDQutC70LDQstC40LDRgtGD0YDRiyDQsiBHaXRrOiIKKworIzogZ2l0azoyNjQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHTQl9Cw0LLQtdGA0YjQuNGC0YwiCisKKyM6IGdpdGs6MjY0NAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPEhvbWU+XHRcdNCf0LXRgNC10LnRgtC4INC6INC/0LXRgNCy0L7QvNGDINGB0L7RgdGC0L7Rj9C90LjRjiIKKworIzogZ2l0azoyNjQ1Cittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx00J/QtdGA0LXQudGC0Lgg0Log0L/QvtGB0LvQtdC00L3QtdC80YMg0YHQvtGB0YLQvtGP0L3QuNGOIgorCisjOiBnaXRrOjI2NDYKK21zZ2lkICI8VXA+LCBwLCBpXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxVcD4sIHAsIGlcdNCf0LXRgNC10LnRgtC4INC6INGB0LvQtdC00YPRjtGJ0LXQvNGDINGB0L7RgdGC0L7Rj9C90LjRjiIKKworIzogZ2l0azoyNjQ3Cittc2dpZCAiPERvd24+LCBuLCBrXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKK21zZ3N0ciAiPERvd24+LCBuLCBrXHTQn9C10YDQtdC50YLQuCDQuiDQv9GA0LXQtNGL0LTRg9GJ0LXQvNGDINGB0L7RgdGC0L7Rj9C90LjRjiIKKworIzogZ2l0azoyNjQ4Cittc2dpZCAiPExlZnQ+LCB6LCBqXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPExlZnQ+LCB6LCBqXHTQn9C+0LrQsNC30LDRgtGMINGA0LDQvdC10LUg0L/QvtGB0LXRidGR0L3QvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1IgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPFJpZ2h0PiwgeCwgbFx00J/QvtC60LDQt9Cw0YLRjCDRgdC70LXQtNGD0Y7RidC10LUg0L/QvtGB0LXRidGR0L3QvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1IgorCisjOiBnaXRrOjI2NTAKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VVcD5cdNCf0LXRgNC10LnRgtC4INC90LAg0YHRgtGA0LDQvdC40YbRgyDQstGL0YjQtSDQsiDRgdC/0LjRgdC60LUg0YHQvtGB0YLQvtGP0L3QuNC5IgorCisjOiBnaXRrOjI2NTEKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlRG93bj5cdNCf0LXRgNC10LnRgtC4INC90LAg0YHRgtGA0LDQvdC40YbRgyDQvdC40LbQtSDQsiDRgdC/0LjRgdC60LUg0YHQvtGB0YLQvtGP0L3QuNC5IgorCisjOiBnaXRrOjI2NTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1Ib21lPlx00J/QvtC60LDQt9Cw0YLRjCDQvdCw0YfQsNC70L4g0YHQv9C40YHQutCwINGB0L7RgdGC0L7Rj9C90LjQuSIKKworIzogZ2l0azoyNjUzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHTQn9C+0LrQsNC30LDRgtGMINC60L7QvdC10YYg0YHQv9C40YHQutCwINGB0L7RgdGC0L7Rj9C90LjQuSIKKworIzogZ2l0azoyNjU0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtVXA+XHTQn9GA0L7QstC10YDQvdGD0YLRjCDRgdC/0LjRgdC+0Log0YHQvtGB0YLQvtGP0L3QuNC5INCy0LLQtdGA0YUiCisKKyM6IGdpdGs6MjY1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1Eb3duPlx00J/RgNC+0LLQtdGA0L3Rg9GC0Ywg0YHQv9C40YHQvtC6INGB0L7RgdGC0L7Rj9C90LjQuSDQstC90LjQtyIKKworIzogZ2l0azoyNjU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdNCf0YDQvtCy0LXRgNC90YPRgtGMINGB0L/QuNGB0L7QuiDRgdC+0YHRgtC+0Y/QvdC40Lkg0L3QsCDRgdGC0YDQsNC90LjRhtGDINCy0LLQtdGA0YUiCisKKyM6IGdpdGs6MjY1NworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZURvd24+XHTQn9GA0L7QstC10YDQvdGD0YLRjCDRgdC/0LjRgdC+0Log0YHQvtGB0YLQvtGP0L3QuNC5INC90LAg0YHRgtGA0LDQvdC40YbRgyDQstC90LjQtyIKKworIzogZ2l0azoyNjU4Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICIiCisiPFNoaWZ0LVVwPlx00J/QvtC40YHQuiDQsiDQvtCx0YDQsNGC0L3QvtC8INC/0L7RgNGP0LTQutC1ICjQstCy0LXRgNGFLCDRgdGA0LXQtNC4INC90L7QstGL0YUg0YHQvtGB0YLQvtGP0L3QuNC5KSIKKworIzogZ2l0azoyNjU5Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1Eb3duPlx00J/QvtC40YHQuiAo0LLQvdC40LcsINGB0YDQtdC00Lgg0YHRgtCw0YDRi9GFINGB0L7RgdGC0L7Rj9C90LjQuSkiCisKKyM6IGdpdGs6MjY2MAorbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RGVsZXRlPiwgYlx00J/RgNC+0LrRgNGD0YLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0LLRi9GI0LUiCisKKyM6IGdpdGs6MjY2MQorbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8QmFja3NwYWNlPlx00J/RgNC+0LrRgNGD0YLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0LLRi9GI0LUiCisKKyM6IGdpdGs6MjY2MgorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8TGVlcnRhc3RlPlx0XHTQn9GA0L7QutGA0YPRgtC40YLRjCDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5INC90LAg0YHRgtGA0LDQvdC40YbRgyDQvdC40LbQtSIKKworIzogZ2l0azoyNjYzCittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L3QsCAxOCDRgdGC0YDQvtC6INCy0LLQtdGA0YUiCisKKyM6IGdpdGs6MjY2NAorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L3QsCAxOCDRgdGC0YDQvtC6INCy0L3QuNC3IgorCisjOiBnaXRrOjI2NjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdNCf0L7QuNGB0LoiCisKKyM6IGdpdGs6MjY2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHTQn9C10YDQtdC50YLQuCDQuiDRgdC70LXQtNGD0Y7RidC10LzRgyDQvdCw0LnQtNC10L3QvtC80YMg0YHQvtGB0YLQvtGP0L3QuNGOIgorCisjOiBnaXRrOjI2NjcKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8UmV0dXJuPlx00J/QtdGA0LXQudGC0Lgg0Log0YHQu9C10LTRg9GO0YnQtdC80YMg0L3QsNC50LTQtdC90L7QvNGDINGB0L7RgdGC0L7Rj9C90LjRjiIKKworIzogZ2l0azoyNjY4Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHTQn9C10YDQtdC50YLQuCDQuiDQv9C+0LvRjiDQv9C+0LjRgdC60LAiCisKKyM6IGdpdGs6MjY2OQorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHTQn9C10YDQtdC50YLQuCDQuiDQv9GA0LXQtNGL0LTRg9GJ0LXQvNGDINC90LDQudC00LXQvdC+0LzRgyDRgdC+0YHRgtC+0Y/QvdC40Y4iCisKKyM6IGdpdGs6MjY3MAorbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx00J/RgNC+0LrRgNGD0YLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQuiDRgdC70LXQtNGD0Y7RidC10LzRgyDRhNCw0LnQu9GDIgorCisjOiBnaXRrOjI2NzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHTQn9GA0L7QtNC+0LvQttC40YLRjCDQv9C+0LjRgdC6INCyINGB0L/QuNGB0LrQtSDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdGs6MjY3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHTQn9C10YDQtdC50YLQuCDQuiDQv9GA0LXQtNGL0LTRg9GJ0LXQvNGDINC90LDQudC00LXQvdC+0LzRgyDRgtC10LrRgdGC0YMg0LIg0YHQv9C40YHQutC1INC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azoyNjczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdNCj0LLQtdC70LjRh9C40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgorCisjOiBnaXRrOjI2NzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLXBsdXM+XHTQo9Cy0LXQu9C40YfQuNGC0Ywg0YDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azoyNjc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdNCj0LzQtdC90YzRiNC40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgorCisjOiBnaXRrOjI2NzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1taW51cz5cdNCj0LzQtdC90YzRiNC40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgorCisjOiBnaXRrOjI2NzcKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHTQntCx0L3QvtCy0LjRgtGMIgorCisjOiBnaXRrOjMxMzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC/0L7Qu9GD0YfQtdC90LjRjyBcIiVzXCIg0LjQtyAlczoiCisKKyM6IGdpdGs6MzE4OSBnaXRrOjMxOTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGB0L7Qt9C00LDQvdC40Y8g0LLRgNC10LzQtdC90L3QvtCz0L4g0LrQsNGC0LDQu9C+0LPQsCAlczoiCisKKyM6IGdpdGs6MzIxMQorbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAi0L7RiNC40LHQutCwINCy0YvQv9C+0LvQvdC10L3QuNGPINC60L7QvNCw0L3QtNGLOiIKKworIzogZ2l0azozMzU3Cittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgItCh0L7RgdGC0L7Rj9C90LjQtSDQvdC1INC90LDQudC00LXQvdC+IgorCisjOiBnaXRrOjMzNzEKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImdpdCBndWkgYmxhbWU6INC+0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQutC+0LzQsNC90LTRizoiCisKKyM6IGdpdGs6MzQwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDRh9GC0LXQvdC40Y8gTUVSR0VfSEVBRDogJXMiCisKKyM6IGdpdGs6MzQxMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICLQntGI0LjQsdC60LAg0YfRgtC10L3QuNGPINC40L3QtNC10LrRgdCwOiAlcyIKKworIzogZ2l0azozNDM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC30LDQv9GD0YHQutCwIGdpdCBibGFtZTogJXMiCisKKyM6IGdpdGs6MzQzOCBnaXRrOjYxNjMKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgItCf0L7QuNGB0LoiCisKKyM6IGdpdGs6MzQ3MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAi0J7RiNC40LHQutCwINCy0YvQv9C+0LvQvdC10L3QuNGPIGdpdCBibGFtZTogJXMiCisKKyM6IGdpdGs6MzQ5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIiIKKyLQrdGC0LAg0YHRgtGA0L7QutCwINC/0YDQuNC90LDQtNC70LXQttC40YIg0YHQvtGB0YLQvtGP0L3QuNGOICVzLCDQutC+0YLQvtGA0L7QtSDQvdC1INC/0L7QutCw0LfQsNC90L4g0LIg0Y3RgtC+0LwgIgorItC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC4IgorCisjOiBnaXRrOjM1MTIKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0LLRi9C/0L7Qu9C90LXQvdC40Y8g0L/RgNC+0LPRgNCw0LzQvNGLINGB0YDQsNCy0L3QtdC90LjRjzoiCisKKyM6IGdpdGs6MzYzMAorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJHaXRrINC+0L/RgNC10LTQtdC70LXQvdC40LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LkiCisKKyM6IGdpdGs6MzYzNAorbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAi0JfQsNC/0L7QvNC90LjRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1IgorCisjOiBnaXRrOjM2MzUKK21zZ2lkICJDb21taXRzIHRvIGluY2x1ZGUgKGFyZ3VtZW50cyB0byBnaXQgbG9nKToiCittc2dzdHIgItCS0LrQu9GO0YfQuNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNGPICjQsNGA0LPRg9C80LXQvdGC0Ysg0LTQu9GPIGdpdC1sb2cpOiIKKworIzogZ2l0azozNjM2Cittc2dpZCAiVXNlIGFsbCByZWZzIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LLRgdC1INCy0LXRgtCy0LgiCisKKyM6IGdpdGs6MzYzNworbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKK21zZ3N0ciAi0KHRgtGA0L7Qs9Cw0Y8g0YHQvtGA0YLQuNGA0L7QstC60LAg0L/QviDQtNCw0YLQtSIKKworIzogZ2l0azozNjM4Cittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgItCe0YLQvNC10YLQuNGC0Ywg0YHRgtC+0YDQvtC90Ysg0LLQtdGC0LLQtdC5IgorCisjOiBnaXRrOjM2MzkKK21zZ2lkICJTaW5jZSBkYXRlOiIKK21zZ3N0ciAi0KEg0LTQsNGC0Ys6IgorCisjOiBnaXRrOjM2NDAKK21zZ2lkICJVbnRpbCBkYXRlOiIKK21zZ3N0ciAi0J/QviDQtNCw0YLRgzoiCisKKyM6IGdpdGs6MzY0MQorbXNnaWQgIk1heCBjb3VudDoiCittc2dzdHIgItCc0LDQutGBLiDQutC+0LvQuNGH0LXRgdGC0LLQvjoiCisKKyM6IGdpdGs6MzY0MgorbXNnaWQgIlNraXA6IgorbXNnc3RyICLQn9GA0L7Qv9GD0YHRgtC40YLRjDoiCisKKyM6IGdpdGs6MzY0MworbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAi0J7Qs9GA0LDQvdC40YfQuNGC0Ywg0L/QtdGA0LLRi9C8INC/0YDQtdC00LrQvtC8IgorCisjOiBnaXRrOjM2NDQKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAi0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90LDRjyDQutC+0LzQsNC90LTQsCDQtNC70Y8g0YHQv9C40YHQutCwINGB0L7RgdGC0L7Rj9C90LjQuToiCisKKyM6IGdpdGs6Mzc1MworbXNnaWQgIk5hbWUiCittc2dzdHIgItCY0LzRjyIKKworIzogZ2l0azozODAxCittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgItCk0LDQudC70Ysg0Lgg0LrQsNGC0LDQu9C+0LPQuCDQtNC70Y8g0L7Qs9GA0LDQvdC40YfQtdC90LjRjyDQuNGB0YLQvtGA0LjQuCwg0L/QviDQvtC00L3QvtC80YMg0L3QsCDRgdGC0YDQvtC60YM6IgorCisjOiBnaXRrOjM4MTUKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICLQn9GA0LjQvNC10L3QuNGC0YwgKEY1KSIKKworIzogZ2l0azozODUzCittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0LIg0L/QsNGA0LDQvNC10YLRgNCw0YUg0LLRi9Cx0L7RgNCwINGB0L7RgdGC0L7Rj9C90LjQuToiCisKKyM6IGdpdGs6MzkwNiBnaXRrOjM5NTggZ2l0azo0NDAzIGdpdGs6NDQxNyBnaXRrOjU2NzUgZ2l0azoxMDg2NyBnaXRrOjEwODY4Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAi0J3QuCDQvtC00L3QvtCz0L4iCisKKyM6IGdpdGs6NDM1MSBnaXRrOjYxOTUgZ2l0azo3OTI1IGdpdGs6Nzk0MAorbXNnaWQgIkRhdGUiCittc2dzdHIgItCU0LDRgtCwIgorCisjOiBnaXRrOjQzNTEgZ2l0azo2MTk1Cittc2dpZCAiQ0RhdGUiCittc2dzdHIgItCU0LDRgtCwINCy0LLQvtC00LAiCisKKyM6IGdpdGs6NDUwMCBnaXRrOjQ1MDUKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICLQn9C+0YDQvtC20LTRkdC90L3QvtC1IgorCisjOiBnaXRrOjQ1MDEKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAi0J3QtSDQv9C+0YDQvtC20LTRkdC90L3QvtC1IgorCisjOiBnaXRrOjQ1MDggZ2l0azo0NTEzCittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgItCf0YDQtdC00L7QuiIKKworIzogZ2l0azo0NTA5Cittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICLQndC1INC/0YDQtdC00L7QuiIKKworIzogZ2l0azo0Nzk5Cittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y8g0LfQsNGA0LXQs9C40YHRgtGA0LjRgNC+0LLQsNC90L3Ri9C1INCyINC40L3QtNC10LrRgdC1LCDQvdC+INC90LUg0YHQvtGF0YDQsNC90ZHQvdC90YvQtSIKKworIzogZ2l0azo0ODM1Cittc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1LCDQvdC1INC30LDRgNC10LPQuNGB0YLRgNC40YDQvtCy0LDQvdC90YvQtSDQsiDQuNC90LTQtdC60YHQtSIKKworIzogZ2l0azo2Njc2Cittc2dpZCAiVGFnczoiCittc2dzdHIgItCi0LDQs9C4OiIKKworIzogZ2l0azo2NjkzIGdpdGs6NjY5OSBnaXRrOjc5MTgKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgItCf0YDQtdC00L7QuiIKKworIzogZ2l0azo2NzA0Cittc2dpZCAiQ2hpbGQiCittc2dzdHIgItCf0L7RgtC+0LzQvtC6IgorCisjOiBnaXRrOjY3MTMKK21zZ2lkICJCcmFuY2giCittc2dzdHIgItCS0LXRgtCy0YwiCisKKyM6IGdpdGs6NjcxNgorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgItCh0LvQtdC00YPQtdGCINC30LAiCisKKyM6IGdpdGs6NjcxOQorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICLQn9GA0LXQtNGI0LXRgdGC0LLRg9C10YIiCisKKyM6IGdpdGs6NzIxMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICLQntGI0LjQsdC60LAg0L/QvtC70YPRh9C10L3QuNGPINC40LfQvNC10L3QtdC90LjQuTogJXMiCisKKyM6IGdpdGs6Nzc1MQorbXNnaWQgIkdvdG86IgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQujoiCisKKyM6IGdpdGs6Nzc1MworbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJTSEExIElEOiIKKworIzogZ2l0azo3NzcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgItCh0L7QutGA0LDRidGR0L3QvdGL0LkgU0hBMSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCAlcyDQvdC10L7QtNC90L7Qt9C90LDRh9C10L0iCisKKyM6IGdpdGs6Nzc4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJTSEExINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAICVzINC90LUg0L3QsNC50LTQtdC9IgorCisjOiBnaXRrOjc3ODYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcvSGVhZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgItCc0LXRgtC60LAg0LjQu9C4INCy0LXRgtCy0YwgJXMg0L3QtSDQvdCw0LnQtNC10L3QsCIKKworIzogZ2l0azo3OTI4Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgItCf0L7RgtC+0LzQutC4IgorCisjOiBnaXRrOjc5ODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAi0KPRgdGC0LDQvdC+0LLQuNGC0Ywg0LLQtdGC0LLRjCAlcyDQvdCwINGN0YLQviDRgdC+0YHRgtC+0Y/QvdC40LUiCisKKyM6IGdpdGs6Nzk4NworbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgorbXNnc3RyICLQodC+0YHRgtC+0Y/QvdC40LUg0L3QtSDQv9GA0LjQvdCw0LTQu9C10LbQuNGCINC90Lgg0L7QtNC90L7QuSDQstC10YLQstC4LCDQv9C10YDQtdGF0L7QtCDQvdC10LLQvtC30LzQvtC20LXQvSIKKworIzogZ2l0azo4MDE5Cittc2dpZCAiVG9wIgorbXNnc3RyICLQktC10YDRhSIKKworIzogZ2l0azo4MDIwCittc2dpZCAiRnJvbSIKK21zZ3N0ciAi0J7RgiIKKworIzogZ2l0azo4MDI1Cittc2dpZCAiVG8iCittc2dzdHIgItCU0L4iCisKKyM6IGdpdGs6ODA0OQorbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCDQv9Cw0YLRhyIKKworIzogZ2l0azo4MDUxCittc2dpZCAiRnJvbToiCittc2dzdHIgItCe0YI6IgorCisjOiBnaXRrOjgwNjAKK21zZ2lkICJUbzoiCittc2dzdHIgItCU0L46IgorCisjOiBnaXRrOjgwNjkKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICLQkiDQvtCx0YDQsNGC0L3QvtC8INC/0L7RgNGP0LTQutC1IgorCisjOiBnaXRrOjgwNzEgZ2l0azo4MjUzCittc2dpZCAiT3V0cHV0IGZpbGU6IgorbXNnc3RyICLQpNCw0LnQuyDQtNC70Y8g0YHQvtGF0YDQsNC90LXQvdC40Y86IgorCisjOiBnaXRrOjgwNzcKK21zZ2lkICJHZW5lcmF0ZSIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0YwiCisKKyM6IGdpdGs6ODExNQorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGB0L7Qt9C00LDQvdC40Y8g0L/QsNGC0YfQsDoiCisKKyM6IGdpdGs6ODEzOCBnaXRrOjgyNDEgZ2l0azo4Mjk4Cittc2dpZCAiSUQ6IgorbXNnc3RyICJJRDoiCisKKyM6IGdpdGs6ODE0NworbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAi0JjQvNGPINC80LXRgtC60Lg6IgorCisjOiBnaXRrOjgxNTEgZ2l0azo4MzA3Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCIKKworIzogZ2l0azo4MTY4Cittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICLQndC1INC30LDQtNCw0L3QviDQuNC80Y8g0LzQtdGC0LrQuCIKKworIzogZ2l0azo4MTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi0JzQtdGC0LrQsCBcIiVzXCIg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBnaXRrOjgxNzgKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0YHQvtC30LTQsNC90LjRjyDQvNC10YLQutC4OiIKKworIzogZ2l0azo4MjUwCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgItCa0L7QvNCw0L3QtNCwOiIKKworIzogZ2l0azo4MjU4Cittc2dpZCAiV3JpdGUiCittc2dzdHIgItCX0LDQv9C40YHRjCIKKworIzogZ2l0azo4Mjc2Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0YHQvtGF0YDQsNC90LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPOiIKKworIzogZ2l0azo4MzAzCittc2dpZCAiTmFtZToiCittc2dzdHIgItCY0LzRjzoiCisKKyM6IGdpdGs6ODMyNgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgItCj0LrQsNC20LjRgtC1INC40LzRjyDQtNC70Y8g0L3QvtCy0L7QuSDQstC10YLQstC4IgorCisjOiBnaXRrOjgzMzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAi0JLQtdGC0LLRjCAnJXMnINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4g0J/QtdGA0LXQv9C40YHQsNGC0Yw/IgorCisjOiBnaXRrOjgzOTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiIgorItCh0L7RgdGC0L7Rj9C90LjQtSAlcyDRg9C20LUg0L/RgNC40L3QsNC00LvQtdC20LjRgiDQstC10YLQstC4ICVzLiDQn9GA0L7QtNC+0LvQttC40YLRjCDQvtC/0LXRgNCw0YbQuNGOPyIKKworIzogZ2l0azo4NDAyCittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgItCa0L7Qv9C40YDQvtCy0LDQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBnaXRrOjg0MTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisi0JrQvtC/0LjRgNC+0LLQsNC90LjQtSDQvdC10LLQvtC30LzQvtC20L3QviDQuNC3LdC30LAg0LjQt9C80LXQvdC10L3QuNC5INCyINGE0LDQudC70LUgJyVzJy5cbiIKKyLQodC+0YXRgNCw0L3QuNGC0LUg0LjQu9C4INC+0YLQvNC10L3QuNGC0LUg0LjQt9C80LXQvdC10L3QuNGPINC4INC/0L7QstGC0L7RgNC40YLQtSDQvtC/0LXRgNCw0YbQuNGOLiIKKworIzogZ2l0azo4NDE3Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisi0JrQvtC/0LjRgNC+0LLQsNC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0L3QtdCy0L7Qt9C80L7QttC90L4g0LjQty3Qt9CwINC90LXQt9Cw0LLQtdGA0YjRkdC90L3QvtC5INC+0L/QtdGA0LDRhtC40LggIgorItGB0LvQuNGP0L3QuNGPLlxu0JfQsNC/0YPRgdGC0LjRgtGMIGdpdCBjaXRvb2wg0LTQu9GPINC30LDQstC10YDRiNC10L3QuNGPINGN0YLQvtC5INC+0L/QtdGA0LDRhtC40Lg/IgorCisjOiBnaXRrOjg0MzMKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPINC90LUg0YHQvtGF0YDQsNC90LXQvdGLIgorCisjOiBnaXRrOjg0NTkKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICLQn9C+0LTRgtCy0LXRgNC00LjRgtC1INC+0L/QtdGA0LDRhtC40Y4g0L/QtdGA0LXRhdC+0LTQsCIKKworIzogZ2l0azo4NDYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAi0KPRgdGC0LDQvdC+0LLQuNGC0Ywg0LLQtdGC0LLRjCAlcyDQvdCwINGB0L7RgdGC0L7Rj9C90LjQtSAlcz8iCisKKyM6IGdpdGs6ODQ2NQorbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICLQotC40L8g0L7Qv9C10YDQsNGG0LjQuCDQv9C10YDQtdGF0L7QtNCwOiIKKworIzogZ2l0azo4NDY5Cittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgItCb0ZHQs9C60LjQuTog0L7RgdGC0LDQstC40YLRjCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQuCDQuNC90LTQtdC60YEg0L3QtdC40LfQvNC10L3QvdGL0LzQuCIKKworIzogZ2l0azo4NDcyCittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICIiCisi0KHQvNC10YjQsNC90YvQuTog0L7RgdGC0LDQstC40YLRjCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQvdC10LjQt9C80LXQvdC90YvQvCwg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LjQvdC00LXQutGBIgorCisjOiBnaXRrOjg0NzUKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorItCW0LXRgdGC0LrQuNC5OiDQv9C10YDQtdC/0LjRgdCw0YLRjCDQuNC90LTQtdC60YEg0Lgg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LNcbiIKKyIo0LLRgdC1INC40LfQvNC10L3QtdC90LjRjyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C4INCx0YPQtNGD0YIg0L/QvtGC0LXRgNGP0L3RiykiCisKKyM6IGdpdGs6ODQ5MgorbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAi0KPRgdGC0LDQvdC+0LLQutCwIgorCisjOiBnaXRrOjg1NDkKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgItCf0LXRgNC10YXQvtC0IgorCisjOiBnaXRrOjg2MDIKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICLQkNC60YLQuNCy0L3QsNGPINCy0LXRgtCy0Ywg0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINGD0LTQsNC70LXQvdCwIgorCisjOiBnaXRrOjg2MDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorItCh0L7RgdGC0L7Rj9C90LjRjyDQstC10YLQstC4ICVzINCx0L7Qu9GM0YjQtSDQvdC1INC/0YDQuNC90LDQtNC70LXQttCw0YIg0L3QuNC60LDQutC+0Lkg0LTRgNGD0LPQvtC5INCy0LXRgtCy0LguXG4iCisi0JTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YPQtNCw0LvQuNGC0Ywg0LLQtdGC0LLRjCAlcz8iCisKKyM6IGdpdGs6ODYzOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAi0JzQtdGC0LrQuCDQuCDQstC10YLQstC4OiAlcyIKKworIzogZ2l0azo4NjU0Cittc2dpZCAiRmlsdGVyIgorbXNnc3RyICLQpNC40LvRjNGC0YDQvtCy0LDRgtGMIgorCisjOiBnaXRrOjg5NDkKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyLQntGI0LjQsdC60LAg0YfRgtC10L3QuNGPINC40YHRgtC+0YDQuNC4INC/0YDQvtC10LrRgtCwOyDQuNC90YTQvtGA0LzQsNGG0LjRjyDQviDQstC10YLQstGP0YUg0Lgg0YHQvtGB0YLQvtGP0L3QuNGP0YUgIgorItCy0L7QutGA0YPQsyDQvNC10YLQvtC6ICjQtNC+L9C/0L7RgdC70LUpINC80L7QttC10YIg0LHRi9GC0Ywg0L3QtdC/0L7Qu9C90L7QuS4iCisKKyM6IGdpdGs6OTkzNQorbXNnaWQgIlRhZyIKK21zZ3N0ciAi0JzQtdGC0LrQsCIKKworIzogZ2l0azo5OTM1Cittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjk5ODMKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAi0KjRgNC40YTRgiBHaXRrIgorCisjOiBnaXRrOjEwMDAwCittc2dpZCAiQiIKK21zZ3N0ciAi0JYiCisKKyM6IGdpdGs6MTAwMDMKK21zZ2lkICJJIgorbXNnc3RyICLQmiIKKworIzogZ2l0azoxMDA5OAorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCBHaXRrIgorCisjOiBnaXRrOjEwMTAwCittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICLQn9Cw0YDQsNC80LXRgtGA0Ysg0L/QvtC60LDQt9CwINGB0L/QuNGB0LrQsCDRgdC+0YHRgtC+0Y/QvdC40LkiCisKKyM6IGdpdGs6MTAxMDMKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgItCc0LDQutGBLiDRiNC40YDQuNC90LAg0LPRgNCw0YTQsCAo0YHRgtGA0L7QuikiCisKKyM6IGdpdGs6MTAxMDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICLQnNCw0LrRgS4g0YjQuNGA0LjQvdCwINCz0YDQsNGE0LAgKCUg0YjQuNGA0LjQvdGLINC/0LDQvdC10LvQuCkiCisKKyM6IGdpdGs6MTAxMTEKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgItCf0L7QutCw0LfRi9Cy0LDRgtGMINC40LfQvNC10L3QtdC90LjRjyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBnaXRrOjEwMTE0Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSIKK21zZ3N0ciAi0JLRi9C00LXQu9C40YLRjCBTSEExIgorCisjOiBnaXRrOjEwMTE4Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgItCf0LDRgNCw0LzQtdGC0YDRiyDQv9C+0LrQsNC30LAg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBnaXRrOjEwMTIwCittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgItCo0LjRgNC40L3QsCDRgtCw0LHRg9C70Y/RhtC40LgiCisKKyM6IGdpdGs6MTAxMjMKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzIgorbXNnc3RyICLQn9C+0LrQsNC30YvQstCw0YLRjCDQsdC70LjQt9C60LjQtSDQvNC10YLQutC4IgorCisjOiBnaXRrOjEwMTI2Cittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICLQntCz0YDQsNC90LjRh9C40YLRjCDQv9C+0LrQsNC3INC40LfQvNC10L3QtdC90LjQuSDQstGL0LHRgNCw0L3Ri9C80Lgg0YTQsNC50LvQsNC80LgiCisKKyM6IGdpdGs6MTAxMjkKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAi0J/QvtC00LTQtdGA0LbQutCwINC60L7QtNC40YDQvtCy0L7QuiDQsiDQvtGC0LTQtdC70YzQvdGL0YUg0YTQsNC50LvQsNGFIgorCisjOiBnaXRrOjEwMTM1Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNC80LAg0LTQu9GPINC/0L7QutCw0LfQsCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdGs6MTAxMzcKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgItCS0YvQsdC10YDQuNGC0LUuLi4iCisKKyM6IGdpdGs6MTAxNDIKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAi0KbQstC10YLQsDog0L3QsNC20LzQuNGC0LUg0LTQu9GPINCy0YvQsdC+0YDQsCIKKworIzogZ2l0azoxMDE0NQorbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgItCk0L7QvSIKKworIzogZ2l0azoxMDE0NiBnaXRrOjEwMTc2Cittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAi0YTQvtC9IgorCisjOiBnaXRrOjEwMTQ5Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAi0J/QtdGA0LXQtNC90LjQuSDQv9C70LDQvSIKKworIzogZ2l0azoxMDE1MAorbXNnaWQgImZvcmVncm91bmQiCittc2dzdHIgItC/0LXRgNC10LTQvdC40Lkg0L/Qu9Cw0L0iCisKKyM6IGdpdGs6MTAxNTMKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjzog0YHRgtCw0YDRi9C5INGC0LXQutGB0YIiCisKKyM6IGdpdGs6MTAxNTQKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAi0YHRgtCw0YDRi9C5INGC0LXQutGB0YIg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBnaXRrOjEwMTU4Cittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y86INC90L7QstGL0Lkg0YLQtdC60YHRgiIKKworIzogZ2l0azoxMDE1OQorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICLQvdC+0LLRi9C5INGC0LXQutGB0YIg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBnaXRrOjEwMTYzCittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjzog0LfQsNCz0L7Qu9C+0LLQvtC6INCx0LvQvtC60LAiCisKKyM6IGdpdGs6MTAxNjUKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICLQt9Cw0LPQvtC70L7QstC+0Log0LHQu9C+0LrQsCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdGs6MTAxNjkKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAi0KTQvtC9INCy0YvQsdGA0LDQvdC+0Lkg0YHRgtGA0L7QutC4IgorCisjOiBnaXRrOjEwMTcxCittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAi0YTQvtC9INCy0YvQsdGA0LDQvdC+0Lkg0YHRgtGA0L7QutC4IgorCisjOiBnaXRrOjEwMTc1Cittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICLQktGL0LHQtdGA0LjRgtC1INGE0L7QvSIKKworIzogZ2l0azoxMDE3OQorbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgItCo0YDQuNGE0YI6INC90LDQttC80LjRgtC1INC00LvRjyDQstGL0LHQvtGA0LAiCisKKyM6IGdpdGs6MTAxODEKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgItCe0YHQvdC+0LLQvdC+0Lkg0YjRgNC40YTRgiIKKworIzogZ2l0azoxMDE4MgorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICLQqNGA0LjRhNGCINC/0L7QutCw0LfQsCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdGs6MTAxODMKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICLQqNGA0LjRhNGCINC40L3RgtC10YDRhNC10LnRgdCwIgorCisjOiBnaXRrOjEwMjEwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azog0LLRi9Cx0LXRgNC40YLQtSDRhtCy0LXRgiDQtNC70Y8gJXMiCisKKyM6IGdpdGs6MTA2NTYKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyLQmiDRgdC+0LbQsNC70LXQvdC40Y4gZ2l0ayDQvdC1INC80L7QttC10YIg0YDQsNCx0L7RgtCw0YLRjCDRgSDRjdGC0L7QuSDQstC10YDRgdC40LkgVGNsL1RrLlxuIgorItCi0YDQtdCx0YPQtdGC0YHRjyDQutCw0Log0LzQuNC90LjQvNGD0LwgVGNsL1RrIDguNC4iCisKKyM6IGdpdGs6MTA3NzMKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICJHaXQt0YDQtdC/0L7Qt9C40YLQsNGA0LjQuSDQvdC1INC90LDQudC00LXQvSDQsiDRgtC10LrRg9GJ0LXQvCDQutCw0YLQsNC70L7Qs9C1LiIKKworIzogZ2l0azoxMDc3NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCittc2dzdHIgIkdpdC3RgNC10L/QvtC30LjRgtCw0YDQuNC5IFwiJXNcIiDQvdC1INC90LDQudC00LXQvS4iCisKKyM6IGdpdGs6MTA4MjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgItCd0LXQvtC00L3QvtC30L3QsNGH0L3Ri9C5INCw0YDQs9GD0LzQtdC90YIgJyVzJzog0YHRg9GJ0LXRgdGC0LLRg9C10YIg0LrQsNC6INCy0LXRgNGB0LjRjyDQuCDQuNC80Y8g0YTQsNC50LvQsCIKKworIzogZ2l0azoxMDgzNgorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90YvQtSDQsNGA0LPRg9C80LXQvdGC0Ysg0LTQu9GPIGdpdGs6IgorCisjOiBnaXRrOjEwODk2Cittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICLQmtC+0LzQsNC90LTQvdCw0Y8g0YHRgtGA0L7QutCwIgorCmRpZmYgLS1naXQgYS9naXR3ZWIvUkVBRE1FIGIvZ2l0d2ViL1JFQURNRQppbmRleCAxOWFlMjhlLi42NmM2YTkzIDEwMDY0NAotLS0gYS9naXR3ZWIvUkVBRE1FCisrKyBiL2dpdHdlYi9SRUFETUUKQEAgLTE2MiwxNCArMTYyLDE4IEBACiAgICAkR0lUV0VCX0xJU1QgZHVyaW5nIGluc3RhbGxhdGlvbi4gIElmIGVtcHR5LCAkcHJvamVjdHJvb3QgaXMgdXNlZAogICAgdG8gc2NhbiBmb3IgcmVwb3NpdG9yaWVzLgogICogJG15X3VybCwgJG15X3VyaQotICAgVVJMIGFuZCBhYnNvbHV0ZSBVUkwgb2YgZ2l0d2ViIHNjcmlwdDsgeW91IG1pZ2h0IG5lZWQgdG8gc2V0IHRob3NlCi0gICB2YXJpYWJsZXMgaWYgeW91IGFyZSB1c2luZyAncGF0aGluZm8nIGZlYXR1cmU6IHNlZSBhbHNvIGJlbG93LgorICAgRnVsbCBVUkwgYW5kIGFic29sdXRlIFVSTCBvZiBnaXR3ZWIgc2NyaXB0OworICAgaW4gZWFybGllciB2ZXJzaW9ucyBvZiBnaXR3ZWIgeW91IG1pZ2h0IGhhdmUgbmVlZCB0byBzZXQgdGhvc2UKKyAgIHZhcmlhYmxlcywgbm93IHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIGRvIGl0LgorICogJGJhc2VfdXJsCisgICBCYXNlIFVSTCBmb3IgcmVsYXRpdmUgVVJMcyBpbiBwYWdlcyBnZW5lcmF0ZWQgYnkgZ2l0d2ViLAorICAgKGUuZy4gJGxvZ28sICRmYXZpY29uLCBAc3R5bGVzaGVldHMgaWYgdGhleSBhcmUgcmVsYXRpdmUgVVJMcyksCisgICBuZWVkZWQgYW5kIHVzZWQgb25seSBmb3IgVVJMcyB3aXRoIG5vbmVtcHR5IFBBVEhfSU5GTyB2aWEKKyAgIDxiYXNlIGhyZWY9IiRiYXNlX3VybD4uICBVc3VhbGx5IGdpdHdlYiBzZXRzIGl0cyB2YWx1ZSBjb3JyZWN0bHksCisgICBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZSwgZS5nLiB0byAkbXlfdXJpIG9yICIvIi4KICAqICRob21lX2xpbmsKICAgIFRhcmdldCBvZiB0aGUgaG9tZSBsaW5rIG9uIHRvcCBvZiBhbGwgcGFnZXMgKHRoZSBmaXJzdCBwYXJ0IG9mIHZpZXcKLSAgICJicmVhZGNydW1icyIpLiAgQnkgZGVmYXVsdCBzZXQgdG8gYWJzb2x1dGUgVVJJIG9mIGEgcGFnZTsgeW91IG1pZ2h0Ci0gICBuZWVkIHRvIHNldCBpdCB1cCB0byBbYmFzZV0gZ2l0d2ViIFVSSSBpZiB5b3UgdXNlICdwYXRoaW5mbycgZmVhdHVyZQotICAgKGFsdGVybmF0aXZlIGZvcm1hdCBvZiB0aGUgVVJMcywgd2l0aCBwcm9qZWN0IG5hbWUgZW1iZWRkZWQgZGlyZWN0bHkKLSAgIGluIHRoZSBwYXRoIHBhcnQgb2YgVVJMKS4KKyAgICJicmVhZGNydW1icyIpLiAgQnkgZGVmYXVsdCBzZXQgdG8gYWJzb2x1dGUgVVJJIG9mIGEgcGFnZSAoJG15X3VyaSkuCiAgKiBAc3R5bGVzaGVldHMKICAgIExpc3Qgb2YgVVJJcyBvZiBzdHlsZXNoZWV0cyAocmVsYXRpdmUgdG8gYmFzZSBVUkkgb2YgYSBwYWdlKS4gWW91CiAgICBtaWdodCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgc3R5bGVzaGVldCwgZm9yIGV4YW1wbGUgdXNlIGdpdHdlYi5jc3MKQEAgLTIwOCw3ICsyMTIsNyBAQAogICogJGZhbGxiYWNrX2VuY29kaW5nCiAgICBHaXR3ZWIgYXNzdW1lcyB0aGlzIGNoYXJzZXQgaWYgbGluZSBjb250YWlucyBub24tVVRGLTggY2hhcmFjdGVycy4KICAgIEZhbGxiYWNrIGRlY29kaW5nIGlzIHVzZWQgd2l0aG91dCBlcnJvciBjaGVja2luZywgc28gaXQgY2FuIGJlIGV2ZW4KLSAgICd1dGYtOCcuIFZhbHVlIG1pc3QgYmUgdmFsaWQgZW5jb2RpZzsgc2VlIEVuY29kaW5nOjpTdXBwb3J0ZWQoM3BtKSBtYW4KKyAgICd1dGYtOCcuIFZhbHVlIG11c3QgYmUgdmFsaWQgZW5jb2Rpbmc7IHNlZSBFbmNvZGluZzo6U3VwcG9ydGVkKDNwbSkgbWFuCiAgICBwYWdlIGZvciBhIGxpc3QuICAgQnkgZGVmYXVsdCAnbGF0aW4xJywgYWthLiAnaXNvLTg4NTktMScuCiAgKiBAZGlmZl9vcHRzCiAgICBSZW5hbWUgZGV0ZWN0aW9uIG9wdGlvbnMgZm9yIGdpdC1kaWZmIGFuZCBnaXQtZGlmZi10cmVlLiBCeSBkZWZhdWx0CkBAIC0zMjksNiArMzMzLDkwIEBACiAgICRob21lX2xpbmsgPSAiLyI7CiAKIAorUEFUSF9JTkZPIHVzYWdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91IGVuYWJsZSBQQVRIX0lORk8gdXNhZ2UgaW4gZ2l0d2ViIGJ5IHB1dHRpbmcKKworICAgJGZlYXR1cmV7J3BhdGhpbmZvJ317J2RlZmF1bHQnfSA9IFsxXTsKKworaW4geW91ciBnaXR3ZWIuY29uZiwgaXQgaXMgcG9zc2libGUgdG8gc2V0IHVwIHlvdXIgc2VydmVyIHNvIHRoYXQgaXQKK2NvbnN1bWVzIGFuZCBwcm9kdWNlcyBVUkxzIGluIHRoZSBmb3JtCisKK2h0dHA6Ly9naXQuZXhhbXBsZS5jb20vcHJvamVjdC5naXQvc2hvcnRsb2cvc29tZXRhZworCitieSB1c2luZyBhIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyB0aGUgZm9sbG93aW5nLCB0aGF0IGFzc3VtZXMgdGhhdAorL3Zhci93d3cvZ2l0d2ViIGlzIHRoZSBEb2N1bWVudFJvb3Qgb2YgeW91ciB3ZWJzZXJ2ZXIsIGFuZCB0aGF0IGl0Citjb250YWlucyB0aGUgZ2l0d2ViLmNnaSBzY3JpcHQgYW5kIGNvbXBsZW1lbnRhcnkgc3RhdGljIGZpbGVzCisoc3R5bGVzaGVldCwgZmF2aWNvbik6CisKKzxWaXJ0dWFsSG9zdCAqOjgwPgorCVNlcnZlckFsaWFzIGdpdC5leGFtcGxlLmNvbQorCisJRG9jdW1lbnRSb290IC92YXIvd3d3L2dpdHdlYgorCisJPERpcmVjdG9yeSAvdmFyL3d3dy9naXR3ZWI+CisJCU9wdGlvbnMgRXhlY0NHSQorCQlBZGRIYW5kbGVyIGNnaS1zY3JpcHQgY2dpCisKKwkJRGlyZWN0b3J5SW5kZXggZ2l0d2ViLmNnaQorCisJCVJld3JpdGVFbmdpbmUgT24KKwkJUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWYKKwkJUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWQKKwkJUmV3cml0ZVJ1bGUgXi4qIC9naXR3ZWIuY2dpLyQwIFtMLFBUXQorCTwvRGlyZWN0b3J5PgorPC9WaXJ0dWFsSG9zdD4KKworVGhlIHJld3JpdGUgcnVsZSBndWFyYW50ZWVzIHRoYXQgZXhpc3Rpbmcgc3RhdGljIGZpbGVzIHdpbGwgYmUgcHJvcGVybHkKK3NlcnZlZCwgd2hlcmVhcyBhbnkgb3RoZXIgVVJMIHdpbGwgYmUgcGFzc2VkIHRvIGdpdHdlYiBhcyBQQVRIX0lORk8KK3BhcmFtZXRlci4KKworTm90aWNlIHRoYXQgaW4gdGhpcyBjYXNlIHlvdSBkb24ndCBuZWVkIHNwZWNpYWwgc2V0dGluZ3MgZm9yCitAc3R5bGVzaGVldHMsICRteV91cmkgYW5kICRob21lX2xpbmssIGJ1dCB5b3UgbG9zZSAiZHVtYiBjbGllbnQiIGFjY2VzcwordG8geW91ciBwcm9qZWN0IC5naXQgZGlycy4gQSBwb3NzaWJsZSB3b3JrYXJvdW5kIGZvciB0aGUgbGF0dGVyIGlzIHRoZQorZm9sbG93aW5nOiBpbiB5b3VyIHByb2plY3Qgcm9vdCBkaXIgKGUuZy4gL3B1Yi9naXQpIGhhdmUgdGhlIHByb2plY3RzCituYW1lZCB3aXRob3V0IGEgLmdpdCBleHRlbnNpb24gKGUuZy4gL3B1Yi9naXQvcHJvamVjdCBpbnN0ZWFkIG9mCisvcHViL2dpdC9wcm9qZWN0LmdpdCkgYW5kIGNvbmZpZ3VyZSBBcGFjaGUgYXMgZm9sbG93czoKKworPFZpcnR1YWxIb3N0ICo6ODA+CisJU2VydmVyQWxpYXMgZ2l0LmV4YW1wbGUuY29tCisKKwlEb2N1bWVudFJvb3QgL3Zhci93d3cvZ2l0d2ViCisKKwlBbGlhc01hdGNoIF4oLy4qPykoXC5naXQpKC8uKik/JCAvcHViL2dpdCQxJDMKKwk8RGlyZWN0b3J5IC92YXIvd3d3L2dpdHdlYj4KKwkJT3B0aW9ucyBFeGVjQ0dJCisJCUFkZEhhbmRsZXIgY2dpLXNjcmlwdCBjZ2kKKworCQlEaXJlY3RvcnlJbmRleCBnaXR3ZWIuY2dpCisKKwkJUmV3cml0ZUVuZ2luZSBPbgorCQlSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZgorCQlSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZAorCQlSZXdyaXRlUnVsZSBeLiogL2dpdHdlYi5jZ2kvJDAgW0wsUFRdCisJPC9EaXJlY3Rvcnk+Cis8L1ZpcnR1YWxIb3N0PgorCitUaGUgYWRkaXRpb25hbCBBbGlhc01hdGNoIG1ha2VzIGl0IHNvIHRoYXQKKworaHR0cDovL2dpdC5leGFtcGxlLmNvbS9wcm9qZWN0LmdpdAorCit3aWxsIGdpdmUgcmF3IGFjY2VzcyB0byB0aGUgcHJvamVjdCdzIGdpdCBkaXIgKHNvIHRoYXQgdGhlIHByb2plY3QgY2FuCitiZSBjbG9uZWQpLCB3aGlsZQorCitodHRwOi8vZ2l0LmV4YW1wbGUuY29tL3Byb2plY3QKKword2lsbCBwcm92aWRlIGh1bWFuLWZyaWVuZGx5IGdpdHdlYiBhY2Nlc3MuCisKK1RoaXMgc29sdXRpb24gaXMgbm90IDEwMCUgYnVsbGV0cHJvb2YsIGluIHRoZSBzZW5zZSB0aGF0IGlmIHNvbWUgcHJvamVjdAoraGFzIGEgbmFtZWQgcmVmIChicmFuY2gsIHRhZykgc3RhcnRpbmcgd2l0aCAnZ2l0LycsIHRoZW4gcGF0aHMgc3VjaCBhcworCitodHRwOi8vZ2l0LmV4YW1wbGUuY29tL3Byb2plY3QvY29tbWFuZC9hYnJhbmNoLi5naXQvYWJyYW5jaAorCit3aWxsIGZhaWwgd2l0aCBhIDQwNCBlcnJvci4KKworCisKIE9yaWdpbmFsbHkgd3JpdHRlbiBieToKICAgS2F5IFNpZXZlcnMgPGtheS5zaWV2ZXJzQHZyZnkub3JnPgogCmRpZmYgLS1naXQgYS9naXR3ZWIvZ2l0d2ViLmNzcyBiL2dpdHdlYi9naXR3ZWIuY3NzCmluZGV4IGEwMWVhYzguLmQwNWJjMzcgMTAwNjQ0Ci0tLSBhL2dpdHdlYi9naXR3ZWIuY3NzCisrKyBiL2dpdHdlYi9naXR3ZWIuY3NzCkBAIC0yOCw2ICsyOCwxMCBAQAogCWJvcmRlci13aWR0aDogMHB4OwogfQogCitpbWcuYXZhdGFyIHsKKwl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCiBkaXYucGFnZV9oZWFkZXIgewogCWhlaWdodDogMjVweDsKIAlwYWRkaW5nOiA4cHg7CkBAIC0xMzIsMTEgKzEzNiwxNCBAQAogCWZvbnQtc3R5bGU6IGl0YWxpYzsKIH0KIAorLmF1dGhvcl9kYXRlLCAuYXV0aG9yIHsKKwlmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKIGRpdi5hdXRob3JfZGF0ZSB7CiAJcGFkZGluZzogOHB4OwogCWJvcmRlcjogc29saWQgI2Q5ZDhkMTsKIAlib3JkZXItd2lkdGg6IDBweCAwcHggMXB4IDBweDsKLQlmb250LXN0eWxlOiBpdGFsaWM7CiB9CiAKIGEubGlzdCB7CmRpZmYgLS1naXQgYS9naXR3ZWIvZ2l0d2ViLnBlcmwgYi9naXR3ZWIvZ2l0d2ViLnBlcmwKaW5kZXggYmRhYTRlOS4uNGYwNTE5NCAxMDA3NTUKLS0tIGEvZ2l0d2ViL2dpdHdlYi5wZXJsCisrKyBiL2dpdHdlYi9naXR3ZWIucGVybApAQCAtMjcsMTMgKzI3LDI5IEBACiBvdXIgJG15X3VybCA9ICRjZ2ktPnVybCgpOwogb3VyICRteV91cmkgPSAkY2dpLT51cmwoLWFic29sdXRlID0+IDEpOwogCi0jIGlmIHdlJ3JlIGNhbGxlZCB3aXRoIFBBVEhfSU5GTywgd2UgaGF2ZSB0byBzdHJpcCB0aGF0Ci0jIGZyb20gdGhlIFVSTCB0byBmaW5kIG91ciByZWFsIFVSTAotIyB3ZSBtYWtlICRwYXRoX2luZm8gZ2xvYmFsIGJlY2F1c2UgaXQncyBhbHNvIHVzZWQgbGF0ZXIgb24KKyMgQmFzZSBVUkwgZm9yIHJlbGF0aXZlIFVSTHMgaW4gZ2l0d2ViICgkbG9nbywgJGZhdmljb24sIC4uLiksCisjIG5lZWRlZCBhbmQgdXNlZCBvbmx5IGZvciBVUkxzIHdpdGggbm9uZW1wdHkgUEFUSF9JTkZPCitvdXIgJGJhc2VfdXJsID0gJG15X3VybDsKKworIyBXaGVuIHRoZSBzY3JpcHQgaXMgdXNlZCBhcyBEaXJlY3RvcnlJbmRleCwgdGhlIFVSTCBkb2VzIG5vdCBjb250YWluIHRoZSBuYW1lCisjIG9mIHRoZSBzY3JpcHQgZmlsZSBpdHNlbGYsIGFuZCAkY2dpLT51cmwoKSBmYWlscyB0byBzdHJpcCBQQVRIX0lORk8sIHNvIHdlCisjIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzLiBXZSBtYWtlICRwYXRoX2luZm8gZ2xvYmFsIGJlY2F1c2UgaXQncyBhbHNvIHVzZWQKKyMgbGF0ZXIgb24uCisjCisjIEFub3RoZXIgaXNzdWUgd2l0aCB0aGUgc2NyaXB0IGJlaW5nIHRoZSBEaXJlY3RvcnlJbmRleCBpcyB0aGF0IHRoZSByZXN1bHRpbmcKKyMgJG15X3VybCBkYXRhIGlzIG5vdCB0aGUgZnVsbCBzY3JpcHQgVVJMOiB0aGlzIGlzIGdvb2QsIGJlY2F1c2Ugd2Ugd2FudAorIyBnZW5lcmF0ZWQgbGlua3MgdG8ga2VlcCBpbXBseWluZyB0aGUgc2NyaXB0IG5hbWUgaWYgaXQgd2Fzbid0IGV4cGxpY2l0bHkKKyMgaW5kaWNhdGVkIGluIHRoZSBVUkwgd2UncmUgaGFuZGxpbmcsIGJ1dCBpdCBtZWFucyB0aGF0ICRteV91cmwgY2Fubm90IGJlIHVzZWQKKyMgYXMgYmFzZSBVUkwuCisjIFRoZXJlZm9yZSwgaWYgd2UgbmVlZGVkIHRvIHN0cmlwIFBBVEhfSU5GTywgdGhlbiB3ZSBrbm93IHRoYXQgd2UgaGF2ZQorIyB0byBidWlsZCB0aGUgYmFzZSBVUkwgb3Vyc2VsdmVzOgogb3VyICRwYXRoX2luZm8gPSAkRU5WeyJQQVRIX0lORk8ifTsKIGlmICgkcGF0aF9pbmZvKSB7Ci0JJG15X3VybCA9fiBzLFxRJHBhdGhfaW5mb1xFJCwsOwotCSRteV91cmkgPX4gcyxcUSRwYXRoX2luZm9cRSQsLDsKKwlpZiAoJG15X3VybCA9fiBzLFxRJHBhdGhfaW5mb1xFJCwsICYmCisJICAgICRteV91cmkgPX4gcyxcUSRwYXRoX2luZm9cRSQsLCAmJgorCSAgICBkZWZpbmVkICRFTlZ7J1NDUklQVF9OQU1FJ30pIHsKKwkJJGJhc2VfdXJsID0gJGNnaS0+dXJsKC1iYXNlID0+IDEpIC4gJEVOVnsnU0NSSVBUX05BTUUnfTsKKwl9CiB9CiAKICMgY29yZSBnaXQgZXhlY3V0YWJsZSB0byB1c2UKQEAgLTc4LDcgKzk0LDcgQEAKICMgVVJJIGFuZCBsYWJlbCAodGl0bGUpIG9mIEdJVCBsb2dvIGxpbmsKICNvdXIgJGxvZ29fdXJsID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzLyI7CiAjb3VyICRsb2dvX2xhYmVsID0gImdpdCBkb2N1bWVudGF0aW9uIjsKLW91ciAkbG9nb191cmwgPSAiaHR0cDovL2dpdC5vci5jei8iOworb3VyICRsb2dvX3VybCA9ICJodHRwOi8vZ2l0LXNjbS5jb20vIjsKIG91ciAkbG9nb19sYWJlbCA9ICJnaXQgaG9tZXBhZ2UiOwogCiAjIHNvdXJjZSBvZiBwcm9qZWN0cyBsaXN0CkBAIC0xNzksNiArMTk1LDE0IEBACiAJJ3gtemlwJyA9PiB1bmRlZiwgJycgPT4gdW5kZWYsCiApOwogCisjIFBpeGVsIHNpemVzIGZvciBpY29ucyBhbmQgYXZhdGFycy4gSWYgdGhlIGRlZmF1bHQgZm9udCBzaXplcyBvciBsaW5laGVpZ2h0cworIyBhcmUgY2hhbmdlZCwgaXQgbWF5IGJlIGFwcHJvcHJpYXRlIHRvIGNoYW5nZSB0aGVzZSB2YWx1ZXMgdG9vIHZpYQorIyAkR0lUV0VCX0NPTkZJRy4KK291ciAlYXZhdGFyX3NpemUgPSAoCisJJ2RlZmF1bHQnID0+IDE2LAorCSdkb3VibGUnICA9PiAzMgorKTsKKwogIyBZb3UgZGVmaW5lIHNpdGUtd2lkZSBmZWF0dXJlIGRlZmF1bHRzIGhlcmU7IG92ZXJyaWRlIHRoZW0gd2l0aAogIyAkR0lUV0VCX0NPTkZJRyBhcyBuZWNlc3NhcnkuCiBvdXIgJWZlYXR1cmUgPSAoCkBAIC0yMDcsNyArMjMxLDcgQEAKIAkjICRmZWF0dXJleydibGFtZSd9eydvdmVycmlkZSd9ID0gMTsKIAkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIuYmxhbWUgPSAwfDE7CiAJJ2JsYW1lJyA9PiB7Ci0JCSdzdWInID0+IFwmZmVhdHVyZV9ibGFtZSwKKwkJJ3N1YicgPT4gc3ViIHsgZmVhdHVyZV9ib29sKCdibGFtZScsIEBfKSB9LAogCQknb3ZlcnJpZGUnID0+IDAsCiAJCSdkZWZhdWx0JyA9PiBbMF19LAogCkBAIC0yNDUsNyArMjY5LDcgQEAKIAkjICRmZWF0dXJleydncmVwJ317J292ZXJyaWRlJ30gPSAxOwogCSMgYW5kIGluIHByb2plY3QgY29uZmlnIGdpdHdlYi5ncmVwID0gMHwxOwogCSdncmVwJyA9PiB7Ci0JCSdzdWInID0+IFwmZmVhdHVyZV9ncmVwLAorCQknc3ViJyA9PiBzdWIgeyBmZWF0dXJlX2Jvb2woJ2dyZXAnLCBAXykgfSwKIAkJJ292ZXJyaWRlJyA9PiAwLAogCQknZGVmYXVsdCcgPT4gWzFdfSwKIApAQCAtMjU5LDcgKzI4Myw3IEBACiAJIyAkZmVhdHVyZXsncGlja2F4ZSd9eydvdmVycmlkZSd9ID0gMTsKIAkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIucGlja2F4ZSA9IDB8MTsKIAkncGlja2F4ZScgPT4gewotCQknc3ViJyA9PiBcJmZlYXR1cmVfcGlja2F4ZSwKKwkJJ3N1YicgPT4gc3ViIHsgZmVhdHVyZV9ib29sKCdwaWNrYXhlJywgQF8pIH0sCiAJCSdvdmVycmlkZScgPT4gMCwKIAkJJ2RlZmF1bHQnID0+IFsxXX0sCiAKQEAgLTMzNCw2ICszNTgsNDIgQEAKIAknY3RhZ3MnID0+IHsKIAkJJ292ZXJyaWRlJyA9PiAwLAogCQknZGVmYXVsdCcgPT4gWzBdfSwKKworCSMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhdGNoZXMgaW4gYSBwYXRjaHNldCBnZW5lcmF0ZWQgaW4gcGF0Y2gKKwkjIHZpZXcuIFNldCB0aGlzIHRvIDAgb3IgdW5kZWYgdG8gZGlzYWJsZSBwYXRjaCB2aWV3LCBvciB0byBhCisJIyBuZWdhdGl2ZSBudW1iZXIgdG8gcmVtb3ZlIGFueSBsaW1pdC4KKworCSMgVG8gZGlzYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsncGF0Y2hlcyd9eydkZWZhdWx0J30gPSBbMF07CisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3BhdGNoZXMnfXsnb3ZlcnJpZGUnfSA9IDE7CisJIyBhbmQgaW4gcHJvamVjdCBjb25maWcgZ2l0d2ViLnBhdGNoZXMgPSAwfG47CisJIyB3aGVyZSBuIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXRjaGVzIGFsbG93ZWQgaW4gYSBwYXRjaHNldC4KKwkncGF0Y2hlcycgPT4geworCQknc3ViJyA9PiBcJmZlYXR1cmVfcGF0Y2hlcywKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzE2XX0sCisKKwkjIEF2YXRhciBzdXBwb3J0LiBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCB2aWV3cyBzdWNoIGFzCisJIyBzaG9ydGxvZyBvciBjb21taXQgd2lsbCBkaXNwbGF5IGFuIGF2YXRhciBhc3NvY2lhdGVkIHdpdGgKKwkjIHRoZSBlbWFpbCBvZiB0aGUgY29tbWl0dGVyKHMpIGFuZC9vciBhdXRob3IocykuCisKKwkjIEN1cnJlbnRseSBhdmFpbGFibGUgcHJvdmlkZXJzIGFyZSBncmF2YXRhciBhbmQgcGljb24uCisJIyBJZiBhbiB1bmtub3duIHByb3ZpZGVyIGlzIHNwZWNpZmllZCwgdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQuCisKKwkjIEdyYXZhdGFyIGRlcGVuZHMgb24gRGlnZXN0OjpNRDUuCisJIyBQaWNvbiBjdXJyZW50bHkgcmVsaWVzIG9uIHRoZSBpbmRpYW5hLmVkdSBkYXRhYmFzZS4KKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydhdmF0YXInfXsnZGVmYXVsdCd9ID0gWyc8cHJvdmlkZXI+J107CisJIyB3aGVyZSA8cHJvdmlkZXI+IGlzIGVpdGhlciBncmF2YXRhciBvciBwaWNvbi4KKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnYXZhdGFyJ317J292ZXJyaWRlJ30gPSAxOworCSMgYW5kIGluIHByb2plY3QgY29uZmlnIGdpdHdlYi5hdmF0YXIgPSA8cHJvdmlkZXI+OworCSdhdmF0YXInID0+IHsKKwkJJ3N1YicgPT4gXCZmZWF0dXJlX2F2YXRhciwKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWycnXX0sCiApOwogCiBzdWIgZ2l0d2ViX2dldF9mZWF0dXJlIHsKQEAgLTM2NywxNiArNDI3LDE3IEBACiB9CiAKIAotc3ViIGZlYXR1cmVfYmxhbWUgewotCW15ICgkdmFsKSA9IGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ2JsYW1lJywgJy0tYm9vbCcpOworc3ViIGZlYXR1cmVfYm9vbCB7CisJbXkgJGtleSA9IHNoaWZ0OworCW15ICgkdmFsKSA9IGdpdF9nZXRfcHJvamVjdF9jb25maWcoJGtleSwgJy0tYm9vbCcpOwogCi0JaWYgKCR2YWwgZXEgJ3RydWUnKSB7Ci0JCXJldHVybiAxOworCWlmICghZGVmaW5lZCAkdmFsKSB7CisJCXJldHVybiAoJF9bMF0pOworCX0gZWxzaWYgKCR2YWwgZXEgJ3RydWUnKSB7CisJCXJldHVybiAoMSk7CiAJfSBlbHNpZiAoJHZhbCBlcSAnZmFsc2UnKSB7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gKDApOwogCX0KLQotCXJldHVybiAkX1swXTsKIH0KIAogc3ViIGZlYXR1cmVfc25hcHNob3QgewpAQCAtMzkxLDI4ICs0NTIsMjAgQEAKIAlyZXR1cm4gQGZtdHM7CiB9CiAKLXN1YiBmZWF0dXJlX2dyZXAgewotCW15ICgkdmFsKSA9IGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ2dyZXAnLCAnLS1ib29sJyk7CitzdWIgZmVhdHVyZV9wYXRjaGVzIHsKKwlteSBAdmFsID0gKGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ3BhdGNoZXMnLCAnLS1pbnQnKSk7CiAKLQlpZiAoJHZhbCBlcSAndHJ1ZScpIHsKLQkJcmV0dXJuICgxKTsKLQl9IGVsc2lmICgkdmFsIGVxICdmYWxzZScpIHsKLQkJcmV0dXJuICgwKTsKKwlpZiAoQHZhbCkgeworCQlyZXR1cm4gQHZhbDsKIAl9CiAKIAlyZXR1cm4gKCRfWzBdKTsKIH0KIAotc3ViIGZlYXR1cmVfcGlja2F4ZSB7Ci0JbXkgKCR2YWwpID0gZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygncGlja2F4ZScsICctLWJvb2wnKTsKK3N1YiBmZWF0dXJlX2F2YXRhciB7CisJbXkgQHZhbCA9IChnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCdhdmF0YXInKSk7CiAKLQlpZiAoJHZhbCBlcSAndHJ1ZScpIHsKLQkJcmV0dXJuICgxKTsKLQl9IGVsc2lmICgkdmFsIGVxICdmYWxzZScpIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci0KLQlyZXR1cm4gKCRfWzBdKTsKKwlyZXR1cm4gQHZhbCA/IEB2YWwgOiBAXzsKIH0KIAogIyBjaGVja2luZyBIRUFEIGZpbGUgd2l0aCAtZSBpcyBmcmFnaWxlIGlmIHRoZSByZXBvc2l0b3J5IHdhcwpAQCAtNDQwLDggKzQ5Myw4IEBACiAJQGZtdHMgPSBtYXAgewogCQlleGlzdHMgJGtub3duX3NuYXBzaG90X2Zvcm1hdF9hbGlhc2VzeyRffSA/CiAJCSAgICAgICAka25vd25fc25hcHNob3RfZm9ybWF0X2FsaWFzZXN7JF99IDogJF99IEBmbXRzOwotCUBmbXRzID0gZ3JlcChleGlzdHMgJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JF99LCBAZm10cyk7Ci0KKwlAZm10cyA9IGdyZXAgeworCQlleGlzdHMgJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JF99IH0gQGZtdHM7CiB9CiAKIG91ciAkR0lUV0VCX0NPTkZJRyA9ICRFTlZ7J0dJVFdFQl9DT05GSUcnfSB8fCAiKytHSVRXRUJfQ09ORklHKysiOwpAQCAtNTA4LDYgKzU2MSw4IEBACiAJImhlYWRzIiA9PiBcJmdpdF9oZWFkcywKIAkiaGlzdG9yeSIgPT4gXCZnaXRfaGlzdG9yeSwKIAkibG9nIiA9PiBcJmdpdF9sb2csCisJInBhdGNoIiA9PiBcJmdpdF9wYXRjaCwKKwkicGF0Y2hlcyIgPT4gXCZnaXRfcGF0Y2hlcywKIAkicnNzIiA9PiBcJmdpdF9yc3MsCiAJImF0b20iID0+IFwmZ2l0X2F0b20sCiAJInNlYXJjaCIgPT4gXCZnaXRfc2VhcmNoLApAQCAtNjY4LDExICs3MjMsMTIgQEAKIAkJIyBleHRlbnNpb25zLiBBbGxvd2VkIGV4dGVuc2lvbnMgYXJlIGJvdGggdGhlIGRlZmluZWQgc3VmZml4CiAJCSMgKHdoaWNoIGluY2x1ZGVzIHRoZSBpbml0aWFsIGRvdCBhbHJlYWR5KSBhbmQgdGhlIHNuYXBzaG90CiAJCSMgZm9ybWF0IGtleSBpdHNlbGYsIHdpdGggYSBwcmVwZW5kZWQgZG90Ci0JCXdoaWxlIChteSAoJGZtdCwgJW9wdCkgPSBlYWNoICVrbm93bl9zbmFwc2hvdF9mb3JtYXRzKSB7CisJCXdoaWxlIChteSAoJGZtdCwgJG9wdCkgPSBlYWNoICVrbm93bl9zbmFwc2hvdF9mb3JtYXRzKSB7CiAJCQlteSAkaGFzaCA9ICRyZWZuYW1lOwotCQkJbXkgJHNmeDsKLQkJCSRoYXNoID1+IHMvKFxRJG9wdHsnc3VmZml4J31cRXxcUS4kZm10XEUpJC8vOwotCQkJbmV4dCB1bmxlc3MgJHNmeCA9ICQxOworCQkJdW5sZXNzICgkaGFzaCA9fiBzLyhcUSRvcHQtPnsnc3VmZml4J31cRXxcUS4kZm10XEUpJC8vKSB7CisJCQkJbmV4dDsKKwkJCX0KKwkJCW15ICRzZnggPSAkMTsKIAkJCSMgYSB2YWxpZCBzdWZmaXggd2FzIGZvdW5kLCBzbyBzZXQgdGhlIHNuYXBzaG90IGZvcm1hdAogCQkJIyBhbmQgcmVzZXQgdGhlIGhhc2ggcGFyYW1ldGVyCiAJCQkkaW5wdXRfcGFyYW1zeydzbmFwc2hvdF9mb3JtYXQnfSA9ICRmbXQ7CkBAIC03OTMsNiArODQ5LDE5IEBACiBvdXIgQHNuYXBzaG90X2ZtdHMgPSBnaXR3ZWJfZ2V0X2ZlYXR1cmUoJ3NuYXBzaG90Jyk7CiBAc25hcHNob3RfZm10cyA9IGZpbHRlcl9zbmFwc2hvdF9mbXRzKEBzbmFwc2hvdF9mbXRzKTsKIAorIyBjaGVjayB0aGF0IHRoZSBhdmF0YXIgZmVhdHVyZSBpcyBzZXQgdG8gYSBrbm93biBwcm92aWRlciBuYW1lLAorIyBhbmQgZm9yIGVhY2ggcHJvdmlkZXIgY2hlY2sgaWYgdGhlIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLgorIyBpZiB0aGUgcHJvdmlkZXIgbmFtZSBpcyBpbnZhbGlkIG9yIHRoZSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBtZXQsCisjIHJlc2V0ICRnaXRfYXZhdGFyIHRvIHRoZSBlbXB0eSBzdHJpbmcuCitvdXIgKCRnaXRfYXZhdGFyKSA9IGdpdHdlYl9nZXRfZmVhdHVyZSgnYXZhdGFyJyk7CitpZiAoJGdpdF9hdmF0YXIgZXEgJ2dyYXZhdGFyJykgeworCSRnaXRfYXZhdGFyID0gJycgdW5sZXNzIChldmFsIHsgcmVxdWlyZSBEaWdlc3Q6Ok1ENTsgMTsgfSk7Cit9IGVsc2lmICgkZ2l0X2F2YXRhciBlcSAncGljb24nKSB7CisJIyBubyBkZXBlbmRlbmNpZXMKK30gZWxzZSB7CisJJGdpdF9hdmF0YXIgPSAnJzsKK30KKwogIyBkaXNwYXRjaAogaWYgKCFkZWZpbmVkICRhY3Rpb24pIHsKIAlpZiAoZGVmaW5lZCAkaGFzaCkgewpAQCAtODA4LDcgKzg3Nyw3IEBACiBpZiAoIWRlZmluZWQoJGFjdGlvbnN7JGFjdGlvbn0pKSB7CiAJZGllX2Vycm9yKDQwMCwgIlVua25vd24gYWN0aW9uIik7CiB9Ci1pZiAoJGFjdGlvbiAhfiBtL14ob3BtbHxwcm9qZWN0X2xpc3R8cHJvamVjdF9pbmRleCkkLyAmJgoraWYgKCRhY3Rpb24gIX4gbS9eKD86b3BtbHxwcm9qZWN0X2xpc3R8cHJvamVjdF9pbmRleCkkLyAmJgogICAgICEkcHJvamVjdCkgewogCWRpZV9lcnJvcig0MDAsICJQcm9qZWN0IG5lZWRlZCIpOwogfQpAQCAtODE4LDcgKzg4Nyw3IEBACiAjIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIyBhY3Rpb24gbGlua3MKIAotc3ViIGhyZWYgKCUpIHsKK3N1YiBocmVmIHsKIAlteSAlcGFyYW1zID0gQF87CiAJIyBkZWZhdWx0IGlzIHRvIHVzZSAtYWJzb2x1dGUgdXJsKCkgaS5lLiAkbXlfdXJpCiAJbXkgJGhyZWYgPSAkcGFyYW1zey1mdWxsfSA/ICRteV91cmwgOiAkbXlfdXJpOwpAQCAtODM0LDcgKzkwMyw3IEBACiAJfQogCiAJbXkgJHVzZV9wYXRoaW5mbyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdwYXRoaW5mbycpOwotCWlmICgkdXNlX3BhdGhpbmZvKSB7CisJaWYgKCR1c2VfcGF0aGluZm8gYW5kIGRlZmluZWQgJHBhcmFtc3sncHJvamVjdCd9KSB7CiAJCSMgdHJ5IHRvIHB1dCBhcyBtYW55IHBhcmFtZXRlcnMgYXMgcG9zc2libGUgaW4gUEFUSF9JTkZPOgogCQkjICAgLSBwcm9qZWN0IG5hbWUKIAkJIyAgIC0gYWN0aW9uCkBAIC04NDksNyArOTE4LDcgQEAKIAkJJGhyZWYgPX4gcywvJCwsOwogCiAJCSMgVGhlbiBhZGQgdGhlIHByb2plY3QgbmFtZSwgaWYgcHJlc2VudAotCQkkaHJlZiAuPSAiLyIuZXNjX3VybCgkcGFyYW1zeydwcm9qZWN0J30pIGlmIGRlZmluZWQgJHBhcmFtc3sncHJvamVjdCd9OworCQkkaHJlZiAuPSAiLyIuZXNjX3VybCgkcGFyYW1zeydwcm9qZWN0J30pOwogCQlkZWxldGUgJHBhcmFtc3sncHJvamVjdCd9OwogCiAJCSMgc2luY2Ugd2UgZGVzdHJ1Y3RpdmVseSBhYnNvcmIgcGFyYW1ldGVycywgd2Uga2VlcCB0aGlzCkBAIC0xMDE2LDcgKzEwODUsNyBAQAogfQogCiAjIHJlcGxhY2UgaW52YWxpZCB1dGY4IGNoYXJhY3RlciB3aXRoIFNVQlNUSVRVVElPTiBzZXF1ZW5jZQotc3ViIGVzY19odG1sICgkOyUpIHsKK3N1YiBlc2NfaHRtbCB7CiAJbXkgJHN0ciA9IHNoaWZ0OwogCW15ICVvcHRzID0gQF87CiAKQEAgLTEyMTUsNyArMTI4NCw3IEBACiAJaWYgKCRjaG9wcGVkIGVxICRzdHIpIHsKIAkJcmV0dXJuIGVzY19odG1sKCRjaG9wcGVkKTsKIAl9IGVsc2UgewotCQkkc3RyID1+IHMvKFtbOmNudHJsOl1dKS8/L2c7CisJCSRzdHIgPX4gcy9bWzpjbnRybDpdXS8/L2c7CiAJCXJldHVybiAkY2dpLT5zcGFuKHstdGl0bGU9PiRzdHJ9LCBlc2NfaHRtbCgkY2hvcHBlZCkpOwogCX0KIH0KQEAgLTEyNzYsNyArMTM0NSw3IEBACiB9OwogCiAjIHN1Ym1vZHVsZS9zdWJwcm9qZWN0LCBhIGNvbW1pdCBvYmplY3QgcmVmZXJlbmNlCi1zdWIgU19JU0dJVExJTksoJCkgeworc3ViIFNfSVNHSVRMSU5LIHsKIAlteSAkbW9kZSA9IHNoaWZ0OwogCiAJcmV0dXJuICgoJG1vZGUgJiBTX0lGTVQpID09IFNfSUZHSVRMSU5LKQpAQCAtMTM2NCwxMyArMTQzMywxMSBAQAogCW15ICRsaW5lID0gc2hpZnQ7CiAKIAkkbGluZSA9IGVzY19odG1sKCRsaW5lLCAtbmJzcD0+MSk7Ci0JaWYgKCRsaW5lID1+IG0vKFswLTlhLWZBLUZdezgsNDB9KS8pIHsKLQkJbXkgJGhhc2hfdGV4dCA9ICQxOwotCQlteSAkbGluayA9Ci0JCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Im9iamVjdCIsIGhhc2g9PiRoYXNoX3RleHQpLAotCQkJICAgICAgICAtY2xhc3MgPT4gInRleHQifSwgJGhhc2hfdGV4dCk7Ci0JCSRsaW5lID1+IHMvJGhhc2hfdGV4dC8kbGluay87Ci0JfQorCSRsaW5lID1+IHN7XGIoWzAtOWEtZkEtRl17OCw0MH0pXGJ9eworCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Im9iamVjdCIsIGhhc2g9PiQxKSwKKwkJCQkJLWNsYXNzID0+ICJ0ZXh0In0sICQxKTsKKwl9ZWc7CisKIAlyZXR1cm4gJGxpbmU7CiB9CiAKQEAgLTE0NDAsNiArMTUwNyw3IEBACiAJJGV4dHJhID0gJycgdW5sZXNzIGRlZmluZWQoJGV4dHJhKTsKIAogCWlmIChsZW5ndGgoJHNob3J0KSA8IGxlbmd0aCgkbG9uZykpIHsKKwkJJGxvbmcgPX4gcy9bWzpjbnRybDpdXS8/L2c7CiAJCXJldHVybiAkY2dpLT5hKHstaHJlZiA9PiAkaHJlZiwgLWNsYXNzID0+ICJsaXN0IHN1YmplY3QiLAogCQkgICAgICAgICAgICAgICAgLXRpdGxlID0+IHRvX3V0ZjgoJGxvbmcpfSwKIAkJICAgICAgIGVzY19odG1sKCRzaG9ydCkgLiAkZXh0cmEpOwpAQCAtMTQ0OSw2ICsxNTE3LDgyIEBACiAJfQogfQogCisjIFJhdGhlciB0aGFuIHJlY29tcHV0aW5nIHRoZSB1cmwgZm9yIGFuIGVtYWlsIG11bHRpcGxlIHRpbWVzLCB3ZSBjYWNoZSBpdAorIyBhZnRlciB0aGUgZmlyc3QgaGl0LiBUaGlzIGdpdmVzIGEgdmlzaWJsZSBiZW5lZml0IGluIHZpZXdzIHdoZXJlIHRoZSBhdmF0YXIKKyMgZm9yIHRoZSBzYW1lIGVtYWlsIGlzIHVzZWQgcmVwZWF0ZWRseSAoZS5nLiBzaG9ydGxvZykuCisjIFRoZSBjYWNoZSBpcyBzaGFyZWQgYnkgYWxsIGF2YXRhciBlbmdpbmVzIChjdXJyZW50bHkgZ3JhdmF0YXIgb25seSksIHdoaWNoCisjIGFyZSBmcmVlIHRvIHVzZSBpdCBhcyBwcmVmZXJyZWQuIFNpbmNlIG9ubHkgb25lIGF2YXRhciBlbmdpbmUgaXMgdXNlZCBmb3IgYW55CisjIGdpdmVuIHBhZ2UsIHRoZXJlJ3Mgbm8gcmlzayBmb3IgY2FjaGUgY29uZmxpY3RzLgorb3VyICVhdmF0YXJfY2FjaGUgPSAoKTsKKworIyBDb21wdXRlIHRoZSBwaWNvbiB1cmwgZm9yIGEgZ2l2ZW4gZW1haWwsIGJ5IHVzaW5nIHRoZSBwaWNvbiBzZWFyY2ggc2VydmljZSBvdmVyIGF0CisjIGh0dHA6Ly93d3cuY3MuaW5kaWFuYS5lZHUvcGljb25zL3NlYXJjaC5odG1sCitzdWIgcGljb25fdXJsIHsKKwlteSAkZW1haWwgPSBsYyBzaGlmdDsKKwlpZiAoISRhdmF0YXJfY2FjaGV7JGVtYWlsfSkgeworCQlteSAoJHVzZXIsICRkb21haW4pID0gc3BsaXQoJ0AnLCAkZW1haWwpOworCQkkYXZhdGFyX2NhY2hleyRlbWFpbH0gPQorCQkJImh0dHA6Ly93d3cuY3MuaW5kaWFuYS5lZHUvY2dpLXB1Yi9raW56bGVyL3BpY29uc2VhcmNoLmNnaS8iIC4KKwkJCSIkZG9tYWluLyR1c2VyLyIgLgorCQkJInVzZXJzK2RvbWFpbnMrdW5rbm93bi91cC9zaW5nbGUiOworCX0KKwlyZXR1cm4gJGF2YXRhcl9jYWNoZXskZW1haWx9OworfQorCisjIENvbXB1dGUgdGhlIGdyYXZhdGFyIHVybCBmb3IgYSBnaXZlbiBlbWFpbCwgaWYgaXQncyBub3QgaW4gdGhlIGNhY2hlIGFscmVhZHkuCisjIEdyYXZhdGFyIHN0b3JlcyBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBVUkwgYmVmb3JlIHRoZSBzaXplLCBzaW5jZSB0aGF0J3MgdGhlCisjIG9uZSBjb21wdXRhdGlvbmFsbHkgbW9yZSBleHBlbnNpdmUuIFRoaXMgYWxzbyBhbGxvd3MgcmV1c2Ugb2YgdGhlIGNhY2hlIGZvcgorIyBkaWZmZXJlbnQgc2l6ZXMgKGZvciB0aGlzIHBhcnRpY3VsYXIgZW5naW5lKS4KK3N1YiBncmF2YXRhcl91cmwgeworCW15ICRlbWFpbCA9IGxjIHNoaWZ0OworCW15ICRzaXplID0gc2hpZnQ7CisJJGF2YXRhcl9jYWNoZXskZW1haWx9IHx8PQorCQkiaHR0cDovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLyIgLgorCQkJRGlnZXN0OjpNRDU6Om1kNV9oZXgoJGVtYWlsKSAuICI/cz0iOworCXJldHVybiAkYXZhdGFyX2NhY2hleyRlbWFpbH0gLiAkc2l6ZTsKK30KKworIyBJbnNlcnQgYW4gYXZhdGFyIGZvciB0aGUgZ2l2ZW4gJGVtYWlsIGF0IHRoZSBnaXZlbiAkc2l6ZSBpZiB0aGUgZmVhdHVyZQorIyBpcyBlbmFibGVkLgorc3ViIGdpdF9nZXRfYXZhdGFyIHsKKwlteSAoJGVtYWlsLCAlb3B0cykgPSBAXzsKKwlteSAkcHJlX3doaXRlICA9ICgkb3B0c3stcGFkX2JlZm9yZX0gPyAiJm5ic3A7IiA6ICIiKTsKKwlteSAkcG9zdF93aGl0ZSA9ICgkb3B0c3stcGFkX2FmdGVyfSAgPyAiJm5ic3A7IiA6ICIiKTsKKwkkb3B0c3stc2l6ZX0gfHw9ICdkZWZhdWx0JzsKKwlteSAkc2l6ZSA9ICRhdmF0YXJfc2l6ZXskb3B0c3stc2l6ZX19IHx8ICRhdmF0YXJfc2l6ZXsnZGVmYXVsdCd9OworCW15ICR1cmwgPSAiIjsKKwlpZiAoJGdpdF9hdmF0YXIgZXEgJ2dyYXZhdGFyJykgeworCQkkdXJsID0gZ3JhdmF0YXJfdXJsKCRlbWFpbCwgJHNpemUpOworCX0gZWxzaWYgKCRnaXRfYXZhdGFyIGVxICdwaWNvbicpIHsKKwkJJHVybCA9IHBpY29uX3VybCgkZW1haWwpOworCX0KKwkjIE90aGVyIHByb3ZpZGVycyBjYW4gYmUgYWRkZWQgYnkgZXh0ZW5kaW5nIHRoZSBpZiBjaGFpbiwgZGVmaW5pbmcgJHVybAorCSMgYXMgbmVlZGVkLiBJZiBubyB2YXJpYW50IHB1dHMgc29tZXRoaW5nIGluICR1cmwsIHdlIGFzc3VtZSBhdmF0YXJzCisJIyBhcmUgY29tcGxldGVseSBkaXNhYmxlZC91bmF2YWlsYWJsZS4KKwlpZiAoJHVybCkgeworCQlyZXR1cm4gJHByZV93aGl0ZSAuCisJCSAgICAgICAiPGltZyB3aWR0aD1cIiRzaXplXCIgIiAuCisJCSAgICAgICAgICAgICJjbGFzcz1cImF2YXRhclwiICIgLgorCQkgICAgICAgICAgICAic3JjPVwiJHVybFwiICIgLgorCQkJICAgICJhbHQ9XCJcIiAiIC4KKwkJICAgICAgICIvPiIgLiAkcG9zdF93aGl0ZTsKKwl9IGVsc2UgeworCQlyZXR1cm4gIiI7CisJfQorfQorCisjIGZvcm1hdCB0aGUgYXV0aG9yIG5hbWUgb2YgdGhlIGdpdmVuIGNvbW1pdCB3aXRoIHRoZSBnaXZlbiB0YWcKKyMgdGhlIGF1dGhvciBuYW1lIGlzIGNob3BwZWQgYW5kIGVzY2FwZWQgYWNjb3JkaW5nIHRvIHRoZSBvdGhlcgorIyBvcHRpb25hbCBwYXJhbWV0ZXJzIChzZWUgY2hvcF9zdHIpLgorc3ViIGZvcm1hdF9hdXRob3JfaHRtbCB7CisJbXkgJHRhZyA9IHNoaWZ0OworCW15ICRjbyA9IHNoaWZ0OworCW15ICRhdXRob3IgPSBjaG9wX2FuZF9lc2NhcGVfc3RyKCRjby0+eydhdXRob3JfbmFtZSd9LCBAXyk7CisJcmV0dXJuICI8JHRhZyBjbGFzcz1cImF1dGhvclwiPiIgLgorCSAgICAgICBnaXRfZ2V0X2F2YXRhcigkY28tPnsnYXV0aG9yX2VtYWlsJ30sIC1wYWRfYWZ0ZXIgPT4gMSkgLgorCSAgICAgICAkYXV0aG9yIC4gIjwvJHRhZz4iOworfQorCiAjIGZvcm1hdCBnaXQgZGlmZiBoZWFkZXIgbGluZSwgaS5lLiAiZGlmZiAtLShnaXR8Y29tYmluZWR8Y2MpIC4uLiIKIHN1YiBmb3JtYXRfZ2l0X2RpZmZfaGVhZGVyX2xpbmUgewogCW15ICRsaW5lID0gc2hpZnQ7CkBAIC0xODIwLDcgKzE5NjQsNyBAQAogIyBUcnkgdG8gYXZvaWQgdXNpbmcgdGhpcyBmdW5jdGlvbiB3aGVyZXZlciBwb3NzaWJsZS4KIHN1YiBxdW90ZV9jb21tYW5kIHsKIAlyZXR1cm4gam9pbignICcsCi0JCSAgICBtYXAoIHsgbXkgJGEgPSAkXzsgJGEgPX4gcy8oWychXSkvJ1xcJDEnL2c7ICInJGEnIiB9IEBfICkpOworCQltYXAgeyBteSAkYSA9ICRfOyAkYSA9fiBzLyhbJyFdKS8nXFwkMScvZzsgIickYSciIH0gQF8gKTsKIH0KIAogIyBnZXQgSEVBRCByZWYgb2YgZ2l2ZW4gcHJvamVjdCBhcyBoYXNoCkBAIC0xODk0LDE4ICsyMDM4LDE5IEBACiAJcmV0dXJuICVjb25maWc7CiB9CiAKLSMgY29udmVydCBjb25maWcgdmFsdWUgdG8gYm9vbGVhbiwgJ3RydWUnIG9yICdmYWxzZScKKyMgY29udmVydCBjb25maWcgdmFsdWUgdG8gYm9vbGVhbjogJ3RydWUnIG9yICdmYWxzZScKICMgbm8gdmFsdWUsIG51bWJlciA+IDAsICd0cnVlJyBhbmQgJ3llcycgdmFsdWVzIGFyZSB0cnVlCiAjIHJlc3Qgb2YgdmFsdWVzIGFyZSB0cmVhdGVkIGFzIGZhbHNlIChuZXZlciBhcyBlcnJvcikKIHN1YiBjb25maWdfdG9fYm9vbCB7CiAJbXkgJHZhbCA9IHNoaWZ0OwogCisJcmV0dXJuIDEgaWYgIWRlZmluZWQgJHZhbDsgICAgICAgICAgICAgIyBzZWN0aW9uLmtleQorCiAJIyBzdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCiAJJHZhbCA9fiBzL15ccysvLzsKIAkkdmFsID1+IHMvXHMrJC8vOwogCi0JcmV0dXJuICghZGVmaW5lZCAkdmFsIHx8ICAgICAgICAgICAgICAgIyBzZWN0aW9uLmtleQotCSAgICAgICAgKCR2YWwgPX4gL15cZCskLyAmJiAkdmFsKSB8fCAgICMgc2VjdGlvbi5rZXkgPSAxCisJcmV0dXJuICgoJHZhbCA9fiAvXlxkKyQvICYmICR2YWwpIHx8ICAgIyBzZWN0aW9uLmtleSA9IDEKIAkgICAgICAgICgkdmFsID1+IC9eKD86dHJ1ZXx5ZXMpJC9pKSk7ICAjIHNlY3Rpb24ua2V5ID0gdHJ1ZQogfQogCkBAIC0xOTU4LDYgKzIxMDMsOSBAQAogCQkkY29uZmlnX2ZpbGUgPSAiJGdpdF9kaXIvY29uZmlnIjsKIAl9CiAKKwkjIGNoZWNrIGlmIGNvbmZpZyB2YXJpYWJsZSAoa2V5KSBleGlzdHMKKwlyZXR1cm4gdW5sZXNzIGV4aXN0cyAkY29uZmlneyJnaXR3ZWIuJGtleSJ9OworCiAJIyBlbnN1cmUgZ2l2ZW4gdHlwZQogCWlmICghZGVmaW5lZCAkdHlwZSkgewogCQlyZXR1cm4gJGNvbmZpZ3siZ2l0d2ViLiRrZXkifTsKQEAgLTIwMjgsNyArMjE3Niw3IEBACiAJbXkgJHBhdGggPSBzaGlmdDsKIAogCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcGF0aCI7Ci0Jb3BlbiBteSAkZmQsICIkZ2l0X2Rpci9kZXNjcmlwdGlvbiIKKwlvcGVuIG15ICRmZCwgJzwnLCAiJGdpdF9kaXIvZGVzY3JpcHRpb24iCiAJCW9yIHJldHVybiBnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCdkZXNjcmlwdGlvbicpOwogCW15ICRkZXNjciA9IDwkZmQ+OwogCWNsb3NlICRmZDsKQEAgLTIwNDMsMTggKzIxOTEsMTcgQEAKIAlteSAkY3RhZ3MgPSB7fTsKIAogCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcGF0aCI7Ci0JdW5sZXNzIChvcGVuZGlyIEQsICIkZ2l0X2Rpci9jdGFncyIpIHsKLQkJcmV0dXJuICRjdGFnczsKLQl9Ci0JZm9yZWFjaCAoZ3JlcCB7IC1mICRfIH0gbWFwIHsgIiRnaXRfZGlyL2N0YWdzLyRfIiB9IHJlYWRkaXIoRCkpIHsKLQkJb3BlbiBDVCwgJF8gb3IgbmV4dDsKLQkJbXkgJHZhbCA9IDxDVD47CisJb3BlbmRpciBteSAkZGgsICIkZ2l0X2Rpci9jdGFncyIKKwkJb3IgcmV0dXJuICRjdGFnczsKKwlmb3JlYWNoIChncmVwIHsgLWYgJF8gfSBtYXAgeyAiJGdpdF9kaXIvY3RhZ3MvJF8iIH0gcmVhZGRpcigkZGgpKSB7CisJCW9wZW4gbXkgJGN0LCAnPCcsICRfIG9yIG5leHQ7CisJCW15ICR2YWwgPSA8JGN0PjsKIAkJY2hvbXAgJHZhbDsKLQkJY2xvc2UgQ1Q7CisJCWNsb3NlICRjdDsKIAkJbXkgJGN0YWcgPSAkXzsgJGN0YWcgPX4gcyMuKi8jIzsKIAkJJGN0YWdzLT57JGN0YWd9ID0gJHZhbDsKIAl9Ci0JY2xvc2VkaXIgRDsKKwljbG9zZWRpciAkZGg7CiAJJGN0YWdzOwogfQogCkBAIC0yMTA3LDcgKzIyNTQsNyBAQAogCW15ICRwYXRoID0gc2hpZnQ7CiAKIAkkZ2l0X2RpciA9ICIkcHJvamVjdHJvb3QvJHBhdGgiOwotCW9wZW4gbXkgJGZkLCAiJGdpdF9kaXIvY2xvbmV1cmwiCisJb3BlbiBteSAkZmQsICc8JywgIiRnaXRfZGlyL2Nsb25ldXJsIgogCQlvciByZXR1cm4gd2FudGFycmF5ID8KIAkJQHsgY29uZmlnX3RvX211bHRpKGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ3VybCcpKSB9IDoKIAkJICAgY29uZmlnX3RvX211bHRpKGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ3VybCcpKTsKQEAgLTIxNjUsNyArMjMxMiw3IEBACiAJCSMgJ2xpYnMlMkZrbGliYyUyRmtsaWJjLmdpdCBILitQZXRlcitBbnZpbicKIAkJIyAnbGludXglMkZob3RwbHVnJTJGdWRldi5naXQgR3JlZytLcm9haC1IYXJ0bWFuJwogCQlteSAlcGF0aHM7Ci0JCW9wZW4gbXkgKCRmZCksICRwcm9qZWN0c19saXN0IG9yIHJldHVybjsKKwkJb3BlbiBteSAkZmQsICc8JywgJHByb2plY3RzX2xpc3Qgb3IgcmV0dXJuOwogCVBST0pFQ1Q6CiAJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CiAJCQljaG9tcCAkbGluZTsKQEAgLTIyMjgsNyArMjM3NSw3IEBACiAJIyAnbGlicyUyRmtsaWJjJTJGa2xpYmMuZ2l0IEguK1BldGVyK0FudmluJwogCSMgJ2xpbnV4JTJGaG90cGx1ZyUyRnVkZXYuZ2l0IEdyZWcrS3JvYWgtSGFydG1hbicKIAlpZiAoLWYgJHByb2plY3RzX2xpc3QpIHsKLQkJb3BlbiAobXkgJGZkICwgJHByb2plY3RzX2xpc3QpOworCQlvcGVuKG15ICRmZCwgJzwnLCAkcHJvamVjdHNfbGlzdCk7CiAJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CiAJCQljaG9tcCAkbGluZTsKIAkJCW15ICgkcHIsICRvdykgPSBzcGxpdCAnICcsICRsaW5lOwpAQCAtMjM3Niw4ICsyNTIzLDE0IEBACiAJCQkkdGFneyduYW1lJ30gPSAkMTsKIAkJfSBlbHNpZiAoJGxpbmUgPX4gbS9edGFnZ2VyICguKikgKFswLTldKykgKC4qKSQvKSB7CiAJCQkkdGFneydhdXRob3InfSA9ICQxOwotCQkJJHRhZ3snZXBvY2gnfSA9ICQyOwotCQkJJHRhZ3sndHonfSA9ICQzOworCQkJJHRhZ3snYXV0aG9yX2Vwb2NoJ30gPSAkMjsKKwkJCSR0YWd7J2F1dGhvcl90eid9ID0gJDM7CisJCQlpZiAoJHRhZ3snYXV0aG9yJ30gPX4gbS9eKFtePF0rKSA8KFtePl0qKT4vKSB7CisJCQkJJHRhZ3snYXV0aG9yX25hbWUnfSAgPSAkMTsKKwkJCQkkdGFneydhdXRob3JfZW1haWwnfSA9ICQyOworCQkJfSBlbHNlIHsKKwkJCQkkdGFneydhdXRob3JfbmFtZSd9ID0gJHRhZ3snYXV0aG9yJ307CisJCQl9CiAJCX0gZWxzaWYgKCRsaW5lID1+IG0vLS1CRUdJTi8pIHsKIAkJCXB1c2ggQGNvbW1lbnQsICRsaW5lOwogCQkJbGFzdDsKQEAgLTI0MTcsNyArMjU3MCw3IEBACiAJCX0gZWxzaWYgKCghZGVmaW5lZCAkd2l0aHBhcmVudHMpICYmICgkbGluZSA9fiBtL15wYXJlbnQgKFswLTlhLWZBLUZdezQwfSkkLykpIHsKIAkJCXB1c2ggQHBhcmVudHMsICQxOwogCQl9IGVsc2lmICgkbGluZSA9fiBtL15hdXRob3IgKC4qKSAoWzAtOV0rKSAoLiopJC8pIHsKLQkJCSRjb3snYXV0aG9yJ30gPSAkMTsKKwkJCSRjb3snYXV0aG9yJ30gPSB0b191dGY4KCQxKTsKIAkJCSRjb3snYXV0aG9yX2Vwb2NoJ30gPSAkMjsKIAkJCSRjb3snYXV0aG9yX3R6J30gPSAkMzsKIAkJCWlmICgkY297J2F1dGhvcid9ID1+IG0vXihbXjxdKykgPChbXj5dKik+LykgewpAQCAtMjQyNywxMCArMjU4MCw5IEBACiAJCQkJJGNveydhdXRob3JfbmFtZSd9ID0gJGNveydhdXRob3InfTsKIAkJCX0KIAkJfSBlbHNpZiAoJGxpbmUgPX4gbS9eY29tbWl0dGVyICguKikgKFswLTldKykgKC4qKSQvKSB7Ci0JCQkkY297J2NvbW1pdHRlcid9ID0gJDE7CisJCQkkY297J2NvbW1pdHRlcid9ID0gdG9fdXRmOCgkMSk7CiAJCQkkY297J2NvbW1pdHRlcl9lcG9jaCd9ID0gJDI7CiAJCQkkY297J2NvbW1pdHRlcl90eid9ID0gJDM7Ci0JCQkkY297J2NvbW1pdHRlcl9uYW1lJ30gPSAkY297J2NvbW1pdHRlcid9OwogCQkJaWYgKCRjb3snY29tbWl0dGVyJ30gPX4gbS9eKFtePF0rKSA8KFtePl0qKT4vKSB7CiAJCQkJJGNveydjb21taXR0ZXJfbmFtZSd9ICA9ICQxOwogCQkJCSRjb3snY29tbWl0dGVyX2VtYWlsJ30gPSAkMjsKQEAgLTI1OTMsNyArMjc0NSw3IEBACiB9CiAKICMgcGFyc2UgbGluZSBvZiBnaXQtbHMtdHJlZSBvdXRwdXQKLXN1YiBwYXJzZV9sc190cmVlX2xpbmUgKCQ7JSkgeworc3ViIHBhcnNlX2xzX3RyZWVfbGluZSB7CiAJbXkgJGxpbmUgPSBzaGlmdDsKIAlteSAlb3B0cyA9IEBfOwogCW15ICVyZXM7CkBAIC0yNzgyLDE4ICsyOTM0LDE4IEBACiAJLXIgJG1pbWVtYXAgb3IgcmV0dXJuIHVuZGVmOwogCiAJbXkgJW1pbWVtYXA7Ci0Jb3BlbihNSU1FLCAkbWltZW1hcCkgb3IgcmV0dXJuIHVuZGVmOwotCXdoaWxlICg8TUlNRT4pIHsKKwlvcGVuKG15ICRtaCwgJzwnLCAkbWltZW1hcCkgb3IgcmV0dXJuIHVuZGVmOworCXdoaWxlICg8JG1oPikgewogCQluZXh0IGlmIG0vXiMvOyAjIHNraXAgY29tbWVudHMKLQkJbXkgKCRtaW1lLCAkZXh0cykgPSBzcGxpdCgvXHQrLyk7CisJCW15ICgkbWltZXR5cGUsICRleHRzKSA9IHNwbGl0KC9cdCsvKTsKIAkJaWYgKGRlZmluZWQgJGV4dHMpIHsKIAkJCW15IEBleHRzID0gc3BsaXQoL1xzKy8sICRleHRzKTsKIAkJCWZvcmVhY2ggbXkgJGV4dCAoQGV4dHMpIHsKLQkJCQkkbWltZW1hcHskZXh0fSA9ICRtaW1lOworCQkJCSRtaW1lbWFweyRleHR9ID0gJG1pbWV0eXBlOwogCQkJfQogCQl9CiAJfQotCWNsb3NlKE1JTUUpOworCWNsb3NlKCRtaCk7CiAKIAkkZmlsZW5hbWUgPX4gL1wuKFteLl0qKSQvOwogCXJldHVybiAkbWltZW1hcHskMX07CkBAIC0yOTAxLDkgKzMwNTMsMTQgQEAKIDxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0iaW5kZXgsIG5vZm9sbG93Ii8+CiA8dGl0bGU+JHRpdGxlPC90aXRsZT4KIEVPRgotIyBwcmludCBvdXQgZWFjaCBzdHlsZXNoZWV0IHRoYXQgZXhpc3QKKwkjIHRoZSBzdHlsZXNoZWV0LCBmYXZpY29uIGV0YyB1cmxzIHdvbid0IHdvcmsgY29ycmVjdGx5IHdpdGggcGF0aF9pbmZvCisJIyB1bmxlc3Mgd2Ugc2V0IHRoZSBhcHByb3ByaWF0ZSBiYXNlIFVSTAorCWlmICgkRU5WeydQQVRIX0lORk8nfSkgeworCQlwcmludCAiPGJhc2UgaHJlZj1cIiIuZXNjX3VybCgkYmFzZV91cmwpLiJcIiAvPlxuIjsKKwl9CisJIyBwcmludCBvdXQgZWFjaCBzdHlsZXNoZWV0IHRoYXQgZXhpc3QsIHByb3ZpZGluZyBiYWNrd2FyZHMgY2FwYWJpbGl0eQorCSMgZm9yIHRob3NlIHBlb3BsZSB3aG8gZGVmaW5lZCAkc3R5bGVzaGVldCBpbiBhIGNvbmZpZyBmaWxlCiAJaWYgKGRlZmluZWQgJHN0eWxlc2hlZXQpIHsKLSNwcm92aWRlcyBiYWNrd2FyZHMgY2FwYWJpbGl0eSBmb3IgdGhvc2UgcGVvcGxlIHdobyBkZWZpbmUgc3R5bGUgc2hlZXQgaW4gYSBjb25maWcgZmlsZQogCQlwcmludCAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc3R5bGVzaGVldC4nIi8+Jy4iXG4iOwogCX0gZWxzZSB7CiAJCWZvcmVhY2ggbXkgJHN0eWxlc2hlZXQgKEBzdHlsZXNoZWV0cykgewpAQCAtMzE4NiwyMiArMzM0Myw1NCBAQAogCSAgICAgICJcbjwvZGl2PlxuIjsKIH0KIAotI3N1YiBnaXRfcHJpbnRfYXV0aG9yc2hpcCAoXCUpIHsKLXN1YiBnaXRfcHJpbnRfYXV0aG9yc2hpcCB7Ci0JbXkgJGNvID0gc2hpZnQ7Ci0KLQlteSAlYWQgPSBwYXJzZV9kYXRlKCRjby0+eydhdXRob3JfZXBvY2gnfSwgJGNvLT57J2F1dGhvcl90eid9KTsKLQlwcmludCAiPGRpdiBjbGFzcz1cImF1dGhvcl9kYXRlXCI+IiAuCi0JICAgICAgZXNjX2h0bWwoJGNvLT57J2F1dGhvcl9uYW1lJ30pIC4KLQkgICAgICAiIFskYWR7J3JmYzI4MjInfSI7Ci0JaWYgKCRhZHsnaG91cl9sb2NhbCd9IDwgNikgeworc3ViIHByaW50X2xvY2FsX3RpbWUgeworCW15ICVkYXRlID0gQF87CisJaWYgKCRkYXRleydob3VyX2xvY2FsJ30gPCA2KSB7CiAJCXByaW50ZigiICg8c3BhbiBjbGFzcz1cImF0bmlnaHRcIj4lMDJkOiUwMmQ8L3NwYW4+ICVzKSIsCi0JCSAgICAgICAkYWR7J2hvdXJfbG9jYWwnfSwgJGFkeydtaW51dGVfbG9jYWwnfSwgJGFkeyd0el9sb2NhbCd9KTsKKwkJCSRkYXRleydob3VyX2xvY2FsJ30sICRkYXRleydtaW51dGVfbG9jYWwnfSwgJGRhdGV7J3R6X2xvY2FsJ30pOwogCX0gZWxzZSB7CiAJCXByaW50ZigiICglMDJkOiUwMmQgJXMpIiwKLQkJICAgICAgICRhZHsnaG91cl9sb2NhbCd9LCAkYWR7J21pbnV0ZV9sb2NhbCd9LCAkYWR7J3R6X2xvY2FsJ30pOworCQkJJGRhdGV7J2hvdXJfbG9jYWwnfSwgJGRhdGV7J21pbnV0ZV9sb2NhbCd9LCAkZGF0ZXsndHpfbG9jYWwnfSk7CiAJfQotCXByaW50ICJdPC9kaXY+XG4iOworfQorCisjIE91dHB1dHMgdGhlIGF1dGhvciBuYW1lIGFuZCBkYXRlIGluIGxvbmcgZm9ybQorc3ViIGdpdF9wcmludF9hdXRob3JzaGlwIHsKKwlteSAkY28gPSBzaGlmdDsKKwlteSAlb3B0cyA9IEBfOworCW15ICR0YWcgPSAkb3B0c3stdGFnfSB8fCAnZGl2JzsKKworCW15ICVhZCA9IHBhcnNlX2RhdGUoJGNvLT57J2F1dGhvcl9lcG9jaCd9LCAkY28tPnsnYXV0aG9yX3R6J30pOworCXByaW50ICI8JHRhZyBjbGFzcz1cImF1dGhvcl9kYXRlXCI+IiAuCisJICAgICAgZXNjX2h0bWwoJGNvLT57J2F1dGhvcl9uYW1lJ30pIC4KKwkgICAgICAiIFskYWR7J3JmYzI4MjInfSI7CisJcHJpbnRfbG9jYWxfdGltZSglYWQpIGlmICgkb3B0c3stbG9jYWx0aW1lfSk7CisJcHJpbnQgIl0iIC4gZ2l0X2dldF9hdmF0YXIoJGNvLT57J2F1dGhvcl9lbWFpbCd9LCAtcGFkX2JlZm9yZSA9PiAxKQorCQkgIC4gIjwvJHRhZz5cbiI7Cit9CisKKyMgT3V0cHV0cyB0YWJsZSByb3dzIGNvbnRhaW5pbmcgdGhlIGZ1bGwgYXV0aG9yIG9yIGNvbW1pdHRlciBpbmZvcm1hdGlvbiwKKyMgaW4gdGhlIGZvcm1hdCBleHBlY3RlZCBmb3IgJ2NvbW1pdCcgdmlldyAoJiBzaW1pbGlhKS4KKyMgUGFyYW1ldGVycyBhcmUgYSBjb21taXQgaGFzaCByZWZlcmVuY2UsIGZvbGxvd2VkIGJ5IHRoZSBsaXN0IG9mIHBlb3BsZQorIyB0byBvdXRwdXQgaW5mb3JtYXRpb24gZm9yLiBJZiB0aGUgbGlzdCBpcyBlbXB0eSBpdCBkZWZhbHRzIHRvIGJvdGgKKyMgYXV0aG9yIGFuZCBjb21taXR0ZXIuCitzdWIgZ2l0X3ByaW50X2F1dGhvcnNoaXBfcm93cyB7CisJbXkgJGNvID0gc2hpZnQ7CisJIyB0b28gYmFkIHdlIGNhbid0IHVzZSBAcGVvcGxlID0gQF8gfHwgKCdhdXRob3InLCAnY29tbWl0dGVyJykKKwlteSBAcGVvcGxlID0gQF87CisJQHBlb3BsZSA9ICgnYXV0aG9yJywgJ2NvbW1pdHRlcicpIHVubGVzcyBAcGVvcGxlOworCWZvcmVhY2ggbXkgJHdobyAoQHBlb3BsZSkgeworCQlteSAld2QgPSBwYXJzZV9kYXRlKCRjby0+eyIke3dob31fZXBvY2gifSwgJGNvLT57IiR7d2hvfV90eiJ9KTsKKwkJcHJpbnQgIjx0cj48dGQ+JHdobzwvdGQ+PHRkPiIgLiBlc2NfaHRtbCgkY28tPnskd2hvfSkgLiAiPC90ZD4iIC4KKwkJICAgICAgIjx0ZCByb3dzcGFuPVwiMlwiPiIgLgorCQkgICAgICBnaXRfZ2V0X2F2YXRhcigkY28tPnsiJHt3aG99X2VtYWlsIn0sIC1zaXplID0+ICdkb3VibGUnKSAuCisJCSAgICAgICI8L3RkPjwvdHI+XG4iIC4KKwkJICAgICAgIjx0cj4iIC4KKwkJICAgICAgIjx0ZD48L3RkPjx0ZD4gJHdkeydyZmMyODIyJ30iOworCQlwcmludF9sb2NhbF90aW1lKCV3ZCk7CisJCXByaW50ICI8L3RkPiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQogfQogCiBzdWIgZ2l0X3ByaW50X3BhZ2VfcGF0aCB7CkBAIC0zMjQyLDggKzM0MzEsNyBAQAogCXByaW50ICI8YnIvPjwvZGl2PlxuIjsKIH0KIAotIyBzdWIgZ2l0X3ByaW50X2xvZyAoXEA7JSkgewotc3ViIGdpdF9wcmludF9sb2cgKCQ7JSkgeworc3ViIGdpdF9wcmludF9sb2cgewogCW15ICRsb2cgPSBzaGlmdDsKIAlteSAlb3B0cyA9IEBfOwogCkBAIC0zMzAxLDcgKzM0ODksNyBAQAogCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJjYXQtZmlsZSIsICJibG9iIiwgJGhhc2gKIAkJb3IgcmV0dXJuOwogCXsKLQkJbG9jYWwgJC87CisJCWxvY2FsICQvID0gdW5kZWY7CiAJCSRsaW5rX3RhcmdldCA9IDwkZmQ+OwogCX0KIAljbG9zZSAkZmQKQEAgLTMzMTQsMTAgKzM1MDIsNyBAQAogIyByZXR1cm4gdGFyZ2V0IG9mIGxpbmsgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSAodG9wIHRyZWUpOwogIyByZXR1cm4gdW5kZWYgaWYgaXQgaXMgbm90IHBvc3NpYmxlIChpbmNsdWRpbmcgYWJzb2x1dGUgbGlua3MpLgogc3ViIG5vcm1hbGl6ZV9saW5rX3RhcmdldCB7Ci0JbXkgKCRsaW5rX3RhcmdldCwgJGJhc2VkaXIsICRoYXNoX2Jhc2UpID0gQF87Ci0KLQkjIHdlIGNhbiBub3JtYWxpemUgc3ltbGluayB0YXJnZXQgb25seSBpZiAkaGFzaF9iYXNlIGlzIHByb3ZpZGVkCi0JcmV0dXJuIHVubGVzcyAkaGFzaF9iYXNlOworCW15ICgkbGlua190YXJnZXQsICRiYXNlZGlyKSA9IEBfOwogCiAJIyBhYnNvbHV0ZSBzeW1saW5rcyAoYmVnaW5uaW5nIHdpdGggJy8nKSBjYW5ub3QgYmUgbm9ybWFsaXplZAogCXJldHVybiBpZiAoc3Vic3RyKCRsaW5rX3RhcmdldCwgMCwgMSkgZXEgJy8nKTsKQEAgLTMzNzMsNyArMzU1OCw3IEBACiAJCWlmIChTX0lTTE5LKG9jdCAkdC0+eydtb2RlJ30pKSB7CiAJCQlteSAkbGlua190YXJnZXQgPSBnaXRfZ2V0X2xpbmtfdGFyZ2V0KCR0LT57J2hhc2gnfSk7CiAJCQlpZiAoJGxpbmtfdGFyZ2V0KSB7Ci0JCQkJbXkgJG5vcm1fdGFyZ2V0ID0gbm9ybWFsaXplX2xpbmtfdGFyZ2V0KCRsaW5rX3RhcmdldCwgJGJhc2VkaXIsICRoYXNoX2Jhc2UpOworCQkJCW15ICRub3JtX3RhcmdldCA9IG5vcm1hbGl6ZV9saW5rX3RhcmdldCgkbGlua190YXJnZXQsICRiYXNlZGlyKTsKIAkJCQlpZiAoZGVmaW5lZCAkbm9ybV90YXJnZXQpIHsKIAkJCQkJcHJpbnQgIiAtPiAiIC4KIAkJCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJvYmplY3QiLCBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsCkBAIC0zOTY2LDcgKzQxNTEsNyBAQAogCQkJICAgICgkcG5hbWUgIX4gL1wvJC8pICYmCiAJCQkgICAgKC1kICIkcHJvamVjdHJvb3QvJHBuYW1lIikpIHsKIAkJCQkkcHItPnsnZm9ya3MnfSA9ICItZCAkcHJvamVjdHJvb3QvJHBuYW1lIjsKLQkJCX0JZWxzZSB7CisJCQl9IGVsc2UgewogCQkJCSRwci0+eydmb3Jrcyd9ID0gMDsKIAkJCX0KIAkJfQpAQCAtNDExOSwxMSArNDMwNCw5IEBACiAJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CiAJCX0KIAkJJGFsdGVybmF0ZSBePSAxOwotCQlteSAkYXV0aG9yID0gY2hvcF9hbmRfZXNjYXBlX3N0cigkY297J2F1dGhvcl9uYW1lJ30sIDEwKTsKIAkJIyBnaXRfc3VtbWFyeSgpIHVzZWQgcHJpbnQgIjx0ZD48aT4kY297J2FnZV9zdHJpbmcnfTwvaT48L3RkPlxuIiAuCiAJCXByaW50ICI8dGQgdGl0bGU9XCIkY297J2FnZV9zdHJpbmdfYWdlJ31cIj48aT4kY297J2FnZV9zdHJpbmdfZGF0ZSd9PC9pPjwvdGQ+XG4iIC4KLQkJICAgICAgIjx0ZD48aT4iIC4gJGF1dGhvciAuICI8L2k+PC90ZD5cbiIgLgotCQkgICAgICAiPHRkPiI7CisJCSAgICAgIGZvcm1hdF9hdXRob3JfaHRtbCgndGQnLCBcJWNvLCAxMCkgLiAiPHRkPiI7CiAJCXByaW50IGZvcm1hdF9zdWJqZWN0X2h0bWwoJGNveyd0aXRsZSd9LCAkY297J3RpdGxlX3Nob3J0J30sCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY29tbWl0KSwgJHJlZik7CiAJCXByaW50ICI8L3RkPlxuIiAuCkBAIC00MTcwLDExICs0MzUzLDkgQEAKIAkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKIAkJfQogCQkkYWx0ZXJuYXRlIF49IDE7Ci0JIyBzaG9ydGxvZyB1c2VzICAgICAgY2hvcF9zdHIoJGNveydhdXRob3JfbmFtZSd9LCAxMCkKLQkJbXkgJGF1dGhvciA9IGNob3BfYW5kX2VzY2FwZV9zdHIoJGNveydhdXRob3JfbmFtZSd9LCAxNSwgMyk7CiAJCXByaW50ICI8dGQgdGl0bGU9XCIkY297J2FnZV9zdHJpbmdfYWdlJ31cIj48aT4kY297J2FnZV9zdHJpbmdfZGF0ZSd9PC9pPjwvdGQ+XG4iIC4KLQkJICAgICAgIjx0ZD48aT4iIC4gJGF1dGhvciAuICI8L2k+PC90ZD5cbiIgLgotCQkgICAgICAiPHRkPiI7CisJIyBzaG9ydGxvZzogICBmb3JtYXRfYXV0aG9yX2h0bWwoJ3RkJywgXCVjbywgMTApCisJCSAgICAgIGZvcm1hdF9hdXRob3JfaHRtbCgndGQnLCBcJWNvLCAxNSwgMykgLiAiPHRkPiI7CiAJCSMgb3JpZ2luYWxseSBnaXRfaGlzdG9yeSB1c2VkIGNob3Bfc3RyKCRjb3sndGl0bGUnfSwgNTApCiAJCXByaW50IGZvcm1hdF9zdWJqZWN0X2h0bWwoJGNveyd0aXRsZSd9LCAkY297J3RpdGxlX3Nob3J0J30sCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY29tbWl0KSwgJHJlZik7CkBAIC00MzI3LDkgKzQ1MDgsOCBAQAogCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOwogCQl9CiAJCSRhbHRlcm5hdGUgXj0gMTsKLQkJbXkgJGF1dGhvciA9IGNob3BfYW5kX2VzY2FwZV9zdHIoJGNveydhdXRob3JfbmFtZSd9LCAxNSwgNSk7CiAJCXByaW50ICI8dGQgdGl0bGU9XCIkY297J2FnZV9zdHJpbmdfYWdlJ31cIj48aT4kY297J2FnZV9zdHJpbmdfZGF0ZSd9PC9pPjwvdGQ+XG4iIC4KLQkJICAgICAgIjx0ZD48aT4iIC4gJGF1dGhvciAuICI8L2k+PC90ZD5cbiIgLgorCQkgICAgICBmb3JtYXRfYXV0aG9yX2h0bWwoJ3RkJywgXCVjbywgMTUsIDUpIC4KIAkJICAgICAgIjx0ZD4iIC4KIAkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY297J2lkJ30pLAogCQkgICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3Qgc3ViamVjdCJ9LApAQCAtNDU2MywxMSArNDc0Myw3IEBACiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFneyd0eXBlJ30pIC4gIjwvdGQ+XG4iIC4KIAkgICAgICAiPC90cj5cbiI7CiAJaWYgKGRlZmluZWQoJHRhZ3snYXV0aG9yJ30pKSB7Ci0JCW15ICVhZCA9IHBhcnNlX2RhdGUoJHRhZ3snZXBvY2gnfSwgJHRhZ3sndHonfSk7Ci0JCXByaW50ICI8dHI+PHRkPmF1dGhvcjwvdGQ+PHRkPiIgLiBlc2NfaHRtbCgkdGFneydhdXRob3InfSkgLiAiPC90ZD48L3RyPlxuIjsKLQkJcHJpbnQgIjx0cj48dGQ+PC90ZD48dGQ+IiAuICRhZHsncmZjMjgyMid9IC4KLQkJCXNwcmludGYoIiAoJTAyZDolMDJkICVzKSIsICRhZHsnaG91cl9sb2NhbCd9LCAkYWR7J21pbnV0ZV9sb2NhbCd9LCAkYWR7J3R6X2xvY2FsJ30pIC4KLQkJCSI8L3RkPjwvdHI+XG4iOworCQlnaXRfcHJpbnRfYXV0aG9yc2hpcF9yb3dzKFwldGFnLCAnYXV0aG9yJyk7CiAJfQogCXByaW50ICI8L3RhYmxlPlxuXG4iIC4KIAkgICAgICAiPC9kaXY+XG4iOwpAQCAtNDU4MiwyOCArNDc1OCwzMyBAQAogfQogCiBzdWIgZ2l0X2JsYW1lIHsKLQlteSAkZmQ7Ci0JbXkgJGZ0eXBlOwotCisJIyBwZXJtaXNzaW9ucwogCWdpdHdlYl9jaGVja19mZWF0dXJlKCdibGFtZScpCi0JICAgIG9yIGRpZV9lcnJvcig0MDMsICJCbGFtZSB2aWV3IG5vdCBhbGxvd2VkIik7CisJCW9yIGRpZV9lcnJvcig0MDMsICJCbGFtZSB2aWV3IG5vdCBhbGxvd2VkIik7CiAKKwkjIGVycm9yIGNoZWNraW5nCiAJZGllX2Vycm9yKDQwMCwgIk5vIGZpbGUgbmFtZSBnaXZlbiIpIHVubGVzcyAkZmlsZV9uYW1lOwogCSRoYXNoX2Jhc2UgfHw9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKLQlkaWVfZXJyb3IoNDA0LCAiQ291bGRuJ3QgZmluZCBiYXNlIGNvbW1pdCIpIHVubGVzcyAoJGhhc2hfYmFzZSk7CisJZGllX2Vycm9yKDQwNCwgIkNvdWxkbid0IGZpbmQgYmFzZSBjb21taXQiKSB1bmxlc3MgJGhhc2hfYmFzZTsKIAlteSAlY28gPSBwYXJzZV9jb21taXQoJGhhc2hfYmFzZSkKIAkJb3IgZGllX2Vycm9yKDQwNCwgIkNvbW1pdCBub3QgZm91bmQiKTsKKwlteSAkZnR5cGUgPSAiYmxvYiI7CiAJaWYgKCFkZWZpbmVkICRoYXNoKSB7CiAJCSRoYXNoID0gZ2l0X2dldF9oYXNoX2J5X3BhdGgoJGhhc2hfYmFzZSwgJGZpbGVfbmFtZSwgImJsb2IiKQogCQkJb3IgZGllX2Vycm9yKDQwNCwgIkVycm9yIGxvb2tpbmcgdXAgZmlsZSIpOworCX0gZWxzZSB7CisJCSRmdHlwZSA9IGdpdF9nZXRfdHlwZSgkaGFzaCk7CisJCWlmICgkZnR5cGUgIX4gImJsb2IiKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiT2JqZWN0IGlzIG5vdCBhIGJsb2IiKTsKKwkJfQogCX0KLQkkZnR5cGUgPSBnaXRfZ2V0X3R5cGUoJGhhc2gpOwotCWlmICgkZnR5cGUgIX4gImJsb2IiKSB7Ci0JCWRpZV9lcnJvcig0MDAsICJPYmplY3QgaXMgbm90IGEgYmxvYiIpOwotCX0KLQlvcGVuICgkZmQsICItfCIsIGdpdF9jbWQoKSwgImJsYW1lIiwgJy1wJywgJy0tJywKLQkgICAgICAkZmlsZV9uYW1lLCAkaGFzaF9iYXNlKQorCisJIyBydW4gZ2l0LWJsYW1lIC0tcG9yY2VsYWluCisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImJsYW1lIiwgJy1wJywKKwkJJGhhc2hfYmFzZSwgJy0tJywgJGZpbGVfbmFtZQogCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtYmxhbWUgZmFpbGVkIik7CisKKwkjIHBhZ2UgaGVhZGVyCiAJZ2l0X2hlYWRlcl9odG1sKCk7CiAJbXkgJGZvcm1hdHNfbmF2ID0KIAkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgLXJlcGxheT0+MSl9LApAQCAtNDYxNyw0MiArNDc5OCw0NiBAQAogCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhhc2hfYmFzZSwkY297J3RyZWUnfSwkaGFzaF9iYXNlLCAkZm9ybWF0c19uYXYpOwogCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pLCAkaGFzaF9iYXNlKTsKIAlnaXRfcHJpbnRfcGFnZV9wYXRoKCRmaWxlX25hbWUsICRmdHlwZSwgJGhhc2hfYmFzZSk7Ci0JbXkgQHJldl9jb2xvciA9IChxdyhsaWdodDIgZGFyazIpKTsKKworCSMgcGFnZSBib2R5CisJbXkgQHJldl9jb2xvciA9IHF3KGxpZ2h0MiBkYXJrMik7CiAJbXkgJG51bV9jb2xvcnMgPSBzY2FsYXIoQHJldl9jb2xvcik7CiAJbXkgJGN1cnJlbnRfY29sb3IgPSAwOwotCW15ICRsYXN0X3JldjsKKwlteSAlbWV0YWluZm8gPSAoKTsKKwogCXByaW50IDw8SFRNTDsKIDxkaXYgY2xhc3M9InBhZ2VfYm9keSI+CiA8dGFibGUgY2xhc3M9ImJsYW1lIj4KIDx0cj48dGg+Q29tbWl0PC90aD48dGg+TGluZTwvdGg+PHRoPkRhdGE8L3RoPjwvdHI+CiBIVE1MCi0JbXkgJW1ldGFpbmZvID0gKCk7Ci0Jd2hpbGUgKDEpIHsKLQkJJF8gPSA8JGZkPjsKLQkJbGFzdCB1bmxlc3MgZGVmaW5lZCAkXzsKKyBMSU5FOgorCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCWNob21wICRsaW5lOworCQkjIHRoZSBoZWFkZXI6IDxTSEEtMT4gPHNyYyBsaW5lbm8+IDxkc3QgbGluZW5vPiBbPGxpbmVzIGluIGdyb3VwPl0KKwkJIyBubyA8bGluZXMgaW4gZ3JvdXA+IGZvciBzdWJzZXF1ZW50IGxpbmVzIGluIGdyb3VwIG9mIGxpbmVzCiAJCW15ICgkZnVsbF9yZXYsICRvcmlnX2xpbmVubywgJGxpbmVubywgJGdyb3VwX3NpemUpID0KLQkJICAgIC9eKFswLTlhLWZdezQwfSkgKFxkKykgKFxkKykoPzogKFxkKykpPyQvOworCQkgICAoJGxpbmUgPX4gL14oWzAtOWEtZl17NDB9KSAoXGQrKSAoXGQrKSg/OiAoXGQrKSk/JC8pOwogCQlpZiAoIWV4aXN0cyAkbWV0YWluZm97JGZ1bGxfcmV2fSkgewogCQkJJG1ldGFpbmZveyRmdWxsX3Jldn0gPSB7fTsKIAkJfQogCQlteSAkbWV0YSA9ICRtZXRhaW5mb3skZnVsbF9yZXZ9OwotCQl3aGlsZSAoPCRmZD4pIHsKLQkJCWxhc3QgaWYgKHMvXlx0Ly8pOwotCQkJaWYgKC9eKFxTKykgKC4qKSQvKSB7CisJCW15ICRkYXRhOworCQl3aGlsZSAoJGRhdGEgPSA8JGZkPikgeworCQkJY2hvbXAgJGRhdGE7CisJCQlsYXN0IGlmICgkZGF0YSA9fiBzL15cdC8vKTsgIyBjb250ZW50cyBvZiBsaW5lCisJCQlpZiAoJGRhdGEgPX4gL14oXFMrKSAoLiopJC8pIHsKIAkJCQkkbWV0YS0+eyQxfSA9ICQyOwogCQkJfQogCQl9Ci0JCW15ICRkYXRhID0gJF87Ci0JCWNob21wICRkYXRhOwotCQlteSAkcmV2ID0gc3Vic3RyKCRmdWxsX3JldiwgMCwgOCk7CisJCW15ICRzaG9ydF9yZXYgPSBzdWJzdHIoJGZ1bGxfcmV2LCAwLCA4KTsKIAkJbXkgJGF1dGhvciA9ICRtZXRhLT57J2F1dGhvcid9OwotCQlteSAlZGF0ZSA9IHBhcnNlX2RhdGUoJG1ldGEtPnsnYXV0aG9yLXRpbWUnfSwKLQkJICAgICAgICAgICAgICAgICAgICAgICRtZXRhLT57J2F1dGhvci10eid9KTsKKwkJbXkgJWRhdGUgPQorCQkJcGFyc2VfZGF0ZSgkbWV0YS0+eydhdXRob3ItdGltZSd9LCAkbWV0YS0+eydhdXRob3ItdHonfSk7CiAJCW15ICRkYXRlID0gJGRhdGV7J2lzby10eid9OwogCQlpZiAoJGdyb3VwX3NpemUpIHsKLQkJCSRjdXJyZW50X2NvbG9yID0gKyskY3VycmVudF9jb2xvciAlICRudW1fY29sb3JzOworCQkJJGN1cnJlbnRfY29sb3IgPSAoJGN1cnJlbnRfY29sb3IgKyAxKSAlICRudW1fY29sb3JzOwogCQl9Ci0JCXByaW50ICI8dHIgY2xhc3M9XCIkcmV2X2NvbG9yWyRjdXJyZW50X2NvbG9yXVwiPlxuIjsKKwkJcHJpbnQgIjx0ciBpZD1cImwkbGluZW5vXCIgY2xhc3M9XCIkcmV2X2NvbG9yWyRjdXJyZW50X2NvbG9yXVwiPlxuIjsKIAkJaWYgKCRncm91cF9zaXplKSB7CiAJCQlwcmludCAiPHRkIGNsYXNzPVwic2hhMVwiIjsKIAkJCXByaW50ICIgdGl0bGU9XCIiLiBlc2NfaHRtbCgkYXV0aG9yKSAuICIsICRkYXRlXCIiOwpAQCAtNDY2MSwyMCArNDg0NiwyNSBAQAogCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZnVsbF9yZXYsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSl9LAotCQkJICAgICAgICAgICAgICBlc2NfaHRtbCgkcmV2KSk7CisJCQkgICAgICAgICAgICAgIGVzY19odG1sKCRzaG9ydF9yZXYpKTsKIAkJCXByaW50ICI8L3RkPlxuIjsKIAkJfQotCQlvcGVuIChteSAkZGQsICItfCIsIGdpdF9jbWQoKSwgInJldi1wYXJzZSIsICIkZnVsbF9yZXZeIikKLQkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1yZXYtcGFyc2UgZmFpbGVkIik7Ci0JCW15ICRwYXJlbnRfY29tbWl0ID0gPCRkZD47Ci0JCWNsb3NlICRkZDsKLQkJY2hvbXAoJHBhcmVudF9jb21taXQpOworCQlteSAkcGFyZW50X2NvbW1pdDsKKwkJaWYgKCFleGlzdHMgJG1ldGEtPnsncGFyZW50J30pIHsKKwkJCW9wZW4gKG15ICRkZCwgIi18IiwgZ2l0X2NtZCgpLCAicmV2LXBhcnNlIiwgIiRmdWxsX3Jldl4iKQorCQkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1yZXYtcGFyc2UgZmFpbGVkIik7CisJCQkkcGFyZW50X2NvbW1pdCA9IDwkZGQ+OworCQkJY2xvc2UgJGRkOworCQkJY2hvbXAoJHBhcmVudF9jb21taXQpOworCQkJJG1ldGEtPnsncGFyZW50J30gPSAkcGFyZW50X2NvbW1pdDsKKwkJfSBlbHNlIHsKKwkJCSRwYXJlbnRfY29tbWl0ID0gJG1ldGEtPnsncGFyZW50J307CisJCX0KIAkJbXkgJGJsYW1lZCA9IGhyZWYoYWN0aW9uID0+ICdibGFtZScsCiAJCSAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZSA9PiAkbWV0YS0+eydmaWxlbmFtZSd9LAogCQkgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2UgPT4gJHBhcmVudF9jb21taXQpOwogCQlwcmludCAiPHRkIGNsYXNzPVwibGluZW5yXCI+IjsKIAkJcHJpbnQgJGNnaS0+YSh7IC1ocmVmID0+ICIkYmxhbWVkI2wkb3JpZ19saW5lbm8iLAotCQkgICAgICAgICAgICAgICAgLWlkID0+ICJsJGxpbmVubyIsCiAJCSAgICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpbmVuciIgfSwKIAkJICAgICAgICAgICAgICBlc2NfaHRtbCgkbGluZW5vKSk7CiAJCXByaW50ICI8L3RkPiI7CkBAIC00Njg1LDYgKzQ4NzUsOCBAQAogCXByaW50ICI8L2Rpdj4iOwogCWNsb3NlICRmZAogCQlvciBwcmludCAiUmVhZGluZyBibG9iIGZhaWxlZFxuIjsKKworCSMgcGFnZSBmb290ZXIKIAlnaXRfZm9vdGVyX2h0bWwoKTsKIH0KIApAQCAtNDc2MCwxMSArNDk1MiwxMCBAQAogCQktY29udGVudF9kaXNwb3NpdGlvbiA9PgogCQkJKCRzYW5kYm94ID8gJ2F0dGFjaG1lbnQnIDogJ2lubGluZScpCiAJCQkuICc7IGZpbGVuYW1lPSInIC4gJHNhdmVfYXMgLiAnIicpOwotCXVuZGVmICQvOworCWxvY2FsICQvID0gdW5kZWY7CiAJYmlubW9kZSBTVERPVVQsICc6cmF3JzsKIAlwcmludCA8JGZkPjsKIAliaW5tb2RlIFNURE9VVCwgJzp1dGY4JzsgIyBhcyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBnaXR3ZWIuY2dpCi0JJC8gPSAiXG4iOwogCWNsb3NlICRmZDsKIH0KIApAQCAtNDg2NiwxMiArNTA1NywxNiBAQAogCQl9CiAJfQogCWRpZV9lcnJvcig0MDQsICJObyBzdWNoIHRyZWUiKSB1bmxlc3MgZGVmaW5lZCgkaGFzaCk7Ci0JJC8gPSAiXDAiOwotCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJscy10cmVlIiwgJy16JywgJGhhc2gKLQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWxzLXRyZWUgZmFpbGVkIik7Ci0JbXkgQGVudHJpZXMgPSBtYXAgeyBjaG9tcDsgJF8gfSA8JGZkPjsKLQljbG9zZSAkZmQgb3IgZGllX2Vycm9yKDQwNCwgIlJlYWRpbmcgdHJlZSBmYWlsZWQiKTsKLQkkLyA9ICJcbiI7CisKKwlteSBAZW50cmllcyA9ICgpOworCXsKKwkJbG9jYWwgJC8gPSAiXDAiOworCQlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAibHMtdHJlZSIsICcteicsICRoYXNoCisJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtbHMtdHJlZSBmYWlsZWQiKTsKKwkJQGVudHJpZXMgPSBtYXAgeyBjaG9tcDsgJF8gfSA8JGZkPjsKKwkJY2xvc2UgJGZkCisJCQlvciBkaWVfZXJyb3IoNDA0LCAiUmVhZGluZyB0cmVlIGZhaWxlZCIpOworCX0KIAogCW15ICRyZWZzID0gZ2l0X2dldF9yZWZlcmVuY2VzKCk7CiAJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkaGFzaF9iYXNlKTsKQEAgLTUwMTUsNiArNTIxMCwxNSBAQAogCiAJbXkgJHBhZ2luZ19uYXYgPSBmb3JtYXRfcGFnaW5nX25hdignbG9nJywgJGhhc2gsICRoZWFkLCAkcGFnZSwgJCNjb21taXRsaXN0ID49IDEwMCk7CiAKKwlteSAoJHBhdGNoX21heCkgPSBnaXR3ZWJfZ2V0X2ZlYXR1cmUoJ3BhdGNoZXMnKTsKKwlpZiAoJHBhdGNoX21heCkgeworCQlpZiAoJHBhdGNoX21heCA8IDAgfHwgQGNvbW1pdGxpc3QgPD0gJHBhdGNoX21heCkgeworCQkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgIiAuCisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJwYXRjaGVzIiwgLXJlcGxheT0+MSl9LAorCQkJCQkicGF0Y2hlcyIpOworCQl9CisJfQorCiAJZ2l0X2hlYWRlcl9odG1sKCk7CiAJZ2l0X3ByaW50X3BhZ2VfbmF2KCdsb2cnLCcnLCAkaGFzaCx1bmRlZix1bmRlZiwgJHBhZ2luZ19uYXYpOwogCkBAIC01MDQzLDkgKzUyNDcsOSBAQAogCQkgICAgICAiIHwgIiAuCiAJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRjb21taXQsIGhhc2hfYmFzZT0+JGNvbW1pdCl9LCAidHJlZSIpIC4KIAkJICAgICAgIjxici8+XG4iIC4KLQkJICAgICAgIjwvZGl2PlxuIiAuCi0JCSAgICAgICI8aT4iIC4gZXNjX2h0bWwoJGNveydhdXRob3JfbmFtZSd9KSAuICAiIFskYWR7J3JmYzI4MjInfV08L2k+PGJyLz5cbiIgLgogCQkgICAgICAiPC9kaXY+XG4iOworCQkgICAgICBnaXRfcHJpbnRfYXV0aG9yc2hpcChcJWNvLCAtdGFnID0+ICdzcGFuJyk7CisJCSAgICAgIHByaW50ICI8YnIvPlxuPC9kaXY+XG4iOwogCiAJCXByaW50ICI8ZGl2IGNsYXNzPVwibG9nX2JvZHlcIj5cbiI7CiAJCWdpdF9wcmludF9sb2coJGNveydjb21tZW50J30sIC1maW5hbF9lbXB0eV9saW5lPT4gMSk7CkBAIC01MDY0LDggKzUyNjgsNiBAQAogCSRoYXNoIHx8PSAkaGFzaF9iYXNlIHx8ICJIRUFEIjsKIAlteSAlY28gPSBwYXJzZV9jb21taXQoJGhhc2gpCiAJICAgIG9yIGRpZV9lcnJvcig0MDQsICJVbmtub3duIGNvbW1pdCBvYmplY3QiKTsKLQlteSAlYWQgPSBwYXJzZV9kYXRlKCRjb3snYXV0aG9yX2Vwb2NoJ30sICRjb3snYXV0aG9yX3R6J30pOwotCW15ICVjZCA9IHBhcnNlX2RhdGUoJGNveydjb21taXR0ZXJfZXBvY2gnfSwgJGNveydjb21taXR0ZXJfdHonfSk7CiAKIAlteSAkcGFyZW50ICA9ICRjb3sncGFyZW50J307CiAJbXkgJHBhcmVudHMgPSAkY297J3BhcmVudHMnfTsgIyBsaXN0cmVmCkBAIC01MDk0LDYgKzUyOTYsMTEgQEAKIAkJCX0gQCRwYXJlbnRzICkgLgogCQkJJyknOwogCX0KKwlpZiAoZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3BhdGNoZXMnKSkgeworCQkkZm9ybWF0c19uYXYgLj0gIiB8ICIgLgorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJwYXRjaCIsIC1yZXBsYXk9PjEpfSwKKwkJCQkicGF0Y2giKTsKKwl9CiAKIAlpZiAoIWRlZmluZWQgJHBhcmVudCkgewogCQkkcGFyZW50ID0gIi0tcm9vdCI7CkBAIC01MTI3LDIyICs1MzM0LDcgQEAKIAl9CiAJcHJpbnQgIjxkaXYgY2xhc3M9XCJ0aXRsZV90ZXh0XCI+XG4iIC4KIAkgICAgICAiPHRhYmxlIGNsYXNzPVwib2JqZWN0X2hlYWRlclwiPlxuIjsKLQlwcmludCAiPHRyPjx0ZD5hdXRob3I8L3RkPjx0ZD4iIC4gZXNjX2h0bWwoJGNveydhdXRob3InfSkgLiAiPC90ZD48L3RyPlxuIi4KLQkgICAgICAiPHRyPiIgLgotCSAgICAgICI8dGQ+PC90ZD48dGQ+ICRhZHsncmZjMjgyMid9IjsKLQlpZiAoJGFkeydob3VyX2xvY2FsJ30gPCA2KSB7Ci0JCXByaW50ZigiICg8c3BhbiBjbGFzcz1cImF0bmlnaHRcIj4lMDJkOiUwMmQ8L3NwYW4+ICVzKSIsCi0JCSAgICAgICAkYWR7J2hvdXJfbG9jYWwnfSwgJGFkeydtaW51dGVfbG9jYWwnfSwgJGFkeyd0el9sb2NhbCd9KTsKLQl9IGVsc2UgewotCQlwcmludGYoIiAoJTAyZDolMDJkICVzKSIsCi0JCSAgICAgICAkYWR7J2hvdXJfbG9jYWwnfSwgJGFkeydtaW51dGVfbG9jYWwnfSwgJGFkeyd0el9sb2NhbCd9KTsKLQl9Ci0JcHJpbnQgIjwvdGQ+IiAuCi0JICAgICAgIjwvdHI+XG4iOwotCXByaW50ICI8dHI+PHRkPmNvbW1pdHRlcjwvdGQ+PHRkPiIgLiBlc2NfaHRtbCgkY297J2NvbW1pdHRlcid9KSAuICI8L3RkPjwvdHI+XG4iOwotCXByaW50ICI8dHI+PHRkPjwvdGQ+PHRkPiAkY2R7J3JmYzI4MjInfSIgLgotCSAgICAgIHNwcmludGYoIiAoJTAyZDolMDJkICVzKSIsICRjZHsnaG91cl9sb2NhbCd9LCAkY2R7J21pbnV0ZV9sb2NhbCd9LCAkY2R7J3R6X2xvY2FsJ30pIC4KLQkgICAgICAiPC90ZD48L3RyPlxuIjsKKwlnaXRfcHJpbnRfYXV0aG9yc2hpcF9yb3dzKFwlY28pOwogCXByaW50ICI8dHI+PHRkPmNvbW1pdDwvdGQ+PHRkIGNsYXNzPVwic2hhMVwiPiRjb3snaWQnfTwvdGQ+PC90cj5cbiI7CiAJcHJpbnQgIjx0cj4iIC4KIAkgICAgICAiPHRkPnRyZWU8L3RkPiIgLgpAQCAtNTM3MCw3ICs1NTYyLDE0IEBACiB9CiAKIHN1YiBnaXRfY29tbWl0ZGlmZiB7Ci0JbXkgJGZvcm1hdCA9IHNoaWZ0IHx8ICdodG1sJzsKKwlteSAlcGFyYW1zID0gQF87CisJbXkgJGZvcm1hdCA9ICRwYXJhbXN7LWZvcm1hdH0gfHwgJ2h0bWwnOworCisJbXkgKCRwYXRjaF9tYXgpID0gZ2l0d2ViX2dldF9mZWF0dXJlKCdwYXRjaGVzJyk7CisJaWYgKCRmb3JtYXQgZXEgJ3BhdGNoJykgeworCQlkaWVfZXJyb3IoNDAzLCAiUGF0Y2ggdmlldyBub3QgYWxsb3dlZCIpIHVubGVzcyAkcGF0Y2hfbWF4OworCX0KKwogCSRoYXNoIHx8PSAkaGFzaF9iYXNlIHx8ICJIRUFEIjsKIAlteSAlY28gPSBwYXJzZV9jb21taXQoJGhhc2gpCiAJICAgIG9yIGRpZV9lcnJvcig0MDQsICJVbmtub3duIGNvbW1pdCBvYmplY3QiKTsKQEAgLTUzODUsNiArNTU4NCwxMSBAQAogCQkkZm9ybWF0c19uYXYgPQogCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXRkaWZmX3BsYWluIiwgLXJlcGxheT0+MSl9LAogCQkJICAgICAgICAicmF3Iik7CisJCWlmICgkcGF0Y2hfbWF4KSB7CisJCQkkZm9ybWF0c19uYXYgLj0gIiB8ICIgLgorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4icGF0Y2giLCAtcmVwbGF5PT4xKX0sCisJCQkJCSJwYXRjaCIpOworCQl9CiAKIAkJaWYgKGRlZmluZWQgJGhhc2hfcGFyZW50ICYmCiAJCSAgICAkaGFzaF9wYXJlbnQgbmUgJy1jJyAmJiAkaGFzaF9wYXJlbnQgbmUgJy0tY2MnKSB7CkBAIC01NDY4LDcgKzU2NzIsMzEgQEAKIAkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgImRpZmYtdHJlZSIsICctcicsIEBkaWZmX29wdHMsCiAJCQknLXAnLCAkaGFzaF9wYXJlbnRfcGFyYW0sICRoYXNoLCAiLS0iCiAJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtZGlmZi10cmVlIGZhaWxlZCIpOwotCisJfSBlbHNpZiAoJGZvcm1hdCBlcSAncGF0Y2gnKSB7CisJCSMgRm9yIGNvbW1pdCByYW5nZXMsIHdlIGxpbWl0IHRoZSBvdXRwdXQgdG8gdGhlIG51bWJlciBvZgorCQkjIHBhdGNoZXMgc3BlY2lmaWVkIGluIHRoZSAncGF0Y2hlcycgZmVhdHVyZS4KKwkJIyBGb3Igc2luZ2xlIGNvbW1pdHMsIHdlIGxpbWl0IHRoZSBvdXRwdXQgdG8gYSBzaW5nbGUgcGF0Y2gsCisJCSMgZGl2ZXJnaW5nIGZyb20gdGhlIGdpdC1mb3JtYXQtcGF0Y2ggZGVmYXVsdC4KKwkJbXkgQGNvbW1pdF9zcGVjID0gKCk7CisJCWlmICgkaGFzaF9wYXJlbnQpIHsKKwkJCWlmICgkcGF0Y2hfbWF4ID4gMCkgeworCQkJCXB1c2ggQGNvbW1pdF9zcGVjLCAiLSRwYXRjaF9tYXgiOworCQkJfQorCQkJcHVzaCBAY29tbWl0X3NwZWMsICctbicsICIkaGFzaF9wYXJlbnQuLiRoYXNoIjsKKwkJfSBlbHNlIHsKKwkJCWlmICgkcGFyYW1zey1zaW5nbGV9KSB7CisJCQkJcHVzaCBAY29tbWl0X3NwZWMsICctMSc7CisJCQl9IGVsc2UgeworCQkJCWlmICgkcGF0Y2hfbWF4ID4gMCkgeworCQkJCQlwdXNoIEBjb21taXRfc3BlYywgIi0kcGF0Y2hfbWF4IjsKKwkJCQl9CisJCQkJcHVzaCBAY29tbWl0X3NwZWMsICItbiI7CisJCQl9CisJCQlwdXNoIEBjb21taXRfc3BlYywgJy0tcm9vdCcsICRoYXNoOworCQl9CisJCW9wZW4gJGZkLCAiLXwiLCBnaXRfY21kKCksICJmb3JtYXQtcGF0Y2giLCAnLS1lbmNvZGluZz11dGY4JywKKwkJCSctLXN0ZG91dCcsIEBjb21taXRfc3BlYworCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWZvcm1hdC1wYXRjaCBmYWlsZWQiKTsKIAl9IGVsc2UgewogCQlkaWVfZXJyb3IoNDAwLCAiVW5rbm93biBjb21taXRkaWZmIGZvcm1hdCIpOwogCX0KQEAgLTU0ODcsNyArNTcxNSwxMSBAQAogCQlnaXRfaGVhZGVyX2h0bWwodW5kZWYsICRleHBpcmVzKTsKIAkJZ2l0X3ByaW50X3BhZ2VfbmF2KCdjb21taXRkaWZmJywnJywgJGhhc2gsJGNveyd0cmVlJ30sJGhhc2gsICRmb3JtYXRzX25hdik7CiAJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gJHJlZiwgJGhhc2gpOwotCQlnaXRfcHJpbnRfYXV0aG9yc2hpcChcJWNvKTsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJ0aXRsZV90ZXh0XCI+XG4iIC4KKwkJICAgICAgIjx0YWJsZSBjbGFzcz1cIm9iamVjdF9oZWFkZXJcIj5cbiI7CisJCWdpdF9wcmludF9hdXRob3JzaGlwX3Jvd3MoXCVjbyk7CisJCXByaW50ICI8L3RhYmxlPiIuCisJCSAgICAgICI8L2Rpdj5cbiI7CiAJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9ib2R5XCI+XG4iOwogCQlpZiAoQHskY297J2NvbW1lbnQnfX0gPiAxKSB7CiAJCQlwcmludCAiPGRpdiBjbGFzcz1cImxvZ1wiPlxuIjsKQEAgLTU1MTcsNiArNTc0OSwxNCBAQAogCQkJcHJpbnQgdG9fdXRmOCgkbGluZSkgLiAiXG4iOwogCQl9CiAJCXByaW50ICItLS1cblxuIjsKKwl9IGVsc2lmICgkZm9ybWF0IGVxICdwYXRjaCcpIHsKKwkJbXkgJGZpbGVuYW1lID0gYmFzZW5hbWUoJHByb2plY3QpIC4gIi0kaGFzaC5wYXRjaCI7CisKKwkJcHJpbnQgJGNnaS0+aGVhZGVyKAorCQkJLXR5cGUgPT4gJ3RleHQvcGxhaW4nLAorCQkJLWNoYXJzZXQgPT4gJ3V0Zi04JywKKwkJCS1leHBpcmVzID0+ICRleHBpcmVzLAorCQkJLWNvbnRlbnRfZGlzcG9zaXRpb24gPT4gJ2lubGluZTsgZmlsZW5hbWU9IicgLiAiJGZpbGVuYW1lIiAuICciJyk7CiAJfQogCiAJIyB3cml0ZSBwYXRjaApAQCAtNTUzOCwxMSArNTc3OCwyNSBAQAogCQlwcmludCA8JGZkPjsKIAkJY2xvc2UgJGZkCiAJCQlvciBwcmludCAiUmVhZGluZyBnaXQtZGlmZi10cmVlIGZhaWxlZFxuIjsKKwl9IGVsc2lmICgkZm9ybWF0IGVxICdwYXRjaCcpIHsKKwkJbG9jYWwgJC8gPSB1bmRlZjsKKwkJcHJpbnQgPCRmZD47CisJCWNsb3NlICRmZAorCQkJb3IgcHJpbnQgIlJlYWRpbmcgZ2l0LWZvcm1hdC1wYXRjaCBmYWlsZWRcbiI7CiAJfQogfQogCiBzdWIgZ2l0X2NvbW1pdGRpZmZfcGxhaW4gewotCWdpdF9jb21taXRkaWZmKCdwbGFpbicpOworCWdpdF9jb21taXRkaWZmKC1mb3JtYXQgPT4gJ3BsYWluJyk7Cit9CisKKyMgZm9ybWF0LXBhdGNoLXN0eWxlIHBhdGNoZXMKK3N1YiBnaXRfcGF0Y2ggeworCWdpdF9jb21taXRkaWZmKC1mb3JtYXQgPT4gJ3BhdGNoJywgLXNpbmdsZT0+IDEpOworfQorCitzdWIgZ2l0X3BhdGNoZXMgeworCWdpdF9jb21taXRkaWZmKC1mb3JtYXQgPT4gJ3BhdGNoJyk7CiB9CiAKIHN1YiBnaXRfaGlzdG9yeSB7CkBAIC01Njk0LDcgKzU5NDgsNyBAQAogCiAJCXByaW50ICI8dGFibGUgY2xhc3M9XCJwaWNrYXhlIHNlYXJjaFwiPlxuIjsKIAkJbXkgJGFsdGVybmF0ZSA9IDE7Ci0JCSQvID0gIlxuIjsKKwkJbG9jYWwgJC8gPSAiXG4iOwogCQlvcGVuIG15ICRmZCwgJy18JywgZ2l0X2NtZCgpLCAnLS1uby1wYWdlcicsICdsb2cnLCBAZGlmZl9vcHRzLAogCQkJJy0tcHJldHR5PWZvcm1hdDolSCcsICctLW5vLWFiYnJldicsICctLXJhdycsICItUyRzZWFyY2h0ZXh0IiwKIAkJCSgkc2VhcmNoX3VzZV9yZWdleHAgPyAnLS1waWNrYXhlLXJlZ2V4JyA6ICgpKTsKQEAgLTU3NjQsNyArNjAxOCw3IEBACiAJCXByaW50ICI8dGFibGUgY2xhc3M9XCJncmVwX3NlYXJjaFwiPlxuIjsKIAkJbXkgJGFsdGVybmF0ZSA9IDE7CiAJCW15ICRtYXRjaGVzID0gMDsKLQkJJC8gPSAiXG4iOworCQlsb2NhbCAkLyA9ICJcbiI7CiAJCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICdncmVwJywgJy1uJywKIAkJCSRzZWFyY2hfdXNlX3JlZ2V4cCA/ICgnLUUnLCAnLWknKSA6ICctRicsCiAJCQkkc2VhcmNodGV4dCwgJGNveyd0cmVlJ307CkBAIC01ODk1LDYgKzYxNDksMTQgQEAKIAkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwgcGFnZT0+JHBhZ2UrMSksCiAJCQkgICAgICAgICAtYWNjZXNza2V5ID0+ICJuIiwgLXRpdGxlID0+ICJBbHQtbiJ9LCAibmV4dCIpOwogCX0KKwlteSAkcGF0Y2hfbWF4ID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3BhdGNoZXMnKTsKKwlpZiAoJHBhdGNoX21heCkgeworCQlpZiAoJHBhdGNoX21heCA8IDAgfHwgQGNvbW1pdGxpc3QgPD0gJHBhdGNoX21heCkgeworCQkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgIiAuCisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJwYXRjaGVzIiwgLXJlcGxheT0+MSl9LAorCQkJCQkicGF0Y2hlcyIpOworCQl9CisJfQogCiAJZ2l0X2hlYWRlcl9odG1sKCk7CiAJZ2l0X3ByaW50X3BhZ2VfbmF2KCdzaG9ydGxvZycsJycsICRoYXNoLCRoYXNoLCRoYXNoLCAkcGFnaW5nX25hdik7CkBAIC01OTMyLDcgKzYxOTQsMjUgQEAKIAl9CiAJaWYgKGRlZmluZWQoJGNvbW1pdGxpc3RbMF0pKSB7CiAJCSVsYXRlc3RfY29tbWl0ID0gJXskY29tbWl0bGlzdFswXX07Ci0JCSVsYXRlc3RfZGF0ZSAgID0gcGFyc2VfZGF0ZSgkbGF0ZXN0X2NvbW1pdHsnYXV0aG9yX2Vwb2NoJ30pOworCQlteSAkbGF0ZXN0X2Vwb2NoID0gJGxhdGVzdF9jb21taXR7J2NvbW1pdHRlcl9lcG9jaCd9OworCQklbGF0ZXN0X2RhdGUgICA9IHBhcnNlX2RhdGUoJGxhdGVzdF9lcG9jaCk7CisJCW15ICRpZl9tb2RpZmllZCA9ICRjZ2ktPmh0dHAoJ0lGX01PRElGSUVEX1NJTkNFJyk7CisJCWlmIChkZWZpbmVkICRpZl9tb2RpZmllZCkgeworCQkJbXkgJHNpbmNlOworCQkJaWYgKGV2YWwgeyByZXF1aXJlIEhUVFA6OkRhdGU7IDE7IH0pIHsKKwkJCQkkc2luY2UgPSBIVFRQOjpEYXRlOjpzdHIydGltZSgkaWZfbW9kaWZpZWQpOworCQkJfSBlbHNpZiAoZXZhbCB7IHJlcXVpcmUgVGltZTo6UGFyc2VEYXRlOyAxOyB9KSB7CisJCQkJJHNpbmNlID0gVGltZTo6UGFyc2VEYXRlOjpwYXJzZWRhdGUoJGlmX21vZGlmaWVkLCBHTVQgPT4gMSk7CisJCQl9CisJCQlpZiAoZGVmaW5lZCAkc2luY2UgJiYgJGxhdGVzdF9lcG9jaCA8PSAkc2luY2UpIHsKKwkJCQlwcmludCAkY2dpLT5oZWFkZXIoCisJCQkJCS10eXBlID0+ICRjb250ZW50X3R5cGUsCisJCQkJCS1jaGFyc2V0ID0+ICd1dGYtOCcsCisJCQkJCS1sYXN0X21vZGlmaWVkID0+ICRsYXRlc3RfZGF0ZXsncmZjMjgyMid9LAorCQkJCQktc3RhdHVzID0+ICczMDQgTm90IE1vZGlmaWVkJyk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CiAJCXByaW50ICRjZ2ktPmhlYWRlcigKIAkJCS10eXBlID0+ICRjb250ZW50X3R5cGUsCiAJCQktY2hhcnNldCA9PiAndXRmLTgnLApAQCAtNTk5MSw3ICs2MjcxLDI0IEBACiAJCXByaW50ICI8dGl0bGU+JHRpdGxlPC90aXRsZT5cbiIgLgogCQkgICAgICAiPGxpbms+JGFsdF91cmw8L2xpbms+XG4iIC4KIAkJICAgICAgIjxkZXNjcmlwdGlvbj4kZGVzY3I8L2Rlc2NyaXB0aW9uPlxuIiAuCi0JCSAgICAgICI8bGFuZ3VhZ2U+ZW48L2xhbmd1YWdlPlxuIjsKKwkJICAgICAgIjxsYW5ndWFnZT5lbjwvbGFuZ3VhZ2U+XG4iIC4KKwkJICAgICAgIyBwcm9qZWN0IG93bmVyIGlzIHJlc3BvbnNpYmxlIGZvciAnZWRpdG9yaWFsJyBjb250ZW50CisJCSAgICAgICI8bWFuYWdpbmdFZGl0b3I+JG93bmVyPC9tYW5hZ2luZ0VkaXRvcj5cbiI7CisJCWlmIChkZWZpbmVkICRsb2dvIHx8IGRlZmluZWQgJGZhdmljb24pIHsKKwkJCSMgcHJlZmVyIHRoZSBsb2dvIHRvIHRoZSBmYXZpY29uLCBzaW5jZSBSU1MKKwkJCSMgZG9lc24ndCBhbGxvdyBib3RoCisJCQlteSAkaW1nID0gZXNjX3VybCgkbG9nbyB8fCAkZmF2aWNvbik7CisJCQlwcmludCAiPGltYWdlPlxuIiAuCisJCQkgICAgICAiPHVybD4kaW1nPC91cmw+XG4iIC4KKwkJCSAgICAgICI8dGl0bGU+JHRpdGxlPC90aXRsZT5cbiIgLgorCQkJICAgICAgIjxsaW5rPiRhbHRfdXJsPC9saW5rPlxuIiAuCisJCQkgICAgICAiPC9pbWFnZT5cbiI7CisJCX0KKwkJaWYgKCVsYXRlc3RfZGF0ZSkgeworCQkJcHJpbnQgIjxwdWJEYXRlPiRsYXRlc3RfZGF0ZXsncmZjMjgyMid9PC9wdWJEYXRlPlxuIjsKKwkJCXByaW50ICI8bGFzdEJ1aWxkRGF0ZT4kbGF0ZXN0X2RhdGV7J3JmYzI4MjInfTwvbGFzdEJ1aWxkRGF0ZT5cbiI7CisJCX0KKwkJcHJpbnQgIjxnZW5lcmF0b3I+Z2l0d2ViIHYuJHZlcnNpb24vJGdpdF92ZXJzaW9uPC9nZW5lcmF0b3I+XG4iOwogCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ2F0b20nKSB7CiAJCXByaW50IDw8WE1MOwogPGZlZWQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSI+CkBAIC02MDE4LDYgKzYzMTUsNyBAQAogCQl9IGVsc2UgewogCQkJcHJpbnQgIjx1cGRhdGVkPiRsYXRlc3RfZGF0ZXsnaXNvLTg2MDEnfTwvdXBkYXRlZD5cbiI7CiAJCX0KKwkJcHJpbnQgIjxnZW5lcmF0b3IgdmVyc2lvbj0nJHZlcnNpb24vJGdpdF92ZXJzaW9uJz5naXR3ZWI8L2dlbmVyYXRvcj5cbiI7CiAJfQogCiAJIyBjb250ZW50cwpAQCAtNjEyMyw3ICs2NDIxLDcgQEAKIAkjIGVuZCBvZiBmZWVkCiAJaWYgKCRmb3JtYXQgZXEgJ3JzcycpIHsKIAkJcHJpbnQgIjwvY2hhbm5lbD5cbjwvcnNzPlxuIjsKLQl9CWVsc2lmICgkZm9ybWF0IGVxICdhdG9tJykgeworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ2F0b20nKSB7CiAJCXByaW50ICI8L2ZlZWQ+XG4iOwogCX0KIH0KQEAgLTYxMzksNyArNjQzNywxMSBAQAogc3ViIGdpdF9vcG1sIHsKIAlteSBAbGlzdCA9IGdpdF9nZXRfcHJvamVjdHNfbGlzdCgpOwogCi0JcHJpbnQgJGNnaS0+aGVhZGVyKC10eXBlID0+ICd0ZXh0L3htbCcsIC1jaGFyc2V0ID0+ICd1dGYtOCcpOworCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJLXR5cGUgPT4gJ3RleHQveG1sJywKKwkJLWNoYXJzZXQgPT4gJ3V0Zi04JywKKwkJLWNvbnRlbnRfZGlzcG9zaXRpb24gPT4gJ2lubGluZTsgZmlsZW5hbWU9Im9wbWwueG1sIicpOworCiAJcHJpbnQgPDxYTUw7CiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPG9wbWwgdmVyc2lvbj0iMS4wIj4KQEAgLTYxNjMsOCArNjQ2NSw4IEBACiAJCX0KIAogCQlteSAkcGF0aCA9IGVzY19odG1sKGNob3Bfc3RyKCRwcm9qeydwYXRoJ30sIDI1LCA1KSk7Ci0JCW15ICRyc3MgID0gIiRteV91cmw/cD0kcHJvansncGF0aCd9O2E9cnNzIjsKLQkJbXkgJGh0bWwgPSAiJG15X3VybD9wPSRwcm9qeydwYXRoJ307YT1zdW1tYXJ5IjsKKwkJbXkgJHJzcyAgPSBocmVmKCdwcm9qZWN0JyA9PiAkcHJvansncGF0aCd9LCAnYWN0aW9uJyA9PiAncnNzJywgLWZ1bGwgPT4gMSk7CisJCW15ICRodG1sID0gaHJlZigncHJvamVjdCcgPT4gJHByb2p7J3BhdGgnfSwgJ2FjdGlvbicgPT4gJ3N1bW1hcnknLCAtZnVsbCA9PiAxKTsKIAkJcHJpbnQgIjxvdXRsaW5lIHR5cGU9XCJyc3NcIiB0ZXh0PVwiJHBhdGhcIiB0aXRsZT1cIiRwYXRoXCIgeG1sVXJsPVwiJHJzc1wiIGh0bWxVcmw9XCIkaHRtbFwiLz5cbiI7CiAJfQogCXByaW50IDw8WE1MOwpkaWZmIC0tZ2l0IGEvZ3JhcGguYyBiL2dyYXBoLmMKaW5kZXggMTYyYTUxNi4uZTQ2Njc3MCAxMDA2NDQKLS0tIGEvZ3JhcGguYworKysgYi9ncmFwaC5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiY29sb3IuaCIKICNpbmNsdWRlICJncmFwaC5oIgogI2luY2x1ZGUgImRpZmYuaCIKICNpbmNsdWRlICJyZXZpc2lvbi5oIgpAQCAtMzQsNyArMzUsNyBAQAogICogbmV3bGluZS4gIEEgbmV3IGdyYXBoIGxpbmUgd2lsbCBub3QgYmUgcHJpbnRlZCBhZnRlciB0aGUgZmluYWwgbmV3bGluZS4KICAqIElmIHRoZSBzdHJidWYgaXMgZW1wdHksIG5vIG91dHB1dCB3aWxsIGJlIHByaW50ZWQuCiAgKgotICogU2luY2UgdGhlIGZpcnN0IGxpbmUgd2lsbCBub3QgaW5jbHVkZSB0aGUgZ3JhcGggb3VwdXQsIHRoZSBjYWxsZXIgaXMKKyAqIFNpbmNlIHRoZSBmaXJzdCBsaW5lIHdpbGwgbm90IGluY2x1ZGUgdGhlIGdyYXBoIG91dHB1dCwgdGhlIGNhbGxlciBpcwogICogcmVzcG9uc2libGUgZm9yIHByaW50aW5nIHRoaXMgbGluZSdzIGdyYXBoIChwZXJoYXBzIHZpYQogICogZ3JhcGhfc2hvd19jb21taXQoKSBvciBncmFwaF9zaG93X29uZWxpbmUoKSkgYmVmb3JlIGNhbGxpbmcKICAqIGdyYXBoX3Nob3dfc3RyYnVmKCkuCkBAIC00MywyNyArNDQsOSBAQAogCiAvKgogICogVE9ETzoKLSAqIC0gQWRkIGNvbG9ycyB0byB0aGUgZ3JhcGguCi0gKiAgIFBpY2sgYSBjb2xvciBmb3IgZWFjaCBjb2x1bW4sIGFuZCBwcmludCBhbGwgY2hhcmFjdGVycwotICogICBpbiB0aGF0IGNvbHVtbiB3aXRoIHRoZSBzcGVjaWZpZWQgY29sb3IuCi0gKgogICogLSBMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMsIHNpbWlsYXIgdG8gdGhlIHdheSBnaXRrIGRvZXMuCiAgKiAgIElmIHdlIHJlYWNoIG1vcmUgdGhhbiBhIHNwZWNpZmllZCBudW1iZXIgb2YgY29sdW1ucywgb21pdAogICogICBzZWN0aW9ucyBvZiBzb21lIGNvbHVtbnMuCi0gKgotICogLSBUaGUgb3V0cHV0IGR1cmluZyB0aGUgR1JBUEhfUFJFX0NPTU1JVCBhbmQgR1JBUEhfQ09MTEFQU0lORyBzdGF0ZXMKLSAqICAgY291bGQgYmUgbWFkZSBtb3JlIGNvbXBhY3QgYnkgcHJpbnRpbmcgaG9yaXpvbnRhbCBsaW5lcywgaW5zdGVhZCBvZgotICogICBsb25nIGRpYWdvbmFsIGxpbmVzLiAgRm9yIGV4YW1wbGUsIGR1cmluZyBjb2xsYXBzaW5nLCBzb21ldGhpbmcgbGlrZQotICogICB0aGlzOiAgICAgICAgICBpbnN0ZWFkIG9mIHRoaXM6Ci0gKiAgIHwgfCB8IHwgfCAgICAgIHwgfCB8IHwgfAotICogICB8IHxffF98LyAgICAgICB8IHwgfCB8LwotICogICB8L3wgfCB8ICAgICAgICB8IHwgfC98Ci0gKiAgIHwgfCB8IHwgICAgICAgIHwgfC98IHwKLSAqICAgICAgICAgICAgICAgICAgfC98IHwgfAotICogICAgICAgICAgICAgICAgICB8IHwgfCB8Ci0gKgotICogICBJZiB0aGVyZSBhcmUgc2V2ZXJhbCBwYXJhbGxlbCBkaWFnb25hbCBsaW5lcywgdGhleSB3aWxsIG5lZWQgdG8gYmUKLSAqICAgcmVwbGFjZWQgd2l0aCBob3Jpem9udGFsIGxpbmVzIG9uIHN1YnNlcXVlbnQgcm93cy4KICAqLwogCiBzdHJ1Y3QgY29sdW1uIHsKQEAgLTcyLDkgKzU1LDEwIEBACiAJICovCiAJc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCS8qCi0JICogWFhYOiBPbmNlIHdlIGFkZCBzdXBwb3J0IGZvciBjb2xvcnMsIHN0cnVjdCBjb2x1bW4gY291bGQgYWxzbwotCSAqIGNvbnRhaW4gdGhlIGNvbG9yIG9mIGl0cyBicmFuY2ggbGluZS4KKwkgKiBUaGUgY29sb3IgdG8gKG9wdGlvbmFsbHkpIHByaW50IHRoaXMgY29sdW1uIGluLiAgVGhpcyBpcyBhbgorCSAqIGluZGV4IGludG8gY29sdW1uX2NvbG9ycy4KIAkgKi8KKwl1bnNpZ25lZCBzaG9ydCBjb2xvcjsKIH07CiAKIGVudW0gZ3JhcGhfc3RhdGUgewpAQCAtODYsNiArNzAsNDEgQEAKIAlHUkFQSF9DT0xMQVBTSU5HCiB9OwogCisvKgorICogVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbHVtbiBjb2xvcnMuCisgKi8KK3N0YXRpYyBjaGFyIGNvbHVtbl9jb2xvcnNbXVtDT0xPUl9NQVhMRU5dID0geworCUdJVF9DT0xPUl9SRUQsCisJR0lUX0NPTE9SX0dSRUVOLAorCUdJVF9DT0xPUl9ZRUxMT1csCisJR0lUX0NPTE9SX0JMVUUsCisJR0lUX0NPTE9SX01BR0VOVEEsCisJR0lUX0NPTE9SX0NZQU4sCisJR0lUX0NPTE9SX0JPTEQgR0lUX0NPTE9SX1JFRCwKKwlHSVRfQ09MT1JfQk9MRCBHSVRfQ09MT1JfR1JFRU4sCisJR0lUX0NPTE9SX0JPTEQgR0lUX0NPTE9SX1lFTExPVywKKwlHSVRfQ09MT1JfQk9MRCBHSVRfQ09MT1JfQkxVRSwKKwlHSVRfQ09MT1JfQk9MRCBHSVRfQ09MT1JfTUFHRU5UQSwKKwlHSVRfQ09MT1JfQk9MRCBHSVRfQ09MT1JfQ1lBTiwKK307CisKKyNkZWZpbmUgQ09MVU1OX0NPTE9SU19NQVggKEFSUkFZX1NJWkUoY29sdW1uX2NvbG9ycykpCisKK3N0YXRpYyBjb25zdCBjaGFyICpjb2x1bW5fZ2V0X2NvbG9yX2NvZGUoY29uc3Qgc3RydWN0IGNvbHVtbiAqYykKK3sKKwlyZXR1cm4gY29sdW1uX2NvbG9yc1tjLT5jb2xvcl07Cit9CisKK3N0YXRpYyB2b2lkIHN0cmJ1Zl93cml0ZV9jb2x1bW4oc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBjb2x1bW4gKmMsCisJCQkJY2hhciBjb2xfY2hhcikKK3sKKwlpZiAoYy0+Y29sb3IgPCBDT0xVTU5fQ09MT1JTX01BWCkKKwkJc3RyYnVmX2FkZHN0cihzYiwgY29sdW1uX2dldF9jb2xvcl9jb2RlKGMpKTsKKwlzdHJidWZfYWRkY2goc2IsIGNvbF9jaGFyKTsKKwlpZiAoYy0+Y29sb3IgPCBDT0xVTU5fQ09MT1JTX01BWCkKKwkJc3RyYnVmX2FkZHN0cihzYiwgR0lUX0NPTE9SX1JFU0VUKTsKK30KKwogc3RydWN0IGdpdF9ncmFwaCB7CiAJLyoKIAkgKiBUaGUgY29tbWl0IGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQKQEAgLTE4NSw2ICsyMDQsMTEgQEAKIAkgKiB0ZW1wb3JhcnkgYXJyYXkgZWFjaCB0aW1lIHdlIGhhdmUgdG8gb3V0cHV0IGEgY29sbGFwc2luZyBsaW5lLgogCSAqLwogCWludCAqbmV3X21hcHBpbmc7CisJLyoKKwkgKiBUaGUgY3VycmVudCBkZWZhdWx0IGNvbHVtbiBjb2xvciBiZWluZyB1c2VkLiAgVGhpcyBpcworCSAqIHN0b3JlZCBhcyBhbiBpbmRleCBpbnRvIHRoZSBhcnJheSBjb2x1bW5fY29sb3JzLgorCSAqLworCXVuc2lnbmVkIHNob3J0IGRlZmF1bHRfY29sdW1uX2NvbG9yOwogfTsKIAogc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGhfaW5pdChzdHJ1Y3QgcmV2X2luZm8gKm9wdCkKQEAgLTIwMSw2ICsyMjUsNyBAQAogCWdyYXBoLT5udW1fY29sdW1ucyA9IDA7CiAJZ3JhcGgtPm51bV9uZXdfY29sdW1ucyA9IDA7CiAJZ3JhcGgtPm1hcHBpbmdfc2l6ZSA9IDA7CisJZ3JhcGgtPmRlZmF1bHRfY29sdW1uX2NvbG9yID0gMDsKIAogCS8qCiAJICogQWxsb2NhdGUgYSByZWFzb25hYmx5IGxhcmdlIGRlZmF1bHQgbnVtYmVyIG9mIGNvbHVtbnMKQEAgLTMxMiw2ICszMzcsMzMgQEAKIAlyZXR1cm4gbmV4dF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgsIHBhcmVudHMpOwogfQogCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ3JhcGhfZ2V0X2N1cnJlbnRfY29sdW1uX2NvbG9yKGNvbnN0IHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCWlmICghRElGRl9PUFRfVFNUKCZncmFwaC0+cmV2cy0+ZGlmZm9wdCwgQ09MT1JfRElGRikpCisJCXJldHVybiBDT0xVTU5fQ09MT1JTX01BWDsKKwlyZXR1cm4gZ3JhcGgtPmRlZmF1bHRfY29sdW1uX2NvbG9yOworfQorCisvKgorICogVXBkYXRlIHRoZSBncmFwaCdzIGRlZmF1bHQgY29sdW1uIGNvbG9yLgorICovCitzdGF0aWMgdm9pZCBncmFwaF9pbmNyZW1lbnRfY29sdW1uX2NvbG9yKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCWdyYXBoLT5kZWZhdWx0X2NvbHVtbl9jb2xvciA9IChncmFwaC0+ZGVmYXVsdF9jb2x1bW5fY29sb3IgKyAxKSAlCisJCUNPTFVNTl9DT0xPUlNfTUFYOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ3JhcGhfZmluZF9jb21taXRfY29sb3IoY29uc3Qgc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKKwkJaWYgKGdyYXBoLT5jb2x1bW5zW2ldLmNvbW1pdCA9PSBjb21taXQpCisJCQlyZXR1cm4gZ3JhcGgtPmNvbHVtbnNbaV0uY29sb3I7CisJfQorCXJldHVybiBncmFwaF9nZXRfY3VycmVudF9jb2x1bW5fY29sb3IoZ3JhcGgpOworfQorCiBzdGF0aWMgdm9pZCBncmFwaF9pbnNlcnRfaW50b19uZXdfY29sdW1ucyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKIAkJCQkJICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCiAJCQkJCSAgaW50ICptYXBwaW5nX2luZGV4KQpAQCAtMzM0LDYgKzM4Niw3IEBACiAJICogVGhpcyBjb21taXQgaXNuJ3QgYWxyZWFkeSBpbiBuZXdfY29sdW1ucy4gIEFkZCBpdC4KIAkgKi8KIAlncmFwaC0+bmV3X2NvbHVtbnNbZ3JhcGgtPm51bV9uZXdfY29sdW1uc10uY29tbWl0ID0gY29tbWl0OworCWdyYXBoLT5uZXdfY29sdW1uc1tncmFwaC0+bnVtX25ld19jb2x1bW5zXS5jb2xvciA9IGdyYXBoX2ZpbmRfY29tbWl0X2NvbG9yKGdyYXBoLCBjb21taXQpOwogCWdyYXBoLT5tYXBwaW5nWyptYXBwaW5nX2luZGV4XSA9IGdyYXBoLT5udW1fbmV3X2NvbHVtbnM7CiAJKm1hcHBpbmdfaW5kZXggKz0gMjsKIAlncmFwaC0+bnVtX25ld19jb2x1bW5zKys7CkBAIC00NDUsNiArNDk4LDEyIEBACiAJCQlmb3IgKHBhcmVudCA9IGZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCk7CiAJCQkgICAgIHBhcmVudDsKIAkJCSAgICAgcGFyZW50ID0gbmV4dF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgsIHBhcmVudCkpIHsKKwkJCQkvKgorCQkJCSAqIElmIHRoaXMgaXMgYSBtZXJnZSBpbmNyZW1lbnQgdGhlIGN1cnJlbnQKKwkJCQkgKiBjb2xvci4KKwkJCQkgKi8KKwkJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMSkKKwkJCQkJZ3JhcGhfaW5jcmVtZW50X2NvbHVtbl9jb2xvcihncmFwaCk7CiAJCQkJZ3JhcGhfaW5zZXJ0X2ludG9fbmV3X2NvbHVtbnMoZ3JhcGgsCiAJCQkJCQkJICAgICAgcGFyZW50LT5pdGVtLAogCQkJCQkJCSAgICAgICZtYXBwaW5nX2lkeCk7CkBAIC01NjAsNyArNjE5LDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgZ3JhcGhfcGFkX2hvcml6b250YWxseShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCitzdGF0aWMgdm9pZCBncmFwaF9wYWRfaG9yaXpvbnRhbGx5KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCQkgICBpbnQgY2hhcnNfd3JpdHRlbikKIHsKIAkvKgogCSAqIEFkZCBhZGRpdGlvbmFsIHNwYWNlcyB0byB0aGUgZW5kIG9mIHRoZSBzdHJidWYsIHNvIHRoYXQgYWxsCkBAIC01NzAsMTAgKzYzMCwxMCBAQAogCSAqIGFsaWduZWQgZm9yIHRoZSBlbnRpcmUgY29tbWl0LgogCSAqLwogCWludCBleHRyYTsKLQlpZiAoc2ItPmxlbiA+PSBncmFwaC0+d2lkdGgpCisJaWYgKGNoYXJzX3dyaXR0ZW4gPj0gZ3JhcGgtPndpZHRoKQogCQlyZXR1cm47CiAKLQlleHRyYSA9IGdyYXBoLT53aWR0aCAtIHNiLT5sZW47CisJZXh0cmEgPSBncmFwaC0+d2lkdGggLSBjaGFyc193cml0dGVuOwogCXN0cmJ1Zl9hZGRmKHNiLCAiJSpzIiwgKGludCkgZXh0cmEsICIiKTsKIH0KIApAQCAtNTk2LDEwICs2NTYsMTEgQEAKIAkgKiBPdXRwdXQgYSBwYWRkaW5nIHJvdywgdGhhdCBsZWF2ZXMgYWxsIGJyYW5jaCBsaW5lcyB1bmNoYW5nZWQKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9uZXdfY29sdW1uczsgaSsrKSB7Ci0JCXN0cmJ1Zl9hZGRzdHIoc2IsICJ8ICIpOworCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW2ldLCAnfCcpOworCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CiAJfQogCi0JZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IpOworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBncmFwaC0+bnVtX25ld19jb2x1bW5zICogMik7CiB9CiAKIHN0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9za2lwX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQpAQCAtNjA5LDcgKzY3MCw3IEBACiAJICogb2YgdGhlIGdyYXBoIGlzIG1pc3NpbmcuCiAJICovCiAJc3RyYnVmX2FkZHN0cihzYiwgIi4uLiIpOwotCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiKTsKKwlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgMyk7CiAKIAlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID49IDMgJiYKIAkgICAgZ3JhcGgtPmNvbW1pdF9pbmRleCA8IChncmFwaC0+bnVtX2NvbHVtbnMgLSAxKSkKQEAgLTYyMyw2ICs2ODQsNyBAQAogewogCWludCBudW1fZXhwYW5zaW9uX3Jvd3M7CiAJaW50IGksIHNlZW5fdGhpczsKKwlpbnQgY2hhcnNfd3JpdHRlbjsKIAogCS8qCiAJICogVGhpcyBmdW5jdGlvbiBmb3JtYXRzIGEgcm93IHRoYXQgaW5jcmVhc2VzIHRoZSBzcGFjZSBhcm91bmQgYSBjb21taXQKQEAgLTY0NSwxMSArNzA3LDE0IEBACiAJICogT3V0cHV0IHRoZSByb3cKIAkgKi8KIAlzZWVuX3RoaXMgPSAwOworCWNoYXJzX3dyaXR0ZW4gPSAwOwogCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgewogCQlzdHJ1Y3QgY29sdW1uICpjb2wgPSAmZ3JhcGgtPmNvbHVtbnNbaV07CiAJCWlmIChjb2wtPmNvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CiAJCQlzZWVuX3RoaXMgPSAxOwotCQkJc3RyYnVmX2FkZGYoc2IsICJ8ICUqcyIsIGdyYXBoLT5leHBhbnNpb25fcm93LCAiIik7CisJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7CisJCQlzdHJidWZfYWRkZihzYiwgIiUqcyIsIGdyYXBoLT5leHBhbnNpb25fcm93LCAiIik7CisJCQljaGFyc193cml0dGVuICs9IDEgKyBncmFwaC0+ZXhwYW5zaW9uX3JvdzsKIAkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5leHBhbnNpb25fcm93ID09IDApKSB7CiAJCQkvKgogCQkJICogVGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgcHJlLWNvbW1pdCBvdXRwdXQuCkBAIC02NjIsMTcgKzcyNywyMiBAQAogCQkJICovCiAJCQlpZiAoZ3JhcGgtPnByZXZfc3RhdGUgPT0gR1JBUEhfUE9TVF9NRVJHRSAmJgogCQkJICAgIGdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA8IGkpCi0JCQkJc3RyYnVmX2FkZHN0cihzYiwgIlxcICIpOworCQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ1xcJyk7CiAJCQllbHNlCi0JCQkJc3RyYnVmX2FkZHN0cihzYiwgInwgIik7CisJCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOworCQkJY2hhcnNfd3JpdHRlbisrOwogCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPiAwKSkgewotCQkJc3RyYnVmX2FkZHN0cihzYiwgIlxcICIpOworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnXFwnKTsKKwkJCWNoYXJzX3dyaXR0ZW4rKzsKIAkJfSBlbHNlIHsKLQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJ8ICIpOworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOworCQkJY2hhcnNfd3JpdHRlbisrOwogCQl9CisJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJY2hhcnNfd3JpdHRlbisrOwogCX0KIAotCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiKTsKKwlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgY2hhcnNfd3JpdHRlbik7CiAKIAkvKgogCSAqIEluY3JlbWVudCBncmFwaC0+ZXhwYW5zaW9uX3JvdywKQEAgLTcxNCwxMCArNzg0LDM0IEBACiAJc3RyYnVmX2FkZGNoKHNiLCAnKicpOwogfQogCisvKgorICogRHJhdyBhbiBvY3RvcHVzIG1lcmdlIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4uCisgKi8KK3N0YXRpYyBpbnQgZ3JhcGhfZHJhd19vY3RvcHVzX21lcmdlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwkvKgorCSAqIEhlcmUgZGFzaGxlc3NfY29tbWl0cyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgcGFyZW50cworCSAqIHdoaWNoIGRvbid0IG5lZWQgdG8gaGF2ZSBkYXNoZXMgKGJlY2F1c2UgdGhlaXIgZWRnZXMgZml0CisJICogbmVhdGx5IHVuZGVyIHRoZSBjb21taXQpLgorCSAqLworCWNvbnN0IGludCBkYXNobGVzc19jb21taXRzID0gMjsKKwlpbnQgY29sX251bSwgaTsKKwlpbnQgbnVtX2Rhc2hlcyA9CisJCSgoZ3JhcGgtPm51bV9wYXJlbnRzIC0gZGFzaGxlc3NfY29tbWl0cykgKiAyKSAtIDE7CisJZm9yIChpID0gMDsgaSA8IG51bV9kYXNoZXM7IGkrKykgeworCQljb2xfbnVtID0gKGkgLyAyKSArIGRhc2hsZXNzX2NvbW1pdHM7CisJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsICZncmFwaC0+bmV3X2NvbHVtbnNbY29sX251bV0sICctJyk7CisJfQorCWNvbF9udW0gPSAoaSAvIDIpICsgZGFzaGxlc3NfY29tbWl0czsKKwlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW2NvbF9udW1dLCAnLicpOworCXJldHVybiBudW1fZGFzaGVzICsgMTsKK30KKwogc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X2NvbW1pdF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKIHsKIAlpbnQgc2Vlbl90aGlzID0gMDsKLQlpbnQgaSwgajsKKwlpbnQgaSwgY2hhcnNfd3JpdHRlbjsKIAogCS8qCiAJICogT3V0cHV0IHRoZSByb3cgY29udGFpbmluZyB0aGlzIGNvbW1pdApAQCAtNzI3LDcgKzgyMSw5IEBACiAJICogY2hpbGRyZW4gdGhhdCB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkLikKIAkgKi8KIAlzZWVuX3RoaXMgPSAwOworCWNoYXJzX3dyaXR0ZW4gPSAwOwogCWZvciAoaSA9IDA7IGkgPD0gZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKKwkJc3RydWN0IGNvbHVtbiAqY29sID0gJmdyYXBoLT5jb2x1bW5zW2ldOwogCQlzdHJ1Y3QgY29tbWl0ICpjb2xfY29tbWl0OwogCQlpZiAoaSA9PSBncmFwaC0+bnVtX2NvbHVtbnMpIHsKIAkJCWlmIChzZWVuX3RoaXMpCkBAIC03NDAsMTggKzgzNiwxNCBAQAogCQlpZiAoY29sX2NvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CiAJCQlzZWVuX3RoaXMgPSAxOwogCQkJZ3JhcGhfb3V0cHV0X2NvbW1pdF9jaGFyKGdyYXBoLCBzYik7CisJCQljaGFyc193cml0dGVuKys7CiAKLQkJCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPCAzKQotCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKLQkJCWVsc2UgewotCQkJCWludCBudW1fZGFzaGVzID0KLQkJCQkJKChncmFwaC0+bnVtX3BhcmVudHMgLSAyKSAqIDIpIC0gMTsKLQkJCQlmb3IgKGogPSAwOyBqIDwgbnVtX2Rhc2hlczsgaisrKQotCQkJCQlzdHJidWZfYWRkY2goc2IsICctJyk7Ci0JCQkJc3RyYnVmX2FkZHN0cihzYiwgIi4gIik7Ci0JCQl9CisJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMikKKwkJCQljaGFyc193cml0dGVuICs9IGdyYXBoX2RyYXdfb2N0b3B1c19tZXJnZShncmFwaCwKKwkJCQkJCQkJCSAgc2IpOwogCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMikpIHsKLQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcXCAiKTsKKwkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ1xcJyk7CisJCQljaGFyc193cml0dGVuKys7CiAJCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+bnVtX3BhcmVudHMgPT0gMikpIHsKIAkJCS8qCiAJCQkgKiBUaGlzIGlzIGEgMi13YXkgbWVyZ2UgY29tbWl0LgpAQCAtNzY4LDE1ICs4NjAsMTkgQEAKIAkJCSAqLwogCQkJaWYgKGdyYXBoLT5wcmV2X3N0YXRlID09IEdSQVBIX1BPU1RfTUVSR0UgJiYKIAkJCSAgICBncmFwaC0+cHJldl9jb21taXRfaW5kZXggPCBpKQotCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcXCAiKTsKKwkJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICdcXCcpOwogCQkJZWxzZQotCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJ8ICIpOworCQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ3wnKTsKKwkJCWNoYXJzX3dyaXR0ZW4rKzsKIAkJfSBlbHNlIHsKLQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJ8ICIpOworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOworCQkJY2hhcnNfd3JpdHRlbisrOwogCQl9CisJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJY2hhcnNfd3JpdHRlbisrOwogCX0KIAotCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiKTsKKwlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgY2hhcnNfd3JpdHRlbik7CiAKIAkvKgogCSAqIFVwZGF0ZSBncmFwaC0+c3RhdGUKQEAgLTc4OSwzNyArODg1LDc1IEBACiAJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfQ09MTEFQU0lORyk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgY29sdW1uICpmaW5kX25ld19jb2x1bW5fYnlfY29tbWl0KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX25ld19jb2x1bW5zOyBpKyspIHsKKwkJaWYgKGdyYXBoLT5uZXdfY29sdW1uc1tpXS5jb21taXQgPT0gY29tbWl0KQorCQkJcmV0dXJuICZncmFwaC0+bmV3X2NvbHVtbnNbaV07CisJfQorCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfcG9zdF9tZXJnZV9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKIHsKIAlpbnQgc2Vlbl90aGlzID0gMDsKLQlpbnQgaSwgajsKKwlpbnQgaSwgaiwgY2hhcnNfd3JpdHRlbjsKIAogCS8qCiAJICogT3V0cHV0IHRoZSBwb3N0LW1lcmdlIHJvdwogCSAqLworCWNoYXJzX3dyaXR0ZW4gPSAwOwogCWZvciAoaSA9IDA7IGkgPD0gZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKKwkJc3RydWN0IGNvbHVtbiAqY29sID0gJmdyYXBoLT5jb2x1bW5zW2ldOwogCQlzdHJ1Y3QgY29tbWl0ICpjb2xfY29tbWl0OwogCQlpZiAoaSA9PSBncmFwaC0+bnVtX2NvbHVtbnMpIHsKIAkJCWlmIChzZWVuX3RoaXMpCiAJCQkJYnJlYWs7CiAJCQljb2xfY29tbWl0ID0gZ3JhcGgtPmNvbW1pdDsKIAkJfSBlbHNlIHsKLQkJCWNvbF9jb21taXQgPSBncmFwaC0+Y29sdW1uc1tpXS5jb21taXQ7CisJCQljb2xfY29tbWl0ID0gY29sLT5jb21taXQ7CiAJCX0KIAogCQlpZiAoY29sX2NvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CisJCQkvKgorCQkJICogU2luY2UgdGhlIGN1cnJlbnQgY29tbWl0IGlzIGEgbWVyZ2UgZmluZAorCQkJICogdGhlIGNvbHVtbnMgZm9yIHRoZSBwYXJlbnQgY29tbWl0cyBpbgorCQkJICogbmV3X2NvbHVtbnMgYW5kIHVzZSB0aG9zZSB0byBmb3JtYXQgdGhlCisJCQkgKiBlZGdlcy4KKwkJCSAqLworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gTlVMTDsKKwkJCXN0cnVjdCBjb2x1bW4gKnBhcl9jb2x1bW47CiAJCQlzZWVuX3RoaXMgPSAxOwotCQkJc3RyYnVmX2FkZGNoKHNiLCAnfCcpOwotCQkJZm9yIChqID0gMDsgaiA8IGdyYXBoLT5udW1fcGFyZW50cyAtIDE7IGorKykKLQkJCQlzdHJidWZfYWRkc3RyKHNiLCAiXFwgIik7CisJCQlwYXJlbnRzID0gZmlyc3RfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoKTsKKwkJCWFzc2VydChwYXJlbnRzKTsKKwkJCXBhcl9jb2x1bW4gPSBmaW5kX25ld19jb2x1bW5fYnlfY29tbWl0KGdyYXBoLCBwYXJlbnRzLT5pdGVtKTsKKwkJCWFzc2VydChwYXJfY29sdW1uKTsKKworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgcGFyX2NvbHVtbiwgJ3wnKTsKKwkJCWNoYXJzX3dyaXR0ZW4rKzsKKwkJCWZvciAoaiA9IDA7IGogPCBncmFwaC0+bnVtX3BhcmVudHMgLSAxOyBqKyspIHsKKwkJCQlwYXJlbnRzID0gbmV4dF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgsIHBhcmVudHMpOworCQkJCWFzc2VydChwYXJlbnRzKTsKKwkJCQlwYXJfY29sdW1uID0gZmluZF9uZXdfY29sdW1uX2J5X2NvbW1pdChncmFwaCwgcGFyZW50cy0+aXRlbSk7CisJCQkJYXNzZXJ0KHBhcl9jb2x1bW4pOworCQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIHBhcl9jb2x1bW4sICdcXCcpOworCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJCX0KKwkJCWNoYXJzX3dyaXR0ZW4gKz0gaiAqIDI7CiAJCX0gZWxzZSBpZiAoc2Vlbl90aGlzKSB7Ci0JCQlzdHJidWZfYWRkc3RyKHNiLCAiXFwgIik7CisJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICdcXCcpOworCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCQkJY2hhcnNfd3JpdHRlbiArPSAyOwogCQl9IGVsc2UgewotCQkJc3RyYnVmX2FkZHN0cihzYiwgInwgIik7CisJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7CisJCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCQljaGFyc193cml0dGVuICs9IDI7CiAJCX0KIAl9CiAKLQlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYik7CisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIGNoYXJzX3dyaXR0ZW4pOwogCiAJLyoKIAkgKiBVcGRhdGUgZ3JhcGgtPnN0YXRlCkBAIC04MzQsNiArOTY4LDkgQEAKIHsKIAlpbnQgaTsKIAlpbnQgKnRtcF9tYXBwaW5nOworCXNob3J0IHVzZWRfaG9yaXpvbnRhbCA9IDA7CisJaW50IGhvcml6b250YWxfZWRnZSA9IC0xOworCWludCBob3Jpem9udGFsX2VkZ2VfdGFyZ2V0ID0gLTE7CiAKIAkvKgogCSAqIENsZWFyIG91dCB0aGUgbmV3X21hcHBpbmcgYXJyYXkKQEAgLTg3MSw2ICsxMDA4LDIzIEBACiAJCQkgKiBNb3ZlIHRvIHRoZSBsZWZ0IGJ5IG9uZQogCQkJICovCiAJCQlncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdID0gdGFyZ2V0OworCQkJLyoKKwkJCSAqIElmIHRoZXJlIGlzbid0IGFscmVhZHkgYW4gZWRnZSBtb3ZpbmcgaG9yaXpvbnRhbGx5CisJCQkgKiBzZWxlY3QgdGhpcyBvbmUuCisJCQkgKi8KKwkJCWlmIChob3Jpem9udGFsX2VkZ2UgPT0gLTEpIHsKKwkJCQlpbnQgajsKKwkJCQlob3Jpem9udGFsX2VkZ2UgPSBpOworCQkJCWhvcml6b250YWxfZWRnZV90YXJnZXQgPSB0YXJnZXQ7CisJCQkJLyoKKwkJCQkgKiBUaGUgdmFyaWFibGUgdGFyZ2V0IGlzIHRoZSBpbmRleCBvZiB0aGUgZ3JhcGgKKwkJCQkgKiBjb2x1bW4sIGFuZCB0aGVyZWZvcmUgdGFyZ2V0KjIrMyBpcyB0aGUKKwkJCQkgKiBhY3R1YWwgc2NyZWVuIGNvbHVtbiBvZiB0aGUgZmlyc3QgaG9yaXpvbnRhbAorCQkJCSAqIGxpbmUuCisJCQkJICovCisJCQkJZm9yIChqID0gKHRhcmdldCAqIDIpKzM7IGogPCAoaSAtIDIpOyBqICs9IDIpCisJCQkJCWdyYXBoLT5uZXdfbWFwcGluZ1tqXSA9IHRhcmdldDsKKwkJCX0KIAkJfSBlbHNlIGlmIChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdID09IHRhcmdldCkgewogCQkJLyoKIAkJCSAqIFRoZXJlIGlzIGEgYnJhbmNoIGxpbmUgdG8gb3VyIGxlZnQKQEAgLTg5MSwxMCArMTA0NSwyMSBAQAogCQkJICoKIAkJCSAqIFRoZSBzcGFjZSBqdXN0IHRvIHRoZSBsZWZ0IG9mIHRoaXMKIAkJCSAqIGJyYW5jaCBzaG91bGQgYWx3YXlzIGJlIGVtcHR5LgorCQkJICoKKwkJCSAqIFRoZSBicmFuY2ggdG8gdGhlIGxlZnQgb2YgdGhhdCBzcGFjZQorCQkJICogc2hvdWxkIGJlIG91ciBldmVudHVhbCB0YXJnZXQuCiAJCQkgKi8KIAkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdID4gdGFyZ2V0KTsKIAkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDJdIDwgMCk7CisJCQlhc3NlcnQoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAzXSA9PSB0YXJnZXQpOwogCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAyXSA9IHRhcmdldDsKKwkJCS8qCisJCQkgKiBNYXJrIHRoaXMgYnJhbmNoIGFzIHRoZSBob3Jpem9udGFsIGVkZ2UgdG8KKwkJCSAqIHByZXZlbnQgYW55IG90aGVyIGVkZ2VzIGZyb20gbW92aW5nCisJCQkgKiBob3Jpem9udGFsbHkuCisJCQkgKi8KKwkJCWlmIChob3Jpem9udGFsX2VkZ2UgPT0gLTEpCisJCQkJaG9yaXpvbnRhbF9lZGdlID0gaTsKIAkJfQogCX0KIApAQCAtOTEyLDEyICsxMDc3LDI3IEBACiAJCWlmICh0YXJnZXQgPCAwKQogCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOwogCQllbHNlIGlmICh0YXJnZXQgKiAyID09IGkpCi0JCQlzdHJidWZfYWRkY2goc2IsICd8Jyk7Ci0JCWVsc2UKLQkJCXN0cmJ1Zl9hZGRjaChzYiwgJy8nKTsKKwkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsICZncmFwaC0+bmV3X2NvbHVtbnNbdGFyZ2V0XSwgJ3wnKTsKKwkJZWxzZSBpZiAodGFyZ2V0ID09IGhvcml6b250YWxfZWRnZV90YXJnZXQgJiYKKwkJCSBpICE9IGhvcml6b250YWxfZWRnZSAtIDEpIHsKKwkJCQkvKgorCQkJCSAqIFNldCB0aGUgbWFwcGluZ3MgZm9yIGFsbCBidXQgdGhlCisJCQkJICogZmlyc3Qgc2VnbWVudCB0byAtMSBzbyB0aGF0IHRoZXkKKwkJCQkgKiB3b24ndCBjb250aW51ZSBpbnRvIHRoZSBuZXh0IGxpbmUuCisJCQkJICovCisJCQkJaWYgKGkgIT0gKHRhcmdldCAqIDIpKzMpCisJCQkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpXSA9IC0xOworCQkJCXVzZWRfaG9yaXpvbnRhbCA9IDE7CisJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW3RhcmdldF0sICdfJyk7CisJCX0gZWxzZSB7CisJCQlpZiAodXNlZF9ob3Jpem9udGFsICYmIGkgPCBob3Jpem9udGFsX2VkZ2UpCisJCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2ldID0gLTE7CisJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW3RhcmdldF0sICcvJyk7CisKKwkJfQogCX0KIAotCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiKTsKKwlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgZ3JhcGgtPm1hcHBpbmdfc2l6ZSk7CiAKIAkvKgogCSAqIFN3YXAgbWFwcGluZyBhbmQgbmV3X21hcHBpbmcKQEAgLTk3OSw5ICsxMTU5LDEwIEBACiAJICogY2hpbGRyZW4gdGhhdCB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkLikKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKLQkJc3RydWN0IGNvbW1pdCAqY29sX2NvbW1pdCA9IGdyYXBoLT5jb2x1bW5zW2ldLmNvbW1pdDsKKwkJc3RydWN0IGNvbHVtbiAqY29sID0gJmdyYXBoLT5jb2x1bW5zW2ldOworCQlzdHJ1Y3QgY29tbWl0ICpjb2xfY29tbWl0ID0gY29sLT5jb21taXQ7CiAJCWlmIChjb2xfY29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKLQkJCXN0cmJ1Zl9hZGRjaChzYiwgJ3wnKTsKKwkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ3wnKTsKIAogCQkJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA8IDMpCiAJCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOwpAQCAtOTkxLDExICsxMTcyLDEyIEBACiAJCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJ8ICIpOworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOworCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOwogCQl9CiAJfQogCi0JZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IpOworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBncmFwaC0+bnVtX2NvbHVtbnMpOwogCiAJLyoKIAkgKiBVcGRhdGUgZ3JhcGgtPnByZXZfc3RhdGUgc2luY2Ugd2UgaGF2ZSBvdXRwdXQgYSBwYWRkaW5nIGxpbmUKZGlmZiAtLWdpdCBhL2dyZXAuYyBiL2dyZXAuYwppbmRleCA3MDRmYWNmLi41ZDE2MmRhIDEwMDY0NAotLS0gYS9ncmVwLmMKKysrIGIvZ3JlcC5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiZ3JlcC5oIgorI2luY2x1ZGUgInVzZXJkaWZmLmgiCiAjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCiAKIHZvaWQgYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oc3RydWN0IGdyZXBfb3B0ICpvcHQsIGVudW0gZ3JlcF9oZWFkZXJfZmllbGQgZmllbGQsIGNvbnN0IGNoYXIgKnBhdCkKQEAgLTI4LDkgKzI5LDI3IEBACiAJcC0+bmV4dCA9IE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQgaXNfZml4ZWQoY29uc3QgY2hhciAqcykKK3sKKwl3aGlsZSAoKnMgJiYgIWlzX3JlZ2V4X3NwZWNpYWwoKnMpKQorCQlzKys7CisJcmV0dXJuICEqczsKK30KKwogc3RhdGljIHZvaWQgY29tcGlsZV9yZWdleHAoc3RydWN0IGdyZXBfcGF0ICpwLCBzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKIHsKLQlpbnQgZXJyID0gcmVnY29tcCgmcC0+cmVnZXhwLCBwLT5wYXR0ZXJuLCBvcHQtPnJlZ2ZsYWdzKTsKKwlpbnQgZXJyOworCisJcC0+d29yZF9yZWdleHAgPSBvcHQtPndvcmRfcmVnZXhwOworCisJaWYgKG9wdC0+Zml4ZWQgfHwgaXNfZml4ZWQocC0+cGF0dGVybikpCisJCXAtPmZpeGVkID0gMTsKKwlpZiAob3B0LT5yZWdmbGFncyAmIFJFR19JQ0FTRSkKKwkJcC0+Zml4ZWQgPSAwOworCWlmIChwLT5maXhlZCkKKwkJcmV0dXJuOworCisJZXJyID0gcmVnY29tcCgmcC0+cmVnZXhwLCBwLT5wYXR0ZXJuLCBvcHQtPnJlZ2ZsYWdzKTsKIAlpZiAoZXJyKSB7CiAJCWNoYXIgZXJyYnVmWzEwMjRdOwogCQljaGFyIHdoZXJlWzEwMjRdOwpAQCAtMTYxLDggKzE4MCw3IEBACiAJCWNhc2UgR1JFUF9QQVRURVJOOiAvKiBhdG9tICovCiAJCWNhc2UgR1JFUF9QQVRURVJOX0hFQUQ6CiAJCWNhc2UgR1JFUF9QQVRURVJOX0JPRFk6Ci0JCQlpZiAoIW9wdC0+Zml4ZWQpCi0JCQkJY29tcGlsZV9yZWdleHAocCwgb3B0KTsKKwkJCWNvbXBpbGVfcmVnZXhwKHAsIG9wdCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCW9wdC0+ZXh0ZW5kZWQgPSAxOwpAQCAtMTc3LDcgKzE5NSw4IEBACiAJICogQSBjbGFzc2ljIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlciB3b3VsZCBkby4KIAkgKi8KIAlwID0gb3B0LT5wYXR0ZXJuX2xpc3Q7Ci0Jb3B0LT5wYXR0ZXJuX2V4cHJlc3Npb24gPSBjb21waWxlX3BhdHRlcm5fZXhwcigmcCk7CisJaWYgKHApCisJCW9wdC0+cGF0dGVybl9leHByZXNzaW9uID0gY29tcGlsZV9wYXR0ZXJuX2V4cHIoJnApOwogCWlmIChwKQogCQlkaWUoImluY29tcGxldGUgcGF0dGVybiBleHByZXNzaW9uOiAlcyIsIHAtPnBhdHRlcm4pOwogfQpAQCAtMjM4LDE4ICsyNTcsNiBAQAogCXJldHVybiBpc2FsbnVtKGNoKSB8fCBjaCA9PSAnXyc7CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfbGluZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqYm9sLCBjb25zdCBjaGFyICplb2wsCi0JCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxubywgY2hhciBzaWduKQotewotCWlmIChvcHQtPm51bGxfZm9sbG93aW5nX25hbWUpCi0JCXNpZ24gPSAnXDAnOwotCWlmIChvcHQtPnBhdGhuYW1lKQotCQlwcmludGYoIiVzJWMiLCBuYW1lLCBzaWduKTsKLQlpZiAob3B0LT5saW5lbnVtKQotCQlwcmludGYoIiVkJWMiLCBsbm8sIHNpZ24pOwotCXByaW50ZigiJS4qc1xuIiwgKGludCkoZW9sLWJvbCksIGJvbCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNob3dfbmFtZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlwcmludGYoIiVzJWMiLCBuYW1lLCBvcHQtPm51bGxfZm9sbG93aW5nX25hbWUgPyAnXDAnIDogJ1xuJyk7CkBAIC0yOTMsMTIgKzMwMCwxMyBAQAogCXsgImNvbW1pdHRlciAiLCAxMCB9LAogfTsKIAotc3RhdGljIGludCBtYXRjaF9vbmVfcGF0dGVybihzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgc3RydWN0IGdyZXBfcGF0ICpwLCBjaGFyICpib2wsIGNoYXIgKmVvbCwgZW51bSBncmVwX2NvbnRleHQgY3R4KQorc3RhdGljIGludCBtYXRjaF9vbmVfcGF0dGVybihzdHJ1Y3QgZ3JlcF9wYXQgKnAsIGNoYXIgKmJvbCwgY2hhciAqZW9sLAorCQkJICAgICBlbnVtIGdyZXBfY29udGV4dCBjdHgsCisJCQkgICAgIHJlZ21hdGNoX3QgKnBtYXRjaCwgaW50IGVmbGFncykKIHsKIAlpbnQgaGl0ID0gMDsKLQlpbnQgYXRfdHJ1ZV9ib2wgPSAxOwogCWludCBzYXZlZF9jaCA9IDA7Ci0JcmVnbWF0Y2hfdCBwbWF0Y2hbMTBdOworCWNvbnN0IGNoYXIgKnN0YXJ0ID0gYm9sOwogCiAJaWYgKChwLT50b2tlbiAhPSBHUkVQX1BBVFRFUk4pICYmCiAJICAgICgocC0+dG9rZW4gPT0gR1JFUF9QQVRURVJOX0hFQUQpICE9IChjdHggPT0gR1JFUF9DT05URVhUX0hFQUQpKSkKQEAgLTMxNywxOCArMzI1LDE0IEBACiAJfQogCiAgYWdhaW46Ci0JaWYgKCFvcHQtPmZpeGVkKSB7Ci0JCXJlZ2V4X3QgKmV4cCA9ICZwLT5yZWdleHA7Ci0JCWhpdCA9ICFyZWdleGVjKGV4cCwgYm9sLCBBUlJBWV9TSVpFKHBtYXRjaCksCi0JCQkgICAgICAgcG1hdGNoLCAwKTsKLQl9Ci0JZWxzZSB7CisJaWYgKHAtPmZpeGVkKQogCQloaXQgPSAhZml4bWF0Y2gocC0+cGF0dGVybiwgYm9sLCBwbWF0Y2gpOwotCX0KKwllbHNlCisJCWhpdCA9ICFyZWdleGVjKCZwLT5yZWdleHAsIGJvbCwgMSwgcG1hdGNoLCBlZmxhZ3MpOwogCi0JaWYgKGhpdCAmJiBvcHQtPndvcmRfcmVnZXhwKSB7CisJaWYgKGhpdCAmJiBwLT53b3JkX3JlZ2V4cCkgewogCQlpZiAoKHBtYXRjaFswXS5ybV9zbyA8IDApIHx8Ci0JCSAgICAoZW9sIC0gYm9sKSA8PSBwbWF0Y2hbMF0ucm1fc28gfHwKKwkJICAgIChlb2wgLSBib2wpIDwgcG1hdGNoWzBdLnJtX3NvIHx8CiAJCSAgICAocG1hdGNoWzBdLnJtX2VvIDwgMCkgfHwKIAkJICAgIChlb2wgLSBib2wpIDwgcG1hdGNoWzBdLnJtX2VvKQogCQkJZGllKCJyZWdleHAgcmV0dXJuZWQgbm9uc2Vuc2UiKTsKQEAgLTMzOSw3ICszNDMsNyBAQAogCQkgKiBlaXRoZXIgZW5kIG9mIHRoZSBsaW5lLCBvciBhdCB3b3JkIGJvdW5kYXJ5CiAJCSAqIChpLmUuIHRoZSBuZXh0IGNoYXIgbXVzdCBub3QgYmUgYSB3b3JkIGNoYXIpLgogCQkgKi8KLQkJaWYgKCAoKHBtYXRjaFswXS5ybV9zbyA9PSAwICYmIGF0X3RydWVfYm9sKSB8fAorCQlpZiAoICgocG1hdGNoWzBdLnJtX3NvID09IDApIHx8CiAJCSAgICAgICF3b3JkX2NoYXIoYm9sW3BtYXRjaFswXS5ybV9zby0xXSkpICYmCiAJCSAgICAgKChwbWF0Y2hbMF0ucm1fZW8gPT0gKGVvbC1ib2wpKSB8fAogCQkgICAgICAhd29yZF9jaGFyKGJvbFtwbWF0Y2hbMF0ucm1fZW9dKSkgKQpAQCAtMzQ3LDU5ICszNTEsNjYgQEAKIAkJZWxzZQogCQkJaGl0ID0gMDsKIAorCQkvKiBXb3JkcyBjb25zaXN0IG9mIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIuICovCisJCWlmIChwbWF0Y2gtPnJtX3NvID09IHBtYXRjaC0+cm1fZW8pCisJCQloaXQgPSAwOworCiAJCWlmICghaGl0ICYmIHBtYXRjaFswXS5ybV9zbyArIGJvbCArIDEgPCBlb2wpIHsKIAkJCS8qIFRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgbWF0Y2ggb24gdGhlCiAJCQkgKiBsaW5lLCBhbmQgdGhlIGZpcnN0IG1hdGNoIG1pZ2h0IG5vdCBiZQogCQkJICogc3RyaWN0IHdvcmQgbWF0Y2guICBCdXQgbGF0ZXIgb25lcyBjb3VsZCBiZSEKKwkJCSAqIEZvcndhcmQgdG8gdGhlIG5leHQgcG9zc2libGUgc3RhcnQsIGkuZS4gdGhlCisJCQkgKiBuZXh0IHBvc2l0aW9uIGZvbGxvd2luZyBhIG5vbi13b3JkIGNoYXIuCiAJCQkgKi8KIAkJCWJvbCA9IHBtYXRjaFswXS5ybV9zbyArIGJvbCArIDE7Ci0JCQlhdF90cnVlX2JvbCA9IDA7Ci0JCQlnb3RvIGFnYWluOworCQkJd2hpbGUgKHdvcmRfY2hhcihib2xbLTFdKSAmJiBib2wgPCBlb2wpCisJCQkJYm9sKys7CisJCQllZmxhZ3MgfD0gUkVHX05PVEJPTDsKKwkJCWlmIChib2wgPCBlb2wpCisJCQkJZ290byBhZ2FpbjsKIAkJfQogCX0KIAlpZiAocC0+dG9rZW4gPT0gR1JFUF9QQVRURVJOX0hFQUQgJiYgc2F2ZWRfY2gpCiAJCSplb2wgPSBzYXZlZF9jaDsKKwlpZiAoaGl0KSB7CisJCXBtYXRjaFswXS5ybV9zbyArPSBib2wgLSBzdGFydDsKKwkJcG1hdGNoWzBdLnJtX2VvICs9IGJvbCAtIHN0YXJ0OworCX0KIAlyZXR1cm4gaGl0OwogfQogCi1zdGF0aWMgaW50IG1hdGNoX2V4cHJfZXZhbChzdHJ1Y3QgZ3JlcF9vcHQgKm8sCi0JCQkgICBzdHJ1Y3QgZ3JlcF9leHByICp4LAotCQkJICAgY2hhciAqYm9sLCBjaGFyICplb2wsCi0JCQkgICBlbnVtIGdyZXBfY29udGV4dCBjdHgsCi0JCQkgICBpbnQgY29sbGVjdF9oaXRzKQorc3RhdGljIGludCBtYXRjaF9leHByX2V2YWwoc3RydWN0IGdyZXBfZXhwciAqeCwgY2hhciAqYm9sLCBjaGFyICplb2wsCisJCQkgICBlbnVtIGdyZXBfY29udGV4dCBjdHgsIGludCBjb2xsZWN0X2hpdHMpCiB7CiAJaW50IGggPSAwOworCXJlZ21hdGNoX3QgbWF0Y2g7CiAKIAlpZiAoIXgpCiAJCWRpZSgiTm90IGEgdmFsaWQgZ3JlcCBleHByZXNzaW9uIik7CiAJc3dpdGNoICh4LT5ub2RlKSB7CiAJY2FzZSBHUkVQX05PREVfQVRPTToKLQkJaCA9IG1hdGNoX29uZV9wYXR0ZXJuKG8sIHgtPnUuYXRvbSwgYm9sLCBlb2wsIGN0eCk7CisJCWggPSBtYXRjaF9vbmVfcGF0dGVybih4LT51LmF0b20sIGJvbCwgZW9sLCBjdHgsICZtYXRjaCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgR1JFUF9OT0RFX05PVDoKLQkJaCA9ICFtYXRjaF9leHByX2V2YWwobywgeC0+dS51bmFyeSwgYm9sLCBlb2wsIGN0eCwgMCk7CisJCWggPSAhbWF0Y2hfZXhwcl9ldmFsKHgtPnUudW5hcnksIGJvbCwgZW9sLCBjdHgsIDApOwogCQlicmVhazsKIAljYXNlIEdSRVBfTk9ERV9BTkQ6Ci0JCWlmICghY29sbGVjdF9oaXRzKQotCQkJcmV0dXJuIChtYXRjaF9leHByX2V2YWwobywgeC0+dS5iaW5hcnkubGVmdCwKLQkJCQkJCWJvbCwgZW9sLCBjdHgsIDApICYmCi0JCQkJbWF0Y2hfZXhwcl9ldmFsKG8sIHgtPnUuYmluYXJ5LnJpZ2h0LAotCQkJCQkJYm9sLCBlb2wsIGN0eCwgMCkpOwotCQloID0gbWF0Y2hfZXhwcl9ldmFsKG8sIHgtPnUuYmluYXJ5LmxlZnQsIGJvbCwgZW9sLCBjdHgsIDApOwotCQloICY9IG1hdGNoX2V4cHJfZXZhbChvLCB4LT51LmJpbmFyeS5yaWdodCwgYm9sLCBlb2wsIGN0eCwgMCk7CisJCWlmICghbWF0Y2hfZXhwcl9ldmFsKHgtPnUuYmluYXJ5LmxlZnQsIGJvbCwgZW9sLCBjdHgsIDApKQorCQkJcmV0dXJuIDA7CisJCWggPSBtYXRjaF9leHByX2V2YWwoeC0+dS5iaW5hcnkucmlnaHQsIGJvbCwgZW9sLCBjdHgsIDApOwogCQlicmVhazsKIAljYXNlIEdSRVBfTk9ERV9PUjoKIAkJaWYgKCFjb2xsZWN0X2hpdHMpCi0JCQlyZXR1cm4gKG1hdGNoX2V4cHJfZXZhbChvLCB4LT51LmJpbmFyeS5sZWZ0LAorCQkJcmV0dXJuIChtYXRjaF9leHByX2V2YWwoeC0+dS5iaW5hcnkubGVmdCwKIAkJCQkJCWJvbCwgZW9sLCBjdHgsIDApIHx8Ci0JCQkJbWF0Y2hfZXhwcl9ldmFsKG8sIHgtPnUuYmluYXJ5LnJpZ2h0LAorCQkJCW1hdGNoX2V4cHJfZXZhbCh4LT51LmJpbmFyeS5yaWdodCwKIAkJCQkJCWJvbCwgZW9sLCBjdHgsIDApKTsKLQkJaCA9IG1hdGNoX2V4cHJfZXZhbChvLCB4LT51LmJpbmFyeS5sZWZ0LCBib2wsIGVvbCwgY3R4LCAwKTsKKwkJaCA9IG1hdGNoX2V4cHJfZXZhbCh4LT51LmJpbmFyeS5sZWZ0LCBib2wsIGVvbCwgY3R4LCAwKTsKIAkJeC0+dS5iaW5hcnkubGVmdC0+aGl0IHw9IGg7Ci0JCWggfD0gbWF0Y2hfZXhwcl9ldmFsKG8sIHgtPnUuYmluYXJ5LnJpZ2h0LCBib2wsIGVvbCwgY3R4LCAxKTsKKwkJaCB8PSBtYXRjaF9leHByX2V2YWwoeC0+dS5iaW5hcnkucmlnaHQsIGJvbCwgZW9sLCBjdHgsIDEpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkaWUoIlVuZXhwZWN0ZWQgbm9kZSB0eXBlIChpbnRlcm5hbCBlcnJvcikgJWRcbiIsIHgtPm5vZGUpOworCQlkaWUoIlVuZXhwZWN0ZWQgbm9kZSB0eXBlIChpbnRlcm5hbCBlcnJvcikgJWQiLCB4LT5ub2RlKTsKIAl9CiAJaWYgKGNvbGxlY3RfaGl0cykKIAkJeC0+aGl0IHw9IGg7CkBAIC00MTAsNDAgKzQyMSwyMDYgQEAKIAkJICAgICAgZW51bSBncmVwX2NvbnRleHQgY3R4LCBpbnQgY29sbGVjdF9oaXRzKQogewogCXN0cnVjdCBncmVwX2V4cHIgKnggPSBvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbjsKLQlyZXR1cm4gbWF0Y2hfZXhwcl9ldmFsKG9wdCwgeCwgYm9sLCBlb2wsIGN0eCwgY29sbGVjdF9oaXRzKTsKKwlyZXR1cm4gbWF0Y2hfZXhwcl9ldmFsKHgsIGJvbCwgZW9sLCBjdHgsIGNvbGxlY3RfaGl0cyk7CiB9CiAKIHN0YXRpYyBpbnQgbWF0Y2hfbGluZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY2hhciAqYm9sLCBjaGFyICplb2wsCiAJCSAgICAgIGVudW0gZ3JlcF9jb250ZXh0IGN0eCwgaW50IGNvbGxlY3RfaGl0cykKIHsKIAlzdHJ1Y3QgZ3JlcF9wYXQgKnA7CisJcmVnbWF0Y2hfdCBtYXRjaDsKKwogCWlmIChvcHQtPmV4dGVuZGVkKQogCQlyZXR1cm4gbWF0Y2hfZXhwcihvcHQsIGJvbCwgZW9sLCBjdHgsIGNvbGxlY3RfaGl0cyk7CiAKIAkvKiB3ZSBkbyBub3QgY2FsbCB3aXRoIGNvbGxlY3RfaGl0cyB3aXRob3V0IGJlaW5nIGV4dGVuZGVkICovCiAJZm9yIChwID0gb3B0LT5wYXR0ZXJuX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7Ci0JCWlmIChtYXRjaF9vbmVfcGF0dGVybihvcHQsIHAsIGJvbCwgZW9sLCBjdHgpKQorCQlpZiAobWF0Y2hfb25lX3BhdHRlcm4ocCwgYm9sLCBlb2wsIGN0eCwgJm1hdGNoLCAwKSkKIAkJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtYXRjaF9uZXh0X3BhdHRlcm4oc3RydWN0IGdyZXBfcGF0ICpwLCBjaGFyICpib2wsIGNoYXIgKmVvbCwKKwkJCSAgICAgIGVudW0gZ3JlcF9jb250ZXh0IGN0eCwKKwkJCSAgICAgIHJlZ21hdGNoX3QgKnBtYXRjaCwgaW50IGVmbGFncykKK3sKKwlyZWdtYXRjaF90IG1hdGNoOworCisJaWYgKCFtYXRjaF9vbmVfcGF0dGVybihwLCBib2wsIGVvbCwgY3R4LCAmbWF0Y2gsIGVmbGFncykpCisJCXJldHVybiAwOworCWlmIChtYXRjaC5ybV9zbyA8IDAgfHwgbWF0Y2gucm1fZW8gPCAwKQorCQlyZXR1cm4gMDsKKwlpZiAocG1hdGNoLT5ybV9zbyA+PSAwICYmIHBtYXRjaC0+cm1fZW8gPj0gMCkgeworCQlpZiAobWF0Y2gucm1fc28gPiBwbWF0Y2gtPnJtX3NvKQorCQkJcmV0dXJuIDE7CisJCWlmIChtYXRjaC5ybV9zbyA9PSBwbWF0Y2gtPnJtX3NvICYmIG1hdGNoLnJtX2VvIDwgcG1hdGNoLT5ybV9lbykKKwkJCXJldHVybiAxOworCX0KKwlwbWF0Y2gtPnJtX3NvID0gbWF0Y2gucm1fc287CisJcG1hdGNoLT5ybV9lbyA9IG1hdGNoLnJtX2VvOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5leHRfbWF0Y2goc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNoYXIgKmJvbCwgY2hhciAqZW9sLAorCQkgICAgICBlbnVtIGdyZXBfY29udGV4dCBjdHgsIHJlZ21hdGNoX3QgKnBtYXRjaCwgaW50IGVmbGFncykKK3sKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnA7CisJaW50IGhpdCA9IDA7CisKKwlwbWF0Y2gtPnJtX3NvID0gcG1hdGNoLT5ybV9lbyA9IC0xOworCWlmIChib2wgPCBlb2wpIHsKKwkJZm9yIChwID0gb3B0LT5wYXR0ZXJuX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQlzd2l0Y2ggKHAtPnRva2VuKSB7CisJCQljYXNlIEdSRVBfUEFUVEVSTjogLyogYXRvbSAqLworCQkJY2FzZSBHUkVQX1BBVFRFUk5fSEVBRDoKKwkJCWNhc2UgR1JFUF9QQVRURVJOX0JPRFk6CisJCQkJaGl0IHw9IG1hdGNoX25leHRfcGF0dGVybihwLCBib2wsIGVvbCwgY3R4LAorCQkJCQkJCSAgcG1hdGNoLCBlZmxhZ3MpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gaGl0OworfQorCitzdGF0aWMgdm9pZCBzaG93X2xpbmUoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNoYXIgKmJvbCwgY2hhciAqZW9sLAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsbm8sIGNoYXIgc2lnbikKK3sKKwlpbnQgcmVzdCA9IGVvbCAtIGJvbDsKKworCWlmIChvcHQtPnByZV9jb250ZXh0IHx8IG9wdC0+cG9zdF9jb250ZXh0KSB7CisJCWlmIChvcHQtPmxhc3Rfc2hvd24gPT0gMCkgeworCQkJaWYgKG9wdC0+c2hvd19odW5rX21hcmspCisJCQkJZnB1dHMoIi0tXG4iLCBzdGRvdXQpOworCQkJZWxzZQorCQkJCW9wdC0+c2hvd19odW5rX21hcmsgPSAxOworCQl9IGVsc2UgaWYgKGxubyA+IG9wdC0+bGFzdF9zaG93biArIDEpCisJCQlmcHV0cygiLS1cbiIsIHN0ZG91dCk7CisJfQorCW9wdC0+bGFzdF9zaG93biA9IGxubzsKKworCWlmIChvcHQtPm51bGxfZm9sbG93aW5nX25hbWUpCisJCXNpZ24gPSAnXDAnOworCWlmIChvcHQtPnBhdGhuYW1lKQorCQlwcmludGYoIiVzJWMiLCBuYW1lLCBzaWduKTsKKwlpZiAob3B0LT5saW5lbnVtKQorCQlwcmludGYoIiVkJWMiLCBsbm8sIHNpZ24pOworCWlmIChvcHQtPmNvbG9yKSB7CisJCXJlZ21hdGNoX3QgbWF0Y2g7CisJCWVudW0gZ3JlcF9jb250ZXh0IGN0eCA9IEdSRVBfQ09OVEVYVF9CT0RZOworCQlpbnQgY2ggPSAqZW9sOworCQlpbnQgZWZsYWdzID0gMDsKKworCQkqZW9sID0gJ1wwJzsKKwkJd2hpbGUgKG5leHRfbWF0Y2gob3B0LCBib2wsIGVvbCwgY3R4LCAmbWF0Y2gsIGVmbGFncykpIHsKKwkJCWlmIChtYXRjaC5ybV9zbyA9PSBtYXRjaC5ybV9lbykKKwkJCQlicmVhazsKKwkJCXByaW50ZigiJS4qcyVzJS4qcyVzIiwKKwkJCSAgICAgICAoaW50KW1hdGNoLnJtX3NvLCBib2wsCisJCQkgICAgICAgb3B0LT5jb2xvcl9tYXRjaCwKKwkJCSAgICAgICAoaW50KShtYXRjaC5ybV9lbyAtIG1hdGNoLnJtX3NvKSwgYm9sICsgbWF0Y2gucm1fc28sCisJCQkgICAgICAgR0lUX0NPTE9SX1JFU0VUKTsKKwkJCWJvbCArPSBtYXRjaC5ybV9lbzsKKwkJCXJlc3QgLT0gbWF0Y2gucm1fZW87CisJCQllZmxhZ3MgPSBSRUdfTk9UQk9MOworCQl9CisJCSplb2wgPSBjaDsKKwl9CisJcHJpbnRmKCIlLipzXG4iLCByZXN0LCBib2wpOworfQorCitzdGF0aWMgaW50IG1hdGNoX2Z1bmNuYW1lKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjaGFyICpib2wsIGNoYXIgKmVvbCkKK3sKKwl4ZGVtaXRjb25mX3QgKnhlY2ZnID0gb3B0LT5wcml2OworCWlmICh4ZWNmZyAmJiB4ZWNmZy0+ZmluZF9mdW5jKSB7CisJCWNoYXIgYnVmWzFdOworCQlyZXR1cm4geGVjZmctPmZpbmRfZnVuYyhib2wsIGVvbCAtIGJvbCwgYnVmLCAxLAorCQkJCQl4ZWNmZy0+ZmluZF9mdW5jX3ByaXYpID49IDA7CisJfQorCisJaWYgKGJvbCA9PSBlb2wpCisJCXJldHVybiAwOworCWlmIChpc2FscGhhKCpib2wpIHx8ICpib2wgPT0gJ18nIHx8ICpib2wgPT0gJyQnKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hvd19mdW5jbmFtZV9saW5lKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIGNoYXIgKmJ1ZiwgY2hhciAqYm9sLCB1bnNpZ25lZCBsbm8pCit7CisJd2hpbGUgKGJvbCA+IGJ1ZikgeworCQljaGFyICplb2wgPSAtLWJvbDsKKworCQl3aGlsZSAoYm9sID4gYnVmICYmIGJvbFstMV0gIT0gJ1xuJykKKwkJCWJvbC0tOworCQlsbm8tLTsKKworCQlpZiAobG5vIDw9IG9wdC0+bGFzdF9zaG93bikKKwkJCWJyZWFrOworCisJCWlmIChtYXRjaF9mdW5jbmFtZShvcHQsIGJvbCwgZW9sKSkgeworCQkJc2hvd19saW5lKG9wdCwgYm9sLCBlb2wsIG5hbWUsIGxubywgJz0nKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X3ByZV9jb250ZXh0KHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICpidWYsCisJCQkgICAgIGNoYXIgKmJvbCwgdW5zaWduZWQgbG5vKQoreworCXVuc2lnbmVkIGN1ciA9IGxubywgZnJvbSA9IDEsIGZ1bmNuYW1lX2xubyA9IDA7CisJaW50IGZ1bmNuYW1lX25lZWRlZCA9IG9wdC0+ZnVuY25hbWU7CisKKwlpZiAob3B0LT5wcmVfY29udGV4dCA8IGxubykKKwkJZnJvbSA9IGxubyAtIG9wdC0+cHJlX2NvbnRleHQ7CisJaWYgKGZyb20gPD0gb3B0LT5sYXN0X3Nob3duKQorCQlmcm9tID0gb3B0LT5sYXN0X3Nob3duICsgMTsKKworCS8qIFJld2luZC4gKi8KKwl3aGlsZSAoYm9sID4gYnVmICYmIGN1ciA+IGZyb20pIHsKKwkJY2hhciAqZW9sID0gLS1ib2w7CisKKwkJd2hpbGUgKGJvbCA+IGJ1ZiAmJiBib2xbLTFdICE9ICdcbicpCisJCQlib2wtLTsKKwkJY3VyLS07CisJCWlmIChmdW5jbmFtZV9uZWVkZWQgJiYgbWF0Y2hfZnVuY25hbWUob3B0LCBib2wsIGVvbCkpIHsKKwkJCWZ1bmNuYW1lX2xubyA9IGN1cjsKKwkJCWZ1bmNuYW1lX25lZWRlZCA9IDA7CisJCX0KKwl9CisKKwkvKiBXZSBuZWVkIHRvIGxvb2sgZXZlbiBmdXJ0aGVyIGJhY2sgdG8gZmluZCBhIGZ1bmN0aW9uIHNpZ25hdHVyZS4gKi8KKwlpZiAob3B0LT5mdW5jbmFtZSAmJiBmdW5jbmFtZV9uZWVkZWQpCisJCXNob3dfZnVuY25hbWVfbGluZShvcHQsIG5hbWUsIGJ1ZiwgYm9sLCBjdXIpOworCisJLyogQmFjayBmb3J3YXJkLiAqLworCXdoaWxlIChjdXIgPCBsbm8pIHsKKwkJY2hhciAqZW9sID0gYm9sLCBzaWduID0gKGN1ciA9PSBmdW5jbmFtZV9sbm8pID8gJz0nIDogJy0nOworCisJCXdoaWxlICgqZW9sICE9ICdcbicpCisJCQllb2wrKzsKKwkJc2hvd19saW5lKG9wdCwgYm9sLCBlb2wsIG5hbWUsIGN1ciwgc2lnbik7CisJCWJvbCA9IGVvbCArIDE7CisJCWN1cisrOworCX0KK30KKwogc3RhdGljIGludCBncmVwX2J1ZmZlcl8xKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpuYW1lLAogCQkJIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgY29sbGVjdF9oaXRzKQogewogCWNoYXIgKmJvbCA9IGJ1ZjsKIAl1bnNpZ25lZCBsb25nIGxlZnQgPSBzaXplOwogCXVuc2lnbmVkIGxubyA9IDE7Ci0Jc3RydWN0IHByZV9jb250ZXh0X2xpbmUgewotCQljaGFyICpib2w7Ci0JCWNoYXIgKmVvbDsKLQl9ICpwcmV2ID0gTlVMTCwgKnBjbDsKIAl1bnNpZ25lZCBsYXN0X2hpdCA9IDA7Ci0JdW5zaWduZWQgbGFzdF9zaG93biA9IDA7CiAJaW50IGJpbmFyeV9tYXRjaF9vbmx5ID0gMDsKLQljb25zdCBjaGFyICpodW5rX21hcmsgPSAiIjsKIAl1bnNpZ25lZCBjb3VudCA9IDA7CiAJZW51bSBncmVwX2NvbnRleHQgY3R4ID0gR1JFUF9DT05URVhUX0hFQUQ7CisJeGRlbWl0Y29uZl90IHhlY2ZnOworCisJb3B0LT5sYXN0X3Nob3duID0gMDsKIAogCWlmIChidWZmZXJfaXNfYmluYXJ5KGJ1Ziwgc2l6ZSkpIHsKIAkJc3dpdGNoIChvcHQtPmJpbmFyeSkgewpAQCAtNDU4LDEwICs2MzUsMTYgQEAKIAkJfQogCX0KIAotCWlmIChvcHQtPnByZV9jb250ZXh0KQotCQlwcmV2ID0geGNhbGxvYyhvcHQtPnByZV9jb250ZXh0LCBzaXplb2YoKnByZXYpKTsKLQlpZiAob3B0LT5wcmVfY29udGV4dCB8fCBvcHQtPnBvc3RfY29udGV4dCkKLQkJaHVua19tYXJrID0gIi0tXG4iOworCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCWlmIChvcHQtPmZ1bmNuYW1lICYmICFvcHQtPnVubWF0Y2hfbmFtZV9vbmx5ICYmICFvcHQtPnN0YXR1c19vbmx5ICYmCisJICAgICFvcHQtPm5hbWVfb25seSAmJiAhYmluYXJ5X21hdGNoX29ubHkgJiYgIWNvbGxlY3RfaGl0cykgeworCQlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcnYgPSB1c2VyZGlmZl9maW5kX2J5X3BhdGgobmFtZSk7CisJCWlmIChkcnYgJiYgZHJ2LT5mdW5jbmFtZS5wYXR0ZXJuKSB7CisJCQljb25zdCBzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgKnBlID0gJmRydi0+ZnVuY25hbWU7CisJCQl4ZGlmZl9zZXRfZmluZF9mdW5jKCZ4ZWNmZywgcGUtPnBhdHRlcm4sIHBlLT5jZmxhZ3MpOworCQkJb3B0LT5wcml2ID0gJnhlY2ZnOworCQl9CisJfQogCiAJd2hpbGUgKGxlZnQpIHsKIAkJY2hhciAqZW9sLCBjaDsKQEAgLTUwOSw0NSArNjkyLDIwIEBACiAJCQkgKiB0aGUgY29udGV4dCB3aGljaCBpcyBub25zZW5zZSwgYnV0IHRoZSB1c2VyCiAJCQkgKiBkZXNlcnZlcyB0byBnZXQgdGhhdCA7LSkuCiAJCQkgKi8KLQkJCWlmIChvcHQtPnByZV9jb250ZXh0KSB7Ci0JCQkJdW5zaWduZWQgZnJvbTsKLQkJCQlpZiAob3B0LT5wcmVfY29udGV4dCA8IGxubykKLQkJCQkJZnJvbSA9IGxubyAtIG9wdC0+cHJlX2NvbnRleHQ7Ci0JCQkJZWxzZQotCQkJCQlmcm9tID0gMTsKLQkJCQlpZiAoZnJvbSA8PSBsYXN0X3Nob3duKQotCQkJCQlmcm9tID0gbGFzdF9zaG93biArIDE7Ci0JCQkJaWYgKGxhc3Rfc2hvd24gJiYgZnJvbSAhPSBsYXN0X3Nob3duICsgMSkKLQkJCQkJZnB1dHMoaHVua19tYXJrLCBzdGRvdXQpOwotCQkJCXdoaWxlIChmcm9tIDwgbG5vKSB7Ci0JCQkJCXBjbCA9ICZwcmV2W2xuby1mcm9tLTFdOwotCQkJCQlzaG93X2xpbmUob3B0LCBwY2wtPmJvbCwgcGNsLT5lb2wsCi0JCQkJCQkgIG5hbWUsIGZyb20sICctJyk7Ci0JCQkJCWZyb20rKzsKLQkJCQl9Ci0JCQkJbGFzdF9zaG93biA9IGxuby0xOwotCQkJfQotCQkJaWYgKGxhc3Rfc2hvd24gJiYgbG5vICE9IGxhc3Rfc2hvd24gKyAxKQotCQkJCWZwdXRzKGh1bmtfbWFyaywgc3Rkb3V0KTsKKwkJCWlmIChvcHQtPnByZV9jb250ZXh0KQorCQkJCXNob3dfcHJlX2NvbnRleHQob3B0LCBuYW1lLCBidWYsIGJvbCwgbG5vKTsKKwkJCWVsc2UgaWYgKG9wdC0+ZnVuY25hbWUpCisJCQkJc2hvd19mdW5jbmFtZV9saW5lKG9wdCwgbmFtZSwgYnVmLCBib2wsIGxubyk7CiAJCQlpZiAoIW9wdC0+Y291bnQpCiAJCQkJc2hvd19saW5lKG9wdCwgYm9sLCBlb2wsIG5hbWUsIGxubywgJzonKTsKLQkJCWxhc3Rfc2hvd24gPSBsYXN0X2hpdCA9IGxubzsKKwkJCWxhc3RfaGl0ID0gbG5vOwogCQl9CiAJCWVsc2UgaWYgKGxhc3RfaGl0ICYmCiAJCQkgbG5vIDw9IGxhc3RfaGl0ICsgb3B0LT5wb3N0X2NvbnRleHQpIHsKIAkJCS8qIElmIHRoZSBsYXN0IGhpdCBpcyB3aXRoaW4gdGhlIHBvc3QgY29udGV4dCwKIAkJCSAqIHdlIG5lZWQgdG8gc2hvdyB0aGlzIGxpbmUuCiAJCQkgKi8KLQkJCWlmIChsYXN0X3Nob3duICYmIGxubyAhPSBsYXN0X3Nob3duICsgMSkKLQkJCQlmcHV0cyhodW5rX21hcmssIHN0ZG91dCk7CiAJCQlzaG93X2xpbmUob3B0LCBib2wsIGVvbCwgbmFtZSwgbG5vLCAnLScpOwotCQkJbGFzdF9zaG93biA9IGxubzsKLQkJfQotCQlpZiAob3B0LT5wcmVfY29udGV4dCkgewotCQkJbWVtbW92ZShwcmV2KzEsIHByZXYsCi0JCQkJKG9wdC0+cHJlX2NvbnRleHQtMSkgKiBzaXplb2YoKnByZXYpKTsKLQkJCXByZXYtPmJvbCA9IGJvbDsKLQkJCXByZXYtPmVvbCA9IGVvbDsKIAkJfQogCiAJbmV4dF9saW5lOgpAQCAtNTU4LDcgKzcxNiw2IEBACiAJCWxubysrOwogCX0KIAotCWZyZWUocHJldik7CiAJaWYgKGNvbGxlY3RfaGl0cykKIAkJcmV0dXJuIDA7CiAKQEAgLTU3MCw2ICs3MjcsOSBAQAogCQlyZXR1cm4gMTsKIAl9CiAKKwl4ZGlmZl9jbGVhcl9maW5kX2Z1bmMoJnhlY2ZnKTsKKwlvcHQtPnByaXYgPSBOVUxMOworCiAJLyogTkVFRFNXT1JLOgogCSAqIFRoZSByZWFsICJncmVwIC1jIGZvbyAqLmMiIGdpdmVzIG1hbnkgImJhci5jOjAiIGxpbmVzLAogCSAqIHdoaWNoIGZlZWxzIG1vc3RseSB1c2VsZXNzIGJ1dCBzb21ldGltZXMgdXNlZnVsLiAgTWF5YmUKZGlmZiAtLWdpdCBhL2dyZXAuaCBiL2dyZXAuaAppbmRleCA0NWEyMjJkLi5mMDBkYjBlIDEwMDY0NAotLS0gYS9ncmVwLmgKKysrIGIvZ3JlcC5oCkBAIC0xLDUgKzEsNiBAQAogI2lmbmRlZiBHUkVQX0gKICNkZWZpbmUgR1JFUF9ICisjaW5jbHVkZSAiY29sb3IuaCIKIAogZW51bSBncmVwX3BhdF90b2tlbiB7CiAJR1JFUF9QQVRURVJOLApAQCAtMzAsNiArMzEsOCBAQAogCWNvbnN0IGNoYXIgKnBhdHRlcm47CiAJZW51bSBncmVwX2hlYWRlcl9maWVsZCBmaWVsZDsKIAlyZWdleF90IHJlZ2V4cDsKKwl1bnNpZ25lZCBmaXhlZDoxOworCXVuc2lnbmVkIHdvcmRfcmVnZXhwOjE7CiB9OwogCiBlbnVtIGdyZXBfZXhwcl9ub2RlIHsKQEAgLTU4LDI2ICs2MSwzMyBAQAogCXN0cnVjdCBncmVwX2V4cHIgKnBhdHRlcm5fZXhwcmVzc2lvbjsKIAlpbnQgcHJlZml4X2xlbmd0aDsKIAlyZWdleF90IHJlZ2V4cDsKLQl1bnNpZ25lZCBsaW5lbnVtOjE7Ci0JdW5zaWduZWQgaW52ZXJ0OjE7Ci0JdW5zaWduZWQgc3RhdHVzX29ubHk6MTsKLQl1bnNpZ25lZCBuYW1lX29ubHk6MTsKLQl1bnNpZ25lZCB1bm1hdGNoX25hbWVfb25seToxOwotCXVuc2lnbmVkIGNvdW50OjE7Ci0JdW5zaWduZWQgd29yZF9yZWdleHA6MTsKLQl1bnNpZ25lZCBmaXhlZDoxOwotCXVuc2lnbmVkIGFsbF9tYXRjaDoxOworCWludCBsaW5lbnVtOworCWludCBpbnZlcnQ7CisJaW50IHN0YXR1c19vbmx5OworCWludCBuYW1lX29ubHk7CisJaW50IHVubWF0Y2hfbmFtZV9vbmx5OworCWludCBjb3VudDsKKwlpbnQgd29yZF9yZWdleHA7CisJaW50IGZpeGVkOworCWludCBhbGxfbWF0Y2g7CiAjZGVmaW5lIEdSRVBfQklOQVJZX0RFRkFVTFQJMAogI2RlZmluZSBHUkVQX0JJTkFSWV9OT01BVENICTEKICNkZWZpbmUgR1JFUF9CSU5BUllfVEVYVAkyCi0JdW5zaWduZWQgYmluYXJ5OjI7Ci0JdW5zaWduZWQgZXh0ZW5kZWQ6MTsKLQl1bnNpZ25lZCByZWxhdGl2ZToxOwotCXVuc2lnbmVkIHBhdGhuYW1lOjE7Ci0JdW5zaWduZWQgbnVsbF9mb2xsb3dpbmdfbmFtZToxOworCWludCBiaW5hcnk7CisJaW50IGV4dGVuZGVkOworCWludCByZWxhdGl2ZTsKKwlpbnQgcGF0aG5hbWU7CisJaW50IG51bGxfZm9sbG93aW5nX25hbWU7CisJaW50IGNvbG9yOworCWludCBmdW5jbmFtZTsKKwljaGFyIGNvbG9yX21hdGNoW0NPTE9SX01BWExFTl07CisJY29uc3QgY2hhciAqY29sb3JfZXh0ZXJuYWw7CiAJaW50IHJlZ2ZsYWdzOwogCXVuc2lnbmVkIHByZV9jb250ZXh0OwogCXVuc2lnbmVkIHBvc3RfY29udGV4dDsKKwl1bnNpZ25lZCBsYXN0X3Nob3duOworCWludCBzaG93X2h1bmtfbWFyazsKKwl2b2lkICpwcml2OwogfTsKIAogZXh0ZXJuIHZvaWQgYXBwZW5kX2dyZXBfcGF0dGVybihzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqcGF0LCBjb25zdCBjaGFyICpvcmlnaW4sIGludCBubywgZW51bSBncmVwX3BhdF90b2tlbiB0KTsKZGlmZiAtLWdpdCBhL2hhc2gtb2JqZWN0LmMgYi9oYXNoLW9iamVjdC5jCmluZGV4IGFkZmQ1MzMuLjk0NTVkZDAgMTAwNjQ0Ci0tLSBhL2hhc2gtb2JqZWN0LmMKKysrIGIvaGFzaC1vYmplY3QuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlICJibG9iLmgiCiAjaW5jbHVkZSAicXVvdGUuaCIKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKIAogc3RhdGljIHZvaWQgaGFzaF9mZChpbnQgZmQsIGNvbnN0IGNoYXIgKnR5cGUsIGludCB3cml0ZV9vYmplY3QsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CkBAIC0yOCw3ICsyOSw3IEBACiAJaW50IGZkOwogCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CiAJaWYgKGZkIDwgMCkKLQkJZGllKCJDYW5ub3Qgb3BlbiAlcyIsIHBhdGgpOworCQlkaWVfZXJybm8oIkNhbm5vdCBvcGVuICclcyciLCBwYXRoKTsKIAloYXNoX2ZkKGZkLCB0eXBlLCB3cml0ZV9vYmplY3QsIHZwYXRoKTsKIH0KIApAQCAtODEsNyArODIsMTAgQEAKIAogCXR5cGUgPSBibG9iX3R5cGU7CiAKLQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBoYXNoX29iamVjdF9vcHRpb25zLCBoYXNoX29iamVjdF91c2FnZSwgMCk7CisJZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIGhhc2hfb2JqZWN0X29wdGlvbnMsCisJCQkgICAgIGhhc2hfb2JqZWN0X3VzYWdlLCAwKTsKIAogCWlmICh3cml0ZV9vYmplY3QpIHsKIAkJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwpkaWZmIC0tZ2l0IGEvaGVscC5jIGIvaGVscC5jCmluZGV4IGZkODdiYjUuLjI5NDMzN2UgMTAwNjQ0Ci0tLSBhL2hlbHAuYworKysgYi9oZWxwLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAJaWYgKHNwYWNlIDwgbWF4X2NvbHMpCiAJCWNvbHMgPSBtYXhfY29scyAvIHNwYWNlOwotCXJvd3MgPSAoY21kcy0+Y250ICsgY29scyAtIDEpIC8gY29sczsKKwlyb3dzID0gRElWX1JPVU5EX1VQKGNtZHMtPmNudCwgY29scyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CiAJCXByaW50ZigiICAiKTsKQEAgLTMwMiw3ICszMDIsNyBAQAogCXN0cnVjdCBjbWRuYW1lcyBtYWluX2NtZHMsIG90aGVyX2NtZHM7CiAKIAltZW1zZXQoJm1haW5fY21kcywgMCwgc2l6ZW9mKG1haW5fY21kcykpOwotCW1lbXNldCgmb3RoZXJfY21kcywgMCwgc2l6ZW9mKG1haW5fY21kcykpOworCW1lbXNldCgmb3RoZXJfY21kcywgMCwgc2l6ZW9mKG90aGVyX2NtZHMpKTsKIAltZW1zZXQoJmFsaWFzZXMsIDAsIHNpemVvZihhbGlhc2VzKSk7CiAKIAlnaXRfY29uZmlnKGdpdF91bmtub3duX2NtZF9jb25maWcsIE5VTEwpOwpAQCAtMzM0LDcgKzMzNCw3IEBACiAJCWNvbnN0IGNoYXIgKmFzc3VtZWQgPSBtYWluX2NtZHMubmFtZXNbMF0tPm5hbWU7CiAJCW1haW5fY21kcy5uYW1lc1swXSA9IE5VTEw7CiAJCWNsZWFuX2NtZG5hbWVzKCZtYWluX2NtZHMpOwotCQlmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgcHJvZ3JhbSBuYW1lZCAnJXMnLCAiCisJCWZwcmludGYoc3RkZXJyLCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsICIKIAkJCSJ3aGljaCBkb2VzIG5vdCBleGlzdC5cbiIKIAkJCSJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcydcbiIsCiAJCQljbWQsIGFzc3VtZWQpOwpkaWZmIC0tZ2l0IGEvaHR0cC1wdXNoLmMgYi9odHRwLXB1c2guYwppbmRleCBmNzQzYzk3Li4wMGU4M2RjIDEwMDY0NAotLS0gYS9odHRwLXB1c2guYworKysgYi9odHRwLXB1c2guYwpAQCAtMSw2ICsxLDUgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImNvbW1pdC5oIgotI2luY2x1ZGUgInBhY2suaCIKICNpbmNsdWRlICJ0YWcuaCIKICNpbmNsdWRlICJibG9iLmgiCiAjaW5jbHVkZSAiaHR0cC5oIgpAQCAtMTAsNiArOSw3IEBACiAjaW5jbHVkZSAiZXhlY19jbWQuaCIKICNpbmNsdWRlICJyZW1vdGUuaCIKICNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgogCiAjaW5jbHVkZSA8ZXhwYXQuaD4KIApAQCAtMjYsNyArMjYsNiBAQAogI2VuZGlmCiAKICNkZWZpbmUgUFJFVl9CVUZfU0laRSA0MDk2Ci0jZGVmaW5lIFJBTkdFX0hFQURFUl9TSVpFIDMwCiAKIC8qIERBViBtZXRob2RzICovCiAjZGVmaW5lIERBVl9MT0NLICJMT0NLIgpAQCAtNzUsOCArNzQsNiBAQAogc3RhdGljIGludCBhYm9ydGVkOwogc3RhdGljIHNpZ25lZCBjaGFyIHJlbW90ZV9kaXJfZXhpc3RzWzI1Nl07CiAKLXN0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqbm9fcHJhZ21hX2hlYWRlcjsKLQogc3RhdGljIGludCBwdXNoX3ZlcmJvc2VseTsKIHN0YXRpYyBpbnQgcHVzaF9hbGwgPSBNQVRDSF9SRUZTX05PTkU7CiBzdGF0aWMgaW50IGZvcmNlX2FsbDsKQEAgLTk2LDcgKzkzLDcgQEAKIAlzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2tzOwogfTsKIAotc3RhdGljIHN0cnVjdCByZXBvICpyZW1vdGU7CitzdGF0aWMgc3RydWN0IHJlcG8gKnJlcG87CiAKIGVudW0gdHJhbnNmZXJfc3RhdGUgewogCU5FRURfRkVUQ0gsCkBAIC0xMTgsMTkgKzExNSwxMCBAQAogCXN0cnVjdCByZW1vdGVfbG9jayAqbG9jazsKIAlzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVyczsKIAlzdHJ1Y3QgYnVmZmVyIGJ1ZmZlcjsKLQljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKLQljaGFyIHRtcGZpbGVbUEFUSF9NQVhdOwotCWludCBsb2NhbF9maWxlbm87Ci0JRklMRSAqbG9jYWxfc3RyZWFtOwogCWVudW0gdHJhbnNmZXJfc3RhdGUgc3RhdGU7CiAJQ1VSTGNvZGUgY3VybF9yZXN1bHQ7CiAJY2hhciBlcnJvcnN0cltDVVJMX0VSUk9SX1NJWkVdOwogCWxvbmcgaHR0cF9jb2RlOwotCXVuc2lnbmVkIGNoYXIgcmVhbF9zaGExWzIwXTsKLQlnaXRfU0hBX0NUWCBjOwotCXpfc3RyZWFtIHN0cmVhbTsKLQlpbnQgenJldDsKLQlpbnQgcmVuYW1lOwogCXZvaWQgKnVzZXJEYXRhOwogCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwogCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpuZXh0OwpAQCAtMTUyLDYgKzE0MCw3IEBACiAJY2hhciAqdXJsOwogCWNoYXIgKm93bmVyOwogCWNoYXIgKnRva2VuOworCWNoYXIgdG1wZmlsZV9zdWZmaXhbNDFdOwogCXRpbWVfdCBzdGFydF90aW1lOwogCWxvbmcgdGltZW91dDsKIAlpbnQgcmVmcmVzaGluZzsKQEAgLTE3Nyw2ICsxNjYsNjYgQEAKIAlzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqcGFyZW50OwogfTsKIAorLyogZ2V0X2Rhdl90b2tlbl9oZWFkZXJzIG9wdGlvbnMgKi8KK2VudW0gZGF2X2hlYWRlcl9mbGFnIHsKKwlEQVZfSEVBREVSX0lGID0gKDF1IDw8IDApLAorCURBVl9IRUFERVJfTE9DSyA9ICgxdSA8PCAxKSwKKwlEQVZfSEVBREVSX1RJTUVPVVQgPSAoMXUgPDwgMikKK307CisKK3N0YXRpYyBjaGFyICp4bWxfZW50aXRpZXMoY2hhciAqcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXdoaWxlICgqcykgeworCQlzaXplX3QgbGVuID0gc3RyY3NwbihzLCAiXCI8PiYiKTsKKwkJc3RyYnVmX2FkZCgmYnVmLCBzLCBsZW4pOworCQlzICs9IGxlbjsKKwkJc3dpdGNoICgqcykgeworCQljYXNlICciJzoKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiZxdW90OyIpOworCQkJYnJlYWs7CisJCWNhc2UgJzwnOgorCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiJmx0OyIpOworCQkJYnJlYWs7CisJCWNhc2UgJz4nOgorCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiJmd0OyIpOworCQkJYnJlYWs7CisJCWNhc2UgJyYnOgorCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiJmFtcDsiKTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwkJfQorCQlzKys7CisJfQorCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKmdldF9kYXZfdG9rZW5faGVhZGVycyhzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2ssIGVudW0gZGF2X2hlYWRlcl9mbGFnIG9wdGlvbnMpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnMgPSBOVUxMOworCisJaWYgKG9wdGlvbnMgJiBEQVZfSEVBREVSX0lGKSB7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJJZjogKDwlcz4pIiwgbG9jay0+dG9rZW4pOworCQlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCBidWYuYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCX0KKwlpZiAob3B0aW9ucyAmIERBVl9IRUFERVJfTE9DSykgeworCQlzdHJidWZfYWRkZigmYnVmLCAiTG9jay1Ub2tlbjogPCVzPiIsIGxvY2stPnRva2VuKTsKKwkJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgYnVmLmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisJaWYgKG9wdGlvbnMgJiBEQVZfSEVBREVSX1RJTUVPVVQpIHsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIlRpbWVvdXQ6IFNlY29uZC0lbGQiLCBsb2NrLT50aW1lb3V0KTsKKwkJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgYnVmLmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gZGF2X2hlYWRlcnM7Cit9CisKIHN0YXRpYyB2b2lkIGZpbmlzaF9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KTsKIHN0YXRpYyB2b2lkIHJlbGVhc2VfcmVxdWVzdChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCk7CiAKQEAgLTE4OSwxNjUgKzIzOCwzMCBAQAogfQogCiAjaWZkZWYgVVNFX0NVUkxfTVVMVEkKLXN0YXRpYyBzaXplX3QgZndyaXRlX3NoYTFfZmlsZSh2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsCi0JCQkgICAgICAgdm9pZCAqZGF0YSkKLXsKLQl1bnNpZ25lZCBjaGFyIGV4cG5bNDA5Nl07Ci0Jc2l6ZV90IHNpemUgPSBlbHRzaXplICogbm1lbWI7Ci0JaW50IHBvc24gPSAwOwotCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0ID0gKHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICopZGF0YTsKLQlkbyB7Ci0JCXNzaXplX3QgcmV0dmFsID0geHdyaXRlKHJlcXVlc3QtPmxvY2FsX2ZpbGVubywKLQkJCQkgICAgICAgKGNoYXIgKikgcHRyICsgcG9zbiwgc2l6ZSAtIHBvc24pOwotCQlpZiAocmV0dmFsIDwgMCkKLQkJCXJldHVybiBwb3NuOwotCQlwb3NuICs9IHJldHZhbDsKLQl9IHdoaWxlIChwb3NuIDwgc2l6ZSk7Ci0KLQlyZXF1ZXN0LT5zdHJlYW0uYXZhaWxfaW4gPSBzaXplOwotCXJlcXVlc3QtPnN0cmVhbS5uZXh0X2luID0gcHRyOwotCWRvIHsKLQkJcmVxdWVzdC0+c3RyZWFtLm5leHRfb3V0ID0gZXhwbjsKLQkJcmVxdWVzdC0+c3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihleHBuKTsKLQkJcmVxdWVzdC0+enJldCA9IGdpdF9pbmZsYXRlKCZyZXF1ZXN0LT5zdHJlYW0sIFpfU1lOQ19GTFVTSCk7Ci0JCWdpdF9TSEExX1VwZGF0ZSgmcmVxdWVzdC0+YywgZXhwbiwKLQkJCSAgICBzaXplb2YoZXhwbikgLSByZXF1ZXN0LT5zdHJlYW0uYXZhaWxfb3V0KTsKLQl9IHdoaWxlIChyZXF1ZXN0LT5zdHJlYW0uYXZhaWxfaW4gJiYgcmVxdWVzdC0+enJldCA9PSBaX09LKTsKLQlkYXRhX3JlY2VpdmVkKys7Ci0JcmV0dXJuIHNpemU7Ci19CiAKIHN0YXRpYyB2b2lkIHN0YXJ0X2ZldGNoX2xvb3NlKHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQogewotCWNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHJlcXVlc3QtPm9iai0+c2hhMSk7Ci0JY2hhciAqZmlsZW5hbWU7Ci0JY2hhciBwcmV2ZmlsZVtQQVRIX01BWF07Ci0JY2hhciAqdXJsOwotCWNoYXIgKnBvc247Ci0JaW50IHByZXZsb2NhbDsKLQl1bnNpZ25lZCBjaGFyIHByZXZfYnVmW1BSRVZfQlVGX1NJWkVdOwotCXNzaXplX3QgcHJldl9yZWFkID0gMDsKLQlsb25nIHByZXZfcG9zbiA9IDA7Ci0JY2hhciByYW5nZVtSQU5HRV9IRUFERVJfU0laRV07Ci0Jc3RydWN0IGN1cmxfc2xpc3QgKnJhbmdlX2hlYWRlciA9IE5VTEw7CiAJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKm9ial9yZXE7CiAKLQlmaWxlbmFtZSA9IHNoYTFfZmlsZV9uYW1lKHJlcXVlc3QtPm9iai0+c2hhMSk7Ci0Jc25wcmludGYocmVxdWVzdC0+ZmlsZW5hbWUsIHNpemVvZihyZXF1ZXN0LT5maWxlbmFtZSksICIlcyIsIGZpbGVuYW1lKTsKLQlzbnByaW50ZihyZXF1ZXN0LT50bXBmaWxlLCBzaXplb2YocmVxdWVzdC0+dG1wZmlsZSksCi0JCSAiJXMudGVtcCIsIGZpbGVuYW1lKTsKLQotCXNucHJpbnRmKHByZXZmaWxlLCBzaXplb2YocHJldmZpbGUpLCAiJXMucHJldiIsIHJlcXVlc3QtPmZpbGVuYW1lKTsKLQl1bmxpbmsocHJldmZpbGUpOwotCXJlbmFtZShyZXF1ZXN0LT50bXBmaWxlLCBwcmV2ZmlsZSk7Ci0JdW5saW5rKHJlcXVlc3QtPnRtcGZpbGUpOwotCi0JaWYgKHJlcXVlc3QtPmxvY2FsX2ZpbGVubyAhPSAtMSkKLQkJZXJyb3IoImZkIGxlYWthZ2UgaW4gc3RhcnQ6ICVkIiwgcmVxdWVzdC0+bG9jYWxfZmlsZW5vKTsKLQlyZXF1ZXN0LT5sb2NhbF9maWxlbm8gPSBvcGVuKHJlcXVlc3QtPnRtcGZpbGUsCi0JCQkJICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOwotCS8qIFRoaXMgY291bGQgaGF2ZSBmYWlsZWQgZHVlIHRvIHRoZSAibGF6eSBkaXJlY3RvcnkgY3JlYXRpb24iOwotCSAqIHRyeSB0byBta2RpciB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudC4KLQkgKi8KLQlpZiAocmVxdWVzdC0+bG9jYWxfZmlsZW5vIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQpIHsKLQkJY2hhciAqZGlyID0gc3RycmNocihyZXF1ZXN0LT50bXBmaWxlLCAnLycpOwotCQlpZiAoZGlyKSB7Ci0JCQkqZGlyID0gMDsKLQkJCW1rZGlyKHJlcXVlc3QtPnRtcGZpbGUsIDA3NzcpOwotCQkJKmRpciA9ICcvJzsKLQkJfQotCQlyZXF1ZXN0LT5sb2NhbF9maWxlbm8gPSBvcGVuKHJlcXVlc3QtPnRtcGZpbGUsCi0JCQkJCSAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKLQl9Ci0KLQlpZiAocmVxdWVzdC0+bG9jYWxfZmlsZW5vIDwgMCkgeworCW9ial9yZXEgPSBuZXdfaHR0cF9vYmplY3RfcmVxdWVzdChyZXBvLT51cmwsIHJlcXVlc3QtPm9iai0+c2hhMSk7CisJaWYgKG9ial9yZXEgPT0gTlVMTCkgewogCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7Ci0JCWVycm9yKCJDb3VsZG4ndCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJXMgZm9yICVzOiAlcyIsCi0JCSAgICAgIHJlcXVlc3QtPnRtcGZpbGUsIHJlcXVlc3QtPmZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwogCQlyZXR1cm47CiAJfQogCi0JbWVtc2V0KCZyZXF1ZXN0LT5zdHJlYW0sIDAsIHNpemVvZihyZXF1ZXN0LT5zdHJlYW0pKTsKLQotCWdpdF9pbmZsYXRlX2luaXQoJnJlcXVlc3QtPnN0cmVhbSk7Ci0KLQlnaXRfU0hBMV9Jbml0KCZyZXF1ZXN0LT5jKTsKLQotCXVybCA9IHhtYWxsb2Moc3RybGVuKHJlbW90ZS0+dXJsKSArIDUwKTsKLQlyZXF1ZXN0LT51cmwgPSB4bWFsbG9jKHN0cmxlbihyZW1vdGUtPnVybCkgKyA1MCk7Ci0Jc3RyY3B5KHVybCwgcmVtb3RlLT51cmwpOwotCXBvc24gPSB1cmwgKyBzdHJsZW4ocmVtb3RlLT51cmwpOwotCXN0cmNweShwb3NuLCAib2JqZWN0cy8iKTsKLQlwb3NuICs9IDg7Ci0JbWVtY3B5KHBvc24sIGhleCwgMik7Ci0JcG9zbiArPSAyOwotCSoocG9zbisrKSA9ICcvJzsKLQlzdHJjcHkocG9zbiwgaGV4ICsgMik7Ci0Jc3RyY3B5KHJlcXVlc3QtPnVybCwgdXJsKTsKLQotCS8qIElmIGEgcHJldmlvdXMgdGVtcCBmaWxlIGlzIHByZXNlbnQsIHByb2Nlc3Mgd2hhdCB3YXMgYWxyZWFkeQotCSAgIGZldGNoZWQuICovCi0JcHJldmxvY2FsID0gb3BlbihwcmV2ZmlsZSwgT19SRE9OTFkpOwotCWlmIChwcmV2bG9jYWwgIT0gLTEpIHsKLQkJZG8gewotCQkJcHJldl9yZWFkID0geHJlYWQocHJldmxvY2FsLCBwcmV2X2J1ZiwgUFJFVl9CVUZfU0laRSk7Ci0JCQlpZiAocHJldl9yZWFkPjApIHsKLQkJCQlpZiAoZndyaXRlX3NoYTFfZmlsZShwcmV2X2J1ZiwKLQkJCQkJCSAgICAgMSwKLQkJCQkJCSAgICAgcHJldl9yZWFkLAotCQkJCQkJICAgICByZXF1ZXN0KSA9PSBwcmV2X3JlYWQpIHsKLQkJCQkJcHJldl9wb3NuICs9IHByZXZfcmVhZDsKLQkJCQl9IGVsc2UgewotCQkJCQlwcmV2X3JlYWQgPSAtMTsKLQkJCQl9Ci0JCQl9Ci0JCX0gd2hpbGUgKHByZXZfcmVhZCA+IDApOwotCQljbG9zZShwcmV2bG9jYWwpOwotCX0KLQl1bmxpbmsocHJldmZpbGUpOwotCi0JLyogUmVzZXQgaW5mbGF0ZS9TSEExIGlmIHRoZXJlIHdhcyBhbiBlcnJvciByZWFkaW5nIHRoZSBwcmV2aW91cyB0ZW1wCi0JICAgZmlsZTsgYWxzbyByZXdpbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9jYWwgZmlsZS4gKi8KLQlpZiAocHJldl9yZWFkID09IC0xKSB7Ci0JCW1lbXNldCgmcmVxdWVzdC0+c3RyZWFtLCAwLCBzaXplb2YocmVxdWVzdC0+c3RyZWFtKSk7Ci0JCWdpdF9pbmZsYXRlX2luaXQoJnJlcXVlc3QtPnN0cmVhbSk7Ci0JCWdpdF9TSEExX0luaXQoJnJlcXVlc3QtPmMpOwotCQlpZiAocHJldl9wb3NuPjApIHsKLQkJCXByZXZfcG9zbiA9IDA7Ci0JCQlsc2VlayhyZXF1ZXN0LT5sb2NhbF9maWxlbm8sIDAsIFNFRUtfU0VUKTsKLQkJCWZ0cnVuY2F0ZShyZXF1ZXN0LT5sb2NhbF9maWxlbm8sIDApOwotCQl9Ci0JfQotCi0Jc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QgPSBvYmpfcmVxLT5zbG90OwogCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX3Jlc3BvbnNlOwogCXNsb3QtPmNhbGxiYWNrX2RhdGEgPSByZXF1ZXN0OwogCXJlcXVlc3QtPnNsb3QgPSBzbG90OwotCi0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIHJlcXVlc3QpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfc2hhMV9maWxlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRVJST1JCVUZGRVIsIHJlcXVlc3QtPmVycm9yc3RyKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19wcmFnbWFfaGVhZGVyKTsKLQotCS8qIElmIHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBkYXRhIGZyb20gYSBwcmV2aW91cyBmZXRjaAotCSAgIGF0dGVtcHQsIG9ubHkgZmV0Y2ggdGhlIGRhdGEgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlLiAqLwotCWlmIChwcmV2X3Bvc24+MCkgewotCQlpZiAocHVzaF92ZXJib3NlbHkpCi0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkiUmVzdW1pbmcgZmV0Y2ggb2Ygb2JqZWN0ICVzIGF0IGJ5dGUgJWxkXG4iLAotCQkJCWhleCwgcHJldl9wb3NuKTsKLQkJc3ByaW50ZihyYW5nZSwgIlJhbmdlOiBieXRlcz0lbGQtIiwgcHJldl9wb3NuKTsKLQkJcmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQocmFuZ2VfaGVhZGVyLCByYW5nZSk7Ci0JCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwKLQkJCQkgQ1VSTE9QVF9IVFRQSEVBREVSLCByYW5nZV9oZWFkZXIpOwotCX0KKwlyZXF1ZXN0LT51c2VyRGF0YSA9IG9ial9yZXE7CiAKIAkvKiBUcnkgdG8gZ2V0IHRoZSByZXF1ZXN0IHN0YXJ0ZWQsIGFib3J0IHRoZSByZXF1ZXN0IG9uIGVycm9yICovCiAJcmVxdWVzdC0+c3RhdGUgPSBSVU5fRkVUQ0hfTE9PU0U7CiAJaWYgKCFzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgewogCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBHRVQgcmVxdWVzdFxuIik7Ci0JCXJlbW90ZS0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOworCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKIAkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOwogCX0KIH0KQEAgLTM1NiwxNiArMjcwLDggQEAKIHsKIAljaGFyICpoZXggPSBzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpOwogCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwotCWNoYXIgKnBvc247CiAKLQlyZXF1ZXN0LT51cmwgPSB4bWFsbG9jKHN0cmxlbihyZW1vdGUtPnVybCkgKyAxMyk7Ci0Jc3RyY3B5KHJlcXVlc3QtPnVybCwgcmVtb3RlLT51cmwpOwotCXBvc24gPSByZXF1ZXN0LT51cmwgKyBzdHJsZW4ocmVtb3RlLT51cmwpOwotCXN0cmNweShwb3NuLCAib2JqZWN0cy8iKTsKLQlwb3NuICs9IDg7Ci0JbWVtY3B5KHBvc24sIGhleCwgMik7Ci0JcG9zbiArPSAyOwotCXN0cmNweShwb3NuLCAiLyIpOworCXJlcXVlc3QtPnVybCA9IGdldF9yZW1vdGVfb2JqZWN0X3VybChyZXBvLT51cmwsIGhleCwgMSk7CiAKIAlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CiAJc2xvdC0+Y2FsbGJhY2tfZnVuYyA9IHByb2Nlc3NfcmVzcG9uc2U7CkBAIC0zODksMjEgKzI5NSwxNSBAQAogCiBzdGF0aWMgdm9pZCBzdGFydF9mZXRjaF9wYWNrZWQoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCiB7Ci0JY2hhciAqdXJsOwogCXN0cnVjdCBwYWNrZWRfZ2l0ICp0YXJnZXQ7Ci0JRklMRSAqcGFja2ZpbGU7Ci0JY2hhciAqZmlsZW5hbWU7Ci0JbG9uZyBwcmV2X3Bvc24gPSAwOwotCWNoYXIgcmFuZ2VbUkFOR0VfSEVBREVSX1NJWkVdOwotCXN0cnVjdCBjdXJsX3NsaXN0ICpyYW5nZV9oZWFkZXIgPSBOVUxMOwogCiAJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKmNoZWNrX3JlcXVlc3QgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7Ci0Jc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxOwogCi0JdGFyZ2V0ID0gZmluZF9zaGExX3BhY2socmVxdWVzdC0+b2JqLT5zaGExLCByZW1vdGUtPnBhY2tzKTsKKwl0YXJnZXQgPSBmaW5kX3NoYTFfcGFjayhyZXF1ZXN0LT5vYmotPnNoYTEsIHJlcG8tPnBhY2tzKTsKIAlpZiAoIXRhcmdldCkgewogCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBmZXRjaCAlcywgd2lsbCBub3QgYmUgYWJsZSB0byB1cGRhdGUgc2VydmVyIGluZm8gcmVmc1xuIiwgc2hhMV90b19oZXgocmVxdWVzdC0+b2JqLT5zaGExKSk7Ci0JCXJlbW90ZS0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOworCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CiAJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKIAkJcmV0dXJuOwogCX0KQEAgLTQxMSw2NyArMzExLDM2IEBACiAJZnByaW50ZihzdGRlcnIsCSJGZXRjaGluZyBwYWNrICVzXG4iLCBzaGExX3RvX2hleCh0YXJnZXQtPnNoYTEpKTsKIAlmcHJpbnRmKHN0ZGVyciwgIiB3aGljaCBjb250YWlucyAlc1xuIiwgc2hhMV90b19oZXgocmVxdWVzdC0+b2JqLT5zaGExKSk7CiAKLQlmaWxlbmFtZSA9IHNoYTFfcGFja19uYW1lKHRhcmdldC0+c2hhMSk7Ci0Jc25wcmludGYocmVxdWVzdC0+ZmlsZW5hbWUsIHNpemVvZihyZXF1ZXN0LT5maWxlbmFtZSksICIlcyIsIGZpbGVuYW1lKTsKLQlzbnByaW50ZihyZXF1ZXN0LT50bXBmaWxlLCBzaXplb2YocmVxdWVzdC0+dG1wZmlsZSksCi0JCSAiJXMudGVtcCIsIGZpbGVuYW1lKTsKLQotCXVybCA9IHhtYWxsb2Moc3RybGVuKHJlbW90ZS0+dXJsKSArIDY0KTsKLQlzcHJpbnRmKHVybCwgIiVzb2JqZWN0cy9wYWNrL3BhY2stJXMucGFjayIsCi0JCXJlbW90ZS0+dXJsLCBzaGExX3RvX2hleCh0YXJnZXQtPnNoYTEpKTsKKwlwcmVxID0gbmV3X2h0dHBfcGFja19yZXF1ZXN0KHRhcmdldCwgcmVwby0+dXJsKTsKKwlpZiAocHJlcSA9PSBOVUxMKSB7CisJCXJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CisJCXJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzID0gMDsKKwkJcmV0dXJuOworCX0KKwlwcmVxLT5sc3QgPSAmcmVwby0+cGFja3M7CiAKIAkvKiBNYWtlIHN1cmUgdGhlcmUgaXNuJ3QgYW5vdGhlciBvcGVuIHJlcXVlc3QgZm9yIHRoaXMgcGFjayAqLwogCXdoaWxlIChjaGVja19yZXF1ZXN0KSB7CiAJCWlmIChjaGVja19yZXF1ZXN0LT5zdGF0ZSA9PSBSVU5fRkVUQ0hfUEFDS0VEICYmCi0JCSAgICAhc3RyY21wKGNoZWNrX3JlcXVlc3QtPnVybCwgdXJsKSkgewotCQkJZnJlZSh1cmwpOworCQkgICAgIXN0cmNtcChjaGVja19yZXF1ZXN0LT51cmwsIHByZXEtPnVybCkpIHsKKwkJCXJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CiAJCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2hlY2tfcmVxdWVzdCA9IGNoZWNrX3JlcXVlc3QtPm5leHQ7CiAJfQogCi0JcGFja2ZpbGUgPSBmb3BlbihyZXF1ZXN0LT50bXBmaWxlLCAiYSIpOwotCWlmICghcGFja2ZpbGUpIHsKLQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gb3BlbiBsb2NhbCBmaWxlICVzIGZvciBwYWNrIiwKLQkJCXJlcXVlc3QtPnRtcGZpbGUpOwotCQlyZW1vdGUtPmNhbl91cGRhdGVfaW5mb19yZWZzID0gMDsKLQkJZnJlZSh1cmwpOwotCQlyZXR1cm47Ci0JfQotCi0Jc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwotCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX3Jlc3BvbnNlOwotCXNsb3QtPmNhbGxiYWNrX2RhdGEgPSByZXF1ZXN0OwotCXJlcXVlc3QtPnNsb3QgPSBzbG90OwotCXJlcXVlc3QtPmxvY2FsX3N0cmVhbSA9IHBhY2tmaWxlOwotCXJlcXVlc3QtPnVzZXJEYXRhID0gdGFyZ2V0OwotCi0JcmVxdWVzdC0+dXJsID0gdXJsOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCBwYWNrZmlsZSk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZSk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgbm9fcHJhZ21hX2hlYWRlcik7Ci0Jc2xvdC0+bG9jYWwgPSBwYWNrZmlsZTsKLQotCS8qIElmIHRoZXJlIGlzIGRhdGEgcHJlc2VudCBmcm9tIGEgcHJldmlvdXMgdHJhbnNmZXIgYXR0ZW1wdCwKLQkgICByZXN1bWUgd2hlcmUgaXQgbGVmdCBvZmYgKi8KLQlwcmV2X3Bvc24gPSBmdGVsbChwYWNrZmlsZSk7Ci0JaWYgKHByZXZfcG9zbj4wKSB7Ci0JCWlmIChwdXNoX3ZlcmJvc2VseSkKLQkJCWZwcmludGYoc3RkZXJyLAotCQkJCSJSZXN1bWluZyBmZXRjaCBvZiBwYWNrICVzIGF0IGJ5dGUgJWxkXG4iLAotCQkJCXNoYTFfdG9faGV4KHRhcmdldC0+c2hhMSksIHByZXZfcG9zbik7Ci0JCXNwcmludGYocmFuZ2UsICJSYW5nZTogYnl0ZXM9JWxkLSIsIHByZXZfcG9zbik7Ci0JCXJhbmdlX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHJhbmdlX2hlYWRlciwgcmFuZ2UpOwotCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgcmFuZ2VfaGVhZGVyKTsKLQl9CisJcHJlcS0+c2xvdC0+Y2FsbGJhY2tfZnVuYyA9IHByb2Nlc3NfcmVzcG9uc2U7CisJcHJlcS0+c2xvdC0+Y2FsbGJhY2tfZGF0YSA9IHJlcXVlc3Q7CisJcmVxdWVzdC0+c2xvdCA9IHByZXEtPnNsb3Q7CisJcmVxdWVzdC0+dXNlckRhdGEgPSBwcmVxOwogCiAJLyogVHJ5IHRvIGdldCB0aGUgcmVxdWVzdCBzdGFydGVkLCBhYm9ydCB0aGUgcmVxdWVzdCBvbiBlcnJvciAqLwogCXJlcXVlc3QtPnN0YXRlID0gUlVOX0ZFVENIX1BBQ0tFRDsKLQlpZiAoIXN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJaWYgKCFzdGFydF9hY3RpdmVfc2xvdChwcmVxLT5zbG90KSkgewogCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBHRVQgcmVxdWVzdFxuIik7Ci0JCXJlbW90ZS0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOworCQlyZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpOworCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CiAJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKIAl9CiB9CkBAIC00ODAsNyArMzQ5LDcgQEAKIHsKIAljaGFyICpoZXggPSBzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpOwogCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwotCWNoYXIgKnBvc247CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJY2hhciBoZHJbNTBdOwogCXZvaWQgKnVucGFja2VkOwpAQCAtNTE5LDIxICszODgsMTMgQEAKIAogCXJlcXVlc3QtPmJ1ZmZlci5idWYubGVuID0gc3RyZWFtLnRvdGFsX291dDsKIAotCXJlcXVlc3QtPnVybCA9IHhtYWxsb2Moc3RybGVuKHJlbW90ZS0+dXJsKSArCi0JCQkgICAgICAgc3RybGVuKHJlcXVlc3QtPmxvY2stPnRva2VuKSArIDUxKTsKLQlzdHJjcHkocmVxdWVzdC0+dXJsLCByZW1vdGUtPnVybCk7Ci0JcG9zbiA9IHJlcXVlc3QtPnVybCArIHN0cmxlbihyZW1vdGUtPnVybCk7Ci0Jc3RyY3B5KHBvc24sICJvYmplY3RzLyIpOwotCXBvc24gKz0gODsKLQltZW1jcHkocG9zbiwgaGV4LCAyKTsKLQlwb3NuICs9IDI7Ci0JKihwb3NuKyspID0gJy8nOwotCXN0cmNweShwb3NuLCBoZXggKyAyKTsKLQlyZXF1ZXN0LT5kZXN0ID0geG1hbGxvYyhzdHJsZW4ocmVxdWVzdC0+dXJsKSArIDE0KTsKLQlzcHJpbnRmKHJlcXVlc3QtPmRlc3QsICJEZXN0aW5hdGlvbjogJXMiLCByZXF1ZXN0LT51cmwpOwotCXBvc24gKz0gMzg7Ci0JKihwb3NuKyspID0gJ18nOwotCXN0cmNweShwb3NuLCByZXF1ZXN0LT5sb2NrLT50b2tlbik7CisJc3RyYnVmX2FkZHN0cigmYnVmLCAiRGVzdGluYXRpb246ICIpOworCWFwcGVuZF9yZW1vdGVfb2JqZWN0X3VybCgmYnVmLCByZXBvLT51cmwsIGhleCwgMCk7CisJcmVxdWVzdC0+ZGVzdCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoJmJ1ZiwgcmVwby0+dXJsLCBoZXgsIDApOworCXN0cmJ1Zl9hZGQoJmJ1ZiwgcmVxdWVzdC0+bG9jay0+dG1wZmlsZV9zdWZmaXgsIDQxKTsKKwlyZXF1ZXN0LT51cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwogCiAJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwogCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX3Jlc3BvbnNlOwpAQCAtNTQxLDYgKzQwMiwxMCBAQAogCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JTkZJTEUsICZyZXF1ZXN0LT5idWZmZXIpOwogCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JTkZJTEVTSVpFLCByZXF1ZXN0LT5idWZmZXIuYnVmLmxlbik7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgZnJlYWRfYnVmZmVyKTsKKyNpZm5kZWYgTk9fQ1VSTF9JT0NUTAorCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLCBpb2N0bF9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JT0NUTERBVEEsICZyZXF1ZXN0LT5idWZmZXIpOworI2VuZGlmCiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9udWxsKTsKIAljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCwgREFWX1BVVCk7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VQTE9BRCwgMSk7CkBAIC01ODgsMTggKzQ1MywxMiBAQAogewogCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwogCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKLQljaGFyICppZl9oZWFkZXI7Ci0JY2hhciB0aW1lb3V0X2hlYWRlclsyNV07Ci0Jc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gTlVMTDsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnM7CiAJaW50IHJjID0gMDsKIAogCWxvY2stPnJlZnJlc2hpbmcgPSAxOwogCi0JaWZfaGVhZGVyID0geG1hbGxvYyhzdHJsZW4obG9jay0+dG9rZW4pICsgMjUpOwotCXNwcmludGYoaWZfaGVhZGVyLCAiSWY6ICg8JXM+KSIsIGxvY2stPnRva2VuKTsKLQlzcHJpbnRmKHRpbWVvdXRfaGVhZGVyLCAiVGltZW91dDogU2Vjb25kLSVsZCIsIGxvY2stPnRpbWVvdXQpOwotCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsIGlmX2hlYWRlcik7Ci0JZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgdGltZW91dF9oZWFkZXIpOworCWRhdl9oZWFkZXJzID0gZ2V0X2Rhdl90b2tlbl9oZWFkZXJzKGxvY2ssIERBVl9IRUFERVJfSUYgfCBEQVZfSEVBREVSX1RJTUVPVVQpOwogCiAJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwogCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKQEAgLTYyMiwxNCArNDgxLDEzIEBACiAKIAlsb2NrLT5yZWZyZXNoaW5nID0gMDsKIAljdXJsX3NsaXN0X2ZyZWVfYWxsKGRhdl9oZWFkZXJzKTsKLQlmcmVlKGlmX2hlYWRlcik7CiAKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIGNoZWNrX2xvY2tzKHZvaWQpCiB7Ci0Jc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrID0gcmVtb3RlLT5sb2NrczsKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2sgPSByZXBvLT5sb2NrczsKIAl0aW1lX3QgY3VycmVudF90aW1lID0gdGltZShOVUxMKTsKIAlpbnQgdGltZV9yZW1haW5pbmc7CiAKQEAgLTY2MiwxOSArNTIwLDE0IEBACiAJCQllbnRyeS0+bmV4dCA9IGVudHJ5LT5uZXh0LT5uZXh0OwogCX0KIAotCWlmIChyZXF1ZXN0LT5sb2NhbF9maWxlbm8gIT0gLTEpCi0JCWNsb3NlKHJlcXVlc3QtPmxvY2FsX2ZpbGVubyk7Ci0JaWYgKHJlcXVlc3QtPmxvY2FsX3N0cmVhbSkKLQkJZmNsb3NlKHJlcXVlc3QtPmxvY2FsX3N0cmVhbSk7CiAJZnJlZShyZXF1ZXN0LT51cmwpOwogCWZyZWUocmVxdWVzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZpbmlzaF9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQogewotCXN0cnVjdCBzdGF0IHN0OwotCXN0cnVjdCBwYWNrZWRfZ2l0ICp0YXJnZXQ7Ci0Jc3RydWN0IHBhY2tlZF9naXQgKipsc3Q7CisJc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxOworCXN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpvYmpfcmVxOwogCiAJcmVxdWVzdC0+Y3VybF9yZXN1bHQgPSByZXF1ZXN0LT5zbG90LT5jdXJsX3Jlc3VsdDsKIAlyZXF1ZXN0LT5odHRwX2NvZGUgPSByZXF1ZXN0LT5zbG90LT5odHRwX2NvZGU7CkBAIC03MjksNzcgKzU4Miw0NiBAQAogCQkJYWJvcnRlZCA9IDE7CiAJCX0KIAl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9GRVRDSF9MT09TRSkgewotCQlmY2htb2QocmVxdWVzdC0+bG9jYWxfZmlsZW5vLCAwNDQ0KTsKLQkJY2xvc2UocmVxdWVzdC0+bG9jYWxfZmlsZW5vKTsgcmVxdWVzdC0+bG9jYWxfZmlsZW5vID0gLTE7CisJCW9ial9yZXEgPSAoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKilyZXF1ZXN0LT51c2VyRGF0YTsKIAotCQlpZiAocmVxdWVzdC0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0sgJiYKLQkJICAgIHJlcXVlc3QtPmh0dHBfY29kZSAhPSA0MTYpIHsKLQkJCWlmIChzdGF0KHJlcXVlc3QtPnRtcGZpbGUsICZzdCkgPT0gMCkgewotCQkJCWlmIChzdC5zdF9zaXplID09IDApCi0JCQkJCXVubGluayhyZXF1ZXN0LT50bXBmaWxlKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChyZXF1ZXN0LT5odHRwX2NvZGUgPT0gNDE2KQotCQkJCWZwcmludGYoc3RkZXJyLCAiV2FybmluZzogcmVxdWVzdGVkIHJhbmdlIGludmFsaWQ7IHdlIG1heSBhbHJlYWR5IGhhdmUgYWxsIHRoZSBkYXRhLlxuIik7Ci0KLQkJCWdpdF9pbmZsYXRlX2VuZCgmcmVxdWVzdC0+c3RyZWFtKTsKLQkJCWdpdF9TSEExX0ZpbmFsKHJlcXVlc3QtPnJlYWxfc2hhMSwgJnJlcXVlc3QtPmMpOwotCQkJaWYgKHJlcXVlc3QtPnpyZXQgIT0gWl9TVFJFQU1fRU5EKSB7Ci0JCQkJdW5saW5rKHJlcXVlc3QtPnRtcGZpbGUpOwotCQkJfSBlbHNlIGlmIChoYXNoY21wKHJlcXVlc3QtPm9iai0+c2hhMSwgcmVxdWVzdC0+cmVhbF9zaGExKSkgewotCQkJCXVubGluayhyZXF1ZXN0LT50bXBmaWxlKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmVxdWVzdC0+cmVuYW1lID0KLQkJCQkJbW92ZV90ZW1wX3RvX2ZpbGUoCi0JCQkJCQlyZXF1ZXN0LT50bXBmaWxlLAotCQkJCQkJcmVxdWVzdC0+ZmlsZW5hbWUpOwotCQkJCWlmIChyZXF1ZXN0LT5yZW5hbWUgPT0gMCkgewotCQkJCQlyZXF1ZXN0LT5vYmotPmZsYWdzIHw9IChMT0NBTCB8IFJFTU9URSk7Ci0JCQkJfQotCQkJfQotCQl9CisJCWlmIChmaW5pc2hfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxKSA9PSAwKQorCQkJaWYgKG9ial9yZXEtPnJlbmFtZSA9PSAwKQorCQkJCXJlcXVlc3QtPm9iai0+ZmxhZ3MgfD0gKExPQ0FMIHwgUkVNT1RFKTsKIAogCQkvKiBUcnkgZmV0Y2hpbmcgcGFja2VkIGlmIG5lY2Vzc2FyeSAqLwotCQlpZiAocmVxdWVzdC0+b2JqLT5mbGFncyAmIExPQ0FMKQorCQlpZiAocmVxdWVzdC0+b2JqLT5mbGFncyAmIExPQ0FMKSB7CisJCQlyZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcSk7CiAJCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7Ci0JCWVsc2UKKwkJfSBlbHNlCiAJCQlzdGFydF9mZXRjaF9wYWNrZWQocmVxdWVzdCk7CiAKIAl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9GRVRDSF9QQUNLRUQpIHsKKwkJaW50IGZhaWwgPSAxOwogCQlpZiAocmVxdWVzdC0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKIAkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGdldCBwYWNrIGZpbGUgJXNcbiVzIiwKIAkJCQlyZXF1ZXN0LT51cmwsIGN1cmxfZXJyb3JzdHIpOwotCQkJcmVtb3RlLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlvZmZfdCBwYWNrX3NpemUgPSBmdGVsbChyZXF1ZXN0LT5sb2NhbF9zdHJlYW0pOworCQkJcHJlcSA9IChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKilyZXF1ZXN0LT51c2VyRGF0YTsKIAotCQkJZmNsb3NlKHJlcXVlc3QtPmxvY2FsX3N0cmVhbSk7Ci0JCQlyZXF1ZXN0LT5sb2NhbF9zdHJlYW0gPSBOVUxMOwotCQkJaWYgKCFtb3ZlX3RlbXBfdG9fZmlsZShyZXF1ZXN0LT50bXBmaWxlLAotCQkJCQkgICAgICAgcmVxdWVzdC0+ZmlsZW5hbWUpKSB7Ci0JCQkJdGFyZ2V0ID0gKHN0cnVjdCBwYWNrZWRfZ2l0ICopcmVxdWVzdC0+dXNlckRhdGE7Ci0JCQkJdGFyZ2V0LT5wYWNrX3NpemUgPSBwYWNrX3NpemU7Ci0JCQkJbHN0ID0gJnJlbW90ZS0+cGFja3M7Ci0JCQkJd2hpbGUgKCpsc3QgIT0gdGFyZ2V0KQotCQkJCQlsc3QgPSAmKCgqbHN0KS0+bmV4dCk7Ci0JCQkJKmxzdCA9ICgqbHN0KS0+bmV4dDsKLQotCQkJCWlmICghdmVyaWZ5X3BhY2sodGFyZ2V0KSkKLQkJCQkJaW5zdGFsbF9wYWNrZWRfZ2l0KHRhcmdldCk7Ci0JCQkJZWxzZQotCQkJCQlyZW1vdGUtPmNhbl91cGRhdGVfaW5mb19yZWZzID0gMDsKKwkJCWlmIChwcmVxKSB7CisJCQkJaWYgKGZpbmlzaF9odHRwX3BhY2tfcmVxdWVzdChwcmVxKSA+IDApCisJCQkJCWZhaWwgPSAwOworCQkJCXJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CiAJCQl9CiAJCX0KKwkJaWYgKGZhaWwpCisJCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CiAJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKIAl9CiB9CiAKICNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorc3RhdGljIGludCBpc19ydW5uaW5nX3F1ZXVlOwogc3RhdGljIGludCBmaWxsX2FjdGl2ZV9zbG90KHZvaWQgKnVudXNlZCkKIHsKLQlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKIAotCWlmIChhYm9ydGVkKQorCWlmIChhYm9ydGVkIHx8ICFpc19ydW5uaW5nX3F1ZXVlKQogCQlyZXR1cm4gMDsKIAogCWZvciAocmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKQEAgLTg0Miw4ICs2NjQsNiBAQAogCXJlcXVlc3QtPnVybCA9IE5VTEw7CiAJcmVxdWVzdC0+bG9jayA9IE5VTEw7CiAJcmVxdWVzdC0+aGVhZGVycyA9IE5VTEw7Ci0JcmVxdWVzdC0+bG9jYWxfZmlsZW5vID0gLTE7Ci0JcmVxdWVzdC0+bG9jYWxfc3RyZWFtID0gTlVMTDsKIAlyZXF1ZXN0LT5zdGF0ZSA9IE5FRURfRkVUQ0g7CiAJcmVxdWVzdC0+bmV4dCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKIAlyZXF1ZXN0X3F1ZXVlX2hlYWQgPSByZXF1ZXN0OwpAQCAtODcwLDcgKzY5MCw3IEBACiAJCWdldF9yZW1vdGVfb2JqZWN0X2xpc3Qob2JqLT5zaGExWzBdKTsKIAlpZiAob2JqLT5mbGFncyAmIChSRU1PVEUgfCBQVVNISU5HKSkKIAkJcmV0dXJuIDA7Ci0JdGFyZ2V0ID0gZmluZF9zaGExX3BhY2sob2JqLT5zaGExLCByZW1vdGUtPnBhY2tzKTsKKwl0YXJnZXQgPSBmaW5kX3NoYTFfcGFjayhvYmotPnNoYTEsIHJlcG8tPnBhY2tzKTsKIAlpZiAodGFyZ2V0KSB7CiAJCW9iai0+ZmxhZ3MgfD0gUkVNT1RFOwogCQlyZXR1cm4gMDsKQEAgLTg4Miw4ICs3MDIsNiBAQAogCXJlcXVlc3QtPnVybCA9IE5VTEw7CiAJcmVxdWVzdC0+bG9jayA9IGxvY2s7CiAJcmVxdWVzdC0+aGVhZGVycyA9IE5VTEw7Ci0JcmVxdWVzdC0+bG9jYWxfZmlsZW5vID0gLTE7Ci0JcmVxdWVzdC0+bG9jYWxfc3RyZWFtID0gTlVMTDsKIAlyZXF1ZXN0LT5zdGF0ZSA9IE5FRURfUFVTSDsKIAlyZXF1ZXN0LT5uZXh0ID0gcmVxdWVzdF9xdWV1ZV9oZWFkOwogCXJlcXVlc3RfcXVldWVfaGVhZCA9IHJlcXVlc3Q7CkBAIC04OTYsMTc2ICs3MTQsMjMgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBmZXRjaF9pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExKQotewotCWNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHNoYTEpOwotCWNoYXIgKmZpbGVuYW1lOwotCWNoYXIgKnVybDsKLQljaGFyIHRtcGZpbGVbUEFUSF9NQVhdOwotCWxvbmcgcHJldl9wb3NuID0gMDsKLQljaGFyIHJhbmdlW1JBTkdFX0hFQURFUl9TSVpFXTsKLQlzdHJ1Y3QgY3VybF9zbGlzdCAqcmFuZ2VfaGVhZGVyID0gTlVMTDsKLQotCUZJTEUgKmluZGV4ZmlsZTsKLQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKLQlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7Ci0KLQkvKiBEb24ndCB1c2UgdGhlIGluZGV4IGlmIHRoZSBwYWNrIGlzbid0IHRoZXJlICovCi0JdXJsID0geG1hbGxvYyhzdHJsZW4ocmVtb3RlLT51cmwpICsgNjQpOwotCXNwcmludGYodXJsLCAiJXNvYmplY3RzL3BhY2svcGFjay0lcy5wYWNrIiwgcmVtb3RlLT51cmwsIGhleCk7Ci0Jc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwotCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9OT0JPRFksIDEpOwotCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgewotCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7Ci0JCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7Ci0JCQlmcmVlKHVybCk7Ci0JCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byB2ZXJpZnkgcGFjayAlcyBpcyBhdmFpbGFibGUiLAotCQkJCSAgICAgaGV4KTsKLQkJfQotCX0gZWxzZSB7Ci0JCWZyZWUodXJsKTsKLQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOwotCX0KLQotCWlmIChoYXNfcGFja19pbmRleChzaGExKSkgewotCQlmcmVlKHVybCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChwdXNoX3ZlcmJvc2VseSkKLQkJZnByaW50ZihzdGRlcnIsICJHZXR0aW5nIGluZGV4IGZvciBwYWNrICVzXG4iLCBoZXgpOwotCi0Jc3ByaW50Zih1cmwsICIlc29iamVjdHMvcGFjay9wYWNrLSVzLmlkeCIsIHJlbW90ZS0+dXJsLCBoZXgpOwotCi0JZmlsZW5hbWUgPSBzaGExX3BhY2tfaW5kZXhfbmFtZShzaGExKTsKLQlzbnByaW50Zih0bXBmaWxlLCBzaXplb2YodG1wZmlsZSksICIlcy50ZW1wIiwgZmlsZW5hbWUpOwotCWluZGV4ZmlsZSA9IGZvcGVuKHRtcGZpbGUsICJhIik7Ci0JaWYgKCFpbmRleGZpbGUpIHsKLQkJZnJlZSh1cmwpOwotCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBvcGVuIGxvY2FsIGZpbGUgJXMgZm9yIHBhY2sgaW5kZXgiLAotCQkJICAgICB0bXBmaWxlKTsKLQl9Ci0KLQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7Ci0Jc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9OT0JPRFksIDApOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQR0VULCAxKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgaW5kZXhmaWxlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19wcmFnbWFfaGVhZGVyKTsKLQlzbG90LT5sb2NhbCA9IGluZGV4ZmlsZTsKLQotCS8qIElmIHRoZXJlIGlzIGRhdGEgcHJlc2VudCBmcm9tIGEgcHJldmlvdXMgdHJhbnNmZXIgYXR0ZW1wdCwKLQkgICByZXN1bWUgd2hlcmUgaXQgbGVmdCBvZmYgKi8KLQlwcmV2X3Bvc24gPSBmdGVsbChpbmRleGZpbGUpOwotCWlmIChwcmV2X3Bvc24+MCkgewotCQlpZiAocHVzaF92ZXJib3NlbHkpCi0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkiUmVzdW1pbmcgZmV0Y2ggb2YgaW5kZXggZm9yIHBhY2sgJXMgYXQgYnl0ZSAlbGRcbiIsCi0JCQkJaGV4LCBwcmV2X3Bvc24pOwotCQlzcHJpbnRmKHJhbmdlLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwcmV2X3Bvc24pOwotCQlyYW5nZV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChyYW5nZV9oZWFkZXIsIHJhbmdlKTsKLQkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIHJhbmdlX2hlYWRlcik7Ci0JfQotCi0JaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7Ci0JCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKLQkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKLQkJCWZyZWUodXJsKTsKLQkJCWZjbG9zZShpbmRleGZpbGUpOwotCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgaW5kZXggJXNcbiVzIiwgdXJsLAotCQkJCSAgICAgY3VybF9lcnJvcnN0cik7Ci0JCX0KLQl9IGVsc2UgewotCQlmcmVlKHVybCk7Ci0JCWZjbG9zZShpbmRleGZpbGUpOwotCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7Ci0JfQotCi0JZnJlZSh1cmwpOwotCWZjbG9zZShpbmRleGZpbGUpOwotCi0JcmV0dXJuIG1vdmVfdGVtcF90b19maWxlKHRtcGZpbGUsIGZpbGVuYW1lKTsKLX0KLQotc3RhdGljIGludCBzZXR1cF9pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExKQotewotCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXdfcGFjazsKLQotCWlmIChmZXRjaF9pbmRleChzaGExKSkKLQkJcmV0dXJuIC0xOwotCi0JbmV3X3BhY2sgPSBwYXJzZV9wYWNrX2luZGV4KHNoYTEpOwotCW5ld19wYWNrLT5uZXh0ID0gcmVtb3RlLT5wYWNrczsKLQlyZW1vdGUtPnBhY2tzID0gbmV3X3BhY2s7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZmV0Y2hfaW5kaWNlcyh2b2lkKQogewotCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JY2hhciAqdXJsOwotCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7Ci0JY2hhciAqZGF0YTsKLQlpbnQgaSA9IDA7Ci0KLQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKLQlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJaW50IHJldDsKIAogCWlmIChwdXNoX3ZlcmJvc2VseSkKIAkJZnByaW50ZihzdGRlcnIsICJHZXR0aW5nIHBhY2sgbGlzdFxuIik7CiAKLQl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZW1vdGUtPnVybCkgKyAyMCk7Ci0Jc3ByaW50Zih1cmwsICIlc29iamVjdHMvaW5mby9wYWNrcyIsIHJlbW90ZS0+dXJsKTsKLQotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKLQlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZidWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfYnVmZmVyKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBOVUxMKTsKLQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKLQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOwotCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgewotCQkJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7Ci0JCQlmcmVlKHVybCk7Ci0JCQlpZiAocmVzdWx0cy5odHRwX2NvZGUgPT0gNDA0KQotCQkJCXJldHVybiAwOwotCQkJZWxzZQotCQkJCXJldHVybiBlcnJvcigiJXMiLCBjdXJsX2Vycm9yc3RyKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOwotCQlmcmVlKHVybCk7Ci0JCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKLQl9Ci0JZnJlZSh1cmwpOwotCi0JZGF0YSA9IGJ1ZmZlci5idWY7Ci0Jd2hpbGUgKGkgPCBidWZmZXIubGVuKSB7Ci0JCXN3aXRjaCAoZGF0YVtpXSkgewotCQljYXNlICdQJzoKLQkJCWkrKzsKLQkJCWlmIChpICsgNTIgPCBidWZmZXIubGVuICYmCi0JCQkgICAgIXByZWZpeGNtcChkYXRhICsgaSwgIiBwYWNrLSIpICYmCi0JCQkgICAgIXByZWZpeGNtcChkYXRhICsgaSArIDQ2LCAiLnBhY2tcbiIpKSB7Ci0JCQkJZ2V0X3NoYTFfaGV4KGRhdGEgKyBpICsgNiwgc2hhMSk7Ci0JCQkJc2V0dXBfaW5kZXgoc2hhMSk7Ci0JCQkJaSArPSA1MTsKLQkJCQlicmVhazsKLQkJCX0KLQkJZGVmYXVsdDoKLQkJCXdoaWxlIChkYXRhW2ldICE9ICdcbicpCi0JCQkJaSsrOwotCQl9Ci0JCWkrKzsKKwlzd2l0Y2ggKGh0dHBfZ2V0X2luZm9fcGFja3MocmVwby0+dXJsLCAmcmVwby0+cGFja3MpKSB7CisJY2FzZSBIVFRQX09LOgorCWNhc2UgSFRUUF9NSVNTSU5HX1RBUkdFVDoKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLTE7CiAJfQogCi0Jc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgb25lX3JlbW90ZV9vYmplY3QoY29uc3QgY2hhciAqaGV4KQpAQCAtMTExMSw2ICs3NzYsOCBAQAogc3RhdGljIHZvaWQgaGFuZGxlX25ld19sb2NrX2N0eChzdHJ1Y3QgeG1sX2N0eCAqY3R4LCBpbnQgdGFnX2Nsb3NlZCkKIHsKIAlzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2sgPSAoc3RydWN0IHJlbW90ZV9sb2NrICopY3R4LT51c2VyRGF0YTsKKwlnaXRfU0hBX0NUWCBzaGFfY3R4OworCXVuc2lnbmVkIGNoYXIgbG9ja190b2tlbl9zaGExWzIwXTsKIAogCWlmICh0YWdfY2xvc2VkICYmIGN0eC0+Y2RhdGEpIHsKIAkJaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfQUNUSVZFTE9DS19PV05FUikpIHsKQEAgLTExMjMsNiArNzkwLDEzIEBACiAJCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9BQ1RJVkVMT0NLX1RPS0VOKSkgewogCQkJbG9jay0+dG9rZW4gPSB4bWFsbG9jKHN0cmxlbihjdHgtPmNkYXRhKSArIDEpOwogCQkJc3RyY3B5KGxvY2stPnRva2VuLCBjdHgtPmNkYXRhKTsKKworCQkJZ2l0X1NIQTFfSW5pdCgmc2hhX2N0eCk7CisJCQlnaXRfU0hBMV9VcGRhdGUoJnNoYV9jdHgsIGxvY2stPnRva2VuLCBzdHJsZW4obG9jay0+dG9rZW4pKTsKKwkJCWdpdF9TSEExX0ZpbmFsKGxvY2tfdG9rZW5fc2hhMSwgJnNoYV9jdHgpOworCisJCQlsb2NrLT50bXBmaWxlX3N1ZmZpeFswXSA9ICdfJzsKKwkJCW1lbWNweShsb2NrLT50bXBmaWxlX3N1ZmZpeCArIDEsIHNoYTFfdG9faGV4KGxvY2tfdG9rZW5fc2hhMSksIDQwKTsKIAkJfQogCX0KIH0KQEAgLTExOTQsMTIgKzg2OCwxMyBAQAogCXN0cnVjdCByZW1vdGVfbG9jayAqbG9jayA9IE5VTEw7CiAJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gTlVMTDsKIAlzdHJ1Y3QgeG1sX2N0eCBjdHg7CisJY2hhciAqZXNjYXBlZDsKIAotCXVybCA9IHhtYWxsb2Moc3RybGVuKHJlbW90ZS0+dXJsKSArIHN0cmxlbihwYXRoKSArIDEpOwotCXNwcmludGYodXJsLCAiJXMlcyIsIHJlbW90ZS0+dXJsLCBwYXRoKTsKKwl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT51cmwpICsgc3RybGVuKHBhdGgpICsgMSk7CisJc3ByaW50Zih1cmwsICIlcyVzIiwgcmVwby0+dXJsLCBwYXRoKTsKIAogCS8qIE1ha2Ugc3VyZSBsZWFkaW5nIGRpcmVjdG9yaWVzIGV4aXN0IGZvciB0aGUgcmVtb3RlIHJlZiAqLwotCWVwID0gc3RyY2hyKHVybCArIHN0cmxlbihyZW1vdGUtPnVybCkgKyAxLCAnLycpOworCWVwID0gc3RyY2hyKHVybCArIHN0cmxlbihyZXBvLT51cmwpICsgMSwgJy8nKTsKIAl3aGlsZSAoZXApIHsKIAkJY2hhciBzYXZlZF9jaGFyYWN0ZXIgPSBlcFsxXTsKIAkJZXBbMV0gPSAnXDAnOwpAQCAtMTIyOCw3ICs5MDMsOSBAQAogCQllcCA9IHN0cmNocihlcCArIDEsICcvJyk7CiAJfQogCi0Jc3RyYnVmX2FkZGYoJm91dF9idWZmZXIuYnVmLCBMT0NLX1JFUVVFU1QsIGdpdF9kZWZhdWx0X2VtYWlsKTsKKwllc2NhcGVkID0geG1sX2VudGl0aWVzKGdpdF9kZWZhdWx0X2VtYWlsKTsKKwlzdHJidWZfYWRkZigmb3V0X2J1ZmZlci5idWYsIExPQ0tfUkVRVUVTVCwgZXNjYXBlZCk7CisJZnJlZShlc2NhcGVkKTsKIAogCXNwcmludGYodGltZW91dF9oZWFkZXIsICJUaW1lb3V0OiBTZWNvbmQtJWxkIiwgdGltZW91dCk7CiAJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgdGltZW91dF9oZWFkZXIpOwpAQCAtMTIzOSw2ICs5MTYsMTAgQEAKIAljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU5GSUxFLCAmb3V0X2J1ZmZlcik7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0lORklMRVNJWkUsIG91dF9idWZmZXIuYnVmLmxlbik7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgZnJlYWRfYnVmZmVyKTsKKyNpZm5kZWYgTk9fQ1VSTF9JT0NUTAorCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLCBpb2N0bF9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JT0NUTERBVEEsICZvdXRfYnVmZmVyKTsKKyNlbmRpZgogCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmaW5fYnVmZmVyKTsKIAljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX2J1ZmZlcik7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKQEAgLTEyOTEsOCArOTcyLDggQEAKIAl9IGVsc2UgewogCQlsb2NrLT51cmwgPSB1cmw7CiAJCWxvY2stPnN0YXJ0X3RpbWUgPSB0aW1lKE5VTEwpOwotCQlsb2NrLT5uZXh0ID0gcmVtb3RlLT5sb2NrczsKLQkJcmVtb3RlLT5sb2NrcyA9IGxvY2s7CisJCWxvY2stPm5leHQgPSByZXBvLT5sb2NrczsKKwkJcmVwby0+bG9ja3MgPSBsb2NrOwogCX0KIAogCXJldHVybiBsb2NrOwpAQCAtMTMwMiwxNSArOTgzLDExIEBACiB7CiAJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CiAJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOwotCXN0cnVjdCByZW1vdGVfbG9jayAqcHJldiA9IHJlbW90ZS0+bG9ja3M7Ci0JY2hhciAqbG9ja190b2tlbl9oZWFkZXI7Ci0Jc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gTlVMTDsKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKnByZXYgPSByZXBvLT5sb2NrczsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnM7CiAJaW50IHJjID0gMDsKIAotCWxvY2tfdG9rZW5faGVhZGVyID0geG1hbGxvYyhzdHJsZW4obG9jay0+dG9rZW4pICsgMzEpOwotCXNwcmludGYobG9ja190b2tlbl9oZWFkZXIsICJMb2NrLVRva2VuOiA8JXM+IiwKLQkJbG9jay0+dG9rZW4pOwotCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsIGxvY2tfdG9rZW5faGVhZGVyKTsKKwlkYXZfaGVhZGVycyA9IGdldF9kYXZfdG9rZW5faGVhZGVycyhsb2NrLCBEQVZfSEVBREVSX0xPQ0spOwogCiAJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwogCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKQEAgLTEzMzEsMTAgKzEwMDgsOSBAQAogCX0KIAogCWN1cmxfc2xpc3RfZnJlZV9hbGwoZGF2X2hlYWRlcnMpOwotCWZyZWUobG9ja190b2tlbl9oZWFkZXIpOwogCi0JaWYgKHJlbW90ZS0+bG9ja3MgPT0gbG9jaykgewotCQlyZW1vdGUtPmxvY2tzID0gbG9jay0+bmV4dDsKKwlpZiAocmVwby0+bG9ja3MgPT0gbG9jaykgeworCQlyZXBvLT5sb2NrcyA9IGxvY2stPm5leHQ7CiAJfSBlbHNlIHsKIAkJd2hpbGUgKHByZXYgJiYgcHJldi0+bmV4dCAhPSBsb2NrKQogCQkJcHJldiA9IHByZXYtPm5leHQ7CkBAIC0xMzUyLDcgKzEwMjgsNyBAQAogCiBzdGF0aWMgdm9pZCByZW1vdmVfbG9ja3Modm9pZCkKIHsKLQlzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2sgPSByZW1vdGUtPmxvY2tzOworCXN0cnVjdCByZW1vdGVfbG9jayAqbG9jayA9IHJlcG8tPmxvY2tzOwogCiAJZnByaW50ZihzdGRlcnIsICJSZW1vdmluZyByZW1vdGUgbG9ja3MuLi5cbiIpOwogCXdoaWxlIChsb2NrKSB7CkBAIC0xMzY1LDcgKzEwNDEsNyBAQAogc3RhdGljIHZvaWQgcmVtb3ZlX2xvY2tzX29uX3NpZ25hbChpbnQgc2lnbm8pCiB7CiAJcmVtb3ZlX2xvY2tzKCk7Ci0Jc2lnbmFsKHNpZ25vLCBTSUdfREZMKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOwogCXJhaXNlKHNpZ25vKTsKIH0KIApAQCAtMTQzNSw3ICsxMTExLDcgQEAKIAkJCQl9CiAJCQl9CiAJCQlpZiAocGF0aCkgewotCQkJCXBhdGggKz0gcmVtb3RlLT5wYXRoX2xlbjsKKwkJCQlwYXRoICs9IHJlcG8tPnBhdGhfbGVuOwogCQkJCWxzLT5kZW50cnlfbmFtZSA9IHhzdHJkdXAocGF0aCk7CiAJCQl9CiAJCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9QUk9QRklORF9DT0xMRUNUSU9OKSkgewpAQCAtMTQ1OCw3ICsxMTM0LDcgQEAKIAkJICAgICAgdm9pZCAoKnVzZXJGdW5jKShzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMpLAogCQkgICAgICB2b2lkICp1c2VyRGF0YSkKIHsKLQljaGFyICp1cmwgPSB4bWFsbG9jKHN0cmxlbihyZW1vdGUtPnVybCkgKyBzdHJsZW4ocGF0aCkgKyAxKTsKKwljaGFyICp1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT51cmwpICsgc3RybGVuKHBhdGgpICsgMSk7CiAJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CiAJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOwogCXN0cnVjdCBzdHJidWYgaW5fYnVmZmVyID0gU1RSQlVGX0lOSVQ7CkBAIC0xNDc0LDcgKzExNTAsNyBAQAogCWxzLnVzZXJEYXRhID0gdXNlckRhdGE7CiAJbHMudXNlckZ1bmMgPSB1c2VyRnVuYzsKIAotCXNwcmludGYodXJsLCAiJXMlcyIsIHJlbW90ZS0+dXJsLCBwYXRoKTsKKwlzcHJpbnRmKHVybCwgIiVzJXMiLCByZXBvLT51cmwsIHBhdGgpOwogCiAJc3RyYnVmX2FkZGYoJm91dF9idWZmZXIuYnVmLCBQUk9QRklORF9BTExfUkVRVUVTVCk7CiAKQEAgLTE0ODYsNiArMTE2MiwxMCBAQAogCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JTkZJTEUsICZvdXRfYnVmZmVyKTsKIAljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU5GSUxFU0laRSwgb3V0X2J1ZmZlci5idWYubGVuKTsKIAljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCBmcmVhZF9idWZmZXIpOworI2lmbmRlZiBOT19DVVJMX0lPQ1RMCisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0lPQ1RMRlVOQ1RJT04sIGlvY3RsX2J1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0lPQ1RMREFUQSwgJm91dF9idWZmZXIpOworI2VuZGlmCiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZpbl9idWZmZXIpOwogCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfYnVmZmVyKTsKIAljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwpAQCAtMTU1MSw4ICsxMjMxLDExIEBACiAJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gTlVMTDsKIAlzdHJ1Y3QgeG1sX2N0eCBjdHg7CiAJaW50IGxvY2tfZmxhZ3MgPSAwOworCWNoYXIgKmVzY2FwZWQ7CiAKLQlzdHJidWZfYWRkZigmb3V0X2J1ZmZlci5idWYsIFBST1BGSU5EX1NVUFBPUlRFRExPQ0tfUkVRVUVTVCwgcmVtb3RlLT51cmwpOworCWVzY2FwZWQgPSB4bWxfZW50aXRpZXMocmVwby0+dXJsKTsKKwlzdHJidWZfYWRkZigmb3V0X2J1ZmZlci5idWYsIFBST1BGSU5EX1NVUFBPUlRFRExPQ0tfUkVRVUVTVCwgZXNjYXBlZCk7CisJZnJlZShlc2NhcGVkKTsKIAogCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJEZXB0aDogMCIpOwogCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJDb250ZW50LVR5cGU6IHRleHQveG1sIik7CkBAIC0xNTYyLDkgKzEyNDUsMTMgQEAKIAljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU5GSUxFLCAmb3V0X2J1ZmZlcik7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0lORklMRVNJWkUsIG91dF9idWZmZXIuYnVmLmxlbik7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgZnJlYWRfYnVmZmVyKTsKKyNpZm5kZWYgTk9fQ1VSTF9JT0NUTAorCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLCBpb2N0bF9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JT0NUTERBVEEsICZvdXRfYnVmZmVyKTsKKyNlbmRpZgogCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmaW5fYnVmZmVyKTsKIAljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX2J1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgcmVtb3RlLT51cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHJlcG8tPnVybCk7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VQTE9BRCwgMSk7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsIERBVl9QUk9QRklORCk7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKQEAgLTE1OTQsMTYgKzEyODEsMTYgQEAKIAkJCX0KIAkJCVhNTF9QYXJzZXJGcmVlKHBhcnNlcik7CiAJCQlpZiAoIWxvY2tfZmxhZ3MpCi0JCQkJZXJyb3IoIkVycm9yOiBubyBEQVYgbG9ja2luZyBzdXBwb3J0IG9uICVzIiwKLQkJCQkgICAgICByZW1vdGUtPnVybCk7CisJCQkJZXJyb3IoIm5vIERBViBsb2NraW5nIHN1cHBvcnQgb24gJXMiLAorCQkJCSAgICAgIHJlcG8tPnVybCk7CiAKIAkJfSBlbHNlIHsKIAkJCWVycm9yKCJDYW5ub3QgYWNjZXNzIFVSTCAlcywgcmV0dXJuIGNvZGUgJWQiLAotCQkJICAgICAgcmVtb3RlLT51cmwsIHJlc3VsdHMuY3VybF9yZXN1bHQpOworCQkJICAgICAgcmVwby0+dXJsLCByZXN1bHRzLmN1cmxfcmVzdWx0KTsKIAkJCWxvY2tfZmxhZ3MgPSAwOwogCQl9CiAJfSBlbHNlIHsKLQkJZXJyb3IoIlVuYWJsZSB0byBzdGFydCBQUk9QRklORCByZXF1ZXN0IG9uICVzIiwgcmVtb3RlLT51cmwpOworCQllcnJvcigiVW5hYmxlIHRvIHN0YXJ0IFBST1BGSU5EIHJlcXVlc3Qgb24gJXMiLCByZXBvLT51cmwpOwogCX0KIAogCXN0cmJ1Zl9yZWxlYXNlKCZvdXRfYnVmZmVyLmJ1Zik7CkBAIC0xNzMyLDEzICsxNDE5LDEwIEBACiB7CiAJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CiAJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOwotCWNoYXIgKmlmX2hlYWRlcjsKIAlzdHJ1Y3QgYnVmZmVyIG91dF9idWZmZXIgPSB7IFNUUkJVRl9JTklULCAwIH07Ci0Jc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gTlVMTDsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnM7CiAKLQlpZl9oZWFkZXIgPSB4bWFsbG9jKHN0cmxlbihsb2NrLT50b2tlbikgKyAyNSk7Ci0Jc3ByaW50ZihpZl9oZWFkZXIsICJJZjogKDwlcz4pIiwgbG9jay0+dG9rZW4pOwotCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsIGlmX2hlYWRlcik7CisJZGF2X2hlYWRlcnMgPSBnZXRfZGF2X3Rva2VuX2hlYWRlcnMobG9jaywgREFWX0hFQURFUl9JRik7CiAKIAlzdHJidWZfYWRkZigmb3V0X2J1ZmZlci5idWYsICIlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOwogCkBAIC0xNzQ3LDYgKzE0MzEsMTAgQEAKIAljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU5GSUxFLCAmb3V0X2J1ZmZlcik7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0lORklMRVNJWkUsIG91dF9idWZmZXIuYnVmLmxlbik7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgZnJlYWRfYnVmZmVyKTsKKyNpZm5kZWYgTk9fQ1VSTF9JT0NUTAorCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLCBpb2N0bF9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JT0NUTERBVEEsICZvdXRfYnVmZmVyKTsKKyNlbmRpZgogCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfbnVsbCk7CiAJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsIERBVl9QVVQpOwogCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBkYXZfaGVhZGVycyk7CkBAIC0xNzU3LDcgKzE0NDUsNiBAQAogCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgewogCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZvdXRfYnVmZmVyLmJ1Zik7Ci0JCWZyZWUoaWZfaGVhZGVyKTsKIAkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKIAkJCWZwcmludGYoc3RkZXJyLAogCQkJCSJQVVQgZXJyb3I6IGN1cmwgcmVzdWx0PSVkLCBIVFRQIGNvZGU9JWxkXG4iLApAQCAtMTc2Nyw3ICsxNDU0LDYgQEAKIAkJfQogCX0gZWxzZSB7CiAJCXN0cmJ1Zl9yZWxlYXNlKCZvdXRfYnVmZmVyLmJ1Zik7Ci0JCWZyZWUoaWZfaGVhZGVyKTsKIAkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgUFVUIHJlcXVlc3RcbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNzc1LDIwICsxNDYxLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCByZWYgKmxvY2FsX3JlZnMsICoqbG9jYWxfdGFpbDsKLXN0YXRpYyBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgKipyZW1vdGVfdGFpbDsKLQotc3RhdGljIGludCBvbmVfbG9jYWxfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQotewotCXN0cnVjdCByZWYgKnJlZjsKLQlpbnQgbGVuID0gc3RybGVuKHJlZm5hbWUpICsgMTsKLQlyZWYgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVmKSArIGxlbik7Ci0JaGFzaGNweShyZWYtPm5ld19zaGExLCBzaGExKTsKLQltZW1jcHkocmVmLT5uYW1lLCByZWZuYW1lLCBsZW4pOwotCSpsb2NhbF90YWlsID0gcmVmOwotCWxvY2FsX3RhaWwgPSAmcmVmLT5uZXh0OwotCXJldHVybiAwOwotfQorc3RhdGljIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzOwogCiBzdGF0aWMgdm9pZCBvbmVfcmVtb3RlX3JlZihjaGFyICpyZWZuYW1lKQogewpAQCAtMTc5NywxMCArMTQ3MCwxMCBAQAogCiAJcmVmID0gYWxsb2NfcmVmKHJlZm5hbWUpOwogCi0JaWYgKGh0dHBfZmV0Y2hfcmVmKHJlbW90ZS0+dXJsLCByZWYpICE9IDApIHsKKwlpZiAoaHR0cF9mZXRjaF9yZWYocmVwby0+dXJsLCByZWYpICE9IDApIHsKIAkJZnByaW50ZihzdGRlcnIsCiAJCQkiVW5hYmxlIHRvIGZldGNoIHJlZiAlcyBmcm9tICVzXG4iLAotCQkJcmVmbmFtZSwgcmVtb3RlLT51cmwpOworCQkJcmVmbmFtZSwgcmVwby0+dXJsKTsKIAkJZnJlZShyZWYpOwogCQlyZXR1cm47CiAJfQpAQCAtMTgwOSw3ICsxNDgyLDcgQEAKIAkgKiBGZXRjaCBhIGNvcHkgb2YgdGhlIG9iamVjdCBpZiBpdCBkb2Vzbid0IGV4aXN0IGxvY2FsbHkgLSBpdAogCSAqIG1heSBiZSByZXF1aXJlZCBmb3IgdXBkYXRpbmcgc2VydmVyIGluZm8gbGF0ZXIuCiAJICovCi0JaWYgKHJlbW90ZS0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgJiYgIWhhc19zaGExX2ZpbGUocmVmLT5vbGRfc2hhMSkpIHsKKwlpZiAocmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgJiYgIWhhc19zaGExX2ZpbGUocmVmLT5vbGRfc2hhMSkpIHsKIAkJb2JqID0gbG9va3VwX3Vua25vd25fb2JqZWN0KHJlZi0+b2xkX3NoYTEpOwogCQlpZiAob2JqKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwJIiAgZmV0Y2ggJXMgZm9yICVzXG4iLApAQCAtMTgxOCw4MiArMTQ5MSwxNSBAQAogCQl9CiAJfQogCi0JKnJlbW90ZV90YWlsID0gcmVmOwotCXJlbW90ZV90YWlsID0gJnJlZi0+bmV4dDsKLX0KLQotc3RhdGljIHZvaWQgZ2V0X2xvY2FsX2hlYWRzKHZvaWQpCi17Ci0JbG9jYWxfdGFpbCA9ICZsb2NhbF9yZWZzOwotCWZvcl9lYWNoX3JlZihvbmVfbG9jYWxfcmVmLCBOVUxMKTsKKwlyZWYtPm5leHQgPSByZW1vdGVfcmVmczsKKwlyZW1vdGVfcmVmcyA9IHJlZjsKIH0KIAogc3RhdGljIHZvaWQgZ2V0X2Rhdl9yZW1vdGVfaGVhZHModm9pZCkKIHsKLQlyZW1vdGVfdGFpbCA9ICZyZW1vdGVfcmVmczsKIAlyZW1vdGVfbHMoInJlZnMvIiwgKFBST0NFU1NfRklMRVMgfCBQUk9DRVNTX0RJUlMgfCBSRUNVUlNJVkUpLCBwcm9jZXNzX2xzX3JlZiwgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQgaXNfemVyb19zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgewotCQlpZiAoKnNoYTErKykKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgdW5tYXJrX2FuZF9mcmVlKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwgdW5zaWduZWQgaW50IG1hcmspCi17Ci0Jd2hpbGUgKGxpc3QpIHsKLQkJc3RydWN0IGNvbW1pdF9saXN0ICp0ZW1wID0gbGlzdDsKLQkJdGVtcC0+aXRlbS0+b2JqZWN0LmZsYWdzICY9IH5tYXJrOwotCQlsaXN0ID0gdGVtcC0+bmV4dDsKLQkJZnJlZSh0ZW1wKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcmVmX25ld2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAotCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExKQotewotCXN0cnVjdCBvYmplY3QgKm87Ci0Jc3RydWN0IGNvbW1pdCAqb2xkLCAqbmV3OwotCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwgKnVzZWQ7Ci0JaW50IGZvdW5kID0gMDsKLQotCS8qIEJvdGggbmV3IGFuZCBvbGQgbXVzdCBiZSBjb21taXQtaXNoIGFuZCBuZXcgaXMgZGVzY2VuZGFudCBvZgotCSAqIG9sZC4gIE90aGVyd2lzZSB3ZSByZXF1aXJlIC0tZm9yY2UuCi0JICovCi0JbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3Qob2xkX3NoYTEpLCBOVUxMLCAwKTsKLQlpZiAoIW8gfHwgby0+dHlwZSAhPSBPQkpfQ09NTUlUKQotCQlyZXR1cm4gMDsKLQlvbGQgPSAoc3RydWN0IGNvbW1pdCAqKSBvOwotCi0JbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3QobmV3X3NoYTEpLCBOVUxMLCAwKTsKLQlpZiAoIW8gfHwgby0+dHlwZSAhPSBPQkpfQ09NTUlUKQotCQlyZXR1cm4gMDsKLQluZXcgPSAoc3RydWN0IGNvbW1pdCAqKSBvOwotCi0JaWYgKHBhcnNlX2NvbW1pdChuZXcpIDwgMCkKLQkJcmV0dXJuIDA7Ci0KLQl1c2VkID0gbGlzdCA9IE5VTEw7Ci0JY29tbWl0X2xpc3RfaW5zZXJ0KG5ldywgJmxpc3QpOwotCXdoaWxlIChsaXN0KSB7Ci0JCW5ldyA9IHBvcF9tb3N0X3JlY2VudF9jb21taXQoJmxpc3QsIFRNUF9NQVJLKTsKLQkJY29tbWl0X2xpc3RfaW5zZXJ0KG5ldywgJnVzZWQpOwotCQlpZiAobmV3ID09IG9sZCkgewotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JdW5tYXJrX2FuZF9mcmVlKGxpc3QsIFRNUF9NQVJLKTsKLQl1bm1hcmtfYW5kX2ZyZWUodXNlZCwgVE1QX01BUkspOwotCXJldHVybiBmb3VuZDsKLX0KLQogc3RhdGljIHZvaWQgYWRkX3JlbW90ZV9pbmZvX3JlZihzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMpCiB7CiAJc3RydWN0IHN0cmJ1ZiAqYnVmID0gKHN0cnVjdCBzdHJidWYgKilscy0+dXNlckRhdGE7CkBAIC0xOTA0LDEwICsxNTEwLDEwIEBACiAKIAlyZWYgPSBhbGxvY19yZWYobHMtPmRlbnRyeV9uYW1lKTsKIAotCWlmIChodHRwX2ZldGNoX3JlZihyZW1vdGUtPnVybCwgcmVmKSAhPSAwKSB7CisJaWYgKGh0dHBfZmV0Y2hfcmVmKHJlcG8tPnVybCwgcmVmKSAhPSAwKSB7CiAJCWZwcmludGYoc3RkZXJyLAogCQkJIlVuYWJsZSB0byBmZXRjaCByZWYgJXMgZnJvbSAlc1xuIiwKLQkJCWxzLT5kZW50cnlfbmFtZSwgcmVtb3RlLT51cmwpOworCQkJbHMtPmRlbnRyeV9uYW1lLCByZXBvLT51cmwpOwogCQlhYm9ydGVkID0gMTsKIAkJZnJlZShyZWYpOwogCQlyZXR1cm47CkBAIC0xOTQ5LDIxICsxNTU1LDIyIEBACiAJc3RydWN0IGJ1ZmZlciBidWZmZXIgPSB7IFNUUkJVRl9JTklULCAwIH07CiAJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CiAJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOwotCWNoYXIgKmlmX2hlYWRlcjsKLQlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnMgPSBOVUxMOworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVyczsKIAogCXJlbW90ZV9scygicmVmcy8iLCAoUFJPQ0VTU19GSUxFUyB8IFJFQ1VSU0lWRSksCiAJCSAgYWRkX3JlbW90ZV9pbmZvX3JlZiwgJmJ1ZmZlci5idWYpOwogCWlmICghYWJvcnRlZCkgewotCQlpZl9oZWFkZXIgPSB4bWFsbG9jKHN0cmxlbihsb2NrLT50b2tlbikgKyAyNSk7Ci0JCXNwcmludGYoaWZfaGVhZGVyLCAiSWY6ICg8JXM+KSIsIGxvY2stPnRva2VuKTsKLQkJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgaWZfaGVhZGVyKTsKKwkJZGF2X2hlYWRlcnMgPSBnZXRfZGF2X3Rva2VuX2hlYWRlcnMobG9jaywgREFWX0hFQURFUl9JRik7CiAKIAkJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwogCQlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7CiAJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JTkZJTEUsICZidWZmZXIpOwogCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU5GSUxFU0laRSwgYnVmZmVyLmJ1Zi5sZW4pOwogCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCBmcmVhZF9idWZmZXIpOworI2lmbmRlZiBOT19DVVJMX0lPQ1RMCisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLCBpb2N0bF9idWZmZXIpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU9DVExEQVRBLCAmYnVmZmVyKTsKKyNlbmRpZgogCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX251bGwpOwogCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCwgREFWX1BVVCk7CiAJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBkYXZfaGVhZGVycyk7CkBAIC0xOTc5LDM3ICsxNTg2LDI5IEBACiAJCQkJCXJlc3VsdHMuY3VybF9yZXN1bHQsIHJlc3VsdHMuaHR0cF9jb2RlKTsKIAkJCX0KIAkJfQotCQlmcmVlKGlmX2hlYWRlcik7CiAJfQogCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIuYnVmKTsKIH0KIAogc3RhdGljIGludCByZW1vdGVfZXhpc3RzKGNvbnN0IGNoYXIgKnBhdGgpCiB7Ci0JY2hhciAqdXJsID0geG1hbGxvYyhzdHJsZW4ocmVtb3RlLT51cmwpICsgc3RybGVuKHBhdGgpICsgMSk7Ci0Jc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7Ci0Jc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOwotCWludCByZXQgPSAtMTsKKwljaGFyICp1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT51cmwpICsgc3RybGVuKHBhdGgpICsgMSk7CisJaW50IHJldDsKIAotCXNwcmludGYodXJsLCAiJXMlcyIsIHJlbW90ZS0+dXJsLCBwYXRoKTsKKwlzcHJpbnRmKHVybCwgIiVzJXMiLCByZXBvLT51cmwsIHBhdGgpOwogCi0Jc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwotCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9OT0JPRFksIDEpOwotCi0JaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7Ci0JCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKLQkJaWYgKHJlc3VsdHMuaHR0cF9jb2RlID09IDQwNCkKLQkJCXJldCA9IDA7Ci0JCWVsc2UgaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgPT0gQ1VSTEVfT0spCi0JCQlyZXQgPSAxOwotCQllbHNlCi0JCQlmcHJpbnRmKHN0ZGVyciwgIkhFQUQgSFRUUCBlcnJvciAlbGRcbiIsIHJlc3VsdHMuaHR0cF9jb2RlKTsKLQl9IGVsc2UgewotCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBIRUFEIHJlcXVlc3RcbiIpOworCXN3aXRjaCAoaHR0cF9nZXRfc3RyYnVmKHVybCwgTlVMTCwgMCkpIHsKKwljYXNlIEhUVFBfT0s6CisJCXJldCA9IDE7CisJCWJyZWFrOworCWNhc2UgSFRUUF9NSVNTSU5HX1RBUkdFVDoKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBIVFRQX0VSUk9SOgorCQlodHRwX2Vycm9yKHVybCwgSFRUUF9FUlJPUik7CisJZGVmYXVsdDoKKwkJcmV0ID0gLTE7CiAJfQotCiAJZnJlZSh1cmwpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yMDE4LDI3ICsxNjE3LDEzIEBACiB7CiAJY2hhciAqdXJsOwogCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7Ci0Jc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7Ci0Jc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOwogCi0JdXJsID0geG1hbGxvYyhzdHJsZW4ocmVtb3RlLT51cmwpICsgc3RybGVuKHBhdGgpICsgMSk7Ci0Jc3ByaW50Zih1cmwsICIlcyVzIiwgcmVtb3RlLT51cmwsIHBhdGgpOworCXVybCA9IHhtYWxsb2Moc3RybGVuKHJlcG8tPnVybCkgKyBzdHJsZW4ocGF0aCkgKyAxKTsKKwlzcHJpbnRmKHVybCwgIiVzJXMiLCByZXBvLT51cmwsIHBhdGgpOwogCi0Jc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwotCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmJ1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBOVUxMKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgewotCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7Ci0JCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7Ci0JCQlkaWUoIkNvdWxkbid0IGdldCAlcyBmb3IgcmVtb3RlIHN5bXJlZlxuJXMiLAotCQkJICAgIHVybCwgY3VybF9lcnJvcnN0cik7Ci0JCX0KLQl9IGVsc2UgewotCQlkaWUoIlVuYWJsZSB0byBzdGFydCByZW1vdGUgc3ltcmVmIHJlcXVlc3QiKTsKLQl9CisJaWYgKGh0dHBfZ2V0X3N0cmJ1Zih1cmwsICZidWZmZXIsIDApICE9IEhUVFBfT0spCisJCWRpZSgiQ291bGRuJ3QgZ2V0ICVzIGZvciByZW1vdGUgc3ltcmVmXG4lcyIsIHVybCwKKwkJICAgIGN1cmxfZXJyb3JzdHIpOwogCWZyZWUodXJsKTsKIAogCWZyZWUoKnN5bXJlZik7CkBAIC0yMTE5LDEzICsxNzA0LDEzIEBACiAJCS8qIFJlbW90ZSBIRUFEIG11c3QgcmVzb2x2ZSB0byBhIGtub3duIG9iamVjdCAqLwogCQlpZiAoc3ltcmVmKQogCQkJcmV0dXJuIGVycm9yKCJSZW1vdGUgSEVBRCBzeW1yZWZzIHRvbyBkZWVwIik7Ci0JCWlmIChpc196ZXJvX3NoYTEoaGVhZF9zaGExKSkKKwkJaWYgKGlzX251bGxfc2hhMShoZWFkX3NoYTEpKQogCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSByZW1vdGUgSEVBRCIpOwogCQlpZiAoIWhhc19zaGExX2ZpbGUoaGVhZF9zaGExKSkKIAkJCXJldHVybiBlcnJvcigiUmVtb3RlIEhFQUQgcmVzb2x2ZXMgdG8gb2JqZWN0ICVzXG53aGljaCBkb2VzIG5vdCBleGlzdCBsb2NhbGx5LCBwZXJoYXBzIHlvdSBuZWVkIHRvIGZldGNoPyIsIHNoYTFfdG9faGV4KGhlYWRfc2hhMSkpOwogCiAJCS8qIFJlbW90ZSBicmFuY2ggbXVzdCByZXNvbHZlIHRvIGEga25vd24gb2JqZWN0ICovCi0JCWlmIChpc196ZXJvX3NoYTEocmVtb3RlX3JlZi0+b2xkX3NoYTEpKQorCQlpZiAoaXNfbnVsbF9zaGExKHJlbW90ZV9yZWYtPm9sZF9zaGExKSkKIAkJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHJlc29sdmUgcmVtb3RlIGJyYW5jaCAlcyIsCiAJCQkJICAgICByZW1vdGVfcmVmLT5uYW1lKTsKIAkJaWYgKCFoYXNfc2hhMV9maWxlKHJlbW90ZV9yZWYtPm9sZF9zaGExKSkKQEAgLTIxMzcsNyArMTcyMiw3IEBACiAJCQkJICAgICAib2YgeW91ciBjdXJyZW50IEhFQUQuXG4iCiAJCQkJICAgICAiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwiCiAJCQkJICAgICAiIHJ1bjpcblx0J2dpdCBodHRwLXB1c2ggLUQgJXMgJXMnIiwKLQkJCQkgICAgIHJlbW90ZV9yZWYtPm5hbWUsIHJlbW90ZS0+dXJsLCBwYXR0ZXJuKTsKKwkJCQkgICAgIHJlbW90ZV9yZWYtPm5hbWUsIHJlcG8tPnVybCwgcGF0dGVybik7CiAJCX0KIAl9CiAKQEAgLTIxNDUsOCArMTczMCw4IEBACiAJZnByaW50ZihzdGRlcnIsICJSZW1vdmluZyByZW1vdGUgYnJhbmNoICclcydcbiIsIHJlbW90ZV9yZWYtPm5hbWUpOwogCWlmIChkcnlfcnVuKQogCQlyZXR1cm4gMDsKLQl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZW1vdGUtPnVybCkgKyBzdHJsZW4ocmVtb3RlX3JlZi0+bmFtZSkgKyAxKTsKLQlzcHJpbnRmKHVybCwgIiVzJXMiLCByZW1vdGUtPnVybCwgcmVtb3RlX3JlZi0+bmFtZSk7CisJdXJsID0geG1hbGxvYyhzdHJsZW4ocmVwby0+dXJsKSArIHN0cmxlbihyZW1vdGVfcmVmLT5uYW1lKSArIDEpOworCXNwcmludGYodXJsLCAiJXMlcyIsIHJlcG8tPnVybCwgcmVtb3RlX3JlZi0+bmFtZSk7CiAJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwogCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKIAljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEdFVCwgMSk7CkBAIC0yMTY3LDYgKzE3NTIsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcnVuX3JlcXVlc3RfcXVldWUodm9pZCkKK3sKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAxOworCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisJYWRkX2ZpbGxfZnVuY3Rpb24oTlVMTCwgZmlsbF9hY3RpdmVfc2xvdCk7CisjZW5kaWYKKwlkbyB7CisJCWZpbmlzaF9hbGxfYWN0aXZlX3Nsb3RzKCk7CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwkJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKyNlbmRpZgorCX0gd2hpbGUgKHJlcXVlc3RfcXVldWVfaGVhZCAmJiAhYWJvcnRlZCk7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAwOworI2VuZGlmCit9CisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKQEAgLTIxODIsMTIgKzE3ODYsMTUgQEAKIAlpbnQgcmMgPSAwOwogCWludCBpOwogCWludCBuZXdfcmVmczsKLQlzdHJ1Y3QgcmVmICpyZWY7CisJc3RydWN0IHJlZiAqcmVmLCAqbG9jYWxfcmVmczsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CiAJY2hhciAqcmV3cml0dGVuX3VybCA9IE5VTEw7CiAKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCiAJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwogCi0JcmVtb3RlID0geGNhbGxvYyhzaXplb2YoKnJlbW90ZSksIDEpOworCXJlcG8gPSB4Y2FsbG9jKHNpemVvZigqcmVwbyksIDEpOwogCiAJYXJndisrOwogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyssIGFyZ3YrKykgewpAQCAtMjIwOCw2ICsxODE1LDcgQEAKIAkJCX0KIAkJCWlmICghc3RyY21wKGFyZywgIi0tdmVyYm9zZSIpKSB7CiAJCQkJcHVzaF92ZXJib3NlbHkgPSAxOworCQkJCWh0dHBfaXNfdmVyYm9zZSA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoIXN0cmNtcChhcmcsICItZCIpKSB7CkBAIC0yMjIwLDE0ICsxODI4LDE0IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KLQkJaWYgKCFyZW1vdGUtPnVybCkgeworCQlpZiAoIXJlcG8tPnVybCkgewogCQkJY2hhciAqcGF0aCA9IHN0cnN0cihhcmcsICIvLyIpOwotCQkJcmVtb3RlLT51cmwgPSBhcmc7Ci0JCQlyZW1vdGUtPnBhdGhfbGVuID0gc3RybGVuKGFyZyk7CisJCQlyZXBvLT51cmwgPSBhcmc7CisJCQlyZXBvLT5wYXRoX2xlbiA9IHN0cmxlbihhcmcpOwogCQkJaWYgKHBhdGgpIHsKLQkJCQlyZW1vdGUtPnBhdGggPSBzdHJjaHIocGF0aCsyLCAnLycpOwotCQkJCWlmIChyZW1vdGUtPnBhdGgpCi0JCQkJCXJlbW90ZS0+cGF0aF9sZW4gPSBzdHJsZW4ocmVtb3RlLT5wYXRoKTsKKwkJCQlyZXBvLT5wYXRoID0gc3RyY2hyKHBhdGgrMiwgJy8nKTsKKwkJCQlpZiAocmVwby0+cGF0aCkKKwkJCQkJcmVwby0+cGF0aF9sZW4gPSBzdHJsZW4ocmVwby0+cGF0aCk7CiAJCQl9CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjI0MCw3ICsxODQ4LDcgQEAKIAlkaWUoImdpdC1wdXNoIGlzIG5vdCBhdmFpbGFibGUgZm9yIGh0dHAvaHR0cHMgcmVwb3NpdG9yeSB3aGVuIG5vdCBjb21waWxlZCB3aXRoIFVTRV9DVVJMX01VTFRJIik7CiAjZW5kaWYKIAotCWlmICghcmVtb3RlLT51cmwpCisJaWYgKCFyZXBvLT51cmwpCiAJCXVzYWdlKGh0dHBfcHVzaF91c2FnZSk7CiAKIAlpZiAoZGVsZXRlX2JyYW5jaCAmJiBucl9yZWZzcGVjICE9IDEpCkBAIC0yMjQ4LDUxICsxODU2LDU4IEBACiAKIAltZW1zZXQocmVtb3RlX2Rpcl9leGlzdHMsIC0xLCAyNTYpOwogCi0JaHR0cF9pbml0KE5VTEwpOworCS8qCisJICogQ3JlYXRlIGEgbWluaW11bSByZW1vdGUgYnkgaGFuZCB0byBnaXZlIHRvIGh0dHBfaW5pdCgpLAorCSAqIHByaW1hcmlseSB0byBhbGxvdyBpdCB0byBsb29rIGF0IHRoZSBVUkwuCisJICovCisJcmVtb3RlID0geGNhbGxvYyhzaXplb2YoKnJlbW90ZSksIDEpOworCUFMTE9DX0dST1cocmVtb3RlLT51cmwsIHJlbW90ZS0+dXJsX25yICsgMSwgcmVtb3RlLT51cmxfYWxsb2MpOworCXJlbW90ZS0+dXJsW3JlbW90ZS0+dXJsX25yKytdID0gcmVwby0+dXJsOworCWh0dHBfaW5pdChyZW1vdGUpOwogCi0Jbm9fcHJhZ21hX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKG5vX3ByYWdtYV9oZWFkZXIsICJQcmFnbWE6Iik7Ci0KLQlpZiAocmVtb3RlLT51cmwgJiYgcmVtb3RlLT51cmxbc3RybGVuKHJlbW90ZS0+dXJsKS0xXSAhPSAnLycpIHsKLQkJcmV3cml0dGVuX3VybCA9IHhtYWxsb2Moc3RybGVuKHJlbW90ZS0+dXJsKSsyKTsKLQkJc3RyY3B5KHJld3JpdHRlbl91cmwsIHJlbW90ZS0+dXJsKTsKKwlpZiAocmVwby0+dXJsICYmIHJlcG8tPnVybFtzdHJsZW4ocmVwby0+dXJsKS0xXSAhPSAnLycpIHsKKwkJcmV3cml0dGVuX3VybCA9IHhtYWxsb2Moc3RybGVuKHJlcG8tPnVybCkrMik7CisJCXN0cmNweShyZXdyaXR0ZW5fdXJsLCByZXBvLT51cmwpOwogCQlzdHJjYXQocmV3cml0dGVuX3VybCwgIi8iKTsKLQkJcmVtb3RlLT5wYXRoID0gcmV3cml0dGVuX3VybCArIChyZW1vdGUtPnBhdGggLSByZW1vdGUtPnVybCk7Ci0JCXJlbW90ZS0+cGF0aF9sZW4rKzsKLQkJcmVtb3RlLT51cmwgPSByZXdyaXR0ZW5fdXJsOworCQlyZXBvLT5wYXRoID0gcmV3cml0dGVuX3VybCArIChyZXBvLT5wYXRoIC0gcmVwby0+dXJsKTsKKwkJcmVwby0+cGF0aF9sZW4rKzsKKwkJcmVwby0+dXJsID0gcmV3cml0dGVuX3VybDsKIAl9CiAKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAwOworI2VuZGlmCisKIAkvKiBWZXJpZnkgREFWIGNvbXBsaWFuY2UvbG9jayBzdXBwb3J0ICovCiAJaWYgKCFsb2NraW5nX2F2YWlsYWJsZSgpKSB7CiAJCXJjID0gMTsKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCXNpZ25hbChTSUdJTlQsIHJlbW92ZV9sb2Nrc19vbl9zaWduYWwpOwotCXNpZ25hbChTSUdIVVAsIHJlbW92ZV9sb2Nrc19vbl9zaWduYWwpOwotCXNpZ25hbChTSUdRVUlULCByZW1vdmVfbG9ja3Nfb25fc2lnbmFsKTsKLQlzaWduYWwoU0lHVEVSTSwgcmVtb3ZlX2xvY2tzX29uX3NpZ25hbCk7CisJc2lnY2hhaW5fcHVzaF9jb21tb24ocmVtb3ZlX2xvY2tzX29uX3NpZ25hbCk7CiAKIAkvKiBDaGVjayB3aGV0aGVyIHRoZSByZW1vdGUgaGFzIHNlcnZlciBpbmZvIGZpbGVzICovCi0JcmVtb3RlLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7Ci0JcmVtb3RlLT5oYXNfaW5mb19yZWZzID0gcmVtb3RlX2V4aXN0cygiaW5mby9yZWZzIik7Ci0JcmVtb3RlLT5oYXNfaW5mb19wYWNrcyA9IHJlbW90ZV9leGlzdHMoIm9iamVjdHMvaW5mby9wYWNrcyIpOwotCWlmIChyZW1vdGUtPmhhc19pbmZvX3JlZnMpIHsKKwlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJcmVwby0+aGFzX2luZm9fcmVmcyA9IHJlbW90ZV9leGlzdHMoImluZm8vcmVmcyIpOworCXJlcG8tPmhhc19pbmZvX3BhY2tzID0gcmVtb3RlX2V4aXN0cygib2JqZWN0cy9pbmZvL3BhY2tzIik7CisJaWYgKHJlcG8tPmhhc19pbmZvX3JlZnMpIHsKIAkJaW5mb19yZWZfbG9jayA9IGxvY2tfcmVtb3RlKCJpbmZvL3JlZnMiLCBMT0NLX1RJTUUpOwogCQlpZiAoaW5mb19yZWZfbG9jaykKLQkJCXJlbW90ZS0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAxOworCQkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAxOwogCQllbHNlIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGNhbm5vdCBsb2NrIGV4aXN0aW5nIGluZm8vcmVmc1xuIik7CisJCQllcnJvcigiY2Fubm90IGxvY2sgZXhpc3RpbmcgaW5mby9yZWZzIik7CiAJCQlyYyA9IDE7CiAJCQlnb3RvIGNsZWFudXA7CiAJCX0KIAl9Ci0JaWYgKHJlbW90ZS0+aGFzX2luZm9fcGFja3MpCisJaWYgKHJlcG8tPmhhc19pbmZvX3BhY2tzKQogCQlmZXRjaF9pbmRpY2VzKCk7CiAKIAkvKiBHZXQgYSBsaXN0IG9mIGFsbCBsb2NhbCBhbmQgcmVtb3RlIGhlYWRzIHRvIHZhbGlkYXRlIHJlZnNwZWNzICovCi0JZ2V0X2xvY2FsX2hlYWRzKCk7CisJbG9jYWxfcmVmcyA9IGdldF9sb2NhbF9oZWFkcygpOwogCWZwcmludGYoc3RkZXJyLCAiRmV0Y2hpbmcgcmVtb3RlIGhlYWRzLi4uXG4iKTsKIAlnZXRfZGF2X3JlbW90ZV9oZWFkcygpOworCXJ1bl9yZXF1ZXN0X3F1ZXVlKCk7CiAKIAkvKiBSZW1vdmUgYSByZW1vdGUgYnJhbmNoIGlmIC1kIG9yIC1EIHdhcyBzcGVjaWZpZWQgKi8KIAlpZiAoZGVsZXRlX2JyYW5jaCkgewpAQCAtMjMwMyw5ICsxOTE4LDcgQEAKIAl9CiAKIAkvKiBtYXRjaCB0aGVtIHVwICovCi0JaWYgKCFyZW1vdGVfdGFpbCkKLQkJcmVtb3RlX3RhaWwgPSAmcmVtb3RlX3JlZnM7Ci0JaWYgKG1hdGNoX3JlZnMobG9jYWxfcmVmcywgcmVtb3RlX3JlZnMsICZyZW1vdGVfdGFpbCwKKwlpZiAobWF0Y2hfcmVmcyhsb2NhbF9yZWZzLCAmcmVtb3RlX3JlZnMsCiAJCSAgICAgICBucl9yZWZzcGVjLCAoY29uc3QgY2hhciAqKikgcmVmc3BlYywgcHVzaF9hbGwpKSB7CiAJCXJjID0gLTE7CiAJCWdvdG8gY2xlYW51cDsKQEAgLTIzMTksMTQgKzE5MzIsMTQgQEAKIAluZXdfcmVmcyA9IDA7CiAJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKIAkJY2hhciBvbGRfaGV4WzYwXSwgKm5ld19oZXg7Ci0JCWNvbnN0IGNoYXIgKmNvbW1pdF9hcmd2WzRdOworCQljb25zdCBjaGFyICpjb21taXRfYXJndls1XTsKIAkJaW50IGNvbW1pdF9hcmdjOwogCQljaGFyICpuZXdfc2hhMV9oZXgsICpvbGRfc2hhMV9oZXg7CiAKIAkJaWYgKCFyZWYtPnBlZXJfcmVmKQogCQkJY29udGludWU7CiAKLQkJaWYgKGlzX3plcm9fc2hhMShyZWYtPnBlZXJfcmVmLT5uZXdfc2hhMSkpIHsKKwkJaWYgKGlzX251bGxfc2hhMShyZWYtPnBlZXJfcmVmLT5uZXdfc2hhMSkpIHsKIAkJCWlmIChkZWxldGVfcmVtb3RlX2JyYW5jaChyZWYtPm5hbWUsIDEpID09IC0xKSB7CiAJCQkJZXJyb3IoIkNvdWxkIG5vdCByZW1vdmUgJXMiLCByZWYtPm5hbWUpOwogCQkJCXJjID0gLTQ7CkBAIC0yMzQyLDcgKzE5NTUsNyBAQAogCQl9CiAKIAkJaWYgKCFmb3JjZV9hbGwgJiYKLQkJICAgICFpc196ZXJvX3NoYTEocmVmLT5vbGRfc2hhMSkgJiYKKwkJICAgICFpc19udWxsX3NoYTEocmVmLT5vbGRfc2hhMSkgJiYKIAkJICAgICFyZWYtPmZvcmNlKSB7CiAJCQlpZiAoIWhhc19zaGExX2ZpbGUocmVmLT5vbGRfc2hhMSkgfHwKIAkJCSAgICAhcmVmX25ld2VyKHJlZi0+cGVlcl9yZWYtPm5ld19zaGExLApAQCAtMjM5MiwxMyArMjAwNSwxNCBAQAogCQlvbGRfc2hhMV9oZXggPSBOVUxMOwogCQljb21taXRfYXJndlsxXSA9ICItLW9iamVjdHMiOwogCQljb21taXRfYXJndlsyXSA9IG5ld19zaGExX2hleDsKLQkJaWYgKCFwdXNoX2FsbCAmJiAhaXNfemVyb19zaGExKHJlZi0+b2xkX3NoYTEpKSB7CisJCWlmICghcHVzaF9hbGwgJiYgIWlzX251bGxfc2hhMShyZWYtPm9sZF9zaGExKSkgewogCQkJb2xkX3NoYTFfaGV4ID0geG1hbGxvYyg0Mik7CiAJCQlzcHJpbnRmKG9sZF9zaGExX2hleCwgIl4lcyIsCiAJCQkJc2hhMV90b19oZXgocmVmLT5vbGRfc2hhMSkpOwogCQkJY29tbWl0X2FyZ3ZbM10gPSBvbGRfc2hhMV9oZXg7CiAJCQljb21taXRfYXJnYysrOwogCQl9CisJCWNvbW1pdF9hcmd2W2NvbW1pdF9hcmdjXSA9IE5VTEw7CiAJCWluaXRfcmV2aXNpb25zKCZyZXZzLCBzZXR1cF9naXRfZGlyZWN0b3J5KCkpOwogCQlzZXR1cF9yZXZpc2lvbnMoY29tbWl0X2FyZ2MsIGNvbW1pdF9hcmd2LCAmcmV2cywgTlVMTCk7CiAJCXJldnMuZWRnZV9oaW50ID0gMDsgLyoganVzdCBpbiBjYXNlICovCkBAIC0yNDIyLDE2ICsyMDM2LDggQEAKIAkJaWYgKG9iamVjdHNfdG9fc2VuZCkKIAkJCWZwcmludGYoc3RkZXJyLCAiICAgIHNlbmRpbmcgJWQgb2JqZWN0c1xuIiwKIAkJCQlvYmplY3RzX3RvX3NlbmQpOwotI2lmZGVmIFVTRV9DVVJMX01VTFRJCi0JCWZpbGxfYWN0aXZlX3Nsb3RzKCk7Ci0JCWFkZF9maWxsX2Z1bmN0aW9uKE5VTEwsIGZpbGxfYWN0aXZlX3Nsb3QpOwotI2VuZGlmCi0JCWRvIHsKLQkJCWZpbmlzaF9hbGxfYWN0aXZlX3Nsb3RzKCk7Ci0jaWZkZWYgVVNFX0NVUkxfTVVMVEkKLQkJCWZpbGxfYWN0aXZlX3Nsb3RzKCk7Ci0jZW5kaWYKLQkJfSB3aGlsZSAocmVxdWVzdF9xdWV1ZV9oZWFkICYmICFhYm9ydGVkKTsKKworCQlydW5fcmVxdWVzdF9xdWV1ZSgpOwogCiAJCS8qIFVwZGF0ZSB0aGUgcmVtb3RlIGJyYW5jaCBpZiBhbGwgd2VudCB3ZWxsICovCiAJCWlmIChhYm9ydGVkIHx8ICF1cGRhdGVfcmVtb3RlKHJlZi0+bmV3X3NoYTEsIHJlZl9sb2NrKSkKQEAgLTI0NDQsOCArMjA1MCw4IEBACiAJfQogCiAJLyogVXBkYXRlIHJlbW90ZSBzZXJ2ZXIgaW5mbyBpZiBhcHByb3ByaWF0ZSAqLwotCWlmIChyZW1vdGUtPmhhc19pbmZvX3JlZnMgJiYgbmV3X3JlZnMpIHsKLQkJaWYgKGluZm9fcmVmX2xvY2sgJiYgcmVtb3RlLT5jYW5fdXBkYXRlX2luZm9fcmVmcykgeworCWlmIChyZXBvLT5oYXNfaW5mb19yZWZzICYmIG5ld19yZWZzKSB7CisJCWlmIChpbmZvX3JlZl9sb2NrICYmIHJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwgIlVwZGF0aW5nIHJlbW90ZSBzZXJ2ZXIgaW5mb1xuIik7CiAJCQlpZiAoIWRyeV9ydW4pCiAJCQkJdXBkYXRlX3JlbW90ZV9pbmZvX3JlZnMoaW5mb19yZWZfbG9jayk7CkBAIC0yNDU4LDkgKzIwNjQsNyBAQAogCWZyZWUocmV3cml0dGVuX3VybCk7CiAJaWYgKGluZm9fcmVmX2xvY2spCiAJCXVubG9ja19yZW1vdGUoaW5mb19yZWZfbG9jayk7Ci0JZnJlZShyZW1vdGUpOwotCi0JY3VybF9zbGlzdF9mcmVlX2FsbChub19wcmFnbWFfaGVhZGVyKTsKKwlmcmVlKHJlcG8pOwogCiAJaHR0cF9jbGVhbnVwKCk7CiAKZGlmZiAtLWdpdCBhL2h0dHAtd2Fsa2VyLmMgYi9odHRwLXdhbGtlci5jCmluZGV4IDBkYmFkM2MuLjcwMGJjMTMgMTAwNjQ0Ci0tLSBhL2h0dHAtd2Fsa2VyLmMKKysrIGIvaHR0cC13YWxrZXIuYwpAQCAtMSwxMiArMSw4IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJjb21taXQuaCIKLSNpbmNsdWRlICJwYWNrLmgiCiAjaW5jbHVkZSAid2Fsa2VyLmgiCiAjaW5jbHVkZSAiaHR0cC5oIgogCi0jZGVmaW5lIFBSRVZfQlVGX1NJWkUgNDA5NgotI2RlZmluZSBSQU5HRV9IRUFERVJfU0laRSAzMAotCiBzdHJ1Y3QgYWx0X2Jhc2UKIHsKIAljaGFyICpiYXNlOwpAQCAtMjcsMjAgKzIzLDggQEAKIAlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXI7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAlzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG87Ci0JY2hhciAqdXJsOwotCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwotCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07Ci0JaW50IGxvY2FsOwogCWVudW0gb2JqZWN0X3JlcXVlc3Rfc3RhdGUgc3RhdGU7Ci0JQ1VSTGNvZGUgY3VybF9yZXN1bHQ7Ci0JY2hhciBlcnJvcnN0cltDVVJMX0VSUk9SX1NJWkVdOwotCWxvbmcgaHR0cF9jb2RlOwotCXVuc2lnbmVkIGNoYXIgcmVhbF9zaGExWzIwXTsKLQlnaXRfU0hBX0NUWCBjOwotCXpfc3RyZWFtIHN0cmVhbTsKLQlpbnQgenJldDsKLQlpbnQgcmVuYW1lOwotCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpuZXh0OwogfTsKIApAQCAtNTcsMzkgKzQxLDEwIEBACiAJY29uc3QgY2hhciAqdXJsOwogCWludCBnb3RfYWx0ZXJuYXRlczsKIAlzdHJ1Y3QgYWx0X2Jhc2UgKmFsdDsKLQlzdHJ1Y3QgY3VybF9zbGlzdCAqbm9fcHJhZ21hX2hlYWRlcjsKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9iamVjdF9xdWV1ZV9oZWFkOwogCi1zdGF0aWMgc2l6ZV90IGZ3cml0ZV9zaGExX2ZpbGUodm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLAotCQkJICAgICAgIHZvaWQgKmRhdGEpCi17Ci0JdW5zaWduZWQgY2hhciBleHBuWzQwOTZdOwotCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOwotCWludCBwb3NuID0gMDsKLQlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEgPSAoc3RydWN0IG9iamVjdF9yZXF1ZXN0ICopZGF0YTsKLQlkbyB7Ci0JCXNzaXplX3QgcmV0dmFsID0geHdyaXRlKG9ial9yZXEtPmxvY2FsLAotCQkJCSAgICAgICAoY2hhciAqKSBwdHIgKyBwb3NuLCBzaXplIC0gcG9zbik7Ci0JCWlmIChyZXR2YWwgPCAwKQotCQkJcmV0dXJuIHBvc247Ci0JCXBvc24gKz0gcmV0dmFsOwotCX0gd2hpbGUgKHBvc24gPCBzaXplKTsKLQotCW9ial9yZXEtPnN0cmVhbS5hdmFpbF9pbiA9IHNpemU7Ci0Jb2JqX3JlcS0+c3RyZWFtLm5leHRfaW4gPSBwdHI7Ci0JZG8gewotCQlvYmpfcmVxLT5zdHJlYW0ubmV4dF9vdXQgPSBleHBuOwotCQlvYmpfcmVxLT5zdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGV4cG4pOwotCQlvYmpfcmVxLT56cmV0ID0gZ2l0X2luZmxhdGUoJm9ial9yZXEtPnN0cmVhbSwgWl9TWU5DX0ZMVVNIKTsKLQkJZ2l0X1NIQTFfVXBkYXRlKCZvYmpfcmVxLT5jLCBleHBuLAotCQkJICAgIHNpemVvZihleHBuKSAtIG9ial9yZXEtPnN0cmVhbS5hdmFpbF9vdXQpOwotCX0gd2hpbGUgKG9ial9yZXEtPnN0cmVhbS5hdmFpbF9pbiAmJiBvYmpfcmVxLT56cmV0ID09IFpfT0spOwotCWRhdGFfcmVjZWl2ZWQrKzsKLQlyZXR1cm4gc2l6ZTsKLX0KLQogc3RhdGljIHZvaWQgZmV0Y2hfYWx0ZXJuYXRlcyhzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNvbnN0IGNoYXIgKmJhc2UpOwogCiBzdGF0aWMgdm9pZCBwcm9jZXNzX29iamVjdF9yZXNwb25zZSh2b2lkICpjYWxsYmFja19kYXRhKTsKQEAgLTk3LDE2NiArNTIsMzUgQEAKIHN0YXRpYyB2b2lkIHN0YXJ0X29iamVjdF9yZXF1ZXN0KHN0cnVjdCB3YWxrZXIgKndhbGtlciwKIAkJCQkgc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxKQogewotCWNoYXIgKmhleCA9IHNoYTFfdG9faGV4KG9ial9yZXEtPnNoYTEpOwotCWNoYXIgcHJldmZpbGVbUEFUSF9NQVhdOwotCWNoYXIgKnVybDsKLQljaGFyICpwb3NuOwotCWludCBwcmV2bG9jYWw7Ci0JdW5zaWduZWQgY2hhciBwcmV2X2J1ZltQUkVWX0JVRl9TSVpFXTsKLQlzc2l6ZV90IHByZXZfcmVhZCA9IDA7Ci0JbG9uZyBwcmV2X3Bvc24gPSAwOwotCWNoYXIgcmFuZ2VbUkFOR0VfSEVBREVSX1NJWkVdOwotCXN0cnVjdCBjdXJsX3NsaXN0ICpyYW5nZV9oZWFkZXIgPSBOVUxMOwogCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwotCXN0cnVjdCB3YWxrZXJfZGF0YSAqZGF0YSA9IHdhbGtlci0+ZGF0YTsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqcmVxOwogCi0Jc25wcmludGYocHJldmZpbGUsIHNpemVvZihwcmV2ZmlsZSksICIlcy5wcmV2Iiwgb2JqX3JlcS0+ZmlsZW5hbWUpOwotCXVubGluayhwcmV2ZmlsZSk7Ci0JcmVuYW1lKG9ial9yZXEtPnRtcGZpbGUsIHByZXZmaWxlKTsKLQl1bmxpbmsob2JqX3JlcS0+dG1wZmlsZSk7Ci0KLQlpZiAob2JqX3JlcS0+bG9jYWwgIT0gLTEpCi0JCWVycm9yKCJmZCBsZWFrYWdlIGluIHN0YXJ0OiAlZCIsIG9ial9yZXEtPmxvY2FsKTsKLQlvYmpfcmVxLT5sb2NhbCA9IG9wZW4ob2JqX3JlcS0+dG1wZmlsZSwKLQkJCSAgICAgIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7Ci0JLyogVGhpcyBjb3VsZCBoYXZlIGZhaWxlZCBkdWUgdG8gdGhlICJsYXp5IGRpcmVjdG9yeSBjcmVhdGlvbiI7Ci0JICogdHJ5IHRvIG1rZGlyIHRoZSBsYXN0IHBhdGggY29tcG9uZW50LgotCSAqLwotCWlmIChvYmpfcmVxLT5sb2NhbCA8IDAgJiYgZXJybm8gPT0gRU5PRU5UKSB7Ci0JCWNoYXIgKmRpciA9IHN0cnJjaHIob2JqX3JlcS0+dG1wZmlsZSwgJy8nKTsKLQkJaWYgKGRpcikgewotCQkJKmRpciA9IDA7Ci0JCQlta2RpcihvYmpfcmVxLT50bXBmaWxlLCAwNzc3KTsKLQkJCSpkaXIgPSAnLyc7Ci0JCX0KLQkJb2JqX3JlcS0+bG9jYWwgPSBvcGVuKG9ial9yZXEtPnRtcGZpbGUsCi0JCQkJICAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKLQl9Ci0KLQlpZiAob2JqX3JlcS0+bG9jYWwgPCAwKSB7CisJcmVxID0gbmV3X2h0dHBfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcS0+cmVwby0+YmFzZSwgb2JqX3JlcS0+c2hhMSk7CisJaWYgKHJlcSA9PSBOVUxMKSB7CiAJCW9ial9yZXEtPnN0YXRlID0gQUJPUlRFRDsKLQkJZXJyb3IoIkNvdWxkbid0IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAlcyBmb3IgJXM6ICVzIiwKLQkJICAgICAgb2JqX3JlcS0+dG1wZmlsZSwgb2JqX3JlcS0+ZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAJCXJldHVybjsKIAl9CisJb2JqX3JlcS0+cmVxID0gcmVxOwogCi0JbWVtc2V0KCZvYmpfcmVxLT5zdHJlYW0sIDAsIHNpemVvZihvYmpfcmVxLT5zdHJlYW0pKTsKLQotCWdpdF9pbmZsYXRlX2luaXQoJm9ial9yZXEtPnN0cmVhbSk7Ci0KLQlnaXRfU0hBMV9Jbml0KCZvYmpfcmVxLT5jKTsKLQotCXVybCA9IHhtYWxsb2Moc3RybGVuKG9ial9yZXEtPnJlcG8tPmJhc2UpICsgNTEpOwotCW9ial9yZXEtPnVybCA9IHhtYWxsb2Moc3RybGVuKG9ial9yZXEtPnJlcG8tPmJhc2UpICsgNTEpOwotCXN0cmNweSh1cmwsIG9ial9yZXEtPnJlcG8tPmJhc2UpOwotCXBvc24gPSB1cmwgKyBzdHJsZW4ob2JqX3JlcS0+cmVwby0+YmFzZSk7Ci0Jc3RyY3B5KHBvc24sICIvb2JqZWN0cy8iKTsKLQlwb3NuICs9IDk7Ci0JbWVtY3B5KHBvc24sIGhleCwgMik7Ci0JcG9zbiArPSAyOwotCSoocG9zbisrKSA9ICcvJzsKLQlzdHJjcHkocG9zbiwgaGV4ICsgMik7Ci0Jc3RyY3B5KG9ial9yZXEtPnVybCwgdXJsKTsKLQotCS8qIElmIGEgcHJldmlvdXMgdGVtcCBmaWxlIGlzIHByZXNlbnQsIHByb2Nlc3Mgd2hhdCB3YXMgYWxyZWFkeQotCSAgIGZldGNoZWQuICovCi0JcHJldmxvY2FsID0gb3BlbihwcmV2ZmlsZSwgT19SRE9OTFkpOwotCWlmIChwcmV2bG9jYWwgIT0gLTEpIHsKLQkJZG8gewotCQkJcHJldl9yZWFkID0geHJlYWQocHJldmxvY2FsLCBwcmV2X2J1ZiwgUFJFVl9CVUZfU0laRSk7Ci0JCQlpZiAocHJldl9yZWFkPjApIHsKLQkJCQlpZiAoZndyaXRlX3NoYTFfZmlsZShwcmV2X2J1ZiwKLQkJCQkJCSAgICAgMSwKLQkJCQkJCSAgICAgcHJldl9yZWFkLAotCQkJCQkJICAgICBvYmpfcmVxKSA9PSBwcmV2X3JlYWQpIHsKLQkJCQkJcHJldl9wb3NuICs9IHByZXZfcmVhZDsKLQkJCQl9IGVsc2UgewotCQkJCQlwcmV2X3JlYWQgPSAtMTsKLQkJCQl9Ci0JCQl9Ci0JCX0gd2hpbGUgKHByZXZfcmVhZCA+IDApOwotCQljbG9zZShwcmV2bG9jYWwpOwotCX0KLQl1bmxpbmsocHJldmZpbGUpOwotCi0JLyogUmVzZXQgaW5mbGF0ZS9TSEExIGlmIHRoZXJlIHdhcyBhbiBlcnJvciByZWFkaW5nIHRoZSBwcmV2aW91cyB0ZW1wCi0JICAgZmlsZTsgYWxzbyByZXdpbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9jYWwgZmlsZS4gKi8KLQlpZiAocHJldl9yZWFkID09IC0xKSB7Ci0JCW1lbXNldCgmb2JqX3JlcS0+c3RyZWFtLCAwLCBzaXplb2Yob2JqX3JlcS0+c3RyZWFtKSk7Ci0JCWdpdF9pbmZsYXRlX2luaXQoJm9ial9yZXEtPnN0cmVhbSk7Ci0JCWdpdF9TSEExX0luaXQoJm9ial9yZXEtPmMpOwotCQlpZiAocHJldl9wb3NuPjApIHsKLQkJCXByZXZfcG9zbiA9IDA7Ci0JCQlsc2VlayhvYmpfcmVxLT5sb2NhbCwgMCwgU0VFS19TRVQpOwotCQkJZnRydW5jYXRlKG9ial9yZXEtPmxvY2FsLCAwKTsKLQkJfQotCX0KLQotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90ID0gcmVxLT5zbG90OwogCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX29iamVjdF9yZXNwb25zZTsKIAlzbG90LT5jYWxsYmFja19kYXRhID0gb2JqX3JlcTsKLQlvYmpfcmVxLT5zbG90ID0gc2xvdDsKLQotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCBvYmpfcmVxKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX3NoYTFfZmlsZSk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBvYmpfcmVxLT5lcnJvcnN0cik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF0YS0+bm9fcHJhZ21hX2hlYWRlcik7Ci0KLQkvKiBJZiB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZGF0YSBmcm9tIGEgcHJldmlvdXMgZmV0Y2gKLQkgICBhdHRlbXB0LCBvbmx5IGZldGNoIHRoZSBkYXRhIHdlIGRvbid0IGFscmVhZHkgaGF2ZS4gKi8KLQlpZiAocHJldl9wb3NuPjApIHsKLQkJaWYgKHdhbGtlci0+Z2V0X3ZlcmJvc2VseSkKLQkJCWZwcmludGYoc3RkZXJyLAotCQkJCSJSZXN1bWluZyBmZXRjaCBvZiBvYmplY3QgJXMgYXQgYnl0ZSAlbGRcbiIsCi0JCQkJaGV4LCBwcmV2X3Bvc24pOwotCQlzcHJpbnRmKHJhbmdlLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwcmV2X3Bvc24pOwotCQlyYW5nZV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChyYW5nZV9oZWFkZXIsIHJhbmdlKTsKLQkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLAotCQkJCSBDVVJMT1BUX0hUVFBIRUFERVIsIHJhbmdlX2hlYWRlcik7Ci0JfQogCiAJLyogVHJ5IHRvIGdldCB0aGUgcmVxdWVzdCBzdGFydGVkLCBhYm9ydCB0aGUgcmVxdWVzdCBvbiBlcnJvciAqLwogCW9ial9yZXEtPnN0YXRlID0gQUNUSVZFOwogCWlmICghc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKIAkJb2JqX3JlcS0+c3RhdGUgPSBBQk9SVEVEOwotCQlvYmpfcmVxLT5zbG90ID0gTlVMTDsKLQkJY2xvc2Uob2JqX3JlcS0+bG9jYWwpOyBvYmpfcmVxLT5sb2NhbCA9IC0xOwotCQlmcmVlKG9ial9yZXEtPnVybCk7CisJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChyZXEpOwogCQlyZXR1cm47CiAJfQogfQogCiBzdGF0aWMgdm9pZCBmaW5pc2hfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxKQogewotCXN0cnVjdCBzdGF0IHN0OwotCi0JZmNobW9kKG9ial9yZXEtPmxvY2FsLCAwNDQ0KTsKLQljbG9zZShvYmpfcmVxLT5sb2NhbCk7IG9ial9yZXEtPmxvY2FsID0gLTE7Ci0KLQlpZiAob2JqX3JlcS0+aHR0cF9jb2RlID09IDQxNikgewotCQlmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IHJlcXVlc3RlZCByYW5nZSBpbnZhbGlkOyB3ZSBtYXkgYWxyZWFkeSBoYXZlIGFsbCB0aGUgZGF0YS5cbiIpOwotCX0gZWxzZSBpZiAob2JqX3JlcS0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKLQkJaWYgKHN0YXQob2JqX3JlcS0+dG1wZmlsZSwgJnN0KSA9PSAwKQotCQkJaWYgKHN0LnN0X3NpemUgPT0gMCkKLQkJCQl1bmxpbmsob2JqX3JlcS0+dG1wZmlsZSk7CisJaWYgKGZpbmlzaF9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcSkpCiAJCXJldHVybjsKLQl9CiAKLQlnaXRfaW5mbGF0ZV9lbmQoJm9ial9yZXEtPnN0cmVhbSk7Ci0JZ2l0X1NIQTFfRmluYWwob2JqX3JlcS0+cmVhbF9zaGExLCAmb2JqX3JlcS0+Yyk7Ci0JaWYgKG9ial9yZXEtPnpyZXQgIT0gWl9TVFJFQU1fRU5EKSB7Ci0JCXVubGluayhvYmpfcmVxLT50bXBmaWxlKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoaGFzaGNtcChvYmpfcmVxLT5zaGExLCBvYmpfcmVxLT5yZWFsX3NoYTEpKSB7Ci0JCXVubGluayhvYmpfcmVxLT50bXBmaWxlKTsKLQkJcmV0dXJuOwotCX0KLQlvYmpfcmVxLT5yZW5hbWUgPQotCQltb3ZlX3RlbXBfdG9fZmlsZShvYmpfcmVxLT50bXBmaWxlLCBvYmpfcmVxLT5maWxlbmFtZSk7Ci0KLQlpZiAob2JqX3JlcS0+cmVuYW1lID09IDApCisJaWYgKG9ial9yZXEtPnJlcS0+cmVuYW1lID09IDApCiAJCXdhbGtlcl9zYXkob2JqX3JlcS0+d2Fsa2VyLCAiZ290ICVzXG4iLCBzaGExX3RvX2hleChvYmpfcmVxLT5zaGExKSk7CiB9CiAKQEAgLTI2OCwxOSArOTIsMTYgQEAKIAlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7CiAJc3RydWN0IGFsdF9iYXNlICphbHQgPSBkYXRhLT5hbHQ7CiAKLQlvYmpfcmVxLT5jdXJsX3Jlc3VsdCA9IG9ial9yZXEtPnNsb3QtPmN1cmxfcmVzdWx0OwotCW9ial9yZXEtPmh0dHBfY29kZSA9IG9ial9yZXEtPnNsb3QtPmh0dHBfY29kZTsKLQlvYmpfcmVxLT5zbG90ID0gTlVMTDsKKwlwcm9jZXNzX2h0dHBfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcS0+cmVxKTsKIAlvYmpfcmVxLT5zdGF0ZSA9IENPTVBMRVRFOwogCiAJLyogVXNlIGFsdGVybmF0ZXMgaWYgbmVjZXNzYXJ5ICovCi0JaWYgKG1pc3NpbmdfdGFyZ2V0KG9ial9yZXEpKSB7CisJaWYgKG1pc3NpbmdfdGFyZ2V0KG9ial9yZXEtPnJlcSkpIHsKIAkJZmV0Y2hfYWx0ZXJuYXRlcyh3YWxrZXIsIGFsdC0+YmFzZSk7CiAJCWlmIChvYmpfcmVxLT5yZXBvLT5uZXh0ICE9IE5VTEwpIHsKIAkJCW9ial9yZXEtPnJlcG8gPQogCQkJCW9ial9yZXEtPnJlcG8tPm5leHQ7Ci0JCQljbG9zZShvYmpfcmVxLT5sb2NhbCk7Ci0JCQlvYmpfcmVxLT5sb2NhbCA9IC0xOworCQkJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcSk7CiAJCQlzdGFydF9vYmplY3RfcmVxdWVzdCh3YWxrZXIsIG9ial9yZXEpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0yOTMsOCArMTE0LDggQEAKIHsKIAlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKmVudHJ5ID0gb2JqZWN0X3F1ZXVlX2hlYWQ7CiAKLQlpZiAob2JqX3JlcS0+bG9jYWwgIT0gLTEpCi0JCWVycm9yKCJmZCBsZWFrYWdlIGluIHJlbGVhc2U6ICVkIiwgb2JqX3JlcS0+bG9jYWwpOworCWlmIChvYmpfcmVxLT5yZXEgIT1OVUxMICYmIG9ial9yZXEtPnJlcS0+bG9jYWxmaWxlICE9IC0xKQorCQllcnJvcigiZmQgbGVha2FnZSBpbiByZWxlYXNlOiAlZCIsIG9ial9yZXEtPnJlcS0+bG9jYWxmaWxlKTsKIAlpZiAob2JqX3JlcSA9PSBvYmplY3RfcXVldWVfaGVhZCkgewogCQlvYmplY3RfcXVldWVfaGVhZCA9IG9ial9yZXEtPm5leHQ7CiAJfSBlbHNlIHsKQEAgLTMwNCw3ICsxMjUsNiBAQAogCQkJZW50cnktPm5leHQgPSBlbnRyeS0+bmV4dC0+bmV4dDsKIAl9CiAKLQlmcmVlKG9ial9yZXEtPnVybCk7CiAJZnJlZShvYmpfcmVxKTsKIH0KIApAQCAtMzMyLDI4ICsxNTIsMjMgQEAKIAlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm5ld3JlcTsKIAlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKnRhaWw7CiAJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOwotCWNoYXIgKmZpbGVuYW1lID0gc2hhMV9maWxlX25hbWUoc2hhMSk7CiAKIAluZXdyZXEgPSB4bWFsbG9jKHNpemVvZigqbmV3cmVxKSk7CiAJbmV3cmVxLT53YWxrZXIgPSB3YWxrZXI7CiAJaGFzaGNweShuZXdyZXEtPnNoYTEsIHNoYTEpOwogCW5ld3JlcS0+cmVwbyA9IGRhdGEtPmFsdDsKLQluZXdyZXEtPnVybCA9IE5VTEw7Ci0JbmV3cmVxLT5sb2NhbCA9IC0xOwogCW5ld3JlcS0+c3RhdGUgPSBXQUlUSU5HOwotCXNucHJpbnRmKG5ld3JlcS0+ZmlsZW5hbWUsIHNpemVvZihuZXdyZXEtPmZpbGVuYW1lKSwgIiVzIiwgZmlsZW5hbWUpOwotCXNucHJpbnRmKG5ld3JlcS0+dG1wZmlsZSwgc2l6ZW9mKG5ld3JlcS0+dG1wZmlsZSksCi0JCSAiJXMudGVtcCIsIGZpbGVuYW1lKTsKLQluZXdyZXEtPnNsb3QgPSBOVUxMOworCW5ld3JlcS0+cmVxID0gTlVMTDsKIAluZXdyZXEtPm5leHQgPSBOVUxMOwogCisJaHR0cF9pc192ZXJib3NlID0gd2Fsa2VyLT5nZXRfdmVyYm9zZWx5OworCiAJaWYgKG9iamVjdF9xdWV1ZV9oZWFkID09IE5VTEwpIHsKIAkJb2JqZWN0X3F1ZXVlX2hlYWQgPSBuZXdyZXE7CiAJfSBlbHNlIHsKIAkJdGFpbCA9IG9iamVjdF9xdWV1ZV9oZWFkOwotCQl3aGlsZSAodGFpbC0+bmV4dCAhPSBOVUxMKSB7CisJCXdoaWxlICh0YWlsLT5uZXh0ICE9IE5VTEwpCiAJCQl0YWlsID0gdGFpbC0+bmV4dDsKLQkJfQogCQl0YWlsLT5uZXh0ID0gbmV3cmVxOwogCX0KIApAQCAtMzYzLDkyICsxNzgsNiBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgZmV0Y2hfaW5kZXgoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG8sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCi17Ci0JY2hhciAqaGV4ID0gc2hhMV90b19oZXgoc2hhMSk7Ci0JY2hhciAqZmlsZW5hbWU7Ci0JY2hhciAqdXJsOwotCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07Ci0JbG9uZyBwcmV2X3Bvc24gPSAwOwotCWNoYXIgcmFuZ2VbUkFOR0VfSEVBREVSX1NJWkVdOwotCXN0cnVjdCBjdXJsX3NsaXN0ICpyYW5nZV9oZWFkZXIgPSBOVUxMOwotCXN0cnVjdCB3YWxrZXJfZGF0YSAqZGF0YSA9IHdhbGtlci0+ZGF0YTsKLQotCUZJTEUgKmluZGV4ZmlsZTsKLQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKLQlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7Ci0KLQlpZiAoaGFzX3BhY2tfaW5kZXgoc2hhMSkpCi0JCXJldHVybiAwOwotCi0JaWYgKHdhbGtlci0+Z2V0X3ZlcmJvc2VseSkKLQkJZnByaW50ZihzdGRlcnIsICJHZXR0aW5nIGluZGV4IGZvciBwYWNrICVzXG4iLCBoZXgpOwotCi0JdXJsID0geG1hbGxvYyhzdHJsZW4ocmVwby0+YmFzZSkgKyA2NCk7Ci0Jc3ByaW50Zih1cmwsICIlcy9vYmplY3RzL3BhY2svcGFjay0lcy5pZHgiLCByZXBvLT5iYXNlLCBoZXgpOwotCi0JZmlsZW5hbWUgPSBzaGExX3BhY2tfaW5kZXhfbmFtZShzaGExKTsKLQlzbnByaW50Zih0bXBmaWxlLCBzaXplb2YodG1wZmlsZSksICIlcy50ZW1wIiwgZmlsZW5hbWUpOwotCWluZGV4ZmlsZSA9IGZvcGVuKHRtcGZpbGUsICJhIik7Ci0JaWYgKCFpbmRleGZpbGUpCi0JCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyBmb3IgcGFjayBpbmRleCIsCi0JCQkgICAgIHRtcGZpbGUpOwotCi0Jc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwotCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgaW5kZXhmaWxlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBkYXRhLT5ub19wcmFnbWFfaGVhZGVyKTsKLQlzbG90LT5sb2NhbCA9IGluZGV4ZmlsZTsKLQotCS8qIElmIHRoZXJlIGlzIGRhdGEgcHJlc2VudCBmcm9tIGEgcHJldmlvdXMgdHJhbnNmZXIgYXR0ZW1wdCwKLQkgICByZXN1bWUgd2hlcmUgaXQgbGVmdCBvZmYgKi8KLQlwcmV2X3Bvc24gPSBmdGVsbChpbmRleGZpbGUpOwotCWlmIChwcmV2X3Bvc24+MCkgewotCQlpZiAod2Fsa2VyLT5nZXRfdmVyYm9zZWx5KQotCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJIlJlc3VtaW5nIGZldGNoIG9mIGluZGV4IGZvciBwYWNrICVzIGF0IGJ5dGUgJWxkXG4iLAotCQkJCWhleCwgcHJldl9wb3NuKTsKLQkJc3ByaW50ZihyYW5nZSwgIlJhbmdlOiBieXRlcz0lbGQtIiwgcHJldl9wb3NuKTsKLQkJcmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQocmFuZ2VfaGVhZGVyLCByYW5nZSk7Ci0JCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCByYW5nZV9oZWFkZXIpOwotCX0KLQotCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgewotCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7Ci0JCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7Ci0JCQlmY2xvc2UoaW5kZXhmaWxlKTsKLQkJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIGdldCBwYWNrIGluZGV4ICVzXG4lcyIsIHVybCwKLQkJCQkgICAgIGN1cmxfZXJyb3JzdHIpOwotCQl9Ci0JfSBlbHNlIHsKLQkJZmNsb3NlKGluZGV4ZmlsZSk7Ci0JCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKLQl9Ci0KLQlmY2xvc2UoaW5kZXhmaWxlKTsKLQotCXJldHVybiBtb3ZlX3RlbXBfdG9fZmlsZSh0bXBmaWxlLCBmaWxlbmFtZSk7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0dXBfaW5kZXgoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG8sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCi17Ci0Jc3RydWN0IHBhY2tlZF9naXQgKm5ld19wYWNrOwotCWlmIChoYXNfcGFja19maWxlKHNoYTEpKQotCQlyZXR1cm4gMDsgLyogZG9uJ3QgbGlzdCB0aGlzIGFzIHNvbWV0aGluZyB3ZSBjYW4gZ2V0ICovCi0KLQlpZiAoZmV0Y2hfaW5kZXgod2Fsa2VyLCByZXBvLCBzaGExKSkKLQkJcmV0dXJuIC0xOwotCi0JbmV3X3BhY2sgPSBwYXJzZV9wYWNrX2luZGV4KHNoYTEpOwotCWlmICghbmV3X3BhY2spCi0JCXJldHVybiAtMTsgLyogcGFyc2VfcGFja19pbmRleCgpIGFscmVhZHkgaXNzdWVkIGVycm9yIG1lc3NhZ2UgKi8KLQluZXdfcGFjay0+bmV4dCA9IHJlcG8tPnBhY2tzOwotCXJlcG8tPnBhY2tzID0gbmV3X3BhY2s7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHByb2Nlc3NfYWx0ZXJuYXRlc19yZXNwb25zZSh2b2lkICpjYWxsYmFja19kYXRhKQogewogCXN0cnVjdCBhbHRlcm5hdGVzX3JlcXVlc3QgKmFsdF9yZXEgPQpAQCAtNTA1LDcgKzIzNCw4IEBACiAJCQlzdHJ1Y3QgYWx0X2Jhc2UgKm5ld2FsdDsKIAkJCWNoYXIgKnRhcmdldCA9IE5VTEw7CiAJCQlpZiAoZGF0YVtpXSA9PSAnLycpIHsKLQkJCQkvKiBUaGlzIGNvdW50cworCQkJCS8qCisJCQkJICogVGhpcyBjb3VudHMKIAkJCQkgKiBodHRwOi8vZ2l0Lmhvc3QvcHViL3NjbS9saW51eC5naXQvCiAJCQkJICogLS0tLS0tLS0tLS1oZXJlXgogCQkJCSAqIHNvIG1lbWNweShkc3QsIGJhc2UsIHNlcnZlcmxlbikgd2lsbApAQCAtNTE4LDcgKzI0OCw4IEBACiAJCQkJCW9rYXkgPSAxOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoIW1lbWNtcChkYXRhICsgaSwgIi4uLyIsIDMpKSB7Ci0JCQkJLyogUmVsYXRpdmUgVVJMOyBjaG9wIHRoZSBjb3JyZXNwb25kaW5nCisJCQkJLyoKKwkJCQkgKiBSZWxhdGl2ZSBVUkw7IGNob3AgdGhlIGNvcnJlc3BvbmRpbmcKIAkJCQkgKiBudW1iZXIgb2Ygc3VicGF0aCBmcm9tIGJhc2UgKGFuZCAuLi8KIAkJCQkgKiBmcm9tIGRhdGEpLCBhbmQgY29uY2F0ZW5hdGUgdGhlIHJlc3VsdC4KIAkJCQkgKgpAQCAtNTQ3LDcgKzI3OCw3IEBACiAJCQkJfQogCQkJCS8qIElmIHRoZSBzZXJ2ZXIgZ290IHJlbW92ZWQsIGdpdmUgdXAuICovCiAJCQkJb2theSA9IHN0cmNocihiYXNlLCAnOicpIC0gYmFzZSArIDMgPAotCQkJCQlzZXJ2ZXJsZW47CisJCQkJICAgICAgIHNlcnZlcmxlbjsKIAkJCX0gZWxzZSBpZiAoYWx0X3JlcS0+aHR0cF9zcGVjaWZpYykgewogCQkJCWNoYXIgKmNvbG9uID0gc3RyY2hyKGRhdGEgKyBpLCAnOicpOwogCQkJCWNoYXIgKnNsYXNoID0gc3RyY2hyKGRhdGEgKyBpLCAnLycpOwpAQCAtNTkxLDkgKzMyMiwxMSBAQAogCXN0cnVjdCBhbHRlcm5hdGVzX3JlcXVlc3QgYWx0X3JlcTsKIAlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmNkYXRhID0gd2Fsa2VyLT5kYXRhOwogCi0JLyogSWYgYW5vdGhlciByZXF1ZXN0IGhhcyBhbHJlYWR5IHN0YXJ0ZWQgZmV0Y2hpbmcgYWx0ZXJuYXRlcywKLQkgICB3YWl0IGZvciB0aGVtIHRvIGFycml2ZSBhbmQgcmV0dXJuIHRvIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0J3MKLQkgICBjdXJsIG1lc3NhZ2UgKi8KKwkvKgorCSAqIElmIGFub3RoZXIgcmVxdWVzdCBoYXMgYWxyZWFkeSBzdGFydGVkIGZldGNoaW5nIGFsdGVybmF0ZXMsCisJICogd2FpdCBmb3IgdGhlbSB0byBhcnJpdmUgYW5kIHJldHVybiB0byBwcm9jZXNzaW5nIHRoaXMgcmVxdWVzdCdzCisJICogY3VybCBtZXNzYWdlCisJICovCiAjaWZkZWYgVVNFX0NVUkxfTVVMVEkKIAl3aGlsZSAoY2RhdGEtPmdvdF9hbHRlcm5hdGVzID09IDApIHsKIAkJc3RlcF9hY3RpdmVfc2xvdHMoKTsKQEAgLTYxMyw4ICszNDYsMTAgQEAKIAl1cmwgPSB4bWFsbG9jKHN0cmxlbihiYXNlKSArIDMxKTsKIAlzcHJpbnRmKHVybCwgIiVzL29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMiLCBiYXNlKTsKIAotCS8qIFVzZSBhIGNhbGxiYWNrIHRvIHByb2Nlc3MgdGhlIHJlc3VsdCwgc2luY2UgYW5vdGhlciByZXF1ZXN0Ci0JICAgbWF5IGZhaWwgYW5kIG5lZWQgdG8gaGF2ZSBhbHRlcm5hdGVzIGxvYWRlZCBiZWZvcmUgY29udGludWluZyAqLworCS8qCisJICogVXNlIGEgY2FsbGJhY2sgdG8gcHJvY2VzcyB0aGUgcmVzdWx0LCBzaW5jZSBhbm90aGVyIHJlcXVlc3QKKwkgKiBtYXkgZmFpbCBhbmQgbmVlZCB0byBoYXZlIGFsdGVybmF0ZXMgbG9hZGVkIGJlZm9yZSBjb250aW51aW5nCisJICovCiAJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwogCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX2FsdGVybmF0ZXNfcmVzcG9uc2U7CiAJYWx0X3JlcS53YWxrZXIgPSB3YWxrZXI7CkBAIC02NDEsMTUgKzM3Niw3IEBACiAKIHN0YXRpYyBpbnQgZmV0Y2hfaW5kaWNlcyhzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCBhbHRfYmFzZSAqcmVwbykKIHsKLQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCWNoYXIgKnVybDsKLQlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOwotCWNoYXIgKmRhdGE7Ci0JaW50IGkgPSAwOwotCWludCByZXQgPSAwOwotCi0Jc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7Ci0Jc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOworCWludCByZXQ7CiAKIAlpZiAocmVwby0+Z290X2luZGljZXMpCiAJCXJldHVybiAwOwpAQCAtNjU3LDc2ICszODQsMjYgQEAKIAlpZiAod2Fsa2VyLT5nZXRfdmVyYm9zZWx5KQogCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgcGFjayBsaXN0IGZvciAlc1xuIiwgcmVwby0+YmFzZSk7CiAKLQl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT5iYXNlKSArIDIxKTsKLQlzcHJpbnRmKHVybCwgIiVzL29iamVjdHMvaW5mby9wYWNrcyIsIHJlcG8tPmJhc2UpOwotCi0Jc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwotCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmJ1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIE5VTEwpOwotCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgewotCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7Ci0JCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7Ci0JCQlpZiAobWlzc2luZ190YXJnZXQoJnJlc3VsdHMpKSB7Ci0JCQkJcmVwby0+Z290X2luZGljZXMgPSAxOwotCQkJCWdvdG8gY2xlYW51cDsKLQkJCX0gZWxzZSB7Ci0JCQkJcmVwby0+Z290X2luZGljZXMgPSAwOwotCQkJCXJldCA9IGVycm9yKCIlcyIsIGN1cmxfZXJyb3JzdHIpOwotCQkJCWdvdG8gY2xlYW51cDsKLQkJCX0KLQkJfQotCX0gZWxzZSB7CisJc3dpdGNoIChodHRwX2dldF9pbmZvX3BhY2tzKHJlcG8tPmJhc2UsICZyZXBvLT5wYWNrcykpIHsKKwljYXNlIEhUVFBfT0s6CisJY2FzZSBIVFRQX01JU1NJTkdfVEFSR0VUOgorCQlyZXBvLT5nb3RfaW5kaWNlcyA9IDE7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJlcG8tPmdvdF9pbmRpY2VzID0gMDsKLQkJcmV0ID0gZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7Ci0JCWdvdG8gY2xlYW51cDsKKwkJcmV0ID0gLTE7CiAJfQogCi0JZGF0YSA9IGJ1ZmZlci5idWY7Ci0Jd2hpbGUgKGkgPCBidWZmZXIubGVuKSB7Ci0JCXN3aXRjaCAoZGF0YVtpXSkgewotCQljYXNlICdQJzoKLQkJCWkrKzsKLQkJCWlmIChpICsgNTIgPD0gYnVmZmVyLmxlbiAmJgotCQkJICAgICFwcmVmaXhjbXAoZGF0YSArIGksICIgcGFjay0iKSAmJgotCQkJICAgICFwcmVmaXhjbXAoZGF0YSArIGkgKyA0NiwgIi5wYWNrXG4iKSkgewotCQkJCWdldF9zaGExX2hleChkYXRhICsgaSArIDYsIHNoYTEpOwotCQkJCXNldHVwX2luZGV4KHdhbGtlciwgcmVwbywgc2hhMSk7Ci0JCQkJaSArPSA1MTsKLQkJCQlicmVhazsKLQkJCX0KLQkJZGVmYXVsdDoKLQkJCXdoaWxlIChpIDwgYnVmZmVyLmxlbiAmJiBkYXRhW2ldICE9ICdcbicpCi0JCQkJaSsrOwotCQl9Ci0JCWkrKzsKLQl9Ci0KLQlyZXBvLT5nb3RfaW5kaWNlcyA9IDE7Ci1jbGVhbnVwOgotCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOwotCWZyZWUodXJsKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGZldGNoX3BhY2soc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG8sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7Ci0JY2hhciAqdXJsOwogCXN0cnVjdCBwYWNrZWRfZ2l0ICp0YXJnZXQ7Ci0Jc3RydWN0IHBhY2tlZF9naXQgKipsc3Q7Ci0JRklMRSAqcGFja2ZpbGU7Ci0JY2hhciAqZmlsZW5hbWU7Ci0JY2hhciB0bXBmaWxlW1BBVEhfTUFYXTsKIAlpbnQgcmV0OwotCWxvbmcgcHJldl9wb3NuID0gMDsKLQljaGFyIHJhbmdlW1JBTkdFX0hFQURFUl9TSVpFXTsKLQlzdHJ1Y3QgY3VybF9zbGlzdCAqcmFuZ2VfaGVhZGVyID0gTlVMTDsKLQlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7Ci0KLQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKIAlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxOwogCiAJaWYgKGZldGNoX2luZGljZXMod2Fsa2VyLCByZXBvKSkKIAkJcmV0dXJuIC0xOwpAQCAtNzQxLDgwICs0MTgsMzcgQEAKIAkJCXNoYTFfdG9faGV4KHNoYTEpKTsKIAl9CiAKLQl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT5iYXNlKSArIDY1KTsKLQlzcHJpbnRmKHVybCwgIiVzL29iamVjdHMvcGFjay9wYWNrLSVzLnBhY2siLAotCQlyZXBvLT5iYXNlLCBzaGExX3RvX2hleCh0YXJnZXQtPnNoYTEpKTsKKwlwcmVxID0gbmV3X2h0dHBfcGFja19yZXF1ZXN0KHRhcmdldCwgcmVwby0+YmFzZSk7CisJaWYgKHByZXEgPT0gTlVMTCkKKwkJZ290byBhYm9ydDsKKwlwcmVxLT5sc3QgPSAmcmVwby0+cGFja3M7CisJcHJlcS0+c2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOwogCi0JZmlsZW5hbWUgPSBzaGExX3BhY2tfbmFtZSh0YXJnZXQtPnNoYTEpOwotCXNucHJpbnRmKHRtcGZpbGUsIHNpemVvZih0bXBmaWxlKSwgIiVzLnRlbXAiLCBmaWxlbmFtZSk7Ci0JcGFja2ZpbGUgPSBmb3Blbih0bXBmaWxlLCAiYSIpOwotCWlmICghcGFja2ZpbGUpCi0JCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyBmb3IgcGFjayIsCi0JCQkgICAgIHRtcGZpbGUpOwotCi0Jc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwotCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgcGFja2ZpbGUpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGUpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdGEtPm5vX3ByYWdtYV9oZWFkZXIpOwotCXNsb3QtPmxvY2FsID0gcGFja2ZpbGU7Ci0KLQkvKiBJZiB0aGVyZSBpcyBkYXRhIHByZXNlbnQgZnJvbSBhIHByZXZpb3VzIHRyYW5zZmVyIGF0dGVtcHQsCi0JICAgcmVzdW1lIHdoZXJlIGl0IGxlZnQgb2ZmICovCi0JcHJldl9wb3NuID0gZnRlbGwocGFja2ZpbGUpOwotCWlmIChwcmV2X3Bvc24+MCkgewotCQlpZiAod2Fsa2VyLT5nZXRfdmVyYm9zZWx5KQotCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJIlJlc3VtaW5nIGZldGNoIG9mIHBhY2sgJXMgYXQgYnl0ZSAlbGRcbiIsCi0JCQkJc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSwgcHJldl9wb3NuKTsKLQkJc3ByaW50ZihyYW5nZSwgIlJhbmdlOiBieXRlcz0lbGQtIiwgcHJldl9wb3NuKTsKLQkJcmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQocmFuZ2VfaGVhZGVyLCByYW5nZSk7Ci0JCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCByYW5nZV9oZWFkZXIpOwotCX0KLQotCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgewotCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHByZXEtPnNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChwcmVxLT5zbG90KTsKIAkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKLQkJCWZjbG9zZShwYWNrZmlsZSk7Ci0JCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBnZXQgcGFjayBmaWxlICVzXG4lcyIsIHVybCwKLQkJCQkgICAgIGN1cmxfZXJyb3JzdHIpOworCQkJZXJyb3IoIlVuYWJsZSB0byBnZXQgcGFjayBmaWxlICVzXG4lcyIsIHByZXEtPnVybCwKKwkJCSAgICAgIGN1cmxfZXJyb3JzdHIpOworCQkJZ290byBhYm9ydDsKIAkJfQogCX0gZWxzZSB7Ci0JCWZjbG9zZShwYWNrZmlsZSk7Ci0JCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKKwkJZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7CisJCWdvdG8gYWJvcnQ7CiAJfQogCi0JdGFyZ2V0LT5wYWNrX3NpemUgPSBmdGVsbChwYWNrZmlsZSk7Ci0JZmNsb3NlKHBhY2tmaWxlKTsKLQotCXJldCA9IG1vdmVfdGVtcF90b19maWxlKHRtcGZpbGUsIGZpbGVuYW1lKTsKKwlyZXQgPSBmaW5pc2hfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CisJcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChwcmVxKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbHN0ID0gJnJlcG8tPnBhY2tzOwotCXdoaWxlICgqbHN0ICE9IHRhcmdldCkKLQkJbHN0ID0gJigoKmxzdCktPm5leHQpOwotCSpsc3QgPSAoKmxzdCktPm5leHQ7Ci0KLQlpZiAodmVyaWZ5X3BhY2sodGFyZ2V0KSkKLQkJcmV0dXJuIC0xOwotCWluc3RhbGxfcGFja2VkX2dpdCh0YXJnZXQpOwotCiAJcmV0dXJuIDA7CisKK2Fib3J0OgorCXJldHVybiAtMTsKIH0KIAogc3RhdGljIHZvaWQgYWJvcnRfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxKQogewotCWlmIChvYmpfcmVxLT5sb2NhbCA+PSAwKSB7Ci0JCWNsb3NlKG9ial9yZXEtPmxvY2FsKTsKLQkJb2JqX3JlcS0+bG9jYWwgPSAtMTsKLQl9Ci0JdW5saW5rKG9ial9yZXEtPnRtcGZpbGUpOwotCWlmIChvYmpfcmVxLT5zbG90KSB7Ci0JCXJlbGVhc2VfYWN0aXZlX3Nsb3Qob2JqX3JlcS0+c2xvdCk7Ci0JCW9ial9yZXEtPnNsb3QgPSBOVUxMOwotCX0KIAlyZWxlYXNlX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOwogfQogCkBAIC04MjMsNiArNDU3LDcgQEAKIAljaGFyICpoZXggPSBzaGExX3RvX2hleChzaGExKTsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEgPSBvYmplY3RfcXVldWVfaGVhZDsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqcmVxOwogCiAJd2hpbGUgKG9ial9yZXEgIT0gTlVMTCAmJiBoYXNoY21wKG9ial9yZXEtPnNoYTEsIHNoYTEpKQogCQlvYmpfcmVxID0gb2JqX3JlcS0+bmV4dDsKQEAgLTgzMCw0NSArNDY1LDU1IEBACiAJCXJldHVybiBlcnJvcigiQ291bGRuJ3QgZmluZCByZXF1ZXN0IGZvciAlcyBpbiB0aGUgcXVldWUiLCBoZXgpOwogCiAJaWYgKGhhc19zaGExX2ZpbGUob2JqX3JlcS0+c2hhMSkpIHsKKwkJaWYgKG9ial9yZXEtPnJlcSAhPSBOVUxMKQorCQkJYWJvcnRfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxLT5yZXEpOwogCQlhYm9ydF9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAjaWZkZWYgVVNFX0NVUkxfTVVMVEkKLQl3aGlsZSAob2JqX3JlcS0+c3RhdGUgPT0gV0FJVElORykgeworCXdoaWxlIChvYmpfcmVxLT5zdGF0ZSA9PSBXQUlUSU5HKQogCQlzdGVwX2FjdGl2ZV9zbG90cygpOwotCX0KICNlbHNlCiAJc3RhcnRfb2JqZWN0X3JlcXVlc3Qod2Fsa2VyLCBvYmpfcmVxKTsKICNlbmRpZgogCi0Jd2hpbGUgKG9ial9yZXEtPnN0YXRlID09IEFDVElWRSkgewotCQlydW5fYWN0aXZlX3Nsb3Qob2JqX3JlcS0+c2xvdCk7Ci0JfQotCWlmIChvYmpfcmVxLT5sb2NhbCAhPSAtMSkgewotCQljbG9zZShvYmpfcmVxLT5sb2NhbCk7IG9ial9yZXEtPmxvY2FsID0gLTE7CisJLyoKKwkgKiBvYmpfcmVxLT5yZXEgbWlnaHQgY2hhbmdlIHdoZW4gZmV0Y2hpbmcgYWx0ZXJuYXRlcyBpbiB0aGUgY2FsbGJhY2sKKwkgKiBwcm9jZXNzX29iamVjdF9yZXNwb25zZTsgdGhlcmVmb3JlLCB0aGUgInNob3J0Y3V0IiB2YXJpYWJsZSwgcmVxLAorCSAqIGlzIHVzZWQgb25seSBhZnRlciB3ZSdyZSBkb25lIHdpdGggc2xvdHMuCisJICovCisJd2hpbGUgKG9ial9yZXEtPnN0YXRlID09IEFDVElWRSkKKwkJcnVuX2FjdGl2ZV9zbG90KG9ial9yZXEtPnJlcS0+c2xvdCk7CisKKwlyZXEgPSBvYmpfcmVxLT5yZXE7CisKKwlpZiAocmVxLT5sb2NhbGZpbGUgIT0gLTEpIHsKKwkJY2xvc2UocmVxLT5sb2NhbGZpbGUpOworCQlyZXEtPmxvY2FsZmlsZSA9IC0xOwogCX0KIAogCWlmIChvYmpfcmVxLT5zdGF0ZSA9PSBBQk9SVEVEKSB7CiAJCXJldCA9IGVycm9yKCJSZXF1ZXN0IGZvciAlcyBhYm9ydGVkIiwgaGV4KTsKLQl9IGVsc2UgaWYgKG9ial9yZXEtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LICYmCi0JCSAgIG9ial9yZXEtPmh0dHBfY29kZSAhPSA0MTYpIHsKLQkJaWYgKG1pc3NpbmdfdGFyZ2V0KG9ial9yZXEpKQorCX0gZWxzZSBpZiAocmVxLT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSyAmJgorCQkgICByZXEtPmh0dHBfY29kZSAhPSA0MTYpIHsKKwkJaWYgKG1pc3NpbmdfdGFyZ2V0KHJlcSkpCiAJCQlyZXQgPSAtMTsgLyogQmUgc2lsZW50LCBpdCBpcyBwcm9iYWJseSBpbiBhIHBhY2suICovCiAJCWVsc2UKIAkJCXJldCA9IGVycm9yKCIlcyAoY3VybF9yZXN1bHQgPSAlZCwgaHR0cF9jb2RlID0gJWxkLCBzaGExID0gJXMpIiwKLQkJCQkgICAgb2JqX3JlcS0+ZXJyb3JzdHIsIG9ial9yZXEtPmN1cmxfcmVzdWx0LAotCQkJCSAgICBvYmpfcmVxLT5odHRwX2NvZGUsIGhleCk7Ci0JfSBlbHNlIGlmIChvYmpfcmVxLT56cmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQkJCSAgICByZXEtPmVycm9yc3RyLCByZXEtPmN1cmxfcmVzdWx0LAorCQkJCSAgICByZXEtPmh0dHBfY29kZSwgaGV4KTsKKwl9IGVsc2UgaWYgKHJlcS0+enJldCAhPSBaX1NUUkVBTV9FTkQpIHsKIAkJd2Fsa2VyLT5jb3JydXB0X29iamVjdF9mb3VuZCsrOwotCQlyZXQgPSBlcnJvcigiRmlsZSAlcyAoJXMpIGNvcnJ1cHQiLCBoZXgsIG9ial9yZXEtPnVybCk7Ci0JfSBlbHNlIGlmIChoYXNoY21wKG9ial9yZXEtPnNoYTEsIG9ial9yZXEtPnJlYWxfc2hhMSkpIHsKKwkJcmV0ID0gZXJyb3IoIkZpbGUgJXMgKCVzKSBjb3JydXB0IiwgaGV4LCByZXEtPnVybCk7CisJfSBlbHNlIGlmIChoYXNoY21wKG9ial9yZXEtPnNoYTEsIHJlcS0+cmVhbF9zaGExKSkgewogCQlyZXQgPSBlcnJvcigiRmlsZSAlcyBoYXMgYmFkIGhhc2giLCBoZXgpOwotCX0gZWxzZSBpZiAob2JqX3JlcS0+cmVuYW1lIDwgMCkgeworCX0gZWxzZSBpZiAocmVxLT5yZW5hbWUgPCAwKSB7CiAJCXJldCA9IGVycm9yKCJ1bmFibGUgdG8gd3JpdGUgc2hhMSBmaWxlbmFtZSAlcyIsCi0JCQkgICAgb2JqX3JlcS0+ZmlsZW5hbWUpOworCQkJICAgIHJlcS0+ZmlsZW5hbWUpOwogCX0KIAorCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChyZXEpOwogCXJlbGVhc2Vfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTg5OCwxMCArNTQzLDcgQEAKIAogc3RhdGljIHZvaWQgY2xlYW51cChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIpCiB7Ci0Jc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOwogCWh0dHBfY2xlYW51cCgpOwotCi0JY3VybF9zbGlzdF9mcmVlX2FsbChkYXRhLT5ub19wcmFnbWFfaGVhZGVyKTsKIH0KIAogc3RydWN0IHdhbGtlciAqZ2V0X2h0dHBfd2Fsa2VyKGNvbnN0IGNoYXIgKnVybCwgc3RydWN0IHJlbW90ZSAqcmVtb3RlKQpAQCAtOTEyLDggKzU1NCw2IEBACiAKIAlodHRwX2luaXQocmVtb3RlKTsKIAotCWRhdGEtPm5vX3ByYWdtYV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChOVUxMLCAiUHJhZ21hOiIpOwotCiAJZGF0YS0+YWx0ID0geG1hbGxvYyhzaXplb2YoKmRhdGEtPmFsdCkpOwogCWRhdGEtPmFsdC0+YmFzZSA9IHhtYWxsb2Moc3RybGVuKHVybCkgKyAxKTsKIAlzdHJjcHkoZGF0YS0+YWx0LT5iYXNlLCB1cmwpOwpkaWZmIC0tZ2l0IGEvaHR0cC5jIGIvaHR0cC5jCmluZGV4IGVlNTg3OTkuLmEyNzIwZDUgMTAwNjQ0Ci0tLSBhL2h0dHAuYworKysgYi9odHRwLmMKQEAgLTEsNyArMSw5IEBACiAjaW5jbHVkZSAiaHR0cC5oIgorI2luY2x1ZGUgInBhY2suaCIKIAogaW50IGRhdGFfcmVjZWl2ZWQ7Ci1pbnQgYWN0aXZlX3JlcXVlc3RzID0gMDsKK2ludCBhY3RpdmVfcmVxdWVzdHM7CitpbnQgaHR0cF9pc192ZXJib3NlOwogCiAjaWZkZWYgVVNFX0NVUkxfTVVMVEkKIHN0YXRpYyBpbnQgbWF4X3JlcXVlc3RzID0gLTE7CkBAIC0xMCwyNSArMTIsNDIgQEAKICNpZm5kZWYgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQogc3RhdGljIENVUkwgKmN1cmxfZGVmYXVsdDsKICNlbmRpZgorCisjZGVmaW5lIFBSRVZfQlVGX1NJWkUgNDA5NgorI2RlZmluZSBSQU5HRV9IRUFERVJfU0laRSAzMAorCiBjaGFyIGN1cmxfZXJyb3JzdHJbQ1VSTF9FUlJPUl9TSVpFXTsKIAogc3RhdGljIGludCBjdXJsX3NzbF92ZXJpZnkgPSAtMTsKLXN0YXRpYyBjb25zdCBjaGFyICpzc2xfY2VydCA9IE5VTEw7Ci0jaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMgotc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9rZXkgPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9jZXJ0OworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDMKK3N0YXRpYyBjb25zdCBjaGFyICpzc2xfa2V5OwogI2VuZGlmCiAjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwOAotc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9jYXBhdGggPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9jYXBhdGg7CiAjZW5kaWYKLXN0YXRpYyBjb25zdCBjaGFyICpzc2xfY2FpbmZvID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyICpzc2xfY2FpbmZvOwogc3RhdGljIGxvbmcgY3VybF9sb3dfc3BlZWRfbGltaXQgPSAtMTsKIHN0YXRpYyBsb25nIGN1cmxfbG93X3NwZWVkX3RpbWUgPSAtMTsKLXN0YXRpYyBpbnQgY3VybF9mdHBfbm9fZXBzdiA9IDA7Ci1zdGF0aWMgY29uc3QgY2hhciAqY3VybF9odHRwX3Byb3h5ID0gTlVMTDsKK3N0YXRpYyBpbnQgY3VybF9mdHBfbm9fZXBzdjsKK3N0YXRpYyBjb25zdCBjaGFyICpjdXJsX2h0dHBfcHJveHk7CitzdGF0aWMgY2hhciAqdXNlcl9uYW1lLCAqdXNlcl9wYXNzOworCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTcwMAorLyogVXNlIENVUkxPUFRfS0VZUEFTU1dEIGFzIGlzICovCisjZWxpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAzCisjZGVmaW5lIENVUkxPUFRfS0VZUEFTU1dEIENVUkxPUFRfU1NMS0VZUEFTU1dECisjZWxzZQorI2RlZmluZSBDVVJMT1BUX0tFWVBBU1NXRCBDVVJMT1BUX1NTTENFUlRQQVNTV0QKKyNlbmRpZgorCitzdGF0aWMgY2hhciAqc3NsX2NlcnRfcGFzc3dvcmQ7CitzdGF0aWMgaW50IHNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkOwogCiBzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKnByYWdtYV9oZWFkZXI7CitzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKm5vX3ByYWdtYV9oZWFkZXI7CiAKLXN0YXRpYyBzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqYWN0aXZlX3F1ZXVlX2hlYWQgPSBOVUxMOworc3RhdGljIHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICphY3RpdmVfcXVldWVfaGVhZDsKIAogc2l6ZV90IGZyZWFkX2J1ZmZlcih2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKmJ1ZmZlcl8pCiB7CkBAIC00Myw2ICs2MiwyNSBAQAogCXJldHVybiBzaXplOwogfQogCisjaWZuZGVmIE5PX0NVUkxfSU9DVEwKK2N1cmxpb2VyciBpb2N0bF9idWZmZXIoQ1VSTCAqaGFuZGxlLCBpbnQgY21kLCB2b2lkICpjbGllbnRwKQoreworCXN0cnVjdCBidWZmZXIgKmJ1ZmZlciA9IGNsaWVudHA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ1VSTElPQ01EX05PUDoKKwkJcmV0dXJuIENVUkxJT0VfT0s7CisKKwljYXNlIENVUkxJT0NNRF9SRVNUQVJUUkVBRDoKKwkJYnVmZmVyLT5wb3NuID0gMDsKKwkJcmV0dXJuIENVUkxJT0VfT0s7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gQ1VSTElPRV9VTktOT1dOQ01EOworCX0KK30KKyNlbmRpZgorCiBzaXplX3QgZndyaXRlX2J1ZmZlcihjb25zdCB2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKmJ1ZmZlcl8pCiB7CiAJc2l6ZV90IHNpemUgPSBlbHRzaXplICogbm1lbWI7CkBAIC05NCw1MyArMTMyLDM4IEBACiBzdGF0aWMgaW50IGh0dHBfb3B0aW9ucyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAlpZiAoIXN0cmNtcCgiaHR0cC5zc2x2ZXJpZnkiLCB2YXIpKSB7Ci0JCWlmIChjdXJsX3NzbF92ZXJpZnkgPT0gLTEpIHsKLQkJCWN1cmxfc3NsX3ZlcmlmeSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKLQkJfQorCQljdXJsX3NzbF92ZXJpZnkgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KLQotCWlmICghc3RyY21wKCJodHRwLnNzbGNlcnQiLCB2YXIpKSB7Ci0JCWlmIChzc2xfY2VydCA9PSBOVUxMKQotCQkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZzc2xfY2VydCwgdmFyLCB2YWx1ZSk7Ci0JCXJldHVybiAwOwotCX0KLSNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAyCi0JaWYgKCFzdHJjbXAoImh0dHAuc3Nsa2V5IiwgdmFyKSkgewotCQlpZiAoc3NsX2tleSA9PSBOVUxMKQotCQkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZzc2xfa2V5LCB2YXIsIHZhbHVlKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghc3RyY21wKCJodHRwLnNzbGNlcnQiLCB2YXIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnNzbF9jZXJ0LCB2YXIsIHZhbHVlKTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAzCisJaWYgKCFzdHJjbXAoImh0dHAuc3Nsa2V5IiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZzc2xfa2V5LCB2YXIsIHZhbHVlKTsKICNlbmRpZgogI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKLQlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjYXBhdGgiLCB2YXIpKSB7Ci0JCWlmIChzc2xfY2FwYXRoID09IE5VTEwpCi0JCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnNzbF9jYXBhdGgsIHZhciwgdmFsdWUpOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2FwYXRoIiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZzc2xfY2FwYXRoLCB2YXIsIHZhbHVlKTsKICNlbmRpZgotCWlmICghc3RyY21wKCJodHRwLnNzbGNhaW5mbyIsIHZhcikpIHsKLQkJaWYgKHNzbF9jYWluZm8gPT0gTlVMTCkKLQkJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmc3NsX2NhaW5mbywgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2FpbmZvIiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZzc2xfY2FpbmZvLCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjZXJ0cGFzc3dvcmRwcm90ZWN0ZWQiLCB2YXIpKSB7CisJCWlmIChnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkpCisJCQlzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCA9IDE7CiAJCXJldHVybiAwOwogCX0KLQogI2lmZGVmIFVTRV9DVVJMX01VTFRJCiAJaWYgKCFzdHJjbXAoImh0dHAubWF4cmVxdWVzdHMiLCB2YXIpKSB7Ci0JCWlmIChtYXhfcmVxdWVzdHMgPT0gLTEpCi0JCQltYXhfcmVxdWVzdHMgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJbWF4X3JlcXVlc3RzID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KICNlbmRpZgotCiAJaWYgKCFzdHJjbXAoImh0dHAubG93c3BlZWRsaW1pdCIsIHZhcikpIHsKLQkJaWYgKGN1cmxfbG93X3NwZWVkX2xpbWl0ID09IC0xKQotCQkJY3VybF9sb3dfc3BlZWRfbGltaXQgPSAobG9uZylnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJY3VybF9sb3dfc3BlZWRfbGltaXQgPSAobG9uZylnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghc3RyY21wKCJodHRwLmxvd3NwZWVkdGltZSIsIHZhcikpIHsKLQkJaWYgKGN1cmxfbG93X3NwZWVkX3RpbWUgPT0gLTEpCi0JCQljdXJsX2xvd19zcGVlZF90aW1lID0gKGxvbmcpZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCWN1cmxfbG93X3NwZWVkX3RpbWUgPSAobG9uZylnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNDgsMTkgKzE3MSw0NCBAQAogCQljdXJsX2Z0cF9ub19lcHN2ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKCFzdHJjbXAoImh0dHAucHJveHkiLCB2YXIpKSB7Ci0JCWlmIChjdXJsX2h0dHBfcHJveHkgPT0gTlVMTCkKLQkJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmY3VybF9odHRwX3Byb3h5LCB2YXIsIHZhbHVlKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghc3RyY21wKCJodHRwLnByb3h5IiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZjdXJsX2h0dHBfcHJveHksIHZhciwgdmFsdWUpOwogCiAJLyogRmFsbCBiYWNrIG9uIHRoZSBkZWZhdWx0IG9uZXMgKi8KIAlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KIAotc3RhdGljIENVUkwqIGdldF9jdXJsX2hhbmRsZSh2b2lkKQorc3RhdGljIHZvaWQgaW5pdF9jdXJsX2h0dHBfYXV0aChDVVJMICpyZXN1bHQpCiB7Ci0JQ1VSTCogcmVzdWx0ID0gY3VybF9lYXN5X2luaXQoKTsKKwlpZiAodXNlcl9uYW1lKSB7CisJCXN0cnVjdCBzdHJidWYgdXAgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKCF1c2VyX3Bhc3MpCisJCQl1c2VyX3Bhc3MgPSB4c3RyZHVwKGdldHBhc3MoIlBhc3N3b3JkOiAiKSk7CisJCXN0cmJ1Zl9hZGRmKCZ1cCwgIiVzOiVzIiwgdXNlcl9uYW1lLCB1c2VyX3Bhc3MpOworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9VU0VSUFdELAorCQkJCSBzdHJidWZfZGV0YWNoKCZ1cCwgTlVMTCkpOworCX0KK30KKworc3RhdGljIGludCBoYXNfY2VydF9wYXNzd29yZCh2b2lkKQoreworCWlmIChzc2xfY2VydF9wYXNzd29yZCAhPSBOVUxMKQorCQlyZXR1cm4gMTsKKwlpZiAoc3NsX2NlcnQgPT0gTlVMTCB8fCBzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCAhPSAxKQorCQlyZXR1cm4gMDsKKwkvKiBPbmx5IHByb21wdCB0aGUgdXNlciBvbmNlLiAqLworCXNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkID0gLTE7CisJc3NsX2NlcnRfcGFzc3dvcmQgPSBnZXRwYXNzKCJDZXJ0aWZpY2F0ZSBQYXNzd29yZDogIik7CisJaWYgKHNzbF9jZXJ0X3Bhc3N3b3JkICE9IE5VTEwpIHsKKwkJc3NsX2NlcnRfcGFzc3dvcmQgPSB4c3RyZHVwKHNzbF9jZXJ0X3Bhc3N3b3JkKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgQ1VSTCAqZ2V0X2N1cmxfaGFuZGxlKHZvaWQpCit7CisJQ1VSTCAqcmVzdWx0ID0gY3VybF9lYXN5X2luaXQoKTsKIAogCWlmICghY3VybF9zc2xfdmVyaWZ5KSB7CiAJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAwKTsKQEAgLTE3Niw5ICsyMjQsMTMgQEAKIAljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9ORVRSQywgQ1VSTF9ORVRSQ19PUFRJT05BTCk7CiAjZW5kaWYKIAorCWluaXRfY3VybF9odHRwX2F1dGgocmVzdWx0KTsKKwogCWlmIChzc2xfY2VydCAhPSBOVUxMKQogCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xDRVJULCBzc2xfY2VydCk7Ci0jaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMgorCWlmIChoYXNfY2VydF9wYXNzd29yZCgpKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9LRVlQQVNTV0QsIHNzbF9jZXJ0X3Bhc3N3b3JkKTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAzCiAJaWYgKHNzbF9rZXkgIT0gTlVMTCkKIAkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMS0VZLCBzc2xfa2V5KTsKICNlbmRpZgpAQCAtMjEzLDE3ICsyNjUsNjkgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgdm9pZCBodHRwX2F1dGhfaW5pdChjb25zdCBjaGFyICp1cmwpCit7CisJY2hhciAqYXQsICpjb2xvbiwgKmNwLCAqc2xhc2g7CisJaW50IGxlbjsKKworCWNwID0gc3Ryc3RyKHVybCwgIjovLyIpOworCWlmICghY3ApCisJCXJldHVybjsKKworCS8qCisJICogT2ssIHRoZSBVUkwgbG9va3MgbGlrZSAicHJvdG86Ly9zb21ldGhpbmciLiAgV2hpY2ggb25lPworCSAqICJwcm90bzovLzx1c2VyPjo8cGFzcz5APGhvc3Q+Ly4uLiIsCisJICogInByb3RvOi8vPHVzZXI+QDxob3N0Pi8uLi4iLCBvciBqdXN0CisJICogInByb3RvOi8vPGhvc3Q+Ly4uLiI/CisJICovCisJY3AgKz0gMzsKKwlhdCA9IHN0cmNocihjcCwgJ0AnKTsKKwljb2xvbiA9IHN0cmNocihjcCwgJzonKTsKKwlzbGFzaCA9IHN0cmNocm51bChjcCwgJy8nKTsKKwlpZiAoIWF0IHx8IHNsYXNoIDw9IGF0KQorCQlyZXR1cm47IC8qIE5vIGNyZWRlbnRpYWxzICovCisJaWYgKCFjb2xvbiB8fCBhdCA8PSBjb2xvbikgeworCQkvKiBPbmx5IHVzZXJuYW1lICovCisJCWxlbiA9IGF0IC0gY3A7CisJCXVzZXJfbmFtZSA9IHhtYWxsb2MobGVuICsgMSk7CisJCW1lbWNweSh1c2VyX25hbWUsIGNwLCBsZW4pOworCQl1c2VyX25hbWVbbGVuXSA9ICdcMCc7CisJCXVzZXJfcGFzcyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJbGVuID0gY29sb24gLSBjcDsKKwkJdXNlcl9uYW1lID0geG1hbGxvYyhsZW4gKyAxKTsKKwkJbWVtY3B5KHVzZXJfbmFtZSwgY3AsIGxlbik7CisJCXVzZXJfbmFtZVtsZW5dID0gJ1wwJzsKKwkJbGVuID0gYXQgLSAoY29sb24gKyAxKTsKKwkJdXNlcl9wYXNzID0geG1hbGxvYyhsZW4gKyAxKTsKKwkJbWVtY3B5KHVzZXJfcGFzcywgY29sb24gKyAxLCBsZW4pOworCQl1c2VyX3Bhc3NbbGVuXSA9ICdcMCc7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfZnJvbV9lbnYoY29uc3QgY2hhciAqKnZhciwgY29uc3QgY2hhciAqZW52bmFtZSkKK3sKKwljb25zdCBjaGFyICp2YWwgPSBnZXRlbnYoZW52bmFtZSk7CisJaWYgKHZhbCkKKwkJKnZhciA9IHZhbDsKK30KKwogdm9pZCBodHRwX2luaXQoc3RydWN0IHJlbW90ZSAqcmVtb3RlKQogewogCWNoYXIgKmxvd19zcGVlZF9saW1pdDsKIAljaGFyICpsb3dfc3BlZWRfdGltZTsKIAorCWh0dHBfaXNfdmVyYm9zZSA9IDA7CisKKwlnaXRfY29uZmlnKGh0dHBfb3B0aW9ucywgTlVMTCk7CisKIAljdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CiAKIAlpZiAocmVtb3RlICYmIHJlbW90ZS0+aHR0cF9wcm94eSkKIAkJY3VybF9odHRwX3Byb3h5ID0geHN0cmR1cChyZW1vdGUtPmh0dHBfcHJveHkpOwogCiAJcHJhZ21hX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHByYWdtYV9oZWFkZXIsICJQcmFnbWE6IG5vLWNhY2hlIik7CisJbm9fcHJhZ21hX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKG5vX3ByYWdtYV9oZWFkZXIsICJQcmFnbWE6Iik7CiAKICNpZmRlZiBVU0VfQ1VSTF9NVUxUSQogCXsKQEAgLTI0MiwxNCArMzQ2LDE0IEBACiAJaWYgKGdldGVudigiR0lUX1NTTF9OT19WRVJJRlkiKSkKIAkJY3VybF9zc2xfdmVyaWZ5ID0gMDsKIAotCXNzbF9jZXJ0ID0gZ2V0ZW52KCJHSVRfU1NMX0NFUlQiKTsKLSNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAyCi0Jc3NsX2tleSA9IGdldGVudigiR0lUX1NTTF9LRVkiKTsKKwlzZXRfZnJvbV9lbnYoJnNzbF9jZXJ0LCAiR0lUX1NTTF9DRVJUIik7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMworCXNldF9mcm9tX2Vudigmc3NsX2tleSwgIkdJVF9TU0xfS0VZIik7CiAjZW5kaWYKICNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA4Ci0Jc3NsX2NhcGF0aCA9IGdldGVudigiR0lUX1NTTF9DQVBBVEgiKTsKKwlzZXRfZnJvbV9lbnYoJnNzbF9jYXBhdGgsICJHSVRfU1NMX0NBUEFUSCIpOwogI2VuZGlmCi0Jc3NsX2NhaW5mbyA9IGdldGVudigiR0lUX1NTTF9DQUlORk8iKTsKKwlzZXRfZnJvbV9lbnYoJnNzbF9jYWluZm8sICJHSVRfU1NMX0NBSU5GTyIpOwogCiAJbG93X3NwZWVkX2xpbWl0ID0gZ2V0ZW52KCJHSVRfSFRUUF9MT1dfU1BFRURfTElNSVQiKTsKIAlpZiAobG93X3NwZWVkX2xpbWl0ICE9IE5VTEwpCkBAIC0yNTgsOCArMzYyLDYgQEAKIAlpZiAobG93X3NwZWVkX3RpbWUgIT0gTlVMTCkKIAkJY3VybF9sb3dfc3BlZWRfdGltZSA9IHN0cnRvbChsb3dfc3BlZWRfdGltZSwgTlVMTCwgMTApOwogCi0JZ2l0X2NvbmZpZyhodHRwX29wdGlvbnMsIE5VTEwpOwotCiAJaWYgKGN1cmxfc3NsX3ZlcmlmeSA9PSAtMSkKIAkJY3VybF9zc2xfdmVyaWZ5ID0gMTsKIApAQCAtMjcxLDYgKzM3MywxNCBAQAogCWlmIChnZXRlbnYoIkdJVF9DVVJMX0ZUUF9OT19FUFNWIikpCiAJCWN1cmxfZnRwX25vX2Vwc3YgPSAxOwogCisJaWYgKHJlbW90ZSAmJiByZW1vdGUtPnVybCAmJiByZW1vdGUtPnVybFswXSkgeworCQlodHRwX2F1dGhfaW5pdChyZW1vdGUtPnVybFswXSk7CisJCWlmICghc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgJiYKKwkJICAgIGdldGVudigiR0lUX1NTTF9DRVJUX1BBU1NXT1JEX1BST1RFQ1RFRCIpICYmCisJCSAgICAhcHJlZml4Y21wKHJlbW90ZS0+dXJsWzBdLCAiaHR0cHM6Ly8iKSkKKwkJCXNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkID0gMTsKKwl9CisKICNpZm5kZWYgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQogCWN1cmxfZGVmYXVsdCA9IGdldF9jdXJsX2hhbmRsZSgpOwogI2VuZGlmCkBAIC0zMDUsMTAgKzQxNSwyMCBAQAogCWN1cmxfc2xpc3RfZnJlZV9hbGwocHJhZ21hX2hlYWRlcik7CiAJcHJhZ21hX2hlYWRlciA9IE5VTEw7CiAKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKG5vX3ByYWdtYV9oZWFkZXIpOworCW5vX3ByYWdtYV9oZWFkZXIgPSBOVUxMOworCiAJaWYgKGN1cmxfaHR0cF9wcm94eSkgewogCQlmcmVlKCh2b2lkICopY3VybF9odHRwX3Byb3h5KTsKIAkJY3VybF9odHRwX3Byb3h5ID0gTlVMTDsKIAl9CisKKwlpZiAoc3NsX2NlcnRfcGFzc3dvcmQgIT0gTlVMTCkgeworCQltZW1zZXQoc3NsX2NlcnRfcGFzc3dvcmQsIDAsIHN0cmxlbihzc2xfY2VydF9wYXNzd29yZCkpOworCQlmcmVlKHNzbF9jZXJ0X3Bhc3N3b3JkKTsKKwkJc3NsX2NlcnRfcGFzc3dvcmQgPSBOVUxMOworCX0KKwlzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCA9IDA7CiB9CiAKIHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpnZXRfYWN0aXZlX3Nsb3Qodm9pZCkKQEAgLTMyMiwxNSArNDQyLDE0IEBACiAJLyogV2FpdCBmb3IgYSBzbG90IHRvIG9wZW4gdXAgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwgKi8KIAl3aGlsZSAoYWN0aXZlX3JlcXVlc3RzID49IG1heF9yZXF1ZXN0cykgewogCQljdXJsX211bHRpX3BlcmZvcm0oY3VybG0sICZudW1fdHJhbnNmZXJzKTsKLQkJaWYgKG51bV90cmFuc2ZlcnMgPCBhY3RpdmVfcmVxdWVzdHMpIHsKKwkJaWYgKG51bV90cmFuc2ZlcnMgPCBhY3RpdmVfcmVxdWVzdHMpCiAJCQlwcm9jZXNzX2N1cmxfbWVzc2FnZXMoKTsKLQkJfQogCX0KICNlbmRpZgogCi0Jd2hpbGUgKHNsb3QgIT0gTlVMTCAmJiBzbG90LT5pbl91c2UpIHsKKwl3aGlsZSAoc2xvdCAhPSBOVUxMICYmIHNsb3QtPmluX3VzZSkKIAkJc2xvdCA9IHNsb3QtPm5leHQ7Ci0JfQorCiAJaWYgKHNsb3QgPT0gTlVMTCkgewogCQluZXdzbG90ID0geG1hbGxvYyhzaXplb2YoKm5ld3Nsb3QpKTsKIAkJbmV3c2xvdC0+Y3VybCA9IE5VTEw7CkBAIC0zNDEsOSArNDYwLDggQEAKIAkJaWYgKHNsb3QgPT0gTlVMTCkgewogCQkJYWN0aXZlX3F1ZXVlX2hlYWQgPSBuZXdzbG90OwogCQl9IGVsc2UgewotCQkJd2hpbGUgKHNsb3QtPm5leHQgIT0gTlVMTCkgeworCQkJd2hpbGUgKHNsb3QtPm5leHQgIT0gTlVMTCkKIAkJCQlzbG90ID0gc2xvdC0+bmV4dDsKLQkJCX0KIAkJCXNsb3QtPm5leHQgPSBuZXdzbG90OwogCQl9CiAJCXNsb3QgPSBuZXdzbG90OwpAQCAtNDA0LDcgKzUyMiw3IEBACiAJc3RydWN0IGZpbGxfY2hhaW4gKm5leHQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGxfY2hhaW4gKmZpbGxfY2ZnID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgZmlsbF9jaGFpbiAqZmlsbF9jZmc7CiAKIHZvaWQgYWRkX2ZpbGxfZnVuY3Rpb24odm9pZCAqZGF0YSwgaW50ICgqZmlsbCkodm9pZCAqKSkKIHsKQEAgLTUzNSw5ICs2NTMsOCBAQAogCX0KIAogCS8qIFJ1biBjYWxsYmFjayBpZiBhcHByb3ByaWF0ZSAqLwotCWlmIChzbG90LT5jYWxsYmFja19mdW5jICE9IE5VTEwpIHsKKwlpZiAoc2xvdC0+Y2FsbGJhY2tfZnVuYyAhPSBOVUxMKQogCQlzbG90LT5jYWxsYmFja19mdW5jKHNsb3QtPmNhbGxiYWNrX2RhdGEpOwotCX0KIH0KIAogdm9pZCBmaW5pc2hfYWxsX2FjdGl2ZV9zbG90cyh2b2lkKQpAQCAtNTUzLDYgKzY3MCw3IEBACiAJCX0KIH0KIAorLyogSGVscGVycyBmb3IgbW9kaWZ5aW5nIGFuZCBjcmVhdGluZyBVUkxzICovCiBzdGF0aWMgaW5saW5lIGludCBuZWVkc19xdW90ZShpbnQgY2gpCiB7CiAJaWYgKCgoY2ggPj0gJ0EnKSAmJiAoY2ggPD0gJ1onKSkKQEAgLTU2Nyw3NCArNjg1LDYwNSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBoZXgoaW50IHYpCiB7Ci0JaWYgKHYgPCAxMCkgcmV0dXJuICcwJyArIHY7Ci0JZWxzZSByZXR1cm4gJ0EnICsgdiAtIDEwOworCWlmICh2IDwgMTApCisJCXJldHVybiAnMCcgKyB2OworCWVsc2UKKwkJcmV0dXJuICdBJyArIHYgLSAxMDsKK30KKworc3RhdGljIHZvaWQgZW5kX3VybF93aXRoX3NsYXNoKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqdXJsKQoreworCXN0cmJ1Zl9hZGRzdHIoYnVmLCB1cmwpOworCWlmIChidWYtPmxlbiAmJiBidWYtPmJ1ZltidWYtPmxlbiAtIDFdICE9ICcvJykKKwkJc3RyYnVmX2FkZHN0cihidWYsICIvIik7CiB9CiAKIHN0YXRpYyBjaGFyICpxdW90ZV9yZWZfdXJsKGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnJlZikKIHsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCWNvbnN0IGNoYXIgKmNwOwotCWNoYXIgKmRwLCAqcXJlZjsKLQlpbnQgbGVuLCBiYXNlbGVuLCBjaDsKKwlpbnQgY2g7CiAKLQliYXNlbGVuID0gc3RybGVuKGJhc2UpOwotCWxlbiA9IGJhc2VsZW4gKyAyOyAvKiAnLycgYWZ0ZXIgYmFzZSBhbmQgdGVybWluYXRpbmcgTlVMICovCi0JZm9yIChjcCA9IHJlZjsgKGNoID0gKmNwKSAhPSAwOyBjcCsrLCBsZW4rKykKKwllbmRfdXJsX3dpdGhfc2xhc2goJmJ1ZiwgYmFzZSk7CisKKwlmb3IgKGNwID0gcmVmOyAoY2ggPSAqY3ApICE9IDA7IGNwKyspCiAJCWlmIChuZWVkc19xdW90ZShjaCkpCi0JCQlsZW4gKz0gMjsgLyogZXh0cmEgdHdvIGhleCBwbHVzIHJlcGxhY2VtZW50ICUgKi8KLQlxcmVmID0geG1hbGxvYyhsZW4pOwotCW1lbWNweShxcmVmLCBiYXNlLCBiYXNlbGVuKTsKLQlkcCA9IHFyZWYgKyBiYXNlbGVuOwotCSooZHArKykgPSAnLyc7Ci0JZm9yIChjcCA9IHJlZjsgKGNoID0gKmNwKSAhPSAwOyBjcCsrKSB7Ci0JCWlmIChuZWVkc19xdW90ZShjaCkpIHsKLQkJCSpkcCsrID0gJyUnOwotCQkJKmRwKysgPSBoZXgoKGNoID4+IDQpICYgMHhGKTsKLQkJCSpkcCsrID0gaGV4KGNoICYgMHhGKTsKLQkJfQorCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiUlJTAyeCIsIGNoKTsKIAkJZWxzZQotCQkJKmRwKysgPSBjaDsKLQl9Ci0JKmRwID0gMDsKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAqY3ApOwogCi0JcmV0dXJuIHFyZWY7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKK3ZvaWQgYXBwZW5kX3JlbW90ZV9vYmplY3RfdXJsKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqdXJsLAorCQkJICAgICAgY29uc3QgY2hhciAqaGV4LAorCQkJICAgICAgaW50IG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCkKK3sKKwlzdHJidWZfYWRkZihidWYsICIlcy9vYmplY3RzLyUuKnMvIiwgdXJsLCAyLCBoZXgpOworCWlmICghb25seV90d29fZGlnaXRfcHJlZml4KQorCQlzdHJidWZfYWRkZihidWYsICIlcyIsIGhleCsyKTsKK30KKworY2hhciAqZ2V0X3JlbW90ZV9vYmplY3RfdXJsKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqaGV4LAorCQkJICAgIGludCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoJmJ1ZiwgdXJsLCBoZXgsIG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKKy8qIGh0dHBfcmVxdWVzdCgpIHRhcmdldHMgKi8KKyNkZWZpbmUgSFRUUF9SRVFVRVNUX1NUUkJVRgkwCisjZGVmaW5lIEhUVFBfUkVRVUVTVF9GSUxFCTEKKworc3RhdGljIGludCBodHRwX3JlcXVlc3QoY29uc3QgY2hhciAqdXJsLCB2b2lkICpyZXN1bHQsIGludCB0YXJnZXQsIGludCBvcHRpb25zKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEdFVCwgMSk7CisKKwlpZiAocmVzdWx0ID09IE5VTEwpIHsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMSk7CisJfSBlbHNlIHsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMCk7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCByZXN1bHQpOworCisJCWlmICh0YXJnZXQgPT0gSFRUUF9SRVFVRVNUX0ZJTEUpIHsKKwkJCWxvbmcgcG9zbiA9IGZ0ZWxsKHJlc3VsdCk7CisJCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwKKwkJCQkJIGZ3cml0ZSk7CisJCQlpZiAocG9zbiA+IDApIHsKKwkJCQlzdHJidWZfYWRkZigmYnVmLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwb3NuKTsKKwkJCQloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgYnVmLmJ1Zik7CisJCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJfQorCQkJc2xvdC0+bG9jYWwgPSByZXN1bHQ7CisJCX0gZWxzZQorCQkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sCisJCQkJCSBmd3JpdGVfYnVmZmVyKTsKKwl9CisKKwlzdHJidWZfYWRkc3RyKCZidWYsICJQcmFnbWE6Iik7CisJaWYgKG9wdGlvbnMgJiBIVFRQX05PX0NBQ0hFKQorCQlzdHJidWZfYWRkc3RyKCZidWYsICIgbm8tY2FjaGUiKTsKKworCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBidWYuYnVmKTsKKworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcnMpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgPT0gQ1VSTEVfT0spCisJCQlyZXQgPSBIVFRQX09LOworCQllbHNlIGlmIChtaXNzaW5nX3RhcmdldCgmcmVzdWx0cykpCisJCQlyZXQgPSBIVFRQX01JU1NJTkdfVEFSR0VUOworCQllbHNlCisJCQlyZXQgPSBIVFRQX0VSUk9SOworCX0gZWxzZSB7CisJCWVycm9yKCJVbmFibGUgdG8gc3RhcnQgSFRUUCByZXF1ZXN0IGZvciAlcyIsIHVybCk7CisJCXJldCA9IEhUVFBfU1RBUlRfRkFJTEVEOworCX0KKworCXNsb3QtPmxvY2FsID0gTlVMTDsKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKGhlYWRlcnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGh0dHBfZ2V0X3N0cmJ1Zihjb25zdCBjaGFyICp1cmwsIHN0cnVjdCBzdHJidWYgKnJlc3VsdCwgaW50IG9wdGlvbnMpCit7CisJcmV0dXJuIGh0dHBfcmVxdWVzdCh1cmwsIHJlc3VsdCwgSFRUUF9SRVFVRVNUX1NUUkJVRiwgb3B0aW9ucyk7Cit9CisKK2ludCBodHRwX2dldF9maWxlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBvcHRpb25zKQoreworCWludCByZXQ7CisJc3RydWN0IHN0cmJ1ZiB0bXBmaWxlID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqcmVzdWx0OworCisJc3RyYnVmX2FkZGYoJnRtcGZpbGUsICIlcy50ZW1wIiwgZmlsZW5hbWUpOworCXJlc3VsdCA9IGZvcGVuKHRtcGZpbGUuYnVmLCAiYSIpOworCWlmICghIHJlc3VsdCkgeworCQllcnJvcigiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyIsIHRtcGZpbGUuYnVmKTsKKwkJcmV0ID0gSFRUUF9FUlJPUjsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXJldCA9IGh0dHBfcmVxdWVzdCh1cmwsIHJlc3VsdCwgSFRUUF9SRVFVRVNUX0ZJTEUsIG9wdGlvbnMpOworCWZjbG9zZShyZXN1bHQpOworCisJaWYgKChyZXQgPT0gSFRUUF9PSykgJiYgbW92ZV90ZW1wX3RvX2ZpbGUodG1wZmlsZS5idWYsIGZpbGVuYW1lKSkKKwkJcmV0ID0gSFRUUF9FUlJPUjsKK2NsZWFudXA6CisJc3RyYnVmX3JlbGVhc2UoJnRtcGZpbGUpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBodHRwX2Vycm9yKGNvbnN0IGNoYXIgKnVybCwgaW50IHJldCkKK3sKKwkvKiBodHRwX3JlcXVlc3QgaGFzIGFscmVhZHkgaGFuZGxlZCBIVFRQX1NUQVJUX0ZBSUxFRC4gKi8KKwlpZiAocmV0ICE9IEhUVFBfU1RBUlRfRkFJTEVEKQorCQllcnJvcigiJXMgd2hpbGUgYWNjZXNzaW5nICVzXG4iLCBjdXJsX2Vycm9yc3RyLCB1cmwpOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGh0dHBfZmV0Y2hfcmVmKGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCByZWYgKnJlZikKIHsKIAljaGFyICp1cmw7CiAJc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKLQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKLQlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLTE7CiAKIAl1cmwgPSBxdW90ZV9yZWZfdXJsKGJhc2UsIHJlZi0+bmFtZSk7Ci0Jc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwotCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmJ1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBOVUxMKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgewotCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7Ci0JCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7Ci0JCQlzdHJidWZfcnRyaW0oJmJ1ZmZlcik7Ci0JCQlpZiAoYnVmZmVyLmxlbiA9PSA0MCkKLQkJCQlyZXQgPSBnZXRfc2hhMV9oZXgoYnVmZmVyLmJ1ZiwgcmVmLT5vbGRfc2hhMSk7Ci0JCQllbHNlIGlmICghcHJlZml4Y21wKGJ1ZmZlci5idWYsICJyZWY6ICIpKSB7Ci0JCQkJcmVmLT5zeW1yZWYgPSB4c3RyZHVwKGJ1ZmZlci5idWYgKyA1KTsKLQkJCQlyZXQgPSAwOwotCQkJfSBlbHNlCi0JCQkJcmV0ID0gMTsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IGVycm9yKCJDb3VsZG4ndCBnZXQgJXMgZm9yICVzXG4lcyIsCi0JCQkJICAgIHVybCwgcmVmLT5uYW1lLCBjdXJsX2Vycm9yc3RyKTsKKwlpZiAoaHR0cF9nZXRfc3RyYnVmKHVybCwgJmJ1ZmZlciwgSFRUUF9OT19DQUNIRSkgPT0gSFRUUF9PSykgeworCQlzdHJidWZfcnRyaW0oJmJ1ZmZlcik7CisJCWlmIChidWZmZXIubGVuID09IDQwKQorCQkJcmV0ID0gZ2V0X3NoYTFfaGV4KGJ1ZmZlci5idWYsIHJlZi0+b2xkX3NoYTEpOworCQllbHNlIGlmICghcHJlZml4Y21wKGJ1ZmZlci5idWYsICJyZWY6ICIpKSB7CisJCQlyZWYtPnN5bXJlZiA9IHhzdHJkdXAoYnVmZmVyLmJ1ZiArIDUpOworCQkJcmV0ID0gMDsKIAkJfQotCX0gZWxzZSB7Ci0JCXJldCA9IGVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOwogCX0KIAogCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOwogCWZyZWUodXJsKTsKIAlyZXR1cm4gcmV0OwogfQorCisvKiBIZWxwZXJzIGZvciBmZXRjaGluZyBwYWNrcyAqLworc3RhdGljIGludCBmZXRjaF9wYWNrX2luZGV4KHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmJhc2VfdXJsKQoreworCWludCByZXQgPSAwOworCWNoYXIgKmhleCA9IHhzdHJkdXAoc2hhMV90b19oZXgoc2hhMSkpOworCWNoYXIgKmZpbGVuYW1lOworCWNoYXIgKnVybDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJLyogRG9uJ3QgdXNlIHRoZSBpbmRleCBpZiB0aGUgcGFjayBpc24ndCB0aGVyZSAqLworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlX3VybCk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIm9iamVjdHMvcGFjay9wYWNrLSVzLnBhY2siLCBoZXgpOworCXVybCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgMCk7CisKKwlpZiAoaHR0cF9nZXRfc3RyYnVmKHVybCwgTlVMTCwgMCkpIHsKKwkJcmV0ID0gZXJyb3IoIlVuYWJsZSB0byB2ZXJpZnkgcGFjayAlcyBpcyBhdmFpbGFibGUiLAorCQkJICAgIGhleCk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoaGFzX3BhY2tfaW5kZXgoc2hhMSkpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWlmIChodHRwX2lzX3ZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBpbmRleCBmb3IgcGFjayAlc1xuIiwgaGV4KTsKKworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlX3VybCk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIm9iamVjdHMvcGFjay9wYWNrLSVzLmlkeCIsIGhleCk7CisJdXJsID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCWZpbGVuYW1lID0gc2hhMV9wYWNrX2luZGV4X25hbWUoc2hhMSk7CisJaWYgKGh0dHBfZ2V0X2ZpbGUodXJsLCBmaWxlbmFtZSwgMCkgIT0gSFRUUF9PSykKKwkJcmV0ID0gZXJyb3IoIlVuYWJsZSB0byBnZXQgcGFjayBpbmRleCAlc1xuIiwgdXJsKTsKKworY2xlYW51cDoKKwlmcmVlKGhleCk7CisJZnJlZSh1cmwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfYW5kX3NldHVwX3BhY2tfaW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKipwYWNrc19oZWFkLAorCXVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmJhc2VfdXJsKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXdfcGFjazsKKworCWlmIChmZXRjaF9wYWNrX2luZGV4KHNoYTEsIGJhc2VfdXJsKSkKKwkJcmV0dXJuIC0xOworCisJbmV3X3BhY2sgPSBwYXJzZV9wYWNrX2luZGV4KHNoYTEpOworCWlmICghbmV3X3BhY2spCisJCXJldHVybiAtMTsgLyogcGFyc2VfcGFja19pbmRleCgpIGFscmVhZHkgaXNzdWVkIGVycm9yIG1lc3NhZ2UgKi8KKwluZXdfcGFjay0+bmV4dCA9ICpwYWNrc19oZWFkOworCSpwYWNrc19oZWFkID0gbmV3X3BhY2s7CisJcmV0dXJuIDA7Cit9CisKK2ludCBodHRwX2dldF9pbmZvX3BhY2tzKGNvbnN0IGNoYXIgKmJhc2VfdXJsLCBzdHJ1Y3QgcGFja2VkX2dpdCAqKnBhY2tzX2hlYWQpCit7CisJaW50IHJldCA9IDAsIGkgPSAwOworCWNoYXIgKnVybCwgKmRhdGE7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJZW5kX3VybF93aXRoX3NsYXNoKCZidWYsIGJhc2VfdXJsKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsICJvYmplY3RzL2luZm8vcGFja3MiKTsKKwl1cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJcmV0ID0gaHR0cF9nZXRfc3RyYnVmKHVybCwgJmJ1ZiwgSFRUUF9OT19DQUNIRSk7CisJaWYgKHJldCAhPSBIVFRQX09LKQorCQlnb3RvIGNsZWFudXA7CisKKwlkYXRhID0gYnVmLmJ1ZjsKKwl3aGlsZSAoaSA8IGJ1Zi5sZW4pIHsKKwkJc3dpdGNoIChkYXRhW2ldKSB7CisJCWNhc2UgJ1AnOgorCQkJaSsrOworCQkJaWYgKGkgKyA1MiA8PSBidWYubGVuICYmCisJCQkgICAgIXByZWZpeGNtcChkYXRhICsgaSwgIiBwYWNrLSIpICYmCisJCQkgICAgIXByZWZpeGNtcChkYXRhICsgaSArIDQ2LCAiLnBhY2tcbiIpKSB7CisJCQkJZ2V0X3NoYTFfaGV4KGRhdGEgKyBpICsgNiwgc2hhMSk7CisJCQkJZmV0Y2hfYW5kX3NldHVwX3BhY2tfaW5kZXgocGFja3NfaGVhZCwgc2hhMSwKKwkJCQkJCSAgICAgIGJhc2VfdXJsKTsKKwkJCQlpICs9IDUxOworCQkJCWJyZWFrOworCQkJfQorCQlkZWZhdWx0OgorCQkJd2hpbGUgKGkgPCBidWYubGVuICYmIGRhdGFbaV0gIT0gJ1xuJykKKwkJCQlpKys7CisJCX0KKwkJaSsrOworCX0KKworY2xlYW51cDoKKwlmcmVlKHVybCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcSkKK3sKKwlpZiAocHJlcS0+cGFja2ZpbGUgIT0gTlVMTCkgeworCQlmY2xvc2UocHJlcS0+cGFja2ZpbGUpOworCQlwcmVxLT5wYWNrZmlsZSA9IE5VTEw7CisJCXByZXEtPnNsb3QtPmxvY2FsID0gTlVMTDsKKwl9CisJaWYgKHByZXEtPnJhbmdlX2hlYWRlciAhPSBOVUxMKSB7CisJCWN1cmxfc2xpc3RfZnJlZV9hbGwocHJlcS0+cmFuZ2VfaGVhZGVyKTsKKwkJcHJlcS0+cmFuZ2VfaGVhZGVyID0gTlVMTDsKKwl9CisJcHJlcS0+c2xvdCA9IE5VTEw7CisJZnJlZShwcmVxLT51cmwpOworfQorCitpbnQgZmluaXNoX2h0dHBfcGFja19yZXF1ZXN0KHN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBwYWNrZWRfZ2l0ICoqbHN0OworCisJcHJlcS0+dGFyZ2V0LT5wYWNrX3NpemUgPSBmdGVsbChwcmVxLT5wYWNrZmlsZSk7CisKKwlpZiAocHJlcS0+cGFja2ZpbGUgIT0gTlVMTCkgeworCQlmY2xvc2UocHJlcS0+cGFja2ZpbGUpOworCQlwcmVxLT5wYWNrZmlsZSA9IE5VTEw7CisJCXByZXEtPnNsb3QtPmxvY2FsID0gTlVMTDsKKwl9CisKKwlyZXQgPSBtb3ZlX3RlbXBfdG9fZmlsZShwcmVxLT50bXBmaWxlLCBwcmVxLT5maWxlbmFtZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWxzdCA9IHByZXEtPmxzdDsKKwl3aGlsZSAoKmxzdCAhPSBwcmVxLT50YXJnZXQpCisJCWxzdCA9ICYoKCpsc3QpLT5uZXh0KTsKKwkqbHN0ID0gKCpsc3QpLT5uZXh0OworCisJaWYgKHZlcmlmeV9wYWNrKHByZXEtPnRhcmdldCkpCisJCXJldHVybiAtMTsKKwlpbnN0YWxsX3BhY2tlZF9naXQocHJlcS0+dGFyZ2V0KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKm5ld19odHRwX3BhY2tfcmVxdWVzdCgKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0LCBjb25zdCBjaGFyICpiYXNlX3VybCkKK3sKKwljaGFyICp1cmw7CisJY2hhciAqZmlsZW5hbWU7CisJbG9uZyBwcmV2X3Bvc24gPSAwOworCWNoYXIgcmFuZ2VbUkFOR0VfSEVBREVSX1NJWkVdOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxOworCisJcHJlcSA9IHhtYWxsb2Moc2l6ZW9mKCpwcmVxKSk7CisJcHJlcS0+dGFyZ2V0ID0gdGFyZ2V0OworCXByZXEtPnJhbmdlX2hlYWRlciA9IE5VTEw7CisKKwllbmRfdXJsX3dpdGhfc2xhc2goJmJ1ZiwgYmFzZV91cmwpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJvYmplY3RzL3BhY2svcGFjay0lcy5wYWNrIiwKKwkJc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSk7CisJdXJsID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwlwcmVxLT51cmwgPSB4c3RyZHVwKHVybCk7CisKKwlmaWxlbmFtZSA9IHNoYTFfcGFja19uYW1lKHRhcmdldC0+c2hhMSk7CisJc25wcmludGYocHJlcS0+ZmlsZW5hbWUsIHNpemVvZihwcmVxLT5maWxlbmFtZSksICIlcyIsIGZpbGVuYW1lKTsKKwlzbnByaW50ZihwcmVxLT50bXBmaWxlLCBzaXplb2YocHJlcS0+dG1wZmlsZSksICIlcy50ZW1wIiwgZmlsZW5hbWUpOworCXByZXEtPnBhY2tmaWxlID0gZm9wZW4ocHJlcS0+dG1wZmlsZSwgImEiKTsKKwlpZiAoIXByZXEtPnBhY2tmaWxlKSB7CisJCWVycm9yKCJVbmFibGUgdG8gb3BlbiBsb2NhbCBmaWxlICVzIGZvciBwYWNrIiwKKwkJICAgICAgcHJlcS0+dG1wZmlsZSk7CisJCWdvdG8gYWJvcnQ7CisJfQorCisJcHJlcS0+c2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXByZXEtPnNsb3QtPmxvY2FsID0gcHJlcS0+cGFja2ZpbGU7CisJY3VybF9lYXN5X3NldG9wdChwcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIHByZXEtPnBhY2tmaWxlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHByZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHByZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCWN1cmxfZWFzeV9zZXRvcHQocHJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLAorCQlub19wcmFnbWFfaGVhZGVyKTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgZGF0YSBwcmVzZW50IGZyb20gYSBwcmV2aW91cyB0cmFuc2ZlciBhdHRlbXB0LAorCSAqIHJlc3VtZSB3aGVyZSBpdCBsZWZ0IG9mZgorCSAqLworCXByZXZfcG9zbiA9IGZ0ZWxsKHByZXEtPnBhY2tmaWxlKTsKKwlpZiAocHJldl9wb3NuPjApIHsKKwkJaWYgKGh0dHBfaXNfdmVyYm9zZSkKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJSZXN1bWluZyBmZXRjaCBvZiBwYWNrICVzIGF0IGJ5dGUgJWxkXG4iLAorCQkJCXNoYTFfdG9faGV4KHRhcmdldC0+c2hhMSksIHByZXZfcG9zbik7CisJCXNwcmludGYocmFuZ2UsICJSYW5nZTogYnl0ZXM9JWxkLSIsIHByZXZfcG9zbik7CisJCXByZXEtPnJhbmdlX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKE5VTEwsIHJhbmdlKTsKKwkJY3VybF9lYXN5X3NldG9wdChwcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsCisJCQlwcmVxLT5yYW5nZV9oZWFkZXIpOworCX0KKworCXJldHVybiBwcmVxOworCithYm9ydDoKKwlmcmVlKGZpbGVuYW1lKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogSGVscGVycyBmb3IgZmV0Y2hpbmcgb2JqZWN0cyAobG9vc2UpICovCitzdGF0aWMgc2l6ZV90IGZ3cml0ZV9zaGExX2ZpbGUodm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLAorCQkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgY2hhciBleHBuWzQwOTZdOworCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOworCWludCBwb3NuID0gMDsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSA9CisJCShzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqKWRhdGE7CisJZG8geworCQlzc2l6ZV90IHJldHZhbCA9IHh3cml0ZShmcmVxLT5sb2NhbGZpbGUsCisJCQkJCShjaGFyICopIHB0ciArIHBvc24sIHNpemUgLSBwb3NuKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlyZXR1cm4gcG9zbjsKKwkJcG9zbiArPSByZXR2YWw7CisJfSB3aGlsZSAocG9zbiA8IHNpemUpOworCisJZnJlcS0+c3RyZWFtLmF2YWlsX2luID0gc2l6ZTsKKwlmcmVxLT5zdHJlYW0ubmV4dF9pbiA9IHB0cjsKKwlkbyB7CisJCWZyZXEtPnN0cmVhbS5uZXh0X291dCA9IGV4cG47CisJCWZyZXEtPnN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoZXhwbik7CisJCWZyZXEtPnpyZXQgPSBnaXRfaW5mbGF0ZSgmZnJlcS0+c3RyZWFtLCBaX1NZTkNfRkxVU0gpOworCQlnaXRfU0hBMV9VcGRhdGUoJmZyZXEtPmMsIGV4cG4sCisJCQkJc2l6ZW9mKGV4cG4pIC0gZnJlcS0+c3RyZWFtLmF2YWlsX291dCk7CisJfSB3aGlsZSAoZnJlcS0+c3RyZWFtLmF2YWlsX2luICYmIGZyZXEtPnpyZXQgPT0gWl9PSyk7CisJZGF0YV9yZWNlaXZlZCsrOworCXJldHVybiBzaXplOworfQorCitzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqbmV3X2h0dHBfb2JqZWN0X3JlcXVlc3QoY29uc3QgY2hhciAqYmFzZV91cmwsCisJdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwljaGFyICpoZXggPSBzaGExX3RvX2hleChzaGExKTsKKwljaGFyICpmaWxlbmFtZTsKKwljaGFyIHByZXZmaWxlW1BBVEhfTUFYXTsKKwljaGFyICp1cmw7CisJaW50IHByZXZsb2NhbDsKKwl1bnNpZ25lZCBjaGFyIHByZXZfYnVmW1BSRVZfQlVGX1NJWkVdOworCXNzaXplX3QgcHJldl9yZWFkID0gMDsKKwlsb25nIHByZXZfcG9zbiA9IDA7CisJY2hhciByYW5nZVtSQU5HRV9IRUFERVJfU0laRV07CisJc3RydWN0IGN1cmxfc2xpc3QgKnJhbmdlX2hlYWRlciA9IE5VTEw7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXE7CisKKwlmcmVxID0geG1hbGxvYyhzaXplb2YoKmZyZXEpKTsKKwloYXNoY3B5KGZyZXEtPnNoYTEsIHNoYTEpOworCWZyZXEtPmxvY2FsZmlsZSA9IC0xOworCisJZmlsZW5hbWUgPSBzaGExX2ZpbGVfbmFtZShzaGExKTsKKwlzbnByaW50ZihmcmVxLT5maWxlbmFtZSwgc2l6ZW9mKGZyZXEtPmZpbGVuYW1lKSwgIiVzIiwgZmlsZW5hbWUpOworCXNucHJpbnRmKGZyZXEtPnRtcGZpbGUsIHNpemVvZihmcmVxLT50bXBmaWxlKSwKKwkJICIlcy50ZW1wIiwgZmlsZW5hbWUpOworCisJc25wcmludGYocHJldmZpbGUsIHNpemVvZihwcmV2ZmlsZSksICIlcy5wcmV2IiwgZmlsZW5hbWUpOworCXVubGlua19vcl93YXJuKHByZXZmaWxlKTsKKwlyZW5hbWUoZnJlcS0+dG1wZmlsZSwgcHJldmZpbGUpOworCXVubGlua19vcl93YXJuKGZyZXEtPnRtcGZpbGUpOworCisJaWYgKGZyZXEtPmxvY2FsZmlsZSAhPSAtMSkKKwkJZXJyb3IoImZkIGxlYWthZ2UgaW4gc3RhcnQ6ICVkIiwgZnJlcS0+bG9jYWxmaWxlKTsKKwlmcmVxLT5sb2NhbGZpbGUgPSBvcGVuKGZyZXEtPnRtcGZpbGUsCisJCQkgICAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKKwkvKgorCSAqIFRoaXMgY291bGQgaGF2ZSBmYWlsZWQgZHVlIHRvIHRoZSAibGF6eSBkaXJlY3RvcnkgY3JlYXRpb24iOworCSAqIHRyeSB0byBta2RpciB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudC4KKwkgKi8KKwlpZiAoZnJlcS0+bG9jYWxmaWxlIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQpIHsKKwkJY2hhciAqZGlyID0gc3RycmNocihmcmVxLT50bXBmaWxlLCAnLycpOworCQlpZiAoZGlyKSB7CisJCQkqZGlyID0gMDsKKwkJCW1rZGlyKGZyZXEtPnRtcGZpbGUsIDA3NzcpOworCQkJKmRpciA9ICcvJzsKKwkJfQorCQlmcmVxLT5sb2NhbGZpbGUgPSBvcGVuKGZyZXEtPnRtcGZpbGUsCisJCQkJICAgICAgIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJfQorCisJaWYgKGZyZXEtPmxvY2FsZmlsZSA8IDApIHsKKwkJZXJyb3IoIkNvdWxkbid0IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAlcyBmb3IgJXM6ICVzIiwKKwkJICAgICAgZnJlcS0+dG1wZmlsZSwgZnJlcS0+ZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWdvdG8gYWJvcnQ7CisJfQorCisJbWVtc2V0KCZmcmVxLT5zdHJlYW0sIDAsIHNpemVvZihmcmVxLT5zdHJlYW0pKTsKKworCWdpdF9pbmZsYXRlX2luaXQoJmZyZXEtPnN0cmVhbSk7CisKKwlnaXRfU0hBMV9Jbml0KCZmcmVxLT5jKTsKKworCXVybCA9IGdldF9yZW1vdGVfb2JqZWN0X3VybChiYXNlX3VybCwgaGV4LCAwKTsKKwlmcmVxLT51cmwgPSB4c3RyZHVwKHVybCk7CisKKwkvKgorCSAqIElmIGEgcHJldmlvdXMgdGVtcCBmaWxlIGlzIHByZXNlbnQsIHByb2Nlc3Mgd2hhdCB3YXMgYWxyZWFkeQorCSAqIGZldGNoZWQuCisJICovCisJcHJldmxvY2FsID0gb3BlbihwcmV2ZmlsZSwgT19SRE9OTFkpOworCWlmIChwcmV2bG9jYWwgIT0gLTEpIHsKKwkJZG8geworCQkJcHJldl9yZWFkID0geHJlYWQocHJldmxvY2FsLCBwcmV2X2J1ZiwgUFJFVl9CVUZfU0laRSk7CisJCQlpZiAocHJldl9yZWFkPjApIHsKKwkJCQlpZiAoZndyaXRlX3NoYTFfZmlsZShwcmV2X2J1ZiwKKwkJCQkJCSAgICAgMSwKKwkJCQkJCSAgICAgcHJldl9yZWFkLAorCQkJCQkJICAgICBmcmVxKSA9PSBwcmV2X3JlYWQpIHsKKwkJCQkJcHJldl9wb3NuICs9IHByZXZfcmVhZDsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmV2X3JlYWQgPSAtMTsKKwkJCQl9CisJCQl9CisJCX0gd2hpbGUgKHByZXZfcmVhZCA+IDApOworCQljbG9zZShwcmV2bG9jYWwpOworCX0KKwl1bmxpbmtfb3Jfd2FybihwcmV2ZmlsZSk7CisKKwkvKgorCSAqIFJlc2V0IGluZmxhdGUvU0hBMSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgcmVhZGluZyB0aGUgcHJldmlvdXMgdGVtcAorCSAqIGZpbGU7IGFsc28gcmV3aW5kIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvY2FsIGZpbGUuCisJICovCisJaWYgKHByZXZfcmVhZCA9PSAtMSkgeworCQltZW1zZXQoJmZyZXEtPnN0cmVhbSwgMCwgc2l6ZW9mKGZyZXEtPnN0cmVhbSkpOworCQlnaXRfaW5mbGF0ZV9pbml0KCZmcmVxLT5zdHJlYW0pOworCQlnaXRfU0hBMV9Jbml0KCZmcmVxLT5jKTsKKwkJaWYgKHByZXZfcG9zbj4wKSB7CisJCQlwcmV2X3Bvc24gPSAwOworCQkJbHNlZWsoZnJlcS0+bG9jYWxmaWxlLCAwLCBTRUVLX1NFVCk7CisJCQlmdHJ1bmNhdGUoZnJlcS0+bG9jYWxmaWxlLCAwKTsKKwkJfQorCX0KKworCWZyZXEtPnNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKworCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCBmcmVxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX3NoYTFfZmlsZSk7CisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBmcmVxLT5lcnJvcnN0cik7CisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgbm9fcHJhZ21hX2hlYWRlcik7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBkYXRhIGZyb20gYSBwcmV2aW91cyBmZXRjaAorCSAqIGF0dGVtcHQsIG9ubHkgZmV0Y2ggdGhlIGRhdGEgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlLgorCSAqLworCWlmIChwcmV2X3Bvc24+MCkgeworCQlpZiAoaHR0cF9pc192ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlJlc3VtaW5nIGZldGNoIG9mIG9iamVjdCAlcyBhdCBieXRlICVsZFxuIiwKKwkJCQloZXgsIHByZXZfcG9zbik7CisJCXNwcmludGYocmFuZ2UsICJSYW5nZTogYnl0ZXM9JWxkLSIsIHByZXZfcG9zbik7CisJCXJhbmdlX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHJhbmdlX2hlYWRlciwgcmFuZ2UpOworCQljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsCisJCQkJIENVUkxPUFRfSFRUUEhFQURFUiwgcmFuZ2VfaGVhZGVyKTsKKwl9CisKKwlyZXR1cm4gZnJlcTsKKworCWZyZWUodXJsKTsKK2Fib3J0OgorCWZyZWUoZmlsZW5hbWUpOworCWZyZWUoZnJlcSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgcHJvY2Vzc19odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKQoreworCWlmIChmcmVxLT5zbG90ID09IE5VTEwpCisJCXJldHVybjsKKwlmcmVxLT5jdXJsX3Jlc3VsdCA9IGZyZXEtPnNsb3QtPmN1cmxfcmVzdWx0OworCWZyZXEtPmh0dHBfY29kZSA9IGZyZXEtPnNsb3QtPmh0dHBfY29kZTsKKwlmcmVxLT5zbG90ID0gTlVMTDsKK30KKworaW50IGZpbmlzaF9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJY2xvc2UoZnJlcS0+bG9jYWxmaWxlKTsKKwlmcmVxLT5sb2NhbGZpbGUgPSAtMTsKKworCXByb2Nlc3NfaHR0cF9vYmplY3RfcmVxdWVzdChmcmVxKTsKKworCWlmIChmcmVxLT5odHRwX2NvZGUgPT0gNDE2KSB7CisJCWZwcmludGYoc3RkZXJyLCAiV2FybmluZzogcmVxdWVzdGVkIHJhbmdlIGludmFsaWQ7IHdlIG1heSBhbHJlYWR5IGhhdmUgYWxsIHRoZSBkYXRhLlxuIik7CisJfSBlbHNlIGlmIChmcmVxLT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgeworCQlpZiAoc3RhdChmcmVxLT50bXBmaWxlLCAmc3QpID09IDApCisJCQlpZiAoc3Quc3Rfc2l6ZSA9PSAwKQorCQkJCXVubGlua19vcl93YXJuKGZyZXEtPnRtcGZpbGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJZ2l0X2luZmxhdGVfZW5kKCZmcmVxLT5zdHJlYW0pOworCWdpdF9TSEExX0ZpbmFsKGZyZXEtPnJlYWxfc2hhMSwgJmZyZXEtPmMpOworCWlmIChmcmVxLT56cmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQl1bmxpbmtfb3Jfd2FybihmcmVxLT50bXBmaWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoaGFzaGNtcChmcmVxLT5zaGExLCBmcmVxLT5yZWFsX3NoYTEpKSB7CisJCXVubGlua19vcl93YXJuKGZyZXEtPnRtcGZpbGUpOworCQlyZXR1cm4gLTE7CisJfQorCWZyZXEtPnJlbmFtZSA9CisJCW1vdmVfdGVtcF90b19maWxlKGZyZXEtPnRtcGZpbGUsIGZyZXEtPmZpbGVuYW1lKTsKKworCXJldHVybiBmcmVxLT5yZW5hbWU7Cit9CisKK3ZvaWQgYWJvcnRfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSkKK3sKKwl1bmxpbmtfb3Jfd2FybihmcmVxLT50bXBmaWxlKTsKKworCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChmcmVxKTsKK30KKwordm9pZCByZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpCit7CisJaWYgKGZyZXEtPmxvY2FsZmlsZSAhPSAtMSkgeworCQljbG9zZShmcmVxLT5sb2NhbGZpbGUpOworCQlmcmVxLT5sb2NhbGZpbGUgPSAtMTsKKwl9CisJaWYgKGZyZXEtPnVybCAhPSBOVUxMKSB7CisJCWZyZWUoZnJlcS0+dXJsKTsKKwkJZnJlcS0+dXJsID0gTlVMTDsKKwl9CisJZnJlcS0+c2xvdCA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9odHRwLmggYi9odHRwLmgKaW5kZXggOTA1YjQ2Mi4uNGM0ZTk5YyAxMDA2NDQKLS0tIGEvaHR0cC5oCisrKyBiL2h0dHAuaApAQCAtMzcsNiArMzcsMTAgQEAKICNkZWZpbmUgQ1VSTEVfSFRUUF9SRVRVUk5FRF9FUlJPUiBDVVJMRV9IVFRQX05PVF9GT1VORAogI2VuZGlmCiAKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNIDwgMHgwNzBjMDMKKyNkZWZpbmUgTk9fQ1VSTF9JT0NUTAorI2VuZGlmCisKIHN0cnVjdCBzbG90X3Jlc3VsdHMKIHsKIAlDVVJMY29kZSBjdXJsX3Jlc3VsdDsKQEAgLTY3LDYgKzcxLDkgQEAKIGV4dGVybiBzaXplX3QgZnJlYWRfYnVmZmVyKHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyYnVmKTsKIGV4dGVybiBzaXplX3QgZndyaXRlX2J1ZmZlcihjb25zdCB2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnN0cmJ1Zik7CiBleHRlcm4gc2l6ZV90IGZ3cml0ZV9udWxsKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyYnVmKTsKKyNpZm5kZWYgTk9fQ1VSTF9JT0NUTAorZXh0ZXJuIGN1cmxpb2VyciBpb2N0bF9idWZmZXIoQ1VSTCAqaGFuZGxlLCBpbnQgY21kLCB2b2lkICpjbGllbnRwKTsKKyNlbmRpZgogCiAvKiBTbG90IGxpZmVjeWNsZSBmdW5jdGlvbnMgKi8KIGV4dGVybiBzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqZ2V0X2FjdGl2ZV9zbG90KHZvaWQpOwpAQCAtODYsNiArOTMsNyBAQAogCiBleHRlcm4gaW50IGRhdGFfcmVjZWl2ZWQ7CiBleHRlcm4gaW50IGFjdGl2ZV9yZXF1ZXN0czsKK2V4dGVybiBpbnQgaHR0cF9pc192ZXJib3NlOwogCiBleHRlcm4gY2hhciBjdXJsX2Vycm9yc3RyW0NVUkxfRVJST1JfU0laRV07CiAKQEAgLTEwMiw2ICsxMTAsOTAgQEAKIAogI2RlZmluZSBtaXNzaW5nX3RhcmdldChhKSBtaXNzaW5nX190YXJnZXQoKGEpLT5odHRwX2NvZGUsIChhKS0+Y3VybF9yZXN1bHQpCiAKKy8qIEhlbHBlcnMgZm9yIG1vZGlmeWluZyBhbmQgY3JlYXRpbmcgVVJMcyAqLworZXh0ZXJuIHZvaWQgYXBwZW5kX3JlbW90ZV9vYmplY3RfdXJsKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqdXJsLAorCQkJCSAgICAgY29uc3QgY2hhciAqaGV4LAorCQkJCSAgICAgaW50IG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCk7CitleHRlcm4gY2hhciAqZ2V0X3JlbW90ZV9vYmplY3RfdXJsKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqaGV4LAorCQkJCSAgIGludCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpOworCisvKiBPcHRpb25zIGZvciBodHRwX3JlcXVlc3RfKigpICovCisjZGVmaW5lIEhUVFBfTk9fQ0FDSEUJCTEKKworLyogUmV0dXJuIHZhbHVlcyBmb3IgaHR0cF9yZXF1ZXN0XyooKSAqLworI2RlZmluZSBIVFRQX09LCQkJMAorI2RlZmluZSBIVFRQX01JU1NJTkdfVEFSR0VUCTEKKyNkZWZpbmUgSFRUUF9FUlJPUgkJMgorI2RlZmluZSBIVFRQX1NUQVJUX0ZBSUxFRAkzCisKKy8qCisgKiBSZXF1ZXN0cyBhbiB1cmwgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIGEgc3RyYnVmLgorICoKKyAqIElmIHRoZSByZXN1bHQgcG9pbnRlciBpcyBOVUxMLCBhIEhUVFAgSEVBRCByZXF1ZXN0IGlzIG1hZGUgaW5zdGVhZCBvZiBHRVQuCisgKi8KK2ludCBodHRwX2dldF9zdHJidWYoY29uc3QgY2hhciAqdXJsLCBzdHJ1Y3Qgc3RyYnVmICpyZXN1bHQsIGludCBvcHRpb25zKTsKKworLyoKKyAqIERvd25sb2FkcyBhbiB1cmwgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBnaXZlbiBmaWxlLgorICoKKyAqIElmIGEgcHJldmlvdXMgaW50ZXJydXB0ZWQgZG93bmxvYWQgaXMgZGV0ZWN0ZWQgKGkuZS4gYSBwcmV2aW91cyB0ZW1wb3JhcnkKKyAqIGZpbGUgaXMgc3RpbGwgYXJvdW5kKSB0aGUgZG93bmxvYWQgaXMgcmVzdW1lZC4KKyAqLworaW50IGh0dHBfZ2V0X2ZpbGUoY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG9wdGlvbnMpOworCisvKgorICogUHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UgdXNpbmcgZXJyb3IoKSBjb250YWluaW5nIHVybCBhbmQgY3VybF9lcnJvcnN0ciwKKyAqIGFuZCByZXR1cm5zIHJldC4KKyAqLworaW50IGh0dHBfZXJyb3IoY29uc3QgY2hhciAqdXJsLCBpbnQgcmV0KTsKKwogZXh0ZXJuIGludCBodHRwX2ZldGNoX3JlZihjb25zdCBjaGFyICpiYXNlLCBzdHJ1Y3QgcmVmICpyZWYpOwogCisvKiBIZWxwZXJzIGZvciBmZXRjaGluZyBwYWNrcyAqLworZXh0ZXJuIGludCBodHRwX2dldF9pbmZvX3BhY2tzKGNvbnN0IGNoYXIgKmJhc2VfdXJsLAorCXN0cnVjdCBwYWNrZWRfZ2l0ICoqcGFja3NfaGVhZCk7CisKK3N0cnVjdCBodHRwX3BhY2tfcmVxdWVzdAoreworCWNoYXIgKnVybDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0OworCXN0cnVjdCBwYWNrZWRfZ2l0ICoqbHN0OworCUZJTEUgKnBhY2tmaWxlOworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07CisJc3RydWN0IGN1cmxfc2xpc3QgKnJhbmdlX2hlYWRlcjsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKK307CisKK2V4dGVybiBzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKm5ld19odHRwX3BhY2tfcmVxdWVzdCgKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0LCBjb25zdCBjaGFyICpiYXNlX3VybCk7CitleHRlcm4gaW50IGZpbmlzaF9odHRwX3BhY2tfcmVxdWVzdChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXEpOworZXh0ZXJuIHZvaWQgcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXEpOworCisvKiBIZWxwZXJzIGZvciBmZXRjaGluZyBvYmplY3QgKi8KK3N0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0Cit7CisJY2hhciAqdXJsOworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07CisJaW50IGxvY2FsZmlsZTsKKwlDVVJMY29kZSBjdXJsX3Jlc3VsdDsKKwljaGFyIGVycm9yc3RyW0NVUkxfRVJST1JfU0laRV07CisJbG9uZyBodHRwX2NvZGU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1bnNpZ25lZCBjaGFyIHJlYWxfc2hhMVsyMF07CisJZ2l0X1NIQV9DVFggYzsKKwl6X3N0cmVhbSBzdHJlYW07CisJaW50IHpyZXQ7CisJaW50IHJlbmFtZTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKK307CisKK2V4dGVybiBzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqbmV3X2h0dHBfb2JqZWN0X3JlcXVlc3QoCisJY29uc3QgY2hhciAqYmFzZV91cmwsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIHZvaWQgcHJvY2Vzc19odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKTsKK2V4dGVybiBpbnQgZmluaXNoX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpOworZXh0ZXJuIHZvaWQgYWJvcnRfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSk7CitleHRlcm4gdm9pZCByZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpOworCiAjZW5kaWYgLyogSFRUUF9IICovCmRpZmYgLS1naXQgYS9pbWFwLXNlbmQuYyBiL2ltYXAtc2VuZC5jCmluZGV4IDM3MDNkYmQuLjM4NDdmZDEgMTAwNjQ0Ci0tLSBhL2ltYXAtc2VuZC5jCisrKyBiL2ltYXAtc2VuZC5jCkBAIC0yMyw2ICsyMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKICNpZmRlZiBOT19PUEVOU1NMCiB0eXBlZGVmIHZvaWQgKlNTTDsKICNlbmRpZgpAQCAtMTE1LDkgKzExNiw5IEBACiAKIAlsZW4gPSB2c25wcmludGYodG1wLCBzaXplb2YodG1wKSwgZm10LCBhcCk7CiAJaWYgKGxlbiA8IDApCi0JCWRpZSgiRmF0YWw6IE91dCBvZiBtZW1vcnlcbiIpOworCQlkaWUoIkZhdGFsOiBPdXQgb2YgbWVtb3J5Iik7CiAJaWYgKGxlbiA+PSBzaXplb2YodG1wKSkKLQkJZGllKCJpbWFwIGNvbW1hbmQgb3ZlcmZsb3cgIVxuIik7CisJCWRpZSgiaW1hcCBjb21tYW5kIG92ZXJmbG93ISIpOwogCSpzdHJwID0geG1lbWR1cHoodG1wLCBsZW4pOwogCXJldHVybiBsZW47CiB9CkBAIC0xMzQsNiArMTM1LDcgQEAKIAljaGFyICpwYXNzOwogCWludCB1c2Vfc3NsOwogCWludCBzc2xfdmVyaWZ5OworCWludCB1c2VfaHRtbDsKIH07CiAKIHN0cnVjdCBpbWFwX3N0b3JlX2NvbmYgewpAQCAtMjM2LDcgKzIzOCw3IEBACiAjaWZuZGVmIE5PX09QRU5TU0wKIHN0YXRpYyB2b2lkIHNzbF9zb2NrZXRfcGVycm9yKGNvbnN0IGNoYXIgKmZ1bmMpCiB7Ci0JZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIGZ1bmMsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCAwKSk7CisJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIGZ1bmMsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7CiB9CiAjZW5kaWYKIApAQCAtNDgyLDcgKzQ4NCw3IEBACiAKIAl2YV9zdGFydCh2YSwgZm10KTsKIAlpZiAoYmxlbiA8PSAwIHx8ICh1bnNpZ25lZCkocmV0ID0gdnNucHJpbnRmKGJ1ZiwgYmxlbiwgZm10LCB2YSkpID49ICh1bnNpZ25lZClibGVuKQotCQlkaWUoIkZhdGFsOiBidWZmZXIgdG9vIHNtYWxsLiBQbGVhc2UgcmVwb3J0IGEgYnVnLlxuIik7CisJCWRpZSgiRmF0YWw6IGJ1ZmZlciB0b28gc21hbGwuIFBsZWFzZSByZXBvcnQgYSBidWcuIik7CiAJdmFfZW5kKHZhKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTc3LDcgKzU3OSw3IEBACiAJCQluID0gc29ja2V0X3dyaXRlKCZpbWFwLT5idWYuc29jaywgY21kLT5jYi5kYXRhLCBjbWQtPmNiLmRsZW4pOwogCQkJZnJlZShjbWQtPmNiLmRhdGEpOwogCQkJaWYgKG4gIT0gY21kLT5jYi5kbGVuIHx8Ci0JCQkgICAgKG4gPSBzb2NrZXRfd3JpdGUoJmltYXAtPmJ1Zi5zb2NrLCAiXHJcbiIsIDIpKSAhPSAyKSB7CisJCQkgICAgc29ja2V0X3dyaXRlKCZpbWFwLT5idWYuc29jaywgIlxyXG4iLCAyKSAhPSAyKSB7CiAJCQkJZnJlZShjbWQtPmNtZCk7CiAJCQkJZnJlZShjbWQpOwogCQkJCXJldHVybiBOVUxMOwpAQCAtOTgwLDkgKzk4Miw3IEBACiAJc3RydWN0IGltYXBfc3RvcmUgKmN0eDsKIAlzdHJ1Y3QgaW1hcCAqaW1hcDsKIAljaGFyICphcmcsICpyc3A7Ci0Jc3RydWN0IGhvc3RlbnQgKmhlOwotCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwotCWludCBzLCBhWzJdLCBwcmVhdXRoOworCWludCBzID0gLTEsIGFbMl0sIHByZWF1dGg7CiAJcGlkX3QgcGlkOwogCiAJY3R4ID0geGNhbGxvYyhzaXplb2YoKmN0eCksIDEpOwpAQCAtMTAxOSw2ICsxMDE5LDUxIEBACiAKIAkJaW1hcF9pbmZvKCJva1xuIik7CiAJfSBlbHNlIHsKKyNpZm5kZWYgTk9fSVBWNgorCQlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTAsICphaTsKKwkJaW50IGdhaTsKKwkJY2hhciBwb3J0c3RyWzZdOworCisJCXNucHJpbnRmKHBvcnRzdHIsIHNpemVvZihwb3J0c3RyKSwgIiVodSIsIHNydmMtPnBvcnQpOworCisJCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworCQloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworCQloaW50cy5haV9wcm90b2NvbCA9IElQUFJPVE9fVENQOworCisJCWltYXBfaW5mbygiUmVzb2x2aW5nICVzLi4uICIsIHNydmMtPmhvc3QpOworCQlnYWkgPSBnZXRhZGRyaW5mbyhzcnZjLT5ob3N0LCBwb3J0c3RyLCAmaGludHMsICZhaSk7CisJCWlmIChnYWkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiZ2V0YWRkcmluZm86ICVzXG4iLCBnYWlfc3RyZXJyb3IoZ2FpKSk7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaW1hcF9pbmZvKCJva1xuIik7CisKKwkJZm9yIChhaTAgPSBhaTsgYWk7IGFpID0gYWktPmFpX25leHQpIHsKKwkJCWNoYXIgYWRkcltOSV9NQVhIT1NUXTsKKworCQkJcyA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsCisJCQkJICAgYWktPmFpX3Byb3RvY29sKTsKKwkJCWlmIChzIDwgMCkKKwkJCQljb250aW51ZTsKKworCQkJZ2V0bmFtZWluZm8oYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuLCBhZGRyLAorCQkJCSAgICBzaXplb2YoYWRkciksIE5VTEwsIDAsIE5JX05VTUVSSUNIT1NUKTsKKwkJCWltYXBfaW5mbygiQ29ubmVjdGluZyB0byBbJXNdOiVzLi4uICIsIGFkZHIsIHBvcnRzdHIpOworCisJCQlpZiAoY29ubmVjdChzLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pIDwgMCkgeworCQkJCWNsb3NlKHMpOworCQkJCXMgPSAtMTsKKwkJCQlwZXJyb3IoImNvbm5lY3QiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKwkJZnJlZWFkZHJpbmZvKGFpMCk7CisjZWxzZSAvKiBOT19JUFY2ICovCisJCXN0cnVjdCBob3N0ZW50ICpoZTsKKwkJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisKIAkJbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOwogCQlhZGRyLnNpbl9wb3J0ID0gaHRvbnMoc3J2Yy0+cG9ydCk7CiAJCWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CkBAIC0xMDM4LDcgKzEwODMsMTIgQEAKIAkJaW1hcF9pbmZvKCJDb25uZWN0aW5nIHRvICVzOiVodS4uLiAiLCBpbmV0X250b2EoYWRkci5zaW5fYWRkciksIG50b2hzKGFkZHIuc2luX3BvcnQpKTsKIAkJaWYgKGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpKSB7CiAJCQljbG9zZShzKTsKKwkJCXMgPSAtMTsKIAkJCXBlcnJvcigiY29ubmVjdCIpOworCQl9CisjZW5kaWYKKwkJaWYgKHMgPCAwKSB7CisJCQlmcHV0cygiRXJyb3I6IHVuYWJsZSB0byBjb25uZWN0IHRvIHNlcnZlci5cbiIsIHN0ZGVycik7CiAJCQlnb3RvIGJhaWw7CiAJCX0KIApAQCAtMTI2Miw2ICsxMzEyLDUzIEBACiAJcmV0dXJuIERSVl9PSzsKIH0KIAorc3RhdGljIHZvaWQgZW5jb2RlX2h0bWxfY2hhcnMoc3RydWN0IHN0cmJ1ZiAqcCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcC0+bGVuOyBpKyspIHsKKwkJaWYgKHAtPmJ1ZltpXSA9PSAnJicpCisJCQlzdHJidWZfc3BsaWNlKHAsIGksIDEsICImYW1wOyIsIDUpOworCQlpZiAocC0+YnVmW2ldID09ICc8JykKKwkJCXN0cmJ1Zl9zcGxpY2UocCwgaSwgMSwgIiZsdDsiLCA0KTsKKwkJaWYgKHAtPmJ1ZltpXSA9PSAnPicpCisJCQlzdHJidWZfc3BsaWNlKHAsIGksIDEsICImZ3Q7IiwgNCk7CisJCWlmIChwLT5idWZbaV0gPT0gJyInKQorCQkJc3RyYnVmX3NwbGljZShwLCBpLCAxLCAiJnF1b3Q7IiwgNik7CisJfQorfQorc3RhdGljIHZvaWQgd3JhcF9pbl9odG1sKHN0cnVjdCBtc2dfZGF0YSAqbXNnKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiAqKmxpbmVzOworCXN0cnVjdCBzdHJidWYgKipwOworCXN0YXRpYyBjaGFyICpjb250ZW50X3R5cGUgPSAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7XG4iOworCXN0YXRpYyBjaGFyICpwcmVfb3BlbiA9ICI8cHJlPlxuIjsKKwlzdGF0aWMgY2hhciAqcHJlX2Nsb3NlID0gIjwvcHJlPlxuIjsKKwlpbnQgYWRkZWRfaGVhZGVyID0gMDsKKworCXN0cmJ1Zl9hdHRhY2goJmJ1ZiwgbXNnLT5kYXRhLCBtc2ctPmxlbiwgbXNnLT5sZW4pOworCWxpbmVzID0gc3RyYnVmX3NwbGl0KCZidWYsICdcbicpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWZvciAocCA9IGxpbmVzOyAqcDsgcCsrKSB7CisJCWlmICghIGFkZGVkX2hlYWRlcikgeworCQkJaWYgKCgqcCktPmxlbiA9PSAxICYmICooKCpwKS0+YnVmKSA9PSAnXG4nKSB7CisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBjb250ZW50X3R5cGUpOworCQkJCXN0cmJ1Zl9hZGRidWYoJmJ1ZiwgKnApOworCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcHJlX29wZW4pOworCQkJCWFkZGVkX2hlYWRlciA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJZWxzZQorCQkJZW5jb2RlX2h0bWxfY2hhcnMoKnApOworCQlzdHJidWZfYWRkYnVmKCZidWYsICpwKTsKKwl9CisJc3RyYnVmX2FkZHN0cigmYnVmLCBwcmVfY2xvc2UpOworCXN0cmJ1Zl9saXN0X2ZyZWUobGluZXMpOworCW1zZy0+bGVuICA9IGJ1Zi5sZW47CisJbXNnLT5kYXRhID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKwogI2RlZmluZSBDSFVOS1NJWkUgMHgxMDAwCiAKIHN0YXRpYyBpbnQgcmVhZF9tZXNzYWdlKEZJTEUgKmYsIHN0cnVjdCBtc2dfZGF0YSAqbXNnKQpAQCAtMTMzOCw2ICsxNDM1LDcgQEAKIAlOVUxMLAkvKiBwYXNzICovCiAJMCwgICAJLyogdXNlX3NzbCAqLwogCTEsICAgCS8qIHNzbF92ZXJpZnkgKi8KKwkwLCAgIAkvKiB1c2VfaHRtbCAqLwogfTsKIAogc3RhdGljIGNoYXIgKmltYXBfZm9sZGVyOwpAQCAtMTM3Niw2ICsxNDc0LDggQEAKIAkJc2VydmVyLnR1bm5lbCA9IHhzdHJkdXAodmFsKTsKIAllbHNlIGlmICghc3RyY21wKCJzc2x2ZXJpZnkiLCBrZXkpKQogCQlzZXJ2ZXIuc3NsX3ZlcmlmeSA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbCk7CisJZWxzZSBpZiAoIXN0cmNtcCgicHJlZm9ybWF0dGVkSFRNTCIsIGtleSkpCisJCXNlcnZlci51c2VfaHRtbCA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzODksNiArMTQ4OSw4IEBACiAJaW50IHRvdGFsLCBuID0gMDsKIAlpbnQgbm9uZ2l0X29rOwogCisJZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKKwogCS8qIGluaXQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCiAJYXJjNF9pbml0KCk7CiAKQEAgLTE0MzYsNiArMTUzOCw4IEBACiAJCWZwcmludGYoc3RkZXJyLCAiJTR1JSUgKCVkLyVkKSBkb25lXHIiLCBwZXJjZW50LCBuLCB0b3RhbCk7CiAJCWlmICghc3BsaXRfbXNnKCZhbGxfbXNncywgJm1zZywgJm9mcykpCiAJCQlicmVhazsKKwkJaWYgKHNlcnZlci51c2VfaHRtbCkKKwkJCXdyYXBfaW5faHRtbCgmbXNnKTsKIAkJciA9IGltYXBfc3RvcmVfbXNnKGN0eCwgJm1zZywgJnVpZCk7CiAJCWlmIChyICE9IERSVl9PSykKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvaW5kZXgtcGFjay5jIGIvaW5kZXgtcGFjay5jCmluZGV4IDc2OTdiMWQuLjM0MDA3NGYgMTAwNjQ0Ci0tLSBhL2luZGV4LXBhY2suYworKysgYi9pbmRleC1wYWNrLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSAidHJlZS5oIgogI2luY2x1ZGUgInByb2dyZXNzLmgiCiAjaW5jbHVkZSAiZnNjay5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIGluZGV4X3BhY2tfdXNhZ2VbXSA9CiAiZ2l0IGluZGV4LXBhY2sgWy12XSBbLW8gPGluZGV4LWZpbGU+XSBbeyAtLS1rZWVwIHwgLS1rZWVwPTxtc2c+IH1dIFstLXN0cmljdF0geyA8cGFjay1maWxlPiB8IC0tc3RkaW4gWy0tZml4LXRoaW5dIFs8cGFjay1maWxlPl0gfSI7CkBAIC0xNDIsNyArMTQzLDcgQEAKIAkJaWYgKHJldCA8PSAwKSB7CiAJCQlpZiAoIXJldCkKIAkJCQlkaWUoImVhcmx5IEVPRiIpOwotCQkJZGllKCJyZWFkIGVycm9yIG9uIGlucHV0OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oInJlYWQgZXJyb3Igb24gaW5wdXQiKTsKIAkJfQogCQlpbnB1dF9sZW4gKz0gcmV0OwogCQlpZiAoZnJvbV9zdGRpbikKQEAgLTE3NywxMyArMTc4LDEyIEBACiAJCX0gZWxzZQogCQkJb3V0cHV0X2ZkID0gb3BlbihwYWNrX25hbWUsIE9fQ1JFQVR8T19FWENMfE9fUkRXUiwgMDYwMCk7CiAJCWlmIChvdXRwdXRfZmQgPCAwKQotCQkJZGllKCJ1bmFibGUgdG8gY3JlYXRlICVzOiAlc1xuIiwgcGFja19uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlICclcyciLCBwYWNrX25hbWUpOwogCQlwYWNrX2ZkID0gb3V0cHV0X2ZkOwogCX0gZWxzZSB7CiAJCWlucHV0X2ZkID0gb3BlbihwYWNrX25hbWUsIE9fUkRPTkxZKTsKIAkJaWYgKGlucHV0X2ZkIDwgMCkKLQkJCWRpZSgiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJzogJXMiLAotCQkJICAgIHBhY2tfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIsIHBhY2tfbmFtZSk7CiAJCW91dHB1dF9mZCA9IC0xOwogCQlwYWNrX2ZkID0gaW5wdXRfZmQ7CiAJfQpAQCAtMjMxLDcgKzIzMSw3IEBACiAKIHN0YXRpYyB2b2lkIHBydW5lX2Jhc2VfZGF0YShzdHJ1Y3QgYmFzZV9kYXRhICpyZXRhaW4pCiB7Ci0Jc3RydWN0IGJhc2VfZGF0YSAqYiA9IGJhc2VfY2FjaGU7CisJc3RydWN0IGJhc2VfZGF0YSAqYjsKIAlmb3IgKGIgPSBiYXNlX2NhY2hlOwogCSAgICAgYmFzZV9jYWNoZV91c2VkID4gZGVsdGFfYmFzZV9jYWNoZV9saW1pdCAmJiBiOwogCSAgICAgYiA9IGItPmNoaWxkKSB7CkBAIC0yOTIsOCArMjkyLDggQEAKIAogc3RhdGljIHZvaWQgKnVucGFja19yYXdfZW50cnkoc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqLCB1bmlvbiBkZWx0YV9iYXNlICpkZWx0YV9iYXNlKQogewotCXVuc2lnbmVkIGNoYXIgKnAsIGM7Ci0JdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGNoYXIgKnA7CisJdW5zaWduZWQgbG9uZyBzaXplLCBjOwogCW9mZl90IGJhc2Vfb2Zmc2V0OwogCXVuc2lnbmVkIHNoaWZ0OwogCXZvaWQgKmRhdGE7CkBAIC0zMTEsNyArMzExLDcgQEAKIAkJcCA9IGZpbGwoMSk7CiAJCWMgPSAqcDsKIAkJdXNlKDEpOwotCQlzaXplICs9IChjICYgMHg3ZlVMKSA8PCBzaGlmdDsKKwkJc2l6ZSArPSAoYyAmIDB4N2YpIDw8IHNoaWZ0OwogCQlzaGlmdCArPSA3OwogCX0KIAlvYmotPnNpemUgPSBzaXplOwpAQCAtMzY5LDcgKzM2OSw3IEBACiAJZG8gewogCQlzc2l6ZV90IG4gPSBwcmVhZChwYWNrX2ZkLCBkYXRhICsgcmR5LCBsZW4gLSByZHksIGZyb20gKyByZHkpOwogCQlpZiAobiA8IDApCi0JCQlkaWUoImNhbm5vdCBwcmVhZCBwYWNrIGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIpOwogCQlpZiAoIW4pCiAJCQlkaWUoInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZXMgbWlzc2luZyIsCiAJCQkgICAgbGVuIC0gcmR5KTsKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCQkJCWRpZSgiaW52YWxpZCAlcyIsIHR5cGVuYW1lKHR5cGUpKTsKIAkJCWlmIChmc2NrX29iamVjdChvYmosIDEsIGZzY2tfZXJyb3JfZnVuY3Rpb24pKQogCQkJCWRpZSgiRXJyb3IgaW4gb2JqZWN0Iik7Ci0JCQlpZiAoZnNja193YWxrKG9iaiwgbWFya19saW5rLCAwKSkKKwkJCWlmIChmc2NrX3dhbGsob2JqLCBtYXJrX2xpbmssIE5VTEwpKQogCQkJCWRpZSgiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKIAogCQkJaWYgKG9iai0+dHlwZSA9PSBPQkpfVFJFRSkgewpAQCAtNjMwLDcgKzYzMCw3IEBACiAKIAkvKiBJZiBpbnB1dF9mZCBpcyBhIGZpbGUsIHdlIHNob3VsZCBoYXZlIHJlYWNoZWQgaXRzIGVuZCBub3cuICovCiAJaWYgKGZzdGF0KGlucHV0X2ZkLCAmc3QpKQotCQlkaWUoImNhbm5vdCBmc3RhdCBwYWNrZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIpOwogCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpICYmCiAJCQlsc2VlayhpbnB1dF9mZCwgMCwgU0VFS19DVVIpIC0gaW5wdXRfbGVuICE9IHN0LnN0X3NpemUpCiAJCWRpZSgicGFjayBoYXMganVuayBhdCB0aGUgZW5kIik7CkBAIC03ODcsNyArNzg3LDcgQEAKIAkJZnN5bmNfb3JfZGllKG91dHB1dF9mZCwgY3Vycl9wYWNrX25hbWUpOwogCQllcnIgPSBjbG9zZShvdXRwdXRfZmQpOwogCQlpZiAoZXJyKQotCQkJZGllKCJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIpOwogCX0KIAogCWlmIChrZWVwX21zZykgewpAQCAtODAwLDE2ICs4MDAsMTYgQEAKIAogCQlpZiAoa2VlcF9mZCA8IDApIHsKIAkJCWlmIChlcnJubyAhPSBFRVhJU1QpCi0JCQkJZGllKCJjYW5ub3Qgd3JpdGUga2VlcCBmaWxlICclcycgKCVzKSIsCi0JCQkJICAgIGtlZXBfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCB3cml0ZSBrZWVwIGZpbGUgJyVzJyIsCisJCQkJCSAga2VlcF9uYW1lKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChrZWVwX21zZ19sZW4gPiAwKSB7CiAJCQkJd3JpdGVfb3JfZGllKGtlZXBfZmQsIGtlZXBfbXNnLCBrZWVwX21zZ19sZW4pOwogCQkJCXdyaXRlX29yX2RpZShrZWVwX2ZkLCAiXG4iLCAxKTsKIAkJCX0KIAkJCWlmIChjbG9zZShrZWVwX2ZkKSAhPSAwKQotCQkJCWRpZSgiY2Fubm90IGNsb3NlIHdyaXR0ZW4ga2VlcCBmaWxlICclcycgKCVzKSIsCi0JCQkJICAgIGtlZXBfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oImNhbm5vdCBjbG9zZSB3cml0dGVuIGtlZXAgZmlsZSAnJXMnIiwKKwkJCQkgICAga2VlcF9uYW1lKTsKIAkJCXJlcG9ydCA9ICJrZWVwIjsKIAkJfQogCX0KQEAgLTgyMiw4ICs4MjIsNyBAQAogCQl9CiAJCWlmIChtb3ZlX3RlbXBfdG9fZmlsZShjdXJyX3BhY2tfbmFtZSwgZmluYWxfcGFja19uYW1lKSkKIAkJCWRpZSgiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIpOwotCX0KLQlpZiAoZnJvbV9zdGRpbikKKwl9IGVsc2UgaWYgKGZyb21fc3RkaW4pCiAJCWNobW9kKGZpbmFsX3BhY2tfbmFtZSwgMDQ0NCk7CiAKIAlpZiAoZmluYWxfaW5kZXhfbmFtZSAhPSBjdXJyX2luZGV4X25hbWUpIHsKQEAgLTgzNCw4ICs4MzMsOCBAQAogCQl9CiAJCWlmIChtb3ZlX3RlbXBfdG9fZmlsZShjdXJyX2luZGV4X25hbWUsIGZpbmFsX2luZGV4X25hbWUpKQogCQkJZGllKCJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIpOwotCX0KLQljaG1vZChmaW5hbF9pbmRleF9uYW1lLCAwNDQ0KTsKKwl9IGVsc2UKKwkJY2htb2QoZmluYWxfaW5kZXhfbmFtZSwgMDQ0NCk7CiAKIAlpZiAoIWZyb21fc3RkaW4pIHsKIAkJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOwpAQCAtODgxLDYgKzg4MCw4IEBACiAJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaWR4X29iamVjdHM7CiAJdW5zaWduZWQgY2hhciBwYWNrX3NoYTFbMjBdOwogCisJZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKKwogCS8qCiAJICogV2Ugd2lzaCB0byByZWFkIHRoZSByZXBvc2l0b3J5J3MgY29uZmlnIGZpbGUgaWYgYW55LCBhbmQKIAkgKiBmb3IgdGhhdCBpdCBpcyBuZWNlc3NhcnkgdG8gY2FsbCBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgpLgpkaWZmIC0tZ2l0IGEvbGV2ZW5zaHRlaW4uYyBiL2xldmVuc2h0ZWluLmMKaW5kZXggYTMyZjRjZC4uZmMyODE1OSAxMDA2NDQKLS0tIGEvbGV2ZW5zaHRlaW4uYworKysgYi9sZXZlbnNodGVpbi5jCkBAIC0yNyw3ICsyNyw3IEBACiAgKgogICogSXQgZG9lcyBzbyBieSBjYWxjdWxhdGluZyB0aGUgY29zdHMgb2YgdGhlIHBhdGggZW5kaW5nIGluIGNoYXJhY3RlcnMKICAqIGkgKGluIHN0cmluZzEpIGFuZCBqIChpbiBzdHJpbmcyKSwgcmVzcGVjdGl2ZWx5LCBnaXZlbiB0aGF0IHRoZSBsYXN0Ci0gKiBvcGVyYXRpb24gaXMgYSBzdWJzdGl0aW9uLCBhIHN3YXAsIGEgZGVsZXRpb24sIG9yIGFuIGluc2VydGlvbi4KKyAqIG9wZXJhdGlvbiBpcyBhIHN1YnN0aXR1dGlvbiwgYSBzd2FwLCBhIGRlbGV0aW9uLCBvciBhbiBpbnNlcnRpb24uCiAgKgogICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhbGxvd3MgdGhlIGNvc3RzIHRvIGJlIHdlaWdodGVkOgogICoKZGlmZiAtLWdpdCBhL2xpc3Qtb2JqZWN0cy5jIGIvbGlzdC1vYmplY3RzLmMKaW5kZXggZGQyNDNjNy4uODk1MzU0OCAxMDA2NDQKLS0tIGEvbGlzdC1vYmplY3RzLmMKKysrIGIvbGlzdC1vYmplY3RzLmMKQEAgLTEwLDcgKzEwLDcgQEAKIAogc3RhdGljIHZvaWQgcHJvY2Vzc19ibG9iKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKIAkJCSBzdHJ1Y3QgYmxvYiAqYmxvYiwKLQkJCSBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpwLAorCQkJIHNob3dfb2JqZWN0X2ZuIHNob3csCiAJCQkgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwKIAkJCSBjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMjMsNyArMjMsNyBAQAogCWlmIChvYmotPmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBTRUVOKSkKIAkJcmV0dXJuOwogCW9iai0+ZmxhZ3MgfD0gU0VFTjsKLQlhZGRfb2JqZWN0KG9iaiwgcCwgcGF0aCwgbmFtZSk7CisJc2hvdyhvYmosIHBhdGgsIG5hbWUpOwogfQogCiAvKgpAQCAtNTAsNyArNTAsNyBAQAogICovCiBzdGF0aWMgdm9pZCBwcm9jZXNzX2dpdGxpbmsoc3RydWN0IHJldl9pbmZvICpyZXZzLAogCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCi0JCQkgICAgc3RydWN0IG9iamVjdF9hcnJheSAqcCwKKwkJCSAgICBzaG93X29iamVjdF9mbiBzaG93LAogCQkJICAgIHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsCiAJCQkgICAgY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTU5LDcgKzU5LDcgQEAKIAogc3RhdGljIHZvaWQgcHJvY2Vzc190cmVlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKIAkJCSBzdHJ1Y3QgdHJlZSAqdHJlZSwKLQkJCSBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpwLAorCQkJIHNob3dfb2JqZWN0X2ZuIHNob3csCiAJCQkgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwKIAkJCSBjb25zdCBjaGFyICpuYW1lKQogewpAQCAtNzcsNyArNzcsNyBAQAogCWlmIChwYXJzZV90cmVlKHRyZWUpIDwgMCkKIAkJZGllKCJiYWQgdHJlZSBvYmplY3QgJXMiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKIAlvYmotPmZsYWdzIHw9IFNFRU47Ci0JYWRkX29iamVjdChvYmosIHAsIHBhdGgsIG5hbWUpOworCXNob3cob2JqLCBwYXRoLCBuYW1lKTsKIAltZS51cCA9IHBhdGg7CiAJbWUuZWxlbSA9IG5hbWU7CiAJbWUuZWxlbV9sZW4gPSBzdHJsZW4obmFtZSk7CkBAIC04OCwxNCArODgsMTQgQEAKIAkJaWYgKFNfSVNESVIoZW50cnkubW9kZSkpCiAJCQlwcm9jZXNzX3RyZWUocmV2cywKIAkJCQkgICAgIGxvb2t1cF90cmVlKGVudHJ5LnNoYTEpLAotCQkJCSAgICAgcCwgJm1lLCBlbnRyeS5wYXRoKTsKKwkJCQkgICAgIHNob3csICZtZSwgZW50cnkucGF0aCk7CiAJCWVsc2UgaWYgKFNfSVNHSVRMSU5LKGVudHJ5Lm1vZGUpKQogCQkJcHJvY2Vzc19naXRsaW5rKHJldnMsIGVudHJ5LnNoYTEsCi0JCQkJCXAsICZtZSwgZW50cnkucGF0aCk7CisJCQkJCXNob3csICZtZSwgZW50cnkucGF0aCk7CiAJCWVsc2UKIAkJCXByb2Nlc3NfYmxvYihyZXZzLAogCQkJCSAgICAgbG9va3VwX2Jsb2IoZW50cnkuc2hhMSksCi0JCQkJICAgICBwLCAmbWUsIGVudHJ5LnBhdGgpOworCQkJCSAgICAgc2hvdywgJm1lLCBlbnRyeS5wYXRoKTsKIAl9CiAJZnJlZSh0cmVlLT5idWZmZXIpOwogCXRyZWUtPmJ1ZmZlciA9IE5VTEw7CkBAIC0xMzQsMTcgKzEzNCwyMiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgYWRkX3BlbmRpbmdfdHJlZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCB0cmVlICp0cmVlKQoreworCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCAmdHJlZS0+b2JqZWN0LCAiIik7Cit9CisKIHZvaWQgdHJhdmVyc2VfY29tbWl0X2xpc3Qoc3RydWN0IHJldl9pbmZvICpyZXZzLAotCQkJICB2b2lkICgqc2hvd19jb21taXQpKHN0cnVjdCBjb21taXQgKiksCi0JCQkgIHZvaWQgKCpzaG93X29iamVjdCkoc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqKSkKKwkJCSAgc2hvd19jb21taXRfZm4gc2hvd19jb21taXQsCisJCQkgIHNob3dfb2JqZWN0X2ZuIHNob3dfb2JqZWN0LAorCQkJICB2b2lkICpkYXRhKQogewogCWludCBpOwogCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKLQlzdHJ1Y3Qgb2JqZWN0X2FycmF5IG9iamVjdHMgPSB7IDAsIDAsIE5VTEwgfTsKIAogCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKHJldnMpKSAhPSBOVUxMKSB7Ci0JCXByb2Nlc3NfdHJlZShyZXZzLCBjb21taXQtPnRyZWUsICZvYmplY3RzLCBOVUxMLCAiIik7Ci0JCXNob3dfY29tbWl0KGNvbW1pdCk7CisJCWFkZF9wZW5kaW5nX3RyZWUocmV2cywgY29tbWl0LT50cmVlKTsKKwkJc2hvd19jb21taXQoY29tbWl0LCBkYXRhKTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IHJldnMtPnBlbmRpbmcubnI7IGkrKykgewogCQlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpwZW5kaW5nID0gcmV2cy0+cGVuZGluZy5vYmplY3RzICsgaTsKQEAgLTE1NCwyNSArMTU5LDIyIEBACiAJCQljb250aW51ZTsKIAkJaWYgKG9iai0+dHlwZSA9PSBPQkpfVEFHKSB7CiAJCQlvYmotPmZsYWdzIHw9IFNFRU47Ci0JCQlhZGRfb2JqZWN0X2FycmF5KG9iaiwgbmFtZSwgJm9iamVjdHMpOworCQkJc2hvd19vYmplY3Qob2JqLCBOVUxMLCBuYW1lKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpIHsKLQkJCXByb2Nlc3NfdHJlZShyZXZzLCAoc3RydWN0IHRyZWUgKilvYmosICZvYmplY3RzLAorCQkJcHJvY2Vzc190cmVlKHJldnMsIChzdHJ1Y3QgdHJlZSAqKW9iaiwgc2hvd19vYmplY3QsCiAJCQkJICAgICBOVUxMLCBuYW1lKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpIHsKLQkJCXByb2Nlc3NfYmxvYihyZXZzLCAoc3RydWN0IGJsb2IgKilvYmosICZvYmplY3RzLAorCQkJcHJvY2Vzc19ibG9iKHJldnMsIChzdHJ1Y3QgYmxvYiAqKW9iaiwgc2hvd19vYmplY3QsCiAJCQkJICAgICBOVUxMLCBuYW1lKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWRpZSgidW5rbm93biBwZW5kaW5nIG9iamVjdCAlcyAoJXMpIiwKIAkJICAgIHNoYTFfdG9faGV4KG9iai0+c2hhMSksIG5hbWUpOwogCX0KLQlmb3IgKGkgPSAwOyBpIDwgb2JqZWN0cy5ucjsgaSsrKQotCQlzaG93X29iamVjdCgmb2JqZWN0cy5vYmplY3RzW2ldKTsKLQlmcmVlKG9iamVjdHMub2JqZWN0cyk7CiAJaWYgKHJldnMtPnBlbmRpbmcubnIpIHsKIAkJZnJlZShyZXZzLT5wZW5kaW5nLm9iamVjdHMpOwogCQlyZXZzLT5wZW5kaW5nLm5yID0gMDsKZGlmZiAtLWdpdCBhL2xpc3Qtb2JqZWN0cy5oIGIvbGlzdC1vYmplY3RzLmgKaW5kZXggMGY0MTM5MS4uZDY1ZGJmMCAxMDA2NDQKLS0tIGEvbGlzdC1vYmplY3RzLmgKKysrIGIvbGlzdC1vYmplY3RzLmgKQEAgLTEsMTEgKzEsMTEgQEAKICNpZm5kZWYgTElTVF9PQkpFQ1RTX0gKICNkZWZpbmUgTElTVF9PQkpFQ1RTX0gKIAotdHlwZWRlZiB2b2lkICgqc2hvd19jb21taXRfZm4pKHN0cnVjdCBjb21taXQgKik7Ci10eXBlZGVmIHZvaWQgKCpzaG93X29iamVjdF9mbikoc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqKTsKK3R5cGVkZWYgdm9pZCAoKnNob3dfY29tbWl0X2ZuKShzdHJ1Y3QgY29tbWl0ICosIHZvaWQgKik7Cit0eXBlZGVmIHZvaWQgKCpzaG93X29iamVjdF9mbikoc3RydWN0IG9iamVjdCAqLCBjb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICosIGNvbnN0IGNoYXIgKik7CiB0eXBlZGVmIHZvaWQgKCpzaG93X2VkZ2VfZm4pKHN0cnVjdCBjb21taXQgKik7CiAKLXZvaWQgdHJhdmVyc2VfY29tbWl0X2xpc3Qoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzaG93X2NvbW1pdF9mbiwgc2hvd19vYmplY3RfZm4pOwordm9pZCB0cmF2ZXJzZV9jb21taXRfbGlzdChzdHJ1Y3QgcmV2X2luZm8gKiwgc2hvd19jb21taXRfZm4sIHNob3dfb2JqZWN0X2ZuLCB2b2lkICopOwogCiB2b2lkIG1hcmtfZWRnZXNfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0X2xpc3QgKiwgc3RydWN0IHJldl9pbmZvICosIHNob3dfZWRnZV9mbik7CiAKZGlmZiAtLWdpdCBhL2xsLW1lcmdlLmMgYi9sbC1tZXJnZS5jCmluZGV4IDk3MjNmM2EuLjA1NzE1NjQgMTAwNjQ0Ci0tLSBhL2xsLW1lcmdlLmMKKysrIGIvbGwtbWVyZ2UuYwpAQCAtNTUsNyArNTUsNyBAQAogCiBzdGF0aWMgaW50IGxsX3hkbF9tZXJnZShjb25zdCBzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpkcnZfdW51c2VkLAogCQkJbW1idWZmZXJfdCAqcmVzdWx0LAotCQkJY29uc3QgY2hhciAqcGF0aF91bnVzZWQsCisJCQljb25zdCBjaGFyICpwYXRoLAogCQkJbW1maWxlX3QgKm9yaWcsCiAJCQltbWZpbGVfdCAqc3JjMSwgY29uc3QgY2hhciAqbmFtZTEsCiAJCQltbWZpbGVfdCAqc3JjMiwgY29uc3QgY2hhciAqbmFtZTIsCkBAIC02NywxMCArNjcsMTAgQEAKIAlpZiAoYnVmZmVyX2lzX2JpbmFyeShvcmlnLT5wdHIsIG9yaWctPnNpemUpIHx8CiAJICAgIGJ1ZmZlcl9pc19iaW5hcnkoc3JjMS0+cHRyLCBzcmMxLT5zaXplKSB8fAogCSAgICBidWZmZXJfaXNfYmluYXJ5KHNyYzItPnB0ciwgc3JjMi0+c2l6ZSkpIHsKLQkJd2FybmluZygiQ2Fubm90IG1lcmdlIGJpbmFyeSBmaWxlczogJXMgdnMuICVzXG4iLAotCQkJbmFtZTEsIG5hbWUyKTsKKwkJd2FybmluZygiQ2Fubm90IG1lcmdlIGJpbmFyeSBmaWxlczogJXMgKCVzIHZzLiAlcylcbiIsCisJCQlwYXRoLCBuYW1lMSwgbmFtZTIpOwogCQlyZXR1cm4gbGxfYmluYXJ5X21lcmdlKGRydl91bnVzZWQsIHJlc3VsdCwKLQkJCQkgICAgICAgcGF0aF91bnVzZWQsCisJCQkJICAgICAgIHBhdGgsCiAJCQkJICAgICAgIG9yaWcsIHNyYzEsIG5hbWUxLAogCQkJCSAgICAgICBzcmMyLCBuYW1lMiwKIAkJCQkgICAgICAgdmlydHVhbF9hbmNlc3Rvcik7CkBAIC0xNTIsNyArMTUyLDcgQEAKIAlzdHJjcHkocGF0aCwgIi5tZXJnZV9maWxlX1hYWFhYWCIpOwogCWZkID0geG1rc3RlbXAocGF0aCk7CiAJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIHNyYy0+cHRyLCBzcmMtPnNpemUpICE9IHNyYy0+c2l6ZSkKLQkJZGllKCJ1bmFibGUgdG8gd3JpdGUgdGVtcC1maWxlIik7CisJCWRpZV9lcnJubygidW5hYmxlIHRvIHdyaXRlIHRlbXAtZmlsZSIpOwogCWNsb3NlKGZkKTsKIH0KIApAQCAtMTc1LDggKzE3NSw3IEBACiAJCXsgIkIiLCB0ZW1wWzJdIH0sCiAJCXsgTlVMTCB9CiAJfTsKLQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZDsKLQljb25zdCBjaGFyICphcmdzWzIwXTsKKwljb25zdCBjaGFyICphcmdzW10gPSB7ICJzaCIsICItYyIsIE5VTEwsIE5VTEwgfTsKIAlpbnQgc3RhdHVzLCBmZCwgaTsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIApAQCAtMTkxLDE0ICsxOTAsOCBAQAogCiAJc3RyYnVmX2V4cGFuZCgmY21kLCBmbi0+Y21kbGluZSwgc3RyYnVmX2V4cGFuZF9kaWN0X2NiLCAmZGljdCk7CiAKLQltZW1zZXQoJmNoaWxkLCAwLCBzaXplb2YoY2hpbGQpKTsKLQljaGlsZC5hcmd2ID0gYXJnczsKLQlhcmdzWzBdID0gInNoIjsKLQlhcmdzWzFdID0gIi1jIjsKIAlhcmdzWzJdID0gY21kLmJ1ZjsKLQlhcmdzWzNdID0gTlVMTDsKLQotCXN0YXR1cyA9IHJ1bl9jb21tYW5kKCZjaGlsZCk7CisJc3RhdHVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJncywgMCk7CiAJaWYgKHN0YXR1cyA8IC1FUlJfUlVOX0NPTU1BTkRfRk9SSykKIAkJOyAvKiBmYWlsdXJlIGluIHJ1bi1jb21tYW5kICovCiAJZWxzZQpAQCAtMjE5LDcgKzIxMiw3IEBACiAJY2xvc2UoZmQpOwogIGJhZDoKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQl1bmxpbmsodGVtcFtpXSk7CisJCXVubGlua19vcl93YXJuKHRlbXBbaV0pOwogCXN0cmJ1Zl9yZWxlYXNlKCZjbWQpOwogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9sb2NrZmlsZS5jIGIvbG9ja2ZpbGUuYwppbmRleCA4ZTU1NmZmLi5lYjkzMWVkIDEwMDY0NAotLS0gYS9sb2NrZmlsZS5jCisrKyBiL2xvY2tmaWxlLmMKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIEp1bmlvIEMgSGFtYW5vCiAgKi8KICNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgbG9ja19maWxlICpsb2NrX2ZpbGVfbGlzdDsKIHN0YXRpYyBjb25zdCBjaGFyICphbHRlcm5hdGVfaW5kZXhfb3V0cHV0OwpAQCAtMTUsNyArMTYsNyBAQAogCQkgICAgbG9ja19maWxlX2xpc3QtPmZpbGVuYW1lWzBdKSB7CiAJCQlpZiAobG9ja19maWxlX2xpc3QtPmZkID49IDApCiAJCQkJY2xvc2UobG9ja19maWxlX2xpc3QtPmZkKTsKLQkJCXVubGluayhsb2NrX2ZpbGVfbGlzdC0+ZmlsZW5hbWUpOworCQkJdW5saW5rX29yX3dhcm4obG9ja19maWxlX2xpc3QtPmZpbGVuYW1lKTsKIAkJfQogCQlsb2NrX2ZpbGVfbGlzdCA9IGxvY2tfZmlsZV9saXN0LT5uZXh0OwogCX0KQEAgLTI0LDcgKzI1LDcgQEAKIHN0YXRpYyB2b2lkIHJlbW92ZV9sb2NrX2ZpbGVfb25fc2lnbmFsKGludCBzaWdubykKIHsKIAlyZW1vdmVfbG9ja19maWxlKCk7Ci0Jc2lnbmFsKHNpZ25vLCBTSUdfREZMKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOwogCXJhaXNlKHNpZ25vKTsKIH0KIApAQCAtMTA4LDcgKzEwOSw3IEBACiAJCQkgKiBsaW5rIGlzIGEgcmVsYXRpdmUgcGF0aCwgc28gSSBtdXN0IHJlcGxhY2UgdGhlCiAJCQkgKiBsYXN0IGVsZW1lbnQgb2YgcCB3aXRoIGl0LgogCQkJICovCi0JCQljaGFyICpyID0gKGNoYXIqKWxhc3RfcGF0aF9lbG0ocCk7CisJCQljaGFyICpyID0gKGNoYXIgKilsYXN0X3BhdGhfZWxtKHApOwogCQkJaWYgKHIgLSBwICsgbGlua19sZW4gPCBzKQogCQkJCXN0cmNweShyLCBsaW5rKTsKIAkJCWVsc2UgewpAQCAtMTM2LDExICsxMzcsNyBAQAogCWxrLT5mZCA9IG9wZW4obGstPmZpbGVuYW1lLCBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKIAlpZiAoMCA8PSBsay0+ZmQpIHsKIAkJaWYgKCFsb2NrX2ZpbGVfbGlzdCkgewotCQkJc2lnbmFsKFNJR0lOVCwgcmVtb3ZlX2xvY2tfZmlsZV9vbl9zaWduYWwpOwotCQkJc2lnbmFsKFNJR0hVUCwgcmVtb3ZlX2xvY2tfZmlsZV9vbl9zaWduYWwpOwotCQkJc2lnbmFsKFNJR1RFUk0sIHJlbW92ZV9sb2NrX2ZpbGVfb25fc2lnbmFsKTsKLQkJCXNpZ25hbChTSUdRVUlULCByZW1vdmVfbG9ja19maWxlX29uX3NpZ25hbCk7Ci0JCQlzaWduYWwoU0lHUElQRSwgcmVtb3ZlX2xvY2tfZmlsZV9vbl9zaWduYWwpOworCQkJc2lnY2hhaW5fcHVzaF9jb21tb24ocmVtb3ZlX2xvY2tfZmlsZV9vbl9zaWduYWwpOwogCQkJYXRleGl0KHJlbW92ZV9sb2NrX2ZpbGUpOwogCQl9CiAJCWxrLT5vd25lciA9IGdldHBpZCgpOwpAQCAtMTYxLDcgKzE1OCw3IEBACiAKIE5PUkVUVVJOIHZvaWQgdW5hYmxlX3RvX2xvY2tfaW5kZXhfZGllKGNvbnN0IGNoYXIgKnBhdGgsIGludCBlcnIpCiB7Ci0JaWYgKGVycm5vID09IEVFWElTVCkgeworCWlmIChlcnIgPT0gRUVYSVNUKSB7CiAJCWRpZSgiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuXG4iCiAJCSAgICAiSWYgbm8gb3RoZXIgZ2l0IHByb2Nlc3MgaXMgY3VycmVudGx5IHJ1bm5pbmcsIHRoaXMgcHJvYmFibHkgbWVhbnMgYVxuIgogCQkgICAgImdpdCBwcm9jZXNzIGNyYXNoZWQgaW4gdGhpcyByZXBvc2l0b3J5IGVhcmxpZXIuIE1ha2Ugc3VyZSBubyBvdGhlciBnaXRcbiIKQEAgLTE4Nyw3ICsxODQsNyBAQAogCWZkID0gbG9ja19maWxlKGxrLCBwYXRoLCBmbGFncyk7CiAJaWYgKGZkIDwgMCkgewogCQlpZiAoZmxhZ3MgJiBMT0NLX0RJRV9PTl9FUlJPUikKLQkJCWRpZSgidW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXVuYWJsZV90b19sb2NrX2luZGV4X2RpZShwYXRoLCBlcnJubyk7CiAJCXJldHVybiBmZDsKIAl9CiAKQEAgLTI2Miw3ICsyNTksNyBAQAogCWlmIChsay0+ZmlsZW5hbWVbMF0pIHsKIAkJaWYgKGxrLT5mZCA+PSAwKQogCQkJY2xvc2UobGstPmZkKTsKLQkJdW5saW5rKGxrLT5maWxlbmFtZSk7CisJCXVubGlua19vcl93YXJuKGxrLT5maWxlbmFtZSk7CiAJfQogCWxrLT5maWxlbmFtZVswXSA9IDA7CiB9CmRpZmYgLS1naXQgYS9sb2ctdHJlZS5jIGIvbG9nLXRyZWUuYwppbmRleCAxOTRkZGIxLi42ZjczYzE3IDEwMDY0NAotLS0gYS9sb2ctdHJlZS5jCisrKyBiL2xvZy10cmVlLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAibG9nLXRyZWUuaCIKICNpbmNsdWRlICJyZWZsb2ctd2Fsay5oIgogI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgogCiBzdHJ1Y3QgZGVjb3JhdGlvbiBuYW1lX2RlY29yYXRpb24gPSB7ICJvYmplY3QgbmFtZXMiIH07CiAKQEAgLTI0LDYgKzI1LDcgQEAKIAlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBwYXJzZV9vYmplY3Qoc2hhMSk7CiAJaWYgKCFvYmopCiAJCXJldHVybiAwOworCXJlZm5hbWUgPSBwcmV0dGlmeV9yZWZuYW1lKHJlZm5hbWUpOwogCWFkZF9uYW1lX2RlY29yYXRpb24oIiIsIHJlZm5hbWUsIG9iaik7CiAJd2hpbGUgKG9iai0+dHlwZSA9PSBPQkpfVEFHKSB7CiAJCW9iaiA9ICgoc3RydWN0IHRhZyAqKW9iaiktPnRhZ2dlZDsKQEAgLTQ4LDcgKzUwLDcgQEAKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CiAJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwIDsgcCA9IHAtPm5leHQpIHsKIAkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcC0+aXRlbTsKLQkJcHJpbnRmKCIgJXMiLCBkaWZmX3VuaXF1ZV9hYmJyZXYocGFyZW50LT5vYmplY3Quc2hhMSwgYWJicmV2KSk7CisJCXByaW50ZigiICVzIiwgZmluZF91bmlxdWVfYWJicmV2KHBhcmVudC0+b2JqZWN0LnNoYTEsIGFiYnJldikpOwogCX0KIH0KIApAQCAtNzksMTggKzgxLDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgZGV0ZWN0X2FueV9zaWdub2ZmKGNoYXIgKmxldHRlciwgaW50IHNpemUpCiB7Ci0JY2hhciBjaCwgKmNwOworCWNoYXIgKmNwOwogCWludCBzZWVuX2NvbG9uID0gMDsKIAlpbnQgc2Vlbl9hdCA9IDA7CiAJaW50IHNlZW5fbmFtZSA9IDA7CiAJaW50IHNlZW5faGVhZCA9IDA7CiAKIAljcCA9IGxldHRlciArIHNpemU7Ci0Jd2hpbGUgKGxldHRlciA8PSAtLWNwICYmIChjaCA9ICpjcCkgPT0gJ1xuJykKKwl3aGlsZSAobGV0dGVyIDw9IC0tY3AgJiYgKmNwID09ICdcbicpCiAJCWNvbnRpbnVlOwogCiAJd2hpbGUgKGxldHRlciA8PSBjcCkgewotCQljaCA9ICpjcC0tOworCQljaGFyIGNoID0gKmNwLS07CiAJCWlmIChjaCA9PSAnXG4nKQogCQkJYnJlYWs7CiAKQEAgLTE3OCwxMyArMTgwLDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgbG9nX3dyaXRlX2VtYWlsX2hlYWRlcnMoc3RydWN0IHJldl9pbmZvICpvcHQsIGNvbnN0IGNoYXIgKm5hbWUsCit2b2lkIGdldF9wYXRjaF9maWxlbmFtZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBuciwgY29uc3QgY2hhciAqc3VmZml4LAorCQkJc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWludCBzdWZmaXhfbGVuID0gc3RybGVuKHN1ZmZpeCkgKyAxOworCWludCBzdGFydF9sZW4gPSBidWYtPmxlbjsKKworCXN0cmJ1Zl9hZGRmKGJ1ZiwgY29tbWl0ID8gIiUwNGQtIiA6ICIlZCIsIG5yKTsKKwlpZiAoY29tbWl0KSB7CisJCWludCBtYXhfbGVuID0gc3RhcnRfbGVuICsgRk9STUFUX1BBVENIX05BTUVfTUFYIC0gc3VmZml4X2xlbjsKKworCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJWYiLCBidWYsIERBVEVfTk9STUFMKTsKKwkJaWYgKG1heF9sZW4gPCBidWYtPmxlbikKKwkJCXN0cmJ1Zl9zZXRsZW4oYnVmLCBtYXhfbGVuKTsKKwkJc3RyYnVmX2FkZHN0cihidWYsIHN1ZmZpeCk7CisJfQorfQorCit2b2lkIGxvZ193cml0ZV9lbWFpbF9oZWFkZXJzKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCiAJCQkgICAgIGNvbnN0IGNoYXIgKipzdWJqZWN0X3AsCiAJCQkgICAgIGNvbnN0IGNoYXIgKipleHRyYV9oZWFkZXJzX3AsCiAJCQkgICAgIGludCAqbmVlZF84Yml0X2N0ZV9wKQogewogCWNvbnN0IGNoYXIgKnN1YmplY3QgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmV4dHJhX2hlYWRlcnMgPSBvcHQtPmV4dHJhX2hlYWRlcnM7CisJY29uc3QgY2hhciAqbmFtZSA9IHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpOwogCiAJKm5lZWRfOGJpdF9jdGVfcCA9IDA7IC8qIHVua25vd24gKi8KIAlpZiAob3B0LT50b3RhbCA+IDApIHsKQEAgLTIxMSwxNCArMjMxLDE5IEBACiAJCXByaW50ZigiTWVzc2FnZS1JZDogPCVzPlxuIiwgb3B0LT5tZXNzYWdlX2lkKTsKIAkJZ3JhcGhfc2hvd19vbmVsaW5lKG9wdC0+Z3JhcGgpOwogCX0KLQlpZiAob3B0LT5yZWZfbWVzc2FnZV9pZCkgewotCQlwcmludGYoIkluLVJlcGx5LVRvOiA8JXM+XG5SZWZlcmVuY2VzOiA8JXM+XG4iLAotCQkgICAgICAgb3B0LT5yZWZfbWVzc2FnZV9pZCwgb3B0LT5yZWZfbWVzc2FnZV9pZCk7CisJaWYgKG9wdC0+cmVmX21lc3NhZ2VfaWRzICYmIG9wdC0+cmVmX21lc3NhZ2VfaWRzLT5uciA+IDApIHsKKwkJaW50IGksIG47CisJCW4gPSBvcHQtPnJlZl9tZXNzYWdlX2lkcy0+bnI7CisJCXByaW50ZigiSW4tUmVwbHktVG86IDwlcz5cbiIsIG9wdC0+cmVmX21lc3NhZ2VfaWRzLT5pdGVtc1tuLTFdLnN0cmluZyk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlwcmludGYoIiVzPCVzPlxuIiwgKGkgPiAwID8gIlx0IiA6ICJSZWZlcmVuY2VzOiAiKSwKKwkJCSAgICAgICBvcHQtPnJlZl9tZXNzYWdlX2lkcy0+aXRlbXNbaV0uc3RyaW5nKTsKIAkJZ3JhcGhfc2hvd19vbmVsaW5lKG9wdC0+Z3JhcGgpOwogCX0KIAlpZiAob3B0LT5taW1lX2JvdW5kYXJ5KSB7CiAJCXN0YXRpYyBjaGFyIHN1YmplY3RfYnVmZmVyWzEwMjRdOwogCQlzdGF0aWMgY2hhciBidWZmZXJbMTAyNF07CisJCXN0cnVjdCBzdHJidWYgZmlsZW5hbWUgPSAgU1RSQlVGX0lOSVQ7CiAJCSpuZWVkXzhiaXRfY3RlX3AgPSAtMTsgLyogTkVWRVIgKi8KIAkJc25wcmludGYoc3ViamVjdF9idWZmZXIsIHNpemVvZihzdWJqZWN0X2J1ZmZlcikgLSAxLAogCQkJICIlcyIKQEAgLTIzNywxOCArMjYyLDIxIEBACiAJCQkgbWltZV9ib3VuZGFyeV9sZWFkZXIsIG9wdC0+bWltZV9ib3VuZGFyeSk7CiAJCWV4dHJhX2hlYWRlcnMgPSBzdWJqZWN0X2J1ZmZlcjsKIAorCQlnZXRfcGF0Y2hfZmlsZW5hbWUob3B0LT5udW1iZXJlZF9maWxlcyA/IE5VTEwgOiBjb21taXQsIG9wdC0+bnIsCisJCQkJICAgIG9wdC0+cGF0Y2hfc3VmZml4LCAmZmlsZW5hbWUpOwogCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwKIAkJCSAiXG4tLSVzJXNcbiIKIAkJCSAiQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IgotCQkJICIgbmFtZT1cIiVzLmRpZmZcIlxuIgorCQkJICIgbmFtZT1cIiVzXCJcbiIKIAkJCSAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgogCQkJICJDb250ZW50LURpc3Bvc2l0aW9uOiAlczsiCi0JCQkgIiBmaWxlbmFtZT1cIiVzLmRpZmZcIlxuXG4iLAorCQkJICIgZmlsZW5hbWU9XCIlc1wiXG5cbiIsCiAJCQkgbWltZV9ib3VuZGFyeV9sZWFkZXIsIG9wdC0+bWltZV9ib3VuZGFyeSwKLQkJCSBuYW1lLAorCQkJIGZpbGVuYW1lLmJ1ZiwKIAkJCSBvcHQtPm5vX2lubGluZSA/ICJhdHRhY2htZW50IiA6ICJpbmxpbmUiLAotCQkJIG5hbWUpOworCQkJIGZpbGVuYW1lLmJ1Zik7CiAJCW9wdC0+ZGlmZm9wdC5zdGF0X3NlcCA9IGJ1ZmZlcjsKKwkJc3RyYnVmX3JlbGVhc2UoJmZpbGVuYW1lKTsKIAl9CiAJKnN1YmplY3RfcCA9IHN1YmplY3Q7CiAJKmV4dHJhX2hlYWRlcnNfcCA9IGV4dHJhX2hlYWRlcnM7CkBAIC0yODAsNyArMzA4LDcgQEAKIAkJCQkJcHV0Y2hhcignPicpOwogCQkJfQogCQl9Ci0JCWZwdXRzKGRpZmZfdW5pcXVlX2FiYnJldihjb21taXQtPm9iamVjdC5zaGExLCBhYmJyZXZfY29tbWl0KSwgc3Rkb3V0KTsKKwkJZnB1dHMoZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIGFiYnJldl9jb21taXQpLCBzdGRvdXQpOwogCQlpZiAob3B0LT5wcmludF9wYXJlbnRzKQogCQkJc2hvd19wYXJlbnRzKGNvbW1pdCwgYWJicmV2X2NvbW1pdCk7CiAJCXNob3dfZGVjb3JhdGlvbnMob3B0LCBjb21taXQpOwpAQCAtMjkzLDcgKzMyMSw4IEBACiAJfQogCiAJLyoKLQkgKiBJZiB1c2VfdGVybWluYXRvciBpcyBzZXQsIGFkZCBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZW50cnkuCisJICogSWYgdXNlX3Rlcm1pbmF0b3IgaXMgc2V0LCB3ZSBhbHJlYWR5IGhhbmRsZWQgYW55IHJlY29yZCB0ZXJtaW5hdGlvbgorCSAqIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgcmVjb3JkLgogCSAqIE90aGVyd2lzZSwgYWRkIGEgZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uIGNoYXJhY3RlciBiZWZvcmUgYWxsCiAJICogZW50cmllcyBidXQgdGhlIGZpcnN0LiAgKElPVywgYXMgYSBzZXBhcmF0b3IgYmV0d2VlbiBlbnRyaWVzKQogCSAqLwpAQCAtMzI4LDggKzM1Nyw3IEBACiAJICovCiAKIAlpZiAob3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX0VNQUlMKSB7Ci0JCWxvZ193cml0ZV9lbWFpbF9oZWFkZXJzKG9wdCwgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSksCi0JCQkJCSZzdWJqZWN0LCAmZXh0cmFfaGVhZGVycywKKwkJbG9nX3dyaXRlX2VtYWlsX2hlYWRlcnMob3B0LCBjb21taXQsICZzdWJqZWN0LCAmZXh0cmFfaGVhZGVycywKIAkJCQkJJm5lZWRfOGJpdF9jdGUpOwogCX0gZWxzZSBpZiAob3B0LT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX1VTRVJGT1JNQVQpIHsKIAkJZnB1dHMoZGlmZl9nZXRfY29sb3Jfb3B0KCZvcHQtPmRpZmZvcHQsIERJRkZfQ09NTUlUKSwgc3Rkb3V0KTsKQEAgLTM0OCwxMyArMzc2LDEzIEBACiAJCQkJCXB1dGNoYXIoJz4nKTsKIAkJCX0KIAkJfQotCQlmcHV0cyhkaWZmX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgYWJicmV2X2NvbW1pdCksCisJCWZwdXRzKGZpbmRfdW5pcXVlX2FiYnJldihjb21taXQtPm9iamVjdC5zaGExLCBhYmJyZXZfY29tbWl0KSwKIAkJICAgICAgc3Rkb3V0KTsKIAkJaWYgKG9wdC0+cHJpbnRfcGFyZW50cykKIAkJCXNob3dfcGFyZW50cyhjb21taXQsIGFiYnJldl9jb21taXQpOwogCQlpZiAocGFyZW50KQogCQkJcHJpbnRmKCIgKGZyb20gJXMpIiwKLQkJCSAgICAgICBkaWZmX3VuaXF1ZV9hYmJyZXYocGFyZW50LT5vYmplY3Quc2hhMSwKKwkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYocGFyZW50LT5vYmplY3Quc2hhMSwKIAkJCQkJCSAgYWJicmV2X2NvbW1pdCkpOwogCQlzaG93X2RlY29yYXRpb25zKG9wdCwgY29tbWl0KTsKIAkJcHJpbnRmKCIlcyIsIGRpZmZfZ2V0X2NvbG9yX29wdCgmb3B0LT5kaWZmb3B0LCBESUZGX1JFU0VUKSk7CmRpZmYgLS1naXQgYS9sb2ctdHJlZS5oIGIvbG9nLXRyZWUuaAppbmRleCBmMmE5MDA4Li4yMGI1Y2FmIDEwMDY0NAotLS0gYS9sb2ctdHJlZS5oCisrKyBiL2xvZy10cmVlLmgKQEAgLTEzLDEwICsxMywxNCBAQAogaW50IGxvZ190cmVlX29wdF9wYXJzZShzdHJ1Y3QgcmV2X2luZm8gKiwgY29uc3QgY2hhciAqKiwgaW50KTsKIHZvaWQgc2hvd19sb2coc3RydWN0IHJldl9pbmZvICpvcHQpOwogdm9pZCBzaG93X2RlY29yYXRpb25zKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwotdm9pZCBsb2dfd3JpdGVfZW1haWxfaGVhZGVycyhzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgY29uc3QgY2hhciAqbmFtZSwKK3ZvaWQgbG9nX3dyaXRlX2VtYWlsX2hlYWRlcnMoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKIAkJCSAgICAgY29uc3QgY2hhciAqKnN1YmplY3RfcCwKIAkJCSAgICAgY29uc3QgY2hhciAqKmV4dHJhX2hlYWRlcnNfcCwKIAkJCSAgICAgaW50ICpuZWVkXzhiaXRfY3RlX3ApOwogdm9pZCBsb2FkX3JlZl9kZWNvcmF0aW9ucyh2b2lkKTsKIAorI2RlZmluZSBGT1JNQVRfUEFUQ0hfTkFNRV9NQVggNjQKK3ZvaWQgZ2V0X3BhdGNoX2ZpbGVuYW1lKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IG5yLCBjb25zdCBjaGFyICpzdWZmaXgsCisJCQlzdHJ1Y3Qgc3RyYnVmICpidWYpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL21haWxtYXAuYyBiL21haWxtYXAuYwppbmRleCA4OGZjNmYzLi5mMTY3YzAwIDEwMDY0NAotLS0gYS9tYWlsbWFwLmMKKysrIGIvbWFpbG1hcC5jCkBAIC0yLDE3ICsyLDE0MSBAQAogI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCiAjaW5jbHVkZSAibWFpbG1hcC5oIgogCi1pbnQgcmVhZF9tYWlsbWFwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciAqKnJlcG9fYWJicmV2KQorI2RlZmluZSBERUJVR19NQUlMTUFQIDAKKyNpZiBERUJVR19NQUlMTUFQCisjZGVmaW5lIGRlYnVnX21tKC4uLikgZnByaW50ZihzdGRlcnIsIF9fVkFfQVJHU19fKQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19tbShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikge30KKyNlbmRpZgorCitjb25zdCBjaGFyICpnaXRfbWFpbG1hcF9maWxlOworCitzdHJ1Y3QgbWFpbG1hcF9pbmZvIHsKKwljaGFyICpuYW1lOworCWNoYXIgKmVtYWlsOworfTsKKworc3RydWN0IG1haWxtYXBfZW50cnkgeworCS8qIG5hbWUgYW5kIGVtYWlsIGZvciB0aGUgc2ltcGxlIG1haWwtb25seSBjYXNlICovCisJY2hhciAqbmFtZTsKKwljaGFyICplbWFpbDsKKworCS8qIG5hbWUgYW5kIGVtYWlsIGZvciB0aGUgY29tcGxleCBtYWlsIGFuZCBuYW1lIG1hdGNoaW5nIGNhc2UgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbmFtZW1hcDsKK307CisKK3N0YXRpYyB2b2lkIGZyZWVfbWFpbG1hcF9pbmZvKHZvaWQgKnAsIGNvbnN0IGNoYXIgKnMpCit7CisJc3RydWN0IG1haWxtYXBfaW5mbyAqbWkgPSAoc3RydWN0IG1haWxtYXBfaW5mbyAqKXA7CisJZGVidWdfbW0oIm1haWxtYXA6IC0tIGNvbXBsZXg6ICclcycgLT4gJyVzJyA8JXM+XG4iLCBzLCBtaS0+bmFtZSwgbWktPmVtYWlsKTsKKwlmcmVlKG1pLT5uYW1lKTsKKwlmcmVlKG1pLT5lbWFpbCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbWFpbG1hcF9lbnRyeSh2b2lkICpwLCBjb25zdCBjaGFyICpzKQoreworCXN0cnVjdCBtYWlsbWFwX2VudHJ5ICptZSA9IChzdHJ1Y3QgbWFpbG1hcF9lbnRyeSAqKXA7CisJZGVidWdfbW0oIm1haWxtYXA6IHJlbW92aW5nIGVudHJpZXMgZm9yIDwlcz4sIHdpdGggJWQgc3ViLWVudHJpZXNcbiIsIHMsIG1lLT5uYW1lbWFwLm5yKTsKKwlkZWJ1Z19tbSgibWFpbG1hcDogLSBzaW1wbGU6ICclcycgPCVzPlxuIiwgbWUtPm5hbWUsIG1lLT5lbWFpbCk7CisJZnJlZShtZS0+bmFtZSk7CisJZnJlZShtZS0+ZW1haWwpOworCisJbWUtPm5hbWVtYXAuc3RyZHVwX3N0cmluZ3MgPSAxOworCXN0cmluZ19saXN0X2NsZWFyX2Z1bmMoJm1lLT5uYW1lbWFwLCBmcmVlX21haWxtYXBfaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9tYXBwaW5nKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLAorCQkJY2hhciAqbmV3X25hbWUsIGNoYXIgKm5ld19lbWFpbCwgY2hhciAqb2xkX25hbWUsIGNoYXIgKm9sZF9lbWFpbCkKK3sKKwlzdHJ1Y3QgbWFpbG1hcF9lbnRyeSAqbWU7CisJaW50IGluZGV4OworCWNoYXIgKnA7CisKKwlpZiAob2xkX2VtYWlsKQorCQlmb3IgKHAgPSBvbGRfZW1haWw7ICpwOyBwKyspCisJCQkqcCA9IHRvbG93ZXIoKnApOworCWlmIChuZXdfZW1haWwpCisJCWZvciAocCA9IG5ld19lbWFpbDsgKnA7IHArKykKKwkJCSpwID0gdG9sb3dlcigqcCk7CisKKwlpZiAob2xkX2VtYWlsID09IE5VTEwpIHsKKwkJb2xkX2VtYWlsID0gbmV3X2VtYWlsOworCQluZXdfZW1haWwgPSBOVUxMOworCX0KKworCWlmICgoaW5kZXggPSBzdHJpbmdfbGlzdF9maW5kX2luc2VydF9pbmRleChtYXAsIG9sZF9lbWFpbCwgMSkpIDwgMCkgeworCQkvKiBtYWlsbWFwIGVudHJ5IGV4aXN0cywgaW52ZXJ0IGluZGV4IHZhbHVlICovCisJCWluZGV4ID0gLTEgLSBpbmRleDsKKwl9IGVsc2UgeworCQkvKiBjcmVhdGUgbWFpbG1hcCBlbnRyeSAqLworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IHN0cmluZ19saXN0X2luc2VydF9hdF9pbmRleChpbmRleCwgb2xkX2VtYWlsLCBtYXApOworCQlpdGVtLT51dGlsID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IG1haWxtYXBfZW50cnkpKTsKKwkJbWVtc2V0KGl0ZW0tPnV0aWwsIDAsIHNpemVvZihzdHJ1Y3QgbWFpbG1hcF9lbnRyeSkpOworCQkoKHN0cnVjdCBtYWlsbWFwX2VudHJ5ICopaXRlbS0+dXRpbCktPm5hbWVtYXAuc3RyZHVwX3N0cmluZ3MgPSAxOworCX0KKwltZSA9IChzdHJ1Y3QgbWFpbG1hcF9lbnRyeSAqKW1hcC0+aXRlbXNbaW5kZXhdLnV0aWw7CisKKwlpZiAob2xkX25hbWUgPT0gTlVMTCkgeworCQlkZWJ1Z19tbSgibWFpbG1hcDogYWRkaW5nIChzaW1wbGUpIGVudHJ5IGZvciAlcyBhdCBpbmRleCAlZFxuIiwgb2xkX2VtYWlsLCBpbmRleCk7CisJCS8qIFJlcGxhY2UgY3VycmVudCBuYW1lIGFuZCBuZXcgZW1haWwgZm9yIHNpbXBsZSBlbnRyeSAqLworCQlmcmVlKG1lLT5uYW1lKTsKKwkJZnJlZShtZS0+ZW1haWwpOworCQlpZiAobmV3X25hbWUpCisJCQltZS0+bmFtZSA9IHhzdHJkdXAobmV3X25hbWUpOworCQlpZiAobmV3X2VtYWlsKQorCQkJbWUtPmVtYWlsID0geHN0cmR1cChuZXdfZW1haWwpOworCX0gZWxzZSB7CisJCXN0cnVjdCBtYWlsbWFwX2luZm8gKm1pID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IG1haWxtYXBfaW5mbykpOworCQlkZWJ1Z19tbSgibWFpbG1hcDogYWRkaW5nIChjb21wbGV4KSBlbnRyeSBmb3IgJXMgYXQgaW5kZXggJWRcbiIsIG9sZF9lbWFpbCwgaW5kZXgpOworCQlpZiAobmV3X25hbWUpCisJCQltaS0+bmFtZSA9IHhzdHJkdXAobmV3X25hbWUpOworCQlpZiAobmV3X2VtYWlsKQorCQkJbWktPmVtYWlsID0geHN0cmR1cChuZXdfZW1haWwpOworCQlzdHJpbmdfbGlzdF9pbnNlcnQob2xkX25hbWUsICZtZS0+bmFtZW1hcCktPnV0aWwgPSBtaTsKKwl9CisKKwlkZWJ1Z19tbSgibWFpbG1hcDogICclcycgPCVzPiAtPiAnJXMnIDwlcz5cbiIsCisJCSBvbGRfbmFtZSwgb2xkX2VtYWlsLCBuZXdfbmFtZSwgbmV3X2VtYWlsKTsKK30KKworc3RhdGljIGNoYXIgKnBhcnNlX25hbWVfYW5kX2VtYWlsKGNoYXIgKmJ1ZmZlciwgY2hhciAqKm5hbWUsCisJCWNoYXIgKiplbWFpbCwgaW50IGFsbG93X2VtcHR5X2VtYWlsKQoreworCWNoYXIgKmxlZnQsICpyaWdodCwgKm5zdGFydCwgKm5lbmQ7CisJKm5hbWUgPSAqZW1haWwgPSBOVUxMOworCisJaWYgKChsZWZ0ID0gc3RyY2hyKGJ1ZmZlciwgJzwnKSkgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKChyaWdodCA9IHN0cmNocihsZWZ0KzEsICc+JykpID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWlmICghYWxsb3dfZW1wdHlfZW1haWwgJiYgKGxlZnQrMSA9PSByaWdodCkpCisJCXJldHVybiBOVUxMOworCisJLyogcmVtb3ZlIHdoaXRlc3BhY2UgZnJvbSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBuYW1lICovCisJbnN0YXJ0ID0gYnVmZmVyOworCXdoaWxlIChpc3NwYWNlKCpuc3RhcnQpICYmIG5zdGFydCA8IGxlZnQpCisJCSsrbnN0YXJ0OworCW5lbmQgPSBsZWZ0LTE7CisJd2hpbGUgKGlzc3BhY2UoKm5lbmQpICYmIG5lbmQgPiBuc3RhcnQpCisJCS0tbmVuZDsKKworCSpuYW1lID0gKG5zdGFydCA8IG5lbmQgPyBuc3RhcnQgOiBOVUxMKTsKKwkqZW1haWwgPSBsZWZ0KzE7CisJKihuZW5kKzEpID0gJ1wwJzsKKwkqcmlnaHQrKyA9ICdcMCc7CisKKwlyZXR1cm4gKCpyaWdodCA9PSAnXDAnID8gTlVMTCA6IHJpZ2h0KTsKK30KKworc3RhdGljIGludCByZWFkX3NpbmdsZV9tYWlsbWFwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciAqKnJlcG9fYWJicmV2KQogewogCWNoYXIgYnVmZmVyWzEwMjRdOwotCUZJTEUgKmYgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKwlGSUxFICpmID0gKGZpbGVuYW1lID09IE5VTEwgPyBOVUxMIDogZm9wZW4oZmlsZW5hbWUsICJyIikpOwogCiAJaWYgKGYgPT0gTlVMTCkKIAkJcmV0dXJuIDE7CiAJd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGYpICE9IE5VTEwpIHsKLQkJY2hhciAqZW5kX29mX25hbWUsICpsZWZ0X2JyYWNrZXQsICpyaWdodF9icmFja2V0OwotCQljaGFyICpuYW1lLCAqZW1haWw7Ci0JCWludCBpOworCQljaGFyICpuYW1lMSA9IE5VTEwsICplbWFpbDEgPSBOVUxMLCAqbmFtZTIgPSBOVUxMLCAqZW1haWwyID0gTlVMTDsKIAkJaWYgKGJ1ZmZlclswXSA9PSAnIycpIHsKIAkJCXN0YXRpYyBjb25zdCBjaGFyIGFiYnJldltdID0gIiMgcmVwby1hYmJyZXY6IjsKIAkJCWludCBhYmJsZW4gPSBzaXplb2YoYWJicmV2KSAtIDE7CkBAIC0zNiw0MSArMTYwLDQ5IEBACiAJCQl9CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAoKGxlZnRfYnJhY2tldCA9IHN0cmNocihidWZmZXIsICc8JykpID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJaWYgKChyaWdodF9icmFja2V0ID0gc3RyY2hyKGxlZnRfYnJhY2tldCArIDEsICc+JykpID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJaWYgKHJpZ2h0X2JyYWNrZXQgPT0gbGVmdF9icmFja2V0ICsgMSkKLQkJCWNvbnRpbnVlOwotCQlmb3IgKGVuZF9vZl9uYW1lID0gbGVmdF9icmFja2V0OwotCQkgICAgIGVuZF9vZl9uYW1lICE9IGJ1ZmZlciAmJiBpc3NwYWNlKGVuZF9vZl9uYW1lWy0xXSk7Ci0JCSAgICAgZW5kX29mX25hbWUtLSkKLQkJCTsgLyoga2VlcCBvbiBsb29raW5nICovCi0JCWlmIChlbmRfb2ZfbmFtZSA9PSBidWZmZXIpCi0JCQljb250aW51ZTsKLQkJbmFtZSA9IHhtYWxsb2MoZW5kX29mX25hbWUgLSBidWZmZXIgKyAxKTsKLQkJc3RybGNweShuYW1lLCBidWZmZXIsIGVuZF9vZl9uYW1lIC0gYnVmZmVyICsgMSk7Ci0JCWVtYWlsID0geG1hbGxvYyhyaWdodF9icmFja2V0IC0gbGVmdF9icmFja2V0KTsKLQkJZm9yIChpID0gMDsgaSA8IHJpZ2h0X2JyYWNrZXQgLSBsZWZ0X2JyYWNrZXQgLSAxOyBpKyspCi0JCQllbWFpbFtpXSA9IHRvbG93ZXIobGVmdF9icmFja2V0W2kgKyAxXSk7Ci0JCWVtYWlsW3JpZ2h0X2JyYWNrZXQgLSBsZWZ0X2JyYWNrZXQgLSAxXSA9ICdcMCc7Ci0JCXN0cmluZ19saXN0X2luc2VydChlbWFpbCwgbWFwKS0+dXRpbCA9IG5hbWU7CisJCWlmICgobmFtZTIgPSBwYXJzZV9uYW1lX2FuZF9lbWFpbChidWZmZXIsICZuYW1lMSwgJmVtYWlsMSwgMCkpICE9IE5VTEwpCisJCQlwYXJzZV9uYW1lX2FuZF9lbWFpbChuYW1lMiwgJm5hbWUyLCAmZW1haWwyLCAxKTsKKworCQlpZiAoZW1haWwxKQorCQkJYWRkX21hcHBpbmcobWFwLCBuYW1lMSwgZW1haWwxLCBuYW1lMiwgZW1haWwyKTsKIAl9CiAJZmNsb3NlKGYpOwogCXJldHVybiAwOwogfQogCi1pbnQgbWFwX2VtYWlsKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLCBjb25zdCBjaGFyICplbWFpbCwgY2hhciAqbmFtZSwgaW50IG1heGxlbikKK2ludCByZWFkX21haWxtYXAoc3RydWN0IHN0cmluZ19saXN0ICptYXAsIGNoYXIgKipyZXBvX2FiYnJldikKK3sKKwltYXAtPnN0cmR1cF9zdHJpbmdzID0gMTsKKwkvKiBlYWNoIGZhaWx1cmUgcmV0dXJucyAxLCBzbyA+MSBtZWFucyBib3RoIGNhbGxzIGZhaWxlZCAqLworCXJldHVybiByZWFkX3NpbmdsZV9tYWlsbWFwKG1hcCwgIi5tYWlsbWFwIiwgcmVwb19hYmJyZXYpICsKKwkgICAgICAgcmVhZF9zaW5nbGVfbWFpbG1hcChtYXAsIGdpdF9tYWlsbWFwX2ZpbGUsIHJlcG9fYWJicmV2KSA+IDE7Cit9CisKK3ZvaWQgY2xlYXJfbWFpbG1hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCkKK3sKKwlkZWJ1Z19tbSgibWFpbG1hcDogY2xlYXJpbmcgJWQgZW50cmllcy4uLlxuIiwgbWFwLT5ucik7CisJbWFwLT5zdHJkdXBfc3RyaW5ncyA9IDE7CisJc3RyaW5nX2xpc3RfY2xlYXJfZnVuYyhtYXAsIGZyZWVfbWFpbG1hcF9lbnRyeSk7CisJZGVidWdfbW0oIm1haWxtYXA6IGNsZWFyZWRcbiIpOworfQorCitpbnQgbWFwX3VzZXIoc3RydWN0IHN0cmluZ19saXN0ICptYXAsCisJICAgICBjaGFyICplbWFpbCwgaW50IG1heGxlbl9lbWFpbCwgY2hhciAqbmFtZSwgaW50IG1heGxlbl9uYW1lKQogewogCWNoYXIgKnA7CiAJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IG1haWxtYXBfZW50cnkgKm1lOwogCWNoYXIgYnVmWzEwMjRdLCAqbWFpbGJ1ZjsKIAlpbnQgaTsKIAotCS8qIGF1dG9jb21wbGV0ZSBjb21tb24gZGV2ZWxvcGVycyAqLworCS8qIGZpZ3VyZSBvdXQgc3BhY2UgcmVxdWlyZW1lbnQgZm9yIGVtYWlsICovCiAJcCA9IHN0cmNocihlbWFpbCwgJz4nKTsKLQlpZiAoIXApCi0JCXJldHVybiAwOworCWlmICghcCkgeworCQkvKiBlbWFpbCBwYXNzZWQgaW4gbWlnaHQgbm90IGJlIHdyYXBwZWQgaW4gPD4sIGJ1dCBlbmQgd2l0aCBhIFwwICovCisJCXAgPSBtZW1jaHIoZW1haWwsICdcMCcsIG1heGxlbl9lbWFpbCk7CisJCWlmICghcCkKKwkJCXJldHVybiAwOworCX0KIAlpZiAocCAtIGVtYWlsICsgMSA8IHNpemVvZihidWYpKQogCQltYWlsYnVmID0gYnVmOwogCWVsc2UKQEAgLTgwLDEzICsyMTIsMzkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcCAtIGVtYWlsOyBpKyspCiAJCW1haWxidWZbaV0gPSB0b2xvd2VyKGVtYWlsW2ldKTsKIAltYWlsYnVmW2ldID0gMDsKKworCWRlYnVnX21tKCJtYXBfdXNlcjogbWFwICclcycgPCVzPlxuIiwgbmFtZSwgbWFpbGJ1Zik7CiAJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cChtYWlsYnVmLCBtYXApOworCWlmIChpdGVtICE9IE5VTEwpIHsKKwkJbWUgPSAoc3RydWN0IG1haWxtYXBfZW50cnkgKilpdGVtLT51dGlsOworCQlpZiAobWUtPm5hbWVtYXAubnIpIHsKKwkJCS8qIFRoZSBpdGVtIGhhcyBtdWx0aXBsZSBpdGVtcywgc28gd2UnbGwgbG9vayB1cCBvbiBuYW1lIHRvbyAqLworCQkJLyogSWYgdGhlIG5hbWUgaXMgbm90IGZvdW5kLCB3ZSBjaG9vc2UgdGhlIHNpbXBsZSBlbnRyeSAgICAgICovCisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3ViaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cChuYW1lLCAmbWUtPm5hbWVtYXApOworCQkJaWYgKHN1Yml0ZW0pCisJCQkJaXRlbSA9IHN1Yml0ZW07CisJCX0KKwl9CiAJaWYgKG1haWxidWYgIT0gYnVmKQogCQlmcmVlKG1haWxidWYpOwogCWlmIChpdGVtICE9IE5VTEwpIHsKLQkJY29uc3QgY2hhciAqcmVhbG5hbWUgPSAoY29uc3QgY2hhciAqKWl0ZW0tPnV0aWw7Ci0JCXN0cmxjcHkobmFtZSwgcmVhbG5hbWUsIG1heGxlbik7CisJCXN0cnVjdCBtYWlsbWFwX2luZm8gKm1pID0gKHN0cnVjdCBtYWlsbWFwX2luZm8gKilpdGVtLT51dGlsOworCQlpZiAobWktPm5hbWUgPT0gTlVMTCAmJiAobWktPmVtYWlsID09IE5VTEwgfHwgbWF4bGVuX2VtYWlsID09IDApKSB7CisJCQlkZWJ1Z19tbSgibWFwX3VzZXI6ICAtLSAobm8gc2ltcGxlIG1hcHBpbmcpXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChtYXhsZW5fZW1haWwgJiYgbWktPmVtYWlsKQorCQkJc3RybGNweShlbWFpbCwgbWktPmVtYWlsLCBtYXhsZW5fZW1haWwpOworCQlpZiAobWF4bGVuX25hbWUgJiYgbWktPm5hbWUpCisJCQlzdHJsY3B5KG5hbWUsIG1pLT5uYW1lLCBtYXhsZW5fbmFtZSk7CisJCWRlYnVnX21tKCJtYXBfdXNlcjogIHRvICclcycgPCVzPlxuIiwgbmFtZSwgbWktPmVtYWlsID8gbWktPmVtYWlsIDogIiIpOwogCQlyZXR1cm4gMTsKIAl9CisJZGVidWdfbW0oIm1hcF91c2VyOiAgLS1cbiIpOwogCXJldHVybiAwOwogfQorCitpbnQgbWFwX2VtYWlsKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLCBjb25zdCBjaGFyICplbWFpbCwgY2hhciAqbmFtZSwgaW50IG1heGxlbikKK3sKKwlyZXR1cm4gbWFwX3VzZXIobWFwLCAoY2hhciAqKWVtYWlsLCAwLCBuYW1lLCBtYXhsZW4pOworfQpkaWZmIC0tZ2l0IGEvbWFpbG1hcC5oIGIvbWFpbG1hcC5oCmluZGV4IDZlNDhmODMuLjRiMmNhM2EgMTAwNjQ0Ci0tLSBhL21haWxtYXAuaAorKysgYi9tYWlsbWFwLmgKQEAgLTEsNyArMSwxMSBAQAogI2lmbmRlZiBNQUlMTUFQX0gKICNkZWZpbmUgTUFJTE1BUF9ICiAKLWludCByZWFkX21haWxtYXAoc3RydWN0IHN0cmluZ19saXN0ICptYXAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICoqcmVwb19hYmJyZXYpOworaW50IHJlYWRfbWFpbG1hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCwgY2hhciAqKnJlcG9fYWJicmV2KTsKK3ZvaWQgY2xlYXJfbWFpbG1hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCk7CisKIGludCBtYXBfZW1haWwoc3RydWN0IHN0cmluZ19saXN0ICptYWlsbWFwLCBjb25zdCBjaGFyICplbWFpbCwgY2hhciAqbmFtZSwgaW50IG1heGxlbik7CitpbnQgbWFwX3VzZXIoc3RydWN0IHN0cmluZ19saXN0ICptYWlsbWFwLAorCSAgICAgY2hhciAqZW1haWwsIGludCBtYXhsZW5fZW1haWwsIGNoYXIgKm5hbWUsIGludCBtYXhsZW5fbmFtZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbWVyZ2UtaW5kZXguYyBiL21lcmdlLWluZGV4LmMKaW5kZXggNzgyN2U4Ny4uMTlkZGQwMyAxMDA2NDQKLS0tIGEvbWVyZ2UtaW5kZXguYworKysgYi9tZXJnZS1pbmRleC5jCkBAIC0xLDQ2ICsxLDIyIEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICpwZ207Ci1zdGF0aWMgY29uc3QgY2hhciAqYXJndW1lbnRzWzldOwogc3RhdGljIGludCBvbmVfc2hvdCwgcXVpZXQ7CiBzdGF0aWMgaW50IGVycjsKIAotc3RhdGljIHZvaWQgcnVuX3Byb2dyYW0odm9pZCkKLXsKLQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZDsKLQltZW1zZXQoJmNoaWxkLCAwLCBzaXplb2YoY2hpbGQpKTsKLQljaGlsZC5hcmd2ID0gYXJndW1lbnRzOwotCWlmIChydW5fY29tbWFuZCgmY2hpbGQpKSB7Ci0JCWlmIChvbmVfc2hvdCkgewotCQkJZXJyKys7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoIXF1aWV0KQotCQkJCWRpZSgibWVyZ2UgcHJvZ3JhbSBmYWlsZWQiKTsKLQkJCWV4aXQoMSk7Ci0JCX0KLQl9Ci19Ci0KIHN0YXRpYyBpbnQgbWVyZ2VfZW50cnkoaW50IHBvcywgY29uc3QgY2hhciAqcGF0aCkKIHsKIAlpbnQgZm91bmQ7CisJY29uc3QgY2hhciAqYXJndW1lbnRzW10gPSB7IHBnbSwgIiIsICIiLCAiIiwgcGF0aCwgIiIsICIiLCAiIiwgTlVMTCB9OworCWNoYXIgaGV4YnVmWzRdWzYwXTsKKwljaGFyIG93bmJ1Zls0XVs2MF07CiAKIAlpZiAocG9zID49IGFjdGl2ZV9ucikKIAkJZGllKCJnaXQgbWVyZ2UtaW5kZXg6ICVzIG5vdCBpbiB0aGUgY2FjaGUiLCBwYXRoKTsKLQlhcmd1bWVudHNbMF0gPSBwZ207Ci0JYXJndW1lbnRzWzFdID0gIiI7Ci0JYXJndW1lbnRzWzJdID0gIiI7Ci0JYXJndW1lbnRzWzNdID0gIiI7Ci0JYXJndW1lbnRzWzRdID0gcGF0aDsKLQlhcmd1bWVudHNbNV0gPSAiIjsKLQlhcmd1bWVudHNbNl0gPSAiIjsKLQlhcmd1bWVudHNbN10gPSAiIjsKLQlhcmd1bWVudHNbOF0gPSBOVUxMOwogCWZvdW5kID0gMDsKIAlkbyB7Ci0JCXN0YXRpYyBjaGFyIGhleGJ1Zls0XVs2MF07Ci0JCXN0YXRpYyBjaGFyIG93bmJ1Zls0XVs2MF07CiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKIAkJaW50IHN0YWdlID0gY2Vfc3RhZ2UoY2UpOwogCkBAIC01NCw3ICszMCwxNiBAQAogCX0gd2hpbGUgKCsrcG9zIDwgYWN0aXZlX25yKTsKIAlpZiAoIWZvdW5kKQogCQlkaWUoImdpdCBtZXJnZS1pbmRleDogJXMgbm90IGluIHRoZSBjYWNoZSIsIHBhdGgpOwotCXJ1bl9wcm9ncmFtKCk7CisKKwlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJndW1lbnRzLCAwKSkgeworCQlpZiAob25lX3Nob3QpCisJCQllcnIrKzsKKwkJZWxzZSB7CisJCQlpZiAoIXF1aWV0KQorCQkJCWRpZSgibWVyZ2UgcHJvZ3JhbSBmYWlsZWQiKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CiAJcmV0dXJuIGZvdW5kOwogfQogCkBAIC05MSw3ICs3Niw5IEBACiAJc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOwogCiAJaWYgKGFyZ2MgPCAzKQotCQl1c2FnZSgiZ2l0LW1lcmdlLWluZGV4IFstb10gWy1xXSA8bWVyZ2UtcHJvZ3JhbT4gKC1hIHwgWy0tXSA8ZmlsZW5hbWU+KikiKTsKKwkJdXNhZ2UoImdpdCBtZXJnZS1pbmRleCBbLW9dIFstcV0gPG1lcmdlLXByb2dyYW0+ICgtYSB8IFstLV0gPGZpbGVuYW1lPiopIik7CisKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOwogCiAJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwogCXJlYWRfY2FjaGUoKTsKZGlmZiAtLWdpdCBhL21lcmdlLXJlY3Vyc2l2ZS5jIGIvbWVyZ2UtcmVjdXJzaXZlLmMKaW5kZXggNTRkMjNiMi4uMTBkNzkxMyAxMDA2NDQKLS0tIGEvbWVyZ2UtcmVjdXJzaXZlLmMKKysrIGIvbWVyZ2UtcmVjdXJzaXZlLmMKQEAgLTM4LDcgKzM4LDcgQEAKICAqIEEgdmlydHVhbCBjb21taXQgaGFzIChjb25zdCBjaGFyICopY29tbWl0LT51dGlsIHNldCB0byB0aGUgbmFtZS4KICAqLwogCi1zdHJ1Y3QgY29tbWl0ICptYWtlX3ZpcnR1YWxfY29tbWl0KHN0cnVjdCB0cmVlICp0cmVlLCBjb25zdCBjaGFyICpjb21tZW50KQorc3RhdGljIHN0cnVjdCBjb21taXQgKm1ha2VfdmlydHVhbF9jb21taXQoc3RydWN0IHRyZWUgKnRyZWUsIGNvbnN0IGNoYXIgKmNvbW1lbnQpCiB7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNvbW1pdCkpOwogCWNvbW1pdC0+dHJlZSA9IHRyZWU7CkBAIC0yMzcsNyArMjM3LDcgQEAKIAkJc3RyaW5nX2xpc3RfaW5zZXJ0KG5ld3BhdGgsICZvLT5jdXJyZW50X2ZpbGVfc2V0KTsKIAlmcmVlKG5ld3BhdGgpOwogCi0JcmV0dXJuIFJFQURfVFJFRV9SRUNVUlNJVkU7CisJcmV0dXJuIChTX0lTRElSKG1vZGUpID8gUkVBRF9UUkVFX1JFQ1VSU0lWRSA6IDApOwogfQogCiBzdGF0aWMgaW50IGdldF9maWxlc19kaXJzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLCBzdHJ1Y3QgdHJlZSAqdHJlZSkKQEAgLTQzOCw3ICs0MzgsNyBAQAogCQkJLyogSWdub3JlIGVwaXBlICovCiAJCQlpZiAoZXJybm8gPT0gRVBJUEUpCiAJCQkJYnJlYWs7Ci0JCQlkaWUoIm1lcmdlLXJlY3Vyc2l2ZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJtZXJnZS1yZWN1cnNpdmUiKTsKIAkJfSBlbHNlIGlmICghcmV0KSB7CiAJCQlkaWUoIm1lcmdlLXJlY3Vyc2l2ZTogZGlzayBmdWxsPyIpOwogCQl9CkBAIC01MjAsOCArNTIwLDEyIEBACiAJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAogCQlpZiAoU19JU0dJVExJTksobW9kZSkpCi0JCQlkaWUoImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnOiBJdCBpcyBhIHN1Ym1vZHVsZSEiLAotCQkJICAgIHNoYTFfdG9faGV4KHNoYSksIHBhdGgpOworCQkJLyoKKwkJCSAqIFdlIG1heSBsYXRlciBkZWNpZGUgdG8gcmVjdXJzaXZlbHkgZGVzY2VuZCBpbnRvCisJCQkgKiB0aGUgc3VibW9kdWxlIGRpcmVjdG9yeSBhbmQgdXBkYXRlIGl0cyBpbmRleAorCQkJICogYW5kL29yIHdvcmsgdHJlZSwgYnV0IHdlIGRvIG5vdCBkbyB0aGF0IG5vdy4KKwkJCSAqLworCQkJZ290byB1cGRhdGVfaW5kZXg7CiAKIAkJYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhLCAmdHlwZSwgJnNpemUpOwogCQlpZiAoIWJ1ZikKQEAgLTU1MCw3ICs1NTQsNyBAQAogCQkJCW1vZGUgPSAwNjY2OwogCQkJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19UUlVOQyB8IE9fQ1JFQVQsIG1vZGUpOwogCQkJaWYgKGZkIDwgMCkKLQkJCQlkaWUoImZhaWxlZCB0byBvcGVuICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gb3BlbiAnJXMnIiwgcGF0aCk7CiAJCQlmbHVzaF9idWZmZXIoZmQsIGJ1Ziwgc2l6ZSk7CiAJCQljbG9zZShmZCk7CiAJCX0gZWxzZSBpZiAoU19JU0xOSyhtb2RlKSkgewpAQCAtNTU4LDcgKzU2Miw3IEBACiAJCQlzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHBhdGgpOwogCQkJdW5saW5rKHBhdGgpOwogCQkJaWYgKHN5bWxpbmsobG5rLCBwYXRoKSkKLQkJCQlkaWUoImZhaWxlZCB0byBzeW1saW5rICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gc3ltbGluayAnJXMnIiwgcGF0aCk7CiAJCQlmcmVlKGxuayk7CiAJCX0gZWxzZQogCQkJZGllKCJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIiwKQEAgLTYxOCw4ICs2MjIsMTMgQEAKIAljaGFyICpuYW1lMSwgKm5hbWUyOwogCWludCBtZXJnZV9zdGF0dXM7CiAKLQluYW1lMSA9IHhzdHJkdXAobWtwYXRoKCIlczolcyIsIGJyYW5jaDEsIGEtPnBhdGgpKTsKLQluYW1lMiA9IHhzdHJkdXAobWtwYXRoKCIlczolcyIsIGJyYW5jaDIsIGItPnBhdGgpKTsKKwlpZiAoc3RyY21wKGEtPnBhdGgsIGItPnBhdGgpKSB7CisJCW5hbWUxID0geHN0cmR1cChta3BhdGgoIiVzOiVzIiwgYnJhbmNoMSwgYS0+cGF0aCkpOworCQluYW1lMiA9IHhzdHJkdXAobWtwYXRoKCIlczolcyIsIGJyYW5jaDIsIGItPnBhdGgpKTsKKwl9IGVsc2UgeworCQluYW1lMSA9IHhzdHJkdXAobWtwYXRoKCIlcyIsIGJyYW5jaDEpKTsKKwkJbmFtZTIgPSB4c3RyZHVwKG1rcGF0aCgiJXMiLCBicmFuY2gyKSk7CisJfQogCiAJZmlsbF9tbShvbmUtPnNoYTEsICZvcmlnKTsKIAlmaWxsX21tKGEtPnNoYTEsICZzcmMxKTsKQEAgLTgwMSwyMiArODEwLDE5IEBACiAJfQogCiAJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBhX3JlbmFtZXMtPm5yIHx8IGogPCBiX3JlbmFtZXMtPm5yOykgewotCQlpbnQgY29tcGFyZTsKIAkJY2hhciAqc3JjOwotCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlbmFtZXMxLCAqcmVuYW1lczIsICpyZW5hbWVzMkRzdDsKKwkJc3RydWN0IHN0cmluZ19saXN0ICpyZW5hbWVzMSwgKnJlbmFtZXMyRHN0OwogCQlzdHJ1Y3QgcmVuYW1lICpyZW4xID0gTlVMTCwgKnJlbjIgPSBOVUxMOwogCQljb25zdCBjaGFyICpicmFuY2gxLCAqYnJhbmNoMjsKIAkJY29uc3QgY2hhciAqcmVuMV9zcmMsICpyZW4xX2RzdDsKIAogCQlpZiAoaSA+PSBhX3JlbmFtZXMtPm5yKSB7Ci0JCQljb21wYXJlID0gMTsKIAkJCXJlbjIgPSBiX3JlbmFtZXMtPml0ZW1zW2orK10udXRpbDsKIAkJfSBlbHNlIGlmIChqID49IGJfcmVuYW1lcy0+bnIpIHsKLQkJCWNvbXBhcmUgPSAtMTsKIAkJCXJlbjEgPSBhX3JlbmFtZXMtPml0ZW1zW2krK10udXRpbDsKIAkJfSBlbHNlIHsKLQkJCWNvbXBhcmUgPSBzdHJjbXAoYV9yZW5hbWVzLT5pdGVtc1tpXS5zdHJpbmcsCi0JCQkJCWJfcmVuYW1lcy0+aXRlbXNbal0uc3RyaW5nKTsKKwkJCWludCBjb21wYXJlID0gc3RyY21wKGFfcmVuYW1lcy0+aXRlbXNbaV0uc3RyaW5nLAorCQkJCQkgICAgIGJfcmVuYW1lcy0+aXRlbXNbal0uc3RyaW5nKTsKIAkJCWlmIChjb21wYXJlIDw9IDApCiAJCQkJcmVuMSA9IGFfcmVuYW1lcy0+aXRlbXNbaSsrXS51dGlsOwogCQkJaWYgKGNvbXBhcmUgPj0gMCkKQEAgLTgyNiwxNCArODMyLDEyIEBACiAJCS8qIFRPRE86IHJlZmFjdG9yLCBzbyB0aGF0IDEvMiBhcmUgbm90IG5lZWRlZCAqLwogCQlpZiAocmVuMSkgewogCQkJcmVuYW1lczEgPSBhX3JlbmFtZXM7Ci0JCQlyZW5hbWVzMiA9IGJfcmVuYW1lczsKIAkJCXJlbmFtZXMyRHN0ID0gJmJfYnlfZHN0OwogCQkJYnJhbmNoMSA9IG8tPmJyYW5jaDE7CiAJCQlicmFuY2gyID0gby0+YnJhbmNoMjsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCByZW5hbWUgKnRtcDsKIAkJCXJlbmFtZXMxID0gYl9yZW5hbWVzOwotCQkJcmVuYW1lczIgPSBhX3JlbmFtZXM7CiAJCQlyZW5hbWVzMkRzdCA9ICZhX2J5X2RzdDsKIAkJCWJyYW5jaDEgPSBvLT5icmFuY2gyOwogCQkJYnJhbmNoMiA9IG8tPmJyYW5jaDE7CkBAIC05MzQsMTEgKzkzOCwxMiBAQAogCQkJCSAgICAgICByZW4xX3NyYywgcmVuMV9kc3QsIGJyYW5jaDEsCiAJCQkJICAgICAgIGJyYW5jaDIpOwogCQkJCXVwZGF0ZV9maWxlKG8sIDAsIHJlbjEtPnBhaXItPnR3by0+c2hhMSwgcmVuMS0+cGFpci0+dHdvLT5tb2RlLCByZW4xX2RzdCk7Ci0JCQkJdXBkYXRlX3N0YWdlcyhyZW4xX2RzdCwgTlVMTCwKLQkJCQkJCWJyYW5jaDEgPT0gby0+YnJhbmNoMSA/Ci0JCQkJCQlyZW4xLT5wYWlyLT50d28gOiBOVUxMLAotCQkJCQkJYnJhbmNoMSA9PSBvLT5icmFuY2gxID8KLQkJCQkJCU5VTEwgOiByZW4xLT5wYWlyLT50d28sIDEpOworCQkJCWlmICghby0+Y2FsbF9kZXB0aCkKKwkJCQkJdXBkYXRlX3N0YWdlcyhyZW4xX2RzdCwgTlVMTCwKKwkJCQkJCQlicmFuY2gxID09IG8tPmJyYW5jaDEgPworCQkJCQkJCXJlbjEtPnBhaXItPnR3byA6IE5VTEwsCisJCQkJCQkJYnJhbmNoMSA9PSBvLT5icmFuY2gxID8KKwkJCQkJCQlOVUxMIDogcmVuMS0+cGFpci0+dHdvLCAxKTsKIAkJCX0gZWxzZSBpZiAoIXNoYV9lcShkc3Rfb3RoZXIuc2hhMSwgbnVsbF9zaGExKSkgewogCQkJCWNvbnN0IGNoYXIgKm5ld19wYXRoOwogCQkJCWNsZWFuX21lcmdlID0gMDsKQEAgLTExNDMsMjEgKzExNDgsMTMgQEAKIAkJCQkgby0+YnJhbmNoMSwgby0+YnJhbmNoMik7CiAKIAkJY2xlYW5fbWVyZ2UgPSBtZmkuY2xlYW47Ci0JCWlmIChtZmkuY2xlYW4pCi0JCQl1cGRhdGVfZmlsZShvLCAxLCBtZmkuc2hhLCBtZmkubW9kZSwgcGF0aCk7Ci0JCWVsc2UgaWYgKFNfSVNHSVRMSU5LKG1maS5tb2RlKSkKLQkJCW91dHB1dChvLCAxLCAiQ09ORkxJQ1QgKHN1Ym1vZHVsZSk6IE1lcmdlIGNvbmZsaWN0IGluICVzICIKLQkJCSAgICAgICAiLSBuZWVkcyAlcyIsIHBhdGgsIHNoYTFfdG9faGV4KGIuc2hhMSkpOwotCQllbHNlIHsKKwkJaWYgKCFtZmkuY2xlYW4pIHsKKwkJCWlmIChTX0lTR0lUTElOSyhtZmkubW9kZSkpCisJCQkJcmVhc29uID0gInN1Ym1vZHVsZSI7CiAJCQlvdXRwdXQobywgMSwgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIiwKIAkJCQkJcmVhc29uLCBwYXRoKTsKLQotCQkJaWYgKG8tPmNhbGxfZGVwdGgpCi0JCQkJdXBkYXRlX2ZpbGUobywgMCwgbWZpLnNoYSwgbWZpLm1vZGUsIHBhdGgpOwotCQkJZWxzZQotCQkJCXVwZGF0ZV9maWxlX2ZsYWdzKG8sIG1maS5zaGEsIG1maS5tb2RlLCBwYXRoLAotCQkJCQkgICAgICAwIC8qIHVwZGF0ZV9jYWNoZSAqLywgMSAvKiB1cGRhdGVfd29ya2luZ19kaXJlY3RvcnkgKi8pOwogCQl9CisJCXVwZGF0ZV9maWxlKG8sIG1maS5jbGVhbiwgbWZpLnNoYSwgbWZpLm1vZGUsIHBhdGgpOwogCX0gZWxzZSBpZiAoIW9fc2hhICYmICFhX3NoYSAmJiAhYl9zaGEpIHsKIAkJLyoKIAkJICogdGhpcyBlbnRyeSB3YXMgZGVsZXRlZCBhbHRvZ2V0aGVyLiBhX21vZGUgPT0gMCBtZWFucwpkaWZmIC0tZ2l0IGEvbWVyZ2UtdHJlZS5jIGIvbWVyZ2UtdHJlZS5jCmluZGV4IDJkMTQxM2UuLmYwMWU3YzggMTAwNjQ0Ci0tLSBhL21lcmdlLXRyZWUuYworKysgYi9tZXJnZS10cmVlLmMKQEAgLTIsOCArMiw5IEBACiAjaW5jbHVkZSAidHJlZS13YWxrLmgiCiAjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCiAKLXN0YXRpYyBjb25zdCBjaGFyIG1lcmdlX3RyZWVfdXNhZ2VbXSA9ICJnaXQtbWVyZ2UtdHJlZSA8YmFzZS10cmVlPiA8YnJhbmNoMT4gPGJyYW5jaDI+IjsKK3N0YXRpYyBjb25zdCBjaGFyIG1lcmdlX3RyZWVfdXNhZ2VbXSA9ICJnaXQgbWVyZ2UtdHJlZSA8YmFzZS10cmVlPiA8YnJhbmNoMT4gPGJyYW5jaDI+IjsKIHN0YXRpYyBpbnQgcmVzb2x2ZV9kaXJlY3RvcmllcyA9IDE7CiAKIHN0cnVjdCBtZXJnZV9saXN0IHsKQEAgLTM0NCw2ICszNDUsOCBAQAogCWlmIChhcmdjICE9IDQpCiAJCXVzYWdlKG1lcmdlX3RyZWVfdXNhZ2UpOwogCisJZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKKwogCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKIAogCWJ1ZjEgPSBnZXRfdHJlZV9kZXNjcmlwdG9yKHQrMCwgYXJndlsxXSk7CmRpZmYgLS1naXQgYS9ta3RhZy5jIGIvbWt0YWcuYwppbmRleCBiYTNkNDk1Li5hNjA5ZTNlIDEwMDY0NAotLS0gYS9ta3RhZy5jCisrKyBiL21rdGFnLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgogCiAvKgogICogQSBzaWduYXR1cmUgZmlsZSBoYXMgYSB2ZXJ5IHNpbXBsZSBmaXhlZCBmb3JtYXQ6IGZvdXIgbGluZXMKQEAgLTE1NywxMiArMTU4LDE0IEBACiAJdW5zaWduZWQgY2hhciByZXN1bHRfc2hhMVsyMF07CiAKIAlpZiAoYXJnYyAhPSAxKQotCQl1c2FnZSgiZ2l0LW1rdGFnIDwgc2lnbmF0dXJlZmlsZSIpOworCQl1c2FnZSgiZ2l0IG1rdGFnIDwgc2lnbmF0dXJlZmlsZSIpOworCisJZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKIAogCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKIAogCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCA0MDk2KSA8IDApIHsKLQkJZGllKCJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIik7CisJCWRpZV9lcnJubygiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIpOwogCX0KIAogCS8qIFZlcmlmeSBpdCBmb3Igc29tZSBiYXNpYyBzYW5pdHk6IGl0IG5lZWRzIHRvIHN0YXJ0IHdpdGgKZGlmZiAtLWdpdCBhL21rdHJlZS5jIGIvbWt0cmVlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNGZkOWIuLjAwMDAwMDAKLS0tIGEvbWt0cmVlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqIEdJVCAtIHRoZSBzdHVwaWQgY29udGVudCB0cmFja2VyCi0gKgotICogQ29weXJpZ2h0IChjKSBKdW5pbyBDIEhhbWFubywgMjAwNgotICovCi0jaW5jbHVkZSAiY2FjaGUuaCIKLSNpbmNsdWRlICJxdW90ZS5oIgotI2luY2x1ZGUgInRyZWUuaCIKLQotc3RhdGljIHN0cnVjdCB0cmVlZW50IHsKLQl1bnNpZ25lZCBtb2RlOwotCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JaW50IGxlbjsKLQljaGFyIG5hbWVbRkxFWF9BUlJBWV07Ci19ICoqZW50cmllczsKLXN0YXRpYyBpbnQgYWxsb2MsIHVzZWQ7Ci0KLXN0YXRpYyB2b2lkIGFwcGVuZF90b190cmVlKHVuc2lnbmVkIG1vZGUsIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNoYXIgKnBhdGgpCi17Ci0Jc3RydWN0IHRyZWVlbnQgKmVudDsKLQlpbnQgbGVuID0gc3RybGVuKHBhdGgpOwotCWlmIChzdHJjaHIocGF0aCwgJy8nKSkKLQkJZGllKCJwYXRoICVzIGNvbnRhaW5zIHNsYXNoIiwgcGF0aCk7Ci0KLQlpZiAoYWxsb2MgPD0gdXNlZCkgewotCQlhbGxvYyA9IGFsbG9jX25yKHVzZWQpOwotCQllbnRyaWVzID0geHJlYWxsb2MoZW50cmllcywgc2l6ZW9mKCplbnRyaWVzKSAqIGFsbG9jKTsKLQl9Ci0JZW50ID0gZW50cmllc1t1c2VkKytdID0geG1hbGxvYyhzaXplb2YoKiplbnRyaWVzKSArIGxlbiArIDEpOwotCWVudC0+bW9kZSA9IG1vZGU7Ci0JZW50LT5sZW4gPSBsZW47Ci0JaGFzaGNweShlbnQtPnNoYTEsIHNoYTEpOwotCW1lbWNweShlbnQtPm5hbWUsIHBhdGgsIGxlbisxKTsKLX0KLQotc3RhdGljIGludCBlbnRfY29tcGFyZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCi17Ci0Jc3RydWN0IHRyZWVlbnQgKmEgPSAqKHN0cnVjdCB0cmVlZW50ICoqKWFfOwotCXN0cnVjdCB0cmVlZW50ICpiID0gKihzdHJ1Y3QgdHJlZWVudCAqKiliXzsKLQlyZXR1cm4gYmFzZV9uYW1lX2NvbXBhcmUoYS0+bmFtZSwgYS0+bGVuLCBhLT5tb2RlLAotCQkJCSBiLT5uYW1lLCBiLT5sZW4sIGItPm1vZGUpOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZV90cmVlKHVuc2lnbmVkIGNoYXIgKnNoYTEpCi17Ci0Jc3RydWN0IHN0cmJ1ZiBidWY7Ci0Jc2l6ZV90IHNpemU7Ci0JaW50IGk7Ci0KLQlxc29ydChlbnRyaWVzLCB1c2VkLCBzaXplb2YoKmVudHJpZXMpLCBlbnRfY29tcGFyZSk7Ci0JZm9yIChzaXplID0gaSA9IDA7IGkgPCB1c2VkOyBpKyspCi0JCXNpemUgKz0gMzIgKyBlbnRyaWVzW2ldLT5sZW47Ci0KLQlzdHJidWZfaW5pdCgmYnVmLCBzaXplKTsKLQlmb3IgKGkgPSAwOyBpIDwgdXNlZDsgaSsrKSB7Ci0JCXN0cnVjdCB0cmVlZW50ICplbnQgPSBlbnRyaWVzW2ldOwotCQlzdHJidWZfYWRkZigmYnVmLCAiJW8gJXMlYyIsIGVudC0+bW9kZSwgZW50LT5uYW1lLCAnXDAnKTsKLQkJc3RyYnVmX2FkZCgmYnVmLCBlbnQtPnNoYTEsIDIwKTsKLQl9Ci0KLQl3cml0ZV9zaGExX2ZpbGUoYnVmLmJ1ZiwgYnVmLmxlbiwgdHJlZV90eXBlLCBzaGExKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgbWt0cmVlX3VzYWdlW10gPSAiZ2l0LW1rdHJlZSBbLXpdIjsKLQotaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCi17Ci0Jc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOwotCXN0cnVjdCBzdHJidWYgcF91cSA9IFNUUkJVRl9JTklUOwotCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JaW50IGxpbmVfdGVybWluYXRpb24gPSAnXG4nOwotCi0Jc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwotCi0Jd2hpbGUgKCgxIDwgYWMpICYmIGF2WzFdWzBdID09ICctJykgewotCQljaGFyICphcmcgPSBhdlsxXTsKLQkJaWYgKCFzdHJjbXAoIi16IiwgYXJnKSkKLQkJCWxpbmVfdGVybWluYXRpb24gPSAwOwotCQllbHNlCi0JCQl1c2FnZShta3RyZWVfdXNhZ2UpOwotCQlhYy0tOwotCQlhdisrOwotCX0KLQotCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmc2IsIHN0ZGluLCBsaW5lX3Rlcm1pbmF0aW9uKSAhPSBFT0YpIHsKLQkJY2hhciAqcHRyLCAqbnRyOwotCQl1bnNpZ25lZCBtb2RlOwotCQllbnVtIG9iamVjdF90eXBlIHR5cGU7Ci0JCWNoYXIgKnBhdGg7Ci0KLQkJcHRyID0gc2IuYnVmOwotCQkvKiBJbnB1dCBpcyBub24tcmVjdXJzaXZlIGxzLXRyZWUgb3V0cHV0IGZvcm1hdAotCQkgKiBtb2RlIFNQIHR5cGUgU1Agc2hhMSBUQUIgbmFtZQotCQkgKi8KLQkJbW9kZSA9IHN0cnRvdWwocHRyLCAmbnRyLCA4KTsKLQkJaWYgKHB0ciA9PSBudHIgfHwgIW50ciB8fCAqbnRyICE9ICcgJykKLQkJCWRpZSgiaW5wdXQgZm9ybWF0IGVycm9yOiAlcyIsIHNiLmJ1Zik7Ci0JCXB0ciA9IG50ciArIDE7IC8qIHR5cGUgKi8KLQkJbnRyID0gc3RyY2hyKHB0ciwgJyAnKTsKLQkJaWYgKCFudHIgfHwgc2IuYnVmICsgc2IubGVuIDw9IG50ciArIDQwIHx8Ci0JCSAgICBudHJbNDFdICE9ICdcdCcgfHwKLQkJICAgIGdldF9zaGExX2hleChudHIgKyAxLCBzaGExKSkKLQkJCWRpZSgiaW5wdXQgZm9ybWF0IGVycm9yOiAlcyIsIHNiLmJ1Zik7Ci0JCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOwotCQlpZiAodHlwZSA8IDApCi0JCQlkaWUoIm9iamVjdCAlcyB1bmF2YWlsYWJsZSIsIHNoYTFfdG9faGV4KHNoYTEpKTsKLQkJKm50cisrID0gMDsgLyogbm93IGF0IHRoZSBiZWdpbm5pbmcgb2YgU0hBMSAqLwotCQlpZiAodHlwZSAhPSB0eXBlX2Zyb21fc3RyaW5nKHB0cikpCi0JCQlkaWUoIm9iamVjdCB0eXBlICVzIG1pc21hdGNoICglcykiLCBwdHIsIHR5cGVuYW1lKHR5cGUpKTsKLQotCQlwYXRoID0gbnRyICsgNDE7ICAvKiBhdCB0aGUgYmVnaW5uaW5nIG9mIG5hbWUgKi8KLQkJaWYgKGxpbmVfdGVybWluYXRpb24gJiYgcGF0aFswXSA9PSAnIicpIHsKLQkJCXN0cmJ1Zl9yZXNldCgmcF91cSk7Ci0JCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZwX3VxLCBwYXRoLCBOVUxMKSkgewotCQkJCWRpZSgiaW52YWxpZCBxdW90aW5nIik7Ci0JCQl9Ci0JCQlwYXRoID0gcF91cS5idWY7Ci0JCX0KLQotCQlhcHBlbmRfdG9fdHJlZShtb2RlLCBzaGExLCBwYXRoKTsKLQl9Ci0Jc3RyYnVmX3JlbGVhc2UoJnBfdXEpOwotCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Ci0KLQl3cml0ZV90cmVlKHNoYTEpOwotCXB1dHMoc2hhMV90b19oZXgoc2hhMSkpOwotCWV4aXQoMCk7Ci19CmRpZmYgLS1naXQgYS9vYmplY3QuYyBiL29iamVjdC5jCmluZGV4IDdlNmE5MmMuLmE2ZWY0MzkgMTAwNjQ0Ci0tLSBhL29iamVjdC5jCisrKyBiL29iamVjdC5jCkBAIC00NSwxMyArNDUsMTQgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBoYXNoX29iaihzdHJ1Y3Qgb2JqZWN0ICpvYmosIHVuc2lnbmVkIGludCBuKQogewotCXVuc2lnbmVkIGludCBoYXNoID0gKih1bnNpZ25lZCBpbnQgKilvYmotPnNoYTE7CisJdW5zaWduZWQgaW50IGhhc2g7CisJbWVtY3B5KCZoYXNoLCBvYmotPnNoYTEsIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKIAlyZXR1cm4gaGFzaCAlIG47CiB9CiAKIHN0YXRpYyB2b2lkIGluc2VydF9vYmpfaGFzaChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCBvYmplY3QgKipoYXNoLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKLQlpbnQgaiA9IGhhc2hfb2JqKG9iaiwgc2l6ZSk7CisJdW5zaWduZWQgaW50IGogPSBoYXNoX29iaihvYmosIHNpemUpOwogCiAJd2hpbGUgKGhhc2hbal0pIHsKIAkJaisrOwpAQCAtNjEsMTYgKzYyLDE2IEBACiAJaGFzaFtqXSA9IG9iajsKIH0KIAotc3RhdGljIGludCBoYXNodGFibGVfaW5kZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaHRhYmxlX2luZGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJbWVtY3B5KCZpLCBzaGExLCBzaXplb2YodW5zaWduZWQgaW50KSk7Ci0JcmV0dXJuIChpbnQpKGkgJSBvYmpfaGFzaF9zaXplKTsKKwlyZXR1cm4gaSAlIG9ial9oYXNoX3NpemU7CiB9CiAKIHN0cnVjdCBvYmplY3QgKmxvb2t1cF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaTsKIAlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CiAKIAlpZiAoIW9ial9oYXNoKQpkaWZmIC0tZ2l0IGEvcGFjay1jaGVjay5jIGIvcGFjay1jaGVjay5jCmluZGV4IDkwYzMzYjEuLjE2NmNhNzAgMTAwNjQ0Ci0tLSBhL3BhY2stY2hlY2suYworKysgYi9wYWNrLWNoZWNrLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIAljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleF9iYXNlID0gcC0+aW5kZXhfZGF0YTsKIAlnaXRfU0hBX0NUWCBjdHg7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXSwgKnBhY2tfc2lnOwotCW9mZl90IG9mZnNldCA9IDAsIHBhY2tfc2lnX29mcyA9IHAtPnBhY2tfc2l6ZSAtIDIwOworCW9mZl90IG9mZnNldCA9IDAsIHBhY2tfc2lnX29mcyA9IDA7CiAJdWludDMyX3QgbnJfb2JqZWN0cywgaTsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgaWR4X2VudHJ5ICplbnRyaWVzOwpAQCAtNjEsMTQgKzYxLDE2IEBACiAJICovCiAKIAlnaXRfU0hBMV9Jbml0KCZjdHgpOwotCXdoaWxlIChvZmZzZXQgPCBwYWNrX3NpZ19vZnMpIHsKKwlkbyB7CiAJCXVuc2lnbmVkIGludCByZW1haW5pbmc7CiAJCXVuc2lnbmVkIGNoYXIgKmluID0gdXNlX3BhY2socCwgd19jdXJzLCBvZmZzZXQsICZyZW1haW5pbmcpOwogCQlvZmZzZXQgKz0gcmVtYWluaW5nOworCQlpZiAoIXBhY2tfc2lnX29mcykKKwkJCXBhY2tfc2lnX29mcyA9IHAtPnBhY2tfc2l6ZSAtIDIwOwogCQlpZiAob2Zmc2V0ID4gcGFja19zaWdfb2ZzKQogCQkJcmVtYWluaW5nIC09ICh1bnNpZ25lZCBpbnQpKG9mZnNldCAtIHBhY2tfc2lnX29mcyk7CiAJCWdpdF9TSEExX1VwZGF0ZSgmY3R4LCBpbiwgcmVtYWluaW5nKTsKLQl9CisJfSB3aGlsZSAob2Zmc2V0IDwgcGFja19zaWdfb2ZzKTsKIAlnaXRfU0hBMV9GaW5hbChzaGExLCAmY3R4KTsKIAlwYWNrX3NpZyA9IHVzZV9wYWNrKHAsIHdfY3VycywgcGFja19zaWdfb2ZzLCBOVUxMKTsKIAlpZiAoaGFzaGNtcChzaGExLCBwYWNrX3NpZykpCmRpZmYgLS1naXQgYS9wYWNrLXJlZHVuZGFudC5jIGIvcGFjay1yZWR1bmRhbnQuYwppbmRleCAyNWI4MWE0Li40OGExMmJjIDEwMDY0NAotLS0gYS9wYWNrLXJlZHVuZGFudC5jCisrKyBiL3BhY2stcmVkdW5kYW50LmMKQEAgLTcsNiArNyw3IEBACiAqLwogCiAjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgogCiAjZGVmaW5lIEJMS1NJWkUgNTEyCiAKQEAgLTQ2Myw3ICs0NjQsNyBAQAogCQlwbGxfZnJlZShwZXJtX2FsbCk7CiAJfQogCWlmIChwZXJtX29rID09IE5VTEwpCi0JCWRpZSgiSW50ZXJuYWwgZXJyb3I6IE5vIGNvbXBsZXRlIHNldHMgZm91bmQhXG4iKTsKKwkJZGllKCJJbnRlcm5hbCBlcnJvcjogTm8gY29tcGxldGUgc2V0cyBmb3VuZCEiKTsKIAogCS8qIGZpbmQgdGhlIHBlcm11dGF0aW9uIHdpdGggdGhlIHNtYWxsZXN0IHNpemUgKi8KIAlwZXJtID0gcGVybV9vazsKQEAgLTU3MywxNCArNTc0LDE0IEBACiAJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBwYWNrZWRfZ2l0OwogCiAJaWYgKHN0cmxlbihmaWxlbmFtZSkgPCA0MCkKLQkJZGllKCJCYWQgcGFjayBmaWxlbmFtZTogJXNcbiIsIGZpbGVuYW1lKTsKKwkJZGllKCJCYWQgcGFjayBmaWxlbmFtZTogJXMiLCBmaWxlbmFtZSk7CiAKIAl3aGlsZSAocCkgewogCQlpZiAoc3Ryc3RyKHAtPnBhY2tfbmFtZSwgZmlsZW5hbWUpKQogCQkJcmV0dXJuIGFkZF9wYWNrKHApOwogCQlwID0gcC0+bmV4dDsKIAl9Ci0JZGllKCJGaWxlbmFtZSAlcyBub3QgZm91bmQgaW4gcGFja2VkX2dpdFxuIiwgZmlsZW5hbWUpOworCWRpZSgiRmlsZW5hbWUgJXMgbm90IGZvdW5kIGluIHBhY2tlZF9naXQiLCBmaWxlbmFtZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxvYWRfYWxsKHZvaWQpCkBAIC02MDEsNiArNjAyLDggQEAKIAl1bnNpZ25lZCBjaGFyICpzaGExOwogCWNoYXIgYnVmWzQyXTsgLyogNDAgYnl0ZSBzaGExICsgXG4gKyBcMCAqLwogCisJZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKKwogCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKIAogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKQEAgLTYzNiw3ICs2MzksNyBAQAogCQkJYWRkX3BhY2tfZmlsZSgqKGFyZ3YgKyBpKyspKTsKIAogCWlmIChsb2NhbF9wYWNrcyA9PSBOVUxMKQotCQlkaWUoIlplcm8gcGFja3MgZm91bmQhXG4iKTsKKwkJZGllKCJaZXJvIHBhY2tzIGZvdW5kISIpOwogCiAJbG9hZF9hbGxfb2JqZWN0cygpOwogCmRpZmYgLS1naXQgYS9wYWNrLXJlZnMuYyBiL3BhY2stcmVmcy5jCmluZGV4IDJjNzZmYjEuLjdmNDNmOGEgMTAwNjQ0Ci0tLSBhL3BhY2stcmVmcy5jCisrKyBiL3BhY2stcmVmcy5jCkBAIC02Niw3ICs2Niw3IEBACiAJc3RydWN0IHJlZl9sb2NrICpsb2NrID0gbG9ja19yZWZfc2hhMShyLT5uYW1lICsgNSwgci0+c2hhMSk7CiAKIAlpZiAobG9jaykgewotCQl1bmxpbmsoZ2l0X3BhdGgoIiVzIiwgci0+bmFtZSkpOworCQl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aCgiJXMiLCByLT5uYW1lKSk7CiAJCXVubG9ja19yZWYobG9jayk7CiAJfQogfQpAQCAtOTMsOCArOTMsNyBAQAogCQkJCSAgICAgICBMT0NLX0RJRV9PTl9FUlJPUik7CiAJY2JkYXRhLnJlZnNfZmlsZSA9IGZkb3BlbihmZCwgInciKTsKIAlpZiAoIWNiZGF0YS5yZWZzX2ZpbGUpCi0JCWRpZSgidW5hYmxlIHRvIGNyZWF0ZSByZWYtcGFjayBmaWxlIHN0cnVjdHVyZSAoJXMpIiwKLQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSByZWYtcGFjayBmaWxlIHN0cnVjdHVyZSIpOwogCiAJLyogcGVyaGFwcyBvdGhlciB0cmFpdHMgbGF0ZXIgYXMgd2VsbCAqLwogCWZwcmludGYoY2JkYXRhLnJlZnNfZmlsZSwgIiMgcGFjay1yZWZzIHdpdGg6IHBlZWxlZCBcbiIpOwpAQCAtMTAzLDcgKzEwMiw3IEBACiAJaWYgKGZlcnJvcihjYmRhdGEucmVmc19maWxlKSkKIAkJZGllKCJmYWlsZWQgdG8gd3JpdGUgcmVmLXBhY2sgZmlsZSIpOwogCWlmIChmZmx1c2goY2JkYXRhLnJlZnNfZmlsZSkgfHwgZnN5bmMoZmQpIHx8IGZjbG9zZShjYmRhdGEucmVmc19maWxlKSkKLQkJZGllKCJmYWlsZWQgdG8gd3JpdGUgcmVmLXBhY2sgZmlsZSAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJmYWlsZWQgdG8gd3JpdGUgcmVmLXBhY2sgZmlsZSIpOwogCS8qCiAJICogU2luY2UgdGhlIGxvY2sgZmlsZSB3YXMgZmRvcGVuKCknZWQgYW5kIHRoZW4gZmNsb3NlKCknZWQgYWJvdmUsCiAJICogYXNzaWduIC0xIHRvIHRoZSBsb2NrIGZpbGUgZGVzY3JpcHRvciBzbyB0aGF0IGNvbW1pdF9sb2NrX2ZpbGUoKQpAQCAtMTExLDcgKzExMCw3IEBACiAJICovCiAJcGFja2VkLmZkID0gLTE7CiAJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJnBhY2tlZCkgPCAwKQotCQlkaWUoInVuYWJsZSB0byBvdmVyd3JpdGUgb2xkIHJlZi1wYWNrIGZpbGUgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygidW5hYmxlIHRvIG92ZXJ3cml0ZSBvbGQgcmVmLXBhY2sgZmlsZSIpOwogCWlmIChjYmRhdGEuZmxhZ3MgJiBQQUNLX1JFRlNfUFJVTkUpCiAJCXBydW5lX3JlZnMoY2JkYXRhLnJlZl90b19wcnVuZSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9wYWNrLXJldmluZGV4LmMgYi9wYWNrLXJldmluZGV4LmMKaW5kZXggMWRlNTNjOC4uNzdhMDQ2NSAxMDA2NDQKLS0tIGEvcGFjay1yZXZpbmRleC5jCisrKyBiL3BhY2stcmV2aW5kZXguYwpAQCAtMTQ5LDggKzE0OSw3IEBACiAJaWYgKHBhY2tfcmV2aW5kZXhfaGFzaHN6KSB7CiAJCWludCBpOwogCQlmb3IgKGkgPSAwOyBpIDwgcGFja19yZXZpbmRleF9oYXNoc3o7IGkrKykKLQkJCWlmIChwYWNrX3JldmluZGV4W2ldLnJldmluZGV4KQotCQkJCWZyZWUocGFja19yZXZpbmRleFtpXS5yZXZpbmRleCk7CisJCQlmcmVlKHBhY2tfcmV2aW5kZXhbaV0ucmV2aW5kZXgpOwogCQlmcmVlKHBhY2tfcmV2aW5kZXgpOwogCQlwYWNrX3JldmluZGV4X2hhc2hzeiA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvcGFjay13cml0ZS5jIGIvcGFjay13cml0ZS5jCmluZGV4IDcwNTM1MzguLjc0MWVmY2QgMTAwNjQ0Ci0tLSBhL3BhY2std3JpdGUuYworKysgYi9wYWNrLXdyaXRlLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAkJZmQgPSBvcGVuKGluZGV4X25hbWUsIE9fQ1JFQVR8T19FWENMfE9fV1JPTkxZLCAwNjAwKTsKIAl9CiAJaWYgKGZkIDwgMCkKLQkJZGllKCJ1bmFibGUgdG8gY3JlYXRlICVzOiAlcyIsIGluZGV4X25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIiwgaW5kZXhfbmFtZSk7CiAJZiA9IHNoYTFmZChmZCwgaW5kZXhfbmFtZSk7CiAKIAkvKiBpZiBsYXN0IG9iamVjdCdzIG9mZnNldCBpcyA+PSAyXjMxIHdlIHNob3VsZCB1c2UgaW5kZXggVjIgKi8KQEAgLTE3NCwxMSArMTc0LDExIEBACiAJZ2l0X1NIQTFfSW5pdCgmbmV3X3NoYTFfY3R4KTsKIAogCWlmIChsc2VlayhwYWNrX2ZkLCAwLCBTRUVLX1NFVCkgIT0gMCkKLQkJZGllKCJGYWlsZWQgc2Vla2luZyB0byBzdGFydCBvZiAlczogJXMiLCBwYWNrX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiRmFpbGVkIHNlZWtpbmcgdG8gc3RhcnQgb2YgJyVzJyIsIHBhY2tfbmFtZSk7CiAJaWYgKHJlYWRfaW5fZnVsbChwYWNrX2ZkLCAmaGRyLCBzaXplb2YoaGRyKSkgIT0gc2l6ZW9mKGhkcikpCi0JCWRpZSgiVW5hYmxlIHRvIHJlcmVhZCBoZWFkZXIgb2YgJXM6ICVzIiwgcGFja19uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIlVuYWJsZSB0byByZXJlYWQgaGVhZGVyIG9mICclcyciLCBwYWNrX25hbWUpOwogCWlmIChsc2VlayhwYWNrX2ZkLCAwLCBTRUVLX1NFVCkgIT0gMCkKLQkJZGllKCJGYWlsZWQgc2Vla2luZyB0byBzdGFydCBvZiAlczogJXMiLCBwYWNrX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiRmFpbGVkIHNlZWtpbmcgdG8gc3RhcnQgb2YgJyVzJyIsIHBhY2tfbmFtZSk7CiAJZ2l0X1NIQTFfVXBkYXRlKCZvbGRfc2hhMV9jdHgsICZoZHIsIHNpemVvZihoZHIpKTsKIAloZHIuaGRyX2VudHJpZXMgPSBodG9ubChvYmplY3RfY291bnQpOwogCWdpdF9TSEExX1VwZGF0ZSgmbmV3X3NoYTFfY3R4LCAmaGRyLCBzaXplb2YoaGRyKSk7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAkJaWYgKCFuKQogCQkJYnJlYWs7CiAJCWlmIChuIDwgMCkKLQkJCWRpZSgiRmFpbGVkIHRvIGNoZWNrc3VtICVzOiAlcyIsIHBhY2tfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWRpZV9lcnJubygiRmFpbGVkIHRvIGNoZWNrc3VtICclcyciLCBwYWNrX25hbWUpOwogCQlnaXRfU0hBMV9VcGRhdGUoJm5ld19zaGExX2N0eCwgYnVmLCBuKTsKIAogCQlhbGlnbmVkX3N6IC09IG47CmRpZmYgLS1naXQgYS9wYWdlci5jIGIvcGFnZXIuYwppbmRleCBmMTlkZGJjLi40OTIxODQzIDEwMDY0NAotLS0gYS9wYWdlci5jCisrKyBiL3BhZ2VyLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCiAKIC8qCiAgKiBUaGlzIGlzIHNwbGl0IHVwIGZyb20gdGhlIHJlc3Qgb2YgZ2l0IHNvIHRoYXQgd2UgY2FuIGRvCkBAIC0zOCw2ICszOSwxMyBAQAogCWZpbmlzaF9jb21tYW5kKCZwYWdlcl9wcm9jZXNzKTsKIH0KIAorc3RhdGljIHZvaWQgd2FpdF9mb3JfcGFnZXJfc2lnbmFsKGludCBzaWdubykKK3sKKwl3YWl0X2Zvcl9wYWdlcigpOworCXNpZ2NoYWluX3BvcChzaWdubyk7CisJcmFpc2Uoc2lnbm8pOworfQorCiB2b2lkIHNldHVwX3BhZ2VyKHZvaWQpCiB7CiAJY29uc3QgY2hhciAqcGFnZXIgPSBnZXRlbnYoIkdJVF9QQUdFUiIpOwpAQCAtNzUsNiArODMsNyBAQAogCWNsb3NlKHBhZ2VyX3Byb2Nlc3MuaW4pOwogCiAJLyogdGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIHBhcmVudCB0ZXJtaW5hdGVzIGFmdGVyIHRoZSBwYWdlciAqLworCXNpZ2NoYWluX3B1c2hfY29tbW9uKHdhaXRfZm9yX3BhZ2VyX3NpZ25hbCk7CiAJYXRleGl0KHdhaXRfZm9yX3BhZ2VyKTsKIH0KIApkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy5jIGIvcGFyc2Utb3B0aW9ucy5jCmluZGV4IDllYjU1Y2MuLmY3Y2U1MjMgMTAwNjQ0Ci0tLSBhL3BhcnNlLW9wdGlvbnMuYworKysgYi9wYXJzZS1vcHRpb25zLmMKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCiAjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCiAKICNkZWZpbmUgT1BUX1NIT1JUIDEKICNkZWZpbmUgT1BUX1VOU0VUIDIKQEAgLTMwLDExICszMSwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBmaXhfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICoqZmlsZSkKK3sKKwlpZiAoIWZpbGUgfHwgISpmaWxlIHx8ICFwcmVmaXggfHwgaXNfYWJzb2x1dGVfcGF0aCgqZmlsZSkKKwkgICAgfHwgIXN0cmNtcCgiLSIsICpmaWxlKSkKKwkJcmV0dXJuOworCSpmaWxlID0geHN0cmR1cChwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBzdHJsZW4ocHJlZml4KSwgKmZpbGUpKTsKK30KKwogc3RhdGljIGludCBnZXRfdmFsdWUoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqcCwKIAkJICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGludCBmbGFncykKIHsKIAljb25zdCBjaGFyICpzLCAqYXJnOwogCWNvbnN0IGludCB1bnNldCA9IGZsYWdzICYgT1BUX1VOU0VUOworCWludCBlcnI7CiAKIAlpZiAodW5zZXQgJiYgcC0+b3B0KQogCQlyZXR1cm4gb3B0ZXJyb3Iob3B0LCAidGFrZXMgbm8gdmFsdWUiLCBmbGFncyk7CkBAIC00OSw2ICs1OSw3IEBACiAJCQkvKiBGQUxMVEhST1VHSCAqLwogCQljYXNlIE9QVElPTl9CT09MRUFOOgogCQljYXNlIE9QVElPTl9CSVQ6CisJCWNhc2UgT1BUSU9OX05FR0JJVDoKIAkJY2FzZSBPUFRJT05fU0VUX0lOVDoKIAkJY2FzZSBPUFRJT05fU0VUX1BUUjoKIAkJCXJldHVybiBvcHRlcnJvcihvcHQsICJ0YWtlcyBubyB2YWx1ZSIsIGZsYWdzKTsKQEAgLTY1LDYgKzc2LDEzIEBACiAJCQkqKGludCAqKW9wdC0+dmFsdWUgfD0gb3B0LT5kZWZ2YWw7CiAJCXJldHVybiAwOwogCisJY2FzZSBPUFRJT05fTkVHQklUOgorCQlpZiAodW5zZXQpCisJCQkqKGludCAqKW9wdC0+dmFsdWUgfD0gb3B0LT5kZWZ2YWw7CisJCWVsc2UKKwkJCSooaW50ICopb3B0LT52YWx1ZSAmPSB+b3B0LT5kZWZ2YWw7CisJCXJldHVybiAwOworCiAJY2FzZSBPUFRJT05fQk9PTEVBTjoKIAkJKihpbnQgKilvcHQtPnZhbHVlID0gdW5zZXQgPyAwIDogKihpbnQgKilvcHQtPnZhbHVlICsgMTsKIAkJcmV0dXJuIDA7CkBAIC04Niw2ICsxMDQsMTkgQEAKIAkJCXJldHVybiBnZXRfYXJnKHAsIG9wdCwgZmxhZ3MsIChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWUpOwogCQlyZXR1cm4gMDsKIAorCWNhc2UgT1BUSU9OX0ZJTEVOQU1FOgorCQllcnIgPSAwOworCQlpZiAodW5zZXQpCisJCQkqKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSA9IE5VTEw7CisJCWVsc2UgaWYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHICYmICFwLT5vcHQpCisJCQkqKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSA9IChjb25zdCBjaGFyICopb3B0LT5kZWZ2YWw7CisJCWVsc2UKKwkJCWVyciA9IGdldF9hcmcocCwgb3B0LCBmbGFncywgKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSk7CisKKwkJaWYgKCFlcnIpCisJCQlmaXhfZmlsZW5hbWUocC0+cHJlZml4LCAoY29uc3QgY2hhciAqKilvcHQtPnZhbHVlKTsKKwkJcmV0dXJuIGVycjsKKwogCWNhc2UgT1BUSU9OX0NBTExCQUNLOgogCQlpZiAodW5zZXQpCiAJCQlyZXR1cm4gKCpvcHQtPmNhbGxiYWNrKShvcHQsIE5VTEwsIDEpID8gKC0xKSA6IDA7CkBAIC0xMjAsMTEgKzE1MSwzMyBAQAogCiBzdGF0aWMgaW50IHBhcnNlX3Nob3J0X29wdChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpwLCBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zKQogeworCWNvbnN0IHN0cnVjdCBvcHRpb24gKm51bW9wdCA9IE5VTEw7CisKIAlmb3IgKDsgb3B0aW9ucy0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHRpb25zKyspIHsKIAkJaWYgKG9wdGlvbnMtPnNob3J0X25hbWUgPT0gKnAtPm9wdCkgewogCQkJcC0+b3B0ID0gcC0+b3B0WzFdID8gcC0+b3B0ICsgMSA6IE5VTEw7CiAJCQlyZXR1cm4gZ2V0X3ZhbHVlKHAsIG9wdGlvbnMsIE9QVF9TSE9SVCk7CiAJCX0KKworCQkvKgorCQkgKiBIYW5kbGUgdGhlIG51bWVyaWNhbCBvcHRpb24gbGF0ZXIsIGV4cGxpY2l0IG9uZS1kaWdpdAorCQkgKiBvcHRpb25zIHRha2UgcHJlY2VkZW5jZSBvdmVyIGl0LgorCQkgKi8KKwkJaWYgKG9wdGlvbnMtPnR5cGUgPT0gT1BUSU9OX05VTUJFUikKKwkJCW51bW9wdCA9IG9wdGlvbnM7CisJfQorCWlmIChudW1vcHQgJiYgaXNkaWdpdCgqcC0+b3B0KSkgeworCQlzaXplX3QgbGVuID0gMTsKKwkJY2hhciAqYXJnOworCQlpbnQgcmM7CisKKwkJd2hpbGUgKGlzZGlnaXQocC0+b3B0W2xlbl0pKQorCQkJbGVuKys7CisJCWFyZyA9IHhtZW1kdXB6KHAtPm9wdCwgbGVuKTsKKwkJcC0+b3B0ID0gcC0+b3B0W2xlbl0gPyBwLT5vcHQgKyBsZW4gOiBOVUxMOworCQlyYyA9ICgqbnVtb3B0LT5jYWxsYmFjaykobnVtb3B0LCBhcmcsIDApID8gKC0xKSA6IDA7CisJCWZyZWUoYXJnKTsKKwkJcmV0dXJuIHJjOwogCX0KIAlyZXR1cm4gLTI7CiB9CkBAIC0yMTQsNiArMjY3LDI1IEBACiAJcmV0dXJuIC0yOwogfQogCitzdGF0aWMgaW50IHBhcnNlX25vZGFzaF9vcHQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqcCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpCit7CisJZm9yICg7IG9wdGlvbnMtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0aW9ucysrKSB7CisJCWlmICghKG9wdGlvbnMtPmZsYWdzICYgUEFSU0VfT1BUX05PREFTSCkpCisJCQljb250aW51ZTsKKwkJaWYgKChvcHRpb25zLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpIHx8CisJCSAgICAhKG9wdGlvbnMtPmZsYWdzICYgUEFSU0VfT1BUX05PQVJHKSkKKwkJCWRpZSgiQlVHOiBkYXNobGVzcyBvcHRpb25zIGRvbid0IHN1cHBvcnQgYXJndW1lbnRzIik7CisJCWlmICghKG9wdGlvbnMtPmZsYWdzICYgUEFSU0VfT1BUX05PTkVHKSkKKwkJCWRpZSgiQlVHOiBkYXNobGVzcyBvcHRpb25zIGRvbid0IHN1cHBvcnQgbmVnYXRpb24iKTsKKwkJaWYgKG9wdGlvbnMtPmxvbmdfbmFtZSkKKwkJCWRpZSgiQlVHOiBkYXNobGVzcyBvcHRpb25zIGNhbid0IGJlIGxvbmciKTsKKwkJaWYgKG9wdGlvbnMtPnNob3J0X25hbWUgPT0gYXJnWzBdICYmIGFyZ1sxXSA9PSAnXDAnKQorCQkJcmV0dXJuIGdldF92YWx1ZShwLCBvcHRpb25zLCBPUFRfU0hPUlQpOworCX0KKwlyZXR1cm4gLTI7Cit9CisKIHN0YXRpYyB2b2lkIGNoZWNrX3R5cG9zKGNvbnN0IGNoYXIgKmFyZywgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucykKIHsKIAlpZiAoc3RybGVuKGFyZykgPCAzKQpAQCAtMjM0LDE1ICszMDYsNDIgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHBhcnNlX29wdGlvbnNfY2hlY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0cykKK3sKKwlpbnQgZXJyID0gMDsKKworCWZvciAoOyBvcHRzLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdHMrKykgeworCQlpZiAoKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCkgJiYKKwkJICAgIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpKSB7CisJCQlpZiAob3B0cy0+bG9uZ19uYW1lKSB7CisJCQkJZXJyb3IoImAtLSVzYCB1c2VzIGluY29tcGF0aWJsZSBmbGFncyAiCisJCQkJICAgICAgIkxBU1RBUkdfREVGQVVMVCBhbmQgT1BUQVJHIiwgb3B0cy0+bG9uZ19uYW1lKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyb3IoImAtJWNgIHVzZXMgaW5jb21wYXRpYmxlIGZsYWdzICIKKwkJCQkgICAgICAiTEFTVEFSR19ERUZBVUxUIGFuZCBPUFRBUkciLCBvcHRzLT5zaG9ydF9uYW1lKTsKKwkJCX0KKwkJCWVyciB8PSAxOworCQl9CisJfQorCisJaWYgKGVycikKKwkJZXhpdCgxMjkpOworfQorCiB2b2lkIHBhcnNlX29wdGlvbnNfc3RhcnQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAotCQkJIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgaW50IGZsYWdzKQorCQkJIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJIGludCBmbGFncykKIHsKIAltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOwogCWN0eC0+YXJnYyA9IGFyZ2MgLSAxOwogCWN0eC0+YXJndiA9IGFyZ3YgKyAxOwogCWN0eC0+b3V0ICA9IGFyZ3Y7CisJY3R4LT5wcmVmaXggPSBwcmVmaXg7CiAJY3R4LT5jcGlkeCA9ICgoZmxhZ3MgJiBQQVJTRV9PUFRfS0VFUF9BUkdWMCkgIT0gMCk7CiAJY3R4LT5mbGFncyA9IGZsYWdzOworCWlmICgoZmxhZ3MgJiBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKSAmJgorCSAgICAoZmxhZ3MgJiBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKSkKKwkJZGllKCJTVE9QX0FUX05PTl9PUFRJT04gYW5kIEtFRVBfVU5LTk9XTiBkb24ndCBnbyB0b2dldGhlciIpOwogfQogCiBzdGF0aWMgaW50IHVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbChjb25zdCBjaGFyICogY29uc3QgKiwKQEAgLTI1Miw2ICszNTEsMTAgQEAKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCiAJCSAgICAgICBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSkKIHsKKwlpbnQgaW50ZXJuYWxfaGVscCA9ICEoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQKTsKKworCXBhcnNlX29wdGlvbnNfY2hlY2sob3B0aW9ucyk7CisKIAkvKiB3ZSBtdXN0IHJlc2V0IC0+b3B0LCB1bmtub3duIHNob3J0IG9wdGlvbiBsZWF2ZSBpdCBkYW5nbGluZyAqLwogCWN0eC0+b3B0ID0gTlVMTDsKIApAQCAtMjU5LDYgKzM2Miw4IEBACiAJCWNvbnN0IGNoYXIgKmFyZyA9IGN0eC0+YXJndlswXTsKIAogCQlpZiAoKmFyZyAhPSAnLScgfHwgIWFyZ1sxXSkgeworCQkJaWYgKHBhcnNlX25vZGFzaF9vcHQoY3R4LCBhcmcsIG9wdGlvbnMpID09IDApCisJCQkJY29udGludWU7CiAJCQlpZiAoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pCiAJCQkJYnJlYWs7CiAJCQljdHgtPm91dFtjdHgtPmNwaWR4KytdID0gY3R4LT5hcmd2WzBdOwpAQCAtMjY3LDE4ICszNzIsMTggQEAKIAogCQlpZiAoYXJnWzFdICE9ICctJykgewogCQkJY3R4LT5vcHQgPSBhcmcgKyAxOwotCQkJaWYgKCpjdHgtPm9wdCA9PSAnaCcpCisJCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAqY3R4LT5vcHQgPT0gJ2gnKQogCQkJCXJldHVybiBwYXJzZV9vcHRpb25zX3VzYWdlKHVzYWdlc3RyLCBvcHRpb25zKTsKIAkJCXN3aXRjaCAocGFyc2Vfc2hvcnRfb3B0KGN0eCwgb3B0aW9ucykpIHsKIAkJCWNhc2UgLTE6CiAJCQkJcmV0dXJuIHBhcnNlX29wdGlvbnNfdXNhZ2UodXNhZ2VzdHIsIG9wdGlvbnMpOwogCQkJY2FzZSAtMjoKLQkJCQlyZXR1cm4gUEFSU0VfT1BUX1VOS05PV047CisJCQkJZ290byB1bmtub3duOwogCQkJfQogCQkJaWYgKGN0eC0+b3B0KQogCQkJCWNoZWNrX3R5cG9zKGFyZyArIDEsIG9wdGlvbnMpOwogCQkJd2hpbGUgKGN0eC0+b3B0KSB7Ci0JCQkJaWYgKCpjdHgtPm9wdCA9PSAnaCcpCisJCQkJaWYgKGludGVybmFsX2hlbHAgJiYgKmN0eC0+b3B0ID09ICdoJykKIAkJCQkJcmV0dXJuIHBhcnNlX29wdGlvbnNfdXNhZ2UodXNhZ2VzdHIsIG9wdGlvbnMpOwogCQkJCXN3aXRjaCAocGFyc2Vfc2hvcnRfb3B0KGN0eCwgb3B0aW9ucykpIHsKIAkJCQljYXNlIC0xOgpAQCAtMjkxLDcgKzM5Niw3IEBACiAJCQkJCSAqLwogCQkJCQljdHgtPmFyZ3ZbMF0gPSB4c3RyZHVwKGN0eC0+b3B0IC0gMSk7CiAJCQkJCSooY2hhciAqKWN0eC0+YXJndlswXSA9ICctJzsKLQkJCQkJcmV0dXJuIFBBUlNFX09QVF9VTktOT1dOOworCQkJCQlnb3RvIHVua25vd247CiAJCQkJfQogCQkJfQogCQkJY29udGludWU7CkBAIC0zMDUsMTYgKzQxMCwyMiBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoIXN0cmNtcChhcmcgKyAyLCAiaGVscC1hbGwiKSkKKwkJaWYgKGludGVybmFsX2hlbHAgJiYgIXN0cmNtcChhcmcgKyAyLCAiaGVscC1hbGwiKSkKIAkJCXJldHVybiB1c2FnZV93aXRoX29wdGlvbnNfaW50ZXJuYWwodXNhZ2VzdHIsIG9wdGlvbnMsIDEpOwotCQlpZiAoIXN0cmNtcChhcmcgKyAyLCAiaGVscCIpKQorCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAhc3RyY21wKGFyZyArIDIsICJoZWxwIikpCiAJCQlyZXR1cm4gcGFyc2Vfb3B0aW9uc191c2FnZSh1c2FnZXN0ciwgb3B0aW9ucyk7CiAJCXN3aXRjaCAocGFyc2VfbG9uZ19vcHQoY3R4LCBhcmcgKyAyLCBvcHRpb25zKSkgewogCQljYXNlIC0xOgogCQkJcmV0dXJuIHBhcnNlX29wdGlvbnNfdXNhZ2UodXNhZ2VzdHIsIG9wdGlvbnMpOwogCQljYXNlIC0yOgotCQkJcmV0dXJuIFBBUlNFX09QVF9VTktOT1dOOworCQkJZ290byB1bmtub3duOwogCQl9CisJCWNvbnRpbnVlOwordW5rbm93bjoKKwkJaWYgKCEoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9LRUVQX1VOS05PV04pKQorCQkJcmV0dXJuIFBBUlNFX09QVF9VTktOT1dOOworCQljdHgtPm91dFtjdHgtPmNwaWR4KytdID0gY3R4LT5hcmd2WzBdOworCQljdHgtPm9wdCA9IE5VTEw7CiAJfQogCXJldHVybiBQQVJTRV9PUFRfRE9ORTsKIH0KQEAgLTMyNiwxMiArNDM3LDEzIEBACiAJcmV0dXJuIGN0eC0+Y3BpZHggKyBjdHgtPmFyZ2M7CiB9CiAKLWludCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywKLQkJICBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSwgaW50IGZsYWdzKQoraW50IHBhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10sCisJCSAgaW50IGZsYWdzKQogewogCXN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgY3R4OwogCi0JcGFyc2Vfb3B0aW9uc19zdGFydCgmY3R4LCBhcmdjLCBhcmd2LCBmbGFncyk7CisJcGFyc2Vfb3B0aW9uc19zdGFydCgmY3R4LCBhcmdjLCBhcmd2LCBwcmVmaXgsIGZsYWdzKTsKIAlzd2l0Y2ggKHBhcnNlX29wdGlvbnNfc3RlcCgmY3R4LCBvcHRpb25zLCB1c2FnZXN0cikpIHsKIAljYXNlIFBBUlNFX09QVF9IRUxQOgogCQlleGl0KDEyOSk7CkBAIC0zNDksMTIgKzQ2MSwyOSBAQAogCXJldHVybiBwYXJzZV9vcHRpb25zX2VuZCgmY3R4KTsKIH0KIAorc3RhdGljIGludCB1c2FnZV9hcmdoKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMpCit7CisJY29uc3QgY2hhciAqczsKKwlpbnQgbGl0ZXJhbCA9IChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFApIHx8ICFvcHRzLT5hcmdoOworCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpCisJCWlmIChvcHRzLT5sb25nX25hbWUpCisJCQlzID0gbGl0ZXJhbCA/ICJbPSVzXSIgOiAiWz08JXM+XSI7CisJCWVsc2UKKwkJCXMgPSBsaXRlcmFsID8gIlslc10iIDogIls8JXM+XSI7CisJZWxzZQorCQlzID0gbGl0ZXJhbCA/ICIgJXMiIDogIiA8JXM+IjsKKwlyZXR1cm4gZnByaW50ZihzdGRlcnIsIHMsIG9wdHMtPmFyZ2ggPyBvcHRzLT5hcmdoIDogIi4uLiIpOworfQorCiAjZGVmaW5lIFVTQUdFX09QVFNfV0lEVEggMjQKICNkZWZpbmUgVVNBR0VfR0FQICAgICAgICAgMgogCi1pbnQgdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCitzdGF0aWMgaW50IHVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbChjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAogCQkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMsIGludCBmdWxsKQogeworCWlmICghdXNhZ2VzdHIpCisJCXJldHVybiBQQVJTRV9PUFRfSEVMUDsKKwogCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzXG4iLCAqdXNhZ2VzdHIrKyk7CiAJd2hpbGUgKCp1c2FnZXN0ciAmJiAqKnVzYWdlc3RyKQogCQlmcHJpbnRmKHN0ZGVyciwgIiAgIG9yOiAlc1xuIiwgKnVzYWdlc3RyKyspOwpAQCAtMzgyLDUxICs1MTEsMjEgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXBvcyA9IGZwcmludGYoc3RkZXJyLCAiICAgICIpOwotCQlpZiAob3B0cy0+c2hvcnRfbmFtZSkKLQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIi0lYyIsIG9wdHMtPnNob3J0X25hbWUpOworCQlpZiAob3B0cy0+c2hvcnRfbmFtZSkgeworCQkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PREFTSCkKKwkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICIlYyIsIG9wdHMtPnNob3J0X25hbWUpOworCQkJZWxzZQorCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIi0lYyIsIG9wdHMtPnNob3J0X25hbWUpOworCQl9CiAJCWlmIChvcHRzLT5sb25nX25hbWUgJiYgb3B0cy0+c2hvcnRfbmFtZSkKIAkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIiwgIik7CiAJCWlmIChvcHRzLT5sb25nX25hbWUpCiAJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICItLSVzIiwgb3B0cy0+bG9uZ19uYW1lKTsKKwkJaWYgKG9wdHMtPnR5cGUgPT0gT1BUSU9OX05VTUJFUikKKwkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIi1OVU0iKTsKIAotCQlzd2l0Y2ggKG9wdHMtPnR5cGUpIHsKLQkJY2FzZSBPUFRJT05fQVJHVU1FTlQ6Ci0JCQlicmVhazsKLQkJY2FzZSBPUFRJT05fSU5URUdFUjoKLQkJCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpCi0JCQkJaWYgKG9wdHMtPmxvbmdfbmFtZSkKLQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiWz08bj5dIik7Ci0JCQkJZWxzZQotCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICJbPG4+XSIpOwotCQkJZWxzZQotCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIiA8bj4iKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QVElPTl9DQUxMQkFDSzoKLQkJCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT0FSRykKLQkJCQlicmVhazsKLQkJCS8qIEZBTExUSFJPVUdIICovCi0JCWNhc2UgT1BUSU9OX1NUUklORzoKLQkJCWlmIChvcHRzLT5hcmdoKSB7Ci0JCQkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRykKLQkJCQkJaWYgKG9wdHMtPmxvbmdfbmFtZSkKLQkJCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIls9PCVzPl0iLCBvcHRzLT5hcmdoKTsKLQkJCQkJZWxzZQotCQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiWzwlcz5dIiwgb3B0cy0+YXJnaCk7Ci0JCQkJZWxzZQotCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICIgPCVzPiIsIG9wdHMtPmFyZ2gpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKQotCQkJCQlpZiAob3B0cy0+bG9uZ19uYW1lKQotCQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiWz0uLi5dIik7Ci0JCQkJCWVsc2UKLQkJCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIlsuLi5dIik7Ci0JCQkJZWxzZQotCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICIgLi4uIik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDogLyogT1BUSU9OX3tCSVQsQk9PTEVBTixTRVRfSU5ULFNFVF9QVFJ9ICovCi0JCQlicmVhazsKLQkJfQorCQlpZiAoIShvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT0FSRykpCisJCQlwb3MgKz0gdXNhZ2VfYXJnaChvcHRzKTsKIAogCQlpZiAocG9zIDw9IFVTQUdFX09QVFNfV0lEVEgpCiAJCQlwYWQgPSBVU0FHRV9PUFRTX1dJRFRIIC0gcG9zOwpAQCAtNTA2LDE0ICs2MDUsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBPUFRJT05fRklMRU5BTUUgdHlwZSBhcyBhIHBhcnQgb2YKLSAqIHBhcnNlX29wdGlvbnMgdGhhdCB0YWtlIHByZWZpeCB0byBkbyB0aGlzIHdoaWxlIHBhcnNpbmcuCi0gKi8KLWV4dGVybiBjb25zdCBjaGFyICpwYXJzZV9vcHRpb25zX2ZpeF9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKmZpbGUpCitpbnQgcGFyc2Vfb3B0X3dpdGhfY29tbWl0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCiB7Ci0JaWYgKCFmaWxlIHx8ICFwcmVmaXggfHwgaXNfYWJzb2x1dGVfcGF0aChmaWxlKSB8fCAhc3RyY21wKCItIiwgZmlsZSkpCi0JCXJldHVybiBmaWxlOwotCXJldHVybiBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBzdHJsZW4ocHJlZml4KSwgZmlsZSk7Ci19CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CiAKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCWlmIChnZXRfc2hhMShhcmcsIHNoYTEpKQorCQlyZXR1cm4gZXJyb3IoIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIsIGFyZyk7CisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisJaWYgKCFjb21taXQpCisJCXJldHVybiBlcnJvcigibm8gc3VjaCBjb21taXQgJXMiLCBhcmcpOworCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsIG9wdC0+dmFsdWUpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy5oIGIvcGFyc2Utb3B0aW9ucy5oCmluZGV4IDAzNDE2MmUuLmFiYTMwNjcgMTAwNjQ0Ci0tLSBhL3BhcnNlLW9wdGlvbnMuaAorKysgYi9wYXJzZS1vcHRpb25zLmgKQEAgLTYsOCArNiwxMCBAQAogCU9QVElPTl9FTkQsCiAJT1BUSU9OX0FSR1VNRU5ULAogCU9QVElPTl9HUk9VUCwKKwlPUFRJT05fTlVNQkVSLAogCS8qIG9wdGlvbnMgd2l0aCBubyBhcmd1bWVudHMgKi8KIAlPUFRJT05fQklULAorCU9QVElPTl9ORUdCSVQsCiAJT1BUSU9OX0JPT0xFQU4sIC8qIF9JTkNSIHdvdWxkIGhhdmUgYmVlbiBhIGJldHRlciBuYW1lICovCiAJT1BUSU9OX1NFVF9JTlQsCiAJT1BUSU9OX1NFVF9QVFIsCkBAIC0xNSwxMiArMTcsMTUgQEAKIAlPUFRJT05fU1RSSU5HLAogCU9QVElPTl9JTlRFR0VSLAogCU9QVElPTl9DQUxMQkFDSywKKwlPUFRJT05fRklMRU5BTUUKIH07CiAKIGVudW0gcGFyc2Vfb3B0X2ZsYWdzIHsKIAlQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCA9IDEsCiAJUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTiA9IDIsCiAJUEFSU0VfT1BUX0tFRVBfQVJHVjAgPSA0LAorCVBBUlNFX09QVF9LRUVQX1VOS05PV04gPSA4LAorCVBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQID0gMTYsCiB9OwogCiBlbnVtIHBhcnNlX29wdF9vcHRpb25fZmxhZ3MgewpAQCAtMjksNiArMzQsOCBAQAogCVBBUlNFX09QVF9OT05FRyAgID0gNCwKIAlQQVJTRV9PUFRfSElEREVOICA9IDgsCiAJUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCA9IDE2LAorCVBBUlNFX09QVF9OT0RBU0ggPSAzMiwKKwlQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQID0gNjQsCiB9OwogCiBzdHJ1Y3Qgb3B0aW9uOwpAQCAtNTAsNyArNTcsNyBAQAogICoKICAqIGBhcmdoYDo6CiAgKiAgIHRva2VuIHRvIGV4cGxhaW4gdGhlIGtpbmQgb2YgYXJndW1lbnQgdGhpcyBvcHRpb24gd2FudHMuIEtlZXAgaXQKLSAqICAgaG9tb2dlbm91cyBhY3Jvc3MgdGhlIHJlcG9zaXRvcnkuCisgKiAgIGhvbW9nZW5lb3VzIGFjcm9zcyB0aGUgcmVwb3NpdG9yeS4KICAqCiAgKiBgaGVscGA6OgogICogICB0aGUgc2hvcnQgaGVscCBhc3NvY2lhdGVkIHRvIHdoYXQgdGhlIG9wdGlvbiBkb2VzLgpAQCAtNTksMTEgKzY2LDIwIEBACiAgKgogICogYGZsYWdzYDo6CiAgKiAgIG1hc2sgb2YgcGFyc2Vfb3B0X29wdGlvbl9mbGFncy4KLSAqICAgUEFSU0VfT1BUX09QVEFSRzogc2F5cyB0aGF0IHRoZSBhcmd1bWVudCBpcyBvcHRpb25uYWwgKG5vdCBmb3IgQk9PTEVBTnMpCi0gKiAgIFBBUlNFX09QVF9OT0FSRzogc2F5cyB0aGF0IHRoaXMgb3B0aW9uIHRha2VzIG5vIGFyZ3VtZW50LCBmb3IgQ0FMTEJBQ0tzCisgKiAgIFBBUlNFX09QVF9PUFRBUkc6IHNheXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgb3B0aW9uYWwgKG5vdCBmb3IgQk9PTEVBTnMpCisgKiAgIFBBUlNFX09QVF9OT0FSRzogc2F5cyB0aGF0IHRoaXMgb3B0aW9uIHRha2VzIG5vIGFyZ3VtZW50CiAgKiAgIFBBUlNFX09QVF9OT05FRzogc2F5cyB0aGF0IHRoaXMgb3B0aW9uIGNhbm5vdCBiZSBuZWdhdGVkCi0gKiAgIFBBUlNFX09QVF9ISURERU4gdGhpcyBvcHRpb24gaXMgc2tpcHBlZCBpbiB0aGUgZGVmYXVsdCB1c2FnZSwgc2hvd2VkIGluCi0gKiAgICAgICAgICAgICAgICAgICAgdGhlIGxvbmcgb25lLgorICogICBQQVJTRV9PUFRfSElEREVOOiB0aGlzIG9wdGlvbiBpcyBza2lwcGVkIGluIHRoZSBkZWZhdWx0IHVzYWdlLCBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgc2hvd24gb25seSBpbiB0aGUgZnVsbCB1c2FnZS4KKyAqICAgUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVDogc2F5cyB0aGF0IHRoaXMgb3B0aW9uIHdpbGwgdGFrZSB0aGUgZGVmYXVsdAorICoJCQkJdmFsdWUgaWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4gd2hlbiB0aGUgb3B0aW9uCisgKgkJCQlpcyBsYXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuIElmIHRoZSBvcHRpb24gaXMKKyAqCQkJCW5vdCBsYXN0IGl0IHdpbGwgcmVxdWlyZSBhbiBhcmd1bWVudC4KKyAqCQkJCVNob3VsZCBub3QgYmUgdXNlZCB3aXRoIFBBUlNFX09QVF9PUFRBUkcuCisgKiAgIFBBUlNFX09QVF9OT0RBU0g6IHRoaXMgb3B0aW9uIGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIGRhc2guCisgKiAgIFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFA6IHNheXMgdGhhdCBhcmdoIHNob3VsZG4ndCBiZSBlbmNsb3NlZCBpbiBicmFja2V0cworICoJCQkJKGkuZS4gJzxhcmdoPicpIGluIHRoZSBoZWxwIG1lc3NhZ2UuCisgKgkJCQlVc2VmdWwgZm9yIG9wdGlvbnMgd2l0aCBtdWx0aXBsZSBwYXJhbWV0ZXJzLgogICoKICAqIGBjYWxsYmFja2A6OgogICogICBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayB0byB1c2UgZm9yIE9QVElPTl9DQUxMQkFDSy4KQEAgLTg4LDMyICsxMDQsNDQgQEAKIH07CiAKICNkZWZpbmUgT1BUX0VORCgpICAgICAgICAgICAgICAgICAgIHsgT1BUSU9OX0VORCB9Ci0jZGVmaW5lIE9QVF9BUkdVTUVOVChsLCBoKSAgICAgICAgICB7IE9QVElPTl9BUkdVTUVOVCwgMCwgKGwpLCBOVUxMLCBOVUxMLCAoaCkgfQorI2RlZmluZSBPUFRfQVJHVU1FTlQobCwgaCkgICAgICAgICAgeyBPUFRJT05fQVJHVU1FTlQsIDAsIChsKSwgTlVMTCwgTlVMTCwgXAorCQkJCSAgICAgIChoKSwgUEFSU0VfT1BUX05PQVJHfQogI2RlZmluZSBPUFRfR1JPVVAoaCkgICAgICAgICAgICAgICAgeyBPUFRJT05fR1JPVVAsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIChoKSB9Ci0jZGVmaW5lIE9QVF9CSVQocywgbCwgdiwgaCwgYikgICAgICB7IE9QVElPTl9CSVQsIChzKSwgKGwpLCAodiksIE5VTEwsIChoKSwgMCwgTlVMTCwgKGIpIH0KLSNkZWZpbmUgT1BUX0JPT0xFQU4ocywgbCwgdiwgaCkgICAgIHsgT1BUSU9OX0JPT0xFQU4sIChzKSwgKGwpLCAodiksIE5VTEwsIChoKSB9Ci0jZGVmaW5lIE9QVF9TRVRfSU5UKHMsIGwsIHYsIGgsIGkpICB7IE9QVElPTl9TRVRfSU5ULCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCksIDAsIE5VTEwsIChpKSB9Ci0jZGVmaW5lIE9QVF9TRVRfUFRSKHMsIGwsIHYsIGgsIHApICB7IE9QVElPTl9TRVRfUFRSLCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCksIDAsIE5VTEwsIChwKSB9Ci0jZGVmaW5lIE9QVF9JTlRFR0VSKHMsIGwsIHYsIGgpICAgICB7IE9QVElPTl9JTlRFR0VSLCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCkgfQorI2RlZmluZSBPUFRfQklUKHMsIGwsIHYsIGgsIGIpICAgICAgeyBPUFRJT05fQklULCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCksIFwKKwkJCQkgICAgICBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIChiKSB9CisjZGVmaW5lIE9QVF9ORUdCSVQocywgbCwgdiwgaCwgYikgICB7IE9QVElPTl9ORUdCSVQsIChzKSwgKGwpLCAodiksIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9OT0FSRywgTlVMTCwgKGIpIH0KKyNkZWZpbmUgT1BUX0JPT0xFQU4ocywgbCwgdiwgaCkgICAgIHsgT1BUSU9OX0JPT0xFQU4sIChzKSwgKGwpLCAodiksIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9OT0FSRyB9CisjZGVmaW5lIE9QVF9TRVRfSU5UKHMsIGwsIHYsIGgsIGkpICB7IE9QVElPTl9TRVRfSU5ULCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIChpKSB9CisjZGVmaW5lIE9QVF9TRVRfUFRSKHMsIGwsIHYsIGgsIHApICB7IE9QVElPTl9TRVRfUFRSLCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIChwKSB9CisjZGVmaW5lIE9QVF9JTlRFR0VSKHMsIGwsIHYsIGgpICAgICB7IE9QVElPTl9JTlRFR0VSLCAocyksIChsKSwgKHYpLCAibiIsIChoKSB9CiAjZGVmaW5lIE9QVF9TVFJJTkcocywgbCwgdiwgYSwgaCkgICB7IE9QVElPTl9TVFJJTkcsICAocyksIChsKSwgKHYpLCAoYSksIChoKSB9CiAjZGVmaW5lIE9QVF9EQVRFKHMsIGwsIHYsIGgpIFwKIAl7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgInRpbWUiLChoKSwgMCwgXAogCSAgcGFyc2Vfb3B0X2FwcHJveGlkYXRlX2NiIH0KICNkZWZpbmUgT1BUX0NBTExCQUNLKHMsIGwsIHYsIGEsIGgsIGYpIFwKIAl7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgKGEpLCAoaCksIDAsIChmKSB9CisjZGVmaW5lIE9QVF9OVU1CRVJfQ0FMTEJBQ0sodiwgaCwgZikgXAorCXsgT1BUSU9OX05VTUJFUiwgMCwgTlVMTCwgKHYpLCBOVUxMLCAoaCksIFwKKwkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgKGYpIH0KKyNkZWZpbmUgT1BUX0ZJTEVOQU1FKHMsIGwsIHYsIGgpICAgIHsgT1BUSU9OX0ZJTEVOQU1FLCAocyksIChsKSwgKHYpLCBcCisJCQkJICAgICAgICJGSUxFIiwgKGgpIH0KIAogLyogcGFyc2Vfb3B0aW9ucygpIHdpbGwgZmlsdGVyIG91dCB0aGUgcHJvY2Vzc2VkIG9wdGlvbnMgYW5kIGxlYXZlIHRoZQotICogbm9uLW9wdGlvbiBhcmdtZW50cyBpbiBhcmd2W10uCisgKiBub24tb3B0aW9uIGFyZ3VtZW50cyBpbiBhcmd2W10uCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGxlZnQgaW4gYXJndltdLgogICovCi1leHRlcm4gaW50IHBhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorZXh0ZXJuIGludCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10sIGludCBmbGFncyk7CiAKIGV4dGVybiBOT1JFVFVSTiB2b2lkIHVzYWdlX3dpdGhfb3B0aW9ucyhjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpOwogCi0vKi0tLS0tIGluY3JlbWFudGFsIGFkdmFuY2VkIEFQSXMgLS0tLS0qLworLyotLS0tLSBpbmNyZW1lbnRhbCBhZHZhbmNlZCBBUElzIC0tLS0tKi8KIAogZW51bSB7CiAJUEFSU0VfT1BUX0hFTFAgPSAtMSwKQEAgLTEzMiwxMyArMTYwLDE1IEBACiAJaW50IGFyZ2MsIGNwaWR4OwogCWNvbnN0IGNoYXIgKm9wdDsKIAlpbnQgZmxhZ3M7CisJY29uc3QgY2hhciAqcHJlZml4OwogfTsKIAogZXh0ZXJuIGludCBwYXJzZV9vcHRpb25zX3VzYWdlKGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0cyk7CiAKIGV4dGVybiB2b2lkIHBhcnNlX29wdGlvbnNfc3RhcnQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAotCQkJCWludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgaW50IGZsYWdzKTsKKwkJCQlpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQlpbnQgZmxhZ3MpOwogCiBleHRlcm4gaW50IHBhcnNlX29wdGlvbnNfc3RlcChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLApAQCAtMTUxLDYgKzE4MSw3IEBACiBleHRlcm4gaW50IHBhcnNlX29wdF9hYmJyZXZfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gaW50IHBhcnNlX29wdF9hcHByb3hpZGF0ZV9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKIGV4dGVybiBpbnQgcGFyc2Vfb3B0X3ZlcmJvc2l0eV9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgcGFyc2Vfb3B0X3dpdGhfY29tbWl0KGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOwogCiAjZGVmaW5lIE9QVF9fVkVSQk9TRSh2YXIpICBPUFRfQk9PTEVBTigndicsICJ2ZXJib3NlIiwgKHZhciksICJiZSB2ZXJib3NlIikKICNkZWZpbmUgT1BUX19RVUlFVCh2YXIpICAgIE9QVF9CT09MRUFOKCdxJywgInF1aWV0IiwgICAodmFyKSwgImJlIHF1aWV0IikKQEAgLTE2NSw2ICsxOTYsNCBAQAogCSAgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIiwgXAogCSAgUEFSU0VfT1BUX09QVEFSRywgJnBhcnNlX29wdF9hYmJyZXZfY2IsIDAgfQogCi1leHRlcm4gY29uc3QgY2hhciAqcGFyc2Vfb3B0aW9uc19maXhfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpmaWxlKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9wYXRjaC1kZWx0YS5jIGIvcGF0Y2gtZGVsdGEuYwppbmRleCBlZDlkYjgxLi5lZjc0OGNlIDEwMDY0NAotLS0gYS9wYXRjaC1kZWx0YS5jCisrKyBiL3BhdGNoLWRlbHRhLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAkJCWlmIChjbWQgJiAweDAxKSBjcF9vZmYgPSAqZGF0YSsrOwogCQkJaWYgKGNtZCAmIDB4MDIpIGNwX29mZiB8PSAoKmRhdGErKyA8PCA4KTsKIAkJCWlmIChjbWQgJiAweDA0KSBjcF9vZmYgfD0gKCpkYXRhKysgPDwgMTYpOwotCQkJaWYgKGNtZCAmIDB4MDgpIGNwX29mZiB8PSAoKmRhdGErKyA8PCAyNCk7CisJCQlpZiAoY21kICYgMHgwOCkgY3Bfb2ZmIHw9ICgodW5zaWduZWQpICpkYXRhKysgPDwgMjQpOwogCQkJaWYgKGNtZCAmIDB4MTApIGNwX3NpemUgPSAqZGF0YSsrOwogCQkJaWYgKGNtZCAmIDB4MjApIGNwX3NpemUgfD0gKCpkYXRhKysgPDwgOCk7CiAJCQlpZiAoY21kICYgMHg0MCkgY3Bfc2l6ZSB8PSAoKmRhdGErKyA8PCAxNik7CmRpZmYgLS1naXQgYS9wYXRjaC1pZC5jIGIvcGF0Y2gtaWQuYwppbmRleCA4NzFmMWQyLi4wZGY0Y2IwIDEwMDY0NAotLS0gYS9wYXRjaC1pZC5jCisrKyBiL3BhdGNoLWlkLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgogCiBzdGF0aWMgdm9pZCBmbHVzaF9jdXJyZW50X2lkKGludCBwYXRjaGxlbiwgdW5zaWduZWQgY2hhciAqaWQsIGdpdF9TSEFfQ1RYICpjKQogewpAQCAtNzIsMTMgKzczLDE1IEBACiAJZmx1c2hfY3VycmVudF9pZChwYXRjaGxlbiwgc2hhMSwgJmN0eCk7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyIHBhdGNoX2lkX3VzYWdlW10gPSAiZ2l0LXBhdGNoLWlkIDwgcGF0Y2giOworc3RhdGljIGNvbnN0IGNoYXIgcGF0Y2hfaWRfdXNhZ2VbXSA9ICJnaXQgcGF0Y2gtaWQgPCBwYXRjaCI7CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlpZiAoYXJnYyAhPSAxKQogCQl1c2FnZShwYXRjaF9pZF91c2FnZSk7CiAKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCiAJZ2VuZXJhdGVfaWRfbGlzdCgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvcGF0Y2gtaWRzLmMgYi9wYXRjaC1pZHMuYwppbmRleCAzYmU1ZDMxLi41NzE3MjU3IDEwMDY0NAotLS0gYS9wYXRjaC1pZHMuYworKysgYi9wYXRjaC1pZHMuYwpAQCAtMSw2ICsxLDcgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImRpZmYuaCIKICNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgogI2luY2x1ZGUgInBhdGNoLWlkcy5oIgogCiBzdGF0aWMgaW50IGNvbW1pdF9wYXRjaF9pZChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCkBAIC0xNSw5OSArMTYsMTUgQEAKIAlyZXR1cm4gZGlmZl9mbHVzaF9wYXRjaF9pZChvcHRpb25zLCBzaGExKTsKIH0KIAotc3RhdGljIHVpbnQzMl90IHRha2UyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlkKQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhdGNoX2lkX2FjY2VzcyhzaXplX3QgaW5kZXgsIHZvaWQgKnRhYmxlKQogewotCXJldHVybiAoKGlkWzBdIDw8IDgpIHwgaWRbMV0pOworCXN0cnVjdCBwYXRjaF9pZCAqKmlkX3RhYmxlID0gdGFibGU7CisJcmV0dXJuIGlkX3RhYmxlW2luZGV4XS0+cGF0Y2hfaWQ7CiB9CiAKLS8qCi0gKiBDb252ZW50aW9uYWwgYmluYXJ5IHNlYXJjaCBsb29wIGxvb2tzIGxpa2UgdGhpczoKLSAqCi0gKiAgICAgIGRvIHsKLSAqICAgICAgICAgICAgICBpbnQgbWkgPSAobG8gKyBoaSkgLyAyOwotICogICAgICAgICAgICAgIGludCBjbXAgPSAiZW50cnkgcG9pbnRlZCBhdCBieSBtaSIgbWludXMgInRhcmdldCI7Ci0gKiAgICAgICAgICAgICAgaWYgKCFjbXApCi0gKiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1pIGlzIHRoZSB3YW50ZWQgb25lKQotICogICAgICAgICAgICAgIGlmIChjbXAgPiAwKQotICogICAgICAgICAgICAgICAgICAgICAgaGkgPSBtaTsgIm1pIGlzIGxhcmdlciB0aGFuIHRhcmdldCIKLSAqICAgICAgICAgICAgICBlbHNlCi0gKiAgICAgICAgICAgICAgICAgICAgICBsbyA9IG1pKzE7ICJtaSBpcyBzbWFsbGVyIHRoYW4gdGFyZ2V0IgotICogICAgICB9IHdoaWxlIChsbyA8IGhpKTsKLSAqCi0gKiBUaGUgaW52YXJpYW50cyBhcmU6Ci0gKgotICogLSBXaGVuIGVudGVyaW5nIHRoZSBsb29wLCBsbyBwb2ludHMgYXQgYSBzbG90IHRoYXQgaXMgbmV2ZXIKLSAqICAgYWJvdmUgdGhlIHRhcmdldCAoaXQgY291bGQgYmUgYXQgdGhlIHRhcmdldCksIGhpIHBvaW50cyBhdCBhCi0gKiAgIHNsb3QgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGFib3ZlIHRoZSB0YXJnZXQgKGl0IGNhbiBuZXZlcgotICogICBiZSBhdCB0aGUgdGFyZ2V0KS4KLSAqCi0gKiAtIFdlIGZpbmQgYSBwb2ludCAnbWknIGJldHdlZW4gbG8gYW5kIGhpIChtaSBjb3VsZCBiZSB0aGUgc2FtZQotICogICBhcyBsbywgYnV0IG5ldmVyIGNhbiBiZSB0aGUgc2FtZSBhcyBoaSksIGFuZCBjaGVjayBpZiBpdCBoaXRzCi0gKiAgIHRoZSB0YXJnZXQuICBUaGVyZSBhcmUgdGhyZWUgY2FzZXM6Ci0gKgotICogICAgLSBpZiBpdCBpcyBhIGhpdCwgd2UgYXJlIGhhcHB5LgotICoKLSAqICAgIC0gaWYgaXQgaXMgc3RyaWN0bHkgaGlnaGVyIHRoYW4gdGhlIHRhcmdldCwgd2UgdXBkYXRlIGhpIHdpdGgKLSAqICAgICAgaXQuCi0gKgotICogICAgLSBpZiBpdCBpcyBzdHJpY3RseSBsb3dlciB0aGFuIHRoZSB0YXJnZXQsIHdlIHVwZGF0ZSBsbyB0byBiZQotICogICAgICBvbmUgc2xvdCBhZnRlciBpdCwgYmVjYXVzZSB3ZSBhbGxvdyBsbyB0byBiZSBhdCB0aGUgdGFyZ2V0LgotICoKLSAqIFdoZW4gY2hvb3NpbmcgJ21pJywgd2UgZG8gbm90IGhhdmUgdG8gdGFrZSB0aGUgIm1pZGRsZSIgYnV0Ci0gKiBhbnl3aGVyZSBpbiBiZXR3ZWVuIGxvIGFuZCBoaSwgYXMgbG9uZyBhcyBsbyA8PSBtaSA8IGhpIGlzCi0gKiBzYXRpc2ZpZWQuICBXaGVuIHdlIHNvbWVob3cga25vdyB0aGF0IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZQotICogdGFyZ2V0IGFuZCBsbyBpcyBtdWNoIHNob3J0ZXIgdGhhbiB0aGUgdGFyZ2V0IGFuZCBoaSwgd2UgY291bGQKLSAqIHBpY2sgbWkgdGhhdCBpcyBtdWNoIGNsb3NlciB0byBsbyB0aGFuIHRoZSBtaWR3YXkuCi0gKi8KIHN0YXRpYyBpbnQgcGF0Y2hfcG9zKHN0cnVjdCBwYXRjaF9pZCAqKnRhYmxlLCBpbnQgbnIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlkKQogewotCWludCBoaSA9IG5yOwotCWludCBsbyA9IDA7Ci0JaW50IG1pID0gMDsKLQotCWlmICghbnIpCi0JCXJldHVybiAtMTsKLQotCWlmIChuciAhPSAxKSB7Ci0JCXVuc2lnbmVkIGxvdiwgaGl2LCBtaXYsIG9mczsKLQotCQlmb3IgKG9mcyA9IDA7IG9mcyA8IDE4OyBvZnMgKz0gMikgewotCQkJbG92ID0gdGFrZTIodGFibGVbMF0tPnBhdGNoX2lkICsgb2ZzKTsKLQkJCWhpdiA9IHRha2UyKHRhYmxlW25yLTFdLT5wYXRjaF9pZCArIG9mcyk7Ci0JCQltaXYgPSB0YWtlMihpZCArIG9mcyk7Ci0JCQlpZiAobWl2IDwgbG92KQotCQkJCXJldHVybiAtMTsKLQkJCWlmIChoaXYgPCBtaXYpCi0JCQkJcmV0dXJuIC0xIC0gbnI7Ci0JCQlpZiAobG92ICE9IGhpdikgewotCQkJCS8qCi0JCQkJICogQXQgdGhpcyBwb2ludCBtaXYgY291bGQgYmUgZXF1YWwKLQkJCQkgKiB0byBoaXYgKGJ1dCBpZCBjb3VsZCBzdGlsbCBiZSBoaWdoZXIpOwotCQkJCSAqIHRoZSBpbnZhcmlhbnQgb2YgKG1pIDwgaGkpIHNob3VsZCBiZQotCQkJCSAqIGtlcHQuCi0JCQkJICovCi0JCQkJbWkgPSAobnItMSkgKiAobWl2IC0gbG92KSAvIChoaXYgLSBsb3YpOwotCQkJCWlmIChsbyA8PSBtaSAmJiBtaSA8IGhpKQotCQkJCQlicmVhazsKLQkJCQlkaWUoIm9vcHMiKTsKLQkJCX0KLQkJfQotCQlpZiAoMTggPD0gb2ZzKQotCQkJZGllKCJjYW5ub3QgaGFwcGVuIC0tIGxvIGFuZCBoaSBhcmUgaWRlbnRpY2FsIik7Ci0JfQotCi0JZG8gewotCQlpbnQgY21wOwotCQljbXAgPSBoYXNoY21wKHRhYmxlW21pXS0+cGF0Y2hfaWQsIGlkKTsKLQkJaWYgKCFjbXApCi0JCQlyZXR1cm4gbWk7Ci0JCWlmIChjbXAgPiAwKQotCQkJaGkgPSBtaTsKLQkJZWxzZQotCQkJbG8gPSBtaSArIDE7Ci0JCW1pID0gKGhpICsgbG8pIC8gMjsKLQl9IHdoaWxlIChsbyA8IGhpKTsKLQlyZXR1cm4gLWxvLTE7CisJcmV0dXJuIHNoYTFfcG9zKGlkLCB0YWJsZSwgbnIsIHBhdGNoX2lkX2FjY2Vzcyk7CiB9CiAKICNkZWZpbmUgQlVDS0VUX1NJWkUgMTkwIC8qIDE5MCAqIDIxID0gMzk5MCwgd2l0aCBzbG9wIGNsb3NlIGVub3VnaCB0byA0SyAqLwpkaWZmIC0tZ2l0IGEvcGF0aC5jIGIvcGF0aC5jCmluZGV4IDRiOTEwN2YuLjA0N2ZkYjAgMTAwNjQ0Ci0tLSBhL3BhdGguYworKysgYi9wYXRoLmMKQEAgLTEzOSw2ICsxMzksMjIgQEAKIAlyZXR1cm4gbWtzdGVtcChwYXRoKTsKIH0KIAorLyogZ2l0X21rc3RlbXBzKCkgLSBjcmVhdGUgdG1wIGZpbGUgd2l0aCBzdWZmaXggaG9ub3JpbmcgVE1QRElSIHZhcmlhYmxlLiAqLworaW50IGdpdF9ta3N0ZW1wcyhjaGFyICpwYXRoLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyICp0ZW1wbGF0ZSwgaW50IHN1ZmZpeF9sZW4pCit7CisJY29uc3QgY2hhciAqdG1wOworCXNpemVfdCBuOworCisJdG1wID0gZ2V0ZW52KCJUTVBESVIiKTsKKwlpZiAoIXRtcCkKKwkJdG1wID0gIi90bXAiOworCW4gPSBzbnByaW50ZihwYXRoLCBsZW4sICIlcy8lcyIsIHRtcCwgdGVtcGxhdGUpOworCWlmIChsZW4gPD0gbikgeworCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gbWtzdGVtcHMocGF0aCwgc3VmZml4X2xlbik7Cit9CiAKIGludCB2YWxpZGF0ZV9oZWFkcmVmKGNvbnN0IGNoYXIgKnBhdGgpCiB7CkBAIC0zMTEsMzYgKzMyNyw0OSBAQAogCXJldHVybiBOVUxMOwogfQogCi1pbnQgYWRqdXN0X3NoYXJlZF9wZXJtKGNvbnN0IGNoYXIgKnBhdGgpCitpbnQgc2V0X3NoYXJlZF9wZXJtKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlKQogewogCXN0cnVjdCBzdGF0IHN0OwotCWludCBtb2RlOworCWludCB0d2Vhaywgc2hhcmVkLCBvcmlnX21vZGU7CiAKLQlpZiAoIXNoYXJlZF9yZXBvc2l0b3J5KQorCWlmICghc2hhcmVkX3JlcG9zaXRvcnkpIHsKKwkJaWYgKG1vZGUpCisJCQlyZXR1cm4gY2htb2QocGF0aCwgbW9kZSAmIH5TX0lGTVQpOwogCQlyZXR1cm4gMDsKLQlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApCi0JCXJldHVybiAtMTsKLQltb2RlID0gc3Quc3RfbW9kZTsKLQotCWlmIChzaGFyZWRfcmVwb3NpdG9yeSkgewotCQlpbnQgdHdlYWsgPSBzaGFyZWRfcmVwb3NpdG9yeTsKLQkJaWYgKCEobW9kZSAmIFNfSVdVU1IpKQotCQkJdHdlYWsgJj0gfjAyMjI7Ci0JCW1vZGUgfD0gdHdlYWs7Ci0JfSBlbHNlIHsKLQkJLyogUHJlc2VydmUgb2xkIFBFUk1fVU1BU0sgYmVoYXZpb3VyICovCi0JCWlmIChtb2RlICYgU19JV1VTUikKLQkJCW1vZGUgfD0gU19JV0dSUDsKIAl9CisJaWYgKCFtb2RlKSB7CisJCWlmIChsc3RhdChwYXRoLCAmc3QpIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJbW9kZSA9IHN0LnN0X21vZGU7CisJCW9yaWdfbW9kZSA9IG1vZGU7CisJfSBlbHNlCisJCW9yaWdfbW9kZSA9IDA7CisJaWYgKHNoYXJlZF9yZXBvc2l0b3J5IDwgMCkKKwkJc2hhcmVkID0gLXNoYXJlZF9yZXBvc2l0b3J5OworCWVsc2UKKwkJc2hhcmVkID0gc2hhcmVkX3JlcG9zaXRvcnk7CisJdHdlYWsgPSBzaGFyZWQ7CisKKwlpZiAoIShtb2RlICYgU19JV1VTUikpCisJCXR3ZWFrICY9IH4wMjIyOworCWlmIChtb2RlICYgU19JWFVTUikKKwkJLyogQ29weSByZWFkIGJpdHMgdG8gZXhlY3V0ZSBiaXRzICovCisJCXR3ZWFrIHw9ICh0d2VhayAmIDA0NDQpID4+IDI7CisJaWYgKHNoYXJlZF9yZXBvc2l0b3J5IDwgMCkKKwkJbW9kZSA9IChtb2RlICYgfjA3NzcpIHwgdHdlYWs7CisJZWxzZQorCQltb2RlIHw9IHR3ZWFrOwogCiAJaWYgKFNfSVNESVIobW9kZSkpIHsKLQkJbW9kZSB8PSBGT1JDRV9ESVJfU0VUX0dJRDsKLQogCQkvKiBDb3B5IHJlYWQgYml0cyB0byBleGVjdXRlIGJpdHMgKi8KLQkJbW9kZSB8PSAoc2hhcmVkX3JlcG9zaXRvcnkgJiAwNDQ0KSA+PiAyOworCQltb2RlIHw9IChzaGFyZWQgJiAwNDQ0KSA+PiAyOworCQltb2RlIHw9IEZPUkNFX0RJUl9TRVRfR0lEOwogCX0KIAotCWlmICgobW9kZSAmIHN0LnN0X21vZGUpICE9IG1vZGUgJiYgY2htb2QocGF0aCwgbW9kZSkgPCAwKQorCWlmICgoKHNoYXJlZF9yZXBvc2l0b3J5IDwgMAorCSAgICAgID8gKG9yaWdfbW9kZSAmIChGT1JDRV9ESVJfU0VUX0dJRCB8IDA3NzcpKQorCSAgICAgIDogKG9yaWdfbW9kZSAmIG1vZGUpKSAhPSBtb2RlKSAmJgorCSAgICBjaG1vZChwYXRoLCAobW9kZSAmIH5TX0lGTVQpKSA8IDApCiAJCXJldHVybiAtMjsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ5OSwzICs1MjgsMzkgQEAKIAogCXJldHVybiBtYXhfbGVuOwogfQorCisvKiBzdHJpcCBhcmJpdHJhcnkgYW1vdW50IG9mIGRpcmVjdG9yeSBzZXBhcmF0b3JzIGF0IGVuZCBvZiBwYXRoICovCitzdGF0aWMgaW5saW5lIGludCBjaG9tcF90cmFpbGluZ19kaXJfc2VwKGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCit7CisJd2hpbGUgKGxlbiAmJiBpc19kaXJfc2VwKHBhdGhbbGVuIC0gMV0pKQorCQlsZW4tLTsKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogSWYgcGF0aCBlbmRzIHdpdGggc3VmZml4IChjb21wbGV0ZSBwYXRoIGNvbXBvbmVudHMpLCByZXR1cm5zIHRoZQorICogcGFydCBiZWZvcmUgc3VmZml4IChzYW5zIHRyYWlsaW5nIGRpcmVjdG9yeSBzZXBhcmF0b3JzKS4KKyAqIE90aGVyd2lzZSByZXR1cm5zIE5VTEwuCisgKi8KK2NoYXIgKnN0cmlwX3BhdGhfc3VmZml4KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK3sKKwlpbnQgcGF0aF9sZW4gPSBzdHJsZW4ocGF0aCksIHN1ZmZpeF9sZW4gPSBzdHJsZW4oc3VmZml4KTsKKworCXdoaWxlIChzdWZmaXhfbGVuKSB7CisJCWlmICghcGF0aF9sZW4pCisJCQlyZXR1cm4gTlVMTDsKKworCQlpZiAoaXNfZGlyX3NlcChwYXRoW3BhdGhfbGVuIC0gMV0pKSB7CisJCQlpZiAoIWlzX2Rpcl9zZXAoc3VmZml4W3N1ZmZpeF9sZW4gLSAxXSkpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlwYXRoX2xlbiA9IGNob21wX3RyYWlsaW5nX2Rpcl9zZXAocGF0aCwgcGF0aF9sZW4pOworCQkJc3VmZml4X2xlbiA9IGNob21wX3RyYWlsaW5nX2Rpcl9zZXAoc3VmZml4LCBzdWZmaXhfbGVuKTsKKwkJfQorCQllbHNlIGlmIChwYXRoWy0tcGF0aF9sZW5dICE9IHN1ZmZpeFstLXN1ZmZpeF9sZW5dKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKHBhdGhfbGVuICYmICFpc19kaXJfc2VwKHBhdGhbcGF0aF9sZW4gLSAxXSkpCisJCXJldHVybiBOVUxMOworCXJldHVybiB4c3RybmR1cChwYXRoLCBjaG9tcF90cmFpbGluZ19kaXJfc2VwKHBhdGgsIHBhdGhfbGVuKSk7Cit9CmRpZmYgLS1naXQgYS9wZXJsL0dpdC5wbSBiL3BlcmwvR2l0LnBtCmluZGV4IDdkN2YyYjEuLmU4ZGY1NWQgMTAwNjQ0Ci0tLSBhL3BlcmwvR2l0LnBtCisrKyBiL3BlcmwvR2l0LnBtCkBAIC01Niw3ICs1Niw3IEBACiBARVhQT1JUX09LID0gcXcoY29tbWFuZCBjb21tYW5kX29uZWxpbmUgY29tbWFuZF9ub2lzeQogICAgICAgICAgICAgICAgIGNvbW1hbmRfb3V0cHV0X3BpcGUgY29tbWFuZF9pbnB1dF9waXBlIGNvbW1hbmRfY2xvc2VfcGlwZQogICAgICAgICAgICAgICAgIGNvbW1hbmRfYmlkaV9waXBlIGNvbW1hbmRfY2xvc2VfYmlkaV9waXBlCi0gICAgICAgICAgICAgICAgdmVyc2lvbiBleGVjX3BhdGggaGFzaF9vYmplY3QgZ2l0X2NtZF90cnkKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIGV4ZWNfcGF0aCBodG1sX3BhdGggaGFzaF9vYmplY3QgZ2l0X2NtZF90cnkKICAgICAgICAgICAgICAgICByZW1vdGVfcmVmcwogICAgICAgICAgICAgICAgIHRlbXBfYWNxdWlyZSB0ZW1wX3JlbGVhc2UgdGVtcF9yZXNldCB0ZW1wX3BhdGgpOwogCkBAIC0xODUsNyArMTg1LDcgQEAKIAogCQlpZiAoJGRpcikgewogCQkJJGRpciA9fiBtI14vIyBvciAkZGlyID0gJG9wdHN7RGlyZWN0b3J5fSAuICcvJyAuICRkaXI7Ci0JCQkkb3B0c3tSZXBvc2l0b3J5fSA9ICRkaXI7CisJCQkkb3B0c3tSZXBvc2l0b3J5fSA9IGFic19wYXRoKCRkaXIpOwogCiAJCQkjIElmIC0tZ2l0LWRpciB3ZW50IG9rLCB0aGlzIHNob3VsZG4ndCBkaWUgZWl0aGVyLgogCQkJbXkgJHByZWZpeCA9ICRzZWFyY2gtPmNvbW1hbmRfb25lbGluZSgncmV2LXBhcnNlJywgJy0tc2hvdy1wcmVmaXgnKTsKQEAgLTQ5Miw2ICs0OTIsMTYgQEAKIHN1YiBleGVjX3BhdGggeyBjb21tYW5kX29uZWxpbmUoJy0tZXhlYy1wYXRoJykgfQogCiAKKz1pdGVtIGh0bWxfcGF0aCAoKQorCitSZXR1cm4gcGF0aCB0byB0aGUgR2l0IGh0bWwgZG9jdW1lbnRhdGlvbiAodGhlIHNhbWUgYXMKK0M8Z2l0IC0taHRtbC1wYXRoPikuIFVzZWZ1bCBtb3N0bHkgb25seSBpbnRlcm5hbGx5LgorCis9Y3V0CisKK3N1YiBodG1sX3BhdGggeyBjb21tYW5kX29uZWxpbmUoJy0taHRtbC1wYXRoJykgfQorCisKID1pdGVtIHJlcG9fcGF0aCAoKQogCiBSZXR1cm4gcGF0aCB0byB0aGUgZ2l0IHJlcG9zaXRvcnkuIE11c3QgYmUgY2FsbGVkIG9uIGEgcmVwb3NpdG9yeSBpbnN0YW5jZS4KQEAgLTEyNzAsNiArMTI4MCw4IEBACiAJbXkgKCRzZWxmLCBAYXJncykgPSBAXzsKIAlpZiAoJHNlbGYpIHsKIAkJJHNlbGYtPnJlcG9fcGF0aCgpIGFuZCAkRU5WeydHSVRfRElSJ30gPSAkc2VsZi0+cmVwb19wYXRoKCk7CisJCSRzZWxmLT5yZXBvX3BhdGgoKSBhbmQgJHNlbGYtPndjX3BhdGgoKQorCQkJYW5kICRFTlZ7J0dJVF9XT1JLX1RSRUUnfSA9ICRzZWxmLT53Y19wYXRoKCk7CiAJCSRzZWxmLT53Y19wYXRoKCkgYW5kIGNoZGlyKCRzZWxmLT53Y19wYXRoKCkpOwogCQkkc2VsZi0+d2Nfc3ViZGlyKCkgYW5kIGNoZGlyKCRzZWxmLT53Y19zdWJkaXIoKSk7CiAJfQpkaWZmIC0tZ2l0IGEvcGt0LWxpbmUuYyBiL3BrdC1saW5lLmMKaW5kZXggZjVkMDA4Ni4uYjY5MWFiZSAxMDA2NDQKLS0tIGEvcGt0LWxpbmUuYworKysgYi9wa3QtbGluZS5jCkBAIC0yOCw3ICsyOCw3IEBACiAJCX0KIAkJaWYgKCFyZXQpCiAJCQlkaWUoIndyaXRlIGVycm9yIChkaXNrIGZ1bGw/KSIpOwotCQlkaWUoIndyaXRlIGVycm9yICglcykiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIndyaXRlIGVycm9yIik7CiAJfQogCXJldHVybiBubjsKIH0KQEAgLTY3LDcgKzY3LDcgQEAKIHsKIAlzc2l6ZV90IHJldCA9IHJlYWRfaW5fZnVsbChmZCwgYnVmZmVyLCBzaXplKTsKIAlpZiAocmV0IDwgMCkKLQkJZGllKCJyZWFkIGVycm9yICglcykiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oInJlYWQgZXJyb3IiKTsKIAllbHNlIGlmIChyZXQgPCBzaXplKQogCQlkaWUoIlRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5Iik7CiB9CmRpZmYgLS1naXQgYS9wcmVsb2FkLWluZGV4LmMgYi9wcmVsb2FkLWluZGV4LmMKaW5kZXggODhlZGM1Zi4uOTI4OTkzMyAxMDA2NDQKLS0tIGEvcHJlbG9hZC1pbmRleC5jCisrKyBiL3ByZWxvYWQtaW5kZXguYwpAQCAtMzQsNyArMzQsOSBAQAogCXN0cnVjdCB0aHJlYWRfZGF0YSAqcCA9IF9kYXRhOwogCXN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXggPSBwLT5pbmRleDsKIAlzdHJ1Y3QgY2FjaGVfZW50cnkgKipjZXAgPSBpbmRleC0+Y2FjaGUgKyBwLT5vZmZzZXQ7CisJc3RydWN0IGNhY2hlX2RlZiBjYWNoZTsKIAorCW1lbXNldCgmY2FjaGUsIDAsIHNpemVvZihjYWNoZSkpOwogCW5yID0gcC0+bnI7CiAJaWYgKG5yICsgcC0+b2Zmc2V0ID4gaW5kZXgtPmNhY2hlX25yKQogCQluciA9IGluZGV4LT5jYWNoZV9uciAtIHAtPm9mZnNldDsKQEAgLTQ5LDYgKzUxLDggQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoIWNlX3BhdGhfbWF0Y2goY2UsIHAtPnBhdGhzcGVjKSkKIAkJCWNvbnRpbnVlOworCQlpZiAodGhyZWFkZWRfaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKCZjYWNoZSwgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAobHN0YXQoY2UtPm5hbWUsICZzdCkpCiAJCQljb250aW51ZTsKIAkJaWYgKGllX21hdGNoX3N0YXQoaW5kZXgsIGNlLCAmc3QsIENFX01BVENIX1JBQ1lfSVNfRElSVFkpKQpAQCAtNzIsNyArNzYsNyBAQAogCWlmICh0aHJlYWRzID4gTUFYX1BBUkFMTEVMKQogCQl0aHJlYWRzID0gTUFYX1BBUkFMTEVMOwogCW9mZnNldCA9IDA7Ci0Jd29yayA9IChpbmRleC0+Y2FjaGVfbnIgKyB0aHJlYWRzIC0gMSkgLyB0aHJlYWRzOworCXdvcmsgPSBESVZfUk9VTkRfVVAoaW5kZXgtPmNhY2hlX25yLCB0aHJlYWRzKTsKIAlmb3IgKGkgPSAwOyBpIDwgdGhyZWFkczsgaSsrKSB7CiAJCXN0cnVjdCB0aHJlYWRfZGF0YSAqcCA9IGRhdGEraTsKIAkJcC0+aW5kZXggPSBpbmRleDsKZGlmZiAtLWdpdCBhL3ByZXR0eS5jIGIvcHJldHR5LmMKaW5kZXggNDIxZDljNS4uZTUzMjhkYSAxMDA2NDQKLS0tIGEvcHJldHR5LmMKKysrIGIvcHJldHR5LmMKQEAgLTYsOSArNiwxOSBAQAogI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCiAjaW5jbHVkZSAibWFpbG1hcC5oIgogI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKIAogc3RhdGljIGNoYXIgKnVzZXJfZm9ybWF0OwogCitzdGF0aWMgdm9pZCBzYXZlX3VzZXJfZm9ybWF0KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBjb25zdCBjaGFyICpjcCwgaW50IGlzX3Rmb3JtYXQpCit7CisJZnJlZSh1c2VyX2Zvcm1hdCk7CisJdXNlcl9mb3JtYXQgPSB4c3RyZHVwKGNwKTsKKwlpZiAoaXNfdGZvcm1hdCkKKwkJcmV2LT51c2VfdGVybWluYXRvciA9IDE7CisJcmV2LT5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfVVNFUkZPUk1BVDsKK30KKwogdm9pZCBnZXRfY29tbWl0X2Zvcm1hdChjb25zdCBjaGFyICphcmcsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQogewogCWludCBpOwpAQCAtMzIsMTIgKzQyLDcgQEAKIAkJcmV0dXJuOwogCX0KIAlpZiAoIXByZWZpeGNtcChhcmcsICJmb3JtYXQ6IikgfHwgIXByZWZpeGNtcChhcmcsICJ0Zm9ybWF0OiIpKSB7Ci0JCWNvbnN0IGNoYXIgKmNwID0gc3RyY2hyKGFyZywgJzonKSArIDE7Ci0JCWZyZWUodXNlcl9mb3JtYXQpOwotCQl1c2VyX2Zvcm1hdCA9IHhzdHJkdXAoY3ApOwotCQlpZiAoYXJnWzBdID09ICd0JykKLQkJCXJldi0+dXNlX3Rlcm1pbmF0b3IgPSAxOwotCQlyZXYtPmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9VU0VSRk9STUFUOworCQlzYXZlX3VzZXJfZm9ybWF0KHJldiwgc3RyY2hyKGFyZywgJzonKSArIDEsIGFyZ1swXSA9PSAndCcpOwogCQlyZXR1cm47CiAJfQogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNtdF9mbXRzKTsgaSsrKSB7CkBAIC00OSw2ICs1NCwxMCBAQAogCQkJcmV0dXJuOwogCQl9CiAJfQorCWlmIChzdHJjaHIoYXJnLCAnJScpKSB7CisJCXNhdmVfdXNlcl9mb3JtYXQocmV2LCBhcmcsIDEpOworCQlyZXR1cm47CisJfQogCiAJZGllKCJpbnZhbGlkIC0tcHJldHR5IGZvcm1hdDogJXMiLCBhcmcpOwogfQpAQCAtNzQsOCArODMsNyBAQAogLyogSGlnaCBiaXQgc2V0LCBvciBJU08tMjAyMi1JTlQgKi8KIGludCBub25fYXNjaWkoaW50IGNoKQogewotCWNoID0gKGNoICYgMHhmZik7Ci0JcmV0dXJuICgoY2ggJiAweDgwKSB8fCAoY2ggPT0gMHgxYikpOworCXJldHVybiAhaXNhc2NpaShjaCkgfHwgY2ggPT0gJ1wwMzMnOwogfQogCiBzdGF0aWMgaW50IGlzX3JmYzIwNDdfc3BlY2lhbChjaGFyIGNoKQpAQCAtMTI3LDcgKzEzNSw2IEBACiAJaW50IG5hbWVsZW47CiAJdW5zaWduZWQgbG9uZyB0aW1lOwogCWludCB0ejsKLQljb25zdCBjaGFyICpmaWxsZXIgPSAiICAgICI7CiAKIAlpZiAoZm10ID09IENNSVRfRk1UX09ORUxJTkUpCiAJCXJldHVybjsKQEAgLTE0Niw3ICsxNTMsNiBAQAogCQl3aGlsZSAobGluZSA8IG5hbWVfdGFpbCAmJiBpc3NwYWNlKG5hbWVfdGFpbFstMV0pKQogCQkJbmFtZV90YWlsLS07CiAJCWRpc3BsYXlfbmFtZV9sZW5ndGggPSBuYW1lX3RhaWwgLSBsaW5lOwotCQlmaWxsZXIgPSAiIjsKIAkJc3RyYnVmX2FkZHN0cihzYiwgIkZyb206ICIpOwogCQlhZGRfcmZjMjA0NyhzYiwgbGluZSwgZGlzcGxheV9uYW1lX2xlbmd0aCwgZW5jb2RpbmcpOwogCQlzdHJidWZfYWRkKHNiLCBuYW1lX3RhaWwsIG5hbWVsZW4gLSBkaXNwbGF5X25hbWVfbGVuZ3RoKTsKQEAgLTE1NCw3ICsxNjAsNyBAQAogCX0gZWxzZSB7CiAJCXN0cmJ1Zl9hZGRmKHNiLCAiJXM6ICUuKnMlLipzXG4iLCB3aGF0LAogCQkJICAgICAgKGZtdCA9PSBDTUlUX0ZNVF9GVUxMRVIpID8gNCA6IDAsCi0JCQkgICAgICBmaWxsZXIsIG5hbWVsZW4sIGxpbmUpOworCQkJICAgICAgIiAgICAiLCBuYW1lbGVuLCBsaW5lKTsKIAl9CiAJc3dpdGNoIChmbXQpIHsKIAljYXNlIENNSVRfRk1UX01FRElVTToKQEAgLTIwOSwxNSArMjE1LDEzIEBACiAJd2hpbGUgKHBhcmVudCkgewogCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50LT5pdGVtOwogCQljb25zdCBjaGFyICpoZXggPSBOVUxMOwotCQljb25zdCBjaGFyICpkb3RzOwogCQlpZiAoYWJicmV2KQogCQkJaGV4ID0gZmluZF91bmlxdWVfYWJicmV2KHAtPm9iamVjdC5zaGExLCBhYmJyZXYpOwogCQlpZiAoIWhleCkKIAkJCWhleCA9IHNoYTFfdG9faGV4KHAtPm9iamVjdC5zaGExKTsKLQkJZG90cyA9IChhYmJyZXYgJiYgc3RybGVuKGhleCkgIT0gNDApID8gICIuLi4iIDogIiI7CiAJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKIAotCQlzdHJidWZfYWRkZihzYiwgIiAlcyVzIiwgaGV4LCBkb3RzKTsKKwkJc3RyYnVmX2FkZGYoc2IsICIgJXMiLCBoZXgpOwogCX0KIAlzdHJidWZfYWRkY2goc2IsICdcbicpOwogfQpAQCAtMjgwLDcgKzI4NCw3IEBACiBzdGF0aWMgY2hhciAqbG9nbXNnX3JlZW5jb2RlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKIAkJCSAgICAgY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nKQogewotCXN0YXRpYyBjb25zdCBjaGFyICp1dGY4ID0gInV0Zi04IjsKKwlzdGF0aWMgY29uc3QgY2hhciAqdXRmOCA9ICJVVEYtOCI7CiAJY29uc3QgY2hhciAqdXNlX2VuY29kaW5nOwogCWNoYXIgKmVuY29kaW5nOwogCWNoYXIgKm91dDsKQEAgLTMwNCwyMyArMzA4LDE0IEBACiAJcmV0dXJuIG91dDsKIH0KIAotc3RhdGljIGludCBtYWlsbWFwX25hbWUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmVtYWlsKQorc3RhdGljIGludCBtYWlsbWFwX25hbWUoY2hhciAqZW1haWwsIGludCBlbWFpbF9sZW4sIGNoYXIgKm5hbWUsIGludCBuYW1lX2xlbikKIHsKIAlzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0ICptYWlsX21hcDsKLQljaGFyIGJ1ZmZlclsxMDI0XTsKLQogCWlmICghbWFpbF9tYXApIHsKIAkJbWFpbF9tYXAgPSB4Y2FsbG9jKDEsIHNpemVvZigqbWFpbF9tYXApKTsKLQkJcmVhZF9tYWlsbWFwKG1haWxfbWFwLCAiLm1haWxtYXAiLCBOVUxMKTsKKwkJcmVhZF9tYWlsbWFwKG1haWxfbWFwLCBOVUxMKTsKIAl9Ci0KLQlpZiAoIW1haWxfbWFwLT5ucikKLQkJcmV0dXJuIC0xOwotCi0JaWYgKCFtYXBfZW1haWwobWFpbF9tYXAsIGVtYWlsLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSkKLQkJcmV0dXJuIC0xOwotCXN0cmJ1Zl9hZGRzdHIoc2IsIGJ1ZmZlcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIG1haWxfbWFwLT5uciAmJiBtYXBfdXNlcihtYWlsX21hcCwgZW1haWwsIGVtYWlsX2xlbiwgbmFtZSwgbmFtZV9sZW4pOwogfQogCiBzdGF0aWMgc2l6ZV90IGZvcm1hdF9wZXJzb25fcGFydChzdHJ1Y3Qgc3RyYnVmICpzYiwgY2hhciBwYXJ0LApAQCAtMzMxLDYgKzMyNiw5IEBACiAJaW50IHN0YXJ0LCBlbmQsIHR6ID0gMDsKIAl1bnNpZ25lZCBsb25nIGRhdGUgPSAwOwogCWNoYXIgKmVwOworCWNvbnN0IGNoYXIgKm5hbWVfc3RhcnQsICpuYW1lX2VuZCwgKm1haWxfc3RhcnQsICptYWlsX2VuZCwgKm1zZ19lbmQgPSBtc2crbGVuOworCWNoYXIgcGVyc29uX25hbWVbMTAyNF07CisJY2hhciBwZXJzb25fbWFpbFsxMDI0XTsKIAogCS8qIGFkdmFuY2UgJ2VuZCcgdG8gcG9pbnQgdG8gZW1haWwgc3RhcnQgZGVsaW1pdGVyICovCiAJZm9yIChlbmQgPSAwOyBlbmQgPCBsZW4gJiYgbXNnW2VuZF0gIT0gJzwnOyBlbmQrKykKQEAgLTM0NCwyNSArMzQyLDM0IEBACiAJaWYgKGVuZCA+PSBsZW4gLSAyKQogCQlnb3RvIHNraXA7CiAKKwkvKiBTZWVrIGZvciBib3RoIG5hbWUgYW5kIGVtYWlsIHBhcnQgKi8KKwluYW1lX3N0YXJ0ID0gbXNnOworCW5hbWVfZW5kID0gbXNnK2VuZDsKKwl3aGlsZSAobmFtZV9lbmQgPiBuYW1lX3N0YXJ0ICYmIGlzc3BhY2UoKihuYW1lX2VuZC0xKSkpCisJCW5hbWVfZW5kLS07CisJbWFpbF9zdGFydCA9IG1zZytlbmQrMTsKKwltYWlsX2VuZCA9IG1haWxfc3RhcnQ7CisJd2hpbGUgKG1haWxfZW5kIDwgbXNnX2VuZCAmJiAqbWFpbF9lbmQgIT0gJz4nKQorCQltYWlsX2VuZCsrOworCWlmIChtYWlsX2VuZCA9PSBtc2dfZW5kKQorCQlnb3RvIHNraXA7CisJZW5kID0gbWFpbF9lbmQtbXNnOworCisJaWYgKHBhcnQgPT0gJ04nIHx8IHBhcnQgPT0gJ0UnKSB7IC8qIG1haWxtYXAgbG9va3VwICovCisJCXN0cmxjcHkocGVyc29uX25hbWUsIG5hbWVfc3RhcnQsIG5hbWVfZW5kLW5hbWVfc3RhcnQrMSk7CisJCXN0cmxjcHkocGVyc29uX21haWwsIG1haWxfc3RhcnQsIG1haWxfZW5kLW1haWxfc3RhcnQrMSk7CisJCW1haWxtYXBfbmFtZShwZXJzb25fbWFpbCwgc2l6ZW9mKHBlcnNvbl9tYWlsKSwgcGVyc29uX25hbWUsIHNpemVvZihwZXJzb25fbmFtZSkpOworCQluYW1lX3N0YXJ0ID0gcGVyc29uX25hbWU7CisJCW5hbWVfZW5kID0gbmFtZV9zdGFydCArIHN0cmxlbihwZXJzb25fbmFtZSk7CisJCW1haWxfc3RhcnQgPSBwZXJzb25fbWFpbDsKKwkJbWFpbF9lbmQgPSBtYWlsX3N0YXJ0ICsgIHN0cmxlbihwZXJzb25fbWFpbCk7CisJfQogCWlmIChwYXJ0ID09ICduJyB8fCBwYXJ0ID09ICdOJykgewkvKiBuYW1lICovCi0JCXdoaWxlIChlbmQgPiAwICYmIGlzc3BhY2UobXNnW2VuZCAtIDFdKSkKLQkJCWVuZC0tOwotCQlpZiAocGFydCAhPSAnTicgfHwgIW1zZ1tlbmRdIHx8ICFtc2dbZW5kICsgMV0gfHwKLQkJICAgIG1haWxtYXBfbmFtZShzYiwgbXNnICsgZW5kICsgMikgPCAwKQotCQkJc3RyYnVmX2FkZChzYiwgbXNnLCBlbmQpOworCQlzdHJidWZfYWRkKHNiLCBuYW1lX3N0YXJ0LCBuYW1lX2VuZC1uYW1lX3N0YXJ0KTsKIAkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKIAl9Ci0Jc3RhcnQgPSArK2VuZDsgLyogc2F2ZSBlbWFpbCBzdGFydCBwb3NpdGlvbiAqLwotCi0JLyogYWR2YW5jZSAnZW5kJyB0byBwb2ludCB0byBlbWFpbCBlbmQgZGVsaW1pdGVyICovCi0JZm9yICggOyBlbmQgPCBsZW4gJiYgbXNnW2VuZF0gIT0gJz4nOyBlbmQrKykKLQkJOyAvKiBkbyBub3RoaW5nICovCi0KLQlpZiAoZW5kID49IGxlbikKLQkJZ290byBza2lwOwotCi0JaWYgKHBhcnQgPT0gJ2UnKSB7CS8qIGVtYWlsICovCi0JCXN0cmJ1Zl9hZGQoc2IsIG1zZyArIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisJaWYgKHBhcnQgPT0gJ2UnIHx8IHBhcnQgPT0gJ0UnKSB7CS8qIGVtYWlsICovCisJCXN0cmJ1Zl9hZGQoc2IsIG1haWxfc3RhcnQsIG1haWxfZW5kLW1haWxfc3RhcnQpOwogCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOwogCX0KIApAQCAtNDg2LDYgKzQ5Myw0MCBAQAogCWNvbnRleHQtPmNvbW1pdF9oZWFkZXJfcGFyc2VkID0gMTsKIH0KIAorc3RhdGljIGludCBpc3RpdGxlY2hhcihjaGFyIGMpCit7CisJcmV0dXJuIChjID49ICdhJyAmJiBjIDw9ICd6JykgfHwgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fAorCQkoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8IGMgPT0gJy4nIHx8IGMgPT0gJ18nOworfQorCitzdGF0aWMgdm9pZCBmb3JtYXRfc2FuaXRpemVkX3N1YmplY3Qoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlzaXplX3QgdHJpbWxlbjsKKwlzaXplX3Qgc3RhcnRfbGVuID0gc2ItPmxlbjsKKwlpbnQgc3BhY2UgPSAyOworCisJZm9yICg7ICptc2cgJiYgKm1zZyAhPSAnXG4nOyBtc2crKykgeworCQlpZiAoaXN0aXRsZWNoYXIoKm1zZykpIHsKKwkJCWlmIChzcGFjZSA9PSAxKQorCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJy0nKTsKKwkJCXNwYWNlID0gMDsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgKm1zZyk7CisJCQlpZiAoKm1zZyA9PSAnLicpCisJCQkJd2hpbGUgKCoobXNnKzEpID09ICcuJykKKwkJCQkJbXNnKys7CisJCX0gZWxzZQorCQkJc3BhY2UgfD0gMTsKKwl9CisKKwkvKiB0cmltIGFueSB0cmFpbGluZyAnLicgb3IgJy0nIGNoYXJhY3RlcnMgKi8KKwl0cmltbGVuID0gMDsKKwl3aGlsZSAoc2ItPmxlbiAtIHRyaW1sZW4gPiBzdGFydF9sZW4gJiYKKwkJKHNiLT5idWZbc2ItPmxlbiAtIDEgLSB0cmltbGVuXSA9PSAnLicKKwkJfHwgc2ItPmJ1ZltzYi0+bGVuIC0gMSAtIHRyaW1sZW5dID09ICctJykpCisJCXRyaW1sZW4rKzsKKwlzdHJidWZfcmVtb3ZlKHNiLCBzYi0+bGVuIC0gdHJpbWxlbiwgdHJpbWxlbik7Cit9CisKIGNvbnN0IGNoYXIgKmZvcm1hdF9zdWJqZWN0KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICptc2csCiAJCQkgICBjb25zdCBjaGFyICpsaW5lX3NlcGFyYXRvcikKIHsKQEAgLTU1NCwxNyArNTk1LDI4IEBACiAJLyogdGhlc2UgYXJlIGluZGVwZW5kZW50IG9mIHRoZSBjb21taXQgKi8KIAlzd2l0Y2ggKHBsYWNlaG9sZGVyWzBdKSB7CiAJY2FzZSAnQyc6CisJCWlmIChwbGFjZWhvbGRlclsxXSA9PSAnKCcpIHsKKwkJCWNvbnN0IGNoYXIgKmVuZCA9IHN0cmNocihwbGFjZWhvbGRlciArIDIsICcpJyk7CisJCQljaGFyIGNvbG9yW0NPTE9SX01BWExFTl07CisJCQlpZiAoIWVuZCkKKwkJCQlyZXR1cm4gMDsKKwkJCWNvbG9yX3BhcnNlX21lbShwbGFjZWhvbGRlciArIDIsCisJCQkJCWVuZCAtIChwbGFjZWhvbGRlciArIDIpLAorCQkJCQkiLS1wcmV0dHkgZm9ybWF0IiwgY29sb3IpOworCQkJc3RyYnVmX2FkZHN0cihzYiwgY29sb3IpOworCQkJcmV0dXJuIGVuZCAtIHBsYWNlaG9sZGVyICsgMTsKKwkJfQogCQlpZiAoIXByZWZpeGNtcChwbGFjZWhvbGRlciArIDEsICJyZWQiKSkgewotCQkJc3RyYnVmX2FkZHN0cihzYiwgIlwwMzNbMzFtIik7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBHSVRfQ09MT1JfUkVEKTsKIAkJCXJldHVybiA0OwogCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAocGxhY2Vob2xkZXIgKyAxLCAiZ3JlZW4iKSkgewotCQkJc3RyYnVmX2FkZHN0cihzYiwgIlwwMzNbMzJtIik7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBHSVRfQ09MT1JfR1JFRU4pOwogCQkJcmV0dXJuIDY7CiAJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChwbGFjZWhvbGRlciArIDEsICJibHVlIikpIHsKLQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcMDMzWzM0bSIpOworCQkJc3RyYnVmX2FkZHN0cihzYiwgR0lUX0NPTE9SX0JMVUUpOwogCQkJcmV0dXJuIDU7CiAJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChwbGFjZWhvbGRlciArIDEsICJyZXNldCIpKSB7Ci0JCQlzdHJidWZfYWRkc3RyKHNiLCAiXDAzM1ttIik7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBHSVRfQ09MT1JfUkVTRVQpOwogCQkJcmV0dXJuIDY7CiAJCX0gZWxzZQogCQkJcmV0dXJuIDA7CkBAIC02NjUsNiArNzE3LDkgQEAKIAljYXNlICdzJzoJLyogc3ViamVjdCAqLwogCQlmb3JtYXRfc3ViamVjdChzYiwgbXNnICsgYy0+c3ViamVjdF9vZmYsICIgIik7CiAJCXJldHVybiAxOworCWNhc2UgJ2YnOgkvKiBzYW5pdGl6ZWQgc3ViamVjdCAqLworCQlmb3JtYXRfc2FuaXRpemVkX3N1YmplY3Qoc2IsIG1zZyArIGMtPnN1YmplY3Rfb2ZmKTsKKwkJcmV0dXJuIDE7CiAJY2FzZSAnYic6CS8qIGJvZHkgKi8KIAkJc3RyYnVmX2FkZHN0cihzYiwgbXNnICsgYy0+Ym9keV9vZmYpOwogCQlyZXR1cm4gMTsKQEAgLTgyNiw3ICs4ODEsNyBAQAogCQkgICAgPyBnaXRfbG9nX291dHB1dF9lbmNvZGluZwogCQkgICAgOiBnaXRfY29tbWl0X2VuY29kaW5nKTsKIAlpZiAoIWVuY29kaW5nKQotCQllbmNvZGluZyA9ICJ1dGYtOCI7CisJCWVuY29kaW5nID0gIlVURi04IjsKIAlpZiAoZW5jb2RpbmdfcCkKIAkJKmVuY29kaW5nX3AgPSBlbmNvZGluZzsKIAlyZXR1cm4gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgZW5jb2RpbmcpOwpkaWZmIC0tZ2l0IGEvcHJvZ3Jlc3MuYyBiL3Byb2dyZXNzLmMKaW5kZXggNTVhODY4Ny4uNjIxYzM0ZSAxMDA2NDQKLS0tIGEvcHJvZ3Jlc3MuYworKysgYi9wcm9ncmVzcy5jCkBAIC0xMjEsMTMgKzEyMSwxMyBAQAogCQkJICAgICAgKGludCkodG90YWwgPj4gMzApLAogCQkJICAgICAgKGludCkodG90YWwgJiAoKDEgPDwgMzApIC0gMSkpIC8gMTA3Mzc0MTkpOwogCX0gZWxzZSBpZiAodG90YWwgPiAxIDw8IDIwKSB7CisJCWludCB4ID0gdG90YWwgKyA1MjQzOyAgLyogZm9yIHJvdW5kaW5nICovCiAJCWwgLT0gc25wcmludGYodHAtPmRpc3BsYXksIGwsICIsICV1LiUyLjJ1IE1pQiIsCi0JCQkgICAgICAoaW50KSh0b3RhbCA+PiAyMCksCi0JCQkgICAgICAoKGludCkodG90YWwgJiAoKDEgPDwgMjApIC0gMSkpICogMTAwKSA+PiAyMCk7CisJCQkgICAgICB4ID4+IDIwLCAoKHggJiAoKDEgPDwgMjApIC0gMSkpICogMTAwKSA+PiAyMCk7CiAJfSBlbHNlIGlmICh0b3RhbCA+IDEgPDwgMTApIHsKKwkJaW50IHggPSB0b3RhbCArIDU7ICAvKiBmb3Igcm91bmRpbmcgKi8KIAkJbCAtPSBzbnByaW50Zih0cC0+ZGlzcGxheSwgbCwgIiwgJXUuJTIuMnUgS2lCIiwKLQkJCSAgICAgIChpbnQpKHRvdGFsID4+IDEwKSwKLQkJCSAgICAgICgoaW50KSh0b3RhbCAmICgoMSA8PCAxMCkgLSAxKSkgKiAxMDApID4+IDEwKTsKKwkJCSAgICAgIHggPj4gMTAsICgoeCAmICgoMSA8PCAxMCkgLSAxKSkgKiAxMDApID4+IDEwKTsKIAl9IGVsc2UgewogCQlsIC09IHNucHJpbnRmKHRwLT5kaXNwbGF5LCBsLCAiLCAldSBieXRlcyIsIChpbnQpdG90YWwpOwogCX0KZGlmZiAtLWdpdCBhL3F1b3RlLmMgYi9xdW90ZS5jCmluZGV4IDZhNTIwODUuLjg0OGQxNzQgMTAwNjQ0Ci0tLSBhL3F1b3RlLmMKKysrIGIvcXVvdGUuYwpAQCAtNzIsNyArNzIsNyBAQAogCX0KIH0KIAotY2hhciAqc3FfZGVxdW90ZShjaGFyICphcmcpCitjaGFyICpzcV9kZXF1b3RlX3N0ZXAoY2hhciAqYXJnLCBjaGFyICoqbmV4dCkKIHsKIAljaGFyICpkc3QgPSBhcmc7CiAJY2hhciAqc3JjID0gYXJnOwpAQCAtOTIsNiArOTIsOCBAQAogCQlzd2l0Y2ggKCorK3NyYykgewogCQljYXNlICdcMCc6CiAJCQkqZHN0ID0gMDsKKwkJCWlmIChuZXh0KQorCQkJCSpuZXh0ID0gTlVMTDsKIAkJCXJldHVybiBhcmc7CiAJCWNhc2UgJ1xcJzoKIAkJCWMgPSAqKytzcmM7CkBAIC0xMDEsMTEgKzEwMyw0MCBAQAogCQkJfQogCQkvKiBGYWxsdGhyb3VnaCAqLwogCQlkZWZhdWx0OgotCQkJcmV0dXJuIE5VTEw7CisJCQlpZiAoIW5leHQgfHwgIWlzc3BhY2UoKnNyYykpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlkbyB7CisJCQkJYyA9ICorK3NyYzsKKwkJCX0gd2hpbGUgKGlzc3BhY2UoYykpOworCQkJKmRzdCA9IDA7CisJCQkqbmV4dCA9IHNyYzsKKwkJCXJldHVybiBhcmc7CiAJCX0KIAl9CiB9CiAKK2NoYXIgKnNxX2RlcXVvdGUoY2hhciAqYXJnKQoreworCXJldHVybiBzcV9kZXF1b3RlX3N0ZXAoYXJnLCBOVUxMKTsKK30KKworaW50IHNxX2RlcXVvdGVfdG9fYXJndihjaGFyICphcmcsIGNvbnN0IGNoYXIgKioqYXJndiwgaW50ICpuciwgaW50ICphbGxvYykKK3sKKwljaGFyICpuZXh0ID0gYXJnOworCisJaWYgKCEqYXJnKQorCQlyZXR1cm4gMDsKKwlkbyB7CisJCWNoYXIgKmRlcXVvdGVkID0gc3FfZGVxdW90ZV9zdGVwKG5leHQsICZuZXh0KTsKKwkJaWYgKCFkZXF1b3RlZCkKKwkJCXJldHVybiAtMTsKKwkJQUxMT0NfR1JPVygqYXJndiwgKm5yICsgMSwgKmFsbG9jKTsKKwkJKCphcmd2KVsoKm5yKSsrXSA9IGRlcXVvdGVkOworCX0gd2hpbGUgKG5leHQpOworCisJcmV0dXJuIDA7Cit9CisKIC8qIDEgbWVhbnM6IHF1b3RlIGFzIG9jdGFsCiAgKiAwIG1lYW5zOiBxdW90ZSBhcyBvY3RhbCBpZiAocXVvdGVfcGF0aF9mdWxseSkKICAqIC0xIG1lYW5zOiBuZXZlciBxdW90ZQpAQCAtMjQxLDggKzI3Miw4IEBACiAJZnB1dGModGVybWluYXRvciwgZnApOwogfQogCi1leHRlcm4gdm9pZCB3cml0ZV9uYW1lX3F1b3RlZHBmeChjb25zdCBjaGFyICpwZngsIHNpemVfdCBwZnhsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCBGSUxFICpmcCwgaW50IHRlcm1pbmF0b3IpCit2b2lkIHdyaXRlX25hbWVfcXVvdGVkcGZ4KGNvbnN0IGNoYXIgKnBmeCwgc2l6ZV90IHBmeGxlbiwKKwkJCSAgY29uc3QgY2hhciAqbmFtZSwgRklMRSAqZnAsIGludCB0ZXJtaW5hdG9yKQogewogCWludCBuZWVkcXVvdGUgPSAwOwogCmRpZmYgLS1naXQgYS9xdW90ZS5oIGIvcXVvdGUuaAppbmRleCBjNWVlYTZmLi42NjczMGYyIDEwMDY0NAotLS0gYS9xdW90ZS5oCisrKyBiL3F1b3RlLmgKQEAgLTM5LDYgKzM5LDE1IEBACiAgKi8KIGV4dGVybiBjaGFyICpzcV9kZXF1b3RlKGNoYXIgKik7CiAKKy8qCisgKiBTYW1lIGFzIHRoZSBhYm92ZSwgYnV0IGNhbiBiZSB1c2VkIHRvIHVud3JhcCBtYW55IGFyZ3VtZW50cyBpbiB0aGUKKyAqIHNhbWUgc3RyaW5nIHNlcGFyYXRlZCBieSBzcGFjZS4gIm5leHQiIGlzIGNoYW5nZWQgdG8gcG9pbnQgdG8gdGhlCisgKiBuZXh0IGFyZ3VtZW50IHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBhcyBmaXJzdCBwYXJhbWV0ZXIuIFdoZW4gdGhlcmUKKyAqIGlzIG5vIG1vcmUgYXJndW1lbnQgdG8gYmUgZGVxdW90ZWQsICJuZXh0IiBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIE5VTEwuCisgKi8KK2V4dGVybiBjaGFyICpzcV9kZXF1b3RlX3N0ZXAoY2hhciAqYXJnLCBjaGFyICoqbmV4dCk7CitleHRlcm4gaW50IHNxX2RlcXVvdGVfdG9fYXJndihjaGFyICphcmcsIGNvbnN0IGNoYXIgKioqYXJndiwgaW50ICpuciwgaW50ICphbGxvYyk7CisKIGV4dGVybiBpbnQgdW5xdW90ZV9jX3N0eWxlKHN0cnVjdCBzdHJidWYgKiwgY29uc3QgY2hhciAqcXVvdGVkLCBjb25zdCBjaGFyICoqZW5kcCk7CiBleHRlcm4gc2l6ZV90IHF1b3RlX2Nfc3R5bGUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqLCBGSUxFICosIGludCBub19kcSk7CiBleHRlcm4gdm9pZCBxdW90ZV90d29fY19zdHlsZShzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvcmVhZC1jYWNoZS5jIGIvcmVhZC1jYWNoZS5jCmluZGV4IDk0MGVjNzYuLjRlM2UyNzIgMTAwNjQ0Ci0tLSBhL3JlYWQtY2FjaGUuYworKysgYi9yZWFkLWNhY2hlLmMKQEAgLTY3LDggKzY3LDEwIEBACiAgKi8KIHZvaWQgZmlsbF9zdGF0X2NhY2hlX2luZm8oc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQogewotCWNlLT5jZV9jdGltZSA9IHN0LT5zdF9jdGltZTsKLQljZS0+Y2VfbXRpbWUgPSBzdC0+c3RfbXRpbWU7CisJY2UtPmNlX2N0aW1lLnNlYyA9ICh1bnNpZ25lZCBpbnQpc3QtPnN0X2N0aW1lOworCWNlLT5jZV9tdGltZS5zZWMgPSAodW5zaWduZWQgaW50KXN0LT5zdF9tdGltZTsKKwljZS0+Y2VfY3RpbWUubnNlYyA9IFNUX0NUSU1FX05TRUMoKnN0KTsKKwljZS0+Y2VfbXRpbWUubnNlYyA9IFNUX01USU1FX05TRUMoKnN0KTsKIAljZS0+Y2VfZGV2ID0gc3QtPnN0X2RldjsKIAljZS0+Y2VfaW5vID0gc3QtPnN0X2lubzsKIAljZS0+Y2VfdWlkID0gc3QtPnN0X3VpZDsKQEAgLTE5NiwxMSArMTk4LDE4IEBACiAJZGVmYXVsdDoKIAkJZGllKCJpbnRlcm5hbCBlcnJvcjogY2VfbW9kZSBpcyAlbyIsIGNlLT5jZV9tb2RlKTsKIAl9Ci0JaWYgKGNlLT5jZV9tdGltZSAhPSAodW5zaWduZWQgaW50KSBzdC0+c3RfbXRpbWUpCisJaWYgKGNlLT5jZV9tdGltZS5zZWMgIT0gKHVuc2lnbmVkIGludClzdC0+c3RfbXRpbWUpCiAJCWNoYW5nZWQgfD0gTVRJTUVfQ0hBTkdFRDsKLQlpZiAodHJ1c3RfY3RpbWUgJiYgY2UtPmNlX2N0aW1lICE9ICh1bnNpZ25lZCBpbnQpIHN0LT5zdF9jdGltZSkKKwlpZiAodHJ1c3RfY3RpbWUgJiYgY2UtPmNlX2N0aW1lLnNlYyAhPSAodW5zaWduZWQgaW50KXN0LT5zdF9jdGltZSkKIAkJY2hhbmdlZCB8PSBDVElNRV9DSEFOR0VEOwogCisjaWZkZWYgVVNFX05TRUMKKwlpZiAoY2UtPmNlX210aW1lLm5zZWMgIT0gU1RfTVRJTUVfTlNFQygqc3QpKQorCQljaGFuZ2VkIHw9IE1USU1FX0NIQU5HRUQ7CisJaWYgKHRydXN0X2N0aW1lICYmIGNlLT5jZV9jdGltZS5uc2VjICE9IFNUX0NUSU1FX05TRUMoKnN0KSkKKwkJY2hhbmdlZCB8PSBDVElNRV9DSEFOR0VEOworI2VuZGlmCisKIAlpZiAoY2UtPmNlX3VpZCAhPSAodW5zaWduZWQgaW50KSBzdC0+c3RfdWlkIHx8CiAJICAgIGNlLT5jZV9naWQgIT0gKHVuc2lnbmVkIGludCkgc3QtPnN0X2dpZCkKIAkJY2hhbmdlZCB8PSBPV05FUl9DSEFOR0VEOwpAQCAtMjMyLDggKzI0MSwxNiBAQAogc3RhdGljIGludCBpc19yYWN5X3RpbWVzdGFtcChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKIHsKIAlyZXR1cm4gKCFTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgJiYKLQkJaXN0YXRlLT50aW1lc3RhbXAgJiYKLQkJKCh1bnNpZ25lZCBpbnQpaXN0YXRlLT50aW1lc3RhbXApIDw9IGNlLT5jZV9tdGltZSk7CisJCWlzdGF0ZS0+dGltZXN0YW1wLnNlYyAmJgorI2lmZGVmIFVTRV9OU0VDCisJCSAvKiBuYW5vc2Vjb25kIHRpbWVzdGFtcGVkIGZpbGVzIGNhbiBhbHNvIGJlIHJhY3khICovCisJCShpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPCBjZS0+Y2VfbXRpbWUuc2VjIHx8CisJCSAoaXN0YXRlLT50aW1lc3RhbXAuc2VjID09IGNlLT5jZV9tdGltZS5zZWMgJiYKKwkJICBpc3RhdGUtPnRpbWVzdGFtcC5uc2VjIDw9IGNlLT5jZV9tdGltZS5uc2VjKSkKKyNlbHNlCisJCWlzdGF0ZS0+dGltZXN0YW1wLnNlYyA8PSBjZS0+Y2VfbXRpbWUuc2VjCisjZW5kaWYKKwkJICk7CiB9CiAKIGludCBpZV9tYXRjaF9zdGF0KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLApAQCAtNDQzLDYgKzQ2MCwyNiBAQAogCXJldHVybiAxOwogfQogCisvKgorICogUmVtb3ZlIGFsbCBjYWNoZSBlbnRlbnRyaWVzIG1hcmtlZCBmb3IgcmVtb3ZhbCwgdGhhdCBpcyB3aGVyZQorICogQ0VfUkVNT1ZFIGlzIHNldCBpbiBjZV9mbGFncy4gIFRoaXMgaXMgbXVjaCBtb3JlIGVmZmVjdGl2ZSB0aGFuCisgKiBjYWxsaW5nIHJlbW92ZV9pbmRleF9lbnRyeV9hdCgpIGZvciBlYWNoIGVudHJ5IHRvIGJlIHJlbW92ZWQuCisgKi8KK3ZvaWQgcmVtb3ZlX21hcmtlZF9jYWNoZV9lbnRyaWVzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqKmNlX2FycmF5ID0gaXN0YXRlLT5jYWNoZTsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKworCWZvciAoaSA9IGogPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCWlmIChjZV9hcnJheVtpXS0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpCisJCQlyZW1vdmVfbmFtZV9oYXNoKGNlX2FycmF5W2ldKTsKKwkJZWxzZQorCQkJY2VfYXJyYXlbaisrXSA9IGNlX2FycmF5W2ldOworCX0KKwlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgPSAxOworCWlzdGF0ZS0+Y2FjaGVfbnIgPSBqOworfQorCiBpbnQgcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCkKIHsKIAlpbnQgcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBwYXRoLCBzdHJsZW4ocGF0aCkpOwpAQCAtNjAxLDcgKzYzOCw3IEBACiB7CiAJc3RydWN0IHN0YXQgc3Q7CiAJaWYgKGxzdGF0KHBhdGgsICZzdCkpCi0JCWRpZSgiJXM6IHVuYWJsZSB0byBzdGF0ICglcykiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oInVuYWJsZSB0byBzdGF0ICclcyciLCBwYXRoKTsKIAlyZXR1cm4gYWRkX3RvX2luZGV4KGlzdGF0ZSwgcGF0aCwgJnN0LCBmbGFncyk7CiB9CiAKQEAgLTExMzksOCArMTE3NiwxMCBAQAogCXNpemVfdCBsZW47CiAJY29uc3QgY2hhciAqbmFtZTsKIAotCWNlLT5jZV9jdGltZSA9IG50b2hsKG9uZGlzay0+Y3RpbWUuc2VjKTsKLQljZS0+Y2VfbXRpbWUgPSBudG9obChvbmRpc2stPm10aW1lLnNlYyk7CisJY2UtPmNlX2N0aW1lLnNlYyA9IG50b2hsKG9uZGlzay0+Y3RpbWUuc2VjKTsKKwljZS0+Y2VfbXRpbWUuc2VjID0gbnRvaGwob25kaXNrLT5tdGltZS5zZWMpOworCWNlLT5jZV9jdGltZS5uc2VjID0gbnRvaGwob25kaXNrLT5jdGltZS5uc2VjKTsKKwljZS0+Y2VfbXRpbWUubnNlYyA9IG50b2hsKG9uZGlzay0+bXRpbWUubnNlYyk7CiAJY2UtPmNlX2RldiAgID0gbnRvaGwob25kaXNrLT5kZXYpOwogCWNlLT5jZV9pbm8gICA9IG50b2hsKG9uZGlzay0+aW5vKTsKIAljZS0+Y2VfbW9kZSAgPSBudG9obChvbmRpc2stPm1vZGUpOwpAQCAtMTIwNiwxNiArMTI0NSwxNyBAQAogCQlyZXR1cm4gaXN0YXRlLT5jYWNoZV9ucjsKIAogCWVycm5vID0gRU5PRU5UOwotCWlzdGF0ZS0+dGltZXN0YW1wID0gMDsKKwlpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPSAwOworCWlzdGF0ZS0+dGltZXN0YW1wLm5zZWMgPSAwOwogCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CiAJaWYgKGZkIDwgMCkgewogCQlpZiAoZXJybm8gPT0gRU5PRU5UKQogCQkJcmV0dXJuIDA7Ci0JCWRpZSgiaW5kZXggZmlsZSBvcGVuIGZhaWxlZCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJpbmRleCBmaWxlIG9wZW4gZmFpbGVkIik7CiAJfQogCiAJaWYgKGZzdGF0KGZkLCAmc3QpKQotCQlkaWUoImNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4ICglcykiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4Iik7CiAKIAllcnJubyA9IEVJTlZBTDsKIAltbWFwX3NpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOwpAQCAtMTIyNSw3ICsxMjY1LDcgQEAKIAltbWFwID0geG1tYXAoTlVMTCwgbW1hcF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgZmQsIDApOwogCWNsb3NlKGZkKTsKIAlpZiAobW1hcCA9PSBNQVBfRkFJTEVEKQotCQlkaWUoInVuYWJsZSB0byBtYXAgaW5kZXggZmlsZSIpOworCQlkaWVfZXJybm8oInVuYWJsZSB0byBtYXAgaW5kZXggZmlsZSIpOwogCiAJaGRyID0gbW1hcDsKIAlpZiAodmVyaWZ5X2hkcihoZHIsIG1tYXBfc2l6ZSkgPCAwKQpAQCAtMTI1OCw3ICsxMjk4LDkgQEAKIAkJc3JjX29mZnNldCArPSBvbmRpc2tfY2Vfc2l6ZShjZSk7CiAJCWRzdF9vZmZzZXQgKz0gY2Vfc2l6ZShjZSk7CiAJfQotCWlzdGF0ZS0+dGltZXN0YW1wID0gc3Quc3RfbXRpbWU7CisJaXN0YXRlLT50aW1lc3RhbXAuc2VjID0gc3Quc3RfbXRpbWU7CisJaXN0YXRlLT50aW1lc3RhbXAubnNlYyA9IFNUX01USU1FX05TRUMoc3QpOworCiAJd2hpbGUgKHNyY19vZmZzZXQgPD0gbW1hcF9zaXplIC0gMjAgLSA4KSB7CiAJCS8qIEFmdGVyIGFuIGFycmF5IG9mIGFjdGl2ZV9uciBpbmRleCBlbnRyaWVzLAogCQkgKiB0aGVyZSBjYW4gYmUgYXJiaXRyYXJ5IG51bWJlciBvZiBleHRlbmRlZApAQCAtMTI4OCwxNCArMTMzMCwxNSBAQAogCiBpbnQgaXNfaW5kZXhfdW5ib3JuKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQogewotCXJldHVybiAoIWlzdGF0ZS0+Y2FjaGVfbnIgJiYgIWlzdGF0ZS0+YWxsb2MgJiYgIWlzdGF0ZS0+dGltZXN0YW1wKTsKKwlyZXR1cm4gKCFpc3RhdGUtPmNhY2hlX25yICYmICFpc3RhdGUtPmFsbG9jICYmICFpc3RhdGUtPnRpbWVzdGFtcC5zZWMpOwogfQogCiBpbnQgZGlzY2FyZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKIHsKIAlpc3RhdGUtPmNhY2hlX25yID0gMDsKIAlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgPSAwOwotCWlzdGF0ZS0+dGltZXN0YW1wID0gMDsKKwlpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPSAwOworCWlzdGF0ZS0+dGltZXN0YW1wLm5zZWMgPSAwOwogCWlzdGF0ZS0+bmFtZV9oYXNoX2luaXRpYWxpemVkID0gMDsKIAlmcmVlX2hhc2goJmlzdGF0ZS0+bmFtZV9oYXNoKTsKIAljYWNoZV90cmVlX2ZyZWUoJihpc3RhdGUtPmNhY2hlX3RyZWUpKTsKQEAgLTE0NDEsMTAgKzE0ODQsMTAgQEAKIAlzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5ICpvbmRpc2sgPSB4Y2FsbG9jKDEsIHNpemUpOwogCWNoYXIgKm5hbWU7CiAKLQlvbmRpc2stPmN0aW1lLnNlYyA9IGh0b25sKGNlLT5jZV9jdGltZSk7Ci0Jb25kaXNrLT5jdGltZS5uc2VjID0gMDsKLQlvbmRpc2stPm10aW1lLnNlYyA9IGh0b25sKGNlLT5jZV9tdGltZSk7Ci0Jb25kaXNrLT5tdGltZS5uc2VjID0gMDsKKwlvbmRpc2stPmN0aW1lLnNlYyA9IGh0b25sKGNlLT5jZV9jdGltZS5zZWMpOworCW9uZGlzay0+bXRpbWUuc2VjID0gaHRvbmwoY2UtPmNlX210aW1lLnNlYyk7CisJb25kaXNrLT5jdGltZS5uc2VjID0gaHRvbmwoY2UtPmNlX2N0aW1lLm5zZWMpOworCW9uZGlzay0+bXRpbWUubnNlYyA9IGh0b25sKGNlLT5jZV9tdGltZS5uc2VjKTsKIAlvbmRpc2stPmRldiAgPSBodG9ubChjZS0+Y2VfZGV2KTsKIAlvbmRpc2stPmlubyAgPSBodG9ubChjZS0+Y2VfaW5vKTsKIAlvbmRpc2stPm1vZGUgPSBodG9ubChjZS0+Y2VfbW9kZSk7CkBAIC0xNDY2LDEzICsxNTA5LDE0IEBACiAJcmV0dXJuIGNlX3dyaXRlKGMsIGZkLCBvbmRpc2ssIHNpemUpOwogfQogCi1pbnQgd3JpdGVfaW5kZXgoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBuZXdmZCkKK2ludCB3cml0ZV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgaW50IG5ld2ZkKQogewogCWdpdF9TSEFfQ1RYIGM7CiAJc3RydWN0IGNhY2hlX2hlYWRlciBoZHI7CiAJaW50IGksIGVyciwgcmVtb3ZlZCwgZXh0ZW5kZWQ7CiAJc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGUgPSBpc3RhdGUtPmNhY2hlOwogCWludCBlbnRyaWVzID0gaXN0YXRlLT5jYWNoZV9ucjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKIAogCWZvciAoaSA9IHJlbW92ZWQgPSBleHRlbmRlZCA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKIAkJaWYgKGNhY2hlW2ldLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKQEAgLTE1MTYsNyArMTU2MCwxMiBAQAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIC0xOwogCX0KLQlyZXR1cm4gY2VfZmx1c2goJmMsIG5ld2ZkKTsKKworCWlmIChjZV9mbHVzaCgmYywgbmV3ZmQpIHx8IGZzdGF0KG5ld2ZkLCAmc3QpKQorCQlyZXR1cm4gLTE7CisJaXN0YXRlLT50aW1lc3RhbXAuc2VjID0gKHVuc2lnbmVkIGludClzdC5zdF9tdGltZTsKKwlpc3RhdGUtPnRpbWVzdGFtcC5uc2VjID0gU1RfTVRJTUVfTlNFQyhzdCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9yZWZsb2ctd2Fsay5jIGIvcmVmbG9nLXdhbGsuYwppbmRleCBmNzUxZmRjLi41NjIzZWE2IDEwMDY0NAotLS0gYS9yZWZsb2ctd2Fsay5jCisrKyBiL3JlZmxvZy13YWxrLmMKQEAgLTI0MSw4ICsyNDEsOCBAQAogCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH4oQURERUQgfCBTRUVOIHwgU0hPV04pOwogfQogCi12b2lkIHNob3dfcmVmbG9nX21lc3NhZ2Uoc3RydWN0IHJlZmxvZ193YWxrX2luZm8qIGluZm8sIGludCBvbmVsaW5lLAotCWludCByZWxhdGl2ZV9kYXRlKQordm9pZCBzaG93X3JlZmxvZ19tZXNzYWdlKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLCBpbnQgb25lbGluZSwKKwllbnVtIGRhdGVfbW9kZSBkbW9kZSkKIHsKIAlpZiAoaW5mbyAmJiBpbmZvLT5sYXN0X2NvbW1pdF9yZWZsb2cpIHsKIAkJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmNvbW1pdF9yZWZsb2cgPSBpbmZvLT5sYXN0X2NvbW1pdF9yZWZsb2c7CkBAIC0yNTEsOCArMjUxLDEwIEBACiAJCWluZm8gPSAmY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+aXRlbXNbY29tbWl0X3JlZmxvZy0+cmVjbm8rMV07CiAJCWlmIChvbmVsaW5lKSB7CiAJCQlwcmludGYoIiVzQHsiLCBjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5yZWYpOwotCQkJaWYgKGNvbW1pdF9yZWZsb2ctPmZsYWcgfHwgcmVsYXRpdmVfZGF0ZSkKLQkJCQlwcmludGYoIiVzIiwgc2hvd19kYXRlKGluZm8tPnRpbWVzdGFtcCwgMCwgMSkpOworCQkJaWYgKGNvbW1pdF9yZWZsb2ctPmZsYWcgfHwgZG1vZGUpCisJCQkJcHJpbnRmKCIlcyIsIHNob3dfZGF0ZShpbmZvLT50aW1lc3RhbXAsCisJCQkJCQkgICAgICAgaW5mby0+dHosCisJCQkJCQkgICAgICAgZG1vZGUpKTsKIAkJCWVsc2UKIAkJCQlwcmludGYoIiVkIiwgY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+bnIKIAkJCQkgICAgICAgLSAyIC0gY29tbWl0X3JlZmxvZy0+cmVjbm8pOwpAQCAtMjYwLDEwICsyNjIsMTAgQEAKIAkJfQogCQllbHNlIHsKIAkJCXByaW50ZigiUmVmbG9nOiAlc0B7IiwgY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+cmVmKTsKLQkJCWlmIChjb21taXRfcmVmbG9nLT5mbGFnIHx8IHJlbGF0aXZlX2RhdGUpCisJCQlpZiAoY29tbWl0X3JlZmxvZy0+ZmxhZyB8fCBkbW9kZSkKIAkJCQlwcmludGYoIiVzIiwgc2hvd19kYXRlKGluZm8tPnRpbWVzdGFtcCwKIAkJCQkJCQlpbmZvLT50eiwKLQkJCQkJCQlyZWxhdGl2ZV9kYXRlKSk7CisJCQkJCQkJZG1vZGUpKTsKIAkJCWVsc2UKIAkJCQlwcmludGYoIiVkIiwgY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+bnIKIAkJCQkgICAgICAgLSAyIC0gY29tbWl0X3JlZmxvZy0+cmVjbm8pOwpkaWZmIC0tZ2l0IGEvcmVmbG9nLXdhbGsuaCBiL3JlZmxvZy13YWxrLmgKaW5kZXggN2NhMTQzOC4uNzRjOTA5NiAxMDA2NDQKLS0tIGEvcmVmbG9nLXdhbGsuaAorKysgYi9yZWZsb2ctd2Fsay5oCkBAIC0xLDExICsxLDE0IEBACiAjaWZuZGVmIFJFRkxPR19XQUxLX0gKICNkZWZpbmUgUkVGTE9HX1dBTEtfSAogCisjaW5jbHVkZSAiY2FjaGUuaCIKKwogZXh0ZXJuIHZvaWQgaW5pdF9yZWZsb2dfd2FsayhzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyoqIGluZm8pOwogZXh0ZXJuIGludCBhZGRfcmVmbG9nX2Zvcl93YWxrKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLAogCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIHZvaWQgZmFrZV9yZWZsb2dfcGFyZW50KHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLAogCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwotZXh0ZXJuIHZvaWQgc2hvd19yZWZsb2dfbWVzc2FnZShzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqaW5mbywgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgc2hvd19yZWZsb2dfbWVzc2FnZShzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqaW5mbywgaW50LAorCQllbnVtIGRhdGVfbW9kZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVmcy5jIGIvcmVmcy5jCmluZGV4IDMzY2VkNjUuLmU0OWVhYTMgMTAwNjQ0Ci0tLSBhL3JlZnMuYworKysgYi9yZWZzLmMKQEAgLTI3NSwxMCArMjc1LDggQEAKIAkJCQlsaXN0ID0gZ2V0X3JlZl9kaXIocmVmLCBsaXN0KTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmICghcmVzb2x2ZV9yZWYocmVmLCBzaGExLCAxLCAmZmxhZykpIHsKLQkJCQllcnJvcigiJXMgcG9pbnRzIG5vd2hlcmUhIiwgcmVmKTsKLQkJCQljb250aW51ZTsKLQkJCX0KKwkJCWlmICghcmVzb2x2ZV9yZWYocmVmLCBzaGExLCAxLCAmZmxhZykpCisJCQkJaGFzaGNscihzaGExKTsKIAkJCWxpc3QgPSBhZGRfcmVmKHJlZiwgc2hhMSwgZmxhZywgbGlzdCwgTlVMTCk7CiAJCX0KIAkJZnJlZShyZWYpOwpAQCAtMjg3LDYgKzI4NSwzNSBAQAogCXJldHVybiBzb3J0X3JlZl9saXN0KGxpc3QpOwogfQogCitzdHJ1Y3Qgd2Fybl9pZl9kYW5nbGluZ19kYXRhIHsKKwljb25zdCBjaGFyICpyZWZuYW1lOworCWNvbnN0IGNoYXIgKm1zZ19mbXQ7Cit9OworCitzdGF0aWMgaW50IHdhcm5faWZfZGFuZ2xpbmdfc3ltcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCB3YXJuX2lmX2RhbmdsaW5nX2RhdGEgKmQgPSBjYl9kYXRhOworCWNvbnN0IGNoYXIgKnJlc29sdmVzX3RvOworCXVuc2lnbmVkIGNoYXIganVua1syMF07CisKKwlpZiAoIShmbGFncyAmIFJFRl9JU1NZTVJFRikpCisJCXJldHVybiAwOworCisJcmVzb2x2ZXNfdG8gPSByZXNvbHZlX3JlZihyZWZuYW1lLCBqdW5rLCAwLCBOVUxMKTsKKwlpZiAoIXJlc29sdmVzX3RvIHx8IHN0cmNtcChyZXNvbHZlc190bywgZC0+cmVmbmFtZSkpCisJCXJldHVybiAwOworCisJcHJpbnRmKGQtPm1zZ19mbXQsIHJlZm5hbWUpOworCXJldHVybiAwOworfQorCit2b2lkIHdhcm5fZGFuZ2xpbmdfc3ltcmVmKGNvbnN0IGNoYXIgKm1zZ19mbXQsIGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJc3RydWN0IHdhcm5faWZfZGFuZ2xpbmdfZGF0YSBkYXRhID0geyByZWZuYW1lLCBtc2dfZm10IH07CisJZm9yX2VhY2hfcmF3cmVmKHdhcm5faWZfZGFuZ2xpbmdfc3ltcmVmLCAmZGF0YSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcmVmX2xpc3QgKmdldF9sb29zZV9yZWZzKHZvaWQpCiB7CiAJaWYgKCFjYWNoZWRfcmVmcy5kaWRfbG9vc2UpIHsKQEAgLTQ5OCwxNiArNTI1LDIwIEBACiAJcmV0dXJuIC0xOwogfQogCisjZGVmaW5lIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOIDAxCiBzdGF0aWMgaW50IGRvX29uZV9yZWYoY29uc3QgY2hhciAqYmFzZSwgZWFjaF9yZWZfZm4gZm4sIGludCB0cmltLAotCQkgICAgICB2b2lkICpjYl9kYXRhLCBzdHJ1Y3QgcmVmX2xpc3QgKmVudHJ5KQorCQkgICAgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEsIHN0cnVjdCByZWZfbGlzdCAqZW50cnkpCiB7CiAJaWYgKHN0cm5jbXAoYmFzZSwgZW50cnktPm5hbWUsIHRyaW0pKQogCQlyZXR1cm4gMDsKKwkvKiBJcyB0aGlzIGEgIm5lZ2F0aXZlIHJlZiIgdGhhdCByZXByZXNlbnRzIGEgZGVsZXRlZCByZWY/ICovCiAJaWYgKGlzX251bGxfc2hhMShlbnRyeS0+c2hhMSkpCiAJCXJldHVybiAwOwotCWlmICghaGFzX3NoYTFfZmlsZShlbnRyeS0+c2hhMSkpIHsKLQkJZXJyb3IoIiVzIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgb2JqZWN0ISIsIGVudHJ5LT5uYW1lKTsKLQkJcmV0dXJuIDA7CisJaWYgKCEoZmxhZ3MgJiBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTikpIHsKKwkJaWYgKCFoYXNfc2hhMV9maWxlKGVudHJ5LT5zaGExKSkgeworCQkJZXJyb3IoIiVzIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgb2JqZWN0ISIsIGVudHJ5LT5uYW1lKTsKKwkJCXJldHVybiAwOworCQl9CiAJfQogCWN1cnJlbnRfcmVmID0gZW50cnk7CiAJcmV0dXJuIGZuKGVudHJ5LT5uYW1lICsgdHJpbSwgZW50cnktPnNoYTEsIGVudHJ5LT5mbGFnLCBjYl9kYXRhKTsKQEAgLTU2MSw3ICs1OTIsNyBAQAogfQogCiBzdGF0aWMgaW50IGRvX2Zvcl9lYWNoX3JlZihjb25zdCBjaGFyICpiYXNlLCBlYWNoX3JlZl9mbiBmbiwgaW50IHRyaW0sCi0JCQkgICB2b2lkICpjYl9kYXRhKQorCQkJICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQogewogCWludCByZXR2YWwgPSAwOwogCXN0cnVjdCByZWZfbGlzdCAqcGFja2VkID0gZ2V0X3BhY2tlZF9yZWZzKCk7CkBAIC01NzAsNyArNjAxLDcgQEAKIAlzdHJ1Y3QgcmVmX2xpc3QgKmV4dHJhOwogCiAJZm9yIChleHRyYSA9IGV4dHJhX3JlZnM7IGV4dHJhOyBleHRyYSA9IGV4dHJhLT5uZXh0KQotCQlyZXR2YWwgPSBkb19vbmVfcmVmKGJhc2UsIGZuLCB0cmltLCBjYl9kYXRhLCBleHRyYSk7CisJCXJldHZhbCA9IGRvX29uZV9yZWYoYmFzZSwgZm4sIHRyaW0sIGZsYWdzLCBjYl9kYXRhLCBleHRyYSk7CiAKIAl3aGlsZSAocGFja2VkICYmIGxvb3NlKSB7CiAJCXN0cnVjdCByZWZfbGlzdCAqZW50cnk7CkBAIC01ODYsMTMgKzYxNywxMyBAQAogCQkJZW50cnkgPSBwYWNrZWQ7CiAJCQlwYWNrZWQgPSBwYWNrZWQtPm5leHQ7CiAJCX0KLQkJcmV0dmFsID0gZG9fb25lX3JlZihiYXNlLCBmbiwgdHJpbSwgY2JfZGF0YSwgZW50cnkpOworCQlyZXR2YWwgPSBkb19vbmVfcmVmKGJhc2UsIGZuLCB0cmltLCBmbGFncywgY2JfZGF0YSwgZW50cnkpOwogCQlpZiAocmV0dmFsKQogCQkJZ290byBlbmRfZWFjaDsKIAl9CiAKIAlmb3IgKHBhY2tlZCA9IHBhY2tlZCA/IHBhY2tlZCA6IGxvb3NlOyBwYWNrZWQ7IHBhY2tlZCA9IHBhY2tlZC0+bmV4dCkgewotCQlyZXR2YWwgPSBkb19vbmVfcmVmKGJhc2UsIGZuLCB0cmltLCBjYl9kYXRhLCBwYWNrZWQpOworCQlyZXR2YWwgPSBkb19vbmVfcmVmKGJhc2UsIGZuLCB0cmltLCBmbGFncywgY2JfZGF0YSwgcGFja2VkKTsKIAkJaWYgKHJldHZhbCkKIAkJCWdvdG8gZW5kX2VhY2g7CiAJfQpAQCAtNjE0LDIyICs2NDUsMzMgQEAKIAogaW50IGZvcl9lYWNoX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKIHsKLQlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKCJyZWZzLyIsIGZuLCAwLCBjYl9kYXRhKTsKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKCJyZWZzLyIsIGZuLCAwLCAwLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX3JlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBkb19mb3JfZWFjaF9yZWYocHJlZml4LCBmbiwgc3RybGVuKHByZWZpeCksIDAsIGNiX2RhdGEpOwogfQogCiBpbnQgZm9yX2VhY2hfdGFnX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKIHsKLQlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKCJyZWZzL3RhZ3MvIiwgZm4sIDEwLCBjYl9kYXRhKTsKKwlyZXR1cm4gZm9yX2VhY2hfcmVmX2luKCJyZWZzL3RhZ3MvIiwgZm4sIGNiX2RhdGEpOwogfQogCiBpbnQgZm9yX2VhY2hfYnJhbmNoX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKIHsKLQlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKCJyZWZzL2hlYWRzLyIsIGZuLCAxMSwgY2JfZGF0YSk7CisJcmV0dXJuIGZvcl9lYWNoX3JlZl9pbigicmVmcy9oZWFkcy8iLCBmbiwgY2JfZGF0YSk7CiB9CiAKIGludCBmb3JfZWFjaF9yZW1vdGVfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQogewotCXJldHVybiBkb19mb3JfZWFjaF9yZWYoInJlZnMvcmVtb3Rlcy8iLCBmbiwgMTMsIGNiX2RhdGEpOworCXJldHVybiBmb3JfZWFjaF9yZWZfaW4oInJlZnMvcmVtb3Rlcy8iLCBmbiwgY2JfZGF0YSk7Cit9CisKK2ludCBmb3JfZWFjaF9yYXdyZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZigicmVmcy8iLCBmbiwgMCwKKwkJCSAgICAgICBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTiwgY2JfZGF0YSk7CiB9CiAKIC8qCkBAIC02NDAsMTIgKzY4MiwxNCBAQAogICogLSBpdCBoYXMgZG91YmxlIGRvdHMgIi4uIiwgb3IKICAqIC0gaXQgaGFzIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVyLCAifiIsICJeIiwgIjoiIG9yIFNQLCBhbnl3aGVyZSwgb3IKICAqIC0gaXQgZW5kcyB3aXRoIGEgIi8iLgorICogLSBpdCBlbmRzIHdpdGggIi5sb2NrIgorICogLSBpdCBjb250YWlucyBhICJcIiAoYmFja3NsYXNoKQogICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IGJhZF9yZWZfY2hhcihpbnQgY2gpCiB7CiAJaWYgKCgodW5zaWduZWQpIGNoKSA8PSAnICcgfHwKLQkgICAgY2ggPT0gJ34nIHx8IGNoID09ICdeJyB8fCBjaCA9PSAnOicpCisJICAgIGNoID09ICd+JyB8fCBjaCA9PSAnXicgfHwgY2ggPT0gJzonIHx8IGNoID09ICdcXCcpCiAJCXJldHVybiAxOwogCS8qIDIuMTMgUGF0dGVybiBNYXRjaGluZyBOb3RhdGlvbiAqLwogCWlmIChjaCA9PSAnPycgfHwgY2ggPT0gJ1snKSAvKiBVbnN1cHBvcnRlZCAqLwpAQCAtNjU3LDcgKzcwMSw4IEBACiAKIGludCBjaGVja19yZWZfZm9ybWF0KGNvbnN0IGNoYXIgKnJlZikKIHsKLQlpbnQgY2gsIGxldmVsLCBiYWRfdHlwZTsKKwlpbnQgY2gsIGxldmVsLCBiYWRfdHlwZSwgbGFzdDsKKwlpbnQgcmV0ID0gQ0hFQ0tfUkVGX0ZPUk1BVF9PSzsKIAljb25zdCBjaGFyICpjcCA9IHJlZjsKIAogCWxldmVsID0gMDsKQEAgLTY3MywzMyArNzE4LDQ5IEBACiAJCQlyZXR1cm4gQ0hFQ0tfUkVGX0ZPUk1BVF9FUlJPUjsKIAkJYmFkX3R5cGUgPSBiYWRfcmVmX2NoYXIoY2gpOwogCQlpZiAoYmFkX3R5cGUpIHsKLQkJCXJldHVybiAoYmFkX3R5cGUgPT0gMiAmJiAhKmNwKQotCQkJCT8gQ0hFQ0tfUkVGX0ZPUk1BVF9XSUxEQ0FSRAotCQkJCTogQ0hFQ0tfUkVGX0ZPUk1BVF9FUlJPUjsKKwkJCWlmIChiYWRfdHlwZSA9PSAyICYmICghKmNwIHx8ICpjcCA9PSAnLycpICYmCisJCQkgICAgcmV0ID09IENIRUNLX1JFRl9GT1JNQVRfT0spCisJCQkJcmV0ID0gQ0hFQ0tfUkVGX0ZPUk1BVF9XSUxEQ0FSRDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gQ0hFQ0tfUkVGX0ZPUk1BVF9FUlJPUjsKIAkJfQogCisJCWxhc3QgPSBjaDsKIAkJLyogc2NhbiB0aGUgcmVzdCBvZiB0aGUgcGF0aCBjb21wb25lbnQgKi8KIAkJd2hpbGUgKChjaCA9ICpjcCsrKSAhPSAwKSB7CiAJCQliYWRfdHlwZSA9IGJhZF9yZWZfY2hhcihjaCk7Ci0JCQlpZiAoYmFkX3R5cGUpIHsKLQkJCQlyZXR1cm4gKGJhZF90eXBlID09IDIgJiYgISpjcCkKLQkJCQkJPyBDSEVDS19SRUZfRk9STUFUX1dJTERDQVJECi0JCQkJCTogQ0hFQ0tfUkVGX0ZPUk1BVF9FUlJPUjsKLQkJCX0KKwkJCWlmIChiYWRfdHlwZSkKKwkJCQlyZXR1cm4gQ0hFQ0tfUkVGX0ZPUk1BVF9FUlJPUjsKIAkJCWlmIChjaCA9PSAnLycpCiAJCQkJYnJlYWs7Ci0JCQlpZiAoY2ggPT0gJy4nICYmICpjcCA9PSAnLicpCisJCQlpZiAobGFzdCA9PSAnLicgJiYgY2ggPT0gJy4nKQogCQkJCXJldHVybiBDSEVDS19SRUZfRk9STUFUX0VSUk9SOworCQkJaWYgKGxhc3QgPT0gJ0AnICYmIGNoID09ICd7JykKKwkJCQlyZXR1cm4gQ0hFQ0tfUkVGX0ZPUk1BVF9FUlJPUjsKKwkJCWxhc3QgPSBjaDsKIAkJfQogCQlsZXZlbCsrOwogCQlpZiAoIWNoKSB7CisJCQlpZiAocmVmIDw9IGNwIC0gMiAmJiBjcFstMl0gPT0gJy4nKQorCQkJCXJldHVybiBDSEVDS19SRUZfRk9STUFUX0VSUk9SOwogCQkJaWYgKGxldmVsIDwgMikKIAkJCQlyZXR1cm4gQ0hFQ0tfUkVGX0ZPUk1BVF9PTkVMRVZFTDsKLQkJCXJldHVybiBDSEVDS19SRUZfRk9STUFUX09LOworCQkJaWYgKGhhc19leHRlbnNpb24ocmVmLCAiLmxvY2siKSkKKwkJCQlyZXR1cm4gQ0hFQ0tfUkVGX0ZPUk1BVF9FUlJPUjsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiB9CiAKK2NvbnN0IGNoYXIgKnByZXR0aWZ5X3JlZm5hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gbmFtZSArICgKKwkJIXByZWZpeGNtcChuYW1lLCAicmVmcy9oZWFkcy8iKSA/IDExIDoKKwkJIXByZWZpeGNtcChuYW1lLCAicmVmcy90YWdzLyIpID8gMTAgOgorCQkhcHJlZml4Y21wKG5hbWUsICJyZWZzL3JlbW90ZXMvIikgPyAxMyA6CisJCTApOworfQorCiBjb25zdCBjaGFyICpyZWZfcmV2X3BhcnNlX3J1bGVzW10gPSB7CiAJIiUuKnMiLAogCSJyZWZzLyUuKnMiLApAQCAtODMzLDggKzg5NCwxMCBAQAogCSAqIG5hbWUgaXMgYSBwcm9wZXIgcHJlZml4IG9mIG91ciByZWZuYW1lLgogCSAqLwogCWlmIChtaXNzaW5nICYmCi0gICAgICAgICAgICAhaXNfcmVmbmFtZV9hdmFpbGFibGUocmVmLCBOVUxMLCBnZXRfcGFja2VkX3JlZnMoKSwgMCkpCisJICAgICAhaXNfcmVmbmFtZV9hdmFpbGFibGUocmVmLCBOVUxMLCBnZXRfcGFja2VkX3JlZnMoKSwgMCkpIHsKKwkJbGFzdF9lcnJubyA9IEVOT1RESVI7CiAJCWdvdG8gZXJyb3JfcmV0dXJuOworCX0KIAogCWxvY2stPmxrID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOwogCkBAIC05NDIsMTIgKzEwMDUsMTAgQEAKIAkJfSBlbHNlIHsKIAkJCXBhdGggPSBnaXRfcGF0aCgiJXMiLCByZWZuYW1lKTsKIAkJfQotCQllcnIgPSB1bmxpbmsocGF0aCk7Ci0JCWlmIChlcnIgJiYgZXJybm8gIT0gRU5PRU5UKSB7CisJCWVyciA9IHVubGlua19vcl93YXJuKHBhdGgpOworCQlpZiAoZXJyICYmIGVycm5vICE9IEVOT0VOVCkKIAkJCXJldCA9IDE7Ci0JCQllcnJvcigidW5saW5rKCVzKSBmYWlsZWQ6ICVzIiwKLQkJCSAgICAgIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7Ci0JCX0KKwogCQlpZiAoIShkZWxvcHQgJiBSRUZfTk9ERVJFRikpCiAJCQlsb2NrLT5say0+ZmlsZW5hbWVbaV0gPSAnLic7CiAJfQpAQCAtOTU3LDEwICsxMDE4LDcgQEAKIAkgKi8KIAlyZXQgfD0gcmVwYWNrX3dpdGhvdXRfcmVmKHJlZm5hbWUpOwogCi0JZXJyID0gdW5saW5rKGdpdF9wYXRoKCJsb2dzLyVzIiwgbG9jay0+cmVmX25hbWUpKTsKLQlpZiAoZXJyICYmIGVycm5vICE9IEVOT0VOVCkKLQkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiB1bmxpbmsoJXMpIGZhaWxlZDogJXMiLAotCQkJZ2l0X3BhdGgoImxvZ3MvJXMiLCBsb2NrLT5yZWZfbmFtZSksIHN0cmVycm9yKGVycm5vKSk7CisJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGgoImxvZ3MvJXMiLCBsb2NrLT5yZWZfbmFtZSkpOwogCWludmFsaWRhdGVfY2FjaGVkX3JlZnMoKTsKIAl1bmxvY2tfcmVmKGxvY2spOwogCXJldHVybiByZXQ7CkBAIC0xMzIxLDcgKzEzNzksNyBAQAogCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0oZ2l0X0hFQUQpKSB7CiAJCWVycm9yKCJVbmFibGUgdG8gZml4IHBlcm1pc3Npb25zIG9uICVzIiwgbG9ja3BhdGgpOwogCWVycm9yX3VubGlua19yZXR1cm46Ci0JCXVubGluayhsb2NrcGF0aCk7CisJCXVubGlua19vcl93YXJuKGxvY2twYXRoKTsKIAllcnJvcl9mcmVlX3JldHVybjoKIAkJZnJlZShnaXRfSEVBRCk7CiAJCXJldHVybiAtMTsKQEAgLTEzNjEsNyArMTQxOSw3IEBACiAJbG9nZmlsZSA9IGdpdF9wYXRoKCJsb2dzLyVzIiwgcmVmKTsKIAlsb2dmZCA9IG9wZW4obG9nZmlsZSwgT19SRE9OTFksIDApOwogCWlmIChsb2dmZCA8IDApCi0JCWRpZSgiVW5hYmxlIHRvIHJlYWQgbG9nICVzOiAlcyIsIGxvZ2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiVW5hYmxlIHRvIHJlYWQgbG9nICclcyciLCBsb2dmaWxlKTsKIAlmc3RhdChsb2dmZCwgJnN0KTsKIAlpZiAoIXN0LnN0X3NpemUpCiAJCWRpZSgiTG9nICVzIGlzIGVtcHR5LiIsIGxvZ2ZpbGUpOwpAQCAtMTQwMSw4ICsxNDU5LDcgQEAKIAkJCQlpZiAoZ2V0X3NoYTFfaGV4KHJlYyArIDQxLCBzaGExKSkKIAkJCQkJZGllKCJMb2cgJXMgaXMgY29ycnVwdC4iLCBsb2dmaWxlKTsKIAkJCQlpZiAoaGFzaGNtcChsb2dnZWRfc2hhMSwgc2hhMSkpIHsKLQkJCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJCQkid2FybmluZzogTG9nICVzIGhhcyBnYXAgYWZ0ZXIgJXMuXG4iLAorCQkJCQl3YXJuaW5nKCJMb2cgJXMgaGFzIGdhcCBhZnRlciAlcy4iLAogCQkJCQkJbG9nZmlsZSwgc2hvd19kYXRlKGRhdGUsIHR6LCBEQVRFX1JGQzI4MjIpKTsKIAkJCQl9CiAJCQl9CkBAIC0xNDE0LDggKzE0NzEsNyBAQAogCQkJCWlmIChnZXRfc2hhMV9oZXgocmVjICsgNDEsIGxvZ2dlZF9zaGExKSkKIAkJCQkJZGllKCJMb2cgJXMgaXMgY29ycnVwdC4iLCBsb2dmaWxlKTsKIAkJCQlpZiAoaGFzaGNtcChsb2dnZWRfc2hhMSwgc2hhMSkpIHsKLQkJCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJCQkid2FybmluZzogTG9nICVzIHVuZXhwZWN0ZWRseSBlbmRlZCBvbiAlcy5cbiIsCisJCQkJCXdhcm5pbmcoIkxvZyAlcyB1bmV4cGVjdGVkbHkgZW5kZWQgb24gJXMuIiwKIAkJCQkJCWxvZ2ZpbGUsIHNob3dfZGF0ZShkYXRlLCB0eiwgREFURV9SRkMyODIyKSk7CiAJCQkJfQogCQkJfQpAQCAtMTQ1Myw3ICsxNTA5LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotaW50IGZvcl9lYWNoX3JlZmxvZ19lbnQoY29uc3QgY2hhciAqcmVmLCBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCitpbnQgZm9yX2VhY2hfcmVjZW50X3JlZmxvZ19lbnQoY29uc3QgY2hhciAqcmVmLCBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sIGxvbmcgb2ZzLCB2b2lkICpjYl9kYXRhKQogewogCWNvbnN0IGNoYXIgKmxvZ2ZpbGU7CiAJRklMRSAqbG9nZnA7CkBAIC0xNDY0LDYgKzE1MjAsMTggQEAKIAlsb2dmcCA9IGZvcGVuKGxvZ2ZpbGUsICJyIik7CiAJaWYgKCFsb2dmcCkKIAkJcmV0dXJuIC0xOworCisJaWYgKG9mcykgeworCQlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCQlpZiAoZnN0YXQoZmlsZW5vKGxvZ2ZwKSwgJnN0YXRidWYpIHx8CisJCSAgICBzdGF0YnVmLnN0X3NpemUgPCBvZnMgfHwKKwkJICAgIGZzZWVrKGxvZ2ZwLCAtb2ZzLCBTRUVLX0VORCkgfHwKKwkJICAgIGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGxvZ2ZwKSkgeworCQkJZmNsb3NlKGxvZ2ZwKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwogCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBsb2dmcCkpIHsKIAkJdW5zaWduZWQgY2hhciBvc2hhMVsyMF0sIG5zaGExWzIwXTsKIAkJY2hhciAqZW1haWxfZW5kLCAqbWVzc2FnZTsKQEAgLTE0OTcsNiArMTU2NSwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCBmb3JfZWFjaF9yZWZsb2dfZW50KGNvbnN0IGNoYXIgKnJlZiwgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBmb3JfZWFjaF9yZWNlbnRfcmVmbG9nX2VudChyZWYsIGZuLCAwLCBjYl9kYXRhKTsKK30KKwogc3RhdGljIGludCBkb19mb3JfZWFjaF9yZWZsb2coY29uc3QgY2hhciAqYmFzZSwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCiB7CiAJRElSICpkaXIgPSBvcGVuZGlyKGdpdF9wYXRoKCJsb2dzLyVzIiwgYmFzZSkpOwpAQCAtMTU3NywxMCArMTY1MCwxMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHJlZiAqZmluZF9yZWZfYnlfbmFtZShzdHJ1Y3QgcmVmICpsaXN0LCBjb25zdCBjaGFyICpuYW1lKQorc3RydWN0IHJlZiAqZmluZF9yZWZfYnlfbmFtZShjb25zdCBzdHJ1Y3QgcmVmICpsaXN0LCBjb25zdCBjaGFyICpuYW1lKQogewogCWZvciAoIDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCiAJCWlmICghc3RyY21wKGxpc3QtPm5hbWUsIG5hbWUpKQotCQkJcmV0dXJuIGxpc3Q7CisJCQlyZXR1cm4gKHN0cnVjdCByZWYgKilsaXN0OwogCXJldHVybiBOVUxMOwogfQorCisvKgorICogZ2VuZXJhdGUgYSBmb3JtYXQgc3VpdGFibGUgZm9yIHNjYW5mIGZyb20gYSByZWZfcmV2X3BhcnNlX3J1bGVzCisgKiBydWxlLCB0aGF0IGlzIHJlcGxhY2UgdGhlICIlLipzIiBzcGVjIHdpdGggYSAiJXMiIHNwZWMKKyAqLworc3RhdGljIHZvaWQgZ2VuX3NjYW5mX2ZtdChjaGFyICpzY2FuZl9mbXQsIGNvbnN0IGNoYXIgKnJ1bGUpCit7CisJY2hhciAqc3BlYzsKKworCXNwZWMgPSBzdHJzdHIocnVsZSwgIiUuKnMiKTsKKwlpZiAoIXNwZWMgfHwgc3Ryc3RyKHNwZWMgKyA0LCAiJS4qcyIpKQorCQlkaWUoImludmFsaWQgcnVsZSBpbiByZWZfcmV2X3BhcnNlX3J1bGVzOiAlcyIsIHJ1bGUpOworCisJLyogY29weSBhbGwgdW50aWwgc3BlYyAqLworCXN0cm5jcHkoc2NhbmZfZm10LCBydWxlLCBzcGVjIC0gcnVsZSk7CisJc2NhbmZfZm10W3NwZWMgLSBydWxlXSA9ICdcMCc7CisJLyogY29weSBuZXcgc3BlYyAqLworCXN0cmNhdChzY2FuZl9mbXQsICIlcyIpOworCS8qIGNvcHkgcmVtYWluaW5nIHJ1bGUgKi8KKwlzdHJjYXQoc2NhbmZfZm10LCBzcGVjICsgNCk7CisKKwlyZXR1cm47Cit9CisKK2NoYXIgKnNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKGNvbnN0IGNoYXIgKnJlZiwgaW50IHN0cmljdCkKK3sKKwlpbnQgaTsKKwlzdGF0aWMgY2hhciAqKnNjYW5mX2ZtdHM7CisJc3RhdGljIGludCBucl9ydWxlczsKKwljaGFyICpzaG9ydF9uYW1lOworCisJLyogcHJlIGdlbmVyYXRlIHNjYW5mIGZvcm1hdHMgZnJvbSByZWZfcmV2X3BhcnNlX3J1bGVzW10gKi8KKwlpZiAoIW5yX3J1bGVzKSB7CisJCXNpemVfdCB0b3RhbF9sZW4gPSAwOworCisJCS8qIHRoZSBydWxlIGxpc3QgaXMgTlVMTCB0ZXJtaW5hdGVkLCBjb3VudCB0aGVtIGZpcnN0ICovCisJCWZvciAoOyByZWZfcmV2X3BhcnNlX3J1bGVzW25yX3J1bGVzXTsgbnJfcnVsZXMrKykKKwkJCS8qIG5vICsxIGJlY2F1c2Ugc3RybGVuKCIlcyIpIDwgc3RybGVuKCIlLipzIikgKi8KKwkJCXRvdGFsX2xlbiArPSBzdHJsZW4ocmVmX3Jldl9wYXJzZV9ydWxlc1tucl9ydWxlc10pOworCisJCXNjYW5mX2ZtdHMgPSB4bWFsbG9jKG5yX3J1bGVzICogc2l6ZW9mKGNoYXIgKikgKyB0b3RhbF9sZW4pOworCisJCXRvdGFsX2xlbiA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBucl9ydWxlczsgaSsrKSB7CisJCQlzY2FuZl9mbXRzW2ldID0gKGNoYXIgKikmc2NhbmZfZm10c1tucl9ydWxlc10KKwkJCQkJKyB0b3RhbF9sZW47CisJCQlnZW5fc2NhbmZfZm10KHNjYW5mX2ZtdHNbaV0sIHJlZl9yZXZfcGFyc2VfcnVsZXNbaV0pOworCQkJdG90YWxfbGVuICs9IHN0cmxlbihyZWZfcmV2X3BhcnNlX3J1bGVzW2ldKTsKKwkJfQorCX0KKworCS8qIGJhaWwgb3V0IGlmIHRoZXJlIGFyZSBubyBydWxlcyAqLworCWlmICghbnJfcnVsZXMpCisJCXJldHVybiB4c3RyZHVwKHJlZik7CisKKwkvKiBidWZmZXIgZm9yIHNjYW5mIHJlc3VsdCwgYXQgbW9zdCByZWYgbXVzdCBmaXQgKi8KKwlzaG9ydF9uYW1lID0geHN0cmR1cChyZWYpOworCisJLyogc2tpcCBmaXJzdCBydWxlLCBpdCB3aWxsIGFsd2F5cyBtYXRjaCAqLworCWZvciAoaSA9IG5yX3J1bGVzIC0gMTsgaSA+IDAgOyAtLWkpIHsKKwkJaW50IGo7CisJCWludCBydWxlc190b19mYWlsID0gaTsKKwkJaW50IHNob3J0X25hbWVfbGVuOworCisJCWlmICgxICE9IHNzY2FuZihyZWYsIHNjYW5mX2ZtdHNbaV0sIHNob3J0X25hbWUpKQorCQkJY29udGludWU7CisKKwkJc2hvcnRfbmFtZV9sZW4gPSBzdHJsZW4oc2hvcnRfbmFtZSk7CisKKwkJLyoKKwkJICogaW4gc3RyaWN0IG1vZGUsIGFsbCAoZXhjZXB0IHRoZSBtYXRjaGVkIG9uZSkgcnVsZXMKKwkJICogbXVzdCBmYWlsIHRvIHJlc29sdmUgdG8gYSB2YWxpZCBub24tYW1iaWd1b3VzIHJlZgorCQkgKi8KKwkJaWYgKHN0cmljdCkKKwkJCXJ1bGVzX3RvX2ZhaWwgPSBucl9ydWxlczsKKworCQkvKgorCQkgKiBjaGVjayBpZiB0aGUgc2hvcnQgbmFtZSByZXNvbHZlcyB0byBhIHZhbGlkIHJlZiwKKwkJICogYnV0IHVzZSBvbmx5IHJ1bGVzIHByaW9yIHRvIHRoZSBtYXRjaGVkIG9uZQorCQkgKi8KKwkJZm9yIChqID0gMDsgaiA8IHJ1bGVzX3RvX2ZhaWw7IGorKykgeworCQkJY29uc3QgY2hhciAqcnVsZSA9IHJlZl9yZXZfcGFyc2VfcnVsZXNbal07CisJCQl1bnNpZ25lZCBjaGFyIHNob3J0X29iamVjdG5hbWVbMjBdOworCQkJY2hhciByZWZuYW1lW1BBVEhfTUFYXTsKKworCQkJLyogc2tpcCBtYXRjaGVkIHJ1bGUgKi8KKwkJCWlmIChpID09IGopCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiB0aGUgc2hvcnQgbmFtZSBpcyBhbWJpZ3VvdXMsIGlmIGl0IHJlc29sdmVzCisJCQkgKiAod2l0aCB0aGlzIHByZXZpb3VzIHJ1bGUpIHRvIGEgdmFsaWQgcmVmCisJCQkgKiByZWFkX3JlZigpIHJldHVybnMgMCBvbiBzdWNjZXNzCisJCQkgKi8KKwkJCW1rc25wYXRoKHJlZm5hbWUsIHNpemVvZihyZWZuYW1lKSwKKwkJCQkgcnVsZSwgc2hvcnRfbmFtZV9sZW4sIHNob3J0X25hbWUpOworCQkJaWYgKCFyZWFkX3JlZihyZWZuYW1lLCBzaG9ydF9vYmplY3RuYW1lKSkKKwkJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIHNob3J0IG5hbWUgaXMgbm9uLWFtYmlndW91cyBpZiBhbGwgcHJldmlvdXMgcnVsZXMKKwkJICogaGF2ZW4ndCByZXNvbHZlZCB0byBhIHZhbGlkIHJlZgorCQkgKi8KKwkJaWYgKGogPT0gcnVsZXNfdG9fZmFpbCkKKwkJCXJldHVybiBzaG9ydF9uYW1lOworCX0KKworCWZyZWUoc2hvcnRfbmFtZSk7CisJcmV0dXJuIHhzdHJkdXAocmVmKTsKK30KZGlmZiAtLWdpdCBhL3JlZnMuaCBiL3JlZnMuaAppbmRleCAwNmFkMjYwLi5jMTFmNmE2IDEwMDY0NAotLS0gYS9yZWZzLmgKKysrIGIvcmVmcy5oCkBAIC0yMCwxMCArMjAsMTYgQEAKIHR5cGVkZWYgaW50IGVhY2hfcmVmX2ZuKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSk7CiBleHRlcm4gaW50IGhlYWRfcmVmKGVhY2hfcmVmX2ZuLCB2b2lkICopOwogZXh0ZXJuIGludCBmb3JfZWFjaF9yZWYoZWFjaF9yZWZfZm4sIHZvaWQgKik7CitleHRlcm4gaW50IGZvcl9lYWNoX3JlZl9pbihjb25zdCBjaGFyICosIGVhY2hfcmVmX2ZuLCB2b2lkICopOwogZXh0ZXJuIGludCBmb3JfZWFjaF90YWdfcmVmKGVhY2hfcmVmX2ZuLCB2b2lkICopOwogZXh0ZXJuIGludCBmb3JfZWFjaF9icmFuY2hfcmVmKGVhY2hfcmVmX2ZuLCB2b2lkICopOwogZXh0ZXJuIGludCBmb3JfZWFjaF9yZW1vdGVfcmVmKGVhY2hfcmVmX2ZuLCB2b2lkICopOwogCisvKiBjYW4gYmUgdXNlZCB0byBsZWFybiBhYm91dCBicm9rZW4gcmVmIGFuZCBzeW1yZWYgKi8KK2V4dGVybiBpbnQgZm9yX2VhY2hfcmF3cmVmKGVhY2hfcmVmX2ZuLCB2b2lkICopOworCitleHRlcm4gdm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZihjb25zdCBjaGFyICptc2dfZm10LCBjb25zdCBjaGFyICpyZWZuYW1lKTsKKwogLyoKICAqIEV4dHJhIHJlZnMgd2lsbCBiZSBsaXN0ZWQgYnkgZm9yX2VhY2hfcmVmKCkgYmVmb3JlIGFueSBhY3R1YWwgcmVmcwogICogZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGlzIHByb2Nlc3Mgb3IgdW50aWwgY2xlYXJfZXh0cmFfcmVmcygpIGlzCkBAIC02MCw2ICs2Niw3IEBACiAvKiBpdGVyYXRlIG92ZXIgcmVmbG9nIGVudHJpZXMgKi8KIHR5cGVkZWYgaW50IGVhY2hfcmVmbG9nX2VudF9mbih1bnNpZ25lZCBjaGFyICpvc2hhMSwgdW5zaWduZWQgY2hhciAqbnNoYTEsIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZywgaW50LCBjb25zdCBjaGFyICosIHZvaWQgKik7CiBpbnQgZm9yX2VhY2hfcmVmbG9nX2VudChjb25zdCBjaGFyICpyZWYsIGVhY2hfcmVmbG9nX2VudF9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgZm9yX2VhY2hfcmVjZW50X3JlZmxvZ19lbnQoY29uc3QgY2hhciAqcmVmLCBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sIGxvbmcsIHZvaWQgKmNiX2RhdGEpOwogCiAvKgogICogQ2FsbHMgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBmb3IgZWFjaCByZWZsb2cgZmlsZSB1bnRpbCBpdCByZXR1cm5zIG5vbnplcm8sCkBAIC03Myw2ICs4MCw5IEBACiAjZGVmaW5lIENIRUNLX1JFRl9GT1JNQVRfV0lMRENBUkQgKC0zKQogZXh0ZXJuIGludCBjaGVja19yZWZfZm9ybWF0KGNvbnN0IGNoYXIgKnRhcmdldCk7CiAKK2V4dGVybiBjb25zdCBjaGFyICpwcmV0dGlmeV9yZWZuYW1lKGNvbnN0IGNoYXIgKnJlZm5hbWUpOworZXh0ZXJuIGNoYXIgKnNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKGNvbnN0IGNoYXIgKnJlZiwgaW50IHN0cmljdCk7CisKIC8qKiByZW5hbWUgcmVmLCByZXR1cm4gMCBvbiBzdWNjZXNzICoqLwogZXh0ZXJuIGludCByZW5hbWVfcmVmKGNvbnN0IGNoYXIgKm9sZHJlZiwgY29uc3QgY2hhciAqbmV3cmVmLCBjb25zdCBjaGFyICpsb2dtc2cpOwogCmRpZmYgLS1naXQgYS9yZW1vdGUuYyBiL3JlbW90ZS5jCmluZGV4IDU3MGUxMTIuLmMzYWRhMmQgMTAwNjQ0Ci0tLSBhL3JlbW90ZS5jCisrKyBiL3JlbW90ZS5jCkBAIC00LDEzICs0LDE1IEBACiAjaW5jbHVkZSAiY29tbWl0LmgiCiAjaW5jbHVkZSAiZGlmZi5oIgogI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAidGFnLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgcmVmc3BlYyBzX3RhZ19yZWZzcGVjID0gewogCTAsCiAJMSwKIAkwLAotCSJyZWZzL3RhZ3MvIiwKLQkicmVmcy90YWdzLyIKKwkicmVmcy90YWdzLyoiLAorCSJyZWZzL3RhZ3MvKiIKIH07CiAKIGNvbnN0IHN0cnVjdCByZWZzcGVjICp0YWdfcmVmc3BlYyA9ICZzX3RhZ19yZWZzcGVjOwpAQCAtMzcsNiArMzksNyBAQAogCiBzdGF0aWMgc3RydWN0IGJyYW5jaCAqY3VycmVudF9icmFuY2g7CiBzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9yZW1vdGVfbmFtZTsKK3N0YXRpYyBpbnQgZXhwbGljaXRfZGVmYXVsdF9yZW1vdGVfbmFtZTsKIAogc3RhdGljIHN0cnVjdCByZXdyaXRlICoqcmV3cml0ZTsKIHN0YXRpYyBpbnQgcmV3cml0ZV9hbGxvYzsKQEAgLTEwMyw2ICsxMDYsMTIgQEAKIAlhZGRfdXJsKHJlbW90ZSwgYWxpYXNfdXJsKHVybCkpOwogfQogCitzdGF0aWMgdm9pZCBhZGRfcHVzaHVybChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnB1c2h1cmwpCit7CisJQUxMT0NfR1JPVyhyZW1vdGUtPnB1c2h1cmwsIHJlbW90ZS0+cHVzaHVybF9uciArIDEsIHJlbW90ZS0+cHVzaHVybF9hbGxvYyk7CisJcmVtb3RlLT5wdXNodXJsW3JlbW90ZS0+cHVzaHVybF9ucisrXSA9IHB1c2h1cmw7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcmVtb3RlICptYWtlX3JlbW90ZShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQogewogCXN0cnVjdCByZW1vdGUgKnJldDsKQEAgLTI5OCw3ICszMDcsNyBAQAogCQlzdHJidWZfYWRkc3RyKCZicmFuY2gsICJIRUFEOiIpOwogCX0KIAlhZGRfdXJsX2FsaWFzKHJlbW90ZSwgcCk7Ci0JYWRkX2ZldGNoX3JlZnNwZWMocmVtb3RlLCBzdHJidWZfZGV0YWNoKCZicmFuY2gsIDApKTsKKwlhZGRfZmV0Y2hfcmVmc3BlYyhyZW1vdGUsIHN0cmJ1Zl9kZXRhY2goJmJyYW5jaCwgTlVMTCkpOwogCS8qCiAJICogQ29naXRvIGNvbXBhdGlibGUgcHVzaDogcHVzaCBjdXJyZW50IEhFQUQgdG8gcmVtb3RlICNicmFuY2gKIAkgKiAobWFzdGVyIGlmIG1pc3NpbmcpCkBAIC0zMDksNyArMzE4LDcgQEAKIAkJc3RyYnVmX2FkZGYoJmJyYW5jaCwgIjpyZWZzL2hlYWRzLyVzIiwgZnJhZyk7CiAJZWxzZQogCQlzdHJidWZfYWRkc3RyKCZicmFuY2gsICI6cmVmcy9oZWFkcy9tYXN0ZXIiKTsKLQlhZGRfcHVzaF9yZWZzcGVjKHJlbW90ZSwgc3RyYnVmX2RldGFjaCgmYnJhbmNoLCAwKSk7CisJYWRkX3B1c2hfcmVmc3BlYyhyZW1vdGUsIHN0cmJ1Zl9kZXRhY2goJmJyYW5jaCwgTlVMTCkpOwogCXJlbW90ZS0+ZmV0Y2hfdGFncyA9IDE7IC8qIGFsd2F5cyBhdXRvLWZvbGxvdyAqLwogfQogCkBAIC0zMjksOCArMzM4LDEwIEBACiAJCQlpZiAoIXZhbHVlKQogCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOwogCQkJYnJhbmNoLT5yZW1vdGVfbmFtZSA9IHhzdHJkdXAodmFsdWUpOwotCQkJaWYgKGJyYW5jaCA9PSBjdXJyZW50X2JyYW5jaCkKKwkJCWlmIChicmFuY2ggPT0gY3VycmVudF9icmFuY2gpIHsKIAkJCQlkZWZhdWx0X3JlbW90ZV9uYW1lID0gYnJhbmNoLT5yZW1vdGVfbmFtZTsKKwkJCQlleHBsaWNpdF9kZWZhdWx0X3JlbW90ZV9uYW1lID0gMTsKKwkJCX0KIAkJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5tZXJnZSIpKSB7CiAJCQlpZiAoIXZhbHVlKQogCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOwpAQCAtMzYxLDcgKzM3Miw3IEBACiAJfQogCXN1YmtleSA9IHN0cnJjaHIobmFtZSwgJy4nKTsKIAlpZiAoIXN1YmtleSkKLQkJcmV0dXJuIGVycm9yKCJDb25maWcgd2l0aCBubyBrZXkgZm9yIHJlbW90ZSAlcyIsIG5hbWUpOworCQlyZXR1cm4gMDsKIAlyZW1vdGUgPSBtYWtlX3JlbW90ZShuYW1lLCBzdWJrZXkgLSBuYW1lKTsKIAlyZW1vdGUtPm9yaWdpbiA9IFJFTU9URV9DT05GSUc7CiAJaWYgKCFzdHJjbXAoc3Via2V5LCAiLm1pcnJvciIpKQpAQCAtMzc0LDYgKzM4NSwxMSBAQAogCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQogCQkJcmV0dXJuIC0xOwogCQlhZGRfdXJsKHJlbW90ZSwgdik7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5wdXNodXJsIikpIHsKKwkJY29uc3QgY2hhciAqdjsKKwkJaWYgKGdpdF9jb25maWdfc3RyaW5nKCZ2LCBrZXksIHZhbHVlKSkKKwkJCXJldHVybiAtMTsKKwkJYWRkX3B1c2h1cmwocmVtb3RlLCB2KTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnB1c2giKSkgewogCQljb25zdCBjaGFyICp2OwogCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQpAQCAtNDE5LDYgKzQzNSw5IEBACiAJCWZvciAoaiA9IDA7IGogPCByZW1vdGVzW2ldLT51cmxfbnI7IGorKykgewogCQkJcmVtb3Rlc1tpXS0+dXJsW2pdID0gYWxpYXNfdXJsKHJlbW90ZXNbaV0tPnVybFtqXSk7CiAJCX0KKwkJZm9yIChqID0gMDsgaiA8IHJlbW90ZXNbaV0tPnB1c2h1cmxfbnI7IGorKykgeworCQkJcmVtb3Rlc1tpXS0+cHVzaHVybFtqXSA9IGFsaWFzX3VybChyZW1vdGVzW2ldLT5wdXNodXJsW2pdKTsKKwkJfQogCX0KIH0KIApAQCAtNDUwLDE2ICs0NjksMTEgQEAKICAqLwogc3RhdGljIGludCB2ZXJpZnlfcmVmbmFtZShjaGFyICpuYW1lLCBpbnQgaXNfZ2xvYikKIHsKLQlpbnQgcmVzdWx0LCBsZW4gPSAtMTsKKwlpbnQgcmVzdWx0OwogCi0JaWYgKGlzX2dsb2IpIHsKLQkJbGVuID0gc3RybGVuKG5hbWUpOwotCQlhc3NlcnQobmFtZVtsZW4gLSAxXSA9PSAnLycpOwotCQluYW1lW2xlbiAtIDFdID0gJ1wwJzsKLQl9CiAJcmVzdWx0ID0gY2hlY2tfcmVmX2Zvcm1hdChuYW1lKTsKLQlpZiAoaXNfZ2xvYikKLQkJbmFtZVtsZW4gLSAxXSA9ICcvJzsKKwlpZiAoaXNfZ2xvYiAmJiByZXN1bHQgPT0gQ0hFQ0tfUkVGX0ZPUk1BVF9XSUxEQ0FSRCkKKwkJcmVzdWx0ID0gQ0hFQ0tfUkVGX0ZPUk1BVF9PSzsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC00OTQsNyArNTA4LDcgQEAKIAkJaW50IGlzX2dsb2I7CiAJCWNvbnN0IGNoYXIgKmxocywgKnJoczsKIAotCQlsbGVuID0gaXNfZ2xvYiA9IDA7CisJCWlzX2dsb2IgPSAwOwogCiAJCWxocyA9IHJlZnNwZWNbaV07CiAJCWlmICgqbGhzID09ICcrJykgewpAQCAtNTE1LDE2ICs1MjksMTUgQEAKIAogCQlpZiAocmhzKSB7CiAJCQlzaXplX3QgcmxlbiA9IHN0cmxlbigrK3Jocyk7Ci0JCQlpc19nbG9iID0gKDIgPD0gcmxlbiAmJiAhc3RyY21wKHJocyArIHJsZW4gLSAyLCAiLyoiKSk7Ci0JCQlyc1tpXS5kc3QgPSB4c3RybmR1cChyaHMsIHJsZW4gLSBpc19nbG9iKTsKKwkJCWlzX2dsb2IgPSAoMSA8PSBybGVuICYmIHN0cmNocihyaHMsICcqJykpOworCQkJcnNbaV0uZHN0ID0geHN0cm5kdXAocmhzLCBybGVuKTsKIAkJfQogCiAJCWxsZW4gPSAocmhzID8gKHJocyAtIGxocyAtIDEpIDogc3RybGVuKGxocykpOwotCQlpZiAoMiA8PSBsbGVuICYmICFtZW1jbXAobGhzICsgbGxlbiAtIDIsICIvKiIsIDIpKSB7CisJCWlmICgxIDw9IGxsZW4gJiYgbWVtY2hyKGxocywgJyonLCBsbGVuKSkgewogCQkJaWYgKChyaHMgJiYgIWlzX2dsb2IpIHx8ICghcmhzICYmIGZldGNoKSkKIAkJCQlnb3RvIGludmFsaWQ7CiAJCQlpc19nbG9iID0gMTsKLQkJCWxsZW4tLTsKIAkJfSBlbHNlIGlmIChyaHMgJiYgaXNfZ2xvYikgewogCQkJZ290byBpbnZhbGlkOwogCQl9CkBAIC02MzQsMTAgKzY0Nyw3IEBACiAKIHN0YXRpYyBpbnQgdmFsaWRfcmVtb3RlX25pY2soY29uc3QgY2hhciAqbmFtZSkKIHsKLQlpZiAoIW5hbWVbMF0gfHwgLyogbm90IGVtcHR5ICovCi0JICAgIChuYW1lWzBdID09ICcuJyAmJiAvKiBub3QgIi4iICovCi0JICAgICAoIW5hbWVbMV0gfHwgLyogbm90ICIuLiIgKi8KLQkgICAgICAobmFtZVsxXSA9PSAnLicgJiYgIW5hbWVbMl0pKSkpCisJaWYgKCFuYW1lWzBdIHx8IGlzX2RvdF9vcl9kb3Rkb3QobmFtZSkpCiAJCXJldHVybiAwOwogCXJldHVybiAhc3RyY2hyKG5hbWUsICcvJyk7IC8qIG5vIHNsYXNoICovCiB9CkBAIC02NDUsMTAgKzY1NSwxNiBAQAogc3RydWN0IHJlbW90ZSAqcmVtb3RlX2dldChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCByZW1vdGUgKnJldDsKKwlpbnQgbmFtZV9naXZlbiA9IDA7CiAKIAlyZWFkX2NvbmZpZygpOwotCWlmICghbmFtZSkKKwlpZiAobmFtZSkKKwkJbmFtZV9naXZlbiA9IDE7CisJZWxzZSB7CiAJCW5hbWUgPSBkZWZhdWx0X3JlbW90ZV9uYW1lOworCQluYW1lX2dpdmVuID0gZXhwbGljaXRfZGVmYXVsdF9yZW1vdGVfbmFtZTsKKwl9CisKIAlyZXQgPSBtYWtlX3JlbW90ZShuYW1lLCAwKTsKIAlpZiAodmFsaWRfcmVtb3RlX25pY2sobmFtZSkpIHsKIAkJaWYgKCFyZXQtPnVybCkKQEAgLTY1Niw3ICs2NzIsNyBAQAogCQlpZiAoIXJldC0+dXJsKQogCQkJcmVhZF9icmFuY2hlc19maWxlKHJldCk7CiAJfQotCWlmICghcmV0LT51cmwpCisJaWYgKG5hbWVfZ2l2ZW4gJiYgIXJldC0+dXJsKQogCQlhZGRfdXJsX2FsaWFzKHJldCwgbmFtZSk7CiAJaWYgKCFyZXQtPnVybCkKIAkJcmV0dXJuIE5VTEw7CkBAIC02NjUsNiArNjgxLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IHJlbW90ZV9pc19jb25maWd1cmVkKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGk7CisJcmVhZF9jb25maWcoKTsKKworCWZvciAoaSA9IDA7IGkgPCByZW1vdGVzX25yOyBpKyspCisJCWlmICghc3RyY21wKG5hbWUsIHJlbW90ZXNbaV0tPm5hbWUpKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKIGludCBmb3JfZWFjaF9yZW1vdGUoZWFjaF9yZW1vdGVfZm4gZm4sIHZvaWQgKnByaXYpCiB7CiAJaW50IGksIHJlc3VsdCA9IDA7CkBAIC03MjEsNiArNzQ4LDQxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbWF0Y2hfbmFtZV93aXRoX3BhdHRlcm4oY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIGNvbnN0IGNoYXIgKnZhbHVlLCBjaGFyICoqcmVzdWx0KQoreworCWNvbnN0IGNoYXIgKmtzdGFyID0gc3RyY2hyKGtleSwgJyonKTsKKwlzaXplX3Qga2xlbjsKKwlzaXplX3Qga3N1ZmZpeGxlbjsKKwlzaXplX3QgbmFtZWxlbjsKKwlpbnQgcmV0OworCWlmICgha3N0YXIpCisJCWRpZSgiS2V5ICclcycgb2YgcGF0dGVybiBoYWQgbm8gJyonIiwga2V5KTsKKwlrbGVuID0ga3N0YXIgLSBrZXk7CisJa3N1ZmZpeGxlbiA9IHN0cmxlbihrc3RhciArIDEpOworCW5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJcmV0ID0gIXN0cm5jbXAobmFtZSwga2V5LCBrbGVuKSAmJiBuYW1lbGVuID49IGtsZW4gKyBrc3VmZml4bGVuICYmCisJCSFtZW1jbXAobmFtZSArIG5hbWVsZW4gLSBrc3VmZml4bGVuLCBrc3RhciArIDEsIGtzdWZmaXhsZW4pOworCWlmIChyZXQgJiYgdmFsdWUpIHsKKwkJY29uc3QgY2hhciAqdnN0YXIgPSBzdHJjaHIodmFsdWUsICcqJyk7CisJCXNpemVfdCB2bGVuOworCQlzaXplX3QgdnN1ZmZpeGxlbjsKKwkJaWYgKCF2c3RhcikKKwkJCWRpZSgiVmFsdWUgJyVzJyBvZiBwYXR0ZXJuIGhhcyBubyAnKiciLCB2YWx1ZSk7CisJCXZsZW4gPSB2c3RhciAtIHZhbHVlOworCQl2c3VmZml4bGVuID0gc3RybGVuKHZzdGFyICsgMSk7CisJCSpyZXN1bHQgPSB4bWFsbG9jKHZsZW4gKyB2c3VmZml4bGVuICsKKwkJCQkgIHN0cmxlbihuYW1lKSAtCisJCQkJICBrbGVuIC0ga3N1ZmZpeGxlbiArIDEpOworCQlzdHJuY3B5KCpyZXN1bHQsIHZhbHVlLCB2bGVuKTsKKwkJc3RybmNweSgqcmVzdWx0ICsgdmxlbiwKKwkJCW5hbWUgKyBrbGVuLCBuYW1lbGVuIC0ga2xlbiAtIGtzdWZmaXhsZW4pOworCQlzdHJjcHkoKnJlc3VsdCArIHZsZW4gKyBuYW1lbGVuIC0ga2xlbiAtIGtzdWZmaXhsZW4sCisJCSAgICAgICB2c3RhciArIDEpOworCX0KKwlyZXR1cm4gcmV0OworfQorCiBpbnQgcmVtb3RlX2ZpbmRfdHJhY2tpbmcoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlYykKIHsKIAlpbnQgZmluZF9zcmMgPSByZWZzcGVjLT5zcmMgPT0gTlVMTDsKQEAgLTc0NCwxMyArODA2LDcgQEAKIAkJaWYgKCFmZXRjaC0+ZHN0KQogCQkJY29udGludWU7CiAJCWlmIChmZXRjaC0+cGF0dGVybikgewotCQkJaWYgKCFwcmVmaXhjbXAobmVlZGxlLCBrZXkpKSB7Ci0JCQkJKnJlc3VsdCA9IHhtYWxsb2Moc3RybGVuKHZhbHVlKSArCi0JCQkJCQkgIHN0cmxlbihuZWVkbGUpIC0KLQkJCQkJCSAgc3RybGVuKGtleSkgKyAxKTsKLQkJCQlzdHJjcHkoKnJlc3VsdCwgdmFsdWUpOwotCQkJCXN0cmNweSgqcmVzdWx0ICsgc3RybGVuKHZhbHVlKSwKLQkJCQkgICAgICAgbmVlZGxlICsgc3RybGVuKGtleSkpOworCQkJaWYgKG1hdGNoX25hbWVfd2l0aF9wYXR0ZXJuKGtleSwgbmVlZGxlLCB2YWx1ZSwgcmVzdWx0KSkgewogCQkJCXJlZnNwZWMtPmZvcmNlID0gZmV0Y2gtPmZvcmNlOwogCQkJCXJldHVybiAwOwogCQkJfQpAQCAtNzgwLDEwICs4MzYsMTggQEAKIAogc3RhdGljIHN0cnVjdCByZWYgKmNvcHlfcmVmKGNvbnN0IHN0cnVjdCByZWYgKnJlZikKIHsKLQlzdHJ1Y3QgcmVmICpyZXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVmKSArIHN0cmxlbihyZWYtPm5hbWUpICsgMSk7Ci0JbWVtY3B5KHJldCwgcmVmLCBzaXplb2Yoc3RydWN0IHJlZikgKyBzdHJsZW4ocmVmLT5uYW1lKSArIDEpOwotCXJldC0+bmV4dCA9IE5VTEw7Ci0JcmV0dXJuIHJldDsKKwlzdHJ1Y3QgcmVmICpjcHk7CisJc2l6ZV90IGxlbjsKKwlpZiAoIXJlZikKKwkJcmV0dXJuIE5VTEw7CisJbGVuID0gc3RybGVuKHJlZi0+bmFtZSk7CisJY3B5ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHJlZikgKyBsZW4gKyAxKTsKKwltZW1jcHkoY3B5LCByZWYsIHNpemVvZihzdHJ1Y3QgcmVmKSArIGxlbiArIDEpOworCWNweS0+bmV4dCA9IE5VTEw7CisJY3B5LT5zeW1yZWYgPSByZWYtPnN5bXJlZiA/IHhzdHJkdXAocmVmLT5zeW1yZWYpIDogTlVMTDsKKwljcHktPnJlbW90ZV9zdGF0dXMgPSByZWYtPnJlbW90ZV9zdGF0dXMgPyB4c3RyZHVwKHJlZi0+cmVtb3RlX3N0YXR1cykgOiBOVUxMOworCWNweS0+cGVlcl9yZWYgPSBjb3B5X3JlZihyZWYtPnBlZXJfcmVmKTsKKwlyZXR1cm4gY3B5OwogfQogCiBzdHJ1Y3QgcmVmICpjb3B5X3JlZl9saXN0KGNvbnN0IHN0cnVjdCByZWYgKnJlZikKQEAgLTgwMiw2ICs4NjYsNyBAQAogewogCWlmICghcmVmKQogCQlyZXR1cm47CisJZnJlZV9yZWYocmVmLT5wZWVyX3JlZik7CiAJZnJlZShyZWYtPnJlbW90ZV9zdGF0dXMpOwogCWZyZWUocmVmLT5zeW1yZWYpOwogCWZyZWUocmVmKTsKQEAgLTgxMiw3ICs4NzcsNiBAQAogCXN0cnVjdCByZWYgKm5leHQ7CiAJd2hpbGUgKHJlZikgewogCQluZXh0ID0gcmVmLT5uZXh0OwotCQlmcmVlKHJlZi0+cGVlcl9yZWYpOwogCQlmcmVlX3JlZihyZWYpOwogCQlyZWYgPSBuZXh0OwogCX0KQEAgLTkyOSw2ICs5OTMsNyBAQAogCQkJICBzdHJ1Y3QgcmVmc3BlYyAqcnMpCiB7CiAJc3RydWN0IHJlZiAqbWF0Y2hlZF9zcmMsICptYXRjaGVkX2RzdDsKKwlpbnQgY29weV9zcmM7CiAKIAljb25zdCBjaGFyICpkc3RfdmFsdWUgPSBycy0+ZHN0OwogCWNoYXIgKmRzdF9ndWVzczsKQEAgLTkzOSw2ICsxMDA0LDcgQEAKIAltYXRjaGVkX3NyYyA9IG1hdGNoZWRfZHN0ID0gTlVMTDsKIAlzd2l0Y2ggKGNvdW50X3JlZnNwZWNfbWF0Y2gocnMtPnNyYywgc3JjLCAmbWF0Y2hlZF9zcmMpKSB7CiAJY2FzZSAxOgorCQljb3B5X3NyYyA9IDE7CiAJCWJyZWFrOwogCWNhc2UgMDoKIAkJLyogVGhlIHNvdXJjZSBjb3VsZCBiZSBpbiB0aGUgZ2V0X3NoYTEoKSBmb3JtYXQKQEAgLTk0OCw2ICsxMDE0LDcgQEAKIAkJbWF0Y2hlZF9zcmMgPSB0cnlfZXhwbGljaXRfb2JqZWN0X25hbWUocnMtPnNyYyk7CiAJCWlmICghbWF0Y2hlZF9zcmMpCiAJCQlyZXR1cm4gZXJyb3IoInNyYyByZWZzcGVjICVzIGRvZXMgbm90IG1hdGNoIGFueS4iLCBycy0+c3JjKTsKKwkJY29weV9zcmMgPSAwOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gZXJyb3IoInNyYyByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZS4iLCBycy0+c3JjKTsKQEAgLTk5Myw3ICsxMDYwLDcgQEAKIAkJcmV0dXJuIGVycm9yKCJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMuIiwKIAkJICAgICAgbWF0Y2hlZF9kc3QtPm5hbWUpOwogCWVsc2UgewotCQltYXRjaGVkX2RzdC0+cGVlcl9yZWYgPSBtYXRjaGVkX3NyYzsKKwkJbWF0Y2hlZF9kc3QtPnBlZXJfcmVmID0gY29weV9zcmMgPyBjb3B5X3JlZihtYXRjaGVkX3NyYykgOiBtYXRjaGVkX3NyYzsKIAkJbWF0Y2hlZF9kc3QtPmZvcmNlID0gcnMtPmZvcmNlOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwMjIsNyArMTA4OSw4IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChyc1tpXS5wYXR0ZXJuICYmICFwcmVmaXhjbXAoc3JjLT5uYW1lLCByc1tpXS5zcmMpKQorCQlpZiAocnNbaV0ucGF0dGVybiAmJiBtYXRjaF9uYW1lX3dpdGhfcGF0dGVybihyc1tpXS5zcmMsIHNyYy0+bmFtZSwKKwkJCQkJCQkgICAgIE5VTEwsIE5VTEwpKQogCQkJcmV0dXJuIHJzICsgaTsKIAl9CiAJaWYgKG1hdGNoaW5nX3JlZnMgIT0gLTEpCkBAIC0xMDMxLDI2ICsxMDk5LDM1IEBACiAJCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IHJlZiAqKnRhaWxfcmVmKHN0cnVjdCByZWYgKipoZWFkKQoreworCXN0cnVjdCByZWYgKip0YWlsID0gaGVhZDsKKwl3aGlsZSAoKnRhaWwpCisJCXRhaWwgPSAmKCgqdGFpbCktPm5leHQpOworCXJldHVybiB0YWlsOworfQorCiAvKgogICogTm90ZS4gVGhpcyBpcyB1c2VkIG9ubHkgYnkgInB1c2giOyByZWZzcGVjIG1hdGNoaW5nIHJ1bGVzIGZvcgogICogcHVzaCBhbmQgZmV0Y2ggYXJlIHN1YnRseSBkaWZmZXJlbnQsIHNvIGRvIG5vdCB0cnkgdG8gcmV1c2UgaXQKICAqIHdpdGhvdXQgdGhpbmtpbmcuCiAgKi8KLWludCBtYXRjaF9yZWZzKHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqZHN0LCBzdHJ1Y3QgcmVmICoqKmRzdF90YWlsLAoraW50IG1hdGNoX3JlZnMoc3RydWN0IHJlZiAqc3JjLCBzdHJ1Y3QgcmVmICoqZHN0LAogCSAgICAgICBpbnQgbnJfcmVmc3BlYywgY29uc3QgY2hhciAqKnJlZnNwZWMsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgcmVmc3BlYyAqcnM7CiAJaW50IHNlbmRfYWxsID0gZmxhZ3MgJiBNQVRDSF9SRUZTX0FMTDsKIAlpbnQgc2VuZF9taXJyb3IgPSBmbGFncyAmIE1BVENIX1JFRlNfTUlSUk9SOwotCXN0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X3JlZnNwZWNbXSA9IHsgIjoiLCAwIH07CisJaW50IGVycnM7CisJc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfcmVmc3BlY1tdID0geyAiOiIsIE5VTEwgfTsKKwlzdHJ1Y3QgcmVmICoqZHN0X3RhaWwgPSB0YWlsX3JlZihkc3QpOwogCiAJaWYgKCFucl9yZWZzcGVjKSB7CiAJCW5yX3JlZnNwZWMgPSAxOwogCQlyZWZzcGVjID0gZGVmYXVsdF9yZWZzcGVjOwogCX0KIAlycyA9IHBhcnNlX3B1c2hfcmVmc3BlYyhucl9yZWZzcGVjLCAoY29uc3QgY2hhciAqKikgcmVmc3BlYyk7Ci0JaWYgKG1hdGNoX2V4cGxpY2l0X3JlZnMoc3JjLCBkc3QsIGRzdF90YWlsLCBycywgbnJfcmVmc3BlYykpCi0JCXJldHVybiAtMTsKKwllcnJzID0gbWF0Y2hfZXhwbGljaXRfcmVmcyhzcmMsICpkc3QsICZkc3RfdGFpbCwgcnMsIG5yX3JlZnNwZWMpOwogCiAJLyogcGljayB0aGUgcmVtYWluZGVyICovCiAJZm9yICggOyBzcmM7IHNyYyA9IHNyYy0+bmV4dCkgewpAQCAtMTA3NiwxMyArMTE1MywxMSBAQAogCiAJCX0gZWxzZSB7CiAJCQljb25zdCBjaGFyICpkc3Rfc2lkZSA9IHBhdC0+ZHN0ID8gcGF0LT5kc3QgOiBwYXQtPnNyYzsKLQkJCWRzdF9uYW1lID0geG1hbGxvYyhzdHJsZW4oZHN0X3NpZGUpICsKLQkJCQkJICAgc3RybGVuKHNyYy0+bmFtZSkgLQotCQkJCQkgICBzdHJsZW4ocGF0LT5zcmMpICsgMik7Ci0JCQlzdHJjcHkoZHN0X25hbWUsIGRzdF9zaWRlKTsKLQkJCXN0cmNhdChkc3RfbmFtZSwgc3JjLT5uYW1lICsgc3RybGVuKHBhdC0+c3JjKSk7CisJCQlpZiAoIW1hdGNoX25hbWVfd2l0aF9wYXR0ZXJuKHBhdC0+c3JjLCBzcmMtPm5hbWUsCisJCQkJCQkgICAgIGRzdF9zaWRlLCAmZHN0X25hbWUpKQorCQkJCWRpZSgiRGlkbid0IHRoaW5rIGl0IG1hdGNoZXMgYW55IG1vcmUiKTsKIAkJfQotCQlkc3RfcGVlciA9IGZpbmRfcmVmX2J5X25hbWUoZHN0LCBkc3RfbmFtZSk7CisJCWRzdF9wZWVyID0gZmluZF9yZWZfYnlfbmFtZSgqZHN0LCBkc3RfbmFtZSk7CiAJCWlmIChkc3RfcGVlcikgewogCQkJaWYgKGRzdF9wZWVyLT5wZWVyX3JlZikKIAkJCQkvKiBXZSdyZSBhbHJlYWR5IHNlbmRpbmcgc29tZXRoaW5nIHRvIHRoaXMgcmVmLiAqLwpAQCAtMTA5OCwxNCArMTE3MywxNiBAQAogCQkJCWdvdG8gZnJlZV9uYW1lOwogCiAJCQkvKiBDcmVhdGUgYSBuZXcgb25lIGFuZCBsaW5rIGl0ICovCi0JCQlkc3RfcGVlciA9IG1ha2VfbGlua2VkX3JlZihkc3RfbmFtZSwgZHN0X3RhaWwpOworCQkJZHN0X3BlZXIgPSBtYWtlX2xpbmtlZF9yZWYoZHN0X25hbWUsICZkc3RfdGFpbCk7CiAJCQloYXNoY3B5KGRzdF9wZWVyLT5uZXdfc2hhMSwgc3JjLT5uZXdfc2hhMSk7CiAJCX0KLQkJZHN0X3BlZXItPnBlZXJfcmVmID0gc3JjOworCQlkc3RfcGVlci0+cGVlcl9yZWYgPSBjb3B5X3JlZihzcmMpOwogCQlkc3RfcGVlci0+Zm9yY2UgPSBwYXQtPmZvcmNlOwogCWZyZWVfbmFtZToKIAkJZnJlZShkc3RfbmFtZSk7CiAJfQorCWlmIChlcnJzKQorCQlyZXR1cm4gLTE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMjcsOCArMTIwNCw5IEBACiAJCQlmb3IgKGkgPSAwOyBpIDwgcmV0LT5tZXJnZV9ucjsgaSsrKSB7CiAJCQkJcmV0LT5tZXJnZVtpXSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCoqcmV0LT5tZXJnZSkpOwogCQkJCXJldC0+bWVyZ2VbaV0tPnNyYyA9IHhzdHJkdXAocmV0LT5tZXJnZV9uYW1lW2ldKTsKLQkJCQlyZW1vdGVfZmluZF90cmFja2luZyhyZXQtPnJlbW90ZSwKLQkJCQkJCSAgICAgcmV0LT5tZXJnZVtpXSk7CisJCQkJaWYgKHJlbW90ZV9maW5kX3RyYWNraW5nKHJldC0+cmVtb3RlLCByZXQtPm1lcmdlW2ldKQorCQkJCSAgICAmJiAhc3RyY21wKHJldC0+cmVtb3RlX25hbWUsICIuIikpCisJCQkJCXJldC0+bWVyZ2VbaV0tPmRzdCA9IHhzdHJkdXAocmV0LT5tZXJnZV9uYW1lW2ldKTsKIAkJCX0KIAkJfQogCX0KQEAgLTExNTYsMTkgKzEyMzQsMTcgQEAKIAlzdHJ1Y3QgcmVmICpyZXQgPSBOVUxMOwogCXN0cnVjdCByZWYgKip0YWlsID0gJnJldDsKIAotCWludCByZW1vdGVfcHJlZml4X2xlbiA9IHN0cmxlbihyZWZzcGVjLT5zcmMpOwotCWludCBsb2NhbF9wcmVmaXhfbGVuID0gc3RybGVuKHJlZnNwZWMtPmRzdCk7CisJY2hhciAqZXhwbl9uYW1lOwogCiAJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKIAkJaWYgKHN0cmNocihyZWYtPm5hbWUsICdeJykpCiAJCQljb250aW51ZTsgLyogYSBkZXJlZmVyZW5jZSBpdGVtICovCi0JCWlmICghcHJlZml4Y21wKHJlZi0+bmFtZSwgcmVmc3BlYy0+c3JjKSkgewotCQkJY29uc3QgY2hhciAqbWF0Y2g7CisJCWlmIChtYXRjaF9uYW1lX3dpdGhfcGF0dGVybihyZWZzcGVjLT5zcmMsIHJlZi0+bmFtZSwKKwkJCQkJICAgIHJlZnNwZWMtPmRzdCwgJmV4cG5fbmFtZSkpIHsKIAkJCXN0cnVjdCByZWYgKmNweSA9IGNvcHlfcmVmKHJlZik7Ci0JCQltYXRjaCA9IHJlZi0+bmFtZSArIHJlbW90ZV9wcmVmaXhfbGVuOwogCi0JCQljcHktPnBlZXJfcmVmID0gYWxsb2NfcmVmX3dpdGhfcHJlZml4KHJlZnNwZWMtPmRzdCwKLQkJCQkJbG9jYWxfcHJlZml4X2xlbiwgbWF0Y2gpOworCQkJY3B5LT5wZWVyX3JlZiA9IGFsbG9jX3JlZihleHBuX25hbWUpOworCQkJZnJlZShleHBuX25hbWUpOwogCQkJaWYgKHJlZnNwZWMtPmZvcmNlKQogCQkJCWNweS0+cGVlcl9yZWYtPmZvcmNlID0gMTsKIAkJCSp0YWlsID0gY3B5OwpAQCAtMTIwMSw3ICsxMjc3LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWYgKmdldF9sb2NhbF9yZWYoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlpZiAoIW5hbWUpCisJaWYgKCFuYW1lIHx8IG5hbWVbMF0gPT0gJ1wwJykKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoIXByZWZpeGNtcChuYW1lLCAicmVmcy8iKSkKQEAgLTEyNzEsNiArMTM0Nyw1NCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgdm9pZCB1bm1hcmtfYW5kX2ZyZWUoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LCB1bnNpZ25lZCBpbnQgbWFyaykKK3sKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnRlbXAgPSBsaXN0OworCQl0ZW1wLT5pdGVtLT5vYmplY3QuZmxhZ3MgJj0gfm1hcms7CisJCWxpc3QgPSB0ZW1wLT5uZXh0OworCQlmcmVlKHRlbXApOworCX0KK30KKworaW50IHJlZl9uZXdlcihjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSwgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEpCit7CisJc3RydWN0IG9iamVjdCAqbzsKKwlzdHJ1Y3QgY29tbWl0ICpvbGQsICpuZXc7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LCAqdXNlZDsKKwlpbnQgZm91bmQgPSAwOworCisJLyogQm90aCBuZXcgYW5kIG9sZCBtdXN0IGJlIGNvbW1pdC1pc2ggYW5kIG5ldyBpcyBkZXNjZW5kYW50IG9mCisJICogb2xkLiAgT3RoZXJ3aXNlIHdlIHJlcXVpcmUgLS1mb3JjZS4KKwkgKi8KKwlvID0gZGVyZWZfdGFnKHBhcnNlX29iamVjdChvbGRfc2hhMSksIE5VTEwsIDApOworCWlmICghbyB8fCBvLT50eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybiAwOworCW9sZCA9IChzdHJ1Y3QgY29tbWl0ICopIG87CisKKwlvID0gZGVyZWZfdGFnKHBhcnNlX29iamVjdChuZXdfc2hhMSksIE5VTEwsIDApOworCWlmICghbyB8fCBvLT50eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybiAwOworCW5ldyA9IChzdHJ1Y3QgY29tbWl0ICopIG87CisKKwlpZiAocGFyc2VfY29tbWl0KG5ldykgPCAwKQorCQlyZXR1cm4gMDsKKworCXVzZWQgPSBsaXN0ID0gTlVMTDsKKwljb21taXRfbGlzdF9pbnNlcnQobmV3LCAmbGlzdCk7CisJd2hpbGUgKGxpc3QpIHsKKwkJbmV3ID0gcG9wX21vc3RfcmVjZW50X2NvbW1pdCgmbGlzdCwgVE1QX01BUkspOworCQljb21taXRfbGlzdF9pbnNlcnQobmV3LCAmdXNlZCk7CisJCWlmIChuZXcgPT0gb2xkKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwl1bm1hcmtfYW5kX2ZyZWUobGlzdCwgVE1QX01BUkspOworCXVubWFya19hbmRfZnJlZSh1c2VkLCBUTVBfTUFSSyk7CisJcmV0dXJuIGZvdW5kOworfQorCiAvKgogICogUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gcmVwb3J0LCBvdGhlcndpc2UgZmFsc2UuCiAgKi8KQEAgLTEyOTgsMTMgKzE0MjIsMTMgQEAKIAliYXNlID0gYnJhbmNoLT5tZXJnZVswXS0+ZHN0OwogCWlmICghcmVzb2x2ZV9yZWYoYmFzZSwgc2hhMSwgMSwgTlVMTCkpCiAJCXJldHVybiAwOwotCXRoZWlycyA9IGxvb2t1cF9jb21taXQoc2hhMSk7CisJdGhlaXJzID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CiAJaWYgKCF0aGVpcnMpCiAJCXJldHVybiAwOwogCiAJaWYgKCFyZXNvbHZlX3JlZihicmFuY2gtPnJlZm5hbWUsIHNoYTEsIDEsIE5VTEwpKQogCQlyZXR1cm4gMDsKLQlvdXJzID0gbG9va3VwX2NvbW1pdChzaGExKTsKKwlvdXJzID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CiAJaWYgKCFvdXJzKQogCQlyZXR1cm4gMDsKIApAQCAtMTM1OSw5ICsxNDgzLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAliYXNlID0gYnJhbmNoLT5tZXJnZVswXS0+ZHN0OwotCWlmICghcHJlZml4Y21wKGJhc2UsICJyZWZzL3JlbW90ZXMvIikpIHsKLQkJYmFzZSArPSBzdHJsZW4oInJlZnMvcmVtb3Rlcy8iKTsKLQl9CisJYmFzZSA9IHNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKGJhc2UsIDApOwogCWlmICghbnVtX3RoZWlycykKIAkJc3RyYnVmX2FkZGYoc2IsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnICIKIAkJCSAgICAiYnkgJWQgY29tbWl0JXMuXG4iLApAQCAtMTM3OCwzICsxNTAwLDY4IEBACiAJCQkgICAgYmFzZSwgbnVtX291cnMsIG51bV90aGVpcnMpOwogCXJldHVybiAxOwogfQorCitzdGF0aWMgaW50IG9uZV9sb2NhbF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJlZiAqKipsb2NhbF90YWlsID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmICpyZWY7CisJaW50IGxlbjsKKworCS8qIHdlIGFscmVhZHkga25vdyBpdCBzdGFydHMgd2l0aCByZWZzLyB0byBnZXQgaGVyZSAqLworCWlmIChjaGVja19yZWZfZm9ybWF0KHJlZm5hbWUgKyA1KSkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBzdHJsZW4ocmVmbmFtZSkgKyAxOworCXJlZiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZWYpICsgbGVuKTsKKwloYXNoY3B5KHJlZi0+bmV3X3NoYTEsIHNoYTEpOworCW1lbWNweShyZWYtPm5hbWUsIHJlZm5hbWUsIGxlbik7CisJKipsb2NhbF90YWlsID0gcmVmOworCSpsb2NhbF90YWlsID0gJnJlZi0+bmV4dDsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlZiAqZ2V0X2xvY2FsX2hlYWRzKHZvaWQpCit7CisJc3RydWN0IHJlZiAqbG9jYWxfcmVmcyA9IE5VTEwsICoqbG9jYWxfdGFpbCA9ICZsb2NhbF9yZWZzOworCWZvcl9lYWNoX3JlZihvbmVfbG9jYWxfcmVmLCAmbG9jYWxfdGFpbCk7CisJcmV0dXJuIGxvY2FsX3JlZnM7Cit9CisKK3N0cnVjdCByZWYgKmd1ZXNzX3JlbW90ZV9oZWFkKGNvbnN0IHN0cnVjdCByZWYgKmhlYWQsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLAorCQkJICAgICAgaW50IGFsbCkKK3sKKwljb25zdCBzdHJ1Y3QgcmVmICpyOworCXN0cnVjdCByZWYgKmxpc3QgPSBOVUxMOworCXN0cnVjdCByZWYgKip0YWlsID0gJmxpc3Q7CisKKwlpZiAoIWhlYWQpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBTb21lIHRyYW5zcG9ydHMgc3VwcG9ydCBkaXJlY3RseSBwZWVraW5nIGF0CisJICogd2hlcmUgSEVBRCBwb2ludHM7IGlmIHRoYXQgaXMgdGhlIGNhc2UsIHRoZW4KKwkgKiB3ZSBkb24ndCBoYXZlIHRvIGd1ZXNzLgorCSAqLworCWlmIChoZWFkLT5zeW1yZWYpCisJCXJldHVybiBjb3B5X3JlZihmaW5kX3JlZl9ieV9uYW1lKHJlZnMsIGhlYWQtPnN5bXJlZikpOworCisJLyogSWYgcmVmcy9oZWFkcy9tYXN0ZXIgY291bGQgYmUgcmlnaHQsIGl0IGlzLiAqLworCWlmICghYWxsKSB7CisJCXIgPSBmaW5kX3JlZl9ieV9uYW1lKHJlZnMsICJyZWZzL2hlYWRzL21hc3RlciIpOworCQlpZiAociAmJiAhaGFzaGNtcChyLT5vbGRfc2hhMSwgaGVhZC0+b2xkX3NoYTEpKQorCQkJcmV0dXJuIGNvcHlfcmVmKHIpOworCX0KKworCS8qIExvb2sgZm9yIGFub3RoZXIgcmVmIHRoYXQgcG9pbnRzIHRoZXJlICovCisJZm9yIChyID0gcmVmczsgcjsgciA9IHItPm5leHQpIHsKKwkJaWYgKHIgIT0gaGVhZCAmJiAhaGFzaGNtcChyLT5vbGRfc2hhMSwgaGVhZC0+b2xkX3NoYTEpKSB7CisJCQkqdGFpbCA9IGNvcHlfcmVmKHIpOworCQkJdGFpbCA9ICYoKCp0YWlsKS0+bmV4dCk7CisJCQlpZiAoIWFsbCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBsaXN0OworfQpkaWZmIC0tZ2l0IGEvcmVtb3RlLmggYi9yZW1vdGUuaAppbmRleCBhNDZhNWJlLi41ZGI4NDIwIDEwMDY0NAotLS0gYS9yZW1vdGUuaAorKysgYi9yZW1vdGUuaApAQCAtMTUsNiArMTUsMTAgQEAKIAlpbnQgdXJsX25yOwogCWludCB1cmxfYWxsb2M7CiAKKwljb25zdCBjaGFyICoqcHVzaHVybDsKKwlpbnQgcHVzaHVybF9ucjsKKwlpbnQgcHVzaHVybF9hbGxvYzsKKwogCWNvbnN0IGNoYXIgKipwdXNoX3JlZnNwZWM7CiAJc3RydWN0IHJlZnNwZWMgKnB1c2g7CiAJaW50IHB1c2hfcmVmc3BlY19ucjsKQEAgLTQ1LDYgKzQ5LDcgQEAKIH07CiAKIHN0cnVjdCByZW1vdGUgKnJlbW90ZV9nZXQoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgcmVtb3RlX2lzX2NvbmZpZ3VyZWQoY29uc3QgY2hhciAqbmFtZSk7CiAKIHR5cGVkZWYgaW50IGVhY2hfcmVtb3RlX2ZuKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgdm9pZCAqcHJpdik7CiBpbnQgZm9yX2VhY2hfcmVtb3RlKGVhY2hfcmVtb3RlX2ZuIGZuLCB2b2lkICpwcml2KTsKQEAgLTc0LDYgKzc5LDcgQEAKIHZvaWQgZnJlZV9yZWZzKHN0cnVjdCByZWYgKnJlZik7CiAKIGludCByZXNvbHZlX3JlbW90ZV9zeW1yZWYoc3RydWN0IHJlZiAqcmVmLCBzdHJ1Y3QgcmVmICpsaXN0KTsKK2ludCByZWZfbmV3ZXIoY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExKTsKIAogLyoKICAqIFJlbW92ZXMgYW5kIGZyZWVzIGFueSBkdXBsaWNhdGUgcmVmcyBpbiB0aGUgbWFwLgpAQCAtODMsNyArODksNyBAQAogaW50IHZhbGlkX2ZldGNoX3JlZnNwZWMoY29uc3QgY2hhciAqcmVmc3BlYyk7CiBzdHJ1Y3QgcmVmc3BlYyAqcGFyc2VfZmV0Y2hfcmVmc3BlYyhpbnQgbnJfcmVmc3BlYywgY29uc3QgY2hhciAqKnJlZnNwZWMpOwogCi1pbnQgbWF0Y2hfcmVmcyhzdHJ1Y3QgcmVmICpzcmMsIHN0cnVjdCByZWYgKmRzdCwgc3RydWN0IHJlZiAqKipkc3RfdGFpbCwKK2ludCBtYXRjaF9yZWZzKHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqKmRzdCwKIAkgICAgICAgaW50IG5yX3JlZnNwZWMsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgYWxsKTsKIAogLyoKQEAgLTEzNyw0ICsxNDMsMTUgQEAKIGludCBzdGF0X3RyYWNraW5nX2luZm8oc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBpbnQgKm51bV9vdXJzLCBpbnQgKm51bV90aGVpcnMpOwogaW50IGZvcm1hdF90cmFja2luZ19pbmZvKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgc3RydWN0IHN0cmJ1ZiAqc2IpOwogCitzdHJ1Y3QgcmVmICpnZXRfbG9jYWxfaGVhZHModm9pZCk7CisvKgorICogRmluZCByZWZzIGZyb20gYSBsaXN0IHdoaWNoIGFyZSBsaWtlbHkgdG8gYmUgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4gSEVBRAorICogcmVmLiBJZiAnYWxsJyBpcyBmYWxzZSwgcmV0dXJucyB0aGUgbW9zdCBsaWtlbHkgcmVmOyBvdGhlcndpc2UsIHJldHVybnMgYQorICogbGlzdCBvZiBhbGwgY2FuZGlkYXRlIHJlZnMuIElmIG5vIG1hdGNoIGlzIGZvdW5kIChvciAnaGVhZCcgaXMgTlVMTCksCisgKiByZXR1cm5zIE5VTEwuIEFsbCByZXR1cm5zIGFyZSBuZXdseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBiZSBmcmVlZC4KKyAqLworc3RydWN0IHJlZiAqZ3Vlc3NfcmVtb3RlX2hlYWQoY29uc3Qgc3RydWN0IHJlZiAqaGVhZCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsCisJCQkgICAgICBpbnQgYWxsKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9yZXJlcmUuYyBiL3JlcmVyZS5jCmluZGV4IDcxOGZiNTIuLjg3MzYwZGMgMTAwNjQ0Ci0tLSBhL3JlcmVyZS5jCisrKyBiL3JlcmVyZS5jCkBAIC0xMiwxNSArMTIsMTUgQEAKIAogc3RhdGljIGNoYXIgKm1lcmdlX3JyX3BhdGg7CiAKLXN0YXRpYyBjb25zdCBjaGFyICpycl9wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZpbGUpCitjb25zdCBjaGFyICpyZXJlcmVfcGF0aChjb25zdCBjaGFyICpoZXgsIGNvbnN0IGNoYXIgKmZpbGUpCiB7Ci0JcmV0dXJuIGdpdF9wYXRoKCJyci1jYWNoZS8lcy8lcyIsIG5hbWUsIGZpbGUpOworCXJldHVybiBnaXRfcGF0aCgicnItY2FjaGUvJXMvJXMiLCBoZXgsIGZpbGUpOwogfQogCi1zdGF0aWMgaW50IGhhc19yZXNvbHV0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCitpbnQgaGFzX3JlcmVyZV9yZXNvbHV0aW9uKGNvbnN0IGNoYXIgKmhleCkKIHsKIAlzdHJ1Y3Qgc3RhdCBzdDsKLQlyZXR1cm4gIXN0YXQocnJfcGF0aChuYW1lLCAicG9zdGltYWdlIiksICZzdCk7CisJcmV0dXJuICFzdGF0KHJlcmVyZV9wYXRoKGhleCwgInBvc3RpbWFnZSIpLCAmc3QpOwogfQogCiBzdGF0aWMgdm9pZCByZWFkX3JyKHN0cnVjdCBzdHJpbmdfbGlzdCAqcnIpCkBAIC0xNzMsNyArMTczLDcgQEAKIAkJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmN0eCk7CiAJaWYgKGh1bmsgIT0gUlJfQ09OVEVYVCkgewogCQlpZiAob3V0cHV0KQotCQkJdW5saW5rKG91dHB1dCk7CisJCQl1bmxpbmtfb3Jfd2FybihvdXRwdXQpOwogCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBwYXJzZSBjb25mbGljdCBodW5rcyBpbiAlcyIsIHBhdGgpOwogCX0KIAlpZiAod3JlcnJvcikKQEAgLTIwOCwxMiArMjA4LDEyIEBACiAJbW1idWZmZXJfdCByZXN1bHQgPSB7TlVMTCwgMH07CiAJeHBwYXJhbV90IHhwcCA9IHtYREZfTkVFRF9NSU5JTUFMfTsKIAotCWlmIChoYW5kbGVfZmlsZShwYXRoLCBOVUxMLCBycl9wYXRoKG5hbWUsICJ0aGlzaW1hZ2UiKSkgPCAwKQorCWlmIChoYW5kbGVfZmlsZShwYXRoLCBOVUxMLCByZXJlcmVfcGF0aChuYW1lLCAidGhpc2ltYWdlIikpIDwgMCkKIAkJcmV0dXJuIDE7CiAKLQlpZiAocmVhZF9tbWZpbGUoJmN1ciwgcnJfcGF0aChuYW1lLCAidGhpc2ltYWdlIikpIHx8Ci0JCQlyZWFkX21tZmlsZSgmYmFzZSwgcnJfcGF0aChuYW1lLCAicHJlaW1hZ2UiKSkgfHwKLQkJCXJlYWRfbW1maWxlKCZvdGhlciwgcnJfcGF0aChuYW1lLCAicG9zdGltYWdlIikpKQorCWlmIChyZWFkX21tZmlsZSgmY3VyLCByZXJlcmVfcGF0aChuYW1lLCAidGhpc2ltYWdlIikpIHx8CisJCQlyZWFkX21tZmlsZSgmYmFzZSwgcmVyZXJlX3BhdGgobmFtZSwgInByZWltYWdlIikpIHx8CisJCQlyZWFkX21tZmlsZSgmb3RoZXIsIHJlcmVyZV9wYXRoKG5hbWUsICJwb3N0aW1hZ2UiKSkpCiAJCXJldHVybiAxOwogCXJldCA9IHhkbF9tZXJnZSgmYmFzZSwgJmN1ciwgIiIsICZvdGhlciwgIiIsCiAJCQkmeHBwLCBYRExfTUVSR0VfWkVBTE9VUywgJnJlc3VsdCk7CkBAIC0yOTAsOCArMjkwLDggQEAKIAkJCWhleCA9IHhzdHJkdXAoc2hhMV90b19oZXgoc2hhMSkpOwogCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KHBhdGgsIHJyKS0+dXRpbCA9IGhleDsKIAkJCWlmIChta2RpcihnaXRfcGF0aCgicnItY2FjaGUvJXMiLCBoZXgpLCAwNzU1KSkKLQkJCQljb250aW51ZTs7Ci0JCQloYW5kbGVfZmlsZShwYXRoLCBOVUxMLCBycl9wYXRoKGhleCwgInByZWltYWdlIikpOworCQkJCWNvbnRpbnVlOworCQkJaGFuZGxlX2ZpbGUocGF0aCwgTlVMTCwgcmVyZXJlX3BhdGgoaGV4LCAicHJlaW1hZ2UiKSk7CiAJCQlmcHJpbnRmKHN0ZGVyciwgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnXG4iLCBwYXRoKTsKIAkJfQogCX0KQEAgLTMwNyw3ICszMDcsNyBAQAogCQljb25zdCBjaGFyICpwYXRoID0gcnItPml0ZW1zW2ldLnN0cmluZzsKIAkJY29uc3QgY2hhciAqbmFtZSA9IChjb25zdCBjaGFyICopcnItPml0ZW1zW2ldLnV0aWw7CiAKLQkJaWYgKGhhc19yZXNvbHV0aW9uKG5hbWUpKSB7CisJCWlmIChoYXNfcmVyZXJlX3Jlc29sdXRpb24obmFtZSkpIHsKIAkJCWlmICghbWVyZ2UobmFtZSwgcGF0aCkpIHsKIAkJCQlpZiAocmVyZXJlX2F1dG91cGRhdGUpCiAJCQkJCXN0cmluZ19saXN0X2luc2VydChwYXRoLCAmdXBkYXRlKTsKQEAgLTMyNiw3ICszMjYsNyBAQAogCQkJY29udGludWU7CiAKIAkJZnByaW50ZihzdGRlcnIsICJSZWNvcmRlZCByZXNvbHV0aW9uIGZvciAnJXMnLlxuIiwgcGF0aCk7Ci0JCWNvcHlfZmlsZShycl9wYXRoKG5hbWUsICJwb3N0aW1hZ2UiKSwgcGF0aCwgMDY2Nik7CisJCWNvcHlfZmlsZShyZXJlcmVfcGF0aChuYW1lLCAicG9zdGltYWdlIiksIHBhdGgsIDA2NjYpOwogCW1hcmtfcmVzb2x2ZWQ6CiAJCXJyLT5pdGVtc1tpXS51dGlsID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9yZXJlcmUuaCBiL3JlcmVyZS5oCmluZGV4IGY5YjAzODYuLjEzMzEzZjMgMTAwNjQ0Ci0tLSBhL3JlcmVyZS5oCisrKyBiL3JlcmVyZS5oCkBAIC01LDUgKzUsNyBAQAogCiBleHRlcm4gaW50IHNldHVwX3JlcmVyZShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKik7CiBleHRlcm4gaW50IHJlcmVyZSh2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpyZXJlcmVfcGF0aChjb25zdCBjaGFyICpoZXgsIGNvbnN0IGNoYXIgKmZpbGUpOworZXh0ZXJuIGludCBoYXNfcmVyZXJlX3Jlc29sdXRpb24oY29uc3QgY2hhciAqaGV4KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9yZXZpc2lvbi5jIGIvcmV2aXNpb24uYwppbmRleCAzNGVlNDkwLi45ZjVkYWM1IDEwMDY0NAotLS0gYS9yZXZpc2lvbi5jCisrKyBiL3JldmlzaW9uLmMKQEAgLTE1LDkgKzE1LDkgQEAKIAogdm9sYXRpbGUgc2hvd19lYXJseV9vdXRwdXRfZm5fdCBzaG93X2Vhcmx5X291dHB1dDsKIAotc3RhdGljIGNoYXIgKnBhdGhfbmFtZShzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLCBjb25zdCBjaGFyICpuYW1lKQorY2hhciAqcGF0aF9uYW1lKGNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IG5hbWVfcGF0aCAqcDsKKwljb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICpwOwogCWNoYXIgKm4sICptOwogCWludCBubGVuID0gc3RybGVuKG5hbWUpOwogCWludCBsZW4gPSBubGVuICsgMTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogc3RhdGljIHZvaWQgYWRkX3BlbmRpbmdfb2JqZWN0X3dpdGhfbW9kZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbW9kZSkKIHsKIAlpZiAocmV2cy0+bm9fd2FsayAmJiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpKQotCQlkaWUoIm9iamVjdCByYW5nZXMgZG8gbm90IG1ha2Ugc2Vuc2Ugd2hlbiBub3Qgd2Fsa2luZyByZXZpc2lvbnMiKTsKKwkJcmV2cy0+bm9fd2FsayA9IDA7CiAJaWYgKHJldnMtPnJlZmxvZ19pbmZvICYmIG9iai0+dHlwZSA9PSBPQkpfQ09NTUlUICYmCiAJCQlhZGRfcmVmbG9nX2Zvcl93YWxrKHJldnMtPnJlZmxvZ19pbmZvLAogCQkJCShzdHJ1Y3QgY29tbWl0ICopb2JqLCBuYW1lKSkKQEAgLTIwOSw3ICsyMDksNyBAQAogCX0KIAogCS8qCi0JICogVHJlZSBvYmplY3Q/IEVpdGhlciBtYXJrIGl0IHVuaW5pdGVyZXN0aW5nLCBvciBhZGQgaXQKKwkgKiBUcmVlIG9iamVjdD8gRWl0aGVyIG1hcmsgaXQgdW5pbnRlcmVzdGluZywgb3IgYWRkIGl0CiAJICogdG8gdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBsb29rIGF0IGxhdGVyLi4KIAkgKi8KIAlpZiAob2JqZWN0LT50eXBlID09IE9CSl9UUkVFKSB7CkBAIC0yNTYsMTAgKzI1NiwxMiBAQAogCiAvKgogICogVGhlIGdvYWwgaXMgdG8gZ2V0IFJFVl9UUkVFX05FVyBhcyB0aGUgcmVzdWx0IG9ubHkgaWYgdGhlCi0gKiBkaWZmIGNvbnNpc3RzIG9mIGFsbCAnKycgKGFuZCBubyBvdGhlciBjaGFuZ2VzKSwgYW5kCi0gKiBSRVZfVFJFRV9ESUZGRVJFTlQgb3RoZXJ3aXNlIChvZiBjb3Vyc2UgaWYgdGhlIHRyZWVzIGFyZQotICogdGhlIHNhbWUgd2Ugd2FudCBSRVZfVFJFRV9TQU1FKS4gIFRoYXQgbWVhbnMgdGhhdCBvbmNlIHdlCi0gKiBnZXQgdG8gUkVWX1RSRUVfRElGRkVSRU5ULCB3ZSBkbyBub3QgaGF2ZSB0byBsb29rIGFueSBmdXJ0aGVyLgorICogZGlmZiBjb25zaXN0cyBvZiBhbGwgJysnIChhbmQgbm8gb3RoZXIgY2hhbmdlcyksIFJFVl9UUkVFX09MRAorICogaWYgdGhlIHdob2xlIGRpZmYgaXMgcmVtb3ZhbCBvZiBvbGQgZGF0YSwgYW5kIG90aGVyd2lzZQorICogUkVWX1RSRUVfRElGRkVSRU5UIChvZiBjb3Vyc2UgaWYgdGhlIHRyZWVzIGFyZSB0aGUgc2FtZSB3ZQorICogd2FudCBSRVZfVFJFRV9TQU1FKS4KKyAqIFRoYXQgbWVhbnMgdGhhdCBvbmNlIHdlIGdldCB0byBSRVZfVFJFRV9ESUZGRVJFTlQsIHdlIGRvIG5vdAorICogaGF2ZSB0byBsb29rIGFueSBmdXJ0aGVyLgogICovCiBzdGF0aWMgaW50IHRyZWVfZGlmZmVyZW5jZSA9IFJFVl9UUkVFX1NBTUU7CiAKQEAgLTI2OCwyMiArMjcwLDkgQEAKIAkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCiAJCSAgICBjb25zdCBjaGFyICpmdWxscGF0aCkKIHsKLQlpbnQgZGlmZiA9IFJFVl9UUkVFX0RJRkZFUkVOVDsKKwlpbnQgZGlmZiA9IGFkZHJlbW92ZSA9PSAnKycgPyBSRVZfVFJFRV9ORVcgOiBSRVZfVFJFRV9PTEQ7CiAKLQkvKgotCSAqIElzIGl0IGFuIGFkZCBvZiBhIG5ldyBmaWxlPyBJdCBtZWFucyB0aGF0IHRoZSBvbGQgdHJlZQotCSAqIGRpZG4ndCBoYXZlIGl0IGF0IGFsbCwgc28gd2Ugd2lsbCB0dXJuICJSRVZfVFJFRV9TQU1FIiAtPgotCSAqICJSRVZfVFJFRV9ORVciLCBidXQgbGVhdmUgYW55ICJSRVZfVFJFRV9ESUZGRVJFTlQiIGFsb25lCi0JICogKGFuZCBpZiBpdCBhbHJlYWR5IHdhcyAiUkVWX1RSRUVfTkVXIiwgd2UnbGwga2VlcCBpdAotCSAqICJSRVZfVFJFRV9ORVciIG9mIGNvdXJzZSkuCi0JICovCi0JaWYgKGFkZHJlbW92ZSA9PSAnKycpIHsKLQkJZGlmZiA9IHRyZWVfZGlmZmVyZW5jZTsKLQkJaWYgKGRpZmYgIT0gUkVWX1RSRUVfU0FNRSkKLQkJCXJldHVybjsKLQkJZGlmZiA9IFJFVl9UUkVFX05FVzsKLQl9Ci0JdHJlZV9kaWZmZXJlbmNlID0gZGlmZjsKKwl0cmVlX2RpZmZlcmVuY2UgfD0gZGlmZjsKIAlpZiAodHJlZV9kaWZmZXJlbmNlID09IFJFVl9UUkVFX0RJRkZFUkVOVCkKIAkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEhBU19DSEFOR0VTKTsKIH0KQEAgLTMwNSw2ICsyOTQsOCBAQAogCiAJaWYgKCF0MSkKIAkJcmV0dXJuIFJFVl9UUkVFX05FVzsKKwlpZiAoIXQyKQorCQlyZXR1cm4gUkVWX1RSRUVfT0xEOwogCiAJaWYgKHJldnMtPnNpbXBsaWZ5X2J5X2RlY29yYXRpb24pIHsKIAkJLyoKQEAgLTMyMyw4ICszMTQsNyBAQAogCQlpZiAoIXJldnMtPnBydW5lX2RhdGEpCiAJCQlyZXR1cm4gUkVWX1RSRUVfU0FNRTsKIAl9Ci0JaWYgKCF0MikKLQkJcmV0dXJuIFJFVl9UUkVFX0RJRkZFUkVOVDsKKwogCXRyZWVfZGlmZmVyZW5jZSA9IFJFVl9UUkVFX1NBTUU7CiAJRElGRl9PUFRfQ0xSKCZyZXZzLT5wcnVuaW5nLCBIQVNfQ0hBTkdFUyk7CiAJaWYgKGRpZmZfdHJlZV9zaGExKHQxLT5vYmplY3Quc2hhMSwgdDItPm9iamVjdC5zaGExLCAiIiwKQEAgLTQyOSw2ICs0MTksNyBAQAogCQkJCXAtPnBhcmVudHMgPSBOVUxMOwogCQkJfQogCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIFJFVl9UUkVFX09MRDoKIAkJY2FzZSBSRVZfVFJFRV9ESUZGRVJFTlQ6CiAJCQl0cmVlX2NoYW5nZWQgPSAxOwogCQkJcHAgPSAmcGFyZW50LT5uZXh0OwpAQCAtMTA4Niw2ICsxMDc3LDggQEAKIAkJcmV2cy0+c2hvd19hbGwgPSAxOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlbW92ZS1lbXB0eSIpKSB7CiAJCXJldnMtPnJlbW92ZV9lbXB0eV90cmVlcyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbWVyZ2VzIikpIHsKKwkJcmV2cy0+bWVyZ2VzX29ubHkgPSAxOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLW1lcmdlcyIpKSB7CiAJCXJldnMtPm5vX21lcmdlcyA9IDE7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYm91bmRhcnkiKSkgewpAQCAtMTEzMCw5ICsxMTIzLDEzIEBACiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcHJldHR5IikpIHsKIAkJcmV2cy0+dmVyYm9zZV9oZWFkZXIgPSAxOwogCQlnZXRfY29tbWl0X2Zvcm1hdChhcmcrOCwgcmV2cyk7Ci0JfSBlbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tcHJldHR5PSIpKSB7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tcHJldHR5PSIpIHx8ICFwcmVmaXhjbXAoYXJnLCAiLS1mb3JtYXQ9IikpIHsKIAkJcmV2cy0+dmVyYm9zZV9oZWFkZXIgPSAxOwogCQlnZXRfY29tbWl0X2Zvcm1hdChhcmcrOSwgcmV2cyk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tb25lbGluZSIpKSB7CisJCXJldnMtPnZlcmJvc2VfaGVhZGVyID0gMTsKKwkJZ2V0X2NvbW1pdF9mb3JtYXQoIm9uZWxpbmUiLCByZXZzKTsKKwkJcmV2cy0+YWJicmV2X2NvbW1pdCA9IDE7CiAJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZ3JhcGgiKSkgewogCQlyZXZzLT50b3BvX29yZGVyID0gMTsKIAkJcmV2cy0+cmV3cml0ZV9wYXJlbnRzID0gMTsKQEAgLTE2ODEsNiArMTY3OCw4IEBACiAJCXJldHVybiBjb21taXRfaWdub3JlOwogCWlmIChyZXZzLT5ub19tZXJnZXMgJiYgY29tbWl0LT5wYXJlbnRzICYmIGNvbW1pdC0+cGFyZW50cy0+bmV4dCkKIAkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CisJaWYgKHJldnMtPm1lcmdlc19vbmx5ICYmICEoY29tbWl0LT5wYXJlbnRzICYmIGNvbW1pdC0+cGFyZW50cy0+bmV4dCkpCisJCXJldHVybiBjb21taXRfaWdub3JlOwogCWlmICghY29tbWl0X21hdGNoKGNvbW1pdCwgcmV2cykpCiAJCXJldHVybiBjb21taXRfaWdub3JlOwogCWlmIChyZXZzLT5wcnVuZSAmJiByZXZzLT5kZW5zZSkgewpkaWZmIC0tZ2l0IGEvcmV2aXNpb24uaCBiL3JldmlzaW9uLmgKaW5kZXggNjZkMjExYS4uZmI3NDQ5MiAxMDA2NDQKLS0tIGEvcmV2aXNpb24uaAorKysgYi9yZXZpc2lvbi5oCkBAIC0zNiw2ICszNiw3IEBACiAJdW5zaWduZWQgaW50CWRlbnNlOjEsCiAJCQlwcnVuZToxLAogCQkJbm9fbWVyZ2VzOjEsCisJCQltZXJnZXNfb25seToxLAogCQkJbm9fd2FsazoxLAogCQkJc2hvd19hbGw6MSwKIAkJCXJlbW92ZV9lbXB0eV90cmVlczoxLApAQCAtODUsOCArODYsMTAgQEAKIAlzdHJ1Y3QgbG9nX2luZm8gKmxvZ2luZm87CiAJaW50CQluciwgdG90YWw7CiAJY29uc3QgY2hhcgkqbWltZV9ib3VuZGFyeTsKKwljb25zdCBjaGFyCSpwYXRjaF9zdWZmaXg7CisJaW50CQludW1iZXJlZF9maWxlczsKIAljaGFyCQkqbWVzc2FnZV9pZDsKLQljb25zdCBjaGFyCSpyZWZfbWVzc2FnZV9pZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZl9tZXNzYWdlX2lkczsKIAljb25zdCBjaGFyCSphZGRfc2lnbm9mZjsKIAljb25zdCBjaGFyCSpleHRyYV9oZWFkZXJzOwogCWNvbnN0IGNoYXIJKmxvZ19yZWVuY29kZTsKQEAgLTExNiw4ICsxMTksOSBAQAogfTsKIAogI2RlZmluZSBSRVZfVFJFRV9TQU1FCQkwCi0jZGVmaW5lIFJFVl9UUkVFX05FVwkJMQotI2RlZmluZSBSRVZfVFJFRV9ESUZGRVJFTlQJMgorI2RlZmluZSBSRVZfVFJFRV9ORVcJCTEJLyogT25seSBuZXcgZmlsZXMgKi8KKyNkZWZpbmUgUkVWX1RSRUVfT0xECQkyCS8qIE9ubHkgZmlsZXMgcmVtb3ZlZCAqLworI2RlZmluZSBSRVZfVFJFRV9ESUZGRVJFTlQJMwkvKiBNaXhlZCBjaGFuZ2VzICovCiAKIC8qIHJldmlzaW9uLmMgKi8KIHZvaWQgcmVhZF9yZXZpc2lvbnNfZnJvbV9zdGRpbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMpOwpAQCAtMTQ0LDYgKzE0OCw4IEBACiAJY29uc3QgY2hhciAqZWxlbTsKIH07CiAKK2NoYXIgKnBhdGhfbmFtZShjb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLCBjb25zdCBjaGFyICpuYW1lKTsKKwogZXh0ZXJuIHZvaWQgYWRkX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosCiAJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpwLAogCQkgICAgICAgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwKZGlmZiAtLWdpdCBhL3J1bi1jb21tYW5kLmMgYi9ydW4tY29tbWFuZC5jCmluZGV4IDQ0ZmNjYzkuLmZmM2Q4ZTIgMTAwNjQ0Ci0tLSBhL3J1bi1jb21tYW5kLmMKKysrIGIvcnVuLWNvbW1hbmQuYwpAQCAtMTAxLDEyICsxMDEsMTIgQEAKIAkJfQogCiAJCWlmIChjbWQtPmRpciAmJiBjaGRpcihjbWQtPmRpcikpCi0JCQlkaWUoImV4ZWMgJXM6IGNkIHRvICVzIGZhaWxlZCAoJXMpIiwgY21kLT5hcmd2WzBdLAotCQkJICAgIGNtZC0+ZGlyLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJleGVjICclcyc6IGNkIHRvICclcycgZmFpbGVkIiwgY21kLT5hcmd2WzBdLAorCQkJICAgIGNtZC0+ZGlyKTsKIAkJaWYgKGNtZC0+ZW52KSB7CiAJCQlmb3IgKDsgKmNtZC0+ZW52OyBjbWQtPmVudisrKSB7CiAJCQkJaWYgKHN0cmNocigqY21kLT5lbnYsICc9JykpCi0JCQkJCXB1dGVudigoY2hhciopKmNtZC0+ZW52KTsKKwkJCQkJcHV0ZW52KChjaGFyICopKmNtZC0+ZW52KTsKIAkJCQllbHNlCiAJCQkJCXVuc2V0ZW52KCpjbWQtPmVudik7CiAJCQl9CkBAIC0zNTIsMyArMzUyLDQ4IEBACiAjZW5kaWYKIAlyZXR1cm4gcmV0OwogfQorCitpbnQgcnVuX2hvb2soY29uc3QgY2hhciAqaW5kZXhfZmlsZSwgY29uc3QgY2hhciAqbmFtZSwgLi4uKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGhvb2s7CisJY29uc3QgY2hhciAqKmFyZ3YgPSBOVUxMLCAqZW52WzJdOworCWNoYXIgaW5kZXhbUEFUSF9NQVhdOworCXZhX2xpc3QgYXJnczsKKwlpbnQgcmV0OworCXNpemVfdCBpID0gMCwgYWxsb2MgPSAwOworCisJaWYgKGFjY2VzcyhnaXRfcGF0aCgiaG9va3MvJXMiLCBuYW1lKSwgWF9PSykgPCAwKQorCQlyZXR1cm4gMDsKKworCXZhX3N0YXJ0KGFyZ3MsIG5hbWUpOworCUFMTE9DX0dST1coYXJndiwgaSArIDEsIGFsbG9jKTsKKwlhcmd2W2krK10gPSBnaXRfcGF0aCgiaG9va3MvJXMiLCBuYW1lKTsKKwl3aGlsZSAoYXJndltpLTFdKSB7CisJCUFMTE9DX0dST1coYXJndiwgaSArIDEsIGFsbG9jKTsKKwkJYXJndltpKytdID0gdmFfYXJnKGFyZ3MsIGNvbnN0IGNoYXIgKik7CisJfQorCXZhX2VuZChhcmdzKTsKKworCW1lbXNldCgmaG9vaywgMCwgc2l6ZW9mKGhvb2spKTsKKwlob29rLmFyZ3YgPSBhcmd2OworCWhvb2subm9fc3RkaW4gPSAxOworCWhvb2suc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJaWYgKGluZGV4X2ZpbGUpIHsKKwkJc25wcmludGYoaW5kZXgsIHNpemVvZihpbmRleCksICJHSVRfSU5ERVhfRklMRT0lcyIsIGluZGV4X2ZpbGUpOworCQllbnZbMF0gPSBpbmRleDsKKwkJZW52WzFdID0gTlVMTDsKKwkJaG9vay5lbnYgPSBlbnY7CisJfQorCisJcmV0ID0gc3RhcnRfY29tbWFuZCgmaG9vayk7CisJZnJlZShhcmd2KTsKKwlpZiAocmV0KSB7CisJCXdhcm5pbmcoIkNvdWxkIG5vdCBzcGF3biAlcyIsIGFyZ3ZbMF0pOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBmaW5pc2hfY29tbWFuZCgmaG9vayk7CisJaWYgKHJldCA9PSAtRVJSX1JVTl9DT01NQU5EX1dBSVRQSURfU0lHTkFMKQorCQl3YXJuaW5nKCIlcyBleGl0ZWQgZHVlIHRvIHVuY2F1Z2h0IHNpZ25hbCIsIGFyZ3ZbMF0pOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3J1bi1jb21tYW5kLmggYi9ydW4tY29tbWFuZC5oCmluZGV4IGU5MGQ5MjguLmUzNDU1MDIgMTAwNjQ0Ci0tLSBhL3J1bi1jb21tYW5kLmgKKysrIGIvcnVuLWNvbW1hbmQuaApAQCAtMTAsNyArMTAsNyBAQAogCUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX1NJR05BTCwKIAlFUlJfUlVOX0NPTU1BTkRfV0FJVFBJRF9OT0VYSVQsCiB9OwotI2RlZmluZSBJU19SVU5fQ09NTUFORF9FUlIoeCkgKCh4KSA8PSAtRVJSX1JVTl9DT01NQU5EX0ZPUkspCisjZGVmaW5lIElTX1JVTl9DT01NQU5EX0VSUih4KSAoLSh4KSA+PSBFUlJfUlVOX0NPTU1BTkRfRk9SSykKIAogc3RydWN0IGNoaWxkX3Byb2Nlc3MgewogCWNvbnN0IGNoYXIgKiphcmd2OwpAQCAtNTAsNiArNTAsOCBAQAogaW50IGZpbmlzaF9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOwogaW50IHJ1bl9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOwogCitleHRlcm4gaW50IHJ1bl9ob29rKGNvbnN0IGNoYXIgKmluZGV4X2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIC4uLik7CisKICNkZWZpbmUgUlVOX0NPTU1BTkRfTk9fU1RESU4gMQogI2RlZmluZSBSVU5fR0lUX0NNRAkgICAgIDIJLypJZiB0aGlzIGlzIHRvIGJlIGdpdCBzdWItY29tbWFuZCAqLwogI2RlZmluZSBSVU5fQ09NTUFORF9TVERPVVRfVE9fU1RERVJSIDQKZGlmZiAtLWdpdCBhL3NlbmQtcGFjay5oIGIvc2VuZC1wYWNrLmgKaW5kZXggOGZmMWRjMy4uMWQ3YjFiMyAxMDA2NDQKLS0tIGEvc2VuZC1wYWNrLmgKKysrIGIvc2VuZC1wYWNrLmgKQEAgLTIsMTcgKzIsMTYgQEAKICNkZWZpbmUgU0VORF9QQUNLX0gKIAogc3RydWN0IHNlbmRfcGFja19hcmdzIHsKLQljb25zdCBjaGFyICpyZWNlaXZlcGFjazsKIAl1bnNpZ25lZCB2ZXJib3NlOjEsCi0JCXNlbmRfYWxsOjEsCiAJCXNlbmRfbWlycm9yOjEsCiAJCWZvcmNlX3VwZGF0ZToxLAogCQl1c2VfdGhpbl9wYWNrOjEsCisJCXVzZV9vZnNfZGVsdGE6MSwKIAkJZHJ5X3J1bjoxOwogfTsKIAogaW50IHNlbmRfcGFjayhzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgKmFyZ3MsCi0JICAgICAgY29uc3QgY2hhciAqZGVzdCwgc3RydWN0IHJlbW90ZSAqcmVtb3RlLAotCSAgICAgIGludCBucl9oZWFkcywgY29uc3QgY2hhciAqKmhlYWRzKTsKKwkgICAgICBpbnQgZmRbXSwgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4sCisJICAgICAgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsIHN0cnVjdCBleHRyYV9oYXZlX29iamVjdHMgKmV4dHJhX2hhdmUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NlcnZlci1pbmZvLmMgYi9zZXJ2ZXItaW5mby5jCmluZGV4IDY2YjBkOWQuLjQwOThjYTIgMTAwNjQ0Ci0tLSBhL3NlcnZlci1pbmZvLmMKKysrIGIvc2VydmVyLWluZm8uYwpAQCAtMTMyLDggKzEzMiw4IEBACiAKIHN0YXRpYyBpbnQgY29tcGFyZV9pbmZvKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKIHsKLQlzdHJ1Y3QgcGFja19pbmZvICogY29uc3QqIGEgPSBhXzsKLQlzdHJ1Y3QgcGFja19pbmZvICogY29uc3QqIGIgPSBiXzsKKwlzdHJ1Y3QgcGFja19pbmZvICpjb25zdCAqYSA9IGFfOworCXN0cnVjdCBwYWNrX2luZm8gKmNvbnN0ICpiID0gYl87CiAKIAlpZiAoMCA8PSAoKmEpLT5vbGRfbnVtICYmIDAgPD0gKCpiKS0+b2xkX251bSkKIAkJLyogS2VlcCB0aGUgb3JkZXIgaW4gdGhlIG9yaWdpbmFsICovCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAllcnJzID0gZXJycyB8IHVwZGF0ZV9pbmZvX3BhY2tzKGZvcmNlKTsKIAogCS8qIHJlbW92ZSBsZWZ0b3ZlciByZXYtY2FjaGUgZmlsZSBpZiB0aGVyZSBpcyBhbnkgKi8KLQl1bmxpbmsoZ2l0X3BhdGgoImluZm8vcmV2LWNhY2hlIikpOworCXVubGlua19vcl93YXJuKGdpdF9wYXRoKCJpbmZvL3Jldi1jYWNoZSIpKTsKIAogCXJldHVybiBlcnJzOwogfQpkaWZmIC0tZ2l0IGEvc2V0dXAuYyBiL3NldHVwLmMKaW5kZXggNmMyZGVkYS4uZTM3ODFiNiAxMDA2NDQKLS0tIGEvc2V0dXAuYworKysgYi9zZXR1cC5jCkBAIC04MSw3ICs4MSw3IEBACiAJaWYgKGVycm5vID09IEVOT0VOVCkKIAkJZGllKCJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogdW5rbm93biByZXZpc2lvbiBvciBwYXRoIG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgogCQkgICAgIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zIiwgYXJnKTsKLQlkaWUoIiclcyc6ICVzIiwgYXJnLCBzdHJlcnJvcihlcnJubykpOworCWRpZV9lcnJubygiZmFpbGVkIHRvIHN0YXQgJyVzJyIsIGFyZyk7CiB9CiAKIC8qCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJZGllKCJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWVcbiIKIAkJICAgICJVc2UgJy0tJyB0byBzZXBhcmF0ZSBmaWxlbmFtZXMgZnJvbSByZXZpc2lvbnMiLCBhcmcpOwogCWlmIChlcnJubyAhPSBFTk9FTlQgJiYgZXJybm8gIT0gRU5PVERJUikKLQkJZGllKCInJXMnOiAlcyIsIGFyZywgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJmYWlsZWQgdG8gc3RhdCAnJXMnIiwgYXJnKTsKIH0KIAogY29uc3QgY2hhciAqKmdldF9wYXRoc3BlYyhjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKipwYXRoc3BlYykKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwogCWlmIChmZCA8IDApCi0JCWRpZSgiRXJyb3Igb3BlbmluZyAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIkVycm9yIG9wZW5pbmcgJyVzJyIsIHBhdGgpOwogCWJ1ZiA9IHhtYWxsb2Moc3Quc3Rfc2l6ZSArIDEpOwogCWxlbiA9IHJlYWRfaW5fZnVsbChmZCwgYnVmLCBzdC5zdF9zaXplKTsKIAljbG9zZShmZCk7CkBAIC0zMjcsNyArMzI3LDcgQEAKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCXNldF9naXRfZGlyKG1ha2VfYWJzb2x1dGVfcGF0aChnaXRkaXJlbnYpKTsKIAkJCWlmIChjaGRpcih3b3JrX3RyZWVfZW52KSA8IDApCi0JCQkJZGllICgiQ291bGQgbm90IGNoZGlyIHRvICVzIiwgd29ya190cmVlX2Vudik7CisJCQkJZGllX2Vycm5vICgiQ291bGQgbm90IGNoZGlyIHRvICclcyciLCB3b3JrX3RyZWVfZW52KTsKIAkJCXN0cmNhdChidWZmZXIsICIvIik7CiAJCQlyZXR1cm4gcmV0dmFsOwogCQl9CkBAIC0zMzksNyArMzM5LDcgQEAKIAl9CiAKIAlpZiAoIWdldGN3ZChjd2QsIHNpemVvZihjd2QpLTEpKQotCQlkaWUoIlVuYWJsZSB0byByZWFkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKKwkJZGllX2Vycm5vKCJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CiAKIAljZWlsX29mZnNldCA9IGxvbmdlc3RfYW5jZXN0b3JfbGVuZ3RoKGN3ZCwgZW52X2NlaWxpbmdfZGlycyk7CiAJaWYgKGNlaWxfb2Zmc2V0IDwgMCAmJiBoYXNfZG9zX2RyaXZlX3ByZWZpeChjd2QpKQpAQCAtMzgyLDE0ICszODIsMTQgQEAKIAkJaWYgKG9mZnNldCA8PSBjZWlsX29mZnNldCkgewogCQkJaWYgKG5vbmdpdF9vaykgewogCQkJCWlmIChjaGRpcihjd2QpKQotCQkJCQlkaWUoIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIik7CisJCQkJCWRpZV9lcnJubygiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiKTsKIAkJCQkqbm9uZ2l0X29rID0gMTsKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KIAkJCWRpZSgiTm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzKTogJXMiLCBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQpOwogCQl9CiAJCWlmIChjaGRpcigiLi4iKSkKLQkJCWRpZSgiQ2Fubm90IGNoYW5nZSB0byAlcy8uLjogJXMiLCBjd2QsIHN0cmVycm9yKGVycm5vKSk7CisJCQlkaWVfZXJybm8oIkNhbm5vdCBjaGFuZ2UgdG8gJyVzLy4uJyIsIGN3ZCk7CiAJfQogCiAJaW5zaWRlX2dpdF9kaXIgPSAwOwpAQCAtNDM0LDcgKzQzNCw3IEBACiAKIAkvKgogCSAqIFRyZWF0IHZhbHVlcyAwLCAxIGFuZCAyIGFzIGNvbXBhdGliaWxpdHkgY2FzZXMsIG90aGVyd2lzZSBpdCBpcwotCSAqIGEgY2htb2QgdmFsdWUuCisJICogYSBjaG1vZCB2YWx1ZSB0byByZXN0cmljdCB0by4KIAkgKi8KIAlzd2l0Y2ggKGkpIHsKIAljYXNlIFBFUk1fVU1BU0s6ICAgICAgICAgICAgICAgLyogMCAqLwpAQCAtNDU2LDcgKzQ1Niw3IEBACiAJICogTWFzayBmaWxlbW9kZSB2YWx1ZS4gT3RoZXJzIGNhbiBub3QgZ2V0IHdyaXRlIHBlcm1pc3Npb24uCiAJICogeCBmbGFncyBmb3IgZGlyZWN0b3JpZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseS4KIAkgKi8KLQlyZXR1cm4gaSAmIDA2NjY7CisJcmV0dXJuIC0oaSAmIDA2NjYpOwogfQogCiBpbnQgY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKQEAgLTQ5MywxMCArNDkzLDEwIEBACiAJCXN0YXRpYyBjaGFyIGJ1ZmZlcltQQVRIX01BWCArIDFdOwogCQljaGFyICpyZWw7CiAJCWlmIChyZXR2YWwgJiYgY2hkaXIocmV0dmFsKSkKLQkJCWRpZSAoIkNvdWxkIG5vdCBqdW1wIGJhY2sgaW50byBvcmlnaW5hbCBjd2QiKTsKKwkJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCBqdW1wIGJhY2sgaW50byBvcmlnaW5hbCBjd2QiKTsKIAkJcmVsID0gZ2V0X3JlbGF0aXZlX2N3ZChidWZmZXIsIFBBVEhfTUFYLCBnZXRfZ2l0X3dvcmtfdHJlZSgpKTsKIAkJaWYgKHJlbCAmJiAqcmVsICYmIGNoZGlyKGdldF9naXRfd29ya190cmVlKCkpKQotCQkJZGllICgiQ291bGQgbm90IGp1bXAgdG8gd29ya2luZyBkaXJlY3RvcnkiKTsKKwkJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCBqdW1wIHRvIHdvcmtpbmcgZGlyZWN0b3J5Iik7CiAJCXJldHVybiByZWwgJiYgKnJlbCA/IHN0cmNhdChyZWwsICIvIikgOiBOVUxMOwogCX0KIApkaWZmIC0tZ2l0IGEvc2hhMS1sb29rdXAuYyBiL3NoYTEtbG9va3VwLmMKaW5kZXggZGEzNTc0Ny4uYzRkYzU1ZCAxMDA2NDQKLS0tIGEvc2hhMS1sb29rdXAuYworKysgYi9zaGExLWxvb2t1cC5jCkBAIC0xLDYgKzEsMTA3IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgogCitzdGF0aWMgdWludDMyX3QgdGFrZTIoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gKChzaGExWzBdIDw8IDgpIHwgc2hhMVsxXSk7Cit9CisKKy8qCisgKiBDb252ZW50aW9uYWwgYmluYXJ5IHNlYXJjaCBsb29wIGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKiAgICAgIGRvIHsKKyAqICAgICAgICAgICAgICBpbnQgbWkgPSAobG8gKyBoaSkgLyAyOworICogICAgICAgICAgICAgIGludCBjbXAgPSAiZW50cnkgcG9pbnRlZCBhdCBieSBtaSIgbWludXMgInRhcmdldCI7CisgKiAgICAgICAgICAgICAgaWYgKCFjbXApCisgKiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1pIGlzIHRoZSB3YW50ZWQgb25lKQorICogICAgICAgICAgICAgIGlmIChjbXAgPiAwKQorICogICAgICAgICAgICAgICAgICAgICAgaGkgPSBtaTsgIm1pIGlzIGxhcmdlciB0aGFuIHRhcmdldCIKKyAqICAgICAgICAgICAgICBlbHNlCisgKiAgICAgICAgICAgICAgICAgICAgICBsbyA9IG1pKzE7ICJtaSBpcyBzbWFsbGVyIHRoYW4gdGFyZ2V0IgorICogICAgICB9IHdoaWxlIChsbyA8IGhpKTsKKyAqCisgKiBUaGUgaW52YXJpYW50cyBhcmU6CisgKgorICogLSBXaGVuIGVudGVyaW5nIHRoZSBsb29wLCBsbyBwb2ludHMgYXQgYSBzbG90IHRoYXQgaXMgbmV2ZXIKKyAqICAgYWJvdmUgdGhlIHRhcmdldCAoaXQgY291bGQgYmUgYXQgdGhlIHRhcmdldCksIGhpIHBvaW50cyBhdCBhCisgKiAgIHNsb3QgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGFib3ZlIHRoZSB0YXJnZXQgKGl0IGNhbiBuZXZlcgorICogICBiZSBhdCB0aGUgdGFyZ2V0KS4KKyAqCisgKiAtIFdlIGZpbmQgYSBwb2ludCAnbWknIGJldHdlZW4gbG8gYW5kIGhpIChtaSBjb3VsZCBiZSB0aGUgc2FtZQorICogICBhcyBsbywgYnV0IG5ldmVyIGNhbiBiZSB0aGUgc2FtZSBhcyBoaSksIGFuZCBjaGVjayBpZiBpdCBoaXRzCisgKiAgIHRoZSB0YXJnZXQuICBUaGVyZSBhcmUgdGhyZWUgY2FzZXM6CisgKgorICogICAgLSBpZiBpdCBpcyBhIGhpdCwgd2UgYXJlIGhhcHB5LgorICoKKyAqICAgIC0gaWYgaXQgaXMgc3RyaWN0bHkgaGlnaGVyIHRoYW4gdGhlIHRhcmdldCwgd2UgdXBkYXRlIGhpIHdpdGgKKyAqICAgICAgaXQuCisgKgorICogICAgLSBpZiBpdCBpcyBzdHJpY3RseSBsb3dlciB0aGFuIHRoZSB0YXJnZXQsIHdlIHVwZGF0ZSBsbyB0byBiZQorICogICAgICBvbmUgc2xvdCBhZnRlciBpdCwgYmVjYXVzZSB3ZSBhbGxvdyBsbyB0byBiZSBhdCB0aGUgdGFyZ2V0LgorICoKKyAqIFdoZW4gY2hvb3NpbmcgJ21pJywgd2UgZG8gbm90IGhhdmUgdG8gdGFrZSB0aGUgIm1pZGRsZSIgYnV0CisgKiBhbnl3aGVyZSBpbiBiZXR3ZWVuIGxvIGFuZCBoaSwgYXMgbG9uZyBhcyBsbyA8PSBtaSA8IGhpIGlzCisgKiBzYXRpc2ZpZWQuICBXaGVuIHdlIHNvbWVob3cga25vdyB0aGF0IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZQorICogdGFyZ2V0IGFuZCBsbyBpcyBtdWNoIHNob3J0ZXIgdGhhbiB0aGUgdGFyZ2V0IGFuZCBoaSwgd2UgY291bGQKKyAqIHBpY2sgbWkgdGhhdCBpcyBtdWNoIGNsb3NlciB0byBsbyB0aGFuIHRoZSBtaWR3YXkuCisgKi8KKy8qCisgKiBUaGUgdGFibGUgc2hvdWxkIGNvbnRhaW4gIm5yIiBlbGVtZW50cy4KKyAqIFRoZSBzaGExIG9mIGVsZW1lbnQgaSAoYmV0d2VlbiAwIGFuZCBuciAtIDEpIHNob3VsZCBiZSByZXR1cm5lZAorICogYnkgImZuKGksIHRhYmxlKSIuCisgKi8KK2ludCBzaGExX3Bvcyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICp0YWJsZSwgc2l6ZV90IG5yLAorCSAgICAgc2hhMV9hY2Nlc3NfZm4gZm4pCit7CisJc2l6ZV90IGhpID0gbnI7CisJc2l6ZV90IGxvID0gMDsKKwlzaXplX3QgbWkgPSAwOworCisJaWYgKCFucikKKwkJcmV0dXJuIC0xOworCisJaWYgKG5yICE9IDEpIHsKKwkJc2l6ZV90IGxvdiwgaGl2LCBtaXYsIG9mczsKKworCQlmb3IgKG9mcyA9IDA7IG9mcyA8IDE4OyBvZnMgKz0gMikgeworCQkJbG92ID0gdGFrZTIoZm4oMCwgdGFibGUpICsgb2ZzKTsKKwkJCWhpdiA9IHRha2UyKGZuKG5yIC0gMSwgdGFibGUpICsgb2ZzKTsKKwkJCW1pdiA9IHRha2UyKHNoYTEgKyBvZnMpOworCQkJaWYgKG1pdiA8IGxvdikKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoaGl2IDwgbWl2KQorCQkJCXJldHVybiAtMSAtIG5yOworCQkJaWYgKGxvdiAhPSBoaXYpIHsKKwkJCQkvKgorCQkJCSAqIEF0IHRoaXMgcG9pbnQgbWl2IGNvdWxkIGJlIGVxdWFsCisJCQkJICogdG8gaGl2IChidXQgc2hhMSBjb3VsZCBzdGlsbCBiZSBoaWdoZXIpOworCQkJCSAqIHRoZSBpbnZhcmlhbnQgb2YgKG1pIDwgaGkpIHNob3VsZCBiZQorCQkJCSAqIGtlcHQuCisJCQkJICovCisJCQkJbWkgPSAobnIgLSAxKSAqIChtaXYgLSBsb3YpIC8gKGhpdiAtIGxvdik7CisJCQkJaWYgKGxvIDw9IG1pICYmIG1pIDwgaGkpCisJCQkJCWJyZWFrOworCQkJCWRpZSgiQlVHOiBhc3NlcnRpb24gZmFpbGVkIGluIGJpbmFyeSBzZWFyY2giKTsKKwkJCX0KKwkJfQorCQlpZiAoMTggPD0gb2ZzKQorCQkJZGllKCJjYW5ub3QgaGFwcGVuIC0tIGxvIGFuZCBoaSBhcmUgaWRlbnRpY2FsIik7CisJfQorCisJZG8geworCQlpbnQgY21wOworCQljbXAgPSBoYXNoY21wKGZuKG1pLCB0YWJsZSksIHNoYTEpOworCQlpZiAoIWNtcCkKKwkJCXJldHVybiBtaTsKKwkJaWYgKGNtcCA+IDApCisJCQloaSA9IG1pOworCQllbHNlCisJCQlsbyA9IG1pICsgMTsKKwkJbWkgPSAoaGkgKyBsbykgLyAyOworCX0gd2hpbGUgKGxvIDwgaGkpOworCXJldHVybiAtbG8tMTsKK30KKwogLyoKICAqIENvbnZlbnRpb25hbCBiaW5hcnkgc2VhcmNoIGxvb3AgbG9va3MgbGlrZSB0aGlzOgogICoKZGlmZiAtLWdpdCBhL3NoYTEtbG9va3VwLmggYi9zaGExLWxvb2t1cC5oCmluZGV4IDMyNDlhODEuLjIwYWYyODUgMTAwNjQ0Ci0tLSBhL3NoYTEtbG9va3VwLmgKKysrIGIvc2hhMS1sb29rdXAuaApAQCAtMSw2ICsxLDEzIEBACiAjaWZuZGVmIFNIQTFfTE9PS1VQX0gKICNkZWZpbmUgU0hBMV9MT09LVVBfSAogCit0eXBlZGVmIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTFfYWNjZXNzX2ZuKHNpemVfdCBpbmRleCwgdm9pZCAqdGFibGUpOworCitleHRlcm4gaW50IHNoYTFfcG9zKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCSAgICB2b2lkICp0YWJsZSwKKwkJICAgIHNpemVfdCBuciwKKwkJICAgIHNoYTFfYWNjZXNzX2ZuIGZuKTsKKwogZXh0ZXJuIGludCBzaGExX2VudHJ5X3Bvcyhjb25zdCB2b2lkICp0YWJsZSwKIAkJCSAgc2l6ZV90IGVsZW1fc2l6ZSwKIAkJCSAgc2l6ZV90IGtleV9vZmZzZXQsCmRpZmYgLS1naXQgYS9zaGExX2ZpbGUuYyBiL3NoYTFfZmlsZS5jCmluZGV4IDIzMjA0MDAuLjFkOTk2YTEgMTAwNjQ0Ci0tLSBhL3NoYTFfZmlsZS5jCisrKyBiL3NoYTFfZmlsZS5jCkBAIC03MjAsNiArNzIwLDggQEAKIAkJcmV0dXJuIGVycm9yKCJwYWNrZmlsZSAlcyBpbmRleCB1bmF2YWlsYWJsZSIsIHAtPnBhY2tfbmFtZSk7CiAKIAlwLT5wYWNrX2ZkID0gb3BlbihwLT5wYWNrX25hbWUsIE9fUkRPTkxZKTsKKwl3aGlsZSAocC0+cGFja19mZCA8IDAgJiYgZXJybm8gPT0gRU1GSUxFICYmIHVudXNlX29uZV93aW5kb3cocCwgLTEpKQorCQlwLT5wYWNrX2ZkID0gb3BlbihwLT5wYWNrX25hbWUsIE9fUkRPTkxZKTsKIAlpZiAocC0+cGFja19mZCA8IDAgfHwgZnN0YXQocC0+cGFja19mZCwgJnN0KSkKIAkJcmV0dXJuIC0xOwogCkBAIC03OTEsNyArNzkzLDcgQEAKIAkJJiYgKG9mZnNldCArIDIwKSA8PSAod2luX29mZiArIHdpbi0+bGVuKTsKIH0KIAotdW5zaWduZWQgY2hhciogdXNlX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKnAsCit1bnNpZ25lZCBjaGFyICp1c2VfcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKIAkJc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzb3IsCiAJCW9mZl90IG9mZnNldCwKIAkJdW5zaWduZWQgaW50ICpsZWZ0KQpAQCAtODAxLDcgKzgwMyw3IEBACiAJaWYgKHAtPnBhY2tfZmQgPT0gLTEgJiYgb3Blbl9wYWNrZWRfZ2l0KHApKQogCQlkaWUoInBhY2tmaWxlICVzIGNhbm5vdCBiZSBhY2Nlc3NlZCIsIHAtPnBhY2tfbmFtZSk7CiAKLQkvKiBTaW5jZSBwYWNrZmlsZXMgZW5kIGluIGEgaGFzaCBvZiB0aGVpciBjb250ZW50IGFuZCBpdHMKKwkvKiBTaW5jZSBwYWNrZmlsZXMgZW5kIGluIGEgaGFzaCBvZiB0aGVpciBjb250ZW50IGFuZCBpdCdzCiAJICogcG9pbnRsZXNzIHRvIGFzayBmb3IgYW4gb2Zmc2V0IGludG8gdGhlIG1pZGRsZSBvZiB0aGF0CiAJICogaGFzaCwgYW5kIHRoZSBpbl93aW5kb3cgZnVuY3Rpb24gYWJvdmUgd291bGRuJ3QgbWF0Y2gKIAkgKiBkb24ndCBhbGxvdyBhbiBvZmZzZXQgdG9vIGNsb3NlIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuCkBAIC05MzcsNiArOTM5LDggQEAKIAlzcHJpbnRmKHBhdGgsICIlcy9wYWNrIiwgb2JqZGlyKTsKIAlsZW4gPSBzdHJsZW4ocGF0aCk7CiAJZGlyID0gb3BlbmRpcihwYXRoKTsKKwl3aGlsZSAoIWRpciAmJiBlcnJubyA9PSBFTUZJTEUgJiYgdW51c2Vfb25lX3dpbmRvdyhwYWNrZWRfZ2l0LCAtMSkpCisJCWRpciA9IG9wZW5kaXIocGF0aCk7CiAJaWYgKCFkaXIpIHsKIAkJaWYgKGVycm5vICE9IEVOT0VOVCkKIAkJCWVycm9yKCJ1bmFibGUgdG8gb3BlbiBvYmplY3QgcGFjayBkaXJlY3Rvcnk6ICVzOiAlcyIsCkBAIC0xMTU4LDggKzExNjIsNyBAQAogCQl1bnNpZ25lZCBsb25nIGxlbiwgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyAqc2l6ZXApCiB7CiAJdW5zaWduZWQgc2hpZnQ7Ci0JdW5zaWduZWQgY2hhciBjOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHNpemUsIGM7CiAJdW5zaWduZWQgbG9uZyB1c2VkID0gMDsKIAogCWMgPSBidWZbdXNlZCsrXTsKQEAgLTExNjcsNyArMTE3MCw3IEBACiAJc2l6ZSA9IGMgJiAxNTsKIAlzaGlmdCA9IDQ7CiAJd2hpbGUgKGMgJiAweDgwKSB7Ci0JCWlmIChsZW4gPD0gdXNlZCB8fCBzaXplb2YobG9uZykgKiA4IDw9IHNoaWZ0KSB7CisJCWlmIChsZW4gPD0gdXNlZCB8fCBiaXRzaXplb2YobG9uZykgPD0gc2hpZnQpIHsKIAkJCWVycm9yKCJiYWQgb2JqZWN0IGhlYWRlciIpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTE3MDgsNiArMTcxMSw5IEBACiAJZGVsdGFfYmFzZV9jYWNoZV9scnUucHJldiA9ICZlbnQtPmxydTsKIH0KIAorc3RhdGljIHZvaWQgKnJlYWRfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCisJCQkgdW5zaWduZWQgbG9uZyAqc2l6ZSk7CisKIHN0YXRpYyB2b2lkICp1bnBhY2tfZGVsdGFfZW50cnkoc3RydWN0IHBhY2tlZF9naXQgKnAsCiAJCQkJc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAogCQkJCW9mZl90IGN1cnBvcywKQEAgLTIxMTEsOCArMjExNyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgKnJlYWRfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCi0JCSAgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3N0YXRpYyB2b2lkICpyZWFkX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLAorCQkJIHVuc2lnbmVkIGxvbmcgKnNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBtYXBzaXplOwogCXZvaWQgKm1hcCwgKmJ1ZjsKQEAgLTIyMTMsMTIgKzIyMTksMTggQEAKIH0KIAogLyoKLSAqIE1vdmUgdGhlIGp1c3Qgd3JpdHRlbiBvYmplY3QgaW50byBpdHMgZmluYWwgcmVzdGluZyBwbGFjZQorICogTW92ZSB0aGUganVzdCB3cml0dGVuIG9iamVjdCBpbnRvIGl0cyBmaW5hbCByZXN0aW5nIHBsYWNlLgorICogTkVFRFNXT1JLOiB0aGlzIHNob3VsZCBiZSByZW5hbWVkIHRvIGZpbmFsaXplX3RlbXBfZmlsZSgpIGFzCisgKiAibW92aW5nIiBpcyBvbmx5IGEgcGFydCBvZiB3aGF0IGl0IGRvZXMsIHdoZW4gbm8gcGF0Y2ggYmV0d2VlbgorICogbWFzdGVyIHRvIHB1IGNoYW5nZXMgdGhlIGNhbGwgc2l0ZXMgb2YgdGhpcyBmdW5jdGlvbi4KICAqLwogaW50IG1vdmVfdGVtcF90b19maWxlKGNvbnN0IGNoYXIgKnRtcGZpbGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogCWludCByZXQgPSAwOwotCWlmIChsaW5rKHRtcGZpbGUsIGZpbGVuYW1lKSkKKworCWlmIChvYmplY3RfY3JlYXRpb25fbW9kZSA9PSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTKQorCQlnb3RvIHRyeV9yZW5hbWU7CisJZWxzZSBpZiAobGluayh0bXBmaWxlLCBmaWxlbmFtZSkpCiAJCXJldCA9IGVycm5vOwogCiAJLyoKQEAgLTIyMjksMTUgKzIyNDEsMTYgQEAKIAkgKgogCSAqIFRoZSBzYW1lIGhvbGRzIGZvciBGQVQgZm9ybWF0dGVkIG1lZGlhLgogCSAqCi0JICogV2hlbiB0aGlzIHN1Y2NlZWRzLCB3ZSBqdXN0IHJldHVybiAwLiBXZSBoYXZlIG5vdGhpbmcKKwkgKiBXaGVuIHRoaXMgc3VjY2VlZHMsIHdlIGp1c3QgcmV0dXJuLiAgV2UgaGF2ZSBub3RoaW5nCiAJICogbGVmdCB0byB1bmxpbmsuCiAJICovCiAJaWYgKHJldCAmJiByZXQgIT0gRUVYSVNUKSB7CisJdHJ5X3JlbmFtZToKIAkJaWYgKCFyZW5hbWUodG1wZmlsZSwgZmlsZW5hbWUpKQotCQkJcmV0dXJuIDA7CisJCQlnb3RvIG91dDsKIAkJcmV0ID0gZXJybm87CiAJfQotCXVubGluayh0bXBmaWxlKTsKKwl1bmxpbmtfb3Jfd2Fybih0bXBmaWxlKTsKIAlpZiAocmV0KSB7CiAJCWlmIChyZXQgIT0gRUVYSVNUKSB7CiAJCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byB3cml0ZSBzaGExIGZpbGVuYW1lICVzOiAlc1xuIiwgZmlsZW5hbWUsIHN0cmVycm9yKHJldCkpOwpAQCAtMjI0NSw2ICsyMjU4LDkgQEAKIAkJLyogRklYTUUhISEgQ29sbGlzaW9uIGNoZWNrIGhlcmUgPyAqLwogCX0KIAorb3V0OgorCWlmIChzZXRfc2hhcmVkX3Blcm0oZmlsZW5hbWUsIChTX0lGUkVHfDA0NDQpKSkKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gc2V0IHBlcm1pc3Npb24gdG8gJyVzJyIsIGZpbGVuYW1lKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI2OSw5ICsyMjg1LDggQEAKIHsKIAlpZiAoZnN5bmNfb2JqZWN0X2ZpbGVzKQogCQlmc3luY19vcl9kaWUoZmQsICJzaGExIGZpbGUiKTsKLQlmY2htb2QoZmQsIDA0NDQpOwogCWlmIChjbG9zZShmZCkgIT0gMCkKLQkJZGllKCJlcnJvciB3aGVuIGNsb3Npbmcgc2hhMSBmaWxlICglcykiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImVycm9yIHdoZW4gY2xvc2luZyBzaGExIGZpbGUiKTsKIH0KIAogLyogU2l6ZSBvZiBkaXJlY3RvcnkgY29tcG9uZW50LCBpbmNsdWRpbmcgdGhlIGVuZGluZyAnLycgKi8KQEAgLTIzMjcsNiArMjM0Miw4IEBACiAKIAlmaWxlbmFtZSA9IHNoYTFfZmlsZV9uYW1lKHNoYTEpOwogCWZkID0gY3JlYXRlX3RtcGZpbGUodG1wZmlsZSwgc2l6ZW9mKHRtcGZpbGUpLCBmaWxlbmFtZSk7CisJd2hpbGUgKGZkIDwgMCAmJiBlcnJubyA9PSBFTUZJTEUgJiYgdW51c2Vfb25lX3dpbmRvdyhwYWNrZWRfZ2l0LCAtMSkpCisJCWZkID0gY3JlYXRlX3RtcGZpbGUodG1wZmlsZSwgc2l6ZW9mKHRtcGZpbGUpLCBmaWxlbmFtZSk7CiAJaWYgKGZkIDwgMCkgewogCQlpZiAoZXJybm8gPT0gRUFDQ0VTKQogCQkJcmV0dXJuIGVycm9yKCJpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgYWRkaW5nIGFuIG9iamVjdCB0byByZXBvc2l0b3J5IGRhdGFiYXNlICVzXG4iLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKZGlmZiAtLWdpdCBhL3NoYTFfbmFtZS5jIGIvc2hhMV9uYW1lLmMKaW5kZXggNzIyZmMzNS4uNDRiYjYyZCAxMDA2NDQKLS0tIGEvc2hhMV9uYW1lLmMKKysrIGIvc2hhMV9uYW1lLmMKQEAgLTIzOCw4ICsyMzgsMjggQEAKIAlyZXR1cm4gc2xhc2g7CiB9CiAKKy8qCisgKiAqc3RyaW5nIGFuZCAqbGVuIHdpbGwgb25seSBiZSBzdWJzdGl0dXRlZCwgYW5kICpzdHJpbmcgcmV0dXJuZWQgKGZvcgorICogbGF0ZXIgZnJlZSgpaW5nKSBpZiB0aGUgc3RyaW5nIHBhc3NlZCBpbiBpcyBvZiB0aGUgZm9ybSBAey08bj59LgorICovCitzdGF0aWMgY2hhciAqc3Vic3RpdHV0ZV9icmFuY2hfbmFtZShjb25zdCBjaGFyICoqc3RyaW5nLCBpbnQgKmxlbikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSBpbnRlcnByZXRfYnJhbmNoX25hbWUoKnN0cmluZywgJmJ1Zik7CisKKwlpZiAocmV0ID09ICpsZW4pIHsKKwkJc2l6ZV90IHNpemU7CisJCSpzdHJpbmcgPSBzdHJidWZfZGV0YWNoKCZidWYsICZzaXplKTsKKwkJKmxlbiA9IHNpemU7CisJCXJldHVybiAoY2hhciAqKSpzdHJpbmc7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKIGludCBkd2ltX3JlZihjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNoYXIgKipyZWYpCiB7CisJY2hhciAqbGFzdF9icmFuY2ggPSBzdWJzdGl0dXRlX2JyYW5jaF9uYW1lKCZzdHIsICZsZW4pOwogCWNvbnN0IGNoYXIgKipwLCAqcjsKIAlpbnQgcmVmc19mb3VuZCA9IDA7CiAKQEAgLTI0OCwyMiArMjY4LDI3IEBACiAJCWNoYXIgZnVsbHJlZltQQVRIX01BWF07CiAJCXVuc2lnbmVkIGNoYXIgc2hhMV9mcm9tX3JlZlsyMF07CiAJCXVuc2lnbmVkIGNoYXIgKnRoaXNfcmVzdWx0OworCQlpbnQgZmxhZzsKIAogCQl0aGlzX3Jlc3VsdCA9IHJlZnNfZm91bmQgPyBzaGExX2Zyb21fcmVmIDogc2hhMTsKIAkJbWtzbnBhdGgoZnVsbHJlZiwgc2l6ZW9mKGZ1bGxyZWYpLCAqcCwgbGVuLCBzdHIpOwotCQlyID0gcmVzb2x2ZV9yZWYoZnVsbHJlZiwgdGhpc19yZXN1bHQsIDEsIE5VTEwpOworCQlyID0gcmVzb2x2ZV9yZWYoZnVsbHJlZiwgdGhpc19yZXN1bHQsIDEsICZmbGFnKTsKIAkJaWYgKHIpIHsKIAkJCWlmICghcmVmc19mb3VuZCsrKQogCQkJCSpyZWYgPSB4c3RyZHVwKHIpOwogCQkJaWYgKCF3YXJuX2FtYmlndW91c19yZWZzKQogCQkJCWJyZWFrOwotCQl9CisJCX0gZWxzZSBpZiAoKGZsYWcgJiBSRUZfSVNTWU1SRUYpICYmCisJCQkgICAobGVuICE9IDQgfHwgc3RyY21wKHN0ciwgIkhFQUQiKSkpCisJCQl3YXJuaW5nKCJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMuIiwgZnVsbHJlZik7CiAJfQorCWZyZWUobGFzdF9icmFuY2gpOwogCXJldHVybiByZWZzX2ZvdW5kOwogfQogCiBpbnQgZHdpbV9sb2coY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICoqbG9nKQogeworCWNoYXIgKmxhc3RfYnJhbmNoID0gc3Vic3RpdHV0ZV9icmFuY2hfbmFtZSgmc3RyLCAmbGVuKTsKIAljb25zdCBjaGFyICoqcDsKIAlpbnQgbG9nc19mb3VuZCA9IDA7CiAKQEAgLTI5NCw5ICszMTksMTIgQEAKIAkJaWYgKCF3YXJuX2FtYmlndW91c19yZWZzKQogCQkJYnJlYWs7CiAJfQorCWZyZWUobGFzdF9icmFuY2gpOwogCXJldHVybiBsb2dzX2ZvdW5kOwogfQogCitzdGF0aWMgaW50IGdldF9zaGExXzEoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc2hhMSk7CisKIHN0YXRpYyBpbnQgZ2V0X3NoYTFfYmFzaWMoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExKQogewogCXN0YXRpYyBjb25zdCBjaGFyICp3YXJuaW5nID0gIndhcm5pbmc6IHJlZm5hbWUgJyUuKnMnIGlzIGFtYmlndW91cy5cbiI7CkBAIC0zMDcsMTAgKzMzNSwxMCBAQAogCWlmIChsZW4gPT0gNDAgJiYgIWdldF9zaGExX2hleChzdHIsIHNoYTEpKQogCQlyZXR1cm4gMDsKIAotCS8qIGJhc2ljQHt0aW1lIG9yIG51bWJlcn0gZm9ybWF0IHRvIHF1ZXJ5IHJlZi1sb2cgKi8KKwkvKiBiYXNpY0B7dGltZSBvciBudW1iZXIgb3IgLW51bWJlcn0gZm9ybWF0IHRvIHF1ZXJ5IHJlZi1sb2cgKi8KIAlyZWZsb2dfbGVuID0gYXQgPSAwOwogCWlmIChsZW4gJiYgc3RyW2xlbi0xXSA9PSAnfScpIHsKLQkJZm9yIChhdCA9IDA7IGF0IDwgbGVuIC0gMTsgYXQrKykgeworCQlmb3IgKGF0ID0gbGVuLTI7IGF0ID49IDA7IGF0LS0pIHsKIAkJCWlmIChzdHJbYXRdID09ICdAJyAmJiBzdHJbYXQrMV0gPT0gJ3snKSB7CiAJCQkJcmVmbG9nX2xlbiA9IChsZW4tMSkgLSAoYXQrMik7CiAJCQkJbGVuID0gYXQ7CkBAIC0zMjQsNiArMzUyLDE2IEBACiAJCXJldHVybiAtMTsKIAogCWlmICghbGVuICYmIHJlZmxvZ19sZW4pIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJaW50IHJldDsKKwkJLyogdHJ5IHRoZSBAey1OfSBzeW50YXggZm9yIG4tdGggY2hlY2tvdXQgKi8KKwkJcmV0ID0gaW50ZXJwcmV0X2JyYW5jaF9uYW1lKHN0cithdCwgJmJ1Zik7CisJCWlmIChyZXQgPiAwKSB7CisJCQkvKiBzdWJzdGl0dXRlIHRoaXMgYnJhbmNoIG5hbWUgYW5kIHJlc3RhcnQgKi8KKwkJCXJldHVybiBnZXRfc2hhMV8xKGJ1Zi5idWYsIGJ1Zi5sZW4sIHNoYTEpOworCQl9IGVsc2UgaWYgKHJldCA9PSAwKSB7CisJCQlyZXR1cm4gLTE7CisJCX0KIAkJLyogYWxsb3cgIkB7Li4ufSIgdG8gbWVhbiB0aGUgY3VycmVudCBicmFuY2ggcmVmbG9nICovCiAJCXJlZnNfZm91bmQgPSBkd2ltX3JlZigiSEVBRCIsIDQsIHNoYTEsICZyZWFsX3JlZik7CiAJfSBlbHNlIGlmIChyZWZsb2dfbGVuKQpAQCAtMzc5LDggKzQxNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3NoYTFfMShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKLQogc3RhdGljIGludCBnZXRfcGFyZW50KGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCiAJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnJlc3VsdCwgaW50IGlkeCkKIHsKQEAgLTY3NCw2ICs3MTAsOTAgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCitzdHJ1Y3QgZ3JhYl9udGhfYnJhbmNoX3N3aXRjaF9jYmRhdGEgeworCWxvbmcgY250LCBhbGxvYzsKKwlzdHJ1Y3Qgc3RyYnVmICpidWY7Cit9OworCitzdGF0aWMgaW50IGdyYWJfbnRoX2JyYW5jaF9zd2l0Y2godW5zaWduZWQgY2hhciAqb3NoYTEsIHVuc2lnbmVkIGNoYXIgKm5zaGExLAorCQkJCSAgY29uc3QgY2hhciAqZW1haWwsIHVuc2lnbmVkIGxvbmcgdGltZXN0YW1wLCBpbnQgdHosCisJCQkJICBjb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBncmFiX250aF9icmFuY2hfc3dpdGNoX2NiZGF0YSAqY2IgPSBjYl9kYXRhOworCWNvbnN0IGNoYXIgKm1hdGNoID0gTlVMTCwgKnRhcmdldCA9IE5VTEw7CisJc2l6ZV90IGxlbjsKKwlpbnQgbnRoOworCisJaWYgKCFwcmVmaXhjbXAobWVzc2FnZSwgImNoZWNrb3V0OiBtb3ZpbmcgZnJvbSAiKSkgeworCQltYXRjaCA9IG1lc3NhZ2UgKyBzdHJsZW4oImNoZWNrb3V0OiBtb3ZpbmcgZnJvbSAiKTsKKwkJdGFyZ2V0ID0gc3Ryc3RyKG1hdGNoLCAiIHRvICIpOworCX0KKworCWlmICghbWF0Y2ggfHwgIXRhcmdldCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSB0YXJnZXQgLSBtYXRjaDsKKwludGggPSBjYi0+Y250KysgJSBjYi0+YWxsb2M7CisJc3RyYnVmX3Jlc2V0KCZjYi0+YnVmW250aF0pOworCXN0cmJ1Zl9hZGQoJmNiLT5idWZbbnRoXSwgbWF0Y2gsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIHJlYWRzICJAey1OfSIgc3ludGF4LCBmaW5kcyB0aGUgbmFtZSBvZiB0aGUgTnRoIHByZXZpb3VzCisgKiBicmFuY2ggd2Ugd2VyZSBvbiwgYW5kIHBsYWNlcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGluIHRoZSBnaXZlbgorICogYnVmIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwYXJzZWQgaWYgc3VjY2Vzc2Z1bC4KKyAqCisgKiBJZiB0aGUgaW5wdXQgaXMgbm90IG9mIHRoZSBhY2NlcHRlZCBmb3JtYXQsIGl0IHJldHVybnMgYSBuZWdhdGl2ZQorICogbnVtYmVyIHRvIHNpZ25hbCBhbiBlcnJvci4KKyAqCisgKiBJZiB0aGUgaW5wdXQgd2FzIG9rIGJ1dCB0aGVyZSBhcmUgbm90IE4gYnJhbmNoIHN3aXRjaGVzIGluIHRoZQorICogcmVmbG9nLCBpdCByZXR1cm5zIDAuCisgKi8KK2ludCBpbnRlcnByZXRfYnJhbmNoX25hbWUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWxvbmcgbnRoOworCWludCBpLCByZXR2YWw7CisJc3RydWN0IGdyYWJfbnRoX2JyYW5jaF9zd2l0Y2hfY2JkYXRhIGNiOworCWNvbnN0IGNoYXIgKmJyYWNlOworCWNoYXIgKm51bV9lbmQ7CisKKwlpZiAobmFtZVswXSAhPSAnQCcgfHwgbmFtZVsxXSAhPSAneycgfHwgbmFtZVsyXSAhPSAnLScpCisJCXJldHVybiAtMTsKKwlicmFjZSA9IHN0cmNocihuYW1lLCAnfScpOworCWlmICghYnJhY2UpCisJCXJldHVybiAtMTsKKwludGggPSBzdHJ0b2wobmFtZSszLCAmbnVtX2VuZCwgMTApOworCWlmIChudW1fZW5kICE9IGJyYWNlKQorCQlyZXR1cm4gLTE7CisJaWYgKG50aCA8PSAwKQorCQlyZXR1cm4gLTE7CisJY2IuYWxsb2MgPSBudGg7CisJY2IuYnVmID0geG1hbGxvYyhudGggKiBzaXplb2Yoc3RydWN0IHN0cmJ1ZikpOworCWZvciAoaSA9IDA7IGkgPCBudGg7IGkrKykKKwkJc3RyYnVmX2luaXQoJmNiLmJ1ZltpXSwgMjApOworCWNiLmNudCA9IDA7CisJcmV0dmFsID0gMDsKKwlmb3JfZWFjaF9yZWNlbnRfcmVmbG9nX2VudCgiSEVBRCIsIGdyYWJfbnRoX2JyYW5jaF9zd2l0Y2gsIDQwOTYwLCAmY2IpOworCWlmIChjYi5jbnQgPCBudGgpIHsKKwkJY2IuY250ID0gMDsKKwkJZm9yX2VhY2hfcmVmbG9nX2VudCgiSEVBRCIsIGdyYWJfbnRoX2JyYW5jaF9zd2l0Y2gsICZjYik7CisJfQorCWlmIChjYi5jbnQgPCBudGgpCisJCWdvdG8gcmVsZWFzZV9yZXR1cm47CisJaSA9IGNiLmNudCAlIG50aDsKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlzdHJidWZfYWRkKGJ1ZiwgY2IuYnVmW2ldLmJ1ZiwgY2IuYnVmW2ldLmxlbik7CisJcmV0dmFsID0gYnJhY2UtbmFtZSsxOworCityZWxlYXNlX3JldHVybjoKKwlmb3IgKGkgPSAwOyBpIDwgbnRoOyBpKyspCisJCXN0cmJ1Zl9yZWxlYXNlKCZjYi5idWZbaV0pOworCWZyZWUoY2IuYnVmKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKIC8qCiAgKiBUaGlzIGlzIGxpa2UgImdldF9zaGExX2Jhc2ljKCkiLCBleGNlcHQgaXQgYWxsb3dzICJzaGExIGV4cHJlc3Npb25zIiwKICAqIG5vdGFibHkgInh5el4iIGZvciAicGFyZW50IG9mIHh5eiIKZGlmZiAtLWdpdCBhL3NoZWxsLmMgYi9zaGVsbC5jCmluZGV4IGUzMzkzNjkuLmU0ODY0ZTAgMTAwNjQ0Ci0tLSBhL3NoZWxsLmMKKysrIGIvc2hlbGwuYwpAQCAtNDAsNiArNDAsNyBAQAogfSBjbWRfbGlzdFtdID0gewogCXsgImdpdC1yZWNlaXZlLXBhY2siLCBkb19nZW5lcmljX2NtZCB9LAogCXsgImdpdC11cGxvYWQtcGFjayIsIGRvX2dlbmVyaWNfY21kIH0sCisJeyAiZ2l0LXVwbG9hZC1hcmNoaXZlIiwgZG9fZ2VuZXJpY19jbWQgfSwKIAl7ICJjdnMiLCBkb19jdnNfY21kIH0sCiAJeyBOVUxMIH0sCiB9OwpAQCAtNTksNyArNjAsNyBAQAogCXdoaWxlIChkZXZudWxsX2ZkID49IDAgJiYgZGV2bnVsbF9mZCA8PSAyKQogCQlkZXZudWxsX2ZkID0gZHVwKGRldm51bGxfZmQpOwogCWlmIChkZXZudWxsX2ZkID09IC0xKQotCQlkaWUoIm9wZW5pbmcgL2Rldi9udWxsIGZhaWxlZCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJvcGVuaW5nIC9kZXYvbnVsbCBmYWlsZWQiKTsKIAljbG9zZSAoZGV2bnVsbF9mZCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc2lkZWJhbmQuYyBiL3NpZGViYW5kLmMKaW5kZXggY2NhMzM2MC4uODk5YjFmZiAxMDA2NDQKLS0tIGEvc2lkZWJhbmQuYworKysgYi9zaWRlYmFuZC5jCkBAIC0xOSw3ICsxOSw3IEBACiAKICNkZWZpbmUgRklYX1NJWkUgMTAgIC8qIGxhcmdlIGVub3VnaCBmb3IgYW55IG9mIHRoZSBhYm92ZSAqLwogCi1pbnQgcmVjdl9zaWRlYmFuZChjb25zdCBjaGFyICptZSwgaW50IGluX3N0cmVhbSwgaW50IG91dCwgaW50IGVycikKK2ludCByZWN2X3NpZGViYW5kKGNvbnN0IGNoYXIgKm1lLCBpbnQgaW5fc3RyZWFtLCBpbnQgb3V0KQogewogCXVuc2lnbmVkIHBmID0gc3RybGVuKFBSRUZJWCk7CiAJdW5zaWduZWQgc2Y7CkBAIC00MSw4ICs0MSw3IEBACiAJCWlmIChsZW4gPT0gMCkKIAkJCWJyZWFrOwogCQlpZiAobGVuIDwgMSkgewotCQkJbGVuID0gc3ByaW50ZihidWYsICIlczogcHJvdG9jb2wgZXJyb3I6IG5vIGJhbmQgZGVzaWduYXRvclxuIiwgbWUpOwotCQkJc2FmZV93cml0ZShlcnIsIGJ1ZiwgbGVuKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHByb3RvY29sIGVycm9yOiBubyBiYW5kIGRlc2lnbmF0b3JcbiIsIG1lKTsKIAkJCXJldHVybiBTSURFQkFORF9QUk9UT0NPTF9FUlJPUjsKIAkJfQogCQliYW5kID0gYnVmW3BmXSAmIDB4ZmY7CkBAIC01MCw4ICs0OSw4IEBACiAJCXN3aXRjaCAoYmFuZCkgewogCQljYXNlIDM6CiAJCQlidWZbcGZdID0gJyAnOwotCQkJYnVmW3BmKzErbGVuXSA9ICdcbic7Ci0JCQlzYWZlX3dyaXRlKGVyciwgYnVmLCBwZisxK2xlbisxKTsKKwkJCWJ1ZltwZisxK2xlbl0gPSAnXDAnOworCQkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgYnVmKTsKIAkJCXJldHVybiBTSURFQkFORF9SRU1PVEVfRVJST1I7CiAJCWNhc2UgMjoKIAkJCWJ1ZltwZl0gPSAnICc7CkBAIC05NSwxMiArOTQsMTIgQEAKIAkJCQkJbWVtY3B5KHNhdmUsIGIgKyBicmssIHNmKTsKIAkJCQkJYlticmsgKyBzZiAtIDFdID0gYlticmsgLSAxXTsKIAkJCQkJbWVtY3B5KGIgKyBicmsgLSAxLCBzdWZmaXgsIHNmKTsKLQkJCQkJc2FmZV93cml0ZShlcnIsIGIsIGJyayArIHNmKTsKKwkJCQkJZnByaW50ZihzdGRlcnIsICIlLipzIiwgYnJrICsgc2YsIGIpOwogCQkJCQltZW1jcHkoYiArIGJyaywgc2F2ZSwgc2YpOwogCQkJCQlsZW4gLT0gYnJrOwogCQkJCX0gZWxzZSB7CiAJCQkJCWludCBsID0gYnJrID8gYnJrIDogbGVuOwotCQkJCQlzYWZlX3dyaXRlKGVyciwgYiwgbCk7CisJCQkJCWZwcmludGYoc3RkZXJyLCAiJS4qcyIsIGwsIGIpOwogCQkJCQlsZW4gLT0gbDsKIAkJCQl9CiAKQEAgLTExMiwxMCArMTExLDggQEAKIAkJCXNhZmVfd3JpdGUob3V0LCBidWYgKyBwZisxLCBsZW4pOwogCQkJY29udGludWU7CiAJCWRlZmF1bHQ6Ci0JCQlsZW4gPSBzcHJpbnRmKGJ1ZiwKLQkJCQkgICAgICAiJXM6IHByb3RvY29sIGVycm9yOiBiYWQgYmFuZCAjJWRcbiIsCi0JCQkJICAgICAgbWUsIGJhbmQpOwotCQkJc2FmZV93cml0ZShlcnIsIGJ1ZiwgbGVuKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHByb3RvY29sIGVycm9yOiBiYWQgYmFuZCAjJWRcbiIsCisJCQkJbWUsIGJhbmQpOwogCQkJcmV0dXJuIFNJREVCQU5EX1BST1RPQ09MX0VSUk9SOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc2lkZWJhbmQuaCBiL3NpZGViYW5kLmgKaW5kZXggYTg0YjY5MS4uZDcyZGIzNSAxMDA2NDQKLS0tIGEvc2lkZWJhbmQuaAorKysgYi9zaWRlYmFuZC5oCkBAIC03LDcgKzcsNyBAQAogI2RlZmluZSBERUZBVUxUX1BBQ0tFVF9NQVggMTAwMAogI2RlZmluZSBMQVJHRV9QQUNLRVRfTUFYIDY1NTIwCiAKLWludCByZWN2X3NpZGViYW5kKGNvbnN0IGNoYXIgKm1lLCBpbnQgaW5fc3RyZWFtLCBpbnQgb3V0LCBpbnQgZXJyKTsKK2ludCByZWN2X3NpZGViYW5kKGNvbnN0IGNoYXIgKm1lLCBpbnQgaW5fc3RyZWFtLCBpbnQgb3V0KTsKIHNzaXplX3Qgc2VuZF9zaWRlYmFuZChpbnQgZmQsIGludCBiYW5kLCBjb25zdCBjaGFyICpkYXRhLCBzc2l6ZV90IHN6LCBpbnQgcGFja2V0X21heCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc2lnY2hhaW4uYyBiL3NpZ2NoYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTExOGI5OQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ2NoYWluLmMKQEAgLTAsMCArMSw1MiBAQAorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKworI2RlZmluZSBTSUdDSEFJTl9NQVhfU0lHTkFMUyAzMgorCitzdHJ1Y3Qgc2lnY2hhaW5fc2lnbmFsIHsKKwlzaWdjaGFpbl9mdW4gKm9sZDsKKwlpbnQgbjsKKwlpbnQgYWxsb2M7Cit9Oworc3RhdGljIHN0cnVjdCBzaWdjaGFpbl9zaWduYWwgc2lnbmFsc1tTSUdDSEFJTl9NQVhfU0lHTkFMU107CisKK3N0YXRpYyB2b2lkIGNoZWNrX3NpZ251bShpbnQgc2lnKQoreworCWlmIChzaWcgPCAxIHx8IHNpZyA+PSBTSUdDSEFJTl9NQVhfU0lHTkFMUykKKwkJZGllKCJCVUc6IHNpZ25hbCBvdXQgb2YgcmFuZ2U6ICVkIiwgc2lnKTsKK30KKworaW50IHNpZ2NoYWluX3B1c2goaW50IHNpZywgc2lnY2hhaW5fZnVuIGYpCit7CisJc3RydWN0IHNpZ2NoYWluX3NpZ25hbCAqcyA9IHNpZ25hbHMgKyBzaWc7CisJY2hlY2tfc2lnbnVtKHNpZyk7CisKKwlBTExPQ19HUk9XKHMtPm9sZCwgcy0+biArIDEsIHMtPmFsbG9jKTsKKwlzLT5vbGRbcy0+bl0gPSBzaWduYWwoc2lnLCBmKTsKKwlpZiAocy0+b2xkW3MtPm5dID09IFNJR19FUlIpCisJCXJldHVybiAtMTsKKwlzLT5uKys7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzaWdjaGFpbl9wb3AoaW50IHNpZykKK3sKKwlzdHJ1Y3Qgc2lnY2hhaW5fc2lnbmFsICpzID0gc2lnbmFscyArIHNpZzsKKwljaGVja19zaWdudW0oc2lnKTsKKwlpZiAocy0+biA8IDEpCisJCXJldHVybiAwOworCisJaWYgKHNpZ25hbChzaWcsIHMtPm9sZFtzLT5uIC0gMV0pID09IFNJR19FUlIpCisJCXJldHVybiAtMTsKKwlzLT5uLS07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2lnY2hhaW5fcHVzaF9jb21tb24oc2lnY2hhaW5fZnVuIGYpCit7CisJc2lnY2hhaW5fcHVzaChTSUdJTlQsIGYpOworCXNpZ2NoYWluX3B1c2goU0lHSFVQLCBmKTsKKwlzaWdjaGFpbl9wdXNoKFNJR1RFUk0sIGYpOworCXNpZ2NoYWluX3B1c2goU0lHUVVJVCwgZik7CisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBmKTsKK30KZGlmZiAtLWdpdCBhL3NpZ2NoYWluLmggYi9zaWdjaGFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxODA4M2IKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdjaGFpbi5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgU0lHQ0hBSU5fSAorI2RlZmluZSBTSUdDSEFJTl9ICisKK3R5cGVkZWYgdm9pZCAoKnNpZ2NoYWluX2Z1bikoaW50KTsKKworaW50IHNpZ2NoYWluX3B1c2goaW50IHNpZywgc2lnY2hhaW5fZnVuIGYpOworaW50IHNpZ2NoYWluX3BvcChpbnQgc2lnKTsKKwordm9pZCBzaWdjaGFpbl9wdXNoX2NvbW1vbihzaWdjaGFpbl9mdW4gZik7CisKKyNlbmRpZiAvKiBTSUdDSEFJTl9IICovCmRpZmYgLS1naXQgYS9zdHJidWYuYyBiL3N0cmJ1Zi5jCmluZGV4IGJkZjQ5NTQuLmYwM2QxMTcgMTAwNjQ0Ci0tLSBhL3N0cmJ1Zi5jCisrKyBiL3N0cmJ1Zi5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgogCiBpbnQgcHJlZml4Y21wKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4KQogewpAQCAtMTM5LDE0ICsxNDAsMTEgQEAKIAogaW50IHN0cmJ1Zl9jbXAoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqYSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqYikKIHsKLQlpbnQgY21wOwotCWlmIChhLT5sZW4gPCBiLT5sZW4pIHsKLQkJY21wID0gbWVtY21wKGEtPmJ1ZiwgYi0+YnVmLCBhLT5sZW4pOwotCQlyZXR1cm4gY21wID8gY21wIDogLTE7Ci0JfSBlbHNlIHsKLQkJY21wID0gbWVtY21wKGEtPmJ1ZiwgYi0+YnVmLCBiLT5sZW4pOwotCQlyZXR1cm4gY21wID8gY21wIDogYS0+bGVuICE9IGItPmxlbjsKLQl9CisJaW50IGxlbiA9IGEtPmxlbiA8IGItPmxlbiA/IGEtPmxlbjogYi0+bGVuOworCWludCBjbXAgPSBtZW1jbXAoYS0+YnVmLCBiLT5idWYsIGxlbik7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwlyZXR1cm4gYS0+bGVuIDwgYi0+bGVuID8gLTE6IGEtPmxlbiAhPSBiLT5sZW47CiB9CiAKIHZvaWQgc3RyYnVmX3NwbGljZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgc2l6ZV90IGxlbiwKQEAgLTI1NiwxOCArMjU0LDIxIEBACiBzaXplX3Qgc3RyYnVmX2ZyZWFkKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3Qgc2l6ZSwgRklMRSAqZikKIHsKIAlzaXplX3QgcmVzOworCXNpemVfdCBvbGRhbGxvYyA9IHNiLT5hbGxvYzsKIAogCXN0cmJ1Zl9ncm93KHNiLCBzaXplKTsKIAlyZXMgPSBmcmVhZChzYi0+YnVmICsgc2ItPmxlbiwgMSwgc2l6ZSwgZik7Ci0JaWYgKHJlcyA+IDApIHsKKwlpZiAocmVzID4gMCkKIAkJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIHJlcyk7Ci0JfQorCWVsc2UgaWYgKG9sZGFsbG9jID09IDApCisJCXN0cmJ1Zl9yZWxlYXNlKHNiKTsKIAlyZXR1cm4gcmVzOwogfQogCiBzc2l6ZV90IHN0cmJ1Zl9yZWFkKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgZmQsIHNpemVfdCBoaW50KQogewogCXNpemVfdCBvbGRsZW4gPSBzYi0+bGVuOworCXNpemVfdCBvbGRhbGxvYyA9IHNiLT5hbGxvYzsKIAogCXN0cmJ1Zl9ncm93KHNiLCBoaW50ID8gaGludCA6IDgxOTIpOwogCWZvciAoOzspIHsKQEAgLTI3NSw3ICsyNzYsMTAgQEAKIAogCQljbnQgPSB4cmVhZChmZCwgc2ItPmJ1ZiArIHNiLT5sZW4sIHNiLT5hbGxvYyAtIHNiLT5sZW4gLSAxKTsKIAkJaWYgKGNudCA8IDApIHsKLQkJCXN0cmJ1Zl9zZXRsZW4oc2IsIG9sZGxlbik7CisJCQlpZiAob2xkYWxsb2MgPT0gMCkKKwkJCQlzdHJidWZfcmVsZWFzZShzYik7CisJCQllbHNlCisJCQkJc3RyYnVmX3NldGxlbihzYiwgb2xkbGVuKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlpZiAoIWNudCkKQEAgLTI5Miw2ICsyOTYsOCBAQAogCiBpbnQgc3RyYnVmX3JlYWRsaW5rKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgaGludCkKIHsKKwlzaXplX3Qgb2xkYWxsb2MgPSBzYi0+YWxsb2M7CisKIAlpZiAoaGludCA8IDMyKQogCQloaW50ID0gMzI7CiAKQEAgLTMxMSw3ICszMTcsOCBAQAogCQkvKiAuLiB0aGUgYnVmZmVyIHdhcyB0b28gc21hbGwgLSB0cnkgYWdhaW4gKi8KIAkJaGludCAqPSAyOwogCX0KLQlzdHJidWZfcmVsZWFzZShzYik7CisJaWYgKG9sZGFsbG9jID09IDApCisJCXN0cmJ1Zl9yZWxlYXNlKHNiKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTM1MSwzICszNTgsMTkgQEAKIAogCXJldHVybiBsZW47CiB9CisKK2ludCBzdHJidWZfYnJhbmNobmFtZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgbGVuID0gc3RybGVuKG5hbWUpOworCWlmIChpbnRlcnByZXRfYnJhbmNoX25hbWUobmFtZSwgc2IpID09IGxlbikKKwkJcmV0dXJuIDA7CisJc3RyYnVmX2FkZChzYiwgbmFtZSwgbGVuKTsKKwlyZXR1cm4gbGVuOworfQorCitpbnQgc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RyYnVmX2JyYW5jaG5hbWUoc2IsIG5hbWUpOworCXN0cmJ1Zl9zcGxpY2Uoc2IsIDAsIDAsICJyZWZzL2hlYWRzLyIsIDExKTsKKwlyZXR1cm4gY2hlY2tfcmVmX2Zvcm1hdChzYi0+YnVmKTsKK30KZGlmZiAtLWdpdCBhL3N0cmJ1Zi5oIGIvc3RyYnVmLmgKaW5kZXggODliZDM2ZS4uZWFhODcwNCAxMDA2NDQKLS0tIGEvc3RyYnVmLmgKKysrIGIvc3RyYnVmLmgKQEAgLTExLDcgKzExLDcgQEAKICAqICAgIGJ1aWxkIGNvbXBsZXggc3RyaW5ncy9idWZmZXJzIHdob3NlIGZpbmFsIHNpemUgaXNuJ3QgZWFzaWx5IGtub3duLgogICoKICAqICAgIEl0IGlzIE5PVCBsZWdhbCB0byBjb3B5IHRoZSAtPmJ1ZiBwb2ludGVyIGF3YXkuCi0gKiAgICBgc3RyYnVmX2RldGFjaCcgaXMgdGhlIG9wZXJhdGlvbiB0aGF0IGRldGFjaHMgYSBidWZmZXIgZnJvbSBpdHMgc2hlbGwKKyAqICAgIGBzdHJidWZfZGV0YWNoJyBpcyB0aGUgb3BlcmF0aW9uIHRoYXQgZGV0YWNoZXMgYSBidWZmZXIgZnJvbSBpdHMgc2hlbGwKICAqICAgIHdoaWxlIGtlZXBpbmcgdGhlIHNoZWxsIHZhbGlkIHdydCBpdHMgaW52YXJpYW50cy4KICAqCiAgKiAyLiB0aGUgLT5idWYgbWVtYmVyIGlzIGEgYnl0ZSBhcnJheSB0aGF0IGhhcyBhdCBsZWFzdCAtPmxlbiArIDEgYnl0ZXMKQEAgLTEzMSw0ICsxMzEsNyBAQAogZXh0ZXJuIHZvaWQgc3RyaXBzcGFjZShzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBza2lwX2NvbW1lbnRzKTsKIGV4dGVybiBpbnQgbGF1bmNoX2VkaXRvcihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIGNvbnN0IGNoYXIgKmNvbnN0ICplbnYpOwogCitleHRlcm4gaW50IHN0cmJ1Zl9icmFuY2huYW1lKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm5hbWUpOworCiAjZW5kaWYgLyogU1RSQlVGX0ggKi8KZGlmZiAtLWdpdCBhL3N0cmluZy1saXN0LmMgYi9zdHJpbmctbGlzdC5jCmluZGV4IGRkZDgzYzguLjFhYzUzNmUgMTAwNjQ0Ci0tLSBhL3N0cmluZy1saXN0LmMKKysrIGIvc3RyaW5nLWxpc3QuYwpAQCAtMjYsMTAgKzI2LDEwIEBACiB9CiAKIC8qIHJldHVybnMgLTEtaW5kZXggaWYgYWxyZWFkeSBleGlzdHMgKi8KLXN0YXRpYyBpbnQgYWRkX2VudHJ5KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nKQorc3RhdGljIGludCBhZGRfZW50cnkoaW50IGluc2VydF9hdCwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcpCiB7Ci0JaW50IGV4YWN0X21hdGNoOwotCWludCBpbmRleCA9IGdldF9lbnRyeV9pbmRleChsaXN0LCBzdHJpbmcsICZleGFjdF9tYXRjaCk7CisJaW50IGV4YWN0X21hdGNoID0gMDsKKwlpbnQgaW5kZXggPSBpbnNlcnRfYXQgIT0gLTEgPyBpbnNlcnRfYXQgOiBnZXRfZW50cnlfaW5kZXgobGlzdCwgc3RyaW5nLCAmZXhhY3RfbWF0Y2gpOwogCiAJaWYgKGV4YWN0X21hdGNoKQogCQlyZXR1cm4gLTEgLSBpbmRleDsKQEAgLTUzLDcgKzUzLDEzIEBACiAKIHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9pbnNlcnQoY29uc3QgY2hhciAqc3RyaW5nLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCiB7Ci0JaW50IGluZGV4ID0gYWRkX2VudHJ5KGxpc3QsIHN0cmluZyk7CisJcmV0dXJuIHN0cmluZ19saXN0X2luc2VydF9hdF9pbmRleCgtMSwgc3RyaW5nLCBsaXN0KTsKK30KKworc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2luc2VydF9hdF9pbmRleChpbnQgaW5zZXJ0X2F0LAorCQkJCQkJICAgICBjb25zdCBjaGFyICpzdHJpbmcsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlpbnQgaW5kZXggPSBhZGRfZW50cnkoaW5zZXJ0X2F0LCBsaXN0LCBzdHJpbmcpOwogCiAJaWYgKGluZGV4IDwgMCkKIAkJaW5kZXggPSAtMSAtIGluZGV4OwpAQCAtNjgsNiArNzQsMTYgQEAKIAlyZXR1cm4gZXhhY3RfbWF0Y2g7CiB9CiAKK2ludCBzdHJpbmdfbGlzdF9maW5kX2luc2VydF9pbmRleChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJCQkgIGludCBuZWdhdGl2ZV9leGlzdGluZ19pbmRleCkKK3sKKwlpbnQgZXhhY3RfbWF0Y2g7CisJaW50IGluZGV4ID0gZ2V0X2VudHJ5X2luZGV4KGxpc3QsIHN0cmluZywgJmV4YWN0X21hdGNoKTsKKwlpZiAoZXhhY3RfbWF0Y2gpCisJCWluZGV4ID0gLTEgLSAobmVnYXRpdmVfZXhpc3RpbmdfaW5kZXggPyBpbmRleCA6IDApOworCXJldHVybiBpbmRleDsKK30KKwogc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2xvb2t1cChjb25zdCBjaGFyICpzdHJpbmcsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKIHsKIAlpbnQgZXhhY3RfbWF0Y2gsIGkgPSBnZXRfZW50cnlfaW5kZXgobGlzdCwgc3RyaW5nLCAmZXhhY3RfbWF0Y2gpOwpAQCAtNzYsNiArOTIsMTYgQEAKIAlyZXR1cm4gbGlzdC0+aXRlbXMgKyBpOwogfQogCitpbnQgZm9yX2VhY2hfc3RyaW5nX2xpc3Qoc3RyaW5nX2xpc3RfZWFjaF9mdW5jX3QgZm4sCisJCQkgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCB2b2lkICpjYl9kYXRhKQoreworCWludCBpLCByZXQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQlpZiAoKHJldCA9IGZuKCZsaXN0LT5pdGVtc1tpXSwgY2JfZGF0YSkpKQorCQkJYnJlYWs7CisJcmV0dXJuIHJldDsKK30KKwogdm9pZCBzdHJpbmdfbGlzdF9jbGVhcihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGludCBmcmVlX3V0aWwpCiB7CiAJaWYgKGxpc3QtPml0ZW1zKSB7CkBAIC05NCw2ICsxMjAsMjUgQEAKIAlsaXN0LT5uciA9IGxpc3QtPmFsbG9jID0gMDsKIH0KIAordm9pZCBzdHJpbmdfbGlzdF9jbGVhcl9mdW5jKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgc3RyaW5nX2xpc3RfY2xlYXJfZnVuY190IGNsZWFyZnVuYykKK3sKKwlpZiAobGlzdC0+aXRlbXMpIHsKKwkJaW50IGk7CisJCWlmIChjbGVhcmZ1bmMpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQkJCWNsZWFyZnVuYyhsaXN0LT5pdGVtc1tpXS51dGlsLCBsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisJCWlmIChsaXN0LT5zdHJkdXBfc3RyaW5ncykgeworCQkJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspCisJCQkJZnJlZShsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisJCWZyZWUobGlzdC0+aXRlbXMpOworCX0KKwlsaXN0LT5pdGVtcyA9IE5VTEw7CisJbGlzdC0+bnIgPSBsaXN0LT5hbGxvYyA9IDA7Cit9CisKKwogdm9pZCBwcmludF9zdHJpbmdfbGlzdChjb25zdCBjaGFyICp0ZXh0LCBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnApCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9zdHJpbmctbGlzdC5oIGIvc3RyaW5nLWxpc3QuaAppbmRleCA0ZDZhNzA1Li4xNGJiYzQ3IDEwMDY0NAotLS0gYS9zdHJpbmctbGlzdC5oCisrKyBiL3N0cmluZy1saXN0LmgKQEAgLTE1LDkgKzE1LDIzIEBACiB2b2lkIHByaW50X3N0cmluZ19saXN0KGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcCk7CiB2b2lkIHN0cmluZ19saXN0X2NsZWFyKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgaW50IGZyZWVfdXRpbCk7CiAKKy8qIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNhbGwgYSBjdXN0b20gY2xlYXIgZnVuY3Rpb24gb24gZWFjaCB1dGlsIHBvaW50ZXIgKi8KKy8qIFRoZSBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoZSB1dGlsIHBvaW50ZXIgaXMgcGFzc2VkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgKi8KK3R5cGVkZWYgdm9pZCAoKnN0cmluZ19saXN0X2NsZWFyX2Z1bmNfdCkodm9pZCAqcCwgY29uc3QgY2hhciAqc3RyKTsKK3ZvaWQgc3RyaW5nX2xpc3RfY2xlYXJfZnVuYyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIHN0cmluZ19saXN0X2NsZWFyX2Z1bmNfdCBjbGVhcmZ1bmMpOworCisvKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgZWFjaCBpdGVtICovCit0eXBlZGVmIGludCAoKnN0cmluZ19saXN0X2VhY2hfZnVuY190KShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqLCB2b2lkICopOworaW50IGZvcl9lYWNoX3N0cmluZ19saXN0KHN0cmluZ19saXN0X2VhY2hfZnVuY190LAorCQkJIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgdm9pZCAqY2JfZGF0YSk7CisKIC8qIFVzZSB0aGVzZSBmdW5jdGlvbnMgb25seSBvbiBzb3J0ZWQgbGlzdHM6ICovCiBpbnQgc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZyk7CitpbnQgc3RyaW5nX2xpc3RfZmluZF9pbnNlcnRfaW5kZXgoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcsCisJCQkJICBpbnQgbmVnYXRpdmVfZXhpc3RpbmdfaW5kZXgpOwogc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2luc2VydChjb25zdCBjaGFyICpzdHJpbmcsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCk7CitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3RyaW5nX2xpc3RfaW5zZXJ0X2F0X2luZGV4KGludCBpbnNlcnRfYXQsCisJCQkJCQkgICAgIGNvbnN0IGNoYXIgKnN0cmluZywgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KTsKIHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9sb29rdXAoY29uc3QgY2hhciAqc3RyaW5nLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpOwogCiAvKiBVc2UgdGhlc2UgZnVuY3Rpb25zIG9ubHkgb24gdW5zb3J0ZWQgbGlzdHM6ICovCmRpZmYgLS1naXQgYS9zeW1saW5rcy5jIGIvc3ltbGlua3MuYwppbmRleCA1YTVlNzgxLi40YmRkZWQzIDEwMDY0NAotLS0gYS9zeW1saW5rcy5jCisrKyBiL3N5bWxpbmtzLmMKQEAgLTEsNjQgKzEsMzA4IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKIAotc3RydWN0IHBhdGhuYW1lIHsKLQlpbnQgbGVuOwotCWNoYXIgcGF0aFtQQVRIX01BWF07Ci19OwotCi0vKiBSZXR1cm4gbWF0Y2hpbmcgcGF0aG5hbWUgcHJlZml4IGxlbmd0aCwgb3IgemVybyBpZiBub3QgbWF0Y2hpbmcgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG1hdGNoX3BhdGhuYW1lKGludCBsZW4sIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwYXRobmFtZSAqbWF0Y2gpCisvKgorICogUmV0dXJucyB0aGUgbGVuZ3RoIChvbiBhIHBhdGggY29tcG9uZW50IGJhc2lzKSBvZiB0aGUgbG9uZ2VzdAorICogY29tbW9uIHByZWZpeCBtYXRjaCBvZiAnbmFtZV9hJyBhbmQgJ25hbWVfYicuCisgKi8KK3N0YXRpYyBpbnQgbG9uZ2VzdF9wYXRoX21hdGNoKGNvbnN0IGNoYXIgKm5hbWVfYSwgaW50IGxlbl9hLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZV9iLCBpbnQgbGVuX2IsCisJCQkgICAgICBpbnQgKnByZXZpb3VzX3NsYXNoKQogewotCWludCBtYXRjaF9sZW4gPSBtYXRjaC0+bGVuOwotCXJldHVybiAobGVuID4gbWF0Y2hfbGVuICYmCi0JCW5hbWVbbWF0Y2hfbGVuXSA9PSAnLycgJiYKLQkJIW1lbWNtcChuYW1lLCBtYXRjaC0+cGF0aCwgbWF0Y2hfbGVuKSkgPyBtYXRjaF9sZW4gOiAwOwotfQorCWludCBtYXhfbGVuLCBtYXRjaF9sZW4gPSAwLCBtYXRjaF9sZW5fcHJldiA9IDAsIGkgPSAwOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhdGhuYW1lKGludCBsZW4sIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwYXRobmFtZSAqbWF0Y2gpCi17Ci0JaWYgKGxlbiA8IFBBVEhfTUFYKSB7Ci0JCW1hdGNoLT5sZW4gPSBsZW47Ci0JCW1lbWNweShtYXRjaC0+cGF0aCwgbmFtZSwgbGVuKTsKLQkJbWF0Y2gtPnBhdGhbbGVuXSA9IDA7Ci0JfQotfQotCi1pbnQgaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGludCBsZW4sIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RhdGljIHN0cnVjdCBwYXRobmFtZSBsaW5rLCBub25saW5rOwotCWNoYXIgcGF0aFtQQVRIX01BWF07Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0JY2hhciAqc3A7Ci0JaW50IGtub3duX2RpcjsKLQotCS8qCi0JICogU2VlIGlmIHRoZSBsYXN0IGtub3duIHN5bWxpbmsgY2FjaGUgbWF0Y2hlcy4KLQkgKi8KLQlpZiAobWF0Y2hfcGF0aG5hbWUobGVuLCBuYW1lLCAmbGluaykpCi0JCXJldHVybiAxOwotCi0JLyoKLQkgKiBHZXQgcmlkIG9mIHRoZSBsYXN0IGtub3duIGRpcmVjdG9yeSBwYXJ0Ci0JICovCi0Ja25vd25fZGlyID0gbWF0Y2hfcGF0aG5hbWUobGVuLCBuYW1lLCAmbm9ubGluayk7Ci0KLQl3aGlsZSAoKHNwID0gc3RyY2hyKG5hbWUgKyBrbm93bl9kaXIgKyAxLCAnLycpKSAhPSBOVUxMKSB7Ci0JCWludCB0aGlzbGVuID0gc3AgLSBuYW1lIDsKLQkJbWVtY3B5KHBhdGgsIG5hbWUsIHRoaXNsZW4pOwotCQlwYXRoW3RoaXNsZW5dID0gMDsKLQotCQlpZiAobHN0YXQocGF0aCwgJnN0KSkKLQkJCXJldHVybiAwOwotCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgewotCQkJc2V0X3BhdGhuYW1lKHRoaXNsZW4sIHBhdGgsICZub25saW5rKTsKLQkJCWtub3duX2RpciA9IHRoaXNsZW47Ci0JCQljb250aW51ZTsKKwltYXhfbGVuID0gbGVuX2EgPCBsZW5fYiA/IGxlbl9hIDogbGVuX2I7CisJd2hpbGUgKGkgPCBtYXhfbGVuICYmIG5hbWVfYVtpXSA9PSBuYW1lX2JbaV0pIHsKKwkJaWYgKG5hbWVfYVtpXSA9PSAnLycpIHsKKwkJCW1hdGNoX2xlbl9wcmV2ID0gbWF0Y2hfbGVuOworCQkJbWF0Y2hfbGVuID0gaTsKIAkJfQotCQlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgewotCQkJc2V0X3BhdGhuYW1lKHRoaXNsZW4sIHBhdGgsICZsaW5rKTsKLQkJCXJldHVybiAxOworCQlpKys7CisJfQorCS8qCisJICogSXMgJ25hbWVfYicgYSBzdWJzdHJpbmcgb2YgJ25hbWVfYScsIHRoZSBvdGhlciB3YXkgYXJvdW5kLAorCSAqIG9yIGlzICduYW1lX2EnIGFuZCAnbmFtZV9iJyB0aGUgZXhhY3Qgc2FtZSBzdHJpbmc/CisJICovCisJaWYgKGkgPj0gbWF4X2xlbiAmJiAoKGxlbl9hID4gbGVuX2IgJiYgbmFtZV9hW2xlbl9iXSA9PSAnLycpIHx8CisJCQkgICAgIChsZW5fYSA8IGxlbl9iICYmIG5hbWVfYltsZW5fYV0gPT0gJy8nKSB8fAorCQkJICAgICAobGVuX2EgPT0gbGVuX2IpKSkgeworCQltYXRjaF9sZW5fcHJldiA9IG1hdGNoX2xlbjsKKwkJbWF0Y2hfbGVuID0gaTsKKwl9CisJKnByZXZpb3VzX3NsYXNoID0gbWF0Y2hfbGVuX3ByZXY7CisJcmV0dXJuIG1hdGNoX2xlbjsKK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV9kZWYgZGVmYXVsdF9jYWNoZTsKKworc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2xzdGF0X2NhY2hlKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlKQoreworCWNhY2hlLT5wYXRoWzBdID0gJ1wwJzsKKwljYWNoZS0+bGVuID0gMDsKKwljYWNoZS0+ZmxhZ3MgPSAwOworCS8qCisJICogVGhlIHRyYWNrX2ZsYWdzIGFuZCBwcmVmaXhfbGVuX3N0YXRfZnVuYyBtZW1iZXJzIGlzIG9ubHkKKwkgKiBzZXQgYnkgdGhlIHNhZmVndWFyZCBydWxlIGluc2lkZSBsc3RhdF9jYWNoZSgpCisJICovCit9CisKKyNkZWZpbmUgRkxfRElSICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgRkxfTk9FTlQgICAgKDEgPDwgMSkKKyNkZWZpbmUgRkxfU1lNTElOSyAgKDEgPDwgMikKKyNkZWZpbmUgRkxfTFNUQVRFUlIgKDEgPDwgMykKKyNkZWZpbmUgRkxfRVJSICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgRkxfRlVMTFBBVEggKDEgPDwgNSkKKworLyoKKyAqIENoZWNrIGlmIG5hbWUgJ25hbWUnIG9mIGxlbmd0aCAnbGVuJyBoYXMgYSBzeW1saW5rIGxlYWRpbmcKKyAqIGNvbXBvbmVudCwgb3IgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHMgYW5kIGlzIHJlYWwsIG9yIG5vdC4KKyAqCisgKiBUbyBzcGVlZCB1cCB0aGUgY2hlY2ssIHNvbWUgaW5mb3JtYXRpb24gaXMgYWxsb3dlZCB0byBiZSBjYWNoZWQuCisgKiBUaGlzIGNhbiBiZSBpbmRpY2F0ZWQgYnkgdGhlICd0cmFja19mbGFncycgYXJndW1lbnQsIHdoaWNoIGFsc28gY2FuCisgKiBiZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgd2Ugc2hvdWxkIGNoZWNrIHRoZSBmdWxsIHBhdGguCisgKgorICogVGhlICdwcmVmaXhfbGVuX3N0YXRfZnVuYycgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbGVuZ3RoCisgKiBvZiB0aGUgcHJlZml4LCB3aGVyZSB0aGUgY2FjaGUgc2hvdWxkIHVzZSB0aGUgc3RhdCgpIGZ1bmN0aW9uCisgKiBpbnN0ZWFkIG9mIHRoZSBsc3RhdCgpIGZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBwYXRoIGNvbXBvbmVudC4KKyAqLworc3RhdGljIGludCBsc3RhdF9jYWNoZShzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJICAgICAgIGludCB0cmFja19mbGFncywgaW50IHByZWZpeF9sZW5fc3RhdF9mdW5jKQoreworCWludCBtYXRjaF9sZW4sIGxhc3Rfc2xhc2gsIGxhc3Rfc2xhc2hfZGlyLCBwcmV2aW91c19zbGFzaDsKKwlpbnQgbWF0Y2hfZmxhZ3MsIHJldF9mbGFncywgc2F2ZV9mbGFncywgbWF4X2xlbiwgcmV0OworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGNhY2hlLT50cmFja19mbGFncyAhPSB0cmFja19mbGFncyB8fAorCSAgICBjYWNoZS0+cHJlZml4X2xlbl9zdGF0X2Z1bmMgIT0gcHJlZml4X2xlbl9zdGF0X2Z1bmMpIHsKKwkJLyoKKwkJICogQXMgYSBzYWZlZ3VhcmQgcnVsZSB3ZSBjbGVhciB0aGUgY2FjaGUgaWYgdGhlCisJCSAqIHZhbHVlcyBvZiB0cmFja19mbGFncyBhbmQvb3IgcHJlZml4X2xlbl9zdGF0X2Z1bmMKKwkJICogZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUgbGFzdCBzdXBwbGllZCB2YWx1ZXMuCisJCSAqLworCQlyZXNldF9sc3RhdF9jYWNoZShjYWNoZSk7CisJCWNhY2hlLT50cmFja19mbGFncyA9IHRyYWNrX2ZsYWdzOworCQljYWNoZS0+cHJlZml4X2xlbl9zdGF0X2Z1bmMgPSBwcmVmaXhfbGVuX3N0YXRfZnVuYzsKKwkJbWF0Y2hfbGVuID0gbGFzdF9zbGFzaCA9IDA7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBtYXRjaCBmcm9tIHRoZSBjYWNoZSBmb3IKKwkJICogdGhlIDIgImV4Y2x1ZGluZyIgcGF0aCB0eXBlcy4KKwkJICovCisJCW1hdGNoX2xlbiA9IGxhc3Rfc2xhc2ggPQorCQkJbG9uZ2VzdF9wYXRoX21hdGNoKG5hbWUsIGxlbiwgY2FjaGUtPnBhdGgsIGNhY2hlLT5sZW4sCisJCQkJCSAgICZwcmV2aW91c19zbGFzaCk7CisJCW1hdGNoX2ZsYWdzID0gY2FjaGUtPmZsYWdzICYgdHJhY2tfZmxhZ3MgJiAoRkxfTk9FTlR8RkxfU1lNTElOSyk7CisJCWlmIChtYXRjaF9mbGFncyAmJiBtYXRjaF9sZW4gPT0gY2FjaGUtPmxlbikKKwkJCXJldHVybiBtYXRjaF9mbGFnczsKKwkJLyoKKwkJICogSWYgd2Ugbm93IGhhdmUgbWF0Y2hfbGVuID4gMCwgd2Ugd291bGQga25vdyB0aGF0CisJCSAqIHRoZSBtYXRjaGVkIHBhcnQgd2lsbCBhbHdheXMgYmUgYSBkaXJlY3RvcnkuCisJCSAqCisJCSAqIEFsc28sIGlmIHdlIGFyZSB0cmFja2luZyBkaXJlY3RvcmllcyBhbmQgJ25hbWUnIGlzCisJCSAqIGEgc3Vic3RyaW5nIG9mIHRoZSBjYWNoZSBvbiBhIHBhdGggY29tcG9uZW50IGJhc2lzLAorCQkgKiB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5LgorCQkgKi8KKwkJbWF0Y2hfZmxhZ3MgPSB0cmFja19mbGFncyAmIEZMX0RJUjsKKwkJaWYgKG1hdGNoX2ZsYWdzICYmIGxlbiA9PSBtYXRjaF9sZW4pCisJCQlyZXR1cm4gbWF0Y2hfZmxhZ3M7CisJfQorCisJLyoKKwkgKiBPa2F5LCBubyBtYXRjaCBmcm9tIHRoZSBjYWNoZSBzbyBmYXIsIHNvIG5vdyB3ZSBoYXZlIHRvCisJICogY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIHBhdGggY29tcG9uZW50cy4KKwkgKi8KKwlyZXRfZmxhZ3MgPSBGTF9ESVI7CisJbGFzdF9zbGFzaF9kaXIgPSBsYXN0X3NsYXNoOworCW1heF9sZW4gPSBsZW4gPCBQQVRIX01BWCA/IGxlbiA6IFBBVEhfTUFYOworCXdoaWxlIChtYXRjaF9sZW4gPCBtYXhfbGVuKSB7CisJCWRvIHsKKwkJCWNhY2hlLT5wYXRoW21hdGNoX2xlbl0gPSBuYW1lW21hdGNoX2xlbl07CisJCQltYXRjaF9sZW4rKzsKKwkJfSB3aGlsZSAobWF0Y2hfbGVuIDwgbWF4X2xlbiAmJiBuYW1lW21hdGNoX2xlbl0gIT0gJy8nKTsKKwkJaWYgKG1hdGNoX2xlbiA+PSBtYXhfbGVuICYmICEodHJhY2tfZmxhZ3MgJiBGTF9GVUxMUEFUSCkpCisJCQlicmVhazsKKwkJbGFzdF9zbGFzaCA9IG1hdGNoX2xlbjsKKwkJY2FjaGUtPnBhdGhbbGFzdF9zbGFzaF0gPSAnXDAnOworCisJCWlmIChsYXN0X3NsYXNoIDw9IHByZWZpeF9sZW5fc3RhdF9mdW5jKQorCQkJcmV0ID0gc3RhdChjYWNoZS0+cGF0aCwgJnN0KTsKKwkJZWxzZQorCQkJcmV0ID0gbHN0YXQoY2FjaGUtPnBhdGgsICZzdCk7CisKKwkJaWYgKHJldCkgeworCQkJcmV0X2ZsYWdzID0gRkxfTFNUQVRFUlI7CisJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJCXJldF9mbGFncyB8PSBGTF9OT0VOVDsKKwkJfSBlbHNlIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQlsYXN0X3NsYXNoX2RpciA9IGxhc3Rfc2xhc2g7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisJCQlyZXRfZmxhZ3MgPSBGTF9TWU1MSU5LOworCQl9IGVsc2UgeworCQkJcmV0X2ZsYWdzID0gRkxfRVJSOwogCQl9CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gMDsKKworCS8qCisJICogQXQgdGhlIGVuZCB1cGRhdGUgdGhlIGNhY2hlLiAgTm90ZSB0aGF0IG1heCAzIGRpZmZlcmVudAorCSAqIHBhdGggdHlwZXMsIEZMX05PRU5ULCBGTF9TWU1MSU5LIGFuZCBGTF9ESVIsIGNhbiBiZSBjYWNoZWQKKwkgKiBmb3IgdGhlIG1vbWVudCEKKwkgKi8KKwlzYXZlX2ZsYWdzID0gcmV0X2ZsYWdzICYgdHJhY2tfZmxhZ3MgJiAoRkxfTk9FTlR8RkxfU1lNTElOSyk7CisJaWYgKHNhdmVfZmxhZ3MgJiYgbGFzdF9zbGFzaCA+IDAgJiYgbGFzdF9zbGFzaCA8PSBQQVRIX01BWCkgeworCQljYWNoZS0+cGF0aFtsYXN0X3NsYXNoXSA9ICdcMCc7CisJCWNhY2hlLT5sZW4gPSBsYXN0X3NsYXNoOworCQljYWNoZS0+ZmxhZ3MgPSBzYXZlX2ZsYWdzOworCX0gZWxzZSBpZiAoKHRyYWNrX2ZsYWdzICYgRkxfRElSKSAmJgorCQkgICBsYXN0X3NsYXNoX2RpciA+IDAgJiYgbGFzdF9zbGFzaF9kaXIgPD0gUEFUSF9NQVgpIHsKKwkJLyoKKwkJICogV2UgaGF2ZSBhIHNlcGFyYXRlIHRlc3QgZm9yIHRoZSBkaXJlY3RvcnkgY2FzZSwKKwkJICogc2luY2UgaXQgY291bGQgYmUgdGhhdCB3ZSBoYXZlIGZvdW5kIGEgc3ltbGluayBvciBhCisJCSAqIG5vbi1leGlzdGluZyBkaXJlY3RvcnkgYW5kIHRoZSB0cmFja19mbGFncyBzYXlzCisJCSAqIHRoYXQgd2UgY2Fubm90IGNhY2hlIHRoaXMgZmFjdCwgc28gdGhlIGNhY2hlIHdvdWxkCisJCSAqIHRoZW4gaGF2ZSBiZWVuIGxlZnQgZW1wdHkgaW4gdGhpcyBjYXNlLgorCQkgKgorCQkgKiBCdXQgaWYgd2UgYXJlIGFsbG93ZWQgdG8gdHJhY2sgcmVhbCBkaXJlY3Rvcmllcywgd2UKKwkJICogY2FuIHN0aWxsIGNhY2hlIHRoZSBwYXRoIGNvbXBvbmVudHMgYmVmb3JlIHRoZSBsYXN0CisJCSAqIG9uZSAodGhlIGZvdW5kIHN5bWxpbmsgb3Igbm9uLWV4aXN0aW5nIGNvbXBvbmVudCkuCisJCSAqLworCQljYWNoZS0+cGF0aFtsYXN0X3NsYXNoX2Rpcl0gPSAnXDAnOworCQljYWNoZS0+bGVuID0gbGFzdF9zbGFzaF9kaXI7CisJCWNhY2hlLT5mbGFncyA9IEZMX0RJUjsKKwl9IGVsc2UgeworCQlyZXNldF9sc3RhdF9jYWNoZShjYWNoZSk7CisJfQorCXJldHVybiByZXRfZmxhZ3M7Cit9CisKKy8qCisgKiBJbnZhbGlkYXRlIHRoZSBnaXZlbiAnbmFtZScgZnJvbSB0aGUgY2FjaGUsIGlmICduYW1lJyBtYXRjaGVzCisgKiBjb21wbGV0ZWx5IHdpdGggdGhlIGNhY2hlLgorICovCit2b2lkIGludmFsaWRhdGVfbHN0YXRfY2FjaGUoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlpbnQgbWF0Y2hfbGVuLCBwcmV2aW91c19zbGFzaDsKKwlzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSA9ICZkZWZhdWx0X2NhY2hlOwkvKiBGSVhNRSAqLworCisJbWF0Y2hfbGVuID0gbG9uZ2VzdF9wYXRoX21hdGNoKG5hbWUsIGxlbiwgY2FjaGUtPnBhdGgsIGNhY2hlLT5sZW4sCisJCQkJICAgICAgICZwcmV2aW91c19zbGFzaCk7CisJaWYgKGxlbiA9PSBtYXRjaF9sZW4pIHsKKwkJaWYgKChjYWNoZS0+dHJhY2tfZmxhZ3MgJiBGTF9ESVIpICYmIHByZXZpb3VzX3NsYXNoID4gMCkgeworCQkJY2FjaGUtPnBhdGhbcHJldmlvdXNfc2xhc2hdID0gJ1wwJzsKKwkJCWNhY2hlLT5sZW4gPSBwcmV2aW91c19zbGFzaDsKKwkJCWNhY2hlLT5mbGFncyA9IEZMX0RJUjsKKwkJfSBlbHNlIHsKKwkJCXJlc2V0X2xzdGF0X2NhY2hlKGNhY2hlKTsKKwkJfQorCX0KK30KKworLyoKKyAqIENvbXBsZXRlbHkgY2xlYXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBjYWNoZQorICovCit2b2lkIGNsZWFyX2xzdGF0X2NhY2hlKHZvaWQpCit7CisJc3RydWN0IGNhY2hlX2RlZiAqY2FjaGUgPSAmZGVmYXVsdF9jYWNoZTsJLyogRklYTUUgKi8KKwlyZXNldF9sc3RhdF9jYWNoZShjYWNoZSk7Cit9CisKKyNkZWZpbmUgVVNFX09OTFlfTFNUQVQgIDAKKworLyoKKyAqIFJldHVybiBub24temVybyBpZiBwYXRoICduYW1lJyBoYXMgYSBsZWFkaW5nIHN5bWxpbmsgY29tcG9uZW50CisgKi8KK2ludCB0aHJlYWRlZF9oYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoc3RydWN0IGNhY2hlX2RlZiAqY2FjaGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJcmV0dXJuIGxzdGF0X2NhY2hlKGNhY2hlLCBuYW1lLCBsZW4sIEZMX1NZTUxJTkt8RkxfRElSLCBVU0VfT05MWV9MU1RBVCkgJiBGTF9TWU1MSU5LOworfQorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHBhdGggJ25hbWUnIGhhcyBhIGxlYWRpbmcgc3ltbGluayBjb21wb25lbnQKKyAqLworaW50IGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCXJldHVybiB0aHJlYWRlZF9oYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoJmRlZmF1bHRfY2FjaGUsIG5hbWUsIGxlbik7Cit9CisKKy8qCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgcGF0aCAnbmFtZScgaGFzIGEgbGVhZGluZyBzeW1saW5rIGNvbXBvbmVudCBvcgorICogaWYgc29tZSBsZWFkaW5nIHBhdGggY29tcG9uZW50IGRvZXMgbm90IGV4aXN0cy4KKyAqLworaW50IGhhc19zeW1saW5rX29yX25vZW50X2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCXN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlID0gJmRlZmF1bHRfY2FjaGU7CS8qIEZJWE1FICovCisJcmV0dXJuIGxzdGF0X2NhY2hlKGNhY2hlLCBuYW1lLCBsZW4sCisJCQkgICBGTF9TWU1MSU5LfEZMX05PRU5UfEZMX0RJUiwgVVNFX09OTFlfTFNUQVQpICYKKwkJKEZMX1NZTUxJTkt8RkxfTk9FTlQpOworfQorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIGFsbCBwYXRoIGNvbXBvbmVudHMgb2YgJ25hbWUnIGV4aXN0cyBhcyBhCisgKiBkaXJlY3RvcnkuICBJZiBwcmVmaXhfbGVuID4gMCwgd2Ugd2lsbCB0ZXN0IHdpdGggdGhlIHN0YXQoKQorICogZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgbHN0YXQoKSBmdW5jdGlvbiBmb3IgYSBwcmVmaXggbGVuZ3RoIG9mCisgKiAncHJlZml4X2xlbicsIHRodXMgd2UgdGhlbiBhbGxvdyBmb3Igc3ltbGlua3MgaW4gdGhlIHByZWZpeCBwYXJ0IGFzCisgKiBsb25nIGFzIHRob3NlIHBvaW50cyB0byByZWFsIGV4aXN0aW5nIGRpcmVjdG9yaWVzLgorICovCitpbnQgaGFzX2RpcnNfb25seV9wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIGludCBwcmVmaXhfbGVuKQoreworCXN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlID0gJmRlZmF1bHRfY2FjaGU7CS8qIEZJWE1FICovCisJcmV0dXJuIGxzdGF0X2NhY2hlKGNhY2hlLCBuYW1lLCBsZW4sCisJCQkgICBGTF9ESVJ8RkxfRlVMTFBBVEgsIHByZWZpeF9sZW4pICYKKwkJRkxfRElSOworfQorCitzdGF0aWMgc3RydWN0IHJlbW92YWxfZGVmIHsKKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCWludCBsZW47Cit9IHJlbW92YWw7CisKK3N0YXRpYyB2b2lkIGRvX3JlbW92ZV9zY2hlZHVsZWRfZGlycyhpbnQgbmV3X2xlbikKK3sKKwl3aGlsZSAocmVtb3ZhbC5sZW4gPiBuZXdfbGVuKSB7CisJCXJlbW92YWwucGF0aFtyZW1vdmFsLmxlbl0gPSAnXDAnOworCQlpZiAocm1kaXIocmVtb3ZhbC5wYXRoKSkKKwkJCWJyZWFrOworCQlkbyB7CisJCQlyZW1vdmFsLmxlbi0tOworCQl9IHdoaWxlIChyZW1vdmFsLmxlbiA+IG5ld19sZW4gJiYKKwkJCSByZW1vdmFsLnBhdGhbcmVtb3ZhbC5sZW5dICE9ICcvJyk7CisJfQorCXJlbW92YWwubGVuID0gbmV3X2xlbjsKK30KKwordm9pZCBzY2hlZHVsZV9kaXJfZm9yX3JlbW92YWwoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlpbnQgbWF0Y2hfbGVuLCBsYXN0X3NsYXNoLCBpLCBwcmV2aW91c19zbGFzaDsKKworCW1hdGNoX2xlbiA9IGxhc3Rfc2xhc2ggPSBpID0KKwkJbG9uZ2VzdF9wYXRoX21hdGNoKG5hbWUsIGxlbiwgcmVtb3ZhbC5wYXRoLCByZW1vdmFsLmxlbiwKKwkJCQkgICAmcHJldmlvdXNfc2xhc2gpOworCS8qIEZpbmQgbGFzdCBzbGFzaCBpbnNpZGUgJ25hbWUnICovCisJd2hpbGUgKGkgPCBsZW4pIHsKKwkJaWYgKG5hbWVbaV0gPT0gJy8nKQorCQkJbGFzdF9zbGFzaCA9IGk7CisJCWkrKzsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFyZSBhYm91dCB0byBnbyBkb3duIHRoZSBkaXJlY3RvcnkgdHJlZSwgd2UgY2hlY2sgaWYKKwkgKiB3ZSBtdXN0IGZpcnN0IGdvIHVwd2FyZHMgdGhlIHRyZWUsIHN1Y2ggdGhhdCB3ZSB0aGVuIGNhbgorCSAqIHJlbW92ZSBwb3NzaWJsZSBlbXB0eSBkaXJlY3RvcmllcyBhcyB3ZSBnbyB1cHdhcmRzLgorCSAqLworCWlmIChtYXRjaF9sZW4gPCBsYXN0X3NsYXNoICYmIG1hdGNoX2xlbiA8IHJlbW92YWwubGVuKQorCQlkb19yZW1vdmVfc2NoZWR1bGVkX2RpcnMobWF0Y2hfbGVuKTsKKwkvKgorCSAqIElmIHdlIGdvIGRlZXBlciBkb3duIHRoZSBkaXJlY3RvcnkgdHJlZSwgd2Ugb25seSBuZWVkIHRvCisJICogc2F2ZSB0aGUgbmV3IHBhdGggY29tcG9uZW50cyBhcyB3ZSBnbyBkb3duLgorCSAqLworCWlmIChtYXRjaF9sZW4gPCBsYXN0X3NsYXNoKSB7CisJCW1lbWNweSgmcmVtb3ZhbC5wYXRoW21hdGNoX2xlbl0sICZuYW1lW21hdGNoX2xlbl0sCisJCSAgICAgICBsYXN0X3NsYXNoIC0gbWF0Y2hfbGVuKTsKKwkJcmVtb3ZhbC5sZW4gPSBsYXN0X3NsYXNoOworCX0KK30KKwordm9pZCByZW1vdmVfc2NoZWR1bGVkX2RpcnModm9pZCkKK3sKKwlkb19yZW1vdmVfc2NoZWR1bGVkX2RpcnMoMCk7CiB9CmRpZmYgLS1naXQgYS90L01ha2VmaWxlIGIvdC9NYWtlZmlsZQppbmRleCA5MTQ5MzczLi5iZjgxNmZjIDEwMDY0NAotLS0gYS90L01ha2VmaWxlCisrKyBiL3QvTWFrZWZpbGUKQEAgLTM4LDQgKzM4LDcgQEAKIAkkKE1BS0UpICQoVFNWTikgR0lUX1NWTl9OT19PUFRJTUlaRV9DT01NSVRTPTEgTENfQUxMPUMKIAkkKE1BS0UpICQoVFNWTikgR0lUX1NWTl9OT19PUFRJTUlaRV9DT01NSVRTPTAgTENfQUxMPWVuX1VTLlVURi04CiAKLS5QSE9OWTogcHJlLWNsZWFuICQoVCkgYWdncmVnYXRlLXJlc3VsdHMgY2xlYW4KK3ZhbGdyaW5kOgorCUdJVF9URVNUX09QVFM9LS12YWxncmluZCAkKE1BS0UpCisKKy5QSE9OWTogcHJlLWNsZWFuICQoVCkgYWdncmVnYXRlLXJlc3VsdHMgY2xlYW4gdmFsZ3JpbmQKZGlmZiAtLWdpdCBhL3QvUkVBRE1FIGIvdC9SRUFETUUKaW5kZXggOGYxMmQ0OC4uZDhmNmM3ZCAxMDA2NDQKLS0tIGEvdC9SRUFETUUKKysrIGIvdC9SRUFETUUKQEAgLTM5LDcgKzM5LDggQEAKICAgICAqIHBhc3NlZCBhbGwgMyB0ZXN0KHMpCiAKIFlvdSBjYW4gcGFzcyAtLXZlcmJvc2UgKG9yIC12KSwgLS1kZWJ1ZyAob3IgLWQpLCBhbmQgLS1pbW1lZGlhdGUKLShvciAtaSkgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHRvIHRoZSB0ZXN0LgorKG9yIC1pKSBjb21tYW5kIGxpbmUgYXJndW1lbnQgdG8gdGhlIHRlc3QsIG9yIGJ5IHNldHRpbmcgR0lUX1RFU1RfT1BUUworYXBwcm9wcmlhdGVseSBiZWZvcmUgcnVubmluZyAibWFrZSIuCiAKIC0tdmVyYm9zZTo6CiAJVGhpcyBtYWtlcyB0aGUgdGVzdCBtb3JlIHZlcmJvc2UuICBTcGVjaWZpY2FsbHksIHRoZQpAQCAtNTgsNiArNTksMjEgQEAKIAlUaGlzIGNhdXNlcyBhZGRpdGlvbmFsIGxvbmctcnVubmluZyB0ZXN0cyB0byBiZSBydW4gKHdoZXJlCiAJYXZhaWxhYmxlKSwgZm9yIG1vcmUgZXhoYXVzdGl2ZSB0ZXN0aW5nLgogCistLXZhbGdyaW5kOjoKKwlFeGVjdXRlIGFsbCBHaXQgYmluYXJpZXMgd2l0aCB2YWxncmluZCBhbmQgZXhpdCB3aXRoIHN0YXR1cworCTEyNiBvbiBlcnJvcnMgKGp1c3QgbGlrZSByZWd1bGFyIHRlc3RzLCB0aGlzIHdpbGwgb25seSBzdG9wCisJdGhlIHRlc3Qgc2NyaXB0IHdoZW4gcnVubmluZyB1bmRlciAtaSkuICBWYWxncmluZCBlcnJvcnMKKwlnbyB0byBzdGRlcnIsIHNvIHlvdSBtaWdodCB3YW50IHRvIHBhc3MgdGhlIC12IG9wdGlvbiwgdG9vLgorCisJU2luY2UgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gcnVuIHRoZSB0ZXN0cyB3aXRoIC0tdmFsZ3JpbmQgYW5kCisJbm90IHNlZSBhbnkgb3V0cHV0LCB0aGlzIG9wdGlvbiBpbXBsaWVzIC0tdmVyYm9zZS4gIEZvcgorCWNvbnZlbmllbmNlLCBpdCBhbHNvIGltcGxpZXMgLS10ZWUuCisKKy0tdGVlOjoKKwlJbiBhZGRpdGlvbiB0byBwcmludGluZyB0aGUgdGVzdCBvdXRwdXQgdG8gdGhlIHRlcm1pbmFsLAorCXdyaXRlIGl0IHRvIGZpbGVzIG5hbWVkICd0L3Rlc3QtcmVzdWx0cy8kVEVTVF9OQU1FLm91dCcuCisJQXMgdGhlIG5hbWVzIGRlcGVuZCBvbiB0aGUgdGVzdHMnIGZpbGUgbmFtZXMsIGl0IGlzIHNhZmUgdG8KKwlydW4gdGhlIHRlc3RzIHdpdGggdGhpcyBvcHRpb24gaW4gcGFyYWxsZWwuCiAKIFNraXBwaW5nIFRlc3RzCiAtLS0tLS0tLS0tLS0tLQpAQCAtMjEyLDYgKzIyOCwyNCBAQAogICAgaXMgdG8gc3VtbWFyaXplIHN1Y2Nlc3NlcyBhbmQgZmFpbHVyZXMgaW4gdGhlIHRlc3Qgc2NyaXB0IGFuZAogICAgZXhpdCB3aXRoIGFuIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuCiAKKyAtIHRlc3RfdGljaworCisgICBNYWtlIGNvbW1pdCBhbmQgdGFnIG5hbWVzIGNvbnNpc3RlbnQgYnkgc2V0dGluZyB0aGUgYXV0aG9yIGFuZAorICAgY29tbWl0dGVyIHRpbWVzIHRvIGRlZmluZWQgc3RhdGVkLiAgU3Vic2VxdWVudCBjYWxscyB3aWxsCisgICBhZHZhbmNlIHRoZSB0aW1lcyBieSBhIGZpeGVkIGFtb3VudC4KKworIC0gdGVzdF9jb21taXQgPG1lc3NhZ2U+IFs8ZmlsZW5hbWU+IFs8Y29udGVudHM+XV0KKworICAgQ3JlYXRlcyBhIGNvbW1pdCB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLCBjb21taXR0aW5nIHRoZSBnaXZlbgorICAgZmlsZSB3aXRoIHRoZSBnaXZlbiBjb250ZW50cyAoZGVmYXVsdCBmb3IgYm90aCBpcyB0byByZXVzZSB0aGUKKyAgIG1lc3NhZ2Ugc3RyaW5nKSwgYW5kIGFkZHMgYSB0YWcgKGFnYWluIHJldXNpbmcgdGhlIG1lc3NhZ2UKKyAgIHN0cmluZyBhcyBuYW1lKS4gIENhbGxzIHRlc3RfdGljayB0byBtYWtlIHRoZSBTSEEtMXMKKyAgIHJlcHJvZHVjaWJsZS4KKworIC0gdGVzdF9tZXJnZSA8bWVzc2FnZT4gPGNvbW1pdC1vci10YWc+CisKKyAgIE1lcmdlcyB0aGUgZ2l2ZW4gcmV2IHVzaW5nIHRoZSBnaXZlbiBtZXNzYWdlLiAgTGlrZSB0ZXN0X2NvbW1pdCwKKyAgIGNyZWF0ZXMgYSB0YWcgYW5kIGNhbGxzIHRlc3RfdGljayBiZWZvcmUgY29tbWl0dGluZy4KIAogVGlwcyBmb3IgV3JpdGluZyBUZXN0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdC9hbm5vdGF0ZS10ZXN0cy5zaCBiL3QvYW5ub3RhdGUtdGVzdHMuc2gKaW5kZXggY2FjYjI3My4uMzk2Yjk2NSAxMDA2NDQKLS0tIGEvdC9hbm5vdGF0ZS10ZXN0cy5zaAorKysgYi90L2Fubm90YXRlLXRlc3RzLnNoCkBAIC0xMTQsNyArMTE0LDEwIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnc29tZSBlZGl0JyBcCiAgICAgJ212IGZpbGUgZmlsZS5vcmlnICYmCi0gICAgc2VkIC1lICJzL14zQS85OS8iIC1lICIvXjFBL2QiIC1lICIvXmluY29tcGxldGUvZCIgPCBmaWxlLm9yaWcgPiBmaWxlICYmCisgICAgeworCWNhdCBmaWxlLm9yaWcgJiYKKwllY2hvCisgICAgfSB8IHNlZCAtZSAicy9eM0EvOTkvIiAtZSAiL14xQS9kIiAtZSAiL15pbmNvbXBsZXRlL2QiID4gZmlsZSAmJgogICAgIGVjaG8gImluY29tcGxldGUiIHwgdHIgLWQgIlxcMDEyIiA+PmZpbGUgJiYKICAgICBHSVRfQVVUSE9SX05BTUU9IkQiIGdpdCBjb21taXQgLWEgLW0gImVkaXQiJwogCmRpZmYgLS1naXQgYS90L2xpYi1naXQtc3ZuLnNoIGIvdC9saWItZ2l0LXN2bi5zaAppbmRleCA2N2M0MzFkLi41NjU0OTYyIDEwMDY0NAotLS0gYS90L2xpYi1naXQtc3ZuLnNoCisrKyBiL3QvbGliLWdpdC1zdm4uc2gKQEAgLTUsOSArNSwxMiBAQAogCiBpZiB0ZXN0IC1uICIkTk9fU1ZOX1RFU1RTIgogdGhlbgotCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXBwaW5nIGdpdCBzdm4gdGVzdHMsIE5PX1NWTl9URVNUUyBkZWZpbmVkJyA6CisJc2F5ICdza2lwcGluZyBnaXQgc3ZuIHRlc3RzLCBOT19TVk5fVEVTVFMgZGVmaW5lZCcKIAl0ZXN0X2RvbmUKLQlleGl0CitmaQoraWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkw7IHRoZW4KKwlzYXkgJ3NraXBwaW5nIGdpdCBzdm4gdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKIGZpCiAKIEdJVF9ESVI9JFBXRC8uZ2l0CkBAIC0xNywxMyArMjAsMTQgQEAKIHN2biA+L2Rldi9udWxsIDI+JjEKIGlmIHRlc3QgJD8gLW5lIDEKIHRoZW4KLSAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwcGluZyBnaXQgc3ZuIHRlc3RzLCBzdm4gbm90IGZvdW5kJyA6CisgICAgc2F5ICdza2lwcGluZyBnaXQgc3ZuIHRlc3RzLCBzdm4gbm90IGZvdW5kJwogICAgIHRlc3RfZG9uZQotICAgIGV4aXQKIGZpCiAKIHN2bnJlcG89JFBXRC9zdm5yZXBvCiBleHBvcnQgc3ZucmVwbworc3ZuY29uZj0kUFdEL3N2bmNvbmYKK2V4cG9ydCBzdm5jb25mCiAKIHBlcmwgLXcgLWUgIgogdXNlIFNWTjo6Q29yZTsKQEAgLTQxLDkgKzQ1LDggQEAKIAllbHNlCiAJCWVycj0nUGVybCBTVk4gbGlicmFyaWVzIG5vdCBmb3VuZCBvciB1bnVzYWJsZSwgc2tpcHBpbmcgdGVzdCcKIAlmaQotCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRlcnIiIDoKKwlzYXkgIiRlcnIiCiAJdGVzdF9kb25lCi0JZXhpdAogZmkKIAogcmF3c3ZucmVwbz0iJHN2bnJlcG8iCkBAIC01Myw2ICs1NiwxOSBAQAogCXRlc3QtY2htdGltZSArMSAiJDEiCiB9CiAKKyMgV2UgbmVlZCB0aGlzLCBiZWNhdXNlIHdlIHNob3VsZCBwYXNzIGVtcHR5IGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IHRvCisjIHRoZSAnc3ZuIGNvbW1pdCcgdG8gYXZvaWQgYXV0b21hdGVkIHByb3BlcnR5IGNoYW5nZXMgYW5kIG90aGVyIHN0dWZmCisjIHRoYXQgY291bGQgYmUgc2V0IGZyb20gdXNlcidzIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gfi8uc3VidmVyc2lvbi4KK3N2bl9jbWQgKCkgeworCVsgLWQgIiRzdm5jb25mIiBdIHx8IG1rZGlyICIkc3ZuY29uZiIKKwlvcmlnX3N2bmNtZD0iJDEiOyBzaGlmdAorCWlmIFsgLXogIiRvcmlnX3N2bmNtZCIgXTsgdGhlbgorCQlzdm4KKwkJcmV0dXJuCisJZmkKKwlzdm4gIiRvcmlnX3N2bmNtZCIgLS1jb25maWctZGlyICIkc3ZuY29uZiIgIiRAIgorfQorCiBmb3IgZCBpbiBcCiAJIiRTVk5fSFRUUERfUEFUSCIgXAogCS91c3Ivc2Jpbi9hcGFjaGUyIFwKQEAgLTE0NCw3ICsxNjAsNiBAQAogICAgIHRoZW4KICAgICAgICAgc2F5ICdza2lwcGluZyBzdm5zZXJ2ZSB0ZXN0LiAoc2V0ICRTVk5TRVJWRV9QT1JUIHRvIGVuYWJsZSknCiAgICAgICAgIHRlc3RfZG9uZQotICAgICAgICBleGl0CiAgICAgZmkKIH0KIApkaWZmIC0tZ2l0IGEvdC9saWItaHR0cGQuc2ggYi90L2xpYi1odHRwZC5zaAppbmRleCA2YWMzMTJiLi42NzY1YjA4IDEwMDY0NAotLS0gYS90L2xpYi1odHRwZC5zaAorKysgYi90L2xpYi1odHRwZC5zaApAQCAtOCwxMCArOCwyMyBAQAogCXNheSAic2tpcHBpbmcgdGVzdCwgbmV0d29yayB0ZXN0aW5nIGRpc2FibGVkIGJ5IGRlZmF1bHQiCiAJc2F5ICIoZGVmaW5lIEdJVF9URVNUX0hUVFBEIHRvIGVuYWJsZSkiCiAJdGVzdF9kb25lCi0JZXhpdAogZmkKIAotTElCX0hUVFBEX1BBVEg9JHtMSUJfSFRUUERfUEFUSC0nL3Vzci9zYmluL2FwYWNoZTInfQorSFRUUERfUEFSQT0iIgorCitjYXNlICQodW5hbWUpIGluCisJRGFyd2luKQorCQlERUZBVUxUX0hUVFBEX1BBVEg9Jy91c3Ivc2Jpbi9odHRwZCcKKwkJREVGQVVMVF9IVFRQRF9NT0RVTEVfUEFUSD0nL3Vzci9saWJleGVjL2FwYWNoZTInCisJCUhUVFBEX1BBUkE9IiRIVFRQRF9QQVJBIC1ERGFyd2luIgorCTs7CisJKikKKwkJREVGQVVMVF9IVFRQRF9QQVRIPScvdXNyL3NiaW4vYXBhY2hlMicKKwkJREVGQVVMVF9IVFRQRF9NT0RVTEVfUEFUSD0nL3Vzci9saWIvYXBhY2hlMi9tb2R1bGVzJworCTs7Citlc2FjCisKK0xJQl9IVFRQRF9QQVRIPSR7TElCX0hUVFBEX1BBVEgtIiRERUZBVUxUX0hUVFBEX1BBVEgifQogTElCX0hUVFBEX1BPUlQ9JHtMSUJfSFRUUERfUE9SVC0nODExMSd9CiAKIFRFU1RfUEFUSD0iJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQKQEAgLTIwLDkgKzMzLDggQEAKIAogaWYgISB0ZXN0IC14ICIkTElCX0hUVFBEX1BBVEgiCiB0aGVuCi0gICAgICAgIHNheSAic2tpcHBpbmcgdGVzdCwgbm8gd2ViIHNlcnZlciBmb3VuZCBhdCAnJExJQl9IVFRQRF9QQVRIJyIKLSAgICAgICAgdGVzdF9kb25lCi0gICAgICAgIGV4aXQKKwlzYXkgInNraXBwaW5nIHRlc3QsIG5vIHdlYiBzZXJ2ZXIgZm91bmQgYXQgJyRMSUJfSFRUUERfUEFUSCciCisJdGVzdF9kb25lCiBmaQogCiBIVFRQRF9WRVJTSU9OPWAkTElCX0hUVFBEX1BBVEggLXYgfCBcCkBAIC0zNiwxNyArNDgsMTQgQEAKIAkJdGhlbgogCQkJc2F5ICJza2lwcGluZyB0ZXN0LCBhdCBsZWFzdCBBcGFjaGUgdmVyc2lvbiAyIGlzIHJlcXVpcmVkIgogCQkJdGVzdF9kb25lCi0JCQlleGl0CiAJCWZpCiAKLQkJTElCX0hUVFBEX01PRFVMRV9QQVRIPScvdXNyL2xpYi9hcGFjaGUyL21vZHVsZXMnCisJCUxJQl9IVFRQRF9NT0RVTEVfUEFUSD0iJERFRkFVTFRfSFRUUERfTU9EVUxFX1BBVEgiCiAJZmkKIGVsc2UKIAllcnJvciAiQ291bGQgbm90IGlkZW50aWZ5IHdlYiBzZXJ2ZXIgYXQgJyRMSUJfSFRUUERfUEFUSCciCiBmaQogCi1IVFRQRF9QQVJBPSIiCi0KIHByZXBhcmVfaHR0cGQoKSB7CiAJbWtkaXIgLXAgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiCiAKQEAgLTgyLDE4ICs5MSwyNSBAQAogfQogCiBzdGFydF9odHRwZCgpIHsKLQlwcmVwYXJlX2h0dHBkCisJcHJlcGFyZV9odHRwZCA+JjMgMj4mNAogCi0JdHJhcCAnc3RvcF9odHRwZDsgZGllJyBleGl0CisJdHJhcCAnY29kZT0kPzsgc3RvcF9odHRwZDsgKGV4aXQgJGNvZGUpOyBkaWUnIEVYSVQKIAogCSIkTElCX0hUVFBEX1BBVEgiIC1kICIkSFRUUERfUk9PVF9QQVRIIiBcCiAJCS1mICIkVEVTVF9QQVRIL2FwYWNoZS5jb25mIiAkSFRUUERfUEFSQSBcCi0JCS1jICJMaXN0ZW4gMTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVCIgLWsgc3RhcnQKKwkJLWMgIkxpc3RlbiAxMjcuMC4wLjE6JExJQl9IVFRQRF9QT1JUIiAtayBzdGFydCBcCisJCT4mMyAyPiY0CisJaWYgdGVzdCAkPyAtbmUgMAorCXRoZW4KKwkJc2F5ICJza2lwcGluZyB0ZXN0LCB3ZWIgc2VydmVyIHNldHVwIGZhaWxlZCIKKwkJdHJhcCAnZGllJyBFWElUCisJCXRlc3RfZG9uZQorCWZpCiB9CiAKIHN0b3BfaHR0cGQoKSB7Ci0JdHJhcCAnZGllJyBleGl0CisJdHJhcCAnZGllJyBFWElUCiAKIAkiJExJQl9IVFRQRF9QQVRIIiAtZCAiJEhUVFBEX1JPT1RfUEFUSCIgXAotCQktZiAiJFRFU1RfUEFUSC9hcGFjaGUuY29uZiIgLWsgc3RvcAorCQktZiAiJFRFU1RfUEFUSC9hcGFjaGUuY29uZiIgJEhUVFBEX1BBUkEgLWsgc3RvcAogfQpkaWZmIC0tZ2l0IGEvdC9saWItaHR0cGQvYXBhY2hlLmNvbmYgYi90L2xpYi1odHRwZC9hcGFjaGUuY29uZgppbmRleCBmZGIxOWE1Li4yMWFhNDJmIDEwMDY0NAotLS0gYS90L2xpYi1odHRwZC9hcGFjaGUuY29uZgorKysgYi90L2xpYi1odHRwZC9hcGFjaGUuY29uZgpAQCAtMSw5ICsxLDEzIEBACiBTZXJ2ZXJOYW1lIGR1bW15CitMb2NrRmlsZSBhY2NlcHQubG9jawogUGlkRmlsZSBodHRwZC5waWQKIERvY3VtZW50Um9vdCB3d3cKIExvZ0Zvcm1hdCAiJWggJWwgJXUgJXQgXCIlclwiICU+cyAlYiIgY29tbW9uCiBDdXN0b21Mb2cgYWNjZXNzLmxvZyBjb21tb24KIEVycm9yTG9nIGVycm9yLmxvZworPElmTW9kdWxlICFtb2RfbG9nX2NvbmZpZy5jPgorCUxvYWRNb2R1bGUgbG9nX2NvbmZpZ19tb2R1bGUgbW9kdWxlcy9tb2RfbG9nX2NvbmZpZy5zbworPC9JZk1vZHVsZT4KIAogPElmRGVmaW5lIFNTTD4KIExvYWRNb2R1bGUgc3NsX21vZHVsZSBtb2R1bGVzL21vZF9zc2wuc28KZGlmZiAtLWdpdCBhL3QvbGliLXJlYmFzZS5zaCBiL3QvbGliLXJlYmFzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjBhMjMxCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItcmViYXNlLnNoCkBAIC0wLDAgKzEsNDggQEAKKyMhL2Jpbi9zaAorCisjIEFmdGVyIHNldHRpbmcgdGhlIGZha2UgZWRpdG9yIHdpdGggdGhpcyBmdW5jdGlvbiwgeW91IGNhbgorIworIyAtIG92ZXJyaWRlIHRoZSBjb21taXQgbWVzc2FnZSB3aXRoICRGQUtFX0NPTU1JVF9NRVNTQUdFLAorIyAtIGFtZW5kIHRoZSBjb21taXQgbWVzc2FnZSB3aXRoICRGQUtFX0NPTU1JVF9BTUVORAorIyAtIGNoZWNrIHRoYXQgbm9uLWNvbW1pdCBtZXNzYWdlcyBoYXZlIGEgY2VydGFpbiBsaW5lIGNvdW50IHdpdGggJEVYUEVDVF9DT1VOVAorIyAtIHJld3JpdGUgYSByZWJhc2UgLWkgc2NyaXB0IHdpdGggJEZBS0VfTElORVMgaW4gdGhlIGZvcm0KKyMKKyMJIls8bGluZW5vMT5dIFs8bGluZW5vMj5dLi4uIgorIworIyAgIElmIGEgbGluZSBudW1iZXIgaXMgcHJlZml4ZWQgd2l0aCAic3F1YXNoIiBvciAiZWRpdCIsIHRoZSByZXNwZWN0aXZlIGxpbmUncworIyAgIGNvbW1hbmQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBzcGVjaWZpZWQgb25lLgorCitzZXRfZmFrZV9lZGl0b3IgKCkgeworCWVjaG8gIiMhJFNIRUxMX1BBVEgiID5mYWtlLWVkaXRvci5zaAorCWNhdCA+PiBmYWtlLWVkaXRvci5zaCA8PFxFT0YKK2Nhc2UgIiQxIiBpbgorKi9DT01NSVRfRURJVE1TRykKKwl0ZXN0IC16ICIkRkFLRV9DT01NSVRfTUVTU0FHRSIgfHwgZWNobyAiJEZBS0VfQ09NTUlUX01FU1NBR0UiID4gIiQxIgorCXRlc3QgLXogIiRGQUtFX0NPTU1JVF9BTUVORCIgfHwgZWNobyAiJEZBS0VfQ09NTUlUX0FNRU5EIiA+PiAiJDEiCisJZXhpdAorCTs7Citlc2FjCit0ZXN0IC16ICIkRVhQRUNUX0NPVU5UIiB8fAorCXRlc3QgIiRFWFBFQ1RfQ09VTlQiID0gJChzZWQgLWUgJy9eIy9kJyAtZSAnL14kL2QnIDwgIiQxIiB8IHdjIC1sKSB8fAorCWV4aXQKK3Rlc3QgLXogIiRGQUtFX0xJTkVTIiAmJiBleGl0CitncmVwIC12ICdeIycgPCAiJDEiID4gIiQxIi50bXAKK3JtIC1mICIkMSIKK2NhdCAiJDEiLnRtcAorYWN0aW9uPXBpY2sKK2ZvciBsaW5lIGluICRGQUtFX0xJTkVTOyBkbworCWNhc2UgJGxpbmUgaW4KKwlzcXVhc2h8ZWRpdCkKKwkJYWN0aW9uPSIkbGluZSI7OworCSopCisJCWVjaG8gc2VkIC1uICIke2xpbmV9cy9ecGljay8kYWN0aW9uL3AiCisJCXNlZCAtbiAiJHtsaW5lfXAiIDwgIiQxIi50bXAKKwkJc2VkIC1uICIke2xpbmV9cy9ecGljay8kYWN0aW9uL3AiIDwgIiQxIi50bXAgPj4gIiQxIgorCQlhY3Rpb249cGljazs7CisJZXNhYworZG9uZQorRU9GCisKKwl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9mYWtlLWVkaXRvci5zaCIKKwljaG1vZCBhK3ggZmFrZS1lZGl0b3Iuc2gKK30KZGlmZiAtLWdpdCBhL3QvdDAwMDAtYmFzaWMuc2ggYi90L3QwMDAwLWJhc2ljLnNoCmluZGV4IDcwZGYxNWMuLmY0Y2E0ZmMgMTAwNzU1Ci0tLSBhL3QvdDAwMDAtYmFzaWMuc2gKKysrIGIvdC90MDAwMC1iYXNpYy5zaApAQCAtNTcsNiArNTcsMjEgQEAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3ByZXRlbmQgd2UgaGF2ZSBmaXhlZCBhIGtub3duIGJyZWFrYWdlJyAnCiAgICAgOgogJwordGVzdF9zZXRfcHJlcmVxIEhBVkVJVAoraGF2ZWl0PW5vCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEhBVkVJVCAndGVzdCBydW5zIGlmIHByZXJlcXVpc2l0ZSBpcyBzYXRpc2ZpZWQnICcKKyAgICB0ZXN0X2hhdmVfcHJlcmVxIEhBVkVJVCAmJgorICAgIGhhdmVpdD15ZXMKKycKK2RvbnRoYXZlaXQ9eWVzCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERPTlRIQVZFSVQgJ3VubWV0IHByZXJlcXVpc2l0ZSBjYXVzZXMgdGVzdCB0byBiZSBza2lwcGVkJyAnCisgICAgZG9udGhhdmVpdD1ubworJworaWYgdGVzdCAkaGF2ZWl0JGRvbnRoYXZlaXQgIT0geWVzeWVzCit0aGVuCisJc2F5ICJidWcgaW4gdGVzdCBmcmFtZXdvcms6IHByZXJlcXVpc2l0ZSB0YWdzIGRvIG5vdCB3b3JrIHJlbGlhYmx5IgorCWV4aXQgMQorZmkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBCYXNpY3Mgb2YgdGhlIGJhc2ljcwpAQCAtMTAwLDEyICsxMTUsMzEgQEAKICAgICAndGVzdCAiJHRyZWUiID0gNGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNCcKIAogIyBWYXJpb3VzIHR5cGVzIG9mIG9iamVjdHMKKyMgU29tZSBmaWxlc3lzdGVtcyBkbyBub3Qgc3VwcG9ydCBzeW1ibGljIGxpbmtzOyBvbiBzdWNoIHN5c3RlbXMKKyMgc29tZSBleHBlY3RlZCB2YWx1ZXMgYXJlIGRpZmZlcmVudAogbWtkaXIgcGF0aDIgcGF0aDMgcGF0aDMvc3VicDMKLWZvciBwIGluIHBhdGgwIHBhdGgyL2ZpbGUyIHBhdGgzL2ZpbGUzIHBhdGgzL3N1YnAzL2ZpbGUzCitwYXRocz0ncGF0aDAgcGF0aDIvZmlsZTIgcGF0aDMvZmlsZTMgcGF0aDMvc3VicDMvZmlsZTMnCitmb3IgcCBpbiAkcGF0aHMKIGRvCiAgICAgZWNobyAiaGVsbG8gJHAiID4kcAotICAgIGxuIC1zICJoZWxsbyAkcCIgJHtwfXN5bQogZG9uZQoraWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwordGhlbgorCWZvciBwIGluICRwYXRocworCWRvCisJCWxuIC1zICJoZWxsbyAkcCIgJHtwfXN5bQorCWRvbmUKKwlleHBlY3RmaWx0ZXI9Y2F0CisJZXhwZWN0ZWR0cmVlPTA4NzcwNGE5NmJhZjFjMmQxYzg2OWE4YjA4NDQ4MWUxMjFjODhiNWIKKwlleHBlY3RlZHB0cmVlMT0yMWFlODI2OWNhY2JlNTdhZTA5MTM4ZGNjM2EyODg3ZjkwNGQwMmIzCisJZXhwZWN0ZWRwdHJlZTI9M2M1ZTUzOTlmM2EzMzNlZGRlY2NlN2E5Yjk0NjViNjNmNjVmNTFlMgorZWxzZQorCWV4cGVjdGZpbHRlcj0nZ3JlcCAtdiBzeW0nCisJZXhwZWN0ZWR0cmVlPThlMThlZGY3ZDdlZGNmNDM3MWEzYWM2YWU1ZjA3YzI2NDFkYjdjNDYKKwlleHBlY3RlZHB0cmVlMT1jZmI4NTkxYjJmNjVkZThiOGNjMTAyMGNkN2Q5ZTY3ZTc3OTNiMzI1CisJZXhwZWN0ZWRwdHJlZTI9Y2U1ODA0NDhmMDE0OGI5ODVhNTEzYjY5M2ZkZjdkODAyY2FjYjQ0ZgorZmkKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2FkZGluZyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMgd2l0aCBnaXQgdXBkYXRlLWluZGV4IC0tYWRkLicgXAogICAgICdmaW5kIHBhdGgqICEgLXR5cGUgZCAtcHJpbnQgfCB4YXJncyBnaXQgdXBkYXRlLWluZGV4IC0tYWRkJwpAQCAtMTE1LDcgKzE0OSw3IEBACiAgICAgJ3Nob3dpbmcgc3RhZ2Ugd2l0aCBnaXQgbHMtZmlsZXMgLS1zdGFnZScgXAogICAgICdnaXQgbHMtZmlsZXMgLS1zdGFnZSA+Y3VycmVudCcKIAotY2F0ID5leHBlY3RlZCA8PFxFT0YKKyRleHBlY3RmaWx0ZXIgPmV4cGVjdGVkIDw8XEVPRgogMTAwNjQ0IGY4NzI5MGY4ZWIyY2JiZWE3ODU3MjE0NDU5YTA3Mzk5MjdlYWIxNTQgMAlwYXRoMAogMTIwMDAwIDE1YTk4NDMzYWUzMzExNGIwODVmM2ViM2JiMDNiODMyYjMxODBhMDEgMAlwYXRoMHN5bQogMTAwNjQ0IDNmZWZmOTQ5ZWQwMGE2MmQ5ZjdhZjk3YzE1Y2Q4YTMwNTk1ZTdhYzcgMAlwYXRoMi9maWxlMgpAQCAtMTI3LDE0ICsxNjEsMTQgQEAKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZhbGlkYXRlIGdpdCBscy1maWxlcyBvdXRwdXQgZm9yIGEga25vd24gdHJlZS4nIFwKLSAgICAnZGlmZiBjdXJyZW50IGV4cGVjdGVkJworICAgICd0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnd3JpdGluZyB0cmVlIG91dCB3aXRoIGdpdCB3cml0ZS10cmVlLicgXAogICAgICd0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpJwogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZhbGlkYXRlIG9iamVjdCBJRCBmb3IgYSBrbm93biB0cmVlLicgXAotICAgICd0ZXN0ICIkdHJlZSIgPSAwODc3MDRhOTZiYWYxYzJkMWM4NjlhOGIwODQ0ODFlMTIxYzg4YjViJworICAgICd0ZXN0ICIkdHJlZSIgPSAiJGV4cGVjdGVkdHJlZSInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdzaG93aW5nIHRyZWUgd2l0aCBnaXQgbHMtdHJlZScgXApAQCAtMTQ1LDE2ICsxNzksMTYgQEAKIDA0MDAwMCB0cmVlIDU4YTA5YzIzZTJjYTE1MjE5M2YyNzg2ZTA2OTg2YjdiNjcxMmJkYmUJcGF0aDIKIDA0MDAwMCB0cmVlIDIxYWU4MjY5Y2FjYmU1N2FlMDkxMzhkY2MzYTI4ODdmOTA0ZDAyYjMJcGF0aDMKIEVPRgotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKICAgICAnZ2l0IGxzLXRyZWUgb3V0cHV0IGZvciBhIGtub3duIHRyZWUuJyBcCi0gICAgJ2RpZmYgY3VycmVudCBleHBlY3RlZCcKKyAgICAndGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogIyBUaGlzIGNoYW5nZWQgaW4gbHMtdHJlZSBwYXRoc3BlYyBjaGFuZ2UgLS0gcmVjdXJzaXZlIGRvZXMKICMgbm90IHNob3cgdHJlZSBub2RlcyBhbnltb3JlLgogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3Nob3dpbmcgdHJlZSB3aXRoIGdpdCBscy10cmVlIC1yJyBcCiAgICAgJ2dpdCBscy10cmVlIC1yICR0cmVlID5jdXJyZW50JwotY2F0ID5leHBlY3RlZCA8PFxFT0YKKyRleHBlY3RmaWx0ZXIgPmV4cGVjdGVkIDw8XEVPRgogMTAwNjQ0IGJsb2IgZjg3MjkwZjhlYjJjYmJlYTc4NTcyMTQ0NTlhMDczOTkyN2VhYjE1NAlwYXRoMAogMTIwMDAwIGJsb2IgMTVhOTg0MzNhZTMzMTE0YjA4NWYzZWIzYmIwM2I4MzJiMzE4MGEwMQlwYXRoMHN5bQogMTAwNjQ0IGJsb2IgM2ZlZmY5NDllZDAwYTYyZDlmN2FmOTdjMTVjZDhhMzA1OTVlN2FjNwlwYXRoMi9maWxlMgpAQCAtMTY2LDcgKzIwMCw3IEBACiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdnaXQgbHMtdHJlZSAtciBvdXRwdXQgZm9yIGEga25vd24gdHJlZS4nIFwKLSAgICAnZGlmZiBjdXJyZW50IGV4cGVjdGVkJworICAgICd0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50JwogCiAjIEJ1dCB3aXRoIC1yIC10IHdlIGNhbiBoYXZlIGJvdGguCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTE4NSwyMyArMjE5LDIzIEBACiAxMDA2NDQgYmxvYiAwMGZiNTkwOGNiOTdjMjU2NGE5NzgzYzBjNjQwODczMzNiM2I0NjRmCXBhdGgzL3N1YnAzL2ZpbGUzCiAxMjAwMDAgYmxvYiA2NjQ5YTFlYmU5ZTlmMWM1NTNiNjZmNWE2ZTc0MTM2YTA3Y2NjNTdjCXBhdGgzL3N1YnAzL2ZpbGUzc3ltCiBFT0YKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCiAgICAgJ2dpdCBscy10cmVlIC1yIG91dHB1dCBmb3IgYSBrbm93biB0cmVlLicgXAotICAgICdkaWZmIGN1cnJlbnQgZXhwZWN0ZWQnCisgICAgJ3Rlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd3cml0aW5nIHBhcnRpYWwgdHJlZSBvdXQgd2l0aCBnaXQgd3JpdGUtdHJlZSAtLXByZWZpeC4nIFwKICAgICAncHRyZWU9JChnaXQgd3JpdGUtdHJlZSAtLXByZWZpeD1wYXRoMyknCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmFsaWRhdGUgb2JqZWN0IElEIGZvciBhIGtub3duIHRyZWUuJyBcCi0gICAgJ3Rlc3QgIiRwdHJlZSIgPSAyMWFlODI2OWNhY2JlNTdhZTA5MTM4ZGNjM2EyODg3ZjkwNGQwMmIzJworICAgICd0ZXN0ICIkcHRyZWUiID0gIiRleHBlY3RlZHB0cmVlMSInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd3cml0aW5nIHBhcnRpYWwgdHJlZSBvdXQgd2l0aCBnaXQgd3JpdGUtdHJlZSAtLXByZWZpeC4nIFwKICAgICAncHRyZWU9JChnaXQgd3JpdGUtdHJlZSAtLXByZWZpeD1wYXRoMy9zdWJwMyknCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmFsaWRhdGUgb2JqZWN0IElEIGZvciBhIGtub3duIHRyZWUuJyBcCi0gICAgJ3Rlc3QgIiRwdHJlZSIgPSAzYzVlNTM5OWYzYTMzM2VkZGVjY2U3YTliOTQ2NWI2M2Y2NWY1MWUyJworICAgICd0ZXN0ICIkcHRyZWUiID0gIiRleHBlY3RlZHB0cmVlMiInCiAKIGNhdCA+YmFkb2JqZWN0cyA8PEVPRgogMTAwNjQ0IGJsb2IgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAlkaXIvZmlsZTEKQEAgLTIzNCw3ICsyNjgsNyBAQAogICAgICBuZXd0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCiAgICAgIHRlc3QgIiRuZXd0cmVlIiA9ICIkdHJlZSInCiAKLWNhdCA+ZXhwZWN0ZWQgPDxcRU9GCiskZXhwZWN0ZmlsdGVyID5leHBlY3RlZCA8PFxFT0YKIDoxMDA2NDQgMTAwNjQ0IGY4NzI5MGY4ZWIyY2JiZWE3ODU3MjE0NDU5YTA3Mzk5MjdlYWIxNTQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNCXBhdGgwCiA6MTIwMDAwIDEyMDAwMCAxNWE5ODQzM2FlMzMxMTRiMDg1ZjNlYjNiYjAzYjgzMmIzMTgwYTAxIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTQlwYXRoMHN5bQogOjEwMDY0NCAxMDA2NDQgM2ZlZmY5NDllZDAwYTYyZDlmN2FmOTdjMTVjZDhhMzA1OTVlN2FjNyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE0JcGF0aDIvZmlsZTIKQEAgLTI1Nyw3ICsyOTEsNyBAQAogICAgICdnaXQgZGlmZi1maWxlcyA+Y3VycmVudCAmJiBjbXAgLXMgY3VycmVudCAvZGV2L251bGwnCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLVA9MDg3NzA0YTk2YmFmMWMyZDFjODY5YThiMDg0NDgxZTEyMWM4OGI1YgorUD0kZXhwZWN0ZWR0cmVlCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnZ2l0IGNvbW1pdC10cmVlIHJlY29yZHMgdGhlIGNvcnJlY3QgdHJlZSBpbiBhIGNvbW1pdC4nIFwKICAgICAnY29tbWl0MD0kKGVjaG8gTk8gfCBnaXQgY29tbWl0LXRyZWUgJFApICYmCkBAIC0yOTMsNyArMzI3LDcgQEAKIAl0ZXN0ICRudW1wYXRoMCA9IDEKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb2x1dGUgcGF0aCB3b3JrcyBhcyBleHBlY3RlZCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYWJzb2x1dGUgcGF0aCB3b3JrcyBhcyBleHBlY3RlZCcgJwogCW1rZGlyIGZpcnN0ICYmCiAJbG4gLXMgLi4vLmdpdCBmaXJzdC8uZ2l0ICYmCiAJbWtkaXIgc2Vjb25kICYmCmRpZmYgLS1naXQgYS90L3QwMDA0LXVud3JpdGFibGUuc2ggYi90L3QwMDA0LXVud3JpdGFibGUuc2gKaW5kZXggNjNlMTIxNy4uMjM0MmFjNSAxMDA3NTUKLS0tIGEvdC90MDAwNC11bndyaXRhYmxlLnNoCisrKyBiL3QvdDAwMDQtdW53cml0YWJsZS5zaApAQCAtMTUsNyArMTUsNyBAQAogCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlLXRyZWUgc2hvdWxkIG5vdGljZSB1bndyaXRhYmxlIHJlcG9zaXRvcnknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd3cml0ZS10cmVlIHNob3VsZCBub3RpY2UgdW53cml0YWJsZSByZXBvc2l0b3J5JyAnCiAKIAkoCiAJCWNobW9kIGEtdyAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/ICYmCkBAIC0yNyw3ICsyNyw3IEBACiAKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IHNob3VsZCBub3RpY2UgdW53cml0YWJsZSByZXBvc2l0b3J5JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnY29tbWl0IHNob3VsZCBub3RpY2UgdW53cml0YWJsZSByZXBvc2l0b3J5JyAnCiAKIAkoCiAJCWNobW9kIGEtdyAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/ICYmCkBAIC0zOSw3ICszOSw3IEBACiAKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IHNob3VsZCBub3RpY2UgdW53cml0YWJsZSByZXBvc2l0b3J5JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAndXBkYXRlLWluZGV4IHNob3VsZCBub3RpY2UgdW53cml0YWJsZSByZXBvc2l0b3J5JyAnCiAKIAkoCiAJCWVjaG8gNk8gPmZpbGUgJiYKQEAgLTUyLDcgKzUyLDcgQEAKIAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc2hvdWxkIG5vdGljZSB1bndyaXRhYmxlIHJlcG9zaXRvcnknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdhZGQgc2hvdWxkIG5vdGljZSB1bndyaXRhYmxlIHJlcG9zaXRvcnknICcKIAogCSgKIAkJZWNobyBiID5maWxlICYmCmRpZmYgLS1naXQgYS90L3QwMDA1LXNpZ25hbHMuc2ggYi90L3QwMDA1LXNpZ25hbHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDlmODU1YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDUtc2lnbmFscy5zaApAQCAtMCwwICsxLDIyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc2lnbmFscyB3b3JrIGFzIHdlIGV4cGVjdCcKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdCA8PEVPRgordGhyZWUKK3R3bworb25lCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnY2hhaW4gd29ya3MnICcKKwl0ZXN0LXNpZ2NoYWluID5hY3R1YWwKKwljYXNlICIkPyIgaW4KKwkxNDMpIHRydWUgOzsgIyBQT1NJWCB3LyBTSUdURVJNPTE1CisJICAzKSB0cnVlIDs7ICMgV2luZG93cworCSAgKikgZmFsc2UgOzsKKwllc2FjICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMjAtY3JsZi5zaCBiL3QvdDAwMjAtY3JsZi5zaAppbmRleCAxYmU3NDQ2Li40ZTcyYjUzIDEwMDc1NQotLS0gYS90L3QwMDIwLWNybGYuc2gKKysrIGIvdC90MDAyMC1jcmxmLnNoCkBAIC00MjksNiArNDI5LDM3IEBACiAJfQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGV4aXN0aW5nIC5naXRhdHRyaWJ1dGVzJyAnCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb3JlLnNhZmVjcmxmICYmCisJZWNobyAiLmZpbGUyIC1jcmxmUSIgfCBxX3RvX2NyID4+IC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gIi5maWxlIC1jcmxmUSIgfCBxX3RvX2NyID4+IC5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiY29udGVudHMiID4gLmZpbGUgJiYKKwlnaXQgYWRkIC5naXRhdHRyaWJ1dGVzIC5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXJ+MSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmLWZpbGVzIC0tcmF3KSIgPSAiIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdoZW4gZGVsZXRpbmcgLmdpdGF0dHJpYnV0ZXMnICcKKworCWdpdCBybSAuZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gImNvbnRlbnRzUSIgfCBxX3RvX2NyID4gLmZpbGUyICYmCisJZ2l0IGFkZCAuZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyfjEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJcmVtb3ZlX2NyIC5maWxlMiA+L2Rldi9udWxsCisKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCAuZ2l0YXR0cmlidXRlcyAobXVzdCBub3QgY3Jhc2gpJyAnCiAKIAllY2hvICJ0aHJlZSArY3JsZiIgPj4uZ2l0YXR0cmlidXRlcyAmJgpkaWZmIC0tZ2l0IGEvdC90MDAyNC1jcmxmLWFyY2hpdmUuc2ggYi90L3QwMDI0LWNybGYtYXJjaGl2ZS5zaAppbmRleCBlNTMzMDM5Li5jN2QwMzI0IDEwMDc1NQotLS0gYS90L3QwMDI0LWNybGYtYXJjaGl2ZS5zaAorKysgYi90L3QwMDI0LWNybGYtYXJjaGl2ZS5zaApAQCAtMjgsMTIgKzI4LDEyIEBACiAKICIkVU5aSVAiIC12ID4vZGV2L251bGwgMj4mMQogaWYgWyAkPyAtZXEgMTI3IF07IHRoZW4KLQllY2hvICJTa2lwcGluZyBaSVAgdGVzdCwgYmVjYXVzZSB1bnppcCB3YXMgbm90IGZvdW5kIgotCXRlc3RfZG9uZQotCWV4aXQKKwlzYXkgIlNraXBwaW5nIFpJUCB0ZXN0LCBiZWNhdXNlIHVuemlwIHdhcyBub3QgZm91bmQiCitlbHNlCisJdGVzdF9zZXRfcHJlcmVxIFVOWklQCiBmaQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd6aXAgYXJjaGl2ZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAnemlwIGFyY2hpdmUnICcKIAogCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCBIRUFEID50ZXN0LnppcCAmJgogCmRpZmYgLS1naXQgYS90L3QwMDQwLXBhcnNlLW9wdGlvbnMuc2ggYi90L3QwMDQwLXBhcnNlLW9wdGlvbnMuc2gKaW5kZXggZTM4MjQxYy4uYmJjODIxZSAxMDA3NTUKLS0tIGEvdC90MDA0MC1wYXJzZS1vcHRpb25zLnNoCisrKyBiL3QvdDAwNDAtcGFyc2Utb3B0aW9ucy5zaApAQCAtMTIsMTIgKzEyLDE0IEBACiAKICAgICAtYiwgLS1ib29sZWFuICAgICAgICAgZ2V0IGEgYm9vbGVhbgogICAgIC00LCAtLW9yNCAgICAgICAgICAgICBiaXR3aXNlLW9yIGJvb2xlYW4gd2l0aCAuLi4wMTAwCisgICAgLS1uZWctb3I0ICAgICAgICAgICAgIHNhbWUgYXMgLS1uby1vcjQKIAogICAgIC1pLCAtLWludGVnZXIgPG4+ICAgICBnZXQgYSBpbnRlZ2VyCiAgICAgLWogPG4+ICAgICAgICAgICAgICAgIGdldCBhIGludGVnZXIsIHRvbwogICAgIC0tc2V0MjMgICAgICAgICAgICAgICBzZXQgaW50ZWdlciB0byAyMwogICAgIC10IDx0aW1lPiAgICAgICAgICAgICBnZXQgdGltZXN0YW1wIG9mIDx0aW1lPgogICAgIC1MLCAtLWxlbmd0aCA8c3RyPiAgICBnZXQgbGVuZ3RoIG9mIDxzdHI+CisgICAgLUYsIC0tZmlsZSA8RklMRT4gICAgIHNldCBmaWxlIHRvIDxGSUxFPgogCiBTdHJpbmcgb3B0aW9ucwogICAgIC1zLCAtLXN0cmluZyA8c3RyaW5nPgpAQCAtMjksNiArMzEsOCBAQAogCiBNYWdpYyBhcmd1bWVudHMKICAgICAtLXF1dXggICAgICAgICAgICAgICAgbWVhbnMgLS1xdXV4CisgICAgLU5VTSAgICAgICAgICAgICAgICAgIHNldCBpbnRlZ2VyIHRvIE5VTQorICAgICsgICAgICAgICAgICAgICAgICAgICBzYW1lIGFzIC1iCiAKIFN0YW5kYXJkIG9wdGlvbnMKICAgICAtLWFiYnJldls9PG4+XSAgICAgICAgdXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMKQEAgLTUzLDEwICs1NywxMiBAQAogdmVyYm9zZTogMgogcXVpZXQ6IG5vCiBkcnkgcnVuOiB5ZXMKK2ZpbGU6IHByZWZpeC9teS5maWxlCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnQgb3B0aW9ucycgJwotCXRlc3QtcGFyc2Utb3B0aW9ucyAtczEyMyAtYiAtaSAxNzI5IC1iIC12diAtbiA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdC1wYXJzZS1vcHRpb25zIC1zMTIzIC1iIC1pIDE3MjkgLWIgLXZ2IC1uIC1GIG15LmZpbGUgXAorCT4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0ICYmCiAJdGVzdCAhIC1zIG91dHB1dC5lcnIKICcKQEAgLTcwLDExICs3NiwxMiBAQAogdmVyYm9zZTogMgogcXVpZXQ6IG5vCiBkcnkgcnVuOiBubworZmlsZTogcHJlZml4L2ZpLmxlCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9uZyBvcHRpb25zJyAnCiAJdGVzdC1wYXJzZS1vcHRpb25zIC0tYm9vbGVhbiAtLWludGVnZXIgMTcyOSAtLWJvb2xlYW4gLS1zdHJpbmcyPTMyMSBcCi0JCS0tdmVyYm9zZSAtLXZlcmJvc2UgLS1uby1kcnktcnVuIC0tYWJicmV2PTEwIFwKKwkJLS12ZXJib3NlIC0tdmVyYm9zZSAtLW5vLWRyeS1ydW4gLS1hYmJyZXY9MTAgLS1maWxlIGZpLmxlXAogCQk+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCiAJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CkBAIC04NCw2ICs5MSw4IEBACiAJdGVzdC1wYXJzZS1vcHRpb25zIC1zOwogCXRlc3QgJD8gPSAxMjkgJiYKIAl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1zdHJpbmc7CisJdGVzdCAkPyA9IDEyOSAmJgorCXRlc3QtcGFyc2Utb3B0aW9ucyAtLWZpbGU7CiAJdGVzdCAkPyA9IDEyOQogJwogCkBAIC05Niw2ICsxMDUsNyBAQAogdmVyYm9zZTogMAogcXVpZXQ6IG5vCiBkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCiBhcmcgMDA6IGExCiBhcmcgMDE6IGIxCiBhcmcgMDI6IC0tYm9vbGVhbgpAQCAtMTE3LDYgKzEyNyw3IEBACiB2ZXJib3NlOiAwCiBxdWlldDogbm8KIGRyeSBydW46IG5vCitmaWxlOiAobm90IHNldCkKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmFtYmlndW91c2x5IGFiYnJldmlhdGVkIG9wdGlvbicgJwpAQCAtMTQ1LDYgKzE1Niw3IEBACiB2ZXJib3NlOiAwCiBxdWlldDogbm8KIGRyeSBydW46IG5vCitmaWxlOiAobm90IHNldCkKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24gYW1iaWd1b3VzIG9wdGlvbiAoYWZ0ZXIgdHdvIG9wdGlvbnMgaXQgYWJicmV2aWF0ZXMpJyAnCkBAIC0xNzIsNiArMTg0LDcgQEAKIHZlcmJvc2U6IDAKIHF1aWV0OiBubwogZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQogYXJnIDAwOiAtLXF1dXgKIEVPRgogCkBAIC0xOTAsNiArMjAzLDcgQEAKIHZlcmJvc2U6IDAKIHF1aWV0OiB5ZXMKIGRyeSBydW46IG5vCitmaWxlOiAobm90IHNldCkKIGFyZyAwMDogZm9vCiBFT0YKIApAQCAtMjEwLDYgKzIyNCw3IEBACiB2ZXJib3NlOiAwCiBxdWlldDogbm8KIGRyeSBydW46IG5vCitmaWxlOiAobm90IHNldCkKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQ0FMTEJBQ0soKSBhbmQgT1BUX0JJVCgpIHdvcmsnICcKQEAgLTIzNyw2ICsyNTIsNyBAQAogdmVyYm9zZTogMAogcXVpZXQ6IG5vCiBkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JJVCgpIGFuZCBPUFRfU0VUX0lOVCgpIHdvcmsnICcKQEAgLTI0NSw3ICsyNjEsNTggQEAKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKLSMgLS1vcjQKLSMgLS1uby1vcjQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9ORUdCSVQoKSBhbmQgT1BUX1NFVF9JTlQoKSB3b3JrJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0tc2V0MjMgLWJiYmJiIC0tbmVnLW9yNCA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorYm9vbGVhbjogNgoraW50ZWdlcjogMAordGltZXN0YW1wOiAwCitzdHJpbmc6IChub3Qgc2V0KQorYWJicmV2OiA3Cit2ZXJib3NlOiAwCitxdWlldDogbm8KK2RyeSBydW46IG5vCitmaWxlOiAobm90IHNldCkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQklUKCkgd29ya3MnICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgLWJiIC0tb3I0ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX05FR0JJVCgpIHdvcmtzJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC1iYiAtLW5vLW5lZy1vcjQgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTEVBTigpIHdpdGggUEFSU0VfT1BUX05PREFTSCB3b3JrcycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyArICsgKyArICsgKyA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorYm9vbGVhbjogMAoraW50ZWdlcjogMTIzNDUKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX05VTUJFUl9DQUxMQkFDSygpIHdvcmtzJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0xMjM0NSA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA1MC1maWxlc3lzdGVtLnNoIGIvdC90MDA1MC1maWxlc3lzdGVtLnNoCmluZGV4IDdlZGY0OWQuLjg5MjgyY2MgMTAwNzU1Ci0tLSBhL3QvdDAwNTAtZmlsZXN5c3RlbS5zaAorKysgYi90L3QwMDUwLWZpbGVzeXN0ZW0uc2gKQEAgLTgsNyArOCw5IEBACiBhdW1sY2RpYXI9YHByaW50ZiAnXHg2MVx4Y2NceDg4J2AKIAogY2FzZV9pbnNlbnNpdGl2ZT0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlZSBpZiB3ZSBleHBlY3QgJyAnCit1bmliYWQ9Citub19zeW1saW5rcz0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlZSB3aGF0IHdlIGV4cGVjdCcgJwogCiAJdGVzdF9jYXNlPXRlc3RfZXhwZWN0X3N1Y2Nlc3MKIAl0ZXN0X3VuaWNvZGU9dGVzdF9leHBlY3Rfc3VjY2VzcwpAQCAtMTksNyArMjEsNiBAQAogCXRoZW4KIAkJdGVzdF9jYXNlPXRlc3RfZXhwZWN0X2ZhaWx1cmUKIAkJY2FzZV9pbnNlbnNpdGl2ZT10Ci0JCXNheSAid2lsbCB0ZXN0IG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIgogCWZpICYmCiAJcm0gLWZyIGp1bmsgJiYKIAlta2RpciBqdW5rICYmCkBAIC0yNywxMyArMjgsMjYgQEAKIAljYXNlICIkKGNkIGp1bmsgJiYgZWNobyAqKSIgaW4KIAkiJGF1bWxjZGlhciIpCiAJCXRlc3RfdW5pY29kZT10ZXN0X2V4cGVjdF9mYWlsdXJlCi0JCXNheSAid2lsbCB0ZXN0IG9uIGEgdW5pY29kZSBjb3JydXB0aW5nIGZpbGVzeXN0ZW0iCisJCXVuaWJhZD10CiAJCTs7CiAJKikJOzsKIAllc2FjICYmCi0Jcm0gLWZyIGp1bmsKKwlybSAtZnIganVuayAmJgorCXsKKwkJbG4gLXMgeCB5IDI+IC9kZXYvbnVsbCAmJgorCQl0ZXN0IC1oIHkgMj4gL2Rldi9udWxsIHx8CisJCW5vX3N5bWxpbmtzPTEKKwkJcm0gLWYgeQorCX0KICcKIAordGVzdCAiJGNhc2VfaW5zZW5zaXRpdmUiICYmCisJc2F5ICJ3aWxsIHRlc3Qgb24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0iCit0ZXN0ICIkdW5pYmFkIiAmJgorCXNheSAid2lsbCB0ZXN0IG9uIGEgdW5pY29kZSBjb3JydXB0aW5nIGZpbGVzeXN0ZW0iCit0ZXN0ICIkbm9fc3ltbGlua3MiICYmCisJc2F5ICJ3aWxsIHRlc3Qgb24gYSBmaWxlc3lzdGVtIGxhY2tpbmcgc3ltYm9saWMgbGlua3MiCisKIGlmIHRlc3QgIiRjYXNlX2luc2Vuc2l0aXZlIgogdGhlbgogdGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0aW9uIG9mIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSBkdXJpbmcgcmVwbyBpbml0IiAnCkBAIC00OCw2ICs2MiwyMSBAQAogJwogZmkKIAoraWYgdGVzdCAiJG5vX3N5bWxpbmtzIgordGhlbgordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0aW9uIG9mIGZpbGVzeXN0ZW0gdy9vIHN5bWxpbmsgc3VwcG9ydCBkdXJpbmcgcmVwbyBpbml0IiAnCisKKwl2PSQoZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5zeW1saW5rcykgJiYKKwl0ZXN0ICIkdiIgPSBmYWxzZQorJworZWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0aW9uIG9mIGZpbGVzeXN0ZW0gdy9vIHN5bWxpbmsgc3VwcG9ydCBkdXJpbmcgcmVwbyBpbml0IiAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYm9vbCBjb3JlLnN5bWxpbmtzIHx8CisJdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLnN5bWxpbmtzKSIgPSB0cnVlCisnCitmaQorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCBjYXNlIHRlc3RzIiAnCiAKIAlnaXQgY29uZmlnIGNvcmUuaWdub3JlY2FzZSB0cnVlICYmCmRpZmYgLS1naXQgYS90L3QwMDU1LWJleW9uZC1zeW1saW5rcy5zaCBiL3QvdDAwNTUtYmV5b25kLXN5bWxpbmtzLnNoCmluZGV4IGIyOWMzN2EuLjBjNmZmNTYgMTAwNzU1Ci0tLSBhL3QvdDAwNTUtYmV5b25kLXN5bWxpbmtzLnNoCisrKyBiL3QvdDAwNTUtYmV5b25kLXN5bWxpbmtzLnNoCkBAIC00LDcgKzQsNyBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIHNldHVwICcKIAk+YSAmJgogCW1rZGlyIGIgJiYKIAlsbiAtcyBiIGMgJiYKQEAgLTEyLDEyICsxMiwxMiBAQAogCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSBiL2QKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tYWRkIGJleW9uZCBzeW1saW5rcycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAndXBkYXRlLWluZGV4IC0tYWRkIGJleW9uZCBzeW1saW5rcycgJwogCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYy9kICYmCiAJISAoIGdpdCBscy1maWxlcyB8IGdyZXAgYy9kICkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGJleW9uZCBzeW1saW5rcycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYWRkIGJleW9uZCBzeW1saW5rcycgJwogCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgYy9kICYmCiAJISAoIGdpdCBscy1maWxlcyB8IGdyZXAgYy9kICkKICcKZGlmZiAtLWdpdCBhL3QvdDAwNjAtcGF0aC11dGlscy5zaCBiL3QvdDAwNjAtcGF0aC11dGlscy5zaAppbmRleCA0ZWQxZjBiLi41M2NmMWY4IDEwMDc1NQotLS0gYS90L3QwMDYwLXBhdGgtdXRpbHMuc2gKKysrIGIvdC90MDA2MC1wYXRoLXV0aWxzLnNoCkBAIC03LDQxICs3LDkxIEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCi1ub3JtX2FicygpIHsKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJub3JtYWxpemUgYWJzb2x1dGU6ICQxID0+ICQyIiBcCitub3JtX3BhdGgoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkMyAibm9ybWFsaXplIHBhdGg6ICQxID0+ICQyIiBcCiAJInRlc3QgXCJcJCh0ZXN0LXBhdGgtdXRpbHMgbm9ybWFsaXplX3BhdGhfY29weSAnJDEnKVwiID0gJyQyJyIKIH0KIAorIyBPbiBXaW5kb3dzLCB3ZSBhcmUgdXNpbmcgTVNZUydzIGJhc2gsIHdoaWNoIG1hbmdsZXMgdGhlIHBhdGhzLgorIyBBYnNvbHV0ZSBwYXRocyBhcmUgYW5jaG9yZWQgYXQgdGhlIE1TWVMgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwKKyMgd2hpY2ggbWVhbnMgdGhhdCB0aGUgcGF0aCAvIGFjY291bnRzIGZvciB0aGlzIG1hbnkgY2hhcmFjdGVyczoKK3Jvb3RvZmY9JCh0ZXN0LXBhdGgtdXRpbHMgbm9ybWFsaXplX3BhdGhfY29weSAvIHwgd2MgLWMpCisjIEFjY291bnQgZm9yIHRoZSB0cmFpbGluZyBMRjoKK2lmIHRlc3QgJHJvb3RvZmYgPSAyOyB0aGVuCisJcm9vdG9mZj0JIyB3ZSBhcmUgb24gVW5peAorZWxzZQorCXJvb3RvZmY9JCgoJHJvb3RvZmYtMSkpCitmaQorCiBhbmNlc3RvcigpIHsKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJsb25nZXN0IGFuY2VzdG9yOiAkMSAkMiA9PiAkMyIgXAotCSJ0ZXN0IFwiXCQodGVzdC1wYXRoLXV0aWxzIGxvbmdlc3RfYW5jZXN0b3JfbGVuZ3RoICckMScgJyQyJylcIiA9ICckMyciCisJIyBXZSBkbyBzb21lIG1hdGggd2l0aCB0aGUgZXhwZWN0ZWQgYW5jZXN0b3IgbGVuZ3RoLgorCWV4cGVjdGVkPSQzCisJaWYgdGVzdCAtbiAiJHJvb3RvZmYiICYmIHRlc3QgIngkZXhwZWN0ZWQiICE9IHgtMTsgdGhlbgorCQlleHBlY3RlZD0kKCgkZXhwZWN0ZWQrJHJvb3RvZmYpKQorCWZpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAibG9uZ2VzdCBhbmNlc3RvcjogJDEgJDIgPT4gJGV4cGVjdGVkIiBcCisJImFjdHVhbD1cJCh0ZXN0LXBhdGgtdXRpbHMgbG9uZ2VzdF9hbmNlc3Rvcl9sZW5ndGggJyQxJyAnJDInKSAmJgorCSB0ZXN0IFwiXCRhY3R1YWxcIiA9ICckZXhwZWN0ZWQnIgogfQogCi1ub3JtX2FicyAiIiAiIgotbm9ybV9hYnMgLyAvCi1ub3JtX2FicyAvLyAvCi1ub3JtX2FicyAvLy8gLwotbm9ybV9hYnMgLy4gLwotbm9ybV9hYnMgLy4vIC8KLW5vcm1fYWJzIC8uLy4uICsrZmFpbGVkKysKLW5vcm1fYWJzIC8uLi8uICsrZmFpbGVkKysKLW5vcm1fYWJzIC8uLy4uLy4vLyArK2ZhaWxlZCsrCi1ub3JtX2FicyAvZGlyLy4uIC8KLW5vcm1fYWJzIC9kaXIvc3ViLy4uLy4uIC8KLW5vcm1fYWJzIC9kaXIvc3ViLy4uLy4uLy4uICsrZmFpbGVkKysKLW5vcm1fYWJzIC9kaXIgL2Rpcgotbm9ybV9hYnMgL2Rpci8vIC9kaXIvCi1ub3JtX2FicyAvLi9kaXIgL2Rpcgotbm9ybV9hYnMgL2Rpci8uIC9kaXIvCi1ub3JtX2FicyAvZGlyLy8vLi8gL2Rpci8KLW5vcm1fYWJzIC9kaXIvL3N1Yi8uLiAvZGlyLwotbm9ybV9hYnMgL2Rpci9zdWIvLi4vIC9kaXIvCi1ub3JtX2FicyAvL2Rpci9zdWIvLi4vLiAvZGlyLwotbm9ybV9hYnMgL2Rpci9zMS8uLi9zMi8gL2Rpci9zMi8KLW5vcm1fYWJzIC9kMS9zMS8vL3MyLy4uLy8uLi9zMy8gL2QxL3MzLwotbm9ybV9hYnMgL2QxL3MxLy8uLi9zMi8uLi8uLi9kMiAvZDIKLW5vcm1fYWJzIC9kMS8uLi4vZDIgL2QxLy4uLi9kMgotbm9ybV9hYnMgL2QxLy4uLi8uLy4uL2QyIC9kMS9kMgorIyBBYnNvbHV0ZSBwYXRoIHRlc3RzIG11c3QgYmUgc2tpcHBlZCBvbiBXaW5kb3dzIGJlY2F1c2UgZHVlIHRvIHBhdGggbWFuZ2xpbmcKKyMgdGhlIHRlc3QgcHJvZ3JhbSBuZXZlciBzZWVzIGEgUE9TSVgtc3R5bGUgYWJzb2x1dGUgcGF0aAorY2FzZSAkKHVuYW1lIC1zKSBpbgorKk1JTkdXKikKKwk7OworKikKKwl0ZXN0X3NldF9wcmVyZXEgUE9TSVgKKwk7OworZXNhYworCitub3JtX3BhdGggIiIgIiIKK25vcm1fcGF0aCAuICIiCitub3JtX3BhdGggLi8gIiIKK25vcm1fcGF0aCAuLy4gIiIKK25vcm1fcGF0aCAuLy4uICsrZmFpbGVkKysKK25vcm1fcGF0aCAuLi8uICsrZmFpbGVkKysKK25vcm1fcGF0aCAuLy4uLy4vLyArK2ZhaWxlZCsrCitub3JtX3BhdGggZGlyLy4uICIiCitub3JtX3BhdGggZGlyL3N1Yi8uLi8uLiAiIgorbm9ybV9wYXRoIGRpci9zdWIvLi4vLi4vLi4gKytmYWlsZWQrKworbm9ybV9wYXRoIGRpciBkaXIKK25vcm1fcGF0aCBkaXIvLyBkaXIvCitub3JtX3BhdGggLi9kaXIgZGlyCitub3JtX3BhdGggZGlyLy4gZGlyLworbm9ybV9wYXRoIGRpci8vLy4vIGRpci8KK25vcm1fcGF0aCBkaXIvL3N1Yi8uLiBkaXIvCitub3JtX3BhdGggZGlyL3N1Yi8uLi8gZGlyLworbm9ybV9wYXRoIGRpci9zdWIvLi4vLiBkaXIvCitub3JtX3BhdGggZGlyL3MxLy4uL3MyLyBkaXIvczIvCitub3JtX3BhdGggZDEvczEvLy9zMi8uLi8vLi4vczMvIGQxL3MzLworbm9ybV9wYXRoIGQxL3MxLy8uLi9zMi8uLi8uLi9kMiBkMgorbm9ybV9wYXRoIGQxLy4uLi9kMiBkMS8uLi4vZDIKK25vcm1fcGF0aCBkMS8uLi4vLi8uLi9kMiBkMS9kMgorCitub3JtX3BhdGggLyAvIFBPU0lYCitub3JtX3BhdGggLy8gLyBQT1NJWAorbm9ybV9wYXRoIC8vLyAvIFBPU0lYCitub3JtX3BhdGggLy4gLyBQT1NJWAorbm9ybV9wYXRoIC8uLyAvIFBPU0lYCitub3JtX3BhdGggLy4vLi4gKytmYWlsZWQrKyBQT1NJWAorbm9ybV9wYXRoIC8uLi8uICsrZmFpbGVkKysgUE9TSVgKK25vcm1fcGF0aCAvLi8uLi8uLy8gKytmYWlsZWQrKyBQT1NJWAorbm9ybV9wYXRoIC9kaXIvLi4gLyBQT1NJWAorbm9ybV9wYXRoIC9kaXIvc3ViLy4uLy4uIC8gUE9TSVgKK25vcm1fcGF0aCAvZGlyL3N1Yi8uLi8uLi8uLiArK2ZhaWxlZCsrIFBPU0lYCitub3JtX3BhdGggL2RpciAvZGlyIFBPU0lYCitub3JtX3BhdGggL2Rpci8vIC9kaXIvIFBPU0lYCitub3JtX3BhdGggLy4vZGlyIC9kaXIgUE9TSVgKK25vcm1fcGF0aCAvZGlyLy4gL2Rpci8gUE9TSVgKK25vcm1fcGF0aCAvZGlyLy8vLi8gL2Rpci8gUE9TSVgKK25vcm1fcGF0aCAvZGlyLy9zdWIvLi4gL2Rpci8gUE9TSVgKK25vcm1fcGF0aCAvZGlyL3N1Yi8uLi8gL2Rpci8gUE9TSVgKK25vcm1fcGF0aCAvL2Rpci9zdWIvLi4vLiAvZGlyLyBQT1NJWAorbm9ybV9wYXRoIC9kaXIvczEvLi4vczIvIC9kaXIvczIvIFBPU0lYCitub3JtX3BhdGggL2QxL3MxLy8vczIvLi4vLy4uL3MzLyAvZDEvczMvIFBPU0lYCitub3JtX3BhdGggL2QxL3MxLy8uLi9zMi8uLi8uLi9kMiAvZDIgUE9TSVgKK25vcm1fcGF0aCAvZDEvLi4uL2QyIC9kMS8uLi4vZDIgUE9TSVgKK25vcm1fcGF0aCAvZDEvLi4uLy4vLi4vZDIgL2QxL2QyIFBPU0lYCiAKIGFuY2VzdG9yIC8gIiIgLTEKIGFuY2VzdG9yIC8gLyAtMQpAQCAtODAsOSArMTMwLDEzIEBACiBhbmNlc3RvciAvZm9vL2JhciAvZm9vOi86L2Jhci8gNAogYW5jZXN0b3IgL2Zvby9iYXIgLzovYmFyLzovZm8gMAogYW5jZXN0b3IgL2Zvby9iYXIgLzovYmFyLyAwCi1hbmNlc3RvciAvZm9vL2JhciA6Oi8vZm9vLy4gNAotYW5jZXN0b3IgL2Zvby9iYXIgOjovL2Zvby8uOjogNAotYW5jZXN0b3IgL2Zvby9iYXIgLy9mb28vLi86Oi9iYXIgNAotYW5jZXN0b3IgL2Zvby9iYXIgOjovYmFyIC0xCithbmNlc3RvciAvZm9vL2JhciAuOi9mb28vLiA0CithbmNlc3RvciAvZm9vL2JhciAuOi9mb28vLjouOiA0CithbmNlc3RvciAvZm9vL2JhciAvZm9vLy4vOi46L2JhciA0CithbmNlc3RvciAvZm9vL2JhciAuOi9iYXIgLTEKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyaXBfcGF0aF9zdWZmaXgnICcKKwl0ZXN0IGM6L21zeXNnaXQgPSAkKHRlc3QtcGF0aC11dGlscyBzdHJpcF9wYXRoX3N1ZmZpeCBcCisJCWM6L21zeXNnaXQvbGliZXhlYy8vZ2l0LWNvcmUgbGliZXhlYy9naXQtY29yZSkKKycKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA3MC1mdW5kYW1lbnRhbC5zaCBiL3QvdDAwNzAtZnVuZGFtZW50YWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjgwZDdkNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwNzAtZnVuZGFtZW50YWwuc2gKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrIHRoYXQgdGhlIG1vc3QgYmFzaWMgZnVuY3Rpb25zIHdvcmsKKworCitWZXJpZnkgd3JhcHBlcnMgYW5kIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhcmFjdGVyIGNsYXNzZXMgKGlzc3BhY2UsIGlzYWxwaGEgZXRjLiknICcKKwl0ZXN0LWN0eXBlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDEwMC1wcmV2aW91cy5zaCBiL3QvdDAxMDAtcHJldmlvdXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzE1YjliMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMDAtcHJldmlvdXMuc2gKQEAgLTAsMCArMSw0OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3ByZXZpb3VzIGJyYW5jaCBzeW50YXggQHstbn0nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLWQgQHstMX0nICcKKwl0ZXN0X2NvbW1pdCBBICYmCisJZ2l0IGNoZWNrb3V0IC1iIGp1bmsgJiYKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSByZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCBicmFuY2ggLWQgQHstMX0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvanVuaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLWQgQHstMTJ9IHdoZW4gdGhlcmUgaXMgbm90IGVub3VnaCBzd2l0Y2hlcyB5ZXQnICcKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1ub3cgJiYKKwlnaXQgY2hlY2tvdXQgLWIganVuazIgJiYKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSByZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLWQgQHstMTJ9ICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBAey0xfScgJworCWdpdCBjaGVja291dCBBICYmCisJdGVzdF9jb21taXQgQiAmJgorCWdpdCBjaGVja291dCBBICYmCisJdGVzdF9jb21taXQgQyAmJgorCWdpdCBicmFuY2ggLWYgbWFzdGVyIEIgJiYKKwlnaXQgYnJhbmNoIC1mIG90aGVyICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSBAey0xfSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgIk1lcmdlIGJyYW5jaCAnXCcnb3RoZXInXCcnIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBAey0xfSB3aGVuIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3dpdGNoZXMgeWV0JyAnCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9bm93ICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgQiAmJgorCWdpdCBicmFuY2ggLWYgb3RoZXIgQyAmJgorCWdpdCBjaGVja291dCBvdGhlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQHstMTJ9CisnCisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3QxMDA0LXJlYWQtdHJlZS1tLXUtd2Yuc2ggYi90L3QxMDA0LXJlYWQtdHJlZS1tLXUtd2Yuc2gKaW5kZXggNTcwZDM3Mi4uZjE5YjRhMiAxMDA3NTUKLS0tIGEvdC90MTAwNC1yZWFkLXRyZWUtbS11LXdmLnNoCisrKyBiL3QvdDEwMDQtcmVhZC10cmVlLW0tdS13Zi5zaApAQCAtMTU3LDcgKzE1Nyw3IEBACiAKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZnVubnkgc3ltbGluayBpbiB3b3JrIHRyZWUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2Z1bm55IHN5bWxpbmsgaW4gd29yayB0cmVlJyAnCiAKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZ2l0IGNoZWNrb3V0IC1iIHN5bS1iIHNpZGUtYiAmJgpAQCAtMTc3LDcgKzE3Nyw3IEBACiAKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZnVubnkgc3ltbGluayBpbiB3b3JrIHRyZWUsIHVuLXVubGluay1hYmxlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdmdW5ueSBzeW1saW5rIGluIHdvcmsgdHJlZSwgdW4tdW5saW5rLWFibGUnICcKIAogCXJtIC1mciBhIGIgJiYKIAlnaXQgcmVzZXQgLS1oYXJkICYmCkBAIC0xODksNyArMTg5LDcgQEAKICcKIAogIyBjbGVhbi11cCBmcm9tIHRoZSBhYm92ZSB0ZXN0Ci1jaG1vZCBhK3cgYQorY2htb2QgYSt3IGEgMj4vZGV2L251bGwKIHJtIC1mciBhIGIKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIHNldHVwJyAnCmRpZmYgLS1naXQgYS90L3QxMDA4LXJlYWQtdHJlZS1vdmVybGF5LnNoIGIvdC90MTAwOC1yZWFkLXRyZWUtb3ZlcmxheS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOWUwMDI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTAwOC1yZWFkLXRyZWUtb3ZlcmxheS5zaApAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBtdWx0aS10cmVlIHJlYWQtdHJlZSB3aXRob3V0IG1lcmdpbmcnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIG9uZSA+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCWVjaG8gdHdvID5iICYmCisJZ2l0IGFkZCBiICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBpbml0aWFsICYmCisJZWNobyB0aHJlZSA+YSAmJgorCW1rZGlyIGIgJiYKKwllY2hvIGZvdXIgPmIvYyAmJgorCWdpdCBhZGQgYi9jICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aS1yZWFkJyAnCisJZ2l0IHJlYWQtdHJlZSBpbml0aWFsIG1hc3RlciBzaWRlICYmCisJKGVjaG8gYTsgZWNobyBiL2MpID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDEwMTAtbWt0cmVlLnNoIGIvdC90MTAxMC1ta3RyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTk1NmUzYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMTAtbWt0cmVlLnNoCkBAIC0wLDAgKzEsNzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWt0cmVlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGQgaW4gYSBhLiBhMAorCWRvCisJCW1rZGlyICIkZCIgJiYgZWNobyAiJGQvb25lIiA+IiRkL29uZSIgJiYKKwkJZ2l0IGFkZCAiJGQiCisJZG9uZSAmJgorCWVjaG8gemVybyA+b25lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWluZm8tb25seSBvbmUgJiYKKwlnaXQgd3JpdGUtdHJlZSAtLW1pc3Npbmctb2sgPnRyZWUubWlzc2luZyAmJgorCWdpdCBscy10cmVlICQoY2F0IHRyZWUubWlzc2luZykgPnRvcC5taXNzaW5nICYmCisJZ2l0IGxzLXRyZWUgLXIgJChjYXQgdHJlZS5taXNzaW5nKSA+YWxsLm1pc3NpbmcgJiYKKwllY2hvIG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgd3JpdGUtdHJlZSA+dHJlZSAmJgorCWdpdCBscy10cmVlICQoY2F0IHRyZWUpID50b3AgJiYKKwlnaXQgbHMtdHJlZSAtciAkKGNhdCB0cmVlKSA+YWxsICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtcSAtbSBvbmUgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICRIIHN1YiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLXEgLW0gdHdvICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+dHJlZS53aXRoc3ViICYmCisJZ2l0IGxzLXRyZWUgSEVBRCA+dG9wLndpdGhzdWIgJiYKKwlnaXQgbHMtdHJlZSAtciBIRUFEID5hbGwud2l0aHN1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIHBpcGVkIHRvIG1rdHJlZSAoMSknICcKKwlnaXQgbWt0cmVlIDx0b3AgPmFjdHVhbCAmJgorCXRlc3RfY21wIHRyZWUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgcGlwZWQgdG8gbWt0cmVlICgyKScgJworCWdpdCBta3RyZWUgPHRvcC53aXRoc3ViID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlLndpdGhzdWIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgb3V0cHV0IGluIHdyb25nIG9yZGVyIGdpdmVuIHRvIG1rdHJlZSAoMSknICcKKwlwZXJsIC1lICJwcmludCByZXZlcnNlIDw+IiA8dG9wIHwKKwlnaXQgbWt0cmVlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIG91dHB1dCBpbiB3cm9uZyBvcmRlciBnaXZlbiB0byBta3RyZWUgKDIpJyAnCisJcGVybCAtZSAicHJpbnQgcmV2ZXJzZSA8PiIgPHRvcC53aXRoc3ViIHwKKwlnaXQgbWt0cmVlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlLndpdGhzdWIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IG1pc3Npbmcgb2JqZWN0IHdpdGggLS1taXNzaW5nJyAnCisJZ2l0IG1rdHJlZSAtLW1pc3NpbmcgPHRvcC5taXNzaW5nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlLm1pc3NpbmcgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ21rdHJlZSByZWFkcyBscy10cmVlIC1yIG91dHB1dCAoMSknICcKKwlnaXQgbWt0cmVlIDxhbGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIHRyZWUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ21rdHJlZSByZWFkcyBscy10cmVlIC1yIG91dHB1dCAoMiknICcKKwlnaXQgbWt0cmVlIDxhbGwud2l0aHN1YiA+YWN0dWFsICYmCisJdGVzdF9jbXAgdHJlZS53aXRoc3ViIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMjAtc3ViZGlyZWN0b3J5LnNoIGIvdC90MTAyMC1zdWJkaXJlY3Rvcnkuc2gKaW5kZXggZmMzODZiYS4uMjEwZTU5NCAxMDA3NTUKLS0tIGEvdC90MTAyMC1zdWJkaXJlY3Rvcnkuc2gKKysrIGIvdC90MTAyMC1zdWJkaXJlY3Rvcnkuc2gKQEAgLTEyNiw3ICsxMjYsNyBAQAogCWNkIGZvby5naXQgJiYgZ2l0IHNob3cgLXMgSEVBRAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3Rpb24gc2hvdWxkIG5vdCBiZSBmb29sZWQgYnkgYSBzeW1saW5rJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkZXRlY3Rpb24gc2hvdWxkIG5vdCBiZSBmb29sZWQgYnkgYSBzeW1saW5rJyAnCiAJY2QgIiRIRVJFIiAmJgogCXJtIC1mciBmb28uZ2l0ICYmCiAJZ2l0IGNsb25lIC1zIC5naXQgYW5vdGhlciAmJgpkaWZmIC0tZ2l0IGEvdC90MTEwMC1jb21taXQtdHJlZS1vcHRpb25zLnNoIGIvdC90MTEwMC1jb21taXQtdHJlZS1vcHRpb25zLnNoCmluZGV4IDdmN2ZjMzYuLmM0NDE0ZmYgMTAwNzU1Ci0tLSBhL3QvdDExMDAtY29tbWl0LXRyZWUtb3B0aW9ucy5zaAorKysgYi90L3QxMTAwLWNvbW1pdC10cmVlLW9wdGlvbnMuc2gKQEAgLTQwLDYgKzQwLDYgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2NvbXBhcmUgY29tbWl0JyBcCi0gICAgJ2RpZmYgZXhwZWN0ZWQgY29tbWl0JworICAgICd0ZXN0X2NtcCBleHBlY3RlZCBjb21taXQnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwMC1yZXBvLWNvbmZpZy5zaCBiL3QvdDEzMDAtcmVwby1jb25maWcuc2gKaW5kZXggMTFiODJmNC4uODNiNzI5NCAxMDA3NTUKLS0tIGEvdC90MTMwMC1yZXBvLWNvbmZpZy5zaAorKysgYi90L3QxMzAwLXJlcG8tY29uZmlnLnNoCkBAIC0xMTgsNyArMTE4LDE0IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIHVuc2V0IGlzIGNvcnJlY3QnICdjbXAgLmdpdC9jb25maWcgZXhwZWN0JwogCi1tdiAuZ2l0L2NvbmZpZzIgLmdpdC9jb25maWcKK2NwIC5naXQvY29uZmlnMiAuZ2l0L2NvbmZpZworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlcGxhY2UtYWxsIG1pc3NpbmcgdmFsdWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgYmV0YS5oYWhhICYmCisJdGVzdF9jbXAgLmdpdC9jb25maWcyIC5naXQvY29uZmlnCisnCisKK3JtIC5naXQvY29uZmlnMgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlcGxhY2UtYWxsJyBcCiAJJ2dpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBiZXRhLmhhaGEgZ2FtbWEnCkBAIC0zMzYsMTAgKzM0MywxMCBAQAogCSdnaXQgY29uZmlnIC0tYm9vbCBlbXB0eXZhbHVlLnZhcmlhYmxlID4gb3V0cHV0ICYmCiAJIGNtcCBvdXRwdXQgZXhwZWN0JwogCi1naXQgY29uZmlnID4gb3V0cHV0IDI+JjEKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gYXJndW1lbnRzLCBidXQgbm8gY3Jhc2gnIFwKLQkidGVzdCAkPyA9IDEyOSAmJiBncmVwIHVzYWdlIG91dHB1dCIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGFyZ3VtZW50cywgYnV0IG5vIGNyYXNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyA+b3V0cHV0IDI+JjEgJiYKKwlncmVwIHVzYWdlIG91dHB1dAorJwogCiBjYXQgPiAuZ2l0L2NvbmZpZyA8PCBFT0YKIFthLmJdCkBAIC0zNzMsNyArMzgwLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyB2YXJpYWJsZSBpbnNlcnRzIGludG8gcHJvcGVyIHNlY3Rpb24nICdjbXAgLmdpdC9jb25maWcgZXhwZWN0JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHRlcm5hdGl2ZSBHSVRfQ09ORklHIChub24tZXhpc3RpbmcgZmlsZSBzaG91bGQgZmFpbCknIFwKLQknZ2l0IGNvbmZpZyAtLWZpbGUgbm9uLWV4aXN0aW5nLWNvbmZpZyAtbDsgdGVzdCAkPyAhPSAwJworCSd0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZmlsZSBub24tZXhpc3RpbmctY29uZmlnIC1sJwogCiBjYXQgPiBvdGhlci1jb25maWcgPDwgRU9GCiBbZWluXQpAQCAtNDUzLDYgKzQ2MCwyOCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIHN1Y2NlZWRlZCIgInRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZyIKIAogY2F0ID4+IC5naXQvY29uZmlnIDw8IEVPRgorW2JyYW5jaCAidmllciJdIHogPSAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIGEgc2VjdGlvbiB3aXRoIGEgdmFyIG9uIHRoZSBzYW1lIGxpbmUiIFwKKwknZ2l0IGNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIGJyYW5jaC52aWVyIGJyYW5jaC56d2VpJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisjIEhhbGxvCisJI0JlbGxvCitbYnJhbmNoICJ6d2VpIl0KKwl4ID0gMQorW2JyYW5jaCAiendlaSJdCisJeSA9IDEKK1ticmFuY2ggImRyZWkiXQord2VpcmQKK1ticmFuY2ggInp3ZWkiXQorCXogPSAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIHN1Y2NlZWRlZCIgInRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZyIKKworY2F0ID4+IC5naXQvY29uZmlnIDw8IEVPRgogICBbYnJhbmNoICJ6d2VpIl0gYSA9IDEgW2JyYW5jaCAidmllciJdCiBFT0YKIApAQCAtNzI2LDcgKzc1NSwxMiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW51bGwgLS1nZXQtcmVnZXhwJyAnY21wIHJlc3VsdCBleHBlY3QnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWxpbmtlZCBjb25maWd1cmF0aW9uJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbm5lciB3aGl0ZXNwYWNlIGtlcHQgdmVyYmF0aW0nICcKKwlnaXQgY29uZmlnIHNlY3Rpb24udmFsICJmb28gCSAgYmFyIiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgc2VjdGlvbi52YWwpIiA9ICJ6Zm9vIAkgIGJhciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGlua2VkIGNvbmZpZ3VyYXRpb24nICcKIAogCWxuIC1zIG5vdHlldCBteWNvbmZpZyAmJgogCUdJVF9DT05GSUc9bXljb25maWcgZ2l0IGNvbmZpZyB0ZXN0LmZyb3R6IG5pdGZvbCAmJgpkaWZmIC0tZ2l0IGEvdC90MTMwMS1zaGFyZWQtcmVwby5zaCBiL3QvdDEzMDEtc2hhcmVkLXJlcG8uc2gKaW5kZXggNjUzMzYyYi4uZGU0MmQyMSAxMDA3NTUKLS0tIGEvdC90MTMwMS1zaGFyZWQtcmVwby5zaAorKysgYi90L3QxMzAxLXNoYXJlZC1yZXBvLnNoCkBAIC0yNiw3ICsyNiw3IEBACiAKIGZvciB1IGluIDAwMiAwMjIKIGRvCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAic2hhcmVkPTEgZG9lcyBub3QgY2xlYXIgYml0cyBwcmVzZXQgYnkgdW1hc2sgJHUiICcKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAic2hhcmVkPTEgZG9lcyBub3QgY2xlYXIgYml0cyBwcmVzZXQgYnkgdW1hc2sgJHUiICcKIAkJbWtkaXIgc3ViICYmICgKIAkJCWNkIHN1YiAmJgogCQkJdW1hc2sgJHUgJiYKQEAgLTU0LDcgKzU0LDcgQEAKIAl0ZXN0IDIgPSAkKGdpdCBjb25maWcgY29yZS5zaGFyZWRyZXBvc2l0b3J5KQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtc2VydmVyLWluZm8gaG9ub3JzIGNvcmUuc2hhcmVkUmVwb3NpdG9yeScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3VwZGF0ZS1zZXJ2ZXItaW5mbyBob25vcnMgY29yZS5zaGFyZWRSZXBvc2l0b3J5JyAnCiAJOiA+IGExICYmCiAJZ2l0IGFkZCBhMSAmJgogCXRlc3RfdGljayAmJgpAQCAtODUsNyArODUsNyBAQAogCWdpdCBjb25maWcgY29yZS5zaGFyZWRyZXBvc2l0b3J5ICIkdSIgJiYKIAl1bWFzayAwMjc3ICYmCiAKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJzaGFyZWQgPSAkdSAoJHkpIHJvIiAnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gInNoYXJlZCA9ICR1ICgkeSkgcm8iICcKIAogCQlybSAtZiAuZ2l0L2luZm8vcmVmcyAmJgogCQlnaXQgdXBkYXRlLXNlcnZlci1pbmZvICYmCkBAIC05Nyw3ICs5Nyw3IEBACiAJJwogCiAJdW1hc2sgMDc3ICYmCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAic2hhcmVkID0gJHUgKCR4KSBydyIgJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICJzaGFyZWQgPSAkdSAoJHgpIHJ3IiAnCiAKIAkJcm0gLWYgLmdpdC9pbmZvL3JlZnMgJiYKIAkJZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyAmJgpAQCAtMTExLDcgKzExMSw3IEBACiAKIGRvbmUKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlZmxvZyBleHBpcmUgaG9ub3JzIGNvcmUuc2hhcmVkUmVwb3NpdG9yeScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ2dpdCByZWZsb2cgZXhwaXJlIGhvbm9ycyBjb3JlLnNoYXJlZFJlcG9zaXRvcnknICcKIAlnaXQgY29uZmlnIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBncm91cCAmJgogCWdpdCByZWZsb2cgZXhwaXJlIC0tYWxsICYmCiAJYWN0dWFsPSIkKGxzIC1sIC5naXQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcikiICYmCkBAIC0xMjYsNCArMTI2LDQ1IEBACiAJZXNhYwogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnZm9yY2VkIG1vZGVzJyAnCisJbWtkaXIgLXAgdGVtcGxhdGVzL2hvb2tzICYmCisJZWNobyB1cGRhdGUtc2VydmVyLWluZm8gPnRlbXBsYXRlcy9ob29rcy9wb3N0LXVwZGF0ZSAmJgorCWNobW9kICt4IHRlbXBsYXRlcy9ob29rcy9wb3N0LXVwZGF0ZSAmJgorCWVjaG8gOiA+cmFuZG9tLWZpbGUgJiYKKwlta2RpciBuZXcgJiYKKwkoCisJCWNkIG5ldyAmJgorCQl1bWFzayAwMDIgJiYKKwkJZ2l0IGluaXQgLS1zaGFyZWQ9MDY2MCAtLXRlbXBsYXRlPS4uL3RlbXBsYXRlcyAmJgorCQk+ZnJvdHogJiYKKwkJZ2l0IGFkZCBmcm90eiAmJgorCQlnaXQgY29tbWl0IC1hIC1tIGluaXRpYWwgJiYKKwkJZ2l0IHJlcGFjaworCSkgJiYKKwkjIExpc3QgcmVwb3NpdG9yeSBmaWxlcyBtZWFudCB0byBiZSBwcm90ZWN0ZWQ7IG5vdGUgdGhhdAorCSMgQ09NTUlUX0VESVRNU0cgZG9lcyBub3QgbWF0dGVyLS0tMG1vZGUgaXMgbm90IGFib3V0IGEKKwkjIHJlcG9zaXRvcnkgd2l0aCBhIHdvcmsgdHJlZS4KKwlmaW5kIG5ldy8uZ2l0IC10eXBlIGYgLW5hbWUgQ09NTUlUX0VESVRNU0cgLXBydW5lIC1vIC1wcmludCB8CisJeGFyZ3MgbHMgLWxkID5hY3R1YWwgJiYKKworCSMgRXZlcnl0aGluZyBtdXN0IGJlIHVuYWNjZXNzaWJsZSB0byBvdGhlcnMKKwl0ZXN0IC16ICIkKHNlZCAtZSAiL14uLi4uLi4uLS0tL2QiIGFjdHVhbCkiICYmCisKKwkjIEFsbCBkaXJlY3RvcmllcyBtdXN0IGhhdmUgZWl0aGVyIDI3NzAgb3IgNzcwCisJdGVzdCAteiAiJChzZWQgLW4gLWUgIi9eZHJ3eHJ3W3N4XS0tLS9kIiAtZSAiL15kL3AiIGFjdHVhbCkiICYmCisKKwkjIHBvc3QtdXBkYXRlIGhvb2sgbXVzdCBiZSAwNzcwCisJdGVzdCAteiAiJChzZWQgLW4gLWUgIi9wb3N0LXVwZGF0ZS97CisJCS9eLXJ3eHJ3eC0tLS9kCisJCXAKKwl9IiBhY3R1YWwpIiAmJgorCisJIyBBbGwgZmlsZXMgaW5zaWRlIG9iamVjdHMgbXVzdCBiZSBhY2Nlc3NpYmxlIGJ5IHVzCisJdGVzdCAteiAiJChzZWQgLW4gLWUgIi9vYmplY3RzXC8veworCQkvXmQvZAorCQkvXi1yLi1yLi0tLS0vZAorCQlwCisJfSIgYWN0dWFsKSIKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDAwLXVwZGF0ZS1yZWYuc2ggYi90L3QxNDAwLXVwZGF0ZS1yZWYuc2gKaW5kZXggYmQ1ODkyNi4uNTRiYTNkZiAxMDA3NTUKLS0tIGEvdC90MTQwMC11cGRhdGUtcmVmLnNoCisrKyBiL3QvdDE0MDAtdXBkYXRlLXJlZi5zaApAQCAtMTM3LDcgKzEzNyw3IEBACiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSJ2ZXJpZnlpbmcgJG0ncyBsb2ciIFwKLQkiZGlmZiBleHBlY3QgLmdpdC9sb2dzLyRtIgorCSJ0ZXN0X2NtcCBleHBlY3QgLmdpdC9sb2dzLyRtIgogcm0gLXJmIC5naXQvJG0gLmdpdC9sb2dzIGV4cGVjdAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTE2OCw3ICsxNjgsNyBAQAogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAkidmVyaWZ5aW5nICRtJ3MgbG9nIiBcCi0JJ2RpZmYgZXhwZWN0IC5naXQvbG9ncy8kbScKKwkndGVzdF9jbXAgZXhwZWN0IC5naXQvbG9ncy8kbScKIHJtIC1mIC5naXQvJG0gLmdpdC9sb2dzLyRtIGV4cGVjdAogCiBnaXQgdXBkYXRlLXJlZiAkbSAkRApAQCAtMjcyLDcgKzI3Miw3IEBACiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdnaXQgY29tbWl0IGxvZ2dlZCB1cGRhdGVzJyBcCi0JImRpZmYgZXhwZWN0IC5naXQvbG9ncy8kbSIKKwkidGVzdF9jbXAgZXhwZWN0IC5naXQvbG9ncy8kbSIKIHVuc2V0IGhfVEVTVCBoX09USEVSIGhfRklYRUQgaF9NRVJHRUQKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCmRpZmYgLS1naXQgYS90L3QxNDAxLXN5bWJvbGljLXJlZi5zaCBiL3QvdDE0MDEtc3ltYm9saWMtcmVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdmYTVmNWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDAxLXN5bWJvbGljLXJlZi5zaApAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgc3ltYm9saWMtcmVmIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgSWYgdGhlIHRlc3RzIG11bmdpbmcgSEVBRCBmYWlsLCB0aGV5IGNhbiBicmVhayBkZXRlY3Rpb24gb2YKKyMgdGhlIGdpdCByZXBvLCBtZWFuaW5nIHRoYXQgZnVydGhlciB0ZXN0cyB3aWxsIG9wZXJhdGUgb24KKyMgdGhlIHN1cnJvdW5kaW5nIGdpdCByZXBvIGluc3RlYWQgb2YgdGhlIHRyYXNoIGRpcmVjdG9yeS4KK3Jlc2V0X3RvX3NhbmUoKSB7CisJZWNobyByZWY6IHJlZnMvaGVhZHMvZm9vID4uZ2l0L0hFQUQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMtcmVmIHdyaXRlcyBIRUFEJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvZm9vICYmCisJZWNobyByZWY6IHJlZnMvaGVhZHMvZm9vID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiByZWFkcyBIRUFEJyAnCisJZWNobyByZWZzL2hlYWRzL2ZvbyA+ZXhwZWN0ICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiByZWZ1c2VzIG5vbi1yZWYgZm9yIEhFQUQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQgZm9vCisnCityZXNldF90b19zYW5lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiByZWZ1c2VzIGJhcmUgc2hhMScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBvbmUKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQgYGdpdCByZXYtcGFyc2UgSEVBRGAKKycKK3Jlc2V0X3RvX3NhbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDEwLXJlZmxvZy5zaCBiL3QvdDE0MTAtcmVmbG9nLnNoCmluZGV4IDViMjRmMDUuLjgwYWY2YjkgMTAwNzU1Ci0tLSBhL3QvdDE0MTAtcmVmbG9nLnNoCisrKyBiL3QvdDE0MTAtcmVmbG9nLnNoCkBAIC03MCw5ICs3MCw3IEBACiAJRT1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOkEvQi9FYCAmJgogCWNoZWNrX2ZzY2sgJiYKIAotCWNobW9kICt4IEMgJiYKLQkoIHRlc3QgImBnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmZpbGVtb2RlYCIgIT0gZmFsc2UgfHwKLQkgIGVjaG8gZXhlY3V0YWJsZSA+PkMgKSAmJgorCXRlc3RfY2htb2QgK3ggQyAmJgogCWdpdCBhZGQgQyAmJgogCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIGRyYWdvbiAmJgogCUw9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRGAgJiYKZGlmZiAtLWdpdCBhL3QvdDE0MTEtcmVmbG9nLXNob3cuc2ggYi90L3QxNDExLXJlZmxvZy1zaG93LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxOGVkOGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDExLXJlZmxvZy1zaG93LnNoCkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlZmxvZyBkaXNwbGF5IHJvdXRpbmVzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworUmVmbG9nOiBIRUFEQHswfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1nIHNob3dzIHJlZmxvZyBoZWFkZXJzJyAnCisJZ2l0IGxvZyAtZyAtMSA+dG1wICYmCisJZ3JlcCBeUmVmbG9nIDx0bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworZTQ2NTEzZSBIRUFEQHswfTogY29tbWl0IChpbml0aWFsKTogb25lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29uZWxpbmUgcmVmbG9nIGZvcm1hdCcgJworCWdpdCBsb2cgLWcgLTEgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1JlZmxvZzogSEVBREB7VGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDB9IChDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+KQorUmVmbG9nIG1lc3NhZ2U6IGNvbW1pdCAoaW5pdGlhbCk6IG9uZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBAe25vd30gc3ludGF4IHNob3dzIHJlZmxvZyBkYXRlIChtdWx0aWxpbmUpJyAnCisJZ2l0IGxvZyAtZyAtMSBIRUFEQHtub3d9ID50bXAgJiYKKwlncmVwIF5SZWZsb2cgPHRtcCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitlNDY1MTNlIEhFQURAe1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwfTogY29tbWl0IChpbml0aWFsKTogb25lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIEB7bm93fSBzeW50YXggc2hvd3MgcmVmbG9nIGRhdGUgKG9uZWxpbmUpJyAnCisJZ2l0IGxvZyAtZyAtMSAtLW9uZWxpbmUgSEVBREB7bm93fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitSZWZsb2c6IEhFQURAezExMTI5MTE5OTMgLTA3MDB9IChDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+KQorUmVmbG9nIG1lc3NhZ2U6IGNvbW1pdCAoaW5pdGlhbCk6IG9uZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAtLWRhdGU9IHNob3dzIHJlZmxvZyBkYXRlIChtdWx0aWxpbmUpJyAnCisJZ2l0IGxvZyAtZyAtMSAtLWRhdGU9cmF3ID50bXAgJiYKKwlncmVwIF5SZWZsb2cgPHRtcCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitlNDY1MTNlIEhFQURAezExMTI5MTE5OTMgLTA3MDB9OiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgLS1kYXRlPSBzaG93cyByZWZsb2cgZGF0ZSAob25lbGluZSknICcKKwlnaXQgbG9nIC1nIC0xIC0tb25lbGluZSAtLWRhdGU9cmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQ1MC1mc2NrLnNoIGIvdC90MTQ1MC1mc2NrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEyMjYzMmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDUwLWZzY2suc2gKQEAgLTAsMCArMSw5OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBmc2NrIHJhbmRvbSBjb2xsZWN0aW9uIG9mIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgQSBmaWxlQSBvbmUgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJdGVzdF9jb21taXQgQiBmaWxlQiB0d28gJiYKKwlnaXQgdGFnIC1kIEEgQiAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyAtLWFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIRUFEIGlzIHBhcnQgb2YgcmVmcycgJworCXRlc3QgMCA9ICQoZ2l0IGZzY2sgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9vc2Ugb2JqZWN0cyBib3Jyb3dlZCBmcm9tIGFsdGVybmF0ZSBhcmUgbm90IG1pc3NpbmcnICcKKwlta2RpciBhbm90aGVyICYmCisJKAorCQljZCBhbm90aGVyICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gLi4vLi4vLi4vLmdpdC9vYmplY3RzID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJCXRlc3RfY29tbWl0IEMgZmlsZUMgb25lICYmCisJCWdpdCBmc2NrID5vdXQgJiYKKwkJISBncmVwICJtaXNzaW5nIGJsb2IiIG91dAorCSkKKycKKworIyBDb3JydXB0aW9uIHRlc3RzIGZvbGxvdy4gIE1ha2Ugc3VyZSB0byByZW1vdmUgYWxsIHRyYWNlcyBvZiB0aGUKKyMgc3BlY2lmaWMgY29ycnVwdGlvbiB5b3UgdGVzdCBhZnRlcndhcmRzLCBsZXN0IGEgbGF0ZXIgdGVzdCB0cmlwIG92ZXIKKyMgaXQuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29iamVjdCB3aXRoIGJhZCBzaGExJyAnCisJc2hhPSQoZWNobyBibG9iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJZWNobyAkc2hhICYmCisJb2xkPSQoZWNobyAkc2hhIHwgc2VkICJzK14uLismLysiKSAmJgorCW5ldz0kKGRpcm5hbWUgJG9sZCkvZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgJiYKKwlzaGE9IiQoZGlybmFtZSAkbmV3KSQoYmFzZW5hbWUgJG5ldykiCisJbXYgLmdpdC9vYmplY3RzLyRvbGQgLmdpdC9vYmplY3RzLyRuZXcgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkc2hhIGZvbyAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwljbXQ9JChlY2hvIGJvZ3VzIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgJGNtdCAmJgorCShnaXQgZnNjayAyPm91dDsgdHJ1ZSkgJiYKKwlncmVwICIkc2hhLipjb3JydXB0IiBvdXQgJiYKKwlybSAtZiAuZ2l0L29iamVjdHMvJG5ldyAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvYm9ndXMgJiYKKwlnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggcG9pbnRpbmcgdG8gbm9uLWNvbW1pdCcgJworCWdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0gPiAuZ2l0L3JlZnMvaGVhZHMvaW52YWxpZCAmJgorCWdpdCBmc2NrIDI+b3V0ICYmCisJZ3JlcCAibm90IGEgY29tbWl0IiBvdXQgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2ludmFsaWQKKycKKworY2F0ID4gaW52YWxpZC10YWcgPDxFT0YKK29iamVjdCBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmCit0eXBlIGNvbW1pdAordGFnIGludmFsaWQKK3RhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiAxMjM0NTY3ODkwIC0wMDAwCisKK1RoaXMgaXMgYW4gaW52YWxpZCB0YWcuCitFT0YKKwordGVzdF9leHBlY3RfZmFpbHVyZSAndGFnIHBvaW50aW5nIHRvIG5vbmV4aXN0ZW50JyAnCisJdGFnPSQoZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gPCBpbnZhbGlkLXRhZykgJiYKKwllY2hvICR0YWcgPiAuZ2l0L3JlZnMvdGFncy9pbnZhbGlkICYmCisJZ2l0IGZzY2sgLS10YWdzIDI+b3V0ICYmCisJY2F0IG91dCAmJgorCWdyZXAgImNvdWxkIG5vdCBsb2FkIHRhZ2dlZCBvYmplY3QiIG91dCAmJgorCXJtIC5naXQvcmVmcy90YWdzL2ludmFsaWQKKycKKworY2F0ID4gd3JvbmctdGFnIDw8RU9GCitvYmplY3QgJChlY2hvIGJsb2IgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikKK3R5cGUgY29tbWl0Cit0YWcgd3JvbmcKK3RhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiAxMjM0NTY3ODkwIC0wMDAwCisKK1RoaXMgaXMgYW4gaW52YWxpZCB0YWcuCitFT0YKKwordGVzdF9leHBlY3RfZmFpbHVyZSAndGFnIHBvaW50aW5nIHRvIHNvbWV0aGluZyBlbHNlIHRoYW4gaXRzIHR5cGUnICcKKwl0YWc9JChnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiA8IHdyb25nLXRhZykgJiYKKwllY2hvICR0YWcgPiAuZ2l0L3JlZnMvdGFncy93cm9uZyAmJgorCWdpdCBmc2NrIC0tdGFncyAyPm91dCAmJgorCWNhdCBvdXQgJiYKKwlncmVwICJzb21lIHNhbmUgZXJyb3IgbWVzc2FnZSIgb3V0ICYmCisJcm0gLmdpdC9yZWZzL3RhZ3Mvd3JvbmcKKycKKworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwMC1yZXYtcGFyc2Uuc2ggYi90L3QxNTAwLXJldi1wYXJzZS5zaAppbmRleCA4NWRhNGNhLi40OGVlMDc3IDEwMDc1NQotLS0gYS90L3QxNTAwLXJldi1wYXJzZS5zaAorKysgYi90L3QxNTAwLXJldi1wYXJzZS5zaApAQCAtMjYsMjEgKzI2LDI4IEBACiAJInRlc3QgJyQxJyA9IFwiXCQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4KVwiIgogCXNoaWZ0CiAJWyAkIyAtZXEgMCBdICYmIHJldHVybgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWU6IGdpdC1kaXIiIFwKKwkidGVzdCAnJDEnID0gXCJcJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcilcIiIKKwlzaGlmdAorCVsgJCMgLWVxIDAgXSAmJiByZXR1cm4KIH0KIAotIyBsYWJlbCBpcy1iYXJlIGlzLWluc2lkZS1naXQgaXMtaW5zaWRlLXdvcmsgcHJlZml4CisjIGxhYmVsIGlzLWJhcmUgaXMtaW5zaWRlLWdpdCBpcy1pbnNpZGUtd29yayBwcmVmaXggZ2l0LWRpcgogCi10ZXN0X3Jldl9wYXJzZSB0b3BsZXZlbCBmYWxzZSBmYWxzZSB0cnVlICcnCitST09UPSQocHdkKQorCit0ZXN0X3Jldl9wYXJzZSB0b3BsZXZlbCBmYWxzZSBmYWxzZSB0cnVlICcnIC5naXQKIAogY2QgLmdpdCB8fCBleGl0IDEKLXRlc3RfcmV2X3BhcnNlIC5naXQvIGZhbHNlIHRydWUgZmFsc2UgJycKK3Rlc3RfcmV2X3BhcnNlIC5naXQvIGZhbHNlIHRydWUgZmFsc2UgJycgLgogY2Qgb2JqZWN0cyB8fCBleGl0IDEKLXRlc3RfcmV2X3BhcnNlIC5naXQvb2JqZWN0cy8gZmFsc2UgdHJ1ZSBmYWxzZSAnJwordGVzdF9yZXZfcGFyc2UgLmdpdC9vYmplY3RzLyBmYWxzZSB0cnVlIGZhbHNlICcnICIkUk9PVC8uZ2l0IgogY2QgLi4vLi4gfHwgZXhpdCAxCiAKIG1rZGlyIC1wIHN1Yi9kaXIgfHwgZXhpdCAxCiBjZCBzdWIvZGlyIHx8IGV4aXQgMQotdGVzdF9yZXZfcGFyc2Ugc3ViZGlyZWN0b3J5IGZhbHNlIGZhbHNlIHRydWUgc3ViL2Rpci8KK3Rlc3RfcmV2X3BhcnNlIHN1YmRpcmVjdG9yeSBmYWxzZSBmYWxzZSB0cnVlIHN1Yi9kaXIvICIkUk9PVC8uZ2l0IgogY2QgLi4vLi4gfHwgZXhpdCAxCiAKIGdpdCBjb25maWcgY29yZS5iYXJlIHRydWUKZGlmZiAtLWdpdCBhL3QvdDE1MDEtd29ya3RyZWUuc2ggYi90L3QxNTAxLXdvcmt0cmVlLnNoCmluZGV4IDI3ZGM2YzUuLmY2YTZmODMgMTAwNzU1Ci0tLSBhL3QvdDE1MDEtd29ya3RyZWUuc2gKKysrIGIvdC90MTUwMS13b3JrdHJlZS5zaApAQCAtOTIsMTMgKzkyLDYgQEAKIHRlc3RfcmV2X3BhcnNlICdpbiByZXBvLmdpdC9zdWIvZGlyJyBmYWxzZSB0cnVlIHRydWUgc3ViL2Rpci8KIGNkIC4uLy4uLy4uLy4uIHx8IGV4aXQgMQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3RpbmcgZ2l0ZGlyIHdoZW4gY3dkIGlzIGluIGEgc3ViZGlyIG9mIGdpdGRpcicgJwotCShleHBlY3RlZD0kKHB3ZCkvcmVwby5naXQgJiYKLQkgY2QgcmVwby5naXQvcmVmcyAmJgotCSB1bnNldCBHSVRfRElSICYmCi0JIHRlc3QgIiRleHBlY3RlZCIgPSAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikiKQotJwotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBvIGZpbmRzIGl0cyB3b3JrIHRyZWUnICcKIAkoY2QgcmVwby5naXQgJiYKIAkgOiA+IHdvcmsvc3ViL2Rpci91bnRyYWNrZWQgJiYKZGlmZiAtLWdpdCBhL3QvdDE1MDItcmV2LXBhcnNlLXBhcnNlb3B0LnNoIGIvdC90MTUwMi1yZXYtcGFyc2UtcGFyc2VvcHQuc2gKaW5kZXggOTk3MDAyZC4uZTUwNDA1OCAxMDA3NTUKLS0tIGEvdC90MTUwMi1yZXYtcGFyc2UtcGFyc2VvcHQuc2gKKysrIGIvdC90MTUwMi1yZXYtcGFyc2UtcGFyc2VvcHQuc2gKQEAgLTIwLDggKzIwLDcgQEAKIAogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCBoZWxwIG91dHB1dCcgJwotCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtaCAyPiBvdXRwdXQuZXJyIDw8RU9GCitjYXQgPiBvcHRpb25zcGVjIDw8IEVPRgogc29tZS1jb21tYW5kIFtvcHRpb25zXSA8YXJncz4uLi4KIAogc29tZS1jb21tYW5kIGRvZXMgZm9vIGFuZCBiYXIhCkBAIC0zNyw3ICszNiw0NyBAQAogRXh0cmFzCiBleHRyYTEgICAgbGluZSBhYm92ZSB1c2VkIHRvIGNhdXNlIGEgc2VnZmF1bHQgYnV0IG5vIGxvbmdlciBkb2VzCiBFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IGhlbHAgb3V0cHV0JyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tIC1oIDI+IG91dHB1dC5lcnIgPCBvcHRpb25zcGVjCiAJdGVzdF9jbXAgZXhwZWN0LmVyciBvdXRwdXQuZXJyCiAnCiAKK2NhdCA+IGV4cGVjdCA8PEVPRgorc2V0IC0tIC0tZm9vIC0tYmFyICdoYW0nIC0tICdhcmcnCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0JyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tIC0tZm9vIC0tYmFyPWhhbSBhcmcgPCBvcHRpb25zcGVjID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgd2l0aCBtaXhlZCBvcHRpb25zIGFuZCBhcmd1bWVudHMnICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLS1mb28gYXJnIC0tYmFyPWhhbSA8IG9wdGlvbnNwZWMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorc2V0IC0tIC0tZm9vIC0tICdhcmcnICctLWJhcj1oYW0nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IHdpdGggLS0nICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLS1mb28gLS0gYXJnIC0tYmFyPWhhbSA8IG9wdGlvbnNwZWMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCAtLXN0b3AtYXQtbm9uLW9wdGlvbicgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLXN0b3AtYXQtbm9uLW9wdGlvbiAtLSAtLWZvbyBhcmcgLS1iYXI9aGFtIDwgb3B0aW9uc3BlYyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS0gJy0tJyAnYXJnJyAnLS1iYXI9aGFtJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCAtLWtlZXAtZGFzaGRhc2gnICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1rZWVwLWRhc2hkYXNoIC0tIC0tZm9vIC0tIGFyZyAtLWJhcj1oYW0gPCBvcHRpb25zcGVjID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDQtY2VpbGluZy1kaXJzLnNoIGIvdC90MTUwNC1jZWlsaW5nLWRpcnMuc2gKaW5kZXggZTM3N2Q0OC4uZGY1YWQ4YyAxMDA3NTUKLS0tIGEvdC90MTUwNC1jZWlsaW5nLWRpcnMuc2gKKysrIGIvdC90MTUwNC1jZWlsaW5nLWRpcnMuc2gKQEAgLTEzLDcgKzEzLDcgQEAKIAkiZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4IgogfQogCi1UUkFTSF9ST09UPSIkKHB3ZCkiCitUUkFTSF9ST09UPSIkUFdEIgogUk9PVF9QQVJFTlQ9JChkaXJuYW1lICIkVFJBU0hfUk9PVCIpCiAKIApkaWZmIC0tZ2l0IGEvdC90MTUwNS1yZXYtcGFyc2UtbGFzdC5zaCBiL3QvdDE1MDUtcmV2LXBhcnNlLWxhc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDcwOWVjZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDUtcmV2LXBhcnNlLWxhc3Quc2gKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgQHstTn0gc3ludGF4JworCisuIC4vdGVzdC1saWIuc2gKKworCittYWtlX2NvbW1pdCAoKSB7CisJZWNobyAiJDEiID4gIiQxIiAmJgorCWdpdCBhZGQgIiQxIiAmJgorCWdpdCBjb21taXQgLW0gIiQxIgorfQorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwltYWtlX2NvbW1pdCAxICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJbWFrZV9jb21taXQgMiAmJgorCW1ha2VfY29tbWl0IDMgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCW1ha2VfY29tbWl0IDQgJiYKKwlnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorCisnCisKKyMgMSAtLSAyIC0tIDMgbWFzdGVyCisjICBcICAgICAgICAgXAorIyAgIFwgICAgICAgICBcCisjICAgIC0tLSA0IC0tLSA1IHNpZGUKKyMKKyMgYW5kICdzaWRlJyBzaG91bGQgYmUgdGhlIGxhc3QgYnJhbmNoCisKK3Rlc3RfcmV2X2VxdWl2YWxlbnQgKCkgeworCisJZ2l0IHJldi1wYXJzZSAiJDEiID4gZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAiJDIiID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTF9IHdvcmtzJyAnCisJdGVzdF9yZXZfZXF1aXZhbGVudCBzaWRlIEB7LTF9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTF9fjIgd29ya3MnICcKKwl0ZXN0X3Jldl9lcXVpdmFsZW50IHNpZGV+MiBAey0xfX4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTF9XjIgd29ya3MnICcKKwl0ZXN0X3Jldl9lcXVpdmFsZW50IHNpZGVeMiBAey0xfV4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTF9QHsxfSB3b3JrcycgJworCXRlc3RfcmV2X2VxdWl2YWxlbnQgc2lkZUB7MX0gQHstMX1AezF9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTJ9IHdvcmtzJyAnCisJdGVzdF9yZXZfZXF1aXZhbGVudCBtYXN0ZXIgQHstMn0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHstM30gZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEB7LTN9CisnCisKK3Rlc3RfZG9uZQorCisKZGlmZiAtLWdpdCBhL3QvdDIwMDEtY2hlY2tvdXQtY2FjaGUtY2xhc2guc2ggYi90L3QyMDAxLWNoZWNrb3V0LWNhY2hlLWNsYXNoLnNoCmluZGV4IGVmMDA3NTMuLjk4YWE3M2UgMTAwNzU1Ci0tLSBhL3QvdDIwMDEtY2hlY2tvdXQtY2FjaGUtY2xhc2guc2gKKysrIGIvdC90MjAwMS1jaGVja291dC1jYWNoZS1jbGFzaC5zaApAQCAtNTksMTAgKzU5LDEwIEBACiAgICAgJ2dpdCByZWFkLXRyZWUgLW0gJHRyZWUxICYmIGdpdCBjaGVja291dC1pbmRleCAtZiAtYScKIHRlc3RfZGVidWcgJ3Nob3dfZmlsZXMgJHRyZWUxJwogCi1sbiAtcyBwYXRoMCBwYXRoMQotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKICAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBhIHN5bWxpbmsuJyBcCi0gICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDEnCisgICAgJ2xuIC1zIHBhdGgwIHBhdGgxICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDEnCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnd3JpdGluZyB0cmVlIG91dCB3aXRoIGdpdCB3cml0ZS10cmVlJyBcCiAgICAgJ3RyZWUzPSQoZ2l0IHdyaXRlLXRyZWUpJwpkaWZmIC0tZ2l0IGEvdC90MjAwMy1jaGVja291dC1jYWNoZS1ta2Rpci5zaCBiL3QvdDIwMDMtY2hlY2tvdXQtY2FjaGUtbWtkaXIuc2gKaW5kZXggNzE4OTRiMy4uMDJhNGZjNSAxMDA3NTUKLS0tIGEvdC90MjAwMy1jaGVja291dC1jYWNoZS1ta2Rpci5zaAorKysgYi90L3QyMDAzLWNoZWNrb3V0LWNhY2hlLW1rZGlyLnNoCkBAIC0xOSw3ICsxOSw3IEBACiAgICAgZWNobyByZXpyb3YgPnBhdGgxL2ZpbGUxICYmCiAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMCBwYXRoMS9maWxlMScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKICAgICAnaGF2ZSBzeW1saW5rIGluIHBsYWNlIHdoZXJlIGRpciBpcyBleHBlY3RlZC4nIFwKICAgICAncm0gLWZyIHBhdGgwIHBhdGgxICYmCiAgICAgIG1rZGlyIHBhdGgyICYmCkBAIC01OSw3ICs1OSw3IEBACiAgICAgIHRlc3QgISAtZiBwYXRoMS9maWxlMScKIAogIyBMaW51cyBmaXggIzEKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCiAgICAgJ3VzZSAtLXByZWZpeD10bXAvb3JhcnkvIHdoZXJlIHRtcCBpcyBhIHN5bWxpbmsnIFwKICAgICAncm0gLWZyIHBhdGgwIHBhdGgxIHBhdGgyIHRtcCogJiYKICAgICAgbWtkaXIgdG1wMSB0bXAxL29yYXJ5ICYmCkBAIC03MSw3ICs3MSw3IEBACiAgICAgIHRlc3QgLWggdG1wJwogCiAjIExpbnVzIGZpeCAjMgotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKICAgICAndXNlIC0tcHJlZml4PXRtcC9vcmFyeS0gd2hlcmUgdG1wIGlzIGEgc3ltbGluaycgXAogICAgICdybSAtZnIgcGF0aDAgcGF0aDEgcGF0aDIgdG1wKiAmJgogICAgICBta2RpciB0bXAxICYmCkBAIC04Miw3ICs4Miw3IEBACiAgICAgIHRlc3QgLWggdG1wJwogCiAjIExpbnVzIGZpeCAjMwotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKICAgICAndXNlIC0tcHJlZml4PXRtcC0gd2hlcmUgdG1wLXBhdGgxIGlzIGEgc3ltbGluaycgXAogICAgICdybSAtZnIgcGF0aDAgcGF0aDEgcGF0aDIgdG1wKiAmJgogICAgICBta2RpciB0bXAxICYmCmRpZmYgLS1naXQgYS90L3QyMDA0LWNoZWNrb3V0LWNhY2hlLXRlbXAuc2ggYi90L3QyMDA0LWNoZWNrb3V0LWNhY2hlLXRlbXAuc2gKaW5kZXggMzkxMzNiOC4uMzZjY2ExNCAxMDA3NTUKLS0tIGEvdC90MjAwNC1jaGVja291dC1jYWNoZS10ZW1wLnNoCisrKyBiL3QvdDIwMDQtY2hlY2tvdXQtY2FjaGUtdGVtcC5zaApAQCAtMTk0LDcgKzE5NCw3IEBACiAgdGVzdCAkKGNhdCAuLi8kczEpID0gdHJlZTFhc3ViZGlyL3BhdGg1KQogKScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKICdjaGVja291dCAtLXRlbXAgc3ltbGluaycgJwogcm0gLWYgcGF0aCogLm1lcmdlXyogb3V0IC5naXQvaW5kZXggJiYKIGxuIC1zIGIgYSAmJgpkaWZmIC0tZ2l0IGEvdC90MjAwNy1jaGVja291dC1zeW1saW5rLnNoIGIvdC90MjAwNy1jaGVja291dC1zeW1saW5rLnNoCmluZGV4IDA1MjZmY2UuLjIwZjMzNDMgMTAwNzU1Ci0tLSBhL3QvdDIwMDctY2hlY2tvdXQtc3ltbGluay5zaAorKysgYi90L3QyMDA3LWNoZWNrb3V0LXN5bWxpbmsuc2gKQEAgLTYsNiArNiwxMiBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAoraWYgISB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCit0aGVuCisJc2F5ICJzeW1ib2xpYyBsaW5rcyBub3Qgc3VwcG9ydGVkIC0gc2tpcHBpbmcgdGVzdHMiCisJdGVzdF9kb25lCitmaQorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKIAogCW1rZGlyIGZyb3R6ICYmCmRpZmYgLS1naXQgYS90L3QyMDEyLWNoZWNrb3V0LWxhc3Quc2ggYi90L3QyMDEyLWNoZWNrb3V0LWxhc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODdiMzBhMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTItY2hlY2tvdXQtbGFzdC5zaApAQCAtMCwwICsxLDk0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgY2FuIHN3aXRjaCB0byBsYXN0IGJyYW5jaCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBoZWxsbyA+d29ybGQgJiYKKwlnaXQgYWRkIHdvcmxkICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBvdGhlciAmJgorCWVjaG8gImhlbGxvIGFnYWluIiA+PndvcmxkICYmCisJZ2l0IGFkZCB3b3JsZCAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCAtIiBkb2VzIG5vdCB3b3JrIGluaXRpYWxseScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpcnN0IGJyYW5jaCBzd2l0Y2gnICcKKwlnaXQgY2hlY2tvdXQgb3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IC0iIHN3aXRjaGVzIGJhY2snICcKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL21hc3RlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IC0iIHN3aXRjaGVzIGZvcnRoJyAnCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9vdGhlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0YWNoIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCAtIiBhdHRhY2hlcyBhZ2FpbicgJworCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvb3RoZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCAtIiBkZXRhY2hlcyBhZ2FpbicgJworCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAieiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAieiQoZ2l0IHJldi1wYXJzZSBvdGhlcikiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vcmUgc3dpdGNoZXMnICcKKwlmb3IgaSBpbiAxNiAxNSAxNCAxMyAxMiAxMSAxMCA5IDggNyA2IDUgNCAzIDIgMQorCWRvCisJCWdpdCBjaGVja291dCAtYiBicmFuY2gkaQorCWRvbmUKKycKKworbW9yZV9zd2l0Y2hlcyAoKSB7CisJZm9yIGkgaW4gMTYgMTUgMTQgMTMgMTIgMTEgMTAgOSA4IDcgNiA1IDQgMyAyIDEKKwlkbworCQlnaXQgY2hlY2tvdXQgYnJhbmNoJGkKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCB0byB0aGUgbGFzdCcgJworCW1vcmVfc3dpdGNoZXMgJiYKKwlnaXQgY2hlY2tvdXQgQHstMX0gJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9icmFuY2gyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggdG8gc2Vjb25kIGZyb20gdGhlIGxhc3QnICcKKwltb3JlX3N3aXRjaGVzICYmCisJZ2l0IGNoZWNrb3V0IEB7LTJ9ICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvYnJhbmNoMyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIHRvIHRoaXJkIGZyb20gdGhlIGxhc3QnICcKKwltb3JlX3N3aXRjaGVzICYmCisJZ2l0IGNoZWNrb3V0IEB7LTN9ICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvYnJhbmNoNCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIHRvIGZvdXJ0aCBmcm9tIHRoZSBsYXN0JyAnCisJbW9yZV9zd2l0Y2hlcyAmJgorCWdpdCBjaGVja291dCBAey00fSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL2JyYW5jaDUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCB0byB0d2VsZnRoIGZyb20gdGhlIGxhc3QnICcKKwltb3JlX3N3aXRjaGVzICYmCisJZ2l0IGNoZWNrb3V0IEB7LTEyfSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL2JyYW5jaDEzIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMTMtY2hlY2tvdXQtc3VibW9kdWxlLnNoIGIvdC90MjAxMy1jaGVja291dC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmRhM2YwYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTMtY2hlY2tvdXQtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIHN1Ym1vZHVsZSAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwkgZ2l0IGluaXQgJiYKKwkgdGVzdF9jb21taXQgZmlyc3QpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHN1cGVycHJvamVjdCAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwkgdGVzdF9jb21taXQgc2Vjb25kKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB1cGRhdGVkLnN1cGVycHJvamVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcicmVzZXQgPHN1Ym1vZHVsZT4iIHVwZGF0ZXMgdGhlIGluZGV4JyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IEhFQUReIHN1Ym1vZHVsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgcmVzZXQgc3VibW9kdWxlICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgPHN1Ym1vZHVsZT4iIHVwZGF0ZXMgdGhlIGluZGV4IG9ubHknICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gc3VibW9kdWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBjaGVja291dCBIRUFEIHN1Ym1vZHVsZSAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDE0LXN3aXRjaC5zaCBiL3QvdDIwMTQtc3dpdGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjZmIxNDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDE0LXN3aXRjaC5zaApAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nUGV0ZXIgTWFjTWlsbGFuJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gSGVsbG8gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIFYxICYmCisJZWNobyBIZWxsbyB3b3JsZCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjaGVja291dCAtYiBvdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBhbGwgY2hhbmdlcyBhcmUgc3RhZ2VkJyAnCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2Vjb25kIGNvbW1pdCcgJworCWdpdCBjb21taXQgLW0gVjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2snICcKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLWV4aXQtY29kZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDAtdXBkYXRlLWNhY2hlLWJhZHBhdGguc2ggYi90L3QyMTAwLXVwZGF0ZS1jYWNoZS1iYWRwYXRoLnNoCmluZGV4IDZlZjJkY2YuLjJkZjNmZGQgMTAwNzU1Ci0tLSBhL3QvdDIxMDAtdXBkYXRlLWNhY2hlLWJhZHBhdGguc2gKKysrIGIvdC90MjEwMC11cGRhdGUtY2FjaGUtYmFkcGF0aC5zaApAQCAtMjYsNyArMjYsMTIgQEAKIAogbWtkaXIgcGF0aDIgcGF0aDMKIGRhdGUgPnBhdGgwCi1sbiAtcyB4eXp6eSBwYXRoMQoraWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwordGhlbgorCWxuIC1zIHh5enp5IHBhdGgxCitlbHNlCisJZGF0ZSA+IHBhdGgxCitmaQogZGF0ZSA+cGF0aDIvZmlsZTIKIGRhdGUgPnBhdGgzL2ZpbGUzCiAKQEAgLTM4LDcgKzQzLDEyIEBACiAKIG1rZGlyIHBhdGgwIHBhdGgxCiBkYXRlID5wYXRoMgotbG4gLXMgZnJvdHogcGF0aDMKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKK3RoZW4KKwlsbiAtcyBmcm90eiBwYXRoMworZWxzZQorCWRhdGUgPiBwYXRoMworZmkKIGRhdGUgPnBhdGgwL2ZpbGUwCiBkYXRlID5wYXRoMS9maWxlMQogCmRpZmYgLS1naXQgYS90L3QyMjAwLWFkZC11cGRhdGUuc2ggYi90L3QyMjAwLWFkZC11cGRhdGUuc2gKaW5kZXggYjJkZGY1YS4uOTEyMDc1MCAxMDA3NTUKLS0tIGEvdC90MjIwMC1hZGQtdXBkYXRlLnNoCisrKyBiL3QvdDIyMDAtYWRkLXVwZGF0ZS5zaApAQCAtODAsNyArODAsNyBAQAogCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2UgYSBmaWxlIHdpdGggYSBzeW1saW5rJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdyZXBsYWNlIGEgZmlsZSB3aXRoIGEgc3ltbGluaycgJwogCiAJcm0gZm9vICYmCiAJbG4gLXMgdG9wIGZvbyAmJgpAQCAtMTUwLDcgKzE1MCw3IEBACiAJZWNobyAyID5wYXRoMyAmJgogCWVjaG8gMiA+cGF0aDUgJiYKIAlnaXQgYWRkIC11ICYmCi0JZ2l0IGxzLWZpbGVzIC1zICJwYXRoPyIgPmFjdHVhbCAmJgorCWdpdCBscy1maWxlcyAtcyBwYXRoMSBwYXRoMiBwYXRoMyBwYXRoNCBwYXRoNSBwYXRoNiA+YWN0dWFsICYmCiAJewogCQllY2hvICIxMDA2NDQgJHRocmVlIDAJcGF0aDEiCiAJCWVjaG8gIjEwMDY0NCAkb25lIDEJcGF0aDMiCmRpZmYgLS1naXQgYS90L3QyMjAxLWFkZC11cGRhdGUtdHlwZWNoYW5nZS5zaCBiL3QvdDIyMDEtYWRkLXVwZGF0ZS10eXBlY2hhbmdlLnNoCmluZGV4IGQyNGM3ZDkuLjJlOGY3MDIgMTAwNzU1Ci0tLSBhL3QvdDIyMDEtYWRkLXVwZGF0ZS10eXBlY2hhbmdlLnNoCisrKyBiL3QvdDIyMDEtYWRkLXVwZGF0ZS10eXBlY2hhbmdlLnNoCkBAIC0xMSw3ICsxMSwxMyBAQAogCV9lbXB0eT0kKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDx4eXp6eSkgJiYKIAk+eW9taW4gJiYKIAk+Y2Fza2x5ICYmCi0JbG4gLXMgZnJvdHogbml0Zm9sICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUzsgdGhlbgorCQlsbiAtcyBmcm90eiBuaXRmb2wgJiYKKwkJVF9sZXR0ZXI9VAorCWVsc2UKKwkJcHJpbnRmICVzIGZyb3R6ID4gbml0Zm9sICYmCisJCVRfbGV0dGVyPU0KKwlmaSAmJgogCW1rZGlyIHJlenJvdiAmJgogCT5yZXpyb3YvYm96YmFyICYmCiAJZ2l0IGFkZCBjYXNrbHkgeHl6enkgeW9taW4gbml0Zm9sIHJlenJvdi9ib3piYXIgJiYKQEAgLTI5LDcgKzM1LDExIEBACiAJPm5pdGZvbCAmJgogCSMgcmV6cm92L2JvemJhciBkaXNhcHBlYXJzCiAJcm0gLWZyIHJlenJvdiAmJgotCWxuIC1zIHh5enp5IHJlenJvdiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1M7IHRoZW4KKwkJbG4gLXMgeHl6enkgcmV6cm92CisJZWxzZQorCQlwcmludGYgJXMgeHl6enkgPiByZXpyb3YKKwlmaSAmJgogCSMgeHl6enkgZGlzYXBwZWFycyAobm90IGEgc3VibW9kdWxlKQogCW1rZGlyIHh5enp5ICYmCiAJZWNobyBnbnVzdG8gPnh5enp5L2JvemJhciAmJgpAQCAtNzEsNyArODEsNyBAQAogCQkJCXMvYmxvYi8wMDAwMDAvCiAJCQl9CiAJCQkvCW5pdGZvbC97Ci0JCQkJcy8Jbml0Zm9sLyAkX3o0MCBUJi8KKwkJCQlzLwluaXRmb2wvICRfejQwICRUX2xldHRlciYvCiAJCQkJcy9ibG9iLzEwMDY0NC8KIAkJCX0KIAkJCS8JcmV6cm92LmJvemJhci97CmRpZmYgLS1naXQgYS90L3QyMzAwLWNkLXRvLXRvcGxldmVsLnNoIGIvdC90MjMwMC1jZC10by10b3BsZXZlbC5zaAppbmRleCBlNDJjYmZlLi4zYjAxYWQyIDEwMDc1NQotLS0gYS90L3QyMzAwLWNkLXRvLXRvcGxldmVsLnNoCisrKyBiL3QvdDIzMDAtY2QtdG8tdG9wbGV2ZWwuc2gKQEAgLTUsMTcgKzUsMTcgQEAKIC4gLi90ZXN0LWxpYi5zaAogCiB0ZXN0X2NkX3RvX3RvcGxldmVsICgpIHsKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkMiIgJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJDMgIiQyIiAnCiAJCSgKIAkJCWNkICciJyQxJyInICYmCiAJCQkuIGdpdC1zaC1zZXR1cCAmJgogCQkJY2RfdG9fdG9wbGV2ZWwgJiYKLQkJCVsgIiQodW5zZXQgUFdEOyAvYmluL3B3ZCkiID0gIiRUT1BMRVZFTCIgXQorCQkJWyAiJChwd2QgLVApIiA9ICIkVE9QTEVWRUwiIF0KIAkJKQogCScKIH0KIAotVE9QTEVWRUw9IiQodW5zZXQgUFdEOyAvYmluL3B3ZCkvcmVwbyIKK1RPUExFVkVMPSIkKHB3ZCAtUCkvcmVwbyIKIG1rZGlyIC1wIHJlcG8vc3ViL2RpcgogbXYgLmdpdCByZXBvLwogU1VCRElSRUNUT1JZX09LPTEKQEAgLTI0LDE0ICsyNCwxNCBAQAogCiB0ZXN0X2NkX3RvX3RvcGxldmVsIHJlcG8vc3ViL2RpciAnYXQgcGh5c2ljYWwgc3ViZGlyJwogCi1sbiAtcyByZXBvIHN5bXJlcG8KLXRlc3RfY2RfdG9fdG9wbGV2ZWwgc3ltcmVwbyAnYXQgc3ltYm9saWMgcm9vdCcKK2xuIC1zIHJlcG8gc3ltcmVwbyAyPi9kZXYvbnVsbAordGVzdF9jZF90b190b3BsZXZlbCBzeW1yZXBvICdhdCBzeW1ib2xpYyByb290JyBTWU1MSU5LUwogCi1sbiAtcyByZXBvL3N1Yi9kaXIgc3ViZGlyLWxpbmsKLXRlc3RfY2RfdG9fdG9wbGV2ZWwgc3ViZGlyLWxpbmsgJ2F0IHN5bWJvbGljIHN1YmRpcicKK2xuIC1zIHJlcG8vc3ViL2RpciBzdWJkaXItbGluayAyPi9kZXYvbnVsbAordGVzdF9jZF90b190b3BsZXZlbCBzdWJkaXItbGluayAnYXQgc3ltYm9saWMgc3ViZGlyJyBTWU1MSU5LUwogCiBjZCByZXBvCi1sbiAtcyBzdWIvZGlyIGludGVybmFsLWxpbmsKLXRlc3RfY2RfdG9fdG9wbGV2ZWwgaW50ZXJuYWwtbGluayAnYXQgaW50ZXJuYWwgc3ltYm9saWMgc3ViZGlyJworbG4gLXMgc3ViL2RpciBpbnRlcm5hbC1saW5rIDI+L2Rldi9udWxsCit0ZXN0X2NkX3RvX3RvcGxldmVsIGludGVybmFsLWxpbmsgJ2F0IGludGVybmFsIHN5bWJvbGljIHN1YmRpcicgU1lNTElOS1MKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDAwLWxzLWZpbGVzLW90aGVycy5zaCBiL3QvdDMwMDAtbHMtZmlsZXMtb3RoZXJzLnNoCmluZGV4IGJjMGEzNTEuLjg2MjkxZTggMTAwNzU1Ci0tLSBhL3QvdDMwMDAtbHMtZmlsZXMtb3RoZXJzLnNoCisrKyBiL3QvdDMwMDAtbHMtZmlsZXMtb3RoZXJzLnNoCkBAIC0xMywxMiArMTMsMTggQEAKICAgICBwYXRoMi9maWxlMiAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQogICAgIHBhdGgzLWp1bmsgIC0gYSBmaWxlIHRvIGNvbmZ1c2UgdGhpbmdzCiAgICAgcGF0aDMvZmlsZTMgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoNCAgICAgICAtIGFuIGVtcHR5IGRpcmVjdG9yeQogJwogLiAuL3Rlc3QtbGliLnNoCiAKIGRhdGUgPnBhdGgwCi1sbiAtcyB4eXp6eSBwYXRoMQotbWtkaXIgcGF0aDIgcGF0aDMKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKK3RoZW4KKwlsbiAtcyB4eXp6eSBwYXRoMQorZWxzZQorCWRhdGUgPiBwYXRoMQorZmkKK21rZGlyIHBhdGgyIHBhdGgzIHBhdGg0CiBkYXRlID5wYXRoMi9maWxlMgogZGF0ZSA+cGF0aDItanVuawogZGF0ZSA+cGF0aDMvZmlsZTMKQEAgLTI4LDYgKzM0LDcgQEAKIGNhdCA+ZXhwZWN0ZWQxIDw8RU9GCiBleHBlY3RlZDEKIGV4cGVjdGVkMgorZXhwZWN0ZWQzCiBvdXRwdXQKIHBhdGgwCiBwYXRoMQpAQCAtMzUsNiArNDIsOCBAQAogcGF0aDIvZmlsZTIKIEVPRgogc2VkIC1lICdzfHBhdGgyL2ZpbGUyfHBhdGgyL3wnIDxleHBlY3RlZDEgPmV4cGVjdGVkMgorY2F0IDxleHBlY3RlZDIgPmV4cGVjdGVkMworZWNobyBwYXRoNC8gPj5leHBlY3RlZDIKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyB0byBzaG93IG91dHB1dC4nIFwKQEAgLTQyLDcgKzUxLDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyBzaG91bGQgcGljayB1cCBzeW1saW5rcy4nIFwKLSAgICAnZGlmZiBvdXRwdXQgZXhwZWN0ZWQxJworICAgICd0ZXN0X2NtcCBleHBlY3RlZDEgb3V0cHV0JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZGlyZWN0b3J5IHRvIHNob3cgb3V0cHV0LicgXApAQCAtNTEsNiArNjAsMTQgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyAtLWRpcmVjdG9yeSBzaG91bGQgbm90IGdldCBjb25mdXNlZC4nIFwKLSAgICAnZGlmZiBvdXRwdXQgZXhwZWN0ZWQyJworICAgICd0ZXN0X2NtcCBleHBlY3RlZDIgb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZGlyZWN0b3J5IC0tbm8tZW1wdHktZGlyZWN0b3J5IHRvIHNob3cgb3V0cHV0LicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1kaXJlY3RvcnkgLS1uby1lbXB0eS1kaXJlY3RvcnkgPm91dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy0tbm8tZW1wdHktZGlyZWN0b3J5IGhpZGVzIGVtcHR5IGRpcmVjdG9yeScgXAorICAgICd0ZXN0X2NtcCBleHBlY3RlZDMgb3V0cHV0JwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMTAtbHMtZmlsZXMta2lsbGVkLW1vZGlmaWVkLnNoIGIvdC90MzAxMC1scy1maWxlcy1raWxsZWQtbW9kaWZpZWQuc2gKaW5kZXggZWMxNDA0MC4uOTU2NzFjMiAxMDA3NTUKLS0tIGEvdC90MzAxMC1scy1maWxlcy1raWxsZWQtbW9kaWZpZWQuc2gKKysrIGIvdC90MzAxMC1scy1maWxlcy1raWxsZWQtbW9kaWZpZWQuc2gKQEAgLTM4LDcgKzM4LDEyIEBACiAuIC4vdGVzdC1saWIuc2gKIAogZGF0ZSA+cGF0aDAKLWxuIC1zIHh5enp5IHBhdGgxCitpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCit0aGVuCisJbG4gLXMgeHl6enkgcGF0aDEKK2Vsc2UKKwlkYXRlID4gcGF0aDEKK2ZpCiBta2RpciBwYXRoMiBwYXRoMwogZGF0ZSA+cGF0aDIvZmlsZTIKIGRhdGUgPnBhdGgzL2ZpbGUzCkBAIC01Miw4ICs1NywxNCBAQAogCiBybSAtZnIgcGF0aD8gOyMgbGVhdmUgcGF0aDEwIGFsb25lCiBkYXRlID5wYXRoMgotbG4gLXMgZnJvdHogcGF0aDMKLWxuIC1zIG5pdGZvbCBwYXRoNQoraWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwordGhlbgorCWxuIC1zIGZyb3R6IHBhdGgzCisJbG4gLXMgbml0Zm9sIHBhdGg1CitlbHNlCisJZGF0ZSA+IHBhdGgzCisJZGF0ZSA+IHBhdGg1CitmaQogbWtkaXIgcGF0aDAgcGF0aDEgcGF0aDYKIGRhdGUgPnBhdGgwL2ZpbGUwCiBkYXRlID5wYXRoMS9maWxlMQpAQCAtNzUsNyArODYsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmFsaWRhdGUgZ2l0IGxzLWZpbGVzIC1rIG91dHB1dC4nIFwKLSAgICAnZGlmZiAub3V0cHV0IC5leHBlY3RlZCcKKyAgICAndGVzdF9jbXAgLmV4cGVjdGVkIC5vdXRwdXQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdnaXQgbHMtZmlsZXMgLW0gdG8gc2hvdyBtb2RpZmllZCBmaWxlcy4nIFwKQEAgLTkxLDYgKzEwMiw2IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd2YWxpZGF0ZSBnaXQgbHMtZmlsZXMgLW0gb3V0cHV0LicgXAotICAgICdkaWZmIC5vdXRwdXQgLmV4cGVjdGVkJworICAgICd0ZXN0X2NtcCAuZXhwZWN0ZWQgLm91dHB1dCcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaCBiL3QvdDMwMzAtbWVyZ2UtcmVjdXJzaXZlLnNoCmluZGV4IDBkZTYxM2QuLjliM2ZhMmIgMTAwNzU1Ci0tLSBhL3QvdDMwMzAtbWVyZ2UtcmVjdXJzaXZlLnNoCisrKyBiL3QvdDMwMzAtbWVyZ2UtcmVjdXJzaXZlLnNoCkBAIC0yNzYsNiArMjc2LDkgQEAKIAogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKKwlncmVwICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UiIG91dCAmJgorCXJtIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKIAlncmVwICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25mbGljdGVkIG1lcmdlIiBvdXQKIAogJwpkaWZmIC0tZ2l0IGEvdC90MzAzMS1tZXJnZS1jcmlzY3Jvc3Muc2ggYi90L3QzMDMxLW1lcmdlLWNyaXNjcm9zcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZjQxNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzAzMS1tZXJnZS1jcmlzY3Jvc3Muc2gKQEAgLTAsMCArMSw5NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlLXJlY3Vyc2l2ZSBiYWNrZW5kIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjICAgICAgICAgQSAgICAgIDwtIGNyZWF0ZSBzb21lIGZpbGVzCisjICAgICAgICAvIFwKKyMgICAgICAgQiAgIEMgICAgPC0gY2F1c2UgcmVuYW1lL2RlbGV0ZSBjb25mbGljdHMgYmV0d2VlbiBCIGFuZCBDCisjICAgICAgLyAgICAgXAorIyAgICAgfFwgICAgIC98CisjICAgICB8IEQgICBFIHwKKyMgICAgIHwgIFwgLyAgfAorIyAgICAgfCAgIFggICB8CisjICAgICB8ICAvIFwgIHwKKyMgICAgIHwgLyAgIFwgfAorIyAgICAgfC8gICAgIFx8CisjICAgICBGICAgICAgIEcgIDwtIG1lcmdlIEUgaW50byBCLCBEIGludG8gQworIyAgICAgIFwgICAgIC8KKyMgICAgICAgXCAgIC8KKyMgICAgICAgIFwgLworIyAgICAgICAgIEggICAgICA8LSByZWN1cnNpdmUgbWVyZ2UgY3Jhc2hlcworIworCisjIGluaXRpYWxpemUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBjcmlzcy1jcm9zcyBoaXN0b3J5JyAnCisJbWtkaXIgZGF0YSAmJgorCisJIyBjcmVhdGUgYSBidW5jaCBvZiBmaWxlcworCW49MSAmJgorCXdoaWxlIHRlc3QgJG4gLWxlIDEwCisJZG8KKwkJZWNobyAkbiA+IGRhdGEvJG4gJiYKKwkJbj0kKCgkbisxKSkgfHwKKwkJYnJlYWsKKwlkb25lICYmCisKKwkjIGNoZWNrIHRoZW0gaW4KKwlnaXQgYWRkIGRhdGEgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKwlnaXQgYnJhbmNoIEEgJiYKKworCSMgYSBmaWxlIGluIG9uZSBicmFuY2gKKwlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJZ2l0IHJtIGRhdGEvOSAmJgorCWdpdCBhZGQgZGF0YSAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCisJIyB3aXRoIGEgYnJhbmNoIG9mZiBvZiBpdAorCWdpdCBicmFuY2ggRCAmJgorCisJIyBwdXQgc29tZSBjb21taXRzIG9uIEQKKwlnaXQgY2hlY2tvdXQgRCAmJgorCWVjaG8gdGVzdEQgPiBkYXRhL3Rlc3REICYmCisJZ2l0IGFkZCBkYXRhICYmCisJZ2l0IGNvbW1pdCAtbSBEICYmCisKKwkjIGJhY2sgdXAgdG8gdGhlIHRvcCwgY3JlYXRlIGFub3RoZXIgYnJhbmNoIGFuZCBjYXVzZQorCSMgYSByZW5hbWUgY29uZmxpY3Qgd2l0aCB0aGUgZmlsZSB3ZSBkZWxldGVkIGVhcmxpZXIKKwlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJZ2l0IG12IGRhdGEvOSBkYXRhL25ldy05ICYmCisJZ2l0IGFkZCBkYXRhICYmCisJZ2l0IGNvbW1pdCAtbSBDICYmCisKKwkjIHdpdGggYSBicmFuY2ggb2ZmIG9mIGl0CisJZ2l0IGJyYW5jaCBFICYmCisKKwkjIHB1dCBhIGNvbW1pdCBvbiBFCisJZ2l0IGNoZWNrb3V0IEUgJiYKKwllY2hvIHRlc3RFID4gZGF0YS90ZXN0RSAmJgorCWdpdCBhZGQgZGF0YSAmJgorCWdpdCBjb21taXQgLW0gRSAmJgorCisJIyBub3csIG1lcmdlIEUgaW50byBCCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRSAmJgorCSMgZm9yY2UtcmVzb2x2ZQorCWdpdCBhZGQgZGF0YSAmJgorCWdpdCBjb21taXQgLW0gRiAmJgorCWdpdCBicmFuY2ggRiAmJgorCisJIyBhbmQgbWVyZ2UgRCBpbnRvIEMKKwlnaXQgY2hlY2tvdXQgQyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBEICYmCisJIyBmb3JjZS1yZXNvbHZlCisJZ2l0IGFkZCBkYXRhICYmCisJZ2l0IGNvbW1pdCAtbSBHICYmCisJZ2l0IGJyYW5jaCBHCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZSBtZXJnZSBiZXR3ZWVuIEYgYW5kIEcsIGNhdXNlcyBzZWdmYXVsdCcgJworCWdpdCBtZXJnZSBGCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoIGIvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCmluZGV4IDZlNmEyNTQuLmVlNjBkMDMgMTAwNzU1Ci0tLSBhL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaAorKysgYi90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKQEAgLTIyLDkgKzIyLDIxIEBACiAgICAgJ3NldHVwJyBcCiAgICAgJ21rZGlyIHBhdGgyIHBhdGgyL2JheiAmJgogICAgICBlY2hvIEhpID5wYXRoMCAmJgotICAgICBsbiAtcyBwYXRoMCBwYXRoMSAmJgorICAgICBpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCisgICAgIHRoZW4KKwlsbiAtcyBwYXRoMCBwYXRoMSAmJgorCWxuIC1zIC4uL3BhdGgxIHBhdGgyL2JhemJvCisJbWFrZV9leHBlY3RlZCAoKSB7CisJCWNhdCA+ZXhwZWN0ZWQKKwl9CisgICAgIGVsc2UKKwlwcmludGYgcGF0aDAgPiBwYXRoMSAmJgorCXByaW50ZiAuLi9wYXRoMSA+IHBhdGgyL2JhemJvCisJbWFrZV9leHBlY3RlZCAoKSB7CisJCXNlZCAtZSAicy8xMjAwMDAgLzEwMDY0NCAvIiA+ZXhwZWN0ZWQKKwl9CisgICAgIGZpICYmCiAgICAgIGVjaG8gTG8gPnBhdGgyL2ZvbyAmJgotICAgICBsbiAtcyAuLi9wYXRoMSBwYXRoMi9iYXpibyAmJgogICAgICBlY2hvIE1pID5wYXRoMi9iYXovYiAmJgogICAgICBmaW5kIHBhdGg/IFwoIC10eXBlIGYgLW8gLXR5cGUgbCBcKSAtcHJpbnQgfAogICAgICB4YXJncyBnaXQgdXBkYXRlLWluZGV4IC0tYWRkICYmCkBAIC00MSw3ICs1Myw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbHMtdHJlZSBwbGFpbicgXAogICAgICdnaXQgbHMtdHJlZSAkdHJlZSA+Y3VycmVudCAmJgotICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorICAgICBtYWtlX2V4cGVjdGVkIDw8XEVPRiAmJgogMTAwNjQ0IGJsb2IgWAlwYXRoMAogMTIwMDAwIGJsb2IgWAlwYXRoMQogMDQwMDAwIHRyZWUgWAlwYXRoMgpAQCAtNTEsNyArNjMsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2xzLXRyZWUgcmVjdXJzaXZlJyBcCiAgICAgJ2dpdCBscy10cmVlIC1yICR0cmVlID5jdXJyZW50ICYmCi0gICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCiAxMDA2NDQgYmxvYiBYCXBhdGgwCiAxMjAwMDAgYmxvYiBYCXBhdGgxCiAxMDA2NDQgYmxvYiBYCXBhdGgyL2Jhei9iCkBAIC02Myw3ICs3NSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbHMtdHJlZSByZWN1cnNpdmUgd2l0aCAtdCcgXAogICAgICdnaXQgbHMtdHJlZSAtciAtdCAkdHJlZSA+Y3VycmVudCAmJgotICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorICAgICBtYWtlX2V4cGVjdGVkIDw8XEVPRiAmJgogMTAwNjQ0IGJsb2IgWAlwYXRoMAogMTIwMDAwIGJsb2IgWAlwYXRoMQogMDQwMDAwIHRyZWUgWAlwYXRoMgpAQCAtNzcsNyArODksNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2xzLXRyZWUgcmVjdXJzaXZlIHdpdGggLWQnIFwKICAgICAnZ2l0IGxzLXRyZWUgLXIgLWQgJHRyZWUgPmN1cnJlbnQgJiYKLSAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKyAgICAgbWFrZV9leHBlY3RlZCA8PFxFT0YgJiYKIDA0MDAwMCB0cmVlIFgJcGF0aDIKIDA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CiBFT0YKQEAgLTg2LDcgKzk4LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdscy10cmVlIGZpbHRlcmVkIHdpdGggcGF0aCcgXAogICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoID5jdXJyZW50ICYmCi0gICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCiBFT0YKICAgICAgdGVzdF9vdXRwdXQnCiAKQEAgLTk2LDcgKzEwOCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgxIHBhdGgwJyBcCiAgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGgxIHBhdGgwID5jdXJyZW50ICYmCi0gICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCiAxMDA2NDQgYmxvYiBYCXBhdGgwCiAxMjAwMDAgYmxvYiBYCXBhdGgxCiBFT0YKQEAgLTEwNSw3ICsxMTcsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoMC8nIFwKICAgICAnZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDAvID5jdXJyZW50ICYmCi0gICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCiBFT0YKICAgICAgdGVzdF9vdXRwdXQnCiAKQEAgLTExNCw3ICsxMjYsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoMicgXAogICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMiA+Y3VycmVudCAmJgotICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorICAgICBtYWtlX2V4cGVjdGVkIDw8XEVPRiAmJgogMDQwMDAwIHRyZWUgWAlwYXRoMgogRU9GCiAgICAgIHRlc3Rfb3V0cHV0JwpAQCAtMTIzLDcgKzEzNSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgyLycgXAogICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMi8gPmN1cnJlbnQgJiYKLSAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKyAgICAgbWFrZV9leHBlY3RlZCA8PFxFT0YgJiYKIDA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CiAxMjAwMDAgYmxvYiBYCXBhdGgyL2JhemJvCiAxMDA2NDQgYmxvYiBYCXBhdGgyL2ZvbwpAQCAtMTM1LDcgKzE0Nyw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgyL2JheicgXAogICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMi9iYXogPmN1cnJlbnQgJiYKLSAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKyAgICAgbWFrZV9leHBlY3RlZCA8PFxFT0YgJiYKIDA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CiBFT0YKICAgICAgdGVzdF9vdXRwdXQnCkBAIC0xNDMsMTQgKzE1NSwxNCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoMi9iYWsnIFwKICAgICAnZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDIvYmFrID5jdXJyZW50ICYmCi0gICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCiBFT0YKICAgICAgdGVzdF9vdXRwdXQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdscy10cmVlIC10IGZpbHRlcmVkIHdpdGggcGF0aDIvYmFrJyBcCiAgICAgJ2dpdCBscy10cmVlIC10ICR0cmVlIHBhdGgyL2JhayA+Y3VycmVudCAmJgotICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorICAgICBtYWtlX2V4cGVjdGVkIDw8XEVPRiAmJgogMDQwMDAwIHRyZWUgWAlwYXRoMgogRU9GCiAgICAgIHRlc3Rfb3V0cHV0JwpkaWZmIC0tZ2l0IGEvdC90MzIwMC1icmFuY2guc2ggYi90L3QzMjAwLWJyYW5jaC5zaAppbmRleCAxYjFlOWVjLi5kNTlhOWI0IDEwMDc1NQotLS0gYS90L3QzMjAwLWJyYW5jaC5zaAorKysgYi90L3QzMjAwLWJyYW5jaC5zaApAQCAtMTIxLDcgKzEyMSw3IEBACiAJISB0ZXN0IC1mIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIzCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCiAgICAgJ2dpdCBicmFuY2ggLW0gdSB2IHNob3VsZCBmYWlsIHdoZW4gdGhlIHJlZmxvZyBmb3IgdSBpcyBhIHN5bWxpbmsnICcKICAgICAgZ2l0IGJyYW5jaCAtbCB1ICYmCiAgICAgIG12IC5naXQvbG9ncy9yZWZzL2hlYWRzL3UgcmVhbC11ICYmCmRpZmYgLS1naXQgYS90L3QzMjAzLWJyYW5jaC1vdXRwdXQuc2ggYi90L3QzMjAzLWJyYW5jaC1vdXRwdXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODA5ZDFjNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMyMDMtYnJhbmNoLW91dHB1dC5zaApAQCAtMCwwICsxLDgxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGJyYW5jaCBkaXNwbGF5IHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgY29tbWl0cycgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgYnJhbmNoZXMnICcKKwlnaXQgYnJhbmNoIGJyYW5jaC1vbmUKKwlnaXQgYnJhbmNoIGJyYW5jaC10d28gSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSByZW1vdGUgYnJhbmNoZXMnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaC1vbmUgYnJhbmNoLW9uZQorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoLXR3byBicmFuY2gtdHdvCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgcmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2gtb25lCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKyAgYnJhbmNoLW9uZQorICBicmFuY2gtdHdvCisqIG1hc3RlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIHNob3dzIGxvY2FsIGJyYW5jaGVzJyAnCisJZ2l0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgIG9yaWdpbi9IRUFEIC0+IG9yaWdpbi9icmFuY2gtb25lCisgIG9yaWdpbi9icmFuY2gtb25lCisgIG9yaWdpbi9icmFuY2gtdHdvCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLXIgc2hvd3MgcmVtb3RlIGJyYW5jaGVzJyAnCisJZ2l0IGJyYW5jaCAtciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgIGJyYW5jaC1vbmUKKyAgYnJhbmNoLXR3bworKiBtYXN0ZXIKKyAgcmVtb3Rlcy9vcmlnaW4vSEVBRCAtPiBvcmlnaW4vYnJhbmNoLW9uZQorICByZW1vdGVzL29yaWdpbi9icmFuY2gtb25lCisgIHJlbW90ZXMvb3JpZ2luL2JyYW5jaC10d28KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtYSBzaG93cyBsb2NhbCBhbmQgcmVtb3RlIGJyYW5jaGVzJyAnCisJZ2l0IGJyYW5jaCAtYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCit0d28KK29uZQordHdvCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLXYgc2hvd3MgYnJhbmNoIHN1bW1hcmllcycgJworCWdpdCBicmFuY2ggLXYgPnRtcCAmJgorCWF3ayAie3ByaW50IFwkTkZ9IiA8dG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKyogKG5vIGJyYW5jaCkKKyAgYnJhbmNoLW9uZQorICBicmFuY2gtdHdvCisgIG1hc3RlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIHNob3dzIGRldGFjaGVkIEhFQUQgcHJvcGVybHknICcKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJZ2l0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDAtcmViYXNlLnNoIGIvdC90MzQwMC1yZWJhc2Uuc2gKaW5kZXggYjdhNjcwZS4uYzVjMjljYyAxMDA3NTUKLS0tIGEvdC90MzQwMC1yZWJhc2Uuc2gKKysrIGIvdC90MzQwMC1yZWJhc2Uuc2gKQEAgLTE0LDcgKzE0LDggQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ByZXBhcmUgcmVwb3NpdG9yeSB3aXRoIHRvcGljIGJyYW5jaGVzJyBcCi0gICAgJ2VjaG8gRmlyc3QgPiBBICYmCisgICAgJ2dpdCBjb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIHRydWUgJiYKKyAgICAgZWNobyBGaXJzdCA+IEEgJiYKICAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBICYmCiAgICAgIGdpdCBjb21taXQgLW0gIkFkZCBBLiIgJiYKICAgICAgZ2l0IGNoZWNrb3V0IC1iIG15LXRvcGljLWJyYW5jaCAmJgpAQCAtNDAsMTMgKzQxLDQ4IEBACiAgICAgIGdpdCB0YWcgdG9waWMKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG9uIGRpcnR5IHdvcmt0cmVlJyAnCisgICAgIGVjaG8gZGlydHkgPj4gQSAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG9uIGRpcnR5IGNhY2hlJyAnCisgICAgIGdpdCBhZGQgQSAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIG1hc3RlcicKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGFnYWluc3QgbWFzdGVyJyAnCisgICAgIGdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgogICAgICBnaXQgcmViYXNlIG1hc3RlcicKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGFnYWluc3QgbWFzdGVyIHR3aWNlJyAnCisgICAgIGdpdCByZWJhc2UgbWFzdGVyID5vdXQgJiYKKyAgICAgZ3JlcCAiQ3VycmVudCBicmFuY2ggbXktdG9waWMtYnJhbmNoIGlzIHVwIHRvIGRhdGUiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWdhaW5zdCBtYXN0ZXIgdHdpY2Ugd2l0aCAtLWZvcmNlJyAnCisgICAgIGdpdCByZWJhc2UgLS1mb3JjZS1yZWJhc2UgbWFzdGVyID5vdXQgJiYKKyAgICAgZ3JlcCAiQ3VycmVudCBicmFuY2ggbXktdG9waWMtYnJhbmNoIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWdhaW5zdCBtYXN0ZXIgdHdpY2UgZnJvbSBhbm90aGVyIGJyYW5jaCcgJworICAgICBnaXQgY2hlY2tvdXQgbXktdG9waWMtYnJhbmNoXiAmJgorICAgICBnaXQgcmViYXNlIG1hc3RlciBteS10b3BpYy1icmFuY2ggPm91dCAmJgorICAgICBncmVwICJDdXJyZW50IGJyYW5jaCBteS10b3BpYy1icmFuY2ggaXMgdXAgdG8gZGF0ZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBmYXN0LWZvcndhcmQgdG8gbWFzdGVyJyAnCisgICAgIGdpdCBjaGVja291dCBteS10b3BpYy1icmFuY2heICYmCisgICAgIGdpdCByZWJhc2UgbXktdG9waWMtYnJhbmNoID5vdXQgJiYKKyAgICAgZ3JlcCAiRmFzdC1mb3J3YXJkZWQgSEVBRCB0byBteS10b3BpYy1icmFuY2giIG91dAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndGhlIHJlYmFzZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGRlc3Ryb3llZCBhdXRob3IgaW5mb3JtYXRpb24nIFwKICAgICAnISAoZ2l0IGxvZyB8IGdyZXAgIkF1dGhvcjoiIHwgZ3JlcCAiPD4iKScKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnSEVBRCB3YXMgZGV0YWNoZWQgZHVyaW5nIHJlYmFzZScgJworICAgICB0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEQHsxfSkgIT0gJChnaXQgcmV2LXBhcnNlIG15LXRvcGljLWJyYW5jaEB7MX0pCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhZnRlciBtZXJnZSBtYXN0ZXInICcKICAgICAgZ2l0IHJlc2V0IC0taGFyZCB0b3BpYyAmJgogICAgICBnaXQgbWVyZ2UgbWFzdGVyICYmCkBAIC03OCwxMCArMTE0LDIzIEBACiAgICAgIGdpdCBjaGVja291dCAtYiBtb2RlY2hhbmdlIEhFQUReICYmCiAgICAgIGVjaG8gMSA+IFggJiYKICAgICAgZ2l0IGFkZCBYICYmCi0gICAgIGNobW9kIGEreCBBICYmCisgICAgIHRlc3RfY2htb2QgK3ggQSAmJgogICAgICB0ZXN0X3RpY2sgJiYKLSAgICAgZ2l0IGNvbW1pdCAtbSBtb2RlY2hhbmdlIEEgWCAmJgorICAgICBnaXQgY29tbWl0IC1tIG1vZGVjaGFuZ2UgJiYKICAgICAgR0lUX1RSQUNFPTEgZ2l0IHJlYmFzZSBtYXN0ZXIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2hvdyB2ZXJib3NlIGVycm9yIHdoZW4gSEVBRCBjb3VsZCBub3QgYmUgZGV0YWNoZWQnICcKKyAgICAgOiA+IEIgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSB0b3BpYyAyPiBvdXRwdXQuZXJyID4gb3V0cHV0Lm91dCAmJgorICAgICBncmVwICJVbnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGUgLkIuIHdvdWxkIGJlIG92ZXJ3cml0dGVuIiBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtcSBpcyBxdWlldCcgJworICAgICBybSBCICYmCisgICAgIGdpdCBjaGVja291dCAtYiBxdWlldCB0b3BpYyAmJgorICAgICBnaXQgcmViYXNlIC1xIG1hc3RlciA+IG91dHB1dC5vdXQgMj4mMSAmJgorICAgICB0ZXN0ICEgLXMgb3V0cHV0Lm91dAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoIGIvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKaW5kZXggNGJlY2M1NS4uYTk3MzYyOCAxMDA3NTUKLS0tIGEvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKKysrIGIvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKQEAgLTEwLDYgKzEwLDEwIEBACiAnCiAuIC4vdGVzdC1saWIuc2gKIAorLiAuLi9saWItcmViYXNlLnNoCisKK3NldF9mYWtlX2VkaXRvcgorCiAjIHNldCB1cCB0d28gYnJhbmNoZXMgbGlrZSB0aGlzOgogIwogIyBBIC0gQiAtIEMgLSBEIC0gRQpAQCAtNjEsMzkgKzY1LDYgQEAKIAlnaXQgdGFnIEkKICcKIAotZWNobyAiIyEkU0hFTExfUEFUSCIgPmZha2UtZWRpdG9yLnNoCi1jYXQgPj4gZmFrZS1lZGl0b3Iuc2ggPDxcRU9GCi1jYXNlICIkMSIgaW4KLSovQ09NTUlUX0VESVRNU0cpCi0JdGVzdCAteiAiJEZBS0VfQ09NTUlUX01FU1NBR0UiIHx8IGVjaG8gIiRGQUtFX0NPTU1JVF9NRVNTQUdFIiA+ICIkMSIKLQl0ZXN0IC16ICIkRkFLRV9DT01NSVRfQU1FTkQiIHx8IGVjaG8gIiRGQUtFX0NPTU1JVF9BTUVORCIgPj4gIiQxIgotCWV4aXQKLQk7OwotZXNhYwotdGVzdCAteiAiJEVYUEVDVF9DT1VOVCIgfHwKLQl0ZXN0ICIkRVhQRUNUX0NPVU5UIiA9ICQoc2VkIC1lICcvXiMvZCcgLWUgJy9eJC9kJyA8ICIkMSIgfCB3YyAtbCkgfHwKLQlleGl0Ci10ZXN0IC16ICIkRkFLRV9MSU5FUyIgJiYgZXhpdAotZ3JlcCAtdiAnXiMnIDwgIiQxIiA+ICIkMSIudG1wCi1ybSAtZiAiJDEiCi1jYXQgIiQxIi50bXAKLWFjdGlvbj1waWNrCi1mb3IgbGluZSBpbiAkRkFLRV9MSU5FUzsgZG8KLQljYXNlICRsaW5lIGluCi0Jc3F1YXNofGVkaXQpCi0JCWFjdGlvbj0iJGxpbmUiOzsKLQkqKQotCQllY2hvIHNlZCAtbiAiJHtsaW5lfXMvXnBpY2svJGFjdGlvbi9wIgotCQlzZWQgLW4gIiR7bGluZX1wIiA8ICIkMSIudG1wCi0JCXNlZCAtbiAiJHtsaW5lfXMvXnBpY2svJGFjdGlvbi9wIiA8ICIkMSIudG1wID4+ICIkMSIKLQkJYWN0aW9uPXBpY2s7OwotCWVzYWMKLWRvbmUKLUVPRgotCi10ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9mYWtlLWVkaXRvci5zaCIKLWNobW9kIGEreCBmYWtlLWVkaXRvci5zaAotCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjaGFuZ2VzIGFyZSBhIG5vcCcgJwogCWdpdCByZWJhc2UgLWkgRiAmJgogCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSIgPSAicmVmcy9oZWFkcy9icmFuY2gyIiAmJgpAQCAtMTQ4LDExICsxMTksMTEgQEAKIEVPRgogCiBjYXQgPiBleHBlY3QyIDw8IEVPRgotPDw8PDw8PCBIRUFEOmZpbGUxCis8PDw8PDw8IEhFQUQKIDIKID09PT09PT0KIDMKLT4+Pj4+Pj4gYjdjYTk3Ni4uLiBHOmZpbGUxCis+Pj4+Pj4+IGI3Y2E5NzYuLi4gRwogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0b3Agb24gY29uZmxpY3RpbmcgcGljaycgJwpAQCAtNDg4LDQgKzQ1OSwxNSBAQAogCUZBS0VfTElORVM9IjEgc3F1YXNoIDIgMyIgZ2l0IHJlYmFzZSAtaSBBCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F2b2lkIHVubmVjZXNzYXJ5IHJlc2V0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3QtY2htdGltZSA9MTIzNDU2Nzg5IGZpbGUzICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlIRUFEPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH40ICYmCisJdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCU1USU1FPSQodGVzdC1jaG10aW1lIC12ICswIGZpbGUzIHwgc2VkICdzL1teMC05XS4qJC8vJykgJiYKKwl0ZXN0IDEyMzQ1Njc4OSA9ICRNVElNRQorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDYtcmViYXNlLW1lc3NhZ2Uuc2ggYi90L3QzNDA2LXJlYmFzZS1tZXNzYWdlLnNoCmluZGV4IDUzOTEwODAuLjg1ZmM3YzQgMTAwNzU1Ci0tLSBhL3QvdDM0MDYtcmViYXNlLW1lc3NhZ2Uuc2gKKysrIGIvdC90MzQwNi1yZWJhc2UtbWVzc2FnZS5zaApAQCAtMjIsNyArMjIsOCBAQAogCWdpdCBjaGVja291dCB0b3BpYyAmJgogCXF1aWNrX29uZSBBICYmCiAJcXVpY2tfb25lIEIgJiYKLQlxdWlja19vbmUgWgorCXF1aWNrX29uZSBaICYmCisJZ2l0IHRhZyBzdGFydAogCiAnCiAKQEAgLTQxLDQgKzQyLDI0IEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tc3RhdCcgJworICAgICAgICBnaXQgcmVzZXQgLS1oYXJkIHN0YXJ0CisgICAgICAgIGdpdCByZWJhc2UgLS1zdGF0IG1hc3RlciA+ZGlmZnN0YXQudHh0ICYmCisgICAgICAgIGdyZXAgIl4gZmlsZVggfCAgKjEgKyQiIGRpZmZzdGF0LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugdy9jb25maWcgcmViYXNlLnN0YXQnICcKKyAgICAgICAgZ2l0IHJlc2V0IC0taGFyZCBzdGFydAorICAgICAgICBnaXQgY29uZmlnIHJlYmFzZS5zdGF0IHRydWUgJiYKKyAgICAgICAgZ2l0IHJlYmFzZSBtYXN0ZXIgPmRpZmZzdGF0LnR4dCAmJgorICAgICAgICBncmVwICJeIGZpbGVYIHwgICoxICskIiBkaWZmc3RhdC50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1uIG92ZXJyaWRlcyBjb25maWcgcmViYXNlLnN0YXQgY29uZmlnJyAnCisgICAgICAgIGdpdCByZXNldCAtLWhhcmQgc3RhcnQKKyAgICAgICAgZ2l0IGNvbmZpZyByZWJhc2Uuc3RhdCB0cnVlICYmCisgICAgICAgIGdpdCByZWJhc2UgLW4gbWFzdGVyID5kaWZmc3RhdC50eHQgJiYKKyAgICAgICAgISBncmVwICJeIGZpbGVYIHwgICoxICskIiBkaWZmc3RhdC50eHQKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDEwLXJlYmFzZS1wcmVzZXJ2ZS1kcm9wcGVkLW1lcmdlcy5zaCBiL3QvdDM0MTAtcmViYXNlLXByZXNlcnZlLWRyb3BwZWQtbWVyZ2VzLnNoCmluZGV4IDU4MTY0MTUuLmM0OTE0M2EgMTAwNzU1Ci0tLSBhL3QvdDM0MTAtcmViYXNlLXByZXNlcnZlLWRyb3BwZWQtbWVyZ2VzLnNoCisrKyBiL3QvdDM0MTAtcmViYXNlLXByZXNlcnZlLWRyb3BwZWQtbWVyZ2VzLnNoCkBAIC0yMiw0NyArMjIsMTcgQEAKICMgd2hlcmUgQiwgRCBhbmQgRyB0b3VjaCB0aGUgc2FtZSBmaWxlLgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJwotCTogPiBmaWxlMSAmJgotCWdpdCBhZGQgZmlsZTEgJiYKLQl0ZXN0X3RpY2sgJiYKLQlnaXQgY29tbWl0IC1tIEEgJiYKLQlnaXQgdGFnIEEgJiYKLQllY2hvIDEgPiBmaWxlMSAmJgotCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gQiBmaWxlMSAmJgotCTogPiBmaWxlMiAmJgotCWdpdCBhZGQgZmlsZTIgJiYKLQl0ZXN0X3RpY2sgJiYKLQlnaXQgY29tbWl0IC1tIEMgJiYKLQllY2hvIDIgPiBmaWxlMSAmJgotCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gRCBmaWxlMSAmJgotCTogPiBmaWxlMyAmJgotCWdpdCBhZGQgZmlsZTMgJiYKLQl0ZXN0X3RpY2sgJiYKLQlnaXQgY29tbWl0IC1tIEUgJiYKLQlnaXQgdGFnIEUgJiYKLQlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMSBBICYmCi0JOiA+IGZpbGU0ICYmCi0JZ2l0IGFkZCBmaWxlNCAmJgotCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gRiAmJgotCWdpdCB0YWcgRiAmJgotCWVjaG8gMyA+IGZpbGUxICYmCi0JdGVzdF90aWNrICYmCi0JZ2l0IGNvbW1pdCAtbSBHIGZpbGUxICYmCi0JZ2l0IHRhZyBHICYmCi0JOiA+IGZpbGU1ICYmCi0JZ2l0IGFkZCBmaWxlNSAmJgotCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gSCAmJgotCWdpdCB0YWcgSCAmJgotCWdpdCBjaGVja291dCAtYiBicmFuY2gyIEYgJiYKLQk6ID4gZmlsZTYgJiYKLQlnaXQgYWRkIGZpbGU2ICYmCi0JdGVzdF90aWNrICYmCi0JZ2l0IGNvbW1pdCAtbSBJICYmCi0JZ2l0IHRhZyBJCisJdGVzdF9jb21taXQgQSBmaWxlMSAmJgorCXRlc3RfY29tbWl0IEIgZmlsZTEgMSAmJgorCXRlc3RfY29tbWl0IEMgZmlsZTIgJiYKKwl0ZXN0X2NvbW1pdCBEIGZpbGUxIDIgJiYKKwl0ZXN0X2NvbW1pdCBFIGZpbGUzICYmCisJZ2l0IGNoZWNrb3V0IEEgJiYKKwl0ZXN0X2NvbW1pdCBGIGZpbGU0ICYmCisJdGVzdF9jb21taXQgRyBmaWxlMSAzICYmCisJdGVzdF9jb21taXQgSCBmaWxlNSAmJgorCWdpdCBjaGVja291dCBGICYmCisJdGVzdF9jb21taXQgSSBmaWxlNgogJwogCiAjIEEgLSBCIC0gQyAtIEQgLSBFCkBAIC03Miw2OCArNDIsNDQgQEAKICMgICAgICAgICBJIC0tIEcyIC0tIEogLS0gSyAgICAgICAgICAgSSAtLSBLCiAjIEcyID0gc2FtZSBjaGFuZ2VzIGFzIEcKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXAgc2FtZS1yZXNvbHV0aW9uIG1lcmdlcyB3aXRoIC1wJyAnCi0JZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwlnaXQgY2hlY2tvdXQgSCAmJgogCSEgZ2l0IG1lcmdlIEUgJiYKLQllY2hvIDIzID4gZmlsZTEgJiYKLQlnaXQgYWRkIGZpbGUxICYmCi0JZ2l0IGNvbW1pdCAtbSBMICYmCi0JZ2l0IGNoZWNrb3V0IGJyYW5jaDIgJiYKLQllY2hvIDMgPiBmaWxlMSAmJgotCWdpdCBjb21taXQgLWEgLW0gRzIgJiYKKwl0ZXN0X2NvbW1pdCBMIGZpbGUxIDIzICYmCisJZ2l0IGNoZWNrb3V0IEkgJiYKKwl0ZXN0X2NvbW1pdCBHMiBmaWxlMSAzICYmCiAJISBnaXQgbWVyZ2UgRSAmJgotCWVjaG8gMjMgPiBmaWxlMSAmJgotCWdpdCBhZGQgZmlsZTEgJiYKLQlnaXQgY29tbWl0IC1tIEogJiYKLQllY2hvIGZpbGU3ID4gZmlsZTcgJiYKLQlnaXQgYWRkIGZpbGU3ICYmCi0JZ2l0IGNvbW1pdCAtbSBLICYmCi0JR0lUX0VESVRPUj06IGdpdCByZWJhc2UgLWkgLXAgYnJhbmNoMSAmJgotCXRlc3QgJChnaXQgcmV2LXBhcnNlIGJyYW5jaDJeXikgPSAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMSkgJiYKKwl0ZXN0X2NvbW1pdCBKIGZpbGUxIDIzICYmCisJdGVzdF9jb21taXQgSyBmaWxlNyBmaWxlNyAmJgorCWdpdCByZWJhc2UgLWkgLXAgTCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReXikgPSAkKGdpdCByZXYtcGFyc2UgTCkgJiYKIAl0ZXN0ICIyMyIgPSAiJChjYXQgZmlsZTEpIiAmJgotCXRlc3QgIiIgPSAiJChjYXQgZmlsZTYpIiAmJgotCXRlc3QgImZpbGU3IiA9ICIkKGNhdCBmaWxlNykiICYmCi0KLQlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgotCWdpdCByZXNldCAtLWhhcmQgSCAmJgotCWdpdCBjaGVja291dCBicmFuY2gyICYmCi0JZ2l0IHJlc2V0IC0taGFyZCBJCisJdGVzdCAiSSIgPSAiJChjYXQgZmlsZTYpIiAmJgorCXRlc3QgImZpbGU3IiA9ICIkKGNhdCBmaWxlNykiCiAnCiAKICMgQSAtIEIgLSBDIC0gRCAtIEUKICMgICBcICAgICAgICAgICAgIFwgXAotIyAgICAgRiAtIEcgLSBIIC0tIEwgXCAgICAgICAgLS0+ICAgTAotIyAgICAgICBcICAgICAgICAgICAgfCAgICAgICAgICAgICAgIFwKLSMgICAgICAgICBJIC0tIEcyIC0tIEogLS0gSyAgICAgICAgICAgSSAtLSBHMiAtLSBLCisjICAgICBGIC0gRyAtIEggLS0gTDIgXCAgICAgICAgLS0+ICAgTDIKKyMgICAgICAgXCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFwKKyMgICAgICAgICBJIC0tIEczIC0tLSBKMiAtLSBLMiAgICAgICAgICAgSSAtLSBHMyAtLSBLMgogIyBHMiA9IGRpZmZlcmVudCBjaGFuZ2VzIGFzIEcKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tlZXAgZGlmZmVyZW50LXJlc29sdXRpb24gbWVyZ2VzIHdpdGggLXAnICcKLQlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCWdpdCBjaGVja291dCBIICYmCiAJISBnaXQgbWVyZ2UgRSAmJgotCWVjaG8gMjMgPiBmaWxlMSAmJgotCWdpdCBhZGQgZmlsZTEgJiYKLQlnaXQgY29tbWl0IC1tIEwgJiYKLQlnaXQgY2hlY2tvdXQgYnJhbmNoMiAmJgotCWVjaG8gNCA+IGZpbGUxICYmCi0JZ2l0IGNvbW1pdCAtYSAtbSBHMiAmJgorCXRlc3RfY29tbWl0IEwyIGZpbGUxIDIzICYmCisJZ2l0IGNoZWNrb3V0IEkgJiYKKwl0ZXN0X2NvbW1pdCBHMyBmaWxlMSA0ICYmCiAJISBnaXQgbWVyZ2UgRSAmJgotCWVjaG8gMjQgPiBmaWxlMSAmJgotCWdpdCBhZGQgZmlsZTEgJiYKLQlnaXQgY29tbWl0IC1tIEogJiYKLQllY2hvIGZpbGU3ID4gZmlsZTcgJiYKLQlnaXQgYWRkIGZpbGU3ICYmCi0JZ2l0IGNvbW1pdCAtbSBLICYmCi0JISBHSVRfRURJVE9SPTogZ2l0IHJlYmFzZSAtaSAtcCBicmFuY2gxICYmCisJdGVzdF9jb21taXQgSjIgZmlsZTEgMjQgJiYKKwl0ZXN0X2NvbW1pdCBLMiBmaWxlNyBmaWxlNyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLXAgTDIgJiYKIAllY2hvIDIzNCA+IGZpbGUxICYmCiAJZ2l0IGFkZCBmaWxlMSAmJgotCUdJVF9FRElUT1I9OiBnaXQgcmViYXNlIC0tY29udGludWUgJiYKLQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBicmFuY2gyXl5eKSA9ICQoZ2l0IHJldi1wYXJzZSBicmFuY2gxKSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReXl4pID0gJChnaXQgcmV2LXBhcnNlIEwyKSAmJgogCXRlc3QgIjIzNCIgPSAiJChjYXQgZmlsZTEpIiAmJgotCXRlc3QgIiIgPSAiJChjYXQgZmlsZTYpIiAmJgotCXRlc3QgImZpbGU3IiA9ICIkKGNhdCBmaWxlNykiICYmCi0KLQlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgotCWdpdCByZXNldCAtLWhhcmQgSCAmJgotCWdpdCBjaGVja291dCBicmFuY2gyICYmCi0JZ2l0IHJlc2V0IC0taGFyZCBJCisJdGVzdCAiSSIgPSAiJChjYXQgZmlsZTYpIiAmJgorCXRlc3QgImZpbGU3IiA9ICIkKGNhdCBmaWxlNykiCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxMS1yZWJhc2UtcHJlc2VydmUtYXJvdW5kLW1lcmdlcy5zaCBiL3QvdDM0MTEtcmViYXNlLXByZXNlcnZlLWFyb3VuZC1tZXJnZXMuc2gKaW5kZXggYWFjZmFhZS4uNjUzMzUwNSAxMDA3NTUKLS0tIGEvdC90MzQxMS1yZWJhc2UtcHJlc2VydmUtYXJvdW5kLW1lcmdlcy5zaAorKysgYi90L3QzNDExLXJlYmFzZS1wcmVzZXJ2ZS1hcm91bmQtbWVyZ2VzLnNoCkBAIC01LDQ0ICs1LDE0IEBACiAKIHRlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgcHJlc2VydmUgbWVyZ2VzCiAKLVRoaXMgdGVzdCBydW5zIGdpdCByZWJhc2Ugd2l0aCBhbmQgdHJpZXMgdG8gc3F1YXNoIGEgY29tbWl0IGZyb20gYWZ0ZXIgYSBtZXJnZQotdG8gYmVmb3JlIHRoZSBtZXJnZS4KK1RoaXMgdGVzdCBydW5zIGdpdCByZWJhc2Ugd2l0aCAtcCBhbmQgdHJpZXMgdG8gc3F1YXNoIGEgY29tbWl0IGZyb20gYWZ0ZXIKK2EgbWVyZ2UgdG8gYmVmb3JlIHRoZSBtZXJnZS4KICcKIC4gLi90ZXN0LWxpYi5zaAogCi0jIENvcHkvcGFzdGUgZnJvbSB0MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKLWVjaG8gIiMhJFNIRUxMX1BBVEgiID5mYWtlLWVkaXRvci5zaAotY2F0ID4+IGZha2UtZWRpdG9yLnNoIDw8XEVPRgotY2FzZSAiJDEiIGluCi0qL0NPTU1JVF9FRElUTVNHKQotCXRlc3QgLXogIiRGQUtFX0NPTU1JVF9NRVNTQUdFIiB8fCBlY2hvICIkRkFLRV9DT01NSVRfTUVTU0FHRSIgPiAiJDEiCi0JdGVzdCAteiAiJEZBS0VfQ09NTUlUX0FNRU5EIiB8fCBlY2hvICIkRkFLRV9DT01NSVRfQU1FTkQiID4+ICIkMSIKLQlleGl0Ci0JOzsKLWVzYWMKLXRlc3QgLXogIiRFWFBFQ1RfQ09VTlQiIHx8Ci0JdGVzdCAiJEVYUEVDVF9DT1VOVCIgPSAkKHNlZCAtZSAnL14jL2QnIC1lICcvXiQvZCcgPCAiJDEiIHwgd2MgLWwpIHx8Ci0JZXhpdAotdGVzdCAteiAiJEZBS0VfTElORVMiICYmIGV4aXQKLWdyZXAgLXYgJ14jJyA8ICIkMSIgPiAiJDEiLnRtcAotcm0gLWYgIiQxIgotY2F0ICIkMSIudG1wCi1hY3Rpb249cGljawotZm9yIGxpbmUgaW4gJEZBS0VfTElORVM7IGRvCi0JY2FzZSAkbGluZSBpbgotCXNxdWFzaHxlZGl0KQotCQlhY3Rpb249IiRsaW5lIjs7Ci0JKikKLQkJZWNobyBzZWQgLW4gIiR7bGluZX1zL15waWNrLyRhY3Rpb24vcCIKLQkJc2VkIC1uICIke2xpbmV9cCIgPCAiJDEiLnRtcAotCQlzZWQgLW4gIiR7bGluZX1zL15waWNrLyRhY3Rpb24vcCIgPCAiJDEiLnRtcCA+PiAiJDEiCi0JCWFjdGlvbj1waWNrOzsKLQllc2FjCi1kb25lCi1FT0YKKy4gLi4vbGliLXJlYmFzZS5zaAogCi10ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9mYWtlLWVkaXRvci5zaCIKLWNobW9kIGEreCBmYWtlLWVkaXRvci5zaAorc2V0X2Zha2VfZWRpdG9yCiAKICMgc2V0IHVwIHR3byBicmFuY2hlcyBsaWtlIHRoaXM6CiAjCkBAIC01MSwyNyArMjEsMTMgQEAKICMgICAgICAgIC0tIEMxIC0tCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCi0JdG91Y2ggYSAmJgotCXRvdWNoIGIgJiYKLQlnaXQgYWRkIGEgJiYKLQlnaXQgY29tbWl0IC1tIEExICYmCi0JZ2l0IHRhZyBBMQotCWdpdCBhZGQgYiAmJgotCWdpdCBjb21taXQgLW0gQjEgJiYKLQlnaXQgdGFnIEIxICYmCi0JZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCAmJgotCXRvdWNoIGMgJiYKLQlnaXQgYWRkIGMgJiYKLQlnaXQgY29tbWl0IC1tIEMxICYmCi0JZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgotCXRvdWNoIGQgJiYKLQlnaXQgYWRkIGQgJiYKLQlnaXQgY29tbWl0IC1tIEQxICYmCi0JZ2l0IG1lcmdlIGJyYW5jaCAmJgotCXRvdWNoIGYgJiYKLQlnaXQgYWRkIGYgJiYKLQlnaXQgY29tbWl0IC1tIEYxICYmCi0JZ2l0IHRhZyBGMQorCXRlc3RfY29tbWl0IEExICYmCisJdGVzdF9jb21taXQgQjEgJiYKKwl0ZXN0X2NvbW1pdCBDMSAmJgorCWdpdCByZXNldCAtLWhhcmQgQjEgJiYKKwl0ZXN0X2NvbW1pdCBEMSAmJgorCXRlc3RfbWVyZ2UgRTEgQzEgJiYKKwl0ZXN0X2NvbW1pdCBGMQogJwogCiAjIFNob3VsZCByZXN1bHQgaW46CkBAIC04Miw3ICszOCw3IEBACiAjCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcXVhc2ggRjEgaW50byBEMScgJwogCUZBS0VfTElORVM9IjEgc3F1YXNoIDMgMiIgZ2l0IHJlYmFzZSAtaSAtcCBCMSAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiA9ICIkKGdpdCByZXYtcGFyc2UgYnJhbmNoKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgPSAiJChnaXQgcmV2LXBhcnNlIEMxKSIgJiYKIAl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRH4yKSIgPSAiJChnaXQgcmV2LXBhcnNlIEIxKSIgJiYKIAlnaXQgdGFnIEUyCiAnCkBAIC0xMDAsMzIgKzU2LDE1IEBACiAjIEFuZCByZWJhc2UgRzEuLk0xIG9udG8gRTIKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHR3byBsZXZlbHMgb2YgbWVyZ2UnICcKLQlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBBMSAmJgotCXRvdWNoIGcgJiYKLQlnaXQgYWRkIGcgJiYKLQlnaXQgY29tbWl0IC1tIEcxICYmCi0JZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDMgJiYKLQl0b3VjaCBoCi0JZ2l0IGFkZCBoICYmCi0JZ2l0IGNvbW1pdCAtbSBIMSAmJgotCWdpdCBjaGVja291dCAtYiBicmFuY2g0ICYmCi0JdG91Y2ggaSAmJgotCWdpdCBhZGQgaSAmJgotCWdpdCBjb21taXQgLW0gSTEgJiYKLQlnaXQgdGFnIEkxICYmCi0JZ2l0IGNoZWNrb3V0IGJyYW5jaDMgJiYKLQl0b3VjaCBqICYmCi0JZ2l0IGFkZCBqICYmCi0JZ2l0IGNvbW1pdCAtbSBKMSAmJgotCWdpdCBtZXJnZSBJMSAtLW5vLWNvbW1pdCAmJgotCWdpdCBjb21taXQgLW0gSzEgJiYKLQlnaXQgdGFnIEsxICYmCi0JZ2l0IGNoZWNrb3V0IGJyYW5jaDIgJiYKLQl0b3VjaCBsICYmCi0JZ2l0IGFkZCBsICYmCi0JZ2l0IGNvbW1pdCAtbSBMMSAmJgotCWdpdCBtZXJnZSBLMSAtLW5vLWNvbW1pdCAmJgotCWdpdCBjb21taXQgLW0gTTEgJiYKKwl0ZXN0X2NvbW1pdCBHMSAmJgorCXRlc3RfY29tbWl0IEgxICYmCisJdGVzdF9jb21taXQgSTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMyBIMSAmJgorCXRlc3RfY29tbWl0IEoxICYmCisJdGVzdF9tZXJnZSBLMSBJMSAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gyIEcxICYmCisJdGVzdF9jb21taXQgTDEgJiYKKwl0ZXN0X21lcmdlIE0xIEsxICYmCiAJR0lUX0VESVRPUj06IGdpdCByZWJhc2UgLWkgLXAgRTIgJiYKIAl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRH4zKSIgPSAiJChnaXQgcmV2LXBhcnNlIEUyKSIgJiYKIAl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRH4yKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMl4yfjIpIiAmJgpkaWZmIC0tZ2l0IGEvdC90MzQxMi1yZWJhc2Utcm9vdC5zaCBiL3QvdDM0MTItcmViYXNlLXJvb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTg2OTA2MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTItcmViYXNlLXJvb3Quc2gKQEAgLTAsMCArMSwyODAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIC0tcm9vdAorCitUZXN0cyBpZiBnaXQgcmViYXNlIC0tcm9vdCAtLW9udG8gPG5ld3BhcmVudD4gY2FuIHJlYmFzZSB0aGUgcm9vdCBjb21taXQuCisnCisuIC4vdGVzdC1saWIuc2gKKworbG9nX3dpdGhfbmFtZXMgKCkgeworCWdpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgLS1wYXJlbnRzIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiBIRUFEIHwKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9cmVmcy9oZWFkcy8kMQorfQorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgcmVwb3NpdG9yeScgJworCXRlc3RfY29tbWl0IDEgQSAmJgorCXRlc3RfY29tbWl0IDIgQSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL290aGVyICYmCisJcm0gLmdpdC9pbmRleCAmJgorCXRlc3RfY29tbWl0IDMgQiAmJgorCXRlc3RfY29tbWl0IDFiIEEgMSAmJgorCXRlc3RfY29tbWl0IDQgQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1yb290IGV4cGVjdHMgLS1vbnRvJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXJvb3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcHJlLXJlYmFzZSBob29rJyAnCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCWNhdCA+LmdpdC9ob29rcy9wcmUtcmViYXNlIDw8RU9GICYmCisjISRTSEVMTF9QQVRICitlY2hvICJcJDEsXCQyIiA+LmdpdC9QUkUtUkVCQVNFLUlOUFVUCitFT0YKKwljaG1vZCAreCAuZ2l0L2hvb2tzL3ByZS1yZWJhc2UKKycKK2NhdCA+IGV4cGVjdCA8PEVPRgorNAorMworMgorMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXJvb3QgLS1vbnRvIDxuZXdiYXNlPicgJworCWdpdCBjaGVja291dCAtYiB3b3JrICYmCisJZ2l0IHJlYmFzZSAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDoiJXMiID4gcmViYXNlZCAmJgorCXRlc3RfY21wIGV4cGVjdCByZWJhc2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgZ290IGNvcnJlY3QgaW5wdXQgKDEpJyAnCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gei0tcm9vdCwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tcm9vdCAtLW9udG8gPG5ld2Jhc2U+IDxicmFuY2g+JyAnCisJZ2l0IGJyYW5jaCB3b3JrMiBvdGhlciAmJgorCWdpdCByZWJhc2UgLS1yb290IC0tb250byBtYXN0ZXIgd29yazIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVzIiA+IHJlYmFzZWQyICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlYmFzZWQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgZ290IGNvcnJlY3QgaW5wdXQgKDIpJyAnCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gei0tcm9vdCx3b3JrMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IC0tb250byA8bmV3YmFzZT4nICcKKwlnaXQgY2hlY2tvdXQgLWIgd29yazMgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC1pIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlcyIgPiByZWJhc2VkMyAmJgorCXRlc3RfY21wIGV4cGVjdCByZWJhc2VkMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGdvdCBjb3JyZWN0IGlucHV0ICgzKScgJworCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHotLXJvb3QsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgLS1vbnRvIDxuZXdiYXNlPiA8YnJhbmNoPicgJworCWdpdCBicmFuY2ggd29yazQgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC1pIC0tcm9vdCAtLW9udG8gbWFzdGVyIHdvcms0ICYmCisJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlcyIgPiByZWJhc2VkNCAmJgorCXRlc3RfY21wIGV4cGVjdCByZWJhc2VkNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGdvdCBjb3JyZWN0IGlucHV0ICg0KScgJworCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHotLXJvb3Qsd29yazQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC1wIHdpdGggbGluZWFyIGhpc3RvcnknICcKKwlnaXQgY2hlY2tvdXQgLWIgd29yazUgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC1pIC1wIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlcyIgPiByZWJhc2VkNSAmJgorCXRlc3RfY21wIGV4cGVjdCByZWJhc2VkNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGdvdCBjb3JyZWN0IGlucHV0ICg1KScgJworCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHotLXJvb3QsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBtZXJnZSBoaXN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IG90aGVyXiAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJdGVzdF9jb21taXQgNSBDICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJZ2l0IG1lcmdlIHNpZGUKKycKKworY2F0ID4gZXhwZWN0LXNpZGUgPDwnRU9GJworY29tbWl0IHdvcms2IHdvcms2fjEgd29yazZeMgorTWVyZ2UgYnJhbmNoICdzaWRlJyBpbnRvIG90aGVyCitjb21taXQgd29yazZeMiB3b3JrNn4yCis1Citjb21taXQgd29yazZ+MSB3b3JrNn4yCis0Citjb21taXQgd29yazZ+MiB3b3JrNn4zCiszCitjb21taXQgd29yazZ+MyB3b3JrNn40CisyCitjb21taXQgd29yazZ+NAorMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtcCB3aXRoIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHdvcms2IG90aGVyICYmCisJZ2l0IHJlYmFzZSAtaSAtcCAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCWxvZ193aXRoX25hbWVzIHdvcms2ID4gcmViYXNlZDYgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtc2lkZSByZWJhc2VkNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgc2Vjb25kIHJvb3QgYW5kIG1lcmdlJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvdGhpcmQgJiYKKwlybSAuZ2l0L2luZGV4ICYmCisJcm0gQSBCIEMgJiYKKwl0ZXN0X2NvbW1pdCA2IEQgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwlnaXQgbWVyZ2UgdGhpcmQKKycKKworY2F0ID4gZXhwZWN0LXRoaXJkIDw8J0VPRicKK2NvbW1pdCB3b3JrNyB3b3JrN34xIHdvcms3XjIKK01lcmdlIGJyYW5jaCAndGhpcmQnIGludG8gb3RoZXIKK2NvbW1pdCB3b3JrN14yIHdvcms3fjQKKzYKK2NvbW1pdCB3b3JrN34xIHdvcms3fjIgd29yazd+MV4yCitNZXJnZSBicmFuY2ggJ3NpZGUnIGludG8gb3RoZXIKK2NvbW1pdCB3b3JrN34xXjIgd29yazd+MworNQorY29tbWl0IHdvcms3fjIgd29yazd+MworNAorY29tbWl0IHdvcms3fjMgd29yazd+NAorMworY29tbWl0IHdvcms3fjQgd29yazd+NQorMgorY29tbWl0IHdvcms3fjUKKzEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLXAgd2l0aCB0d28gcm9vdHMnICcKKwlnaXQgY2hlY2tvdXQgLWIgd29yazcgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC1pIC1wIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJbG9nX3dpdGhfbmFtZXMgd29yazcgPiByZWJhc2VkNyAmJgorCXRlc3RfY21wIGV4cGVjdC10aGlyZCByZWJhc2VkNworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwcmUtcmViYXNlIGhvb2sgdGhhdCBmYWlscycgJworCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwljYXQgPi5naXQvaG9va3MvcHJlLXJlYmFzZSA8PEVPRiAmJgorIyEkU0hFTExfUEFUSAorZmFsc2UKK0VPRgorCWNobW9kICt4IC5naXQvaG9va3MvcHJlLXJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgc3RvcHMgcmViYXNlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHN0b3BzMSBvdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHpyZWZzL2hlYWRzL3N0b3BzMQorCXRlc3QgMCA9ICQoZ2l0IHJldi1saXN0IG90aGVyLi4uc3RvcHMxIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgaG9vayBzdG9wcyByZWJhc2UgLWknICcKKwlnaXQgY2hlY2tvdXQgLWIgc3RvcHMyIG90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0genJlZnMvaGVhZHMvc3RvcHMyCisJdGVzdCAwID0gJChnaXQgcmV2LWxpc3Qgb3RoZXIuLi5zdG9wczIgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHByZS1yZWJhc2UgaG9vaycgJworCXJtIC1mIC5naXQvaG9va3MvcHJlLXJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYSBjb25mbGljdCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIGNvbmZsaWN0ID4gQiAmJgorCWdpdCBhZGQgQiAmJgorCWdpdCBjb21taXQgLW0gY29uZmxpY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tcm9vdCB3aXRoIGNvbmZsaWN0IChmaXJzdCBwYXJ0KScgJworCWdpdCBjaGVja291dCAtYiBjb25mbGljdDEgb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJZ2l0IGxzLWZpbGVzIC11IHwgZ3JlcCAiQiQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpeCB0aGUgY29uZmxpY3QnICcKKwllY2hvIDMgPiBCICYmCisJZ2l0IGFkZCBCCisnCisKK2NhdCA+IGV4cGVjdC1jb25mbGljdCA8PEVPRgorNgorNQorNAorMworY29uZmxpY3QKKzIKKzEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1yb290IHdpdGggY29uZmxpY3QgKHNlY29uZCBwYXJ0KScgJworCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDoiJXMiID4gY29uZmxpY3QxICYmCisJdGVzdF9jbXAgZXhwZWN0LWNvbmZsaWN0IGNvbmZsaWN0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHdpdGggY29uZmxpY3QgKGZpcnN0IHBhcnQpJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0MiBvdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXUgfCBncmVwICJCJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZml4IHRoZSBjb25mbGljdCcgJworCWVjaG8gMyA+IEIgJiYKKwlnaXQgYWRkIEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCB3aXRoIGNvbmZsaWN0IChzZWNvbmQgcGFydCknICcKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVzIiA+IGNvbmZsaWN0MiAmJgorCXRlc3RfY21wIGV4cGVjdC1jb25mbGljdCBjb25mbGljdDIKKycKKworY2F0ID5leHBlY3QtY29uZmxpY3QtcCA8PFxFT0YKK2NvbW1pdCBjb25mbGljdDMgY29uZmxpY3QzfjEgY29uZmxpY3QzXjIKK01lcmdlIGJyYW5jaCAndGhpcmQnIGludG8gb3RoZXIKK2NvbW1pdCBjb25mbGljdDNeMiBjb25mbGljdDN+NAorNgorY29tbWl0IGNvbmZsaWN0M34xIGNvbmZsaWN0M34yIGNvbmZsaWN0M34xXjIKK01lcmdlIGJyYW5jaCAnc2lkZScgaW50byBvdGhlcgorY29tbWl0IGNvbmZsaWN0M34xXjIgY29uZmxpY3QzfjMKKzUKK2NvbW1pdCBjb25mbGljdDN+MiBjb25mbGljdDN+MworNAorY29tbWl0IGNvbmZsaWN0M34zIGNvbmZsaWN0M340CiszCitjb21taXQgY29uZmxpY3QzfjQgY29uZmxpY3QzfjUKK2NvbmZsaWN0Citjb21taXQgY29uZmxpY3QzfjUgY29uZmxpY3QzfjYKKzIKK2NvbW1pdCBjb25mbGljdDN+NgorMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtcCAtLXJvb3Qgd2l0aCBjb25mbGljdCAoZmlyc3QgcGFydCknICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QzIG90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtcCAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCWdpdCBscy1maWxlcyAtdSB8IGdyZXAgIkIkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXggdGhlIGNvbmZsaWN0JyAnCisJZWNobyAzID4gQiAmJgorCWdpdCBhZGQgQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLXAgLS1yb290IHdpdGggY29uZmxpY3QgKHNlY29uZCBwYXJ0KScgJworCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWxvZ193aXRoX25hbWVzIGNvbmZsaWN0MyA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0LWNvbmZsaWN0LXAgb3V0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwOS1yZWJhc2UtaG9vay5zaCBiL3QvdDM0MTMtcmViYXNlLWhvb2suc2gKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gdC90MzQwOS1yZWJhc2UtaG9vay5zaApyZW5hbWUgdG8gdC90MzQxMy1yZWJhc2UtaG9vay5zaAppbmRleCAxZjFiODUwLi4wOThiNzU1IDEwMDc1NQotLS0gYS90L3QzNDA5LXJlYmFzZS1ob29rLnNoCisrKyBiL3QvdDM0MTMtcmViYXNlLWhvb2suc2gKQEAgLTExOCw3ICsxMTgsMTEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgaG9vayBzdG9wcyByZWJhc2UgKDIpJyAnCiAJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKIAlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKLQlFRElUT1I9dHJ1ZSB0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIG1hc3RlciAmJgorCSgKKwkJRURJVE9SPToKKwkJZXhwb3J0IEVESVRPUgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIG1hc3RlcgorCSkgJiYKIAl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHpyZWZzL2hlYWRzL3Rlc3QgJiYKIAl0ZXN0IDAgPSAkKGdpdCByZXYtbGlzdCBIRUFELi4uc2lkZSB8IHdjIC1sKQogJwpkaWZmIC0tZ2l0IGEvdC90MzQxNC1yZWJhc2UtcHJlc2VydmUtb250by5zaCBiL3QvdDM0MTQtcmViYXNlLXByZXNlcnZlLW9udG8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODAwMTllZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTQtcmViYXNlLXByZXNlcnZlLW9udG8uc2gKQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBHcmVnIFByaWNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLXAgc2hvdWxkIHJlc3BlY3QgLS1vbnRvCisKK0luIGEgcmViYXNlIHdpdGggLS1vbnRvLCB3ZSBzaG91bGQgcmV3cml0ZSBhbGwgdGhlIGNvbW1pdHMgdGhhdAorYXJlbiciJyIndCBvbiB0b3Agb2YgJE9OVE8sIGV2ZW4gaWYgdGhleSBhcmUgb24gdG9wIG9mICRVUFNUUkVBTS4KKycKKy4gLi90ZXN0LWxpYi5zaAorCisuIC4uL2xpYi1yZWJhc2Uuc2gKKworIyBTZXQgdXAgYnJhbmNoZXMgbGlrZSB0aGlzOgorIyBBMS0tLUIxLS0tRTEtLS1GMS0tLUcxCisjICBcICAgIFwgICAgICAgICAgICAgLworIyAgIFwgICAgXC0tQzEtLS1EMS0tLworIyAgICBIMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IEExICYmCisJdGVzdF9jb21taXQgQjEgJiYKKwl0ZXN0X2NvbW1pdCBDMSAmJgorCXRlc3RfY29tbWl0IEQxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBCMSAmJgorCXRlc3RfY29tbWl0IEUxICYmCisJdGVzdF9jb21taXQgRjEgJiYKKwl0ZXN0X21lcmdlIEcxIEQxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBBMSAmJgorCXRlc3RfY29tbWl0IEgxCisnCisKKyMgTm93IHJlYmFzZSBtZXJnZSBHMSBmcm9tIGJvdGggYnJhbmNoZXMnIGJhc2UgQjEsIGJvdGggc2hvdWxkIG1vdmU6CisjIEExLS0tQjEtLS1FMS0tLUYxLS0tRzEKKyMgIFwgICAgXCAgICAgICAgICAgICAvCisjICAgXCAgICBcLS1DMS0tLUQxLS0vCisjICAgIFwKKyMgICAgIEgxLS0tRTItLS1GMi0tLUcyCisjICAgICAgXCAgICAgICAgICAgICAvCisjICAgICAgIFwtLUMyLS0tRDItLS8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGZyb20gQjEgb250byBIMScgJworCWdpdCBjaGVja291dCBHMSAmJgorCWdpdCByZWJhc2UgLXAgLS1vbnRvIEgxIEIxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMV4xXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSDEpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjJeMV4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEgxKSIKKycKKworIyBPbiB0aGUgb3RoZXIgaGFuZCBpZiByZWJhc2UgZnJvbSBFMSB3aGljaCBpcyB3aXRoaW4gb25lIGJyYW5jaCwKKyMgdGhlbiB0aGUgb3RoZXIgYnJhbmNoIHN0YXlzOgorIyBBMS0tLUIxLS0tRTEtLS1GMS0tLUcxCisjICBcICAgIFwgICAgICAgICAgICAgLworIyAgIFwgICAgXC0tQzEtLS1EMS0tLworIyAgICBcICAgICAgICAgICAgIFwKKyMgICAgIEgxLS0tLS1GMy0tLS0tRzMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGZyb20gRTEgb250byBIMScgJworCWdpdCBjaGVja291dCBHMSAmJgorCWdpdCByZWJhc2UgLXAgLS1vbnRvIEgxIEUxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMV4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEgxKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgPSAiJChnaXQgcmV2LXBhcnNlIEQxKSIKKycKKworIyBBbmQgdGhlIHNhbWUgaWYgd2UgcmViYXNlIGZyb20gYSBjb21taXQgaW4gdGhlIHNlY29uZC1wYXJlbnQgYnJhbmNoLgorIyBBMS0tLUIxLS0tRTEtLS1GMS0tLS1HMQorIyAgXCAgICBcICAgICAgICAgIFwgICAvCisjICAgXCAgICBcLS1DMS0tLUQxLVwtLworIyAgICBcICAgICAgICAgICAgICAgXAorIyAgICAgSDEtLS0tLS1EMy0tLS0tLUc0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBmcm9tIEMxIG9udG8gSDEnICcKKwlnaXQgY2hlY2tvdXQgRzEgJiYKKwlnaXQgcmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1wcmV0dHk9b25lbGluZSBDMS4uRzEgJiYKKwlnaXQgcmViYXNlIC1wIC0tb250byBIMSBDMSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjJeMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBGMSkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUwNS1jaGVycnktcGljay1lbXB0eS5zaCBiL3QvdDM1MDUtY2hlcnJ5LXBpY2stZW1wdHkuc2gKaW5kZXggOWFhZWFiZC4uZTUxZTUwNSAxMDA3NTUKLS0tIGEvdC90MzUwNS1jaGVycnktcGljay1lbXB0eS5zaAorKysgYi90L3QzNTA1LWNoZXJyeS1waWNrLWVtcHR5LnNoCkBAIC0xNywxMSArMTcsMTEgQEAKIAogJwogCi10ZXN0X2V4cGVjdF9jb2RlIDEgJ2NoZXJyeS1waWNrIGFuIGVtcHR5IGNvbW1pdCcgJwotCi0JZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgotCWdpdCBjaGVycnktcGljayBlbXB0eS1icmFuY2gKLQordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYW4gZW1wdHkgY29tbWl0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJiB7CisJCWdpdCBjaGVycnktcGljayBlbXB0eS1icmFuY2gKKwkJdGVzdCAiJD8iID0gMQorCX0KICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggbG9ja2ZpbGUgd2FzIHJlbW92ZWQnICcKZGlmZiAtLWdpdCBhL3QvdDM2MDAtcm0uc2ggYi90L3QzNjAwLXJtLnNoCmluZGV4IDk1NTQyZTkuLjc2YjFiYjQgMTAwNzU1Ci0tLSBhL3QvdDM2MDAtcm0uc2gKKysrIGIvdC90MzYwMC1ybS5zaApAQCAtMTIsMzAgKzEyLDM3IEBACiAgICAgJ0luaXRpYWxpemUgdGVzdCBkaXJlY3RvcnknIFwKICAgICAidG91Y2ggLS0gZm9vIGJhciBiYXogJ3NwYWNlIGVtYmVkZGVkJyAtcSAmJgogICAgICBnaXQgYWRkIC0tIGZvbyBiYXIgYmF6ICdzcGFjZSBlbWJlZGRlZCcgLXEgJiYKLSAgICAgZ2l0IGNvbW1pdCAtbSAnYWRkIG5vcm1hbCBmaWxlcycgJiYKLSAgICAgdGVzdF90YWJzPXkgJiYKLSAgICAgaWYgdG91Y2ggLS0gJ3RhYgllbWJlZGRlZCcgJ25ld2xpbmUKLWVtYmVkZGVkJwotICAgICB0aGVuCisgICAgIGdpdCBjb21taXQgLW0gJ2FkZCBub3JtYWwgZmlsZXMnIgorCitpZiB0b3VjaCAtLSAndGFiCWVtYmVkZGVkJyAnbmV3bGluZQorZW1iZWRkZWQnIDI+L2Rldi9udWxsCit0aGVuCisJdGVzdF9zZXRfcHJlcmVxIEZVTk5ZTkFNRVMKK2Vsc2UKKwlzYXkgJ1lvdXIgZmlsZXN5c3RlbSBkb2VzIG5vdCBhbGxvdyB0YWJzIGluIGZpbGVuYW1lcy4nCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5ZTkFNRVMgJ2FkZCBmaWxlcyB3aXRoIGZ1bm55IG5hbWVzJyAiCiAgICAgIGdpdCBhZGQgLS0gJ3RhYgllbWJlZGRlZCcgJ25ld2xpbmUKIGVtYmVkZGVkJyAmJgogICAgICBnaXQgY29tbWl0IC1tICdhZGQgZmlsZXMgd2l0aCB0YWJzIGFuZCBuZXdsaW5lcycKLSAgICAgZWxzZQotICAgICAgICAgc2F5ICdZb3VyIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWxsb3cgdGFicyBpbiBmaWxlbmFtZXMuJwotICAgICAgICAgdGVzdF90YWJzPW4KLSAgICAgZmkiCisiCiAKKyMgRGV0ZXJtaW5lIHJtIGJlaGF2aW9yCiAjIExhdGVyIHdlIHdpbGwgdHJ5IHJlbW92aW5nIGFuIHVucmVtb3ZhYmxlIHBhdGggdG8gbWFrZSBzdXJlCiAjIGdpdCBybSBiYXJmcywgYnV0IGlmIHRoZSB0ZXN0IGlzIHJ1biBhcyByb290IHRoYXQgY2Fubm90IGJlCiAjIGFycmFuZ2VkLgotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ0RldGVybWluZSBybSBiZWhhdmlvcicgXAotICAgICc6ID50ZXN0LWZpbGUKLSAgICAgY2htb2QgYS13IC4KLSAgICAgcm0gLWYgdGVzdC1maWxlCi0gICAgIHRlc3QgLWYgdGVzdC1maWxlICYmIHRlc3RfZmFpbGVkX3JlbW92ZT15Ci0gICAgIGNobW9kIDc3NSAuCi0gICAgIHJtIC1mIHRlc3QtZmlsZScKKzogPnRlc3QtZmlsZQorY2htb2QgYS13IC4KK3JtIC1mIHRlc3QtZmlsZSAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZiB0ZXN0LWZpbGUKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgUk9fRElSCitlbHNlCisJc2F5ICdza2lwcGluZyByZW1vdmFsIGZhaWx1cmUgdGVzdCAocGVyaGFwcyBydW5uaW5nIGFzIHJvb3Q/KScKK2ZpCitjaG1vZCA3NzUgLgorcm0gLWYgdGVzdC1maWxlCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdQcmUtY2hlY2sgdGhhdCBmb28gZXhpc3RzIGFuZCBpcyBpbiBpbmRleCBiZWZvcmUgZ2l0IHJtIGZvbycgXApAQCAtMTAwLDIwICsxMDcsMTYgQEAKICAgICAnVGVzdCB0aGF0ICJnaXQgcm0gLS0gLXEiIHN1Y2NlZWRzIChyZW1vdmUgYSBmaWxlIHRoYXQgbG9va3MgbGlrZSBhbiBvcHRpb24pJyBcCiAgICAgJ2dpdCBybSAtLSAtcScKIAotdGVzdCAiJHRlc3RfdGFicyIgPSB5ICYmIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBGVU5OWU5BTUVTIFwKICAgICAiVGVzdCB0aGF0IFwiZ2l0IHJtIC1mXCIgc3VjY2VlZHMgd2l0aCBlbWJlZGRlZCBzcGFjZSwgdGFiLCBvciBuZXdsaW5lIGNoYXJhY3RlcnMuIiBcCiAgICAgImdpdCBybSAtZiAnc3BhY2UgZW1iZWRkZWQnICd0YWIJZW1iZWRkZWQnICduZXdsaW5lCiBlbWJlZGRlZCciCiAKLWlmIHRlc3QgIiR0ZXN0X2ZhaWxlZF9yZW1vdmUiID0geTsgdGhlbgotY2htb2QgYS13IC4KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdUZXN0IHRoYXQgImdpdCBybSAtZiIgZmFpbHMgaWYgaXRzIHJtIGZhaWxzJyBcCi0gICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBybSAtZiBiYXonCi1jaG1vZCA3NzUgLgotZWxzZQotICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXBwaW5nIHJlbW92YWwgZmFpbHVyZSAocGVyaGFwcyBydW5uaW5nIGFzIHJvb3Q/KScgOgotZmkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUk9fRElSICdUZXN0IHRoYXQgImdpdCBybSAtZiIgZmFpbHMgaWYgaXRzIHJtIGZhaWxzJyAnCisJY2htb2QgYS13IC4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gLWYgYmF6ICYmCisJY2htb2QgNzc1IC4KKycKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ1doZW4gdGhlIHJtIGluICJnaXQgcm0gLWYiIGZhaWxzLCBpdCBzaG91bGQgbm90IHJlbW92ZSB0aGUgZmlsZSBmcm9tIHRoZSBpbmRleCcgXApkaWZmIC0tZ2l0IGEvdC90MzcwMC1hZGQuc2ggYi90L3QzNzAwLWFkZC5zaAppbmRleCA5ZjY0NTRkLi44NWViMGZiIDEwMDc1NQotLS0gYS90L3QzNzAwLWFkZC5zaAorKysgYi90L3QzNzAwLWFkZC5zaApAQCAtMzAsNyArMzAsNyBAQAogCSAqKSBlY2hvIGZhaWw7IGdpdCBscy1maWxlcyAtLXN0YWdlIHhmb28xOyAoZXhpdCAxKTs7CiAJIGVzYWMnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQ6IGZpbGVtb2RlPTAgc2hvdWxkIG5vdCBnZXQgY29uZnVzZWQgYnkgc3ltbGluaycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZ2l0IGFkZDogZmlsZW1vZGU9MCBzaG91bGQgbm90IGdldCBjb25mdXNlZCBieSBzeW1saW5rJyAnCiAJcm0gLWYgeGZvbzEgJiYKIAlsbiAtcyBmb28geGZvbzEgJiYKIAlnaXQgYWRkIHhmb28xICYmCkBAIC01MSw3ICs1MSw3IEBACiAJICopIGVjaG8gZmFpbDsgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgeGZvbzI7IChleGl0IDEpOzsKIAkgZXNhYycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZDogZmlsZW1vZGU9MCBzaG91bGQgbm90IGdldCBjb25mdXNlZCBieSBzeW1saW5rJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdnaXQgYWRkOiBmaWxlbW9kZT0wIHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHN5bWxpbmsnICcKIAlybSAtZiB4Zm9vMiAmJgogCWxuIC1zIGZvbyB4Zm9vMiAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgeGZvbzIgJiYKQEAgLTYxLDcgKzYxLDcgQEAKIAllc2FjCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCiAJJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQ6IFRlc3QgdGhhdCBleGVjdXRhYmxlIGJpdCBpcyBub3QgdXNlZC4uLicgXAogCSdnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUgMCAmJgogCSBsbiAtcyB4Zm9vMiB4Zm9vMyAmJgpAQCAtMTc5LDcgKzE3OSw3IEBACiAJdGVzdCAteiAiYGdpdCBkaWZmLWluZGV4IEhFQUQgLS0gZm9vYCIKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCBzaG91bGQgZmFpbCBhdG9taWNhbGx5IHVwb24gYW4gdW5yZWFkYWJsZSBmaWxlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnZ2l0IGFkZCBzaG91bGQgZmFpbCBhdG9taWNhbGx5IHVwb24gYW4gdW5yZWFkYWJsZSBmaWxlJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWRhdGUgPmZvbzEgJiYKIAlkYXRlID5mb28yICYmCkBAIC0xOTAsNyArMTkwLDcgQEAKIAogcm0gLWYgZm9vMgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIC0taWdub3JlLWVycm9ycycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ2dpdCBhZGQgLS1pZ25vcmUtZXJyb3JzJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWRhdGUgPmZvbzEgJiYKIAlkYXRlID5mb28yICYmCkBAIC0yMDEsNyArMjAxLDcgQEAKIAogcm0gLWYgZm9vMgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIChhZGQuaWdub3JlLWVycm9ycyknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdnaXQgYWRkIChhZGQuaWdub3JlLWVycm9ycyknICcKIAlnaXQgY29uZmlnIGFkZC5pZ25vcmUtZXJyb3JzIDEgJiYKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZGF0ZSA+Zm9vMSAmJgpAQCAtMjEyLDcgKzIxMiw3IEBACiAnCiBybSAtZiBmb28yCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgKGFkZC5pZ25vcmUtZXJyb3JzID0gZmFsc2UpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnZ2l0IGFkZCAoYWRkLmlnbm9yZS1lcnJvcnMgPSBmYWxzZSknICcKIAlnaXQgY29uZmlnIGFkZC5pZ25vcmUtZXJyb3JzIDAgJiYKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZGF0ZSA+Zm9vMSAmJgpAQCAtMjIxLDggKzIyMSwyMSBAQAogCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS12ZXJib3NlIC4gJiYKIAkhICggZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEgKQogJworcm0gLWYgZm9vMgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkICdcJydmb1xbb3VcXWJhcidcJycgaWdub3JlcyBmb29iYXInICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICctLW5vLWlnbm9yZS1lcnJvcnMgb3ZlcnJpZGVzIGNvbmZpZycgJworICAgICAgIGdpdCBjb25maWcgYWRkLmlnbm9yZS1lcnJvcnMgMSAmJgorICAgICAgIGdpdCByZXNldCAtLWhhcmQgJiYKKyAgICAgICBkYXRlID5mb28xICYmCisgICAgICAgZGF0ZSA+Zm9vMiAmJgorICAgICAgIGNobW9kIDAgZm9vMiAmJgorICAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS12ZXJib3NlIC0tbm8taWdub3JlLWVycm9ycyAuICYmCisgICAgICAgISAoIGdpdCBscy1maWxlcyBmb28xIHwgZ3JlcCBmb28xICkgJiYKKyAgICAgICBnaXQgY29uZmlnIGFkZC5pZ25vcmUtZXJyb3JzIDAKKycKK3JtIC1mIGZvbzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBCU0xBU0hQU1BFQyAiZ2l0IGFkZCAnZm9cXFtvdVxcXWJhcicgaWdub3JlcyBmb29iYXIiICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJdG91Y2ggZm9cW291XF1iYXIgZm9vYmFyICYmCiAJZ2l0IGFkZCAnXCcnZm9cW291XF1iYXInXCcnICYmCkBAIC0yMzAsNCArMjQzLDE2IEBACiAJISAoIGdpdCBscy1maWxlcyBmb29iYXIgfCBncmVwIGZvb2JhciApCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgdG8gcmVzb2x2ZSBjb25mbGljdHMgb24gb3RoZXJ3aXNlIGlnbm9yZWQgcGF0aCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSA6MS8yL2EpICYmCisJKAorCQllY2hvICIxMDA2NDQgJEggMQl0cmFjay10aGlzIgorCQllY2hvICIxMDA2NDQgJEggMwl0cmFjay10aGlzIgorCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWVjaG8gdHJhY2stdGhpcyA+Pi5naXRpZ25vcmUgJiYKKwllY2hvIHJlc29sdmVkID50cmFjay10aGlzICYmCisJZ2l0IGFkZCB0cmFjay10aGlzCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMS1hZGQtaW50ZXJhY3RpdmUuc2ggYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaAppbmRleCBlOTU2NjNkLi5mZDJhNTVhIDEwMDc1NQotLS0gYS90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaAorKysgYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaApAQCAtMyw2ICszLDExIEBACiB0ZXN0X2Rlc2NyaXB0aW9uPSdhZGQgLWkgYmFzaWMgdGVzdHMnCiAuIC4vdGVzdC1saWIuc2gKIAoraWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkw7IHRoZW4KKwlzYXkgJ3NraXBwaW5nIGdpdCBhZGQgLWkgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIChpbml0aWFsKScgJwogCWVjaG8gY29udGVudCA+ZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgpAQCAtMTM1LDEwICsxNDAsMTIgQEAKIAogaWYgdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmZpbGVtb2RlKSIgPSBmYWxzZQogdGhlbgotICAgIHNheSAnc2tpcHBpbmcgZmlsZW1vZGUgdGVzdHMgKGZpbGVzeXN0ZW0gZG9lcyBub3QgcHJvcGVybHkgc3VwcG9ydCBtb2RlcyknCisJc2F5ICdza2lwcGluZyBmaWxlbW9kZSB0ZXN0cyAoZmlsZXN5c3RlbSBkb2VzIG5vdCBwcm9wZXJseSBzdXBwb3J0IG1vZGVzKScKIGVsc2UKKwl0ZXN0X3NldF9wcmVyZXEgRklMRU1PREUKK2ZpCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGRvZXMgbm90IGFmZmVjdCBtb2RlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdwYXRjaCBkb2VzIG5vdCBhZmZlY3QgbW9kZScgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAllY2hvIGNvbnRlbnQgPj5maWxlICYmCiAJY2htb2QgK3ggZmlsZSAmJgpAQCAtMTQ3LDcgKzE1NCw3IEBACiAJZ2l0IGRpZmYgZmlsZSB8IGdyZXAgIm5ldyBtb2RlIgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFnZSBtb2RlIGJ1dCBub3QgaHVuaycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnc3RhZ2UgbW9kZSBidXQgbm90IGh1bmsnICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZWNobyBjb250ZW50ID4+ZmlsZSAmJgogCWNobW9kICt4IGZpbGUgJiYKQEAgLTE1Niw3ICsxNjMsNDQgQEAKIAlnaXQgZGlmZiAgICAgICAgICBmaWxlIHwgZ3JlcCAiK2NvbnRlbnQiCiAnCiAKLWZpCiAjIGVuZCBvZiB0ZXN0cyBkaXNhYmxlZCB3aGVuIGZpbGVtb2RlIGlzIG5vdCB1c2FibGUKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYWdhaW4nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9jaG1vZCAreCBmaWxlICYmCisJZWNobyBjb250ZW50ID4+ZmlsZQorJworCisjIFdyaXRlIHRoZSBwYXRjaCBmaWxlIHdpdGggYSBuZXcgbGluZSBhdCB0aGUgdG9wIGFuZCBib3R0b20KK2NhdCA+cGF0Y2ggPDxFT0YKK2luZGV4IDE4MGI0N2MuLmI2ZjJjMDggMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSwyICsxLDQgQEAKKytmaXJzdGxpbmUKKyBiYXNlbGluZQorIGNvbnRlbnQKKytsYXN0bGluZQorRU9GCisjIEV4cGVjdGVkIG91dHB1dCwgc2ltaWxhciB0byB0aGUgcGF0Y2ggYnV0IHcvIGRpZmYgYXQgdGhlIHRvcAorY2F0ID5leHBlY3RlZCA8PEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCitpbmRleCBiNmYyYzA4Li42MWI5MDUzIDEwMDc1NQorLS0tIGEvZmlsZQorKysrIGIvZmlsZQorQEAgLTEsMiArMSw0IEBACisrZmlyc3RsaW5lCisgYmFzZWxpbmUKKyBjb250ZW50CisrbGFzdGxpbmUKK0VPRgorIyBUZXN0IHNwbGl0dGluZyB0aGUgZmlyc3QgcGF0Y2gsIHRoZW4gYWRkaW5nIGJvdGgKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBmaXJzdCBsaW5lIHdvcmtzJyAnCisJZ2l0IGNvbW1pdCAtYW0gImNsZWFyIGxvY2FsIGNoYW5nZXMiICYmCisJZ2l0IGFwcGx5IHBhdGNoICYmCisJKGVjaG8gczsgZWNobyB5OyBlY2hvIHkpIHwgZ2l0IGFkZCAtcCBmaWxlICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPiBkaWZmICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZGlmZgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM3MDItYWRkLWVkaXQuc2ggYi90L3QzNzAyLWFkZC1lZGl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlZTQ3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNzAyLWFkZC1lZGl0LnNoCkBAIC0wLDAgKzEsMTIxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nYWRkIC1lIGJhc2ljIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKKworY2F0ID4gZmlsZSA8PCBFT0YKK0xPLCBwcmFpc2Ugb2YgdGhlIHByb3dlc3Mgb2YgcGVvcGxlLWtpbmdzCitvZiBzcGVhci1hcm1lZCBEYW5lcywgaW4gZGF5cyBsb25nIHNwZWQsCit3ZSBoYXZlIGhlYXJkLCBhbmQgd2hhdCBob25vciB0aGUgYXRoZWxpbmdzIHdvbiEKK09mdCBTY3lsZCB0aGUgU2NlZmluZyBmcm9tIHNxdWFkcm9uZWQgZm9lcywKK2Zyb20gbWFueSBhIHRyaWJlLCB0aGUgbWVhZC1iZW5jaCB0b3JlLAorYXdpbmcgdGhlIGVhcmxzLiBTaW5jZSBlcnN0IGhlIGxheQorZnJpZW5kbGVzcywgYSBmb3VuZGxpbmcsIGZhdGUgcmVwYWlkIGhpbToKK2ZvciBoZSB3YXhlZCB1bmRlciB3ZWxraW4sIGluIHdlYWx0aCBoZSB0aHJvdmUsCit0aWxsIGJlZm9yZSBoaW0gdGhlIGZvbGssIGJvdGggZmFyIGFuZCBuZWFyLAord2hvIGhvdXNlIGJ5IHRoZSB3aGFsZS1wYXRoLCBoZWFyZCBoaXMgbWFuZGF0ZSwKK2dhdmUgaGltIGdpZnRzOiAgYSBnb29kIGtpbmcgaGUhCitFT0YKKworY2F0ID4gc2Vjb25kLXBhcnQgPDwgRU9GCitUbyBoaW0gYW4gaGVpciB3YXMgYWZ0ZXJ3YXJkIGJvcm4sCithIHNvbiBpbiBoaXMgaGFsbHMsIHdob20gaGVhdmVuIHNlbnQKK3RvIGZhdm9yIHRoZSBmb2xrLCBmZWVsaW5nIHRoZWlyIHdvZQordGhhdCBlcnN0IHRoZXkgaGFkIGxhY2tlZCBhbiBlYXJsIGZvciBsZWFkZXIKK3NvIGxvbmcgYSB3aGlsZTsgdGhlIExvcmQgZW5kb3dlZCBoaW0sCit0aGUgV2llbGRlciBvZiBXb25kZXIsIHdpdGggd29ybGQncyByZW5vd24uCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCBmaWxlCisKKycKKworY2F0ID4gZXhwZWN0ZWQtcGF0Y2ggPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IGI5ODM0YjUuLjkwMjBhY2IgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSwxMSArMSw2IEBACistTE8sIHByYWlzZSBvZiB0aGUgcHJvd2VzcyBvZiBwZW9wbGUta2luZ3MKKy1vZiBzcGVhci1hcm1lZCBEYW5lcywgaW4gZGF5cyBsb25nIHNwZWQsCistd2UgaGF2ZSBoZWFyZCwgYW5kIHdoYXQgaG9ub3IgdGhlIGF0aGVsaW5ncyB3b24hCistT2Z0IFNjeWxkIHRoZSBTY2VmaW5nIGZyb20gc3F1YWRyb25lZCBmb2VzLAorLWZyb20gbWFueSBhIHRyaWJlLCB0aGUgbWVhZC1iZW5jaCB0b3JlLAorLWF3aW5nIHRoZSBlYXJscy4gU2luY2UgZXJzdCBoZSBsYXkKKy1mcmllbmRsZXNzLCBhIGZvdW5kbGluZywgZmF0ZSByZXBhaWQgaGltOgorLWZvciBoZSB3YXhlZCB1bmRlciB3ZWxraW4sIGluIHdlYWx0aCBoZSB0aHJvdmUsCistdGlsbCBiZWZvcmUgaGltIHRoZSBmb2xrLCBib3RoIGZhciBhbmQgbmVhciwKKy13aG8gaG91c2UgYnkgdGhlIHdoYWxlLXBhdGgsIGhlYXJkIGhpcyBtYW5kYXRlLAorLWdhdmUgaGltIGdpZnRzOiAgYSBnb29kIGtpbmcgaGUhCisrVG8gaGltIGFuIGhlaXIgd2FzIGFmdGVyd2FyZCBib3JuLAorK2Egc29uIGluIGhpcyBoYWxscywgd2hvbSBoZWF2ZW4gc2VudAorK3RvIGZhdm9yIHRoZSBmb2xrLCBmZWVsaW5nIHRoZWlyIHdvZQorK3RoYXQgZXJzdCB0aGV5IGhhZCBsYWNrZWQgYW4gZWFybCBmb3IgbGVhZGVyCisrc28gbG9uZyBhIHdoaWxlOyB0aGUgTG9yZCBlbmRvd2VkIGhpbSwKKyt0aGUgV2llbGRlciBvZiBXb25kZXIsIHdpdGggd29ybGQncyByZW5vd24uCitFT0YKKworY2F0ID4gcGF0Y2ggPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IGI5ODM0YjUuLmVmNmU5NGMgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMywxICszLDMzMyBAQCBvZiBzcGVhci1hcm1lZCBEYW5lcywgaW4gZGF5cyBsb25nIHNwZWQsCisgd2UgaGF2ZSBoZWFyZCwgYW5kIHdoYXQgaG9ub3IgdGhlIGF0aGVsaW5ncyB3b24hCisrCisgT2Z0IFNjeWxkIHRoZSBTY2VmaW5nIGZyb20gc3F1YWRyb25lZCBmb2VzLAorQEAgLTIsNyArMSw1IEBAIGF3aW5nIHRoZSBlYXJscy4gU2luY2UgZXJzdCBoZSBsYXkKKyBmcmllbmRsZXNzLCBhIGZvdW5kbGluZywgZmF0ZSByZXBhaWQgaGltOgorKworIGZvciBoZSB3YXhlZCB1bmRlciB3ZWxraW4sIGluIHdlYWx0aCBoZSB0aHJvdmUsCitFT0YKKworY2F0ID4gZXhwZWN0ZWQgPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IGI5ODM0YjUuLmVmNmU5NGMgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSwxMCArMSwxMiBAQAorIExPLCBwcmFpc2Ugb2YgdGhlIHByb3dlc3Mgb2YgcGVvcGxlLWtpbmdzCisgb2Ygc3BlYXItYXJtZWQgRGFuZXMsIGluIGRheXMgbG9uZyBzcGVkLAorIHdlIGhhdmUgaGVhcmQsIGFuZCB3aGF0IGhvbm9yIHRoZSBhdGhlbGluZ3Mgd29uIQorKworIE9mdCBTY3lsZCB0aGUgU2NlZmluZyBmcm9tIHNxdWFkcm9uZWQgZm9lcywKKyBmcm9tIG1hbnkgYSB0cmliZSwgdGhlIG1lYWQtYmVuY2ggdG9yZSwKKyBhd2luZyB0aGUgZWFybHMuIFNpbmNlIGVyc3QgaGUgbGF5CisgZnJpZW5kbGVzcywgYSBmb3VuZGxpbmcsIGZhdGUgcmVwYWlkIGhpbToKKysKKyBmb3IgaGUgd2F4ZWQgdW5kZXIgd2Vsa2luLCBpbiB3ZWFsdGggaGUgdGhyb3ZlLAorIHRpbGwgYmVmb3JlIGhpbSB0aGUgZm9saywgYm90aCBmYXIgYW5kIG5lYXIsCisgd2hvIGhvdXNlIGJ5IHRoZSB3aGFsZS1wYXRoLCBoZWFyZCBoaXMgbWFuZGF0ZSwKK0VPRgorCitlY2hvICIjISRTSEVMTF9QQVRIIiA+ZmFrZS1lZGl0b3Iuc2gKK2NhdCA+PiBmYWtlLWVkaXRvci5zaCA8PFxFT0YKK212IC1mICIkMSIgb3JpZy1wYXRjaCAmJgorbXYgLWYgcGF0Y2ggIiQxIgorRU9GCisKK3Rlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2Zha2UtZWRpdG9yLnNoIgorY2htb2QgYSt4IGZha2UtZWRpdG9yLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtZScgJworCisJY3Agc2Vjb25kLXBhcnQgZmlsZSAmJgorCWdpdCBhZGQgLWUgJiYKKwl0ZXN0X2NtcCBzZWNvbmQtcGFydCBmaWxlICYmCisJdGVzdF9jbXAgb3JpZy1wYXRjaCBleHBlY3RlZC1wYXRjaCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID4gb3V0ICYmCisJdGVzdF9jbXAgb3V0IGV4cGVjdGVkCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTAwLWkxOG4tY29tbWl0LnNoIGIvdC90MzkwMC1pMThuLWNvbW1pdC5zaAppbmRleCA3ODRjMzFhLi4yNTZjNGM5IDEwMDc1NQotLS0gYS90L3QzOTAwLWkxOG4tY29tbWl0LnNoCisrKyBiL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKQEAgLTksNyArOSwxNSBAQAogCiBjb21wYXJlX3dpdGggKCkgewogCWdpdCBzaG93IC1zICQxIHwgc2VkIC1lICcxLC9eJC9kJyAtZSAncy9eICAgIC8vJyA+Y3VycmVudCAmJgotCXRlc3RfY21wIGN1cnJlbnQgIiQyIgorCWNhc2UgIiQzIiBpbgorCScnKQorCQl0ZXN0X2NtcCAiJDIiIGN1cnJlbnQgOzsKKwk/KikKKwkJaWNvbnYgLWYgIiQzIiAtdCBVVEYtOCA+Y3VycmVudC51dGY4IDxjdXJyZW50ICYmCisJCWljb252IC1mICIkMyIgLXQgVVRGLTggPmV4cGVjdC51dGY4IDwiJDIiICYmCisJCXRlc3RfY21wIGV4cGVjdC51dGY4IGN1cnJlbnQudXRmOAorCQk7OworCWVzYWMKIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCkBAIC0yNiw3ICszNCw3IEBACiAJdGVzdCB6ID0gInokRSIKICcKIAotZm9yIEggaW4gSVNPLTg4NTktMSBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNldHVwIiAnCiAJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkSCAmJgpAQCAtMzYsNyArNDQsNyBAQAogCScKIGRvbmUKIAotZm9yIEggaW4gSVNPLTg4NTktMSBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrIGVuY29kaW5nIGhlYWRlciBmb3IgJEgiICcKIAkJRT0kKGdpdCBjYXQtZmlsZSBjb21taXQgJyRIJyB8IHNlZCAtbmUgInMvXmVuY29kaW5nIC8vcCIpICYmCkBAIC01MywxNCArNjEsMTQgQEAKIAllbHNlCiAJCXRlc3QgeiA9ICJ6JFoiCiAJZmkgJiYKLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgdXRmLTgKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTgKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnSVNPLTg4NTktMSBzaG91bGQgYmUgc2hvd24gaW4gVVRGLTggbm93JyAnCi0JY29tcGFyZV93aXRoIElTTy04ODU5LTEgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0lTTzg4NTktMSBzaG91bGQgYmUgc2hvd24gaW4gVVRGLTggbm93JyAnCisJY29tcGFyZV93aXRoIElTTzg4NTktMSAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8xLVVURi04LnR4dAogJwogCi1mb3IgSCBpbiBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gZXVjSlAgSVNPLTIwMjItSlAKIGRvCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdyIgJwogCQljb21wYXJlX3dpdGggJyRIJyAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8yLVVURi04LnR4dApAQCAtNzgsNyArODYsNyBAQAogCWZpCiAnCiAKLWZvciBIIGluIElTTy04ODU5LTEgRVVDSlAgSVNPLTIwMjItSlAKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAogZG8KIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzaG91bGQgYmUgc2hvd24gaW4gaXRzZWxmIG5vdyIgJwogCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJyRIJyAmJgpAQCAtODcsMzIgKzk1LDM4IEBACiBkb25lCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyB0byB0d2VhayBjdXN0b21pemF0aW9uJyAnCi0JZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIHV0Zi04CisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04CiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0lTTy04ODU5LTEgc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdycgJwotCWNvbXBhcmVfd2l0aCBJU08tODg1OS0xICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdJU084ODU5LTEgc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdycgJworCWNvbXBhcmVfd2l0aCBJU084ODU5LTEgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQKICcKIAotZm9yIEggaW4gRVVDSlAgSVNPLTIwMjItSlAKK2ZvciBIIGluIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiBVVEYtOCBub3ciICcKIAkJY29tcGFyZV93aXRoICckSCcgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMi1VVEYtOC50eHQKIAknCiBkb25lCiAKLWZvciBKIGluIEVVQ0pQIElTTy0yMDIyLUpQCitmb3IgSiBpbiBldWNKUCBJU08tMjAyMi1KUAogZG8KKwlpZiB0ZXN0ICIkSiIgPSBJU08tMjAyMi1KUAorCXRoZW4KKwkJSUNPTlY9JEoKKwllbHNlCisJCUlDT05WPQorCWZpCiAJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nICRKCi0JZm9yIEggaW4gRVVDSlAgSVNPLTIwMjItSlAKKwlmb3IgSCBpbiBldWNKUCBJU08tMjAyMi1KUAogCWRvCiAJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiAkSiBub3ciICcKLQkJCWNvbXBhcmVfd2l0aCAnJEgnICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyckSicudHh0CisJCQljb21wYXJlX3dpdGggJyRIJyAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8nJEonLnR4dCAkSUNPTlYKIAkJJwogCWRvbmUKIGRvbmUKIAotZm9yIEggaW4gSVNPLTg4NTktMSBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIk5vIGNvbnZlcnNpb24gd2l0aCAkSCIgJwogCQljb21wYXJlX3dpdGggIi0tZW5jb2Rpbmc9bm9uZSAnJEgnIiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8nJEgnLnR4dApkaWZmIC0tZ2l0IGEvdC90MzkwMC9JU08tODg1OS0xLnR4dCBiL3QvdDM5MDAvSVNPODg1OS0xLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdC90MzkwMC9JU08tODg1OS0xLnR4dApyZW5hbWUgdG8gdC90MzkwMC9JU084ODU5LTEudHh0CmRpZmYgLS1naXQgYS90L3QzOTAwL0VVQ0pQLnR4dCBiL3QvdDM5MDAvZXVjSlAudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0L3QzOTAwL0VVQ0pQLnR4dApyZW5hbWUgdG8gdC90MzkwMC9ldWNKUC50eHQKZGlmZiAtLWdpdCBhL3QvdDM5MDEtaTE4bi1wYXRjaC5zaCBiL3QvdDM5MDEtaTE4bi1wYXRjaC5zaAppbmRleCA3NjU1ZGEzLi4zMWE1NzcwIDEwMDc1NQotLS0gYS90L3QzOTAxLWkxOG4tcGF0Y2guc2gKKysrIGIvdC90MzkwMS1pMThuLXBhdGNoLnNoCkBAIC0xNyw5ICsxNyw5IEBACiAJCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRH4kaiB8CiAJCWNhc2UgIiRoZWFkZXIiIGluCiAJCTg4NTkpCi0JCQlncmVwICJeZW5jb2RpbmcgSVNPLTg4NTktMSIgOzsKKwkJCWdyZXAgIl5lbmNvZGluZyBJU084ODU5LTEiIDs7CiAJCSopCi0JCQkhIGdyZXAgIl5lbmNvZGluZyBJU08tODg1OS0xIiA7OworCQkJZ3JlcCAiXmVuY29kaW5nIElTTzg4NTktMSI7IHRlc3QgIiQ/IiAhPSAwIDs7CiAJCWVzYWMgfHwgewogCQkJYmFkPTEKIAkJCWJyZWFrCkBAIC01NSw3ICs1NSw3IEBACiAJZ2l0IGNvbW1pdCAtcyAtbSAiU2Vjb25kIG9uIHNpZGUiICYmCiAKIAkjIHRoZSBzZWNvbmQgb25lIG9uIHRoZSBzaWRlIGJyYW5jaCBpcyBJU08tODg1OS0xCi0JZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCiAJIyB1c2UgYXV0aG9yIGFuZCBjb21taXR0ZXIgbmFtZSBpbiBJU08tODg1OS0xIHRvIG1hdGNoIGl0LgogCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgogCXRlc3RfdGljayAmJgpAQCAtNjgsMTQgKzY4LDE0IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBvdXRwdXQgKElTTy04ODU5LTEpJyAnCi0JZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCiAKIAlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uSEVBRF4gPm91dC1sMSAmJgogCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPm91dC1sMiAmJgotCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMSIgb3V0LWwxICYmCi0JZ3JlcCAiXkZyb206ID0/SVNPLTg4NTktMT9xPz1DMT1FOT1FRD0yMD1GMz1GQT89IiBvdXQtbDEgJiYKLQlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTEiIG91dC1sMiAmJgotCWdyZXAgIl5Gcm9tOiA9P0lTTy04ODU5LTE/cT89QzE9RTk9RUQ9MjA9RjM9RkE/PSIgb3V0LWwyCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU084ODU5LTEiIG91dC1sMSAmJgorCWdyZXAgIl5Gcm9tOiA9P0lTTzg4NTktMT9xPz1DMT1FOT1FRD0yMD1GMz1GQT89IiBvdXQtbDEgJiYKKwlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMSIgb3V0LWwyICYmCisJZ3JlcCAiXkZyb206ID0/SVNPODg1OS0xP3E/PUMxPUU5PUVEPTIwPUYzPUZBPz0iIG91dC1sMgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggb3V0cHV0IChVVEYtOCknICcKQEAgLTExMCw3ICsxMTAsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKFUvTCknICcKIAlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKLQlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKQEAgLTEyMSw4ICsxMjEsOCBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKEwvTCknICcKIAkjIEluIHRoaXMgdGVzdCB3ZSB3YW50IElTTy04ODU5LTEgZW5jb2RlZCBjb21taXRzIGFzIHRoZSByZXN1bHQKLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgotCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKIAogCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgpAQCAtMTM0LDcgKzEzNCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKEwvVSknICcKIAkjIFRoaXMgaXMgcGF0aG9sb2dpY2FsIC0tIHVzZSBVVEYtOCBhcyBpbnRlcm1lZGlhdGUgZm9ybQogCSMgdG8gZ2V0IElTTy04ODU5LTEgcmVzdWx0cy4KLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKIApAQCAtMTYyLDggKzE2Miw4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayhML0wpJyAnCiAJIyBCb3RoIHRoZSBjb21taXRlbmNvZGluZyBhbmQgbG9nb3V0cHV0ZW5jb2RpbmcgaXMgc2V0IHRvIElTTy04ODU5LTEKIAotCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tODg1OS0xICYmCi0JZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgogCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgogCiAJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKQEAgLTE3OCw3ICsxNzgsNyBAQAogCSMgQ29tbWl0ZW5jb2RpbmcgaXMgc2V0IHRvIFVURi04IGJ1dCBsb2dvdXRwdXRlbmNvZGluZyBpcyBJU08tODg1OS0xCiAKIAlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKLQlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgpAQCAtMTkzLDcgKzE5Myw3IEBACiAJIyBBZ2FpbiwgdGhlIGNvbW1pdGVuY29kaW5nIGlzIHNldCB0byBJU08tODg1OS0xIGJ1dAogCSMgbG9nb3V0cHV0ZW5jb2RpbmcgaXMgc2V0IHRvIFVURi04LgogCi0JZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCiAJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCiAJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS04ODU5LTEudHh0ICYmCiAKQEAgLTIxOCw3ICsyMTgsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAoVS9MKScgJwogCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgotCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgogCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtdXRmOC50eHQgJiYKIAogCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgpAQCAtMjI5LDggKzIyOSw4IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIChML0wpJyAnCiAJIyBJbiB0aGlzIHRlc3Qgd2Ugd2FudCBJU08tODg1OS0xIGVuY29kZWQgY29tbWl0cyBhcyB0aGUgcmVzdWx0Ci0JZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKLQlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCiAJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS04ODU5LTEudHh0ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKQEAgLTI0Miw3ICsyNDIsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgKEwvVSknICcKIAkjIFRoaXMgaXMgcGF0aG9sb2dpY2FsIC0tIHVzZSBVVEYtOCBhcyBpbnRlcm1lZGlhdGUgZm9ybQogCSMgdG8gZ2V0IElTTy04ODU5LTEgcmVzdWx0cy4KLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKIAlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKIApkaWZmIC0tZ2l0IGEvdC90MzkwMy1zdGFzaC5zaCBiL3QvdDM5MDMtc3Rhc2guc2gKaW5kZXggNzQ4NGNiZS4uN2EzZmI2NyAxMDA3NTUKLS0tIGEvdC90MzkwMy1zdGFzaC5zaAorKysgYi90L3QzOTAzLXN0YXNoLnNoCkBAIC0xNzcsNCArMTc3LDI3IEBACiAJdGVzdCAwID0gJChnaXQgc3Rhc2ggbGlzdCB8IHdjIC1sKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtcSBpcyBxdWlldCcgJworCWVjaG8gZm9vID4gZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCWdpdCBzdGFzaCBhcHBseSAtcSA+IG91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3QgISAtcyBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhdmUgLXEgaXMgcXVpZXQnICcKKwlnaXQgc3Rhc2ggc2F2ZSAtLXF1aWV0ID4gb3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdCAhIC1zIG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9wIC1xIGlzIHF1aWV0JyAnCisJZ2l0IHN0YXNoIHBvcCAtcSA+IG91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3QgISAtcyBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3AgLXEgaXMgcXVpZXQnICcKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3Rhc2ggZHJvcCAtcSA+IG91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3QgISAtcyBvdXRwdXQub3V0CisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwMi1kaWZmLWJhc2ljLnNoIGIvdC90NDAwMi1kaWZmLWJhc2ljLnNoCmluZGV4IGNjMzY4MWYuLjE4Njk1Y2UgMTAwNzU1Ci0tLSBhL3QvdDQwMDItZGlmZi1iYXNpYy5zaAorKysgYi90L3Q0MDAyLWRpZmYtYmFzaWMuc2gKQEAgLTI1OCw0ICsyNTgsMTIgQEAKICAgICBnaXQgZGlmZi10cmVlIC1yIC1SICR0cmVlX0EgJHRyZWVfQiA+LnRlc3QtYiAmJgogICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LWInCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmIGNhbiByZWFkIGZyb20gc3RkaW4nIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAtLSBNTiAtIDwgTk4gfAorICAgICAgICBncmVwIC12ICJeaW5kZXgiIHwgc2VkICJzIy8tIy9OTiMiID4udGVzdC1hICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAtLSBNTiBOTiB8CisgICAgICAgIGdyZXAgLXYgIl5pbmRleCIgPi50ZXN0LWIgJiYKKyAgICB0ZXN0X2NtcCAudGVzdC1hIC50ZXN0LWInCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwNC1kaWZmLXJlbmFtZS1zeW1saW5rLnNoIGIvdC90NDAwNC1kaWZmLXJlbmFtZS1zeW1saW5rLnNoCmluZGV4IGIzNWFmOWIuLmE0ZGExMTkgMTAwNzU1Ci0tLSBhL3QvdDQwMDQtZGlmZi1yZW5hbWUtc3ltbGluay5zaAorKysgYi90L3Q0MDA0LWRpZmYtcmVuYW1lLXN5bWxpbmsuc2gKQEAgLTEyLDYgKzEyLDEyIEBACiAuIC4vdGVzdC1saWIuc2gKIC4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2gKIAoraWYgISB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCit0aGVuCisJc2F5ICdTeW1ib2xpYyBsaW5rcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZyB0ZXN0cy4nCisJdGVzdF9kb25lCitmaQorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAncHJlcGFyZSByZWZlcmVuY2UgdHJlZScgXAogICAgICdlY2hvIHh5enp5IHwgdHIgLWQgJ1xcXFwnMDEyID55b21pbiAmJgpkaWZmIC0tZ2l0IGEvdC90NDAwNi1kaWZmLW1vZGUuc2ggYi90L3Q0MDA2LWRpZmYtbW9kZS5zaAppbmRleCA0ZTkyZmNlLi44YzFiODFlIDEwMDc1NQotLS0gYS90L3Q0MDA2LWRpZmYtbW9kZS5zaAorKysgYi90L3Q0MDA2LWRpZmYtbW9kZS5zaApAQCAtMTUsMjEgKzE1LDEwIEBACiAgICAgIHRyZWU9YGdpdCB3cml0ZS10cmVlYCAmJgogICAgICBlY2hvICR0cmVlJwogCi1pZiBbICIkKGdpdCBjb25maWcgLS1nZXQgY29yZS5maWxlbW9kZSkiID0gZmFsc2UgXQotdGhlbgotCXNheSAnZmlsZW1vZGUgZGlzYWJsZWQgb24gdGhlIGZpbGVzeXN0ZW0sIHVzaW5nIHVwZGF0ZS1pbmRleCAtLWNobW9kPSt4JwotCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotCSAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWNobW9kPSt4JyBcCi0JICAgICdnaXQgdXBkYXRlLWluZGV4IHJlenJvdiAmJgotCSAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNobW9kPSt4IHJlenJvdiAmJgotCSAgICAgZ2l0IGRpZmYtaW5kZXggJHRyZWUgPmN1cnJlbnQnCi1lbHNlCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0JICAgICdjaG1vZCcgXAotCSAgICAnY2htb2QgK3ggcmV6cm92ICYmCi0JICAgICBnaXQgdXBkYXRlLWluZGV4IHJlenJvdiAmJgotCSAgICAgZ2l0IGRpZmYtaW5kZXggJHRyZWUgPmN1cnJlbnQnCi1maQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NobW9kJyBcCisgICAgJ3Rlc3RfY2htb2QgK3ggcmV6cm92ICYmCisgICAgIGdpdCBkaWZmLWluZGV4ICR0cmVlID5jdXJyZW50JwogCiBfeDQwPSdbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdJwogX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKZGlmZiAtLWdpdCBhL3QvdDQwMDctcmVuYW1lLTMuc2ggYi90L3Q0MDA3LXJlbmFtZS0zLnNoCmluZGV4IDQyMDcyZDcuLjExNTAyYjcgMTAwNzU1Ci0tLSBhL3QvdDQwMDctcmVuYW1lLTMuc2gKKysrIGIvdC90NDAwNy1yZW5hbWUtMy5zaApAQCAtOSwzMiArOSwzNiBAQAogLiAuL3Rlc3QtbGliLnNoCiAuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoIDsjIHRlc3QtbGliIGNoZGlyJ3MgaW50byB0cmFzaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAncHJlcGFyZSByZWZlcmVuY2UgdHJlZScgXAotICAgICdta2RpciBwYXRoMCBwYXRoMSAmJgotICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HIHBhdGgwL0NPUFlJTkcgJiYKLSAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMC9DT1BZSU5HICYmCi0gICAgdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgotICAgIGVjaG8gJHRyZWUnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHJlZmVyZW5jZSB0cmVlJyAnCisJbWtkaXIgcGF0aDAgcGF0aDEgJiYKKwljcCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HIHBhdGgwL0NPUFlJTkcgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwL0NPUFlJTkcgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZWNobyAkdHJlZQorJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAncHJlcGFyZSB3b3JrIHRyZWUnIFwKLSAgICAnY3AgcGF0aDAvQ09QWUlORyBwYXRoMS9DT1BZSU5HICYmCi0gICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgcGF0aDAvQ09QWUlORyBwYXRoMS9DT1BZSU5HJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSB3b3JrIHRyZWUnICcKKwljcCBwYXRoMC9DT1BZSU5HIHBhdGgxL0NPUFlJTkcgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIHBhdGgwL0NPUFlJTkcgcGF0aDEvQ09QWUlORworJwogCiAjIEluIHRoZSB0cmVlLCB0aGVyZSBpcyBvbmx5IHBhdGgwL0NPUFlJTkcuICBJbiB0aGUgY2FjaGUsIHBhdGgwIGFuZAogIyBwYXRoMSBib3RoIGhhdmUgQ09QWUlORyBhbmQgdGhlIGxhdHRlciBpcyBhIGNvcHkgb2YgcGF0aDAvQ09QWUlORy4KICMgQ29tcGFyaW5nIHRoZSBmdWxsIHRyZWUgd2l0aCBjYWNoZSBzaG91bGQgdGVsbCB1cyBzby4KIAotZ2l0IGRpZmYtaW5kZXggLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgJHRyZWUgPmN1cnJlbnQKLQogY2F0ID5leHBlY3RlZCA8PFxFT0YKIDoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyBDMTAwCXBhdGgwL0NPUFlJTkcJcGF0aDEvQ09QWUlORwogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICd2YWxpZGF0ZSB0aGUgcmVzdWx0ICgjMSknIFwKLSAgICAnY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29weSBkZXRlY3Rpb24nICcKKwlnaXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAkdHJlZSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IGRldGVjdGlvbiwgY2FjaGVkJyAnCisJZ2l0IGRpZmYtaW5kZXggLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1jYWNoZWQgJHRyZWUgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQKKycKIAogIyBJbiB0aGUgdHJlZSwgdGhlcmUgaXMgb25seSBwYXRoMC9DT1BZSU5HLiAgSW4gdGhlIGNhY2hlLCBwYXRoMCBhbmQKICMgcGF0aDEgYm90aCBoYXZlIENPUFlJTkcgYW5kIHRoZSBsYXR0ZXIgaXMgYSBjb3B5IG9mIHBhdGgwL0NPUFlJTkcuCkBAIC00Miw0OSArNDYsNDUgQEAKICMgcGF0aDEvQ09QWUlORyBzdWRkZW5seSBhcHBlYXJpbmcgZnJvbSBub3doZXJlLCBub3QgZGV0ZWN0ZWQgYXMKICMgYSBjb3B5IGZyb20gcGF0aDAvQ09QWUlORy4KIAotZ2l0IGRpZmYtaW5kZXggLUMgJHRyZWUgcGF0aDEgPmN1cnJlbnQKLQogY2F0ID5leHBlY3RlZCA8PFxFT0YKIDowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyBBCXBhdGgxL0NPUFlJTkcKIEVPRgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAndmFsaWRhdGUgdGhlIHJlc3VsdCAoIzIpJyBcCi0gICAgJ2NvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHksIGxpbWl0ZWQgdG8gYSBzdWJ0cmVlJyAnCisJZ2l0IGRpZmYtaW5kZXggLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgJHRyZWUgcGF0aDEgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ3R3ZWFrIHdvcmsgdHJlZScgXAotICAgICdybSAtZiBwYXRoMC9DT1BZSU5HICYmCi0gICAgIGdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgcGF0aDAvQ09QWUlORycKLQordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdlYWsgd29yayB0cmVlJyAnCisJcm0gLWYgcGF0aDAvQ09QWUlORyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgcGF0aDAvQ09QWUlORworJwogIyBJbiB0aGUgdHJlZSwgdGhlcmUgaXMgb25seSBwYXRoMC9DT1BZSU5HLiAgSW4gdGhlIGNhY2hlLCBwYXRoMCBkb2VzCiAjIG5vdCBoYXZlIENPUFlJTkcgYW55bW9yZSBhbmQgcGF0aDEgaGFzIENPUFlJTkcgd2hpY2ggaXMgYSBjb3B5IG9mCiAjIHBhdGgwL0NPUFlJTkcuICBTaG93aW5nIHRoZSBmdWxsIHRyZWUgd2l0aCBjYWNoZSBzaG91bGQgdGVsbCB1cyBhYm91dAogIyB0aGUgcmVuYW1lLgogCi1naXQgZGlmZi1pbmRleCAtQyAkdHJlZSA+Y3VycmVudAotCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgogOjEwMDY0NCAxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIFIxMDAJcGF0aDAvQ09QWUlORwlwYXRoMS9DT1BZSU5HCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ3ZhbGlkYXRlIHRoZSByZXN1bHQgKCMzKScgXAotICAgICdjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgZGV0ZWN0aW9uJyAnCisJZ2l0IGRpZmYtaW5kZXggLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgJHRyZWUgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQKKycKIAogIyBJbiB0aGUgdHJlZSwgdGhlcmUgaXMgb25seSBwYXRoMC9DT1BZSU5HLiAgSW4gdGhlIGNhY2hlLCBwYXRoMCBkb2VzCiAjIG5vdCBoYXZlIENPUFlJTkcgYW55bW9yZSBhbmQgcGF0aDEgaGFzIENPUFlJTkcgd2hpY2ggaXMgYSBjb3B5IG9mCiAjIHBhdGgwL0NPUFlJTkcuICBXaGVuIHdlIHNheSB3ZSBjYXJlIG9ubHkgYWJvdXQgcGF0aDEsIHdlIHNob3VsZCBqdXN0CiAjIHNlZSBwYXRoMS9DT1BZSU5HIGFwcGVhcmluZyBmcm9tIG5vd2hlcmUuCiAKLWdpdCBkaWZmLWluZGV4IC1DICR0cmVlIHBhdGgxID5jdXJyZW50Ci0KIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GCiA6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgQQlwYXRoMS9DT1BZSU5HCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ3ZhbGlkYXRlIHRoZSByZXN1bHQgKCM0KScgXAotICAgICdjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUsIGxpbWl0ZWQgdG8gYSBzdWJ0cmVlJyAnCisJZ2l0IGRpZmYtaW5kZXggLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgJHRyZWUgcGF0aDEgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQKKycKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDA4LWRpZmYtYnJlYWstcmV3cml0ZS5zaCBiL3QvdDQwMDgtZGlmZi1icmVhay1yZXdyaXRlLnNoCmluZGV4IDdlMzQzYTkuLmUxOWNhNjUgMTAwNzU1Ci0tLSBhL3QvdDQwMDgtZGlmZi1icmVhay1yZXdyaXRlLnNoCisrKyBiL3QvdDQwMDgtZGlmZi1icmVhay1yZXdyaXRlLnNoCkBAIC05OSw3ICs5OSw3IEBACiAgICAgJ3ZhbGlkYXRlIHJlc3VsdCBvZiAtQiAtTSAoIzQpJyBcCiAgICAgJ2NvbXBhcmVfZGlmZl9yYXcgZXhwZWN0ZWQgY3VycmVudCcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKICAgICAnbWFrZSBmaWxlMCBpbnRvIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCcgXAogICAgICdybSAtZiBmaWxlMCAmJgogICAgICBsbiAtcyBmcm90eiBmaWxlMCAmJgpAQCAtMTE0LDcgKzExNCw3IEBACiA6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIGY1ZGVhYzdiZTU5ZTdlZWFiODY1N2ZkOWFlNzA2ZmQ2YTU3ZGFlZDIgTTEwMAlmaWxlMQogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCiAgICAgJ3ZhbGlkYXRlIHJlc3VsdCBvZiAtQiAoIzUpJyBcCiAgICAgJ2NvbXBhcmVfZGlmZl9yYXcgZXhwZWN0ZWQgY3VycmVudCcKIApAQCAtMTI5LDcgKzEyOSw3IEBACiA6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIGY1ZGVhYzdiZTU5ZTdlZWFiODY1N2ZkOWFlNzA2ZmQ2YTU3ZGFlZDIgUglmaWxlMAlmaWxlMQogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCiAgICAgJ3ZhbGlkYXRlIHJlc3VsdCBvZiAtQiAtTSAoIzYpJyBcCiAgICAgJ2NvbXBhcmVfZGlmZl9yYXcgZXhwZWN0ZWQgY3VycmVudCcKIApAQCAtMTQ0LDcgKzE0NCw3IEBACiA6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIGY1ZGVhYzdiZTU5ZTdlZWFiODY1N2ZkOWFlNzA2ZmQ2YTU3ZGFlZDIgTQlmaWxlMQogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCiAgICAgJ3ZhbGlkYXRlIHJlc3VsdCBvZiAtTSAoIzcpJyBcCiAgICAgJ2NvbXBhcmVfZGlmZl9yYXcgZXhwZWN0ZWQgY3VycmVudCcKIApkaWZmIC0tZ2l0IGEvdC90NDAxMS1kaWZmLXN5bWxpbmsuc2ggYi90L3Q0MDExLWRpZmYtc3ltbGluay5zaAppbmRleCAwMmVmZWNhLi5kN2UzMjdjIDEwMDc1NQotLS0gYS90L3Q0MDExLWRpZmYtc3ltbGluay5zaAorKysgYi90L3Q0MDExLWRpZmYtc3ltbGluay5zaApAQCAtOSw2ICs5LDEyIEBACiAuIC4vdGVzdC1saWIuc2gKIC4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2gKIAoraWYgISB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCit0aGVuCisJc2F5ICdTeW1ib2xpYyBsaW5rcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZyB0ZXN0cy4nCisJdGVzdF9kb25lCitmaQorCiBjYXQgPiBleHBlY3RlZCA8PCBFT0YKIGRpZmYgLS1naXQgYS9mcm90eiBiL2Zyb3R6CiBuZXcgZmlsZSBtb2RlIDEyMDAwMApAQCAtODIsNCArODgsMTEgQEAKICAgICBnaXQgZGlmZi1pbmRleCAtTSAtcCAkdHJlZSA+IGN1cnJlbnQgJiYKICAgICBjb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZCcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYgc3ltbGlua3Mgd2l0aCBub24tZXhpc3RpbmcgdGFyZ2V0cycgXAorICAgICdsbiAtcyBuYXJmIHBpbmt5ICYmCisgICAgbG4gLXMgdGFrZVwgb3ZlciBicmFpbiAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggcGlua3kgYnJhaW4gPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorICAgIGdyZXAgbmFyZiBvdXRwdXQgJiYKKyAgICAhIGdyZXAgZXJyb3Igb3V0cHV0LmVycicKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxMi1kaWZmLWJpbmFyeS5zaCBiL3QvdDQwMTItZGlmZi1iaW5hcnkuc2gKaW5kZXggM2NmNWI1Yy4uZjY0YWE0OCAxMDA3NTUKLS0tIGEvdC90NDAxMi1kaWZmLWJpbmFyeS5zaAorKysgYi90L3Q0MDEyLWRpZmYtYmluYXJ5LnNoCkBAIC04Nyw3ICs4Nyw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1uby1pbmRleCB3aXRoIGJpbmFyeSBjcmVhdGlvbicgJwogCWVjaG8gUSB8IHFfdG9fbnVsID5iaW5hcnkgJiYKLQkoOiMgaGlkZSBlcnJvciBjb2RlIGZyb20gZGlmZiwgd2hpY2gganVzdCBpbmRpY2F0ZXMgZGlmZmVyZW5jZXMKKwkoOiBoaWRlIGVycm9yIGNvZGUgZnJvbSBkaWZmLCB3aGljaCBqdXN0IGluZGljYXRlcyBkaWZmZXJlbmNlcwogCSBnaXQgZGlmZiAtLWJpbmFyeSAtLW5vLWluZGV4IC9kZXYvbnVsbCBiaW5hcnkgPmN1cnJlbnQgfHwKIAkgdHJ1ZQogCSkgJiYKZGlmZiAtLWdpdCBhL3QvdDQwMTMtZGlmZi12YXJpb3VzLnNoIGIvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKaW5kZXggOWM3MDkwMi4uOGIzMzMyMSAxMDA3NTUKLS0tIGEvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKKysrIGIvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKQEAgLTEwMSw4ICsxMDEsNyBAQAogCScnIHwgJyMnKikgY29udGludWUgOzsKIAllc2FjCiAJdGVzdD1gZWNobyAiJGNtZCIgfCBzZWQgLWUgJ3N8Wy8gXVsvIF0qfF98ZydgCi0JY250PWBleHByICR0ZXN0X2NvdW50ICsgMWAKLQlwZng9YHByaW50ZiAiJTA0ZCIgJGNudGAKKwlwZng9YHByaW50ZiAiJTA0ZCIgJHRlc3RfY291bnRgCiAJZXhwZWN0PSIkVEVTVF9ESVJFQ1RPUlkvdDQwMTMvZGlmZi4kdGVzdCIKIAlhY3R1YWw9IiRwZngtZGlmZi4kdGVzdCIKIApAQCAtMjA3LDYgKzIwNiwxMCBAQAogbG9nIC0tcm9vdCAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKIGxvZyAtU0YgbWFzdGVyCiBsb2cgLVNGIC1wIG1hc3RlcgorbG9nIC0tZGVjb3JhdGUgLS1hbGwKKworcmV2LWxpc3QgLS1wYXJlbnRzIEhFQUQKK3Jldi1saXN0IC0tY2hpbGRyZW4gSEVBRAogCiB3aGF0Y2hhbmdlZCBtYXN0ZXIKIHdoYXRjaGFuZ2VkIC1wIG1hc3RlcgpAQCAtMjQzLDExICsyNDYsMTIgQEAKIGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLW5vLW51bWJlcmVkIGluaXRpYWwuLm1hc3RlcgogZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbnVtYmVyZWQgaW5pdGlhbC4ubWFzdGVyCiBmb3JtYXQtcGF0Y2ggLS1hdHRhY2ggLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorZm9ybWF0LXBhdGNoIC0tYXR0YWNoIC0tc3Rkb3V0IC0tc3VmZml4PS5kaWZmIGluaXRpYWwuLnNpZGUKIGZvcm1hdC1wYXRjaCAtLWF0dGFjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXJeCiBmb3JtYXQtcGF0Y2ggLS1hdHRhY2ggLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyCiBmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQogZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl4KLWZvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXIKK2Zvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCAtLW51bWJlcmVkLWZpbGVzIGluaXRpYWwuLm1hc3RlcgogZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3RlcgogZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IC0tc3ViamVjdC1wcmVmaXg9VEVTVENBU0UgaW5pdGlhbC4ubWFzdGVyCiBjb25maWcgZm9ybWF0LnN1YmplY3RwcmVmaXggRElGRkVSRU5UX1BSRUZJWApAQCAtMjY4LDYgKzI3Miw3IEBACiBkaWZmIC0tbm8taW5kZXggLS1uYW1lLXN0YXR1cyAtLSBkaXIyIGRpcgogZGlmZiAtLW5vLWluZGV4IGRpciBkaXIzCiBkaWZmIG1hc3RlciBtYXN0ZXJeIHNpZGUKK2RpZmYgLS1kaXJzdGF0IG1hc3Rlcn4xIG1hc3Rlcn4yCiBFT0YKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLWRpcnN0YXRfbWFzdGVyfjFfbWFzdGVyfjIgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWRpcnN0YXRfbWFzdGVyfjFfbWFzdGVyfjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY3MmUxYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tZGlyc3RhdF9tYXN0ZXJ+MV9tYXN0ZXJ+MgpAQCAtMCwwICsxLDMgQEAKKyQgZ2l0IGRpZmYgLS1kaXJzdGF0IG1hc3Rlcn4xIG1hc3Rlcn4yCisgIDQwLjAlIGRpci8KKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfLS1zdWZmaXg9LmRpZmZfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfLS1zdWZmaXg9LmRpZmZfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjExNmQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF8tLXN1ZmZpeD0uZGlmZl9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsNjEgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWF0dGFjaCAtLXN0ZG91dCAtLXN1ZmZpeD0uZGlmZiBpbml0aWFsLi5zaWRlCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBTaWRlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAgICAyICsrCisgZmlsZTAgICB8ICAgIDMgKysrCisgZmlsZTMgICB8ICAgIDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNpZGUuZGlmZiIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIwMDAxLVNpZGUuZGlmZiIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlciBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyCmluZGV4IGU1YWI3NDQuLmNlNDliZDYgMTAwNjQ0Ci0tLSBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyCkBAIC0yMiw5ICsyMiw5IEBACiAKIAogLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgotQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQuZGlmZiIKK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLUNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0LmRpZmYiCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCiAKIGRpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgogaW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKQEAgLTgwLDkgKzgwLDkgQEAKIAogCiAtLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCi1Db250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMC5kaWZmIgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDItVGhpcmQucGF0Y2giCiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Ci1Db250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMC5kaWZmIgorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjAwMDItVGhpcmQucGF0Y2giCiAKIGRpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgogaW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKQEAgLTEyOSw5ICsxMjksOSBAQAogCiAKIC0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KLUNvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSJjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhLmRpZmYiCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMy1TaWRlLnBhdGNoIgogQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAotQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ImM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEuZGlmZiIKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIwMDAzLVNpZGUucGF0Y2giCiAKIGRpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgogaW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXiBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXgppbmRleCAyYzcxZDIwLi41ZjFiMjM4IDEwMDY0NAotLS0gYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4KKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeCkBAIC0yMiw5ICsyMiw5IEBACiAKIAogLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgotQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQuZGlmZiIKK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLUNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0LmRpZmYiCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCiAKIGRpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgogaW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKQEAgLTgwLDkgKzgwLDkgQEAKIAogCiAtLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCi1Db250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMC5kaWZmIgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDItVGhpcmQucGF0Y2giCiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Ci1Db250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMC5kaWZmIgorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjAwMDItVGhpcmQucGF0Y2giCiAKIGRpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgogaW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZQppbmRleCAzOGY3OTAyLi40YTIzNjRhIDEwMDY0NAotLS0gYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5zaWRlCkBAIC0yMCw5ICsyMCw5IEBACiAKIAogLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgotQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9ImM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEuZGlmZiIKK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNpZGUucGF0Y2giCiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Ci1Db250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YS5kaWZmIgorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjAwMDEtU2lkZS5wYXRjaCIKIAogZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCiBpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF8tLW51bWJlcmVkLWZpbGVzX2luaXRpYWwuLm1hc3RlciBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfLS1udW1iZXJlZC1maWxlc19pbml0aWFsLi5tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNiODFlYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfLS1udW1iZXJlZC1maWxlc19pbml0aWFsLi5tYXN0ZXIKQEAgLTAsMCArMSwxNzAgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCAtLW51bWJlcmVkLWZpbGVzIGluaXRpYWwuLm1hc3RlcgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIFNlY29uZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgICAgMiArKworIGZpbGUwICAgfCAgICAzICsrKworIGZpbGUyICAgfCAgICAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIxIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMSIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBUaGlyZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgICAgMiArKworIGZpbGUxICAgfCAgICAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIyIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMiIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKworRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIFNpZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8ICAgIDIgKysKKyBmaWxlMCAgIHwgICAgMyArKysKKyBmaWxlMyAgIHwgICAgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjMiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIzIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfLS1zdWJqZWN0LXByZWZpeD1URVNUQ0FTRV9pbml0aWFsLi5tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0Xy0tc3ViamVjdC1wcmVmaXg9VEVTVENBU0VfaW5pdGlhbC4ubWFzdGVyCmluZGV4IDU4ZjhhN2IuLmNhM2Y2MGIgMTAwNjQ0Ci0tLSBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfLS1zdWJqZWN0LXByZWZpeD1URVNUQ0FTRV9pbml0aWFsLi5tYXN0ZXIKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF8tLXN1YmplY3QtcHJlZml4PVRFU1RDQVNFX2luaXRpYWwuLm1hc3RlcgpAQCAtMjIsOSArMjIsOSBAQAogCiAKIC0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KLUNvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0LmRpZmYiCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Ci1Db250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0LmRpZmYiCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKIAogZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCiBpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NApAQCAtODAsOSArODAsOSBAQAogCiAKIC0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KLUNvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSI5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwLmRpZmYiCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLUNvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAuZGlmZiIKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDItVGhpcmQucGF0Y2giCiAKIGRpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgogaW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKQEAgLTEyOSw5ICsxMjksOSBAQAogCiAKIC0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KLUNvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSJjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhLmRpZmYiCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMy1TaWRlLnBhdGNoIgogQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAotQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YS5kaWZmIgorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMy1TaWRlLnBhdGNoIgogCiBkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKIGluZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlciBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyCmluZGV4IDllN2JiZGYuLjA4ZjIzMDEgMTAwNjQ0Ci0tLSBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyCkBAIC0yMiw5ICsyMiw5IEBACiAKIAogLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgotQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQuZGlmZiIKK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLUNvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQuZGlmZiIKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgogCiBkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKIGluZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CkBAIC04MCw5ICs4MCw5IEBACiAKIAogLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgotQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAuZGlmZiIKK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgogQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAotQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMC5kaWZmIgorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKIAogZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCiBpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NApAQCAtMTI5LDkgKzEyOSw5IEBACiAKIAogLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgotQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9ImM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEuZGlmZiIKK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAzLVNpZGUucGF0Y2giCiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Ci1Db250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSJjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhLmRpZmYiCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAzLVNpZGUucGF0Y2giCiAKIGRpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgogaW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXiBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXgppbmRleCBmODgxZjY0Li4wN2YxMjMwIDEwMDY0NAotLS0gYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4KKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeCkBAIC0yMiw5ICsyMiw5IEBACiAKIAogLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgotQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQuZGlmZiIKK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLUNvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQuZGlmZiIKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgogCiBkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKIGluZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CkBAIC04MCw5ICs4MCw5IEBACiAKIAogLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgotQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAuZGlmZiIKK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgogQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAotQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMC5kaWZmIgorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKIAogZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCiBpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeXiBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXl4KaW5kZXggNGYyNThiOC4uMjllMDBhYiAxMDA2NDQKLS0tIGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeXgorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl5eCkBAIC0yMiw5ICsyMiw5IEBACiAKIAogLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgotQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQuZGlmZiIKK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLUNvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQuZGlmZiIKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgogCiBkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKIGluZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUKaW5kZXggZTg2ZGNlNi4uNjc2MzNkNCAxMDA2NDQKLS0tIGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5zaWRlCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZQpAQCAtMjAsOSArMjAsOSBAQAogCiAKIC0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KLUNvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSJjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhLmRpZmYiCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TaWRlLnBhdGNoIgogQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAotQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YS5kaWZmIgorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMS1TaWRlLnBhdGNoIgogCiBkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKIGluZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGVfLS1hbGwgYi90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGVfLS1hbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0MjEwZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZV8tLWFsbApAQCAtMCwwICsxLDM0IEBACiskIGdpdCBsb2cgLS1kZWNvcmF0ZSAtLWFsbAorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQgKG1hc3RlcikKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIChzaWRlKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhIChpbml0aWFsKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3Rlcl8tLV9kaXJfIGIvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyXy0tX2Rpcl8KaW5kZXggM2NlYjhlNy4uYmQ3ZjVjMCAxMDA2NDQKLS0tIGEvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyXy0tX2Rpcl8KKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyXy0tX2Rpcl8KQEAgLTEsNiArMSw2IEBACiAkIGdpdCBsb2cgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlciAtLSBkaXIvCiBjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAotTWVyZ2U6IDlhNmQ0OTQuLi4gYzdhMmFiOS4uLgorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQogQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgogRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKIApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgppbmRleCA0M2Q3Nzc2Li4xNDU5NWE2IDEwMDY0NAotLS0gYS90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpAQCAtMSw2ICsxLDYgQEAKICQgZ2l0IGxvZyAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKIGNvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0Ci1NZXJnZTogOWE2ZDQ5NC4uLiBjN2EyYWI5Li4uCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CiBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CiBEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAogCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3Rlcl8tLV9kaXJfIGIvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXJfLS1fZGlyXwppbmRleCA1MTg3YTI2Li41YTRlNzI3IDEwMDY0NAotLS0gYS90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3Rlcl8tLV9kaXJfCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyXy0tX2Rpcl8KQEAgLTEsNiArMSw2IEBACiAkIGdpdCBsb2cgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyIC0tIGRpci8KIGNvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0Ci1NZXJnZTogOWE2ZDQ5NC4uLiBjN2EyYWI5Li4uCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CiBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CiBEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAogCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKaW5kZXggYzk2NDA5Ny4uZGYwYWFhOSAxMDA2NDQKLS0tIGEvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMSw2ICsxLDYgQEAKICQgZ2l0IGxvZyAtLXJvb3QgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCiBjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAotTWVyZ2U6IDlhNmQ0OTQuLi4gYzdhMmFiOS4uLgorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQogQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgogRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKIApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKaW5kZXggYWQwNTBhZi4uYzExYjVmMmMgMTAwNjQ0Ci0tLSBhL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMSw2ICsxLDYgQEAKICQgZ2l0IGxvZyAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgogY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKLU1lcmdlOiA5YTZkNDk0Li4uIGM3YTJhYjkuLi4KK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KIERhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCiAKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgppbmRleCA2MjhjNmMwLi41ZjBjOThmIDEwMDY0NAotLS0gYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyCkBAIC0xLDYgKzEsNiBAQAogJCBnaXQgbG9nIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKIGNvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0Ci1NZXJnZTogOWE2ZDQ5NC4uLiBjN2EyYWI5Li4uCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CiBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CiBEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAogCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLWNfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgppbmRleCA1ZDRlMGYxLi5lNjJjMzY4IDEwMDY0NAotLS0gYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy1jXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTEsNiArMSw2IEBACiAkIGdpdCBsb2cgLS1yb290IC1jIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKIGNvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0Ci1NZXJnZTogOWE2ZDQ5NC4uLiBjN2EyYWI5Li4uCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CiBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CiBEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAogCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tcF9tYXN0ZXIKaW5kZXggMjE3YTJlYi4uYjQyYzMzNCAxMDA2NDQKLS0tIGEvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLXBfbWFzdGVyCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy1wX21hc3RlcgpAQCAtMSw2ICsxLDYgQEAKICQgZ2l0IGxvZyAtLXJvb3QgLXAgbWFzdGVyCiBjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAotTWVyZ2U6IDlhNmQ0OTQuLi4gYzdhMmFiOS4uLgorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQogQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgogRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKIApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfbWFzdGVyCmluZGV4IGUxN2NjZmMuLmU4ZjQ2MTUgMTAwNjQ0Ci0tLSBhL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290X21hc3RlcgorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF9tYXN0ZXIKQEAgLTEsNiArMSw2IEBACiAkIGdpdCBsb2cgLS1yb290IG1hc3RlcgogY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKLU1lcmdlOiA5YTZkNDk0Li4uIGM3YTJhYjkuLi4KK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KIERhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCiAKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLXBfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tcF9tYXN0ZXIKaW5kZXggZjhmZWZlZi4uYmYxMzI2ZCAxMDA2NDQKLS0tIGEvdC90NDAxMy9kaWZmLmxvZ18tcF9tYXN0ZXIKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tcF9tYXN0ZXIKQEAgLTEsNiArMSw2IEBACiAkIGdpdCBsb2cgLXAgbWFzdGVyCiBjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAotTWVyZ2U6IDlhNmQ0OTQuLi4gYzdhMmFiOS4uLgorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQogQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgogRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKIApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ19tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nX21hc3RlcgppbmRleCBlOWQ5ZTdiLi5hOGY2Y2U1IDEwMDY0NAotLS0gYS90L3Q0MDEzL2RpZmYubG9nX21hc3RlcgorKysgYi90L3Q0MDEzL2RpZmYubG9nX21hc3RlcgpAQCAtMSw2ICsxLDYgQEAKICQgZ2l0IGxvZyBtYXN0ZXIKIGNvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0Ci1NZXJnZTogOWE2ZDQ5NC4uLiBjN2EyYWI5Li4uCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CiBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CiBEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAogCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYucmV2LWxpc3RfLS1jaGlsZHJlbl9IRUFEIGIvdC90NDAxMy9kaWZmLnJldi1saXN0Xy0tY2hpbGRyZW5fSEVBRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2YxN2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnJldi1saXN0Xy0tY2hpbGRyZW5fSEVBRApAQCAtMCwwICsxLDcgQEAKKyQgZ2l0IHJldi1saXN0IC0tY2hpbGRyZW4gSEVBRAorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0Cis5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKzFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5yZXYtbGlzdF8tLXBhcmVudHNfSEVBRCBiL3QvdDQwMTMvZGlmZi5yZXYtbGlzdF8tLXBhcmVudHNfSEVBRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWQyYTgwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnJldi1saXN0Xy0tcGFyZW50c19IRUFECkBAIC0wLDAgKzEsNyBAQAorJCBnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIEhFQUQKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd19tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuc2hvd19tYXN0ZXIKaW5kZXggOWU2ZTFmMi4uZmIwOGNlMCAxMDA2NDQKLS0tIGEvdC90NDAxMy9kaWZmLnNob3dfbWFzdGVyCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93X21hc3RlcgpAQCAtMSw2ICsxLDYgQEAKICQgZ2l0IHNob3cgbWFzdGVyCiBjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAotTWVyZ2U6IDlhNmQ0OTQuLi4gYzdhMmFiOS4uLgorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQogQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgogRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKIApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgppbmRleCA1ZmFjZjI1Li5lOTZmZjFmIDEwMDY0NAotLS0gYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMSw2ICsxLDYgQEAKICQgZ2l0IHdoYXRjaGFuZ2VkIC0tcm9vdCAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKIGNvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0Ci1NZXJnZTogOWE2ZDQ5NC4uLiBjN2EyYWI5Li4uCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CiBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CiBEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAogCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy1jXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy1jXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKaW5kZXggMTBmNjc2Ny4uYzBhZmY2OCAxMDA2NDQKLS0tIGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLWNfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMSw2ICsxLDYgQEAKICQgZ2l0IHdoYXRjaGFuZ2VkIC0tcm9vdCAtYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCiBjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAotTWVyZ2U6IDlhNmQ0OTQuLi4gYzdhMmFiOS4uLgorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQogQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgogRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKIApkaWZmIC0tZ2l0IGEvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2ggYi90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaAppbmRleCBmMDQ1ODk4Li45MjJhODk0IDEwMDc1NQotLS0gYS90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaAorKysgYi90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaApAQCAtMTYsOSArMTYsNyBAQAogCWdpdCBjaGVja291dCAtYiBzaWRlICYmCiAKIAlmb3IgaSBpbiAxIDIgNSA2IEEgQiBDIDcgOCA5IDEwOyBkbyBlY2hvICIkaSI7IGRvbmUgPmZpbGUgJiYKLQljaG1vZCAreCBlbGlmICYmCi0JZ2l0IHVwZGF0ZS1pbmRleCBmaWxlIGVsaWYgJiYKLQlnaXQgdXBkYXRlLWluZGV4IC0tY2htb2Q9K3ggZWxpZiAmJgorCXRlc3RfY2htb2QgK3ggZWxpZiAmJgogCWdpdCBjb21taXQgLW0gIlNpZGUgY2hhbmdlcyAjMSIgJiYKIAogCWZvciBpIGluIEQgRSBGOyBkbyBlY2hvICIkaSI7IGRvbmUgPj5maWxlICYmCkBAIC0xMzAsNiArMTI4LDIxIEBACiAJZ3JlcCAiXiAqUy4gRS4gQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+JCIgcGF0Y2g1CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQgbGluZSBoZWFkZXJzJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGZvcm1hdC5oZWFkZXJzICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWFkZC1oZWFkZXI9IkNjOiBSLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8IHNlZCAtZSAiL14kL3EiID5wYXRjaDYgJiYKKwlncmVwICJeQ2M6IFIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiQiIHBhdGNoNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmF0aW9uIGhlYWRlcnMgYW5kIGNvbW1hbmQgbGluZSBoZWFkZXJzJyAnCisKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmhlYWRlcnMgIkNjOiBSLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWFkZC1oZWFkZXI9IkNjOiBTLiBFLiBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT4iIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8IHNlZCAtZSAiL14kL3EiID5wYXRjaDcgJiYKKwlncmVwICJeQ2M6IFIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiwkIiBwYXRjaDcgJiYKKwlncmVwICJeICpTLiBFLiBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT4kIiBwYXRjaDcKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgZmlsZXMnICcKIAogCXJtIC1yZiBwYXRjaGVzLyAmJgpAQCAtMTM4LDU2ICsxNTEsMjQzIEBACiAJbHMgcGF0Y2hlcy8wMDAxLVNpZGUtY2hhbmdlcy0xLnBhdGNoIHBhdGNoZXMvMDAwMi1TaWRlLWNoYW5nZXMtMi5wYXRjaCBwYXRjaGVzLzAwMDMtU2lkZS1jaGFuZ2VzLTMtd2l0aC1uLWJhY2tzbGFzaC1uLWluLWl0LnBhdGNoCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCcgJworY2hlY2tfdGhyZWFkaW5nICgpIHsKKwlleHBlY3Q9IiQxIiAmJgorCXNoaWZ0ICYmCisJKGdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgIiRAIjsgZWNobyAkPyA+IHN0YXR1cy5vdXQpIHwKKwkjIFByaW50cyBldmVyeXRoaW5nIGJldHdlZW4gdGhlIE1lc3NhZ2UtSUQgYW5kIEluLVJlcGx5LVRvLAorCSMgYW5kIHJlcGxhY2VzIGFsbCBNZXNzYWdlLUlELWxvb2thbGlrZXMgYnkgYSBzZXF1ZW5jZSBudW1iZXIKKwlwZXJsIC1uZSAnCisJCWlmICgvXihtZXNzYWdlLWlkfHJlZmVyZW5jZXN8aW4tcmVwbHktdG8pL2kpIHsKKwkJCSRwcmludGluZyA9IDE7CisJCX0gZWxzaWYgKC9eXFMvKSB7CisJCQkkcHJpbnRpbmcgPSAwOworCQl9CisJCWlmICgkcHJpbnRpbmcpIHsKKwkJCSRoeyQxfT0kaSsrIGlmICgvPChbXj5dKyk+LyBhbmQgIWV4aXN0cyAkaHskMX0pOworCQkJZm9yICRrIChrZXlzICVoKSB7cy8kay8kaHska30vfTsKKwkJCXByaW50OworCQl9CisJCXByaW50ICItLS1cbiIgaWYgL15Gcm9tIC9pOworCScgPiBhY3R1YWwgJiYKKwl0ZXN0IDAgPSAiJChjYXQgc3RhdHVzLm91dCkiICYmCisJdGVzdF9jbXAgIiRleHBlY3QiIGFjdHVhbAorfQogCi0Jcm0gLXJmIHBhdGNoZXMvICYmCitjYXQgPj4gZXhwZWN0Lm5vLXRocmVhZGluZyA8PEVPRgorLS0tCistLS0KKy0tLQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHRocmVhZGluZycgJwogCWdpdCBjaGVja291dCBzaWRlICYmCi0JZ2l0IGZvcm1hdC1wYXRjaCAtLXRocmVhZCAtbyBwYXRjaGVzLyBtYXN0ZXIgJiYKLQlGSVJTVF9NSUQ9JChncmVwICJNZXNzYWdlLUlkOiIgcGF0Y2hlcy8wMDAxLSogfCBzZWQgInMvXltePF0qXCg8W14+XSo+XCkuKiQvXDEvIikgJiYKLQlmb3IgaSBpbiBwYXRjaGVzLzAwMDItKiBwYXRjaGVzLzAwMDMtKgotCWRvCi0JICBncmVwICJSZWZlcmVuY2VzOiAkRklSU1RfTUlEIiAkaSAmJgotCSAgZ3JlcCAiSW4tUmVwbHktVG86ICRGSVJTVF9NSUQiICRpIHx8IGJyZWFrCi0JZG9uZQorCWNoZWNrX3RocmVhZGluZyBleHBlY3Qubm8tdGhyZWFkaW5nIG1hc3RlcgogJwogCitjYXQgPiBleHBlY3QudGhyZWFkIDw8RU9GCistLS0KK01lc3NhZ2UtSWQ6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8MT4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCcgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QudGhyZWFkIC0tdGhyZWFkIG1hc3RlcgorJworCitjYXQgPiBleHBlY3QuaW4tcmVwbHktdG8gPDxFT0YKKy0tLQorTWVzc2FnZS1JZDogPDA+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KKy0tLQorTWVzc2FnZS1JZDogPDM+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KK0VPRgorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgaW4tcmVwbHktdG8nICcKLQotCXJtIC1yZiBwYXRjaGVzLyAmJgotCWdpdCBjaGVja291dCBzaWRlICYmCi0JZ2l0IGZvcm1hdC1wYXRjaCAtLWluLXJlcGx5LXRvPSI8dGVzdC5tZXNzYWdlPiIgLS10aHJlYWQgLW8gcGF0Y2hlcy8gbWFzdGVyICYmCi0JRklSU1RfTUlEPSI8dGVzdC5tZXNzYWdlPiIgJiYKLQlmb3IgaSBpbiBwYXRjaGVzLyoKLQlkbwotCSAgZ3JlcCAiUmVmZXJlbmNlczogJEZJUlNUX01JRCIgJGkgJiYKLQkgIGdyZXAgIkluLVJlcGx5LVRvOiAkRklSU1RfTUlEIiAkaSB8fCBicmVhawotCWRvbmUKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmluLXJlcGx5LXRvIC0taW4tcmVwbHktdG89Ijx0ZXN0Lm1lc3NhZ2U+IiBcCisJCS0tdGhyZWFkIG1hc3RlcgogJwogCitjYXQgPiBleHBlY3QuY292ZXItbGV0dGVyIDw8RU9GCistLS0KK01lc3NhZ2UtSWQ6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8MT4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mz4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorRU9GCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBjb3Zlci1sZXR0ZXInICcKLQotCXJtIC1yZiBwYXRjaGVzLyAmJgotCWdpdCBjaGVja291dCBzaWRlICYmCi0JZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtLXRocmVhZCAtbyBwYXRjaGVzLyBtYXN0ZXIgJiYKLQlGSVJTVF9NSUQ9JChncmVwICJNZXNzYWdlLUlkOiIgcGF0Y2hlcy8wMDAwLSogfCBzZWQgInMvXltePF0qXCg8W14+XSo+XCkuKiQvXDEvIikgJiYKLQlmb3IgaSBpbiBwYXRjaGVzLzAwMDEtKiBwYXRjaGVzLzAwMDItKiBwYXRjaGVzLzAwMDMtKgotCWRvCi0JICBncmVwICJSZWZlcmVuY2VzOiAkRklSU1RfTUlEIiAkaSAmJgotCSAgZ3JlcCAiSW4tUmVwbHktVG86ICRGSVJTVF9NSUQiICRpIHx8IGJyZWFrCi0JZG9uZQorCWNoZWNrX3RocmVhZGluZyBleHBlY3QuY292ZXItbGV0dGVyIC0tY292ZXItbGV0dGVyIC0tdGhyZWFkIG1hc3RlcgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgY292ZXItbGV0dGVyIGluLXJlcGx5LXRvJyAnCitjYXQgPiBleHBlY3QuY2wtaXJ0IDw8RU9GCistLS0KK01lc3NhZ2UtSWQ6IDwwPgorSW4tUmVwbHktVG86IDwxPgorUmVmZXJlbmNlczogPDE+CistLS0KK01lc3NhZ2UtSWQ6IDwyPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDE+CisJPDA+CistLS0KK01lc3NhZ2UtSWQ6IDwzPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDE+CisJPDA+CistLS0KK01lc3NhZ2UtSWQ6IDw0PgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDE+CisJPDA+CitFT0YKIAotCXJtIC1yZiBwYXRjaGVzLyAmJgotCWdpdCBjaGVja291dCBzaWRlICYmCi0JZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtLWluLXJlcGx5LXRvPSI8dGVzdC5tZXNzYWdlPiIgLS10aHJlYWQgLW8gcGF0Y2hlcy8gbWFzdGVyICYmCi0JRklSU1RfTUlEPSI8dGVzdC5tZXNzYWdlPiIgJiYKLQlmb3IgaSBpbiBwYXRjaGVzLyoKLQlkbwotCSAgZ3JlcCAiUmVmZXJlbmNlczogJEZJUlNUX01JRCIgJGkgJiYKLQkgIGdyZXAgIkluLVJlcGx5LVRvOiAkRklSU1RfTUlEIiAkaSB8fCBicmVhawotCWRvbmUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBjb3Zlci1sZXR0ZXIgaW4tcmVwbHktdG8nICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmNsLWlydCAtLWNvdmVyLWxldHRlciBcCisJCS0taW4tcmVwbHktdG89Ijx0ZXN0Lm1lc3NhZ2U+IiAtLXRocmVhZCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIGV4cGxpY2l0IHNoYWxsb3cnICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmNsLWlydCAtLWNvdmVyLWxldHRlciBcCisJCS0taW4tcmVwbHktdG89Ijx0ZXN0Lm1lc3NhZ2U+IiAtLXRocmVhZD1zaGFsbG93IG1hc3RlcgorJworCitjYXQgPiBleHBlY3QuZGVlcCA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KKy0tLQorTWVzc2FnZS1JZDogPDE+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MD4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MD4KKwk8MT4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgZGVlcCcgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuZGVlcCAtLXRocmVhZD1kZWVwIG1hc3RlcgorJworCitjYXQgPiBleHBlY3QuZGVlcC1pcnQgPDxFT0YKKy0tLQorTWVzc2FnZS1JZDogPDA+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKy0tLQorTWVzc2FnZS1JZDogPDM+CitJbi1SZXBseS1UbzogPDI+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKwk8Mj4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgZGVlcCBpbi1yZXBseS10bycgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuZGVlcC1pcnQgIC0tdGhyZWFkPWRlZXAgXAorCQktLWluLXJlcGx5LXRvPSI8dGVzdC5tZXNzYWdlPiIgbWFzdGVyCisnCisKK2NhdCA+IGV4cGVjdC5kZWVwLWNsIDw8RU9GCistLS0KK01lc3NhZ2UtSWQ6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8MT4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwwPgorCTwxPgorLS0tCitNZXNzYWdlLUlkOiA8Mz4KK0luLVJlcGx5LVRvOiA8Mj4KK1JlZmVyZW5jZXM6IDwwPgorCTwxPgorCTwyPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBkZWVwIGNvdmVyLWxldHRlcicgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuZGVlcC1jbCAtLWNvdmVyLWxldHRlciAtLXRocmVhZD1kZWVwIG1hc3RlcgorJworCitjYXQgPiBleHBlY3QuZGVlcC1jbC1pcnQgPDxFT0YKKy0tLQorTWVzc2FnZS1JZDogPDA+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKy0tLQorTWVzc2FnZS1JZDogPDM+CitJbi1SZXBseS1UbzogPDI+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKwk8Mj4KKy0tLQorTWVzc2FnZS1JZDogPDQ+CitJbi1SZXBseS1UbzogPDM+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKwk8Mj4KKwk8Mz4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgZGVlcCBjb3Zlci1sZXR0ZXIgaW4tcmVwbHktdG8nICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmRlZXAtY2wtaXJ0IC0tY292ZXItbGV0dGVyIFwKKwkJLS1pbi1yZXBseS10bz0iPHRlc3QubWVzc2FnZT4iIC0tdGhyZWFkPWRlZXAgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCB2aWEgY29uZmlnJyAnCisJZ2l0IGNvbmZpZyBmb3JtYXQudGhyZWFkIHRydWUgJiYKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LnRocmVhZCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIGRlZXAgdmlhIGNvbmZpZycgJworCWdpdCBjb25maWcgZm9ybWF0LnRocmVhZCBkZWVwICYmCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC5kZWVwIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgY29uZmlnICsgb3ZlcnJpZGUnICcKKwlnaXQgY29uZmlnIGZvcm1hdC50aHJlYWQgZGVlcCAmJgorCWNoZWNrX3RocmVhZGluZyBleHBlY3QudGhyZWFkIC0tdGhyZWFkIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgY29uZmlnICsgLS1uby10aHJlYWQnICcKKwlnaXQgY29uZmlnIGZvcm1hdC50aHJlYWQgZGVlcCAmJgorCWNoZWNrX3RocmVhZGluZyBleHBlY3Qubm8tdGhyZWFkaW5nIC0tbm8tdGhyZWFkIG1hc3RlcgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGNlc3NpdmUgc3ViamVjdCcgJwpAQCAtMzA1LDQgKzUwNSwxNSBAQAogCXRlc3QgLWYgIiRiYXNlbmFtZSIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0taW4tcmVwbHktdG8nICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0taW4tcmVwbHktdG8gImJhekBmb28uYmFyIiA+IHBhdGNoOCAmJgorCWdyZXAgIl5Jbi1SZXBseS1UbzogPGJhekBmb28uYmFyPiIgcGF0Y2g4ICYmCisJZ3JlcCAiXlJlZmVyZW5jZXM6IDxiYXpAZm9vLmJhcj4iIHBhdGNoOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1zaWdub2ZmJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXNpZ25vZmYgLS1zdGRvdXQgfAorCWdyZXAgIl5TaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoIGIvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoCmluZGV4IGJlNTQxMzQuLjViMTBlOTcgMTAwNzU1Ci0tLSBhL3QvdDQwMTgtZGlmZi1mdW5jbmFtZS5zaAorKysgYi90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2gKQEAgLTMyLDcgKzMyLDcgQEAKIAogc2VkICdzL2JlZXJcXC9iZWVyLFxcLycgPCBCZWVyLmphdmEgPiBCZWVyLWNvcnJlY3QuamF2YQogCi1idWlsdGluX3BhdHRlcm5zPSJiaWJ0ZXggaHRtbCBqYXZhIG9iamMgcGFzY2FsIHBocCBweXRob24gcnVieSB0ZXgiCitidWlsdGluX3BhdHRlcm5zPSJiaWJ0ZXggY3BwIGh0bWwgamF2YSBvYmpjIHBhc2NhbCBwaHAgcHl0aG9uIHJ1YnkgdGV4IgogZm9yIHAgaW4gJGJ1aWx0aW5fcGF0dGVybnMKIGRvCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYnVpbHRpbiAkcCBwYXR0ZXJuIGNvbXBpbGVzIiAnCmRpZmYgLS1naXQgYS90L3Q0MDIwLWRpZmYtZXh0ZXJuYWwuc2ggYi90L3Q0MDIwLWRpZmYtZXh0ZXJuYWwuc2gKaW5kZXggMmE3MmU3NS4uNGVhNDJlMCAxMDA3NTUKLS0tIGEvdC90NDAyMC1kaWZmLWV4dGVybmFsLnNoCisrKyBiL3QvdDQwMjAtZGlmZi1leHRlcm5hbC5zaApAQCAtMTI4LDYgKzEyOCwzOSBAQAogCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q0MDIwL2RpZmYuTlVMIGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiB3aXRoIG1vcmUgdGhhbiBvbmUgY2hhbmdlZCBmaWxlcycgJworCWVjaG8gYW5vdGhlcmZpbGUgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCAybmQgZmlsZSIgJiYKKwllY2hvIG1vZGlmaWVkID5maWxlMiAmJgorCUdJVF9FWFRFUk5BTF9ESUZGPWVjaG8gZ2l0IGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0VYVEVSTkFMX0RJRkYgZ2VuZXJhdGVzIHByZXR0eSBwYXRocycgJworCXRvdWNoIGZpbGUuZXh0ICYmCisJZ2l0IGFkZCBmaWxlLmV4dCAmJgorCWVjaG8gd2l0aCBleHRlbnNpb24gPiBmaWxlLmV4dCAmJgorCUdJVF9FWFRFUk5BTF9ESUZGPWVjaG8gZ2l0IGRpZmYgZmlsZS5leHQgfCBncmVwIC4uLi4uLl9maWxlXC5leHQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIGZpbGUuZXh0ICYmCisJcm0gZmlsZS5leHQKKycKKworZWNobyAiIyEkU0hFTExfUEFUSCIgPmZha2UtZGlmZi5zaAorY2F0ID4+IGZha2UtZGlmZi5zaCA8PFxFT0YKK2NhdCAkMiA+PiBjcmxmZWQudHh0CitFT0YKK2NobW9kIGEreCBmYWtlLWRpZmYuc2gKKwora2VlcF9vbmx5X2NyICgpIHsKKwl0ciAtZGMgJ1wwMTUnCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4dGVybmFsIGRpZmYgd2l0aCBhdXRvY3JsZiA9IHRydWUnICcKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCUdJVF9FWFRFUk5BTF9ESUZGPS4vZmFrZS1kaWZmLnNoIGdpdCBkaWZmICYmCisJdGVzdCAkKHdjIC1sIDwgY3JsZmVkLnR4dCkgPSAkKGNhdCBjcmxmZWQudHh0IHwga2VlcF9vbmx5X2NyIHwgd2MgLWMpCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1jYWNoZWQnICcKIAlnaXQgYWRkIGZpbGUgJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCBmaWxlICYmCmRpZmYgLS1naXQgYS90L3Q0MDIxLWZvcm1hdC1wYXRjaC1udW1iZXJlZC5zaCBiL3QvdDQwMjEtZm9ybWF0LXBhdGNoLW51bWJlcmVkLnNoCmluZGV4IDM5MGFmMjMuLjcwOWIzMjMgMTAwNzU1Ci0tLSBhL3QvdDQwMjEtZm9ybWF0LXBhdGNoLW51bWJlcmVkLnNoCisrKyBiL3QvdDQwMjEtZm9ybWF0LXBhdGNoLW51bWJlcmVkLnNoCkBAIC04Niw2ICs4NiwxMyBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5udW1iZXJlZCAmJiAtLWtlZXAtc3ViamVjdCcgJworCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWtlZXAtc3ViamVjdCAtLXN0ZG91dCBIRUFEXiA+cGF0Y2g0YSAmJgorCWdyZXAgIl5TdWJqZWN0OiBUaGlyZCIgcGF0Y2g0YQorCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5udW1iZXJlZCA9IGF1dG8nICcKIAogCWdpdCBjb25maWcgZm9ybWF0Lm51bWJlcmVkIGF1dG8KQEAgLTEwOCw0ICsxMTUsMTAgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN0YXJ0LW51bWJlciAmJiAtLW51bWJlcmVkJyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3RhcnQtbnVtYmVyIDMgLS1udW1iZXJlZCAtLXN0ZG91dCBIRUFEfjEgPiBwYXRjaDggJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAzLzNcXSIgcGF0Y2g4CisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAyMy1kaWZmLXJlbmFtZS10eXBlY2hhbmdlLnNoIGIvdC90NDAyMy1kaWZmLXJlbmFtZS10eXBlY2hhbmdlLnNoCmluZGV4IDI5N2RkYjUuLjliZGY2NTkgMTAwNzU1Ci0tLSBhL3QvdDQwMjMtZGlmZi1yZW5hbWUtdHlwZWNoYW5nZS5zaAorKysgYi90L3Q0MDIzLWRpZmYtcmVuYW1lLXR5cGVjaGFuZ2Uuc2gKQEAgLTQsNiArNCwxMiBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAoraWYgISB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCit0aGVuCisJc2F5ICdTeW1ib2xpYyBsaW5rcyBub3Qgc3VwcG9ydGVkLCBza2lwcGluZyB0ZXN0cy4nCisJdGVzdF9kb25lCitmaQorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKIAogCXJtIC1mIGZvbyBiYXIgJiYKZGlmZiAtLWdpdCBhL3QvdDQwMjktZGlmZi10cmFpbGluZy1zcGFjZS5zaCBiL3QvdDQwMjktZGlmZi10cmFpbGluZy1zcGFjZS5zaAppbmRleCA5ZGRiYmNkLi4zY2NjMjM3IDEwMDc1NQotLS0gYS90L3Q0MDI5LWRpZmYtdHJhaWxpbmctc3BhY2Uuc2gKKysrIGIvdC90NDAyOS1kaWZmLXRyYWlsaW5nLXNwYWNlLnNoCkBAIC0xLDQgKzEsNCBAQAotIyEvYmluL2Jhc2gKKyMhL2Jpbi9zaAogIwogIyBDb3B5cmlnaHQgKGMpIEppbSBNZXllcmluZwogIwpkaWZmIC0tZ2l0IGEvdC90NDAzMi1kaWZmLWludGVyLWh1bmstY29udGV4dC5zaCBiL3QvdDQwMzItZGlmZi1pbnRlci1odW5rLWNvbnRleHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTRlM2UyOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzItZGlmZi1pbnRlci1odW5rLWNvbnRleHQuc2gKQEAgLTAsMCArMSw5MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgaHVuayBmdXNpbmcnCisKKy4gLi90ZXN0LWxpYi5zaAorCitmKCkgeworCWVjaG8gJDEKKwlpPTEKKwl3aGlsZSB0ZXN0ICRpIC1sZSAkMgorCWRvCisJCWVjaG8gJGkKKwkJaT0kKGV4cHIgJGkgKyAxKQorCWRvbmUKKwllY2hvICQzCit9CisKK3QoKSB7CisJY2FzZSAkIyBpbgorCTQpIGh1bmtzPSQ0OyBjbWQ9ImRpZmYgLVUkMyI7OworCTUpIGh1bmtzPSQ1OyBjbWQ9ImRpZmYgLVUkMyAtLWludGVyLWh1bmstY29udGV4dD0kNCI7OworCWVzYWMKKwlsYWJlbD0iJGNtZCwgJDEgY29tbW9uICQyIgorCWZpbGU9ZiQxCisJZXhwZWN0ZWQ9ZXhwZWN0ZWQuJGZpbGUuJDMuJGh1bmtzCisKKwlpZiAhIHRlc3QgLWYgJGZpbGUKKwl0aGVuCisJCWYgQSAkMSBCID4kZmlsZQorCQlnaXQgYWRkICRmaWxlCisJCWdpdCBjb21taXQgLXEgLW0uICRmaWxlCisJCWYgWCAkMSBZID4kZmlsZQorCWZpCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbGFiZWw6IGNvdW50IGh1bmtzICgkaHVua3MpIiAiCisJCXRlc3QgJChnaXQgJGNtZCAkZmlsZSB8IGdyZXAgJ15AQCAnIHwgd2MgLWwpID0gJGh1bmtzCisJIgorCisJdGVzdCAtZiAkZXhwZWN0ZWQgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbGFiZWw6IGNoZWNrIG91dHB1dCIgIgorCQlnaXQgJGNtZCAkZmlsZSB8IGdyZXAgLXYgJ15pbmRleCAnID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgJGV4cGVjdGVkIGFjdHVhbAorCSIKK30KKworY2F0IDw8RU9GID5leHBlY3RlZC5mMS4wLjEgfHwgZXhpdCAxCitkaWZmIC0tZ2l0IGEvZjEgYi9mMQorLS0tIGEvZjEKKysrKyBiL2YxCitAQCAtMSwzICsxLDMgQEAKKy1BCisrWAorIDEKKy1CCisrWQorRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0ZWQuZjEuMC4yIHx8IGV4aXQgMQorZGlmZiAtLWdpdCBhL2YxIGIvZjEKKy0tLSBhL2YxCisrKysgYi9mMQorQEAgLTEgKzEgQEAKKy1BCisrWAorQEAgLTMgKzMgQEAgQQorLUIKKytZCitFT0YKKworIyBjb21tb24gbGluZXMJY3R4CWludHJjdHgJaHVua3MKK3QgMSBsaW5lCTAJCTIKK3QgMSBsaW5lCTAJMAkyCit0IDEgbGluZQkwCTEJMQordCAxIGxpbmUJMAkyCTEKK3QgMSBsaW5lCTEJCTEKKwordCAyIGxpbmVzCTAJCTIKK3QgMiBsaW5lcwkwCTAJMgordCAyIGxpbmVzCTAJMQkyCit0IDIgbGluZXMJMAkyCTEKK3QgMiBsaW5lcwkxCQkxCisKK3QgMyBsaW5lcwkxCQkyCit0IDMgbGluZXMJMQkwCTIKK3QgMyBsaW5lcwkxCTEJMQordCAzIGxpbmVzCTEJMgkxCisKK3QgOSBsaW5lcwkzCQkyCit0IDkgbGluZXMJMwkyCTIKK3QgOSBsaW5lcwkzCTMJMQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMzMtZGlmZi1wYXRpZW5jZS5zaCBiL3QvdDQwMzMtZGlmZi1wYXRpZW5jZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZWIxNDk4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzMy1kaWZmLXBhdGllbmNlLnNoCkBAIC0wLDAgKzEsMTY4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGF0aWVuY2UgZGlmZiBhbGdvcml0aG0nCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmZpbGUxIDw8XEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8vIEZyb2JzIGZvbyBoZWFydGlseQoraW50IGZyb2JuaXR6KGludCBmb28pCit7CisgICAgaW50IGk7CisgICAgZm9yKGkgPSAwOyBpIDwgMTA7IGkrKykKKyAgICB7CisgICAgICAgIHByaW50ZigiWW91ciBhbnN3ZXIgaXM6ICIpOworICAgICAgICBwcmludGYoIiVkXG4iLCBmb28pOworICAgIH0KK30KKworaW50IGZhY3QoaW50IG4pCit7CisgICAgaWYobiA+IDEpCisgICAgeworICAgICAgICByZXR1cm4gZmFjdChuLTEpICogbjsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBmcm9ibml0eihmYWN0KDEwKSk7Cit9CitFT0YKKworY2F0ID5maWxlMiA8PFxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgZmliKGludCBuKQoreworICAgIGlmKG4gPiAyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpYihuLTEpICsgZmliKG4tMik7CisgICAgfQorICAgIHJldHVybiAxOworfQorCisvLyBGcm9icyBmb28gaGVhcnRpbHkKK2ludCBmcm9ibml0eihpbnQgZm9vKQoreworICAgIGludCBpOworICAgIGZvcihpID0gMDsgaSA8IDEwOyBpKyspCisgICAgeworICAgICAgICBwcmludGYoIiVkXG4iLCBmb28pOworICAgIH0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGZyb2JuaXR6KGZpYigxMCkpOworfQorRU9GCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTIKK2luZGV4IDZmYWE1YTMuLmUzYWYzMjkgMTAwNjQ0CistLS0gYS9maWxlMQorKysrIGIvZmlsZTIKK0BAIC0xLDI2ICsxLDI1IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCisraW50IGZpYihpbnQgbikKKyt7CisrICAgIGlmKG4gPiAyKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmliKG4tMSkgKyBmaWIobi0yKTsKKysgICAgfQorKyAgICByZXR1cm4gMTsKKyt9CisrCisgLy8gRnJvYnMgZm9vIGhlYXJ0aWx5CisgaW50IGZyb2JuaXR6KGludCBmb28pCisgeworICAgICBpbnQgaTsKKyAgICAgZm9yKGkgPSAwOyBpIDwgMTA7IGkrKykKKyAgICAgeworLSAgICAgICAgcHJpbnRmKCJZb3VyIGFuc3dlciBpczogIik7CisgICAgICAgICBwcmludGYoIiVkXG4iLCBmb28pOworICAgICB9CisgfQorIAorLWludCBmYWN0KGludCBuKQorLXsKKy0gICAgaWYobiA+IDEpCistICAgIHsKKy0gICAgICAgIHJldHVybiBmYWN0KG4tMSkgKiBuOworLSAgICB9CistICAgIHJldHVybiAxOworLX0KKy0KKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgeworLSAgICBmcm9ibml0eihmYWN0KDEwKSk7CisrICAgIGZyb2JuaXR6KGZpYigxMCkpOworIH0KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRpZW5jZSBkaWZmJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IC0tcGF0aWVuY2UgZmlsZTEgZmlsZTIgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aWVuY2UgZGlmZiBvdXRwdXQgaXMgdmFsaWQnICcKKworCW12IGZpbGUyIGV4cGVjdCAmJgorCWdpdCBhcHBseSA8IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMgorCisnCisKK2NhdCA+dW5pcTEgPDxcRU9GCisxCisyCiszCis0Cis1Cis2CitFT0YKKworY2F0ID51bmlxMiA8PFxFT0YKK2EKK2IKK2MKK2QKK2UKK2YKK0VPRgorCitjYXQgPmV4cGVjdCA8PFxFT0YKK2RpZmYgLS1naXQgYS91bmlxMSBiL3VuaXEyCitpbmRleCBiNDE0MTA4Li4wZmRmMzk3IDEwMDY0NAorLS0tIGEvdW5pcTEKKysrKyBiL3VuaXEyCitAQCAtMSw2ICsxLDYgQEAKKy0xCistMgorLTMKKy00CistNQorLTYKKythCisrYgorK2MKKytkCisrZQorK2YKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wbGV0ZWx5IGRpZmZlcmVudCBmaWxlcycgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAtLXBhdGllbmNlIHVuaXExIHVuaXEyID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAzNC1kaWZmLXdvcmRzLnNoIGIvdC90NDAzNC1kaWZmLXdvcmRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ1MDhlZmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0LWRpZmYtd29yZHMuc2gKQEAgLTAsMCArMSwyMDAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd3b3JkIGRpZmYgY29sb3JzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlnaXQgY29uZmlnIGRpZmYuY29sb3Iub2xkIHJlZAorCWdpdCBjb25maWcgZGlmZi5jb2xvci5uZXcgZ3JlZW4KKworJworCitkZWNyeXB0X2NvbG9yICgpIHsKKwlzZWQgXAorCQktZSAncy8uXFsxbS88V0hJVEU+L2cnIFwKKwkJLWUgJ3MvLlxbMzFtLzxSRUQ+L2cnIFwKKwkJLWUgJ3MvLlxbMzJtLzxHUkVFTj4vZycgXAorCQktZSAncy8uXFszNm0vPEJST1dOPi9nJyBcCisJCS1lICdzLy5cW20vPFJFU0VUPi9nJworfQorCit3b3JkX2RpZmYgKCkgeworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggIiRAIiBwcmUgcG9zdCA+IG91dHB1dCAmJgorCWRlY3J5cHRfY29sb3IgPCBvdXRwdXQgPiBvdXRwdXQuZGVjcnlwdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dC5kZWNyeXB0ZWQKK30KKworY2F0ID4gcHJlIDw8XEVPRgoraCg0KQorCithID0gYiArIGMKK0VPRgorCitjYXQgPiBwb3N0IDw8XEVPRgoraCg0KSxoaFs0NF0KKworYSA9IGIgKyBjCisKK2FhID0gYQorCithZWZmID0gYWVmZiAqICggYWFhICkKK0VPRgorCitjYXQgPiBleHBlY3QgPDxcRU9GCis8V0hJVEU+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8V0hJVEU+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+Cis8V0hJVEU+LS0tIGEvcHJlPFJFU0VUPgorPFdISVRFPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8QlJPV04+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgorPFJFRD5oKDQpPFJFU0VUPjxHUkVFTj5oKDQpLGhoWzQ0XTxSRVNFVD4KKzxSRVNFVD4KK2EgPSBiICsgYzxSRVNFVD4KKworPEdSRUVOPmFhID0gYTxSRVNFVD4KKworPEdSRUVOPmFlZmYgPSBhZWZmICogKCBhYWEgKTxSRVNFVD4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JkIGRpZmYgd2l0aCBydW5zIG9mIHdoaXRlc3BhY2UnICcKKworCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzCisKKycKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorPFdISVRFPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPFdISVRFPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorPFdISVRFPi0tLSBhL3ByZTxSRVNFVD4KKzxXSElURT4rKysgYi9wb3N0PFJFU0VUPgorPEJST1dOPkBAIC0xLDMgKzEsNyBAQDxSRVNFVD4KK2goNCksPEdSRUVOPmhoPFJFU0VUPls0NF0KKzxSRVNFVD4KK2EgPSBiICsgYzxSRVNFVD4KKworPEdSRUVOPmFhID0gYTxSRVNFVD4KKworPEdSRUVOPmFlZmYgPSBhZWZmICogKCBhYWE8UkVTRVQ+ICkKK0VPRgorY3AgZXhwZWN0IGV4cGVjdC5sZXR0ZXItcnVucy1hcmUtd29yZHMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd29yZCBkaWZmIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24nICcKKworCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzPSJbYS16XSsiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IGEgZGlmZiBkcml2ZXInICcKKwlnaXQgY29uZmlnIGRpZmYudGVzdGRyaXZlci53b3JkUmVnZXggIlteWzpzcGFjZTpdXSIgJiYKKwljYXQgPDxFT0YgPiAuZ2l0YXR0cmlidXRlcworcHJlIGRpZmY9dGVzdGRyaXZlcgorcG9zdCBkaWZmPXRlc3Rkcml2ZXIKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvcHRpb24gb3ZlcnJpZGVzIC5naXRhdHRyaWJ1dGVzJyAnCisKKwl3b3JkX2RpZmYgLS1jb2xvci13b3Jkcz0iW2Etel0rIgorCisnCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKKzxXSElURT5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxXSElURT5pbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NDxSRVNFVD4KKzxXSElURT4tLS0gYS9wcmU8UkVTRVQ+Cis8V0hJVEU+KysrIGIvcG9zdDxSRVNFVD4KKzxCUk9XTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CitoKDQpPEdSRUVOPixoaFs0NF08UkVTRVQ+Cis8UkVTRVQ+CithID0gYiArIGM8UkVTRVQ+CisKKzxHUkVFTj5hYSA9IGE8UkVTRVQ+CisKKzxHUkVFTj5hZWZmID0gYWVmZiAqICggYWFhICk8UkVTRVQ+CitFT0YKK2NwIGV4cGVjdCBleHBlY3Qubm9uLXdoaXRlc3BhY2UtaXMtd29yZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgcmVnZXggc3VwcGxpZWQgYnkgZHJpdmVyJyAnCisKKwl3b3JkX2RpZmYgLS1jb2xvci13b3JkcworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCBkaWZmLndvcmRSZWdleCBvcHRpb24nICcKKwlnaXQgY29uZmlnIGRpZmYud29yZFJlZ2V4ICJbWzphbG51bTpdXSsiCisnCisKK2NwIGV4cGVjdC5sZXR0ZXItcnVucy1hcmUtd29yZHMgZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQtbGluZSBvdmVycmlkZXMgY29uZmlnJyAnCisJd29yZF9kaWZmIC0tY29sb3Itd29yZHM9IlthLXpdKyIKKycKKworY3AgZXhwZWN0Lm5vbi13aGl0ZXNwYWNlLWlzLXdvcmQgZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRhdHRyaWJ1dGVzIG92ZXJyaWRlIGNvbmZpZycgJworCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBkaWZmIGRyaXZlciByZWdleCcgJworCWdpdCBjb25maWcgLS11bnNldCBkaWZmLnRlc3Rkcml2ZXIud29yZFJlZ2V4CisnCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKKzxXSElURT5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxXSElURT5pbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NDxSRVNFVD4KKzxXSElURT4tLS0gYS9wcmU8UkVTRVQ+Cis8V0hJVEU+KysrIGIvcG9zdDxSRVNFVD4KKzxCUk9XTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CitoKDQpLDxHUkVFTj5oaFs0NDxSRVNFVD5dCis8UkVTRVQ+CithID0gYiArIGM8UkVTRVQ+CisKKzxHUkVFTj5hYSA9IGE8UkVTRVQ+CisKKzxHUkVFTj5hZWZmID0gYWVmZiAqICggYWFhPFJFU0VUPiApCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIGNvbmZpZ3VyZWQgcmVnZXgnICcKKwl3b3JkX2RpZmYgLS1jb2xvci13b3JkcworJworCitlY2hvICdhYWEgKGFhYSknID4gcHJlCitlY2hvICdhYWEgKGFhYSkgYWFhJyA+IHBvc3QKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorPFdISVRFPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPFdISVRFPmluZGV4IGMyOTQ1M2IuLmJlMjJmMzcgMTAwNjQ0PFJFU0VUPgorPFdISVRFPi0tLSBhL3ByZTxSRVNFVD4KKzxXSElURT4rKysgYi9wb3N0PFJFU0VUPgorPEJST1dOPkBAIC0xICsxIEBAPFJFU0VUPgorYWFhIChhYWEpIDxHUkVFTj5hYWE8UkVTRVQ+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBwYXJzaW5nIHdvcmRzIGZvciBuZXdsaW5lJyAnCisKKwl3b3JkX2RpZmYgLS1jb2xvci13b3Jkcz0iYSsiCisKKworJworCitlY2hvICcoOicgPiBwcmUKK2VjaG8gJygnID4gcG9zdAorCitjYXQgPiBleHBlY3QgPDxcRU9GCis8V0hJVEU+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8V0hJVEU+aW5kZXggMjg5Y2I5ZC4uMmQwNmYzNyAxMDA2NDQ8UkVTRVQ+Cis8V0hJVEU+LS0tIGEvcHJlPFJFU0VUPgorPFdISVRFPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8QlJPV04+QEAgLTEgKzEgQEA8UkVTRVQ+CisoPFJFRD46PFJFU0VUPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgd2hlbiB3b3JkcyBhcmUgb25seSByZW1vdmVkIGF0IHRoZSBlbmQnICcKKworCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzPS4KKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTctcXVpZXQuc2ggYi90L3Q0MDM1LWRpZmYtcXVpZXQuc2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHQvdDQwMTctcXVpZXQuc2gKcmVuYW1lIHRvIHQvdDQwMzUtZGlmZi1xdWlldC5zaApkaWZmIC0tZ2l0IGEvdC90NDAyMS1mb3JtYXQtcGF0Y2gtc2lnbmVyLW1pbWUuc2ggYi90L3Q0MDM2LWZvcm1hdC1wYXRjaC1zaWduZXItbWltZS5zaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdC90NDAyMS1mb3JtYXQtcGF0Y2gtc2lnbmVyLW1pbWUuc2gKcmVuYW1lIHRvIHQvdDQwMzYtZm9ybWF0LXBhdGNoLXNpZ25lci1taW1lLnNoCmRpZmYgLS1naXQgYS90L3Q0MDM3LWRpZmYtci10LWRpcnMuc2ggYi90L3Q0MDM3LWRpZmYtci10LWRpcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjVjZTNiMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzctZGlmZi1yLXQtZGlycy5zaApAQCAtMCwwICsxLDUzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGlmZiAtciAtdCBzaG93cyBkaXJlY3RvcnkgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBkYyBkciBkdCAmJgorCT5kYy8xICYmCisJPmRyLzIgJiYKKwk+ZHQvMyAmJgorCT5mYyAmJgorCT5mciAmJgorCT5mdCAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJcm0gLWZyIGR0IGRyIGZ0IGZyICYmCisJbWtkaXIgZGEgZnQgJiYKKwlmb3IgcCBpbiBkYy8xIGRhLzQgZHQgZnQvNSBmYworCWRvCisJCWVjaG8gaGVsbG8gPiRwIHx8IGV4aXQKKwlkb25lICYmCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorQQlkYQorQQlkYS80CitNCWRjCitNCWRjLzEKK0QJZHIKK0QJZHIvMgorQQlkdAorRAlkdAorRAlkdC8zCitNCWZjCitECWZyCitECWZ0CitBCWZ0CitBCWZ0LzUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHZlcmlmeSAnCisJZ2l0IGRpZmYtdHJlZSAtciAtdCAtLW5hbWUtc3RhdHVzIEhFQUReIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDM4LWRpZmYtY29tYmluZWQuc2ggYi90L3Q0MDM4LWRpZmYtY29tYmluZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmNmN2UwMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzgtZGlmZi1jb21iaW5lZC5zaApAQCAtMCwwICsxLDg0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tYmluZWQgZGlmZicKKworLiAuL3Rlc3QtbGliLnNoCisKK3NldHVwX2hlbHBlciAoKSB7CisJb25lPSQxIGJyYW5jaD0kMiBzaWRlPSQzICYmCisKKwlnaXQgYnJhbmNoICRzaWRlICRicmFuY2ggJiYKKwlmb3IgbCBpbiAkb25lIHR3byB0aHJlZSBmeXJhCisJZG8KKwkJZWNobyAkbAorCWRvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICRicmFuY2ggJiYKKwlnaXQgY2hlY2tvdXQgJHNpZGUgJiYKKwlmb3IgbCBpbiAkb25lIHR3byB0aHJlZSBxdWF0cm8KKwlkbworCQllY2hvICRsCisJZG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gJHNpZGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgJGJyYW5jaCAmJgorCWZvciBsIGluICRvbmUgdGhyZWUgZm91cgorCWRvCisJCWVjaG8gJGwKKwlkb25lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAibWVyZ2UgJGJyYW5jaCBpbnRvICRzaWRlIgorfQorCit2ZXJpZnlfaGVscGVyICgpIHsKKwlpdD0kMSAmJgorCisJIyBJZ25vcmUgbGluZXMgdGhhdCB3ZXJlIHJlbW92ZWQgb25seSBmcm9tIHRoZSBvdGhlciBwYXJlbnQKKwlzZWQgLWUgJworCQkxLC9eQEBAL2QKKwkJL14gLS9kCisJCXMvXlwoLlwpLi9cMS8KKwknICIkaXQiID4iJGl0LmFjdHVhbC4xIiAmJgorCXNlZCAtZSAnCisJCTEsL15AQEAvZAorCQkvXi0gL2QKKwkJcy9eLlwoLlwpL1wxLworCScgIiRpdCIgPiIkaXQuYWN0dWFsLjIiICYmCisKKwlnaXQgZGlmZiAiJGl0XiIgIiRpdCIgLS0gfCBzZWQgLWUgJzEsL15AQC9kJyA+IiRpdC5leHBlY3QuMSIgJiYKKwl0ZXN0X2NtcCAiJGl0LmV4cGVjdC4xIiAiJGl0LmFjdHVhbC4xIiAmJgorCisJZ2l0IGRpZmYgIiRpdF4yIiAiJGl0IiAtLSB8IHNlZCAtZSAnMSwvXkBAL2QnID4iJGl0LmV4cGVjdC4yIiAmJgorCXRlc3RfY21wICIkaXQuZXhwZWN0LjIiICIkaXQuYWN0dWFsLjIiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIHdpdGhvbmUgJiYKKwlnaXQgYnJhbmNoIHNhbnNvbmUgJiYKKworCWdpdCBjaGVja291dCB3aXRob25lICYmCisJc2V0dXBfaGVscGVyIG9uZSB3aXRob25lIHNpZGV3aXRob25lICYmCisKKwlnaXQgY2hlY2tvdXQgc2Fuc29uZSAmJgorCXNldHVwX2hlbHBlciAiIiBzYW5zb25lIHNpZGVzYW5zb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGNvbWJpbmVkIG91dHB1dCAoMSknICcKKwlnaXQgc2hvdyBzaWRld2l0aG9uZSAtLSA+c2lkZXdpdGhvbmUgJiYKKwl2ZXJpZnlfaGVscGVyIHNpZGV3aXRob25lCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NoZWNrIGNvbWJpbmVkIG91dHB1dCAoMiknICcKKwlnaXQgc2hvdyBzaWRlc2Fuc29uZSAtLSA+c2lkZXNhbnNvbmUgJiYKKwl2ZXJpZnlfaGVscGVyIHNpZGVzYW5zb25lCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwMi1hcHBseS1yZW5hbWUuc2ggYi90L3Q0MTAyLWFwcGx5LXJlbmFtZS5zaAppbmRleCBkNDJhYmZmLi4xNTk3OTY1IDEwMDc1NQotLS0gYS90L3Q0MTAyLWFwcGx5LXJlbmFtZS5zaAorKysgYi90L3Q0MTAyLWFwcGx5LXJlbmFtZS5zaApAQCAtMzEsMTQgKzMxLDE2IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIGFwcGx5IFwKICAgICAnZ2l0IGFwcGx5IC0taW5kZXggLS1zdGF0IC0tc3VtbWFyeSAtLWFwcGx5IHRlc3QtcGF0Y2gnCiAKLWlmIFsgIiQoZ2l0IGNvbmZpZyAtLWdldCBjb3JlLmZpbGVtb2RlKSIgPSBmYWxzZSBdCitpZiB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIGNvcmUuZmlsZW1vZGUpIiA9IGZhbHNlCiB0aGVuCiAJc2F5ICdmaWxlbW9kZSBkaXNhYmxlZCBvbiB0aGUgZmlsZXN5c3RlbScKIGVsc2UKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzIHZhbGlkYXRlIFwKLQkgICAgJ3Rlc3QgLWYgYmFyICYmIGxzIC1sIGJhciB8IGdyZXAgIl4tLi54Li4uLi4uIicKKwl0ZXN0X3NldF9wcmVyZXEgRklMRU1PREUKIGZpCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgdmFsaWRhdGUgXAorCSAgICAndGVzdCAtZiBiYXIgJiYgbHMgLWwgYmFyIHwgZ3JlcCAiXi0uLnguLi4uLi4iJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSByZXZlcnNlJyBcCiAgICAgJ2dpdCBhcHBseSAtUiAtLWluZGV4IC0tc3RhdCAtLXN1bW1hcnkgLS1hcHBseSB0ZXN0LXBhdGNoICYmCiAgICAgIHRlc3QgIiQoY2F0IGZvbykiID0gIlRoaXMgaXMgZm9vIicKZGlmZiAtLWdpdCBhL3QvdDQxMDYtYXBwbHktc3RkaW4uc2ggYi90L3Q0MTA2LWFwcGx5LXN0ZGluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcyNDY3YTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA2LWFwcGx5LXN0ZGluLnNoCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgLS1udW1zdGF0IC0gPHBhdGNoJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+dGV4dCAmJgorCWdpdCBhZGQgdGV4dCAmJgorCWVjaG8gZ29vZGJ5ZSA+dGV4dCAmJgorCWdpdCBkaWZmID5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXBwbHkgLS1udW1zdGF0IC0gPCBwYXRjaCcgJworCWVjaG8gIjEJMQl0ZXh0IiA+ZXhwZWN0ICYmCisJZ2l0IGFwcGx5IC0tbnVtc3RhdCAtIDxwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXBwbHkgLS1udW1zdGF0IC0gPCBwYXRjaCBwYXRjaCcgJworCWZvciBpIGluIDEgMjsgZG8gZWNobyAiMQkxCXRleHQiOyBkb25lID5leHBlY3QgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IC0gPCBwYXRjaCBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTQtYXBwbHktdHlwZWNoYW5nZS5zaCBiL3QvdDQxMTQtYXBwbHktdHlwZWNoYW5nZS5zaAppbmRleCAwZjE4NWNhLi45OWVjMTNkIDEwMDc1NQotLS0gYS90L3Q0MTE0LWFwcGx5LXR5cGVjaGFuZ2Uuc2gKKysrIGIvdC90NDExNC1hcHBseS10eXBlY2hhbmdlLnNoCkBAIC05LDYgKzksMTIgQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwordGhlbgorCXNheSAnU3ltYm9saWMgbGlua3Mgbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcgdGVzdHMuJworCXRlc3RfZG9uZQorZmkKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeSBhbmQgY29tbWl0cycgJwogCWVjaG8gImhlbGxvIHdvcmxkIiA+IGZvbyAmJgogCWVjaG8gImhpIHBsYW5ldCIgPiBiYXIgJiYKZGlmZiAtLWdpdCBhL3QvdDQxMTUtYXBwbHktc3ltbGluay5zaCBiL3QvdDQxMTUtYXBwbHktc3ltbGluay5zaAppbmRleCA5YWNlNTc4Li5iODUyZTU4IDEwMDc1NQotLS0gYS90L3Q0MTE1LWFwcGx5LXN5bWxpbmsuc2gKKysrIGIvdC90NDExNS1hcHBseS1zeW1saW5rLnNoCkBAIC05LDYgKzksMTIgQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwordGhlbgorCXNheSAnU3ltYm9saWMgbGlua3Mgbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcgdGVzdHMuJworCXRlc3RfZG9uZQorZmkKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCiAKIAlsbiAtcyBwYXRoMS9wYXRoMi9wYXRoMy9wYXRoNC9wYXRoNSBsaW5rMSAmJgpkaWZmIC0tZ2l0IGEvdC90NDExOC1hcHBseS1lbXB0eS1jb250ZXh0LnNoIGIvdC90NDExOC1hcHBseS1lbXB0eS1jb250ZXh0LnNoCmluZGV4IGY5MmUyNTkuLjY1ZjJlNGMgMTAwNzU1Ci0tLSBhL3QvdDQxMTgtYXBwbHktZW1wdHktY29udGV4dC5zaAorKysgYi90L3Q0MTE4LWFwcGx5LWVtcHR5LWNvbnRleHQuc2gKQEAgLTIwLDEwICsyMCwxMCBAQAogCQljYXQgZmlsZTEgJiYKIAkJZWNobyBRIHwgdHIgLWQgIlxcMDEyIgogCX0gPmZpbGUyICYmCi0JY2F0IGZpbGUyID5maWxlMi5vcmlnCisJY2F0IGZpbGUyID5maWxlMi5vcmlnICYmCiAJZ2l0IGFkZCBmaWxlMSBmaWxlMiAmJgogCXNlZCAtZSAiL15CL2QiIDxmaWxlMS5vcmlnID5maWxlMSAmJgotCXNlZCAtZSAiL15bQlFdL2QiIDxmaWxlMi5vcmlnID5maWxlMiAmJgorCWNhdCBmaWxlMSA+IGZpbGUyICYmCiAJZWNobyBRIHwgdHIgLWQgIlxcMDEyIiA+PmZpbGUyICYmCiAJY2F0IGZpbGUxID5maWxlMS5tb2RzICYmCiAJY2F0IGZpbGUyID5maWxlMi5tb2RzICYmCmRpZmYgLS1naXQgYS90L3Q0MTIyLWFwcGx5LXN5bWxpbmstaW5zaWRlLnNoIGIvdC90NDEyMi1hcHBseS1zeW1saW5rLWluc2lkZS5zaAppbmRleCA4NDE3NzNmLi4wZDNjMWQ1IDEwMDc1NQotLS0gYS90L3Q0MTIyLWFwcGx5LXN5bWxpbmstaW5zaWRlLnNoCisrKyBiL3QvdDQxMjItYXBwbHktc3ltbGluay1pbnNpZGUuc2gKQEAgLTMsNiArMywxMiBAQAogdGVzdF9kZXNjcmlwdGlvbj0nYXBwbHkgdG8gZGVlcGVyIGRpcmVjdG9yeSB3aXRob3V0IGdldHRpbmcgZm9vbGVkIHdpdGggc3ltbGluaycKIC4gLi90ZXN0LWxpYi5zaAogCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKK3RoZW4KKwlzYXkgJ1N5bWJvbGljIGxpbmtzIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIHRlc3RzLicKKwl0ZXN0X2RvbmUKK2ZpCisKIGxlY2hvICgpIHsKIAlmb3IgbF8KIAlkbwpkaWZmIC0tZ2l0IGEvdC90NDEyNC1hcHBseS13cy1ydWxlLnNoIGIvdC90NDEyNC1hcHBseS13cy1ydWxlLnNoCmluZGV4IGY4MzMyMmUuLmZhYzIwOTMgMTAwNzU1Ci0tLSBhL3QvdDQxMjQtYXBwbHktd3MtcnVsZS5zaAorKysgYi90L3Q0MTI0LWFwcGx5LXdzLXJ1bGUuc2gKQEAgLTE0OCw0ICsxNDgsMjYgQEAKIAlkb25lCiBkb25lCiAKK2NyZWF0ZV9wYXRjaCAoKSB7CisJc2VkIC1lICJzL18vIC8iIDw8LVxFT0YKKwkJZGlmZiAtLWdpdCBhL3RhcmdldCBiL3RhcmdldAorCQlpbmRleCBlNjlkZTI5Li44YmQ2NjQ4IDEwMDY0NAorCQktLS0gYS90YXJnZXQKKwkJKysrIGIvdGFyZ2V0CisJCUBAIC0wLDAgKzEsMyBAQAorCQkrQW4gZW1wdHkgbGluZSBmb2xsb3dzCisJCSsKKwkJK0EgbGluZSB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UgYW5kIG5vIG5ld2xpbmVfCisJCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFpbGluZyB3aGl0ZXNwYWNlICYgbm8gbmV3bGluZSBhdCB0aGUgZW5kIG9mIGZpbGUnICcKKwk+dGFyZ2V0ICYmCisJY3JlYXRlX3BhdGNoID5wYXRjaC1maWxlICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2gtZmlsZSAmJgorCWdyZXAgIm5ld2xpbmUkIiB0YXJnZXQgJiYKKwlncmVwICJeJCIgdGFyZ2V0CisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyOS1hcHBseS1zYW1lbW9kZS5zaCBiL3QvdDQxMjktYXBwbHktc2FtZW1vZGUuc2gKaW5kZXggYWRmY2JiNS4uZmM3YWYwNCAxMDA3NTUKLS0tIGEvdC90NDEyOS1hcHBseS1zYW1lbW9kZS5zaAorKysgYi90L3Q0MTI5LWFwcGx5LXNhbWVtb2RlLnNoCkBAIC00LDYgKzQsMTMgQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKK2lmIHRlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5maWxlbW9kZSkiID0gZmFsc2UKK3RoZW4KKwlzYXkgJ2ZpbGVtb2RlIGRpc2FibGVkIG9uIHRoZSBmaWxlc3lzdGVtJworZWxzZQorCXRlc3Rfc2V0X3ByZXJlcSBGSUxFTU9ERQorZmkKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCiAJZWNobyBvcmlnaW5hbCA+ZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgpAQCAtMTYsMTQgKzIzLDE0IEBACiAJZ2l0IGRpZmYgLS1zdGF0IC1wID5wYXRjaC0xLnR4dAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIG1vZGUgKG5vIGluZGV4KScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnc2FtZSBtb2RlIChubyBpbmRleCknICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJY2htb2QgK3ggZmlsZSAmJgogCWdpdCBhcHBseSBwYXRjaC0wLnR4dCAmJgogCXRlc3QgLXggZmlsZQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIG1vZGUgKHdpdGggaW5kZXgpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdzYW1lIG1vZGUgKHdpdGggaW5kZXgpJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWNobW9kICt4IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKQEAgLTMyLDcgKzM5LDcgQEAKIAlnaXQgZGlmZiAtLWV4aXQtY29kZQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIG1vZGUgKGluZGV4IG9ubHkpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdzYW1lIG1vZGUgKGluZGV4IG9ubHkpJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWNobW9kICt4IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKQEAgLTQwLDIwICs0NywyMCBAQAogCWdpdCBscy1maWxlcyAtcyBmaWxlIHwgZ3JlcCAiXjEwMDc1NSIKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kZSB1cGRhdGUgKG5vIGluZGV4KScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnbW9kZSB1cGRhdGUgKG5vIGluZGV4KScgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgYXBwbHkgcGF0Y2gtMS50eHQgJiYKIAl0ZXN0IC14IGZpbGUKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kZSB1cGRhdGUgKHdpdGggaW5kZXgpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdtb2RlIHVwZGF0ZSAod2l0aCBpbmRleCknICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2gtMS50eHQgJiYKIAl0ZXN0IC14IGZpbGUgJiYKIAlnaXQgZGlmZiAtLWV4aXQtY29kZQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RlIHVwZGF0ZSAoaW5kZXggb25seSknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgJ21vZGUgdXBkYXRlIChpbmRleCBvbmx5KScgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgYXBwbHkgLS1jYWNoZWQgcGF0Y2gtMS50eHQgJiYKIAlnaXQgbHMtZmlsZXMgLXMgZmlsZSB8IGdyZXAgIl4xMDA3NTUiCmRpZmYgLS1naXQgYS90L3Q0MTMwLWFwcGx5LWNyaXNzLWNyb3NzLXJlbmFtZS5zaCBiL3QvdDQxMzAtYXBwbHktY3Jpc3MtY3Jvc3MtcmVuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdjZmEyZDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTMwLWFwcGx5LWNyaXNzLWNyb3NzLXJlbmFtZS5zaApAQCAtMCwwICsxLDY2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IGhhbmRsaW5nIGNyaXNzLWNyb3NzIHJlbmFtZSBwYXRjaC4nCisuIC4vdGVzdC1saWIuc2gKKworY3JlYXRlX2ZpbGUoKSB7CisJY250PTAKKwl3aGlsZSB0ZXN0ICRjbnQgLWxlIDEwMAorCWRvCisJCWNudD0kKCgkY250ICsgMSkpCisJCWVjaG8gIiQyIiA+PiAiJDEiCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWNyZWF0ZV9maWxlIGZpbGUxICJGaWxlMSBjb250ZW50cyIgJiYKKwljcmVhdGVfZmlsZSBmaWxlMiAiRmlsZTIgY29udGVudHMiICYmCisJY3JlYXRlX2ZpbGUgZmlsZTMgIkZpbGUzIGNvbnRlbnRzIiAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgZmlsZTMgJiYKKwlnaXQgY29tbWl0IC1tIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3Jpc3MtY3Jvc3MgcmVuYW1lJyAnCisJbXYgZmlsZTEgdG1wICYmCisJbXYgZmlsZTIgZmlsZTEgJiYKKwltdiB0bXAgZmlsZTIgJiYKKwljcCBmaWxlMSBmaWxlMS1zd2FwcGVkICYmCisJY3AgZmlsZTIgZmlsZTItc3dhcHBlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1NIC1CJyAnCisJZ2l0IGRpZmYgLU0gLUIgPiBkaWZmICYmCisJZ2l0IHJlc2V0IC0taGFyZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5JyAnCisJZ2l0IGFwcGx5IGRpZmYgJiYKKwl0ZXN0X2NtcCBmaWxlMSBmaWxlMS1zd2FwcGVkICYmCisJdGVzdF9jbXAgZmlsZTIgZmlsZTItc3dhcHBlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmlzcy1jcm9zcyByZW5hbWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJbXYgZmlsZTEgdG1wICYmCisJbXYgZmlsZTIgZmlsZTEgJiYKKwltdiBmaWxlMyBmaWxlMgorCW12IHRtcCBmaWxlMyAmJgorCWNwIGZpbGUxIGZpbGUxLXN3YXBwZWQgJiYKKwljcCBmaWxlMiBmaWxlMi1zd2FwcGVkICYmCisJY3AgZmlsZTMgZmlsZTMtc3dhcHBlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1NIC1CJyAnCisJZ2l0IGRpZmYgLU0gLUIgPiBkaWZmICYmCisJZ2l0IHJlc2V0IC0taGFyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseScgJworCWdpdCBhcHBseSBkaWZmICYmCisJdGVzdF9jbXAgZmlsZTEgZmlsZTEtc3dhcHBlZCAmJgorCXRlc3RfY21wIGZpbGUyIGZpbGUyLXN3YXBwZWQgJiYKKwl0ZXN0X2NtcCBmaWxlMyBmaWxlMy1zd2FwcGVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzMS1hcHBseS1mYWtlLWFuY2VzdG9yLnNoIGIvdC90NDEzMS1hcHBseS1mYWtlLWFuY2VzdG9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0MzczY2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTMxLWFwcGx5LWZha2UtYW5jZXN0b3Iuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBTdGVwaGVuIEJveWQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IC0tYnVpbGQtZmFrZS1hbmNlc3RvciBoYW5kbGluZy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IDEgJiYKKwl0ZXN0X2NvbW1pdCAyICYmCisJbWtkaXIgc3ViICYmCisJdGVzdF9jb21taXQgMyBzdWIvMyAmJgorCXRlc3RfY29tbWl0IDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1idWlsZC1mYWtlLWFuY2VzdG9yJyAnCisJZ2l0IGNoZWNrb3V0IDIgJiYKKwllY2hvICJBIiA+IDEudCAmJgorCWdpdCBkaWZmID4gMS5wYXRjaCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgMSAmJgorCWdpdCBhcHBseSAtLWJ1aWxkLWZha2UtYW5jZXN0b3IgMS5hbmNlc3RvciAxLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tYnVpbGQtZmFrZS1hbmNlc3RvciBpbiBhIHN1YmRpcmVjdG9yeScgJworCWdpdCBjaGVja291dCAzICYmCisJZWNobyAiQyIgPiBzdWIvMy50ICYmCisJZ2l0IGRpZmYgPiAzLnBhdGNoICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCA0ICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGFwcGx5IC0tYnVpbGQtZmFrZS1hbmNlc3RvciAzLmFuY2VzdG9yIC4uLzMucGF0Y2ggJiYKKwkJdGVzdCAtZiAzLmFuY2VzdG9yCisJKSAmJgorCWdpdCBhcHBseSAtLWJ1aWxkLWZha2UtYW5jZXN0b3IgMy5hbmNlc3RvciAzLnBhdGNoICYmCisJdGVzdF9jbXAgc3ViLzMuYW5jZXN0b3IgMy5hbmNlc3RvcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxNTAtYW0uc2ggYi90L3Q0MTUwLWFtLnNoCmluZGV4IDc5NmY3OTUuLmExMmJmODQgMTAwNzU1Ci0tLSBhL3QvdDQxNTAtYW0uc2gKKysrIGIvdC90NDE1MC1hbS5zaApAQCAtMTgwLDYgKzE4MCwxNyBAQAogCXRlc3QgLXogIiQoZ2l0IGRpZmYgbG9yZW0pIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyAtcSBpcyBxdWlldCcgJworCWdpdCByZXNldCBtYXN0ZXIyIC0taGFyZCAmJgorCXNlZCAtbiAtZSAiMyxcJHAiIG1zZyA+ZmlsZSAmJgorCWhlYWQgLW4gOSBtc2cgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiY29waWVkIHN0dWZmIiAmJgorCWdpdCBhbSAtMyAtcSBsb3JlbS1tb3ZlLnBhdGNoID4gb3V0cHV0Lm91dCAyPiYxICYmCisJISB0ZXN0IC1zIG91dHB1dC5vdXQKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gcGF1c2VzIG9uIGNvbmZsaWN0JyAnCiAJZ2l0IGNoZWNrb3V0IGxvcmVtMl5eICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIGxvcmVtLW1vdmUucGF0Y2ggJiYKQEAgLTI1Nyw0ICsyNjgsNjcgQEAKIAl0ZXN0IC16ICIkKGdpdCBkaWZmIHNlY29uZCkiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUnICcKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYW0gLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSBwYXRjaDEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIi9eJC9xIiA+aGVhZDEgJiYKKwlhdD0kKHNlZCAtbmUgIi9eYXV0aG9yIC9zLy4qPiAvL3AiIGhlYWQxKSAmJgorCWN0PSQoc2VkIC1uZSAiL15jb21taXR0ZXIgL3MvLio+IC8vcCIgaGVhZDEpICYmCisJdGVzdCAiJGF0IiA9ICIkY3QiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGhvdXQgLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZScgJworCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhbSBwYXRjaDEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIi9eJC9xIiA+aGVhZDEgJiYKKwlhdD0kKHNlZCAtbmUgIi9eYXV0aG9yIC9zLy4qPiAvL3AiIGhlYWQxKSAmJgorCWN0PSQoc2VkIC1uZSAiL15jb21taXR0ZXIgL3MvLio+IC8vcCIgaGVhZDEpICYmCisJdGVzdCAiJGF0IiAhPSAiJGN0IgorJworCisjIFRoaXMgY2hlY2tzIGZvciArMDAwMCBiZWNhdXNlIFRaIGlzIHNldCB0byBVVEMgYW5kIHRoYXQgc2hvdWxkCisjIHNob3cgdXAgd2hlbiB0aGUgY3VycmVudCB0aW1lIGlzIHVzZWQuIFRoZSBkYXRlIGluIG1lc3NhZ2UgaXMgc2V0CisjIGJ5IHRlc3RfdGljayB0aGF0IHVzZXMgLTA3MDAgdGltZXpvbmU7IGlmIHRoaXMgZmVhdHVyZSBkb2VzIG5vdAorIyB3b3JrLCB3ZSB3aWxsIHNlZSB0aGF0IGluc3RlYWQgb2YgKzAwMDAuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLWlnbm9yZS1kYXRlJyAnCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFtIC0taWdub3JlLWRhdGUgcGF0Y2gxICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIvXiQvcSIgPmhlYWQxICYmCisJYXQ9JChzZWQgLW5lICIvXmF1dGhvciAvcy8uKj4gLy9wIiBoZWFkMSkgJiYKKwllY2hvICIkYXQiIHwgZ3JlcCAiKzAwMDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGludG8gYW4gdW5ib3JuIGJyYW5jaCcgJworCXJtIC1mciBzdWJkaXIgJiYKKwlta2RpciAtcCBzdWJkaXIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbnVtYmVyZWQtZmlsZXMgLW8gc3ViZGlyIC0xIGZpcnN0ICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGFtIDEKKwkpICYmCisJcmVzdWx0PSQoCisJCWNkIHN1YmRpciAmJiBnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9CisJKSAmJgorCXRlc3QgInokcmVzdWx0IiA9ICJ6JChnaXQgcmV2LXBhcnNlIGZpcnN0Xnt0cmVlfSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIG5ld2xpbmUgaW4gc3ViamVjdCcgJworCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCXNlZCAtZSAicy9zZWNvbmQvc2Vjb25kIFxcXG4gZm9vLyIgcGF0Y2gxID4gcGF0Y2hubCAmJgorCWdpdCBhbSA8IHBhdGNobmwgPiBvdXRwdXQub3V0IDI+JjEgJiYKKwlncmVwICJeQXBwbHlpbmc6IHNlY29uZCBcXFxuIGZvbyQiIG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLXEgaXMgcXVpZXQnICcKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYW0gLXEgPCBwYXRjaDEgPiBvdXRwdXQub3V0IDI+JjEgJiYKKwkhIHRlc3QgLXMgb3V0cHV0Lm91dAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDAtcmVyZXJlLnNoIGIvdC90NDIwMC1yZXJlcmUuc2gKaW5kZXggYjY4YWIxMS4uYTZiYzAyOCAxMDA3NTUKLS0tIGEvdC90NDIwMC1yZXJlcmUuc2gKKysrIGIvdC90NDIwMC1yZXJlcmUuc2gKQEAgLTU3LDcgKzU3LDcgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlyc3QKICcKIAotc2hhMT0kKHNlZCAtZSAncy8JLiovLycgLmdpdC9NRVJHRV9SUikKK3NoYTE9JChwZXJsIC1wZSAncy8JLiovLycgLmdpdC9NRVJHRV9SUikKIHJyPS5naXQvcnItY2FjaGUvJHNoYTEKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY29yZGVkIHByZWltYWdlJyAiZ3JlcCBePT09PT09PSQgJHJyL3ByZWltYWdlIgogCkBAIC0xOTAsOCArMTkwLDYgQEAKIAlnaXQgYWRkIGZpbGUyICYmCiAJZ2l0IGNvbW1pdCAtbSB2ZXJzaW9uMiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmb3VydGggJiYKLQlzaGExPSQoc2VkIC1lICJzLwkuKi8vIiAuZ2l0L01FUkdFX1JSKSAmJgotCXJyPS5naXQvcnItY2FjaGUvJHNoYTEgJiYKIAllY2hvIENlbGxvID4gZmlsZTIgJiYKIAlnaXQgYWRkIGZpbGUyICYmCiAJZ2l0IGNvbW1pdCAtbSByZXNvbHV0aW9uCmRpZmYgLS1naXQgYS90L3Q0MjAyLWxvZy5zaCBiL3QvdDQyMDItbG9nLnNoCmluZGV4IDBhYjkyNWMuLjQ4ZTAwODggMTAwNzU1Ci0tLSBhL3QvdDQyMDItbG9nLnNoCisrKyBiL3QvdDQyMDItbG9nLnNoCkBAIC0xNiwyNyArMTYsNzEgQEAKIAl0ZXN0X3RpY2sgJiYKIAlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgogCisJZ2l0IG12IG9uZSBpY2hpICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCisJY3AgaWNoaSBlaW4gJiYKKwlnaXQgYWRkIGVpbiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZm91cnRoICYmCisKIAlta2RpciBhICYmCiAJZWNobyBuaSA+YS90d28gJiYKIAlnaXQgYWRkIGEvdHdvICYmCiAJdGVzdF90aWNrICYmCi0JZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCWdpdCBjb21taXQgLW0gZmlmdGggICYmCiAKLQllY2hvIHNhbiA+YS90aHJlZSAmJgotCWdpdCBhZGQgYS90aHJlZSAmJgorCWdpdCBybSBhL3R3byAmJgogCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gZm91cnRoICYmCisJZ2l0IGNvbW1pdCAtbSBzaXh0aAogCi0JZ2l0IHJtIGEvdGhyZWUgJiYKLQl0ZXN0X3RpY2sgJiYKLQlnaXQgY29tbWl0IC1tIGZpZnRoCisnCiAKK3ByaW50ZiAic2l4dGhcbmZpZnRoXG5mb3VydGhcbnRoaXJkXG5zZWNvbmRcbmluaXRpYWwiID4gZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHknICcKKworCWdpdCBsb2cgLS1wcmV0dHk9ImZvcm1hdDolcyIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3ByaW50ZiAic2l4dGhcbmZpZnRoXG5mb3VydGhcbnRoaXJkXG5zZWNvbmRcbmluaXRpYWxcbiIgPiBleHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXR0eSAodGZvcm1hdCknICcKKworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JXMiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHkgKHNob3J0Y3V0KScgJworCisJZ2l0IGxvZyAtLXByZXR0eT0iJXMiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQnICcKKworCWdpdCBsb2cgLS1mb3JtYXQ9IiVzIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorODA0YTc4NyBzaXh0aAorMzk0ZWY3OCBmaWZ0aAorNWQzMTE1OSBmb3VydGgKKzJmYmU4YzAgdGhpcmQKK2Y3ZGFiOGUgc2Vjb25kCiszYTJmZGNiIGluaXRpYWwKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25lbGluZScgJworCisJZ2l0IGxvZyAtLW9uZWxpbmUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsdGVyPUEnICcKIAogCWFjdHVhbD0kKGdpdCBsb2cgLS1wcmV0dHk9ImZvcm1hdDolcyIgLS1kaWZmLWZpbHRlcj1BIEhFQUQpICYmCi0JZXhwZWN0PSQoZWNobyBmb3VydGggOyBlY2hvIHRoaXJkIDsgZWNobyBpbml0aWFsKSAmJgorCWV4cGVjdD0kKGVjaG8gZmlmdGggOyBlY2hvIGZvdXJ0aCA7IGVjaG8gdGhpcmQgOyBlY2hvIGluaXRpYWwpICYmCiAJdGVzdCAiJGFjdHVhbCIgPSAiJGV4cGVjdCIgfHwgewogCQllY2hvIE9vcHMKIAkJZWNobyAiQWN0dWFsOiAkYWN0dWFsIgpAQCAtNjAsNyArMTA0LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsdGVyPUQnICcKIAogCWFjdHVhbD0kKGdpdCBsb2cgLS1wcmV0dHk9ImZvcm1hdDolcyIgLS1kaWZmLWZpbHRlcj1EIEhFQUQpICYmCi0JZXhwZWN0PSQoZWNobyBmaWZ0aCkgJiYKKwlleHBlY3Q9JChlY2hvIHNpeHRoIDsgZWNobyB0aGlyZCkgJiYKIAl0ZXN0ICIkYWN0dWFsIiA9ICIkZXhwZWN0IiB8fCB7CiAJCWVjaG8gT29wcwogCQllY2hvICJBY3R1YWw6ICRhY3R1YWwiCkBAIC02OSw5ICsxMTMsNjYgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbHRlcj1SJyAnCisKKwlhY3R1YWw9JChnaXQgbG9nIC1NIC0tcHJldHR5PSJmb3JtYXQ6JXMiIC0tZGlmZi1maWx0ZXI9UiBIRUFEKSAmJgorCWV4cGVjdD0kKGVjaG8gdGhpcmQpICYmCisJdGVzdCAiJGFjdHVhbCIgPSAiJGV4cGVjdCIgfHwgeworCQllY2hvIE9vcHMKKwkJZWNobyAiQWN0dWFsOiAkYWN0dWFsIgorCQlmYWxzZQorCX0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbHRlcj1DJyAnCisKKwlhY3R1YWw9JChnaXQgbG9nIC1DIC1DIC0tcHJldHR5PSJmb3JtYXQ6JXMiIC0tZGlmZi1maWx0ZXI9QyBIRUFEKSAmJgorCWV4cGVjdD0kKGVjaG8gZm91cnRoKSAmJgorCXRlc3QgIiRhY3R1YWwiID0gIiRleHBlY3QiIHx8IHsKKwkJZWNobyBPb3BzCisJCWVjaG8gIkFjdHVhbDogJGFjdHVhbCIKKwkJZmFsc2UKKwl9CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLWZvbGxvdycgJworCisJYWN0dWFsPSQoZ2l0IGxvZyAtLWZvbGxvdyAtLXByZXR0eT0iZm9ybWF0OiVzIiBpY2hpKSAmJgorCWV4cGVjdD0kKGVjaG8gdGhpcmQgOyBlY2hvIHNlY29uZCA7IGVjaG8gaW5pdGlhbCkgJiYKKwl0ZXN0ICIkYWN0dWFsIiA9ICIkZXhwZWN0IiB8fCB7CisJCWVjaG8gT29wcworCQllY2hvICJBY3R1YWw6ICRhY3R1YWwiCisJCWZhbHNlCisJfQorCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKzgwNGE3ODcgc2l4dGgKKzM5NGVmNzggZmlmdGgKKzVkMzExNTkgZm91cnRoCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1uby13YWxrIDxjb21taXRzPiBzb3J0cyBieSBjb21taXQgdGltZScgJworCWdpdCBsb2cgLS1uby13YWxrIC0tb25lbGluZSA1ZDMxMTU5IDgwNGE3ODcgMzk0ZWY3OCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorNWQzMTE1OSBmb3VydGgKKzgwNGE3ODcgc2l4dGgKKzM5NGVmNzggZmlmdGgKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNob3cgPGNvbW1pdHM+IGxlYXZlcyBsaXN0IG9mIGNvbW1pdHMgYXMgZ2l2ZW4nICcKKwlnaXQgc2hvdyAtLW9uZWxpbmUgLXMgNWQzMTE1OSA4MDRhNzg3IDM5NGVmNzggPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNhc2Ugc2Vuc2l0aXZpdHkgdGVzdHMnICcKIAllY2hvIGNhc2UgPm9uZSAmJgogCXRlc3RfdGljayAmJgorCWdpdCBhZGQgb25lCiAJZ2l0IGNvbW1pdCAtYSAtbSBTZWNvbmQKICcKIApAQCAtOTMsNSArMTk0LDE3NyBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAorY2F0ID4gZXhwZWN0IDw8RU9GCisqIFNlY29uZAorKiBzaXh0aAorKiBmaWZ0aAorKiBmb3VydGgKKyogdGhpcmQKKyogc2Vjb25kCisqIGluaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgbG9nIC0tZ3JhcGgnICcKKwlnaXQgbG9nIC0tZ3JhcGggLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgbWVyZ2UgaGlzdG9yeScgJworCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUR+NCAmJgorCXRlc3RfY29tbWl0IHNpZGUtMSAxIDEgJiYKKwl0ZXN0X2NvbW1pdCBzaWRlLTIgMiAyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSBzaWRlCisnCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKKyogICBNZXJnZSBicmFuY2ggJ3NpZGUnCit8XAorfCAqIHNpZGUtMgorfCAqIHNpZGUtMQorKiB8IFNlY29uZAorKiB8IHNpeHRoCisqIHwgZmlmdGgKKyogfCBmb3VydGgKK3wvCisqIHRoaXJkCisqIHNlY29uZAorKiBpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBtZXJnZScgJworCWdpdCBsb2cgLS1ncmFwaCAtLWRhdGUtb3JkZXIgLS1wcmV0dHk9dGZvcm1hdDolcyB8CisJCXNlZCAicy8gKiQvLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorKiAgIGNvbW1pdCBtYXN0ZXIKK3xcICBNZXJnZTogQSBCCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKK3wgfAorfCAqIGNvbW1pdCBzaWRlCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIHNpZGUtMgorfCB8Cit8ICogY29tbWl0IHRhZ3Mvc2lkZS0xCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIHNpZGUtMQorfCB8CisqIHwgY29tbWl0IG1hc3Rlcn4xCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIFNlY29uZAorfCB8CisqIHwgY29tbWl0IG1hc3Rlcn4yCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIHNpeHRoCit8IHwKKyogfCBjb21taXQgbWFzdGVyfjMKK3wgfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwKK3wgfCAgICAgZmlmdGgKK3wgfAorKiB8IGNvbW1pdCBtYXN0ZXJ+NAorfC8gIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wKK3wgICAgICAgZm91cnRoCit8CisqIGNvbW1pdCB0YWdzL3NpZGUtMX4xCit8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wKK3wgICAgIHRoaXJkCit8CisqIGNvbW1pdCB0YWdzL3NpZGUtMX4yCit8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wKK3wgICAgIHNlY29uZAorfAorKiBjb21taXQgdGFncy9zaWRlLTF+MworICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisKKyAgICAgIGluaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIGZ1bGwgb3V0cHV0JyAnCisJZ2l0IGxvZyAtLWdyYXBoIC0tZGF0ZS1vcmRlciAtLXByZXR0eT1zaG9ydCB8CisJCWdpdCBuYW1lLXJldiAtLW5hbWUtb25seSAtLXN0ZGluIHwKKwkJc2VkICJzL01lcmdlOi4qL01lcmdlOiBBIEIvO3MvICokLy8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBtb3JlIHRhbmdsZWQgaGlzdG9yeScgJworCWdpdCBjaGVja291dCAtYiB0YW5nbGUgSEVBRH42ICYmCisJdGVzdF9jb21taXQgdGFuZ2xlLWEgdGFuZ2xlLWEgYSAmJgorCWdpdCBtZXJnZSBtYXN0ZXJ+MyAmJgorCWdpdCBtZXJnZSBzaWRlfjEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIHRhbmdsZSAmJgorCWdpdCBjaGVja291dCAtYiByZWFjaCAmJgorCXRlc3RfY29tbWl0IHJlYWNoICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBvY3RvcHVzLWEgJiYKKwl0ZXN0X2NvbW1pdCBvY3RvcHVzLWEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIG9jdG9wdXMtYiAmJgorCXRlc3RfY29tbWl0IG9jdG9wdXMtYiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBzZXZlbnRoICYmCisJZ2l0IG1lcmdlIG9jdG9wdXMtYSBvY3RvcHVzLWIKKwlnaXQgbWVyZ2UgcmVhY2gKKycKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorKiAgIE1lcmdlIGJyYW5jaCAncmVhY2gnCit8XAorfCBcCit8ICBcCisqLS4gXCAgIE1lcmdlIGJyYW5jaGVzICdvY3RvcHVzLWEnIGFuZCAnb2N0b3B1cy1iJworfFwgXCBcCisqIHwgfCB8IHNldmVudGgKK3wgfCAqIHwgb2N0b3B1cy1iCit8IHwvIC8KK3wvfCB8Cit8ICogfCBvY3RvcHVzLWEKK3wvIC8KK3wgKiByZWFjaAorfC8KKyogICBNZXJnZSBicmFuY2ggJ3RhbmdsZScKK3xcCit8ICogICBNZXJnZSBicmFuY2ggJ3NpZGUnIChlYXJseSBwYXJ0KSBpbnRvIHRhbmdsZQorfCB8XAorfCAqIFwgICBNZXJnZSBicmFuY2ggJ21hc3RlcicgKGVhcmx5IHBhcnQpIGludG8gdGFuZ2xlCit8IHxcIFwKK3wgKiB8IHwgdGFuZ2xlLWEKKyogfCB8IHwgICBNZXJnZSBicmFuY2ggJ3NpZGUnCit8XCBcIFwgXAorfCAqIHwgfCB8IHNpZGUtMgorfCB8IHxffC8KK3wgfC98IHwKK3wgKiB8IHwgc2lkZS0xCisqIHwgfCB8IFNlY29uZAorKiB8IHwgfCBzaXh0aAorfCB8X3wvCit8L3wgfAorKiB8IHwgZmlmdGgKKyogfCB8IGZvdXJ0aAorfC8gLworKiB8IHRoaXJkCit8LworKiBzZWNvbmQKKyogaW5pdGlhbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbWVyZ2UnICcKKwlnaXQgbG9nIC0tZ3JhcGggLS1kYXRlLW9yZGVyIC0tcHJldHR5PXRmb3JtYXQ6JXMgfAorCQlzZWQgInMvICokLy8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQogCmRpZmYgLS1naXQgYS90L3Q0MjAzLW1haWxtYXAuc2ggYi90L3Q0MjAzLW1haWxtYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWE3ZDFiNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMDMtbWFpbG1hcC5zaApAQCAtMCwwICsxLDIxNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Jy5tYWlsbWFwIGNvbmZpZ3VyYXRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBvbmUgPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyB0d28gPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIm5pY2sxIDxidWdzQGNvbXBhbnkueHg+IiAtbSBzZWNvbmQKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitBIFUgVGhvciAoMSk6CisgICAgICBpbml0aWFsCisKK25pY2sxICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTm8gbWFpbG1hcCcgJworCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorUmVwbyBHdXkgKDEpOgorICAgICAgaW5pdGlhbAorCituaWNrMSAoMSk6CisgICAgICBzZWNvbmQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgLm1haWxtYXAnICcKKwllY2hvICJSZXBvIEd1eSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPiAubWFpbG1hcCAmJgorCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVXNpbmcgYSBtYWlsbWFwIGZpbGUgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHJlcG8gaGVyZSwgYnV0CisjIGNvdWxkIGp1c3QgYXMgd2VsbCBoYXZlIGJlZW4gYSBmaWxlIG91dHNpZGUgb2YgdGhlIHJlcG9zaXRvcnkKK2NhdCA+ZXhwZWN0IDw8XEVPRgorSW50ZXJuYWwgR3V5ICgxKToKKyAgICAgIHNlY29uZAorCitSZXBvIEd1eSAoMSk6CisgICAgICBpbml0aWFsCisKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5maWxlIHNldCcgJworCW1rZGlyIGludGVybmFsX21haWxtYXAgJiYKKwllY2hvICJJbnRlcm5hbCBHdXkgPGJ1Z3NAY29tcGFueS54eD4iID4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWdpdCBjb25maWcgbWFpbG1hcC5maWxlIGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwlnaXQgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK0V4dGVybmFsIEd1eSAoMSk6CisgICAgICBpbml0aWFsCisKK0ludGVybmFsIEd1eSAoMSk6CisgICAgICBzZWNvbmQKKworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmZpbGUgb3ZlcnJpZGUnICcKKwllY2hvICJFeHRlcm5hbCBHdXkgPGF1dGhvckBleGFtcGxlLmNvbT4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwlnaXQgY29uZmlnIG1haWxtYXAuZmlsZSBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitSZXBvIEd1eSAoMSk6CisgICAgICBpbml0aWFsCisKK25pY2sxICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5maWxlIG5vbi1leGlzdGFudCcgJworCXJtIGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwlybWRpciBpbnRlcm5hbF9tYWlsbWFwICYmCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitBIFUgVGhvciAoMSk6CisgICAgICBpbml0aWFsCisKK25pY2sxICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05vIG1haWxtYXAgZmlsZXMsIGJ1dCBjb25maWd1cmVkJyAnCisJcm0gLm1haWxtYXAgJiYKKwlnaXQgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIEV4dGVuZGVkIG1haWxtYXAgY29uZmlndXJhdGlvbnMgc2hvdWxkIGdpdmUgdXMgdGhlIGZvbGxvd2luZyBvdXRwdXQgZm9yIHNob3J0bG9nCitjYXQgPmV4cGVjdCA8PFxFT0YKK0EgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+ICgxKToKKyAgICAgIGluaXRpYWwKKworQ1RPIDxjdG9AY29tcGFueS54eD4gKDEpOgorICAgICAgc2V2ZW50aAorCitPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4gKDIpOgorICAgICAgdGhpcmQKKyAgICAgIGZvdXJ0aAorCitTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PiAoMik6CisgICAgICBmaWZ0aAorICAgICAgc2l4dGgKKworU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+ICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2hvcnRsb2cgb3V0cHV0IChjb21wbGV4IG1hcHBpbmcpJyAnCisJZWNobyB0aHJlZSA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAibmljazIgPGJ1Z3NAY29tcGFueS54eD4iIC1tIHRoaXJkICYmCisKKwllY2hvIGZvdXIgPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIm5pY2syIDxuaWNrMkBjb21wYW55Lnh4PiIgLW0gZm91cnRoICYmCisKKwllY2hvIGZpdmUgPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgInNhbnRhIDxtZUBjb21wYW55Lnh4PiIgLW0gZmlmdGggJiYKKworCWVjaG8gc2l4ID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJjbGF1cyA8bWVAY29tcGFueS54eD4iIC1tIHNpeHRoICYmCisKKwllY2hvIHNldmVuID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJDVE8gPGN0b0Bjb29tcGFueS54eD4iIC1tIHNldmVudGggJiYKKworCW1rZGlyIGludGVybmFsX21haWxtYXAgJiYKKwllY2hvICJDb21taXR0ZWQgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4iID4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWVjaG8gIjxjdG9AY29tcGFueS54eD4gICAgICAgICAgICAgICAgICAgICAgIDxjdG9AY29vbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+ICAgICAgICAgbmljazEgPGJ1Z3NAY29tcGFueS54eD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwllY2hvICJPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4gICBuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWVjaG8gIk90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PiAgICAgICAgIDxuaWNrMkBjb21wYW55Lnh4PiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWVjaG8gIlNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+IDxtZUBjb21wYW55Lnh4PiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWVjaG8gIlNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+IDxtZUBjb21wYW55Lnh4PiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCisJZ2l0IHNob3J0bG9nIC1lIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCisjIGdpdCBsb2cgd2l0aCAtLXByZXR0eSBmb3JtYXQgd2hpY2ggdXNlcyB0aGUgbmFtZSBhbmQgZW1haWwgbWFpbG1hcCBwbGFjZW1hcmtlcnMKK2NhdCA+ZXhwZWN0IDw8XEVPRgorQXV0aG9yIENUTyA8Y3RvQGNvb21wYW55Lnh4PiBtYXBzIHRvIENUTyA8Y3RvQGNvbXBhbnkueHg+CitDb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCitBdXRob3IgY2xhdXMgPG1lQGNvbXBhbnkueHg+IG1hcHMgdG8gU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KK0NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisKK0F1dGhvciBzYW50YSA8bWVAY29tcGFueS54eD4gbWFwcyB0byBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorQ29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gbWFwcyB0byBDb21taXR0ZWQgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKworQXV0aG9yIG5pY2syIDxuaWNrMkBjb21wYW55Lnh4PiBtYXBzIHRvIE90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PgorQ29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gbWFwcyB0byBDb21taXR0ZWQgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKworQXV0aG9yIG5pY2syIDxidWdzQGNvbXBhbnkueHg+IG1hcHMgdG8gT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+CitDb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCitBdXRob3IgbmljazEgPGJ1Z3NAY29tcGFueS54eD4gbWFwcyB0byBTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4KK0NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisKK0F1dGhvciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiBtYXBzIHRvIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitDb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xvZyBvdXRwdXQgKGNvbXBsZXggbWFwcGluZyknICcKKwlnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDoiQXV0aG9yICVhbiA8JWFlPiBtYXBzIHRvICVhTiA8JWFFPiVuQ29tbWl0dGVyICVjbiA8JWNlPiBtYXBzIHRvICVjTiA8JWNFPiVuIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIGdpdCBibGFtZQorY2F0ID5leHBlY3QgPDxcRU9GCiteM2EyZmRjYiAoQSBVIFRob3IgICAgIDIwMDUtMDQtMDcgMTU6MTM6MTMgLTA3MDAgMSkgb25lCis3ZGU2Zjk5YiAoU29tZSBEdWRlICAgIDIwMDUtMDQtMDcgMTU6MTM6MTMgLTA3MDAgMikgdHdvCis1ODE1ODc5ZCAoT3RoZXIgQXV0aG9yIDIwMDUtMDQtMDcgMTU6MTQ6MTMgLTA3MDAgMykgdGhyZWUKK2ZmODU5ZDk2IChPdGhlciBBdXRob3IgMjAwNS0wNC0wNyAxNToxNToxMyAtMDcwMCA0KSBmb3VyCis1YWI2ZDRmYSAoU2FudGEgQ2xhdXMgIDIwMDUtMDQtMDcgMTU6MTY6MTMgLTA3MDAgNSkgZml2ZQorMzhhNDJkOGIgKFNhbnRhIENsYXVzICAyMDA1LTA0LTA3IDE1OjE3OjEzIC0wNzAwIDYpIHNpeAorOGRkYzAzODYgKENUTyAgICAgICAgICAyMDA1LTA0LTA3IDE1OjE4OjEzIC0wNzAwIDcpIHNldmVuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQmxhbWUgb3V0cHV0IChjb21wbGV4IG1hcHBpbmcpJyAnCisJZ2l0IGJsYW1lIG9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDQtcGF0Y2gtaWQuc2ggYi90L3Q0MjA0LXBhdGNoLWlkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA0ZjdiYWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjA0LXBhdGNoLWlkLnNoCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcGF0Y2gtaWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXRpYWwgZm9vIGEgJiYKKwl0ZXN0X2NvbW1pdCBmaXJzdCBmb28gYiAmJgorCWdpdCBjaGVja291dCAtYiBzYW1lIEhFQUReICYmCisJdGVzdF9jb21taXQgc2FtZS1tc2cgZm9vIGIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbm90c2FtZSBIRUFEXiAmJgorCXRlc3RfY29tbWl0IG5vdHNhbWUtbXNnIGZvbyBjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoLWlkIG91dHB1dCBpcyB3ZWxsLWZvcm1lZCcgJworCWdpdCBsb2cgLXAgLTEgfCBnaXQgcGF0Y2gtaWQgPiBvdXRwdXQgJiYKKwlncmVwICJeW2EtZjAtOV1cezQwXH0gJChnaXQgcmV2LXBhcnNlIEhFQUQpJCIgb3V0cHV0CisnCisKK2dldF9wYXRjaF9pZCAoKSB7CisJZ2l0IGxvZyAtcCAtMSAiJDEiIHwgZ2l0IHBhdGNoLWlkIHwKKwkJc2VkICJzIyAuKiMjIiA+IHBhdGNoLWlkXyIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gtaWQgZGV0ZWN0cyBlcXVhbGl0eScgJworCWdldF9wYXRjaF9pZCBtYXN0ZXIgJiYKKwlnZXRfcGF0Y2hfaWQgc2FtZSAmJgorCXRlc3RfY21wIHBhdGNoLWlkX21hc3RlciBwYXRjaC1pZF9zYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoLWlkIGRldGVjdHMgaW5lcXVhbGl0eScgJworCWdldF9wYXRjaF9pZCBtYXN0ZXIgJiYKKwlnZXRfcGF0Y2hfaWQgbm90c2FtZSAmJgorCSEgdGVzdF9jbXAgcGF0Y2gtaWRfbWFzdGVyIHBhdGNoLWlkX25vdHNhbWUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjUyLWFtLW9wdGlvbnMuc2ggYi90L3Q0MjUyLWFtLW9wdGlvbnMuc2gKaW5kZXggM2FiOWU4ZS4uZjYwM2MxYiAxMDA3NTUKLS0tIGEvdC90NDI1Mi1hbS1vcHRpb25zLnNoCisrKyBiL3QvdDQyNTItYW0tb3B0aW9ucy5zaApAQCAtMSw2ICsxLDYgQEAKICMhL2Jpbi9zaAogCi10ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYW0gbm90IGxvc2luZyBvcHRpb25zJwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFtIHdpdGggb3B0aW9ucyBhbmQgbm90IGxvc2luZyB0aGVtJwogLiAuL3Rlc3QtbGliLnNoCiAKIHRtPSIkVEVTVF9ESVJFQ1RPUlkvdDQyNTIiCkBAIC01MCw0ICs1MCwyOSBAQAogCWdyZXAgIl5UaHJlZSQiIGZpbGUtMgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBhbSAtLWRpcmVjdG9yeT0iZnJvdHogbml0Zm9sIicgJworCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLWRpcmVjdG9yeT0iZnJvdHogbml0Zm9sIiAiJHRtIi9hbS10ZXN0LTUtPyAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwlncmVwIE9uZSAiZnJvdHogbml0Zm9sL2ZpbGUtNSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgdG8gYSBmdW5ueSBwYXRoJyAnCisJd2l0aF9zcT0id2l0aCdcJydzcSIKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlnaXQgYW0gLS1kaXJlY3Rvcnk9IiR3aXRoX3NxIiAiJHRtIi9hbS10ZXN0LTUtMiAmJgorCXRlc3QgLWYgIiR3aXRoX3NxL2ZpbGUtNSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1yZWplY3QnICcKKwlybSAtcmYgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1yZWplY3QgIiR0bSIvYW0tdGVzdC02LTEgJiYKKwlncmVwICJAQCAtMSwzICsxLDMgQEAiIGZpbGUtMi5yZWogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZSAtLXF1aWV0IGZpbGUtMiAmJgorCWdyZXAgIlstXS1yZWplY3QiIC5naXQvcmViYXNlLWFwcGx5L2FwcGx5LW9wdAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC01LTEgYi90L3Q0MjUyL2FtLXRlc3QtNS0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhN2JmMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtNS0xCkBAIC0wLDAgKzEsMjAgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IFNpeAorCitBcHBseWluZyB0aGlzIHBhdGNoIHdpdGggLS1kaXJlY3Rvcnk9J2Zyb3R6IG5pdGZvbCcgc2hvdWxkIGZhaWwKKworZGlmZiAtLWdpdCBpL2p1bmsvZmlsZS0yIHcvanVuay9maWxlLTIKK2luZGV4IDA2ZTU2N2IuLmI2ZjNhMTYgMTAwNjQ0CistLS0gaS9qdW5rL2ZpbGUtMgorKysrIHcvanVuay9maWxlLTIKK0BAIC0xLDcgKzEsNyBAQAorIE9uZQorIDIKKy0zCisrVGhyZWUKKyA0CisgNQorLTYKKytTaXgKKyA3CmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtNS0yIGIvdC90NDI1Mi9hbS10ZXN0LTUtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzMwMjViCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTUtMgpAQCAtMCwwICsxLDE1IEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBTaXgKKworQXBwbHlpbmcgdGhpcyBwYXRjaCB3aXRoIC0tZGlyZWN0b3J5PSdmcm90eiBuaXRmb2wnIHNob3VsZCBzdWNjZWVkCisKK2RpZmYgLS1naXQgaS9maWxlLTUgdy9maWxlLTUKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAuLjFkNmVkOWYKKy0tLSAvZGV2L251bGwKKysrKyB3L2ZpbGUtNQorQEAgLTAsMCArMSwzIEBACisrT25lCisrdHdvCisrdGhyZWUKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC02LTEgYi90L3Q0MjUyL2FtLXRlc3QtNi0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ODU5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtNi0xCkBAIC0wLDAgKzEsMjEgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IEh1aAorCitTaG91bGQgZmFpbCBhbmQgbGVhdmUgcmVqZWN0cworCitkaWZmIC0tZ2l0IGkvZmlsZS0yIHcvZmlsZS0yCitpbmRleCAwNmU1NjdiLi5iNmYzYTE2IDEwMDY0NAorLS0tIGkvZmlsZS0yCisrKysgdy9maWxlLTIKK0BAIC0xLDMgKzEsMyBAQAorLTAKKytPbmUKKyAyCisgMworQEAgLTQsNCArNCw0IEBACisgNAorIDUKKy02CisrU2l4CisgNwpkaWZmIC0tZ2l0IGEvdC90NTAwMC10YXItdHJlZS5zaCBiL3QvdDUwMDAtdGFyLXRyZWUuc2gKaW5kZXggYzk0MmM4Yi4uNWY4NGIxOCAxMDA3NTUKLS0tIGEvdC90NTAwMC10YXItdHJlZS5zaAorKysgYi90L3Q1MDAwLXRhci10cmVlLnNoCkBAIC0zNyw3ICszNywxMSBAQAogICAgICBjcCAvYmluL3NoIGEvYmluICYmCiAgICAgIHByaW50ZiAiQVwkRm9ybWF0OiVzXCRPIiAiJFNVQlNURk9STUFUIiA+YS9zdWJzdGZpbGUxICYmCiAgICAgIHByaW50ZiAiQSBub3Qgc3Vic3RpdHV0ZWQgTyIgPmEvc3Vic3RmaWxlMiAmJgotICAgICBsbiAtcyBhIGEvbDEgJiYKKyAgICAgaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUzsgdGhlbgorCWxuIC1zIGEgYS9sMQorICAgICBlbHNlCisJcHJpbnRmICVzIGEgPiBhL2wxCisgICAgIGZpICYmCiAgICAgIChwPWxvbmdfcGF0aF90b19hX2ZpbGUgJiYgY2QgYSAmJgogICAgICAgZm9yIGRlcHRoIGluIDEgMiAzIDQgNTsgZG8gbWtkaXIgJHAgJiYgY2QgJHA7IGRvbmUgJiYKICAgICAgIGVjaG8gdGV4dCA+ZmlsZV93aXRoX2xvbmdfcGF0aCkgJiYKQEAgLTQ2LDcgKzUwLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdhZGQgaWdub3JlZCBmaWxlJyBcCiAgICAgJ2VjaG8gaWdub3JlIG1lID5hL2lnbm9yZWQgJiYKLSAgICAgZWNobyBpZ25vcmVkIGV4cG9ydC1pZ25vcmUgPi5naXRhdHRyaWJ1dGVzJworICAgICBlY2hvIGlnbm9yZWQgZXhwb3J0LWlnbm9yZSA+LmdpdC9pbmZvL2F0dHJpYnV0ZXMnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdhZGQgZmlsZXMgdG8gcmVwb3NpdG9yeScgXApAQCAtNjAsNyArNjQsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2NyZWF0ZSBiYXJlIGNsb25lJyBcCiAgICAgJ2dpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmdpdCAmJgotICAgICBjcCAuZ2l0YXR0cmlidXRlcyBiYXJlLmdpdC9pbmZvL2F0dHJpYnV0ZXMnCisgICAgIGNwIC5naXQvaW5mby9hdHRyaWJ1dGVzIGJhcmUuZ2l0L2luZm8vYXR0cmlidXRlcycKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3JlbW92ZSBpZ25vcmVkIGZpbGUnIFwKQEAgLTc2LDcgKzgwLDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdCBhcmNoaXZlIHZzLiBnaXQgdGFyLXRyZWUnIFwKLSAgICAnZGlmZiBiLnRhciBiMi50YXInCisgICAgJ3Rlc3RfY21wIGIudGFyIGIyLnRhcicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdCBhcmNoaXZlIGluIGEgYmFyZSByZXBvJyBcCkBAIC04NiwxOCArOTAsMjYgQEAKICAgICAnZ2l0IGFyY2hpdmUgdnMuIHRoZSBzYW1lIGluIGEgYmFyZSByZXBvJyBcCiAgICAgJ3Rlc3RfY21wIGIudGFyIGIzLnRhcicKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgd2l0aCAtLW91dHB1dCcgXAorICAgICdnaXQgYXJjaGl2ZSAtLW91dHB1dD1iNC50YXIgSEVBRCAmJgorICAgIHRlc3RfY21wIGIudGFyIGI0LnRhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgLS1yZW1vdGUnIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1yZW1vdGU9LiBIRUFEID5iNS50YXIgJiYKKyAgICB0ZXN0X2NtcCBiLnRhciBiNS50YXInCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd2YWxpZGF0ZSBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lJyBcCiAgICAgJ21rZGlyIGV4dHJhY3QgJiYKICAgICAgIiRUQVIiIHhmIGIudGFyIC1DIGV4dHJhY3QgYS9hICYmCiAgICAgIHRlc3QtY2htdGltZSAtdiArMCBleHRyYWN0L2EvYSB8Y3V0IC1mIDEgPmIubXRpbWUgJiYKICAgICAgZWNobyAiMTExNzIzMTIwMCIgPmV4cGVjdGVkLm10aW1lICYmCi0gICAgIGRpZmYgZXhwZWN0ZWQubXRpbWUgYi5tdGltZScKKyAgICAgdGVzdF9jbXAgZXhwZWN0ZWQubXRpbWUgYi5tdGltZScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdCBnZXQtdGFyLWNvbW1pdC1pZCcgXAogICAgICdnaXQgZ2V0LXRhci1jb21taXQtaWQgPGIudGFyID5iLmNvbW1pdGlkICYmCi0gICAgIGRpZmYgLmdpdC8kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgYi5jb21taXRpZCcKKyAgICAgdGVzdF9jbXAgLmdpdC8kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgYi5jb21taXRpZCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2V4dHJhY3QgdGFyIGFyY2hpdmUnIFwKQEAgLTEwNiw3ICsxMTgsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZhbGlkYXRlIGZpbGVuYW1lcycgXAogICAgICcoY2QgYi9hICYmIGZpbmQgLikgfCBzb3J0ID5iLmxzdCAmJgotICAgICBkaWZmIGEubHN0IGIubHN0JworICAgICB0ZXN0X2NtcCBhLmxzdCBiLmxzdCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZhbGlkYXRlIGZpbGUgY29udGVudHMnIFwKQEAgLTEyMyw3ICsxMzUsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZhbGlkYXRlIGZpbGVuYW1lcyB3aXRoIHByZWZpeCcgXAogICAgICcoY2QgYy9wcmVmaXgvYSAmJiBmaW5kIC4pIHwgc29ydCA+Yy5sc3QgJiYKLSAgICAgZGlmZiBhLmxzdCBjLmxzdCcKKyAgICAgdGVzdF9jbXAgYS5sc3QgYy5sc3QnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd2YWxpZGF0ZSBmaWxlIGNvbnRlbnRzIHdpdGggcHJlZml4JyBcCkBAIC0xMzEsMTAgKzE0MywxMSBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnY3JlYXRlIGFyY2hpdmVzIHdpdGggc3Vic3RmaWxlcycgXAotICAgICdlY2hvICJzdWJzdGZpbGU/IiBleHBvcnQtc3Vic3QgPmEvLmdpdGF0dHJpYnV0ZXMgJiYKKyAgICAnY3AgLmdpdC9pbmZvL2F0dHJpYnV0ZXMgLmdpdC9pbmZvL2F0dHJpYnV0ZXMuYmVmb3JlICYmCisgICAgIGVjaG8gInN1YnN0ZmlsZT8iIGV4cG9ydC1zdWJzdCA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCiAgICAgIGdpdCBhcmNoaXZlIEhFQUQgPmYudGFyICYmCiAgICAgIGdpdCBhcmNoaXZlIC0tcHJlZml4PXByZWZpeC8gSEVBRCA+Zy50YXIgJiYKLSAgICAgcm0gYS8uZ2l0YXR0cmlidXRlcycKKyAgICAgbXYgLmdpdC9pbmZvL2F0dHJpYnV0ZXMuYmVmb3JlIC5naXQvaW5mby9hdHRyaWJ1dGVzJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnZXh0cmFjdCBzdWJzdGZpbGVzJyBcCkBAIC0xNDQsOCArMTU3LDggQEAKICAgICAgJ3ZhbGlkYXRlIHN1YnN0ZmlsZSBjb250ZW50cycgXAogICAgICAnZ2l0IGxvZyAtLW1heC1jb3VudD0xICItLXByZXR0eT1mb3JtYXQ6QSR7U1VCU1RGT1JNQVR9TyIgSEVBRCBcCiAgICAgICA+Zi9hL3N1YnN0ZmlsZTEuZXhwZWN0ZWQgJiYKLSAgICAgIGRpZmYgZi9hL3N1YnN0ZmlsZTEuZXhwZWN0ZWQgZi9hL3N1YnN0ZmlsZTEgJiYKLSAgICAgIGRpZmYgYS9zdWJzdGZpbGUyIGYvYS9zdWJzdGZpbGUyCisgICAgICB0ZXN0X2NtcCBmL2Evc3Vic3RmaWxlMS5leHBlY3RlZCBmL2Evc3Vic3RmaWxlMSAmJgorICAgICAgdGVzdF9jbXAgYS9zdWJzdGZpbGUyIGYvYS9zdWJzdGZpbGUyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApAQCAtMTU2LDggKzE2OSw4IEBACiAgICAgICd2YWxpZGF0ZSBzdWJzdGZpbGUgY29udGVudHMgZnJvbSBhcmNoaXZlIHdpdGggcHJlZml4JyBcCiAgICAgICdnaXQgbG9nIC0tbWF4LWNvdW50PTEgIi0tcHJldHR5PWZvcm1hdDpBJHtTVUJTVEZPUk1BVH1PIiBIRUFEIFwKICAgICAgID5nL3ByZWZpeC9hL3N1YnN0ZmlsZTEuZXhwZWN0ZWQgJiYKLSAgICAgIGRpZmYgZy9wcmVmaXgvYS9zdWJzdGZpbGUxLmV4cGVjdGVkIGcvcHJlZml4L2Evc3Vic3RmaWxlMSAmJgotICAgICAgZGlmZiBhL3N1YnN0ZmlsZTIgZy9wcmVmaXgvYS9zdWJzdGZpbGUyCisgICAgICB0ZXN0X2NtcCBnL3ByZWZpeC9hL3N1YnN0ZmlsZTEuZXhwZWN0ZWQgZy9wcmVmaXgvYS9zdWJzdGZpbGUxICYmCisgICAgICB0ZXN0X2NtcCBhL3N1YnN0ZmlsZTIgZy9wcmVmaXgvYS9zdWJzdGZpbGUyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApAQCAtMTcyLDIzICsxODUsMjcgQEAKICAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIHZzLiB0aGUgc2FtZSBpbiBhIGJhcmUgcmVwbycgXAogICAgICd0ZXN0X2NtcCBkLnppcCBkMS56aXAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCB3aXRoIC0tb3V0cHV0JyBcCisgICAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCAtLW91dHB1dD1kMi56aXAgSEVBRCAmJgorICAgIHRlc3RfY21wIGQuemlwIGQyLnppcCcKKwogJFVOWklQIC12ID4vZGV2L251bGwgMj4mMQogaWYgWyAkPyAtZXEgMTI3IF07IHRoZW4KLQllY2hvICJTa2lwcGluZyBaSVAgdGVzdHMsIGJlY2F1c2UgdW56aXAgd2FzIG5vdCBmb3VuZCIKLQl0ZXN0X2RvbmUKLQlleGl0CisJc2F5ICJTa2lwcGluZyBaSVAgdGVzdHMsIGJlY2F1c2UgdW56aXAgd2FzIG5vdCBmb3VuZCIKK2Vsc2UKKwl0ZXN0X3NldF9wcmVyZXEgVU5aSVAKIGZpCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCBcCiAgICAgJ2V4dHJhY3QgWklQIGFyY2hpdmUnIFwKICAgICAnKG1rZGlyIGQgJiYgY2QgZCAmJiAkVU5aSVAgLi4vZC56aXApJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgXAogICAgICd2YWxpZGF0ZSBmaWxlbmFtZXMnIFwKICAgICAnKGNkIGQvYSAmJiBmaW5kIC4pIHwgc29ydCA+ZC5sc3QgJiYKLSAgICAgZGlmZiBhLmxzdCBkLmxzdCcKKyAgICAgdGVzdF9jbXAgYS5sc3QgZC5sc3QnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCBcCiAgICAgJ3ZhbGlkYXRlIGZpbGUgY29udGVudHMnIFwKICAgICAnZGlmZiAtciBhIGQvYScKIApAQCAtMTk2LDE2ICsyMTMsMTYgQEAKICAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIHdpdGggcHJlZml4JyBcCiAgICAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCAtLXByZWZpeD1wcmVmaXgvIEhFQUQgPmUuemlwJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgXAogICAgICdleHRyYWN0IFpJUCBhcmNoaXZlIHdpdGggcHJlZml4JyBcCiAgICAgJyhta2RpciBlICYmIGNkIGUgJiYgJFVOWklQIC4uL2UuemlwKScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFVOWklQIFwKICAgICAndmFsaWRhdGUgZmlsZW5hbWVzIHdpdGggcHJlZml4JyBcCiAgICAgJyhjZCBlL3ByZWZpeC9hICYmIGZpbmQgLikgfCBzb3J0ID5lLmxzdCAmJgotICAgICBkaWZmIGEubHN0IGUubHN0JworICAgICB0ZXN0X2NtcCBhLmxzdCBlLmxzdCcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFVOWklQIFwKICAgICAndmFsaWRhdGUgZmlsZSBjb250ZW50cyB3aXRoIHByZWZpeCcgXAogICAgICdkaWZmIC1yIGEgZS9wcmVmaXgvYScKIApkaWZmIC0tZ2l0IGEvdC90NTAwMS1hcmNoaXZlLWF0dHIuc2ggYi90L3Q1MDAxLWFyY2hpdmUtYXR0ci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MjZiMzE5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwMS1hcmNoaXZlLWF0dHIuc2gKQEAgLTAsMCArMSw5MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcmNoaXZlIGF0dHJpYnV0ZSB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK1NVQlNURk9STUFUPSVIJW4KKwordGVzdF9leHBlY3RfZXhpc3RzKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiAkMSBleGlzdHMiICJ0ZXN0IC1lICQxIgorfQorCit0ZXN0X2V4cGVjdF9taXNzaW5nKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiAkMSBkb2VzIG5vdCBleGlzdCIgInRlc3QgISAtZSAkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGlnbm9yZWQgPmlnbm9yZWQgJiYKKwllY2hvIGlnbm9yZWQgZXhwb3J0LWlnbm9yZSA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCBpZ25vcmVkICYmCisKKwllY2hvIGlnbm9yZWQgYnkgdHJlZSA+aWdub3JlZC1ieS10cmVlICYmCisJZWNobyBpZ25vcmVkLWJ5LXRyZWUgZXhwb3J0LWlnbm9yZSA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgYWRkIGlnbm9yZWQtYnktdHJlZSAuZ2l0YXR0cmlidXRlcyAmJgorCisJZWNobyBpZ25vcmVkIGJ5IHdvcmt0cmVlID5pZ25vcmVkLWJ5LXdvcmt0cmVlICYmCisJZWNobyBpZ25vcmVkLWJ5LXdvcmt0cmVlIGV4cG9ydC1pZ25vcmUgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCBpZ25vcmVkLWJ5LXdvcmt0cmVlICYmCisKKwlwcmludGYgIkFcJEZvcm1hdDolc1wkTyIgIiRTVUJTVEZPUk1BVCIgPm5vc3Vic3RmaWxlICYmCisJcHJpbnRmICJBXCRGb3JtYXQ6JXNcJE8iICIkU1VCU1RGT1JNQVQiID5zdWJzdGZpbGUxICYmCisJcHJpbnRmICJBIG5vdCBzdWJzdGl0dXRlZCBPIiA+c3Vic3RmaWxlMiAmJgorCWVjaG8gInN1YnN0ZmlsZT8iIGV4cG9ydC1zdWJzdCA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCBub3N1YnN0ZmlsZSBzdWJzdGZpbGUxIHN1YnN0ZmlsZTIgJiYKKworCWdpdCBjb21taXQgLW0uICYmCisKKwlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZSAmJgorCWNwIC5naXQvaW5mby9hdHRyaWJ1dGVzIGJhcmUvaW5mby9hdHRyaWJ1dGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlJyAnCisJZ2l0IGFyY2hpdmUgSEVBRCA+YXJjaGl2ZS50YXIgJiYKKwkobWtkaXIgYXJjaGl2ZSAmJiBjZCBhcmNoaXZlICYmICIkVEFSIiB4ZiAtKSA8YXJjaGl2ZS50YXIKKycKKwordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL2lnbm9yZWQKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9pZ25vcmVkLWJ5LXRyZWUKK3Rlc3RfZXhwZWN0X2V4aXN0cwlhcmNoaXZlL2lnbm9yZWQtYnktd29ya3RyZWUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgd2l0aCB3b3JrdHJlZSBhdHRyaWJ1dGVzJyAnCisJZ2l0IGFyY2hpdmUgLS13b3JrdHJlZS1hdHRyaWJ1dGVzIEhFQUQgPndvcmt0cmVlLnRhciAmJgorCShta2RpciB3b3JrdHJlZSAmJiBjZCB3b3JrdHJlZSAmJiAiJFRBUiIgeGYgLSkgPHdvcmt0cmVlLnRhcgorJworCit0ZXN0X2V4cGVjdF9taXNzaW5nCXdvcmt0cmVlL2lnbm9yZWQKK3Rlc3RfZXhwZWN0X2V4aXN0cwl3b3JrdHJlZS9pZ25vcmVkLWJ5LXRyZWUKK3Rlc3RfZXhwZWN0X21pc3NpbmcJd29ya3RyZWUvaWdub3JlZC1ieS13b3JrdHJlZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSB2cy4gYmFyZScgJworCShjZCBiYXJlICYmIGdpdCBhcmNoaXZlIEhFQUQpID5iYXJlLWFyY2hpdmUudGFyICYmCisJdGVzdF9jbXAgYXJjaGl2ZS50YXIgYmFyZS1hcmNoaXZlLnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSB3aXRoIHdvcmt0cmVlIGF0dHJpYnV0ZXMsIGJhcmUnICcKKwkoY2QgYmFyZSAmJiBnaXQgYXJjaGl2ZSAtLXdvcmt0cmVlLWF0dHJpYnV0ZXMgSEVBRCkgPmJhcmUtd29ya3RyZWUudGFyICYmCisJKG1rZGlyIGJhcmUtd29ya3RyZWUgJiYgY2QgYmFyZS13b3JrdHJlZSAmJiAiJFRBUiIgeGYgLSkgPGJhcmUtd29ya3RyZWUudGFyCisnCisKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYmFyZS13b3JrdHJlZS9pZ25vcmVkCit0ZXN0X2V4cGVjdF9leGlzdHMJYmFyZS13b3JrdHJlZS9pZ25vcmVkLWJ5LXRyZWUKK3Rlc3RfZXhwZWN0X2V4aXN0cwliYXJlLXdvcmt0cmVlL2lnbm9yZWQtYnktd29ya3RyZWUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwb3J0LXN1YnN0JyAnCisJZ2l0IGxvZyAiLS1wcmV0dHk9Zm9ybWF0OkEke1NVQlNURk9STUFUfU8iIEhFQUQgPnN1YnN0ZmlsZTEuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBub3N1YnN0ZmlsZSBhcmNoaXZlL25vc3Vic3RmaWxlICYmCisJdGVzdF9jbXAgc3Vic3RmaWxlMS5leHBlY3RlZCBhcmNoaXZlL3N1YnN0ZmlsZTEgJiYKKwl0ZXN0X2NtcCBzdWJzdGZpbGUyIGFyY2hpdmUvc3Vic3RmaWxlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdGFyLXRyZWUgdnMuIGdpdCBhcmNoaXZlIHdpdGggd29ya3RyZWUgYXR0cmlidXRlcycgJworCWdpdCB0YXItdHJlZSBIRUFEID50YXItdHJlZS50YXIgJiYKKwl0ZXN0X2NtcCB3b3JrdHJlZS50YXIgdGFyLXRyZWUudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB0YXItdHJlZSB2cy4gZ2l0IGFyY2hpdmUgd2l0aCB3b3JrdHJlZSBhdHRycywgYmFyZScgJworCShjZCBiYXJlICYmIGdpdCB0YXItdHJlZSBIRUFEKSA+YmFyZS10YXItdHJlZS50YXIgJiYKKwl0ZXN0X2NtcCBiYXJlLXdvcmt0cmVlLnRhciBiYXJlLXRhci10cmVlLnRhcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMDEgYi90L3Q1MTAwL2luZm8wMDAxCmluZGV4IDhjMDUyNzcuLmY5NTE1MzggMTAwNjQ0Ci0tLSBhL3QvdDUxMDAvaW5mbzAwMDEKKysrIGIvdC90NTEwMC9pbmZvMDAwMQpAQCAtMSw0ICsxLDQgQEAKLUF1dGhvcjogQSBVIFRob3IKK0F1dGhvcjogQSAoenp6KSBVIFRob3IgKENvbW1lbnQpCiBFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KIFN1YmplY3Q6IGEgY29tbWl0LgogRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA0IGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNAppbmRleCAwY2E3ZmYwLi5mNjdhOTBhIDEwMDY0NAotLS0gYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA0CisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDQKQEAgLTEsNCArMSw0IEBACi1BdXRob3I6IE5hdGhhbmllbCBCb3JlbnN0ZWluICAgKNed15XXnNepINef15Eg15nXnNeY16TXoCkKK0F1dGhvcjogTmF0aGFuaWVsIEJvcmVuc3RlaW4gKNed15XXnNepINef15Eg15nXnNeY16TXoCkKIEVtYWlsOiBuc2JAdGh1bXBlci5iZWxsY29yZS5jb20KIFN1YmplY3Q6IFRlc3Qgb2YgbmV3IGhlYWRlciBnZW5lcmF0b3IKIApkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LXNhbXBsZXMubWJveCBiL3QvdDUxMDAvcmZjMjA0Ny1zYW1wbGVzLm1ib3gKaW5kZXggM2NhMjQ3MC4uMWZjMjI0OCAxMDA2NDQKLS0tIGEvdC90NTEwMC9yZmMyMDQ3LXNhbXBsZXMubWJveAorKysgYi90L3Q1MTAwL3JmYzIwNDctc2FtcGxlcy5tYm94CkBAIC0xLDQ4ICsxLDQ4IEBACiBGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206ID0/VVMtQVNDSUk/UT9LZWl0aF9Nb29yZT89IDxtb29yZUBjcy51dGsuZWR1PgotVG86ID0/SVNPLTg4NTktMT9RP0tlbGRfSj1GOHJuX1NpbW9uc2VuPz0gPGtlbGRAZGt1dWcuZGs+Ci1DQzogPT9JU08tODg1OS0xP1E/QW5kcj1FOT89IFBpcmFyZCA8UElSQVJEQHZtMS51bGcuYWMuYmU+Ci1TdWJqZWN0OiA9P0lTTy04ODU5LTE/Qj9TV1lnZVc5MUlHTmhiaUJ5WldGa0lIUm9hWE1nZVc4PT89Ci0gPT9JU08tODg1OS0yP0I/ZFNCMWJtUmxjbk4wWVc1a0lIUm9aU0JsZUdGdGNHeGxMZz09Pz0KK1RvOiA9P0lTTzg4NTktMT9RP0tlbGRfSj1GOHJuX1NpbW9uc2VuPz0gPGtlbGRAZGt1dWcuZGs+CitDQzogPT9JU084ODU5LTE/UT9BbmRyPUU5Pz0gUGlyYXJkIDxQSVJBUkRAdm0xLnVsZy5hYy5iZT4KK1N1YmplY3Q6ID0/SVNPODg1OS0xP0I/U1dZZ2VXOTFJR05oYmlCeVpXRmtJSFJvYVhNZ2VXOD0/PQorID0/SVNPODg1OS0yP0I/ZFNCMWJtUmxjbk4wWVc1a0lIUm9aU0JsZUdGdGNHeGxMZz09Pz0KIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiA9P0lTTy04ODU5LTE/UT9PbGxlX0o9RTRybmVmb3JzPz0gPG9qYXJuZWZAYWRtaW4ua3RoLnNlPgorRnJvbTogPT9JU084ODU5LTE/UT9PbGxlX0o9RTRybmVmb3JzPz0gPG9qYXJuZWZAYWRtaW4ua3RoLnNlPgogVG86IGlldGYtODIyQGRpbWFjcy5ydXRnZXJzLmVkdSwgb2phcm5lZkBhZG1pbi5rdGguc2UKIFN1YmplY3Q6IFRpbWUgZm9yIElTTyAxMDY0Nj8KIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBUbzogRGF2ZSBDcm9ja2VyIDxkY3JvY2tlckBtb3Jkb3Iuc3RhbmZvcmQuZWR1PgogQ2M6IGlldGYtODIyQGRpbWFjcy5ydXRnZXJzLmVkdSwgcGFmQGNvbXNvbC5zZQotRnJvbTogPT9JU08tODg1OS0xP1E/UGF0cmlrX0Y9RTRsdHN0cj1GNm0/PSA8cGFmQG5hZGEua3RoLnNlPgorRnJvbTogPT9JU084ODU5LTE/UT9QYXRyaWtfRj1FNGx0c3RyPUY2bT89IDxwYWZAbmFkYS5rdGguc2U+CiBTdWJqZWN0OiBSZTogUkZDLUhEUiBjYXJlIGFuZCBmZWVkaW5nCiAKIEZyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogTmF0aGFuaWVsIEJvcmVuc3RlaW4gPG5zYkB0aHVtcGVyLmJlbGxjb3JlLmNvbT4KLSAgICAgICg9P2lzby04ODU5LTg/Yj83ZVhzK1NEdjRTRHA3T2owOEE9PT89KQorICAgICAgKD0/SVNPODg1OS04P2I/N2VYcytTRHY0U0RwN09qMDhBPT0/PSkKIFRvOiBHcmVnIFZhdWRyZXVpbCA8Z3ZhdWRyZUBOUkkuUmVzdG9uLlZBLlVTPiwgTmVkIEZyZWVkCiAgICA8bmVkQGlubm9zb2Z0LmNvbT4sIEtlaXRoIE1vb3JlIDxtb29yZUBjcy51dGsuZWR1PgogU3ViamVjdDogVGVzdCBvZiBuZXcgaGVhZGVyIGdlbmVyYXRvcgogTUlNRS1WZXJzaW9uOiAxLjAKLUNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xCitDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPODg1OS0xCiAKIEZyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotU3ViamVjdDogKD0/SVNPLTg4NTktMT9RP2E/PSkKK1N1YmplY3Q6ICg9P0lTTzg4NTktMT9RP2E/PSkKIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1TdWJqZWN0OiAoPT9JU08tODg1OS0xP1E/YT89IGIpCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gYikKIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1TdWJqZWN0OiAoPT9JU08tODg1OS0xP1E/YT89ID0/SVNPLTg4NTktMT9RP2I/PSkKK1N1YmplY3Q6ICg9P0lTTzg4NTktMT9RP2E/PSA9P0lTTzg4NTktMT9RP2I/PSkKIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1TdWJqZWN0OiAoPT9JU08tODg1OS0xP1E/YT89ICA9P0lTTy04ODU5LTE/UT9iPz0pCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gID0/SVNPODg1OS0xP1E/Yj89KQogCiBGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLVN1YmplY3Q6ICg9P0lTTy04ODU5LTE/UT9hPz0KLSAgICA9P0lTTy04ODU5LTE/UT9iPz0pCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0KKyAgICA9P0lTTzg4NTktMT9RP2I/PSkKIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1TdWJqZWN0OiAoPT9JU08tODg1OS0xP1E/YV9iPz0pCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hX2I/PSkKIAogRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1TdWJqZWN0OiAoPT9JU08tODg1OS0xP1E/YT89ID0/SVNPLTg4NTktMj9RP19iPz0pCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gPT9JU084ODU5LTI/UT9fYj89KQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9zYW1wbGUubWJveCBiL3QvdDUxMDAvc2FtcGxlLm1ib3gKaW5kZXggODVkZjU1Zi4uYzMwNzRhYyAxMDA2NDQKLS0tIGEvdC90NTEwMC9zYW1wbGUubWJveAorKysgYi90L3Q1MTAwL3NhbXBsZS5tYm94CkBAIC0yLDEwICsyLDEwIEBACiAJCiAgICAgCiBGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEEKK0Zyb206IEEgKHp6eikKICAgICAgIFUKICAgICAgIFRob3IKLSAgICAgIDxhLnUudGhvckBleGFtcGxlLmNvbT4KKyAgICAgIDxhLnUudGhvckBleGFtcGxlLmNvbT4gKENvbW1lbnQpCiBEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKIFN1YmplY3Q6IFtQQVRDSF0gYSBjb21taXQuCiAKQEAgLTk5LDcgKzk5LDcgQEAKIEZyb20gbm9ib2R5IFNhdCBBdWcgMjcgMjM6MDc6NDkgMjAwNQogUGF0aDogbmV3cy5nbWFuZS5vcmchbm90LWZvci1tYWlsCiBNZXNzYWdlLUlEOiA8MjAwNTA3MjEuMDkxMDM2LjAxMTE5NTE2Lnlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgotRnJvbTogWU9TSElGVUpJIEhpZGVha2kgLyA9P2lzby0yMDIyLWpwP0I/R3lSQ05VaEdJekZSVEVBYktFST0/PSAKK0Zyb206IFlPU0hJRlVKSSBIaWRlYWtpIC8gPT9JU08tMjAyMi1KUD9CP0d5UkNOVWhHSXpGUlRFQWJLRUk9Pz0gCiAJPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgogTmV3c2dyb3VwczogZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0CiBTdWJqZWN0OiBbUEFUQ0ggMS8yXSBHSVQ6IFRyeSBhbGwgYWRkcmVzc2VzIGZvciBnaXZlbiByZW1vdGUgbmFtZQpAQCAtMjE4LDcgKzIxOCw3IEBACiBGcm9tIG5vYm9keSBTYXQgQXVnIDI3IDIzOjA3OjQ5IDIwMDUKIFBhdGg6IG5ld3MuZ21hbmUub3JnIW5vdC1mb3ItbWFpbAogTWVzc2FnZS1JRDogPHU1dGFjampkcHhxLmZzZkBseXNhdG9yLmxpdS5zZT4KLUZyb206ID0/aXNvLTg4NTktMT9RP0RhdmlkX0s9RTVnZWRhbD89IDxkYXZpZGtAbHlzYXRvci5saXUuc2U+CitGcm9tOiA9P0lTTzg4NTktMT9RP0RhdmlkX0s9RTVnZWRhbD89IDxkYXZpZGtAbHlzYXRvci5saXUuc2U+CiBOZXdzZ3JvdXBzOiBnbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQKIFN1YmplY3Q6IFtQQVRDSF0gRml4ZWQgdHdvIGJ1Z3MgaW4gZ2l0LWN2c2ltcG9ydC1zY3JpcHQuCiBEYXRlOiBNb24sIDE1IEF1ZyAyMDA1IDIwOjE4OjI1ICswMjAwCkBAIC0yMjYsNyArMjI2LDcgQEAKIEFwcHJvdmVkOiBuZXdzQGdtYW5lLm9yZwogTk5UUC1Qb3N0aW5nLUhvc3Q6IG1haW4uZ21hbmUub3JnCiBNaW1lLVZlcnNpb246IDEuMAotQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTEKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU084ODU5LTEKIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IFFVT1RFRC1QUklOVEFCTEUKIFgtVHJhY2U6IHNlYS5nbWFuZS5vcmcgMTEyNDEzMDI0NyAzMTgzOSA4MC45MS4yMjkuMiAoMTUgQXVnIDIwMDUgMTg6MjQ6MDcgR01UKQogWC1Db21wbGFpbnRzLVRvOiB1c2VuZXRAc2VhLmdtYW5lLm9yZwpAQCAtNDc2LDcgKzQ3Niw3IEBACiBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij0tPS09IgogCiAtLT0tPS09Ci1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMTUKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU084ODU5LTE1CiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCiAKIEhlcmUgY29tZXMgYSBjb21taXQgbG9nIG1lc3NhZ2UsIGFuZApkaWZmIC0tZ2l0IGEvdC90NTMwMC1wYWNrLW9iamVjdC5zaCBiL3QvdDUzMDAtcGFjay1vYmplY3Quc2gKaW5kZXggY2NmYzY0Yy4uZTJhYTI1NCAxMDA3NTUKLS0tIGEvdC90NTMwMC1wYWNrLW9iamVjdC5zaAorKysgYi90L3Q1MzAwLXBhY2stb2JqZWN0LnNoCkBAIC0xMywxMSArMTMsMTAgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdzZXR1cCcgXAogICAgICdybSAtZiAuZ2l0L2luZGV4KgotICAgICBmb3IgaSBpbiBhIGIgYwotICAgICBkbwotCSAgICAgZGQgaWY9L2Rldi96ZXJvIGJzPTRrIGNvdW50PTEgfCBwZXJsIC1wZSAieS9cXDAwMC8kaS8iID4kaSAmJgotCSAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAkaSB8fCByZXR1cm4gMQotICAgICBkb25lICYmCisgICAgIHBlcmwgLWUgInByaW50IFwiYVwiIHggNDA5NjsiID4gYSAmJgorICAgICBwZXJsIC1lICJwcmludCBcImJcIiB4IDQwOTY7IiA+IGIgJiYKKyAgICAgcGVybCAtZSAicHJpbnQgXCJjXCIgeCA0MDk2OyIgPiBjICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSBiIGMgJiYKICAgICAgY2F0IGMgPmQgJiYgZWNobyBmb28gPj5kICYmIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZCAmJgogICAgICB0cmVlPWBnaXQgd3JpdGUtdHJlZWAgJiYKICAgICAgY29tbWl0PWBnaXQgY29tbWl0LXRyZWUgJHRyZWUgPC9kZXYvbnVsbGAgJiYgewpAQCAtMjIxLDcgKzIyMCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmVyaWZ5LXBhY2sgY2F0Y2hlcyBhIGNvcnJ1cHRlZCBwYWNrIHNpZ25hdHVyZScgXAogICAgICdjYXQgdGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayA+dGVzdC0zLnBhY2sgJiYKLSAgICAgZGQgaWY9L2Rldi96ZXJvIG9mPXRlc3QtMy5wYWNrIGNvdW50PTEgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz0yICYmCisgICAgIGVjaG8gfCBkZCBvZj10ZXN0LTMucGFjayBjb3VudD0xIGJzPTEgY29udj1ub3RydW5jIHNlZWs9MiAmJgogICAgICBpZiBnaXQgdmVyaWZ5LXBhY2sgdGVzdC0zLmlkeAogICAgICB0aGVuIGZhbHNlCiAgICAgIGVsc2UgOjsKQEAgLTIzMCw3ICsyMjksNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZlcmlmeS1wYWNrIGNhdGNoZXMgYSBjb3JydXB0ZWQgcGFjayB2ZXJzaW9uJyBcCiAgICAgJ2NhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrID50ZXN0LTMucGFjayAmJgotICAgICBkZCBpZj0vZGV2L3plcm8gb2Y9dGVzdC0zLnBhY2sgY291bnQ9MSBicz0xIGNvbnY9bm90cnVuYyBzZWVrPTcgJiYKKyAgICAgZWNobyB8IGRkIG9mPXRlc3QtMy5wYWNrIGNvdW50PTEgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz03ICYmCiAgICAgIGlmIGdpdCB2ZXJpZnktcGFjayB0ZXN0LTMuaWR4CiAgICAgIHRoZW4gZmFsc2UKICAgICAgZWxzZSA6OwpAQCAtMjM5LDcgKzIzOCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmVyaWZ5LXBhY2sgY2F0Y2hlcyBhIGNvcnJ1cHRlZCB0eXBlL3NpemUgb2YgdGhlIDFzdCBwYWNrZWQgb2JqZWN0IGRhdGEnIFwKICAgICAnY2F0IHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgPnRlc3QtMy5wYWNrICYmCi0gICAgIGRkIGlmPS9kZXYvemVybyBvZj10ZXN0LTMucGFjayBjb3VudD0xIGJzPTEgY29udj1ub3RydW5jIHNlZWs9MTIgJiYKKyAgICAgZWNobyB8IGRkIG9mPXRlc3QtMy5wYWNrIGNvdW50PTEgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz0xMiAmJgogICAgICBpZiBnaXQgdmVyaWZ5LXBhY2sgdGVzdC0zLmlkeAogICAgICB0aGVuIGZhbHNlCiAgICAgIGVsc2UgOjsKQEAgLTI1MCw3ICsyNDksNyBAQAogICAgICdsPWB3YyAtYyA8dGVzdC0zLmlkeGAgJiYKICAgICAgbD1gZXhwciAkbCAtIDIwYCAmJgogICAgICBjYXQgdGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayA+dGVzdC0zLnBhY2sgJiYKLSAgICAgZGQgaWY9L2Rldi96ZXJvIG9mPXRlc3QtMy5pZHggY291bnQ9MjAgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz0kbCAmJgorICAgICBwcmludGYgIiUyMHMiICIiIHwgZGQgb2Y9dGVzdC0zLmlkeCBjb3VudD0yMCBicz0xIGNvbnY9bm90cnVuYyBzZWVrPSRsICYmCiAgICAgIGlmIGdpdCB2ZXJpZnktcGFjayB0ZXN0LTMucGFjawogICAgICB0aGVuIGZhbHNlCiAgICAgIGVsc2UgOjsKZGlmZiAtLWdpdCBhL3QvdDUzMDItcGFjay1pbmRleC5zaCBiL3QvdDUzMDItcGFjay1pbmRleC5zaAppbmRleCA4ODRlMjQyLi40MzYwZTc3IDEwMDc1NQotLS0gYS90L3Q1MzAyLXBhY2staW5kZXguc2gKKysrIGIvdC90NTMwMi1wYWNrLWluZGV4LnNoCkBAIC0xMCw2ICsxMCw3IEBACiAgICAgJ3NldHVwJyBcCiAgICAgJ3JtIC1yZiAuZ2l0CiAgICAgIGdpdCBpbml0ICYmCisgICAgIGdpdCBjb25maWcgcGFjay50aHJlYWRzIDEgJiYKICAgICAgaT0xICYmCiAgICAgIHdoaWxlIHRlc3QgJGkgLWxlIDEwMAogICAgICBkbwpAQCAtNjgsMzIgKzY5LDI3IEBACiAgICAgJ2luZGV4IHYyOiBmb3JjZSBzb21lIDY0LWJpdCBvZmZzZXRzIHdpdGggcGFjay1vYmplY3RzJyBcCiAgICAgJ3BhY2szPSQoZ2l0IHBhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MiwweDQwMDAwIHRlc3QtMyA8b2JqLWxpc3QpJwogCi1oYXZlXzY0Yml0cz0KIGlmIG1zZz0kKGdpdCB2ZXJpZnktcGFjayAtdiAidGVzdC0zLSR7cGFjazN9LnBhY2siIDI+JjEpIHx8CiAJISAoZWNobyAiJG1zZyIgfCBncmVwICJwYWNrIHRvbyBsYXJnZSAuKiBvZmZfdCIpCiB0aGVuCi0JaGF2ZV82NGJpdHM9dAorCXRlc3Rfc2V0X3ByZXJlcSBPRkY2NF9UCiBlbHNlCiAJc2F5ICJza2lwcGluZyB0ZXN0cyBjb25jZXJuaW5nIDY0LWJpdCBvZmZzZXRzIgogZmkKIAotdGVzdCAiJGhhdmVfNjRiaXRzIiAmJgotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgXAogICAgICdpbmRleCB2MjogdmVyaWZ5IGEgcGFjayB3aXRoIHNvbWUgNjQtYml0IG9mZnNldHMnIFwKICAgICAnZ2l0IHZlcmlmeS1wYWNrIC12ICJ0ZXN0LTMtJHtwYWNrM30ucGFjayInCiAKLXRlc3QgIiRoYXZlXzY0Yml0cyIgJiYKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBPRkY2NF9UIFwKICAgICAnNjQtYml0IG9mZnNldHM6IHNob3VsZCBiZSBkaWZmZXJlbnQgZnJvbSBwcmV2aW91cyBpbmRleCB2MiByZXN1bHRzJyBcCiAgICAgJyEgY21wICJ0ZXN0LTItJHtwYWNrMn0uaWR4IiAidGVzdC0zLSR7cGFjazN9LmlkeCInCiAKLXRlc3QgIiRoYXZlXzY0Yml0cyIgJiYKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBPRkY2NF9UIFwKICAgICAnaW5kZXggdjI6IGZvcmNlIHNvbWUgNjQtYml0IG9mZnNldHMgd2l0aCBpbmRleC1wYWNrJyBcCiAgICAgJ2dpdCBpbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0yLDB4NDAwMDAgLW8gMy5pZHggInRlc3QtMS0ke3BhY2sxfS5wYWNrIicKIAotdGVzdCAiJGhhdmVfNjRiaXRzIiAmJgotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgXAogICAgICc2NC1iaXQgb2Zmc2V0czogaW5kZXgtcGFjayByZXN1bHQgc2hvdWxkIG1hdGNoIHBhY2stb2JqZWN0cyBvbmUnIFwKICAgICAnY21wICJ0ZXN0LTMtJHtwYWNrM30uaWR4IiAiMy5pZHgiJwogCkBAIC0yMDcsNyArMjAzLDcgQEAKICAgICAgb2JqPWBnaXQgaGFzaC1vYmplY3QgZmlsZV8wMDFgICYmCiAgICAgIG5yPWBpbmRleF9vYmpfbnIgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0uaWR4IiAkb2JqYCAmJgogICAgICBjaG1vZCArdyAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgiICYmCi0gICAgIGRkIGlmPS9kZXYvemVybyBvZj0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgiIGNvbnY9bm90cnVuYyBcCisgICAgIHByaW50ZiB4eHh4IHwgZGQgb2Y9Ii5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0uaWR4IiBjb252PW5vdHJ1bmMgXAogICAgICAgICBicz0xIGNvdW50PTQgc2Vlaz0kKCg4ICsgMjU2ICogNCArIGB3YyAtbCA8b2JqLWxpc3RgICogMjAgKyAkbnIgKiA0KSkgJiYKICAgICAgKCB3aGlsZSByZWFkIG9iagogICAgICAgIGRvIGdpdCBjYXQtZmlsZSAtcCAkb2JqID4vZGV2L251bGwgfHwgZXhpdCAxCmRpZmYgLS1naXQgYS90L3Q1MzAzLXBhY2stY29ycnVwdGlvbi1yZXNpbGllbmNlLnNoIGIvdC90NTMwMy1wYWNrLWNvcnJ1cHRpb24tcmVzaWxpZW5jZS5zaAppbmRleCBkNGUzMGZjLi41MTMyZDQxIDEwMDc1NQotLS0gYS90L3Q1MzAzLXBhY2stY29ycnVwdGlvbi1yZXNpbGllbmNlLnNoCisrKyBiL3QvdDUzMDMtcGFjay1jb3JydXB0aW9uLXJlc2lsaWVuY2Uuc2gKQEAgLTU1LDYgKzU1LDggQEAKICAgICB0ZXN0X211c3RfZmFpbCBnaXQgdmVyaWZ5LXBhY2sgJHtwYWNrfS5wYWNrCiB9CiAKK3ByaW50ZiAnXDAnID4gemVybworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnaW5pdGlhbCBzZXR1cCB2YWxpZGF0aW9uJyBcCiAgICAgJ2NyZWF0ZV90ZXN0X2ZpbGVzICYmCkBAIC02Niw3ICs2OCw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdjcmVhdGUgY29ycnVwdGlvbiBpbiBoZWFkZXIgb2YgZmlyc3Qgb2JqZWN0JyBcCi0gICAgJ2RvX2NvcnJ1cHRfb2JqZWN0ICRibG9iXzEgMCA8IC9kZXYvemVybyAmJgorICAgICdkb19jb3JydXB0X29iamVjdCAkYmxvYl8xIDAgPCB6ZXJvICYmCiAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKICAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgogICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJwpAQCAtMTI1LDcgKzEyNyw3IEBACiAgICAgJ2NyZWF0ZSBjb3JydXB0aW9uIGluIGhlYWRlciBvZiBmaXJzdCBkZWx0YScgXAogICAgICdjcmVhdGVfbmV3X3BhY2sgJiYKICAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgotICAgICBkb19jb3JydXB0X29iamVjdCAkYmxvYl8yIDAgPCAvZGV2L3plcm8gJiYKKyAgICAgZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMiAwIDwgemVybyAmJgogICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCiAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKICAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKQEAgLTE4MCw3ICsxODIsNyBAQAogICAgICdjb3JydXB0aW9uIGluIGRlbHRhIGJhc2UgcmVmZXJlbmNlIG9mIGZpcnN0IGRlbHRhIChPQkpfUkVGX0RFTFRBKScgXAogICAgICdjcmVhdGVfbmV3X3BhY2sgJiYKICAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgotICAgICBkb19jb3JydXB0X29iamVjdCAkYmxvYl8yIDIgPCAvZGV2L3plcm8gJiYKKyAgICAgZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMiAyIDwgemVybyAmJgogICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCiAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKICAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKQEAgLTIwNyw3ICsyMDksNyBAQAogICAgICdjb3JydXB0aW9uICMwIGluIGRlbHRhIGJhc2UgcmVmZXJlbmNlIG9mIGZpcnN0IGRlbHRhIChPQkpfT0ZTX0RFTFRBKScgXAogICAgICdjcmVhdGVfbmV3X3BhY2sgLS1kZWx0YS1iYXNlLW9mZnNldCAmJgogICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCi0gICAgIGRvX2NvcnJ1cHRfb2JqZWN0ICRibG9iXzIgMiA8IC9kZXYvemVybyAmJgorICAgICBkb19jb3JydXB0X29iamVjdCAkYmxvYl8yIDIgPCB6ZXJvICYmCiAgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKICAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgogICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJwpAQCAtMjU5LDcgKzI2MSw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICcuLi4gYW5kIGEgcmVkdW5kYW50IHBhY2sgYWxsb3dzIGZvciBmdWxsIHJlY292ZXJ5IHRvbycgXAotICAgICdkb19jb3JydXB0X29iamVjdCAkYmxvYl8yIDIgPCAvZGV2L3plcm8gJiYKKyAgICAnZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMiAyIDwgemVybyAmJgogICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCiAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKICAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCAmJgpkaWZmIC0tZ2l0IGEvdC90NTMwNC1wcnVuZS5zaCBiL3QvdDUzMDQtcHJ1bmUuc2gKaW5kZXggNzcxYzBhMC4uNTVlZDdjNyAxMDA3NTUKLS0tIGEvdC90NTMwNC1wcnVuZS5zaAorKysgYi90L3Q1MzA0LXBydW5lLnNoCkBAIC0xMTIsNCArMTEyLDQyIEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgLS1uby1wcnVuZScgJworCisJYmVmb3JlPSQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCUJMT0I9JChlY2hvIGFsZXBoXzAgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlCTE9CX0ZJTEU9LmdpdC9vYmplY3RzLyQoZWNobyAkQkxPQiB8IHNlZCAicy9eLi4vJlwvLyIpICYmCisJdGVzdCAkKCgxICsgJGJlZm9yZSkpID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJdGVzdCAtZiAkQkxPQl9GSUxFICYmCisJdGVzdC1jaG10aW1lID0tJCgoODY0MDAqNTAwMSkpICRCTE9CX0ZJTEUgJiYKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIDIuZGF5cy5hZ28gJiYKKwlnaXQgZ2MgLS1uby1wcnVuZSAmJgorCXRlc3QgMSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCXRlc3QgLWYgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIHJlc3BlY3RzIGdjLnBydW5lRXhwaXJlJyAnCisKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIDUwMDIuZGF5cy5hZ28gJiYKKwlnaXQgZ2MgJiYKKwl0ZXN0IC1mICRCTE9CX0ZJTEUgJiYKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIDUwMDAuZGF5cy5hZ28gJiYKKwlnaXQgZ2MgJiYKKwl0ZXN0ICEgLWYgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIC0tcHJ1bmU9PGRhdGU+JyAnCisKKwlCTE9CPSQoZWNobyBhbGVwaF8wIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJQkxPQl9GSUxFPS5naXQvb2JqZWN0cy8kKGVjaG8gJEJMT0IgfCBzZWQgInMvXi4uLyZcLy8iKSAmJgorCXRlc3QtY2htdGltZSA9LSQoKDg2NDAwKjUwMDEpKSAkQkxPQl9GSUxFICYmCisJZ2l0IGdjIC0tcHJ1bmU9NTAwMi5kYXlzLmFnbyAmJgorCXRlc3QgLWYgJEJMT0JfRklMRSAmJgorCWdpdCBnYyAtLXBydW5lPTUwMDAuZGF5cy5hZ28gJiYKKwl0ZXN0ICEgLWYgJEJMT0JfRklMRQorCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwMC1zZW5kLXBhY2suc2ggYi90L3Q1NDAwLXNlbmQtcGFjay5zaAppbmRleCBiMjEzMTdkLi5mMmQ1NTgxIDEwMDc1NQotLS0gYS90L3Q1NDAwLXNlbmQtcGFjay5zaAorKysgYi90L3Q1NDAwLXNlbmQtcGFjay5zaApAQCAtMzIsOSArMzIsNyBAQAogCWRvbmUgJiYKIAlnaXQgdXBkYXRlLXJlZiBIRUFEICIkY29tbWl0IiAmJgogCWdpdCBjbG9uZSAuLy4gdmljdGltICYmCi0JY2QgdmljdGltICYmCi0JZ2l0IGxvZyAmJgotCWNkIC4uICYmCisJKCBjZCB2aWN0aW0gJiYgZ2l0IGxvZyApICYmCiAJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAiJHplcm8iICYmCiAJcGFyZW50PSR6ZXJvICYmCiAJaT0wICYmCkBAIC01OSw4OCArNTcsODQgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB0aGUgZGVzdGluYXRpb24gcmVwb3NpdG9yeScgJworICAgICgKIAljZCB2aWN0aW0gJiYKIAlnaXQgcmVwYWNrIC1hIC1kICYmCi0JZ2l0IHBydW5lICYmCi0JY2QgLi4KKwlnaXQgcHJ1bmUKKyAgICApCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICAgICAncHVzaGluZyByZXdvdW5kIGhlYWQgc2hvdWxkIG5vdCBiYXJmIGJ1dCByZXF1aXJlIC0tZm9yY2UnICcKLQkjIHNob3VsZCBub3QgZmFpbCBidXQgcmVmdXNlIHRvIHVwZGF0ZS4KLQlpZiBnaXQgc2VuZC1wYWNrIC4vdmljdGltLy5naXQvIG1hc3RlcgotCXRoZW4KLQkJIyBub3cgaXQgc2hvdWxkIGZhaWwgd2l0aCBQYXNreSBwYXRjaAotCQllY2hvID4mMiBHYWFoLCBpdCBzaG91bGQgaGF2ZSBmYWlsZWQuCi0JCWZhbHNlCi0JZWxzZQotCQllY2hvID4mMiBUaGFua3MsIGl0IGNvcnJlY3RseSBmYWlsZWQuCi0JCXRydWUKLQlmaSAmJgotCWlmIGNtcCB2aWN0aW0vLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCi0JdGhlbgotCQkjIHNob3VsZCBoYXZlIGJlZW4gbGVmdCBhcyBpdCB3YXMhCi0JCWZhbHNlCi0JZWxzZQotCQl0cnVlCi0JZmkgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzZSBwdXNoaW5nIHJld291bmQgaGVhZCB3aXRob3V0IC0tZm9yY2UnICcKKwlwdXNoZWRfaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXZpY3RpbV9vcmlnPSQoY2QgdmljdGltICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLi92aWN0aW0gbWFzdGVyICYmCisJdmljdGltX2hlYWQ9JChjZCB2aWN0aW0gJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdCAiJHZpY3RpbV9oZWFkIiA9ICIkdmljdGltX29yaWciICYmCiAJIyB0aGlzIHNob3VsZCB1cGRhdGUKLQlnaXQgc2VuZC1wYWNrIC0tZm9yY2UgLi92aWN0aW0vLmdpdC8gbWFzdGVyICYmCi0JY21wIHZpY3RpbS8uZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIKKwlnaXQgc2VuZC1wYWNrIC0tZm9yY2UgLi92aWN0aW0gbWFzdGVyICYmCisJdmljdGltX2hlYWQ9JChjZCB2aWN0aW0gJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdCAiJHZpY3RpbV9oZWFkIiA9ICIkcHVzaGVkX2hlYWQiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICAgICAncHVzaCBjYW4gYmUgdXNlZCB0byBkZWxldGUgYSByZWYnICcKLQljZCB2aWN0aW0gJiYKLQlnaXQgYnJhbmNoIGV4dHJhIG1hc3RlciAmJgotCWNkIC4uICYmCi0JdGVzdCAtZiB2aWN0aW0vLmdpdC9yZWZzL2hlYWRzL2V4dHJhICYmCi0JZ2l0IHNlbmQtcGFjayAuL3ZpY3RpbS8uZ2l0LyA6ZXh0cmEgbWFzdGVyICYmCi0JISB0ZXN0IC1mIHZpY3RpbS8uZ2l0L3JlZnMvaGVhZHMvZXh0cmEKKwkoIGNkIHZpY3RpbSAmJiBnaXQgYnJhbmNoIGV4dHJhIG1hc3RlciApICYmCisJZ2l0IHNlbmQtcGFjayAuL3ZpY3RpbSA6ZXh0cmEgbWFzdGVyICYmCisJKCBjZCB2aWN0aW0gJiYKKwkgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZXh0cmEgKQogJwogCi11bnNldCBHSVRfQ09ORklHCi1IT01FPWBwd2RgL25vLXN1Y2gtZGlyZWN0b3J5Ci1leHBvcnQgSE9NRSA7IyB0aGlzIHdheSB3ZSBmb3JjZSB0aGUgdmljdGltLy5naXQvY29uZmlnIHRvIGJlIHVzZWQuCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotCSdwdXNoaW5nIGEgZGVsZXRlIHNob3VsZCBiZSBkZW5pZWQgd2l0aCBkZW55RGVsZXRlcycgJwotCWNkIHZpY3RpbSAmJgotCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55RGVsZXRlcyB0cnVlICYmCi0JZ2l0IGJyYW5jaCBleHRyYSBtYXN0ZXIgJiYKLQljZCAuLiAmJgotCXRlc3QgLWYgdmljdGltLy5naXQvcmVmcy9oZWFkcy9leHRyYSAmJgotCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLi92aWN0aW0vLmdpdC8gOmV4dHJhIG1hc3RlcgotJwotcm0gLWYgdmljdGltLy5naXQvcmVmcy9oZWFkcy9leHRyYQotCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAgICAgJ3B1c2hpbmcgd2l0aCAtLWZvcmNlIHNob3VsZCBiZSBkZW5pZWQgd2l0aCBkZW55Tm9uRmFzdGZvcndhcmRzJyAnCi0JY2QgdmljdGltICYmCi0JZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlOb25GYXN0Zm9yd2FyZHMgdHJ1ZSAmJgotCWNkIC4uICYmCi0JZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgbWFzdGVyXiB8fCByZXR1cm4gMQotCWdpdCBzZW5kLXBhY2sgLS1mb3JjZSAuL3ZpY3RpbS8uZ2l0LyBtYXN0ZXIgJiYgcmV0dXJuIDEKLQkhIHRlc3RfY21wIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgdmljdGltLy5naXQvcmVmcy9oZWFkcy9tYXN0ZXIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzZSBkZWxldGluZyBwdXNoIHdpdGggZGVueURlbGV0ZXMnICcKKwkoCisJICAgIGNkIHZpY3RpbSAmJgorCSAgICAoIGdpdCBicmFuY2ggLUQgZXh0cmEgfHwgOiApICYmCisJICAgIGdpdCBjb25maWcgcmVjZWl2ZS5kZW55RGVsZXRlcyB0cnVlICYmCisJICAgIGdpdCBicmFuY2ggZXh0cmEgbWFzdGVyCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLi92aWN0aW0gOmV4dHJhIG1hc3RlcgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLQkncHVzaGluZyBkb2VzIG5vdCBpbmNsdWRlIG5vbi1oZWFkIHJlZnMnICcKLQlta2RpciBwYXJlbnQgJiYgY2QgcGFyZW50ICYmCi0JZ2l0IGluaXQgJiYgdG91Y2ggZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBhZGQgJiYKLQljZCAuLiAmJgotCWdpdCBjbG9uZSBwYXJlbnQgY2hpbGQgJiYgY2QgY2hpbGQgJiYgZ2l0IHB1c2ggLS1hbGwgJiYKLQljZCAuLi9wYXJlbnQgJiYKLQlnaXQgYnJhbmNoIC1hID5icmFuY2hlcyAmJiAhIGdyZXAgb3JpZ2luL21hc3RlciBicmFuY2hlcwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVueU5vbkZhc3Rmb3J3YXJkcyB0cnVtcHMgLS1mb3JjZScgJworCSgKKwkgICAgY2QgdmljdGltICYmCisJICAgICggZ2l0IGJyYW5jaCAtRCBleHRyYSB8fCA6ICkgJiYKKwkgICAgZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlOb25GYXN0Zm9yd2FyZHMgdHJ1ZQorCSkgJiYKKwl2aWN0aW1fb3JpZz0kKGNkIHZpY3RpbSAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIC0tZm9yY2UgLi92aWN0aW0gbWFzdGVyXjptYXN0ZXIgJiYKKwl2aWN0aW1faGVhZD0kKGNkIHZpY3RpbSAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkdmljdGltX29yaWciID0gIiR2aWN0aW1faGVhZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLWFsbCBleGNsdWRlcyByZW1vdGUgdHJhY2tpbmcgaGllcmFyY2h5JyAnCisJbWtkaXIgcGFyZW50ICYmCisJKAorCSAgICBjZCBwYXJlbnQgJiYKKwkgICAgZ2l0IGluaXQgJiYgOiA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBhZGQKKwkpICYmCisJZ2l0IGNsb25lIHBhcmVudCBjaGlsZCAmJgorCSgKKwkgICAgY2QgY2hpbGQgJiYgZ2l0IHB1c2ggLS1hbGwKKwkpICYmCisJKAorCSAgICBjZCBwYXJlbnQgJiYKKwkgICAgdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4pIgorCSkKICcKIAogcmV3b3VuZF9wdXNoX3NldHVwKCkgewogCXJtIC1yZiBwYXJlbnQgY2hpbGQgJiYKLQlta2RpciBwYXJlbnQgJiYgY2QgcGFyZW50ICYmCi0JZ2l0IGluaXQgJiYgZWNobyBvbmUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gb25lICYmCi0JZWNobyB0d28gPmZpbGUgJiYgZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKLQljZCAuLiAmJgotCWdpdCBjbG9uZSBwYXJlbnQgY2hpbGQgJiYgY2QgY2hpbGQgJiYgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCW1rZGlyIHBhcmVudCAmJgorCSgKKwkgICAgY2QgcGFyZW50ICYmCisJICAgIGdpdCBpbml0ICYmCisJICAgIGVjaG8gb25lID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCSAgICBlY2hvIHR3byA+ZmlsZSAmJiBnaXQgY29tbWl0IC1hIC1tIHR3bworCSkgJiYKKwlnaXQgY2xvbmUgcGFyZW50IGNoaWxkICYmCisJKAorCSAgICBjZCBjaGlsZCAmJiBnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisJKQogfQogCiByZXdvdW5kX3B1c2hfc3VjY2VlZGVkKCkgewpAQCAtMTU2LDMwICsxNTAsNTcgQEAKIAlmaQogfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLQkncHVzaGluZyBleHBsaWNpdCByZWZzcGVjcyByZXNwZWN0cyBmb3JjaW5nJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIGV4cGxpY2l0IHJlZnNwZWNzIHJlc3BlY3RzIGZvcmNpbmcnICcKIAlyZXdvdW5kX3B1c2hfc2V0dXAgJiYKLQlpZiBnaXQgc2VuZC1wYWNrIC4uL3BhcmVudC8uZ2l0IHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyCi0JdGhlbgotCQlmYWxzZQotCWVsc2UKLQkJdHJ1ZQotCWZpICYmIHJld291bmRfcHVzaF9mYWlsZWQgJiYKLQlnaXQgc2VuZC1wYWNrIC4uL3BhcmVudC8uZ2l0ICtyZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlciAmJgotCXJld291bmRfcHVzaF9zdWNjZWVkZWQKKwlwYXJlbnRfb3JpZz0kKGNkIHBhcmVudCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwkoCisJICAgIGNkIGNoaWxkICYmCisJICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLi4vcGFyZW50IFwKKwkJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIKKwkpICYmCisJcGFyZW50X2hlYWQ9JChjZCBwYXJlbnQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdCAiJHBhcmVudF9vcmlnIiA9ICIkcGFyZW50X2hlYWQiICYmCisJKAorCSAgICBjZCBjaGlsZCAmJgorCSAgICBnaXQgc2VuZC1wYWNrIC4uL3BhcmVudCBcCisJICAgICAgICArcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIKKwkpICYmCisJcGFyZW50X2hlYWQ9JChjZCBwYXJlbnQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJY2hpbGRfaGVhZD0kKGNkIHBhcmVudCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkcGFyZW50X2hlYWQiID0gIiRjaGlsZF9oZWFkIgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLQkncHVzaGluZyB3aWxkY2FyZCByZWZzcGVjcyByZXNwZWN0cyBmb3JjaW5nJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIHdpbGRjYXJkIHJlZnNwZWNzIHJlc3BlY3RzIGZvcmNpbmcnICcKIAlyZXdvdW5kX3B1c2hfc2V0dXAgJiYKLQlpZiBnaXQgc2VuZC1wYWNrIC4uL3BhcmVudC8uZ2l0IHJlZnMvaGVhZHMvKjpyZWZzL2hlYWRzLyoKLQl0aGVuCi0JCWZhbHNlCi0JZWxzZQotCQl0cnVlCi0JZmkgJiYgcmV3b3VuZF9wdXNoX2ZhaWxlZCAmJgotCWdpdCBzZW5kLXBhY2sgLi4vcGFyZW50Ly5naXQgK3JlZnMvaGVhZHMvKjpyZWZzL2hlYWRzLyogJiYKLQlyZXdvdW5kX3B1c2hfc3VjY2VlZGVkCisJcGFyZW50X29yaWc9JChjZCBwYXJlbnQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJKAorCSAgICBjZCBjaGlsZCAmJgorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIC4uL3BhcmVudCBcCisJICAgICAgICAicmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKiIKKwkpICYmCisJcGFyZW50X2hlYWQ9JChjZCBwYXJlbnQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdCAiJHBhcmVudF9vcmlnIiA9ICIkcGFyZW50X2hlYWQiICYmCisJKAorCSAgICBjZCBjaGlsZCAmJgorCSAgICBnaXQgc2VuZC1wYWNrIC4uL3BhcmVudCBcCisJICAgICAgICAiK3JlZnMvaGVhZHMvKjpyZWZzL2hlYWRzLyoiCisJKSAmJgorCXBhcmVudF9oZWFkPSQoY2QgcGFyZW50ICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCWNoaWxkX2hlYWQ9JChjZCBwYXJlbnQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdCAiJHBhcmVudF9oZWFkIiA9ICIkY2hpbGRfaGVhZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2FybiBwdXNoaW5nIHRvIGRlbGV0ZSBjdXJyZW50IGJyYW5jaCcgJworCXJld291bmRfcHVzaF9zZXR1cCAmJgorCSgKKwkgICAgY2QgY2hpbGQgJiYKKwkgICAgZ2l0IHNlbmQtcGFjayAuLi9wYXJlbnQgOnJlZnMvaGVhZHMvbWFzdGVyIDI+ZXJycworCSkgJiYKKwlncmVwICJ3YXJuaW5nOiB0byByZWZ1c2UgZGVsZXRpbmciIGNoaWxkL2VycnMgJiYKKwkoCisJCWNkIHBhcmVudCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcgorCSkKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDAzLXBvc3QtY2hlY2tvdXQtaG9vay5zaCBiL3QvdDU0MDMtcG9zdC1jaGVja291dC1ob29rLnNoCmluZGV4IDliMmUxYTkuLjU4NThiODYgMTAwNzU1Ci0tLSBhL3QvdDU0MDMtcG9zdC1jaGVja291dC1ob29rLnNoCisrKyBiL3QvdDU0MDMtcG9zdC1jaGVja291dC1ob29rLnNoCkBAIC03MSw0ICs3MSwxOCBAQAogICAgICAgICB0ZXN0ICRvbGQgPSAkbmV3IC1hICRmbGFnID0gMAogJwogCitpZiB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIGNvcmUuZmlsZW1vZGUpIiA9IHRydWU7IHRoZW4KK21rZGlyIC1wIHRlbXBsYXRlcy9ob29rcworY2F0ID50ZW1wbGF0ZXMvaG9va3MvcG9zdC1jaGVja291dCA8PCdFT0YnCisjIS9iaW4vc2gKK2VjaG8gJEAgPiAkR0lUX0RJUi9wb3N0LWNoZWNrb3V0LmFyZ3MKK0VPRgorY2htb2QgK3ggdGVtcGxhdGVzL2hvb2tzL3Bvc3QtY2hlY2tvdXQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jaGVja291dCBob29rIGlzIHRyaWdnZXJlZCBieSBjbG9uZScgJworCWdpdCBjbG9uZSAtLXRlbXBsYXRlPXRlbXBsYXRlcyAuIGNsb25lMyAmJgorCXRlc3QgLWYgY2xvbmUzLy5naXQvcG9zdC1jaGVja291dC5hcmdzCisnCitmaQorCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDAtZmV0Y2gtcGFjay5zaCBiL3QvdDU1MDAtZmV0Y2gtcGFjay5zaAppbmRleCBjNDUwZjMzLi5hOGMyY2EyIDEwMDc1NQotLS0gYS90L3Q1NTAwLWZldGNoLXBhY2suc2gKKysrIGIvdC90NTUwMC1mZXRjaC1wYWNrLnNoCkBAIC0zLDkgKzMsOCBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgogIwogCi10ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0aW5nIG11bHRpX2FjayBwYWNrIGZldGNoaW5nCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0aW5nIG11bHRpX2FjayBwYWNrIGZldGNoaW5nJwogCi0nCiAuIC4vdGVzdC1saWIuc2gKIAogIyBUZXN0IGZldGNoLXBhY2svdXBsb2FkLXBhY2sgcGFpci4KQEAgLTEzLDc3ICsxMiw2MCBAQAogIyBTb21lIGNvbnZlbmllbmNlIGZ1bmN0aW9ucwogCiBhZGQgKCkgewotCW5hbWU9JDEKLQl0ZXh0PSIkQCIKLQlicmFuY2g9YGVjaG8gJG5hbWUgfCBzZWQgLWUgJ3MvXlwoLlwpLiokL1wxLydgCi0JcGFyZW50cz0iIgorCW5hbWU9JDEgJiYKKwl0ZXh0PSIkQCIgJiYKKwlicmFuY2g9YGVjaG8gJG5hbWUgfCBzZWQgLWUgJ3MvXlwoLlwpLiokL1wxLydgICYmCisJcGFyZW50cz0iIiAmJgogCi0Jc2hpZnQKKwlzaGlmdCAmJgogCXdoaWxlIHRlc3QgJDE7IGRvCi0JCXBhcmVudHM9IiRwYXJlbnRzIC1wICQxIgorCQlwYXJlbnRzPSIkcGFyZW50cyAtcCAkMSIgJiYKIAkJc2hpZnQKLQlkb25lCisJZG9uZSAmJgogCi0JZWNobyAiJHRleHQiID4gdGVzdC50eHQKLQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRlc3QudHh0Ci0JdHJlZT0kKGdpdCB3cml0ZS10cmVlKQorCWVjaG8gIiR0ZXh0IiA+IHRlc3QudHh0ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0ZXN0LnR4dCAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKIAkjIG1ha2Ugc3VyZSB0aW1lc3RhbXBzIGFyZSBpbiBjb3JyZWN0IG9yZGVyCi0Jc2VjPSQoKCRzZWMrMSkpCi0JY29tbWl0PSQoZWNobyAiJHRleHQiIHwgR0lUX0FVVEhPUl9EQVRFPSRzZWMgXAotCQlnaXQgY29tbWl0LXRyZWUgJHRyZWUgJHBhcmVudHMgMj4+bG9nMi50eHQpCi0JZXZhbCAiJG5hbWU9JGNvbW1pdDsgZXhwb3J0ICRuYW1lIgotCWVjaG8gJGNvbW1pdCA+IC5naXQvcmVmcy9oZWFkcy8kYnJhbmNoCisJdGVzdF90aWNrICYmCisJY29tbWl0PSQoZWNobyAiJHRleHQiIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlICRwYXJlbnRzKSAmJgorCWV2YWwgIiRuYW1lPSRjb21taXQ7IGV4cG9ydCAkbmFtZSIgJiYKKwllY2hvICRjb21taXQgPiAuZ2l0L3JlZnMvaGVhZHMvJGJyYW5jaCAmJgogCWV2YWwgJHticmFuY2h9VElQPSRjb21taXQKIH0KIAotY291bnRfb2JqZWN0cyAoKSB7Ci0JbHMgLmdpdC9vYmplY3RzLz8/LyogMj4+bG9nMi50eHQgfCB3YyAtbCB8IHRyIC1kICIgIgotfQotCi10ZXN0X2V4cGVjdF9vYmplY3RfY291bnQgKCkgewotCW1lc3NhZ2U9JDEKLQljb3VudD0kMgotCi0Jb3V0cHV0PSIkKGNvdW50X29iamVjdHMpIgotCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotCQkibmV3IG9iamVjdCBjb3VudCAkbWVzc2FnZSIgXAotCQkidGVzdCAkY291bnQgPSAkb3V0cHV0IgotfQotCiBwdWxsX3RvX2NsaWVudCAoKSB7Ci0JbnVtYmVyPSQxCi0JaGVhZHM9JDIKLQljb3VudD0kMwotCW5vX3N0cmljdF9jb3VudF9jaGVjaz0kNAorCW51bWJlcj0kMSAmJgorCWhlYWRzPSQyICYmCisJY291bnQ9JDMgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbnVtYmVyIHB1bGwiICcKKwkJKAorCQkJY2QgY2xpZW50ICYmCisJCQlnaXQgZmV0Y2gtcGFjayAtayAtdiAuLiAkaGVhZHMgJiYKIAotCWNkIGNsaWVudAotCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRudW1iZXIgcHVsbCIgXAotCQkiZ2l0IGZldGNoLXBhY2sgLWsgLXYgLi4gJGhlYWRzIgotCWNhc2UgIiRoZWFkcyIgaW4gKkEqKSBlY2hvICRBVElQID4gLmdpdC9yZWZzL2hlYWRzL0E7OyBlc2FjCi0JY2FzZSAiJGhlYWRzIiBpbiAqQiopIGVjaG8gJEJUSVAgPiAuZ2l0L3JlZnMvaGVhZHMvQjs7IGVzYWMKLQlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9gZWNobyAkaGVhZHMgfCBzZWQgLWUgJ3MvXlwoLlwpLiokL1wxLydgCisJCQljYXNlICIkaGVhZHMiIGluCisJCQkgICAgKkEqKQorCQkJCSAgICBlY2hvICRBVElQID4gLmdpdC9yZWZzL2hlYWRzL0E7OworCQkJZXNhYyAmJgorCQkJY2FzZSAiJGhlYWRzIiBpbiAqQiopCisJCQkgICAgZWNobyAkQlRJUCA+IC5naXQvcmVmcy9oZWFkcy9COzsKKwkJCWVzYWMgJiYKKwkJCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL2BlY2hvICRoZWFkcyBcCisJCQkJfCBzZWQgLWUgInMvXlwoLlwpLiokL1wxLyJgICYmCiAKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmc2NrIiAnZ2l0IGZzY2sgLS1mdWxsID4gZnNjay50eHQgMj4mMScKKwkJCWdpdCBmc2NrIC0tZnVsbCAmJgogCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZG93bmxvYWRlZCByZXN1bHRzJyBcCi0JJ212IC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKiAuICYmCi0JIHA9YGxzIC0xIHBhY2stKi5wYWNrYCAmJgotCSBnaXQgdW5wYWNrLW9iamVjdHMgPCRwICYmCi0JIGdpdCBmc2NrIC0tZnVsbCcKKwkJCW12IC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKiAuICYmCisJCQlwPWBscyAtMSBwYWNrLSoucGFja2AgJiYKKwkJCWdpdCB1bnBhY2stb2JqZWN0cyA8JHAgJiYKKwkJCWdpdCBmc2NrIC0tZnVsbCAmJgogCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAibmV3IG9iamVjdCBjb3VudCBhZnRlciAkbnVtYmVyIHB1bGwiIFwKLQknaWR4PWBlY2hvIHBhY2stKi5pZHhgICYmCi0JIHBhY2tfY291bnQ9YGdpdCBzaG93LWluZGV4IDwkaWR4IHwgd2MgLWxgICYmCi0JIHRlc3QgJHBhY2tfY291bnQgPSAkY291bnQnCi0JdGVzdCAteiAiJHBhY2tfY291bnQiICYmIHBhY2tfY291bnQ9MAotCWlmIFsgLXogIiRub19zdHJpY3RfY291bnRfY2hlY2siIF07IHRoZW4KLQkJdGVzdF9leHBlY3Rfc3VjY2VzcyAibWluaW1hbCBjb3VudCIgInRlc3QgJGNvdW50ID0gJHBhY2tfY291bnQiCi0JZWxzZQotCQl0ZXN0ICRjb3VudCAhPSAkcGFja19jb3VudCAmJiBcCi0JCQllY2hvICJXQVJOSU5HOiAkcGFja19jb3VudCBvYmplY3RzIHRyYW5zbWl0dGVkLCBvbmx5ICRjb3VudCBvZiB3aGljaCB3ZXJlIG5lZWRlZCIKLQlmaQotCXJtIC1mIHBhY2stKgotCWNkIC4uCisJCQlpZHg9YGVjaG8gcGFjay0qLmlkeGAgJiYKKwkJCXBhY2tfY291bnQ9YGdpdCBzaG93LWluZGV4IDwkaWR4IHwgd2MgLWxgICYmCisJCQl0ZXN0ICRwYWNrX2NvdW50ID0gJGNvdW50ICYmCisJCQlybSAtZiBwYWNrLSoKKwkJKQorCScKIH0KIAogIyBIZXJlIGJlZ2lucyB0aGUgYWN0dWFsIHRlc3RpbmcKQEAgLTk0LDg5ICs3NiwxMjkgQEAKIAogIyBjbGllbnQgcHVsbHMgQTIwLCBCMS4gVGhlbiB0cmFja3Mgb25seSBCLiBUaGVuIHB1bGxzIEEuCiAKLSgKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCiAJbWtkaXIgY2xpZW50ICYmCi0JY2QgY2xpZW50ICYmCi0JZ2l0IGluaXQgMj4+IGxvZzIudHh0ICYmCi0JZ2l0IGNvbmZpZyB0cmFuc2Zlci51bnBhY2tsaW1pdCAwCi0pCi0KLWFkZCBBMQotCi1wcmV2PTE7IGN1cj0yOyB3aGlsZSBbICRjdXIgLWxlIDEwIF07IGRvCi0JYWRkIEEkY3VyICQoZXZhbCBlY2hvIFwkQSRwcmV2KQotCXByZXY9JGN1cgotCWN1cj0kKCgkY3VyKzEpKQotZG9uZQotCi1hZGQgQjEgJEExCi0KLWVjaG8gJEFUSVAgPiAuZ2l0L3JlZnMvaGVhZHMvQQotZWNobyAkQlRJUCA+IC5naXQvcmVmcy9oZWFkcy9CCi1naXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9CCisJKAorCQljZCBjbGllbnQgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGNvbmZpZyB0cmFuc2Zlci51bnBhY2tsaW1pdCAwCisJKSAmJgorCWFkZCBBMSAmJgorCXByZXY9MSAmJgorCWN1cj0yICYmCisJd2hpbGUgWyAkY3VyIC1sZSAxMCBdOyBkbworCQlhZGQgQSRjdXIgJChldmFsIGVjaG8gXCRBJHByZXYpICYmCisJCXByZXY9JGN1ciAmJgorCQljdXI9JCgoJGN1cisxKSkKKwlkb25lICYmCisJYWRkIEIxICRBMQorCWVjaG8gJEFUSVAgPiAuZ2l0L3JlZnMvaGVhZHMvQSAmJgorCWVjaG8gJEJUSVAgPiAuZ2l0L3JlZnMvaGVhZHMvQiAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL0IKKycKIAogcHVsbF90b19jbGllbnQgMXN0ICJCIEEiICQoKDExKjMpKQogCi1hZGQgQTExICRBMTAKLQotcHJldj0xOyBjdXI9Mjsgd2hpbGUgWyAkY3VyIC1sZSA2NSBdOyBkbwotCWFkZCBCJGN1ciAkKGV2YWwgZWNobyBcJEIkcHJldikKLQlwcmV2PSRjdXIKLQljdXI9JCgoJGN1cisxKSkKLWRvbmUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QgMXN0IHB1bGwgc2V0dXAnICcKKwlhZGQgQTExICRBMTAgJiYKKwlwcmV2PTEgJiYKKwljdXI9MiAmJgorCXdoaWxlIFsgJGN1ciAtbGUgNjUgXTsgZG8KKwkJYWRkIEIkY3VyICQoZXZhbCBlY2hvIFwkQiRwcmV2KSAmJgorCQlwcmV2PSRjdXIgJiYKKwkJY3VyPSQoKCRjdXIrMSkpCisJZG9uZQorJwogCiBwdWxsX3RvX2NsaWVudCAybmQgIkIiICQoKDY0KjMpKQogCi1wdWxsX3RvX2NsaWVudCAzcmQgIkEiICQoKDEqMykpICMgb2xkIGZhaWxzCitwdWxsX3RvX2NsaWVudCAzcmQgIkEiICQoKDEqMykpCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHNoYWxsb3ciICdnaXQgY2xvbmUgLS1kZXB0aCAyICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3cnCi0KLShjZCBzaGFsbG93OyBnaXQgY291bnQtb2JqZWN0cyAtdikgPiBjb3VudC5zaGFsbG93Ci0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50IiBcCi0JInRlc3QgXCJpbi1wYWNrOiAxOFwiID0gXCIkKGdyZXAgaW4tcGFjayBjb3VudC5zaGFsbG93KVwiIgotCi1jb3VudF9vdXRwdXQgKCkgewotCXNlZCAtZSAnL15pbi1wYWNrOi9kJyAtZSAnL15wYWNrczovZCcgLWUgJy9ec2l6ZS1wYWNrOi9kJyAtZSAnLzogMCQvZCcgIiQxIgotfQotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCAocGFydCAyKSIgJwotCXRlc3QgLXogIiQoY291bnRfb3V0cHV0IGNvdW50LnNoYWxsb3cpIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdycgJworCWdpdCBjbG9uZSAtLWRlcHRoIDIgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdwogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJmc2NrIGluIHNoYWxsb3cgcmVwbyIgXAotCSIoY2Qgc2hhbGxvdzsgZ2l0IGZzY2sgLS1mdWxsKSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50JyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12CisJKSA+IGNvdW50LnNoYWxsb3cgJiYKKwlncmVwICJeaW4tcGFjazogMTgiIGNvdW50LnNoYWxsb3cKKycKIAotI3Rlc3RfZG9uZTsgZXhpdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQgKHBhcnQgMiknICcKKwlzZWQgLWUgIi9eaW4tcGFjazovZCIgLWUgIi9ecGFja3M6L2QiIC1lICIvXnNpemUtcGFjazovZCIgXAorCSAgICAtZSAiLzogMCQvZCIgY291bnQuc2hhbGxvdyA+IGNvdW50X291dHB1dCAmJgorCSEgdGVzdCAtcyBjb3VudF9vdXRwdXQKKycKIAotYWRkIEI2NiAkQjY1Ci1hZGQgQjY3ICRCNjYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBmc2NrIC0tZnVsbAorCSkKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAicHVsbCBpbiBzaGFsbG93IHJlcG8iIFwKLQkiKGNkIHNoYWxsb3c7IGdpdCBwdWxsIC4uIEIpIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHR3byBtb3JlJyAnCisJYWRkIEI2NiAkQjY1ICYmCisJYWRkIEI2NyAkQjY2CisnCiAKLShjZCBzaGFsbG93OyBnaXQgY291bnQtb2JqZWN0cyAtdikgPiBjb3VudC5zaGFsbG93Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCIgXAotCSJ0ZXN0IFwiY291bnQ6IDZcIiA9IFwiJChncmVwIGNvdW50IGNvdW50LnNoYWxsb3cpXCIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIGluIHNoYWxsb3cgcmVwbycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgcHVsbCAuLiBCCisJKQorJwogCi1hZGQgQjY4ICRCNjcKLWFkZCBCNjkgJEI2OAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdyAmJgorCWdyZXAgIl5jb3VudDogNiIgY291bnQuc2hhbGxvdworJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJkZWVwZW5pbmcgcHVsbCBpbiBzaGFsbG93IHJlcG8iIFwKLQkiKGNkIHNoYWxsb3c7IGdpdCBwdWxsIC0tZGVwdGggNCAuLiBCKSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB0d28gbW9yZSAocGFydCAyKScgJworCWFkZCBCNjggJEI2NyAmJgorCWFkZCBCNjkgJEI2OAorJwogCi0oY2Qgc2hhbGxvdzsgZ2l0IGNvdW50LW9iamVjdHMgLXYpID4gY291bnQuc2hhbGxvdwotdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQiIFwKLQkidGVzdCBcImNvdW50OiAxMlwiID0gXCIkKGdyZXAgY291bnQgY291bnQuc2hhbGxvdylcIiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZXBlbmluZyBwdWxsIGluIHNoYWxsb3cgcmVwbycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgcHVsbCAtLWRlcHRoIDQgLi4gQgorCSkKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVlcGVuaW5nIGZldGNoIGluIHNoYWxsb3cgcmVwbyIgXAotCSIoY2Qgc2hhbGxvdzsgZ2l0IGZldGNoIC0tZGVwdGggNCAuLiBBOkEpIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdyAmJgorCWdyZXAgIl5jb3VudDogMTIiIGNvdW50LnNoYWxsb3cKKycKIAotKGNkIHNoYWxsb3c7IGdpdCBjb3VudC1vYmplY3RzIC12KSA+IGNvdW50LnNoYWxsb3cKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50IiBcCi0JInRlc3QgXCJjb3VudDogMThcIiA9IFwiJChncmVwIGNvdW50IGNvdW50LnNoYWxsb3cpXCIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWVwZW5pbmcgZmV0Y2ggaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBmZXRjaCAtLWRlcHRoIDQgLi4gQTpBCisJKQorJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJwdWxsIGluIHNoYWxsb3cgcmVwbyB3aXRoIG1pc3NpbmcgbWVyZ2UgYmFzZSIgXAotCSIoY2Qgc2hhbGxvdyAmJiB0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLWRlcHRoIDQgLi4gQSkiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93ICYmCisJZ3JlcCAiXmNvdW50OiAxOCIgY291bnQuc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIGluIHNoYWxsb3cgcmVwbyB3aXRoIG1pc3NpbmcgbWVyZ2UgYmFzZScgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLWRlcHRoIDQgLi4gQQorCSkKKycKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTAyLXF1aWNrZmV0Y2guc2ggYi90L3Q1NTAyLXF1aWNrZmV0Y2guc2gKaW5kZXggMTZlYWRkNi4uMTAzN2E3MiAxMDA3NTUKLS0tIGEvdC90NTUwMi1xdWlja2ZldGNoLnNoCisrKyBiL3QvdDU1MDItcXVpY2tmZXRjaC5zaApAQCAtMTE5LDQgKzExOSwyNCBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1aWNrZmV0Y2ggc2hvdWxkIGhhbmRsZSB+MTAwMCByZWZzIChvbiBXaW5kb3dzKScgJworCisJZ2l0IGdjICYmCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlicmFuY2hwcmVmaXg9IiRoZWFkIHJlZnMvaGVhZHMvYnJhbmNoIiAmJgorCWZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvCisJCWZvciBqIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvCisJCQlmb3IgayBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbworCQkJCWVjaG8gIiRicmFuY2hwcmVmaXgkaSRqJGsiID4+IC5naXQvcGFja2VkLXJlZnMKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUgJiYKKwkoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZldGNoCisJKQorCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwMy10YWdmb2xsb3cuc2ggYi90L3Q1NTAzLXRhZ2ZvbGxvdy5zaAppbmRleCA0MDc0ZTIzLi5kNWRiNzVkIDEwMDc1NQotLS0gYS90L3Q1NTAzLXRhZ2ZvbGxvdy5zaAorKysgYi90L3Q1NTAzLXRhZ2ZvbGxvdy5zaApAQCAtNCw2ICs0LDEyIEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCitjYXNlICQodW5hbWUgLXMpIGluCisqTUlOR1cqKQorCXNheSAiR0lUX0RFQlVHX1NFTkRfUEFDSyBub3Qgc3VwcG9ydGVkIC0gc2tpcHBpbmcgdGVzdHMiCisJdGVzdF9kb25lCitlc2FjCisKICMgRW5kIHN0YXRlIG9mIHRoZSByZXBvc2l0b3J5OgogIwogIyAgICAgICAgIFQgLSB0YWcxICAgICAgICAgIFMgLSB0YWcyCmRpZmYgLS1naXQgYS90L3Q1NTA1LXJlbW90ZS5zaCBiL3QvdDU1MDUtcmVtb3RlLnNoCmluZGV4IGJjNWI3Y2UuLjg1MmNjYjUgMTAwNzU1Ci0tLSBhL3QvdDU1MDUtcmVtb3RlLnNoCisrKyBiL3QvdDU1MDUtcmVtb3RlLnNoCkBAIC0yOCw3ICsyOCw3IEBACiB9CiAKIGNoZWNrX3JlbW90ZV90cmFjayAoKSB7Ci0JYWN0dWFsPSQoZ2l0IHJlbW90ZSBzaG93ICIkMSIgfCBzZWQgLWUgJzEsL1RyYWNrZWQvZCcpICYmCisJYWN0dWFsPSQoZ2l0IHJlbW90ZSBzaG93ICIkMSIgfCBzZWQgLW5lICdzfF4gICAgXCguKlwpIHRyYWNrZWQkfFwxfHAnKQogCXNoaWZ0ICYmCiAJdG9rZW5zX21hdGNoICIkKiIgIiRhY3R1YWwiCiB9CkBAIC0xMzUsNDggKzEzNSw3OCBAQAogCiBjYXQgPiB0ZXN0L2V4cGVjdCA8PCBFT0YKICogcmVtb3RlIG9yaWdpbgotICBVUkw6ICQocHdkKS9vbmUKLSAgUmVtb3RlIGJyYW5jaCBtZXJnZWQgd2l0aCAnZ2l0IHB1bGwnIHdoaWxlIG9uIGJyYW5jaCBtYXN0ZXIKKyAgRmV0Y2ggVVJMOiAkKHB3ZCkvb25lCisgIFB1c2ggIFVSTDogJChwd2QpL29uZQorICBIRUFEIGJyYW5jaDogbWFzdGVyCisgIFJlbW90ZSBicmFuY2hlczoKKyAgICBtYXN0ZXIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy9vcmlnaW4pCisgICAgc2lkZSAgIHRyYWNrZWQKKyAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoKKyAgICBhaGVhZCAgICBtZXJnZXMgd2l0aCByZW1vdGUgbWFzdGVyCisgICAgbWFzdGVyICAgbWVyZ2VzIHdpdGggcmVtb3RlIG1hc3RlcgorICAgIG9jdG9wdXMgIG1lcmdlcyB3aXRoIHJlbW90ZSB0b3BpYy1hCisgICAgICAgICAgICAgICAgYW5kIHdpdGggcmVtb3RlIHRvcGljLWIKKyAgICAgICAgICAgICAgICBhbmQgd2l0aCByZW1vdGUgdG9waWMtYworICAgIHJlYmFzZSAgcmViYXNlcyBvbnRvIHJlbW90ZSBtYXN0ZXIKKyAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnOgorICAgIG1hc3RlciBwdXNoZXMgdG8gbWFzdGVyICAgKGxvY2FsIG91dCBvZiBkYXRlKQorICAgIG1hc3RlciBwdXNoZXMgdG8gdXBzdHJlYW0gKGNyZWF0ZSkKKyogcmVtb3RlIHR3bworICBGZXRjaCBVUkw6IC4uL3R3bworICBQdXNoICBVUkw6IC4uL3RocmVlCisgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6CisgICAgYW5vdGhlcgogICAgIG1hc3RlcgotICBOZXcgcmVtb3RlIGJyYW5jaCAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvb3JpZ2luKQotICAgIG1hc3RlcgotICBUcmFja2VkIHJlbW90ZSBicmFuY2hlcwotICAgIHNpZGUKLSAgICBtYXN0ZXIKLSAgTG9jYWwgYnJhbmNoZXMgcHVzaGVkIHdpdGggJ2dpdCBwdXNoJwotICAgIG1hc3Rlcjp1cHN0cmVhbQotICAgICtyZWZzL3RhZ3MvbGFzdGJhY2t1cAorICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCc6CisgICAgYWhlYWQgIGZvcmNlcyB0byBtYXN0ZXIgIChmYXN0IGZvcndhcmRhYmxlKQorICAgIG1hc3RlciBwdXNoZXMgdG8gYW5vdGhlciAodXAgdG8gZGF0ZSkKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93JyAnCiAJKGNkIHRlc3QgJiYKLQkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLmZldGNoIFwKLQkJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy91cHN0cmVhbSAmJgorCSBnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4uZmV0Y2ggcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy91cHN0cmVhbSAmJgogCSBnaXQgZmV0Y2ggJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIGFoZWFkIG9yaWdpbi9tYXN0ZXIgJiYKKwkgZWNobyAxID4+IGZpbGUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gdXBkYXRlIGZpbGUgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgYnJhbmNoIC0tdHJhY2sgb2N0b3B1cyBvcmlnaW4vbWFzdGVyICYmCisJIGdpdCBicmFuY2ggLS10cmFjayByZWJhc2Ugb3JpZ2luL21hc3RlciAmJgogCSBnaXQgYnJhbmNoIC1kIC1yIG9yaWdpbi9tYXN0ZXIgJiYKKwkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudHdvLnVybCAuLi90d28gJiYKKwkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudHdvLnB1c2h1cmwgLi4vdGhyZWUgJiYKKwkgZ2l0IGNvbmZpZyBicmFuY2gucmViYXNlLnJlYmFzZSB0cnVlICYmCisJIGdpdCBjb25maWcgYnJhbmNoLm9jdG9wdXMubWVyZ2UgInRvcGljLWEgdG9waWMtYiB0b3BpYy1jIiAmJgogCSAoY2QgLi4vb25lICYmCiAJICBlY2hvIDEgPiBmaWxlICYmCiAJICB0ZXN0X3RpY2sgJiYKIAkgIGdpdCBjb21taXQgLW0gdXBkYXRlIGZpbGUpICYmCi0JIGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5wdXNoIFwKLQkJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy91cHN0cmVhbSAmJgotCSBnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4ucHVzaCBcCi0JCStyZWZzL3RhZ3MvbGFzdGJhY2t1cCAmJgotCSBnaXQgcmVtb3RlIHNob3cgb3JpZ2luID4gb3V0cHV0ICYmCisJIGdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9yaWdpbi5wdXNoIDogJiYKKwkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLnB1c2ggcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy91cHN0cmVhbSAmJgorCSBnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4ucHVzaCArcmVmcy90YWdzL2xhc3RiYWNrdXAgJiYKKwkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudHdvLnB1c2ggK3JlZnMvaGVhZHMvYWhlYWQ6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudHdvLnB1c2ggcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9hbm90aGVyICYmCisJIGdpdCByZW1vdGUgc2hvdyBvcmlnaW4gdHdvID4gb3V0cHV0ICYmCisJIGdpdCBicmFuY2ggLWQgcmViYXNlIG9jdG9wdXMgJiYKIAkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKICcKIAogY2F0ID4gdGVzdC9leHBlY3QgPDwgRU9GCiAqIHJlbW90ZSBvcmlnaW4KLSAgVVJMOiAkKHB3ZCkvb25lCi0gIFJlbW90ZSBicmFuY2ggbWVyZ2VkIHdpdGggJ2dpdCBwdWxsJyB3aGlsZSBvbiBicmFuY2ggbWFzdGVyCi0gICAgbWFzdGVyCi0gIFRyYWNrZWQgcmVtb3RlIGJyYW5jaGVzCisgIEZldGNoIFVSTDogJChwd2QpL29uZQorICBQdXNoICBVUkw6ICQocHdkKS9vbmUKKyAgSEVBRCBicmFuY2g6IChub3QgcXVlcmllZCkKKyAgUmVtb3RlIGJyYW5jaGVzOiAoc3RhdHVzIG5vdCBxdWVyaWVkKQogICAgIG1hc3RlcgogICAgIHNpZGUKLSAgTG9jYWwgYnJhbmNoZXMgcHVzaGVkIHdpdGggJ2dpdCBwdXNoJwotICAgIG1hc3Rlcjp1cHN0cmVhbQotICAgICtyZWZzL3RhZ3MvbGFzdGJhY2t1cAorICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOgorICAgIGFoZWFkICBtZXJnZXMgd2l0aCByZW1vdGUgbWFzdGVyCisgICAgbWFzdGVyIG1lcmdlcyB3aXRoIHJlbW90ZSBtYXN0ZXIKKyAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnIChzdGF0dXMgbm90IHF1ZXJpZWQpOgorICAgIChtYXRjaGluZykgICAgICAgICAgIHB1c2hlcyB0byAobWF0Y2hpbmcpCisgICAgcmVmcy9oZWFkcy9tYXN0ZXIgICAgcHVzaGVzIHRvIHJlZnMvaGVhZHMvdXBzdHJlYW0KKyAgICByZWZzL3RhZ3MvbGFzdGJhY2t1cCBmb3JjZXMgdG8gcmVmcy90YWdzL2xhc3RiYWNrdXAKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IC1uJyAnCkBAIC0xOTcsNiArMjI3LDQ2IEBACiAJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQtaGVhZCAtLWRlbGV0ZScgJworCShjZCB0ZXN0ICYmCisJIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEICYmCisJIGdpdCByZW1vdGUgc2V0LWhlYWQgLS1kZWxldGUgb3JpZ2luICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQtaGVhZCAtLWF1dG8nICcKKwkoY2QgdGVzdCAmJgorCSBnaXQgcmVtb3RlIHNldC1oZWFkIC0tYXV0byBvcmlnaW4gJiYKKwkgZWNobyByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA+ZXhwZWN0ICYmCisJIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEID5vdXRwdXQgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKworY2F0ID50ZXN0L2V4cGVjdCA8PEVPRgorZXJyb3I6IE11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6CisgIGdpdCByZW1vdGUgc2V0LWhlYWQgdHdvIGFub3RoZXIKKyAgZ2l0IHJlbW90ZSBzZXQtaGVhZCB0d28gbWFzdGVyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0LWhlYWQgLS1hdXRvIGZhaWxzIHcvbXVsdGlwbGUgSEVBRHMnICcKKwkoY2QgdGVzdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIHNldC1oZWFkIC0tYXV0byB0d28gPm91dHB1dCAyPiYxICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKKycKKworY2F0ID50ZXN0L2V4cGVjdCA8PEVPRgorcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC1oZWFkIGV4cGxpY2l0JyAnCisJKGNkIHRlc3QgJiYKKwkgZ2l0IHJlbW90ZSBzZXQtaGVhZCBvcmlnaW4gc2lkZTIgJiYKKwkgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgPm91dHB1dCAmJgorCSBnaXQgcmVtb3RlIHNldC1oZWFkIG9yaWdpbiBtYXN0ZXIgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKKycKKwogY2F0ID4gdGVzdC9leHBlY3QgPDwgRU9GCiBQcnVuaW5nIG9yaWdpbgogVVJMOiAkKHB3ZCkvb25lCkBAIC0zNDMsNyArNDEzLDcgQEAKIAlnaXQgY2xvbmUgb25lIHRocmVlICYmCiAJKGNkIHRocmVlICYmCiAJIGdpdCByZW1vdGUgc2hvdyBvcmlnaW4gPiBvdXRwdXQgJiYKLQkgISBncmVwIEhFQUQgPCBvdXRwdXQgJiYKKwkgISBncmVwICJeICpIRUFEJCIgPCBvdXRwdXQgJiYKIAkgISBncmVwIC1pIHN0YWxlIDwgb3V0cHV0KQogCiAnCkBAIC00MDIsNCArNDcyLDQxIEBACiAJIHRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoKSIgPSAicmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vcmlnaW4iKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgcHJ1bmUgdG8gY2F1c2UgYSBkYW5nbGluZyBzeW1yZWYnICcKKwlnaXQgY2xvbmUgb25lIHNldmVuICYmCisJKAorCQljZCBvbmUgJiYKKwkJZ2l0IGNoZWNrb3V0IHNpZGUyICYmCisJCWdpdCBicmFuY2ggLUQgbWFzdGVyCisJKSAmJgorCSgKKwkJY2Qgc2V2ZW4gJiYKKwkJZ2l0IHJlbW90ZSBwcnVuZSBvcmlnaW4KKwkpIDI+ZXJyICYmCisJZ3JlcCAiaGFzIGJlY29tZSBkYW5nbGluZyIgZXJyICYmCisKKwk6IEFuZCB0aGUgZGFuZ2xpbmcgc3ltcmVmIHdpbGwgbm90IGNhdXNlIG90aGVyIGFubm95aW5nIGVycm9ycworCSgKKwkJY2Qgc2V2ZW4gJiYKKwkJZ2l0IGJyYW5jaCAtYQorCSkgMj5lcnIgJiYKKwkhIGdyZXAgInBvaW50cyBub3doZXJlIiBlcnIKKwkoCisJCWNkIHNldmVuICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggbm9tb3JlIG9yaWdpbgorCSkgMj5lcnIgJiYKKwlncmVwICJkYW5nbGluZyBzeW1yZWYiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGVtcHR5IHJlbW90ZScgJworCisJdGVzdF9jcmVhdGVfcmVwbyBlbXB0eSAmJgorCWdpdCBjbG9uZSBlbXB0eSBlbXB0eS1jbG9uZSAmJgorCSgKKwkJY2QgZW1wdHktY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzaG93IG9yaWdpbgorCSkKKycKKwogdGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDU1MDYtcmVtb3RlLWdyb3Vwcy5zaCBiL3QvdDU1MDYtcmVtb3RlLWdyb3Vwcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYTE4MDZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUwNi1yZW1vdGUtZ3JvdXBzLnNoCkBAIC0wLDAgKzEsODEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmVtb3RlIGdyb3VwIGhhbmRsaW5nJworLiAuL3Rlc3QtbGliLnNoCisKK21hcmsoKSB7CisJZWNobyAiJDEiID5tYXJrCit9CisKK3VwZGF0ZV9yZXBvKCkgeworCShjZCAkMSAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1GIC4uL21hcmspCit9CisKK3VwZGF0ZV9yZXBvcygpIHsKKwl1cGRhdGVfcmVwbyBvbmUgJDEgJiYKKwl1cGRhdGVfcmVwbyB0d28gJDEKK30KKworcmVwb19mZXRjaGVkKCkgeworCWlmIHRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolcyAkMSAtLWAiID0gImBjYXQgbWFya2AiOyB0aGVuCisJCWVjaG8gPiYyICJyZXBvIHdhcyBmZXRjaGVkOiAkMSIKKwkJcmV0dXJuIDAKKwlmaQorCWVjaG8gPiYyICJyZXBvIHdhcyBub3QgZmV0Y2hlZDogJDEiCisJcmV0dXJuIDEKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBvbmUgJiYgKGNkIG9uZSAmJiBnaXQgaW5pdCkgJiYKKwlta2RpciB0d28gJiYgKGNkIHR3byAmJiBnaXQgaW5pdCkgJiYKKwlnaXQgcmVtb3RlIGFkZCAtbSBtYXN0ZXIgb25lIG9uZSAmJgorCWdpdCByZW1vdGUgYWRkIC1tIG1hc3RlciB0d28gdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGdyb3VwIHVwZGF0ZXMgYWxsJyAnCisJbWFyayB1cGRhdGUtYWxsICYmCisJdXBkYXRlX3JlcG9zICYmCisJZ2l0IHJlbW90ZSB1cGRhdGUgJiYKKwlyZXBvX2ZldGNoZWQgb25lICYmCisJcmVwb19mZXRjaGVkIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25leGlzdGFudCBncm91cCBwcm9kdWNlcyBlcnJvcicgJworCW1hcmsgbm9uZXhpc3RhbnQgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIHVwZGF0ZSBub25leGlzdGFudCAmJgorCSEgcmVwb19mZXRjaGVkIG9uZSAmJgorCSEgcmVwb19mZXRjaGVkIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGluZyBncm91cCB1cGRhdGVzIGFsbCBtZW1iZXJzJyAnCisJbWFyayBncm91cC1hbGwgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZXMuYWxsIG9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3Rlcy5hbGwgdHdvICYmCisJZ2l0IHJlbW90ZSB1cGRhdGUgYWxsICYmCisJcmVwb19mZXRjaGVkIG9uZSAmJgorCXJlcG9fZmV0Y2hlZCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgZ3JvdXAgZG9lcyBub3QgdXBkYXRlIG5vbi1tZW1iZXJzJyAnCisJbWFyayBncm91cC1zb21lICYmCisJdXBkYXRlX3JlcG9zICYmCisJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGVzLnNvbWUgb25lICYmCisJZ2l0IHJlbW90ZSB1cGRhdGUgc29tZSAmJgorCXJlcG9fZmV0Y2hlZCBvbmUgJiYKKwkhIHJlcG9fZmV0Y2hlZCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgcmVtb3RlIG5hbWUgdXBkYXRlcyB0aGF0IHJlbW90ZScgJworCW1hcmsgcmVtb3RlLW5hbWUgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwlnaXQgcmVtb3RlIHVwZGF0ZSBvbmUgJiYKKwlyZXBvX2ZldGNoZWQgb25lICYmCisJISByZXBvX2ZldGNoZWQgdHdvCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxMC1mZXRjaC5zaCBiL3QvdDU1MTAtZmV0Y2guc2gKaW5kZXggOWU2NzliNC4uZDEzYzgwNiAxMDA3NTUKLS0tIGEvdC90NTUxMC1mZXRjaC5zaAorKysgYi90L3Q1NTEwLWZldGNoLnNoCkBAIC05LDYgKzksMTEgQEAKIAogRD1gcHdkYAogCit0ZXN0X2J1bmRsZV9vYmplY3RfY291bnQgKCkgeworCWdpdCB2ZXJpZnktcGFjayAtdiAiJDEiID52ZXJpZnkub3V0ICYmCisJdGVzdCAiJDIiID0gJChncmVwICdeWzAtOWEtZl1cezQwXH0gJyB2ZXJpZnkub3V0IHwgd2MgLWwpCit9CisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJwogCWVjaG8gPmZpbGUgb3JpZ2luYWwgJiYKIAlnaXQgYWRkIGZpbGUgJiYKQEAgLTE0Niw2ICsxNTEsNyBAQAogCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAiJEQvYnVuZGxlMSIgbWFzdGVyOm1hc3RlcgogJwogCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSAxIGhhcyBvbmx5IDMgZmlsZXMgJyAnCiAJY2QgIiREIiAmJgogCSgKQEAgLTE1Niw4ICsxNjIsNyBAQAogCQljYXQKIAkpIDxidW5kbGUxID5idW5kbGUucGFjayAmJgogCWdpdCBpbmRleC1wYWNrIGJ1bmRsZS5wYWNrICYmCi0JdmVyaWZ5PSQoZ2l0IHZlcmlmeS1wYWNrIC12IGJ1bmRsZS5wYWNrKSAmJgotCXRlc3QgNCA9ICQoZWNobyAiJHZlcmlmeSIgfCB3YyAtbCkKKwl0ZXN0X2J1bmRsZV9vYmplY3RfY291bnQgYnVuZGxlLnBhY2sgMwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmJ1bmRsZSAyJyAnCkBAIC0xODAsNyArMTg1LDcgQEAKIAkJY2F0CiAJKSA8YnVuZGxlMyA+YnVuZGxlLnBhY2sgJiYKIAlnaXQgaW5kZXgtcGFjayBidW5kbGUucGFjayAmJgotCXRlc3QgNCA9ICQoZ2l0IHZlcmlmeS1wYWNrIC12IGJ1bmRsZS5wYWNrIHwgd2MgLWwpCisJdGVzdF9idW5kbGVfb2JqZWN0X2NvdW50IGJ1bmRsZS5wYWNrIDMKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVuZGxlIHNob3VsZCBiZSBhYmxlIHRvIGNyZWF0ZSBhIGZ1bGwgaGlzdG9yeScgJwpAQCAtMTkxLDM4ICsxOTYsMzkgQEAKIAogJwogCi10ZXN0ICIkVEVTVF9SU1lOQyIgJiYgeworISByc3luYyAtLWhlbHAgPiAvZGV2L251bGwgMj4gL2Rldi9udWxsICYmCitzYXkgJ1NraXBwaW5nIHJzeW5jIHRlc3RzIGJlY2F1c2UgcnN5bmMgd2FzIG5vdCBmb3VuZCcgfHwgewogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdmlhIHJzeW5jJyAnCiAJZ2l0IHBhY2stcmVmcyAmJgogCW1rZGlyIHJzeW5jZWQgJiYKLQljZCByc3luY2VkICYmCi0JZ2l0IGluaXQgJiYKLQlnaXQgZmV0Y2ggcnN5bmM6Ly8xMjcuMC4wLjEkKHB3ZCkvLi4vLmdpdCBtYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKLQlnaXQgZ2MgLS1wcnVuZSAmJgotCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgPSAkKGNkIC4uICYmIGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgotCWdpdCBmc2NrIC0tZnVsbAorCShjZCByc3luY2VkICYmCisJIGdpdCBpbml0IC0tYmFyZSAmJgorCSBnaXQgZmV0Y2ggInJzeW5jOiQocHdkKS8uLi8uZ2l0IiBtYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkgZ2l0IGdjIC0tcHJ1bmUgJiYKKwkgdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSA9ICQoY2QgLi4gJiYgZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICYmCisJIGdpdCBmc2NrIC0tZnVsbCkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB2aWEgcnN5bmMnICcKLQlta2RpciAuLi9yc3luY2VkMiAmJgotCShjZCAuLi9yc3luY2VkMiAmJgorCW1rZGlyIHJzeW5jZWQyICYmCisJKGNkIHJzeW5jZWQyICYmCiAJIGdpdCBpbml0KSAmJgotCWdpdCBwdXNoIHJzeW5jOi8vMTI3LjAuMC4xJChwd2QpLy4uL3JzeW5jZWQyLy5naXQgbWFzdGVyICYmCi0JY2QgLi4vcnN5bmNlZDIgJiYKLQlnaXQgZ2MgLS1wcnVuZSAmJgotCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgPSAkKGNkIC4uICYmIGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgotCWdpdCBmc2NrIC0tZnVsbAorCShjZCByc3luY2VkICYmCisJIGdpdCBwdXNoICJyc3luYzokKHB3ZCkvLi4vcnN5bmNlZDIvLmdpdCIgbWFzdGVyKSAmJgorCShjZCByc3luY2VkMiAmJgorCSBnaXQgZ2MgLS1wcnVuZSAmJgorCSB0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpID0gJChjZCAuLiAmJiBnaXQgcmV2LXBhcnNlIG1hc3RlcikgJiYKKwkgZ2l0IGZzY2sgLS1mdWxsKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHZpYSByc3luYycgJwotCWNkIC4uICYmCiAJbWtkaXIgcnN5bmNlZDMgJiYKIAkoY2QgcnN5bmNlZDMgJiYKIAkgZ2l0IGluaXQpICYmCi0JZ2l0IHB1c2ggLS1hbGwgcnN5bmM6Ly8xMjcuMC4wLjEkKHB3ZCkvcnN5bmNlZDMvLmdpdCAmJgotCWNkIHJzeW5jZWQzICYmCi0JdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSA9ICQoY2QgLi4gJiYgZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICYmCi0JZ2l0IGZzY2sgLS1mdWxsCisJZ2l0IHB1c2ggLS1hbGwgInJzeW5jOiQocHdkKS9yc3luY2VkMy8uZ2l0IiAmJgorCShjZCByc3luY2VkMyAmJgorCSB0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpID0gJChjZCAuLiAmJiBnaXQgcmV2LXBhcnNlIG1hc3RlcikgJiYKKwkgZ2l0IGZzY2sgLS1mdWxsKQogJwogfQogCmRpZmYgLS1naXQgYS90L3Q1NTExLXJlZnNwZWMuc2ggYi90L3Q1NTExLXJlZnNwZWMuc2gKaW5kZXggMjJiYTM4MC4uYzI4OTMyMiAxMDA3NTUKLS0tIGEvdC90NTUxMS1yZWZzcGVjLnNoCisrKyBiL3QvdDU1MTEtcmVmc3BlYy5zaApAQCAtNzIsNCArNzIsMTYgQEAKIHRlc3RfcmVmc3BlYyBwdXNoICc6cmVmcy9yZW1vdGVzL2Zyb3R6L2RlbGV0ZSBtZScJCWludmFsaWQKIHRlc3RfcmVmc3BlYyBmZXRjaCAnOnJlZnMvcmVtb3Rlcy9mcm90ei9IRUFEIHRvIG1lJwkJaW52YWxpZAogCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKi1ibGFoJyBpbnZhbGlkCit0ZXN0X3JlZnNwZWMgcHVzaCAncmVmcy9oZWFkcy8qL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qLWJsYWgnIGludmFsaWQKKwordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKicgaW52YWxpZAordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMqL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJyBpbnZhbGlkCisKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkcy8qLyovZm9yLWxpbnVzOnJlZnMvcmVtb3Rlcy9taW5lLyonIGludmFsaWQKK3Rlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzLyovKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKicgaW52YWxpZAorCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKicKK3Rlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzLyovZm9yLWxpbnVzOnJlZnMvcmVtb3Rlcy9taW5lLyonCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxNS1mZXRjaC1tZXJnZS1sb2dpYy5zaCBiL3QvdDU1MTUtZmV0Y2gtbWVyZ2UtbG9naWMuc2gKaW5kZXggMWY0NjA4ZC4uZGJiOTI3ZCAxMDA3NTUKLS0tIGEvdC90NTUxNS1mZXRjaC1tZXJnZS1sb2dpYy5zaAorKysgYi90L3Q1NTE1LWZldGNoLW1lcmdlLWxvZ2ljLnNoCkBAIC0xMjksOCArMTI5LDcgQEAKIAknJyB8ICcjJyopIGNvbnRpbnVlIDs7CiAJZXNhYwogCXRlc3Q9YGVjaG8gIiRjbWQiIHwgc2VkIC1lICdzfFsvIF1bLyBdKnxffGcnYAotCWNudD1gZXhwciAkdGVzdF9jb3VudCArIDFgCi0JcGZ4PWBwcmludGYgIiUwNGQiICRjbnRgCisJcGZ4PWBwcmludGYgIiUwNGQiICR0ZXN0X2NvdW50YAogCWV4cGVjdF9mPSIkVEVTVF9ESVJFQ1RPUlkvdDU1MTUvZmV0Y2guJHRlc3QiCiAJYWN0dWFsX2Y9IiRwZngtZmV0Y2guJHRlc3QiCiAJZXhwZWN0X3I9IiRURVNUX0RJUkVDVE9SWS90NTUxNS9yZWZzLiR0ZXN0IgpkaWZmIC0tZ2l0IGEvdC90NTUxNi1mZXRjaC1wdXNoLnNoIGIvdC90NTUxNi1mZXRjaC1wdXNoLnNoCmluZGV4IDQ0MjZkZjkuLjJkMjYzM2YgMTAwNzU1Ci0tLSBhL3QvdDU1MTYtZmV0Y2gtcHVzaC5zaAorKysgYi90L3Q1NTE2LWZldGNoLXB1c2guc2gKQEAgLTQxOSw2ICs0MTksMTkgQEAKIGdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiByZW1vdGUudGhlcmUKIGdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBicmFuY2gubWFzdGVyCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb25maWcgcmVtb3RlLioucHVzaHVybCcgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNvbmZpZyByZW1vdGUudGhlcmUudXJsIHRlc3QycmVwbyAmJgorCWdpdCBjb25maWcgcmVtb3RlLnRoZXJlLnB1c2h1cmwgdGVzdHJlcG8gJiYKKwlnaXQgcHVzaCB0aGVyZSAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorJworCisjIGNsZWFuIHVwIHRoZSBjcnVmdCBsZWZ0IHdpdGggdGhlIHByZXZpb3VzIG9uZQorZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHJlbW90ZS50aGVyZQorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggZHJ5LXJ1bicgJwogCiAJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKQEAgLTQ5Miw3ICs1MDUsNyBAQAogCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCiAJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuKSAmJgogCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAyPnN0ZGVyciAmJgotCWdyZXAgIndhcm5pbmcuKnRoaXMgbWF5IGNhdXNlIGNvbmZ1c2lvbiIgc3RkZXJyCisJZ3JlcCAid2FybmluZzogdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIiBzdGRlcnIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVueSBwdXNoIHRvIEhFQUQgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeScgJwpAQCAtNTEwLDcgKzUyMyw3IEBACiAJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB0cnVlICYmCiAJCWdpdCBjb25maWcgY29yZS5iYXJlIHRydWUpICYmCiAJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyIDI+c3RkZXJyICYmCi0JISBncmVwICJ3YXJuaW5nLip0aGlzIG1heSBjYXVzZSBjb25mdXNpb24iIHN0ZGVycgorCSEgZ3JlcCAid2FybmluZzogdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIiBzdGRlcnIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgcHVzaCB0byBIRUFEIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkgKGNvbmZpZyknICcKQEAgLTUyMCw3ICs1MzMsNyBAQAogCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggZmFsc2UKIAkpICYmCiAJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyIDI+c3RkZXJyICYmCi0JISBncmVwICJ3YXJuaW5nLip0aGlzIG1heSBjYXVzZSBjb25mdXNpb24iIHN0ZGVycgorCSEgZ3JlcCAid2FybmluZzogdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIiBzdGRlcnIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBicmFuY2hlcycgJwpkaWZmIC0tZ2l0IGEvdC90NTUyMC1wdWxsLnNoIGIvdC90NTUyMC1wdWxsLnNoCmluZGV4IDcyNTc3MWYuLmU3OGQ0MDIgMTAwNzU1Ci0tLSBhL3QvdDU1MjAtcHVsbC5zaAorKysgYi90L3Q1NTIwLXB1bGwuc2gKQEAgLTkyLDIwICs5Miw0NyBAQAogCiAJZ2l0IHJlbW90ZSBhZGQgLWYgbWUgLiAmJgogCWdpdCBjaGVja291dCBjb3B5ICYmCisJZ2l0IHRhZyBjb3B5LW9yaWcgJiYKIAlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCiAJZWNobyBjb25mbGljdGluZyBtb2RpZmljYXRpb24gPiBmaWxlICYmCiAJZ2l0IGNvbW1pdCAtbSBjb25mbGljdCBmaWxlICYmCiAJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgogCWVjaG8gZmlsZSA+IGZpbGUyICYmCiAJZ2l0IGNvbW1pdCAtbSB0by1yZWJhc2UgZmlsZTIgJiYKKwlnaXQgdGFnIHRvLXJlYmFzZS1vcmlnICYmCiAJZ2l0IHB1bGwgLS1yZWJhc2UgbWUgY29weSAmJgogCXRlc3QgImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPSAiJChjYXQgZmlsZSkiICYmCiAJdGVzdCBmaWxlID0gJChjYXQgZmlsZTIpCiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2Ugd2l0aCByZWJhc2VkIGRlZmF1bHQgdXBzdHJlYW0nICcKKworCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9tZS9jb3B5IGNvcHktb3JpZyAmJgorCWdpdCBjaGVja291dCAtLXRyYWNrIC1iIHRvLXJlYmFzZTIgbWUvY29weSAmJgorCWdpdCByZXNldCAtLWhhcmQgdG8tcmViYXNlLW9yaWcgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZSAmJgorCXRlc3QgImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPSAiJChjYXQgZmlsZSkiICYmCisJdGVzdCBmaWxlID0gJChjYXQgZmlsZTIpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlZCB1cHN0cmVhbSArIGZldGNoICsgcHVsbCAtLXJlYmFzZScgJworCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL21lL2NvcHkgY29weS1vcmlnICYmCisJZ2l0IHJlc2V0IC0taGFyZCB0by1yZWJhc2Utb3JpZyAmJgorCWdpdCBjaGVja291dCAtLXRyYWNrIC1iIHRvLXJlYmFzZTMgbWUvY29weSAmJgorCWdpdCByZXNldCAtLWhhcmQgdG8tcmViYXNlLW9yaWcgJiYKKwlnaXQgZmV0Y2ggJiYKKwlnaXQgcHVsbCAtLXJlYmFzZSAmJgorCXRlc3QgImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPSAiJChjYXQgZmlsZSkiICYmCisJdGVzdCBmaWxlID0gIiQoY2F0IGZpbGUyKSIKKworJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIGRpZXMgZWFybHkgd2l0aCBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeScgJwogCisJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgogCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9tZS9jb3B5IGNvcHleICYmCiAJQ09QWT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWUvY29weSkgJiYKIAlnaXQgcmViYXNlIC0tb250byAkQ09QWSBjb3B5ICYmCmRpZmYgLS1naXQgYS90L3Q1NTIxLXB1bGwtc3ltbGluay5zaCBiL3QvdDU1MjItcHVsbC1zeW1saW5rLnNoCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIHQvdDU1MjEtcHVsbC1zeW1saW5rLnNoCnJlbmFtZSB0byB0L3Q1NTIyLXB1bGwtc3ltbGluay5zaAppbmRleCA1NjcyYjUxLi44NmJiZDdkIDEwMDc1NQotLS0gYS90L3Q1NTIxLXB1bGwtc3ltbGluay5zaAorKysgYi90L3Q1NTIyLXB1bGwtc3ltbGluay5zaApAQCAtNCw2ICs0LDEyIEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKK3RoZW4KKwlzYXkgJ1N5bWJvbGljIGxpbmtzIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIHRlc3RzLicKKwl0ZXN0X2RvbmUKK2ZpCisKICMgVGhlIHNjZW5hcmlvIHdlIGFyZSBidWlsZGluZzoKICMKICMgICB0cmFzaFwgZGlyZWN0b3J5LwpkaWZmIC0tZ2l0IGEvdC90NTU0MC1odHRwLXB1c2guc2ggYi90L3Q1NTQwLWh0dHAtcHVzaC5zaAppbmRleCBjMjM2YjVlLi5mNGEyY2Y2IDEwMDc1NQotLS0gYS90L3Q1NTQwLWh0dHAtcHVzaC5zaAorKysgYi90L3Q1NTQwLWh0dHAtcHVzaC5zaApAQCAtMTEsMjIgKzExLDE2IEBACiAKIFJPT1RfUEFUSD0iJFBXRCIKIExJQl9IVFRQRF9EQVY9dAorTElCX0hUVFBEX1BPUlQ9JHtMSUJfSFRUUERfUE9SVC0nNTU0MCd9CiAKIGlmIGdpdCBodHRwLXB1c2ggPiAvZGV2L251bGwgMj4mMSB8fCBbICQ/IC1lcSAxMjggXQogdGhlbgogCXNheSAic2tpcHBpbmcgdGVzdCwgVVNFX0NVUkxfTVVMVEkgaXMgbm90IGRlZmluZWQiCiAJdGVzdF9kb25lCi0JZXhpdAogZmkKIAogLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKLQotaWYgISBzdGFydF9odHRwZCA+JjMgMj4mNAotdGhlbgotCXNheSAic2tpcHBpbmcgdGVzdCwgd2ViIHNlcnZlciBzZXR1cCBmYWlsZWQiCi0JdGVzdF9kb25lCi0JZXhpdAotZmkKK3N0YXJ0X2h0dHBkCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbW90ZSByZXBvc2l0b3J5JyAnCiAJY2QgIiRST09UX1BBVEgiICYmCkBAIC03Myw2ICs2Nyw0MiBAQAogCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwLXB1c2ggZmV0Y2hlcyB1bnBhY2tlZCBvYmplY3RzJyAnCisJY3AgLVIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgXAorCQkiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvX3VucGFja2VkLmdpdCAmJgorCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvdGVzdF9yZXBvX3VucGFja2VkLmdpdCBcCisJCSIkUk9PVF9QQVRIIi9mZXRjaF91bnBhY2tlZCAmJgorCisJIyBCeSByZXNldCwgd2UgZm9yY2UgZ2l0IHRvIHJldHJpZXZlIHRoZSBvYmplY3QKKwkoY2QgIiRST09UX1BBVEgiL2ZldGNoX3VucGFja2VkICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwkgZ2l0IHJlbW90ZSBybSBvcmlnaW4gJiYKKwkgZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9MCAtLWFsbCAmJgorCSBnaXQgcHJ1bmUgJiYKKwkgZ2l0IHB1c2ggLWYgLXYgJEhUVFBEX1VSTC90ZXN0X3JlcG9fdW5wYWNrZWQuZ2l0IG1hc3RlcikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC1wdXNoIGZldGNoZXMgcGFja2VkIG9iamVjdHMnICcKKwljcCAtUiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCBcCisJCSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG9fcGFja2VkLmdpdCAmJgorCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvdGVzdF9yZXBvX3BhY2tlZC5naXQgXAorCQkiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lX3BhY2tlZCAmJgorCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG9fcGFja2VkLmdpdCAmJgorCSBnaXQgLS1iYXJlIHJlcGFjayAmJgorCSBnaXQgLS1iYXJlIHBydW5lLXBhY2tlZCkgJiYKKworCSMgQnkgcmVzZXQsIHdlIGZvcmNlIGdpdCB0byByZXRyaWV2ZSB0aGUgcGFja2VkIG9iamVjdAorCShjZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lX3BhY2tlZCAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJIGdpdCByZW1vdGUgcm0gb3JpZ2luICYmCisJIGdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPTAgLS1hbGwgJiYKKwkgZ2l0IHBydW5lICYmCisJIGdpdCBwdXNoIC1mIC12ICRIVFRQRF9VUkwvdGVzdF9yZXBvX3BhY2tlZC5naXQgbWFzdGVyKQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYW5kIGRlbGV0ZSByZW1vdGUgYnJhbmNoJyAnCiAJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgogCWdpdCBjaGVja291dCAtYiBkZXYgJiYKQEAgLTk0LDYgKzEyNCwxOCBAQAogCiAnCiAKK3gxPSJbMC05YS1mXSIKK3gyPSIkeDEkeDEiCit4NT0iJHgxJHgxJHgxJHgxJHgxIgoreDM4PSIkeDUkeDUkeDUkeDUkeDUkeDUkeDUkeDEkeDEkeDEiCit4NDA9IiR4MzgkeDIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1BVVCBhbmQgTU9WRSBzZW5kcyBvYmplY3QgdG8gVVJMcyB3aXRoIFNIQS0xIGhhc2ggc3VmZml4JyAnCisJc2VkIC1lICJzL1BVVCAvT1AgLyIgLWUgInMvTU9WRSAvT1AgLyIgIiRIVFRQRF9ST09UX1BBVEgiL2FjY2Vzcy5sb2cgfAorCWdyZXAgLWUgIlwiT1AgLiovb2JqZWN0cy8keDIvJHt4Mzh9XyR4NDAgSFRUUC9bLjAtOV0qXCIgMjBbMC05XSAiCisKKycKKwogc3RvcF9odHRwZAogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NTAtaHR0cC1mZXRjaC5zaCBiL3QvdDU1NTAtaHR0cC1mZXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZTY5MzI0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTU1MC1odHRwLWZldGNoLnNoCkBAIC0wLDAgKzEsNjUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGZldGNoaW5nIG92ZXIgaHR0cCcKKy4gLi90ZXN0LWxpYi5zaAorCitpZiB0ZXN0IC1uICIkTk9fQ1VSTCI7IHRoZW4KKwlzYXkgJ3NraXBwaW5nIHRlc3QsIGdpdCBidWlsdCB3aXRob3V0IGh0dHAgc3VwcG9ydCcKKwl0ZXN0X2RvbmUKK2ZpCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitMSUJfSFRUUERfUE9SVD0ke0xJQl9IVFRQRF9QT1JULSc1NTUwJ30KK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnknICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgaHR0cC1hY2Nlc3NpYmxlIGJhcmUgcmVwb3NpdG9yeScgJworCW1rZGlyICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkgZ2l0IC0tYmFyZSBpbml0ICYmCisJIGVjaG8gImV4ZWMgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyIgPmhvb2tzL3Bvc3QtdXBkYXRlICYmCisJIGNobW9kICt4IGhvb2tzL3Bvc3QtdXBkYXRlCisJKSAmJgorCWdpdCByZW1vdGUgYWRkIHB1YmxpYyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBodHRwIHJlcG9zaXRvcnknICcKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9yZXBvLmdpdCBjbG9uZSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmUvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjaGFuZ2VzIHZpYSBodHRwJyAnCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdvICYmCisJZ2l0IHB1c2ggcHVibGljCisJKGNkIGNsb25lICYmIGdpdCBwdWxsKSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmUvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIHJlbW90ZSBkZXRlY3RzIGNvcnJlY3QgSEVBRCcgJworCWdpdCBwdXNoIHB1YmxpYyBtYXN0ZXI6b3RoZXIgJiYKKwkoY2QgY2xvbmUgJiYKKwkgZ2l0IHJlbW90ZSBzZXQtaGVhZCBvcmlnaW4gLWQgJiYKKwkgZ2l0IHJlbW90ZSBzZXQtaGVhZCBvcmlnaW4gLWEgJiYKKwkgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgPiBvdXRwdXQgJiYKKwkgZWNobyByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA+IGV4cGVjdCAmJgorCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBwYWNrZWQgb2JqZWN0cycgJworCWNwIC1SICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvLmdpdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrLmdpdCAmJgorCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX3BhY2suZ2l0ICYmCisJZ2l0IC0tYmFyZSByZXBhY2sgJiYKKwlnaXQgLS1iYXJlIHBydW5lLXBhY2tlZCAmJgorCWdpdCBjbG9uZSAkSFRUUERfVVJML3JlcG9fcGFjay5naXQKKycKKworc3RvcF9odHRwZAordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjAxLWNsb25lLnNoIGIvdC90NTYwMS1jbG9uZS5zaAppbmRleCA3OGEzZmE2Li4yMzM1ZDhiIDEwMDc1NQotLS0gYS90L3Q1NjAxLWNsb25lLnNoCisrKyBiL3QvdDU2MDEtY2xvbmUuc2gKQEAgLTEyNSw0ICsxMjUsNTMgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byBhbiBleGlzdGluZyBlbXB0eSBkaXJlY3RvcnknICcKKwlta2RpciB0YXJnZXQtMyAmJgorCWdpdCBjbG9uZSBzcmMgdGFyZ2V0LTMgJiYKKwlUPSQoIGNkIHRhcmdldC0zICYmIGdpdCByZXYtcGFyc2UgSEVBRCApICYmCisJUz0kKCBjZCBzcmMgJiYgZ2l0IHJldi1wYXJzZSBIRUFEICkgJiYKKwl0ZXN0ICIkVCIgPSAiJFMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRvIGFuIGV4aXN0aW5nIG5vbi1lbXB0eSBkaXJlY3RvcnknICcKKwlta2RpciB0YXJnZXQtNCAmJgorCT50YXJnZXQtNC9GYWtlZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSBzcmMgdGFyZ2V0LTQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gYW4gZXhpc3RpbmcgcGF0aCcgJworCT50YXJnZXQtNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSBzcmMgdGFyZ2V0LTUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgYSB2b2lkJyAnCisJbWtkaXIgc3JjLTAgJiYKKwkoCisJCWNkIHNyYy0wICYmIGdpdCBpbml0CisJKSAmJgorCWdpdCBjbG9uZSBzcmMtMCB0YXJnZXQtNiAmJgorCSgKKwkJY2Qgc3JjLTAgJiYgdGVzdF9jb21taXQgQQorCSkgJiYKKwlnaXQgY2xvbmUgc3JjLTAgdGFyZ2V0LTcgJiYKKwkjIFRoZXJlIGlzIG5vIHJlYXNvbiB0byBpbnNpc3QgdGhleSBhcmUgYml0LWZvci1iaXQKKwkjIGlkZW50aWNhbCwgYnV0IHRoaXMgdGVzdCBzaG91bGQgc3VmZmljZSBmb3Igbm93LgorCXRlc3RfY21wIHRhcmdldC02Ly5naXQvY29uZmlnIHRhcmdldC03Ly5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlc3BlY3RzIGdsb2JhbCBicmFuY2guYXV0b3NldHVwcmViYXNlJyAnCisJKAorCQlIT01FPSQocHdkKSAmJgorCQlleHBvcnQgSE9NRSAmJgorCQl0ZXN0X2NvbmZpZz0iJEhPTUUvLmdpdGNvbmZpZyIgJiYKKwkJdW5zZXQgR0lUX0NPTkZJR19OT0dMT0JBTCAmJgorCQlnaXQgY29uZmlnIC1mICIkdGVzdF9jb25maWciIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgcmVtb3RlICYmCisJCXJtIC1mciBkc3QgJiYKKwkJZ2l0IGNsb25lIHNyYyBkc3QgJiYKKwkJY2QgZHN0ICYmCisJCWFjdHVhbD0ieiQoZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlYmFzZSkiICYmCisJCXRlc3QgenRydWUgPSAkYWN0dWFsCisJKQorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MDItY2xvbmUtcmVtb3RlLWV4ZWMuc2ggYi90L3Q1NjAyLWNsb25lLXJlbW90ZS1leGVjLnNoCmluZGV4IDgyYjFkMWUuLmRlZmZkYWUgMTAwNzU1Ci0tLSBhL3QvdDU2MDItY2xvbmUtcmVtb3RlLWV4ZWMuc2gKKysrIGIvdC90NTYwMi1jbG9uZS1yZW1vdGUtZXhlYy5zaApAQCAtMTgsOCArMTgsOCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBjYWxscyBzcGVjaWZpZWQgZ2l0IHVwbG9hZC1wYWNrIHdpdGggLXUgb3B0aW9uJyAnCi0JR0lUX1NTSD0uL25vdF9zc2ggZ2l0IGNsb25lIC11IC9zb21ldGhpbmcvYmluL2dpdC11cGxvYWQtcGFjayBsb2NhbGhvc3Q6L3BhdGgvdG8vcmVwbyBqdW5rCi0JZWNobyAibG9jYWxob3N0IC9zb21ldGhpbmcvYmluL2dpdC11cGxvYWQtcGFjayAnXCcnL3BhdGgvdG8vcmVwbydcJyciID5leHBlY3RlZAorCUdJVF9TU0g9Li9ub3Rfc3NoIGdpdCBjbG9uZSAtdSAuL3NvbWV0aGluZy9iaW4vZ2l0LXVwbG9hZC1wYWNrIGxvY2FsaG9zdDovcGF0aC90by9yZXBvIGp1bmsKKwllY2hvICJsb2NhbGhvc3QgLi9zb21ldGhpbmcvYmluL2dpdC11cGxvYWQtcGFjayAnXCcnL3BhdGgvdG8vcmVwbydcJyciID5leHBlY3RlZAogCXRlc3RfY21wIGV4cGVjdGVkIG5vdF9zc2hfb3V0cHV0CiAnCiAKZGlmZiAtLWdpdCBhL3QvdDU3MDEtY2xvbmUtbG9jYWwuc2ggYi90L3Q1NzAxLWNsb25lLWxvY2FsLnNoCmluZGV4IGZlMGZkYTIuLjE5YjVjMGQgMTAwNzU1Ci0tLSBhL3QvdDU3MDEtY2xvbmUtbG9jYWwuc2gKKysrIGIvdC90NTcwMS1jbG9uZS1sb2NhbC5zaApAQCAtMTE2LDQgKzExNiwzMCBAQAogCXRlc3QgISAtZSAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGVtcHR5IHJlcG9zaXRvcnknICcKKwljZCAiJEQiICYmCisJbWtkaXIgZW1wdHkgJiYKKwkoY2QgZW1wdHkgJiYgZ2l0IGluaXQpICYmCisJZ2l0IGNsb25lIGVtcHR5IGVtcHR5LWNsb25lICYmCisJdGVzdF90aWNrICYmCisJKGNkIGVtcHR5LWNsb25lCisJIGVjaG8gImNvbnRlbnQiID4+IGZvbyAmJgorCSBnaXQgYWRkIGZvbyAmJgorCSBnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIG1hc3RlciAmJgorCSBleHBlY3RlZD0kKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgorCSBhY3R1YWw9JChnaXQgLS1naXQtZGlyPS4uL2VtcHR5Ly5naXQgcmV2LXBhcnNlIG1hc3RlcikgJiYKKwkgdGVzdCAkYWN0dWFsID0gJGV4cGVjdGVkKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBlbXB0eSByZXBvc2l0b3J5LCBhbmQgdGhlbiBwdXNoIHNob3VsZCBub3Qgc2VnZmF1bHQuJyAnCisJY2QgIiREIiAmJgorCXJtIC1mciBlbXB0eS8gZW1wdHktY2xvbmUvICYmCisJbWtkaXIgZW1wdHkgJiYKKwkoY2QgZW1wdHkgJiYgZ2l0IGluaXQpICYmCisJZ2l0IGNsb25lIGVtcHR5IGVtcHR5LWNsb25lICYmCisJKGNkIGVtcHR5LWNsb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2gpCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwNC1idW5kbGUuc2ggYi90L3Q1NzA0LWJ1bmRsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOGY0NDE5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwNC1idW5kbGUuc2gKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NvbWUgYnVuZGxlIHJlbGF0ZWQgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCTogPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtbSB0YWcgdGFnICYmCisJOiA+IGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCTogPiBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWdzIGNhbiBiZSBleGNsdWRlZCBieSByZXYtbGlzdCBvcHRpb25zJyAnCisKKwlnaXQgYnVuZGxlIGNyZWF0ZSBidW5kbGUgLS1hbGwgLS1zaW5jZT03LkFwci4yMDA1LjE1OjE2OjAwLi0wNzAwICYmCisJZ2l0IGxzLXJlbW90ZSBidW5kbGUgPiBvdXRwdXQgJiYKKwkhIGdyZXAgdGFnIG91dHB1dAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwNS1jbG9uZS0yZ2Iuc2ggYi90L3Q1NzA1LWNsb25lLTJnYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZjUyMTU0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwNS1jbG9uZS0yZ2Iuc2gKQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY2xvbmluZyBhIHJlcG9zaXRvcnkgbGFyZ2VyIHRoYW4gMiBnaWdhYnl0ZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0IC16ICIkR0lUX1RFU1RfQ0xPTkVfMkdCIiAmJgorc2F5ICJTa2lwcGluZyBleHBlbnNpdmUgMkdCIGNsb25lIHRlc3Q7IGVuYWJsZSBpdCB3aXRoIEdJVF9URVNUX0NMT05FXzJHQj10IiAmJgordGVzdF9kb25lICYmCitleGl0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlnaXQgY29uZmlnIHBhY2suY29tcHJlc3Npb24gMCAmJgorCWdpdCBjb25maWcgcGFjay5kZXB0aCAwICYmCisJYmxvYnNpemU9JCgoMjAqMTAyNCoxMDI0KSkgJiYKKwlibG9iY291bnQ9JCgoMioxMDI0KjEwMjQqMTAyNC8kYmxvYnNpemUrMSkpICYmCisJaT0xICYmCisJKHdoaWxlIHRlc3QgJGkgLWxlICRibG9iY291bnQKKwkgZG8KKwkJcHJpbnRmICJHZW5lcmF0aW5nIGJsb2IgJGkvJGJsb2Jjb3VudFxyIiA+JjIgJiYKKwkJcHJpbnRmICJibG9iXG5tYXJrIDokaVxuZGF0YSAkYmxvYnNpemVcbiIgJiYKKwkJI3Rlc3QtZ2VucmFuZG9tICRpICRibG9ic2l6ZSAmJgorCQlwcmludGYgIiUtJHtibG9ic2l6ZX1zIiAkaSAmJgorCQllY2hvICJNIDEwMDY0NCA6JGkgJGkiID4+IGNvbW1pdAorCQlpPSQoKCRpKzEpKSB8fAorCQllY2hvICQ/ID4gZXhpdC1zdGF0dXMKKwkgZG9uZSAmJgorCSBlY2hvICJjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIiICYmCisJIGVjaG8gImF1dGhvciBBIFUgVGhvciA8YXV0aG9yQGVtYWlsLmNvbT4gMTIzNDU2Nzg5ICswMDAwIiAmJgorCSBlY2hvICJjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGVtYWlsLmNvbT4gMTIzNDU2Nzg5ICswMDAwIiAmJgorCSBlY2hvICJkYXRhIDUiICYmCisJIGVjaG8gIj4yZ2IiICYmCisJIGNhdCBjb21taXQpIHwKKwlnaXQgZmFzdC1pbXBvcnQgJiYKKwl0ZXN0ICEgLWYgZXhpdC1zdGF0dXMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZScgJworCisJZ2l0IGNsb25lIC0tYmFyZSAtLW5vLWhhcmRsaW5rcyAuIGNsb25lCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaCBiL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCmluZGV4IDg2YmY3ZTEuLjU5ZDFmNjIgMTAwNzU1Ci0tLSBhL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCisrKyBiL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCkBAIC0xNCw3ICsxNCw3IEBACiB0ZXN0X2Zvcm1hdCgpIHsKIAljYXQgPmV4cGVjdC4kMQogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZvcm1hdCAkMSIgIgotZ2l0IHJldi1saXN0IC0tcHJldHR5PWZvcm1hdDokMiBtYXN0ZXIgPm91dHB1dC4kMSAmJgorZ2l0IHJldi1saXN0IC0tcHJldHR5PWZvcm1hdDonJDInIG1hc3RlciA+b3V0cHV0LiQxICYmCiB0ZXN0X2NtcCBleHBlY3QuJDEgb3V0cHV0LiQxCiAiCiB9CkBAIC0xMDEsNiArMTAxLDEzIEBACiAbWzMxbWZvbxtbMzJtYmFyG1szNG1iYXobW214eXp6eQogRU9GCiAKK3Rlc3RfZm9ybWF0IGFkdmFuY2VkLWNvbG9ycyAnJUMocmVkIHllbGxvdyBib2xkKWZvbyVDKHJlc2V0KScgPDwnRU9GJworY29tbWl0IDEzMWEzMTBlYjkxM2QxMDdkZDNjMDlhNjVkMTY1MTE3NTg5ODczNWQKKxtbMTszMTs0M21mb28bW20KK2NvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCisbWzE7MzE7NDNtZm9vG1ttCitFT0YKKwogY2F0ID5jb21taXQtbXNnIDw8J0VPRicKIFRlc3QgcHJpbnRpbmcgb2YgY29tcGxleCBib2RpZXMKIApkaWZmIC0tZ2l0IGEvdC90NjAyMy1tZXJnZS1maWxlLnNoIGIvdC90NjAyMy1tZXJnZS1maWxlLnNoCmluZGV4IGY4OTQyYmMuLjdkY2YzOTEgMTAwNzU1Ci0tLSBhL3QvdDYwMjMtbWVyZ2UtZmlsZS5zaAorKysgYi90L3Q2MDIzLW1lcmdlLWZpbGUuc2gKQEAgLTU0LDYgKzU0LDEyIEBACiBFT0YKIHByaW50ZiAicHJvcHRlciBub21lbiBzdXVtLiIgPj4gbmV3NC50eHQKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugd2l0aCBubyBjaGFuZ2VzJyAnCisJY3Agb3JpZy50eHQgdGVzdC50eHQgJiYKKwlnaXQgbWVyZ2UtZmlsZSB0ZXN0LnR4dCBvcmlnLnR4dCBvcmlnLnR4dCAmJgorCXRlc3RfY21wIHRlc3QudHh0IG9yaWcudHh0CisnCisKIGNwIG5ldzEudHh0IHRlc3QudHh0CiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJtZXJnZSB3aXRob3V0IGNvbmZsaWN0IiBcCiAJImdpdCBtZXJnZS1maWxlIHRlc3QudHh0IG9yaWcudHh0IG5ldzIudHh0IgpkaWZmIC0tZ2l0IGEvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2ggYi90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaAppbmRleCAxMjlmYTMwLi5iM2ZiZjY1IDEwMDc1NQotLS0gYS90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaAorKysgYi90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaApAQCAtNjUsMTggKzY1LDE4IEBACiAiCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKLTw8PDw8PDwgSEVBRDphMQorPDw8PDw8PCBIRUFECiBGCiA9PT09PT09CiBHCi0+Pj4+Pj4+IEc6YTEKKz4+Pj4+Pj4gRwogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlc3VsdCBjb250YWlucyBhIGNvbmZsaWN0IiAidGVzdF9jbXAgZXhwZWN0IGExIgogCiBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+IG91dAogY2F0ID4gZXhwZWN0IDw8IEVPRgotMTAwNjQ0IGRhMDU2Y2UxNGEyMjQxNTA5ODk3ZmE2OGJiMmIzYjZlNjE5NGVmOWUgMQlhMQorMTAwNjQ0IDQzOWNjNDZkZTc3M2Q4YTgzYzc3Nzk5YjdjYzkxOTFjMTI4YmZjZmYgMQlhMQogMTAwNjQ0IGNmODQ0NDNlNDllMWIzNjZmYWM5Mzg3MTFkZGY0YmUyZDRkMWQ5ZTkgMglhMQogMTAwNjQ0IGZkNzkyMzUyOTg1NWQwYjI3NDc5NWFlMzM0OWM1ZTA0MzgzMzM5NzkgMwlhMQogRU9GCkBAIC05Myw4ICs5Myw3IEBACiAJZ2l0IGFkZCBiaW5hcnktZmlsZSAmJgogCWdpdCBjb21taXQgLW0gYmluYXJ5MiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBGID4gbWVyZ2Uub3V0IDI+IG1lcmdlLmVyciAmJgotCWdyZXAgIkNhbm5vdCBtZXJnZSBiaW5hcnkgZmlsZXM6IEhFQUQ6YmluYXJ5LWZpbGUgdnMuIEY6YmluYXJ5LWZpbGUiIFwKLQkJbWVyZ2UuZXJyCisJZ3JlcCAiQ2Fubm90IG1lcmdlIGJpbmFyeSBmaWxlczogYmluYXJ5LWZpbGUgKEhFQUQgdnMuIEYpIiBtZXJnZS5lcnIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFyayByZW5hbWUvZGVsZXRlIGFzIHVubWVyZ2VkJyAnCmRpZmYgLS1naXQgYS90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2ggYi90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2gKaW5kZXggMDUyYTZjOS4uMTMxNWJhYiAxMDA3NTUKLS0tIGEvdC90NjAzMC1iaXNlY3QtcG9yY2VsYWluLnNoCisrKyBiL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaApAQCAtNDgyLDI4ICs0ODIsODkgQEAKIAlnaXQgYmlzZWN0IHJlc2V0CiAnCiAKLWNoZWNrX3RyYWNlKCkgewotCWdyZXAgIiQxIiAiJEdJVF9UUkFDRSIgfCBncmVwICJcXiQyIiB8IGdyZXAgIiQzIiA+L2Rldi9udWxsCi19Ci0KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGltaXplZCBtZXJnZSBiYXNlIGNoZWNrcycgJwotCUdJVF9UUkFDRT0iJChwd2QpL3RyYWNlLmxvZyIgJiYKLQlleHBvcnQgR0lUX1RSQUNFICYmCiAJZ2l0IGJpc2VjdCBzdGFydCAiJEhBU0g3IiAiJFNJREVfSEFTSDciID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKIAlncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nLnR4dCAmJgogCWdyZXAgIiRIQVNINCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKLQljaGVja190cmFjZSAicmV2LWxpc3QiICIkSEFTSDciICIkU0lERV9IQVNINyIgJiYKIAlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nMi50eHQgJiYKIAl0ZXN0IC1mICIuZ2l0L0JJU0VDVF9BTkNFU1RPUlNfT0siICYmCiAJdGVzdCAiJEhBU0g2IiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgotCTogPiAiJEdJVF9UUkFDRSIgJiYKIAlnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2czLnR4dCAmJgotCXRlc3RfbXVzdF9mYWlsIGNoZWNrX3RyYWNlICJyZXYtbGlzdCIgIiRIQVNINiIgIiRTSURFX0hBU0g3IiAmJgogCWdpdCBiaXNlY3QgZ29vZCAiJEFfSEFTSCIgPiBteV9iaXNlY3RfbG9nNC50eHQgJiYKIAlncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nNC50eHQgJiYKLQl0ZXN0X211c3RfZmFpbCB0ZXN0IC1mICIuZ2l0L0JJU0VDVF9BTkNFU1RPUlNfT0siICYmCi0JY2hlY2tfdHJhY2UgInJldi1saXN0IiAiJEhBU0g2IiAiJEFfSEFTSCIgJiYKLQl1bnNldCBHSVRfVFJBQ0UKKwl0ZXN0X211c3RfZmFpbCB0ZXN0IC1mICIuZ2l0L0JJU0VDVF9BTkNFU1RPUlNfT0siCisnCisKKyMgVGhpcyBjcmVhdGVzIGFub3RoZXIgc2lkZSBicmFuY2ggY2FsbGVkICJwYXJhbGxlbCIgd2l0aCBzb21lIGZpbGVzCisjIGluIHNvbWUgZGlyZWN0b3JpZXMsIHRvIHRlc3QgYmlzZWN0aW5nIHdpdGggcGF0aHMuCisjCisjIFdlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmc6CisjCisjICAgIFAxLVAyLVAzLVA0LVA1LVA2LVA3CisjICAgLyAgICAgICAgLyAgICAgICAgLworIyBIMS1IMi1IMy1INC1INS1INi1INworIyAgICAgICAgICAgIFwgIFwgICAgIFwKKyMgICAgICAgICAgICAgUzUtQSAgICAgXAorIyAgICAgICAgICAgICAgXCAgICAgICAgXAorIyAgICAgICAgICAgICAgIFM2LVM3LS0tLUIKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJwYXJhbGxlbCIgc2lkZSBicmFuY2ggY3JlYXRpb24nICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHBhcmFsbGVsICRIQVNIMSAmJgorCW1rZGlyIGRpcjEgZGlyMiAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiMShwYXJhKTogbGluZSAxIG9uIHBhcmFsbGVsIGJyYW5jaCIgZGlyMS9maWxlMSAmJgorCVBBUkFfSEFTSDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICIyKHBhcmEpOiBsaW5lIDIgb24gcGFyYWxsZWwgYnJhbmNoIiBkaXIyL2ZpbGUyICYmCisJUEFSQV9IQVNIMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjMocGFyYSk6IGxpbmUgMyBvbiBwYXJhbGxlbCBicmFuY2giIGRpcjIvZmlsZTMgJiYKKwlQQVJBX0hBU0gzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorCWdpdCBtZXJnZSAtbSAibWVyZ2UgSEFTSDQgYW5kIFBBUkFfSEFTSDMiICIkSEFTSDQiICYmCisJUEFSQV9IQVNIND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjUocGFyYSk6IGFkZCBsaW5lIG9uIHBhcmFsbGVsIGJyYW5jaCIgZGlyMS9maWxlMSAmJgorCVBBUkFfSEFTSDU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisJYWRkX2xpbmVfaW50b19maWxlICI2KHBhcmEpOiBhZGQgbGluZSBvbiBwYXJhbGxlbCBicmFuY2giIGRpcjIvZmlsZTIgJiYKKwlQQVJBX0hBU0g2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorCWdpdCBtZXJnZSAtbSAibWVyZ2UgSEFTSDcgYW5kIFBBUkFfSEFTSDYiICIkSEFTSDciICYmCisJUEFSQV9IQVNINz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdHJpY3RpbmcgYmlzZWN0aW9uIG9uIG9uZSBkaXInICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCBIRUFEICRIQVNIMSAtLSBkaXIxICYmCisJcGFyYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHBhcmExIiA9ICIkUEFSQV9IQVNIMSIgJiYKKwlnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJFBBUkFfSEFTSDEgaXMgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdHJpY3RpbmcgYmlzZWN0aW9uIG9uIG9uZSBkaXIgYW5kIGEgZmlsZScgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IEhFQUQgJEhBU0gxIC0tIGRpcjEgaGVsbG8gJiYKKwlwYXJhND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcGFyYTQiID0gIiRQQVJBX0hBU0g0IiAmJgorCWdpdCBiaXNlY3QgYmFkICYmCisJaGFzaDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJGhhc2gzIiA9ICIkSEFTSDMiICYmCisJZ2l0IGJpc2VjdCBnb29kICYmCisJaGFzaDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJGhhc2g0IiA9ICIkSEFTSDQiICYmCisJZ2l0IGJpc2VjdCBnb29kICYmCisJcGFyYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHBhcmExIiA9ICIkUEFSQV9IQVNIMSIgJiYKKwlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRQQVJBX0hBU0g0IGlzIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXBwaW5nIGF3YXkgZnJvbSBza2lwcGVkIGNvbW1pdCcgJworCWdpdCBiaXNlY3Qgc3RhcnQgJFBBUkFfSEFTSDcgJEhBU0gxICYmCisJcGFyYTQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHBhcmE0IiA9ICIkUEFSQV9IQVNINCIgJiYKKyAgICAgICAgZ2l0IGJpc2VjdCBza2lwICYmCisJaGFzaDc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJGhhc2g3IiA9ICIkSEFTSDciICYmCisgICAgICAgIGdpdCBiaXNlY3Qgc2tpcCAmJgorCXBhcmEzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRwYXJhMyIgPSAiJFBBUkFfSEFTSDMiCiAnCiAKICMKZGlmZiAtLWdpdCBhL3QvdDYwMzEtbWVyZ2UtcmVjdXJzaXZlLnNoIGIvdC90NjAzMS1tZXJnZS1yZWN1cnNpdmUuc2gKaW5kZXggODA3M2UwYy4uOGEzMzA0ZiAxMDA3NTUKLS0tIGEvdC90NjAzMS1tZXJnZS1yZWN1cnNpdmUuc2gKKysrIGIvdC90NjAzMS1tZXJnZS1yZWN1cnNpdmUuc2gKQEAgLTMsOCArMywxMCBAQAogdGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UtcmVjdXJzaXZlOiBoYW5kbGUgZmlsZSBtb2RlJwogLiAuL3Rlc3QtbGliLnNoCiAKLSMgTm90ZSB0aGF0IHdlIGZvbGxvdyAiY2htb2QgK3ggRiIgd2l0aCAidXBkYXRlLWluZGV4IC0tY2htb2Q9K3ggRiIgdG8KLSMgaGVscCBmaWxlc3lzdGVtcyB0aGF0IGRvIG5vdCBoYXZlIHRoZSBleGVjdXRhYmxlIGJpdC4KK2lmICEgdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmZpbGVtb2RlKSIgPSBmYWxzZQordGhlbgorCXRlc3Rfc2V0X3ByZXJlcSBGSUxFTU9ERQorZmkKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kZSBjaGFuZ2UgaW4gb25lIGJyYW5jaDoga2VlcCBjaGFuZ2VkIHZlcnNpb24nICcKIAk6ID5maWxlMSAmJgpAQCAtMTUsMTEgKzE3LDE0IEBACiAJZ2l0IGFkZCBkdW1teSAmJgogCWdpdCBjb21taXQgLW0gYSAmJgogCWdpdCBjaGVja291dCAtYiBiMSBtYXN0ZXIgJiYKLQljaG1vZCAreCBmaWxlMSAmJgotCWdpdCB1cGRhdGUtaW5kZXggLS1jaG1vZD0reCBmaWxlMSAmJgorCXRlc3RfY2htb2QgK3ggZmlsZTEgJiYKIAlnaXQgY29tbWl0IC1tIGIxICYmCiAJZ2l0IGNoZWNrb3V0IGExICYmCiAJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSBtYXN0ZXIgLS0gYTEgYjEgJiYKKwlnaXQgbHMtZmlsZXMgLXMgZmlsZTEgfCBncmVwIF4xMDA3NTUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAndmVyaWZ5IGV4ZWN1dGFibGUgYml0IG9uIGZpbGUnICcKIAl0ZXN0IC14IGZpbGUxCiAnCiAKQEAgLTI4LDggKzMzLDcgQEAKIAlnaXQgY2hlY2tvdXQgLWIgYTIgbWFzdGVyICYmCiAJOiA+ZmlsZTIgJiYKIAlIPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUyKSAmJgotCWNobW9kICt4IGZpbGUyICYmCi0JZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNobW9kPSt4IGZpbGUyICYmCisJdGVzdF9jaG1vZCAreCBmaWxlMiAmJgogCWdpdCBjb21taXQgLW0gYTIgJiYKIAlnaXQgY2hlY2tvdXQgLWIgYjIgbWFzdGVyICYmCiAJOiA+ZmlsZTIgJiYKQEAgLTQ2LDYgKzUwLDEwIEBACiAJCWVjaG8gIjEwMDY0NCAkSCAzCWZpbGUyIgogCSkgPmV4cGVjdCAmJgogCXRlc3RfY21wIGFjdHVhbCBleHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLXMgZmlsZTIgfCBncmVwIF4xMDA3NTUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAndmVyaWZ5IGV4ZWN1dGFibGUgYml0IG9uIGZpbGUnICcKIAl0ZXN0IC14IGZpbGUyCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDYwMjMtbWVyZ2UtcmVuYW1lLW5vY3J1ZnQuc2ggYi90L3Q2MDM0LW1lcmdlLXJlbmFtZS1ub2NydWZ0LnNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0L3Q2MDIzLW1lcmdlLXJlbmFtZS1ub2NydWZ0LnNoCnJlbmFtZSB0byB0L3Q2MDM0LW1lcmdlLXJlbmFtZS1ub2NydWZ0LnNoCmRpZmYgLS1naXQgYS90L3Q2MDQwLXRyYWNraW5nLWluZm8uc2ggYi90L3Q2MDQwLXRyYWNraW5nLWluZm8uc2gKaW5kZXggYmE5MDYwMS4uMDBlMWRlOSAxMDA3NTUKLS0tIGEvdC90NjA0MC10cmFja2luZy1pbmZvLnNoCisrKyBiL3QvdDYwNDAtdHJhY2tpbmctaW5mby5zaApAQCAtMjksNyArMjksOSBAQAogCQlnaXQgY2hlY2tvdXQgLWIgYjQgb3JpZ2luICYmCiAJCWFkdmFuY2UgZSAmJgogCQlhZHZhbmNlIGYKLQkpCisJKSAmJgorCWdpdCBjaGVja291dCAtYiBmb2xsb3dlciAtLXRyYWNrIG1hc3RlciAmJgorCWFkdmFuY2UgZwogJwogCiBzY3JpcHQ9J3MvXi4uXChiLlwpWwkgMC05YS1mXSpcW1woW15dXSpcKVxdLiovXDEgXDIvcCcKQEAgLTU2LDYgKzU4LDEyIEBACiAJZ3JlcCAiaGF2ZSAxIGFuZCAxIGRpZmZlcmVudCIgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggbG9jYWwgdHJhY2tlZCBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IGZvbGxvd2VyID5hY3R1YWwKKwlncmVwICJpcyBhaGVhZCBvZiIgYWN0dWFsCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cycgJwogCSgKIAkJY2QgdGVzdCAmJgpAQCAtNjYsNSArNzQsMTkgQEAKIAlncmVwICJoYXZlIDEgYW5kIDEgZGlmZmVyZW50IiBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gdHJhY2tpbmcgbGlnaHR3ZWlnaHQgdGFncycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgdGFnIGxpZ2h0ICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIGxpZ2h0dHJhY2sgbGlnaHQgPmFjdHVhbCAmJgorCWdyZXAgInNldCB1cCB0byB0cmFjayIgYWN0dWFsICYmCisJZ2l0IGNoZWNrb3V0IGxpZ2h0dHJhY2sKKycKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gdHJhY2tpbmcgYW5ub3RhdGVkIHRhZ3MnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyAtbSBoZWF2eSBoZWF2eSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBoZWF2eXRyYWNrIGhlYXZ5ID5hY3R1YWwgJiYKKwlncmVwICJzZXQgdXAgdG8gdHJhY2siIGFjdHVhbCAmJgorCWdpdCBjaGVja291dCBoZWF2eXRyYWNrCisnCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYyMDAtZm10LW1lcmdlLW1zZy5zaCBiL3QvdDYyMDAtZm10LW1lcmdlLW1zZy5zaAppbmRleCA4ZjVhMDZmLi40MmY2ZmZmIDEwMDc1NQotLS0gYS90L3Q2MjAwLWZtdC1tZXJnZS1tc2cuc2gKKysrIGIvdC90NjIwMC1mbXQtbWVyZ2UtbXNnLnNoCkBAIC04MywxMyArODMsMTMgQEAKICcKIAogY2F0ID5leHBlY3RlZCA8PEVPRgotTWVyZ2UgYnJhbmNoICdsZWZ0JyBvZiAkVEVTVF9ESVJFQ1RPUlkvJHRlc3QKK01lcmdlIGJyYW5jaCAnbGVmdCcgb2YgJChwd2QpCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRlc3QgIzInICcKIAogCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKLQlnaXQgZmV0Y2ggIiRURVNUX0RJUkVDVE9SWS8kdGVzdCIgbGVmdCAmJgorCWdpdCBmZXRjaCAiJChwd2QpIiBsZWZ0ICYmCiAKIAlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKQEAgLTIwOCw0ICsyMDgsMzYgQEAKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIC1GJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIG1lcmdlLmxvZworCWdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2Uuc3VtbWFyeQorCWdpdCBjb25maWcgbWVyZ2Uuc3VtbWFyeSB5ZXMgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlzZXRkYXRlICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgLUYgLmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIC1GIGluIHN1YmRpcmVjdG9yeScgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5sb2cKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIG1lcmdlLnN1bW1hcnkKKwlnaXQgY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJc2V0ZGF0ZSAmJgorCWdpdCBmZXRjaCAuIGxlZnQgcmlnaHQgJiYKKwlta2RpciBzdWIgJiYKKwljcCAuZ2l0L0ZFVENIX0hFQUQgc3ViL0ZFVENIX0hFQUQgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgZm10LW1lcmdlLW1zZyAtRiBGRVRDSF9IRUFEID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjMwMC1mb3ItZWFjaC1yZWYuc2ggYi90L3Q2MzAwLWZvci1lYWNoLXJlZi5zaAppbmRleCA4YmZhZTQ0Li44MDUyYzg2IDEwMDc1NQotLS0gYS90L3Q2MzAwLWZvci1lYWNoLXJlZi5zaAorKysgYi90L3Q2MzAwLWZvci1lYWNoLXJlZi5zaApAQCAtMjYsNiArMjYsMTMgQEAKIAlnaXQgdGFnIC1hIC1tICJUYWdnaW5nIGF0ICRkYXRlc3RhbXAiIHRlc3R0YWcKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3JlYXRlIHVwc3RyZWFtIGNvbmZpZycgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIG1hc3RlciAmJgorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiBub3doZXJlICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBvcmlnaW4gJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIKKycKKwogdGVzdF9hdG9tKCkgewogCWNhc2UgIiQxIiBpbgogCQloZWFkKSByZWY9cmVmcy9oZWFkcy9tYXN0ZXIgOzsKQEAgLTM5LDYgKzQ2LDcgQEAKIH0KIAogdGVzdF9hdG9tIGhlYWQgcmVmbmFtZSByZWZzL2hlYWRzL21hc3RlcgordGVzdF9hdG9tIGhlYWQgdXBzdHJlYW0gcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKIHRlc3RfYXRvbSBoZWFkIG9iamVjdHR5cGUgY29tbWl0CiB0ZXN0X2F0b20gaGVhZCBvYmplY3RzaXplIDE3MQogdGVzdF9hdG9tIGhlYWQgb2JqZWN0bmFtZSA2N2EzNmYxMDcyMjg0NmU4OTFmYmFkYTFiYTQ4ZWQwMzVkZTc1NTgxCkBAIC02OCw2ICs3Niw3IEBACiAnCiAKIHRlc3RfYXRvbSB0YWcgcmVmbmFtZSByZWZzL3RhZ3MvdGVzdHRhZwordGVzdF9hdG9tIHRhZyB1cHN0cmVhbSAnJwogdGVzdF9hdG9tIHRhZyBvYmplY3R0eXBlIHRhZwogdGVzdF9hdG9tIHRhZyBvYmplY3RzaXplIDE1NAogdGVzdF9hdG9tIHRhZyBvYmplY3RuYW1lIDk4YjQ2YjFkMzZlNWIwNzkwOWRlMWIzODg2MjI0ZTNlODFlODczMjIKQEAgLTIwMyw2ICsyMTIsNyBAQAogCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgogcmVmcy9oZWFkcy9tYXN0ZXIKK3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCiByZWZzL3RhZ3MvdGVzdHRhZwogRU9GCiAKQEAgLTIxNCw2ICsyMjQsNyBAQAogCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgogcmVmcy90YWdzL3Rlc3R0YWcKK3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCiByZWZzL2hlYWRzL21hc3RlcgogRU9GCiAKQEAgLTIyNCw2ICsyMzUsNyBAQAogCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgogJ3JlZnMvaGVhZHMvbWFzdGVyJworJ3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyJwogJ3JlZnMvdGFncy90ZXN0dGFnJwogRU9GCiAKQEAgLTI0NCw2ICsyNTYsNyBAQAogCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgogInJlZnMvaGVhZHMvbWFzdGVyIgorInJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIgogInJlZnMvdGFncy90ZXN0dGFnIgogRU9GCiAKQEAgLTI3MywxNiArMjg2LDI2IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK29yaWdpbi9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBzaG9ydCB1cHN0cmVhbSBmb3JtYXQnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHVwc3RyZWFtOnNob3J0KSIgcmVmcy9oZWFkcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvciBpbnZhbGlkIHJlZm5hbWUgZm9ybWF0JyAnCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lOklOVkFMSUQpIgogJwogCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgogaGVhZHMvbWFzdGVyCi1tYXN0ZXIKK3RhZ3MvbWFzdGVyCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgYW1iaWd1b3VzIGhlYWQgYW5kIHRhZyByZWZzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBhbWJpZ3VvdXMgaGVhZCBhbmQgdGFnIHJlZnMgKHN0cmljdCknICcKKwlnaXQgY29uZmlnIC0tYm9vbCBjb3JlLndhcm5hbWJpZ3VvdXNyZWZzIHRydWUgJiYKIAlnaXQgY2hlY2tvdXQgLWIgbmV3dGFnICYmCiAJZWNobyAiVXNpbmcgJGRhdGVzdGFtcCIgPiBvbmUgJiYKIAlnaXQgYWRkIG9uZSAmJgpAQCAtMjk0LDExICszMTcsMjIgQEAKICcKIAogY2F0ID5leHBlY3RlZCA8PFxFT0YKK2hlYWRzL21hc3RlcgorbWFzdGVyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgYW1iaWd1b3VzIGhlYWQgYW5kIHRhZyByZWZzIChsb29zZSknICcKKwlnaXQgY29uZmlnIC0tYm9vbCBjb3JlLndhcm5hbWJpZ3VvdXNyZWZzIGZhbHNlICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdCAiJShyZWZuYW1lOnNob3J0KSIgcmVmcy9oZWFkcy9tYXN0ZXIgcmVmcy90YWdzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCiBoZWFkcy9hbWJpZ3VvdXMKIGFtYmlndW91cwogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGFtYmlndW91cyBoZWFkIGFuZCB0YWcgcmVmcyBJSScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgYW1iaWd1b3VzIGhlYWQgYW5kIHRhZyByZWZzIElJIChsb29zZSknICcKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCiAJZ2l0IHRhZyBhbWJpZ3VvdXMgdGVzdHRhZ14wICYmCiAJZ2l0IGJyYW5jaCBhbWJpZ3VvdXMgdGVzdHRhZ14wICYmCmRpZmYgLS1naXQgYS90L3Q3MDAxLW12LnNoIGIvdC90NzAwMS1tdi5zaAppbmRleCA4ZmIzYTU2Li4xMGI4ZjhjIDEwMDc1NQotLS0gYS90L3Q3MDAxLW12LnNoCisrKyBiL3QvdDcwMDEtbXYuc2gKQEAgLTIwNiw3ICsyMDYsNyBAQAogCiBybSAtZiBkaXJ0eSBkaXJ0eTIKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG12IHNob3VsZCBvdmVyd3JpdGUgc3ltbGluayB0byBhIGZpbGUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2dpdCBtdiBzaG91bGQgb3ZlcndyaXRlIHN5bWxpbmsgdG8gYSBmaWxlJyAnCiAKIAlybSAtZnIgLmdpdCAmJgogCWdpdCBpbml0ICYmCkBAIC0yMjUsNyArMjI1LDcgQEAKIAogcm0gLWYgbW92ZWQgc3ltbGluawogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbXYgc2hvdWxkIG92ZXJ3cml0ZSBmaWxlIHdpdGggYSBzeW1saW5rJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdnaXQgbXYgc2hvdWxkIG92ZXJ3cml0ZSBmaWxlIHdpdGggYSBzeW1saW5rJyAnCiAKIAlybSAtZnIgLmdpdCAmJgogCWdpdCBpbml0ICYmCmRpZmYgLS1naXQgYS90L3Q3MDAyLWdyZXAuc2ggYi90L3Q3MDAyLWdyZXAuc2gKaW5kZXggYjgxNTkzNy4uYjEzYWE3ZSAxMDA3NTUKLS0tIGEvdC90NzAwMi1ncmVwLnNoCisrKyBiL3QvdDcwMDItZ3JlcC5zaApAQCAtOCw2ICs4LDE1IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCitjYXQgPmhlbGxvLmMgPDxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKKwlyZXR1cm4gMDsKK30KK0VPRgorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKIAl7CiAJCWVjaG8gZm9vIG1tYXAgYmFyCkBAIC0xNiwxMiArMjUsMTMgQEAKIAkJZWNobyBmb28gbW1hcCBiYXJfbW1hcAogCQllY2hvIGZvb19tbWFwIGJhciBtbWFwIGJhegogCX0gPmZpbGUgJiYKKwllY2hvIHd3IHcgPncgJiYKIAllY2hvIHggeCB4eCB4ID54ICYmCiAJZWNobyB5IHl5ID55ICYmCiAJZWNobyB6enogPiB6ICYmCiAJbWtkaXIgdCAmJgogCWVjaG8gdGVzdCA+dC90ICYmCi0JZ2l0IGFkZCBmaWxlIHggeSB6IHQvdCAmJgorCWdpdCBhZGQgZmlsZSB3IHggeSB6IHQvdCBoZWxsby5jICYmCiAJdGVzdF90aWNrICYmCiAJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCiAnCkBAIC00OCw2ICs1OCwxMiBAQAogCQlkaWZmIGV4cGVjdGVkIGFjdHVhbAogCScKIAorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwgKHcpIiAnCisJCTogPmV4cGVjdGVkICYmCisJCSEgZ2l0IGdyZXAgLW4gLXcgLWUgIl53IiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwgKHgpIiAnCiAJCXsKIAkJCWVjaG8gJHtIQ314OjE6eCB4IHh4IHgKQEAgLTExOCw2ICsxMzQsNTggQEAKIAogZG9uZQogCitjYXQgPmV4cGVjdGVkIDw8RU9GCitmaWxlOmZvbyBtbWFwIGJhcl9tbWFwCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZSBBIC0tYW5kIC1lIEInICcKKwlnaXQgZ3JlcCAtZSAiZm9vIG1tYXAiIC0tYW5kIC1lIGJhcl9tbWFwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZmlsZTpmb29fbW1hcCBiYXIgbW1hcAorZmlsZTpmb29fbW1hcCBiYXIgbW1hcCBiYXoKK0VPRgorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgKCAtZSBBIC0tb3IgLWUgQiApIC0tYW5kIC1lIEInICcKKwlnaXQgZ3JlcCBcKCAtZSBmb29fIC0tb3IgLWUgYmF6IFwpIFwKKwkJLS1hbmQgLWUgIiBtbWFwIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2ZpbGU6Zm9vIG1tYXAgYmFyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZSBBIC0tYW5kIC0tbm90IC1lIEInICcKKwlnaXQgZ3JlcCAtZSAiZm9vIG1tYXAiIC0tYW5kIC0tbm90IC1lIGJhcl9tbWFwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoreTp5IHl5CistLQorejp6enoKK0VPRgorCisjIENyZWF0ZSAxMDI0IGZpbGUgbmFtZXMgdGhhdCBzb3J0IGJldHdlZW4gInkiIGFuZCAieiIgdG8gbWFrZSBzdXJlCisjIHRoZSB0d28gZmlsZXMgYXJlIGhhbmRsZWQgYnkgZGlmZmVyZW50IGNhbGxzIHRvIGFuIGV4dGVybmFsIGdyZXAuCisjIFRoaXMgZGVwZW5kcyBvbiBNQVhBUkdTIGluIGJ1aWx0aW4tZ3JlcC5jIGJlaW5nIDEwMjQgb3IgbGVzcy4KK2MzMj0iMCAxIDIgMyA0IDUgNiA3IDggOSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtQzEsIGh1bmsgbWFyayBiZXR3ZWVuIGZpbGVzJyAnCisJZm9yIGEgaW4gJGMzMjsgZG8gZm9yIGIgaW4gJGMzMjsgZG8gOiA+eS0kYSRiOyBkb25lOyBkb25lICYmCisJZ2l0IGFkZCB5LT8/ICYmCisJZ2l0IGdyZXAgLUMxICJeW3l6XSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1DMSAtLW5vLWV4dC1ncmVwLCBodW5rIG1hcmsgYmV0d2VlbiBmaWxlcycgJworCWdpdCBncmVwIC1DMSAtLW5vLWV4dC1ncmVwICJeW3l6XSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZ3JlcCBzZXR1cCcgJwogCWVjaG8gYSA+PmZpbGUgJiYKIAl0ZXN0X3RpY2sgJiYKQEAgLTE3MCw5ICsyMzgsNDUgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgd2l0aCBDRV9WQUxJRCBmaWxlJyAnCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFzc3VtZS11bmNoYW5nZWQgdC90ICYmCiAJcm0gdC90ICYmCi0JdGVzdCAiJChnaXQgZ3JlcCAtLW5vLWV4dC1ncmVwIHQpIiA9ICJ0L3Q6dGVzdCIgJiYKKwl0ZXN0ICIkKGdpdCBncmVwIC0tbm8tZXh0LWdyZXAgdGVzdCkiID0gInQvdDp0ZXN0IiAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1uby1hc3N1bWUtdW5jaGFuZ2VkIHQvdCAmJgogCWdpdCBjaGVja291dCB0L3QKICcKIAorY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYz0jaW5jbHVkZSA8c3RkaW8uaD4KK2hlbGxvLmM6CXJldHVybiAwOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLXAgd2l0aCB1c2VyZGlmZicgJworCWdpdCBjb25maWcgZGlmZi5jdXN0b20uZnVuY25hbWUgIl4jIiAmJgorCWVjaG8gImhlbGxvLmMgZGlmZj1jdXN0b20iID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBncmVwIC1wIHJldHVybiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2hlbGxvLmM9aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoraGVsbG8uYzoJcmV0dXJuIDA7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtcCcgJworCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGdyZXAgLXAgcmV0dXJuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYy0jaW5jbHVkZSA8c3RkaW8uaD4KK2hlbGxvLmM9aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoraGVsbG8uYy17CitoZWxsby5jLQlwcmludGYoIkhlbGxvIHdvcmxkLlxuIik7CitoZWxsby5jOglyZXR1cm4gMDsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1wIC1CNScgJworCWdpdCBncmVwIC1wIC1CNSByZXR1cm4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDMtZmlsdGVyLWJyYW5jaC5zaCBiL3QvdDcwMDMtZmlsdGVyLWJyYW5jaC5zaAppbmRleCA2YTk5MzZlLi4zMjljODUxIDEwMDc1NQotLS0gYS90L3Q3MDAzLWZpbHRlci1icmFuY2guc2gKKysrIGIvdC90NzAwMy1maWx0ZXItYnJhbmNoLnNoCkBAIC00OCw2ICs0OCwyMiBAQAogCXRlc3QgJEggPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKICcKIAorVFJBU0hESVI9JChwd2QpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IEdJVF9ESVIgd2hpbGUgdXNpbmcgLWQnICcKKwlta2RpciBkcmVwbyAmJgorCSggY2QgZHJlcG8gJiYKKwlnaXQgaW5pdCAmJgorCXRlc3RfY29tbWl0IGRyZXBvICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWQgIiRUUkFTSERJUi9kZm9vIiBcCisJCS0taW5kZXgtZmlsdGVyICJjcCBcIiRUUkFTSERJUlwiL2Rmb28vYmFja3VwLXJlZnMgXCIkVFJBU0hESVJcIiIgXAorCSkgJiYKKwlncmVwIGRyZXBvICIkVFJBU0hESVIvYmFja3VwLXJlZnMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0ZhaWwgaWYgY29tbWl0IGZpbHRlciBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tY29tbWl0LWZpbHRlciAiZXhpdCAxIiBIRUFECisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld3JpdGUsIHJlbmFtaW5nIGEgc3BlY2lmaWMgZmlsZScgJwogCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tdHJlZS1maWx0ZXIgIm12IGQgZG9oIHx8IDoiIEhFQUQKICcKQEAgLTI2NCw0ICsyODAsMTIgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1BydW5lIGVtcHR5IGNvbW1pdHMnICcKKwlnaXQgcmV2LWxpc3QgSEVBRCA+IGV4cGVjdCAmJgorCW1ha2VfY29tbWl0IHRvX3JlbW92ZSAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0taW5kZXgtZmlsdGVyICJnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIHRvX3JlbW92ZSIgLS1wcnVuZS1lbXB0eSBIRUFEICYmCisJZ2l0IHJldi1saXN0IEhFQUQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAwNC10YWcuc2ggYi90L3Q3MDA0LXRhZy5zaAppbmRleCBmMzc3ZmVhLi43M2RiYzQzIDEwMDc1NQotLS0gYS90L3Q3MDA0LXRhZy5zaAorKysgYi90L3Q3MDA0LXRhZy5zaApAQCAtMTg1LDggKzE4NSw5IEBACiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdsaXN0aW5nIHRhZ3Mgd2l0aCBzdWJzdHJpbmcgYXMgcGF0dGVybiBtdXN0IHByaW50IHRob3NlIG1hdGNoaW5nJyAnCi0JZ2l0IHRhZyAtbCAiKmEqIiA+IGFjdHVhbCAmJgotCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwlybSAqYSogJiYKKwlnaXQgdGFnIC1sICIqYSoiID4gY3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CiAnCiAKIGNhdCA+ZXhwZWN0IDw8RU9GCkBAIC01ODAsMjggKzU4MSwzOCBAQAogJwogCiAjIHN1YnNlcXVlbnQgdGVzdHMgcmVxdWlyZSBncGc7IGNoZWNrIGlmIGl0IGlzIGF2YWlsYWJsZQotZ3BnIC0tdmVyc2lvbiA+L2Rldi9udWxsCitncGcgLS12ZXJzaW9uID4vZGV2L251bGwgMj4vZGV2L251bGwKIGlmIFsgJD8gLWVxIDEyNyBdOyB0aGVuCi0JZWNobyAiZ3BnIG5vdCBmb3VuZCAtIHNraXBwaW5nIHRhZyBzaWduaW5nIGFuZCB2ZXJpZmljYXRpb24gdGVzdHMiCi0JdGVzdF9kb25lCi0JZXhpdAorCXNheSAiZ3BnIG5vdCBmb3VuZCAtIHNraXBwaW5nIHRhZyBzaWduaW5nIGFuZCB2ZXJpZmljYXRpb24gdGVzdHMiCitlbHNlCisJIyBBcyBzYWlkIGhlcmU6IGh0dHA6Ly93d3cuZ251cGcub3JnL2RvY3VtZW50YXRpb24vZmFxcy5odG1sI3E2LjE5CisJIyB0aGUgZ3BnIHZlcnNpb24gMS4wLjYgZGlkbid0IHBhcnNlIHRydXN0IHBhY2tldHMgY29ycmVjdGx5LCBzbyBmb3IKKwkjIHRoYXQgdmVyc2lvbiwgY3JlYXRpb24gb2Ygc2lnbmVkIHRhZ3MgdXNpbmcgdGhlIGdlbmVyYXRlZCBrZXkgZmFpbHMuCisJY2FzZSAiJChncGcgLS12ZXJzaW9uKSIgaW4KKwknZ3BnIChHbnVQRykgMS4wLjYnKikKKwkJc2F5ICJTa2lwcGluZyBzaWduZWQgdGFnIHRlc3RzLCBiZWNhdXNlIGEgYnVnIGluIDEuMC42IHZlcnNpb24iCisJCTs7CisJKikKKwkJdGVzdF9zZXRfcHJlcmVxIEdQRworCQk7OworCWVzYWMKIGZpCiAKICMgdHJ5aW5nIHRvIHZlcmlmeSBhbm5vdGF0ZWQgbm9uLXNpZ25lZCB0YWdzOgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKIAkndHJ5aW5nIHRvIHZlcmlmeSBhbiBhbm5vdGF0ZWQgbm9uLXNpZ25lZCB0YWcgc2hvdWxkIGZhaWwnICcKIAl0YWdfZXhpc3RzIGFubm90YXRlZC10YWcgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IGFubm90YXRlZC10YWcKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCiAJJ3RyeWluZyB0byB2ZXJpZnkgYSBmaWxlLWFubm90YXRlZCBub24tc2lnbmVkIHRhZyBzaG91bGQgZmFpbCcgJwogCXRhZ19leGlzdHMgZmlsZS1hbm5vdGF0ZWQtdGFnICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBmaWxlLWFubm90YXRlZC10YWcKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCiAJJ3RyeWluZyB0byB2ZXJpZnkgdHdvIGFubm90YXRlZCBub24tc2lnbmVkIHRhZ3Mgc2hvdWxkIGZhaWwnICcKIAl0YWdfZXhpc3RzIGFubm90YXRlZC10YWcgZmlsZS1hbm5vdGF0ZWQtdGFnICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBhbm5vdGF0ZWQtdGFnIGZpbGUtYW5ub3RhdGVkLXRhZwpAQCAtNjA5LDE3ICs2MjAsNiBAQAogCiAjIGNyZWF0aW5nIGFuZCB2ZXJpZnlpbmcgc2lnbmVkIHRhZ3M6CiAKLSMgQXMgc2FpZCBoZXJlOiBodHRwOi8vd3d3LmdudXBnLm9yZy9kb2N1bWVudGF0aW9uL2ZhcXMuaHRtbCNxNi4xOQotIyB0aGUgZ3BnIHZlcnNpb24gMS4wLjYgZGlkbid0IHBhcnNlIHRydXN0IHBhY2tldHMgY29ycmVjdGx5LCBzbyBmb3IKLSMgdGhhdCB2ZXJzaW9uLCBjcmVhdGlvbiBvZiBzaWduZWQgdGFncyB1c2luZyB0aGUgZ2VuZXJhdGVkIGtleSBmYWlscy4KLWNhc2UgIiQoZ3BnIC0tdmVyc2lvbikiIGluCi0nZ3BnIChHbnVQRykgMS4wLjYnKikKLQllY2hvICJTa2lwcGluZyBzaWduZWQgdGFnIHRlc3RzLCBiZWNhdXNlIGEgYnVnIGluIDEuMC42IHZlcnNpb24iCi0JdGVzdF9kb25lCi0JZXhpdAotCTs7Ci1lc2FjCi0KICMga2V5IGdlbmVyYXRpb24gaW5mbzogZ3BnIC0taG9tZWRpciB0L3Q3MDA0IC0tZ2VuLWtleQogIyBUeXBlIERTQSBhbmQgRWxnYW1hbCwgc2l6ZSAyMDQ4IGJpdHMsIG5vIGV4cGlyYXRpb24gZGF0ZS4KICMgTmFtZSBhbmQgZW1haWw6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KQEAgLTYzMyw3ICs2MzMsNyBAQAogZ2V0X3RhZ19oZWFkZXIgc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CiBlY2hvICdBIHNpZ25lZCB0YWcgbWVzc2FnZScgPj5leHBlY3QKIGVjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIC1tIG1lc3NhZ2Ugc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQgdGFnIC1zIC1tICJBIHNpZ25lZCB0YWcgbWVzc2FnZSIgc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIHNpZ25lZC10YWcgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKQEAgLTY0Miw3ICs2NDIsNyBAQAogZ2V0X3RhZ19oZWFkZXIgdS1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKIGVjaG8gJ0Fub3RoZXIgbWVzc2FnZScgPj5leHBlY3QKIGVjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbiB3aXRoIGEgZ2l2ZW4ga2V5IGlkJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2lnbiB3aXRoIGEgZ2l2ZW4ga2V5IGlkJyAnCiAKIAlnaXQgdGFnIC11IGNvbW1pdHRlckBleGFtcGxlLmNvbSAtbSAiQW5vdGhlciBtZXNzYWdlIiB1LXNpZ25lZC10YWcgJiYKIAlnZXRfdGFnX21zZyB1LXNpZ25lZC10YWcgPmFjdHVhbCAmJgpAQCAtNjUwLDE0ICs2NTAsMTQgQEAKIAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWduIHdpdGggYW4gdW5rbm93biBpZCAoMSknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaWduIHdpdGggYW4gdW5rbm93biBpZCAoMSknICcKIAogCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXUgYXV0aG9yQGV4YW1wbGUuY29tIFwKIAkJLW0gIkFub3RoZXIgbWVzc2FnZSIgby1zaWduZWQtdGFnCiAKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbiB3aXRoIGFuIHVua25vd24gaWQgKDIpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2lnbiB3aXRoIGFuIHVua25vd24gaWQgKDIpJyAnCiAKIAl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC11IERFQURCRUVGIC1tICJBbm90aGVyIG1lc3NhZ2UiIG8tc2lnbmVkLXRhZwogCkBAIC02NzQsNyArNjc0LDcgQEAKIGdldF90YWdfaGVhZGVyIGltcGxpZWQtc2lnbiAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CiAuL2Zha2VlZGl0b3IgPj5leHBlY3QKIGVjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnLXUgaW1wbGllcyBzaWduZWQgdGFnJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnLXUgaW1wbGllcyBzaWduZWQgdGFnJyAnCiAJR0lUX0VESVRPUj0uL2Zha2VlZGl0b3IgZ2l0IHRhZyAtdSBDRERFNDMwRCBpbXBsaWVkLXNpZ24gJiYKIAlnZXRfdGFnX21zZyBpbXBsaWVkLXNpZ24gPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKQEAgLTY4Nyw3ICs2ODcsNyBAQAogZ2V0X3RhZ19oZWFkZXIgZmlsZS1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKIGNhdCBzaWdtc2dmaWxlID4+ZXhwZWN0CiBlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCAtRiBtZXNzYWdlZmlsZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdCB0YWcgLXMgLUYgc2lnbXNnZmlsZSBmaWxlLXNpZ25lZC10YWcgJiYKIAlnZXRfdGFnX21zZyBmaWxlLXNpZ25lZC10YWcgPmFjdHVhbCAmJgpAQCAtNzAxLDcgKzcwMSw3IEBACiBnZXRfdGFnX2hlYWRlciBzdGRpbi1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKIGNhdCBzaWdpbnB1dG1zZyA+PmV4cGVjdAogZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCAtRiAtIHNob3VsZCBzdWNjZWVkJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggLUYgLSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdCB0YWcgLXMgLUYgLSBzdGRpbi1zaWduZWQtdGFnIDxzaWdpbnB1dG1zZyAmJgogCWdldF90YWdfbXNnIHN0ZGluLXNpZ25lZC10YWcgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKQEAgLTcxMCwxMyArNzEwLDEzIEBACiBnZXRfdGFnX2hlYWRlciBpbXBsaWVkLWFubm90YXRlICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKIC4vZmFrZWVkaXRvciA+PmV4cGVjdAogZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICctcyBpbXBsaWVzIGFubm90YXRlZCB0YWcnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICctcyBpbXBsaWVzIGFubm90YXRlZCB0YWcnICcKIAlHSVRfRURJVE9SPS4vZmFrZWVkaXRvciBnaXQgdGFnIC1zIGltcGxpZWQtYW5ub3RhdGUgJiYKIAlnZXRfdGFnX21zZyBpbXBsaWVkLWFubm90YXRlID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAogCSd0cnlpbmcgdG8gY3JlYXRlIGEgc2lnbmVkIHRhZyB3aXRoIG5vbi1leGlzdGluZyAtRiBmaWxlIHNob3VsZCBmYWlsJyAnCiAJISB0ZXN0IC1mIG5vbmV4aXN0aW5nZmlsZSAmJgogCSEgdGFnX2V4aXN0cyBub3NpZ3RhZyAmJgpAQCAtNzI0LDEzICs3MjQsMTMgQEAKIAkhIHRhZ19leGlzdHMgbm9zaWd0YWcKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5aW5nIGEgc2lnbmVkIHRhZyBzaG91bGQgc3VjY2VlZCcgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeWluZyBhIHNpZ25lZCB0YWcgc2hvdWxkIHN1Y2NlZWQnIFwKIAknZ2l0IHRhZyAtdiBzaWduZWQtdGFnJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnlpbmcgdHdvIHNpZ25lZCB0YWdzIGluIG9uZSBjb21tYW5kIHNob3VsZCBzdWNjZWVkJyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5aW5nIHR3byBzaWduZWQgdGFncyBpbiBvbmUgY29tbWFuZCBzaG91bGQgc3VjY2VlZCcgXAogCSdnaXQgdGFnIC12IHNpZ25lZC10YWcgZmlsZS1zaWduZWQtdGFnJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKIAkndmVyaWZ5aW5nIG1hbnkgc2lnbmVkIGFuZCBub24tc2lnbmVkIHRhZ3Mgc2hvdWxkIGZhaWwnICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IHNpZ25lZC10YWcgYW5ub3RhdGVkLXRhZyAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgZmlsZS1hbm5vdGF0ZWQtdGFnIGZpbGUtc2lnbmVkLXRhZyAmJgpAQCAtNzM5LDcgKzczOSw3IEBACiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBzaWduZWQtdGFnIGFubm90YXRlZC10YWcgZmlsZS1zaWduZWQtdGFnCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeWluZyBhIGZvcmdlZCB0YWcgc2hvdWxkIGZhaWwnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnlpbmcgYSBmb3JnZWQgdGFnIHNob3VsZCBmYWlsJyAnCiAJZm9yZ2VkPSQoZ2l0IGNhdC1maWxlIHRhZyBzaWduZWQtdGFnIHwKIAkJc2VkIC1lICJzL3NpZ25lZC10YWcvZm9yZ2VkLXRhZy8iIHwKIAkJZ2l0IG1rdGFnKSAmJgpAQCAtNzUxLDcgKzc1MSw3IEBACiAKIGdldF90YWdfaGVhZGVyIGVtcHR5LXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAogZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYW4gZW1wdHkgLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdCB0YWcgLXMgLW0gIiIgZW1wdHktc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIGVtcHR5LXNpZ25lZC10YWcgPmFjdHVhbCAmJgpAQCAtNzYyLDcgKzc2Miw3IEBACiA+c2lnZW1wdHlmaWxlCiBnZXRfdGFnX2hlYWRlciBlbXB0eWZpbGUtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CiBlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCBhbiBlbXB0eSAtRiBtZXNzYWdlZmlsZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdCB0YWcgLXMgLUYgc2lnZW1wdHlmaWxlIGVtcHR5ZmlsZS1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgZW1wdHlmaWxlLXNpZ25lZC10YWcgPmFjdHVhbCAmJgpAQCAtNzg1LDcgKzc4NSw3IEBACiBUcmFpbGluZyBibGFuayBsaW5lcwogRU9GCiBlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAogCSdleHRyYSBibGFua3MgaW4gdGhlIG1lc3NhZ2UgZm9yIGEgc2lnbmVkIHRhZyBzaG91bGQgYmUgcmVtb3ZlZCcgJwogCWdpdCB0YWcgLXMgLUYgc2lnYmxhbmtzZmlsZSBibGFua3Mtc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIGJsYW5rcy1zaWduZWQtdGFnID5hY3R1YWwgJiYKQEAgLTc5NSw3ICs3OTUsNyBAQAogCiBnZXRfdGFnX2hlYWRlciBibGFuay1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKIGVjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCiAJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIGEgYmxhbmsgLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdCB0YWcgLXMgLW0gIiAgICAgIiBibGFuay1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgYmxhbmstc2lnbmVkLXRhZyA+YWN0dWFsICYmCkBAIC04MDgsNyArODA4LDcgQEAKIGVjaG8gJyAgJyAgICA+PnNpZ2JsYW5rZmlsZQogZ2V0X3RhZ19oZWFkZXIgYmxhbmtmaWxlLXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAogZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYmxhbmsgLUYgZmlsZSB3aXRoIHNwYWNlcyBzaG91bGQgc3VjY2VlZCcgJwogCWdpdCB0YWcgLXMgLUYgc2lnYmxhbmtmaWxlIGJsYW5rZmlsZS1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgYmxhbmtmaWxlLXNpZ25lZC10YWcgPmFjdHVhbCAmJgpAQCAtODE5LDcgKzgxOSw3IEBACiBwcmludGYgJyAgICAgICcgPnNpZ2JsYW5rbm9ubGZpbGUKIGdldF90YWdfaGVhZGVyIGJsYW5rbm9ubGZpbGUtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CiBlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCBzcGFjZXMgYW5kIG5vIG5ld2xpbmUgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQgdGFnIC1zIC1GIHNpZ2JsYW5rbm9ubGZpbGUgYmxhbmtub25sZmlsZS1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgYmxhbmtub25sZmlsZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKQEAgLTg1Niw3ICs4NTYsNyBAQAogTGFzdCBsaW5lLgogRU9GCiBlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCBhIC1GIGZpbGUgd2l0aCAjY29tbWVudHMgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQgdGFnIC1zIC1GIHNpZ2NvbW1lbnRzZmlsZSBjb21tZW50cy1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgY29tbWVudHMtc2lnbmVkLXRhZyA+YWN0dWFsICYmCkBAIC04NjYsNyArODY2LDcgQEAKIAogZ2V0X3RhZ19oZWFkZXIgY29tbWVudC1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKIGVjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCiAJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoICNjb21tZW50ZWQgLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdCB0YWcgLXMgLW0gIiNjb21tZW50IiBjb21tZW50LXNpZ25lZC10YWcgJiYKIAlnZXRfdGFnX21zZyBjb21tZW50LXNpZ25lZC10YWcgPmFjdHVhbCAmJgpAQCAtODc5LDcgKzg3OSw3IEBACiBlY2hvICcjIyMjJyAgICAgPj5zaWdjb21tZW50ZmlsZQogZ2V0X3RhZ19oZWFkZXIgY29tbWVudGZpbGUtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CiBlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCAjY29tbWVudGVkIC1GIG1lc3NhZ2VmaWxlIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0IHRhZyAtcyAtRiBzaWdjb21tZW50ZmlsZSBjb21tZW50ZmlsZS1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgY29tbWVudGZpbGUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCkBAIC04OTAsNyArODkwLDcgQEAKIHByaW50ZiAnI2NvbW1lbnQnID5zaWdjb21tZW50bm9ubGZpbGUKIGdldF90YWdfaGVhZGVyIGNvbW1lbnRub25sZmlsZS1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKIGVjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCiAJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIGEgI2NvbW1lbnQgYW5kIG5vIG5ld2xpbmUgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQgdGFnIC1zIC1GIHNpZ2NvbW1lbnRub25sZmlsZSBjb21tZW50bm9ubGZpbGUtc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIGNvbW1lbnRub25sZmlsZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKQEAgLTkwMCw3ICs5MDAsNyBAQAogCiAjIGxpc3RpbmcgbWVzc2FnZXMgZm9yIHNpZ25lZCB0YWdzOgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKIAknbGlzdGluZyB0aGUgb25lLWxpbmUgbWVzc2FnZSBvZiBhIHNpZ25lZCB0YWcgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQgdGFnIC1zIC1tICJBIG1lc3NhZ2UgbGluZSBzaWduZWQiIHN0YWctb25lLWxpbmUgJiYKIApAQCAtOTI1LDcgKzkyNSw3IEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKIAknbGlzdGluZyB0aGUgemVyby1saW5lcyBtZXNzYWdlIG9mIGEgc2lnbmVkIHRhZyBzaG91bGQgc3VjY2VlZCcgJwogCWdpdCB0YWcgLXMgLW0gIiIgc3RhZy16ZXJvLWxpbmVzICYmCiAKQEAgLTk1Myw3ICs5NTMsNyBAQAogZWNobyAnc3RhZyBsaW5lIG9uZScgPnNpZ3RhZ21zZwogZWNobyAnc3RhZyBsaW5lIHR3bycgPj5zaWd0YWdtc2cKIGVjaG8gJ3N0YWcgbGluZSB0aHJlZScgPj5zaWd0YWdtc2cKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAogCSdsaXN0aW5nIG1hbnkgbWVzc2FnZSBsaW5lcyBvZiBhIHNpZ25lZCB0YWcgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQgdGFnIC1zIC1GIHNpZ3RhZ21zZyBzdGFnLWxpbmVzICYmCiAKQEAgLTk5OCwxMiArOTk4LDEyIEBACiAKIHRyZWU9JChnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9KQogYmxvYj0kKGdpdCByZXYtcGFyc2UgSEVBRDpmb28pCi10YWc9JChnaXQgcmV2LXBhcnNlIHNpZ25lZC10YWcpCit0YWc9JChnaXQgcmV2LXBhcnNlIHNpZ25lZC10YWcgMj4vZGV2L251bGwpCiAKIGdldF90YWdfaGVhZGVyIHRyZWUtc2lnbmVkLXRhZyAkdHJlZSB0cmVlICR0aW1lID5leHBlY3QKIGVjaG8gIkEgbWVzc2FnZSBmb3IgYSB0cmVlIiA+PmV4cGVjdAogZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHBvaW50aW5nIHRvIGEgdHJlZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdCB0YWcgLXMgLW0gIkEgbWVzc2FnZSBmb3IgYSB0cmVlIiB0cmVlLXNpZ25lZC10YWcgSEVBRF57dHJlZX0gJiYKIAlnZXRfdGFnX21zZyB0cmVlLXNpZ25lZC10YWcgPmFjdHVhbCAmJgpAQCAtMTAxMyw3ICsxMDEzLDcgQEAKIGdldF90YWdfaGVhZGVyIGJsb2Itc2lnbmVkLXRhZyAkYmxvYiBibG9iICR0aW1lID5leHBlY3QKIGVjaG8gIkEgbWVzc2FnZSBmb3IgYSBibG9iIiA+PmV4cGVjdAogZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHBvaW50aW5nIHRvIGEgYmxvYiBzaG91bGQgc3VjY2VlZCcgJwogCWdpdCB0YWcgLXMgLW0gIkEgbWVzc2FnZSBmb3IgYSBibG9iIiBibG9iLXNpZ25lZC10YWcgSEVBRDpmb28gJiYKIAlnZXRfdGFnX21zZyBibG9iLXNpZ25lZC10YWcgPmFjdHVhbCAmJgpAQCAtMTAyMyw3ICsxMDIzLDcgQEAKIGdldF90YWdfaGVhZGVyIHRhZy1zaWduZWQtdGFnICR0YWcgdGFnICR0aW1lID5leHBlY3QKIGVjaG8gIkEgbWVzc2FnZSBmb3IgYW5vdGhlciB0YWciID4+ZXhwZWN0CiBlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgcG9pbnRpbmcgdG8gYW5vdGhlciB0YWcgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQgdGFnIC1zIC1tICJBIG1lc3NhZ2UgZm9yIGFub3RoZXIgdGFnIiB0YWctc2lnbmVkLXRhZyBzaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgdGFnLXNpZ25lZC10YWcgPmFjdHVhbCAmJgpAQCAtMTAzMiw3ICsxMDMyLDcgQEAKIAogIyB0cnkgdG8gc2lnbiB3aXRoIGJhZCB1c2VyLnNpZ25pbmdrZXkKIGdpdCBjb25maWcgdXNlci5zaWduaW5na2V5IEJvYlRoZU1vdXNlCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKIAknZ2l0IHRhZyAtcyBmYWlscyBpZiBncGcgaXMgbWlzY29uZmlndXJlZCcgXAogCSd0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1zIC1tIHRhaWwgdGFnLWdwZy1mYWlsdXJlJwogZ2l0IGNvbmZpZyAtLXVuc2V0IHVzZXIuc2lnbmluZ2tleQpAQCAtMTA0MCw3ICsxMDQwLDcgQEAKICMgdHJ5IHRvIHZlcmlmeSB3aXRob3V0IGdwZzoKIAogcm0gLXJmIGdwZ2hvbWUKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAogCSd2ZXJpZnkgc2lnbmVkIHRhZyBmYWlscyB3aGVuIHB1YmxpYyBrZXkgaXMgbm90IHByZXNlbnQnIFwKIAkndGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBzaWduZWQtdGFnJwogCkBAIC0xMDkwLDYgKzEwOTAsMTIxIEBACiAJZ2l0IGNhdC1maWxlIHRhZyB0YWctZnJvbS1zdWJkaXItMiB8IGdyZXAgImluIHN1YiBkaXJlY3RvcnkiCiAnCiAKKyMgY3JlYXRlIGEgZmV3IG1vcmUgY29tbWl0cyB0byB0ZXN0IC0tY29udGFpbnMKKworaGFzaDE9JChnaXQgcmV2LXBhcnNlIEhFQUQpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIHNlY29uZCBjb21taXQgYW5kIHRhZycgJworCWVjaG8gZm9vLTIuMCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZAorCWdpdCB0YWcgdjIuMAorJworCitoYXNoMj0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgdGhpcmQgY29tbWl0IHdpdGhvdXQgdGFnJyAnCisJZWNobyBmb28tZGV2ID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQKKycKKworaGFzaDM9JChnaXQgcmV2LXBhcnNlIEhFQUQpCisKKyMgc2ltcGxlIGxpbmVhciBjaGVja3Mgb2YgLS1jb250aW51ZQorCitjYXQgPiBleHBlY3RlZCA8PEVPRgordjAuMi4xCit2MS4wCit2MS4wLjEKK3YxLjEuMwordjIuMAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIHRoYXQgZmlyc3QgY29tbWl0IGlzIGluIGFsbCB0YWdzIChoYXNoKScgIgorCWdpdCB0YWcgLWwgLS1jb250YWlucyAkaGFzaDEgdiogPmFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCisjIG90aGVyIHdheXMgb2Ygc3BlY2lmeWluZyB0aGUgY29tbWl0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyB0aGF0IGZpcnN0IGNvbW1pdCBpcyBpbiBhbGwgdGFncyAodGFnKScgIgorCWdpdCB0YWcgLWwgLS1jb250YWlucyB2MS4wIHYqID5hY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCBmaXJzdCBjb21taXQgaXMgaW4gYWxsIHRhZ3MgKHJlbGF0aXZlKScgIgorCWdpdCB0YWcgLWwgLS1jb250YWlucyBIRUFEfjIgdiogPmFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCitjYXQgPiBleHBlY3RlZCA8PEVPRgordjIuMAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIHRoYXQgc2Vjb25kIGNvbW1pdCBvbmx5IGhhcyBvbmUgdGFnJyAiCisJZ2l0IHRhZyAtbCAtLWNvbnRhaW5zICRoYXNoMiB2KiA+YWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKKworY2F0ID4gZXhwZWN0ZWQgPDxFT0YKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyB0aGF0IHRoaXJkIGNvbW1pdCBoYXMgbm8gdGFncycgIgorCWdpdCB0YWcgLWwgLS1jb250YWlucyAkaGFzaDMgdiogPmFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCisjIGhvdyBhYm91dCBhIHNpbXBsZSBtZXJnZT8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgc2ltcGxlIGJyYW5jaCcgJworCWdpdCBicmFuY2ggc3RhYmxlIHYyLjAgJiYKKyAgICAgICAgZ2l0IGNoZWNrb3V0IHN0YWJsZSAmJgorCWVjaG8gZm9vLTMuMCA+IGZvbyAmJgorCWdpdCBjb21taXQgZm9vIC1tIGZvdXJ0aAorCWdpdCB0YWcgdjMuMAorJworCitoYXNoND0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKworY2F0ID4gZXhwZWN0ZWQgPDxFT0YKK3YzLjAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyB0aGF0IGJyYW5jaCBoZWFkIG9ubHkgaGFzIG9uZSB0YWcnICIKKwlnaXQgdGFnIC1sIC0tY29udGFpbnMgJGhhc2g0IHYqID5hY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2luZyBvcmlnaW5hbCBicmFuY2ggaW50byB0aGlzIGJyYW5jaCcgJworCWdpdCBtZXJnZSAtLXN0cmF0ZWd5PW91cnMgbWFzdGVyICYmCisgICAgICAgIGdpdCB0YWcgdjQuMAorJworCitjYXQgPiBleHBlY3RlZCA8PEVPRgordjQuMAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIHRoYXQgb3JpZ2luYWwgYnJhbmNoIGhlYWQgaGFzIG9uZSB0YWcgbm93JyAiCisJZ2l0IHRhZyAtbCAtLWNvbnRhaW5zICRoYXNoMyB2KiA+YWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2NhdCA+IGV4cGVjdGVkIDw8RU9GCit2MC4yLjEKK3YxLjAKK3YxLjAuMQordjEuMS4zCit2Mi4wCit2My4wCit2NC4wCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCBpbml0aWFsIGNvbW1pdCBpcyBpbiBhbGwgdGFncycgIgorCWdpdCB0YWcgLWwgLS1jb250YWlucyAkaGFzaDEgdiogPmFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCiAjIG1peGluZyBtb2RlcyBhbmQgb3B0aW9uczoKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWl4aW5nIGluY29tcGF0aWJsZXMgbW9kZXMgYW5kIG9wdGlvbnMgaXMgZm9yYmlkZGVuJyAnCmRpZmYgLS1naXQgYS90L3Q3MDA1LWVkaXRvci5zaCBiL3QvdDcwMDUtZWRpdG9yLnNoCmluZGV4IDJkOTE5ZDYuLmI2NDc5NTcgMTAwNzU1Ci0tLSBhL3QvdDcwMDUtZWRpdG9yLnNoCisrKyBiL3QvdDcwMDUtZWRpdG9yLnNoCkBAIC03LDYgKzcsNyBAQAogZm9yIGkgaW4gR0lUX0VESVRPUiBjb3JlX2VkaXRvciBFRElUT1IgVklTVUFMIHZpCiBkbwogCWNhdCA+ZS0kaS5zaCA8PC1FT0YKKwkjISRTSEVMTF9QQVRICiAJZWNobyAiRWRpdGVkIGJ5ICRpIiA+IlwkMSIKIAlFT0YKIAljaG1vZCAreCBlLSRpLnNoCkBAIC04NywzMCArODgsMjYgQEAKIAknCiBkb25lCiAKK2lmICEgZWNobyAnZWNobyBzcGFjZSA+ICIkMSInID4gImUgc3BhY2Uuc2giCit0aGVuCisJc2F5ICJTa2lwcGluZzsgRlMgZG9lcyBub3Qgc3VwcG9ydCBzcGFjZXMgaW4gZmlsZW5hbWVzIgorCXRlc3RfZG9uZQorZmkKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdG9yIHdpdGggYSBzcGFjZScgJwogCi0JaWYgZWNobyAiZWNobyBzcGFjZSA+IFwiXCQxXCIiID4gImUgc3BhY2Uuc2giCi0JdGhlbgotCQljaG1vZCBhK3ggImUgc3BhY2Uuc2giICYmCi0JCUdJVF9FRElUT1I9Ii4vZVwgc3BhY2Uuc2giIGdpdCBjb21taXQgLS1hbWVuZCAmJgotCQl0ZXN0IHNwYWNlID0gIiQoZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzKSIKLQllbHNlCi0JCXNheSAiU2tpcHBpbmc7IEZTIGRvZXMgbm90IHN1cHBvcnQgc3BhY2VzIGluIGZpbGVuYW1lcyIKLQlmaQorCWNobW9kIGEreCAiZSBzcGFjZS5zaCIgJiYKKwlHSVRfRURJVE9SPSIuL2VcIHNwYWNlLnNoIiBnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwl0ZXN0IHNwYWNlID0gIiQoZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzKSIKIAogJwogCiB1bnNldCBHSVRfRURJVE9SCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JlLmVkaXRvciB3aXRoIGEgc3BhY2UnICcKIAotCWlmIHRlc3QgLWYgImUgc3BhY2Uuc2giCi0JdGhlbgotCQlnaXQgY29uZmlnIGNvcmUuZWRpdG9yIFwiLi9lXCBzcGFjZS5zaFwiICYmCi0JCWdpdCBjb21taXQgLS1hbWVuZCAmJgotCQl0ZXN0IHNwYWNlID0gIiQoZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzKSIKLQllbHNlCi0JCXNheSAiU2tpcHBpbmc7IEZTIGRvZXMgbm90IHN1cHBvcnQgc3BhY2VzIGluIGZpbGVuYW1lcyIKLQlmaQorCWdpdCBjb25maWcgY29yZS5lZGl0b3IgXCIuL2VcIHNwYWNlLnNoXCIgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwl0ZXN0IHNwYWNlID0gIiQoZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzKSIKIAogJwogCmRpZmYgLS1naXQgYS90L3Q3MjAxLWNvLnNoIGIvdC90NzIwMS1jby5zaAppbmRleCAwZTIxNjMyLi5lYmZkMzRkIDEwMDc1NQotLS0gYS90L3Q3MjAxLWNvLnNoCisrKyBiL3QvdDcyMDEtY28uc2gKQEAgLTE3MSw3ICsxNzEsNyBAQAogCWdpdCBjaGVja291dCAtZiByZW5hbWVyICYmIGdpdCBjbGVhbiAtZiAmJgogCWdpdCBjaGVja291dCByZW5hbWVyXiAyPm1lc3NhZ2VzICYmCiAJKGNhdCA+bWVzc2FnZXMuZXhwZWN0IDw8RU9GCi1Ob3RlOiBtb3ZpbmcgdG8gInJlbmFtZXJeIiB3aGljaCBpc24nIiciJ3QgYSBsb2NhbCBicmFuY2gKK05vdGU6IG1vdmluZyB0byAnXCcncmVuYW1lcl4nXCcnIHdoaWNoIGlzbidcJyd0IGEgbG9jYWwgYnJhbmNoCiBJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGZyb20gdGhpcyBjaGVja291dCwgeW91IG1heSBkbyBzbwogKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWIgd2l0aCB0aGUgY2hlY2tvdXQgY29tbWFuZCBhZ2Fpbi4gRXhhbXBsZToKICAgZ2l0IGNoZWNrb3V0IC1iIDxuZXdfYnJhbmNoX25hbWU+CkBAIC01MzQsNCArNTM0LDEyIEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIG91dCBvZiBub24tYnJhbmNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwllY2hvIG1vZGlmaWVkID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgcmVuYW1lciAyPmVycm9yLmxvZyAmJgorCSEgZ3JlcCAiXlByZXZpb3VzIEhFQUQiIGVycm9yLmxvZworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDczMDAtY2xlYW4uc2ggYi90L3Q3MzAwLWNsZWFuLnNoCmluZGV4IDE2MzZmYWMuLjkyOWQ1ZDQgMTAwNzU1Ci0tLSBhL3QvdDczMDAtY2xlYW4uc2gKKysrIGIvdC90NzMwMC1jbGVhbi5zaApAQCAtMzczLDkgKzM3Myw5IEBACiAKIAlta2RpciBmb28gJiYKIAl0b3VjaCBmb28vYmFyICYmCi0JZXhlYyA8Zm9vL2JhciAmJgotCWNobW9kIDAgZm9vICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsZWFuIC1mIC1kCisJKGV4ZWMgPGZvby9iYXIgJiYKKwkgY2htb2QgMCBmb28gJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsZWFuIC1mIC1kKQogCiAnCiBjaG1vZCA3NTUgZm9vCmRpZmYgLS1naXQgYS90L3Q3NDAwLXN1Ym1vZHVsZS1iYXNpYy5zaCBiL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCmluZGV4IDJlYzdhYzYuLjBmMmNjYzYgMTAwNzU1Ci0tLSBhL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCisrKyBiL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCkBAIC00Nyw2ICs0Nyw2NSBAQAogCUdJVF9DT05GSUc9LmdpdG1vZHVsZXMgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS51cmwgZ2l0Oi8vZXhhbXBsZS5jb20vaW5pdC5naXQKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnUHJlcGFyZSBzdWJtb2R1bGUgYWRkIHRlc3RpbmcnICcKKwlzdWJtb2R1cmw9JChwd2QpCisJKAorCQlta2RpciBhZGR0ZXN0ICYmCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IGluaXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQnICcKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIHN1Ym1vZCAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgLS1icmFuY2gnICcKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLWIgaW5pdGlhbCAiJHN1Ym1vZHVybCIgc3VibW9kLWJyYW5jaCAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJY2Qgc3VibW9kLWJyYW5jaCAmJgorCQlnaXQgYnJhbmNoIHwgZ3JlcCBpbml0aWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHdpdGggLi8gaW4gcGF0aCcgJworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybCIgLi8uL2RvdHN1Ym1vZC8uL2Zyb3R6Ly4vICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCB3aXRoIC8vIGluIHBhdGgnICcKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIHNsYXNoc2xhc2hzdWJtb2QvLy9mcm90ei8vICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCB3aXRoIC8uLiBpbiBwYXRoJyAnCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkICIkc3VibW9kdXJsIiBkb3Rkb3RzdWJtb2QvLi4vcmVhbHN1Ym1vZC9mcm90ei8uLiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgd2l0aCAuLywgLy4uIGFuZCAvLyBpbiBwYXRoJyAnCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkICIkc3VibW9kdXJsIiBkb3QvZG90c2xhc2hzdWJtb2QvLi8uLi8uLi8vLy9yZWFsc3VibW9kMi9hL2IvYy9kLy4uLy4uLy4uLy4uL2Zyb3R6Ly8uLiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQKKwkpCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG91bGQgZmFpbCBmb3IgdW5tYXBwZWQgcGF0aHMnICcKIAlpZiBnaXQgc3VibW9kdWxlIHN0YXR1cwogCXRoZW4KQEAgLTIzNCw0ICsyOTMsMTcgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyBncmFjZWZ1bGx5IGhhbmRsZXMgdHJhaWxpbmcgc2xhc2gnICcKKworCXRlc3QgImluaXQiID0gIiQoZ2l0IGxzLWZpbGVzIGluaXQvKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgPGludmFsaWQtcGF0aD4gd2FybnMnICcKKworCWdpdCBzdWJtb2R1bGUgbm8tc3VjaC1zdWJtb2R1bGUgMj4gb3V0cHV0LmVyciAmJgorCWdyZXAgIl5lcnJvcjogLipuby1zdWNoLXN1Ym1vZHVsZSIgb3V0cHV0LmVycgorCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwNS1zdWJtb2R1bGUtbWVyZ2Uuc2ggYi90L3Q3NDA1LXN1Ym1vZHVsZS1tZXJnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YTIxZjc4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwNS1zdWJtb2R1bGUtbWVyZ2Uuc2gKQEAgLTAsMCArMSw3NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdpbmcgd2l0aCBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKworIworIyBoaXN0b3J5CisjCisjICAgICAgICBhIC0tLSBjCisjICAgICAgLyAgIFwgLworIyByb290ICAgICAgWAorIyAgICAgIFwgICAvIFwKKyMgICAgICAgIGIgLS0tIGQKKyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlta2RpciBzdWIgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBpbml0ICYmCisJIGVjaG8gb3JpZ2luYWwgPiBmaWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSBzdWItcm9vdCkgJiYKKwlnaXQgYWRkIHN1YiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gcm9vdCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGEgbWFzdGVyICYmCisJKGNkIHN1YiAmJgorCSBlY2hvIEEgPiBmaWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSBzdWItYSkgJiYKKwlnaXQgYWRkIHN1YiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gYSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGIgbWFzdGVyICYmCisJKGNkIHN1YiAmJgorCSBlY2hvIEIgPiBmaWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSBzdWItYikgJiYKKwlnaXQgYWRkIHN1YiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gYgorCisJZ2l0IGNoZWNrb3V0IC1iIGMgYSAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIGIgJiYKKworCWdpdCBjaGVja291dCAtYiBkIGIgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyBhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdpbmcgd2l0aCBtb2RpZnkvbW9kaWZ5IGNvbmZsaWN0JyAnCisKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdDEgYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBiICYmCisJdGVzdCAtZiAuZ2l0L01FUkdFX01TRyAmJgorCWdpdCBkaWZmICYmCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnaW5nIHdpdGggYSBtb2RpZnkvbW9kaWZ5IGNvbmZsaWN0IGJldHdlZW4gbWVyZ2UgYmFzZXMnICcKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0MiBjICYmCisJZ2l0IG1lcmdlIGQKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDYtc3VibW9kdWxlLXJlZmVyZW5jZS5zaCBiL3QvdDc0MDYtc3VibW9kdWxlLXJlZmVyZW5jZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYzE2ZDNmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwNi1zdWJtb2R1bGUtcmVmZXJlbmNlLnNoCkBAIC0wLDAgKzEsODEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDksIFJlZCBIYXQgSW5jLCBBdXRob3I6IE1pY2hhZWwgUy4gVHNpcmtpbiAobXN0QHJlZGhhdC5jb20pCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2xvbmUgLS1yZWZlcmVuY2UnCisuIC4vdGVzdC1saWIuc2gKKworYmFzZV9kaXI9YHB3ZGAKKworVT0kYmFzZV9kaXIvVVBMT0FEX0xPRworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgZmlyc3QgcmVwb3NpdG9yeScgXAorJ3Rlc3RfY3JlYXRlX3JlcG8gQSAmJiBjZCBBICYmCitlY2hvIGZpcnN0ID4gZmlsZTEgJiYKK2dpdCBhZGQgZmlsZTEgJiYKK2dpdCBjb21taXQgLW0gQS1pbml0aWFsJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgc2Vjb25kIHJlcG9zaXRvcnknIFwKKydnaXQgY2xvbmUgQSBCICYmIGNkIEIgJiYKK2VjaG8gc2Vjb25kID4gZmlsZTIgJiYKK2dpdCBhZGQgZmlsZTIgJiYKK2dpdCBjb21taXQgLW0gQi1hZGRpdGlvbiAmJgorZ2l0IHJlcGFjayAtYSAtZCAmJgorZ2l0IHBydW5lJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgc3VwZXJtb2R1bGUnIFwKKyd0ZXN0X2NyZWF0ZV9yZXBvIHN1cGVyICYmIGNkIHN1cGVyICYmCitlY2hvIGZpbGUgPiBmaWxlICYmCitnaXQgYWRkIGZpbGUgJiYKK2dpdCBjb21taXQgLW0gQi1zdXBlci1pbml0aWFsJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIC0tcmVmZXJlbmNlJyBcCisnY2Qgc3VwZXIgJiYgZ2l0IHN1Ym1vZHVsZSBhZGQgLS1yZWZlcmVuY2UgLi4vQiAiZmlsZTovLyRiYXNlX2Rpci9BIiBzdWIgJiYKK2dpdCBjb21taXQgLW0gQi1zdXBlci1hZGRlZCcKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWZ0ZXIgYWRkOiBleGlzdGVuY2Ugb2YgaW5mby9hbHRlcm5hdGVzJyBcCisndGVzdCBgd2MgLWwgPHN1cGVyL3N1Yi8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzYCA9IDEnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoYXQgcmVmZXJlbmNlIGdldHMgdXNlZCB3aXRoIGFkZCcgXAorJ2NkIHN1cGVyL3N1YiAmJgorZWNobyAiMCBvYmplY3RzLCAwIGtpbG9ieXRlcyIgPiBleHBlY3RlZCAmJgorZ2l0IGNvdW50LW9iamVjdHMgPiBjdXJyZW50ICYmCitkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgc3VwZXJtb2R1bGUnIFwKKydnaXQgY2xvbmUgc3VwZXIgc3VwZXItY2xvbmUnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSB3aXRoIHJlZmVyZW5jZScgXAorJ2NkIHN1cGVyLWNsb25lICYmIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlZmVyZW5jZSAuLi9CJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZnRlciB1cGRhdGU6IGV4aXN0ZW5jZSBvZiBpbmZvL2FsdGVybmF0ZXMnIFwKKyd0ZXN0IGB3YyAtbCA8c3VwZXItY2xvbmUvc3ViLy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXNgID0gMScKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhhdCByZWZlcmVuY2UgZ2V0cyB1c2VkIHdpdGggdXBkYXRlJyBcCisnY2Qgc3VwZXItY2xvbmUvc3ViICYmCitlY2hvICIwIG9iamVjdHMsIDAga2lsb2J5dGVzIiA+IGV4cGVjdGVkICYmCitnaXQgY291bnQtb2JqZWN0cyA+IGN1cnJlbnQgJiYKK2RpZmYgZXhwZWN0ZWQgY3VycmVudCcKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDA2LXN1Ym1vZHVsZS11cGRhdGUuc2ggYi90L3Q3NDA2LXN1Ym1vZHVsZS11cGRhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmQzM2Q5ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaApAQCAtMCwwICsxLDE5OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBSZWQgSGF0LCBJbmMuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdXBkYXRpbmcgc3VibW9kdWxlcworCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGRldGFjaGVzIHRoZSBIRUFEIG9mIHRoZQorc3VibW9kdWxlIGFuZCAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWJhc2UvLS1tZXJnZSIgZG9lcyBub3QgZGV0YWNoIHRoZSBIRUFELgorJworCisuIC4vdGVzdC1saWIuc2gKKworCitjb21wYXJlX2hlYWQoKQoreworICAgIHNoYV9tYXN0ZXI9YGdpdC1yZXYtbGlzdCAtLW1heC1jb3VudD0xIG1hc3RlcmAKKyAgICBzaGFfaGVhZD1gZ2l0LXJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRGAKKworICAgIHRlc3QgIiRzaGFfbWFzdGVyIiA9ICIkc2hhX2hlYWQiCit9CisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSBzdWJtb2R1bGUgdHJlZScgJworCWVjaG8gZmlsZSA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHVwc3RyZWFtCisJZ2l0IGNsb25lIC4gc3VwZXIgJiYKKwlnaXQgY2xvbmUgc3VwZXIgc3VibW9kdWxlICYmCisJKGNkIHN1cGVyICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWJtb2R1bGUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0IHN1Ym1vZHVsZQorCSkgJiYKKwkoY2Qgc3VibW9kdWxlICYmCisJZWNobyAibGluZTIiID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1pdCAyIgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IHB1bGwgLS1yZWJhc2Ugb3JpZ2luCisJICkgJiYKKwkgZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIHVwZGF0ZSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgZGV0YWNoaW5nIHRoZSBIRUFEICcgJworCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgISBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1yZWJhc2Ugc3RheWluZyBvbiBtYXN0ZXInICcKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgY2hlY2tvdXQgbWFzdGVyCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlYmFzZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLW1lcmdlIHN0YXlpbmcgb24gbWFzdGVyJyAnCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tbWVyZ2Ugc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSByZWJhc2UgaW4gLmdpdC9jb25maWcnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSByZWJhc2UKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY2hlY2tvdXQgaW4gLmdpdC9jb25maWcgYnV0IC0tcmViYXNlIGdpdmVuJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgY2hlY2tvdXQKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmViYXNlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gbWVyZ2UgaW4gLmdpdC9jb25maWcnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBtZXJnZQorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSBjaGVja291dCBpbiAuZ2l0L2NvbmZpZyBidXQgLS1tZXJnZSBnaXZlbicgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIGNoZWNrb3V0CisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLW1lcmdlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY2hlY2tvdXQgaW4gLmdpdC9jb25maWcnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBjaGVja291dAorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJICEgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaW5pdCBwaWNrcyB1cCByZWJhc2UnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUucmViYXNpbmcudXJsIGdpdDovL25vbi1leGlzdGluZy9naXQgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUucmViYXNpbmcucGF0aCBkb2VzLW5vdC1tYXR0ZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUucmViYXNpbmcudXBkYXRlIHJlYmFzZSAmJgorCSBnaXQgc3VibW9kdWxlIGluaXQgcmViYXNpbmcgJiYKKwkgdGVzdCAicmViYXNlIiA9ICQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUucmViYXNpbmcudXBkYXRlKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGluaXQgcGlja3MgdXAgbWVyZ2UnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUubWVyZ2luZy51cmwgZ2l0Oi8vbm9uLWV4aXN0aW5nL2dpdCAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5tZXJnaW5nLnBhdGggZG9lcy1ub3QtbWF0dGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLm1lcmdpbmcudXBkYXRlIG1lcmdlICYmCisJIGdpdCBzdWJtb2R1bGUgaW5pdCBtZXJnaW5nICYmCisJIHRlc3QgIm1lcmdlIiA9ICQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUubWVyZ2luZy51cGRhdGUpCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDAtY29tbWl0LnNoIGIvdC90NzUwMC1jb21taXQuc2gKaW5kZXggNmUxOGE5Ni4uOGVlYzBmYSAxMDA3NTUKLS0tIGEvdC90NzUwMC1jb21taXQuc2gKKysrIGIvdC90NzUwMC1jb21taXQuc2gKQEAgLTE0OSwxMCArMTQ5LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaWdub2ZmJyAnCiAJZWNobyAieWV0IGFub3RoZXIgY29udGVudCAqbmFyZioiID4+IGZvbyAmJgotCWVjaG8gInpvcnQiIHwgKAotCQl0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLWNvbnRlbnQgJiYKLQkJZ2l0IGNvbW1pdCAtcyAtRiAtIGZvbwotCSkgJiYKKwllY2hvICJ6b3J0IiB8IGdpdCBjb21taXQgLXMgLUYgLSBmb28gJiYKIAlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgIjEsL14kL2QiID4gb3V0cHV0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwpAQCAtMTg2LDQgKzE4MywxNCBAQAogCWNvbW1pdF9tc2dfaXMgIkxvZyB3aXRoIGZvbyB3b3JkIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLUYgb3ZlcnJpZGVzIC10JyAnCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZWNobyAiLUYgbG9nIiA+IGYubG9nICYmCisJCWVjaG8gIi10IHRlbXBsYXRlIiA+IHQudGVtcGxhdGUgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1GIGYubG9nIC10IHQudGVtcGxhdGUKKwkpICYmCisJY29tbWl0X21zZ19pcyAiLUYgbG9nIgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDEtY29tbWl0LnNoIGIvdC90NzUwMS1jb21taXQuc2gKaW5kZXggNjNiZmM2ZC4uZTJlZjUzMiAxMDA3NTUKLS0tIGEvdC90NzUwMS1jb21taXQuc2gKKysrIGIvdC90NzUwMS1jb21taXQuc2gKQEAgLTM4LDcgKzM4LDcgQEAKIAkiZWNobyBLaW5nIG9mIHRoZSBib25nbyA+ZmlsZSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gZm9vIC1hIGZpbGUiCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMIFwKIAkidXNpbmcgcGF0aHMgd2l0aCAtLWludGVyYWN0aXZlIiBcCiAJImVjaG8gYm9uZy1vLWJvbmcgPmZpbGUgJiYKIAkhIChlY2hvIDcgfCBnaXQgY29tbWl0IC1tIGZvbyAtLWludGVyYWN0aXZlIGZpbGUpIgpAQCAtMTE5LDcgKzExOSw3IEBACiAJImVjaG8gJ2dhaycgPmZpbGUgJiYgXAogCSBnaXQgY29tbWl0IC1tICdhdXRob3InIC0tYXV0aG9yICdSdWJiZXIgRHVjayA8cmR1Y2tAY29udm95Lm9yZz4nIC1hIgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCBcCiAJImludGVyYWN0aXZlIGFkZCIgXAogCSJlY2hvIDcgfCBnaXQgY29tbWl0IC0taW50ZXJhY3RpdmUgfCBncmVwICdXaGF0IG5vdyciCiAKQEAgLTEyNyw2ICsxMjcsMjYgQEAKIAkic2hvd2luZyBjb21taXR0ZWQgcmV2aXNpb25zIiBcCiAJImdpdCByZXYtbGlzdCBIRUFEID5jdXJyZW50IgogCitjYXQgPmVkaXRvciA8PFxFT0YKKyMhL2Jpbi9zaAorc2VkIC1lICJzL2dvb2QvYmFkL2ciIDwgIiQxIiA+ICIkMS0iCittdiAiJDEtIiAiJDEiCitFT0YKK2NobW9kIDc1NSBlZGl0b3IKKworY2F0ID5tc2cgPDxFT0YKK0EgZ29vZCBjb21taXQgbWVzc2FnZS4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZWRpdG9yIG5vdCBpbnZva2VkIGlmIC1GIGlzIGdpdmVuJyAnCisJIGVjaG8gIm1vbyIgPmZpbGUgJiYKKwkgVklTVUFMPS4vZWRpdG9yIGdpdCBjb21taXQgLWEgLUYgbXNnICYmCisJIGdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMiIHwgZ3JlcCAtcSBnb29kICYmCisJIGVjaG8gInF1YWNrIiA+ZmlsZSAmJgorCSBlY2hvICJBbm90aGVyIGdvb2QgbWVzc2FnZS4iIHwgVklTVUFMPS4vZWRpdG9yIGdpdCBjb21taXQgLWEgLUYgLSAmJgorCSBnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IiVzIiB8IGdyZXAgLXEgZ29vZAorCSAnCiAjIFdlIGNvdWxkIGp1c3QgY2hlY2sgdGhlIGhlYWQgc2hhMSwgYnV0IGNoZWNraW5nIGVhY2ggY29tbWl0IG1ha2VzIGl0CiAjIGVhc2llciB0byBpc29sYXRlIGJ1Z3MuCiAKZGlmZiAtLWdpdCBhL3QvdDc1MDItY29tbWl0LnNoIGIvdC90NzUwMi1jb21taXQuc2gKaW5kZXggYWQ0MmM3OC4uNTZjZDg2NiAxMDA3NTUKLS0tIGEvdC90NzUwMi1jb21taXQuc2gKKysrIGIvdC90NzUwMi1jb21taXQuc2gKQEAgLTIzNCw3ICsyMzQsNyBAQAogIyBraWxsIC1URVJNIGNvbW1hbmQgYWRkZWQgYmVsb3cuCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnYSBTSUdURVJNIHNob3VsZCBicmVhayBsb2NrcycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBFWEVDS0VFUFNQSUQgJ2EgU0lHVEVSTSBzaG91bGQgYnJlYWsgbG9ja3MnICcKIAllY2hvID4+bmVnYXRpdmUgJiYKIAkhICIkU0hFTExfUEFUSCIgLWMgJ1wnJwogCSAgZWNobyBraWxsIC1URVJNICQkID4+IC5naXQvRkFLRV9FRElUT1IKZGlmZiAtLWdpdCBhL3QvdDc1MDMtcHJlLWNvbW1pdC1ob29rLnNoIGIvdC90NzUwMy1wcmUtY29tbWl0LWhvb2suc2gKaW5kZXggYjA2OTA5NS4uODUyOGY2NCAxMDA3NTUKLS0tIGEvdC90NzUwMy1wcmUtY29tbWl0LWhvb2suc2gKKysrIGIvdC90NzUwMy1wcmUtY29tbWl0LWhvb2suc2gKQEAgLTY5LDcgKzY5LDcgQEAKICcKIAogY2htb2QgLXggIiRIT09LIgotdGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBub24tZXhlY3V0YWJsZSBob29rJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnd2l0aCBub24tZXhlY3V0YWJsZSBob29rJyAnCiAKIAllY2hvICJjb250ZW50IiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCkBAIC03Nyw3ICs3Nyw3IEBACiAKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgd2l0aCBub24tZXhlY3V0YWJsZSBob29rJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnLS1uby12ZXJpZnkgd2l0aCBub24tZXhlY3V0YWJsZSBob29rJyAnCiAKIAllY2hvICJtb3JlIGNvbnRlbnQiID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKZGlmZiAtLWdpdCBhL3QvdDc1MDQtY29tbWl0LW1zZy1ob29rLnNoIGIvdC90NzUwNC1jb21taXQtbXNnLWhvb2suc2gKaW5kZXggNDc2ODBlNi4uMWY1M2VhOCAxMDA3NTUKLS0tIGEvdC90NzUwNC1jb21taXQtbXNnLWhvb2suc2gKKysrIGIvdC90NzUwNC1jb21taXQtbXNnLWhvb2suc2gKQEAgLTEzNiw3ICsxMzYsNyBAQAogJwogCiBjaG1vZCAteCAiJEhPT0siCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vbi1leGVjdXRhYmxlIGhvb2snICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd3aXRoIG5vbi1leGVjdXRhYmxlIGhvb2snICcKIAogCWVjaG8gImNvbnRlbnQiID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKQEAgLTE0NCw3ICsxNDQsNyBAQAogCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbm9uLWV4ZWN1dGFibGUgaG9vayAoZWRpdG9yKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3dpdGggbm9uLWV4ZWN1dGFibGUgaG9vayAoZWRpdG9yKScgJwogCiAJZWNobyAiY29udGVudCBhZ2FpbiIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgpAQCAtMTUzLDcgKzE1Myw3IEBACiAKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgd2l0aCBub24tZXhlY3V0YWJsZSBob29rJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnLS1uby12ZXJpZnkgd2l0aCBub24tZXhlY3V0YWJsZSBob29rJyAnCiAKIAllY2hvICJtb3JlIGNvbnRlbnQiID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggbm9uLWV4ZWN1dGFibGUgaG9vayAoZWRpdG9yKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJy0tbm8tdmVyaWZ5IHdpdGggbm9uLWV4ZWN1dGFibGUgaG9vayAoZWRpdG9yKScgJwogCiAJZWNobyAiZXZlbiBtb3JlIGNvbnRlbnQiID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKZGlmZiAtLWdpdCBhL3QvdDc1MDItc3RhdHVzLnNoIGIvdC90NzUwOC1zdGF0dXMuc2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHQvdDc1MDItc3RhdHVzLnNoCnJlbmFtZSB0byB0L3Q3NTA4LXN0YXR1cy5zaApkaWZmIC0tZ2l0IGEvdC90NzYxMC1tZXJnZXRvb2wuc2ggYi90L3Q3NjEwLW1lcmdldG9vbC5zaAppbmRleCAwOWZhNWYxLi5lNzY4YzNlIDEwMDc1NQotLS0gYS90L3Q3NjEwLW1lcmdldG9vbC5zaAorKysgYi90L3Q3NjEwLW1lcmdldG9vbC5zaApAQCAtOSwzOCArOSw4MSBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAorIyBBbGwgdGhlIG1lcmdldG9vbCB0ZXN0IHdvcmsgYnkgY2hlY2tpbmcgb3V0IGEgdGVtcG9yYXJ5IGJyYW5jaCBiYXNlZAorIyBvZmYgJ2JyYW5jaDEnIGFuZCB0aGVuIG1lcmdpbmcgaW4gbWFzdGVyIGFuZCBjaGVja2luZyB0aGUgcmVzdWx0cyBvZgorIyBydW5uaW5nIG1lcmdldG9vbAorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJwogICAgIGVjaG8gbWFzdGVyID5maWxlMSAmJgotICAgIGdpdCBhZGQgZmlsZTEgJiYKKyAgICBta2RpciBzdWJkaXIgJiYKKyAgICBlY2hvIG1hc3RlciBzdWIgPnN1YmRpci9maWxlMyAmJgorICAgIGdpdCBhZGQgZmlsZTEgc3ViZGlyL2ZpbGUzICYmCiAgICAgZ2l0IGNvbW1pdCAtbSAiYWRkZWQgZmlsZTEiICYmCisKICAgICBnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMSBtYXN0ZXIgJiYKICAgICBlY2hvIGJyYW5jaDEgY2hhbmdlID5maWxlMSAmJgogICAgIGVjaG8gYnJhbmNoMSBuZXdmaWxlID5maWxlMiAmJgotICAgIGdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKyAgICBlY2hvIGJyYW5jaDEgc3ViID5zdWJkaXIvZmlsZTMgJiYKKyAgICBnaXQgYWRkIGZpbGUxIGZpbGUyIHN1YmRpci9maWxlMyAmJgogICAgIGdpdCBjb21taXQgLW0gImJyYW5jaDEgY2hhbmdlcyIgJiYKLSAgICBnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBtYXN0ZXIgJiYKLSAgICBlY2hvIGJyYW5jaDIgY2hhbmdlID5maWxlMSAmJgotICAgIGVjaG8gYnJhbmNoMiBuZXdmaWxlID5maWxlMiAmJgotICAgIGdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKLSAgICBnaXQgY29tbWl0IC1tICJicmFuY2gyIGNoYW5nZXMiICYmCisKICAgICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCiAgICAgZWNobyBtYXN0ZXIgdXBkYXRlZCA+ZmlsZTEgJiYKICAgICBlY2hvIG1hc3RlciBuZXcgPmZpbGUyICYmCi0gICAgZ2l0IGFkZCBmaWxlMSBmaWxlMiAmJgotICAgIGdpdCBjb21taXQgLW0gIm1hc3RlciB1cGRhdGVzIgorICAgIGVjaG8gbWFzdGVyIG5ldyBzdWIgPnN1YmRpci9maWxlMyAmJgorICAgIGdpdCBhZGQgZmlsZTEgZmlsZTIgc3ViZGlyL2ZpbGUzICYmCisgICAgZ2l0IGNvbW1pdCAtbSAibWFzdGVyIHVwZGF0ZXMiICYmCisKKyAgICBnaXQgY29uZmlnIG1lcmdlLnRvb2wgbXl0b29sICYmCisgICAgZ2l0IGNvbmZpZyBtZXJnZXRvb2wubXl0b29sLmNtZCAiY2F0IFwiXCRSRU1PVEVcIiA+XCJcJE1FUkdFRFwiIiAmJgorICAgIGdpdCBjb25maWcgbWVyZ2V0b29sLm15dG9vbC50cnVzdEV4aXRDb2RlIHRydWUKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VzdG9tIG1lcmdldG9vbCcgJwotICAgIGdpdCBjb25maWcgbWVyZ2UudG9vbCBteXRvb2wgJiYKLSAgICBnaXQgY29uZmlnIG1lcmdldG9vbC5teXRvb2wuY21kICJjYXQgXCJcJFJFTU9URVwiID5cIlwkTUVSR0VEXCIiICYmCi0gICAgZ2l0IGNvbmZpZyBtZXJnZXRvb2wubXl0b29sLnRydXN0RXhpdENvZGUgdHJ1ZSAmJgotCWdpdCBjaGVja291dCBicmFuY2gxICYmCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRlc3QxIGJyYW5jaDEgJiYKICAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyID4vZGV2L251bGwgMj4mMSAmJgotICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMT4vZGV2L251bGwgMj4mMSApICYmCi0gICAgKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUyPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgc3ViZGlyL2ZpbGUzID4vZGV2L251bGwgMj4mMSApICYmCiAgICAgdGVzdCAiJChjYXQgZmlsZTEpIiA9ICJtYXN0ZXIgdXBkYXRlZCIgJiYKICAgICB0ZXN0ICIkKGNhdCBmaWxlMikiID0gIm1hc3RlciBuZXciICYmCi0JZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSByZXNvbHZlZCB3aXRoIG1lcmdldG9vbCIKKyAgICB0ZXN0ICIkKGNhdCBzdWJkaXIvZmlsZTMpIiA9ICJtYXN0ZXIgbmV3IHN1YiIgJiYKKyAgICBnaXQgY29tbWl0IC1tICJicmFuY2gxIHJlc29sdmVkIHdpdGggbWVyZ2V0b29sIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgY3JsZicgJworICAgIGdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRlc3QyIGJyYW5jaDEKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyID4vZGV2L251bGwgMj4mMSAmJgorICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMiA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIvZmlsZTMgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICB0ZXN0ICIkKHByaW50ZiB4IHwgY2F0IGZpbGUxIC0pIiA9ICIkKHByaW50ZiAibWFzdGVyIHVwZGF0ZWRcclxueCIpIiAmJgorICAgIHRlc3QgIiQocHJpbnRmIHggfCBjYXQgZmlsZTIgLSkiID0gIiQocHJpbnRmICJtYXN0ZXIgbmV3XHJcbngiKSIgJiYKKyAgICB0ZXN0ICIkKHByaW50ZiB4IHwgY2F0IHN1YmRpci9maWxlMyAtKSIgPSAiJChwcmludGYgIm1hc3RlciBuZXcgc3ViXHJcbngiKSIgJiYKKyAgICBnaXQgY29tbWl0IC1tICJicmFuY2gxIHJlc29sdmVkIHdpdGggbWVyZ2V0b29sIC0gYXV0b2NybGYiICYmCisgICAgZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGZhbHNlICYmCisgICAgZ2l0IHJlc2V0IC0taGFyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgaW4gc3ViZGlyJyAnCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRlc3QzIGJyYW5jaDEKKyAgICBjZCBzdWJkaXIgJiYgKAorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgPi9kZXYvbnVsbCAyPiYxICYmCisgICAgKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUzID4vZGV2L251bGwgMj4mMSApICYmCisgICAgdGVzdCAiJChjYXQgZmlsZTMpIiA9ICJtYXN0ZXIgbmV3IHN1YiIgKQorJworCisjIFdlIGNhbid0IG1lcmdlIGZpbGVzIGZyb20gcGFyZW50IGRpcmVjdG9yaWVzIHdoZW4gcnVubmluZyBtZXJnZXRvb2wKKyMgZnJvbSBhIHN1YmRpci4gSXMgdGhpcyBhIGJ1Zz8KKyMKKyN0ZXN0X2V4cGVjdF9mYWlsdXJlICdtZXJnZXRvb2wgaW4gc3ViZGlyJyAnCisjICAgIGNkIHN1YmRpciAmJiAoCisjICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAuLi9maWxlMSA+L2Rldi9udWxsIDI+JjEgKSAmJgorIyAgICAoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLi4vZmlsZTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyMgICAgdGVzdCAiJChjYXQgLi4vZmlsZTEpIiA9ICJtYXN0ZXIgdXBkYXRlZCIgJiYKKyMgICAgdGVzdCAiJChjYXQgLi4vZmlsZTIpIiA9ICJtYXN0ZXIgbmV3IiAmJgorIyAgICBnaXQgY29tbWl0IC1tICJicmFuY2gxIHJlc29sdmVkIHdpdGggbWVyZ2V0b29sIC0gc3ViZGlyIiApCisjJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc3MDAtcmVwYWNrLnNoIGIvdC90NzcwMC1yZXBhY2suc2gKaW5kZXggOWNlNTQ2ZS4uZjRhYTA1NCAxMDA3NTUKLS0tIGEvdC90NzcwMC1yZXBhY2suc2gKKysrIGIvdC90NzcwMC1yZXBhY2suc2gKQEAgLTY5LDYgKzY5LDI1IEBACiAJZG9uZQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrZWQgb2JzIGluIGFsdCBPREIgYXJlIHJlcGFja2VkIHdoZW4gbG9jYWwgcmVwbyBoYXMgcGFja3MnICcKKwlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCisJZWNobyBuZXdfY29udGVudCA+PiBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tIG1vcmVfY29udGVudCAmJgorCWdpdCByZXBhY2sgJiYKKwlnaXQgcmVwYWNrIC1hIC1kICYmCisJbXlpZHg9JChscyAtMSAuZ2l0L29iamVjdHMvcGFjay8qLmlkeCkgJiYKKwl0ZXN0IC1mICIkbXlpZHgiICYmCisJZm9yIHAgaW4gYWx0X29iamVjdHMvcGFjay8qLmlkeDsgZG8KKwkJZ2l0IHZlcmlmeS1wYWNrIC12ICRwIHwgc2VkIC1uIC1lICIvXlswLTlhLWZdXHs0MFx9L3AiCisJZG9uZSB8IHdoaWxlIHJlYWQgc2hhMSByZXN0OyBkbworCQlpZiAhICggZ2l0IHZlcmlmeS1wYWNrIC12ICRteWlkeCB8IGdyZXAgIl4kc2hhMSIgKTsgdGhlbgorCQkJZWNobyAiTWlzc2luZyBvYmplY3QgaW4gbG9jYWwgcGFjazogJHNoYTEiCisJCQlyZXR1cm4gMQorCQlmaQorCWRvbmUKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFja2VkIG9icyBpbiBhbHRlcm5hdGUgT0RCIGtlcHQgcGFjayBhcmUgcmVwYWNrZWQnICcKIAkjIHN3YXAgdGhlIC5rZWVwIHNvIHRoZSBjb21taXQgb2JqZWN0IGlzIGluIHRoZSBwYWNrIHdpdGggLmtlZXAKIAlmb3IgcCBpbiBhbHRfb2JqZWN0cy9wYWNrLyoucGFjawpAQCAtMTMwLDUgKzE0OSwxNyBAQAogCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93ICRjc2hhMQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvYmplY3RzIG1hZGUgdW5yZWFjaGFibGUgYnkgZ3JhZnRzIG9ubHkgYXJlIGtlcHQnICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImNvbW1pdCA0IiAmJgorCUgwPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCUgxPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwlIMj0kKGdpdCByZXYtcGFyc2UgSEVBRF5eKSAmJgorCWVjaG8gIiRIMCAkSDIiID4gLmdpdC9pbmZvL2dyYWZ0cyAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyAtLWV4cGlyZS11bnJlYWNoYWJsZT1ub3cgLS1hbGwgJiYKKwlnaXQgcmVwYWNrIC1hIC1kICYmCisJZ2l0IGNhdC1maWxlIC10ICRIMQorCScKKwogdGVzdF9kb25lCiAKZGlmZiAtLWdpdCBhL3QvdDc3MDEtcmVwYWNrLXVucGFjay11bnJlYWNoYWJsZS5zaCBiL3QvdDc3MDEtcmVwYWNrLXVucGFjay11bnJlYWNoYWJsZS5zaAppbmRleCA2M2E4MjI1Li41YmFiZGYyIDEwMDc1NQotLS0gYS90L3Q3NzAxLXJlcGFjay11bnBhY2stdW5yZWFjaGFibGUuc2gKKysrIGIvdC90NzcwMS1yZXBhY2stdW5wYWNrLXVucmVhY2hhYmxlLnNoCkBAIC01MCwxMiArNTAsMTAgQEAKIAogY29tcGFyZV9tdGltZXMgKCkKIHsKLQlwZXJsIC1lICdteSAkcmVmZXJlbmNlID0gc2hpZnQ7Ci0JCSBmb3JlYWNoIG15ICRmaWxlIChAQVJHVikgewotCQkJZXhpdCgxKSB1bmxlc3MoLWYgJGZpbGUgJiYgLU0gJGZpbGUgPT0gLU0gJHJlZmVyZW5jZSk7Ci0JCSB9Ci0JCSBleGl0KDApOwotCQknIC0tICIkQCIKKwlyZWFkIHRyZWYgcmVzdCAmJgorCXdoaWxlIHJlYWQgdCByZXN0OyBkbworCQl0ZXN0ICIkdHJlZiIgPSAiJHQiIHx8IGJyZWFrCisJZG9uZQogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctQSB3aXRob3V0IC1kIG9wdGlvbiBsZWF2ZXMgdW5yZWFjaGFibGUgb2JqZWN0cyBwYWNrZWQnICcKQEAgLTg3LDcgKzg1LDkgQEAKIAl0bXBwYWNrPSIuZ2l0L29iamVjdHMvcGFjay90bXBfcGFjayIgJiYKIAlsbiAiJHBhY2tmaWxlIiAiJHRtcHBhY2siICYmCiAJZ2l0IHJlcGFjayAtQSAtbCAtZCAmJgotCWNvbXBhcmVfbXRpbWVzICIkdG1wcGFjayIgIiRmc2hhMXBhdGgiICIkY3NoYTFwYXRoIiAiJHRzaGExcGF0aCIKKwl0ZXN0LWNobXRpbWUgLXYgKzAgIiR0bXBwYWNrIiAiJGZzaGExcGF0aCIgIiRjc2hhMXBhdGgiICIkdHNoYTFwYXRoIiBcCisJCT4gbXRpbWVzICYmCisJY29tcGFyZV9tdGltZXMgPCBtdGltZXMKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3ODAwLWRpZmZ0b29sLnNoIGIvdC90NzgwMC1kaWZmdG9vbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYmRjY2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzgwMC1kaWZmdG9vbC5zaApAQCAtMCwwICsxLDIxNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBEYXZpZCBBZ3VpbGFyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1kaWZmdG9vbAorCitUZXN0aW5nIGJhc2ljIGRpZmYgdG9vbCBpbnZvY2F0aW9uCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCXNheSAnc2tpcHBpbmcgZGlmZnRvb2wgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKK3JlbW92ZV9jb25maWdfdmFycygpCit7CisJIyBVbnNldCBhbGwgY29uZmlnIHZhcmlhYmxlcyB1c2VkIGJ5IGdpdC1kaWZmdG9vbAorCWdpdCBjb25maWcgLS11bnNldCBkaWZmLnRvb2wKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZnRvb2wudGVzdC10b29sLmNtZAorCWdpdCBjb25maWcgLS11bnNldCBkaWZmdG9vbC5wcm9tcHQKKwlnaXQgY29uZmlnIC0tdW5zZXQgbWVyZ2UudG9vbAorCWdpdCBjb25maWcgLS11bnNldCBtZXJnZXRvb2wudGVzdC10b29sLmNtZAorCXJldHVybiAwCit9CisKK3Jlc3RvcmVfdGVzdF9kZWZhdWx0cygpCit7CisJIyBSZXN0b3JlcyB0aGUgdGVzdCBkZWZhdWx0cyB1c2VkIGJ5IHNldmVyYWwgdGVzdHMKKwlyZW1vdmVfY29uZmlnX3ZhcnMKKwl1bnNldCBHSVRfRElGRl9UT09MCisJdW5zZXQgR0lUX01FUkdFX1RPT0wKKwl1bnNldCBHSVRfRElGRlRPT0xfUFJPTVBUCisJdW5zZXQgR0lUX0RJRkZUT09MX05PX1BST01QVAorCWdpdCBjb25maWcgZGlmZi50b29sIHRlc3QtdG9vbCAmJgorCWdpdCBjb25maWcgZGlmZnRvb2wudGVzdC10b29sLmNtZCAnY2F0ICRMT0NBTCcKK30KKworcHJvbXB0X2dpdmVuKCkKK3sKKwlwcm9tcHQ9IiQxIgorCXRlc3QgIiRwcm9tcHQiID0gIkhpdCByZXR1cm4gdG8gbGF1bmNoICd0ZXN0LXRvb2wnOiBicmFuY2giCit9CisKKyMgQ3JlYXRlIGEgZmlsZSBvbiBtYXN0ZXIgYW5kIGNoYW5nZSBpdCBvbiBicmFuY2gKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBtYXN0ZXIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCBmaWxlIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCBtYXN0ZXIgJiYKKwllY2hvIGJyYW5jaCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImJyYW5jaCBjaGFuZ2VkIGZpbGUiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCisjIENvbmZpZ3VyZSBhIGN1c3RvbSBkaWZmdG9vbC48dG9vbD4uY21kIGFuZCB1c2UgaXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1c3RvbSBjb21tYW5kcycgJworCXJlc3RvcmVfdGVzdF9kZWZhdWx0cyAmJgorCWdpdCBjb25maWcgZGlmZnRvb2wudGVzdC10b29sLmNtZCAiY2F0IFwkUkVNT1RFIiAmJgorCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBicmFuY2gpICYmCisJdGVzdCAiJGRpZmYiID0gIm1hc3RlciIgJiYKKworCXJlc3RvcmVfdGVzdF9kZWZhdWx0cyAmJgorCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgYnJhbmNoKSAmJgorCXRlc3QgIiRkaWZmIiA9ICJicmFuY2giCisnCisKKyMgRW5zdXJlcyB0aGF0IGdpdC1kaWZmdG9vbCBpZ25vcmVzIGJvZ3VzIC0tdG9vbCB2YWx1ZXMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIGlnbm9yZXMgYmFkIC0tdG9vbCB2YWx1ZXMnICcKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tdG9vbD1ib2d1cy10b29sIGJyYW5jaCkKKwl0ZXN0ICIkPyIgPSAxICYmCisJdGVzdCAiJGRpZmYiID0gIiIKKycKKworIyBTcGVjaWZ5IHRoZSBkaWZmIHRvb2wgdXNpbmcgJEdJVF9ESUZGX1RPT0wKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESUZGX1RPT0wgdmFyaWFibGUnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZi50b29sCisJR0lUX0RJRkZfVE9PTD10ZXN0LXRvb2wgJiYKKwlleHBvcnQgR0lUX0RJRkZfVE9PTCAmJgorCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBicmFuY2gpICYmCisJdGVzdCAiJGRpZmYiID0gImJyYW5jaCIgJiYKKworCXJlc3RvcmVfdGVzdF9kZWZhdWx0cworJworCisjIFRlc3QgdGhlICRHSVRfKl9UT09MIHZhcmlhYmxlcyBhbmQgZW5zdXJlCisjIHRoYXQgJEdJVF9ESUZGX1RPT0wgYWx3YXlzIHdpbnMgdW5sZXNzIC0tdG9vbCBpcyBzcGVjaWZpZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESUZGX1RPT0wgb3ZlcnJpZGVzJyAnCisJZ2l0IGNvbmZpZyBkaWZmLnRvb2wgYm9ndXMtdG9vbCAmJgorCWdpdCBjb25maWcgbWVyZ2UudG9vbCBib2d1cy10b29sICYmCisKKwlHSVRfTUVSR0VfVE9PTD10ZXN0LXRvb2wgJiYKKwlleHBvcnQgR0lUX01FUkdFX1RPT0wgJiYKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSAiYnJhbmNoIiAmJgorCXVuc2V0IEdJVF9NRVJHRV9UT09MICYmCisKKwlHSVRfTUVSR0VfVE9PTD1ib2d1cy10b29sICYmCisJR0lUX0RJRkZfVE9PTD10ZXN0LXRvb2wgJiYKKwlleHBvcnQgR0lUX01FUkdFX1RPT0wgJiYKKwlleHBvcnQgR0lUX0RJRkZfVE9PTCAmJgorCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBicmFuY2gpICYmCisJdGVzdCAiJGRpZmYiID0gImJyYW5jaCIgJiYKKworCUdJVF9ESUZGX1RPT0w9Ym9ndXMtdG9vbCAmJgorCWV4cG9ydCBHSVRfRElGRl9UT09MICYmCisKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tdG9vbD10ZXN0LXRvb2wgYnJhbmNoKSAmJgorCXRlc3QgIiRkaWZmIiA9ICJicmFuY2giICYmCisKKwlyZXN0b3JlX3Rlc3RfZGVmYXVsdHMKKycKKworIyBUZXN0IHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIC0tbm8tcHJvbXB0IHRvIGRpZmZ0b29sCisjIHdoZW4gJEdJVF9ESUZGVE9PTF9OT19QUk9NUFQgaXMgdHJ1ZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0RJRkZUT09MX05PX1BST01QVCB2YXJpYWJsZScgJworCUdJVF9ESUZGVE9PTF9OT19QUk9NUFQ9dHJ1ZSAmJgorCWV4cG9ydCBHSVRfRElGRlRPT0xfTk9fUFJPTVBUICYmCisKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSAiYnJhbmNoIiAmJgorCisJcmVzdG9yZV90ZXN0X2RlZmF1bHRzCisnCisKKyMgZ2l0LWRpZmZ0b29sIHN1cHBvcnRzIHRoZSBkaWZmdG9vbC5wcm9tcHQgdmFyaWFibGUuCisjIFRlc3QgdGhhdCBHSVRfRElGRlRPT0xfUFJPTVBUIGNhbiBvdmVycmlkZSBkaWZmdG9vbC5wcm9tcHQgPSBmYWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0RJRkZUT09MX1BST01QVCB2YXJpYWJsZScgJworCWdpdCBjb25maWcgZGlmZnRvb2wucHJvbXB0IGZhbHNlICYmCisJR0lUX0RJRkZUT09MX1BST01QVD10cnVlICYmCisJZXhwb3J0IEdJVF9ESUZGVE9PTF9QUk9NUFQgJiYKKworCXByb21wdD0kKGVjaG8gfCBnaXQgZGlmZnRvb2wgLS1wcm9tcHQgYnJhbmNoIHwgdGFpbCAtMSkgJiYKKwlwcm9tcHRfZ2l2ZW4gIiRwcm9tcHQiICYmCisKKwlyZXN0b3JlX3Rlc3RfZGVmYXVsdHMKKycKKworIyBUZXN0IHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIC0tbm8tcHJvbXB0IHdoZW4gZGlmZnRvb2wucHJvbXB0IGlzIGZhbHNlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbC5wcm9tcHQgY29uZmlnIHZhcmlhYmxlIGlzIGZhbHNlJyAnCisJZ2l0IGNvbmZpZyBkaWZmdG9vbC5wcm9tcHQgZmFsc2UgJiYKKworCWRpZmY9JChnaXQgZGlmZnRvb2wgYnJhbmNoKSAmJgorCXRlc3QgIiRkaWZmIiA9ICJicmFuY2giICYmCisKKwlyZXN0b3JlX3Rlc3RfZGVmYXVsdHMKKycKKworIyBUZXN0IHRoYXQgdGhlIC15IGZsYWcgY2FuIG92ZXJyaWRlIGRpZmZ0b29sLnByb21wdCA9IHRydWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sLnByb21wdCBjYW4gb3ZlcnJpZGRlbiB3aXRoIC15JyAnCisJZ2l0IGNvbmZpZyBkaWZmdG9vbC5wcm9tcHQgdHJ1ZSAmJgorCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAteSBicmFuY2gpICYmCisJdGVzdCAiJGRpZmYiID0gImJyYW5jaCIgJiYKKworCXJlc3RvcmVfdGVzdF9kZWZhdWx0cworJworCisjIFRlc3QgdGhhdCB0aGUgLS1wcm9tcHQgZmxhZyBjYW4gb3ZlcnJpZGUgZGlmZnRvb2wucHJvbXB0ID0gZmFsc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sLnByb21wdCBjYW4gb3ZlcnJpZGRlbiB3aXRoIC0tcHJvbXB0JyAnCisJZ2l0IGNvbmZpZyBkaWZmdG9vbC5wcm9tcHQgZmFsc2UgJiYKKworCXByb21wdD0kKGVjaG8gfCBnaXQgZGlmZnRvb2wgLS1wcm9tcHQgYnJhbmNoIHwgdGFpbCAtMSkgJiYKKwlwcm9tcHRfZ2l2ZW4gIiRwcm9tcHQiICYmCisKKwlyZXN0b3JlX3Rlc3RfZGVmYXVsdHMKKycKKworIyBUZXN0IHRoYXQgdGhlIGxhc3QgZmxhZyBwYXNzZWQgb24gdGhlIGNvbW1hbmQtbGluZSB3aW5zCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCBsYXN0IGZsYWcgd2lucycgJworCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1wcm9tcHQgLS1uby1wcm9tcHQgYnJhbmNoKSAmJgorCXRlc3QgIiRkaWZmIiA9ICJicmFuY2giICYmCisKKwlyZXN0b3JlX3Rlc3RfZGVmYXVsdHMgJiYKKworCXByb21wdD0kKGVjaG8gfCBnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1wcm9tcHQgYnJhbmNoIHwgdGFpbCAtMSkgJiYKKwlwcm9tcHRfZ2l2ZW4gIiRwcm9tcHQiICYmCisKKwlyZXN0b3JlX3Rlc3RfZGVmYXVsdHMKKycKKworIyBnaXQtZGlmZnRvb2wgZmFsbHMgYmFjayB0byBnaXQtbWVyZ2V0b29sIGNvbmZpZyB2YXJpYWJsZXMKKyMgc28gdGVzdCB0aGF0IGJlaGF2aW9yIGhlcmUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sICsgbWVyZ2V0b29sIGNvbmZpZyB2YXJpYWJsZXMnICcKKwlyZW1vdmVfY29uZmlnX3ZhcnMKKwlnaXQgY29uZmlnIG1lcmdlLnRvb2wgdGVzdC10b29sICYmCisJZ2l0IGNvbmZpZyBtZXJnZXRvb2wudGVzdC10b29sLmNtZCAiY2F0IFwkTE9DQUwiICYmCisKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSAiYnJhbmNoIiAmJgorCisJIyBzZXQgbWVyZ2UudG9vbCB0byBzb21ldGhpbmcgYm9ndXMsIGRpZmYudG9vbCB0byB0ZXN0LXRvb2wKKwlnaXQgY29uZmlnIG1lcmdlLnRvb2wgYm9ndXMtdG9vbCAmJgorCWdpdCBjb25maWcgZGlmZi50b29sIHRlc3QtdG9vbCAmJgorCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBicmFuY2gpICYmCisJdGVzdCAiJGRpZmYiID0gImJyYW5jaCIgJiYKKworCXJlc3RvcmVfdGVzdF9kZWZhdWx0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbC48dG9vbD4ucGF0aCcgJworCWdpdCBjb25maWcgZGlmZnRvb2wudGtkaWZmLnBhdGggZWNobyAmJgorCWRpZmY9JChnaXQgZGlmZnRvb2wgLS10b29sPXRrZGlmZiAtLW5vLXByb21wdCBicmFuY2gpICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmZ0b29sLnRrZGlmZi5wYXRoICYmCisJbGluZXM9JChlY2hvICIkZGlmZiIgfCBncmVwIGZpbGUgfCB3YyAtbCkgJiYKKwl0ZXN0ICIkbGluZXMiIC1lcSAxCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAwMy1ibGFtZS5zaCBiL3QvdDgwMDMtYmxhbWUuc2gKaW5kZXggOTY2YmIwYS4uMTNjMjVmMSAxMDA3NTUKLS0tIGEvdC90ODAwMy1ibGFtZS5zaAorKysgYi90L3Q4MDAzLWJsYW1lLnNoCkBAIC0xMjksNCArMTI5LDE5IEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgcGF0aCB0aGF0IHVzZWQgdG8gYmUgYSBkaXJlY3RvcnknICcKKwlta2RpciBwYXRoICYmCisJZWNobyBBIEEgQSBBIEEgPnBhdGgvZmlsZSAmJgorCWVjaG8gQiBCIEIgQiBCID5wYXRoL2VsaWYgJiYKKwlnaXQgYWRkIHBhdGggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJwYXRoIHdhcyBhIGRpcmVjdG9yeSIgJiYKKwlybSAtZnIgcGF0aCAmJgorCWVjaG8gQSBBIEEgQSBBID5wYXRoICYmCisJZ2l0IGFkZCBwYXRoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSIgJiYKKwlnaXQgYmxhbWUgSEVBRF4uLiAtLSBwYXRoCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAwNS1ibGFtZS1pMThuLnNoIGIvdC90ODAwNS1ibGFtZS1pMThuLnNoCmluZGV4IDQ0NzBhOTIuLmNiMzkwNTUgMTAwNzU1Ci0tLSBhL3QvdDgwMDUtYmxhbWUtaTE4bi5zaAorKysgYi90L3Q4MDA1LWJsYW1lLWkxOG4uc2gKQEAgLTQsNyArNCw3IEBACiAuIC4vdGVzdC1saWIuc2gKIAogLiAiJFRFU1RfRElSRUNUT1JZIi90ODAwNS91dGY4LnR4dAotLiAiJFRFU1RfRElSRUNUT1JZIi90ODAwNS9jcDEyNTEudHh0CisuICIkVEVTVF9ESVJFQ1RPUlkiL3Q4MDA1L2V1Yy1qYXBhbi50eHQKIC4gIiRURVNUX0RJUkVDVE9SWSIvdDgwMDUvc2ppcy50eHQKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGhlIHJlcG9zaXRvcnknICcKQEAgLTEzLDE0ICsxMywxNCBAQAogCWdpdCBhZGQgZmlsZSAmJgogCWdpdCBjb21taXQgLS1hdXRob3IgIiRVVEY4X05BTUUgPHV0ZjhAbG9jYWxob3N0PiIgLW0gIiRVVEY4X01TRyIgJiYKIAotCWVjaG8gIkNQMTI1MSBMSU5FIiA+PiBmaWxlICYmCisJZWNobyAiRVVDLUpBUEFOIExJTkUiID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKLQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgY3AxMjUxICYmCi0JZ2l0IGNvbW1pdCAtLWF1dGhvciAiJENQMTI1MV9OQU1FIDxjcDEyNTFAbG9jYWxob3N0PiIgLW0gIiRDUDEyNTFfTVNHIiAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBldWNKUCAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIiRFVUNfSkFQQU5fTkFNRSA8ZXVjLWphcGFuQGxvY2FsaG9zdD4iIC1tICIkRVVDX0pBUEFOX01TRyIgJiYKIAogCWVjaG8gIlNKSVMgTElORSIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgotCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBzaGlmdC1qaXMgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgU0pJUyAmJgogCWdpdCBjb21taXQgLS1hdXRob3IgIiRTSklTX05BTUUgPHNqaXNAbG9jYWxob3N0PiIgLW0gIiRTSklTX01TRyIKICcKIApAQCAtMzYsMjQgKzM2LDI0IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknYmxhbWUgcmVzcGVjdHMgaTE4bi5jb21taXRlbmNvZGluZycgJwogCWdpdCBibGFtZSAtLWluY3JlbWVudGFsIGZpbGUgfCBcCi0JCWdyZXAgIl5cKGF1dGhvclx8c3VtbWFyeVwpICIgPiBhY3R1YWwgJiYKKwkJZWdyZXAgIl4oYXV0aG9yfHN1bW1hcnkpICIgPiBhY3R1YWwgJiYKIAl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQKICcKIAogY2F0ID5leHBlY3RlZCA8PEVPRgotYXV0aG9yICRDUDEyNTFfTkFNRQotc3VtbWFyeSAkQ1AxMjUxX01TRwotYXV0aG9yICRDUDEyNTFfTkFNRQotc3VtbWFyeSAkQ1AxMjUxX01TRwotYXV0aG9yICRDUDEyNTFfTkFNRQotc3VtbWFyeSAkQ1AxMjUxX01TRworYXV0aG9yICRFVUNfSkFQQU5fTkFNRQorc3VtbWFyeSAkRVVDX0pBUEFOX01TRworYXV0aG9yICRFVUNfSkFQQU5fTkFNRQorc3VtbWFyeSAkRVVDX0pBUEFOX01TRworYXV0aG9yICRFVUNfSkFQQU5fTkFNRQorc3VtbWFyeSAkRVVDX0pBUEFOX01TRwogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdibGFtZSByZXNwZWN0cyBpMThuLmxvZ291dHB1dGVuY29kaW5nJyAnCi0JZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIGNwMTI1MSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBldWNKUCAmJgogCWdpdCBibGFtZSAtLWluY3JlbWVudGFsIGZpbGUgfCBcCi0JCWdyZXAgIl5cKGF1dGhvclx8c3VtbWFyeVwpICIgPiBhY3R1YWwgJiYKKwkJZWdyZXAgIl4oYXV0aG9yfHN1bW1hcnkpICIgPiBhY3R1YWwgJiYKIAl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQKICcKIApAQCAtNjcsMTcgKzY3LDE3IEBACiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0JJ2JsYW1lIHJlc3BlY3RzIC0tZW5jb2Rpbmc9dXRmLTgnICcKLQlnaXQgYmxhbWUgLS1pbmNyZW1lbnRhbCAtLWVuY29kaW5nPXV0Zi04IGZpbGUgfCBcCi0JCWdyZXAgIl5cKGF1dGhvclx8c3VtbWFyeVwpICIgPiBhY3R1YWwgJiYKKwknYmxhbWUgcmVzcGVjdHMgLS1lbmNvZGluZz1VVEYtOCcgJworCWdpdCBibGFtZSAtLWluY3JlbWVudGFsIC0tZW5jb2Rpbmc9VVRGLTggZmlsZSB8IFwKKwkJZWdyZXAgIl4oYXV0aG9yfHN1bW1hcnkpICIgPiBhY3R1YWwgJiYKIAl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQKICcKIAogY2F0ID5leHBlY3RlZCA8PEVPRgogYXV0aG9yICRTSklTX05BTUUKIHN1bW1hcnkgJFNKSVNfTVNHCi1hdXRob3IgJENQMTI1MV9OQU1FCi1zdW1tYXJ5ICRDUDEyNTFfTVNHCithdXRob3IgJEVVQ19KQVBBTl9OQU1FCitzdW1tYXJ5ICRFVUNfSkFQQU5fTVNHCiBhdXRob3IgJFVURjhfTkFNRQogc3VtbWFyeSAkVVRGOF9NU0cKIEVPRgpAQCAtODUsNyArODUsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2JsYW1lIHJlc3BlY3RzIC0tZW5jb2Rpbmc9bm9uZScgJwogCWdpdCBibGFtZSAtLWluY3JlbWVudGFsIC0tZW5jb2Rpbmc9bm9uZSBmaWxlIHwgXAotCQlncmVwICJeXChhdXRob3JcfHN1bW1hcnlcKSAiID4gYWN0dWFsICYmCisJCWVncmVwICJeKGF1dGhvcnxzdW1tYXJ5KSAiID4gYWN0dWFsICYmCiAJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdGVkCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDgwMDUvY3AxMjUxLnR4dCBiL3QvdDgwMDUvY3AxMjUxLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U0MWU5OC4uMDAwMDAwMAotLS0gYS90L3Q4MDA1L2NwMTI1MS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLUNQMTI1MV9OQU1FPSLI4uDtIM/l8vDu4uj3INHo5O7w7uIiCi1DUDEyNTFfTVNHPSLS5fHy7uLu5SDx7u7h+eXt6OUiCmRpZmYgLS1naXQgYS90L3Q4MDA1L2V1Yy1qYXBhbi50eHQgYi90L3Q4MDA1L2V1Yy1qYXBhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg4ZjA0MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDgwMDUvZXVjLWphcGFuLnR4dApAQCAtMCwwICsxLDIgQEAKK0VVQ19KQVBBTl9OQU1FPSK7s8XEIMLAz7oiCitFVUNfSkFQQU5fTVNHPSKl1qXsobyl4KTOpcaluaXIpMekuaGjIgpkaWZmIC0tZ2l0IGEvdC90ODAwNS9pc284ODU5LTUudHh0IGIvdC90ODAwNS9pc284ODU5LTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNGI4MGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q4MDA1L2lzbzg4NTktNS50eHQKQEAgLTAsMCArMSwyIEBACitJU084ODU5XzVfTkFNRT0iuNLQ3SC/1eLg3tLY5yDB2NTe4N7SIgorSVNPODg1OV81X01TRz0iwtXh4t7S3tUg4d7e0enV3djVIgpkaWZmIC0tZ2l0IGEvdC90ODAwNS9zamlzLnR4dCBiL3QvdDgwMDUvc2ppcy50eHQKaW5kZXggMmNjZmJhZC4uYmJkZWZlYSAxMDA2NDQKLS0tIGEvdC90ODAwNS9zamlzLnR4dAorKysgYi90L3Q4MDA1L3NqaXMudHh0CkBAIC0xLDIgKzEsMiBAQAotU0pJU19OQU1FPSKESYRyhHCEfiCEUIR1hISEgoSAhHKEeYSJIIRShHmEdISAhIKEgIRyIgotU0pJU19NU0c9IoRThHWEg4SEhICEcoSAhHUghIOEgISAhHGEi4R1hH6EeYR1IgorU0pJU19OQU1FPSKOUpNjIJG+mFkiCitTSklTX01TRz0ig3WDjIFbg4CCzINlg1iDZ4LFgreBQiIKZGlmZiAtLWdpdCBhL3QvdDgwMDUvdXRmOC50eHQgYi90L3Q4MDA1L3V0ZjgudHh0CmluZGV4IGY0NmNmYzUuLjRkMDBkYmUgMTAwNjQ0Ci0tLSBhL3QvdDgwMDUvdXRmOC50eHQKKysrIGIvdC90ODAwNS91dGY4LnR4dApAQCAtMSwyICsxLDIgQEAKLVVURjhfTkFNRT0i0JjQstCw0L0g0J/QtdGC0YDQvtCy0LjRhyDQodC40LTQvtGA0L7QsiIKLVVURjhfTVNHPSLQotC10YHRgtC+0LLQvtC1INGB0L7QvtCx0YnQtdC90LjQtSIKK1VURjhfTkFNRT0i5bGx55SwIOWkqumDjiIKK1VURjhfTVNHPSLjg5bjg6zjg7zjg6Djga7jg4bjgrnjg4jjgafjgZnjgIIiCmRpZmYgLS1naXQgYS90L3Q5MDAxLXNlbmQtZW1haWwuc2ggYi90L3Q5MDAxLXNlbmQtZW1haWwuc2gKaW5kZXggY2IzZDE4My4uZmI2MDZhOSAxMDA3NTUKLS0tIGEvdC90OTAwMS1zZW5kLWVtYWlsLnNoCisrKyBiL3QvdDkwMDEtc2VuZC1lbWFpbC5zaApAQCAtMyw2ICszLDExIEBACiB0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc2VuZC1lbWFpbCcKIC4gLi90ZXN0LWxpYi5zaAogCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCXNheSAnc2tpcHBpbmcgZ2l0IHNlbmQtZW1haWwgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKIFBST0c9J2dpdCBzZW5kLWVtYWlsJwogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ByZXBhcmUgcmVmZXJlbmNlIHRyZWUnIFwKQEAgLTMyLDMxICszNyw3NiBAQAogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdFeHRyYWN0IHBhdGNoZXMnICcKLSAgICBwYXRjaGVzPWBnaXQgZm9ybWF0LXBhdGNoIC1uIEhFQUReMWAKKyAgICBwYXRjaGVzPWBnaXQgZm9ybWF0LXBhdGNoIC1zIC0tY2M9Ik9uZSA8b25lQGV4YW1wbGUuY29tPiIgLS1jYz10d29AZXhhbXBsZS5jb20gLW4gSEVBRF4xYAogJwogCisjIFRlc3Qgbm8gY29uZmlybSBlYXJseSB0byBlbnN1cmUgcmVtYWluaW5nIHRlc3RzIHdpbGwgbm90IGhhbmcKK3Rlc3Rfbm9fY29uZmlybSAoKSB7CisJcm0gLWYgbm9fY29uZmlybV9va2F5CisJZWNobyBuIHwgXAorCQlHSVRfU0VORF9FTUFJTF9OT1RUWT0xIFwKKwkJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJEAgXAorCQkkcGF0Y2hlcyA+IHN0ZG91dCAmJgorCQl0ZXN0X211c3RfZmFpbCBncmVwICJTZW5kIHRoaXMgZW1haWwiIHN0ZG91dCAmJgorCQk+IG5vX2NvbmZpcm1fb2theQorfQorCisjIEV4aXQgaW1tZWRpYXRlbHkgdG8gcHJldmVudCBoYW5nIGlmIGEgbm8tY29uZmlybSB0ZXN0IGZhaWxzCitjaGVja19ub19jb25maXJtICgpIHsKKwl0ZXN0IC1mIG5vX2NvbmZpcm1fb2theSB8fCB7CisJCXNheSAnTm8gY29uZmlybSB0ZXN0IGZhaWxlZDsgc2tpcHBpbmcgcmVtYWluaW5nIHRlc3RzIHRvIHByZXZlbnQgaGFuZ2luZycKKwkJdGVzdF9kb25lCisJfQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdObyBjb25maXJtIHdpdGggLS1zdXBwcmVzcy1jYycgJworCXRlc3Rfbm9fY29uZmlybSAtLXN1cHByZXNzLWNjPXNvYgorJworY2hlY2tfbm9fY29uZmlybQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdObyBjb25maXJtIHdpdGggLS1jb25maXJtPW5ldmVyJyAnCisJdGVzdF9ub19jb25maXJtIC0tY29uZmlybT1uZXZlcgorJworY2hlY2tfbm9fY29uZmlybQorCisjIGxlYXZlIHNlbmRlbWFpbC5jb25maXJtIHNldCB0byBuZXZlciBhZnRlciB0aGlzIHNvIHRoYXQgbm9uZSBvZiB0aGUKKyMgcmVtYWluaW5nIHRlc3RzIHByb21wdCB1bmludGVudGlvbmFsbHkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdObyBjb25maXJtIHdpdGggc2VuZGVtYWlsLmNvbmZpcm09bmV2ZXInICcKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jb25maXJtIG5ldmVyICYmCisJdGVzdF9ub19jb25maXJtIC0tY29tcG9zZSAtLXN1YmplY3Q9Zm9vCisnCitjaGVja19ub19jb25maXJtCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NlbmQgcGF0Y2hlcycgJwotICAgICBnaXQgc2VuZC1lbWFpbCAtLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIC0tdG89bm9ib2R5QGV4YW1wbGUuY29tIC0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiAkcGF0Y2hlcyAyPmVycm9ycworICAgICBnaXQgc2VuZC1lbWFpbCAtLXN1cHByZXNzLWNjPXNvYiAtLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIC0tdG89bm9ib2R5QGV4YW1wbGUuY29tIC0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiAkcGF0Y2hlcyAyPmVycm9ycwogJwogCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgogIW5vYm9keUBleGFtcGxlLmNvbSEKICFhdXRob3JAZXhhbXBsZS5jb20hCishb25lQGV4YW1wbGUuY29tIQorIXR3b0BleGFtcGxlLmNvbSEKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ1ZlcmlmeSBjb21tYW5kbGluZScgXAotICAgICdkaWZmIGNvbW1hbmRsaW5lMSBleHBlY3RlZCcKKyAgICAndGVzdF9jbXAgZXhwZWN0ZWQgY29tbWFuZGxpbmUxJwogCiBjYXQgPmV4cGVjdGVkLXNob3ctYWxsLWhlYWRlcnMgPDxcRU9GCiAwMDAxLVNlY29uZC5wYXRjaAogKG1ib3gpIEFkZGluZyBjYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0Zyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4nCisobWJveCkgQWRkaW5nIGNjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisobWJveCkgQWRkaW5nIGNjOiB0d29AZXhhbXBsZS5jb20gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCiBEcnktT0suIExvZyBzYXlzOgogU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQogTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgotUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+LDxjY0BleGFtcGxlLmNvbT4sPGF1dGhvckBleGFtcGxlLmNvbT4sPGJjY0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPiw8Y2NAZXhhbXBsZS5jb20+LDxhdXRob3JAZXhhbXBsZS5jb20+LDxvbmVAZXhhbXBsZS5jb20+LDx0d29AZXhhbXBsZS5jb20+LDxiY2NAZXhhbXBsZS5jb20+CiBGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgogVG86IHRvQGV4YW1wbGUuY29tCi1DYzogY2NAZXhhbXBsZS5jb20sIEEgPGF1dGhvckBleGFtcGxlLmNvbT4KK0NjOiBjY0BleGFtcGxlLmNvbSwgQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwgT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20KIFN1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KIERhdGU6IERBVEUtU1RSSU5HCiBNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORwpAQCAtNzAsNiArMTIwLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Nob3cgYWxsIGhlYWRlcnMnICcKIAlnaXQgc2VuZC1lbWFpbCBcCiAJCS0tZHJ5LXJ1biBcCisJCS0tc3VwcHJlc3MtY2M9c29iIFwKIAkJLS1mcm9tPSJFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPiIgXAogCQktLXRvPXRvQGV4YW1wbGUuY29tIFwKIAkJLS1jYz1jY0BleGFtcGxlLmNvbSBcCkBAIC04NCw2ICsxMzUsMzggQEAKIAl0ZXN0X2NtcCBleHBlY3RlZC1zaG93LWFsbC1oZWFkZXJzIGFjdHVhbC1zaG93LWFsbC1oZWFkZXJzCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Byb21wdGluZyB3b3JrcycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwkoZWNobyAiRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4iCisJIGVjaG8gInRvQGV4YW1wbGUuY29tIgorCSBlY2hvICIiCisJKSB8IEdJVF9TRU5EX0VNQUlMX05PVFRZPTEgZ2l0IHNlbmQtZW1haWwgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkcGF0Y2hlcyBcCisJCTI+ZXJyb3JzICYmCisJCWdyZXAgIl5Gcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPiQiIG1zZ3R4dDEgJiYKKwkJZ3JlcCAiXlRvOiB0b0BleGFtcGxlLmNvbSQiIG1zZ3R4dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2NjbWQgd29ya3MnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJY3AgJHBhdGNoZXMgY2NjbWQucGF0Y2ggJiYKKwllY2hvIGNjY21kLS1jY2NtZEBleGFtcGxlLmNvbSA+PmNjY21kLnBhdGNoICYmCisJeworCSAgZWNobyAiIyEkU0hFTExfUEFUSCIKKwkgIGVjaG8gc2VkIC1uIC1lIHMvXmNjY21kLS0vL3AgXCJcJDFcIgorCX0gPiBjY2NtZC1zZWQgJiYKKwljaG1vZCAreCBjY2NtZC1zZWQgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tY2MtY21kPS4vY2NjbWQtc2VkIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJY2NjbWQucGF0Y2ggXAorCQkmJgorCWdyZXAgXkNjOi4qY2NjbWRAZXhhbXBsZS5jb20gbXNndHh0MQorJworCiB6OD16enp6enp6egogejY0PSR6OCR6OCR6OCR6OCR6OCR6OCR6OCR6OAogejUxMj0kejY0JHo2NCR6NjQkejY0JHo2NCR6NjQkejY0JHo2NApAQCAtMTA0LDYgKzE4NywyOCBAQAogCSEgdGVzdCAtZSBjb21tYW5kbGluZTEKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnQXV0aG9yIEZyb206IGluIG1lc3NhZ2UgYm9keScgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzICYmCisJc2VkICIxLC9eJC9kIiA8IG1zZ3R4dDEgPiBtc2dib2R5MQorCWdyZXAgIkZyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4iIG1zZ2JvZHkxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0F1dGhvciBGcm9tOiBub3QgaW4gbWVzc2FnZSBib2R5JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJBIDxhdXRob3JAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhdGNoZXMgJiYKKwlzZWQgIjEsL14kL2QiIDwgbXNndHh0MSA+IG1zZ2JvZHkxCisJISBncmVwICJGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IiBtc2dib2R5MQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBsb25nIGxpbmVzIHdpdGggLS1uby12YWxpZGF0ZScgJwogCWdpdCBzZW5kLWVtYWlsIFwKIAkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCkBAIC0xNDgsMTUgKzI1MywxMyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbXBvc2Ugd29ya3MnICcKIAljbGVhbl9mYWtlX3NlbmRtYWlsICYmCi0JZWNobyB5IHwgXAotCQlHSVRfU0VORF9FTUFJTF9OT1RUWT0xIFwKLQkJZ2l0IHNlbmQtZW1haWwgXAotCQktLWNvbXBvc2UgLS1zdWJqZWN0IGZvbyBcCi0JCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAotCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCi0JCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCi0JCSRwYXRjaGVzIFwKLQkJMj5lcnJvcnMKKwlnaXQgc2VuZC1lbWFpbCBcCisJLS1jb21wb3NlIC0tc3ViamVjdCBmb28gXAorCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCSRwYXRjaGVzIFwKKwkyPmVycm9ycwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXJzdCBtZXNzYWdlIGlzIGNvbXBvc2UgdGV4dCcgJwpAQCAtMTY3LDE2ICsyNzAsMTggQEAKIAlncmVwICJTdWJqZWN0Oi4qU2Vjb25kIiBtc2d0eHQyCiAnCiAKLWNhdCA+ZXhwZWN0ZWQtc2hvdy1hbGwtaGVhZGVycyA8PFxFT0YKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3Mtc29iIDw8XEVPRgogMDAwMS1TZWNvbmQucGF0Y2gKIChtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJwogRHJ5LU9LLiBMb2cgc2F5czoKIFNlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KIE1BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KLVJDUFQgVE86PHRvQGV4YW1wbGUuY29tPiw8Y2NAZXhhbXBsZS5jb20+LDxhdXRob3JAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4sPGNjQGV4YW1wbGUuY29tPiw8YXV0aG9yQGV4YW1wbGUuY29tPiw8b25lQGV4YW1wbGUuY29tPiw8dHdvQGV4YW1wbGUuY29tPgogRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KIFRvOiB0b0BleGFtcGxlLmNvbQotQ2M6IGNjQGV4YW1wbGUuY29tLCBBIDxhdXRob3JAZXhhbXBsZS5jb20+CitDYzogY2NAZXhhbXBsZS5jb20sIEEgPGF1dGhvckBleGFtcGxlLmNvbT4sIE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tCiBTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCiBEYXRlOiBEQVRFLVNUUklORwogTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKQEAgLTE4NSwxMCArMjkwLDEwIEBACiBSZXN1bHQ6IE9LCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VuZGVtYWlsLmNjIHNldCcgJwotCWdpdCBjb25maWcgc2VuZGVtYWlsLmNjIGNjQGV4YW1wbGUuY29tICYmCit0ZXN0X3N1cHByZXNzaW9uICgpIHsKIAlnaXQgc2VuZC1lbWFpbCBcCiAJCS0tZHJ5LXJ1biBcCisJCS0tc3VwcHJlc3MtY2M9JDEgJHsyKyItLXN1cHByZXNzLWNjPSQyIn0gXAogCQktLWZyb209IkV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+IiBcCiAJCS0tdG89dG9AZXhhbXBsZS5jb20gXAogCQktLXNtdHAtc2VydmVyIHJlbGF5LmV4YW1wbGUuY29tIFwKQEAgLTE5NiwyMCArMzAxLDI3IEBACiAJc2VkCS1lICJzL15cKERhdGU6XCkuKi9cMSBEQVRFLVNUUklORy8iIFwKIAkJLWUgInMvXlwoTWVzc2FnZS1JZDpcKS4qL1wxIE1FU1NBR0UtSUQtU1RSSU5HLyIgXAogCQktZSAicy9eXChYLU1haWxlcjpcKS4qL1wxIFgtTUFJTEVSLVNUUklORy8iIFwKLQkJPmFjdHVhbC1zaG93LWFsbC1oZWFkZXJzICYmCi0JdGVzdF9jbXAgZXhwZWN0ZWQtc2hvdy1hbGwtaGVhZGVycyBhY3R1YWwtc2hvdy1hbGwtaGVhZGVycworCQk+YWN0dWFsLXN1cHByZXNzLSQxJHsyKyItJDIifSAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXN1cHByZXNzLSQxJHsyKyItJDIifSBhY3R1YWwtc3VwcHJlc3MtJDEkezIrIi0kMiJ9Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbmRlbWFpbC5jYyBzZXQnICcKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jYyBjY0BleGFtcGxlLmNvbSAmJgorCXRlc3Rfc3VwcHJlc3Npb24gc29iCiAnCiAKLWNhdCA+ZXhwZWN0ZWQtc2hvdy1hbGwtaGVhZGVycyA8PFxFT0YKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3Mtc29iIDw8XEVPRgogMDAwMS1TZWNvbmQucGF0Y2gKIChtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJwogRHJ5LU9LLiBMb2cgc2F5czoKIFNlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KIE1BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KLVJDUFQgVE86PHRvQGV4YW1wbGUuY29tPiw8YXV0aG9yQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+LDxhdXRob3JAZXhhbXBsZS5jb20+LDxvbmVAZXhhbXBsZS5jb20+LDx0d29AZXhhbXBsZS5jb20+CiBGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgogVG86IHRvQGV4YW1wbGUuY29tCi1DYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPgorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sIE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tCiBTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCiBEYXRlOiBEQVRFLVNUUklORwogTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKQEAgLTIyMCwxNyArMzMyLDI4MSBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZW5kZW1haWwuY2MgdW5zZXQnICcKIAlnaXQgY29uZmlnIC0tdW5zZXQgc2VuZGVtYWlsLmNjICYmCisJdGVzdF9zdXBwcmVzc2lvbiBzb2IKKycKKworY2F0ID5leHBlY3RlZC1zdXBwcmVzcy1jY2NtZCA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhib2R5KSBBZGRpbmcgY2M6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+JworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPiw8YXV0aG9yQGV4YW1wbGUuY29tPiw8b25lQGV4YW1wbGUuY29tPiw8dHdvQGV4YW1wbGUuY29tPiw8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sIE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tLCBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCitEYXRlOiBEQVRFLVNUUklORworTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKK1gtTWFpbGVyOiBYLU1BSUxFUi1TVFJJTkcKKworUmVzdWx0OiBPSworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbmRlbWFpbC5jY2NtZCcgJworCWVjaG8gZWNobyBjYy1jbWRAZXhhbXBsZS5jb20gPiBjY2NtZCAmJgorCWNobW9kICt4IGNjY21kICYmCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY2NjbWQgLi9jY2NtZCAmJgorCXRlc3Rfc3VwcHJlc3Npb24gY2NjbWQKKycKKworY2F0ID5leHBlY3RlZC1zdXBwcmVzcy1hbGwgPDxcRU9GCiswMDAxLVNlY29uZC5wYXRjaAorRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCisKK1Jlc3VsdDogT0sKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN1cHByZXNzLWNjPWFsbCcgJworCXRlc3Rfc3VwcHJlc3Npb24gYWxsCisnCisKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3MtYm9keSA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhjYy1jbWQpIEFkZGluZyBjYzogY2MtY21kQGV4YW1wbGUuY29tIGZyb206ICcuL2NjY21kJworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPiw8YXV0aG9yQGV4YW1wbGUuY29tPiw8b25lQGV4YW1wbGUuY29tPiw8dHdvQGV4YW1wbGUuY29tPiw8Y2MtY21kQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sIE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tLCBjYy1jbWRAZXhhbXBsZS5jb20KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworCitSZXN1bHQ6IE9LCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zdXBwcmVzcy1jYz1ib2R5JyAnCisJdGVzdF9zdXBwcmVzc2lvbiBib2R5CisnCisKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3MtYm9keS1jY2NtZCA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4sPGF1dGhvckBleGFtcGxlLmNvbT4sPG9uZUBleGFtcGxlLmNvbT4sPHR3b0BleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK0NjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LCBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbQorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCisKK1Jlc3VsdDogT0sKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN1cHByZXNzLWNjPWJvZHkgLS1zdXBwcmVzcy1jYz1jY2NtZCcgJworCXRlc3Rfc3VwcHJlc3Npb24gYm9keSBjY2NtZAorJworCitjYXQgPmV4cGVjdGVkLXN1cHByZXNzLXNvYiA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4sPGF1dGhvckBleGFtcGxlLmNvbT4sPG9uZUBleGFtcGxlLmNvbT4sPHR3b0BleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK0NjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LCBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbQorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCisKK1Jlc3VsdDogT0sKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN1cHByZXNzLWNjPXNvYicgJworCWdpdCBjb25maWcgLS11bnNldCBzZW5kZW1haWwuY2NjbWQKKwl0ZXN0X3N1cHByZXNzaW9uIHNvYgorJworCitjYXQgPmV4cGVjdGVkLXN1cHByZXNzLWJvZHljYyA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhib2R5KSBBZGRpbmcgY2M6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+JworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPiw8YXV0aG9yQGV4YW1wbGUuY29tPiw8b25lQGV4YW1wbGUuY29tPiw8dHdvQGV4YW1wbGUuY29tPiw8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sIE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tLCBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCitEYXRlOiBEQVRFLVNUUklORworTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKK1gtTWFpbGVyOiBYLU1BSUxFUi1TVFJJTkcKKworUmVzdWx0OiBPSworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3VwcHJlc3MtY2M9Ym9keWNjJyAnCisJdGVzdF9zdXBwcmVzc2lvbiBib2R5Y2MKKycKKworY2F0ID5leHBlY3RlZC1zdXBwcmVzcy1jYyA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhib2R5KSBBZGRpbmcgY2M6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+JworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPiw8YXV0aG9yQGV4YW1wbGUuY29tPiw8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworCitSZXN1bHQ6IE9LCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zdXBwcmVzcy1jYz1jYycgJworCXRlc3Rfc3VwcHJlc3Npb24gY2MKKycKKwordGVzdF9jb25maXJtICgpIHsKKwllY2hvIHkgfCBcCisJCUdJVF9TRU5EX0VNQUlMX05PVFRZPTEgXAorCQlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRAICRwYXRjaGVzID4gc3Rkb3V0ICYmCisJZ3JlcCAiU2VuZCB0aGlzIGVtYWlsIiBzdGRvdXQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb25maXJtPWFsd2F5cycgJworCXRlc3RfY29uZmlybSAtLWNvbmZpcm09YWx3YXlzIC0tc3VwcHJlc3MtY2M9YWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29uZmlybT1hdXRvJyAnCisJdGVzdF9jb25maXJtIC0tY29uZmlybT1hdXRvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29uZmlybT1jYycgJworCXRlc3RfY29uZmlybSAtLWNvbmZpcm09Y2MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb25maXJtPWNvbXBvc2UnICcKKwl0ZXN0X2NvbmZpcm0gLS1jb25maXJtPWNvbXBvc2UgLS1jb21wb3NlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpcm0gYnkgZGVmYXVsdCAoZHVlIHRvIGNjKScgJworCUNPTkZJUk09JChnaXQgY29uZmlnIC0tZ2V0IHNlbmRlbWFpbC5jb25maXJtKSAmJgorCWdpdCBjb25maWcgLS11bnNldCBzZW5kZW1haWwuY29uZmlybSAmJgorCXRlc3RfY29uZmlybQorCXJldD0iJD8iCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY29uZmlybSAke0NPTkZJUk06LW5ldmVyfQorCXRlc3QgJHJldCA9ICIwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maXJtIGJ5IGRlZmF1bHQgKGR1ZSB0byAtLWNvbXBvc2UpJyAnCisJQ09ORklSTT0kKGdpdCBjb25maWcgLS1nZXQgc2VuZGVtYWlsLmNvbmZpcm0pICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHNlbmRlbWFpbC5jb25maXJtICYmCisJdGVzdF9jb25maXJtIC0tc3VwcHJlc3MtY2M9YWxsIC0tY29tcG9zZQorCXJldD0iJD8iCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY29uZmlybSAke0NPTkZJUk06LW5ldmVyfQorCXRlc3QgJHJldCA9ICIwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maXJtIGRldGVjdHMgRU9GIChpbmZvcm0gYXNzdW1lcyB5KScgJworCUNPTkZJUk09JChnaXQgY29uZmlnIC0tZ2V0IHNlbmRlbWFpbC5jb25maXJtKSAmJgorCWdpdCBjb25maWcgLS11bnNldCBzZW5kZW1haWwuY29uZmlybSAmJgorCXJtIC1mciBvdXRkaXIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0yIC1vIG91dGRpciAmJgorCUdJVF9TRU5EX0VNQUlMX05PVFRZPTEgXAorCQlnaXQgc2VuZC1lbWFpbCBcCisJCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCQlvdXRkaXIvKi5wYXRjaCA8IC9kZXYvbnVsbAorCXJldD0iJD8iCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY29uZmlybSAke0NPTkZJUk06LW5ldmVyfQorCXRlc3QgJHJldCA9ICIwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maXJtIGRldGVjdHMgRU9GIChhdXRvIGNhdXNlcyBmYWlsdXJlKScgJworCUNPTkZJUk09JChnaXQgY29uZmlnIC0tZ2V0IHNlbmRlbWFpbC5jb25maXJtKSAmJgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmNvbmZpcm0gYXV0byAmJgorCUdJVF9TRU5EX0VNQUlMX05PVFRZPTEgJiYKKwlleHBvcnQgR0lUX1NFTkRfRU1BSUxfTk9UVFkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtZW1haWwgXAorCQkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkJJHBhdGNoZXMgPCAvZGV2L251bGwKKwlyZXQ9IiQ/IgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmNvbmZpcm0gJHtDT05GSVJNOi1uZXZlcn0KKwl0ZXN0ICRyZXQgPSAiMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlybSBkb2VzbnQgbG9vcCBmb3JldmVyJyAnCisJQ09ORklSTT0kKGdpdCBjb25maWcgLS1nZXQgc2VuZGVtYWlsLmNvbmZpcm0pICYmCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY29uZmlybSBhdXRvICYmCisJR0lUX1NFTkRfRU1BSUxfTk9UVFk9MSAmJgorCWV4cG9ydCBHSVRfU0VORF9FTUFJTF9OT1RUWSAmJgorCQl5ZXMgImJvZ3VzIiB8IHRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLWVtYWlsIFwKKwkJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJCSRwYXRjaGVzCisJcmV0PSIkPyIKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jb25maXJtICR7Q09ORklSTTotbmV2ZXJ9CisJdGVzdCAkcmV0ID0gIjAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3V0ZjggQ2MgaXMgcmZjMjA0NyBlbmNvZGVkJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCXJtIC1mciBvdXRkaXIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC1vIG91dGRpciAtLWNjPSLDoMOpw6zDtsO6IDx1dGY4QGV4YW1wbGUuY29tPiIgJiYKIAlnaXQgc2VuZC1lbWFpbCBcCi0JCS0tZHJ5LXJ1biBcCi0JCS0tZnJvbT0iRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4iIFwKLQkJLS10bz10b0BleGFtcGxlLmNvbSBcCi0JCS0tc210cC1zZXJ2ZXIgcmVsYXkuZXhhbXBsZS5jb20gXAotCQkkcGF0Y2hlcyB8Ci0Jc2VkCS1lICJzL15cKERhdGU6XCkuKi9cMSBEQVRFLVNUUklORy8iIFwKLQkJLWUgInMvXlwoTWVzc2FnZS1JZDpcKS4qL1wxIE1FU1NBR0UtSUQtU1RSSU5HLyIgXAotCQktZSAicy9eXChYLU1haWxlcjpcKS4qL1wxIFgtTUFJTEVSLVNUUklORy8iIFwKLQkJPmFjdHVhbC1zaG93LWFsbC1oZWFkZXJzICYmCi0JdGVzdF9jbXAgZXhwZWN0ZWQtc2hvdy1hbGwtaGVhZGVycyBhY3R1YWwtc2hvdy1hbGwtaGVhZGVycworCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCW91dGRpci8qLnBhdGNoICYmCisJZ3JlcCAiXkNjOiIgbXNndHh0MSB8CisJZ3JlcCAiPT9VVEYtOD9xPz1DMz1BMD1DMz1BOT1DMz1BQz1DMz1CNj1DMz1CQT89IDx1dGY4QGV4YW1wbGUuY29tPiIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb21wb3NlIGFkZHMgTUlNRSBmb3IgdXRmOCBib2R5JyAnCkBAIC0yMzksOSArNjE1LDcgQEAKIAkgZWNobyAiZWNobyB1dGY4IGJvZHk6IMOgw6nDrMO2w7ogPj5cIlwkMVwiIgogCSkgPmZha2UtZWRpdG9yLXV0ZjggJiYKIAljaG1vZCAreCBmYWtlLWVkaXRvci11dGY4ICYmCi0JZWNobyB5IHwgXAogCSAgR0lUX0VESVRPUj0iXCIkKHB3ZCkvZmFrZS1lZGl0b3ItdXRmOFwiIiBcCi0JICBHSVRfU0VORF9FTUFJTF9OT1RUWT0xIFwKIAkgIGdpdCBzZW5kLWVtYWlsIFwKIAkgIC0tY29tcG9zZSAtLXN1YmplY3QgZm9vIFwKIAkgIC0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXApAQCAtMjQ5LDcgKzYyMyw3IEBACiAJICAtLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAogCSAgJHBhdGNoZXMgJiYKIAlncmVwICJedXRmOCBib2R5IiBtc2d0eHQxICYmCi0JZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIgbXNndHh0MQorCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiIG1zZ3R4dDEKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb21wb3NlIHJlc3BlY3RzIHVzZXIgbWltZSB0eXBlJyAnCkBAIC0yNjMsOSArNjM3LDcgQEAKIAkgZWNobyAiIGVjaG8gdXRmOCBib2R5OiDDoMOpw6zDtsO6KSA+XCJcJDFcIiIKIAkpID5mYWtlLWVkaXRvci11dGY4LW1pbWUgJiYKIAljaG1vZCAreCBmYWtlLWVkaXRvci11dGY4LW1pbWUgJiYKLQllY2hvIHkgfCBcCiAJICBHSVRfRURJVE9SPSJcIiQocHdkKS9mYWtlLWVkaXRvci11dGY4LW1pbWVcIiIgXAotCSAgR0lUX1NFTkRfRU1BSUxfTk9UVFk9MSBcCiAJICBnaXQgc2VuZC1lbWFpbCBcCiAJICAtLWNvbXBvc2UgLS1zdWJqZWN0IGZvbyBcCiAJICAtLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKQEAgLTI3NCwxNCArNjQ2LDEyIEBACiAJICAkcGF0Y2hlcyAmJgogCWdyZXAgIl51dGY4IGJvZHkiIG1zZ3R4dDEgJiYKIAlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTEiIG1zZ3R4dDEgJiYKLQkhIGdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiIG1zZ3R4dDEKKwkhIGdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiIG1zZ3R4dDEKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb21wb3NlIGFkZHMgTUlNRSBmb3IgdXRmOCBzdWJqZWN0JyAnCiAJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgotCWVjaG8geSB8IFwKIAkgIEdJVF9FRElUT1I9IlwiJChwd2QpL2Zha2UtZWRpdG9yXCIiIFwKLQkgIEdJVF9TRU5EX0VNQUlMX05PVFRZPTEgXAogCSAgZ2l0IHNlbmQtZW1haWwgXAogCSAgLS1jb21wb3NlIC0tc3ViamVjdCB1dGY4LXPDvGJqw6tjdCBcCiAJICAtLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKQEAgLTI4OSw3ICs2NTksNyBAQAogCSAgLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKIAkgICRwYXRjaGVzICYmCiAJZ3JlcCAiXmZha2UgZWRpdCIgbXNndHh0MSAmJgotCWdyZXAgIl5TdWJqZWN0OiA9P3V0Zi04P3E/dXRmOC1zPUMzPUJDYmo9QzM9QUJjdD89IiBtc2d0eHQxCisJZ3JlcCAiXlN1YmplY3Q6ID0/VVRGLTg/cT91dGY4LXM9QzM9QkNiaj1DMz1BQmN0Pz0iIG1zZ3R4dDEKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0cyBhbWJpZ3VvdXMgcmVmZXJlbmNlL2ZpbGUgY29uZmxpY3QnICcKQEAgLTMwMyw3ICs2NzMsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmVlZCB0d28gZmlsZXMnICcKIAlybSAtZnIgb3V0ZGlyICYmCiAJZ2l0IGZvcm1hdC1wYXRjaCAtMiAtbyBvdXRkaXIgJiYKLQlHSVRfU0VORF9FTUFJTF9OT1RUWT0xIGdpdCBzZW5kLWVtYWlsIFwKKwlnaXQgc2VuZC1lbWFpbCBcCiAJLS1kcnktcnVuIFwKIAktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKIAktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCkBAIC0zMTMsNCArNjgzLDM2IEBACiAJdGVzdCAieiQoc2VkIC1uIC1lIDJwIHN1YmplY3RzKSIgPSAielN1YmplY3Q6IFtQQVRDSCAyLzJdIGFkZCBtYXN0ZXIiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luLXJlcGx5LXRvIGJ1dCBubyB0aHJlYWRpbmcnICcKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0taW4tcmVwbHktdG89Ijxpbi1yZXBseS1pZEBleGFtcGxlLmNvbT4iIFwKKwkJLS1ub3RocmVhZCBcCisJCSRwYXRjaGVzIHwKKwlncmVwICJJbi1SZXBseS1UbzogPGluLXJlcGx5LWlkQGV4YW1wbGUuY29tPiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gaW4tcmVwbHktdG8gYW5kIG5vIHRocmVhZGluZycgJworCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1kcnktcnVuIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1ub3RocmVhZCBcCisJCSRwYXRjaGVzICRwYXRjaGVzID5zdGRvdXQgJiYKKwkhIGdyZXAgIkluLVJlcGx5LVRvOiAiIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWRpbmcgYnV0IG5vIGNoYWluLXJlcGx5LXRvJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXRocmVhZCBcCisJCS0tbm9jaGFpbi1yZXBseS10byBcCisJCSRwYXRjaGVzICRwYXRjaGVzID5zdGRvdXQgJiYKKwlncmVwICJJbi1SZXBseS1UbzogIiBzdGRvdXQKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2ggYi90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2gKaW5kZXggYmI5MjFhZi4uNTcwZTAzNSAxMDA3NTUKLS0tIGEvdC90OTEwMC1naXQtc3ZuLWJhc2ljLnNoCisrKyBiL3QvdDkxMDAtZ2l0LXN2bi1iYXNpYy5zaApAQCAtNiwxOSArNiwxOSBAQAogdGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBiYXNpYyB0ZXN0cycKIEdJVF9TVk5fTENfQUxMPSR7TENfQUxMOi0kTEFOR30KIAotY2FzZSAiJEdJVF9TVk5fTENfQUxMIiBpbgotKi5VVEYtOCkKLQloYXZlX3V0Zjg9dAotCTs7Ci0qKQotCWhhdmVfdXRmOD0KLQk7OwotZXNhYwotCiAuIC4vbGliLWdpdC1zdm4uc2gKIAogc2F5ICdkZWZpbmUgTk9fU1ZOX1RFU1RTIHRvIHNraXAgZ2l0IHN2biB0ZXN0cycKIAorY2FzZSAiJEdJVF9TVk5fTENfQUxMIiBpbgorKi5VVEYtOCkKKwl0ZXN0X3NldF9wcmVyZXEgVVRGOAorCTs7CisqKQorCXNheSAiVVRGLTggbG9jYWxlIG5vdCBzZXQsIHNvbWUgdGVzdHMgc2tpcHBlZCAoJEdJVF9TVk5fTENfQUxMKSIKKwk7OworZXNhYworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnaW5pdGlhbGl6ZSBnaXQgc3ZuJyAnCiAJbWtkaXIgaW1wb3J0ICYmCkBAIC0zMSw3ICszMSw3IEBACiAJZWNobyAienp6IiA+IGJhci96enogJiYKIAllY2hvICIjIS9iaW4vc2giID4gZXhlYy5zaCAmJgogCWNobW9kICt4IGV4ZWMuc2ggJiYKLQlzdm4gaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgLiAiJHN2bnJlcG8iID4vZGV2L251bGwgJiYKIAljZCAuLiAmJgogCXJtIC1yZiBpbXBvcnQgJiYKIAlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIicKQEAgLTUxLDcgKzUxLDcgQEAKIAlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQkke3JlbW90ZXNfZ2l0X3N2bn0uLm15YnJhbmNoICYmCi0Jc3ZuIHVwICIkU1ZOX1RSRUUiICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgogCXRlc3QgLWQgIiRTVk5fVFJFRSIvZGlyICYmIHRlc3QgISAtZCAiJFNWTl9UUkVFIi9kaXIvYScKIAogCkBAIC0xMTgsNyArMTE4LDcgQEAKIAlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQkke3JlbW90ZXNfZ2l0X3N2bn0uLm15YnJhbmNoNSAmJgotCXN2biB1cCAiJFNWTl9UUkVFIiAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKIAl0ZXN0ICEgLXggIiRTVk5fVFJFRSIvZXhlYy5zaCcKIAogCkBAIC0xMjksNyArMTI5LDcgQEAKIAlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQkke3JlbW90ZXNfZ2l0X3N2bn0uLm15YnJhbmNoNSAmJgotCXN2biB1cCAiJFNWTl9UUkVFIiAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKIAl0ZXN0IC14ICIkU1ZOX1RSRUUiL2V4ZWMuc2gnCiAKIApAQCAtMTQxLDcgKzE0MSw3IEBACiAJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCiAJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKIAkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaDUgJiYKLQlzdm4gdXAgIiRTVk5fVFJFRSIgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCiAJdGVzdCAtTCAiJFNWTl9UUkVFIi9leGVjLnNoJwogCiBuYW1lPSduZXcgc3ltbGluayBpcyBhZGRlZCB0byBhIGZpbGUgdGhhdCB3YXMgYWxzbyBqdXN0IG1hZGUgZXhlY3V0YWJsZScKQEAgLTE1Myw3ICsxNTMsNyBAQAogCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgogCWdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCiAJCSR7cmVtb3Rlc19naXRfc3ZufS4ubXlicmFuY2g1ICYmCi0Jc3ZuIHVwICIkU1ZOX1RSRUUiICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgogCXRlc3QgLXggIiRTVk5fVFJFRSIvYmFyL3p6eiAmJgogCXRlc3QgLUwgIiRTVk5fVFJFRSIvZXhlYy0yLnNoJwogCkBAIC0xNjYsMjUgKzE2NiwyMCBAQAogCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgogCWdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCiAJCSR7cmVtb3Rlc19naXRfc3ZufS4ubXlicmFuY2g1ICYmCi0Jc3ZuIHVwICIkU1ZOX1RSRUUiICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgogCXRlc3QgLWYgIiRTVk5fVFJFRSIvZXhlYy0yLnNoICYmCiAJdGVzdCAhIC1MICIkU1ZOX1RSRUUiL2V4ZWMtMi5zaCAmJgogCXRlc3RfY21wIGhlbHAgIiRTVk5fVFJFRSIvZXhlYy0yLnNoJwogCi1pZiB0ZXN0ICIkaGF2ZV91dGY4IiA9IHQKLXRoZW4KLQluYW1lPSJjb21taXQgd2l0aCBVVEYtOCBtZXNzYWdlOiBsb2NhbGU6ICRHSVRfU1ZOX0xDX0FMTCIKLQlMQ19BTEw9IiRHSVRfU1ZOX0xDX0FMTCIKLQlleHBvcnQgTENfQUxMCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICIKLQkJZWNobyAnIyBoZWxsbycgPj4gZXhlYy0yLnNoICYmCi0JCWdpdCB1cGRhdGUtaW5kZXggZXhlYy0yLnNoICYmCi0JCWdpdCBjb21taXQgLW0gJ8Opw6/iiI8nICYmCi0JCWdpdCBzdm4gc2V0LXRyZWUgSEVBRCIKLQl1bnNldCBMQ19BTEwKLWVsc2UKLQlzYXkgIlVURi04IGxvY2FsZSBub3Qgc2V0LCB0ZXN0IHNraXBwZWQgKCRHSVRfU1ZOX0xDX0FMTCkiCi1maQorbmFtZT0iY29tbWl0IHdpdGggVVRGLTggbWVzc2FnZTogbG9jYWxlOiAkR0lUX1NWTl9MQ19BTEwiCitMQ19BTEw9IiRHSVRfU1ZOX0xDX0FMTCIKK2V4cG9ydCBMQ19BTEwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVVRGOCAiJG5hbWUiICIKKwllY2hvICcjIGhlbGxvJyA+PiBleGVjLTIuc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IGV4ZWMtMi5zaCAmJgorCWdpdCBjb21taXQgLW0gJ8Opw6/iiI8nICYmCisJZ2l0IHN2biBzZXQtdHJlZSBIRUFEIgordW5zZXQgTENfQUxMCiAKIG5hbWU9J3Rlc3QgZmV0Y2ggZnVuY3Rpb25hbGl0eSAoc3ZuID0+IGdpdCkgd2l0aCBhbHRlcm5hdGUgR0lUX1NWTl9JRCcKIEdJVF9TVk5fSUQ9YWx0CkBAIC0xOTcsNyArMTkyLDcgQEAKIAogbmFtZT0nY2hlY2sgaW1wb3J0ZWQgdHJlZSBjaGVja3N1bXMgZXhwZWN0ZWQgdHJlZSBjaGVja3N1bXMnCiBybSAtZiBleHBlY3RlZAotaWYgdGVzdCAiJGhhdmVfdXRmOCIgPSB0CitpZiB0ZXN0X2hhdmVfcHJlcmVxIFVURjgKIHRoZW4KIAllY2hvIHRyZWUgYmY1MjIzNTM1ODZiMWI4ODM0ODhmMmJjNzNkYWIwZDlmNzc0YjlhOSA+IGV4cGVjdGVkCiBmaQpAQCAtMjM2LDYgKzIzMSwyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl46cmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0kIgogICAgICAgICAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgJHJldiBkb2VzIG5vdCBjbG9iYmVyIGN1cnJlbnQgYnJhbmNoJyAnCisJZ2l0IHN2biBmZXRjaCAtaSBiYXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbXktYmFyIHJlZnMvcmVtb3Rlcy9iYXIgJiYKKwllY2hvIDEgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gImNoYW5nZSAxIiAmJgorCWVjaG8gMiA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiY2hhbmdlIDIiICYmCisJb2xkX2hlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHN2biBkY29tbWl0IC1pIGJhciBIRUFEXiAmJgorCXRlc3QgJG9sZF9oZWFkID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdCByZWZzL2hlYWRzL215LWJhciA9ICQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSAmJgorCWdpdCBsb2cgcmVmcy9yZW1vdGVzL2JhciB8IGdyZXAgImNoYW5nZSAxIiAmJgorCSEgZ2l0IGxvZyByZWZzL3JlbW90ZXMvYmFyIHwgZ3JlcCAiY2hhbmdlIDIiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgbXktYmFyCisJJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYmxlIHRvIGRjb21taXQgdG8gYSBzdWJkaXJlY3RvcnknICIKIAlnaXQgc3ZuIGZldGNoIC1pIGJhciAmJgogCWdpdCBjaGVja291dCAtYiBteS1iYXIgcmVmcy9yZW1vdGVzL2JhciAmJgpkaWZmIC0tZ2l0IGEvdC90OTEwMS1naXQtc3ZuLXByb3BzLnNoIGIvdC90OTEwMS1naXQtc3ZuLXByb3BzLnNoCmluZGV4IDFlMzFkNmUuLjlkYTQxNzggMTAwNzU1Ci0tLSBhL3QvdDkxMDEtZ2l0LXN2bi1wcm9wcy5zaAorKysgYi90L3Q5MTAxLWdpdC1zdm4tcHJvcHMuc2gKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlwcmludGYgIlxyXG4iID4gZW1wdHlfY3JsZgogCWFfZW1wdHlfY3JsZj1gZ2l0IGhhc2gtb2JqZWN0IC13IGVtcHR5X2NybGZgCiAKLQlzdm4gaW1wb3J0IC0tbm8tYXV0by1wcm9wcyAtbSAnaW1wb3J0IGZvciBnaXQgc3ZuJyAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbAorCXN2bl9jbWQgaW1wb3J0IC0tbm8tYXV0by1wcm9wcyAtbSAnaW1wb3J0IGZvciBnaXQgc3ZuJyAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbAogY2QgLi4KIAogcm0gLXJmIGltcG9ydApAQCAtNTcsMTMgKzU3LDEzIEBACiAJJ2NkIHRlc3Rfd2MgJiYKIAkJZWNobyBHcmVldGluZ3MgPj4ga3cuYyAmJgogCQlwb2tlIGt3LmMgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiTm90IHlldCBhbiBJZCIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIk5vdCB5ZXQgYW4gSWQiICYmCiAJCWVjaG8gSGVsbG8gd29ybGQgPj4ga3cuYyAmJgogCQlwb2tlIGt3LmMgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiTW9kaWZpZWQgZmlsZSwgYnV0IHN0aWxsIG5vdCB5ZXQgYW4gSWQiICYmCi0JCXN2biBwcm9wc2V0IHN2bjprZXl3b3JkcyBJZCBrdy5jICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJNb2RpZmllZCBmaWxlLCBidXQgc3RpbGwgbm90IHlldCBhbiBJZCIgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IHN2bjprZXl3b3JkcyBJZCBrdy5jICYmCiAJCXBva2Uga3cuYyAmJgotCQlzdm4gY29tbWl0IC1tICJQcm9wc2V0IElkIiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiUHJvcHNldCBJZCIgJiYKIAljZCAuLicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBnaXQgc3ZuJyAnZ2l0IHN2biBpbml0ICIkc3ZucmVwbyInCkBAIC04MywxNiArODMsMTYgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAicHJvcHNldCBDUiBvbiBjcmxmIGZpbGVzIiBcCiAJJ2NkIHRlc3Rfd2MgJiYKLQkJc3ZuIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUiBlbXB0eSAmJgotCQlzdm4gcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSIGNybGYgJiYKLQkJc3ZuIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUiBuZV9jcmxmICYmCi0JCXN2biBjb21taXQgLW0gInByb3BzZXQgQ1Igb24gY3JsZiBmaWxlcyIgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1IgZW1wdHkgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1IgY3JsZiAmJgorCQlzdm5fY21kIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUiBuZV9jcmxmICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJwcm9wc2V0IENSIG9uIGNybGYgZmlsZXMiICYmCiAJIGNkIC4uJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBhbmQgcHVsbCBsYXRlc3QgZnJvbSBzdm4gYW5kIGNoZWNrb3V0IGEgbmV3IHdjJyBcCiAJJ2dpdCBzdm4gZmV0Y2ggJiYKIAkgZ2l0IHB1bGwgLiAke3JlbW90ZXNfZ2l0X3N2bn0gJiYKLQkgc3ZuIGNvICIkc3ZucmVwbyIgbmV3X3djJworCSBzdm5fY21kIGNvICIkc3ZucmVwbyIgbmV3X3djJwogCiBmb3IgaSBpbiBjcmxmIG5lX2NybGYgbGYgbmVfbGYgY3IgbmVfY3IgZW1wdHlfY3IgZW1wdHlfbGYgZW1wdHkgZW1wdHlfY3JsZgogZG8KQEAgLTEwNiwxMSArMTA2LDExIEBACiAJYV9jcj1gcHJpbnRmICckSWQkXHJcbkhlbGxvXHJcbldvcmxkXHJcbicgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbmAKIAlhX25lX2NyPWBwcmludGYgJyRJZCRcclxuSGVsbG9cclxuV29ybGQnIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW5gCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAnU2V0IENSTEYgb24gY3IgZmlsZXMnIFwKLQknc3ZuIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUkxGIGNyICYmCi0JIHN2biBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1JMRiBuZV9jciAmJgotCSBzdm4gcHJvcHNldCBzdm46a2V5d29yZHMgSWQgY3IgJiYKLQkgc3ZuIHByb3BzZXQgc3ZuOmtleXdvcmRzIElkIG5lX2NyICYmCi0JIHN2biBjb21taXQgLW0gInByb3BzZXQgQ1JMRiBvbiBjciBmaWxlcyInCisJJ3N2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSTEYgY3IgJiYKKwkgc3ZuX2NtZCBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1JMRiBuZV9jciAmJgorCSBzdm5fY21kIHByb3BzZXQgc3ZuOmtleXdvcmRzIElkIGNyICYmCisJIHN2bl9jbWQgcHJvcHNldCBzdm46a2V5d29yZHMgSWQgbmVfY3IgJiYKKwkgc3ZuX2NtZCBjb21taXQgLW0gInByb3BzZXQgQ1JMRiBvbiBjciBmaWxlcyInCiBjZCAuLgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggYW5kIHB1bGwgbGF0ZXN0IGZyb20gc3ZuJyBcCiAJJ2dpdCBzdm4gZmV0Y2ggJiYgZ2l0IHB1bGwgLiAke3JlbW90ZXNfZ2l0X3N2bn0nCkBAIC0xNDAsMTAgKzE0MCwxMCBAQAogCWNkIHRlc3Rfd2MgJiYKIAlta2RpciAtcCBkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeSAmJgogCXRvdWNoIGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5Ly5rZWVwICYmCi0Jc3ZuIGFkZCBkZWVwbHkgJiYKLQlzdm4gdXAgJiYKLQlzdm4gcHJvcHNldCAtUiBzdm46aWdub3JlICduby1zdWNoLWZpbGUqJyAuCi0Jc3ZuIGNvbW1pdCAtbSAncHJvcHNldCBzdm46aWdub3JlJworCXN2bl9jbWQgYWRkIGRlZXBseSAmJgorCXN2bl9jbWQgdXAgJiYKKwlzdm5fY21kIHByb3BzZXQgLVIgc3ZuOmlnbm9yZSAnbm8tc3VjaC1maWxlKicgLgorCXN2bl9jbWQgY29tbWl0IC1tICdwcm9wc2V0IHN2bjppZ25vcmUnCiAJY2QgLi4gJiYKIAlnaXQgc3ZuIHNob3ctaWdub3JlID4gc2hvdy1pZ25vcmUuZ290ICYmCiAJY21wIHNob3ctaWdub3JlLmV4cGVjdCBzaG93LWlnbm9yZS5nb3QKZGlmZiAtLWdpdCBhL3QvdDkxMDItZ2l0LXN2bi1kZWVwLXJtZGlyLnNoIGIvdC90OTEwMi1naXQtc3ZuLWRlZXAtcm1kaXIuc2gKaW5kZXggZTIyMzIxOC4uMDI4ZmIxOSAxMDA3NTUKLS0tIGEvdC90OTEwMi1naXQtc3ZuLWRlZXAtcm1kaXIuc2gKKysrIGIvdC90OTEwMi1naXQtc3ZuLWRlZXAtcm1kaXIuc2gKQEAgLTksNyArOSw3IEBACiAJbWtkaXIgLXAgZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzIgJiYKIAllY2hvIGZvbyA+IGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8xL2ZpbGUgJiYKIAllY2hvIGZvbyA+IGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8yL2Fub3RoZXIgJiYKLQlzdm4gaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIC4gIiRzdm5yZXBvIiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIC4gIiRzdm5yZXBvIiAmJgogCWNkIC4uCiAJJwogCkBAIC0yMyw3ICsyMyw3IEBACiAJZ2l0IHJtIC1mIGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8yL2Fub3RoZXIgJiYKIAlnaXQgY29tbWl0IC1hIC1tICJyZW1vdmUgYW5vdGhlciIgJiYKIAlnaXQgc3ZuIHNldC10cmVlIC0tcm1kaXIgSEVBRCAmJgotCXN2biBscyAtUiAiJHN2bnJlcG8iIHwgZ3JlcCBeZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzEKKwlzdm5fY21kIGxzIC1SICIkc3ZucmVwbyIgfCBncmVwIF5kZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMQogCScKIAogCmRpZmYgLS1naXQgYS90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaCBiL3QvdDkxMDMtZ2l0LXN2bi10cmFja2VkLWRpcmVjdG9yeS1yZW1vdmVkLnNoCmluZGV4IDk2M2RkOTUuLjM0MTMxNjQgMTAwNzU1Ci0tLSBhL3QvdDkxMDMtZ2l0LXN2bi10cmFja2VkLWRpcmVjdG9yeS1yZW1vdmVkLnNoCisrKyBiL3QvdDkxMDMtZ2l0LXN2bi10cmFja2VkLWRpcmVjdG9yeS1yZW1vdmVkLnNoCkBAIC0xMCwxNSArMTAsMTUgQEAKIAlta2RpciBpbXBvcnQgJiYKIAlta2RpciBpbXBvcnQvdHJ1bmsgJiYKIAllY2hvIGhlbGxvID4+IGltcG9ydC90cnVuay9SRUFETUUgJiYKLQlzdm4gaW1wb3J0IC1tIGluaXRpYWwgaW1wb3J0ICIkc3ZucmVwbyIgJiYKKwlzdm5fY21kIGltcG9ydCAtbSBpbml0aWFsIGltcG9ydCAiJHN2bnJlcG8iICYmCiAJcm0gLXJmIGltcG9ydCAmJgotCXN2biBjbyAiJHN2bnJlcG8iL3RydW5rIHRydW5rICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rIHRydW5rICYmCiAJZWNobyBieWUgYnllID4+IHRydW5rL1JFQURNRSAmJgotCXN2biBybSAtbSAiZ29uZSIgIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgcm0gLW0gImdvbmUiICIkc3ZucmVwbyIvdHJ1bmsgJiYKIAlybSAtcmYgdHJ1bmsgJiYKIAlta2RpciB0cnVuayAmJgogCWVjaG8gIm5ldyIgPiB0cnVuay9GT0xMT1dNRSAmJgotCXN2biBpbXBvcnQgLW0gIm5ldyB0cnVuayIgdHJ1bmsgIiRzdm5yZXBvIi90cnVuaworCXN2bl9jbWQgaW1wb3J0IC1tICJuZXcgdHJ1bmsiIHRydW5rICIkc3ZucmVwbyIvdHJ1bmsKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVwbyB3aXRoIGdpdCcgJwpkaWZmIC0tZ2l0IGEvdC90OTEwNC1naXQtc3ZuLWZvbGxvdy1wYXJlbnQuc2ggYi90L3Q5MTA0LWdpdC1zdm4tZm9sbG93LXBhcmVudC5zaAppbmRleCBhYjlmYTMyLi43ODYxMGI2IDEwMDc1NQotLS0gYS90L3Q5MTA0LWdpdC1zdm4tZm9sbG93LXBhcmVudC5zaAorKysgYi90L3Q5MTA0LWdpdC1zdm4tZm9sbG93LXBhcmVudC5zaApAQCAtMTEsMTggKzExLDE4IEBACiAJY2QgaW1wb3J0ICYmCiAJbWtkaXIgLXAgdHJ1bmsgJiYKIAllY2hvIGhlbGxvID4gdHJ1bmsvcmVhZG1lICYmCi0Jc3ZuIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIiAmJgogCWNkIC4uICYmCi0Jc3ZuIGNvICIkc3ZucmVwbyIgd2MgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgd2MgJiYKIAljZCB3YyAmJgogCWVjaG8gd29ybGQgPj4gdHJ1bmsvcmVhZG1lICYmCiAJcG9rZSB0cnVuay9yZWFkbWUgJiYKLQlzdm4gY29tbWl0IC1tICJhbm90aGVyIGNvbW1pdCIgJiYKLQlzdm4gdXAgJiYKLQlzdm4gbXYgdHJ1bmsgdGh1bmsgJiYKKwlzdm5fY21kIGNvbW1pdCAtbSAiYW5vdGhlciBjb21taXQiICYmCisJc3ZuX2NtZCB1cCAmJgorCXN2bl9jbWQgbXYgdHJ1bmsgdGh1bmsgJiYKIAllY2hvIGdvb2RieWUgPj4gdGh1bmsvcmVhZG1lICYmCiAJcG9rZSB0aHVuay9yZWFkbWUgJiYKLQlzdm4gY29tbWl0IC1tICJieWUgbm93IiAmJgorCXN2bl9jbWQgY29tbWl0IC1tICJieWUgbm93IiAmJgogCWNkIC4uCiAJJwogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IGRlbGV0ZWQgcGFyZW50JyAnCi0gICAgICAgIChzdm4gY3AgLW0gInJlc3VycmVjdGluZyB0cnVuayBhcyBqdW5rIiBcCisgICAgICAgIChzdm5fY21kIGNwIC1tICJyZXN1cnJlY3RpbmcgdHJ1bmsgYXMganVuayIgXAogICAgICAgICAgICAgICAgIiRzdm5yZXBvIi90cnVua0AyICIkc3ZucmVwbyIvanVuayB8fAogICAgICAgICAgc3ZuIGNwIC1tICJyZXN1cnJlY3RpbmcgdHJ1bmsgYXMganVuayIgXAogICAgICAgICAgICAgICAgLXIyICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9qdW5rKSAmJgpAQCAtOTcsOCArOTcsOCBAQAogICAgICAgICAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBkZWxldGVkIGRpcmVjdG9yeScgJwotCXN2biBtdiAtbSAiYnllISIgIiRzdm5yZXBvIi9nbG9iL2Jsb2IvaGkgIiRzdm5yZXBvIi9nbG9iL2Jsb2IvYnllICYmCi0Jc3ZuIHJtIC1tICJyZW1vdmUgZ2xvYiIgIiRzdm5yZXBvIi9nbG9iICYmCisJc3ZuX2NtZCBtdiAtbSAiYnllISIgIiRzdm5yZXBvIi9nbG9iL2Jsb2IvaGkgIiRzdm5yZXBvIi9nbG9iL2Jsb2IvYnllICYmCisJc3ZuX2NtZCBybSAtbSAicmVtb3ZlIGdsb2IiICIkc3ZucmVwbyIvZ2xvYiAmJgogCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBnbG9iICIkc3ZucmVwbyIvZ2xvYiAmJgogCWdpdCBzdm4gZmV0Y2ggLWkgZ2xvYiAmJgogCXRlc3QgImBnaXQgY2F0LWZpbGUgYmxvYiByZWZzL3JlbW90ZXMvZ2xvYjpibG9iL2J5ZWAiID0gaGkgJiYKQEAgLTEyMCw3ICsxMjAsNyBAQAogCWNkIGltcG9ydCAmJgogCSAgc3ZuIGltcG9ydCAtbSAicjkyNzAgdGVzdCIgLiAiJHN2bnJlcG8iL3I5MjcwICYmCiAJY2QgLi4gJiYKLQlzdm4gY28gIiRzdm5yZXBvIi9yOTI3MC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybCByOTI3MCAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi9yOTI3MC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybCByOTI3MCAmJgogCWNkIHI5MjcwICYmCiAJICBzdm4gbWtkaXIgbmF0aXZlICYmCiAJICBzdm4gbXYgdCBuYXRpdmUvdCAmJgpAQCAtMTM4LDcgKzEzOCw3IEBACiAJJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0cmFjayBpbml0aWFsIGNoYW5nZSBpZiBpdCB3YXMgb25seSBtYWRlIHRvIHBhcmVudCIgJwotCXN2biBjcCAtbSAid2hlZWUhIiAiJHN2bnJlcG8iL3I5MjcwL3RydW5rICIkc3ZucmVwbyIvcjkyNzAvZHJ1bmsgJiYKKwlzdm5fY21kIGNwIC1tICJ3aGVlZSEiICIkc3ZucmVwbyIvcjkyNzAvdHJ1bmsgIiRzdm5yZXBvIi9yOTI3MC9kcnVuayAmJgogCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSByOTI3MC1kIFwKIAkgICIkc3ZucmVwbyIvcjkyNzAvZHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvbmF0aXZlL3QgJiYKIAlnaXQgc3ZuIGZldGNoIC1pIHI5MjcwLWQgJiYKQEAgLTE1MiwyMCArMTUyLDIwIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJmb2xsb3ctcGFyZW50IGlzIGF0b21pYyIgJwogCSgKIAkJY2Qgd2MgJiYKLQkJc3ZuIHVwICYmCi0JCXN2biBta2RpciBzdHVuayAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbWtkaXIgc3R1bmsgJiYKIAkJZWNobyAidHJ1bmsgc3R1bmsiID4gc3R1bmsvcmVhZG1lICYmCi0JCXN2biBhZGQgc3R1bmsvcmVhZG1lICYmCi0JCXN2biBjaSAtbSAidHJ1bmsgc3R1bmsiICYmCisJCXN2bl9jbWQgYWRkIHN0dW5rL3JlYWRtZSAmJgorCQlzdm5fY21kIGNpIC1tICJ0cnVuayBzdHVuayIgJiYKIAkJZWNobyAic3R1bmsgbGlrZSBqdW5rIiA+PiBzdHVuay9yZWFkbWUgJiYKLQkJc3ZuIGNpIC1tICJyZWFsbHkgc3R1bmsiICYmCisJCXN2bl9jbWQgY2kgLW0gInJlYWxseSBzdHVuayIgJiYKIAkJZWNobyAic3Rpbmsgc3Rhbmsgc3R1bmsiID4+IHN0dW5rL3JlYWRtZSAmJgotCQlzdm4gY2kgLW0gImV2ZW4gdGhlIGdyaW5jaCBhZ3JlZXMiCisJCXN2bl9jbWQgY2kgLW0gImV2ZW4gdGhlIGdyaW5jaCBhZ3JlZXMiCiAJKSAmJgotCXN2biBjb3B5IC1tICJzdHVuayBmbHVua2VkIiAiJHN2bnJlcG8iL3N0dW5rICIkc3ZucmVwbyIvZmx1bmsgJiYKKwlzdm5fY21kIGNvcHkgLW0gInN0dW5rIGZsdW5rZWQiICIkc3ZucmVwbyIvc3R1bmsgIiRzdm5yZXBvIi9mbHVuayAmJgogCXsgc3ZuIGNwIC1tICJlYXJseSBzdHVuayBmbHVua2VkIHRvbyIgXAogCQkiJHN2bnJlcG8iL3N0dW5rQDE3ICIkc3ZucmVwbyIvZmx1bmtlZCB8fAotCXN2biBjcCAtbSAiZWFybHkgc3R1bmsgZmx1bmtlZCB0b28iIFwKKwlzdm5fY21kIGNwIC1tICJlYXJseSBzdHVuayBmbHVua2VkIHRvbyIgXAogCQktcjE3ICIkc3ZucmVwbyIvc3R1bmsgIiRzdm5yZXBvIi9mbHVua2VkOyB9ICYmCiAJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIHN0dW5rICIkc3ZucmVwbyIvc3R1bmsgJiYKIAlnaXQgc3ZuIGZldGNoIC1pIHN0dW5rICYmCkBAIC0xOTIsNyArMTkyLDcgQEAKIAknCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgInRyYWNrIG11bHRpLXBhcmVudCBwYXRocyIgJwotCXN2biBjcCAtbSAicmVzdXJyZWN0IC9nbG9iIiAiJHN2bnJlcG8iL3I5MjcwICIkc3ZucmVwbyIvZ2xvYiAmJgorCXN2bl9jbWQgY3AgLW0gInJlc3VycmVjdCAvZ2xvYiIgIiRzdm5yZXBvIi9yOTI3MCAiJHN2bnJlcG8iL2dsb2IgJiYKIAlnaXQgc3ZuIG11bHRpLWZldGNoICYmCiAJdGVzdCBgZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZ2xvYiB8IFwKIAkgICAgICAgZ3JlcCAiXnBhcmVudCAiIHwgd2MgLWxgIC1lcSAyCmRpZmYgLS1naXQgYS90L3Q5MTA1LWdpdC1zdm4tY29tbWl0LWRpZmYuc2ggYi90L3Q5MTA1LWdpdC1zdm4tY29tbWl0LWRpZmYuc2gKaW5kZXggYmE5OWFiYi4uZGQ0OGU5YyAxMDA3NTUKLS0tIGEvdC90OTEwNS1naXQtc3ZuLWNvbW1pdC1kaWZmLnNoCisrKyBiL3QvdDkxMDUtZ2l0LXN2bi1jb21taXQtZGlmZi5zaApAQCAtOCw3ICs4LDcgQEAKIAlta2RpciBpbXBvcnQgJiYKIAljZCBpbXBvcnQgJiYKIAllY2hvIGhlbGxvID4gcmVhZG1lICYmCi0Jc3ZuIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIiAmJgogCWNkIC4uICYmCiAJZWNobyBoZWxsbyA+IHJlYWRtZSAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmVhZG1lICYmCkBAIC0yNywxNiArMjcsMTYgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdGhlIGNvbW1pdC1kaWZmIGNvbW1hbmQnICcKIAl0ZXN0IC1uICIkcHJldiIgJiYgdGVzdCAtbiAiJGhlYWQiICYmCiAJZ2l0IHN2biBjb21taXQtZGlmZiAtcjEgIiRwcmV2IiAiJGhlYWQiICIkc3ZucmVwbyIgJiYKLQlzdm4gY28gIiRzdm5yZXBvIiB3YyAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB3YyAmJgogCWNtcCByZWFkbWUgd2MvcmVhZG1lCiAJJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQtZGlmZiB0byBhIHN1Yi1kaXJlY3RvcnkgKHdpdGggZ2l0IHN2biBjb25maWcpJyAnCi0Jc3ZuIGltcG9ydCAtbSAic3ViLWRpcmVjdG9yeSIgaW1wb3J0ICIkc3ZucmVwbyIvc3ViZGlyICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gInN1Yi1kaXJlY3RvcnkiIGltcG9ydCAiJHN2bnJlcG8iL3N1YmRpciAmJgogCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAiJHN2bnJlcG8iL3N1YmRpciAmJgogCWdpdCBzdm4gZmV0Y2ggJiYKIAlnaXQgc3ZuIGNvbW1pdC1kaWZmIC1yMyAiJHByZXYiICIkaGVhZCIgJiYKLQlzdm4gY2F0ICIkc3ZucmVwbyIvc3ViZGlyL3JlYWRtZSA+IHJlYWRtZS4yICYmCisJc3ZuX2NtZCBjYXQgIiRzdm5yZXBvIi9zdWJkaXIvcmVhZG1lID4gcmVhZG1lLjIgJiYKIAljbXAgcmVhZG1lIHJlYWRtZS4yCiAJJwogCmRpZmYgLS1naXQgYS90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaCBiL3QvdDkxMDYtZ2l0LXN2bi1jb21taXQtZGlmZi1jbG9iYmVyLnNoCmluZGV4IDZlYjBmZDguLjEyZjIxYjcgMTAwNzU1Ci0tLSBhL3QvdDkxMDYtZ2l0LXN2bi1jb21taXQtZGlmZi1jbG9iYmVyLnNoCisrKyBiL3QvdDkxMDYtZ2l0LXN2bi1jb21taXQtZGlmZi1jbG9iYmVyLnNoCkBAIC04LDE4ICs4LDE4IEBACiAJbWtkaXIgaW1wb3J0ICYmCiAJY2QgaW1wb3J0ICYmCiAJZWNobyBpbml0aWFsID4gZmlsZSAmJgotCXN2biBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIgJiYKIAljZCAuLiAmJgogCWVjaG8gaW5pdGlhbCA+IGZpbGUgJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGUgJiYKIAlnaXQgY29tbWl0IC1hIC1tICJpbml0aWFsIgogCScKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBjaGFuZ2UgZnJvbSBzdm4gc2lkZScgJwotCXN2biBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCiAJY2QgdC5zdm4gJiYKIAllY2hvIHNlY29uZCBsaW5lIGZyb20gc3ZuID4+IGZpbGUgJiYKIAlwb2tlIGZpbGUgJiYKLQlzdm4gY29tbWl0IC1tICJzZWNvbmQgbGluZSBmcm9tIHN2biIgJiYKKwlzdm5fY21kIGNvbW1pdCAtbSAic2Vjb25kIGxpbmUgZnJvbSBzdm4iICYmCiAJY2QgLi4gJiYKIAlybSAtcmYgdC5zdm4KIAknCkBAIC00MywxMSArNDMsMTEgQEAKIAlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgogCWdpdCBzdm4gZmV0Y2ggJiYKIAlnaXQgcmVzZXQgLS1oYXJkIHJlZnMvJHtyZW1vdGVzX2dpdF9zdm59ICYmCi0Jc3ZuIGNvICIkc3ZucmVwbyIgdC5zdm4gJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdC5zdm4gJiYKIAljZCB0LnN2biAmJgogCWVjaG8gZm91cnRoIGxpbmUgZnJvbSBzdm4gPj4gZmlsZSAmJgogCXBva2UgZmlsZSAmJgotCXN2biBjb21taXQgLW0gImZvdXJ0aCBsaW5lIGZyb20gc3ZuIiAmJgorCXN2bl9jbWQgY29tbWl0IC1tICJmb3VydGggbGluZSBmcm9tIHN2biIgJiYKIAljZCAuLiAmJgogCXJtIC1yZiB0LnN2biAmJgogCWVjaG8gImZvdXJ0aCBsaW5lIGZyb20gZ2l0IiA+PiBmaWxlICYmCkBAIC02NywxMSArNjcsMTEgQEAKIAkiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBhbm90aGVyIGNoYW5nZSBmcm9tIHN2biBzaWRlJyAnCi0Jc3ZuIGNvICIkc3ZucmVwbyIgdC5zdm4gJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdC5zdm4gJiYKIAljZCB0LnN2biAmJgogCQllY2hvIHRoaXJkIGxpbmUgZnJvbSBzdm4gPj4gZmlsZSAmJgogCQlwb2tlIGZpbGUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAidGhpcmQgbGluZSBmcm9tIHN2biIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRoaXJkIGxpbmUgZnJvbSBzdm4iICYmCiAJY2QgLi4gJiYKIAlybSAtcmYgdC5zdm4KIAknCmRpZmYgLS1naXQgYS90L3Q5MTA3LWdpdC1zdm4tbWlncmF0ZS5zaCBiL3QvdDkxMDctZ2l0LXN2bi1taWdyYXRlLnNoCmluZGV4IGFjYWQxNmEuLjNhOWUwNzcgMTAwNzU1Ci0tLSBhL3QvdDkxMDctZ2l0LXN2bi1taWdyYXRlLnNoCisrKyBiL3QvdDkxMDctZ2l0LXN2bi1taWdyYXRlLnNoCkBAIC0xMiw3ICsxMiw3IEBACiAJCQlta2RpciAtcCAkaSAmJiBcCiAJCQllY2hvIGhlbGxvID4+ICRpL1JFQURNRSB8fCBleGl0IDEKIAkJZG9uZSAmJiBcCi0JCXN2biBpbXBvcnQgLW0gdGVzdCAuICIkc3ZucmVwbyIKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gdGVzdCAuICIkc3ZucmVwbyIKIAkJY2QgLi4gJiYKIAlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgogCWdpdCBzdm4gZmV0Y2ggJiYKZGlmZiAtLWdpdCBhL3QvdDkxMDgtZ2l0LXN2bi1nbG9iLnNoIGIvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2gKaW5kZXggZDg1ODJiMS4uZDczMmQzMSAxMDA3NTUKLS0tIGEvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2gKKysrIGIvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2gKQEAgLTE0LDMwICsxNCwzMCBAQAogCW1rZGlyIC1wIHRydW5rL3NyYy9hIHRydW5rL3NyYy9iIHRydW5rL2RvYyAmJgogCWVjaG8gImhlbGxvIHdvcmxkIiA+IHRydW5rL3NyYy9hL3JlYWRtZSAmJgogCWVjaG8gImdvb2RieWUgd29ybGQiID4gdHJ1bmsvc3JjL2IvcmVhZG1lICYmCi0Jc3ZuIGltcG9ydCAtbSAiaW5pdGlhbCIgdHJ1bmsgIiRzdm5yZXBvIi90cnVuayAmJgotCXN2biBjbyAiJHN2bnJlcG8iIHRtcCAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiB0cnVuayAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHRtcCAmJgogCSgKIAkJY2QgdG1wICYmCiAJCW1rZGlyIGJyYW5jaGVzIHRhZ3MgJiYKLQkJc3ZuIGFkZCBicmFuY2hlcyB0YWdzICYmCi0JCXN2biBjcCB0cnVuayBicmFuY2hlcy9zdGFydCAmJgotCQlzdm4gY29tbWl0IC1tICJzdGFydCBhIG5ldyBicmFuY2giICYmCi0JCXN2biB1cCAmJgorCQlzdm5fY21kIGFkZCBicmFuY2hlcyB0YWdzICYmCisJCXN2bl9jbWQgY3AgdHJ1bmsgYnJhbmNoZXMvc3RhcnQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInN0YXJ0IGEgbmV3IGJyYW5jaCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgogCQllY2hvICJoaSIgPj4gYnJhbmNoZXMvc3RhcnQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgYnJhbmNoZXMvc3RhcnQvc3JjL2IvcmVhZG1lICYmCiAJCWVjaG8gImhleSIgPj4gYnJhbmNoZXMvc3RhcnQvc3JjL2EvcmVhZG1lICYmCiAJCXBva2UgYnJhbmNoZXMvc3RhcnQvc3JjL2EvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gImhpIiAmJgotCQlzdm4gdXAgJiYKLQkJc3ZuIGNwIGJyYW5jaGVzL3N0YXJ0IHRhZ3MvZW5kICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJoaSIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGNwIGJyYW5jaGVzL3N0YXJ0IHRhZ3MvZW5kICYmCiAJCWVjaG8gImJ5ZSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCWVjaG8gImF5ZSIgPj4gdGFncy9lbmQvc3JjL2EvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2EvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gInRoZSBlbmQiICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0aGUgZW5kIiAmJgogCQllY2hvICJieWVieWUiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgotCQlzdm4gY29tbWl0IC1tICJub3RoaW5nIHRvIHNlZSBoZXJlIgorCQlzdm5fY21kIGNvbW1pdCAtbSAibm90aGluZyB0byBzZWUgaGVyZSIKIAkpICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi51cmwgIiRzdm5yZXBvIiAmJgogCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXApAQCAtNzIsNyArNzIsNyBAQAogCQljZCB0bXAgJiYKIAkJZWNobyAidHJ5IHRyeSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gInRyeSB0byB0cnkiCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0cnkgdG8gdHJ5IgogCSkgJiYKIAlnaXQgc3ZuIGZldGNoIHR3byAmJgogCXRlc3QgYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvZW5kIHwgd2MgLWxgIC1lcSA2ICYmCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJY2QgdG1wICYmCiAJCWVjaG8gInRyeSB0cnkiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgotCQlzdm4gY29tbWl0IC1tICJ0cnkgdG8gdHJ5IgorCQlzdm5fY21kIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKIAkpICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBmZXRjaCB0aHJlZSAyPiBzdGRlcnIudGhyZWUgJiYKIAl0ZXN0X2NtcCBleHBlY3QudGhyZWUgc3RkZXJyLnRocmVlCmRpZmYgLS1naXQgYS90L3Q5MTA4LWdpdC1zdm4tbXVsdGktZ2xvYi5zaCBiL3QvdDkxMDktZ2l0LXN2bi1tdWx0aS1nbG9iLnNoCnNpbWlsYXJpdHkgaW5kZXggODYlCnJlbmFtZSBmcm9tIHQvdDkxMDgtZ2l0LXN2bi1tdWx0aS1nbG9iLnNoCnJlbmFtZSB0byB0L3Q5MTA5LWdpdC1zdm4tbXVsdGktZ2xvYi5zaAppbmRleCA4Zjc5YzNmLi5jMzE4ZjlmIDEwMDc1NQotLS0gYS90L3Q5MTA4LWdpdC1zdm4tbXVsdGktZ2xvYi5zaAorKysgYi90L3Q5MTA5LWdpdC1zdm4tbXVsdGktZ2xvYi5zaApAQCAtMTQsMzAgKzE0LDMwIEBACiAJbWtkaXIgLXAgdHJ1bmsvc3JjL2EgdHJ1bmsvc3JjL2IgdHJ1bmsvZG9jICYmCiAJZWNobyAiaGVsbG8gd29ybGQiID4gdHJ1bmsvc3JjL2EvcmVhZG1lICYmCiAJZWNobyAiZ29vZGJ5ZSB3b3JsZCIgPiB0cnVuay9zcmMvYi9yZWFkbWUgJiYKLQlzdm4gaW1wb3J0IC1tICJpbml0aWFsIiB0cnVuayAiJHN2bnJlcG8iL3RydW5rICYmCi0Jc3ZuIGNvICIkc3ZucmVwbyIgdG1wICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIHRydW5rICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdG1wICYmCiAJKAogCQljZCB0bXAgJiYKIAkJbWtkaXIgYnJhbmNoZXMgYnJhbmNoZXMvdjEgdGFncyAmJgotCQlzdm4gYWRkIGJyYW5jaGVzIHRhZ3MgJiYKLQkJc3ZuIGNwIHRydW5rIGJyYW5jaGVzL3YxL3N0YXJ0ICYmCi0JCXN2biBjb21taXQgLW0gInN0YXJ0IGEgbmV3IGJyYW5jaCIgJiYKLQkJc3ZuIHVwICYmCisJCXN2bl9jbWQgYWRkIGJyYW5jaGVzIHRhZ3MgJiYKKwkJc3ZuX2NtZCBjcCB0cnVuayBicmFuY2hlcy92MS9zdGFydCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAic3RhcnQgYSBuZXcgYnJhbmNoIiAmJgorCQlzdm5fY21kIHVwICYmCiAJCWVjaG8gImhpIiA+PiBicmFuY2hlcy92MS9zdGFydC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSBicmFuY2hlcy92MS9zdGFydC9zcmMvYi9yZWFkbWUgJiYKIAkJZWNobyAiaGV5IiA+PiBicmFuY2hlcy92MS9zdGFydC9zcmMvYS9yZWFkbWUgJiYKIAkJcG9rZSBicmFuY2hlcy92MS9zdGFydC9zcmMvYS9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiaGkiICYmCi0JCXN2biB1cCAmJgotCQlzdm4gY3AgYnJhbmNoZXMvdjEvc3RhcnQgdGFncy9lbmQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImhpIiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgY3AgYnJhbmNoZXMvdjEvc3RhcnQgdGFncy9lbmQgJiYKIAkJZWNobyAiYnllIiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKIAkJZWNobyAiYXllIiA+PiB0YWdzL2VuZC9zcmMvYS9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL2VuZC9zcmMvYS9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAidGhlIGVuZCIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRoZSBlbmQiICYmCiAJCWVjaG8gImJ5ZWJ5ZSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gIm5vdGhpbmcgdG8gc2VlIGhlcmUiCisJCXN2bl9jbWQgY29tbWl0IC1tICJub3RoaW5nIHRvIHNlZSBoZXJlIgogCSkgJiYKIAlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLnVybCAiJHN2bnJlcG8iICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCkBAIC03Miw3ICs3Miw3IEBACiAJCWNkIHRtcCAmJgogCQllY2hvICJ0cnkgdHJ5IiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRyeSB0byB0cnkiCiAJKSAmJgogCWdpdCBzdm4gZmV0Y2ggdHdvICYmCiAJdGVzdCBgZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmQgfCB3YyAtbGAgLWVxIDYgJiYKQEAgLTk3LDI1ICs5NywyNSBAQAogCSgKIAkJY2QgdG1wICYmCiAJCW1rZGlyIGJyYW5jaGVzL3YyICYmCi0JCXN2biBhZGQgYnJhbmNoZXMvdjIgJiYKLQkJc3ZuIGNwIHRydW5rIGJyYW5jaGVzL3YyL3N0YXJ0ICYmCi0JCXN2biBjb21taXQgLW0gIkFub3RoZXIgdmVyc2lvbmVkIGJyYW5jaCIgJiYKLQkJc3ZuIHVwICYmCisJCXN2bl9jbWQgYWRkIGJyYW5jaGVzL3YyICYmCisJCXN2bl9jbWQgY3AgdHJ1bmsgYnJhbmNoZXMvdjIvc3RhcnQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkFub3RoZXIgdmVyc2lvbmVkIGJyYW5jaCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgogCQllY2hvICJoZWxsbyIgPj4gYnJhbmNoZXMvdjIvc3RhcnQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgYnJhbmNoZXMvdjIvc3RhcnQvc3JjL2IvcmVhZG1lICYmCiAJCWVjaG8gImhvd2R5IiA+PiBicmFuY2hlcy92Mi9zdGFydC9zcmMvYS9yZWFkbWUgJiYKIAkJcG9rZSBicmFuY2hlcy92Mi9zdGFydC9zcmMvYS9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiQ2hhbmdlZCAyIGluIHYyL3N0YXJ0IiAmJgotCQlzdm4gdXAgJiYKLQkJc3ZuIGNwIGJyYW5jaGVzL3YyL3N0YXJ0IHRhZ3MvbmV4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiQ2hhbmdlZCAyIGluIHYyL3N0YXJ0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgY3AgYnJhbmNoZXMvdjIvc3RhcnQgdGFncy9uZXh0ICYmCiAJCWVjaG8gImJ5ZSIgPj4gdGFncy9uZXh0L3NyYy9iL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvbmV4dC9zcmMvYi9yZWFkbWUgJiYKIAkJZWNobyAiYXllIiA+PiB0YWdzL25leHQvc3JjL2EvcmVhZG1lICYmCiAJCXBva2UgdGFncy9uZXh0L3NyYy9hL3JlYWRtZSAmJgotCQlzdm4gY29tbWl0IC1tICJhZGRpbmcgbW9yZSIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImFkZGluZyBtb3JlIiAmJgogCQllY2hvICJieWVieWUiID4+IHRhZ3MvbmV4dC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSB0YWdzL25leHQvc3JjL2IvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gImFkaW9zIgorCQlzdm5fY21kIGNvbW1pdCAtbSAiYWRpb3MiCiAJKSAmJgogCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5mb3VyLnVybCAiJHN2bnJlcG8iICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLmZvdXIuZmV0Y2ggdHJ1bms6cmVmcy9yZW1vdGVzL2ZvdXIvdHJ1bmsgJiYKQEAgLTE1MSw3ICsxNTEsNyBAQAogCQljZCB0bXAgJiYKIAkJZWNobyAidHJ5IHRyeSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gInRyeSB0byB0cnkiCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0cnkgdG8gdHJ5IgogCSkgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGZldGNoIHRocmVlIDI+IHN0ZGVyci50aHJlZSAmJgogCXRlc3RfY21wIGV4cGVjdC50aHJlZSBzdGRlcnIudGhyZWUKZGlmZiAtLWdpdCBhL3QvdDkxMTMtZ2l0LXN2bi1kY29tbWl0LW5ldy1maWxlLnNoIGIvdC90OTExMy1naXQtc3ZuLWRjb21taXQtbmV3LWZpbGUuc2gKaW5kZXggZTliNjEyOC4uZTg0NzljZSAxMDA3NTUKLS0tIGEvdC90OTExMy1naXQtc3ZuLWRjb21taXQtbmV3LWZpbGUuc2gKKysrIGIvdC90OTExMy1naXQtc3ZuLWRjb21taXQtbmV3LWZpbGUuc2gKQEAgLTE1LDcgKzE1LDcgQEAKIHJlcXVpcmVfc3Zuc2VydmUKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgdHJhY2tpbmcgYW4gZW1wdHkgcmVwbycgJwotCXN2biBta2RpciAtbSAiZW1wdHkgZGlyIiAiJHN2bnJlcG8iL2VtcHR5LWRpciAmJgorCXN2bl9jbWQgbWtkaXIgLW0gImVtcHR5IGRpciIgIiRzdm5yZXBvIi9lbXB0eS1kaXIgJiYKIAllY2hvICJbZ2VuZXJhbF0iID4gIiRyYXdzdm5yZXBvIi9jb25mL3N2bnNlcnZlLmNvbmYgJiYKIAllY2hvIGFub24tYWNjZXNzID0gd3JpdGUgPj4gIiRyYXdzdm5yZXBvIi9jb25mL3N2bnNlcnZlLmNvbmYgJiYKIAlzdGFydF9zdm5zZXJ2ZSAmJgpkaWZmIC0tZ2l0IGEvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2ggYi90L3Q5MTE0LWdpdC1zdm4tZGNvbW1pdC1tZXJnZS5zaAppbmRleCAxN2IyODU1Li44NGY3YzliIDEwMDc1NQotLS0gYS90L3Q5MTE0LWdpdC1zdm4tZGNvbW1pdC1tZXJnZS5zaAorKysgYi90L3Q5MTE0LWdpdC1zdm4tZGNvbW1pdC1tZXJnZS5zaApAQCAtMzUsMTIgKzM1LDEyIEBACiB9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2biByZXBvc2l0b3J5JyAnCi0Jc3ZuIGNvICIkc3ZucmVwbyIgbXlzdm53b3JrICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIG15c3Zud29yayAmJgogCW1rZGlyIC1wIG15c3Zud29yay90cnVuayAmJgogCWNkIG15c3Zud29yayAmJgogCQliaWdfdGV4dF9ibG9jayA+PiB0cnVuay9SRUFETUUgJiYKLQkJc3ZuIGFkZCB0cnVuayAmJgotCQlzdm4gY2kgLW0gImZpcnN0IGNvbW1pdCIgdHJ1bmsgJiYKKwkJc3ZuX2NtZCBhZGQgdHJ1bmsgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiZmlyc3QgY29tbWl0IiB0cnVuayAmJgogCQljZCAuLgogCScKIApkaWZmIC0tZ2l0IGEvdC90OTExNi1naXQtc3ZuLWxvZy5zaCBiL3QvdDkxMTYtZ2l0LXN2bi1sb2cuc2gKaW5kZXggZmQ2ZDFkMi4uMDM3NGE3NCAxMDA3NTUKLS0tIGEvdC90OTExNi1naXQtc3ZuLWxvZy5zaAorKysgYi90L3Q5MTE2LWdpdC1zdm4tbG9nLnNoCkBAIC0xNCw3ICsxNCw3IEBACiAJCQlta2RpciAtcCAkaSAmJiBcCiAJCQllY2hvIGhlbGxvID4+ICRpL1JFQURNRSB8fCBleGl0IDEKIAkJZG9uZSAmJiBcCi0JCXN2biBpbXBvcnQgLW0gdGVzdCAuICIkc3ZucmVwbyIKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gdGVzdCAuICIkc3ZucmVwbyIKIAkJY2QgLi4gJiYKIAlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAtVCB0cnVuayAtYiBicmFuY2hlcyAtdCB0YWdzICYmCiAJZ2l0IHN2biBmZXRjaCAmJgpkaWZmIC0tZ2l0IGEvdC90OTExNy1naXQtc3ZuLWluaXQtY2xvbmUuc2ggYi90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaAppbmRleCBkZGU0NmNkLi5iN2VmOWUyIDEwMDc1NQotLS0gYS90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaAorKysgYi90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaApAQCAtMTYsNyArMTYsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJwogCW1rZGlyIHByb2plY3QgcHJvamVjdC90cnVuayBwcm9qZWN0L2JyYW5jaGVzIHByb2plY3QvdGFncyAmJgogCWVjaG8gZm9vID4gcHJvamVjdC90cnVuay9mb28gJiYKLQlzdm4gaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8iL3Byb2plY3QgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvIi9wcm9qZWN0ICYmCiAJcm0gLXJmIHByb2plY3QKIAknCiAKZGlmZiAtLWdpdCBhL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2ggYi90L3Q5MTE4LWdpdC1zdm4tZnVua3ktYnJhbmNoLW5hbWVzLnNoCmluZGV4IDdhN2MxMjguLmFjNTJiZmYgMTAwNzU1Ci0tLSBhL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2gKKysrIGIvdC90OTExOC1naXQtc3ZuLWZ1bmt5LWJyYW5jaC1uYW1lcy5zaApAQCAtMTMsMTMgKzEzLDEzIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCiAJbWtkaXIgcHJvamVjdCBwcm9qZWN0L3RydW5rIHByb2plY3QvYnJhbmNoZXMgcHJvamVjdC90YWdzICYmCiAJZWNobyBmb28gPiBwcm9qZWN0L3RydW5rL2ZvbyAmJgotCXN2biBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wciBqZWN0IiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8vcHIgamVjdCIgJiYKIAlybSAtcmYgcHJvamVjdCAmJgotCXN2biBjcCAtbSAiZnVuIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCXN2bl9jbWQgY3AgLW0gImZ1biIgIiRzdm5yZXBvL3ByIGplY3QvdHJ1bmsiIFwKIAkgICAgICAgICAgICAgICAgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpbiIgJiYKLQlzdm4gY3AgLW0gIm1vcmUgZnVuISIgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpbiIgXAorCXN2bl9jbWQgY3AgLW0gIm1vcmUgZnVuISIgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpbiIgXAogCSAgICAgICAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9tb3JlIGZ1biBwbHVnaW4hIiAmJgotCXN2biBjcCAtbSAic2NhcnkiICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL2Z1biBwbHVnaW4iIFwKKwlzdm5fY21kIGNwIC1tICJzY2FyeSIgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpbiIgXAogCSAgICAgICAgICAgICAgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvJHNjYXJ5X3VyaSIgJiYKIAlzdGFydF9odHRwZAogCScKZGlmZiAtLWdpdCBhL3QvdDkxMTktZ2l0LXN2bi1pbmZvLnNoIGIvdC90OTExOS1naXQtc3ZuLWluZm8uc2gKaW5kZXggMjdkZDdjMi4uOTU3NDFjYiAxMDA3NTUKLS0tIGEvdC90OTExOS1naXQtc3ZuLWluZm8uc2gKKysrIGIvdC90OTExOS1naXQtc3ZuLWluZm8uc2gKQEAgLTcsNyArNyw3IEBACiAuIC4vbGliLWdpdC1zdm4uc2gKIAogIyBUZXN0ZWQgd2l0aDogc3ZuLCB2ZXJzaW9uIDEuNC40IChyMjUxODgpCi12PWBzdm4gLS12ZXJzaW9uIHwgc2VkIC1uIC1lICdzL15zdm4sIHZlcnNpb24gXCgxXC5bMC05XSpcLlswLTldKlwpLiokL1wxL3AnYAordj1gc3ZuX2NtZCAtLXZlcnNpb24gfCBzZWQgLW4gLWUgJ3MvXnN2biwgdmVyc2lvbiBcKDFcLlswLTldKlwuWzAtOV0qXCkuKiQvXDEvcCdgCiBjYXNlICR2IGluCiAxLls0NV0uKikKIAk7OwpAQCAtMzEsNyArMzEsNyBAQAogCQkJbXkgJGF0aW1lID0gJG10aW1lOwogCQkJdXRpbWUgJGF0aW1lLCAkbXRpbWUsICRnaXRfZmlsZTsKIAkJfQotCScgImBzdm4gaW5mbyAkMiB8IGdyZXAgJ15UZXh0IExhc3QgVXBkYXRlZDonYCIgIiQxIgorCScgImBzdm5fY21kIGluZm8gJDIgfCBncmVwICdeVGV4dCBMYXN0IFVwZGF0ZWQ6J2AiICIkMSIKIH0KIAogcXVvdGVkX3N2bnJlcG89IiQoZWNobyAkc3ZucmVwbyB8IHNlZCAncy8gLyUyMC8nKSIKQEAgLTQ1LDE0ICs0NSwxNCBAQAogCQlta2RpciBkaXJlY3RvcnkgJiYKIAkJdG91Y2ggZGlyZWN0b3J5Ly5wbGFjZWhvbGRlciAmJgogCQlsbiAtcyBkaXJlY3Rvcnkgc3ltbGluay1kaXJlY3RvcnkgJiYKLQkJc3ZuIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIgJiYKIAljZCAuLiAmJgotCXN2biBjbyAiJHN2bnJlcG8iIHN2bndjICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHN2bndjICYmCiAJY2Qgc3Zud2MgJiYKIAkJZWNobyBmb28gPiBmb28gJiYKLQkJc3ZuIGFkZCBmb28gJiYKLQkJc3ZuIGNvbW1pdCAtbSAiY2hhbmdlIG91dHNpZGUgZGlyZWN0b3J5IiAmJgotCQlzdm4gdXBkYXRlICYmCisJCXN2bl9jbWQgYWRkIGZvbyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY2hhbmdlIG91dHNpZGUgZGlyZWN0b3J5IiAmJgorCQlzdm5fY21kIHVwZGF0ZSAmJgogCWNkIC4uICYmCiAJbWtkaXIgZ2l0d2MgJiYKIAljZCBnaXR3YyAmJgpAQCAtMTQzLDcgKzE0Myw3IEBACiAJY3AgZ2l0d2MvYWRkZWQtZmlsZSBzdm53Yy9hZGRlZC1maWxlICYmCiAJcHRvdWNoIGdpdHdjL2FkZGVkLWZpbGUgc3Zud2MvYWRkZWQtZmlsZSAmJgogCWNkIHN2bndjICYmCi0JCXN2biBhZGQgYWRkZWQtZmlsZSA+IC9kZXYvbnVsbCAmJgorCQlzdm5fY21kIGFkZCBhZGRlZC1maWxlID4gL2Rldi9udWxsICYmCiAJY2QgLi4gJiYKIAkoY2Qgc3Zud2M7IHN2biBpbmZvIGFkZGVkLWZpbGUpID4gZXhwZWN0ZWQuaW5mby1hZGRlZC1maWxlICYmCiAJKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gYWRkZWQtZmlsZSkgPiBhY3R1YWwuaW5mby1hZGRlZC1maWxlICYmCkBAIC0xNjAsNyArMTYwLDcgQEAKIAlwdG91Y2ggZ2l0d2MvYWRkZWQtZGlyZWN0b3J5IHN2bndjL2FkZGVkLWRpcmVjdG9yeSAmJgogCXRvdWNoIGdpdHdjL2FkZGVkLWRpcmVjdG9yeS8ucGxhY2Vob2xkZXIgJiYKIAljZCBzdm53YyAmJgotCQlzdm4gYWRkIGFkZGVkLWRpcmVjdG9yeSA+IC9kZXYvbnVsbCAmJgorCQlzdm5fY21kIGFkZCBhZGRlZC1kaXJlY3RvcnkgPiAvZGV2L251bGwgJiYKIAljZCAuLiAmJgogCWNkIGdpdHdjICYmCiAJCWdpdCBhZGQgYWRkZWQtZGlyZWN0b3J5ICYmCkBAIC0xODQsNyArMTg0LDcgQEAKIAljZCAuLiAmJgogCWNkIHN2bndjICYmCiAJCWxuIC1zIGFkZGVkLWZpbGUgYWRkZWQtc3ltbGluay1maWxlICYmCi0JCXN2biBhZGQgYWRkZWQtc3ltbGluay1maWxlID4gL2Rldi9udWxsICYmCisJCXN2bl9jbWQgYWRkIGFkZGVkLXN5bWxpbmstZmlsZSA+IC9kZXYvbnVsbCAmJgogCWNkIC4uICYmCiAJcHRvdWNoIGdpdHdjL2FkZGVkLXN5bWxpbmstZmlsZSBzdm53Yy9hZGRlZC1zeW1saW5rLWZpbGUgJiYKIAkoY2Qgc3Zud2M7IHN2biBpbmZvIGFkZGVkLXN5bWxpbmstZmlsZSkgXApAQCAtMjA3LDcgKzIwNyw3IEBACiAJY2QgLi4gJiYKIAljZCBzdm53YyAmJgogCQlsbiAtcyBhZGRlZC1kaXJlY3RvcnkgYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKLQkJc3ZuIGFkZCBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSA+IC9kZXYvbnVsbCAmJgorCQlzdm5fY21kIGFkZCBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSA+IC9kZXYvbnVsbCAmJgogCWNkIC4uICYmCiAJcHRvdWNoIGdpdHdjL2FkZGVkLXN5bWxpbmstZGlyZWN0b3J5IHN2bndjL2FkZGVkLXN5bWxpbmstZGlyZWN0b3J5ICYmCiAJKGNkIHN2bndjOyBzdm4gaW5mbyBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSkgXApAQCAtMjMzLDcgKzIzMyw3IEBACiAJCWdpdCBybSAtZiBmaWxlID4gL2Rldi9udWxsICYmCiAJY2QgLi4gJiYKIAljZCBzdm53YyAmJgotCQlzdm4gcm0gLS1mb3JjZSBmaWxlID4gL2Rldi9udWxsICYmCisJCXN2bl9jbWQgcm0gLS1mb3JjZSBmaWxlID4gL2Rldi9udWxsICYmCiAJY2QgLi4gJiYKIAkoY2Qgc3Zud2M7IHN2biBpbmZvIGZpbGUpIHwKIAlzZWQgLWUgJ3MvXlwoVGV4dCBMYXN0IFVwZGF0ZWQ6XCkuKi9cMSBURVhULUxBU1QtVVBEQVRFRC1TVFJJTkcvJyBcCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkJZ2l0IHJtIC1yIC1mIGRpcmVjdG9yeSA+IC9kZXYvbnVsbCAmJgogCWNkIC4uICYmCiAJY2Qgc3Zud2MgJiYKLQkJc3ZuIHJtIC0tZm9yY2UgZGlyZWN0b3J5ID4gL2Rldi9udWxsICYmCisJCXN2bl9jbWQgcm0gLS1mb3JjZSBkaXJlY3RvcnkgPiAvZGV2L251bGwgJiYKIAljZCAuLiAmJgogCShjZCBzdm53Yzsgc3ZuIGluZm8gZGlyZWN0b3J5KSB8CiAJc2VkIC1lICdzL15cKFRleHQgTGFzdCBVcGRhdGVkOlwpLiovXDEgVEVYVC1MQVNULVVQREFURUQtU1RSSU5HLycgXApAQCAtMjc1LDcgKzI3NSw3IEBACiAJCWdpdCBybSAtZiBzeW1saW5rLWZpbGUgPiAvZGV2L251bGwgJiYKIAljZCAuLiAmJgogCWNkIHN2bndjICYmCi0JCXN2biBybSAtLWZvcmNlIHN5bWxpbmstZmlsZSA+IC9kZXYvbnVsbCAmJgorCQlzdm5fY21kIHJtIC0tZm9yY2Ugc3ltbGluay1maWxlID4gL2Rldi9udWxsICYmCiAJY2QgLi4gJiYKIAkoY2Qgc3Zud2M7IHN2biBpbmZvIHN5bWxpbmstZmlsZSkgfAogCXNlZCAtZSAncy9eXChUZXh0IExhc3QgVXBkYXRlZDpcKS4qL1wxIFRFWFQtTEFTVC1VUERBVEVELVNUUklORy8nIFwKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCQlnaXQgcm0gLWYgc3ltbGluay1kaXJlY3RvcnkgPiAvZGV2L251bGwgJiYKIAljZCAuLiAmJgogCWNkIHN2bndjICYmCi0JCXN2biBybSAtLWZvcmNlIHN5bWxpbmstZGlyZWN0b3J5ID4gL2Rldi9udWxsICYmCisJCXN2bl9jbWQgcm0gLS1mb3JjZSBzeW1saW5rLWRpcmVjdG9yeSA+IC9kZXYvbnVsbCAmJgogCWNkIC4uICYmCiAJKGNkIHN2bndjOyBzdm4gaW5mbyBzeW1saW5rLWRpcmVjdG9yeSkgfAogCXNlZCAtZSAncy9eXChUZXh0IExhc3QgVXBkYXRlZDpcKS4qL1wxIFRFWFQtTEFTVC1VUERBVEVELVNUUklORy8nIFwKZGlmZiAtLWdpdCBhL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaCBiL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaAppbmRleCBlZjJjMDUyLi5mMTU5YWI2IDEwMDc1NQotLS0gYS90L3Q5MTIwLWdpdC1zdm4tY2xvbmUtd2l0aC1wZXJjZW50LWVzY2FwZXMuc2gKKysrIGIvdC90OTEyMC1naXQtc3ZuLWNsb25lLXdpdGgtcGVyY2VudC1lc2NhcGVzLnNoCkBAIC05LDIyICs5LDE3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCiAJbWtkaXIgcHJvamVjdCBwcm9qZWN0L3RydW5rIHByb2plY3QvYnJhbmNoZXMgcHJvamVjdC90YWdzICYmCiAJZWNobyBmb28gPiBwcm9qZWN0L3RydW5rL2ZvbyAmJgotCXN2biBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wciBqZWN0IiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8vcHIgamVjdCIgJiYKIAlybSAtcmYgcHJvamVjdCAmJgogCXN0YXJ0X2h0dHBkCiAnCiAKLWlmIHRlc3QgIiRTVk5fSFRUUERfUE9SVCIgPSAiIgotdGhlbgotCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3Rlc3QgY2xvbmUgd2l0aCBwZXJjZW50IGVzY2FwZXMgLSBuZWVkcyBTVk5fSFRUUERfUE9SVCBzZXQnICdmYWxzZScKLWVsc2UKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIHdpdGggcGVyY2VudCBlc2NhcGVzJyAnCi0JCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvL3ByJTIwamVjdCIgY2xvbmUgJiYKLQkJY2QgY2xvbmUgJiYKLQkJCWdpdCByZXYtcGFyc2UgcmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0gJiYKLQkJY2QgLi4KLQknCi1maQordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB3aXRoIHBlcmNlbnQgZXNjYXBlcycgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvL3ByJTIwamVjdCIgY2xvbmUgJiYKKwljZCBjbG9uZSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvJHtyZW1vdGVzX2dpdF9zdm59ICYmCisJY2QgLi4KKycKIAogc3RvcF9odHRwZAogCmRpZmYgLS1naXQgYS90L3Q5MTIyLWdpdC1zdm4tYXV0aG9yLnNoIGIvdC90OTEyMi1naXQtc3ZuLWF1dGhvci5zaAppbmRleCAxYjFjZjQ3Li4zMDAxM2I3IDEwMDc1NQotLS0gYS90L3Q5MTIyLWdpdC1zdm4tYXV0aG9yLnNoCisrKyBiL3QvdDkxMjItZ2l0LXN2bi1hdXRob3Iuc2gKQEAgLTQsMTIgKzQsMTIgQEAKIC4gLi9saWItZ2l0LXN2bi5zaAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm4gcmVwb3NpdG9yeScgJwotCXN2biBjaGVja291dCAiJHN2bnJlcG8iIHdvcmsuc3ZuICYmCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8iIHdvcmsuc3ZuICYmCiAJKAogCQljZCB3b3JrLnN2biAmJgogCQllY2hvID5maWxlCi0JCXN2biBhZGQgZmlsZQotCQlzdm4gY29tbWl0IC1tICJmaXJzdCBjb21taXQiIGZpbGUKKwkJc3ZuX2NtZCBhZGQgZmlsZQorCQlzdm5fY21kIGNvbW1pdCAtbSAiZmlyc3QgY29tbWl0IiBmaWxlCiAJKQogJwogCkBAIC03NCwxMCArNzQsMTAgQEAKIAkjIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3ZuIGNvbW1pdCBtZXNzYWdlcyB3aXRoIGV4Y2VzcyBibGFuayBsaW5lcwogCSgKIAkJY2Qgd29yay5zdm4gJiYKLQkJc3ZuIHVwICYmCisJCXN2bl9jbWQgdXAgJiYKIAkJCi0JCXRlc3QgJChzdm4gbG9nIC1yMjoyIHwgd2MgLWwpID0gNSAmJgotCQl0ZXN0ICQoc3ZuIGxvZyAtcjQ6NCB8IHdjIC1sKSA9IDcKKwkJdGVzdCAkKHN2bl9jbWQgbG9nIC1yMjoyIHwgd2MgLWwpID0gNSAmJgorCQl0ZXN0ICQoc3ZuX2NtZCBsb2cgLXI0OjQgfCB3YyAtbCkgPSA3CiAJKQogJwogCmRpZmYgLS1naXQgYS90L3Q5MTIzLWdpdC1zdm4tcmVidWlsZC13aXRoLXJld3JpdGVyb290LnNoIGIvdC90OTEyMy1naXQtc3ZuLXJlYnVpbGQtd2l0aC1yZXdyaXRlcm9vdC5zaAppbmRleCBjZjA0MTUyLi4wNDU1MjE2IDEwMDc1NQotLS0gYS90L3Q5MTIzLWdpdC1zdm4tcmVidWlsZC13aXRoLXJld3JpdGVyb290LnNoCisrKyBiL3QvdDkxMjMtZ2l0LXN2bi1yZWJ1aWxkLXdpdGgtcmV3cml0ZXJvb3Quc2gKQEAgLTEwLDcgKzEwLDcgQEAKIG1rZGlyIGltcG9ydAogY2QgaW1wb3J0CiAJdG91Y2ggZm9vCi0Jc3ZuIGltcG9ydCAtbSAnaW1wb3J0IGZvciBnaXQgc3ZuJyAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbAorCXN2bl9jbWQgaW1wb3J0IC1tICdpbXBvcnQgZm9yIGdpdCBzdm4nIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsCiBjZCAuLgogcm0gLXJmIGltcG9ydAogCmRpZmYgLS1naXQgYS90L3Q5MTI0LWdpdC1zdm4tZGNvbW1pdC1hdXRvLXByb3BzLnNoIGIvdC90OTEyNC1naXQtc3ZuLWRjb21taXQtYXV0by1wcm9wcy5zaAppbmRleCAyNjNkYmY1Li5kNmIwNzZmIDEwMDc1NQotLS0gYS90L3Q5MTI0LWdpdC1zdm4tZGNvbW1pdC1hdXRvLXByb3BzLnNoCisrKyBiL3QvdDkxMjQtZ2l0LXN2bi1kY29tbWl0LWF1dG8tcHJvcHMuc2gKQEAgLTIxLDcgKzIxLDcgQEAKIAkoCiAJCWNkIGltcG9ydCAmJgogCQllY2hvIGZvbyA+Zm9vICYmCi0JCXN2biBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgLiAiJHN2bnJlcG8iCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIC4gIiRzdm5yZXBvIgogCSkgJiYKIAlybSAtcmYgaW1wb3J0ICYmCiAJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIKQEAgLTYxLDIzICs2MSwyMyBAQAogKAogCW1rZGlyIHdvcmsgJiYKIAljZCB3b3JrICYmCi0Jc3ZuIGNvICIkc3ZucmVwbyIgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgJiYKIAljZCBzdm5yZXBvICYmCiAKIAkjIENoZWNrIHByb3BlcnRpZXMgZnJvbSBmaXJzdCBjb21taXQuCi0JdGVzdCAieCQoc3ZuIHByb3BnZXQgc3ZuOmV4ZWN1dGFibGUgZXhlYzEuc2gpIiA9ICJ4KiIgJiYKLQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46bWltZS10eXBlIGV4ZWMxLnNoKSIgPSBcCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjpleGVjdXRhYmxlIGV4ZWMxLnNoKSIgPSAieCoiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgZXhlYzEuc2gpIiA9IFwKIAkgICAgICJ4YXBwbGljYXRpb24veC1zaGVsbHNjcmlwdCIgJiYKLQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46bWltZS10eXBlIGhlbGxvLnR4dCkiID0gInh0ZXh0L3BsYWluIiAmJgotCXRlc3QgIngkKHN2biBwcm9wZ2V0IHN2bjplb2wtc3R5bGUgaGVsbG8udHh0KSIgPSAieG5hdGl2ZSIgJiYKLQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46bWltZS10eXBlIGJhcikiID0gIngiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgaGVsbG8udHh0KSIgPSAieHRleHQvcGxhaW4iICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjplb2wtc3R5bGUgaGVsbG8udHh0KSIgPSAieG5hdGl2ZSIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBiYXIpIiA9ICJ4IiAmJgogCiAJIyBDaGVjayBwcm9wZXJ0aWVzIGZyb20gc2Vjb25kIGNvbW1pdC4KLQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46ZXhlY3V0YWJsZSBleGVjMi5zaCkiID0gIngqIiAmJgotCXRlc3QgIngkKHN2biBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgZXhlYzIuc2gpIiA9ICJ4IiAmJgotCXRlc3QgIngkKHN2biBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgd29ybGQudHh0KSIgPSAieCIgJiYKLQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46ZW9sLXN0eWxlIHdvcmxkLnR4dCkiID0gIngiICYmCi0JdGVzdCAieCQoc3ZuIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSB6b3QpIiA9ICJ4IgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZXhlY3V0YWJsZSBleGVjMi5zaCkiID0gIngqIiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIGV4ZWMyLnNoKSIgPSAieCIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSB3b3JsZC50eHQpIiA9ICJ4IiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZW9sLXN0eWxlIHdvcmxkLnR4dCkiID0gIngiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgem90KSIgPSAieCIKICkKICcKIApAQCAtODksMTIgKzg5LDEyIEBACiAJZ2l0IHN2biBkY29tbWl0IC0tY29uZmlnLWRpcj11c2VyICYmCiAJKAogCQljZCB3b3JrL3N2bnJlcG8gJiYKLQkJc3ZuIHVwICYmCisJCXN2bl9jbWQgdXAgJiYKIAkJdGVzdCAhIC1lIGZvbyAmJgogCQl0ZXN0IC1lIGZvby5zaCAmJgotCQl0ZXN0ICJ4JChzdm4gcHJvcGdldCBzdm46bWltZS10eXBlIGZvby5zaCkiID0gXAorCQl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBmb28uc2gpIiA9IFwKIAkJICAgICAieGFwcGxpY2F0aW9uL3gtc2hlbGxzY3JpcHQiICYmCi0JCXRlc3QgIngkKHN2biBwcm9wZ2V0IHN2bjplb2wtc3R5bGUgZm9vLnNoKSIgPSAieExGIgorCQl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOmVvbC1zdHlsZSBmb28uc2gpIiA9ICJ4TEYiCiAJKQogJwogCmRpZmYgLS1naXQgYS90L3Q5MTI1LWdpdC1zdm4tbXVsdGktZ2xvYi1icmFuY2gtbmFtZXMuc2ggYi90L3Q5MTI1LWdpdC1zdm4tbXVsdGktZ2xvYi1icmFuY2gtbmFtZXMuc2gKaW5kZXggNDc1Yzc1MS4uYzE5NDE4NiAxMDA3NTUKLS0tIGEvdC90OTEyNS1naXQtc3ZuLW11bHRpLWdsb2ItYnJhbmNoLW5hbWVzLnNoCisrKyBiL3QvdDkxMjUtZ2l0LXN2bi1tdWx0aS1nbG9iLWJyYW5jaC1uYW1lcy5zaApAQCAtOCwxMSArOCwxMSBAQAogCW1rZGlyIHByb2plY3QgcHJvamVjdC90cnVuayBwcm9qZWN0L2JyYW5jaGVzIFwKIAkJCXByb2plY3QvYnJhbmNoZXMvdjE0LjEgcHJvamVjdC90YWdzICYmCiAJZWNobyBmb28gPiBwcm9qZWN0L3RydW5rL2ZvbyAmJgotCXN2biBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wcm9qZWN0IiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8vcHJvamVjdCIgJiYKIAlybSAtcmYgcHJvamVjdCAmJgotCXN2biBjcCAtbSAiZnVuIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCXN2bl9jbWQgY3AgLW0gImZ1biIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKIAkgICAgICAgICAgICAgICAgIiRzdm5yZXBvL3Byb2plY3QvYnJhbmNoZXMvdjE0LjEvYmV0YSIgJiYKLQlzdm4gY3AgLW0gIm1vcmUgZnVuISIgIiRzdm5yZXBvL3Byb2plY3QvYnJhbmNoZXMvdjE0LjEvYmV0YSIgXAorCXN2bl9jbWQgY3AgLW0gIm1vcmUgZnVuISIgIiRzdm5yZXBvL3Byb2plY3QvYnJhbmNoZXMvdjE0LjEvYmV0YSIgXAogCSAgICAgICAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHJvamVjdC9icmFuY2hlcy92MTQuMS9nb2xkIgogCScKIApkaWZmIC0tZ2l0IGEvdC90OTEyNy1naXQtc3ZuLXBhcnRpYWwtcmVidWlsZC5zaCBiL3QvdDkxMjctZ2l0LXN2bi1wYXJ0aWFsLXJlYnVpbGQuc2gKaW5kZXggODc2OTZhOS4uNGFhYjhlYyAxMDA3NTUKLS0tIGEvdC90OTEyNy1naXQtc3ZuLXBhcnRpYWwtcmVidWlsZC5zaAorKysgYi90L3Q5MTI3LWdpdC1zdm4tcGFydGlhbC1yZWJ1aWxkLnNoCkBAIC0xNCwyMSArMTQsMjEgQEAKIAkJY2QgdHJ1bmsgJiYKIAkJZWNobyBmb28gPiBmb28gJiYKIAkJY2QgLi4gJiYKLQkJc3ZuIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQtc3ZuIiAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbCAmJgotCQlzdm4gY29weSAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYSBcCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdC1zdm4iIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsICYmCisJCXN2bl9jbWQgY29weSAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYSBcCiAJCQktbSAiY3JlYXRlZCBicmFuY2ggYSIgJiYKIAkJY2QgLi4gJiYKIAkJcm0gLXJmIGltcG9ydCAmJgotCQlzdm4gY28gIiRzdm5yZXBvIi90cnVuayB0cnVuayAmJgorCQlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgdHJ1bmsgJiYKIAkJY2QgdHJ1bmsgJiYKIAkJZWNobyBiYXIgPj4gZm9vICYmCi0JCXN2biBjaSAtbSAidXBkYXRlZCB0cnVuayIgJiYKKwkJc3ZuX2NtZCBjaSAtbSAidXBkYXRlZCB0cnVuayIgJiYKIAkJY2QgLi4gJiYKLQkJc3ZuIGNvICIkc3ZucmVwbyIvYnJhbmNoZXMvYSBhICYmCisJCXN2bl9jbWQgY28gIiRzdm5yZXBvIi9icmFuY2hlcy9hIGEgJiYKIAkJY2QgYSAmJgogCQllY2hvIGJheiA+PiBhICYmCi0JCXN2biBhZGQgYSAmJgotCQlzdm4gY2kgLW0gInVwZGF0ZWQgYSIgJiYKKwkJc3ZuX2NtZCBhZGQgYSAmJgorCQlzdm5fY21kIGNpIC1tICJ1cGRhdGVkIGEiICYmCiAJCWNkIC4uICYmCiAJCWdpdCBzdm4gaW5pdCAtLXN0ZGxheW91dCAiJHN2bnJlcG8iCiAJKQpkaWZmIC0tZ2l0IGEvdC90OTEyOC1naXQtc3ZuLWNtZC1icmFuY2guc2ggYi90L3Q5MTI4LWdpdC1zdm4tY21kLWJyYW5jaC5zaAppbmRleCAyNTJkYWE3Li44MDdlNDk0IDEwMDc1NQotLS0gYS90L3Q5MTI4LWdpdC1zdm4tY21kLWJyYW5jaC5zaAorKysgYi90L3Q5MTI4LWdpdC1zdm4tY21kLWJyYW5jaC5zaApAQCAtMTQsMTMgKzE0LDEzIEBACiAJCWNkIHRydW5rICYmCiAJCWVjaG8gZm9vID4gZm9vICYmCiAJCWNkIC4uICYmCi0JCXN2biBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0LXN2biIgLiAiJHN2bnJlcG8iID4vZGV2L251bGwgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0LXN2biIgLiAiJHN2bnJlcG8iID4vZGV2L251bGwgJiYKIAkJY2QgLi4gJiYKIAkJcm0gLXJmIGltcG9ydCAmJgotCQlzdm4gY28gIiRzdm5yZXBvIi90cnVuayB0cnVuayAmJgorCQlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgdHJ1bmsgJiYKIAkJY2QgdHJ1bmsgJiYKIAkJZWNobyBiYXIgPj4gZm9vICYmCi0JCXN2biBjaSAtbSAidXBkYXRlZCB0cnVuayIgJiYKKwkJc3ZuX2NtZCBjaSAtbSAidXBkYXRlZCB0cnVuayIgJiYKIAkJY2QgLi4gJiYKIAkJcm0gLXJmIHRydW5rCiAJKQpAQCAtNTcsMTQgKzU3LDE0IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCB1c2VzIGNvcnJlY3Qgc3ZuLXJlbW90ZScgJwotCShzdm4gY28gIiRzdm5yZXBvIiBzdm4gJiYKKwkoc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHN2biAmJgogCWNkIHN2biAmJgogCW1rZGlyIG1pcnJvciAmJgotCXN2biBhZGQgbWlycm9yICYmCi0Jc3ZuIGNvcHkgdHJ1bmsgbWlycm9yLyAmJgotCXN2biBjb3B5IHRhZ3MgbWlycm9yLyAmJgotCXN2biBjb3B5IGJyYW5jaGVzIG1pcnJvci8gJiYKLQlzdm4gY2kgLW0gIm1hZGUgbWlycm9yIiApICYmCisJc3ZuX2NtZCBhZGQgbWlycm9yICYmCisJc3ZuX2NtZCBjb3B5IHRydW5rIG1pcnJvci8gJiYKKwlzdm5fY21kIGNvcHkgdGFncyBtaXJyb3IvICYmCisJc3ZuX2NtZCBjb3B5IGJyYW5jaGVzIG1pcnJvci8gJiYKKwlzdm5fY21kIGNpIC1tICJtYWRlIG1pcnJvciIgKSAmJgogCXJtIC1yZiBzdm4gJiYKIAlnaXQgc3ZuIGluaXQgLXMgLVIgbWlycm9yIC0tcHJlZml4PW1pcnJvci8gIiRzdm5yZXBvIi9taXJyb3IgJiYKIAlnaXQgc3ZuIGZldGNoIC1SIG1pcnJvciAmJgpkaWZmIC0tZ2l0IGEvdC90OTEyOS1naXQtc3ZuLWkxOG4tY29tbWl0ZW5jb2Rpbmcuc2ggYi90L3Q5MTI5LWdpdC1zdm4taTE4bi1jb21taXRlbmNvZGluZy5zaAppbmRleCA4YTlkZGU0Li5iOTIyNGJkIDEwMDc1NQotLS0gYS90L3Q5MTI5LWdpdC1zdm4taTE4bi1jb21taXRlbmNvZGluZy5zaAorKysgYi90L3Q5MTI5LWdpdC1zdm4taTE4bi1jb21taXRlbmNvZGluZy5zaApAQCAtMTUsMjEgKzE1LDMwIEBACiB9CiAKIGNvbXBhcmVfc3ZuX2hlYWRfd2l0aCAoKSB7Ci0JTENfQUxMPWVuX1VTLlVURi04IHN2biBsb2cgLS1saW1pdCAxIGBnaXQgc3ZuIGluZm8gLS11cmxgIHwgXAotCQlzZWQgLWUgMSwzZCAtZSAiL14tXHsxLFx9XCQvZCIgPmN1cnJlbnQgJiYKKwkjIGV4dHJhY3QganVzdCB0aGUgbG9nIG1lc3NhZ2UgYW5kIHN0cmlwIG91dCBjb21taXR0ZXIgaW5mby4KKwkjIGRvbid0IHVzZSAtLWxpbWl0IGhlcmUgc2luY2Ugc3ZuIDEuMS54IGRvZXNuJ3QgaGF2ZSBpdCwKKwlMQ19BTEw9ZW5fVVMuVVRGLTggc3ZuIGxvZyBgZ2l0IHN2biBpbmZvIC0tdXJsYCB8IHBlcmwgLXcgLWUgJworCQl1c2UgYnl0ZXM7CisJCSQvID0gKCItIng3MikgLiAiXG4iOworCQlteSBAeCA9IDxTVERJTj47CisJCUB4ID0gc3BsaXQoL1xuLywgJHhbMV0pOworCQlzcGxpY2UoQHgsIDAsIDIpOworCQkkeFstMV0gPSAiIjsKKwkJcHJpbnQgam9pbigiXG4iLCBAeCk7CisJJyA+IGN1cnJlbnQgJiYKIAl0ZXN0X2NtcCBjdXJyZW50ICIkMSIKIH0KIAotZm9yIEggaW4gSVNPLTg4NTktMSBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNldHVwIiAnCiAJCW1rZGlyICRIICYmCi0JCXN2biBpbXBvcnQgLW0gIiRIIHRlc3QiICRIICIkc3ZucmVwbyIvJEggJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gIiRIIHRlc3QiICRIICIkc3ZucmVwbyIvJEggJiYKIAkJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iLyRIICRICiAJJwogZG9uZQogCi1mb3IgSCBpbiBJU08tODg1OS0xIEVVQ0pQIElTTy0yMDIyLUpQCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAgSVNPLTIwMjItSlAKIGRvCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggY29tbWl0IG9uIGdpdCBzaWRlIiAnCiAJKApAQCAtNDYsNyArNTUsNyBAQAogCScKIGRvbmUKIAotZm9yIEggaW4gSVNPLTg4NTktMSBFVUNKUCBJU08tMjAyMi1KUAorZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIGRjb21taXQgdG8gc3ZuIiAnCiAJKApAQCAtNjEsMjQgKzcwLDI2IEBACiBkb25lCiAKIGlmIGxvY2FsZSAtYSB8Z3JlcCAtcSBlbl9VUy51dGY4OyB0aGVuCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAnSVNPLTg4NTktMSBzaG91bGQgbWF0Y2ggVVRGLTggaW4gc3ZuJyAnCisJdGVzdF9zZXRfcHJlcmVxIFVURjgKK2Vsc2UKKwlzYXkgIlVURi04IGxvY2FsZSBub3QgYXZhaWxhYmxlLCB0ZXN0IHNraXBwZWQiCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFVURjggJ0lTTy04ODU5LTEgc2hvdWxkIG1hdGNoIFVURi04IGluIHN2bicgJwogCSgKLQkJY2QgSVNPLTg4NTktMSAmJgorCQljZCBJU084ODU5LTEgJiYKIAkJY29tcGFyZV9zdm5faGVhZF93aXRoICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0CiAJKQotCScKKycKIAotCWZvciBIIGluIEVVQ0pQIElTTy0yMDIyLUpQCi0JZG8KLQkJdGVzdF9leHBlY3Rfc3VjY2VzcyAnJEggc2hvdWxkIG1hdGNoIFVURi04IGluIHN2bicgJworZm9yIEggaW4gZXVjSlAgSVNPLTIwMjItSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVVEY4ICIkSCBzaG91bGQgbWF0Y2ggVVRGLTggaW4gc3ZuIiAnCiAJCSgKIAkJCWNkICRIICYmCiAJCQljb21wYXJlX3N2bl9oZWFkX3dpdGggIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMi1VVEYtOC50eHQKIAkJKQotCQknCi0JZG9uZQotZWxzZQotCXNheSAiVVRGLTggbG9jYWxlIG5vdCBhdmFpbGFibGUsIHRlc3Qgc2tpcHBlZCIKLWZpCisJJworZG9uZQogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzAtZ2l0LXN2bi1hdXRob3JzLWZpbGUuc2ggYi90L3Q5MTMwLWdpdC1zdm4tYXV0aG9ycy1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1YWJkYjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTMwLWdpdC1zdm4tYXV0aG9ycy1maWxlLnNoCkBAIC0wLDAgKzEsOTQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gYXV0aG9ycyBmaWxlIHRlc3RzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworY2F0ID4gc3ZuLWF1dGhvcnMgPDxFT0YKK2FhID0gQUFBQUFBQSBBQUFBQUFBIDxhYUBleGFtcGxlLmNvbT4KK2JiID0gQkJCQkJCQiBCQkJCQkJCIDxiYkBleGFtcGxlLmNvbT4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCisJZm9yIGkgaW4gYWEgYmIgY2MgZGQKKwlkbworCQlzdm5fY21kIG1rZGlyIC1tICRpIC0tdXNlcm5hbWUgJGkgIiRzdm5yZXBvIi8kaQorCWRvbmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IGltcG9ydCB3aXRoIGluY29tcGxldGUgYXV0aG9ycyBmaWxlJyAnCisJISBnaXQgc3ZuIGNsb25lIC0tYXV0aG9ycy1maWxlPXN2bi1hdXRob3JzICIkc3ZucmVwbyIgeAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0ZWQgMiByZXZpc2lvbnMgc3VjY2Vzc2Z1bGx5JyAnCisJKAorCQljZCB4CisJCXRlc3QgImBnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL2dpdC1zdm4gfCB3YyAtbGAiIC1lcSAyICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm4gfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBCQkJCQkJCIEJCQkJCQkIgPGJiQGV4YW1wbGVcLmNvbT4gIiAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjEgfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBBQUFBQUFBIEFBQUFBQUEgPGFhQGV4YW1wbGVcLmNvbT4gIgorCSkKKwknCisKK2NhdCA+PiBzdm4tYXV0aG9ycyA8PEVPRgorY2MgPSBDQ0NDQ0NDIENDQ0NDQ0MgPGNjQGV4YW1wbGUuY29tPgorZGQgPSBEREREREREIEREREREREQgPGRkQGV4YW1wbGUuY29tPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbnRpbnVlcyB0byBpbXBvcnQgb25jZSBhdXRob3JzIGhhdmUgYmVlbiBhZGRlZCcgJworCSgKKwkJY2QgeAorCQlnaXQgc3ZuIGZldGNoIC0tYXV0aG9ycy1maWxlPS4uL3N2bi1hdXRob3JzICYmCisJCXRlc3QgImBnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL2dpdC1zdm4gfCB3YyAtbGAiIC1lcSA0ICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm4gfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBEREREREREIEREREREREQgPGRkQGV4YW1wbGVcLmNvbT4gIiAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjEgfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBDQ0NDQ0NDIENDQ0NDQ0MgPGNjQGV4YW1wbGVcLmNvbT4gIgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvcnMtZmlsZSBhZ2FpbnN0IGdsb2JzJyAnCisJc3ZuX2NtZCBta2RpciAtbSBnbG9icyAtLXVzZXJuYW1lIGFhIFwKKwkgICIkc3ZucmVwbyIvYWEvdHJ1bmsgIiRzdm5yZXBvIi9hYS9icmFuY2hlcyAiJHN2bnJlcG8iL2FhL3RhZ3MgJiYKKwlnaXQgc3ZuIGNsb25lIC0tYXV0aG9ycy1maWxlPXN2bi1hdXRob3JzIC1zICIkc3ZucmVwbyIvYWEgYWEtd29yayAmJgorCWZvciBpIGluIGJiIGVlIGNjCisJZG8KKwkJYnJhbmNoPSJhYS9icmFuY2hlcy8kaSIKKwkJc3ZuX2NtZCBta2RpciAtbSAiJGJyYW5jaCIgLS11c2VybmFtZSAkaSAiJHN2bnJlcG8vJGJyYW5jaCIKKwlkb25lCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmYWlscyBvbiBlZScgJworCSggY2QgYWEtd29yayAmJiAhIGdpdCBzdm4gZmV0Y2ggLS1hdXRob3JzLWZpbGU9Li4vc3ZuLWF1dGhvcnMgKQorCScKKwordG1wX2NvbmZpZ19nZXQgKCkgeworCUdJVF9DT05GSUc9LmdpdC9zdm4vLm1ldGFkYXRhIGdpdCBjb25maWcgLS1nZXQgIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsdXJlIGhhcHBlbmVkIHdpdGhvdXQgbmVnYXRpdmUgc2lkZSBlZmZlY3RzJyAnCisJKAorCQljZCBhYS13b3JrICYmCisJCXRlc3QgNiAtZXEgImB0bXBfY29uZmlnX2dldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcy1tYXhSZXZgIiAmJgorCQl0ZXN0IDYgLWVxICJgdG1wX2NvbmZpZ19nZXQgc3ZuLXJlbW90ZS5zdm4udGFncy1tYXhSZXZgIgorCSkKKwknCisKK2NhdCA+PiBzdm4tYXV0aG9ycyA8PEVPRgorZWUgPSBFRUVFRUVFIEVFRUVFRUUgPGVlQGV4YW1wbGUuY29tPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNvbnRpbnVlcyBhZnRlciBhdXRob3JzLWZpbGUgaXMgZml4ZWQnICcKKwkoCisJCWNkIGFhLXdvcmsgJiYKKwkJZ2l0IHN2biBmZXRjaCAtLWF1dGhvcnMtZmlsZT0uLi9zdm4tYXV0aG9ycyAmJgorCQl0ZXN0IDggLWVxICJgdG1wX2NvbmZpZ19nZXQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMtbWF4UmV2YCIgJiYKKwkJdGVzdCA4IC1lcSAiYHRtcF9jb25maWdfZ2V0IHN2bi1yZW1vdGUuc3ZuLnRhZ3MtbWF4UmV2YCIKKwkpCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzEtZ2l0LXN2bi1lbXB0eS1zeW1saW5rLnNoIGIvdC90OTEzMS1naXQtc3ZuLWVtcHR5LXN5bWxpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWEyNGE2NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzEtZ2l0LXN2bi1lbXB0eS1zeW1saW5rLnNoCkBAIC0wLDAgKzEsMTEwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB0aGF0IGdpdCBoYW5kbGVzIGFuIHN2biByZXBvc2l0b3J5IHdpdGggZW1wdHkgc3ltbGlua3MnCisKKy4gLi9saWItZ2l0LXN2bi5zaAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcGZpbGUnICcKKwlzdm5hZG1pbiBsb2FkICIkcmF3c3ZucmVwbyIgPDxFT0YKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IDYwNzgwZjlhLTdkZjUtNDNiNC04M2FiLTYwZTJjMDY3M2VmNworCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0xMS0yNlQwNzoxNzoyNy41OTA1NzdaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDQKK3Rlc3QKK0sgMTAKK3N2bjphdXRob3IKK1YgMTIKK25vcm1hbHBlcnNvbgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0xMS0yNlQwNzoxODowMy41MTE4MzZaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMzMKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitDb250ZW50LWxlbmd0aDogMzMKKworSyAxMQorc3ZuOnNwZWNpYWwKK1YgMQorKgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAxMworYmFyID0+IGRvaW5rCisKK0sgMTAKK3N2bjphdXRob3IKK1YgMTIKK25vcm1hbHBlcnNvbgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0xMS0yN1QwMzo1NTozMS42MDE2NzJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1tZDU6IDkyY2E0ZmU3YTk3MjFmODc3Zjc2NWMyNTJkY2Q2NmM5CitDb250ZW50LWxlbmd0aDogMTAKKworbGluayBkb2luaworCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgZ2l0IHN2bicgJ2dpdCBzdm4gY2xvbmUgLXIxICIkc3ZucmVwbyIgeCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VuYWJsZSBicm9rZW4gc3ltbGluayB3b3JrYXJvdW5kJyBcCisgICcoY2QgeCAmJiBnaXQgY29uZmlnIHN2bi5icm9rZW5TeW1saW5rV29ya2Fyb3VuZCB0cnVlKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJiYXIiIGlzIGFuIGVtcHR5IGZpbGUnICd0ZXN0IC1mIHgvYmFyICYmICEgdGVzdCAtcyB4L2JhcicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAiYmFyIiA9PiBzeW1saW5rIGZpeCBmcm9tIHN2bicgXAorCQknKGNkIHggJiYgZ2l0IHN2biByZWJhc2UpJwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnImJhciIgYmVjb21lcyBhIHN5bWxpbmsnICd0ZXN0IC1MIHgvYmFyJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIGdpdCBzdm4nICdnaXQgc3ZuIGNsb25lIC1yMSAiJHN2bnJlcG8iIHknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhYmxlIGJyb2tlbiBzeW1saW5rIHdvcmthcm91bmQnIFwKKyAgJyhjZCB5ICYmIGdpdCBjb25maWcgc3ZuLmJyb2tlblN5bWxpbmtXb3JrYXJvdW5kIGZhbHNlKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJiYXIiIGlzIGFuIGVtcHR5IGZpbGUnICd0ZXN0IC1mIHkvYmFyICYmICEgdGVzdCAtcyB5L2JhcicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAiYmFyIiA9PiBzeW1saW5rIGZpeCBmcm9tIHN2bicgXAorCQknKGNkIHkgJiYgZ2l0IHN2biByZWJhc2UpJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImJhciIgZG9lcyBub3QgYmVjb21lIGEgc3ltbGluaycgJyEgdGVzdCAtTCB5L2JhcicKKworIyBzdm4uYnJva2VuU3ltbGlua1dvcmthcm91bmQgaXMgdW5zZXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIGdpdCBzdm4nICdnaXQgc3ZuIGNsb25lIC1yMSAiJHN2bnJlcG8iIHonCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYmFyIiBpcyBhbiBlbXB0eSBmaWxlJyAndGVzdCAtZiB6L2JhciAmJiAhIHRlc3QgLXMgei9iYXInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgImJhciIgPT4gc3ltbGluayBmaXggZnJvbSBzdm4nIFwKKwkJJyhjZCB6ICYmIGdpdCBzdm4gcmViYXNlKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJiYXIiIGRvZXMgbm90IGJlY29tZSBhIHN5bWxpbmsnICchIHRlc3QgLUwgei9iYXInCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTMyLWdpdC1zdm4tYnJva2VuLXN5bWxpbmsuc2ggYi90L3Q5MTMyLWdpdC1zdm4tYnJva2VuLXN5bWxpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmM0YzkwYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzItZ2l0LXN2bi1icm9rZW4tc3ltbGluay5zaApAQCAtMCwwICsxLDEwMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdGhhdCBnaXQgaGFuZGxlcyBhbiBzdm4gcmVwb3NpdG9yeSB3aXRoIGVtcHR5IHN5bWxpbmtzJworCisuIC4vbGliLWdpdC1zdm4uc2gKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIGR1bXBmaWxlJyAnCisJc3ZuYWRtaW4gbG9hZCAiJHJhd3N2bnJlcG8iIDw8RU9GCitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiA2MDc4MGY5YS03ZGY1LTQzYjQtODNhYi02MGUyYzA2NzNlZjcKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMTEtMjZUMDc6MTc6MjcuNTkwNTc3WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTExCitDb250ZW50LWxlbmd0aDogMTExCisKK0sgNworc3ZuOmxvZworViA0Cit0ZXN0CitLIDEwCitzdm46YXV0aG9yCitWIDEyCitub3JtYWxwZXJzb24KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMTEtMjZUMDc6MTg6MDMuNTExODM2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDMzCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiA5MTJlYzgwM2IyY2U0OWU0YTU0MTA2OGQ0OTVhYjU3MAorQ29udGVudC1sZW5ndGg6IDM3CisKK0sgMTEKK3N2bjpzcGVjaWFsCitWIDEKKyoKK1BST1BTLUVORAorYXNkZgorCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMTMKK2JhciA9PiBkb2luaworCitLIDEwCitzdm46YXV0aG9yCitWIDEyCitub3JtYWxwZXJzb24KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMTEtMjdUMDM6NTU6MzEuNjAxNjcyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbWQ1OiA5MmNhNGZlN2E5NzIxZjg3N2Y3NjVjMjUyZGNkNjZjOQorQ29udGVudC1sZW5ndGg6IDEwCisKK2xpbmsgZG9pbmsKKworRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIGdpdCBzdm4nICdnaXQgc3ZuIGNsb25lIC1yMSAiJHN2bnJlcG8iIHgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJyJiYXIiIGlzIGEgc3ltbGluayB0aGF0IHBvaW50cyB0byAiYXNkZiInICcKKwl0ZXN0IC1MIHgvYmFyICYmCisJKGNkIHggJiYgdGVzdCB4YXNkZiA9IHgiYGdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6YmFyYCIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAiYmFyIiA9PiBzeW1saW5rIGZpeCBmcm9tIHN2bicgJworCShjZCB4ICYmIGdpdCBzdm4gcmViYXNlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICciYmFyIiByZW1haW5zIGEgcHJvcGVyIHN5bWxpbmsnICcKKwl0ZXN0IC1MIHgvYmFyICYmCisJKGNkIHggJiYgdGVzdCB4ZG9pbmsgPSB4ImBnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOmJhcmAiKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzMtZ2l0LXN2bi1uZXN0ZWQtZ2l0LXJlcG8uc2ggYi90L3Q5MTMzLWdpdC1zdm4tbmVzdGVkLWdpdC1yZXBvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYzYzMwZTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTMzLWdpdC1zdm4tbmVzdGVkLWdpdC1yZXBvLnNoCkBAIC0wLDAgKzEsMTAxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHByb3BlcnR5IHRlc3RzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBhIGdpdCByZXBvIGluc2lkZSBpdCcgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzICYmCisJKAorCQljZCBzICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3QgLWYgLmdpdC9IRUFEICYmCisJCT4gLmdpdC9hICYmCisJCWVjaG8gYSA+IGEgJiYKKwkJc3ZuX2NtZCBhZGQgLmdpdCBhICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjcmVhdGUgYSBuZXN0ZWQgZ2l0IHJlcG8iICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyBoaSA+PiAuZ2l0L2EgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSAuZ2l0L2EiICYmCisJCXN2bl9jbWQgdXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGFuIFNWTiByZXBvIGNvbnRhaW5pbmcgYSBnaXQgcmVwbycgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiBnICYmCisJZWNobyBhID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGcvYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiAuZ2l0JyAnCisJKAorCQljZCBzICYmCisJCWVjaG8gYiA+PiBhICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiAuZ2l0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIC5naXQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbycgJworCSgKKwkJY2QgZyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQllY2hvIGEgPiBleHBlY3QgJiYKKwkJZWNobyBiID4+IGV4cGVjdCAmJgorCQl0ZXN0X2NtcCBhIGV4cGVjdCAmJgorCQlybSBleHBlY3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2YgLmdpdCcgJworCSgKKwkJY2QgcyAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgaW5zaWRlIGFuIFNWTiByZXBvIiAmJgorCQlnaXQgbG9nICYmCisJCXN2bl9jbWQgYWRkIC0tZm9yY2UgLmdpdCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiAuZ2l0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2YgLmdpdCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvJyAnCisJKAorCQljZCBnICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCWVjaG8gYSA+IGV4cGVjdCAmJgorCQllY2hvIGIgPj4gZXhwZWN0ICYmCisJCXRlc3RfY21wIGEgZXhwZWN0ICYmCisJCXJtIGV4cGVjdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgLmdpdCcgJworCSgKKwkJY2QgcyAmJgorCQllY2hvIGMgPj4gYSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgaW5zaWRlIGFuIFNWTiByZXBvIiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgLmdpdCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW4gYW5kIG91dCBvZiAuZ2l0IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gYWdhaW4nICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJZWNobyBhID4gZXhwZWN0ICYmCisJCWVjaG8gYiA+PiBleHBlY3QgJiYKKwkJZWNobyBjID4+IGV4cGVjdCAmJgorCQl0ZXN0X2NtcCBhIGV4cGVjdCAmJgorCQlybSBleHBlY3QKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzNC1naXQtc3ZuLWlnbm9yZS1wYXRocy5zaCBiL3QvdDkxMzQtZ2l0LXN2bi1pZ25vcmUtcGF0aHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDlmZjEwYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzQtZ2l0LXN2bi1pZ25vcmUtcGF0aHMuc2gKQEAgLTAsMCArMSwxNDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgVml0YWx5IFNodWtlbGEKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHByb3BlcnR5IHRlc3RzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzICYmCisJKAorCQljZCBzICYmCisJCW1rZGlyIHFxcSB3d3cgJiYKKwkJZWNobyB0ZXN0X3FxcSA+IHFxcS90ZXN0X3FxcS50eHQgJiYKKwkJZWNobyB0ZXN0X3d3dyA+IHd3dy90ZXN0X3d3dy50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgcXFxICYmCisJCXN2bl9jbWQgYWRkIHd3dyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIHNvbWUgZmlsZXMiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyBoaSA+PiB3d3cvdGVzdF93d3cudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJtb2RpZnkgd3d3L3Rlc3Rfd3d3LnR4dCIgJiYKKwkJc3ZuX2NtZCB1cAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgYW4gU1ZOIHJlcG9zaXRvcnkgd2l0aCBpZ25vcmVkIHd3dyBkaXJlY3RvcnknICcKKwlnaXQgc3ZuIGNsb25lIC0taWdub3JlLXBhdGhzPSJed3d3IiAiJHN2bnJlcG8iIGcgJiYKKwllY2hvIHRlc3RfcXFxID4gZXhwZWN0ICYmCisJZm9yIGkgaW4gZy8qLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCXRlc3RfY21wIGV4cGVjdCBleHBlY3QyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQrZmV0Y2ggYW4gU1ZOIHJlcG9zaXRvcnkgd2l0aCBpZ25vcmVkIHd3dyBkaXJlY3RvcnknICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiBjICYmCisJKCBjZCBjICYmIGdpdCBzdm4gZmV0Y2ggLS1pZ25vcmUtcGF0aHM9Il53d3ciICkgJiYKKwlybSBleHBlY3QyICYmCisJZWNobyB0ZXN0X3FxcSA+IGV4cGVjdCAmJgorCWZvciBpIGluIGMvKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhwZWN0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgaWdub3JlLXBhdGhzIGNvbmZpZyBzYXZlZCBieSBjbG9uZScgJworCSgKKwkgICAgY2QgZyAmJgorCSAgICBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmlnbm9yZS1wYXRocyB8IGZncmVwICJ3d3ciCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiB3d3cnICcKKwkoCisJCWNkIHMgJiYKKwkJZWNobyBiID4+IHFxcS90ZXN0X3FxcS50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIHd3dyIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiB3d3ciCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyAoY29uZmlnIGlnbm9yZSknICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gKG9wdGlvbiBpZ25vcmUpJyAnCisJKAorCQljZCBjICYmCisJCWdpdCBzdm4gcmViYXNlIC0taWdub3JlLXBhdGhzPSJed3d3IiAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIGlnbm9yZWQgd3d3JyAnCisJKAorCQljZCBzICYmCisJCWVjaG8gemFxID4+IHd3dy90ZXN0X3d3dy50eHQKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2Ygd3d3L3Rlc3Rfd3d3LnR4dCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIHd3dy90ZXN0X3d3dy50eHQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyAoY29uZmlnIGlnbm9yZSknICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gKG9wdGlvbiBpZ25vcmUpJyAnCisJKAorCQljZCBjICYmCisJCWdpdCBzdm4gcmViYXNlIC0taWdub3JlLXBhdGhzPSJed3d3IiAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2UgaW4gYW5kIG91dCBvZiBpZ25vcmVkIHd3dycgJworCSgKKwkJY2QgcyAmJgorCQllY2hvIGN2ZiA+PiB3d3cvdGVzdF93d3cudHh0CisJCWVjaG8geWdnID4+IHFxcS90ZXN0X3FxcS50eHQKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIGlnbm9yZWQgd3d3IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIGlnbm9yZWQgd3d3IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gYWdhaW4gKGNvbmZpZyBpZ25vcmUpJyAnCisJKAorCQljZCBnICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbnlnZ1xuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gYWdhaW4gKG9wdGlvbiBpZ25vcmUpJyAnCisJKAorCQljZCBjICYmCisJCWdpdCBzdm4gcmViYXNlIC0taWdub3JlLXBhdGhzPSJed3d3IiAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG55Z2dcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzNS1naXQtc3ZuLW1vdmVkLWJyYW5jaC1lbXB0eS1maWxlLnNoIGIvdC90OTEzNS1naXQtc3ZuLW1vdmVkLWJyYW5jaC1lbXB0eS1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAzNzA1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM1LWdpdC1zdm4tbW92ZWQtYnJhbmNoLWVtcHR5LWZpbGUuc2gKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgbW92ZWQgc3ZuIGJyYW5jaCB3aXRoIG1pc3NpbmcgZW1wdHkgZmlsZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcGZpbGUnICAnCisJc3ZuYWRtaW4gbG9hZCAiJHJhd3N2bnJlcG8iIDwgIiR7VEVTVF9ESVJFQ1RPUll9L3Q5MTM1L3N2bi5kdW1wIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgZ2l0IHN2bicgJ2dpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIiB4JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRoYXQgYjEgZXhpc3RzIGFuZCBpcyBlbXB0eScgJworCShjZCB4ICYmIHRlc3QgLWYgYjEgJiYgISB0ZXN0IC1zIGIxKQorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTM1L3N2bi5kdW1wIGIvdC90OTEzNS9zdm4uZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTFjMGNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzNS9zdm4uZHVtcApAQCAtMCwwICsxLDE5MiBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogMWY4MGU5MTktZTllMy00ZDgwLWEzYWUtZDlmMjEwOTVlMjdiCisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjE2LjQyNDAyN1oKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMworQ29udGVudC1sZW5ndGg6IDEyMworCitLIDcKK3N2bjpsb2cKK1YgMjAKK2luaXQgc3RhbmRhcmQgbGF5b3V0CitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjE3LjE5NTA3MloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMTgKK2JyYW5jaC1iIG9mZiB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0xMFQxOToyMzoxOS4xNjAwOTVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9icmFuY2gtYgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzNAorQ29udGVudC1sZW5ndGg6IDM0CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMAorQ29udGVudC1sZW5ndGg6IDEyMAorCitLIDcKK3N2bjpsb2cKK1YgMTcKK2FkZCBlbXB0eSBmaWxlIGIxCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjIwLjE5NDU2OFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JyYW5jaC1iL2IxCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCitUZXh0LWNvbnRlbnQtbWQ1OiBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViA4CiticmFuY2gtYworSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0xMFQxOToyMzoyMS4xNjkxMDBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9icmFuY2gtYworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiA1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjYKK0NvbnRlbnQtbGVuZ3RoOiAxMjYKKworSyA3Citzdm46bG9nCitWIDIzCitvb3BzLCB3cm9uZyBicmFuY2hwb2ludAorSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0xMFQxOToyMzoyMS4yNTM1NTdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9icmFuY2gtYworTm9kZS1hY3Rpb246IGRlbGV0ZQorCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTI3CitDb250ZW50LWxlbmd0aDogMTI3CisKK0sgNworc3ZuOmxvZworViAyNAorYnJhbmNoLWMgb2ZmIG9mIGJyYW5jaC1iCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjIxLjMxNDY1OVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JyYW5jaC1jCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDUKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvYnJhbmNoLWIKK1Byb3AtY29udGVudC1sZW5ndGg6IDM0CitDb250ZW50LWxlbmd0aDogMzQKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAwCisKK1BST1BTLUVORAorCisKZGlmZiAtLWdpdCBhL3QvdDkxMzYtZ2l0LXN2bi1yZWNyZWF0ZWQtYnJhbmNoLWVtcHR5LWZpbGUuc2ggYi90L3Q5MTM2LWdpdC1zdm4tcmVjcmVhdGVkLWJyYW5jaC1lbXB0eS1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczM2QxNmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM2LWdpdC1zdm4tcmVjcmVhdGVkLWJyYW5jaC1lbXB0eS1maWxlLnNoCkBAIC0wLDAgKzEsMTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHJlY3JlYXRlZCBzdm4gYnJhbmNoIHdpdGggZW1wdHkgZmlsZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcGZpbGUnICAnCisJc3ZuYWRtaW4gbG9hZCAiJHJhd3N2bnJlcG8iIDwgIiR7VEVTVF9ESVJFQ1RPUll9L3Q5MTM2L3N2bi5kdW1wIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgZ2l0IHN2bicgJ2dpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIiB4JworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzYvc3ZuLmR1bXAgYi90L3Q5MTM2L3N2bi5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMWNlMGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM2L3N2bi5kdW1wCkBAIC0wLDAgKzEsMTkyIEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBlZWNhZTAyMS04ZjE2LTQ4ZGEtOTY5ZC03OWJlYjhhZTZlYTUKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMjJUMDA6NTA6NTYuMjkyODkwWgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTA2CitDb250ZW50LWxlbmd0aDogMTA2CisKK0sgNworc3ZuOmxvZworViA0Citpbml0CitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTIyVDAwOjUwOjU3LjE5MjM4NFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRhZ3MKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMAorVGV4dC1jb250ZW50LW1kNTogZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwNQorQ29udGVudC1sZW5ndGg6IDEwNQorCitLIDcKK3N2bjpsb2cKK1YgMworMS4wCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTIyVDAwOjUwOjU4LjEyNDcyNFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRhZ3MvMS4wCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgOQorMS4wLjEtYmFkCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTIyVDAwOjUwOjU4LjE1MTcyN1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRhZ3MvMS4wLjEKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0YWdzLzEuMAorCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTExCitDb250ZW50LWxlbmd0aDogMTExCisKK0sgNworc3ZuOmxvZworViA5CitXcm9uZyB0YWcKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMjJUMDA6NTA6NTguMTY3NDI3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdGFncy8xLjAuMQorTm9kZS1hY3Rpb246IGRlbGV0ZQorCisKK1JldmlzaW9uLW51bWJlcjogNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTEzCitDb250ZW50LWxlbmd0aDogMTEzCisKK0sgNworc3ZuOmxvZworViAxMAorMS4wLWJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0yMlQwMDo1MDo1OC4xODQ0OThaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy8xLjAKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogNAorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0YWdzLzEuMAorCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTEzCitDb250ZW50LWxlbmd0aDogMTEzCisKK0sgNworc3ZuOmxvZworViAxMAorMS4wLjEtZ29vZAorSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0yMlQwMDo1MDo1OC4yMDA2OTVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0YWdzLzEuMC4xCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDUKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvMS4wCisKKwpkaWZmIC0tZ2l0IGEvdC90OTEwNi1naXQtc3ZuLWRjb21taXQtY2xvYmJlci1zZXJpZXMuc2ggYi90L3Q5MTM3LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaApzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSB0L3Q5MTA2LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaApyZW5hbWUgdG8gdC90OTEzNy1naXQtc3ZuLWRjb21taXQtY2xvYmJlci1zZXJpZXMuc2gKaW5kZXggZmQxODUwMS4uNjM2Y2EwYSAxMDA3NTUKLS0tIGEvdC90OTEwNi1naXQtc3ZuLWRjb21taXQtY2xvYmJlci1zZXJpZXMuc2gKKysrIGIvdC90OTEzNy1naXQtc3ZuLWRjb21taXQtY2xvYmJlci1zZXJpZXMuc2gKQEAgLTgsNyArOCw3IEBACiAJbWtkaXIgaW1wb3J0ICYmCiAJY2QgaW1wb3J0ICYmCiAJYXdrICJCRUdJTiB7IGZvciAoaSA9IDE7IGkgPCA2NDsgaSsrKSB7IHByaW50IGkgfSB9IiA+IGZpbGUKLQlzdm4gaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iICYmCiAJY2QgLi4gJiYKIAlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgogCWdpdCBzdm4gZmV0Y2ggJiYKQEAgLTE4LDE0ICsxOCwxNCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnKHN1cHBvc2VkbHkpIG5vbi1jb25mbGljdGluZyBjaGFuZ2UgZnJvbSBTVk4nICcKIAl0ZXN0IHgiYHNlZCAtbiAtZSA1OHAgPCBmaWxlYCIgPSB4NTggJiYKIAl0ZXN0IHgiYHNlZCAtbiAtZSA2MXAgPCBmaWxlYCIgPSB4NjEgJiYKLQlzdm4gY28gIiRzdm5yZXBvIiB0bXAgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdG1wICYmCiAJY2QgdG1wICYmCiAJCXBlcmwgLWkuYmFrIC1wIC1lICJzL141OCQvNTU4OC8iIGZpbGUgJiYKIAkJcGVybCAtaS5iYWsgLXAgLWUgInMvXjYxJC82NjExLyIgZmlsZSAmJgogCQlwb2tlIGZpbGUgJiYKIAkJdGVzdCB4ImBzZWQgLW4gLWUgNThwIDwgZmlsZWAiID0geDU1ODggJiYKIAkJdGVzdCB4ImBzZWQgLW4gLWUgNjFwIDwgZmlsZWAiID0geDY2MTEgJiYKLQkJc3ZuIGNvbW1pdCAtbSAiNTggPT4gNTU4OCwgNjEgPT4gNjYxMSIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIjU4ID0+IDU1ODgsIDYxID0+IDY2MTEiICYmCiAJCWNkIC4uCiAJJwogCkBAIC00Niw3ICs0Niw3IEBACiAJdGVzdCB4XCJcYHNlZCAtbiAtZSA3cCA8IGZpbGVcYFwiID0geDc3NzcgJiYKIAlnaXQgY29tbWl0IC1tICc0ID0+IDQ0NDQsIDcgPT4gNzc3NycgZmlsZSAmJgogCWdpdCBzdm4gZGNvbW1pdCAmJgotCXN2biB1cCB0bXAgJiYKKwlzdm5fY21kIHVwIHRtcCAmJgogCWNkIHRtcCAmJgogCQl0ZXN0IHhcIlxgc2VkIC1uIC1lIDRwIDwgZmlsZVxgXCIgPSB4NDQ0NCAmJgogCQl0ZXN0IHhcIlxgc2VkIC1uIC1lIDdwIDwgZmlsZVxgXCIgPSB4Nzc3NyAmJgpkaWZmIC0tZ2l0IGEvdC90OTEzOC1naXQtc3ZuLWF1dGhvcnMtcHJvZy5zaCBiL3QvdDkxMzgtZ2l0LXN2bi1hdXRob3JzLXByb2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTRiMDBmMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzgtZ2l0LXN2bi1hdXRob3JzLXByb2cuc2gKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcsIE1hcmsgTG9kYXRvCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gYXV0aG9ycyBwcm9nIHRlc3RzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworY2F0ID4gc3ZuLWF1dGhvcnMtcHJvZyA8PCdFT0YnCisjIS91c3IvYmluL3BlcmwKKyRfID0gc2hpZnQ7CitpZiAocy8tc3ViJC8vKSAgeworCXByaW50ICIkXyA8JF9cQHN1Yi5leGFtcGxlLmNvbT5cbiI7Cit9CitlbHNlIHsKKwlwcmludCAiJF8gPCRfXEBleGFtcGxlLmNvbT5cbiI7Cit9CitFT0YKK2NobW9kICt4IHN2bi1hdXRob3JzLXByb2cKKworY2F0ID4gc3ZuLWF1dGhvcnMgPDwnRU9GJworZmYgPSBGRkZGRkZGIEZGRkZGRkYgPGZGZkBvdGhlci5leGFtcGxlLmNvbT4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCisJZm9yIGkgaW4gYWEgYmIgY2Mtc3ViIGRkLXN1YiBlZS1mb28gZmYKKwlkbworCQlzdm4gbWtkaXIgLW0gJGkgLS11c2VybmFtZSAkaSAiJHN2bnJlcG8iLyRpCisJZG9uZQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGF1dGhvcnMgd2l0aCBwcm9nIGFuZCBmaWxlJyAnCisJZ2l0IHN2biBjbG9uZSAtLWF1dGhvcnMtcHJvZz0uL3N2bi1hdXRob3JzLXByb2cgXAorCSAgICAtLWF1dGhvcnMtZmlsZT1zdm4tYXV0aG9ycyAiJHN2bnJlcG8iIHgKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydGVkIDYgcmV2aXNpb25zIHN1Y2Nlc3NmdWxseScgJworCSgKKwkJY2QgeAorCQl0ZXN0ICJgZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy9naXQtc3ZuIHwgd2MgLWxgIiAtZXEgNgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvcnMtcHJvZyByYW4gY29ycmVjdGx5JyAnCisJKAorCQljZCB4CisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MSB8IFwKKwkJICBncmVwICJeYXV0aG9yIGVlLWZvbyA8ZWUtZm9vQGV4YW1wbGVcLmNvbT4gIiAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjIgfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBkZCA8ZGRAc3ViXC5leGFtcGxlXC5jb20+ICIgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2bn4zIHwgXAorCQkgIGdyZXAgIl5hdXRob3IgY2MgPGNjQHN1YlwuZXhhbXBsZVwuY29tPiAiICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+NCB8IFwKKwkJICBncmVwICJeYXV0aG9yIGJiIDxiYkBleGFtcGxlXC5jb20+ICIgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2bn41IHwgXAorCQkgIGdyZXAgIl5hdXRob3IgYWEgPGFhQGV4YW1wbGVcLmNvbT4gIgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvcnMtZmlsZSBvdmVycm9kZSBhdXRob3JzLXByb2cnICcKKwkoCisJCWNkIHgKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2biB8IFwKKwkJICBncmVwICJeYXV0aG9yIEZGRkZGRkYgRkZGRkZGRiA8ZkZmQG90aGVyXC5leGFtcGxlXC5jb20+ICIKKwkpCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzktZ2l0LXN2bi1ub24tdXRmOC1jb21taXRlbmNvZGluZy5zaCBiL3QvdDkxMzktZ2l0LXN2bi1ub24tdXRmOC1jb21taXRlbmNvZGluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMzM3OTU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzOS1naXQtc3ZuLW5vbi11dGY4LWNvbW1pdGVuY29kaW5nLnNoCkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcmVmdXNlcyB0byBkY29tbWl0IG5vbi1VVEY4IG1lc3NhZ2VzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworIyBJU08tMjAyMi1KUCBjYW4gcGFzcyBmb3IgdmFsaWQgVVRGLTgsIHNvIHNraXBwaW5nIHRoYXQgaW4gdGhpcyB0ZXN0CisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzZXR1cCIgJworCQlta2RpciAkSCAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiJEggdGVzdCIgJEggIiRzdm5yZXBvIi8kSCAmJgorCQlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvJEggJEgKKwknCitkb25lCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBjb21taXQgb24gZ2l0IHNpZGUiICcKKwkoCisJCWNkICRIICYmCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkSCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdCByZWZzL3JlbW90ZXMvZ2l0LXN2biAmJgorCQllY2hvICRIID5GICYmCisJCWdpdCBhZGQgRiAmJgorCQlnaXQgY29tbWl0IC1hIC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRILnR4dCAmJgorCQlFPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSAicy9eZW5jb2RpbmcgLy9wIikgJiYKKwkJdGVzdCAieiRFIiA9ICJ6JEgiCisJKQorCScKK2RvbmUKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIGRjb21taXQgdG8gc3ZuIiAnCisJKAorCQljZCAkSCAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgaTE4bi5jb21taXRlbmNvZGluZyAmJgorCQkhIGdpdCBzdm4gZGNvbW1pdAorCSkKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0MC1naXQtc3ZuLXJlc2V0LnNoIGIvdC90OTE0MC1naXQtc3ZuLXJlc2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA3MzU1MjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQwLWdpdC1zdm4tcmVzZXQuc2gKQEAgLTAsMCArMSw2NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBCZW4gSmFja3NvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHJlc2V0JworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzICYmCisJKAorCQljZCBzICYmCisJCW1rZGlyIHZpcyAmJgorCQllY2hvIGFsd2F5cyB2aXNpYmxlID4gdmlzL3Zpcy50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgdmlzICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjcmVhdGUgdmlzaWJsZSBmaWxlcyIgJiYKKwkJbWtkaXIgaGlkICYmCisJCWVjaG8gaW5pdGlhbGx5IGhpZGRlbiA+IGhpZC9oaWQudHh0ICYmCisJCXN2bl9jbWQgYWRkIGhpZCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIGluaXRpYWxseSBoaWRkZW4gZmlsZXMiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyBtb2QgPj4gdmlzL3Zpcy50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSB2aXMiICYmCisJCXN2bl9jbWQgdXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIFNWTiByZXBvc2l0b3J5IHdpdGggaGlkZGVuIGRpcmVjdG9yeScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iIGcgJiYKKwkoIGNkIGcgJiYgZ2l0IHN2biBmZXRjaCAtLWlnbm9yZS1wYXRocz0iXmhpZCIgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkgaGlkZGVuIGZpbGUgaW4gU1ZOIHJlcG8nICcKKwkoIGNkIHMgJiYKKwkgIGVjaG8gbW9kIGhpZGRlbiA+PiBoaWQvaGlkLnR4dCAmJgorCSAgc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSBoaWQiICYmCisJICBzdm5fY21kIHVwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmYWlscyBvbiBtb2RpZmllZCBoaWRkZW4gZmlsZScgJworCSggY2QgZyAmJgorCSAgZ2l0IHN2biBmaW5kLXJldiByZWZzL3JlbW90ZXMvZ2l0LXN2biA+IC4uL2V4cGVjdCAmJgorCSAgISBnaXQgc3ZuIGZldGNoIDI+IC4uL2Vycm9ycyAmJgorCSAgZ2l0IHN2biBmaW5kLXJldiByZWZzL3JlbW90ZXMvZ2l0LXN2biA+IC4uL2V4cGVjdDIgKSAmJgorCWZncmVwICJub3QgZm91bmQgaW4gY29tbWl0IiBlcnJvcnMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhwZWN0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB1bndpbmRzIGJhY2sgdG8gcjEnICcKKwkoIGNkIGcgJiYKKwkgIGdpdCBzdm4gcmVzZXQgLXIxICYmCisJICBnaXQgc3ZuIGZpbmQtcmV2IHJlZnMvcmVtb3Rlcy9naXQtc3ZuID4gLi4vZXhwZWN0MiApICYmCisJZWNobyAxID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhwZWN0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZldGNoIHN1Y2NlZWRzIG5vdCBpZ25vcmluZyBhbnkgZmlsZXMnICcKKwkoIGNkIGcgJiYKKwkgIGdpdCBzdm4gZmV0Y2ggJiYKKwkgIGdpdCBzdm4gcmViYXNlICYmCisJICBmZ3JlcCAibW9kIGhpZGRlbiIgaGlkL2hpZC50eHQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0MS1naXQtc3ZuLW11bHRpcGxlLWJyYW5jaGVzLnNoIGIvdC90OTE0MS1naXQtc3ZuLW11bHRpcGxlLWJyYW5jaGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNjZDA2NzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQxLWdpdC1zdm4tbXVsdGlwbGUtYnJhbmNoZXMuc2gKQEAgLTAsMCArMSwxMjIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgTWFyYyBCcmFuY2hhdWQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBtdWx0aXBsZSBicmFuY2ggYW5kIHRhZyBwYXRocyBpbiB0aGUgc3ZuIHJlcG8nCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCW1rZGlyCXByb2plY3QgXAorCQlwcm9qZWN0L3RydW5rIFwKKwkJcHJvamVjdC9iX29uZSBcCisJCXByb2plY3QvYl90d28gXAorCQlwcm9qZWN0L3RhZ3NfQSBcCisJCXByb2plY3QvdGFnc19CICYmCisJZWNobyAxID4gcHJvamVjdC90cnVuay9hLmZpbGUgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvL3Byb2plY3QiICYmCisJcm0gLXJmIHByb2plY3QgJiYKKwlzdm5fY21kIGNwIC1tICJCcmFuY2ggMSIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkgIiRzdm5yZXBvL3Byb2plY3QvYl9vbmUvZmlyc3QiICYmCisJc3ZuX2NtZCBjcCAtbSAiVGFnIDEiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0EvMS4wIiAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvL3Byb2plY3QiIHN2bl9wcm9qZWN0ICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQllY2hvIDIgPiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiQ2hhbmdlIDEiIHRydW5rL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJCcmFuY2ggMiIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkJICIkc3ZucmVwby9wcm9qZWN0L2Jfb25lL3NlY29uZCIgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDIiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19BLzIuMCIgJiYKKwkJZWNobyAzID4gdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSAyIiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiQnJhbmNoIDMiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJCSAiJHN2bnJlcG8vcHJvamVjdC9iX3R3by8xIiAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgMyIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0EvMy4wIiAmJgorCQllY2hvIDQgPiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiQ2hhbmdlIDMiIHRydW5rL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJCcmFuY2ggNCIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkJICIkc3ZucmVwby9wcm9qZWN0L2JfdHdvLzIiICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyA0IiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQS80LjAiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyA1ID4gYl9vbmUvZmlyc3QvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSA0IiBiX29uZS9maXJzdC9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDUiICIkc3ZucmVwby9wcm9qZWN0L2Jfb25lL2ZpcnN0IiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19CL3Y1IiAmJgorCQllY2hvIDYgPiBiX29uZS9zZWNvbmQvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSA1IiBiX29uZS9zZWNvbmQvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyA2IiAiJHN2bnJlcG8vcHJvamVjdC9iX29uZS9zZWNvbmQiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0IvdjYiICYmCisJCWVjaG8gNyA+IGJfdHdvLzEvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSA2IiBiX3R3by8xL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgNyIgIiRzdm5yZXBvL3Byb2plY3QvYl90d28vMSIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQi92NyIgJiYKKwkJZWNobyA4ID4gYl90d28vMi9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiQ2hhbmdlIDciIGJfdHdvLzIvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyA4IiAiJHN2bnJlcG8vcHJvamVjdC9iX3R3by8yIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19CL3Y4IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgbXVsdGlwbGUgYnJhbmNoIGFuZCB0YWcgcGF0aHMnICcKKwlnaXQgc3ZuIGNsb25lIC1UIHRydW5rIFwKKwkJICAgICAgLWIgYl9vbmUvKiAtLWJyYW5jaGVzIGJfdHdvLyogXAorCQkgICAgICAtdCB0YWdzX0EvKiAtLXRhZ3MgdGFnc19CIFwKKwkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QiIGdpdF9wcm9qZWN0ICYmCisJKCBjZCBnaXRfcHJvamVjdCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9maXJzdCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9zZWNvbmQgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvMSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy8yICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvMS4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvMi4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvMy4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvNC4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvdjUgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy92NiAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL3Y3ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvdjgKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ011bHRpcGxlIGJyYW5jaCBvciB0YWcgcGF0aHMgcmVxdWlyZSAtZCcgJworCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBicmFuY2ggLW0gIk5vIG5ldyBicmFuY2giIE5vcGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biB0YWcgLW0gIk5vIG5ldyB0YWciIFRhZ2xlc3MgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvTm9wZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL1RhZ2xlc3MKKwkpICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQlzdm5fY21kIHVwICYmCisJCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWQgYl9vbmUvTm9wZSAmJgorCQl0ZXN0X211c3RfZmFpbCB0ZXN0IC1kIGJfdHdvL05vcGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZCB0YWdzX0EvVGFnbGVzcyAmJgorCQl0ZXN0X211c3RfZmFpbCB0ZXN0IC1kIHRhZ3NfQi9UYWdsZXNzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbmV3IGJyYW5jaGVzIGFuZCB0YWdzJyAnCisJKCBjZCBnaXRfcHJvamVjdCAmJgorCQlnaXQgc3ZuIGJyYW5jaCAtbSAiTmV3IGJyYW5jaCAxIiAtZCBiX29uZSBOZXcxICkgJiYKKwkoIGNkIHN2bl9wcm9qZWN0ICYmCisJCXN2bl9jbWQgdXAgJiYgdGVzdCAtZSBiX29uZS9OZXcxL2EuZmlsZSApICYmCisKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCWdpdCBzdm4gYnJhbmNoIC1tICJOZXcgYnJhbmNoIDIiIC1kIGJfdHdvIE5ldzIgKSAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJc3ZuX2NtZCB1cCAmJiB0ZXN0IC1lIGJfdHdvL05ldzIvYS5maWxlICkgJiYKKworCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJZ2l0IHN2biBicmFuY2ggLXQgLW0gIk5ldyB0YWcgMSIgLWQgdGFnc19BIFRhZzEgKSAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJc3ZuX2NtZCB1cCAmJiB0ZXN0IC1lIHRhZ3NfQS9UYWcxL2EuZmlsZSApICYmCisKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCWdpdCBzdm4gdGFnIC1tICJOZXcgdGFnIDIiIC1kIHRhZ3NfQiBUYWcyICkgJiYKKwkoIGNkIHN2bl9wcm9qZWN0ICYmCisJCXN2bl9jbWQgdXAgJiYgdGVzdCAtZSB0YWdzX0IvVGFnMi9hLmZpbGUgKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDItZ2l0LXN2bi1zaGFsbG93LWNsb25lLnNoIGIvdC90OTE0Mi1naXQtc3ZuLXNoYWxsb3ctY2xvbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTIzNmFjYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDItZ2l0LXN2bi1zaGFsbG93LWNsb25lLnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gc2hhbGxvdyBjbG9uZScKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0IHJlcG9zaXRvcnknICcKKwlzdm5fY21kIG1rZGlyIC1tICJjcmVhdGUgc3RhbmRhcmQgbGF5b3V0IiBcCisJICAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMgIiRzdm5yZXBvIi90YWdzICYmCisJc3ZuX2NtZCBjcCAtbSAiYnJhbmNoIG9mZiB0cnVuayIgXAorCSAgIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2EgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvYnJhbmNoZXMvYSAmJgorCSgKKwkJY2QgYSAmJgorCQk+IGZvbyAmJgorCQlzdm5fY21kIGFkZCBmb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImFkZCBmb28iCisJKQorJworCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0cnVuayB3aXRoICItciBIRUFEIicgJworCWdpdCBzdm4gY2xvbmUgLXIgSEVBRCAiJHN2bnJlcG8vdHJ1bmsiIGcgJiYKKwkoIGNkIGcgJiYgZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIC0tdmVyaWZ5IEhFQUQgKQorJworCitzdG9wX2h0dHBkCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0My1naXQtc3ZuLWdjLnNoIGIvdC90OTE0My1naXQtc3ZuLWdjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYyYmEyZDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQzLWdpdC1zdm4tZ2Muc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBSb2JlcnQgQWxsYW4gWmVoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZ2MgYmFzaWMgdGVzdHMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkaXJlY3RvcmllcyBhbmQgdGVzdCByZXBvJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJbWtkaXIgdG1wICYmCisJZWNobyAiU2FtcGxlIHRleHQgZm9yIFN1YnZlcnNpb24gcmVwb3NpdG9yeS4iID4gaW1wb3J0L3Rlc3QudHh0ICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgaW1wb3J0ICIkc3ZucmVwbyIgPiAvZGV2L251bGwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdvcmtpbmcgY29weSBmcm9tIHN2bicgXAorCSdzdm5fY21kIGNvICIkc3ZucmVwbyIgdGVzdF93YycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHNvbWUgcHJvcGVydGllcyB0byBjcmVhdGUgYW4gdW5oYW5kbGVkLmxvZyBmaWxlJyAnCisJKAorCQljZCB0ZXN0X3djICYmCisJCXN2bl9jbWQgcHJvcHNldCBmb28gYmFyIHRlc3QudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJwcm9wZXJ0eSBzZXQiCisJKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2V0dXAgcmVwbycgJ2dpdCBzdm4gaW5pdCAiJHN2bnJlcG8iJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGZXRjaCByZXBvJyAnZ2l0IHN2biBmZXRjaCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBiYWNrdXAgY29weSBvZiB1bmhhbmRsZWQubG9nJyAnCisJIGNwIC5naXQvc3ZuL2dpdC1zdm4vdW5oYW5kbGVkLmxvZyB0bXAKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBsZWZ0b3ZlciBpbmRleCcgJz4gLmdpdC9zdm4vZ2l0LXN2bi9pbmRleCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBnYyBydW5zJyAnZ2l0IHN2biBnYycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBpbmRleCByZW1vdmVkJyAnISB0ZXN0IC1mIC5naXQvc3ZuL2dpdC1zdm4vaW5kZXgnCisKK2lmIHBlcmwgLU1Db21wcmVzczo6WmxpYiAtZSAwIDI+L2Rldi9udWxsCit0aGVuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBnYyBwcm9kdWNlcyBhIHZhbGlkIGd6aXAgZmlsZScgJworCQkgZ3VuemlwIC5naXQvc3ZuL2dpdC1zdm4vdW5oYW5kbGVkLmxvZy5negorCQknCitlbHNlCisJc2F5ICJQZXJsIENvbXByZXNzOjpabGliIHVuYXZhaWxhYmxlLCBza2lwcGluZyBndW56aXAgdGVzdCIKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gZ2MgZG9lcyBub3QgY2hhbmdlIHVuaGFuZGxlZC5sb2cgZmlsZXMnICcKKwkgdGVzdF9jbXAgLmdpdC9zdm4vZ2l0LXN2bi91bmhhbmRsZWQubG9nIHRtcC91bmhhbmRsZWQubG9nCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkyMDAtZ2l0LWN2c2V4cG9ydGNvbW1pdC5zaCBiL3QvdDkyMDAtZ2l0LWN2c2V4cG9ydGNvbW1pdC5zaAppbmRleCAyNDVhN2MzLi5mYzM3OTVkIDEwMDc1NQotLS0gYS90L3Q5MjAwLWdpdC1jdnNleHBvcnRjb21taXQuc2gKKysrIGIvdC90OTIwMC1naXQtY3ZzZXhwb3J0Y29tbWl0LnNoCkBAIC02LDEyICs2LDE2IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCXNheSAnc2tpcHBpbmcgZ2l0IGN2c2V4cG9ydGNvbW1pdCB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKwogY3ZzID4vZGV2L251bGwgMj4mMQogaWYgdGVzdCAkPyAtbmUgMQogdGhlbgotICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXBwaW5nIGdpdCBjdnNleHBvcnRjb21taXQgdGVzdHMsIGN2cyBub3QgZm91bmQnIDoKKyAgICBzYXkgJ3NraXBwaW5nIGdpdCBjdnNleHBvcnRjb21taXQgdGVzdHMsIGN2cyBub3QgZm91bmQnCiAgICAgdGVzdF9kb25lCi0gICAgZXhpdAogZmkKIAogQ1ZTUk9PVD0kKHB3ZCkvY3Zzcm9vdApAQCAtMjI1LDExICsyMjksMTIgQEAKICAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjdnNleHBvcnRjb21taXQgLWMgJGlkCiAgICAgICApJwogCi1jYXNlICIkKGdpdCBjb25maWcgLS1ib29sIGNvcmUuZmlsZW1vZGUpIiBpbgotZmFsc2UpCi0JOzsKLSopCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK2lmICEgdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmZpbGVtb2RlKSIgPSBmYWxzZQordGhlbgorCXRlc3Rfc2V0X3ByZXJlcSBGSUxFTU9ERQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSBcCiAgICAgICdSZXRhaW4gZXhlY3V0ZSBiaXQnIFwKICAgICAgJ21rZGlyIEcgJiYKICAgICAgIGVjaG8gZXhlY3V0ZW9uID5HL29uICYmCkBAIC0yNDMsOCArMjQ4LDYgQEAKICAgICAgIHRlc3QgLXggRy9vbiAmJgogICAgICAgISB0ZXN0IC14IEcvb2ZmCiAgICAgICApJwotCTs7Ci1lc2FjCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy13IG9wdGlvbiBzaG91bGQgd29yayB3aXRoIHJlbGF0aXZlIEdJVF9ESVInICcKICAgICAgIG1rZGlyIFcgJiYKQEAgLTI4NSw2ICsyODgsMjcgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1jb21taXQgYSByZW1vdmVkIGZpbGVuYW1lIHdoaWNoIHJlbWFpbnMgaW4gQ1ZTIGF0dGljJyAnCisKKyAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICBlY2hvID5hdHRpY19ncmVtbGluICYmCisgICAgIGN2cyAtUSBhZGQgYXR0aWNfZ3JlbWxpbiAmJgorICAgICBjdnMgLVEgY2kgLW0gImFkZGVkIGF0dGljX2dyZW1saW4iICYmCisgICAgIHJtIGF0dGljX2dyZW1saW4gJiYKKyAgICAgY3ZzIC1RIHJtIGF0dGljX2dyZW1saW4gJiYKKyAgICAgY3ZzIC1RIGNpIC1tICJyZW1vdmVkIGF0dGljX2dyZW1saW4iKSAmJgorCisgICAgZWNobyA+IGF0dGljX2dyZW1saW4gJiYKKyAgICBnaXQgYWRkIGF0dGljX2dyZW1saW4gJiYKKyAgICBnaXQgY29tbWl0IC1tICJBZGRlZCBhdHRpY19ncmVtbGluIiAmJgorCWdpdCBjdnNleHBvcnRjb21taXQgLXcgIiRDVlNXT1JLIiAtYyBIRUFEICYmCisgICAgKGNkICIkQ1ZTV09SSyI7IGN2cyAtUSB1cGRhdGUgLWQpICYmCisgICAgdGVzdCAtZiAiJENWU1dPUksvYXR0aWNfZ3JlbWxpbiIKKycKKworIyB0aGUgc3RhdGUgb2YgdGhlIENWUyBzYW5kYm94IG1heSBiZSBpbmRldGVybWluYXRlIGZvciAnIHNwYWNlJworIyBhZnRlciB0aGlzIHRlc3Qgb24gc29tZSBwbGF0Zm9ybXMgLyB3aXRoIHNvbWUgdmVyc2lvbnMgb2YgQ1ZTCisjIGNvbnNpZGVyIGFkZGluZyBuZXcgdGVzdHMgYWJvdmUgdGhpcyBwb2ludAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGEgZmlsZSB3aXRoIGxlYWRpbmcgc3BhY2VzIGluIHRoZSBuYW1lJyAnCiAKIAllY2hvIHNwYWNlID4gIiBzcGFjZSIgJiYKQEAgLTI5Miw3ICszMTYsNyBAQAogCWdpdCBjb21taXQgLW0gIkFkZCBhIGZpbGUgd2l0aCBhIGxlYWRpbmcgc3BhY2UiICYmCiAJaWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCiAJZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdyAiJENWU1dPUksiIC1jICRpZCAmJgotCWNoZWNrX2VudHJpZXMgIiRDVlNXT1JLIiAiIHNwYWNlLzEuMS98RFMvMS4xL3xyZWxlYXNlLW5vdGVzLzEuMi8iICYmCisJY2hlY2tfZW50cmllcyAiJENWU1dPUksiICIgc3BhY2UvMS4xL3xEUy8xLjEvfGF0dGljX2dyZW1saW4vMS4zL3xyZWxlYXNlLW5vdGVzLzEuMi8iICYmCiAJdGVzdF9jbXAgIiRDVlNXT1JLLyBzcGFjZSIgIiBzcGFjZSIKIAogJwpkaWZmIC0tZ2l0IGEvdC90OTMwMS1mYXN0LWV4cG9ydC5zaCBiL3QvdDkzMDEtZmFzdC1leHBvcnQuc2gKaW5kZXggODZjMzc2MC4uMzU2OTY0ZSAxMDA3NTUKLS0tIGEvdC90OTMwMS1mYXN0LWV4cG9ydC5zaAorKysgYi90L3Q5MzAxLWZhc3QtZXhwb3J0LnNoCkBAIC04LDYgKzgsOSBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJwogCisJZWNobyBicmVhayBpdCA+IGZpbGUwICYmCisJZ2l0IGFkZCBmaWxlMCAmJgorCXRlc3RfdGljayAmJgogCWVjaG8gV29obGF1ZiA+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKIAl0ZXN0X3RpY2sgJiYKQEAgLTU3LDE1ICs2MCwxNSBAQAogCQkoY2QgbmV3ICYmCiAJCSBnaXQgZmFzdC1pbXBvcnQgJiYKIAkJIHRlc3QgJE1BU1RFUiAhPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9wYXJ0aWFsKSAmJgotCQkgZ2l0IGRpZmYgbWFzdGVyLi5wYXJ0aWFsICYmCi0JCSBnaXQgZGlmZiBtYXN0ZXJeLi5wYXJ0aWFsXiAmJgorCQkgZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyIHBhcnRpYWwgJiYKKwkJIGdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3Rlcl4gcGFydGlhbF4gJiYKIAkJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcGFydGlhbH4yKQogCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzby04ODU5LTEnICcKIAotCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgogCSMgdXNlIGF1dGhvciBhbmQgY29tbWl0dGVyIG5hbWUgaW4gSVNPLTg4NTktMSB0byBtYXRjaCBpdC4KIAkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKIAl0ZXN0X3RpY2sgJiYKQEAgLTI1OSw0ICsyNjIsMTEzIEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIGxpbWl0aW5nIGV4cG9ydHMgYnkgUEFUSCcgJworCW1rZGlyIGxpbWl0LWJ5LXBhdGhzICYmCisJY2QgbGltaXQtYnktcGF0aHMgJiYKKwlnaXQgaW5pdCAmJgorCWVjaG8gaGkgPiB0aGVyZSAmJgorCWdpdCBhZGQgdGhlcmUgJiYKKwlnaXQgY29tbWl0IC1tICJGaXJzdCBmaWxlIiAmJgorCWVjaG8gZm9vID4gYmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgY29tbWl0IC1tICJTZWNvbmQgZmlsZSIgJiYKKwlnaXQgdGFnIC1hIC1tIG1zZyBteXRhZyAmJgorCWVjaG8gbW9yZWZvbyA+PiBiYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCWdpdCBjb21taXQgLW0gIkNoYW5nZSB0byBzZWNvbmQgZmlsZSIgJiYKKwljZCAuLgorJworCitjYXQgPiBsaW1pdC1ieS1wYXRocy9leHBlY3RlZCA8PCBFT0YKK2Jsb2IKK21hcmsgOjEKK2RhdGEgMworaGkKKworcmVzZXQgcmVmcy90YWdzL215dGFnCitjb21taXQgcmVmcy90YWdzL215dGFnCittYXJrIDoyCithdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTExMjkxMjcxMyAtMDcwMAorY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjcxMyAtMDcwMAorZGF0YSAxMQorRmlyc3QgZmlsZQorTSAxMDA2NDQgOjEgdGhlcmUKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3BwaW5nIHRhZyBvZiBmaWx0ZXJlZCBvdXQgb2JqZWN0JyAnCisJY2QgbGltaXQtYnktcGF0aHMgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PWRyb3AgbXl0YWcgLS0gdGhlcmUgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBvdXRwdXQgZXhwZWN0ZWQgJiYKKwljZCAuLgorJworCitjYXQgPj4gbGltaXQtYnktcGF0aHMvZXhwZWN0ZWQgPDwgRU9GCit0YWcgbXl0YWcKK2Zyb20gOjIKK3RhZ2dlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExMTI5MTI3MTMgLTA3MDAKK2RhdGEgNAorbXNnCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRpbmcgdGFnIG9mIGZpbHRlcmVkIG91dCBvYmplY3QnICcKKwljZCBsaW1pdC1ieS1wYXRocyAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLXRhZy1vZi1maWx0ZXJlZC1vYmplY3Q9cmV3cml0ZSBteXRhZyAtLSB0aGVyZSA+IG91dHB1dCAmJgorCXRlc3RfY21wIG91dHB1dCBleHBlY3RlZCAmJgorCWNkIC4uCisnCisKK2NhdCA+IGxpbWl0LWJ5LXBhdGhzL2V4cGVjdGVkIDw8IEVPRgorYmxvYgorbWFyayA6MQorZGF0YSA0Citmb28KKworYmxvYgorbWFyayA6MgorZGF0YSAzCitoaQorCityZXNldCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCittYXJrIDozCithdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTExMjkxMjcxMyAtMDcwMAorY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjcxMyAtMDcwMAorZGF0YSAxMgorU2Vjb25kIGZpbGUKK00gMTAwNjQ0IDoxIGJhcgorTSAxMDA2NDQgOjIgdGhlcmUKKworRU9GCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ25vIGV4YWN0LXJlZiByZXZpc2lvbnMgaW5jbHVkZWQnICcKKwljZCBsaW1pdC1ieS1wYXRocyAmJgorCWdpdCBmYXN0LWV4cG9ydCBtYXN0ZXJ+Mi4ubWFzdGVyfjEgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBvdXRwdXQgZXhwZWN0ZWQgJiYKKwljZCAuLgorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC11cCBhIGZldyBtb3JlIHRhZ3MgZm9yIHRhZyBleHBvcnQgdGVzdHMnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJSEVBRF9UUkVFPWBnaXQgc2hvdyAtcyAtLXByZXR0eT1yYXcgSEVBRCB8IGdyZXAgdHJlZSB8IHNlZCAicy90cmVlIC8vImAgJiYKKwlnaXQgdGFnICAgIHRyZWVfdGFnICAgICAgICAtbSAidGFnZ2luZyBhIHRyZWUiICRIRUFEX1RSRUUgJiYKKwlnaXQgdGFnIC1hIHRyZWVfdGFnLW9iaiAgICAtbSAidGFnZ2luZyBhIHRyZWUiICRIRUFEX1RSRUUgJiYKKwlnaXQgdGFnICAgIHRhZy1vYmpfdGFnICAgICAtbSAidGFnZ2luZyBhIHRhZyIgdHJlZV90YWctb2JqICYmCisJZ2l0IHRhZyAtYSB0YWctb2JqX3RhZy1vYmogLW0gInRhZ2dpbmcgYSB0YWciIHRyZWVfdGFnLW9iagorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlX3RhZycgICAgICAgICcKKwlta2RpciByZXN1bHQgJiYKKwkoY2QgcmVzdWx0ICYmIGdpdCBpbml0KSAmJgorCWdpdCBmYXN0LWV4cG9ydCB0cmVlX3RhZyA+IGZlLXN0cmVhbSAmJgorCShjZCByZXN1bHQgJiYgZ2l0IGZhc3QtaW1wb3J0IDwgLi4vZmUtc3RyZWFtKQorJworCisjIE5FRURTV09SSzogbm90IGp1c3QgY2hlY2sgcmV0dXJuIHN0YXR1cywgYnV0IHZhbGlkYXRlIHRoZSBvdXRwdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWVfdGFnLW9iaicgICAgJ2dpdCBmYXN0LWV4cG9ydCB0cmVlX3RhZy1vYmonCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWctb2JqX3RhZycgICAgICdnaXQgZmFzdC1leHBvcnQgdGFnLW9ial90YWcnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWctb2JqX3RhZy1vYmonICdnaXQgZmFzdC1leHBvcnQgdGFnLW9ial90YWctb2JqJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk0MDAtZ2l0LWN2c3NlcnZlci1zZXJ2ZXIuc2ggYi90L3Q5NDAwLWdpdC1jdnNzZXJ2ZXItc2VydmVyLnNoCmluZGV4IDZhMzdmNzEuLjY0Zjk0N2QgMTAwNzU1Ci0tLSBhL3QvdDk0MDAtZ2l0LWN2c3NlcnZlci1zZXJ2ZXIuc2gKKysrIGIvdC90OTQwMC1naXQtY3Zzc2VydmVyLXNlcnZlci5zaApAQCAtMTAsMTcgKzEwLDE5IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCXNheSAnc2tpcHBpbmcgZ2l0IGN2c3NlcnZlciB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKIGN2cyA+L2Rldi9udWxsIDI+JjEKIGlmIHRlc3QgJD8gLW5lIDEKIHRoZW4KLSAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBjdnMgbm90IGZvdW5kJyA6CisgICAgc2F5ICdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBjdnMgbm90IGZvdW5kJwogICAgIHRlc3RfZG9uZQotICAgIGV4aXQKIGZpCiBwZXJsIC1lICd1c2UgREJJOyB1c2UgREJEOjpTUUxpdGUnID4vZGV2L251bGwgMj4mMSB8fCB7Ci0gICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgUGVybCBTUUxpdGUgaW50ZXJmYWNlIHVuYXZhaWxhYmxlJyA6CisgICAgc2F5ICdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBQZXJsIFNRTGl0ZSBpbnRlcmZhY2UgdW5hdmFpbGFibGUnCiAgICAgdGVzdF9kb25lCi0gICAgZXhpdAogfQogCiB1bnNldCBHSVRfRElSIEdJVF9DT05GSUcKQEAgLTQ0LDcgKzQ2LDcgQEAKICAgZ2l0IGFkZCBzZWNvbmRyb290ZmlsZSAmJgogICBnaXQgY29tbWl0IC1tICJzZWNvbmQgcm9vdCIpICYmCiAgIGdpdCBwdWxsIHNlY29uZHJvb3QgbWFzdGVyICYmCi0gIGdpdCBjbG9uZSAtcSAtLWxvY2FsIC0tYmFyZSAiJFdPUktESVIvLmdpdCIgIiRTRVJWRVJESVIiID4vZGV2L251bGwgMj4mMSAmJgorICBnaXQgY2xvbmUgLXEgLS1iYXJlICIkV09SS0RJUi8uZ2l0IiAiJFNFUlZFUkRJUiIgPi9kZXYvbnVsbCAyPiYxICYmCiAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIHRydWUgJiYKICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMubG9nZmlsZSAiJFNFUlZFUkRJUi9naXRjdnMubG9nIgogJwpAQCAtMjY3LDcgKzI2OSw3IEBACiAKIHJtIC1mciAiJFNFUlZFUkRJUiIKIGNkICIkV09SS0RJUiIgJiYKLWdpdCBjbG9uZSAtcSAtLWxvY2FsIC0tYmFyZSAiJFdPUktESVIvLmdpdCIgIiRTRVJWRVJESVIiID4vZGV2L251bGwgMj4mMSAmJgorZ2l0IGNsb25lIC1xIC0tYmFyZSAiJFdPUktESVIvLmdpdCIgIiRTRVJWRVJESVIiID4vZGV2L251bGwgMj4mMSAmJgogR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgdHJ1ZSAmJgogR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMubG9nZmlsZSAiJFNFUlZFUkRJUi9naXRjdnMubG9nIiB8fAogZXhpdCAxCmRpZmYgLS1naXQgYS90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaCBiL3QvdDk0MDEtZ2l0LWN2c3NlcnZlci1jcmxmLnNoCmluZGV4IGUyN2ExYzUuLmFjYTQwYzEgMTAwNzU1Ci0tLSBhL3QvdDk0MDEtZ2l0LWN2c3NlcnZlci1jcmxmLnNoCisrKyBiL3QvdDk0MDEtZ2l0LWN2c3NlcnZlci1jcmxmLnNoCkBAIC00OSwxNCArNDksMTcgQEAKIGN2cyA+L2Rldi9udWxsIDI+JjEKIGlmIHRlc3QgJD8gLW5lIDEKIHRoZW4KLSAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBjdnMgbm90IGZvdW5kJyA6CisgICAgc2F5ICdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBjdnMgbm90IGZvdW5kJwogICAgIHRlc3RfZG9uZQotICAgIGV4aXQKK2ZpCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTAordGhlbgorICAgIHNheSAnc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworICAgIHRlc3RfZG9uZQogZmkKIHBlcmwgLWUgJ3VzZSBEQkk7IHVzZSBEQkQ6OlNRTGl0ZScgPi9kZXYvbnVsbCAyPiYxIHx8IHsKLSAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBQZXJsIFNRTGl0ZSBpbnRlcmZhY2UgdW5hdmFpbGFibGUnIDoKKyAgICBzYXkgJ3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIFBlcmwgU1FMaXRlIGludGVyZmFjZSB1bmF2YWlsYWJsZScKICAgICB0ZXN0X2RvbmUKLSAgICBleGl0CiB9CiAKIHVuc2V0IEdJVF9ESVIgR0lUX0NPTkZJRwpAQCAtODQsNyArODcsNyBAQAogICAgIGVjaG8gInN1YmRpci9maWxlLmggY3JsZiIgPj4gLmdpdGF0dHJpYnV0ZXMgJiYKICAgICBnaXQgYWRkIC5naXRhdHRyaWJ1dGVzIHRleHRmaWxlLmMgYmluZmlsZS5iaW4gbWl4ZWRVcC5jIHN1YmRpci8qICYmCiAgICAgZ2l0IGNvbW1pdCAtcSAtbSAiRmlyc3QgQ29tbWl0IiAmJgotICAgIGdpdCBjbG9uZSAtcSAtLWxvY2FsIC0tYmFyZSAiJFdPUktESVIvLmdpdCIgIiRTRVJWRVJESVIiID4vZGV2L251bGwgMj4mMSAmJgorICAgIGdpdCBjbG9uZSAtcSAtLWJhcmUgIiRXT1JLRElSLy5naXQiICIkU0VSVkVSRElSIiA+L2Rldi9udWxsIDI+JjEgJiYKICAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCB0cnVlICYmCiAgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMubG9nZmlsZSAiJFNFUlZFUkRJUi9naXRjdnMubG9nIgogJwpkaWZmIC0tZ2l0IGEvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2ggYi90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaAppbmRleCA0M2NkNmVlLi42Mjc1MTgxIDEwMDc1NQotLS0gYS90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaAorKysgYi90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaApAQCAtNDMsOSArNDMsMTEgQEAKIAlHQVRFV0FZX0lOVEVSRkFDRT0iQ0dJLzEuMSIKIAlIVFRQX0FDQ0VQVD0iKi8qIgogCVJFUVVFU1RfTUVUSE9EPSJHRVQiCisJU0NSSVBUX05BTUU9IiRURVNUX0RJUkVDVE9SWS8uLi9naXR3ZWIvZ2l0d2ViLnBlcmwiCiAJUVVFUllfU1RSSU5HPSIiJDEiIgogCVBBVEhfSU5GTz0iIiQyIiIKLQlleHBvcnQgR0FURVdBWV9JTlRFUkZBQ0UgSFRUUF9BQ0NFUFQgUkVRVUVTVF9NRVRIT0QgUVVFUllfU1RSSU5HIFBBVEhfSU5GTworCWV4cG9ydCBHQVRFV0FZX0lOVEVSRkFDRSBIVFRQX0FDQ0VQVCBSRVFVRVNUX01FVEhPRCBcCisJCVNDUklQVF9OQU1FIFFVRVJZX1NUUklORyBQQVRIX0lORk8KIAogCUdJVFdFQl9DT05GSUc9JChwd2QpL2dpdHdlYl9jb25maWcucGVybAogCWV4cG9ydCBHSVRXRUJfQ09ORklHCkBAIC01NCwyNyArNTYsMjMgQEAKIAkjIHdyaXR0ZW4gdG8gd2ViIHNlcnZlciBsb2dzLCBzbyB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhhdDoKIAkjIHdlIGFyZSBpbnRlcmVzdGVkIG9ubHkgaW4gcHJvcGVybHkgZm9ybWF0dGVkIGVycm9ycy93YXJuaW5ncwogCXJtIC1mIGdpdHdlYi5sb2cgJiYKLQlwZXJsIC0tICIkVEVTVF9ESVJFQ1RPUlkvLi4vZ2l0d2ViL2dpdHdlYi5wZXJsIiBcCisJcGVybCAtLSAiJFNDUklQVF9OQU1FIiBcCiAJCT4vZGV2L251bGwgMj5naXR3ZWIubG9nICYmCiAJaWYgZ3JlcCAiXltbXSIgZ2l0d2ViLmxvZyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gZmFsc2U7IGVsc2UgdHJ1ZTsgZmkKIAogCSMgZ2l0d2ViLmxvZyBpcyBsZWZ0IGZvciBkZWJ1Z2dpbmcKIH0KIAotc2FmZV9jaG1vZCAoKSB7Ci0JY2htb2QgIiQxIiAiJDIiICYmCi0JaWYgWyAiJChnaXQgY29uZmlnIC0tZ2V0IGNvcmUuZmlsZW1vZGUpIiA9IGZhbHNlIF0KLQl0aGVuCi0JCWdpdCB1cGRhdGUtaW5kZXggLS1jaG1vZD0iJDEiICIkMiIKLQlmaQotfQotCiAuIC4vdGVzdC1saWIuc2gKIAoraWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkw7IHRoZW4KKwlzYXkgJ3NraXBwaW5nIGdpdHdlYiB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKwogcGVybCAtTUVuY29kZSAtZSAnZGVjb2RlX3V0ZjgoIiIsIEVuY29kZTo6RkJfQ1JPQUspJyA+L2Rldi9udWxsIDI+JjEgfHwgewotICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXBwaW5nIGdpdHdlYiB0ZXN0cywgcGVybCB2ZXJzaW9uIGlzIHRvbyBvbGQnIDoKKyAgICBzYXkgJ3NraXBwaW5nIGdpdHdlYiB0ZXN0cywgcGVybCB2ZXJzaW9uIGlzIHRvbyBvbGQnCiAgICAgdGVzdF9kb25lCi0gICAgZXhpdAogfQogCiBnaXR3ZWJfaW5pdApAQCAtMjQwLDcgKzIzOCw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdjb21taXRkaWZmKDApOiBtb2RlIGNoYW5nZScgXAotCSdzYWZlX2NobW9kICt4IG5ld19maWxlICYmCisJJ3Rlc3RfY2htb2QgK3ggbmV3X2ZpbGUgJiYKIAkgZ2l0IGNvbW1pdCAtYSAtbSAiTW9kZSBjaGFuZ2VkLiIgJiYKIAkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCiB0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmxvZycKQEAgLTI1Miw3ICsyNTAsNyBAQAogCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKIHRlc3RfZGVidWcgJ2NhdCBnaXR3ZWIubG9nJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgXAogCSdjb21taXRkaWZmKDApOiBmaWxlIHRvIHN5bWxpbmsnIFwKIAkncm0gcmVuYW1lZF9maWxlICYmCiAJIGxuIC1zIGZpbGUgcmVuYW1lZF9maWxlICYmCkBAIC0yNzksNyArMjc3LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdjb21taXRkaWZmKDApOiBtb2RlIGNoYW5nZSBhbmQgbW9kaWZpZWQnIFwKIAknZWNobyAiTmV3IGxpbmUiID4+IGZpbGUyICYmCi0JIHNhZmVfY2htb2QgK3ggZmlsZTIgJiYKKwkgdGVzdF9jaG1vZCAreCBmaWxlMiAmJgogCSBnaXQgY29tbWl0IC1hIC1tICJNb2RlIGNoYW5nZSBhbmQgbW9kaWZpY2F0aW9uLiIgJiYKIAkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCiB0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmxvZycKQEAgLTMwNiw3ICszMDQsNyBAQAogCSdjb21taXRkaWZmKDApOiByZW5hbWVkLCBtb2RlIGNoYW5nZSBhbmQgbW9kaWZpZWQnIFwKIAknZ2l0IG12IGZpbGUzIGZpbGUyICYmCiAJIGVjaG8gIlByb3B0ZXIgbm9tZW4gc3V1bS4iID4+IGZpbGUyICYmCi0JIHNhZmVfY2htb2QgK3ggZmlsZTIgJiYKKwkgdGVzdF9jaG1vZCAreCBmaWxlMiAmJgogCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIHJlbmFtZSwgbW9kZSBjaGFuZ2UgYW5kIG1vZGlmaWNhdGlvbi4iICYmCiAJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJwogdGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5sb2cnCkBAIC0zMTQsNyArMzEyLDcgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBjb21taXRkaWZmIHRlc3RpbmcgKHRha2VuIGZyb20gdDQxMTQtYXBwbHktdHlwZWNoYW5nZS5zaCkKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdHlwZWNoYW5nZSBjb21taXRzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzZXR1cCB0eXBlY2hhbmdlIGNvbW1pdHMnICcKIAllY2hvICJoZWxsbyB3b3JsZCIgPiBmb28gJiYKIAllY2hvICJoaSBwbGFuZXQiID4gYmFyICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmb28gYmFyICYmCkBAIC00MjMsMTAgKzQyMSwxNSBAQAogCSBnaXQgYWRkIDAzLW5ldyAmJgogCSBnaXQgbXYgMDQtcmVuYW1lLWZyb20gMDQtcmVuYW1lLXRvICYmCiAJIGVjaG8gIkNoYW5nZWQiID4+IDA0LXJlbmFtZS10byAmJgotCSBzYWZlX2NobW9kICt4IDA1LW1vZGUtY2hhbmdlICYmCi0JIHJtIC1mIDA2LWZpbGUtb3Itc3ltbGluayAmJiBsbiAtcyAwMS1jaGFuZ2UgMDYtZmlsZS1vci1zeW1saW5rICYmCisJIHRlc3RfY2htb2QgK3ggMDUtbW9kZS1jaGFuZ2UgJiYKKwkgcm0gLWYgMDYtZmlsZS1vci1zeW1saW5rICYmCisJIGlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1M7IHRoZW4KKwkJbG4gLXMgMDEtY2hhbmdlIDA2LWZpbGUtb3Itc3ltbGluaworCSBlbHNlCisJCXByaW50ZiAlcyAwMS1jaGFuZ2UgPiAwNi1maWxlLW9yLXN5bWxpbmsKKwkgZmkgJiYKIAkgZWNobyAiQ2hhbmdlZCBhbmQgaGF2ZSBtb2RlIGNoYW5nZWQiID4gMDctY2hhbmdlLW1vZGUtY2hhbmdlCSYmCi0JIHNhZmVfY2htb2QgK3ggMDctY2hhbmdlLW1vZGUtY2hhbmdlICYmCisJIHRlc3RfY2htb2QgK3ggMDctY2hhbmdlLW1vZGUtY2hhbmdlICYmCiAJIGdpdCBjb21taXQgLWEgLW0gIkxhcmdlIGNvbW1pdCIgJiYKIAkgZ2l0IGNoZWNrb3V0IG1hc3RlcicKIApAQCAtNTg3LDcgKzU5MCw3IEBACiAJIGVjaG8gIklTTy04ODU5LTEiID4+IGZpbGUgJiYKIAkgZ2l0IGFkZCBmaWxlICYmCiAJIGdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tODg1OS0xICYmCi0JIGdpdCBjb21taXQgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvSVNPLTg4NTktMS50eHQgJiYKKwkgZ2l0IGNvbW1pdCAtRiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC9JU084ODU5LTEudHh0ICYmCiAJIGdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCiAJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdCInCiB0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmxvZycKQEAgLTY1NywyMiArNjYwLDQwIEBACiAKIFwkZmVhdHVyZXsnYmxhbWUnfXsnb3ZlcnJpZGUnfSA9IDE7CiBcJGZlYXR1cmV7J3NuYXBzaG90J317J292ZXJyaWRlJ30gPSAxOworXCRmZWF0dXJleydhdmF0YXInfXsnb3ZlcnJpZGUnfSA9IDE7CiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbmZpZyBvdmVycmlkZTogdHJlZSB2aWV3LCBmZWF0dXJlcyBub3Qgb3ZlcnJpZGRlbiBpbiByZXBvIGNvbmZpZycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlIicKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIubG9nJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknY29uZmlnIG92ZXJyaWRlOiB0cmVlIHZpZXcsIGZlYXR1cmVzIGRpc2FibGVkIGluIHJlcG8gY29uZmlnJyBcCiAJJ2dpdCBjb25maWcgZ2l0d2ViLmJsYW1lIG5vICYmCiAJIGdpdCBjb25maWcgZ2l0d2ViLnNuYXBzaG90IG5vbmUgJiYKKwkgZ2l0IGNvbmZpZyBnaXR3ZWIuYXZhdGFyIGdyYXZhdGFyICYmCiAJIGdpdHdlYl9ydW4gInA9LmdpdDthPXRyZWUiJwogdGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5sb2cnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotCSdjb25maWcgb3ZlcnJpZGU6IHRyZWUgdmlldywgZmVhdHVyZXMgZW5hYmxlZCBpbiByZXBvIGNvbmZpZycgXAorCSdjb25maWcgb3ZlcnJpZGU6IHRyZWUgdmlldywgZmVhdHVyZXMgZW5hYmxlZCBpbiByZXBvIGNvbmZpZyAoMSknIFwKIAknZ2l0IGNvbmZpZyBnaXR3ZWIuYmxhbWUgeWVzICYmCiAJIGdpdCBjb25maWcgZ2l0d2ViLnNuYXBzaG90ICJ6aXAsdGd6LCB0YnoyIiAmJgogCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlIicKIHRlc3RfZGVidWcgJ2NhdCBnaXR3ZWIubG9nJwogCitjYXQgPi5naXQvY29uZmlnIDw8XEVPRgorIyB0ZXN0aW5nIG5vdmFsIGFuZCBhbHRlcm5hdGUgc2VwYXJhdG9yCitbZ2l0d2ViXQorCWJsYW1lCisJc25hcHNob3QgPSB6aXAgdGd6CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb25maWcgb3ZlcnJpZGU6IHRyZWUgdmlldywgZmVhdHVyZXMgZW5hYmxlZCBpbiByZXBvIGNvbmZpZyAoMiknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZSInCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmxvZycKKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIG5vbi1BU0NJSSBpbiBSRUFETUUuaHRtbAogCmRpZmYgLS1naXQgYS90L3Q5NjAwLWN2c2ltcG9ydC5zaCBiL3QvdDk2MDAtY3ZzaW1wb3J0LnNoCmluZGV4IGQyMzc5ZTcuLjQzMjJhMGMgMTAwNzU1Ci0tLSBhL3QvdDk2MDAtY3ZzaW1wb3J0LnNoCisrKyBiL3QvdDk2MDAtY3ZzaW1wb3J0LnNoCkBAIC0zLDYgKzMsMTEgQEAKIHRlc3RfZGVzY3JpcHRpb249J2dpdCBjdnNpbXBvcnQgYmFzaWMgdGVzdHMnCiAuIC4vdGVzdC1saWIuc2gKIAoraWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkw7IHRoZW4KKwlzYXkgJ3NraXBwaW5nIGdpdCBjdnNpbXBvcnQgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKIENWU1JPT1Q9JChwd2QpL2N2c3Jvb3QKIGV4cG9ydCBDVlNST09UCiB1bnNldCBDVlNfU0VSVkVSCkBAIC0xNCw3ICsxOSw2IEBACiB0aGVuCiAJc2F5ICdza2lwcGluZyBjdnNpbXBvcnQgdGVzdHMsIGN2cyBub3QgZm91bmQnCiAJdGVzdF9kb25lCi0JZXhpdAogZmkKIAogY3ZzcHNfdmVyc2lvbj1gY3ZzcHMgLWggMj4mMSB8IHNlZCAtbmUgJ3MvY3ZzcHMgdmVyc2lvbiAvL3AnYApAQCAtMjQsMTIgKzI4LDEwIEBACiAnJykKIAlzYXkgJ3NraXBwaW5nIGN2c2ltcG9ydCB0ZXN0cywgY3ZzcHMgbm90IGZvdW5kJwogCXRlc3RfZG9uZQotCWV4aXQKIAk7OwogKikKIAlzYXkgJ3NraXBwaW5nIGN2c2ltcG9ydCB0ZXN0cywgdW5zdXBwb3J0ZWQgY3ZzcHMgdmVyc2lvbicKIAl0ZXN0X2RvbmUKLQlleGl0CiAJOzsKIGVzYWMKIApkaWZmIC0tZ2l0IGEvdC90OTcwMC1wZXJsLWdpdC5zaCBiL3QvdDk3MDAtcGVybC1naXQuc2gKaW5kZXggYjgxZDVkZi4uNGViN2QzZiAxMDA3NTUKLS0tIGEvdC90OTcwMC1wZXJsLWdpdC5zaAorKysgYi90L3Q5NzAwLXBlcmwtZ2l0LnNoCkBAIC02LDggKzYsMTMgQEAKIHRlc3RfZGVzY3JpcHRpb249J3BlcmwgaW50ZXJmYWNlIChHaXQucG0pJwogLiAuL3Rlc3QtbGliLnNoCiAKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMOyB0aGVuCisJc2F5ICdza2lwcGluZyBwZXJsIGludGVyZmFjZSB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKwogcGVybCAtTVRlc3Q6Ok1vcmUgLWUgMCAyPi9kZXYvbnVsbCB8fCB7Ci0Jc2F5X2NvbG9yIHNraXAgIlBlcmwgVGVzdDo6TW9yZSB1bmF2YWlsYWJsZSwgc2tpcHBpbmcgdGVzdCIKKwlzYXkgIlBlcmwgVGVzdDo6TW9yZSB1bmF2YWlsYWJsZSwgc2tpcHBpbmcgdGVzdCIKIAl0ZXN0X2RvbmUKIH0KIApAQCAtMjQsNiArMjksMTAgQEAKICAgICAgZ2l0IGFkZCAuICYmCiAgICAgIGdpdCBjb21taXQgLW0gImZpcnN0IGNvbW1pdCIgJiYKIAorICAgICBlY2hvICJuZXcgZmlsZSBpbiBzdWJkaXIgMiIgPiBkaXJlY3RvcnkyL2ZpbGUyICYmCisgICAgIGdpdCBhZGQgLiAmJgorICAgICBnaXQgY29tbWl0IC1tICJjb21taXQgaW4gZGlyZWN0b3J5MiIgJiYKKwogICAgICBlY2hvICJjaGFuZ2VkIGZpbGUgMSIgPiBmaWxlMSAmJgogICAgICBnaXQgY29tbWl0IC1hIC1tICJzZWNvbmQgY29tbWl0IiAmJgogCmRpZmYgLS1naXQgYS90L3Q5NzAwL3Rlc3QucGwgYi90L3Q5NzAwL3Rlc3QucGwKaW5kZXggNjk3ZGFmMy4uNmM3MGFlYyAxMDA3NTUKLS0tIGEvdC90OTcwMC90ZXN0LnBsCisrKyBiL3QvdDk3MDAvdGVzdC5wbApAQCAtODYsMTUgKzg2LDIyIEBACiB1bmxpbmsgJHRtcGZpbGU7CiAKICMgcGF0aHMKLWlzKCRyLT5yZXBvX3BhdGgsICIuLy5naXQiLCAicmVwb19wYXRoIik7Citpcygkci0+cmVwb19wYXRoLCAkYWJzX3JlcG9fZGlyIC4gIi8uZ2l0IiwgInJlcG9fcGF0aCIpOwogaXMoJHItPndjX3BhdGgsICRhYnNfcmVwb19kaXIgLiAiLyIsICJ3Y19wYXRoIik7CiBpcygkci0+d2Nfc3ViZGlyLCAiIiwgIndjX3N1YmRpciBpbml0aWFsIik7CiAkci0+d2NfY2hkaXIoImRpcmVjdG9yeTEiKTsKIGlzKCRyLT53Y19zdWJkaXIsICJkaXJlY3RvcnkxIiwgIndjX3N1YmRpciBhZnRlciB3Y19jaGRpciIpOwotVE9ETzogewotCWxvY2FsICRUT0RPID0gImNvbW1hbmRzIGRvIG5vdCB3b3JrIGFmdGVyIHdjX2NoZGlyIjsKLQkjIEZhaWx1cmUgb3V0cHV0IGlzIGFjdGl2ZSBldmVuIGluIG5vbi12ZXJib3NlIG1vZGUgYW5kIHRodXMKLQkjIGFubm95aW5nLiAgSGVuY2Ugd2Ugc2tpcCB0aGVzZSB0ZXN0cyBhcyBsb25nIGFzIHRoZXkgZmFpbC4KLQl0b2RvX3NraXAgJ2NvbmZpZyBhZnRlciB3Y19jaGRpcicsIDE7Ci0JaXMoJHItPmNvbmZpZygiY29sb3Iuc3RyaW5nIiksICJ2YWx1ZSIsICJjb25maWcgYWZ0ZXIgd2NfY2hkaXIiKTsKLX0KK2lzKCRyLT5jb25maWcoInRlc3Quc3RyaW5nIiksICJ2YWx1ZSIsICJjb25maWcgYWZ0ZXIgd2NfY2hkaXIiKTsKKworIyBPYmplY3QgZ2VuZXJhdGlvbiBpbiBzdWIgZGlyZWN0b3J5CitjaGRpcigiZGlyZWN0b3J5MiIpOworbXkgJHIyID0gR2l0LT5yZXBvc2l0b3J5KCk7CitpcygkcjItPnJlcG9fcGF0aCwgJGFic19yZXBvX2RpciAuICIvLmdpdCIsICJyZXBvX3BhdGggKDIpIik7CitpcygkcjItPndjX3BhdGgsICRhYnNfcmVwb19kaXIgLiAiLyIsICJ3Y19wYXRoICgyKSIpOworaXMoJHIyLT53Y19zdWJkaXIsICJkaXJlY3RvcnkyLyIsICJ3Y19zdWJkaXIgaW5pdGlhbCAoMikiKTsKKworIyBjb21tYW5kcyBpbiBzdWIgZGlyZWN0b3J5CitteSAkbGFzdF9jb21taXQgPSAkcjItPmNvbW1hbmRfb25lbGluZShxdyhyZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkpOworbGlrZSgkbGFzdF9jb21taXQsIHFyL15bMC05YS1mQS1GXXs0MH0kLywgJ3Jldi1wYXJzZSByZXR1cm5lZCBoYXNoJyk7CitteSAkZGlyX2NvbW1pdCA9ICRyMi0+Y29tbWFuZF9vbmVsaW5lKCdsb2cnLCAnLW4xJywgJy0tcHJldHR5PWZvcm1hdDolSCcsICcuJyk7Citpc250KCRsYXN0X2NvbW1pdCwgJGRpcl9jb21taXQsICdsb2cgLiBkb2VzIG5vdCBzaG93IGxhc3QgY29tbWl0Jyk7CmRpZmYgLS1naXQgYS90L3Rlc3QtbGliLnNoIGIvdC90ZXN0LWxpYi5zaAppbmRleCAxYjRmMjE2Li41ZmRjNWQ5IDEwMDY0NAotLS0gYS90L3Rlc3QtbGliLnNoCisrKyBiL3QvdGVzdC1saWIuc2gKQEAgLTMsNiArMywyMiBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KICMKIAorIyBpZiAtLXRlZSB3YXMgcGFzc2VkLCB3cml0ZSB0aGUgb3V0cHV0IG5vdCBvbmx5IHRvIHRoZSB0ZXJtaW5hbCwgYnV0CisjIGFkZGl0aW9uYWxseSB0byB0aGUgZmlsZSB0ZXN0LXJlc3VsdHMvJEJBU0VOQU1FLm91dCwgdG9vLgorY2FzZSAiJEdJVF9URVNUX1RFRV9TVEFSVEVELCAkKiAiIGluCitkb25lLCopCisJIyBkbyBub3QgcmVkaXJlY3QgYWdhaW4KKwk7OworKicgLS10ZWUgJyp8KicgLS12YScqKQorCW1rZGlyIC1wIHRlc3QtcmVzdWx0cworCUJBU0U9dGVzdC1yZXN1bHRzLyQoYmFzZW5hbWUgIiQwIiAuc2gpCisJKEdJVF9URVNUX1RFRV9TVEFSVEVEPWRvbmUgJHtTSEVMTC1zaH0gIiQwIiAiJEAiIDI+JjE7CisJIGVjaG8gJD8gPiAkQkFTRS5leGl0KSB8IHRlZSAkQkFTRS5vdXQKKwl0ZXN0ICIkKGNhdCAkQkFTRS5leGl0KSIgPSAwCisJZXhpdAorCTs7Citlc2FjCisKICMgS2VlcCB0aGUgb3JpZ2luYWwgVEVSTSBmb3Igc2F5X2NvbG9yCiBPUklHSU5BTF9URVJNPSRURVJNCiAKQEAgLTk0LDggKzExMCwxMiBAQAogCS0tbm8tcHl0aG9uKQogCQkjIG5vb3Agbm93Li4uCiAJCXNoaWZ0IDs7CisJLS12YXwtLXZhbHwtLXZhbGd8LS12YWxncnwtLXZhbGdyaXwtLXZhbGdyaW58LS12YWxncmluZCkKKwkJdmFsZ3JpbmQ9dDsgdmVyYm9zZT10OyBzaGlmdCA7OworCS0tdGVlKQorCQlzaGlmdCA7OyAjIHdhcyBoYW5kbGVkIGFscmVhZHkKIAkqKQotCQlicmVhayA7OworCQllY2hvICJlcnJvcjogdW5rbm93biB0ZXN0IG9wdGlvbiAnJDEnIiA+JjI7IGV4aXQgMSA7OwogCWVzYWMKIGRvbmUKIApAQCAtMTI3LDcgKzE0Nyw3IEBACiAKIGVycm9yICgpIHsKIAlzYXlfY29sb3IgZXJyb3IgImVycm9yOiAkKiIKLQl0cmFwIC0gZXhpdAorCUdJVF9FWElUX09LPXQKIAlleGl0IDEKIH0KIApAQCAtMTU5LDExICsxNzksMTggQEAKIHRlc3Rfc3VjY2Vzcz0wCiAKIGRpZSAoKSB7Ci0JZWNobyA+JjUgIkZBVEFMOiBVbmV4cGVjdGVkIGV4aXQgd2l0aCBjb2RlICQ/IgotCWV4aXQgMQorCWNvZGU9JD8KKwlpZiB0ZXN0IC1uICIkR0lUX0VYSVRfT0siCisJdGhlbgorCQlleGl0ICRjb2RlCisJZWxzZQorCQllY2hvID4mNSAiRkFUQUw6IFVuZXhwZWN0ZWQgZXhpdCB3aXRoIGNvZGUgJGNvZGUiCisJCWV4aXQgMQorCWZpCiB9CiAKLXRyYXAgJ2RpZScgZXhpdAorR0lUX0VYSVRfT0s9Cit0cmFwICdkaWUnIEVYSVQKIAogIyBUaGUgc2VtYW50aWNzIG9mIHRoZSBlZGl0b3IgdmFyaWFibGVzIGFyZSB0aGF0IG9mIGludm9raW5nCiAjIHNoIC1jICIkRURJVE9SIFwiJEBcIiIgZmlsZXMgLi4uCkBAIC0xOTMsMzIgKzIyMCw4NyBAQAogCWV4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEUgR0lUX0FVVEhPUl9EQVRFCiB9CiAKKyMgQ2FsbCB0ZXN0X2NvbW1pdCB3aXRoIHRoZSBhcmd1bWVudHMgIjxtZXNzYWdlPiBbPGZpbGU+IFs8Y29udGVudHM+XV0iCisjCisjIFRoaXMgd2lsbCBjb21taXQgYSBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnRzIGFuZCB0aGUgZ2l2ZW4gY29tbWl0CisjIG1lc3NhZ2UuICBJdCB3aWxsIGFsc28gYWRkIGEgdGFnIHdpdGggPG1lc3NhZ2U+IGFzIG5hbWUuCisjCisjIEJvdGggPGZpbGU+IGFuZCA8Y29udGVudHM+IGRlZmF1bHQgdG8gPG1lc3NhZ2U+LgorCit0ZXN0X2NvbW1pdCAoKSB7CisJZmlsZT0kezI6LSIkMS50In0KKwllY2hvICIkezMtJDF9IiA+ICIkZmlsZSIgJiYKKwlnaXQgYWRkICIkZmlsZSIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICIkMSIgJiYKKwlnaXQgdGFnICIkMSIKK30KKworIyBDYWxsIHRlc3RfbWVyZ2Ugd2l0aCB0aGUgYXJndW1lbnRzICI8bWVzc2FnZT4gPGNvbW1pdD4iLCB3aGVyZSA8Y29tbWl0PgorIyBjYW4gYmUgYSB0YWcgcG9pbnRpbmcgdG8gdGhlIGNvbW1pdC10by1tZXJnZS4KKwordGVzdF9tZXJnZSAoKSB7CisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1tICIkMSIgIiQyIiAmJgorCWdpdCB0YWcgIiQxIgorfQorCisjIFRoaXMgZnVuY3Rpb24gaGVscHMgc3lzdGVtcyB3aGVyZSBjb3JlLmZpbGVtb2RlPWZhbHNlIGlzIHNldC4KKyMgVXNlIGl0IGluc3RlYWQgb2YgcGxhaW4gJ2NobW9kICt4JyB0byBzZXQgb3IgdW5zZXQgdGhlIGV4ZWN1dGFibGUgYml0CisjIG9mIGEgZmlsZSBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkgYW5kIGFkZCBpdCB0byB0aGUgaW5kZXguCisKK3Rlc3RfY2htb2QgKCkgeworCWNobW9kICIkQCIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkICItLWNobW9kPSRAIgorfQorCisjIFVzZSB0ZXN0X3NldF9wcmVyZXEgdG8gdGVsbCB0aGF0IGEgcGFydGljdWxhciBwcmVyZXF1aXNpdGUgaXMgYXZhaWxhYmxlLgorIyBUaGUgcHJlcmVxdWlzaXRlIGNhbiBsYXRlciBiZSBjaGVja2VkIGZvciBpbiB0d28gd2F5czoKKyMKKyMgLSBFeHBsaWNpdGx5IHVzaW5nIHRlc3RfaGF2ZV9wcmVyZXEuCisjCisjIC0gSW1wbGljaXRseSBieSBzcGVjaWZ5aW5nIHRoZSBwcmVyZXF1aXNpdGUgdGFnIGluIHRoZSBjYWxscyB0bworIyAgIHRlc3RfZXhwZWN0X3tzdWNjZXNzLGZhaWx1cmUsY29kZX0uCisjCisjIFRoZSBzaW5nbGUgcGFyYW1ldGVyIGlzIHRoZSBwcmVyZXF1aXNpdGUgdGFnIChhIHNpbXBsZSB3b3JkLCBpbiBhbGwKKyMgY2FwaXRhbCBsZXR0ZXJzIGJ5IGNvbnZlbnRpb24pLgorCit0ZXN0X3NldF9wcmVyZXEgKCkgeworCXNhdGlzZmllZD0iJHNhdGlzZmllZCQxICIKK30KK3NhdGlzZmllZD0iICIKKwordGVzdF9oYXZlX3ByZXJlcSAoKSB7CisJY2FzZSAkc2F0aXNmaWVkIGluCisJKiIgJDEgIiopCisJCTogeWVzLCBoYXZlIGl0IDs7CisJKikKKwkJISA6IG5vcGUgOzsKKwllc2FjCit9CisKICMgWW91IGFyZSBub3QgZXhwZWN0ZWQgdG8gY2FsbCB0ZXN0X29rXyBhbmQgdGVzdF9mYWlsdXJlXyBkaXJlY3RseSwgdXNlCiAjIHRoZSB0ZXh0X2V4cGVjdF8qIGZ1bmN0aW9ucyBpbnN0ZWFkLgogCiB0ZXN0X29rXyAoKSB7Ci0JdGVzdF9jb3VudD0kKGV4cHIgIiR0ZXN0X2NvdW50IiArIDEpCi0JdGVzdF9zdWNjZXNzPSQoZXhwciAiJHRlc3Rfc3VjY2VzcyIgKyAxKQorCXRlc3Rfc3VjY2Vzcz0kKCgkdGVzdF9zdWNjZXNzICsgMSkpCiAJc2F5X2NvbG9yICIiICIgIG9rICR0ZXN0X2NvdW50OiAkQCIKIH0KIAogdGVzdF9mYWlsdXJlXyAoKSB7Ci0JdGVzdF9jb3VudD0kKGV4cHIgIiR0ZXN0X2NvdW50IiArIDEpCi0JdGVzdF9mYWlsdXJlPSQoZXhwciAiJHRlc3RfZmFpbHVyZSIgKyAxKTsKKwl0ZXN0X2ZhaWx1cmU9JCgoJHRlc3RfZmFpbHVyZSArIDEpKQogCXNheV9jb2xvciBlcnJvciAiRkFJTCAkdGVzdF9jb3VudDogJDEiCiAJc2hpZnQKIAllY2hvICIkQCIgfCBzZWQgLWUgJ3MvXi8JLycKLQl0ZXN0ICIkaW1tZWRpYXRlIiA9ICIiIHx8IHsgdHJhcCAtIGV4aXQ7IGV4aXQgMTsgfQorCXRlc3QgIiRpbW1lZGlhdGUiID0gIiIgfHwgeyBHSVRfRVhJVF9PSz10OyBleGl0IDE7IH0KIH0KIAogdGVzdF9rbm93bl9icm9rZW5fb2tfICgpIHsKLQl0ZXN0X2NvdW50PSQoZXhwciAiJHRlc3RfY291bnQiICsgMSkKIAl0ZXN0X2ZpeGVkPSQoKCR0ZXN0X2ZpeGVkKzEpKQogCXNheV9jb2xvciAiIiAiICBGSVhFRCAkdGVzdF9jb3VudDogJEAiCiB9CiAKIHRlc3Rfa25vd25fYnJva2VuX2ZhaWx1cmVfICgpIHsKLQl0ZXN0X2NvdW50PSQoZXhwciAiJHRlc3RfY291bnQiICsgMSkKIAl0ZXN0X2Jyb2tlbj0kKCgkdGVzdF9icm9rZW4rMSkpCiAJc2F5X2NvbG9yIHNraXAgIiAgc3RpbGwgYnJva2VuICR0ZXN0X2NvdW50OiAkQCIKIH0KQEAgLTIzNCwyMCArMzE2LDIzIEBACiB9CiAKIHRlc3Rfc2tpcCAoKSB7Ci0JdGhpc190ZXN0PSQoZXhwciAiLi8kMCIgOiAnLiovXCh0WzAtOV0qXCktW14vXSokJykKLQl0aGlzX3Rlc3Q9IiR0aGlzX3Rlc3QuJChleHByICIkdGVzdF9jb3VudCIgKyAxKSIKKwl0ZXN0X2NvdW50PSQoKCR0ZXN0X2NvdW50KzEpKQogCXRvX3NraXA9CiAJZm9yIHNrcCBpbiAkR0lUX1NLSVBfVEVTVFMKIAlkbwotCQljYXNlICIkdGhpc190ZXN0IiBpbgorCQljYXNlICR0aGlzX3Rlc3QuJHRlc3RfY291bnQgaW4KIAkJJHNrcCkKIAkJCXRvX3NraXA9dAogCQllc2FjCiAJZG9uZQorCWlmIHRlc3QgLXogIiR0b19za2lwIiAmJiB0ZXN0IC1uICIkcHJlcmVxIiAmJgorCSAgICEgdGVzdF9oYXZlX3ByZXJlcSAiJHByZXJlcSIKKwl0aGVuCisJCXRvX3NraXA9dAorCWZpCiAJY2FzZSAiJHRvX3NraXAiIGluCiAJdCkKIAkJc2F5X2NvbG9yIHNraXAgPiYzICJza2lwcGluZyB0ZXN0OiAkQCIKLQkJdGVzdF9jb3VudD0kKGV4cHIgIiR0ZXN0X2NvdW50IiArIDEpCiAJCXNheV9jb2xvciBza2lwICJza2lwICR0ZXN0X2NvdW50OiAkMSIKIAkJOiB0cnVlCiAJCTs7CkBAIC0yNTgsOCArMzQzLDkgQEAKIH0KIAogdGVzdF9leHBlY3RfZmFpbHVyZSAoKSB7CisJdGVzdCAiJCMiID0gMyAmJiB7IHByZXJlcT0kMTsgc2hpZnQ7IH0gfHwgcHJlcmVxPQogCXRlc3QgIiQjIiA9IDIgfHwKLQllcnJvciAiYnVnIGluIHRoZSB0ZXN0IHNjcmlwdDogbm90IDIgcGFyYW1ldGVycyB0byB0ZXN0LWV4cGVjdC1mYWlsdXJlIgorCWVycm9yICJidWcgaW4gdGhlIHRlc3Qgc2NyaXB0OiBub3QgMiBvciAzIHBhcmFtZXRlcnMgdG8gdGVzdC1leHBlY3QtZmFpbHVyZSIKIAlpZiAhIHRlc3Rfc2tpcCAiJEAiCiAJdGhlbgogCQlzYXkgPiYzICJjaGVja2luZyBrbm93biBicmVha2FnZTogJDIiCkBAIC0yNjgsMTUgKzM1NCwxNiBAQAogCQl0aGVuCiAJCQl0ZXN0X2tub3duX2Jyb2tlbl9va18gIiQxIgogCQllbHNlCi0JCSAgICB0ZXN0X2tub3duX2Jyb2tlbl9mYWlsdXJlXyAiJDEiCisJCQl0ZXN0X2tub3duX2Jyb2tlbl9mYWlsdXJlXyAiJDEiCiAJCWZpCiAJZmkKIAllY2hvID4mMyAiIgogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICgpIHsKKwl0ZXN0ICIkIyIgPSAzICYmIHsgcHJlcmVxPSQxOyBzaGlmdDsgfSB8fCBwcmVyZXE9CiAJdGVzdCAiJCMiID0gMiB8fAotCWVycm9yICJidWcgaW4gdGhlIHRlc3Qgc2NyaXB0OiBub3QgMiBwYXJhbWV0ZXJzIHRvIHRlc3QtZXhwZWN0LXN1Y2Nlc3MiCisJZXJyb3IgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IG5vdCAyIG9yIDMgcGFyYW1ldGVycyB0byB0ZXN0LWV4cGVjdC1zdWNjZXNzIgogCWlmICEgdGVzdF9za2lwICIkQCIKIAl0aGVuCiAJCXNheSA+JjMgImV4cGVjdGluZyBzdWNjZXNzOiAkMiIKQEAgLTI5Miw4ICszNzksOSBAQAogfQogCiB0ZXN0X2V4cGVjdF9jb2RlICgpIHsKKwl0ZXN0ICIkIyIgPSA0ICYmIHsgcHJlcmVxPSQxOyBzaGlmdDsgfSB8fCBwcmVyZXE9CiAJdGVzdCAiJCMiID0gMyB8fAotCWVycm9yICJidWcgaW4gdGhlIHRlc3Qgc2NyaXB0OiBub3QgMyBwYXJhbWV0ZXJzIHRvIHRlc3QtZXhwZWN0LWNvZGUiCisJZXJyb3IgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IG5vdCAzIG9yIDQgcGFyYW1ldGVycyB0byB0ZXN0LWV4cGVjdC1jb2RlIgogCWlmICEgdGVzdF9za2lwICIkQCIKIAl0aGVuCiAJCXNheSA+JjMgImV4cGVjdGluZyBleGl0IGNvZGUgJDE6ICQzIgpAQCAtMzE3LDE1ICs0MDUsMTYgQEAKICMgVXNhZ2U6IHRlc3RfZXh0ZXJuYWwgZGVzY3JpcHRpb24gY29tbWFuZCBhcmd1bWVudHMuLi4KICMgRXhhbXBsZTogdGVzdF9leHRlcm5hbCAnUGVybCBBUEknIHBlcmwgLi4vcGF0aC90by90ZXN0LnBsCiB0ZXN0X2V4dGVybmFsICgpIHsKLQl0ZXN0ICIkIyIgLWVxIDMgfHwKLQllcnJvciA+JjUgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IG5vdCAzIHBhcmFtZXRlcnMgdG8gdGVzdF9leHRlcm5hbCIKKwl0ZXN0ICIkIyIgPSA0ICYmIHsgcHJlcmVxPSQxOyBzaGlmdDsgfSB8fCBwcmVyZXE9CisJdGVzdCAiJCMiID0gMyB8fAorCWVycm9yID4mNSAiYnVnIGluIHRoZSB0ZXN0IHNjcmlwdDogbm90IDMgb3IgNCBwYXJhbWV0ZXJzIHRvIHRlc3RfZXh0ZXJuYWwiCiAJZGVzY3I9IiQxIgogCXNoaWZ0CiAJaWYgISB0ZXN0X3NraXAgIiRkZXNjciIgIiRAIgogCXRoZW4KIAkJIyBBbm5vdW5jZSB0aGUgc2NyaXB0IHRvIHJlZHVjZSBjb25mdXNpb24gYWJvdXQgdGhlCiAJCSMgdGVzdCBvdXRwdXQgdGhhdCBmb2xsb3dzLgotCQlzYXlfY29sb3IgIiIgIiBydW4gJChleHByICIkdGVzdF9jb3VudCIgKyAxKTogJGRlc2NyICgkKikiCisJCXNheV9jb2xvciAiIiAiIHJ1biAkdGVzdF9jb3VudDogJGRlc2NyICgkKikiCiAJCSMgUnVuIGNvbW1hbmQ7IHJlZGlyZWN0IGl0cyBzdGRlcnIgdG8gJjQgYXMgaW4KIAkJIyB0ZXN0X3J1bl8sIGJ1dCBrZWVwIGl0cyBzdGRvdXQgb24gb3VyIHN0ZG91dCBldmVuIGluCiAJCSMgbm9uLXZlcmJvc2UgbW9kZS4KQEAgLTQwOSwxNyArNDk4LDE3IEBACiAJcmVwbz0iJDEiCiAJbWtkaXIgLXAgIiRyZXBvIgogCWNkICIkcmVwbyIgfHwgZXJyb3IgIkNhbm5vdCBzZXR1cCB0ZXN0IGVudmlyb25tZW50IgotCSIkR0lUX0VYRUNfUEFUSC9naXQiIGluaXQgIi0tdGVtcGxhdGU9JEdJVF9FWEVDX1BBVEgvdGVtcGxhdGVzL2JsdC8iID4mMyAyPiY0IHx8CisJIiRHSVRfRVhFQ19QQVRIL2dpdC1pbml0IiAiLS10ZW1wbGF0ZT0kVEVTVF9ESVJFQ1RPUlkvLi4vdGVtcGxhdGVzL2JsdC8iID4mMyAyPiY0IHx8CiAJZXJyb3IgImNhbm5vdCBydW4gZ2l0IGluaXQgLS0gaGF2ZSB5b3UgYnVpbHQgdGhpbmdzIHlldD8iCiAJbXYgLmdpdC9ob29rcyAuZ2l0L2hvb2tzLWRpc2FibGVkCiAJY2QgIiRvd2QiCiB9CiAKIHRlc3RfZG9uZSAoKSB7Ci0JdHJhcCAtIGV4aXQKKwlHSVRfRVhJVF9PSz10CiAJdGVzdF9yZXN1bHRzX2Rpcj0iJFRFU1RfRElSRUNUT1JZL3Rlc3QtcmVzdWx0cyIKIAlta2RpciAtcCAiJHRlc3RfcmVzdWx0c19kaXIiCi0JdGVzdF9yZXN1bHRzX3BhdGg9IiR0ZXN0X3Jlc3VsdHNfZGlyLyR7MCUtKn0tJCQiCisJdGVzdF9yZXN1bHRzX3BhdGg9IiR0ZXN0X3Jlc3VsdHNfZGlyLyR7MCUuc2h9LSQkIgogCiAJZWNobyAidG90YWwgJHRlc3RfY291bnQiID4+ICR0ZXN0X3Jlc3VsdHNfcGF0aAogCWVjaG8gInN1Y2Nlc3MgJHRlc3Rfc3VjY2VzcyIgPj4gJHRlc3RfcmVzdWx0c19wYXRoCkBAIC00NTksOCArNTQ4LDgxIEBACiAjIFRlc3QgdGhlIGJpbmFyaWVzIHdlIGhhdmUganVzdCBidWlsdC4gIFRoZSB0ZXN0cyBhcmUga2VwdCBpbgogIyB0LyBzdWJkaXJlY3RvcnkgYW5kIGFyZSBydW4gaW4gJ3RyYXNoIGRpcmVjdG9yeScgc3ViZGlyZWN0b3J5LgogVEVTVF9ESVJFQ1RPUlk9JChwd2QpCi1QQVRIPSRURVNUX0RJUkVDVE9SWS8uLjokUEFUSAotR0lUX0VYRUNfUEFUSD0kKHB3ZCkvLi4KK2lmIHRlc3QgLXogIiR2YWxncmluZCIKK3RoZW4KKwlpZiB0ZXN0IC16ICIkR0lUX1RFU1RfSU5TVEFMTEVEIgorCXRoZW4KKwkJUEFUSD0kVEVTVF9ESVJFQ1RPUlkvLi46JFBBVEgKKwkJR0lUX0VYRUNfUEFUSD0kVEVTVF9ESVJFQ1RPUlkvLi4KKwllbHNlCisJCUdJVF9FWEVDX1BBVEg9JCgkR0lUX1RFU1RfSU5TVEFMTEVEL2dpdCAtLWV4ZWMtcGF0aCkgIHx8CisJCWVycm9yICJDYW5ub3QgcnVuIGdpdCBmcm9tICRHSVRfVEVTVF9JTlNUQUxMRUQuIgorCQlQQVRIPSRHSVRfVEVTVF9JTlNUQUxMRUQ6JFRFU1RfRElSRUNUT1JZLy4uOiRQQVRICisJCUdJVF9FWEVDX1BBVEg9JHtHSVRfVEVTVF9FWEVDX1BBVEg6LSRHSVRfRVhFQ19QQVRIfQorCWZpCitlbHNlCisJbWFrZV9zeW1saW5rICgpIHsKKwkJdGVzdCAtaCAiJDIiICYmCisJCXRlc3QgIiQxIiA9ICIkKHJlYWRsaW5rICIkMiIpIiB8fCB7CisJCQkjIGJlIHN1cGVyIHBhcmFub2lkCisJCQlpZiBta2RpciAiJDIiLmxvY2sKKwkJCXRoZW4KKwkJCQlybSAtZiAiJDIiICYmCisJCQkJbG4gLXMgIiQxIiAiJDIiICYmCisJCQkJcm0gLXIgIiQyIi5sb2NrCisJCQllbHNlCisJCQkJd2hpbGUgdGVzdCAtZCAiJDIiLmxvY2sKKwkJCQlkbworCQkJCQlzYXkgIldhaXRpbmcgZm9yIGxvY2sgb24gJDIuIgorCQkJCQlzbGVlcCAxCisJCQkJZG9uZQorCQkJZmkKKwkJfQorCX0KKworCW1ha2VfdmFsZ3JpbmRfc3ltbGluayAoKSB7CisJCSMgaGFuZGxlIG9ubHkgZXhlY3V0YWJsZXMKKwkJdGVzdCAteCAiJDEiIHx8IHJldHVybgorCisJCWJhc2U9JChiYXNlbmFtZSAiJDEiKQorCQlzeW1saW5rX3RhcmdldD0kVEVTVF9ESVJFQ1RPUlkvLi4vJGJhc2UKKwkJIyBkbyBub3Qgb3ZlcnJpZGUgc2NyaXB0cworCQlpZiB0ZXN0IC14ICIkc3ltbGlua190YXJnZXQiICYmCisJCSAgICB0ZXN0ICEgLWQgIiRzeW1saW5rX3RhcmdldCIgJiYKKwkJICAgIHRlc3QgIiMhIiAhPSAiJChoZWFkIC1jIDIgPCAiJHN5bWxpbmtfdGFyZ2V0IikiCisJCXRoZW4KKwkJCXN5bWxpbmtfdGFyZ2V0PS4uL3ZhbGdyaW5kLnNoCisJCWZpCisJCWNhc2UgIiRiYXNlIiBpbgorCQkqLnNofCoucGVybCkKKwkJCXN5bWxpbmtfdGFyZ2V0PS4uL3VucHJvY2Vzc2VkLXNjcmlwdAorCQllc2FjCisJCSMgY3JlYXRlIHRoZSBsaW5rLCBvciByZXBsYWNlIGl0IGlmIGl0IGlzIG91dCBvZiBkYXRlCisJCW1ha2Vfc3ltbGluayAiJHN5bWxpbmtfdGFyZ2V0IiAiJEdJVF9WQUxHUklORC9iaW4vJGJhc2UiIHx8IGV4aXQKKwl9CisKKwkjIG92ZXJyaWRlIGFsbCBnaXQgZXhlY3V0YWJsZXMgaW4gVEVTVF9ESVJFQ1RPUlkvLi4KKwlHSVRfVkFMR1JJTkQ9JFRFU1RfRElSRUNUT1JZL3ZhbGdyaW5kCisJbWtkaXIgLXAgIiRHSVRfVkFMR1JJTkQiL2JpbgorCWZvciBmaWxlIGluICRURVNUX0RJUkVDVE9SWS8uLi9naXQqICRURVNUX0RJUkVDVE9SWS8uLi90ZXN0LSoKKwlkbworCQltYWtlX3ZhbGdyaW5kX3N5bWxpbmsgJGZpbGUKKwlkb25lCisJT0xESUZTPSRJRlMKKwlJRlM9OgorCWZvciBwYXRoIGluICRQQVRICisJZG8KKwkJbHMgIiRwYXRoIi9naXQtKiAyPiAvZGV2L251bGwgfAorCQl3aGlsZSByZWFkIGZpbGUKKwkJZG8KKwkJCW1ha2VfdmFsZ3JpbmRfc3ltbGluayAiJGZpbGUiCisJCWRvbmUKKwlkb25lCisJSUZTPSRPTERJRlMKKwlQQVRIPSRHSVRfVkFMR1JJTkQvYmluOiRQQVRICisJR0lUX0VYRUNfUEFUSD0kR0lUX1ZBTEdSSU5EL2JpbgorCWV4cG9ydCBHSVRfVkFMR1JJTkQKK2ZpCiBHSVRfVEVNUExBVEVfRElSPSQocHdkKS8uLi90ZW1wbGF0ZXMvYmx0CiB1bnNldCBHSVRfQ09ORklHCiBHSVRfQ09ORklHX05PU1lTVEVNPTEKQEAgLTQ4NSw3ICs2NDcsNyBAQAogdGVzdD0idHJhc2ggZGlyZWN0b3J5LiQoYmFzZW5hbWUgIiQwIiAuc2gpIgogdGVzdCAhIC16ICIkZGVidWciIHx8IHJlbW92ZV90cmFzaD0iJFRFU1RfRElSRUNUT1JZLyR0ZXN0Igogcm0gLWZyICIkdGVzdCIgfHwgewotCXRyYXAgLSBleGl0CisJR0lUX0VYSVRfT0s9dAogCWVjaG8gPiY1ICJGQVRBTDogQ2Fubm90IHByZXBhcmUgdGVzdCBhcmVhIgogCWV4aXQgMQogfQpAQCAtNDk1LDcgKzY1Nyw4IEBACiAjIGluIHN1YnByb2Nlc3NlcyBsaWtlIGdpdCBlcXVhbHMgb3VyICRQV0QgKGZvciBwYXRobmFtZSBjb21wYXJpc29ucykuCiBjZCAtUCAiJHRlc3QiIHx8IGV4aXQgMQogCi10aGlzX3Rlc3Q9JChleHByICIuLyQwIiA6ICcuKi9cKHRbMC05XSpcKS1bXi9dKiQnKQordGhpc190ZXN0PSR7MCMjKi99Cit0aGlzX3Rlc3Q9JHt0aGlzX3Rlc3QlJS0qfQogZm9yIHNrcCBpbiAkR0lUX1NLSVBfVEVTVFMKIGRvCiAJdG9fc2tpcD0KQEAgLTUxMywzICs2NzYsMzcgQEAKIAkJdGVzdF9kb25lCiAJZXNhYwogZG9uZQorCisjIEZpeCBzb21lIGNvbW1hbmRzIG9uIFdpbmRvd3MKK2Nhc2UgJCh1bmFtZSAtcykgaW4KKypNSU5HVyopCisJIyBXaW5kb3dzIGhhcyBpdHMgb3duIChpbmNvbXBhdGlibGUpIHNvcnQgYW5kIGZpbmQKKwlzb3J0ICgpIHsKKwkJL3Vzci9iaW4vc29ydCAiJEAiCisJfQorCWZpbmQgKCkgeworCQkvdXNyL2Jpbi9maW5kICIkQCIKKwl9CisJc3VtICgpIHsKKwkJbWQ1c3VtICIkQCIKKwl9CisJIyBnaXQgc2VlcyBXaW5kb3dzLXN0eWxlIHB3ZAorCXB3ZCAoKSB7CisJCWJ1aWx0aW4gcHdkIC1XCisJfQorCSMgbm8gUE9TSVggcGVybWlzc2lvbnMKKwkjIGJhY2tzbGFzaGVzIGluIHBhdGhzcGVjIGFyZSBjb252ZXJ0ZWQgdG8gJy8nCisJIyBleGVjIGRvZXMgbm90IGluaGVyaXQgdGhlIFBJRAorCTs7CisqKQorCXRlc3Rfc2V0X3ByZXJlcSBQT1NJWFBFUk0KKwl0ZXN0X3NldF9wcmVyZXEgQlNMQVNIUFNQRUMKKwl0ZXN0X3NldF9wcmVyZXEgRVhFQ0tFRVBTUElECisJOzsKK2VzYWMKKwordGVzdCAteiAiJE5PX1BFUkwiICYmIHRlc3Rfc2V0X3ByZXJlcSBQRVJMCisKKyMgdGVzdCB3aGV0aGVyIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHN5bWJvbGljIGxpbmtzCitsbiAtcyB4IHkgMj4vZGV2L251bGwgJiYgdGVzdCAtaCB5IDI+L2Rldi9udWxsICYmIHRlc3Rfc2V0X3ByZXJlcSBTWU1MSU5LUworcm0gLWYgeQpkaWZmIC0tZ2l0IGEvdC92YWxncmluZC8uZ2l0aWdub3JlIGIvdC92YWxncmluZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YWU2NjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3ZhbGdyaW5kLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACisvYmluLworL3RlbXBsYXRlcwpkaWZmIC0tZ2l0IGEvdC92YWxncmluZC9hbmFseXplLnNoIGIvdC92YWxncmluZC9hbmFseXplLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ4MTA1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3ZhbGdyaW5kL2FuYWx5emUuc2gKQEAgLTAsMCArMSwxMjMgQEAKKyMhL2Jpbi9zaAorCitvdXRfcHJlZml4PSQoZGlybmFtZSAiJDAiKS8uLi90ZXN0LXJlc3VsdHMvdmFsZ3JpbmQub3V0CitvdXRwdXQ9Citjb3VudD0wCit0b3RhbF9jb3VudD0wCittaXNzaW5nX21lc3NhZ2U9CituZXdfbGluZT0nCisnCisKKyMgc3RhcnQgb3V0cHV0dGluZyB0aGUgY3VycmVudCB2YWxncmluZCBlcnJvciBpbiAkb3V0X3ByZWZpeC4rKyRjb3VudCwKKyMgYW5kIHRoZSB0ZXN0IGNhc2Ugd2hpY2ggZmFpbGVkIGluIHRoZSBjb3JyZXNwb25kaW5nIC5tZXNzYWdlIGZpbGUKK3N0YXJ0X291dHB1dCAoKSB7CisJdGVzdCAteiAiJG91dHB1dCIgfHwgcmV0dXJuCisKKwkjIHByb2dyZXNzCisJdG90YWxfY291bnQ9JCgoJHRvdGFsX2NvdW50KzEpKQorCXRlc3QgLXQgMiAmJiBwcmludGYgIlxyRm91bmQgJWQgZXJyb3JzIiAkdG90YWxfY291bnQgPiYyCisKKwljb3VudD0kKCgkY291bnQrMSkpCisJb3V0cHV0PSRvdXRfcHJlZml4LiRjb3VudAorCTogPiAkb3V0cHV0CisKKwllY2hvICIqKiogJDEgKioqIiA+ICRvdXRwdXQubWVzc2FnZQorfQorCitmaW5pc2hfb3V0cHV0ICgpIHsKKwl0ZXN0ICEgLXogIiRvdXRwdXQiIHx8IHJldHVybgorCW91dHB1dD0KKworCSMgaWYgYSB0ZXN0IGNhc2UgaGFzIG1vcmUgdGhhbiBvbmUgdmFsZ3JpbmQgZXJyb3IsIHdlIG5lZWQgdG8KKwkjIGNvcHkgdGhlIGxhc3QgLm1lc3NhZ2UgZmlsZSB0byB0aGUgcHJldmlvdXMgZXJyb3JzCisJdGVzdCAteiAiJG1pc3NpbmdfbWVzc2FnZSIgfHwgeworCQl3aGlsZSB0ZXN0ICRtaXNzaW5nX21lc3NhZ2UgLWx0ICRjb3VudAorCQlkbworCQkJY3AgJG91dF9wcmVmaXguJGNvdW50Lm1lc3NhZ2UgXAorCQkJCSRvdXRfcHJlZml4LiRtaXNzaW5nX21lc3NhZ2UubWVzc2FnZQorCQkJbWlzc2luZ19tZXNzYWdlPSQoKCRtaXNzaW5nX21lc3NhZ2UrMSkpCisJCWRvbmUKKwkJbWlzc2luZ19tZXNzYWdlPQorCX0KK30KKworIyBncm91cCB0aGUgdmFsZ3JpbmQgZXJyb3JzIGJ5IGJhY2t0cmFjZQorb3V0cHV0X2FsbCAoKSB7CisJbGFzdF9saW5lPQorCWo9MAorCWk9MQorCXdoaWxlIHRlc3QgJGkgLWxlICRjb3VudAorCWRvCisJCSMgb3V0cHV0IDxudW1iZXI+IDxiYWNrdHJhY2UtaW4tb25lLWxpbmU+CisJCWVjaG8gIiRpICQodHIgJ1xuJyAnICcgPCAkb3V0X3ByZWZpeC4kaSkiCisJCWk9JCgoJGkrMSkpCisJZG9uZSB8CisJc29ydCAtdCAnICcgLWsgMiB8ICMgb3JkZXIgYnkgPGJhY2t0cmFjZS1pbi1vbmUtbGluZT4KKwl3aGlsZSByZWFkIG51bWJlciBsaW5lCisJZG8KKwkJIyBmaW5kIGR1cGxpY2F0ZXMsIGRvIG5vdCBvdXRwdXQgYmFja3RyYWNlIHR3aWNlCisJCWlmIHRlc3QgIiRsaW5lIiAhPSAiJGxhc3RfbGluZSIKKwkJdGhlbgorCQkJbGFzdF9saW5lPSRsaW5lCisJCQlqPSQoKCRqKzEpKQorCQkJcHJpbnRmICJcblZhbGdyaW5kIGVycm9yICRqOlxuXG4iCisJCQljYXQgJG91dF9wcmVmaXguJG51bWJlcgorCQkJcHJpbnRmICJcbmZvdW5kIGluOlxuIgorCQlmaQorCQkjIHByaW50IHRoZSB0ZXN0IGNhc2Ugd2hlcmUgdGhpcyBjYW1lIGZyb20KKwkJcHJpbnRmICJcbiIKKwkJY2F0ICRvdXRfcHJlZml4LiRudW1iZXIubWVzc2FnZQorCWRvbmUKK30KKworaGFuZGxlX29uZSAoKSB7CisJT0xESUZTPSRJRlMKKwlJRlM9IiRuZXdfbGluZSIKKwl3aGlsZSByZWFkIGxpbmUKKwlkbworCQljYXNlICIkbGluZSIgaW4KKwkJIyBiYWNrdHJhY2UsIHBvc3NpYmx5IGEgbmV3IG9uZQorCQk9PVswLTldKikKKworCQkJIyBEb2VzIHRoZSBjdXJyZW50IHZhbGdyaW5kIGVycm9yIGhhdmUgYSBtZXNzYWdlIHlldD8KKwkJCWNhc2UgIiRvdXRwdXQiIGluCisJCQkqLm1lc3NhZ2UpCisJCQkJdGVzdCAteiAiJG1pc3NpbmdfbWVzc2FnZSIgJiYKKwkJCQltaXNzaW5nX21lc3NhZ2U9JGNvdW50CisJCQkJb3V0cHV0PQorCQkJZXNhYworCisJCQlzdGFydF9vdXRwdXQgJChiYXNlbmFtZSAkMSkKKwkJCWVjaG8gIiRsaW5lIiB8CisJCQlzZWQgJ3MvPT1bMC05XSo9PS89PXZhbGdyaW5kPT0vJyA+PiAkb3V0cHV0CisJCQk7OworCQkjIGVuZCBvZiBiYWNrdHJhY2UKKwkJJ30nKQorCQkJdGVzdCAteiAiJG91dHB1dCIgfHwgeworCQkJCWVjaG8gIiRsaW5lIiA+PiAkb3V0cHV0CisJCQkJdGVzdCAkb3V0cHV0ID0gJHtvdXRwdXQlLm1lc3NhZ2V9ICYmCisJCQkJb3V0cHV0PSRvdXRwdXQubWVzc2FnZQorCQkJfQorCQkJOzsKKwkJIyBlbmQgb2YgdGVzdCBjYXNlCisJCScnKQorCQkJZmluaXNoX291dHB1dAorCQkJOzsKKwkJIyBub3JtYWwgbGluZTsgaWYgJG91dHB1dCBpcyBzZXQsIHByaW50IHRoZSBsaW5lCisJCSopCisJCQl0ZXN0IC16ICIkb3V0cHV0IiB8fCBlY2hvICIkbGluZSIgPj4gJG91dHB1dAorCQkJOzsKKwkJZXNhYworCWRvbmUgPCAkMQorCUlGUz0kT0xESUZTCisKKwkjIGp1c3QgdG8gYmUgc2FmZQorCWZpbmlzaF9vdXRwdXQKK30KKworZm9yIHRlc3Rfc2NyaXB0IGluICIkKGRpcm5hbWUgIiQwIikiLy4uL3Rlc3QtcmVzdWx0cy8qLm91dAorZG8KKwloYW5kbGVfb25lICR0ZXN0X3NjcmlwdAorZG9uZQorCitvdXRwdXRfYWxsCmRpZmYgLS1naXQgYS90L3ZhbGdyaW5kL2RlZmF1bHQuc3VwcCBiL3QvdmFsZ3JpbmQvZGVmYXVsdC5zdXBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMDEzZmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3ZhbGdyaW5kL2RlZmF1bHQuc3VwcApAQCAtMCwwICsxLDQ1IEBACit7CisJaWdub3JlLXpsaWItZXJyb3JzLWNvbmQKKwlNZW1jaGVjazpDb25kCisJb2JqOipsaWJ6LnNvKgorfQorCit7CisJaWdub3JlLXpsaWItZXJyb3JzLXZhbHVlOAorCU1lbWNoZWNrOlZhbHVlOAorCW9iajoqbGliei5zbyoKK30KKworeworCWlnbm9yZS16bGliLWVycm9ycy12YWx1ZTQKKwlNZW1jaGVjazpWYWx1ZTQKKwlvYmo6KmxpYnouc28qCit9CisKK3sKKwlpZ25vcmUtbGRzby1jb25kCisJTWVtY2hlY2s6Q29uZAorCW9iajoqbGQtKi5zbworfQorCit7CisJaWdub3JlLWxkc28tYWRkcjgKKwlNZW1jaGVjazpBZGRyOAorCW9iajoqbGQtKi5zbworfQorCit7CisJaWdub3JlLWxkc28tYWRkcjQKKwlNZW1jaGVjazpBZGRyNAorCW9iajoqbGQtKi5zbworfQorCit7CisJd3JpdGluZy1kYXRhLWZyb20temxpYi10cmlnZ2Vycy1ldmVuLW1vcmUtZXJyb3JzCisJTWVtY2hlY2s6UGFyYW0KKwl3cml0ZShidWYpCisJb2JqOi9saWIvbGQtKi5zbworCWZ1bjp3cml0ZV9pbl9mdWxsCisJZnVuOndyaXRlX2J1ZmZlcgorCWZ1bjp3cml0ZV9sb29zZV9vYmplY3QKK30KZGlmZiAtLWdpdCBhL3QvdmFsZ3JpbmQvdmFsZ3JpbmQuc2ggYi90L3ZhbGdyaW5kL3ZhbGdyaW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4MmI0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3ZhbGdyaW5kL3ZhbGdyaW5kLnNoCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorCitiYXNlPSQoYmFzZW5hbWUgIiQwIikKKworVFJBQ0tfT1JJR0lOUz0KKworVkFMR1JJTkRfVkVSU0lPTj0kKHZhbGdyaW5kIC0tdmVyc2lvbikKK1ZBTEdSSU5EX01BSk9SPSQoZXhwciAiJFZBTEdSSU5EX1ZFUlNJT04iIDogJ1teMC05XSpcKFswLTldKlwpJykKK1ZBTEdSSU5EX01JTk9SPSQoZXhwciAiJFZBTEdSSU5EX1ZFUlNJT04iIDogJ1teMC05XSpbMC05XSpcLlwoWzAtOV0qXCknKQordGVzdCAzIC1ndCAiJFZBTEdSSU5EX01BSk9SIiB8fAordGVzdCAzIC1lcSAiJFZBTEdSSU5EX01BSk9SIiAtYSA0IC1ndCAiJFZBTEdSSU5EX01JTk9SIiB8fAorVFJBQ0tfT1JJR0lOUz0tLXRyYWNrLW9yaWdpbnM9eWVzCisKK2V4ZWMgdmFsZ3JpbmQgLXEgLS1lcnJvci1leGl0Y29kZT0xMjYgXAorCS0tbGVhay1jaGVjaz1ubyBcCisJLS1zdXBwcmVzc2lvbnM9IiRHSVRfVkFMR1JJTkQvZGVmYXVsdC5zdXBwIiBcCisJLS1nZW4tc3VwcHJlc3Npb25zPWFsbCBcCisJJFRSQUNLX09SSUdJTlMgXAorCS0tbG9nLWZkPTQgXAorCS0taW5wdXQtZmQ9NCBcCisJJEdJVF9WQUxHUklORF9PUFRJT05TIFwKKwkiJEdJVF9WQUxHUklORCIvLi4vLi4vIiRiYXNlIiAiJEAiCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaG9va3MtLXByZS1jb21taXQuc2FtcGxlIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmUtY29tbWl0LnNhbXBsZQppbmRleCAwZTQ5Mjc5Li5iMTFhZDZhIDEwMDc1NQotLS0gYS90ZW1wbGF0ZXMvaG9va3MtLXByZS1jb21taXQuc2FtcGxlCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLWNvbW1pdC5zYW1wbGUKQEAgLTcsNyArNywzMiBAQAogIwogIyBUbyBlbmFibGUgdGhpcyBob29rLCByZW5hbWUgdGhpcyBmaWxlIHRvICJwcmUtY29tbWl0Ii4KIAotaWYgZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIDI+L2Rldi9udWxsCisjIElmIHlvdSB3YW50IHRvIGFsbG93IG5vbi1hc2NpaSBmaWxlbmFtZXMgc2V0IHRoaXMgdmFyaWFibGUgdG8gdHJ1ZS4KK2FsbG93bm9uYXNjaWk9JChnaXQgY29uZmlnIGhvb2tzLmFsbG93bm9uYXNjaWkpCisKKyMgQ3Jvc3MgcGxhdGZvcm0gcHJvamVjdHMgdGVuZCB0byBhdm9pZCBub24tYXNjaWkgZmlsZW5hbWVzOyBwcmV2ZW50CisjIHRoZW0gZnJvbSBiZWluZyBhZGRlZCB0byB0aGUgcmVwb3NpdG9yeS4gV2UgZXhwbG9pdCB0aGUgZmFjdCB0aGF0IHRoZQorIyBwcmludGFibGUgcmFuZ2Ugc3RhcnRzIGF0IHRoZSBzcGFjZSBjaGFyYWN0ZXIgYW5kIGVuZHMgd2l0aCB0aWxkZS4KK2lmIFsgIiRhbGxvd25vbmFzY2lpIiAhPSAidHJ1ZSIgXSAmJgorCXRlc3QgIiQoZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLW9ubHkgLS1kaWZmLWZpbHRlcj1BIC16IHwKKwkgIExDX0FMTD1DIHRyIC1kICdbIC1+XVwwJykiCit0aGVuCisJZWNobyAiRXJyb3I6IEF0dGVtcHQgdG8gYWRkIGEgbm9uLWFzY2lpIGZpbGVuYW1lLiIKKwllY2hvCisJZWNobyAiVGhpcyBjYW4gY2F1c2UgcHJvYmxlbXMgaWYgeW91IHdhbnQgdG8gd29yayB0b2dldGhlciIKKwllY2hvICJ3aXRoIHBlb3BsZSBvbiBvdGhlciBwbGF0Zm9ybXMgdGhhbiB5b3UuIgorCWVjaG8KKwllY2hvICJUbyBiZSBwb3J0YWJsZSBpdCBpcyBhZHZpc2VhYmxlIHRvIHJlbmFtZSB0aGUgZmlsZSAuLi4iCisJZWNobworCWVjaG8gIklmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyB5b3UgY2FuIGRpc2FibGUgdGhpcyIKKwllY2hvICJjaGVjayB1c2luZzoiCisJZWNobworCWVjaG8gIiAgZ2l0IGNvbmZpZyBob29rcy5hbGxvd25vbmFzY2lpIHRydWUiCisJZWNobworCWV4aXQgMQorZmkKKworaWYgZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4vZGV2L251bGwgMj4mMQogdGhlbgogCWFnYWluc3Q9SEVBRAogZWxzZQpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS11cGRhdGUuc2FtcGxlIGIvdGVtcGxhdGVzL2hvb2tzLS11cGRhdGUuc2FtcGxlCmluZGV4IDkzYzYwNTUuLmZkNjNiMmQgMTAwNzU1Ci0tLSBhL3RlbXBsYXRlcy9ob29rcy0tdXBkYXRlLnNhbXBsZQorKysgYi90ZW1wbGF0ZXMvaG9va3MtLXVwZGF0ZS5zYW1wbGUKQEAgLTEzLDkgKzEzLDE1IEBACiAjIGhvb2tzLmFsbG93ZGVsZXRldGFnCiAjICAgVGhpcyBib29sZWFuIHNldHMgd2hldGhlciBkZWxldGluZyB0YWdzIHdpbGwgYmUgYWxsb3dlZCBpbiB0aGUKICMgICByZXBvc2l0b3J5LiAgQnkgZGVmYXVsdCB0aGV5IHdvbid0IGJlLgorIyBob29rcy5hbGxvd21vZGlmeXRhZworIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgYSB0YWcgbWF5IGJlIG1vZGlmaWVkIGFmdGVyIGNyZWF0aW9uLiBCeSBkZWZhdWx0CisjICAgaXQgd29uJ3QgYmUuCiAjIGhvb2tzLmFsbG93ZGVsZXRlYnJhbmNoCiAjICAgVGhpcyBib29sZWFuIHNldHMgd2hldGhlciBkZWxldGluZyBicmFuY2hlcyB3aWxsIGJlIGFsbG93ZWQgaW4gdGhlCiAjICAgcmVwb3NpdG9yeS4gIEJ5IGRlZmF1bHQgdGhleSB3b24ndCBiZS4KKyMgaG9va3MuZGVueWNyZWF0ZWJyYW5jaAorIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgcmVtb3RlbHkgY3JlYXRpbmcgYnJhbmNoZXMgd2lsbCBiZSBkZW5pZWQKKyMgICBpbiB0aGUgcmVwb3NpdG9yeS4gIEJ5IGRlZmF1bHQgdGhpcyBpcyBhbGxvd2VkLgogIwogCiAjIC0tLSBDb21tYW5kIGxpbmUKQEAgLTM5LDE4ICs0NSwyMyBAQAogIyAtLS0gQ29uZmlnCiBhbGxvd3VuYW5ub3RhdGVkPSQoZ2l0IGNvbmZpZyAtLWJvb2wgaG9va3MuYWxsb3d1bmFubm90YXRlZCkKIGFsbG93ZGVsZXRlYnJhbmNoPSQoZ2l0IGNvbmZpZyAtLWJvb2wgaG9va3MuYWxsb3dkZWxldGVicmFuY2gpCitkZW55Y3JlYXRlYnJhbmNoPSQoZ2l0IGNvbmZpZyAtLWJvb2wgaG9va3MuZGVueWNyZWF0ZWJyYW5jaCkKIGFsbG93ZGVsZXRldGFnPSQoZ2l0IGNvbmZpZyAtLWJvb2wgaG9va3MuYWxsb3dkZWxldGV0YWcpCithbGxvd21vZGlmeXRhZz0kKGdpdCBjb25maWcgLS1ib29sIGhvb2tzLmFsbG93bW9kaWZ5dGFnKQogCiAjIGNoZWNrIGZvciBubyBkZXNjcmlwdGlvbgogcHJvamVjdGRlc2M9JChzZWQgLWUgJzFxJyAiJEdJVF9ESVIvZGVzY3JpcHRpb24iKQotaWYgWyAteiAiJHByb2plY3RkZXNjIiAtbyAiJHByb2plY3RkZXNjIiA9ICJVbm5hbWVkIHJlcG9zaXRvcnk7IGVkaXQgdGhpcyBmaWxlIHRvIG5hbWUgaXQgZm9yIGdpdHdlYi4iIF07IHRoZW4KK2Nhc2UgIiRwcm9qZWN0ZGVzYyIgaW4KKyJVbm5hbWVkIHJlcG9zaXRvcnkiKiB8ICIiKQogCWVjaG8gIioqKiBQcm9qZWN0IGRlc2NyaXB0aW9uIGZpbGUgaGFzbid0IGJlZW4gc2V0IiA+JjIKIAlleGl0IDEKLWZpCisJOzsKK2VzYWMKIAogIyAtLS0gQ2hlY2sgdHlwZXMKICMgaWYgJG5ld3JldiBpcyAwMDAwLi4uMDAwMCwgaXQncyBhIGNvbW1pdCB0byBkZWxldGUgYSByZWYuCi1pZiBbICIkbmV3cmV2IiA9ICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiBdOyB0aGVuCit6ZXJvPSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgoraWYgWyAiJG5ld3JldiIgPSAiJHplcm8iIF07IHRoZW4KIAluZXdyZXZfdHlwZT1kZWxldGUKIGVsc2UKIAluZXdyZXZfdHlwZT0kKGdpdC1jYXQtZmlsZSAtdCAkbmV3cmV2KQpAQCAtNzUsOSArODYsMTkgQEAKIAkJOzsKIAlyZWZzL3RhZ3MvKix0YWcpCiAJCSMgYW5ub3RhdGVkIHRhZworCQlpZiBbICIkYWxsb3dtb2RpZnl0YWciICE9ICJ0cnVlIiBdICYmIGdpdCByZXYtcGFyc2UgJHJlZm5hbWUgPiAvZGV2L251bGwgMj4mMQorCQl0aGVuCisJCQllY2hvICIqKiogVGFnICckcmVmbmFtZScgYWxyZWFkeSBleGlzdHMuIiA+JjIKKwkJCWVjaG8gIioqKiBNb2RpZnlpbmcgYSB0YWcgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByZXBvc2l0b3J5LiIgPiYyCisJCQlleGl0IDEKKwkJZmkKIAkJOzsKIAlyZWZzL2hlYWRzLyosY29tbWl0KQogCQkjIGJyYW5jaAorCQlpZiBbICIkb2xkcmV2IiA9ICIkemVybyIgLWEgIiRkZW55Y3JlYXRlYnJhbmNoIiA9ICJ0cnVlIiBdOyB0aGVuCisJCQllY2hvICIqKiogQ3JlYXRpbmcgYSBicmFuY2ggaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByZXBvc2l0b3J5IiA+JjIKKwkJCWV4aXQgMQorCQlmaQogCQk7OwogCXJlZnMvaGVhZHMvKixkZWxldGUpCiAJCSMgZGVsZXRlIGJyYW5jaApkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL3RoaXMtLWRlc2NyaXB0aW9uIGIvdGVtcGxhdGVzL3RoaXMtLWRlc2NyaXB0aW9uCmluZGV4IGM2ZjI1ZTguLjQ5OGIyNjcgMTAwNjQ0Ci0tLSBhL3RlbXBsYXRlcy90aGlzLS1kZXNjcmlwdGlvbgorKysgYi90ZW1wbGF0ZXMvdGhpcy0tZGVzY3JpcHRpb24KQEAgLTEgKzEgQEAKLVVubmFtZWQgcmVwb3NpdG9yeTsgZWRpdCB0aGlzIGZpbGUgdG8gbmFtZSBpdCBmb3IgZ2l0d2ViLgorVW5uYW1lZCByZXBvc2l0b3J5OyBlZGl0IHRoaXMgZmlsZSAnZGVzY3JpcHRpb24nIHRvIG5hbWUgdGhlIHJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS90ZXN0LWNobXRpbWUuYyBiL3Rlc3QtY2htdGltZS5jCmluZGV4IGQ1MzU4Y2IuLmZlNDc2Y2IgMTAwNjQ0Ci0tLSBhL3Rlc3QtY2htdGltZS5jCisrKyBiL3Rlc3QtY2htdGltZS5jCkBAIC04Nyw2ICs4NywxNSBAQAogCQkJcmV0dXJuIC0xOwogCQl9CiAKKyNpZmRlZiBXSU4zMgorCQlpZiAoIShzYi5zdF9tb2RlICYgU19JV1VTUikgJiYKKwkJCQljaG1vZChhcmd2W2ldLCBzYi5zdF9tb2RlIHwgU19JV1VTUikpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG1ha2UgdXNlci13cml0YWJsZSAlczogJXMiLAorCQkJCWFyZ3ZbaV0sIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKyNlbmRpZgorCiAJCXV0Yi5hY3RpbWUgPSBzYi5zdF9hdGltZTsKIAkJdXRiLm1vZHRpbWUgPSBzZXRfZXEgPyBzZXRfdGltZSA6IHNiLnN0X210aW1lICsgc2V0X3RpbWU7CiAKZGlmZiAtLWdpdCBhL3Rlc3QtY3R5cGUuYyBiL3Rlc3QtY3R5cGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzNjNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1jdHlwZS5jCkBAIC0wLDAgKzEsNzggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCisKK3N0YXRpYyBpbnQgdGVzdF9pc2RpZ2l0KGludCBjKQoreworCXJldHVybiBpc2RpZ2l0KGMpOworfQorCitzdGF0aWMgaW50IHRlc3RfaXNzcGFjZShpbnQgYykKK3sKKwlyZXR1cm4gaXNzcGFjZShjKTsKK30KKworc3RhdGljIGludCB0ZXN0X2lzYWxwaGEoaW50IGMpCit7CisJcmV0dXJuIGlzYWxwaGEoYyk7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9pc2FsbnVtKGludCBjKQoreworCXJldHVybiBpc2FsbnVtKGMpOworfQorCitzdGF0aWMgaW50IHRlc3RfaXNfZ2xvYl9zcGVjaWFsKGludCBjKQoreworCXJldHVybiBpc19nbG9iX3NwZWNpYWwoYyk7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9pc19yZWdleF9zcGVjaWFsKGludCBjKQoreworCXJldHVybiBpc19yZWdleF9zcGVjaWFsKGMpOworfQorCisjZGVmaW5lIERJR0lUICIwMTIzNDU2Nzg5IgorI2RlZmluZSBMT1dFUiAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCisjZGVmaW5lIFVQUEVSICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHlwZV9jbGFzcyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCp0ZXN0X2ZuKShpbnQpOworCWNvbnN0IGNoYXIgKm1lbWJlcnM7Cit9IGNsYXNzZXNbXSA9IHsKKwl7ICJpc2RpZ2l0IiwgdGVzdF9pc2RpZ2l0LCBESUdJVCB9LAorCXsgImlzc3BhY2UiLCB0ZXN0X2lzc3BhY2UsICIgXG5cclx0IiB9LAorCXsgImlzYWxwaGEiLCB0ZXN0X2lzYWxwaGEsIExPV0VSIFVQUEVSIH0sCisJeyAiaXNhbG51bSIsIHRlc3RfaXNhbG51bSwgTE9XRVIgVVBQRVIgRElHSVQgfSwKKwl7ICJpc19nbG9iX3NwZWNpYWwiLCB0ZXN0X2lzX2dsb2Jfc3BlY2lhbCwgIio/W1xcIiB9LAorCXsgImlzX3JlZ2V4X3NwZWNpYWwiLCB0ZXN0X2lzX3JlZ2V4X3NwZWNpYWwsICIkKCkqKy4/W1xcXnt8IiB9LAorCXsgTlVMTCB9Cit9OworCitzdGF0aWMgaW50IHRlc3RfY2xhc3MoY29uc3Qgc3RydWN0IGN0eXBlX2NsYXNzICp0ZXN0KQoreworCWludCBpLCByYyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJaW50IGV4cGVjdGVkID0gaSA/ICEhc3RyY2hyKHRlc3QtPm1lbWJlcnMsIGkpIDogMDsKKwkJaW50IGFjdHVhbCA9IHRlc3QtPnRlc3RfZm4oaSk7CisKKwkJaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgeworCQkJcmMgPSAxOworCQkJcHJpbnRmKCIlcyBjbGFzc2lmaWVzIGNoYXIgJWQgKDB4JTAyeCkgd3JvbmdseVxuIiwKKwkJCSAgICAgICB0ZXN0LT5uYW1lLCBpLCBpKTsKKwkJfQorCX0KKwlyZXR1cm4gcmM7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBzdHJ1Y3QgY3R5cGVfY2xhc3MgKnRlc3Q7CisJaW50IHJjID0gMDsKKworCWZvciAodGVzdCA9IGNsYXNzZXM7IHRlc3QtPm5hbWU7IHRlc3QrKykKKwkJcmMgfD0gdGVzdF9jbGFzcyh0ZXN0KTsKKworCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL3Rlc3QtcGFyc2Utb3B0aW9ucy5jIGIvdGVzdC1wYXJzZS1vcHRpb25zLmMKaW5kZXggNjFkMmMzOS4uZWZhNzM0YiAxMDA2NDQKLS0tIGEvdGVzdC1wYXJzZS1vcHRpb25zLmMKKysrIGIvdGVzdC1wYXJzZS1vcHRpb25zLmMKQEAgLTcsOCArNyw5IEBACiBzdGF0aWMgaW50IGFiYnJldiA9IDc7CiBzdGF0aWMgaW50IHZlcmJvc2UgPSAwLCBkcnlfcnVuID0gMCwgcXVpZXQgPSAwOwogc3RhdGljIGNoYXIgKnN0cmluZyA9IE5VTEw7CitzdGF0aWMgY2hhciAqZmlsZSA9IE5VTEw7CiAKLWludCBsZW5ndGhfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3N0YXRpYyBpbnQgbGVuZ3RoX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCiB7CiAJcHJpbnRmKCJDYWxsYmFjazogXCIlc1wiLCAlZFxuIiwKIAkJKGFyZyA/IGFyZyA6ICJub3Qgc2V0IiksIHVuc2V0KTsKQEAgLTE5LDggKzIwLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbnVtYmVyX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJKihpbnQgKilvcHQtPnZhbHVlID0gc3RydG9sKGFyZywgTlVMTCwgMTApOworCXJldHVybiAwOworfQorCiBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CisJY29uc3QgY2hhciAqcHJlZml4ID0gInByZWZpeC8iOwogCWNvbnN0IGNoYXIgKnVzYWdlW10gPSB7CiAJCSJ0ZXN0LXBhcnNlLW9wdGlvbnMgPG9wdGlvbnM+IiwKIAkJTlVMTApAQCAtMjksNiArMzcsNyBAQAogCQlPUFRfQk9PTEVBTignYicsICJib29sZWFuIiwgJmJvb2xlYW4sICJnZXQgYSBib29sZWFuIiksCiAJCU9QVF9CSVQoJzQnLCAib3I0IiwgJmJvb2xlYW4sCiAJCQkiYml0d2lzZS1vciBib29sZWFuIHdpdGggLi4uMDEwMCIsIDQpLAorCQlPUFRfTkVHQklUKDAsICJuZWctb3I0IiwgJmJvb2xlYW4sICJzYW1lIGFzIC0tbm8tb3I0IiwgNCksCiAJCU9QVF9HUk9VUCgiIiksCiAJCU9QVF9JTlRFR0VSKCdpJywgImludGVnZXIiLCAmaW50ZWdlciwgImdldCBhIGludGVnZXIiKSwKIAkJT1BUX0lOVEVHRVIoJ2onLCBOVUxMLCAmaW50ZWdlciwgImdldCBhIGludGVnZXIsIHRvbyIpLApAQCAtMzYsNiArNDUsNyBAQAogCQlPUFRfREFURSgndCcsIE5VTEwsICZ0aW1lc3RhbXAsICJnZXQgdGltZXN0YW1wIG9mIDx0aW1lPiIpLAogCQlPUFRfQ0FMTEJBQ0soJ0wnLCAibGVuZ3RoIiwgJmludGVnZXIsICJzdHIiLAogCQkJImdldCBsZW5ndGggb2YgPHN0cj4iLCBsZW5ndGhfY2FsbGJhY2spLAorCQlPUFRfRklMRU5BTUUoJ0YnLCAiZmlsZSIsICZmaWxlLCAic2V0IGZpbGUgdG8gPEZJTEU+IiksCiAJCU9QVF9HUk9VUCgiU3RyaW5nIG9wdGlvbnMiKSwKIAkJT1BUX1NUUklORygncycsICJzdHJpbmciLCAmc3RyaW5nLCAic3RyaW5nIiwgImdldCBhIHN0cmluZyIpLAogCQlPUFRfU1RSSU5HKDAsICJzdHJpbmcyIiwgJnN0cmluZywgInN0ciIsICJnZXQgYW5vdGhlciBzdHJpbmciKSwKQEAgLTQ1LDYgKzU1LDEwIEBACiAJCQkic2V0IHN0cmluZyB0byBkZWZhdWx0IiwgKHVuc2lnbmVkIGxvbmcpImRlZmF1bHQiKSwKIAkJT1BUX0dST1VQKCJNYWdpYyBhcmd1bWVudHMiKSwKIAkJT1BUX0FSR1VNRU5UKCJxdXV4IiwgIm1lYW5zIC0tcXV1eCIpLAorCQlPUFRfTlVNQkVSX0NBTExCQUNLKCZpbnRlZ2VyLCAic2V0IGludGVnZXIgdG8gTlVNIiwKKwkJCW51bWJlcl9jYWxsYmFjayksCisJCXsgT1BUSU9OX0JPT0xFQU4sICcrJywgTlVMTCwgJmJvb2xlYW4sIE5VTEwsICJzYW1lIGFzIC1iIiwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9EQVNIIH0sCiAJCU9QVF9HUk9VUCgiU3RhbmRhcmQgb3B0aW9ucyIpLAogCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKIAkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlKSwKQEAgLTU0LDcgKzY4LDcgQEAKIAl9OwogCWludCBpOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgdXNhZ2UsIDApOwogCiAJcHJpbnRmKCJib29sZWFuOiAlZFxuIiwgYm9vbGVhbik7CiAJcHJpbnRmKCJpbnRlZ2VyOiAldVxuIiwgaW50ZWdlcik7CkBAIC02NCw2ICs3OCw3IEBACiAJcHJpbnRmKCJ2ZXJib3NlOiAlZFxuIiwgdmVyYm9zZSk7CiAJcHJpbnRmKCJxdWlldDogJXNcbiIsIHF1aWV0ID8gInllcyIgOiAibm8iKTsKIAlwcmludGYoImRyeSBydW46ICVzXG4iLCBkcnlfcnVuID8gInllcyIgOiAibm8iKTsKKwlwcmludGYoImZpbGU6ICVzXG4iLCBmaWxlID8gZmlsZSA6ICIobm90IHNldCkiKTsKIAogCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCiAJCXByaW50ZigiYXJnICUwMmQ6ICVzXG4iLCBpLCBhcmd2W2ldKTsKZGlmZiAtLWdpdCBhL3Rlc3QtcGF0aC11dGlscy5jIGIvdGVzdC1wYXRoLXV0aWxzLmMKaW5kZXggNTE2OGE4ZS4uZDI2MTM5OCAxMDA2NDQKLS0tIGEvdGVzdC1wYXRoLXV0aWxzLmMKKysrIGIvdGVzdC1wYXRoLXV0aWxzLmMKQEAgLTI2LDYgKzI2LDEyIEBACiAJCXJldHVybiAwOwogCX0KIAorCWlmIChhcmdjID09IDQgJiYgIXN0cmNtcChhcmd2WzFdLCAic3RyaXBfcGF0aF9zdWZmaXgiKSkgeworCQljaGFyICpwcmVmaXggPSBzdHJpcF9wYXRoX3N1ZmZpeChhcmd2WzJdLCBhcmd2WzNdKTsKKwkJcHJpbnRmKCIlc1xuIiwgcHJlZml4ID8gcHJlZml4IDogIihudWxsKSIpOworCQlyZXR1cm4gMDsKKwl9CisKIAlmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmtub3duIGZ1bmN0aW9uIG5hbWU6ICVzXG4iLCBhcmd2WzBdLAogCQlhcmd2WzFdID8gYXJndlsxXSA6ICIodGhlcmUgd2FzIG5vbmUpIik7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS90ZXN0LXNoYTEuYyBiL3Rlc3Qtc2hhMS5jCmluZGV4IDliOThkMDcuLjgwZGFiYTkgMTAwNjQ0Ci0tLSBhL3Rlc3Qtc2hhMS5jCisrKyBiL3Rlc3Qtc2hhMS5jCkBAIC0zMiw3ICszMiw3IEBACiAJCQlpZiAoc3ogPT0gMCkKIAkJCQlicmVhazsKIAkJCWlmIChzeiA8IDApCi0JCQkJZGllKCJ0ZXN0LXNoYTE6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlkaWVfZXJybm8oInRlc3Qtc2hhMSIpOwogCQkJdGhpc19zeiArPSBzejsKIAkJCWNwICs9IHN6OwogCQkJcm9vbSAtPSBzejsKZGlmZiAtLWdpdCBhL3Rlc3Qtc2lnY2hhaW4uYyBiL3Rlc3Qtc2lnY2hhaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmRiMjM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1zaWdjaGFpbi5jCkBAIC0wLDAgKzEsMjIgQEAKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisKKyNkZWZpbmUgWChmKSBcCitzdGF0aWMgdm9pZCBmKGludCBzaWcpIHsgXAorCXB1dHMoI2YpOyBcCisJZmZsdXNoKHN0ZG91dCk7IFwKKwlzaWdjaGFpbl9wb3Aoc2lnKTsgXAorCXJhaXNlKHNpZyk7IFwKK30KK1gob25lKQorWCh0d28pCitYKHRocmVlKQorI3VuZGVmIFgKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisJc2lnY2hhaW5fcHVzaChTSUdURVJNLCBvbmUpOworCXNpZ2NoYWluX3B1c2goU0lHVEVSTSwgdHdvKTsKKwlzaWdjaGFpbl9wdXNoKFNJR1RFUk0sIHRocmVlKTsKKwlyYWlzZShTSUdURVJNKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3RyYWNlLmMgYi90cmFjZS5jCmluZGV4IDQ3MTNmOTEuLjQyMjlhZTEgMTAwNjQ0Ci0tLSBhL3RyYWNlLmMKKysrIGIvdHJhY2UuYwpAQCAtNTAsNyArNTAsNyBAQAogCQlyZXR1cm4gZmQ7CiAJfQogCi0JZnByaW50ZihzdGRlcnIsICJXaGF0IGRvZXMgJyVzJyBmb3IgR0lUX1RSQUNFIG1lYW5zID9cbiIsIHRyYWNlKTsKKwlmcHJpbnRmKHN0ZGVyciwgIldoYXQgZG9lcyAnJXMnIGZvciBHSVRfVFJBQ0UgbWVhbj9cbiIsIHRyYWNlKTsKIAlmcHJpbnRmKHN0ZGVyciwgIklmIHlvdSB3YW50IHRvIHRyYWNlIGludG8gYSBmaWxlLCAiCiAJCSJ0aGVuIHBsZWFzZSBzZXQgR0lUX1RSQUNFIHRvIGFuIGFic29sdXRlIHBhdGhuYW1lICIKIAkJIihzdGFydGluZyB3aXRoIC8pLlxuIik7CmRpZmYgLS1naXQgYS90cmFuc3BvcnQuYyBiL3RyYW5zcG9ydC5jCmluZGV4IDU2ODMxYzUuLmYyMzFiMzUgMTAwNjQ0Ci0tLSBhL3RyYW5zcG9ydC5jCisrKyBiL3RyYW5zcG9ydC5jCkBAIC01MCw5ICs1MCw3IEBACiAJbWVtc2V0ICgmbGlzdCwgMCwgc2l6ZW9mKGxpc3QpKTsKIAogCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpKSB7Ci0JCWlmIChkZS0+ZF9uYW1lWzBdID09ICcuJyAmJiAoZGUtPmRfbmFtZVsxXSA9PSAnXDAnIHx8Ci0JCQkJKGRlLT5kX25hbWVbMV0gPT0gJy4nICYmCi0JCQkJIGRlLT5kX25hbWVbMl0gPT0gJ1wwJykpKQorCQlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSkKIAkJCWNvbnRpbnVlOwogCQlBTExPQ19HUk9XKGxpc3QuZW50cmllcywgbGlzdC5uciArIDEsIGxpc3QuYWxsb2MpOwogCQlsaXN0LmVudHJpZXNbbGlzdC5ucisrXSA9IHhzdHJkdXAoZGUtPmRfbmFtZSk7CkBAIC0xNDAsNyArMTM4LDEyIEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnNfdmlhX3JzeW5jKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCkKK3N0YXRpYyBjb25zdCBjaGFyICpyc3luY191cmwoY29uc3QgY2hhciAqdXJsKQoreworCXJldHVybiBwcmVmaXhjbXAodXJsLCAicnN5bmM6Ly8iKSA/IHNraXBfcHJlZml4KHVybCwgInJzeW5jOiIpIDogdXJsOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnNfdmlhX3JzeW5jKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IGZvcl9wdXNoKQogewogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIHRlbXBfZGlyID0gU1RSQlVGX0lOSVQ7CiAJc3RydWN0IHJlZiBkdW1teSwgKnRhaWwgPSAmZHVtbXk7CkBAIC0xNDgsMTQgKzE1MSwxNyBAQAogCWNvbnN0IGNoYXIgKmFyZ3NbNV07CiAJaW50IHRlbXBfZGlyX2xlbjsKIAorCWlmIChmb3JfcHVzaCkKKwkJcmV0dXJuIE5VTEw7CisKIAkvKiBjb3B5IHRoZSByZWZzIHRvIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5ICovCiAKIAlzdHJidWZfYWRkc3RyKCZ0ZW1wX2RpciwgZ2l0X3BhdGgoInJzeW5jLXJlZnMtWFhYWFhYIikpOwogCWlmICghbWtkdGVtcCh0ZW1wX2Rpci5idWYpKQotCQlkaWUgKCJDb3VsZCBub3QgbWFrZSB0ZW1wb3JhcnkgZGlyZWN0b3J5Iik7CisJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCBtYWtlIHRlbXBvcmFyeSBkaXJlY3RvcnkiKTsKIAl0ZW1wX2Rpcl9sZW4gPSB0ZW1wX2Rpci5sZW47CiAKLQlzdHJidWZfYWRkc3RyKCZidWYsIHRyYW5zcG9ydC0+dXJsKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIHJzeW5jX3VybCh0cmFuc3BvcnQtPnVybCkpOwogCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIi9yZWZzIik7CiAKIAltZW1zZXQoJnJzeW5jLCAwLCBzaXplb2YocnN5bmMpKTsKQEAgLTE3MSw3ICsxNzcsNyBAQAogCQlkaWUgKCJDb3VsZCBub3QgcnVuIHJzeW5jIHRvIGdldCByZWZzIik7CiAKIAlzdHJidWZfcmVzZXQoJmJ1Zik7Ci0Jc3RyYnVmX2FkZHN0cigmYnVmLCB0cmFuc3BvcnQtPnVybCk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCByc3luY191cmwodHJhbnNwb3J0LT51cmwpKTsKIAlzdHJidWZfYWRkc3RyKCZidWYsICIvcGFja2VkLXJlZnMiKTsKIAogCWFyZ3NbMl0gPSBidWYuYnVmOwpAQCAtMjA4LDcgKzIxNCw3IEBACiAJY29uc3QgY2hhciAqYXJnc1s4XTsKIAlpbnQgcmVzdWx0OwogCi0Jc3RyYnVmX2FkZHN0cigmYnVmLCB0cmFuc3BvcnQtPnVybCk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCByc3luY191cmwodHJhbnNwb3J0LT51cmwpKTsKIAlzdHJidWZfYWRkc3RyKCZidWYsICIvb2JqZWN0cy8iKTsKIAogCW1lbXNldCgmcnN5bmMsIDAsIHNpemVvZihyc3luYykpOwpAQCAtMjg3LDcgKzI5Myw3IEBACiAKIAkvKiBmaXJzdCBwdXNoIHRoZSBvYmplY3RzICovCiAKLQlzdHJidWZfYWRkc3RyKCZidWYsIHRyYW5zcG9ydC0+dXJsKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIHJzeW5jX3VybCh0cmFuc3BvcnQtPnVybCkpOwogCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnLycpOwogCiAJbWVtc2V0KCZyc3luYywgMCwgc2l6ZW9mKHJzeW5jKSk7CkBAIC0zMDgsMTMgKzMxNCwxNCBAQAogCWFyZ3NbaSsrXSA9IE5VTEw7CiAKIAlpZiAocnVuX2NvbW1hbmQoJnJzeW5jKSkKLQkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgcHVzaCBvYmplY3RzIHRvICVzIiwgdHJhbnNwb3J0LT51cmwpOworCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBwdXNoIG9iamVjdHMgdG8gJXMiLAorCQkJCXJzeW5jX3VybCh0cmFuc3BvcnQtPnVybCkpOwogCiAJLyogY29weSB0aGUgcmVmcyB0byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeTsgdGhleSBjb3VsZCBiZSBwYWNrZWQuICovCiAKIAlzdHJidWZfYWRkc3RyKCZ0ZW1wX2RpciwgZ2l0X3BhdGgoInJzeW5jLXJlZnMtWFhYWFhYIikpOwogCWlmICghbWtkdGVtcCh0ZW1wX2Rpci5idWYpKQotCQlkaWUgKCJDb3VsZCBub3QgbWFrZSB0ZW1wb3JhcnkgZGlyZWN0b3J5Iik7CisJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCBtYWtlIHRlbXBvcmFyeSBkaXJlY3RvcnkiKTsKIAlzdHJidWZfYWRkY2goJnRlbXBfZGlyLCAnLycpOwogCiAJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfQUxMKSB7CkBAIC0zMjksMTAgKzMzNiwxMSBAQAogCWlmICghKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRk9SQ0UpKQogCQlhcmdzW2krK10gPSAiLS1pZ25vcmUtZXhpc3RpbmciOwogCWFyZ3NbaSsrXSA9IHRlbXBfZGlyLmJ1ZjsKLQlhcmdzW2krK10gPSB0cmFuc3BvcnQtPnVybDsKKwlhcmdzW2krK10gPSByc3luY191cmwodHJhbnNwb3J0LT51cmwpOwogCWFyZ3NbaSsrXSA9IE5VTEw7CiAJaWYgKHJ1bl9jb21tYW5kKCZyc3luYykpCi0JCXJlc3VsdCA9IGVycm9yKCJDb3VsZCBub3QgcHVzaCB0byAlcyIsIHRyYW5zcG9ydC0+dXJsKTsKKwkJcmVzdWx0ID0gZXJyb3IoIkNvdWxkIG5vdCBwdXNoIHRvICVzIiwKKwkJCQlyc3luY191cmwodHJhbnNwb3J0LT51cmwpKTsKIAogCWlmIChyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZ0ZW1wX2RpciwgMCkpCiAJCXdhcm5pbmcgKCJDb3VsZCBub3QgcmVtb3ZlIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXMuIiwKQEAgLTQyNCwxNiArNDMyLDE0IEBACiAJcmV0dXJuICEhZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnNfdmlhX2N1cmwoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQorc3RhdGljIHN0cnVjdCByZWYgKmdldF9yZWZzX3ZpYV9jdXJsKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IGZvcl9wdXNoKQogewogCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7CiAJY2hhciAqZGF0YSwgKnN0YXJ0LCAqbWlkOwogCWNoYXIgKnJlZl9uYW1lOwogCWNoYXIgKnJlZnNfdXJsOwogCWludCBpID0gMDsKLQotCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwotCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlpbnQgaHR0cF9yZXQ7CiAKIAlzdHJ1Y3QgcmVmICpyZWZzID0gTlVMTDsKIAlzdHJ1Y3QgcmVmICpyZWYgPSBOVUxMOwpAQCAtNDQxLDYgKzQ0Nyw5IEBACiAKIAlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXI7CiAKKwlpZiAoZm9yX3B1c2gpCisJCXJldHVybiBOVUxMOworCiAJaWYgKCF0cmFuc3BvcnQtPmRhdGEpCiAJCXRyYW5zcG9ydC0+ZGF0YSA9IGdldF9odHRwX3dhbGtlcih0cmFuc3BvcnQtPnVybCwKIAkJCQkJCXRyYW5zcG9ydC0+cmVtb3RlKTsKQEAgLTQ1MCwyNSArNDU5LDE2IEBACiAJcmVmc191cmwgPSB4bWFsbG9jKHN0cmxlbih0cmFuc3BvcnQtPnVybCkgKyAxMSk7CiAJc3ByaW50ZihyZWZzX3VybCwgIiVzL2luZm8vcmVmcyIsIHRyYW5zcG9ydC0+dXJsKTsKIAotCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKLQlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZidWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfYnVmZmVyKTsKLQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCByZWZzX3VybCk7Ci0JY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIE5VTEwpOwotCi0JaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7Ci0JCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKLQkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKLQkJCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOwotCQkJaWYgKG1pc3NpbmdfdGFyZ2V0KCZyZXN1bHRzKSkKLQkJCQlkaWUoIiVzIG5vdCBmb3VuZDogZGlkIHlvdSBydW4gZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBvbiB0aGUgc2VydmVyPyIsIHJlZnNfdXJsKTsKLQkJCWVsc2UKLQkJCQlkaWUoIiVzIGRvd25sb2FkIGVycm9yIC0gJXMiLCByZWZzX3VybCwgY3VybF9lcnJvcnN0cik7Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKLQkJZGllKCJVbmFibGUgdG8gc3RhcnQgSFRUUCByZXF1ZXN0Iik7CisJaHR0cF9yZXQgPSBodHRwX2dldF9zdHJidWYocmVmc191cmwsICZidWZmZXIsIEhUVFBfTk9fQ0FDSEUpOworCXN3aXRjaCAoaHR0cF9yZXQpIHsKKwljYXNlIEhUVFBfT0s6CisJCWJyZWFrOworCWNhc2UgSFRUUF9NSVNTSU5HX1RBUkdFVDoKKwkJZGllKCIlcyBub3QgZm91bmQ6IGRpZCB5b3UgcnVuIGdpdCB1cGRhdGUtc2VydmVyLWluZm8gb24gdGhlIgorCQkgICAgIiBzZXJ2ZXI/IiwgcmVmc191cmwpOworCWRlZmF1bHQ6CisJCWh0dHBfZXJyb3IocmVmc191cmwsIGh0dHBfcmV0KTsKKwkJZGllKCJIVFRQIHJlcXVlc3QgZmFpbGVkIik7CiAJfQogCiAJZGF0YSA9IGJ1ZmZlci5idWY7CkBAIC01MDgsNiArNTA4LDggQEAKIAkJZnJlZShyZWYpOwogCX0KIAorCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCWZyZWUocmVmc191cmwpOwogCXJldHVybiByZWZzOwogfQogCkBAIC01MjcsMTIgKzUyOSwxNSBAQAogCXN0cnVjdCBidW5kbGVfaGVhZGVyIGhlYWRlcjsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVmICpnZXRfcmVmc19mcm9tX2J1bmRsZShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnNfZnJvbV9idW5kbGUoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgZm9yX3B1c2gpCiB7CiAJc3RydWN0IGJ1bmRsZV90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKIAlzdHJ1Y3QgcmVmICpyZXN1bHQgPSBOVUxMOwogCWludCBpOwogCisJaWYgKGZvcl9wdXNoKQorCQlyZXR1cm4gTlVMTDsKKwogCWlmIChkYXRhLT5mZCA+IDApCiAJCWNsb3NlKGRhdGEtPmZkKTsKIAlkYXRhLT5mZCA9IHJlYWRfYnVuZGxlX2hlYWRlcih0cmFuc3BvcnQtPnVybCwgJmRhdGEtPmhlYWRlcik7CkBAIC01NzMsNiArNTc4LDcgQEAKIAlpbnQgZmRbMl07CiAJY29uc3QgY2hhciAqdXBsb2FkcGFjazsKIAljb25zdCBjaGFyICpyZWNlaXZlcGFjazsKKwlzdHJ1Y3QgZXh0cmFfaGF2ZV9vYmplY3RzIGV4dHJhX2hhdmU7CiB9OwogCiBzdGF0aWMgaW50IHNldF9naXRfb3B0aW9uKHN0cnVjdCB0cmFuc3BvcnQgKmNvbm5lY3Rpb24sCkBAIC02MDQsMjAgKzYxMCwyMyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGNvbm5lY3Rfc2V0dXAoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQorc3RhdGljIGludCBjb25uZWN0X3NldHVwKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IGZvcl9wdXNoLCBpbnQgdmVyYm9zZSkKIHsKIAlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOwotCWRhdGEtPmNvbm4gPSBnaXRfY29ubmVjdChkYXRhLT5mZCwgdHJhbnNwb3J0LT51cmwsIGRhdGEtPnVwbG9hZHBhY2ssIDApOworCWRhdGEtPmNvbm4gPSBnaXRfY29ubmVjdChkYXRhLT5mZCwgdHJhbnNwb3J0LT51cmwsCisJCQkJIGZvcl9wdXNoID8gZGF0YS0+cmVjZWl2ZXBhY2sgOiBkYXRhLT51cGxvYWRwYWNrLAorCQkJCSB2ZXJib3NlID8gQ09OTkVDVF9WRVJCT1NFIDogMCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVmICpnZXRfcmVmc192aWFfY29ubmVjdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnNfdmlhX2Nvbm5lY3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgZm9yX3B1c2gpCiB7CiAJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKIAlzdHJ1Y3QgcmVmICpyZWZzOwogCi0JY29ubmVjdF9zZXR1cCh0cmFuc3BvcnQpOwotCWdldF9yZW1vdGVfaGVhZHMoZGF0YS0+ZmRbMF0sICZyZWZzLCAwLCBOVUxMLCAwLCBOVUxMKTsKKwljb25uZWN0X3NldHVwKHRyYW5zcG9ydCwgZm9yX3B1c2gsIDApOworCWdldF9yZW1vdGVfaGVhZHMoZGF0YS0+ZmRbMF0sICZyZWZzLCAwLCBOVUxMLAorCQkJIGZvcl9wdXNoID8gUkVGX05PUk1BTCA6IDAsICZkYXRhLT5leHRyYV9oYXZlKTsKIAogCXJldHVybiByZWZzOwogfQpAQCAtNjQ5LDcgKzY1OCw3IEBACiAJCW9yaWdoW2ldID0gaGVhZHNbaV0gPSB4c3RyZHVwKHRvX2ZldGNoW2ldLT5uYW1lKTsKIAogCWlmICghZGF0YS0+Y29ubikgewotCQljb25uZWN0X3NldHVwKHRyYW5zcG9ydCk7CisJCWNvbm5lY3Rfc2V0dXAodHJhbnNwb3J0LCAwLCAwKTsKIAkJZ2V0X3JlbW90ZV9oZWFkcyhkYXRhLT5mZFswXSwgJnJlZnNfdG1wLCAwLCBOVUxMLCAwLCBOVUxMKTsKIAl9CiAKQEAgLTY3MiwyMCArNjgxLDIzMSBAQAogCXJldHVybiAocmVmcyA/IDAgOiAtMSk7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0X3RyYW5zcG9ydF9wdXNoKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IHJlZnNwZWNfbnIsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IHJlZnNfcHVzaGVkKHN0cnVjdCByZWYgKnJlZikKK3sKKwlmb3IgKDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3dpdGNoKHJlZi0+c3RhdHVzKSB7CisJCWNhc2UgUkVGX1NUQVRVU19OT05FOgorCQljYXNlIFJFRl9TVEFUVVNfVVBUT0RBVEU6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfdHJhY2tpbmdfcmVmKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgc3RydWN0IHJlZiAqcmVmLCBpbnQgdmVyYm9zZSkKK3sKKwlzdHJ1Y3QgcmVmc3BlYyByczsKKworCWlmIChyZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX09LICYmIHJlZi0+c3RhdHVzICE9IFJFRl9TVEFUVVNfVVBUT0RBVEUpCisJCXJldHVybjsKKworCXJzLnNyYyA9IHJlZi0+bmFtZTsKKwlycy5kc3QgPSBOVUxMOworCisJaWYgKCFyZW1vdGVfZmluZF90cmFja2luZyhyZW1vdGUsICZycykpIHsKKwkJaWYgKHZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwgInVwZGF0aW5nIGxvY2FsIHRyYWNraW5nIHJlZiAnJXMnXG4iLCBycy5kc3QpOworCQlpZiAocmVmLT5kZWxldGlvbikgeworCQkJZGVsZXRlX3JlZihycy5kc3QsIE5VTEwsIDApOworCQl9IGVsc2UKKwkJCXVwZGF0ZV9yZWYoInVwZGF0ZSBieSBwdXNoIiwgcnMuZHN0LAorCQkJCQlyZWYtPm5ld19zaGExLCBOVUxMLCAwLCAwKTsKKwkJZnJlZShycy5kc3QpOworCX0KK30KKworI2RlZmluZSBTVU1NQVJZX1dJRFRIICgyICogREVGQVVMVF9BQkJSRVYgKyAzKQorCitzdGF0aWMgdm9pZCBwcmludF9yZWZfc3RhdHVzKGNoYXIgZmxhZywgY29uc3QgY2hhciAqc3VtbWFyeSwgc3RydWN0IHJlZiAqdG8sIHN0cnVjdCByZWYgKmZyb20sIGNvbnN0IGNoYXIgKm1zZywgaW50IHBvcmNlbGFpbikKK3sKKwlpZiAocG9yY2VsYWluKSB7CisJCWlmIChmcm9tKQorCQkJZnByaW50ZihzdGRvdXQsICIlY1x0JXM6JXNcdCIsIGZsYWcsIGZyb20tPm5hbWUsIHRvLT5uYW1lKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRvdXQsICIlY1x0OiVzXHQiLCBmbGFnLCB0by0+bmFtZSk7CisJCWlmIChtc2cpCisJCQlmcHJpbnRmKHN0ZG91dCwgIiVzICglcylcbiIsIHN1bW1hcnksIG1zZyk7CisJCWVsc2UKKwkJCWZwcmludGYoc3Rkb3V0LCAiJXNcbiIsIHN1bW1hcnkpOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAiICVjICUtKnMgIiwgZmxhZywgU1VNTUFSWV9XSURUSCwgc3VtbWFyeSk7CisJCWlmIChmcm9tKQorCQkJZnByaW50ZihzdGRlcnIsICIlcyAtPiAlcyIsIHByZXR0aWZ5X3JlZm5hbWUoZnJvbS0+bmFtZSksIHByZXR0aWZ5X3JlZm5hbWUodG8tPm5hbWUpKTsKKwkJZWxzZQorCQkJZnB1dHMocHJldHRpZnlfcmVmbmFtZSh0by0+bmFtZSksIHN0ZGVycik7CisJCWlmIChtc2cpIHsKKwkJCWZwdXRzKCIgKCIsIHN0ZGVycik7CisJCQlmcHV0cyhtc2csIHN0ZGVycik7CisJCQlmcHV0YygnKScsIHN0ZGVycik7CisJCX0KKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzdGF0dXNfYWJicmV2KHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0pCit7CisJcmV0dXJuIGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBERUZBVUxUX0FCQlJFVik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X29rX3JlZl9zdGF0dXMoc3RydWN0IHJlZiAqcmVmLCBpbnQgcG9yY2VsYWluKQoreworCWlmIChyZWYtPmRlbGV0aW9uKQorCQlwcmludF9yZWZfc3RhdHVzKCctJywgIltkZWxldGVkXSIsIHJlZiwgTlVMTCwgTlVMTCwgcG9yY2VsYWluKTsKKwllbHNlIGlmIChpc19udWxsX3NoYTEocmVmLT5vbGRfc2hhMSkpCisJCXByaW50X3JlZl9zdGF0dXMoJyonLAorCQkJKCFwcmVmaXhjbXAocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpID8gIltuZXcgdGFnXSIgOgorCQkJIltuZXcgYnJhbmNoXSIpLAorCQkJcmVmLCByZWYtPnBlZXJfcmVmLCBOVUxMLCBwb3JjZWxhaW4pOworCWVsc2UgeworCQljaGFyIHF1aWNrcmVmWzg0XTsKKwkJY2hhciB0eXBlOworCQljb25zdCBjaGFyICptc2c7CisKKwkJc3RyY3B5KHF1aWNrcmVmLCBzdGF0dXNfYWJicmV2KHJlZi0+b2xkX3NoYTEpKTsKKwkJaWYgKHJlZi0+bm9uZmFzdGZvcndhcmQpIHsKKwkJCXN0cmNhdChxdWlja3JlZiwgIi4uLiIpOworCQkJdHlwZSA9ICcrJzsKKwkJCW1zZyA9ICJmb3JjZWQgdXBkYXRlIjsKKwkJfSBlbHNlIHsKKwkJCXN0cmNhdChxdWlja3JlZiwgIi4uIik7CisJCQl0eXBlID0gJyAnOworCQkJbXNnID0gTlVMTDsKKwkJfQorCQlzdHJjYXQocXVpY2tyZWYsIHN0YXR1c19hYmJyZXYocmVmLT5uZXdfc2hhMSkpOworCisJCXByaW50X3JlZl9zdGF0dXModHlwZSwgcXVpY2tyZWYsIHJlZiwgcmVmLT5wZWVyX3JlZiwgbXNnLCBwb3JjZWxhaW4pOworCX0KK30KKworc3RhdGljIGludCBwcmludF9vbmVfcHVzaF9zdGF0dXMoc3RydWN0IHJlZiAqcmVmLCBjb25zdCBjaGFyICpkZXN0LCBpbnQgY291bnQsIGludCBwb3JjZWxhaW4pCit7CisJaWYgKCFjb3VudCkKKwkJZnByaW50ZihzdGRlcnIsICJUbyAlc1xuIiwgZGVzdCk7CisKKwlzd2l0Y2gocmVmLT5zdGF0dXMpIHsKKwljYXNlIFJFRl9TVEFUVVNfTk9ORToKKwkJcHJpbnRfcmVmX3N0YXR1cygnWCcsICJbbm8gbWF0Y2hdIiwgcmVmLCBOVUxMLCBOVUxMLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05PREVMRVRFOgorCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZWplY3RlZF0iLCByZWYsIE5VTEwsCisJCQkJCQkgInJlbW90ZSBkb2VzIG5vdCBzdXBwb3J0IGRlbGV0aW5nIHJlZnMiLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfVVBUT0RBVEU6CisJCXByaW50X3JlZl9zdGF0dXMoJz0nLCAiW3VwIHRvIGRhdGVdIiwgcmVmLAorCQkJCQkJIHJlZi0+cGVlcl9yZWYsIE5VTEwsIHBvcmNlbGFpbik7CisJCWJyZWFrOworCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQ6CisJCXByaW50X3JlZl9zdGF0dXMoJyEnLCAiW3JlamVjdGVkXSIsIHJlZiwgcmVmLT5wZWVyX3JlZiwKKwkJCQkJCSAibm9uLWZhc3QgZm9yd2FyZCIsIHBvcmNlbGFpbik7CisJCWJyZWFrOworCWNhc2UgUkVGX1NUQVRVU19SRU1PVEVfUkVKRUNUOgorCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZW1vdGUgcmVqZWN0ZWRdIiwgcmVmLAorCQkJCQkJIHJlZi0+ZGVsZXRpb24gPyBOVUxMIDogcmVmLT5wZWVyX3JlZiwKKwkJCQkJCSByZWYtPnJlbW90ZV9zdGF0dXMsIHBvcmNlbGFpbik7CisJCWJyZWFrOworCWNhc2UgUkVGX1NUQVRVU19FWFBFQ1RJTkdfUkVQT1JUOgorCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZW1vdGUgZmFpbHVyZV0iLCByZWYsCisJCQkJCQkgcmVmLT5kZWxldGlvbiA/IE5VTEwgOiByZWYtPnBlZXJfcmVmLAorCQkJCQkJICJyZW1vdGUgZmFpbGVkIHRvIHJlcG9ydCBzdGF0dXMiLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfT0s6CisJCXByaW50X29rX3JlZl9zdGF0dXMocmVmLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfcHVzaF9zdGF0dXMoY29uc3QgY2hhciAqZGVzdCwgc3RydWN0IHJlZiAqcmVmcywKKwkJCSAgICAgIGludCB2ZXJib3NlLCBpbnQgcG9yY2VsYWluLCBpbnQgKiBub25mYXN0Zm9yd2FyZCkKK3sKKwlzdHJ1Y3QgcmVmICpyZWY7CisJaW50IG4gPSAwOworCisJaWYgKHZlcmJvc2UpIHsKKwkJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKwkJCWlmIChyZWYtPnN0YXR1cyA9PSBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQkJCW4gKz0gcHJpbnRfb25lX3B1c2hfc3RhdHVzKHJlZiwgZGVzdCwgbiwgcG9yY2VsYWluKTsKKwl9CisKKwlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQlpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19PSykKKwkJCW4gKz0gcHJpbnRfb25lX3B1c2hfc3RhdHVzKHJlZiwgZGVzdCwgbiwgcG9yY2VsYWluKTsKKworCSpub25mYXN0Zm9yd2FyZCA9IDA7CisJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAocmVmLT5zdGF0dXMgIT0gUkVGX1NUQVRVU19OT05FICYmCisJCSAgICByZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX1VQVE9EQVRFICYmCisJCSAgICByZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX09LKQorCQkJbiArPSBwcmludF9vbmVfcHVzaF9zdGF0dXMocmVmLCBkZXN0LCBuLCBwb3JjZWxhaW4pOworCQlpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQpCisJCQkqbm9uZmFzdGZvcndhcmQgPSAxOworCX0KK30KKworc3RhdGljIHZvaWQgdmVyaWZ5X3JlbW90ZV9uYW1lcyhpbnQgbnJfaGVhZHMsIGNvbnN0IGNoYXIgKipoZWFkcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9oZWFkczsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmxvY2FsID0gaGVhZHNbaV07CisJCWNvbnN0IGNoYXIgKnJlbW90ZSA9IHN0cnJjaHIoaGVhZHNbaV0sICc6Jyk7CisKKwkJaWYgKCpsb2NhbCA9PSAnKycpCisJCQlsb2NhbCsrOworCisJCS8qIEEgbWF0Y2hpbmcgcmVmc3BlYyBpcyBva2F5LiAgKi8KKwkJaWYgKHJlbW90ZSA9PSBsb2NhbCAmJiByZW1vdGVbMV0gPT0gJ1wwJykKKwkJCWNvbnRpbnVlOworCisJCXJlbW90ZSA9IHJlbW90ZSA/IChyZW1vdGUgKyAxKSA6IGxvY2FsOworCQlzd2l0Y2ggKGNoZWNrX3JlZl9mb3JtYXQocmVtb3RlKSkgeworCQljYXNlIDA6IC8qIG9rICovCisJCWNhc2UgQ0hFQ0tfUkVGX0ZPUk1BVF9PTkVMRVZFTDoKKwkJCS8qIG9rIGJ1dCBhIHNpbmdsZSBsZXZlbCAtLSB0aGF0IGlzIGZpbmUgZm9yCisJCQkgKiBhIG1hdGNoIHBhdHRlcm4uCisJCQkgKi8KKwkJY2FzZSBDSEVDS19SRUZfRk9STUFUX1dJTERDQVJEOgorCQkJLyogb2sgYnV0IGVuZHMgd2l0aCBhIHBhdHRlcm4tbWF0Y2ggY2hhcmFjdGVyICovCisJCQljb250aW51ZTsKKwkJfQorCQlkaWUoInJlbW90ZSBwYXJ0IG9mIHJlZnNwZWMgaXMgbm90IGEgdmFsaWQgbmFtZSBpbiAlcyIsCisJCSAgICBoZWFkc1tpXSk7CisJfQorfQorCitzdGF0aWMgaW50IGdpdF90cmFuc3BvcnRfcHVzaChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKIAlzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgYXJnczsKKwlpbnQgcmV0OwogCi0JYXJncy5yZWNlaXZlcGFjayA9IGRhdGEtPnJlY2VpdmVwYWNrOwotCWFyZ3Muc2VuZF9hbGwgPSAhIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FMTCk7CisJaWYgKCFkYXRhLT5jb25uKSB7CisJCXN0cnVjdCByZWYgKnRtcF9yZWZzOworCQljb25uZWN0X3NldHVwKHRyYW5zcG9ydCwgMSwgMCk7CisKKwkJZ2V0X3JlbW90ZV9oZWFkcyhkYXRhLT5mZFswXSwgJnRtcF9yZWZzLCAwLCBOVUxMLCBSRUZfTk9STUFMLAorCQkJCSBOVUxMKTsKKwl9CisKIAlhcmdzLnNlbmRfbWlycm9yID0gISEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9NSVJST1IpOwogCWFyZ3MuZm9yY2VfdXBkYXRlID0gISEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9GT1JDRSk7CiAJYXJncy51c2VfdGhpbl9wYWNrID0gZGF0YS0+dGhpbjsKIAlhcmdzLnZlcmJvc2UgPSAhIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX1ZFUkJPU0UpOwogCWFyZ3MuZHJ5X3J1biA9ICEhKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTik7CiAKLQlyZXR1cm4gc2VuZF9wYWNrKCZhcmdzLCB0cmFuc3BvcnQtPnVybCwgdHJhbnNwb3J0LT5yZW1vdGUsIHJlZnNwZWNfbnIsIHJlZnNwZWMpOworCXJldCA9IHNlbmRfcGFjaygmYXJncywgZGF0YS0+ZmQsIGRhdGEtPmNvbm4sIHJlbW90ZV9yZWZzLAorCQkJJmRhdGEtPmV4dHJhX2hhdmUpOworCisJY2xvc2UoZGF0YS0+ZmRbMV0pOworCWNsb3NlKGRhdGEtPmZkWzBdKTsKKwlyZXQgfD0gZmluaXNoX2Nvbm5lY3QoZGF0YS0+Y29ubik7CisJZGF0YS0+Y29ubiA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRpc2Nvbm5lY3RfZ2l0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCkKQEAgLTcyNSw3ICs5NDUsNyBAQAogCXJldC0+cmVtb3RlID0gcmVtb3RlOwogCXJldC0+dXJsID0gdXJsOwogCi0JaWYgKCFwcmVmaXhjbXAodXJsLCAicnN5bmM6Ly8iKSkgeworCWlmICghcHJlZml4Y21wKHVybCwgInJzeW5jOiIpKSB7CiAJCXJldC0+Z2V0X3JlZnNfbGlzdCA9IGdldF9yZWZzX3ZpYV9yc3luYzsKIAkJcmV0LT5mZXRjaCA9IGZldGNoX29ianNfdmlhX3JzeW5jOwogCQlyZXQtPnB1c2ggPSByc3luY190cmFuc3BvcnRfcHVzaDsKQEAgLTc1NSw3ICs5NzUsNyBAQAogCQlyZXQtPnNldF9vcHRpb24gPSBzZXRfZ2l0X29wdGlvbjsKIAkJcmV0LT5nZXRfcmVmc19saXN0ID0gZ2V0X3JlZnNfdmlhX2Nvbm5lY3Q7CiAJCXJldC0+ZmV0Y2ggPSBmZXRjaF9yZWZzX3ZpYV9wYWNrOwotCQlyZXQtPnB1c2ggPSBnaXRfdHJhbnNwb3J0X3B1c2g7CisJCXJldC0+cHVzaF9yZWZzID0gZ2l0X3RyYW5zcG9ydF9wdXNoOwogCQlyZXQtPmRpc2Nvbm5lY3QgPSBkaXNjb25uZWN0X2dpdDsKIAogCQlkYXRhLT50aGluID0gMTsKQEAgLTc4MCwxNyArMTAwMCw1MyBAQAogfQogCiBpbnQgdHJhbnNwb3J0X3B1c2goc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAotCQkgICBpbnQgcmVmc3BlY19uciwgY29uc3QgY2hhciAqKnJlZnNwZWMsIGludCBmbGFncykKKwkJICAgaW50IHJlZnNwZWNfbnIsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MsCisJCSAgIGludCAqIG5vbmZhc3Rmb3J3YXJkKQogewotCWlmICghdHJhbnNwb3J0LT5wdXNoKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gdHJhbnNwb3J0LT5wdXNoKHRyYW5zcG9ydCwgcmVmc3BlY19uciwgcmVmc3BlYywgZmxhZ3MpOworCXZlcmlmeV9yZW1vdGVfbmFtZXMocmVmc3BlY19uciwgcmVmc3BlYyk7CisKKwlpZiAodHJhbnNwb3J0LT5wdXNoKQorCQlyZXR1cm4gdHJhbnNwb3J0LT5wdXNoKHRyYW5zcG9ydCwgcmVmc3BlY19uciwgcmVmc3BlYywgZmxhZ3MpOworCWlmICh0cmFuc3BvcnQtPnB1c2hfcmVmcykgeworCQlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcyA9CisJCQl0cmFuc3BvcnQtPmdldF9yZWZzX2xpc3QodHJhbnNwb3J0LCAxKTsKKwkJc3RydWN0IHJlZiAqbG9jYWxfcmVmcyA9IGdldF9sb2NhbF9oZWFkcygpOworCQlpbnQgbWF0Y2hfZmxhZ3MgPSBNQVRDSF9SRUZTX05PTkU7CisJCWludCB2ZXJib3NlID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9WRVJCT1NFOworCQlpbnQgcG9yY2VsYWluID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9QT1JDRUxBSU47CisJCWludCByZXQ7CisKKwkJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfQUxMKQorCQkJbWF0Y2hfZmxhZ3MgfD0gTUFUQ0hfUkVGU19BTEw7CisJCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUikKKwkJCW1hdGNoX2ZsYWdzIHw9IE1BVENIX1JFRlNfTUlSUk9SOworCisJCWlmIChtYXRjaF9yZWZzKGxvY2FsX3JlZnMsICZyZW1vdGVfcmVmcywKKwkJCSAgICAgICByZWZzcGVjX25yLCByZWZzcGVjLCBtYXRjaF9mbGFncykpIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCXJldCA9IHRyYW5zcG9ydC0+cHVzaF9yZWZzKHRyYW5zcG9ydCwgcmVtb3RlX3JlZnMsIGZsYWdzKTsKKworCQlwcmludF9wdXNoX3N0YXR1cyh0cmFuc3BvcnQtPnVybCwgcmVtb3RlX3JlZnMsIHZlcmJvc2UgfCBwb3JjZWxhaW4sIHBvcmNlbGFpbiwgbm9uZmFzdGZvcndhcmQpOworCisJCWlmICghKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTikpIHsKKwkJCXN0cnVjdCByZWYgKnJlZjsKKwkJCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQkJCXVwZGF0ZV90cmFja2luZ19yZWYodHJhbnNwb3J0LT5yZW1vdGUsIHJlZiwgdmVyYm9zZSk7CisJCX0KKworCQlpZiAoIXJldCAmJiAhcmVmc19wdXNoZWQocmVtb3RlX3JlZnMpKQorCQkJZnByaW50ZihzdGRlcnIsICJFdmVyeXRoaW5nIHVwLXRvLWRhdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMTsKIH0KIAogY29uc3Qgc3RydWN0IHJlZiAqdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCiB7CiAJaWYgKCF0cmFuc3BvcnQtPnJlbW90ZV9yZWZzKQotCQl0cmFuc3BvcnQtPnJlbW90ZV9yZWZzID0gdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0KHRyYW5zcG9ydCk7CisJCXRyYW5zcG9ydC0+cmVtb3RlX3JlZnMgPSB0cmFuc3BvcnQtPmdldF9yZWZzX2xpc3QodHJhbnNwb3J0LCAwKTsKIAlyZXR1cm4gdHJhbnNwb3J0LT5yZW1vdGVfcmVmczsKIH0KIApAQCAtODE3LDcgKzEwNzMsNyBAQAogdm9pZCB0cmFuc3BvcnRfdW5sb2NrX3BhY2soc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQogewogCWlmICh0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUpIHsKLQkJdW5saW5rKHRyYW5zcG9ydC0+cGFja19sb2NrZmlsZSk7CisJCXVubGlua19vcl93YXJuKHRyYW5zcG9ydC0+cGFja19sb2NrZmlsZSk7CiAJCWZyZWUodHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlKTsKIAkJdHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlID0gTlVMTDsKIAl9CkBAIC04MzEsMyArMTA4Nyw1MSBAQAogCWZyZWUodHJhbnNwb3J0KTsKIAlyZXR1cm4gcmV0OwogfQorCisvKgorICogU3RyaXAgdXNlcm5hbWUgKGFuZCBwYXNzd29yZCkgZnJvbSBhbiB1cmwgYW5kIHJldHVybgorICogaXQgaW4gYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nLgorICovCitjaGFyICp0cmFuc3BvcnRfYW5vbnltaXplX3VybChjb25zdCBjaGFyICp1cmwpCit7CisJY2hhciAqYW5vbl91cmwsICpzY2hlbWVfcHJlZml4LCAqYW5vbl9wYXJ0OworCXNpemVfdCBhbm9uX2xlbiwgcHJlZml4X2xlbiA9IDA7CisKKwlhbm9uX3BhcnQgPSBzdHJjaHIodXJsLCAnQCcpOworCWlmIChpc19sb2NhbCh1cmwpIHx8ICFhbm9uX3BhcnQpCisJCWdvdG8gbGl0ZXJhbF9jb3B5OworCisJYW5vbl9sZW4gPSBzdHJsZW4oKythbm9uX3BhcnQpOworCXNjaGVtZV9wcmVmaXggPSBzdHJzdHIodXJsLCAiOi8vIik7CisJaWYgKCFzY2hlbWVfcHJlZml4KSB7CisJCWlmICghc3RyY2hyKGFub25fcGFydCwgJzonKSkKKwkJCS8qIGNhbm5vdCBiZSAibWVAdGhlcmU6L3BhdGgvbmFtZSIgKi8KKwkJCWdvdG8gbGl0ZXJhbF9jb3B5OworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKmNwOworCQkvKiBtYWtlIHN1cmUgc2NoZW1lIGlzIHJlYXNvbmFibGUgKi8KKwkJZm9yIChjcCA9IHVybDsgY3AgPCBzY2hlbWVfcHJlZml4OyBjcCsrKSB7CisJCQlzd2l0Y2ggKCpjcCkgeworCQkJCS8qIFJGQyAxNzM4IDIuMSAqLworCQkJY2FzZSAnKyc6IGNhc2UgJy4nOiBjYXNlICctJzoKKwkJCQlicmVhazsgLyogb2sgKi8KKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGlzYWxudW0oKmNwKSkKKwkJCQkJYnJlYWs7CisJCQkJLyogaXQgaXNuJ3QgKi8KKwkJCQlnb3RvIGxpdGVyYWxfY29weTsKKwkJCX0KKwkJfQorCQkvKiBAIHBhc3QgdGhlIGZpcnN0IHNsYXNoIGRvZXMgbm90IGNvdW50ICovCisJCWNwID0gc3RyY2hyKHNjaGVtZV9wcmVmaXggKyAzLCAnLycpOworCQlpZiAoY3AgJiYgY3AgPCBhbm9uX3BhcnQpCisJCQlnb3RvIGxpdGVyYWxfY29weTsKKwkJcHJlZml4X2xlbiA9IHNjaGVtZV9wcmVmaXggLSB1cmwgKyAzOworCX0KKwlhbm9uX3VybCA9IHhjYWxsb2MoMSwgMSArIHByZWZpeF9sZW4gKyBhbm9uX2xlbik7CisJbWVtY3B5KGFub25fdXJsLCB1cmwsIHByZWZpeF9sZW4pOworCW1lbWNweShhbm9uX3VybCArIHByZWZpeF9sZW4sIGFub25fcGFydCwgYW5vbl9sZW4pOworCXJldHVybiBhbm9uX3VybDsKK2xpdGVyYWxfY29weToKKwlyZXR1cm4geHN0cmR1cCh1cmwpOworfQpkaWZmIC0tZ2l0IGEvdHJhbnNwb3J0LmggYi90cmFuc3BvcnQuaAppbmRleCA2YmJjMWE4Li42MzlmMTNkIDEwMDY0NAotLS0gYS90cmFuc3BvcnQuaAorKysgYi90cmFuc3BvcnQuaApAQCAtMTgsOCArMTgsOSBAQAogCWludCAoKnNldF9vcHRpb24pKHN0cnVjdCB0cmFuc3BvcnQgKmNvbm5lY3Rpb24sIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgIGNvbnN0IGNoYXIgKnZhbHVlKTsKIAotCXN0cnVjdCByZWYgKigqZ2V0X3JlZnNfbGlzdCkoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKKwlzdHJ1Y3QgcmVmICooKmdldF9yZWZzX2xpc3QpKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IGZvcl9wdXNoKTsKIAlpbnQgKCpmZXRjaCkoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgcmVmc19uciwgY29uc3Qgc3RydWN0IHJlZiAqKnJlZnMpOworCWludCAoKnB1c2hfcmVmcykoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmICpyZWZzLCBpbnQgZmxhZ3MpOwogCWludCAoKnB1c2gpKHN0cnVjdCB0cmFuc3BvcnQgKmNvbm5lY3Rpb24sIGludCByZWZzcGVjX25yLCBjb25zdCBjaGFyICoqcmVmc3BlYywgaW50IGZsYWdzKTsKIAogCWludCAoKmRpc2Nvbm5lY3QpKHN0cnVjdCB0cmFuc3BvcnQgKmNvbm5lY3Rpb24pOwpAQCAtMzQsNiArMzUsNyBAQAogI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9EUllfUlVOIDQKICNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfTUlSUk9SIDgKICNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfVkVSQk9TRSAxNgorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9QT1JDRUxBSU4gMzIKIAogLyogUmV0dXJucyBhIHRyYW5zcG9ydCBzdWl0YWJsZSBmb3IgdGhlIHVybCAqLwogc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0X2dldChzdHJ1Y3QgcmVtb3RlICosIGNvbnN0IGNoYXIgKik7CkBAIC02NiwxMiArNjgsMTQgQEAKIAkJCSBjb25zdCBjaGFyICp2YWx1ZSk7CiAKIGludCB0cmFuc3BvcnRfcHVzaChzdHJ1Y3QgdHJhbnNwb3J0ICpjb25uZWN0aW9uLAotCQkgICBpbnQgcmVmc3BlY19uciwgY29uc3QgY2hhciAqKnJlZnNwZWMsIGludCBmbGFncyk7CisJCSAgIGludCByZWZzcGVjX25yLCBjb25zdCBjaGFyICoqcmVmc3BlYywgaW50IGZsYWdzLAorCQkgICBpbnQgKiBub25mYXN0Zm9yd2FyZCk7CiAKIGNvbnN0IHN0cnVjdCByZWYgKnRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKIAogaW50IHRyYW5zcG9ydF9mZXRjaF9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3Qgc3RydWN0IHJlZiAqcmVmcyk7CiB2b2lkIHRyYW5zcG9ydF91bmxvY2tfcGFjayhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpOwogaW50IHRyYW5zcG9ydF9kaXNjb25uZWN0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCk7CitjaGFyICp0cmFuc3BvcnRfYW5vbnltaXplX3VybChjb25zdCBjaGFyICp1cmwpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3RyZWUtZGlmZi5jIGIvdHJlZS1kaWZmLmMKaW5kZXggYjA1ZDBmNC4uMDQ1OWU1NCAxMDA2NDQKLS0tIGEvdHJlZS1kaWZmLmMKKysrIGIvdHJlZS1kaWZmLmMKQEAgLTIzOSw2ICsyMzksMTIgQEAKIAkJaWYgKCF0cmVlIHx8IHR5cGUgIT0gT0JKX1RSRUUpCiAJCQlkaWUoImNvcnJ1cHQgdHJlZSBzaGEgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CiAKKwkJaWYgKERJRkZfT1BUX1RTVChvcHQsIFRSRUVfSU5fUkVDVVJTSVZFKSkgeworCQkJbmV3YmFzZVtiYXNlbGVuICsgcGF0aGxlbl0gPSAwOworCQkJb3B0LT5hZGRfcmVtb3ZlKG9wdCwgKnByZWZpeCwgbW9kZSwgc2hhMSwgbmV3YmFzZSk7CisJCQluZXdiYXNlW2Jhc2VsZW4gKyBwYXRobGVuXSA9ICcvJzsKKwkJfQorCiAJCWluaXRfdHJlZV9kZXNjKCZpbm5lciwgdHJlZSwgc2l6ZSk7CiAJCXNob3dfdHJlZShvcHQsIHByZWZpeCwgJmlubmVyLCBuZXdiYXNlLCBiYXNlbGVuICsgMSArIHBhdGhsZW4pOwogCkBAIC0zNzQsNyArMzgwLDcgQEAKIAl9CiAKIAkvKgotCSAqIFRoZW4sIGRpc2NhcmQgYWxsIHRoZSBub24tcmVsZXZhbmUgZmlsZSBwYWlycy4uLgorCSAqIFRoZW4sIGRpc2NhcmQgYWxsIHRoZSBub24tcmVsZXZhbnQgZmlsZSBwYWlycy4uLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CiAJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CmRpZmYgLS1naXQgYS90cmVlLmMgYi90cmVlLmMKaW5kZXggZDgyYTA0Ny4uNWFiOTBhZiAxMDA2NDQKLS0tIGEvdHJlZS5jCisrKyBiL3RyZWUuYwpAQCAtNjIsNiArNjIsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJLyogcGF0aHNwZWNzIG1hdGNoIG9ubHkgYXQgdGhlIGRpcmVjdG9yeSBib3VuZGFyaWVzICovCiAJCQlpZiAoIW1hdGNobGVuIHx8CisJCQkgICAgYmFzZWxlbiA9PSBtYXRjaGxlbiB8fAogCQkJICAgIGJhc2VbbWF0Y2hsZW5dID09ICcvJyB8fAogCQkJICAgIG1hdGNoW21hdGNobGVuIC0gMV0gPT0gJy8nKQogCQkJCXJldHVybiAxOwpAQCAtMTE0LDcgKzExNSw3IEBACiAJCWNhc2UgMDoKIAkJCWNvbnRpbnVlOwogCQljYXNlIFJFQURfVFJFRV9SRUNVUlNJVkU6Ci0JCQlicmVhazs7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMTM1LDYgKzEzNiwzNCBAQAogCQkJaWYgKHJldHZhbCkKIAkJCQlyZXR1cm4gLTE7CiAJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChTX0lTR0lUTElOSyhlbnRyeS5tb2RlKSkgeworCQkJaW50IHJldHZhbDsKKwkJCXN0cnVjdCBzdHJidWYgcGF0aDsKKwkJCXVuc2lnbmVkIGludCBlbnRyeWxlbjsKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCQkJZW50cnlsZW4gPSB0cmVlX2VudHJ5X2xlbihlbnRyeS5wYXRoLCBlbnRyeS5zaGExKTsKKwkJCXN0cmJ1Zl9pbml0KCZwYXRoLCBiYXNlbGVuICsgZW50cnlsZW4gKyAxKTsKKwkJCXN0cmJ1Zl9hZGQoJnBhdGgsIGJhc2UsIGJhc2VsZW4pOworCQkJc3RyYnVmX2FkZCgmcGF0aCwgZW50cnkucGF0aCwgZW50cnlsZW4pOworCQkJc3RyYnVmX2FkZGNoKCZwYXRoLCAnLycpOworCisJCQljb21taXQgPSBsb29rdXBfY29tbWl0KGVudHJ5LnNoYTEpOworCQkJaWYgKCFjb21taXQpCisJCQkJZGllKCJDb21taXQgJXMgaW4gc3VibW9kdWxlIHBhdGggJXMgbm90IGZvdW5kIiwKKwkJCQkgICAgc2hhMV90b19oZXgoZW50cnkuc2hhMSksIHBhdGguYnVmKTsKKworCQkJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQkJCWRpZSgiSW52YWxpZCBjb21taXQgJXMgaW4gc3VibW9kdWxlIHBhdGggJXMiLAorCQkJCSAgICBzaGExX3RvX2hleChlbnRyeS5zaGExKSwgcGF0aC5idWYpOworCisJCQlyZXR2YWwgPSByZWFkX3RyZWVfcmVjdXJzaXZlKGNvbW1pdC0+dHJlZSwKKwkJCQkJCSAgICAgcGF0aC5idWYsIHBhdGgubGVuLAorCQkJCQkJICAgICBzdGFnZSwgbWF0Y2gsIGZuLCBjb250ZXh0KTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIC0xOworCQkJY29udGludWU7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS91bmltcGxlbWVudGVkLnNoIGIvdW5pbXBsZW1lbnRlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjUyZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pbXBsZW1lbnRlZC5zaApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9zaAorCitlY2hvID4mMiAiZmF0YWw6IGdpdCB3YXMgYnVpbHQgd2l0aG91dCBzdXBwb3J0IGZvciBgYmFzZW5hbWUgJDBgIChAQFJFQVNPTkBAKS4iCitleGl0IDEyOApkaWZmIC0tZ2l0IGEvdW5wYWNrLWZpbGUuYyBiL3VucGFjay1maWxlLmMKaW5kZXggYmNkYzhiYi4uYWM5Y2JmNyAxMDA2NDQKLS0tIGEvdW5wYWNrLWZpbGUuYworKysgYi91bnBhY2stZmlsZS5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCiAKIHN0YXRpYyBjaGFyICpjcmVhdGVfdGVtcF9maWxlKHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CkBAIC0xNiw3ICsxNyw3IEBACiAJc3RyY3B5KHBhdGgsICIubWVyZ2VfZmlsZV9YWFhYWFgiKTsKIAlmZCA9IHhta3N0ZW1wKHBhdGgpOwogCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYsIHNpemUpICE9IHNpemUpCi0JCWRpZSgidW5hYmxlIHRvIHdyaXRlIHRlbXAtZmlsZSIpOworCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0ZW1wLWZpbGUiKTsKIAljbG9zZShmZCk7CiAJcmV0dXJuIHBhdGg7CiB9CkBAIC0yNSw4ICsyNiwxMCBAQAogewogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCiAJaWYgKGFyZ2MgIT0gMikKLQkJdXNhZ2UoImdpdC11bnBhY2stZmlsZSA8c2hhMT4iKTsKKwkJdXNhZ2UoImdpdCB1bnBhY2stZmlsZSA8c2hhMT4iKTsKIAlpZiAoZ2V0X3NoYTEoYXJndlsxXSwgc2hhMSkpCiAJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBhcmd2WzFdKTsKIApkaWZmIC0tZ2l0IGEvdW5wYWNrLXRyZWVzLmMgYi91bnBhY2stdHJlZXMuYwppbmRleCAzYTRlMTgxLi43MjBmN2ExIDEwMDY0NAotLS0gYS91bnBhY2stdHJlZXMuYworKysgYi91bnBhY2stdHJlZXMuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKICNpbmNsdWRlICJwcm9ncmVzcy5oIgogI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJhdHRyLmgiCiAKIC8qCiAgKiBFcnJvciBtZXNzYWdlcyBleHBlY3RlZCBieSBzY3JpcHRzIG91dCBvZiBwbHVtYmluZyBjb21tYW5kcyBzdWNoIGFzCkBAIC00OSwzOSArNTAsMjAgQEAKIAltZW1jcHkobmV3LCBjZSwgc2l6ZSk7CiAJbmV3LT5uZXh0ID0gTlVMTDsKIAluZXctPmNlX2ZsYWdzID0gKG5ldy0+Y2VfZmxhZ3MgJiB+Y2xlYXIpIHwgc2V0OwotCWFkZF9pbmRleF9lbnRyeSgmby0+cmVzdWx0LCBuZXcsIEFERF9DQUNIRV9PS19UT19BRER8QUREX0NBQ0hFX09LX1RPX1JFUExBQ0V8QUREX0NBQ0hFX1NLSVBfREZDSEVDSyk7CisJYWRkX2luZGV4X2VudHJ5KCZvLT5yZXN1bHQsIG5ldywgQUREX0NBQ0hFX09LX1RPX0FERHxBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSk7CiB9CiAKLS8qIFVubGluayB0aGUgbGFzdCBjb21wb25lbnQgYW5kIGF0dGVtcHQgdG8gcmVtb3ZlIGxlYWRpbmcKLSAqIGRpcmVjdG9yaWVzLCBpbiBjYXNlIHRoaXMgdW5saW5rIGlzIHRoZSByZW1vdmFsIG9mIHRoZQotICogbGFzdCBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5IC0tIGVtcHR5IGRpcmVjdG9yaWVzIGFyZSByZW1vdmVkLgorLyoKKyAqIFVubGluayB0aGUgbGFzdCBjb21wb25lbnQgYW5kIHNjaGVkdWxlIHRoZSBsZWFkaW5nIGRpcmVjdG9yaWVzIGZvcgorICogcmVtb3ZhbCwgc3VjaCB0aGF0IGVtcHR5IGRpcmVjdG9yaWVzIGdldCByZW1vdmVkLgogICovCiBzdGF0aWMgdm9pZCB1bmxpbmtfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKIHsKLQljaGFyICpjcCwgKnByZXY7Ci0JY2hhciAqbmFtZSA9IGNlLT5uYW1lOwotCi0JaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjZV9uYW1lbGVuKGNlKSwgY2UtPm5hbWUpKQorCWlmIChoYXNfc3ltbGlua19vcl9ub2VudF9sZWFkaW5nX3BhdGgoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKSkKIAkJcmV0dXJuOwotCWlmICh1bmxpbmsobmFtZSkpCisJaWYgKHVubGlua19vcl93YXJuKGNlLT5uYW1lKSkKIAkJcmV0dXJuOwotCXByZXYgPSBOVUxMOwotCXdoaWxlICgxKSB7Ci0JCWludCBzdGF0dXM7Ci0JCWNwID0gc3RycmNocihuYW1lLCAnLycpOwotCQlpZiAocHJldikKLQkJCSpwcmV2ID0gJy8nOwotCQlpZiAoIWNwKQotCQkJYnJlYWs7Ci0KLQkJKmNwID0gMDsKLQkJc3RhdHVzID0gcm1kaXIobmFtZSk7Ci0JCWlmIChzdGF0dXMpIHsKLQkJCSpjcCA9ICcvJzsKLQkJCWJyZWFrOwotCQl9Ci0JCXByZXYgPSBjcDsKLQl9CisJc2NoZWR1bGVfZGlyX2Zvcl9yZW1vdmFsKGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2hlY2tvdXQgc3RhdGU7CkBAIC0xMDUsNiArODcsOCBAQAogCQljbnQgPSAwOwogCX0KIAorCWlmIChvLT51cGRhdGUpCisJCWdpdF9hdHRyX3NldF9kaXJlY3Rpb24oR0lUX0FUVFJfQ0hFQ0tPVVQsICZvLT5yZXN1bHQpOwogCWZvciAoaSA9IDA7IGkgPCBpbmRleC0+Y2FjaGVfbnI7IGkrKykgewogCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW2ldOwogCkBAIC0xMTIsMTEgKzk2LDEwIEBACiAJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCArK2NudCk7CiAJCQlpZiAoby0+dXBkYXRlKQogCQkJCXVubGlua19lbnRyeShjZSk7Ci0JCQlyZW1vdmVfaW5kZXhfZW50cnlfYXQoJm8tPnJlc3VsdCwgaSk7Ci0JCQlpLS07Ci0JCQljb250aW51ZTsKIAkJfQogCX0KKwlyZW1vdmVfbWFya2VkX2NhY2hlX2VudHJpZXMoJm8tPnJlc3VsdCk7CisJcmVtb3ZlX3NjaGVkdWxlZF9kaXJzKCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPmNhY2hlX25yOyBpKyspIHsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGluZGV4LT5jYWNoZVtpXTsKQEAgLTEzMCw2ICsxMTMsOCBAQAogCQl9CiAJfQogCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwlpZiAoby0+dXBkYXRlKQorCQlnaXRfYXR0cl9zZXRfZGlyZWN0aW9uKEdJVF9BVFRSX0NIRUNLSU4sIE5VTEwpOwogCXJldHVybiBlcnJzICE9IDA7CiB9CiAKQEAgLTE0Myw3ICsxMjgsNyBAQAogCiBzdGF0aWMgaW50IHVucGFja19pbmRleF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCiB7Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICpzcmNbNV0gPSB7IGNlLCB9OworCXN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjWzVdID0geyBjZSwgTlVMTCwgfTsKIAogCW8tPnBvcysrOwogCWlmIChjZV9zdGFnZShjZSkpIHsKQEAgLTE1NSw3ICsxNDAsNyBAQAogCXJldHVybiBjYWxsX3VucGFja19mbihzcmMsIG8pOwogfQogCi1pbnQgdHJhdmVyc2VfdHJlZXNfcmVjdXJzaXZlKGludCBuLCB1bnNpZ25lZCBsb25nIGRpcm1hc2ssIHVuc2lnbmVkIGxvbmcgZGZfY29uZmxpY3RzLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbmFtZXMsIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQorc3RhdGljIGludCB0cmF2ZXJzZV90cmVlc19yZWN1cnNpdmUoaW50IG4sIHVuc2lnbmVkIGxvbmcgZGlybWFzaywgdW5zaWduZWQgbG9uZyBkZl9jb25mbGljdHMsIHN0cnVjdCBuYW1lX2VudHJ5ICpuYW1lcywgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pCiB7CiAJaW50IGk7CiAJc3RydWN0IHRyZWVfZGVzYyB0W01BWF9VTlBBQ0tfVFJFRVNdOwpAQCAtMjg2LDkgKzI3MSw5IEBACiAJaWYgKG8tPm1lcmdlKQogCQlyZXR1cm4gY2FsbF91bnBhY2tfZm4oc3JjLCBvKTsKIAotCW4gKz0gby0+bWVyZ2U7CiAJZm9yIChpID0gMDsgaSA8IG47IGkrKykKLQkJYWRkX2VudHJ5KG8sIHNyY1tpXSwgMCwgMCk7CisJCWlmIChzcmNbaV0gJiYgc3JjW2ldICE9IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQorCQkJYWRkX2VudHJ5KG8sIHNyY1tpXSwgMCwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM0MSw2ICszMjYsMjMgQEAKIAkJCWlmIChzcmNbMF0pCiAJCQkJY29uZmxpY3RzIHw9IDE7CiAJCX0KKworCQkvKiBzcGVjaWFsIGNhc2U6ICJkaWZmLWluZGV4IC0tY2FjaGVkIiBsb29raW5nIGF0IGEgdHJlZSAqLworCQlpZiAoby0+ZGlmZl9pbmRleF9jYWNoZWQgJiYKKwkJICAgIG4gPT0gMSAmJiBkaXJtYXNrID09IDEgJiYgU19JU0RJUihuYW1lcy0+bW9kZSkpIHsKKwkJCWludCBtYXRjaGVzOworCQkJbWF0Y2hlcyA9IGNhY2hlX3RyZWVfbWF0Y2hlc190cmF2ZXJzYWwoby0+c3JjX2luZGV4LT5jYWNoZV90cmVlLAorCQkJCQkJCSAgICAgICBuYW1lcywgaW5mbyk7CisJCQkvKgorCQkJICogRXZlcnl0aGluZyB1bmRlciB0aGUgbmFtZSBtYXRjaGVzLiAgQWRqdXN0IG8tPnBvcyB0bworCQkJICogc2tpcCB0aGUgZW50aXJlIGhpZXJhcmNoeS4KKwkJCSAqLworCQkJaWYgKG1hdGNoZXMpIHsKKwkJCQlvLT5wb3MgKz0gbWF0Y2hlczsKKwkJCQlyZXR1cm4gbWFzazsKKwkJCX0KKwkJfQorCiAJCWlmICh0cmF2ZXJzZV90cmVlc19yZWN1cnNpdmUobiwgZGlybWFzaywgY29uZmxpY3RzLAogCQkJCQkgICAgIG5hbWVzLCBpbmZvKSA8IDApCiAJCQlyZXR1cm4gLTE7CkBAIC0zODAsOCArMzgyLDEwIEBACiAKIAltZW1zZXQoJm8tPnJlc3VsdCwgMCwgc2l6ZW9mKG8tPnJlc3VsdCkpOwogCW8tPnJlc3VsdC5pbml0aWFsaXplZCA9IDE7Ci0JaWYgKG8tPnNyY19pbmRleCkKLQkJby0+cmVzdWx0LnRpbWVzdGFtcCA9IG8tPnNyY19pbmRleC0+dGltZXN0YW1wOworCWlmIChvLT5zcmNfaW5kZXgpIHsKKwkJby0+cmVzdWx0LnRpbWVzdGFtcC5zZWMgPSBvLT5zcmNfaW5kZXgtPnRpbWVzdGFtcC5zZWM7CisJCW8tPnJlc3VsdC50aW1lc3RhbXAubnNlYyA9IG8tPnNyY19pbmRleC0+dGltZXN0YW1wLm5zZWM7CisJfQogCW8tPm1lcmdlX3NpemUgPSBsZW47CiAKIAlpZiAoIWRmYykKQEAgLTQ0Niw3ICs0NTAsNyBAQAogewogCXN0cnVjdCBzdGF0IHN0OwogCi0JaWYgKG8tPmluZGV4X29ubHkgfHwgby0+cmVzZXQpCisJaWYgKG8tPmluZGV4X29ubHkgfHwgby0+cmVzZXQgfHwgY2VfdXB0b2RhdGUoY2UpKQogCQlyZXR1cm4gMDsKIAogCWlmICghbHN0YXQoY2UtPm5hbWUsICZzdCkpIHsKQEAgLTU0Nyw3ICs1NTEsNyBAQAogCW1lbXNldCgmZCwgMCwgc2l6ZW9mKGQpKTsKIAlpZiAoby0+ZGlyKQogCQlkLmV4Y2x1ZGVfcGVyX2RpciA9IG8tPmRpci0+ZXhjbHVkZV9wZXJfZGlyOwotCWkgPSByZWFkX2RpcmVjdG9yeSgmZCwgY2UtPm5hbWUsIHBhdGhidWYsIG5hbWVsZW4rMSwgTlVMTCk7CisJaSA9IHJlYWRfZGlyZWN0b3J5KCZkLCBwYXRoYnVmLCBuYW1lbGVuKzEsIE5VTEwpOwogCWlmIChpKQogCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOgogCQkJZXJyb3IoRVJST1JNU0cobywgbm90X3VwdG9kYXRlX2RpciksIGNlLT5uYW1lKTsKQEAgLTU4Myw3ICs1ODcsNyBAQAogCWlmIChvLT5pbmRleF9vbmx5IHx8IG8tPnJlc2V0IHx8ICFvLT51cGRhdGUpCiAJCXJldHVybiAwOwogCi0JaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjZV9uYW1lbGVuKGNlKSwgY2UtPm5hbWUpKQorCWlmIChoYXNfc3ltbGlua19vcl9ub2VudF9sZWFkaW5nX3BhdGgoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIWxzdGF0KGNlLT5uYW1lLCAmc3QpKSB7CkBAIC05OTUsMTIgKzk5OSwxMiBAQAogCQlyZXR1cm4gZXJyb3IoIkNhbm5vdCBkbyBhIG9uZXdheSBtZXJnZSBvZiAlZCB0cmVlcyIsCiAJCQkgICAgIG8tPm1lcmdlX3NpemUpOwogCi0JaWYgKCFhKQorCWlmICghYSB8fCBhID09IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQogCQlyZXR1cm4gZGVsZXRlZF9lbnRyeShvbGQsIG9sZCwgbyk7CiAKIAlpZiAob2xkICYmIHNhbWUob2xkLCBhKSkgewogCQlpbnQgdXBkYXRlID0gMDsKLQkJaWYgKG8tPnJlc2V0KSB7CisJCWlmIChvLT5yZXNldCAmJiAhY2VfdXB0b2RhdGUob2xkKSkgewogCQkJc3RydWN0IHN0YXQgc3Q7CiAJCQlpZiAobHN0YXQob2xkLT5uYW1lLCAmc3QpIHx8CiAJCQkgICAgaWVfbWF0Y2hfc3RhdChvLT5zcmNfaW5kZXgsIG9sZCwgJnN0LCBDRV9NQVRDSF9JR05PUkVfVkFMSUQpKQpkaWZmIC0tZ2l0IGEvdW5wYWNrLXRyZWVzLmggYi91bnBhY2stdHJlZXMuaAppbmRleCAwZDI2ZjNkLi4xZTBlMjMyIDEwMDY0NAotLS0gYS91bnBhY2stdHJlZXMuaAorKysgYi91bnBhY2stdHJlZXMuaApAQCAtMjcsNiArMjcsNyBAQAogCQkgICAgIGFnZ3Jlc3NpdmU6MSwKIAkJICAgICBza2lwX3VubWVyZ2VkOjEsCiAJCSAgICAgaW5pdGlhbF9jaGVja291dDoxLAorCQkgICAgIGRpZmZfaW5kZXhfY2FjaGVkOjEsCiAJCSAgICAgZ2VudGx5OjE7CiAJY29uc3QgY2hhciAqcHJlZml4OwogCWludCBwb3M7CmRpZmYgLS1naXQgYS91cGRhdGUtc2VydmVyLWluZm8uYyBiL3VwZGF0ZS1zZXJ2ZXItaW5mby5jCmluZGV4IDdlODIwOWUuLjdiMzhmZDggMTAwNjQ0Ci0tLSBhL3VwZGF0ZS1zZXJ2ZXItaW5mby5jCisrKyBiL3VwZGF0ZS1zZXJ2ZXItaW5mby5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgdXBkYXRlX3NlcnZlcl9pbmZvX3VzYWdlW10gPQogImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIjsKQEAgLTE5LDYgKzIwLDggQEAKIAlpZiAoaSAhPSBhYykKIAkJdXNhZ2UodXBkYXRlX3NlcnZlcl9pbmZvX3VzYWdlKTsKIAorCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXZbMF0pOworCiAJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwogCiAJcmV0dXJuICEhdXBkYXRlX3NlcnZlcl9pbmZvKGZvcmNlKTsKZGlmZiAtLWdpdCBhL3VwbG9hZC1wYWNrLmMgYi91cGxvYWQtcGFjay5jCmluZGV4IGU1YWRiYzAuLjg0MWViYjUgMTAwNjQ0Ci0tLSBhL3VwbG9hZC1wYWNrLmMKKysrIGIvdXBsb2FkLXBhY2suYwpAQCAtMTEsNyArMTEsNyBAQAogI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAKLXN0YXRpYyBjb25zdCBjaGFyIHVwbG9hZF9wYWNrX3VzYWdlW10gPSAiZ2l0LXVwbG9hZC1wYWNrIFstLXN0cmljdF0gWy0tdGltZW91dD1ubl0gPGRpcj4iOworc3RhdGljIGNvbnN0IGNoYXIgdXBsb2FkX3BhY2tfdXNhZ2VbXSA9ICJnaXQgdXBsb2FkLXBhY2sgWy0tc3RyaWN0XSBbLS10aW1lb3V0PW5uXSA8ZGlyPiI7CiAKIC8qIGJpdHMgIzAuLjcgaW4gcmV2aXNpb24uaCwgIzguLjEwIGluIGNvbW1pdC5jICovCiAjZGVmaW5lIFRIRVlfSEFWRQkoMXUgPDwgMTEpCkBAIC0yOCw3ICsyOCw3IEBACiAKIHN0YXRpYyBpbnQgbXVsdGlfYWNrLCBucl9vdXJfcmVmczsKIHN0YXRpYyBpbnQgdXNlX3RoaW5fcGFjaywgdXNlX29mc19kZWx0YSwgdXNlX2luY2x1ZGVfdGFnOwotc3RhdGljIGludCBub19wcm9ncmVzczsKK3N0YXRpYyBpbnQgbm9fcHJvZ3Jlc3MsIGRhZW1vbl9tb2RlOwogc3RhdGljIHN0cnVjdCBvYmplY3RfYXJyYXkgaGF2ZV9vYmo7CiBzdGF0aWMgc3RydWN0IG9iamVjdF9hcnJheSB3YW50X29iajsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGltZW91dDsKQEAgLTY2LDcgKzY2LDcgQEAKIH0KIAogc3RhdGljIEZJTEUgKnBhY2tfcGlwZSA9IE5VTEw7Ci1zdGF0aWMgdm9pZCBzaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQpCitzdGF0aWMgdm9pZCBzaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCiB7CiAJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQk9VTkRBUlkpCiAJCWZwdXRjKCctJywgcGFja19waXBlKTsKQEAgLTc4LDIwICs3OCwyMiBAQAogCWNvbW1pdC0+YnVmZmVyID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqcCkKK3N0YXRpYyB2b2lkIHNob3dfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3Qgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwgY29uc3QgY2hhciAqY29tcG9uZW50KQogewogCS8qIEFuIG9iamVjdCB3aXRoIG5hbWUgImZvb1xuMDAwMDAwMC4uLiIgY2FuIGJlIHVzZWQgdG8KIAkgKiBjb25mdXNlIGRvd25zdHJlYW0gZ2l0LXBhY2stb2JqZWN0cyB2ZXJ5IGJhZGx5LgogCSAqLwotCWNvbnN0IGNoYXIgKmVwID0gc3RyY2hyKHAtPm5hbWUsICdcbicpOworCWNvbnN0IGNoYXIgKm5hbWUgPSBwYXRoX25hbWUocGF0aCwgY29tcG9uZW50KTsKKwljb25zdCBjaGFyICplcCA9IHN0cmNocihuYW1lLCAnXG4nKTsKIAlpZiAoZXApIHsKLQkJZnByaW50ZihwYWNrX3BpcGUsICIlcyAlLipzXG4iLCBzaGExX3RvX2hleChwLT5pdGVtLT5zaGExKSwKLQkJICAgICAgIChpbnQpIChlcCAtIHAtPm5hbWUpLAotCQkgICAgICAgcC0+bmFtZSk7CisJCWZwcmludGYocGFja19waXBlLCAiJXMgJS4qc1xuIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSwKKwkJICAgICAgIChpbnQpIChlcCAtIG5hbWUpLAorCQkgICAgICAgbmFtZSk7CiAJfQogCWVsc2UKIAkJZnByaW50ZihwYWNrX3BpcGUsICIlcyAlc1xuIiwKLQkJCQlzaGExX3RvX2hleChwLT5pdGVtLT5zaGExKSwgcC0+bmFtZSk7CisJCQkJc2hhMV90b19oZXgob2JqLT5zaGExKSwgbmFtZSk7CisJZnJlZSgoY2hhciAqKW5hbWUpOwogfQogCiBzdGF0aWMgdm9pZCBzaG93X2VkZ2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0KQpAQCAtMTM0LDcgKzEzNiw3IEBACiAJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCiAJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKIAltYXJrX2VkZ2VzX3VuaW50ZXJlc3RpbmcocmV2cy5jb21taXRzLCAmcmV2cywgc2hvd19lZGdlKTsKLQl0cmF2ZXJzZV9jb21taXRfbGlzdCgmcmV2cywgc2hvd19jb21taXQsIHNob3dfb2JqZWN0KTsKKwl0cmF2ZXJzZV9jb21taXRfbGlzdCgmcmV2cywgc2hvd19jb21taXQsIHNob3dfb2JqZWN0LCBOVUxMKTsKIAlmZmx1c2gocGFja19waXBlKTsKIAlmY2xvc2UocGFja19waXBlKTsKIAlyZXR1cm4gMDsKQEAgLTM5NywxMiArMzk5LDExIEBACiAJc3RhdGljIGNoYXIgbGluZVsxMDAwXTsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCWNoYXIgaGV4WzQxXSwgbGFzdF9oZXhbNDFdOwotCWludCBsZW47CiAKIAlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOwogCiAJZm9yKDs7KSB7Ci0JCWxlbiA9IHBhY2tldF9yZWFkX2xpbmUoMCwgbGluZSwgc2l6ZW9mKGxpbmUpKTsKKwkJaW50IGxlbiA9IHBhY2tldF9yZWFkX2xpbmUoMCwgbGluZSwgc2l6ZW9mKGxpbmUpKTsKIAkJcmVzZXRfdGltZW91dCgpOwogCiAJCWlmICghbGVuKSB7CkBAIC00MTAsNyArNDExLDcgQEAKIAkJCQlwYWNrZXRfd3JpdGUoMSwgIk5BS1xuIik7CiAJCQljb250aW51ZTsKIAkJfQotCQlsZW4gPSBzdHJpcChsaW5lLCBsZW4pOworCQlzdHJpcChsaW5lLCBsZW4pOwogCQlpZiAoIXByZWZpeGNtcChsaW5lLCAiaGF2ZSAiKSkgewogCQkJc3dpdGNoIChnb3Rfc2hhMShsaW5lKzUsIHNoYTEpKSB7CiAJCQljYXNlIC0xOiAvKiB0aGV5IGhhdmUgd2hhdCB3ZSBkbyBub3QgKi8KQEAgLTUyMCw2ICs1MjEsMTAgQEAKIAl9CiAJaWYgKGRlYnVnX2ZkKQogCQl3cml0ZV9pbl9mdWxsKGRlYnVnX2ZkLCAiI0VcbiIsIDMpOworCisJaWYgKCF1c2Vfc2lkZWJhbmQgJiYgZGFlbW9uX21vZGUpCisJCW5vX3Byb2dyZXNzID0gMTsKKwogCWlmIChkZXB0aCA9PSAwICYmIHNoYWxsb3dzLm5yID09IDApCiAJCXJldHVybjsKIAlpZiAoZGVwdGggPiAwKSB7CkBAIC02MTYsNiArNjIxLDggQEAKIAlpbnQgaTsKIAlpbnQgc3RyaWN0ID0gMDsKIAorCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CisKIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CiAJCWNoYXIgKmFyZyA9IGFyZ3ZbaV07CiAKQEAgLTYyNyw2ICs2MzQsNyBAQAogCQl9CiAJCWlmICghcHJlZml4Y21wKGFyZywgIi0tdGltZW91dD0iKSkgewogCQkJdGltZW91dCA9IGF0b2koYXJnKzEwKTsKKwkJCWRhZW1vbl9tb2RlID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICghc3RyY21wKGFyZywgIi0tIikpIHsKQEAgLTY0Myw3ICs2NTEsNyBAQAogCWRpciA9IGFyZ3ZbaV07CiAKIAlpZiAoIWVudGVyX3JlcG8oZGlyLCBzdHJpY3QpKQotCQlkaWUoIiclcyc6IHVuYWJsZSB0byBjaGRpciBvciBub3QgYSBnaXQgYXJjaGl2ZSIsIGRpcik7CisJCWRpZSgiJyVzJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBnaXQgcmVwb3NpdG9yeSIsIGRpcik7CiAJaWYgKGlzX3JlcG9zaXRvcnlfc2hhbGxvdygpKQogCQlkaWUoImF0dGVtcHQgdG8gZmV0Y2gvY2xvbmUgZnJvbSBhIHNoYWxsb3cgcmVwb3NpdG9yeSIpOwogCWlmIChnZXRlbnYoIkdJVF9ERUJVR19TRU5EX1BBQ0siKSkKZGlmZiAtLWdpdCBhL3VzYWdlLmMgYi91c2FnZS5jCmluZGV4IDI0ZjVmYzAuLmI2YWVhNDUgMTAwNjQ0Ci0tLSBhL3VzYWdlLmMKKysrIGIvdXNhZ2UuYwpAQCAtNyw3ICs3LDcgQEAKIAogc3RhdGljIHZvaWQgcmVwb3J0KGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKIHsKLQljaGFyIG1zZ1syNTZdOworCWNoYXIgbXNnWzEwMjRdOwogCXZzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCBlcnIsIHBhcmFtcyk7CiAJZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBwcmVmaXgsIG1zZyk7CiB9CkBAIC02MCw2ICs2MCwzNCBAQAogCXZhX2VuZChwYXJhbXMpOwogfQogCit2b2lkIGRpZV9lcnJubyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKwljaGFyIGZtdF93aXRoX2VyclsxMDI0XTsKKwljaGFyIHN0cl9lcnJvclsyNTZdLCAqZXJyOworCWludCBpLCBqOworCisJZXJyID0gc3RyZXJyb3IoZXJybm8pOworCWZvciAoaSA9IGogPSAwOyBlcnJbaV0gJiYgaiA8IHNpemVvZihzdHJfZXJyb3IpIC0gMTsgKSB7CisJCWlmICgoc3RyX2Vycm9yW2orK10gPSBlcnJbaSsrXSkgIT0gJyUnKQorCQkJY29udGludWU7CisJCWlmIChqIDwgc2l6ZW9mKHN0cl9lcnJvcikgLSAxKSB7CisJCQlzdHJfZXJyb3JbaisrXSA9ICclJzsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vIHJvb20gdG8gZG91YmxlIHRoZSAnJScsIHNvIHdlIG92ZXJ3cml0ZSBpdCB3aXRoCisJCQkgKiAnXDAnIGJlbG93ICovCisJCQlqLS07CisJCQlicmVhazsKKwkJfQorCX0KKwlzdHJfZXJyb3Jbal0gPSAwOworCXNucHJpbnRmKGZtdF93aXRoX2Vyciwgc2l6ZW9mKGZtdF93aXRoX2VyciksICIlczogJXMiLCBmbXQsIHN0cl9lcnJvcik7CisKKwl2YV9zdGFydChwYXJhbXMsIGZtdCk7CisJZGllX3JvdXRpbmUoZm10X3dpdGhfZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCiBpbnQgZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pCiB7CiAJdmFfbGlzdCBwYXJhbXM7CmRpZmYgLS1naXQgYS91c2VyZGlmZi5jIGIvdXNlcmRpZmYuYwppbmRleCAzNjgxMDYyLi41NzUyOWFlIDEwMDY0NAotLS0gYS91c2VyZGlmZi5jCisrKyBiL3VzZXJkaWZmLmMKQEAgLTYsMzUgKzYsODIgQEAKIHN0YXRpYyBpbnQgbmRyaXZlcnM7CiBzdGF0aWMgaW50IGRyaXZlcnNfYWxsb2M7CiAKLSNkZWZpbmUgRlVOQ05BTUUobmFtZSwgcGF0dGVybikgXAotCXsgbmFtZSwgTlVMTCwgLTEsIHsgcGF0dGVybiwgUkVHX0VYVEVOREVEIH0gfQorI2RlZmluZSBQQVRURVJOUyhuYW1lLCBwYXR0ZXJuLCB3b3JkX3JlZ2V4KQkJCVwKKwl7IG5hbWUsIE5VTEwsIC0xLCB7IHBhdHRlcm4sIFJFR19FWFRFTkRFRCB9LCB3b3JkX3JlZ2V4IH0KIHN0YXRpYyBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyIGJ1aWx0aW5fZHJpdmVyc1tdID0gewotRlVOQ05BTUUoImh0bWwiLCAiXlsgXHRdKig8W0hoXVsxLTZdWyBcdF0uKj4uKikkIiksCi1GVU5DTkFNRSgiamF2YSIsCitQQVRURVJOUygiaHRtbCIsICJeWyBcdF0qKDxbSGhdWzEtNl1bIFx0XS4qPi4qKSQiLAorCSAiW148Pj0gXHRdK3xbXls6c3BhY2U6XV18W1x4ODAtXHhmZl0rIiksCitQQVRURVJOUygiamF2YSIsCiAJICIhXlsgXHRdKihjYXRjaHxkb3xmb3J8aWZ8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x3aGlsZSlcbiIKLQkgIl5bIFx0XSooKFsgXHRdKltBLVphLXpfXVtBLVphLXpfMC05XSopezIsfVsgXHRdKlxcKFteO10qKSQiKSwKLUZVTkNOQU1FKCJvYmpjIiwKKwkgIl5bIFx0XSooKFtBLVphLXpfXVtBLVphLXpfMC05XSpbIFx0XSspK1tBLVphLXpfXVtBLVphLXpfMC05XSpbIFx0XSpcXChbXjtdKikkIiwKKwkgLyogLS0gKi8KKwkgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8Wy0rMC05LmVdK1tmRmxMXT98MFt4WGJCXT9bMC05YS1mQS1GXStbbExdPyIKKwkgInxbLSsqLzw+JSZefD0hXT0iCisJICJ8LS18XFwrXFwrfDw8PT98Pj4+Pz0/fCYmfFxcfFxcfCIKKwkgInxbXls6c3BhY2U6XV18W1x4ODAtXHhmZl0rIiksCitQQVRURVJOUygib2JqYyIsCiAJIC8qIE5lZ2F0ZSBDIHN0YXRlbWVudHMgdGhhdCBjYW4gbG9vayBsaWtlIGZ1bmN0aW9ucyAqLwogCSAiIV5bIFx0XSooZG98Zm9yfGlmfGVsc2V8cmV0dXJufHN3aXRjaHx3aGlsZSlcbiIKIAkgLyogT2JqZWN0aXZlLUMgbWV0aG9kcyAqLwogCSAiXlsgXHRdKihbLStdWyBcdF0qXFwoWyBcdF0qW0EtWmEtel9dW0EtWmEtel8wLTkqIFx0XSpcXClbIFx0XSpbQS1aYS16X10uKikkXG4iCiAJIC8qIEMgZnVuY3Rpb25zICovCi0JICJeWyBcdF0qKChbIFx0XSpbQS1aYS16X11bQS1aYS16XzAtOV0qKXsyLH1bIFx0XSpcXChbXjtdKikkXG4iCisJICJeWyBcdF0qKChbQS1aYS16X11bQS1aYS16XzAtOV0qWyBcdF0rKStbQS1aYS16X11bQS1aYS16XzAtOV0qWyBcdF0qXFwoW147XSopJFxuIgogCSAvKiBPYmplY3RpdmUtQyBjbGFzcy9wcm90b2NvbCBkZWZpbml0aW9ucyAqLwotCSAiXihAKGltcGxlbWVudGF0aW9ufGludGVyZmFjZXxwcm90b2NvbClbIFx0XS4qKSQiKSwKLUZVTkNOQU1FKCJwYXNjYWwiLAorCSAiXihAKGltcGxlbWVudGF0aW9ufGludGVyZmFjZXxwcm90b2NvbClbIFx0XS4qKSQiLAorCSAvKiAtLSAqLworCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIKKwkgInxbLSswLTkuZV0rW2ZGbExdP3wwW3hYYkJdP1swLTlhLWZBLUZdK1tsTF0/IgorCSAifFstKyovPD4lJl58PSFdPXwtLXxcXCtcXCt8PDw9P3w+Pj0/fCYmfFxcfFxcfHw6OnwtPiIKKwkgInxbXls6c3BhY2U6XV18W1x4ODAtXHhmZl0rIiksCitQQVRURVJOUygicGFzY2FsIiwKIAkgIl4oKHByb2NlZHVyZXxmdW5jdGlvbnxjb25zdHJ1Y3RvcnxkZXN0cnVjdG9yfGludGVyZmFjZXwiCiAJCSJpbXBsZW1lbnRhdGlvbnxpbml0aWFsaXphdGlvbnxmaW5hbGl6YXRpb24pWyBcdF0qLiopJCIKIAkgIlxuIgotCSAiXiguKj1bIFx0XSooY2xhc3N8cmVjb3JkKS4qKSQiKSwKLUZVTkNOQU1FKCJwaHAiLCAiXltcdCBdKigoZnVuY3Rpb258Y2xhc3MpLiopIiksCi1GVU5DTkFNRSgicHl0aG9uIiwgIl5bIFx0XSooKGNsYXNzfGRlZilbIFx0XS4qKSQiKSwKLUZVTkNOQU1FKCJydWJ5IiwgIl5bIFx0XSooKGNsYXNzfG1vZHVsZXxkZWYpWyBcdF0uKikkIiksCi1GVU5DTkFNRSgiYmlidGV4IiwgIihAW2EtekEtWl17MSx9WyBcdF0qXFx7ezAsMX1bIFx0XSpbXiBcdFwiQCcsXFwjfXt+JV0qKS4qJCIpLAotRlVOQ05BTUUoInRleCIsICJeKFxcXFwoKHN1Yikqc2VjdGlvbnxjaGFwdGVyfHBhcnQpXFwqezAsMX1cXHsuKikkIiksCisJICJeKC4qPVsgXHRdKihjbGFzc3xyZWNvcmQpLiopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXSt8MFt4WGJCXT9bMC05YS1mQS1GXSsiCisJICJ8PD58PD18Pj18Oj18XFwuXFwuIgorCSAifFteWzpzcGFjZTpdXXxbXHg4MC1ceGZmXSsiKSwKK1BBVFRFUk5TKCJwaHAiLCAiXltcdCBdKigoZnVuY3Rpb258Y2xhc3MpLiopIiwKKwkgLyogLS0gKi8KKwkgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8Wy0rMC05LmVdK3wwW3hYYkJdP1swLTlhLWZBLUZdKyIKKwkgInxbLSsqLzw+JSZefD0hLl09fC0tfFxcK1xcK3w8PD0/fD4+PT98PT09fCYmfFxcfFxcfHw6OnwtPiIKKwkgInxbXls6c3BhY2U6XV18W1x4ODAtXHhmZl0rIiksCitQQVRURVJOUygicHl0aG9uIiwgIl5bIFx0XSooKGNsYXNzfGRlZilbIFx0XS4qKSQiLAorCSAvKiAtLSAqLworCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIKKwkgInxbLSswLTkuZV0rW2pKbExdP3wwW3hYXT9bMC05YS1mQS1GXStbbExdPyIKKwkgInxbLSsqLzw+JSZefD0hXT18Ly89P3w8PD0/fD4+PT98XFwqXFwqPT8iCisJICJ8W15bOnNwYWNlOl18W1x4ODAtXHhmZl0rIiksCisJIC8qIC0tICovCitQQVRURVJOUygicnVieSIsICJeWyBcdF0qKChjbGFzc3xtb2R1bGV8ZGVmKVsgXHRdLiopJCIsCisJIC8qIC0tICovCisJICIoQHxAQHxcXCQpP1thLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8Wy0rMC05LmVdK3wwW3hYYkJdP1swLTlhLWZBLUZdK3xcXD8oXFxcXEMtKT8oXFxcXE0tKT8uIgorCSAifC8vPT98Wy0rKi88PiUmXnw9IV09fDw8PT98Pj49P3w9PT18XFwuezEsM318Ojp8WyE9XX4iCisJICJ8W15bOnNwYWNlOl18W1x4ODAtXHhmZl0rIiksCitQQVRURVJOUygiYmlidGV4IiwgIihAW2EtekEtWl17MSx9WyBcdF0qXFx7ezAsMX1bIFx0XSpbXiBcdFwiQCcsXFwjfXt+JV0qKS4qJCIsCisJICJbPXt9XCJdfFtePXt9XCIgXHRdKyIpLAorUEFUVEVSTlMoInRleCIsICJeKFxcXFwoKHN1Yikqc2VjdGlvbnxjaGFwdGVyfHBhcnQpXFwqezAsMX1cXHsuKikkIiwKKwkgIlxcXFxbYS16QS1aQF0rfFxcXFwufFthLXpBLVowLTlceDgwLVx4ZmZdK3xbXls6c3BhY2U6XV0iKSwKK1BBVFRFUk5TKCJjcHAiLAorCSAvKiBKdW1wIHRhcmdldHMgb3IgYWNjZXNzIGRlY2xhcmF0aW9ucyAqLworCSAiIV5bIFx0XSpbQS1aYS16X11bQS1aYS16XzAtOV0qOi4qJFxuIgorCSAvKiBDLysrIGZ1bmN0aW9ucy9tZXRob2RzIGF0IHRvcCBsZXZlbCAqLworCSAiXihbQS1aYS16X11bQS1aYS16XzAtOV0qKFsgXHRdK1tBLVphLXpfXVtBLVphLXpfMC05XSooWyBcdF0qOjpbIFx0XSpbXls6c3BhY2U6XV0rKT8pezEsfVsgXHRdKlxcKFteO10qKSRcbiIKKwkgLyogY29tcG91bmQgdHlwZSBhdCB0b3AgbGV2ZWwgKi8KKwkgIl4oKHN0cnVjdHxjbGFzc3xlbnVtKVteO10qKSQiLAorCSAvKiAtLSAqLworCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIKKwkgInxbLSswLTkuZV0rW2ZGbExdP3wwW3hYYkJdP1swLTlhLWZBLUZdK1tsTF0/IgorCSAifFstKyovPD4lJl58PSFdPXwtLXxcXCtcXCt8PDw9P3w+Pj0/fCYmfFxcfFxcfHw6OnwtPiIKKwkgInxbXls6c3BhY2U6XV18W1x4ODAtXHhmZl0rIiksCiB7ICJkZWZhdWx0IiwgTlVMTCwgLTEsIHsgTlVMTCwgMCB9IH0sCiB9OwotI3VuZGVmIEZVTkNOQU1FCisjdW5kZWYgUEFUVEVSTlMKIAogc3RhdGljIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgZHJpdmVyX3RydWUgPSB7CiAJImRpZmY9dHJ1ZSIsCkBAIC0xMzQsNiArMTgxLDggQEAKIAkJcmV0dXJuIHBhcnNlX3N0cmluZygmZHJ2LT5leHRlcm5hbCwgaywgdik7CiAJaWYgKChkcnYgPSBwYXJzZV9kcml2ZXIoaywgdiwgInRleHRjb252IikpKQogCQlyZXR1cm4gcGFyc2Vfc3RyaW5nKCZkcnYtPnRleHRjb252LCBrLCB2KTsKKwlpZiAoKGRydiA9IHBhcnNlX2RyaXZlcihrLCB2LCAid29yZHJlZ2V4IikpKQorCQlyZXR1cm4gcGFyc2Vfc3RyaW5nKCZkcnYtPndvcmRfcmVnZXgsIGssIHYpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS91c2VyZGlmZi5oIGIvdXNlcmRpZmYuaAppbmRleCBiYTI5NDU3Li5jMzE1MTU5IDEwMDY0NAotLS0gYS91c2VyZGlmZi5oCisrKyBiL3VzZXJkaWZmLmgKQEAgLTExLDYgKzExLDcgQEAKIAljb25zdCBjaGFyICpleHRlcm5hbDsKIAlpbnQgYmluYXJ5OwogCXN0cnVjdCB1c2VyZGlmZl9mdW5jbmFtZSBmdW5jbmFtZTsKKwljb25zdCBjaGFyICp3b3JkX3JlZ2V4OwogCWNvbnN0IGNoYXIgKnRleHRjb252OwogfTsKIApkaWZmIC0tZ2l0IGEvdXRmOC5jIGIvdXRmOC5jCmluZGV4IGRkZmRjNWUuLmRiNzA2YWMgMTAwNjQ0Ci0tLSBhL3V0ZjguYworKysgYi91dGY4LmMKQEAgLTM1NCw3ICszNTQsNyBAQAogICogd2l0aCBpY29udi4gIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCByZXR1cm5zIE5VTEwuCiAgKi8KICNpZm5kZWYgTk9fSUNPTlYKLSNpZmRlZiBPTERfSUNPTlYKKyNpZiBkZWZpbmVkKE9MRF9JQ09OVikgfHwgKGRlZmluZWQoX19zdW5fXykgJiYgIWRlZmluZWQoX1hQRzYpKQogCXR5cGVkZWYgY29uc3QgY2hhciAqIGljb252X2licDsKICNlbHNlCiAJdHlwZWRlZiBjaGFyICogaWNvbnZfaWJwOwpkaWZmIC0tZ2l0IGEvdmFyLmMgYi92YXIuYwppbmRleCBmMWViMzE0Li43MzYyZWQ4IDEwMDY0NAotLS0gYS92YXIuYworKysgYi92YXIuYwpAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgRXJpYyBCaWVkZXJtYW4sIDIwMDUKICAqLwogI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgdmFyX3VzYWdlW10gPSAiZ2l0IHZhciBbLWwgfCA8dmFyaWFibGU+XSI7CiAKQEAgLTU2LDYgKzU3LDggQEAKIAkJdXNhZ2UodmFyX3VzYWdlKTsKIAl9CiAKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCiAJc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdCk7CiAJdmFsID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvd2Fsa2VyLmMgYi93YWxrZXIuYwppbmRleCA2NzlhZGFiLi4xMWQ5MDUyIDEwMDY0NAotLS0gYS93YWxrZXIuYworKysgYi93YWxrZXIuYwpAQCAtMTgsNyArMTgsNyBAQAogc3RhdGljIHZvaWQgcmVwb3J0X21pc3NpbmcoY29uc3Qgc3RydWN0IG9iamVjdCAqb2JqKQogewogCWNoYXIgbWlzc2luZ19oZXhbNDFdOwotCXN0cmNweShtaXNzaW5nX2hleCwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7OworCXN0cmNweShtaXNzaW5nX2hleCwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CiAJZnByaW50ZihzdGRlcnIsICJDYW5ub3Qgb2J0YWluIG5lZWRlZCAlcyAlc1xuIiwKIAkJb2JqLT50eXBlID8gdHlwZW5hbWUob2JqLT50eXBlKTogIm9iamVjdCIsIG1pc3NpbmdfaGV4KTsKIAlpZiAoIWlzX251bGxfc2hhMShjdXJyZW50X2NvbW1pdF9zaGExKSkKQEAgLTI0NSw3ICsyNDUsNyBAQAogewogCXdoaWxlICh0YXJnZXRzLS0pIHsKIAkJZnJlZSh0YXJnZXRbdGFyZ2V0c10pOwotCQlpZiAod3JpdGVfcmVmICYmIHdyaXRlX3JlZlt0YXJnZXRzXSkKKwkJaWYgKHdyaXRlX3JlZikKIAkJCWZyZWUoKGNoYXIgKikgd3JpdGVfcmVmW3RhcmdldHNdKTsKIAl9CiB9CmRpZmYgLS1naXQgYS93cmFwcGVyLmMgYi93cmFwcGVyLmMKaW5kZXggZDhlZmIxMy4uYzliZTE0MCAxMDA2NDQKLS0tIGEvd3JhcHBlci5jCisrKyBiL3dyYXBwZXIuYwpAQCAtOTYsNyArOTYsNyBAQAogCQlyZWxlYXNlX3BhY2tfbWVtb3J5KGxlbmd0aCwgZmQpOwogCQlyZXQgPSBtbWFwKHN0YXJ0LCBsZW5ndGgsIHByb3QsIGZsYWdzLCBmZCwgb2Zmc2V0KTsKIAkJaWYgKHJldCA9PSBNQVBfRkFJTEVEKQotCQkJZGllKCJPdXQgb2YgbWVtb3J5PyBtbWFwIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZGllX2Vycm5vKCJPdXQgb2YgbWVtb3J5PyBtbWFwIGZhaWxlZCIpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTc1LDcgKzE3NSw3IEBACiB7CiAJaW50IHJldCA9IGR1cChmZCk7CiAJaWYgKHJldCA8IDApCi0JCWRpZSgiZHVwIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oImR1cCBmYWlsZWQiKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xODMsNyArMTgzLDcgQEAKIHsKIAlGSUxFICpzdHJlYW0gPSBmZG9wZW4oZmQsIG1vZGUpOwogCWlmIChzdHJlYW0gPT0gTlVMTCkKLQkJZGllKCJPdXQgb2YgbWVtb3J5PyBmZG9wZW4gZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiT3V0IG9mIG1lbW9yeT8gZmRvcGVuIGZhaWxlZCIpOwogCXJldHVybiBzdHJlYW07CiB9CiAKQEAgLTE5Myw3ICsxOTMsNyBAQAogCiAJZmQgPSBta3N0ZW1wKHRlbXBsYXRlKTsKIAlpZiAoZmQgPCAwKQotCQlkaWUoIlVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJVbmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIik7CiAJcmV0dXJuIGZkOwogfQogCkBAIC0yODksMyArMjg5LDE5IEBACiAJc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhuYW1lKTsKIAlyZXR1cm4gb3BlbihuYW1lLCBPX1JEV1J8T19DUkVBVHxPX0VYQ0wsIDA2MDApOwogfQorCitpbnQgdW5saW5rX29yX3dhcm4oY29uc3QgY2hhciAqZmlsZSkKK3sKKwlpbnQgcmMgPSB1bmxpbmsoZmlsZSk7CisKKwlpZiAocmMgPCAwKSB7CisJCWludCBlcnIgPSBlcnJubzsKKwkJaWYgKEVOT0VOVCAhPSBlcnIpIHsKKwkJCXdhcm5pbmcoInVuYWJsZSB0byB1bmxpbmsgJXM6ICVzIiwKKwkJCQlmaWxlLCBzdHJlcnJvcihlcnJubykpOworCQkJZXJybm8gPSBlcnI7CisJCX0KKwl9CisJcmV0dXJuIHJjOworfQorCmRpZmYgLS1naXQgYS93cml0ZV9vcl9kaWUuYyBiL3dyaXRlX29yX2RpZS5jCmluZGV4IDRjMjkyNTUuLmQ0NWI1MzYgMTAwNjQ0Ci0tLSBhL3dyaXRlX29yX2RpZS5jCisrKyBiL3dyaXRlX29yX2RpZS5jCkBAIC00MSwxNCArNDEsMTQgQEAKIAkJICovCiAJCWlmIChlcnJubyA9PSBFUElQRSB8fCBlcnJubyA9PSBFSU5WQUwpCiAJCQlleGl0KDApOwotCQlkaWUoIndyaXRlIGZhaWx1cmUgb24gJXM6ICVzIiwgZGVzYywgc3RyZXJyb3IoZXJybm8pKTsKKwkJZGllX2Vycm5vKCJ3cml0ZSBmYWlsdXJlIG9uICclcyciLCBkZXNjKTsKIAl9CiB9CiAKIHZvaWQgZnN5bmNfb3JfZGllKGludCBmZCwgY29uc3QgY2hhciAqbXNnKQogewogCWlmIChmc3luYyhmZCkgPCAwKSB7Ci0JCWRpZSgiJXM6IGZzeW5jIGVycm9yICglcykiLCBtc2csIHN0cmVycm9yKGVycm5vKSk7CisJCWRpZV9lcnJubygiZnN5bmMgZXJyb3Igb24gJyVzJyIsIG1zZyk7CiAJfQogfQogCkBAIC01Nyw3ICs1Nyw3IEBACiAJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1ZiwgY291bnQpIDwgMCkgewogCQlpZiAoZXJybm8gPT0gRVBJUEUpCiAJCQlleGl0KDApOwotCQlkaWUoIndyaXRlIGVycm9yICglcykiLCBzdHJlcnJvcihlcnJubykpOworCQlkaWVfZXJybm8oIndyaXRlIGVycm9yIik7CiAJfQogfQogCmRpZmYgLS1naXQgYS93cy5jIGIvd3MuYwppbmRleCBiMWVmY2Q5Li41OWQwODgzIDEwMDY0NAotLS0gYS93cy5jCisrKyBiL3dzLmMKQEAgLTEwLDExICsxMCwxMiBAQAogc3RhdGljIHN0cnVjdCB3aGl0ZXNwYWNlX3J1bGUgewogCWNvbnN0IGNoYXIgKnJ1bGVfbmFtZTsKIAl1bnNpZ25lZCBydWxlX2JpdHM7CisJdW5zaWduZWQgbG9vc2Vuc19lcnJvcjsKIH0gd2hpdGVzcGFjZV9ydWxlX25hbWVzW10gPSB7Ci0JeyAidHJhaWxpbmctc3BhY2UiLCBXU19UUkFJTElOR19TUEFDRSB9LAotCXsgInNwYWNlLWJlZm9yZS10YWIiLCBXU19TUEFDRV9CRUZPUkVfVEFCIH0sCi0JeyAiaW5kZW50LXdpdGgtbm9uLXRhYiIsIFdTX0lOREVOVF9XSVRIX05PTl9UQUIgfSwKLQl7ICJjci1hdC1lb2wiLCBXU19DUl9BVF9FT0wgfSwKKwl7ICJ0cmFpbGluZy1zcGFjZSIsIFdTX1RSQUlMSU5HX1NQQUNFLCAwIH0sCisJeyAic3BhY2UtYmVmb3JlLXRhYiIsIFdTX1NQQUNFX0JFRk9SRV9UQUIsIDAgfSwKKwl7ICJpbmRlbnQtd2l0aC1ub24tdGFiIiwgV1NfSU5ERU5UX1dJVEhfTk9OX1RBQiwgMCB9LAorCXsgImNyLWF0LWVvbCIsIFdTX0NSX0FUX0VPTCwgMSB9LAogfTsKIAogdW5zaWduZWQgcGFyc2Vfd2hpdGVzcGFjZV9ydWxlKGNvbnN0IGNoYXIgKnN0cmluZykKQEAgLTc5LDcgKzgwLDggQEAKIAkJCXVuc2lnbmVkIGFsbF9ydWxlID0gMDsKIAkJCWludCBpOwogCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2hpdGVzcGFjZV9ydWxlX25hbWVzKTsgaSsrKQotCQkJCWFsbF9ydWxlIHw9IHdoaXRlc3BhY2VfcnVsZV9uYW1lc1tpXS5ydWxlX2JpdHM7CisJCQkJaWYgKCF3aGl0ZXNwYWNlX3J1bGVfbmFtZXNbaV0ubG9vc2Vuc19lcnJvcikKKwkJCQkJYWxsX3J1bGUgfD0gd2hpdGVzcGFjZV9ydWxlX25hbWVzW2ldLnJ1bGVfYml0czsKIAkJCXJldHVybiBhbGxfcnVsZTsKIAkJfSBlbHNlIGlmIChBVFRSX0ZBTFNFKHZhbHVlKSkgewogCQkJLyogZmFsc2UgKC13aGl0ZXNwYWNlKSAqLwpAQCAtMjU5LDEyICsyNjEsMTEgQEAKIAkvKgogCSAqIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UKIAkgKi8KLQlpZiAoKHdzX3J1bGUgJiBXU19UUkFJTElOR19TUEFDRSkgJiYKLQkgICAgKDIgPD0gbGVuICYmIGlzc3BhY2Uoc3JjW2xlbi0yXSkpKSB7Ci0JCWlmIChzcmNbbGVuIC0gMV0gPT0gJ1xuJykgeworCWlmICh3c19ydWxlICYgV1NfVFJBSUxJTkdfU1BBQ0UpIHsKKwkJaWYgKDAgPCBsZW4gJiYgc3JjW2xlbiAtIDFdID09ICdcbicpIHsKIAkJCWFkZF9ubF90b190YWlsID0gMTsKIAkJCWxlbi0tOwotCQkJaWYgKDEgPCBsZW4gJiYgc3JjW2xlbiAtIDFdID09ICdccicpIHsKKwkJCWlmICgwIDwgbGVuICYmIHNyY1tsZW4gLSAxXSA9PSAnXHInKSB7CiAJCQkJYWRkX2NyX3RvX3RhaWwgPSAhISh3c19ydWxlICYgV1NfQ1JfQVRfRU9MKTsKIAkJCQlsZW4tLTsKIAkJCX0KZGlmZiAtLWdpdCBhL3d0LXN0YXR1cy5jIGIvd3Qtc3RhdHVzLmMKaW5kZXggOTZmZjJmOC4uNDc3MzVkOCAxMDA2NDQKLS0tIGEvd3Qtc3RhdHVzLmMKKysrIGIvd3Qtc3RhdHVzLmMKQEAgLTEzLDEzICsxMywxMyBAQAogCiBpbnQgd3Rfc3RhdHVzX3JlbGF0aXZlX3BhdGhzID0gMTsKIGludCB3dF9zdGF0dXNfdXNlX2NvbG9yID0gLTE7Ci1pbnQgd3Rfc3RhdHVzX3N1Ym1vZHVsZV9zdW1tYXJ5Oworc3RhdGljIGludCB3dF9zdGF0dXNfc3VibW9kdWxlX3N1bW1hcnk7CiBzdGF0aWMgY2hhciB3dF9zdGF0dXNfY29sb3JzW11bQ09MT1JfTUFYTEVOXSA9IHsKLQkiIiwgICAgICAgICAvKiBXVF9TVEFUVVNfSEVBREVSOiBub3JtYWwgKi8KLQkiXDAzM1szMm0iLCAvKiBXVF9TVEFUVVNfVVBEQVRFRDogZ3JlZW4gKi8KLQkiXDAzM1szMW0iLCAvKiBXVF9TVEFUVVNfQ0hBTkdFRDogcmVkICovCi0JIlwwMzNbMzFtIiwgLyogV1RfU1RBVFVTX1VOVFJBQ0tFRDogcmVkICovCi0JIlwwMzNbMzFtIiwgLyogV1RfU1RBVFVTX05PQlJBTkNIOiByZWQgKi8KKwlHSVRfQ09MT1JfTk9STUFMLCAvKiBXVF9TVEFUVVNfSEVBREVSICovCisJR0lUX0NPTE9SX0dSRUVOLCAgLyogV1RfU1RBVFVTX1VQREFURUQgKi8KKwlHSVRfQ09MT1JfUkVELCAgICAvKiBXVF9TVEFUVVNfQ0hBTkdFRCAqLworCUdJVF9DT0xPUl9SRUQsICAgIC8qIFdUX1NUQVRVU19VTlRSQUNLRUQgKi8KKwlHSVRfQ09MT1JfUkVELCAgICAvKiBXVF9TVEFUVVNfTk9CUkFOQ0ggKi8KIH07CiAKIGVudW0gdW50cmFja2VkX3N0YXR1c190eXBlIHNob3dfdW50cmFja2VkX2ZpbGVzID0gU0hPV19OT1JNQUxfVU5UUkFDS0VEX0ZJTEVTOwpAQCAtNDAsNyArNDAsNyBAQAogCWRpZSgiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIiwgdmFyKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbG9yKGludCBzbG90KQorc3RhdGljIGNvbnN0IGNoYXIgKmNvbG9yKGludCBzbG90KQogewogCXJldHVybiB3dF9zdGF0dXNfdXNlX2NvbG9yID4gMCA/IHd0X3N0YXR1c19jb2xvcnNbc2xvdF0gOiAiIjsKIH0KQEAgLTI1MCwxMyArMjUwLDEyIEBACiAKIAltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOwogCi0JaWYgKCFzLT51bnRyYWNrZWQpIHsKLQkJZGlyLnNob3dfb3RoZXJfZGlyZWN0b3JpZXMgPSAxOwotCQlkaXIuaGlkZV9lbXB0eV9kaXJlY3RvcmllcyA9IDE7Ci0JfQorCWlmICghcy0+dW50cmFja2VkKQorCQlkaXIuZmxhZ3MgfD0KKwkJCURJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTIHwgRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVM7CiAJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoJmRpcik7CiAKLQlyZWFkX2RpcmVjdG9yeSgmZGlyLCAiLiIsICIiLCAwLCBOVUxMKTsKKwlmaWxsX2RpcmVjdG9yeSgmZGlyLCBOVUxMKTsKIAlmb3IoaSA9IDA7IGkgPCBkaXIubnI7IGkrKykgewogCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuZW50cmllc1tpXTsKIAkJaWYgKCFjYWNoZV9uYW1lX2lzX290aGVyKGVudC0+bmFtZSwgZW50LT5sZW4pKQpkaWZmIC0tZ2l0IGEveGRpZmYtaW50ZXJmYWNlLmMgYi94ZGlmZi1pbnRlcmZhY2UuYwppbmRleCBkNzgyZjA2Li4wMWYxNGZiIDEwMDY0NAotLS0gYS94ZGlmZi1pbnRlcmZhY2UuYworKysgYi94ZGlmZi1pbnRlcmZhY2UuYwpAQCAtMTUsMTEgKzE1LDEwIEBACiB7CiAJY2hhciAqY3AgPSAqY3BfcDsKIAlpbnQgbnVtID0gMDsKLQlpbnQgcmVhZF9zb21lOwogCiAJd2hpbGUgKCcwJyA8PSAqY3AgJiYgKmNwIDw9ICc5JykKIAkJbnVtID0gbnVtICogMTAgKyAqY3ArKyAtICcwJzsKLQlpZiAoIShyZWFkX3NvbWUgPSBjcCAtICpjcF9wKSkKKwlpZiAoIShjcCAtICpjcF9wKSkKIAkJcmV0dXJuIC0xOwogCSpjcF9wID0gY3A7CiAJKm51bV9wID0gbnVtOwpAQCAtMzEwLDYgKzMwOSwyMSBAQAogCX0KIH0KIAordm9pZCB4ZGlmZl9jbGVhcl9maW5kX2Z1bmMoeGRlbWl0Y29uZl90ICp4ZWNmZykKK3sKKwlpZiAoeGVjZmctPmZpbmRfZnVuYykgeworCQlpbnQgaTsKKwkJc3RydWN0IGZmX3JlZ3MgKnJlZ3MgPSB4ZWNmZy0+ZmluZF9mdW5jX3ByaXY7CisKKwkJZm9yIChpID0gMDsgaSA8IHJlZ3MtPm5yOyBpKyspCisJCQlyZWdmcmVlKCZyZWdzLT5hcnJheVtpXS5yZSk7CisJCWZyZWUocmVncy0+YXJyYXkpOworCQlmcmVlKHJlZ3MpOworCQl4ZWNmZy0+ZmluZF9mdW5jID0gTlVMTDsKKwkJeGVjZmctPmZpbmRfZnVuY19wcml2ID0gTlVMTDsKKwl9Cit9CisKIGludCBnaXRfeG1lcmdlX3N0eWxlID0gLTE7CiAKIGludCBnaXRfeG1lcmdlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKZGlmZiAtLWdpdCBhL3hkaWZmLWludGVyZmFjZS5oIGIveGRpZmYtaW50ZXJmYWNlLmgKaW5kZXggNzM1MmI5YS4uNTU1NzJjMyAxMDA2NDQKLS0tIGEveGRpZmYtaW50ZXJmYWNlLmgKKysrIGIveGRpZmYtaW50ZXJmYWNlLmgKQEAgLTIxLDYgKzIxLDcgQEAKIGludCBidWZmZXJfaXNfYmluYXJ5KGNvbnN0IGNoYXIgKnB0ciwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAogZXh0ZXJuIHZvaWQgeGRpZmZfc2V0X2ZpbmRfZnVuYyh4ZGVtaXRjb25mX3QgKnhlY2ZnLCBjb25zdCBjaGFyICpsaW5lLCBpbnQgY2ZsYWdzKTsKK2V4dGVybiB2b2lkIHhkaWZmX2NsZWFyX2ZpbmRfZnVuYyh4ZGVtaXRjb25mX3QgKnhlY2ZnKTsKIGV4dGVybiBpbnQgZ2l0X3htZXJnZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOwogZXh0ZXJuIGludCBnaXRfeG1lcmdlX3N0eWxlOwogCmRpZmYgLS1naXQgYS94ZGlmZi94ZGlmZi5oIGIveGRpZmYveGRpZmYuaAppbmRleCA4NGZmZjU4Li40ZGEwNTJhIDEwMDY0NAotLS0gYS94ZGlmZi94ZGlmZi5oCisrKyBiL3hkaWZmL3hkaWZmLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgWERGX0lHTk9SRV9XSElURVNQQUNFICgxIDw8IDIpCiAjZGVmaW5lIFhERl9JR05PUkVfV0hJVEVTUEFDRV9DSEFOR0UgKDEgPDwgMykKICNkZWZpbmUgWERGX0lHTk9SRV9XSElURVNQQUNFX0FUX0VPTCAoMSA8PCA0KQorI2RlZmluZSBYREZfUEFUSUVOQ0VfRElGRiAoMSA8PCA1KQogI2RlZmluZSBYREZfV0hJVEVTUEFDRV9GTEFHUyAoWERGX0lHTk9SRV9XSElURVNQQUNFIHwgWERGX0lHTk9SRV9XSElURVNQQUNFX0NIQU5HRSB8IFhERl9JR05PUkVfV0hJVEVTUEFDRV9BVF9FT0wpCiAKICNkZWZpbmUgWERMX1BBVENIX05PUk1BTCAnLScKQEAgLTg0LDYgKzg1LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3Qgc194ZGVtaXRjb25mIHsKIAlsb25nIGN0eGxlbjsKKwlsb25nIGludGVyaHVua2N0eGxlbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWZpbmRfZnVuY190IGZpbmRfZnVuYzsKIAl2b2lkICpmaW5kX2Z1bmNfcHJpdjsKZGlmZiAtLWdpdCBhL3hkaWZmL3hkaWZmaS5jIGIveGRpZmYveGRpZmZpLmMKaW5kZXggOWQwMzI0YS4uZGE2N2MwNCAxMDA2NDQKLS0tIGEveGRpZmYveGRpZmZpLmMKKysrIGIveGRpZmYveGRpZmZpLmMKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2RlZmluZSBYRExfTUFYX0NPU1RfTUlOIDI1NgogI2RlZmluZSBYRExfSEVVUl9NSU5fQ09TVCAyNTYKLSNkZWZpbmUgWERMX0xJTkVfTUFYIChsb25nKSgoMVVMIDw8ICg4ICogc2l6ZW9mKGxvbmcpIC0gMSkpIC0gMSkKKyNkZWZpbmUgWERMX0xJTkVfTUFYIChsb25nKSgoMVVMIDw8IChDSEFSX0JJVCAqIHNpemVvZihsb25nKSAtIDEpKSAtIDEpCiAjZGVmaW5lIFhETF9TTkFLRV9DTlQgMjAKICNkZWZpbmUgWERMX0tfSEVVUiA0CiAKQEAgLTI5MywxNSArMjkzLDE0IEBACiAJCWZvciAoOyBvZmYxIDwgbGltMTsgb2ZmMSsrKQogCQkJcmNoZzFbcmluZGV4MVtvZmYxXV0gPSAxOwogCX0gZWxzZSB7Ci0JCWxvbmcgZWM7CiAJCXhkcHNwbGl0X3Qgc3BsOwogCQlzcGwuaTEgPSBzcGwuaTIgPSAwOwogCiAJCS8qCiAJCSAqIERpdmlkZSAuLi4KIAkJICovCi0JCWlmICgoZWMgPSB4ZGxfc3BsaXQoaGExLCBvZmYxLCBsaW0xLCBoYTIsIG9mZjIsIGxpbTIsIGt2ZGYsIGt2ZGIsCi0JCQkJICAgIG5lZWRfbWluLCAmc3BsLCB4ZW52KSkgPCAwKSB7CisJCWlmICh4ZGxfc3BsaXQoaGExLCBvZmYxLCBsaW0xLCBoYTIsIG9mZjIsIGxpbTIsIGt2ZGYsIGt2ZGIsCisJCQkgICAgICBuZWVkX21pbiwgJnNwbCwgeGVudikgPCAwKSB7CiAKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMzI5LDYgKzMyOCw5IEBACiAJeGRhbGdvZW52X3QgeGVudjsKIAlkaWZmZGF0YV90IGRkMSwgZGQyOwogCisJaWYgKHhwcC0+ZmxhZ3MgJiBYREZfUEFUSUVOQ0VfRElGRikKKwkJcmV0dXJuIHhkbF9kb19wYXRpZW5jZV9kaWZmKG1mMSwgbWYyLCB4cHAsIHhlKTsKKwogCWlmICh4ZGxfcHJlcGFyZV9lbnYobWYxLCBtZjIsIHhwcCwgeGUpIDwgMCkgewogCiAJCXJldHVybiAtMTsKQEAgLTQ1NCw3ICs0NTYsNyBAQAogCQkJLyoKIAkJCSAqIFJlY29yZCB0aGUgZW5kLW9mLWdyb3VwIHBvc2l0aW9uIGluIGNhc2Ugd2UgYXJlIG1hdGNoZWQKIAkJCSAqIHdpdGggYSBncm91cCBvZiBjaGFuZ2VzIGluIHRoZSBvdGhlciBmaWxlICh0aGF0IGlzLCB0aGUKLQkJCSAqIGNoYW5nZSByZWNvcmQgYmVmb3JlIHRoZSBlbmYtb2YtZ3JvdXAgaW5kZXggaW4gdGhlIG90aGVyCisJCQkgKiBjaGFuZ2UgcmVjb3JkIGJlZm9yZSB0aGUgZW5kLW9mLWdyb3VwIGluZGV4IGluIHRoZSBvdGhlcgogCQkJICogZmlsZSBpcyBzZXQpLgogCQkJICovCiAJCQlpeHJlZiA9IHJjaGdvW2l4byAtIDFdID8gaXg6IG5yZWM7CmRpZmYgLS1naXQgYS94ZGlmZi94ZGlmZmkuaCBiL3hkaWZmL3hkaWZmaS5oCmluZGV4IDNlMDk5ZGMuLmFkMDMzYTggMTAwNjQ0Ci0tLSBhL3hkaWZmL3hkaWZmaS5oCisrKyBiL3hkaWZmL3hkaWZmaS5oCkBAIC01NSw1ICs1NSw3IEBACiB2b2lkIHhkbF9mcmVlX3NjcmlwdCh4ZGNoYW5nZV90ICp4c2NyKTsKIGludCB4ZGxfZW1pdF9kaWZmKHhkZmVudl90ICp4ZSwgeGRjaGFuZ2VfdCAqeHNjciwgeGRlbWl0Y2JfdCAqZWNiLAogCQkgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpOworaW50IHhkbF9kb19wYXRpZW5jZV9kaWZmKG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQl4ZGZlbnZfdCAqZW52KTsKIAogI2VuZGlmIC8qICNpZiAhZGVmaW5lZChYRElGRklfSCkgKi8KZGlmZiAtLWdpdCBhL3hkaWZmL3hlbWl0LmMgYi94ZGlmZi94ZW1pdC5jCmluZGV4IDQ2MjVjMWIuLmM0YmVkZjAgMTAwNjQ0Ci0tLSBhL3hkaWZmL3hlbWl0LmMKKysrIGIveGRpZmYveGVtaXQuYwpAQCAtNTksOSArNTksMTAgQEAKICAqLwogeGRjaGFuZ2VfdCAqeGRsX2dldF9odW5rKHhkY2hhbmdlX3QgKnhzY3IsIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpIHsKIAl4ZGNoYW5nZV90ICp4Y2gsICp4Y2hwOworCWxvbmcgbWF4X2NvbW1vbiA9IDIgKiB4ZWNmZy0+Y3R4bGVuICsgeGVjZmctPmludGVyaHVua2N0eGxlbjsKIAogCWZvciAoeGNocCA9IHhzY3IsIHhjaCA9IHhzY3ItPm5leHQ7IHhjaDsgeGNocCA9IHhjaCwgeGNoID0geGNoLT5uZXh0KQotCQlpZiAoeGNoLT5pMSAtICh4Y2hwLT5pMSArIHhjaHAtPmNoZzEpID4gMiAqIHhlY2ZnLT5jdHhsZW4pCisJCWlmICh4Y2gtPmkxIC0gKHhjaHAtPmkxICsgeGNocC0+Y2hnMSkgPiBtYXhfY29tbW9uKQogCQkJYnJlYWs7CiAKIAlyZXR1cm4geGNocDsKQEAgLTEzMSw3ICsxMzIsNyBAQAogCWlmICh4ZWNmZy0+ZmxhZ3MgJiBYRExfRU1JVF9DT01NT04pCiAJCXJldHVybiB4ZGxfZW1pdF9jb21tb24oeGUsIHhzY3IsIGVjYiwgeGVjZmcpOwogCi0JZm9yICh4Y2ggPSB4Y2hlID0geHNjcjsgeGNoOyB4Y2ggPSB4Y2hlLT5uZXh0KSB7CisJZm9yICh4Y2ggPSB4c2NyOyB4Y2g7IHhjaCA9IHhjaGUtPm5leHQpIHsKIAkJeGNoZSA9IHhkbF9nZXRfaHVuayh4Y2gsIHhlY2ZnKTsKIAogCQlzMSA9IFhETF9NQVgoeGNoLT5pMSAtIHhlY2ZnLT5jdHhsZW4sIDApOwpkaWZmIC0tZ2l0IGEveGRpZmYveG1lcmdlLmMgYi94ZGlmZi94bWVyZ2UuYwppbmRleCBkOTczN2YwLi4xY2I2NWE5IDEwMDY0NAotLS0gYS94ZGlmZi94bWVyZ2UuYworKysgYi94ZGlmZi94bWVyZ2UuYwpAQCAtNTYzLDIzICs1NjMsMjIgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAlzdGF0dXMgPSAwOwotCWlmICh4c2NyMSB8fCB4c2NyMikgewotCQlpZiAoIXhzY3IxKSB7Ci0JCQlyZXN1bHQtPnB0ciA9IHhkbF9tYWxsb2MobWYyLT5zaXplKTsKLQkJCW1lbWNweShyZXN1bHQtPnB0ciwgbWYyLT5wdHIsIG1mMi0+c2l6ZSk7Ci0JCQlyZXN1bHQtPnNpemUgPSBtZjItPnNpemU7Ci0JCX0gZWxzZSBpZiAoIXhzY3IyKSB7Ci0JCQlyZXN1bHQtPnB0ciA9IHhkbF9tYWxsb2MobWYxLT5zaXplKTsKLQkJCW1lbWNweShyZXN1bHQtPnB0ciwgbWYxLT5wdHIsIG1mMS0+c2l6ZSk7Ci0JCQlyZXN1bHQtPnNpemUgPSBtZjEtPnNpemU7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSB4ZGxfZG9fbWVyZ2UoJnhlMSwgeHNjcjEsIG5hbWUxLAotCQkJCQkgICAgICAmeGUyLCB4c2NyMiwgbmFtZTIsCi0JCQkJCSAgICAgIGZsYWdzLCB4cHAsIHJlc3VsdCk7Ci0JCX0KLQkJeGRsX2ZyZWVfc2NyaXB0KHhzY3IxKTsKLQkJeGRsX2ZyZWVfc2NyaXB0KHhzY3IyKTsKKwlpZiAoIXhzY3IxKSB7CisJCXJlc3VsdC0+cHRyID0geGRsX21hbGxvYyhtZjItPnNpemUpOworCQltZW1jcHkocmVzdWx0LT5wdHIsIG1mMi0+cHRyLCBtZjItPnNpemUpOworCQlyZXN1bHQtPnNpemUgPSBtZjItPnNpemU7CisJfSBlbHNlIGlmICgheHNjcjIpIHsKKwkJcmVzdWx0LT5wdHIgPSB4ZGxfbWFsbG9jKG1mMS0+c2l6ZSk7CisJCW1lbWNweShyZXN1bHQtPnB0ciwgbWYxLT5wdHIsIG1mMS0+c2l6ZSk7CisJCXJlc3VsdC0+c2l6ZSA9IG1mMS0+c2l6ZTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSB4ZGxfZG9fbWVyZ2UoJnhlMSwgeHNjcjEsIG5hbWUxLAorCQkJCSAgICAgICZ4ZTIsIHhzY3IyLCBuYW1lMiwKKwkJCQkgICAgICBmbGFncywgeHBwLCByZXN1bHQpOwogCX0KKwl4ZGxfZnJlZV9zY3JpcHQoeHNjcjEpOworCXhkbF9mcmVlX3NjcmlwdCh4c2NyMik7CisKIAl4ZGxfZnJlZV9lbnYoJnhlMSk7CiAJeGRsX2ZyZWVfZW52KCZ4ZTIpOwogCmRpZmYgLS1naXQgYS94ZGlmZi94cGF0aWVuY2UuYyBiL3hkaWZmL3hwYXRpZW5jZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MmMxNmEKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94cGF0aWVuY2UuYwpAQCAtMCwwICsxLDM4MSBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5IERhdmlkZSBMaWJlbnppLCBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworI2luY2x1ZGUgInhpbmNsdWRlLmgiCisjaW5jbHVkZSAieHR5cGVzLmgiCisjaW5jbHVkZSAieGRpZmYuaCIKKworLyoKKyAqIFRoZSBiYXNpYyBpZGVhIG9mIHBhdGllbmNlIGRpZmYgaXMgdG8gZmluZCBsaW5lcyB0aGF0IGFyZSB1bmlxdWUgaW4KKyAqIGJvdGggZmlsZXMuICBUaGVzZSBhcmUgaW50dWl0aXZlbHkgdGhlIG9uZXMgdGhhdCB3ZSB3YW50IHRvIHNlZSBhcworICogY29tbW9uIGxpbmVzLgorICoKKyAqIFRoZSBtYXhpbWFsIG9yZGVyZWQgc2VxdWVuY2Ugb2Ygc3VjaCBsaW5lIHBhaXJzICh3aGVyZSBvcmRlcmVkIG1lYW5zCisgKiB0aGF0IHRoZSBvcmRlciBpbiB0aGUgc2VxdWVuY2UgYWdyZWVzIHdpdGggdGhlIG9yZGVyIG9mIHRoZSBsaW5lcyBpbgorICogYm90aCBmaWxlcykgbmF0dXJhbGx5IGRlZmluZXMgYW4gaW5pdGlhbCBzZXQgb2YgY29tbW9uIGxpbmVzLgorICoKKyAqIE5vdywgdGhlIGFsZ29yaXRobSB0cmllcyB0byBleHRlbmQgdGhlIHNldCBvZiBjb21tb24gbGluZXMgYnkgZ3Jvd2luZworICogdGhlIGxpbmUgcmFuZ2VzIHdoZXJlIHRoZSBmaWxlcyBoYXZlIGlkZW50aWNhbCBsaW5lcy4KKyAqCisgKiBCZXR3ZWVuIHRob3NlIGNvbW1vbiBsaW5lcywgdGhlIHBhdGllbmNlIGRpZmYgYWxnb3JpdGhtIGlzIGFwcGxpZWQKKyAqIHJlY3Vyc2l2ZWx5LCB1bnRpbCBubyB1bmlxdWUgbGluZSBwYWlycyBjYW4gYmUgZm91bmQ7IHRoZXNlIGxpbmUgcmFuZ2VzCisgKiBhcmUgaGFuZGxlZCBieSB0aGUgd2VsbC1rbm93biBNeWVycyBhbGdvcml0aG0uCisgKi8KKworI2RlZmluZSBOT05fVU5JUVVFIFVMT05HX01BWAorCisvKgorICogVGhpcyBpcyBhIGhhc2ggbWFwcGluZyBmcm9tIGxpbmUgaGFzaCB0byBsaW5lIG51bWJlcnMgaW4gdGhlIGZpcnN0IGFuZAorICogc2Vjb25kIGZpbGUuCisgKi8KK3N0cnVjdCBoYXNobWFwIHsKKwlpbnQgbnIsIGFsbG9jOworCXN0cnVjdCBlbnRyeSB7CisJCXVuc2lnbmVkIGxvbmcgaGFzaDsKKwkJLyoKKwkJICogMCA9IHVudXNlZCBlbnRyeSwgMSA9IGZpcnN0IGxpbmUsIDIgPSBzZWNvbmQsIGV0Yy4KKwkJICogbGluZTIgaXMgTk9OX1VOSVFVRSBpZiB0aGUgbGluZSBpcyBub3QgdW5pcXVlCisJCSAqIGluIGVpdGhlciB0aGUgZmlyc3Qgb3IgdGhlIHNlY29uZCBmaWxlLgorCQkgKi8KKwkJdW5zaWduZWQgbG9uZyBsaW5lMSwgbGluZTI7CisJCS8qCisJCSAqICJuZXh0IiAmICJwcmV2aW91cyIgYXJlIHVzZWQgZm9yIHRoZSBsb25nZXN0IGNvbW1vbgorCQkgKiBzZXF1ZW5jZTsKKwkJICogaW5pdGlhbGx5LCAibmV4dCIgcmVmbGVjdHMgb25seSB0aGUgb3JkZXIgaW4gZmlsZTEuCisJCSAqLworCQlzdHJ1Y3QgZW50cnkgKm5leHQsICpwcmV2aW91czsKKwl9ICplbnRyaWVzLCAqZmlyc3QsICpsYXN0OworCS8qIHdlcmUgY29tbW9uIHJlY29yZHMgZm91bmQ/ICovCisJdW5zaWduZWQgbG9uZyBoYXNfbWF0Y2hlczsKKwltbWZpbGVfdCAqZmlsZTEsICpmaWxlMjsKKwl4ZGZlbnZfdCAqZW52OworCXhwcGFyYW1fdCBjb25zdCAqeHBwOworfTsKKworLyogVGhlIGFyZ3VtZW50ICJwYXNzIiBpcyAxIGZvciB0aGUgZmlyc3QgZmlsZSwgMiBmb3IgdGhlIHNlY29uZC4gKi8KK3N0YXRpYyB2b2lkIGluc2VydF9yZWNvcmQoaW50IGxpbmUsIHN0cnVjdCBoYXNobWFwICptYXAsIGludCBwYXNzKQoreworCXhyZWNvcmRfdCAqKnJlY29yZHMgPSBwYXNzID09IDEgPworCQltYXAtPmVudi0+eGRmMS5yZWNzIDogbWFwLT5lbnYtPnhkZjIucmVjczsKKwl4cmVjb3JkX3QgKnJlY29yZCA9IHJlY29yZHNbbGluZSAtIDFdLCAqb3RoZXI7CisJLyoKKwkgKiBBZnRlciB4ZGxfcHJlcGFyZV9lbnYoKSAob3IgbW9yZSBwcmVjaXNlbHksIGR1ZSB0bworCSAqIHhkbF9jbGFzc2lmeV9yZWNvcmQoKSksIHRoZSAiaGEiIG1lbWJlciBvZiB0aGUgcmVjb3JkcyAoQUtBIGxpbmVzKQorCSAqIGlzIF9ub3RfIHRoZSBoYXNoIGFueW1vcmUsIGJ1dCBhIGxpbmVhcml6ZWQgdmVyc2lvbiBvZiBpdC4gIEluCisJICogb3RoZXIgd29yZHMsIHRoZSAiaGEiIG1lbWJlciBpcyBndWFyYW50ZWVkIHRvIHN0YXJ0IHdpdGggMCBhbmQKKwkgKiB0aGUgc2Vjb25kIHJlY29yZCdzIGhhIGNhbiBvbmx5IGJlIDAgb3IgMSwgZXRjLgorCSAqCisJICogU28gd2UgbXVsdGlwbHkgaGEgYnkgMiBpbiB0aGUgaG9wZSB0aGF0IHRoZSBoYXNoaW5nIHdhcworCSAqICJ1bmlxdWUgZW5vdWdoIi4KKwkgKi8KKwlpbnQgaW5kZXggPSAoaW50KSgocmVjb3JkLT5oYSA8PCAxKSAlIG1hcC0+YWxsb2MpOworCisJd2hpbGUgKG1hcC0+ZW50cmllc1tpbmRleF0ubGluZTEpIHsKKwkJb3RoZXIgPSBtYXAtPmVudi0+eGRmMS5yZWNzW21hcC0+ZW50cmllc1tpbmRleF0ubGluZTEgLSAxXTsKKwkJaWYgKG1hcC0+ZW50cmllc1tpbmRleF0uaGFzaCAhPSByZWNvcmQtPmhhIHx8CisJCQkJIXhkbF9yZWNtYXRjaChyZWNvcmQtPnB0ciwgcmVjb3JkLT5zaXplLAorCQkJCQlvdGhlci0+cHRyLCBvdGhlci0+c2l6ZSwKKwkJCQkJbWFwLT54cHAtPmZsYWdzKSkgeworCQkJaWYgKCsraW5kZXggPj0gbWFwLT5hbGxvYykKKwkJCQlpbmRleCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocGFzcyA9PSAyKQorCQkJbWFwLT5oYXNfbWF0Y2hlcyA9IDE7CisJCWlmIChwYXNzID09IDEgfHwgbWFwLT5lbnRyaWVzW2luZGV4XS5saW5lMikKKwkJCW1hcC0+ZW50cmllc1tpbmRleF0ubGluZTIgPSBOT05fVU5JUVVFOworCQllbHNlCisJCQltYXAtPmVudHJpZXNbaW5kZXhdLmxpbmUyID0gbGluZTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGFzcyA9PSAyKQorCQlyZXR1cm47CisJbWFwLT5lbnRyaWVzW2luZGV4XS5saW5lMSA9IGxpbmU7CisJbWFwLT5lbnRyaWVzW2luZGV4XS5oYXNoID0gcmVjb3JkLT5oYTsKKwlpZiAoIW1hcC0+Zmlyc3QpCisJCW1hcC0+Zmlyc3QgPSBtYXAtPmVudHJpZXMgKyBpbmRleDsKKwlpZiAobWFwLT5sYXN0KSB7CisJCW1hcC0+bGFzdC0+bmV4dCA9IG1hcC0+ZW50cmllcyArIGluZGV4OworCQltYXAtPmVudHJpZXNbaW5kZXhdLnByZXZpb3VzID0gbWFwLT5sYXN0OworCX0KKwltYXAtPmxhc3QgPSBtYXAtPmVudHJpZXMgKyBpbmRleDsKKwltYXAtPm5yKys7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgZm9yIGVhY2ggcmVjdXJzaW9uIGludG8gdGhlIGludGVyLWh1bmsKKyAqIHBhcnRzLCBhcyBwcmV2aW91c2x5IG5vbi11bmlxdWUgbGluZXMgY2FuIGJlY29tZSB1bmlxdWUgd2hlbiBiZWluZworICogcmVzdHJpY3RlZCB0byBhIHNtYWxsZXIgcGFydCBvZiB0aGUgZmlsZXMuCisgKgorICogSXQgaXMgYXNzdW1lZCB0aGF0IGVudiBoYXMgYmVlbiBwcmVwYXJlZCB1c2luZyB4ZGxfcHJlcGFyZSgpLgorICovCitzdGF0aWMgaW50IGZpbGxfaGFzaG1hcChtbWZpbGVfdCAqZmlsZTEsIG1tZmlsZV90ICpmaWxlMiwKKwkJeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZmVudl90ICplbnYsCisJCXN0cnVjdCBoYXNobWFwICpyZXN1bHQsCisJCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCXJlc3VsdC0+ZmlsZTEgPSBmaWxlMTsKKwlyZXN1bHQtPmZpbGUyID0gZmlsZTI7CisJcmVzdWx0LT54cHAgPSB4cHA7CisJcmVzdWx0LT5lbnYgPSBlbnY7CisKKwkvKiBXZSBrbm93IGV4YWN0bHkgaG93IGxhcmdlIHdlIHdhbnQgdGhlIGhhc2ggbWFwICovCisJcmVzdWx0LT5hbGxvYyA9IGNvdW50MSAqIDI7CisJcmVzdWx0LT5lbnRyaWVzID0gKHN0cnVjdCBlbnRyeSAqKQorCQl4ZGxfbWFsbG9jKHJlc3VsdC0+YWxsb2MgKiBzaXplb2Yoc3RydWN0IGVudHJ5KSk7CisJaWYgKCFyZXN1bHQtPmVudHJpZXMpCisJCXJldHVybiAtMTsKKwltZW1zZXQocmVzdWx0LT5lbnRyaWVzLCAwLCByZXN1bHQtPmFsbG9jICogc2l6ZW9mKHN0cnVjdCBlbnRyeSkpOworCisJLyogRmlyc3QsIGZpbGwgd2l0aCBlbnRyaWVzIGZyb20gdGhlIGZpcnN0IGZpbGUgKi8KKwl3aGlsZSAoY291bnQxLS0pCisJCWluc2VydF9yZWNvcmQobGluZTErKywgcmVzdWx0LCAxKTsKKworCS8qIFRoZW4gc2VhcmNoIGZvciBtYXRjaGVzIGluIHRoZSBzZWNvbmQgZmlsZSAqLworCXdoaWxlIChjb3VudDItLSkKKwkJaW5zZXJ0X3JlY29yZChsaW5lMisrLCByZXN1bHQsIDIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBsb25nZXN0IHNlcXVlbmNlIHdpdGggYSBzbWFsbGVyIGxhc3QgZWxlbWVudCAobWVhbmluZyBhIHNtYWxsZXIKKyAqIGxpbmUyLCBhcyB3ZSBjb25zdHJ1Y3QgdGhlIHNlcXVlbmNlIHdpdGggZW50cmllcyBvcmRlcmVkIGJ5IGxpbmUxKS4KKyAqLworc3RhdGljIGludCBiaW5hcnlfc2VhcmNoKHN0cnVjdCBlbnRyeSAqKnNlcXVlbmNlLCBpbnQgbG9uZ2VzdCwKKwkJc3RydWN0IGVudHJ5ICplbnRyeSkKK3sKKwlpbnQgbGVmdCA9IC0xLCByaWdodCA9IGxvbmdlc3Q7CisKKwl3aGlsZSAobGVmdCArIDEgPCByaWdodCkgeworCQlpbnQgbWlkZGxlID0gKGxlZnQgKyByaWdodCkgLyAyOworCQkvKiBieSBjb25zdHJ1Y3Rpb24sIG5vIHR3byBlbnRyaWVzIGNhbiBiZSBlcXVhbCAqLworCQlpZiAoc2VxdWVuY2VbbWlkZGxlXS0+bGluZTIgPiBlbnRyeS0+bGluZTIpCisJCQlyaWdodCA9IG1pZGRsZTsKKwkJZWxzZQorCQkJbGVmdCA9IG1pZGRsZTsKKwl9CisJLyogcmV0dXJuIHRoZSBpbmRleCBpbiAic2VxdWVuY2UiLCBfbm90XyB0aGUgc2VxdWVuY2UgbGVuZ3RoICovCisJcmV0dXJuIGxlZnQ7Cit9CisKKy8qCisgKiBUaGUgaWRlYSBpcyB0byBzdGFydCB3aXRoIHRoZSBsaXN0IG9mIGNvbW1vbiB1bmlxdWUgbGluZXMgc29ydGVkIGJ5CisgKiB0aGUgb3JkZXIgaW4gZmlsZTEuICBGb3IgZWFjaCBvZiB0aGVzZSBwYWlycywgdGhlIGxvbmdlc3QgKHBhcnRpYWwpCisgKiBzZXF1ZW5jZSB3aG9zZSBsYXN0IGVsZW1lbnQncyBsaW5lMiBpcyBzbWFsbGVyIGlzIGRldGVybWluZWQuCisgKgorICogRm9yIGVmZmljaWVuY3ksIHRoZSBzZXF1ZW5jZXMgYXJlIGtlcHQgaW4gYSBsaXN0IGNvbnRhaW5pbmcgZXhhY3RseSBvbmUKKyAqIGl0ZW0gcGVyIHNlcXVlbmNlIGxlbmd0aDogdGhlIHNlcXVlbmNlIHdpdGggdGhlIHNtYWxsZXN0IGxhc3QKKyAqIGVsZW1lbnQgKGluIHRlcm1zIG9mIGxpbmUyKS4KKyAqLworc3RhdGljIHN0cnVjdCBlbnRyeSAqZmluZF9sb25nZXN0X2NvbW1vbl9zZXF1ZW5jZShzdHJ1Y3QgaGFzaG1hcCAqbWFwKQoreworCXN0cnVjdCBlbnRyeSAqKnNlcXVlbmNlID0geGRsX21hbGxvYyhtYXAtPm5yICogc2l6ZW9mKHN0cnVjdCBlbnRyeSAqKSk7CisJaW50IGxvbmdlc3QgPSAwLCBpOworCXN0cnVjdCBlbnRyeSAqZW50cnk7CisKKwlmb3IgKGVudHJ5ID0gbWFwLT5maXJzdDsgZW50cnk7IGVudHJ5ID0gZW50cnktPm5leHQpIHsKKwkJaWYgKCFlbnRyeS0+bGluZTIgfHwgZW50cnktPmxpbmUyID09IE5PTl9VTklRVUUpCisJCQljb250aW51ZTsKKwkJaSA9IGJpbmFyeV9zZWFyY2goc2VxdWVuY2UsIGxvbmdlc3QsIGVudHJ5KTsKKwkJZW50cnktPnByZXZpb3VzID0gaSA8IDAgPyBOVUxMIDogc2VxdWVuY2VbaV07CisJCXNlcXVlbmNlWysraV0gPSBlbnRyeTsKKwkJaWYgKGkgPT0gbG9uZ2VzdCkKKwkJCWxvbmdlc3QrKzsKKwl9CisKKwkvKiBObyBjb21tb24gdW5pcXVlIGxpbmVzIHdlcmUgZm91bmQgKi8KKwlpZiAoIWxvbmdlc3QpIHsKKwkJeGRsX2ZyZWUoc2VxdWVuY2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBJdGVyYXRlIHN0YXJ0aW5nIGF0IHRoZSBsYXN0IGVsZW1lbnQsIGFkanVzdGluZyB0aGUgIm5leHQiIG1lbWJlcnMgKi8KKwllbnRyeSA9IHNlcXVlbmNlW2xvbmdlc3QgLSAxXTsKKwllbnRyeS0+bmV4dCA9IE5VTEw7CisJd2hpbGUgKGVudHJ5LT5wcmV2aW91cykgeworCQllbnRyeS0+cHJldmlvdXMtPm5leHQgPSBlbnRyeTsKKwkJZW50cnkgPSBlbnRyeS0+cHJldmlvdXM7CisJfQorCXhkbF9mcmVlKHNlcXVlbmNlKTsKKwlyZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2goc3RydWN0IGhhc2htYXAgKm1hcCwgaW50IGxpbmUxLCBpbnQgbGluZTIpCit7CisJeHJlY29yZF90ICpyZWNvcmQxID0gbWFwLT5lbnYtPnhkZjEucmVjc1tsaW5lMSAtIDFdOworCXhyZWNvcmRfdCAqcmVjb3JkMiA9IG1hcC0+ZW52LT54ZGYyLnJlY3NbbGluZTIgLSAxXTsKKwlyZXR1cm4geGRsX3JlY21hdGNoKHJlY29yZDEtPnB0ciwgcmVjb3JkMS0+c2l6ZSwKKwkJcmVjb3JkMi0+cHRyLCByZWNvcmQyLT5zaXplLCBtYXAtPnhwcC0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHBhdGllbmNlX2RpZmYobW1maWxlX3QgKmZpbGUxLCBtbWZpbGVfdCAqZmlsZTIsCisJCXhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGZlbnZfdCAqZW52LAorCQlpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50Mik7CisKK3N0YXRpYyBpbnQgd2Fsa19jb21tb25fc2VxdWVuY2Uoc3RydWN0IGhhc2htYXAgKm1hcCwgc3RydWN0IGVudHJ5ICpmaXJzdCwKKwkJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpCit7CisJaW50IGVuZDEgPSBsaW5lMSArIGNvdW50MSwgZW5kMiA9IGxpbmUyICsgY291bnQyOworCWludCBuZXh0MSwgbmV4dDI7CisKKwlmb3IgKDs7KSB7CisJCS8qIFRyeSB0byBncm93IHRoZSBsaW5lIHJhbmdlcyBvZiBjb21tb24gbGluZXMgKi8KKwkJaWYgKGZpcnN0KSB7CisJCQluZXh0MSA9IGZpcnN0LT5saW5lMTsKKwkJCW5leHQyID0gZmlyc3QtPmxpbmUyOworCQkJd2hpbGUgKG5leHQxID4gbGluZTEgJiYgbmV4dDIgPiBsaW5lMiAmJgorCQkJCQltYXRjaChtYXAsIG5leHQxIC0gMSwgbmV4dDIgLSAxKSkgeworCQkJCW5leHQxLS07CisJCQkJbmV4dDItLTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW5leHQxID0gZW5kMTsKKwkJCW5leHQyID0gZW5kMjsKKwkJfQorCQl3aGlsZSAobGluZTEgPCBuZXh0MSAmJiBsaW5lMiA8IG5leHQyICYmCisJCQkJbWF0Y2gobWFwLCBsaW5lMSwgbGluZTIpKSB7CisJCQlsaW5lMSsrOworCQkJbGluZTIrKzsKKwkJfQorCisJCS8qIFJlY3Vyc2UgKi8KKwkJaWYgKG5leHQxID4gbGluZTEgfHwgbmV4dDIgPiBsaW5lMikgeworCQkJc3RydWN0IGhhc2htYXAgc3VibWFwOworCisJCQltZW1zZXQoJnN1Ym1hcCwgMCwgc2l6ZW9mKHN1Ym1hcCkpOworCQkJaWYgKHBhdGllbmNlX2RpZmYobWFwLT5maWxlMSwgbWFwLT5maWxlMiwKKwkJCQkJbWFwLT54cHAsIG1hcC0+ZW52LAorCQkJCQlsaW5lMSwgbmV4dDEgLSBsaW5lMSwKKwkJCQkJbGluZTIsIG5leHQyIC0gbGluZTIpKQorCQkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmICghZmlyc3QpCisJCQlyZXR1cm4gMDsKKworCQl3aGlsZSAoZmlyc3QtPm5leHQgJiYKKwkJCQlmaXJzdC0+bmV4dC0+bGluZTEgPT0gZmlyc3QtPmxpbmUxICsgMSAmJgorCQkJCWZpcnN0LT5uZXh0LT5saW5lMiA9PSBmaXJzdC0+bGluZTIgKyAxKQorCQkJZmlyc3QgPSBmaXJzdC0+bmV4dDsKKworCQlsaW5lMSA9IGZpcnN0LT5saW5lMSArIDE7CisJCWxpbmUyID0gZmlyc3QtPmxpbmUyICsgMTsKKworCQlmaXJzdCA9IGZpcnN0LT5uZXh0OworCX0KK30KKworc3RhdGljIGludCBmYWxsX2JhY2tfdG9fY2xhc3NpY19kaWZmKHN0cnVjdCBoYXNobWFwICptYXAsCisJCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCS8qCisJICogVGhpcyBwcm9iYWJseSBkb2VzIG5vdCB3b3JrIG91dHNpZGUgR2l0LCBzaW5jZQorCSAqIHdlIGhhdmUgYSB2ZXJ5IHNpbXBsZSBtbWZpbGUgc3RydWN0dXJlLgorCSAqCisJICogTm90ZTogaWRlYWxseSwgd2Ugd291bGQgcmV1c2UgdGhlIHByZXBhcmVkIGVudmlyb25tZW50LCBidXQKKwkgKiB0aGUgbGlieGRpZmYgaW50ZXJmYWNlIGRvZXMgbm90ICh5ZXQpIGFsbG93IGZvciBkaWZmaW5nIG9ubHkKKwkgKiByYW5nZXMgb2YgbGluZXMgaW5zdGVhZCBvZiB0aGUgd2hvbGUgZmlsZXMuCisJICovCisJbW1maWxlX3Qgc3ViZmlsZTEsIHN1YmZpbGUyOworCXhwcGFyYW1fdCB4cHA7CisJeGRmZW52X3QgZW52OworCisJc3ViZmlsZTEucHRyID0gKGNoYXIgKiltYXAtPmVudi0+eGRmMS5yZWNzW2xpbmUxIC0gMV0tPnB0cjsKKwlzdWJmaWxlMS5zaXplID0gbWFwLT5lbnYtPnhkZjEucmVjc1tsaW5lMSArIGNvdW50MSAtIDJdLT5wdHIgKworCQltYXAtPmVudi0+eGRmMS5yZWNzW2xpbmUxICsgY291bnQxIC0gMl0tPnNpemUgLSBzdWJmaWxlMS5wdHI7CisJc3ViZmlsZTIucHRyID0gKGNoYXIgKiltYXAtPmVudi0+eGRmMi5yZWNzW2xpbmUyIC0gMV0tPnB0cjsKKwlzdWJmaWxlMi5zaXplID0gbWFwLT5lbnYtPnhkZjIucmVjc1tsaW5lMiArIGNvdW50MiAtIDJdLT5wdHIgKworCQltYXAtPmVudi0+eGRmMi5yZWNzW2xpbmUyICsgY291bnQyIC0gMl0tPnNpemUgLSBzdWJmaWxlMi5wdHI7CisJeHBwLmZsYWdzID0gbWFwLT54cHAtPmZsYWdzICYgflhERl9QQVRJRU5DRV9ESUZGOworCWlmICh4ZGxfZG9fZGlmZigmc3ViZmlsZTEsICZzdWJmaWxlMiwgJnhwcCwgJmVudikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwltZW1jcHkobWFwLT5lbnYtPnhkZjEucmNoZyArIGxpbmUxIC0gMSwgZW52LnhkZjEucmNoZywgY291bnQxKTsKKwltZW1jcHkobWFwLT5lbnYtPnhkZjIucmNoZyArIGxpbmUyIC0gMSwgZW52LnhkZjIucmNoZywgY291bnQyKTsKKworCXhkbF9mcmVlX2VudigmZW52KTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVjdXJzaXZlbHkgZmluZCB0aGUgbG9uZ2VzdCBjb21tb24gc2VxdWVuY2Ugb2YgdW5pcXVlIGxpbmVzLAorICogYW5kIGlmIG5vbmUgd2FzIGZvdW5kLCBhc2sgeGRsX2RvX2RpZmYoKSB0byBkbyB0aGUgam9iLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGVudiB3YXMgcHJlcGFyZWQgd2l0aCB4ZGxfcHJlcGFyZV9lbnYoKS4KKyAqLworc3RhdGljIGludCBwYXRpZW5jZV9kaWZmKG1tZmlsZV90ICpmaWxlMSwgbW1maWxlX3QgKmZpbGUyLAorCQl4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRmZW52X3QgKmVudiwKKwkJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpCit7CisJc3RydWN0IGhhc2htYXAgbWFwOworCXN0cnVjdCBlbnRyeSAqZmlyc3Q7CisJaW50IHJlc3VsdCA9IDA7CisKKwkvKiB0cml2aWFsIGNhc2U6IG9uZSBzaWRlIGlzIGVtcHR5ICovCisJaWYgKCFjb3VudDEpIHsKKwkJd2hpbGUoY291bnQyLS0pCisJCQllbnYtPnhkZjIucmNoZ1tsaW5lMisrIC0gMV0gPSAxOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFjb3VudDIpIHsKKwkJd2hpbGUoY291bnQxLS0pCisJCQllbnYtPnhkZjEucmNoZ1tsaW5lMSsrIC0gMV0gPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwltZW1zZXQoJm1hcCwgMCwgc2l6ZW9mKG1hcCkpOworCWlmIChmaWxsX2hhc2htYXAoZmlsZTEsIGZpbGUyLCB4cHAsIGVudiwgJm1hcCwKKwkJCWxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpKQorCQlyZXR1cm4gLTE7CisKKwkvKiBhcmUgdGhlcmUgYW55IG1hdGNoaW5nIGxpbmVzIGF0IGFsbD8gKi8KKwlpZiAoIW1hcC5oYXNfbWF0Y2hlcykgeworCQl3aGlsZShjb3VudDEtLSkKKwkJCWVudi0+eGRmMS5yY2hnW2xpbmUxKysgLSAxXSA9IDE7CisJCXdoaWxlKGNvdW50Mi0tKQorCQkJZW52LT54ZGYyLnJjaGdbbGluZTIrKyAtIDFdID0gMTsKKwkJeGRsX2ZyZWUobWFwLmVudHJpZXMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmaXJzdCA9IGZpbmRfbG9uZ2VzdF9jb21tb25fc2VxdWVuY2UoJm1hcCk7CisJaWYgKGZpcnN0KQorCQlyZXN1bHQgPSB3YWxrX2NvbW1vbl9zZXF1ZW5jZSgmbWFwLCBmaXJzdCwKKwkJCWxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpOworCWVsc2UKKwkJcmVzdWx0ID0gZmFsbF9iYWNrX3RvX2NsYXNzaWNfZGlmZigmbWFwLAorCQkJbGluZTEsIGNvdW50MSwgbGluZTIsIGNvdW50Mik7CisKKwl4ZGxfZnJlZShtYXAuZW50cmllcyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHhkbF9kb19wYXRpZW5jZV9kaWZmKG1tZmlsZV90ICpmaWxlMSwgbW1maWxlX3QgKmZpbGUyLAorCQl4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRmZW52X3QgKmVudikKK3sKKwlpZiAoeGRsX3ByZXBhcmVfZW52KGZpbGUxLCBmaWxlMiwgeHBwLCBlbnYpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogZW52aXJvbm1lbnQgaXMgY2xlYW5lZCB1cCBpbiB4ZGxfZGlmZigpICovCisJcmV0dXJuIHBhdGllbmNlX2RpZmYoZmlsZTEsIGZpbGUyLCB4cHAsIGVudiwKKwkJCTEsIGVudi0+eGRmMS5ucmVjLCAxLCBlbnYtPnhkZjIubnJlYyk7Cit9CmRpZmYgLS1naXQgYS94ZGlmZi94cHJlcGFyZS5jIGIveGRpZmYveHByZXBhcmUuYwppbmRleCBhNDNhYTcyLi4xNjg5MDg1IDEwMDY0NAotLS0gYS94ZGlmZi94cHJlcGFyZS5jCisrKyBiL3hkaWZmL3hwcmVwYXJlLmMKQEAgLTI5MCw3ICsyOTAsOCBAQAogCiAJeGRsX2ZyZWVfY2xhc3NpZmllcigmY2YpOwogCi0JaWYgKHhkbF9vcHRpbWl6ZV9jdHhzKCZ4ZS0+eGRmMSwgJnhlLT54ZGYyKSA8IDApIHsKKwlpZiAoISh4cHAtPmZsYWdzICYgWERGX1BBVElFTkNFX0RJRkYpICYmCisJCQl4ZGxfb3B0aW1pemVfY3R4cygmeGUtPnhkZjEsICZ4ZS0+eGRmMikgPCAwKSB7CiAKIAkJeGRsX2ZyZWVfY3R4KCZ4ZS0+eGRmMik7CiAJCXhkbF9mcmVlX2N0eCgmeGUtPnhkZjEpOwo=