ZGlmZiAtLWdpdCBhL2NvcmUvZnBkZmRvYy9jcGRmX2FjdGlvbi5jcHAgYi9jb3JlL2ZwZGZkb2MvY3BkZl9hY3Rpb24uY3BwCmluZGV4IDkxNjZiN2MuLmRlYjlhZjggMTAwNjQ0Ci0tLSBhL2NvcmUvZnBkZmRvYy9jcGRmX2FjdGlvbi5jcHAKKysrIGIvY29yZS9mcGRmZG9jL2NwZGZfYWN0aW9uLmNwcApAQCAtNTQsMTQgKzU0LDE1IEBACiAKIENQREZfRGVzdCBDUERGX0FjdGlvbjo6R2V0RGVzdChDUERGX0RvY3VtZW50KiBwRG9jKSBjb25zdCB7CiAgIEFjdGlvblR5cGUgdHlwZSA9IEdldFR5cGUoKTsKLSAgaWYgKHR5cGUgIT0gR29UbyAmJiB0eXBlICE9IEdvVG9SKQorICBpZiAodHlwZSAhPSBHb1RvICYmIHR5cGUgIT0gR29Ub1IgJiYgdHlwZSAhPSBHb1RvRSkgewogICAgIHJldHVybiBDUERGX0Rlc3QobnVsbHB0cik7CisgIH0KICAgcmV0dXJuIENQREZfRGVzdDo6Q3JlYXRlKHBEb2MsIG1fcERpY3QtPkdldERpcmVjdE9iamVjdEZvcigiRCIpKTsKIH0KIAogV2lkZVN0cmluZyBDUERGX0FjdGlvbjo6R2V0RmlsZVBhdGgoKSBjb25zdCB7CiAgIEFjdGlvblR5cGUgdHlwZSA9IEdldFR5cGUoKTsKLSAgaWYgKHR5cGUgIT0gR29Ub1IgJiYgdHlwZSAhPSBMYXVuY2ggJiYgdHlwZSAhPSBTdWJtaXRGb3JtICYmCisgIGlmICh0eXBlICE9IEdvVG9SICYmIHR5cGUgIT0gR29Ub0UgJiYgdHlwZSAhPSBMYXVuY2ggJiYgdHlwZSAhPSBTdWJtaXRGb3JtICYmCiAgICAgICB0eXBlICE9IEltcG9ydERhdGEpIHsKICAgICByZXR1cm4gV2lkZVN0cmluZygpOwogICB9CmRpZmYgLS1naXQgYS9mcGRmc2RrL2ZwZGZfZG9jLmNwcCBiL2ZwZGZzZGsvZnBkZl9kb2MuY3BwCmluZGV4IGU4NWU1MzAuLmI2YTVlZDQgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvZnBkZl9kb2MuY3BwCisrKyBiL2ZwZGZzZGsvZnBkZl9kb2MuY3BwCkBAIC0xNjMsNiArMTYzLDggQEAKICAgICAgIHJldHVybiBQREZBQ1RJT05fR09UTzsKICAgICBjYXNlIENQREZfQWN0aW9uOjpHb1RvUjoKICAgICAgIHJldHVybiBQREZBQ1RJT05fUkVNT1RFR09UTzsKKyAgICBjYXNlIENQREZfQWN0aW9uOjpHb1RvRToKKyAgICAgIHJldHVybiBQREZBQ1RJT05fRU1CRURERURHT1RPOwogICAgIGNhc2UgQ1BERl9BY3Rpb246OlVSSToKICAgICAgIHJldHVybiBQREZBQ1RJT05fVVJJOwogICAgIGNhc2UgQ1BERl9BY3Rpb246OkxhdW5jaDoKQEAgLTE3OSw5ICsxODEsMTAgQEAKICAgICByZXR1cm4gbnVsbHB0cjsKIAogICB1bnNpZ25lZCBsb25nIHR5cGUgPSBGUERGQWN0aW9uX0dldFR5cGUoYWN0aW9uKTsKLSAgaWYgKHR5cGUgIT0gUERGQUNUSU9OX0dPVE8gJiYgdHlwZSAhPSBQREZBQ1RJT05fUkVNT1RFR09UTykKKyAgaWYgKHR5cGUgIT0gUERGQUNUSU9OX0dPVE8gJiYgdHlwZSAhPSBQREZBQ1RJT05fUkVNT1RFR09UTyAmJgorICAgICAgdHlwZSAhPSBQREZBQ1RJT05fRU1CRURERURHT1RPKSB7CiAgICAgcmV0dXJuIG51bGxwdHI7Ci0KKyAgfQogICBDUERGX0FjdGlvbiBjQWN0aW9uKENQREZEaWN0aW9uYXJ5RnJvbUZQREZBY3Rpb24oYWN0aW9uKSk7CiAgIHJldHVybiBGUERGRGVzdEZyb21DUERGQXJyYXkoY0FjdGlvbi5HZXREZXN0KHBEb2MpLkdldEFycmF5KCkpOwogfQpAQCAtMTg5LDggKzE5MiwxMCBAQAogRlBERl9FWFBPUlQgdW5zaWduZWQgbG9uZyBGUERGX0NBTExDT05WCiBGUERGQWN0aW9uX0dldEZpbGVQYXRoKEZQREZfQUNUSU9OIGFjdGlvbiwgdm9pZCogYnVmZmVyLCB1bnNpZ25lZCBsb25nIGJ1ZmxlbikgewogICB1bnNpZ25lZCBsb25nIHR5cGUgPSBGUERGQWN0aW9uX0dldFR5cGUoYWN0aW9uKTsKLSAgaWYgKHR5cGUgIT0gUERGQUNUSU9OX1JFTU9URUdPVE8gJiYgdHlwZSAhPSBQREZBQ1RJT05fTEFVTkNIKQorICBpZiAodHlwZSAhPSBQREZBQ1RJT05fUkVNT1RFR09UTyAmJiB0eXBlICE9IFBERkFDVElPTl9FTUJFRERFREdPVE8gJiYKKyAgICAgIHR5cGUgIT0gUERGQUNUSU9OX0xBVU5DSCkgewogICAgIHJldHVybiAwOworICB9CiAKICAgQ1BERl9BY3Rpb24gY0FjdGlvbihDUERGRGljdGlvbmFyeUZyb21GUERGQWN0aW9uKGFjdGlvbikpOwogICBCeXRlU3RyaW5nIHBhdGggPSBjQWN0aW9uLkdldEZpbGVQYXRoKCkuVG9VVEY4KCk7CmRpZmYgLS1naXQgYS9mcGRmc2RrL2ZwZGZfZG9jX2VtYmVkZGVydGVzdC5jcHAgYi9mcGRmc2RrL2ZwZGZfZG9jX2VtYmVkZGVydGVzdC5jcHAKaW5kZXggNjUyZDU2NS4uMjRmNTdhOSAxMDA2NDQKLS0tIGEvZnBkZnNkay9mcGRmX2RvY19lbWJlZGRlcnRlc3QuY3BwCisrKyBiL2ZwZGZzZGsvZnBkZl9kb2NfZW1iZWRkZXJ0ZXN0LmNwcApAQCAtMzg4LDYgKzM4OCw0MyBAQAogICBVbmxvYWRQYWdlKHBhZ2UpOwogfQogCitURVNUX0YoRlBERkRvY0VtYmVkZGVyVGVzdCwgQWN0aW9uRW1iZWRkZWRHb3RvKSB7CisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgiZ290b2VfYWN0aW9uLnBkZiIpKTsKKworICBGUERGX1BBR0UgcGFnZSA9IExvYWRQYWdlKDApOworICBBU1NFUlRfVFJVRShwYWdlKTsKKworICAvLyBUaGUgdGFyZ2V0IGFjdGlvbiBpcyBuZWFybHkgdGhlIHNpemUgb2YgdGhlIHdob2xlIHBhZ2UuCisgIEZQREZfTElOSyBsaW5rID0gRlBERkxpbmtfR2V0TGlua0F0UG9pbnQocGFnZSwgMTAwLCAxMDApOworICBBU1NFUlRfVFJVRShsaW5rKTsKKworICBGUERGX0FDVElPTiBhY3Rpb24gPSBGUERGTGlua19HZXRBY3Rpb24obGluayk7CisgIEFTU0VSVF9UUlVFKGFjdGlvbik7CisgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihQREZBQ1RJT05fRU1CRURERURHT1RPKSwKKyAgICAgICAgICAgIEZQREZBY3Rpb25fR2V0VHlwZShhY3Rpb24pKTsKKworICBGUERGX0RFU1QgZGVzdCA9IEZQREZBY3Rpb25fR2V0RGVzdChkb2N1bWVudCgpLCBhY3Rpb24pOworICBFWFBFQ1RfVFJVRShkZXN0KTsKKworICB1bnNpZ25lZCBsb25nIG51bV9wYXJhbXMgPSA0MjsKKyAgRlNfRkxPQVQgcGFyYW1zWzRdOworICBzdGQ6OmZpbGxfbihwYXJhbXMsIDQsIDQyLjQyNDJmKTsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KFBERkRFU1RfVklFV19GSVQpLAorICAgICAgICAgICAgRlBERkRlc3RfR2V0VmlldyhkZXN0LCAmbnVtX3BhcmFtcywgcGFyYW1zKSk7CisgIEVYUEVDVF9FUSgwdSwgbnVtX3BhcmFtcyk7CisgIEVYUEVDVF9GTE9BVF9FUSg0Mi40MjQyZiwgcGFyYW1zWzBdKTsKKworICBjb25zdCBjaGFyIGtFeHBlY3RlZFJlc3VsdFtdID0gIkV4YW1wbGVGaWxlLnBkZiI7CisgIGNvbnN0IHVuc2lnbmVkIGxvbmcga0V4cGVjdGVkTGVuZ3RoID0gc2l6ZW9mKGtFeHBlY3RlZFJlc3VsdCk7CisgIGNoYXIgYnVmWzEwMjRdOworICB1bnNpZ25lZCBsb25nIGJ1ZnNpemUgPSBGUERGQWN0aW9uX0dldEZpbGVQYXRoKGFjdGlvbiwgbnVsbHB0ciwgMCk7CisgIEVYUEVDVF9FUShrRXhwZWN0ZWRMZW5ndGgsIGJ1ZnNpemUpOworICBFWFBFQ1RfRVEoa0V4cGVjdGVkTGVuZ3RoLCBGUERGQWN0aW9uX0dldEZpbGVQYXRoKGFjdGlvbiwgYnVmLCBidWZzaXplKSk7CisgIEVYUEVDVF9TVFJFUShrRXhwZWN0ZWRSZXN1bHQsIGJ1Zik7CisKKyAgVW5sb2FkUGFnZShwYWdlKTsKK30KKwogVEVTVF9GKEZQREZEb2NFbWJlZGRlclRlc3QsIEFjdGlvbk5vbmVzdWNoKSB7CiAgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgibm9uZXN1Y2hfYWN0aW9uLnBkZiIpKTsKIApkaWZmIC0tZ2l0IGEvcHVibGljL2ZwZGZfZG9jLmggYi9wdWJsaWMvZnBkZl9kb2MuaAppbmRleCAxYzhjZjNiLi42MzU1ZWM2IDEwMDY0NAotLS0gYS9wdWJsaWMvZnBkZl9kb2MuaAorKysgYi9wdWJsaWMvZnBkZl9kb2MuaApAQCAtMjQsNiArMjQsOCBAQAogI2RlZmluZSBQREZBQ1RJT05fVVJJIDMKIC8vIExhdW5jaCBhbiBhcHBsaWNhdGlvbiBvciBvcGVuIGEgZmlsZS4KICNkZWZpbmUgUERGQUNUSU9OX0xBVU5DSCA0CisvLyBHbyB0byBhIGRlc3RpbmF0aW9uIGluIGFuIGVtYmVkZGVkIGZpbGUuCisjZGVmaW5lIFBERkFDVElPTl9FTUJFRERFREdPVE8gNQogCiAvLyBWaWV3IGRlc3RpbmF0aW9uIGZpdCB0eXBlcy4gU2VlIHBkZm1hcmsgcmVmZXJlbmNlIHY5LCBwYWdlIDQ4LgogI2RlZmluZSBQREZERVNUX1ZJRVdfVU5LTk9XTl9NT0RFIDAKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvcmVzb3VyY2VzL2dvdG9lX2FjdGlvbi5pbiBiL3Rlc3RpbmcvcmVzb3VyY2VzL2dvdG9lX2FjdGlvbi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGI3Y2YwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9yZXNvdXJjZXMvZ290b2VfYWN0aW9uLmluCkBAIC0wLDAgKzEsNDggQEAKK3t7aGVhZGVyfX0KK3t7b2JqZWN0IDEgMH19IDw8CisgIC9UeXBlIC9DYXRhbG9nCisgIC9QYWdlcyAyIDAgUgorPj4KK2VuZG9iagore3tvYmplY3QgMiAwfX0gPDwKKyAgL1R5cGUgL1BhZ2VzCisgIC9NZWRpYUJveCBbMCAwIDIwMCAyMDBdCisgIC9Db3VudCAxCisgIC9LaWRzIFszIDAgUl0KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDMgMH19IDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL0Fubm90cyBbNCAwIFJdCis+PgorZW5kb2JqCit7e29iamVjdCA0IDB9fSA8PAorICAvVHlwZSAvQW5ub3QKKyAgL1N1YnR5cGUgL0xpbmsKKyAgL0ZUIC9UeAorICAvRmYgMjkzNjAxMjgKKyAgL0EgNSAwIFIKKyAgL1QgKHR4dE5hbWUpCisgIC9GIDQKKyAgL00gKEQ6MjAxNTA1MTQwNzA0MjYrMDUnMzAnKQorICAvUmVjdCBbMSAxIDE5OSAxOTldCisgIC9CUyAgPDwKKyAgICAvVyAxCisgICAgL1MgL1MKKyAgPj4KKyAgL0RBICgvSGVsdiAwIFRmIDAgMCAwIHJnKQorICAvViAoKQorPj4KK2VuZG9iagore3tvYmplY3QgNSAwfX0gPDwKKyAgL1MgL0dvVG9FCisgIC9EIFsxIC9GaXRdCisgIC9GIChFeGFtcGxlRmlsZS5wZGYpCis+PgorPj4KK2VuZG9iagore3t4cmVmfX0KK3t7dHJhaWxlcn19Cit7e3N0YXJ0eHJlZn19CislJUVPRgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9yZXNvdXJjZXMvZ290b2VfYWN0aW9uLnBkZiBiL3Rlc3RpbmcvcmVzb3VyY2VzL2dvdG9lX2FjdGlvbi5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1ODhlMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvcmVzb3VyY2VzL2dvdG9lX2FjdGlvbi5wZGYKQEAgLTAsMCArMSw2MCBAQAorJVBERi0xLjcKKyWg8qT0CisxIDAgb2JqIDw8CisgIC9UeXBlIC9DYXRhbG9nCisgIC9QYWdlcyAyIDAgUgorPj4KK2VuZG9iagorMiAwIG9iaiA8PAorICAvVHlwZSAvUGFnZXMKKyAgL01lZGlhQm94IFswIDAgMjAwIDIwMF0KKyAgL0NvdW50IDEKKyAgL0tpZHMgWzMgMCBSXQorPj4KK2VuZG9iagorMyAwIG9iaiA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9Bbm5vdHMgWzQgMCBSXQorPj4KK2VuZG9iagorNCAwIG9iaiA8PAorICAvVHlwZSAvQW5ub3QKKyAgL1N1YnR5cGUgL0xpbmsKKyAgL0ZUIC9UeAorICAvRmYgMjkzNjAxMjgKKyAgL0EgNSAwIFIKKyAgL1QgKHR4dE5hbWUpCisgIC9GIDQKKyAgL00gKEQ6MjAxNTA1MTQwNzA0MjYrMDUnMzAnKQorICAvUmVjdCBbMSAxIDE5OSAxOTldCisgIC9CUyAgPDwKKyAgICAvVyAxCisgICAgL1MgL1MKKyAgPj4KKyAgL0RBICgvSGVsdiAwIFRmIDAgMCAwIHJnKQorICAvViAoKQorPj4KK2VuZG9iagorNSAwIG9iaiA8PAorICAvUyAvR29Ub0UKKyAgL0QgWzEgL0ZpdF0KKyAgL0YgKEV4YW1wbGVGaWxlLnBkZikKKz4+Cis+PgorZW5kb2JqCit4cmVmCiswIDYKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMTUgMDAwMDAgbiAKKzAwMDAwMDAwNjggMDAwMDAgbiAKKzAwMDAwMDAxNTcgMDAwMDAgbiAKKzAwMDAwMDAyMjYgMDAwMDAgbiAKKzAwMDAwMDA0NjAgMDAwMDAgbiAKK3RyYWlsZXIgPDwKKyAgL1Jvb3QgMSAwIFIKKyAgL1NpemUgNgorPj4KK3N0YXJ0eHJlZgorNTMzCislJUVPRgo=