ZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKaW5kZXggYzdiNzA0NC4uMDRhZjcyNyAxMDA2NDQKLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrIGIvQ01ha2VMaXN0cy50eHQKQEAgLTMyLDYgKzMyLDggQEAKIAlzZXQoQVJDSCAieDg2IikKIGVsc2VpZiAoJHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfSBTVFJFUVVBTCAiYXJtIikKIAlzZXQoQVJDSCAiYXJtIikKK2Vsc2VpZiAoJHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfSBTVFJFUVVBTCAiYWFyY2g2NCIpCisJc2V0KEFSQ0ggImFhcmNoNjQiKQogZWxzZSgpCiAJbWVzc2FnZShGQVRBTF9FUlJPUiAiVW5rbm93biBwcm9jZXNzb3I6IiAke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9KQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL0NNYWtlTGlzdHMudHh0IGIvY3J5cHRvL0NNYWtlTGlzdHMudHh0CmluZGV4IDU2YjY2MTYuLmNhOGJiOGIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9DTWFrZUxpc3RzLnR4dAorKysgYi9jcnlwdG8vQ01ha2VMaXN0cy50eHQKQEAgLTUsNyArNSwxMyBAQAogCXNldChBU01fRVhUIFMpCiAJZW5hYmxlX2xhbmd1YWdlKEFTTSkKIGVsc2VpZihVTklYKQotCXNldChQRVJMQVNNX1NUWUxFIGVsZikKKwlpZiAoJHtBUkNIfSBTVFJFUVVBTCAiYWFyY2g2NCIpCisJCSMgVGhlICJhcm14IiBQZXJsIHNjcmlwdHMgbG9vayBmb3IgIjY0IiBpbiB0aGUgc3R5bGUgYXJndW1lbnQKKwkJIyBpbiBvcmRlciB0byBkZWNpZGUgd2hldGhlciB0byBnZW5lcmF0ZSAzMi0gb3IgNjQtYml0IGFzbS4KKwkJc2V0KFBFUkxBU01fU1RZTEUgbGludXg2NCkKKwllbHNlKCkKKwkJc2V0KFBFUkxBU01fU1RZTEUgZWxmKQorCWVuZGlmKCkKIAlzZXQoQVNNX0VYVCBTKQogCWVuYWJsZV9sYW5ndWFnZShBU00pCiBlbHNlKCkKQEAgLTU5LDcgKzY1LDE0IEBACiAJc2V0KAogCQlDUllQVE9fQVJDSF9TT1VSQ0VTCiAKLQkJY3B1LXg4Ni1hc20uJHtBU01fRVhUfQorCQljcHUtYXJtLmMKKwkpCitlbmRpZigpCisKK2lmICgke0FSQ0h9IFNUUkVRVUFMICJhYXJjaDY0IikKKwlzZXQoCisJCUNSWVBUT19BUkNIX1NPVVJDRVMKKwogCQljcHUtYXJtLmMKIAkpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL0NNYWtlTGlzdHMudHh0IGIvY3J5cHRvL2Flcy9DTWFrZUxpc3RzLnR4dAppbmRleCA2NTQ1ODA5Li5mNmY2NzNiIDEwMDY0NAotLS0gYS9jcnlwdG8vYWVzL0NNYWtlTGlzdHMudHh0CisrKyBiL2NyeXB0by9hZXMvQ01ha2VMaXN0cy50eHQKQEAgLTI3LDYgKzI3LDE1IEBACiAKIAkJYWVzLWFybXY0LiR7QVNNX0VYVH0KIAkJYnNhZXMtYXJtdjcuJHtBU01fRVhUfQorCQlhZXN2OC1hcm14LiR7QVNNX0VYVH0KKwkpCitlbmRpZigpCisKK2lmICgke0FSQ0h9IFNUUkVRVUFMICJhYXJjaDY0IikKKwlzZXQoCisJCUFFU19BUkNIX1NPVVJDRVMKKworCQlhZXN2OC1hcm14LiR7QVNNX0VYVH0KIAkpCiBlbmRpZigpCiAKQEAgLTUwLDMgKzU5LDQgQEAKIHBlcmxhc20oYWVzbmkteDg2LiR7QVNNX0VYVH0gYXNtL2Flc25pLXg4Ni5wbCkKIHBlcmxhc20oYWVzLWFybXY0LiR7QVNNX0VYVH0gYXNtL2Flcy1hcm12NC5wbCkKIHBlcmxhc20oYnNhZXMtYXJtdjcuJHtBU01fRVhUfSBhc20vYnNhZXMtYXJtdjcucGwpCitwZXJsYXNtKGFlc3Y4LWFybXguJHtBU01fRVhUfSBhc20vYWVzdjgtYXJteC5wbCkKZGlmZiAtLWdpdCBhL2NyeXB0by9hZXMvYXNtL2Flc3Y4LWFybXgucGwgYi9jcnlwdG8vYWVzL2FzbS9hZXN2OC1hcm14LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTNmODYKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYWVzL2FzbS9hZXN2OC1hcm14LnBsCkBAIC0wLDAgKzEsOTYyIEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEFSTXY4IEFFUyBpbnN0cnVjdGlvbnMuIFRoZQorIyBtb2R1bGUgaXMgZW5kaWFuLWFnbm9zdGljIGluIHNlbnNlIHRoYXQgaXQgc3VwcG9ydHMgYm90aCBiaWctIGFuZAorIyBsaXR0bGUtZW5kaWFuIGNhc2VzLiBBcyBkb2VzIGl0IHN1cHBvcnQgYm90aCAzMi0gYW5kIDY0LWJpdCBtb2RlcworIyBvZiBvcGVyYXRpb24uIExhdHRlciBpcyBhY2hpZXZlZCBieSBsaW1pdGluZyBhbW91bnQgb2YgdXRpbGl6ZWQKKyMgcmVnaXN0ZXJzIHRvIDE2LCB3aGljaCBpbXBsaWVzIGFkZGl0aW9uYWwgTkVPTiBsb2FkIGFuZCBpbnRlZ2VyCisjIGluc3RydWN0aW9ucy4gVGhpcyBoYXMgbm8gZWZmZWN0IG9uIG1pZ2h0eSBBcHBsZSBBNywgd2hlcmUgcmVzdWx0cworIyBhcmUgbGl0ZXJhbGx5IGVxdWFsIHRvIHRoZSB0aGVvcmV0aWNhbCBlc3RpbWF0ZXMgYmFzZWQgb24gQUVTCisjIGluc3RydWN0aW9uIGxhdGVuY2llcyBhbmQgaXNzdWUgcmF0ZXMuIE9uIENvcnRleC1BNTMsIGFuIGluLW9yZGVyCisjIGV4ZWN1dGlvbiBjb3JlLCB0aGlzIGNvc3RzIHVwIHRvIDEwLTE1JSwgd2hpY2ggaXMgcGFydGlhbGx5CisjIGNvbXBlbnNhdGVkIGJ5IGltcGxlbWVudGluZyBkZWRpY2F0ZWQgY29kZSBwYXRoIGZvciAxMjgtYml0CisjIENCQyBlbmNyeXB0IGNhc2UuIE9uIENvcnRleC1BNTcgcGFyYWxsZWxpemFibGUgbW9kZSBwZXJmb3JtYW5jZQorIyBzZWVtcyB0byBiZSBsaW1pdGVkIGJ5IHNoZWVyIGFtb3VudCBvZiBORU9OIGluc3RydWN0aW9ucy4uLgorIworIyBQZXJmb3JtYW5jZSBpbiBjeWNsZXMgcGVyIGJ5dGUgcHJvY2Vzc2VkIHdpdGggMTI4LWJpdCBrZXk6CisjCisjCQlDQkMgZW5jCQlDQkMgZGVjCQlDVFIKKyMgQXBwbGUgQTcJMi4zOQkJMS4yMAkJMS4yMAorIyBDb3J0ZXgtQTUzCTIuNDUJCTEuODcJCTEuOTQKKyMgQ29ydGV4LUE1NwkzLjY0CQkxLjM0CQkxLjMyCisKKyRmbGF2b3VyID0gc2hpZnQ7CitvcGVuIFNURE9VVCwiPiIuc2hpZnQ7CisKKyRwcmVmaXg9ImFlc192OCI7CisKKyRjb2RlPTw8X19fOworI2luY2x1ZGUgImFybV9hcmNoLmgiCisKKyNpZiBfX0FSTV9NQVhfQVJDSF9fPj03CisudGV4dAorX19fCiskY29kZS49Ii5hcmNoCWFybXY4LWErY3J5cHRvXG4iCQkJaWYgKCRmbGF2b3VyID1+IC82NC8pOworJGNvZGUuPSIuYXJjaAlhcm12Ny1hXG4uZnB1CW5lb25cbi5jb2RlCTMyXG4iCWlmICgkZmxhdm91ciAhfiAvNjQvKTsKKwkJI15eXl5eXiB0aGlzIGlzIGRvbmUgdG8gc2ltcGxpZnkgYWRvcHRpb24gYnkgbm90IGRlcGVuZGluZworCQkjCW9uIGxhdGVzdCBiaW51dGlscy4KKworIyBBc3NlbWJsZXIgbW5lbW9uaWNzIGFyZSBhbiBlY2xlY3RpYyBtaXggb2YgMzItIGFuZCA2NC1iaXQgc3ludGF4LAorIyBORU9OIGlzIG1vc3RseSAzMi1iaXQgbW5lbW9uaWNzLCBpbnRlZ2VyIC0gbW9zdGx5IDY0LiBHb2FsIGlzIHRvCisjIG1haW50YWluIGJvdGggMzItIGFuZCA2NC1iaXQgY29kZXMgd2l0aGluIHNpbmdsZSBtb2R1bGUgYW5kCisjIHRyYW5zbGl0ZXJhdGUgY29tbW9uIGNvZGUgdG8gZWl0aGVyIGZsYXZvdXIgd2l0aCByZWdleCB2b2Rvby4KKyMKK3t7eworbXkgKCRpbnAsJGJpdHMsJG91dCwkcHRyLCRyb3VuZHMpPSgieDAiLCJ3MSIsIngyIiwieDMiLCJ3MTIiKTsKK215ICgkemVybywkcmNvbiwkbWFzaywkaW4wLCRpbjEsJHRtcCwka2V5KT0KKwkkZmxhdm91cj1+LzY0Lz8gbWFwKCJxJF8iLCgwLi42KSkgOiBtYXAoInEkXyIsKDAuLjMsOC4uMTApKTsKKworCiskY29kZS49PDxfX187CisuYWxpZ24JNQorcmNvbjoKKy5sb25nCTB4MDEsMHgwMSwweDAxLDB4MDEKKy5sb25nCTB4MGMwZjBlMGQsMHgwYzBmMGUwZCwweDBjMGYwZTBkLDB4MGMwZjBlMGQJLy8gcm90YXRlLW4tc3BsYXQKKy5sb25nCTB4MWIsMHgxYiwweDFiLDB4MWIKKworLmdsb2JsCSR7cHJlZml4fV9zZXRfZW5jcnlwdF9rZXkKKy50eXBlCSR7cHJlZml4fV9zZXRfZW5jcnlwdF9rZXksJWZ1bmN0aW9uCisuYWxpZ24JNQorJHtwcmVmaXh9X3NldF9lbmNyeXB0X2tleToKKy5MZW5jX2tleToKK19fXworJGNvZGUuPTw8X19fCWlmICgkZmxhdm91ciA9fiAvNjQvKTsKKwlzdHAJeDI5LHgzMCxbc3AsIy0xNl0hCisJYWRkCXgyOSxzcCwjMAorX19fCiskY29kZS49PDxfX187CisJbW92CSRwdHIsIy0xCisJY21wCSRpbnAsIzAKKwliLmVxCS5MZW5jX2tleV9hYm9ydAorCWNtcAkkb3V0LCMwCisJYi5lcQkuTGVuY19rZXlfYWJvcnQKKwltb3YJJHB0ciwjLTIKKwljbXAJJGJpdHMsIzEyOAorCWIubHQJLkxlbmNfa2V5X2Fib3J0CisJY21wCSRiaXRzLCMyNTYKKwliLmd0CS5MZW5jX2tleV9hYm9ydAorCXRzdAkkYml0cywjMHgzZgorCWIubmUJLkxlbmNfa2V5X2Fib3J0CisKKwlhZHIJJHB0cixyY29uCisJY21wCSRiaXRzLCMxOTIKKworCXZlb3IJJHplcm8sJHplcm8sJHplcm8KKwl2bGQxLjgJeyRpbjB9LFskaW5wXSwjMTYKKwltb3YJJGJpdHMsIzgJCS8vIHJldXNlICRiaXRzCisJdmxkMS4zMgl7JHJjb24sJG1hc2t9LFskcHRyXSwjMzIKKworCWIubHQJLkxvb3AxMjgKKwliLmVxCS5MMTkyCisJYgkuTDI1NgorCisuYWxpZ24JNAorLkxvb3AxMjg6CisJdnRibC44CSRrZXkseyRpbjB9LCRtYXNrCisJdmV4dC44CSR0bXAsJHplcm8sJGluMCwjMTIKKwl2c3QxLjMyCXskaW4wfSxbJG91dF0sIzE2CisJYWVzZQkka2V5LCR6ZXJvCisJc3VicwkkYml0cywkYml0cywjMQorCisJdmVvcgkkaW4wLCRpbjAsJHRtcAorCXZleHQuOAkkdG1wLCR6ZXJvLCR0bXAsIzEyCisJdmVvcgkkaW4wLCRpbjAsJHRtcAorCXZleHQuOAkkdG1wLCR6ZXJvLCR0bXAsIzEyCisJIHZlb3IJJGtleSwka2V5LCRyY29uCisJdmVvcgkkaW4wLCRpbjAsJHRtcAorCXZzaGwudTgJJHJjb24sJHJjb24sIzEKKwl2ZW9yCSRpbjAsJGluMCwka2V5CisJYi5uZQkuTG9vcDEyOAorCisJdmxkMS4zMgl7JHJjb259LFskcHRyXQorCisJdnRibC44CSRrZXkseyRpbjB9LCRtYXNrCisJdmV4dC44CSR0bXAsJHplcm8sJGluMCwjMTIKKwl2c3QxLjMyCXskaW4wfSxbJG91dF0sIzE2CisJYWVzZQkka2V5LCR6ZXJvCisKKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdmV4dC44CSR0bXAsJHplcm8sJHRtcCwjMTIKKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdmV4dC44CSR0bXAsJHplcm8sJHRtcCwjMTIKKwkgdmVvcgkka2V5LCRrZXksJHJjb24KKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdnNobC51OAkkcmNvbiwkcmNvbiwjMQorCXZlb3IJJGluMCwkaW4wLCRrZXkKKworCXZ0YmwuOAkka2V5LHskaW4wfSwkbWFzaworCXZleHQuOAkkdG1wLCR6ZXJvLCRpbjAsIzEyCisJdnN0MS4zMgl7JGluMH0sWyRvdXRdLCMxNgorCWFlc2UJJGtleSwkemVybworCisJdmVvcgkkaW4wLCRpbjAsJHRtcAorCXZleHQuOAkkdG1wLCR6ZXJvLCR0bXAsIzEyCisJdmVvcgkkaW4wLCRpbjAsJHRtcAorCXZleHQuOAkkdG1wLCR6ZXJvLCR0bXAsIzEyCisJIHZlb3IJJGtleSwka2V5LCRyY29uCisJdmVvcgkkaW4wLCRpbjAsJHRtcAorCXZlb3IJJGluMCwkaW4wLCRrZXkKKwl2c3QxLjMyCXskaW4wfSxbJG91dF0KKwlhZGQJJG91dCwkb3V0LCMweDUwCisKKwltb3YJJHJvdW5kcywjMTAKKwliCS5MZG9uZQorCisuYWxpZ24JNAorLkwxOTI6CisJdmxkMS44CXskaW4xfSxbJGlucF0sIzgKKwl2bW92Lmk4CSRrZXksIzgJCQkvLyBib3Jyb3cgJGtleQorCXZzdDEuMzIJeyRpbjB9LFskb3V0XSwjMTYKKwl2c3ViLmk4CSRtYXNrLCRtYXNrLCRrZXkJLy8gYWRqdXN0IHRoZSBtYXNrCisKKy5Mb29wMTkyOgorCXZ0YmwuOAkka2V5LHskaW4xfSwkbWFzaworCXZleHQuOAkkdG1wLCR6ZXJvLCRpbjAsIzEyCisJdnN0MS4zMgl7JGluMX0sWyRvdXRdLCM4CisJYWVzZQkka2V5LCR6ZXJvCisJc3VicwkkYml0cywkYml0cywjMQorCisJdmVvcgkkaW4wLCRpbjAsJHRtcAorCXZleHQuOAkkdG1wLCR6ZXJvLCR0bXAsIzEyCisJdmVvcgkkaW4wLCRpbjAsJHRtcAorCXZleHQuOAkkdG1wLCR6ZXJvLCR0bXAsIzEyCisJdmVvcgkkaW4wLCRpbjAsJHRtcAorCisJdmR1cC4zMgkkdG1wLCR7aW4wfVszXQorCXZlb3IJJHRtcCwkdG1wLCRpbjEKKwkgdmVvcgkka2V5LCRrZXksJHJjb24KKwl2ZXh0LjgJJGluMSwkemVybywkaW4xLCMxMgorCXZzaGwudTgJJHJjb24sJHJjb24sIzEKKwl2ZW9yCSRpbjEsJGluMSwkdG1wCisJdmVvcgkkaW4wLCRpbjAsJGtleQorCXZlb3IJJGluMSwkaW4xLCRrZXkKKwl2c3QxLjMyCXskaW4wfSxbJG91dF0sIzE2CisJYi5uZQkuTG9vcDE5MgorCisJbW92CSRyb3VuZHMsIzEyCisJYWRkCSRvdXQsJG91dCwjMHgyMAorCWIJLkxkb25lCisKKy5hbGlnbgk0CisuTDI1NjoKKwl2bGQxLjgJeyRpbjF9LFskaW5wXQorCW1vdgkkYml0cywjNworCW1vdgkkcm91bmRzLCMxNAorCXZzdDEuMzIJeyRpbjB9LFskb3V0XSwjMTYKKworLkxvb3AyNTY6CisJdnRibC44CSRrZXkseyRpbjF9LCRtYXNrCisJdmV4dC44CSR0bXAsJHplcm8sJGluMCwjMTIKKwl2c3QxLjMyCXskaW4xfSxbJG91dF0sIzE2CisJYWVzZQkka2V5LCR6ZXJvCisJc3VicwkkYml0cywkYml0cywjMQorCisJdmVvcgkkaW4wLCRpbjAsJHRtcAorCXZleHQuOAkkdG1wLCR6ZXJvLCR0bXAsIzEyCisJdmVvcgkkaW4wLCRpbjAsJHRtcAorCXZleHQuOAkkdG1wLCR6ZXJvLCR0bXAsIzEyCisJIHZlb3IJJGtleSwka2V5LCRyY29uCisJdmVvcgkkaW4wLCRpbjAsJHRtcAorCXZzaGwudTgJJHJjb24sJHJjb24sIzEKKwl2ZW9yCSRpbjAsJGluMCwka2V5CisJdnN0MS4zMgl7JGluMH0sWyRvdXRdLCMxNgorCWIuZXEJLkxkb25lCisKKwl2ZHVwLjMyCSRrZXksJHtpbjB9WzNdCQkvLyBqdXN0IHNwbGF0CisJdmV4dC44CSR0bXAsJHplcm8sJGluMSwjMTIKKwlhZXNlCSRrZXksJHplcm8KKworCXZlb3IJJGluMSwkaW4xLCR0bXAKKwl2ZXh0LjgJJHRtcCwkemVybywkdG1wLCMxMgorCXZlb3IJJGluMSwkaW4xLCR0bXAKKwl2ZXh0LjgJJHRtcCwkemVybywkdG1wLCMxMgorCXZlb3IJJGluMSwkaW4xLCR0bXAKKworCXZlb3IJJGluMSwkaW4xLCRrZXkKKwliCS5Mb29wMjU2CisKKy5MZG9uZToKKwlzdHIJJHJvdW5kcyxbJG91dF0KKwltb3YJJHB0ciwjMAorCisuTGVuY19rZXlfYWJvcnQ6CisJbW92CXgwLCRwdHIJCQkvLyByZXR1cm4gdmFsdWUKKwlgImxkcgl4MjksW3NwXSwjMTYiCQlpZiAoJGZsYXZvdXIgPX4gLzY0LylgCisJcmV0Cisuc2l6ZQkke3ByZWZpeH1fc2V0X2VuY3J5cHRfa2V5LC4tJHtwcmVmaXh9X3NldF9lbmNyeXB0X2tleQorCisuZ2xvYmwJJHtwcmVmaXh9X3NldF9kZWNyeXB0X2tleQorLnR5cGUJJHtwcmVmaXh9X3NldF9kZWNyeXB0X2tleSwlZnVuY3Rpb24KKy5hbGlnbgk1Ciske3ByZWZpeH1fc2V0X2RlY3J5cHRfa2V5OgorX19fCiskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyID1+IC82NC8pOworCXN0cAl4MjkseDMwLFtzcCwjLTE2XSEKKwlhZGQJeDI5LHNwLCMwCitfX18KKyRjb2RlLj08PF9fXwlpZiAoJGZsYXZvdXIgIX4gLzY0Lyk7CisJc3RtZGIJc3AhLHtyNCxscn0KK19fXworJGNvZGUuPTw8X19fOworCWJsCS5MZW5jX2tleQorCisJY21wCXgwLCMwCisJYi5uZQkuTGRlY19rZXlfYWJvcnQKKworCXN1Ygkkb3V0LCRvdXQsIzI0MAkJLy8gcmVzdG9yZSBvcmlnaW5hbCAkb3V0CisJbW92CXg0LCMtMTYKKwlhZGQJJGlucCwkb3V0LHgxMixsc2wjNAkvLyBlbmQgb2Yga2V5IHNjaGVkdWxlCisKKwl2bGQxLjMyCXt2MC4xNmJ9LFskb3V0XQorCXZsZDEuMzIJe3YxLjE2Yn0sWyRpbnBdCisJdnN0MS4zMgl7djAuMTZifSxbJGlucF0seDQKKwl2c3QxLjMyCXt2MS4xNmJ9LFskb3V0XSwjMTYKKworLkxvb3BfaW1jOgorCXZsZDEuMzIJe3YwLjE2Yn0sWyRvdXRdCisJdmxkMS4zMgl7djEuMTZifSxbJGlucF0KKwlhZXNpbWMJdjAuMTZiLHYwLjE2YgorCWFlc2ltYwl2MS4xNmIsdjEuMTZiCisJdnN0MS4zMgl7djAuMTZifSxbJGlucF0seDQKKwl2c3QxLjMyCXt2MS4xNmJ9LFskb3V0XSwjMTYKKwljbXAJJGlucCwkb3V0CisJYi5oaQkuTG9vcF9pbWMKKworCXZsZDEuMzIJe3YwLjE2Yn0sWyRvdXRdCisJYWVzaW1jCXYwLjE2Yix2MC4xNmIKKwl2c3QxLjMyCXt2MC4xNmJ9LFskaW5wXQorCisJZW9yCXgwLHgwLHgwCQkvLyByZXR1cm4gdmFsdWUKKy5MZGVjX2tleV9hYm9ydDoKK19fXworJGNvZGUuPTw8X19fCWlmICgkZmxhdm91ciAhfiAvNjQvKTsKKwlsZG1pYQlzcCEse3I0LHBjfQorX19fCiskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyID1+IC82NC8pOworCWxkcAl4MjkseDMwLFtzcF0sIzE2CisJcmV0CitfX18KKyRjb2RlLj08PF9fXzsKKy5zaXplCSR7cHJlZml4fV9zZXRfZGVjcnlwdF9rZXksLi0ke3ByZWZpeH1fc2V0X2RlY3J5cHRfa2V5CitfX18KK319fQore3t7CitzdWIgZ2VuX2Jsb2NrICgpIHsKK215ICRkaXIgPSBzaGlmdDsKK215ICgkZSwkbWMpID0gJGRpciBlcSAiZW4iID8gKCJlIiwibWMiKSA6ICgiZCIsImltYyIpOworbXkgKCRpbnAsJG91dCwka2V5KT1tYXAoIngkXyIsKDAuLjIpKTsKK215ICRyb3VuZHM9InczIjsKK215ICgkcm5ka2V5MCwkcm5ka2V5MSwkaW5vdXQpPW1hcCgicSRfIiwoMC4uMykpOworCiskY29kZS49PDxfX187CisuZ2xvYmwJJHtwcmVmaXh9XyR7ZGlyfWNyeXB0CisudHlwZQkke3ByZWZpeH1fJHtkaXJ9Y3J5cHQsJWZ1bmN0aW9uCisuYWxpZ24JNQorJHtwcmVmaXh9XyR7ZGlyfWNyeXB0OgorCWxkcgkkcm91bmRzLFska2V5LCMyNDBdCisJdmxkMS4zMgl7JHJuZGtleTB9LFska2V5XSwjMTYKKwl2bGQxLjgJeyRpbm91dH0sWyRpbnBdCisJc3ViCSRyb3VuZHMsJHJvdW5kcywjMgorCXZsZDEuMzIJeyRybmRrZXkxfSxbJGtleV0sIzE2CisKKy5Mb29wXyR7ZGlyfWM6CisJYWVzJGUJJGlub3V0LCRybmRrZXkwCisJdmxkMS4zMgl7JHJuZGtleTB9LFska2V5XSwjMTYKKwlhZXMkbWMJJGlub3V0LCRpbm91dAorCXN1YnMJJHJvdW5kcywkcm91bmRzLCMyCisJYWVzJGUJJGlub3V0LCRybmRrZXkxCisJdmxkMS4zMgl7JHJuZGtleTF9LFska2V5XSwjMTYKKwlhZXMkbWMJJGlub3V0LCRpbm91dAorCWIuZ3QJLkxvb3BfJHtkaXJ9YworCisJYWVzJGUJJGlub3V0LCRybmRrZXkwCisJdmxkMS4zMgl7JHJuZGtleTB9LFska2V5XQorCWFlcyRtYwkkaW5vdXQsJGlub3V0CisJYWVzJGUJJGlub3V0LCRybmRrZXkxCisJdmVvcgkkaW5vdXQsJGlub3V0LCRybmRrZXkwCisKKwl2c3QxLjgJeyRpbm91dH0sWyRvdXRdCisJcmV0Cisuc2l6ZQkke3ByZWZpeH1fJHtkaXJ9Y3J5cHQsLi0ke3ByZWZpeH1fJHtkaXJ9Y3J5cHQKK19fXworfQorJmdlbl9ibG9jaygiZW4iKTsKKyZnZW5fYmxvY2soImRlIik7Cit9fX0KK3t7eworbXkgKCRpbnAsJG91dCwkbGVuLCRrZXksJGl2cCk9bWFwKCJ4JF8iLCgwLi40KSk7IG15ICRlbmM9Inc1IjsKK215ICgkcm91bmRzLCRjbnQsJGtleV8sJHN0ZXAsJHN0ZXAxKT0oJGVuYywidzYiLCJ4NyIsIng4IiwieDEyIik7CitteSAoJGRhdDAsJGRhdDEsJGluMCwkaW4xLCR0bXAwLCR0bXAxLCRpdmVjLCRybmRsYXN0KT1tYXAoInEkXyIsKDAuLjcpKTsKKworbXkgKCRkYXQsJHRtcCwkcm5kemVyb19uX2xhc3QpPSgkZGF0MCwkdG1wMCwkdG1wMSk7CisKKyMjIyBxOC1xMTUJcHJlbG9hZGVkIGtleSBzY2hlZHVsZQorCiskY29kZS49PDxfX187CisuZ2xvYmwJJHtwcmVmaXh9X2NiY19lbmNyeXB0CisudHlwZQkke3ByZWZpeH1fY2JjX2VuY3J5cHQsJWZ1bmN0aW9uCisuYWxpZ24JNQorJHtwcmVmaXh9X2NiY19lbmNyeXB0OgorX19fCiskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyID1+IC82NC8pOworCXN0cAl4MjkseDMwLFtzcCwjLTE2XSEKKwlhZGQJeDI5LHNwLCMwCitfX18KKyRjb2RlLj08PF9fXwlpZiAoJGZsYXZvdXIgIX4gLzY0Lyk7CisJbW92CWlwLHNwCisJc3RtZGIJc3AhLHtyNC1yOCxscn0KKwl2c3RtZGIJc3AhLHtkOC1kMTV9ICAgICAgICAgICAgQCBBQkkgc3BlY2lmaWNhdGlvbiBzYXlzIHNvCisJbGRtaWEJaXAse3I0LXI1fQkJQCBsb2FkIHJlbWFpbmluZyBhcmdzCitfX18KKyRjb2RlLj08PF9fXzsKKwlzdWJzCSRsZW4sJGxlbiwjMTYKKwltb3YJJHN0ZXAsIzE2CisJYi5sbwkuTGNiY19hYm9ydAorCWNjbHIJJHN0ZXAsZXEKKworCWNtcAkkZW5jLCMwCQkJLy8gZW4tIG9yIGRlY3J5cHRpbmc/CisJbGRyCSRyb3VuZHMsWyRrZXksIzI0MF0KKwlhbmQJJGxlbiwkbGVuLCMtMTYKKwl2bGQxLjgJeyRpdmVjfSxbJGl2cF0KKwl2bGQxLjgJeyRkYXR9LFskaW5wXSwkc3RlcAorCisJdmxkMS4zMgl7cTgtcTl9LFska2V5XQkJLy8gbG9hZCBrZXkgc2NoZWR1bGUuLi4KKwlzdWIJJHJvdW5kcywkcm91bmRzLCM2CisJYWRkCSRrZXlfLCRrZXkseDUsbHNsIzQJLy8gcG9pbnRlciB0byBsYXN0IDcgcm91bmQga2V5cworCXN1Ygkkcm91bmRzLCRyb3VuZHMsIzIKKwl2bGQxLjMyCXtxMTAtcTExfSxbJGtleV9dLCMzMgorCXZsZDEuMzIJe3ExMi1xMTN9LFska2V5X10sIzMyCisJdmxkMS4zMgl7cTE0LXExNX0sWyRrZXlfXSwjMzIKKwl2bGQxLjMyCXskcm5kbGFzdH0sWyRrZXlfXQorCisJYWRkCSRrZXlfLCRrZXksIzMyCisJbW92CSRjbnQsJHJvdW5kcworCWIuZXEJLkxjYmNfZGVjCisKKwljbXAJJHJvdW5kcywjMgorCXZlb3IJJGRhdCwkZGF0LCRpdmVjCisJdmVvcgkkcm5kemVyb19uX2xhc3QscTgsJHJuZGxhc3QKKwliLmVxCS5MY2JjX2VuYzEyOAorCisuTG9vcF9jYmNfZW5jOgorCWFlc2UJJGRhdCxxOAorCXZsZDEuMzIJe3E4fSxbJGtleV9dLCMxNgorCWFlc21jCSRkYXQsJGRhdAorCXN1YnMJJGNudCwkY250LCMyCisJYWVzZQkkZGF0LHE5CisJdmxkMS4zMgl7cTl9LFska2V5X10sIzE2CisJYWVzbWMJJGRhdCwkZGF0CisJYi5ndAkuTG9vcF9jYmNfZW5jCisKKwlhZXNlCSRkYXQscTgKKwlhZXNtYwkkZGF0LCRkYXQKKwkgc3VicwkkbGVuLCRsZW4sIzE2CisJYWVzZQkkZGF0LHE5CisJYWVzbWMJJGRhdCwkZGF0CisJIGNjbHIJJHN0ZXAsZXEKKwlhZXNlCSRkYXQscTEwCisJYWVzbWMJJGRhdCwkZGF0CisJIGFkZAkka2V5Xywka2V5LCMxNgorCWFlc2UJJGRhdCxxMTEKKwlhZXNtYwkkZGF0LCRkYXQKKwkgdmxkMS44CXtxOH0sWyRpbnBdLCRzdGVwCisJYWVzZQkkZGF0LHExMgorCWFlc21jCSRkYXQsJGRhdAorCSB2ZW9yCXE4LHE4LCRybmR6ZXJvX25fbGFzdAorCWFlc2UJJGRhdCxxMTMKKwlhZXNtYwkkZGF0LCRkYXQKKwkgdmxkMS4zMiB7cTl9LFska2V5X10sIzE2CS8vIHJlLXByZS1sb2FkIHJuZGtleVsxXQorCWFlc2UJJGRhdCxxMTQKKwlhZXNtYwkkZGF0LCRkYXQKKwlhZXNlCSRkYXQscTE1CisKKwkgbW92CSRjbnQsJHJvdW5kcworCXZlb3IJJGl2ZWMsJGRhdCwkcm5kbGFzdAorCXZzdDEuOAl7JGl2ZWN9LFskb3V0XSwjMTYKKwliLmhzCS5Mb29wX2NiY19lbmMKKworCWIJLkxjYmNfZG9uZQorCisuYWxpZ24JNQorLkxjYmNfZW5jMTI4OgorCXZsZDEuMzIJeyRpbjAtJGluMX0sWyRrZXlfXQorCWFlc2UJJGRhdCxxOAorCWFlc21jCSRkYXQsJGRhdAorCWIJLkxlbnRlcl9jYmNfZW5jMTI4CisuTG9vcF9jYmNfZW5jMTI4OgorCWFlc2UJJGRhdCxxOAorCWFlc21jCSRkYXQsJGRhdAorCSB2c3QxLjgJeyRpdmVjfSxbJG91dF0sIzE2CisuTGVudGVyX2NiY19lbmMxMjg6CisJYWVzZQkkZGF0LHE5CisJYWVzbWMJJGRhdCwkZGF0CisJIHN1YnMJJGxlbiwkbGVuLCMxNgorCWFlc2UJJGRhdCwkaW4wCisJYWVzbWMJJGRhdCwkZGF0CisJIGNjbHIJJHN0ZXAsZXEKKwlhZXNlCSRkYXQsJGluMQorCWFlc21jCSRkYXQsJGRhdAorCWFlc2UJJGRhdCxxMTAKKwlhZXNtYwkkZGF0LCRkYXQKKwlhZXNlCSRkYXQscTExCisJYWVzbWMJJGRhdCwkZGF0CisJIHZsZDEuOAl7cTh9LFskaW5wXSwkc3RlcAorCWFlc2UJJGRhdCxxMTIKKwlhZXNtYwkkZGF0LCRkYXQKKwlhZXNlCSRkYXQscTEzCisJYWVzbWMJJGRhdCwkZGF0CisJYWVzZQkkZGF0LHExNAorCWFlc21jCSRkYXQsJGRhdAorCSB2ZW9yCXE4LHE4LCRybmR6ZXJvX25fbGFzdAorCWFlc2UJJGRhdCxxMTUKKwl2ZW9yCSRpdmVjLCRkYXQsJHJuZGxhc3QKKwliLmhzCS5Mb29wX2NiY19lbmMxMjgKKworCXZzdDEuOAl7JGl2ZWN9LFskb3V0XSwjMTYKKwliCS5MY2JjX2RvbmUKK19fXworeworbXkgKCRkYXQyLCRpbjIsJHRtcDIpPW1hcCgicSRfIiwoMTAsMTEsOSkpOworJGNvZGUuPTw8X19fOworLmFsaWduCTUKKy5MY2JjX2RlYzoKKwl2bGQxLjgJeyRkYXQyfSxbJGlucF0sIzE2CisJc3VicwkkbGVuLCRsZW4sIzMyCQkvLyBiaWFzCisJYWRkCSRjbnQsJHJvdW5kcywjMgorCXZvcnIJJGluMSwkZGF0LCRkYXQKKwl2b3JyCSRkYXQxLCRkYXQsJGRhdAorCXZvcnIJJGluMiwkZGF0MiwkZGF0MgorCWIubG8JLkxjYmNfZGVjX3RhaWwKKworCXZvcnIJJGRhdDEsJGRhdDIsJGRhdDIKKwl2bGQxLjgJeyRkYXQyfSxbJGlucF0sIzE2CisJdm9ycgkkaW4wLCRkYXQsJGRhdAorCXZvcnIJJGluMSwkZGF0MSwkZGF0MQorCXZvcnIJJGluMiwkZGF0MiwkZGF0MgorCisuTG9vcDN4X2NiY19kZWM6CisJYWVzZAkkZGF0MCxxOAorCWFlc2QJJGRhdDEscTgKKwlhZXNkCSRkYXQyLHE4CisJdmxkMS4zMgl7cTh9LFska2V5X10sIzE2CisJYWVzaW1jCSRkYXQwLCRkYXQwCisJYWVzaW1jCSRkYXQxLCRkYXQxCisJYWVzaW1jCSRkYXQyLCRkYXQyCisJc3VicwkkY250LCRjbnQsIzIKKwlhZXNkCSRkYXQwLHE5CisJYWVzZAkkZGF0MSxxOQorCWFlc2QJJGRhdDIscTkKKwl2bGQxLjMyCXtxOX0sWyRrZXlfXSwjMTYKKwlhZXNpbWMJJGRhdDAsJGRhdDAKKwlhZXNpbWMJJGRhdDEsJGRhdDEKKwlhZXNpbWMJJGRhdDIsJGRhdDIKKwliLmd0CS5Mb29wM3hfY2JjX2RlYworCisJYWVzZAkkZGF0MCxxOAorCWFlc2QJJGRhdDEscTgKKwlhZXNkCSRkYXQyLHE4CisJIHZlb3IJJHRtcDAsJGl2ZWMsJHJuZGxhc3QKKwlhZXNpbWMJJGRhdDAsJGRhdDAKKwlhZXNpbWMJJGRhdDEsJGRhdDEKKwlhZXNpbWMJJGRhdDIsJGRhdDIKKwkgdmVvcgkkdG1wMSwkaW4wLCRybmRsYXN0CisJYWVzZAkkZGF0MCxxOQorCWFlc2QJJGRhdDEscTkKKwlhZXNkCSRkYXQyLHE5CisJIHZlb3IJJHRtcDIsJGluMSwkcm5kbGFzdAorCSBzdWJzCSRsZW4sJGxlbiwjMHgzMAorCWFlc2ltYwkkZGF0MCwkZGF0MAorCWFlc2ltYwkkZGF0MSwkZGF0MQorCWFlc2ltYwkkZGF0MiwkZGF0MgorCSB2b3JyCSRpdmVjLCRpbjIsJGluMgorCSBtb3YubG8JeDYsJGxlbgkJCS8vIHg2LCAkY250LCBpcyB6ZXJvIGF0IHRoaXMgcG9pbnQKKwlhZXNkCSRkYXQwLHExMgorCWFlc2QJJGRhdDEscTEyCisJYWVzZAkkZGF0MixxMTIKKwkgYWRkCSRpbnAsJGlucCx4NgkJLy8gJGlucCBpcyBhZGp1c3RlZCBpbiBzdWNoIHdheSB0aGF0CisJCQkJCS8vIGF0IGV4aXQgZnJvbSB0aGUgbG9vcCAkZGF0MS0kZGF0MgorCQkJCQkvLyBhcmUgbG9hZGVkIHdpdGggbGFzdCAid29yZHMiCisJYWVzaW1jCSRkYXQwLCRkYXQwCisJYWVzaW1jCSRkYXQxLCRkYXQxCisJYWVzaW1jCSRkYXQyLCRkYXQyCisJIG1vdgkka2V5Xywka2V5CisJYWVzZAkkZGF0MCxxMTMKKwlhZXNkCSRkYXQxLHExMworCWFlc2QJJGRhdDIscTEzCisJIHZsZDEuOAl7JGluMH0sWyRpbnBdLCMxNgorCWFlc2ltYwkkZGF0MCwkZGF0MAorCWFlc2ltYwkkZGF0MSwkZGF0MQorCWFlc2ltYwkkZGF0MiwkZGF0MgorCSB2bGQxLjgJeyRpbjF9LFskaW5wXSwjMTYKKwlhZXNkCSRkYXQwLHExNAorCWFlc2QJJGRhdDEscTE0CisJYWVzZAkkZGF0MixxMTQKKwkgdmxkMS44CXskaW4yfSxbJGlucF0sIzE2CisJYWVzaW1jCSRkYXQwLCRkYXQwCisJYWVzaW1jCSRkYXQxLCRkYXQxCisJYWVzaW1jCSRkYXQyLCRkYXQyCisJIHZsZDEuMzIge3E4fSxbJGtleV9dLCMxNgkvLyByZS1wcmUtbG9hZCBybmRrZXlbMF0KKwlhZXNkCSRkYXQwLHExNQorCWFlc2QJJGRhdDEscTE1CisJYWVzZAkkZGF0MixxMTUKKworCSBhZGQJJGNudCwkcm91bmRzLCMyCisJdmVvcgkkdG1wMCwkdG1wMCwkZGF0MAorCXZlb3IJJHRtcDEsJHRtcDEsJGRhdDEKKwl2ZW9yCSRkYXQyLCRkYXQyLCR0bXAyCisJIHZsZDEuMzIge3E5fSxbJGtleV9dLCMxNgkvLyByZS1wcmUtbG9hZCBybmRrZXlbMV0KKwkgdm9ycgkkZGF0MCwkaW4wLCRpbjAKKwl2c3QxLjgJeyR0bXAwfSxbJG91dF0sIzE2CisJIHZvcnIJJGRhdDEsJGluMSwkaW4xCisJdnN0MS44CXskdG1wMX0sWyRvdXRdLCMxNgorCXZzdDEuOAl7JGRhdDJ9LFskb3V0XSwjMTYKKwkgdm9ycgkkZGF0MiwkaW4yLCRpbjIKKwliLmhzCS5Mb29wM3hfY2JjX2RlYworCisJY21uCSRsZW4sIzB4MzAKKwliLmVxCS5MY2JjX2RvbmUKKwlub3AKKworLkxjYmNfZGVjX3RhaWw6CisJYWVzZAkkZGF0MSxxOAorCWFlc2QJJGRhdDIscTgKKwl2bGQxLjMyCXtxOH0sWyRrZXlfXSwjMTYKKwlhZXNpbWMJJGRhdDEsJGRhdDEKKwlhZXNpbWMJJGRhdDIsJGRhdDIKKwlzdWJzCSRjbnQsJGNudCwjMgorCWFlc2QJJGRhdDEscTkKKwlhZXNkCSRkYXQyLHE5CisJdmxkMS4zMgl7cTl9LFska2V5X10sIzE2CisJYWVzaW1jCSRkYXQxLCRkYXQxCisJYWVzaW1jCSRkYXQyLCRkYXQyCisJYi5ndAkuTGNiY19kZWNfdGFpbAorCisJYWVzZAkkZGF0MSxxOAorCWFlc2QJJGRhdDIscTgKKwlhZXNpbWMJJGRhdDEsJGRhdDEKKwlhZXNpbWMJJGRhdDIsJGRhdDIKKwlhZXNkCSRkYXQxLHE5CisJYWVzZAkkZGF0MixxOQorCWFlc2ltYwkkZGF0MSwkZGF0MQorCWFlc2ltYwkkZGF0MiwkZGF0MgorCWFlc2QJJGRhdDEscTEyCisJYWVzZAkkZGF0MixxMTIKKwlhZXNpbWMJJGRhdDEsJGRhdDEKKwlhZXNpbWMJJGRhdDIsJGRhdDIKKwkgY21uCSRsZW4sIzB4MjAKKwlhZXNkCSRkYXQxLHExMworCWFlc2QJJGRhdDIscTEzCisJYWVzaW1jCSRkYXQxLCRkYXQxCisJYWVzaW1jCSRkYXQyLCRkYXQyCisJIHZlb3IJJHRtcDEsJGl2ZWMsJHJuZGxhc3QKKwlhZXNkCSRkYXQxLHExNAorCWFlc2QJJGRhdDIscTE0CisJYWVzaW1jCSRkYXQxLCRkYXQxCisJYWVzaW1jCSRkYXQyLCRkYXQyCisJIHZlb3IJJHRtcDIsJGluMSwkcm5kbGFzdAorCWFlc2QJJGRhdDEscTE1CisJYWVzZAkkZGF0MixxMTUKKwliLmVxCS5MY2JjX2RlY19vbmUKKwl2ZW9yCSR0bXAxLCR0bXAxLCRkYXQxCisJdmVvcgkkdG1wMiwkdG1wMiwkZGF0MgorCSB2b3JyCSRpdmVjLCRpbjIsJGluMgorCXZzdDEuOAl7JHRtcDF9LFskb3V0XSwjMTYKKwl2c3QxLjgJeyR0bXAyfSxbJG91dF0sIzE2CisJYgkuTGNiY19kb25lCisKKy5MY2JjX2RlY19vbmU6CisJdmVvcgkkdG1wMSwkdG1wMSwkZGF0MgorCSB2b3JyCSRpdmVjLCRpbjIsJGluMgorCXZzdDEuOAl7JHRtcDF9LFskb3V0XSwjMTYKKworLkxjYmNfZG9uZToKKwl2c3QxLjgJeyRpdmVjfSxbJGl2cF0KKy5MY2JjX2Fib3J0OgorX19fCit9CiskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyICF+IC82NC8pOworCXZsZG1pYQlzcCEse2Q4LWQxNX0KKwlsZG1pYQlzcCEse3I0LXI4LHBjfQorX19fCiskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyID1+IC82NC8pOworCWxkcgl4MjksW3NwXSwjMTYKKwlyZXQKK19fXworJGNvZGUuPTw8X19fOworLnNpemUJJHtwcmVmaXh9X2NiY19lbmNyeXB0LC4tJHtwcmVmaXh9X2NiY19lbmNyeXB0CitfX18KK319fQore3t7CitteSAoJGlucCwkb3V0LCRsZW4sJGtleSwkaXZwKT1tYXAoIngkXyIsKDAuLjQpKTsKK215ICgkcm91bmRzLCRjbnQsJGtleV8pPSgidzUiLCJ3NiIsIng3Iik7CitteSAoJGN0ciwkdGN0cjAsJHRjdHIxLCR0Y3RyMik9bWFwKCJ3JF8iLCg4Li4xMCwxMikpOworbXkgJHN0ZXA9IngxMiI7CQkjIGFsaWFzZXMgd2l0aCAkdGN0cjIKKworbXkgKCRkYXQwLCRkYXQxLCRpbjAsJGluMSwkdG1wMCwkdG1wMSwkaXZlYywkcm5kbGFzdCk9bWFwKCJxJF8iLCgwLi43KSk7CitteSAoJGRhdDIsJGluMiwkdG1wMik9bWFwKCJxJF8iLCgxMCwxMSw5KSk7CisKK215ICgkZGF0LCR0bXApPSgkZGF0MCwkdG1wMCk7CisKKyMjIyBxOC1xMTUJcHJlbG9hZGVkIGtleSBzY2hlZHVsZQorCiskY29kZS49PDxfX187CisuZ2xvYmwJJHtwcmVmaXh9X2N0cjMyX2VuY3J5cHRfYmxvY2tzCisudHlwZQkke3ByZWZpeH1fY3RyMzJfZW5jcnlwdF9ibG9ja3MsJWZ1bmN0aW9uCisuYWxpZ24JNQorJHtwcmVmaXh9X2N0cjMyX2VuY3J5cHRfYmxvY2tzOgorX19fCiskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyID1+IC82NC8pOworCXN0cAkJeDI5LHgzMCxbc3AsIy0xNl0hCisJYWRkCQl4Mjksc3AsIzAKK19fXworJGNvZGUuPTw8X19fCWlmICgkZmxhdm91ciAhfiAvNjQvKTsKKwltb3YJCWlwLHNwCisJc3RtZGIJCXNwISx7cjQtcjEwLGxyfQorCXZzdG1kYgkJc3AhLHtkOC1kMTV9ICAgICAgICAgICAgQCBBQkkgc3BlY2lmaWNhdGlvbiBzYXlzIHNvCisJbGRyCQlyNCwgW2lwXQkJQCBsb2FkIHJlbWFpbmluZyBhcmcKK19fXworJGNvZGUuPTw8X19fOworCWxkcgkJJHJvdW5kcyxbJGtleSwjMjQwXQorCisJbGRyCQkkY3RyLCBbJGl2cCwgIzEyXQorCXZsZDEuMzIJCXskZGF0MH0sWyRpdnBdCisKKwl2bGQxLjMyCQl7cTgtcTl9LFska2V5XQkJLy8gbG9hZCBrZXkgc2NoZWR1bGUuLi4KKwlzdWIJCSRyb3VuZHMsJHJvdW5kcywjNAorCW1vdgkJJHN0ZXAsIzE2CisJY21wCQkkbGVuLCMyCisJYWRkCQkka2V5Xywka2V5LHg1LGxzbCM0CS8vIHBvaW50ZXIgdG8gbGFzdCA1IHJvdW5kIGtleXMKKwlzdWIJCSRyb3VuZHMsJHJvdW5kcywjMgorCXZsZDEuMzIJCXtxMTItcTEzfSxbJGtleV9dLCMzMgorCXZsZDEuMzIJCXtxMTQtcTE1fSxbJGtleV9dLCMzMgorCXZsZDEuMzIJCXskcm5kbGFzdH0sWyRrZXlfXQorCWFkZAkJJGtleV8sJGtleSwjMzIKKwltb3YJCSRjbnQsJHJvdW5kcworCWNjbHIJCSRzdGVwLGxvCisjaWZuZGVmIF9fQVJNRUJfXworCXJldgkJJGN0ciwgJGN0cgorI2VuZGlmCisJdm9ycgkJJGRhdDEsJGRhdDAsJGRhdDAKKwlhZGQJCSR0Y3RyMSwgJGN0ciwgIzEKKwl2b3JyCQkkZGF0MiwkZGF0MCwkZGF0MAorCWFkZAkJJGN0ciwgJGN0ciwgIzIKKwl2b3JyCQkkaXZlYywkZGF0MCwkZGF0MAorCXJldgkJJHRjdHIxLCAkdGN0cjEKKwl2bW92LjMyCQkke2RhdDF9WzNdLCR0Y3RyMQorCWIubHMJCS5MY3RyMzJfdGFpbAorCXJldgkJJHRjdHIyLCAkY3RyCisJc3ViCQkkbGVuLCRsZW4sIzMJCS8vIGJpYXMKKwl2bW92LjMyCQkke2RhdDJ9WzNdLCR0Y3RyMgorCWIJCS5Mb29wM3hfY3RyMzIKKworLmFsaWduCTQKKy5Mb29wM3hfY3RyMzI6CisJYWVzZQkJJGRhdDAscTgKKwlhZXNlCQkkZGF0MSxxOAorCWFlc2UJCSRkYXQyLHE4CisJdmxkMS4zMgkJe3E4fSxbJGtleV9dLCMxNgorCWFlc21jCQkkZGF0MCwkZGF0MAorCWFlc21jCQkkZGF0MSwkZGF0MQorCWFlc21jCQkkZGF0MiwkZGF0MgorCXN1YnMJCSRjbnQsJGNudCwjMgorCWFlc2UJCSRkYXQwLHE5CisJYWVzZQkJJGRhdDEscTkKKwlhZXNlCQkkZGF0MixxOQorCXZsZDEuMzIJCXtxOX0sWyRrZXlfXSwjMTYKKwlhZXNtYwkJJGRhdDAsJGRhdDAKKwlhZXNtYwkJJGRhdDEsJGRhdDEKKwlhZXNtYwkJJGRhdDIsJGRhdDIKKwliLmd0CQkuTG9vcDN4X2N0cjMyCisKKwlhZXNlCQkkZGF0MCxxOAorCWFlc2UJCSRkYXQxLHE4CisJYWVzZQkJJGRhdDIscTgKKwkgbW92CQkka2V5Xywka2V5CisJYWVzbWMJCSR0bXAwLCRkYXQwCisJIHZsZDEuOAkJeyRpbjB9LFskaW5wXSwjMTYKKwlhZXNtYwkJJHRtcDEsJGRhdDEKKwlhZXNtYwkJJGRhdDIsJGRhdDIKKwkgdm9ycgkJJGRhdDAsJGl2ZWMsJGl2ZWMKKwlhZXNlCQkkdG1wMCxxOQorCSB2bGQxLjgJCXskaW4xfSxbJGlucF0sIzE2CisJYWVzZQkJJHRtcDEscTkKKwlhZXNlCQkkZGF0MixxOQorCSB2b3JyCQkkZGF0MSwkaXZlYywkaXZlYworCWFlc21jCQkkdG1wMCwkdG1wMAorCSB2bGQxLjgJCXskaW4yfSxbJGlucF0sIzE2CisJYWVzbWMJCSR0bXAxLCR0bXAxCisJYWVzbWMJCSR0bXAyLCRkYXQyCisJIHZvcnIJCSRkYXQyLCRpdmVjLCRpdmVjCisJIGFkZAkJJHRjdHIwLCRjdHIsIzEKKwlhZXNlCQkkdG1wMCxxMTIKKwlhZXNlCQkkdG1wMSxxMTIKKwlhZXNlCQkkdG1wMixxMTIKKwkgdmVvcgkJJGluMCwkaW4wLCRybmRsYXN0CisJIGFkZAkJJHRjdHIxLCRjdHIsIzIKKwlhZXNtYwkJJHRtcDAsJHRtcDAKKwlhZXNtYwkJJHRtcDEsJHRtcDEKKwlhZXNtYwkJJHRtcDIsJHRtcDIKKwkgdmVvcgkJJGluMSwkaW4xLCRybmRsYXN0CisJIGFkZAkJJGN0ciwkY3RyLCMzCisJYWVzZQkJJHRtcDAscTEzCisJYWVzZQkJJHRtcDEscTEzCisJYWVzZQkJJHRtcDIscTEzCisJIHZlb3IJCSRpbjIsJGluMiwkcm5kbGFzdAorCSByZXYJCSR0Y3RyMCwkdGN0cjAKKwlhZXNtYwkJJHRtcDAsJHRtcDAKKwkgdmxkMS4zMgkge3E4fSxbJGtleV9dLCMxNgkvLyByZS1wcmUtbG9hZCBybmRrZXlbMF0KKwlhZXNtYwkJJHRtcDEsJHRtcDEKKwlhZXNtYwkJJHRtcDIsJHRtcDIKKwkgdm1vdi4zMgkke2RhdDB9WzNdLCAkdGN0cjAKKwkgcmV2CQkkdGN0cjEsJHRjdHIxCisJYWVzZQkJJHRtcDAscTE0CisJYWVzZQkJJHRtcDEscTE0CisJYWVzZQkJJHRtcDIscTE0CisJIHZtb3YuMzIJJHtkYXQxfVszXSwgJHRjdHIxCisJIHJldgkJJHRjdHIyLCRjdHIKKwlhZXNtYwkJJHRtcDAsJHRtcDAKKwlhZXNtYwkJJHRtcDEsJHRtcDEKKwlhZXNtYwkJJHRtcDIsJHRtcDIKKwkgdm1vdi4zMgkke2RhdDJ9WzNdLCAkdGN0cjIKKwkgc3VicwkJJGxlbiwkbGVuLCMzCisJYWVzZQkJJHRtcDAscTE1CisJYWVzZQkJJHRtcDEscTE1CisJYWVzZQkJJHRtcDIscTE1CisKKwkgbW92CQkkY250LCRyb3VuZHMKKwl2ZW9yCQkkaW4wLCRpbjAsJHRtcDAKKwl2ZW9yCQkkaW4xLCRpbjEsJHRtcDEKKwl2ZW9yCQkkaW4yLCRpbjIsJHRtcDIKKwkgdmxkMS4zMgkge3E5fSxbJGtleV9dLCMxNgkvLyByZS1wcmUtbG9hZCBybmRrZXlbMV0KKwl2c3QxLjgJCXskaW4wfSxbJG91dF0sIzE2CisJdnN0MS44CQl7JGluMX0sWyRvdXRdLCMxNgorCXZzdDEuOAkJeyRpbjJ9LFskb3V0XSwjMTYKKwliLmhzCQkuTG9vcDN4X2N0cjMyCisKKwlhZGRzCQkkbGVuLCRsZW4sIzMKKwliLmVxCQkuTGN0cjMyX2RvbmUKKwljbXAJCSRsZW4sIzEKKwltb3YJCSRzdGVwLCMxNgorCWNjbHIJCSRzdGVwLGVxCisKKy5MY3RyMzJfdGFpbDoKKwlhZXNlCQkkZGF0MCxxOAorCWFlc2UJCSRkYXQxLHE4CisJdmxkMS4zMgkJe3E4fSxbJGtleV9dLCMxNgorCWFlc21jCQkkZGF0MCwkZGF0MAorCWFlc21jCQkkZGF0MSwkZGF0MQorCXN1YnMJCSRjbnQsJGNudCwjMgorCWFlc2UJCSRkYXQwLHE5CisJYWVzZQkJJGRhdDEscTkKKwl2bGQxLjMyCQl7cTl9LFska2V5X10sIzE2CisJYWVzbWMJCSRkYXQwLCRkYXQwCisJYWVzbWMJCSRkYXQxLCRkYXQxCisJYi5ndAkJLkxjdHIzMl90YWlsCisKKwlhZXNlCQkkZGF0MCxxOAorCWFlc2UJCSRkYXQxLHE4CisJYWVzbWMJCSRkYXQwLCRkYXQwCisJYWVzbWMJCSRkYXQxLCRkYXQxCisJYWVzZQkJJGRhdDAscTkKKwlhZXNlCQkkZGF0MSxxOQorCWFlc21jCQkkZGF0MCwkZGF0MAorCWFlc21jCQkkZGF0MSwkZGF0MQorCSB2bGQxLjgJCXskaW4wfSxbJGlucF0sJHN0ZXAKKwlhZXNlCQkkZGF0MCxxMTIKKwlhZXNlCQkkZGF0MSxxMTIKKwkgdmxkMS44CQl7JGluMX0sWyRpbnBdCisJYWVzbWMJCSRkYXQwLCRkYXQwCisJYWVzbWMJCSRkYXQxLCRkYXQxCisJYWVzZQkJJGRhdDAscTEzCisJYWVzZQkJJGRhdDEscTEzCisJYWVzbWMJCSRkYXQwLCRkYXQwCisJYWVzbWMJCSRkYXQxLCRkYXQxCisJYWVzZQkJJGRhdDAscTE0CisJYWVzZQkJJGRhdDEscTE0CisJIHZlb3IJCSRpbjAsJGluMCwkcm5kbGFzdAorCWFlc21jCQkkZGF0MCwkZGF0MAorCWFlc21jCQkkZGF0MSwkZGF0MQorCSB2ZW9yCQkkaW4xLCRpbjEsJHJuZGxhc3QKKwlhZXNlCQkkZGF0MCxxMTUKKwlhZXNlCQkkZGF0MSxxMTUKKworCWNtcAkJJGxlbiwjMQorCXZlb3IJCSRpbjAsJGluMCwkZGF0MAorCXZlb3IJCSRpbjEsJGluMSwkZGF0MQorCXZzdDEuOAkJeyRpbjB9LFskb3V0XSwjMTYKKwliLmVxCQkuTGN0cjMyX2RvbmUKKwl2c3QxLjgJCXskaW4xfSxbJG91dF0KKworLkxjdHIzMl9kb25lOgorX19fCiskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyICF+IC82NC8pOworCXZsZG1pYQkJc3AhLHtkOC1kMTV9CisJbGRtaWEJCXNwISx7cjQtcjEwLHBjfQorX19fCiskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyID1+IC82NC8pOworCWxkcgkJeDI5LFtzcF0sIzE2CisJcmV0CitfX18KKyRjb2RlLj08PF9fXzsKKy5zaXplCSR7cHJlZml4fV9jdHIzMl9lbmNyeXB0X2Jsb2NrcywuLSR7cHJlZml4fV9jdHIzMl9lbmNyeXB0X2Jsb2NrcworX19fCit9fX0KKyRjb2RlLj08PF9fXzsKKyNlbmRpZgorX19fCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZiAoJGZsYXZvdXIgPX4gLzY0LykgewkJCSMjIyMjIyMjIDY0LWJpdCBjb2RlCisgICAgbXkgJW9wY29kZSA9ICgKKwkiYWVzZCIJPT4JMHg0ZTI4NTgwMCwJImFlc2UiCT0+CTB4NGUyODQ4MDAsCisJImFlc2ltYyI9PgkweDRlMjg3ODAwLAkiYWVzbWMiCT0+CTB4NGUyODY4MDAJKTsKKworICAgIGxvY2FsICp1bmFlcyA9IHN1YiB7CisJbXkgKCRtbmVtb25pYywkYXJnKT1AXzsKKworCSRhcmcgPX4gbS9bcXZdKFswLTldKylbXixdKixccypbcXZdKFswLTldKykvbwkmJgorCXNwcmludGYgIi5pbnN0XHQweCUwOHhcdC8vJXMgJXMiLAorCQkJJG9wY29kZXskbW5lbW9uaWN9fCQxfCgkMjw8NSksCisJCQkkbW5lbW9uaWMsJGFyZzsKKyAgICB9OworCisgICAgZm9yZWFjaChzcGxpdCgiXG4iLCRjb2RlKSkgeworCXMvXGAoW15cYF0qKVxgL2V2YWwoJDEpL2dlbzsKKworCXMvXGJxKFswLTldKylcYi8idiIuKCQxPDg/JDE6JDErOCkuIi4xNmIiL2dlbzsJIyBvbGQtPm5ldyByZWdpc3RlcnMKKwlzL0Bccy9cL1wvL287CQkJIyBvbGQtPm5ldyBzdHlsZSBjb21tZW50YXJ5CisKKwkjcy9bdl0/KGFlc1x3KylccysoW3F2XS4qKS91bmFlcygkMSwkMikvZ2VvCW9yCisJcy9jY2xyXHMrKFt3eF0pKFteLF0rKSxccyooW2Etel0rKS9jc2VsCSQxJDIsJDF6ciwkMSQyLCQzL28Jb3IKKwlzL21vdlwuKFthLXpdKylccysoW3d4XVswLTldKyksXHMqKFt3eF1bMC05XSspL2NzZWwJJDIsJDMsJDIsJDEvbwlvcgorCXMvdm1vdlwuaTgvbW92aS9vCW9yCSMgZml4IHVwIGxlZ2FjeSBtbmVtb25pY3MKKwlzL3ZleHRcLjgvZXh0L28JCW9yCisJcy92cmV2MzJcLjgvcmV2MzIvbwlvcgorCXMvdnRzdFwuOC9jbXRzdC9vCW9yCisJcy92c2hyL3VzaHIvbwkJb3IKKwlzL14oXHMrKXYvJDEvbwkJb3IJIyBzdHJpcCBvZmYgdiBwcmVmaXgKKwlzL1xiYnhccytsclxiL3JldC9vOworCisJIyBmaXggdXAgcmVtYWluaWcgbGVnYWN5IHN1ZmZpeGVzCisJcy9cLlt1aV0/OC8vbzsKKwltL1xdLCM4L28gYW5kIHMvXC4xNmIvXC44Yi9nbzsKKwlzL1wuW3VpXT8zMi8vbyBhbmQgcy9cLjE2Yi9cLjRzL2dvOworCXMvXC5bdWldPzY0Ly9vIGFuZCBzL1wuMTZiL1wuMmQvZ287CisJcy9cLls0Ml0oW3NkXSlcWyhbMC0zXSlcXS9cLiQxXFskMlxdL287CisKKwlwcmludCAkXywiXG4iOworICAgIH0KK30gZWxzZSB7CQkJCSMjIyMjIyMjIDMyLWJpdCBjb2RlCisgICAgbXkgJW9wY29kZSA9ICgKKwkiYWVzZCIJPT4JMHhmM2IwMDM0MCwJImFlc2UiCT0+CTB4ZjNiMDAzMDAsCisJImFlc2ltYyI9PgkweGYzYjAwM2MwLAkiYWVzbWMiCT0+CTB4ZjNiMDAzODAJKTsKKworICAgIGxvY2FsICp1bmFlcyA9IHN1YiB7CisJbXkgKCRtbmVtb25pYywkYXJnKT1AXzsKKworCWlmICgkYXJnID1+IG0vW3F2XShbMC05XSspW14sXSosXHMqW3F2XShbMC05XSspL28pIHsKKwkgICAgbXkgJHdvcmQgPSAkb3Bjb2RleyRtbmVtb25pY318KCgkMSY3KTw8MTMpfCgoJDEmOCk8PDE5KQorCQkJCQkgfCgoJDImNyk8PDEpIHwoKCQyJjgpPDwyKTsKKwkgICAgIyBzaW5jZSBBUk12NyBpbnN0cnVjdGlvbnMgYXJlIGFsd2F5cyBlbmNvZGVkIGxpdHRsZS1lbmRpYW4uCisJICAgICMgY29ycmVjdCBzb2x1dGlvbiBpcyB0byB1c2UgLmluc3QgZGlyZWN0aXZlLCBidXQgb2xkZXIKKwkgICAgIyBhc3NlbWJsZXJzIGRvbid0IGltcGxlbWVudCBpdDotKAorCSAgICBzcHJpbnRmICIuYnl0ZVx0MHglMDJ4LDB4JTAyeCwweCUwMngsMHglMDJ4XHRAICVzICVzIiwKKwkJCSR3b3JkJjB4ZmYsKCR3b3JkPj44KSYweGZmLAorCQkJKCR3b3JkPj4xNikmMHhmZiwoJHdvcmQ+PjI0KSYweGZmLAorCQkJJG1uZW1vbmljLCRhcmc7CisJfQorICAgIH07CisKKyAgICBzdWIgdW52dGJsIHsKKwlteSAkYXJnPXNoaWZ0OworCisJJGFyZyA9fiBtL3EoWzAtOV0rKSxccypce3EoWzAtOV0rKVx9LFxzKnEoWzAtOV0rKS9vICYmCisJc3ByaW50ZgkidnRibC44CWQlZCx7cSVkfSxkJWRcblx0Ii4KKwkJInZ0YmwuOAlkJWQse3ElZH0sZCVkIiwgMiokMSwkMiwyKiQzLCAyKiQxKzEsJDIsMiokMysxOwkKKyAgICB9CisKKyAgICBzdWIgdW52ZHVwMzIgeworCW15ICRhcmc9c2hpZnQ7CisKKwkkYXJnID1+IG0vcShbMC05XSspLFxzKnEoWzAtOV0rKVxbKFswLTNdKVxdL28gJiYKKwlzcHJpbnRmCSJ2ZHVwLjMyCXElZCxkJWRbJWRdIiwkMSwyKiQyKygkMz4+MSksJDMmMTsJCisgICAgfQorCisgICAgc3ViIHVudm1vdjMyIHsKKwlteSAkYXJnPXNoaWZ0OworCisJJGFyZyA9fiBtL3EoWzAtOV0rKVxbKFswLTNdKVxdLCguKikvbyAmJgorCXNwcmludGYJInZtb3YuMzIJZCVkWyVkXSwlcyIsMiokMSsoJDI+PjEpLCQyJjEsJDM7CQorICAgIH0KKworICAgIGZvcmVhY2goc3BsaXQoIlxuIiwkY29kZSkpIHsKKwlzL1xgKFteXGBdKilcYC9ldmFsKCQxKS9nZW87CisKKwlzL1xiW3d4XShbMC05XSspXGIvciQxL2dvOwkJIyBuZXctPm9sZCByZWdpc3RlcnMKKwlzL1xidihbMC05XSlcLlsxMjQ2OF0rW2JzZF1cYi9xJDEvZ287CSMgbmV3LT5vbGQgcmVnaXN0ZXJzCisJcy9cL1wvXHM/L0AgL287CQkJCSMgbmV3LT5vbGQgc3R5bGUgY29tbWVudGFyeQorCisJIyBmaXggdXAgcmVtYWluaWcgbmV3LXN0eWxlIHN1ZmZpeGVzCisJcy9ce3EoWzAtOV0rKVx9LFxzKlxbKC4rKVxdLCM4L3NwcmludGYgIntkJWR9LFskMl0hIiwyKiQxL2VvCW9yCisJcy9cXSwjWzAtOV0rL10hL287CisKKwlzL1t2XT8oYWVzXHcrKVxzKyhbcXZdLiopL3VuYWVzKCQxLCQyKS9nZW8Jb3IKKwlzL2NjbHJccysoW14sXSspLFxzKihbYS16XSspL21vdiQyCSQxLCMwL28Jb3IKKwlzL3Z0YmxcLjhccysoLiopL3VudnRibCgkMSkvZ2VvCQkJb3IKKwlzL3ZkdXBcLjMyXHMrKC4qKS91bnZkdXAzMigkMSkvZ2VvCQlvcgorCXMvdm1vdlwuMzJccysoLiopL3Vudm1vdjMyKCQxKS9nZW8JCW9yCisJcy9eKFxzKyliXC4vJDFiL28JCQkJb3IKKwlzL14oXHMrKW1vdlwuLyQxbW92L28JCQkJb3IKKwlzL14oXHMrKXJldC8kMWJ4XHRsci9vOworCisJcHJpbnQgJF8sIlxuIjsKKyAgICB9Cit9CisKK2Nsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL2NyeXB0by9hcm1fYXJjaC5oIGIvY3J5cHRvL2FybV9hcmNoLmgKaW5kZXggNTJlNmYzNC4uMDYwMGZiYiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FybV9hcmNoLmgKKysrIGIvY3J5cHRvL2FybV9hcmNoLmgKQEAgLTYyLDExICs2MiwyMiBAQAogIyAgIGRlZmluZSBfX0FSTUVMX18KICMgIGVuZGlmCiAjIGVsaWYgZGVmaW5lZChfX0dOVUNfXykKKyMgIGlmIGRlZmluZWQoX19hYXJjaDY0X18pCisjICAgIGRlZmluZSBfX0FSTV9BUkNIX18gOAorIyAgICBpZiBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXworIyAgICAgIGRlZmluZSBfX0FSTUVCX18KKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBfX0FSTUVMX18KKyMgICAgZW5kaWYKICAgLyogV2h5IGRvZXNuJ3QgZ2NjIGRlZmluZSBfX0FSTV9BUkNIX18/IEluc3RlYWQgaXQgZGVmaW5lcwogICAgKiBidW5jaCBvZiBiZWxvdyBtYWNyb3MuIFNlZSBhbGxfYXJjaGl0ZWN0aXJlc1tdIHRhYmxlIGluCiAgICAqIGdjYy9jb25maWcvYXJtL2FybS5jLiBPbiBhIHNpZGUgbm90ZSBpdCBkZWZpbmVzCiAgICAqIF9fQVJNRUxfXy9fX0FSTUVCX18gZm9yIGxpdHRsZS0vYmlnLWVuZGlhbi4gKi8KLSMgIGlmCWRlZmluZWQoX19BUk1fQVJDSF83X18pCXx8IGRlZmluZWQoX19BUk1fQVJDSF83QV9fKQl8fCBcCisjICBlbGlmCWRlZmluZWQoX19BUk1fQVJDSCkKKyMgICAgZGVmaW5lIF9fQVJNX0FSQ0hfXyBfX0FSTV9BUkNICisjICBlbGlmCWRlZmluZWQoX19BUk1fQVJDSF84QV9fKQorIyAgICBkZWZpbmUgX19BUk1fQVJDSF9fIDgKKyMgIGVsaWYJZGVmaW5lZChfX0FSTV9BUkNIXzdfXykJfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdBX18pCXx8IFwKIAlkZWZpbmVkKF9fQVJNX0FSQ0hfN1JfXyl8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN01fXykJfHwgXAogCWRlZmluZWQoX19BUk1fQVJDSF83RU1fXykKICMgICBkZWZpbmUgX19BUk1fQVJDSF9fIDcKQEAgLTg3LDYgKzk4LDEwIEBACiAjIGVuZGlmCiAjZW5kaWYKIAorLyogRXZlbiB3aGVuIGJ1aWxkaW5nIGZvciAzMi1iaXQgQVJNLCBzdXBwb3J0IGZvciBhYXJjaDY0IGNyeXB0byBpbnN0cnVjdGlvbnMKKyAqIHdpbGwgYmUgaW5jbHVkZWQuICovCisjZGVmaW5lIF9fQVJNX01BWF9BUkNIX18gOAorCiAjaWYgIV9fQVNTRU1CTEVSX18KIAogLyogT1BFTlNTTF9hcm1jYXBfUCBjb250YWlucyBmbGFncyBkZXNjcmliaW5nIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIENQVSBhbmQKQEAgLTk0LDYgKzEwOSw4IEBACiAgKiB8Y3B1Lmh8LiAqLwogZXh0ZXJuIHVpbnQzMl90IE9QRU5TU0xfYXJtY2FwX1A7CiAKKyNlbmRpZiAgLyogIV9fQVNTRU1CTEVSX18gKi8KKwogLyogQVJNVjdfTkVPTiBpcyB0cnVlIHdoZW4gYSBORU9OIHVuaXQgaXMgcHJlc2VudCBpbiB0aGUgY3VycmVudCBDUFUuICovCiAjZGVmaW5lIEFSTVY3X05FT04gKDEgPDwgMCkKIApAQCAtMTAxLDkgKzExOCwxOSBAQAogICogVGhlIFBvbHkxMzA1IE5FT04gY29kZSBpcyBrbm93biB0byB0cmlnZ2VyIGJ1Z3MgaW4gdGhlIE5FT04gdW5pdHMgb2Ygc29tZQogICogcGhvbmVzLiBJZiB0aGlzIGJpdCBpc24ndCBzZXQgdGhlbiB0aGUgUG9seTEzMDUgTkVPTiBjb2RlIHdvbid0IGJlIHVzZWQuCiAgKiBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM0MTU5OC4gKi8KLSNkZWZpbmUgQVJNVjdfTkVPTl9GVU5DVElPTkFMICgxIDw8IDEpCisjZGVmaW5lIEFSTVY3X05FT05fRlVOQ1RJT05BTCAoMSA8PCAxMCkKIAotI2VuZGlmICAvKiAhX19BU1NFTUJMRVJfXyAqLworLyogQVJNVjhfQUVTIGluZGljYXRlcyBzdXBwb3J0IGZvciBoYXJkd2FyZSBBRVMgaW5zdHJ1Y3Rpb25zLiAqLworI2RlZmluZSBBUk1WOF9BRVMgKDEgPDwgMikKKworLyogQVJNVjhfU0hBMSBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgaGFyZHdhcmUgU0hBLTEgaW5zdHJ1Y3Rpb25zLiAqLworI2RlZmluZSBBUk1WOF9TSEExICgxIDw8IDMpCisKKy8qIEFSTVY4X1NIQTI1NiBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgaGFyZHdhcmUgU0hBLTI1NiBpbnN0cnVjdGlvbnMuICovCisjZGVmaW5lIEFSTVY4X1NIQTI1NiAoMSA8PCA0KQorCisvKiBBUk1WOF9QTVVMTCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgY2FycnlsZXNzIG11bHRpcGxpY2F0aW9uLiAqLworI2RlZmluZSBBUk1WOF9QTVVMTCAoMSA8PCA1KQogCiAKICNlbmRpZiAgLyogT1BFTlNTTF9IRUFERVJfVEhSRUFEX0ggKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9kaXYuYyBiL2NyeXB0by9ibi9kaXYuYwppbmRleCA1ZmM0M2RjLi5kNjU5NTdhIDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vZGl2LmMKKysrIGIvY3J5cHRvL2JuL2Rpdi5jCkBAIC0yNjMsNyArMjYzLDcgQEAKICNpZmRlZiBCTl9MTE9ORwogICAgICAgQk5fVUxMT05HIHQyOwogCi0jaWYgZGVmaW5lZChCTl9MTE9ORykgJiYgZGVmaW5lZChCTl9ESVYyVykgJiYgIWRlZmluZWQoZGl2X2FzbSkKKyNpZiBkZWZpbmVkKEJOX0xMT05HKSAmJiAhZGVmaW5lZChkaXZfYXNtKQogICAgICAgcSA9IChCTl9VTE9ORykoKCgoKEJOX1VMTE9ORyluMCkgPDwgQk5fQklUUzIpIHwgbjEpIC8gZDApOwogI2Vsc2UKICAgICAgIHEgPSBkaXZfYXNtKG4wLCBuMSwgZDApOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2dlbmVyaWMuYyBiL2NyeXB0by9ibi9nZW5lcmljLmMKaW5kZXggOGIzYjBmOC4uMjI0YTQ3YyAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2dlbmVyaWMuYworKysgYi9jcnlwdG8vYm4vZ2VuZXJpYy5jCkBAIC0xMzAsNDAgKzEzMCw4IEBACiAgICAgQk5fVU1VTFRfTE9ISShyMCwgcjEsIHRtcCwgdG1wKTsgXAogICB9CiAKLSNlbGlmIGRlZmluZWQoQk5fVU1VTFRfSElHSCkKLSNkZWZpbmUgbXVsX2FkZChyLCBhLCB3LCBjKSAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEJOX1VMT05HIGhpZ2gsIGxvdywgcmV0LCB0bXAgPSAoYSk7IFwKLSAgICByZXQgPSAocik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaGlnaCA9IEJOX1VNVUxUX0hJR0godywgdG1wKTsgICAgICAgXAotICAgIHJldCArPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBsb3cgPSAodykgKiB0bXA7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGMpID0gKHJldCA8IChjKSkgPyAxIDogMDsgICAgICAgICAgXAotICAgIChjKSArPSBoaWdoOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXQgKz0gbG93OyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGMpICs9IChyZXQgPCBsb3cpID8gMSA6IDA7ICAgICAgICAgXAotICAgIChyKSA9IHJldDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZGVmaW5lIG11bChyLCBhLCB3LCBjKSAgICAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQk5fVUxPTkcgaGlnaCwgbG93LCByZXQsIHRhID0gKGEpOyBcCi0gICAgbG93ID0gKHcpICogdGE7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgaGlnaCA9IEJOX1VNVUxUX0hJR0godywgdGEpOyAgICAgICBcCi0gICAgcmV0ID0gbG93ICsgKGMpOyAgICAgICAgICAgICAgICAgICBcCi0gICAgKGMpID0gaGlnaDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGMpICs9IChyZXQgPCBsb3cpID8gMSA6IDA7ICAgICAgICBcCi0gICAgKHIpID0gcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2RlZmluZSBzcXIocjAsIHIxLCBhKSAgICAgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEJOX1VMT05HIHRtcCA9IChhKTsgICAgICAgICAgICAgXAotICAgIChyMCkgPSB0bXAgKiB0bXA7ICAgICAgICAgICAgICAgXAotICAgIChyMSkgPSBCTl9VTVVMVF9ISUdIKHRtcCwgdG1wKTsgXAotICB9Ci0KICNlbHNlCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBObyBsb25nIGxvbmcgdHlwZQogICovCkBAIC00MjQsNyArMzkyLDcgQEAKIAogI2VuZGlmIC8qICEoZGVmaW5lZChCTl9MTE9ORykgfHwgZGVmaW5lZChCTl9VTVVMVF9ISUdIKSkgKi8KIAotI2lmIGRlZmluZWQoQk5fTExPTkcpICYmIGRlZmluZWQoQk5fRElWMlcpCisjaWYgZGVmaW5lZChCTl9MTE9ORykKIAogQk5fVUxPTkcgYm5fZGl2X3dvcmRzKEJOX1VMT05HIGgsIEJOX1VMT05HIGwsIEJOX1VMT05HIGQpIHsKICAgcmV0dXJuIChCTl9VTE9ORykoKCgoKEJOX1VMTE9ORyloKSA8PCBCTl9CSVRTMikgfCBsKSAvIChCTl9VTExPTkcpZCk7CkBAIC01MDIsNyArNDcwLDcgQEAKICAgcmV0dXJuIHJldDsKIH0KIAotI2VuZGlmIC8qICFkZWZpbmVkKEJOX0xMT05HKSAmJiBkZWZpbmVkKEJOX0RJVjJXKSAqLworI2VuZGlmIC8qICFkZWZpbmVkKEJOX0xMT05HKSAqLwogCiAjaWZkZWYgQk5fTExPTkcKIEJOX1VMT05HIGJuX2FkZF93b3JkcyhCTl9VTE9ORyAqciwgY29uc3QgQk5fVUxPTkcgKmEsIGNvbnN0IEJOX1VMT05HICpiLApAQCAtNzQ5LDQ5ICs3MTcsNiBAQAogCiAjZGVmaW5lIHNxcl9hZGRfYzIoYSwgaSwgaiwgYzAsIGMxLCBjMikgbXVsX2FkZF9jMigoYSlbaV0sIChhKVtqXSwgYzAsIGMxLCBjMikKIAotI2VsaWYgZGVmaW5lZChCTl9VTVVMVF9ISUdIKQotCi0vKiBLZWVwIGluIG1pbmQgdGhhdCBhZGRpdGlvbnMgdG8gaGkgY2FuIG5vdCBvdmVyZmxvdywgYmVjYXVzZQotICogdGhlIGhpZ2ggd29yZCBvZiBhIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBjYW5ub3QgYmUgYWxsLW9uZXMuICovCi0jZGVmaW5lIG11bF9hZGRfYyhhLCBiLCBjMCwgYzEsIGMyKSAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEJOX1VMT05HIHRhID0gKGEpLCB0YiA9IChiKTsgICAgICAgICBcCi0gICAgQk5fVUxPTkcgbG8gPSB0YSAqIHRiOyAgICAgICAgICAgICAgIFwKLSAgICBCTl9VTE9ORyBoaSA9IEJOX1VNVUxUX0hJR0godGEsIHRiKTsgXAotICAgIGMwICs9IGxvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaGkgKz0gKGMwIDwgbG8pID8gMSA6IDA7ICAgICAgICAgICAgIFwKLSAgICBjMSArPSBoaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGMyICs9IChjMSA8IGhpKSA/IDEgOiAwOyAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgbXVsX2FkZF9jMihhLCBiLCBjMCwgYzEsIGMyKSAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQk5fVUxPTkcgdGEgPSAoYSksIHRiID0gKGIpLCB0dDsgICAgIFwKLSAgICBCTl9VTE9ORyBsbyA9IHRhICogdGI7ICAgICAgICAgICAgICAgXAotICAgIEJOX1VMT05HIGhpID0gQk5fVU1VTFRfSElHSCh0YSwgdGIpOyBcCi0gICAgYzAgKz0gbG87ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB0dCA9IGhpICsgKChjMCA8IGxvKSA/IDEgOiAwKTsgICAgICAgXAotICAgIGMxICs9IHR0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYzIgKz0gKGMxIDwgdHQpID8gMSA6IDA7ICAgICAgICAgICAgIFwKLSAgICBjMCArPSBsbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGhpICs9IChjMCA8IGxvKSA/IDEgOiAwOyAgICAgICAgICAgICBcCi0gICAgYzEgKz0gaGk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjMiArPSAoYzEgPCBoaSkgPyAxIDogMDsgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIHNxcl9hZGRfYyhhLCBpLCBjMCwgYzEsIGMyKSAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEJOX1VMT05HIHRhID0gKGEpW2ldOyAgICAgICAgICAgICAgICBcCi0gICAgQk5fVUxPTkcgbG8gPSB0YSAqIHRhOyAgICAgICAgICAgICAgIFwKLSAgICBCTl9VTE9ORyBoaSA9IEJOX1VNVUxUX0hJR0godGEsIHRhKTsgXAotICAgIGMwICs9IGxvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaGkgKz0gKGMwIDwgbG8pID8gMSA6IDA7ICAgICAgICAgICAgIFwKLSAgICBjMSArPSBoaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGMyICs9IChjMSA8IGhpKSA/IDEgOiAwOyAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgc3FyX2FkZF9jMihhLCBpLCBqLCBjMCwgYzEsIGMyKSBtdWxfYWRkX2MyKChhKVtpXSwgKGEpW2pdLCBjMCwgYzEsIGMyKQotCiAjZWxzZSAvKiAhQk5fTExPTkcgKi8KIAogLyogS2VlcCBpbiBtaW5kIHRoYXQgYWRkaXRpb25zIHRvIGhpIGNhbiBub3Qgb3ZlcmZsb3csIGJlY2F1c2UKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9pbnRlcm5hbC5oIGIvY3J5cHRvL2JuL2ludGVybmFsLmgKaW5kZXggZTk0ZjVhZC4uZDQyMWNmMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2ludGVybmFsLmgKKysrIGIvY3J5cHRvL2JuL2ludGVybmFsLmgKQEAgLTE0Miw4ICsxNDIsMTQgQEAKIAogI2lmIGRlZmluZWQoT1BFTlNTTF82NF9CSVQpCiAKLSNkZWZpbmUgQk5fVUxMT05HCXVuc2lnbmVkIGxvbmcgbG9uZworI2lmICFkZWZpbmVkKF9NU0NfVkVSKQorLyogTVNWQyBkb2Vzbid0IHN1cHBvcnQgdHdvLXdvcmQgaW50ZWdlcnMgb24gNjQtYml0LiAqLworI2RlZmluZSBCTl9MTE9ORwlfX2ludDEyOF90CisjZGVmaW5lIEJOX1VMTE9ORwlfX3VpbnQxMjhfdAorI2VuZGlmCisKICNkZWZpbmUgQk5fQklUUwkJMTI4CisjZGVmaW5lIEJOX0JJVFMyCTY0CiAjZGVmaW5lIEJOX0JZVEVTCTgKICNkZWZpbmUgQk5fQklUUzQJMzIKICNkZWZpbmUgQk5fTUFTSwkJKDB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZMTCkKQEAgLTE2MCw5ICsxNjYsMTEgQEAKIAogI2VsaWYgZGVmaW5lZChPUEVOU1NMXzMyX0JJVCkKIAotI2RlZmluZSBCTl9VTExPTkcJdW5zaWduZWQgbG9uZyBsb25nCi0jZGVmaW5lIEJOX01BU0sJKDB4ZmZmZmZmZmZmZmZmZmZmZkxMKQorI2RlZmluZSBCTl9MTE9ORwlpbnQ2NF90CisjZGVmaW5lIEJOX1VMTE9ORwl1aW50NjRfdAorI2RlZmluZSBCTl9NQVNLCQkoMHhmZmZmZmZmZmZmZmZmZmZmTEwpCiAjZGVmaW5lIEJOX0JJVFMJCTY0CisjZGVmaW5lIEJOX0JJVFMyCTMyCiAjZGVmaW5lIEJOX0JZVEVTCTQKICNkZWZpbmUgQk5fQklUUzQJMTYKICNkZWZpbmUgQk5fTUFTSzIJKDB4ZmZmZmZmZmZMKQpAQCAtMTg4LDYgKzE5NiwxMSBAQAogI2RlZmluZSBCTl9NVUxfTE9XX1JFQ1VSU0lWRV9TSVpFX05PUk1BTCAoMzIpIC8qIDMyICovCiAjZGVmaW5lIEJOX01PTlRfQ1RYX1NFVF9TSVpFX1dPUkQgKDY0KSAgICAgICAgLyogMzIgKi8KIAorI2lmIGRlZmluZWQoQk5fTExPTkcpCisjZGVmaW5lIEx3KHQpICgoKEJOX1VMT05HKSh0KSkmQk5fTUFTSzIpCisjZGVmaW5lIEh3KHQpICgoKEJOX1VMT05HKSgodCk+PkJOX0JJVFMyKSkmQk5fTUFTSzIpCisjZW5kaWYKKwogQk5fVUxPTkcgYm5fbXVsX2FkZF93b3JkcyhCTl9VTE9ORyAqcnAsIGNvbnN0IEJOX1VMT05HICphcCwgaW50IG51bSwgQk5fVUxPTkcgdyk7CiBCTl9VTE9ORyBibl9tdWxfd29yZHMoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9VTE9ORyAqYXAsIGludCBudW0sIEJOX1VMT05HIHcpOwogdm9pZCAgICAgYm5fc3FyX3dvcmRzKEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBpbnQgbnVtKTsKQEAgLTIxMyw2ICsyMjYsOCBAQAogaW50IGJuX211bF9tb250KEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBjb25zdCBCTl9VTE9ORyAqYnAsCiAgICAgICAgICAgICAgICAgY29uc3QgQk5fVUxPTkcgKm5wLCBjb25zdCBCTl9VTE9ORyAqbjAsIGludCBudW0pOwogCisjaWYgIWRlZmluZWQoQk5fTExPTkcpCisKICNkZWZpbmUgTEJJVFMoYSkgKChhKSAmIEJOX01BU0sybCkKICNkZWZpbmUgSEJJVFMoYSkgKCgoYSkgPj4gQk5fQklUUzQpICYgQk5fTUFTSzJsKQogI2RlZmluZSBMMkhCSVRTKGEpICgoKGEpIDw8IEJOX0JJVFM0KSAmIEJOX01BU0syKQpAQCAtMjQzLDYgKzI1OCw4IEBACiAgICAgKGgpID0gaHQ7ICAgICAgICAgICAgICAgICAgICAgXAogICB9CiAKKyNlbmRpZiAgLyogIWRlZmluZWQoQk5fTExPTkcpICovCisKICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgZGVmaW5lZChPUEVOU1NMX1g4Nl82NCkKICMgaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMgogIyAgZGVmaW5lIEJOX1VNVUxUX0hJR0goYSxiKQkoewlcCmRpZmYgLS1naXQgYS9jcnlwdG8vY2lwaGVyL2VfYWVzLmMgYi9jcnlwdG8vY2lwaGVyL2VfYWVzLmMKaW5kZXggMDNjZWY3My4uMGI4YjRiOSAxMDA2NDQKLS0tIGEvY3J5cHRvL2NpcGhlci9lX2Flcy5jCisrKyBiL2NyeXB0by9jaXBoZXIvZV9hZXMuYwpAQCAtMTAzLDE0ICsxMDMsMzMgQEAKIH0KICNlbmRpZgogCi0jZWxpZiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgZGVmaW5lZChPUEVOU1NMX0FSTSkKKyNlbGlmICFkZWZpbmVkKE9QRU5TU0xfTk9fQVNNKSAmJiBcCisgICAgKGRlZmluZWQoT1BFTlNTTF9BUk0pIHx8IGRlZmluZWQoT1BFTlNTTF9BQVJDSDY0KSkKICNpbmNsdWRlICIuLi9hcm1fYXJjaC5oIgotI2lmIF9fQVJNX0FSQ0hfXyA+PSA3CisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQVJNKQogI2RlZmluZSBCU0FFUwogc3RhdGljIGNoYXIgYnNhZXNfY2FwYWJsZSh2b2lkKSB7CiAgIHJldHVybiBDUllQVE9faXNfTkVPTl9jYXBhYmxlKCk7CiB9Ci0jZW5kaWYgIC8qIF9fQVJNX0FSQ0hfXyA+PSA3ICovCisjZW5kaWYKKworI2RlZmluZSBIV0FFUworc3RhdGljIGNoYXIgaHdhZXNfY2FwYWJsZSh2b2lkKSB7CisgIHJldHVybiAoT1BFTlNTTF9hcm1jYXBfUCAmIEFSTVY4X0FFUykgIT0gMDsKK30KKworaW50IGFlc192OF9zZXRfZW5jcnlwdF9rZXkoY29uc3QgdWludDhfdCAqdXNlcl9rZXksIGNvbnN0IGludCBiaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQUVTX0tFWSAqa2V5KTsKK2ludCBhZXNfdjhfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVpbnQ4X3QgKnVzZXJfa2V5LCBjb25zdCBpbnQgYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFFU19LRVkgKmtleSk7Cit2b2lkIGFlc192OF9lbmNyeXB0KGNvbnN0IHVpbnQ4X3QgKmluLCB1aW50OF90ICpvdXQsIGNvbnN0IEFFU19LRVkgKmtleSk7Cit2b2lkIGFlc192OF9kZWNyeXB0KGNvbnN0IHVpbnQ4X3QgKmluLCB1aW50OF90ICpvdXQsIGNvbnN0IEFFU19LRVkgKmtleSk7Cit2b2lkIGFlc192OF9jYmNfZW5jcnlwdChjb25zdCB1aW50OF90ICppbiwgdWludDhfdCAqb3V0LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUVTX0tFWSAqa2V5LCB1aW50OF90ICppdmVjLCBjb25zdCBpbnQgZW5jKTsKK3ZvaWQgYWVzX3Y4X2N0cjMyX2VuY3J5cHRfYmxvY2tzKGNvbnN0IHVpbnQ4X3QgKmluLCB1aW50OF90ICpvdXQsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBRVNfS0VZICprZXksIGNvbnN0IHVpbnQ4X3QgaXZlY1sxNl0pOworCiAjZW5kaWYgIC8qIE9QRU5TU0xfQVJNICovCiAKICNpZiBkZWZpbmVkKEJTQUVTKQpAQCAtMTc0LDYgKzE5Myw0MSBAQAogfQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChIV0FFUykKKy8qIElmIEhXQUVTIGlzbid0IGRlZmluZWQgdGhlbiB3ZSBwcm92aWRlIGR1bW15IGZ1bmN0aW9ucyBmb3IgZWFjaCBvZiB0aGUgaHdhZXMKKyAqIGZ1bmN0aW9ucy4gKi8KK2ludCBod2Flc19jYXBhYmxlKCkgeworICByZXR1cm4gMDsKK30KKworaW50IGFlc192OF9zZXRfZW5jcnlwdF9rZXkoY29uc3QgdWludDhfdCAqdXNlcl9rZXksIGludCBiaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQUVTX0tFWSAqa2V5KSB7CisgIGFib3J0KCk7Cit9CisKK2ludCBhZXNfdjhfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVpbnQ4X3QgKnVzZXJfa2V5LCBpbnQgYml0cywgQUVTX0tFWSAqa2V5KSB7CisgIGFib3J0KCk7Cit9CisKK3ZvaWQgYWVzX3Y4X2VuY3J5cHQoY29uc3QgdWludDhfdCAqaW4sIHVpbnQ4X3QgKm91dCwgY29uc3QgQUVTX0tFWSAqa2V5KSB7CisgIGFib3J0KCk7Cit9CisKK3ZvaWQgYWVzX3Y4X2RlY3J5cHQoY29uc3QgdWludDhfdCAqaW4sIHVpbnQ4X3QgKm91dCwgY29uc3QgQUVTX0tFWSAqa2V5KSB7CisgIGFib3J0KCk7Cit9CisKK3ZvaWQgYWVzX3Y4X2NiY19lbmNyeXB0KGNvbnN0IHVpbnQ4X3QgKmluLCB1aW50OF90ICpvdXQsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBRVNfS0VZICprZXksIHVpbnQ4X3QgKml2ZWMsIGludCBlbmMpIHsKKyAgYWJvcnQoKTsKK30KKwordm9pZCBhZXNfdjhfY3RyMzJfZW5jcnlwdF9ibG9ja3MoY29uc3QgdWludDhfdCAqaW4sIHVpbnQ4X3QgKm91dCwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFFU19LRVkgKmtleSwgY29uc3QgdWludDhfdCBpdmVjWzE2XSkgeworICBhYm9ydCgpOworfQorI2VuZGlmCisKICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgXAogICAgIChkZWZpbmVkKE9QRU5TU0xfWDg2XzY0KSB8fCBkZWZpbmVkKE9QRU5TU0xfWDg2KSkKIGludCBhZXNuaV9zZXRfZW5jcnlwdF9rZXkoY29uc3QgdWludDhfdCAqdXNlcktleSwgaW50IGJpdHMsIEFFU19LRVkgKmtleSk7CkBAIC0yMjcsNyArMjgxLDE0IEBACiAKICAgbW9kZSA9IGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX01PREVfTUFTSzsKICAgaWYgKChtb2RlID09IEVWUF9DSVBIX0VDQl9NT0RFIHx8IG1vZGUgPT0gRVZQX0NJUEhfQ0JDX01PREUpICYmICFlbmMpIHsKLSAgICBpZiAoYnNhZXNfY2FwYWJsZSgpICYmIG1vZGUgPT0gRVZQX0NJUEhfQ0JDX01PREUpIHsKKyAgICBpZiAoaHdhZXNfY2FwYWJsZSgpKSB7CisgICAgICByZXQgPSBhZXNfdjhfc2V0X2RlY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogOCwgJmRhdC0+a3Mua3MpOworICAgICAgZGF0LT5ibG9jayA9IChibG9jazEyOF9mKWFlc192OF9kZWNyeXB0OworICAgICAgZGF0LT5zdHJlYW0uY2JjID0gTlVMTDsKKyAgICAgIGlmIChtb2RlID09IEVWUF9DSVBIX0NCQ19NT0RFKSB7CisgICAgICAgIGRhdC0+c3RyZWFtLmNiYyA9IChjYmMxMjhfZilhZXNfdjhfY2JjX2VuY3J5cHQ7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChic2Flc19jYXBhYmxlKCkgJiYgbW9kZSA9PSBFVlBfQ0lQSF9DQkNfTU9ERSkgewogICAgICAgcmV0ID0gQUVTX3NldF9kZWNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDgsICZkYXQtPmtzLmtzKTsKICAgICAgIGRhdC0+YmxvY2sgPSAoYmxvY2sxMjhfZilBRVNfZGVjcnlwdDsKICAgICAgIGRhdC0+c3RyZWFtLmNiYyA9IChjYmMxMjhfZilic2Flc19jYmNfZW5jcnlwdDsKQEAgLTI0Miw2ICszMDMsMTUgQEAKICAgICAgIGRhdC0+c3RyZWFtLmNiYyA9CiAgICAgICAgICAgbW9kZSA9PSBFVlBfQ0lQSF9DQkNfTU9ERSA/IChjYmMxMjhfZilBRVNfY2JjX2VuY3J5cHQgOiBOVUxMOwogICAgIH0KKyAgfSBlbHNlIGlmIChod2Flc19jYXBhYmxlKCkpIHsKKyAgICByZXQgPSBhZXNfdjhfc2V0X2VuY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogOCwgJmRhdC0+a3Mua3MpOworICAgIGRhdC0+YmxvY2sgPSAoYmxvY2sxMjhfZilhZXNfdjhfZW5jcnlwdDsKKyAgICBkYXQtPnN0cmVhbS5jYmMgPSBOVUxMOworICAgIGlmIChtb2RlID09IEVWUF9DSVBIX0NCQ19NT0RFKSB7CisgICAgICBkYXQtPnN0cmVhbS5jYmMgPSAoY2JjMTI4X2YpYWVzX3Y4X2NiY19lbmNyeXB0OworICAgIH0gZWxzZSBpZiAobW9kZSA9PSBFVlBfQ0lQSF9DVFJfTU9ERSkgeworICAgICAgZGF0LT5zdHJlYW0uY3RyID0gKGN0cjEyOF9mKWFlc192OF9jdHIzMl9lbmNyeXB0X2Jsb2NrczsKKyAgICB9CiAgIH0gZWxzZSBpZiAoYnNhZXNfY2FwYWJsZSgpICYmIG1vZGUgPT0gRVZQX0NJUEhfQ1RSX01PREUpIHsKICAgICByZXQgPSBBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogOCwgJmRhdC0+a3Mua3MpOwogICAgIGRhdC0+YmxvY2sgPSAoYmxvY2sxMjhfZilBRVNfZW5jcnlwdDsKQEAgLTMxNiw2ICszODYsMTIgQEAKIAogc3RhdGljIGN0cjEyOF9mIGFlc19nY21fc2V0X2tleShBRVNfS0VZICphZXNfa2V5LCBHQ00xMjhfQ09OVEVYVCAqZ2NtX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbikgeworICBpZiAoaHdhZXNfY2FwYWJsZSgpKSB7CisgICAgYWVzX3Y4X3NldF9lbmNyeXB0X2tleShrZXksIGtleV9sZW4gKiA4LCBhZXNfa2V5KTsKKyAgICBDUllQVE9fZ2NtMTI4X2luaXQoZ2NtX2N0eCwgYWVzX2tleSwgKGJsb2NrMTI4X2YpYWVzX3Y4X2VuY3J5cHQpOworICAgIHJldHVybiAoY3RyMTI4X2YpYWVzX3Y4X2N0cjMyX2VuY3J5cHRfYmxvY2tzOworICB9CisKICAgaWYgKGJzYWVzX2NhcGFibGUoKSkgewogICAgIEFFU19zZXRfZW5jcnlwdF9rZXkoa2V5LCBrZXlfbGVuICogOCwgYWVzX2tleSk7CiAgICAgQ1JZUFRPX2djbTEyOF9pbml0KGdjbV9jdHgsIGFlc19rZXksIChibG9jazEyOF9mKUFFU19lbmNyeXB0KTsKQEAgLTEyNzQsNiArMTM1MCw4IEBACiBpbnQgRVZQX2hhc19hZXNfaGFyZHdhcmUodm9pZCkgewogI2lmIGRlZmluZWQoT1BFTlNTTF9YODYpIHx8IGRlZmluZWQoT1BFTlNTTF9YODZfNjQpCiAgIHJldHVybiBhZXNuaV9jYXBhYmxlKCkgJiYgY3J5cHRvX2djbV9jbG11bF9lbmFibGVkKCk7CisjZWxpZiBkZWZpbmVkKE9QRU5TU0xfQVJNKSB8fCBkZWZpbmVkKE9QRU5TU0xfQUFSQ0g2NCkKKyAgcmV0dXJuIGh3YWVzX2NhcGFibGUoKSAmJiAoT1BFTlNTTF9hcm1jYXBfUCAmIEFSTVY4X1BNVUxMKTsKICNlbHNlCiAgIHJldHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vY3B1LWFybS5jIGIvY3J5cHRvL2NwdS1hcm0uYwppbmRleCBkYWM3ZTFlLi42ZjZlMDRhIDEwMDY0NAotLS0gYS9jcnlwdG8vY3B1LWFybS5jCisrKyBiL2NyeXB0by9jcHUtYXJtLmMKQEAgLTU2LDE4ICs1NiwxNCBAQAogCiAjaW5jbHVkZSA8b3BlbnNzbC9jcHUuaD4KIAotI2lmIGRlZmluZWQoT1BFTlNTTF9BUk0pCisjaWYgZGVmaW5lZChPUEVOU1NMX0FSTSkgfHwgZGVmaW5lZChPUEVOU1NMX0FBUkNINjQpCiAKLSNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvYXV4di5oPgogCiAjaW5jbHVkZSAiYXJtX2FyY2guaCIKIAotI2lmIGRlZmluZWQoX19BUk1fTkVPTl9fKQotdWludDMyX3QgT1BFTlNTTF9hcm1jYXBfUCA9IEFSTVY3X05FT04gfCBBUk1WN19ORU9OX0ZVTkNUSU9OQUw7Ci0jZWxzZQotdWludDMyX3QgT1BFTlNTTF9hcm1jYXBfUCA9IEFSTVY3X05FT05fRlVOQ1RJT05BTDsKLSNlbmRpZgogCiBjaGFyIENSWVBUT19pc19ORU9OX2NhcGFibGUodm9pZCkgewogICByZXR1cm4gKE9QRU5TU0xfYXJtY2FwX1AgJiBBUk1WN19ORU9OKSAhPSAwOwpAQCAtOTQsNCArOTAsNTMgQEAKICAgfQogfQogCi0jZW5kaWYgIC8qIGRlZmluZWQoT1BFTlNTTF9BUk0pICovCit2b2lkIE9QRU5TU0xfY3B1aWRfc2V0dXAodm9pZCkgeworICB1bnNpZ25lZCBsb25nIGh3Y2FwID0gZ2V0YXV4dmFsKEFUX0hXQ0FQKTsKKworI2lmIGRlZmluZWQoT1BFTlNTTF9BUk0pCisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGtORU9OID0gMSA8PCAxMjsKKyAgaWYgKChod2NhcCAmIGtORU9OKSA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogSW4gMzItYml0IG1vZGUsIHRoZSBBUk12OCBmZWF0dXJlIGJpdHMgYXJlIGluIGEgZGlmZmVyZW50IGF1eCB2ZWN0b3IKKyAgICogdmFsdWUuICovCisgIGh3Y2FwID0gZ2V0YXV4dmFsKEFUX0hXQ0FQMik7CisKKyAgLyogU2VlIC91c3IvaW5jbHVkZS9hc20vaHdjYXAuaCBvbiBhbiBBUk0gaW5zdGFsbGF0aW9uIGZvciB0aGUgc291cmNlIG9mCisgICAqIHRoZXNlIHZhbHVlcy4gKi8KKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcga0FFUyA9IDEgPDwgMDsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcga1BNVUxMID0gMSA8PCAxOworICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBrU0hBMSA9IDEgPDwgMjsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcga1NIQTI1NiA9IDEgPDwgMzsKKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9BQVJDSDY0KQorICAvKiBTZWUgL3Vzci9pbmNsdWRlL2FzbS9od2NhcC5oIG9uIGFuIGFhcmNoNjQgaW5zdGFsbGF0aW9uIGZvciB0aGUgc291cmNlIG9mCisgICAqIHRoZXNlIHZhbHVlcy4gKi8KKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcga05FT04gPSAxIDw8IDE7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGtBRVMgPSAxIDw8IDM7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGtQTVVMTCA9IDEgPDwgNDsKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcga1NIQTEgPSAxIDw8IDU7CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGtTSEEyNTYgPSAxIDw8IDY7CisKKyAgaWYgKChod2NhcCAmIGtORU9OKSA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisjZW5kaWYKKworICBPUEVOU1NMX2FybWNhcF9QIHw9IEFSTVY3X05FT04gfCBBUk1WN19ORU9OX0ZVTkNUSU9OQUw7CisKKyAgaWYgKGh3Y2FwICYga0FFUykgeworICAgIE9QRU5TU0xfYXJtY2FwX1AgfD0gQVJNVjhfQUVTOworICB9CisgIGlmIChod2NhcCAmIGtQTVVMTCkgeworICAgIE9QRU5TU0xfYXJtY2FwX1AgfD0gQVJNVjhfUE1VTEw7CisgIH0KKyAgaWYgKGh3Y2FwICYga1NIQTEpIHsKKyAgICBPUEVOU1NMX2FybWNhcF9QIHw9IEFSTVY4X1NIQTE7CisgIH0KKyAgaWYgKGh3Y2FwICYga1NIQTI1NikgeworICAgIE9QRU5TU0xfYXJtY2FwX1AgfD0gQVJNVjhfU0hBMjU2OworICB9Cit9CisKKyNlbmRpZiAgLyogZGVmaW5lZChPUEVOU1NMX0FSTSkgfHwgZGVmaW5lZChPUEVOU1NMX0FBUkNINjQpICovCmRpZmYgLS1naXQgYS9jcnlwdG8vY3B1LWludGVsLmMgYi9jcnlwdG8vY3B1LWludGVsLmMKaW5kZXggM2RkMDhhOS4uM2Y2NWU3NCAxMDA2NDQKLS0tIGEvY3J5cHRvL2NwdS1pbnRlbC5jCisrKyBiL2NyeXB0by9jcHUtaW50ZWwuYwpAQCAtNjYsMTUgKzY2LDYgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAKLS8qIFRoaXMgdmFsdWUgbXVzdCBiZSBleHBsaWNpdGx5IGluaXRpYWxpc2VkIHRvIHplcm8gaW4gb3JkZXIgdG8gd29yayBhcm91bmQgYQotICogYnVnIGluIGxpYnRvb2wgb3IgdGhlIGxpbmtlciBvbiBPUyBYLgotICoKLSAqIElmIG5vdCBpbml0aWFsaXNlZCB0aGVuIGl0IGJlY29tZXMgYSAiY29tbW9uIHN5bWJvbCIuIFdoZW4gcHV0IGludG8gYW4KLSAqIGFyY2hpdmUsIGxpbmtpbmcgb24gT1MgWCB3aWxsIGZhaWwgdG8gcmVzb2x2ZSBjb21tb24gc3ltYm9scy4gQnkKLSAqIGluaXRpYWxpc2luZyBpdCB0byB6ZXJvLCBpdCBiZWNvbWVzIGEgImRhdGEgc3ltYm9sIiwgd2hpY2ggaXNuJ3Qgc28KLSAqIGFmZmVjdGVkLiAqLwotdWludDMyX3QgT1BFTlNTTF9pYTMyY2FwX1BbNF0gPSB7MH07Ci0KIC8qIE9QRU5TU0xfaWEzMl9jcHVpZCBpcyBkZWZpbmVkIGluIGNwdS14ODZfNjQtYXNtLnBsLiAqLwogZXh0ZXJuIHVpbnQ2NF90IE9QRU5TU0xfaWEzMl9jcHVpZCh1aW50MzJfdCopOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRvLmMgYi9jcnlwdG8vY3J5cHRvLmMKaW5kZXggZWU3YzQwNS4uYzQ2M2Q1ZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2NyeXB0by5jCisrKyBiL2NyeXB0by9jcnlwdG8uYwpAQCAtMTYsMTAgKzE2LDEyIEBACiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCisKICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgXAotICAgIChkZWZpbmVkKE9QRU5TU0xfWDg2KSB8fCBkZWZpbmVkKE9QRU5TU0xfWDg2XzY0KSkKLS8qIHg4NiBhbmQgeDg2XzY0IG5lZWQgdG8gcmVjb3JkIHRoZSByZXN1bHQgb2YgYSBjcHVpZCBjYWxsIGZvciB0aGUgYXNtIHRvIHdvcmsKLSAqIGNvcnJlY3RseSwgdW5sZXNzIGNvbXBpbGVkIHdpdGhvdXQgYXNtIGNvZGUuICovCisgICAgKGRlZmluZWQoT1BFTlNTTF9YODYpIHx8IGRlZmluZWQoT1BFTlNTTF9YODZfNjQpIHx8IFwKKyAgICAgZGVmaW5lZChPUEVOU1NMX0FSTSkgfHwgZGVmaW5lZChPUEVOU1NMX0FBUkNINjQpKQorLyogeDg2LCB4ODZfNjQgYW5kIHRoZSBBUk1zIG5lZWQgdG8gcmVjb3JkIHRoZSByZXN1bHQgb2YgYSBjcHVpZCBjYWxsIGZvciB0aGUKKyAqIGFzbSB0byB3b3JrIGNvcnJlY3RseSwgdW5sZXNzIGNvbXBpbGVkIHdpdGhvdXQgYXNtIGNvZGUuICovCiAjZGVmaW5lIE5FRURfQ1BVSUQKIAogI2Vsc2UKQEAgLTMwLDcgKzMyLDM5IEBACiAjZGVmaW5lIEJPUklOR1NTTF9OT19TVEFUSUNfSU5JVElBTElaRVIKICNlbmRpZgogCi0jZW5kaWYgIC8qICFPUEVOU1NMX05PX0FTTSAmJiAoT1BFTlNTTF9YODYgfHwgT1BFTlNTTF9YODZfNjQpICovCisjZW5kaWYgIC8qICFPUEVOU1NMX05PX0FTTSAmJiAoT1BFTlNTTF9YODYgfHwgT1BFTlNTTF9YODZfNjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUEVOU1NMX0FSTSB8fCBPUEVOU1NMX0FBUkNINjQpICovCisKKworLyogVGhlIGNhcGFiaWxpdHkgdmFyaWFibGVzIGFyZSBkZWZpbmVkIGluIHRoaXMgZmlsZSBpbiBvcmRlciB0byB3b3JrIGFyb3VuZCBhCisgKiBsaW5rZXIgYnVnLiBXaGVuIGxpbmtpbmcgd2l0aCBhIC5hLCBpZiBubyBzeW1ib2xzIGluIGEgLm8gYXJlIHJlZmVyZW5jZWQKKyAqIHRoZW4gdGhlIC5vIGlzIGRpc2NhcmRlZCwgZXZlbiBpZiBpdCBoYXMgY29uc3RydWN0b3IgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgc3RpbGwgbWVhbnMgdGhhdCBhbnkgYmluYXJpZXMgdGhhdCBkb24ndCBpbmNsdWRlIHNvbWUgZnVuY3Rpb25hbGl0eQorICogdGhhdCB0ZXN0cyB0aGUgY2FwYWJpbGl0eSB2YWx1ZXMgd2lsbCBzdGlsbCBza2lwIHRoZSBjb25zdHJ1Y3RvciBidXQsIHNvCisgKiBmYXIsIHRoZSBpbml0IGNvbnN0cnVjdG9yIGZ1bmN0aW9uIG9ubHkgc2V0cyB0aGUgY2FwYWJpbGl0eSB2YXJpYWJsZXMuICovCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfWDg2KSB8fCBkZWZpbmVkKE9QRU5TU0xfWDg2XzY0KQorLyogVGhpcyB2YWx1ZSBtdXN0IGJlIGV4cGxpY2l0bHkgaW5pdGlhbGlzZWQgdG8gemVybyBpbiBvcmRlciB0byB3b3JrIGFyb3VuZCBhCisgKiBidWcgaW4gbGlidG9vbCBvciB0aGUgbGlua2VyIG9uIE9TIFguCisgKgorICogSWYgbm90IGluaXRpYWxpc2VkIHRoZW4gaXQgYmVjb21lcyBhICJjb21tb24gc3ltYm9sIi4gV2hlbiBwdXQgaW50byBhbgorICogYXJjaGl2ZSwgbGlua2luZyBvbiBPUyBYIHdpbGwgZmFpbCB0byByZXNvbHZlIGNvbW1vbiBzeW1ib2xzLiBCeQorICogaW5pdGlhbGlzaW5nIGl0IHRvIHplcm8sIGl0IGJlY29tZXMgYSAiZGF0YSBzeW1ib2wiLCB3aGljaCBpc24ndCBzbworICogYWZmZWN0ZWQuICovCit1aW50MzJfdCBPUEVOU1NMX2lhMzJjYXBfUFs0XSA9IHswfTsKKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9BUk0pIHx8IGRlZmluZWQoT1BFTlNTTF9BQVJDSDY0KQorCisjaW5jbHVkZSAiYXJtX2FyY2guaCIKKworI2lmIGRlZmluZWQoX19BUk1fTkVPTl9fKQordWludDMyX3QgT1BFTlNTTF9hcm1jYXBfUCA9IEFSTVY3X05FT04gfCBBUk1WN19ORU9OX0ZVTkNUSU9OQUw7CisjZWxzZQordWludDMyX3QgT1BFTlNTTF9hcm1jYXBfUCA9IEFSTVY3X05FT05fRlVOQ1RJT05BTDsKKyNlbmRpZgorCisjZW5kaWYKKwogCiAjaWYgZGVmaW5lZChPUEVOU1NMX1dJTkRPV1MpCiAjZGVmaW5lIE9QRU5TU0xfQ0RFQ0wgX19jZGVjbApAQCAtNTMsNiArODcsOCBAQAogICogQk9SSU5HU1NMX05PX1NUQVRJQ19JTklUSUFMSVpFUiBpc24ndCBkZWZpbmVkLCB0aGlzIGlzIHNldCBhcyBhIHN0YXRpYwogICogaW5pdGlhbGl6ZXIuIE90aGVyd2lzZSwgaXQgaXMgY2FsbGVkIGJ5IENSWVBUT19saWJyYXJ5X2luaXQuICovCiBzdGF0aWMgdm9pZCBPUEVOU1NMX0NERUNMIGRvX2xpYnJhcnlfaW5pdCh2b2lkKSB7CisgLyogV0FSTklORzogdGhpcyBmdW5jdGlvbiBtYXkgb25seSBjb25maWd1cmUgdGhlIGNhcGFiaWxpdHkgdmFyaWFibGVzLiBTZWUgdGhlCisgICogbm90ZSBhYm92ZSBhYm91dCB0aGUgbGlua2VyIGJ1Zy4gKi8KICNpZiBkZWZpbmVkKE5FRURfQ1BVSUQpCiAgIE9QRU5TU0xfY3B1aWRfc2V0dXAoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2ludGVybmFsLmggYi9jcnlwdG8vaW50ZXJuYWwuaAppbmRleCBjNTg5MGQ1Li40MzM2ZTY1IDEwMDY0NAotLS0gYS9jcnlwdG8vaW50ZXJuYWwuaAorKysgYi9jcnlwdG8vaW50ZXJuYWwuaApAQCAtMTQ0LDcgKzE0NCw4IEBACiAKICNlbmRpZiAgLyogZGVmaW5lZChfTVNDX1ZFUikgKi8KIAotI2lmIGRlZmluZWQoT1BFTlNTTF9YODYpIHx8IGRlZmluZWQoT1BFTlNTTF9YODZfNjQpCisjaWYgZGVmaW5lZChPUEVOU1NMX1g4NikgfHwgZGVmaW5lZChPUEVOU1NMX1g4Nl82NCkgfHwgZGVmaW5lZChPUEVOU1NMX0FSTSkgfHwgXAorICAgIGRlZmluZWQoT1BFTlNTTF9BQVJDSDY0KQogLyogT1BFTlNTTF9jcHVpZF9zZXR1cCBpbml0aWFsaXplcyBPUEVOU1NMX2lhMzJjYXBfUC4gKi8KIHZvaWQgT1BFTlNTTF9jcHVpZF9zZXR1cCh2b2lkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL0NNYWtlTGlzdHMudHh0IGIvY3J5cHRvL21vZGVzL0NNYWtlTGlzdHMudHh0CmluZGV4IDRiMThlM2EuLjIwOTRlY2QgMTAwNjQ0Ci0tLSBhL2NyeXB0by9tb2Rlcy9DTWFrZUxpc3RzLnR4dAorKysgYi9jcnlwdG8vbW9kZXMvQ01ha2VMaXN0cy50eHQKQEAgLTIyLDYgKzIyLDE1IEBACiAJCU1PREVTX0FSQ0hfU09VUkNFUwogCiAJCWdoYXNoLWFybXY0LiR7QVNNX0VYVH0KKwkJZ2hhc2h2OC1hcm14LiR7QVNNX0VYVH0KKwkpCitlbmRpZigpCisKK2lmICgke0FSQ0h9IFNUUkVRVUFMICJhYXJjaDY0IikKKwlzZXQoCisJCU1PREVTX0FSQ0hfU09VUkNFUworCisJCWdoYXNodjgtYXJteC4ke0FTTV9FWFR9CiAJKQogZW5kaWYoKQogCkBAIC00Myw2ICs1Miw3IEBACiBwZXJsYXNtKGdoYXNoLXg4Nl82NC4ke0FTTV9FWFR9IGFzbS9naGFzaC14ODZfNjQucGwpCiBwZXJsYXNtKGdoYXNoLXg4Ni4ke0FTTV9FWFR9IGFzbS9naGFzaC14ODYucGwpCiBwZXJsYXNtKGdoYXNoLWFybXY0LiR7QVNNX0VYVH0gYXNtL2doYXNoLWFybXY0LnBsKQorcGVybGFzbShnaGFzaHY4LWFybXguJHtBU01fRVhUfSBhc20vZ2hhc2h2OC1hcm14LnBsKQogCiBhZGRfZXhlY3V0YWJsZSgKIAlnY21fdGVzdApkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL2FzbS9naGFzaHY4LWFybXgucGwgYi9jcnlwdG8vbW9kZXMvYXNtL2doYXNodjgtYXJteC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGExYWM0Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL21vZGVzL2FzbS9naGFzaHY4LWFybXgucGwKQEAgLTAsMCArMSwyNDEgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BvcGVuc3NsLm9yZz4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIEdIQVNIIGZvciBBUk12OCBDcnlwdG8gRXh0ZW5zaW9uLCA2NC1iaXQgcG9seW5vbWlhbCBtdWx0aXBsaWNhdGlvbi4KKyMKKyMgSnVuZSAyMDE0CisjCisjIEluaXRpYWwgdmVyc2lvbiB3YXMgZGV2ZWxvcGVkIGluIHRpZ2h0IGNvb3BlcmF0aW9uIHdpdGggQXJkCisjIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+IGZyb20gYml0cy1uLXBpZWNlcyBmcm9tCisjIG90aGVyIGFzc2VtYmx5IG1vZHVsZXMuIEp1c3QgbGlrZSBhZXN2OC1hcm14LnBsIHRoaXMgbW9kdWxlCisjIHN1cHBvcnRzIGJvdGggQUFyY2gzMiBhbmQgQUFyY2g2NCBleGVjdXRpb24gbW9kZXMuCisjCisjIEN1cnJlbnQgcGVyZm9ybWFuY2UgaW4gY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZToKKyMKKyMJCVBNVUxMWzJdCTMyLWJpdCBORU9OKCopCisjIEFwcGxlIEE3CTEuNzYJCTUuNjIKKyMgQ29ydGV4LUE1MwkxLjQ1CQk4LjM5CisjIENvcnRleC1BNTcJMi4yMgkJNy42MQorIworIyAoKikJcHJlc2VudGVkIGZvciByZWZlcmVuY2UvY29tcGFyaXNvbiBwdXJwb3NlczsKKworJGZsYXZvdXIgPSBzaGlmdDsKK29wZW4gU1RET1VULCI+Ii5zaGlmdDsKKworJFhpPSJ4MCI7CSMgYXJndW1lbnQgYmxvY2sKKyRIdGJsPSJ4MSI7CiskaW5wPSJ4MiI7CiskbGVuPSJ4MyI7CisKKyRpbmM9IngxMiI7CisKK3sKK215ICgkWGwsJFhtLCRYaCwkSU4pPW1hcCgicSRfIiwoMC4uMykpOworbXkgKCR0MCwkdDEsJHQyLCR0MywkSCwkSGhsKT1tYXAoInEkXyIsKDguLjE0KSk7CisKKyRjb2RlPTw8X19fOworI2luY2x1ZGUgImFybV9hcmNoLmgiCisKKy50ZXh0CitfX18KKyRjb2RlLj0iLmFyY2gJYXJtdjgtYStjcnlwdG9cbiIJaWYgKCRmbGF2b3VyID1+IC82NC8pOworJGNvZGUuPSIuZnB1CW5lb25cbi5jb2RlCTMyXG4iCWlmICgkZmxhdm91ciAhfiAvNjQvKTsKKworJGNvZGUuPTw8X19fOworLmdsb2JhbAlnY21faW5pdF92OAorLnR5cGUJZ2NtX2luaXRfdjgsJWZ1bmN0aW9uCisuYWxpZ24JNAorZ2NtX2luaXRfdjg6CisJdmxkMS42NAkJeyR0MX0sW3gxXQkJQCBsb2FkIEgKKwl2bW92Lmk4CQkkdDAsIzB4ZTEKKwl2ZXh0LjgJCSRJTiwkdDEsJHQxLCM4CisJdnNobC5pNjQJJHQwLCR0MCwjNTcKKwl2c2hyLnU2NAkkdDIsJHQwLCM2MworCXZleHQuOAkJJHQwLCR0MiwkdDAsIzgJCUAgdDA9MHhjMi4uLi4wMQorCXZkdXAuMzIJCSR0MSwke3QxfVsxXQorCXZzaHIudTY0CSR0MywkSU4sIzYzCisJdnNoci5zMzIJJHQxLCR0MSwjMzEJCUAgYnJvYWRjYXN0IGNhcnJ5IGJpdAorCXZhbmQJCSR0MywkdDMsJHQwCisJdnNobC5pNjQJJElOLCRJTiwjMQorCXZleHQuOAkJJHQzLCR0MywkdDMsIzgKKwl2YW5kCQkkdDAsJHQwLCR0MQorCXZvcnIJCSRJTiwkSU4sJHQzCQlAIEg8PDw9MQorCXZlb3IJCSRJTiwkSU4sJHQwCQlAIHR3aXN0ZWQgSAorCXZzdDEuNjQJCXskSU59LFt4MF0KKworCXJldAorLnNpemUJZ2NtX2luaXRfdjgsLi1nY21faW5pdF92OAorCisuZ2xvYmFsCWdjbV9nbXVsdF92OAorLnR5cGUJZ2NtX2dtdWx0X3Y4LCVmdW5jdGlvbgorLmFsaWduCTQKK2djbV9nbXVsdF92ODoKKwl2bGQxLjY0CQl7JHQxfSxbJFhpXQkJQCBsb2FkIFhpCisJdm1vdi5pOAkJJHQzLCMweGUxCisJdmxkMS42NAkJeyRIfSxbJEh0YmxdCQlAIGxvYWQgdHdpc3RlZCBICisJdnNobC51NjQJJHQzLCR0MywjNTcKKyNpZm5kZWYgX19BUk1FQl9fCisJdnJldjY0LjgJJHQxLCR0MQorI2VuZGlmCisJdmV4dC44CQkkSGhsLCRILCRILCM4CisJbW92CQkkbGVuLCMwCisJdmV4dC44CQkkSU4sJHQxLCR0MSwjOAorCW1vdgkJJGluYywjMAorCXZlb3IJCSRIaGwsJEhobCwkSAkJQCBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKKwltb3YJCSRpbnAsJFhpCisJYgkJLkxnbXVsdF92OAorLnNpemUJZ2NtX2dtdWx0X3Y4LC4tZ2NtX2dtdWx0X3Y4CisKKy5nbG9iYWwJZ2NtX2doYXNoX3Y4CisudHlwZQlnY21fZ2hhc2hfdjgsJWZ1bmN0aW9uCisuYWxpZ24JNAorZ2NtX2doYXNoX3Y4OgorCXZsZDEuNjQJCXskWGx9LFskWGldCQlAIGxvYWQgW3JvdGF0ZWRdIFhpCisJc3VicwkJJGxlbiwkbGVuLCMxNgorCXZtb3YuaTgJCSR0MywjMHhlMQorCW1vdgkJJGluYywjMTYKKwl2bGQxLjY0CQl7JEh9LFskSHRibF0JCUAgbG9hZCB0d2lzdGVkIEgKKwljY2xyCQkkaW5jLGVxCisJdmV4dC44CQkkWGwsJFhsLCRYbCwjOAorCXZzaGwudTY0CSR0MywkdDMsIzU3CisJdmxkMS42NAkJeyR0MX0sWyRpbnBdLCRpbmMJQCBsb2FkIFtyb3RhdGVkXSBpbnAKKwl2ZXh0LjgJCSRIaGwsJEgsJEgsIzgKKyNpZm5kZWYgX19BUk1FQl9fCisJdnJldjY0LjgJJFhsLCRYbAorCXZyZXY2NC44CSR0MSwkdDEKKyNlbmRpZgorCXZlb3IJCSRIaGwsJEhobCwkSAkJQCBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKKwl2ZXh0LjgJCSRJTiwkdDEsJHQxLCM4CisJYgkJLkxvb3BfdjgKKworLmFsaWduCTQKKy5Mb29wX3Y4OgorCXZleHQuOAkJJHQyLCRYbCwkWGwsIzgKKwl2ZW9yCQkkSU4sJElOLCRYbAkJQCBpbnBePVhpCisJdmVvcgkJJHQxLCR0MSwkdDIJCUAgJHQxIGlzIHJvdGF0ZWQgaW5wXlhpCisKKy5MZ211bHRfdjg6CisJdnBtdWxsLnA2NAkkWGwsJEgsJElOCQlAIEgubG+3WGkubG8KKwl2ZW9yCQkkdDEsJHQxLCRJTgkJQCBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKKwl2cG11bGwyLnA2NAkkWGgsJEgsJElOCQlAIEguaGm3WGkuaGkKKwlzdWJzCQkkbGVuLCRsZW4sIzE2CisJdnBtdWxsLnA2NAkkWG0sJEhobCwkdDEJCUAgKEgubG8rSC5oaSm3KFhpLmxvK1hpLmhpKQorCWNjbHIJCSRpbmMsZXEKKworCXZleHQuOAkJJHQxLCRYbCwkWGgsIzgJCUAgS2FyYXRzdWJhIHBvc3QtcHJvY2Vzc2luZworCXZlb3IJCSR0MiwkWGwsJFhoCisJdmVvcgkJJFhtLCRYbSwkdDEKKwkgdmxkMS42NAl7JHQxfSxbJGlucF0sJGluYwlAIGxvYWQgW3JvdGF0ZWRdIGlucAorCXZlb3IJCSRYbSwkWG0sJHQyCisJdnBtdWxsLnA2NAkkdDIsJFhsLCR0MwkJQCAxc3QgcGhhc2UKKworCXZtb3YJCSRYaCNsbywkWG0jaGkJCUAgWGh8WG0gLSAyNTYtYml0IHJlc3VsdAorCXZtb3YJCSRYbSNoaSwkWGwjbG8JCUAgWG0gaXMgcm90YXRlZCBYbAorI2lmbmRlZiBfX0FSTUVCX18KKwkgdnJldjY0LjgJJHQxLCR0MQorI2VuZGlmCisJdmVvcgkJJFhsLCRYbSwkdDIKKwkgdmV4dC44CQkkSU4sJHQxLCR0MSwjOAorCisJdmV4dC44CQkkdDIsJFhsLCRYbCwjOAkJQCAybmQgcGhhc2UKKwl2cG11bGwucDY0CSRYbCwkWGwsJHQzCisJdmVvcgkJJHQyLCR0MiwkWGgKKwl2ZW9yCQkkWGwsJFhsLCR0MgorCWIuaHMJCS5Mb29wX3Y4CisKKyNpZm5kZWYgX19BUk1FQl9fCisJdnJldjY0LjgJJFhsLCRYbAorI2VuZGlmCisJdmV4dC44CQkkWGwsJFhsLCRYbCwjOAorCXZzdDEuNjQJCXskWGx9LFskWGldCQlAIHdyaXRlIG91dCBYaQorCisJcmV0Cisuc2l6ZQlnY21fZ2hhc2hfdjgsLi1nY21fZ2hhc2hfdjgKK19fXworfQorJGNvZGUuPTw8X19fOworLmFzY2l6ICAiR0hBU0ggZm9yIEFSTXY4LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduICAyCitfX18KKworaWYgKCRmbGF2b3VyID1+IC82NC8pIHsJCQkjIyMjIyMjIyA2NC1iaXQgY29kZQorICAgIHN1YiB1bnZtb3YgeworCW15ICRhcmc9c2hpZnQ7CisKKwkkYXJnID1+IG0vcShbMC05XSspIyhsb3xoaSksXHMqcShbMC05XSspIyhsb3xoaSkvbyAmJgorCXNwcmludGYJImlucwl2JWQuZFslZF0sdiVkLmRbJWRdIiwkMSwoJDIgZXEgImxvIik/MDoxLCQzLCgkNCBlcSAibG8iKT8wOjE7CisgICAgfQorICAgIGZvcmVhY2goc3BsaXQoIlxuIiwkY29kZSkpIHsKKwlzL2NjbHJccysoW3d4XSkoW14sXSspLFxzKihbYS16XSspL2NzZWwJJDEkMiwkMXpyLCQxJDIsJDMvbwlvcgorCXMvdm1vdlwuaTgvbW92aS9vCQlvcgkjIGZpeCB1cCBsZWdhY3kgbW5lbW9uaWNzCisJcy92bW92XHMrKC4qKS91bnZtb3YoJDEpL2dlbwlvcgorCXMvdmV4dFwuOC9leHQvbwkJCW9yCisJcy92c2hyXC5zL3NzaHJcLnMvbwkJb3IKKwlzL3ZzaHIvdXNoci9vCQkJb3IKKwlzL14oXHMrKXYvJDEvbwkJCW9yCSMgc3RyaXAgb2ZmIHYgcHJlZml4CisJcy9cYmJ4XHMrbHJcYi9yZXQvbzsKKworCXMvXGJxKFswLTldKylcYi8idiIuKCQxPDg/JDE6JDErOCkuIi4xNmIiL2dlbzsJIyBvbGQtPm5ldyByZWdpc3RlcnMKKwlzL0Bccy9cL1wvL287CQkJCSMgb2xkLT5uZXcgc3R5bGUgY29tbWVudGFyeQorCisJIyBmaXggdXAgcmVtYWluaWcgbGVnYWN5IHN1ZmZpeGVzCisJcy9cLlt1aV0/OChccykvJDEvbzsKKwlzL1wuW3Vpc10/MzIvL28gYW5kIHMvXC4xNmIvXC40cy9nbzsKKwltL1wucDY0L28gYW5kIHMvXC4xNmIvXC4xcS9vOwkJIyAxc3QgcG11bGwgYXJndW1lbnQKKwltL2xcLnA2NC9vIGFuZCBzL1wuMTZiL1wuMWQvZ287CQkjIDJuZCBhbmQgM3JkIHBtdWxsIGFyZ3VtZW50cworCXMvXC5bdWlzcF0/NjQvL28gYW5kIHMvXC4xNmIvXC4yZC9nbzsKKwlzL1wuWzQyXShbc2RdKVxbKFswLTNdKVxdL1wuJDFcWyQyXF0vbzsKKworCXByaW50ICRfLCJcbiI7CisgICAgfQorfSBlbHNlIHsJCQkJIyMjIyMjIyMgMzItYml0IGNvZGUKKyAgICBzdWIgdW52ZHVwMzIgeworCW15ICRhcmc9c2hpZnQ7CisKKwkkYXJnID1+IG0vcShbMC05XSspLFxzKnEoWzAtOV0rKVxbKFswLTNdKVxdL28gJiYKKwlzcHJpbnRmCSJ2ZHVwLjMyCXElZCxkJWRbJWRdIiwkMSwyKiQyKygkMz4+MSksJDMmMTsKKyAgICB9CisgICAgc3ViIHVudnBtdWxscDY0IHsKKwlteSAoJG1uZW1vbmljLCRhcmcpPUBfOworCisJaWYgKCRhcmcgPX4gbS9xKFswLTldKyksXHMqcShbMC05XSspLFxzKnEoWzAtOV0rKS9vKSB7CisJICAgIG15ICR3b3JkID0gMHhmMmEwMGUwMHwoKCQxJjcpPDwxMyl8KCgkMSY4KTw8MTkpCisJCQkJIHwoKCQyJjcpPDwxNyl8KCgkMiY4KTw8NCkKKwkJCQkgfCgoJDMmNyk8PDEpIHwoKCQzJjgpPDwyKTsKKwkgICAgJHdvcmQgfD0gMHgwMDAxMDAwMQkgaWYgKCRtbmVtb25pYyA9fiAiMiIpOworCSAgICAjIHNpbmNlIEFSTXY3IGluc3RydWN0aW9ucyBhcmUgYWx3YXlzIGVuY29kZWQgbGl0dGxlLWVuZGlhbi4KKwkgICAgIyBjb3JyZWN0IHNvbHV0aW9uIGlzIHRvIHVzZSAuaW5zdCBkaXJlY3RpdmUsIGJ1dCBvbGRlcgorCSAgICAjIGFzc2VtYmxlcnMgZG9uJ3QgaW1wbGVtZW50IGl0Oi0oCisJICAgIHNwcmludGYgIi5ieXRlXHQweCUwMngsMHglMDJ4LDB4JTAyeCwweCUwMnhcdEAgJXMgJXMiLAorCQkJJHdvcmQmMHhmZiwoJHdvcmQ+PjgpJjB4ZmYsCisJCQkoJHdvcmQ+PjE2KSYweGZmLCgkd29yZD4+MjQpJjB4ZmYsCisJCQkkbW5lbW9uaWMsJGFyZzsKKwl9CisgICAgfQorCisgICAgZm9yZWFjaChzcGxpdCgiXG4iLCRjb2RlKSkgeworCXMvXGJbd3hdKFswLTldKylcYi9yJDEvZ287CQkjIG5ldy0+b2xkIHJlZ2lzdGVycworCXMvXGJ2KFswLTldKVwuWzEyNDY4XStbYnNkXVxiL3EkMS9nbzsJIyBuZXctPm9sZCByZWdpc3RlcnMKKyAgICAgICAgcy9cL1wvXHM/L0AgL287CQkJCSMgbmV3LT5vbGQgc3R5bGUgY29tbWVudGFyeQorCisJIyBmaXggdXAgcmVtYWluaWcgbmV3LXN0eWxlIHN1ZmZpeGVzCisJcy9cXSwjWzAtOV0rL10hL287CisKKwlzL2NjbHJccysoW14sXSspLFxzKihbYS16XSspL21vdiQyCSQxLCMwL28JCQlvcgorCXMvdmR1cFwuMzJccysoLiopL3VudmR1cDMyKCQxKS9nZW8JCQkJb3IKKwlzL3Y/KHBtdWxsMj8pXC5wNjRccysoLiopL3VudnBtdWxscDY0KCQxLCQyKS9nZW8JCW9yCisJcy9cYnEoWzAtOV0rKSMobG98aGkpL3NwcmludGYgImQlZCIsMiokMSsoJDIgZXEgImhpIikvZ2VvCW9yCisJcy9eKFxzKyliXC4vJDFiL28JCQkJCQlvcgorCXMvXihccyspcmV0LyQxYnhcdGxyL287CisKKyAgICAgICAgcHJpbnQgJF8sIlxuIjsKKyAgICB9Cit9CisKK2Nsb3NlIFNURE9VVDsgIyBlbmZvcmNlIGZsdXNoCmRpZmYgLS1naXQgYS9jcnlwdG8vbW9kZXMvZ2NtLmMgYi9jcnlwdG8vbW9kZXMvZ2NtLmMKaW5kZXggOTYxMzlhOC4uZjA5NjM3YiAxMDA2NDQKLS0tIGEvY3J5cHRvL21vZGVzL2djbS5jCisrKyBiL2NyeXB0by9tb2Rlcy9nY20uYwpAQCAtNTcsOCArNTcsOSBAQAogI2luY2x1ZGUgIi4uL2ludGVybmFsLmgiCiAKIAotI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fQVNNKSAmJiBcCi0gICAgKGRlZmluZWQoT1BFTlNTTF9YODYpIHx8IGRlZmluZWQoT1BFTlNTTF9YODZfNjQpIHx8IGRlZmluZWQoT1BFTlNTTF9BUk0pKQorI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fQVNNKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGRlZmluZWQoT1BFTlNTTF9YODYpIHx8IGRlZmluZWQoT1BFTlNTTF9YODZfNjQpIHx8IFwKKyAgICAgZGVmaW5lZChPUEVOU1NMX0FSTSkgfHwgZGVmaW5lZChPUEVOU1NMX0FBUkNINjQpKQogI2RlZmluZSBHSEFTSF9BU00KICNlbmRpZgogCkBAIC0xNDAsNyArMTQxLDcgQEAKICNlbmRpZgogfQogCi0jaWYgIWRlZmluZWQoR0hBU0hfQVNNKQorI2lmICFkZWZpbmVkKEdIQVNIX0FTTSkgfHwgZGVmaW5lZChPUEVOU1NMX0FBUkNINjQpCiBzdGF0aWMgY29uc3Qgc2l6ZV90IHJlbV80Yml0WzE2XSA9IHsKICAgICBQQUNLKDB4MDAwMCksIFBBQ0soMHgxQzIwKSwgUEFDSygweDM4NDApLCBQQUNLKDB4MjQ2MCksCiAgICAgUEFDSygweDcwODApLCBQQUNLKDB4NkNBMCksIFBBQ0soMHg0OEMwKSwgUEFDSygweDU0RTApLApAQCAtMzQ2LDE1ICszNDcsNDggQEAKIHZvaWQgZ2NtX2doYXNoXzRiaXRfeDg2KHVpbnQ2NF90IFhpWzJdLCBjb25zdCB1MTI4IEh0YWJsZVsxNl0sIGNvbnN0IHVpbnQ4X3QgKmlucCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pOwogI2VuZGlmCi0jZWxpZiBkZWZpbmVkKE9QRU5TU0xfQVJNKQorI2VsaWYgZGVmaW5lZChPUEVOU1NMX0FSTSkgfHwgZGVmaW5lZChPUEVOU1NMX0FBUkNINjQpCiAjaW5jbHVkZSAiLi4vYXJtX2FyY2guaCIKICNpZiBfX0FSTV9BUkNIX18gPj0gNwogI2RlZmluZSBHSEFTSF9BU01fQVJNCiAjZGVmaW5lIEdDTV9GVU5DUkVGXzRCSVQKLXZvaWQgZ2NtX2luaXRfbmVvbih1MTI4IEh0YWJsZVsxNl0sY29uc3QgdWludDY0X3QgWGlbMl0pOworCitzdGF0aWMgaW50IHBtdWxsX2NhcGFibGUoKSB7CisgIHJldHVybiAoT1BFTlNTTF9hcm1jYXBfUCAmIEFSTVY4X1BNVUxMKSAhPSAwOworfQorCit2b2lkIGdjbV9pbml0X3Y4KHUxMjggSHRhYmxlWzE2XSwgY29uc3QgdWludDY0X3QgWGlbMl0pOwordm9pZCBnY21fZ211bHRfdjgodWludDY0X3QgWGlbMl0sIGNvbnN0IHUxMjggSHRhYmxlWzE2XSk7Cit2b2lkIGdjbV9naGFzaF92OCh1aW50NjRfdCBYaVsyXSwgY29uc3QgdTEyOCBIdGFibGVbMTZdLCBjb25zdCB1aW50OF90ICppbnAsCisgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKKworI2lmIGRlZmluZWQoT1BFTlNTTF9BUk0pCisvKiAzMi1iaXQgQVJNIGFsc28gaGFzIHN1cHBvcnQgZm9yIGRvaW5nIEdDTSB3aXRoIE5FT04gaW5zdHJ1Y3Rpb25zLiAqLworc3RhdGljIGludCBuZW9uX2NhcGFibGUoKSB7CisgIHJldHVybiBDUllQVE9faXNfTkVPTl9jYXBhYmxlKCk7Cit9CisKK3ZvaWQgZ2NtX2luaXRfbmVvbih1MTI4IEh0YWJsZVsxNl0sIGNvbnN0IHVpbnQ2NF90IFhpWzJdKTsKIHZvaWQgZ2NtX2dtdWx0X25lb24odWludDY0X3QgWGlbMl0sIGNvbnN0IHUxMjggSHRhYmxlWzE2XSk7CiB2b2lkIGdjbV9naGFzaF9uZW9uKHVpbnQ2NF90IFhpWzJdLCBjb25zdCB1MTI4IEh0YWJsZVsxNl0sIGNvbnN0IHVpbnQ4X3QgKmlucCwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7CisjZWxzZQorLyogQUFyY2g2NCBvbmx5IGhhcyB0aGUgQVJNdjggdmVyc2lvbnMgb2YgZnVuY3Rpb25zLiAqLworc3RhdGljIGludCBuZW9uX2NhcGFibGUoKSB7CisgIHJldHVybiAwOworfQordm9pZCBnY21faW5pdF9uZW9uKHUxMjggSHRhYmxlWzE2XSwgY29uc3QgdWludDY0X3QgWGlbMl0pIHsKKyAgYWJvcnQoKTsKK30KK3ZvaWQgZ2NtX2dtdWx0X25lb24odWludDY0X3QgWGlbMl0sIGNvbnN0IHUxMjggSHRhYmxlWzE2XSkgeworICBhYm9ydCgpOworfQordm9pZCBnY21fZ2hhc2hfbmVvbih1aW50NjRfdCBYaVsyXSwgY29uc3QgdTEyOCBIdGFibGVbMTZdLCBjb25zdCB1aW50OF90ICppbnAsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pIHsKKyAgYWJvcnQoKTsKK30KKyNlbmRpZgorCiAjZW5kaWYKICNlbmRpZgogI2VuZGlmCkBAIC00MzMsNyArNDY3LDExIEBACiAgIGN0eC0+Z2hhc2ggPSBnY21fZ2hhc2hfNGJpdDsKICNlbmRpZgogI2VsaWYgZGVmaW5lZChHSEFTSF9BU01fQVJNKQotICBpZiAoQ1JZUFRPX2lzX05FT05fY2FwYWJsZSgpKSB7CisgIGlmIChwbXVsbF9jYXBhYmxlKCkpIHsKKyAgICBnY21faW5pdF92OChjdHgtPkh0YWJsZSwgY3R4LT5ILnUpOworICAgIGN0eC0+Z211bHQgPSBnY21fZ211bHRfdjg7CisgICAgY3R4LT5naGFzaCA9IGdjbV9naGFzaF92ODsKKyAgfSBlbHNlIGlmIChuZW9uX2NhcGFibGUoKSkgewogICAgIGdjbV9pbml0X25lb24oY3R4LT5IdGFibGUsY3R4LT5ILnUpOwogICAgIGN0eC0+Z211bHQgPSBnY21fZ211bHRfbmVvbjsKICAgICBjdHgtPmdoYXNoID0gZ2NtX2doYXNoX25lb247CkBAIC00NDMsOSArNDgxLDkgQEAKICAgICBjdHgtPmdoYXNoID0gZ2NtX2doYXNoXzRiaXQ7CiAgIH0KICNlbHNlCisgIGdjbV9pbml0XzRiaXQoY3R4LT5IdGFibGUsIGN0eC0+SC51KTsKICAgY3R4LT5nbXVsdCA9IGdjbV9nbXVsdF80Yml0OwogICBjdHgtPmdoYXNoID0gZ2NtX2doYXNoXzRiaXQ7Ci0gIGdjbV9pbml0XzRiaXQoY3R4LT5IdGFibGUsIGN0eC0+SC51KTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL0NNYWtlTGlzdHMudHh0IGIvY3J5cHRvL3NoYS9DTWFrZUxpc3RzLnR4dAppbmRleCAxYTU5N2Q5Li4zMDA3YzZlIDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhL0NNYWtlTGlzdHMudHh0CisrKyBiL2NyeXB0by9zaGEvQ01ha2VMaXN0cy50eHQKQEAgLTMwLDYgKzMwLDE2IEBACiAJKQogZW5kaWYoKQogCitpZiAoJHtBUkNIfSBTVFJFUVVBTCAiYWFyY2g2NCIpCisJc2V0KAorCQlTSEFfQVJDSF9TT1VSQ0VTCisKKwkJc2hhMS1hcm12OC4ke0FTTV9FWFR9CisJCXNoYTI1Ni1hcm12OC4ke0FTTV9FWFR9CisJCXNoYTUxMi1hcm12OC4ke0FTTV9FWFR9CisJKQorZW5kaWYoKQorCiBhZGRfbGlicmFyeSgKIAlzaGEKIApAQCAtNTEsMyArNjEsNiBAQAogcGVybGFzbShzaGExLWFybXY0LWxhcmdlLiR7QVNNX0VYVH0gYXNtL3NoYTEtYXJtdjQtbGFyZ2UucGwpCiBwZXJsYXNtKHNoYTI1Ni1hcm12NC4ke0FTTV9FWFR9IGFzbS9zaGEyNTYtYXJtdjQucGwpCiBwZXJsYXNtKHNoYTUxMi1hcm12NC4ke0FTTV9FWFR9IGFzbS9zaGE1MTItYXJtdjQucGwpCitwZXJsYXNtKHNoYTEtYXJtdjguJHtBU01fRVhUfSBhc20vc2hhMS1hcm12OC5wbCkKK3Blcmxhc20oc2hhMjU2LWFybXY4LiR7QVNNX0VYVH0gYXNtL3NoYTUxMi1hcm12OC5wbCBzaGEyNTYpCitwZXJsYXNtKHNoYTUxMi1hcm12OC4ke0FTTV9FWFR9IGFzbS9zaGE1MTItYXJtdjgucGwgc2hhNTEyKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhMS1hcm12OC5wbCBiL2NyeXB0by9zaGEvYXNtL3NoYTEtYXJtdjgucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGViMTIzOAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9zaGEvYXNtL3NoYTEtYXJtdjgucGwKQEAgLTAsMCArMSwzMzQgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BvcGVuc3NsLm9yZz4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNIQTEgZm9yIEFSTXY4LgorIworIyBQZXJmb3JtYW5jZSBpbiBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRlIGFuZCBpbXByb3ZlbWVudCBjb2VmZmljaWVudAorIyBvdmVyIGNvZGUgZ2VuZXJhdGVkIHdpdGggImRlZmF1bHQiIGNvbXBpbGVyOgorIworIwkJaGFyZHdhcmUtYXNzaXN0ZWQJc29mdHdhcmUoKikKKyMgQXBwbGUgQTcJMi4zMQkJCTQuMTMgKCsxNCUpCisjIENvcnRleC1BNTMJMi4xOQkJCTguNzMgKCsxMDglKQorIyBDb3J0ZXgtQTU3CTIuMzUJCQk3Ljg4ICgrNzQlKQorIworIyAoKikJU29mdHdhcmUgcmVzdWx0cyBhcmUgcHJlc2VudGVkIG1vc3RseSBmb3IgcmVmZXJlbmNlIHB1cnBvc2VzLgorCiskZmxhdm91ciA9IHNoaWZ0Oworb3BlbiBTVERPVVQsIj4iLnNoaWZ0OworCisoJGN0eCwkaW5wLCRudW0pPSgieDAiLCJ4MSIsIngyIik7CitAWHc9bWFwKCJ3JF8iLCgzLi4xNywxOSkpOworQFh4PW1hcCgieCRfIiwoMy4uMTcsMTkpKTsKK0BWPSgkQSwkQiwkQywkRCwkRSk9bWFwKCJ3JF8iLCgyMC4uMjQpKTsKKygkdDAsJHQxLCR0MiwkSyk9bWFwKCJ3JF8iLCgyNS4uMjgpKTsKKworCitzdWIgQk9EWV8wMF8xOSB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUpPUBfOworbXkgJGo9KCRpKzIpJjE1OworCiskY29kZS49PDxfX18gaWYgKCRpPDE1ICYmICEoJGkmMSkpOworCWxzcglAWHhbJGkrMV0sQFh4WyRpXSwjMzIKK19fXworJGNvZGUuPTw8X19fIGlmICgkaTwxNCAmJiAhKCRpJjEpKTsKKwlsZHIJQFh4WyRpKzJdLFskaW5wLCNgKCRpKzIpKjQtNjRgXQorX19fCiskY29kZS49PDxfX18gaWYgKCRpPDE0ICYmICgkaSYxKSk7CisjaWZkZWYJX19BUk1FQl9fCisJcm9yCUBYeFskaSsxXSxAWHhbJGkrMV0sIzMyCisjZWxzZQorCXJldjMyCUBYeFskaSsxXSxAWHhbJGkrMV0KKyNlbmRpZgorX19fCiskY29kZS49PDxfX18gaWYgKCRpPDE0KTsKKwliaWMJJHQwLCRkLCRiCisJYW5kCSR0MSwkYywkYgorCXJvcgkkdDIsJGEsIzI3CisJYWRkCSRkLCRkLCRLCQkvLyBmdXR1cmUgZSs9SworCW9ycgkkdDAsJHQwLCR0MQorCWFkZAkkZSwkZSwkdDIJCS8vIGUrPXJvdChhLDUpCisJcm9yCSRiLCRiLCMyCisJYWRkCSRkLCRkLEBYd1soJGkrMSkmMTVdCS8vIGZ1dHVyZSBlKz1YW2ldCisJYWRkCSRlLCRlLCR0MAkJLy8gZSs9RihiLGMsZCkKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT09MTkpOworCW1vdnoJJEssIzB4ZWJhMQorCW1vdmsJJEssIzB4NmVkOSxsc2wjMTYKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT49MTQpOworCSBlb3IJQFh3WyRqXSxAWHdbJGpdLEBYd1soJGorMikmMTVdCisJYmljCSR0MCwkZCwkYgorCWFuZAkkdDEsJGMsJGIKKwlyb3IJJHQyLCRhLCMyNworCSBlb3IJQFh3WyRqXSxAWHdbJGpdLEBYd1soJGorOCkmMTVdCisJYWRkCSRkLCRkLCRLCQkvLyBmdXR1cmUgZSs9SworCW9ycgkkdDAsJHQwLCR0MQorCWFkZAkkZSwkZSwkdDIJCS8vIGUrPXJvdChhLDUpCisJIGVvcglAWHdbJGpdLEBYd1skal0sQFh3WygkaisxMykmMTVdCisJcm9yCSRiLCRiLCMyCisJYWRkCSRkLCRkLEBYd1soJGkrMSkmMTVdCS8vIGZ1dHVyZSBlKz1YW2ldCisJYWRkCSRlLCRlLCR0MAkJLy8gZSs9RihiLGMsZCkKKwkgcm9yCUBYd1skal0sQFh3WyRqXSwjMzEKK19fXworfQorCitzdWIgQk9EWV80MF81OSB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUpPUBfOworbXkgJGo9KCRpKzIpJjE1OworCiskY29kZS49PDxfX18gaWYgKCRpPT01OSk7CisJbW92egkkSywjMHhjMWQ2CisJbW92awkkSywjMHhjYTYyLGxzbCMxNgorX19fCiskY29kZS49PDxfX187CisJb3JyCSR0MCwkYiwkYworCWFuZAkkdDEsJGIsJGMKKwkgZW9yCUBYd1skal0sQFh3WyRqXSxAWHdbKCRqKzIpJjE1XQorCXJvcgkkdDIsJGEsIzI3CisJYW5kCSR0MCwkdDAsJGQKKwlhZGQJJGQsJGQsJEsJCS8vIGZ1dHVyZSBlKz1LCisJIGVvcglAWHdbJGpdLEBYd1skal0sQFh3Wygkais4KSYxNV0KKwlhZGQJJGUsJGUsJHQyCQkvLyBlKz1yb3QoYSw1KQorCW9ycgkkdDAsJHQwLCR0MQorCXJvcgkkYiwkYiwjMgorCSBlb3IJQFh3WyRqXSxAWHdbJGpdLEBYd1soJGorMTMpJjE1XQorCWFkZAkkZCwkZCxAWHdbKCRpKzEpJjE1XQkvLyBmdXR1cmUgZSs9WFtpXQorCWFkZAkkZSwkZSwkdDAJCS8vIGUrPUYoYixjLGQpCisJIHJvcglAWHdbJGpdLEBYd1skal0sIzMxCitfX18KK30KKworc3ViIEJPRFlfMjBfMzkgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKK215ICRqPSgkaSsyKSYxNTsKKworJGNvZGUuPTw8X19fIGlmICgkaT09MzkpOworCW1vdnoJJEssIzB4YmNkYworCW1vdmsJJEssIzB4OGYxYixsc2wjMTYKK19fXworJGNvZGUuPTw8X19fIGlmICgkaTw3OCk7CisJIGVvcglAWHdbJGpdLEBYd1skal0sQFh3WygkaisyKSYxNV0KKwllb3IJJHQwLCRkLCRiCisJcm9yCSR0MiwkYSwjMjcKKwlhZGQJJGQsJGQsJEsJCS8vIGZ1dHVyZSBlKz1LCisJIGVvcglAWHdbJGpdLEBYd1skal0sQFh3Wygkais4KSYxNV0KKwllb3IJJHQwLCR0MCwkYworCWFkZAkkZSwkZSwkdDIJCS8vIGUrPXJvdChhLDUpCisJcm9yCSRiLCRiLCMyCisJIGVvcglAWHdbJGpdLEBYd1skal0sQFh3WygkaisxMykmMTVdCisJYWRkCSRkLCRkLEBYd1soJGkrMSkmMTVdCS8vIGZ1dHVyZSBlKz1YW2ldCisJYWRkCSRlLCRlLCR0MAkJLy8gZSs9RihiLGMsZCkKKwkgcm9yCUBYd1skal0sQFh3WyRqXSwjMzEKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT09NzgpOworCWxkcAlAWHdbMV0sQFh3WzJdLFskY3R4XQorCWVvcgkkdDAsJGQsJGIKKwlyb3IJJHQyLCRhLCMyNworCWFkZAkkZCwkZCwkSwkJLy8gZnV0dXJlIGUrPUsKKwllb3IJJHQwLCR0MCwkYworCWFkZAkkZSwkZSwkdDIJCS8vIGUrPXJvdChhLDUpCisJcm9yCSRiLCRiLCMyCisJYWRkCSRkLCRkLEBYd1soJGkrMSkmMTVdCS8vIGZ1dHVyZSBlKz1YW2ldCisJYWRkCSRlLCRlLCR0MAkJLy8gZSs9RihiLGMsZCkKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT09NzkpOworCWxkcAlAWHdbM10sQFh3WzRdLFskY3R4LCM4XQorCWVvcgkkdDAsJGQsJGIKKwlyb3IJJHQyLCRhLCMyNworCWVvcgkkdDAsJHQwLCRjCisJYWRkCSRlLCRlLCR0MgkJLy8gZSs9cm90KGEsNSkKKwlyb3IJJGIsJGIsIzIKKwlsZHIJQFh3WzVdLFskY3R4LCMxNl0KKwlhZGQJJGUsJGUsJHQwCQkvLyBlKz1GKGIsYyxkKQorX19fCit9CisKKyRjb2RlLj08PF9fXzsKKyNpbmNsdWRlICJhcm1fYXJjaC5oIgorCisudGV4dAorCisuZ2xvYmwJc2hhMV9ibG9ja19kYXRhX29yZGVyCisudHlwZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXIsJWZ1bmN0aW9uCisuYWxpZ24JNgorc2hhMV9ibG9ja19kYXRhX29yZGVyOgorCWxkcgl4MTYsLkxPUEVOU1NMX2FybWNhcF9QCisJYWRyCXgxNywuTE9QRU5TU0xfYXJtY2FwX1AKKwlhZGQJeDE2LHgxNix4MTcKKwlsZHIJdzE2LFt4MTZdCisJdHN0CXcxNiwjQVJNVjhfU0hBMQorCWIubmUJLkx2OF9lbnRyeQorCisJc3RwCXgyOSx4MzAsW3NwLCMtOTZdIQorCWFkZAl4Mjksc3AsIzAKKwlzdHAJeDE5LHgyMCxbc3AsIzE2XQorCXN0cAl4MjEseDIyLFtzcCwjMzJdCisJc3RwCXgyMyx4MjQsW3NwLCM0OF0KKwlzdHAJeDI1LHgyNixbc3AsIzY0XQorCXN0cAl4MjcseDI4LFtzcCwjODBdCisKKwlsZHAJJEEsJEIsWyRjdHhdCisJbGRwCSRDLCRELFskY3R4LCM4XQorCWxkcgkkRSxbJGN0eCwjMTZdCisKKy5Mb29wOgorCWxkcglAWHhbMF0sWyRpbnBdLCM2NAorCW1vdnoJJEssIzB4Nzk5OQorCXN1YgkkbnVtLCRudW0sIzEKKwltb3ZrCSRLLCMweDVhODIsbHNsIzE2CisjaWZkZWYJX19BUk1FQl9fCisJcm9yCSRYeFswXSxAWHhbMF0sIzMyCisjZWxzZQorCXJldjMyCUBYeFswXSxAWHhbMF0KKyNlbmRpZgorCWFkZAkkRSwkRSwkSwkJLy8gd2FybSBpdCB1cAorCWFkZAkkRSwkRSxAWHdbMF0KK19fXworZm9yKCRpPTA7JGk8MjA7JGkrKykJeyAmQk9EWV8wMF8xOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KK2Zvcig7JGk8NDA7JGkrKykJeyAmQk9EWV8yMF8zOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KK2Zvcig7JGk8NjA7JGkrKykJeyAmQk9EWV80MF81OSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KK2Zvcig7JGk8ODA7JGkrKykJeyAmQk9EWV8yMF8zOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KKyRjb2RlLj08PF9fXzsKKwlhZGQJJEIsJEIsQFh3WzJdCisJYWRkCSRDLCRDLEBYd1szXQorCWFkZAkkQSwkQSxAWHdbMV0KKwlhZGQJJEQsJEQsQFh3WzRdCisJYWRkCSRFLCRFLEBYd1s1XQorCXN0cAkkQSwkQixbJGN0eF0KKwlzdHAJJEMsJEQsWyRjdHgsIzhdCisJc3RyCSRFLFskY3R4LCMxNl0KKwljYm56CSRudW0sLkxvb3AKKworCWxkcAl4MTkseDIwLFtzcCwjMTZdCisJbGRwCXgyMSx4MjIsW3NwLCMzMl0KKwlsZHAJeDIzLHgyNCxbc3AsIzQ4XQorCWxkcAl4MjUseDI2LFtzcCwjNjRdCisJbGRwCXgyNyx4MjgsW3NwLCM4MF0KKwlsZHIJeDI5LFtzcF0sIzk2CisJcmV0Cisuc2l6ZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXIsLi1zaGExX2Jsb2NrX2RhdGFfb3JkZXIKK19fXwore3t7CitteSAoJEFCQ0QsJEUsJEUwLCRFMSk9bWFwKCJ2JF8uMTZiIiwoMC4uMykpOworbXkgQE1TRz1tYXAoInYkXy4xNmIiLCg0Li43KSk7CitteSBAS3h4PW1hcCgidiRfLjRzIiwoMTYuLjE5KSk7CitteSAoJFcwLCRXMSk9KCJ2MjAuNHMiLCJ2MjEuNHMiKTsKK215ICRBQkNEX1NBVkU9InYyMi4xNmIiOworCiskY29kZS49PDxfX187CisudHlwZQlzaGExX2Jsb2NrX2FybXY4LCVmdW5jdGlvbgorLmFsaWduCTYKK3NoYTFfYmxvY2tfYXJtdjg6CisuTHY4X2VudHJ5OgorCXN0cAl4MjkseDMwLFtzcCwjLTE2XSEKKwlhZGQJeDI5LHNwLCMwCisKKwlhZHIJeDQsLkxjb25zdAorCWVvcgkkRSwkRSwkRQorCWxkMS4zMgl7JEFCQ0R9LFskY3R4XSwjMTYKKwlsZDEuMzIJeyRFfVswXSxbJGN0eF0KKwlzdWIJJGN0eCwkY3R4LCMxNgorCWxkMS4zMgl7QEt4eFswXS1AS3h4WzNdfSxbeDRdCisKKy5Mb29wX2h3OgorCWxkMQl7QE1TR1swXS1ATVNHWzNdfSxbJGlucF0sIzY0CisJc3ViCSRudW0sJG51bSwjMQorCXJldjMyCUBNU0dbMF0sQE1TR1swXQorCXJldjMyCUBNU0dbMV0sQE1TR1sxXQorCisJYWRkLmkzMgkkVzAsQEt4eFswXSxATVNHWzBdCisJcmV2MzIJQE1TR1syXSxATVNHWzJdCisJb3JyCSRBQkNEX1NBVkUsJEFCQ0QsJEFCQ0QJLy8gb2ZmbG9hZAorCisJYWRkLmkzMgkkVzEsQEt4eFswXSxATVNHWzFdCisJcmV2MzIJQE1TR1szXSxATVNHWzNdCisJc2hhMWgJJEUxLCRBQkNECisJc2hhMWMJJEFCQ0QsJEUsJFcwCQkvLyAwCisJYWRkLmkzMgkkVzAsQEt4eFskal0sQE1TR1syXQorCXNoYTFzdTAJQE1TR1swXSxATVNHWzFdLEBNU0dbMl0KK19fXworZm9yICgkaj0wLCRpPTE7JGk8MjAtMzskaSsrKSB7CitteSAkZj0oImMiLCJwIiwibSIsInAiKVskaS81XTsKKyRjb2RlLj08PF9fXzsKKwlzaGExaAkkRTAsJEFCQ0QJCS8vICRpCisJc2hhMSRmCSRBQkNELCRFMSwkVzEKKwlhZGQuaTMyCSRXMSxAS3h4WyRqXSxATVNHWzNdCisJc2hhMXN1MQlATVNHWzBdLEBNU0dbM10KK19fXworJGNvZGUuPTw8X19fIGlmICgkaTwyMC00KTsKKwlzaGExc3UwCUBNU0dbMV0sQE1TR1syXSxATVNHWzNdCitfX18KKwkoJEUwLCRFMSk9KCRFMSwkRTApOwkJKCRXMCwkVzEpPSgkVzEsJFcwKTsKKwlwdXNoKEBNU0csc2hpZnQoQE1TRykpOwkJJGorKyBpZiAoKCgkaSszKSU1KT09MCk7Cit9CiskY29kZS49PDxfX187CisJc2hhMWgJJEUwLCRBQkNECQkvLyAkaQorCXNoYTFwCSRBQkNELCRFMSwkVzEKKwlhZGQuaTMyCSRXMSxAS3h4WyRqXSxATVNHWzNdCisKKwlzaGExaAkkRTEsJEFCQ0QJCS8vIDE4CisJc2hhMXAJJEFCQ0QsJEUwLCRXMAorCisJc2hhMWgJJEUwLCRBQkNECQkvLyAxOQorCXNoYTFwCSRBQkNELCRFMSwkVzEKKworCWFkZC5pMzIJJEUsJEUsJEUwCisJYWRkLmkzMgkkQUJDRCwkQUJDRCwkQUJDRF9TQVZFCisKKwljYm56CSRudW0sLkxvb3BfaHcKKworCXN0MS4zMgl7JEFCQ0R9LFskY3R4XSwjMTYKKwlzdDEuMzIJeyRFfVswXSxbJGN0eF0KKworCWxkcgl4MjksW3NwXSwjMTYKKwlyZXQKKy5zaXplCXNoYTFfYmxvY2tfYXJtdjgsLi1zaGExX2Jsb2NrX2FybXY4CisuYWxpZ24JNgorLkxjb25zdDoKKy5sb25nCTB4NWE4Mjc5OTksMHg1YTgyNzk5OSwweDVhODI3OTk5LDB4NWE4Mjc5OTkJLy9LXzAwXzE5CisubG9uZwkweDZlZDllYmExLDB4NmVkOWViYTEsMHg2ZWQ5ZWJhMSwweDZlZDllYmExCS8vS18yMF8zOQorLmxvbmcJMHg4ZjFiYmNkYywweDhmMWJiY2RjLDB4OGYxYmJjZGMsMHg4ZjFiYmNkYwkvL0tfNDBfNTkKKy5sb25nCTB4Y2E2MmMxZDYsMHhjYTYyYzFkNiwweGNhNjJjMWQ2LDB4Y2E2MmMxZDYJLy9LXzYwXzc5CisuTE9QRU5TU0xfYXJtY2FwX1A6CisucXVhZAlPUEVOU1NMX2FybWNhcF9QLS4KKy5hc2NpegkiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIEFSTXY4LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduCTIKKy5jb21tCU9QRU5TU0xfYXJtY2FwX1AsNCw0CitfX18KK319fQorCit7ICAgbXkJJW9wY29kZSA9ICgKKwkic2hhMWMiCQk9PiAweDVlMDAwMDAwLAkic2hhMXAiCQk9PiAweDVlMDAxMDAwLAorCSJzaGExbSIJCT0+IDB4NWUwMDIwMDAsCSJzaGExc3UwIgk9PiAweDVlMDAzMDAwLAorCSJzaGExaCIJCT0+IDB4NWUyODA4MDAsCSJzaGExc3UxIgk9PiAweDVlMjgxODAwCSk7CisKKyAgICBzdWIgdW5zaGExIHsKKwlteSAoJG1uZW1vbmljLCRhcmcpPUBfOworCisJJGFyZyA9fiBtL1txdl0oWzAtOV0rKVteLF0qLFxzKltxdl0oWzAtOV0rKVteLF0qKD86LFxzKltxdl0oWzAtOV0rKSk/L28KKwkmJgorCXNwcmludGYgIi5pbnN0XHQweCUwOHhcdC8vJXMgJXMiLAorCQkJJG9wY29kZXskbW5lbW9uaWN9fCQxfCgkMjw8NSl8KCQzPDwxNiksCisJCQkkbW5lbW9uaWMsJGFyZzsKKyAgICB9Cit9CisKK2ZvcmVhY2goc3BsaXQoIlxuIiwkY29kZSkpIHsKKworCXMvXGAoW15cYF0qKVxgL2V2YWwoJDEpL2dlbzsKKworCXMvXGIoc2hhMVx3KylccysoW3F2XS4qKS91bnNoYTEoJDEsJDIpL2dlbzsKKworCXMvXC5cdz8zMlxiLy9vCQlhbmQgcy9cLjE2Yi9cLjRzL2dvOworCW0vKGxkfHN0KTFbXlxbXStcWzBcXS9vCWFuZCBzL1wuNHMvXC5zL2dvOworCisJcHJpbnQgJF8sIlxuIjsKK30KKworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhNTEyLWFybXY4LnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhNTEyLWFybXY4LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWM4MTIKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItYXJtdjgucGwKQEAgLTAsMCArMSw0MTkgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BvcGVuc3NsLm9yZz4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNIQTI1Ni81MTIgZm9yIEFSTXY4LgorIworIyBQZXJmb3JtYW5jZSBpbiBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRlIGFuZCBpbXByb3ZlbWVudCBjb2VmZmljaWVudAorIyBvdmVyIGNvZGUgZ2VuZXJhdGVkIHdpdGggImRlZmF1bHQiIGNvbXBpbGVyOgorIworIwkJU0hBMjU2LWh3CVNIQTI1NigqKQlTSEE1MTIKKyMgQXBwbGUgQTcJMS45NwkJMTAuNSAoKzMzJSkJNi43MyAoLTElKCoqKSkKKyMgQ29ydGV4LUE1MwkyLjM4CQkxNS42ICgrMTEwJSkJMTAuMSAoKzE5MCUoKioqKSkKKyMgQ29ydGV4LUE1NwkyLjMxCQkxMS42ICgrODYlKQk3LjUxICgrMjYwJSgqKiopKQorIyAKKyMgKCopCVNvZnR3YXJlIFNIQTI1NiByZXN1bHRzIGFyZSBvZiBsZXNzZXIgcmVsZXZhbmNlLCBwcmVzZW50ZWQKKyMJbW9zdGx5IGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzLgorIyAoKiopCVRoZSByZXN1bHQgaXMgYSB0cmFkZS1vZmY6IGl0J3MgcG9zc2libGUgdG8gaW1wcm92ZSBpdCBieQorIwkxMCUgKG9yIGJ5IDEgY3ljbGUgcGVyIHJvdW5kKSwgYnV0IGF0IHRoZSBjb3N0IG9mIDIwJSBsb3NzCisjCW9uIENvcnRleC1BNTMgKG9yIGJ5IDQgY3ljbGVzIHBlciByb3VuZCkuCisjICgqKiopCVN1cGVyLWltcHJlc3NpdmUgY29lZmZpY2llbnRzIG92ZXIgZ2NjLWdlbmVyYXRlZCBjb2RlIGFyZQorIwlpbmRpY2F0aW9uIG9mIHNvbWUgY29tcGlsZXIgInBhdGhvbG9neSIsIG1vc3Qgbm90YWJseSBjb2RlCisjCWdlbmVyYXRlZCB3aXRoIC1tZ2VuZXJhbC1yZWdzLW9ubHkgaXMgc2lnbmlmaWNhbnR5IGZhc3RlcgorIwlhbmQgbGFncyBiZWhpbmQgYXNzZW1ibHkgb25seSBieSA1MC05MCUuCisKKyRmbGF2b3VyPXNoaWZ0OworJG91dHB1dD1zaGlmdDsKKworaWYgKCRvdXRwdXQgPX4gLzUxMi8pIHsKKwkkQklUUz01MTI7CisJJFNaPTg7CisJQFNpZ21hMD0oMjgsMzQsMzkpOworCUBTaWdtYTE9KDE0LDE4LDQxKTsKKwlAc2lnbWEwPSgxLCAgOCwgNyk7CisJQHNpZ21hMT0oMTksNjEsIDYpOworCSRyb3VuZHM9ODA7CisJJHJlZ190PSJ4IjsKK30gZWxzZSB7CisJJEJJVFM9MjU2OworCSRTWj00OworCUBTaWdtYTA9KCAyLDEzLDIyKTsKKwlAU2lnbWExPSggNiwxMSwyNSk7CisJQHNpZ21hMD0oIDcsMTgsIDMpOworCUBzaWdtYTE9KDE3LDE5LDEwKTsKKwkkcm91bmRzPTY0OworCSRyZWdfdD0idyI7Cit9CisKKyRmdW5jPSJzaGEke0JJVFN9X2Jsb2NrX2RhdGFfb3JkZXIiOworCisoJGN0eCwkaW5wLCRudW0sJEt0YmwpPW1hcCgieCRfIiwoMC4uMiwzMCkpOworCitAWD1tYXAoIiRyZWdfdCRfIiwoMy4uMTUsMC4uMikpOworQFY9KCRBLCRCLCRDLCRELCRFLCRGLCRHLCRIKT1tYXAoIiRyZWdfdCRfIiwoMjAuLjI3KSk7CisoJHQwLCR0MSwkdDIsJHQzKT1tYXAoIiRyZWdfdCRfIiwoMTYsMTcsMTksMjgpKTsKKworc3ViIEJPRFlfMDBfeHggeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlLCRmLCRnLCRoKT1AXzsKK215ICRqPSgkaSsxKSYxNTsKK215ICgkVDAsJFQxLCRUMik9KEBYWygkaS04KSYxNV0sQFhbKCRpLTkpJjE1XSxAWFsoJGktMTApJjE1XSk7CisgICAkVDA9QFhbJGkrM10gaWYgKCRpPDExKTsKKworJGNvZGUuPTw8X19fCWlmICgkaTwxNik7CisjaWZuZGVmCV9fQVJNRUJfXworCXJldglAWFskaV0sQFhbJGldCQkJLy8gJGkKKyNlbmRpZgorX19fCiskY29kZS49PDxfX18JaWYgKCRpPDEzICYmICgkaSYxKSk7CisJbGRwCUBYWyRpKzFdLEBYWyRpKzJdLFskaW5wXSwjMiokU1oKK19fXworJGNvZGUuPTw8X19fCWlmICgkaT09MTMpOworCWxkcAlAWFsxNF0sQFhbMTVdLFskaW5wXQorX19fCiskY29kZS49PDxfX18JaWYgKCRpPj0xNCk7CisJbGRyCUBYWygkaS0xMSkmMTVdLFtzcCwjYCRTWiooKCRpLTExKSU0KWBdCitfX18KKyRjb2RlLj08PF9fXwlpZiAoJGk+MCAmJiAkaTwxNik7CisJYWRkCSRhLCRhLCR0MQkJCS8vIGgrPVNpZ21hMChhKQorX19fCiskY29kZS49PDxfX18JaWYgKCRpPj0xMSk7CisJc3RyCUBYWygkaS04KSYxNV0sW3NwLCNgJFNaKigoJGktOCklNClgXQorX19fCisjIFdoaWxlIEFSTXY4IHNwZWNpZmllcyBtZXJnZWQgcm90YXRlLW4tbG9naWNhbCBvcGVyYXRpb24gc3VjaCBhcworIyAnZW9yIHgseSx6LHJvciNuJywgaXQgd2FzIGZvdW5kIHRvIG5lZ2F0aXZlbHkgYWZmZWN0IHBlcmZvcm1hbmNlCisjIG9uIEFwcGxlIEE3LiBUaGUgcmVhc29uIHNlZW1zIHRvIGJlIHRoYXQgaXQgcmVxdWlyZXMgZXZlbiAneScgdG8KKyMgYmUgYXZhaWxhYmxlIGVhcmxpZXIuIFRoaXMgbWVhbnMgdGhhdCBzdWNoIG1lcmdlZCBpbnN0cnVjdGlvbiBpcworIyBub3QgbmVjZXNzYXJpbHkgYmVzdCBjaG9pY2Ugb24gY3JpdGljYWwgcGF0aC4uLiBPbiB0aGUgb3RoZXIgaGFuZAorIyBDb3J0ZXgtQTV4IGhhbmRsZXMgbWVyZ2VkIGluc3RydWN0aW9ucyBtdWNoIGJldHRlciB0aGFuIGRpc2pvaW50CisjIHJvdGF0ZSBhbmQgbG9naWNhbC4uLiBTZWUgKCoqKSBmb290bm90ZSBhYm92ZS4KKyRjb2RlLj08PF9fXwlpZiAoJGk8MTUpOworCXJvcgkkdDAsJGUsIyRTaWdtYTFbMF0KKwlhZGQJJGgsJGgsJHQyCQkJLy8gaCs9S1tpXQorCWVvcgkkVDAsJGUsJGUscm9yI2AkU2lnbWExWzJdLSRTaWdtYTFbMV1gCisJYW5kCSR0MSwkZiwkZQorCWJpYwkkdDIsJGcsJGUKKwlhZGQJJGgsJGgsQFhbJGkmMTVdCQkJLy8gaCs9WFtpXQorCW9ycgkkdDEsJHQxLCR0MgkJCS8vIENoKGUsZixnKQorCWVvcgkkdDIsJGEsJGIJCQkvLyBhXmIsIGJeYyBpbiBuZXh0IHJvdW5kCisJZW9yCSR0MCwkdDAsJFQwLHJvciMkU2lnbWExWzFdCS8vIFNpZ21hMShlKQorCXJvcgkkVDAsJGEsIyRTaWdtYTBbMF0KKwlhZGQJJGgsJGgsJHQxCQkJLy8gaCs9Q2goZSxmLGcpCisJZW9yCSR0MSwkYSwkYSxyb3IjYCRTaWdtYTBbMl0tJFNpZ21hMFsxXWAKKwlhZGQJJGgsJGgsJHQwCQkJLy8gaCs9U2lnbWExKGUpCisJYW5kCSR0MywkdDMsJHQyCQkJLy8gKGJeYykmPShhXmIpCisJYWRkCSRkLCRkLCRoCQkJLy8gZCs9aAorCWVvcgkkdDMsJHQzLCRiCQkJLy8gTWFqKGEsYixjKQorCWVvcgkkdDEsJFQwLCR0MSxyb3IjJFNpZ21hMFsxXQkvLyBTaWdtYTAoYSkKKwlhZGQJJGgsJGgsJHQzCQkJLy8gaCs9TWFqKGEsYixjKQorCWxkcgkkdDMsWyRLdGJsXSwjJFNaCQkvLyAqSysrLCAkdDIgaW4gbmV4dCByb3VuZAorCS8vYWRkCSRoLCRoLCR0MQkJCS8vIGgrPVNpZ21hMChhKQorX19fCiskY29kZS49PDxfX18JaWYgKCRpPj0xNSk7CisJcm9yCSR0MCwkZSwjJFNpZ21hMVswXQorCWFkZAkkaCwkaCwkdDIJCQkvLyBoKz1LW2ldCisJcm9yCSRUMSxAWFsoJGorMSkmMTVdLCMkc2lnbWEwWzBdCisJYW5kCSR0MSwkZiwkZQorCXJvcgkkVDIsQFhbKCRqKzE0KSYxNV0sIyRzaWdtYTFbMF0KKwliaWMJJHQyLCRnLCRlCisJcm9yCSRUMCwkYSwjJFNpZ21hMFswXQorCWFkZAkkaCwkaCxAWFskaSYxNV0JCQkvLyBoKz1YW2ldCisJZW9yCSR0MCwkdDAsJGUscm9yIyRTaWdtYTFbMV0KKwllb3IJJFQxLCRUMSxAWFsoJGorMSkmMTVdLHJvciMkc2lnbWEwWzFdCisJb3JyCSR0MSwkdDEsJHQyCQkJLy8gQ2goZSxmLGcpCisJZW9yCSR0MiwkYSwkYgkJCS8vIGFeYiwgYl5jIGluIG5leHQgcm91bmQKKwllb3IJJHQwLCR0MCwkZSxyb3IjJFNpZ21hMVsyXQkvLyBTaWdtYTEoZSkKKwllb3IJJFQwLCRUMCwkYSxyb3IjJFNpZ21hMFsxXQorCWFkZAkkaCwkaCwkdDEJCQkvLyBoKz1DaChlLGYsZykKKwlhbmQJJHQzLCR0MywkdDIJCQkvLyAoYl5jKSY9KGFeYikKKwllb3IJJFQyLCRUMixAWFsoJGorMTQpJjE1XSxyb3IjJHNpZ21hMVsxXQorCWVvcgkkVDEsJFQxLEBYWygkaisxKSYxNV0sbHNyIyRzaWdtYTBbMl0JLy8gc2lnbWEwKFhbaSsxXSkKKwlhZGQJJGgsJGgsJHQwCQkJLy8gaCs9U2lnbWExKGUpCisJZW9yCSR0MywkdDMsJGIJCQkvLyBNYWooYSxiLGMpCisJZW9yCSR0MSwkVDAsJGEscm9yIyRTaWdtYTBbMl0JLy8gU2lnbWEwKGEpCisJZW9yCSRUMiwkVDIsQFhbKCRqKzE0KSYxNV0sbHNyIyRzaWdtYTFbMl0JLy8gc2lnbWExKFhbaSsxNF0pCisJYWRkCUBYWyRqXSxAWFskal0sQFhbKCRqKzkpJjE1XQorCWFkZAkkZCwkZCwkaAkJCS8vIGQrPWgKKwlhZGQJJGgsJGgsJHQzCQkJLy8gaCs9TWFqKGEsYixjKQorCWxkcgkkdDMsWyRLdGJsXSwjJFNaCQkvLyAqSysrLCAkdDIgaW4gbmV4dCByb3VuZAorCWFkZAlAWFskal0sQFhbJGpdLCRUMQorCWFkZAkkaCwkaCwkdDEJCQkvLyBoKz1TaWdtYTAoYSkKKwlhZGQJQFhbJGpdLEBYWyRqXSwkVDIKK19fXworCSgkdDIsJHQzKT0oJHQzLCR0Mik7Cit9CisKKyRjb2RlLj08PF9fXzsKKyNpbmNsdWRlICJhcm1fYXJjaC5oIgorCisudGV4dAorCisuZ2xvYmwJJGZ1bmMKKy50eXBlCSRmdW5jLCVmdW5jdGlvbgorLmFsaWduCTYKKyRmdW5jOgorX19fCiskY29kZS49PDxfX18JaWYgKCRTWj09NCk7CisJbGRyCXgxNiwuTE9QRU5TU0xfYXJtY2FwX1AKKwlhZHIJeDE3LC5MT1BFTlNTTF9hcm1jYXBfUAorCWFkZAl4MTYseDE2LHgxNworCWxkcgl3MTYsW3gxNl0KKwl0c3QJdzE2LCNBUk1WOF9TSEEyNTYKKwliLm5lCS5MdjhfZW50cnkKK19fXworJGNvZGUuPTw8X19fOworCXN0cAl4MjkseDMwLFtzcCwjLTEyOF0hCisJYWRkCXgyOSxzcCwjMAorCisJc3RwCXgxOSx4MjAsW3NwLCMxNl0KKwlzdHAJeDIxLHgyMixbc3AsIzMyXQorCXN0cAl4MjMseDI0LFtzcCwjNDhdCisJc3RwCXgyNSx4MjYsW3NwLCM2NF0KKwlzdHAJeDI3LHgyOCxbc3AsIzgwXQorCXN1YglzcCxzcCwjNCokU1oKKworCWxkcAkkQSwkQixbJGN0eF0JCQkJLy8gbG9hZCBjb250ZXh0CisJbGRwCSRDLCRELFskY3R4LCMyKiRTWl0KKwlsZHAJJEUsJEYsWyRjdHgsIzQqJFNaXQorCWFkZAkkbnVtLCRpbnAsJG51bSxsc2wjYGxvZygxNiokU1opL2xvZygyKWAJLy8gZW5kIG9mIGlucHV0CisJbGRwCSRHLCRILFskY3R4LCM2KiRTWl0KKwlhZHIJJEt0YmwsSyRCSVRTCisJc3RwCSRjdHgsJG51bSxbeDI5LCM5Nl0KKworLkxvb3A6CisJbGRwCUBYWzBdLEBYWzFdLFskaW5wXSwjMiokU1oKKwlsZHIJJHQyLFskS3RibF0sIyRTWgkJCS8vICpLKysKKwllb3IJJHQzLCRCLCRDCQkJCS8vIG1hZ2ljIHNlZWQKKwlzdHIJJGlucCxbeDI5LCMxMTJdCitfX18KK2ZvciAoJGk9MDskaTwxNjskaSsrKQl7ICZCT0RZXzAwX3h4KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorJGNvZGUuPSIuTG9vcF8xNl94eDpcbiI7Citmb3IgKDskaTwzMjskaSsrKQl7ICZCT0RZXzAwX3h4KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorJGNvZGUuPTw8X19fOworCWNibnoJJHQyLC5Mb29wXzE2X3h4CisKKwlsZHAJJGN0eCwkbnVtLFt4MjksIzk2XQorCWxkcgkkaW5wLFt4MjksIzExMl0KKwlzdWIJJEt0YmwsJEt0YmwsI2AkU1oqKCRyb3VuZHMrMSlgCQkvLyByZXdpbmQKKworCWxkcAlAWFswXSxAWFsxXSxbJGN0eF0KKwlsZHAJQFhbMl0sQFhbM10sWyRjdHgsIzIqJFNaXQorCWFkZAkkaW5wLCRpbnAsIzE0KiRTWgkJCS8vIGFkdmFuY2UgaW5wdXQgcG9pbnRlcgorCWxkcAlAWFs0XSxAWFs1XSxbJGN0eCwjNCokU1pdCisJYWRkCSRBLCRBLEBYWzBdCisJbGRwCUBYWzZdLEBYWzddLFskY3R4LCM2KiRTWl0KKwlhZGQJJEIsJEIsQFhbMV0KKwlhZGQJJEMsJEMsQFhbMl0KKwlhZGQJJEQsJEQsQFhbM10KKwlzdHAJJEEsJEIsWyRjdHhdCisJYWRkCSRFLCRFLEBYWzRdCisJYWRkCSRGLCRGLEBYWzVdCisJc3RwCSRDLCRELFskY3R4LCMyKiRTWl0KKwlhZGQJJEcsJEcsQFhbNl0KKwlhZGQJJEgsJEgsQFhbN10KKwljbXAJJGlucCwkbnVtCisJc3RwCSRFLCRGLFskY3R4LCM0KiRTWl0KKwlzdHAJJEcsJEgsWyRjdHgsIzYqJFNaXQorCWIubmUJLkxvb3AKKworCWxkcAl4MTkseDIwLFt4MjksIzE2XQorCWFkZAlzcCxzcCwjNCokU1oKKwlsZHAJeDIxLHgyMixbeDI5LCMzMl0KKwlsZHAJeDIzLHgyNCxbeDI5LCM0OF0KKwlsZHAJeDI1LHgyNixbeDI5LCM2NF0KKwlsZHAJeDI3LHgyOCxbeDI5LCM4MF0KKwlsZHAJeDI5LHgzMCxbc3BdLCMxMjgKKwlyZXQKKy5zaXplCSRmdW5jLC4tJGZ1bmMKKworLmFsaWduCTYKKy50eXBlCUskQklUUywlb2JqZWN0CitLJEJJVFM6CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJFNaPT04KTsKKwkucXVhZAkweDQyOGEyZjk4ZDcyOGFlMjIsMHg3MTM3NDQ5MTIzZWY2NWNkCisJLnF1YWQJMHhiNWMwZmJjZmVjNGQzYjJmLDB4ZTliNWRiYTU4MTg5ZGJiYworCS5xdWFkCTB4Mzk1NmMyNWJmMzQ4YjUzOCwweDU5ZjExMWYxYjYwNWQwMTkKKwkucXVhZAkweDkyM2Y4MmE0YWYxOTRmOWIsMHhhYjFjNWVkNWRhNmQ4MTE4CisJLnF1YWQJMHhkODA3YWE5OGEzMDMwMjQyLDB4MTI4MzViMDE0NTcwNmZiZQorCS5xdWFkCTB4MjQzMTg1YmU0ZWU0YjI4YywweDU1MGM3ZGMzZDVmZmI0ZTIKKwkucXVhZAkweDcyYmU1ZDc0ZjI3Yjg5NmYsMHg4MGRlYjFmZTNiMTY5NmIxCisJLnF1YWQJMHg5YmRjMDZhNzI1YzcxMjM1LDB4YzE5YmYxNzRjZjY5MjY5NAorCS5xdWFkCTB4ZTQ5YjY5YzE5ZWYxNGFkMiwweGVmYmU0Nzg2Mzg0ZjI1ZTMKKwkucXVhZAkweDBmYzE5ZGM2OGI4Y2Q1YjUsMHgyNDBjYTFjYzc3YWM5YzY1CisJLnF1YWQJMHgyZGU5MmM2ZjU5MmIwMjc1LDB4NGE3NDg0YWE2ZWE2ZTQ4MworCS5xdWFkCTB4NWNiMGE5ZGNiZDQxZmJkNCwweDc2Zjk4OGRhODMxMTUzYjUKKwkucXVhZAkweDk4M2U1MTUyZWU2NmRmYWIsMHhhODMxYzY2ZDJkYjQzMjEwCisJLnF1YWQJMHhiMDAzMjdjODk4ZmIyMTNmLDB4YmY1OTdmYzdiZWVmMGVlNAorCS5xdWFkCTB4YzZlMDBiZjMzZGE4OGZjMiwweGQ1YTc5MTQ3OTMwYWE3MjUKKwkucXVhZAkweDA2Y2E2MzUxZTAwMzgyNmYsMHgxNDI5Mjk2NzBhMGU2ZTcwCisJLnF1YWQJMHgyN2I3MGE4NTQ2ZDIyZmZjLDB4MmUxYjIxMzg1YzI2YzkyNgorCS5xdWFkCTB4NGQyYzZkZmM1YWM0MmFlZCwweDUzMzgwZDEzOWQ5NWIzZGYKKwkucXVhZAkweDY1MGE3MzU0OGJhZjYzZGUsMHg3NjZhMGFiYjNjNzdiMmE4CisJLnF1YWQJMHg4MWMyYzkyZTQ3ZWRhZWU2LDB4OTI3MjJjODUxNDgyMzUzYgorCS5xdWFkCTB4YTJiZmU4YTE0Y2YxMDM2NCwweGE4MWE2NjRiYmM0MjMwMDEKKwkucXVhZAkweGMyNGI4YjcwZDBmODk3OTEsMHhjNzZjNTFhMzA2NTRiZTMwCisJLnF1YWQJMHhkMTkyZTgxOWQ2ZWY1MjE4LDB4ZDY5OTA2MjQ1NTY1YTkxMAorCS5xdWFkCTB4ZjQwZTM1ODU1NzcxMjAyYSwweDEwNmFhMDcwMzJiYmQxYjgKKwkucXVhZAkweDE5YTRjMTE2YjhkMmQwYzgsMHgxZTM3NmMwODUxNDFhYjUzCisJLnF1YWQJMHgyNzQ4Nzc0Y2RmOGVlYjk5LDB4MzRiMGJjYjVlMTliNDhhOAorCS5xdWFkCTB4MzkxYzBjYjNjNWM5NWE2MywweDRlZDhhYTRhZTM0MThhY2IKKwkucXVhZAkweDViOWNjYTRmNzc2M2UzNzMsMHg2ODJlNmZmM2Q2YjJiOGEzCisJLnF1YWQJMHg3NDhmODJlZTVkZWZiMmZjLDB4NzhhNTYzNmY0MzE3MmY2MAorCS5xdWFkCTB4ODRjODc4MTRhMWYwYWI3MiwweDhjYzcwMjA4MWE2NDM5ZWMKKwkucXVhZAkweDkwYmVmZmZhMjM2MzFlMjgsMHhhNDUwNmNlYmRlODJiZGU5CisJLnF1YWQJMHhiZWY5YTNmN2IyYzY3OTE1LDB4YzY3MTc4ZjJlMzcyNTMyYgorCS5xdWFkCTB4Y2EyNzNlY2VlYTI2NjE5YywweGQxODZiOGM3MjFjMGMyMDcKKwkucXVhZAkweGVhZGE3ZGQ2Y2RlMGViMWUsMHhmNTdkNGY3ZmVlNmVkMTc4CisJLnF1YWQJMHgwNmYwNjdhYTcyMTc2ZmJhLDB4MGE2MzdkYzVhMmM4OThhNgorCS5xdWFkCTB4MTEzZjk4MDRiZWY5MGRhZSwweDFiNzEwYjM1MTMxYzQ3MWIKKwkucXVhZAkweDI4ZGI3N2Y1MjMwNDdkODQsMHgzMmNhYWI3YjQwYzcyNDkzCisJLnF1YWQJMHgzYzllYmUwYTE1YzliZWJjLDB4NDMxZDY3YzQ5YzEwMGQ0YworCS5xdWFkCTB4NGNjNWQ0YmVjYjNlNDJiNiwweDU5N2YyOTljZmM2NTdlMmEKKwkucXVhZAkweDVmY2I2ZmFiM2FkNmZhZWMsMHg2YzQ0MTk4YzRhNDc1ODE3CisJLnF1YWQJMAkvLyB0ZXJtaW5hdG9yCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJFNaPT00KTsKKwkubG9uZwkweDQyOGEyZjk4LDB4NzEzNzQ0OTEsMHhiNWMwZmJjZiwweGU5YjVkYmE1CisJLmxvbmcJMHgzOTU2YzI1YiwweDU5ZjExMWYxLDB4OTIzZjgyYTQsMHhhYjFjNWVkNQorCS5sb25nCTB4ZDgwN2FhOTgsMHgxMjgzNWIwMSwweDI0MzE4NWJlLDB4NTUwYzdkYzMKKwkubG9uZwkweDcyYmU1ZDc0LDB4ODBkZWIxZmUsMHg5YmRjMDZhNywweGMxOWJmMTc0CisJLmxvbmcJMHhlNDliNjljMSwweGVmYmU0Nzg2LDB4MGZjMTlkYzYsMHgyNDBjYTFjYworCS5sb25nCTB4MmRlOTJjNmYsMHg0YTc0ODRhYSwweDVjYjBhOWRjLDB4NzZmOTg4ZGEKKwkubG9uZwkweDk4M2U1MTUyLDB4YTgzMWM2NmQsMHhiMDAzMjdjOCwweGJmNTk3ZmM3CisJLmxvbmcJMHhjNmUwMGJmMywweGQ1YTc5MTQ3LDB4MDZjYTYzNTEsMHgxNDI5Mjk2NworCS5sb25nCTB4MjdiNzBhODUsMHgyZTFiMjEzOCwweDRkMmM2ZGZjLDB4NTMzODBkMTMKKwkubG9uZwkweDY1MGE3MzU0LDB4NzY2YTBhYmIsMHg4MWMyYzkyZSwweDkyNzIyYzg1CisJLmxvbmcJMHhhMmJmZThhMSwweGE4MWE2NjRiLDB4YzI0YjhiNzAsMHhjNzZjNTFhMworCS5sb25nCTB4ZDE5MmU4MTksMHhkNjk5MDYyNCwweGY0MGUzNTg1LDB4MTA2YWEwNzAKKwkubG9uZwkweDE5YTRjMTE2LDB4MWUzNzZjMDgsMHgyNzQ4Nzc0YywweDM0YjBiY2I1CisJLmxvbmcJMHgzOTFjMGNiMywweDRlZDhhYTRhLDB4NWI5Y2NhNGYsMHg2ODJlNmZmMworCS5sb25nCTB4NzQ4ZjgyZWUsMHg3OGE1NjM2ZiwweDg0Yzg3ODE0LDB4OGNjNzAyMDgKKwkubG9uZwkweDkwYmVmZmZhLDB4YTQ1MDZjZWIsMHhiZWY5YTNmNywweGM2NzE3OGYyCisJLmxvbmcJMAkvL3Rlcm1pbmF0b3IKK19fXworJGNvZGUuPTw8X19fOworLnNpemUJSyRCSVRTLC4tSyRCSVRTCisuYWxpZ24JMworLkxPUEVOU1NMX2FybWNhcF9QOgorCS5xdWFkCU9QRU5TU0xfYXJtY2FwX1AtLgorLmFzY2l6CSJTSEEkQklUUyBibG9jayB0cmFuc2Zvcm0gZm9yIEFSTXY4LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduCTIKK19fXworCitpZiAoJFNaPT00KSB7CitteSAkS3RibD0ieDMiOworCitteSAoJEFCQ0QsJEVGR0gsJGFiY2QpPW1hcCgidiRfLjE2YiIsKDAuLjIpKTsKK215IEBNU0c9bWFwKCJ2JF8uMTZiIiwoNC4uNykpOworbXkgKCRXMCwkVzEpPSgidjE2LjRzIiwidjE3LjRzIik7CitteSAoJEFCQ0RfU0FWRSwkRUZHSF9TQVZFKT0oInYxOC4xNmIiLCJ2MTkuMTZiIik7CisKKyRjb2RlLj08PF9fXzsKKy50eXBlCXNoYTI1Nl9ibG9ja19hcm12OCwlZnVuY3Rpb24KKy5hbGlnbgk2CitzaGEyNTZfYmxvY2tfYXJtdjg6CisuTHY4X2VudHJ5OgorCXN0cAkJeDI5LHgzMCxbc3AsIy0xNl0hCisJYWRkCQl4Mjksc3AsIzAKKworCWxkMS4zMgkJeyRBQkNELCRFRkdIfSxbJGN0eF0KKwlhZHIJCSRLdGJsLEsyNTYKKworLkxvb3BfaHc6CisJbGQxCQl7QE1TR1swXS1ATVNHWzNdfSxbJGlucF0sIzY0CisJc3ViCQkkbnVtLCRudW0sIzEKKwlsZDEuMzIJCXskVzB9LFskS3RibF0sIzE2CisJcmV2MzIJCUBNU0dbMF0sQE1TR1swXQorCXJldjMyCQlATVNHWzFdLEBNU0dbMV0KKwlyZXYzMgkJQE1TR1syXSxATVNHWzJdCisJcmV2MzIJCUBNU0dbM10sQE1TR1szXQorCW9ycgkJJEFCQ0RfU0FWRSwkQUJDRCwkQUJDRAkJLy8gb2ZmbG9hZAorCW9ycgkJJEVGR0hfU0FWRSwkRUZHSCwkRUZHSAorX19fCitmb3IoJGk9MDskaTwxMjskaSsrKSB7CiskY29kZS49PDxfX187CisJbGQxLjMyCQl7JFcxfSxbJEt0YmxdLCMxNgorCWFkZC5pMzIJCSRXMCwkVzAsQE1TR1swXQorCXNoYTI1NnN1MAlATVNHWzBdLEBNU0dbMV0KKwlvcnIJCSRhYmNkLCRBQkNELCRBQkNECisJc2hhMjU2aAkJJEFCQ0QsJEVGR0gsJFcwCisJc2hhMjU2aDIJJEVGR0gsJGFiY2QsJFcwCisJc2hhMjU2c3UxCUBNU0dbMF0sQE1TR1syXSxATVNHWzNdCitfX18KKwkoJFcwLCRXMSk9KCRXMSwkVzApOwlwdXNoKEBNU0csc2hpZnQoQE1TRykpOworfQorJGNvZGUuPTw8X19fOworCWxkMS4zMgkJeyRXMX0sWyRLdGJsXSwjMTYKKwlhZGQuaTMyCQkkVzAsJFcwLEBNU0dbMF0KKwlvcnIJCSRhYmNkLCRBQkNELCRBQkNECisJc2hhMjU2aAkJJEFCQ0QsJEVGR0gsJFcwCisJc2hhMjU2aDIJJEVGR0gsJGFiY2QsJFcwCisKKwlsZDEuMzIJCXskVzB9LFskS3RibF0sIzE2CisJYWRkLmkzMgkJJFcxLCRXMSxATVNHWzFdCisJb3JyCQkkYWJjZCwkQUJDRCwkQUJDRAorCXNoYTI1NmgJCSRBQkNELCRFRkdILCRXMQorCXNoYTI1NmgyCSRFRkdILCRhYmNkLCRXMQorCisJbGQxLjMyCQl7JFcxfSxbJEt0YmxdCisJYWRkLmkzMgkJJFcwLCRXMCxATVNHWzJdCisJc3ViCQkkS3RibCwkS3RibCwjJHJvdW5kcyokU1otMTYJLy8gcmV3aW5kCisJb3JyCQkkYWJjZCwkQUJDRCwkQUJDRAorCXNoYTI1NmgJCSRBQkNELCRFRkdILCRXMAorCXNoYTI1NmgyCSRFRkdILCRhYmNkLCRXMAorCisJYWRkLmkzMgkJJFcxLCRXMSxATVNHWzNdCisJb3JyCQkkYWJjZCwkQUJDRCwkQUJDRAorCXNoYTI1NmgJCSRBQkNELCRFRkdILCRXMQorCXNoYTI1NmgyCSRFRkdILCRhYmNkLCRXMQorCisJYWRkLmkzMgkJJEFCQ0QsJEFCQ0QsJEFCQ0RfU0FWRQorCWFkZC5pMzIJCSRFRkdILCRFRkdILCRFRkdIX1NBVkUKKworCWNibnoJCSRudW0sLkxvb3BfaHcKKworCXN0MS4zMgkJeyRBQkNELCRFRkdIfSxbJGN0eF0KKworCWxkcgkJeDI5LFtzcF0sIzE2CisJcmV0Cisuc2l6ZQlzaGEyNTZfYmxvY2tfYXJtdjgsLi1zaGEyNTZfYmxvY2tfYXJtdjgKK19fXworfQorCiskY29kZS49PDxfX187CisuY29tbQlPUEVOU1NMX2FybWNhcF9QLDQsNAorX19fCisKK3sgICBteSAgJW9wY29kZSA9ICgKKwkic2hhMjU2aCIJPT4gMHg1ZTAwNDAwMCwJInNoYTI1NmgyIgk9PiAweDVlMDA1MDAwLAorCSJzaGEyNTZzdTAiCT0+IDB4NWUyODI4MDAsCSJzaGEyNTZzdTEiCT0+IDB4NWUwMDYwMDAJKTsKKworICAgIHN1YiB1bnNoYTI1NiB7CisJbXkgKCRtbmVtb25pYywkYXJnKT1AXzsKKworCSRhcmcgPX4gbS9bcXZdKFswLTldKylbXixdKixccypbcXZdKFswLTldKylbXixdKig/OixccypbcXZdKFswLTldKykpPy9vCisJJiYKKwlzcHJpbnRmICIuaW5zdFx0MHglMDh4XHQvLyVzICVzIiwKKwkJCSRvcGNvZGV7JG1uZW1vbmljfXwkMXwoJDI8PDUpfCgkMzw8MTYpLAorCQkJJG1uZW1vbmljLCRhcmc7CisgICAgfQorfQorCitmb3JlYWNoKHNwbGl0KCJcbiIsJGNvZGUpKSB7CisKKwlzL1xgKFteXGBdKilcYC9ldmFsKCQxKS9nZW87CisKKwlzL1xiKHNoYTI1Nlx3KylccysoW3F2XS4qKS91bnNoYTI1NigkMSwkMikvZ2VvOworCisJcy9cLlx3PzMyXGIvL28JCWFuZCBzL1wuMTZiL1wuNHMvZ287CisJbS8obGR8c3QpMVteXFtdK1xbMFxdL28JYW5kIHMvXC40cy9cLnMvZ287CisKKwlwcmludCAkXywiXG4iOworfQorCitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL3NoYTEuYyBiL2NyeXB0by9zaGEvc2hhMS5jCmluZGV4IDMxNDg3MzkuLjc1OTViYzggMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvc2hhMS5jCisrKyBiL2NyeXB0by9zaGEvc2hhMS5jCkBAIC02MSw4ICs2MSw5IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9tZW0uaD4KIAogCi0jaWYgIWRlZmluZWQoT1BFTlNTTF9OT19BU00pICYmIFwKLSAgICAoZGVmaW5lZChPUEVOU1NMX1g4NikgfHwgZGVmaW5lZChPUEVOU1NMX1g4Nl82NCkgfHwgZGVmaW5lZChPUEVOU1NMX0FSTSkpCisjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19BU00pICYmICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoZGVmaW5lZChPUEVOU1NMX1g4NikgfHwgZGVmaW5lZChPUEVOU1NMX1g4Nl82NCkgfHwgXAorICAgICBkZWZpbmVkKE9QRU5TU0xfQVJNKSB8fCBkZWZpbmVkKE9QRU5TU0xfQUFSQ0g2NCkpCiAjZGVmaW5lIFNIQTFfQVNNCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9zaGEyNTYuYyBiL2NyeXB0by9zaGEvc2hhMjU2LmMKaW5kZXggMDY4NTc4NC4uOGQ0MTA2ZSAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYS9zaGEyNTYuYworKysgYi9jcnlwdG8vc2hhL3NoYTI1Ni5jCkBAIC02MSw4ICs2MSw5IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9tZW0uaD4KIAogCi0jaWYgIWRlZmluZWQoT1BFTlNTTF9OT19BU00pICYmIFwKLSAgICAoZGVmaW5lZChPUEVOU1NMX1g4NikgfHwgZGVmaW5lZChPUEVOU1NMX1g4Nl82NCkgfHwgZGVmaW5lZChPUEVOU1NMX0FSTSkpCisjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19BU00pICYmICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoZGVmaW5lZChPUEVOU1NMX1g4NikgfHwgZGVmaW5lZChPUEVOU1NMX1g4Nl82NCkgfHwgXAorICAgICBkZWZpbmVkKE9QRU5TU0xfQVJNKSB8fCBkZWZpbmVkKE9QRU5TU0xfQUFSQ0g2NCkpCiAjZGVmaW5lIFNIQTI1Nl9BU00KICNlbmRpZgogCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL3NoYTUxMi5jIGIvY3J5cHRvL3NoYS9zaGE1MTIuYwppbmRleCA4ODQzNzFhLi41OWJlOGMxIDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhL3NoYTUxMi5jCisrKyBiL2NyeXB0by9zaGEvc2hhNTEyLmMKQEAgLTg3LDggKzg3LDkgQEAKICAqICAgYXBwbHkgYSBudW1iZXIgb2Ygb3B0aW1pemF0aW9ucyB0byBtaXRpZ2F0ZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UKICAqICAgcGVuYWx0aWVzIGNhdXNlZCBieSBwcmV2aW91cyBkZXNpZ24gZGVjaXNpb247ICovCiAKLSNpZiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgXAotICAgIChkZWZpbmVkKE9QRU5TU0xfWDg2KSB8fCBkZWZpbmVkKE9QRU5TU0xfWDg2XzY0KSB8fCBkZWZpbmVkKE9QRU5TU0xfQVJNKSkKKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChkZWZpbmVkKE9QRU5TU0xfWDg2KSB8fCBkZWZpbmVkKE9QRU5TU0xfWDg2XzY0KSB8fCBcCisgICAgIGRlZmluZWQoT1BFTlNTTF9BUk0pIHx8IGRlZmluZWQoT1BFTlNTTF9BQVJDSDY0KSkKICNkZWZpbmUgU0hBNTEyX0JMT0NLX0NBTl9NQU5BR0VfVU5BTElHTkVEX0RBVEEKICNkZWZpbmUgU0hBNTEyX0FTTQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvYmFzZS5oIGIvaW5jbHVkZS9vcGVuc3NsL2Jhc2UuaAppbmRleCA2MjA3YzU0Li5jMTU1YWRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvYmFzZS5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9iYXNlLmgKQEAgLTgwLDYgKzgwLDkgQEAKICNlbGlmIGRlZmluZWQoX19hcm0pIHx8IGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfTV9BUk0pCiAjZGVmaW5lIE9QRU5TU0xfMzJfQklUCiAjZGVmaW5lIE9QRU5TU0xfQVJNCisjZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorI2RlZmluZSBPUEVOU1NMXzY0X0JJVAorI2RlZmluZSBPUEVOU1NMX0FBUkNINjQKICNlbGlmIGRlZmluZWQoX19taXBzX18pCiAjZGVmaW5lIE9QRU5TU0xfMzJfQklUCiAjZGVmaW5lIE9QRU5TU0xfTUlQUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2NwdS5oIGIvaW5jbHVkZS9vcGVuc3NsL2NwdS5oCmluZGV4IDgxMTIxZjEuLjc5NDQxYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9jcHUuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvY3B1LmgKQEAgLTg5LDcgKzg5LDcgQEAKIGV4dGVybiB1aW50MzJfdCBPUEVOU1NMX2lhMzJjYXBfUFs0XTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChPUEVOU1NMX0FSTSkKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQVJNKSB8fCBkZWZpbmVkKE9QRU5TU0xfQUFSQ0g2NCkKIC8qIENSWVBUT19pc19ORU9OX2NhcGFibGUgcmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IENQVSBoYXMgYSBORU9OIHVuaXQuIE5vdGUKICAqIHRoYXQgfE9QRU5TU0xfYXJtY2FwX1B8IGFsc28gZXhpc3RzIGFuZCBjb250YWlucyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBpbiBhCiAgKiBmb3JtIHRoYXQncyBlYXNpZXIgZm9yIGFzc2VtYmx5IHRvIHVzZS4gKi8KZGlmZiAtLWdpdCBhL3NzbC9zc2xfbG9jbC5oIGIvc3NsL3NzbF9sb2NsLmgKaW5kZXggYTIxZDI0MC4uYTBjMzIzYyAxMDA2NDQKLS0tIGEvc3NsL3NzbF9sb2NsLmgKKysrIGIvc3NsL3NzbF9sb2NsLmgKQEAgLTIwNiwxNCArMjA2LDYgQEAKICAgICooKGMpKyspID0gKHVpbnQ4X3QpKCgobCkgPj4gOCkgJiAweGZmKSwgIFwKICAgICooKGMpKyspID0gKHVpbnQ4X3QpKCgobCkpICYgMHhmZikpCiAKLSNkZWZpbmUgbDJuNihsLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCooKGMpKyspID0gKHVpbnQ4X3QpKCgobCkgPj4gNDApICYgMHhmZiksIFwKLSAgICooKGMpKyspID0gKHVpbnQ4X3QpKCgobCkgPj4gMzIpICYgMHhmZiksIFwKLSAgICooKGMpKyspID0gKHVpbnQ4X3QpKCgobCkgPj4gMjQpICYgMHhmZiksIFwKLSAgICooKGMpKyspID0gKHVpbnQ4X3QpKCgobCkgPj4gMTYpICYgMHhmZiksIFwKLSAgICooKGMpKyspID0gKHVpbnQ4X3QpKCgobCkgPj4gOCkgJiAweGZmKSwgIFwKLSAgICooKGMpKyspID0gKHVpbnQ4X3QpKCgobCkpICYgMHhmZikpCi0KICNkZWZpbmUgbDJuOChsLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKCooKGMpKyspID0gKHVpbnQ4X3QpKCgobCkgPj4gNTYpICYgMHhmZiksIFwKICAgICooKGMpKyspID0gKHVpbnQ4X3QpKCgobCkgPj4gNDgpICYgMHhmZiksIFwKQEAgLTIyNCwxMSArMjE2LDYgQEAKICAgICooKGMpKyspID0gKHVpbnQ4X3QpKCgobCkgPj4gOCkgJiAweGZmKSwgIFwKICAgICooKGMpKyspID0gKHVpbnQ4X3QpKCgobCkpICYgMHhmZikpCiAKLSNkZWZpbmUgbjJsNihjLCBsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKGwgPSAoKEJOX1VMTE9ORykoKigoYykrKykpKSA8PCA0MCwgbCB8PSAoKEJOX1VMTE9ORykoKigoYykrKykpKSA8PCAzMiwgIFwKLSAgIGwgfD0gKChCTl9VTExPTkcpKCooKGMpKyspKSkgPDwgMjQsIGwgfD0gKChCTl9VTExPTkcpKCooKGMpKyspKSkgPDwgMTYsIFwKLSAgIGwgfD0gKChCTl9VTExPTkcpKCooKGMpKyspKSkgPDwgOCwgbCB8PSAoKEJOX1VMTE9ORykoKigoYykrKykpKSkKLQogLyogTk9URSAtIGMgaXMgbm90IGluY3JlbWVudGVkIGFzIHBlciBsMmMgKi8KICNkZWZpbmUgbDJjbihsMSwgbDIsIGMsIG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL3NzbC90ZXN0L21hbGxvYy5jYyBiL3NzbC90ZXN0L21hbGxvYy5jYwppbmRleCAzZTNmOGQ3Li42Y2MwYjMzIDEwMDY0NAotLS0gYS9zc2wvdGVzdC9tYWxsb2MuY2MKKysrIGIvc3NsL3Rlc3QvbWFsbG9jLmNjCkBAIC0xMiw3ICsxMiwxMSBAQAogICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTgogICogQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4gKi8KIAotI2lmIGRlZmluZWQoX19saW51eF9fKQorI2luY2x1ZGUgPG9wZW5zc2wvYmFzZS5oPgorCisvLyBUaGlzIGZpbGUgaXNuJ3QgYnVpbHQgb24gQVJNIG9yIEFhcmNoNjQgYmVjYXVzZSB3ZSBsaW5rIHN0YXRpY2FsbHkgaW4gdGhvc2UKKy8vIGJ1aWxkcyBhbmQgdHJ5aW5nIHRvIG92ZXJyaWRlIG1hbGxvYyBpbiBhIHN0YXRpYyBsaW5rIGRvZXNuJ3Qgd29yay4KKyNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgIWRlZmluZWQoT1BFTlNTTF9BUk0pICYmICFkZWZpbmVkKE9QRU5TU0xfQUFSQ0g2NCkKIAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMTIzLDQgKzEyNyw0IEBACiAKIH0gIC8vIGV4dGVybiAiQyIKIAotI2VuZGlmICAvKiBkZWZpbmVkKGxpbnV4KSAqLworI2VuZGlmICAvKiBkZWZpbmVkKGxpbnV4KSAmJiAhQVJNICYmICFBQVJDSDY0ICovCmRpZmYgLS1naXQgYS91dGlsL2FhcmNoNjQtdG9vbGNoYWluLmNtYWtlIGIvdXRpbC9hYXJjaDY0LXRvb2xjaGFpbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2YzM2FiCi0tLSAvZGV2L251bGwKKysrIGIvdXRpbC9hYXJjaDY0LXRvb2xjaGFpbi5jbWFrZQpAQCAtMCwwICsxLDYgQEAKK3NldChDTUFLRV9TWVNURU1fTkFNRSBMaW51eCkKK3NldChDTUFLRV9TWVNURU1fVkVSU0lPTiAxKQorc2V0KENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgImFhcmNoNjQiKQorc2V0KENNQUtFX0NYWF9DT01QSUxFUiAiL29wdC9nY2MtbGluYXJvLTQuOS0yMDE0LjExLXg4Nl82NF9hYXJjaDY0LWxpbnV4LWdudS9iaW4vYWFyY2g2NC1saW51eC1nbnUtZysrIikKK3NldChDTUFLRV9DX0NPTVBJTEVSICIvb3B0L2djYy1saW5hcm8tNC45LTIwMTQuMTEteDg2XzY0X2FhcmNoNjQtbGludXgtZ251L2Jpbi9hYXJjaDY0LWxpbnV4LWdudS1nY2MiKQorc2V0KENNQUtFX0VYRV9MSU5LRVJfRkxBR1MgIi1zdGF0aWMiKQpkaWZmIC0tZ2l0IGEvdXRpbC9hcm0tdG9vbGNoYWluLmNtYWtlIGIvdXRpbC9hcm0tdG9vbGNoYWluLmNtYWtlCmluZGV4IDFkMTc1MjYuLjJkZmQyYmQgMTAwNjQ0Ci0tLSBhL3V0aWwvYXJtLXRvb2xjaGFpbi5jbWFrZQorKysgYi91dGlsL2FybS10b29sY2hhaW4uY21ha2UKQEAgLTEsNiArMSw2IEBACiBzZXQoQ01BS0VfU1lTVEVNX05BTUUgTGludXgpCiBzZXQoQ01BS0VfU1lTVEVNX1ZFUlNJT04gMSkKIHNldChDTUFLRV9TWVNURU1fUFJPQ0VTU09SICJhcm0iKQotc2V0KENNQUtFX0NYWF9DT01QSUxFUiAiL29wdC9nY2MtbGluYXJvLWFybS1saW51eC1nbnVlYWJpaGYtNC44LTIwMTMuMTBfbGludXgvYmluL2FybS1saW51eC1nbnVlYWJpaGYtZysrIikKLXNldChDTUFLRV9DX0NPTVBJTEVSICIvb3B0L2djYy1saW5hcm8tYXJtLWxpbnV4LWdudWVhYmloZi00LjgtMjAxMy4xMF9saW51eC9iaW4vYXJtLWxpbnV4LWdudWVhYmloZi1nY2MiKQorc2V0KENNQUtFX0NYWF9DT01QSUxFUiAiL29wdC9nY2MtbGluYXJvLTQuOS0yMDE0LjExLXg4Nl82NF9hcm0tbGludXgtZ251ZWFiaWhmL2Jpbi9hcm0tbGludXgtZ251ZWFiaWhmLWcrKyIpCitzZXQoQ01BS0VfQ19DT01QSUxFUiAiL29wdC9nY2MtbGluYXJvLTQuOS0yMDE0LjExLXg4Nl82NF9hcm0tbGludXgtZ251ZWFiaWhmL2Jpbi9hcm0tbGludXgtZ251ZWFiaWhmLWdjYyIpCiBzZXQoQ01BS0VfRVhFX0xJTktFUl9GTEFHUyAiLXN0YXRpYyIpCg==