ZGlmZiAtLWdpdCBhL0JVSUxELmduIGIvQlVJTEQuZ24KaW5kZXggYmYyMGY2ZS4uM2NlMWUwOCAxMDA2NDQKLS0tIGEvQlVJTEQuZ24KKysrIGIvQlVJTEQuZ24KQEAgLTEyMCw2ICsxMjAsNyBAQAogICAgICJwdWJsaWMvZnBkZl9mbGF0dGVuLmgiLAogICAgICJwdWJsaWMvZnBkZl9mb3JtZmlsbC5oIiwKICAgICAicHVibGljL2ZwZGZfZndsZXZlbnQuaCIsCisgICAgInB1YmxpYy9mcGRmX2phdmFzY3JpcHQuaCIsCiAgICAgInB1YmxpYy9mcGRmX3Bwby5oIiwKICAgICAicHVibGljL2ZwZGZfcHJvZ3Jlc3NpdmUuaCIsCiAgICAgInB1YmxpYy9mcGRmX3NhdmUuaCIsCmRpZmYgLS1naXQgYS9jb3JlL2ZwZGZkb2MvY3BkZl9hY3Rpb24uY3BwIGIvY29yZS9mcGRmZG9jL2NwZGZfYWN0aW9uLmNwcAppbmRleCAxOGU0OTI3Li43NGE3YzZmIDEwMDY0NAotLS0gYS9jb3JlL2ZwZGZkb2MvY3BkZl9hY3Rpb24uY3BwCisrKyBiL2NvcmUvZnBkZmRvYy9jcGRmX2FjdGlvbi5jcHAKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJjb3JlL2ZwZGZhcGkvcGFyc2VyL2NwZGZfYXJyYXkuaCIKICNpbmNsdWRlICJjb3JlL2ZwZGZhcGkvcGFyc2VyL2NwZGZfZGljdGlvbmFyeS5oIgogI2luY2x1ZGUgImNvcmUvZnBkZmFwaS9wYXJzZXIvY3BkZl9kb2N1bWVudC5oIgorI2luY2x1ZGUgImNvcmUvZnBkZmFwaS9wYXJzZXIvY3BkZl9uYW1lLmgiCiAjaW5jbHVkZSAiY29yZS9mcGRmZG9jL2NwZGZfZmlsZXNwZWMuaCIKICNpbmNsdWRlICJjb3JlL2ZwZGZkb2MvY3BkZl9uYW1ldHJlZS5oIgogCkBAIC0zMyw2ICszNCwxNCBAQAogICBpZiAoIW1fcERpY3QpCiAgICAgcmV0dXJuIFVua25vd247CiAKKyAgLy8gVmFsaWRhdGUgfG1fcERpY3R8LiBUeXBlIGlzIG9wdGlvbmFsLCBidXQgbXVzdCBiZSB2YWxpZCBpZiBwcmVzZW50LgorICBjb25zdCBDUERGX09iamVjdCogcFR5cGUgPSBtX3BEaWN0LT5HZXRPYmplY3RGb3IoIlR5cGUiKTsKKyAgaWYgKHBUeXBlKSB7CisgICAgY29uc3QgQ1BERl9OYW1lKiBwTmFtZSA9IHBUeXBlLT5Bc05hbWUoKTsKKyAgICBpZiAoIXBOYW1lIHx8IHBOYW1lLT5HZXRTdHJpbmcoKSAhPSAiQWN0aW9uIikKKyAgICAgIHJldHVybiBVbmtub3duOworICB9CisKICAgQnl0ZVN0cmluZyBjc1R5cGUgPSBtX3BEaWN0LT5HZXRTdHJpbmdGb3IoIlMiKTsKICAgaWYgKGNzVHlwZS5Jc0VtcHR5KCkpCiAgICAgcmV0dXJuIFVua25vd247CkBAIC0xMTUsMTMgKzEyNCwxNiBAQAogICByZXR1cm4gbV9wRGljdC0+R2V0SW50ZWdlckZvcigiRmxhZ3MiKTsKIH0KIAotV2lkZVN0cmluZyBDUERGX0FjdGlvbjo6R2V0SmF2YVNjcmlwdCgpIGNvbnN0IHsKLSAgaWYgKCFtX3BEaWN0KQotICAgIHJldHVybiBXaWRlU3RyaW5nKCk7CitPcHRpb25hbDxXaWRlU3RyaW5nPiBDUERGX0FjdGlvbjo6TWF5YmVHZXRKYXZhU2NyaXB0KCkgY29uc3QgeworICBjb25zdCBDUERGX09iamVjdCogcE9iamVjdCA9IEdldEphdmFTY3JpcHRPYmplY3QoKTsKKyAgaWYgKCFwT2JqZWN0KQorICAgIHJldHVybiBwZGZpdW06Om51bGxvcHQ7CisgIHJldHVybiBwT2JqZWN0LT5HZXRVbmljb2RlVGV4dCgpOworfQogCi0gIGNvbnN0IENQREZfT2JqZWN0KiBwSlMgPSBtX3BEaWN0LT5HZXREaXJlY3RPYmplY3RGb3IoIkpTIik7Ci0gIHJldHVybiAocEpTICYmIChwSlMtPklzU3RyaW5nKCkgfHwgcEpTLT5Jc1N0cmVhbSgpKSkgPyBwSlMtPkdldFVuaWNvZGVUZXh0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdpZGVTdHJpbmcoKTsKK1dpZGVTdHJpbmcgQ1BERl9BY3Rpb246OkdldEphdmFTY3JpcHQoKSBjb25zdCB7CisgIGNvbnN0IENQREZfT2JqZWN0KiBwT2JqZWN0ID0gR2V0SmF2YVNjcmlwdE9iamVjdCgpOworICByZXR1cm4gcE9iamVjdCA/IHBPYmplY3QtPkdldFVuaWNvZGVUZXh0KCkgOiBXaWRlU3RyaW5nKCk7CiB9CiAKIHNpemVfdCBDUERGX0FjdGlvbjo6R2V0U3ViQWN0aW9uc0NvdW50KCkgY29uc3QgewpAQCAtMTUwLDMgKzE2MiwxMSBAQAogICB9CiAgIHJldHVybiBDUERGX0FjdGlvbihudWxscHRyKTsKIH0KKworY29uc3QgQ1BERl9PYmplY3QqIENQREZfQWN0aW9uOjpHZXRKYXZhU2NyaXB0T2JqZWN0KCkgY29uc3QgeworICBpZiAoIW1fcERpY3QpCisgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgY29uc3QgQ1BERl9PYmplY3QqIHBKUyA9IG1fcERpY3QtPkdldERpcmVjdE9iamVjdEZvcigiSlMiKTsKKyAgcmV0dXJuIChwSlMgJiYgKHBKUy0+SXNTdHJpbmcoKSB8fCBwSlMtPklzU3RyZWFtKCkpKSA/IHBKUyA6IG51bGxwdHI7Cit9CmRpZmYgLS1naXQgYS9jb3JlL2ZwZGZkb2MvY3BkZl9hY3Rpb24uaCBiL2NvcmUvZnBkZmRvYy9jcGRmX2FjdGlvbi5oCmluZGV4IGNjYzQwYWEuLjM5MWYxNzUgMTAwNjQ0Ci0tLSBhL2NvcmUvZnBkZmRvYy9jcGRmX2FjdGlvbi5oCisrKyBiL2NvcmUvZnBkZmRvYy9jcGRmX2FjdGlvbi5oCkBAIC0xMCw5ICsxMCwxMSBAQAogI2luY2x1ZGUgImNvcmUvZnBkZmRvYy9jcGRmX2Rlc3QuaCIKICNpbmNsdWRlICJjb3JlL2Z4Y3J0L2Z4X3N0cmluZy5oIgogI2luY2x1ZGUgImNvcmUvZnhjcnQvcmV0YWluX3B0ci5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Jhc2Uvb3B0aW9uYWwuaCIKIAogY2xhc3MgQ1BERl9EaWN0aW9uYXJ5OwogY2xhc3MgQ1BERl9Eb2N1bWVudDsKK2NsYXNzIENQREZfT2JqZWN0OwogCiBjbGFzcyBDUERGX0FjdGlvbiB7CiAgcHVibGljOgpAQCAtNTEsMTEgKzUzLDE4IEBACiAgIGJvb2wgR2V0SGlkZVN0YXR1cygpIGNvbnN0OwogICBCeXRlU3RyaW5nIEdldE5hbWVkQWN0aW9uKCkgY29uc3Q7CiAgIHVpbnQzMl90IEdldEZsYWdzKCkgY29uc3Q7CisKKyAgLy8gRGlmZmVyZW50aWF0ZXMgYmV0d2VlbiBlbXB0eSBKUyBlbnRyeSBhbmQgbm8gSlMgZW50cnkuCisgIE9wdGlvbmFsPFdpZGVTdHJpbmc+IE1heWJlR2V0SmF2YVNjcmlwdCgpIGNvbnN0OworICAvLyBSZXR1cm5zIGVtcHR5IHN0cmluZyBmb3IgZW1wdHkgSlMgZW50cnkgYW5kIG5vIEpTIGVudHJ5LgogICBXaWRlU3RyaW5nIEdldEphdmFTY3JpcHQoKSBjb25zdDsKKwogICBzaXplX3QgR2V0U3ViQWN0aW9uc0NvdW50KCkgY29uc3Q7CiAgIENQREZfQWN0aW9uIEdldFN1YkFjdGlvbihzaXplX3QgaUluZGV4KSBjb25zdDsKIAogIHByaXZhdGU6CisgIGNvbnN0IENQREZfT2JqZWN0KiBHZXRKYXZhU2NyaXB0T2JqZWN0KCkgY29uc3Q7CisKICAgUmV0YWluUHRyPGNvbnN0IENQREZfRGljdGlvbmFyeT4gY29uc3QgbV9wRGljdDsKIH07CiAKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvQlVJTEQuZ24gYi9mcGRmc2RrL0JVSUxELmduCmluZGV4IDYyZGYxOGIuLjQ2M2Q1Y2EgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvQlVJTEQuZ24KKysrIGIvZnBkZnNkay9CVUlMRC5nbgpAQCAtNTgsNiArNTgsNyBAQAogICAgICJmcGRmX2V4dC5jcHAiLAogICAgICJmcGRmX2ZsYXR0ZW4uY3BwIiwKICAgICAiZnBkZl9mb3JtZmlsbC5jcHAiLAorICAgICJmcGRmX2phdmFzY3JpcHQuY3BwIiwKICAgICAiZnBkZl9wcG8uY3BwIiwKICAgICAiZnBkZl9wcm9ncmVzc2l2ZS5jcHAiLAogICAgICJmcGRmX3NhdmUuY3BwIiwKQEAgLTE0OSw2ICsxNTAsNyBAQAogICAgICJmcGRmX2V4dF9lbWJlZGRlcnRlc3QuY3BwIiwKICAgICAiZnBkZl9mbGF0dGVuX2VtYmVkZGVydGVzdC5jcHAiLAogICAgICJmcGRmX2Zvcm1maWxsX2VtYmVkZGVydGVzdC5jcHAiLAorICAgICJmcGRmX2phdmFzY3JpcHRfZW1iZWRkZXJ0ZXN0LmNwcCIsCiAgICAgImZwZGZfcHBvX2VtYmVkZGVydGVzdC5jcHAiLAogICAgICJmcGRmX3NhdmVfZW1iZWRkZXJ0ZXN0LmNwcCIsCiAgICAgImZwZGZfc2VhcmNoZXhfZW1iZWRkZXJ0ZXN0LmNwcCIsCmRpZmYgLS1naXQgYS9mcGRmc2RrL2NwZGZzZGtfaGVscGVycy5oIGIvZnBkZnNkay9jcGRmc2RrX2hlbHBlcnMuaAppbmRleCA4ZWNhODU0Li5hMDZjYzM5IDEwMDY0NAotLS0gYS9mcGRmc2RrL2NwZGZzZGtfaGVscGVycy5oCisrKyBiL2ZwZGZzZGsvY3BkZnNka19oZWxwZXJzLmgKQEAgLTQyLDYgKzQyLDcgQEAKIGNsYXNzIENQREZTREtfSW50ZXJhY3RpdmVGb3JtOwogY2xhc3MgSVBERlNES19QYXVzZUFkYXB0ZXI7CiBjbGFzcyBGWF9QQVRIUE9JTlQ7CitzdHJ1Y3QgQ1BERl9KYXZhU2NyaXB0OwogCiAjaWZkZWYgUERGX0VOQUJMRV9YRkEKIGNsYXNzIENQREZYRkFfQ29udGV4dDsKQEAgLTExNyw2ICsxMTgsMTUgQEAKICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q1BERl9Gb250Kj4oZm9udCk7CiB9CiAKK2lubGluZSBGUERGX0pBVkFTQ1JJUFRfQUNUSU9OIEZQREZKYXZhU2NyaXB0QWN0aW9uRnJvbUNQREZKYXZhU2NyaXB0QWN0aW9uKAorICAgIENQREZfSmF2YVNjcmlwdCogamF2YXNjcmlwdCkgeworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxGUERGX0pBVkFTQ1JJUFRfQUNUSU9OPihqYXZhc2NyaXB0KTsKK30KK2lubGluZSBDUERGX0phdmFTY3JpcHQqIENQREZKYXZhU2NyaXB0QWN0aW9uRnJvbUZQREZKYXZhU2NyaXB0QWN0aW9uKAorICAgIEZQREZfSkFWQVNDUklQVF9BQ1RJT04gamF2YXNjcmlwdCkgeworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDUERGX0phdmFTY3JpcHQqPihqYXZhc2NyaXB0KTsKK30KKwogaW5saW5lIEZQREZfTElOSyBGUERGTGlua0Zyb21DUERGRGljdGlvbmFyeShDUERGX0RpY3Rpb25hcnkqIGxpbmspIHsKICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RlBERl9MSU5LPihsaW5rKTsKIH0KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvZnBkZl9qYXZhc2NyaXB0LmNwcCBiL2ZwZGZzZGsvZnBkZl9qYXZhc2NyaXB0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmQxMTliCi0tLSAvZGV2L251bGwKKysrIGIvZnBkZnNkay9mcGRmX2phdmFzY3JpcHQuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8vIENvcHlyaWdodCAyMDE5IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworI2luY2x1ZGUgInB1YmxpYy9mcGRmX2phdmFzY3JpcHQuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKworI2luY2x1ZGUgImNvcmUvZnBkZmFwaS9wYXJzZXIvY3BkZl9kaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiY29yZS9mcGRmYXBpL3BhcnNlci9jcGRmX2RvY3VtZW50LmgiCisjaW5jbHVkZSAiY29yZS9mcGRmZG9jL2NwZGZfYWN0aW9uLmgiCisjaW5jbHVkZSAiY29yZS9mcGRmZG9jL2NwZGZfbmFtZXRyZWUuaCIKKyNpbmNsdWRlICJmcGRmc2RrL2NwZGZzZGtfaGVscGVycy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Jhc2UvcHRyX3V0aWwuaCIKKworc3RydWN0IENQREZfSmF2YVNjcmlwdCB7CisgIFdpZGVTdHJpbmcgbmFtZTsKKyAgV2lkZVN0cmluZyBzY3JpcHQ7Cit9OworCitGUERGX0VYUE9SVCBpbnQgRlBERl9DQUxMQ09OVgorRlBERkRvY19HZXRKYXZhU2NyaXB0QWN0aW9uQ291bnQoRlBERl9ET0NVTUVOVCBkb2N1bWVudCkgeworICBDUERGX0RvY3VtZW50KiBkb2MgPSBDUERGRG9jdW1lbnRGcm9tRlBERkRvY3VtZW50KGRvY3VtZW50KTsKKyAgcmV0dXJuIGRvYyA/IENQREZfTmFtZVRyZWUoZG9jLCAiSmF2YVNjcmlwdCIpLkdldENvdW50KCkgOiAtMTsKK30KKworRlBERl9FWFBPUlQgRlBERl9KQVZBU0NSSVBUX0FDVElPTiBGUERGX0NBTExDT05WCitGUERGRG9jX0dldEphdmFTY3JpcHRBY3Rpb24oRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgaW50IGluZGV4KSB7CisgIENQREZfRG9jdW1lbnQqIGRvYyA9IENQREZEb2N1bWVudEZyb21GUERGRG9jdW1lbnQoZG9jdW1lbnQpOworICBpZiAoIWRvYyB8fCBpbmRleCA8IDApCisgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgQ1BERl9OYW1lVHJlZSBuYW1lX3RyZWUoZG9jLCAiSmF2YVNjcmlwdCIpOworICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPj0gbmFtZV90cmVlLkdldENvdW50KCkpCisgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgV2lkZVN0cmluZyBuYW1lOworICBDUERGX0RpY3Rpb25hcnkqIG9iaiA9CisgICAgICBUb0RpY3Rpb25hcnkobmFtZV90cmVlLkxvb2t1cFZhbHVlQW5kTmFtZShpbmRleCwgJm5hbWUpKTsKKyAgaWYgKCFvYmopCisgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgLy8gVmFsaWRhdGUgfG9ianwuIFR5cGUgaXMgb3B0aW9uYWwsIGJ1dCBtdXN0IGJlIHZhbGlkIGlmIHByZXNlbnQuCisgIENQREZfQWN0aW9uIGFjdGlvbihvYmopOworICBpZiAoYWN0aW9uLkdldFR5cGUoKSAhPSBDUERGX0FjdGlvbjo6SmF2YVNjcmlwdCkKKyAgICByZXR1cm4gbnVsbHB0cjsKKworICBPcHRpb25hbDxXaWRlU3RyaW5nPiBzY3JpcHQgPSBhY3Rpb24uTWF5YmVHZXRKYXZhU2NyaXB0KCk7CisgIGlmICghc2NyaXB0Lmhhc192YWx1ZSgpKQorICAgIHJldHVybiBudWxscHRyOworCisgIGF1dG8ganMgPSBwZGZpdW06Ok1ha2VVbmlxdWU8Q1BERl9KYXZhU2NyaXB0PigpOworICBqcy0+bmFtZSA9IG5hbWU7CisgIGpzLT5zY3JpcHQgPSBzY3JpcHQudmFsdWUoKTsKKyAgcmV0dXJuIEZQREZKYXZhU2NyaXB0QWN0aW9uRnJvbUNQREZKYXZhU2NyaXB0QWN0aW9uKGpzLnJlbGVhc2UoKSk7Cit9CisKK0ZQREZfRVhQT1JUIHZvaWQgRlBERl9DQUxMQ09OVgorRlBERkRvY19DbG9zZUphdmFTY3JpcHRBY3Rpb24oRlBERl9KQVZBU0NSSVBUX0FDVElPTiBqYXZhc2NyaXB0KSB7CisgIC8vIFRha2Ugb2JqZWN0IGJhY2sgYWNyb3NzIEFQSSBhbmQgZGVzdHJveSBpdC4KKyAgc3RkOjp1bmlxdWVfcHRyPENQREZfSmF2YVNjcmlwdD4oCisgICAgICBDUERGSmF2YVNjcmlwdEFjdGlvbkZyb21GUERGSmF2YVNjcmlwdEFjdGlvbihqYXZhc2NyaXB0KSk7Cit9CisKK0ZQREZfRVhQT1JUIHVuc2lnbmVkIGxvbmcgRlBERl9DQUxMQ09OVgorRlBERkphdmFTY3JpcHRBY3Rpb25fR2V0TmFtZShGUERGX0pBVkFTQ1JJUFRfQUNUSU9OIGphdmFzY3JpcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZQREZfV0NIQVIqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBidWZsZW4pIHsKKyAgQ1BERl9KYXZhU2NyaXB0KiBqcyA9CisgICAgICBDUERGSmF2YVNjcmlwdEFjdGlvbkZyb21GUERGSmF2YVNjcmlwdEFjdGlvbihqYXZhc2NyaXB0KTsKKyAgaWYgKCFqcykKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIFV0ZjE2RW5jb2RlTWF5YmVDb3B5QW5kUmV0dXJuTGVuZ3RoKGpzLT5uYW1lLCBidWZmZXIsIGJ1Zmxlbik7Cit9CisKK0ZQREZfRVhQT1JUIHVuc2lnbmVkIGxvbmcgRlBERl9DQUxMQ09OVgorRlBERkphdmFTY3JpcHRBY3Rpb25fR2V0U2NyaXB0KEZQREZfSkFWQVNDUklQVF9BQ1RJT04gamF2YXNjcmlwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUERGX1dDSEFSKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBidWZsZW4pIHsKKyAgQ1BERl9KYXZhU2NyaXB0KiBqcyA9CisgICAgICBDUERGSmF2YVNjcmlwdEFjdGlvbkZyb21GUERGSmF2YVNjcmlwdEFjdGlvbihqYXZhc2NyaXB0KTsKKyAgaWYgKCFqcykKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIFV0ZjE2RW5jb2RlTWF5YmVDb3B5QW5kUmV0dXJuTGVuZ3RoKGpzLT5zY3JpcHQsIGJ1ZmZlciwgYnVmbGVuKTsKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvZnBkZl9qYXZhc2NyaXB0X2VtYmVkZGVydGVzdC5jcHAgYi9mcGRmc2RrL2ZwZGZfamF2YXNjcmlwdF9lbWJlZGRlcnRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZGViNjkKLS0tIC9kZXYvbnVsbAorKysgYi9mcGRmc2RrL2ZwZGZfamF2YXNjcmlwdF9lbWJlZGRlcnRlc3QuY3BwCkBAIC0wLDAgKzEsMTMwIEBACisvLyBDb3B5cmlnaHQgMjAxOSBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImNvcmUvZnhjcnQvZnhfbWVtb3J5LmgiCisjaW5jbHVkZSAicHVibGljL2ZwZGZfamF2YXNjcmlwdC5oIgorI2luY2x1ZGUgInB1YmxpYy9mcGRmdmlldy5oIgorI2luY2x1ZGUgInRlc3RpbmcvZW1iZWRkZXJfdGVzdC5oIgorI2luY2x1ZGUgInRlc3RpbmcvZnhfc3RyaW5nX3Rlc3RoZWxwZXJzLmgiCisjaW5jbHVkZSAidGVzdGluZy91dGlscy9oYXNoLmgiCisKK2NsYXNzIEZQREZKYXZhU2NyaXB0RW1iZWRkZXJUZXN0IDogcHVibGljIEVtYmVkZGVyVGVzdCB7fTsKKworVEVTVF9GKEZQREZKYXZhU2NyaXB0RW1iZWRkZXJUZXN0LCBDb3VudEpTKSB7CisgIC8vIE9wZW4gYSBmaWxlIHdpdGggSlMuCisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgiYnVnXzY3OTY0OS5wZGYiKSk7CisgIEVYUEVDVF9FUSgxLCBGUERGRG9jX0dldEphdmFTY3JpcHRBY3Rpb25Db3VudChkb2N1bWVudCgpKSk7Cit9CisKK1RFU1RfRihGUERGSmF2YVNjcmlwdEVtYmVkZGVyVGVzdCwgQ291bnROb0pTKSB7CisgIC8vIE9wZW4gYSBmaWxlIHdpdGhvdXQgSlMuCisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgiaGVsbG9fd29ybGQucGRmIikpOworICBFWFBFQ1RfRVEoMCwgRlBERkRvY19HZXRKYXZhU2NyaXB0QWN0aW9uQ291bnQoZG9jdW1lbnQoKSkpOworCisgIC8vIFByb3ZpZGUgbm8gZG9jdW1lbnQuCisgIEVYUEVDVF9FUSgtMSwgRlBERkRvY19HZXRKYXZhU2NyaXB0QWN0aW9uQ291bnQobnVsbHB0cikpOworfQorCitURVNUX0YoRlBERkphdmFTY3JpcHRFbWJlZGRlclRlc3QsIEdldEpTKSB7CisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgianMucGRmIikpOworICBFWFBFQ1RfRVEoNiwgRlBERkRvY19HZXRKYXZhU2NyaXB0QWN0aW9uQ291bnQoZG9jdW1lbnQoKSkpOworCisgIFNjb3BlZEZQREZKYXZhU2NyaXB0QWN0aW9uIGpzOworICBqcy5yZXNldChGUERGRG9jX0dldEphdmFTY3JpcHRBY3Rpb24oZG9jdW1lbnQoKSwgLTEpKTsKKyAgRVhQRUNUX0ZBTFNFKGpzKTsKKyAganMucmVzZXQoRlBERkRvY19HZXRKYXZhU2NyaXB0QWN0aW9uKGRvY3VtZW50KCksIDYpKTsKKyAgRVhQRUNUX0ZBTFNFKGpzKTsKKyAganMucmVzZXQoRlBERkRvY19HZXRKYXZhU2NyaXB0QWN0aW9uKG51bGxwdHIsIC0xKSk7CisgIEVYUEVDVF9GQUxTRShqcyk7CisgIGpzLnJlc2V0KEZQREZEb2NfR2V0SmF2YVNjcmlwdEFjdGlvbihudWxscHRyLCAwKSk7CisgIEVYUEVDVF9GQUxTRShqcyk7CisgIGpzLnJlc2V0KEZQREZEb2NfR2V0SmF2YVNjcmlwdEFjdGlvbihudWxscHRyLCAxKSk7CisgIEVYUEVDVF9GQUxTRShqcyk7CisgIGpzLnJlc2V0KEZQREZEb2NfR2V0SmF2YVNjcmlwdEFjdGlvbihudWxscHRyLCAyKSk7CisgIEVYUEVDVF9GQUxTRShqcyk7CisgIGpzLnJlc2V0KEZQREZEb2NfR2V0SmF2YVNjcmlwdEFjdGlvbihudWxscHRyLCA1KSk7CisgIEVYUEVDVF9GQUxTRShqcyk7CisgIGpzLnJlc2V0KEZQREZEb2NfR2V0SmF2YVNjcmlwdEFjdGlvbihudWxscHRyLCA2KSk7CisgIEVYUEVDVF9GQUxTRShqcyk7CisKKyAganMucmVzZXQoRlBERkRvY19HZXRKYXZhU2NyaXB0QWN0aW9uKGRvY3VtZW50KCksIDApKTsKKyAgRVhQRUNUX1RSVUUoanMpOworICBqcy5yZXNldChGUERGRG9jX0dldEphdmFTY3JpcHRBY3Rpb24oZG9jdW1lbnQoKSwgMSkpOworICBFWFBFQ1RfVFJVRShqcyk7CisgIGpzLnJlc2V0KEZQREZEb2NfR2V0SmF2YVNjcmlwdEFjdGlvbihkb2N1bWVudCgpLCAyKSk7CisgIEVYUEVDVF9UUlVFKGpzKTsKKyAganMucmVzZXQoRlBERkRvY19HZXRKYXZhU2NyaXB0QWN0aW9uKGRvY3VtZW50KCksIDMpKTsKKyAgRVhQRUNUX0ZBTFNFKGpzKTsKKyAganMucmVzZXQoRlBERkRvY19HZXRKYXZhU2NyaXB0QWN0aW9uKGRvY3VtZW50KCksIDQpKTsKKyAgRVhQRUNUX0ZBTFNFKGpzKTsKKyAganMucmVzZXQoRlBERkRvY19HZXRKYXZhU2NyaXB0QWN0aW9uKGRvY3VtZW50KCksIDUpKTsKKyAgRVhQRUNUX0ZBTFNFKGpzKTsKK30KKworVEVTVF9GKEZQREZKYXZhU2NyaXB0RW1iZWRkZXJUZXN0LCBHZXRKU05hbWUpIHsKKyAgQVNTRVJUX1RSVUUoT3BlbkRvY3VtZW50KCJidWdfNjc5NjQ5LnBkZiIpKTsKKyAgU2NvcGVkRlBERkphdmFTY3JpcHRBY3Rpb24ganMoRlBERkRvY19HZXRKYXZhU2NyaXB0QWN0aW9uKGRvY3VtZW50KCksIDApKTsKKyAgQVNTRVJUX1RSVUUoanMpOworCisgIHsKKyAgICBGUERGX1dDSEFSIGJ1ZlsxMF07CisgICAgRVhQRUNUX0VRKDB1LCBGUERGSmF2YVNjcmlwdEFjdGlvbl9HZXROYW1lKG51bGxwdHIsIG51bGxwdHIsIDApKTsKKyAgICBFWFBFQ1RfRVEoMHUsIEZQREZKYXZhU2NyaXB0QWN0aW9uX0dldE5hbWUobnVsbHB0ciwgYnVmLCAwKSk7CisgICAgRVhQRUNUX0VRKDB1LCBGUERGSmF2YVNjcmlwdEFjdGlvbl9HZXROYW1lKG51bGxwdHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgfQorCisgIGNvbnN0ZXhwciBzaXplX3Qga0V4cGVjdGVkTGVuZ3RoID0gMjI7CisgIEFTU0VSVF9FUShrRXhwZWN0ZWRMZW5ndGgsCisgICAgICAgICAgICBGUERGSmF2YVNjcmlwdEFjdGlvbl9HZXROYW1lKGpzLmdldCgpLCBudWxscHRyLCAwKSk7CisKKyAgLy8gQ2hlY2sgdGhhdCB0aGUgbmFtZSBub3QgcmV0dXJuZWQgaWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwuCisgIC8vIFRoZSByZXN1bHQgYnVmZmVyIHNob3VsZCBiZSBvdmVyd3JpdHRlbiB3aXRoIGFuIGVtcHR5IHN0cmluZy4KKyAgc3RkOjp2ZWN0b3I8RlBERl9XQ0hBUj4gYnVmID0gR2V0RlBERldpZGVTdHJpbmdCdWZmZXIoa0V4cGVjdGVkTGVuZ3RoKTsKKyAgLy8gV3JpdGUgaW4gdGhlIGJ1ZmZlciB0byB2ZXJpZnkgaXQncyBub3Qgb3ZlcndyaXR0ZW4uCisgIG1lbWNweShidWYuZGF0YSgpLCAiYWJjZGVmZ2giLCA4KTsKKyAgRVhQRUNUX0VRKGtFeHBlY3RlZExlbmd0aCwgRlBERkphdmFTY3JpcHRBY3Rpb25fR2V0TmFtZShqcy5nZXQoKSwgYnVmLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRXhwZWN0ZWRMZW5ndGggLSAxKSk7CisgIEVYUEVDVF9FUSgwLCBtZW1jbXAoYnVmLmRhdGEoKSwgImFiY2RlZmdoIiwgOCkpOworCisgIEVYUEVDVF9FUShrRXhwZWN0ZWRMZW5ndGgsIEZQREZKYXZhU2NyaXB0QWN0aW9uX0dldE5hbWUoanMuZ2V0KCksIGJ1Zi5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0V4cGVjdGVkTGVuZ3RoKSk7CisgIEVYUEVDVF9FUShMInN0YXJ0RGVsYXkiLCBHZXRQbGF0Zm9ybVdTdHJpbmcoYnVmLmRhdGEoKSkpOworfQorCitURVNUX0YoRlBERkphdmFTY3JpcHRFbWJlZGRlclRlc3QsIEdldEpTU2NyaXB0KSB7CisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgiYnVnXzY3OTY0OS5wZGYiKSk7CisgIFNjb3BlZEZQREZKYXZhU2NyaXB0QWN0aW9uIGpzKEZQREZEb2NfR2V0SmF2YVNjcmlwdEFjdGlvbihkb2N1bWVudCgpLCAwKSk7CisgIEFTU0VSVF9UUlVFKGpzKTsKKworICB7CisgICAgRlBERl9XQ0hBUiBidWZbMTBdOworICAgIEVYUEVDVF9FUSgwdSwgRlBERkphdmFTY3JpcHRBY3Rpb25fR2V0U2NyaXB0KG51bGxwdHIsIG51bGxwdHIsIDApKTsKKyAgICBFWFBFQ1RfRVEoMHUsIEZQREZKYXZhU2NyaXB0QWN0aW9uX0dldFNjcmlwdChudWxscHRyLCBidWYsIDApKTsKKyAgICBFWFBFQ1RfRVEoMHUsIEZQREZKYXZhU2NyaXB0QWN0aW9uX0dldFNjcmlwdChudWxscHRyLCBidWYsIHNpemVvZihidWYpKSk7CisgIH0KKworICBjb25zdGV4cHIgc2l6ZV90IGtFeHBlY3RlZExlbmd0aCA9IDIxODsKKyAgQVNTRVJUX0VRKGtFeHBlY3RlZExlbmd0aCwKKyAgICAgICAgICAgIEZQREZKYXZhU2NyaXB0QWN0aW9uX0dldFNjcmlwdChqcy5nZXQoKSwgbnVsbHB0ciwgMCkpOworCisgIC8vIENoZWNrIHRoYXQgdGhlIHN0cmluZyB2YWx1ZSBvZiBhbiBBUCBpcyBub3QgcmV0dXJuZWQgaWYgdGhlIGJ1ZmZlciBpcyB0b28KKyAgLy8gc21hbGwuIFRoZSByZXN1bHQgYnVmZmVyIHNob3VsZCBiZSBvdmVyd3JpdHRlbiB3aXRoIGFuIGVtcHR5IHN0cmluZy4KKyAgc3RkOjp2ZWN0b3I8RlBERl9XQ0hBUj4gYnVmID0gR2V0RlBERldpZGVTdHJpbmdCdWZmZXIoa0V4cGVjdGVkTGVuZ3RoKTsKKyAgLy8gV3JpdGUgaW4gdGhlIGJ1ZmZlciB0byB2ZXJpZnkgaXQncyBub3Qgb3ZlcndyaXR0ZW4uCisgIG1lbWNweShidWYuZGF0YSgpLCAiYWJjZGVmZ2giLCA4KTsKKyAgRVhQRUNUX0VRKGtFeHBlY3RlZExlbmd0aCwgRlBERkphdmFTY3JpcHRBY3Rpb25fR2V0U2NyaXB0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganMuZ2V0KCksIGJ1Zi5kYXRhKCksIGtFeHBlY3RlZExlbmd0aCAtIDEpKTsKKyAgRVhQRUNUX0VRKDAsIG1lbWNtcChidWYuZGF0YSgpLCAiYWJjZGVmZ2giLCA4KSk7CisKKyAgc3RhdGljIGNvbnN0IHdjaGFyX3Qga0V4cGVjdGVkU2NyaXB0W10gPQorICAgICAgTCJmdW5jdGlvbiBwaW5nKCkge1xuICBhcHAuYWxlcnQoXCJwaW5nXCIpO1xufVxuIgorICAgICAgTCJ2YXIgdGltZXIgPSBhcHAuc2V0VGltZU91dChcInBpbmcoKVwiLCAxMDApO1xuYXBwLmNsZWFyVGltZU91dCh0aW1lcik7IjsKKyAgRVhQRUNUX0VRKGtFeHBlY3RlZExlbmd0aCwgRlBERkphdmFTY3JpcHRBY3Rpb25fR2V0U2NyaXB0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganMuZ2V0KCksIGJ1Zi5kYXRhKCksIGtFeHBlY3RlZExlbmd0aCkpOworICBFWFBFQ1RfRVEoa0V4cGVjdGVkU2NyaXB0LCBHZXRQbGF0Zm9ybVdTdHJpbmcoYnVmLmRhdGEoKSkpOworfQpkaWZmIC0tZ2l0IGEvZnBkZnNkay9mcGRmX3ZpZXdfY19hcGlfdGVzdC5jIGIvZnBkZnNkay9mcGRmX3ZpZXdfY19hcGlfdGVzdC5jCmluZGV4IGNmMWMxNGYuLjM5NmI2ZDkgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvZnBkZl92aWV3X2NfYXBpX3Rlc3QuYworKysgYi9mcGRmc2RrL2ZwZGZfdmlld19jX2FwaV90ZXN0LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJwdWJsaWMvZnBkZl9mbGF0dGVuLmgiCiAjaW5jbHVkZSAicHVibGljL2ZwZGZfZm9ybWZpbGwuaCIKICNpbmNsdWRlICJwdWJsaWMvZnBkZl9md2xldmVudC5oIgorI2luY2x1ZGUgInB1YmxpYy9mcGRmX2phdmFzY3JpcHQuaCIKICNpbmNsdWRlICJwdWJsaWMvZnBkZl9wcG8uaCIKICNpbmNsdWRlICJwdWJsaWMvZnBkZl9wcm9ncmVzc2l2ZS5oIgogI2luY2x1ZGUgInB1YmxpYy9mcGRmX3NhdmUuaCIKQEAgLTI3MSw2ICsyNzIsMTMgQEAKICAgICBDSEsoRlBERl9TZXRGb3JtRmllbGRIaWdobGlnaHRBbHBoYSk7CiAgICAgQ0hLKEZQREZfU2V0Rm9ybUZpZWxkSGlnaGxpZ2h0Q29sb3IpOwogCisgICAgLy8gZnBkZl9qYXZhc2NyaXB0LmgKKyAgICBDSEsoRlBERkRvY19DbG9zZUphdmFTY3JpcHRBY3Rpb24pOworICAgIENISyhGUERGRG9jX0dldEphdmFTY3JpcHRBY3Rpb24pOworICAgIENISyhGUERGRG9jX0dldEphdmFTY3JpcHRBY3Rpb25Db3VudCk7CisgICAgQ0hLKEZQREZKYXZhU2NyaXB0QWN0aW9uX0dldE5hbWUpOworICAgIENISyhGUERGSmF2YVNjcmlwdEFjdGlvbl9HZXRTY3JpcHQpOworCiAgICAgLy8gZnBkZl9wcG8uaAogICAgIENISyhGUERGX0NvcHlWaWV3ZXJQcmVmZXJlbmNlcyk7CiAgICAgQ0hLKEZQREZfSW1wb3J0TlBhZ2VzVG9PbmUpOwpkaWZmIC0tZ2l0IGEvcHVibGljL2NwcC9mcGRmX2RlbGV0ZXJzLmggYi9wdWJsaWMvY3BwL2ZwZGZfZGVsZXRlcnMuaAppbmRleCA5YTcwMGUzLi42MzNkZGY1IDEwMDY0NAotLS0gYS9wdWJsaWMvY3BwL2ZwZGZfZGVsZXRlcnMuaAorKysgYi9wdWJsaWMvY3BwL2ZwZGZfZGVsZXRlcnMuaApAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlICJwdWJsaWMvZnBkZl9kYXRhYXZhaWwuaCIKICNpbmNsdWRlICJwdWJsaWMvZnBkZl9lZGl0LmgiCiAjaW5jbHVkZSAicHVibGljL2ZwZGZfZm9ybWZpbGwuaCIKKyNpbmNsdWRlICJwdWJsaWMvZnBkZl9qYXZhc2NyaXB0LmgiCiAjaW5jbHVkZSAicHVibGljL2ZwZGZfc3RydWN0dHJlZS5oIgogI2luY2x1ZGUgInB1YmxpYy9mcGRmX3RleHQuaCIKICNpbmNsdWRlICJwdWJsaWMvZnBkZl90cmFuc2Zvcm1wYWdlLmgiCkBAIC00OCw2ICs0OSwxMiBAQAogICB9CiB9OwogCitzdHJ1Y3QgRlBERkphdmFTY3JpcHRBY3Rpb25EZWxldGVyIHsKKyAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShGUERGX0pBVkFTQ1JJUFRfQUNUSU9OIGphdmFzY3JpcHQpIHsKKyAgICBGUERGRG9jX0Nsb3NlSmF2YVNjcmlwdEFjdGlvbihqYXZhc2NyaXB0KTsKKyAgfQorfTsKKwogc3RydWN0IEZQREZQYWdlRGVsZXRlciB7CiAgIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoRlBERl9QQUdFIHBhZ2UpIHsgRlBERl9DbG9zZVBhZ2UocGFnZSk7IH0KIH07CmRpZmYgLS1naXQgYS9wdWJsaWMvY3BwL2ZwZGZfc2NvcGVycy5oIGIvcHVibGljL2NwcC9mcGRmX3Njb3BlcnMuaAppbmRleCBlYmFlMTA3Li5mZjU3YzFiIDEwMDY0NAotLS0gYS9wdWJsaWMvY3BwL2ZwZGZfc2NvcGVycy5oCisrKyBiL3B1YmxpYy9jcHAvZnBkZl9zY29wZXJzLmgKQEAgLTksMTMgKzksNiBAQAogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogCiAjaW5jbHVkZSAicHVibGljL2NwcC9mcGRmX2RlbGV0ZXJzLmgiCi0jaW5jbHVkZSAicHVibGljL2ZwZGZfYW5ub3QuaCIKLSNpbmNsdWRlICJwdWJsaWMvZnBkZl9kYXRhYXZhaWwuaCIKLSNpbmNsdWRlICJwdWJsaWMvZnBkZl9lZGl0LmgiCi0jaW5jbHVkZSAicHVibGljL2ZwZGZfZm9ybWZpbGwuaCIKLSNpbmNsdWRlICJwdWJsaWMvZnBkZl9zdHJ1Y3R0cmVlLmgiCi0jaW5jbHVkZSAicHVibGljL2ZwZGZfdGV4dC5oIgotI2luY2x1ZGUgInB1YmxpYy9mcGRmdmlldy5oIgogCiAvLyBWZXJzaW9ucyBvZiBGUERGIHR5cGVzIHRoYXQgY2xlYW4gdXAgdGhlIG9iamVjdCBhdCBzY29wZSBleGl0LgogCkBAIC00NCw2ICszNywxMCBAQAogICAgIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnJlbW92ZV9wb2ludGVyPEZQREZfRk9STUhBTkRMRT46OnR5cGUsCiAgICAgICAgICAgICAgICAgICAgIEZQREZGb3JtSGFuZGxlRGVsZXRlcj47CiAKK3VzaW5nIFNjb3BlZEZQREZKYXZhU2NyaXB0QWN0aW9uID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpyZW1vdmVfcG9pbnRlcjxGUERGX0pBVkFTQ1JJUFRfQUNUSU9OPjo6dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgRlBERkphdmFTY3JpcHRBY3Rpb25EZWxldGVyPjsKKwogdXNpbmcgU2NvcGVkRlBERlBhZ2UgPQogICAgIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnJlbW92ZV9wb2ludGVyPEZQREZfUEFHRT46OnR5cGUsIEZQREZQYWdlRGVsZXRlcj47CiAKZGlmZiAtLWdpdCBhL3B1YmxpYy9mcGRmX2phdmFzY3JpcHQuaCBiL3B1YmxpYy9mcGRmX2phdmFzY3JpcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWYzODEwCi0tLSAvZGV2L251bGwKKysrIGIvcHVibGljL2ZwZGZfamF2YXNjcmlwdC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8vIENvcHlyaWdodCAyMDE5IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworI2lmbmRlZiBQVUJMSUNfRlBERl9KQVZBU0NSSVBUX0hfCisjZGVmaW5lIFBVQkxJQ19GUERGX0pBVkFTQ1JJUFRfSF8KKworLy8gTk9MSU5UTkVYVExJTkUoYnVpbGQvaW5jbHVkZSkKKyNpbmNsdWRlICJmcGRmdmlldy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmICAvLyBfX2NwbHVzcGx1cworCisvLyBFeHBlcmltZW50YWwgQVBJLgorLy8gR2V0IHRoZSBudW1iZXIgb2YgSmF2YVNjcmlwdCBhY3Rpb25zIGluIHxkb2N1bWVudHwuCisvLworLy8gICBkb2N1bWVudCAtIGhhbmRsZSB0byBhIGRvY3VtZW50LgorLy8KKy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBKYXZhU2NyaXB0IGFjdGlvbnMgaW4gfGRvY3VtZW50fCBvciAtMSBvbiBlcnJvci4KK0ZQREZfRVhQT1JUIGludCBGUERGX0NBTExDT05WCitGUERGRG9jX0dldEphdmFTY3JpcHRBY3Rpb25Db3VudChGUERGX0RPQ1VNRU5UIGRvY3VtZW50KTsKKworLy8gRXhwZXJpbWVudGFsIEFQSS4KKy8vIEdldCB0aGUgSmF2YVNjcmlwdCBhY3Rpb24gYXQgfGluZGV4fCBpbiB8ZG9jdW1lbnR8LgorLy8KKy8vICAgZG9jdW1lbnQgLSBoYW5kbGUgdG8gYSBkb2N1bWVudC4KKy8vICAgaW5kZXggICAgLSB0aGUgaW5kZXggb2YgdGhlIHJlcXVlc3RlZCBKYXZhU2NyaXB0IGFjdGlvbi4KKy8vCisvLyBSZXR1cm5zIHRoZSBoYW5kbGUgdG8gdGhlIEphdmFTY3JpcHQgYWN0aW9uLCBvciBOVUxMIG9uIGZhaWx1cmUuCisvLyBDYWxsZXIgb3ducyB0aGUgcmV0dXJuZWQgaGFuZGxlIGFuZCBtdXN0IGNsb3NlIGl0IHdpdGgKKy8vIEZQREZEb2NfQ2xvc2VKYXZhU2NyaXB0QWN0aW9uKCkuCitGUERGX0VYUE9SVCBGUERGX0pBVkFTQ1JJUFRfQUNUSU9OIEZQREZfQ0FMTENPTlYKK0ZQREZEb2NfR2V0SmF2YVNjcmlwdEFjdGlvbihGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBpbnQgaW5kZXgpOworCisvLyBFeHBlcmltZW50YWwgQVBJLgorLy8gQ2xvc2UgYSBsb2FkZWQgRlBERl9KQVZBU0NSSVBUX0FDVElPTiBvYmplY3QuCisKKy8vICAgamF2YXNjcmlwdCAtIEhhbmRsZSB0byBhIEphdmFTY3JpcHQgYWN0aW9uLgorRlBERl9FWFBPUlQgdm9pZCBGUERGX0NBTExDT05WCitGUERGRG9jX0Nsb3NlSmF2YVNjcmlwdEFjdGlvbihGUERGX0pBVkFTQ1JJUFRfQUNUSU9OIGphdmFzY3JpcHQpOworCisvLyBFeHBlcmltZW50YWwgQVBJLgorLy8gR2V0IHRoZSBuYW1lIGZyb20gdGhlIHxqYXZhc2NyaXB0fCBoYW5kbGUuIHxidWZmZXJ8IGlzIG9ubHkgbW9kaWZpZWQgaWYKKy8vIHxidWZsZW58IGlzIGxvbmdlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUuIE9uIGVycm9ycywgfGJ1ZmZlcnwgaXMKKy8vIHVubW9kaWZpZWQgYW5kIHRoZSByZXR1cm5lZCBsZW5ndGggaXMgMC4KKy8vCisvLyAgIGphdmFzY3JpcHQgLSBoYW5kbGUgdG8gYW4gSmF2YVNjcmlwdCBhY3Rpb24uCisvLyAgIGJ1ZmZlciAgICAgLSBidWZmZXIgZm9yIGhvbGRpbmcgdGhlIG5hbWUsIGVuY29kZWQgaW4gVVRGLTE2TEUuCisvLyAgIGJ1ZmxlbiAgICAgLSBsZW5ndGggb2YgdGhlIGJ1ZmZlciBpbiBieXRlcy4KKy8vCisvLyBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIEphdmFTY3JpcHQgYWN0aW9uIG5hbWUgaW4gYnl0ZXMuCitGUERGX0VYUE9SVCB1bnNpZ25lZCBsb25nIEZQREZfQ0FMTENPTlYKK0ZQREZKYXZhU2NyaXB0QWN0aW9uX0dldE5hbWUoRlBERl9KQVZBU0NSSVBUX0FDVElPTiBqYXZhc2NyaXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUERGX1dDSEFSKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYnVmbGVuKTsKKworLy8gRXhwZXJpbWVudGFsIEFQSS4KKy8vIEdldCB0aGUgc2NyaXB0IGZyb20gdGhlIHxqYXZhc2NyaXB0fCBoYW5kbGUuIHxidWZmZXJ8IGlzIG9ubHkgbW9kaWZpZWQgaWYKKy8vIHxidWZsZW58IGlzIGxvbmdlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIHNjcmlwdC4gT24gZXJyb3JzLCB8YnVmZmVyfCBpcworLy8gdW5tb2RpZmllZCBhbmQgdGhlIHJldHVybmVkIGxlbmd0aCBpcyAwLgorLy8KKy8vICAgamF2YXNjcmlwdCAtIGhhbmRsZSB0byBhbiBKYXZhU2NyaXB0IGFjdGlvbi4KKy8vICAgYnVmZmVyICAgICAtIGJ1ZmZlciBmb3IgaG9sZGluZyB0aGUgbmFtZSwgZW5jb2RlZCBpbiBVVEYtMTZMRS4KKy8vICAgYnVmbGVuICAgICAtIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzLgorLy8KKy8vIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgSmF2YVNjcmlwdCBhY3Rpb24gbmFtZSBpbiBieXRlcy4KK0ZQREZfRVhQT1JUIHVuc2lnbmVkIGxvbmcgRlBERl9DQUxMQ09OVgorRlBERkphdmFTY3JpcHRBY3Rpb25fR2V0U2NyaXB0KEZQREZfSkFWQVNDUklQVF9BQ1RJT04gamF2YXNjcmlwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUERGX1dDSEFSKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBidWZsZW4pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZiAgLy8gX19jcGx1c3BsdXMKKworI2VuZGlmICAvLyBQVUJMSUNfRlBERl9KQVZBU0NSSVBUX0hfCmRpZmYgLS1naXQgYS9wdWJsaWMvZnBkZnZpZXcuaCBiL3B1YmxpYy9mcGRmdmlldy5oCmluZGV4IDZiYmMyYmYuLjU1YWIzM2MgMTAwNjQ0Ci0tLSBhL3B1YmxpYy9mcGRmdmlldy5oCisrKyBiL3B1YmxpYy9mcGRmdmlldy5oCkBAIC00NSw2ICs0NSw3IEBACiB0eXBlZGVmIHN0cnVjdCBmcGRmX2RvY3VtZW50X3RfXyogRlBERl9ET0NVTUVOVDsKIHR5cGVkZWYgc3RydWN0IGZwZGZfZm9udF90X18qIEZQREZfRk9OVDsKIHR5cGVkZWYgc3RydWN0IGZwZGZfZm9ybV9oYW5kbGVfdF9fKiBGUERGX0ZPUk1IQU5ETEU7Cit0eXBlZGVmIHN0cnVjdCBmcGRmX2phdmFzY3JpcHRfYWN0aW9uX3QqIEZQREZfSkFWQVNDUklQVF9BQ1RJT047CiB0eXBlZGVmIHN0cnVjdCBmcGRmX2xpbmtfdF9fKiBGUERGX0xJTks7CiB0eXBlZGVmIHN0cnVjdCBmcGRmX3BhZ2VfdF9fKiBGUERGX1BBR0U7CiB0eXBlZGVmIHN0cnVjdCBmcGRmX3BhZ2VsaW5rX3RfXyogRlBERl9QQUdFTElOSzsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvcmVzb3VyY2VzL2pzLmluIGIvdGVzdGluZy9yZXNvdXJjZXMvanMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QzNTEzOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvcmVzb3VyY2VzL2pzLmluCkBAIC0wLDAgKzEsODMgQEAKK3t7aGVhZGVyfX0KK3t7b2JqZWN0IDEgMH19IDw8CisgIC9UeXBlIC9DYXRhbG9nCisgIC9QYWdlcyAyIDAgUgorICAvTmFtZXMgPDwvSmF2YVNjcmlwdCA0IDAgUj4+Cis+PgorZW5kb2JqCit7e29iamVjdCAyIDB9fSA8PAorICAvVHlwZSAvUGFnZXMKKyAgL0NvdW50IDEKKyAgL0tpZHMgWzMgMCBSXQorPj4KK2VuZG9iagore3tvYmplY3QgMyAwfX0gPDwKKyAgL1R5cGUgL1BhZ2UKKyAgL1BhcmVudCAyIDAgUgorICAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQorICAvQ3JvcEJveCBbMCAwIDYxMiA3OTJdCis+PgorZW5kb2JqCit7e29iamVjdCA0IDB9fSA8PAorICAvTmFtZXMgWworICAgIChub3JtYWwpIDUgMCBSCisgICAgKGVuY29kZWRfc3VidHlwZSkgNiAwIFIKKyAgICAobm9fdHlwZSkgNyAwIFIKKyAgICAod3Jvbmd0eXBlKSA4IDAgUgorICAgICh3cm9uZ3N1YnR5cGUpIDkgMCBSCisgICAgKG5vanMpIDEwIDAgUgorICBdCis+PgorZW5kb2JqCit7e29iamVjdCA1IDB9fSA8PAorICAvVHlwZSAvQWN0aW9uCisgIC9TIC9KYXZhU2NyaXB0CisgIC9KUyAxMSAwIFIKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDYgMH19IDw8CisgIC9UeXBlIC9BY3Rpb24KKyAgL1MgL0ojNjF2IzYxU2NyaXB0CisgIC9KUyAxMSAwIFIKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDcgMH19IDw8CisgIC9TIC9KYXZhU2NyaXB0CisgIC9KUyAxMiAwIFIKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDggMH19IDw8CisgIC9UeXBlIC9hY3Rpb24KKyAgL1MgL0phdmFTY3JpcHQKKyAgL0pTIDEyIDAgUgorPj4KK2VuZG9iagore3tvYmplY3QgOSAwfX0gPDwKKyAgL1R5cGUgL0FjdGlvbgorICAvUyAvSmF2YXNjcmlwdAorICAvSlMgMTIgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCAxMCAwfX0gPDwKKyAgL1R5cGUgL0FjdGlvbgorICAvUyAvSmF2YVNjcmlwdAorPj4KK2VuZG9iagore3tvYmplY3QgMTEgMH19IDw8Cis+Pgorc3RyZWFtCithcHAuYWxlcnQoInBpbmciKTsKK2VuZHN0cmVhbQorZW5kb2JqCit7e29iamVjdCAxMiAwfX0gPDwKKz4+CitzdHJlYW0KK2FwcC5hbGVydCgicG9uZyIpOworZW5kc3RyZWFtCitlbmRvYmoKK3t7eHJlZn19Cit0cmFpbGVyIDw8CisgIC9Sb290IDEgMCBSCis+Pgore3tzdGFydHhyZWZ9fQorJSVFT0YKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvcmVzb3VyY2VzL2pzLnBkZiBiL3Rlc3RpbmcvcmVzb3VyY2VzL2pzLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2U5Yjc1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9yZXNvdXJjZXMvanMucGRmCkBAIC0wLDAgKzEsOTkgQEAKKyVQREYtMS43CisloPKk9AorMSAwIG9iaiA8PAorICAvVHlwZSAvQ2F0YWxvZworICAvUGFnZXMgMiAwIFIKKyAgL05hbWVzIDw8L0phdmFTY3JpcHQgNCAwIFI+PgorPj4KK2VuZG9iagorMiAwIG9iaiA8PAorICAvVHlwZSAvUGFnZXMKKyAgL0NvdW50IDEKKyAgL0tpZHMgWzMgMCBSXQorPj4KK2VuZG9iagorMyAwIG9iaiA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCisgIC9Dcm9wQm94IFswIDAgNjEyIDc5Ml0KKz4+CitlbmRvYmoKKzQgMCBvYmogPDwKKyAgL05hbWVzIFsKKyAgICAobm9ybWFsKSA1IDAgUgorICAgIChlbmNvZGVkX3N1YnR5cGUpIDYgMCBSCisgICAgKG5vX3R5cGUpIDcgMCBSCisgICAgKHdyb25ndHlwZSkgOCAwIFIKKyAgICAod3JvbmdzdWJ0eXBlKSA5IDAgUgorICAgIChub2pzKSAxMCAwIFIKKyAgXQorPj4KK2VuZG9iagorNSAwIG9iaiA8PAorICAvVHlwZSAvQWN0aW9uCisgIC9TIC9KYXZhU2NyaXB0CisgIC9KUyAxMSAwIFIKKz4+CitlbmRvYmoKKzYgMCBvYmogPDwKKyAgL1R5cGUgL0FjdGlvbgorICAvUyAvSiM2MXYjNjFTY3JpcHQKKyAgL0pTIDExIDAgUgorPj4KK2VuZG9iagorNyAwIG9iaiA8PAorICAvUyAvSmF2YVNjcmlwdAorICAvSlMgMTIgMCBSCis+PgorZW5kb2JqCis4IDAgb2JqIDw8CisgIC9UeXBlIC9hY3Rpb24KKyAgL1MgL0phdmFTY3JpcHQKKyAgL0pTIDEyIDAgUgorPj4KK2VuZG9iagorOSAwIG9iaiA8PAorICAvVHlwZSAvQWN0aW9uCisgIC9TIC9KYXZhc2NyaXB0CisgIC9KUyAxMiAwIFIKKz4+CitlbmRvYmoKKzEwIDAgb2JqIDw8CisgIC9UeXBlIC9BY3Rpb24KKyAgL1MgL0phdmFTY3JpcHQKKz4+CitlbmRvYmoKKzExIDAgb2JqIDw8Cis+Pgorc3RyZWFtCithcHAuYWxlcnQoInBpbmciKTsKK2VuZHN0cmVhbQorZW5kb2JqCisxMiAwIG9iaiA8PAorPj4KK3N0cmVhbQorYXBwLmFsZXJ0KCJwb25nIik7CitlbmRzdHJlYW0KK2VuZG9iagoreHJlZgorMCAxMworMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAxNSAwMDAwMCBuIAorMDAwMDAwMDA5OSAwMDAwMCBuIAorMDAwMDAwMDE2MiAwMDAwMCBuIAorMDAwMDAwMDI2NCAwMDAwMCBuIAorMDAwMDAwMDQzMiAwMDAwMCBuIAorMDAwMDAwMDQ5OSAwMDAwMCBuIAorMDAwMDAwMDU3MCAwMDAwMCBuIAorMDAwMDAwMDYyMSAwMDAwMCBuIAorMDAwMDAwMDY4OCAwMDAwMCBuIAorMDAwMDAwMDc1NSAwMDAwMCBuIAorMDAwMDAwMDgxMCAwMDAwMCBuIAorMDAwMDAwMDg2OCAwMDAwMCBuIAordHJhaWxlciA8PAorICAvUm9vdCAxIDAgUgorPj4KK3N0YXJ0eHJlZgorOTI2CislJUVPRgo=