ZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJfaGFsX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKaW5kZXggZTY0M2RmZC4uN2U0ZDQ1OCAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKQEAgLTQ2MCw3ICs0NjAsOSBAQAogI2RlZmluZSBGTEFTSF9GTEFHX1NORUNDRV9CQU5LMlJSIEZMQVNIX0ZMQUdfU05FQ0NFUlJfQkFOSzIKICNkZWZpbmUgRkxBU0hfRkxBR19EQkVDQ0VfQkFOSzJSUiBGTEFTSF9GTEFHX0RCRUNDRVJSX0JBTksyCiAjZGVmaW5lIEZMQVNIX0ZMQUdfU1RSQkVSX0JBTksyUiAgRkxBU0hfRkxBR19TVFJCRVJSX0JBTksyCi0jZW5kaWYKKyNkZWZpbmUgRkxBU0hfRkxBR19XRFcgICAgICAgICAgICBGTEFTSF9GTEFHX1dCTkUKKyNkZWZpbmUgT0JfV1JQX1NFQ1RPUl9BbGwgICAgICAgICBPQl9XUlBfU0VDVE9SX0FMTAorI2VuZGlmIC8qIFNUTTMySDcgKi8KIAogLyoqCiAgICogQH0KQEAgLTczNSw2ICs3MzcsMzMgQEAKICNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRkVWOF9USU1FQ01QMiBIUlRJTV9PVVRQVVRTRVRfVElNRVZfOAogI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1GRVY5X1RJTUVDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl85CiAjZW5kaWYgLyogU1RNMzJINyAqLworICAgCisjaWYgZGVmaW5lZChTVE0zMkYzKQorI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMSAgIEhSVElNX09VVFBVVFNFVF9USU1BRVYxX1RJTUJDTVAxCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl8yICAgSFJUSU1fT1VUUFVUU0VUX1RJTUFFVjJfVElNQkNNUDIKKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMgICBIUlRJTV9PVVRQVVRTRVRfVElNQUVWM19USU1CQ01QNAorI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNCAgIEhSVElNX09VVFBVVFNFVF9USU1BRVY0X1RJTUNDTVAyCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl81ICAgSFJUSU1fT1VUUFVUU0VUX1RJTUFFVjVfVElNQ0NNUDMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYgICBIUlRJTV9PVVRQVVRTRVRfVElNQUVWNl9USU1EQ01QMQorI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNyAgIEhSVElNX09VVFBVVFNFVF9USU1BRVY3X1RJTURDTVAyCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl84ICAgSFJUSU1fT1VUUFVUU0VUX1RJTUFFVjhfVElNRUNNUDMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkgICBIUlRJTV9PVVRQVVRTRVRfVElNQUVWOV9USU1FQ01QNAorCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzEgSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWMV9USU1CQ01QMQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl8yIEhSVElNX09VVFBVVFJFU0VUX1RJTUFFVjJfVElNQkNNUDIKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfMyBIUlRJTV9PVVRQVVRSRVNFVF9USU1BRVYzX1RJTUJDTVA0CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzQgSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWNF9USU1DQ01QMgorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl81IEhSVElNX09VVFBVVFJFU0VUX1RJTUFFVjVfVElNQ0NNUDMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfNiBIUlRJTV9PVVRQVVRSRVNFVF9USU1BRVY2X1RJTURDTVAxCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzcgSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWN19USU1EQ01QMgorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl84IEhSVElNX09VVFBVVFJFU0VUX1RJTUFFVjhfVElNRUNNUDMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfOSBIUlRJTV9PVVRQVVRSRVNFVF9USU1BRVY5X1RJTUVDTVA0CisgICAgICAgICAgICAgIAorI2RlZmluZSBIUlRJTV9FVkVOVFNSQ18xICAgICAgICAgIEhSVElNX0VFVjFTUkNfR1BJTworI2RlZmluZSBIUlRJTV9FVkVOVFNSQ18yICAgICAgICAgIEhSVElNX0VFVjJTUkNfR1BJTworI2RlZmluZSBIUlRJTV9FVkVOVFNSQ18zICAgICAgICAgIEhSVElNX0VFVjNTUkNfR1BJTworI2RlZmluZSBIUlRJTV9FVkVOVFNSQ180ICAgICAgICAgIEhSVElNX0VFVjRTUkNfR1BJTworI2VuZGlmIC8qIFNUTTMyRjMgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xMzgwLDYgKzE0MDksMTMgQEAKICNlbmRpZgogI2RlZmluZSBIQUxfQURDX0VuYWJsZUJ1ZmZlcl9DbWQoY21kKSAgKCgoY21kKT09RU5BQkxFKSA/IEhBTF9BRENFeF9FbmFibGVWUkVGSU5UKCkgOiBIQUxfQURDRXhfRGlzYWJsZVZSRUZJTlQoKSkKICNkZWZpbmUgSEFMX0FEQ19FbmFibGVCdWZmZXJTZW5zb3JfQ21kKGNtZCkgKCgoY21kKT09RU5BQkxFKSA/ICBIQUxfQURDRXhfRW5hYmxlVlJFRklOVFRlbXBTZW5zb3IoKSA6IEhBTF9BRENFeF9EaXNhYmxlVlJFRklOVFRlbXBTZW5zb3IoKSkKKyNpZiBkZWZpbmVkKFNUTTMySDdBM3h4KSB8fCBkZWZpbmVkKFNUTTMySDdCM3h4KSB8fCBkZWZpbmVkKFNUTTMySDdBM3h4USkgfHwgZGVmaW5lZChTVE0zMkg3QjN4eFEpCisjZGVmaW5lIEhBTF9FbmFibGVTUkRvbWFpbkRCR1N0b3BNb2RlICAgICAgSEFMX0VuYWJsZURvbWFpbjNEQkdTdG9wTW9kZQorI2RlZmluZSBIQUxfRGlzYWJsZVNSRG9tYWluREJHU3RvcE1vZGUgICAgIEhBTF9EaXNhYmxlRG9tYWluM0RCR1N0b3BNb2RlCisjZGVmaW5lIEhBTF9FbmFibGVTUkRvbWFpbkRCR1N0YW5kYnlNb2RlICAgSEFMX0VuYWJsZURvbWFpbjNEQkdTdGFuZGJ5TW9kZQorI2RlZmluZSBIQUxfRGlzYWJsZVNSRG9tYWluREJHU3RhbmRieU1vZGUgIEhBTF9EaXNhYmxlRG9tYWluM0RCR1N0YW5kYnlNb2RlCisjZW5kaWYgLyogU1RNMzJIN0EzeHggfHwgU1RNMzJIN0IzeHggfHwgU1RNMzJIN0EzeHhRIHx8IFNUTTMySDdCM3h4USAqLworCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzI0Miw3ICszMjc4LDcgQEAKIC8qKiBAZGVmZ3JvdXAgSEFMX1JUQ19BbGlhc2VkX01hY3JvcyBIQUwgUlRDIEFsaWFzZWQgTWFjcm9zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKICAgKi8KLSNpZiBkZWZpbmVkIChTVE0zMkcwKSB8fCBkZWZpbmVkIChTVE0zMkw0MTJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDIyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDRQNXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UTV4eCkgfHwgZGVmaW5lZCBTVE0zMkc0CisjaWYgZGVmaW5lZCAoU1RNMzJHMCkgfHwgZGVmaW5lZCAoU1RNMzJMNDEyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQyMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UDV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFE1eHgpIHx8IGRlZmluZWQgKFNUTTMyRzQpCiAjZWxzZQogI2RlZmluZSBfX0hBTF9SVENfQ0xFQVJfRkxBRyAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfRVhUSV9DTEVBUl9GTEFHCiAjZW5kaWYKQEAgLTM2MDYsMTIgKzM2NDIsMTIgQEAKICAgKiBAewogICAqLwogI2lmIGRlZmluZWQgKFNUTTMySDcpIHx8IGRlZmluZWQgKFNUTTMyRzQpIHx8IGRlZmluZWQgKFNUTTMyRjMpCi0jZGVmaW5lIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50ZXJTdGFydF9JVCBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudFN0YXJ0X0lUCi0jZGVmaW5lIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50ZXJTdGFydF9ETUEgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRTdGFydF9ETUEKLSNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0YXJ0IEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50U3RhcnQKLSNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0b3BfSVQgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRTdG9wX0lUCi0jZGVmaW5lIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50ZXJTdG9wX0RNQSBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudFN0b3BfRE1BCi0jZGVmaW5lIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50ZXJTdG9wIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50U3RvcAorI2RlZmluZSBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudGVyU3RhcnRfSVQgICAgICBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudFN0YXJ0X0lUCisjZGVmaW5lIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50ZXJTdGFydF9ETUEgICAgIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50U3RhcnRfRE1BCisjZGVmaW5lIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50ZXJTdGFydCAgICAgICAgIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50U3RhcnQKKyNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0b3BfSVQgICAgICAgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRTdG9wX0lUCisjZGVmaW5lIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50ZXJTdG9wX0RNQSAgICAgIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50U3RvcF9ETUEKKyNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0b3AgICAgICAgICAgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRTdG9wCiAjZW5kaWYKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJ3Ynh4X2hhbF9jcnlwLmggYi9JbmMvc3RtMzJ3Ynh4X2hhbF9jcnlwLmgKaW5kZXggMzkxNjM2Zi4uNTVmZTA1OSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyd2J4eF9oYWxfY3J5cC5oCisrKyBiL0luYy9zdG0zMndieHhfaGFsX2NyeXAuaApAQCAtMTgyLDcgKzE4Miw3IEBACiAKICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIEtleV9zYXZlZFs4XTsgICAgICAgICAgICAvKiE8IGNvcHkgb2Yga2V5IHJlZ2lzdGVycyAqLwogCi0gIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBTaXplX3NhdmVkOyAgICAgICAgICAgICAgLyohPCBjb3B5IG9mIGlucHV0IGJ1ZmZlciBzaXplICovCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBTaXplX3NhdmVkOyAgICAgICAgICAgICAgLyohPCBjb3B5IG9mIGlucHV0IGJ1ZmZlciBzaXplICovCiAKICAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgIENyeXBIZWFkZXJDb3VudF9zYXZlZDsgICAvKiE8IGNvcHkgb2YgQ1JZUCBoZWFkZXIgZGF0YSBjb3VudGVyIHdoZW4gcHJvY2Vzc2luZyBpcyBzdXNwZW5kZWQgKi8KIApAQCAtNTY1LDYgKzU2NSwxMiBAQAogI2RlZmluZSBJU19DUllQX0lOSVQoQ09ORklHKSgoKENPTkZJRykgPT0gQ1JZUF9LRVlJVkNPTkZJR19BTFdBWVMpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDT05GSUcpID09IENSWVBfS0VZSVZDT05GSUdfT05DRSkpCiAKKyNkZWZpbmUgSVNfQ1JZUF9CVUZGRVJTSVpFKEFMR08sIERBVEFXSURUSCwgU0laRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoKCgoKEFMR08pID09IENSWVBfQUVTX0VDQikgfHwgKChBTEdPKSA9PSBDUllQX0FFU19DQkMpIHx8ICgoQUxHTykgPT0gQ1JZUF9BRVNfQ1RSKSkgJiYgXAorICAgICAgICAgICAgKCgoKERBVEFXSURUSCkgPT0gQ1JZUF9EQVRBV0lEVEhVTklUX1dPUkQpICYmICgoKFNJWkUpICUgNFUpID09IDBVKSkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAoKChEQVRBV0lEVEgpID09IENSWVBfREFUQVdJRFRIVU5JVF9CWVRFKSAmJiAoKChTSVpFKSAlIDE2VSkgPT0gMFUpKSkpICAgICAgICB8fCBcCisgICAgICAgICgoKEFMR08pPT0gQ1JZUF9BRVNfR0NNX0dNQUMpIHx8ICgoQUxHTykgPT0gQ1JZUF9BRVNfQ0NNKSkpCisKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJ3Ynh4X2hhbF9kbWEuaCBiL0luYy9zdG0zMndieHhfaGFsX2RtYS5oCmluZGV4IDk0NjczNTQuLmU1NzVkNjEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMndieHhfaGFsX2RtYS5oCisrKyBiL0luYy9zdG0zMndieHhfaGFsX2RtYS5oCkBAIC0yMDQsOCArMjA0LDEwIEBACiAjZGVmaW5lIERNQV9SRVFVRVNUX0xQVUFSVDFfUlggICAgICAgICAgTExfRE1BTVVYX1JFUV9MUFVBUlQxX1JYICAgICAgICAvKiE8IERNQU1VWCBMUF9VQVJUMV9SWCByZXF1ZXN0ICovCiAjZGVmaW5lIERNQV9SRVFVRVNUX0xQVUFSVDFfVFggICAgICAgICAgTExfRE1BTVVYX1JFUV9MUFVBUlQxX1RYICAgICAgICAvKiE8IERNQU1VWCBMUF9VQVJUMV9SWCByZXF1ZXN0ICovCiAKKyNpZiBkZWZpbmVkIChTQUkxKQogI2RlZmluZSBETUFfUkVRVUVTVF9TQUkxX0EgICAgICAgICAgICAgIExMX0RNQU1VWF9SRVFfU0FJMV9BICAgICAgICAgICAgLyohPCBETUFNVVggU0FJMSBBIHJlcXVlc3QgICAgICAqLwogI2RlZmluZSBETUFfUkVRVUVTVF9TQUkxX0IgICAgICAgICAgICAgIExMX0RNQU1VWF9SRVFfU0FJMV9CICAgICAgICAgICAgLyohPCBETUFNVVggU0FJMSBCIHJlcXVlc3QgICAgICAqLworI2VuZGlmIC8qIFNBSTEgKi8KIAogI2RlZmluZSBETUFfUkVRVUVTVF9RVUFEU1BJICAgICAgICAgICAgIExMX0RNQU1VWF9SRVFfUVVBRFNQSSAgICAgICAgICAgLyohPCBETUFNVVggUVVBRFNQSSByZXF1ZXN0ICAgICAqLwogCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJ3Ynh4X2hhbF9mbGFzaC5oIGIvSW5jL3N0bTMyd2J4eF9oYWxfZmxhc2guaAppbmRleCBlMGRlZjIxLi41NDg1MThmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJ3Ynh4X2hhbF9mbGFzaC5oCisrKyBiL0luYy9zdG0zMndieHhfaGFsX2ZsYXNoLmgKQEAgLTE1MCwxMCArMTUwLDEwIEBACiAvKiogQGRlZmdyb3VwIEZMQVNIX0xBVEVOQ1kgRkxBU0ggTGF0ZW5jeQogICAqIEB7CiAgICovCi0jZGVmaW5lIEZMQVNIX0xBVEVOQ1lfMCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFVMICAgICAgICAvKiE8IEZMQVNIIFplcm8gd2FpdCBzdGF0ZSAgICovCi0jZGVmaW5lIEZMQVNIX0xBVEVOQ1lfMSAgICAgICAgICAgICAgICAgRkxBU0hfQUNSX0xBVEVOQ1lfMCAvKiE8IEZMQVNIIE9uZSB3YWl0IHN0YXRlICAgICovCi0jZGVmaW5lIEZMQVNIX0xBVEVOQ1lfMiAgICAgICAgICAgICAgICAgRkxBU0hfQUNSX0xBVEVOQ1lfMSAvKiE8IEZMQVNIIFR3byB3YWl0IHN0YXRlcyAgICovCi0jZGVmaW5lIEZMQVNIX0xBVEVOQ1lfMyAgICAgICAgICAgICAgICAgRkxBU0hfQUNSX0xBVEVOQ1lfMiAvKiE8IEZMQVNIIFRocmVlIHdhaXQgc3RhdGVzICovCisjZGVmaW5lIEZMQVNIX0xBVEVOQ1lfMCAgICAgICAgICAgICAgICAgRkxBU0hfQUNSX0xBVEVOQ1lfMFdTIC8qITwgRkxBU0ggWmVybyB3YWl0IHN0YXRlICAgKi8KKyNkZWZpbmUgRkxBU0hfTEFURU5DWV8xICAgICAgICAgICAgICAgICBGTEFTSF9BQ1JfTEFURU5DWV8xV1MgLyohPCBGTEFTSCBPbmUgd2FpdCBzdGF0ZSAgICAqLworI2RlZmluZSBGTEFTSF9MQVRFTkNZXzIgICAgICAgICAgICAgICAgIEZMQVNIX0FDUl9MQVRFTkNZXzJXUyAvKiE8IEZMQVNIIFR3byB3YWl0IHN0YXRlcyAgICovCisjZGVmaW5lIEZMQVNIX0xBVEVOQ1lfMyAgICAgICAgICAgICAgICAgRkxBU0hfQUNSX0xBVEVOQ1lfM1dTIC8qITwgRkxBU0ggVGhyZWUgd2FpdCBzdGF0ZXMgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xNzksMTIgKzE3OSwxNCBAQAogI2RlZmluZSBGTEFTSF9GTEFHX0VDQ0MgICAgICAgICAgICAgICAgIEZMQVNIX0VDQ1JfRUNDQyAgIC8qITwgRkxBU0ggRUNDIGNvcnJlY3Rpb24gKi8KICNkZWZpbmUgRkxBU0hfRkxBR19FQ0NEICAgICAgICAgICAgICAgICBGTEFTSF9FQ0NSX0VDQ0QgICAvKiE8IEZMQVNIIEVDQyBkZXRlY3Rpb24gKi8KIAotI2RlZmluZSBGTEFTSF9GTEFHX1NSX0VSUk9SICAgICAgICAgICAgIChGTEFTSF9GTEFHX09QRVJSICAgfCBGTEFTSF9GTEFHX1BST0dFUlIgfCBGTEFTSF9GTEFHX1dSUEVSUiB8IFwKKyNkZWZpbmUgRkxBU0hfRkxBR19TUl9FUlJPUlMgICAgICAgICAgICAoRkxBU0hfRkxBR19PUEVSUiAgIHwgRkxBU0hfRkxBR19QUk9HRVJSIHwgRkxBU0hfRkxBR19XUlBFUlIgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0ZMQUdfUEdBRVJSICB8IEZMQVNIX0ZMQUdfU0laRVJSICB8IEZMQVNIX0ZMQUdfUEdTRVJSIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9GTEFHX01JU0VSUiAgfCBGTEFTSF9GTEFHX0ZBU1RFUlIgfCBGTEFTSF9GTEFHX1JERVJSICB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfRkxBR19PUFRWRVJSKSAgICAgLyohPCBBbGwgU1IgZXJyb3IgZmxhZ3MgKi8KIAotI2RlZmluZSBGTEFTSF9GTEFHX0FMTF9FUlJPUlMgICAgICAgICAgIChGTEFTSF9GTEFHX1NSX0VSUk9SIHwgRkxBU0hfRkxBR19FQ0NDIHwgRkxBU0hfRkxBR19FQ0NEKQorI2RlZmluZSBGTEFTSF9GTEFHX0VDQ1JfRVJST1JTICAgICAgICAgIChGTEFTSF9GTEFHX0VDQ0MgfCBGTEFTSF9GTEFHX0VDQ0QpCisKKyNkZWZpbmUgRkxBU0hfRkxBR19BTExfRVJST1JTICAgICAgICAgICAoRkxBU0hfRkxBR19TUl9FUlJPUlMgfCBGTEFTSF9GTEFHX0VDQ1JfRVJST1JTKQogCiAvKiogQGRlZmdyb3VwIEZMQVNIX0lOVEVSUlVQVF9ERUZJTklUSU9OIEZMQVNIIEludGVycnVwdHMgRGVmaW5pdGlvbgogICAqIEBicmllZiBGTEFTSCBJbnRlcnJ1cHQgZGVmaW5pdGlvbgpAQCAtMjEyLDcgKzIxNCw2IEBACiAjZGVmaW5lIEhBTF9GTEFTSF9FUlJPUl9GQVNUICAgICAgICAgICAgRkxBU0hfRkxBR19GQVNURVJSCiAjZGVmaW5lIEhBTF9GTEFTSF9FUlJPUl9SRCAgICAgICAgICAgICAgRkxBU0hfRkxBR19SREVSUgogI2RlZmluZSBIQUxfRkxBU0hfRVJST1JfT1BUViAgICAgICAgICAgIEZMQVNIX0ZMQUdfT1BUVkVSUgotI2RlZmluZSBIQUxfRkxBU0hfRVJST1JfRUNDRCAgICAgICAgICAgIEZMQVNIX0ZMQUdfRUNDRAogLyoqCiAgICogQH0KICAgKi8KQEAgLTQ4MCwzOSArNDgxLDM5IEBACiAgICogQHsKICAgKi8KIAotI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMCAgICAgICAweDIwMDMwMDAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzMDAwMCAtIDB4MjAwMzdGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8xICAgICAgIDB4MjAwMzA0MDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDMwNDAwIC0gMHgyMDAzN0ZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzIgICAgICAgMHgyMDAzMDgwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwMzA4MDAgLSAweDIwMDM3RkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMyAgICAgICAweDIwMDMwQzAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzMEMwMCAtIDB4MjAwMzdGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl80ICAgICAgIDB4MjAwMzEwMDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDMxMDAwIC0gMHgyMDAzN0ZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzUgICAgICAgMHgyMDAzMTQwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwMzE0MDAgLSAweDIwMDM3RkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfNiAgICAgICAweDIwMDMxODAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzMTgwMCAtIDB4MjAwMzdGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl83ICAgICAgIDB4MjAwMzFDMDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDMxQzAwIC0gMHgyMDAzN0ZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzggICAgICAgMHgyMDAzMjAwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwMzIwMDAgLSAweDIwMDM3RkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfOSAgICAgICAweDIwMDMyNDAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzMjQwMCAtIDB4MjAwMzdGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8xMCAgICAgIDB4MjAwMzI4MDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDMyODAwIC0gMHgyMDAzN0ZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzExICAgICAgMHgyMDAzMkMwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwMzJDMDAgLSAweDIwMDM3RkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMTIgICAgICAweDIwMDMzMDAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzMzAwMCAtIDB4MjAwMzdGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8xMyAgICAgIDB4MjAwMzM0MDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDMzNDAwIC0gMHgyMDAzN0ZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzE0ICAgICAgMHgyMDAzMzgwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwMzM4MDAgLSAweDIwMDM3RkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMTUgICAgICAweDIwMDMzQzAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzM0MwMCAtIDB4MjAwMzdGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8xNiAgICAgIDB4MjAwMzQwMDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDM0MDAwIC0gMHgyMDAzN0ZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzE3ICAgICAgMHgyMDAzNDQwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwMzQ0MDAgLSAweDIwMDM3RkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMTggICAgICAweDIwMDM0ODAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzNDgwMCAtIDB4MjAwMzdGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8xOSAgICAgIDB4MjAwMzRDMDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDM0QzAwIC0gMHgyMDAzN0ZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzIwICAgICAgMHgyMDAzNTAwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwMzUwMDAgLSAweDIwMDM3RkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMjEgICAgICAweDIwMDM1NDAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzNTQwMCAtIDB4MjAwMzdGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8yMiAgICAgIDB4MjAwMzU4MDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDM1ODAwIC0gMHgyMDAzN0ZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzIzICAgICAgMHgyMDAzNUMwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwMzVDMDAgLSAweDIwMDM3RkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMjQgICAgICAweDIwMDM2MDAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzNjAwMCAtIDB4MjAwMzdGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8yNSAgICAgIDB4MjAwMzY0MDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDM2NDAwIC0gMHgyMDAzN0ZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzI2ICAgICAgMHgyMDAzNjgwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwMzY4MDAgLSAweDIwMDM3RkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMjcgICAgICAweDIwMDM2QzAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzNkMwMCAtIDB4MjAwMzdGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8yOCAgICAgIDB4MjAwMzcwMDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDM3MDAwIC0gMHgyMDAzN0ZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzI5ICAgICAgMHgyMDAzNzQwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwMzc0MDAgLSAweDIwMDM3RkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMzAgICAgICAweDIwMDM3ODAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzNzgwMCAtIDB4MjAwMzdGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8zMSAgICAgIDB4MjAwMzdDMDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDM3QzAwIC0gMHgyMDAzN0ZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJBX0ZVTExfVU5TRUNVUkUgICAgICAgICAgICAgMHgyMDA0MDAwMFUgIC8qICBUaGUgUkFNMkEgaXMgYWNjZXNzaWJsZSB0byBNMCBQbHVzIGFuZCBNNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMCAgICAgICAoU1JBTTJBX0JBU0UgKyAweDAwMDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQV9CQVNFICsgMHgwMDAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8xICAgICAgIChTUkFNMkFfQkFTRSArIDB4MDQwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJBX0JBU0UgKyAweDA0MDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzIgICAgICAgKFNSQU0yQV9CQVNFICsgMHgwODAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkFfQkFTRSArIDB4MDgwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMyAgICAgICAoU1JBTTJBX0JBU0UgKyAweDBDMDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQV9CQVNFICsgMHgwQzAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl80ICAgICAgIChTUkFNMkFfQkFTRSArIDB4MTAwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJBX0JBU0UgKyAweDEwMDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzUgICAgICAgKFNSQU0yQV9CQVNFICsgMHgxNDAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkFfQkFTRSArIDB4MTQwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfNiAgICAgICAoU1JBTTJBX0JBU0UgKyAweDE4MDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQV9CQVNFICsgMHgxODAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl83ICAgICAgIChTUkFNMkFfQkFTRSArIDB4MUMwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJBX0JBU0UgKyAweDFDMDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzggICAgICAgKFNSQU0yQV9CQVNFICsgMHgyMDAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkFfQkFTRSArIDB4MjAwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfOSAgICAgICAoU1JBTTJBX0JBU0UgKyAweDI0MDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQV9CQVNFICsgMHgyNDAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8xMCAgICAgIChTUkFNMkFfQkFTRSArIDB4MjgwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJBX0JBU0UgKyAweDI4MDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzExICAgICAgKFNSQU0yQV9CQVNFICsgMHgyQzAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkFfQkFTRSArIDB4MkMwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMTIgICAgICAoU1JBTTJBX0JBU0UgKyAweDMwMDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQV9CQVNFICsgMHgzMDAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8xMyAgICAgIChTUkFNMkFfQkFTRSArIDB4MzQwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJBX0JBU0UgKyAweDM0MDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzE0ICAgICAgKFNSQU0yQV9CQVNFICsgMHgzODAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkFfQkFTRSArIDB4MzgwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMTUgICAgICAoU1JBTTJBX0JBU0UgKyAweDNDMDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQV9CQVNFICsgMHgzQzAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8xNiAgICAgIChTUkFNMkFfQkFTRSArIDB4NDAwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJBX0JBU0UgKyAweDQwMDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzE3ICAgICAgKFNSQU0yQV9CQVNFICsgMHg0NDAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkFfQkFTRSArIDB4NDQwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMTggICAgICAoU1JBTTJBX0JBU0UgKyAweDQ4MDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQV9CQVNFICsgMHg0ODAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8xOSAgICAgIChTUkFNMkFfQkFTRSArIDB4NEMwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJBX0JBU0UgKyAweDRDMDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzIwICAgICAgKFNSQU0yQV9CQVNFICsgMHg1MDAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkFfQkFTRSArIDB4NTAwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMjEgICAgICAoU1JBTTJBX0JBU0UgKyAweDU0MDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQV9CQVNFICsgMHg1NDAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8yMiAgICAgIChTUkFNMkFfQkFTRSArIDB4NTgwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJBX0JBU0UgKyAweDU4MDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzIzICAgICAgKFNSQU0yQV9CQVNFICsgMHg1QzAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkFfQkFTRSArIDB4NUMwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMjQgICAgICAoU1JBTTJBX0JBU0UgKyAweDYwMDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQV9CQVNFICsgMHg2MDAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8yNSAgICAgIChTUkFNMkFfQkFTRSArIDB4NjQwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJBX0JBU0UgKyAweDY0MDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzI2ICAgICAgKFNSQU0yQV9CQVNFICsgMHg2ODAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkFfQkFTRSArIDB4NjgwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMjcgICAgICAoU1JBTTJBX0JBU0UgKyAweDZDMDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQV9CQVNFICsgMHg2QzAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8yOCAgICAgIChTUkFNMkFfQkFTRSArIDB4NzAwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJBX0JBU0UgKyAweDcwMDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJBX1NUQVJUX1NFQ1VSRV9BRERSXzI5ICAgICAgKFNSQU0yQV9CQVNFICsgMHg3NDAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkFfQkFTRSArIDB4NzQwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkFfU1RBUlRfU0VDVVJFX0FERFJfMzAgICAgICAoU1JBTTJBX0JBU0UgKyAweDc4MDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQV9CQVNFICsgMHg3ODAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQV9TVEFSVF9TRUNVUkVfQUREUl8zMSAgICAgIChTUkFNMkFfQkFTRSArIDB4N0MwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJBX0JBU0UgKyAweDdDMDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJBX0ZVTExfVU5TRUNVUkUgICAgICAgICAgICAgKFNSQU0yQV9CQVNFICsgMHg4MDAwVSkgIC8qICBUaGUgUkFNMkEgaXMgYWNjZXNzaWJsZSB0byBNMCBQbHVzIGFuZCBNNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAvKioKICAgKiBAfQpAQCAtNTIyLDM5ICs1MjMsMzkgQEAKICAgKiBAewogICAqLwogCi0jZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8wICAgICAgIDB4MjAwMzgwMDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDM4MDAwIC0gMHgyMDAzRkZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzEgICAgICAgMHgyMDAzODQwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwMzg0MDAgLSAweDIwMDNGRkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMiAgICAgICAweDIwMDM4ODAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzODgwMCAtIDB4MjAwM0ZGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8zICAgICAgIDB4MjAwMzhDMDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDM4QzAwIC0gMHgyMDAzRkZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzQgICAgICAgMHgyMDAzOTAwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwMzkwMDAgLSAweDIwMDNGRkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfNSAgICAgICAweDIwMDM5NDAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzOTQwMCAtIDB4MjAwM0ZGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl82ICAgICAgIDB4MjAwMzk4MDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDM5ODAwIC0gMHgyMDAzRkZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzcgICAgICAgMHgyMDAzOUMwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwMzlDMDAgLSAweDIwMDNGRkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfOCAgICAgICAweDIwMDNBMDAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzQTAwMCAtIDB4MjAwM0ZGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl85ICAgICAgIDB4MjAwM0E0MDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDNBNDAwIC0gMHgyMDAzRkZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzEwICAgICAgMHgyMDAzQTgwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwM0E4MDAgLSAweDIwMDNGRkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMTEgICAgICAweDIwMDNBQzAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzQUMwMCAtIDB4MjAwM0ZGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8xMiAgICAgIDB4MjAwM0IwMDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDNCMDAwIC0gMHgyMDAzRkZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzEzICAgICAgMHgyMDAzQjQwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwM0I0MDAgLSAweDIwMDNGRkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMTQgICAgICAweDIwMDNCODAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzQjgwMCAtIDB4MjAwM0ZGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8xNSAgICAgIDB4MjAwM0JDMDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDNCQzAwIC0gMHgyMDAzRkZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzE2ICAgICAgMHgyMDAzQzAwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwM0MwMDAgLSAweDIwMDNGRkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMTcgICAgICAweDIwMDNDNDAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzQzQwMCAtIDB4MjAwM0ZGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8xOCAgICAgIDB4MjAwM0M4MDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDNDODAwIC0gMHgyMDAzRkZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzE5ICAgICAgMHgyMDAzQ0MwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwM0NDMDAgLSAweDIwMDNGRkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMjAgICAgICAweDIwMDNEMDAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzRDAwMCAtIDB4MjAwM0ZGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8yMSAgICAgIDB4MjAwM0Q0MDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDNENDAwIC0gMHgyMDAzRkZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzIyICAgICAgMHgyMDAzRDgwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwM0Q4MDAgLSAweDIwMDNGRkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMjMgICAgICAweDIwMDNEQzAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzREMwMCAtIDB4MjAwM0ZGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8yNCAgICAgIDB4MjAwM0UwMDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDNFMDAwIC0gMHgyMDAzRkZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzI1ICAgICAgMHgyMDAzRTQwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwM0U0MDAgLSAweDIwMDNGRkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMjYgICAgICAweDIwMDNFODAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzRTgwMCAtIDB4MjAwM0ZGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8yNyAgICAgIDB4MjAwM0VDMDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDNFQzAwIC0gMHgyMDAzRkZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzI4ICAgICAgMHgyMDAzRjAwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwM0YwMDAgLSAweDIwMDNGRkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMjkgICAgICAweDIwMDNGNDAwVSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgMHgyMDAzRjQwMCAtIDB4MjAwM0ZGRkYgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCi0jZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8zMCAgICAgIDB4MjAwM0Y4MDBVICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAweDIwMDNGODAwIC0gMHgyMDAzRkZGRiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KLSNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzMxICAgICAgMHgyMDAzRkMwMFUgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIDB4MjAwM0ZDMDAgLSAweDIwMDNGRkZGIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLwotI2RlZmluZSBTUkFNMkJfRlVMTF9VTlNFQ1VSRSAgICAgICAgICAgICAweDIwMDNGRjAwVSAgLyogIFRoZSBSQU0yQiBpcyBhY2Nlc3NpYmxlIHRvIE0wIFBsdXMgYW5kIE00ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8wICAgICAgIChTUkFNMkJfQkFTRSArIDB4MDAwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJCX0JBU0UgKyAweDAwMDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzEgICAgICAgKFNSQU0yQl9CQVNFICsgMHgwNDAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkJfQkFTRSArIDB4MDQwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMiAgICAgICAoU1JBTTJCX0JBU0UgKyAweDA4MDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQl9CQVNFICsgMHgwODAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8zICAgICAgIChTUkFNMkJfQkFTRSArIDB4MEMwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJCX0JBU0UgKyAweDBDMDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzQgICAgICAgKFNSQU0yQl9CQVNFICsgMHgxMDAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkJfQkFTRSArIDB4MTAwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfNSAgICAgICAoU1JBTTJCX0JBU0UgKyAweDE0MDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQl9CQVNFICsgMHgxNDAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl82ICAgICAgIChTUkFNMkJfQkFTRSArIDB4MTgwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJCX0JBU0UgKyAweDE4MDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzcgICAgICAgKFNSQU0yQl9CQVNFICsgMHgxQzAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkJfQkFTRSArIDB4MUMwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfOCAgICAgICAoU1JBTTJCX0JBU0UgKyAweDIwMDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQl9CQVNFICsgMHgyMDAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl85ICAgICAgIChTUkFNMkJfQkFTRSArIDB4MjQwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJCX0JBU0UgKyAweDI0MDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzEwICAgICAgKFNSQU0yQl9CQVNFICsgMHgyODAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkJfQkFTRSArIDB4MjgwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMTEgICAgICAoU1JBTTJCX0JBU0UgKyAweDJDMDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQl9CQVNFICsgMHgyQzAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8xMiAgICAgIChTUkFNMkJfQkFTRSArIDB4MzAwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJCX0JBU0UgKyAweDMwMDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzEzICAgICAgKFNSQU0yQl9CQVNFICsgMHgzNDAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkJfQkFTRSArIDB4MzQwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMTQgICAgICAoU1JBTTJCX0JBU0UgKyAweDM4MDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQl9CQVNFICsgMHgzODAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8xNSAgICAgIChTUkFNMkJfQkFTRSArIDB4M0MwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJCX0JBU0UgKyAweDNDMDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzE2ICAgICAgKFNSQU0yQl9CQVNFICsgMHg0MDAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkJfQkFTRSArIDB4NDAwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMTcgICAgICAoU1JBTTJCX0JBU0UgKyAweDQ0MDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQl9CQVNFICsgMHg0NDAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8xOCAgICAgIChTUkFNMkJfQkFTRSArIDB4NDgwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJCX0JBU0UgKyAweDQ4MDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzE5ICAgICAgKFNSQU0yQl9CQVNFICsgMHg0QzAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkJfQkFTRSArIDB4NEMwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMjAgICAgICAoU1JBTTJCX0JBU0UgKyAweDUwMDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQl9CQVNFICsgMHg1MDAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8yMSAgICAgIChTUkFNMkJfQkFTRSArIDB4NTQwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJCX0JBU0UgKyAweDU0MDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzIyICAgICAgKFNSQU0yQl9CQVNFICsgMHg1ODAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkJfQkFTRSArIDB4NTgwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMjMgICAgICAoU1JBTTJCX0JBU0UgKyAweDVDMDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQl9CQVNFICsgMHg1QzAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8yNCAgICAgIChTUkFNMkJfQkFTRSArIDB4NjAwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJCX0JBU0UgKyAweDYwMDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzI1ICAgICAgKFNSQU0yQl9CQVNFICsgMHg2NDAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkJfQkFTRSArIDB4NjQwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMjYgICAgICAoU1JBTTJCX0JBU0UgKyAweDY4MDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQl9CQVNFICsgMHg2ODAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8yNyAgICAgIChTUkFNMkJfQkFTRSArIDB4NkMwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJCX0JBU0UgKyAweDZDMDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzI4ICAgICAgKFNSQU0yQl9CQVNFICsgMHg3MDAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkJfQkFTRSArIDB4NzAwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkJfU1RBUlRfU0VDVVJFX0FERFJfMjkgICAgICAoU1JBTTJCX0JBU0UgKyAweDc0MDBVKSAgLyogIFdoZW4gaW4gc2VjdXJlIG1vZGUgKFNSQU0yQl9CQVNFICsgMHg3NDAwKSAtPiBTUkFNMkJfRU5EX0FERFIgaXMgYWNjZXNzaWJsZSBvbmx5IGJ5IE0wIFBsdXMgICovCisjZGVmaW5lIFNSQU0yQl9TVEFSVF9TRUNVUkVfQUREUl8zMCAgICAgIChTUkFNMkJfQkFTRSArIDB4NzgwMFUpICAvKiAgV2hlbiBpbiBzZWN1cmUgbW9kZSAoU1JBTTJCX0JBU0UgKyAweDc4MDApIC0+IFNSQU0yQl9FTkRfQUREUiBpcyBhY2Nlc3NpYmxlIG9ubHkgYnkgTTAgUGx1cyAgKi8KKyNkZWZpbmUgU1JBTTJCX1NUQVJUX1NFQ1VSRV9BRERSXzMxICAgICAgKFNSQU0yQl9CQVNFICsgMHg3QzAwVSkgIC8qICBXaGVuIGluIHNlY3VyZSBtb2RlIChTUkFNMkJfQkFTRSArIDB4N0MwMCkgLT4gU1JBTTJCX0VORF9BRERSIGlzIGFjY2Vzc2libGUgb25seSBieSBNMCBQbHVzICAqLworI2RlZmluZSBTUkFNMkJfRlVMTF9VTlNFQ1VSRSAgICAgICAgICAgICAoU1JBTTJCX0JBU0UgKyAweDgwMDBVKSAgLyogIFRoZSBSQU0yQiBpcyBhY2Nlc3NpYmxlIHRvIE0wIFBsdXMgYW5kIE00ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKIC8qKgogICAqIEB9CkBAIC03MDcsNyArNzA4LDcgQEAKICAgKiAgICAgQGFyZyBAcmVmIEZMQVNIX0ZMQUdfRUNDRCBGTEFTSCB0d28gRUNDIGVycm9ycyBoYXZlIGJlZW4gZGV0ZWN0ZWQKICAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgRkxBU0hfRkxBRyAoU0VUIG9yIFJFU0VUKS4KICAgKi8KLSNkZWZpbmUgX19IQUxfRkxBU0hfR0VUX0ZMQUcoX19GTEFHX18pICAgICAgICAgICgoKChfX0ZMQUdfXykgJiAoRkxBU0hfRkxBR19FQ0NDIHwgRkxBU0hfRkxBR19FQ0NEKSkgIT0gMFUpID8gXAorI2RlZmluZSBfX0hBTF9GTEFTSF9HRVRfRkxBRyhfX0ZMQUdfXykgICAgICAgICAgKCgoKF9fRkxBR19fKSAmIChGTEFTSF9GTEFHX0VDQ1JfRVJST1JTKSkgIT0gMFUpID8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSRUFEX0JJVChGTEFTSC0+RUNDUiwgKF9fRkxBR19fKSkgPT0gKF9fRkxBR19fKSkgIDogXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSRUFEX0JJVChGTEFTSC0+U1IsICAgKF9fRkxBR19fKSkgPT0gKF9fRkxBR19fKSkpCiAvKioKQEAgLTcyNywxMSArNzI4LDEzIEBACiAgICogICAgIEBhcmcgQHJlZiBGTEFTSF9GTEFHX09QVFZFUlIgRkxBU0ggT3B0aW9uIHZhbGlkaXR5IGVycm9yIGZsYWcKICAgKiAgICAgQGFyZyBAcmVmIEZMQVNIX0ZMQUdfRUNDQyBGTEFTSCBvbmUgRUNDIGVycm9yIGhhcyBiZWVuIGRldGVjdGVkIGFuZCBjb3JyZWN0ZWQKICAgKiAgICAgQGFyZyBAcmVmIEZMQVNIX0ZMQUdfRUNDRCBGTEFTSCB0d28gRUNDIGVycm9ycyBoYXZlIGJlZW4gZGV0ZWN0ZWQKKyAgKiAgICAgQGFyZyBAcmVmIEZMQVNIX0ZMQUdfU1JfRVJST1JTIEZMQVNIIEFsbCBTUiBlcnJvcnMgZmxhZ3MKKyAgKiAgICAgQGFyZyBAcmVmIEZMQVNIX0ZMQUdfRUNDUl9FUlJPUlMgRkxBU0ggQWxsIEVDQ1IgZXJyb3JzIGZsYWdzCiAgICogICAgIEBhcmcgQHJlZiBGTEFTSF9GTEFHX0FMTF9FUlJPUlMgRkxBU0ggQWxsIGVycm9ycyBmbGFncwogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9GTEFTSF9DTEVBUl9GTEFHKF9fRkxBR19fKSAgICAgICAgZG8geyBpZigoKF9fRkxBR19fKSAmIChGTEFTSF9GTEFHX0VDQ0MgfCBGTEFTSF9GTEFHX0VDQ0QpKSAhPSAwVSkgeyBTRVRfQklUKEZMQVNILT5FQ0NSLCAoKF9fRkxBR19fKSAmIChGTEFTSF9GTEFHX0VDQ0MgfCBGTEFTSF9GTEFHX0VDQ0QpKSk7IH1cCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCgoX19GTEFHX18pICYgfihGTEFTSF9GTEFHX0VDQ0MgfCBGTEFTSF9GTEFHX0VDQ0QpKSAhPSAwVSkgeyBXUklURV9SRUcoRkxBU0gtPlNSLCAoKF9fRkxBR19fKSAmIH4oRkxBU0hfRkxBR19FQ0NDIHwgRkxBU0hfRkxBR19FQ0NEKSkpOyB9XAorI2RlZmluZSBfX0hBTF9GTEFTSF9DTEVBUl9GTEFHKF9fRkxBR19fKSAgICAgICAgZG8geyBpZigoKF9fRkxBR19fKSAmIChGTEFTSF9GTEFHX0VDQ1JfRVJST1JTKSkgIT0gMFUpIHsgU0VUX0JJVChGTEFTSC0+RUNDUiwgKChfX0ZMQUdfXykgJiAoRkxBU0hfRkxBR19FQ0NSX0VSUk9SUykpKTsgfVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoKChfX0ZMQUdfXykgJiB+KEZMQVNIX0ZMQUdfRUNDUl9FUlJPUlMpKSAhPSAwVSkgeyBXUklURV9SRUcoRkxBU0gtPlNSLCAoKF9fRkxBR19fKSAmIH4oRkxBU0hfRkxBR19FQ0NSX0VSUk9SUykpKTsgfVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIC8qKgogICAqIEB9CkBAIC04MDgsMTIgKzgxMSwxMSBAQAogLyoqIEBkZWZncm91cCBGTEFTSF9Qcml2YXRlX0NvbnN0YW50cyBGTEFTSCBQcml2YXRlIENvbnN0YW50cwogICAqIEB7CiAgICovCi0jZGVmaW5lIEZMQVNIX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKigodWludDE2X3QgKilGTEFTSFNJWkVfQkFTRSkpICYgKDB4MDdGRlVMKSkgPDwgMTBVKQogI2RlZmluZSBGTEFTSF9FTkRfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgKEZMQVNIX0JBU0UgKyBGTEFTSF9TSVpFIC0gMVUpCiAKICNkZWZpbmUgRkxBU0hfQkFOS19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX1NJWkUgICAvKiE8IEZMQVNIIEJhbmsgU2l6ZSAqLwogI2RlZmluZSBGTEFTSF9QQUdFX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFUgIC8qITwgRkxBU0ggUGFnZSBTaXplLCA0IEtCeXRlcyAqLwotI2RlZmluZSBGTEFTSF9QQUdFX05CICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI4VQorI2RlZmluZSBGTEFTSF9QQUdFX05CICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZMQVNIX1NJWkUgLyBGTEFTSF9QQUdFX1NJWkUpCiAjZGVmaW5lIEZMQVNIX1RJTUVPVVRfVkFMVUUgICAgICAgICAgICAgICAgICAgICAxMDAwVSAgICAgICAgLyohPCBGTEFTSCBFeGVjdXRpb24gVGltZW91dCwgMSBzICovCiAKICNkZWZpbmUgRkxBU0hfUENST1BfR1JBTlVMQVJJVFlfT0ZGU0VUICAgICAgICAgIDExVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGTEFTSCBDb2RlIFJlYWRvdXQgUHJvdGVjdGlvbiBncmFudWxhcml0eSBvZmZzZXQgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfaGFsX2dwaW9fZXguaCBiL0luYy9zdG0zMndieHhfaGFsX2dwaW9fZXguaAppbmRleCBlM2MzZmQzLi5mYzEwZjhlIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJ3Ynh4X2hhbF9ncGlvX2V4LmgKKysrIGIvSW5jL3N0bTMyd2J4eF9oYWxfZ3Bpb19leC5oCkBAIC01Myw3ICs1Myw5IEBACiAgICoKICAgKi8KIAotIC8qICAgICB8ICAgQUYwICAgIHwgICBBRjEgICAgfCAgIEFGMiAgICB8ICAgQUYzICAgIHwgICBBRjQgICAgfCAgIEFGNSAgICB8ICAgQUY2ICAgIHwgICBBRjcgICAgfAorI2lmIGRlZmluZWQgKFNUTTMyV0I1NXh4KSB8fCBkZWZpbmVkIChTVE0zMldCNTB4eCkKKworICAvKiAgICAgfCAgIEFGMCAgICB8ICAgQUYxICAgIHwgICBBRjIgICAgfCAgIEFGMyAgICB8ICAgQUY0ICAgIHwgICBBRjUgICAgfCAgIEFGNiAgICB8ICAgQUY3ICAgIHwKICAgKl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogICAqICAgICB8U1lTX0FGICAgIHxUSU0gICAgICAgfFRJTSAgICAgICB8U1BJL1NBSS9USXxJMkMgICAgICAgfCBJMkMgICAgICB8IFJGICAgICAgIHwgIFVTQVJUICAgfAogICAqX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkBAIC0zNTgsNiArMzYwLDkgQEAKIAogI2RlZmluZSBJU19HUElPX0FGKEFGKSAgICAgICAgICAgICAgKChBRikgPD0gKHVpbnQ4X3QpMHgwZikKIAorI2VuZGlmCisKKwogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyd2J4eF9oYWxfcmNjLmggYi9JbmMvc3RtMzJ3Ynh4X2hhbF9yY2MuaAppbmRleCBiYTAzMjkxLi4zNmM2NDdiIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJ3Ynh4X2hhbF9yY2MuaAorKysgYi9JbmMvc3RtMzJ3Ynh4X2hhbF9yY2MuaApAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBSQ0NfUExMTV9ESVY3KSAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gUkNDX1BMTE1fRElWOCkpCiAKLSNkZWZpbmUgSVNfUkNDX1BMTE5fVkFMVUUoX19WQUxVRV9fKSAoKDhVIDw9IChfX1ZBTFVFX18pKSAmJiAoKF9fVkFMVUVfXykgPD0gODZVKSkKKyNkZWZpbmUgSVNfUkNDX1BMTE5fVkFMVUUoX19WQUxVRV9fKSAoKDZVIDw9IChfX1ZBTFVFX18pKSAmJiAoKF9fVkFMVUVfXykgPD0gMTI3VSkpCiAKICNkZWZpbmUgSVNfUkNDX1BMTFBfVkFMVUUoX19WQUxVRV9fKSAoKFJDQ19QTExQX0RJVjIgPD0gKF9fVkFMVUVfXykpICYmICgoX19WQUxVRV9fKSA8PSBSQ0NfUExMUF9ESVYzMikpCiAKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBvZiBAcmVmIFJDQ19QTExNX0Nsb2NrX0RpdmlkZXIgICAgICAgICAgICAgKi8KIAogICB1aW50MzJfdCBQTExOOyAgICAgICAvKiE8IFBMTE46IE11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IgUExMIFZDTyBvdXRwdXQgY2xvY2suCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gOCBhbmQgTWF4X0RhdGEgPSA4NiAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDYgYW5kIE1heF9EYXRhID0gMTI3ICAgICovCiAKICAgdWludDMyX3QgUExMUDsgICAgICAgLyohPCBQTExQOiBEaXZpc2lvbiBmYWN0b3IgZm9yIFNBSSAmIEFEQyBjbG9jay4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgb2YgQHJlZiBSQ0NfUExMUF9DbG9ja19EaXZpZGVyICAgICAgICAgICAgICovCkBAIC0yODYxLDEzICsyODYxLDEzIEBACiAgICogQHBhcmFtICBfX1BMTE1fXyAgc3BlY2lmaWVzIHRoZSBkaXZpc2lvbiBmYWN0b3IgZm9yIFBMTCBWQ08gaW5wdXQgY2xvY2suCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgb2YgQHJlZiBSQ0NfUExMTV9DbG9ja19EaXZpZGVyLgogICAqIEBub3RlICAgWW91IGhhdmUgdG8gc2V0IHRoZSBQTExNIHBhcmFtZXRlciBjb3JyZWN0bHkgdG8gZW5zdXJlIHRoYXQgdGhlIFZDTyBpbnB1dAotICAqICAgICAgICAgZnJlcXVlbmN5IHJhbmdlcyBmcm9tIDQgdG8gMTYgTUh6LiBJdCBpcyByZWNvbW1lbmRlZCB0byBzZWxlY3QgYSBmcmVxdWVuY3kKKyAgKiAgICAgICAgIGZyZXF1ZW5jeSByYW5nZXMgZnJvbSAyLjY2IHRvIDE2IE1Iei4gSXQgaXMgcmVjb21tZW5kZWQgdG8gc2VsZWN0IGEgZnJlcXVlbmN5CiAgICogICAgICAgICBvZiAxNiBNSHogdG8gbGltaXQgUExMIGppdHRlci4KICAgKgogICAqIEBwYXJhbSAgX19QTExOX18gIHNwZWNpZmllcyB0aGUgbXVsdGlwbGljYXRpb24gZmFjdG9yIGZvciBQTEwgVkNPIG91dHB1dCBjbG9jay4KLSAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiA4IGFuZCA4Ni4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiA2IGFuZCAxMjcuCiAgICogQG5vdGUgICBZb3UgaGF2ZSB0byBzZXQgdGhlIFBMTE4gcGFyYW1ldGVyIGNvcnJlY3RseSB0byBlbnN1cmUgdGhhdCB0aGUgVkNPCi0gICogICAgICAgICBvdXRwdXQgZnJlcXVlbmN5IGlzIGJldHdlZW4gNjQgYW5kIDM0NCBNSHouCisgICogICAgICAgICBvdXRwdXQgZnJlcXVlbmN5IGlzIGJldHdlZW4gOTYgYW5kIDM0NCBNSHouCiAgICoKICAgKiBAcGFyYW0gIF9fUExMUF9fICBzcGVjaWZpZXMgdGhlIGRpdmlzaW9uIGZhY3RvciBmb3IgQURDIGFuZCBTQUkxIGNsb2NrLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIG9mIEByZWYgUkNDX1BMTFBfQ2xvY2tfRGl2aWRlci4KZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfaGFsX3JjY19leC5oIGIvSW5jL3N0bTMyd2J4eF9oYWxfcmNjX2V4LmgKaW5kZXggNjhmZTg5Zi4uMjMwOTI5ZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyd2J4eF9oYWxfcmNjX2V4LmgKKysrIGIvSW5jL3N0bTMyd2J4eF9oYWxfcmNjX2V4LmgKQEAgLTE5MSw3ICsxOTEsNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFNBSTEpCi0jZGVmaW5lIElTX1JDQ19QTExTQUkxTl9WQUxVRShfX1ZBTFVFX18pICAgKCg4VSA8PSAoX19WQUxVRV9fKSkgJiYgKChfX1ZBTFVFX18pIDw9IDg2VSkpCisjZGVmaW5lIElTX1JDQ19QTExTQUkxTl9WQUxVRShfX1ZBTFVFX18pICAgKCg2VSA8PSAoX19WQUxVRV9fKSkgJiYgKChfX1ZBTFVFX18pIDw9IDEyN1UpKQogCiAjZGVmaW5lIElTX1JDQ19QTExTQUkxUF9WQUxVRShfX1ZBTFVFX18pICAgKChSQ0NfUExMUF9ESVYyIDw9IChfX1ZBTFVFX18pKSAmJiAoKF9fVkFMVUVfXykgPD0gUkNDX1BMTFBfRElWMzIpKQogCkBAIC0yNDIsNyArMjQyLDcgQEAKIHsKIAogICB1aW50MzJfdCBQTExOOyAgICAgICAgICAgICAvKiE8IFBMTE46IHNwZWNpZmllcyB0aGUgbXVsdGlwbGljYXRpb24gZmFjdG9yIGZvciBQTExTQUkxIFZDTyBvdXRwdXQgY2xvY2suCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhPTggYW5kIE1heF9EYXRhPTg2LiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YT02IGFuZCBNYXhfRGF0YT0xMjcuICovCiAKICAgdWludDMyX3QgUExMUDsgICAgICAgICAgICAgLyohPCBQTExQOiBzcGVjaWZpZXMgdGhlIGRpdmlzaW9uIGZhY3RvciBmb3IgU0FJIGNsb2NrLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBvZiBAcmVmIFJDQ19QTExQX0Nsb2NrX0RpdmlkZXIgKi8KQEAgLTc1Nyw5ICs3NTcsOSBAQAogICAqICAgICAgICAgQHJlZiBfX0hBTF9SQ0NfUExMX0NPTkZJRygpIG1hY3JvKQogICAqCiAgICogQHBhcmFtICBfX1BMTE5fXyBzcGVjaWZpZXMgdGhlIG11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IgUExMU0FJMSBWQ08gb3V0cHV0IGNsb2NrLgotICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDQgYW5kIDg2LgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDYgYW5kIDEyNy4KICAgKiBAbm90ZSAgIFlvdSBoYXZlIHRvIHNldCB0aGUgUExMTiBwYXJhbWV0ZXIgY29ycmVjdGx5IHRvIGVuc3VyZSB0aGF0IHRoZSBWQ08KLSAgKiAgICAgICAgIG91dHB1dCBmcmVxdWVuY3kgaXMgYmV0d2VlbiA2NCBhbmQgMzQ0IE1Iei4KKyAgKiAgICAgICAgIG91dHB1dCBmcmVxdWVuY3kgaXMgYmV0d2VlbiA5NiBhbmQgMzQ0IE1Iei4KICAgKiAgICAgICAgIFBMTFNBSTEgY2xvY2sgZnJlcXVlbmN5ID0gZihQTExTQUkxKSBtdWx0aXBsaWVkIGJ5IFBMTE4KICAgKgogICAqIEBwYXJhbSAgX19QTExQX18gc3BlY2lmaWVzIHRoZSBkaXZpc2lvbiBmYWN0b3IgZm9yIFNBSSBjbG9jay4KQEAgLTc4OSw5ICs3ODksOSBAQAogICAqICAgICAgICAgQHJlZiBfX0hBTF9SQ0NfUExMX0NPTkZJRygpIG1hY3JvKQogICAqCiAgICogQHBhcmFtICBfX1BMTE5fXyBzcGVjaWZpZXMgdGhlIG11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IgUExMU0FJMSBWQ08gb3V0cHV0IGNsb2NrLgotICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YT00IGFuZCBNYXhfRGF0YT04Ni4KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGE9NiBhbmQgTWF4X0RhdGE9MTI3LgogICAqIEBub3RlICAgWW91IGhhdmUgdG8gc2V0IHRoZSBQTExOIHBhcmFtZXRlciBjb3JyZWN0bHkgdG8gZW5zdXJlIHRoYXQgdGhlIFZDTwotICAqICAgICAgICAgb3V0cHV0IGZyZXF1ZW5jeSBpcyBiZXR3ZWVuIDY0IGFuZCAzNDQgTUh6LgorICAqICAgICAgICAgb3V0cHV0IGZyZXF1ZW5jeSBpcyBiZXR3ZWVuIDk2IGFuZCAzNDQgTUh6LgogICAqICAgICAgICAgVXNlIHRvIHNldCBQTExTQUkxIGNsb2NrIGZyZXF1ZW5jeSA9IGYoUExMU0FJMSkgbXVsdGlwbGllZCBieSBQTExOCiAgICoKICAgKiBAcmV0dmFsIE5vbmUKZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfaGFsX3RpbS5oIGIvSW5jL3N0bTMyd2J4eF9oYWxfdGltLmgKaW5kZXggM2MxMjcxMy4uY2U0YjA5ZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyd2J4eF9oYWxfdGltLmgKKysrIGIvSW5jL3N0bTMyd2J4eF9oYWxfdGltLmgKQEAgLTE2Nyw3ICsxNjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNX0VuY29kZXJfTW9kZSAqLwogCiAgIHVpbnQzMl90IElDMVBvbGFyaXR5OyAgIC8qITwgU3BlY2lmaWVzIHRoZSBhY3RpdmUgZWRnZSBvZiB0aGUgaW5wdXQgc2lnbmFsLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNX0lucHV0X0NhcHR1cmVfUG9sYXJpdHkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9FbmNvZGVyX0lucHV0X1BvbGFyaXR5ICovCiAKICAgdWludDMyX3QgSUMxU2VsZWN0aW9uOyAgLyohPCBTcGVjaWZpZXMgdGhlIGlucHV0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNX0lucHV0X0NhcHR1cmVfU2VsZWN0aW9uICovCkBAIC0xNzksNyArMTc5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MCBhbmQgTWF4X0RhdGEgPSAweEYgKi8KIAogICB1aW50MzJfdCBJQzJQb2xhcml0eTsgICAvKiE8IFNwZWNpZmllcyB0aGUgYWN0aXZlIGVkZ2Ugb2YgdGhlIGlucHV0IHNpZ25hbC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9JbnB1dF9DYXB0dXJlX1BvbGFyaXR5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fRW5jb2Rlcl9JbnB1dF9Qb2xhcml0eSAqLwogCiAgIHVpbnQzMl90IElDMlNlbGVjdGlvbjsgIC8qITwgU3BlY2lmaWVzIHRoZSBpbnB1dC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNX0lucHV0X0NhcHR1cmVfU2VsZWN0aW9uICovCkBAIC02MTYsNiArNjE2LDE1IEBACiAgICogQH0KICAgKi8KIAorLyoqIEBkZWZncm91cCBUSU1fRW5jb2Rlcl9JbnB1dF9Qb2xhcml0eSBUSU0gRW5jb2RlciBJbnB1dCBQb2xhcml0eQorICAqIEB7CisgICovCisjZGVmaW5lICBUSU1fRU5DT0RFUklOUFVUUE9MQVJJVFlfUklTSU5HICAgVElNX0lOUFVUQ0hBTk5FTFBPTEFSSVRZX1JJU0lORyAgICAgIC8qITwgRW5jb2RlciBpbnB1dCB3aXRoIHJpc2luZyBlZGdlIHBvbGFyaXR5ICAqLworI2RlZmluZSAgVElNX0VOQ09ERVJJTlBVVFBPTEFSSVRZX0ZBTExJTkcgIFRJTV9JTlBVVENIQU5ORUxQT0xBUklUWV9GQUxMSU5HICAgICAvKiE8IEVuY29kZXIgaW5wdXQgd2l0aCBmYWxsaW5nIGVkZ2UgcG9sYXJpdHkgKi8KKy8qKgorICAqIEB9CisgICovCisKIC8qKiBAZGVmZ3JvdXAgVElNX0lucHV0X0NhcHR1cmVfU2VsZWN0aW9uIFRJTSBJbnB1dCBDYXB0dXJlIFNlbGVjdGlvbgogICAqIEB7CiAgICovCkBAIC0xNjg2LDYgKzE2OTUsOSBAQAogI2RlZmluZSBJU19USU1fT0NOSURMRV9TVEFURShfX1NUQVRFX18pICAgICgoKF9fU1RBVEVfXykgPT0gVElNX09DTklETEVTVEFURV9TRVQpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NUQVRFX18pID09IFRJTV9PQ05JRExFU1RBVEVfUkVTRVQpKQogCisjZGVmaW5lIElTX1RJTV9FTkNPREVSSU5QVVRfUE9MQVJJVFkoX19QT0xBUklUWV9fKSAgICgoKF9fUE9MQVJJVFlfXykgPT0gVElNX0VOQ09ERVJJTlBVVFBPTEFSSVRZX1JJU0lORykgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9MQVJJVFlfXykgPT0gVElNX0VOQ09ERVJJTlBVVFBPTEFSSVRZX0ZBTExJTkcpKQorCiAjZGVmaW5lIElTX1RJTV9JQ19QT0xBUklUWShfX1BPTEFSSVRZX18pICAgKCgoX19QT0xBUklUWV9fKSA9PSBUSU1fSUNQT0xBUklUWV9SSVNJTkcpICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9MQVJJVFlfXykgPT0gVElNX0lDUE9MQVJJVFlfRkFMTElORykgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPTEFSSVRZX18pID09IFRJTV9JQ1BPTEFSSVRZX0JPVEhFREdFKSkKZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfaGFsX3d3ZGcuaCBiL0luYy9zdG0zMndieHhfaGFsX3d3ZGcuaAppbmRleCBmMjBlZTg3Li44ZDY5Nzg0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJ3Ynh4X2hhbF93d2RnLmgKKysrIGIvSW5jL3N0bTMyd2J4eF9oYWxfd3dkZy5oCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIFNUTTMyV0J4eF9IQUxfV1dER19ICiAKICNpZmRlZiBfX2NwbHVzcGx1cwotIGV4dGVybiAiQyIgeworZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTg5LDEyICs4OSwxMiBAQAogewogICBIQUxfV1dER19FV0lfQ0JfSUQgICAgICAgICAgPSAweDAwdSwgICAgLyohPCBXV0RHIEVXSSBjYWxsYmFjayBJRCAqLwogICBIQUxfV1dER19NU1BJTklUX0NCX0lEICAgICAgPSAweDAxdSwgICAgLyohPCBXV0RHIE1zcEluaXQgY2FsbGJhY2sgSUQgKi8KLX1IQUxfV1dER19DYWxsYmFja0lEVHlwZURlZjsKK30gSEFMX1dXREdfQ2FsbGJhY2tJRFR5cGVEZWY7CiAKIC8qKgogICAqIEBicmllZiAgSEFMIFdXREcgQ2FsbGJhY2sgcG9pbnRlciBkZWZpbml0aW9uCiAgICovCi10eXBlZGVmIHZvaWQgKCpwV1dER19DYWxsYmFja1R5cGVEZWYpKFdXREdfSGFuZGxlVHlwZURlZiAqIGhwcHApOyAvKiE8IHBvaW50ZXIgdG8gYSBXV0RHIGNvbW1vbiBjYWxsYmFjayBmdW5jdGlvbnMgKi8KK3R5cGVkZWYgdm9pZCAoKnBXV0RHX0NhbGxiYWNrVHlwZURlZikoV1dER19IYW5kbGVUeXBlRGVmICpocHBwKTsgIC8qITwgcG9pbnRlciB0byBhIFdXREcgY29tbW9uIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogCiAjZW5kaWYKIC8qKgpAQCAtMjQ3LDcgKzI0Nyw4IEBACiAgICogICAgICAgICAgICBAYXJnIFdXREdfSVRfRVdJOiBFYXJseSBXYWtldXAgSW50ZXJydXB0CiAgICogQHJldHZhbCBzdGF0ZSBvZiBfX0lOVEVSUlVQVF9fIChUUlVFIG9yIEZBTFNFKS4KICAgKi8KLSNkZWZpbmUgX19IQUxfV1dER19HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0ZSICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpCisjZGVmaW5lIF9fSEFMX1dXREdfR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNGUlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkKIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfbGxfcHdyLmggYi9JbmMvc3RtMzJ3Ynh4X2xsX3B3ci5oCmluZGV4IDVlN2EyOTcuLmQxYTliNzYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMndieHhfbGxfcHdyLmgKKysrIGIvSW5jL3N0bTMyd2J4eF9sbF9wd3IuaApAQCAtMTA2Miw3ICsxMDYyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1BXUl9FbmFibGVHUElPUHVsbFVwKHVpbnQzMl90IEdQSU8sIHVpbnQzMl90IEdQSU9OdW1iZXIpCiB7Ci0gIFNFVF9CSVQoKigodWludDMyX3QgKilHUElPKSwgR1BJT051bWJlcik7CisgIFNFVF9CSVQoKigoX19JTyB1aW50MzJfdCAqKUdQSU8pLCBHUElPTnVtYmVyKTsKIH0KIAogLyoqCkBAIC0xMTAzLDcgKzExMDMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUFdSX0Rpc2FibGVHUElPUHVsbFVwKHVpbnQzMl90IEdQSU8sIHVpbnQzMl90IEdQSU9OdW1iZXIpCiB7Ci0gIENMRUFSX0JJVCgqKCh1aW50MzJfdCAqKUdQSU8pLCBHUElPTnVtYmVyKTsKKyAgQ0xFQVJfQklUKCooKF9fSU8gdWludDMyX3QgKilHUElPKSwgR1BJT051bWJlcik7CiB9CiAKIC8qKgpAQCAtMTE0Miw3ICsxMTQyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9QV1JfSXNFbmFibGVkR1BJT1B1bGxVcCh1aW50MzJfdCBHUElPLCB1aW50MzJfdCBHUElPTnVtYmVyKQogewotICByZXR1cm4gKChSRUFEX0JJVCgqKCh1aW50MzJfdCAqKShHUElPKSksIEdQSU9OdW1iZXIpID09IChHUElPTnVtYmVyKSkgPyAxVUwgOiAwVUwpOworICByZXR1cm4gKChSRUFEX0JJVCgqKChfX0lPIHVpbnQzMl90ICopR1BJTyksIEdQSU9OdW1iZXIpID09IChHUElPTnVtYmVyKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTExODMsOCArMTE4Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9QV1JfRW5hYmxlR1BJT1B1bGxEb3duKHVpbnQzMl90IEdQSU8sIHVpbnQzMl90IEdQSU9OdW1iZXIpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgdGVtcCA9ICh1aW50MzJfdCkoR1BJTykgKyA0VUw7Ci0gIFNFVF9CSVQoKigodWludDMyX3QgKikodGVtcCkpLCBHUElPTnVtYmVyKTsKKyAgU0VUX0JJVCgqKChfX0lPIHVpbnQzMl90ICopKEdQSU8gKyA0VUwpKSwgR1BJT051bWJlcik7CiB9CiAKIC8qKgpAQCAtMTIyNSw4ICsxMjI0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1BXUl9EaXNhYmxlR1BJT1B1bGxEb3duKHVpbnQzMl90IEdQSU8sIHVpbnQzMl90IEdQSU9OdW1iZXIpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgdGVtcCA9ICh1aW50MzJfdCkoR1BJTykgKyA0VUw7Ci0gIENMRUFSX0JJVCgqKCh1aW50MzJfdCAqKSh0ZW1wKSksIEdQSU9OdW1iZXIpOworICBDTEVBUl9CSVQoKigoX19JTyB1aW50MzJfdCAqKShHUElPICsgNFVMKSksIEdQSU9OdW1iZXIpOwogfQogCiAvKioKQEAgLTEyNjUsOCArMTI2Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUFdSX0lzRW5hYmxlZEdQSU9QdWxsRG93bih1aW50MzJfdCBHUElPLCB1aW50MzJfdCBHUElPTnVtYmVyKQogewotICByZWdpc3RlciBfX0lPIHVpbnQzMl90IHRlbXAgPSAodWludDMyX3QpKEdQSU8pICsgNFVMOwotICByZXR1cm4gKChSRUFEX0JJVCgqKCh1aW50MzJfdCAqKSh0ZW1wKSksIEdQSU9OdW1iZXIpID09IChHUElPTnVtYmVyKSkgPyAxVUwgOiAwVUwpOworICByZXR1cm4gKChSRUFEX0JJVCgqKChfX0lPIHVpbnQzMl90ICopKEdQSU8gKyA0VUwpKSwgR1BJT051bWJlcikgPT0gKEdQSU9OdW1iZXIpKSA/IDFVTCA6IDBVTCk7CiB9CiAKICNpZiBkZWZpbmVkKFBXUl9DUjVfU01QU0VOKQpAQCAtMTU3MywxMiArMTU3MCwxMiBAQAogICAgIHsKICAgICAgIE91dHB1dFZvbHRhZ2VMZXZlbFRyaW1tZWQgPSAoaW50MzJfdClMTF9QV1JfU01QU19PVVRQVVRfVk9MVEFHRV8xVjIwOwogICAgIH0KLSAgICBlbHNlIGlmKE91dHB1dFZvbHRhZ2VMZXZlbFRyaW1tZWQgPiAoaW50MzJfdClQV1JfQ1I1X1NNUFNWT1MpCi0gICAgewotICAgICAgT3V0cHV0Vm9sdGFnZUxldmVsVHJpbW1lZCA9IChpbnQzMl90KUxMX1BXUl9TTVBTX09VVFBVVF9WT0xUQUdFXzFWOTA7Ci0gICAgfQogICAgIGVsc2UKICAgICB7CisgICAgICBpZihPdXRwdXRWb2x0YWdlTGV2ZWxUcmltbWVkID4gKGludDMyX3QpUFdSX0NSNV9TTVBTVk9TKQorICAgICAgeworICAgICAgICBPdXRwdXRWb2x0YWdlTGV2ZWxUcmltbWVkID0gKGludDMyX3QpTExfUFdSX1NNUFNfT1VUUFVUX1ZPTFRBR0VfMVY5MDsKKyAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gKHVpbnQzMl90KU91dHB1dFZvbHRhZ2VMZXZlbFRyaW1tZWQ7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJ3Ynh4X2xsX3JjYy5oIGIvSW5jL3N0bTMyd2J4eF9sbF9yY2MuaAppbmRleCA1YTNiOTJiLi4zN2NmMjQ3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJ3Ynh4X2xsX3JjYy5oCisrKyBiL0luYy9zdG0zMndieHhfbGxfcmNjLmgKQEAgLTg0OSw3ICs4NDksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgX19QTExOX18gQmV0d2VlbiBNaW5fRGF0YSA9IDggYW5kIE1heF9EYXRhID0gODYKKyAgKiBAcGFyYW0gIF9fUExMTl9fIEJldHdlZW4gTWluX0RhdGEgPSA2IGFuZCBNYXhfRGF0YSA9IDEyNwogICAqIEBwYXJhbSAgX19QTExSX18gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUl9ESVZfMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExSX0RJVl8zCkBAIC04NzgsNyArODc4LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfNgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl83CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzgKLSAgKiBAcGFyYW0gIF9fUExMTl9fIEJldHdlZW4gTWluX0RhdGEgPSA4IGFuZCBNYXhfRGF0YSA9IDg2CisgICogQHBhcmFtICBfX1BMTE5fXyBCZXR3ZWVuIE1pbl9EYXRhID0gNiBhbmQgTWF4X0RhdGEgPSAxMjcKICAgKiBAcGFyYW0gIF9fUExMUF9fIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFBfRElWXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUF9ESVZfMwpAQCAtOTMwLDcgKzkzMCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl84Ci0gICogQHBhcmFtICBfX1BMTE5fXyBCZXR3ZWVuIE1pbl9EYXRhID0gOCBhbmQgTWF4X0RhdGEgPSA4NgorICAqIEBwYXJhbSAgX19QTExOX18gQmV0d2VlbiBNaW5fRGF0YSA9IDYgYW5kIE1heF9EYXRhID0gMTI3CiAgICogQHBhcmFtICBfX1BMTFBfXyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFBfRElWXzMKQEAgLTk4Miw3ICs5ODIsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgX19QTExOX18gQmV0d2VlbiBNaW5fRGF0YSA9IDggYW5kIE1heF9EYXRhID0gODYKKyAgKiBAcGFyYW0gIF9fUExMTl9fIEJldHdlZW4gTWluX0RhdGEgPSA2IGFuZCBNYXhfRGF0YSA9IDEyNwogICAqIEBwYXJhbSAgX19QTExRX18gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUV9ESVZfMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExRX0RJVl8zCkBAIC0xMDExLDcgKzEwMTEsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgX19QTExTQUkxTl9fIEJldHdlZW4gOCBhbmQgODYKKyAgKiBAcGFyYW0gIF9fUExMU0FJMU5fXyBCZXR3ZWVuIDYgYW5kIDEyNwogICAqIEBwYXJhbSAgX19QTExTQUkxUF9fIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFQX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFQX0RJVl8zCkBAIC0xMDY0LDcgKzEwNjQsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgX19QTExTQUkxTl9fIEJldHdlZW4gOCBhbmQgODYKKyAgKiBAcGFyYW0gIF9fUExMU0FJMU5fXyBCZXR3ZWVuIDYgYW5kIDEyNwogICAqIEBwYXJhbSAgX19QTExTQUkxUV9fIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFRX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFRX0RJVl8zCkBAIC0xMDkzLDcgKzEwOTMsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgX19QTExTQUkxTl9fIEJldHdlZW4gOCBhbmQgODYKKyAgKiBAcGFyYW0gIF9fUExMU0FJMU5fXyBCZXR3ZWVuIDYgYW5kIDEyNwogICAqIEBwYXJhbSAgX19QTExTQUkxUl9fIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFSX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFSX0RJVl8zCkBAIC0yOTU2LDcgKzI5NTYsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gNiBhbmQgMTI3CiAgICogQHBhcmFtICBQTExSIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFJfRElWXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUl9ESVZfNApAQCAtMjk5NCw3ICsyOTk0LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfNgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl83CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzgKLSAgKiBAcGFyYW0gIFBMTE4gQmV0d2VlbiA4IGFuZCA4NgorICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDYgYW5kIDEyNwogICAqIEBwYXJhbSAgUExMUCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFBfRElWXzMKQEAgLTMwNTksNyArMzA1OSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl84Ci0gICogQHBhcmFtICBQTExOIEJldHdlZW4gOCBhbmQgODYKKyAgKiBAcGFyYW0gIFBMTE4gQmV0d2VlbiA2IGFuZCAxMjcKICAgKiBAcGFyYW0gIFBMTFAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUF9ESVZfMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8zCkBAIC0zMTI0LDcgKzMxMjQsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gNiBhbmQgMTI3CiAgICogQHBhcmFtICBQTExRIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFFfRElWXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUV9ESVZfMwpAQCAtMzE0NCw3ICszMTQ0LDcgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IE1haW4gUExMIG11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IgVkNPCiAgICogQHJtdG9sbCBQTExDRkdSICAgICAgUExMTiAgICAgICAgICBMTF9SQ0NfUExMX0dldE4KLSAgKiBAcmV0dmFsIEJldHdlZW4gOCBhbmQgODYKKyAgKiBAcmV0dmFsIEJldHdlZW4gNiBhbmQgMTI3CiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUkNDX1BMTF9HZXROKHZvaWQpCiB7CkBAIC0zNDAyLDcgKzM0MDIsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gNiBhbmQgMTI3CiAgICogQHBhcmFtICBQTExRIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFRX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFRX0RJVl8zCkBAIC0zNDQzLDcgKzM0NDMsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gNiBhbmQgMTI3CiAgICogQHBhcmFtICBQTExQIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFQX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFQX0RJVl8zCkBAIC0zNTA5LDcgKzM1MDksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAotICAqIEBwYXJhbSAgUExMTiBCZXR3ZWVuIDggYW5kIDg2CisgICogQHBhcmFtICBQTExOIEJldHdlZW4gNiBhbmQgMTI3CiAgICogQHBhcmFtICBQTExSIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFSX0RJVl8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFNBSTFSX0RJVl8zCkBAIC0zNTI5LDcgKzM1MjksNyBAQAogLyoqCiAgICogQGJyaWVmICBHZXQgU0FJMVBMTCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgZm9yIFZDTwogICAqIEBybXRvbGwgUExMU0FJMUNGR1IgIFBMTE4gICAgICBMTF9SQ0NfUExMU0FJMV9HZXROCi0gICogQHJldHZhbCBCZXR3ZWVuIDggYW5kIDg2CisgICogQHJldHZhbCBCZXR3ZWVuIDYgYW5kIDEyNwogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JDQ19QTExTQUkxX0dldE4odm9pZCkKIHsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfbGxfc3lzdGVtLmggYi9JbmMvc3RtMzJ3Ynh4X2xsX3N5c3RlbS5oCmluZGV4IDJhMzEzYzguLjg5YmFjZDAgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMndieHhfbGxfc3lzdGVtLmgKKysrIGIvSW5jL3N0bTMyd2J4eF9sbF9zeXN0ZW0uaApAQCAtMjE4Miw4ICsyMTgyLDggQEAKICAgKiBAYnJpZWYgIFJldHVybiB0aGUgRGV2aWNlIElECiAgICogQG5vdGUgICBUaGUgNjQtYml0IFVJRDY0IG1heSBiZSB1c2VkIGJ5IEZpcm13YXJlIHRvIGRlcml2ZSBCTEUgNDgtYml0IERldmljZSBBZGRyZXNzIEVVSS00OCBvcgogICAqICAgICAgICAgODAyLjE1LjQgNjQtYml0IERldmljZSBBZGRyZXNzIEVVSS02NC4KLSAgKiAgICAgICAgIEZvciBTVE0zMldCeHh4eCBkZXZpY2VzLCB0aGUgZGV2aWNlIElEIGlzIDB4MDUKLSAgKiBAcmV0dmFsIFZhbHVlcyBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYgKGV4OiBEZXZpY2UgSUQgaXMgMHgwNSkKKyAgKiAgICAgICAgIEZvciBTVE0zMldCeHh4eCBkZXZpY2VzLCB0aGUgZGV2aWNlIElEIGlzIDB4MjYKKyAgKiBAcmV0dmFsIFZhbHVlcyBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYgKGV4OiBEZXZpY2UgSUQgaXMgMHgyNiBmbyBTVE0zMldCNTV4KQogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0ZMQVNIX0dldERldmljZUlEKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJ3Ynh4X2xsX3RpbS5oIGIvSW5jL3N0bTMyd2J4eF9sbF90aW0uaAppbmRleCA1MjMxYTY3Li5mN2QyZmM1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJ3Ynh4X2xsX3RpbS5oCisrKyBiL0luYy9zdG0zMndieHhfbGxfdGltLmgKQEAgLTkyNCwxNCArOTI0LDE1IEBACiAvKiogQGRlZmdyb3VwIFRJTV9MTF9FQ19FVFJTT1VSQ0UgRXh0ZXJuYWwgVHJpZ2dlciBTb3VyY2UKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9USU1fRVRSU09VUkNFX0dQSU8gICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVUUiBpbnB1dCBpcyBjb25uZWN0ZWQgdG8gR1BJTyAqLworI2RlZmluZSBMTF9USU1fRVRSU09VUkNFX0xFR0FDWSAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVRSIGxlZ2FjeSBtb2RlICovCiAjaWYgZGVmaW5lZChDT01QMSkgJiYgZGVmaW5lZChDT01QMikKICNkZWZpbmUgTExfVElNX0VUUlNPVVJDRV9DT01QMSAgICAgICAgICAgICAgICAgVElNMV9BRjFfRVRSU0VMXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVUUiBpbnB1dCBpcyBjb25uZWN0ZWQgdG8gQ09NUDFfT1VUICovCiAjZGVmaW5lIExMX1RJTV9FVFJTT1VSQ0VfQ09NUDIgICAgICAgICAgICAgICAgIFRJTTFfQUYxX0VUUlNFTF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFVFIgaW5wdXQgaXMgY29ubmVjdGVkIHRvIENPTVAyX09VVCAqLwogI2VuZGlmIC8qIENPTVAxICYmIENPTVAyICovCi0jZGVmaW5lIExMX1RJTV9FVFJTT1VSQ0VfQURDMV9BV0QxICAgICAgICAgICAgIChUSU0xX0FGMV9FVFJTRUxfMSB8IFRJTTFfQUYxX0VUUlNFTF8wKSAvKiE8IEVUUiBpbnB1dCBpcyBjb25uZWN0ZWQgdG8gQURDMSBhbmFsb2cgd2F0Y2hkb2cgMSAqLwotI2RlZmluZSBMTF9USU1fRVRSU09VUkNFX0FEQzFfQVdEMiAgICAgICAgICAgICBUSU0xX0FGMV9FVFJTRUxfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVRSIGlucHV0IGlzIGNvbm5lY3RlZCB0byBBREMxIGFuYWxvZyB3YXRjaGRvZyAyICovCi0jZGVmaW5lIExMX1RJTV9FVFJTT1VSQ0VfQURDMV9BV0QzICAgICAgICAgICAgIChUSU0xX0FGMV9FVFJTRUxfMiB8IFRJTTFfQUYxX0VUUlNFTF8wKSAvKiE8IEVUUiBpbnB1dCBpcyBjb25uZWN0ZWQgdG8gQURDMSBhbmFsb2cgd2F0Y2hkb2cgMyAqLworI2RlZmluZSBMTF9USU1fRVRSU09VUkNFX0dQSU8gICAgICAgICAgICAgICAgICBMTF9USU1fRVRSU09VUkNFX0xFR0FDWSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVRSIGlucHV0IGlzIGNvbm5lY3RlZCB0byBHUElPIHRocm91Z2ggVElNeCBFVFIgcmVtYXBwaW5nIGNhcGFiaWxpdHkgKi8KKyNkZWZpbmUgTExfVElNX0VUUlNPVVJDRV9BREMxX0FXRDEgICAgICAgICAgICAgTExfVElNX0VUUlNPVVJDRV9MRUdBQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVUUiBpbnB1dCBpcyBjb25uZWN0ZWQgdG8gQURDMSBhbmFsb2cgd2F0Y2hkb2cgMSB0aHJvdWdoIFRJTXggRVRSIHJlbWFwcGluZyBjYXBhYmlsaXR5ICovCisjZGVmaW5lIExMX1RJTV9FVFJTT1VSQ0VfQURDMV9BV0QyICAgICAgICAgICAgIExMX1RJTV9FVFJTT1VSQ0VfTEVHQUNZICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFVFIgaW5wdXQgaXMgY29ubmVjdGVkIHRvIEFEQzEgYW5hbG9nIHdhdGNoZG9nIDIgdGhyb3VnaCBUSU14IEVUUiByZW1hcHBpbmcgY2FwYWJpbGl0eSAqLworI2RlZmluZSBMTF9USU1fRVRSU09VUkNFX0FEQzFfQVdEMyAgICAgICAgICAgICBMTF9USU1fRVRSU09VUkNFX0xFR0FDWSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRVRSIGlucHV0IGlzIGNvbm5lY3RlZCB0byBBREMxIGFuYWxvZyB3YXRjaGRvZyAzIHRocm91Z2ggVElNeCBFVFIgcmVtYXBwaW5nIGNhcGFiaWxpdHkgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xMTI5LDcgKzExMzAsNyBAQAogLyoqIEBkZWZncm91cCBUSU1fTExfRUNfVElNMl9JVFIxX1JNUCAgVElNMiBJbnRlcm5hbCBUcmlnZ2VyMSBSZW1hcAogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX1RJTV9USU0yX0lUUjFfUk1QX05PTkUgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhPCBObyBpbnRlcm5hbCB0cmlnZ2VyIG9uIFRJTTJfSVRSMSAqLworI2RlZmluZSBMTF9USU1fVElNMl9JVFIxX1JNUF9OT05FICAgICAgICAgIFRJTTJfT1JfUk1QX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogITwgTm8gaW50ZXJuYWwgdHJpZ2dlciBvbiBUSU0yX0lUUjEgKi8KICNpZiBkZWZpbmVkKFVTQikKICNkZWZpbmUgTExfVElNX1RJTTJfSVRSMV9STVBfVVNCX1NPRiAgICAgICAoVElNMl9PUl9JVFIxX1JNUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICE8IFRJTTJfSVRSMSBpcyBjb25uZWN0ZWQgdG8gVVNCIFNPRiAqLwogI2VuZGlmIC8qIFVTQiAqLwpAQCAtMzI5NCwxNSArMzI5NSwxOSBAQAogICAqIEBicmllZiAgU2VsZWN0IHRoZSBleHRlcm5hbCB0cmlnZ2VyIChFVFIpIGlucHV0IHNvdXJjZS4KICAgKiBAbm90ZSBNYWNybyBJU19USU1fRVRSU0VMX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3IKICAgKiAgICAgICBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBFVFIgc291cmNlIHNlbGVjdGlvbi4KKyAgKiBAbm90ZSBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggTExfVElNX0VUUlNPVVJDRV9HUElPLCAKKyAgKiAgICAgICBMTF9USU1fRVRSU09VUkNFX0FEQzFfQVdEMSwgTExfVElNX0VUUlNPVVJDRV9BREMxX0FXRDIgb3IgCisgICogICAgICAgTExfVElNX0VUUlNPVVJDRV9BREMxX0FXRDMsIEVUUiBzb3VyY2UgcmVsaWVzIG9uIFRJTXggRVRSIHJlbWFwcGluZworICAqICAgICAgIGNhcGFiaWxpdHkgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBmdW5jdGlvbiBAcmVmIExMX1RJTV9TZXRSZW1hcCgpLgogICAqIEBybXRvbGwgQUYxICAgICAgICAgIEVUUlNFTCAgICAgICAgTExfVElNX1NldEVUUlNvdXJjZQogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQogICAqIEBwYXJhbSAgRVRSU291cmNlIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0VUUlNPVVJDRV9HUElPCi0gICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0VUUlNPVVJDRV9DT01QMQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9FVFJTT1VSQ0VfQ09NUDIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fRVRSU09VUkNFX0FEQzFfQVdEMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9FVFJTT1VSQ0VfQURDMV9BV0QyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0VUUlNPVVJDRV9BREMxX0FXRDMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fRVRSU09VUkNFX0NPTVAxCisgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0VUUlNPVVJDRV9DT01QMgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX1NldEVUUlNvdXJjZShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgRVRSU291cmNlKQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyd2J4eF9sbF91dGlscy5oIGIvSW5jL3N0bTMyd2J4eF9sbF91dGlscy5oCmluZGV4IDczM2NjMTUuLmU3YzE3MjIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMndieHhfbGxfdXRpbHMuaAorKysgYi9JbmMvc3RtMzJ3Ynh4X2xsX3V0aWxzLmgKQEAgLTE4LDExICsxOCwxMSBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4gCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCi0gICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSAKKyAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCiAgICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgogICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCiAgICoKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBMTF9SQ0NfUExMX0NvbmZpZ0RvbWFpbl9TWVMoKS4gKi8KIAogICB1aW50MzJfdCBQTExOOyAgIC8qITwgTXVsdGlwbGljYXRpb24gZmFjdG9yIGZvciBQTEwgVkNPIG91dHB1dCBjbG9jay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDggYW5kIE1heF9EYXRhID0gODYKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDYgYW5kIE1heF9EYXRhID0gMTI3CiAKICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICBAcmVmIExMX1JDQ19QTExfQ29uZmlnRG9tYWluX1NZUygpLiAqLwpAQCAtMTk1LDU5ICsxOTUsNTkgQEAKIC8qKiBAZGVmZ3JvdXAgVVRJTFNfRUZfREVWSUNFX0VMRUNUUk9OSUNfU0lHTkFUVVJFIERFVklDRSBFTEVDVFJPTklDIFNJR05BVFVSRQogICAqIEB7CiAgICovCi0gIC8qKgotICAgICogQGJyaWVmICBHZXQgV29yZDAgb2YgdGhlIHVuaXF1ZSBkZXZpY2UgaWRlbnRpZmllciAoVUlEIGJhc2VkIG9uIDk2IGJpdHMpCi0gICAgKiBAcmV0dmFsIFVJRFszMTowXTogWCBhbmQgWSBjb29yZGluYXRlcyBvbiB0aGUgd2FmZXIgZXhwcmVzc2VkIGluIEJDRCBmb3JtYXQKLSAgICAqLwotICBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfR2V0VUlEX1dvcmQwKHZvaWQpCi0gIHsKLSAgICByZXR1cm4gKHVpbnQzMl90KShSRUFEX1JFRygqKCh1aW50MzJfdCAqKVVJRF9CQVNFX0FERFJFU1MpKSk7Ci0gIH0KKy8qKgorICAqIEBicmllZiAgR2V0IFdvcmQwIG9mIHRoZSB1bmlxdWUgZGV2aWNlIGlkZW50aWZpZXIgKFVJRCBiYXNlZCBvbiA5NiBiaXRzKQorICAqIEByZXR2YWwgVUlEWzMxOjBdOiBYIGFuZCBZIGNvb3JkaW5hdGVzIG9uIHRoZSB3YWZlciBleHByZXNzZWQgaW4gQkNEIGZvcm1hdAorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0dldFVJRF9Xb3JkMCh2b2lkKQoreworICByZXR1cm4gKHVpbnQzMl90KShSRUFEX1JFRygqKCh1aW50MzJfdCAqKVVJRF9CQVNFX0FERFJFU1MpKSk7Cit9CiAKLSAgLyoqCi0gICAgKiBAYnJpZWYgIEdldCBXb3JkMSBvZiB0aGUgdW5pcXVlIGRldmljZSBpZGVudGlmaWVyIChVSUQgYmFzZWQgb24gOTYgYml0cykKLSAgICAqIEByZXR2YWwgVUlEWzYzOjMyXTogV2FmZXIgbnVtYmVyIChVSURbMzk6MzJdKSAmIExPVF9OVU1bMjM6MF0gKFVJRFs2Mzo0MF0pCi0gICAgKi8KLSAgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0dldFVJRF9Xb3JkMSh2b2lkKQotICB7Ci0gICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9SRUcoKigodWludDMyX3QgKikoVUlEX0JBU0VfQUREUkVTUyArIDRVKSkpKTsKLSAgfQorLyoqCisgICogQGJyaWVmICBHZXQgV29yZDEgb2YgdGhlIHVuaXF1ZSBkZXZpY2UgaWRlbnRpZmllciAoVUlEIGJhc2VkIG9uIDk2IGJpdHMpCisgICogQHJldHZhbCBVSURbNjM6MzJdOiBXYWZlciBudW1iZXIgKFVJRFszOTozMl0pICYgTE9UX05VTVsyMzowXSAoVUlEWzYzOjQwXSkKKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9HZXRVSURfV29yZDEodm9pZCkKK3sKKyAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9SRUcoKigodWludDMyX3QgKikoVUlEX0JBU0VfQUREUkVTUyArIDRVKSkpKTsKK30KIAotICAvKioKLSAgICAqIEBicmllZiAgR2V0IFdvcmQyIG9mIHRoZSB1bmlxdWUgZGV2aWNlIGlkZW50aWZpZXIgKFVJRCBiYXNlZCBvbiA5NiBiaXRzKQotICAgICogQHJldHZhbCBVSURbOTU6NjRdOiBMb3QgbnVtYmVyIChBU0NJSSBlbmNvZGVkKSAtIExPVF9OVU1bNTU6MjRdCi0gICAgKi8KLSAgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0dldFVJRF9Xb3JkMih2b2lkKQotICB7Ci0gICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9SRUcoKigodWludDMyX3QgKikoVUlEX0JBU0VfQUREUkVTUyArIDhVKSkpKTsKLSAgfQorLyoqCisgICogQGJyaWVmICBHZXQgV29yZDIgb2YgdGhlIHVuaXF1ZSBkZXZpY2UgaWRlbnRpZmllciAoVUlEIGJhc2VkIG9uIDk2IGJpdHMpCisgICogQHJldHZhbCBVSURbOTU6NjRdOiBMb3QgbnVtYmVyIChBU0NJSSBlbmNvZGVkKSAtIExPVF9OVU1bNTU6MjRdCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfR2V0VUlEX1dvcmQyKHZvaWQpCit7CisgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKCooKHVpbnQzMl90ICopKFVJRF9CQVNFX0FERFJFU1MgKyA4VSkpKSk7Cit9CiAKLSAgLyoqCi0gICAgKiBAYnJpZWYgIEdldCBGbGFzaCBtZW1vcnkgc2l6ZQotICAgICogQG5vdGUgICBUaGlzIGJpdGZpZWxkIGluZGljYXRlcyB0aGUgc2l6ZSBvZiB0aGUgZGV2aWNlIEZsYXNoIG1lbW9yeSBleHByZXNzZWQgaW4KLSAgICAqICAgICAgICAgS2J5dGVzLiBBcyBhbiBleGFtcGxlLCAweDA0MCBjb3JyZXNwb25kcyB0byA2NCBLYnl0ZXMuCi0gICAgKiBAcmV0dmFsIEZMQVNIX1NJWkVbMTU6MF06IEZsYXNoIG1lbW9yeSBzaXplCi0gICAgKi8KLSAgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0dldEZsYXNoU2l6ZSh2b2lkKQotICB7Ci0gICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9SRUcoKigodWludDMyX3QgKilGTEFTSFNJWkVfQkFTRV9BRERSRVNTKSkgJiAweDAwMDBGRkZGVUwpOwotICB9CisvKioKKyAgKiBAYnJpZWYgIEdldCBGbGFzaCBtZW1vcnkgc2l6ZQorICAqIEBub3RlICAgVGhpcyBiaXRmaWVsZCBpbmRpY2F0ZXMgdGhlIHNpemUgb2YgdGhlIGRldmljZSBGbGFzaCBtZW1vcnkgZXhwcmVzc2VkIGluCisgICogICAgICAgICBLYnl0ZXMuIEFzIGFuIGV4YW1wbGUsIDB4MDQwIGNvcnJlc3BvbmRzIHRvIDY0IEtieXRlcy4KKyAgKiBAcmV0dmFsIEZMQVNIX1NJWkVbMTU6MF06IEZsYXNoIG1lbW9yeSBzaXplCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfR2V0Rmxhc2hTaXplKHZvaWQpCit7CisgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKCooKHVpbnQzMl90ICopRkxBU0hTSVpFX0JBU0VfQUREUkVTUykpICYgMHgwMDAwRkZGRlVMKTsKK30KIAotICAvKioKLSAgICAqIEBicmllZiAgR2V0IFBhY2thZ2UgdHlwZQotICAgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAgICogICAgICAgICBAYXJnIEByZWYgTExfVVRJTFNfUEFDS0FHRVRZUEVfQ1NQMTAwCi0gICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VVElMU19QQUNLQUdFVFlQRV9DU1AxMDBfQwotICAgICogICAgICAgICBAYXJnIEByZWYgTExfVVRJTFNfUEFDS0FHRVRZUEVfUUZONjgKLSAgICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1FGTjY4X0MKLSAgICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1FGTjQ4Ci0gICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VVElMU19QQUNLQUdFVFlQRV9RRk40OF9DCi0gICAgKgotICAgICovCi0gIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9HZXRQYWNrYWdlVHlwZSh2b2lkKQotICB7Ci0gICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9SRUcoKigodWludDMyX3QgKilQQUNLQUdFX0JBU0VfQUREUkVTUykpICYgMHgxRlUpOwotICB9CisvKioKKyAgKiBAYnJpZWYgIEdldCBQYWNrYWdlIHR5cGUKKyAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfVVRJTFNfUEFDS0FHRVRZUEVfQ1NQMTAwCisgICogICAgICAgICBAYXJnIEByZWYgTExfVVRJTFNfUEFDS0FHRVRZUEVfQ1NQMTAwX0MKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VVElMU19QQUNLQUdFVFlQRV9RRk42OAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1FGTjY4X0MKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VVElMU19QQUNLQUdFVFlQRV9RRk40OAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1FGTjQ4X0MKKyAgKgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0dldFBhY2thZ2VUeXBlKHZvaWQpCit7CisgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKCooKHVpbnQzMl90ICopUEFDS0FHRV9CQVNFX0FERFJFU1MpKSAmIDB4MUZVKTsKK30KIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfbGxfd3dkZy5oIGIvSW5jL3N0bTMyd2J4eF9sbF93d2RnLmgKaW5kZXggY2I2Yzc0Yi4uNWJjN2Q4NyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyd2J4eF9sbF93d2RnLmgKKysrIGIvSW5jL3N0bTMyd2J4eF9sbF93d2RnLmgKQEAgLTU4LDggKzU4LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBXV0RHX0xMX0VDX1BSRVNDQUxFUiAgUFJFU0NBTEVSCi0qIEB7Ci0qLworICAqIEB7CisgICovCiAjZGVmaW5lIExMX1dXREdfUFJFU0NBTEVSXzEgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDB1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdXREcgY291bnRlciBjbG9jayA9IChQQ0xLMS80MDk2KS8xICovCiAjZGVmaW5lIExMX1dXREdfUFJFU0NBTEVSXzIgICAgICAgICAgICAgICAgIFdXREdfQ0ZSX1dER1RCXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdXREcgY291bnRlciBjbG9jayA9IChQQ0xLMS80MDk2KS8yICovCiAjZGVmaW5lIExMX1dXREdfUFJFU0NBTEVSXzQgICAgICAgICAgICAgICAgIFdXREdfQ0ZSX1dER1RCXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdXREcgY291bnRlciBjbG9jayA9IChQQ0xLMS80MDk2KS80ICovCkBAIC0xODMsNyArMTgzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9XV0RHX1BSRVNDQUxFUl8zMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1dXREdfUFJFU0NBTEVSXzY0CiAgICogICAgICAgICBAYXJnIEByZWYgTExfV1dER19QUkVTQ0FMRVJfMTI4Ci0qIEByZXR2YWwgTm9uZQorICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfV1dER19TZXRQcmVzY2FsZXIoV1dER19UeXBlRGVmICpXV0RHeCwgdWludDMyX3QgUHJlc2NhbGVyKQogewpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCmluZGV4IGRhN2U3MTUuLmU5YmYzMTUgMTAwNjQ0Ci0tLSBhL1JFQURNRS5tZAorKysgYi9SRUFETUUubWQKQEAgLTM2LDYgKzM2LDcgQEAKIC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVGFnIHYxLjEuMCB8IFRhZyB2MS4xLjAgfCBUYWcgdjQuNV9jbTQgfCBUYWcgdjEuMS4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCBuZXcgdGFnKQogVGFnIHYxLjIuMCB8IFRhZyB2MS4yLjAgfCBUYWcgdjUuNC4wX2NtNCB8IFRhZyB2MS4yLjAgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IG5ldyB0YWcpCitUYWcgdjEuMy4wIHwgVGFnIHYxLjMuMCB8IFRhZyB2NS40LjBfY200IHwgVGFnIHYxLjMuMCAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgbmV3IHRhZykKIAogVGhlIGZ1bGwgKipTVE0zMkN1YmVXQioqIE1DVSBwYWNrYWdlIGlzIGF2YWlsYWJsZSBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1NUTWljcm9lbGVjdHJvbmljcy9TVE0zMkN1YmVXQikuCiAKZGlmZiAtLWdpdCBhL1JlbGVhc2VfTm90ZXMuaHRtbCBiL1JlbGVhc2VfTm90ZXMuaHRtbAppbmRleCAzNjEzZGI3Li45ZWI3OWM3IDEwMDY0NAotLS0gYS9SZWxlYXNlX05vdGVzLmh0bWwKKysrIGIvUmVsZWFzZV9Ob3Rlcy5odG1sCkBAIC00Niw5ICs0Niw5MSBAQAogPGRpdiBjbGFzcz0iY29sLXNtLTEyIGNvbC1sZy04Ij4KIDxoMSBpZD0idXBkYXRlLWhpc3RvcnkiPlVwZGF0ZSBIaXN0b3J5PC9oMT4KIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KLTxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24zIiBjaGVja2VkIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjMiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4yLjAgLyAyNi1KdW5lLTIwMTk8L2xhYmVsPgorPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjQiIGNoZWNrZWQgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uNCIgYXJpYS1oaWRkZW49InRydWUiPnYxLjMuMCAvIDExLVNlcHRlbWJlci0yMDE5PC9sYWJlbD4KIDxkaXY+CiA8aDIgaWQ9Im1haW4tY2hhbmdlcyI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMyBpZD0ibWFpdGVuYW5jZS1yZWxlYXNlIj5NYWl0ZW5hbmNlIHJlbGVhc2U8L2gzPgorPHRhYmxlPgorPHRoZWFkPgorPHRyIGNsYXNzPSJoZWFkZXIiPgorPHRoPlBlcmlwaGVyYWw8L3RoPgorPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+SGVhZGxpbmU8L3RoPgorPC90cj4KKzwvdGhlYWQ+Cis8dGJvZHk+Cis8dHIgY2xhc3M9Im9kZCI+Cis8dGQ+Q1JZUDwvdGQ+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5Eb2N1bWVudCBhIHJlc3RyaWN0aW9uIHJlZ2FyZGluZyBzaXplIGZpZWxkIG9uIEhBTF9DUllQX0VuY3J5cHRfRE1BLCBIQUxfQ1JZUF9EZWNyeXB0X0RNQSBBUEkuPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImV2ZW4iPgorPHRkPkNSWVA8L3RkPgorPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+Q29ycmVjdCBzZXZlcmFsIE1JU1JBIEM6MjAxMiBhbmQgQ29kZSBTb25hciBjb21wbGlhbmN5IGltcHJvdmVtZW50cy48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0ib2RkIj4KKzx0ZD5GTEFTSDwvdGQ+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5Nb3ZlIEZMQVNIX1NJWkUgZGVmaW5lIGZyb20gaGFsIGZsYXNoLiBoIHRvIGNtc2lzIGRldmljZSBmaWxlPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImV2ZW4iPgorPHRkPkZMQVNIPC90ZD4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkNvcnJlY3QgRUNDIG1hbmFnZW1lbnQgaW4gSEFMIEZMQVNIIGRyaXZlcjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJvZGQiPgorPHRkPkZMQVNIPC90ZD4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkNvcnJlY3QgI2RlZmluZSBpbiBzdG0zMndieHhfaGFsX2ZsYXNoLmggLSBGTEFTSF9QQUdFX05CPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImV2ZW4iPgorPHRkPlJDQzwvdGQ+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5Db3JyZWN0IFBMTCBjaGFyYWN0ZXJpc3RpY3M8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0ib2RkIj4KKzx0ZD5USU1FUjwvdGQ+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5BZGQgYXNzZXJ0aW9uIGNoZWNrIGluc2lkZSBIQUxfVElNRXhfTWFzdGVyQ29uZmlnU3luY2hyb25pemF0aW9uPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImV2ZW4iPgorPHRkPlRJTUVSPC90ZD4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPk1ha2UgTExfVElNX1NldEVUUlNvdXJjZSBpbiBsaW5lIHdpdGggUk0wNDM0PC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9Im9kZCI+Cis8dGQ+V1dERzwvdGQ+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5Db3JyZWN0IHR5cGljYWwgZnJlcXVlbmN5IGNvbXB1dGF0aW9uIGRlc2NyaXB0aW9uIGluc2lkZSB0aGUgaGVhZGVyIGZpbGU8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iZXZlbiI+Cis8dGQ+SVJEQTwvdGQ+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5JbXByb3ZlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQVBJczwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJvZGQiPgorPHRkPlNNQVJUQ0FSRDwvdGQ+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5GaXggR0NDIGNvbXBpbGF0aW9uIHdhcm5pbmc8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iZXZlbiI+Cis8dGQ+VUFSVDwvdGQ+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5Db3JyZWN0IHBvc3NpYmxlIG92ZXJmbG93IHdpdGggd29yZGxlbmd0aCA9IDliaXRzIGFuZCBOTyBwYXJpdHkgaW4gSEFMX1VBUlRfVHJhbnNtaXQoKSBhbmQgSEFMX0lSREFfVHJhbnNtaXQoKTwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJvZGQiPgorPHRkPlVBUlQ8L3RkPgorPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+Rml4IEdDQyBjb21waWxhdGlvbiB3YXJuaW5nPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImV2ZW4iPgorPHRkPlVTQVJUPC90ZD4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkNvcnJlY3QgcG9zc2libGUgb3ZlcmZsb3cgd2l0aCB3b3JkbGVuZ3RoID0gOWJpdHMgYW5kIE5PIHBhcml0eSBpbiBIQUxfVUFSVF9UcmFuc21pdCgpIGFuZCBIQUxfSVJEQV9UcmFuc21pdCgpPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9Im9kZCI+Cis8dGQ+VVNBUlQ8L3RkPgorPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+Rml4IEdDQyBjb21waWxhdGlvbiB3YXJuaW5nPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT4KKzxoMiBpZD0iYmFja3dhcmQtY29tcGF0aWJpbGl0eSI+QmFja3dhcmQgQ29tcGF0aWJpbGl0eTwvaDI+Cis8cD5UaGlzIHJlbGVhc2UgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBwcmV2aW91cyB2ZXJzaW9ucy48L3A+Cis8aDIgaWQ9ImRlcGVuZGVuY2llcyI+RGVwZW5kZW5jaWVzPC9oMj4KKzxwPlRoaXMgc29mdHdhcmUgcmVsZWFzZSBpcyBjb21wYXRpYmxlIHdpdGg6PC9wPgorPHA+U1RNMzJDdWJlTVggVjUuNC4wPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KKzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24zIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24zIiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMi4wIC8gMjYtSnVuZS0yMDE5PC9sYWJlbD4KKzxkaXY+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0xIj5NYWluIENoYW5nZXM8L2gyPgogPGgzIGlkPSJzdG0zMndiNTB4eC1pbnRyb2R1Y3Rpb24tYW5kLW1haW50ZW5hbmNlLXJlbGVhc2UiPlNUTTMyV0I1MHh4IGludHJvZHVjdGlvbiBhbmQgbWFpbnRlbmFuY2UgcmVsZWFzZTwvaDM+CiA8cD5GaXJzdCByZWxlYXNlIGZvciBTVE0zMldCeHggSEFMIGRyaXZlcnMgaW50cm9kdWNpbmcgPHN0cm9uZz5zdG0zMndiNTB4eDwvc3Ryb25nPiBkZXZpY2VzLjwvcD4KIDx0YWJsZT4KQEAgLTExNyw5ICsxOTksOSBAQAogPC90cj4KIDwvdGJvZHk+CiA8L3RhYmxlPgotPGgyIGlkPSJiYWNrd2FyZC1jb21wYXRpYmlsaXR5Ij5CYWNrd2FyZCBDb21wYXRpYmlsaXR5PC9oMj4KKzxoMiBpZD0iYmFja3dhcmQtY29tcGF0aWJpbGl0eS0xIj5CYWNrd2FyZCBDb21wYXRpYmlsaXR5PC9oMj4KIDxwPlRoaXMgcmVsZWFzZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHByZXZpb3VzIHZlcnNpb25zLjwvcD4KLTxoMiBpZD0iZGVwZW5kZW5jaWVzIj5EZXBlbmRlbmNpZXM8L2gyPgorPGgyIGlkPSJkZXBlbmRlbmNpZXMtMSI+RGVwZW5kZW5jaWVzPC9oMj4KIDxwPlRoaXMgc29mdHdhcmUgcmVsZWFzZSBpcyBjb21wYXRpYmxlIHdpdGg6PC9wPgogPHA+U1RNMzJDdWJlTVggVjUuMy4wPC9wPgogPC9kaXY+CkBAIC0xMjcsNyArMjA5LDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMS4wIC8gMDUtQXByaWwtMjAxOTwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTIiPk1haW4gQ2hhbmdlczwvaDI+CiA8aDMgaWQ9Im1haW50ZW5hbmNlLXJlbGVhc2UiPk1haW50ZW5hbmNlIHJlbGVhc2U8L2gzPgogPHA+TWFpbnRlbmFuY2UgcmVsZWFzZSBvZiBIQUwgYW5kIExvdyBsYXllcnMgZHJpdmVycyBzdXBwb3J0aW5nIFNUTTMyV0I1NXh4IGRldmljZXMuPC9wPgogPHRhYmxlPgpAQCAtMTgxLDkgKzI2Myw5IEBACiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+Ci08aDIgaWQ9ImJhY2t3YXJkLWNvbXBhdGliaWxpdHktMSI+QmFja3dhcmQgQ29tcGF0aWJpbGl0eTwvaDI+Cis8aDIgaWQ9ImJhY2t3YXJkLWNvbXBhdGliaWxpdHktMiI+QmFja3dhcmQgQ29tcGF0aWJpbGl0eTwvaDI+CiA8cD5UaGlzIHJlbGVhc2UgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBwcmV2aW91cyB2ZXJzaW9ucy48L3A+Ci08aDIgaWQ9ImRlcGVuZGVuY2llcy0xIj5EZXBlbmRlbmNpZXM8L2gyPgorPGgyIGlkPSJkZXBlbmRlbmNpZXMtMiI+RGVwZW5kZW5jaWVzPC9oMj4KIDxwPlRoaXMgc29mdHdhcmUgcmVsZWFzZSBpcyBjb21wYXRpYmxlIHdpdGg6PC9wPgogPHA+U1RNMzJDdWJlTVggVjUuMi4wPC9wPgogPC9kaXY+CkBAIC0xOTEsNyArMjczLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xIiAgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMSIgYXJpYS1oaWRkZW49InRydWUiPlYxLjAuMCAvIDA2LUZlYnJ1YXJ5LTIwMTk8L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTIiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0zIj5NYWluIENoYW5nZXM8L2gyPgogPGgzIGlkPSJmaXJzdC1yZWxlYXNlIj5GaXJzdCByZWxlYXNlPC9oMz4KIDxwPkZpcnN0IG9mZmljaWFsIHJlbGVhc2Ugb2YgSEFMIChIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllcikgYW5kIExMIChMb3cgbGF5ZXJzKSBkcml2ZXJzIHRvIHN1cHBvcnQgU1RNMzJXQjU1eHguPC9wPgogPC9kaXY+CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJ3Ynh4X2hhbC5jIGIvU3JjL3N0bTMyd2J4eF9oYWwuYwppbmRleCAzZDRjZTAxLi44NTEzY2I3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJ3Ynh4X2hhbC5jCisrKyBiL1NyYy9zdG0zMndieHhfaGFsLmMKQEAgLTU2LDcgKzU2LDcgQEAKICAqIEBicmllZiBTVE0zMldCeHggSEFMIERyaXZlciB2ZXJzaW9uIG51bWJlcgogICAgKi8KICNkZWZpbmUgX19TVE0zMldCeHhfSEFMX1ZFUlNJT05fTUFJTiAgICgweDAxVSkgLyohPCBbMzE6MjRdIG1haW4gdmVyc2lvbiAqLwotI2RlZmluZSBfX1NUTTMyV0J4eF9IQUxfVkVSU0lPTl9TVUIxICAgKDB4MDJVKSAvKiE8IFsyMzoxNl0gc3ViMSB2ZXJzaW9uICovCisjZGVmaW5lIF9fU1RNMzJXQnh4X0hBTF9WRVJTSU9OX1NVQjEgICAoMHgwM1UpIC8qITwgWzIzOjE2XSBzdWIxIHZlcnNpb24gKi8KICNkZWZpbmUgX19TVE0zMldCeHhfSEFMX1ZFUlNJT05fU1VCMiAgICgweDAwVSkgLyohPCBbMTU6OF0gIHN1YjIgdmVyc2lvbiAqLwogI2RlZmluZSBfX1NUTTMyV0J4eF9IQUxfVkVSU0lPTl9SQyAgICAgKDB4MDBVKSAvKiE8IFs3OjBdICByZWxlYXNlIGNhbmRpZGF0ZSAqLwogI2RlZmluZSBfX1NUTTMyV0J4eF9IQUxfVkVSU0lPTiAgICAgICAgICgoX19TVE0zMldCeHhfSEFMX1ZFUlNJT05fTUFJTiA8PCAyNFUpXApAQCAtNjQsNyArNjQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMldCeHhfSEFMX1ZFUlNJT05fU1VCMiA8PCA4VSApXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMldCeHhfSEFMX1ZFUlNJT05fUkMpKQogCisjaWYgZGVmaW5lZChWUkVGQlVGKQogI2RlZmluZSBWUkVGQlVGX1RJTUVPVVRfVkFMVUUgICAgIDEwVSAgIC8qIDEwIG1zICovCisjZW5kaWYKIAogLyoqCiAgICogQH0KQEAgLTcwMCw3ICs3MDIsNyBAQAogewogICBMTF9WUkVGQlVGX0Rpc2FibGUoKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIFZSRUZCVUYgKi8KIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIEkvTyBhbmFsb2cgc3dpdGNoIHZvbHRhZ2UgYm9vc3RlcgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyd2J4eF9oYWxfY3J5cC5jIGIvU3JjL3N0bTMyd2J4eF9oYWxfY3J5cC5jCmluZGV4IDBhYTFiMDAuLmZhYjc1ZDQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMndieHhfaGFsX2NyeXAuYworKysgYi9TcmMvc3RtMzJ3Ynh4X2hhbF9jcnlwLmMKQEAgLTE2MSwxOCArMTYxLDE4IEBACiAgICAgICAgICAgR0NNIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IGNpcGhlcnRleHQgaGFzIHNhbWUgYml0IGxlbmd0aCBhcyB0aGUgcGxhaW50ZXh0LgogICAgICAgICAgKCMjKSBUaGUgbGFzdCBibG9jayBpcyBjb21wb3NlZCBvZiB0aGUgbGVuZ3RoIG9mIEEgKG9uIDY0IGJpdHMpIGFuZCB0aGUgbGVuZ3RoIG9mIGNpcGhlcnRleHQKICAgICAgICAgICAob24gNjQgYml0cykKLSAgICAgICAgICAKLSAgICBbLi5dICBBIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIEdDTSBtZXNzYWdlIHN0cnVjdHVyZSBpcyBhdmFpbGFibGUgYmVsb3cuICAgICAgICAgCisKKyAgICBbLi5dICBBIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIEdDTSBtZXNzYWdlIHN0cnVjdHVyZSBpcyBhdmFpbGFibGUgYmVsb3cuCiAKICAgICBbLi5dICBUaGlzIHNlY3Rpb24gZGVzY3JpYmUgVGhlIEFFUyBDb3VudGVyIHdpdGggQ2lwaGVyIEJsb2NrIENoYWluaW5nLU1lc3NhZ2UKICAgICAgICAgICBBdXRoZW50aWNhdGlvbiBDb2RlIChDQ00pIHN1cHBvcnRlZCBieSBib3RoIENSWVAxIGFuZCBUaW55QUVTIHBlcmlwaGVyYWw6CiAgICAgICAoIykgIFNwZWNpZmljIHBhcmFtZXRlcnMgZm9yIENDTSAgOgogCiAgICAgICAgICAoIyMpIEIwIGJsb2NrICA6IGZvbGxvd3MgTklTVCBTcGVjaWFsIFB1YmxpY2F0aW9uIDgwMC0zOEMsCi0gICAgICAgICAoIyMpIEIxIGJsb2NrIChoZWFkZXIpIAorICAgICAgICAgKCMjKSBCMSBibG9jayAoaGVhZGVyKQogICAgICAgICAgKCMjKSBDVFJ4IGJsb2NrICA6IGNvbnRyb2wgYmxvY2tzCi0gICAgICAgICAgICAgCi0gICAgWy4uXSAgQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgQ0NNIG1lc3NhZ2Ugc3RydWN0dXJlIGlzIGF2YWlsYWJsZSBiZWxvdy4gICAgICAgICAgICAgCisKKyAgICBbLi5dICBBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBDQ00gbWVzc2FnZSBzdHJ1Y3R1cmUgaXMgYXZhaWxhYmxlIGJlbG93LgogCiAgICAgICAoIykgIEZvdXIgcGhhc2VzIGFyZSBwZXJmb3JtZWQgaW4gQ0NNIGZvciBDUllQMSBwZXJpcGhlcmFsOgogICAgICAgICAgKCMjKSBJbml0IHBoYXNlOiBwZXJpcGhlcmFsIHByZXBhcmVzIHRoZSBHQ00gaGFzaCBzdWJrZXkgKEgpIGFuZCBkbyB0aGUgSVYgcHJvY2Vzc2luZwpAQCAtMTg5LDEzICsxODksMTUgQEAKICAgICAgICAgICgjIykgRmluYWwgcGhhc2U6IHBlcmlwaGVyYWwgZ2VuZXJhdGVzIHRoZSBhdXRoZW50aWNhdGVkIHRhZyAoVCkgdXNpbmcgdGhlIGxhc3QgYmxvY2sgb2YgZGF0YS4KIAogICAqKiogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uICoqKgotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorICBbLi5dCiAgIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgIFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgogICBVc2UgRnVuY3Rpb25zIEByZWYgSEFMX0NSWVBfUmVnaXN0ZXJDYWxsYmFjaygpIG9yIEhBTF9DUllQX1JlZ2lzdGVyWFhYQ2FsbGJhY2soKQogICB0byByZWdpc3RlciBhbiBpbnRlcnJ1cHQgY2FsbGJhY2suCiAKKyAgWy4uXQogICBGdW5jdGlvbiBAcmVmIEhBTF9DUllQX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAoKykgSW5DcGx0Q2FsbGJhY2sgICAgIDogIElucHV0IEZJRk8gdHJhbnNmZXIgY29tcGxldGVkIGNhbGxiYWNrLgogICAgICgrKSBPdXRDcGx0Q2FsbGJhY2sgICAgOiBPdXRwdXQgRklGTyB0cmFuc2ZlciBjb21wbGV0ZWQgY2FsbGJhY2suCkBAIC0yMDUsNiArMjA3LDcgQEAKICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCisgIFsuLl0KICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX0NSWVBfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAogICB3ZWFrIGZ1bmN0aW9uLgogICBAcmVmIEhBTF9DUllQX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKQEAgLTIxNiw2ICsyMTksNyBAQAogICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBDUllQIE1zcEluaXQuCiAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICA6IENSWVAgTXNwRGVJbml0LgogCisgIFsuLl0KICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX0NSWVBfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfQ1JZUF9TVEFURV9SRVNFVAogICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMgOgogICBleGFtcGxlcyBAcmVmIEhBTF9DUllQX0luQ3BsdENhbGxiYWNrKCkgLCBAcmVmIEhBTF9DUllQX091dENwbHRDYWxsYmFjaygpLgpAQCAtMjI1LDYgKzIyOSw3IEBACiAgIGlmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfQ1JZUF9Jbml0KCkgLyBAcmVmIEhBTF9DUllQX0RlSW5pdCgpCiAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBmdW5jdGlvbnMgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkKIAorICBbLi5dCiAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gSEFMX0NSWVBfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KICAgRXhjZXB0aW9uIGRvbmUgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkCiAgIGluIEhBTF9DUllQX1NUQVRFX1JFQURZIG9yIEhBTF9DUllQX1NUQVRFX1JFU0VUIHN0YXRlLApAQCAtMjMzLDE0ICsyMzgsMTYgQEAKICAgdXNpbmcgQHJlZiBIQUxfQ1JZUF9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfQ1JZUF9EZUluaXQoKQogICBvciBAcmVmIEhBTF9DUllQX0luaXQoKSBmdW5jdGlvbi4KIAorICBbLi5dCiAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBhbmQgYWxsIGNhbGxiYWNrcwogICBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zLgogCiAKICAgKioqIFN1c3BlbmQvUmVzdW1lIGZlYXR1cmUgKioqCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorICBbLi5dCiAgIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9DUllQX1NVU1BFTkRfUkVTVU1FIHdoZW4gc2V0IHRvIDEKICAgYWxsb3dzIHRoZSB1c2VyIHRvIHJlc29ydCB0byB0aGUgc3VzcGVuZC9yZXN1bWUgZmVhdHVyZS4KICAgQSBsb3cgcHJpb3JpdHkgYmxvY2sgcHJvY2Vzc2luZyBjYW4gYmUgc3VzcGVuZGVkIHRvIHByb2Nlc3MgYSBoaWdoIHByaW9yaXR5IGJsb2NrCkBAIC05MTUsMTEgKzkyMiwxNSBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NSWVBfU3VzcGVuZChDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwKQogeworICBIQUxfQ1JZUF9TVEFURVR5cGVEZWYgc3RhdGU7CisKICAgLyogUmVxdWVzdCBzdXNwZW5zaW9uICovCiAgIEhBTF9DUllQX1Byb2Nlc3NTdXNwZW5kKGhjcnlwKTsKIAotICB3aGlsZSAoKEhBTF9DUllQX0dldFN0YXRlKGhjcnlwKSAhPSBIQUxfQ1JZUF9TVEFURV9TVVNQRU5ERUQpICYmIFwKLSAgICAgICAgICAoSEFMX0NSWVBfR2V0U3RhdGUoaGNyeXApICE9IEhBTF9DUllQX1NUQVRFX1JFQURZKSk7CisgIGRvCisgIHsKKyAgICBzdGF0ZSA9IEhBTF9DUllQX0dldFN0YXRlKGhjcnlwKTsKKyAgfSB3aGlsZSAoKHN0YXRlICE9IEhBTF9DUllQX1NUQVRFX1NVU1BFTkRFRCkgJiYgKHN0YXRlICE9IEhBTF9DUllQX1NUQVRFX1JFQURZKSk7CiAKICAgaWYgKEhBTF9DUllQX0dldFN0YXRlKGhjcnlwKSA9PSBIQUxfQ1JZUF9TVEFURV9SRUFEWSkKICAgewpAQCAtOTUzLDcgKzk2NCw3IEBACiAgICAgaGNyeXAtPkNyeXBPdXRDb3VudF9zYXZlZCAgICAgID0gaGNyeXAtPkNyeXBPdXRDb3VudDsKICAgICBoY3J5cC0+UGhhc2Vfc2F2ZWQgICAgICAgICAgICAgPSBoY3J5cC0+UGhhc2U7CiAgICAgaGNyeXAtPlN0YXRlX3NhdmVkICAgICAgICAgICAgID0gaGNyeXAtPlN0YXRlOwotICAgIGhjcnlwLT5TaXplX3NhdmVkICAgICAgICAgICAgICA9ICggKGhjcnlwLT5Jbml0LkRhdGFXaWR0aFVuaXQgPT0gQ1JZUF9EQVRBV0lEVEhVTklUX1dPUkQpID8gaGNyeXAtPlNpemUgLzQgOiBoY3J5cC0+U2l6ZSk7CisgICAgaGNyeXAtPlNpemVfc2F2ZWQgICAgICAgICAgICAgID0gKCAoaGNyeXAtPkluaXQuRGF0YVdpZHRoVW5pdCA9PSBDUllQX0RBVEFXSURUSFVOSVRfV09SRCkgPyAoaGNyeXAtPlNpemUgLzRVKSA6IGhjcnlwLT5TaXplKTsKICAgICBoY3J5cC0+QXV0b0tleURlcml2YXRpb25fc2F2ZWQgPSBoY3J5cC0+QXV0b0tleURlcml2YXRpb247CiAgICAgaGNyeXAtPkNyeXBIZWFkZXJDb3VudF9zYXZlZCAgID0gaGNyeXAtPkNyeXBIZWFkZXJDb3VudDsKICAgICBoY3J5cC0+U3VzcGVuZFJlcXVlc3QgICAgICAgICAgPSBIQUxfQ1JZUF9TVVNQRU5EX05PTkU7CkBAIC05ODMsNiArOTk0LDEyIEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfQ1JZUF9SZXN1bWUoQ1JZUF9IYW5kbGVUeXBlRGVmICpoY3J5cCkKIHsKKyAgLyogQ2hlY2sgdGhlIENSWVAgaGFuZGxlIGFsbG9jYXRpb24gKi8KKyAgaWYgKGhjcnlwID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKICAgaWYgKGhjcnlwLT5TdGF0ZV9zYXZlZCAhPSBIQUxfQ1JZUF9TVEFURV9TVVNQRU5ERUQpCiAgIHsKICAgICAvKiBDUllQIHdhcyBub3Qgc3VzcGVuZGVkICovCkBAIC0xMDA5LDEwICsxMDI2LDcgQEAKICAgICAgICAgaGNyeXAtPkluaXQucEluaXRWZWN0ICAgICA9IGhjcnlwLT5JVl9zYXZlZDsKICAgICAgIH0KICAgICAgIF9fSEFMX0NSWVBfRElTQUJMRShoY3J5cCk7Ci0gICAgICBpZiAoSEFMX0NSWVBfSW5pdChoY3J5cCkgIT0gSEFMX09LKQotICAgICAgewotICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgICAgfQorICAgICAgKHZvaWQpIEhBTF9DUllQX0luaXQoaGNyeXApOwogICAgIH0KICAgICBlbHNlICAgIC8qIEF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMgY2FzZSAqLwogICAgIHsKQEAgLTExODAsNiArMTE5NCwxMiBAQAogewogICB1aW50MzJfdCBhbGdvOwogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CisjaWZkZWYgIFVTRV9GVUxMX0FTU0VSVAorICB1aW50MzJfdCBhbGdvX2Fzc2VydCA9IChoY3J5cC0+SW5zdGFuY2UtPkNSKSAmIEFFU19DUl9DSE1PRDsKKworICAvKiBDaGVjayBpbnB1dCBidWZmZXIgc2l6ZSAqLworICBhc3NlcnRfcGFyYW0oSVNfQ1JZUF9CVUZGRVJTSVpFKGFsZ29fYXNzZXJ0LCBoY3J5cC0+SW5pdC5EYXRhV2lkdGhVbml0LCBTaXplKSk7CisjZW5kaWYKIAogICBpZiAoaGNyeXAtPlN0YXRlID09IEhBTF9DUllQX1NUQVRFX1JFQURZKQogICB7CkBAIC0xMjc0LDYgKzEyOTQsMTIgQEAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwogICB1aW50MzJfdCBhbGdvOworI2lmZGVmICBVU0VfRlVMTF9BU1NFUlQKKyAgdWludDMyX3QgYWxnb19hc3NlcnQgPSAoaGNyeXAtPkluc3RhbmNlLT5DUikgJiBBRVNfQ1JfQ0hNT0Q7CisKKyAgLyogQ2hlY2sgaW5wdXQgYnVmZmVyIHNpemUgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0NSWVBfQlVGRkVSU0laRShhbGdvX2Fzc2VydCwgaGNyeXAtPkluaXQuRGF0YVdpZHRoVW5pdCwgU2l6ZSkpOworI2VuZGlmCiAKICAgaWYgKGhjcnlwLT5TdGF0ZSA9PSBIQUxfQ1JZUF9TVEFURV9SRUFEWSkKICAgewpAQCAtMTM2Nyw2ICsxMzkzLDEyIEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKICAgdWludDMyX3QgYWxnbzsKKyNpZmRlZiAgVVNFX0ZVTExfQVNTRVJUCisgIHVpbnQzMl90IGFsZ29fYXNzZXJ0ID0gKGhjcnlwLT5JbnN0YW5jZS0+Q1IpICYgQUVTX0NSX0NITU9EOworCisgIC8qIENoZWNrIGlucHV0IGJ1ZmZlciBzaXplICovCisgIGFzc2VydF9wYXJhbShJU19DUllQX0JVRkZFUlNJWkUoYWxnb19hc3NlcnQsIGhjcnlwLT5Jbml0LkRhdGFXaWR0aFVuaXQsIFNpemUpKTsKKyNlbmRpZgogCiAgIGlmIChoY3J5cC0+U3RhdGUgPT0gSEFMX0NSWVBfU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTEzODMsOCArMTQxNSw4IEBACiAgICAgIGhjcnlwLT5SZXN1bWluZ0ZsYWcgPSAwVTsKICAgICAgaWYgKGhjcnlwLT5QaGFzZSAhPSBDUllQX1BIQVNFX0hFQURFUl9TVVNQRU5ERUQpCiAgICAgIHsKLSAgICAgICBoY3J5cC0+Q3J5cEluQ291bnQgPSBoY3J5cC0+Q3J5cEluQ291bnRfc2F2ZWQ7Ci0gICAgICAgaGNyeXAtPkNyeXBPdXRDb3VudCA9IGhjcnlwLT5DcnlwT3V0Q291bnRfc2F2ZWQ7CisgICAgICAgaGNyeXAtPkNyeXBJbkNvdW50ID0gKHVpbnQxNl90KSBoY3J5cC0+Q3J5cEluQ291bnRfc2F2ZWQ7CisgICAgICAgaGNyeXAtPkNyeXBPdXRDb3VudCA9ICh1aW50MTZfdCkgaGNyeXAtPkNyeXBPdXRDb3VudF9zYXZlZDsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKQEAgLTE0NzEsNiArMTUwMywxMiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CiAgIHVpbnQzMl90IGFsZ287CisjaWZkZWYgIFVTRV9GVUxMX0FTU0VSVAorICB1aW50MzJfdCBhbGdvX2Fzc2VydCA9IChoY3J5cC0+SW5zdGFuY2UtPkNSKSAmIEFFU19DUl9DSE1PRDsKKworICAvKiBDaGVjayBpbnB1dCBidWZmZXIgc2l6ZSAqLworICBhc3NlcnRfcGFyYW0oSVNfQ1JZUF9CVUZGRVJTSVpFKGFsZ29fYXNzZXJ0LCBoY3J5cC0+SW5pdC5EYXRhV2lkdGhVbml0LCBTaXplKSk7CisjZW5kaWYKIAogICBpZiAoaGNyeXAtPlN0YXRlID09IEhBTF9DUllQX1NUQVRFX1JFQURZKQogICB7CkBAIC0xNDg3LDggKzE1MjUsOCBAQAogICAgICBoY3J5cC0+UmVzdW1pbmdGbGFnID0gMFU7CiAgICAgIGlmIChoY3J5cC0+UGhhc2UgIT0gQ1JZUF9QSEFTRV9IRUFERVJfU1VTUEVOREVEKQogICAgICB7Ci0gICAgICAgaGNyeXAtPkNyeXBJbkNvdW50ID0gaGNyeXAtPkNyeXBJbkNvdW50X3NhdmVkOwotICAgICAgIGhjcnlwLT5DcnlwT3V0Q291bnQgPSBoY3J5cC0+Q3J5cE91dENvdW50X3NhdmVkOworICAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCA9ICh1aW50MTZfdCkgaGNyeXAtPkNyeXBJbkNvdW50X3NhdmVkOworICAgICAgIGhjcnlwLT5DcnlwT3V0Q291bnQgPSAodWludDE2X3QpIGhjcnlwLT5DcnlwT3V0Q291bnRfc2F2ZWQ7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CkBAIC0xNTc1LDYgKzE2MTMsMTIgQEAKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwogICB1aW50MzJfdCBhbGdvOwogICB1aW50MzJfdCBEb0tleUlWQ29uZmlnID0gMVU7IC8qIEJ5IGRlZmF1bHQsIGNhcnJ5IG91dCBwZXJpcGhlcmFsIEtleSBhbmQgSVYgY29uZmlndXJhdGlvbiAqLworI2lmZGVmICBVU0VfRlVMTF9BU1NFUlQKKyAgdWludDMyX3QgYWxnb19hc3NlcnQgPSAoaGNyeXAtPkluc3RhbmNlLT5DUikgJiBBRVNfQ1JfQ0hNT0Q7CisKKyAgLyogQ2hlY2sgaW5wdXQgYnVmZmVyIHNpemUgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0NSWVBfQlVGRkVSU0laRShhbGdvX2Fzc2VydCwgaGNyeXAtPkluaXQuRGF0YVdpZHRoVW5pdCwgU2l6ZSkpOworI2VuZGlmCiAKICAgaWYgKGhjcnlwLT5TdGF0ZSA9PSBIQUxfQ1JZUF9TVEFURV9SRUFEWSkKICAgewpAQCAtMTY5NSw2ICsxNzM5LDEyIEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKICAgdWludDMyX3QgYWxnbzsKKyNpZmRlZiAgVVNFX0ZVTExfQVNTRVJUCisgIHVpbnQzMl90IGFsZ29fYXNzZXJ0ID0gKGhjcnlwLT5JbnN0YW5jZS0+Q1IpICYgQUVTX0NSX0NITU9EOworCisgIC8qIENoZWNrIGlucHV0IGJ1ZmZlciBzaXplICovCisgIGFzc2VydF9wYXJhbShJU19DUllQX0JVRkZFUlNJWkUoYWxnb19hc3NlcnQsIGhjcnlwLT5Jbml0LkRhdGFXaWR0aFVuaXQsIFNpemUpKTsKKyNlbmRpZgogCiAgIGlmIChoY3J5cC0+U3RhdGUgPT0gSEFMX0NSWVBfU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTUwMTUsNyArNTA2NSw3IEBACiAgIF9fSU8gdWludDMyX3QgY291bnQgPSAwVTsKIAogICAvKiBJbiBjYXNlIG9mIEdDTSBwYXlsb2FkIHBoYXNlIGVuY3J5cHRpb24sIGNoZWNrIHRoYXQgc3VzcGVuc2lvbiBjYW4gYmUgY2FycmllZCBvdXQgKi8KLSAgaWYgKFJFQURfQklUKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIChBRVNfQ1JfQ0hNT0R8QUVTX0NSX0dDTVBIfEFFU19DUl9NT0RFKSkgPT0gKENSWVBfQUVTX0dDTV9HTUFDfEFFU19DUl9HQ01QSF8xfDB4MCkpCisgIGlmIChSRUFEX0JJVChoY3J5cC0+SW5zdGFuY2UtPkNSLCAoQUVTX0NSX0NITU9EfEFFU19DUl9HQ01QSHxBRVNfQ1JfTU9ERSkpID09IChDUllQX0FFU19HQ01fR01BQ3xBRVNfQ1JfR0NNUEhfMXwweDBVKSkKICAgewogCiAgICAgICAvKiBXYWl0IGZvciBCVVNZIGZsYWcgdG8gYmUgY2xlYXJlZCAqLwpAQCAtNTE1MywyMSArNTIwMywyMSBAQAogICBpZiAoS2V5U2l6ZSA9PSBDUllQX0tFWVNJWkVfMjU2QikKICAgewogICAgIGhjcnlwLT5JbnN0YW5jZS0+S0VZUjcgPSAqKHVpbnQzMl90Kikoa2V5YWRkcik7Ci0gICAga2V5YWRkcis9NDsKKyAgICBrZXlhZGRyKz00VTsKICAgICBoY3J5cC0+SW5zdGFuY2UtPktFWVI2ID0gKih1aW50MzJfdCopKGtleWFkZHIpOwotICAgIGtleWFkZHIrPTQ7CisgICAga2V5YWRkcis9NFU7CiAgICAgaGNyeXAtPkluc3RhbmNlLT5LRVlSNSA9ICoodWludDMyX3QqKShrZXlhZGRyKTsKLSAgICBrZXlhZGRyKz00OworICAgIGtleWFkZHIrPTRVOwogICAgIGhjcnlwLT5JbnN0YW5jZS0+S0VZUjQgPSAqKHVpbnQzMl90Kikoa2V5YWRkcik7Ci0gICAga2V5YWRkcis9NDsKKyAgICBrZXlhZGRyKz00VTsKICAgfQogCiAgICAgaGNyeXAtPkluc3RhbmNlLT5LRVlSMyA9ICoodWludDMyX3QqKShrZXlhZGRyKTsKLSAgICBrZXlhZGRyKz00OworICAgIGtleWFkZHIrPTRVOwogICAgIGhjcnlwLT5JbnN0YW5jZS0+S0VZUjIgPSAqKHVpbnQzMl90Kikoa2V5YWRkcik7Ci0gICAga2V5YWRkcis9NDsKKyAgICBrZXlhZGRyKz00VTsKICAgICBoY3J5cC0+SW5zdGFuY2UtPktFWVIxID0gKih1aW50MzJfdCopKGtleWFkZHIpOwotICAgIGtleWFkZHIrPTQ7CisgICAga2V5YWRkcis9NFU7CiAgICAgaGNyeXAtPkluc3RhbmNlLT5LRVlSMCA9ICoodWludDMyX3QqKShrZXlhZGRyKTsKIH0KIApAQCAtNTE3OSw5ICs1MjI5LDEwIEBACiAgICovCiBzdGF0aWMgdm9pZCBDUllQX1BoYXNlUHJvY2Vzc2luZ1Jlc3VtZShDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwKQogewotICB1aW50MzJfdCBsb29wY291bnRlciA9IDBVOwotICB1aW50MzJfdCBsYXN0d29yZHNpemUgPTA7Ci0gIHVpbnQzMl90IG5wYmxiID0gMFUgOworICB1aW50MzJfdCBsb29wY291bnRlcjsKKyAgdWludDE2X3QgbGFzdHdvcmRzaXplOworICB1aW50MTZfdCBucGJsYjsKKyAgdWludDMyX3QgY3JfdGVtcDsKIAogICAvKiBDYXNlIG9mIGhlYWRlciBwaGFzZSByZXN1bXB0aW9uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogICBpZiAoaGNyeXAtPlBoYXNlID09IENSWVBfUEhBU0VfSEVBREVSX1NVU1BFTkRFRCkKQEAgLTUxOTIsNyArNTI0Myw3IEBACiAgICAgLyogU2VsZWN0IGhlYWRlciBwaGFzZSAqLwogICAgIENSWVBfU0VUX1BIQVNFKGhjcnlwLCBDUllQX1BIQVNFX0hFQURFUik7CiAKLSAgICBpZiAoKChoY3J5cC0+SW5pdC5IZWFkZXJTaXplKSAtIChoY3J5cC0+Q3J5cEhlYWRlckNvdW50KSA+PSA0VSkpCisgICAgaWYgKCgoKGhjcnlwLT5Jbml0LkhlYWRlclNpemUpIC0gKGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpKSA+PSA0VSkpCiAgICAgewogICAgICAgLyogV3JpdGUgdGhlIGlucHV0IGJsb2NrIGluIHRoZSBJTiBGSUZPICovCiAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50ICk7CkBAIC01MjIxLDczICs1MjcyLDc3IEBACiAgICAgfQogICB9CiAgIC8qIENhc2Ugb2YgcGF5bG9hZCBwaGFzZSByZXN1bXB0aW9uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotICBlbHNlIGlmIChoY3J5cC0+UGhhc2UgPT0gQ1JZUF9QSEFTRV9QQVlMT0FEX1NVU1BFTkRFRCkKKyAgZWxzZQogICB7Ci0KLSAgICAvKiBTZXQgdGhlIHBoYXNlICovCi0gICAgaGNyeXAtPlBoYXNlID0gQ1JZUF9QSEFTRV9QUk9DRVNTOwotCi0gICAvKiBTZWxlY3QgcGF5bG9hZCBwaGFzZSBvbmNlIHRoZSBoZWFkZXIgcGhhc2UgaXMgcGVyZm9ybWVkICovCi0gICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIEFFU19DUl9HQ01QSCwgQ1JZUF9QSEFTRV9QQVlMT0FEKTsKLQotICAgLyogU2V0IHRvIDAgdGhlIG51bWJlciBvZiBub24tdmFsaWQgYnl0ZXMgdXNpbmcgTlBCTEIgcmVnaXN0ZXIqLwotICAgTU9ESUZZX1JFRyhoY3J5cC0+SW5zdGFuY2UtPkNSLCBBRVNfQ1JfTlBCTEIsIDBVKTsKLQotICAgIGlmICgoaGNyeXAtPlNpemUvNCkgLSAoaGNyeXAtPkNyeXBJbkNvdW50KSA+PSA0VSkKKyAgICBpZiAoaGNyeXAtPlBoYXNlID09IENSWVBfUEhBU0VfUEFZTE9BRF9TVVNQRU5ERUQpCiAgICAgewotICAgICAgLyogV3JpdGUgdGhlIGlucHV0IGJsb2NrIGluIHRoZSBJTiBGSUZPICovCi0gICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBJbkJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cEluQ291bnQgKTsKLSAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCsrOwotICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SICA9ICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwSW5CdWZmUHRyICsgaGNyeXAtPkNyeXBJbkNvdW50ICk7Ci0gICAgICBoY3J5cC0+Q3J5cEluQ291bnQrKzsKLSAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiAgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cEluQnVmZlB0ciArIGhjcnlwLT5DcnlwSW5Db3VudCApOwotICAgICAgaGNyeXAtPkNyeXBJbkNvdW50Kys7Ci0gICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBJbkJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cEluQ291bnQgKTsKLSAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCsrOwotICAgICAgaWYoKGhjcnlwLT5DcnlwSW5Db3VudCA9PSAgaGNyeXAtPlNpemUpICYmIChoY3J5cC0+SW5pdC5BbGdvcml0aG0gPT0gQ1JZUF9BRVNfR0NNX0dNQUMpKQotICAgICAgewotICAgICAgICAvKiBDYWxsIG91dHB1dCB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLwotI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgICAgIC8qQ2FsbCByZWdpc3RlcmVkIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KLSAgICAgICAgaGNyeXAtPkluQ3BsdENhbGxiYWNrKGhjcnlwKTsKLSNlbHNlCi0gICAgICAgIC8qQ2FsbCBsZWdhY3kgd2VhayBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCi0gICAgICAgIEhBTF9DUllQX0luQ3BsdENhbGxiYWNrKGhjcnlwKTsKLSNlbmRpZiAvKiBVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTICovCi0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgLyogTGFzdCBibG9jayBvZiBwYXlsb2FkIDwgMTI4Yml0Ki8KLSAgICB7Ci0gICAgICAvKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBpbiBsYXN0IGJsb2NrIG9mIHBheWxvYWQgKi8KLSAgICAgIG5wYmxiID0gKChoY3J5cC0+U2l6ZS8xNlUpKzFVKSoxNlUtIChoY3J5cC0+U2l6ZSk7Ci0gICAgICBpZigoKChoY3J5cC0+SW5zdGFuY2UtPkNSICYgQUVTX0NSX01PREUpID09IENSWVBfT1BFUkFUSU5HTU9ERV9FTkNSWVBUKSAmJiAoaGNyeXAtPkluaXQuQWxnb3JpdGhtID09IENSWVBfQUVTX0dDTV9HTUFDKSkgfHwKLSAgICAgICAgICgoKGhjcnlwLT5JbnN0YW5jZS0+Q1IgJiBBRVNfQ1JfTU9ERSkgPT0gQ1JZUF9PUEVSQVRJTkdNT0RFX0RFQ1JZUFQpICYmIChoY3J5cC0+SW5pdC5BbGdvcml0aG0gPT0gQ1JZUF9BRVNfQ0NNKSkpCi0gICAgICB7Ci0gICAgICAgIC8qIFNwZWNpZnkgdGhlIG51bWJlciBvZiBub24tdmFsaWQgYnl0ZXMgdXNpbmcgTlBCTEIgcmVnaXN0ZXIqLwotICAgICAgICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIEFFU19DUl9OUEJMQiwgbnBibGI8PCAyMFUpOwotICAgICAgfQogCi0gICAgICAvKiBOdW1iZXIgb2YgdmFsaWQgd29yZHMgKGxhc3R3b3Jkc2l6ZSkgaW4gbGFzdCBibG9jayAqLwotICAgICAgaWYgKG5wYmxiICUgNFUgPT0wVSkKLSAgICAgIHsKLSAgICAgICAgbGFzdHdvcmRzaXplID0gKDE2VS1ucGJsYikvNFU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGxhc3R3b3Jkc2l6ZSA9ICgxNlUtbnBibGIpLzRVICsxVTsKLSAgICAgIH0KKyAgICAgIC8qIFNldCB0aGUgcGhhc2UgKi8KKyAgICAgIGhjcnlwLT5QaGFzZSA9IENSWVBfUEhBU0VfUFJPQ0VTUzsKIAotICAgICAgLyogIExhc3QgYmxvY2sgb3B0aW9uYWxseSBwYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyovCi0gICAgICBmb3IobG9vcGNvdW50ZXIgPSAwVTsgbG9vcGNvdW50ZXIgPCBsYXN0d29yZHNpemU7IGxvb3Bjb3VudGVyKyspCisgICAgICAvKiBTZWxlY3QgcGF5bG9hZCBwaGFzZSBvbmNlIHRoZSBoZWFkZXIgcGhhc2UgaXMgcGVyZm9ybWVkICovCisgICAgICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIEFFU19DUl9HQ01QSCwgQ1JZUF9QSEFTRV9QQVlMT0FEKTsKKworICAgICAgLyogU2V0IHRvIDAgdGhlIG51bWJlciBvZiBub24tdmFsaWQgYnl0ZXMgdXNpbmcgTlBCTEIgcmVnaXN0ZXIqLworICAgICAgTU9ESUZZX1JFRyhoY3J5cC0+SW5zdGFuY2UtPkNSLCBBRVNfQ1JfTlBCTEIsIDBVKTsKKworICAgICAgaWYgKCgoaGNyeXAtPlNpemUvNFUpIC0gKGhjcnlwLT5DcnlwSW5Db3VudCkpID49IDRVKQogICAgICAgewotICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cEluQnVmZlB0ciArIGhjcnlwLT5DcnlwSW5Db3VudCApOworICAgICAgICAvKiBXcml0ZSB0aGUgaW5wdXQgYmxvY2sgaW4gdGhlIElOIEZJRk8gKi8KKyAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SICA9ICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwSW5CdWZmUHRyICsgaGNyeXAtPkNyeXBJbkNvdW50ICk7CiAgICAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCsrOworICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBJbkJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cEluQ291bnQgKTsKKyAgICAgICAgaGNyeXAtPkNyeXBJbkNvdW50Kys7CisgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiAgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cEluQnVmZlB0ciArIGhjcnlwLT5DcnlwSW5Db3VudCApOworICAgICAgICBoY3J5cC0+Q3J5cEluQ291bnQrKzsKKyAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SICA9ICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwSW5CdWZmUHRyICsgaGNyeXAtPkNyeXBJbkNvdW50ICk7CisgICAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCsrOworICAgICAgICBpZigoaGNyeXAtPkNyeXBJbkNvdW50ID09ICBoY3J5cC0+U2l6ZSkgJiYgKGhjcnlwLT5Jbml0LkFsZ29yaXRobSA9PSBDUllQX0FFU19HQ01fR01BQykpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBDYWxsIG91dHB1dCB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0NSWVBfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgICAgICAgICAgLypDYWxsIHJlZ2lzdGVyZWQgSW5wdXQgY29tcGxldGUgY2FsbGJhY2sqLworICAgICAgICAgIGhjcnlwLT5JbkNwbHRDYWxsYmFjayhoY3J5cCk7CisjZWxzZQorICAgICAgICAgIC8qQ2FsbCBsZWdhY3kgd2VhayBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgICAgICAgSEFMX0NSWVBfSW5DcGx0Q2FsbGJhY2soaGNyeXApOworI2VuZGlmIC8qIFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICAgICAgfQogICAgICAgfQotICAgICAgd2hpbGUobG9vcGNvdW50ZXIgPCA0VSApCisgICAgICBlbHNlIC8qIExhc3QgYmxvY2sgb2YgcGF5bG9hZCA8IDEyOGJpdCovCiAgICAgICB7Ci0gICAgICAgIC8qIHBhZCB0aGUgZGF0YSB3aXRoIHplcm9zIHRvIGhhdmUgYSBjb21wbGV0ZSBibG9jayAqLwotICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAweDBVOwotICAgICAgICBsb29wY291bnRlcisrOworICAgICAgICAvKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBpbiBsYXN0IGJsb2NrIG9mIHBheWxvYWQgKi8KKyAgICAgICAgbnBibGIgPSAoKChoY3J5cC0+U2l6ZS8xNlUpKzFVKSoxNlUpIC0gKGhjcnlwLT5TaXplKTsKKyAgICAgICAgY3JfdGVtcCA9IGhjcnlwLT5JbnN0YW5jZS0+Q1I7CisgICAgICAgIGlmKCgoKGNyX3RlbXAgJiBBRVNfQ1JfTU9ERSkgPT0gQ1JZUF9PUEVSQVRJTkdNT0RFX0VOQ1JZUFQpICYmIChoY3J5cC0+SW5pdC5BbGdvcml0aG0gPT0gQ1JZUF9BRVNfR0NNX0dNQUMpKSB8fAorICAgICAgICAgICAoKChjcl90ZW1wJiBBRVNfQ1JfTU9ERSkgPT0gQ1JZUF9PUEVSQVRJTkdNT0RFX0RFQ1JZUFQpICYmIChoY3J5cC0+SW5pdC5BbGdvcml0aG0gPT0gQ1JZUF9BRVNfQ0NNKSkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBTcGVjaWZ5IHRoZSBudW1iZXIgb2Ygbm9uLXZhbGlkIGJ5dGVzIHVzaW5nIE5QQkxCIHJlZ2lzdGVyKi8KKyAgICAgICAgICAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQUVTX0NSX05QQkxCLCAoKHVpbnQzMl90KW5wYmxiKTw8IDIwVSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBOdW1iZXIgb2YgdmFsaWQgd29yZHMgKGxhc3R3b3Jkc2l6ZSkgaW4gbGFzdCBibG9jayAqLworICAgICAgICBpZiAoKG5wYmxiICUgNFUpID09MFUpCisgICAgICAgIHsKKyAgICAgICAgICBsYXN0d29yZHNpemUgPSAoMTZVLW5wYmxiKS80VTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBsYXN0d29yZHNpemUgPSAoKDE2VS1ucGJsYikvNFUpICsxVTsKKyAgICAgICAgfQorCisgICAgICAgIC8qICBMYXN0IGJsb2NrIG9wdGlvbmFsbHkgcGFkIHRoZSBkYXRhIHdpdGggemVyb3MqLworICAgICAgICBmb3IobG9vcGNvdW50ZXIgPSAwVTsgbG9vcGNvdW50ZXIgPCBsYXN0d29yZHNpemU7IGxvb3Bjb3VudGVyKyspCisgICAgICAgIHsKKyAgICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cEluQnVmZlB0ciArIGhjcnlwLT5DcnlwSW5Db3VudCApOworICAgICAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCsrOworICAgICAgICB9CisgICAgICAgIHdoaWxlKGxvb3Bjb3VudGVyIDwgNFUgKQorICAgICAgICB7CisgICAgICAgICAgLyogcGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCisgICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gMHgwVTsKKyAgICAgICAgICBsb29wY291bnRlcisrOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJ3Ynh4X2hhbF9mbGFzaC5jIGIvU3JjL3N0bTMyd2J4eF9oYWxfZmxhc2guYwppbmRleCAyMzdjZTZiLi5hYjNkZTk2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJ3Ynh4X2hhbF9mbGFzaC5jCisrKyBiL1NyYy9zdG0zMndieHhfaGFsX2ZsYXNoLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogICAgIHBGbGFzaC5BZGRyZXNzID0gQWRkcmVzczsKIAogICAgIC8qIEVuYWJsZSBFbmQgb2YgT3BlcmF0aW9uIGFuZCBFcnJvciBpbnRlcnJ1cHRzICovCi0gICAgX19IQUxfRkxBU0hfRU5BQkxFX0lUKEZMQVNIX0lUX0VPUCB8IEZMQVNIX0lUX09QRVJSIHwgRkxBU0hfSVRfRUNDQyk7CisgICAgX19IQUxfRkxBU0hfRU5BQkxFX0lUKEZMQVNIX0lUX0VPUCB8IEZMQVNIX0lUX09QRVJSKTsKIAogICAgIGlmIChUeXBlUHJvZ3JhbSA9PSBGTEFTSF9UWVBFUFJPR1JBTV9ET1VCTEVXT1JEKQogICAgIHsKQEAgLTMwMiwxMyArMzAyLDExIEBACiAgIHVpbnQzMl90IHBhcmFtID0gMHhGRkZGRkZGRlU7CiAgIHVpbnQzMl90IGVycm9yOwogCi0gIC8qIFNhdmUgZmxhc2ggZXJyb3JzLiBPbmx5IEVDQyBkZXRlY3Rpb24gY2FuIGJlIGNoZWNrZWQgaGVyZSBhcyBFQ0NDCi0gICAgIGdlbmVyYXRlcyBOTUkgKi8KLSAgZXJyb3IgPSAoRkxBU0gtPlNSICYgRkxBU0hfRkxBR19TUl9FUlJPUik7CisgIC8qIENoZWNrIEZMQVNIIG9wZXJhdGlvbiBlcnJvciBmbGFncyAqLworICBlcnJvciA9IChGTEFTSC0+U1IgJiBGTEFTSF9GTEFHX1NSX0VSUk9SUyk7CiAKICAgLyogQ2xlYXIgQ3VycmVudCBvcGVyYXRpb24gKi8KICAgQ0xFQVJfQklUKEZMQVNILT5DUiwgcEZsYXNoLlByb2NlZHVyZU9uR29pbmcpOwotICBlcnJvciB8PSAoRkxBU0gtPkVDQ1IgJiBGTEFTSF9GTEFHX0VDQ0MpOwogCiAgIC8qIEFdIFNldCBwYXJhbWV0ZXIgZm9yIHVzZXIgb3IgZXJyb3IgY2FsbGJhY2tzICovCiAgIC8qIGNoZWNrIG9wZXJhdGlvbiB3YXMgYSBwcm9ncmFtIG9yIGVyYXNlICovCkBAIC0zODEsNyArMzc5LDcgQEAKICAgaWYgKHBGbGFzaC5Qcm9jZWR1cmVPbkdvaW5nID09IEZMQVNIX1RZUEVOT05FKQogICB7CiAgICAgLyogRGlzYWJsZSBFbmQgb2YgT3BlcmF0aW9uIGFuZCBFcnJvciBpbnRlcnJ1cHRzICovCi0gICAgX19IQUxfRkxBU0hfRElTQUJMRV9JVChGTEFTSF9JVF9FT1AgfCBGTEFTSF9JVF9PUEVSUiB8IEZMQVNIX0lUX0VDQ0MpOworICAgIF9fSEFMX0ZMQVNIX0RJU0FCTEVfSVQoRkxBU0hfSVRfRU9QIHwgRkxBU0hfSVRfT1BFUlIpOwogCiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgIF9fSEFMX1VOTE9DSygmcEZsYXNoKTsKQEAgLTU4MSw3ICs1NzksNiBAQAogICAqICAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9GTEFTSF9FUlJPUl9GQVNUIEZMQVNIIEZhc3QgcHJvZ3JhbW1pbmcgZXJyb3IKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRkxBU0hfRVJST1JfUkQgRkxBU0ggUmVhZCBQcm90ZWN0aW9uIGVycm9yIChQQ1JPUCkKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRkxBU0hfRVJST1JfT1BUViBGTEFTSCBPcHRpb24gdmFsaWRpdHkgZXJyb3IKLSAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRkxBU0hfRVJST1JfRUNDRCBGTEFTSCB0d28gRUNDIGVycm9ycyBoYXZlIGJlZW4gZGV0ZWN0ZWQKICAgKi8KIHVpbnQzMl90IEhBTF9GTEFTSF9HZXRFcnJvcih2b2lkKQogewpAQCAtNjIzLDggKzYyMCw3IEBACiAgICAgfQogICB9CiAKLSAgLyogY2hlY2sgZmxhc2ggZXJyb3JzLiBPbmx5IEVDQyBjb3JyZWN0aW9uIGNhbiBiZSBjaGVja2VkIGhlcmUgYXMgRUNDRAotICAgICAgZ2VuZXJhdGVzIE5NSSAqLworICAvKiBDaGVjayBGTEFTSCBvcGVyYXRpb24gZXJyb3IgZmxhZ3MgKi8KICAgZXJyb3IgPSBGTEFTSC0+U1I7CiAKICAgLyogQ2hlY2sgRkxBU0ggRW5kIG9mIE9wZXJhdGlvbiBmbGFnICovCkBAIC02MzUsMTAgKzYzMSw3IEBACiAgIH0KIAogICAvKiBOb3cgdXBkYXRlIGVycm9yIHZhcmlhYmxlIHRvIG9ubHkgZXJyb3IgdmFsdWUgKi8KLSAgZXJyb3IgJj0gRkxBU0hfRkxBR19TUl9FUlJPUjsKLQotICAvKiBVcGRhdGUgZXJyb3Igd2l0aCBFQ0MgZXJyb3IgdmFsdWUgKi8KLSAgZXJyb3IgfD0gKEZMQVNILT5FQ0NSICYgRkxBU0hfRkxBR19FQ0NDKTsKKyAgZXJyb3IgJj0gRkxBU0hfRkxBR19TUl9FUlJPUlM7CiAKICAgLyogY2xlYXIgZXJyb3IgZmxhZ3MgKi8KICAgX19IQUxfRkxBU0hfQ0xFQVJfRkxBRyhlcnJvcik7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJ3Ynh4X2hhbF9pcmRhLmMgYi9TcmMvc3RtMzJ3Ynh4X2hhbF9pcmRhLmMKaW5kZXggYjkzMTQ5Ny4uNjc2OGRjZiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyd2J4eF9oYWxfaXJkYS5jCisrKyBiL1NyYy9zdG0zMndieHhfaGFsX2lyZGEuYwpAQCAtNzgyLDEwICs3ODIsMTMgQEAKIAogLyoqCiAgICogQGJyaWVmIFNlbmQgYW4gYW1vdW50IG9mIGRhdGEgaW4gYmxvY2tpbmcgbW9kZS4KKyAgKiBAbm90ZSAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgIHRoZSBzZW50IGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IHJlZmxlY3QgdGhlIG51bWJlcgorICAqICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcERhdGEuCiAgICogQHBhcmFtIGhpcmRhIFBvaW50ZXIgdG8gYSBJUkRBX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIElSREEgbW9kdWxlLgotICAqIEBwYXJhbSBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyLgotICAqIEBwYXJhbSBTaXplIEFtb3VudCBvZiBkYXRhIHRvIGJlIHNlbnQuCisgICogQHBhcmFtIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gU2l6ZSBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSBzZW50LgogICAqIEBwYXJhbSBUaW1lb3V0IFNwZWNpZnkgdGltZW91dCB2YWx1ZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KQEAgLTg2OCwxMCArODcxLDEzIEBACiAKIC8qKgogICAqIEBicmllZiBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUuCisgICogQG5vdGUgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgcmVmbGVjdCB0aGUgbnVtYmVyCisgICogICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwRGF0YS4KICAgKiBAcGFyYW0gIGhpcmRhIFBvaW50ZXIgdG8gYSBJUkRBX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJUkRBIG1vZHVsZS4KLSAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZC4KKyAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHJlY2VpdmVkLgogICAqIEBwYXJhbSBUaW1lb3V0IFNwZWNpZnkgdGltZW91dCB2YWx1ZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KQEAgLTk1NiwxMCArOTYyLDEzIEBACiAKIC8qKgogICAqIEBicmllZiBTZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIGludGVycnVwdCBtb2RlLgorICAqIEBub3RlICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgdGhlIHNlbnQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgcmVmbGVjdCB0aGUgbnVtYmVyCisgICogICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwRGF0YS4KICAgKiBAcGFyYW0gIGhpcmRhIFBvaW50ZXIgdG8gYSBJUkRBX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJUkRBIG1vZHVsZS4KLSAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSBzZW50LgorICAqIEBwYXJhbSBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtIFNpemUgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgc2VudC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JUkRBX1RyYW5zbWl0X0lUKElSREFfSGFuZGxlVHlwZURlZiAqaGlyZGEsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQpAQCAtOTk4LDEwICsxMDA3LDEzIEBACiAKIC8qKgogICAqIEBicmllZiBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIGludGVycnVwdCBtb2RlLgorICAqIEBub3RlICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgdGhlIHJlY2VpdmVkIGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IHJlZmxlY3QgdGhlIG51bWJlcgorICAqICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcERhdGEuCiAgICogQHBhcmFtICBoaXJkYSBQb2ludGVyIHRvIGEgSVJEQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgSVJEQSBtb2R1bGUuCi0gICogQHBhcmFtIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIuCi0gICogQHBhcmFtIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQuCisgICogQHBhcmFtIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gU2l6ZSBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSByZWNlaXZlZC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JUkRBX1JlY2VpdmVfSVQoSVJEQV9IYW5kbGVUeXBlRGVmICpoaXJkYSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCkBAIC0xMDQ3LDEwICsxMDU5LDEzIEBACiAKIC8qKgogICAqIEBicmllZiBTZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIERNQSBtb2RlLgorICAqIEBub3RlICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgdGhlIHNlbnQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgcmVmbGVjdCB0aGUgbnVtYmVyCisgICogICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwRGF0YS4KICAgKiBAcGFyYW0gaGlyZGEgUG9pbnRlciB0byBhIElSREFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgSVJEQSBtb2R1bGUuCi0gICogQHBhcmFtIHBEYXRhIHBvaW50ZXIgdG8gZGF0YSBidWZmZXIuCi0gICogQHBhcmFtIFNpemUgYW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudC4KKyAgKiBAcGFyYW0gcERhdGEgcG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHNlbnQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSVJEQV9UcmFuc21pdF9ETUEoSVJEQV9IYW5kbGVUeXBlRGVmICpoaXJkYSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCkBAIC0xMTIyLDEyICsxMTM3LDE1IEBACiAKIC8qKgogICAqIEBicmllZiBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIERNQSBtb2RlLgorICAqIEBub3RlICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgdGhlIHJlY2VpdmVkIGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IHJlZmxlY3QgdGhlIG51bWJlcgorICAqICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcERhdGEuCiAgICogQG5vdGUgICBXaGVuIHRoZSBJUkRBIHBhcml0eSBpcyBlbmFibGVkIChQQ0UgPSAxKSwgdGhlIHJlY2VpdmVkIGRhdGEgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBwYXJpdHkgYml0IChNU0IgcG9zaXRpb24pLgogICAqIEBwYXJhbSBoaXJkYSBQb2ludGVyIHRvIGEgSVJEQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJUkRBIG1vZHVsZS4KLSAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZC4KKyAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHJlY2VpdmVkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0lSREFfUmVjZWl2ZV9ETUEoSVJEQV9IYW5kbGVUeXBlRGVmICpoaXJkYSwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJ3Ynh4X2hhbF9wd3IuYyBiL1NyYy9zdG0zMndieHhfaGFsX3B3ci5jCmluZGV4IDRhZWM4ZWIuLmFmOGEwMzkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMndieHhfaGFsX3B3ci5jCisrKyBiL1NyYy9zdG0zMndieHhfaGFsX3B3ci5jCkBAIC01NjAsNiArNTYwLDggQEAKICAgKiAgICAgICAgIHN0YXJ0dXAgZGVsYXkgaXMgaW5jdXJyZWQgd2hlbiB3YWtpbmcgdXAuCiAgICogICAgICAgICBCeSBrZWVwaW5nIHRoZSBpbnRlcm5hbCByZWd1bGF0b3IgT04gZHVyaW5nIFN0b3AgbW9kZSAoU3RvcCAwKSwgdGhlIGNvbnN1bXB0aW9uCiAgICogICAgICAgICBpcyBoaWdoZXIgYWx0aG91Z2ggdGhlIHN0YXJ0dXAgdGltZSBpcyByZWR1Y2VkLgorICAqIEBub3RlICBDYXNlIG9mIFN0b3AwIG1vZGUgd2l0aCBTTVBTOiBCZWZvcmUgZW50ZXJpbmcgU3RvcCAwIG1vZGUgd2l0aCBTTVBTIFN0ZXAgRG93biBjb252ZXJ0ZXIgZW5hYmxlZCwKKyAgKiAgICAgICAgdGhlIEhTSTE2IG11c3QgYmUga2VwdCBvbiBieSBlbmFibGluZyBIU0kga2VybmVsIGNsb2NrIChzZXQgSFNJS0VST04gcmVnaXN0ZXIgYml0KS4KICAgKiBAbm90ZSAgQWNjb3JkaW5nIHRvIHN5c3RlbSBwb3dlciBwb2xpY3ksIHN5c3RlbSBlbnRlcmluZyBpbiBTdG9wIG1vZGUKICAgKiAgICAgICAgaXMgZGVwZW5kaW5nIG9uIG90aGVyIENQVSBwb3dlciBtb2RlLgogICAqIEBwYXJhbSBSZWd1bGF0b3IgU3BlY2lmaWVzIHRoZSByZWd1bGF0b3Igc3RhdGUgaW4gU3RvcCBtb2RlLgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyd2J4eF9oYWxfcHdyX2V4LmMgYi9TcmMvc3RtMzJ3Ynh4X2hhbF9wd3JfZXguYwppbmRleCA5MzU1NGY2Li4zYjM5NGM2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJ3Ynh4X2hhbF9wd3JfZXguYworKysgYi9TcmMvc3RtMzJ3Ynh4X2hhbF9wd3JfZXguYwpAQCAtMTA4OSw2ICsxMDg5LDggQEAKICAgKiAgICAgICAgIGlzIHNldDsgdGhlIE1TSSBvc2NpbGxhdG9yIGlzIHNlbGVjdGVkIGlmIFNUT1BXVUNLIGlzIGNsZWFyZWQuICAKICAgKiBAbm90ZSAgQnkga2VlcGluZyB0aGUgaW50ZXJuYWwgcmVndWxhdG9yIE9OIGR1cmluZyBTdG9wIDAgbW9kZSwgdGhlIGNvbnN1bXB0aW9uCiAgICogICAgICAgICBpcyBoaWdoZXIgYWx0aG91Z2ggdGhlIHN0YXJ0dXAgdGltZSBpcyByZWR1Y2VkLgorICAqIEBub3RlICBDYXNlIG9mIFN0b3AwIG1vZGUgd2l0aCBTTVBTOiBCZWZvcmUgZW50ZXJpbmcgU3RvcCAwIG1vZGUgd2l0aCBTTVBTIFN0ZXAgRG93biBjb252ZXJ0ZXIgZW5hYmxlZCwKKyAgKiAgICAgICAgdGhlIEhTSTE2IG11c3QgYmUga2VwdCBvbiBieSBlbmFibGluZyBIU0kga2VybmVsIGNsb2NrIChzZXQgSFNJS0VST04gcmVnaXN0ZXIgYml0KS4KICAgKiBAbm90ZSAgQWNjb3JkaW5nIHRvIHN5c3RlbSBwb3dlciBwb2xpY3ksIHN5c3RlbSBlbnRlcmluZyBpbiBTdG9wIG1vZGUKICAgKiAgICAgICAgaXMgZGVwZW5kaW5nIG9uIG90aGVyIENQVSBwb3dlciBtb2RlLgogICAqIEBwYXJhbSBTVE9QRW50cnkgIHNwZWNpZmllcyBpZiBTdG9wIG1vZGUgaW4gZW50ZXJlZCB3aXRoIFdGSSBvciBXRkUgaW5zdHJ1Y3Rpb24uCkBAIC0xMTk3LDYgKzExOTksMTUgQEAKICAgKiBAbm90ZSAgV2hlbiBleGl0aW5nIFN0b3AgMiBtb2RlIGJ5IGlzc3VpbmcgYW4gaW50ZXJydXB0IG9yIGEgd2FrZXVwIGV2ZW50LAogICAqICAgICAgICAgdGhlIEhTSSBSQyBvc2NpbGxhdG9yIGlzIHNlbGVjdGVkIGFzIHN5c3RlbSBjbG9jayBpZiBTVE9QV1VDSyBiaXQgaW4gUkNDX0NGR1IgcmVnaXN0ZXIKICAgKiAgICAgICAgIGlzIHNldDsgdGhlIE1TSSBvc2NpbGxhdG9yIGlzIHNlbGVjdGVkIGlmIFNUT1BXVUNLIGlzIGNsZWFyZWQuCisgICogQG5vdGUgIENhc2Ugb2YgU3RvcDIgbW9kZSBhbmQgZGVidWdnZXIgcHJvYmUgYXR0YWNoZWQ6IGEgd29ya2Fyb3VuZCBzaG91bGQgYmUgYXBwbGllZC4KKyAgKiAgICAgICAgSXNzdWUgc3BlY2lmaWVkIGluICJFUzAzOTQgLSBTVE0zMldCNTVDeC9SeC9WeCBkZXZpY2UgZXJyYXRhIjoKKyAgKiAgICAgICAgMi4yLjkgSW5jb21wbGV0ZSBTdG9wIDIgbW9kZSBlbnRyeSBhZnRlciBhIHdha2V1cCBmcm9tIGRlYnVnIHVwb24gRVhUSSBsaW5lIDQ4IGV2ZW50CisgICogICAgICAgICJXaXRoIHRoZSBKVEFHIGRlYnVnZ2VyIGVuYWJsZWQgb24gR1BJTyBwaW5zIGFuZCBhZnRlciBhIHdha2V1cCBmcm9tIGRlYnVnIHRyaWdnZXJlZCBieSBhbiBldmVudCBvbiBFWFRJCisgICogICAgICAgIGxpbmUgNDggKENEQkdQV1JVUFJFUSksIHRoZSBkZXZpY2UgbWF5IGVudGVyIGluIGEgc3RhdGUgaW4gd2hpY2ggYXR0ZW1wdHMgdG8gZW50ZXIgU3RvcCAyIG1vZGUgYXJlIG5vdCBmdWxseQorICAqICAgICAgICBlZmZlY3RpdmUgLi4uIgorICAqICAgICAgICBXb3JrYXJvdW5kIGltcGxlbWVudGF0aW9uIGV4YW1wbGUgdXNpbmcgTEwgZHJpdmVyOgorICAqICAgICAgICBMTF9FWFRJX0Rpc2FibGVJVF8zMl82MyhMTF9FWFRJX0xJTkVfNDgpOworICAqICAgICAgICBMTF9DMl9FWFRJX0Rpc2FibGVJVF8zMl82MyhMTF9FWFRJX0xJTkVfNDgpOwogICAqIEBub3RlICBBY2NvcmRpbmcgdG8gc3lzdGVtIHBvd2VyIHBvbGljeSwgc3lzdGVtIGVudGVyaW5nIGluIFN0b3AgbW9kZQogICAqICAgICAgICBpcyBkZXBlbmRpbmcgb24gb3RoZXIgQ1BVIHBvd2VyIG1vZGUuCiAgICogQHBhcmFtIFNUT1BFbnRyeSAgc3BlY2lmaWVzIGlmIFN0b3AgbW9kZSBpbiBlbnRlcmVkIHdpdGggV0ZJIG9yIFdGRSBpbnN0cnVjdGlvbi4KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMndieHhfaGFsX3NtYXJ0Y2FyZC5jIGIvU3JjL3N0bTMyd2J4eF9oYWxfc21hcnRjYXJkLmMKaW5kZXggOTU0ZGE4Ny4uYTI0YTAzNSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyd2J4eF9oYWxfc21hcnRjYXJkLmMKKysrIGIvU3JjL3N0bTMyd2J4eF9oYWxfc21hcnRjYXJkLmMKQEAgLTkxNyw3ICs5MTcsNyBAQAogICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgICB9CiAgICAgICAqcHRtcGRhdGEgPSAodWludDhfdCkoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPlJEUiAmICh1aW50OF90KTB4MDBGRik7Ci0gICAgICAqcHRtcGRhdGErKzsKKyAgICAgIHB0bXBkYXRhKys7CiAgICAgfQogCiAgICAgLyogQXQgZW5kIG9mIFJ4IHByb2Nlc3MsIHJlc3RvcmUgaHNtYXJ0Y2FyZC0+UnhTdGF0ZSB0byBSZWFkeSAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyd2J4eF9oYWxfdGltLmMgYi9TcmMvc3RtMzJ3Ynh4X2hhbF90aW0uYwppbmRleCA5ZWJmYTMzLi5lZWVjODEyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJ3Ynh4X2hhbF90aW0uYworKysgYi9TcmMvc3RtMzJ3Ynh4X2hhbF90aW0uYwpAQCAtMjYzMiw4ICsyNjMyLDggQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSX01PREUoc0NvbmZpZy0+RW5jb2Rlck1vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19TRUxFQ1RJT04oc0NvbmZpZy0+SUMxU2VsZWN0aW9uKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfU0VMRUNUSU9OKHNDb25maWctPklDMlNlbGVjdGlvbikpOwotICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1BPTEFSSVRZKHNDb25maWctPklDMVBvbGFyaXR5KSk7Ci0gIGFzc2VydF9wYXJhbShJU19USU1fSUNfUE9MQVJJVFkoc0NvbmZpZy0+SUMyUG9sYXJpdHkpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSSU5QVVRfUE9MQVJJVFkoc0NvbmZpZy0+SUMxUG9sYXJpdHkpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSSU5QVVRfUE9MQVJJVFkoc0NvbmZpZy0+SUMyUG9sYXJpdHkpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19QUkVTQ0FMRVIoc0NvbmZpZy0+SUMxUHJlc2NhbGVyKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfUFJFU0NBTEVSKHNDb25maWctPklDMlByZXNjYWxlcikpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX0ZJTFRFUihzQ29uZmlnLT5JQzFGaWx0ZXIpKTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMndieHhfaGFsX3RpbV9leC5jIGIvU3JjL3N0bTMyd2J4eF9oYWxfdGltX2V4LmMKaW5kZXggMjUwNDA2MC4uNTAzY2IwYyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyd2J4eF9oYWxfdGltX2V4LmMKKysrIGIvU3JjL3N0bTMyd2J4eF9oYWxfdGltX2V4LmMKQEAgLTE2NDcsNyArMTY0Nyw3IEBACiAgIHVpbnQzMl90IHRtcHNtY3I7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KLSAgYXNzZXJ0X3BhcmFtKElTX1RJTV9TWU5DSFJPX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fTUFTVEVSX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fVFJHT19TT1VSQ0Uoc01hc3RlckNvbmZpZy0+TWFzdGVyT3V0cHV0VHJpZ2dlcikpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX01TTV9TVEFURShzTWFzdGVyQ29uZmlnLT5NYXN0ZXJTbGF2ZU1vZGUpKTsKIApAQCAtMTY4MCwxNiArMTY4MCwxOSBAQAogICAvKiBTZWxlY3QgdGhlIFRSR08gc291cmNlICovCiAgIHRtcGNyMiB8PSAgc01hc3RlckNvbmZpZy0+TWFzdGVyT3V0cHV0VHJpZ2dlcjsKIAotICAvKiBSZXNldCB0aGUgTVNNIEJpdCAqLwotICB0bXBzbWNyICY9IH5USU1fU01DUl9NU007Ci0gIC8qIFNldCBtYXN0ZXIgbW9kZSAqLwotICB0bXBzbWNyIHw9IHNNYXN0ZXJDb25maWctPk1hc3RlclNsYXZlTW9kZTsKLQogICAvKiBVcGRhdGUgVElNeCBDUjIgKi8KICAgaHRpbS0+SW5zdGFuY2UtPkNSMiA9IHRtcGNyMjsKIAotICAvKiBVcGRhdGUgVElNeCBTTUNSICovCi0gIGh0aW0tPkluc3RhbmNlLT5TTUNSID0gdG1wc21jcjsKKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICAvKiBSZXNldCB0aGUgTVNNIEJpdCAqLworICAgIHRtcHNtY3IgJj0gflRJTV9TTUNSX01TTTsKKyAgICAvKiBTZXQgbWFzdGVyIG1vZGUgKi8KKyAgICB0bXBzbWNyIHw9IHNNYXN0ZXJDb25maWctPk1hc3RlclNsYXZlTW9kZTsKKworICAgIC8qIFVwZGF0ZSBUSU14IFNNQ1IgKi8KKyAgICBodGltLT5JbnN0YW5jZS0+U01DUiA9IHRtcHNtY3I7CisgIH0KIAogICAvKiBDaGFuZ2UgdGhlIGh0aW0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyd2J4eF9oYWxfdWFydC5jIGIvU3JjL3N0bTMyd2J4eF9oYWxfdWFydC5jCmluZGV4IGRlMjI1ZjcuLjIyZTg4ZTYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMndieHhfaGFsX3VhcnQuYworKysgYi9TcmMvc3RtMzJ3Ynh4X2hhbF91YXJ0LmMKQEAgLTEwNzUsNiArMTA3NSw4IEBACiAgICAgICBwZGF0YTE2Yml0cyA9IE5VTEw7CiAgICAgfQogCisgICAgX19IQUxfVU5MT0NLKGh1YXJ0KTsKKwogICAgIHdoaWxlIChodWFydC0+VHhYZmVyQ291bnQgPiAwVSkKICAgICB7CiAgICAgICBpZiAoVUFSVF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KGh1YXJ0LCBVQVJUX0ZMQUdfVFhFLCBSRVNFVCwgdGlja3N0YXJ0LCBUaW1lb3V0KSAhPSBIQUxfT0spCkBAIC0xMTAyLDggKzExMDQsNiBAQAogICAgIC8qIEF0IGVuZCBvZiBUeCBwcm9jZXNzLCByZXN0b3JlIGh1YXJ0LT5nU3RhdGUgdG8gUmVhZHkgKi8KICAgICBodWFydC0+Z1N0YXRlID0gSEFMX1VBUlRfU1RBVEVfUkVBRFk7CiAKLSAgICBfX0hBTF9VTkxPQ0soaHVhcnQpOwotCiAgICAgcmV0dXJuIEhBTF9PSzsKICAgfQogICBlbHNlCkBAIC0xMTY5LDYgKzExNjksOCBAQAogICAgICAgcGRhdGExNmJpdHMgPSBOVUxMOwogICAgIH0KIAorICAgIF9fSEFMX1VOTE9DSyhodWFydCk7CisKICAgICAvKiBhcyBsb25nIGFzIGRhdGEgaGF2ZSB0byBiZSByZWNlaXZlZCAqLwogICAgIHdoaWxlIChodWFydC0+UnhYZmVyQ291bnQgPiAwVSkKICAgICB7CkBAIC0xMTkyLDggKzExOTQsNiBAQAogICAgIC8qIEF0IGVuZCBvZiBSeCBwcm9jZXNzLCByZXN0b3JlIGh1YXJ0LT5SeFN0YXRlIHRvIFJlYWR5ICovCiAgICAgaHVhcnQtPlJ4U3RhdGUgPSBIQUxfVUFSVF9TVEFURV9SRUFEWTsKIAotICAgIF9fSEFMX1VOTE9DSyhodWFydCk7Ci0KICAgICByZXR1cm4gSEFMX09LOwogICB9CiAgIGVsc2UKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMndieHhfaGFsX3VzYXJ0LmMgYi9TcmMvc3RtMzJ3Ynh4X2hhbF91c2FydC5jCmluZGV4IGExN2JkNTEuLmU2YzczNjMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMndieHhfaGFsX3VzYXJ0LmMKKysrIGIvU3JjL3N0bTMyd2J4eF9oYWxfdXNhcnQuYwpAQCAtNzMyLDkgKzczMiwxMiBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNpbXBsZXggc2VuZCBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlLgorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgICB0aGUgc2VudCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiB1MTYgcHJvdmlkZWQgdGhyb3VnaCBwVHhEYXRhLgogICAqIEBwYXJhbSAgaHVzYXJ0IFVTQVJUIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBUeERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudC4KKyAgKiBAcGFyYW0gIHBUeERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgU2l6ZSBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSBzZW50LgogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtODI2LDEwICs4MjksMTMgQEAKIAogLyoqCiAgICogQGJyaWVmIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gYmxvY2tpbmcgbW9kZS4KLSAgKiBAbm90ZSBUbyByZWNlaXZlIHN5bmNocm9ub3VzIGRhdGEsIGR1bW15IGRhdGEgYXJlIHNpbXVsdGFuZW91c2x5IHRyYW5zbWl0dGVkLgorICAqIEBub3RlICAgVG8gcmVjZWl2ZSBzeW5jaHJvbm91cyBkYXRhLCBkdW1teSBkYXRhIGFyZSBzaW11bHRhbmVvdXNseSB0cmFuc21pdHRlZC4KKyAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICAgdGhlIHJlY2VpdmVkIGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwUnhEYXRhLgogICAqIEBwYXJhbSBodXNhcnQgVVNBUlQgaGFuZGxlLgotICAqIEBwYXJhbSBwUnhEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIuCi0gICogQHBhcmFtIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQuCisgICogQHBhcmFtIHBSeERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHJlY2VpdmVkLgogICAqIEBwYXJhbSBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC05MzYsMTAgKzk0MiwxMyBAQAogCiAvKioKICAgKiBAYnJpZWYgRnVsbC1EdXBsZXggU2VuZCBhbmQgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlLgorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgICB0aGUgc2VudCBkYXRhIGFuZCB0aGUgcmVjZWl2ZWQgZGF0YSBhcmUgaGFuZGxlZCBhcyBzZXRzIG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgorICAqICAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBUeERhdGEgYW5kIHRocm91Z2ggcFJ4RGF0YS4KICAgKiBAcGFyYW0gIGh1c2FydCBVU0FSVCBoYW5kbGUuCi0gICogQHBhcmFtICBwVHhEYXRhIHBvaW50ZXIgdG8gVFggZGF0YSBidWZmZXIuCi0gICogQHBhcmFtICBwUnhEYXRhIHBvaW50ZXIgdG8gUlggZGF0YSBidWZmZXIuCi0gICogQHBhcmFtICBTaXplIGFtb3VudCBvZiBkYXRhIHRvIGJlIHNlbnQgKHNhbWUgYW1vdW50IHRvIGJlIHJlY2VpdmVkKS4KKyAgKiBAcGFyYW0gIHBUeERhdGEgcG9pbnRlciB0byBUWCBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgcFJ4RGF0YSBwb2ludGVyIHRvIFJYIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplIGFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHNlbnQgKHNhbWUgYW1vdW50IHRvIGJlIHJlY2VpdmVkKS4KICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbi4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KQEAgLTEwODIsOSArMTA5MSwxMiBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbmQgYW4gYW1vdW50IG9mIGRhdGEgaW4gaW50ZXJydXB0IG1vZGUuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBwcm92aWRlZCB0aHJvdWdoIHBUeERhdGEuCiAgICogQHBhcmFtICBodXNhcnQgVVNBUlQgaGFuZGxlLgotICAqIEBwYXJhbSAgcFR4RGF0YSBwb2ludGVyIHRvIGRhdGEgYnVmZmVyLgotICAqIEBwYXJhbSAgU2l6ZSBhbW91bnQgb2YgZGF0YSB0byBiZSBzZW50LgorICAqIEBwYXJhbSAgcFR4RGF0YSBwb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplIGFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHNlbnQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVVNBUlRfVHJhbnNtaXRfSVQoVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0LCB1aW50OF90ICpwVHhEYXRhLCB1aW50MTZfdCBTaXplKQpAQCAtMTE2MiwxMCArMTE3NCwxMyBAQAogCiAvKioKICAgKiBAYnJpZWYgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBpbnRlcnJ1cHQgbW9kZS4KLSAgKiBAbm90ZSAgVG8gcmVjZWl2ZSBzeW5jaHJvbm91cyBkYXRhLCBkdW1teSBkYXRhIGFyZSBzaW11bHRhbmVvdXNseSB0cmFuc21pdHRlZC4KKyAgKiBAbm90ZSAgIFRvIHJlY2VpdmUgc3luY2hyb25vdXMgZGF0YSwgZHVtbXkgZGF0YSBhcmUgc2ltdWx0YW5lb3VzbHkgdHJhbnNtaXR0ZWQuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSByZWNlaXZlZCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcFJ4RGF0YS4KICAgKiBAcGFyYW0gIGh1c2FydCBVU0FSVCBoYW5kbGUuCi0gICogQHBhcmFtICBwUnhEYXRhIHBvaW50ZXIgdG8gZGF0YSBidWZmZXIuCi0gICogQHBhcmFtICBTaXplIGFtb3VudCBvZiBkYXRhIHRvIGJlIHJlY2VpdmVkLgorICAqIEBwYXJhbSAgcFJ4RGF0YSBwb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplIGFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHJlY2VpdmVkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VTQVJUX1JlY2VpdmVfSVQoVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0LCB1aW50OF90ICpwUnhEYXRhLCB1aW50MTZfdCBTaXplKQpAQCAtMTI2NCwxMCArMTI3OSwxMyBAQAogCiAvKioKICAgKiBAYnJpZWYgRnVsbC1EdXBsZXggU2VuZCBhbmQgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBpbnRlcnJ1cHQgbW9kZS4KKyAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICAgdGhlIHNlbnQgZGF0YSBhbmQgdGhlIHJlY2VpdmVkIGRhdGEgYXJlIGhhbmRsZWQgYXMgc2V0cyBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwVHhEYXRhIGFuZCB0aHJvdWdoIHBSeERhdGEuCiAgICogQHBhcmFtICBodXNhcnQgVVNBUlQgaGFuZGxlLgotICAqIEBwYXJhbSAgcFR4RGF0YSBwb2ludGVyIHRvIFRYIGRhdGEgYnVmZmVyLgotICAqIEBwYXJhbSAgcFJ4RGF0YSBwb2ludGVyIHRvIFJYIGRhdGEgYnVmZmVyLgotICAqIEBwYXJhbSAgU2l6ZSBhbW91bnQgb2YgZGF0YSB0byBiZSBzZW50IChzYW1lIGFtb3VudCB0byBiZSByZWNlaXZlZCkuCisgICogQHBhcmFtICBwVHhEYXRhIHBvaW50ZXIgdG8gVFggZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gIHBSeERhdGEgcG9pbnRlciB0byBSWCBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgU2l6ZSBhbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSBzZW50IChzYW1lIGFtb3VudCB0byBiZSByZWNlaXZlZCkuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVVNBUlRfVHJhbnNtaXRSZWNlaXZlX0lUKFVTQVJUX0hhbmRsZVR5cGVEZWYgKmh1c2FydCwgdWludDhfdCAqcFR4RGF0YSwgdWludDhfdCAqcFJ4RGF0YSwgIHVpbnQxNl90IFNpemUpCkBAIC0xMzU5LDkgKzEzNzcsMTIgQEAKIAogLyoqCiAgICogQGJyaWVmIFNlbmQgYW4gYW1vdW50IG9mIGRhdGEgaW4gRE1BIG1vZGUuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBwcm92aWRlZCB0aHJvdWdoIHBUeERhdGEuCiAgICogQHBhcmFtICBodXNhcnQgVVNBUlQgaGFuZGxlLgotICAqIEBwYXJhbSAgcFR4RGF0YSBwb2ludGVyIHRvIGRhdGEgYnVmZmVyLgotICAqIEBwYXJhbSAgU2l6ZSBhbW91bnQgb2YgZGF0YSB0byBiZSBzZW50LgorICAqIEBwYXJhbSAgcFR4RGF0YSBwb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplIGFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHNlbnQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVVNBUlRfVHJhbnNtaXRfRE1BKFVTQVJUX0hhbmRsZVR5cGVEZWYgKmh1c2FydCwgdWludDhfdCAqcFR4RGF0YSwgdWludDE2X3QgU2l6ZSkKQEAgLTE0NDEsMTAgKzE0NjIsMTMgQEAKICAgKiBAYnJpZWYgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBETUEgbW9kZS4KICAgKiBAbm90ZSAgIFdoZW4gdGhlIFVTQVJUIHBhcml0eSBpcyBlbmFibGVkIChQQ0UgPSAxKSwgdGhlIHJlY2VpdmVkIGRhdGEgY29udGFpbgogICAqICAgICAgICAgdGhlIHBhcml0eSBiaXQgKE1TQiBwb3NpdGlvbikuCi0gICogQG5vdGUgVGhlIFVTQVJUIERNQSB0cmFuc21pdCBjaGFubmVsIG11c3QgYmUgY29uZmlndXJlZCBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgY2xvY2sgZm9yIHRoZSBzbGF2ZS4KKyAgKiBAbm90ZSAgIFRoZSBVU0FSVCBETUEgdHJhbnNtaXQgY2hhbm5lbCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIGNsb2NrIGZvciB0aGUgc2xhdmUuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSByZWNlaXZlZCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcFJ4RGF0YS4KICAgKiBAcGFyYW0gIGh1c2FydCBVU0FSVCBoYW5kbGUuCi0gICogQHBhcmFtICBwUnhEYXRhIHBvaW50ZXIgdG8gZGF0YSBidWZmZXIuCi0gICogQHBhcmFtICBTaXplIGFtb3VudCBvZiBkYXRhIHRvIGJlIHJlY2VpdmVkLgorICAqIEBwYXJhbSAgcFJ4RGF0YSBwb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplIGFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHJlY2VpdmVkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VTQVJUX1JlY2VpdmVfRE1BKFVTQVJUX0hhbmRsZVR5cGVEZWYgKmh1c2FydCwgdWludDhfdCAqcFJ4RGF0YSwgdWludDE2X3QgU2l6ZSkKQEAgLTE1NTYsMTAgKzE1ODAsMTMgQEAKIC8qKgogICAqIEBicmllZiBGdWxsLUR1cGxleCBUcmFuc21pdCBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlLgogICAqIEBub3RlICAgV2hlbiB0aGUgVVNBUlQgcGFyaXR5IGlzIGVuYWJsZWQgKFBDRSA9IDEpIHRoZSBkYXRhIHJlY2VpdmVkIGNvbnRhaW4gdGhlIHBhcml0eSBiaXQuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgYW5kIHRoZSByZWNlaXZlZCBkYXRhIGFyZSBoYW5kbGVkIGFzIHNldHMgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcFR4RGF0YSBhbmQgdGhyb3VnaCBwUnhEYXRhLgogICAqIEBwYXJhbSAgaHVzYXJ0IFVTQVJUIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBUeERhdGEgcG9pbnRlciB0byBUWCBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gIHBSeERhdGEgcG9pbnRlciB0byBSWCBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gIFNpemUgYW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQvc2VudC4KKyAgKiBAcGFyYW0gIHBUeERhdGEgcG9pbnRlciB0byBUWCBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgcFJ4RGF0YSBwb2ludGVyIHRvIFJYIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplIGFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHJlY2VpdmVkL3NlbnQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVVNBUlRfVHJhbnNtaXRSZWNlaXZlX0RNQShVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQsIHVpbnQ4X3QgKnBUeERhdGEsIHVpbnQ4X3QgKnBSeERhdGEsIHVpbnQxNl90IFNpemUpCkBAIC0zMDYxLDcgKzMwODgsNyBAQAogICAgICAgZWxzZSBpZiAoX19IQUxfVVNBUlRfR0VUX0ZMQUcoaHVzYXJ0LCBVU0FSVF9GTEFHX1RYRk5GKSA9PSBTRVQpCiAgICAgICB7CiAgICAgICAgIGh1c2FydC0+SW5zdGFuY2UtPlREUiA9ICh1aW50OF90KSgqaHVzYXJ0LT5wVHhCdWZmUHRyICYgKHVpbnQ4X3QpMHhGRik7Ci0gICAgICAgICpodXNhcnQtPnBUeEJ1ZmZQdHIrKzsKKyAgICAgICAgaHVzYXJ0LT5wVHhCdWZmUHRyKys7CiAgICAgICAgIGh1c2FydC0+VHhYZmVyQ291bnQtLTsKICAgICAgIH0KICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMndieHhfaGFsX3d3ZGcuYyBiL1NyYy9zdG0zMndieHhfaGFsX3d3ZGcuYwppbmRleCBhNGQ3MmRlLi4xMTk1NDc2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJ3Ynh4X2hhbF93d2RnLmMKKysrIGIvU3JjL3N0bTMyd2J4eF9oYWxfd3dkZy5jCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgKCsrKSBtaW4gdGltZSAobVMpID0gMTAwMCAqIChDb3VudGVyIC0gV2luZG93KSAvIFdXREcgY2xvY2sKICAgICAgICAgKCsrKSBtYXggdGltZSAobVMpID0gMTAwMCAqIChDb3VudGVyIC0gMHg0MCkgLyBXV0RHIGNsb2NrCiAgICAgKCspIFR5cGljYWwgdmFsdWVzOgotICAgICAgICAoKyspIENvdW50ZXIgbWluIChUWzU7MF0gPSAweDAwKSBANTYgTUh6KFBDTEsxKSB3aXRoIHplcm8gcHJlc2NhbGVyOgotICAgICAgICAgICAgIG1heCB0aW1lb3V0IGJlZm9yZSByZXNldDogYXBwcm94aW1hdGVseSA3My4xNCBtaWNyb3NlY29uZHMKLSAgICAgICAgKCsrKSBDb3VudGVyIG1heCAoVFs1OzBdID0gMHgzRikgQDU2IE1IeihQQ0xLMSkgd2l0aCBwcmVzY2FsZXIgZGl2aWRpbmcgYnkgMTI4OgotICAgICAgICAgICAgIG1heCB0aW1lb3V0IGJlZm9yZSByZXNldDogYXBwcm94aW1hdGVseSA1OTkuMTggbWlsbGlzZWNvbmRzCisgICAgICAgICgrKykgQ291bnRlciBtaW4gKFRbNTswXSA9IDB4MDApIEA2NCBNSHogKFBDTEsxKSB3aXRoIHplcm8gcHJlc2NhbGVyOgorICAgICAgICAgICAgIG1heCB0aW1lb3V0IGJlZm9yZSByZXNldDogYXBwcm94aW1hdGVseSA2NLVzCisgICAgICAgICgrKykgQ291bnRlciBtYXggKFRbNTswXSA9IDB4M0YpIEA2NCBNSHogKFBDTEsxKSB3aXRoIHByZXNjYWxlciBkaXZpZGluZyBieSAxMjg6CisgICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiBhcHByb3hpbWF0ZWx5IDUyNC4yOG1zCiAKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCkBAIC04NSwxMyArODUsMTMgQEAKIAogICAgIFsuLl0KICAgICBXaGVuIGNhbGxpbmcgQHJlZiBIQUxfV1dER19Jbml0IGZ1bmN0aW9uLCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZQotICAgIGNvcnJlc3BvbmRpbmcgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uczogCisgICAgY29ycmVzcG9uZGluZyBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zOgogICAgIEByZWYgSEFMX1dXREdfRWFybHlXYWtldXBDYWxsYmFjaygpIGFuZCBIQUxfV1dER19Nc3BJbml0KCkgb25seSBpZiB0aGV5IGhhdmUKICAgICBub3QgYmVlbiByZWdpc3RlcmVkIGJlZm9yZS4KIAogICAgIFsuLl0KICAgICBXaGVuIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX1dXREdfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCi0gICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RlcmluZyBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgCisgICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RlcmluZyBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUKICAgICBhbmQgd2VhayAoc3VyY2hhcmdlZCkgY2FsbGJhY2tzIGFyZSB1c2VkLgogCiAgICAgKioqIFdXREcgSEFMIGRyaXZlciBtYWNyb3MgbGlzdCAqKioKQEAgLTE0Myw4ICsxNDMsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIFdXREdfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLgotICoKKyAgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucy4KKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICMjIyMjIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMTgzLDEyICsxODMsMTIgQEAKIAogI2lmIChVU0VfSEFMX1dXREdfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIC8qIFJlc2V0IENhbGxiYWNrIHBvaW50ZXJzICovCi0gIGlmKGh3d2RnLT5Fd2lDYWxsYmFjayA9PSBOVUxMKQorICBpZiAoaHd3ZGctPkV3aUNhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICBod3dkZy0+RXdpQ2FsbGJhY2sgPSBIQUxfV1dER19FYXJseVdha2V1cENhbGxiYWNrOwogICB9CiAKLSAgaWYoaHd3ZGctPk1zcEluaXRDYWxsYmFjayA9PSBOVUxMKQorICBpZiAoaHd3ZGctPk1zcEluaXRDYWxsYmFjayA9PSBOVUxMKQogICB7CiAgICAgaHd3ZGctPk1zcEluaXRDYWxsYmFjayA9IEhBTF9XV0RHX01zcEluaXQ7CiAgIH0KQEAgLTI0NywxMyArMjQ3LDEzIEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICBpZihwQ2FsbGJhY2sgPT0gTlVMTCkKKyAgaWYgKHBDYWxsYmFjayA9PSBOVUxMKQogICB7CiAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICB9CiAgIGVsc2UKICAgewotICAgIHN3aXRjaChDYWxsYmFja0lEKQorICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7CiAgICAgICBjYXNlIEhBTF9XV0RHX0VXSV9DQl9JRDoKICAgICAgICAgaHd3ZGctPkV3aUNhbGxiYWNrID0gcENhbGxiYWNrOwpAQCAtMjc1LDcgKzI3NSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhIFdXREcgQ2FsbGJhY2sKLSAgKiAgICAgICAgIFdXREcgQ2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayAoc3VyY2hhcmdlZCkgcHJlZGVmaW5lZCBjYWxsYmFjayAKKyAgKiAgICAgICAgIFdXREcgQ2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayAoc3VyY2hhcmdlZCkgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSAgaHd3ZGcgV1dERyBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0yODcsNyArMjg3LDcgQEAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCi0gIHN3aXRjaChDYWxsYmFja0lEKQorICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgIHsKICAgICBjYXNlIEhBTF9XV0RHX0VXSV9DQl9JRDoKICAgICAgIGh3d2RnLT5Fd2lDYWxsYmFjayA9IEhBTF9XV0RHX0Vhcmx5V2FrZXVwQ2FsbGJhY2s7CkBAIC0zMTEsOCArMzExLDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBXV0RHX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwotICogIEBicmllZiAgICBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCi0gKgorICAqICBAYnJpZWYgICAgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucyAjIyMjIwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyd2J4eF9sbF91dGlscy5jIGIvU3JjL3N0bTMyd2J4eF9sbF91dGlscy5jCmluZGV4IGVjNTY4OTcuLmNlOWNiYzEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMndieHhfbGxfdXRpbHMuYworKysgYi9TcmMvc3RtMzJ3Ynh4X2xsX3V0aWxzLmMKQEAgLTYsMTEgKzYsMTEgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuIAorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLAotICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgCisgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQogICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQogICAqCkBAIC00Nyw5ICs0Nyw5IEBACiAjZW5kaWYKIAogLyogRGVmaW5lcyB1c2VkIGZvciBQTEwgcmFuZ2UgKi8KLSNkZWZpbmUgVVRJTFNfUExMVkNPX0lOUFVUX01JTiAgICAgIDQwMDAwMDBVICAgICAgICAgLyohPCBGcmVxdWVuY3kgbWluIGZvciBQTExWQ08gaW5wdXQsIGluIEh6ICAgKi8KLSNkZWZpbmUgVVRJTFNfUExMVkNPX0lOUFVUX01BWCAgICAgIDE2MDAwMDAwVSAgICAgICAgLyohPCBGcmVxdWVuY3kgbWF4IGZvciBQTExWQ08gaW5wdXQsIGluIEh6ICAgKi8KLSNkZWZpbmUgVVRJTFNfUExMVkNPX09VVFBVVF9NSU4gICAgIDY0MDAwMDAwVSAgICAgICAgLyohPCBGcmVxdWVuY3kgbWluIGZvciBQTExWQ08gb3V0cHV0LCBpbiBIeiAgKi8KKyNkZWZpbmUgVVRJTFNfUExMVkNPX0lOUFVUX01JTiAgICAgICAgMjY2MDAwMFUgICAgICAgLyohPCBGcmVxdWVuY3kgbWluIGZvciBQTExWQ08gaW5wdXQsIGluIEh6ICAgKi8KKyNkZWZpbmUgVVRJTFNfUExMVkNPX0lOUFVUX01BWCAgICAgICAxNjAwMDAwMFUgICAgICAgLyohPCBGcmVxdWVuY3kgbWF4IGZvciBQTExWQ08gaW5wdXQsIGluIEh6ICAgKi8KKyNkZWZpbmUgVVRJTFNfUExMVkNPX09VVFBVVF9NSU4gICAgICA5NjAwMDAwMFUgICAgICAgLyohPCBGcmVxdWVuY3kgbWluIGZvciBQTExWQ08gb3V0cHV0LCBpbiBIeiAgKi8KICNkZWZpbmUgVVRJTFNfUExMVkNPX09VVFBVVF9NQVggICAgIDM0NDAwMDAwMFUgICAgICAgLyohPCBGcmVxdWVuY3kgbWF4IGZvciBQTExWQ08gb3V0cHV0LCBpbiBIeiAgKi8KIAogLyogRGVmaW5lcyB1c2VkIGZvciBIQ0xLMiBmcmVxdWVuY3kgY2hlY2sgKi8KQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUkNDX1BMTE1fRElWXzcpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUkNDX1BMTE1fRElWXzgpKQogCi0jZGVmaW5lIElTX0xMX1VUSUxTX1BMTE5fVkFMVUUoX19WQUxVRV9fKSAoKDhVIDw9IChfX1ZBTFVFX18pKSAmJiAoKF9fVkFMVUVfXykgPD0gODZVKSkKKyNkZWZpbmUgSVNfTExfVVRJTFNfUExMTl9WQUxVRShfX1ZBTFVFX18pICgoNlUgPD0gKF9fVkFMVUVfXykpICYmICgoX19WQUxVRV9fKSA8PSAxMjdVKSkKIAogI2RlZmluZSBJU19MTF9VVElMU19QTExSX1ZBTFVFKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfUExMUl9ESVZfMikgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfUExMUl9ESVZfMykgXApAQCAtMTMxLDEwICsxMzEsMTAgQEAKIC8qKiBAZGVmZ3JvdXAgVVRJTFNfTExfUHJpdmF0ZV9GdW5jdGlvbnMgVVRJTFMgUHJpdmF0ZSBmdW5jdGlvbnMKICAgKiBAewogICAqLwotICBzdGF0aWMgdWludDMyX3QgICAgVVRJTFNfR2V0UExMT3V0cHV0RnJlcXVlbmN5KHVpbnQzMl90IFBMTF9JbnB1dEZyZXF1ZW5jeSxMTF9VVElMU19QTExJbml0VHlwZURlZiAqVVRJTFNfUExMSW5pdFN0cnVjdCk7Ci0gIHN0YXRpYyBFcnJvclN0YXR1cyBVVElMU19TZXRGbGFzaExhdGVuY3kodWludDMyX3QgSENMSzRfRnJlcXVlbmN5KTsKLSAgc3RhdGljIEVycm9yU3RhdHVzIFVUSUxTX0VuYWJsZVBMTEFuZFN3aXRjaFN5c3RlbSh1aW50MzJfdCBTWVNDTEtfRnJlcXVlbmN5LCBMTF9VVElMU19DbGtJbml0VHlwZURlZiAqVVRJTFNfQ2xrSW5pdFN0cnVjdCk7Ci0gIHN0YXRpYyBFcnJvclN0YXR1cyBVVElMU19QTExfSXNCdXN5KHZvaWQpOworc3RhdGljIHVpbnQzMl90ICAgIFVUSUxTX0dldFBMTE91dHB1dEZyZXF1ZW5jeSh1aW50MzJfdCBQTExfSW5wdXRGcmVxdWVuY3ksIExMX1VUSUxTX1BMTEluaXRUeXBlRGVmICpVVElMU19QTExJbml0U3RydWN0KTsKK3N0YXRpYyBFcnJvclN0YXR1cyBVVElMU19TZXRGbGFzaExhdGVuY3kodWludDMyX3QgSENMSzRfRnJlcXVlbmN5KTsKK3N0YXRpYyBFcnJvclN0YXR1cyBVVElMU19FbmFibGVQTExBbmRTd2l0Y2hTeXN0ZW0odWludDMyX3QgU1lTQ0xLX0ZyZXF1ZW5jeSwgTExfVVRJTFNfQ2xrSW5pdFR5cGVEZWYgKlVUSUxTX0Nsa0luaXRTdHJ1Y3QpOworc3RhdGljIEVycm9yU3RhdHVzIFVUSUxTX1BMTF9Jc0J1c3kodm9pZCk7CiAKIC8qKgogICAqIEB9CkBAIC0yMTAsMTAgKzIxMCwxMCBAQAogICAgIFsuLl0KICAgICAgICAgIFN5c3RlbSwgSENMSzEsIEhDTEsyLCBBSEJTLCBBSEJSRiBhbmQgQVBCIGJ1c2VzIGNsb2NrcyBjb25maWd1cmF0aW9uCiAKLSAgICAgICAgICgrKSBUaGUgbWF4aW11bSBmcmVxdWVuY3kgb2YgdGhlIFNZU0NMSywgSENMSzEsIEhDTEs0LCBQQ0xLMSBhbmQgUENMSzIgCisgICAgICAgICAoKykgVGhlIG1heGltdW0gZnJlcXVlbmN5IG9mIHRoZSBTWVNDTEssIEhDTEsxLCBIQ0xLNCwgUENMSzEgYW5kIFBDTEsyCiAgICAgICAgICAgICAgaXMgNjQwMDAwMDAwIEh6LgogIC4uLi4uLi4gKCspIFRoZSBtYXhpbXVtIGZyZXF1ZW5jeSBvZiB0aGUgSENMSzIgaXMgMzIwMDAwMDAwIEh6LgotICAgICAgICAgICAgIAorCiAgIEBlbmR2ZXJiYXRpbQogICBAaW50ZXJuYWwKICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIGRldmljZSB2b2x0YWdlIHJhbmdlLCB0aGUgbWF4aW11bSBmcmVxdWVuY3kgc2hvdWxkIGJlCkBAIC0yMzYsNyArMjM2LDcgQEAKICAgQGVuZGludGVybmFsCiAgICogQHsKICAgKi8KLSAgCisKIC8qKgogICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBzZXRzIGRpcmVjdGx5IFN5c3RlbUNvcmVDbG9jayBDTVNJUyB2YXJpYWJsZS4KICAgKiBAbm90ZSAgIFZhcmlhYmxlIGNhbiBiZSBjYWxjdWxhdGVkIGFsc28gdGhyb3VnaCBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUgZnVuY3Rpb24uCkBAIC0yNTcsOCArMjU3LDggQEAKICAgKiBAbm90ZSAgIFRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byBlbnN1cmUgdGhhdCBCVVMgcHJlc2NhbGVycyBhcmUgdmFsaWQKICAgKiBAbm90ZSAgIEZ1bmN0aW9uIGlzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgZm9ybXVsYToKICAgKiAgICAgICAgIC0gUExMIG91dHB1dCBmcmVxdWVuY3kgPSAoKChNU0kgZnJlcXVlbmN5IC8gUExMTSkgKiBQTExOKSAvIFBMTFIpCi0gICogICAgICAgICAtIFBMTE06IGVuc3VyZSB0aGF0IHRoZSBWQ08gaW5wdXQgZnJlcXVlbmN5IHJhbmdlcyBmcm9tIDQgdG8gMTYgTUh6IChQTExWQ09faW5wdXQgPSBNU0kgZnJlcXVlbmN5IC8gUExMTSkKLSAgKiAgICAgICAgIC0gUExMTjogZW5zdXJlIHRoYXQgdGhlIFZDTyBvdXRwdXQgZnJlcXVlbmN5IGlzIGJldHdlZW4gNjQgYW5kIDM0NCBNSHogKFBMTFZDT19vdXRwdXQgPSBQTExWQ09faW5wdXQgKiBQTExOKQorICAqICAgICAgICAgLSBQTExNOiBlbnN1cmUgdGhhdCB0aGUgVkNPIGlucHV0IGZyZXF1ZW5jeSByYW5nZXMgZnJvbSAyLjY2IHRvIDE2IE1IeiAoUExMVkNPX2lucHV0ID0gTVNJIGZyZXF1ZW5jeSAvIFBMTE0pCisgICogICAgICAgICAtIFBMTE46IGVuc3VyZSB0aGF0IHRoZSBWQ08gb3V0cHV0IGZyZXF1ZW5jeSBpcyBiZXR3ZWVuIDk2IGFuZCAzNDQgTUh6IChQTExWQ09fb3V0cHV0ID0gUExMVkNPX2lucHV0ICogUExMTikKICAgKiAgICAgICAgIC0gUExMUjogZW5zdXJlIHRoYXQgbWF4IGZyZXF1ZW5jeSBhdCA2NDAwMDAwMCBIeiBpcyByZWFjaGVkIChQTExWQ09fb3V0cHV0IC8gUExMUikKICAgKiBAcGFyYW0gIFVUSUxTX1BMTEluaXRTdHJ1Y3QgcG9pbnRlciB0byBhIEByZWYgTExfVVRJTFNfUExMSW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBQTEwuCkBAIC0yNzUsNyArMjc1LDcgQEAKICAgdWludDMyX3QgcGxscmZyZXEsIGhjbGsyZnJlcSwgbXNpX3JhbmdlOwogCiAgIC8qIENoZWNrIGlmIG9uZSBvZiB0aGUgUExMIGlzIGVuYWJsZWQgKi8KLSAgaWYoVVRJTFNfUExMX0lzQnVzeSgpID09IFNVQ0NFU1MpCisgIGlmIChVVElMU19QTExfSXNCdXN5KCkgPT0gU1VDQ0VTUykKICAgewogICAgIC8qIEdldCB0aGUgY3VycmVudCBNU0kgcmFuZ2UgJiBjaGVjayBjb2hlcmVuY3kgKi8KICAgICBtc2lfcmFuZ2UgPSAgTExfUkNDX01TSV9HZXRSYW5nZSgpOwpAQCAtMjg3LDcgKzI4Nyw3IEBACiAgICAgICBjYXNlIExMX1JDQ19NU0lSQU5HRV8zOiAgICAgLyogTVNJID0gODAwIEtIeiAgKi8KICAgICAgIGNhc2UgTExfUkNDX01TSVJBTkdFXzQ6ICAgICAvKiBNU0kgPSAxIE1IeiAgICAqLwogICAgICAgY2FzZSBMTF9SQ0NfTVNJUkFOR0VfNTogICAgIC8qIE1TSSA9IDIgTUh6ICAgICovCi0gICAgICAgIC8qIFBMTFZDTyBpbnB1dCBmcmVxdWVuY3kgY2FuIG5vdCBpbiB0aGUgcmFuZ2UgZnJvbSA0IHRvIDE2IE1IeiovCisgICAgICAgIC8qIFBMTFZDTyBpbnB1dCBmcmVxdWVuY3kgY2FuIG5vdCBpbiB0aGUgcmFuZ2UgZnJvbSAyLjY2IHRvIDE2IE1IeiovCiAgICAgICAgIHN0YXR1cyA9IEVSUk9SOwogICAgICAgICBicmVhazsKIApAQCAtMzA0LDkgKzMwNCw5IEBACiAKICAgICAvKiBQTEwgaXMgcmVhZHksIE1TSSByYW5nZSBpcyB2YWxpZCBhbmQgSENMSzIgZnJlcXVlbmN5IGlzIGNvaGVyZW50CiAgICAgICAgTWFpbiBQTEwgY29uZmlndXJhdGlvbiBhbmQgYWN0aXZhdGlvbiAqLwotICAgIGlmKHN0YXR1cyAhPSBFUlJPUikKKyAgICBpZiAoc3RhdHVzICE9IEVSUk9SKQogICAgIHsKLSAgICAgIC8qIENhbGN1bGF0ZSB0aGUgbmV3IFBMTCBvdXRwdXQgZnJlcXVlbmN5ICYgdmVyaWZ5IGFsbCBQTEwgc3RhZ2VzIGFyZSBjb3JyZWN0IChWQ08gaW5wdXQgcmFuZ2VzLCAKKyAgICAgIC8qIENhbGN1bGF0ZSB0aGUgbmV3IFBMTCBvdXRwdXQgZnJlcXVlbmN5ICYgdmVyaWZ5IGFsbCBQTEwgc3RhZ2VzIGFyZSBjb3JyZWN0IChWQ08gaW5wdXQgcmFuZ2VzLAogICAgICAgICAgVkNPIG91dHB1dCByYW5nZXMgJiBTWVNDTEsgbWF4KSB3aGVuIGFzc2VydCBhY3RpdmF0ZWQgKi8KICAgICAgIHBsbHJmcmVxID0gVVRJTFNfR2V0UExMT3V0cHV0RnJlcXVlbmN5KF9fTExfUkNDX0NBTENfTVNJX0ZSRVEobXNpX3JhbmdlKSwgVVRJTFNfUExMSW5pdFN0cnVjdCk7CiAgICAgICBoY2xrMmZyZXEgPSBfX0xMX1JDQ19DQUxDX0hDTEsyX0ZSRVEocGxscmZyZXEsIFVUSUxTX0Nsa0luaXRTdHJ1Y3QtPkNQVTJDTEtEaXZpZGVyKTsKQEAgLTMyMSw3ICszMjEsNyBAQAogICAgICAgewogCiAgICAgICAgIC8qIEVuYWJsZSBNU0kgaWYgbm90IGVuYWJsZWQgKi8KLSAgICAgICAgaWYoTExfUkNDX01TSV9Jc1JlYWR5KCkgIT0gMVUpCisgICAgICAgIGlmIChMTF9SQ0NfTVNJX0lzUmVhZHkoKSAhPSAxVSkKICAgICAgICAgewogICAgICAgICAgIExMX1JDQ19NU0lfRW5hYmxlKCk7CiAgICAgICAgICAgd2hpbGUgKChMTF9SQ0NfTVNJX0lzUmVhZHkoKSAhPSAxVSkpCkBAIC0zNTUsOCArMzU1LDggQEAKICAgKiBAbm90ZSAgIFRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byBlbnN1cmUgdGhhdCBCVVMgcHJlc2NhbGVycyBhcmUgdmFsaWQKICAgKiBAbm90ZSAgIEZ1bmN0aW9uIGlzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgZm9ybXVsYToKICAgKiAgICAgICAgIC0gUExMIG91dHB1dCBmcmVxdWVuY3kgPSAoKChIU0kgZnJlcXVlbmN5IC8gUExMTSkgKiBQTExOKSAvIFBMTFIpCi0gICogICAgICAgICAtIFBMTE06IGVuc3VyZSB0aGF0IHRoZSBWQ08gaW5wdXQgZnJlcXVlbmN5IHJhbmdlcyBmcm9tIDQgdG8gMTYgTUh6IChQTExWQ09faW5wdXQgPSBIU0kgZnJlcXVlbmN5IC8gUExMTSkKLSAgKiAgICAgICAgIC0gUExMTjogZW5zdXJlIHRoYXQgdGhlIFZDTyBvdXRwdXQgZnJlcXVlbmN5IGlzIGJldHdlZW4gNjQgYW5kIDM0NCBNSHogKFBMTFZDT19vdXRwdXQgPSBQTExWQ09faW5wdXQgKiBQTExOKQorICAqICAgICAgICAgLSBQTExNOiBlbnN1cmUgdGhhdCB0aGUgVkNPIGlucHV0IGZyZXF1ZW5jeSByYW5nZXMgZnJvbSAyLjY2IHRvIDE2IE1IeiAoUExMVkNPX2lucHV0ID0gSFNJIGZyZXF1ZW5jeSAvIFBMTE0pCisgICogICAgICAgICAtIFBMTE46IGVuc3VyZSB0aGF0IHRoZSBWQ08gb3V0cHV0IGZyZXF1ZW5jeSBpcyBiZXR3ZWVuIDk2IGFuZCAzNDQgTUh6IChQTExWQ09fb3V0cHV0ID0gUExMVkNPX2lucHV0ICogUExMTikKICAgKiAgICAgICAgIC0gUExMUjogZW5zdXJlIHRoYXQgbWF4IGZyZXF1ZW5jeSBhdCA2NDAwMDAwMCBIeiBpcyByZWFjaCAoUExMVkNPX291dHB1dCAvIFBMTFIpCiAgICogQHBhcmFtICBVVElMU19QTExJbml0U3RydWN0IHBvaW50ZXIgdG8gYSBAcmVmIExMX1VUSUxTX1BMTEluaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgUExMLgpAQCAtMzczLDcgKzM3Myw3IEBACiAgIHVpbnQzMl90IHBsbHJmcmVxLCBoY2xrMmZyZXE7CiAKICAgLyogQ2hlY2sgaWYgb25lIG9mIHRoZSBQTEwgaXMgZW5hYmxlZCAqLwotICBpZihVVElMU19QTExfSXNCdXN5KCkgPT0gU1VDQ0VTUykKKyAgaWYgKFVUSUxTX1BMTF9Jc0J1c3koKSA9PSBTVUNDRVNTKQogICB7CiAgICAgLyogQ2FsY3VsYXRlIHRoZSBuZXcgUExMIG91dHB1dCBmcmVxdWVuY3kgKi8KICAgICBwbGxyZnJlcSA9IFVUSUxTX0dldFBMTE91dHB1dEZyZXF1ZW5jeShIU0lfVkFMVUUsIFVUSUxTX1BMTEluaXRTdHJ1Y3QpOwpAQCAtMzg4LDcgKzM4OCw3IEBACiAgICAgZWxzZQogICAgIHsKICAgICAgIC8qIEVuYWJsZSBIU0kgaWYgbm90IGVuYWJsZWQgKi8KLSAgICAgIGlmKExMX1JDQ19IU0lfSXNSZWFkeSgpICE9IDFVKQorICAgICAgaWYgKExMX1JDQ19IU0lfSXNSZWFkeSgpICE9IDFVKQogICAgICAgewogICAgICAgICBMTF9SQ0NfSFNJX0VuYWJsZSgpOwogICAgICAgICB3aGlsZSAoTExfUkNDX0hTSV9Jc1JlYWR5KCkgIT0gMVUpCkBAIC00MDAsNyArNDAwLDcgQEAKICAgICAgIC8qIENvbmZpZ3VyZSBQTEwgKi8KICAgICAgIExMX1JDQ19QTExfQ29uZmlnRG9tYWluX1NZUyhMTF9SQ0NfUExMU09VUkNFX0hTSSwgVVRJTFNfUExMSW5pdFN0cnVjdC0+UExMTSwgVVRJTFNfUExMSW5pdFN0cnVjdC0+UExMTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVElMU19QTExJbml0U3RydWN0LT5QTExSKTsKLSAgICAKKwogICAgICAgLyogRW5hYmxlIFBMTCBhbmQgc3dpdGNoIHN5c3RlbSBjbG9jayB0byBQTEwgKi8KICAgICAgIHN0YXR1cyA9IFVUSUxTX0VuYWJsZVBMTEFuZFN3aXRjaFN5c3RlbShwbGxyZnJlcSwgVVRJTFNfQ2xrSW5pdFN0cnVjdCk7CiAgICAgfQpAQCAtNDIxLDggKzQyMSw4IEBACiAgICogQG5vdGUgICBUaGUgYXBwbGljYXRpb24gbmVlZHMgdG8gZW5zdXJlIHRoYXQgQlVTIHByZXNjYWxlcnMgYXJlIHZhbGlkCiAgICogQG5vdGUgICBGdW5jdGlvbiBpcyBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIGZvcm11bGE6CiAgICogICAgICAgICAtIFBMTCBvdXRwdXQgZnJlcXVlbmN5ID0gKCgoSFNFIGZyZXF1ZW5jeSAvIFBMTE0pICogUExMTikgLyBQTExSKQotICAqICAgICAgICAgLSBQTExNOiBlbnN1cmUgdGhhdCB0aGUgVkNPIGlucHV0IGZyZXF1ZW5jeSByYW5nZXMgZnJvbSA0IHRvIDE2IE1IeiAoUExMVkNPX2lucHV0ID0gSFNFIGZyZXF1ZW5jeSAvIFBMTE0pCi0gICogICAgICAgICAtIFBMTE46IGVuc3VyZSB0aGF0IHRoZSBWQ08gb3V0cHV0IGZyZXF1ZW5jeSBpcyBiZXR3ZWVuIDY0IGFuZCAzNDQgTUh6IChQTExWQ09fb3V0cHV0ID0gUExMVkNPX2lucHV0ICogUExMTikKKyAgKiAgICAgICAgIC0gUExMTTogZW5zdXJlIHRoYXQgdGhlIFZDTyBpbnB1dCBmcmVxdWVuY3kgcmFuZ2VzIGZyb20gMi42NiB0byAxNiBNSHogKFBMTFZDT19pbnB1dCA9IEhTRSBmcmVxdWVuY3kgLyBQTExNKQorICAqICAgICAgICAgLSBQTExOOiBlbnN1cmUgdGhhdCB0aGUgVkNPIG91dHB1dCBmcmVxdWVuY3kgaXMgYmV0d2VlbiA5NiBhbmQgMzQ0IE1IeiAoUExMVkNPX291dHB1dCA9IFBMTFZDT19pbnB1dCAqIFBMTE4pCiAgICogICAgICAgICAtIFBMTFI6IGVuc3VyZSB0aGF0IG1heCBmcmVxdWVuY3kgYXQgNjQwMDAwMDAgSHogaXMgcmVhY2hlZCAoUExMVkNPX291dHB1dCAvIFBMTFIpCiAgICogQHBhcmFtICBIU0VCeXBhc3MgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VVElMU19IU0VCWVBBU1NfT04KQEAgLTQzNSw3ICs0MzUsNyBAQAogICAqICAgICAgICAgIC0gU1VDQ0VTUzogTWF4IGZyZXF1ZW5jeSBjb25maWd1cmF0aW9uIGRvbmUKICAgKiAgICAgICAgICAtIEVSUk9SOiBNYXggZnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24gbm90IGRvbmUKICAgKi8KLUVycm9yU3RhdHVzIExMX1BMTF9Db25maWdTeXN0ZW1DbG9ja19IU0UodWludDMyX3QgSFNFQnlwYXNzLExMX1VUSUxTX1BMTEluaXRUeXBlRGVmICpVVElMU19QTExJbml0U3RydWN0LCBMTF9VVElMU19DbGtJbml0VHlwZURlZiAqVVRJTFNfQ2xrSW5pdFN0cnVjdCkKK0Vycm9yU3RhdHVzIExMX1BMTF9Db25maWdTeXN0ZW1DbG9ja19IU0UodWludDMyX3QgSFNFQnlwYXNzLCBMTF9VVElMU19QTExJbml0VHlwZURlZiAqVVRJTFNfUExMSW5pdFN0cnVjdCwgTExfVVRJTFNfQ2xrSW5pdFR5cGVEZWYgKlVUSUxTX0Nsa0luaXRTdHJ1Y3QpCiB7CiAgIEVycm9yU3RhdHVzIHN0YXR1czsKICAgdWludDMyX3QgcGxscmZyZXEsIGhjbGsyZnJlcTsKQEAgLTQ0NCw3ICs0NDQsNyBAQAogICBhc3NlcnRfcGFyYW0oSVNfTExfVVRJTFNfSFNFX0JZUEFTUyhIU0VCeXBhc3MpKTsKIAogICAvKiBDaGVjayBpZiBvbmUgb2YgdGhlIFBMTCBpcyBlbmFibGVkICovCi0gIGlmKFVUSUxTX1BMTF9Jc0J1c3koKSA9PSBTVUNDRVNTKQorICBpZiAoVVRJTFNfUExMX0lzQnVzeSgpID09IFNVQ0NFU1MpCiAgIHsKICAgICAvKiBDYWxjdWxhdGUgdGhlIG5ldyBQTEwgb3V0cHV0IGZyZXF1ZW5jeSAqLwogICAgIHBsbHJmcmVxID0gVVRJTFNfR2V0UExMT3V0cHV0RnJlcXVlbmN5KEhTRV9WQUxVRSwgVVRJTFNfUExMSW5pdFN0cnVjdCk7CkBAIC00NjAsMTAgKzQ2MCwxMCBAQAogICAgIHsKIAogICAgICAgLyogRW5hYmxlIEhTRSBpZiBub3QgZW5hYmxlZCAqLwotICAgICAgaWYoTExfUkNDX0hTRV9Jc1JlYWR5KCkgIT0gMVUpCisgICAgICBpZiAoTExfUkNDX0hTRV9Jc1JlYWR5KCkgIT0gMVUpCiAgICAgICB7CiAgICAgICAgIC8qIENoZWNrIGlmIG5lZWQgdG8gZW5hYmxlIEhTRSBieXBhc3MgZmVhdHVyZSBvciBub3QgKi8KLSAgICAgICAgaWYoSFNFQnlwYXNzID09IExMX1VUSUxTX0hTRUJZUEFTU19PTikKKyAgICAgICAgaWYgKEhTRUJ5cGFzcyA9PSBMTF9VVElMU19IU0VCWVBBU1NfT04pCiAgICAgICAgIHsKICAgICAgICAgICBMTF9SQ0NfSFNFX0VuYWJsZUJ5cGFzcygpOwogICAgICAgICB9CkBAIC01MjgsMjcgKzUyOCwyNyBAQAogICAvKiBGbGFzaCBDbG9jayBzb3VyY2UgKEhDTEs0KSByYW5nZSBpbiBNSHogd2l0aCBhIFZDT1JFIGlzIHJhbmdlMSAqLwogICBjb25zdCB1aW50MzJfdCBVVElMU19DTEtfU1JDX1JBTkdFX1ZPUzFbXSA9IHsxODAwMDAwMFUsIDM2MDAwMDAwVSwgNTQwMDAwMDBVLCBVVElMU19NQVhfRlJFUVVFTkNZX1NDQUxFMX07CiAKLSAgI2lmIGRlZmluZWQoUFdSX0NSMV9WT1MpCisjaWYgZGVmaW5lZChQV1JfQ1IxX1ZPUykKICAgLyogRmxhc2ggQ2xvY2sgc291cmNlIChIQ0xLNCkgcmFuZ2UgaW4gTUh6IHdpdGggYSBWQ09SRSBpcyByYW5nZTIgKi8KICAgY29uc3QgdWludDMyX3QgVVRJTFNfQ0xLX1NSQ19SQU5HRV9WT1MyW10gPSB7NjAwMDAwMFUsIDEyMDAwMDAwVSwgVVRJTFNfTUFYX0ZSRVFVRU5DWV9TQ0FMRTJ9OwotICAjZW5kaWYKLSAgCisjZW5kaWYKKwogICAvKiBGbGFzaCBMYXRlbmN5IHJhbmdlICovCiAgIGNvbnN0IHVpbnQzMl90IFVUSUxTX0xBVEVOQ1lfUkFOR0VbXSA9IHtMTF9GTEFTSF9MQVRFTkNZXzAsIExMX0ZMQVNIX0xBVEVOQ1lfMSwgTExfRkxBU0hfTEFURU5DWV8yLCBMTF9GTEFTSF9MQVRFTkNZXzN9OwogCiAgIC8qIEZyZXF1ZW5jeSBjYW5ub3QgYmUgZXF1YWwgdG8gMCAqLwotICBpZihIQ0xLNF9GcmVxdWVuY3kgPT0gMFUpCisgIGlmIChIQ0xLNF9GcmVxdWVuY3kgPT0gMFUpCiAgIHsKICAgICBzdGF0dXMgPSBFUlJPUjsKICAgfQogICBlbHNlCiAgIHsKLSAgICAjaWYgZGVmaW5lZChQV1JfQ1IxX1ZPUykKLSAgICBpZihMTF9QV1JfR2V0UmVndWxWb2x0YWdlU2NhbGluZygpID09IExMX1BXUl9SRUdVX1ZPTFRBR0VfU0NBTEUxKQorI2lmIGRlZmluZWQoUFdSX0NSMV9WT1MpCisgICAgaWYgKExMX1BXUl9HZXRSZWd1bFZvbHRhZ2VTY2FsaW5nKCkgPT0gTExfUFdSX1JFR1VfVk9MVEFHRV9TQ0FMRTEpCiAgICAgewotICAgICAgZm9yKGluZGV4ID0gMDsgaW5kZXggPCBjb3VudG9mKFVUSUxTX0NMS19TUkNfUkFOR0VfVk9TMSk7IGluZGV4KyspCisgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjb3VudG9mKFVUSUxTX0NMS19TUkNfUkFOR0VfVk9TMSk7IGluZGV4KyspCiAgICAgICB7Ci0gICAgICAgIGlmKEhDTEs0X0ZyZXF1ZW5jeSA8PSBVVElMU19DTEtfU1JDX1JBTkdFX1ZPUzFbaW5kZXhdKQorICAgICAgICBpZiAoSENMSzRfRnJlcXVlbmN5IDw9IFVUSUxTX0NMS19TUkNfUkFOR0VfVk9TMVtpbmRleF0pCiAgICAgICAgIHsKICAgICAgICAgICBsYXRlbmN5ID0gVVRJTFNfTEFURU5DWV9SQU5HRVtpbmRleF07CiAgICAgICAgICAgYnJlYWs7CkBAIC01NTcsMjUgKzU1NywyNSBAQAogICAgIH0KICAgICBlbHNlIC8qIFNDQUxFMiAqLwogICAgIHsKLSAgICAgIGZvcihpbmRleCA9IDA7IGluZGV4IDwgY291bnRvZihVVElMU19DTEtfU1JDX1JBTkdFX1ZPUzIpOyBpbmRleCsrKQorICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY291bnRvZihVVElMU19DTEtfU1JDX1JBTkdFX1ZPUzIpOyBpbmRleCsrKQogICAgICAgewotICAgICAgICBpZihIQ0xLNF9GcmVxdWVuY3kgPD0gVVRJTFNfQ0xLX1NSQ19SQU5HRV9WT1MyW2luZGV4XSkKKyAgICAgICAgaWYgKEhDTEs0X0ZyZXF1ZW5jeSA8PSBVVElMU19DTEtfU1JDX1JBTkdFX1ZPUzJbaW5kZXhdKQogICAgICAgICB7CiAgICAgICAgICAgbGF0ZW5jeSA9IFVUSUxTX0xBVEVOQ1lfUkFOR0VbaW5kZXhdOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQotICAgICNlbHNlCi0gICAgZm9yKGluZGV4ID0gMDsgaW5kZXggPCBjb3VudG9mKFVUSUxTX0NMS19TUkNfUkFOR0VfVk9TMSk7IGluZGV4KyspCisjZWxzZQorICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGNvdW50b2YoVVRJTFNfQ0xLX1NSQ19SQU5HRV9WT1MxKTsgaW5kZXgrKykKICAgICB7Ci0gICAgICBpZihIQ0xLNF9GcmVxdWVuY3kgPD0gVVRJTFNfQ0xLX1NSQ19SQU5HRV9WT1MxW2luZGV4XSkKKyAgICAgIGlmIChIQ0xLNF9GcmVxdWVuY3kgPD0gVVRJTFNfQ0xLX1NSQ19SQU5HRV9WT1MxW2luZGV4XSkKICAgICAgIHsKICAgICAgICAgbGF0ZW5jeSA9IFVUSUxTX0xBVEVOQ1lfUkFOR0VbaW5kZXhdOwogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9Ci0gICAgI2VuZGlmCisjZW5kaWYKIAogICAgIExMX0ZMQVNIX1NldExhdGVuY3kobGF0ZW5jeSk7CiAKQEAgLTYwNSwxMSArNjA1LDExIEBACiAgIGFzc2VydF9wYXJhbShJU19MTF9VVElMU19QTExSX1ZBTFVFKFVUSUxTX1BMTEluaXRTdHJ1Y3QtPlBMTFIpKTsKIAogICAvKiBDaGVjayBkaWZmZXJlbnQgUExMIHBhcmFtZXRlcnMgYWNjb3JkaW5nIHRvIFJNICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgLSBQTExNOiBlbnN1cmUgdGhhdCB0aGUgVkNPIGlucHV0IGZyZXF1ZW5jeSByYW5nZXMgZnJvbSA0IHRvIDE2IE1Iei4gICAqLworICAvKiAgLSBQTExNOiBlbnN1cmUgdGhhdCB0aGUgVkNPIGlucHV0IGZyZXF1ZW5jeSByYW5nZXMgZnJvbSAyLjY2IHRvIDE2IE1Iei4gICAqLwogICBwbGxmcmVxID0gUExMX0lucHV0RnJlcXVlbmN5IC8gKCgoVVRJTFNfUExMSW5pdFN0cnVjdC0+UExMTSA+PiBSQ0NfUExMQ0ZHUl9QTExNX1BvcykgKyAxVSkpOwogICBhc3NlcnRfcGFyYW0oSVNfTExfVVRJTFNfUExMVkNPX0lOUFVUKHBsbGZyZXEpKTsKIAotICAvKiAgLSBQTExOOiBlbnN1cmUgdGhhdCB0aGUgVkNPIG91dHB1dCBmcmVxdWVuY3kgaXMgYmV0d2VlbiA2NCBhbmQgMzQ0IE1Iei4qLworICAvKiAgLSBQTExOOiBlbnN1cmUgdGhhdCB0aGUgVkNPIG91dHB1dCBmcmVxdWVuY3kgaXMgYmV0d2VlbiA5NiBhbmQgMzQ0IE1Iei4qLwogICBwbGxmcmVxID0gcGxsZnJlcSAqIChVVElMU19QTExJbml0U3RydWN0LT5QTExOICYgKFJDQ19QTExDRkdSX1BMTE4gPj4gUkNDX1BMTENGR1JfUExMTl9Qb3MpKTsKICAgYXNzZXJ0X3BhcmFtKElTX0xMX1VUSUxTX1BMTFZDT19PVVRQVVQocGxsZnJlcSkpOwogCkBAIC02MzEsMTQgKzYzMSwxNCBAQAogICBFcnJvclN0YXR1cyBzdGF0dXMgPSBTVUNDRVNTOwogCiAgIC8qIENoZWNrIGlmIFBMTCBpcyBidXN5Ki8KLSAgaWYoTExfUkNDX1BMTF9Jc1JlYWR5KCkgIT0gMFUpCisgIGlmIChMTF9SQ0NfUExMX0lzUmVhZHkoKSAhPSAwVSkKICAgewogICAgIC8qIFBMTCBjb25maWd1cmF0aW9uIGNhbm5vdCBiZSBtb2RpZmllZCAqLwogICAgIHN0YXR1cyA9IEVSUk9SOwogICB9CiAjaWYgZGVmaW5lZChTQUkxKQogICAvKiBDaGVjayBpZiBQTExTQUkxIGlzIGJ1c3kqLwotICBpZihMTF9SQ0NfUExMU0FJMV9Jc1JlYWR5KCkgIT0gMFUpCisgIGlmIChMTF9SQ0NfUExMU0FJMV9Jc1JlYWR5KCkgIT0gMFUpCiAgIHsKICAgICAvKiBQTExTQUkxIGNvbmZpZ3VyYXRpb24gY2Fubm90IGJlIG1vZGlmaWVkICovCiAgICAgc3RhdHVzID0gRVJST1I7CkBAIC02NzYsMTQgKzY3NiwxNCBAQAogICBoY2xrc19mcmVxdWVuY3lfY3VycmVudCA9IF9fTExfUkNDX0NBTENfSENMSzRfRlJFUShzeXNjbGtfY3VycmVudCwgTExfUkNDX0dldEFIQjRQcmVzY2FsZXIoKSk7CiAKICAgLyogSW5jcmVhc2luZyB0aGUgbnVtYmVyIG9mIHdhaXQgc3RhdGVzIGJlY2F1c2Ugb2YgaGlnaGVyIENQVSBmcmVxdWVuY3kgKi8KLSAgaWYoaGNsa3NfZnJlcXVlbmN5X2N1cnJlbnQgPCBoY2xrc19mcmVxdWVuY3lfdGFyZ2V0KQorICBpZiAoaGNsa3NfZnJlcXVlbmN5X2N1cnJlbnQgPCBoY2xrc19mcmVxdWVuY3lfdGFyZ2V0KQogICB7CiAgICAgLyogU2V0IEZMQVNIIGxhdGVuY3kgdG8gaGlnaGVzdCBsYXRlbmN5ICovCiAgICAgc3RhdHVzID0gVVRJTFNfU2V0Rmxhc2hMYXRlbmN5KGhjbGtzX2ZyZXF1ZW5jeV90YXJnZXQpOwogICB9CiAKICAgLyogVXBkYXRlIHN5c3RlbSBjbG9jayBjb25maWd1cmF0aW9uICovCi0gIGlmKHN0YXR1cyA9PSBTVUNDRVNTKQorICBpZiAoc3RhdHVzID09IFNVQ0NFU1MpCiAgIHsKICAgICAvKiBFbmFibGUgUExMICovCiAgICAgTExfUkNDX1BMTF9FbmFibGUoKTsKQEAgLTcwNywxNiArNzA3LDE2IEBACiAgICAgTExfUkNDX1NldEFQQjFQcmVzY2FsZXIoVVRJTFNfQ2xrSW5pdFN0cnVjdC0+QVBCMUNMS0RpdmlkZXIpOwogICAgIExMX1JDQ19TZXRBUEIyUHJlc2NhbGVyKFVUSUxTX0Nsa0luaXRTdHJ1Y3QtPkFQQjJDTEtEaXZpZGVyKTsKICAgfQotICAgIAorCiAgIC8qIERlY3JlYXNpbmcgdGhlIG51bWJlciBvZiB3YWl0IHN0YXRlcyBiZWNhdXNlIG9mIGxvd2VyIENQVSBmcmVxdWVuY3kgKi8KLSAgaWYoaGNsa3NfZnJlcXVlbmN5X2N1cnJlbnQgPiBoY2xrc19mcmVxdWVuY3lfdGFyZ2V0KQorICBpZiAoaGNsa3NfZnJlcXVlbmN5X2N1cnJlbnQgPiBoY2xrc19mcmVxdWVuY3lfdGFyZ2V0KQogICB7CiAgICAgLyogU2V0IEZMQVNIIGxhdGVuY3kgdG8gbG93ZXN0IGxhdGVuY3kgKi8KICAgICBzdGF0dXMgPSBVVElMU19TZXRGbGFzaExhdGVuY3koaGNsa3NfZnJlcXVlbmN5X3RhcmdldCk7CiAgIH0KIAogICAvKiBVcGRhdGUgU3lzdGVtQ29yZUNsb2NrIHZhcmlhYmxlICovCi0gIGlmKHN0YXR1cyA9PSBTVUNDRVNTKQorICBpZiAoc3RhdHVzID09IFNVQ0NFU1MpCiAgIHsKICAgICBMTF9TZXRTeXN0ZW1Db3JlQ2xvY2soX19MTF9SQ0NfQ0FMQ19IQ0xLMV9GUkVRKFNZU0NMS19GcmVxdWVuY3ksIFVUSUxTX0Nsa0luaXRTdHJ1Y3QtPkNQVTFDTEtEaXZpZGVyKSk7CiAgIH0K